<?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>30144</bug_id>
          
          <creation_ts>2009-10-06 17:12:33 -0700</creation_ts>
          <short_desc>MIPS JIT Supports</short_desc>
          <delta_ts>2010-03-29 19:59:41 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>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>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>35892</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chao-ying Fu">fu</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>amol_6384</cc>
    
    <cc>barraclough</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>eric</cc>
    
    <cc>erlv5241</cc>
    
    <cc>kenneth</cc>
    
    <cc>loki</cc>
    
    <cc>mario.bensi</cc>
    
    <cc>mlturbon</cc>
    
    <cc>mrowe</cc>
    
    <cc>oliver</cc>
    
    <cc>ossy</cc>
    
    <cc>skyul</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zherczeg</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>152898</commentid>
    <comment_count>0</comment_count>
    <who name="Chao-ying Fu">fu</who>
    <bug_when>2009-10-06 17:12:33 -0700</bug_when>
    <thetext>Hi All,

  We would like to contribute MIPS JIT supports for JavaScriptCore.
&quot;jsc&quot; was cross-compiled by CodeSourcery toolchains which version is
&quot;mips-linux-gnu-g++ (Sourcery G++ 4.3-204) 4.3.3&quot;.

NOTE 1: The internal function calls use &quot;JAL&quot; for performance.  The PLT is requird
to call library functions.  Please check this page for more info.
http://gcc.gnu.org/onlinedocs/gcc-4.4.1/gcc/MIPS-Options.html#MIPS-Options
-mplt
-mno-plt
    Assume (do not assume) that the static and dynamic linkers support PLTs
and copy relocations. This option only affects `-mno-shared -mabicalls&apos;.
For the n64 ABI, this option has no effect without `-msym32&apos;.
    You can make -mplt the default by configuring GCC with --with-mips-plt.
The default is -mno-plt otherwise.
------------

NOTE 2: &quot;jsc&quot; was compiled for little-endian 32-bit MIPS 24Kf with O32 ABI.
Other configurations (like 64-bit CPUs with n32/n64//o64 ABI) may not work.
If someone is interested in other systems, we can try to support later.

NOTE 3: &quot;jsc&quot; was tested on top of Debian 5.0 on a MIPS 24Kf malta board with a new
library path and a new dynamic loader (that come from CodeSourcery toolchains).

  Feedback on this patch or questions are welcome.  Thanks!

Regards,
Chao-ying</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152900</commentid>
    <comment_count>1</comment_count>
      <attachid>40751</attachid>
    <who name="Chao-ying Fu">fu</who>
    <bug_when>2009-10-06 17:14:42 -0700</bug_when>
    <thetext>Created attachment 40751
MPIS JIT patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152920</commentid>
    <comment_count>2</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-10-06 18:37:19 -0700</bug_when>
    <thetext>Hi Chao-ying,

Thanks for the patch, and from a really quick glance through it looks like a great port.

I think I&apos;m likely to be the person reviewing this (unless Geoff, Olliej or Sam feel like jumping in).  Apologies, but this week is rather busy for me and a patch like this will take a while to get through.  I&apos;m afraid you&apos;re probably not going to see a full response to this until next week.

cheers,
G.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152922</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2009-10-06 18:52:22 -0700</bug_when>
    <thetext>Two minor comments to start with, one of which will make it much easier to review the patch:
1) We use four spaces for indentation rather than hard tabs.  The patch mixes both spaces and tabs.  The mix of tabs and spaces in the patch makes the indentation very hard to follow.  You can see this by clicking on the “Formatted Diff” link above.
2) The copyright notice and license header should match the file that you based your work on.  In particular the “All rights reserved.” statement has been removed from the Apple copyright notice, and one file refers to &quot;UNIVERSITY OF SZEGED” but lacks the copyright notice which the reference implies should be present.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152925</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2009-10-06 18:57:10 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; 2) The copyright notice and license header should match the file that you based
&gt; your work on.  In particular the “All rights reserved.” statement has been
&gt; removed from the Apple copyright notice, and one file refers to &quot;UNIVERSITY OF
&gt; SZEGED” but lacks the copyright notice which the reference implies should be
&gt; present.

Looking further it seems that this is based on either the x86 or ARMv7 versions of the assembler and macro assembler, in which case the reference to the University of Szeged should not be present.  You should copy the license body from the file on which the derived file is based.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152994</commentid>
    <comment_count>5</comment_count>
    <who name="Gabor Loki">loki</who>
    <bug_when>2009-10-07 02:00:04 -0700</bug_when>
    <thetext>&gt; +    #define ENABLE_JIT 1

I think you should add only JIT functionality first which is disabled by default. After JIT is landed a second patch can enable it.

&gt; +    #define ENABLE_JIT_OPTIMIZE_CALL 1
&gt; +    #define ENABLE_JIT_OPTIMIZE_NATIVE_CALL 1
&gt; +    #define ENABLE_JIT_OPTIMIZE_PROPERTY_ACCESS 1
&gt; +    #define ENABLE_JIT_OPTIMIZE_METHOD_CALLS 1

You can skip those. Each optimization will be enabled later, except it is disabled by hand.

&gt;  #define ENABLE_YARR 1
&gt;  #define ENABLE_YARR_JIT 1

Every big patch can be reviewed and/or tested easier if it is split into several part :)
for example:
- JIT only for YARR
- the remaining code of JIT
- enable YARR_JIT for specific PLATFORM
- enable JIT as well

&gt; + * Copyright (C) 2009 Apple Inc.
&gt; + * Copyright (C) 2009 MIPS Technologies, Inc.
&gt; + * All rights reserved.
...
&gt; + * THIS SOFTWARE IS PROVIDED BY UNIVERSITY OF SZEGED ``AS IS&apos;&apos; AND ANY

You should add the copyright line for University of Szeged as well. This approach is based on ARMAssembler:
- using &apos;emitInst&apos; concept
- there is no &apos;m_formatter&apos;

&gt; +	// Check each jump
&gt; +	for(Jumps::Iterator iter = m_jumps.begin(); iter != m_jumps.end(); ++iter) {
&gt; +	    int pos = (*iter);
&gt; +	    MIPSWord *insn = reinterpret_cast&lt;MIPSWord*&gt;(reinterpret_cast&lt;intptr_t&gt;(m_buffer.data()) + pos);
&gt; +	    insn = insn + 2;
&gt; +	    if(((*insn) &amp; 0xfc000000) == 0x08000000) {
&gt; +		int offset = (*insn) &amp; 0x03ffffff;
&gt; +		int old_insn_address = (int)insn;
&gt; +		int top_four_bits = (old_insn_address + 4) &gt;&gt; 28;
&gt; +		int old_target_address = (top_four_bits &lt;&lt; 28) | (offset &lt;&lt; 2);
&gt; +		int old_base = (int)m_buffer.data();
&gt; +		int new_base = (int)result;
&gt; +		int new_target_address = old_target_address - old_base + new_base;
&gt; +		int new_insn_address = old_insn_address - old_base + new_base;
&gt; +		if (((new_insn_address + 4) &gt;&gt; 28)
&gt; +		    != (new_target_address &gt;&gt; 28)) {
&gt; +		    fprintf (stderr, &quot;Error: Cannot create MIPS jump (J) due to the top four bits are different.\n&quot;);
&gt; +		}
&gt; +		*insn = 0x08000000 | ((new_target_address &gt;&gt; 2) &amp; 0x3ffffff);
&gt; +	    }

What happens if a jump cannot be created? Crash?

&gt; +	    insn = insn + 2;
&gt; +	    if (((reinterpret_cast&lt;intptr_t&gt;(insn) + 4) &gt;&gt; 28)
&gt; +		!= (reinterpret_cast&lt;intptr_t&gt;(to) &gt;&gt; 28)) {
&gt; +		fprintf(stderr, &quot;Error: Cannot create MIPS jump (J) due to the top four bits are different.\n&quot;);
&gt; +		CRASH();

Is this approach working anyway? Is there no possible way to jump to an address which is held by a 32bits register? (I am not familiar with MIPS)
I think you should add some kind of workaround for this case (for example: using constant pool?).

&gt; +    AssemblerBuffer m_trampolineBuffer;

No one uses!

&gt; +    bool supportsFloatingPoint() const
&gt; +    {
&gt; +#if defined(__mips_hard_float) &amp;&amp; !defined(__mips_single_float)
&gt; +	return true;
&gt; +#else
&gt; +	return false;
&gt; +#endif
&gt; +    }

It would be better if some kind of on-the-fly detection is used in here.
For example: see isVFPPresent() in MacroAssemblerARM.cpp.

&gt; +	__clear_cache(reinterpret_cast&lt;char*&gt;(start), reinterpret_cast&lt;char*&gt;(end));

You should avoid __clear_cache. Although it is exported from GCC, this is still an internal function. See my comments on https://bugs.webkit.org/show_bug.cgi?id=28886#c35 bug.

Well, you can still use __clear_cache if you guard this call with several GCC versions. For example:
#elif PLATFORM(MIPS) &amp;&amp; COMPILER(GCC) &amp;&amp; (GCC_VERSION == 40201 || GCC_VERSION == 40304)

Although I am not a reviewer, these were my comments on MIPS JIT.
Anyway, we know this task was not an easy one. Congratulations! Keep going on this way! :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153004</commentid>
    <comment_count>6</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2009-10-07 03:27:24 -0700</bug_when>
    <thetext>Is that patch only for mips32? Somehow you should prepare for the 64 bit systems as well to avoid a lot of changes in defines. (And drop a #error message now, if 64 bit mips is the target architecture)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153108</commentid>
    <comment_count>7</comment_count>
    <who name="Chao-ying Fu">fu</who>
    <bug_when>2009-10-07 10:42:48 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Is that patch only for mips32? Somehow you should prepare for the 64 bit
&gt; systems as well to avoid a lot of changes in defines. (And drop a #error
&gt; message now, if 64 bit mips is the target architecture)

The port is for 32-bit MIPS with O32 ABI.  If we compile for 64-bit MIPS, the JIT will not be enabled in &quot;Platform.h&quot; due to different ABI.  We can work on 64-bit MIPS, after the 32-bit MIPS port is accepted.  Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153112</commentid>
    <comment_count>8</comment_count>
    <who name="Chao-ying Fu">fu</who>
    <bug_when>2009-10-07 10:48:22 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; 2) The copyright notice and license header should match the file that you based
&gt; &gt; your work on.  In particular the “All rights reserved.” statement has been
&gt; &gt; removed from the Apple copyright notice, and one file refers to &quot;UNIVERSITY OF
&gt; &gt; SZEGED” but lacks the copyright notice which the reference implies should be
&gt; &gt; present.
&gt; 
&gt; Looking further it seems that this is based on either the x86 or ARMv7 versions
&gt; of the assembler and macro assembler, in which case the reference to the
&gt; University of Szeged should not be present.  You should copy the license body
&gt; from the file on which the derived file is based.

MIPSAssembler.h is based on X86, ARM, ARMv7 files.  I can include all copyright lines. Ex:
 * Copyright (C) 2008 Apple Inc. All rights reserved.
 * Copyright (C) 2009 Apple Inc. All rights reserved.
 * Copyright (C) 2009 University of Szeged
 * Copyright (C) 2009 MIPS Technologies Inc.

For this line:
 * THIS SOFTWARE IS PROVIDED BY ??????? ``AS IS&apos;&apos; AND ANY

Should I use Apple or Univ of Szeged?  Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153118</commentid>
    <comment_count>9</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2009-10-07 11:09:03 -0700</bug_when>
    <thetext>I would put your copyright into the first line, since you did the work. And &quot;PROVIDED BY your company.&quot; of course. Just not forget to mention the others :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153187</commentid>
    <comment_count>10</comment_count>
    <who name="Chao-ying Fu">fu</who>
    <bug_when>2009-10-07 14:35:44 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; +    #define ENABLE_JIT 1
&gt; 
&gt; I think you should add only JIT functionality first which is disabled by
&gt; default. After JIT is landed a second patch can enable it.
&gt; 
&gt; &gt; +    #define ENABLE_JIT_OPTIMIZE_CALL 1
&gt; &gt; +    #define ENABLE_JIT_OPTIMIZE_NATIVE_CALL 1
&gt; &gt; +    #define ENABLE_JIT_OPTIMIZE_PROPERTY_ACCESS 1
&gt; &gt; +    #define ENABLE_JIT_OPTIMIZE_METHOD_CALLS 1
&gt; 
&gt; You can skip those. Each optimization will be enabled later, except it is
&gt; disabled by hand.

  Yes.

&gt; Every big patch can be reviewed and/or tested easier if it is split into
&gt; several part :)
&gt; for example:
&gt; - JIT only for YARR
&gt; - the remaining code of JIT
&gt; - enable YARR_JIT for specific PLATFORM
&gt; - enable JIT as well

  The main part is two files: MIPSAssembler.h and MacroAssemblerMIPS.h.  Other files are only modified to define something for MIPS.
&gt; 
&gt; &gt; + * Copyright (C) 2009 Apple Inc.
&gt; &gt; + * Copyright (C) 2009 MIPS Technologies, Inc.
&gt; &gt; + * All rights reserved.
&gt; ...
&gt; &gt; + * THIS SOFTWARE IS PROVIDED BY UNIVERSITY OF SZEGED ``AS IS&apos;&apos; AND ANY
&gt; 
&gt; You should add the copyright line for University of Szeged as well. This
&gt; approach is based on ARMAssembler:
&gt; - using &apos;emitInst&apos; concept
&gt; - there is no &apos;m_formatter&apos;

Yes.


&gt; 
&gt; &gt; +	// Check each jump
&gt; &gt; +	for(Jumps::Iterator iter = m_jumps.begin(); iter != m_jumps.end(); ++iter) {
&gt; &gt; +	    int pos = (*iter);
&gt; &gt; +	    MIPSWord *insn = reinterpret_cast&lt;MIPSWord*&gt;(reinterpret_cast&lt;intptr_t&gt;(m_buffer.data()) + pos);
&gt; &gt; +	    insn = insn + 2;
&gt; &gt; +	    if(((*insn) &amp; 0xfc000000) == 0x08000000) {
&gt; &gt; +		int offset = (*insn) &amp; 0x03ffffff;
&gt; &gt; +		int old_insn_address = (int)insn;
&gt; &gt; +		int top_four_bits = (old_insn_address + 4) &gt;&gt; 28;
&gt; &gt; +		int old_target_address = (top_four_bits &lt;&lt; 28) | (offset &lt;&lt; 2);
&gt; &gt; +		int old_base = (int)m_buffer.data();
&gt; &gt; +		int new_base = (int)result;
&gt; &gt; +		int new_target_address = old_target_address - old_base + new_base;
&gt; &gt; +		int new_insn_address = old_insn_address - old_base + new_base;
&gt; &gt; +		if (((new_insn_address + 4) &gt;&gt; 28)
&gt; &gt; +		    != (new_target_address &gt;&gt; 28)) {
&gt; &gt; +		    fprintf (stderr, &quot;Error: Cannot create MIPS jump (J) due to the top four bits are different.\n&quot;);
&gt; &gt; +		}
&gt; &gt; +		*insn = 0x08000000 | ((new_target_address &gt;&gt; 2) &amp; 0x3ffffff);
&gt; &gt; +	    }
&gt; 
&gt; What happens if a jump cannot be created? Crash?

  Yes, if we cannot use &quot;J&quot;, it will crash.
But this type of jump can cover a 28-bit range of targets.  From running sunspider and v8 tests, 28-bit jumps seem ok.

&gt; 
&gt; &gt; +	    insn = insn + 2;
&gt; &gt; +	    if (((reinterpret_cast&lt;intptr_t&gt;(insn) + 4) &gt;&gt; 28)
&gt; &gt; +		!= (reinterpret_cast&lt;intptr_t&gt;(to) &gt;&gt; 28)) {
&gt; &gt; +		fprintf(stderr, &quot;Error: Cannot create MIPS jump (J) due to the top four bits are different.\n&quot;);
&gt; &gt; +		CRASH();
&gt; 
&gt; Is this approach working anyway? Is there no possible way to jump to an address
&gt; which is held by a 32bits register? (I am not familiar with MIPS)
&gt; I think you should add some kind of workaround for this case (for example:
&gt; using constant pool?).

  If we do need 32-bit jumps, we can create Jump Register (&quot;JR&quot;) with &quot;LUI + ORI&quot; for 32-bit target addresses.  This will cost four extra instructions, compared to two extra instructions for Jump (&quot;J&quot;).  This is not implemented, however.
  I will think about using constant pool to make the handling of branches more robust.

&gt; 
&gt; &gt; +    AssemblerBuffer m_trampolineBuffer;
&gt; 
&gt; No one uses!

  Yes.  I will delete it.


&gt; 
&gt; &gt; +    bool supportsFloatingPoint() const
&gt; &gt; +    {
&gt; &gt; +#if defined(__mips_hard_float) &amp;&amp; !defined(__mips_single_float)
&gt; &gt; +	return true;
&gt; &gt; +#else
&gt; &gt; +	return false;
&gt; &gt; +#endif
&gt; &gt; +    }
&gt; 
&gt; It would be better if some kind of on-the-fly detection is used in here.
&gt; For example: see isVFPPresent() in MacroAssemblerARM.cpp.

  I will try to query the system to know if floating-point can be used.
For now, I assume users know their systems to provide compiler flags.

&gt; 
&gt; &gt; +	__clear_cache(reinterpret_cast&lt;char*&gt;(start), reinterpret_cast&lt;char*&gt;(end));
&gt; 
&gt; You should avoid __clear_cache. Although it is exported from GCC, this is still
&gt; an internal function. See my comments on
&gt; https://bugs.webkit.org/show_bug.cgi?id=28886#c35 bug.
&gt; 
&gt; Well, you can still use __clear_cache if you guard this call with several GCC
&gt; versions. For example:
&gt; #elif PLATFORM(MIPS) &amp;&amp; COMPILER(GCC) &amp;&amp; (GCC_VERSION == 40201 || GCC_VERSION
&gt; == 40304)

  Yes.  I will add the guard to check GCC and its version.

&gt; Although I am not a reviewer, these were my comments on MIPS JIT.
&gt; Anyway, we know this task was not an easy one. Congratulations! Keep going on
&gt; this way! :)

  Thanks a lot for your review.  :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153190</commentid>
    <comment_count>11</comment_count>
      <attachid>40825</attachid>
    <who name="Chao-ying Fu">fu</who>
    <bug_when>2009-10-07 14:53:52 -0700</bug_when>
    <thetext>Created attachment 40825
MIPS JIT Patch 20091007

  I updated the patch with space instead of tab,
and updated copyright headers for new files.
Minor changes in some files are based on the review.  Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153234</commentid>
    <comment_count>12</comment_count>
      <attachid>40825</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2009-10-07 18:08:09 -0700</bug_when>
    <thetext>Comment on attachment 40825
MIPS JIT Patch 20091007

(In reply to comment #11)
&gt; Created an attachment (id=40825) [details]
&gt; MIPS JIT Patch 20091007
&gt; 
&gt;   I updated the patch with space instead of tab,
&gt; and updated copyright headers for new files.
&gt; Minor changes in some files are based on the review.  Thanks!

Please set the &quot;review&quot; flag to &quot;?&quot; (not &quot;+&quot;) if you want it to be reviewed.

Setting the &quot;review&quot; flag to &quot;+&quot; means the patch has been reviewed by a specific WebKit reviewer and is ready to be committed.  More details about WebKit reviewers here:  &lt;http://webkit.org/coding/commit-review-policy.html&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153309</commentid>
    <comment_count>13</comment_count>
    <who name="Gabor Loki">loki</who>
    <bug_when>2009-10-08 00:18:05 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; &gt; &gt; +		    fprintf (stderr, &quot;Error: Cannot create MIPS jump (J) due to the top four bits are different.\n&quot;);
&gt; &gt; &gt; +		}
&gt; &gt; &gt; +		*insn = 0x08000000 | ((new_target_address &gt;&gt; 2) &amp; 0x3ffffff);
&gt; &gt; &gt; +	    }
&gt; &gt; 
&gt; &gt; What happens if a jump cannot be created? Crash?
&gt; 
&gt;   Yes, if we cannot use &quot;J&quot;, it will crash.
&gt; But this type of jump can cover a 28-bit range of targets.  From running
&gt; sunspider and v8 tests, 28-bit jumps seem ok.

The JavaScriptCore tests are essential. Did you test with ./WebKitTools/Scripts/run-javascriptcore-tests?

In additional, you should test at least with ./WebKitTools/Scripts/run-webkit-tests LayoutTests/fast/js as well! The new JS regression tests were landed there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153522</commentid>
    <comment_count>14</comment_count>
    <who name="Chao-ying Fu">fu</who>
    <bug_when>2009-10-08 13:56:11 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #10)
&gt; &gt; &gt; &gt; +		    fprintf (stderr, &quot;Error: Cannot create MIPS jump (J) due to the top four bits are different.\n&quot;);
&gt; &gt; &gt; &gt; +		}
&gt; &gt; &gt; &gt; +		*insn = 0x08000000 | ((new_target_address &gt;&gt; 2) &amp; 0x3ffffff);
&gt; &gt; &gt; &gt; +	    }
&gt; &gt; &gt; 
&gt; &gt; &gt; What happens if a jump cannot be created? Crash?
&gt; &gt; 
&gt; &gt;   Yes, if we cannot use &quot;J&quot;, it will crash.
&gt; &gt; But this type of jump can cover a 28-bit range of targets.  From running
&gt; &gt; sunspider and v8 tests, 28-bit jumps seem ok.
&gt; 
&gt; The JavaScriptCore tests are essential. Did you test with
&gt; ./WebKitTools/Scripts/run-javascriptcore-tests?
&gt; 
&gt; In additional, you should test at least with
&gt; ./WebKitTools/Scripts/run-webkit-tests LayoutTests/fast/js as well! The new JS
&gt; regression tests were landed there.

Thank you for the testing information!  I will run these two tests and verify the correctness.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153794</commentid>
    <comment_count>15</comment_count>
    <who name="Chao-ying Fu">fu</who>
    <bug_when>2009-10-09 16:14:58 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #13)
&gt; &gt; (In reply to comment #10)
&gt; &gt; &gt; &gt; &gt; +		    fprintf (stderr, &quot;Error: Cannot create MIPS jump (J) due to the top four bits are different.\n&quot;);
&gt; &gt; &gt; &gt; &gt; +		}
&gt; &gt; &gt; &gt; &gt; +		*insn = 0x08000000 | ((new_target_address &gt;&gt; 2) &amp; 0x3ffffff);
&gt; &gt; &gt; &gt; &gt; +	    }
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; What happens if a jump cannot be created? Crash?
&gt; &gt; &gt; 
&gt; &gt; &gt;   Yes, if we cannot use &quot;J&quot;, it will crash.
&gt; &gt; &gt; But this type of jump can cover a 28-bit range of targets.  From running
&gt; &gt; &gt; sunspider and v8 tests, 28-bit jumps seem ok.
&gt; &gt; 
&gt; &gt; The JavaScriptCore tests are essential. Did you test with
&gt; &gt; ./WebKitTools/Scripts/run-javascriptcore-tests?
&gt; &gt; 
&gt; &gt; In additional, you should test at least with
&gt; &gt; ./WebKitTools/Scripts/run-webkit-tests LayoutTests/fast/js as well! The new JS
&gt; &gt; regression tests were landed there.
&gt; 
&gt; Thank you for the testing information!  I will run these two tests and verify
&gt; the correctness.

I finished ./WebKitTools/Scripts/run-javascriptcore-tests .
The results are as follows.
        ecma/GlobalObject/15.1.2.3-2.js
        ecma_3/RegExp/regress-72964.js
        js1_5/Regress/regress-159334.js

3 regressions found.
0 tests fixed.

I debugged the first two tests and fixed them.
The first test failed due to that we need to relocate MIPS jumps after the buffer grows.
The second test failed due to that we need to use zero-extended load to load 16-bit data.
The third test failed under both non-JIT and JIT versions.  I will debug it next week.

I will attached a new patch that fixed the first two tests.  Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153798</commentid>
    <comment_count>16</comment_count>
      <attachid>40971</attachid>
    <who name="Chao-ying Fu">fu</who>
    <bug_when>2009-10-09 16:17:10 -0700</bug_when>
    <thetext>Created attachment 40971
MIPS JIT Patch 20091009

This patch fixed two regressions.
ecma/GlobalObject/15.1.2.3-2.js
ecma_3/RegExp/regress-72964.js</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>154221</commentid>
    <comment_count>17</comment_count>
      <attachid>41075</attachid>
    <who name="Chao-ying Fu">fu</who>
    <bug_when>2009-10-12 17:59:12 -0700</bug_when>
    <thetext>Created attachment 41075
MIPS JIT Patch 20091012

I svn-updated my JavaScriptCore directory and generated a new patch.

Changes in MacroAssemblerMIPS.h:
1. Added unaligned load and branch functions.
2. Fixed LUI to use (offset + 0x8000)&gt;&gt;16 in many places.
3. Used m_isPointer to make sure that two instructions are generated.
4. Used move() functions in all places.

Changes in MIPSAssembler.h:
1. Added lwl, lwr.
2. Fixed relocateJumps() to check pos that has 3 more instructions.

The testing showed new regressions as follows.
        ecma/Date/15.9.5.10-10.js
        ecma/Date/15.9.5.10-2.js
        ecma/Date/15.9.5.10-6.js
        ecma/Date/15.9.5.10-7.js
        ecma/Date/15.9.5.10-8.js
        ecma/Date/15.9.5.10-9.js
        ecma/Date/15.9.5.25-1.js
        ecma/Date/15.9.5.26-1.js
        ecma/Date/15.9.5.28-1.js
        ecma/Date/15.9.5.30-1.js
        ecma/Date/15.9.5.31-1.js
        ecma/Date/15.9.5.34-1.js
        ecma/Date/15.9.5.36-4.js
        ecma/Date/15.9.5.36-5.js
        ecma/Date/15.9.5.36-6.js
        ecma/Date/15.9.5.36-7.js
        ecma/Date/15.9.5.37-4.js
        ecma/Date/15.9.5.37-5.js

I need to debug it later.  Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>155905</commentid>
    <comment_count>18</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-10-19 14:28:40 -0700</bug_when>
    <thetext>I used to joke about someone porting WebKit to MIPS.  I&apos;m not sure if I should laugh or cry about this bug.  Either way, Oliver, Gavin or Geoff are going to be your best reviewers for JIT code in the end.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>157242</commentid>
    <comment_count>19</comment_count>
      <attachid>41741</attachid>
    <who name="Chao-ying Fu">fu</who>
    <bug_when>2009-10-23 12:07:35 -0700</bug_when>
    <thetext>Created attachment 41741
MIPS JIT Patch 20091022

I updated the patch with some changes.

1. Added better PIC code handling in the trampoline.
2. Removed CRASH() by supporting 32-bit jumps and function calls.
3. Cleaned up source files according to the coding style.

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158680</commentid>
    <comment_count>20</comment_count>
      <attachid>41741</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-10-28 13:19:22 -0700</bug_when>
    <thetext>Comment on attachment 41741
MIPS JIT Patch 20091022

I am just doing a cursory review -- Gavin should probably look at this in more detail.

I find the comments thaat repeat the funciton name to be superfluous, eg
 257     void lui(RegisterID rt, int imm)
 258     {
 259         /* lui */
 260         emitInst(0x3c000000 | (rt &lt;&lt; OP_SH_RT) | (imm &amp; 0xffff));
 261     }

The comment /* lui */ contains no useful information so should be removed.

Same applies for all the other cases (addiu, addu, subu, ... )

I don&apos;t really like the repeated 
 #if __mips == 1
         nop();
 #endif

And would prefer a function akin to

void loadDelayNop()
{
#if __mips == 1
         nop();
#endif
}

Or whatever the name should be (i&apos;m guessing about the name, it&apos;s been years since i did anything at all with mips) to give it most clarity, and then replace those conditional nops with an anconditional call to the helper function.

I have to disappear for a bit -- i&apos;m up to assembler/MacroAssemblerMIPS.h -- overall this patch looks really good though.  Possibly the first large patch from a new contributor to have (so far) perfect code style :D

--Oliver</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158960</commentid>
    <comment_count>21</comment_count>
    <who name="Chao-ying Fu">fu</who>
    <bug_when>2009-10-29 10:55:03 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (From update of attachment 41741 [details])
&gt; I am just doing a cursory review -- Gavin should probably look at this in more
&gt; detail.
&gt; 
&gt; I find the comments thaat repeat the funciton name to be superfluous, eg
&gt;  257     void lui(RegisterID rt, int imm)
&gt;  258     {
&gt;  259         /* lui */
&gt;  260         emitInst(0x3c000000 | (rt &lt;&lt; OP_SH_RT) | (imm &amp; 0xffff));
&gt;  261     }
&gt; 
&gt; The comment /* lui */ contains no useful information so should be removed.
&gt; 
&gt; Same applies for all the other cases (addiu, addu, subu, ... )

  Yes.  I will remove all the cases in the new patch.

&gt; 
&gt; I don&apos;t really like the repeated 
&gt;  #if __mips == 1
&gt;          nop();
&gt;  #endif
&gt; 
&gt; And would prefer a function akin to
&gt; 
&gt; void loadDelayNop()
&gt; {
&gt; #if __mips == 1
&gt;          nop();
&gt; #endif
&gt; }
&gt; 
&gt; Or whatever the name should be (i&apos;m guessing about the name, it&apos;s been years
&gt; since i did anything at all with mips) to give it most clarity, and then
&gt; replace those conditional nops with an anconditional call to the helper
&gt; function.

  This is a good idea.  I will create loadDelayNop() and copDelayNop() for mips1 in the new patch.

&gt; 
&gt; I have to disappear for a bit -- i&apos;m up to assembler/MacroAssemblerMIPS.h --
&gt; overall this patch looks really good though.  Possibly the first large patch
&gt; from a new contributor to have (so far) perfect code style :D
&gt; 
&gt; --Oliver

  Thanks a lot for your review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158967</commentid>
    <comment_count>22</comment_count>
      <attachid>42114</attachid>
    <who name="Chao-ying Fu">fu</who>
    <bug_when>2009-10-29 11:04:51 -0700</bug_when>
    <thetext>Created attachment 42114
MIPS JIT Patch 20091029

I updated the patch based on the review to remove redundant comments
and to use loadDelayNop() and copDelayNop().

Other changes in this patch:
1. For __clear_cache, we test (GCC_VERSION &lt; 40500) to perform the workaround.
Since GCC 4.5 has the fix for MIPS, we don&apos;t need the workaround.

2. In linkWithOffset, we check &quot;*(insn + 2) != 0x10000003&quot; to generate j or lui/ori/jr
for correctness.

3. Extra () are removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159175</commentid>
    <comment_count>23</comment_count>
      <attachid>42114</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-10-29 18:06:02 -0700</bug_when>
    <thetext>Comment on attachment 42114
MIPS JIT Patch 20091029

Hi Chao-ying,

First of all, many apologies for the delay in looking at this – busy couple of weeks.  This looks like a great patch.

As I think Gabor or Zoltan may have already commented, we have usually landed new ports incrementally to try to separate new code from changes to existing code.  This both makes it easier to review, and makes it easier to track down problems later if change were to introduce a problem.  I&apos;d suggest it would be good to do so in this case too – it should not significantly slow down the progress of getting this in.  So if you could put up a patch for review that reverts all changes to the JIT (and obviously also doesn&apos;t set ENABLE_JIT!) that would be great – the first patch should just enable the YARR regex engine on MIPS.

In the past we have also broken up the patch that enables the JIT to separately enable the JIT without optimization, then enable the optimizations one by one.  This may not be necessary this time, since landing the last couple of ports also required changes to make the JIT more portable – the diff needed to enable the JIT on MIPS looks small enough that we can probably land the rest as one piece.


&gt; Index: wtf/Platform.h
&gt; ===================================================================
&gt; --- wtf/Platform.h	(revision 49926)
&gt; +++ wtf/Platform.h	(working copy)
&gt;
&gt; @@ -225,6 +225,15 @@
&gt;   || (PLATFORM(X86_64) &amp;&amp; PLATFORM(MAC)) \
&gt;   /* Under development, temporarily disabled until 16Mb link range limit in assembler is fixed. */ \
&gt;   || (PLATFORM(ARM_THUMB2) &amp;&amp; PLATFORM(IPHONE) &amp;&amp; 0) \
&gt; - || (PLATFORM(X86) &amp;&amp; PLATFORM(WIN))
&gt; + || (PLATFORM(X86) &amp;&amp; PLATFORM(WIN)) \
&gt; + || PLATFORM(MIPS)
&gt;  #define ENABLE_YARR 1
&gt;  #define ENABLE_YARR_JIT 1
&gt;  #endif

We tend to only enable the JIT platform by platform, and only on platforms we&apos;ve tested.  Also, the Linux ports don&apos;t enable features in Platform.h – I think GTK &amp; QT ports use the files /configure.ac and /JavaScriptCore/JavaScriptCore.pri.  What platforms have you been testing on? - if linux, I&apos;d suggest sticking with the other Linux ports.  If other, feel free to make the change here in Platform.h, but only do so for specific OSes.

&gt; Index: assembler/MIPSAssembler.h
&gt; ===================================================================
&gt; +    JmpSrc jmp()
&gt; +    {
&gt; +        m_jumps.append(m_buffer.size());
&gt; +
&gt; +        beq(MIPSRegisters::zero, MIPSRegisters::zero, 0);
&gt; +        nop();
&gt; +        /* We need four words for relaxation.  */
&gt; +        beq(MIPSRegisters::zero, MIPSRegisters::zero, 3); // Jump over nops
&gt; +        nop();
&gt; +        nop();
&gt; +        nop();
&gt; +        return JmpSrc(m_buffer.size());
&gt; +    }
&gt; +
&gt; +    JmpSrc branch_eq(RegisterID rs, RegisterID rt)
&gt; +    {
&gt; +        m_jumps.append(m_buffer.size());
&gt; +
&gt; +        beq(rs, rt, 0);
&gt; +        nop();
&gt; +        /* We need four words for relaxation.  */
&gt; +        beq(MIPSRegisters::zero, MIPSRegisters::zero, 3); // Jump over nops
&gt; +        nop();
&gt; +        nop();
&gt; +        nop();
&gt; +        return JmpSrc(m_buffer.size());
&gt; +    }
&gt; +
&gt; +    JmpSrc branch_ne(RegisterID rs, RegisterID rt)
&gt; +    {
&gt; +        m_jumps.append(m_buffer.size());
&gt; +
&gt; +        bne(rs, rt, 0);
&gt; +        nop();
&gt; +        /* We need four words for relaxation.  */
&gt; +        beq(MIPSRegisters::zero, MIPSRegisters::zero, 3); // Jump over nops
&gt; +        nop();
&gt; +        nop();
&gt; +        nop();
&gt; +        return JmpSrc(m_buffer.size());
&gt; +    }
&gt; +
&gt; +    JmpSrc bc1t()
&gt; +    {
&gt; +        emitInst(0x45010000);
&gt; +        nop();
&gt; +        /* We need four words for relaxation.  */
&gt; +        beq(MIPSRegisters::zero, MIPSRegisters::zero, 3); // Jump over nops
&gt; +        nop();
&gt; +        nop();
&gt; +        nop();
&gt; +        return JmpSrc(m_buffer.size());
&gt; +    }
&gt; +
&gt; +    JmpSrc far_function_call()
&gt; +    {
&gt; +        lui(MIPSRegisters::t9, 0);
&gt; +        ori(MIPSRegisters::t9, MIPSRegisters::t9, 0);
&gt; +        jalr(MIPSRegisters::t9);
&gt; +        nop();
&gt; +        return JmpSrc(m_buffer.size());
&gt; +    }
&gt; +
&gt; +    JmpSrc function_call()
&gt; +    {
&gt; +        /* We need two words for relaxation.  */
&gt; +        nop();
&gt; +        nop();
&gt; +        jal();
&gt; +        nop();
&gt; +        return JmpSrc(m_buffer.size());
&gt; +    }

These shouldn&apos;t really be in the Assembler layer.  The goal behind the Assembler is that this should really have a 1-to-1 mapping to the instruction set, and the MacroAssembler should support a richer set of operations, common across architectures.  We&apos;re not entirely strict about this, and I think from a practical perspective having the assembler automatically insert nops after loads and coprocessor moves on MIPS1 is probably not a terrible idea – though even this I&apos;m not 100% comfortable about, this could be in the MacroAssembler too.  But the assembler should really be usable to plant jumps for use with code generation other than from the MacroAssembler, and in contexts where all code will be known to fall within a smaller region of memory, and jumps need never be relaxed to 32-bit range.  So I&apos;d suggest these functions should really be moved up to the MacroAssembler.

Unfortunately the layering is currently a little broken in the assemblers for other architectures, in this area.  The linking and repatching of jumps and calls currently is handled by the Assembler in a manner that has knowledge of the instruction sequences used by the MacroAssembler.  We&apos;ve started refactoring the code to fix this, so the linking and repatching now passes through the MacroAssemblerARCH layer, and the intention is that all knowledge of the set of instructions used by the MacroAssembler will be captured here – so, for example note that MacroAssemblerX86_64::linkCall is already responsible for offseting the label to find the immediate to patch for far calls.  But cleaning all this up is clearly a work in progress.


&gt; +    void* executableCopy(ExecutablePool* allocator)
&gt; +    {
&gt; +        int size = m_buffer.size();
&gt; +        if (!size)
&gt; +            return 0;
&gt; +
&gt; +        void* result = allocator-&gt;alloc(size);
&gt; +        if (!result)
&gt; +            return 0;
&gt; +
&gt; +        ExecutableAllocator::makeWritable(result, size);
&gt; +        memcpy(result, m_buffer.data(), m_buffer.size());
&gt;

^^^ This seems to just replicate functionality for m_buffer.executableCopy(allocator); is there a reason you can&apos;t just call that?

 +        relocateJumps(m_buffer.data(), result);
&gt; +        return result;
&gt; +    }


In MacroAssemblerARMv7.h -&gt;

&gt;&gt; , int fixed = 0)

The one big problem I have in this patch is adding the &quot;, int fixed = 0)&quot; argument to all these function.  We shouldn&apos;t be adding an extra parameter to these functions on one platform – we really need this interface to line up across the architectures (this interface is not fixed, and if it differs across platforms it will be difficult to change).  I&apos;d suggest this can be changed really easily, by just using a member variable - add a member bool m_fixedWidthImmedaites, initialize this to false, set it to true in the places you set fixed = 1;, and check m_fixedWidthImmedaites instead of fixed in the places you check the value.

&gt; +    Call tailRecursiveCall()
&gt; +    {
&gt; +        // Like a normal call, but don&apos;t link.

Whilst I understand this is completely correct, I think this comment has the potential to be confusing, since in the context of calls we&apos;re usually use to word &apos;link&apos; to mean static link the JIT generated code.  Being explicit and saying something like &quot;but don&apos;t set the link register&quot; might just avoid any confusion.

&gt; Index: jit/ExecutableAllocator.h
&gt; ===================================================================
&gt; +        int start = reinterpret_cast&lt;intptr_t&gt;(code) &amp; (-line_size);
&quot;int foo = reinterpret_cast&lt;intptr_t&gt;&quot; should probably be &quot;intptr_t foo = reinterpret_cast&lt;intptr_t&gt;&quot;. :-)


I&apos;ll take another look over the whole patch when you&apos;re addressed these issues, but nothing else stood out to me, all looks good otherwise.

cheers,
G.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159862</commentid>
    <comment_count>24</comment_count>
    <who name="Chao-ying Fu">fu</who>
    <bug_when>2009-11-02 11:39:04 -0800</bug_when>
    <thetext>Hi Gavin,

  Thanks for your review!  I will try to address the issues you raised.
And I will split the patch into parts: YARR, YARR_JIT, JIT without optimization, JIT with optimizations.  I am busy this week, so maybe next week I will post new patches.  Thanks again!

Regards,
Chao-ying</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160979</commentid>
    <comment_count>25</comment_count>
      <attachid>42603</attachid>
    <who name="Chao-ying Fu">fu</who>
    <bug_when>2009-11-05 15:20:31 -0800</bug_when>
    <thetext>Created attachment 42603
MIPS Patch Part 1 for YARR

Hi,

  I started to split the patch.  Here is the first patch to enable YARR.
The MIPS platform was tested with Qt on top of Debian Linux.
Thus, MIPS defines are inside PLATFORM(QT).
Note: ENABLE_YARR_JIT is 0 and ENABLE_JIT is 0.
Thanks!

Regards,
Chao-ying</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161008</commentid>
    <comment_count>26</comment_count>
      <attachid>42608</attachid>
    <who name="Chao-ying Fu">fu</who>
    <bug_when>2009-11-05 16:10:00 -0800</bug_when>
    <thetext>Created attachment 42608
MIPS Patch Part 1 for YARR (new)

The previous patch put the test into a wrong location to enable YARR for MIPS.
Fixed in the new patch.  Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161109</commentid>
    <comment_count>27</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-11-06 01:40:01 -0800</bug_when>
    <thetext>Just a quick warning, we&apos;re now specified that the MacroAssembler shift methods must clamp the shift amount to the range 0..31 - see http://trac.webkit.org/changeset/50595 .

On x86 this requires no additional code, since the operand to the shift is implicitly clamped to this range.  On the ARM platforms we plant an extra arm instruction – I don&apos;t know what the specified behaviour is on MIPS, you may need to do the same?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161170</commentid>
    <comment_count>28</comment_count>
    <who name="Chao-ying Fu">fu</who>
    <bug_when>2009-11-06 10:40:01 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; Just a quick warning, we&apos;re now specified that the MacroAssembler shift methods
&gt; must clamp the shift amount to the range 0..31 - see
&gt; http://trac.webkit.org/changeset/50595 .
&gt; 
&gt; On x86 this requires no additional code, since the operand to the shift is
&gt; implicitly clamped to this range.  On the ARM platforms we plant an extra arm
&gt; instruction – I don&apos;t know what the specified behaviour is on MIPS, you may
&gt; need to do the same?

On MIPS, the shift amount is clamped into 0..31 (from bit 0 to bit 4 of a rs register) automatically.  So, no extra code is required.  Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161281</commentid>
    <comment_count>29</comment_count>
      <attachid>42679</attachid>
    <who name="Chao-ying Fu">fu</who>
    <bug_when>2009-11-06 17:46:36 -0800</bug_when>
    <thetext>Created attachment 42679
MIPS JIT Patch 20091106

  I ran &quot;svn update&quot; and fixed some issues today.

ChangeLog:
1. Moved some code from MIPSAssembler.h to MacroAssemblerMIPS.h,
   based on Gavin&apos;s review.
2. Removed the parameter (int fixed = 0) in MacroAssemblerMIPS.h.
   Created &quot;bool m_fixedWidth&quot;, instead.
3. Updated DoubleCondition to have *Unordered.
4. Updated cacheFlush() to call _flush_cache(), when __clear_cache()
   cannot be provided by GCC which version is under version 4.3.0.
5. Made some other changes based on Gavin&apos;s review.

  The only remaining issue is to move linkCall to MacroAssemblerMIPS.h.

  I know that I still need to create small patches to be accepted step by step.
Thanks!

Regards,
Chao-ying</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163561</commentid>
    <comment_count>30</comment_count>
      <attachid>42608</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-11-13 15:42:26 -0800</bug_when>
    <thetext>Comment on attachment 42608
MIPS Patch Part 1 for YARR (new)

Hey Chao-ying,

Sorry for the delay, I&apos;m going to r- this, let me explain why.

I&apos;m guessing that you&apos;re assuming (quite reasonably) that YARR-JIT is an extension to YARR, but this is not currently the case (although, slightly confusingly, YARR_JIT does require YARR to be defined. :-/).  While both share some common underpinnings, the two are currently used exclusively.  We hope to use YARR to replace use of our port of PCRE on platforms for which we don&apos;t have JIT support (an ever diminishing number, once MIPS joins the fold with JIT support!) - however the YARR interpreter is currently a performance regression versus PCRE.  YARR-JIT currently supports a subset of the JS-regex syntax, and may need to fallback to use an interpreter to execute certain regular expressions.  However due to PCRE having a higher performance we currently fallback to PCRE rather than YARR (interpreter).

It is our intention both to complete YARR-JIT, so there is no fallback, and also to improve the performance of YARR (interpreter), so that PCRE can be fully deprecated.

For the time being, I suggest you skip over this step of enabling YARR without the JIT, and go straight to enabling YARR-JIT.

cheers,
G.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163587</commentid>
    <comment_count>31</comment_count>
      <attachid>42679</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-11-13 16:32:49 -0800</bug_when>
    <thetext>Comment on attachment 42679
MIPS JIT Patch 20091106

This patch basically looks good to go to me – other than the fact that I&apos;d still like to see the JIT changes (other than jit/ExecutableAllocator.h)  split out and landed in a separate patch.

My only comments relate to a couple of empty if-clauses in your patch:

&gt; +    void or32(Imm32 imm, RegisterID dest)
&gt; +    {
&gt; +        if (!imm.m_isPointer &amp;&amp; imm.m_value == 0 &amp;&amp; !m_fixedWidth)
&gt; +            ;
&gt; +        else if (!imm.m_isPointer &amp;&amp; imm.m_value &gt; 0 &amp;&amp; imm.m_value &lt; 65535
&gt; +                 &amp;&amp; !m_fixedWidth)
&gt; +            m_assembler.ori(dest, dest, imm.m_value);
&gt; +        else {
&gt; +            /*
&gt; +                li      dataTemp, imm
&gt; +                or      dest, dest, dataTemp
&gt; +            */
&gt; +            move(imm, dataTempRegister);
&gt; +            m_assembler.or_insn(dest, dest, dataTempRegister);
&gt; +        }
&gt; +    }

In webkit we tend to favour early returns in complex ifs like this, something more like:

    if (!imm.m_isPointer &amp;&amp; imm.m_value == 0 &amp;&amp; !m_fixedWidth)
        return;

    if (!imm.m_isPointer &amp;&amp; imm.m_value &gt; 0 &amp;&amp; imm.m_value &lt; 65535 &amp;&amp; !m_fixedWidth) {
        m_assembler.ori(dest, dest, imm.m_value);
        return;
    }

    /*
        li      dataTemp, imm
        or      dest, dest, dataTemp
    */
    move(imm, dataTempRegister);
    m_assembler.or_insn(dest, dest, dataTempRegister);

&gt; +    void move(RegisterID src, RegisterID dest)
&gt; +    {
&gt; +        if (src == dest &amp;&amp; !m_fixedWidth)
&gt; +            ;
&gt; +        else
&gt; +            m_assembler.move(dest, src);
&gt; +    }

Same here (and two other functions also), or just invert the logic in the if &amp; do away with the else case.

Other than these minor quibbles the non-JIT code all looks fine to me, but this is a lot of fresh code, so I&apos;ve asked oliver to pass a second set of eyes over it.

cheers,
G.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167753</commentid>
    <comment_count>32</comment_count>
      <attachid>44104</attachid>
    <who name="Chao-ying Fu">fu</who>
    <bug_when>2009-12-01 15:01:27 -0800</bug_when>
    <thetext>Created attachment 44104
MIPS JIT Patch 20091201

This is the complete patch.

ChangeLog:
1. In MacroAssemblerMIPS.h: updated code based on Gavin&apos;s review.
2. In MacroAssemblerMIPS.h: fixed a bug in branchMul32(Condition cond, Imm32 imm, RegisterID src, RegisterID dest).
3. In ExecutableAllocator.h: fixed &quot;end&quot; for GCC synci bug workaround.

The part 1 (YARR and YARR_JIT) of this patch will be posted soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167757</commentid>
    <comment_count>33</comment_count>
      <attachid>44106</attachid>
    <who name="Chao-ying Fu">fu</who>
    <bug_when>2009-12-01 15:03:54 -0800</bug_when>
    <thetext>Created attachment 44106
MIPS Patch Part 1 20091201

This Part 1 patch enables YARR and YARR_JIT.  Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170286</commentid>
    <comment_count>34</comment_count>
      <attachid>44106</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-12-09 19:11:04 -0800</bug_when>
    <thetext>Comment on attachment 44106
MIPS Patch Part 1 20091201

Gavin, this patch looks good to me -- i would be willing to r+ it but i&apos;m not sure if you wanted to give it a once over

--Oliver</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171042</commentid>
    <comment_count>35</comment_count>
    <who name="amol63841">amol_6384</who>
    <bug_when>2009-12-11 22:56:56 -0800</bug_when>
    <thetext>hi Chao-ying,

Thanks for the patch, I applied this patch in QT4.6 webkit jsc. It is found that CPU used in this version on webkit in more that compared to version without JIT patch. I am having some questions regarding this. I am using &quot;mips-linux-g++&quot; without -mplt
-mno-plt options enabled.

1. What will be the reason for increased CPU usage ?
2. Can i find any bench marking method for performance computation ?
3. What section of webkit i should see for performances improvement ?


regards,
Amol</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171471</commentid>
    <comment_count>36</comment_count>
    <who name="Chao-ying Fu">fu</who>
    <bug_when>2009-12-14 10:35:49 -0800</bug_when>
    <thetext>(In reply to comment #35)
&gt; hi Chao-ying,
&gt; 
&gt; Thanks for the patch, I applied this patch in QT4.6 webkit jsc. It is found
&gt; that CPU used in this version on webkit in more that compared to version
&gt; without JIT patch. I am having some questions regarding this. I am using
&gt; &quot;mips-linux-g++&quot; without -mplt
&gt; -mno-plt options enabled.
&gt; 
&gt; 1. What will be the reason for increased CPU usage ?
I am not sure about this.  Maybe CPU is busier to produce JIT instructions at run time.

&gt; 2. Can i find any bench marking method for performance computation ?
You can try SunSpider benchmark to check if JIT can shorten the overall time.
Use the demo browser to view http://www2.webkit.org/perf/sunspider-0.9/sunspider.html and click &quot;Start Now&quot;.

&gt; 3. What section of webkit i should see for performances improvement ?
You should see JavaScript performance improvement from webkit.

Thanks for trying the patch!

Regards,
Chao-ying</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186677</commentid>
    <comment_count>37</comment_count>
      <attachid>44104</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-01 16:26:31 -0800</bug_when>
    <thetext>Comment on attachment 44104
MIPS JIT Patch 20091201

This patch fails to apply and thus cannot be landed w/o an update.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186678</commentid>
    <comment_count>38</comment_count>
      <attachid>44106</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-01 16:27:08 -0800</bug_when>
    <thetext>Comment on attachment 44106
MIPS Patch Part 1 20091201

This patch fails to apply and thus cannot be landed without an update.  It also looks like it may be missing a ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186716</commentid>
    <comment_count>39</comment_count>
      <attachid>47887</attachid>
    <who name="Chao-ying Fu">fu</who>
    <bug_when>2010-02-01 17:20:39 -0800</bug_when>
    <thetext>Created attachment 47887
MIPS JIT Patch 20100201

I updated the patch and added ChangeLog.
The test result is:
debian:/disk/fu/dev/WebKit# ./WebKitTools/Scripts/run-javascriptcore-tests --root=/disk/fu/dev/WebKit/WebKitBuild/Release/JavaScriptCore
0 regressions found.
0 tests fixed.
OK.

Thanks!

Regards,
Chao-ying</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186720</commentid>
    <comment_count>40</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-01 17:25:29 -0800</bug_when>
    <thetext>Attachment 47887 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
Last 3072 characters of output:
orrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/wtf/Platform.h:109:  More than one command on the same line in if  [whitespace/parens] [4]
JavaScriptCore/jit/JITStubs.cpp:650:  Extra space before ( in function call  [whitespace/parens] [4]
JavaScriptCore/jit/JITStubs.cpp:689:  Extra space before ( in function call  [whitespace/parens] [4]
JavaScriptCore/jit/JITStubs.cpp:718:  Extra space before ( in function call  [whitespace/parens] [4]
JavaScriptCore/jit/JITStubs.cpp:1149:  Extra space before ( in function call  [whitespace/parens] [4]
JavaScriptCore/jit/JITStubs.cpp:1175:  Extra space before ( in function call  [whitespace/parens] [4]
JavaScriptCore/assembler/MacroAssembler.h:43:  More than one command on the same line  [whitespace/newline] [4]
JavaScriptCore/assembler/MacroAssemblerMIPS.h:35:  Alphabetical sorting problem.  [build/include_order] [4]
JavaScriptCore/assembler/MacroAssemblerMIPS.h:239:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
JavaScriptCore/assembler/MacroAssemblerMIPS.h:259:  shift_amount is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/MacroAssemblerMIPS.h:271:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
JavaScriptCore/assembler/MacroAssemblerMIPS.h:297:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
JavaScriptCore/assembler/MacroAssemblerMIPS.h:314:  shift_amount is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/MacroAssemblerMIPS.h:693:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
JavaScriptCore/assembler/MacroAssemblerMIPS.h:708:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
JavaScriptCore/assembler/MacroAssemblerMIPS.h:736:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
JavaScriptCore/assembler/MacroAssemblerMIPS.h:804:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
JavaScriptCore/jit/JITOpcodes.cpp:1776:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
JavaScriptCore/jit/ExecutableAllocator.h:202:  line_size is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/jit/ExecutableAllocator.h:203:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 57


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193028</commentid>
    <comment_count>41</comment_count>
    <who name="Chao-ying Fu">fu</who>
    <bug_when>2010-02-23 11:27:23 -0800</bug_when>
    <thetext>Hi,

  Is there anything we can help to make this patch committed?
Thanks a lot!

Regards,
Chao-ying</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193082</commentid>
    <comment_count>42</comment_count>
    <who name="Gabor Loki">loki</who>
    <bug_when>2010-02-23 12:55:00 -0800</bug_when>
    <thetext>Some style issues... (please check the style bot)

Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons. For example:

&gt;+        ASSERT(*(insn - 1) == 0 &amp;&amp; *(insn - 2) == 0 &amp;&amp; *(insn - 3) == 0 &amp;&amp; *(insn - 5) == 0);

or

&gt;+        if (!imm.m_isPointer &amp;&amp; imm.m_value == 0 &amp;&amp; !m_fixedWidth)


&gt;+    void lshift32(RegisterID shift_amount, RegisterID dest)
&gt;+    {
&gt;+        m_assembler.sllv(dest, dest, shift_amount);
&gt;+    }

Do not use &apos;_&apos; in your variable names!

Some other issues...

Well, it would be nice if you define a new macro which can hold the instruction set architecture value and an other one which can test the requested instruction set. For example.:
#define WTF_MIPS_ARCH __mips
#define WTF_MIPS_ISA(v) (defined WTF_MIPS_ARCH &amp;&amp; WTF_MIPS_ARCH == v)
or
#define WTF_MIPS_ISA_AT_LEAST(v) (defined WTF_MIPS_ARCH &amp;&amp; WTF_MIPS_ARCH &gt;= v)

Same for _ABIO32, __mips_isa_rev and others.

&gt;+        __clear_cache(reinterpret_cast&lt;char*&gt;(start), reinterpret_cast&lt;char*&gt;(end));
&gt;+#else
&gt;+        intptr_t end = reinterpret_cast&lt;intptr_t&gt;(code) + size;
&gt;+        __clear_cache(reinterpret_cast&lt;char*&gt;(code), reinterpret_cast&lt;char*&gt;(end));
&gt;+#endif

Please read my comment about __clear_cache issue at https://bugs.webkit.org/show_bug.cgi?id=28886#c35 .
(Try to avoid internal __clear_cache function)


&gt;+#if defined(__MIPSEB__)
Use CPU(BIG_ENDIAN)!

Anyway, this patch looks good to me as well ;)

BTW, do you have some comparison data about how the JIT performs on MIPS?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193581</commentid>
    <comment_count>43</comment_count>
    <who name="Chao-ying Fu">fu</who>
    <bug_when>2010-02-24 17:50:38 -0800</bug_when>
    <thetext>(In reply to comment #42)
&gt; Some style issues... (please check the style bot)
&gt; 
&gt; Tests for true/false, null/non-null, and zero/non-zero should all be done
&gt; without equality comparisons. For example:
&gt; 
&gt; &gt;+        ASSERT(*(insn - 1) == 0 &amp;&amp; *(insn - 2) == 0 &amp;&amp; *(insn - 3) == 0 &amp;&amp; *(insn - 5) == 0);
&gt; 
&gt; or
&gt; 
&gt; &gt;+        if (!imm.m_isPointer &amp;&amp; imm.m_value == 0 &amp;&amp; !m_fixedWidth)
&gt; 
&gt; 
&gt; &gt;+    void lshift32(RegisterID shift_amount, RegisterID dest)
&gt; &gt;+    {
&gt; &gt;+        m_assembler.sllv(dest, dest, shift_amount);
&gt; &gt;+    }
&gt; 
&gt; Do not use &apos;_&apos; in your variable names!

  Yes.  I will fix all style issues that come from my code.

&gt; 
&gt; Some other issues...
&gt; 
&gt; Well, it would be nice if you define a new macro which can hold the instruction
&gt; set architecture value and an other one which can test the requested
&gt; instruction set. For example.:
&gt; #define WTF_MIPS_ARCH __mips
&gt; #define WTF_MIPS_ISA(v) (defined WTF_MIPS_ARCH &amp;&amp; WTF_MIPS_ARCH == v)
&gt; or
&gt; #define WTF_MIPS_ISA_AT_LEAST(v) (defined WTF_MIPS_ARCH &amp;&amp; WTF_MIPS_ARCH &gt;= v)
&gt; 
&gt; Same for _ABIO32, __mips_isa_rev and others.

  Yes.  I will use WTF_* for all tests.  For _ABIO32, I will use it only in Platform.h and not in other .cpp/.h files, since I can only support O32 now.  In the future, if n32/o64 systems are added, we will define a new WTF_* for ABI selections.

&gt; 
&gt; &gt;+        __clear_cache(reinterpret_cast&lt;char*&gt;(start), reinterpret_cast&lt;char*&gt;(end));
&gt; &gt;+#else
&gt; &gt;+        intptr_t end = reinterpret_cast&lt;intptr_t&gt;(code) + size;
&gt; &gt;+        __clear_cache(reinterpret_cast&lt;char*&gt;(code), reinterpret_cast&lt;char*&gt;(end));
&gt; &gt;+#endif
&gt; 
&gt; Please read my comment about __clear_cache issue at
&gt; https://bugs.webkit.org/show_bug.cgi?id=28886#c35 .
&gt; (Try to avoid internal __clear_cache function)

  I will change __clear_cache to __builtin____clear_cache that is a GCC builtin function from GCC manual.  Is it ok?

&gt; 
&gt; 
&gt; &gt;+#if defined(__MIPSEB__)
&gt; Use CPU(BIG_ENDIAN)!

  Yes.

&gt; 
&gt; Anyway, this patch looks good to me as well ;)

  Thanks a lot!  I am testing my new patch and will post soon.
&gt; 
&gt; BTW, do you have some comparison data about how the JIT performs on MIPS?

  From my last December results, the non-jit SunSpider is 18774.6ms and the jit SunSpider is 10748.6ms on a MIPS 74kf 660Mhz sigma board.  The total time reduction is about 42%.  Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193649</commentid>
    <comment_count>44</comment_count>
    <who name="Gabor Loki">loki</who>
    <bug_when>2010-02-24 23:39:25 -0800</bug_when>
    <thetext>&gt;   I will change __clear_cache to __builtin____clear_cache that is a GCC builtin
&gt; function from GCC manual.  Is it ok?

Well, I don&apos;t mind using __clear_cache (or __builtin___clear_cache) on MIPS, but I have to note this is a *builtin* function. GCC community makes no promises about it. Very likely __clear_cache will be private in a later version of GCC (that was what happened in g++ 4.1.1 on ARM).

Just read the first section of http://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html !

If you really like to use it, please guard __clear_cache with some GCC version checks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193945</commentid>
    <comment_count>45</comment_count>
    <who name="Chao-ying Fu">fu</who>
    <bug_when>2010-02-25 17:04:46 -0800</bug_when>
    <thetext>(In reply to comment #44)
&gt; &gt;   I will change __clear_cache to __builtin____clear_cache that is a GCC builtin
&gt; &gt; function from GCC manual.  Is it ok?
&gt; 
&gt; Well, I don&apos;t mind using __clear_cache (or __builtin___clear_cache) on MIPS,
&gt; but I have to note this is a *builtin* function. GCC community makes no
&gt; promises about it. Very likely __clear_cache will be private in a later version
&gt; of GCC (that was what happened in g++ 4.1.1 on ARM).
&gt; 
&gt; Just read the first section of
&gt; http://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html !
&gt; 
&gt; If you really like to use it, please guard __clear_cache with some GCC version
&gt; checks.

  Yes, I will guard with GCC version check.
Note: I think __builtin____clear_cache() is a little bit better than __clear_cache(), since GCC will direct the call to __clear_cache() (that is implemented on MIPS) or to a system function.
And __clear_cache() can generate RTL instructions for better scheduling, compared to using asm() macros in c/cpp files.

  For MIPS Linux, we will call _flush_cache(), if GCC is not used.
Thanks!

Regards,
Chao-ying</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193950</commentid>
    <comment_count>46</comment_count>
      <attachid>49551</attachid>
    <who name="Chao-ying Fu">fu</who>
    <bug_when>2010-02-25 17:14:09 -0800</bug_when>
    <thetext>Created attachment 49551
MIPS JIT Patch 20100225

Hi,

  This is the revised patch based on the review #42.
To get rid of some assembler warnings and a bug in the debug build,
I changed few MIPS asm() instructions for MIPS PIC code in JITStubs.cpp.

  The testing of release and debug build is ok.  Thanks!

Regards,
Chao-ying</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193953</commentid>
    <comment_count>47</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-25 17:17:11 -0800</bug_when>
    <thetext>Attachment 49551 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
JavaScriptCore/wtf/Platform.h:109:  More than one command on the same line in if  [whitespace/parens] [4]
JavaScriptCore/ChangeLog:8:  Line contains tab character.  [whitespace/tab] [5]
JavaScriptCore/jit/JITStubs.cpp:651:  Extra space before ( in function call  [whitespace/parens] [4]
JavaScriptCore/jit/JITStubs.cpp:690:  Extra space before ( in function call  [whitespace/parens] [4]
JavaScriptCore/jit/JITStubs.cpp:721:  Extra space before ( in function call  [whitespace/parens] [4]
JavaScriptCore/jit/JITStubs.cpp:1154:  Extra space before ( in function call  [whitespace/parens] [4]
JavaScriptCore/jit/JITStubs.cpp:1184:  Extra space before ( in function call  [whitespace/parens] [4]
JavaScriptCore/assembler/MacroAssembler.h:43:  More than one command on the same line  [whitespace/newline] [4]
JavaScriptCore/assembler/MacroAssemblerMIPS.h:35:  Alphabetical sorting problem.  [build/include_order] [4]
JavaScriptCore/jit/JITOpcodes.cpp:1787:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
JavaScriptCore/jit/ExecutableAllocator.h:203:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 11 in 13 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>194738</commentid>
    <comment_count>48</comment_count>
      <attachid>49551</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-03-01 11:09:44 -0800</bug_when>
    <thetext>Comment on attachment 49551
MIPS JIT Patch 20100225

Hi Chao-ying,

Many apologies, I thought I&apos;d added a review last week, I guess I must have failed to hit commit.
Assuming you&apos;ve fixed Gabor&apos;s review issues I&apos;m happy, these changes look good to land. However, as raised in my previous review, I&apos;ll like to see this landed in two tranches.

You should be able to land yarr support with just the changes in assembler, yarr, jit/ExecutableAllocator.h, and some of the changes to wtf/Platform.h.

Please put up a patch with just these changes &amp; I&apos;ll be happy to r+.

cheers,
G.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>195113</commentid>
    <comment_count>49</comment_count>
    <who name="Chao-ying Fu">fu</who>
    <bug_when>2010-03-02 10:51:43 -0800</bug_when>
    <thetext>(In reply to comment #48)
&gt; (From update of attachment 49551 [details])
&gt; Hi Chao-ying,
&gt; 
&gt; Many apologies, I thought I&apos;d added a review last week, I guess I must have
&gt; failed to hit commit.
&gt; Assuming you&apos;ve fixed Gabor&apos;s review issues I&apos;m happy, these changes look good
&gt; to land. However, as raised in my previous review, I&apos;ll like to see this landed
&gt; in two tranches.
&gt; 
&gt; You should be able to land yarr support with just the changes in assembler,
&gt; yarr, jit/ExecutableAllocator.h, and some of the changes to wtf/Platform.h.
&gt; 
&gt; Please put up a patch with just these changes &amp; I&apos;ll be happy to r+.
&gt; 
&gt; cheers,
&gt; G.

Hi Gavin,

  Thanks!  I will post a yarr_jit patch soon.

Regards,
Chao-ying</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>195141</commentid>
    <comment_count>50</comment_count>
      <attachid>49826</attachid>
    <who name="Chao-ying Fu">fu</who>
    <bug_when>2010-03-02 11:38:32 -0800</bug_when>
    <thetext>Created attachment 49826
MIPS YARR JIT Patch 20100302

Here is the MIPS YARR JIT patch.  Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>195683</commentid>
    <comment_count>51</comment_count>
    <who name="Chao-ying Fu">fu</who>
    <bug_when>2010-03-03 11:28:37 -0800</bug_when>
    <thetext>Hi All,

  Can someone help me to commit this patch?  Thanks a lot!

Regards,
Chao-ying</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>195684</commentid>
    <comment_count>52</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-03-03 11:30:33 -0800</bug_when>
    <thetext>You can commit it thought the commit-queue. Such as you set r? for requesting review you can set commit-queue? for requesting commit though it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>195687</commentid>
    <comment_count>53</comment_count>
      <attachid>49826</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-03-03 11:32:43 -0800</bug_when>
    <thetext>Comment on attachment 49826
MIPS YARR JIT Patch 20100302

cq+</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>195868</commentid>
    <comment_count>54</comment_count>
      <attachid>49826</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-03-03 19:57:40 -0800</bug_when>
    <thetext>Comment on attachment 49826
MIPS YARR JIT Patch 20100302

Clearing flags on attachment: 49826

Committed r55500: &lt;http://trac.webkit.org/changeset/55500&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>195869</commentid>
    <comment_count>55</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-03-03 19:57:50 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>195871</commentid>
    <comment_count>56</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-03-03 20:11:01 -0800</bug_when>
    <thetext>reopening as we only landed the YARR JIT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196285</commentid>
    <comment_count>57</comment_count>
      <attachid>50070</attachid>
    <who name="Chao-ying Fu">fu</who>
    <bug_when>2010-03-04 17:33:12 -0800</bug_when>
    <thetext>Created attachment 50070
MIPS JIT Part2 Patch 20100304

Here is the part2 of the MIPS JIT patch.  Thanks a lot for help!

Regards,
Chao-ying</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197539</commentid>
    <comment_count>58</comment_count>
    <who name="Gabor Loki">loki</who>
    <bug_when>2010-03-09 05:02:14 -0800</bug_when>
    <thetext>&gt; Created an attachment (id=50070) [details]

The branch8 and branchTest8 functions are introduced at r55684.

Chao-ying, please add those functions to your last patch!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197700</commentid>
    <comment_count>59</comment_count>
      <attachid>50335</attachid>
    <who name="Chao-ying Fu">fu</who>
    <bug_when>2010-03-09 11:39:36 -0800</bug_when>
    <thetext>Created attachment 50335
MIPS JIT Part2 Patch 20100309

Here is the updated patch with branch8, branchTest8, and setTest8.
Thanks!

Regards,
Chao-ying</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200548</commentid>
    <comment_count>60</comment_count>
      <attachid>50862</attachid>
    <who name="Chao-ying Fu">fu</who>
    <bug_when>2010-03-16 18:16:39 -0700</bug_when>
    <thetext>Created attachment 50862
MIPS JIT Part2 Patch 20100316

  I updated the patch (part2) for an issue in MIPS linkWithOffset().
The original function didn&apos;t support the conversion from bc1f to bc1t
when the target is too far.  This patch adds this conversion.
The test results are ok.  Thanks!

Regards,
Chao-ying</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200555</commentid>
    <comment_count>61</comment_count>
      <attachid>50862</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-03-16 18:22:58 -0700</bug_when>
    <thetext>Comment on attachment 50862
MIPS JIT Part2 Patch 20100316

Okay, I can&apos;t see anything wrong with this patch, i&apos;ll just talk to Gavin to see if he wants to look at it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205202</commentid>
    <comment_count>62</comment_count>
    <who name="Chao-ying Fu">fu</who>
    <bug_when>2010-03-28 11:50:50 -0700</bug_when>
    <thetext>Hi Oliver,

  I need to ask one question about branch8.
Does branch8 assume that the value of &quot;Imm32 right&quot; is unsigned? 
Ex:
Jump branch8(Condition cond, Address left, Imm32 right)
{
  ASSERT(!(right.m_value &amp; 0xFFFFFF00)); // ???
}

  If yes, I need to use lbu (unsigned load byte) for MIPS to have correct comparison.  Thanks a lot!

Regards,
Chao-ying</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205213</commentid>
    <comment_count>63</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-03-28 13:02:51 -0700</bug_when>
    <thetext>(In reply to comment #62)
&gt; Hi Oliver,
&gt; 
&gt;   I need to ask one question about branch8.
&gt; Does branch8 assume that the value of &quot;Imm32 right&quot; is unsigned? 
&gt; Ex:
&gt; Jump branch8(Condition cond, Address left, Imm32 right)
&gt; {
&gt;   ASSERT(!(right.m_value &amp; 0xFFFFFF00)); // ???
&gt; }
&gt; 
&gt;   If yes, I need to use lbu (unsigned load byte) for MIPS to have correct
&gt; comparison.  Thanks a lot!
&gt; 
&gt; Regards,
&gt; Chao-ying

It should be an unsigned value :D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205691</commentid>
    <comment_count>64</comment_count>
      <attachid>51972</attachid>
    <who name="Chao-ying Fu">fu</who>
    <bug_when>2010-03-29 15:20:39 -0700</bug_when>
    <thetext>Created attachment 51972
MIPS JIT Part2 Patch 20100329

This new patch uses &quot;lbu&quot; to load unsigned byte.  Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205700</commentid>
    <comment_count>65</comment_count>
      <attachid>51972</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-03-29 15:28:47 -0700</bug_when>
    <thetext>Comment on attachment 51972
MIPS JIT Part2 Patch 20100329

r=me!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205795</commentid>
    <comment_count>66</comment_count>
      <attachid>51972</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-03-29 19:01:22 -0700</bug_when>
    <thetext>Comment on attachment 51972
MIPS JIT Part2 Patch 20100329

Rejecting patch 51972 from commit-queue.

Failed to run &quot;[&apos;WebKitTools/Scripts/run-webkit-tests&apos;, &apos;--no-launch-safari&apos;, &apos;--exit-after-n-failures=1&apos;, &apos;--quiet&apos;]&quot; exit_code: 1
Running build-dumprendertree
Compiling Java tests
make: Nothing to be done for `default&apos;.
Running tests from /Users/eseidel/Projects/CommitQueue/LayoutTests
Testing 12580 test cases.
fast/loader/stateobjects/replacestate-then-pushstate.html -&gt; failed

Exiting early after 1 failures. 7825 tests run.
141.60s total testing time

7824 test cases (99%) succeeded
1 test case (&lt;1%) had incorrect layout
4 test cases (&lt;1%) had stderr output

Full output: http://webkit-commit-queue.appspot.com/results/1601061</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205799</commentid>
    <comment_count>67</comment_count>
      <attachid>51972</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-03-29 19:06:17 -0700</bug_when>
    <thetext>Comment on attachment 51972
MIPS JIT Part2 Patch 20100329

Looks like this was caused by bug 36647.  re-queueing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205818</commentid>
    <comment_count>68</comment_count>
      <attachid>51972</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-03-29 19:59:29 -0700</bug_when>
    <thetext>Comment on attachment 51972
MIPS JIT Part2 Patch 20100329

Clearing flags on attachment: 51972

Committed r56759: &lt;http://trac.webkit.org/changeset/56759&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205819</commentid>
    <comment_count>69</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-03-29 19:59:41 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40751</attachid>
            <date>2009-10-06 17:14:42 -0700</date>
            <delta_ts>2009-10-07 14:53:52 -0700</delta_ts>
            <desc>MPIS JIT patch</desc>
            <filename>mips_jit.diff</filename>
            <type>text/plain</type>
            <size>87983</size>
            <attacher name="Chao-ying Fu">fu</attacher>
            
              <data encoding="base64">SW5kZXg6IHd0Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHd0Zi9QbGF0Zm9ybS5oCShyZXZp
c2lvbiA0ODAwMCkKKysrIHd0Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjUsNiAr
MjI1LDE1IEBACiAjZGVmaW5lIFdURl9QTEFURk9STV9CSUdfRU5ESUFOIDEKICNlbmRpZgogCisv
KiBQTEFURk9STShNSVBTKSAqLworLyogTm90ZTogT25seSBPMzIgQUJJIGlzIHRlc3RlZCwgc28g
d2UgZW5hYmxlIGl0IGZvciBPMzIgQUJJIGZvciBub3cuICAqLworI2lmICAgKGRlZmluZWQobWlw
cykgfHwgZGVmaW5lZChfX21pcHNfXykpICYmIGRlZmluZWQoX0FCSU8zMikKKyNkZWZpbmUgV1RG
X1BMQVRGT1JNX01JUFMgMQorI2lmIGRlZmluZWQoX19NSVBTRUJfXykKKyNkZWZpbmUgV1RGX1BM
QVRGT1JNX0JJR19FTkRJQU4gMQorI2VuZGlmCisjZW5kaWYgLyogTUlQUyAqLworCiAvKiBQTEFU
Rk9STShBUk0pICovCiAjaWYgICBkZWZpbmVkKGFybSkgXAogICAgfHwgZGVmaW5lZChfX2FybV9f
KQpAQCAtNjAzLDcgKzYxMiw3IEBACiAjaWYgIWRlZmluZWQoV1RGX1VTRV9KU1ZBTFVFNjQpICYm
ICFkZWZpbmVkKFdURl9VU0VfSlNWQUxVRTMyKSAmJiAhZGVmaW5lZChXVEZfVVNFX0pTVkFMVUUz
Ml82NCkKICNpZiBQTEFURk9STShYODZfNjQpICYmIChQTEFURk9STShNQUMpIHx8IFBMQVRGT1JN
KExJTlVYKSkKICNkZWZpbmUgV1RGX1VTRV9KU1ZBTFVFNjQgMQotI2VsaWYgUExBVEZPUk0oQVJN
KSB8fCBQTEFURk9STShQUEM2NCkKKyNlbGlmIFBMQVRGT1JNKEFSTSkgfHwgUExBVEZPUk0oUFBD
NjQpIHx8IFBMQVRGT1JNKE1JUFMpCiAjZGVmaW5lIFdURl9VU0VfSlNWQUxVRTMyIDEKICNlbHNl
CiAjZGVmaW5lIFdURl9VU0VfSlNWQUxVRTMyXzY0IDEKQEAgLTYzMCw2ICs2MzksMTQgQEAKIC8q
IFRoZSBKSVQgaXMgdGVzdGVkICYgd29ya2luZyBvbiB4ODYgV2luZG93cyAqLwogI2VsaWYgUExB
VEZPUk0oWDg2KSAmJiBQTEFURk9STShXSU4pCiAgICAgI2RlZmluZSBFTkFCTEVfSklUIDEKKy8q
IFRoZSBKSVQgaXMgZm9yIE1JUFMuICAqLworI2VsaWYgUExBVEZPUk0oTUlQUykKKyAgICAjZGVm
aW5lIEVOQUJMRV9KSVQgMQorICAgICNkZWZpbmUgV1RGX1VTRV9KSVRfU1RVQl9BUkdVTUVOVF9W
QV9MSVNUIDAKKyAgICAjZGVmaW5lIEVOQUJMRV9KSVRfT1BUSU1JWkVfQ0FMTCAxCisgICAgI2Rl
ZmluZSBFTkFCTEVfSklUX09QVElNSVpFX05BVElWRV9DQUxMIDEKKyAgICAjZGVmaW5lIEVOQUJM
RV9KSVRfT1BUSU1JWkVfUFJPUEVSVFlfQUNDRVNTIDEKKyAgICAjZGVmaW5lIEVOQUJMRV9KSVRf
T1BUSU1JWkVfTUVUSE9EX0NBTExTIDEKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQpCkBAIC02
OTAsNyArNzA3LDggQEAKICB8fCAoUExBVEZPUk0oWDg2XzY0KSAmJiBQTEFURk9STShNQUMpKSBc
CiAgLyogVW5kZXIgZGV2ZWxvcG1lbnQsIHRlbXBvcmFyaWx5IGRpc2FibGVkIHVudGlsIDE2TWIg
bGluayByYW5nZSBsaW1pdCBpbiBhc3NlbWJsZXIgaXMgZml4ZWQuICovIFwKICB8fCAoUExBVEZP
Uk1fQVJNX0FSQ0goNykgJiYgUExBVEZPUk0oSVBIT05FKSAmJiAwKSBcCi0gfHwgKFBMQVRGT1JN
KFg4NikgJiYgUExBVEZPUk0oV0lOKSkKKyB8fCAoUExBVEZPUk0oWDg2KSAmJiBQTEFURk9STShX
SU4pKSBcCisgfHwgUExBVEZPUk0oTUlQUykKICNkZWZpbmUgRU5BQkxFX1lBUlIgMQogI2RlZmlu
ZSBFTkFCTEVfWUFSUl9KSVQgMQogI2VuZGlmCkluZGV4OiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24g
NDgwMDApCisrKyBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MzgsNiArMzgsMTAgQEAKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckFSTS5oIgogbmFtZXNwYWNl
IEpTQyB7IHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJBUk0gTWFjcm9Bc3NlbWJsZXJCYXNlOyB9Owog
CisjZWxpZiBQTEFURk9STShNSVBTKQorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyTUlQUy5oIgor
bmFtZXNwYWNlIEpTQyB7IHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJNSVBTIE1hY3JvQXNzZW1ibGVy
QmFzZTsgfTsKKwogI2VsaWYgUExBVEZPUk0oWDg2KQogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVy
WDg2LmgiCiBuYW1lc3BhY2UgSlNDIHsgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlclg4NiBNYWNyb0Fz
c2VtYmxlckJhc2U7IH07CkluZGV4OiBhc3NlbWJsZXIvTUlQU0Fzc2VtYmxlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGFzc2VtYmxlci9NSVBTQXNzZW1ibGVyLmgJKHJldmlzaW9uIDApCisrKyBhc3NlbWJs
ZXIvTUlQU0Fzc2VtYmxlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk1MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTUlQ
UyBUZWNobm9sb2dpZXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBNSVBTQXNzZW1ibGVyX2gKKyNkZWZpbmUgTUlQU0Fzc2VtYmxlcl9oCisKKyNpbmNsdWRl
IDx3dGYvUGxhdGZvcm0uaD4KKyNpbmNsdWRlIDx3dGYvU2VnbWVudGVkVmVjdG9yLmg+CisKKyNp
ZiBFTkFCTEUoQVNTRU1CTEVSKSAmJiBQTEFURk9STShNSVBTKQorCisjaW5jbHVkZSAiQXNzZW1i
bGVyQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEpT
QyB7CisKK3R5cGVkZWYgdWludDMyX3QgTUlQU1dvcmQ7CisKK25hbWVzcGFjZSBNSVBTUmVnaXN0
ZXJzIHsKKyAgICB0eXBlZGVmIGVudW0geworCXIwID0gMCwKKwlyMSwKKwlyMiwKKwlyMywKKwly
NCwKKwlyNSwKKwlyNiwKKwlyNywKKwlyOCwKKwlyOSwKKwlyMTAsCisJcjExLAorCXIxMiwKKwly
MTMsCisJcjE0LAorCXIxNSwKKwlyMTYsCisJcjE3LAorCXIxOCwKKwlyMTksCisJcjIwLAorCXIy
MSwKKwlyMjIsCisJcjIzLAorCXIyNCwKKwlyMjUsCisJcjI2LAorCXIyNywKKwlyMjgsCisJcjI5
LAorCXIzMCwKKwlyMzEsCisJemVybyA9IHIwLAorCWF0ID0gcjEsCisJdjAgPSByMiwKKwl2MSA9
IHIzLAorCWEwID0gcjQsCisJYTEgPSByNSwKKwlhMiA9IHI2LAorCWEzID0gcjcsCisJdDAgPSBy
OCwKKwl0MSA9IHI5LAorCXQyID0gcjEwLAorCXQzID0gcjExLAorCXQ0ID0gcjEyLAorCXQ1ID0g
cjEzLAorCXQ2ID0gcjE0LAorCXQ3ID0gcjE1LAorCXMwID0gcjE2LAorCXMxID0gcjE3LAorCXMy
ID0gcjE4LAorCXMzID0gcjE5LAorCXM0ID0gcjIwLAorCXM1ID0gcjIxLAorCXM2ID0gcjIyLAor
CXM3ID0gcjIzLAorCXQ4ID0gcjI0LAorCXQ5ID0gcjI1LAorCWswID0gcjI2LAorCWsxID0gcjI3
LAorCWdwID0gcjI4LAorCXNwID0gcjI5LAorCWZwID0gcjMwLAorCXJhID0gcjMxCisgICAgfSBS
ZWdpc3RlcklEOworCisgICAgdHlwZWRlZiBlbnVtIHsKKwlmMCwKKwlmMSwKKwlmMiwKKwlmMywK
KwlmNCwKKwlmNSwKKwlmNiwKKwlmNywKKwlmOCwKKwlmOSwKKwlmMTAsCisJZjExLAorCWYxMiwK
KwlmMTMsCisJZjE0LAorCWYxNSwKKwlmMTYsCisJZjE3LAorCWYxOCwKKwlmMTksCisJZjIwLAor
CWYyMSwKKwlmMjIsCisJZjIzLAorCWYyNCwKKwlmMjUsCisJZjI2LAorCWYyNywKKwlmMjgsCisJ
ZjI5LAorCWYzMCwKKwlmMzEKKyAgICB9IEZQUmVnaXN0ZXJJRDsKKworfSAvLyBuYW1lc3BhY2Ug
TUlQU1JlZ2lzdGVycworCitjbGFzcyBNSVBTQXNzZW1ibGVyIHsKK3B1YmxpYzoKKyAgICB0eXBl
ZGVmIE1JUFNSZWdpc3RlcnM6OlJlZ2lzdGVySUQgUmVnaXN0ZXJJRDsKKyAgICB0eXBlZGVmIE1J
UFNSZWdpc3RlcnM6OkZQUmVnaXN0ZXJJRCBGUFJlZ2lzdGVySUQ7CisgICAgdHlwZWRlZiBTZWdt
ZW50ZWRWZWN0b3I8aW50LCA2ND4gSnVtcHM7CisKKyAgICBNSVBTQXNzZW1ibGVyKCkKKyAgICB7
CisgICAgfQorCisgICAgLy8gTUlQUyBpbnN0cnVjdGlvbiBvcGNvZGUgZmllbGQgcG9zaXRpb24K
KyAgICBlbnVtIHsKKwlPUF9TSF9SRCA9IDExLAorCU9QX1NIX1JUID0gMTYsCisJT1BfU0hfUlMg
PSAyMSwKKwlPUF9TSF9TSEFNVCA9IDYsCisJT1BfU0hfQ09ERSA9IDE2LAorCU9QX1NIX0ZEID0g
NiwKKwlPUF9TSF9GUyA9IDExLAorCU9QX1NIX0ZUID0gMTYKKyAgICB9OworCisgICAgY2xhc3Mg
Sm1wU3JjIHsKKwlmcmllbmQgY2xhc3MgTUlQU0Fzc2VtYmxlcjsKKyAgICBwdWJsaWM6CisJSm1w
U3JjKCkKKwkgICAgOiBtX29mZnNldCgtMSkKKwl7CisJfQorCisgICAgcHJpdmF0ZToKKwlKbXBT
cmMoaW50IG9mZnNldCkKKwkgICAgOiBtX29mZnNldChvZmZzZXQpCisJeworCX0KKworCWludCBt
X29mZnNldDsKKyAgICB9OworCisgICAgY2xhc3MgSm1wRHN0IHsKKwlmcmllbmQgY2xhc3MgTUlQ
U0Fzc2VtYmxlcjsKKyAgICBwdWJsaWM6CisJSm1wRHN0KCkKKwkgICAgOiBtX29mZnNldCgtMSkK
KwkgICAgLCBtX3VzZWQoZmFsc2UpCisJeworCX0KKworCWJvb2wgaXNVc2VkKCkgY29uc3QgeyBy
ZXR1cm4gbV91c2VkOyB9CisJdm9pZCB1c2VkKCkgeyBtX3VzZWQgPSB0cnVlOyB9CisgICAgcHJp
dmF0ZToKKwlKbXBEc3QoaW50IG9mZnNldCkKKwkgICAgOiBtX29mZnNldChvZmZzZXQpCisJICAg
ICwgbV91c2VkKGZhbHNlKQorCXsKKwkgICAgQVNTRVJUKG1fb2Zmc2V0ID09IG9mZnNldCk7CisJ
fQorCisJaW50IG1fb2Zmc2V0IDogMzE7CisJaW50IG1fdXNlZCA6IDE7CisgICAgfTsKKworICAg
IHZvaWQgZW1pdEluc3QoTUlQU1dvcmQgb3ApCisgICAgeworCW1fYnVmZmVyLnB1dEludChvcCk7
CisgICAgfQorCisgICAgdm9pZCBub3AoKQorICAgIHsKKwkvKiBub3AgKi8KKwllbWl0SW5zdCgw
eDAwMDAwMDAwKTsKKyAgICB9CisKKyAgICB2b2lkIG1vdmUoUmVnaXN0ZXJJRCByZCwgUmVnaXN0
ZXJJRCBycykKKyAgICB7CisjaWYgZGVmaW5lZChfQUJJTzMyKQorCS8qIGFkZHUgKi8KKwllbWl0
SW5zdCgweDAwMDAwMDIxIHwgKHJkIDw8IE9QX1NIX1JEKSB8IChycyA8PCBPUF9TSF9SUykpOwor
I2Vsc2UKKwkvKiBkYWRkdSAqLworCWVtaXRJbnN0KDB4MDAwMDAwMmQgfCAocmQgPDwgT1BfU0hf
UkQpIHwgKHJzIDw8IE9QX1NIX1JTKSk7CisjZW5kaWYKKyAgICB9CisKKyAgICB2b2lkIGxpKFJl
Z2lzdGVySUQgZGVzdCwgaW50IGltbSwgaW50IGZpeGVkID0gMCkKKyAgICB7CisJaWYgKGZpeGVk
ID09IDApIHsKKwkgICAgaWYgKGltbSA+PSAtMzI3NjggJiYgaW1tIDw9IDMyNzY3KQorCQlhZGRp
dShkZXN0LCBNSVBTUmVnaXN0ZXJzOjp6ZXJvLCBpbW0pOworCSAgICBlbHNlIGlmIChpbW0gPj0g
MCAmJiBpbW0gPCA2NTUzNikKKwkJb3JpKGRlc3QsIE1JUFNSZWdpc3RlcnM6Onplcm8sIGltbSk7
CisJICAgIGVsc2UgeworCQkvKiBsdWkgKi8KKwkJbHVpKGRlc3QsIGltbSA+PiAxNik7CisJCS8q
IG9yaSAqLworCQlpZiAoaW1tICYgMHhmZmZmKQorCQkgICAgb3JpKGRlc3QsIGRlc3QsIGltbSk7
CisJICAgIH0KKwl9CisJZWxzZSB7CisJICAgIGx1aShkZXN0LCBpbW0gPj4gMTYpOworCSAgICBv
cmkoZGVzdCwgZGVzdCwgaW1tKTsKKwl9CisgICAgfQorCisgICAgdm9pZCBsdWkoUmVnaXN0ZXJJ
RCBydCwgaW50IGltbSkKKyAgICB7CisJLyogbHVpICovCisJZW1pdEluc3QoMHgzYzAwMDAwMCB8
IChydCA8PCBPUF9TSF9SVCkgfCAoaW1tICYgMHhmZmZmKSk7CisgICAgfQorCisgICAgdm9pZCBh
ZGRpdShSZWdpc3RlcklEIHJ0LCBSZWdpc3RlcklEIHJzLCBpbnQgaW1tKQorICAgIHsKKwkvKiBh
ZGRpdSAqLworCWVtaXRJbnN0KDB4MjQwMDAwMDAgfCAocnQgPDwgT1BfU0hfUlQpIHwgKHJzIDw8
IE9QX1NIX1JTKQorCQkgfCAoaW1tICYgMHhmZmZmKSk7CisgICAgfQorCisgICAgdm9pZCBhZGR1
KFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcnMsIFJlZ2lzdGVySUQgcnQpCisgICAgeworCS8q
IGFkZHUgKi8KKwllbWl0SW5zdCgweDAwMDAwMDIxIHwgKHJkIDw8IE9QX1NIX1JEKSB8IChycyA8
PCBPUF9TSF9SUykKKwkJIHwgKHJ0IDw8IE9QX1NIX1JUKSk7CisgICAgfQorCisgICAgdm9pZCBz
dWJ1KFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcnMsIFJlZ2lzdGVySUQgcnQpCisgICAgewor
CS8qIHN1YnUgKi8KKwllbWl0SW5zdCgweDAwMDAwMDIzIHwgKHJkIDw8IE9QX1NIX1JEKSB8IChy
cyA8PCBPUF9TSF9SUykKKwkJIHwgKHJ0IDw8IE9QX1NIX1JUKSk7CisgICAgfQorCisgICAgdm9p
ZCBtdWx0KFJlZ2lzdGVySUQgcnMsIFJlZ2lzdGVySUQgcnQpCisgICAgeworCS8qIG11bHQgKi8K
KwllbWl0SW5zdCgweDAwMDAwMDE4IHwgKHJzIDw8IE9QX1NIX1JTKSB8IChydCA8PCBPUF9TSF9S
VCkpOworICAgIH0KKworICAgIHZvaWQgbWZoaShSZWdpc3RlcklEIHJkKQorICAgIHsKKwkvKiBt
ZmhpICovCisJZW1pdEluc3QoMHgwMDAwMDAxMCB8IChyZCA8PCBPUF9TSF9SRCkpOworICAgIH0K
KworICAgIHZvaWQgbWZsbyhSZWdpc3RlcklEIHJkKQorICAgIHsKKwkvKiBtZmxvICovCisJZW1p
dEluc3QoMHgwMDAwMDAxMiB8IChyZCA8PCBPUF9TSF9SRCkpOworICAgIH0KKworICAgIHZvaWQg
bXVsKFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcnMsIFJlZ2lzdGVySUQgcnQpCisgICAgewor
I2lmIF9fbWlwcyA+PSAzMgorCS8qIG11bCAqLworCWVtaXRJbnN0KDB4NzAwMDAwMDIgfCAocmQg
PDwgT1BfU0hfUkQpIHwgKHJzIDw8IE9QX1NIX1JTKQorCQkgfCAocnQgPDwgT1BfU0hfUlQpKTsK
KyNlbHNlCisJbXVsdChycywgcnQpOworCW1mbG8ocmQpOworI2VuZGlmCisgICAgfQorCisgICAg
dm9pZCBhbmRfaW5zbihSZWdpc3RlcklEIHJkLCBSZWdpc3RlcklEIHJzLCBSZWdpc3RlcklEIHJ0
KQorICAgIHsKKwkvKiBhbmQgKi8KKwllbWl0SW5zdCgweDAwMDAwMDI0IHwgKHJkIDw8IE9QX1NI
X1JEKSB8IChycyA8PCBPUF9TSF9SUykKKwkJIHwgKHJ0IDw8IE9QX1NIX1JUKSk7CisgICAgfQor
CisgICAgdm9pZCBhbmRpKFJlZ2lzdGVySUQgcnQsIFJlZ2lzdGVySUQgcnMsIGludCBpbW0pCisg
ICAgeworCS8qIGFuZGkgKi8KKwllbWl0SW5zdCgweDMwMDAwMDAwIHwgKHJ0IDw8IE9QX1NIX1JU
KSB8IChycyA8PCBPUF9TSF9SUykKKwkJIHwgKGltbSAmIDB4ZmZmZikpOworICAgIH0KKworICAg
IHZvaWQgbm9yKFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcnMsIFJlZ2lzdGVySUQgcnQpCisg
ICAgeworCS8qIG5vciAqLworCWVtaXRJbnN0KDB4MDAwMDAwMjcgfCAocmQgPDwgT1BfU0hfUkQp
IHwgKHJzIDw8IE9QX1NIX1JTKQorCQkgfCAocnQgPDwgT1BfU0hfUlQpKTsKKyAgICB9CisKKyAg
ICB2b2lkIG9yX2luc24oUmVnaXN0ZXJJRCByZCwgUmVnaXN0ZXJJRCBycywgUmVnaXN0ZXJJRCBy
dCkKKyAgICB7CisJLyogb3IgKi8KKwllbWl0SW5zdCgweDAwMDAwMDI1IHwgKHJkIDw8IE9QX1NI
X1JEKSB8IChycyA8PCBPUF9TSF9SUykKKwkJIHwgKHJ0IDw8IE9QX1NIX1JUKSk7CisgICAgfQor
CisgICAgdm9pZCBvcmkoUmVnaXN0ZXJJRCBydCwgUmVnaXN0ZXJJRCBycywgaW50IGltbSkKKyAg
ICB7CisJLyogb3JpICovCisJZW1pdEluc3QoMHgzNDAwMDAwMCB8IChydCA8PCBPUF9TSF9SVCkg
fCAocnMgPDwgT1BfU0hfUlMpCisJCSB8IChpbW0gJiAweGZmZmYpKTsKKyAgICB9CisKKyAgICB2
b2lkIHhvcl9pbnNuKFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcnMsIFJlZ2lzdGVySUQgcnQp
CisgICAgeworCS8qIHhvciAqLworCWVtaXRJbnN0KDB4MDAwMDAwMjYgfCAocmQgPDwgT1BfU0hf
UkQpIHwgKHJzIDw8IE9QX1NIX1JTKQorCQkgfCAocnQgPDwgT1BfU0hfUlQpKTsKKyAgICB9CisK
KyAgICB2b2lkIHhvcmkoUmVnaXN0ZXJJRCBydCwgUmVnaXN0ZXJJRCBycywgaW50IGltbSkKKyAg
ICB7CisJLyogeG9yaSAqLworCWVtaXRJbnN0KDB4MzgwMDAwMDAgfCAocnQgPDwgT1BfU0hfUlQp
IHwgKHJzIDw8IE9QX1NIX1JTKQorCQkgfCAoaW1tICYgMHhmZmZmKSk7CisgICAgfQorCisgICAg
dm9pZCBzbHQoUmVnaXN0ZXJJRCByZCwgUmVnaXN0ZXJJRCBycywgUmVnaXN0ZXJJRCBydCkKKyAg
ICB7CisJLyogc2x0ICovCisJZW1pdEluc3QoMHgwMDAwMDAyYSB8IChyZCA8PCBPUF9TSF9SRCkg
fCAocnMgPDwgT1BfU0hfUlMpCisJCSB8IChydCA8PCBPUF9TSF9SVCkpOworICAgIH0KKworICAg
IHZvaWQgc2x0dShSZWdpc3RlcklEIHJkLCBSZWdpc3RlcklEIHJzLCBSZWdpc3RlcklEIHJ0KQor
ICAgIHsKKwkvKiBzbHR1ICovCisJZW1pdEluc3QoMHgwMDAwMDAyYiB8IChyZCA8PCBPUF9TSF9S
RCkgfCAocnMgPDwgT1BfU0hfUlMpCisJCSB8IChydCA8PCBPUF9TSF9SVCkpOworICAgIH0KKwor
ICAgIHZvaWQgc2x0aXUoUmVnaXN0ZXJJRCBydCwgUmVnaXN0ZXJJRCBycywgaW50IGltbSkKKyAg
ICB7CisJLyogc2x0aXUgKi8KKwllbWl0SW5zdCgweDJjMDAwMDAwIHwgKHJ0IDw8IE9QX1NIX1JU
KSB8IChycyA8PCBPUF9TSF9SUykKKwkJIHwgKGltbSAmIDB4ZmZmZikpOworICAgIH0KKworICAg
IHZvaWQgc2xsKFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcnQsIGludCBzaGFtdCkKKyAgICB7
CisJLyogc2xsICovCisJZW1pdEluc3QoMHgwMDAwMDAwMCB8IChyZCA8PCBPUF9TSF9SRCkgfCAo
cnQgPDwgT1BfU0hfUlQpCisJCSB8ICgoc2hhbXQgJiAweDFmKSA8PCBPUF9TSF9TSEFNVCkpOwor
ICAgIH0KKworICAgIHZvaWQgc2xsdihSZWdpc3RlcklEIHJkLCBSZWdpc3RlcklEIHJ0LCBpbnQg
cnMpCisgICAgeworCS8qIHNsbHYgKi8KKwllbWl0SW5zdCgweDAwMDAwMDA0IHwgKHJkIDw8IE9Q
X1NIX1JEKSB8IChydCA8PCBPUF9TSF9SVCkKKwkJIHwgKHJzIDw8IE9QX1NIX1JTKSk7CisgICAg
fQorCisgICAgdm9pZCBzcmEoUmVnaXN0ZXJJRCByZCwgUmVnaXN0ZXJJRCBydCwgaW50IHNoYW10
KQorICAgIHsKKwkvKiBzcmEgKi8KKwllbWl0SW5zdCgweDAwMDAwMDAzIHwgKHJkIDw8IE9QX1NI
X1JEKSB8IChydCA8PCBPUF9TSF9SVCkKKwkJIHwgKChzaGFtdCAmIDB4MWYpIDw8IE9QX1NIX1NI
QU1UKSk7CisgICAgfQorCisgICAgdm9pZCBzcmF2KFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQg
cnQsIFJlZ2lzdGVySUQgcnMpCisgICAgeworCS8qIHNyYXYgKi8KKwllbWl0SW5zdCgweDAwMDAw
MDA3IHwgKHJkIDw8IE9QX1NIX1JEKSB8IChydCA8PCBPUF9TSF9SVCkKKwkJIHwgKHJzIDw8IE9Q
X1NIX1JTKSk7CisgICAgfQorCisgICAgdm9pZCBsdyhSZWdpc3RlcklEIHJ0LCBSZWdpc3RlcklE
IHJzLCBpbnQgb2Zmc2V0KQorICAgIHsKKwkvKiBsdyAqLworCWVtaXRJbnN0KDB4OGMwMDAwMDAg
fCAocnQgPDwgT1BfU0hfUlQpIHwgKHJzIDw8IE9QX1NIX1JTKQorCQkgfCAob2Zmc2V0ICYgMHhm
ZmZmKSk7CisjaWYgX19taXBzID09IDEKKwlub3AoKTsKKyNlbmRpZgorICAgIH0KKworICAgIHZv
aWQgbGgoUmVnaXN0ZXJJRCBydCwgUmVnaXN0ZXJJRCBycywgaW50IG9mZnNldCkKKyAgICB7CisJ
LyogbHcgKi8KKwllbWl0SW5zdCgweDg0MDAwMDAwIHwgKHJ0IDw8IE9QX1NIX1JUKSB8IChycyA8
PCBPUF9TSF9SUykKKwkJIHwgKG9mZnNldCAmIDB4ZmZmZikpOworI2lmIF9fbWlwcyA9PSAxCisJ
bm9wKCk7CisjZW5kaWYKKyAgICB9CisKKyAgICB2b2lkIHN3KFJlZ2lzdGVySUQgcnQsIFJlZ2lz
dGVySUQgcnMsIGludCBvZmZzZXQpCisgICAgeworCS8qIHN3ICovCisJZW1pdEluc3QoMHhhYzAw
MDAwMCB8IChydCA8PCBPUF9TSF9SVCkgfCAocnMgPDwgT1BfU0hfUlMpCisJCSB8IChvZmZzZXQg
JiAweGZmZmYpKTsKKyAgICB9CisKKyAgICB2b2lkIGptcF9yZWdpc3RlcihSZWdpc3RlcklEIHJz
KQorICAgIHsKKwkvKiBqciAqLworCWVtaXRJbnN0KDB4MDAwMDAwMDggfCAocnMgPDwgT1BfU0hf
UlMpKTsKKwkvKiBub3AgKi8KKwlub3AoKTsKKyAgICB9CisKKyAgICB2b2lkIGJrcHQoKQorICAg
IHsKKwkvKiBicmVhayAqLworCWludCB2YWx1ZSA9IDUxMjsgLyogQlJLX0JVRyAqLworCWVtaXRJ
bnN0KDB4MDAwMDAwMGQgfCAoKHZhbHVlICYgMHgzZmYpIDw8IE9QX1NIX0NPREUpKTsKKyAgICB9
CisKKyAgICAvKiBOb3RlOiBXZSBkb24ndCBwdXQgYSBub3AgYWZ0ZXIgYmdleiBhcyBhbiBvcHRp
bWl6YXRpb24uCisJICAgICBUaGUgZGVsYXkgc2xvdCB3aWxsIGJlIGZpbGxlZCBsYXRlci4gICov
CisgICAgdm9pZCBiZ2V6KFJlZ2lzdGVySUQgcnMsIGludCBpbW0pCisgICAgeworCS8qIGJnZXog
Ki8KKwllbWl0SW5zdCgweDA0MDEwMDAwIHwgKHJzIDw8IE9QX1NIX1JTKSB8IChpbW0gJiAweGZm
ZmYpKTsKKyAgICB9CisKKyAgICAvKiBOb3RlOiBXZSBkb24ndCBwdXQgYSBub3AgYWZ0ZXIgYmx0
eiBhcyBhbiBvcHRpbWl6YXRpb24uCisJICAgICBUaGUgZGVsYXkgc2xvdCB3aWxsIGJlIGZpbGxl
ZCBsYXRlci4gICovCisgICAgdm9pZCBibHR6KFJlZ2lzdGVySUQgcnMsIGludCBpbW0pCisgICAg
eworCS8qIGJsdHogKi8KKwllbWl0SW5zdCgweDA0MDAwMDAwIHwgKHJzIDw8IE9QX1NIX1JTKSB8
IChpbW0gJiAweGZmZmYpKTsKKyAgICB9CisKKyAgICAvKiBOb3RlOiBXZSBkb24ndCBwdXQgYSBu
b3AgYWZ0ZXIgYmVxeiBhcyBhbiBvcHRpbWl6YXRpb24uCisJICAgICBUaGUgZGVsYXkgc2xvdCB3
aWxsIGJlIGZpbGxlZCBsYXRlci4gICovCisgICAgdm9pZCBiZXEoUmVnaXN0ZXJJRCBycywgUmVn
aXN0ZXJJRCBydCwgaW50IGltbSkKKyAgICB7CisJLyogYmVxICovCisJZW1pdEluc3QoMHgxMDAw
MDAwMCB8IChycyA8PCBPUF9TSF9SUykgfCAocnQgPDwgT1BfU0hfUlQpIHwgKGltbSAmIDB4ZmZm
ZikpOworICAgIH0KKworICAgIEptcFNyYyBqbXAoKQorICAgIHsKKwltX2p1bXBzLmFwcGVuZCht
X2J1ZmZlci5zaXplKCkpOworCisJLyogYmVxICQwLCAkMCAqLworCWVtaXRJbnN0KDB4MTAwMDAw
MDApOworCW5vcCgpOworCS8qIFdlIG5lZWQgdHdvIGV4dHJhIG5vcHMgZm9yIHJlbGF4YXRpb24u
ICAqLworCW5vcCgpOworCW5vcCgpOworCXJldHVybiBKbXBTcmMobV9idWZmZXIuc2l6ZSgpKTsK
KyAgICB9CisKKyAgICBKbXBTcmMgYnJhbmNoX2VxKFJlZ2lzdGVySUQgcnMsIFJlZ2lzdGVySUQg
cnQpCisgICAgeworCW1fanVtcHMuYXBwZW5kKG1fYnVmZmVyLnNpemUoKSk7CisKKwkvKiBiZXEg
Ki8KKwllbWl0SW5zdCgweDEwMDAwMDAwIHwgKHJzIDw8IE9QX1NIX1JTKSB8IChydCA8PCBPUF9T
SF9SVCkpOworCW5vcCgpOworCS8qIFdlIG5lZWQgdHdvIGV4dHJhIG5vcHMgZm9yIHJlbGF4YXRp
b24uICAqLworCW5vcCgpOworCW5vcCgpOworCXJldHVybiBKbXBTcmMobV9idWZmZXIuc2l6ZSgp
KTsKKyAgICB9CisKKyAgICBKbXBTcmMgYnJhbmNoX25lKFJlZ2lzdGVySUQgcnMsIFJlZ2lzdGVy
SUQgcnQpCisgICAgeworCW1fanVtcHMuYXBwZW5kKG1fYnVmZmVyLnNpemUoKSk7CisKKwkvKiBi
bmUgKi8KKwllbWl0SW5zdCgweDE0MDAwMDAwIHwgKHJzIDw8IE9QX1NIX1JTKSB8IChydCA8PCBP
UF9TSF9SVCkpOworCW5vcCgpOworCS8qIFdlIG5lZWQgdHdvIGV4dHJhIG5vcHMgZm9yIHJlbGF4
YXRpb24uICAqLworCW5vcCgpOworCW5vcCgpOworCXJldHVybiBKbXBTcmMobV9idWZmZXIuc2l6
ZSgpKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZF9kKEZQUmVnaXN0ZXJJRCBmZCwgRlBSZWdpc3Rl
cklEIGZzLCBGUFJlZ2lzdGVySUQgZnQpCisgICAgeworCS8qIGFkZC5kICovCisJZW1pdEluc3Qo
MHg0NjIwMDAwMCB8IChmZCA8PCBPUF9TSF9GRCkgfCAoZnMgPDwgT1BfU0hfRlMpCisJCSB8IChm
dCA8PCBPUF9TSF9GVCkpOworICAgIH0KKworICAgIHZvaWQgc3ViX2QoRlBSZWdpc3RlcklEIGZk
LCBGUFJlZ2lzdGVySUQgZnMsIEZQUmVnaXN0ZXJJRCBmdCkKKyAgICB7CisJLyogc3ViLmQgKi8K
KwllbWl0SW5zdCgweDQ2MjAwMDAxIHwgKGZkIDw8IE9QX1NIX0ZEKSB8IChmcyA8PCBPUF9TSF9G
UykKKwkJIHwgKGZ0IDw8IE9QX1NIX0ZUKSk7CisgICAgfQorCisgICAgdm9pZCBtdWxfZChGUFJl
Z2lzdGVySUQgZmQsIEZQUmVnaXN0ZXJJRCBmcywgRlBSZWdpc3RlcklEIGZ0KQorICAgIHsKKwkv
KiBtdWwuZCAqLworCWVtaXRJbnN0KDB4NDYyMDAwMDIgfCAoZmQgPDwgT1BfU0hfRkQpIHwgKGZz
IDw8IE9QX1NIX0ZTKQorCQkgfCAoZnQgPDwgT1BfU0hfRlQpKTsKKyAgICB9CisKKyAgICB2b2lk
IGx3YzEoRlBSZWdpc3RlcklEIGZ0LCBSZWdpc3RlcklEIHJzLCBpbnQgb2Zmc2V0KQorICAgIHsK
KwkvKiBsd2MxICovCisJZW1pdEluc3QoMHhjNDAwMDAwMCB8IChmdCA8PCBPUF9TSF9GVCkgfCAo
cnMgPDwgT1BfU0hfUlMpCisJCSB8IChvZmZzZXQgJiAweGZmZmYpKTsKKyNpZiBfX21pcHMgPT0g
MQorCW5vcCgpOworI2VuZGlmCisgICAgfQorCisgICAgdm9pZCBsZGMxKEZQUmVnaXN0ZXJJRCBm
dCwgUmVnaXN0ZXJJRCBycywgaW50IG9mZnNldCkKKyAgICB7CisJLyogbGRjMSAqLworCWVtaXRJ
bnN0KDB4ZDQwMDAwMDAgfCAoZnQgPDwgT1BfU0hfRlQpIHwgKHJzIDw8IE9QX1NIX1JTKQorCQkg
fCAob2Zmc2V0ICYgMHhmZmZmKSk7CisgICAgfQorCisgICAgdm9pZCBzd2MxKEZQUmVnaXN0ZXJJ
RCBmdCwgUmVnaXN0ZXJJRCBycywgaW50IG9mZnNldCkKKyAgICB7CisJLyogc3djMSAqLworCWVt
aXRJbnN0KDB4ZTQwMDAwMDAgfCAoZnQgPDwgT1BfU0hfRlQpIHwgKHJzIDw8IE9QX1NIX1JTKQor
CQkgfCAob2Zmc2V0ICYgMHhmZmZmKSk7CisgICAgfQorCisgICAgdm9pZCBzZGMxKEZQUmVnaXN0
ZXJJRCBmdCwgUmVnaXN0ZXJJRCBycywgaW50IG9mZnNldCkKKyAgICB7CisJLyogc2RjMSAqLwor
CWVtaXRJbnN0KDB4ZjQwMDAwMDAgfCAoZnQgPDwgT1BfU0hfRlQpIHwgKHJzIDw8IE9QX1NIX1JT
KQorCQkgfCAob2Zmc2V0ICYgMHhmZmZmKSk7CisgICAgfQorCisgICAgdm9pZCBtdGMxKFJlZ2lz
dGVySUQgcnQsIEZQUmVnaXN0ZXJJRCBmcykKKyAgICB7CisJLyogbXRjMSAqLworCWVtaXRJbnN0
KDB4NDQ4MDAwMDAgfCAoZnMgPDwgT1BfU0hfRlMpIHwgKHJ0IDw8IE9QX1NIX1JUKSk7CisjaWYg
X19taXBzID09IDEKKwlub3AoKTsKKyNlbmRpZgorICAgIH0KKworICAgIHZvaWQgbWZjMShSZWdp
c3RlcklEIHJ0LCBGUFJlZ2lzdGVySUQgZnMpCisgICAgeworCS8qIG1mYzEgKi8KKwllbWl0SW5z
dCgweDQ0MDAwMDAwIHwgKGZzIDw8IE9QX1NIX0ZTKSB8IChydCA8PCBPUF9TSF9SVCkpOworI2lm
IF9fbWlwcyA9PSAxCisJbm9wKCk7CisjZW5kaWYKKyAgICB9CisKKyAgICB2b2lkIHRydW5jX3df
ZChGUFJlZ2lzdGVySUQgZmQsIEZQUmVnaXN0ZXJJRCBmcykKKyAgICB7CisJLyogdHJ1bmMudy5k
ICovCisJZW1pdEluc3QoMHg0NjIwMDAwZCB8IChmZCA8PCBPUF9TSF9GRCkgfCAoZnMgPDwgT1Bf
U0hfRlMpKTsKKyAgICB9CisKKyAgICB2b2lkIGN2dF9kX3coRlBSZWdpc3RlcklEIGZkLCBGUFJl
Z2lzdGVySUQgZnMpCisgICAgeworCS8qIGN2dC5kLncgKi8KKwllbWl0SW5zdCgweDQ2ODAwMDIx
IHwgKGZkIDw8IE9QX1NIX0ZEKSB8IChmcyA8PCBPUF9TSF9GUykpOworICAgIH0KKworICAgIHZv
aWQgY19lcV9kKEZQUmVnaXN0ZXJJRCBmcywgRlBSZWdpc3RlcklEIGZ0KQorICAgIHsKKwkvKiBj
LmVxLmQgKi8KKwllbWl0SW5zdCgweDQ2MjAwMDMyIHwgKGZzIDw8IE9QX1NIX0ZTKSB8IChmdCA8
PCBPUF9TSF9GVCkpOworI2lmIF9fbWlwcyA9PSAxCisJbm9wKCk7CisjZW5kaWYKKyAgICB9CisK
KyAgICB2b2lkIGNfbHRfZChGUFJlZ2lzdGVySUQgZnMsIEZQUmVnaXN0ZXJJRCBmdCkKKyAgICB7
CisJLyogYy5sdC5kICovCisJZW1pdEluc3QoMHg0NjIwMDAzYyB8IChmcyA8PCBPUF9TSF9GUykg
fCAoZnQgPDwgT1BfU0hfRlQpKTsKKyNpZiBfX21pcHMgPT0gMQorCW5vcCgpOworI2VuZGlmCisg
ICAgfQorCisgICAgdm9pZCBjX2xlX2QoRlBSZWdpc3RlcklEIGZzLCBGUFJlZ2lzdGVySUQgZnQp
CisgICAgeworCS8qIGMubHQuZCAqLworCWVtaXRJbnN0KDB4NDYyMDAwM2UgfCAoZnMgPDwgT1Bf
U0hfRlMpIHwgKGZ0IDw8IE9QX1NIX0ZUKSk7CisjaWYgX19taXBzID09IDEKKwlub3AoKTsKKyNl
bmRpZgorICAgIH0KKworICAgIEptcFNyYyBiYzF0KCkKKyAgICB7CisJLyogYmMxdCAqLworCWVt
aXRJbnN0KDB4NDUwMTAwMDApOworCW5vcCgpOworCS8qIFdlIG5lZWQgdHdvIGV4dHJhIG5vcHMg
Zm9yIHJlbGF4YXRpb24uICAqLworCW5vcCgpOworCW5vcCgpOworCXJldHVybiBKbXBTcmMobV9i
dWZmZXIuc2l6ZSgpKTsKKyAgICB9CisKKyAgICBKbXBTcmMgZmFyX2Z1bmN0aW9uX2NhbGwoKQor
ICAgIHsKKwlsdWkoTUlQU1JlZ2lzdGVyczo6dDksIDApOworCW9yaShNSVBTUmVnaXN0ZXJzOjp0
OSwgTUlQU1JlZ2lzdGVyczo6dDksIDApOworCS8qIGphbHIgKi8KKwllbWl0SW5zdCgweDAwMDBm
ODA5IHwgKE1JUFNSZWdpc3RlcnM6OnQ5IDw8IE9QX1NIX1JTKSk7CisJbm9wKCk7CisJcmV0dXJu
IEptcFNyYyhtX2J1ZmZlci5zaXplKCkpOworICAgIH0KKworICAgIEptcFNyYyBmdW5jdGlvbl9j
YWxsKCkKKyAgICB7CisJLyogamFsICovCisJZW1pdEluc3QoMHgwYzAwMDAwMCk7CisJbm9wKCk7
CisJcmV0dXJuIEptcFNyYyhtX2J1ZmZlci5zaXplKCkpOworICAgIH0KKworICAgIEptcFNyYyBm
dW5jdGlvbl9jYWxsX3ZpYV9yZWdpc3RlcihSZWdpc3RlcklEIHJzKQorICAgIHsKKwkvKiBqYWxy
ICovCisJZW1pdEluc3QoMHgwMDAwZjgwOSB8IChycyA8PCBPUF9TSF9SUykpOworCW5vcCgpOwor
CXJldHVybiBKbXBTcmMobV9idWZmZXIuc2l6ZSgpKTsKKyAgICB9CisKKyAgICBKbXBTcmMgdGFp
bF9mdW5jdGlvbl9jYWxsX3ZpYV9yZWdpc3RlcihSZWdpc3RlcklEIHJzKQorICAgIHsKKwkvKiBq
ciAqLworCWVtaXRJbnN0KDB4MDAwMDAwMDggfCAocnMgPDwgT1BfU0hfUlMpKTsKKwlub3AoKTsK
KwlyZXR1cm4gSm1wU3JjKG1fYnVmZmVyLnNpemUoKSk7CisgICAgfQorCisgICAgLy8gR2VuZXJh
bCBoZWxwZXJzCisKKyAgICBKbXBEc3QgbGFiZWwoKQorICAgIHsKKwlyZXR1cm4gSm1wRHN0KG1f
YnVmZmVyLnNpemUoKSk7CisgICAgfQorCisgICAgSm1wRHN0IGFsaWduKGludCBhbGlnbm1lbnQp
CisgICAgeworCXdoaWxlICghbV9idWZmZXIuaXNBbGlnbmVkKGFsaWdubWVudCkpCisJICAgIGJr
cHQoKTsKKworCXJldHVybiBsYWJlbCgpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkKiBnZXRS
ZWxvY2F0ZWRBZGRyZXNzKHZvaWQqIGNvZGUsIEptcFNyYyBqdW1wKQorICAgIHsKKwlBU1NFUlQo
anVtcC5tX29mZnNldCAhPSAtMSk7CisJdm9pZCAqYiA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KChyZWludGVycHJldF9jYXN0PGludHB0cl90Pihjb2RlKSkgKyBqdW1wLm1fb2Zmc2V0KTsKKyAg
ICAgICAgcmV0dXJuIGI7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQqIGdldFJlbG9jYXRlZEFk
ZHJlc3Modm9pZCogY29kZSwgSm1wRHN0IGxhYmVsKQorICAgIHsKKwl2b2lkICpiID0gcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGNvZGUpKSArIGxh
YmVsLm1fb2Zmc2V0KTsKKwlyZXR1cm4gYjsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGdldERp
ZmZlcmVuY2VCZXR3ZWVuTGFiZWxzKEptcERzdCBmcm9tLCBKbXBEc3QgdG8pCisgICAgeworCXJl
dHVybiB0by5tX29mZnNldCAtIGZyb20ubV9vZmZzZXQ7CisgICAgfQorCisgICAgc3RhdGljIGlu
dCBnZXREaWZmZXJlbmNlQmV0d2VlbkxhYmVscyhKbXBEc3QgZnJvbSwgSm1wU3JjIHRvKQorICAg
IHsKKwlyZXR1cm4gdG8ubV9vZmZzZXQgLSBmcm9tLm1fb2Zmc2V0OworICAgIH0KKworICAgIHN0
YXRpYyBpbnQgZ2V0RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMoSm1wU3JjIGZyb20sIEptcERzdCB0
bykKKyAgICB7CisJcmV0dXJuIHRvLm1fb2Zmc2V0IC0gZnJvbS5tX29mZnNldDsKKyAgICB9CisK
KyAgICAvLyBBc3NlbWJsZXIgYWRtaW4gbWV0aG9kczoKKworICAgIHNpemVfdCBzaXplKCkgY29u
c3QKKyAgICB7CisJcmV0dXJuIG1fYnVmZmVyLnNpemUoKTsKKyAgICB9CisKKyAgICB2b2lkKiBl
eGVjdXRhYmxlQ29weShFeGVjdXRhYmxlUG9vbCogYWxsb2NhdG9yKQorICAgIHsKKwlpbnQgc2l6
ZSA9IG1fYnVmZmVyLnNpemUoKTsKKwlpZiAoIXNpemUpCisJICAgIHJldHVybiAwOworCisJdm9p
ZCogcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvYyhzaXplKTsKKwlpZiAoIXJlc3VsdCkKKwkgICAg
cmV0dXJuIDA7CisKKwkvLyBDaGVjayBlYWNoIGp1bXAKKwlmb3IoSnVtcHM6Okl0ZXJhdG9yIGl0
ZXIgPSBtX2p1bXBzLmJlZ2luKCk7IGl0ZXIgIT0gbV9qdW1wcy5lbmQoKTsgKytpdGVyKSB7CisJ
ICAgIGludCBwb3MgPSAoKml0ZXIpOworCSAgICBNSVBTV29yZCAqaW5zbiA9IHJlaW50ZXJwcmV0
X2Nhc3Q8TUlQU1dvcmQqPihyZWludGVycHJldF9jYXN0PGludHB0cl90PihtX2J1ZmZlci5kYXRh
KCkpICsgcG9zKTsKKwkgICAgaW5zbiA9IGluc24gKyAyOworCSAgICBpZigoKCppbnNuKSAmIDB4
ZmMwMDAwMDApID09IDB4MDgwMDAwMDApIHsKKwkJaW50IG9mZnNldCA9ICgqaW5zbikgJiAweDAz
ZmZmZmZmOworCQlpbnQgb2xkX2luc25fYWRkcmVzcyA9IChpbnQpaW5zbjsKKwkJaW50IHRvcF9m
b3VyX2JpdHMgPSAob2xkX2luc25fYWRkcmVzcyArIDQpID4+IDI4OworCQlpbnQgb2xkX3Rhcmdl
dF9hZGRyZXNzID0gKHRvcF9mb3VyX2JpdHMgPDwgMjgpIHwgKG9mZnNldCA8PCAyKTsKKwkJaW50
IG9sZF9iYXNlID0gKGludCltX2J1ZmZlci5kYXRhKCk7CisJCWludCBuZXdfYmFzZSA9IChpbnQp
cmVzdWx0OworCQlpbnQgbmV3X3RhcmdldF9hZGRyZXNzID0gb2xkX3RhcmdldF9hZGRyZXNzIC0g
b2xkX2Jhc2UgKyBuZXdfYmFzZTsKKwkJaW50IG5ld19pbnNuX2FkZHJlc3MgPSBvbGRfaW5zbl9h
ZGRyZXNzIC0gb2xkX2Jhc2UgKyBuZXdfYmFzZTsKKwkJaWYgKCgobmV3X2luc25fYWRkcmVzcyAr
IDQpID4+IDI4KQorCQkgICAgIT0gKG5ld190YXJnZXRfYWRkcmVzcyA+PiAyOCkpIHsKKwkJICAg
IGZwcmludGYgKHN0ZGVyciwgIkVycm9yOiBDYW5ub3QgY3JlYXRlIE1JUFMganVtcCAoSikgZHVl
IHRvIHRoZSB0b3AgZm91ciBiaXRzIGFyZSBkaWZmZXJlbnQuXG4iKTsKKwkJfQorCQkqaW5zbiA9
IDB4MDgwMDAwMDAgfCAoKG5ld190YXJnZXRfYWRkcmVzcyA+PiAyKSAmIDB4M2ZmZmZmZik7CisJ
ICAgIH0KKwl9CisKKwlFeGVjdXRhYmxlQWxsb2NhdG9yOjptYWtlV3JpdGFibGUocmVzdWx0LCBz
aXplKTsKKwlyZXR1cm4gbWVtY3B5KHJlc3VsdCwgbV9idWZmZXIuZGF0YSgpLCBtX2J1ZmZlci5z
aXplKCkpOworICAgIH0KKworICAgIHN0YXRpYyB1bnNpZ25lZCBnZXRDYWxsUmV0dXJuT2Zmc2V0
KEptcFNyYyBjYWxsKQorICAgIHsKKwkvLyBUaGUgcmV0dXJuIGFkZHJlc3MgaXMgYWZ0ZXIgYSBj
YWxsIGFuZCBhIGRlbGF5IHNsb3QgaW5zdHJ1Y3Rpb24KKwlyZXR1cm4gY2FsbC5tX29mZnNldDsK
KyAgICB9CisKKyAgICAvLyBMaW5raW5nICYgcGF0Y2hpbmc6CisgICAgLy8KKyAgICAvLyAnbGlu
aycgYW5kICdwYXRjaCcgbWV0aG9kcyBhcmUgZm9yIHVzZSBvbiB1bnByb3RlY3RlZCBjb2RlIC0g
c3VjaCBhcyB0aGUgY29kZQorICAgIC8vIHdpdGhpbiB0aGUgQXNzZW1ibGVyQnVmZmVyLCBhbmQg
Y29kZSBiZWluZyBwYXRjaGVkIGJ5IHRoZSBwYXRjaCBidWZmZXIuICBPbmNlCisgICAgLy8gY29k
ZSBoYXMgYmVlbiBmaW5hbGl6ZWQgaXQgaXMgKHBsYXRmb3JtIHN1cHBvcnQgcGVybWl0dGluZykg
d2l0aGluIGEgbm9uLQorICAgIC8vIHdyaXRhYmxlIHJlZ2lvbiBvZiBtZW1vcnk7IHRvIG1vZGlm
eSB0aGUgY29kZSBpbiBhbiBleGVjdXRlLW9ubHkgZXhlY3VhYmxlCisgICAgLy8gcG9vbCB0aGUg
J3JlcGF0Y2gnIGFuZCAncmVsaW5rJyBtZXRob2RzIHNob3VsZCBiZSB1c2VkLgorCisgICAgdm9p
ZCBsaW5rSnVtcChKbXBTcmMgZnJvbSwgSm1wRHN0IHRvKQorICAgIHsKKwlBU1NFUlQodG8ubV9v
ZmZzZXQgIT0gLTEpOworCUFTU0VSVChmcm9tLm1fb2Zmc2V0ICE9IC0xKTsKKwlNSVBTV29yZCAq
aW5zbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8TUlQU1dvcmQqPihyZWludGVycHJldF9jYXN0PGludHB0
cl90PihtX2J1ZmZlci5kYXRhKCkpICsgZnJvbS5tX29mZnNldCk7CisJTUlQU1dvcmQgKnRvX3Bv
cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8TUlQU1dvcmQqPihyZWludGVycHJldF9jYXN0PGludHB0cl90
PihtX2J1ZmZlci5kYXRhKCkpICsgdG8ubV9vZmZzZXQpOworCisJQVNTRVJUICgoKihpbnNuIC0g
MSkpID09IDAgJiYgKCgqKGluc24gLSAyKSkgPT0gMCB8fCAoKCooaW5zbiAtIDIpKSAmIDB4ZmMw
MDAwMDApID09IDB4MDgwMDAwMDApICYmICgqKGluc24gLSAzKSkgPT0gMCk7CisJaW5zbiA9IGlu
c24gLSA0OworCWxpbmtXaXRoT2Zmc2V0KGluc24sIHRvX3Bvcyk7CisgICAgfQorCisgICAgc3Rh
dGljIHZvaWQgbGlua0p1bXAodm9pZCogY29kZSwgSm1wU3JjIGZyb20sIHZvaWQqIHRvKQorICAg
IHsKKwlBU1NFUlQoZnJvbS5tX29mZnNldCAhPSAtMSk7CisJTUlQU1dvcmQgKmluc24gPSByZWlu
dGVycHJldF9jYXN0PE1JUFNXb3JkKj4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oY29kZSkg
KyBmcm9tLm1fb2Zmc2V0KTsKKworCUFTU0VSVCAoKCooaW5zbiAtIDEpKSA9PSAwICYmICgoKihp
bnNuIC0gMikpID09IDAgfHwgKCgqKGluc24gLSAyKSkgJiAweGZjMDAwMDAwKSA9PSAweDA4MDAw
MDAwKSAmJiAoKihpbnNuIC0gMykpID09IDApOworCWluc24gPSBpbnNuIC0gNDsKKwlsaW5rV2l0
aE9mZnNldChpbnNuLCB0byk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgbGlua0NhbGwodm9p
ZCogY29kZSwgSm1wU3JjIGZyb20sIHZvaWQqIHRvKQorICAgIHsKKwlNSVBTV29yZCAqaW5zbiA9
IHJlaW50ZXJwcmV0X2Nhc3Q8TUlQU1dvcmQqPihyZWludGVycHJldF9jYXN0PGludHB0cl90Pihj
b2RlKSArIGZyb20ubV9vZmZzZXQpOworCWxpbmtDYWxsSW50ZXJuYWwoaW5zbiwgdG8pOworICAg
IH0KKworICAgIHN0YXRpYyB2b2lkIGxpbmtQb2ludGVyKHZvaWQqIGNvZGUsIEptcERzdCBmcm9t
LCB2b2lkKiB0bykKKyAgICB7CisJTUlQU1dvcmQgKmluc24gPSByZWludGVycHJldF9jYXN0PE1J
UFNXb3JkKj4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oY29kZSkgKyBmcm9tLm1fb2Zmc2V0
KTsKKwlBU1NFUlQoKCgqaW5zbikgJiAweGZmZTAwMDAwKSA9PSAweDNjMDAwMDAwKTsgLy8gbHVp
CisJKmluc24gPSAoKCppbnNuKSAmIDB4ZmZmZjAwMDApIHwgKChyZWludGVycHJldF9jYXN0PGlu
dHB0cl90Pih0bykgPj4gMTYpICYgMHhmZmZmKTsKKwlpbnNuKys7CisJQVNTRVJUKCgoKmluc24p
ICYgMHhmYzAwMDAwMCkgPT0gMHgzNDAwMDAwMCk7IC8vIG9yaQorCSppbnNuID0gKCgqaW5zbikg
JiAweGZmZmYwMDAwKSB8IChyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgJiAweGZmZmYp
OworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHJlbGlua0p1bXAodm9pZCogZnJvbSwgdm9pZCog
dG8pCisgICAgeworCU1JUFNXb3JkICppbnNuID0gcmVpbnRlcnByZXRfY2FzdDxNSVBTV29yZCo+
KGZyb20pOworCisJQVNTRVJUICgoKihpbnNuIC0gMSkpID09IDAgJiYgKCgqKGluc24gLSAyKSkg
PT0gMCB8fCAoKCooaW5zbiAtIDIpKSAmIDB4ZmMwMDAwMDApID09IDB4MDgwMDAwMDApICYmICgq
KGluc24gLSAzKSkgPT0gMCApOworCWluc24gPSBpbnNuIC0gNDsKKwlpbnQgZmx1c2hfc2l6ZSA9
IGxpbmtXaXRoT2Zmc2V0KGluc24sIHRvKTsKKworCUV4ZWN1dGFibGVBbGxvY2F0b3I6OmNhY2hl
Rmx1c2goaW5zbiwgZmx1c2hfc2l6ZSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVsaW5r
Q2FsbCh2b2lkKiBmcm9tLCB2b2lkKiB0bykKKyAgICB7CisJdm9pZCAqc3RhcnQgPSBsaW5rQ2Fs
bEludGVybmFsKGZyb20sIHRvKTsKKwlpbnQgc2l6ZSA9IHNpemVvZihNSVBTV29yZCk7CisJaW50
IGRpZmYgPSAocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZnJvbSkKKwkJICAgIC0gcmVpbnRl
cnByZXRfY2FzdDxpbnRwdHJfdD4oc3RhcnQpKTsKKwlpZiAoZGlmZiA9PSAxNikgLy8gV2UgbW9k
aWZ5IHR3byBpbnN0cnVjdGlvbnMgbHVpICsgb3JpLgorCSAgc2l6ZSA9IDIgKiBzaXplb2YoTUlQ
U1dvcmQpOworCisJRXhlY3V0YWJsZUFsbG9jYXRvcjo6Y2FjaGVGbHVzaChzdGFydCwgc2l6ZSk7
CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVwYXRjaEludDMyKHZvaWQqIGZyb20sIGludDMy
X3QgdG8pCisgICAgeworCU1JUFNXb3JkICppbnNuID0gcmVpbnRlcnByZXRfY2FzdDxNSVBTV29y
ZCo+KGZyb20pOworCUFTU0VSVCgoKCppbnNuKSAmIDB4ZmZlMDAwMDApID09IDB4M2MwMDAwMDAp
OyAvLyBsdWkKKwkqaW5zbiA9ICgoKmluc24pICYgMHhmZmZmMDAwMCkgfCAoKHRvID4+IDE2KSAm
IDB4ZmZmZik7CisJaW5zbisrOworCUFTU0VSVCgoKCppbnNuKSAmIDB4ZmMwMDAwMDApID09IDB4
MzQwMDAwMDApOyAvLyBvcmkKKwkqaW5zbiA9ICgoKmluc24pICYgMHhmZmZmMDAwMCkgfCAodG8g
JiAweGZmZmYpOworCWluc24tLTsKKwlFeGVjdXRhYmxlQWxsb2NhdG9yOjpjYWNoZUZsdXNoKGlu
c24sIDIgKiBzaXplb2YoTUlQU1dvcmQpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCByZXBh
dGNoUG9pbnRlcih2b2lkKiBmcm9tLCB2b2lkKiB0bykKKyAgICB7CisJcmVwYXRjaEludDMyKGZy
b20sIHJlaW50ZXJwcmV0X2Nhc3Q8aW50MzJfdD4odG8pKTsKKyAgICB9CisKKyAgICBzdGF0aWMg
dm9pZCByZXBhdGNoTG9hZFB0clRvTEVBKHZvaWQqIGZyb20pCisgICAgeworCU1JUFNXb3JkICpp
bnNuID0gcmVpbnRlcnByZXRfY2FzdDxNSVBTV29yZCo+KGZyb20pOworCWluc24gPSBpbnNuICsg
MzsKKwlBU1NFUlQgKCgoKmluc24pICYgMHhmYzAwMDAwMCkgPT0gMHg4YzAwMDAwMCk7IC8vIGx3
CisJLyogbHcgLT4gYWRkaXUgKi8KKwkqaW5zbiA9IDB4MjQwMDAwMDAgfCAoKCppbnNuKSAmIDB4
MDNmZmZmZmYgKTsKKworCUV4ZWN1dGFibGVBbGxvY2F0b3I6OmNhY2hlRmx1c2goaW5zbiwgc2l6
ZW9mKE1JUFNXb3JkKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyBpbnQgbGlua1dp
dGhPZmZzZXQoTUlQU1dvcmQgKmluc24sIHZvaWQgKnRvKQorICAgIHsKKwlBU1NFUlQoKCgoKmlu
c24pICYgMHhmYzAwMDAwMCkgPT0gMHgxMDAwMDAwMCkgLy8gYmVxCisJICAgICAgIHx8ICgoKCpp
bnNuKSAmIDB4ZmMwMDAwMDApID09IDB4MTQwMDAwMDApIC8vIGJuZQorCSAgICAgICB8fCAoKCgq
aW5zbikgJiAweGZmZmYwMDAwKSA9PSAweDQ1MDEwMDAwKSAvLyBiYzF0CisJICAgICAgIHx8ICgo
KCppbnNuKSAmIDB4ZmZmZjAwMDApID09IDB4NDUwMDAwMDApKTsgLy8gYmMxZgorCWludCBkaWZm
ID0gKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50
cHRyX3Q+KGluc24pIC0gNCkgPj4gMjsKKworCWlmIChkaWZmIDwgLTMyNzY4IHx8IGRpZmYgPiAz
Mjc2NykgeworCSAgICAvKgorCQlDb252ZXJ0IHRoZSBzZXF1ZW5jZToKKwkJICBiZXEgJDIsICQz
LCB0YXJnZXQKKwkJICBub3AKKwkJICBub3AKKwkJICBub3AKKworCQl0byB0aGUgbmV3IHNlcXVl
bmNlOgorCQkgIGJuZSAkMiwgJDMsIDFmCisJCSAgbm9wCisJCSAgaiAgICB0YXJnZXQKKwkJICBu
b3AKKwkJMToKKworCQlOb3RlOiBiZXEvYm5lL2JjMXQgYXJlIGNvbnZlcnRlZCB0byBibmUvYmVx
L2JjMWYuCisJICAgICovCisKKwkgICAgaWYgKCgqKGluc24gKyAyKSkgPT0gMCkgeworCQlpZiAo
KCgqaW5zbikgJiAweGZjMDAwMDAwKSA9PSAweDEwMDAwMDAwKQkvLyBiZXEKKwkJICAgICppbnNu
ID0gKCgqaW5zbikgJiAweDAzZmYwMDAwKSB8IDB4MTQwMDAwMDM7CisJCWVsc2UgaWYgKCgoKmlu
c24pICYgMHhmYzAwMDAwMCkgPT0gMHgxNDAwMDAwMCkJLy8gYm5lCisJCSAgICAqaW5zbiA9ICgo
Kmluc24pICYgMHgwM2ZmMDAwMCkgfCAweDEwMDAwMDAzOworCQllbHNlIGlmICgoKCppbnNuKSAm
IDB4ZmZmZjAwMDApID09IDB4NDUwMTAwMDApCS8vIGJjMXQKKwkJICAgICppbnNuID0gKCgqaW5z
bikgJiAweDAwMDAwMDAwKSB8IDB4NDUwMDAwMDM7CisJCWVsc2UKKwkJICAgIEFTU0VSVCgwKTsK
KwkgICAgfQorCisJICAgIGluc24gPSBpbnNuICsgMjsKKwkgICAgaWYgKCgocmVpbnRlcnByZXRf
Y2FzdDxpbnRwdHJfdD4oaW5zbikgKyA0KSA+PiAyOCkKKwkJIT0gKHJlaW50ZXJwcmV0X2Nhc3Q8
aW50cHRyX3Q+KHRvKSA+PiAyOCkpIHsKKwkJZnByaW50ZihzdGRlcnIsICJFcnJvcjogQ2Fubm90
IGNyZWF0ZSBNSVBTIGp1bXAgKEopIGR1ZSB0byB0aGUgdG9wIGZvdXIgYml0cyBhcmUgZGlmZmVy
ZW50LlxuIik7CisJCUNSQVNIKCk7CisJICAgIH0KKwkgICAgKmluc24gPSAweDA4MDAwMDAwIHwg
KChyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgPj4gMikgJiAweDNmZmZmZmYpOworCSAg
ICByZXR1cm4gMyAqIHNpemVvZihNSVBTV29yZCk7CisJfQorCWVsc2UgeworCSAgICAqaW5zbiA9
ICgoKmluc24pICYgMHhmZmZmMDAwMCkgfCAoZGlmZiAmIDB4ZmZmZik7CisJICAgIHJldHVybiBz
aXplb2YoTUlQU1dvcmQpOworCX0KKwlyZXR1cm4gMDsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9p
ZCAqbGlua0NhbGxJbnRlcm5hbCh2b2lkICpmcm9tLCB2b2lkICp0bykKKyAgICB7CisJTUlQU1dv
cmQgKmluc24gPSByZWludGVycHJldF9jYXN0PE1JUFNXb3JkKj4oZnJvbSk7CisJaW5zbiA9IGlu
c24gLSAyOworCWlmKCgoKmluc24pICYgMHhmYzAwMDAwMCkgPT0gMHgwYzAwMDAwMCkgeyAvLyBK
QUwKKwkgICAgaWYgKCgocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZnJvbSkgKyA0KSA+PiAy
OCkgIT0KKwkJKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSA+PiAyOCkpIHsKKwkJLy8g
RklYTUU6IFRoaXMgQ1JBU0ggbWVhbnMgd2UgY2Fubm90IHR1cm4gdGhlIEpJVCBvbgorCQkvLyBi
eSBkZWZhdWx0IG9uIE1JUFMuCisJCWZwcmludGYoc3RkZXJyLCAiRXJyb3I6IENhbm5vdCBjcmVh
dGUgTUlQUyBjYWxsIChKQUwpIGR1ZSB0byB0aGUgdG9wIGZvdXIgYml0cyBhcmUgZGlmZmVyZW50
LlxuIik7CisJCUNSQVNIKCk7CisJICAgIH0KKwkgICAgKmluc24gPSAoKCppbnNuKSAmIDB4ZmMw
MDAwMDApIHwgKChyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgPj4gMikgJiAweDNmZmZm
ZmYpOworCSAgICByZXR1cm4gaW5zbjsKKwl9CisJZWxzZSBpZigoKCgqaW5zbikgJiAweGZjMWYw
N2ZmKSA9PSAweDAwMDAwMDA5KQkvLyBKQUxSCisJCXx8ICgoKCppbnNuKSAmIDB4ZmMxZmZmZmYp
ID09IDB4MDAwMDAwMDgpKSB7CS8vIEpSCisJICAgIGluc24gPSBpbnNuIC0gMjsKKwkgICAgQVNT
RVJUKCgoKmluc24pICYgMHhmZmUwMDAwMCkgPT0gMHgzYzAwMDAwMCk7IC8vIGx1aQorCSAgICAq
aW5zbiA9ICgoKmluc24pICYgMHhmZmZmMDAwMCkgfCAoKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRy
X3Q+KHRvKSA+PiAxNikgJiAweGZmZmYpOworCSAgICBpbnNuKys7CisJICAgIEFTU0VSVCgoKCpp
bnNuKSAmIDB4ZmMwMDAwMDApID09IDB4MzQwMDAwMDApOyAvLyBvcmkKKwkgICAgKmluc24gPSAo
KCppbnNuKSAmIDB4ZmZmZjAwMDApIHwgKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAm
IDB4ZmZmZik7CisJICAgIGluc24tLTsKKwkgICAgcmV0dXJuIGluc247CisJfQorCWVsc2Ugewor
CSAgICBBU1NFUlQoMCk7CisJICAgIHJldHVybiBpbnNuOworCX0KKyAgICB9CisKKyAgICBBc3Nl
bWJsZXJCdWZmZXIgbV9idWZmZXI7CisgICAgQXNzZW1ibGVyQnVmZmVyIG1fdHJhbXBvbGluZUJ1
ZmZlcjsKKyAgICBKdW1wcyBtX2p1bXBzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBFTkFCTEUoQVNTRU1CTEVSKSAmJiBQTEFURk9STShNSVBTKQorCisjZW5kaWYgLy8g
TUlQU0Fzc2VtYmxlcl9oCkluZGV4OiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyTUlQUy5oCShyZXZpc2lvbiAwKQor
KysgYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyTUlQUy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDE0NzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLgorICogQ29weXJp
Z2h0IChDKSAyMDA5IE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IE1hY3JvQXNzZW1ibGVyTUlQU19oCisjZGVmaW5lIE1hY3JvQXNzZW1ibGVyTUlQU19oCisKKyNp
bmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShBU1NFTUJMRVIpICYmIFBMQVRG
T1JNKE1JUFMpCisKKyNpbmNsdWRlICJNSVBTQXNzZW1ibGVyLmgiCisjaW5jbHVkZSAiQWJzdHJh
Y3RNYWNyb0Fzc2VtYmxlci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgTWFjcm9Bc3Nl
bWJsZXJNSVBTIDogcHVibGljIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI8TUlQU0Fzc2VtYmxlcj4g
eworcHVibGljOgorCisgICAgc3RhdGljIGNvbnN0IFNjYWxlIFNjYWxlUHRyID0gVGltZXNGb3Vy
OworCisgICAgLy8gRm9yIHN0b3JpbmcgaW1tZWRpYXRlIG51bWJlcgorICAgIHN0YXRpYyBjb25z
dCBSZWdpc3RlcklEIGltbVRlbXBSZWdpc3RlciA9IE1JUFNSZWdpc3RlcnM6OnQwOworICAgIC8v
IEZvciBzdG9yaW5nIGRhdGEgbG9hZGVkIGZyb20gdGhlIG1lbW9yeQorICAgIHN0YXRpYyBjb25z
dCBSZWdpc3RlcklEIGRhdGFUZW1wUmVnaXN0ZXIgPSBNSVBTUmVnaXN0ZXJzOjp0MTsKKyAgICAv
LyBGb3Igc3RvcmluZyBhZGRyZXNzIGJhc2UKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBh
ZGRyVGVtcFJlZ2lzdGVyID0gTUlQU1JlZ2lzdGVyczo6dDI7CisgICAgLy8gRm9yIHN0b3Jpbmcg
Y29tcGFyZSByZXN1bHQKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBjbXBUZW1wUmVnaXN0
ZXIgPSBNSVBTUmVnaXN0ZXJzOjp0MzsKKworICAgIC8vIEZQIHRlbXAgcmVnaXN0ZXIKKyAgICBz
dGF0aWMgY29uc3QgRlBSZWdpc3RlcklEIGZwVGVtcFJlZ2lzdGVyID0gTUlQU1JlZ2lzdGVyczo6
ZjE2OworCisgICAgZW51bSBDb25kaXRpb24geworICAgICAgICBFcXVhbCwKKyAgICAgICAgTm90
RXF1YWwsCisgICAgICAgIEFib3ZlLAorICAgICAgICBBYm92ZU9yRXF1YWwsCisgICAgICAgIEJl
bG93LAorICAgICAgICBCZWxvd09yRXF1YWwsCisgICAgICAgIEdyZWF0ZXJUaGFuLAorICAgICAg
ICBHcmVhdGVyVGhhbk9yRXF1YWwsCisgICAgICAgIExlc3NUaGFuLAorICAgICAgICBMZXNzVGhh
bk9yRXF1YWwsCisgICAgICAgIE92ZXJmbG93LAorICAgICAgICBTaWduZWQsCisgICAgICAgIFpl
cm8sCisgICAgICAgIE5vblplcm8KKyAgICB9OworCisgICAgZW51bSBEb3VibGVDb25kaXRpb24g
eworICAgICAgICBEb3VibGVFcXVhbCwKKyAgICAgICAgRG91YmxlR3JlYXRlclRoYW4sCisgICAg
ICAgIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCwKKyAgICAgICAgRG91YmxlTGVzc1RoYW4sCisg
ICAgICAgIERvdWJsZUxlc3NUaGFuT3JFcXVhbAorICAgIH07CisKKyAgICBzdGF0aWMgY29uc3Qg
UmVnaXN0ZXJJRCBzdGFja1BvaW50ZXJSZWdpc3RlciA9IE1JUFNSZWdpc3RlcnM6OnNwOworICAg
IHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJldHVybkFkZHJlc3NSZWdpc3RlciA9IE1JUFNSZWdp
c3RlcnM6OnJhOworCisgICAgLy8gSW50ZWdlciBhcml0aG1ldGljIG9wZXJhdGlvbnM6CisgICAg
Ly8KKyAgICAvLyBPcGVyYXRpb25zIGFyZSB0eXBpY2FsbHkgdHdvIG9wZXJhbmQgLSBvcGVyYXRp
b24oc291cmNlLCBzcmNEc3QpCisgICAgLy8gRm9yIG1hbnkgb3BlcmF0aW9ucyB0aGUgc291cmNl
IG1heSBiZSBhbiBJbW0zMiwgdGhlIHNyY0RzdCBvcGVyYW5kCisgICAgLy8gbWF5IG9mdGVuIGJl
IGEgbWVtb3J5IGxvY2F0aW9uIChleHBsaWN0bHkgZGVzY3JpYmVkIHVzaW5nIGFuIEFkZHJlc3MK
KyAgICAvLyBvYmplY3QpLgorCisgICAgdm9pZCBhZGQzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0
ZXJJRCBkZXN0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRk
dShkZXN0LCBkZXN0LCBzcmMpOworICAgIH0KKworICAgIHZvaWQgYWRkMzIoSW1tMzIgaW1tLCBS
ZWdpc3RlcklEIGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgeworCWFkZDMyKGltbSwgZGVzdCwg
ZGVzdCwgZml4ZWQpOworICAgIH0KKworICAgIHZvaWQgYWRkMzIoSW1tMzIgaW1tLCBSZWdpc3Rl
cklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKwlpZihpbW0u
bV92YWx1ZSA+PSAtMzI3NjggJiYgaW1tLm1fdmFsdWUgPD0gMzI3NjcgJiYgZml4ZWQgPT0gMCkg
eworCSAgICAvKgorCSAgICAgIGFkZGl1CWRlc3QsIHNyYywgaW1tCisJICAgICovCisJICAgIG1f
YXNzZW1ibGVyLmFkZGl1KGRlc3QsIHNyYywgaW1tLm1fdmFsdWUpOworCX0KKwllbHNlIHsKKwkg
ICAgLyoKKwkgICAgICBsaQlpbW1UZW1wLCBpbW0KKwkgICAgICBhZGR1CWRlc3QsIHNyYywgaW1t
VGVtcAorCSAgICAqLworCSAgICBtX2Fzc2VtYmxlci5saShpbW1UZW1wUmVnaXN0ZXIsIGltbS5t
X3ZhbHVlLCBmaXhlZCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGRlc3QsIHNyYywg
aW1tVGVtcFJlZ2lzdGVyKTsKKwl9CisgICAgfQorCisgICAgdm9pZCBhZGQzMihJbW0zMiBpbW0s
IEFkZHJlc3MgYWRkcmVzcywgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIGlmIChhZGRy
ZXNzLm9mZnNldCA+PSAtMzI3NjggJiYgYWRkcmVzcy5vZmZzZXQgPD0gMzI3NjcgJiYgZml4ZWQg
PT0gMCkgeworCSAgICAvKgorCSAgICAgIGx3CWRhdGFUZW1wLCBvZmZzZXQoYmFzZSkKKwkgICAg
ICBsaQlpbW1UZW1wLCBpbW0KKwkgICAgICBhZGR1CWRhdGFUZW1wLCBkYXRhVGVtcCwgaW1tVGVt
cAorCSAgICAgIHN3CWRhdGFUZW1wLCBvZmZzZXQoYmFzZSkKKwkgICAgKi8KKwkgICAgbV9hc3Nl
bWJsZXIubHcoZGF0YVRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCk7
CisJICAgIGlmKGltbS5tX3ZhbHVlID49IC0zMjc2OCAmJiBpbW0ubV92YWx1ZSA8PSAzMjc2NyAm
JiBmaXhlZCA9PSAwKQorCQltX2Fzc2VtYmxlci5hZGRpdShkYXRhVGVtcFJlZ2lzdGVyLCBkYXRh
VGVtcFJlZ2lzdGVyLAorCQkJCSAgaW1tLm1fdmFsdWUpOworCSAgICBlbHNlIHsKKwkJbV9hc3Nl
bWJsZXIubGkoaW1tVGVtcFJlZ2lzdGVyLCBpbW0ubV92YWx1ZSwgZml4ZWQpOworCQltX2Fzc2Vt
Ymxlci5hZGR1KGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsCisJCQkJIGltbVRl
bXBSZWdpc3Rlcik7CisJICAgIH0KKwkgICAgbV9hc3NlbWJsZXIuc3coZGF0YVRlbXBSZWdpc3Rl
ciwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCk7CisJfQorCWVsc2UgeworCSAgICAvKgor
CSAgICAgIGx1aQlhZGRyVGVtcCwgb2Zmc2V0ID4+IDE2CisJICAgICAgYWRkdQlhZGRyVGVtcCwg
YWRkclRlbXAsIGJhc2UKKwkgICAgICBsdwlkYXRhVGVtcCwgKG9mZnNldCAmIDB4ZmZmZikoYWRk
clRlbXApCisJICAgICAgbGkJaW1tdGVtcCwgaW1tCisJICAgICAgYWRkdQlkYXRhVGVtcCwgZGF0
YVRlbXAsIGltbVRlbXAKKwkgICAgICBzdwlkYXRhVGVtcCwgKG9mZnNldCAmIDB4ZmZmZikoYWRk
clRlbXApCisJICAgICovCisJICAgIG1fYXNzZW1ibGVyLmx1aShhZGRyVGVtcFJlZ2lzdGVyLCBh
ZGRyZXNzLm9mZnNldCA+PiAxNik7CisJICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdp
c3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlKTsKKwkgICAgbV9hc3NlbWJsZXIu
bHcoZGF0YVRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQpOwor
CisJICAgIGlmKGltbS5tX3ZhbHVlID49IC0zMjc2OCAmJiBpbW0ubV92YWx1ZSA8PSAzMjc2NyAm
JiBmaXhlZCA9PSAwKQorCQltX2Fzc2VtYmxlci5hZGRpdShkYXRhVGVtcFJlZ2lzdGVyLCBkYXRh
VGVtcFJlZ2lzdGVyLAorCQkJCSAgaW1tLm1fdmFsdWUpOworCSAgICBlbHNlIHsKKwkJbV9hc3Nl
bWJsZXIubGkoaW1tVGVtcFJlZ2lzdGVyLCBpbW0ubV92YWx1ZSwgZml4ZWQpOworCQltX2Fzc2Vt
Ymxlci5hZGR1KGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsCisJCQkJIGltbVRl
bXBSZWdpc3Rlcik7CisJICAgIH0KKwkgICAgbV9hc3NlbWJsZXIuc3coZGF0YVRlbXBSZWdpc3Rl
ciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQpOworCX0KKyAgICB9CisKKyAgICB2
b2lkIGFkZDMyKEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QsIGludCBmaXhlZCA9IDApCisg
ICAgeworCWxvYWQzMihzcmMsIGRhdGFUZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKwlhZGQzMihkYXRh
VGVtcFJlZ2lzdGVyLCBkZXN0LCBmaXhlZCk7CisgICAgfQorCisgICAgdm9pZCBhZGQzMihSZWdp
c3RlcklEIHNyYywgQWRkcmVzcyBkZXN0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAg
aWYgKGRlc3Qub2Zmc2V0ID49IC0zMjc2OCAmJiBkZXN0Lm9mZnNldCA8PSAzMjc2NyAmJiBmaXhl
ZCA9PSAwKSB7CisJICAgIC8qCisJICAgICAgbHcJZGF0YVRlbXAsIG9mZnNldChiYXNlKQorCSAg
ICAgIGFkZHUJZGF0YVRlbXAsIGRhdGFUZW1wLCBzcmMKKwkgICAgICBzdwlkYXRhVGVtcCwgb2Zm
c2V0KGJhc2UpCisJICAgICovCisJICAgIG1fYXNzZW1ibGVyLmx3KGRhdGFUZW1wUmVnaXN0ZXIs
IGRlc3QuYmFzZSwgZGVzdC5vZmZzZXQpOworCSAgICBtX2Fzc2VtYmxlci5hZGR1KGRhdGFUZW1w
UmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsIHNyYyk7CisJICAgIG1fYXNzZW1ibGVyLnN3KGRh
dGFUZW1wUmVnaXN0ZXIsIGRlc3QuYmFzZSwgZGVzdC5vZmZzZXQpOworCX0KKwllbHNlIHsKKwkg
ICAgLyoKKwkgICAgICBsdWkJYWRkclRlbXAsIG9mZnNldCA+PiAxNgorCSAgICAgIGFkZHUJYWRk
clRlbXAsIGFkZHJUZW1wLCBiYXNlCisJICAgICAgbHcJZGF0YVRlbXAsIChvZmZzZXQgJiAweGZm
ZmYpKGFkZHJUZW1wKQorCSAgICAgIGFkZHUJZGF0YVRlbXAsIGRhdGFUZW1wLCBzcmMKKwkgICAg
ICBzdwlkYXRhVGVtcCwgKG9mZnNldCAmIDB4ZmZmZikoYWRkclRlbXApCisJICAgICovCisJICAg
IG1fYXNzZW1ibGVyLmx1aShhZGRyVGVtcFJlZ2lzdGVyLCBkZXN0Lm9mZnNldCA+PiAxNik7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVn
aXN0ZXIsIGRlc3QuYmFzZSk7CisJICAgIG1fYXNzZW1ibGVyLmx3KGRhdGFUZW1wUmVnaXN0ZXIs
IGFkZHJUZW1wUmVnaXN0ZXIsIGRlc3Qub2Zmc2V0KTsKKwkgICAgbV9hc3NlbWJsZXIuYWRkdShk
YXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLCBzcmMpOworCSAgICBtX2Fzc2VtYmxl
ci5zdyhkYXRhVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBkZXN0Lm9mZnNldCk7CisJ
fQorICAgIH0KKworICAgIHZvaWQgYWRkMzIoSW1tMzIgaW1tLCBBYnNvbHV0ZUFkZHJlc3MgYWRk
cmVzcywgaW50IGZpeGVkID0gMCkKKyAgICB7CisJLyoKKwkgICBsaQlhZGRyVGVtcCwgYWRkcmVz
cworCSAgIGxpCWltbVRlbXAsIGltbQorCSAgIGx3CWRhdGFUZW1wLCAwKGFkZHJUZW1wKQorCSAg
IGFkZHUJZGF0YVRlbXAsIGRhdGFUZW1wLCBpbW1UZW1wCisJICAgc3cJZGF0YVRlbXAsIDAoYWRk
clRlbXApCisJKi8KKwltX2Fzc2VtYmxlci5saShhZGRyVGVtcFJlZ2lzdGVyLAorCQkgICAgICAg
cmVpbnRlcnByZXRfY2FzdDxNSVBTV29yZD4oYWRkcmVzcy5tX3B0ciksIGZpeGVkKTsKKwltX2Fz
c2VtYmxlci5sdyhkYXRhVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCAwKTsKKwlpZiAo
aW1tLm1fdmFsdWUgPj0gLTMyNzY4ICYmIGltbS5tX3ZhbHVlIDw9IDMyNzY3ICYmIGZpeGVkID09
IDApCisJICAgIG1fYXNzZW1ibGVyLmFkZGl1KGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVn
aXN0ZXIsIGltbS5tX3ZhbHVlKTsKKwllbHNlIHsKKwkgICAgbV9hc3NlbWJsZXIubGkoaW1tVGVt
cFJlZ2lzdGVyLCBpbW0ubV92YWx1ZSwgZml4ZWQpOworCSAgICBtX2Fzc2VtYmxlci5hZGR1KGRh
dGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsIGltbVRlbXBSZWdpc3Rlcik7CisJfQor
CW1fYXNzZW1ibGVyLnN3KGRhdGFUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIDApOwor
ICAgIH0KKworICAgIHZvaWQgYW5kMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCwg
aW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZF9pbnNuKGRlc3Qs
IGRlc3QsIHNyYyk7CisgICAgfQorCisgICAgdm9pZCBhbmQzMihJbW0zMiBpbW0sIFJlZ2lzdGVy
SUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisJaWYgKGltbS5tX3ZhbHVlID09IDAgJiYg
Zml4ZWQgPT0gMCkKKwkgICAgbW92ZShNSVBTUmVnaXN0ZXJzOjp6ZXJvLCBkZXN0LCBmaXhlZCk7
CisJZWxzZSBpZiAoaW1tLm1fdmFsdWUgPiAwICYmIGltbS5tX3ZhbHVlIDwgNjU1MzUgJiYgZml4
ZWQgPT0gMCkKKwkgICAgbV9hc3NlbWJsZXIuYW5kaShkZXN0LCBkZXN0LCBpbW0ubV92YWx1ZSk7
CisJZWxzZSB7CisJICAgIC8qCisJICAgICAgbGkJaW1tVGVtcCwgaW1tCisJICAgICAgYW5kCWRl
c3QsIGRlc3QsIGltbVRlbXAKKwkgICAgKi8KKwkgICAgbV9hc3NlbWJsZXIubGkoaW1tVGVtcFJl
Z2lzdGVyLCBpbW0ubV92YWx1ZSwgZml4ZWQpOworCSAgICBtX2Fzc2VtYmxlci5hbmRfaW5zbihk
ZXN0LCBkZXN0LCBpbW1UZW1wUmVnaXN0ZXIpOworCX0KKyAgICB9CisKKyAgICB2b2lkIGxzaGlm
dDMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIuc2xsKGRlc3QsIGRlc3QsIGltbS5tX3ZhbHVlKTsKKyAgICB9CisK
KyAgICB2b2lkIGxzaGlmdDMyKFJlZ2lzdGVySUQgc2hpZnRfYW1vdW50LCBSZWdpc3RlcklEIGRl
c3QsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zbGx2KGRlc3Qs
IGRlc3QsIHNoaWZ0X2Ftb3VudCk7CisgICAgfQorCisgICAgdm9pZCBtdWwzMihSZWdpc3RlcklE
IHNyYywgUmVnaXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIubXVsKGRlc3QsIGRlc3QsIHNyYyk7CisgICAgfQorCisgICAgdm9pZCBtdWwzMihJ
bW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QsIGludCBmaXhlZCA9IDAp
CisgICAgeworCWlmIChpbW0ubV92YWx1ZSA9PSAwICYmIGZpeGVkID09IDApCisJICAgIG1vdmUo
TUlQU1JlZ2lzdGVyczo6emVybywgZGVzdCwgZml4ZWQpOworCWVsc2UgaWYgKGltbS5tX3ZhbHVl
ID09IDEgJiYgZml4ZWQgPT0gMCkKKwkgICAgbW92ZShzcmMsIGRlc3QsIGZpeGVkKTsKKwllbHNl
IHsKKwkgICAgLyoKKwkJbGkJZGF0YVRlbXAsIGltbQorCQltdWwJZGVzdCwgc3JjLCBkYXRhVGVt
cAorCSAgICAqLworCSAgICBtX2Fzc2VtYmxlci5saShkYXRhVGVtcFJlZ2lzdGVyLCBpbW0ubV92
YWx1ZSwgZml4ZWQpOworCSAgICBtX2Fzc2VtYmxlci5tdWwoZGVzdCwgc3JjLCBkYXRhVGVtcFJl
Z2lzdGVyKTsKKwl9CisgICAgfQorCisgICAgdm9pZCBub3QzMihSZWdpc3RlcklEIHNyY0Rlc3Qs
IGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5ub3Ioc3JjRGVzdCwg
c3JjRGVzdCwgTUlQU1JlZ2lzdGVyczo6emVybyk7CisgICAgfQorCisgICAgdm9pZCBvcjMyKFJl
Z2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgeworICAg
ICAgICBtX2Fzc2VtYmxlci5vcl9pbnNuKGRlc3QsIGRlc3QsIHNyYyk7CisgICAgfQorCisgICAg
dm9pZCBvcjMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQgPSAwKQorICAg
IHsKKwlpZiAoaW1tLm1fdmFsdWUgPT0gMCAmJiBmaXhlZCA9PSAwKQorCSAgICA7CisJZWxzZSBp
ZiAoaW1tLm1fdmFsdWUgPiAwICYmIGltbS5tX3ZhbHVlIDwgNjU1MzUgJiYgZml4ZWQgPT0gMCkK
KwkgICAgbV9hc3NlbWJsZXIub3JpKGRlc3QsIGRlc3QsIGltbS5tX3ZhbHVlKTsKKwllbHNlIHsK
KwkgICAgLyoKKwkJbGkJZGF0YVRlbXAsIGltbQorCQlvcglkZXN0LCBkZXN0LCBkYXRhVGVtcAor
CSAgICAqLworCSAgICBtX2Fzc2VtYmxlci5saShkYXRhVGVtcFJlZ2lzdGVyLCBpbW0ubV92YWx1
ZSwgZml4ZWQpOworCSAgICBtX2Fzc2VtYmxlci5vcl9pbnNuKGRlc3QsIGRlc3QsIGRhdGFUZW1w
UmVnaXN0ZXIpOworCX0KKyAgICB9CisKKyAgICB2b2lkIHJzaGlmdDMyKFJlZ2lzdGVySUQgc2hp
ZnRfYW1vdW50LCBSZWdpc3RlcklEIGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5zcmF2KGRlc3QsIGRlc3QsIHNoaWZ0X2Ftb3VudCk7CisgICAgfQorCisg
ICAgdm9pZCByc2hpZnQzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0g
MCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnNyYShkZXN0LCBkZXN0LCBpbW0ubV92YWx1
ZSk7CisgICAgfQorCisgICAgdm9pZCBzdWIzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBk
ZXN0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3VidShkZXN0
LCBkZXN0LCBzcmMpOworICAgIH0KKworICAgIHZvaWQgc3ViMzIoSW1tMzIgaW1tLCBSZWdpc3Rl
cklEIGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgeworCWlmKGltbS5tX3ZhbHVlID49IC0zMjc2
NyAmJiBpbW0ubV92YWx1ZSA8PSAzMjc2OCAmJiBmaXhlZCA9PSAwKSB7CisJICAgIC8qCisJICAg
ICAgYWRkaXUJZGVzdCwgc3JjLCBpbW0KKwkgICAgKi8KKwkgICAgbV9hc3NlbWJsZXIuYWRkaXUo
ZGVzdCwgZGVzdCwgLWltbS5tX3ZhbHVlKTsKKwl9CisJZWxzZSB7CisJICAgIC8qCisJICAgICAg
bGkJaW1tVGVtcCwgaW1tCisJICAgICAgc3VidQlkZXN0LCBzcmMsIGltbVRlbXAKKwkgICAgKi8K
KwkgICAgbV9hc3NlbWJsZXIubGkoaW1tVGVtcFJlZ2lzdGVyLCBpbW0ubV92YWx1ZSwgZml4ZWQp
OworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3VidShkZXN0LCBkZXN0LCBpbW1UZW1wUmVnaXN0
ZXIpOworCX0KKyAgICB9CisKKyAgICB2b2lkIHN1YjMyKEltbTMyIGltbSwgQWRkcmVzcyBhZGRy
ZXNzLCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgaWYgKGFkZHJlc3Mub2Zmc2V0ID49
IC0zMjc2OCAmJiBhZGRyZXNzLm9mZnNldCA8PSAzMjc2NyAmJiBmaXhlZCA9PSAwKSB7CisJICAg
IC8qCisJICAgICAgbHcJZGF0YVRlbXAsIG9mZnNldChiYXNlKQorCSAgICAgIGxpCWltbVRlbXAs
IGltbQorCSAgICAgIHN1YnUJZGF0YVRlbXAsIGRhdGFUZW1wLCBpbW1UZW1wCisJICAgICAgc3cJ
ZGF0YVRlbXAsIG9mZnNldChiYXNlKQorCSAgICAqLworCSAgICBtX2Fzc2VtYmxlci5sdyhkYXRh
VGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mub2Zmc2V0KTsKKwkgICAgaWYoaW1t
Lm1fdmFsdWUgPj0gLTMyNzY3ICYmIGltbS5tX3ZhbHVlIDw9IDMyNzY4ICYmIGZpeGVkID09IDAp
CisJCW1fYXNzZW1ibGVyLmFkZGl1KGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIs
CisJCQkJICAtaW1tLm1fdmFsdWUpOworCSAgICBlbHNlIHsKKwkJbV9hc3NlbWJsZXIubGkoaW1t
VGVtcFJlZ2lzdGVyLCBpbW0ubV92YWx1ZSwgZml4ZWQpOworCQltX2Fzc2VtYmxlci5zdWJ1KGRh
dGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsCisJCQkJIGltbVRlbXBSZWdpc3Rlcik7
CisJICAgIH0KKwkgICAgbV9hc3NlbWJsZXIuc3coZGF0YVRlbXBSZWdpc3RlciwgYWRkcmVzcy5i
YXNlLCBhZGRyZXNzLm9mZnNldCk7CisJfQorCWVsc2UgeworCSAgICAvKgorCSAgICAgIGx1aQlh
ZGRyVGVtcCwgb2Zmc2V0ID4+IDE2CisJICAgICAgYWRkdQlhZGRyVGVtcCwgYWRkclRlbXAsIGJh
c2UKKwkgICAgICBsdwlkYXRhVGVtcCwgKG9mZnNldCAmIDB4ZmZmZikoYWRkclRlbXApCisJICAg
ICAgbGkJaW1tdGVtcCwgaW1tCisJICAgICAgc3VidQlkYXRhVGVtcCwgZGF0YVRlbXAsIGltbVRl
bXAKKwkgICAgICBzdwlkYXRhVGVtcCwgKG9mZnNldCAmIDB4ZmZmZikoYWRkclRlbXApCisJICAg
ICovCisJICAgIG1fYXNzZW1ibGVyLmx1aShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNl
dCA+PiAxNik7CisJICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRl
bXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlKTsKKwkgICAgbV9hc3NlbWJsZXIubHcoZGF0YVRlbXBS
ZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQpOworCisJICAgIGlmKGlt
bS5tX3ZhbHVlID49IC0zMjc2NyAmJiBpbW0ubV92YWx1ZSA8PSAzMjc2OCAmJiBmaXhlZCA9PSAw
KQorCQltX2Fzc2VtYmxlci5hZGRpdShkYXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVy
LAorCQkJCSAgLWltbS5tX3ZhbHVlKTsKKwkgICAgZWxzZSB7CisJCW1fYXNzZW1ibGVyLmxpKGlt
bVRlbXBSZWdpc3RlciwgaW1tLm1fdmFsdWUsIGZpeGVkKTsKKwkJbV9hc3NlbWJsZXIuc3VidShk
YXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLAorCQkJCSBpbW1UZW1wUmVnaXN0ZXIp
OworCSAgICB9CisJICAgIG1fYXNzZW1ibGVyLnN3KGRhdGFUZW1wUmVnaXN0ZXIsIGFkZHJUZW1w
UmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKwl9CisgICAgfQorCisgICAgdm9pZCBzdWIzMihB
ZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKwlsb2Fk
MzIoc3JjLCBkYXRhVGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisJc3ViMzIoZGF0YVRlbXBSZWdpc3Rl
ciwgZGVzdCwgZml4ZWQpOworICAgIH0KKworICAgIHZvaWQgc3ViMzIoSW1tMzIgaW1tLCBBYnNv
bHV0ZUFkZHJlc3MgYWRkcmVzcywgaW50IGZpeGVkID0gMCkKKyAgICB7CisJLyoKKwkgICBsaQlh
ZGRyVGVtcCwgYWRkcmVzcworCSAgIGxpCWltbVRlbXAsIGltbQorCSAgIGx3CWRhdGFUZW1wLCAw
KGFkZHJUZW1wKQorCSAgIHN1YnUJZGF0YVRlbXAsIGRhdGFUZW1wLCBpbW1UZW1wCisJICAgc3cJ
ZGF0YVRlbXAsIDAoYWRkclRlbXApCisJKi8KKwltX2Fzc2VtYmxlci5saShhZGRyVGVtcFJlZ2lz
dGVyLAorCQkgICAgICAgcmVpbnRlcnByZXRfY2FzdDxNSVBTV29yZD4oYWRkcmVzcy5tX3B0ciks
IGZpeGVkKTsKKwltX2Fzc2VtYmxlci5sdyhkYXRhVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lz
dGVyLCAwKTsKKworCWlmKGltbS5tX3ZhbHVlID49IC0zMjc2NyAmJiBpbW0ubV92YWx1ZSA8PSAz
Mjc2OCAmJiBmaXhlZCA9PSAwKSB7CisJICAgIG1fYXNzZW1ibGVyLmFkZGl1KGRhdGFUZW1wUmVn
aXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsCisJCQkgICAgICAtaW1tLm1fdmFsdWUpOworCX0KKwll
bHNlIHsKKwkgICAgbV9hc3NlbWJsZXIubGkoaW1tVGVtcFJlZ2lzdGVyLCBpbW0ubV92YWx1ZSwg
Zml4ZWQpOworCSAgICBtX2Fzc2VtYmxlci5zdWJ1KGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1w
UmVnaXN0ZXIsIGltbVRlbXBSZWdpc3Rlcik7CisJfQorCW1fYXNzZW1ibGVyLnN3KGRhdGFUZW1w
UmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIDApOworICAgIH0KKworICAgIHZvaWQgeG9yMzIo
UmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLnhvcl9pbnNuKGRlc3QsIGRlc3QsIHNyYyk7CisgICAgfQorCisg
ICAgdm9pZCB4b3IzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkK
KyAgICB7CisJLyoKKwkgICAgbGkJaW1tVGVtcCwgaW1tCisJICAgIHhvcglkZXN0LCBkZXN0LCBp
bW1UZW1wCisJKi8KKwltX2Fzc2VtYmxlci5saShpbW1UZW1wUmVnaXN0ZXIsIGltbS5tX3ZhbHVl
LCBmaXhlZCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnhvcl9pbnNuKGRlc3QsIGRlc3QsIGltbVRl
bXBSZWdpc3Rlcik7CisgICAgfQorCisgICAgLy8gTWVtb3J5IGFjY2VzcyBvcGVyYXRpb25zOgor
ICAgIC8vCisgICAgLy8gTG9hZHMgYXJlIG9mIHRoZSBmb3JtIGxvYWQoYWRkcmVzcywgZGVzdGlu
YXRpb24pIGFuZCBzdG9yZXMgb2YgdGhlIGZvcm0KKyAgICAvLyBzdG9yZShzb3VyY2UsIGFkZHJl
c3MpLiAgVGhlIHNvdXJjZSBmb3IgYSBzdG9yZSBtYXkgYmUgYW4gSW1tMzIuICBBZGRyZXNzCisg
ICAgLy8gb3BlcmFuZCBvYmplY3RzIHRvIGxvYWRzIGFuZCBzdG9yZSB3aWxsIGJlIGltcGxpY2l0
bHkgY29uc3RydWN0ZWQgaWYgYQorICAgIC8vIHJlZ2lzdGVyIGlzIHBhc3NlZC4KKworICAgIHZv
aWQgbG9hZDMyKEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QsIGludCBm
aXhlZCA9IDApCisgICAgeworICAgICAgICBpZiAoYWRkcmVzcy5vZmZzZXQgPj0gLTMyNzY4ICYm
IGFkZHJlc3Mub2Zmc2V0IDw9IDMyNzY3ICYmIGZpeGVkID09IDApCisJICAgIG1fYXNzZW1ibGVy
Lmx3KGRlc3QsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5vZmZzZXQpOworCWVsc2UgeworCSAgICAv
KgorCQlsdWkJYWRkclRlbXAsIG9mZnNldCA+PiAxNgorCQlhZGR1CWFkZHJUZW1wLCBhZGRyVGVt
cCwgYmFzZQorCQlsdwlkZXN0LCAob2Zmc2V0ICYgMHhmZmZmKShhZGRyVGVtcCkKKwkgICAgICAq
LworCSAgICBtX2Fzc2VtYmxlci5sdWkoYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQg
Pj4gMTYpOworCSAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1w
UmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSk7CisJICAgIG1fYXNzZW1ibGVyLmx3KGRlc3QsIGFkZHJU
ZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKwl9CisgICAgfQorCisgICAgdm9pZCBsb2Fk
MzIoQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAg
ICB7CisgICAgICAgIGlmIChhZGRyZXNzLm9mZnNldCA+PSAtMzI3NjggJiYgYWRkcmVzcy5vZmZz
ZXQgPD0gMzI3NjcgJiYgZml4ZWQgPT0gMCkgeworCSAgICAvKgorCQlzbGwJYWRkclRlbXAsIGFk
ZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUKKwkJYWRkdQlhZGRyVGVtcCwgYWRkclRlbXAsIGFk
ZHJlc3MuYmFzZQorCQlsdwlkZXN0LCBhZGRyZXNzLm9mZnNldChhZGRyVGVtcCkKKwkgICAgKi8K
KwkgICAgbV9hc3NlbWJsZXIuc2xsKGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuaW5kZXgsIGFk
ZHJlc3Muc2NhbGUpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lz
dGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UpOworCSAgICBtX2Fzc2VtYmxlci5s
dyhkZXN0LCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCk7CisJfQorCWVsc2Ugewor
CSAgICAvKgorCQlzbGwJYWRkclRlbXAsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUKKwkJ
YWRkdQlhZGRyVGVtcCwgYWRkclRlbXAsIGFkZHJlc3MuYmFzZQorCQlsdWkJaW1tVGVtcCwgYWRk
cmVzcy5vZmZzZXQgPj4gMTYKKwkJYWRkdQlhZGRyVGVtcCwgYWRkclRlbXAsIGltbVRlbXAKKwkJ
bHcJZGVzdCwgKGFkZHJlc3Mub2Zmc2V0ICYgMHhmZmZmKShhdCkKKwkgICAgKi8KKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLnNsbChhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmluZGV4LCBhZGRy
ZXNzLnNjYWxlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3Rl
ciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlKTsKKwkgICAgbV9hc3NlbWJsZXIubHVp
KGltbVRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQgPj4gMTYpOworICAgICAgICAgICAgbV9h
c3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLAorCQkJICAg
ICBpbW1UZW1wUmVnaXN0ZXIpOworCSAgICBtX2Fzc2VtYmxlci5sdyhkZXN0LCBhZGRyVGVtcFJl
Z2lzdGVyLCBhZGRyZXNzLm9mZnNldCk7CisJfQorICAgIH0KKworICAgIHZvaWQgbG9hZDMyKHZv
aWQgKmFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAg
ICAgIC8qCisJICAgIGxpCWFkZHJUZW1wLCBhZGRyZXNzCisJICAgIGx3CWRlc3QsIDAoYWRkclRl
bXApCisgICAgICAgICovCisgICAgICAgIG1fYXNzZW1ibGVyLmxpKGFkZHJUZW1wUmVnaXN0ZXIs
IHJlaW50ZXJwcmV0X2Nhc3Q8TUlQU1dvcmQ+KGFkZHJlc3MpLCBmaXhlZCk7CisgICAgICAgIG1f
YXNzZW1ibGVyLmx3KGRlc3QsIGFkZHJUZW1wUmVnaXN0ZXIsIDApOworICAgIH0KKworICAgIERh
dGFMYWJlbDMyIGxvYWQzMldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goQWRkcmVzcyBhZGRyZXNzLCBS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworCWludCBmaXhlZCA9IDE7CisgICAgICAgIC8qCisJICAg
IGx1aQlhZGRyVGVtcCwgYWRkcmVzcy5vZmZzZXQgPj4gMTYKKwkgICAgb3JpCWFkZHJUZW1wLCBh
ZGRyVGVtcCwgYWRkcmVzcy5vZmZzZXQgJiAweGZmZmYKKwkgICAgYWRkdQlhZGRyVGVtcCwgYWRk
clRlbXAsIGFkZHJlc3MuYmFzZQorCSAgICBsdwlkZXN0LCAwKGFkZHJUZW1wKQorICAgICAgICAq
LworICAgICAgICBEYXRhTGFiZWwzMiBkYXRhTGFiZWwodGhpcyk7CisJbV9hc3NlbWJsZXIubGko
YWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQsIGZpeGVkKTsKKwltX2Fzc2VtYmxlci5h
ZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSk7CisJ
bV9hc3NlbWJsZXIubHcoZGVzdCwgYWRkclRlbXBSZWdpc3RlciwgMCk7CisgICAgICAgIHJldHVy
biBkYXRhTGFiZWw7CisgICAgfQorCisgICAgTGFiZWwgbG9hZFB0cldpdGhQYXRjaFRvTEVBKEFk
ZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKwlpbnQgZml4ZWQgPSAxOwor
ICAgICAgICAvKgorCSAgICBsdWkJCWFkZHJUZW1wLCBhZGRyZXNzLm9mZnNldCA+PiAxNgorCSAg
ICBvcmkJCWFkZHJUZW1wLCBhZGRyVGVtcCwgYWRkcmVzcy5vZmZzZXQgJiAweGZmZmYKKwkgICAg
YWRkdQlhZGRyVGVtcCwgYWRkclRlbXAsIGFkZHJlc3MuYmFzZQorCSAgICBsdwkJZGVzdCwgMChh
ZGRyVGVtcCkKKyAgICAgICAgKi8KKyAgICAgICAgTGFiZWwgbGFiZWwodGhpcyk7CisJbV9hc3Nl
bWJsZXIubGkoYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQsIGZpeGVkKTsKKwltX2Fz
c2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mu
YmFzZSk7CisJbV9hc3NlbWJsZXIubHcoZGVzdCwgYWRkclRlbXBSZWdpc3RlciwgMCk7CisgICAg
ICAgIHJldHVybiBsYWJlbDsKKyAgICB9CisKKyAgICBMYWJlbCBsb2FkUHRyV2l0aEFkZHJlc3NP
ZmZzZXRQYXRjaChBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisJcmV0
dXJuIGxvYWRQdHJXaXRoUGF0Y2hUb0xFQShhZGRyZXNzLCBkZXN0KTsKKyAgICB9CisKKyAgICB2
b2lkIGxvYWQxNihCYXNlSW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQg
PSAwKQorICAgIHsKKyAgICAgICAgaWYgKGFkZHJlc3Mub2Zmc2V0ID49IC0zMjc2OCAmJiBhZGRy
ZXNzLm9mZnNldCA8PSAzMjc2NyAmJiBmaXhlZCA9PSAwKSB7CisJICAgIC8qCisJCXNsbAlhZGRy
VGVtcCwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZQorCQlhZGR1CWFkZHJUZW1wLCBhZGRy
VGVtcCwgYWRkcmVzcy5iYXNlCisJCWxoCWRlc3QsIGFkZHJlc3Mub2Zmc2V0KGFkZHJUZW1wKQor
CSAgICAqLworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2xsKGFkZHJUZW1wUmVnaXN0ZXIsIGFk
ZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRk
dShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UpOworCSAg
ICBtX2Fzc2VtYmxlci5saChkZXN0LCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCk7
CisJfQorCWVsc2UgeworCSAgICAvKgorCQlzbGwJYWRkclRlbXAsIGFkZHJlc3MuaW5kZXgsIGFk
ZHJlc3Muc2NhbGUKKwkJYWRkdQlhZGRyVGVtcCwgYWRkclRlbXAsIGFkZHJlc3MuYmFzZQorCQls
dWkJaW1tVGVtcCwgYWRkcmVzcy5vZmZzZXQgPj4gMTYKKwkJYWRkdQlhZGRyVGVtcCwgYWRkclRl
bXAsIGltbVRlbXAKKwkJbGgJZGVzdCwgYWRkcmVzcy5vZmZzZXQoYWRkclRlbXApCisJICAgICov
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbGwoYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5p
bmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJU
ZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSk7CisJICAgIG1fYXNz
ZW1ibGVyLmx1aShpbW1UZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0ID4+IDE2KTsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3Rl
ciwKKwkJCSAgICAgaW1tVGVtcFJlZ2lzdGVyKTsKKwkgICAgbV9hc3NlbWJsZXIubGgoZGVzdCwg
YWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQpOworICAgICAgICB9CisgICAgfQorCisg
ICAgRGF0YUxhYmVsMzIgc3RvcmUzMldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goUmVnaXN0ZXJJRCBz
cmMsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisJaW50IGZpeGVkID0gMTsKKyAgICAgICAgLyoK
KwkgICAgbHVpCWFkZHJUZW1wLCBhZGRyZXNzLm9mZnNldCA+PiAxNgorCSAgICBvcmkJYWRkclRl
bXAsIGFkZHJUZW1wLCBhZGRyZXNzLm9mZnNldCAmIDB4ZmZmZgorCSAgICBhZGR1CWFkZHJUZW1w
LCBhZGRyVGVtcCwgYWRkcmVzcy5iYXNlCisJICAgIHN3CXNyYywgMChhZGRyVGVtcCkKKyAgICAg
ICAgKi8KKyAgICAgICAgRGF0YUxhYmVsMzIgZGF0YUxhYmVsKHRoaXMpOworCW1fYXNzZW1ibGVy
LmxpKGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0LCBmaXhlZCk7CisJbV9hc3NlbWJs
ZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2Up
OworCW1fYXNzZW1ibGVyLnN3KHNyYywgYWRkclRlbXBSZWdpc3RlciwgMCk7CisgICAgICAgIHJl
dHVybiBkYXRhTGFiZWw7CisgICAgfQorCisgICAgdm9pZCBzdG9yZTMyKFJlZ2lzdGVySUQgc3Jj
LCBJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcywgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAg
IGlmIChhZGRyZXNzLm9mZnNldCA+PSAtMzI3NjggJiYgYWRkcmVzcy5vZmZzZXQgPD0gMzI3Njcg
JiYgZml4ZWQgPT0gMCkKKwkgICAgbV9hc3NlbWJsZXIuc3coc3JjLCBhZGRyZXNzLmJhc2UsIGFk
ZHJlc3Mub2Zmc2V0KTsKKwllbHNlIHsKKwkgICAgLyoKKwkJbHVpCWFkZHJUZW1wLCBvZmZzZXQg
Pj4gMTYKKwkJYWRkdQlhZGRyVGVtcCwgYWRkclRlbXAsIGJhc2UKKwkJc3cJc3JjLCAob2Zmc2V0
ICYgMHhmZmZmKShhZGRyVGVtcCkKKwkgICAgICAqLworCSAgICBtX2Fzc2VtYmxlci5sdWkoYWRk
clRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQgPj4gMTYpOworCSAgICBtX2Fzc2VtYmxlci5h
ZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSk7CisJ
ICAgIG1fYXNzZW1ibGVyLnN3KHNyYywgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQp
OworCX0KKyAgICB9CisKKyAgICB2b2lkIHN0b3JlMzIoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRl
eCBhZGRyZXNzLCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgaWYgKGFkZHJlc3Mub2Zm
c2V0ID49IC0zMjc2OCAmJiBhZGRyZXNzLm9mZnNldCA8PSAzMjc2NyAmJiBmaXhlZCA9PSAwKSB7
CisJICAgIC8qCisJCXNsbAlhZGRyVGVtcCwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZQor
CQlhZGR1CWFkZHJUZW1wLCBhZGRyVGVtcCwgYWRkcmVzcy5iYXNlCisJCXN3CXNyYywgYWRkcmVz
cy5vZmZzZXQoYWRkclRlbXApCisJICAgICovCisJICAgIG1fYXNzZW1ibGVyLnNsbChhZGRyVGVt
cFJlZ2lzdGVyLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVz
cy5iYXNlKTsKKwkgICAgbV9hc3NlbWJsZXIuc3coc3JjLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRy
ZXNzLm9mZnNldCk7CisJfQorCWVsc2UgeworCSAgICAvKgorCQlzbGwJYWRkclRlbXAsIGFkZHJl
c3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUKKwkJYWRkdQlhZGRyVGVtcCwgYWRkclRlbXAsIGFkZHJl
c3MuYmFzZQorCQlsdWkJaW1tVGVtcCwgYWRkcmVzcy5vZmZzZXQgPj4gMTYKKwkJYWRkdQlhZGRy
VGVtcCwgYWRkclRlbXAsIGltbVRlbXAKKwkJc3cJc3JjLCAoYWRkcmVzcy5vZmZzZXQgJiAweGZm
ZmYpKGF0KQorCSAgICAqLworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2xsKGFkZHJUZW1wUmVn
aXN0ZXIsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJh
c2UpOworCSAgICBtX2Fzc2VtYmxlci5sdWkoaW1tVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNl
dCA+PiAxNik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIs
IGFkZHJUZW1wUmVnaXN0ZXIsCisJCQkgICAgIGltbVRlbXBSZWdpc3Rlcik7CisJICAgIG1fYXNz
ZW1ibGVyLnN3KHNyYywgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQpOworCX0KKyAg
ICB9CisKKyAgICB2b2lkIHN0b3JlMzIoSW1tMzIgaW1tLCBJbXBsaWNpdEFkZHJlc3MgYWRkcmVz
cywgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIGlmIChhZGRyZXNzLm9mZnNldCA+PSAt
MzI3NjggJiYgYWRkcmVzcy5vZmZzZXQgPD0gMzI3NjcgJiYgZml4ZWQgPT0gMCkgeworCSAgICBp
ZiAoaW1tLm1fdmFsdWUgPT0gMCkKKwkJbV9hc3NlbWJsZXIuc3coTUlQU1JlZ2lzdGVyczo6emVy
bywgYWRkcmVzcy5iYXNlLAorCQkJICAgICAgIGFkZHJlc3Mub2Zmc2V0KTsKKwkgICAgZWxzZSB7
CisJCW1fYXNzZW1ibGVyLmxpKGltbVRlbXBSZWdpc3RlciwgaW1tLm1fdmFsdWUsIGZpeGVkKTsK
KwkJbV9hc3NlbWJsZXIuc3coaW1tVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mu
b2Zmc2V0KTsKKwkgICAgfQorCX0KKwllbHNlIHsKKwkgICAgLyoKKwkJbHVpCWFkZHJUZW1wLCBv
ZmZzZXQgPj4gMTYKKwkJYWRkdQlhZGRyVGVtcCwgYWRkclRlbXAsIGJhc2UKKwkJc3cJaW1tVGVt
cCwgKG9mZnNldCAmIDB4ZmZmZikoYWRkclRlbXApCisJICAgICAgKi8KKwkgICAgbV9hc3NlbWJs
ZXIubHVpKGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0ID4+IDE2KTsKKwkgICAgbV9h
c3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNz
LmJhc2UpOworCSAgICBpZiAoaW1tLm1fdmFsdWUgPT0gMCAmJiBmaXhlZCA9PSAwKQorCQltX2Fz
c2VtYmxlci5zdyhNSVBTUmVnaXN0ZXJzOjp6ZXJvLCBhZGRyVGVtcFJlZ2lzdGVyLAorCQkJICAg
ICAgIGFkZHJlc3Mub2Zmc2V0KTsKKwkgICAgZWxzZSB7CisJCW1fYXNzZW1ibGVyLmxpKGltbVRl
bXBSZWdpc3RlciwgaW1tLm1fdmFsdWUsIGZpeGVkKTsKKwkJbV9hc3NlbWJsZXIuc3coaW1tVGVt
cFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLAorCQkJICAgICAgIGFkZHJlc3Mub2Zmc2V0KTsK
KwkgICAgfQorCX0KKyAgICB9CisKKyAgICB2b2lkIHN0b3JlMzIoUmVnaXN0ZXJJRCBzcmMsIHZv
aWQqIGFkZHJlc3MsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICAvKgorCSAgICBsaQlh
ZGRyVGVtcCwgYWRkcmVzcworCSAgICBzdwlzcmMsIDAoYWRkclRlbXApCisgICAgICAgICovCisg
ICAgICAgIG1fYXNzZW1ibGVyLmxpKGFkZHJUZW1wUmVnaXN0ZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8
TUlQU1dvcmQ+KGFkZHJlc3MpLCBmaXhlZCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnN3KHNyYywg
YWRkclRlbXBSZWdpc3RlciwgMCk7CisgICAgfQorCisgICAgdm9pZCBzdG9yZTMyKEltbTMyIGlt
bSwgdm9pZCogYWRkcmVzcywgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIC8qCisJICAg
IGxpCWltbVRlbXAsIGltbQorCSAgICBsaQlhZGRyVGVtcCwgYWRkcmVzcworCSAgICBzdwlzcmMs
IDAoYWRkclRlbXApCisgICAgICAgICovCisJaWYgKGltbS5tX3ZhbHVlID09IDAgJiYgZml4ZWQg
PT0gMCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIubGkoYWRkclRlbXBSZWdpc3RlciwKKwkJ
CSAgIHJlaW50ZXJwcmV0X2Nhc3Q8TUlQU1dvcmQ+KGFkZHJlc3MpLCBmaXhlZCk7CisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5zdyhNSVBTUmVnaXN0ZXJzOjp6ZXJvLCBhZGRyVGVtcFJlZ2lzdGVy
LCAwKTsKKwl9CisJZWxzZSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5saShpbW1UZW1wUmVn
aXN0ZXIsIGltbS5tX3ZhbHVlLCBmaXhlZCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5saShh
ZGRyVGVtcFJlZ2lzdGVyLAorCQkJICAgcmVpbnRlcnByZXRfY2FzdDxNSVBTV29yZD4oYWRkcmVz
cyksIGZpeGVkKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN3KGltbVRlbXBSZWdpc3Rlciwg
YWRkclRlbXBSZWdpc3RlciwgMCk7CisJfQorICAgIH0KKworICAgIC8vIEZsb2F0aW5nLXBvaW50
IG9wZXJhdGlvbnM6CisKKyAgICBib29sIHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpIGNvbnN0Cisg
ICAgeworI2lmIGRlZmluZWQoX19taXBzX2hhcmRfZmxvYXQpICYmICFkZWZpbmVkKF9fbWlwc19z
aW5nbGVfZmxvYXQpCisJcmV0dXJuIHRydWU7CisjZWxzZQorCXJldHVybiBmYWxzZTsKKyNlbmRp
ZgorICAgIH0KKworICAgIGJvb2wgc3VwcG9ydHNGbG9hdGluZ1BvaW50VHJ1bmNhdGUoKSBjb25z
dAorICAgIHsKKyNpZiBkZWZpbmVkKF9fbWlwc19oYXJkX2Zsb2F0KSAmJiAhZGVmaW5lZChfX21p
cHNfc2luZ2xlX2Zsb2F0KSAmJiAoX19taXBzID4gMSkKKwlyZXR1cm4gdHJ1ZTsKKyNlbHNlCisJ
cmV0dXJuIGZhbHNlOworI2VuZGlmCisgICAgfQorCisgICAgLy8gU3RhY2sgbWFuaXB1bGF0aW9u
IG9wZXJhdGlvbnM6CisgICAgLy8KKyAgICAvLyBUaGUgQUJJIGlzIGFzc3VtZWQgdG8gcHJvdmlk
ZSBhIHN0YWNrIGFic3RyYWN0aW9uIHRvIG1lbW9yeSwKKyAgICAvLyBjb250YWluaW5nIG1hY2hp
bmUgd29yZCBzaXplZCB1bml0cyBvZiBkYXRhLiAgUHVzaCBhbmQgcG9wCisgICAgLy8gb3BlcmF0
aW9ucyBhZGQgYW5kIHJlbW92ZSBhIHNpbmdsZSByZWdpc3RlciBzaXplZCB1bml0IG9mIGRhdGEK
KyAgICAvLyB0byBvciBmcm9tIHRoZSBzdGFjay4gIFBlZWsgYW5kIHBva2Ugb3BlcmF0aW9ucyBy
ZWFkIG9yIHdyaXRlCisgICAgLy8gdmFsdWVzIG9uIHRoZSBzdGFjaywgd2l0aG91dCBtb3Zpbmcg
dGhlIGN1cnJlbnQgc3RhY2sgcG9zaXRpb24uCisKKyAgICB2b2lkIHBvcChSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sdyhkZXN0LCBNSVBTUmVnaXN0ZXJzOjpz
cCwgMCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGl1KE1JUFNSZWdpc3RlcnM6OnNwLCBNSVBT
UmVnaXN0ZXJzOjpzcCwgNCk7CisgICAgfQorCisgICAgdm9pZCBwdXNoKFJlZ2lzdGVySUQgc3Jj
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkaXUoTUlQU1JlZ2lzdGVyczo6c3AsIE1J
UFNSZWdpc3RlcnM6OnNwLCAtNCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnN3KHNyYywgTUlQU1Jl
Z2lzdGVyczo6c3AsIDApOworICAgIH0KKworICAgIHZvaWQgcHVzaChBZGRyZXNzIGFkZHJlc3Mp
CisgICAgeworCWxvYWQzMihhZGRyZXNzLCBkYXRhVGVtcFJlZ2lzdGVyKTsKKwlwdXNoKGRhdGFU
ZW1wUmVnaXN0ZXIpOworICAgIH0KKworICAgIHZvaWQgcHVzaChJbW0zMiBpbW0pCisgICAgewor
CW1fYXNzZW1ibGVyLmxpKGltbVRlbXBSZWdpc3RlciwgaW1tLm1fdmFsdWUpOworCXB1c2goaW1t
VGVtcFJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICAvLyBSZWdpc3RlciBtb3ZlIG9wZXJhdGlvbnM6
CisgICAgLy8KKyAgICAvLyBNb3ZlIHZhbHVlcyBpbiByZWdpc3RlcnMuCisKKyAgICB2b2lkIG1v
dmUoSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgeworICAg
ICAgICBpZiAoaW1tLm1fdmFsdWUgPT0gMCAmJiBmaXhlZCA9PSAwKQorICAgICAgICAgICAgbW92
ZShNSVBTUmVnaXN0ZXJzOjp6ZXJvLCBkZXN0LCBmaXhlZCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLmxpKGRlc3QsIGltbS5tX3ZhbHVlLCBmaXhlZCk7CisgICAgfQor
CisgICAgdm9pZCBtb3ZlKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QsIGludCBmaXhl
ZCA9IDApCisgICAgeworCWlmIChzcmMgPT0gZGVzdCAmJiBmaXhlZCA9PSAwKQorCSAgICA7CisJ
ZWxzZQorCSAgICBtX2Fzc2VtYmxlci5tb3ZlKGRlc3QsIHNyYyk7CisgICAgfQorCisgICAgdm9p
ZCBtb3ZlKEltbVB0ciBpbW0sIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7
CisgICAgICAgIG1vdmUoSW1tMzIoaW1tKSwgZGVzdCwgZml4ZWQpOworICAgIH0KKworICAgIHZv
aWQgc3dhcChSZWdpc3RlcklEIHJlZzEsIFJlZ2lzdGVySUQgcmVnMiwgaW50IGZpeGVkID0gMCkK
KyAgICB7CisgICAgICAgIG1vdmUocmVnMSwgaW1tVGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAg
ICAgIG1vdmUocmVnMiwgcmVnMSwgZml4ZWQpOworICAgICAgICBtb3ZlKGltbVRlbXBSZWdpc3Rl
ciwgcmVnMiwgZml4ZWQpOworICAgIH0KKworICAgIHZvaWQgc2lnbkV4dGVuZDMyVG9QdHIoUmVn
aXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAg
ICAgIGlmIChzcmMgPT0gZGVzdCAmJiBmaXhlZCA9PSAwKQorCSAgICA7CisJZWxzZQorICAgICAg
ICAgICAgbW92ZShzcmMsIGRlc3QsIGZpeGVkKTsKKyAgICB9CisKKyAgICB2b2lkIHplcm9FeHRl
bmQzMlRvUHRyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QsIGludCBmaXhlZCA9IDAp
CisgICAgeworICAgICAgICBpZiAoc3JjID09IGRlc3QgJiYgZml4ZWQgPT0gMCkKKwkgICAgOwor
CWVsc2UKKyAgICAgICAgICAgIG1vdmUoc3JjLCBkZXN0LCBmaXhlZCk7CisgICAgfQorCisgICAg
Ly8gRm9yd2FyZHMgLyBleHRlcm5hbCBjb250cm9sIGZsb3cgb3BlcmF0aW9uczoKKyAgICAvLwor
ICAgIC8vIFRoaXMgc2V0IG9mIGp1bXAgYW5kIGNvbmRpdGlvbmFsIGJyYW5jaCBvcGVyYXRpb25z
IHJldHVybiBhIEp1bXAKKyAgICAvLyBvYmplY3Qgd2hpY2ggbWF5IGxpbmtlZCBhdCBhIGxhdGVy
IHBvaW50LCBhbGxvdyBmb3J3YXJkcyBqdW1wLAorICAgIC8vIG9yIGp1bXBzIHRoYXQgd2lsbCBy
ZXF1aXJlIGV4dGVybmFsIGxpbmthZ2UgKGFmdGVyIHRoZSBjb2RlIGhhcyBiZWVuCisgICAgLy8g
cmVsb2NhdGVkKS4KKyAgICAvLworICAgIC8vIEZvciBicmFuY2hlcywgc2lnbmVkIDwsID4sIDw9
IGFuZCA+PSBhcmUgZGVub3RlZCBhcyBsLCBnLCBsZSwgYW5kIGdlCisgICAgLy8gcmVzcGVjaXR2
ZWx5LCBmb3IgdW5zaWduZWQgY29tcGFyaXNvbnMgdGhlIG5hbWVzIGIsIGEsIGJlLCBhbmQgYWUg
YXJlCisgICAgLy8gdXNlZCAocmVwcmVzZW50aW5nIHRoZSBuYW1lcyAnYmVsb3cnIGFuZCAnYWJv
dmUnKS4KKyAgICAvLworICAgIC8vIE9wZXJhbmRzIHRvIHRoZSBjb21wYXJpc2lvbiBhcmUgcHJv
dmlkZWQgaW4gdGhlIGV4cGVjdGVkIG9yZGVyLCBlLmcuCisgICAgLy8gamxlMzIocmVnMSwgSW1t
MzIoNSkpIHdpbGwgYnJhbmNoIGlmIHRoZSB2YWx1ZSBoZWxkIGluIHJlZzEsIHdoZW4KKyAgICAv
LyB0cmVhdGVkIGFzIGEgc2lnbmVkIDMyYml0IHZhbHVlLCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwg
dG8gNS4KKyAgICAvLworICAgIC8vIGp6IGFuZCBqbnogdGVzdCB3aGV0aGVyIHRoZSBmaXJzdCBv
cGVyYW5kIGlzIGVxdWFsIHRvIHplcm8sIGFuZCB0YWtlCisgICAgLy8gYW4gb3B0aW9uYWwgc2Vj
b25kIG9wZXJhbmQgb2YgYSBtYXNrIHVuZGVyIHdoaWNoIHRvIHBlcmZvcm0gdGhlIHRlc3QuCisK
KyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIFJlZ2lz
dGVySUQgcmlnaHQsIGludCBmaXhlZCA9IDApCisgICAgeworCWlmIChjb25kID09IEVxdWFsIHx8
IGNvbmQgPT0gWmVybykKKyAgICAgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmJyYW5j
aF9lcShsZWZ0LCByaWdodCkpOworCWVsc2UgaWYgKGNvbmQgPT0gTm90RXF1YWwgfHwgY29uZCA9
PSBOb25aZXJvKQorICAgICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuYnJhbmNoX25l
KGxlZnQsIHJpZ2h0KSk7CisJZWxzZSBpZiAoY29uZCA9PSBBYm92ZSkgeworCSAgICBtX2Fzc2Vt
Ymxlci5zbHR1KGNtcFRlbXBSZWdpc3RlciwgcmlnaHQsIGxlZnQpOworICAgICAgICAgICAgcmV0
dXJuIEp1bXAobV9hc3NlbWJsZXIuYnJhbmNoX25lKGNtcFRlbXBSZWdpc3RlciwgTUlQU1JlZ2lz
dGVyczo6emVybykpOworCX0KKwllbHNlIGlmIChjb25kID09IEFib3ZlT3JFcXVhbCkgeworCSAg
ICBtX2Fzc2VtYmxlci5zbHR1KGNtcFRlbXBSZWdpc3RlciwgbGVmdCwgcmlnaHQpOworICAgICAg
ICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuYnJhbmNoX2VxKGNtcFRlbXBSZWdpc3Rlciwg
TUlQU1JlZ2lzdGVyczo6emVybykpOworCX0KKwllbHNlIGlmIChjb25kID09IEJlbG93KSB7CisJ
ICAgIG1fYXNzZW1ibGVyLnNsdHUoY21wVGVtcFJlZ2lzdGVyLCBsZWZ0LCByaWdodCk7CisgICAg
ICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5icmFuY2hfbmUoY21wVGVtcFJlZ2lzdGVy
LCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKSk7CisJfQorCWVsc2UgaWYgKGNvbmQgPT0gQmVsb3dPckVx
dWFsKSB7CisJICAgIG1fYXNzZW1ibGVyLnNsdHUoY21wVGVtcFJlZ2lzdGVyLCByaWdodCwgbGVm
dCk7CisgICAgICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5icmFuY2hfZXEoY21wVGVt
cFJlZ2lzdGVyLCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKSk7CisJfQorCWlmIChjb25kID09IEdyZWF0
ZXJUaGFuKSB7CisJICAgIG1fYXNzZW1ibGVyLnNsdChjbXBUZW1wUmVnaXN0ZXIsIHJpZ2h0LCBs
ZWZ0KTsKKyAgICAgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmJyYW5jaF9uZShjbXBU
ZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onplcm8pKTsKKwl9CisJZWxzZSBpZiAoY29uZCA9
PSBHcmVhdGVyVGhhbk9yRXF1YWwpIHsKKwkgICAgbV9hc3NlbWJsZXIuc2x0KGNtcFRlbXBSZWdp
c3RlciwgbGVmdCwgcmlnaHQpOworICAgICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIu
YnJhbmNoX2VxKGNtcFRlbXBSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6emVybykpOworCX0KKwll
bHNlIGlmIChjb25kID09IExlc3NUaGFuKSB7CisJICAgIG1fYXNzZW1ibGVyLnNsdChjbXBUZW1w
UmVnaXN0ZXIsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1i
bGVyLmJyYW5jaF9uZShjbXBUZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onplcm8pKTsKKwl9
CisJZWxzZSBpZiAoY29uZCA9PSBMZXNzVGhhbk9yRXF1YWwpIHsKKwkgICAgbV9hc3NlbWJsZXIu
c2x0KGNtcFRlbXBSZWdpc3RlciwgcmlnaHQsIGxlZnQpOworICAgICAgICAgICAgcmV0dXJuIEp1
bXAobV9hc3NlbWJsZXIuYnJhbmNoX2VxKGNtcFRlbXBSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6
emVybykpOworCX0KKyAgICAgICAgZWxzZSBpZiAoY29uZCA9PSBPdmVyZmxvdykgeworCSAgICAv
KgorCQl4b3IgICAgIGNtcFRlbXAsIGxlZnQsIHJpZ2h0CisJCWJnZXogICAgTm9fb3ZlcmZsb3cs
IGNtcFRlbXAJIyBzYW1lIHNpZ24gYml0IC0+IG5vIG92ZXJmbG93CisJCW5vcAorCQlzdWJ1CWNt
cFRlbXAsIGxlZnQsIHJpZ2h0CisJCXhvciAgICAgY21wVGVtcCwgY21wVGVtcCwgbGVmdAorCQli
Z2V6ICAgIE5vX292ZXJmbG93LCBjbXBUZW1wCSMgc2FtZSBzaWduIGJpdCAtPiBubyBvdmVyZmxv
dworCQlub3AKKwkJYiAgICAgICBPdmVyZmxvdworCQlub3AKKwkJbm9wCisJCW5vcAorCSAgICAg
IE5vX292ZXJmbG93OgorICAgICAgICAgICAgKi8KKwkgICAgbV9hc3NlbWJsZXIueG9yX2luc24o
Y21wVGVtcFJlZ2lzdGVyLCBsZWZ0LCByaWdodCk7CisJICAgIG1fYXNzZW1ibGVyLmJnZXooY21w
VGVtcFJlZ2lzdGVyLCA5KTsKKwkgICAgbV9hc3NlbWJsZXIubm9wKCk7CisJICAgIG1fYXNzZW1i
bGVyLnN1YnUoY21wVGVtcFJlZ2lzdGVyLCBsZWZ0LCByaWdodCk7CisJICAgIG1fYXNzZW1ibGVy
Lnhvcl9pbnNuKGNtcFRlbXBSZWdpc3RlciwgY21wVGVtcFJlZ2lzdGVyLCBsZWZ0KTsKKwkgICAg
bV9hc3NlbWJsZXIuYmdleihjbXBUZW1wUmVnaXN0ZXIsIDUpOworCSAgICBtX2Fzc2VtYmxlci5u
b3AoKTsKKwkgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuam1wKCkpOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UgaWYgKGNvbmQgPT0gU2lnbmVkKSB7CisJICAgIG1fYXNzZW1ibGVyLnN1YnUo
Y21wVGVtcFJlZ2lzdGVyLCBsZWZ0LCByaWdodCk7CisJICAgIC8vIENoZWNrIGlmIHRoZSByZXN1
bHQgaXMgbmVnYXRpdmUuCisJICAgIG1fYXNzZW1ibGVyLnNsdChjbXBUZW1wUmVnaXN0ZXIsIGNt
cFRlbXBSZWdpc3RlciwKKwkJCSAgICBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsKKwkgICAgcmV0dXJu
IEp1bXAobV9hc3NlbWJsZXIuYnJhbmNoX25lKGNtcFRlbXBSZWdpc3RlciwgTUlQU1JlZ2lzdGVy
czo6emVybykpOworICAgICAgICB9CisJZWxzZQorCSAgICBBU1NFUlQoMCk7CisKKyAgICAgICAg
cmV0dXJuIEp1bXAoKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25k
LCBSZWdpc3RlcklEIGxlZnQsIEltbTMyIHJpZ2h0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAg
ICAgICAgbW92ZShyaWdodCwgaW1tVGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgICAgIHJldHVy
biBicmFuY2gzMihjb25kLCBsZWZ0LCBpbW1UZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAgICB9CisK
KyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIEFkZHJl
c3MgcmlnaHQsIGludCBmaXhlZCA9IDApCisgICAgeworCWxvYWQzMihyaWdodCwgZGF0YVRlbXBS
ZWdpc3RlciwgZml4ZWQpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgbGVmdCwgZGF0
YVRlbXBSZWdpc3RlciwgZml4ZWQpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoMzIoQ29uZGl0
aW9uIGNvbmQsIEFkZHJlc3MgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCwgaW50IGZpeGVkID0gMCkK
KyAgICB7CisgICAgICAgIGxvYWQzMihsZWZ0LCBkYXRhVGVtcFJlZ2lzdGVyLCBmaXhlZCk7Cisg
ICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBkYXRhVGVtcFJlZ2lzdGVyLCByaWdodCwgZml4
ZWQpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3Mg
bGVmdCwgSW1tMzIgcmlnaHQsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBsb2FkMzIo
bGVmdCwgZGF0YVRlbXBSZWdpc3RlciwgZml4ZWQpOworICAgICAgICBtb3ZlKHJpZ2h0LCBpbW1U
ZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIGRhdGFU
ZW1wUmVnaXN0ZXIsIGltbVRlbXBSZWdpc3RlciwgZml4ZWQpOworICAgIH0KKworICAgIEp1bXAg
YnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIEJhc2VJbmRleCBsZWZ0LCBJbW0zMiByaWdodCwgaW50
IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIGxvYWQzMihsZWZ0LCBkYXRhVGVtcFJlZ2lzdGVy
LCBmaXhlZCk7CisJLy8gQmUgY2FyZWZ1bCB0aGF0IHRoZSBwcmV2aW91cyBsb2FkMzIoKSB1c2Vz
IGltbVRlbXBSZWdpc3Rlci4KKwkvLyBTbywgd2UgbmVlZCB0byBwdXQgbW92ZSgpIGFmdGVyIGxv
YWQzMigpLgorICAgICAgICBtb3ZlKHJpZ2h0LCBpbW1UZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAg
ICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIGRhdGFUZW1wUmVnaXN0ZXIsIGltbVRlbXBSZWdp
c3RlciwgZml4ZWQpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQs
IEFic29sdXRlQWRkcmVzcyBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0LCBpbnQgZml4ZWQgPSAwKQor
ICAgIHsKKyAgICAgICAgbG9hZDMyKGxlZnQubV9wdHIsIGRhdGFUZW1wUmVnaXN0ZXIsIGZpeGVk
KTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIGRhdGFUZW1wUmVnaXN0ZXIsIHJpZ2h0
LCBmaXhlZCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29uZCwgQWJz
b2x1dGVBZGRyZXNzIGxlZnQsIEltbTMyIHJpZ2h0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAg
ICAgICAgbG9hZDMyKGxlZnQubV9wdHIsIGRhdGFUZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAgICAg
ICAgbW92ZShyaWdodCwgaW1tVGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgICAgIHJldHVybiBi
cmFuY2gzMihjb25kLCBkYXRhVGVtcFJlZ2lzdGVyLCBpbW1UZW1wUmVnaXN0ZXIsIGZpeGVkKTsK
KyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDE2KENvbmRpdGlvbiBjb25kLCBCYXNlSW5kZXggbGVm
dCwgUmVnaXN0ZXJJRCByaWdodCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIGxvYWQx
NihsZWZ0LCBkYXRhVGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgICAgIHJldHVybiBicmFuY2gz
Mihjb25kLCBkYXRhVGVtcFJlZ2lzdGVyLCByaWdodCwgZml4ZWQpOworICAgIH0KKworICAgIEp1
bXAgYnJhbmNoMTYoQ29uZGl0aW9uIGNvbmQsIEJhc2VJbmRleCBsZWZ0LCBJbW0zMiByaWdodCwg
aW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIGxvYWQxNihsZWZ0LCBkYXRhVGVtcFJlZ2lz
dGVyLCBmaXhlZCk7CisJLy8gQmUgY2FyZWZ1bCB0aGF0IHRoZSBwcmV2aW91cyBsb2FkMTYoKSB1
c2VzIGltbVRlbXBSZWdpc3Rlci4KKwkvLyBTbywgd2UgbmVlZCB0byBwdXQgbW92ZSgpIGFmdGVy
IGxvYWQxNigpLgorICAgICAgICBtb3ZlKHJpZ2h0LCBpbW1UZW1wUmVnaXN0ZXIsIGZpeGVkKTsK
KyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIGRhdGFUZW1wUmVnaXN0ZXIsIGltbVRlbXBS
ZWdpc3RlciwgZml4ZWQpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoVGVzdDMyKENvbmRpdGlv
biBjb25kLCBSZWdpc3RlcklEIHJlZywgUmVnaXN0ZXJJRCBtYXNrLCBpbnQgZml4ZWQgPSAwKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKChjb25kID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8p
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5kX2luc24oY21wVGVtcFJlZ2lzdGVyLCByZWcsIG1h
c2spOworCWlmIChjb25kID09IFplcm8pCisgICAgICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2Vt
Ymxlci5icmFuY2hfZXEoY21wVGVtcFJlZ2lzdGVyLCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKSk7Cisg
ICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmJyYW5jaF9uZShjbXBUZW1wUmVnaXN0ZXIs
IE1JUFNSZWdpc3RlcnM6Onplcm8pKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFRlc3QzMihD
b25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCByZWcsIEltbTMyIG1hc2sgPSBJbW0zMigtMSksIGlu
dCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBBU1NFUlQoKGNvbmQgPT0gWmVybykgfHwgKGNv
bmQgPT0gTm9uWmVybykpOworCWlmIChtYXNrLm1fdmFsdWUgPT0gLTEgJiYgZml4ZWQgPT0gMCkg
eworCSAgICBpZiAoY29uZCA9PSBaZXJvKQorCQlyZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5icmFu
Y2hfZXEocmVnLCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKSk7CisJICAgIHJldHVybiBKdW1wKG1fYXNz
ZW1ibGVyLmJyYW5jaF9uZShyZWcsIE1JUFNSZWdpc3RlcnM6Onplcm8pKTsKKwl9CisgICAgICAg
IG1fYXNzZW1ibGVyLmxpKGltbVRlbXBSZWdpc3RlciwgbWFzay5tX3ZhbHVlLCBmaXhlZCk7Cisg
ICAgICAgIHJldHVybiBicmFuY2hUZXN0MzIoY29uZCwgcmVnLCBpbW1UZW1wUmVnaXN0ZXIsIGZp
eGVkKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFRlc3QzMihDb25kaXRpb24gY29uZCwgQWRk
cmVzcyBhZGRyZXNzLCBJbW0zMiBtYXNrID0gSW1tMzIoLTEpLCBpbnQgZml4ZWQgPSAwKQorICAg
IHsKKyAgICAgICAgbG9hZDMyKGFkZHJlc3MsIGRhdGFUZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAg
ICAgICAgcmV0dXJuIGJyYW5jaFRlc3QzMihjb25kLCBkYXRhVGVtcFJlZ2lzdGVyLCBtYXNrLCBm
aXhlZCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hUZXN0MzIoQ29uZGl0aW9uIGNvbmQsIEJh
c2VJbmRleCBhZGRyZXNzLCBJbW0zMiBtYXNrID0gSW1tMzIoLTEpLCBpbnQgZml4ZWQgPSAwKQor
ICAgIHsKKyAgICAgICAgbG9hZDMyKGFkZHJlc3MsIGRhdGFUZW1wUmVnaXN0ZXIsIGZpeGVkKTsK
KyAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3QzMihjb25kLCBkYXRhVGVtcFJlZ2lzdGVyLCBtYXNr
LCBmaXhlZCk7CisgICAgfQorCisgICAgSnVtcCBqdW1wKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBKdW1wKG1fYXNzZW1ibGVyLmptcCgpKTsKKyAgICB9CisKKyAgICB2b2lkIGp1bXAoUmVnaXN0
ZXJJRCB0YXJnZXQpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5qbXBfcmVnaXN0ZXIodGFy
Z2V0KTsKKyAgICB9CisKKyAgICB2b2lkIGp1bXAoQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKwlp
bnQgZml4ZWQgPSAxOworICAgICAgICBsb2FkMzIoYWRkcmVzcywgTUlQU1JlZ2lzdGVyczo6dDks
IGZpeGVkKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuam1wX3JlZ2lzdGVyKE1JUFNSZWdpc3RlcnM6
OnQ5KTsKKyAgICB9CisKKyAgICAvLyBBcml0aG1ldGljIGNvbnRyb2wgZmxvdyBvcGVyYXRpb25z
OgorICAgIC8vCisgICAgLy8gVGhpcyBzZXQgb2YgY29uZGl0aW9uYWwgYnJhbmNoIG9wZXJhdGlv
bnMgYnJhbmNoIGJhc2VkCisgICAgLy8gb24gdGhlIHJlc3VsdCBvZiBhbiBhcml0aG1ldGljIG9w
ZXJhdGlvbi4gIFRoZSBvcGVyYXRpb24KKyAgICAvLyBpcyBwZXJmb3JtZWQgYXMgbm9ybWFsLCBz
dG9yaW5nIHRoZSByZXN1bHQuCisgICAgLy8KKyAgICAvLyAqIGp6IG9wZXJhdGlvbnMgYnJhbmNo
IGlmIHRoZSByZXN1bHQgaXMgemVyby4KKyAgICAvLyAqIGpvIG9wZXJhdGlvbnMgYnJhbmNoIGlm
IHRoZSAoc2lnbmVkKSBhcml0aG1ldGljCisgICAgLy8gICBvcGVyYXRpb24gY2F1c2VkIGFuIG92
ZXJmbG93IHRvIG9jY3VyLgorCisgICAgSnVtcCBicmFuY2hBZGQzMihDb25kaXRpb24gY29uZCwg
UmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVCgoY29uZCA9PSBPdmVyZmxvdykgfHwgKGNvbmQgPT0gU2lnbmVkKSB8fCAo
Y29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisJaWYgKGNvbmQgPT0gT3ZlcmZs
b3cpIHsKKwkgICAgLyoKKwkJbW92ZQlkZXN0LCBkYXRhVGVtcAorCQl4b3IgICAgIGNtcFRlbXAs
IGRhdGFUZW1wLCBzcmMKKwkJYmx0eiAgICBjbXBUZW1wLCBOb19vdmVyZmxvdwkjIGRpZmYgc2ln
biBiaXQgLT4gbm8gb3ZlcmZsb3cKKwkJYWRkdQlkZXN0LCBkYXRhVGVtcCwgc3JjCisJCXhvciAg
ICAgY21wVGVtcCwgZGVzdCwgZGF0YVRlbXAKKwkJYmdleiAgICBjbXBUZW1wLCBOb19vdmVyZmxv
dwkjIHNhbWUgc2lnbiBiaWcgLT4gbm8gb3ZlcmZsb3cKKwkJbm9wCisJCWIgICAgICAgT3ZlcmZs
b3cKKwkJbm9wCisJCW5vcAorCQlub3AKKwkgICAgTm9fb3ZlcmZsb3c6CisJICAgICovCisJICAg
IG1vdmUoZGVzdCwgZGF0YVRlbXBSZWdpc3Rlcik7CisJICAgIG1fYXNzZW1ibGVyLnhvcl9pbnNu
KGNtcFRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3Rlciwgc3JjKTsKKwkgICAgbV9hc3NlbWJs
ZXIuYmx0eihjbXBUZW1wUmVnaXN0ZXIsIDgpOworCSAgICBtX2Fzc2VtYmxlci5hZGR1KGRlc3Qs
IGRhdGFUZW1wUmVnaXN0ZXIsIHNyYyk7CisJICAgIG1fYXNzZW1ibGVyLnhvcl9pbnNuKGNtcFRl
bXBSZWdpc3RlciwgZGVzdCwgZGF0YVRlbXBSZWdpc3Rlcik7CisJICAgIG1fYXNzZW1ibGVyLmJn
ZXooY21wVGVtcFJlZ2lzdGVyLCA1KTsKKwkgICAgbV9hc3NlbWJsZXIubm9wKCk7CisJICAgIHJl
dHVybiBKdW1wKG1fYXNzZW1ibGVyLmptcCgpKTsKKwl9CisJZWxzZSBpZiAoY29uZCA9PSBTaWdu
ZWQpIHsKKwkgICAgYWRkMzIoc3JjLCBkZXN0LCBmaXhlZCk7CisJICAgIC8vIENoZWNrIGlmIGRl
c3QgaXMgbmVnYXRpdmUuCisJICAgIG1fYXNzZW1ibGVyLnNsdChjbXBUZW1wUmVnaXN0ZXIsIGRl
c3QsIE1JUFNSZWdpc3RlcnM6Onplcm8pOworCSAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5i
cmFuY2hfbmUoY21wVGVtcFJlZ2lzdGVyLCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKSk7CisJfQorCWVs
c2UgaWYgKGNvbmQgPT0gWmVybykgeworCSAgICBhZGQzMihzcmMsIGRlc3QsIGZpeGVkKTsKKwkg
ICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuYnJhbmNoX2VxKGRlc3QsIE1JUFNSZWdpc3RlcnM6
Onplcm8pKTsKKwl9CisJZWxzZSBpZiAoY29uZCA9PSBOb25aZXJvKSB7CisJICAgIGFkZDMyKHNy
YywgZGVzdCwgZml4ZWQpOworCSAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5icmFuY2hfbmUo
ZGVzdCwgTUlQU1JlZ2lzdGVyczo6emVybykpOworCX0KKworCXJldHVybiBKdW1wKCk7CisgICAg
fQorCisgICAgSnVtcCBicmFuY2hBZGQzMihDb25kaXRpb24gY29uZCwgSW1tMzIgaW1tLCBSZWdp
c3RlcklEIGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgeworCW1fYXNzZW1ibGVyLmxpKGltbVRl
bXBSZWdpc3RlciwgaW1tLm1fdmFsdWUsIGZpeGVkKTsKKwlyZXR1cm4gYnJhbmNoQWRkMzIoY29u
ZCwgaW1tVGVtcFJlZ2lzdGVyLCBkZXN0LCBmaXhlZCk7CisgICAgfQorCisgICAgSnVtcCBicmFu
Y2hNdWwzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCwg
aW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBPdmVyZmxvdykg
fHwgKGNvbmQgPT0gU2lnbmVkKSB8fCAoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJv
KSk7CisJaWYgKGNvbmQgPT0gT3ZlcmZsb3cpIHsKKwkgICAgLyoKKwkJbXVsdAlzcmMsIGRlc3QK
KwkJbWZoaQlkYXRhVGVtcAorCQltZmxvCWRlc3QKKwkJc3JhCWFkZHJUZW1wLCBkZXN0LCAzMQor
CQliZXEJZGF0YVRlbXAsIGFkZHJUZW1wLCBOb19vdmVyZmxvdyAjIGFsbCBzaWduIGJpdHMgKGJp
dCA2MyB0byBiaXQgMzEpIGFyZSB0aGUgc2FtZSAtPiBubyBvdmVyZmxvdworCQlub3AKKwkJYiAg
ICAgICBPdmVyZmxvdworCQlub3AKKwkJbm9wCisJCW5vcAorCSAgICBOb19vdmVyZmxvdzoKKwkg
ICAgKi8KKwkgICAgbV9hc3NlbWJsZXIubXVsdChzcmMsIGRlc3QpOworCSAgICBtX2Fzc2VtYmxl
ci5tZmhpKGRhdGFUZW1wUmVnaXN0ZXIpOworCSAgICBtX2Fzc2VtYmxlci5tZmxvKGRlc3QpOwor
CSAgICBtX2Fzc2VtYmxlci5zcmEoYWRkclRlbXBSZWdpc3RlciwgZGVzdCwgMzEpOworCSAgICBt
X2Fzc2VtYmxlci5iZXEoZGF0YVRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgNSk7CisJ
ICAgIG1fYXNzZW1ibGVyLm5vcCgpOworCSAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qbXAo
KSk7CisJfQorCWVsc2UgaWYgKGNvbmQgPT0gU2lnbmVkKSB7CisJICAgIG11bDMyKHNyYywgZGVz
dCwgZml4ZWQpOworCSAgICAvLyBDaGVjayBpZiBkZXN0IGlzIG5lZ2F0aXZlLgorCSAgICBtX2Fz
c2VtYmxlci5zbHQoY21wVGVtcFJlZ2lzdGVyLCBkZXN0LCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsK
KwkgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuYnJhbmNoX25lKGNtcFRlbXBSZWdpc3Rlciwg
TUlQU1JlZ2lzdGVyczo6emVybykpOworCX0KKwllbHNlIGlmIChjb25kID09IFplcm8pIHsKKwkg
ICAgbXVsMzIoc3JjLCBkZXN0LCBmaXhlZCk7CisJICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVy
LmJyYW5jaF9lcShkZXN0LCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKSk7CisJfQorCWVsc2UgaWYgKGNv
bmQgPT0gTm9uWmVybykgeworCSAgICBtdWwzMihzcmMsIGRlc3QsIGZpeGVkKTsKKwkgICAgcmV0
dXJuIEp1bXAobV9hc3NlbWJsZXIuYnJhbmNoX25lKGRlc3QsIE1JUFNSZWdpc3RlcnM6Onplcm8p
KTsKKwl9CisKKwlyZXR1cm4gSnVtcCgpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoTXVsMzIo
Q29uZGl0aW9uIGNvbmQsIEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVz
dCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisJbV9hc3NlbWJsZXIubGkoaW1tVGVtcFJlZ2lzdGVy
LCBpbW0ubV92YWx1ZSwgZml4ZWQpOworCXJldHVybiBicmFuY2hNdWwzMihjb25kLCBpbW1UZW1w
UmVnaXN0ZXIsIGRlc3QsIGZpeGVkKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFN1YjMyKENv
bmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQg
PSAwKQorICAgIHsKKyAgICAgICAgQVNTRVJUKChjb25kID09IE92ZXJmbG93KSB8fCAoY29uZCA9
PSBTaWduZWQpIHx8IChjb25kID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8pKTsKKwlpZiAo
Y29uZCA9PSBPdmVyZmxvdykgeworCSAgICAvKgorCQltb3ZlCWRlc3QsIGRhdGFUZW1wCisJCXhv
ciAgICAgY21wVGVtcCwgZGF0YVRlbXAsIHNyYworCQliZ2V6ICAgIGNtcFRlbXAsIE5vX292ZXJm
bG93CSMgc2FtZSBzaWduIGJpdCAtPiBubyBvdmVyZmxvdworCQlzdWJ1CWRlc3QsIGRhdGFUZW1w
LCBzcmMKKwkJeG9yICAgICBjbXBUZW1wLCBkZXN0LCBkYXRhVGVtcAorCQliZ2V6ICAgIGNtcFRl
bXAsIE5vX292ZXJmbG93CSMgc2FtZSBzaWduIGJpdCAtPiBubyBvdmVyZmxvdworCQlub3AKKwkJ
YiAgICAgICBPdmVyZmxvdworCQlub3AKKwkJbm9wCisJCW5vcAorCSAgICBOb19vdmVyZmxvdzoK
KwkgICAgKi8KKwkgICAgbW92ZShkZXN0LCBkYXRhVGVtcFJlZ2lzdGVyKTsKKwkgICAgbV9hc3Nl
bWJsZXIueG9yX2luc24oY21wVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLCBzcmMpOwor
CSAgICBtX2Fzc2VtYmxlci5iZ2V6KGNtcFRlbXBSZWdpc3RlciwgOCk7CisJICAgIG1fYXNzZW1i
bGVyLnN1YnUoZGVzdCwgZGF0YVRlbXBSZWdpc3Rlciwgc3JjKTsKKwkgICAgbV9hc3NlbWJsZXIu
eG9yX2luc24oY21wVGVtcFJlZ2lzdGVyLCBkZXN0LCBkYXRhVGVtcFJlZ2lzdGVyKTsKKwkgICAg
bV9hc3NlbWJsZXIuYmdleihjbXBUZW1wUmVnaXN0ZXIsIDUpOworCSAgICBtX2Fzc2VtYmxlci5u
b3AoKTsKKwkgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuam1wKCkpOworCX0KKwllbHNlIGlm
IChjb25kID09IFNpZ25lZCkgeworCSAgICBzdWIzMihzcmMsIGRlc3QsIGZpeGVkKTsKKwkgICAg
Ly8gQ2hlY2sgaWYgZGVzdCBpcyBuZWdhdGl2ZS4KKwkgICAgbV9hc3NlbWJsZXIuc2x0KGNtcFRl
bXBSZWdpc3RlciwgZGVzdCwgTUlQU1JlZ2lzdGVyczo6emVybyk7CisJICAgIHJldHVybiBKdW1w
KG1fYXNzZW1ibGVyLmJyYW5jaF9uZShjbXBUZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onpl
cm8pKTsKKwl9CisJZWxzZSBpZiAoY29uZCA9PSBaZXJvKSB7CisJICAgIHN1YjMyKHNyYywgZGVz
dCwgZml4ZWQpOworCSAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5icmFuY2hfZXEoZGVzdCwg
TUlQU1JlZ2lzdGVyczo6emVybykpOworCX0KKwllbHNlIGlmIChjb25kID09IE5vblplcm8pIHsK
KwkgICAgc3ViMzIoc3JjLCBkZXN0LCBmaXhlZCk7CisJICAgIHJldHVybiBKdW1wKG1fYXNzZW1i
bGVyLmJyYW5jaF9uZShkZXN0LCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKSk7CisJfQorCisJcmV0dXJu
IEp1bXAoKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFN1YjMyKENvbmRpdGlvbiBjb25kLCBJ
bW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisJbV9hc3Nl
bWJsZXIubGkoaW1tVGVtcFJlZ2lzdGVyLCBpbW0ubV92YWx1ZSwgZml4ZWQpOworCXJldHVybiBi
cmFuY2hTdWIzMihjb25kLCBpbW1UZW1wUmVnaXN0ZXIsIGRlc3QsIGZpeGVkKTsKKyAgICB9CisK
KyAgICAvLyBNaXNjZWxsYW5lb3VzIG9wZXJhdGlvbnM6CisKKyAgICB2b2lkIGJyZWFrcG9pbnQo
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYmtwdCgpOworICAgIH0KKworICAgIENhbGwg
bmVhckNhbGwoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIuZnVuY3Rp
b25fY2FsbCgpLCBDYWxsOjpMaW5rYWJsZU5lYXIpOworICAgIH0KKworICAgIENhbGwgY2FsbCgp
CisgICAgeworICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5mYXJfZnVuY3Rpb25fY2Fs
bCgpLCBDYWxsOjpMaW5rYWJsZSk7CisgICAgfQorCisgICAgQ2FsbCBjYWxsKFJlZ2lzdGVySUQg
dGFyZ2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIuZnVuY3Rpb25f
Y2FsbF92aWFfcmVnaXN0ZXIodGFyZ2V0KSwgQ2FsbDo6Tm9uZSk7CisgICAgfQorCisgICAgQ2Fs
bCBjYWxsKEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisJaW50IGZpeGVkID0gMTsKKwlsb2FkMzIo
YWRkcmVzcywgTUlQU1JlZ2lzdGVyczo6dDksIGZpeGVkKTsKKyAgICAgICAgcmV0dXJuIENhbGwo
bV9hc3NlbWJsZXIuZnVuY3Rpb25fY2FsbF92aWFfcmVnaXN0ZXIoTUlQU1JlZ2lzdGVyczo6dDkp
LCBDYWxsOjpOb25lKTsKKyAgICB9CisKKyAgICB2b2lkIHJldCgpCisgICAgeworICAgICAgICBt
X2Fzc2VtYmxlci5qbXBfcmVnaXN0ZXIoTUlQU1JlZ2lzdGVyczo6cmEpOworICAgIH0KKworICAg
IHZvaWQgc2V0MzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0ZXJJRCBy
aWdodCwgUmVnaXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKwlpZiAoY29uZCA9
PSBFcXVhbCB8fCBjb25kID09IFplcm8pIHsKKwkgICAgbV9hc3NlbWJsZXIueG9yX2luc24oZGVz
dCwgbGVmdCwgcmlnaHQpOworCSAgICBtX2Fzc2VtYmxlci5zbHRpdShkZXN0LCBkZXN0LCAxKTsK
Kwl9CisJZWxzZSBpZiAoY29uZCA9PSBOb3RFcXVhbCB8fCBjb25kID09IE5vblplcm8pIHsKKwkg
ICAgbV9hc3NlbWJsZXIueG9yX2luc24oZGVzdCwgbGVmdCwgcmlnaHQpOworCSAgICBtX2Fzc2Vt
Ymxlci5zbHR1KGRlc3QsIE1JUFNSZWdpc3RlcnM6Onplcm8sIGRlc3QpOworCX0KKwllbHNlIGlm
IChjb25kID09IEFib3ZlKQorCSAgICBtX2Fzc2VtYmxlci5zbHR1KGRlc3QsIHJpZ2h0LCBsZWZ0
KTsKKwllbHNlIGlmIChjb25kID09IEFib3ZlT3JFcXVhbCkgeworCSAgICBtX2Fzc2VtYmxlci5z
bHR1KGRlc3QsIGxlZnQsIHJpZ2h0KTsKKwkgICAgbV9hc3NlbWJsZXIueG9yaShkZXN0LCBkZXN0
LCAxKTsKKwl9CisJZWxzZSBpZiAoY29uZCA9PSBCZWxvdykKKwkgICAgbV9hc3NlbWJsZXIuc2x0
dShkZXN0LCBsZWZ0LCByaWdodCk7CisJZWxzZSBpZiAoY29uZCA9PSBCZWxvd09yRXF1YWwpIHsK
KwkgICAgbV9hc3NlbWJsZXIuc2x0dShkZXN0LCByaWdodCwgbGVmdCk7CisJICAgIG1fYXNzZW1i
bGVyLnhvcmkoZGVzdCwgZGVzdCwgMSk7CisJfQorCWlmIChjb25kID09IEdyZWF0ZXJUaGFuKQor
CSAgICBtX2Fzc2VtYmxlci5zbHQoZGVzdCwgcmlnaHQsIGxlZnQpOworCWVsc2UgaWYgKGNvbmQg
PT0gR3JlYXRlclRoYW5PckVxdWFsKSB7CisJICAgIG1fYXNzZW1ibGVyLnNsdChkZXN0LCBsZWZ0
LCByaWdodCk7CisJICAgIG1fYXNzZW1ibGVyLnhvcmkoZGVzdCwgZGVzdCwgMSk7CisJfQorCWVs
c2UgaWYgKGNvbmQgPT0gTGVzc1RoYW4pCisJICAgIG1fYXNzZW1ibGVyLnNsdChkZXN0LCBsZWZ0
LCByaWdodCk7CisJZWxzZSBpZiAoY29uZCA9PSBMZXNzVGhhbk9yRXF1YWwpIHsKKwkgICAgbV9h
c3NlbWJsZXIuc2x0KGRlc3QsIHJpZ2h0LCBsZWZ0KTsKKwkgICAgbV9hc3NlbWJsZXIueG9yaShk
ZXN0LCBkZXN0LCAxKTsKKwl9CisgICAgICAgIGVsc2UgaWYgKGNvbmQgPT0gT3ZlcmZsb3cpIHsK
KwkgICAgLyoKKwkJeG9yCWNtcFRlbXAsIGxlZnQsIHJpZ2h0CisJCWJnZXoJRG9uZSwgY21wVGVt
cAkjIHNhbWUgc2lnbiBiaXQgLT4gbm8gb3ZlcmZsb3cKKwkJbW92ZQlkZXN0LCAwCisJCXN1YnUJ
Y21wVGVtcCwgbGVmdCwgcmlnaHQKKwkJeG9yCWNtcFRlbXAsIGNtcFRlbXAsIGxlZnQgIyBkaWZm
IHNpZ24gYml0IC0+IG92ZXJmbG93CisJCXNsdAlkZXN0LCBjbXBUZW1wLCAwCisJICAgICAgRG9u
ZToKKwkgICAgKi8KKwkgICAgbV9hc3NlbWJsZXIueG9yX2luc24oY21wVGVtcFJlZ2lzdGVyLCBs
ZWZ0LCByaWdodCk7CisJICAgIG1fYXNzZW1ibGVyLmJnZXooY21wVGVtcFJlZ2lzdGVyLCA0KTsK
KwkgICAgbV9hc3NlbWJsZXIubW92ZShkZXN0LCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsKKwkgICAg
bV9hc3NlbWJsZXIuc3VidShjbXBUZW1wUmVnaXN0ZXIsIGxlZnQsIHJpZ2h0KTsKKwkgICAgbV9h
c3NlbWJsZXIueG9yX2luc24oY21wVGVtcFJlZ2lzdGVyLCBjbXBUZW1wUmVnaXN0ZXIsIGxlZnQp
OworCSAgICBtX2Fzc2VtYmxlci5zbHQoZGVzdCwgY21wVGVtcFJlZ2lzdGVyLCBNSVBTUmVnaXN0
ZXJzOjp6ZXJvKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChjb25kID09IFNpZ25lZCkg
eworCSAgICBtX2Fzc2VtYmxlci5zdWJ1KGRlc3QsIGxlZnQsIHJpZ2h0KTsKKwkgICAgLy8gQ2hl
Y2sgaWYgdGhlIHJlc3VsdCBpcyBuZWdhdGl2ZS4KKwkgICAgbV9hc3NlbWJsZXIuc2x0KGRlc3Qs
IGRlc3QsIE1JUFNSZWdpc3RlcnM6Onplcm8pOworICAgICAgICB9CisgICAgfQorCisgICAgdm9p
ZCBzZXQzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBJbW0zMiByaWdodCwgUmVn
aXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKwltb3ZlKHJpZ2h0LCBpbW1UZW1w
UmVnaXN0ZXIsIGZpeGVkKTsKKwlzZXQzMihjb25kLCBsZWZ0LCBpbW1UZW1wUmVnaXN0ZXIsIGRl
c3QsIGZpeGVkKTsKKyAgICB9CisKKyAgICB2b2lkIHNldFRlc3QzMihDb25kaXRpb24gY29uZCwg
QWRkcmVzcyBhZGRyZXNzLCBJbW0zMiBtYXNrLCBSZWdpc3RlcklEIGRlc3QsIGludCBmaXhlZCA9
IDApCisgICAgeworCUFTU0VSVCgoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7
CisgICAgICAgIGxvYWQzMihhZGRyZXNzLCBkYXRhVGVtcFJlZ2lzdGVyKTsKKwlpZiAobWFzay5t
X3ZhbHVlID09IC0xICYmIGZpeGVkID09IDApIHsKKwkgICAgaWYgKGNvbmQgPT0gWmVybykKKwkJ
bV9hc3NlbWJsZXIuc2x0aXUoZGVzdCwgZGF0YVRlbXBSZWdpc3RlciwgMSk7CisJICAgIGVsc2UK
KwkJbV9hc3NlbWJsZXIuc2x0dShkZXN0LCBNSVBTUmVnaXN0ZXJzOjp6ZXJvLCBkYXRhVGVtcFJl
Z2lzdGVyKTsKKwl9CisJZWxzZSB7CisJICAgIG1vdmUobWFzaywgaW1tVGVtcFJlZ2lzdGVyLCBm
aXhlZCk7CisJICAgIG1fYXNzZW1ibGVyLmFuZF9pbnNuKGNtcFRlbXBSZWdpc3RlciwgZGF0YVRl
bXBSZWdpc3RlciwKKwkJCQkgaW1tVGVtcFJlZ2lzdGVyKTsKKwkgICAgaWYgKGNvbmQgPT0gWmVy
bykKKwkJbV9hc3NlbWJsZXIuc2x0aXUoZGVzdCwgY21wVGVtcFJlZ2lzdGVyLCAxKTsKKwkgICAg
ZWxzZQorCQltX2Fzc2VtYmxlci5zbHR1KGRlc3QsIE1JUFNSZWdpc3RlcnM6Onplcm8sIGNtcFRl
bXBSZWdpc3Rlcik7CisJfQorICAgIH0KKworICAgIERhdGFMYWJlbDMyIG1vdmVXaXRoUGF0Y2go
SW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworCWludCBmaXhlZCA9IDE7CisJRGF0
YUxhYmVsMzIgbGFiZWwodGhpcyk7CisJbV9hc3NlbWJsZXIubGkoZGVzdCwgaW1tLm1fdmFsdWUs
IGZpeGVkKTsKKyAgICAgICAgcmV0dXJuIGxhYmVsOworICAgIH0KKworICAgIERhdGFMYWJlbFB0
ciBtb3ZlV2l0aFBhdGNoKEltbVB0ciBpbml0aWFsVmFsdWUsIFJlZ2lzdGVySUQgZGVzdCkKKyAg
ICB7CisJaW50IGZpeGVkID0gMTsKKwlEYXRhTGFiZWxQdHIgbGFiZWwodGhpcyk7CisJTUlQU1dv
cmQgdmFsdWUgPSByZWludGVycHJldF9jYXN0PE1JUFNXb3JkPihpbml0aWFsVmFsdWUubV92YWx1
ZSk7CisJbV9hc3NlbWJsZXIubGkoZGVzdCwgdmFsdWUsIGZpeGVkKTsKKyAgICAgICAgcmV0dXJu
IGxhYmVsOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoUHRyV2l0aFBhdGNoKENvbmRpdGlvbiBj
b25kLCBSZWdpc3RlcklEIGxlZnQsIERhdGFMYWJlbFB0ciYgZGF0YUxhYmVsLCBJbW1QdHIgaW5p
dGlhbFJpZ2h0VmFsdWUgPSBJbW1QdHIoMCkpCisgICAgeworCWludCBmaXhlZCA9IDE7CisgICAg
ICAgIGRhdGFMYWJlbCA9IG1vdmVXaXRoUGF0Y2goaW5pdGlhbFJpZ2h0VmFsdWUsIGltbVRlbXBS
ZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBsZWZ0LCBpbW1UZW1wUmVn
aXN0ZXIsIGZpeGVkKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFB0cldpdGhQYXRjaChDb25k
aXRpb24gY29uZCwgQWRkcmVzcyBsZWZ0LCBEYXRhTGFiZWxQdHImIGRhdGFMYWJlbCwgSW1tUHRy
IGluaXRpYWxSaWdodFZhbHVlID0gSW1tUHRyKDApKQorICAgIHsKKwlpbnQgZml4ZWQgPSAxOwor
ICAgICAgICBsb2FkMzIobGVmdCwgZGF0YVRlbXBSZWdpc3RlciwgZml4ZWQpOworICAgICAgICBk
YXRhTGFiZWwgPSBtb3ZlV2l0aFBhdGNoKGluaXRpYWxSaWdodFZhbHVlLCBpbW1UZW1wUmVnaXN0
ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgZGF0YVRlbXBSZWdpc3RlciwgaW1t
VGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgfQorCisgICAgRGF0YUxhYmVsUHRyIHN0b3JlUHRy
V2l0aFBhdGNoKEltbVB0ciBpbml0aWFsVmFsdWUsIEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzKQor
ICAgIHsKKwlpbnQgZml4ZWQgPSAxOworICAgICAgICBEYXRhTGFiZWxQdHIgZGF0YUxhYmVsID0g
bW92ZVdpdGhQYXRjaChpbml0aWFsVmFsdWUsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICBz
dG9yZTMyKGRhdGFUZW1wUmVnaXN0ZXIsIGFkZHJlc3MsIGZpeGVkKTsKKyAgICAgICAgcmV0dXJu
IGRhdGFMYWJlbDsKKyAgICB9CisKKyAgICBEYXRhTGFiZWxQdHIgc3RvcmVQdHJXaXRoUGF0Y2go
SW1wbGljaXRBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICByZXR1cm4gc3RvcmVQdHJX
aXRoUGF0Y2goSW1tUHRyKDApLCBhZGRyZXNzKTsKKyAgICB9CisKKyAgICBDYWxsIHRhaWxSZWN1
cnNpdmVDYWxsKCkKKyAgICB7CisJLy8gTGlrZSBhIG5vcm1hbCBjYWxsLCBidXQgZG9uJ3QgbGlu
ay4KKwlpbnQgZml4ZWQgPSAxOworCW1fYXNzZW1ibGVyLmxpKGFkZHJUZW1wUmVnaXN0ZXIsIDAs
IGZpeGVkKTsKKyAgICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIudGFpbF9mdW5jdGlvbl9j
YWxsX3ZpYV9yZWdpc3RlcihhZGRyVGVtcFJlZ2lzdGVyKSwKKwkJICAgIENhbGw6OkxpbmthYmxl
KTsKKyAgICB9CisKKyAgICBDYWxsIG1ha2VUYWlsUmVjdXJzaXZlQ2FsbChKdW1wIG9sZEp1bXAp
CisgICAgeworCW9sZEp1bXAubGluayh0aGlzKTsKKyAgICAgICAgcmV0dXJuIHRhaWxSZWN1cnNp
dmVDYWxsKCk7CisgICAgfQorCisgICAgdm9pZCBsb2FkRG91YmxlKEltcGxpY2l0QWRkcmVzcyBh
ZGRyZXNzLCBGUFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisjaWYgX19t
aXBzID09IDEKKwkvKgorCSAgICBsaQkJYWRkclRlbXAsIGFkZHJlc3Mub2Zmc2V0CisJICAgIGFk
ZHUJYWRkclRlbXAsIGFkZHJUZW1wLCBiYXNlCisJICAgIGx3YzEJZGVzdCwgMChhZGRyVGVtcCkK
KwkgICAgbHdjMQlkZXN0KzEsIDQoYWRkclRlbXApCisJICovCisJbV9hc3NlbWJsZXIubGkoYWRk
clRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQsIGZpeGVkKTsKKwltX2Fzc2VtYmxlci5hZGR1
KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSk7CisJbV9h
c3NlbWJsZXIubHdjMShkZXN0LCBhZGRyVGVtcFJlZ2lzdGVyLCAwKTsKKwltX2Fzc2VtYmxlci5s
d2MxKEZQUmVnaXN0ZXJJRChkZXN0ICsgMSksIGFkZHJUZW1wUmVnaXN0ZXIsIDQpOworI2Vsc2UK
KyAgICAgICAgaWYgKGFkZHJlc3Mub2Zmc2V0ID49IC0zMjc2OCAmJiBhZGRyZXNzLm9mZnNldCA8
PSAzMjc2NyAmJiBmaXhlZCA9PSAwKSB7CisJICAgIG1fYXNzZW1ibGVyLmxkYzEoZGVzdCwgYWRk
cmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCk7CisgCX0KKwllbHNlIHsKKwkgICAgLyoKKwkJbHVp
CWFkZHJUZW1wLCBvZmZzZXQgPj4gMTYKKwkJYWRkdQlhZGRyVGVtcCwgYWRkclRlbXAsIGJhc2UK
KwkJbGRjMQlkZXN0LCAob2Zmc2V0ICYgMHhmZmZmKShhZGRyVGVtcCkKKwkgICAgICAqLworCSAg
ICBtX2Fzc2VtYmxlci5sdWkoYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQgPj4gMTYp
OworCSAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0
ZXIsIGFkZHJlc3MuYmFzZSk7CisJICAgIG1fYXNzZW1ibGVyLmxkYzEoZGVzdCwgYWRkclRlbXBS
ZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQpOworCX0KKyNlbmRpZgorICAgIH0KKworICAgIHZvaWQg
c3RvcmVEb3VibGUoRlBSZWdpc3RlcklEIHNyYywgSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MsIGlu
dCBmaXhlZCA9IDApCisgICAgeworI2lmIF9fbWlwcyA9PSAxCisJLyoKKwkgICAgbGkJCWFkZHJU
ZW1wLCBhZGRyZXNzLm9mZnNldAorCSAgICBhZGR1CWFkZHJUZW1wLCBhZGRyVGVtcCwgYmFzZQor
CSAgICBzd2MxCWRlc3QsIDAoYWRkclRlbXApCisJICAgIHN3YzEJZGVzdCsxLCA0KGFkZHJUZW1w
KQorCSAqLworCW1fYXNzZW1ibGVyLmxpKGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0
LCBmaXhlZCApOworCW1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBS
ZWdpc3RlciwgYWRkcmVzcy5iYXNlKTsKKwltX2Fzc2VtYmxlci5zd2MxKHNyYywgYWRkclRlbXBS
ZWdpc3RlciwgMCk7CisJbV9hc3NlbWJsZXIuc3djMShGUFJlZ2lzdGVySUQoc3JjICsgMSksIGFk
ZHJUZW1wUmVnaXN0ZXIsIDQpOworI2Vsc2UKKyAgICAgICAgaWYgKGFkZHJlc3Mub2Zmc2V0ID49
IC0zMjc2OCAmJiBhZGRyZXNzLm9mZnNldCA8PSAzMjc2NyAmJiBmaXhlZCA9PSAwKQorCSAgICBt
X2Fzc2VtYmxlci5zZGMxKHNyYywgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCk7CisJZWxz
ZSB7CisJICAgIC8qCisJCWx1aQlhZGRyVGVtcCwgb2Zmc2V0ID4+IDE2CisJCWFkZHUJYWRkclRl
bXAsIGFkZHJUZW1wLCBiYXNlCisJCXNkYzEJc3JjLCAob2Zmc2V0ICYgMHhmZmZmKShhZGRyVGVt
cCkKKwkgICAgICAqLworCSAgICBtX2Fzc2VtYmxlci5sdWkoYWRkclRlbXBSZWdpc3RlciwgYWRk
cmVzcy5vZmZzZXQgPj4gMTYpOworCSAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0
ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSk7CisJICAgIG1fYXNzZW1ibGVyLnNk
YzEoc3JjLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCk7CisJfQorI2VuZGlmCisg
ICAgfQorCisgICAgdm9pZCBhZGREb3VibGUoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklE
IGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgeworCW1fYXNzZW1ibGVyLmFkZF9kKGRlc3QsIGRl
c3QsIHNyYyk7CisgICAgfQorCisgICAgdm9pZCBhZGREb3VibGUoQWRkcmVzcyBzcmMsIEZQUmVn
aXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKwlsb2FkRG91YmxlKHNyYywgZnBU
ZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKwltX2Fzc2VtYmxlci5hZGRfZChkZXN0LCBkZXN0LCBmcFRl
bXBSZWdpc3Rlcik7CisgICAgfQorCisgICAgdm9pZCBzdWJEb3VibGUoRlBSZWdpc3RlcklEIHNy
YywgRlBSZWdpc3RlcklEIGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgeworCW1fYXNzZW1ibGVy
LnN1Yl9kKGRlc3QsIGRlc3QsIHNyYyk7CisgICAgfQorCisgICAgdm9pZCBzdWJEb3VibGUoQWRk
cmVzcyBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKwlsb2Fk
RG91YmxlKHNyYywgZnBUZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKwltX2Fzc2VtYmxlci5zdWJfZChk
ZXN0LCBkZXN0LCBmcFRlbXBSZWdpc3Rlcik7CisgICAgfQorCisgICAgdm9pZCBtdWxEb3VibGUo
RlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRlc3QsIGludCBmaXhlZCA9IDApCisgICAg
eworCW1fYXNzZW1ibGVyLm11bF9kKGRlc3QsIGRlc3QsIHNyYyk7CisgICAgfQorCisgICAgdm9p
ZCBtdWxEb3VibGUoQWRkcmVzcyBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQgPSAw
KQorICAgIHsKKwlsb2FkRG91YmxlKHNyYywgZnBUZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKwltX2Fz
c2VtYmxlci5tdWxfZChkZXN0LCBkZXN0LCBmcFRlbXBSZWdpc3Rlcik7CisgICAgfQorCisgICAg
dm9pZCBjb252ZXJ0SW50MzJUb0RvdWJsZShSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRl
c3QsIGludCBmaXhlZCA9IDApCisgICAgeworCW1fYXNzZW1ibGVyLm10YzEoc3JjLCBmcFRlbXBS
ZWdpc3Rlcik7CisJbV9hc3NlbWJsZXIuY3Z0X2RfdyhkZXN0LCBmcFRlbXBSZWdpc3Rlcik7Cisg
ICAgfQorCisgICAgSnVtcCBicmFuY2hEb3VibGUoRG91YmxlQ29uZGl0aW9uIGNvbmQsIEZQUmVn
aXN0ZXJJRCBsZWZ0LCBGUFJlZ2lzdGVySUQgcmlnaHQsIGludCBmaXhlZCA9IDApCisgICAgewor
CWlmIChjb25kID09IERvdWJsZUVxdWFsKSB7CisJICAgIG1fYXNzZW1ibGVyLmNfZXFfZChsZWZ0
LCByaWdodCk7CisJICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmJjMXQoKSk7CisJfQorCWVs
c2UgaWYgKGNvbmQgPT0gRG91YmxlR3JlYXRlclRoYW4pIHsKKwkgICAgbV9hc3NlbWJsZXIuY19s
dF9kKHJpZ2h0LCBsZWZ0KTsgLy8gcmV2ZXJzZQorCSAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxl
ci5iYzF0KCkpOworCX0KKwllbHNlIGlmIChjb25kID09IERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVh
bCkgeworCSAgICBtX2Fzc2VtYmxlci5jX2xlX2QocmlnaHQsIGxlZnQpOyAvLyByZXZlcnNlCisJ
ICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmJjMXQoKSk7CisJfQorCWVsc2UgaWYgKGNvbmQg
PT0gRG91YmxlTGVzc1RoYW4pIHsKKwkgICAgbV9hc3NlbWJsZXIuY19sdF9kKGxlZnQsIHJpZ2h0
KTsKKwkgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuYmMxdCgpKTsKKwl9CisJZWxzZSBpZiAo
Y29uZCA9PSBEb3VibGVMZXNzVGhhbk9yRXF1YWwpIHsKKwkgICAgbV9hc3NlbWJsZXIuY19sZV9k
KGxlZnQsIHJpZ2h0KTsKKwkgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuYmMxdCgpKTsKKwl9
CisJZWxzZQorCSAgICBBU1NFUlQoMCk7CisKKwlyZXR1cm4gSnVtcCgpOworICAgIH0KKworICAg
IC8vIFRydW5jYXRlcyAnc3JjJyB0byBhbiBpbnRlZ2VyLCBhbmQgcGxhY2VzIHRoZSByZXN1bHRp
bmcgJ2Rlc3QnLgorICAgIC8vIElmIHRoZSByZXN1bHQgaXMgbm90IHJlcHJlc2VudGFibGUgYXMg
YSAzMiBiaXQgdmFsdWUsIGJyYW5jaC4KKyAgICAvLyBNYXkgYWxzbyBicmFuY2ggZm9yIHNvbWUg
dmFsdWVzIHRoYXQgYXJlIHJlcHJlc2VudGFibGUgaW4gMzIgYml0cworICAgIC8vIChzcGVjaWZp
Y2FsbHksIGluIHRoaXMgY2FzZSwgSU5UX01BWCAweDdmZmZmZmZmKS4KKyAgICBKdW1wIGJyYW5j
aFRydW5jYXRlRG91YmxlVG9JbnQzMihGUFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3Qs
IGludCBmaXhlZCA9IDApCisgICAgeworCW1fYXNzZW1ibGVyLnRydW5jX3dfZChmcFRlbXBSZWdp
c3RlcixzcmMpOworCW1fYXNzZW1ibGVyLm1mYzEoZGVzdCwgZnBUZW1wUmVnaXN0ZXIpOworCXJl
dHVybiBicmFuY2gzMihFcXVhbCwgZGVzdCwgSW1tMzIoMHg3ZmZmZmZmZiksIGZpeGVkKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIExpbmtCdWZmZXI7CisgICAgZnJpZW5k
IGNsYXNzIFJlcGF0Y2hCdWZmZXI7CisKKyAgICBzdGF0aWMgdm9pZCBsaW5rQ2FsbCh2b2lkKiBj
b2RlLCBDYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAgTUlQ
U0Fzc2VtYmxlcjo6bGlua0NhbGwoY29kZSwgY2FsbC5tX2ptcCwgZnVuY3Rpb24udmFsdWUoKSk7
CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbCBj
YWxsLCBDb2RlTG9jYXRpb25MYWJlbCBkZXN0aW5hdGlvbikKKyAgICB7CisgICAgICAgIE1JUFNB
c3NlbWJsZXI6OnJlbGlua0NhbGwoY2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZXhl
Y3V0YWJsZUFkZHJlc3MoKSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwo
Q29kZUxvY2F0aW9uQ2FsbCBjYWxsLCBGdW5jdGlvblB0ciBkZXN0aW5hdGlvbikKKyAgICB7Cisg
ICAgICAgIE1JUFNBc3NlbWJsZXI6OnJlbGlua0NhbGwoY2FsbC5kYXRhTG9jYXRpb24oKSwgZGVz
dGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgfQorCit9OworCit9CisKKyNlbmRp
ZgorCisjZW5kaWYgLy8gTWFjcm9Bc3NlbWJsZXJNSVBTX2gKSW5kZXg6IHlhcnIvUmVnZXhKSVQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIHlhcnIvUmVnZXhKSVQuY3BwCShyZXZpc2lvbiA0ODAwMCkKKysr
IHlhcnIvUmVnZXhKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCwxNiBAQAogICAg
IHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1QxID0gQVJNUmVnaXN0ZXJzOjpyNjsKIAogICAg
IHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJldHVyblJlZ2lzdGVyID0gQVJNUmVnaXN0ZXJzOjpy
MDsKKyNlbGlmIFBMQVRGT1JNKE1JUFMpCisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgaW5w
dXQgPSBNSVBTUmVnaXN0ZXJzOjphMDsKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBpbmRl
eCA9IE1JUFNSZWdpc3RlcnM6OmExOworICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGxlbmd0
aCA9IE1JUFNSZWdpc3RlcnM6OmEyOworICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIG91dHB1
dCA9IE1JUFNSZWdpc3RlcnM6OmEzOworCisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmVn
VDAgPSBNSVBTUmVnaXN0ZXJzOjp0NDsKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdU
MSA9IE1JUFNSZWdpc3RlcnM6OnQ1OworCisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmV0
dXJuUmVnaXN0ZXIgPSBNSVBTUmVnaXN0ZXJzOjp2MDsKICNlbGlmIFBMQVRGT1JNKFg4NikKICAg
ICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBpbnB1dCA9IFg4NlJlZ2lzdGVyczo6ZWF4OwogICAg
IHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGluZGV4ID0gWDg2UmVnaXN0ZXJzOjplZHg7CkBAIC0x
MzE2LDYgKzEzMjYsOCBAQAogICAgICAgICBwdXNoKEFSTVJlZ2lzdGVyczo6cjUpOwogICAgICAg
ICBwdXNoKEFSTVJlZ2lzdGVyczo6cjYpOwogICAgICAgICBtb3ZlKEFSTVJlZ2lzdGVyczo6cjMs
IG91dHB1dCk7CisjZWxpZiBQTEFURk9STShNSVBTKQorCS8vIERvIG5vdGhpbmcuCiAjZW5kaWYK
ICAgICB9CiAKQEAgLTEzMzMsNiArMTM0NSw4IEBACiAgICAgICAgIHBvcChBUk1SZWdpc3RlcnM6
OnI2KTsKICAgICAgICAgcG9wKEFSTVJlZ2lzdGVyczo6cjUpOwogICAgICAgICBwb3AoQVJNUmVn
aXN0ZXJzOjpyNCk7CisjZWxpZiBQTEFURk9STShNSVBTKQorCS8vIERvIG5vdGhpbmcKICNlbmRp
ZgogICAgICAgICByZXQoKTsKICAgICB9CkluZGV4OiBqaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiA0ODAwMCkKKysrIGppdC9KSVRP
cGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcyMiw2ICsxNzIyLDU2IEBACiAKICAgICBh
ZGRQdHIoSW1tMzIoc2l6ZW9mKEFyZ0xpc3QpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCisj
ZWxpZiBQTEFURk9STShNSVBTKQorICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyMzIoUmVn
aXN0ZXJGaWxlOjpBcmd1bWVudENvdW50LCByZWdUMCk7CisKKyAgICAvLyBBbGxvY2F0ZSBzdGFj
ayBzcGFjZSBmb3Igb3VyIGFyZ2xpc3QKKyAgICBDT01QSUxFX0FTU0VSVCgoc2l6ZW9mKEFyZ0xp
c3QpICYgMHg3KSA9PSAwLCBBcmdMaXN0X3Nob3VsZF9ieV84Ynl0ZV9hbGlnbmVkKTsKKyAgICBz
dWJQdHIoSW1tMzIoc2l6ZW9mKEFyZ0xpc3QpICsgMjQpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CisKKyAgICAvLyBTZXQgdXAgYXJndW1lbnRzCisgICAgc3ViUHRyKEltbTMyKDEpLCByZWdUMCk7
IC8vIERvbid0IGluY2x1ZGUgJ3RoaXMnIGluIGFyZ2NvdW50CisKKyAgICAvLyBQdXNoIGFyZ2Nv
dW50IHRvIDI0ICsgb2Zmc2V0KCRzcCkKKyAgICBzdG9yZVB0cihyZWdUMCwgQWRkcmVzcyhzdGFj
a1BvaW50ZXJSZWdpc3RlciwgMjQgKyBPQkpFQ1RfT0ZGU0VUT0YoQXJnTGlzdCwgbV9hcmdDb3Vu
dCkpKTsKKworICAgIC8vIENhbGN1bGF0ZSB0aGUgc3RhcnQgb2YgdGhlIGNhbGxmcmFtZSBoZWFk
ZXIsIGFuZCBzdG9yZSBpbiByZWdUMQorICAgIG1vdmUoY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1Qx
KTsKKyAgICBzdWIzMihJbW0zMihSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUgKiAo
aW50MzJfdClzaXplb2YoUmVnaXN0ZXIpKSwgcmVnVDEpOworCisgICAgLy8gQ2FsY3VsYXRlIHN0
YXJ0IG9mIGFyZ3VtZW50cyBhcyBjYWxsZnJhbWUgaGVhZGVyIC0gc2l6ZW9mKFJlZ2lzdGVyKSAq
IGFyZ2NvdW50IChyZWdUMSkKKyAgICBtdWwzMihJbW0zMihzaXplb2YoUmVnaXN0ZXIpKSwgcmVn
VDAsIHJlZ1QwKTsKKyAgICBzdWJQdHIocmVnVDAsIHJlZ1QxKTsKKworICAgIC8vIHB1c2ggcG9p
bnRlciB0byBhcmd1bWVudHMgdG8gMjQgKyBvZmZzZXQoJHNwKQorICAgIHN0b3JlUHRyKHJlZ1Qx
LCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCAyNCArIE9CSkVDVF9PRkZTRVRPRihBcmdM
aXN0LCBtX2FyZ3MpKSk7CisKKyAgICAvLyBTZXR1cCBhcmczOiByZWdUMSBjdXJyZW50bHkgcG9p
bnRzIHRvIHRoZSBmaXJzdCBhcmd1bWVudCwgcmVnVDEtc2l6ZW9mKFJlZ2lzdGVyKSBwb2ludHMg
dG8gJ3RoaXMnCisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCAtKGludDMyX3Qpc2l6ZW9mKFJl
Z2lzdGVyKSksIE1JUFNSZWdpc3RlcnM6OmEzKTsKKworICAgIC8vIFNldHVwIGFyZzI6CisgICAg
ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpDYWxsZWUsIE1JUFNS
ZWdpc3RlcnM6OmEyKTsKKworICAgIC8vIFNldHVwIGFyZzE6CisgICAgbW92ZShjYWxsRnJhbWVS
ZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6YTEpOworCisgICAgLy8gU2V0dXAgYXJnNDogQXJnTGlz
dCBpcyBwYXNzZWQgYnkgcmVmZXJlbmNlLiAgQXQgMTYoJHNwKSwgc3RvcmUgKCRzcCArIDI0KQor
ICAgIGFkZFB0cihJbW0zMigyNCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZWdUMik7CisgICAg
c3RvcmVQdHIocmVnVDIsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIDE2KSk7CisKKyAg
ICAvLyBTZXR1cCBhcmcwIGFzIDIwKCRzcCkgdG8gaG9sZCB0aGUgcmV0dXJuZWQgc3RydWN0dXJl
LgorICAgIEFTU0VSVChzaXplb2YoSlNWYWx1ZSkgPT0gNCk7CisgICAgYWRkUHRyKEltbTMyKDIw
KSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6OmEwKTsKKworICAgIC8vIENh
bGwKKyAgICBjYWxsKEFkZHJlc3MoTUlQU1JlZ2lzdGVyczo6YTIsIE9CSkVDVF9PRkZTRVRPRihK
U0Z1bmN0aW9uLCBtX2RhdGEpKSk7CisKKyAgICAvLyBHZXQgcmV0dXJuZWQgdmFsdWUgZnJvbSAw
KCR2MCkgd2hpY2ggaXMgdGhlIHNhbWUgYXMgMjAoJHNwKQorICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZXR1cm5WYWx1ZVJlZ2lzdGVyLCAwKSwgcmV0dXJuVmFsdWVSZWdpc3Rlcik7CisKKyAgICAvLyBS
ZXN0b3JlIHN0YWNrIHNwYWNlCisgICAgYWRkUHRyKEltbTMyKHNpemVvZihBcmdMaXN0KSArIDI0
KSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCiAjZWxpZiBFTkFCTEUoSklUX09QVElNSVpFX05B
VElWRV9DQUxMKQogI2Vycm9yICJKSVRfT1BUSU1JWkVfTkFUSVZFX0NBTEwgbm90IHlldCBzdXBw
b3J0ZWQgb24gdGhpcyBwbGF0Zm9ybS4iCiAjZWxzZQpJbmRleDogaml0L0pJVFN0dWJzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBqaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiA0ODAwMCkKKysrIGppdC9K
SVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1OSw2ICs1NTksNzkgQEAKICAgICAibW92
IHBjLCBsciIgIlxuIgogKTsKIAorI2VsaWYgUExBVEZPUk0oTUlQUykKKworI2lmIFVTRShKSVRf
U1RVQl9BUkdVTUVOVF9WQV9MSVNUKQorI2Vycm9yICJKSVRfU1RVQl9BUkdVTUVOVF9WQV9MSVNU
IG5vdCBzdXBwb3J0ZWQgb24gTUlQUy4iCisjZW5kaWYKKworYXNtIHZvbGF0aWxlICgKKyIudGV4
dCIgIlxuIgorIi5hbGlnbiAyIiAiXG4iCisiLnNldCBub3Jlb3JkZXIiICJcbiIKKyIuc2V0IG5v
bWFjcm8iICJcbiIKKyIuc2V0IG5vbWlwczE2IiAiXG4iCisiLmdsb2JsICIgU1lNQk9MX1NUUklO
RyhjdGlUcmFtcG9saW5lKSAiXG4iCitTWU1CT0xfU1RSSU5HKGN0aVRyYW1wb2xpbmUpICI6IiAi
XG4iCisgICAgImFkZGl1ICQyOSwkMjksLTcyIiAiXG4iCisgICAgInN3ICAgICQzMSw0NCgkMjkp
IiAiXG4iCisgICAgInN3ICAgICQxOCw0MCgkMjkpIiAiXG4iCisgICAgInN3ICAgICQxNywzNigk
MjkpIiAiXG4iCisgICAgInN3ICAgICQxNiwzMigkMjkpIiAiXG4iCisgICAgIm1vdmUgICQxNiwk
NgkjIHNldCBjYWxsRnJhbWVSZWdpc3RlciIgIlxuIgorICAgICJsaSAgICAkMTcsNTEyCSMgc2V0
IHRpbWVvdXRDaGVja1JlZ2lzdGVyIiAiXG4iCisgICAgIm1vdmUgICQyNSwkNAkjIG1vdmUgZXhl
Y3V0YWJsZUFkZHJlc3MgdG8gdDkiICJcbiIKKyAgICAic3cgICAgJDUsNTIoJDI5KQkjIHN0b3Jl
IHJlZ2lzdGVyRmlsZSB0byBjdXJyZW50IHN0YWNrIiAiXG4iCisgICAgInN3ICAgICQ2LDU2KCQy
OSkJIyBzdG9yZSBjYWxsRnJhbWUgdG8gY3VyZW50IHN0YWNrIiAiXG4iCisgICAgInN3ICAgICQ3
LDYwKCQyOSkJIyBzdG9yZSBleGNlcHRpb24gdG8gY3VycmVudCBzdGFjayIgIlxuIgorICAgICJs
dyAgICAkOCw4OCgkMjkpCSMgbG9hZCBlbmFibGVQcm9maWxlclJlZmVyZW5jZSBmcm9tIHByZXZp
b3VzIHN0YWNrIiAiXG4iCisgICAgImx3ICAgICQ5LDkyKCQyOSkJIyBsb2FkIGdsb2JhbERhdGEg
ZnJvbSBwcmV2aW91cyBzdGFjayIgIlxuIgorICAgICJzdyAgICAkOCw2NCgkMjkpCSMgc3RvcmUg
ZW5hYmxlUHJvZmlsZXJSZWZlcmVuY2UgdG8gY3VycmVudCBzdGFjayIgIlxuIgorICAgICJqYWxy
ICAkMjUiICJcbiIKKyAgICAic3cgICAgJDksNjgoJDI5KQkjIHN0b3JlIGdsb2JhbERhdGEgdG8g
Y3VycmVudCBzdGFjayIgIlxuIgorICAgICJsdyAgICAkMTYsMzIoJDI5KSIgIlxuIgorICAgICJs
dyAgICAkMTcsMzYoJDI5KSIgIlxuIgorICAgICJsdyAgICAkMTgsNDAoJDI5KSIgIlxuIgorICAg
ICJsdyAgICAkMzEsNDQoJDI5KSIgIlxuIgorICAgICJqciAgICAkMzEiICJcbiIKKyAgICAiYWRk
aXUgJDI5LCQyOSw3MiIgIlxuIgorIi5zZXQgcmVvcmRlciIgIlxuIgorIi5zZXQgbWFjcm8iICJc
biIKKyk7CisKK2FzbSB2b2xhdGlsZSAoCisiLnRleHQiICJcbiIKKyIuYWxpZ24gMiIgIlxuIgor
Ii5zZXQgbm9yZW9yZGVyIiAiXG4iCisiLnNldCBub21hY3JvIiAiXG4iCisiLnNldCBub21pcHMx
NiIgIlxuIgorIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoY3RpVk1UaHJvd1RyYW1wb2xpbmUpICJc
biIKK1NZTUJPTF9TVFJJTkcoY3RpVk1UaHJvd1RyYW1wb2xpbmUpICI6IiAiXG4iCisgICAgImph
bCAiIFNZTUJPTF9TVFJJTkcoY3RpX3ZtX3Rocm93KSAiXG4iCisgICAgIm1vdmUgICQ0LCAkMjki
ICJcbiIKKyAgICAibHcgICAgJDE2LDMyKCQyOSkiICJcbiIKKyAgICAibHcgICAgJDE3LDM2KCQy
OSkiICJcbiIKKyAgICAibHcgICAgJDE4LDQwKCQyOSkiICJcbiIKKyAgICAibHcgICAgJDMxLDQ0
KCQyOSkiICJcbiIKKyAgICAianIgICAgJDMxIiAiXG4iCisgICAgImFkZGl1ICQyOSwkMjksNzIi
ICJcbiIKKyIuc2V0IHJlb3JkZXIiICJcbiIKKyIuc2V0IG1hY3JvIiAiXG4iCispOworCithc20g
dm9sYXRpbGUgKAorIi50ZXh0IiAiXG4iCisiLmFsaWduIDIiICJcbiIKKyIuc2V0IG5vcmVvcmRl
ciIgIlxuIgorIi5zZXQgbm9tYWNybyIgIlxuIgorIi5zZXQgbm9taXBzMTYiICJcbiIKKyIuZ2xv
YmwgIiBTWU1CT0xfU1RSSU5HKGN0aU9wVGhyb3dOb3RDYXVnaHQpICJcbiIKK1NZTUJPTF9TVFJJ
TkcoY3RpT3BUaHJvd05vdENhdWdodCkgIjoiICJcbiIKKyAgICAidGVxICQwLCQwLDciICJcbiIK
KyIuc2V0IHJlb3JkZXIiICJcbiIKKyIuc2V0IG1hY3JvIiAiXG4iCispOworCiAjZWxpZiBDT01Q
SUxFUihNU1ZDKQogCiAjaWYgVVNFKEpJVF9TVFVCX0FSR1VNRU5UX1ZBX0xJU1QpCkBAIC02NTMs
NiArNzI2LDIwIEBACiAKICAgICBBU1NFUlQoT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFj
a0ZyYW1lLCB0aHVua1JldHVybkFkZHJlc3MpID09IDB4MUMpOwogI2VuZGlmCisKKyNpZiBQTEFU
Rk9STShNSVBTKQorICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJh
bWUsIHByZXNlcnZlZFMwKSA9PSAzMik7CisgICAgQVNTRVJUKE9CSkVDVF9PRkZTRVRPRihzdHJ1
Y3QgSklUU3RhY2tGcmFtZSwgcHJlc2VydmVkUzEpID09IDM2KTsKKyAgICBBU1NFUlQoT0JKRUNU
X09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBwcmVzZXJ2ZWRTMikgPT0gNDApOworICAg
IEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIHByZXNlcnZlZFJl
dHVybkFkZHJlc3MpID09IDQ0KTsKKyAgICBBU1NFUlQoT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBK
SVRTdGFja0ZyYW1lLCB0aHVua1JldHVybkFkZHJlc3MpID09IDQ4KTsKKyAgICBBU1NFUlQoT0JK
RUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCByZWdpc3RlckZpbGUpID09IDUyKTsK
KyAgICBBU1NFUlQoT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBjYWxsRnJh
bWUpID09IDU2KTsKKyAgICBBU1NFUlQoT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0Zy
YW1lLCBleGNlcHRpb24pID09IDYwKTsKKyAgICBBU1NFUlQoT0JKRUNUX09GRlNFVE9GKHN0cnVj
dCBKSVRTdGFja0ZyYW1lLCBlbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UpID09IDY0KTsKKyAgICBB
U1NFUlQoT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBnbG9iYWxEYXRhKSA9
PSA2OCk7CisKKyNlbmRpZgogfQogCiAjaWYgRU5BQkxFKEpJVF9PUFRJTUlaRV9QUk9QRVJUWV9B
Q0NFU1MpCkBAIC04OTYsNiArOTgzLDMwIEBACiAgICAgICAgICk7IFwKICAgICBydHlwZSBKSVRT
dHViVGh1bmtlZF8jI29wKFNUVUJfQVJHU19ERUNMQVJBVElPTikgXAogCisjZWxpZiBQTEFURk9S
TShNSVBTKQorI2RlZmluZSBERUZJTkVfU1RVQl9GVU5DVElPTihydHlwZSwgb3ApIFwKKyAgICBl
eHRlcm4gIkMiIHsgXAorICAgICAgICBydHlwZSBKSVRTdHViVGh1bmtlZF8jI29wKFNUVUJfQVJH
U19ERUNMQVJBVElPTik7IFwKKyAgICB9OyBcCisgICAgYXNtIHZvbGF0aWxlICggXAorICAgICAg
ICAiLnRleHQiICJcbiIgXAorICAgICAgICAiLmFsaWduIDIiICJcbiIgXAorICAgICAgICAiLnNl
dCBub3Jlb3JkZXIiICJcbiIgXAorICAgICAgICAiLnNldCBub21hY3JvIiAiXG4iIFwKKyAgICAg
ICAgIi5zZXQgbm9taXBzMTYiICJcbiIgXAorICAgICAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklO
RyhjdGlfIyNvcCkgIlxuIiBcCisgICAgICAgIFNZTUJPTF9TVFJJTkcoY3RpXyMjb3ApICI6IiAi
XG4iIFwKKyAgICAgICAgInN3ICAgICQzMSwgNDgoJDI5KSIgIlxuIiBcCisgICAgICAgICJqYWwg
IiBTWU1CT0xfU1RSSU5HKEpJVFN0dWJUaHVua2VkXyMjb3ApICJcbiIgXAorICAgICAgICAibm9w
IiAiXG4iIFwKKyAgICAgICAgImx3ICAgICQzMSwgNDgoJDI5KSIgIlxuIiBcCisgICAgICAgICJq
ciAgICAkMzEiICJcbiIgXAorICAgICAgICAibm9wIiAiXG4iIFwKKyAgICAgICAgIi5zZXQgcmVv
cmRlciIgIlxuIiBcCisgICAgICAgICIuc2V0IG1hY3JvIiAiXG4iIFwKKyAgICAgICAgKTsgXAor
ICAgIHJ0eXBlIEpJVFN0dWJUaHVua2VkXyMjb3AoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBcCisK
ICNlbHNlCiAjZGVmaW5lIERFRklORV9TVFVCX0ZVTkNUSU9OKHJ0eXBlLCBvcCkgcnR5cGUgSklU
X1NUVUIgY3RpXyMjb3AoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKQogI2VuZGlmCkluZGV4OiBqaXQv
SklUU3R1YnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBqaXQvSklUU3R1YnMuaAkocmV2aXNpb24gNDgwMDAp
CisrKyBqaXQvSklUU3R1YnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTU1LDYgKzE1NSwyOSBAQAog
ICAgICAgICAKICAgICAgICAgUmV0dXJuQWRkcmVzc1B0ciogcmV0dXJuQWRkcmVzc1Nsb3QoKSB7
IHJldHVybiAmdGh1bmtSZXR1cm5BZGRyZXNzOyB9CiAgICAgfTsKKyNlbGlmIFBMQVRGT1JNKE1J
UFMpCisgICAgc3RydWN0IEpJVFN0YWNrRnJhbWUgeworICAgICAgICB2b2lkKiByZXNlcnZlZDsg
Ly8gVW51c2VkCisgICAgICAgIEpJVFN0dWJBcmcgYXJnc1s3XTsJLy8gS2VlcCBpdCA4IGJ5dGUg
YWxpZ25lZAorCisgICAgICAgIHZvaWQqIHByZXNlcnZlZFMwOworICAgICAgICB2b2lkKiBwcmVz
ZXJ2ZWRTMTsKKyAgICAgICAgdm9pZCogcHJlc2VydmVkUzI7CisgICAgICAgIHZvaWQqIHByZXNl
cnZlZFJldHVybkFkZHJlc3M7CisKKyAgICAgICAgUmV0dXJuQWRkcmVzc1B0ciB0aHVua1JldHVy
bkFkZHJlc3M7CisKKyAgICAgICAgLy8gVGhlc2UgYXJndW1lbnRzIHBhc3NlZCBpbiBhMS4uYTMg
KGEwIGNvbnRhaW5lZCB0aGUgZW50cnkgY29kZSBwb2ludGVkLCB3aGljaCBpcyBub3QgcHJlc2Vy
dmVkKQorICAgICAgICBSZWdpc3RlckZpbGUqIHJlZ2lzdGVyRmlsZTsKKyAgICAgICAgQ2FsbEZy
YW1lKiBjYWxsRnJhbWU7CisgICAgICAgIEpTVmFsdWUqIGV4Y2VwdGlvbjsKKworICAgICAgICAv
LyBUaGVzZSBhcmd1bWVudHMgcGFzc2VkIG9uIHRoZSBzdGFjay4KKyAgICAgICAgUHJvZmlsZXIq
KiBlbmFibGVkUHJvZmlsZXJSZWZlcmVuY2U7CisgICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YTsKKworICAgICAgICBSZXR1cm5BZGRyZXNzUHRyKiByZXR1cm5BZGRyZXNzU2xvdCgpIHsg
cmV0dXJuICZ0aHVua1JldHVybkFkZHJlc3M7IH0KKyAgICB9OwogI2VsaWYgUExBVEZPUk0oQVJN
KQogICAgIHN0cnVjdCBKSVRTdGFja0ZyYW1lIHsKICAgICAgICAgSklUU3R1YkFyZyBwYWRkaW5n
OyAvLyBVbnVzZWQKSW5kZXg6IGppdC9KSVRJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
aml0L0pJVElubGluZU1ldGhvZHMuaAkocmV2aXNpb24gNDgwMDApCisrKyBqaXQvSklUSW5saW5l
TWV0aG9kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsNiArMTczLDIzIEBACiAgICAgbG9hZFB0
cihhZGRyZXNzLCBsaW5rUmVnaXN0ZXIpOwogfQogCisjZWxpZiBQTEFURk9STShNSVBTKQorCitB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjpwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoUmVn
aXN0ZXJJRCByZWcpCit7CisgICAgbW92ZShyZXR1cm5BZGRyZXNzUmVnaXN0ZXIsIHJlZyk7Cit9
CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0
dXJuKFJlZ2lzdGVySUQgcmVnKQoreworICAgIG1vdmUocmVnLCByZXR1cm5BZGRyZXNzUmVnaXN0
ZXIpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpyZXN0b3JlUmV0dXJuQWRkcmVzc0Jl
Zm9yZVJldHVybihBZGRyZXNzIGFkZHJlc3MpCit7CisgICAgbG9hZFB0cihhZGRyZXNzLCByZXR1
cm5BZGRyZXNzUmVnaXN0ZXIpOworfQorCiAjZW5kaWYKIAogI2lmIFVTRShKSVRfU1RVQl9BUkdV
TUVOVF9WQV9MSVNUKQpJbmRleDogaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCShyZXZpc2lvbiA0ODAwMCkKKysrIGppdC9F
eGVjdXRhYmxlQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3Niw2ICsxNzYsMjggQEAK
ICAgICBzdGF0aWMgdm9pZCBjYWNoZUZsdXNoKHZvaWQqLCBzaXplX3QpCiAgICAgewogICAgIH0K
KyNlbGlmIFBMQVRGT1JNKE1JUFMpCisgICAgc3RhdGljIHZvaWQgY2FjaGVGbHVzaCh2b2lkKiBj
b2RlLCBzaXplX3Qgc2l6ZSkKKyAgICB7CisjaWYgX19taXBzX2lzYV9yZXYgPT0gMgorCWludCBs
aW5lX3NpemU7CisJYXNtICgicmRod3IgJTAsICQxIiA6ICI9ciIgKGxpbmVfc2l6ZSkpOworCS8v
CisJLy8gTW9kaWZ5ICJzdGFydCIgYW5kICJlbmQiIHRvIGF2b2lkIEdDQyA0LjMgYnVnIGluCisJ
Ly8gbWlwc19leHBhbmRfc3luY2lfbG9vcCB0aGF0IG1heSBleGVjdXRlIHN5bmNpIG9uZSBtb3Jl
IHRpbWUuCisJLy8gInN0YXJ0IiBwb2ludHMgdG8gdGhlIGZpc3J0IGJ5dGUgb2YgdGhlIGNhY2hl
IGxpbmUuCisJLy8gImVuZCIgcG9pbnRzIHRvIHRoZSBsYXN0IGJ5dGUgb2YgdGhlIGxpbmUgYmVm
b3JlIHRoZSBsYXN0IGNhY2hlIGxpbmUuCisJLy8gQmVjYXVzZSBzaXplIGlzIGFsd2F5cyBhIG11
bHRpcGxlIG9mIDQsIHRoaXMgaXMgc2FmZSB0byBzZXQKKwkvLyAiZW5kIiB0byB0aGUgbGFzdCBi
eXRlLgorCS8vCisJaW50IHN0YXJ0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oY29kZSkg
JiAoLWxpbmVfc2l6ZSk7CisJaW50IGVuZCA9ICgocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4o
Y29kZSkgKyBzaXplKSAmICgtbGluZV9zaXplKSkgLSAxOworCV9fY2xlYXJfY2FjaGUocmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4oc3RhcnQpLCByZWludGVycHJldF9jYXN0PGNoYXIqPihlbmQpKTsK
KyNlbHNlCisJaW50IGVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGNvZGUpICsgc2l6
ZTsKKwlfX2NsZWFyX2NhY2hlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvZGUpLCByZWludGVy
cHJldF9jYXN0PGNoYXIqPihlbmQpKTsKKyNlbmRpZgorICAgIH0KICNlbGlmIFBMQVRGT1JNX0FS
TV9BUkNIKDcpICYmIFBMQVRGT1JNKElQSE9ORSkKICAgICBzdGF0aWMgdm9pZCBjYWNoZUZsdXNo
KHZvaWQqIGNvZGUsIHNpemVfdCBzaXplKQogICAgIHsKSW5kZXg6IGppdC9KSVQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBqaXQvSklULmgJKHJldmlzaW9uIDQ4MDAwKQorKysgaml0L0pJVC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNjcsNiArMjY3LDI4IEBACiAgICAgICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lz
dGVySUQgZnBSZWdUMCA9IEFSTVJlZ2lzdGVyczo6ZDA7CiAgICAgICAgIHN0YXRpYyBjb25zdCBG
UFJlZ2lzdGVySUQgZnBSZWdUMSA9IEFSTVJlZ2lzdGVyczo6ZDE7CiAgICAgICAgIHN0YXRpYyBj
b25zdCBGUFJlZ2lzdGVySUQgZnBSZWdUMiA9IEFSTVJlZ2lzdGVyczo6ZDI7CisjZWxpZiBQTEFU
Rk9STShNSVBTKQorICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZXR1cm5WYWx1ZVJl
Z2lzdGVyID0gTUlQU1JlZ2lzdGVyczo6djA7CisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3Rl
cklEIGNhY2hlZFJlc3VsdFJlZ2lzdGVyID0gTUlQU1JlZ2lzdGVyczo6djA7CisgICAgICAgIHN0
YXRpYyBjb25zdCBSZWdpc3RlcklEIGZpcnN0QXJndW1lbnRSZWdpc3RlciA9IE1JUFNSZWdpc3Rl
cnM6OmEwOworCisJLy8gcmVnVDAgbXVzdCBiZSB2MCBmb3IgcmV0dXJuaW5nIGEgMzItYml0IHZh
bHVlLgorICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdUMCA9IE1JUFNSZWdpc3Rl
cnM6OnYwOworCisJLy8gcmVnVDEgbXVzdCBiZSB2MSBmb3IgcmV0dXJuaW5nIGEgcGFpciBvZiAz
Mi1iaXQgdmFsdWUuCisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1QxID0gTUlQ
U1JlZ2lzdGVyczo6djE7CisKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnVDIg
PSBNSVBTUmVnaXN0ZXJzOjp0NDsKKworCS8vIHJlZ1QzIG11c3QgYmUgc2F2ZWQgaW4gdGhlIGNh
bGxlZSwgc28gdXNlIGFuIFMgcmVnaXN0ZXIuCisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3Rl
cklEIHJlZ1QzID0gTUlQU1JlZ2lzdGVyczo6czI7CisKKyAgICAgICAgc3RhdGljIGNvbnN0IFJl
Z2lzdGVySUQgY2FsbEZyYW1lUmVnaXN0ZXIgPSBNSVBTUmVnaXN0ZXJzOjpzMDsKKyAgICAgICAg
c3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgdGltZW91dENoZWNrUmVnaXN0ZXIgPSBNSVBTUmVnaXN0
ZXJzOjpzMTsKKworICAgICAgICBzdGF0aWMgY29uc3QgRlBSZWdpc3RlcklEIGZwUmVnVDAgPSBN
SVBTUmVnaXN0ZXJzOjpmNDsKKyAgICAgICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBmcFJl
Z1QxID0gTUlQU1JlZ2lzdGVyczo6ZjY7CisgICAgICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVy
SUQgZnBSZWdUMiA9IE1JUFNSZWdpc3RlcnM6OmY4OwogI2Vsc2UKICAgICAjZXJyb3IgIkpJVCBu
b3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0uIgogI2VuZGlmCkBAIC02MTcsNyArNjM5LDMw
IEBACiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRNZXRob2RDaGVja1Byb3Rv
T2JqID0gMTI7CiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRNZXRob2RDaGVj
a1Byb3RvU3RydWN0ID0gMjA7CiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRN
ZXRob2RDaGVja1B1dEZ1bmN0aW9uID0gMzI7CisjZWxpZiBQTEFURk9STShNSVBTKQorICAgICAg
ICAvLyBUaGVzZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgdmFsdWUgYXJlIHVzZWQgdG8gZW5hYmxl
IHBhdGNoaW5nIC0gc2VlIGNvbW1lbnQgb24gb3BfcHV0X2J5X2lkLgorICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IHBhdGNoT2Zmc2V0UHV0QnlJZFN0cnVjdHVyZSA9IDEyOworICAgICAgICBzdGF0
aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0UHV0QnlJZEV4dGVybmFsTG9hZCA9IDM2OworICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IHBhdGNoTGVuZ3RoUHV0QnlJZEV4dGVybmFsTG9hZCA9IDE2Owor
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0UHV0QnlJZFByb3BlcnR5TWFwT2Zm
c2V0ID0gNTI7CisgICAgICAgIC8vIFRoZXNlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyB2YWx1ZSBh
cmUgdXNlZCB0byBlbmFibGUgcGF0Y2hpbmcgLSBzZWUgY29tbWVudCBvbiBvcF9nZXRfYnlfaWQu
CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkU3RydWN0dXJlID0g
MTI7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9T
bG93Q2FzZSA9IDM2OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJ
ZEV4dGVybmFsTG9hZCA9IDM2OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoTGVuZ3Ro
R2V0QnlJZEV4dGVybmFsTG9hZCA9IDE2OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNo
T2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0ID0gNTI7CisgICAgICAgIHN0YXRpYyBjb25z
dCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkUHV0UmVzdWx0ID0gNjg7CisjaWYgRU5BQkxFKE9QQ09E
RV9TQU1QTElORykKKyAgICAgICAgI2Vycm9yICJPUENPREVfU0FNUExJTkcgaXMgbm90IHlldCBz
dXBwb3J0ZWQiCisjZWxzZQorICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0
QnlJZFNsb3dDYXNlQ2FsbCA9IDQwOwogI2VuZGlmCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
cGF0Y2hPZmZzZXRPcENhbGxDb21wYXJlVG9KdW1wID0gMjQ7CisKKyAgICAgICAgc3RhdGljIGNv
bnN0IGludCBwYXRjaE9mZnNldE1ldGhvZENoZWNrUHJvdG9PYmogPSAyNDsKKyAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhvZENoZWNrUHJvdG9TdHJ1Y3QgPSA0NDsKKyAg
ICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhvZENoZWNrUHV0RnVuY3Rpb24g
PSA2ODsKKyNlbmRpZgogI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAKICNpZiBQTEFURk9S
TShBUk0pICYmICFQTEFURk9STV9BUk1fQVJDSCg3KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40825</attachid>
            <date>2009-10-07 14:53:52 -0700</date>
            <delta_ts>2009-10-09 16:18:15 -0700</delta_ts>
            <desc>MIPS JIT Patch 20091007</desc>
            <filename>mips_jit20091007.diff</filename>
            <type>text/plain</type>
            <size>99122</size>
            <attacher name="Chao-ying Fu">fu</attacher>
            
              <data encoding="base64">SW5kZXg6IHd0Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHd0Zi9QbGF0Zm9ybS5oCShyZXZp
c2lvbiA0ODAwMCkKKysrIHd0Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjUsNiAr
MjI1LDE1IEBACiAjZGVmaW5lIFdURl9QTEFURk9STV9CSUdfRU5ESUFOIDEKICNlbmRpZgogCisv
KiBQTEFURk9STShNSVBTKSAqLworLyogTm90ZTogT25seSBPMzIgQUJJIGlzIHRlc3RlZCwgc28g
d2UgZW5hYmxlIGl0IGZvciBPMzIgQUJJIGZvciBub3cuICAqLworI2lmICAgKGRlZmluZWQobWlw
cykgfHwgZGVmaW5lZChfX21pcHNfXykpICYmIGRlZmluZWQoX0FCSU8zMikKKyNkZWZpbmUgV1RG
X1BMQVRGT1JNX01JUFMgMQorI2lmIGRlZmluZWQoX19NSVBTRUJfXykKKyNkZWZpbmUgV1RGX1BM
QVRGT1JNX0JJR19FTkRJQU4gMQorI2VuZGlmCisjZW5kaWYgLyogTUlQUyAqLworCiAvKiBQTEFU
Rk9STShBUk0pICovCiAjaWYgICBkZWZpbmVkKGFybSkgXAogICAgfHwgZGVmaW5lZChfX2FybV9f
KQpAQCAtNjAzLDcgKzYxMiw3IEBACiAjaWYgIWRlZmluZWQoV1RGX1VTRV9KU1ZBTFVFNjQpICYm
ICFkZWZpbmVkKFdURl9VU0VfSlNWQUxVRTMyKSAmJiAhZGVmaW5lZChXVEZfVVNFX0pTVkFMVUUz
Ml82NCkKICNpZiBQTEFURk9STShYODZfNjQpICYmIChQTEFURk9STShNQUMpIHx8IFBMQVRGT1JN
KExJTlVYKSkKICNkZWZpbmUgV1RGX1VTRV9KU1ZBTFVFNjQgMQotI2VsaWYgUExBVEZPUk0oQVJN
KSB8fCBQTEFURk9STShQUEM2NCkKKyNlbGlmIFBMQVRGT1JNKEFSTSkgfHwgUExBVEZPUk0oUFBD
NjQpIHx8IFBMQVRGT1JNKE1JUFMpCiAjZGVmaW5lIFdURl9VU0VfSlNWQUxVRTMyIDEKICNlbHNl
CiAjZGVmaW5lIFdURl9VU0VfSlNWQUxVRTMyXzY0IDEKQEAgLTYzMCw2ICs2MzksMTAgQEAKIC8q
IFRoZSBKSVQgaXMgdGVzdGVkICYgd29ya2luZyBvbiB4ODYgV2luZG93cyAqLwogI2VsaWYgUExB
VEZPUk0oWDg2KSAmJiBQTEFURk9STShXSU4pCiAgICAgI2RlZmluZSBFTkFCTEVfSklUIDEKKy8q
IFRoZSBKSVQgaXMgZm9yIE1JUFMuICAqLworI2VsaWYgUExBVEZPUk0oTUlQUykKKyAgICAjZGVm
aW5lIEVOQUJMRV9KSVQgMQorICAgICNkZWZpbmUgV1RGX1VTRV9KSVRfU1RVQl9BUkdVTUVOVF9W
QV9MSVNUIDAKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQpCkBAIC02OTAsNyArNzAzLDggQEAK
ICB8fCAoUExBVEZPUk0oWDg2XzY0KSAmJiBQTEFURk9STShNQUMpKSBcCiAgLyogVW5kZXIgZGV2
ZWxvcG1lbnQsIHRlbXBvcmFyaWx5IGRpc2FibGVkIHVudGlsIDE2TWIgbGluayByYW5nZSBsaW1p
dCBpbiBhc3NlbWJsZXIgaXMgZml4ZWQuICovIFwKICB8fCAoUExBVEZPUk1fQVJNX0FSQ0goNykg
JiYgUExBVEZPUk0oSVBIT05FKSAmJiAwKSBcCi0gfHwgKFBMQVRGT1JNKFg4NikgJiYgUExBVEZP
Uk0oV0lOKSkKKyB8fCAoUExBVEZPUk0oWDg2KSAmJiBQTEFURk9STShXSU4pKSBcCisgfHwgUExB
VEZPUk0oTUlQUykKICNkZWZpbmUgRU5BQkxFX1lBUlIgMQogI2RlZmluZSBFTkFCTEVfWUFSUl9K
SVQgMQogI2VuZGlmCkluZGV4OiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gNDgwMDApCisrKyBhc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsMTAgQEAK
ICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckFSTS5oIgogbmFtZXNwYWNlIEpTQyB7IHR5cGVkZWYg
TWFjcm9Bc3NlbWJsZXJBUk0gTWFjcm9Bc3NlbWJsZXJCYXNlOyB9OwogCisjZWxpZiBQTEFURk9S
TShNSVBTKQorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyTUlQUy5oIgorbmFtZXNwYWNlIEpTQyB7
IHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJNSVBTIE1hY3JvQXNzZW1ibGVyQmFzZTsgfTsKKwogI2Vs
aWYgUExBVEZPUk0oWDg2KQogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyWDg2LmgiCiBuYW1lc3Bh
Y2UgSlNDIHsgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlclg4NiBNYWNyb0Fzc2VtYmxlckJhc2U7IH07
CkluZGV4OiBhc3NlbWJsZXIvTUlQU0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGFzc2VtYmxl
ci9NSVBTQXNzZW1ibGVyLmgJKHJldmlzaW9uIDApCisrKyBhc3NlbWJsZXIvTUlQU0Fzc2VtYmxl
ci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOSBNSVBTIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOSBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIE1JUFMgVEVD
SE5PTE9HSUVTLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgTUlQUyBU
RUNITk9MT0dJRVMsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBNSVBTQXNzZW1ibGVyX2gKKyNkZWZpbmUgTUlQU0Fz
c2VtYmxlcl9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKyNpbmNsdWRlIDx3dGYvU2Vn
bWVudGVkVmVjdG9yLmg+CisKKyNpZiBFTkFCTEUoQVNTRU1CTEVSKSAmJiBQTEFURk9STShNSVBT
KQorCisjaW5jbHVkZSAiQXNzZW1ibGVyQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3R5cGVkZWYgdWludDMyX3QgTUlQU1dvcmQ7CisK
K25hbWVzcGFjZSBNSVBTUmVnaXN0ZXJzIHsKKyAgICB0eXBlZGVmIGVudW0geworICAgICAgICBy
MCA9IDAsCisgICAgICAgIHIxLAorICAgICAgICByMiwKKyAgICAgICAgcjMsCisgICAgICAgIHI0
LAorICAgICAgICByNSwKKyAgICAgICAgcjYsCisgICAgICAgIHI3LAorICAgICAgICByOCwKKyAg
ICAgICAgcjksCisgICAgICAgIHIxMCwKKyAgICAgICAgcjExLAorICAgICAgICByMTIsCisgICAg
ICAgIHIxMywKKyAgICAgICAgcjE0LAorICAgICAgICByMTUsCisgICAgICAgIHIxNiwKKyAgICAg
ICAgcjE3LAorICAgICAgICByMTgsCisgICAgICAgIHIxOSwKKyAgICAgICAgcjIwLAorICAgICAg
ICByMjEsCisgICAgICAgIHIyMiwKKyAgICAgICAgcjIzLAorICAgICAgICByMjQsCisgICAgICAg
IHIyNSwKKyAgICAgICAgcjI2LAorICAgICAgICByMjcsCisgICAgICAgIHIyOCwKKyAgICAgICAg
cjI5LAorICAgICAgICByMzAsCisgICAgICAgIHIzMSwKKyAgICAgICAgemVybyA9IHIwLAorICAg
ICAgICBhdCA9IHIxLAorICAgICAgICB2MCA9IHIyLAorICAgICAgICB2MSA9IHIzLAorICAgICAg
ICBhMCA9IHI0LAorICAgICAgICBhMSA9IHI1LAorICAgICAgICBhMiA9IHI2LAorICAgICAgICBh
MyA9IHI3LAorICAgICAgICB0MCA9IHI4LAorICAgICAgICB0MSA9IHI5LAorICAgICAgICB0MiA9
IHIxMCwKKyAgICAgICAgdDMgPSByMTEsCisgICAgICAgIHQ0ID0gcjEyLAorICAgICAgICB0NSA9
IHIxMywKKyAgICAgICAgdDYgPSByMTQsCisgICAgICAgIHQ3ID0gcjE1LAorICAgICAgICBzMCA9
IHIxNiwKKyAgICAgICAgczEgPSByMTcsCisgICAgICAgIHMyID0gcjE4LAorICAgICAgICBzMyA9
IHIxOSwKKyAgICAgICAgczQgPSByMjAsCisgICAgICAgIHM1ID0gcjIxLAorICAgICAgICBzNiA9
IHIyMiwKKyAgICAgICAgczcgPSByMjMsCisgICAgICAgIHQ4ID0gcjI0LAorICAgICAgICB0OSA9
IHIyNSwKKyAgICAgICAgazAgPSByMjYsCisgICAgICAgIGsxID0gcjI3LAorICAgICAgICBncCA9
IHIyOCwKKyAgICAgICAgc3AgPSByMjksCisgICAgICAgIGZwID0gcjMwLAorICAgICAgICByYSA9
IHIzMQorICAgIH0gUmVnaXN0ZXJJRDsKKworICAgIHR5cGVkZWYgZW51bSB7CisgICAgICAgIGYw
LAorICAgICAgICBmMSwKKyAgICAgICAgZjIsCisgICAgICAgIGYzLAorICAgICAgICBmNCwKKyAg
ICAgICAgZjUsCisgICAgICAgIGY2LAorICAgICAgICBmNywKKyAgICAgICAgZjgsCisgICAgICAg
IGY5LAorICAgICAgICBmMTAsCisgICAgICAgIGYxMSwKKyAgICAgICAgZjEyLAorICAgICAgICBm
MTMsCisgICAgICAgIGYxNCwKKyAgICAgICAgZjE1LAorICAgICAgICBmMTYsCisgICAgICAgIGYx
NywKKyAgICAgICAgZjE4LAorICAgICAgICBmMTksCisgICAgICAgIGYyMCwKKyAgICAgICAgZjIx
LAorICAgICAgICBmMjIsCisgICAgICAgIGYyMywKKyAgICAgICAgZjI0LAorICAgICAgICBmMjUs
CisgICAgICAgIGYyNiwKKyAgICAgICAgZjI3LAorICAgICAgICBmMjgsCisgICAgICAgIGYyOSwK
KyAgICAgICAgZjMwLAorICAgICAgICBmMzEKKyAgICB9IEZQUmVnaXN0ZXJJRDsKKworfSAvLyBu
YW1lc3BhY2UgTUlQU1JlZ2lzdGVycworCitjbGFzcyBNSVBTQXNzZW1ibGVyIHsKK3B1YmxpYzoK
KyAgICB0eXBlZGVmIE1JUFNSZWdpc3RlcnM6OlJlZ2lzdGVySUQgUmVnaXN0ZXJJRDsKKyAgICB0
eXBlZGVmIE1JUFNSZWdpc3RlcnM6OkZQUmVnaXN0ZXJJRCBGUFJlZ2lzdGVySUQ7CisgICAgdHlw
ZWRlZiBTZWdtZW50ZWRWZWN0b3I8aW50LCA2ND4gSnVtcHM7CisKKyAgICBNSVBTQXNzZW1ibGVy
KCkKKyAgICB7CisgICAgfQorCisgICAgLy8gTUlQUyBpbnN0cnVjdGlvbiBvcGNvZGUgZmllbGQg
cG9zaXRpb24KKyAgICBlbnVtIHsKKyAgICAgICAgT1BfU0hfUkQgPSAxMSwKKyAgICAgICAgT1Bf
U0hfUlQgPSAxNiwKKyAgICAgICAgT1BfU0hfUlMgPSAyMSwKKyAgICAgICAgT1BfU0hfU0hBTVQg
PSA2LAorICAgICAgICBPUF9TSF9DT0RFID0gMTYsCisgICAgICAgIE9QX1NIX0ZEID0gNiwKKyAg
ICAgICAgT1BfU0hfRlMgPSAxMSwKKyAgICAgICAgT1BfU0hfRlQgPSAxNgorICAgIH07CisKKyAg
ICBjbGFzcyBKbXBTcmMgeworICAgICAgICBmcmllbmQgY2xhc3MgTUlQU0Fzc2VtYmxlcjsKKyAg
ICBwdWJsaWM6CisgICAgICAgIEptcFNyYygpCisgICAgICAgICAgICA6IG1fb2Zmc2V0KC0xKQor
ICAgICAgICB7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIEptcFNyYyhpbnQg
b2Zmc2V0KQorICAgICAgICAgICAgOiBtX29mZnNldChvZmZzZXQpCisgICAgICAgIHsKKyAgICAg
ICAgfQorCisgICAgICAgIGludCBtX29mZnNldDsKKyAgICB9OworCisgICAgY2xhc3MgSm1wRHN0
IHsKKyAgICAgICAgZnJpZW5kIGNsYXNzIE1JUFNBc3NlbWJsZXI7CisgICAgcHVibGljOgorICAg
ICAgICBKbXBEc3QoKQorICAgICAgICAgICAgOiBtX29mZnNldCgtMSkKKyAgICAgICAgICAgICwg
bV91c2VkKGZhbHNlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBib29sIGlzVXNl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlZDsgfQorICAgICAgICB2b2lkIHVzZWQoKSB7IG1fdXNl
ZCA9IHRydWU7IH0KKyAgICBwcml2YXRlOgorICAgICAgICBKbXBEc3QoaW50IG9mZnNldCkKKyAg
ICAgICAgICAgIDogbV9vZmZzZXQob2Zmc2V0KQorICAgICAgICAgICAgLCBtX3VzZWQoZmFsc2Up
CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChtX29mZnNldCA9PSBvZmZzZXQpOworICAg
ICAgICB9CisKKyAgICAgICAgaW50IG1fb2Zmc2V0IDogMzE7CisgICAgICAgIGludCBtX3VzZWQg
OiAxOworICAgIH07CisKKyAgICB2b2lkIGVtaXRJbnN0KE1JUFNXb3JkIG9wKQorICAgIHsKKyAg
ICAgICAgbV9idWZmZXIucHV0SW50KG9wKTsKKyAgICB9CisKKyAgICB2b2lkIG5vcCgpCisgICAg
eworICAgICAgICAvKiBub3AgKi8KKyAgICAgICAgZW1pdEluc3QoMHgwMDAwMDAwMCk7CisgICAg
fQorCisgICAgdm9pZCBtb3ZlKFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcnMpCisgICAgewor
I2lmIGRlZmluZWQoX0FCSU8zMikKKyAgICAgICAgLyogYWRkdSAqLworICAgICAgICBlbWl0SW5z
dCgweDAwMDAwMDIxIHwgKHJkIDw8IE9QX1NIX1JEKSB8IChycyA8PCBPUF9TSF9SUykpOworI2Vs
c2UKKyAgICAgICAgLyogZGFkZHUgKi8KKyAgICAgICAgZW1pdEluc3QoMHgwMDAwMDAyZCB8IChy
ZCA8PCBPUF9TSF9SRCkgfCAocnMgPDwgT1BfU0hfUlMpKTsKKyNlbmRpZgorICAgIH0KKworICAg
IHZvaWQgbGkoUmVnaXN0ZXJJRCBkZXN0LCBpbnQgaW1tLCBpbnQgZml4ZWQgPSAwKQorICAgIHsK
KyAgICAgICAgaWYgKGZpeGVkID09IDApIHsKKyAgICAgICAgICAgIGlmIChpbW0gPj0gLTMyNzY4
ICYmIGltbSA8PSAzMjc2NykKKyAgICAgICAgICAgICAgICBhZGRpdShkZXN0LCBNSVBTUmVnaXN0
ZXJzOjp6ZXJvLCBpbW0pOworICAgICAgICAgICAgZWxzZSBpZiAoaW1tID49IDAgJiYgaW1tIDwg
NjU1MzYpCisgICAgICAgICAgICAgICAgb3JpKGRlc3QsIE1JUFNSZWdpc3RlcnM6Onplcm8sIGlt
bSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKiBsdWkgKi8KKyAgICAg
ICAgICAgICAgICBsdWkoZGVzdCwgaW1tID4+IDE2KTsKKyAgICAgICAgICAgICAgICAvKiBvcmkg
Ki8KKyAgICAgICAgICAgICAgICBpZiAoaW1tICYgMHhmZmZmKQorICAgICAgICAgICAgICAgICAg
ICBvcmkoZGVzdCwgZGVzdCwgaW1tKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIGx1aShkZXN0LCBpbW0gPj4gMTYpOworICAgICAgICAgICAg
b3JpKGRlc3QsIGRlc3QsIGltbSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGx1aShS
ZWdpc3RlcklEIHJ0LCBpbnQgaW1tKQorICAgIHsKKyAgICAgICAgLyogbHVpICovCisgICAgICAg
IGVtaXRJbnN0KDB4M2MwMDAwMDAgfCAocnQgPDwgT1BfU0hfUlQpIHwgKGltbSAmIDB4ZmZmZikp
OworICAgIH0KKworICAgIHZvaWQgYWRkaXUoUmVnaXN0ZXJJRCBydCwgUmVnaXN0ZXJJRCBycywg
aW50IGltbSkKKyAgICB7CisgICAgICAgIC8qIGFkZGl1ICovCisgICAgICAgIGVtaXRJbnN0KDB4
MjQwMDAwMDAgfCAocnQgPDwgT1BfU0hfUlQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAg
ICAgICAgICB8IChpbW0gJiAweGZmZmYpKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZHUoUmVnaXN0
ZXJJRCByZCwgUmVnaXN0ZXJJRCBycywgUmVnaXN0ZXJJRCBydCkKKyAgICB7CisgICAgICAgIC8q
IGFkZHUgKi8KKyAgICAgICAgZW1pdEluc3QoMHgwMDAwMDAyMSB8IChyZCA8PCBPUF9TSF9SRCkg
fCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAgICAgICAgIHwgKHJ0IDw8IE9QX1NIX1JUKSk7
CisgICAgfQorCisgICAgdm9pZCBzdWJ1KFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcnMsIFJl
Z2lzdGVySUQgcnQpCisgICAgeworICAgICAgICAvKiBzdWJ1ICovCisgICAgICAgIGVtaXRJbnN0
KDB4MDAwMDAwMjMgfCAocmQgPDwgT1BfU0hfUkQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAg
ICAgICAgICAgICB8IChydCA8PCBPUF9TSF9SVCkpOworICAgIH0KKworICAgIHZvaWQgbXVsdChS
ZWdpc3RlcklEIHJzLCBSZWdpc3RlcklEIHJ0KQorICAgIHsKKyAgICAgICAgLyogbXVsdCAqLwor
ICAgICAgICBlbWl0SW5zdCgweDAwMDAwMDE4IHwgKHJzIDw8IE9QX1NIX1JTKSB8IChydCA8PCBP
UF9TSF9SVCkpOworICAgIH0KKworICAgIHZvaWQgbWZoaShSZWdpc3RlcklEIHJkKQorICAgIHsK
KyAgICAgICAgLyogbWZoaSAqLworICAgICAgICBlbWl0SW5zdCgweDAwMDAwMDEwIHwgKHJkIDw8
IE9QX1NIX1JEKSk7CisgICAgfQorCisgICAgdm9pZCBtZmxvKFJlZ2lzdGVySUQgcmQpCisgICAg
eworICAgICAgICAvKiBtZmxvICovCisgICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMTIgfCAocmQg
PDwgT1BfU0hfUkQpKTsKKyAgICB9CisKKyAgICB2b2lkIG11bChSZWdpc3RlcklEIHJkLCBSZWdp
c3RlcklEIHJzLCBSZWdpc3RlcklEIHJ0KQorICAgIHsKKyNpZiBfX21pcHMgPj0gMzIKKyAgICAg
ICAgLyogbXVsICovCisgICAgICAgIGVtaXRJbnN0KDB4NzAwMDAwMDIgfCAocmQgPDwgT1BfU0hf
UkQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChydCA8PCBPUF9TSF9S
VCkpOworI2Vsc2UKKyAgICAgICAgbXVsdChycywgcnQpOworICAgICAgICBtZmxvKHJkKTsKKyNl
bmRpZgorICAgIH0KKworICAgIHZvaWQgYW5kX2luc24oUmVnaXN0ZXJJRCByZCwgUmVnaXN0ZXJJ
RCBycywgUmVnaXN0ZXJJRCBydCkKKyAgICB7CisgICAgICAgIC8qIGFuZCAqLworICAgICAgICBl
bWl0SW5zdCgweDAwMDAwMDI0IHwgKHJkIDw8IE9QX1NIX1JEKSB8IChycyA8PCBPUF9TSF9SUykK
KyAgICAgICAgICAgICAgICAgfCAocnQgPDwgT1BfU0hfUlQpKTsKKyAgICB9CisKKyAgICB2b2lk
IGFuZGkoUmVnaXN0ZXJJRCBydCwgUmVnaXN0ZXJJRCBycywgaW50IGltbSkKKyAgICB7CisgICAg
ICAgIC8qIGFuZGkgKi8KKyAgICAgICAgZW1pdEluc3QoMHgzMDAwMDAwMCB8IChydCA8PCBPUF9T
SF9SVCkgfCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAgICAgICAgIHwgKGltbSAmIDB4ZmZm
ZikpOworICAgIH0KKworICAgIHZvaWQgbm9yKFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcnMs
IFJlZ2lzdGVySUQgcnQpCisgICAgeworICAgICAgICAvKiBub3IgKi8KKyAgICAgICAgZW1pdElu
c3QoMHgwMDAwMDAyNyB8IChyZCA8PCBPUF9TSF9SRCkgfCAocnMgPDwgT1BfU0hfUlMpCisgICAg
ICAgICAgICAgICAgIHwgKHJ0IDw8IE9QX1NIX1JUKSk7CisgICAgfQorCisgICAgdm9pZCBvcl9p
bnNuKFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcnMsIFJlZ2lzdGVySUQgcnQpCisgICAgewor
ICAgICAgICAvKiBvciAqLworICAgICAgICBlbWl0SW5zdCgweDAwMDAwMDI1IHwgKHJkIDw8IE9Q
X1NIX1JEKSB8IChycyA8PCBPUF9TSF9SUykKKyAgICAgICAgICAgICAgICAgfCAocnQgPDwgT1Bf
U0hfUlQpKTsKKyAgICB9CisKKyAgICB2b2lkIG9yaShSZWdpc3RlcklEIHJ0LCBSZWdpc3RlcklE
IHJzLCBpbnQgaW1tKQorICAgIHsKKyAgICAgICAgLyogb3JpICovCisgICAgICAgIGVtaXRJbnN0
KDB4MzQwMDAwMDAgfCAocnQgPDwgT1BfU0hfUlQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAg
ICAgICAgICAgICB8IChpbW0gJiAweGZmZmYpKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcl9pbnNu
KFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcnMsIFJlZ2lzdGVySUQgcnQpCisgICAgeworICAg
ICAgICAvKiB4b3IgKi8KKyAgICAgICAgZW1pdEluc3QoMHgwMDAwMDAyNiB8IChyZCA8PCBPUF9T
SF9SRCkgfCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAgICAgICAgIHwgKHJ0IDw8IE9QX1NI
X1JUKSk7CisgICAgfQorCisgICAgdm9pZCB4b3JpKFJlZ2lzdGVySUQgcnQsIFJlZ2lzdGVySUQg
cnMsIGludCBpbW0pCisgICAgeworICAgICAgICAvKiB4b3JpICovCisgICAgICAgIGVtaXRJbnN0
KDB4MzgwMDAwMDAgfCAocnQgPDwgT1BfU0hfUlQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAg
ICAgICAgICAgICB8IChpbW0gJiAweGZmZmYpKTsKKyAgICB9CisKKyAgICB2b2lkIHNsdChSZWdp
c3RlcklEIHJkLCBSZWdpc3RlcklEIHJzLCBSZWdpc3RlcklEIHJ0KQorICAgIHsKKyAgICAgICAg
Lyogc2x0ICovCisgICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMmEgfCAocmQgPDwgT1BfU0hfUkQp
IHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChydCA8PCBPUF9TSF9SVCkp
OworICAgIH0KKworICAgIHZvaWQgc2x0dShSZWdpc3RlcklEIHJkLCBSZWdpc3RlcklEIHJzLCBS
ZWdpc3RlcklEIHJ0KQorICAgIHsKKyAgICAgICAgLyogc2x0dSAqLworICAgICAgICBlbWl0SW5z
dCgweDAwMDAwMDJiIHwgKHJkIDw8IE9QX1NIX1JEKSB8IChycyA8PCBPUF9TSF9SUykKKyAgICAg
ICAgICAgICAgICAgfCAocnQgPDwgT1BfU0hfUlQpKTsKKyAgICB9CisKKyAgICB2b2lkIHNsdGl1
KFJlZ2lzdGVySUQgcnQsIFJlZ2lzdGVySUQgcnMsIGludCBpbW0pCisgICAgeworICAgICAgICAv
KiBzbHRpdSAqLworICAgICAgICBlbWl0SW5zdCgweDJjMDAwMDAwIHwgKHJ0IDw8IE9QX1NIX1JU
KSB8IChycyA8PCBPUF9TSF9SUykKKyAgICAgICAgICAgICAgICAgfCAoaW1tICYgMHhmZmZmKSk7
CisgICAgfQorCisgICAgdm9pZCBzbGwoUmVnaXN0ZXJJRCByZCwgUmVnaXN0ZXJJRCBydCwgaW50
IHNoYW10KQorICAgIHsKKyAgICAgICAgLyogc2xsICovCisgICAgICAgIGVtaXRJbnN0KDB4MDAw
MDAwMDAgfCAocmQgPDwgT1BfU0hfUkQpIHwgKHJ0IDw8IE9QX1NIX1JUKQorICAgICAgICAgICAg
ICAgICB8ICgoc2hhbXQgJiAweDFmKSA8PCBPUF9TSF9TSEFNVCkpOworICAgIH0KKworICAgIHZv
aWQgc2xsdihSZWdpc3RlcklEIHJkLCBSZWdpc3RlcklEIHJ0LCBpbnQgcnMpCisgICAgeworICAg
ICAgICAvKiBzbGx2ICovCisgICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMDQgfCAocmQgPDwgT1Bf
U0hfUkQpIHwgKHJ0IDw8IE9QX1NIX1JUKQorICAgICAgICAgICAgICAgICB8IChycyA8PCBPUF9T
SF9SUykpOworICAgIH0KKworICAgIHZvaWQgc3JhKFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQg
cnQsIGludCBzaGFtdCkKKyAgICB7CisgICAgICAgIC8qIHNyYSAqLworICAgICAgICBlbWl0SW5z
dCgweDAwMDAwMDAzIHwgKHJkIDw8IE9QX1NIX1JEKSB8IChydCA8PCBPUF9TSF9SVCkKKyAgICAg
ICAgICAgICAgICAgfCAoKHNoYW10ICYgMHgxZikgPDwgT1BfU0hfU0hBTVQpKTsKKyAgICB9CisK
KyAgICB2b2lkIHNyYXYoUmVnaXN0ZXJJRCByZCwgUmVnaXN0ZXJJRCBydCwgUmVnaXN0ZXJJRCBy
cykKKyAgICB7CisgICAgICAgIC8qIHNyYXYgKi8KKyAgICAgICAgZW1pdEluc3QoMHgwMDAwMDAw
NyB8IChyZCA8PCBPUF9TSF9SRCkgfCAocnQgPDwgT1BfU0hfUlQpCisgICAgICAgICAgICAgICAg
IHwgKHJzIDw8IE9QX1NIX1JTKSk7CisgICAgfQorCisgICAgdm9pZCBsdyhSZWdpc3RlcklEIHJ0
LCBSZWdpc3RlcklEIHJzLCBpbnQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgLyogbHcgKi8KKyAg
ICAgICAgZW1pdEluc3QoMHg4YzAwMDAwMCB8IChydCA8PCBPUF9TSF9SVCkgfCAocnMgPDwgT1Bf
U0hfUlMpCisgICAgICAgICAgICAgICAgIHwgKG9mZnNldCAmIDB4ZmZmZikpOworI2lmIF9fbWlw
cyA9PSAxCisgICAgICAgIG5vcCgpOworI2VuZGlmCisgICAgfQorCisgICAgdm9pZCBsaChSZWdp
c3RlcklEIHJ0LCBSZWdpc3RlcklEIHJzLCBpbnQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgLyog
bHcgKi8KKyAgICAgICAgZW1pdEluc3QoMHg4NDAwMDAwMCB8IChydCA8PCBPUF9TSF9SVCkgfCAo
cnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAgICAgICAgIHwgKG9mZnNldCAmIDB4ZmZmZikpOwor
I2lmIF9fbWlwcyA9PSAxCisgICAgICAgIG5vcCgpOworI2VuZGlmCisgICAgfQorCisgICAgdm9p
ZCBzdyhSZWdpc3RlcklEIHJ0LCBSZWdpc3RlcklEIHJzLCBpbnQgb2Zmc2V0KQorICAgIHsKKyAg
ICAgICAgLyogc3cgKi8KKyAgICAgICAgZW1pdEluc3QoMHhhYzAwMDAwMCB8IChydCA8PCBPUF9T
SF9SVCkgfCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAgICAgICAgIHwgKG9mZnNldCAmIDB4
ZmZmZikpOworICAgIH0KKworICAgIHZvaWQgam1wX3JlZ2lzdGVyKFJlZ2lzdGVySUQgcnMpCisg
ICAgeworICAgICAgICAvKiBqciAqLworICAgICAgICBlbWl0SW5zdCgweDAwMDAwMDA4IHwgKHJz
IDw8IE9QX1NIX1JTKSk7CisgICAgICAgIC8qIG5vcCAqLworICAgICAgICBub3AoKTsKKyAgICB9
CisKKyAgICB2b2lkIGJrcHQoKQorICAgIHsKKyAgICAgICAgLyogYnJlYWsgKi8KKyAgICAgICAg
aW50IHZhbHVlID0gNTEyOyAvKiBCUktfQlVHICovCisgICAgICAgIGVtaXRJbnN0KDB4MDAwMDAw
MGQgfCAoKHZhbHVlICYgMHgzZmYpIDw8IE9QX1NIX0NPREUpKTsKKyAgICB9CisKKyAgICAvKiBO
b3RlOiBXZSBkb24ndCBwdXQgYSBub3AgYWZ0ZXIgYmdleiBhcyBhbiBvcHRpbWl6YXRpb24uCisg
ICAgICAgICAgICAgVGhlIGRlbGF5IHNsb3Qgd2lsbCBiZSBmaWxsZWQgbGF0ZXIuICAqLworICAg
IHZvaWQgYmdleihSZWdpc3RlcklEIHJzLCBpbnQgaW1tKQorICAgIHsKKyAgICAgICAgLyogYmdl
eiAqLworICAgICAgICBlbWl0SW5zdCgweDA0MDEwMDAwIHwgKHJzIDw8IE9QX1NIX1JTKSB8IChp
bW0gJiAweGZmZmYpKTsKKyAgICB9CisKKyAgICAvKiBOb3RlOiBXZSBkb24ndCBwdXQgYSBub3Ag
YWZ0ZXIgYmx0eiBhcyBhbiBvcHRpbWl6YXRpb24uCisgICAgICAgICAgICAgVGhlIGRlbGF5IHNs
b3Qgd2lsbCBiZSBmaWxsZWQgbGF0ZXIuICAqLworICAgIHZvaWQgYmx0eihSZWdpc3RlcklEIHJz
LCBpbnQgaW1tKQorICAgIHsKKyAgICAgICAgLyogYmx0eiAqLworICAgICAgICBlbWl0SW5zdCgw
eDA0MDAwMDAwIHwgKHJzIDw8IE9QX1NIX1JTKSB8IChpbW0gJiAweGZmZmYpKTsKKyAgICB9CisK
KyAgICAvKiBOb3RlOiBXZSBkb24ndCBwdXQgYSBub3AgYWZ0ZXIgYmVxeiBhcyBhbiBvcHRpbWl6
YXRpb24uCisgICAgICAgICAgICAgVGhlIGRlbGF5IHNsb3Qgd2lsbCBiZSBmaWxsZWQgbGF0ZXIu
ICAqLworICAgIHZvaWQgYmVxKFJlZ2lzdGVySUQgcnMsIFJlZ2lzdGVySUQgcnQsIGludCBpbW0p
CisgICAgeworICAgICAgICAvKiBiZXEgKi8KKyAgICAgICAgZW1pdEluc3QoMHgxMDAwMDAwMCB8
IChycyA8PCBPUF9TSF9SUykgfCAocnQgPDwgT1BfU0hfUlQpIHwgKGltbSAmIDB4ZmZmZikpOwor
ICAgIH0KKworICAgIEptcFNyYyBqbXAoKQorICAgIHsKKyAgICAgICAgbV9qdW1wcy5hcHBlbmQo
bV9idWZmZXIuc2l6ZSgpKTsKKworICAgICAgICAvKiBiZXEgJDAsICQwICovCisgICAgICAgIGVt
aXRJbnN0KDB4MTAwMDAwMDApOworICAgICAgICBub3AoKTsKKyAgICAgICAgLyogV2UgbmVlZCB0
d28gZXh0cmEgbm9wcyBmb3IgcmVsYXhhdGlvbi4gICovCisgICAgICAgIG5vcCgpOworICAgICAg
ICBub3AoKTsKKyAgICAgICAgcmV0dXJuIEptcFNyYyhtX2J1ZmZlci5zaXplKCkpOworICAgIH0K
KworICAgIEptcFNyYyBicmFuY2hfZXEoUmVnaXN0ZXJJRCBycywgUmVnaXN0ZXJJRCBydCkKKyAg
ICB7CisgICAgICAgIG1fanVtcHMuYXBwZW5kKG1fYnVmZmVyLnNpemUoKSk7CisKKyAgICAgICAg
LyogYmVxICovCisgICAgICAgIGVtaXRJbnN0KDB4MTAwMDAwMDAgfCAocnMgPDwgT1BfU0hfUlMp
IHwgKHJ0IDw8IE9QX1NIX1JUKSk7CisgICAgICAgIG5vcCgpOworICAgICAgICAvKiBXZSBuZWVk
IHR3byBleHRyYSBub3BzIGZvciByZWxheGF0aW9uLiAgKi8KKyAgICAgICAgbm9wKCk7CisgICAg
ICAgIG5vcCgpOworICAgICAgICByZXR1cm4gSm1wU3JjKG1fYnVmZmVyLnNpemUoKSk7CisgICAg
fQorCisgICAgSm1wU3JjIGJyYW5jaF9uZShSZWdpc3RlcklEIHJzLCBSZWdpc3RlcklEIHJ0KQor
ICAgIHsKKyAgICAgICAgbV9qdW1wcy5hcHBlbmQobV9idWZmZXIuc2l6ZSgpKTsKKworICAgICAg
ICAvKiBibmUgKi8KKyAgICAgICAgZW1pdEluc3QoMHgxNDAwMDAwMCB8IChycyA8PCBPUF9TSF9S
UykgfCAocnQgPDwgT1BfU0hfUlQpKTsKKyAgICAgICAgbm9wKCk7CisgICAgICAgIC8qIFdlIG5l
ZWQgdHdvIGV4dHJhIG5vcHMgZm9yIHJlbGF4YXRpb24uICAqLworICAgICAgICBub3AoKTsKKyAg
ICAgICAgbm9wKCk7CisgICAgICAgIHJldHVybiBKbXBTcmMobV9idWZmZXIuc2l6ZSgpKTsKKyAg
ICB9CisKKyAgICB2b2lkIGFkZF9kKEZQUmVnaXN0ZXJJRCBmZCwgRlBSZWdpc3RlcklEIGZzLCBG
UFJlZ2lzdGVySUQgZnQpCisgICAgeworICAgICAgICAvKiBhZGQuZCAqLworICAgICAgICBlbWl0
SW5zdCgweDQ2MjAwMDAwIHwgKGZkIDw8IE9QX1NIX0ZEKSB8IChmcyA8PCBPUF9TSF9GUykKKyAg
ICAgICAgICAgICAgICAgfCAoZnQgPDwgT1BfU0hfRlQpKTsKKyAgICB9CisKKyAgICB2b2lkIHN1
Yl9kKEZQUmVnaXN0ZXJJRCBmZCwgRlBSZWdpc3RlcklEIGZzLCBGUFJlZ2lzdGVySUQgZnQpCisg
ICAgeworICAgICAgICAvKiBzdWIuZCAqLworICAgICAgICBlbWl0SW5zdCgweDQ2MjAwMDAxIHwg
KGZkIDw8IE9QX1NIX0ZEKSB8IChmcyA8PCBPUF9TSF9GUykKKyAgICAgICAgICAgICAgICAgfCAo
ZnQgPDwgT1BfU0hfRlQpKTsKKyAgICB9CisKKyAgICB2b2lkIG11bF9kKEZQUmVnaXN0ZXJJRCBm
ZCwgRlBSZWdpc3RlcklEIGZzLCBGUFJlZ2lzdGVySUQgZnQpCisgICAgeworICAgICAgICAvKiBt
dWwuZCAqLworICAgICAgICBlbWl0SW5zdCgweDQ2MjAwMDAyIHwgKGZkIDw8IE9QX1NIX0ZEKSB8
IChmcyA8PCBPUF9TSF9GUykKKyAgICAgICAgICAgICAgICAgfCAoZnQgPDwgT1BfU0hfRlQpKTsK
KyAgICB9CisKKyAgICB2b2lkIGx3YzEoRlBSZWdpc3RlcklEIGZ0LCBSZWdpc3RlcklEIHJzLCBp
bnQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgLyogbHdjMSAqLworICAgICAgICBlbWl0SW5zdCgw
eGM0MDAwMDAwIHwgKGZ0IDw8IE9QX1NIX0ZUKSB8IChycyA8PCBPUF9TSF9SUykKKyAgICAgICAg
ICAgICAgICAgfCAob2Zmc2V0ICYgMHhmZmZmKSk7CisjaWYgX19taXBzID09IDEKKyAgICAgICAg
bm9wKCk7CisjZW5kaWYKKyAgICB9CisKKyAgICB2b2lkIGxkYzEoRlBSZWdpc3RlcklEIGZ0LCBS
ZWdpc3RlcklEIHJzLCBpbnQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgLyogbGRjMSAqLworICAg
ICAgICBlbWl0SW5zdCgweGQ0MDAwMDAwIHwgKGZ0IDw8IE9QX1NIX0ZUKSB8IChycyA8PCBPUF9T
SF9SUykKKyAgICAgICAgICAgICAgICAgfCAob2Zmc2V0ICYgMHhmZmZmKSk7CisgICAgfQorCisg
ICAgdm9pZCBzd2MxKEZQUmVnaXN0ZXJJRCBmdCwgUmVnaXN0ZXJJRCBycywgaW50IG9mZnNldCkK
KyAgICB7CisgICAgICAgIC8qIHN3YzEgKi8KKyAgICAgICAgZW1pdEluc3QoMHhlNDAwMDAwMCB8
IChmdCA8PCBPUF9TSF9GVCkgfCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAgICAgICAgIHwg
KG9mZnNldCAmIDB4ZmZmZikpOworICAgIH0KKworICAgIHZvaWQgc2RjMShGUFJlZ2lzdGVySUQg
ZnQsIFJlZ2lzdGVySUQgcnMsIGludCBvZmZzZXQpCisgICAgeworICAgICAgICAvKiBzZGMxICov
CisgICAgICAgIGVtaXRJbnN0KDB4ZjQwMDAwMDAgfCAoZnQgPDwgT1BfU0hfRlQpIHwgKHJzIDw8
IE9QX1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChvZmZzZXQgJiAweGZmZmYpKTsKKyAgICB9
CisKKyAgICB2b2lkIG10YzEoUmVnaXN0ZXJJRCBydCwgRlBSZWdpc3RlcklEIGZzKQorICAgIHsK
KyAgICAgICAgLyogbXRjMSAqLworICAgICAgICBlbWl0SW5zdCgweDQ0ODAwMDAwIHwgKGZzIDw8
IE9QX1NIX0ZTKSB8IChydCA8PCBPUF9TSF9SVCkpOworI2lmIF9fbWlwcyA9PSAxCisgICAgICAg
IG5vcCgpOworI2VuZGlmCisgICAgfQorCisgICAgdm9pZCBtZmMxKFJlZ2lzdGVySUQgcnQsIEZQ
UmVnaXN0ZXJJRCBmcykKKyAgICB7CisgICAgICAgIC8qIG1mYzEgKi8KKyAgICAgICAgZW1pdElu
c3QoMHg0NDAwMDAwMCB8IChmcyA8PCBPUF9TSF9GUykgfCAocnQgPDwgT1BfU0hfUlQpKTsKKyNp
ZiBfX21pcHMgPT0gMQorICAgICAgICBub3AoKTsKKyNlbmRpZgorICAgIH0KKworICAgIHZvaWQg
dHJ1bmNfd19kKEZQUmVnaXN0ZXJJRCBmZCwgRlBSZWdpc3RlcklEIGZzKQorICAgIHsKKyAgICAg
ICAgLyogdHJ1bmMudy5kICovCisgICAgICAgIGVtaXRJbnN0KDB4NDYyMDAwMGQgfCAoZmQgPDwg
T1BfU0hfRkQpIHwgKGZzIDw8IE9QX1NIX0ZTKSk7CisgICAgfQorCisgICAgdm9pZCBjdnRfZF93
KEZQUmVnaXN0ZXJJRCBmZCwgRlBSZWdpc3RlcklEIGZzKQorICAgIHsKKyAgICAgICAgLyogY3Z0
LmQudyAqLworICAgICAgICBlbWl0SW5zdCgweDQ2ODAwMDIxIHwgKGZkIDw8IE9QX1NIX0ZEKSB8
IChmcyA8PCBPUF9TSF9GUykpOworICAgIH0KKworICAgIHZvaWQgY19lcV9kKEZQUmVnaXN0ZXJJ
RCBmcywgRlBSZWdpc3RlcklEIGZ0KQorICAgIHsKKyAgICAgICAgLyogYy5lcS5kICovCisgICAg
ICAgIGVtaXRJbnN0KDB4NDYyMDAwMzIgfCAoZnMgPDwgT1BfU0hfRlMpIHwgKGZ0IDw8IE9QX1NI
X0ZUKSk7CisjaWYgX19taXBzID09IDEKKyAgICAgICAgbm9wKCk7CisjZW5kaWYKKyAgICB9CisK
KyAgICB2b2lkIGNfbHRfZChGUFJlZ2lzdGVySUQgZnMsIEZQUmVnaXN0ZXJJRCBmdCkKKyAgICB7
CisgICAgICAgIC8qIGMubHQuZCAqLworICAgICAgICBlbWl0SW5zdCgweDQ2MjAwMDNjIHwgKGZz
IDw8IE9QX1NIX0ZTKSB8IChmdCA8PCBPUF9TSF9GVCkpOworI2lmIF9fbWlwcyA9PSAxCisgICAg
ICAgIG5vcCgpOworI2VuZGlmCisgICAgfQorCisgICAgdm9pZCBjX2xlX2QoRlBSZWdpc3RlcklE
IGZzLCBGUFJlZ2lzdGVySUQgZnQpCisgICAgeworICAgICAgICAvKiBjLmx0LmQgKi8KKyAgICAg
ICAgZW1pdEluc3QoMHg0NjIwMDAzZSB8IChmcyA8PCBPUF9TSF9GUykgfCAoZnQgPDwgT1BfU0hf
RlQpKTsKKyNpZiBfX21pcHMgPT0gMQorICAgICAgICBub3AoKTsKKyNlbmRpZgorICAgIH0KKwor
ICAgIEptcFNyYyBiYzF0KCkKKyAgICB7CisgICAgICAgIC8qIGJjMXQgKi8KKyAgICAgICAgZW1p
dEluc3QoMHg0NTAxMDAwMCk7CisgICAgICAgIG5vcCgpOworICAgICAgICAvKiBXZSBuZWVkIHR3
byBleHRyYSBub3BzIGZvciByZWxheGF0aW9uLiAgKi8KKyAgICAgICAgbm9wKCk7CisgICAgICAg
IG5vcCgpOworICAgICAgICByZXR1cm4gSm1wU3JjKG1fYnVmZmVyLnNpemUoKSk7CisgICAgfQor
CisgICAgSm1wU3JjIGZhcl9mdW5jdGlvbl9jYWxsKCkKKyAgICB7CisgICAgICAgIGx1aShNSVBT
UmVnaXN0ZXJzOjp0OSwgMCk7CisgICAgICAgIG9yaShNSVBTUmVnaXN0ZXJzOjp0OSwgTUlQU1Jl
Z2lzdGVyczo6dDksIDApOworICAgICAgICAvKiBqYWxyICovCisgICAgICAgIGVtaXRJbnN0KDB4
MDAwMGY4MDkgfCAoTUlQU1JlZ2lzdGVyczo6dDkgPDwgT1BfU0hfUlMpKTsKKyAgICAgICAgbm9w
KCk7CisgICAgICAgIHJldHVybiBKbXBTcmMobV9idWZmZXIuc2l6ZSgpKTsKKyAgICB9CisKKyAg
ICBKbXBTcmMgZnVuY3Rpb25fY2FsbCgpCisgICAgeworICAgICAgICAvKiBqYWwgKi8KKyAgICAg
ICAgZW1pdEluc3QoMHgwYzAwMDAwMCk7CisgICAgICAgIG5vcCgpOworICAgICAgICByZXR1cm4g
Sm1wU3JjKG1fYnVmZmVyLnNpemUoKSk7CisgICAgfQorCisgICAgSm1wU3JjIGZ1bmN0aW9uX2Nh
bGxfdmlhX3JlZ2lzdGVyKFJlZ2lzdGVySUQgcnMpCisgICAgeworICAgICAgICAvKiBqYWxyICov
CisgICAgICAgIGVtaXRJbnN0KDB4MDAwMGY4MDkgfCAocnMgPDwgT1BfU0hfUlMpKTsKKyAgICAg
ICAgbm9wKCk7CisgICAgICAgIHJldHVybiBKbXBTcmMobV9idWZmZXIuc2l6ZSgpKTsKKyAgICB9
CisKKyAgICBKbXBTcmMgdGFpbF9mdW5jdGlvbl9jYWxsX3ZpYV9yZWdpc3RlcihSZWdpc3RlcklE
IHJzKQorICAgIHsKKyAgICAgICAgLyoganIgKi8KKyAgICAgICAgZW1pdEluc3QoMHgwMDAwMDAw
OCB8IChycyA8PCBPUF9TSF9SUykpOworICAgICAgICBub3AoKTsKKyAgICAgICAgcmV0dXJuIEpt
cFNyYyhtX2J1ZmZlci5zaXplKCkpOworICAgIH0KKworICAgIC8vIEdlbmVyYWwgaGVscGVycwor
CisgICAgSm1wRHN0IGxhYmVsKCkKKyAgICB7CisgICAgICAgIHJldHVybiBKbXBEc3QobV9idWZm
ZXIuc2l6ZSgpKTsKKyAgICB9CisKKyAgICBKbXBEc3QgYWxpZ24oaW50IGFsaWdubWVudCkKKyAg
ICB7CisgICAgICAgIHdoaWxlICghbV9idWZmZXIuaXNBbGlnbmVkKGFsaWdubWVudCkpCisgICAg
ICAgICAgICBia3B0KCk7CisKKyAgICAgICAgcmV0dXJuIGxhYmVsKCk7CisgICAgfQorCisgICAg
c3RhdGljIHZvaWQqIGdldFJlbG9jYXRlZEFkZHJlc3Modm9pZCogY29kZSwgSm1wU3JjIGp1bXAp
CisgICAgeworICAgICAgICBBU1NFUlQoanVtcC5tX29mZnNldCAhPSAtMSk7CisgICAgICAgIHZv
aWQgKmIgPSByZWludGVycHJldF9jYXN0PHZvaWQqPigocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJf
dD4oY29kZSkpICsganVtcC5tX29mZnNldCk7CisgICAgICAgIHJldHVybiBiOworICAgIH0KKwor
ICAgIHN0YXRpYyB2b2lkKiBnZXRSZWxvY2F0ZWRBZGRyZXNzKHZvaWQqIGNvZGUsIEptcERzdCBs
YWJlbCkKKyAgICB7CisgICAgICAgIHZvaWQgKmIgPSByZWludGVycHJldF9jYXN0PHZvaWQqPigo
cmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oY29kZSkpICsgbGFiZWwubV9vZmZzZXQpOworICAg
ICAgICByZXR1cm4gYjsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGdldERpZmZlcmVuY2VCZXR3
ZWVuTGFiZWxzKEptcERzdCBmcm9tLCBKbXBEc3QgdG8pCisgICAgeworICAgICAgICByZXR1cm4g
dG8ubV9vZmZzZXQgLSBmcm9tLm1fb2Zmc2V0OworICAgIH0KKworICAgIHN0YXRpYyBpbnQgZ2V0
RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMoSm1wRHN0IGZyb20sIEptcFNyYyB0bykKKyAgICB7Cisg
ICAgICAgIHJldHVybiB0by5tX29mZnNldCAtIGZyb20ubV9vZmZzZXQ7CisgICAgfQorCisgICAg
c3RhdGljIGludCBnZXREaWZmZXJlbmNlQmV0d2VlbkxhYmVscyhKbXBTcmMgZnJvbSwgSm1wRHN0
IHRvKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvLm1fb2Zmc2V0IC0gZnJvbS5tX29mZnNldDsK
KyAgICB9CisKKyAgICAvLyBBc3NlbWJsZXIgYWRtaW4gbWV0aG9kczoKKworICAgIHNpemVfdCBz
aXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2J1ZmZlci5zaXplKCk7CisgICAg
fQorCisgICAgdm9pZCogZXhlY3V0YWJsZUNvcHkoRXhlY3V0YWJsZVBvb2wqIGFsbG9jYXRvcikK
KyAgICB7CisgICAgICAgIGludCBzaXplID0gbV9idWZmZXIuc2l6ZSgpOworICAgICAgICBpZiAo
IXNpemUpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICB2b2lkKiByZXN1bHQgPSBh
bGxvY2F0b3ItPmFsbG9jKHNpemUpOworICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAg
IHJldHVybiAwOworCisgICAgICAgIC8vIENoZWNrIGVhY2gganVtcAorICAgICAgICBmb3IoSnVt
cHM6Okl0ZXJhdG9yIGl0ZXIgPSBtX2p1bXBzLmJlZ2luKCk7IGl0ZXIgIT0gbV9qdW1wcy5lbmQo
KTsgKytpdGVyKSB7CisgICAgICAgICAgICBpbnQgcG9zID0gKCppdGVyKTsKKyAgICAgICAgICAg
IE1JUFNXb3JkICppbnNuID0gcmVpbnRlcnByZXRfY2FzdDxNSVBTV29yZCo+KHJlaW50ZXJwcmV0
X2Nhc3Q8aW50cHRyX3Q+KG1fYnVmZmVyLmRhdGEoKSkgKyBwb3MpOworICAgICAgICAgICAgaW5z
biA9IGluc24gKyAyOworICAgICAgICAgICAgaWYoKCgqaW5zbikgJiAweGZjMDAwMDAwKSA9PSAw
eDA4MDAwMDAwKSB7CisgICAgICAgICAgICAgICAgaW50IG9mZnNldCA9ICgqaW5zbikgJiAweDAz
ZmZmZmZmOworICAgICAgICAgICAgICAgIGludCBvbGRfaW5zbl9hZGRyZXNzID0gKGludClpbnNu
OworICAgICAgICAgICAgICAgIGludCB0b3BfZm91cl9iaXRzID0gKG9sZF9pbnNuX2FkZHJlc3Mg
KyA0KSA+PiAyODsKKyAgICAgICAgICAgICAgICBpbnQgb2xkX3RhcmdldF9hZGRyZXNzID0gKHRv
cF9mb3VyX2JpdHMgPDwgMjgpIHwgKG9mZnNldCA8PCAyKTsKKyAgICAgICAgICAgICAgICBpbnQg
b2xkX2Jhc2UgPSAoaW50KW1fYnVmZmVyLmRhdGEoKTsKKyAgICAgICAgICAgICAgICBpbnQgbmV3
X2Jhc2UgPSAoaW50KXJlc3VsdDsKKyAgICAgICAgICAgICAgICBpbnQgbmV3X3RhcmdldF9hZGRy
ZXNzID0gb2xkX3RhcmdldF9hZGRyZXNzIC0gb2xkX2Jhc2UgKyBuZXdfYmFzZTsKKyAgICAgICAg
ICAgICAgICBpbnQgbmV3X2luc25fYWRkcmVzcyA9IG9sZF9pbnNuX2FkZHJlc3MgLSBvbGRfYmFz
ZSArIG5ld19iYXNlOworICAgICAgICAgICAgICAgIGlmICgoKG5ld19pbnNuX2FkZHJlc3MgKyA0
KSA+PiAyOCkgIT0gKG5ld190YXJnZXRfYWRkcmVzcyA+PiAyOCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgZnByaW50ZiAoc3RkZXJyLCAiRXJyb3I6IENhbm5vdCBjcmVhdGUgTUlQUyBqdW1wIChK
KSBkdWUgdG8gdGhlIHRvcCBmb3VyIGJpdHMgYXJlIGRpZmZlcmVudC5cbiIpOworICAgICAgICAg
ICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAq
aW5zbiA9IDB4MDgwMDAwMDAgfCAoKG5ld190YXJnZXRfYWRkcmVzcyA+PiAyKSAmIDB4M2ZmZmZm
Zik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBFeGVjdXRhYmxlQWxsb2Nh
dG9yOjptYWtlV3JpdGFibGUocmVzdWx0LCBzaXplKTsKKyAgICAgICAgcmV0dXJuIG1lbWNweShy
ZXN1bHQsIG1fYnVmZmVyLmRhdGEoKSwgbV9idWZmZXIuc2l6ZSgpKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgdW5zaWduZWQgZ2V0Q2FsbFJldHVybk9mZnNldChKbXBTcmMgY2FsbCkKKyAgICB7Cisg
ICAgICAgIC8vIFRoZSByZXR1cm4gYWRkcmVzcyBpcyBhZnRlciBhIGNhbGwgYW5kIGEgZGVsYXkg
c2xvdCBpbnN0cnVjdGlvbgorICAgICAgICByZXR1cm4gY2FsbC5tX29mZnNldDsKKyAgICB9CisK
KyAgICAvLyBMaW5raW5nICYgcGF0Y2hpbmc6CisgICAgLy8KKyAgICAvLyAnbGluaycgYW5kICdw
YXRjaCcgbWV0aG9kcyBhcmUgZm9yIHVzZSBvbiB1bnByb3RlY3RlZCBjb2RlIC0gc3VjaCBhcyB0
aGUgY29kZQorICAgIC8vIHdpdGhpbiB0aGUgQXNzZW1ibGVyQnVmZmVyLCBhbmQgY29kZSBiZWlu
ZyBwYXRjaGVkIGJ5IHRoZSBwYXRjaCBidWZmZXIuICBPbmNlCisgICAgLy8gY29kZSBoYXMgYmVl
biBmaW5hbGl6ZWQgaXQgaXMgKHBsYXRmb3JtIHN1cHBvcnQgcGVybWl0dGluZykgd2l0aGluIGEg
bm9uLQorICAgIC8vIHdyaXRhYmxlIHJlZ2lvbiBvZiBtZW1vcnk7IHRvIG1vZGlmeSB0aGUgY29k
ZSBpbiBhbiBleGVjdXRlLW9ubHkgZXhlY3VhYmxlCisgICAgLy8gcG9vbCB0aGUgJ3JlcGF0Y2gn
IGFuZCAncmVsaW5rJyBtZXRob2RzIHNob3VsZCBiZSB1c2VkLgorCisgICAgdm9pZCBsaW5rSnVt
cChKbXBTcmMgZnJvbSwgSm1wRHN0IHRvKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHRvLm1fb2Zm
c2V0ICE9IC0xKTsKKyAgICAgICAgQVNTRVJUKGZyb20ubV9vZmZzZXQgIT0gLTEpOworICAgICAg
ICBNSVBTV29yZCAqaW5zbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8TUlQU1dvcmQqPihyZWludGVycHJl
dF9jYXN0PGludHB0cl90PihtX2J1ZmZlci5kYXRhKCkpICsgZnJvbS5tX29mZnNldCk7CisgICAg
ICAgIE1JUFNXb3JkICp0b19wb3MgPSByZWludGVycHJldF9jYXN0PE1JUFNXb3JkKj4ocmVpbnRl
cnByZXRfY2FzdDxpbnRwdHJfdD4obV9idWZmZXIuZGF0YSgpKSArIHRvLm1fb2Zmc2V0KTsKKwor
ICAgICAgICBBU1NFUlQgKCgqKGluc24gLSAxKSkgPT0gMCAmJiAoKCooaW5zbiAtIDIpKSA9PSAw
IHx8ICgoKihpbnNuIC0gMikpICYgMHhmYzAwMDAwMCkgPT0gMHgwODAwMDAwMCkgJiYgKCooaW5z
biAtIDMpKSA9PSAwKTsKKyAgICAgICAgaW5zbiA9IGluc24gLSA0OworICAgICAgICBsaW5rV2l0
aE9mZnNldChpbnNuLCB0b19wb3MpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGxpbmtKdW1w
KHZvaWQqIGNvZGUsIEptcFNyYyBmcm9tLCB2b2lkKiB0bykKKyAgICB7CisgICAgICAgIEFTU0VS
VChmcm9tLm1fb2Zmc2V0ICE9IC0xKTsKKyAgICAgICAgTUlQU1dvcmQgKmluc24gPSByZWludGVy
cHJldF9jYXN0PE1JUFNXb3JkKj4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oY29kZSkgKyBm
cm9tLm1fb2Zmc2V0KTsKKworICAgICAgICBBU1NFUlQgKCgqKGluc24gLSAxKSkgPT0gMCAmJiAo
KCooaW5zbiAtIDIpKSA9PSAwIHx8ICgoKihpbnNuIC0gMikpICYgMHhmYzAwMDAwMCkgPT0gMHgw
ODAwMDAwMCkgJiYgKCooaW5zbiAtIDMpKSA9PSAwKTsKKyAgICAgICAgaW5zbiA9IGluc24gLSA0
OworICAgICAgICBsaW5rV2l0aE9mZnNldChpbnNuLCB0byk7CisgICAgfQorCisgICAgc3RhdGlj
IHZvaWQgbGlua0NhbGwodm9pZCogY29kZSwgSm1wU3JjIGZyb20sIHZvaWQqIHRvKQorICAgIHsK
KyAgICAgICAgTUlQU1dvcmQgKmluc24gPSByZWludGVycHJldF9jYXN0PE1JUFNXb3JkKj4ocmVp
bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oY29kZSkgKyBmcm9tLm1fb2Zmc2V0KTsKKyAgICAgICAg
bGlua0NhbGxJbnRlcm5hbChpbnNuLCB0byk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgbGlu
a1BvaW50ZXIodm9pZCogY29kZSwgSm1wRHN0IGZyb20sIHZvaWQqIHRvKQorICAgIHsKKyAgICAg
ICAgTUlQU1dvcmQgKmluc24gPSByZWludGVycHJldF9jYXN0PE1JUFNXb3JkKj4ocmVpbnRlcnBy
ZXRfY2FzdDxpbnRwdHJfdD4oY29kZSkgKyBmcm9tLm1fb2Zmc2V0KTsKKyAgICAgICAgQVNTRVJU
KCgoKmluc24pICYgMHhmZmUwMDAwMCkgPT0gMHgzYzAwMDAwMCk7IC8vIGx1aQorICAgICAgICAq
aW5zbiA9ICgoKmluc24pICYgMHhmZmZmMDAwMCkgfCAoKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRy
X3Q+KHRvKSA+PiAxNikgJiAweGZmZmYpOworICAgICAgICBpbnNuKys7CisgICAgICAgIEFTU0VS
VCgoKCppbnNuKSAmIDB4ZmMwMDAwMDApID09IDB4MzQwMDAwMDApOyAvLyBvcmkKKyAgICAgICAg
Kmluc24gPSAoKCppbnNuKSAmIDB4ZmZmZjAwMDApIHwgKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRy
X3Q+KHRvKSAmIDB4ZmZmZik7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVsaW5rSnVtcCh2
b2lkKiBmcm9tLCB2b2lkKiB0bykKKyAgICB7CisgICAgICAgIE1JUFNXb3JkICppbnNuID0gcmVp
bnRlcnByZXRfY2FzdDxNSVBTV29yZCo+KGZyb20pOworCisgICAgICAgIEFTU0VSVCAoKCooaW5z
biAtIDEpKSA9PSAwICYmICgoKihpbnNuIC0gMikpID09IDAgfHwgKCgqKGluc24gLSAyKSkgJiAw
eGZjMDAwMDAwKSA9PSAweDA4MDAwMDAwKSAmJiAoKihpbnNuIC0gMykpID09IDAgKTsKKyAgICAg
ICAgaW5zbiA9IGluc24gLSA0OworICAgICAgICBpbnQgZmx1c2hfc2l6ZSA9IGxpbmtXaXRoT2Zm
c2V0KGluc24sIHRvKTsKKworICAgICAgICBFeGVjdXRhYmxlQWxsb2NhdG9yOjpjYWNoZUZsdXNo
KGluc24sIGZsdXNoX3NpemUpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHJlbGlua0NhbGwo
dm9pZCogZnJvbSwgdm9pZCogdG8pCisgICAgeworICAgICAgICB2b2lkICpzdGFydCA9IGxpbmtD
YWxsSW50ZXJuYWwoZnJvbSwgdG8pOworICAgICAgICBpbnQgc2l6ZSA9IHNpemVvZihNSVBTV29y
ZCk7CisgICAgICAgIGludCBkaWZmID0gKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGZyb20p
CisgICAgICAgICAgICAgICAgICAgIC0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oc3RhcnQp
KTsKKyAgICAgICAgaWYgKGRpZmYgPT0gMTYpIC8vIFdlIG1vZGlmeSB0d28gaW5zdHJ1Y3Rpb25z
IGx1aSArIG9yaS4KKyAgICAgICAgICBzaXplID0gMiAqIHNpemVvZihNSVBTV29yZCk7CisKKyAg
ICAgICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6Y2FjaGVGbHVzaChzdGFydCwgc2l6ZSk7CisgICAg
fQorCisgICAgc3RhdGljIHZvaWQgcmVwYXRjaEludDMyKHZvaWQqIGZyb20sIGludDMyX3QgdG8p
CisgICAgeworICAgICAgICBNSVBTV29yZCAqaW5zbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8TUlQU1dv
cmQqPihmcm9tKTsKKyAgICAgICAgQVNTRVJUKCgoKmluc24pICYgMHhmZmUwMDAwMCkgPT0gMHgz
YzAwMDAwMCk7IC8vIGx1aQorICAgICAgICAqaW5zbiA9ICgoKmluc24pICYgMHhmZmZmMDAwMCkg
fCAoKHRvID4+IDE2KSAmIDB4ZmZmZik7CisgICAgICAgIGluc24rKzsKKyAgICAgICAgQVNTRVJU
KCgoKmluc24pICYgMHhmYzAwMDAwMCkgPT0gMHgzNDAwMDAwMCk7IC8vIG9yaQorICAgICAgICAq
aW5zbiA9ICgoKmluc24pICYgMHhmZmZmMDAwMCkgfCAodG8gJiAweGZmZmYpOworICAgICAgICBp
bnNuLS07CisgICAgICAgIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmNhY2hlRmx1c2goaW5zbiwgMiAq
IHNpemVvZihNSVBTV29yZCkpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hQb2lu
dGVyKHZvaWQqIGZyb20sIHZvaWQqIHRvKQorICAgIHsKKyAgICAgICAgcmVwYXRjaEludDMyKGZy
b20sIHJlaW50ZXJwcmV0X2Nhc3Q8aW50MzJfdD4odG8pKTsKKyAgICB9CisKKyAgICBzdGF0aWMg
dm9pZCByZXBhdGNoTG9hZFB0clRvTEVBKHZvaWQqIGZyb20pCisgICAgeworICAgICAgICBNSVBT
V29yZCAqaW5zbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8TUlQU1dvcmQqPihmcm9tKTsKKyAgICAgICAg
aW5zbiA9IGluc24gKyAzOworICAgICAgICBBU1NFUlQgKCgoKmluc24pICYgMHhmYzAwMDAwMCkg
PT0gMHg4YzAwMDAwMCk7IC8vIGx3CisgICAgICAgIC8qIGx3IC0+IGFkZGl1ICovCisgICAgICAg
ICppbnNuID0gMHgyNDAwMDAwMCB8ICgoKmluc24pICYgMHgwM2ZmZmZmZiApOworCisgICAgICAg
IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmNhY2hlRmx1c2goaW5zbiwgc2l6ZW9mKE1JUFNXb3JkKSk7
CisgICAgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyBpbnQgbGlua1dpdGhPZmZzZXQoTUlQU1dv
cmQgKmluc24sIHZvaWQgKnRvKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCgoKCppbnNuKSAmIDB4
ZmMwMDAwMDApID09IDB4MTAwMDAwMDApIC8vIGJlcQorICAgICAgICAgICAgICAgfHwgKCgoKmlu
c24pICYgMHhmYzAwMDAwMCkgPT0gMHgxNDAwMDAwMCkgLy8gYm5lCisgICAgICAgICAgICAgICB8
fCAoKCgqaW5zbikgJiAweGZmZmYwMDAwKSA9PSAweDQ1MDEwMDAwKSAvLyBiYzF0CisgICAgICAg
ICAgICAgICB8fCAoKCgqaW5zbikgJiAweGZmZmYwMDAwKSA9PSAweDQ1MDAwMDAwKSk7IC8vIGJj
MWYKKyAgICAgICAgaW50IGRpZmYgPSAocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pIC0g
cmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5zbikgLSA0KSA+PiAyOworCisgICAgICAgIGlm
IChkaWZmIDwgLTMyNzY4IHx8IGRpZmYgPiAzMjc2NykgeworICAgICAgICAgICAgLyoKKyAgICAg
ICAgICAgICAgICBDb252ZXJ0IHRoZSBzZXF1ZW5jZToKKyAgICAgICAgICAgICAgICAgIGJlcSAk
MiwgJDMsIHRhcmdldAorICAgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgICBu
b3AKKyAgICAgICAgICAgICAgICAgIG5vcAorCisgICAgICAgICAgICAgICAgdG8gdGhlIG5ldyBz
ZXF1ZW5jZToKKyAgICAgICAgICAgICAgICAgIGJuZSAkMiwgJDMsIDFmCisgICAgICAgICAgICAg
ICAgICBub3AKKyAgICAgICAgICAgICAgICAgIGogICAgdGFyZ2V0CisgICAgICAgICAgICAgICAg
ICBub3AKKyAgICAgICAgICAgICAgICAxOgorCisgICAgICAgICAgICAgICAgTm90ZTogYmVxL2Ju
ZS9iYzF0IGFyZSBjb252ZXJ0ZWQgdG8gYm5lL2JlcS9iYzFmLgorICAgICAgICAgICAgKi8KKwor
ICAgICAgICAgICAgaWYgKCgqKGluc24gKyAyKSkgPT0gMCkgeworICAgICAgICAgICAgICAgIGlm
ICgoKCppbnNuKSAmIDB4ZmMwMDAwMDApID09IDB4MTAwMDAwMDApICAgICAgIC8vIGJlcQorICAg
ICAgICAgICAgICAgICAgICAqaW5zbiA9ICgoKmluc24pICYgMHgwM2ZmMDAwMCkgfCAweDE0MDAw
MDAzOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKCgoKmluc24pICYgMHhmYzAwMDAwMCkgPT0g
MHgxNDAwMDAwMCkgIC8vIGJuZQorICAgICAgICAgICAgICAgICAgICAqaW5zbiA9ICgoKmluc24p
ICYgMHgwM2ZmMDAwMCkgfCAweDEwMDAwMDAzOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKCgo
Kmluc24pICYgMHhmZmZmMDAwMCkgPT0gMHg0NTAxMDAwMCkgIC8vIGJjMXQKKyAgICAgICAgICAg
ICAgICAgICAgKmluc24gPSAoKCppbnNuKSAmIDB4MDAwMDAwMDApIHwgMHg0NTAwMDAwMzsKKyAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCgwKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaW5zbiA9IGluc24gKyAyOworICAgICAgICAgICAgaWYg
KCgocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5zbikgKyA0KSA+PiAyOCkgIT0gKHJlaW50
ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSA+PiAyOCkpIHsKKyAgICAgICAgICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIkVycm9yOiBDYW5ub3QgY3JlYXRlIE1JUFMganVtcCAoSikgZHVlIHRvIHRo
ZSB0b3AgZm91ciBiaXRzIGFyZSBkaWZmZXJlbnQuXG4iKTsKKyAgICAgICAgICAgICAgICBDUkFT
SCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKmluc24gPSAweDA4MDAwMDAwIHwgKChy
ZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgPj4gMikgJiAweDNmZmZmZmYpOworICAgICAg
ICAgICAgcmV0dXJuIDMgKiBzaXplb2YoTUlQU1dvcmQpOworICAgICAgICB9CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgKmluc24gPSAoKCppbnNuKSAmIDB4ZmZmZjAwMDApIHwgKGRpZmYg
JiAweGZmZmYpOworICAgICAgICAgICAgcmV0dXJuIHNpemVvZihNSVBTV29yZCk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgKmxpbmtDYWxs
SW50ZXJuYWwodm9pZCAqZnJvbSwgdm9pZCAqdG8pCisgICAgeworICAgICAgICBNSVBTV29yZCAq
aW5zbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8TUlQU1dvcmQqPihmcm9tKTsKKyAgICAgICAgaW5zbiA9
IGluc24gLSAyOworICAgICAgICBpZigoKCppbnNuKSAmIDB4ZmMwMDAwMDApID09IDB4MGMwMDAw
MDApIHsgLy8gSkFMCisgICAgICAgICAgICBpZiAoKChyZWludGVycHJldF9jYXN0PGludHB0cl90
Pihmcm9tKSArIDQpID4+IDI4KSAhPSAocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pID4+
IDI4KSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIENSQVNIIG1lYW5zIHdlIGNh
bm5vdCB0dXJuIHRoZSBKSVQgb24KKyAgICAgICAgICAgICAgICAvLyBieSBkZWZhdWx0IG9uIE1J
UFMuCisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvcjogQ2Fubm90IGNyZWF0
ZSBNSVBTIGNhbGwgKEpBTCkgZHVlIHRvIHRoZSB0b3AgZm91ciBiaXRzIGFyZSBkaWZmZXJlbnQu
XG4iKTsKKyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgKmluc24gPSAoKCppbnNuKSAmIDB4ZmMwMDAwMDApIHwgKChyZWludGVycHJldF9jYXN0PGlu
dHB0cl90Pih0bykgPj4gMikgJiAweDNmZmZmZmYpOworICAgICAgICAgICAgcmV0dXJuIGluc247
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZigoKCgqaW5zbikgJiAweGZjMWYwN2ZmKSA9PSAw
eDAwMDAwMDA5KSAgLy8gSkFMUgorICAgICAgICAgICAgICAgIHx8ICgoKCppbnNuKSAmIDB4ZmMx
ZmZmZmYpID09IDB4MDAwMDAwMDgpKSB7ICAgIC8vIEpSCisgICAgICAgICAgICBpbnNuID0gaW5z
biAtIDI7CisgICAgICAgICAgICBBU1NFUlQoKCgqaW5zbikgJiAweGZmZTAwMDAwKSA9PSAweDNj
MDAwMDAwKTsgLy8gbHVpCisgICAgICAgICAgICAqaW5zbiA9ICgoKmluc24pICYgMHhmZmZmMDAw
MCkgfCAoKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSA+PiAxNikgJiAweGZmZmYpOwor
ICAgICAgICAgICAgaW5zbisrOworICAgICAgICAgICAgQVNTRVJUKCgoKmluc24pICYgMHhmYzAw
MDAwMCkgPT0gMHgzNDAwMDAwMCk7IC8vIG9yaQorICAgICAgICAgICAgKmluc24gPSAoKCppbnNu
KSAmIDB4ZmZmZjAwMDApIHwgKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAmIDB4ZmZm
Zik7CisgICAgICAgICAgICBpbnNuLS07CisgICAgICAgICAgICByZXR1cm4gaW5zbjsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVCgwKTsKKyAgICAgICAgICAg
IHJldHVybiBpbnNuOworICAgICAgICB9CisgICAgfQorCisgICAgQXNzZW1ibGVyQnVmZmVyIG1f
YnVmZmVyOworICAgIEp1bXBzIG1fanVtcHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vIEVOQUJMRShBU1NFTUJMRVIpICYmIFBMQVRGT1JNKE1JUFMpCisKKyNlbmRpZiAv
LyBNSVBTQXNzZW1ibGVyX2gKSW5kZXg6IGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlck1JUFMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmgJKHJldmlzaW9uIDAp
CisrKyBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTQ3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBNSVBTIFRlY2hub2xvZ2llcywg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIE1JUFMgVEVDSE5PTE9HSUVTLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgTUlQUyBURUNITk9MT0dJRVMsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBNYWNyb0Fzc2Vt
Ymxlck1JUFNfaAorI2RlZmluZSBNYWNyb0Fzc2VtYmxlck1JUFNfaAorCisjaW5jbHVkZSA8d3Rm
L1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoQVNTRU1CTEVSKSAmJiBQTEFURk9STShNSVBTKQor
CisjaW5jbHVkZSAiTUlQU0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIkFic3RyYWN0TWFjcm9Bc3Nl
bWJsZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIE1hY3JvQXNzZW1ibGVyTUlQUyA6
IHB1YmxpYyBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyPE1JUFNBc3NlbWJsZXI+IHsKK3B1YmxpYzoK
KworICAgIHN0YXRpYyBjb25zdCBTY2FsZSBTY2FsZVB0ciA9IFRpbWVzRm91cjsKKworICAgIC8v
IEZvciBzdG9yaW5nIGltbWVkaWF0ZSBudW1iZXIKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJ
RCBpbW1UZW1wUmVnaXN0ZXIgPSBNSVBTUmVnaXN0ZXJzOjp0MDsKKyAgICAvLyBGb3Igc3Rvcmlu
ZyBkYXRhIGxvYWRlZCBmcm9tIHRoZSBtZW1vcnkKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJ
RCBkYXRhVGVtcFJlZ2lzdGVyID0gTUlQU1JlZ2lzdGVyczo6dDE7CisgICAgLy8gRm9yIHN0b3Jp
bmcgYWRkcmVzcyBiYXNlCisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgYWRkclRlbXBSZWdp
c3RlciA9IE1JUFNSZWdpc3RlcnM6OnQyOworICAgIC8vIEZvciBzdG9yaW5nIGNvbXBhcmUgcmVz
dWx0CisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgY21wVGVtcFJlZ2lzdGVyID0gTUlQU1Jl
Z2lzdGVyczo6dDM7CisKKyAgICAvLyBGUCB0ZW1wIHJlZ2lzdGVyCisgICAgc3RhdGljIGNvbnN0
IEZQUmVnaXN0ZXJJRCBmcFRlbXBSZWdpc3RlciA9IE1JUFNSZWdpc3RlcnM6OmYxNjsKKworICAg
IGVudW0gQ29uZGl0aW9uIHsKKyAgICAgICAgRXF1YWwsCisgICAgICAgIE5vdEVxdWFsLAorICAg
ICAgICBBYm92ZSwKKyAgICAgICAgQWJvdmVPckVxdWFsLAorICAgICAgICBCZWxvdywKKyAgICAg
ICAgQmVsb3dPckVxdWFsLAorICAgICAgICBHcmVhdGVyVGhhbiwKKyAgICAgICAgR3JlYXRlclRo
YW5PckVxdWFsLAorICAgICAgICBMZXNzVGhhbiwKKyAgICAgICAgTGVzc1RoYW5PckVxdWFsLAor
ICAgICAgICBPdmVyZmxvdywKKyAgICAgICAgU2lnbmVkLAorICAgICAgICBaZXJvLAorICAgICAg
ICBOb25aZXJvCisgICAgfTsKKworICAgIGVudW0gRG91YmxlQ29uZGl0aW9uIHsKKyAgICAgICAg
RG91YmxlRXF1YWwsCisgICAgICAgIERvdWJsZUdyZWF0ZXJUaGFuLAorICAgICAgICBEb3VibGVH
cmVhdGVyVGhhbk9yRXF1YWwsCisgICAgICAgIERvdWJsZUxlc3NUaGFuLAorICAgICAgICBEb3Vi
bGVMZXNzVGhhbk9yRXF1YWwKKyAgICB9OworCisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQg
c3RhY2tQb2ludGVyUmVnaXN0ZXIgPSBNSVBTUmVnaXN0ZXJzOjpzcDsKKyAgICBzdGF0aWMgY29u
c3QgUmVnaXN0ZXJJRCByZXR1cm5BZGRyZXNzUmVnaXN0ZXIgPSBNSVBTUmVnaXN0ZXJzOjpyYTsK
KworICAgIC8vIEludGVnZXIgYXJpdGhtZXRpYyBvcGVyYXRpb25zOgorICAgIC8vCisgICAgLy8g
T3BlcmF0aW9ucyBhcmUgdHlwaWNhbGx5IHR3byBvcGVyYW5kIC0gb3BlcmF0aW9uKHNvdXJjZSwg
c3JjRHN0KQorICAgIC8vIEZvciBtYW55IG9wZXJhdGlvbnMgdGhlIHNvdXJjZSBtYXkgYmUgYW4g
SW1tMzIsIHRoZSBzcmNEc3Qgb3BlcmFuZAorICAgIC8vIG1heSBvZnRlbiBiZSBhIG1lbW9yeSBs
b2NhdGlvbiAoZXhwbGljdGx5IGRlc2NyaWJlZCB1c2luZyBhbiBBZGRyZXNzCisgICAgLy8gb2Jq
ZWN0KS4KKworICAgIHZvaWQgYWRkMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCwg
aW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoZGVzdCwgZGVz
dCwgc3JjKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZDMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBk
ZXN0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgYWRkMzIoaW1tLCBkZXN0LCBkZXN0
LCBmaXhlZCk7CisgICAgfQorCisgICAgdm9pZCBhZGQzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQg
c3JjLCBSZWdpc3RlcklEIGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBpZihp
bW0ubV92YWx1ZSA+PSAtMzI3NjggJiYgaW1tLm1fdmFsdWUgPD0gMzI3NjcgJiYgZml4ZWQgPT0g
MCkgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgYWRkaXUgICAgIGRlc3QsIHNyYywg
aW1tCisgICAgICAgICAgICAqLworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkaXUoZGVzdCwg
c3JjLCBpbW0ubV92YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAvKgorICAgICAgICAgICAgICBsaSAgICAgICAgaW1tVGVtcCwgaW1tCisgICAgICAgICAgICAg
IGFkZHUgICAgICBkZXN0LCBzcmMsIGltbVRlbXAKKyAgICAgICAgICAgICovCisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5saShpbW1UZW1wUmVnaXN0ZXIsIGltbS5tX3ZhbHVlLCBmaXhlZCk7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGRlc3QsIHNyYywgaW1tVGVtcFJlZ2lzdGVyKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgYWRkMzIoSW1tMzIgaW1tLCBBZGRyZXNzIGFk
ZHJlc3MsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBpZiAoYWRkcmVzcy5vZmZzZXQg
Pj0gLTMyNzY4ICYmIGFkZHJlc3Mub2Zmc2V0IDw9IDMyNzY3ICYmIGZpeGVkID09IDApIHsKKyAg
ICAgICAgICAgIC8qCisgICAgICAgICAgICAgIGx3ICAgICAgICBkYXRhVGVtcCwgb2Zmc2V0KGJh
c2UpCisgICAgICAgICAgICAgIGxpICAgICAgICBpbW1UZW1wLCBpbW0KKyAgICAgICAgICAgICAg
YWRkdSAgICAgIGRhdGFUZW1wLCBkYXRhVGVtcCwgaW1tVGVtcAorICAgICAgICAgICAgICBzdyAg
ICAgICAgZGF0YVRlbXAsIG9mZnNldChiYXNlKQorICAgICAgICAgICAgKi8KKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmx3KGRhdGFUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5v
ZmZzZXQpOworICAgICAgICAgICAgaWYoaW1tLm1fdmFsdWUgPj0gLTMyNzY4ICYmIGltbS5tX3Zh
bHVlIDw9IDMyNzY3ICYmIGZpeGVkID09IDApCisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIu
YWRkaXUoZGF0YVRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3RlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbW0ubV92YWx1ZSk7CisgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5saShpbW1UZW1wUmVnaXN0ZXIsIGltbS5tX3ZhbHVl
LCBmaXhlZCk7CisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShkYXRhVGVtcFJlZ2lz
dGVyLCBkYXRhVGVtcFJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LnN3KGRhdGFUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5vZmZzZXQpOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgbHVp
ICAgICAgIGFkZHJUZW1wLCBvZmZzZXQgPj4gMTYKKyAgICAgICAgICAgICAgYWRkdSAgICAgIGFk
ZHJUZW1wLCBhZGRyVGVtcCwgYmFzZQorICAgICAgICAgICAgICBsdyAgICAgICAgZGF0YVRlbXAs
IChvZmZzZXQgJiAweGZmZmYpKGFkZHJUZW1wKQorICAgICAgICAgICAgICBsaSAgICAgICAgaW1t
dGVtcCwgaW1tCisgICAgICAgICAgICAgIGFkZHUgICAgICBkYXRhVGVtcCwgZGF0YVRlbXAsIGlt
bVRlbXAKKyAgICAgICAgICAgICAgc3cgICAgICAgIGRhdGFUZW1wLCAob2Zmc2V0ICYgMHhmZmZm
KShhZGRyVGVtcCkKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sdWko
YWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQgPj4gMTYpOworICAgICAgICAgICAgbV9h
c3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNz
LmJhc2UpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHcoZGF0YVRlbXBSZWdpc3RlciwgYWRk
clRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQpOworCisgICAgICAgICAgICBpZihpbW0ubV92
YWx1ZSA+PSAtMzI3NjggJiYgaW1tLm1fdmFsdWUgPD0gMzI3NjcgJiYgZml4ZWQgPT0gMCkKKyAg
ICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRpdShkYXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVt
cFJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltbS5tX3ZhbHVl
KTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxpKGlt
bVRlbXBSZWdpc3RlciwgaW1tLm1fdmFsdWUsIGZpeGVkKTsKKyAgICAgICAgICAgICAgICBtX2Fz
c2VtYmxlci5hZGR1KGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3coZGF0YVRlbXBSZWdpc3RlciwgYWRkclRlbXBS
ZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBh
ZGQzMihBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsK
KyAgICAgICAgbG9hZDMyKHNyYywgZGF0YVRlbXBSZWdpc3RlciwgZml4ZWQpOworICAgICAgICBh
ZGQzMihkYXRhVGVtcFJlZ2lzdGVyLCBkZXN0LCBmaXhlZCk7CisgICAgfQorCisgICAgdm9pZCBh
ZGQzMihSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsK
KyAgICAgICAgaWYgKGRlc3Qub2Zmc2V0ID49IC0zMjc2OCAmJiBkZXN0Lm9mZnNldCA8PSAzMjc2
NyAmJiBmaXhlZCA9PSAwKSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICBsdyAgICAg
ICAgZGF0YVRlbXAsIG9mZnNldChiYXNlKQorICAgICAgICAgICAgICBhZGR1ICAgICAgZGF0YVRl
bXAsIGRhdGFUZW1wLCBzcmMKKyAgICAgICAgICAgICAgc3cgICAgICAgIGRhdGFUZW1wLCBvZmZz
ZXQoYmFzZSkKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sdyhkYXRh
VGVtcFJlZ2lzdGVyLCBkZXN0LmJhc2UsIGRlc3Qub2Zmc2V0KTsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmFkZHUoZGF0YVRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3Rlciwgc3JjKTsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLnN3KGRhdGFUZW1wUmVnaXN0ZXIsIGRlc3QuYmFzZSwgZGVz
dC5vZmZzZXQpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLyoKKyAg
ICAgICAgICAgICAgbHVpICAgICAgIGFkZHJUZW1wLCBvZmZzZXQgPj4gMTYKKyAgICAgICAgICAg
ICAgYWRkdSAgICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgYmFzZQorICAgICAgICAgICAgICBsdyAg
ICAgICAgZGF0YVRlbXAsIChvZmZzZXQgJiAweGZmZmYpKGFkZHJUZW1wKQorICAgICAgICAgICAg
ICBhZGR1ICAgICAgZGF0YVRlbXAsIGRhdGFUZW1wLCBzcmMKKyAgICAgICAgICAgICAgc3cgICAg
ICAgIGRhdGFUZW1wLCAob2Zmc2V0ICYgMHhmZmZmKShhZGRyVGVtcCkKKyAgICAgICAgICAgICov
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sdWkoYWRkclRlbXBSZWdpc3RlciwgZGVzdC5vZmZz
ZXQgPj4gMTYpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVy
LCBhZGRyVGVtcFJlZ2lzdGVyLCBkZXN0LmJhc2UpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
bHcoZGF0YVRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgZGVzdC5vZmZzZXQpOworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShkYXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lz
dGVyLCBzcmMpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3coZGF0YVRlbXBSZWdpc3Rlciwg
YWRkclRlbXBSZWdpc3RlciwgZGVzdC5vZmZzZXQpOworICAgICAgICB9CisgICAgfQorCisgICAg
dm9pZCBhZGQzMihJbW0zMiBpbW0sIEFic29sdXRlQWRkcmVzcyBhZGRyZXNzLCBpbnQgZml4ZWQg
PSAwKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICAgbGkgICBhZGRyVGVtcCwgYWRkcmVz
cworICAgICAgICAgICBsaSAgIGltbVRlbXAsIGltbQorICAgICAgICAgICBsdyAgIGRhdGFUZW1w
LCAwKGFkZHJUZW1wKQorICAgICAgICAgICBhZGR1IGRhdGFUZW1wLCBkYXRhVGVtcCwgaW1tVGVt
cAorICAgICAgICAgICBzdyAgIGRhdGFUZW1wLCAwKGFkZHJUZW1wKQorICAgICAgICAqLworICAg
ICAgICBtX2Fzc2VtYmxlci5saShhZGRyVGVtcFJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAg
ICAgICByZWludGVycHJldF9jYXN0PE1JUFNXb3JkPihhZGRyZXNzLm1fcHRyKSwgZml4ZWQpOwor
ICAgICAgICBtX2Fzc2VtYmxlci5sdyhkYXRhVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVy
LCAwKTsKKyAgICAgICAgaWYgKGltbS5tX3ZhbHVlID49IC0zMjc2OCAmJiBpbW0ubV92YWx1ZSA8
PSAzMjc2NyAmJiBmaXhlZCA9PSAwKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkaXUoZGF0
YVRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3RlciwgaW1tLm1fdmFsdWUpOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxpKGltbVRlbXBSZWdpc3RlciwgaW1tLm1f
dmFsdWUsIGZpeGVkKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoZGF0YVRlbXBSZWdp
c3RlciwgZGF0YVRlbXBSZWdpc3RlciwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgfQorICAg
ICAgICBtX2Fzc2VtYmxlci5zdyhkYXRhVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCAw
KTsKKyAgICB9CisKKyAgICB2b2lkIGFuZDMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRl
c3QsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hbmRfaW5zbihk
ZXN0LCBkZXN0LCBzcmMpOworICAgIH0KKworICAgIHZvaWQgYW5kMzIoSW1tMzIgaW1tLCBSZWdp
c3RlcklEIGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBpZiAoaW1tLm1fdmFs
dWUgPT0gMCAmJiBmaXhlZCA9PSAwKQorICAgICAgICAgICAgbW92ZShNSVBTUmVnaXN0ZXJzOjp6
ZXJvLCBkZXN0LCBmaXhlZCk7CisgICAgICAgIGVsc2UgaWYgKGltbS5tX3ZhbHVlID4gMCAmJiBp
bW0ubV92YWx1ZSA8IDY1NTM1ICYmIGZpeGVkID09IDApCisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5hbmRpKGRlc3QsIGRlc3QsIGltbS5tX3ZhbHVlKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAvKgorICAgICAgICAgICAgICBsaSAgICAgICAgaW1tVGVtcCwgaW1tCisgICAgICAgICAg
ICAgIGFuZCAgICAgICBkZXN0LCBkZXN0LCBpbW1UZW1wCisgICAgICAgICAgICAqLworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIubGkoaW1tVGVtcFJlZ2lzdGVyLCBpbW0ubV92YWx1ZSwgZml4ZWQp
OworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYW5kX2luc24oZGVzdCwgZGVzdCwgaW1tVGVtcFJl
Z2lzdGVyKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgbHNoaWZ0MzIoSW1tMzIgaW1t
LCBSZWdpc3RlcklEIGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5zbGwoZGVzdCwgZGVzdCwgaW1tLm1fdmFsdWUpOworICAgIH0KKworICAgIHZvaWQgbHNo
aWZ0MzIoUmVnaXN0ZXJJRCBzaGlmdF9hbW91bnQsIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVk
ID0gMCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnNsbHYoZGVzdCwgZGVzdCwgc2hpZnRf
YW1vdW50KTsKKyAgICB9CisKKyAgICB2b2lkIG11bDMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3Rl
cklEIGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5tdWwo
ZGVzdCwgZGVzdCwgc3JjKTsKKyAgICB9CisKKyAgICB2b2lkIG11bDMyKEltbTMyIGltbSwgUmVn
aXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAg
ICAgIGlmIChpbW0ubV92YWx1ZSA9PSAwICYmIGZpeGVkID09IDApCisgICAgICAgICAgICBtb3Zl
KE1JUFNSZWdpc3RlcnM6Onplcm8sIGRlc3QsIGZpeGVkKTsKKyAgICAgICAgZWxzZSBpZiAoaW1t
Lm1fdmFsdWUgPT0gMSAmJiBmaXhlZCA9PSAwKQorICAgICAgICAgICAgbW92ZShzcmMsIGRlc3Qs
IGZpeGVkKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAg
IGxpICAgICAgZGF0YVRlbXAsIGltbQorICAgICAgICAgICAgICAgIG11bCAgICAgZGVzdCwgc3Jj
LCBkYXRhVGVtcAorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxpKGRh
dGFUZW1wUmVnaXN0ZXIsIGltbS5tX3ZhbHVlLCBmaXhlZCk7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5tdWwoZGVzdCwgc3JjLCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHZvaWQgbm90MzIoUmVnaXN0ZXJJRCBzcmNEZXN0LCBpbnQgZml4ZWQgPSAwKQorICAg
IHsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9yKHNyY0Rlc3QsIHNyY0Rlc3QsIE1JUFNSZWdpc3Rl
cnM6Onplcm8pOworICAgIH0KKworICAgIHZvaWQgb3IzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0
ZXJJRCBkZXN0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIub3Jf
aW5zbihkZXN0LCBkZXN0LCBzcmMpOworICAgIH0KKworICAgIHZvaWQgb3IzMihJbW0zMiBpbW0s
IFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIGlmIChpbW0u
bV92YWx1ZSA9PSAwICYmIGZpeGVkID09IDApCisgICAgICAgICAgICA7CisgICAgICAgIGVsc2Ug
aWYgKGltbS5tX3ZhbHVlID4gMCAmJiBpbW0ubV92YWx1ZSA8IDY1NTM1ICYmIGZpeGVkID09IDAp
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5vcmkoZGVzdCwgZGVzdCwgaW1tLm1fdmFsdWUpOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgbGkgICAgICBk
YXRhVGVtcCwgaW1tCisgICAgICAgICAgICAgICAgb3IgICAgICBkZXN0LCBkZXN0LCBkYXRhVGVt
cAorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxpKGRhdGFUZW1wUmVn
aXN0ZXIsIGltbS5tX3ZhbHVlLCBmaXhlZCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5vcl9p
bnNuKGRlc3QsIGRlc3QsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICB9CisgICAgfQorCisg
ICAgdm9pZCByc2hpZnQzMihSZWdpc3RlcklEIHNoaWZ0X2Ftb3VudCwgUmVnaXN0ZXJJRCBkZXN0
LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3JhdihkZXN0LCBk
ZXN0LCBzaGlmdF9hbW91bnQpOworICAgIH0KKworICAgIHZvaWQgcnNoaWZ0MzIoSW1tMzIgaW1t
LCBSZWdpc3RlcklEIGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5zcmEoZGVzdCwgZGVzdCwgaW1tLm1fdmFsdWUpOworICAgIH0KKworICAgIHZvaWQgc3Vi
MzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLnN1YnUoZGVzdCwgZGVzdCwgc3JjKTsKKyAgICB9CisKKyAg
ICB2b2lkIHN1YjMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQgPSAwKQor
ICAgIHsKKyAgICAgICAgaWYoaW1tLm1fdmFsdWUgPj0gLTMyNzY3ICYmIGltbS5tX3ZhbHVlIDw9
IDMyNzY4ICYmIGZpeGVkID09IDApIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgIGFk
ZGl1ICAgICBkZXN0LCBzcmMsIGltbQorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmFkZGl1KGRlc3QsIGRlc3QsIC1pbW0ubV92YWx1ZSk7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICBsaSAgICAgICAgaW1tVGVt
cCwgaW1tCisgICAgICAgICAgICAgIHN1YnUgICAgICBkZXN0LCBzcmMsIGltbVRlbXAKKyAgICAg
ICAgICAgICovCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5saShpbW1UZW1wUmVnaXN0ZXIsIGlt
bS5tX3ZhbHVlLCBmaXhlZCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdWJ1KGRlc3QsIGRl
c3QsIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHN1YjMy
KEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzLCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAg
ICAgaWYgKGFkZHJlc3Mub2Zmc2V0ID49IC0zMjc2OCAmJiBhZGRyZXNzLm9mZnNldCA8PSAzMjc2
NyAmJiBmaXhlZCA9PSAwKSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICBsdyAgICAg
ICAgZGF0YVRlbXAsIG9mZnNldChiYXNlKQorICAgICAgICAgICAgICBsaSAgICAgICAgaW1tVGVt
cCwgaW1tCisgICAgICAgICAgICAgIHN1YnUgICAgICBkYXRhVGVtcCwgZGF0YVRlbXAsIGltbVRl
bXAKKyAgICAgICAgICAgICAgc3cgICAgICAgIGRhdGFUZW1wLCBvZmZzZXQoYmFzZSkKKyAgICAg
ICAgICAgICovCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sdyhkYXRhVGVtcFJlZ2lzdGVyLCBh
ZGRyZXNzLmJhc2UsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgICAgIGlmKGltbS5tX3ZhbHVl
ID49IC0zMjc2NyAmJiBpbW0ubV92YWx1ZSA8PSAzMjc2OCAmJiBmaXhlZCA9PSAwKQorICAgICAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGl1KGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVn
aXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWltbS5tX3ZhbHVlKTsK
KyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxpKGltbVRl
bXBSZWdpc3RlciwgaW1tLm1fdmFsdWUsIGZpeGVkKTsKKyAgICAgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5zdWJ1KGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3coZGF0YVRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNl
LCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAvKgorICAgICAgICAgICAgICBsdWkgICAgICAgYWRkclRlbXAsIG9mZnNldCA+PiAxNgorICAg
ICAgICAgICAgICBhZGR1ICAgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBiYXNlCisgICAgICAgICAg
ICAgIGx3ICAgICAgICBkYXRhVGVtcCwgKG9mZnNldCAmIDB4ZmZmZikoYWRkclRlbXApCisgICAg
ICAgICAgICAgIGxpICAgICAgICBpbW10ZW1wLCBpbW0KKyAgICAgICAgICAgICAgc3VidSAgICAg
IGRhdGFUZW1wLCBkYXRhVGVtcCwgaW1tVGVtcAorICAgICAgICAgICAgICBzdyAgICAgICAgZGF0
YVRlbXAsIChvZmZzZXQgJiAweGZmZmYpKGFkZHJUZW1wKQorICAgICAgICAgICAgKi8KKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLmx1aShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCA+
PiAxNik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFk
ZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5s
dyhkYXRhVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCk7CisK
KyAgICAgICAgICAgIGlmKGltbS5tX3ZhbHVlID49IC0zMjc2NyAmJiBpbW0ubV92YWx1ZSA8PSAz
Mjc2OCAmJiBmaXhlZCA9PSAwKQorICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGl1KGRh
dGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLWltbS5tX3ZhbHVlKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLmxpKGltbVRlbXBSZWdpc3RlciwgaW1tLm1fdmFsdWUsIGZpeGVk
KTsKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdWJ1KGRhdGFUZW1wUmVnaXN0ZXIsIGRh
dGFUZW1wUmVnaXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbW1UZW1w
UmVnaXN0ZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3coZGF0
YVRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQpOworICAgICAg
ICB9CisgICAgfQorCisgICAgdm9pZCBzdWIzMihBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0
LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgbG9hZDMyKHNyYywgZGF0YVRlbXBSZWdp
c3RlciwgZml4ZWQpOworICAgICAgICBzdWIzMihkYXRhVGVtcFJlZ2lzdGVyLCBkZXN0LCBmaXhl
ZCk7CisgICAgfQorCisgICAgdm9pZCBzdWIzMihJbW0zMiBpbW0sIEFic29sdXRlQWRkcmVzcyBh
ZGRyZXNzLCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICAgbGkg
ICBhZGRyVGVtcCwgYWRkcmVzcworICAgICAgICAgICBsaSAgIGltbVRlbXAsIGltbQorICAgICAg
ICAgICBsdyAgIGRhdGFUZW1wLCAwKGFkZHJUZW1wKQorICAgICAgICAgICBzdWJ1IGRhdGFUZW1w
LCBkYXRhVGVtcCwgaW1tVGVtcAorICAgICAgICAgICBzdyAgIGRhdGFUZW1wLCAwKGFkZHJUZW1w
KQorICAgICAgICAqLworICAgICAgICBtX2Fzc2VtYmxlci5saShhZGRyVGVtcFJlZ2lzdGVyLAor
ICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PE1JUFNXb3JkPihhZGRyZXNz
Lm1fcHRyKSwgZml4ZWQpOworICAgICAgICBtX2Fzc2VtYmxlci5sdyhkYXRhVGVtcFJlZ2lzdGVy
LCBhZGRyVGVtcFJlZ2lzdGVyLCAwKTsKKworICAgICAgICBpZihpbW0ubV92YWx1ZSA+PSAtMzI3
NjcgJiYgaW1tLm1fdmFsdWUgPD0gMzI3NjggJiYgZml4ZWQgPT0gMCkgeworICAgICAgICAgICAg
bV9hc3NlbWJsZXIuYWRkaXUoZGF0YVRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3RlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1pbW0ubV92YWx1ZSk7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5saShpbW1UZW1wUmVnaXN0ZXIs
IGltbS5tX3ZhbHVlLCBmaXhlZCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdWJ1KGRhdGFU
ZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAg
IH0KKyAgICAgICAgbV9hc3NlbWJsZXIuc3coZGF0YVRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdp
c3RlciwgMCk7CisgICAgfQorCisgICAgdm9pZCB4b3IzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0
ZXJJRCBkZXN0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIueG9y
X2luc24oZGVzdCwgZGVzdCwgc3JjKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjMyKEltbTMyIGlt
bSwgUmVnaXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgLyoKKyAg
ICAgICAgICAgIGxpICBpbW1UZW1wLCBpbW0KKyAgICAgICAgICAgIHhvciBkZXN0LCBkZXN0LCBp
bW1UZW1wCisgICAgICAgICovCisgICAgICAgIG1fYXNzZW1ibGVyLmxpKGltbVRlbXBSZWdpc3Rl
ciwgaW1tLm1fdmFsdWUsIGZpeGVkKTsKKyAgICAgICAgbV9hc3NlbWJsZXIueG9yX2luc24oZGVz
dCwgZGVzdCwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICAvLyBNZW1vcnkgYWNjZXNz
IG9wZXJhdGlvbnM6CisgICAgLy8KKyAgICAvLyBMb2FkcyBhcmUgb2YgdGhlIGZvcm0gbG9hZChh
ZGRyZXNzLCBkZXN0aW5hdGlvbikgYW5kIHN0b3JlcyBvZiB0aGUgZm9ybQorICAgIC8vIHN0b3Jl
KHNvdXJjZSwgYWRkcmVzcykuICBUaGUgc291cmNlIGZvciBhIHN0b3JlIG1heSBiZSBhbiBJbW0z
Mi4gIEFkZHJlc3MKKyAgICAvLyBvcGVyYW5kIG9iamVjdHMgdG8gbG9hZHMgYW5kIHN0b3JlIHdp
bGwgYmUgaW1wbGljaXRseSBjb25zdHJ1Y3RlZCBpZiBhCisgICAgLy8gcmVnaXN0ZXIgaXMgcGFz
c2VkLgorCisgICAgdm9pZCBsb2FkMzIoSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVy
SUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIGlmIChhZGRyZXNzLm9mZnNl
dCA+PSAtMzI3NjggJiYgYWRkcmVzcy5vZmZzZXQgPD0gMzI3NjcgJiYgZml4ZWQgPT0gMCkKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLmx3KGRlc3QsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5vZmZz
ZXQpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgbHVp
ICAgICBhZGRyVGVtcCwgb2Zmc2V0ID4+IDE2CisgICAgICAgICAgICAgICAgYWRkdSAgICBhZGRy
VGVtcCwgYWRkclRlbXAsIGJhc2UKKyAgICAgICAgICAgICAgICBsdyAgICAgIGRlc3QsIChvZmZz
ZXQgJiAweGZmZmYpKGFkZHJUZW1wKQorICAgICAgICAgICAgICAqLworICAgICAgICAgICAgbV9h
c3NlbWJsZXIubHVpKGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0ID4+IDE2KTsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdp
c3RlciwgYWRkcmVzcy5iYXNlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx3KGRlc3QsIGFk
ZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHZvaWQgbG9hZDMyKEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QsIGludCBmaXhl
ZCA9IDApCisgICAgeworICAgICAgICBpZiAoYWRkcmVzcy5vZmZzZXQgPj0gLTMyNzY4ICYmIGFk
ZHJlc3Mub2Zmc2V0IDw9IDMyNzY3ICYmIGZpeGVkID09IDApIHsKKyAgICAgICAgICAgIC8qCisg
ICAgICAgICAgICAgICAgc2xsICAgICBhZGRyVGVtcCwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5z
Y2FsZQorICAgICAgICAgICAgICAgIGFkZHUgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBhZGRyZXNz
LmJhc2UKKyAgICAgICAgICAgICAgICBsdyAgICAgIGRlc3QsIGFkZHJlc3Mub2Zmc2V0KGFkZHJU
ZW1wKQorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsbChhZGRyVGVt
cFJlZ2lzdGVyLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVz
cy5iYXNlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx3KGRlc3QsIGFkZHJUZW1wUmVnaXN0
ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIC8qCisgICAgICAgICAgICAgICAgc2xsICAgICBhZGRyVGVtcCwgYWRkcmVzcy5pbmRleCwg
YWRkcmVzcy5zY2FsZQorICAgICAgICAgICAgICAgIGFkZHUgICAgYWRkclRlbXAsIGFkZHJUZW1w
LCBhZGRyZXNzLmJhc2UKKyAgICAgICAgICAgICAgICBsdWkgICAgIGltbVRlbXAsIGFkZHJlc3Mu
b2Zmc2V0ID4+IDE2CisgICAgICAgICAgICAgICAgYWRkdSAgICBhZGRyVGVtcCwgYWRkclRlbXAs
IGltbVRlbXAKKyAgICAgICAgICAgICAgICBsdyAgICAgIGRlc3QsIChhZGRyZXNzLm9mZnNldCAm
IDB4ZmZmZikoYXQpCisgICAgICAgICAgICAqLworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2xs
KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVy
LCBhZGRyZXNzLmJhc2UpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHVpKGltbVRlbXBSZWdp
c3RlciwgYWRkcmVzcy5vZmZzZXQgPj4gMTYpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRk
dShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHco
ZGVzdCwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQpOworICAgICAgICB9CisgICAg
fQorCisgICAgdm9pZCBsb2FkMzIodm9pZCAqYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0LCBpbnQg
Zml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICAgIGxpICBhZGRyVGVtcCwg
YWRkcmVzcworICAgICAgICAgICAgbHcgIGRlc3QsIDAoYWRkclRlbXApCisgICAgICAgICovCisg
ICAgICAgIG1fYXNzZW1ibGVyLmxpKGFkZHJUZW1wUmVnaXN0ZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8
TUlQU1dvcmQ+KGFkZHJlc3MpLCBmaXhlZCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmx3KGRlc3Qs
IGFkZHJUZW1wUmVnaXN0ZXIsIDApOworICAgIH0KKworICAgIERhdGFMYWJlbDMyIGxvYWQzMldp
dGhBZGRyZXNzT2Zmc2V0UGF0Y2goQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICBpbnQgZml4ZWQgPSAxOworICAgICAgICAvKgorICAgICAgICAgICAgbHVp
IGFkZHJUZW1wLCBhZGRyZXNzLm9mZnNldCA+PiAxNgorICAgICAgICAgICAgb3JpIGFkZHJUZW1w
LCBhZGRyVGVtcCwgYWRkcmVzcy5vZmZzZXQgJiAweGZmZmYKKyAgICAgICAgICAgIGFkZHUgICAg
ICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgYWRkcmVzcy5iYXNlCisgICAgICAgICAgICBsdyAgZGVz
dCwgMChhZGRyVGVtcCkKKyAgICAgICAgKi8KKyAgICAgICAgRGF0YUxhYmVsMzIgZGF0YUxhYmVs
KHRoaXMpOworICAgICAgICBtX2Fzc2VtYmxlci5saShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNz
Lm9mZnNldCwgZml4ZWQpOworICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0
ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSk7CisgICAgICAgIG1fYXNzZW1ibGVy
Lmx3KGRlc3QsIGFkZHJUZW1wUmVnaXN0ZXIsIDApOworICAgICAgICByZXR1cm4gZGF0YUxhYmVs
OworICAgIH0KKworICAgIExhYmVsIGxvYWRQdHJXaXRoUGF0Y2hUb0xFQShBZGRyZXNzIGFkZHJl
c3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGludCBmaXhlZCA9IDE7CisgICAg
ICAgIC8qCisgICAgICAgICAgICBsdWkgICAgICAgICBhZGRyVGVtcCwgYWRkcmVzcy5vZmZzZXQg
Pj4gMTYKKyAgICAgICAgICAgIG9yaSAgICAgICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgYWRkcmVz
cy5vZmZzZXQgJiAweGZmZmYKKyAgICAgICAgICAgIGFkZHUgICAgICAgIGFkZHJUZW1wLCBhZGRy
VGVtcCwgYWRkcmVzcy5iYXNlCisgICAgICAgICAgICBsdyAgICAgICAgICBkZXN0LCAwKGFkZHJU
ZW1wKQorICAgICAgICAqLworICAgICAgICBMYWJlbCBsYWJlbCh0aGlzKTsKKyAgICAgICAgbV9h
c3NlbWJsZXIubGkoYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQsIGZpeGVkKTsKKyAg
ICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVy
LCBhZGRyZXNzLmJhc2UpOworICAgICAgICBtX2Fzc2VtYmxlci5sdyhkZXN0LCBhZGRyVGVtcFJl
Z2lzdGVyLCAwKTsKKyAgICAgICAgcmV0dXJuIGxhYmVsOworICAgIH0KKworICAgIExhYmVsIGxv
YWRQdHJXaXRoQWRkcmVzc09mZnNldFBhdGNoKEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBk
ZXN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGxvYWRQdHJXaXRoUGF0Y2hUb0xFQShhZGRyZXNz
LCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQxNihCYXNlSW5kZXggYWRkcmVzcywgUmVn
aXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgaWYgKGFkZHJlc3Mu
b2Zmc2V0ID49IC0zMjc2OCAmJiBhZGRyZXNzLm9mZnNldCA8PSAzMjc2NyAmJiBmaXhlZCA9PSAw
KSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgIHNsbCAgICAgYWRkclRlbXAsIGFk
ZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUKKyAgICAgICAgICAgICAgICBhZGR1ICAgIGFkZHJU
ZW1wLCBhZGRyVGVtcCwgYWRkcmVzcy5iYXNlCisgICAgICAgICAgICAgICAgbGggICAgICBkZXN0
LCBhZGRyZXNzLm9mZnNldChhZGRyVGVtcCkKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5zbGwoYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5z
Y2FsZSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFk
ZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5s
aChkZXN0LCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgIHNsbCAgICAgYWRk
clRlbXAsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUKKyAgICAgICAgICAgICAgICBhZGR1
ICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgYWRkcmVzcy5iYXNlCisgICAgICAgICAgICAgICAgbHVp
ICAgICBpbW1UZW1wLCBhZGRyZXNzLm9mZnNldCA+PiAxNgorICAgICAgICAgICAgICAgIGFkZHUg
ICAgYWRkclRlbXAsIGFkZHJUZW1wLCBpbW1UZW1wCisgICAgICAgICAgICAgICAgbGggICAgICBk
ZXN0LCBhZGRyZXNzLm9mZnNldChhZGRyVGVtcCkKKyAgICAgICAgICAgICovCisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5zbGwoYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5pbmRleCwgYWRkcmVz
cy5zY2FsZSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIs
IGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5sdWkoaW1tVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCA+PiAxNik7CisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5saChkZXN0LCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBEYXRhTGFiZWwzMiBzdG9yZTMyV2l0aEFkZHJlc3NP
ZmZzZXRQYXRjaChSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAg
ICAgaW50IGZpeGVkID0gMTsKKyAgICAgICAgLyoKKyAgICAgICAgICAgIGx1aSBhZGRyVGVtcCwg
YWRkcmVzcy5vZmZzZXQgPj4gMTYKKyAgICAgICAgICAgIG9yaSBhZGRyVGVtcCwgYWRkclRlbXAs
IGFkZHJlc3Mub2Zmc2V0ICYgMHhmZmZmCisgICAgICAgICAgICBhZGR1ICAgICAgICBhZGRyVGVt
cCwgYWRkclRlbXAsIGFkZHJlc3MuYmFzZQorICAgICAgICAgICAgc3cgIHNyYywgMChhZGRyVGVt
cCkKKyAgICAgICAgKi8KKyAgICAgICAgRGF0YUxhYmVsMzIgZGF0YUxhYmVsKHRoaXMpOworICAg
ICAgICBtX2Fzc2VtYmxlci5saShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCwgZml4
ZWQpOworICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1w
UmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSk7CisgICAgICAgIG1fYXNzZW1ibGVyLnN3KHNyYywgYWRk
clRlbXBSZWdpc3RlciwgMCk7CisgICAgICAgIHJldHVybiBkYXRhTGFiZWw7CisgICAgfQorCisg
ICAgdm9pZCBzdG9yZTMyKFJlZ2lzdGVySUQgc3JjLCBJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcywg
aW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIGlmIChhZGRyZXNzLm9mZnNldCA+PSAtMzI3
NjggJiYgYWRkcmVzcy5vZmZzZXQgPD0gMzI3NjcgJiYgZml4ZWQgPT0gMCkKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLnN3KHNyYywgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICBsdWkgICAgIGFkZHJU
ZW1wLCBvZmZzZXQgPj4gMTYKKyAgICAgICAgICAgICAgICBhZGR1ICAgIGFkZHJUZW1wLCBhZGRy
VGVtcCwgYmFzZQorICAgICAgICAgICAgICAgIHN3ICAgICAgc3JjLCAob2Zmc2V0ICYgMHhmZmZm
KShhZGRyVGVtcCkKKyAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx1
aShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCA+PiAxNik7CisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJl
c3MuYmFzZSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdyhzcmMsIGFkZHJUZW1wUmVnaXN0
ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgc3RvcmUz
MihSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGFkZHJlc3MsIGludCBmaXhlZCA9IDApCisgICAg
eworICAgICAgICBpZiAoYWRkcmVzcy5vZmZzZXQgPj0gLTMyNzY4ICYmIGFkZHJlc3Mub2Zmc2V0
IDw9IDMyNzY3ICYmIGZpeGVkID09IDApIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAg
ICAgc2xsICAgICBhZGRyVGVtcCwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZQorICAgICAg
ICAgICAgICAgIGFkZHUgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBhZGRyZXNzLmJhc2UKKyAgICAg
ICAgICAgICAgICBzdyAgICAgIHNyYywgYWRkcmVzcy5vZmZzZXQoYWRkclRlbXApCisgICAgICAg
ICAgICAqLworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2xsKGFkZHJUZW1wUmVnaXN0ZXIsIGFk
ZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRk
dShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UpOworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuc3coc3JjLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9m
ZnNldCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKgorICAgICAg
ICAgICAgICAgIHNsbCAgICAgYWRkclRlbXAsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUK
KyAgICAgICAgICAgICAgICBhZGR1ICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgYWRkcmVzcy5iYXNl
CisgICAgICAgICAgICAgICAgbHVpICAgICBpbW1UZW1wLCBhZGRyZXNzLm9mZnNldCA+PiAxNgor
ICAgICAgICAgICAgICAgIGFkZHUgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBpbW1UZW1wCisgICAg
ICAgICAgICAgICAgc3cgICAgICBzcmMsIChhZGRyZXNzLm9mZnNldCAmIDB4ZmZmZikoYXQpCisg
ICAgICAgICAgICAqLworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2xsKGFkZHJUZW1wUmVnaXN0
ZXIsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2Up
OworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHVpKGltbVRlbXBSZWdpc3RlciwgYWRkcmVzcy5v
ZmZzZXQgPj4gMTYpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lz
dGVyLCBhZGRyVGVtcFJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbW1U
ZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3coc3JjLCBhZGRyVGVtcFJl
Z2lzdGVyLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHN0
b3JlMzIoSW1tMzIgaW1tLCBJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcywgaW50IGZpeGVkID0gMCkK
KyAgICB7CisgICAgICAgIGlmIChhZGRyZXNzLm9mZnNldCA+PSAtMzI3NjggJiYgYWRkcmVzcy5v
ZmZzZXQgPD0gMzI3NjcgJiYgZml4ZWQgPT0gMCkgeworICAgICAgICAgICAgaWYgKGltbS5tX3Zh
bHVlID09IDApCisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3coTUlQU1JlZ2lzdGVyczo6
emVybywgYWRkcmVzcy5iYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJl
c3Mub2Zmc2V0KTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG1fYXNzZW1i
bGVyLmxpKGltbVRlbXBSZWdpc3RlciwgaW1tLm1fdmFsdWUsIGZpeGVkKTsKKyAgICAgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5zdyhpbW1UZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSwgYWRkcmVz
cy5vZmZzZXQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICBsdWkgICAgIGFkZHJUZW1wLCBvZmZzZXQgPj4g
MTYKKyAgICAgICAgICAgICAgICBhZGR1ICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgYmFzZQorICAg
ICAgICAgICAgICAgIHN3ICAgICAgaW1tVGVtcCwgKG9mZnNldCAmIDB4ZmZmZikoYWRkclRlbXAp
CisgICAgICAgICAgICAgICovCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sdWkoYWRkclRlbXBS
ZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQgPj4gMTYpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
YWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UpOwor
ICAgICAgICAgICAgaWYgKGltbS5tX3ZhbHVlID09IDAgJiYgZml4ZWQgPT0gMCkKKyAgICAgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5zdyhNSVBTUmVnaXN0ZXJzOjp6ZXJvLCBhZGRyVGVtcFJlZ2lz
dGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3Mub2Zmc2V0KTsKKyAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxpKGltbVRlbXBS
ZWdpc3RlciwgaW1tLm1fdmFsdWUsIGZpeGVkKTsKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5zdyhpbW1UZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYWRkcmVzcy5vZmZzZXQpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorCisgICAgdm9pZCBzdG9yZTMyKFJlZ2lzdGVySUQgc3JjLCB2b2lkKiBhZGRyZXNz
LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICAgIGxpICBhZGRy
VGVtcCwgYWRkcmVzcworICAgICAgICAgICAgc3cgIHNyYywgMChhZGRyVGVtcCkKKyAgICAgICAg
Ki8KKyAgICAgICAgbV9hc3NlbWJsZXIubGkoYWRkclRlbXBSZWdpc3RlciwgcmVpbnRlcnByZXRf
Y2FzdDxNSVBTV29yZD4oYWRkcmVzcyksIGZpeGVkKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3co
c3JjLCBhZGRyVGVtcFJlZ2lzdGVyLCAwKTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlMzIoSW1t
MzIgaW1tLCB2b2lkKiBhZGRyZXNzLCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgLyoK
KyAgICAgICAgICAgIGxpICBpbW1UZW1wLCBpbW0KKyAgICAgICAgICAgIGxpICBhZGRyVGVtcCwg
YWRkcmVzcworICAgICAgICAgICAgc3cgIHNyYywgMChhZGRyVGVtcCkKKyAgICAgICAgKi8KKyAg
ICAgICAgaWYgKGltbS5tX3ZhbHVlID09IDAgJiYgZml4ZWQgPT0gMCkgeworICAgICAgICAgICAg
bV9hc3NlbWJsZXIubGkoYWRkclRlbXBSZWdpc3RlciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlaW50ZXJwcmV0X2Nhc3Q8TUlQU1dvcmQ+KGFkZHJlc3MpLCBmaXhlZCk7CisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5zdyhNSVBTUmVnaXN0ZXJzOjp6ZXJvLCBhZGRyVGVtcFJlZ2lzdGVy
LCAwKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LmxpKGltbVRlbXBSZWdpc3RlciwgaW1tLm1fdmFsdWUsIGZpeGVkKTsKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLmxpKGFkZHJUZW1wUmVnaXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZWludGVycHJldF9jYXN0PE1JUFNXb3JkPihhZGRyZXNzKSwgZml4ZWQpOworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuc3coaW1tVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCAwKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnM6CisK
KyAgICBib29sIHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpIGNvbnN0CisgICAgeworI2lmIGRlZmlu
ZWQoX19taXBzX2hhcmRfZmxvYXQpICYmICFkZWZpbmVkKF9fbWlwc19zaW5nbGVfZmxvYXQpCisg
ICAgICAgIHJldHVybiB0cnVlOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlm
CisgICAgfQorCisgICAgYm9vbCBzdXBwb3J0c0Zsb2F0aW5nUG9pbnRUcnVuY2F0ZSgpIGNvbnN0
CisgICAgeworI2lmIGRlZmluZWQoX19taXBzX2hhcmRfZmxvYXQpICYmICFkZWZpbmVkKF9fbWlw
c19zaW5nbGVfZmxvYXQpICYmIChfX21pcHMgPiAxKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyNl
bHNlCisgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorICAgIH0KKworICAgIC8vIFN0YWNr
IG1hbmlwdWxhdGlvbiBvcGVyYXRpb25zOgorICAgIC8vCisgICAgLy8gVGhlIEFCSSBpcyBhc3N1
bWVkIHRvIHByb3ZpZGUgYSBzdGFjayBhYnN0cmFjdGlvbiB0byBtZW1vcnksCisgICAgLy8gY29u
dGFpbmluZyBtYWNoaW5lIHdvcmQgc2l6ZWQgdW5pdHMgb2YgZGF0YS4gIFB1c2ggYW5kIHBvcAor
ICAgIC8vIG9wZXJhdGlvbnMgYWRkIGFuZCByZW1vdmUgYSBzaW5nbGUgcmVnaXN0ZXIgc2l6ZWQg
dW5pdCBvZiBkYXRhCisgICAgLy8gdG8gb3IgZnJvbSB0aGUgc3RhY2suICBQZWVrIGFuZCBwb2tl
IG9wZXJhdGlvbnMgcmVhZCBvciB3cml0ZQorICAgIC8vIHZhbHVlcyBvbiB0aGUgc3RhY2ssIHdp
dGhvdXQgbW92aW5nIHRoZSBjdXJyZW50IHN0YWNrIHBvc2l0aW9uLgorCisgICAgdm9pZCBwb3Ao
UmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubHcoZGVzdCwgTUlQ
U1JlZ2lzdGVyczo6c3AsIDApOworICAgICAgICBtX2Fzc2VtYmxlci5hZGRpdShNSVBTUmVnaXN0
ZXJzOjpzcCwgTUlQU1JlZ2lzdGVyczo6c3AsIDQpOworICAgIH0KKworICAgIHZvaWQgcHVzaChS
ZWdpc3RlcklEIHNyYykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGl1KE1JUFNSZWdp
c3RlcnM6OnNwLCBNSVBTUmVnaXN0ZXJzOjpzcCwgLTQpOworICAgICAgICBtX2Fzc2VtYmxlci5z
dyhzcmMsIE1JUFNSZWdpc3RlcnM6OnNwLCAwKTsKKyAgICB9CisKKyAgICB2b2lkIHB1c2goQWRk
cmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbG9hZDMyKGFkZHJlc3MsIGRhdGFUZW1wUmVn
aXN0ZXIpOworICAgICAgICBwdXNoKGRhdGFUZW1wUmVnaXN0ZXIpOworICAgIH0KKworICAgIHZv
aWQgcHVzaChJbW0zMiBpbW0pCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5saShpbW1UZW1w
UmVnaXN0ZXIsIGltbS5tX3ZhbHVlKTsKKyAgICAgICAgcHVzaChpbW1UZW1wUmVnaXN0ZXIpOwor
ICAgIH0KKworICAgIC8vIFJlZ2lzdGVyIG1vdmUgb3BlcmF0aW9uczoKKyAgICAvLworICAgIC8v
IE1vdmUgdmFsdWVzIGluIHJlZ2lzdGVycy4KKworICAgIHZvaWQgbW92ZShJbW0zMiBpbW0sIFJl
Z2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIGlmIChpbW0ubV92
YWx1ZSA9PSAwICYmIGZpeGVkID09IDApCisgICAgICAgICAgICBtb3ZlKE1JUFNSZWdpc3RlcnM6
Onplcm8sIGRlc3QsIGZpeGVkKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9hc3NlbWJs
ZXIubGkoZGVzdCwgaW1tLm1fdmFsdWUsIGZpeGVkKTsKKyAgICB9CisKKyAgICB2b2lkIG1vdmUo
UmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7Cisg
ICAgICAgIGlmIChzcmMgPT0gZGVzdCAmJiBmaXhlZCA9PSAwKQorICAgICAgICAgICAgOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZlKGRlc3QsIHNyYyk7CisgICAg
fQorCisgICAgdm9pZCBtb3ZlKEltbVB0ciBpbW0sIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVk
ID0gMCkKKyAgICB7CisgICAgICAgIG1vdmUoSW1tMzIoaW1tKSwgZGVzdCwgZml4ZWQpOworICAg
IH0KKworICAgIHZvaWQgc3dhcChSZWdpc3RlcklEIHJlZzEsIFJlZ2lzdGVySUQgcmVnMiwgaW50
IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIG1vdmUocmVnMSwgaW1tVGVtcFJlZ2lzdGVyLCBm
aXhlZCk7CisgICAgICAgIG1vdmUocmVnMiwgcmVnMSwgZml4ZWQpOworICAgICAgICBtb3ZlKGlt
bVRlbXBSZWdpc3RlciwgcmVnMiwgZml4ZWQpOworICAgIH0KKworICAgIHZvaWQgc2lnbkV4dGVu
ZDMyVG9QdHIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkK
KyAgICB7CisgICAgICAgIGlmIChzcmMgPT0gZGVzdCAmJiBmaXhlZCA9PSAwKQorICAgICAgICAg
ICAgOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtb3ZlKHNyYywgZGVzdCwgZml4ZWQpOwor
ICAgIH0KKworICAgIHZvaWQgemVyb0V4dGVuZDMyVG9QdHIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lz
dGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIGlmIChzcmMgPT0gZGVz
dCAmJiBmaXhlZCA9PSAwKQorICAgICAgICAgICAgOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBtb3ZlKHNyYywgZGVzdCwgZml4ZWQpOworICAgIH0KKworICAgIC8vIEZvcndhcmRzIC8gZXh0
ZXJuYWwgY29udHJvbCBmbG93IG9wZXJhdGlvbnM6CisgICAgLy8KKyAgICAvLyBUaGlzIHNldCBv
ZiBqdW1wIGFuZCBjb25kaXRpb25hbCBicmFuY2ggb3BlcmF0aW9ucyByZXR1cm4gYSBKdW1wCisg
ICAgLy8gb2JqZWN0IHdoaWNoIG1heSBsaW5rZWQgYXQgYSBsYXRlciBwb2ludCwgYWxsb3cgZm9y
d2FyZHMganVtcCwKKyAgICAvLyBvciBqdW1wcyB0aGF0IHdpbGwgcmVxdWlyZSBleHRlcm5hbCBs
aW5rYWdlIChhZnRlciB0aGUgY29kZSBoYXMgYmVlbgorICAgIC8vIHJlbG9jYXRlZCkuCisgICAg
Ly8KKyAgICAvLyBGb3IgYnJhbmNoZXMsIHNpZ25lZCA8LCA+LCA8PSBhbmQgPj0gYXJlIGRlbm90
ZWQgYXMgbCwgZywgbGUsIGFuZCBnZQorICAgIC8vIHJlc3BlY2l0dmVseSwgZm9yIHVuc2lnbmVk
IGNvbXBhcmlzb25zIHRoZSBuYW1lcyBiLCBhLCBiZSwgYW5kIGFlIGFyZQorICAgIC8vIHVzZWQg
KHJlcHJlc2VudGluZyB0aGUgbmFtZXMgJ2JlbG93JyBhbmQgJ2Fib3ZlJykuCisgICAgLy8KKyAg
ICAvLyBPcGVyYW5kcyB0byB0aGUgY29tcGFyaXNpb24gYXJlIHByb3ZpZGVkIGluIHRoZSBleHBl
Y3RlZCBvcmRlciwgZS5nLgorICAgIC8vIGpsZTMyKHJlZzEsIEltbTMyKDUpKSB3aWxsIGJyYW5j
aCBpZiB0aGUgdmFsdWUgaGVsZCBpbiByZWcxLCB3aGVuCisgICAgLy8gdHJlYXRlZCBhcyBhIHNp
Z25lZCAzMmJpdCB2YWx1ZSwgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDUuCisgICAgLy8KKyAg
ICAvLyBqeiBhbmQgam56IHRlc3Qgd2hldGhlciB0aGUgZmlyc3Qgb3BlcmFuZCBpcyBlcXVhbCB0
byB6ZXJvLCBhbmQgdGFrZQorICAgIC8vIGFuIG9wdGlvbmFsIHNlY29uZCBvcGVyYW5kIG9mIGEg
bWFzayB1bmRlciB3aGljaCB0byBwZXJmb3JtIHRoZSB0ZXN0LgorCisgICAgSnVtcCBicmFuY2gz
MihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0LCBpbnQg
Zml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgaWYgKGNvbmQgPT0gRXF1YWwgfHwgY29uZCA9PSBa
ZXJvKQorICAgICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuYnJhbmNoX2VxKGxlZnQs
IHJpZ2h0KSk7CisgICAgICAgIGVsc2UgaWYgKGNvbmQgPT0gTm90RXF1YWwgfHwgY29uZCA9PSBO
b25aZXJvKQorICAgICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuYnJhbmNoX25lKGxl
ZnQsIHJpZ2h0KSk7CisgICAgICAgIGVsc2UgaWYgKGNvbmQgPT0gQWJvdmUpIHsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLnNsdHUoY21wVGVtcFJlZ2lzdGVyLCByaWdodCwgbGVmdCk7CisgICAg
ICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5icmFuY2hfbmUoY21wVGVtcFJlZ2lzdGVy
LCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY29u
ZCA9PSBBYm92ZU9yRXF1YWwpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdHUoY21wVGVt
cFJlZ2lzdGVyLCBsZWZ0LCByaWdodCk7CisgICAgICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2Vt
Ymxlci5icmFuY2hfZXEoY21wVGVtcFJlZ2lzdGVyLCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY29uZCA9PSBCZWxvdykgeworICAgICAgICAgICAg
bV9hc3NlbWJsZXIuc2x0dShjbXBUZW1wUmVnaXN0ZXIsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAg
ICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmJyYW5jaF9uZShjbXBUZW1wUmVnaXN0ZXIsIE1J
UFNSZWdpc3RlcnM6Onplcm8pKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChjb25kID09
IEJlbG93T3JFcXVhbCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0dShjbXBUZW1wUmVn
aXN0ZXIsIHJpZ2h0LCBsZWZ0KTsKKyAgICAgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVy
LmJyYW5jaF9lcShjbXBUZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onplcm8pKTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoY29uZCA9PSBHcmVhdGVyVGhhbikgeworICAgICAgICAgICAgbV9h
c3NlbWJsZXIuc2x0KGNtcFRlbXBSZWdpc3RlciwgcmlnaHQsIGxlZnQpOworICAgICAgICAgICAg
cmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuYnJhbmNoX25lKGNtcFRlbXBSZWdpc3RlciwgTUlQU1Jl
Z2lzdGVyczo6emVybykpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGNvbmQgPT0gR3Jl
YXRlclRoYW5PckVxdWFsKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHQoY21wVGVtcFJl
Z2lzdGVyLCBsZWZ0LCByaWdodCk7CisgICAgICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxl
ci5icmFuY2hfZXEoY21wVGVtcFJlZ2lzdGVyLCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKSk7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY29uZCA9PSBMZXNzVGhhbikgeworICAgICAgICAgICAg
bV9hc3NlbWJsZXIuc2x0KGNtcFRlbXBSZWdpc3RlciwgbGVmdCwgcmlnaHQpOworICAgICAgICAg
ICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuYnJhbmNoX25lKGNtcFRlbXBSZWdpc3RlciwgTUlQ
U1JlZ2lzdGVyczo6emVybykpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGNvbmQgPT0g
TGVzc1RoYW5PckVxdWFsKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHQoY21wVGVtcFJl
Z2lzdGVyLCByaWdodCwgbGVmdCk7CisgICAgICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxl
ci5icmFuY2hfZXEoY21wVGVtcFJlZ2lzdGVyLCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKSk7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY29uZCA9PSBPdmVyZmxvdykgeworICAgICAgICAgICAg
LyoKKyAgICAgICAgICAgICAgICB4b3IgICAgIGNtcFRlbXAsIGxlZnQsIHJpZ2h0CisgICAgICAg
ICAgICAgICAgYmdleiAgICBOb19vdmVyZmxvdywgY21wVGVtcCAgICAjIHNhbWUgc2lnbiBiaXQg
LT4gbm8gb3ZlcmZsb3cKKyAgICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAgICAgICBzdWJ1
ICAgIGNtcFRlbXAsIGxlZnQsIHJpZ2h0CisgICAgICAgICAgICAgICAgeG9yICAgICBjbXBUZW1w
LCBjbXBUZW1wLCBsZWZ0CisgICAgICAgICAgICAgICAgYmdleiAgICBOb19vdmVyZmxvdywgY21w
VGVtcCAgICAjIHNhbWUgc2lnbiBiaXQgLT4gbm8gb3ZlcmZsb3cKKyAgICAgICAgICAgICAgICBu
b3AKKyAgICAgICAgICAgICAgICBiICAgICAgIE92ZXJmbG93CisgICAgICAgICAgICAgICAgbm9w
CisgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAg
IE5vX292ZXJmbG93OgorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnhv
cl9pbnNuKGNtcFRlbXBSZWdpc3RlciwgbGVmdCwgcmlnaHQpOworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIuYmdleihjbXBUZW1wUmVnaXN0ZXIsIDkpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
bm9wKCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdWJ1KGNtcFRlbXBSZWdpc3RlciwgbGVm
dCwgcmlnaHQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIueG9yX2luc24oY21wVGVtcFJlZ2lz
dGVyLCBjbXBUZW1wUmVnaXN0ZXIsIGxlZnQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYmdl
eihjbXBUZW1wUmVnaXN0ZXIsIDUpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7Cisg
ICAgICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qbXAoKSk7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSBpZiAoY29uZCA9PSBTaWduZWQpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LnN1YnUoY21wVGVtcFJlZ2lzdGVyLCBsZWZ0LCByaWdodCk7CisgICAgICAgICAgICAvLyBDaGVj
ayBpZiB0aGUgcmVzdWx0IGlzIG5lZ2F0aXZlLgorICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0
KGNtcFRlbXBSZWdpc3RlciwgY21wVGVtcFJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE1JUFNSZWdpc3RlcnM6Onplcm8pOworICAgICAgICAgICAgcmV0dXJuIEp1bXAobV9h
c3NlbWJsZXIuYnJhbmNoX25lKGNtcFRlbXBSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6emVybykp
OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEFTU0VSVCgwKTsKKworICAg
ICAgICByZXR1cm4gSnVtcCgpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoMzIoQ29uZGl0aW9u
IGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgSW1tMzIgcmlnaHQsIGludCBmaXhlZCA9IDApCisgICAg
eworICAgICAgICBtb3ZlKHJpZ2h0LCBpbW1UZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAgICAgICAg
cmV0dXJuIGJyYW5jaDMyKGNvbmQsIGxlZnQsIGltbVRlbXBSZWdpc3RlciwgZml4ZWQpOworICAg
IH0KKworICAgIEp1bXAgYnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwg
QWRkcmVzcyByaWdodCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIGxvYWQzMihyaWdo
dCwgZGF0YVRlbXBSZWdpc3RlciwgZml4ZWQpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29u
ZCwgbGVmdCwgZGF0YVRlbXBSZWdpc3RlciwgZml4ZWQpOworICAgIH0KKworICAgIEp1bXAgYnJh
bmNoMzIoQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCwgaW50
IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIGxvYWQzMihsZWZ0LCBkYXRhVGVtcFJlZ2lzdGVy
LCBmaXhlZCk7CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBkYXRhVGVtcFJlZ2lzdGVy
LCByaWdodCwgZml4ZWQpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoMzIoQ29uZGl0aW9uIGNv
bmQsIEFkZHJlc3MgbGVmdCwgSW1tMzIgcmlnaHQsIGludCBmaXhlZCA9IDApCisgICAgeworICAg
ICAgICBsb2FkMzIobGVmdCwgZGF0YVRlbXBSZWdpc3RlciwgZml4ZWQpOworICAgICAgICBtb3Zl
KHJpZ2h0LCBpbW1UZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMy
KGNvbmQsIGRhdGFUZW1wUmVnaXN0ZXIsIGltbVRlbXBSZWdpc3RlciwgZml4ZWQpOworICAgIH0K
KworICAgIEp1bXAgYnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIEJhc2VJbmRleCBsZWZ0LCBJbW0z
MiByaWdodCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIGxvYWQzMihsZWZ0LCBkYXRh
VGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgICAgIC8vIEJlIGNhcmVmdWwgdGhhdCB0aGUgcHJl
dmlvdXMgbG9hZDMyKCkgdXNlcyBpbW1UZW1wUmVnaXN0ZXIuCisgICAgICAgIC8vIFNvLCB3ZSBu
ZWVkIHRvIHB1dCBtb3ZlKCkgYWZ0ZXIgbG9hZDMyKCkuCisgICAgICAgIG1vdmUocmlnaHQsIGlt
bVRlbXBSZWdpc3RlciwgZml4ZWQpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgZGF0
YVRlbXBSZWdpc3RlciwgaW1tVGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgfQorCisgICAgSnVt
cCBicmFuY2gzMihDb25kaXRpb24gY29uZCwgQWJzb2x1dGVBZGRyZXNzIGxlZnQsIFJlZ2lzdGVy
SUQgcmlnaHQsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBsb2FkMzIobGVmdC5tX3B0
ciwgZGF0YVRlbXBSZWdpc3RlciwgZml4ZWQpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29u
ZCwgZGF0YVRlbXBSZWdpc3RlciwgcmlnaHQsIGZpeGVkKTsKKyAgICB9CisKKyAgICBKdW1wIGJy
YW5jaDMyKENvbmRpdGlvbiBjb25kLCBBYnNvbHV0ZUFkZHJlc3MgbGVmdCwgSW1tMzIgcmlnaHQs
IGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBsb2FkMzIobGVmdC5tX3B0ciwgZGF0YVRl
bXBSZWdpc3RlciwgZml4ZWQpOworICAgICAgICBtb3ZlKHJpZ2h0LCBpbW1UZW1wUmVnaXN0ZXIs
IGZpeGVkKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIGRhdGFUZW1wUmVnaXN0ZXIs
IGltbVRlbXBSZWdpc3RlciwgZml4ZWQpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoMTYoQ29u
ZGl0aW9uIGNvbmQsIEJhc2VJbmRleCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0LCBpbnQgZml4ZWQg
PSAwKQorICAgIHsKKyAgICAgICAgbG9hZDE2KGxlZnQsIGRhdGFUZW1wUmVnaXN0ZXIsIGZpeGVk
KTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIGRhdGFUZW1wUmVnaXN0ZXIsIHJpZ2h0
LCBmaXhlZCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2gxNihDb25kaXRpb24gY29uZCwgQmFz
ZUluZGV4IGxlZnQsIEltbTMyIHJpZ2h0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAg
bG9hZDE2KGxlZnQsIGRhdGFUZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAgICAgICAgLy8gQmUgY2Fy
ZWZ1bCB0aGF0IHRoZSBwcmV2aW91cyBsb2FkMTYoKSB1c2VzIGltbVRlbXBSZWdpc3Rlci4KKyAg
ICAgICAgLy8gU28sIHdlIG5lZWQgdG8gcHV0IG1vdmUoKSBhZnRlciBsb2FkMTYoKS4KKyAgICAg
ICAgbW92ZShyaWdodCwgaW1tVGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgICAgIHJldHVybiBi
cmFuY2gzMihjb25kLCBkYXRhVGVtcFJlZ2lzdGVyLCBpbW1UZW1wUmVnaXN0ZXIsIGZpeGVkKTsK
KyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFRlc3QzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJ
RCByZWcsIFJlZ2lzdGVySUQgbWFzaywgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIEFT
U0VSVCgoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmFuZF9pbnNuKGNtcFRlbXBSZWdpc3RlciwgcmVnLCBtYXNrKTsKKyAgICAgICAgaWYg
KGNvbmQgPT0gWmVybykKKyAgICAgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmJyYW5j
aF9lcShjbXBUZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onplcm8pKTsKKyAgICAgICAgcmV0
dXJuIEp1bXAobV9hc3NlbWJsZXIuYnJhbmNoX25lKGNtcFRlbXBSZWdpc3RlciwgTUlQU1JlZ2lz
dGVyczo6emVybykpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoVGVzdDMyKENvbmRpdGlvbiBj
b25kLCBSZWdpc3RlcklEIHJlZywgSW1tMzIgbWFzayA9IEltbTMyKC0xKSwgaW50IGZpeGVkID0g
MCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25a
ZXJvKSk7CisgICAgICAgIGlmIChtYXNrLm1fdmFsdWUgPT0gLTEgJiYgZml4ZWQgPT0gMCkgewor
ICAgICAgICAgICAgaWYgKGNvbmQgPT0gWmVybykKKyAgICAgICAgICAgICAgICByZXR1cm4gSnVt
cChtX2Fzc2VtYmxlci5icmFuY2hfZXEocmVnLCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKSk7CisgICAg
ICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5icmFuY2hfbmUocmVnLCBNSVBTUmVnaXN0
ZXJzOjp6ZXJvKSk7CisgICAgICAgIH0KKyAgICAgICAgbV9hc3NlbWJsZXIubGkoaW1tVGVtcFJl
Z2lzdGVyLCBtYXNrLm1fdmFsdWUsIGZpeGVkKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3Qz
Mihjb25kLCByZWcsIGltbVRlbXBSZWdpc3RlciwgZml4ZWQpOworICAgIH0KKworICAgIEp1bXAg
YnJhbmNoVGVzdDMyKENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGFkZHJlc3MsIEltbTMyIG1hc2sg
PSBJbW0zMigtMSksIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBsb2FkMzIoYWRkcmVz
cywgZGF0YVRlbXBSZWdpc3RlciwgZml4ZWQpOworICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDMy
KGNvbmQsIGRhdGFUZW1wUmVnaXN0ZXIsIG1hc2ssIGZpeGVkKTsKKyAgICB9CisKKyAgICBKdW1w
IGJyYW5jaFRlc3QzMihDb25kaXRpb24gY29uZCwgQmFzZUluZGV4IGFkZHJlc3MsIEltbTMyIG1h
c2sgPSBJbW0zMigtMSksIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBsb2FkMzIoYWRk
cmVzcywgZGF0YVRlbXBSZWdpc3RlciwgZml4ZWQpOworICAgICAgICByZXR1cm4gYnJhbmNoVGVz
dDMyKGNvbmQsIGRhdGFUZW1wUmVnaXN0ZXIsIG1hc2ssIGZpeGVkKTsKKyAgICB9CisKKyAgICBK
dW1wIGp1bXAoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuam1wKCkp
OworICAgIH0KKworICAgIHZvaWQganVtcChSZWdpc3RlcklEIHRhcmdldCkKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmptcF9yZWdpc3Rlcih0YXJnZXQpOworICAgIH0KKworICAgIHZvaWQg
anVtcChBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBpbnQgZml4ZWQgPSAxOworICAg
ICAgICBsb2FkMzIoYWRkcmVzcywgTUlQU1JlZ2lzdGVyczo6dDksIGZpeGVkKTsKKyAgICAgICAg
bV9hc3NlbWJsZXIuam1wX3JlZ2lzdGVyKE1JUFNSZWdpc3RlcnM6OnQ5KTsKKyAgICB9CisKKyAg
ICAvLyBBcml0aG1ldGljIGNvbnRyb2wgZmxvdyBvcGVyYXRpb25zOgorICAgIC8vCisgICAgLy8g
VGhpcyBzZXQgb2YgY29uZGl0aW9uYWwgYnJhbmNoIG9wZXJhdGlvbnMgYnJhbmNoIGJhc2VkCisg
ICAgLy8gb24gdGhlIHJlc3VsdCBvZiBhbiBhcml0aG1ldGljIG9wZXJhdGlvbi4gIFRoZSBvcGVy
YXRpb24KKyAgICAvLyBpcyBwZXJmb3JtZWQgYXMgbm9ybWFsLCBzdG9yaW5nIHRoZSByZXN1bHQu
CisgICAgLy8KKyAgICAvLyAqIGp6IG9wZXJhdGlvbnMgYnJhbmNoIGlmIHRoZSByZXN1bHQgaXMg
emVyby4KKyAgICAvLyAqIGpvIG9wZXJhdGlvbnMgYnJhbmNoIGlmIHRoZSAoc2lnbmVkKSBhcml0
aG1ldGljCisgICAgLy8gICBvcGVyYXRpb24gY2F1c2VkIGFuIG92ZXJmbG93IHRvIG9jY3VyLgor
CisgICAgSnVtcCBicmFuY2hBZGQzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBzcmMsIFJl
Z2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoY29u
ZCA9PSBPdmVyZmxvdykgfHwgKGNvbmQgPT0gU2lnbmVkKSB8fCAoY29uZCA9PSBaZXJvKSB8fCAo
Y29uZCA9PSBOb25aZXJvKSk7CisgICAgICAgIGlmIChjb25kID09IE92ZXJmbG93KSB7CisgICAg
ICAgICAgICAvKgorICAgICAgICAgICAgICAgIG1vdmUgICAgZGVzdCwgZGF0YVRlbXAKKyAgICAg
ICAgICAgICAgICB4b3IgICAgIGNtcFRlbXAsIGRhdGFUZW1wLCBzcmMKKyAgICAgICAgICAgICAg
ICBibHR6ICAgIGNtcFRlbXAsIE5vX292ZXJmbG93ICAgICMgZGlmZiBzaWduIGJpdCAtPiBubyBv
dmVyZmxvdworICAgICAgICAgICAgICAgIGFkZHUgICAgZGVzdCwgZGF0YVRlbXAsIHNyYworICAg
ICAgICAgICAgICAgIHhvciAgICAgY21wVGVtcCwgZGVzdCwgZGF0YVRlbXAKKyAgICAgICAgICAg
ICAgICBiZ2V6ICAgIGNtcFRlbXAsIE5vX292ZXJmbG93ICAgICMgc2FtZSBzaWduIGJpZyAtPiBu
byBvdmVyZmxvdworICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgICAgIGIgICAgICAg
T3ZlcmZsb3cKKyAgICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAgICAgICBub3AKKyAgICAg
ICAgICAgICAgICBub3AKKyAgICAgICAgICAgIE5vX292ZXJmbG93OgorICAgICAgICAgICAgKi8K
KyAgICAgICAgICAgIG1vdmUoZGVzdCwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICBt
X2Fzc2VtYmxlci54b3JfaW5zbihjbXBUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsIHNy
Yyk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5ibHR6KGNtcFRlbXBSZWdpc3RlciwgOCk7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGRlc3QsIGRhdGFUZW1wUmVnaXN0ZXIsIHNyYyk7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3JfaW5zbihjbXBUZW1wUmVnaXN0ZXIsIGRlc3Qs
IGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYmdleihjbXBUZW1w
UmVnaXN0ZXIsIDUpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgICAg
ICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qbXAoKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZSBpZiAoY29uZCA9PSBTaWduZWQpIHsKKyAgICAgICAgICAgIGFkZDMyKHNyYywgZGVzdCwgZml4
ZWQpOworICAgICAgICAgICAgLy8gQ2hlY2sgaWYgZGVzdCBpcyBuZWdhdGl2ZS4KKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLnNsdChjbXBUZW1wUmVnaXN0ZXIsIGRlc3QsIE1JUFNSZWdpc3RlcnM6
Onplcm8pOworICAgICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuYnJhbmNoX25lKGNt
cFRlbXBSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6emVybykpOworICAgICAgICB9CisgICAgICAg
IGVsc2UgaWYgKGNvbmQgPT0gWmVybykgeworICAgICAgICAgICAgYWRkMzIoc3JjLCBkZXN0LCBm
aXhlZCk7CisgICAgICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5icmFuY2hfZXEoZGVz
dCwgTUlQU1JlZ2lzdGVyczo6emVybykpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGNv
bmQgPT0gTm9uWmVybykgeworICAgICAgICAgICAgYWRkMzIoc3JjLCBkZXN0LCBmaXhlZCk7Cisg
ICAgICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5icmFuY2hfbmUoZGVzdCwgTUlQU1Jl
Z2lzdGVyczo6emVybykpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIEp1bXAoKTsKKyAg
ICB9CisKKyAgICBKdW1wIGJyYW5jaEFkZDMyKENvbmRpdGlvbiBjb25kLCBJbW0zMiBpbW0sIFJl
Z2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVy
LmxpKGltbVRlbXBSZWdpc3RlciwgaW1tLm1fdmFsdWUsIGZpeGVkKTsKKyAgICAgICAgcmV0dXJu
IGJyYW5jaEFkZDMyKGNvbmQsIGltbVRlbXBSZWdpc3RlciwgZGVzdCwgZml4ZWQpOworICAgIH0K
KworICAgIEp1bXAgYnJhbmNoTXVsMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgc3JjLCBS
ZWdpc3RlcklEIGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBBU1NFUlQoKGNv
bmQgPT0gT3ZlcmZsb3cpIHx8IChjb25kID09IFNpZ25lZCkgfHwgKGNvbmQgPT0gWmVybykgfHwg
KGNvbmQgPT0gTm9uWmVybykpOworICAgICAgICBpZiAoY29uZCA9PSBPdmVyZmxvdykgeworICAg
ICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICBtdWx0ICAgIHNyYywgZGVzdAorICAgICAgICAg
ICAgICAgIG1maGkgICAgZGF0YVRlbXAKKyAgICAgICAgICAgICAgICBtZmxvICAgIGRlc3QKKyAg
ICAgICAgICAgICAgICBzcmEgICAgIGFkZHJUZW1wLCBkZXN0LCAzMQorICAgICAgICAgICAgICAg
IGJlcSAgICAgZGF0YVRlbXAsIGFkZHJUZW1wLCBOb19vdmVyZmxvdyAjIGFsbCBzaWduIGJpdHMg
KGJpdCA2MyB0byBiaXQgMzEpIGFyZSB0aGUgc2FtZSAtPiBubyBvdmVyZmxvdworICAgICAgICAg
ICAgICAgIG5vcAorICAgICAgICAgICAgICAgIGIgICAgICAgT3ZlcmZsb3cKKyAgICAgICAgICAg
ICAgICBub3AKKyAgICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAgICAgICBub3AKKyAgICAg
ICAgICAgIE5vX292ZXJmbG93OgorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLm11bHQoc3JjLCBkZXN0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1maGkoZGF0YVRl
bXBSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tZmxvKGRlc3QpOworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuc3JhKGFkZHJUZW1wUmVnaXN0ZXIsIGRlc3QsIDMxKTsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLmJlcShkYXRhVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVy
LCA1KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICAgICAgcmV0dXJu
IEp1bXAobV9hc3NlbWJsZXIuam1wKCkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGNv
bmQgPT0gU2lnbmVkKSB7CisgICAgICAgICAgICBtdWwzMihzcmMsIGRlc3QsIGZpeGVkKTsKKyAg
ICAgICAgICAgIC8vIENoZWNrIGlmIGRlc3QgaXMgbmVnYXRpdmUuCisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5zbHQoY21wVGVtcFJlZ2lzdGVyLCBkZXN0LCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsK
KyAgICAgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmJyYW5jaF9uZShjbXBUZW1wUmVn
aXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onplcm8pKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlm
IChjb25kID09IFplcm8pIHsKKyAgICAgICAgICAgIG11bDMyKHNyYywgZGVzdCwgZml4ZWQpOwor
ICAgICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuYnJhbmNoX2VxKGRlc3QsIE1JUFNS
ZWdpc3RlcnM6Onplcm8pKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChjb25kID09IE5v
blplcm8pIHsKKyAgICAgICAgICAgIG11bDMyKHNyYywgZGVzdCwgZml4ZWQpOworICAgICAgICAg
ICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuYnJhbmNoX25lKGRlc3QsIE1JUFNSZWdpc3RlcnM6
Onplcm8pKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBKdW1wKCk7CisgICAgfQorCisg
ICAgSnVtcCBicmFuY2hNdWwzMihDb25kaXRpb24gY29uZCwgSW1tMzIgaW1tLCBSZWdpc3RlcklE
IHNyYywgUmVnaXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIubGkoaW1tVGVtcFJlZ2lzdGVyLCBpbW0ubV92YWx1ZSwgZml4ZWQpOworICAgICAg
ICByZXR1cm4gYnJhbmNoTXVsMzIoY29uZCwgaW1tVGVtcFJlZ2lzdGVyLCBkZXN0LCBmaXhlZCk7
CisgICAgfQorCisgICAgSnVtcCBicmFuY2hTdWIzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJ
RCBzcmMsIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIEFT
U0VSVCgoY29uZCA9PSBPdmVyZmxvdykgfHwgKGNvbmQgPT0gU2lnbmVkKSB8fCAoY29uZCA9PSBa
ZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisgICAgICAgIGlmIChjb25kID09IE92ZXJmbG93
KSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgIG1vdmUgICAgZGVzdCwgZGF0YVRl
bXAKKyAgICAgICAgICAgICAgICB4b3IgICAgIGNtcFRlbXAsIGRhdGFUZW1wLCBzcmMKKyAgICAg
ICAgICAgICAgICBiZ2V6ICAgIGNtcFRlbXAsIE5vX292ZXJmbG93ICAgICMgc2FtZSBzaWduIGJp
dCAtPiBubyBvdmVyZmxvdworICAgICAgICAgICAgICAgIHN1YnUgICAgZGVzdCwgZGF0YVRlbXAs
IHNyYworICAgICAgICAgICAgICAgIHhvciAgICAgY21wVGVtcCwgZGVzdCwgZGF0YVRlbXAKKyAg
ICAgICAgICAgICAgICBiZ2V6ICAgIGNtcFRlbXAsIE5vX292ZXJmbG93ICAgICMgc2FtZSBzaWdu
IGJpdCAtPiBubyBvdmVyZmxvdworICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgICAg
IGIgICAgICAgT3ZlcmZsb3cKKyAgICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAgICAgICBu
b3AKKyAgICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAgIE5vX292ZXJmbG93OgorICAgICAg
ICAgICAgKi8KKyAgICAgICAgICAgIG1vdmUoZGVzdCwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci54b3JfaW5zbihjbXBUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVn
aXN0ZXIsIHNyYyk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5iZ2V6KGNtcFRlbXBSZWdpc3Rl
ciwgOCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdWJ1KGRlc3QsIGRhdGFUZW1wUmVnaXN0
ZXIsIHNyYyk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3JfaW5zbihjbXBUZW1wUmVnaXN0
ZXIsIGRlc3QsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYmdl
eihjbXBUZW1wUmVnaXN0ZXIsIDUpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7Cisg
ICAgICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qbXAoKSk7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSBpZiAoY29uZCA9PSBTaWduZWQpIHsKKyAgICAgICAgICAgIHN1YjMyKHNyYywg
ZGVzdCwgZml4ZWQpOworICAgICAgICAgICAgLy8gQ2hlY2sgaWYgZGVzdCBpcyBuZWdhdGl2ZS4K
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdChjbXBUZW1wUmVnaXN0ZXIsIGRlc3QsIE1JUFNS
ZWdpc3RlcnM6Onplcm8pOworICAgICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuYnJh
bmNoX25lKGNtcFRlbXBSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6emVybykpOworICAgICAgICB9
CisgICAgICAgIGVsc2UgaWYgKGNvbmQgPT0gWmVybykgeworICAgICAgICAgICAgc3ViMzIoc3Jj
LCBkZXN0LCBmaXhlZCk7CisgICAgICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5icmFu
Y2hfZXEoZGVzdCwgTUlQU1JlZ2lzdGVyczo6emVybykpOworICAgICAgICB9CisgICAgICAgIGVs
c2UgaWYgKGNvbmQgPT0gTm9uWmVybykgeworICAgICAgICAgICAgc3ViMzIoc3JjLCBkZXN0LCBm
aXhlZCk7CisgICAgICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5icmFuY2hfbmUoZGVz
dCwgTUlQU1JlZ2lzdGVyczo6emVybykpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIEp1
bXAoKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFN1YjMyKENvbmRpdGlvbiBjb25kLCBJbW0z
MiBpbW0sIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLmxpKGltbVRlbXBSZWdpc3RlciwgaW1tLm1fdmFsdWUsIGZpeGVkKTsKKyAgICAg
ICAgcmV0dXJuIGJyYW5jaFN1YjMyKGNvbmQsIGltbVRlbXBSZWdpc3RlciwgZGVzdCwgZml4ZWQp
OworICAgIH0KKworICAgIC8vIE1pc2NlbGxhbmVvdXMgb3BlcmF0aW9uczoKKworICAgIHZvaWQg
YnJlYWtwb2ludCgpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5ia3B0KCk7CisgICAgfQor
CisgICAgQ2FsbCBuZWFyQ2FsbCgpCisgICAgeworICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2Vt
Ymxlci5mdW5jdGlvbl9jYWxsKCksIENhbGw6OkxpbmthYmxlTmVhcik7CisgICAgfQorCisgICAg
Q2FsbCBjYWxsKCkKKyAgICB7CisgICAgICAgIHJldHVybiBDYWxsKG1fYXNzZW1ibGVyLmZhcl9m
dW5jdGlvbl9jYWxsKCksIENhbGw6OkxpbmthYmxlKTsKKyAgICB9CisKKyAgICBDYWxsIGNhbGwo
UmVnaXN0ZXJJRCB0YXJnZXQpCisgICAgeworICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxl
ci5mdW5jdGlvbl9jYWxsX3ZpYV9yZWdpc3Rlcih0YXJnZXQpLCBDYWxsOjpOb25lKTsKKyAgICB9
CisKKyAgICBDYWxsIGNhbGwoQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgaW50IGZp
eGVkID0gMTsKKyAgICAgICAgbG9hZDMyKGFkZHJlc3MsIE1JUFNSZWdpc3RlcnM6OnQ5LCBmaXhl
ZCk7CisgICAgICAgIHJldHVybiBDYWxsKG1fYXNzZW1ibGVyLmZ1bmN0aW9uX2NhbGxfdmlhX3Jl
Z2lzdGVyKE1JUFNSZWdpc3RlcnM6OnQ5KSwgQ2FsbDo6Tm9uZSk7CisgICAgfQorCisgICAgdm9p
ZCByZXQoKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuam1wX3JlZ2lzdGVyKE1JUFNSZWdp
c3RlcnM6OnJhKTsKKyAgICB9CisKKyAgICB2b2lkIHNldDMyKENvbmRpdGlvbiBjb25kLCBSZWdp
c3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQsIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVk
ID0gMCkKKyAgICB7CisgICAgICAgIGlmIChjb25kID09IEVxdWFsIHx8IGNvbmQgPT0gWmVybykg
eworICAgICAgICAgICAgbV9hc3NlbWJsZXIueG9yX2luc24oZGVzdCwgbGVmdCwgcmlnaHQpOwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0aXUoZGVzdCwgZGVzdCwgMSk7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZSBpZiAoY29uZCA9PSBOb3RFcXVhbCB8fCBjb25kID09IE5vblplcm8pIHsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnhvcl9pbnNuKGRlc3QsIGxlZnQsIHJpZ2h0KTsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdHUoZGVzdCwgTUlQU1JlZ2lzdGVyczo6emVybywgZGVz
dCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY29uZCA9PSBBYm92ZSkKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLnNsdHUoZGVzdCwgcmlnaHQsIGxlZnQpOworICAgICAgICBlbHNlIGlm
IChjb25kID09IEFib3ZlT3JFcXVhbCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0dShk
ZXN0LCBsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3JpKGRlc3QsIGRl
c3QsIDEpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGNvbmQgPT0gQmVsb3cpCisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5zbHR1KGRlc3QsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgZWxz
ZSBpZiAoY29uZCA9PSBCZWxvd09yRXF1YWwpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNs
dHUoZGVzdCwgcmlnaHQsIGxlZnQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIueG9yaShkZXN0
LCBkZXN0LCAxKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29uZCA9PSBHcmVhdGVyVGhhbikK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdChkZXN0LCByaWdodCwgbGVmdCk7CisgICAgICAg
IGVsc2UgaWYgKGNvbmQgPT0gR3JlYXRlclRoYW5PckVxdWFsKSB7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5zbHQoZGVzdCwgbGVmdCwgcmlnaHQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
eG9yaShkZXN0LCBkZXN0LCAxKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChjb25kID09
IExlc3NUaGFuKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0KGRlc3QsIGxlZnQsIHJpZ2h0
KTsKKyAgICAgICAgZWxzZSBpZiAoY29uZCA9PSBMZXNzVGhhbk9yRXF1YWwpIHsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLnNsdChkZXN0LCByaWdodCwgbGVmdCk7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci54b3JpKGRlc3QsIGRlc3QsIDEpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYg
KGNvbmQgPT0gT3ZlcmZsb3cpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgeG9y
ICAgICBjbXBUZW1wLCBsZWZ0LCByaWdodAorICAgICAgICAgICAgICAgIGJnZXogICAgRG9uZSwg
Y21wVGVtcCAgICMgc2FtZSBzaWduIGJpdCAtPiBubyBvdmVyZmxvdworICAgICAgICAgICAgICAg
IG1vdmUgICAgZGVzdCwgMAorICAgICAgICAgICAgICAgIHN1YnUgICAgY21wVGVtcCwgbGVmdCwg
cmlnaHQKKyAgICAgICAgICAgICAgICB4b3IgICAgIGNtcFRlbXAsIGNtcFRlbXAsIGxlZnQgIyBk
aWZmIHNpZ24gYml0IC0+IG92ZXJmbG93CisgICAgICAgICAgICAgICAgc2x0ICAgICBkZXN0LCBj
bXBUZW1wLCAwCisgICAgICAgICAgICAgIERvbmU6CisgICAgICAgICAgICAqLworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIueG9yX2luc24oY21wVGVtcFJlZ2lzdGVyLCBsZWZ0LCByaWdodCk7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5iZ2V6KGNtcFRlbXBSZWdpc3RlciwgNCk7CisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5tb3ZlKGRlc3QsIE1JUFNSZWdpc3RlcnM6Onplcm8pOworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuc3VidShjbXBUZW1wUmVnaXN0ZXIsIGxlZnQsIHJpZ2h0KTsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLnhvcl9pbnNuKGNtcFRlbXBSZWdpc3RlciwgY21wVGVtcFJl
Z2lzdGVyLCBsZWZ0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdChkZXN0LCBjbXBUZW1w
UmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onplcm8pOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
aWYgKGNvbmQgPT0gU2lnbmVkKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdWJ1KGRlc3Qs
IGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSByZXN1bHQgaXMgbmVn
YXRpdmUuCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHQoZGVzdCwgZGVzdCwgTUlQU1JlZ2lz
dGVyczo6emVybyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHNldDMyKENvbmRpdGlv
biBjb25kLCBSZWdpc3RlcklEIGxlZnQsIEltbTMyIHJpZ2h0LCBSZWdpc3RlcklEIGRlc3QsIGlu
dCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBtb3ZlKHJpZ2h0LCBpbW1UZW1wUmVnaXN0ZXIs
IGZpeGVkKTsKKyAgICAgICAgc2V0MzIoY29uZCwgbGVmdCwgaW1tVGVtcFJlZ2lzdGVyLCBkZXN0
LCBmaXhlZCk7CisgICAgfQorCisgICAgdm9pZCBzZXRUZXN0MzIoQ29uZGl0aW9uIGNvbmQsIEFk
ZHJlc3MgYWRkcmVzcywgSW1tMzIgbWFzaywgUmVnaXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQgPSAw
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKChjb25kID09IFplcm8pIHx8IChjb25kID09IE5vblpl
cm8pKTsKKyAgICAgICAgbG9hZDMyKGFkZHJlc3MsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAg
ICBpZiAobWFzay5tX3ZhbHVlID09IC0xICYmIGZpeGVkID09IDApIHsKKyAgICAgICAgICAgIGlm
IChjb25kID09IFplcm8pCisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0aXUoZGVzdCwg
ZGF0YVRlbXBSZWdpc3RlciwgMSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
bV9hc3NlbWJsZXIuc2x0dShkZXN0LCBNSVBTUmVnaXN0ZXJzOjp6ZXJvLCBkYXRhVGVtcFJlZ2lz
dGVyKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1vdmUobWFzaywg
aW1tVGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hbmRfaW5z
bihjbXBUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgaWYgKGNvbmQgPT0g
WmVybykKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHRpdShkZXN0LCBjbXBUZW1wUmVn
aXN0ZXIsIDEpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVy
LnNsdHUoZGVzdCwgTUlQU1JlZ2lzdGVyczo6emVybywgY21wVGVtcFJlZ2lzdGVyKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIERhdGFMYWJlbDMyIG1vdmVXaXRoUGF0Y2goSW1tMzIgaW1tLCBS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpbnQgZml4ZWQgPSAxOworICAgICAgICBE
YXRhTGFiZWwzMiBsYWJlbCh0aGlzKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubGkoZGVzdCwgaW1t
Lm1fdmFsdWUsIGZpeGVkKTsKKyAgICAgICAgcmV0dXJuIGxhYmVsOworICAgIH0KKworICAgIERh
dGFMYWJlbFB0ciBtb3ZlV2l0aFBhdGNoKEltbVB0ciBpbml0aWFsVmFsdWUsIFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIGludCBmaXhlZCA9IDE7CisgICAgICAgIERhdGFMYWJlbFB0
ciBsYWJlbCh0aGlzKTsKKyAgICAgICAgTUlQU1dvcmQgdmFsdWUgPSByZWludGVycHJldF9jYXN0
PE1JUFNXb3JkPihpbml0aWFsVmFsdWUubV92YWx1ZSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxp
KGRlc3QsIHZhbHVlLCBmaXhlZCk7CisgICAgICAgIHJldHVybiBsYWJlbDsKKyAgICB9CisKKyAg
ICBKdW1wIGJyYW5jaFB0cldpdGhQYXRjaChDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0
LCBEYXRhTGFiZWxQdHImIGRhdGFMYWJlbCwgSW1tUHRyIGluaXRpYWxSaWdodFZhbHVlID0gSW1t
UHRyKDApKQorICAgIHsKKyAgICAgICAgaW50IGZpeGVkID0gMTsKKyAgICAgICAgZGF0YUxhYmVs
ID0gbW92ZVdpdGhQYXRjaChpbml0aWFsUmlnaHRWYWx1ZSwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAg
ICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIGxlZnQsIGltbVRlbXBSZWdpc3RlciwgZml4ZWQp
OworICAgIH0KKworICAgIEp1bXAgYnJhbmNoUHRyV2l0aFBhdGNoKENvbmRpdGlvbiBjb25kLCBB
ZGRyZXNzIGxlZnQsIERhdGFMYWJlbFB0ciYgZGF0YUxhYmVsLCBJbW1QdHIgaW5pdGlhbFJpZ2h0
VmFsdWUgPSBJbW1QdHIoMCkpCisgICAgeworICAgICAgICBpbnQgZml4ZWQgPSAxOworICAgICAg
ICBsb2FkMzIobGVmdCwgZGF0YVRlbXBSZWdpc3RlciwgZml4ZWQpOworICAgICAgICBkYXRhTGFi
ZWwgPSBtb3ZlV2l0aFBhdGNoKGluaXRpYWxSaWdodFZhbHVlLCBpbW1UZW1wUmVnaXN0ZXIpOwor
ICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgZGF0YVRlbXBSZWdpc3RlciwgaW1tVGVtcFJl
Z2lzdGVyLCBmaXhlZCk7CisgICAgfQorCisgICAgRGF0YUxhYmVsUHRyIHN0b3JlUHRyV2l0aFBh
dGNoKEltbVB0ciBpbml0aWFsVmFsdWUsIEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgaW50IGZpeGVkID0gMTsKKyAgICAgICAgRGF0YUxhYmVsUHRyIGRhdGFMYWJlbCA9
IG1vdmVXaXRoUGF0Y2goaW5pdGlhbFZhbHVlLCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAg
c3RvcmUzMihkYXRhVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLCBmaXhlZCk7CisgICAgICAgIHJldHVy
biBkYXRhTGFiZWw7CisgICAgfQorCisgICAgRGF0YUxhYmVsUHRyIHN0b3JlUHRyV2l0aFBhdGNo
KEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0b3JlUHRy
V2l0aFBhdGNoKEltbVB0cigwKSwgYWRkcmVzcyk7CisgICAgfQorCisgICAgQ2FsbCB0YWlsUmVj
dXJzaXZlQ2FsbCgpCisgICAgeworICAgICAgICAvLyBMaWtlIGEgbm9ybWFsIGNhbGwsIGJ1dCBk
b24ndCBsaW5rLgorICAgICAgICBpbnQgZml4ZWQgPSAxOworICAgICAgICBtX2Fzc2VtYmxlci5s
aShhZGRyVGVtcFJlZ2lzdGVyLCAwLCBmaXhlZCk7CisgICAgICAgIHJldHVybiBDYWxsKG1fYXNz
ZW1ibGVyLnRhaWxfZnVuY3Rpb25fY2FsbF92aWFfcmVnaXN0ZXIoYWRkclRlbXBSZWdpc3Rlciks
CisgICAgICAgICAgICAgICAgICAgIENhbGw6OkxpbmthYmxlKTsKKyAgICB9CisKKyAgICBDYWxs
IG1ha2VUYWlsUmVjdXJzaXZlQ2FsbChKdW1wIG9sZEp1bXApCisgICAgeworICAgICAgICBvbGRK
dW1wLmxpbmsodGhpcyk7CisgICAgICAgIHJldHVybiB0YWlsUmVjdXJzaXZlQ2FsbCgpOworICAg
IH0KKworICAgIHZvaWQgbG9hZERvdWJsZShJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcywgRlBSZWdp
c3RlcklEIGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgeworI2lmIF9fbWlwcyA9PSAxCisgICAg
ICAgIC8qCisgICAgICAgICAgICBsaSAgICAgICAgICBhZGRyVGVtcCwgYWRkcmVzcy5vZmZzZXQK
KyAgICAgICAgICAgIGFkZHUgICAgICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgYmFzZQorICAgICAg
ICAgICAgbHdjMSAgICAgICAgZGVzdCwgMChhZGRyVGVtcCkKKyAgICAgICAgICAgIGx3YzEgICAg
ICAgIGRlc3QrMSwgNChhZGRyVGVtcCkKKyAgICAgICAgICovCisgICAgICAgIG1fYXNzZW1ibGVy
LmxpKGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0LCBmaXhlZCk7CisgICAgICAgIG1f
YXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVz
cy5iYXNlKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubHdjMShkZXN0LCBhZGRyVGVtcFJlZ2lzdGVy
LCAwKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubHdjMShGUFJlZ2lzdGVySUQoZGVzdCArIDEpLCBh
ZGRyVGVtcFJlZ2lzdGVyLCA0KTsKKyNlbHNlCisgICAgICAgIGlmIChhZGRyZXNzLm9mZnNldCA+
PSAtMzI3NjggJiYgYWRkcmVzcy5vZmZzZXQgPD0gMzI3NjcgJiYgZml4ZWQgPT0gMCkgeworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIubGRjMShkZXN0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mub2Zm
c2V0KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8qCisgICAgICAg
ICAgICAgICAgbHVpICAgICBhZGRyVGVtcCwgb2Zmc2V0ID4+IDE2CisgICAgICAgICAgICAgICAg
YWRkdSAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGJhc2UKKyAgICAgICAgICAgICAgICBsZGMxICAg
IGRlc3QsIChvZmZzZXQgJiAweGZmZmYpKGFkZHJUZW1wKQorICAgICAgICAgICAgICAqLworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIubHVpKGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0
ID4+IDE2KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3Rlciwg
YWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LmxkYzEoZGVzdCwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQpOworICAgICAgICB9
CisjZW5kaWYKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlRG91YmxlKEZQUmVnaXN0ZXJJRCBzcmMs
IEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzLCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyNpZiBfX21p
cHMgPT0gMQorICAgICAgICAvKgorICAgICAgICAgICAgbGkgICAgICAgICAgYWRkclRlbXAsIGFk
ZHJlc3Mub2Zmc2V0CisgICAgICAgICAgICBhZGR1ICAgICAgICBhZGRyVGVtcCwgYWRkclRlbXAs
IGJhc2UKKyAgICAgICAgICAgIHN3YzEgICAgICAgIGRlc3QsIDAoYWRkclRlbXApCisgICAgICAg
ICAgICBzd2MxICAgICAgICBkZXN0KzEsIDQoYWRkclRlbXApCisgICAgICAgICAqLworICAgICAg
ICBtX2Fzc2VtYmxlci5saShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCwgZml4ZWQg
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJl
Z2lzdGVyLCBhZGRyZXNzLmJhc2UpOworICAgICAgICBtX2Fzc2VtYmxlci5zd2MxKHNyYywgYWRk
clRlbXBSZWdpc3RlciwgMCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnN3YzEoRlBSZWdpc3RlcklE
KHNyYyArIDEpLCBhZGRyVGVtcFJlZ2lzdGVyLCA0KTsKKyNlbHNlCisgICAgICAgIGlmIChhZGRy
ZXNzLm9mZnNldCA+PSAtMzI3NjggJiYgYWRkcmVzcy5vZmZzZXQgPD0gMzI3NjcgJiYgZml4ZWQg
PT0gMCkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNkYzEoc3JjLCBhZGRyZXNzLmJhc2UsIGFk
ZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKgorICAgICAgICAg
ICAgICAgIGx1aSAgICAgYWRkclRlbXAsIG9mZnNldCA+PiAxNgorICAgICAgICAgICAgICAgIGFk
ZHUgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBiYXNlCisgICAgICAgICAgICAgICAgc2RjMSAgICBz
cmMsIChvZmZzZXQgJiAweGZmZmYpKGFkZHJUZW1wKQorICAgICAgICAgICAgICAqLworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIubHVpKGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0ID4+
IDE2KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRk
clRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNk
YzEoc3JjLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAgIH0KKyNl
bmRpZgorICAgIH0KKworICAgIHZvaWQgYWRkRG91YmxlKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVn
aXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
YWRkX2QoZGVzdCwgZGVzdCwgc3JjKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZERvdWJsZShBZGRy
ZXNzIHNyYywgRlBSZWdpc3RlcklEIGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAg
ICBsb2FkRG91YmxlKHNyYywgZnBUZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuYWRkX2QoZGVzdCwgZGVzdCwgZnBUZW1wUmVnaXN0ZXIpOworICAgIH0KKworICAgIHZv
aWQgc3ViRG91YmxlKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0LCBpbnQgZml4
ZWQgPSAwKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3ViX2QoZGVzdCwgZGVzdCwgc3Jj
KTsKKyAgICB9CisKKyAgICB2b2lkIHN1YkRvdWJsZShBZGRyZXNzIHNyYywgRlBSZWdpc3RlcklE
IGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBsb2FkRG91YmxlKHNyYywgZnBU
ZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3ViX2QoZGVzdCwgZGVz
dCwgZnBUZW1wUmVnaXN0ZXIpOworICAgIH0KKworICAgIHZvaWQgbXVsRG91YmxlKEZQUmVnaXN0
ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubXVsX2QoZGVzdCwgZGVzdCwgc3JjKTsKKyAgICB9CisKKyAgICB2b2lk
IG11bERvdWJsZShBZGRyZXNzIHNyYywgRlBSZWdpc3RlcklEIGRlc3QsIGludCBmaXhlZCA9IDAp
CisgICAgeworICAgICAgICBsb2FkRG91YmxlKHNyYywgZnBUZW1wUmVnaXN0ZXIsIGZpeGVkKTsK
KyAgICAgICAgbV9hc3NlbWJsZXIubXVsX2QoZGVzdCwgZGVzdCwgZnBUZW1wUmVnaXN0ZXIpOwor
ICAgIH0KKworICAgIHZvaWQgY29udmVydEludDMyVG9Eb3VibGUoUmVnaXN0ZXJJRCBzcmMsIEZQ
UmVnaXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubXRjMShzcmMsIGZwVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuY3Z0X2Rf
dyhkZXN0LCBmcFRlbXBSZWdpc3Rlcik7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hEb3VibGUo
RG91YmxlQ29uZGl0aW9uIGNvbmQsIEZQUmVnaXN0ZXJJRCBsZWZ0LCBGUFJlZ2lzdGVySUQgcmln
aHQsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBpZiAoY29uZCA9PSBEb3VibGVFcXVh
bCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY19lcV9kKGxlZnQsIHJpZ2h0KTsKKyAgICAg
ICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmJjMXQoKSk7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSBpZiAoY29uZCA9PSBEb3VibGVHcmVhdGVyVGhhbikgeworICAgICAgICAgICAgbV9h
c3NlbWJsZXIuY19sdF9kKHJpZ2h0LCBsZWZ0KTsgLy8gcmV2ZXJzZQorICAgICAgICAgICAgcmV0
dXJuIEp1bXAobV9hc3NlbWJsZXIuYmMxdCgpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlm
IChjb25kID09IERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCkgeworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIuY19sZV9kKHJpZ2h0LCBsZWZ0KTsgLy8gcmV2ZXJzZQorICAgICAgICAgICAgcmV0dXJu
IEp1bXAobV9hc3NlbWJsZXIuYmMxdCgpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChj
b25kID09IERvdWJsZUxlc3NUaGFuKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jX2x0X2Qo
bGVmdCwgcmlnaHQpOworICAgICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuYmMxdCgp
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChjb25kID09IERvdWJsZUxlc3NUaGFuT3JF
cXVhbCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY19sZV9kKGxlZnQsIHJpZ2h0KTsKKyAg
ICAgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmJjMXQoKSk7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgQVNTRVJUKDApOworCisgICAgICAgIHJldHVybiBKdW1w
KCk7CisgICAgfQorCisgICAgLy8gVHJ1bmNhdGVzICdzcmMnIHRvIGFuIGludGVnZXIsIGFuZCBw
bGFjZXMgdGhlIHJlc3VsdGluZyAnZGVzdCcuCisgICAgLy8gSWYgdGhlIHJlc3VsdCBpcyBub3Qg
cmVwcmVzZW50YWJsZSBhcyBhIDMyIGJpdCB2YWx1ZSwgYnJhbmNoLgorICAgIC8vIE1heSBhbHNv
IGJyYW5jaCBmb3Igc29tZSB2YWx1ZXMgdGhhdCBhcmUgcmVwcmVzZW50YWJsZSBpbiAzMiBiaXRz
CisgICAgLy8gKHNwZWNpZmljYWxseSwgaW4gdGhpcyBjYXNlLCBJTlRfTUFYIDB4N2ZmZmZmZmYp
LgorICAgIEp1bXAgYnJhbmNoVHJ1bmNhdGVEb3VibGVUb0ludDMyKEZQUmVnaXN0ZXJJRCBzcmMs
IFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLnRydW5jX3dfZChmcFRlbXBSZWdpc3RlcixzcmMpOworICAgICAgICBtX2Fzc2VtYmxlci5t
ZmMxKGRlc3QsIGZwVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKEVxdWFs
LCBkZXN0LCBJbW0zMigweDdmZmZmZmZmKSwgZml4ZWQpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBmcmllbmQgY2xhc3MgTGlua0J1ZmZlcjsKKyAgICBmcmllbmQgY2xhc3MgUmVwYXRjaEJ1ZmZl
cjsKKworICAgIHN0YXRpYyB2b2lkIGxpbmtDYWxsKHZvaWQqIGNvZGUsIENhbGwgY2FsbCwgRnVu
Y3Rpb25QdHIgZnVuY3Rpb24pCisgICAgeworICAgICAgICBNSVBTQXNzZW1ibGVyOjpsaW5rQ2Fs
bChjb2RlLCBjYWxsLm1fam1wLCBmdW5jdGlvbi52YWx1ZSgpKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsIGNhbGwsIENvZGVMb2NhdGlvbkxh
YmVsIGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAgICAgTUlQU0Fzc2VtYmxlcjo6cmVsaW5rQ2Fs
bChjYWxsLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsIGNh
bGwsIEZ1bmN0aW9uUHRyIGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAgICAgTUlQU0Fzc2VtYmxl
cjo6cmVsaW5rQ2FsbChjYWxsLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5leGVjdXRhYmxl
QWRkcmVzcygpKTsKKyAgICB9CisKK307CisKK30KKworI2VuZGlmCisKKyNlbmRpZiAvLyBNYWNy
b0Fzc2VtYmxlck1JUFNfaApJbmRleDogeWFyci9SZWdleEpJVC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
eWFyci9SZWdleEpJVC5jcHAJKHJldmlzaW9uIDQ4MDAwKQorKysgeWFyci9SZWdleEpJVC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDE2IEBACiAgICAgc3RhdGljIGNvbnN0IFJlZ2lz
dGVySUQgcmVnVDEgPSBBUk1SZWdpc3RlcnM6OnI2OwogCiAgICAgc3RhdGljIGNvbnN0IFJlZ2lz
dGVySUQgcmV0dXJuUmVnaXN0ZXIgPSBBUk1SZWdpc3RlcnM6OnIwOworI2VsaWYgUExBVEZPUk0o
TUlQUykKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBpbnB1dCA9IE1JUFNSZWdpc3RlcnM6
OmEwOworICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGluZGV4ID0gTUlQU1JlZ2lzdGVyczo6
YTE7CisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgbGVuZ3RoID0gTUlQU1JlZ2lzdGVyczo6
YTI7CisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgb3V0cHV0ID0gTUlQU1JlZ2lzdGVyczo6
YTM7CisKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdUMCA9IE1JUFNSZWdpc3RlcnM6
OnQ0OworICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1QxID0gTUlQU1JlZ2lzdGVyczo6
dDU7CisKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZXR1cm5SZWdpc3RlciA9IE1JUFNS
ZWdpc3RlcnM6OnYwOwogI2VsaWYgUExBVEZPUk0oWDg2KQogICAgIHN0YXRpYyBjb25zdCBSZWdp
c3RlcklEIGlucHV0ID0gWDg2UmVnaXN0ZXJzOjplYXg7CiAgICAgc3RhdGljIGNvbnN0IFJlZ2lz
dGVySUQgaW5kZXggPSBYODZSZWdpc3RlcnM6OmVkeDsKQEAgLTEzMTYsNiArMTMyNiw4IEBACiAg
ICAgICAgIHB1c2goQVJNUmVnaXN0ZXJzOjpyNSk7CiAgICAgICAgIHB1c2goQVJNUmVnaXN0ZXJz
OjpyNik7CiAgICAgICAgIG1vdmUoQVJNUmVnaXN0ZXJzOjpyMywgb3V0cHV0KTsKKyNlbGlmIFBM
QVRGT1JNKE1JUFMpCisgICAgICAgIC8vIERvIG5vdGhpbmcuCiAjZW5kaWYKICAgICB9CiAKQEAg
LTEzMzMsNiArMTM0NSw4IEBACiAgICAgICAgIHBvcChBUk1SZWdpc3RlcnM6OnI2KTsKICAgICAg
ICAgcG9wKEFSTVJlZ2lzdGVyczo6cjUpOwogICAgICAgICBwb3AoQVJNUmVnaXN0ZXJzOjpyNCk7
CisjZWxpZiBQTEFURk9STShNSVBTKQorICAgICAgICAvLyBEbyBub3RoaW5nCiAjZW5kaWYKICAg
ICAgICAgcmV0KCk7CiAgICAgfQpJbmRleDogaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gNDgwMDApCisrKyBqaXQvSklUT3Bjb2Rl
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MjIsNiArMTcyMiw1NiBAQAogCiAgICAgYWRkUHRy
KEltbTMyKHNpemVvZihBcmdMaXN0KSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAorI2VsaWYg
UExBVEZPUk0oTUlQUykKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcjMyKFJlZ2lzdGVy
RmlsZTo6QXJndW1lbnRDb3VudCwgcmVnVDApOworCisgICAgLy8gQWxsb2NhdGUgc3RhY2sgc3Bh
Y2UgZm9yIG91ciBhcmdsaXN0CisgICAgQ09NUElMRV9BU1NFUlQoKHNpemVvZihBcmdMaXN0KSAm
IDB4NykgPT0gMCwgQXJnTGlzdF9zaG91bGRfYnlfOGJ5dGVfYWxpZ25lZCk7CisgICAgc3ViUHRy
KEltbTMyKHNpemVvZihBcmdMaXN0KSArIDI0KSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisg
ICAgLy8gU2V0IHVwIGFyZ3VtZW50cworICAgIHN1YlB0cihJbW0zMigxKSwgcmVnVDApOyAvLyBE
b24ndCBpbmNsdWRlICd0aGlzJyBpbiBhcmdjb3VudAorCisgICAgLy8gUHVzaCBhcmdjb3VudCB0
byAyNCArIG9mZnNldCgkc3ApCisgICAgc3RvcmVQdHIocmVnVDAsIEFkZHJlc3Moc3RhY2tQb2lu
dGVyUmVnaXN0ZXIsIDI0ICsgT0JKRUNUX09GRlNFVE9GKEFyZ0xpc3QsIG1fYXJnQ291bnQpKSk7
CisKKyAgICAvLyBDYWxjdWxhdGUgdGhlIHN0YXJ0IG9mIHRoZSBjYWxsZnJhbWUgaGVhZGVyLCBh
bmQgc3RvcmUgaW4gcmVnVDEKKyAgICBtb3ZlKGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMSk7Cisg
ICAgc3ViMzIoSW1tMzIoUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplICogKGludDMy
X3Qpc2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1QxKTsKKworICAgIC8vIENhbGN1bGF0ZSBzdGFydCBv
ZiBhcmd1bWVudHMgYXMgY2FsbGZyYW1lIGhlYWRlciAtIHNpemVvZihSZWdpc3RlcikgKiBhcmdj
b3VudCAocmVnVDEpCisgICAgbXVsMzIoSW1tMzIoc2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1QwLCBy
ZWdUMCk7CisgICAgc3ViUHRyKHJlZ1QwLCByZWdUMSk7CisKKyAgICAvLyBwdXNoIHBvaW50ZXIg
dG8gYXJndW1lbnRzIHRvIDI0ICsgb2Zmc2V0KCRzcCkKKyAgICBzdG9yZVB0cihyZWdUMSwgQWRk
cmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgMjQgKyBPQkpFQ1RfT0ZGU0VUT0YoQXJnTGlzdCwg
bV9hcmdzKSkpOworCisgICAgLy8gU2V0dXAgYXJnMzogcmVnVDEgY3VycmVudGx5IHBvaW50cyB0
byB0aGUgZmlyc3QgYXJndW1lbnQsIHJlZ1QxLXNpemVvZihSZWdpc3RlcikgcG9pbnRzIHRvICd0
aGlzJworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgLShpbnQzMl90KXNpemVvZihSZWdpc3Rl
cikpLCBNSVBTUmVnaXN0ZXJzOjphMyk7CisKKyAgICAvLyBTZXR1cCBhcmcyOgorICAgIGVtaXRH
ZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6Q2FsbGVlLCBNSVBTUmVnaXN0
ZXJzOjphMik7CisKKyAgICAvLyBTZXR1cCBhcmcxOgorICAgIG1vdmUoY2FsbEZyYW1lUmVnaXN0
ZXIsIE1JUFNSZWdpc3RlcnM6OmExKTsKKworICAgIC8vIFNldHVwIGFyZzQ6IEFyZ0xpc3QgaXMg
cGFzc2VkIGJ5IHJlZmVyZW5jZS4gIEF0IDE2KCRzcCksIHN0b3JlICgkc3AgKyAyNCkKKyAgICBh
ZGRQdHIoSW1tMzIoMjQpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVnVDIpOworICAgIHN0b3Jl
UHRyKHJlZ1QyLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCAxNikpOworCisgICAgLy8g
U2V0dXAgYXJnMCBhcyAyMCgkc3ApIHRvIGhvbGQgdGhlIHJldHVybmVkIHN0cnVjdHVyZS4KKyAg
ICBBU1NFUlQoc2l6ZW9mKEpTVmFsdWUpID09IDQpOworICAgIGFkZFB0cihJbW0zMigyMCksIHN0
YWNrUG9pbnRlclJlZ2lzdGVyLCBNSVBTUmVnaXN0ZXJzOjphMCk7CisKKyAgICAvLyBDYWxsCisg
ICAgY2FsbChBZGRyZXNzKE1JUFNSZWdpc3RlcnM6OmEyLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5j
dGlvbiwgbV9kYXRhKSkpOworCisgICAgLy8gR2V0IHJldHVybmVkIHZhbHVlIGZyb20gMCgkdjAp
IHdoaWNoIGlzIHRoZSBzYW1lIGFzIDIwKCRzcCkKKyAgICBsb2FkUHRyKEFkZHJlc3MocmV0dXJu
VmFsdWVSZWdpc3RlciwgMCksIHJldHVyblZhbHVlUmVnaXN0ZXIpOworCisgICAgLy8gUmVzdG9y
ZSBzdGFjayBzcGFjZQorICAgIGFkZFB0cihJbW0zMihzaXplb2YoQXJnTGlzdCkgKyAyNCksIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKKwogI2VsaWYgRU5BQkxFKEpJVF9PUFRJTUlaRV9OQVRJVkVf
Q0FMTCkKICNlcnJvciAiSklUX09QVElNSVpFX05BVElWRV9DQUxMIG5vdCB5ZXQgc3VwcG9ydGVk
IG9uIHRoaXMgcGxhdGZvcm0uIgogI2Vsc2UKSW5kZXg6IGppdC9KSVRTdHVicy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gNDgwMDApCisrKyBqaXQvSklUU3R1
YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTksNiArNTU5LDg0IEBACiAgICAgIm1vdiBwYywg
bHIiICJcbiIKICk7CiAKKyNlbGlmIFBMQVRGT1JNKE1JUFMpCisKKyNpZiBVU0UoSklUX1NUVUJf
QVJHVU1FTlRfVkFfTElTVCkKKyNlcnJvciAiSklUX1NUVUJfQVJHVU1FTlRfVkFfTElTVCBub3Qg
c3VwcG9ydGVkIG9uIE1JUFMuIgorI2VuZGlmCisKK2FzbSB2b2xhdGlsZSAoCisiLnRleHQiICJc
biIKKyIuYWxpZ24gMiIgIlxuIgorIi5zZXQgbm9yZW9yZGVyIiAiXG4iCisiLnNldCBub21hY3Jv
IiAiXG4iCisiLnNldCBub21pcHMxNiIgIlxuIgorIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoY3Rp
VHJhbXBvbGluZSkgIlxuIgorU1lNQk9MX1NUUklORyhjdGlUcmFtcG9saW5lKSAiOiIgIlxuIgor
ICAgICJhZGRpdSAkMjksJDI5LC03MiIgIlxuIgorICAgICJzdyAgICAkMzEsNDQoJDI5KSIgIlxu
IgorICAgICJzdyAgICAkMTgsNDAoJDI5KSIgIlxuIgorICAgICJzdyAgICAkMTcsMzYoJDI5KSIg
IlxuIgorICAgICJzdyAgICAkMTYsMzIoJDI5KSIgIlxuIgorICAgICJtb3ZlICAkMTYsJDYgICAg
ICAgIyBzZXQgY2FsbEZyYW1lUmVnaXN0ZXIiICJcbiIKKyAgICAibGkgICAgJDE3LDUxMiAgICAg
ICMgc2V0IHRpbWVvdXRDaGVja1JlZ2lzdGVyIiAiXG4iCisgICAgIm1vdmUgICQyNSwkNCAgICAg
ICAjIG1vdmUgZXhlY3V0YWJsZUFkZHJlc3MgdG8gdDkiICJcbiIKKyAgICAic3cgICAgJDUsNTIo
JDI5KSAgICMgc3RvcmUgcmVnaXN0ZXJGaWxlIHRvIGN1cnJlbnQgc3RhY2siICJcbiIKKyAgICAi
c3cgICAgJDYsNTYoJDI5KSAgICMgc3RvcmUgY2FsbEZyYW1lIHRvIGN1cmVudCBzdGFjayIgIlxu
IgorICAgICJzdyAgICAkNyw2MCgkMjkpICAgIyBzdG9yZSBleGNlcHRpb24gdG8gY3VycmVudCBz
dGFjayIgIlxuIgorICAgICJsdyAgICAkOCw4OCgkMjkpICAgIyBsb2FkIGVuYWJsZVByb2ZpbGVy
UmVmZXJlbmNlIGZyb20gcHJldmlvdXMgc3RhY2siICJcbiIKKyAgICAibHcgICAgJDksOTIoJDI5
KSAgICMgbG9hZCBnbG9iYWxEYXRhIGZyb20gcHJldmlvdXMgc3RhY2siICJcbiIKKyAgICAic3cg
ICAgJDgsNjQoJDI5KSAgICMgc3RvcmUgZW5hYmxlUHJvZmlsZXJSZWZlcmVuY2UgdG8gY3VycmVu
dCBzdGFjayIgIlxuIgorICAgICJqYWxyICAkMjUiICJcbiIKKyAgICAic3cgICAgJDksNjgoJDI5
KSAgICMgc3RvcmUgZ2xvYmFsRGF0YSB0byBjdXJyZW50IHN0YWNrIiAiXG4iCisgICAgImx3ICAg
ICQxNiwzMigkMjkpIiAiXG4iCisgICAgImx3ICAgICQxNywzNigkMjkpIiAiXG4iCisgICAgImx3
ICAgICQxOCw0MCgkMjkpIiAiXG4iCisgICAgImx3ICAgICQzMSw0NCgkMjkpIiAiXG4iCisgICAg
ImpyICAgICQzMSIgIlxuIgorICAgICJhZGRpdSAkMjksJDI5LDcyIiAiXG4iCisiLnNldCByZW9y
ZGVyIiAiXG4iCisiLnNldCBtYWNybyIgIlxuIgorKTsKKworYXNtIHZvbGF0aWxlICgKKyIudGV4
dCIgIlxuIgorIi5hbGlnbiAyIiAiXG4iCisiLnNldCBub3Jlb3JkZXIiICJcbiIKKyIuc2V0IG5v
bWFjcm8iICJcbiIKKyIuc2V0IG5vbWlwczE2IiAiXG4iCisiLmdsb2JsICIgU1lNQk9MX1NUUklO
RyhjdGlWTVRocm93VHJhbXBvbGluZSkgIlxuIgorU1lNQk9MX1NUUklORyhjdGlWTVRocm93VHJh
bXBvbGluZSkgIjoiICJcbiIKKyAgICAiamFsICIgU1lNQk9MX1NUUklORyhjdGlfdm1fdGhyb3cp
ICJcbiIKKyAgICAibW92ZSAgJDQsICQyOSIgIlxuIgorICAgICJsdyAgICAkMTYsMzIoJDI5KSIg
IlxuIgorICAgICJsdyAgICAkMTcsMzYoJDI5KSIgIlxuIgorICAgICJsdyAgICAkMTgsNDAoJDI5
KSIgIlxuIgorICAgICJsdyAgICAkMzEsNDQoJDI5KSIgIlxuIgorICAgICJqciAgICAkMzEiICJc
biIKKyAgICAiYWRkaXUgJDI5LCQyOSw3MiIgIlxuIgorIi5zZXQgcmVvcmRlciIgIlxuIgorIi5z
ZXQgbWFjcm8iICJcbiIKKyk7CisKK2FzbSB2b2xhdGlsZSAoCisiLnRleHQiICJcbiIKKyIuYWxp
Z24gMiIgIlxuIgorIi5zZXQgbm9yZW9yZGVyIiAiXG4iCisiLnNldCBub21hY3JvIiAiXG4iCisi
LnNldCBub21pcHMxNiIgIlxuIgorIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoY3RpT3BUaHJvd05v
dENhdWdodCkgIlxuIgorU1lNQk9MX1NUUklORyhjdGlPcFRocm93Tm90Q2F1Z2h0KSAiOiIgIlxu
IgorICAgICJsdyAgICAkMTYsMzIoJDI5KSIgIlxuIgorICAgICJsdyAgICAkMTcsMzYoJDI5KSIg
IlxuIgorICAgICJsdyAgICAkMTgsNDAoJDI5KSIgIlxuIgorICAgICJsdyAgICAkMzEsNDQoJDI5
KSIgIlxuIgorICAgICJqciAgICAkMzEiICJcbiIKKyAgICAiYWRkaXUgJDI5LCQyOSw3MiIgIlxu
IgorIi5zZXQgcmVvcmRlciIgIlxuIgorIi5zZXQgbWFjcm8iICJcbiIKKyk7CisKICNlbGlmIENP
TVBJTEVSKE1TVkMpCiAKICNpZiBVU0UoSklUX1NUVUJfQVJHVU1FTlRfVkFfTElTVCkKQEAgLTY1
Myw2ICs3MzEsMjAgQEAKIAogICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0
YWNrRnJhbWUsIHRodW5rUmV0dXJuQWRkcmVzcykgPT0gMHgxQyk7CiAjZW5kaWYKKworI2lmIFBM
QVRGT1JNKE1JUFMpCisgICAgQVNTRVJUKE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tG
cmFtZSwgcHJlc2VydmVkUzApID09IDMyKTsKKyAgICBBU1NFUlQoT0JKRUNUX09GRlNFVE9GKHN0
cnVjdCBKSVRTdGFja0ZyYW1lLCBwcmVzZXJ2ZWRTMSkgPT0gMzYpOworICAgIEFTU0VSVChPQkpF
Q1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIHByZXNlcnZlZFMyKSA9PSA0MCk7Cisg
ICAgQVNTRVJUKE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgcHJlc2VydmVk
UmV0dXJuQWRkcmVzcykgPT0gNDQpOworICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0
IEpJVFN0YWNrRnJhbWUsIHRodW5rUmV0dXJuQWRkcmVzcykgPT0gNDgpOworICAgIEFTU0VSVChP
QkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIHJlZ2lzdGVyRmlsZSkgPT0gNTIp
OworICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIGNhbGxG
cmFtZSkgPT0gNTYpOworICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNr
RnJhbWUsIGV4Y2VwdGlvbikgPT0gNjApOworICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3Ry
dWN0IEpJVFN0YWNrRnJhbWUsIGVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSkgPT0gNjQpOworICAg
IEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIGdsb2JhbERhdGEp
ID09IDY4KTsKKworI2VuZGlmCiB9CiAKICNpZiBFTkFCTEUoSklUX09QVElNSVpFX1BST1BFUlRZ
X0FDQ0VTUykKQEAgLTg5Niw2ICs5ODgsMzAgQEAKICAgICAgICAgKTsgXAogICAgIHJ0eXBlIEpJ
VFN0dWJUaHVua2VkXyMjb3AoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBcCiAKKyNlbGlmIFBMQVRG
T1JNKE1JUFMpCisjZGVmaW5lIERFRklORV9TVFVCX0ZVTkNUSU9OKHJ0eXBlLCBvcCkgXAorICAg
IGV4dGVybiAiQyIgeyBcCisgICAgICAgIHJ0eXBlIEpJVFN0dWJUaHVua2VkXyMjb3AoU1RVQl9B
UkdTX0RFQ0xBUkFUSU9OKTsgXAorICAgIH07IFwKKyAgICBhc20gdm9sYXRpbGUgKCBcCisgICAg
ICAgICIudGV4dCIgIlxuIiBcCisgICAgICAgICIuYWxpZ24gMiIgIlxuIiBcCisgICAgICAgICIu
c2V0IG5vcmVvcmRlciIgIlxuIiBcCisgICAgICAgICIuc2V0IG5vbWFjcm8iICJcbiIgXAorICAg
ICAgICAiLnNldCBub21pcHMxNiIgIlxuIiBcCisgICAgICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RS
SU5HKGN0aV8jI29wKSAiXG4iIFwKKyAgICAgICAgU1lNQk9MX1NUUklORyhjdGlfIyNvcCkgIjoi
ICJcbiIgXAorICAgICAgICAic3cgICAgJDMxLCA0OCgkMjkpIiAiXG4iIFwKKyAgICAgICAgImph
bCAiIFNZTUJPTF9TVFJJTkcoSklUU3R1YlRodW5rZWRfIyNvcCkgIlxuIiBcCisgICAgICAgICJu
b3AiICJcbiIgXAorICAgICAgICAibHcgICAgJDMxLCA0OCgkMjkpIiAiXG4iIFwKKyAgICAgICAg
ImpyICAgICQzMSIgIlxuIiBcCisgICAgICAgICJub3AiICJcbiIgXAorICAgICAgICAiLnNldCBy
ZW9yZGVyIiAiXG4iIFwKKyAgICAgICAgIi5zZXQgbWFjcm8iICJcbiIgXAorICAgICAgICApOyBc
CisgICAgcnR5cGUgSklUU3R1YlRodW5rZWRfIyNvcChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFwK
KwogI2Vsc2UKICNkZWZpbmUgREVGSU5FX1NUVUJfRlVOQ1RJT04ocnR5cGUsIG9wKSBydHlwZSBK
SVRfU1RVQiBjdGlfIyNvcChTVFVCX0FSR1NfREVDTEFSQVRJT04pCiAjZW5kaWYKSW5kZXg6IGpp
dC9KSVRTdHVicy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGppdC9KSVRTdHVicy5oCShyZXZpc2lvbiA0ODAw
MCkKKysrIGppdC9KSVRTdHVicy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsNiArMTU1LDI5IEBA
CiAgICAgICAgIAogICAgICAgICBSZXR1cm5BZGRyZXNzUHRyKiByZXR1cm5BZGRyZXNzU2xvdCgp
IHsgcmV0dXJuICZ0aHVua1JldHVybkFkZHJlc3M7IH0KICAgICB9OworI2VsaWYgUExBVEZPUk0o
TUlQUykKKyAgICBzdHJ1Y3QgSklUU3RhY2tGcmFtZSB7CisgICAgICAgIHZvaWQqIHJlc2VydmVk
OyAvLyBVbnVzZWQKKyAgICAgICAgSklUU3R1YkFyZyBhcmdzWzddOyAvLyBLZWVwIGl0IDggYnl0
ZSBhbGlnbmVkCisKKyAgICAgICAgdm9pZCogcHJlc2VydmVkUzA7CisgICAgICAgIHZvaWQqIHBy
ZXNlcnZlZFMxOworICAgICAgICB2b2lkKiBwcmVzZXJ2ZWRTMjsKKyAgICAgICAgdm9pZCogcHJl
c2VydmVkUmV0dXJuQWRkcmVzczsKKworICAgICAgICBSZXR1cm5BZGRyZXNzUHRyIHRodW5rUmV0
dXJuQWRkcmVzczsKKworICAgICAgICAvLyBUaGVzZSBhcmd1bWVudHMgcGFzc2VkIGluIGExLi5h
MyAoYTAgY29udGFpbmVkIHRoZSBlbnRyeSBjb2RlIHBvaW50ZWQsIHdoaWNoIGlzIG5vdCBwcmVz
ZXJ2ZWQpCisgICAgICAgIFJlZ2lzdGVyRmlsZSogcmVnaXN0ZXJGaWxlOworICAgICAgICBDYWxs
RnJhbWUqIGNhbGxGcmFtZTsKKyAgICAgICAgSlNWYWx1ZSogZXhjZXB0aW9uOworCisgICAgICAg
IC8vIFRoZXNlIGFyZ3VtZW50cyBwYXNzZWQgb24gdGhlIHN0YWNrLgorICAgICAgICBQcm9maWxl
cioqIGVuYWJsZWRQcm9maWxlclJlZmVyZW5jZTsKKyAgICAgICAgSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhOworCisgICAgICAgIFJldHVybkFkZHJlc3NQdHIqIHJldHVybkFkZHJlc3NTbG90KCkg
eyByZXR1cm4gJnRodW5rUmV0dXJuQWRkcmVzczsgfQorICAgIH07CiAjZWxpZiBQTEFURk9STShB
Uk0pCiAgICAgc3RydWN0IEpJVFN0YWNrRnJhbWUgewogICAgICAgICBKSVRTdHViQXJnIHBhZGRp
bmc7IC8vIFVudXNlZApJbmRleDogaml0L0pJVElubGluZU1ldGhvZHMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBqaXQvSklUSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiA0ODAwMCkKKysrIGppdC9KSVRJbmxp
bmVNZXRob2RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3Myw2ICsxNzMsMjMgQEAKICAgICBsb2Fk
UHRyKGFkZHJlc3MsIGxpbmtSZWdpc3Rlcik7CiB9CiAKKyNlbGlmIFBMQVRGT1JNKE1JUFMpCisK
K0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChS
ZWdpc3RlcklEIHJlZykKK3sKKyAgICBtb3ZlKHJldHVybkFkZHJlc3NSZWdpc3RlciwgcmVnKTsK
K30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVS
ZXR1cm4oUmVnaXN0ZXJJRCByZWcpCit7CisgICAgbW92ZShyZWcsIHJldHVybkFkZHJlc3NSZWdp
c3Rlcik7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnJlc3RvcmVSZXR1cm5BZGRyZXNz
QmVmb3JlUmV0dXJuKEFkZHJlc3MgYWRkcmVzcykKK3sKKyAgICBsb2FkUHRyKGFkZHJlc3MsIHJl
dHVybkFkZHJlc3NSZWdpc3Rlcik7Cit9CisKICNlbmRpZgogCiAjaWYgVVNFKEpJVF9TVFVCX0FS
R1VNRU5UX1ZBX0xJU1QpCkluZGV4OiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgJKHJldmlzaW9uIDQ4MDAwKQorKysgaml0
L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDYgKzE3NiwzMiBA
QAogICAgIHN0YXRpYyB2b2lkIGNhY2hlRmx1c2godm9pZCosIHNpemVfdCkKICAgICB7CiAgICAg
fQorI2VsaWYgUExBVEZPUk0oTUlQUykKKyAgICBzdGF0aWMgdm9pZCBjYWNoZUZsdXNoKHZvaWQq
IGNvZGUsIHNpemVfdCBzaXplKQorICAgIHsKKyNpZiBDT01QSUxFUihHQ0MpICYmIChHQ0NfVkVS
U0lPTiA+PSAzMDQwNikKKyNpZiBfX21pcHNfaXNhX3JldiA9PSAyCisgICAgICAgIGludCBsaW5l
X3NpemU7CisgICAgICAgIGFzbSAoInJkaHdyICUwLCAkMSIgOiAiPXIiIChsaW5lX3NpemUpKTsK
KyAgICAgICAgLy8KKyAgICAgICAgLy8gTW9kaWZ5ICJzdGFydCIgYW5kICJlbmQiIHRvIGF2b2lk
IEdDQyA0LjMgYnVnIGluCisgICAgICAgIC8vIG1pcHNfZXhwYW5kX3N5bmNpX2xvb3AgdGhhdCBt
YXkgZXhlY3V0ZSBzeW5jaSBvbmUgbW9yZSB0aW1lLgorICAgICAgICAvLyAic3RhcnQiIHBvaW50
cyB0byB0aGUgZmlzcnQgYnl0ZSBvZiB0aGUgY2FjaGUgbGluZS4KKyAgICAgICAgLy8gImVuZCIg
cG9pbnRzIHRvIHRoZSBsYXN0IGJ5dGUgb2YgdGhlIGxpbmUgYmVmb3JlIHRoZSBsYXN0IGNhY2hl
IGxpbmUuCisgICAgICAgIC8vIEJlY2F1c2Ugc2l6ZSBpcyBhbHdheXMgYSBtdWx0aXBsZSBvZiA0
LCB0aGlzIGlzIHNhZmUgdG8gc2V0CisgICAgICAgIC8vICJlbmQiIHRvIHRoZSBsYXN0IGJ5dGUu
CisgICAgICAgIC8vCisgICAgICAgIGludCBzdGFydCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRy
X3Q+KGNvZGUpICYgKC1saW5lX3NpemUpOworICAgICAgICBpbnQgZW5kID0gKChyZWludGVycHJl
dF9jYXN0PGludHB0cl90Pihjb2RlKSArIHNpemUpICYgKC1saW5lX3NpemUpKSAtIDE7CisgICAg
ICAgIF9fY2xlYXJfY2FjaGUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc3RhcnQpLCByZWludGVy
cHJldF9jYXN0PGNoYXIqPihlbmQpKTsKKyNlbHNlCisgICAgICAgIGludCBlbmQgPSByZWludGVy
cHJldF9jYXN0PGludHB0cl90Pihjb2RlKSArIHNpemU7CisgICAgICAgIF9fY2xlYXJfY2FjaGUo
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY29kZSksIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGVu
ZCkpOworI2VuZGlmCisjZWxzZQorICAgICAgICAjZXJyb3IgIldlIG5lZWQgR0NDIHRvIHByb3Zp
ZGUgX19jbGVhcl9jYWNoZSBmb3IgTUlQUyIKKyNlbmRpZgorICAgIH0KICNlbGlmIFBMQVRGT1JN
X0FSTV9BUkNIKDcpICYmIFBMQVRGT1JNKElQSE9ORSkKICAgICBzdGF0aWMgdm9pZCBjYWNoZUZs
dXNoKHZvaWQqIGNvZGUsIHNpemVfdCBzaXplKQogICAgIHsKSW5kZXg6IGppdC9KSVQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBqaXQvSklULmgJKHJldmlzaW9uIDQ4MDAwKQorKysgaml0L0pJVC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNjcsNiArMjY3LDI4IEBACiAgICAgICAgIHN0YXRpYyBjb25zdCBGUFJl
Z2lzdGVySUQgZnBSZWdUMCA9IEFSTVJlZ2lzdGVyczo6ZDA7CiAgICAgICAgIHN0YXRpYyBjb25z
dCBGUFJlZ2lzdGVySUQgZnBSZWdUMSA9IEFSTVJlZ2lzdGVyczo6ZDE7CiAgICAgICAgIHN0YXRp
YyBjb25zdCBGUFJlZ2lzdGVySUQgZnBSZWdUMiA9IEFSTVJlZ2lzdGVyczo6ZDI7CisjZWxpZiBQ
TEFURk9STShNSVBTKQorICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZXR1cm5WYWx1
ZVJlZ2lzdGVyID0gTUlQU1JlZ2lzdGVyczo6djA7CisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdp
c3RlcklEIGNhY2hlZFJlc3VsdFJlZ2lzdGVyID0gTUlQU1JlZ2lzdGVyczo6djA7CisgICAgICAg
IHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGZpcnN0QXJndW1lbnRSZWdpc3RlciA9IE1JUFNSZWdp
c3RlcnM6OmEwOworCisgICAgICAgIC8vIHJlZ1QwIG11c3QgYmUgdjAgZm9yIHJldHVybmluZyBh
IDMyLWJpdCB2YWx1ZS4KKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnVDAgPSBN
SVBTUmVnaXN0ZXJzOjp2MDsKKworICAgICAgICAvLyByZWdUMSBtdXN0IGJlIHYxIGZvciByZXR1
cm5pbmcgYSBwYWlyIG9mIDMyLWJpdCB2YWx1ZS4KKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lz
dGVySUQgcmVnVDEgPSBNSVBTUmVnaXN0ZXJzOjp2MTsKKworICAgICAgICBzdGF0aWMgY29uc3Qg
UmVnaXN0ZXJJRCByZWdUMiA9IE1JUFNSZWdpc3RlcnM6OnQ0OworCisgICAgICAgIC8vIHJlZ1Qz
IG11c3QgYmUgc2F2ZWQgaW4gdGhlIGNhbGxlZSwgc28gdXNlIGFuIFMgcmVnaXN0ZXIuCisgICAg
ICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1QzID0gTUlQU1JlZ2lzdGVyczo6czI7CisK
KyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgY2FsbEZyYW1lUmVnaXN0ZXIgPSBNSVBT
UmVnaXN0ZXJzOjpzMDsKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgdGltZW91dENo
ZWNrUmVnaXN0ZXIgPSBNSVBTUmVnaXN0ZXJzOjpzMTsKKworICAgICAgICBzdGF0aWMgY29uc3Qg
RlBSZWdpc3RlcklEIGZwUmVnVDAgPSBNSVBTUmVnaXN0ZXJzOjpmNDsKKyAgICAgICAgc3RhdGlj
IGNvbnN0IEZQUmVnaXN0ZXJJRCBmcFJlZ1QxID0gTUlQU1JlZ2lzdGVyczo6ZjY7CisgICAgICAg
IHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQgZnBSZWdUMiA9IE1JUFNSZWdpc3RlcnM6OmY4Owog
I2Vsc2UKICAgICAjZXJyb3IgIkpJVCBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0uIgog
I2VuZGlmCkBAIC02MTcsNyArNjM5LDMwIEBACiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0
Y2hPZmZzZXRNZXRob2RDaGVja1Byb3RvT2JqID0gMTI7CiAgICAgICAgIHN0YXRpYyBjb25zdCBp
bnQgcGF0Y2hPZmZzZXRNZXRob2RDaGVja1Byb3RvU3RydWN0ID0gMjA7CiAgICAgICAgIHN0YXRp
YyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRNZXRob2RDaGVja1B1dEZ1bmN0aW9uID0gMzI7CisjZWxp
ZiBQTEFURk9STShNSVBTKQorICAgICAgICAvLyBUaGVzZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMg
dmFsdWUgYXJlIHVzZWQgdG8gZW5hYmxlIHBhdGNoaW5nIC0gc2VlIGNvbW1lbnQgb24gb3BfcHV0
X2J5X2lkLgorICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0UHV0QnlJZFN0cnVj
dHVyZSA9IDEyOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0UHV0QnlJZEV4
dGVybmFsTG9hZCA9IDM2OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoTGVuZ3RoUHV0
QnlJZEV4dGVybmFsTG9hZCA9IDE2OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zm
c2V0UHV0QnlJZFByb3BlcnR5TWFwT2Zmc2V0ID0gNTI7CisgICAgICAgIC8vIFRoZXNlIGFyY2hp
dGVjdHVyZSBzcGVjaWZpYyB2YWx1ZSBhcmUgdXNlZCB0byBlbmFibGUgcGF0Y2hpbmcgLSBzZWUg
Y29tbWVudCBvbiBvcF9nZXRfYnlfaWQuCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hP
ZmZzZXRHZXRCeUlkU3RydWN0dXJlID0gMTI7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0
Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSA9IDM2OworICAgICAgICBzdGF0aWMgY29u
c3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZEV4dGVybmFsTG9hZCA9IDM2OworICAgICAgICBzdGF0
aWMgY29uc3QgaW50IHBhdGNoTGVuZ3RoR2V0QnlJZEV4dGVybmFsTG9hZCA9IDE2OworICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0ID0g
NTI7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkUHV0UmVzdWx0
ID0gNjg7CisjaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKKyAgICAgICAgI2Vycm9yICJPUENP
REVfU0FNUExJTkcgaXMgbm90IHlldCBzdXBwb3J0ZWQiCisjZWxzZQorICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbCA9IDQwOwogI2VuZGlmCisg
ICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRPcENhbGxDb21wYXJlVG9KdW1wID0g
MjQ7CisKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhvZENoZWNrUHJv
dG9PYmogPSAyNDsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhvZENo
ZWNrUHJvdG9TdHJ1Y3QgPSA0NDsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNl
dE1ldGhvZENoZWNrUHV0RnVuY3Rpb24gPSA2ODsKKyNlbmRpZgogI2VuZGlmIC8vIFVTRShKU1ZB
TFVFMzJfNjQpCiAKICNpZiBQTEFURk9STShBUk0pICYmICFQTEFURk9STV9BUk1fQVJDSCg3KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40971</attachid>
            <date>2009-10-09 16:17:10 -0700</date>
            <delta_ts>2009-10-12 17:59:12 -0700</delta_ts>
            <desc>MIPS JIT Patch 20091009</desc>
            <filename>mips_jit20091009.diff</filename>
            <type>text/plain</type>
            <size>99564</size>
            <attacher name="Chao-ying Fu">fu</attacher>
            
              <data encoding="base64">SW5kZXg6IHd0Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHd0Zi9QbGF0Zm9ybS5oCShyZXZp
c2lvbiA0ODAwMCkKKysrIHd0Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjUsNiAr
MjI1LDE1IEBACiAjZGVmaW5lIFdURl9QTEFURk9STV9CSUdfRU5ESUFOIDEKICNlbmRpZgogCisv
KiBQTEFURk9STShNSVBTKSAqLworLyogTm90ZTogT25seSBPMzIgQUJJIGlzIHRlc3RlZCwgc28g
d2UgZW5hYmxlIGl0IGZvciBPMzIgQUJJIGZvciBub3cuICAqLworI2lmICAgKGRlZmluZWQobWlw
cykgfHwgZGVmaW5lZChfX21pcHNfXykpICYmIGRlZmluZWQoX0FCSU8zMikKKyNkZWZpbmUgV1RG
X1BMQVRGT1JNX01JUFMgMQorI2lmIGRlZmluZWQoX19NSVBTRUJfXykKKyNkZWZpbmUgV1RGX1BM
QVRGT1JNX0JJR19FTkRJQU4gMQorI2VuZGlmCisjZW5kaWYgLyogTUlQUyAqLworCiAvKiBQTEFU
Rk9STShBUk0pICovCiAjaWYgICBkZWZpbmVkKGFybSkgXAogICAgfHwgZGVmaW5lZChfX2FybV9f
KQpAQCAtNjAzLDcgKzYxMiw3IEBACiAjaWYgIWRlZmluZWQoV1RGX1VTRV9KU1ZBTFVFNjQpICYm
ICFkZWZpbmVkKFdURl9VU0VfSlNWQUxVRTMyKSAmJiAhZGVmaW5lZChXVEZfVVNFX0pTVkFMVUUz
Ml82NCkKICNpZiBQTEFURk9STShYODZfNjQpICYmIChQTEFURk9STShNQUMpIHx8IFBMQVRGT1JN
KExJTlVYKSkKICNkZWZpbmUgV1RGX1VTRV9KU1ZBTFVFNjQgMQotI2VsaWYgUExBVEZPUk0oQVJN
KSB8fCBQTEFURk9STShQUEM2NCkKKyNlbGlmIFBMQVRGT1JNKEFSTSkgfHwgUExBVEZPUk0oUFBD
NjQpIHx8IFBMQVRGT1JNKE1JUFMpCiAjZGVmaW5lIFdURl9VU0VfSlNWQUxVRTMyIDEKICNlbHNl
CiAjZGVmaW5lIFdURl9VU0VfSlNWQUxVRTMyXzY0IDEKQEAgLTYzMCw2ICs2MzksMTAgQEAKIC8q
IFRoZSBKSVQgaXMgdGVzdGVkICYgd29ya2luZyBvbiB4ODYgV2luZG93cyAqLwogI2VsaWYgUExB
VEZPUk0oWDg2KSAmJiBQTEFURk9STShXSU4pCiAgICAgI2RlZmluZSBFTkFCTEVfSklUIDEKKy8q
IFRoZSBKSVQgaXMgZm9yIE1JUFMuICAqLworI2VsaWYgUExBVEZPUk0oTUlQUykKKyAgICAjZGVm
aW5lIEVOQUJMRV9KSVQgMQorICAgICNkZWZpbmUgV1RGX1VTRV9KSVRfU1RVQl9BUkdVTUVOVF9W
QV9MSVNUIDAKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQpCkBAIC02OTAsNyArNzAzLDggQEAK
ICB8fCAoUExBVEZPUk0oWDg2XzY0KSAmJiBQTEFURk9STShNQUMpKSBcCiAgLyogVW5kZXIgZGV2
ZWxvcG1lbnQsIHRlbXBvcmFyaWx5IGRpc2FibGVkIHVudGlsIDE2TWIgbGluayByYW5nZSBsaW1p
dCBpbiBhc3NlbWJsZXIgaXMgZml4ZWQuICovIFwKICB8fCAoUExBVEZPUk1fQVJNX0FSQ0goNykg
JiYgUExBVEZPUk0oSVBIT05FKSAmJiAwKSBcCi0gfHwgKFBMQVRGT1JNKFg4NikgJiYgUExBVEZP
Uk0oV0lOKSkKKyB8fCAoUExBVEZPUk0oWDg2KSAmJiBQTEFURk9STShXSU4pKSBcCisgfHwgUExB
VEZPUk0oTUlQUykKICNkZWZpbmUgRU5BQkxFX1lBUlIgMQogI2RlZmluZSBFTkFCTEVfWUFSUl9K
SVQgMQogI2VuZGlmCkluZGV4OiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gNDgwMDApCisrKyBhc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsMTAgQEAK
ICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckFSTS5oIgogbmFtZXNwYWNlIEpTQyB7IHR5cGVkZWYg
TWFjcm9Bc3NlbWJsZXJBUk0gTWFjcm9Bc3NlbWJsZXJCYXNlOyB9OwogCisjZWxpZiBQTEFURk9S
TShNSVBTKQorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyTUlQUy5oIgorbmFtZXNwYWNlIEpTQyB7
IHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJNSVBTIE1hY3JvQXNzZW1ibGVyQmFzZTsgfTsKKwogI2Vs
aWYgUExBVEZPUk0oWDg2KQogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyWDg2LmgiCiBuYW1lc3Bh
Y2UgSlNDIHsgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlclg4NiBNYWNyb0Fzc2VtYmxlckJhc2U7IH07
CkluZGV4OiBhc3NlbWJsZXIvTUlQU0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGFzc2VtYmxl
ci9NSVBTQXNzZW1ibGVyLmgJKHJldmlzaW9uIDApCisrKyBhc3NlbWJsZXIvTUlQU0Fzc2VtYmxl
ci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOSBNSVBTIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOSBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIE1JUFMgVEVD
SE5PTE9HSUVTLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgTUlQUyBU
RUNITk9MT0dJRVMsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBNSVBTQXNzZW1ibGVyX2gKKyNkZWZpbmUgTUlQU0Fz
c2VtYmxlcl9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKyNpbmNsdWRlIDx3dGYvU2Vn
bWVudGVkVmVjdG9yLmg+CisKKyNpZiBFTkFCTEUoQVNTRU1CTEVSKSAmJiBQTEFURk9STShNSVBT
KQorCisjaW5jbHVkZSAiQXNzZW1ibGVyQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3R5cGVkZWYgdWludDMyX3QgTUlQU1dvcmQ7CisK
K25hbWVzcGFjZSBNSVBTUmVnaXN0ZXJzIHsKKyAgICB0eXBlZGVmIGVudW0geworICAgICAgICBy
MCA9IDAsCisgICAgICAgIHIxLAorICAgICAgICByMiwKKyAgICAgICAgcjMsCisgICAgICAgIHI0
LAorICAgICAgICByNSwKKyAgICAgICAgcjYsCisgICAgICAgIHI3LAorICAgICAgICByOCwKKyAg
ICAgICAgcjksCisgICAgICAgIHIxMCwKKyAgICAgICAgcjExLAorICAgICAgICByMTIsCisgICAg
ICAgIHIxMywKKyAgICAgICAgcjE0LAorICAgICAgICByMTUsCisgICAgICAgIHIxNiwKKyAgICAg
ICAgcjE3LAorICAgICAgICByMTgsCisgICAgICAgIHIxOSwKKyAgICAgICAgcjIwLAorICAgICAg
ICByMjEsCisgICAgICAgIHIyMiwKKyAgICAgICAgcjIzLAorICAgICAgICByMjQsCisgICAgICAg
IHIyNSwKKyAgICAgICAgcjI2LAorICAgICAgICByMjcsCisgICAgICAgIHIyOCwKKyAgICAgICAg
cjI5LAorICAgICAgICByMzAsCisgICAgICAgIHIzMSwKKyAgICAgICAgemVybyA9IHIwLAorICAg
ICAgICBhdCA9IHIxLAorICAgICAgICB2MCA9IHIyLAorICAgICAgICB2MSA9IHIzLAorICAgICAg
ICBhMCA9IHI0LAorICAgICAgICBhMSA9IHI1LAorICAgICAgICBhMiA9IHI2LAorICAgICAgICBh
MyA9IHI3LAorICAgICAgICB0MCA9IHI4LAorICAgICAgICB0MSA9IHI5LAorICAgICAgICB0MiA9
IHIxMCwKKyAgICAgICAgdDMgPSByMTEsCisgICAgICAgIHQ0ID0gcjEyLAorICAgICAgICB0NSA9
IHIxMywKKyAgICAgICAgdDYgPSByMTQsCisgICAgICAgIHQ3ID0gcjE1LAorICAgICAgICBzMCA9
IHIxNiwKKyAgICAgICAgczEgPSByMTcsCisgICAgICAgIHMyID0gcjE4LAorICAgICAgICBzMyA9
IHIxOSwKKyAgICAgICAgczQgPSByMjAsCisgICAgICAgIHM1ID0gcjIxLAorICAgICAgICBzNiA9
IHIyMiwKKyAgICAgICAgczcgPSByMjMsCisgICAgICAgIHQ4ID0gcjI0LAorICAgICAgICB0OSA9
IHIyNSwKKyAgICAgICAgazAgPSByMjYsCisgICAgICAgIGsxID0gcjI3LAorICAgICAgICBncCA9
IHIyOCwKKyAgICAgICAgc3AgPSByMjksCisgICAgICAgIGZwID0gcjMwLAorICAgICAgICByYSA9
IHIzMQorICAgIH0gUmVnaXN0ZXJJRDsKKworICAgIHR5cGVkZWYgZW51bSB7CisgICAgICAgIGYw
LAorICAgICAgICBmMSwKKyAgICAgICAgZjIsCisgICAgICAgIGYzLAorICAgICAgICBmNCwKKyAg
ICAgICAgZjUsCisgICAgICAgIGY2LAorICAgICAgICBmNywKKyAgICAgICAgZjgsCisgICAgICAg
IGY5LAorICAgICAgICBmMTAsCisgICAgICAgIGYxMSwKKyAgICAgICAgZjEyLAorICAgICAgICBm
MTMsCisgICAgICAgIGYxNCwKKyAgICAgICAgZjE1LAorICAgICAgICBmMTYsCisgICAgICAgIGYx
NywKKyAgICAgICAgZjE4LAorICAgICAgICBmMTksCisgICAgICAgIGYyMCwKKyAgICAgICAgZjIx
LAorICAgICAgICBmMjIsCisgICAgICAgIGYyMywKKyAgICAgICAgZjI0LAorICAgICAgICBmMjUs
CisgICAgICAgIGYyNiwKKyAgICAgICAgZjI3LAorICAgICAgICBmMjgsCisgICAgICAgIGYyOSwK
KyAgICAgICAgZjMwLAorICAgICAgICBmMzEKKyAgICB9IEZQUmVnaXN0ZXJJRDsKKworfSAvLyBu
YW1lc3BhY2UgTUlQU1JlZ2lzdGVycworCitjbGFzcyBNSVBTQXNzZW1ibGVyIHsKK3B1YmxpYzoK
KyAgICB0eXBlZGVmIE1JUFNSZWdpc3RlcnM6OlJlZ2lzdGVySUQgUmVnaXN0ZXJJRDsKKyAgICB0
eXBlZGVmIE1JUFNSZWdpc3RlcnM6OkZQUmVnaXN0ZXJJRCBGUFJlZ2lzdGVySUQ7CisgICAgdHlw
ZWRlZiBTZWdtZW50ZWRWZWN0b3I8aW50LCA2ND4gSnVtcHM7CisKKyAgICBNSVBTQXNzZW1ibGVy
KCkKKyAgICB7CisgICAgfQorCisgICAgLy8gTUlQUyBpbnN0cnVjdGlvbiBvcGNvZGUgZmllbGQg
cG9zaXRpb24KKyAgICBlbnVtIHsKKyAgICAgICAgT1BfU0hfUkQgPSAxMSwKKyAgICAgICAgT1Bf
U0hfUlQgPSAxNiwKKyAgICAgICAgT1BfU0hfUlMgPSAyMSwKKyAgICAgICAgT1BfU0hfU0hBTVQg
PSA2LAorICAgICAgICBPUF9TSF9DT0RFID0gMTYsCisgICAgICAgIE9QX1NIX0ZEID0gNiwKKyAg
ICAgICAgT1BfU0hfRlMgPSAxMSwKKyAgICAgICAgT1BfU0hfRlQgPSAxNgorICAgIH07CisKKyAg
ICBjbGFzcyBKbXBTcmMgeworICAgICAgICBmcmllbmQgY2xhc3MgTUlQU0Fzc2VtYmxlcjsKKyAg
ICBwdWJsaWM6CisgICAgICAgIEptcFNyYygpCisgICAgICAgICAgICA6IG1fb2Zmc2V0KC0xKQor
ICAgICAgICB7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIEptcFNyYyhpbnQg
b2Zmc2V0KQorICAgICAgICAgICAgOiBtX29mZnNldChvZmZzZXQpCisgICAgICAgIHsKKyAgICAg
ICAgfQorCisgICAgICAgIGludCBtX29mZnNldDsKKyAgICB9OworCisgICAgY2xhc3MgSm1wRHN0
IHsKKyAgICAgICAgZnJpZW5kIGNsYXNzIE1JUFNBc3NlbWJsZXI7CisgICAgcHVibGljOgorICAg
ICAgICBKbXBEc3QoKQorICAgICAgICAgICAgOiBtX29mZnNldCgtMSkKKyAgICAgICAgICAgICwg
bV91c2VkKGZhbHNlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBib29sIGlzVXNl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlZDsgfQorICAgICAgICB2b2lkIHVzZWQoKSB7IG1fdXNl
ZCA9IHRydWU7IH0KKyAgICBwcml2YXRlOgorICAgICAgICBKbXBEc3QoaW50IG9mZnNldCkKKyAg
ICAgICAgICAgIDogbV9vZmZzZXQob2Zmc2V0KQorICAgICAgICAgICAgLCBtX3VzZWQoZmFsc2Up
CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChtX29mZnNldCA9PSBvZmZzZXQpOworICAg
ICAgICB9CisKKyAgICAgICAgaW50IG1fb2Zmc2V0IDogMzE7CisgICAgICAgIGludCBtX3VzZWQg
OiAxOworICAgIH07CisKKyAgICB2b2lkIGVtaXRJbnN0KE1JUFNXb3JkIG9wKQorICAgIHsKKyAg
ICAgICAgdm9pZCAqb2xkX2Jhc2UgPSBtX2J1ZmZlci5kYXRhKCk7CisKKyAgICAgICAgbV9idWZm
ZXIucHV0SW50KG9wKTsKKworICAgICAgICB2b2lkICpuZXdfYmFzZSA9IG1fYnVmZmVyLmRhdGEo
KTsKKyAgICAgICAgaWYgKG9sZF9iYXNlICE9IG5ld19iYXNlKSB7CisgICAgICAgICAgICByZWxv
Y2F0ZUp1bXBzKG9sZF9iYXNlLCBuZXdfYmFzZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2
b2lkIG5vcCgpCisgICAgeworICAgICAgICAvKiBub3AgKi8KKyAgICAgICAgZW1pdEluc3QoMHgw
MDAwMDAwMCk7CisgICAgfQorCisgICAgdm9pZCBtb3ZlKFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVy
SUQgcnMpCisgICAgeworI2lmIGRlZmluZWQoX0FCSU8zMikKKyAgICAgICAgLyogYWRkdSAqLwor
ICAgICAgICBlbWl0SW5zdCgweDAwMDAwMDIxIHwgKHJkIDw8IE9QX1NIX1JEKSB8IChycyA8PCBP
UF9TSF9SUykpOworI2Vsc2UKKyAgICAgICAgLyogZGFkZHUgKi8KKyAgICAgICAgZW1pdEluc3Qo
MHgwMDAwMDAyZCB8IChyZCA8PCBPUF9TSF9SRCkgfCAocnMgPDwgT1BfU0hfUlMpKTsKKyNlbmRp
ZgorICAgIH0KKworICAgIHZvaWQgbGkoUmVnaXN0ZXJJRCBkZXN0LCBpbnQgaW1tLCBpbnQgZml4
ZWQgPSAwKQorICAgIHsKKyAgICAgICAgaWYgKGZpeGVkID09IDApIHsKKyAgICAgICAgICAgIGlm
IChpbW0gPj0gLTMyNzY4ICYmIGltbSA8PSAzMjc2NykKKyAgICAgICAgICAgICAgICBhZGRpdShk
ZXN0LCBNSVBTUmVnaXN0ZXJzOjp6ZXJvLCBpbW0pOworICAgICAgICAgICAgZWxzZSBpZiAoaW1t
ID49IDAgJiYgaW1tIDwgNjU1MzYpCisgICAgICAgICAgICAgICAgb3JpKGRlc3QsIE1JUFNSZWdp
c3RlcnM6Onplcm8sIGltbSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAv
KiBsdWkgKi8KKyAgICAgICAgICAgICAgICBsdWkoZGVzdCwgaW1tID4+IDE2KTsKKyAgICAgICAg
ICAgICAgICAvKiBvcmkgKi8KKyAgICAgICAgICAgICAgICBpZiAoaW1tICYgMHhmZmZmKQorICAg
ICAgICAgICAgICAgICAgICBvcmkoZGVzdCwgZGVzdCwgaW1tKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGx1aShkZXN0LCBpbW0gPj4gMTYp
OworICAgICAgICAgICAgb3JpKGRlc3QsIGRlc3QsIGltbSk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICB2b2lkIGx1aShSZWdpc3RlcklEIHJ0LCBpbnQgaW1tKQorICAgIHsKKyAgICAgICAgLyog
bHVpICovCisgICAgICAgIGVtaXRJbnN0KDB4M2MwMDAwMDAgfCAocnQgPDwgT1BfU0hfUlQpIHwg
KGltbSAmIDB4ZmZmZikpOworICAgIH0KKworICAgIHZvaWQgYWRkaXUoUmVnaXN0ZXJJRCBydCwg
UmVnaXN0ZXJJRCBycywgaW50IGltbSkKKyAgICB7CisgICAgICAgIC8qIGFkZGl1ICovCisgICAg
ICAgIGVtaXRJbnN0KDB4MjQwMDAwMDAgfCAocnQgPDwgT1BfU0hfUlQpIHwgKHJzIDw8IE9QX1NI
X1JTKQorICAgICAgICAgICAgICAgICB8IChpbW0gJiAweGZmZmYpKTsKKyAgICB9CisKKyAgICB2
b2lkIGFkZHUoUmVnaXN0ZXJJRCByZCwgUmVnaXN0ZXJJRCBycywgUmVnaXN0ZXJJRCBydCkKKyAg
ICB7CisgICAgICAgIC8qIGFkZHUgKi8KKyAgICAgICAgZW1pdEluc3QoMHgwMDAwMDAyMSB8IChy
ZCA8PCBPUF9TSF9SRCkgfCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAgICAgICAgIHwgKHJ0
IDw8IE9QX1NIX1JUKSk7CisgICAgfQorCisgICAgdm9pZCBzdWJ1KFJlZ2lzdGVySUQgcmQsIFJl
Z2lzdGVySUQgcnMsIFJlZ2lzdGVySUQgcnQpCisgICAgeworICAgICAgICAvKiBzdWJ1ICovCisg
ICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMjMgfCAocmQgPDwgT1BfU0hfUkQpIHwgKHJzIDw8IE9Q
X1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChydCA8PCBPUF9TSF9SVCkpOworICAgIH0KKwor
ICAgIHZvaWQgbXVsdChSZWdpc3RlcklEIHJzLCBSZWdpc3RlcklEIHJ0KQorICAgIHsKKyAgICAg
ICAgLyogbXVsdCAqLworICAgICAgICBlbWl0SW5zdCgweDAwMDAwMDE4IHwgKHJzIDw8IE9QX1NI
X1JTKSB8IChydCA8PCBPUF9TSF9SVCkpOworICAgIH0KKworICAgIHZvaWQgbWZoaShSZWdpc3Rl
cklEIHJkKQorICAgIHsKKyAgICAgICAgLyogbWZoaSAqLworICAgICAgICBlbWl0SW5zdCgweDAw
MDAwMDEwIHwgKHJkIDw8IE9QX1NIX1JEKSk7CisgICAgfQorCisgICAgdm9pZCBtZmxvKFJlZ2lz
dGVySUQgcmQpCisgICAgeworICAgICAgICAvKiBtZmxvICovCisgICAgICAgIGVtaXRJbnN0KDB4
MDAwMDAwMTIgfCAocmQgPDwgT1BfU0hfUkQpKTsKKyAgICB9CisKKyAgICB2b2lkIG11bChSZWdp
c3RlcklEIHJkLCBSZWdpc3RlcklEIHJzLCBSZWdpc3RlcklEIHJ0KQorICAgIHsKKyNpZiBfX21p
cHMgPj0gMzIKKyAgICAgICAgLyogbXVsICovCisgICAgICAgIGVtaXRJbnN0KDB4NzAwMDAwMDIg
fCAocmQgPDwgT1BfU0hfUkQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAgICAgICAgICB8
IChydCA8PCBPUF9TSF9SVCkpOworI2Vsc2UKKyAgICAgICAgbXVsdChycywgcnQpOworICAgICAg
ICBtZmxvKHJkKTsKKyNlbmRpZgorICAgIH0KKworICAgIHZvaWQgYW5kX2luc24oUmVnaXN0ZXJJ
RCByZCwgUmVnaXN0ZXJJRCBycywgUmVnaXN0ZXJJRCBydCkKKyAgICB7CisgICAgICAgIC8qIGFu
ZCAqLworICAgICAgICBlbWl0SW5zdCgweDAwMDAwMDI0IHwgKHJkIDw8IE9QX1NIX1JEKSB8IChy
cyA8PCBPUF9TSF9SUykKKyAgICAgICAgICAgICAgICAgfCAocnQgPDwgT1BfU0hfUlQpKTsKKyAg
ICB9CisKKyAgICB2b2lkIGFuZGkoUmVnaXN0ZXJJRCBydCwgUmVnaXN0ZXJJRCBycywgaW50IGlt
bSkKKyAgICB7CisgICAgICAgIC8qIGFuZGkgKi8KKyAgICAgICAgZW1pdEluc3QoMHgzMDAwMDAw
MCB8IChydCA8PCBPUF9TSF9SVCkgfCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAgICAgICAg
IHwgKGltbSAmIDB4ZmZmZikpOworICAgIH0KKworICAgIHZvaWQgbm9yKFJlZ2lzdGVySUQgcmQs
IFJlZ2lzdGVySUQgcnMsIFJlZ2lzdGVySUQgcnQpCisgICAgeworICAgICAgICAvKiBub3IgKi8K
KyAgICAgICAgZW1pdEluc3QoMHgwMDAwMDAyNyB8IChyZCA8PCBPUF9TSF9SRCkgfCAocnMgPDwg
T1BfU0hfUlMpCisgICAgICAgICAgICAgICAgIHwgKHJ0IDw8IE9QX1NIX1JUKSk7CisgICAgfQor
CisgICAgdm9pZCBvcl9pbnNuKFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcnMsIFJlZ2lzdGVy
SUQgcnQpCisgICAgeworICAgICAgICAvKiBvciAqLworICAgICAgICBlbWl0SW5zdCgweDAwMDAw
MDI1IHwgKHJkIDw8IE9QX1NIX1JEKSB8IChycyA8PCBPUF9TSF9SUykKKyAgICAgICAgICAgICAg
ICAgfCAocnQgPDwgT1BfU0hfUlQpKTsKKyAgICB9CisKKyAgICB2b2lkIG9yaShSZWdpc3RlcklE
IHJ0LCBSZWdpc3RlcklEIHJzLCBpbnQgaW1tKQorICAgIHsKKyAgICAgICAgLyogb3JpICovCisg
ICAgICAgIGVtaXRJbnN0KDB4MzQwMDAwMDAgfCAocnQgPDwgT1BfU0hfUlQpIHwgKHJzIDw8IE9Q
X1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChpbW0gJiAweGZmZmYpKTsKKyAgICB9CisKKyAg
ICB2b2lkIHhvcl9pbnNuKFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcnMsIFJlZ2lzdGVySUQg
cnQpCisgICAgeworICAgICAgICAvKiB4b3IgKi8KKyAgICAgICAgZW1pdEluc3QoMHgwMDAwMDAy
NiB8IChyZCA8PCBPUF9TSF9SRCkgfCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAgICAgICAg
IHwgKHJ0IDw8IE9QX1NIX1JUKSk7CisgICAgfQorCisgICAgdm9pZCB4b3JpKFJlZ2lzdGVySUQg
cnQsIFJlZ2lzdGVySUQgcnMsIGludCBpbW0pCisgICAgeworICAgICAgICAvKiB4b3JpICovCisg
ICAgICAgIGVtaXRJbnN0KDB4MzgwMDAwMDAgfCAocnQgPDwgT1BfU0hfUlQpIHwgKHJzIDw8IE9Q
X1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChpbW0gJiAweGZmZmYpKTsKKyAgICB9CisKKyAg
ICB2b2lkIHNsdChSZWdpc3RlcklEIHJkLCBSZWdpc3RlcklEIHJzLCBSZWdpc3RlcklEIHJ0KQor
ICAgIHsKKyAgICAgICAgLyogc2x0ICovCisgICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMmEgfCAo
cmQgPDwgT1BfU0hfUkQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChy
dCA8PCBPUF9TSF9SVCkpOworICAgIH0KKworICAgIHZvaWQgc2x0dShSZWdpc3RlcklEIHJkLCBS
ZWdpc3RlcklEIHJzLCBSZWdpc3RlcklEIHJ0KQorICAgIHsKKyAgICAgICAgLyogc2x0dSAqLwor
ICAgICAgICBlbWl0SW5zdCgweDAwMDAwMDJiIHwgKHJkIDw8IE9QX1NIX1JEKSB8IChycyA8PCBP
UF9TSF9SUykKKyAgICAgICAgICAgICAgICAgfCAocnQgPDwgT1BfU0hfUlQpKTsKKyAgICB9CisK
KyAgICB2b2lkIHNsdGl1KFJlZ2lzdGVySUQgcnQsIFJlZ2lzdGVySUQgcnMsIGludCBpbW0pCisg
ICAgeworICAgICAgICAvKiBzbHRpdSAqLworICAgICAgICBlbWl0SW5zdCgweDJjMDAwMDAwIHwg
KHJ0IDw8IE9QX1NIX1JUKSB8IChycyA8PCBPUF9TSF9SUykKKyAgICAgICAgICAgICAgICAgfCAo
aW1tICYgMHhmZmZmKSk7CisgICAgfQorCisgICAgdm9pZCBzbGwoUmVnaXN0ZXJJRCByZCwgUmVn
aXN0ZXJJRCBydCwgaW50IHNoYW10KQorICAgIHsKKyAgICAgICAgLyogc2xsICovCisgICAgICAg
IGVtaXRJbnN0KDB4MDAwMDAwMDAgfCAocmQgPDwgT1BfU0hfUkQpIHwgKHJ0IDw8IE9QX1NIX1JU
KQorICAgICAgICAgICAgICAgICB8ICgoc2hhbXQgJiAweDFmKSA8PCBPUF9TSF9TSEFNVCkpOwor
ICAgIH0KKworICAgIHZvaWQgc2xsdihSZWdpc3RlcklEIHJkLCBSZWdpc3RlcklEIHJ0LCBpbnQg
cnMpCisgICAgeworICAgICAgICAvKiBzbGx2ICovCisgICAgICAgIGVtaXRJbnN0KDB4MDAwMDAw
MDQgfCAocmQgPDwgT1BfU0hfUkQpIHwgKHJ0IDw8IE9QX1NIX1JUKQorICAgICAgICAgICAgICAg
ICB8IChycyA8PCBPUF9TSF9SUykpOworICAgIH0KKworICAgIHZvaWQgc3JhKFJlZ2lzdGVySUQg
cmQsIFJlZ2lzdGVySUQgcnQsIGludCBzaGFtdCkKKyAgICB7CisgICAgICAgIC8qIHNyYSAqLwor
ICAgICAgICBlbWl0SW5zdCgweDAwMDAwMDAzIHwgKHJkIDw8IE9QX1NIX1JEKSB8IChydCA8PCBP
UF9TSF9SVCkKKyAgICAgICAgICAgICAgICAgfCAoKHNoYW10ICYgMHgxZikgPDwgT1BfU0hfU0hB
TVQpKTsKKyAgICB9CisKKyAgICB2b2lkIHNyYXYoUmVnaXN0ZXJJRCByZCwgUmVnaXN0ZXJJRCBy
dCwgUmVnaXN0ZXJJRCBycykKKyAgICB7CisgICAgICAgIC8qIHNyYXYgKi8KKyAgICAgICAgZW1p
dEluc3QoMHgwMDAwMDAwNyB8IChyZCA8PCBPUF9TSF9SRCkgfCAocnQgPDwgT1BfU0hfUlQpCisg
ICAgICAgICAgICAgICAgIHwgKHJzIDw8IE9QX1NIX1JTKSk7CisgICAgfQorCisgICAgdm9pZCBs
dyhSZWdpc3RlcklEIHJ0LCBSZWdpc3RlcklEIHJzLCBpbnQgb2Zmc2V0KQorICAgIHsKKyAgICAg
ICAgLyogbHcgKi8KKyAgICAgICAgZW1pdEluc3QoMHg4YzAwMDAwMCB8IChydCA8PCBPUF9TSF9S
VCkgfCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAgICAgICAgIHwgKG9mZnNldCAmIDB4ZmZm
ZikpOworI2lmIF9fbWlwcyA9PSAxCisgICAgICAgIG5vcCgpOworI2VuZGlmCisgICAgfQorCisg
ICAgdm9pZCBsaHUoUmVnaXN0ZXJJRCBydCwgUmVnaXN0ZXJJRCBycywgaW50IG9mZnNldCkKKyAg
ICB7CisgICAgICAgIC8qIGxodSAqLworICAgICAgICBlbWl0SW5zdCgweDk0MDAwMDAwIHwgKHJ0
IDw8IE9QX1NIX1JUKSB8IChycyA8PCBPUF9TSF9SUykKKyAgICAgICAgICAgICAgICAgfCAob2Zm
c2V0ICYgMHhmZmZmKSk7CisjaWYgX19taXBzID09IDEKKyAgICAgICAgbm9wKCk7CisjZW5kaWYK
KyAgICB9CisKKyAgICB2b2lkIHN3KFJlZ2lzdGVySUQgcnQsIFJlZ2lzdGVySUQgcnMsIGludCBv
ZmZzZXQpCisgICAgeworICAgICAgICAvKiBzdyAqLworICAgICAgICBlbWl0SW5zdCgweGFjMDAw
MDAwIHwgKHJ0IDw8IE9QX1NIX1JUKSB8IChycyA8PCBPUF9TSF9SUykKKyAgICAgICAgICAgICAg
ICAgfCAob2Zmc2V0ICYgMHhmZmZmKSk7CisgICAgfQorCisgICAgdm9pZCBqbXBfcmVnaXN0ZXIo
UmVnaXN0ZXJJRCBycykKKyAgICB7CisgICAgICAgIC8qIGpyICovCisgICAgICAgIGVtaXRJbnN0
KDB4MDAwMDAwMDggfCAocnMgPDwgT1BfU0hfUlMpKTsKKyAgICAgICAgLyogbm9wICovCisgICAg
ICAgIG5vcCgpOworICAgIH0KKworICAgIHZvaWQgYmtwdCgpCisgICAgeworICAgICAgICAvKiBi
cmVhayAqLworICAgICAgICBpbnQgdmFsdWUgPSA1MTI7IC8qIEJSS19CVUcgKi8KKyAgICAgICAg
ZW1pdEluc3QoMHgwMDAwMDAwZCB8ICgodmFsdWUgJiAweDNmZikgPDwgT1BfU0hfQ09ERSkpOwor
ICAgIH0KKworICAgIC8qIE5vdGU6IFdlIGRvbid0IHB1dCBhIG5vcCBhZnRlciBiZ2V6IGFzIGFu
IG9wdGltaXphdGlvbi4KKyAgICAgICAgICAgICBUaGUgZGVsYXkgc2xvdCB3aWxsIGJlIGZpbGxl
ZCBsYXRlci4gICovCisgICAgdm9pZCBiZ2V6KFJlZ2lzdGVySUQgcnMsIGludCBpbW0pCisgICAg
eworICAgICAgICAvKiBiZ2V6ICovCisgICAgICAgIGVtaXRJbnN0KDB4MDQwMTAwMDAgfCAocnMg
PDwgT1BfU0hfUlMpIHwgKGltbSAmIDB4ZmZmZikpOworICAgIH0KKworICAgIC8qIE5vdGU6IFdl
IGRvbid0IHB1dCBhIG5vcCBhZnRlciBibHR6IGFzIGFuIG9wdGltaXphdGlvbi4KKyAgICAgICAg
ICAgICBUaGUgZGVsYXkgc2xvdCB3aWxsIGJlIGZpbGxlZCBsYXRlci4gICovCisgICAgdm9pZCBi
bHR6KFJlZ2lzdGVySUQgcnMsIGludCBpbW0pCisgICAgeworICAgICAgICAvKiBibHR6ICovCisg
ICAgICAgIGVtaXRJbnN0KDB4MDQwMDAwMDAgfCAocnMgPDwgT1BfU0hfUlMpIHwgKGltbSAmIDB4
ZmZmZikpOworICAgIH0KKworICAgIC8qIE5vdGU6IFdlIGRvbid0IHB1dCBhIG5vcCBhZnRlciBi
ZXF6IGFzIGFuIG9wdGltaXphdGlvbi4KKyAgICAgICAgICAgICBUaGUgZGVsYXkgc2xvdCB3aWxs
IGJlIGZpbGxlZCBsYXRlci4gICovCisgICAgdm9pZCBiZXEoUmVnaXN0ZXJJRCBycywgUmVnaXN0
ZXJJRCBydCwgaW50IGltbSkKKyAgICB7CisgICAgICAgIC8qIGJlcSAqLworICAgICAgICBlbWl0
SW5zdCgweDEwMDAwMDAwIHwgKHJzIDw8IE9QX1NIX1JTKSB8IChydCA8PCBPUF9TSF9SVCkgfCAo
aW1tICYgMHhmZmZmKSk7CisgICAgfQorCisgICAgSm1wU3JjIGptcCgpCisgICAgeworICAgICAg
ICBtX2p1bXBzLmFwcGVuZChtX2J1ZmZlci5zaXplKCkpOworCisgICAgICAgIC8qIGJlcSAkMCwg
JDAgKi8KKyAgICAgICAgZW1pdEluc3QoMHgxMDAwMDAwMCk7CisgICAgICAgIG5vcCgpOworICAg
ICAgICAvKiBXZSBuZWVkIHR3byBleHRyYSBub3BzIGZvciByZWxheGF0aW9uLiAgKi8KKyAgICAg
ICAgbm9wKCk7CisgICAgICAgIG5vcCgpOworICAgICAgICByZXR1cm4gSm1wU3JjKG1fYnVmZmVy
LnNpemUoKSk7CisgICAgfQorCisgICAgSm1wU3JjIGJyYW5jaF9lcShSZWdpc3RlcklEIHJzLCBS
ZWdpc3RlcklEIHJ0KQorICAgIHsKKyAgICAgICAgbV9qdW1wcy5hcHBlbmQobV9idWZmZXIuc2l6
ZSgpKTsKKworICAgICAgICAvKiBiZXEgKi8KKyAgICAgICAgZW1pdEluc3QoMHgxMDAwMDAwMCB8
IChycyA8PCBPUF9TSF9SUykgfCAocnQgPDwgT1BfU0hfUlQpKTsKKyAgICAgICAgbm9wKCk7Cisg
ICAgICAgIC8qIFdlIG5lZWQgdHdvIGV4dHJhIG5vcHMgZm9yIHJlbGF4YXRpb24uICAqLworICAg
ICAgICBub3AoKTsKKyAgICAgICAgbm9wKCk7CisgICAgICAgIHJldHVybiBKbXBTcmMobV9idWZm
ZXIuc2l6ZSgpKTsKKyAgICB9CisKKyAgICBKbXBTcmMgYnJhbmNoX25lKFJlZ2lzdGVySUQgcnMs
IFJlZ2lzdGVySUQgcnQpCisgICAgeworICAgICAgICBtX2p1bXBzLmFwcGVuZChtX2J1ZmZlci5z
aXplKCkpOworCisgICAgICAgIC8qIGJuZSAqLworICAgICAgICBlbWl0SW5zdCgweDE0MDAwMDAw
IHwgKHJzIDw8IE9QX1NIX1JTKSB8IChydCA8PCBPUF9TSF9SVCkpOworICAgICAgICBub3AoKTsK
KyAgICAgICAgLyogV2UgbmVlZCB0d28gZXh0cmEgbm9wcyBmb3IgcmVsYXhhdGlvbi4gICovCisg
ICAgICAgIG5vcCgpOworICAgICAgICBub3AoKTsKKyAgICAgICAgcmV0dXJuIEptcFNyYyhtX2J1
ZmZlci5zaXplKCkpOworICAgIH0KKworICAgIHZvaWQgYWRkX2QoRlBSZWdpc3RlcklEIGZkLCBG
UFJlZ2lzdGVySUQgZnMsIEZQUmVnaXN0ZXJJRCBmdCkKKyAgICB7CisgICAgICAgIC8qIGFkZC5k
ICovCisgICAgICAgIGVtaXRJbnN0KDB4NDYyMDAwMDAgfCAoZmQgPDwgT1BfU0hfRkQpIHwgKGZz
IDw8IE9QX1NIX0ZTKQorICAgICAgICAgICAgICAgICB8IChmdCA8PCBPUF9TSF9GVCkpOworICAg
IH0KKworICAgIHZvaWQgc3ViX2QoRlBSZWdpc3RlcklEIGZkLCBGUFJlZ2lzdGVySUQgZnMsIEZQ
UmVnaXN0ZXJJRCBmdCkKKyAgICB7CisgICAgICAgIC8qIHN1Yi5kICovCisgICAgICAgIGVtaXRJ
bnN0KDB4NDYyMDAwMDEgfCAoZmQgPDwgT1BfU0hfRkQpIHwgKGZzIDw8IE9QX1NIX0ZTKQorICAg
ICAgICAgICAgICAgICB8IChmdCA8PCBPUF9TSF9GVCkpOworICAgIH0KKworICAgIHZvaWQgbXVs
X2QoRlBSZWdpc3RlcklEIGZkLCBGUFJlZ2lzdGVySUQgZnMsIEZQUmVnaXN0ZXJJRCBmdCkKKyAg
ICB7CisgICAgICAgIC8qIG11bC5kICovCisgICAgICAgIGVtaXRJbnN0KDB4NDYyMDAwMDIgfCAo
ZmQgPDwgT1BfU0hfRkQpIHwgKGZzIDw8IE9QX1NIX0ZTKQorICAgICAgICAgICAgICAgICB8IChm
dCA8PCBPUF9TSF9GVCkpOworICAgIH0KKworICAgIHZvaWQgbHdjMShGUFJlZ2lzdGVySUQgZnQs
IFJlZ2lzdGVySUQgcnMsIGludCBvZmZzZXQpCisgICAgeworICAgICAgICAvKiBsd2MxICovCisg
ICAgICAgIGVtaXRJbnN0KDB4YzQwMDAwMDAgfCAoZnQgPDwgT1BfU0hfRlQpIHwgKHJzIDw8IE9Q
X1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChvZmZzZXQgJiAweGZmZmYpKTsKKyNpZiBfX21p
cHMgPT0gMQorICAgICAgICBub3AoKTsKKyNlbmRpZgorICAgIH0KKworICAgIHZvaWQgbGRjMShG
UFJlZ2lzdGVySUQgZnQsIFJlZ2lzdGVySUQgcnMsIGludCBvZmZzZXQpCisgICAgeworICAgICAg
ICAvKiBsZGMxICovCisgICAgICAgIGVtaXRJbnN0KDB4ZDQwMDAwMDAgfCAoZnQgPDwgT1BfU0hf
RlQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChvZmZzZXQgJiAweGZm
ZmYpKTsKKyAgICB9CisKKyAgICB2b2lkIHN3YzEoRlBSZWdpc3RlcklEIGZ0LCBSZWdpc3RlcklE
IHJzLCBpbnQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgLyogc3djMSAqLworICAgICAgICBlbWl0
SW5zdCgweGU0MDAwMDAwIHwgKGZ0IDw8IE9QX1NIX0ZUKSB8IChycyA8PCBPUF9TSF9SUykKKyAg
ICAgICAgICAgICAgICAgfCAob2Zmc2V0ICYgMHhmZmZmKSk7CisgICAgfQorCisgICAgdm9pZCBz
ZGMxKEZQUmVnaXN0ZXJJRCBmdCwgUmVnaXN0ZXJJRCBycywgaW50IG9mZnNldCkKKyAgICB7Cisg
ICAgICAgIC8qIHNkYzEgKi8KKyAgICAgICAgZW1pdEluc3QoMHhmNDAwMDAwMCB8IChmdCA8PCBP
UF9TSF9GVCkgfCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAgICAgICAgIHwgKG9mZnNldCAm
IDB4ZmZmZikpOworICAgIH0KKworICAgIHZvaWQgbXRjMShSZWdpc3RlcklEIHJ0LCBGUFJlZ2lz
dGVySUQgZnMpCisgICAgeworICAgICAgICAvKiBtdGMxICovCisgICAgICAgIGVtaXRJbnN0KDB4
NDQ4MDAwMDAgfCAoZnMgPDwgT1BfU0hfRlMpIHwgKHJ0IDw8IE9QX1NIX1JUKSk7CisjaWYgX19t
aXBzID09IDEKKyAgICAgICAgbm9wKCk7CisjZW5kaWYKKyAgICB9CisKKyAgICB2b2lkIG1mYzEo
UmVnaXN0ZXJJRCBydCwgRlBSZWdpc3RlcklEIGZzKQorICAgIHsKKyAgICAgICAgLyogbWZjMSAq
LworICAgICAgICBlbWl0SW5zdCgweDQ0MDAwMDAwIHwgKGZzIDw8IE9QX1NIX0ZTKSB8IChydCA8
PCBPUF9TSF9SVCkpOworI2lmIF9fbWlwcyA9PSAxCisgICAgICAgIG5vcCgpOworI2VuZGlmCisg
ICAgfQorCisgICAgdm9pZCB0cnVuY193X2QoRlBSZWdpc3RlcklEIGZkLCBGUFJlZ2lzdGVySUQg
ZnMpCisgICAgeworICAgICAgICAvKiB0cnVuYy53LmQgKi8KKyAgICAgICAgZW1pdEluc3QoMHg0
NjIwMDAwZCB8IChmZCA8PCBPUF9TSF9GRCkgfCAoZnMgPDwgT1BfU0hfRlMpKTsKKyAgICB9CisK
KyAgICB2b2lkIGN2dF9kX3coRlBSZWdpc3RlcklEIGZkLCBGUFJlZ2lzdGVySUQgZnMpCisgICAg
eworICAgICAgICAvKiBjdnQuZC53ICovCisgICAgICAgIGVtaXRJbnN0KDB4NDY4MDAwMjEgfCAo
ZmQgPDwgT1BfU0hfRkQpIHwgKGZzIDw8IE9QX1NIX0ZTKSk7CisgICAgfQorCisgICAgdm9pZCBj
X2VxX2QoRlBSZWdpc3RlcklEIGZzLCBGUFJlZ2lzdGVySUQgZnQpCisgICAgeworICAgICAgICAv
KiBjLmVxLmQgKi8KKyAgICAgICAgZW1pdEluc3QoMHg0NjIwMDAzMiB8IChmcyA8PCBPUF9TSF9G
UykgfCAoZnQgPDwgT1BfU0hfRlQpKTsKKyNpZiBfX21pcHMgPT0gMQorICAgICAgICBub3AoKTsK
KyNlbmRpZgorICAgIH0KKworICAgIHZvaWQgY19sdF9kKEZQUmVnaXN0ZXJJRCBmcywgRlBSZWdp
c3RlcklEIGZ0KQorICAgIHsKKyAgICAgICAgLyogYy5sdC5kICovCisgICAgICAgIGVtaXRJbnN0
KDB4NDYyMDAwM2MgfCAoZnMgPDwgT1BfU0hfRlMpIHwgKGZ0IDw8IE9QX1NIX0ZUKSk7CisjaWYg
X19taXBzID09IDEKKyAgICAgICAgbm9wKCk7CisjZW5kaWYKKyAgICB9CisKKyAgICB2b2lkIGNf
bGVfZChGUFJlZ2lzdGVySUQgZnMsIEZQUmVnaXN0ZXJJRCBmdCkKKyAgICB7CisgICAgICAgIC8q
IGMubHQuZCAqLworICAgICAgICBlbWl0SW5zdCgweDQ2MjAwMDNlIHwgKGZzIDw8IE9QX1NIX0ZT
KSB8IChmdCA8PCBPUF9TSF9GVCkpOworI2lmIF9fbWlwcyA9PSAxCisgICAgICAgIG5vcCgpOwor
I2VuZGlmCisgICAgfQorCisgICAgSm1wU3JjIGJjMXQoKQorICAgIHsKKyAgICAgICAgLyogYmMx
dCAqLworICAgICAgICBlbWl0SW5zdCgweDQ1MDEwMDAwKTsKKyAgICAgICAgbm9wKCk7CisgICAg
ICAgIC8qIFdlIG5lZWQgdHdvIGV4dHJhIG5vcHMgZm9yIHJlbGF4YXRpb24uICAqLworICAgICAg
ICBub3AoKTsKKyAgICAgICAgbm9wKCk7CisgICAgICAgIHJldHVybiBKbXBTcmMobV9idWZmZXIu
c2l6ZSgpKTsKKyAgICB9CisKKyAgICBKbXBTcmMgZmFyX2Z1bmN0aW9uX2NhbGwoKQorICAgIHsK
KyAgICAgICAgbHVpKE1JUFNSZWdpc3RlcnM6OnQ5LCAwKTsKKyAgICAgICAgb3JpKE1JUFNSZWdp
c3RlcnM6OnQ5LCBNSVBTUmVnaXN0ZXJzOjp0OSwgMCk7CisgICAgICAgIC8qIGphbHIgKi8KKyAg
ICAgICAgZW1pdEluc3QoMHgwMDAwZjgwOSB8IChNSVBTUmVnaXN0ZXJzOjp0OSA8PCBPUF9TSF9S
UykpOworICAgICAgICBub3AoKTsKKyAgICAgICAgcmV0dXJuIEptcFNyYyhtX2J1ZmZlci5zaXpl
KCkpOworICAgIH0KKworICAgIEptcFNyYyBmdW5jdGlvbl9jYWxsKCkKKyAgICB7CisgICAgICAg
IC8qIGphbCAqLworICAgICAgICBlbWl0SW5zdCgweDBjMDAwMDAwKTsKKyAgICAgICAgbm9wKCk7
CisgICAgICAgIHJldHVybiBKbXBTcmMobV9idWZmZXIuc2l6ZSgpKTsKKyAgICB9CisKKyAgICBK
bXBTcmMgZnVuY3Rpb25fY2FsbF92aWFfcmVnaXN0ZXIoUmVnaXN0ZXJJRCBycykKKyAgICB7Cisg
ICAgICAgIC8qIGphbHIgKi8KKyAgICAgICAgZW1pdEluc3QoMHgwMDAwZjgwOSB8IChycyA8PCBP
UF9TSF9SUykpOworICAgICAgICBub3AoKTsKKyAgICAgICAgcmV0dXJuIEptcFNyYyhtX2J1ZmZl
ci5zaXplKCkpOworICAgIH0KKworICAgIEptcFNyYyB0YWlsX2Z1bmN0aW9uX2NhbGxfdmlhX3Jl
Z2lzdGVyKFJlZ2lzdGVySUQgcnMpCisgICAgeworICAgICAgICAvKiBqciAqLworICAgICAgICBl
bWl0SW5zdCgweDAwMDAwMDA4IHwgKHJzIDw8IE9QX1NIX1JTKSk7CisgICAgICAgIG5vcCgpOwor
ICAgICAgICByZXR1cm4gSm1wU3JjKG1fYnVmZmVyLnNpemUoKSk7CisgICAgfQorCisgICAgLy8g
R2VuZXJhbCBoZWxwZXJzCisKKyAgICBKbXBEc3QgbGFiZWwoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEptcERzdChtX2J1ZmZlci5zaXplKCkpOworICAgIH0KKworICAgIEptcERzdCBhbGlnbihp
bnQgYWxpZ25tZW50KQorICAgIHsKKyAgICAgICAgd2hpbGUgKCFtX2J1ZmZlci5pc0FsaWduZWQo
YWxpZ25tZW50KSkKKyAgICAgICAgICAgIGJrcHQoKTsKKworICAgICAgICByZXR1cm4gbGFiZWwo
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCogZ2V0UmVsb2NhdGVkQWRkcmVzcyh2b2lkKiBj
b2RlLCBKbXBTcmMganVtcCkKKyAgICB7CisgICAgICAgIEFTU0VSVChqdW1wLm1fb2Zmc2V0ICE9
IC0xKTsKKyAgICAgICAgdm9pZCAqYiA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KChyZWludGVy
cHJldF9jYXN0PGludHB0cl90Pihjb2RlKSkgKyBqdW1wLm1fb2Zmc2V0KTsKKyAgICAgICAgcmV0
dXJuIGI7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQqIGdldFJlbG9jYXRlZEFkZHJlc3Modm9p
ZCogY29kZSwgSm1wRHN0IGxhYmVsKQorICAgIHsKKyAgICAgICAgdm9pZCAqYiA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KChyZWludGVycHJldF9jYXN0PGludHB0cl90Pihjb2RlKSkgKyBsYWJl
bC5tX29mZnNldCk7CisgICAgICAgIHJldHVybiBiOworICAgIH0KKworICAgIHN0YXRpYyBpbnQg
Z2V0RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMoSm1wRHN0IGZyb20sIEptcERzdCB0bykKKyAgICB7
CisgICAgICAgIHJldHVybiB0by5tX29mZnNldCAtIGZyb20ubV9vZmZzZXQ7CisgICAgfQorCisg
ICAgc3RhdGljIGludCBnZXREaWZmZXJlbmNlQmV0d2VlbkxhYmVscyhKbXBEc3QgZnJvbSwgSm1w
U3JjIHRvKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvLm1fb2Zmc2V0IC0gZnJvbS5tX29mZnNl
dDsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGdldERpZmZlcmVuY2VCZXR3ZWVuTGFiZWxzKEpt
cFNyYyBmcm9tLCBKbXBEc3QgdG8pCisgICAgeworICAgICAgICByZXR1cm4gdG8ubV9vZmZzZXQg
LSBmcm9tLm1fb2Zmc2V0OworICAgIH0KKworICAgIC8vIEFzc2VtYmxlciBhZG1pbiBtZXRob2Rz
OgorCisgICAgc2l6ZV90IHNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYnVm
ZmVyLnNpemUoKTsKKyAgICB9CisKKyAgICB2b2lkKiBleGVjdXRhYmxlQ29weShFeGVjdXRhYmxl
UG9vbCogYWxsb2NhdG9yKQorICAgIHsKKyAgICAgICAgaW50IHNpemUgPSBtX2J1ZmZlci5zaXpl
KCk7CisgICAgICAgIGlmICghc2l6ZSkKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAg
IHZvaWQqIHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2Moc2l6ZSk7CisgICAgICAgIGlmICghcmVz
dWx0KQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgRXhlY3V0YWJsZUFsbG9jYXRv
cjo6bWFrZVdyaXRhYmxlKHJlc3VsdCwgc2l6ZSk7CisgICAgICAgIG1lbWNweShyZXN1bHQsIG1f
YnVmZmVyLmRhdGEoKSwgbV9idWZmZXIuc2l6ZSgpKTsKKyAgICAgICAgcmVsb2NhdGVKdW1wcyht
X2J1ZmZlci5kYXRhKCksIHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
CisgICAgc3RhdGljIHVuc2lnbmVkIGdldENhbGxSZXR1cm5PZmZzZXQoSm1wU3JjIGNhbGwpCisg
ICAgeworICAgICAgICAvLyBUaGUgcmV0dXJuIGFkZHJlc3MgaXMgYWZ0ZXIgYSBjYWxsIGFuZCBh
IGRlbGF5IHNsb3QgaW5zdHJ1Y3Rpb24KKyAgICAgICAgcmV0dXJuIGNhbGwubV9vZmZzZXQ7Cisg
ICAgfQorCisgICAgLy8gTGlua2luZyAmIHBhdGNoaW5nOgorICAgIC8vCisgICAgLy8gJ2xpbmsn
IGFuZCAncGF0Y2gnIG1ldGhvZHMgYXJlIGZvciB1c2Ugb24gdW5wcm90ZWN0ZWQgY29kZSAtIHN1
Y2ggYXMgdGhlIGNvZGUKKyAgICAvLyB3aXRoaW4gdGhlIEFzc2VtYmxlckJ1ZmZlciwgYW5kIGNv
ZGUgYmVpbmcgcGF0Y2hlZCBieSB0aGUgcGF0Y2ggYnVmZmVyLiAgT25jZQorICAgIC8vIGNvZGUg
aGFzIGJlZW4gZmluYWxpemVkIGl0IGlzIChwbGF0Zm9ybSBzdXBwb3J0IHBlcm1pdHRpbmcpIHdp
dGhpbiBhIG5vbi0KKyAgICAvLyB3cml0YWJsZSByZWdpb24gb2YgbWVtb3J5OyB0byBtb2RpZnkg
dGhlIGNvZGUgaW4gYW4gZXhlY3V0ZS1vbmx5IGV4ZWN1YWJsZQorICAgIC8vIHBvb2wgdGhlICdy
ZXBhdGNoJyBhbmQgJ3JlbGluaycgbWV0aG9kcyBzaG91bGQgYmUgdXNlZC4KKworICAgIHZvaWQg
bGlua0p1bXAoSm1wU3JjIGZyb20sIEptcERzdCB0bykKKyAgICB7CisgICAgICAgIEFTU0VSVCh0
by5tX29mZnNldCAhPSAtMSk7CisgICAgICAgIEFTU0VSVChmcm9tLm1fb2Zmc2V0ICE9IC0xKTsK
KyAgICAgICAgTUlQU1dvcmQgKmluc24gPSByZWludGVycHJldF9jYXN0PE1JUFNXb3JkKj4ocmVp
bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obV9idWZmZXIuZGF0YSgpKSArIGZyb20ubV9vZmZzZXQp
OworICAgICAgICBNSVBTV29yZCAqdG9fcG9zID0gcmVpbnRlcnByZXRfY2FzdDxNSVBTV29yZCo+
KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1fYnVmZmVyLmRhdGEoKSkgKyB0by5tX29mZnNl
dCk7CisKKyAgICAgICAgQVNTRVJUICgoKihpbnNuIC0gMSkpID09IDAgJiYgKCgqKGluc24gLSAy
KSkgPT0gMCB8fCAoKCooaW5zbiAtIDIpKSAmIDB4ZmMwMDAwMDApID09IDB4MDgwMDAwMDApICYm
ICgqKGluc24gLSAzKSkgPT0gMCk7CisgICAgICAgIGluc24gPSBpbnNuIC0gNDsKKyAgICAgICAg
bGlua1dpdGhPZmZzZXQoaW5zbiwgdG9fcG9zKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBs
aW5rSnVtcCh2b2lkKiBjb2RlLCBKbXBTcmMgZnJvbSwgdm9pZCogdG8pCisgICAgeworICAgICAg
ICBBU1NFUlQoZnJvbS5tX29mZnNldCAhPSAtMSk7CisgICAgICAgIE1JUFNXb3JkICppbnNuID0g
cmVpbnRlcnByZXRfY2FzdDxNSVBTV29yZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGNv
ZGUpICsgZnJvbS5tX29mZnNldCk7CisKKyAgICAgICAgQVNTRVJUICgoKihpbnNuIC0gMSkpID09
IDAgJiYgKCgqKGluc24gLSAyKSkgPT0gMCB8fCAoKCooaW5zbiAtIDIpKSAmIDB4ZmMwMDAwMDAp
ID09IDB4MDgwMDAwMDApICYmICgqKGluc24gLSAzKSkgPT0gMCk7CisgICAgICAgIGluc24gPSBp
bnNuIC0gNDsKKyAgICAgICAgbGlua1dpdGhPZmZzZXQoaW5zbiwgdG8pOworICAgIH0KKworICAg
IHN0YXRpYyB2b2lkIGxpbmtDYWxsKHZvaWQqIGNvZGUsIEptcFNyYyBmcm9tLCB2b2lkKiB0bykK
KyAgICB7CisgICAgICAgIE1JUFNXb3JkICppbnNuID0gcmVpbnRlcnByZXRfY2FzdDxNSVBTV29y
ZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGNvZGUpICsgZnJvbS5tX29mZnNldCk7Cisg
ICAgICAgIGxpbmtDYWxsSW50ZXJuYWwoaW5zbiwgdG8pOworICAgIH0KKworICAgIHN0YXRpYyB2
b2lkIGxpbmtQb2ludGVyKHZvaWQqIGNvZGUsIEptcERzdCBmcm9tLCB2b2lkKiB0bykKKyAgICB7
CisgICAgICAgIE1JUFNXb3JkICppbnNuID0gcmVpbnRlcnByZXRfY2FzdDxNSVBTV29yZCo+KHJl
aW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGNvZGUpICsgZnJvbS5tX29mZnNldCk7CisgICAgICAg
IEFTU0VSVCgoKCppbnNuKSAmIDB4ZmZlMDAwMDApID09IDB4M2MwMDAwMDApOyAvLyBsdWkKKyAg
ICAgICAgKmluc24gPSAoKCppbnNuKSAmIDB4ZmZmZjAwMDApIHwgKChyZWludGVycHJldF9jYXN0
PGludHB0cl90Pih0bykgPj4gMTYpICYgMHhmZmZmKTsKKyAgICAgICAgaW5zbisrOworICAgICAg
ICBBU1NFUlQoKCgqaW5zbikgJiAweGZjMDAwMDAwKSA9PSAweDM0MDAwMDAwKTsgLy8gb3JpCisg
ICAgICAgICppbnNuID0gKCgqaW5zbikgJiAweGZmZmYwMDAwKSB8IChyZWludGVycHJldF9jYXN0
PGludHB0cl90Pih0bykgJiAweGZmZmYpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHJlbGlu
a0p1bXAodm9pZCogZnJvbSwgdm9pZCogdG8pCisgICAgeworICAgICAgICBNSVBTV29yZCAqaW5z
biA9IHJlaW50ZXJwcmV0X2Nhc3Q8TUlQU1dvcmQqPihmcm9tKTsKKworICAgICAgICBBU1NFUlQg
KCgqKGluc24gLSAxKSkgPT0gMCAmJiAoKCooaW5zbiAtIDIpKSA9PSAwIHx8ICgoKihpbnNuIC0g
MikpICYgMHhmYzAwMDAwMCkgPT0gMHgwODAwMDAwMCkgJiYgKCooaW5zbiAtIDMpKSA9PSAwICk7
CisgICAgICAgIGluc24gPSBpbnNuIC0gNDsKKyAgICAgICAgaW50IGZsdXNoX3NpemUgPSBsaW5r
V2l0aE9mZnNldChpbnNuLCB0byk7CisKKyAgICAgICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6Y2Fj
aGVGbHVzaChpbnNuLCBmbHVzaF9zaXplKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCByZWxp
bmtDYWxsKHZvaWQqIGZyb20sIHZvaWQqIHRvKQorICAgIHsKKyAgICAgICAgdm9pZCAqc3RhcnQg
PSBsaW5rQ2FsbEludGVybmFsKGZyb20sIHRvKTsKKyAgICAgICAgaW50IHNpemUgPSBzaXplb2Yo
TUlQU1dvcmQpOworICAgICAgICBpbnQgZGlmZiA9IChyZWludGVycHJldF9jYXN0PGludHB0cl90
Pihmcm9tKQorICAgICAgICAgICAgICAgICAgICAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+
KHN0YXJ0KSk7CisgICAgICAgIGlmIChkaWZmID09IDE2KSAvLyBXZSBtb2RpZnkgdHdvIGluc3Ry
dWN0aW9ucyBsdWkgKyBvcmkuCisgICAgICAgICAgc2l6ZSA9IDIgKiBzaXplb2YoTUlQU1dvcmQp
OworCisgICAgICAgIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmNhY2hlRmx1c2goc3RhcnQsIHNpemUp
OworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hJbnQzMih2b2lkKiBmcm9tLCBpbnQz
Ml90IHRvKQorICAgIHsKKyAgICAgICAgTUlQU1dvcmQgKmluc24gPSByZWludGVycHJldF9jYXN0
PE1JUFNXb3JkKj4oZnJvbSk7CisgICAgICAgIEFTU0VSVCgoKCppbnNuKSAmIDB4ZmZlMDAwMDAp
ID09IDB4M2MwMDAwMDApOyAvLyBsdWkKKyAgICAgICAgKmluc24gPSAoKCppbnNuKSAmIDB4ZmZm
ZjAwMDApIHwgKCh0byA+PiAxNikgJiAweGZmZmYpOworICAgICAgICBpbnNuKys7CisgICAgICAg
IEFTU0VSVCgoKCppbnNuKSAmIDB4ZmMwMDAwMDApID09IDB4MzQwMDAwMDApOyAvLyBvcmkKKyAg
ICAgICAgKmluc24gPSAoKCppbnNuKSAmIDB4ZmZmZjAwMDApIHwgKHRvICYgMHhmZmZmKTsKKyAg
ICAgICAgaW5zbi0tOworICAgICAgICBFeGVjdXRhYmxlQWxsb2NhdG9yOjpjYWNoZUZsdXNoKGlu
c24sIDIgKiBzaXplb2YoTUlQU1dvcmQpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCByZXBh
dGNoUG9pbnRlcih2b2lkKiBmcm9tLCB2b2lkKiB0bykKKyAgICB7CisgICAgICAgIHJlcGF0Y2hJ
bnQzMihmcm9tLCByZWludGVycHJldF9jYXN0PGludDMyX3Q+KHRvKSk7CisgICAgfQorCisgICAg
c3RhdGljIHZvaWQgcmVwYXRjaExvYWRQdHJUb0xFQSh2b2lkKiBmcm9tKQorICAgIHsKKyAgICAg
ICAgTUlQU1dvcmQgKmluc24gPSByZWludGVycHJldF9jYXN0PE1JUFNXb3JkKj4oZnJvbSk7Cisg
ICAgICAgIGluc24gPSBpbnNuICsgMzsKKyAgICAgICAgQVNTRVJUICgoKCppbnNuKSAmIDB4ZmMw
MDAwMDApID09IDB4OGMwMDAwMDApOyAvLyBsdworICAgICAgICAvKiBsdyAtPiBhZGRpdSAqLwor
ICAgICAgICAqaW5zbiA9IDB4MjQwMDAwMDAgfCAoKCppbnNuKSAmIDB4MDNmZmZmZmYgKTsKKwor
ICAgICAgICBFeGVjdXRhYmxlQWxsb2NhdG9yOjpjYWNoZUZsdXNoKGluc24sIHNpemVvZihNSVBT
V29yZCkpOworICAgIH0KKworcHJpdmF0ZToKKworICAgIC8qIFVwZGF0ZSBlYWNoIGp1bXAgaW4g
dGhlIGJ1ZmZlciBvZiBuZXdfYmFzZS4gICovCisgICAgdm9pZCByZWxvY2F0ZUp1bXBzKHZvaWQg
Km9sZF9iYXNlLCB2b2lkICpuZXdfYmFzZSkKKyAgICB7CisgICAgICAgIC8vIENoZWNrIGVhY2gg
anVtcAorICAgICAgICBmb3IoSnVtcHM6Okl0ZXJhdG9yIGl0ZXIgPSBtX2p1bXBzLmJlZ2luKCk7
IGl0ZXIgIT0gbV9qdW1wcy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgICAgICBpbnQgcG9zID0g
KCppdGVyKTsKKyAgICAgICAgICAgIE1JUFNXb3JkICppbnNuID0gcmVpbnRlcnByZXRfY2FzdDxN
SVBTV29yZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG5ld19iYXNlKSArIHBvcyk7Cisg
ICAgICAgICAgICBpbnNuID0gaW5zbiArIDI7CisgICAgICAgICAgICBpZigoKCppbnNuKSAmIDB4
ZmMwMDAwMDApID09IDB4MDgwMDAwMDApIHsKKyAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0g
KCppbnNuKSAmIDB4MDNmZmZmZmY7CisgICAgICAgICAgICAgICAgaW50IG9sZF9pbnNuX2FkZHJl
c3MgPSAoaW50KWluc24gLSAoaW50KW5ld19iYXNlICsgKGludClvbGRfYmFzZTsKKyAgICAgICAg
ICAgICAgICBpbnQgdG9wX2ZvdXJfYml0cyA9IChvbGRfaW5zbl9hZGRyZXNzICsgNCkgPj4gMjg7
CisgICAgICAgICAgICAgICAgaW50IG9sZF90YXJnZXRfYWRkcmVzcyA9ICh0b3BfZm91cl9iaXRz
IDw8IDI4KSB8IChvZmZzZXQgPDwgMik7CisgICAgICAgICAgICAgICAgaW50IG5ld190YXJnZXRf
YWRkcmVzcyA9IG9sZF90YXJnZXRfYWRkcmVzcyAtIChpbnQpb2xkX2Jhc2UgKyAoaW50KW5ld19i
YXNlOworICAgICAgICAgICAgICAgIGludCBuZXdfaW5zbl9hZGRyZXNzID0gb2xkX2luc25fYWRk
cmVzcyAtIChpbnQpb2xkX2Jhc2UgKyAoaW50KW5ld19iYXNlOworICAgICAgICAgICAgICAgIGlm
ICgoKG5ld19pbnNuX2FkZHJlc3MgKyA0KSA+PiAyOCkgIT0gKG5ld190YXJnZXRfYWRkcmVzcyA+
PiAyOCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiRXJyb3I6IENh
bm5vdCBjcmVhdGUgTUlQUyBqdW1wIChKKSBkdWUgdG8gdGhlIHRvcCBmb3VyIGJpdHMgYXJlIGRp
ZmZlcmVudC5cbiIpOworICAgICAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAqaW5zbiA9IDB4MDgwMDAwMDAgfCAoKG5ld190YXJnZXRf
YWRkcmVzcyA+PiAyKSAmIDB4M2ZmZmZmZik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBzdGF0aWMgaW50IGxpbmtXaXRoT2Zmc2V0KE1JUFNXb3JkICppbnNuLCB2b2lk
ICp0bykKKyAgICB7CisgICAgICAgIEFTU0VSVCgoKCgqaW5zbikgJiAweGZjMDAwMDAwKSA9PSAw
eDEwMDAwMDAwKSAvLyBiZXEKKyAgICAgICAgICAgICAgIHx8ICgoKCppbnNuKSAmIDB4ZmMwMDAw
MDApID09IDB4MTQwMDAwMDApIC8vIGJuZQorICAgICAgICAgICAgICAgfHwgKCgoKmluc24pICYg
MHhmZmZmMDAwMCkgPT0gMHg0NTAxMDAwMCkgLy8gYmMxdAorICAgICAgICAgICAgICAgfHwgKCgo
Kmluc24pICYgMHhmZmZmMDAwMCkgPT0gMHg0NTAwMDAwMCkpOyAvLyBiYzFmCisgICAgICAgIGlu
dCBkaWZmID0gKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIHJlaW50ZXJwcmV0X2Nh
c3Q8aW50cHRyX3Q+KGluc24pIC0gNCkgPj4gMjsKKworICAgICAgICBpZiAoZGlmZiA8IC0zMjc2
OCB8fCBkaWZmID4gMzI3NjcpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgQ29u
dmVydCB0aGUgc2VxdWVuY2U6CisgICAgICAgICAgICAgICAgICBiZXEgJDIsICQzLCB0YXJnZXQK
KyAgICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAg
ICAgICAgICBub3AKKworICAgICAgICAgICAgICAgIHRvIHRoZSBuZXcgc2VxdWVuY2U6CisgICAg
ICAgICAgICAgICAgICBibmUgJDIsICQzLCAxZgorICAgICAgICAgICAgICAgICAgbm9wCisgICAg
ICAgICAgICAgICAgICBqICAgIHRhcmdldAorICAgICAgICAgICAgICAgICAgbm9wCisgICAgICAg
ICAgICAgICAgMToKKworICAgICAgICAgICAgICAgIE5vdGU6IGJlcS9ibmUvYmMxdCBhcmUgY29u
dmVydGVkIHRvIGJuZS9iZXEvYmMxZi4KKyAgICAgICAgICAgICovCisKKyAgICAgICAgICAgIGlm
ICgoKihpbnNuICsgMikpID09IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoKCgqaW5zbikgJiAw
eGZjMDAwMDAwKSA9PSAweDEwMDAwMDAwKSAgICAgICAvLyBiZXEKKyAgICAgICAgICAgICAgICAg
ICAgKmluc24gPSAoKCppbnNuKSAmIDB4MDNmZjAwMDApIHwgMHgxNDAwMDAwMzsKKyAgICAgICAg
ICAgICAgICBlbHNlIGlmICgoKCppbnNuKSAmIDB4ZmMwMDAwMDApID09IDB4MTQwMDAwMDApICAv
LyBibmUKKyAgICAgICAgICAgICAgICAgICAgKmluc24gPSAoKCppbnNuKSAmIDB4MDNmZjAwMDAp
IHwgMHgxMDAwMDAwMzsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICgoKCppbnNuKSAmIDB4ZmZm
ZjAwMDApID09IDB4NDUwMTAwMDApICAvLyBiYzF0CisgICAgICAgICAgICAgICAgICAgICppbnNu
ID0gKCgqaW5zbikgJiAweDAwMDAwMDAwKSB8IDB4NDUwMDAwMDM7CisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICBBU1NFUlQoMCk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGluc24gPSBpbnNuICsgMjsKKyAgICAgICAgICAgIGlmICgoKHJlaW50ZXJwcmV0
X2Nhc3Q8aW50cHRyX3Q+KGluc24pICsgNCkgPj4gMjgpICE9IChyZWludGVycHJldF9jYXN0PGlu
dHB0cl90Pih0bykgPj4gMjgpKSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJF
cnJvcjogQ2Fubm90IGNyZWF0ZSBNSVBTIGp1bXAgKEopIGR1ZSB0byB0aGUgdG9wIGZvdXIgYml0
cyBhcmUgZGlmZmVyZW50LlxuIik7CisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICppbnNuID0gMHgwODAwMDAwMCB8ICgocmVpbnRlcnByZXRfY2Fz
dDxpbnRwdHJfdD4odG8pID4+IDIpICYgMHgzZmZmZmZmKTsKKyAgICAgICAgICAgIHJldHVybiAz
ICogc2l6ZW9mKE1JUFNXb3JkKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICppbnNuID0gKCgqaW5zbikgJiAweGZmZmYwMDAwKSB8IChkaWZmICYgMHhmZmZmKTsKKyAg
ICAgICAgICAgIHJldHVybiBzaXplb2YoTUlQU1dvcmQpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkICpsaW5rQ2FsbEludGVybmFsKHZvaWQg
KmZyb20sIHZvaWQgKnRvKQorICAgIHsKKyAgICAgICAgTUlQU1dvcmQgKmluc24gPSByZWludGVy
cHJldF9jYXN0PE1JUFNXb3JkKj4oZnJvbSk7CisgICAgICAgIGluc24gPSBpbnNuIC0gMjsKKyAg
ICAgICAgaWYoKCgqaW5zbikgJiAweGZjMDAwMDAwKSA9PSAweDBjMDAwMDAwKSB7IC8vIEpBTAor
ICAgICAgICAgICAgaWYgKCgocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZnJvbSkgKyA0KSA+
PiAyOCkgIT0gKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSA+PiAyOCkpIHsKKyAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBDUkFTSCBtZWFucyB3ZSBjYW5ub3QgdHVybiB0aGUg
SklUIG9uCisgICAgICAgICAgICAgICAgLy8gYnkgZGVmYXVsdCBvbiBNSVBTLgorICAgICAgICAg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3I6IENhbm5vdCBjcmVhdGUgTUlQUyBjYWxsIChK
QUwpIGR1ZSB0byB0aGUgdG9wIGZvdXIgYml0cyBhcmUgZGlmZmVyZW50LlxuIik7CisgICAgICAg
ICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICppbnNuID0gKCgq
aW5zbikgJiAweGZjMDAwMDAwKSB8ICgocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pID4+
IDIpICYgMHgzZmZmZmZmKTsKKyAgICAgICAgICAgIHJldHVybiBpbnNuOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UgaWYoKCgoKmluc24pICYgMHhmYzFmMDdmZikgPT0gMHgwMDAwMDAwOSkgIC8v
IEpBTFIKKyAgICAgICAgICAgICAgICB8fCAoKCgqaW5zbikgJiAweGZjMWZmZmZmKSA9PSAweDAw
MDAwMDA4KSkgeyAgICAvLyBKUgorICAgICAgICAgICAgaW5zbiA9IGluc24gLSAyOworICAgICAg
ICAgICAgQVNTRVJUKCgoKmluc24pICYgMHhmZmUwMDAwMCkgPT0gMHgzYzAwMDAwMCk7IC8vIGx1
aQorICAgICAgICAgICAgKmluc24gPSAoKCppbnNuKSAmIDB4ZmZmZjAwMDApIHwgKChyZWludGVy
cHJldF9jYXN0PGludHB0cl90Pih0bykgPj4gMTYpICYgMHhmZmZmKTsKKyAgICAgICAgICAgIGlu
c24rKzsKKyAgICAgICAgICAgIEFTU0VSVCgoKCppbnNuKSAmIDB4ZmMwMDAwMDApID09IDB4MzQw
MDAwMDApOyAvLyBvcmkKKyAgICAgICAgICAgICppbnNuID0gKCgqaW5zbikgJiAweGZmZmYwMDAw
KSB8IChyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgJiAweGZmZmYpOworICAgICAgICAg
ICAgaW5zbi0tOworICAgICAgICAgICAgcmV0dXJuIGluc247CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoMCk7CisgICAgICAgICAgICByZXR1cm4gaW5zbjsK
KyAgICAgICAgfQorICAgIH0KKworICAgIEFzc2VtYmxlckJ1ZmZlciBtX2J1ZmZlcjsKKyAgICBK
dW1wcyBtX2p1bXBzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFC
TEUoQVNTRU1CTEVSKSAmJiBQTEFURk9STShNSVBTKQorCisjZW5kaWYgLy8gTUlQU0Fzc2VtYmxl
cl9oCkluZGV4OiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyTUlQUy5oCShyZXZpc2lvbiAwKQorKysgYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyTUlQUy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0NzggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBN
SVBTIFRFQ0hOT0xPR0lFUywgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IE1JUFMgVEVDSE5PTE9HSUVTLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgTWFjcm9Bc3NlbWJsZXJNSVBTX2gKKyNk
ZWZpbmUgTWFjcm9Bc3NlbWJsZXJNSVBTX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgor
CisjaWYgRU5BQkxFKEFTU0VNQkxFUikgJiYgUExBVEZPUk0oTUlQUykKKworI2luY2x1ZGUgIk1J
UFNBc3NlbWJsZXIuaCIKKyNpbmNsdWRlICJBYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgiCisKK25h
bWVzcGFjZSBKU0MgeworCitjbGFzcyBNYWNyb0Fzc2VtYmxlck1JUFMgOiBwdWJsaWMgQWJzdHJh
Y3RNYWNyb0Fzc2VtYmxlcjxNSVBTQXNzZW1ibGVyPiB7CitwdWJsaWM6CisKKyAgICBzdGF0aWMg
Y29uc3QgU2NhbGUgU2NhbGVQdHIgPSBUaW1lc0ZvdXI7CisKKyAgICAvLyBGb3Igc3RvcmluZyBp
bW1lZGlhdGUgbnVtYmVyCisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgaW1tVGVtcFJlZ2lz
dGVyID0gTUlQU1JlZ2lzdGVyczo6dDA7CisgICAgLy8gRm9yIHN0b3JpbmcgZGF0YSBsb2FkZWQg
ZnJvbSB0aGUgbWVtb3J5CisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgZGF0YVRlbXBSZWdp
c3RlciA9IE1JUFNSZWdpc3RlcnM6OnQxOworICAgIC8vIEZvciBzdG9yaW5nIGFkZHJlc3MgYmFz
ZQorICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGFkZHJUZW1wUmVnaXN0ZXIgPSBNSVBTUmVn
aXN0ZXJzOjp0MjsKKyAgICAvLyBGb3Igc3RvcmluZyBjb21wYXJlIHJlc3VsdAorICAgIHN0YXRp
YyBjb25zdCBSZWdpc3RlcklEIGNtcFRlbXBSZWdpc3RlciA9IE1JUFNSZWdpc3RlcnM6OnQzOwor
CisgICAgLy8gRlAgdGVtcCByZWdpc3RlcgorICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQg
ZnBUZW1wUmVnaXN0ZXIgPSBNSVBTUmVnaXN0ZXJzOjpmMTY7CisKKyAgICBlbnVtIENvbmRpdGlv
biB7CisgICAgICAgIEVxdWFsLAorICAgICAgICBOb3RFcXVhbCwKKyAgICAgICAgQWJvdmUsCisg
ICAgICAgIEFib3ZlT3JFcXVhbCwKKyAgICAgICAgQmVsb3csCisgICAgICAgIEJlbG93T3JFcXVh
bCwKKyAgICAgICAgR3JlYXRlclRoYW4sCisgICAgICAgIEdyZWF0ZXJUaGFuT3JFcXVhbCwKKyAg
ICAgICAgTGVzc1RoYW4sCisgICAgICAgIExlc3NUaGFuT3JFcXVhbCwKKyAgICAgICAgT3ZlcmZs
b3csCisgICAgICAgIFNpZ25lZCwKKyAgICAgICAgWmVybywKKyAgICAgICAgTm9uWmVybworICAg
IH07CisKKyAgICBlbnVtIERvdWJsZUNvbmRpdGlvbiB7CisgICAgICAgIERvdWJsZUVxdWFsLAor
ICAgICAgICBEb3VibGVHcmVhdGVyVGhhbiwKKyAgICAgICAgRG91YmxlR3JlYXRlclRoYW5PckVx
dWFsLAorICAgICAgICBEb3VibGVMZXNzVGhhbiwKKyAgICAgICAgRG91YmxlTGVzc1RoYW5PckVx
dWFsCisgICAgfTsKKworICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHN0YWNrUG9pbnRlclJl
Z2lzdGVyID0gTUlQU1JlZ2lzdGVyczo6c3A7CisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQg
cmV0dXJuQWRkcmVzc1JlZ2lzdGVyID0gTUlQU1JlZ2lzdGVyczo6cmE7CisKKyAgICAvLyBJbnRl
Z2VyIGFyaXRobWV0aWMgb3BlcmF0aW9uczoKKyAgICAvLworICAgIC8vIE9wZXJhdGlvbnMgYXJl
IHR5cGljYWxseSB0d28gb3BlcmFuZCAtIG9wZXJhdGlvbihzb3VyY2UsIHNyY0RzdCkKKyAgICAv
LyBGb3IgbWFueSBvcGVyYXRpb25zIHRoZSBzb3VyY2UgbWF5IGJlIGFuIEltbTMyLCB0aGUgc3Jj
RHN0IG9wZXJhbmQKKyAgICAvLyBtYXkgb2Z0ZW4gYmUgYSBtZW1vcnkgbG9jYXRpb24gKGV4cGxp
Y3RseSBkZXNjcmliZWQgdXNpbmcgYW4gQWRkcmVzcworICAgIC8vIG9iamVjdCkuCisKKyAgICB2
b2lkIGFkZDMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QsIGludCBmaXhlZCA9IDAp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGRlc3QsIGRlc3QsIHNyYyk7CisgICAg
fQorCisgICAgdm9pZCBhZGQzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVk
ID0gMCkKKyAgICB7CisgICAgICAgIGFkZDMyKGltbSwgZGVzdCwgZGVzdCwgZml4ZWQpOworICAg
IH0KKworICAgIHZvaWQgYWRkMzIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJ
RCBkZXN0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgaWYoaW1tLm1fdmFsdWUgPj0g
LTMyNzY4ICYmIGltbS5tX3ZhbHVlIDw9IDMyNzY3ICYmIGZpeGVkID09IDApIHsKKyAgICAgICAg
ICAgIC8qCisgICAgICAgICAgICAgIGFkZGl1ICAgICBkZXN0LCBzcmMsIGltbQorICAgICAgICAg
ICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGl1KGRlc3QsIHNyYywgaW1tLm1fdmFs
dWUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLyoKKyAgICAgICAg
ICAgICAgbGkgICAgICAgIGltbVRlbXAsIGltbQorICAgICAgICAgICAgICBhZGR1ICAgICAgZGVz
dCwgc3JjLCBpbW1UZW1wCisgICAgICAgICAgICAqLworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
bGkoaW1tVGVtcFJlZ2lzdGVyLCBpbW0ubV92YWx1ZSwgZml4ZWQpOworICAgICAgICAgICAgbV9h
c3NlbWJsZXIuYWRkdShkZXN0LCBzcmMsIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICB2b2lkIGFkZDMyKEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzLCBpbnQgZml4
ZWQgPSAwKQorICAgIHsKKyAgICAgICAgaWYgKGFkZHJlc3Mub2Zmc2V0ID49IC0zMjc2OCAmJiBh
ZGRyZXNzLm9mZnNldCA8PSAzMjc2NyAmJiBmaXhlZCA9PSAwKSB7CisgICAgICAgICAgICAvKgor
ICAgICAgICAgICAgICBsdyAgICAgICAgZGF0YVRlbXAsIG9mZnNldChiYXNlKQorICAgICAgICAg
ICAgICBsaSAgICAgICAgaW1tVGVtcCwgaW1tCisgICAgICAgICAgICAgIGFkZHUgICAgICBkYXRh
VGVtcCwgZGF0YVRlbXAsIGltbVRlbXAKKyAgICAgICAgICAgICAgc3cgICAgICAgIGRhdGFUZW1w
LCBvZmZzZXQoYmFzZSkKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5s
dyhkYXRhVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAg
ICAgICAgIGlmKGltbS5tX3ZhbHVlID49IC0zMjc2OCAmJiBpbW0ubV92YWx1ZSA8PSAzMjc2NyAm
JiBmaXhlZCA9PSAwKQorICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGl1KGRhdGFUZW1w
UmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW1tLm1fdmFsdWUpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
bV9hc3NlbWJsZXIubGkoaW1tVGVtcFJlZ2lzdGVyLCBpbW0ubV92YWx1ZSwgZml4ZWQpOworICAg
ICAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoZGF0YVRlbXBSZWdpc3RlciwgZGF0YVRlbXBS
ZWdpc3RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltbVRlbXBSZWdpc3Rl
cik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdyhkYXRhVGVtcFJl
Z2lzdGVyLCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgIGx1aSAgICAgICBhZGRyVGVt
cCwgb2Zmc2V0ID4+IDE2CisgICAgICAgICAgICAgIGFkZHUgICAgICBhZGRyVGVtcCwgYWRkclRl
bXAsIGJhc2UKKyAgICAgICAgICAgICAgbHcgICAgICAgIGRhdGFUZW1wLCAob2Zmc2V0ICYgMHhm
ZmZmKShhZGRyVGVtcCkKKyAgICAgICAgICAgICAgbGkgICAgICAgIGltbXRlbXAsIGltbQorICAg
ICAgICAgICAgICBhZGR1ICAgICAgZGF0YVRlbXAsIGRhdGFUZW1wLCBpbW1UZW1wCisgICAgICAg
ICAgICAgIHN3ICAgICAgICBkYXRhVGVtcCwgKG9mZnNldCAmIDB4ZmZmZikoYWRkclRlbXApCisg
ICAgICAgICAgICAqLworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHVpKGFkZHJUZW1wUmVnaXN0
ZXIsIGFkZHJlc3Mub2Zmc2V0ID4+IDE2KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUo
YWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlKTsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLmx3KGRhdGFUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIs
IGFkZHJlc3Mub2Zmc2V0KTsKKworICAgICAgICAgICAgaWYoaW1tLm1fdmFsdWUgPj0gLTMyNzY4
ICYmIGltbS5tX3ZhbHVlIDw9IDMyNzY3ICYmIGZpeGVkID09IDApCisgICAgICAgICAgICAgICAg
bV9hc3NlbWJsZXIuYWRkaXUoZGF0YVRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3RlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbW0ubV92YWx1ZSk7CisgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5saShpbW1UZW1wUmVnaXN0ZXIs
IGltbS5tX3ZhbHVlLCBmaXhlZCk7CisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShk
YXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLnN3KGRhdGFUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJl
c3Mub2Zmc2V0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgYWRkMzIoQWRkcmVzcyBz
cmMsIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIGxvYWQz
MihzcmMsIGRhdGFUZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAgICAgICAgYWRkMzIoZGF0YVRlbXBS
ZWdpc3RlciwgZGVzdCwgZml4ZWQpOworICAgIH0KKworICAgIHZvaWQgYWRkMzIoUmVnaXN0ZXJJ
RCBzcmMsIEFkZHJlc3MgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIGlmIChk
ZXN0Lm9mZnNldCA+PSAtMzI3NjggJiYgZGVzdC5vZmZzZXQgPD0gMzI3NjcgJiYgZml4ZWQgPT0g
MCkgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgbHcgICAgICAgIGRhdGFUZW1wLCBv
ZmZzZXQoYmFzZSkKKyAgICAgICAgICAgICAgYWRkdSAgICAgIGRhdGFUZW1wLCBkYXRhVGVtcCwg
c3JjCisgICAgICAgICAgICAgIHN3ICAgICAgICBkYXRhVGVtcCwgb2Zmc2V0KGJhc2UpCisgICAg
ICAgICAgICAqLworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHcoZGF0YVRlbXBSZWdpc3Rlciwg
ZGVzdC5iYXNlLCBkZXN0Lm9mZnNldCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGRh
dGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsIHNyYyk7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5zdyhkYXRhVGVtcFJlZ2lzdGVyLCBkZXN0LmJhc2UsIGRlc3Qub2Zmc2V0KTsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgIGx1
aSAgICAgICBhZGRyVGVtcCwgb2Zmc2V0ID4+IDE2CisgICAgICAgICAgICAgIGFkZHUgICAgICBh
ZGRyVGVtcCwgYWRkclRlbXAsIGJhc2UKKyAgICAgICAgICAgICAgbHcgICAgICAgIGRhdGFUZW1w
LCAob2Zmc2V0ICYgMHhmZmZmKShhZGRyVGVtcCkKKyAgICAgICAgICAgICAgYWRkdSAgICAgIGRh
dGFUZW1wLCBkYXRhVGVtcCwgc3JjCisgICAgICAgICAgICAgIHN3ICAgICAgICBkYXRhVGVtcCwg
KG9mZnNldCAmIDB4ZmZmZikoYWRkclRlbXApCisgICAgICAgICAgICAqLworICAgICAgICAgICAg
bV9hc3NlbWJsZXIubHVpKGFkZHJUZW1wUmVnaXN0ZXIsIGRlc3Qub2Zmc2V0ID4+IDE2KTsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdp
c3RlciwgZGVzdC5iYXNlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx3KGRhdGFUZW1wUmVn
aXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGRlc3Qub2Zmc2V0KTsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmFkZHUoZGF0YVRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3Rlciwgc3JjKTsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLnN3KGRhdGFUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0
ZXIsIGRlc3Qub2Zmc2V0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgYWRkMzIoSW1t
MzIgaW1tLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcywgaW50IGZpeGVkID0gMCkKKyAgICB7Cisg
ICAgICAgIC8qCisgICAgICAgICAgIGxpICAgYWRkclRlbXAsIGFkZHJlc3MKKyAgICAgICAgICAg
bGkgICBpbW1UZW1wLCBpbW0KKyAgICAgICAgICAgbHcgICBkYXRhVGVtcCwgMChhZGRyVGVtcCkK
KyAgICAgICAgICAgYWRkdSBkYXRhVGVtcCwgZGF0YVRlbXAsIGltbVRlbXAKKyAgICAgICAgICAg
c3cgICBkYXRhVGVtcCwgMChhZGRyVGVtcCkKKyAgICAgICAgKi8KKyAgICAgICAgbV9hc3NlbWJs
ZXIubGkoYWRkclRlbXBSZWdpc3RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnBy
ZXRfY2FzdDxNSVBTV29yZD4oYWRkcmVzcy5tX3B0ciksIGZpeGVkKTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubHcoZGF0YVRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgMCk7CisgICAgICAg
IGlmIChpbW0ubV92YWx1ZSA+PSAtMzI3NjggJiYgaW1tLm1fdmFsdWUgPD0gMzI3NjcgJiYgZml4
ZWQgPT0gMCkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGl1KGRhdGFUZW1wUmVnaXN0ZXIs
IGRhdGFUZW1wUmVnaXN0ZXIsIGltbS5tX3ZhbHVlKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5saShpbW1UZW1wUmVnaXN0ZXIsIGltbS5tX3ZhbHVlLCBmaXhlZCk7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1w
UmVnaXN0ZXIsIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgIH0KKyAgICAgICAgbV9hc3NlbWJs
ZXIuc3coZGF0YVRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgMCk7CisgICAgfQorCisg
ICAgdm9pZCBhbmQzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQg
PSAwKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5kX2luc24oZGVzdCwgZGVzdCwgc3Jj
KTsKKyAgICB9CisKKyAgICB2b2lkIGFuZDMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0LCBp
bnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgaWYgKGltbS5tX3ZhbHVlID09IDAgJiYgZml4
ZWQgPT0gMCkKKyAgICAgICAgICAgIG1vdmUoTUlQU1JlZ2lzdGVyczo6emVybywgZGVzdCwgZml4
ZWQpOworICAgICAgICBlbHNlIGlmIChpbW0ubV92YWx1ZSA+IDAgJiYgaW1tLm1fdmFsdWUgPCA2
NTUzNSAmJiBmaXhlZCA9PSAwKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuYW5kaShkZXN0LCBk
ZXN0LCBpbW0ubV92YWx1ZSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLyoKKyAgICAg
ICAgICAgICAgbGkgICAgICAgIGltbVRlbXAsIGltbQorICAgICAgICAgICAgICBhbmQgICAgICAg
ZGVzdCwgZGVzdCwgaW1tVGVtcAorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLmxpKGltbVRlbXBSZWdpc3RlciwgaW1tLm1fdmFsdWUsIGZpeGVkKTsKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmFuZF9pbnNuKGRlc3QsIGRlc3QsIGltbVRlbXBSZWdpc3Rlcik7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGxzaGlmdDMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBk
ZXN0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc2xsKGRlc3Qs
IGRlc3QsIGltbS5tX3ZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkIGxzaGlmdDMyKFJlZ2lzdGVy
SUQgc2hpZnRfYW1vdW50LCBSZWdpc3RlcklEIGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5zbGx2KGRlc3QsIGRlc3QsIHNoaWZ0X2Ftb3VudCk7CisgICAg
fQorCisgICAgdm9pZCBtdWwzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0LCBpbnQg
Zml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubXVsKGRlc3QsIGRlc3QsIHNy
Yyk7CisgICAgfQorCisgICAgdm9pZCBtdWwzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjLCBS
ZWdpc3RlcklEIGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBpZiAoaW1tLm1f
dmFsdWUgPT0gMCAmJiBmaXhlZCA9PSAwKQorICAgICAgICAgICAgbW92ZShNSVBTUmVnaXN0ZXJz
Ojp6ZXJvLCBkZXN0LCBmaXhlZCk7CisgICAgICAgIGVsc2UgaWYgKGltbS5tX3ZhbHVlID09IDEg
JiYgZml4ZWQgPT0gMCkKKyAgICAgICAgICAgIG1vdmUoc3JjLCBkZXN0LCBmaXhlZCk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICBsaSAgICAgIGRhdGFU
ZW1wLCBpbW0KKyAgICAgICAgICAgICAgICBtdWwgICAgIGRlc3QsIHNyYywgZGF0YVRlbXAKKyAg
ICAgICAgICAgICovCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5saShkYXRhVGVtcFJlZ2lzdGVy
LCBpbW0ubV92YWx1ZSwgZml4ZWQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubXVsKGRlc3Qs
IHNyYywgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIG5v
dDMyKFJlZ2lzdGVySUQgc3JjRGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLm5vcihzcmNEZXN0LCBzcmNEZXN0LCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsKKyAg
ICB9CisKKyAgICB2b2lkIG9yMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCwgaW50
IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9yX2luc24oZGVzdCwgZGVz
dCwgc3JjKTsKKyAgICB9CisKKyAgICB2b2lkIG9yMzIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRl
c3QsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBpZiAoaW1tLm1fdmFsdWUgPT0gMCAm
JiBmaXhlZCA9PSAwKQorICAgICAgICAgICAgOworICAgICAgICBlbHNlIGlmIChpbW0ubV92YWx1
ZSA+IDAgJiYgaW1tLm1fdmFsdWUgPCA2NTUzNSAmJiBmaXhlZCA9PSAwKQorICAgICAgICAgICAg
bV9hc3NlbWJsZXIub3JpKGRlc3QsIGRlc3QsIGltbS5tX3ZhbHVlKTsKKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgIGxpICAgICAgZGF0YVRlbXAsIGltbQor
ICAgICAgICAgICAgICAgIG9yICAgICAgZGVzdCwgZGVzdCwgZGF0YVRlbXAKKyAgICAgICAgICAg
ICovCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5saShkYXRhVGVtcFJlZ2lzdGVyLCBpbW0ubV92
YWx1ZSwgZml4ZWQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIub3JfaW5zbihkZXN0LCBkZXN0
LCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgcnNoaWZ0
MzIoUmVnaXN0ZXJJRCBzaGlmdF9hbW91bnQsIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0g
MCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnNyYXYoZGVzdCwgZGVzdCwgc2hpZnRfYW1v
dW50KTsKKyAgICB9CisKKyAgICB2b2lkIHJzaGlmdDMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBk
ZXN0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3JhKGRlc3Qs
IGRlc3QsIGltbS5tX3ZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkIHN1YjMyKFJlZ2lzdGVySUQg
c3JjLCBSZWdpc3RlcklEIGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5zdWJ1KGRlc3QsIGRlc3QsIHNyYyk7CisgICAgfQorCisgICAgdm9pZCBzdWIzMihJ
bW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAg
IGlmKGltbS5tX3ZhbHVlID49IC0zMjc2NyAmJiBpbW0ubV92YWx1ZSA8PSAzMjc2OCAmJiBmaXhl
ZCA9PSAwKSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICBhZGRpdSAgICAgZGVzdCwg
c3JjLCBpbW0KKyAgICAgICAgICAgICovCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRpdShk
ZXN0LCBkZXN0LCAtaW1tLm1fdmFsdWUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgLyoKKyAgICAgICAgICAgICAgbGkgICAgICAgIGltbVRlbXAsIGltbQorICAgICAg
ICAgICAgICBzdWJ1ICAgICAgZGVzdCwgc3JjLCBpbW1UZW1wCisgICAgICAgICAgICAqLworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIubGkoaW1tVGVtcFJlZ2lzdGVyLCBpbW0ubV92YWx1ZSwgZml4
ZWQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3VidShkZXN0LCBkZXN0LCBpbW1UZW1wUmVn
aXN0ZXIpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBzdWIzMihJbW0zMiBpbW0sIEFk
ZHJlc3MgYWRkcmVzcywgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIGlmIChhZGRyZXNz
Lm9mZnNldCA+PSAtMzI3NjggJiYgYWRkcmVzcy5vZmZzZXQgPD0gMzI3NjcgJiYgZml4ZWQgPT0g
MCkgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgbHcgICAgICAgIGRhdGFUZW1wLCBv
ZmZzZXQoYmFzZSkKKyAgICAgICAgICAgICAgbGkgICAgICAgIGltbVRlbXAsIGltbQorICAgICAg
ICAgICAgICBzdWJ1ICAgICAgZGF0YVRlbXAsIGRhdGFUZW1wLCBpbW1UZW1wCisgICAgICAgICAg
ICAgIHN3ICAgICAgICBkYXRhVGVtcCwgb2Zmc2V0KGJhc2UpCisgICAgICAgICAgICAqLworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIubHcoZGF0YVRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlLCBh
ZGRyZXNzLm9mZnNldCk7CisgICAgICAgICAgICBpZihpbW0ubV92YWx1ZSA+PSAtMzI3NjcgJiYg
aW1tLm1fdmFsdWUgPD0gMzI3NjggJiYgZml4ZWQgPT0gMCkKKyAgICAgICAgICAgICAgICBtX2Fz
c2VtYmxlci5hZGRpdShkYXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1pbW0ubV92YWx1ZSk7CisgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5saShpbW1UZW1wUmVnaXN0ZXIsIGlt
bS5tX3ZhbHVlLCBmaXhlZCk7CisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3VidShkYXRh
VGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLnN3KGRhdGFUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5vZmZz
ZXQpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLyoKKyAgICAgICAg
ICAgICAgbHVpICAgICAgIGFkZHJUZW1wLCBvZmZzZXQgPj4gMTYKKyAgICAgICAgICAgICAgYWRk
dSAgICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgYmFzZQorICAgICAgICAgICAgICBsdyAgICAgICAg
ZGF0YVRlbXAsIChvZmZzZXQgJiAweGZmZmYpKGFkZHJUZW1wKQorICAgICAgICAgICAgICBsaSAg
ICAgICAgaW1tdGVtcCwgaW1tCisgICAgICAgICAgICAgIHN1YnUgICAgICBkYXRhVGVtcCwgZGF0
YVRlbXAsIGltbVRlbXAKKyAgICAgICAgICAgICAgc3cgICAgICAgIGRhdGFUZW1wLCAob2Zmc2V0
ICYgMHhmZmZmKShhZGRyVGVtcCkKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5sdWkoYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQgPj4gMTYpOworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVy
LCBhZGRyZXNzLmJhc2UpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHcoZGF0YVRlbXBSZWdp
c3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQpOworCisgICAgICAgICAgICBp
ZihpbW0ubV92YWx1ZSA+PSAtMzI3NjcgJiYgaW1tLm1fdmFsdWUgPD0gMzI3NjggJiYgZml4ZWQg
PT0gMCkKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRpdShkYXRhVGVtcFJlZ2lzdGVy
LCBkYXRhVGVtcFJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1p
bW0ubV92YWx1ZSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5saShpbW1UZW1wUmVnaXN0ZXIsIGltbS5tX3ZhbHVlLCBmaXhlZCk7CisgICAgICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuc3VidShkYXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVy
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1tVGVtcFJlZ2lzdGVyKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN3KGRhdGFUZW1wUmVnaXN0ZXIs
IGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHZvaWQgc3ViMzIoQWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0g
MCkKKyAgICB7CisgICAgICAgIGxvYWQzMihzcmMsIGRhdGFUZW1wUmVnaXN0ZXIsIGZpeGVkKTsK
KyAgICAgICAgc3ViMzIoZGF0YVRlbXBSZWdpc3RlciwgZGVzdCwgZml4ZWQpOworICAgIH0KKwor
ICAgIHZvaWQgc3ViMzIoSW1tMzIgaW1tLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcywgaW50IGZp
eGVkID0gMCkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAgIGxpICAgYWRkclRlbXAsIGFk
ZHJlc3MKKyAgICAgICAgICAgbGkgICBpbW1UZW1wLCBpbW0KKyAgICAgICAgICAgbHcgICBkYXRh
VGVtcCwgMChhZGRyVGVtcCkKKyAgICAgICAgICAgc3VidSBkYXRhVGVtcCwgZGF0YVRlbXAsIGlt
bVRlbXAKKyAgICAgICAgICAgc3cgICBkYXRhVGVtcCwgMChhZGRyVGVtcCkKKyAgICAgICAgKi8K
KyAgICAgICAgbV9hc3NlbWJsZXIubGkoYWRkclRlbXBSZWdpc3RlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxNSVBTV29yZD4oYWRkcmVzcy5tX3B0ciksIGZpeGVk
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIubHcoZGF0YVRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdp
c3RlciwgMCk7CisKKyAgICAgICAgaWYoaW1tLm1fdmFsdWUgPj0gLTMyNzY3ICYmIGltbS5tX3Zh
bHVlIDw9IDMyNzY4ICYmIGZpeGVkID09IDApIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFk
ZGl1KGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAtaW1tLm1fdmFsdWUpOworICAgICAgICB9CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIubGkoaW1tVGVtcFJlZ2lzdGVyLCBpbW0ubV92YWx1ZSwg
Zml4ZWQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3VidShkYXRhVGVtcFJlZ2lzdGVyLCBk
YXRhVGVtcFJlZ2lzdGVyLCBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICB9CisgICAgICAgIG1f
YXNzZW1ibGVyLnN3KGRhdGFUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIDApOworICAg
IH0KKworICAgIHZvaWQgeG9yMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCwgaW50
IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnhvcl9pbnNuKGRlc3QsIGRl
c3QsIHNyYyk7CisgICAgfQorCisgICAgdm9pZCB4b3IzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQg
ZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAgICBsaSAg
aW1tVGVtcCwgaW1tCisgICAgICAgICAgICB4b3IgZGVzdCwgZGVzdCwgaW1tVGVtcAorICAgICAg
ICAqLworICAgICAgICBtX2Fzc2VtYmxlci5saShpbW1UZW1wUmVnaXN0ZXIsIGltbS5tX3ZhbHVl
LCBmaXhlZCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnhvcl9pbnNuKGRlc3QsIGRlc3QsIGltbVRl
bXBSZWdpc3Rlcik7CisgICAgfQorCisgICAgLy8gTWVtb3J5IGFjY2VzcyBvcGVyYXRpb25zOgor
ICAgIC8vCisgICAgLy8gTG9hZHMgYXJlIG9mIHRoZSBmb3JtIGxvYWQoYWRkcmVzcywgZGVzdGlu
YXRpb24pIGFuZCBzdG9yZXMgb2YgdGhlIGZvcm0KKyAgICAvLyBzdG9yZShzb3VyY2UsIGFkZHJl
c3MpLiAgVGhlIHNvdXJjZSBmb3IgYSBzdG9yZSBtYXkgYmUgYW4gSW1tMzIuICBBZGRyZXNzCisg
ICAgLy8gb3BlcmFuZCBvYmplY3RzIHRvIGxvYWRzIGFuZCBzdG9yZSB3aWxsIGJlIGltcGxpY2l0
bHkgY29uc3RydWN0ZWQgaWYgYQorICAgIC8vIHJlZ2lzdGVyIGlzIHBhc3NlZC4KKworICAgIHZv
aWQgbG9hZDMyKEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QsIGludCBm
aXhlZCA9IDApCisgICAgeworICAgICAgICBpZiAoYWRkcmVzcy5vZmZzZXQgPj0gLTMyNzY4ICYm
IGFkZHJlc3Mub2Zmc2V0IDw9IDMyNzY3ICYmIGZpeGVkID09IDApCisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5sdyhkZXN0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgIGx1aSAgICAgYWRkclRlbXAs
IG9mZnNldCA+PiAxNgorICAgICAgICAgICAgICAgIGFkZHUgICAgYWRkclRlbXAsIGFkZHJUZW1w
LCBiYXNlCisgICAgICAgICAgICAgICAgbHcgICAgICBkZXN0LCAob2Zmc2V0ICYgMHhmZmZmKShh
ZGRyVGVtcCkKKyAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx1aShh
ZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCA+PiAxNik7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mu
YmFzZSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sdyhkZXN0LCBhZGRyVGVtcFJlZ2lzdGVy
LCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGxvYWQzMihC
YXNlSW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsK
KyAgICAgICAgaWYgKGFkZHJlc3Mub2Zmc2V0ID49IC0zMjc2OCAmJiBhZGRyZXNzLm9mZnNldCA8
PSAzMjc2NyAmJiBmaXhlZCA9PSAwKSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAg
IHNsbCAgICAgYWRkclRlbXAsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUKKyAgICAgICAg
ICAgICAgICBhZGR1ICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgYWRkcmVzcy5iYXNlCisgICAgICAg
ICAgICAgICAgbHcgICAgICBkZXN0LCBhZGRyZXNzLm9mZnNldChhZGRyVGVtcCkKKyAgICAgICAg
ICAgICovCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbGwoYWRkclRlbXBSZWdpc3RlciwgYWRk
cmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1
KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSk7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5sdyhkZXN0LCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9m
ZnNldCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKgorICAgICAg
ICAgICAgICAgIHNsbCAgICAgYWRkclRlbXAsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUK
KyAgICAgICAgICAgICAgICBhZGR1ICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgYWRkcmVzcy5iYXNl
CisgICAgICAgICAgICAgICAgbHVpICAgICBpbW1UZW1wLCBhZGRyZXNzLm9mZnNldCA+PiAxNgor
ICAgICAgICAgICAgICAgIGFkZHUgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBpbW1UZW1wCisgICAg
ICAgICAgICAgICAgbHcgICAgICBkZXN0LCAoYWRkcmVzcy5vZmZzZXQgJiAweGZmZmYpKGF0KQor
ICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsbChhZGRyVGVtcFJlZ2lz
dGVyLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNl
KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx1aShpbW1UZW1wUmVnaXN0ZXIsIGFkZHJlc3Mu
b2Zmc2V0ID4+IDE2KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdp
c3RlciwgYWRkclRlbXBSZWdpc3RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1t
VGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx3KGRlc3QsIGFkZHJUZW1w
UmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQg
bG9hZDMyKHZvaWQgKmFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAg
ICB7CisgICAgICAgIC8qCisgICAgICAgICAgICBsaSAgYWRkclRlbXAsIGFkZHJlc3MKKyAgICAg
ICAgICAgIGx3ICBkZXN0LCAwKGFkZHJUZW1wKQorICAgICAgICAqLworICAgICAgICBtX2Fzc2Vt
Ymxlci5saShhZGRyVGVtcFJlZ2lzdGVyLCByZWludGVycHJldF9jYXN0PE1JUFNXb3JkPihhZGRy
ZXNzKSwgZml4ZWQpOworICAgICAgICBtX2Fzc2VtYmxlci5sdyhkZXN0LCBhZGRyVGVtcFJlZ2lz
dGVyLCAwKTsKKyAgICB9CisKKyAgICBEYXRhTGFiZWwzMiBsb2FkMzJXaXRoQWRkcmVzc09mZnNl
dFBhdGNoKEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
aW50IGZpeGVkID0gMTsKKyAgICAgICAgLyoKKyAgICAgICAgICAgIGx1aSBhZGRyVGVtcCwgYWRk
cmVzcy5vZmZzZXQgPj4gMTYKKyAgICAgICAgICAgIG9yaSBhZGRyVGVtcCwgYWRkclRlbXAsIGFk
ZHJlc3Mub2Zmc2V0ICYgMHhmZmZmCisgICAgICAgICAgICBhZGR1ICAgICAgICBhZGRyVGVtcCwg
YWRkclRlbXAsIGFkZHJlc3MuYmFzZQorICAgICAgICAgICAgbHcgIGRlc3QsIDAoYWRkclRlbXAp
CisgICAgICAgICovCisgICAgICAgIERhdGFMYWJlbDMyIGRhdGFMYWJlbCh0aGlzKTsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubGkoYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQsIGZpeGVk
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJl
Z2lzdGVyLCBhZGRyZXNzLmJhc2UpOworICAgICAgICBtX2Fzc2VtYmxlci5sdyhkZXN0LCBhZGRy
VGVtcFJlZ2lzdGVyLCAwKTsKKyAgICAgICAgcmV0dXJuIGRhdGFMYWJlbDsKKyAgICB9CisKKyAg
ICBMYWJlbCBsb2FkUHRyV2l0aFBhdGNoVG9MRUEoQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklE
IGRlc3QpCisgICAgeworICAgICAgICBpbnQgZml4ZWQgPSAxOworICAgICAgICAvKgorICAgICAg
ICAgICAgbHVpICAgICAgICAgYWRkclRlbXAsIGFkZHJlc3Mub2Zmc2V0ID4+IDE2CisgICAgICAg
ICAgICBvcmkgICAgICAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGFkZHJlc3Mub2Zmc2V0ICYgMHhm
ZmZmCisgICAgICAgICAgICBhZGR1ICAgICAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGFkZHJlc3Mu
YmFzZQorICAgICAgICAgICAgbHcgICAgICAgICAgZGVzdCwgMChhZGRyVGVtcCkKKyAgICAgICAg
Ki8KKyAgICAgICAgTGFiZWwgbGFiZWwodGhpcyk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxpKGFk
ZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0LCBmaXhlZCk7CisgICAgICAgIG1fYXNzZW1i
bGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNl
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIubHcoZGVzdCwgYWRkclRlbXBSZWdpc3RlciwgMCk7Cisg
ICAgICAgIHJldHVybiBsYWJlbDsKKyAgICB9CisKKyAgICBMYWJlbCBsb2FkUHRyV2l0aEFkZHJl
c3NPZmZzZXRQYXRjaChBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBsb2FkUHRyV2l0aFBhdGNoVG9MRUEoYWRkcmVzcywgZGVzdCk7CisgICAg
fQorCisgICAgLyogTmVlZCB0byB1c2UgemVyby1leHRlbmVkIGxvYWQgaGFsZi13b3JkIGZvciBs
b2FkMTYuICAqLworICAgIHZvaWQgbG9hZDE2KEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklE
IGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBpZiAoYWRkcmVzcy5vZmZzZXQg
Pj0gLTMyNzY4ICYmIGFkZHJlc3Mub2Zmc2V0IDw9IDMyNzY3ICYmIGZpeGVkID09IDApIHsKKyAg
ICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgc2xsICAgICBhZGRyVGVtcCwgYWRkcmVzcy5p
bmRleCwgYWRkcmVzcy5zY2FsZQorICAgICAgICAgICAgICAgIGFkZHUgICAgYWRkclRlbXAsIGFk
ZHJUZW1wLCBhZGRyZXNzLmJhc2UKKyAgICAgICAgICAgICAgICBsaHUgICAgIGRlc3QsIGFkZHJl
c3Mub2Zmc2V0KGFkZHJUZW1wKQorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLnNsbChhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBS
ZWdpc3RlciwgYWRkcmVzcy5iYXNlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxodShkZXN0
LCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgIHNsbCAgICAgYWRkclRlbXAs
IGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUKKyAgICAgICAgICAgICAgICBhZGR1ICAgIGFk
ZHJUZW1wLCBhZGRyVGVtcCwgYWRkcmVzcy5iYXNlCisgICAgICAgICAgICAgICAgbHVpICAgICBp
bW1UZW1wLCBhZGRyZXNzLm9mZnNldCA+PiAxNgorICAgICAgICAgICAgICAgIGFkZHUgICAgYWRk
clRlbXAsIGFkZHJUZW1wLCBpbW1UZW1wCisgICAgICAgICAgICAgICAgbGh1ICAgICBkZXN0LCBh
ZGRyZXNzLm9mZnNldChhZGRyVGVtcCkKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5zbGwoYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2Fs
ZSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJU
ZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sdWko
aW1tVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCA+PiAxNik7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5saHUoZGVzdCwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQpOworICAg
ICAgICB9CisgICAgfQorCisgICAgRGF0YUxhYmVsMzIgc3RvcmUzMldpdGhBZGRyZXNzT2Zmc2V0
UGF0Y2goUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIGlu
dCBmaXhlZCA9IDE7CisgICAgICAgIC8qCisgICAgICAgICAgICBsdWkgYWRkclRlbXAsIGFkZHJl
c3Mub2Zmc2V0ID4+IDE2CisgICAgICAgICAgICBvcmkgYWRkclRlbXAsIGFkZHJUZW1wLCBhZGRy
ZXNzLm9mZnNldCAmIDB4ZmZmZgorICAgICAgICAgICAgYWRkdSAgICAgICAgYWRkclRlbXAsIGFk
ZHJUZW1wLCBhZGRyZXNzLmJhc2UKKyAgICAgICAgICAgIHN3ICBzcmMsIDAoYWRkclRlbXApCisg
ICAgICAgICovCisgICAgICAgIERhdGFMYWJlbDMyIGRhdGFMYWJlbCh0aGlzKTsKKyAgICAgICAg
bV9hc3NlbWJsZXIubGkoYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQsIGZpeGVkKTsK
KyAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lz
dGVyLCBhZGRyZXNzLmJhc2UpOworICAgICAgICBtX2Fzc2VtYmxlci5zdyhzcmMsIGFkZHJUZW1w
UmVnaXN0ZXIsIDApOworICAgICAgICByZXR1cm4gZGF0YUxhYmVsOworICAgIH0KKworICAgIHZv
aWQgc3RvcmUzMihSZWdpc3RlcklEIHNyYywgSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MsIGludCBm
aXhlZCA9IDApCisgICAgeworICAgICAgICBpZiAoYWRkcmVzcy5vZmZzZXQgPj0gLTMyNzY4ICYm
IGFkZHJlc3Mub2Zmc2V0IDw9IDMyNzY3ICYmIGZpeGVkID09IDApCisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5zdyhzcmMsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5vZmZzZXQpOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgbHVpICAgICBhZGRyVGVtcCwg
b2Zmc2V0ID4+IDE2CisgICAgICAgICAgICAgICAgYWRkdSAgICBhZGRyVGVtcCwgYWRkclRlbXAs
IGJhc2UKKyAgICAgICAgICAgICAgICBzdyAgICAgIHNyYywgKG9mZnNldCAmIDB4ZmZmZikoYWRk
clRlbXApCisgICAgICAgICAgICAgICovCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sdWkoYWRk
clRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQgPj4gMTYpOworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJh
c2UpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3coc3JjLCBhZGRyVGVtcFJlZ2lzdGVyLCBh
ZGRyZXNzLm9mZnNldCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHN0b3JlMzIoUmVn
aXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBhZGRyZXNzLCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAg
ICAgICAgaWYgKGFkZHJlc3Mub2Zmc2V0ID49IC0zMjc2OCAmJiBhZGRyZXNzLm9mZnNldCA8PSAz
Mjc2NyAmJiBmaXhlZCA9PSAwKSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgIHNs
bCAgICAgYWRkclRlbXAsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUKKyAgICAgICAgICAg
ICAgICBhZGR1ICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgYWRkcmVzcy5iYXNlCisgICAgICAgICAg
ICAgICAgc3cgICAgICBzcmMsIGFkZHJlc3Mub2Zmc2V0KGFkZHJUZW1wKQorICAgICAgICAgICAg
Ki8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsbChhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNz
LmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRk
clRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlKTsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLnN3KHNyYywgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQp
OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAg
ICAgICBzbGwgICAgIGFkZHJUZW1wLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlCisgICAg
ICAgICAgICAgICAgYWRkdSAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGFkZHJlc3MuYmFzZQorICAg
ICAgICAgICAgICAgIGx1aSAgICAgaW1tVGVtcCwgYWRkcmVzcy5vZmZzZXQgPj4gMTYKKyAgICAg
ICAgICAgICAgICBhZGR1ICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgaW1tVGVtcAorICAgICAgICAg
ICAgICAgIHN3ICAgICAgc3JjLCAoYWRkcmVzcy5vZmZzZXQgJiAweGZmZmYpKGF0KQorICAgICAg
ICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsbChhZGRyVGVtcFJlZ2lzdGVyLCBh
ZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFk
ZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlKTsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLmx1aShpbW1UZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0
ID4+IDE2KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3Rlciwg
YWRkclRlbXBSZWdpc3RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1tVGVtcFJl
Z2lzdGVyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN3KHNyYywgYWRkclRlbXBSZWdpc3Rl
ciwgYWRkcmVzcy5vZmZzZXQpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBzdG9yZTMy
KEltbTMyIGltbSwgSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MsIGludCBmaXhlZCA9IDApCisgICAg
eworICAgICAgICBpZiAoYWRkcmVzcy5vZmZzZXQgPj0gLTMyNzY4ICYmIGFkZHJlc3Mub2Zmc2V0
IDw9IDMyNzY3ICYmIGZpeGVkID09IDApIHsKKyAgICAgICAgICAgIGlmIChpbW0ubV92YWx1ZSA9
PSAwKQorICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN3KE1JUFNSZWdpc3RlcnM6Onplcm8s
IGFkZHJlc3MuYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzLm9m
ZnNldCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5s
aShpbW1UZW1wUmVnaXN0ZXIsIGltbS5tX3ZhbHVlLCBmaXhlZCk7CisgICAgICAgICAgICAgICAg
bV9hc3NlbWJsZXIuc3coaW1tVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mub2Zm
c2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIC8qCisgICAgICAgICAgICAgICAgbHVpICAgICBhZGRyVGVtcCwgb2Zmc2V0ID4+IDE2Cisg
ICAgICAgICAgICAgICAgYWRkdSAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGJhc2UKKyAgICAgICAg
ICAgICAgICBzdyAgICAgIGltbVRlbXAsIChvZmZzZXQgJiAweGZmZmYpKGFkZHJUZW1wKQorICAg
ICAgICAgICAgICAqLworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHVpKGFkZHJUZW1wUmVnaXN0
ZXIsIGFkZHJlc3Mub2Zmc2V0ID4+IDE2KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUo
YWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlKTsKKyAgICAg
ICAgICAgIGlmIChpbW0ubV92YWx1ZSA9PSAwICYmIGZpeGVkID09IDApCisgICAgICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuc3coTUlQU1JlZ2lzdGVyczo6emVybywgYWRkclRlbXBSZWdpc3RlciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzLm9mZnNldCk7CisgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5saShpbW1UZW1wUmVnaXN0
ZXIsIGltbS5tX3ZhbHVlLCBmaXhlZCk7CisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3co
aW1tVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKworICAgIHZvaWQgc3RvcmUzMihSZWdpc3RlcklEIHNyYywgdm9pZCogYWRkcmVzcywgaW50
IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAgICBsaSAgYWRkclRlbXAs
IGFkZHJlc3MKKyAgICAgICAgICAgIHN3ICBzcmMsIDAoYWRkclRlbXApCisgICAgICAgICovCisg
ICAgICAgIG1fYXNzZW1ibGVyLmxpKGFkZHJUZW1wUmVnaXN0ZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8
TUlQU1dvcmQ+KGFkZHJlc3MpLCBmaXhlZCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnN3KHNyYywg
YWRkclRlbXBSZWdpc3RlciwgMCk7CisgICAgfQorCisgICAgdm9pZCBzdG9yZTMyKEltbTMyIGlt
bSwgdm9pZCogYWRkcmVzcywgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIC8qCisgICAg
ICAgICAgICBsaSAgaW1tVGVtcCwgaW1tCisgICAgICAgICAgICBsaSAgYWRkclRlbXAsIGFkZHJl
c3MKKyAgICAgICAgICAgIHN3ICBzcmMsIDAoYWRkclRlbXApCisgICAgICAgICovCisgICAgICAg
IGlmIChpbW0ubV92YWx1ZSA9PSAwICYmIGZpeGVkID09IDApIHsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmxpKGFkZHJUZW1wUmVnaXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZWludGVycHJldF9jYXN0PE1JUFNXb3JkPihhZGRyZXNzKSwgZml4ZWQpOworICAgICAgICAgICAg
bV9hc3NlbWJsZXIuc3coTUlQU1JlZ2lzdGVyczo6emVybywgYWRkclRlbXBSZWdpc3RlciwgMCk7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5saShp
bW1UZW1wUmVnaXN0ZXIsIGltbS5tX3ZhbHVlLCBmaXhlZCk7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5saShhZGRyVGVtcFJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVp
bnRlcnByZXRfY2FzdDxNSVBTV29yZD4oYWRkcmVzcyksIGZpeGVkKTsKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLnN3KGltbVRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgMCk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICAvLyBGbG9hdGluZy1wb2ludCBvcGVyYXRpb25zOgorCisgICAg
Ym9vbCBzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSBjb25zdAorICAgIHsKKyNpZiBkZWZpbmVkKF9f
bWlwc19oYXJkX2Zsb2F0KSAmJiAhZGVmaW5lZChfX21pcHNfc2luZ2xlX2Zsb2F0KQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorICAg
IH0KKworICAgIGJvb2wgc3VwcG9ydHNGbG9hdGluZ1BvaW50VHJ1bmNhdGUoKSBjb25zdAorICAg
IHsKKyNpZiBkZWZpbmVkKF9fbWlwc19oYXJkX2Zsb2F0KSAmJiAhZGVmaW5lZChfX21pcHNfc2lu
Z2xlX2Zsb2F0KSAmJiAoX19taXBzID4gMSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisjZWxzZQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKyAgICB9CisKKyAgICAvLyBTdGFjayBtYW5p
cHVsYXRpb24gb3BlcmF0aW9uczoKKyAgICAvLworICAgIC8vIFRoZSBBQkkgaXMgYXNzdW1lZCB0
byBwcm92aWRlIGEgc3RhY2sgYWJzdHJhY3Rpb24gdG8gbWVtb3J5LAorICAgIC8vIGNvbnRhaW5p
bmcgbWFjaGluZSB3b3JkIHNpemVkIHVuaXRzIG9mIGRhdGEuICBQdXNoIGFuZCBwb3AKKyAgICAv
LyBvcGVyYXRpb25zIGFkZCBhbmQgcmVtb3ZlIGEgc2luZ2xlIHJlZ2lzdGVyIHNpemVkIHVuaXQg
b2YgZGF0YQorICAgIC8vIHRvIG9yIGZyb20gdGhlIHN0YWNrLiAgUGVlayBhbmQgcG9rZSBvcGVy
YXRpb25zIHJlYWQgb3Igd3JpdGUKKyAgICAvLyB2YWx1ZXMgb24gdGhlIHN0YWNrLCB3aXRob3V0
IG1vdmluZyB0aGUgY3VycmVudCBzdGFjayBwb3NpdGlvbi4KKworICAgIHZvaWQgcG9wKFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmx3KGRlc3QsIE1JUFNSZWdp
c3RlcnM6OnNwLCAwKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkaXUoTUlQU1JlZ2lzdGVyczo6
c3AsIE1JUFNSZWdpc3RlcnM6OnNwLCA0KTsKKyAgICB9CisKKyAgICB2b2lkIHB1c2goUmVnaXN0
ZXJJRCBzcmMpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hZGRpdShNSVBTUmVnaXN0ZXJz
OjpzcCwgTUlQU1JlZ2lzdGVyczo6c3AsIC00KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3coc3Jj
LCBNSVBTUmVnaXN0ZXJzOjpzcCwgMCk7CisgICAgfQorCisgICAgdm9pZCBwdXNoKEFkZHJlc3Mg
YWRkcmVzcykKKyAgICB7CisgICAgICAgIGxvYWQzMihhZGRyZXNzLCBkYXRhVGVtcFJlZ2lzdGVy
KTsKKyAgICAgICAgcHVzaChkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICB2b2lkIHB1
c2goSW1tMzIgaW1tKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubGkoaW1tVGVtcFJlZ2lz
dGVyLCBpbW0ubV92YWx1ZSk7CisgICAgICAgIHB1c2goaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICB9
CisKKyAgICAvLyBSZWdpc3RlciBtb3ZlIG9wZXJhdGlvbnM6CisgICAgLy8KKyAgICAvLyBNb3Zl
IHZhbHVlcyBpbiByZWdpc3RlcnMuCisKKyAgICB2b2lkIG1vdmUoSW1tMzIgaW1tLCBSZWdpc3Rl
cklEIGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBpZiAoaW1tLm1fdmFsdWUg
PT0gMCAmJiBmaXhlZCA9PSAwKQorICAgICAgICAgICAgbW92ZShNSVBTUmVnaXN0ZXJzOjp6ZXJv
LCBkZXN0LCBmaXhlZCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxp
KGRlc3QsIGltbS5tX3ZhbHVlLCBmaXhlZCk7CisgICAgfQorCisgICAgdm9pZCBtb3ZlKFJlZ2lz
dGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAg
ICBpZiAoc3JjID09IGRlc3QgJiYgZml4ZWQgPT0gMCkKKyAgICAgICAgICAgIDsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92ZShkZXN0LCBzcmMpOworICAgIH0KKwor
ICAgIHZvaWQgbW92ZShJbW1QdHIgaW1tLCBSZWdpc3RlcklEIGRlc3QsIGludCBmaXhlZCA9IDAp
CisgICAgeworICAgICAgICBtb3ZlKEltbTMyKGltbSksIGRlc3QsIGZpeGVkKTsKKyAgICB9CisK
KyAgICB2b2lkIHN3YXAoUmVnaXN0ZXJJRCByZWcxLCBSZWdpc3RlcklEIHJlZzIsIGludCBmaXhl
ZCA9IDApCisgICAgeworICAgICAgICBtb3ZlKHJlZzEsIGltbVRlbXBSZWdpc3RlciwgZml4ZWQp
OworICAgICAgICBtb3ZlKHJlZzIsIHJlZzEsIGZpeGVkKTsKKyAgICAgICAgbW92ZShpbW1UZW1w
UmVnaXN0ZXIsIHJlZzIsIGZpeGVkKTsKKyAgICB9CisKKyAgICB2b2lkIHNpZ25FeHRlbmQzMlRv
UHRyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QsIGludCBmaXhlZCA9IDApCisgICAg
eworICAgICAgICBpZiAoc3JjID09IGRlc3QgJiYgZml4ZWQgPT0gMCkKKyAgICAgICAgICAgIDsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgbW92ZShzcmMsIGRlc3QsIGZpeGVkKTsKKyAgICB9
CisKKyAgICB2b2lkIHplcm9FeHRlbmQzMlRvUHRyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklE
IGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBpZiAoc3JjID09IGRlc3QgJiYg
Zml4ZWQgPT0gMCkKKyAgICAgICAgICAgIDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbW92
ZShzcmMsIGRlc3QsIGZpeGVkKTsKKyAgICB9CisKKyAgICAvLyBGb3J3YXJkcyAvIGV4dGVybmFs
IGNvbnRyb2wgZmxvdyBvcGVyYXRpb25zOgorICAgIC8vCisgICAgLy8gVGhpcyBzZXQgb2YganVt
cCBhbmQgY29uZGl0aW9uYWwgYnJhbmNoIG9wZXJhdGlvbnMgcmV0dXJuIGEgSnVtcAorICAgIC8v
IG9iamVjdCB3aGljaCBtYXkgbGlua2VkIGF0IGEgbGF0ZXIgcG9pbnQsIGFsbG93IGZvcndhcmRz
IGp1bXAsCisgICAgLy8gb3IganVtcHMgdGhhdCB3aWxsIHJlcXVpcmUgZXh0ZXJuYWwgbGlua2Fn
ZSAoYWZ0ZXIgdGhlIGNvZGUgaGFzIGJlZW4KKyAgICAvLyByZWxvY2F0ZWQpLgorICAgIC8vCisg
ICAgLy8gRm9yIGJyYW5jaGVzLCBzaWduZWQgPCwgPiwgPD0gYW5kID49IGFyZSBkZW5vdGVkIGFz
IGwsIGcsIGxlLCBhbmQgZ2UKKyAgICAvLyByZXNwZWNpdHZlbHksIGZvciB1bnNpZ25lZCBjb21w
YXJpc29ucyB0aGUgbmFtZXMgYiwgYSwgYmUsIGFuZCBhZSBhcmUKKyAgICAvLyB1c2VkIChyZXBy
ZXNlbnRpbmcgdGhlIG5hbWVzICdiZWxvdycgYW5kICdhYm92ZScpLgorICAgIC8vCisgICAgLy8g
T3BlcmFuZHMgdG8gdGhlIGNvbXBhcmlzaW9uIGFyZSBwcm92aWRlZCBpbiB0aGUgZXhwZWN0ZWQg
b3JkZXIsIGUuZy4KKyAgICAvLyBqbGUzMihyZWcxLCBJbW0zMig1KSkgd2lsbCBicmFuY2ggaWYg
dGhlIHZhbHVlIGhlbGQgaW4gcmVnMSwgd2hlbgorICAgIC8vIHRyZWF0ZWQgYXMgYSBzaWduZWQg
MzJiaXQgdmFsdWUsIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byA1LgorICAgIC8vCisgICAgLy8g
anogYW5kIGpueiB0ZXN0IHdoZXRoZXIgdGhlIGZpcnN0IG9wZXJhbmQgaXMgZXF1YWwgdG8gemVy
bywgYW5kIHRha2UKKyAgICAvLyBhbiBvcHRpb25hbCBzZWNvbmQgb3BlcmFuZCBvZiBhIG1hc2sg
dW5kZXIgd2hpY2ggdG8gcGVyZm9ybSB0aGUgdGVzdC4KKworICAgIEp1bXAgYnJhbmNoMzIoQ29u
ZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCwgaW50IGZpeGVk
ID0gMCkKKyAgICB7CisgICAgICAgIGlmIChjb25kID09IEVxdWFsIHx8IGNvbmQgPT0gWmVybykK
KyAgICAgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmJyYW5jaF9lcShsZWZ0LCByaWdo
dCkpOworICAgICAgICBlbHNlIGlmIChjb25kID09IE5vdEVxdWFsIHx8IGNvbmQgPT0gTm9uWmVy
bykKKyAgICAgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmJyYW5jaF9uZShsZWZ0LCBy
aWdodCkpOworICAgICAgICBlbHNlIGlmIChjb25kID09IEFib3ZlKSB7CisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5zbHR1KGNtcFRlbXBSZWdpc3RlciwgcmlnaHQsIGxlZnQpOworICAgICAgICAg
ICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuYnJhbmNoX25lKGNtcFRlbXBSZWdpc3RlciwgTUlQ
U1JlZ2lzdGVyczo6emVybykpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGNvbmQgPT0g
QWJvdmVPckVxdWFsKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHR1KGNtcFRlbXBSZWdp
c3RlciwgbGVmdCwgcmlnaHQpOworICAgICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIu
YnJhbmNoX2VxKGNtcFRlbXBSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6emVybykpOworICAgICAg
ICB9CisgICAgICAgIGVsc2UgaWYgKGNvbmQgPT0gQmVsb3cpIHsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLnNsdHUoY21wVGVtcFJlZ2lzdGVyLCBsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBy
ZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5icmFuY2hfbmUoY21wVGVtcFJlZ2lzdGVyLCBNSVBTUmVn
aXN0ZXJzOjp6ZXJvKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY29uZCA9PSBCZWxv
d09yRXF1YWwpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdHUoY21wVGVtcFJlZ2lzdGVy
LCByaWdodCwgbGVmdCk7CisgICAgICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5icmFu
Y2hfZXEoY21wVGVtcFJlZ2lzdGVyLCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKSk7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKGNvbmQgPT0gR3JlYXRlclRoYW4pIHsKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLnNsdChjbXBUZW1wUmVnaXN0ZXIsIHJpZ2h0LCBsZWZ0KTsKKyAgICAgICAgICAgIHJldHVy
biBKdW1wKG1fYXNzZW1ibGVyLmJyYW5jaF9uZShjbXBUZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3Rl
cnM6Onplcm8pKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChjb25kID09IEdyZWF0ZXJU
aGFuT3JFcXVhbCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0KGNtcFRlbXBSZWdpc3Rl
ciwgbGVmdCwgcmlnaHQpOworICAgICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuYnJh
bmNoX2VxKGNtcFRlbXBSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6emVybykpOworICAgICAgICB9
CisgICAgICAgIGVsc2UgaWYgKGNvbmQgPT0gTGVzc1RoYW4pIHsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLnNsdChjbXBUZW1wUmVnaXN0ZXIsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIHJl
dHVybiBKdW1wKG1fYXNzZW1ibGVyLmJyYW5jaF9uZShjbXBUZW1wUmVnaXN0ZXIsIE1JUFNSZWdp
c3RlcnM6Onplcm8pKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChjb25kID09IExlc3NU
aGFuT3JFcXVhbCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0KGNtcFRlbXBSZWdpc3Rl
ciwgcmlnaHQsIGxlZnQpOworICAgICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuYnJh
bmNoX2VxKGNtcFRlbXBSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6emVybykpOworICAgICAgICB9
CisgICAgICAgIGVsc2UgaWYgKGNvbmQgPT0gT3ZlcmZsb3cpIHsKKyAgICAgICAgICAgIC8qCisg
ICAgICAgICAgICAgICAgeG9yICAgICBjbXBUZW1wLCBsZWZ0LCByaWdodAorICAgICAgICAgICAg
ICAgIGJnZXogICAgTm9fb3ZlcmZsb3csIGNtcFRlbXAgICAgIyBzYW1lIHNpZ24gYml0IC0+IG5v
IG92ZXJmbG93CisgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgc3VidSAgICBj
bXBUZW1wLCBsZWZ0LCByaWdodAorICAgICAgICAgICAgICAgIHhvciAgICAgY21wVGVtcCwgY21w
VGVtcCwgbGVmdAorICAgICAgICAgICAgICAgIGJnZXogICAgTm9fb3ZlcmZsb3csIGNtcFRlbXAg
ICAgIyBzYW1lIHNpZ24gYml0IC0+IG5vIG92ZXJmbG93CisgICAgICAgICAgICAgICAgbm9wCisg
ICAgICAgICAgICAgICAgYiAgICAgICBPdmVyZmxvdworICAgICAgICAgICAgICAgIG5vcAorICAg
ICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgICBOb19v
dmVyZmxvdzoKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3JfaW5z
bihjbXBUZW1wUmVnaXN0ZXIsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LmJnZXooY21wVGVtcFJlZ2lzdGVyLCA5KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgp
OworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3VidShjbXBUZW1wUmVnaXN0ZXIsIGxlZnQsIHJp
Z2h0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnhvcl9pbnNuKGNtcFRlbXBSZWdpc3Rlciwg
Y21wVGVtcFJlZ2lzdGVyLCBsZWZ0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmJnZXooY21w
VGVtcFJlZ2lzdGVyLCA1KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAg
ICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuam1wKCkpOworICAgICAgICB9CisgICAgICAg
IGVsc2UgaWYgKGNvbmQgPT0gU2lnbmVkKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdWJ1
KGNtcFRlbXBSZWdpc3RlciwgbGVmdCwgcmlnaHQpOworICAgICAgICAgICAgLy8gQ2hlY2sgaWYg
dGhlIHJlc3VsdCBpcyBuZWdhdGl2ZS4KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdChjbXBU
ZW1wUmVnaXN0ZXIsIGNtcFRlbXBSZWdpc3RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsKKyAgICAgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1i
bGVyLmJyYW5jaF9uZShjbXBUZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onplcm8pKTsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBBU1NFUlQoMCk7CisKKyAgICAgICAg
cmV0dXJuIEp1bXAoKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25k
LCBSZWdpc3RlcklEIGxlZnQsIEltbTMyIHJpZ2h0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAg
ICAgICAgbW92ZShyaWdodCwgaW1tVGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgICAgIHJldHVy
biBicmFuY2gzMihjb25kLCBsZWZ0LCBpbW1UZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAgICB9CisK
KyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIEFkZHJl
c3MgcmlnaHQsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBsb2FkMzIocmlnaHQsIGRh
dGFUZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIGxl
ZnQsIGRhdGFUZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDMy
KENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQsIGludCBmaXhl
ZCA9IDApCisgICAgeworICAgICAgICBsb2FkMzIobGVmdCwgZGF0YVRlbXBSZWdpc3RlciwgZml4
ZWQpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgZGF0YVRlbXBSZWdpc3Rlciwgcmln
aHQsIGZpeGVkKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBB
ZGRyZXNzIGxlZnQsIEltbTMyIHJpZ2h0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAg
bG9hZDMyKGxlZnQsIGRhdGFUZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAgICAgICAgbW92ZShyaWdo
dCwgaW1tVGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25k
LCBkYXRhVGVtcFJlZ2lzdGVyLCBpbW1UZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAgICB9CisKKyAg
ICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBCYXNlSW5kZXggbGVmdCwgSW1tMzIgcmln
aHQsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBsb2FkMzIobGVmdCwgZGF0YVRlbXBS
ZWdpc3RlciwgZml4ZWQpOworICAgICAgICAvLyBCZSBjYXJlZnVsIHRoYXQgdGhlIHByZXZpb3Vz
IGxvYWQzMigpIHVzZXMgaW1tVGVtcFJlZ2lzdGVyLgorICAgICAgICAvLyBTbywgd2UgbmVlZCB0
byBwdXQgbW92ZSgpIGFmdGVyIGxvYWQzMigpLgorICAgICAgICBtb3ZlKHJpZ2h0LCBpbW1UZW1w
UmVnaXN0ZXIsIGZpeGVkKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIGRhdGFUZW1w
UmVnaXN0ZXIsIGltbVRlbXBSZWdpc3RlciwgZml4ZWQpOworICAgIH0KKworICAgIEp1bXAgYnJh
bmNoMzIoQ29uZGl0aW9uIGNvbmQsIEFic29sdXRlQWRkcmVzcyBsZWZ0LCBSZWdpc3RlcklEIHJp
Z2h0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgbG9hZDMyKGxlZnQubV9wdHIsIGRh
dGFUZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIGRh
dGFUZW1wUmVnaXN0ZXIsIHJpZ2h0LCBmaXhlZCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2gz
MihDb25kaXRpb24gY29uZCwgQWJzb2x1dGVBZGRyZXNzIGxlZnQsIEltbTMyIHJpZ2h0LCBpbnQg
Zml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgbG9hZDMyKGxlZnQubV9wdHIsIGRhdGFUZW1wUmVn
aXN0ZXIsIGZpeGVkKTsKKyAgICAgICAgbW92ZShyaWdodCwgaW1tVGVtcFJlZ2lzdGVyLCBmaXhl
ZCk7CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBkYXRhVGVtcFJlZ2lzdGVyLCBpbW1U
ZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDE2KENvbmRpdGlv
biBjb25kLCBCYXNlSW5kZXggbGVmdCwgUmVnaXN0ZXJJRCByaWdodCwgaW50IGZpeGVkID0gMCkK
KyAgICB7CisgICAgICAgIGxvYWQxNihsZWZ0LCBkYXRhVGVtcFJlZ2lzdGVyLCBmaXhlZCk7Cisg
ICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBkYXRhVGVtcFJlZ2lzdGVyLCByaWdodCwgZml4
ZWQpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoMTYoQ29uZGl0aW9uIGNvbmQsIEJhc2VJbmRl
eCBsZWZ0LCBJbW0zMiByaWdodCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIEFTU0VS
VCghKHJpZ2h0Lm1fdmFsdWUgJiAweEZGRkYwMDAwKSk7CisgICAgICAgIGxvYWQxNihsZWZ0LCBk
YXRhVGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgICAgIC8vIEJlIGNhcmVmdWwgdGhhdCB0aGUg
cHJldmlvdXMgbG9hZDE2KCkgdXNlcyBpbW1UZW1wUmVnaXN0ZXIuCisgICAgICAgIC8vIFNvLCB3
ZSBuZWVkIHRvIHB1dCBtb3ZlKCkgYWZ0ZXIgbG9hZDE2KCkuCisgICAgICAgIG1vdmUocmlnaHQs
IGltbVRlbXBSZWdpc3RlciwgZml4ZWQpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwg
ZGF0YVRlbXBSZWdpc3RlciwgaW1tVGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgfQorCisgICAg
SnVtcCBicmFuY2hUZXN0MzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgcmVnLCBSZWdpc3Rl
cklEIG1hc2ssIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBBU1NFUlQoKGNvbmQgPT0g
WmVybykgfHwgKGNvbmQgPT0gTm9uWmVybykpOworICAgICAgICBtX2Fzc2VtYmxlci5hbmRfaW5z
bihjbXBUZW1wUmVnaXN0ZXIsIHJlZywgbWFzayk7CisgICAgICAgIGlmIChjb25kID09IFplcm8p
CisgICAgICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5icmFuY2hfZXEoY21wVGVtcFJl
Z2lzdGVyLCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKSk7CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNz
ZW1ibGVyLmJyYW5jaF9uZShjbXBUZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onplcm8pKTsK
KyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFRlc3QzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJ
RCByZWcsIEltbTMyIG1hc2sgPSBJbW0zMigtMSksIGludCBmaXhlZCA9IDApCisgICAgeworICAg
ICAgICBBU1NFUlQoKGNvbmQgPT0gWmVybykgfHwgKGNvbmQgPT0gTm9uWmVybykpOworICAgICAg
ICBpZiAobWFzay5tX3ZhbHVlID09IC0xICYmIGZpeGVkID09IDApIHsKKyAgICAgICAgICAgIGlm
IChjb25kID09IFplcm8pCisgICAgICAgICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIu
YnJhbmNoX2VxKHJlZywgTUlQU1JlZ2lzdGVyczo6emVybykpOworICAgICAgICAgICAgcmV0dXJu
IEp1bXAobV9hc3NlbWJsZXIuYnJhbmNoX25lKHJlZywgTUlQU1JlZ2lzdGVyczo6emVybykpOwor
ICAgICAgICB9CisgICAgICAgIG1fYXNzZW1ibGVyLmxpKGltbVRlbXBSZWdpc3RlciwgbWFzay5t
X3ZhbHVlLCBmaXhlZCk7CisgICAgICAgIHJldHVybiBicmFuY2hUZXN0MzIoY29uZCwgcmVnLCBp
bW1UZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFRlc3QzMihD
b25kaXRpb24gY29uZCwgQWRkcmVzcyBhZGRyZXNzLCBJbW0zMiBtYXNrID0gSW1tMzIoLTEpLCBp
bnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgbG9hZDMyKGFkZHJlc3MsIGRhdGFUZW1wUmVn
aXN0ZXIsIGZpeGVkKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3QzMihjb25kLCBkYXRhVGVt
cFJlZ2lzdGVyLCBtYXNrLCBmaXhlZCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hUZXN0MzIo
Q29uZGl0aW9uIGNvbmQsIEJhc2VJbmRleCBhZGRyZXNzLCBJbW0zMiBtYXNrID0gSW1tMzIoLTEp
LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgbG9hZDMyKGFkZHJlc3MsIGRhdGFUZW1w
UmVnaXN0ZXIsIGZpeGVkKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3QzMihjb25kLCBkYXRh
VGVtcFJlZ2lzdGVyLCBtYXNrLCBmaXhlZCk7CisgICAgfQorCisgICAgSnVtcCBqdW1wKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmptcCgpKTsKKyAgICB9CisKKyAg
ICB2b2lkIGp1bXAoUmVnaXN0ZXJJRCB0YXJnZXQpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5qbXBfcmVnaXN0ZXIodGFyZ2V0KTsKKyAgICB9CisKKyAgICB2b2lkIGp1bXAoQWRkcmVzcyBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgaW50IGZpeGVkID0gMTsKKyAgICAgICAgbG9hZDMyKGFk
ZHJlc3MsIE1JUFNSZWdpc3RlcnM6OnQ5LCBmaXhlZCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmpt
cF9yZWdpc3RlcihNSVBTUmVnaXN0ZXJzOjp0OSk7CisgICAgfQorCisgICAgLy8gQXJpdGhtZXRp
YyBjb250cm9sIGZsb3cgb3BlcmF0aW9uczoKKyAgICAvLworICAgIC8vIFRoaXMgc2V0IG9mIGNv
bmRpdGlvbmFsIGJyYW5jaCBvcGVyYXRpb25zIGJyYW5jaCBiYXNlZAorICAgIC8vIG9uIHRoZSBy
ZXN1bHQgb2YgYW4gYXJpdGhtZXRpYyBvcGVyYXRpb24uICBUaGUgb3BlcmF0aW9uCisgICAgLy8g
aXMgcGVyZm9ybWVkIGFzIG5vcm1hbCwgc3RvcmluZyB0aGUgcmVzdWx0LgorICAgIC8vCisgICAg
Ly8gKiBqeiBvcGVyYXRpb25zIGJyYW5jaCBpZiB0aGUgcmVzdWx0IGlzIHplcm8uCisgICAgLy8g
KiBqbyBvcGVyYXRpb25zIGJyYW5jaCBpZiB0aGUgKHNpZ25lZCkgYXJpdGhtZXRpYworICAgIC8v
ICAgb3BlcmF0aW9uIGNhdXNlZCBhbiBvdmVyZmxvdyB0byBvY2N1ci4KKworICAgIEp1bXAgYnJh
bmNoQWRkMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3Qs
IGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBBU1NFUlQoKGNvbmQgPT0gT3ZlcmZsb3cp
IHx8IChjb25kID09IFNpZ25lZCkgfHwgKGNvbmQgPT0gWmVybykgfHwgKGNvbmQgPT0gTm9uWmVy
bykpOworICAgICAgICBpZiAoY29uZCA9PSBPdmVyZmxvdykgeworICAgICAgICAgICAgLyoKKyAg
ICAgICAgICAgICAgICBtb3ZlICAgIGRlc3QsIGRhdGFUZW1wCisgICAgICAgICAgICAgICAgeG9y
ICAgICBjbXBUZW1wLCBkYXRhVGVtcCwgc3JjCisgICAgICAgICAgICAgICAgYmx0eiAgICBjbXBU
ZW1wLCBOb19vdmVyZmxvdyAgICAjIGRpZmYgc2lnbiBiaXQgLT4gbm8gb3ZlcmZsb3cKKyAgICAg
ICAgICAgICAgICBhZGR1ICAgIGRlc3QsIGRhdGFUZW1wLCBzcmMKKyAgICAgICAgICAgICAgICB4
b3IgICAgIGNtcFRlbXAsIGRlc3QsIGRhdGFUZW1wCisgICAgICAgICAgICAgICAgYmdleiAgICBj
bXBUZW1wLCBOb19vdmVyZmxvdyAgICAjIHNhbWUgc2lnbiBiaWcgLT4gbm8gb3ZlcmZsb3cKKyAg
ICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAgICAgICBiICAgICAgIE92ZXJmbG93CisgICAg
ICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgbm9w
CisgICAgICAgICAgICBOb19vdmVyZmxvdzoKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBt
b3ZlKGRlc3QsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIueG9y
X2luc24oY21wVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLCBzcmMpOworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuYmx0eihjbXBUZW1wUmVnaXN0ZXIsIDgpOworICAgICAgICAgICAgbV9h
c3NlbWJsZXIuYWRkdShkZXN0LCBkYXRhVGVtcFJlZ2lzdGVyLCBzcmMpOworICAgICAgICAgICAg
bV9hc3NlbWJsZXIueG9yX2luc24oY21wVGVtcFJlZ2lzdGVyLCBkZXN0LCBkYXRhVGVtcFJlZ2lz
dGVyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmJnZXooY21wVGVtcFJlZ2lzdGVyLCA1KTsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICAgICAgcmV0dXJuIEp1bXAo
bV9hc3NlbWJsZXIuam1wKCkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGNvbmQgPT0g
U2lnbmVkKSB7CisgICAgICAgICAgICBhZGQzMihzcmMsIGRlc3QsIGZpeGVkKTsKKyAgICAgICAg
ICAgIC8vIENoZWNrIGlmIGRlc3QgaXMgbmVnYXRpdmUuCisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5zbHQoY21wVGVtcFJlZ2lzdGVyLCBkZXN0LCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsKKyAgICAg
ICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmJyYW5jaF9uZShjbXBUZW1wUmVnaXN0ZXIs
IE1JUFNSZWdpc3RlcnM6Onplcm8pKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChjb25k
ID09IFplcm8pIHsKKyAgICAgICAgICAgIGFkZDMyKHNyYywgZGVzdCwgZml4ZWQpOworICAgICAg
ICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuYnJhbmNoX2VxKGRlc3QsIE1JUFNSZWdpc3Rl
cnM6Onplcm8pKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChjb25kID09IE5vblplcm8p
IHsKKyAgICAgICAgICAgIGFkZDMyKHNyYywgZGVzdCwgZml4ZWQpOworICAgICAgICAgICAgcmV0
dXJuIEp1bXAobV9hc3NlbWJsZXIuYnJhbmNoX25lKGRlc3QsIE1JUFNSZWdpc3RlcnM6Onplcm8p
KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBKdW1wKCk7CisgICAgfQorCisgICAgSnVt
cCBicmFuY2hBZGQzMihDb25kaXRpb24gY29uZCwgSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3Qs
IGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5saShpbW1UZW1wUmVn
aXN0ZXIsIGltbS5tX3ZhbHVlLCBmaXhlZCk7CisgICAgICAgIHJldHVybiBicmFuY2hBZGQzMihj
b25kLCBpbW1UZW1wUmVnaXN0ZXIsIGRlc3QsIGZpeGVkKTsKKyAgICB9CisKKyAgICBKdW1wIGJy
YW5jaE11bDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0
LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgQVNTRVJUKChjb25kID09IE92ZXJmbG93
KSB8fCAoY29uZCA9PSBTaWduZWQpIHx8IChjb25kID09IFplcm8pIHx8IChjb25kID09IE5vblpl
cm8pKTsKKyAgICAgICAgaWYgKGNvbmQgPT0gT3ZlcmZsb3cpIHsKKyAgICAgICAgICAgIC8qCisg
ICAgICAgICAgICAgICAgbXVsdCAgICBzcmMsIGRlc3QKKyAgICAgICAgICAgICAgICBtZmhpICAg
IGRhdGFUZW1wCisgICAgICAgICAgICAgICAgbWZsbyAgICBkZXN0CisgICAgICAgICAgICAgICAg
c3JhICAgICBhZGRyVGVtcCwgZGVzdCwgMzEKKyAgICAgICAgICAgICAgICBiZXEgICAgIGRhdGFU
ZW1wLCBhZGRyVGVtcCwgTm9fb3ZlcmZsb3cgIyBhbGwgc2lnbiBiaXRzIChiaXQgNjMgdG8gYml0
IDMxKSBhcmUgdGhlIHNhbWUgLT4gbm8gb3ZlcmZsb3cKKyAgICAgICAgICAgICAgICBub3AKKyAg
ICAgICAgICAgICAgICBiICAgICAgIE92ZXJmbG93CisgICAgICAgICAgICAgICAgbm9wCisgICAg
ICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICBOb19vdmVy
ZmxvdzoKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tdWx0KHNyYywg
ZGVzdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tZmhpKGRhdGFUZW1wUmVnaXN0ZXIpOwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIubWZsbyhkZXN0KTsKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLnNyYShhZGRyVGVtcFJlZ2lzdGVyLCBkZXN0LCAzMSk7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5iZXEoZGF0YVRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgNSk7CisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1i
bGVyLmptcCgpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChjb25kID09IFNpZ25lZCkg
eworICAgICAgICAgICAgbXVsMzIoc3JjLCBkZXN0LCBmaXhlZCk7CisgICAgICAgICAgICAvLyBD
aGVjayBpZiBkZXN0IGlzIG5lZ2F0aXZlLgorICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0KGNt
cFRlbXBSZWdpc3RlciwgZGVzdCwgTUlQU1JlZ2lzdGVyczo6emVybyk7CisgICAgICAgICAgICBy
ZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5icmFuY2hfbmUoY21wVGVtcFJlZ2lzdGVyLCBNSVBTUmVn
aXN0ZXJzOjp6ZXJvKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY29uZCA9PSBaZXJv
KSB7CisgICAgICAgICAgICBtdWwzMihzcmMsIGRlc3QsIGZpeGVkKTsKKyAgICAgICAgICAgIHJl
dHVybiBKdW1wKG1fYXNzZW1ibGVyLmJyYW5jaF9lcShkZXN0LCBNSVBTUmVnaXN0ZXJzOjp6ZXJv
KSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY29uZCA9PSBOb25aZXJvKSB7CisgICAg
ICAgICAgICBtdWwzMihzcmMsIGRlc3QsIGZpeGVkKTsKKyAgICAgICAgICAgIHJldHVybiBKdW1w
KG1fYXNzZW1ibGVyLmJyYW5jaF9uZShkZXN0LCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKSk7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gSnVtcCgpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNo
TXVsMzIoQ29uZGl0aW9uIGNvbmQsIEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVy
SUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxpKGlt
bVRlbXBSZWdpc3RlciwgaW1tLm1fdmFsdWUsIGZpeGVkKTsKKyAgICAgICAgcmV0dXJuIGJyYW5j
aE11bDMyKGNvbmQsIGltbVRlbXBSZWdpc3RlciwgZGVzdCwgZml4ZWQpOworICAgIH0KKworICAg
IEp1bXAgYnJhbmNoU3ViMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3Rl
cklEIGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBBU1NFUlQoKGNvbmQgPT0g
T3ZlcmZsb3cpIHx8IChjb25kID09IFNpZ25lZCkgfHwgKGNvbmQgPT0gWmVybykgfHwgKGNvbmQg
PT0gTm9uWmVybykpOworICAgICAgICBpZiAoY29uZCA9PSBPdmVyZmxvdykgeworICAgICAgICAg
ICAgLyoKKyAgICAgICAgICAgICAgICBtb3ZlICAgIGRlc3QsIGRhdGFUZW1wCisgICAgICAgICAg
ICAgICAgeG9yICAgICBjbXBUZW1wLCBkYXRhVGVtcCwgc3JjCisgICAgICAgICAgICAgICAgYmdl
eiAgICBjbXBUZW1wLCBOb19vdmVyZmxvdyAgICAjIHNhbWUgc2lnbiBiaXQgLT4gbm8gb3ZlcmZs
b3cKKyAgICAgICAgICAgICAgICBzdWJ1ICAgIGRlc3QsIGRhdGFUZW1wLCBzcmMKKyAgICAgICAg
ICAgICAgICB4b3IgICAgIGNtcFRlbXAsIGRlc3QsIGRhdGFUZW1wCisgICAgICAgICAgICAgICAg
YmdleiAgICBjbXBUZW1wLCBOb19vdmVyZmxvdyAgICAjIHNhbWUgc2lnbiBiaXQgLT4gbm8gb3Zl
cmZsb3cKKyAgICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAgICAgICBiICAgICAgIE92ZXJm
bG93CisgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAg
ICAgICAgbm9wCisgICAgICAgICAgICBOb19vdmVyZmxvdzoKKyAgICAgICAgICAgICovCisgICAg
ICAgICAgICBtb3ZlKGRlc3QsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIueG9yX2luc24oY21wVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLCBzcmMpOwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuYmdleihjbXBUZW1wUmVnaXN0ZXIsIDgpOworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuc3VidShkZXN0LCBkYXRhVGVtcFJlZ2lzdGVyLCBzcmMpOworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIueG9yX2luc24oY21wVGVtcFJlZ2lzdGVyLCBkZXN0LCBkYXRh
VGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmJnZXooY21wVGVtcFJlZ2lz
dGVyLCA1KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICAgICAgcmV0
dXJuIEp1bXAobV9hc3NlbWJsZXIuam1wKCkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYg
KGNvbmQgPT0gU2lnbmVkKSB7CisgICAgICAgICAgICBzdWIzMihzcmMsIGRlc3QsIGZpeGVkKTsK
KyAgICAgICAgICAgIC8vIENoZWNrIGlmIGRlc3QgaXMgbmVnYXRpdmUuCisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5zbHQoY21wVGVtcFJlZ2lzdGVyLCBkZXN0LCBNSVBTUmVnaXN0ZXJzOjp6ZXJv
KTsKKyAgICAgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmJyYW5jaF9uZShjbXBUZW1w
UmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onplcm8pKTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
IGlmIChjb25kID09IFplcm8pIHsKKyAgICAgICAgICAgIHN1YjMyKHNyYywgZGVzdCwgZml4ZWQp
OworICAgICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuYnJhbmNoX2VxKGRlc3QsIE1J
UFNSZWdpc3RlcnM6Onplcm8pKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChjb25kID09
IE5vblplcm8pIHsKKyAgICAgICAgICAgIHN1YjMyKHNyYywgZGVzdCwgZml4ZWQpOworICAgICAg
ICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuYnJhbmNoX25lKGRlc3QsIE1JUFNSZWdpc3Rl
cnM6Onplcm8pKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBKdW1wKCk7CisgICAgfQor
CisgICAgSnVtcCBicmFuY2hTdWIzMihDb25kaXRpb24gY29uZCwgSW1tMzIgaW1tLCBSZWdpc3Rl
cklEIGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5saShp
bW1UZW1wUmVnaXN0ZXIsIGltbS5tX3ZhbHVlLCBmaXhlZCk7CisgICAgICAgIHJldHVybiBicmFu
Y2hTdWIzMihjb25kLCBpbW1UZW1wUmVnaXN0ZXIsIGRlc3QsIGZpeGVkKTsKKyAgICB9CisKKyAg
ICAvLyBNaXNjZWxsYW5lb3VzIG9wZXJhdGlvbnM6CisKKyAgICB2b2lkIGJyZWFrcG9pbnQoKQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYmtwdCgpOworICAgIH0KKworICAgIENhbGwgbmVh
ckNhbGwoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIuZnVuY3Rpb25f
Y2FsbCgpLCBDYWxsOjpMaW5rYWJsZU5lYXIpOworICAgIH0KKworICAgIENhbGwgY2FsbCgpCisg
ICAgeworICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5mYXJfZnVuY3Rpb25fY2FsbCgp
LCBDYWxsOjpMaW5rYWJsZSk7CisgICAgfQorCisgICAgQ2FsbCBjYWxsKFJlZ2lzdGVySUQgdGFy
Z2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIuZnVuY3Rpb25fY2Fs
bF92aWFfcmVnaXN0ZXIodGFyZ2V0KSwgQ2FsbDo6Tm9uZSk7CisgICAgfQorCisgICAgQ2FsbCBj
YWxsKEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIGludCBmaXhlZCA9IDE7CisgICAg
ICAgIGxvYWQzMihhZGRyZXNzLCBNSVBTUmVnaXN0ZXJzOjp0OSwgZml4ZWQpOworICAgICAgICBy
ZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5mdW5jdGlvbl9jYWxsX3ZpYV9yZWdpc3RlcihNSVBTUmVn
aXN0ZXJzOjp0OSksIENhbGw6Ok5vbmUpOworICAgIH0KKworICAgIHZvaWQgcmV0KCkKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLmptcF9yZWdpc3RlcihNSVBTUmVnaXN0ZXJzOjpyYSk7Cisg
ICAgfQorCisgICAgdm9pZCBzZXQzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBS
ZWdpc3RlcklEIHJpZ2h0LCBSZWdpc3RlcklEIGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgewor
ICAgICAgICBpZiAoY29uZCA9PSBFcXVhbCB8fCBjb25kID09IFplcm8pIHsKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLnhvcl9pbnNuKGRlc3QsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLnNsdGl1KGRlc3QsIGRlc3QsIDEpOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
aWYgKGNvbmQgPT0gTm90RXF1YWwgfHwgY29uZCA9PSBOb25aZXJvKSB7CisgICAgICAgICAgICBt
X2Fzc2VtYmxlci54b3JfaW5zbihkZXN0LCBsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5zbHR1KGRlc3QsIE1JUFNSZWdpc3RlcnM6Onplcm8sIGRlc3QpOworICAgICAgICB9
CisgICAgICAgIGVsc2UgaWYgKGNvbmQgPT0gQWJvdmUpCisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5zbHR1KGRlc3QsIHJpZ2h0LCBsZWZ0KTsKKyAgICAgICAgZWxzZSBpZiAoY29uZCA9PSBBYm92
ZU9yRXF1YWwpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdHUoZGVzdCwgbGVmdCwgcmln
aHQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIueG9yaShkZXN0LCBkZXN0LCAxKTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlIGlmIChjb25kID09IEJlbG93KQorICAgICAgICAgICAgbV9hc3Nl
bWJsZXIuc2x0dShkZXN0LCBsZWZ0LCByaWdodCk7CisgICAgICAgIGVsc2UgaWYgKGNvbmQgPT0g
QmVsb3dPckVxdWFsKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHR1KGRlc3QsIHJpZ2h0
LCBsZWZ0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnhvcmkoZGVzdCwgZGVzdCwgMSk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gR3JlYXRlclRoYW4pCisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5zbHQoZGVzdCwgcmlnaHQsIGxlZnQpOworICAgICAgICBlbHNlIGlmIChjb25k
ID09IEdyZWF0ZXJUaGFuT3JFcXVhbCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0KGRl
c3QsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnhvcmkoZGVzdCwgZGVz
dCwgMSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY29uZCA9PSBMZXNzVGhhbikKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdChkZXN0LCBsZWZ0LCByaWdodCk7CisgICAgICAgIGVs
c2UgaWYgKGNvbmQgPT0gTGVzc1RoYW5PckVxdWFsKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5zbHQoZGVzdCwgcmlnaHQsIGxlZnQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIueG9yaShk
ZXN0LCBkZXN0LCAxKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChjb25kID09IE92ZXJm
bG93KSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgIHhvciAgICAgY21wVGVtcCwg
bGVmdCwgcmlnaHQKKyAgICAgICAgICAgICAgICBiZ2V6ICAgIERvbmUsIGNtcFRlbXAgICAjIHNh
bWUgc2lnbiBiaXQgLT4gbm8gb3ZlcmZsb3cKKyAgICAgICAgICAgICAgICBtb3ZlICAgIGRlc3Qs
IDAKKyAgICAgICAgICAgICAgICBzdWJ1ICAgIGNtcFRlbXAsIGxlZnQsIHJpZ2h0CisgICAgICAg
ICAgICAgICAgeG9yICAgICBjbXBUZW1wLCBjbXBUZW1wLCBsZWZ0ICMgZGlmZiBzaWduIGJpdCAt
PiBvdmVyZmxvdworICAgICAgICAgICAgICAgIHNsdCAgICAgZGVzdCwgY21wVGVtcCwgMAorICAg
ICAgICAgICAgICBEb25lOgorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
Lnhvcl9pbnNuKGNtcFRlbXBSZWdpc3RlciwgbGVmdCwgcmlnaHQpOworICAgICAgICAgICAgbV9h
c3NlbWJsZXIuYmdleihjbXBUZW1wUmVnaXN0ZXIsIDQpOworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIubW92ZShkZXN0LCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLnN1YnUoY21wVGVtcFJlZ2lzdGVyLCBsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci54b3JfaW5zbihjbXBUZW1wUmVnaXN0ZXIsIGNtcFRlbXBSZWdpc3RlciwgbGVmdCk7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHQoZGVzdCwgY21wVGVtcFJlZ2lzdGVyLCBNSVBT
UmVnaXN0ZXJzOjp6ZXJvKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChjb25kID09IFNp
Z25lZCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3VidShkZXN0LCBsZWZ0LCByaWdodCk7
CisgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgcmVzdWx0IGlzIG5lZ2F0aXZlLgorICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuc2x0KGRlc3QsIGRlc3QsIE1JUFNSZWdpc3RlcnM6Onplcm8pOwor
ICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBzZXQzMihDb25kaXRpb24gY29uZCwgUmVnaXN0
ZXJJRCBsZWZ0LCBJbW0zMiByaWdodCwgUmVnaXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQgPSAwKQor
ICAgIHsKKyAgICAgICAgbW92ZShyaWdodCwgaW1tVGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAg
ICAgIHNldDMyKGNvbmQsIGxlZnQsIGltbVRlbXBSZWdpc3RlciwgZGVzdCwgZml4ZWQpOworICAg
IH0KKworICAgIHZvaWQgc2V0VGVzdDMyKENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGFkZHJlc3Ms
IEltbTMyIG1hc2ssIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVCgoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisgICAgICAg
IGxvYWQzMihhZGRyZXNzLCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgaWYgKG1hc2subV92
YWx1ZSA9PSAtMSAmJiBmaXhlZCA9PSAwKSB7CisgICAgICAgICAgICBpZiAoY29uZCA9PSBaZXJv
KQorICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdGl1KGRlc3QsIGRhdGFUZW1wUmVnaXN0
ZXIsIDEpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNs
dHUoZGVzdCwgTUlQU1JlZ2lzdGVyczo6emVybywgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtb3ZlKG1hc2ssIGltbVRlbXBSZWdpc3Rl
ciwgZml4ZWQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYW5kX2luc24oY21wVGVtcFJlZ2lz
dGVyLCBkYXRhVGVtcFJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIGlmIChjb25kID09IFplcm8pCisgICAgICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuc2x0aXUoZGVzdCwgY21wVGVtcFJlZ2lzdGVyLCAxKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHR1KGRlc3QsIE1J
UFNSZWdpc3RlcnM6Onplcm8sIGNtcFRlbXBSZWdpc3Rlcik7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBEYXRhTGFiZWwzMiBtb3ZlV2l0aFBhdGNoKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgaW50IGZpeGVkID0gMTsKKyAgICAgICAgRGF0YUxhYmVsMzIgbGFi
ZWwodGhpcyk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxpKGRlc3QsIGltbS5tX3ZhbHVlLCBmaXhl
ZCk7CisgICAgICAgIHJldHVybiBsYWJlbDsKKyAgICB9CisKKyAgICBEYXRhTGFiZWxQdHIgbW92
ZVdpdGhQYXRjaChJbW1QdHIgaW5pdGlhbFZhbHVlLCBSZWdpc3RlcklEIGRlc3QpCisgICAgewor
ICAgICAgICBpbnQgZml4ZWQgPSAxOworICAgICAgICBEYXRhTGFiZWxQdHIgbGFiZWwodGhpcyk7
CisgICAgICAgIE1JUFNXb3JkIHZhbHVlID0gcmVpbnRlcnByZXRfY2FzdDxNSVBTV29yZD4oaW5p
dGlhbFZhbHVlLm1fdmFsdWUpOworICAgICAgICBtX2Fzc2VtYmxlci5saShkZXN0LCB2YWx1ZSwg
Zml4ZWQpOworICAgICAgICByZXR1cm4gbGFiZWw7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hQ
dHJXaXRoUGF0Y2goQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgRGF0YUxhYmVsUHRy
JiBkYXRhTGFiZWwsIEltbVB0ciBpbml0aWFsUmlnaHRWYWx1ZSA9IEltbVB0cigwKSkKKyAgICB7
CisgICAgICAgIGludCBmaXhlZCA9IDE7CisgICAgICAgIGRhdGFMYWJlbCA9IG1vdmVXaXRoUGF0
Y2goaW5pdGlhbFJpZ2h0VmFsdWUsIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBi
cmFuY2gzMihjb25kLCBsZWZ0LCBpbW1UZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAgICB9CisKKyAg
ICBKdW1wIGJyYW5jaFB0cldpdGhQYXRjaChDb25kaXRpb24gY29uZCwgQWRkcmVzcyBsZWZ0LCBE
YXRhTGFiZWxQdHImIGRhdGFMYWJlbCwgSW1tUHRyIGluaXRpYWxSaWdodFZhbHVlID0gSW1tUHRy
KDApKQorICAgIHsKKyAgICAgICAgaW50IGZpeGVkID0gMTsKKyAgICAgICAgbG9hZDMyKGxlZnQs
IGRhdGFUZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAgICAgICAgZGF0YUxhYmVsID0gbW92ZVdpdGhQ
YXRjaChpbml0aWFsUmlnaHRWYWx1ZSwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJu
IGJyYW5jaDMyKGNvbmQsIGRhdGFUZW1wUmVnaXN0ZXIsIGltbVRlbXBSZWdpc3RlciwgZml4ZWQp
OworICAgIH0KKworICAgIERhdGFMYWJlbFB0ciBzdG9yZVB0cldpdGhQYXRjaChJbW1QdHIgaW5p
dGlhbFZhbHVlLCBJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIGludCBm
aXhlZCA9IDE7CisgICAgICAgIERhdGFMYWJlbFB0ciBkYXRhTGFiZWwgPSBtb3ZlV2l0aFBhdGNo
KGluaXRpYWxWYWx1ZSwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgIHN0b3JlMzIoZGF0YVRl
bXBSZWdpc3RlciwgYWRkcmVzcywgZml4ZWQpOworICAgICAgICByZXR1cm4gZGF0YUxhYmVsOwor
ICAgIH0KKworICAgIERhdGFMYWJlbFB0ciBzdG9yZVB0cldpdGhQYXRjaChJbXBsaWNpdEFkZHJl
c3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIHJldHVybiBzdG9yZVB0cldpdGhQYXRjaChJbW1Q
dHIoMCksIGFkZHJlc3MpOworICAgIH0KKworICAgIENhbGwgdGFpbFJlY3Vyc2l2ZUNhbGwoKQor
ICAgIHsKKyAgICAgICAgLy8gTGlrZSBhIG5vcm1hbCBjYWxsLCBidXQgZG9uJ3QgbGluay4KKyAg
ICAgICAgaW50IGZpeGVkID0gMTsKKyAgICAgICAgbV9hc3NlbWJsZXIubGkoYWRkclRlbXBSZWdp
c3RlciwgMCwgZml4ZWQpOworICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci50YWlsX2Z1
bmN0aW9uX2NhbGxfdmlhX3JlZ2lzdGVyKGFkZHJUZW1wUmVnaXN0ZXIpLAorICAgICAgICAgICAg
ICAgICAgICBDYWxsOjpMaW5rYWJsZSk7CisgICAgfQorCisgICAgQ2FsbCBtYWtlVGFpbFJlY3Vy
c2l2ZUNhbGwoSnVtcCBvbGRKdW1wKQorICAgIHsKKyAgICAgICAgb2xkSnVtcC5saW5rKHRoaXMp
OworICAgICAgICByZXR1cm4gdGFpbFJlY3Vyc2l2ZUNhbGwoKTsKKyAgICB9CisKKyAgICB2b2lk
IGxvYWREb3VibGUoSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MsIEZQUmVnaXN0ZXJJRCBkZXN0LCBp
bnQgZml4ZWQgPSAwKQorICAgIHsKKyNpZiBfX21pcHMgPT0gMQorICAgICAgICAvKgorICAgICAg
ICAgICAgbGkgICAgICAgICAgYWRkclRlbXAsIGFkZHJlc3Mub2Zmc2V0CisgICAgICAgICAgICBh
ZGR1ICAgICAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGJhc2UKKyAgICAgICAgICAgIGx3YzEgICAg
ICAgIGRlc3QsIDAoYWRkclRlbXApCisgICAgICAgICAgICBsd2MxICAgICAgICBkZXN0KzEsIDQo
YWRkclRlbXApCisgICAgICAgICAqLworICAgICAgICBtX2Fzc2VtYmxlci5saShhZGRyVGVtcFJl
Z2lzdGVyLCBhZGRyZXNzLm9mZnNldCwgZml4ZWQpOworICAgICAgICBtX2Fzc2VtYmxlci5hZGR1
KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSk7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmx3YzEoZGVzdCwgYWRkclRlbXBSZWdpc3RlciwgMCk7CisgICAgICAg
IG1fYXNzZW1ibGVyLmx3YzEoRlBSZWdpc3RlcklEKGRlc3QgKyAxKSwgYWRkclRlbXBSZWdpc3Rl
ciwgNCk7CisjZWxzZQorICAgICAgICBpZiAoYWRkcmVzcy5vZmZzZXQgPj0gLTMyNzY4ICYmIGFk
ZHJlc3Mub2Zmc2V0IDw9IDMyNzY3ICYmIGZpeGVkID09IDApIHsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmxkYzEoZGVzdCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgIGx1aSAg
ICAgYWRkclRlbXAsIG9mZnNldCA+PiAxNgorICAgICAgICAgICAgICAgIGFkZHUgICAgYWRkclRl
bXAsIGFkZHJUZW1wLCBiYXNlCisgICAgICAgICAgICAgICAgbGRjMSAgICBkZXN0LCAob2Zmc2V0
ICYgMHhmZmZmKShhZGRyVGVtcCkKKyAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmx1aShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCA+PiAxNik7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0
ZXIsIGFkZHJlc3MuYmFzZSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sZGMxKGRlc3QsIGFk
ZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgfQorI2VuZGlmCisgICAg
fQorCisgICAgdm9pZCBzdG9yZURvdWJsZShGUFJlZ2lzdGVySUQgc3JjLCBJbXBsaWNpdEFkZHJl
c3MgYWRkcmVzcywgaW50IGZpeGVkID0gMCkKKyAgICB7CisjaWYgX19taXBzID09IDEKKyAgICAg
ICAgLyoKKyAgICAgICAgICAgIGxpICAgICAgICAgIGFkZHJUZW1wLCBhZGRyZXNzLm9mZnNldAor
ICAgICAgICAgICAgYWRkdSAgICAgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBiYXNlCisgICAgICAg
ICAgICBzd2MxICAgICAgICBkZXN0LCAwKGFkZHJUZW1wKQorICAgICAgICAgICAgc3djMSAgICAg
ICAgZGVzdCsxLCA0KGFkZHJUZW1wKQorICAgICAgICAgKi8KKyAgICAgICAgbV9hc3NlbWJsZXIu
bGkoYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQsIGZpeGVkICk7CisgICAgICAgIG1f
YXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVz
cy5iYXNlKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3djMShzcmMsIGFkZHJUZW1wUmVnaXN0ZXIs
IDApOworICAgICAgICBtX2Fzc2VtYmxlci5zd2MxKEZQUmVnaXN0ZXJJRChzcmMgKyAxKSwgYWRk
clRlbXBSZWdpc3RlciwgNCk7CisjZWxzZQorICAgICAgICBpZiAoYWRkcmVzcy5vZmZzZXQgPj0g
LTMyNzY4ICYmIGFkZHJlc3Mub2Zmc2V0IDw9IDMyNzY3ICYmIGZpeGVkID09IDApCisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5zZGMxKHNyYywgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCk7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICBsdWkgICAg
IGFkZHJUZW1wLCBvZmZzZXQgPj4gMTYKKyAgICAgICAgICAgICAgICBhZGR1ICAgIGFkZHJUZW1w
LCBhZGRyVGVtcCwgYmFzZQorICAgICAgICAgICAgICAgIHNkYzEgICAgc3JjLCAob2Zmc2V0ICYg
MHhmZmZmKShhZGRyVGVtcCkKKyAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLmx1aShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCA+PiAxNik7CisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIs
IGFkZHJlc3MuYmFzZSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zZGMxKHNyYywgYWRkclRl
bXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQpOworICAgICAgICB9CisjZW5kaWYKKyAgICB9CisK
KyAgICB2b2lkIGFkZERvdWJsZShGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCwg
aW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZF9kKGRlc3QsIGRl
c3QsIHNyYyk7CisgICAgfQorCisgICAgdm9pZCBhZGREb3VibGUoQWRkcmVzcyBzcmMsIEZQUmVn
aXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgbG9hZERvdWJsZShz
cmMsIGZwVGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZF9kKGRl
c3QsIGRlc3QsIGZwVGVtcFJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICB2b2lkIHN1YkRvdWJsZShG
UFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLnN1Yl9kKGRlc3QsIGRlc3QsIHNyYyk7CisgICAgfQorCisg
ICAgdm9pZCBzdWJEb3VibGUoQWRkcmVzcyBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0LCBpbnQgZml4
ZWQgPSAwKQorICAgIHsKKyAgICAgICAgbG9hZERvdWJsZShzcmMsIGZwVGVtcFJlZ2lzdGVyLCBm
aXhlZCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnN1Yl9kKGRlc3QsIGRlc3QsIGZwVGVtcFJlZ2lz
dGVyKTsKKyAgICB9CisKKyAgICB2b2lkIG11bERvdWJsZShGUFJlZ2lzdGVySUQgc3JjLCBGUFJl
Z2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVy
Lm11bF9kKGRlc3QsIGRlc3QsIHNyYyk7CisgICAgfQorCisgICAgdm9pZCBtdWxEb3VibGUoQWRk
cmVzcyBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAg
ICAgbG9hZERvdWJsZShzcmMsIGZwVGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgICAgIG1fYXNz
ZW1ibGVyLm11bF9kKGRlc3QsIGRlc3QsIGZwVGVtcFJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICB2
b2lkIGNvbnZlcnRJbnQzMlRvRG91YmxlKFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZGVz
dCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm10YzEoc3JjLCBm
cFRlbXBSZWdpc3Rlcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmN2dF9kX3coZGVzdCwgZnBUZW1w
UmVnaXN0ZXIpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoRG91YmxlKERvdWJsZUNvbmRpdGlv
biBjb25kLCBGUFJlZ2lzdGVySUQgbGVmdCwgRlBSZWdpc3RlcklEIHJpZ2h0LCBpbnQgZml4ZWQg
PSAwKQorICAgIHsKKyAgICAgICAgaWYgKGNvbmQgPT0gRG91YmxlRXF1YWwpIHsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLmNfZXFfZChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICByZXR1cm4g
SnVtcChtX2Fzc2VtYmxlci5iYzF0KCkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGNv
bmQgPT0gRG91YmxlR3JlYXRlclRoYW4pIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNfbHRf
ZChyaWdodCwgbGVmdCk7IC8vIHJldmVyc2UKKyAgICAgICAgICAgIHJldHVybiBKdW1wKG1fYXNz
ZW1ibGVyLmJjMXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY29uZCA9PSBEb3Vi
bGVHcmVhdGVyVGhhbk9yRXF1YWwpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNfbGVfZChy
aWdodCwgbGVmdCk7IC8vIHJldmVyc2UKKyAgICAgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1i
bGVyLmJjMXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY29uZCA9PSBEb3VibGVM
ZXNzVGhhbikgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY19sdF9kKGxlZnQsIHJpZ2h0KTsK
KyAgICAgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmJjMXQoKSk7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZSBpZiAoY29uZCA9PSBEb3VibGVMZXNzVGhhbk9yRXF1YWwpIHsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLmNfbGVfZChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICByZXR1
cm4gSnVtcChtX2Fzc2VtYmxlci5iYzF0KCkpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIEFTU0VSVCgwKTsKKworICAgICAgICByZXR1cm4gSnVtcCgpOworICAgIH0KKwor
ICAgIC8vIFRydW5jYXRlcyAnc3JjJyB0byBhbiBpbnRlZ2VyLCBhbmQgcGxhY2VzIHRoZSByZXN1
bHRpbmcgJ2Rlc3QnLgorICAgIC8vIElmIHRoZSByZXN1bHQgaXMgbm90IHJlcHJlc2VudGFibGUg
YXMgYSAzMiBiaXQgdmFsdWUsIGJyYW5jaC4KKyAgICAvLyBNYXkgYWxzbyBicmFuY2ggZm9yIHNv
bWUgdmFsdWVzIHRoYXQgYXJlIHJlcHJlc2VudGFibGUgaW4gMzIgYml0cworICAgIC8vIChzcGVj
aWZpY2FsbHksIGluIHRoaXMgY2FzZSwgSU5UX01BWCAweDdmZmZmZmZmKS4KKyAgICBKdW1wIGJy
YW5jaFRydW5jYXRlRG91YmxlVG9JbnQzMihGUFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRl
c3QsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci50cnVuY193X2Qo
ZnBUZW1wUmVnaXN0ZXIsc3JjKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubWZjMShkZXN0LCBmcFRl
bXBSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBicmFuY2gzMihFcXVhbCwgZGVzdCwgSW1tMzIo
MHg3ZmZmZmZmZiksIGZpeGVkKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNz
IExpbmtCdWZmZXI7CisgICAgZnJpZW5kIGNsYXNzIFJlcGF0Y2hCdWZmZXI7CisKKyAgICBzdGF0
aWMgdm9pZCBsaW5rQ2FsbCh2b2lkKiBjb2RlLCBDYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGZ1bmN0
aW9uKQorICAgIHsKKyAgICAgICAgTUlQU0Fzc2VtYmxlcjo6bGlua0NhbGwoY29kZSwgY2FsbC5t
X2ptcCwgZnVuY3Rpb24udmFsdWUoKSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVwYXRj
aENhbGwoQ29kZUxvY2F0aW9uQ2FsbCBjYWxsLCBDb2RlTG9jYXRpb25MYWJlbCBkZXN0aW5hdGlv
bikKKyAgICB7CisgICAgICAgIE1JUFNBc3NlbWJsZXI6OnJlbGlua0NhbGwoY2FsbC5kYXRhTG9j
YXRpb24oKSwgZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgfQorCisgICAg
c3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbCBjYWxsLCBGdW5jdGlvblB0
ciBkZXN0aW5hdGlvbikKKyAgICB7CisgICAgICAgIE1JUFNBc3NlbWJsZXI6OnJlbGlua0NhbGwo
Y2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7Cisg
ICAgfQorCit9OworCit9CisKKyNlbmRpZgorCisjZW5kaWYgLy8gTWFjcm9Bc3NlbWJsZXJNSVBT
X2gKSW5kZXg6IHlhcnIvUmVnZXhKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHlhcnIvUmVnZXhKSVQu
Y3BwCShyZXZpc2lvbiA0ODAwMCkKKysrIHlhcnIvUmVnZXhKSVQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01NCw2ICs1NCwxNiBAQAogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1QxID0g
QVJNUmVnaXN0ZXJzOjpyNjsKIAogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJldHVyblJl
Z2lzdGVyID0gQVJNUmVnaXN0ZXJzOjpyMDsKKyNlbGlmIFBMQVRGT1JNKE1JUFMpCisgICAgc3Rh
dGljIGNvbnN0IFJlZ2lzdGVySUQgaW5wdXQgPSBNSVBTUmVnaXN0ZXJzOjphMDsKKyAgICBzdGF0
aWMgY29uc3QgUmVnaXN0ZXJJRCBpbmRleCA9IE1JUFNSZWdpc3RlcnM6OmExOworICAgIHN0YXRp
YyBjb25zdCBSZWdpc3RlcklEIGxlbmd0aCA9IE1JUFNSZWdpc3RlcnM6OmEyOworICAgIHN0YXRp
YyBjb25zdCBSZWdpc3RlcklEIG91dHB1dCA9IE1JUFNSZWdpc3RlcnM6OmEzOworCisgICAgc3Rh
dGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnVDAgPSBNSVBTUmVnaXN0ZXJzOjp0NDsKKyAgICBzdGF0
aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdUMSA9IE1JUFNSZWdpc3RlcnM6OnQ1OworCisgICAgc3Rh
dGljIGNvbnN0IFJlZ2lzdGVySUQgcmV0dXJuUmVnaXN0ZXIgPSBNSVBTUmVnaXN0ZXJzOjp2MDsK
ICNlbGlmIFBMQVRGT1JNKFg4NikKICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBpbnB1dCA9
IFg4NlJlZ2lzdGVyczo6ZWF4OwogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGluZGV4ID0g
WDg2UmVnaXN0ZXJzOjplZHg7CkBAIC0xMzE2LDYgKzEzMjYsOCBAQAogICAgICAgICBwdXNoKEFS
TVJlZ2lzdGVyczo6cjUpOwogICAgICAgICBwdXNoKEFSTVJlZ2lzdGVyczo6cjYpOwogICAgICAg
ICBtb3ZlKEFSTVJlZ2lzdGVyczo6cjMsIG91dHB1dCk7CisjZWxpZiBQTEFURk9STShNSVBTKQor
ICAgICAgICAvLyBEbyBub3RoaW5nLgogI2VuZGlmCiAgICAgfQogCkBAIC0xMzMzLDYgKzEzNDUs
OCBAQAogICAgICAgICBwb3AoQVJNUmVnaXN0ZXJzOjpyNik7CiAgICAgICAgIHBvcChBUk1SZWdp
c3RlcnM6OnI1KTsKICAgICAgICAgcG9wKEFSTVJlZ2lzdGVyczo6cjQpOworI2VsaWYgUExBVEZP
Uk0oTUlQUykKKyAgICAgICAgLy8gRG8gbm90aGluZwogI2VuZGlmCiAgICAgICAgIHJldCgpOwog
ICAgIH0KSW5kZXg6IGppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBqaXQvSklUT3Bj
b2Rlcy5jcHAJKHJldmlzaW9uIDQ4MDAwKQorKysgaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzIyLDYgKzE3MjIsNTYgQEAKIAogICAgIGFkZFB0cihJbW0zMihzaXplb2Yo
QXJnTGlzdCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKKyNlbGlmIFBMQVRGT1JNKE1JUFMp
CisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIzMihSZWdpc3RlckZpbGU6OkFyZ3VtZW50
Q291bnQsIHJlZ1QwKTsKKworICAgIC8vIEFsbG9jYXRlIHN0YWNrIHNwYWNlIGZvciBvdXIgYXJn
bGlzdAorICAgIENPTVBJTEVfQVNTRVJUKChzaXplb2YoQXJnTGlzdCkgJiAweDcpID09IDAsIEFy
Z0xpc3Rfc2hvdWxkX2J5XzhieXRlX2FsaWduZWQpOworICAgIHN1YlB0cihJbW0zMihzaXplb2Yo
QXJnTGlzdCkgKyAyNCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgIC8vIFNldCB1cCBh
cmd1bWVudHMKKyAgICBzdWJQdHIoSW1tMzIoMSksIHJlZ1QwKTsgLy8gRG9uJ3QgaW5jbHVkZSAn
dGhpcycgaW4gYXJnY291bnQKKworICAgIC8vIFB1c2ggYXJnY291bnQgdG8gMjQgKyBvZmZzZXQo
JHNwKQorICAgIHN0b3JlUHRyKHJlZ1QwLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCAy
NCArIE9CSkVDVF9PRkZTRVRPRihBcmdMaXN0LCBtX2FyZ0NvdW50KSkpOworCisgICAgLy8gQ2Fs
Y3VsYXRlIHRoZSBzdGFydCBvZiB0aGUgY2FsbGZyYW1lIGhlYWRlciwgYW5kIHN0b3JlIGluIHJl
Z1QxCisgICAgbW92ZShjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDEpOworICAgIHN1YjMyKEltbTMy
KFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAqIChpbnQzMl90KXNpemVvZihSZWdp
c3RlcikpLCByZWdUMSk7CisKKyAgICAvLyBDYWxjdWxhdGUgc3RhcnQgb2YgYXJndW1lbnRzIGFz
IGNhbGxmcmFtZSBoZWFkZXIgLSBzaXplb2YoUmVnaXN0ZXIpICogYXJnY291bnQgKHJlZ1QxKQor
ICAgIG11bDMyKEltbTMyKHNpemVvZihSZWdpc3RlcikpLCByZWdUMCwgcmVnVDApOworICAgIHN1
YlB0cihyZWdUMCwgcmVnVDEpOworCisgICAgLy8gcHVzaCBwb2ludGVyIHRvIGFyZ3VtZW50cyB0
byAyNCArIG9mZnNldCgkc3ApCisgICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3Moc3RhY2tQb2lu
dGVyUmVnaXN0ZXIsIDI0ICsgT0JKRUNUX09GRlNFVE9GKEFyZ0xpc3QsIG1fYXJncykpKTsKKwor
ICAgIC8vIFNldHVwIGFyZzM6IHJlZ1QxIGN1cnJlbnRseSBwb2ludHMgdG8gdGhlIGZpcnN0IGFy
Z3VtZW50LCByZWdUMS1zaXplb2YoUmVnaXN0ZXIpIHBvaW50cyB0byAndGhpcycKKyAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDEsIC0oaW50MzJfdClzaXplb2YoUmVnaXN0ZXIpKSwgTUlQU1JlZ2lz
dGVyczo6YTMpOworCisgICAgLy8gU2V0dXAgYXJnMjoKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFt
ZUhlYWRlclB0cihSZWdpc3RlckZpbGU6OkNhbGxlZSwgTUlQU1JlZ2lzdGVyczo6YTIpOworCisg
ICAgLy8gU2V0dXAgYXJnMToKKyAgICBtb3ZlKGNhbGxGcmFtZVJlZ2lzdGVyLCBNSVBTUmVnaXN0
ZXJzOjphMSk7CisKKyAgICAvLyBTZXR1cCBhcmc0OiBBcmdMaXN0IGlzIHBhc3NlZCBieSByZWZl
cmVuY2UuICBBdCAxNigkc3ApLCBzdG9yZSAoJHNwICsgMjQpCisgICAgYWRkUHRyKEltbTMyKDI0
KSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QyKTsKKyAgICBzdG9yZVB0cihyZWdUMiwgQWRk
cmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgMTYpKTsKKworICAgIC8vIFNldHVwIGFyZzAgYXMg
MjAoJHNwKSB0byBob2xkIHRoZSByZXR1cm5lZCBzdHJ1Y3R1cmUuCisgICAgQVNTRVJUKHNpemVv
ZihKU1ZhbHVlKSA9PSA0KTsKKyAgICBhZGRQdHIoSW1tMzIoMjApLCBzdGFja1BvaW50ZXJSZWdp
c3RlciwgTUlQU1JlZ2lzdGVyczo6YTApOworCisgICAgLy8gQ2FsbAorICAgIGNhbGwoQWRkcmVz
cyhNSVBTUmVnaXN0ZXJzOjphMiwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fZGF0YSkp
KTsKKworICAgIC8vIEdldCByZXR1cm5lZCB2YWx1ZSBmcm9tIDAoJHYwKSB3aGljaCBpcyB0aGUg
c2FtZSBhcyAyMCgkc3ApCisgICAgbG9hZFB0cihBZGRyZXNzKHJldHVyblZhbHVlUmVnaXN0ZXIs
IDApLCByZXR1cm5WYWx1ZVJlZ2lzdGVyKTsKKworICAgIC8vIFJlc3RvcmUgc3RhY2sgc3BhY2UK
KyAgICBhZGRQdHIoSW1tMzIoc2l6ZW9mKEFyZ0xpc3QpICsgMjQpLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CisKICNlbGlmIEVOQUJMRShKSVRfT1BUSU1JWkVfTkFUSVZFX0NBTEwpCiAjZXJyb3Ig
IkpJVF9PUFRJTUlaRV9OQVRJVkVfQ0FMTCBub3QgeWV0IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRm
b3JtLiIKICNlbHNlCkluZGV4OiBqaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGppdC9K
SVRTdHVicy5jcHAJKHJldmlzaW9uIDQ4MDAwKQorKysgaml0L0pJVFN0dWJzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTU5LDYgKzU1OSw4NCBAQAogICAgICJtb3YgcGMsIGxyIiAiXG4iCiApOwog
CisjZWxpZiBQTEFURk9STShNSVBTKQorCisjaWYgVVNFKEpJVF9TVFVCX0FSR1VNRU5UX1ZBX0xJ
U1QpCisjZXJyb3IgIkpJVF9TVFVCX0FSR1VNRU5UX1ZBX0xJU1Qgbm90IHN1cHBvcnRlZCBvbiBN
SVBTLiIKKyNlbmRpZgorCithc20gdm9sYXRpbGUgKAorIi50ZXh0IiAiXG4iCisiLmFsaWduIDIi
ICJcbiIKKyIuc2V0IG5vcmVvcmRlciIgIlxuIgorIi5zZXQgbm9tYWNybyIgIlxuIgorIi5zZXQg
bm9taXBzMTYiICJcbiIKKyIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGN0aVRyYW1wb2xpbmUpICJc
biIKK1NZTUJPTF9TVFJJTkcoY3RpVHJhbXBvbGluZSkgIjoiICJcbiIKKyAgICAiYWRkaXUgJDI5
LCQyOSwtNzIiICJcbiIKKyAgICAic3cgICAgJDMxLDQ0KCQyOSkiICJcbiIKKyAgICAic3cgICAg
JDE4LDQwKCQyOSkiICJcbiIKKyAgICAic3cgICAgJDE3LDM2KCQyOSkiICJcbiIKKyAgICAic3cg
ICAgJDE2LDMyKCQyOSkiICJcbiIKKyAgICAibW92ZSAgJDE2LCQ2ICAgICAgICMgc2V0IGNhbGxG
cmFtZVJlZ2lzdGVyIiAiXG4iCisgICAgImxpICAgICQxNyw1MTIgICAgICAjIHNldCB0aW1lb3V0
Q2hlY2tSZWdpc3RlciIgIlxuIgorICAgICJtb3ZlICAkMjUsJDQgICAgICAgIyBtb3ZlIGV4ZWN1
dGFibGVBZGRyZXNzIHRvIHQ5IiAiXG4iCisgICAgInN3ICAgICQ1LDUyKCQyOSkgICAjIHN0b3Jl
IHJlZ2lzdGVyRmlsZSB0byBjdXJyZW50IHN0YWNrIiAiXG4iCisgICAgInN3ICAgICQ2LDU2KCQy
OSkgICAjIHN0b3JlIGNhbGxGcmFtZSB0byBjdXJlbnQgc3RhY2siICJcbiIKKyAgICAic3cgICAg
JDcsNjAoJDI5KSAgICMgc3RvcmUgZXhjZXB0aW9uIHRvIGN1cnJlbnQgc3RhY2siICJcbiIKKyAg
ICAibHcgICAgJDgsODgoJDI5KSAgICMgbG9hZCBlbmFibGVQcm9maWxlclJlZmVyZW5jZSBmcm9t
IHByZXZpb3VzIHN0YWNrIiAiXG4iCisgICAgImx3ICAgICQ5LDkyKCQyOSkgICAjIGxvYWQgZ2xv
YmFsRGF0YSBmcm9tIHByZXZpb3VzIHN0YWNrIiAiXG4iCisgICAgInN3ICAgICQ4LDY0KCQyOSkg
ICAjIHN0b3JlIGVuYWJsZVByb2ZpbGVyUmVmZXJlbmNlIHRvIGN1cnJlbnQgc3RhY2siICJcbiIK
KyAgICAiamFsciAgJDI1IiAiXG4iCisgICAgInN3ICAgICQ5LDY4KCQyOSkgICAjIHN0b3JlIGds
b2JhbERhdGEgdG8gY3VycmVudCBzdGFjayIgIlxuIgorICAgICJsdyAgICAkMTYsMzIoJDI5KSIg
IlxuIgorICAgICJsdyAgICAkMTcsMzYoJDI5KSIgIlxuIgorICAgICJsdyAgICAkMTgsNDAoJDI5
KSIgIlxuIgorICAgICJsdyAgICAkMzEsNDQoJDI5KSIgIlxuIgorICAgICJqciAgICAkMzEiICJc
biIKKyAgICAiYWRkaXUgJDI5LCQyOSw3MiIgIlxuIgorIi5zZXQgcmVvcmRlciIgIlxuIgorIi5z
ZXQgbWFjcm8iICJcbiIKKyk7CisKK2FzbSB2b2xhdGlsZSAoCisiLnRleHQiICJcbiIKKyIuYWxp
Z24gMiIgIlxuIgorIi5zZXQgbm9yZW9yZGVyIiAiXG4iCisiLnNldCBub21hY3JvIiAiXG4iCisi
LnNldCBub21pcHMxNiIgIlxuIgorIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoY3RpVk1UaHJvd1Ry
YW1wb2xpbmUpICJcbiIKK1NZTUJPTF9TVFJJTkcoY3RpVk1UaHJvd1RyYW1wb2xpbmUpICI6IiAi
XG4iCisgICAgImphbCAiIFNZTUJPTF9TVFJJTkcoY3RpX3ZtX3Rocm93KSAiXG4iCisgICAgIm1v
dmUgICQ0LCAkMjkiICJcbiIKKyAgICAibHcgICAgJDE2LDMyKCQyOSkiICJcbiIKKyAgICAibHcg
ICAgJDE3LDM2KCQyOSkiICJcbiIKKyAgICAibHcgICAgJDE4LDQwKCQyOSkiICJcbiIKKyAgICAi
bHcgICAgJDMxLDQ0KCQyOSkiICJcbiIKKyAgICAianIgICAgJDMxIiAiXG4iCisgICAgImFkZGl1
ICQyOSwkMjksNzIiICJcbiIKKyIuc2V0IHJlb3JkZXIiICJcbiIKKyIuc2V0IG1hY3JvIiAiXG4i
CispOworCithc20gdm9sYXRpbGUgKAorIi50ZXh0IiAiXG4iCisiLmFsaWduIDIiICJcbiIKKyIu
c2V0IG5vcmVvcmRlciIgIlxuIgorIi5zZXQgbm9tYWNybyIgIlxuIgorIi5zZXQgbm9taXBzMTYi
ICJcbiIKKyIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGN0aU9wVGhyb3dOb3RDYXVnaHQpICJcbiIK
K1NZTUJPTF9TVFJJTkcoY3RpT3BUaHJvd05vdENhdWdodCkgIjoiICJcbiIKKyAgICAibHcgICAg
JDE2LDMyKCQyOSkiICJcbiIKKyAgICAibHcgICAgJDE3LDM2KCQyOSkiICJcbiIKKyAgICAibHcg
ICAgJDE4LDQwKCQyOSkiICJcbiIKKyAgICAibHcgICAgJDMxLDQ0KCQyOSkiICJcbiIKKyAgICAi
anIgICAgJDMxIiAiXG4iCisgICAgImFkZGl1ICQyOSwkMjksNzIiICJcbiIKKyIuc2V0IHJlb3Jk
ZXIiICJcbiIKKyIuc2V0IG1hY3JvIiAiXG4iCispOworCiAjZWxpZiBDT01QSUxFUihNU1ZDKQog
CiAjaWYgVVNFKEpJVF9TVFVCX0FSR1VNRU5UX1ZBX0xJU1QpCkBAIC02NTMsNiArNzMxLDIwIEBA
CiAKICAgICBBU1NFUlQoT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCB0aHVu
a1JldHVybkFkZHJlc3MpID09IDB4MUMpOwogI2VuZGlmCisKKyNpZiBQTEFURk9STShNSVBTKQor
ICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIHByZXNlcnZl
ZFMwKSA9PSAzMik7CisgICAgQVNTRVJUKE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tG
cmFtZSwgcHJlc2VydmVkUzEpID09IDM2KTsKKyAgICBBU1NFUlQoT0JKRUNUX09GRlNFVE9GKHN0
cnVjdCBKSVRTdGFja0ZyYW1lLCBwcmVzZXJ2ZWRTMikgPT0gNDApOworICAgIEFTU0VSVChPQkpF
Q1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIHByZXNlcnZlZFJldHVybkFkZHJlc3Mp
ID09IDQ0KTsKKyAgICBBU1NFUlQoT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1l
LCB0aHVua1JldHVybkFkZHJlc3MpID09IDQ4KTsKKyAgICBBU1NFUlQoT0JKRUNUX09GRlNFVE9G
KHN0cnVjdCBKSVRTdGFja0ZyYW1lLCByZWdpc3RlckZpbGUpID09IDUyKTsKKyAgICBBU1NFUlQo
T0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBjYWxsRnJhbWUpID09IDU2KTsK
KyAgICBBU1NFUlQoT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBleGNlcHRp
b24pID09IDYwKTsKKyAgICBBU1NFUlQoT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0Zy
YW1lLCBlbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UpID09IDY0KTsKKyAgICBBU1NFUlQoT0JKRUNU
X09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBnbG9iYWxEYXRhKSA9PSA2OCk7CisKKyNl
bmRpZgogfQogCiAjaWYgRU5BQkxFKEpJVF9PUFRJTUlaRV9QUk9QRVJUWV9BQ0NFU1MpCkBAIC04
OTYsNiArOTg4LDMwIEBACiAgICAgICAgICk7IFwKICAgICBydHlwZSBKSVRTdHViVGh1bmtlZF8j
I29wKFNUVUJfQVJHU19ERUNMQVJBVElPTikgXAogCisjZWxpZiBQTEFURk9STShNSVBTKQorI2Rl
ZmluZSBERUZJTkVfU1RVQl9GVU5DVElPTihydHlwZSwgb3ApIFwKKyAgICBleHRlcm4gIkMiIHsg
XAorICAgICAgICBydHlwZSBKSVRTdHViVGh1bmtlZF8jI29wKFNUVUJfQVJHU19ERUNMQVJBVElP
Tik7IFwKKyAgICB9OyBcCisgICAgYXNtIHZvbGF0aWxlICggXAorICAgICAgICAiLnRleHQiICJc
biIgXAorICAgICAgICAiLmFsaWduIDIiICJcbiIgXAorICAgICAgICAiLnNldCBub3Jlb3JkZXIi
ICJcbiIgXAorICAgICAgICAiLnNldCBub21hY3JvIiAiXG4iIFwKKyAgICAgICAgIi5zZXQgbm9t
aXBzMTYiICJcbiIgXAorICAgICAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhjdGlfIyNvcCkg
IlxuIiBcCisgICAgICAgIFNZTUJPTF9TVFJJTkcoY3RpXyMjb3ApICI6IiAiXG4iIFwKKyAgICAg
ICAgInN3ICAgICQzMSwgNDgoJDI5KSIgIlxuIiBcCisgICAgICAgICJqYWwgIiBTWU1CT0xfU1RS
SU5HKEpJVFN0dWJUaHVua2VkXyMjb3ApICJcbiIgXAorICAgICAgICAibm9wIiAiXG4iIFwKKyAg
ICAgICAgImx3ICAgICQzMSwgNDgoJDI5KSIgIlxuIiBcCisgICAgICAgICJqciAgICAkMzEiICJc
biIgXAorICAgICAgICAibm9wIiAiXG4iIFwKKyAgICAgICAgIi5zZXQgcmVvcmRlciIgIlxuIiBc
CisgICAgICAgICIuc2V0IG1hY3JvIiAiXG4iIFwKKyAgICAgICAgKTsgXAorICAgIHJ0eXBlIEpJ
VFN0dWJUaHVua2VkXyMjb3AoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBcCisKICNlbHNlCiAjZGVm
aW5lIERFRklORV9TVFVCX0ZVTkNUSU9OKHJ0eXBlLCBvcCkgcnR5cGUgSklUX1NUVUIgY3RpXyMj
b3AoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKQogI2VuZGlmCkluZGV4OiBqaXQvSklUU3R1YnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBqaXQvSklUU3R1YnMuaAkocmV2aXNpb24gNDgwMDApCisrKyBqaXQvSklU
U3R1YnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTU1LDYgKzE1NSwyOSBAQAogICAgICAgICAKICAg
ICAgICAgUmV0dXJuQWRkcmVzc1B0ciogcmV0dXJuQWRkcmVzc1Nsb3QoKSB7IHJldHVybiAmdGh1
bmtSZXR1cm5BZGRyZXNzOyB9CiAgICAgfTsKKyNlbGlmIFBMQVRGT1JNKE1JUFMpCisgICAgc3Ry
dWN0IEpJVFN0YWNrRnJhbWUgeworICAgICAgICB2b2lkKiByZXNlcnZlZDsgLy8gVW51c2VkCisg
ICAgICAgIEpJVFN0dWJBcmcgYXJnc1s3XTsgLy8gS2VlcCBpdCA4IGJ5dGUgYWxpZ25lZAorCisg
ICAgICAgIHZvaWQqIHByZXNlcnZlZFMwOworICAgICAgICB2b2lkKiBwcmVzZXJ2ZWRTMTsKKyAg
ICAgICAgdm9pZCogcHJlc2VydmVkUzI7CisgICAgICAgIHZvaWQqIHByZXNlcnZlZFJldHVybkFk
ZHJlc3M7CisKKyAgICAgICAgUmV0dXJuQWRkcmVzc1B0ciB0aHVua1JldHVybkFkZHJlc3M7CisK
KyAgICAgICAgLy8gVGhlc2UgYXJndW1lbnRzIHBhc3NlZCBpbiBhMS4uYTMgKGEwIGNvbnRhaW5l
ZCB0aGUgZW50cnkgY29kZSBwb2ludGVkLCB3aGljaCBpcyBub3QgcHJlc2VydmVkKQorICAgICAg
ICBSZWdpc3RlckZpbGUqIHJlZ2lzdGVyRmlsZTsKKyAgICAgICAgQ2FsbEZyYW1lKiBjYWxsRnJh
bWU7CisgICAgICAgIEpTVmFsdWUqIGV4Y2VwdGlvbjsKKworICAgICAgICAvLyBUaGVzZSBhcmd1
bWVudHMgcGFzc2VkIG9uIHRoZSBzdGFjay4KKyAgICAgICAgUHJvZmlsZXIqKiBlbmFibGVkUHJv
ZmlsZXJSZWZlcmVuY2U7CisgICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YTsKKworICAg
ICAgICBSZXR1cm5BZGRyZXNzUHRyKiByZXR1cm5BZGRyZXNzU2xvdCgpIHsgcmV0dXJuICZ0aHVu
a1JldHVybkFkZHJlc3M7IH0KKyAgICB9OwogI2VsaWYgUExBVEZPUk0oQVJNKQogICAgIHN0cnVj
dCBKSVRTdGFja0ZyYW1lIHsKICAgICAgICAgSklUU3R1YkFyZyBwYWRkaW5nOyAvLyBVbnVzZWQK
SW5kZXg6IGppdC9KSVRJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaml0L0pJVElubGlu
ZU1ldGhvZHMuaAkocmV2aXNpb24gNDgwMDApCisrKyBqaXQvSklUSW5saW5lTWV0aG9kcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzMsNiArMTczLDIzIEBACiAgICAgbG9hZFB0cihhZGRyZXNzLCBs
aW5rUmVnaXN0ZXIpOwogfQogCisjZWxpZiBQTEFURk9STShNSVBTKQorCitBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjpwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoUmVnaXN0ZXJJRCByZWcp
Cit7CisgICAgbW92ZShyZXR1cm5BZGRyZXNzUmVnaXN0ZXIsIHJlZyk7Cit9CisKK0FMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKFJlZ2lzdGVy
SUQgcmVnKQoreworICAgIG1vdmUocmVnLCByZXR1cm5BZGRyZXNzUmVnaXN0ZXIpOworfQorCitB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjpyZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihB
ZGRyZXNzIGFkZHJlc3MpCit7CisgICAgbG9hZFB0cihhZGRyZXNzLCByZXR1cm5BZGRyZXNzUmVn
aXN0ZXIpOworfQorCiAjZW5kaWYKIAogI2lmIFVTRShKSVRfU1RVQl9BUkdVTUVOVF9WQV9MSVNU
KQpJbmRleDogaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBqaXQvRXhl
Y3V0YWJsZUFsbG9jYXRvci5oCShyZXZpc2lvbiA0ODAwMCkKKysrIGppdC9FeGVjdXRhYmxlQWxs
b2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3Niw2ICsxNzYsMzIgQEAKICAgICBzdGF0aWMg
dm9pZCBjYWNoZUZsdXNoKHZvaWQqLCBzaXplX3QpCiAgICAgewogICAgIH0KKyNlbGlmIFBMQVRG
T1JNKE1JUFMpCisgICAgc3RhdGljIHZvaWQgY2FjaGVGbHVzaCh2b2lkKiBjb2RlLCBzaXplX3Qg
c2l6ZSkKKyAgICB7CisjaWYgQ09NUElMRVIoR0NDKSAmJiAoR0NDX1ZFUlNJT04gPj0gMzA0MDYp
CisjaWYgX19taXBzX2lzYV9yZXYgPT0gMgorICAgICAgICBpbnQgbGluZV9zaXplOworICAgICAg
ICBhc20gKCJyZGh3ciAlMCwgJDEiIDogIj1yIiAobGluZV9zaXplKSk7CisgICAgICAgIC8vCisg
ICAgICAgIC8vIE1vZGlmeSAic3RhcnQiIGFuZCAiZW5kIiB0byBhdm9pZCBHQ0MgNC4zIGJ1ZyBp
bgorICAgICAgICAvLyBtaXBzX2V4cGFuZF9zeW5jaV9sb29wIHRoYXQgbWF5IGV4ZWN1dGUgc3lu
Y2kgb25lIG1vcmUgdGltZS4KKyAgICAgICAgLy8gInN0YXJ0IiBwb2ludHMgdG8gdGhlIGZpc3J0
IGJ5dGUgb2YgdGhlIGNhY2hlIGxpbmUuCisgICAgICAgIC8vICJlbmQiIHBvaW50cyB0byB0aGUg
bGFzdCBieXRlIG9mIHRoZSBsaW5lIGJlZm9yZSB0aGUgbGFzdCBjYWNoZSBsaW5lLgorICAgICAg
ICAvLyBCZWNhdXNlIHNpemUgaXMgYWx3YXlzIGEgbXVsdGlwbGUgb2YgNCwgdGhpcyBpcyBzYWZl
IHRvIHNldAorICAgICAgICAvLyAiZW5kIiB0byB0aGUgbGFzdCBieXRlLgorICAgICAgICAvLwor
ICAgICAgICBpbnQgc3RhcnQgPSByZWludGVycHJldF9jYXN0PGludHB0cl90Pihjb2RlKSAmICgt
bGluZV9zaXplKTsKKyAgICAgICAgaW50IGVuZCA9ICgocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJf
dD4oY29kZSkgKyBzaXplKSAmICgtbGluZV9zaXplKSkgLSAxOworICAgICAgICBfX2NsZWFyX2Nh
Y2hlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHN0YXJ0KSwgcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4oZW5kKSk7CisjZWxzZQorICAgICAgICBpbnQgZW5kID0gcmVpbnRlcnByZXRfY2FzdDxpbnRw
dHJfdD4oY29kZSkgKyBzaXplOworICAgICAgICBfX2NsZWFyX2NhY2hlKHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KGNvZGUpLCByZWludGVycHJldF9jYXN0PGNoYXIqPihlbmQpKTsKKyNlbmRpZgor
I2Vsc2UKKyAgICAgICAgI2Vycm9yICJXZSBuZWVkIEdDQyB0byBwcm92aWRlIF9fY2xlYXJfY2Fj
aGUgZm9yIE1JUFMiCisjZW5kaWYKKyAgICB9CiAjZWxpZiBQTEFURk9STV9BUk1fQVJDSCg3KSAm
JiBQTEFURk9STShJUEhPTkUpCiAgICAgc3RhdGljIHZvaWQgY2FjaGVGbHVzaCh2b2lkKiBjb2Rl
LCBzaXplX3Qgc2l6ZSkKICAgICB7CkluZGV4OiBqaXQvSklULmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaml0
L0pJVC5oCShyZXZpc2lvbiA0ODAwMCkKKysrIGppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAt
MjY3LDYgKzI2NywyOCBAQAogICAgICAgICBzdGF0aWMgY29uc3QgRlBSZWdpc3RlcklEIGZwUmVn
VDAgPSBBUk1SZWdpc3RlcnM6OmQwOwogICAgICAgICBzdGF0aWMgY29uc3QgRlBSZWdpc3RlcklE
IGZwUmVnVDEgPSBBUk1SZWdpc3RlcnM6OmQxOwogICAgICAgICBzdGF0aWMgY29uc3QgRlBSZWdp
c3RlcklEIGZwUmVnVDIgPSBBUk1SZWdpc3RlcnM6OmQyOworI2VsaWYgUExBVEZPUk0oTUlQUykK
KyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmV0dXJuVmFsdWVSZWdpc3RlciA9IE1J
UFNSZWdpc3RlcnM6OnYwOworICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBjYWNoZWRS
ZXN1bHRSZWdpc3RlciA9IE1JUFNSZWdpc3RlcnM6OnYwOworICAgICAgICBzdGF0aWMgY29uc3Qg
UmVnaXN0ZXJJRCBmaXJzdEFyZ3VtZW50UmVnaXN0ZXIgPSBNSVBTUmVnaXN0ZXJzOjphMDsKKwor
ICAgICAgICAvLyByZWdUMCBtdXN0IGJlIHYwIGZvciByZXR1cm5pbmcgYSAzMi1iaXQgdmFsdWUu
CisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1QwID0gTUlQU1JlZ2lzdGVyczo6
djA7CisKKyAgICAgICAgLy8gcmVnVDEgbXVzdCBiZSB2MSBmb3IgcmV0dXJuaW5nIGEgcGFpciBv
ZiAzMi1iaXQgdmFsdWUuCisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1QxID0g
TUlQU1JlZ2lzdGVyczo6djE7CisKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmVn
VDIgPSBNSVBTUmVnaXN0ZXJzOjp0NDsKKworICAgICAgICAvLyByZWdUMyBtdXN0IGJlIHNhdmVk
IGluIHRoZSBjYWxsZWUsIHNvIHVzZSBhbiBTIHJlZ2lzdGVyLgorICAgICAgICBzdGF0aWMgY29u
c3QgUmVnaXN0ZXJJRCByZWdUMyA9IE1JUFNSZWdpc3RlcnM6OnMyOworCisgICAgICAgIHN0YXRp
YyBjb25zdCBSZWdpc3RlcklEIGNhbGxGcmFtZVJlZ2lzdGVyID0gTUlQU1JlZ2lzdGVyczo6czA7
CisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHRpbWVvdXRDaGVja1JlZ2lzdGVyID0g
TUlQU1JlZ2lzdGVyczo6czE7CisKKyAgICAgICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBm
cFJlZ1QwID0gTUlQU1JlZ2lzdGVyczo6ZjQ7CisgICAgICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lz
dGVySUQgZnBSZWdUMSA9IE1JUFNSZWdpc3RlcnM6OmY2OworICAgICAgICBzdGF0aWMgY29uc3Qg
RlBSZWdpc3RlcklEIGZwUmVnVDIgPSBNSVBTUmVnaXN0ZXJzOjpmODsKICNlbHNlCiAgICAgI2Vy
cm9yICJKSVQgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtLiIKICNlbmRpZgpAQCAtNjE3
LDcgKzYzOSwzMCBAQAogICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0TWV0aG9k
Q2hlY2tQcm90b09iaiA9IDEyOwogICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0
TWV0aG9kQ2hlY2tQcm90b1N0cnVjdCA9IDIwOwogICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBh
dGNoT2Zmc2V0TWV0aG9kQ2hlY2tQdXRGdW5jdGlvbiA9IDMyOworI2VsaWYgUExBVEZPUk0oTUlQ
UykKKyAgICAgICAgLy8gVGhlc2UgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIHZhbHVlIGFyZSB1c2Vk
IHRvIGVuYWJsZSBwYXRjaGluZyAtIHNlZSBjb21tZW50IG9uIG9wX3B1dF9ieV9pZC4KKyAgICAg
ICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldFB1dEJ5SWRTdHJ1Y3R1cmUgPSAxMjsKKyAg
ICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldFB1dEJ5SWRFeHRlcm5hbExvYWQgPSAz
NjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaExlbmd0aFB1dEJ5SWRFeHRlcm5hbExv
YWQgPSAxNjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldFB1dEJ5SWRQcm9w
ZXJ0eU1hcE9mZnNldCA9IDUyOworICAgICAgICAvLyBUaGVzZSBhcmNoaXRlY3R1cmUgc3BlY2lm
aWMgdmFsdWUgYXJlIHVzZWQgdG8gZW5hYmxlIHBhdGNoaW5nIC0gc2VlIGNvbW1lbnQgb24gb3Bf
Z2V0X2J5X2lkLgorICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZFN0
cnVjdHVyZSA9IDEyOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJ
ZEJyYW5jaFRvU2xvd0Nhc2UgPSAzNjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9m
ZnNldEdldEJ5SWRFeHRlcm5hbExvYWQgPSAzNjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBw
YXRjaExlbmd0aEdldEJ5SWRFeHRlcm5hbExvYWQgPSAxNjsKKyAgICAgICAgc3RhdGljIGNvbnN0
IGludCBwYXRjaE9mZnNldEdldEJ5SWRQcm9wZXJ0eU1hcE9mZnNldCA9IDUyOworICAgICAgICBz
dGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZFB1dFJlc3VsdCA9IDY4OworI2lmIEVO
QUJMRShPUENPREVfU0FNUExJTkcpCisgICAgICAgICNlcnJvciAiT1BDT0RFX1NBTVBMSU5HIGlz
IG5vdCB5ZXQgc3VwcG9ydGVkIgorI2Vsc2UKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRj
aE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwgPSA0MDsKICNlbmRpZgorICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IHBhdGNoT2Zmc2V0T3BDYWxsQ29tcGFyZVRvSnVtcCA9IDI0OworCisgICAgICAg
IHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRNZXRob2RDaGVja1Byb3RvT2JqID0gMjQ7Cisg
ICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRNZXRob2RDaGVja1Byb3RvU3RydWN0
ID0gNDQ7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRNZXRob2RDaGVja1B1
dEZ1bmN0aW9uID0gNjg7CisjZW5kaWYKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQogCiAj
aWYgUExBVEZPUk0oQVJNKSAmJiAhUExBVEZPUk1fQVJNX0FSQ0goNykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>41075</attachid>
            <date>2009-10-12 17:59:12 -0700</date>
            <delta_ts>2009-10-23 12:07:35 -0700</delta_ts>
            <desc>MIPS JIT Patch 20091012</desc>
            <filename>mips_jit20091012.diff</filename>
            <type>text/plain</type>
            <size>104457</size>
            <attacher name="Chao-ying Fu">fu</attacher>
            
              <data encoding="base64">SW5kZXg6IHd0Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHd0Zi9QbGF0Zm9ybS5oCShyZXZp
c2lvbiA0OTQ4MCkKKysrIHd0Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjUsNiAr
MjI1LDE1IEBACiAjZGVmaW5lIFdURl9QTEFURk9STV9CSUdfRU5ESUFOIDEKICNlbmRpZgogCisv
KiBQTEFURk9STShNSVBTKSAqLworLyogTm90ZTogT25seSBPMzIgQUJJIGlzIHRlc3RlZCwgc28g
d2UgZW5hYmxlIGl0IGZvciBPMzIgQUJJIGZvciBub3cuICAqLworI2lmICAgKGRlZmluZWQobWlw
cykgfHwgZGVmaW5lZChfX21pcHNfXykpICYmIGRlZmluZWQoX0FCSU8zMikKKyNkZWZpbmUgV1RG
X1BMQVRGT1JNX01JUFMgMQorI2lmIGRlZmluZWQoX19NSVBTRUJfXykKKyNkZWZpbmUgV1RGX1BM
QVRGT1JNX0JJR19FTkRJQU4gMQorI2VuZGlmCisjZW5kaWYgLyogTUlQUyAqLworCiAvKiBQTEFU
Rk9STShBUk0pICovCiAjZGVmaW5lIFBMQVRGT1JNX0FSTV9BUkNIKE4pIChQTEFURk9STShBUk0p
ICYmIEFSTV9BUkNIX1ZFUlNJT04gPj0gTikKIApAQCAtNzAwLDcgKzcwOSw3IEBACiAjaWYgIWRl
ZmluZWQoV1RGX1VTRV9KU1ZBTFVFNjQpICYmICFkZWZpbmVkKFdURl9VU0VfSlNWQUxVRTMyKSAm
JiAhZGVmaW5lZChXVEZfVVNFX0pTVkFMVUUzMl82NCkKICNpZiBQTEFURk9STShYODZfNjQpICYm
IChQTEFURk9STShEQVJXSU4pIHx8IFBMQVRGT1JNKExJTlVYKSkKICNkZWZpbmUgV1RGX1VTRV9K
U1ZBTFVFNjQgMQotI2VsaWYgUExBVEZPUk0oQVJNKSB8fCBQTEFURk9STShQUEM2NCkKKyNlbGlm
IFBMQVRGT1JNKEFSTSkgfHwgUExBVEZPUk0oUFBDNjQpIHx8IFBMQVRGT1JNKE1JUFMpCiAjZGVm
aW5lIFdURl9VU0VfSlNWQUxVRTMyIDEKICNlbGlmIFBMQVRGT1JNKFdJTl9PUykgJiYgQ09NUElM
RVIoTUlOR1cpCiAvKiBVc2luZyBKU1ZBTFVFMzJfNjQgY2F1c2VzIHBhZGRpbmcvYWxpZ25lbWVu
dCBpc3N1ZXMgZm9yIEpJVFN0dWJBcmcKQEAgLTczMSw2ICs3NDAsMTAgQEAKIC8qIFRoZSBKSVQg
aXMgdGVzdGVkICYgd29ya2luZyBvbiB4ODYgV2luZG93cyAqLwogI2VsaWYgUExBVEZPUk0oWDg2
KSAmJiBQTEFURk9STShXSU4pCiAgICAgI2RlZmluZSBFTkFCTEVfSklUIDEKKy8qIFRoZSBKSVQg
aXMgZm9yIE1JUFMuICAqLworI2VsaWYgUExBVEZPUk0oTUlQUykKKyAgICAjZGVmaW5lIEVOQUJM
RV9KSVQgMQorICAgICNkZWZpbmUgV1RGX1VTRV9KSVRfU1RVQl9BUkdVTUVOVF9WQV9MSVNUIDAK
ICNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQpCkBAIC03OTQsNyArODA3LDggQEAKICB8fCAoUExB
VEZPUk0oWDg2XzY0KSAmJiBQTEFURk9STShNQUMpKSBcCiAgLyogVW5kZXIgZGV2ZWxvcG1lbnQs
IHRlbXBvcmFyaWx5IGRpc2FibGVkIHVudGlsIDE2TWIgbGluayByYW5nZSBsaW1pdCBpbiBhc3Nl
bWJsZXIgaXMgZml4ZWQuICovIFwKICB8fCAoUExBVEZPUk0oQVJNX1RIVU1CMikgJiYgUExBVEZP
Uk0oSVBIT05FKSAmJiAwKSBcCi0gfHwgKFBMQVRGT1JNKFg4NikgJiYgUExBVEZPUk0oV0lOKSkK
KyB8fCAoUExBVEZPUk0oWDg2KSAmJiBQTEFURk9STShXSU4pKSBcCisgfHwgUExBVEZPUk0oTUlQ
UykKICNkZWZpbmUgRU5BQkxFX1lBUlIgMQogI2RlZmluZSBFTkFCTEVfWUFSUl9KSVQgMQogI2Vu
ZGlmCkluZGV4OiB5YXJyL1JlZ2V4SklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB5YXJyL1JlZ2V4SklU
LmNwcAkocmV2aXNpb24gNDk0ODApCisrKyB5YXJyL1JlZ2V4SklULmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTQsNiArNTQsMTYgQEAKICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdUMSA9
IEFSTVJlZ2lzdGVyczo6cjY7CiAKICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZXR1cm5S
ZWdpc3RlciA9IEFSTVJlZ2lzdGVyczo6cjA7CisjZWxpZiBQTEFURk9STShNSVBTKQorICAgIHN0
YXRpYyBjb25zdCBSZWdpc3RlcklEIGlucHV0ID0gTUlQU1JlZ2lzdGVyczo6YTA7CisgICAgc3Rh
dGljIGNvbnN0IFJlZ2lzdGVySUQgaW5kZXggPSBNSVBTUmVnaXN0ZXJzOjphMTsKKyAgICBzdGF0
aWMgY29uc3QgUmVnaXN0ZXJJRCBsZW5ndGggPSBNSVBTUmVnaXN0ZXJzOjphMjsKKyAgICBzdGF0
aWMgY29uc3QgUmVnaXN0ZXJJRCBvdXRwdXQgPSBNSVBTUmVnaXN0ZXJzOjphMzsKKworICAgIHN0
YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1QwID0gTUlQU1JlZ2lzdGVyczo6dDQ7CisgICAgc3Rh
dGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnVDEgPSBNSVBTUmVnaXN0ZXJzOjp0NTsKKworICAgIHN0
YXRpYyBjb25zdCBSZWdpc3RlcklEIHJldHVyblJlZ2lzdGVyID0gTUlQU1JlZ2lzdGVyczo6djA7
CiAjZWxpZiBQTEFURk9STShYODYpCiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgaW5wdXQg
PSBYODZSZWdpc3RlcnM6OmVheDsKICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBpbmRleCA9
IFg4NlJlZ2lzdGVyczo6ZWR4OwpAQCAtMTMxNiw2ICsxMzI2LDggQEAKICAgICAgICAgcHVzaChB
Uk1SZWdpc3RlcnM6OnI1KTsKICAgICAgICAgcHVzaChBUk1SZWdpc3RlcnM6OnI2KTsKICAgICAg
ICAgbW92ZShBUk1SZWdpc3RlcnM6OnIzLCBvdXRwdXQpOworI2VsaWYgUExBVEZPUk0oTUlQUykK
KyAgICAgICAgLy8gRG8gbm90aGluZy4KICNlbmRpZgogICAgIH0KIApAQCAtMTMzMyw2ICsxMzQ1
LDggQEAKICAgICAgICAgcG9wKEFSTVJlZ2lzdGVyczo6cjYpOwogICAgICAgICBwb3AoQVJNUmVn
aXN0ZXJzOjpyNSk7CiAgICAgICAgIHBvcChBUk1SZWdpc3RlcnM6OnI0KTsKKyNlbGlmIFBMQVRG
T1JNKE1JUFMpCisgICAgICAgIC8vIERvIG5vdGhpbmcKICNlbmRpZgogICAgICAgICByZXQoKTsK
ICAgICB9CkluZGV4OiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBh
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gNDk0ODApCisrKyBhc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsMTAgQEAKICNpbmNs
dWRlICJNYWNyb0Fzc2VtYmxlckFSTS5oIgogbmFtZXNwYWNlIEpTQyB7IHR5cGVkZWYgTWFjcm9B
c3NlbWJsZXJBUk0gTWFjcm9Bc3NlbWJsZXJCYXNlOyB9OwogCisjZWxpZiBQTEFURk9STShNSVBT
KQorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyTUlQUy5oIgorbmFtZXNwYWNlIEpTQyB7IHR5cGVk
ZWYgTWFjcm9Bc3NlbWJsZXJNSVBTIE1hY3JvQXNzZW1ibGVyQmFzZTsgfTsKKwogI2VsaWYgUExB
VEZPUk0oWDg2KQogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyWDg2LmgiCiBuYW1lc3BhY2UgSlND
IHsgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlclg4NiBNYWNyb0Fzc2VtYmxlckJhc2U7IH07CkluZGV4
OiBhc3NlbWJsZXIvTUlQU0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGFzc2VtYmxlci9NSVBT
QXNzZW1ibGVyLmgJKHJldmlzaW9uIDApCisrKyBhc3NlbWJsZXIvTUlQU0Fzc2VtYmxlci5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBN
SVBTIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwOSBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIE1JUFMgVEVDSE5PTE9H
SUVTLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgTUlQUyBURUNITk9M
T0dJRVMsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIE1JUFNBc3NlbWJsZXJfaAorI2RlZmluZSBNSVBTQXNzZW1ibGVy
X2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorI2luY2x1ZGUgPHd0Zi9TZWdtZW50ZWRW
ZWN0b3IuaD4KKworI2lmIEVOQUJMRShBU1NFTUJMRVIpICYmIFBMQVRGT1JNKE1JUFMpCisKKyNp
bmNsdWRlICJBc3NlbWJsZXJCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgor
CituYW1lc3BhY2UgSlNDIHsKKwordHlwZWRlZiB1aW50MzJfdCBNSVBTV29yZDsKKworbmFtZXNw
YWNlIE1JUFNSZWdpc3RlcnMgeworICAgIHR5cGVkZWYgZW51bSB7CisgICAgICAgIHIwID0gMCwK
KyAgICAgICAgcjEsCisgICAgICAgIHIyLAorICAgICAgICByMywKKyAgICAgICAgcjQsCisgICAg
ICAgIHI1LAorICAgICAgICByNiwKKyAgICAgICAgcjcsCisgICAgICAgIHI4LAorICAgICAgICBy
OSwKKyAgICAgICAgcjEwLAorICAgICAgICByMTEsCisgICAgICAgIHIxMiwKKyAgICAgICAgcjEz
LAorICAgICAgICByMTQsCisgICAgICAgIHIxNSwKKyAgICAgICAgcjE2LAorICAgICAgICByMTcs
CisgICAgICAgIHIxOCwKKyAgICAgICAgcjE5LAorICAgICAgICByMjAsCisgICAgICAgIHIyMSwK
KyAgICAgICAgcjIyLAorICAgICAgICByMjMsCisgICAgICAgIHIyNCwKKyAgICAgICAgcjI1LAor
ICAgICAgICByMjYsCisgICAgICAgIHIyNywKKyAgICAgICAgcjI4LAorICAgICAgICByMjksCisg
ICAgICAgIHIzMCwKKyAgICAgICAgcjMxLAorICAgICAgICB6ZXJvID0gcjAsCisgICAgICAgIGF0
ID0gcjEsCisgICAgICAgIHYwID0gcjIsCisgICAgICAgIHYxID0gcjMsCisgICAgICAgIGEwID0g
cjQsCisgICAgICAgIGExID0gcjUsCisgICAgICAgIGEyID0gcjYsCisgICAgICAgIGEzID0gcjcs
CisgICAgICAgIHQwID0gcjgsCisgICAgICAgIHQxID0gcjksCisgICAgICAgIHQyID0gcjEwLAor
ICAgICAgICB0MyA9IHIxMSwKKyAgICAgICAgdDQgPSByMTIsCisgICAgICAgIHQ1ID0gcjEzLAor
ICAgICAgICB0NiA9IHIxNCwKKyAgICAgICAgdDcgPSByMTUsCisgICAgICAgIHMwID0gcjE2LAor
ICAgICAgICBzMSA9IHIxNywKKyAgICAgICAgczIgPSByMTgsCisgICAgICAgIHMzID0gcjE5LAor
ICAgICAgICBzNCA9IHIyMCwKKyAgICAgICAgczUgPSByMjEsCisgICAgICAgIHM2ID0gcjIyLAor
ICAgICAgICBzNyA9IHIyMywKKyAgICAgICAgdDggPSByMjQsCisgICAgICAgIHQ5ID0gcjI1LAor
ICAgICAgICBrMCA9IHIyNiwKKyAgICAgICAgazEgPSByMjcsCisgICAgICAgIGdwID0gcjI4LAor
ICAgICAgICBzcCA9IHIyOSwKKyAgICAgICAgZnAgPSByMzAsCisgICAgICAgIHJhID0gcjMxCisg
ICAgfSBSZWdpc3RlcklEOworCisgICAgdHlwZWRlZiBlbnVtIHsKKyAgICAgICAgZjAsCisgICAg
ICAgIGYxLAorICAgICAgICBmMiwKKyAgICAgICAgZjMsCisgICAgICAgIGY0LAorICAgICAgICBm
NSwKKyAgICAgICAgZjYsCisgICAgICAgIGY3LAorICAgICAgICBmOCwKKyAgICAgICAgZjksCisg
ICAgICAgIGYxMCwKKyAgICAgICAgZjExLAorICAgICAgICBmMTIsCisgICAgICAgIGYxMywKKyAg
ICAgICAgZjE0LAorICAgICAgICBmMTUsCisgICAgICAgIGYxNiwKKyAgICAgICAgZjE3LAorICAg
ICAgICBmMTgsCisgICAgICAgIGYxOSwKKyAgICAgICAgZjIwLAorICAgICAgICBmMjEsCisgICAg
ICAgIGYyMiwKKyAgICAgICAgZjIzLAorICAgICAgICBmMjQsCisgICAgICAgIGYyNSwKKyAgICAg
ICAgZjI2LAorICAgICAgICBmMjcsCisgICAgICAgIGYyOCwKKyAgICAgICAgZjI5LAorICAgICAg
ICBmMzAsCisgICAgICAgIGYzMQorICAgIH0gRlBSZWdpc3RlcklEOworCit9IC8vIG5hbWVzcGFj
ZSBNSVBTUmVnaXN0ZXJzCisKK2NsYXNzIE1JUFNBc3NlbWJsZXIgeworcHVibGljOgorICAgIHR5
cGVkZWYgTUlQU1JlZ2lzdGVyczo6UmVnaXN0ZXJJRCBSZWdpc3RlcklEOworICAgIHR5cGVkZWYg
TUlQU1JlZ2lzdGVyczo6RlBSZWdpc3RlcklEIEZQUmVnaXN0ZXJJRDsKKyAgICB0eXBlZGVmIFNl
Z21lbnRlZFZlY3RvcjxpbnQsIDY0PiBKdW1wczsKKworICAgIE1JUFNBc3NlbWJsZXIoKQorICAg
IHsKKyAgICB9CisKKyAgICAvLyBNSVBTIGluc3RydWN0aW9uIG9wY29kZSBmaWVsZCBwb3NpdGlv
bgorICAgIGVudW0geworICAgICAgICBPUF9TSF9SRCA9IDExLAorICAgICAgICBPUF9TSF9SVCA9
IDE2LAorICAgICAgICBPUF9TSF9SUyA9IDIxLAorICAgICAgICBPUF9TSF9TSEFNVCA9IDYsCisg
ICAgICAgIE9QX1NIX0NPREUgPSAxNiwKKyAgICAgICAgT1BfU0hfRkQgPSA2LAorICAgICAgICBP
UF9TSF9GUyA9IDExLAorICAgICAgICBPUF9TSF9GVCA9IDE2CisgICAgfTsKKworICAgIGNsYXNz
IEptcFNyYyB7CisgICAgICAgIGZyaWVuZCBjbGFzcyBNSVBTQXNzZW1ibGVyOworICAgIHB1Ymxp
YzoKKyAgICAgICAgSm1wU3JjKCkKKyAgICAgICAgICAgIDogbV9vZmZzZXQoLTEpCisgICAgICAg
IHsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgSm1wU3JjKGludCBvZmZzZXQp
CisgICAgICAgICAgICA6IG1fb2Zmc2V0KG9mZnNldCkKKyAgICAgICAgeworICAgICAgICB9CisK
KyAgICAgICAgaW50IG1fb2Zmc2V0OworICAgIH07CisKKyAgICBjbGFzcyBKbXBEc3QgeworICAg
ICAgICBmcmllbmQgY2xhc3MgTUlQU0Fzc2VtYmxlcjsKKyAgICBwdWJsaWM6CisgICAgICAgIEpt
cERzdCgpCisgICAgICAgICAgICA6IG1fb2Zmc2V0KC0xKQorICAgICAgICAgICAgLCBtX3VzZWQo
ZmFsc2UpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgaXNVc2VkKCkgY29u
c3QgeyByZXR1cm4gbV91c2VkOyB9CisgICAgICAgIHZvaWQgdXNlZCgpIHsgbV91c2VkID0gdHJ1
ZTsgfQorICAgIHByaXZhdGU6CisgICAgICAgIEptcERzdChpbnQgb2Zmc2V0KQorICAgICAgICAg
ICAgOiBtX29mZnNldChvZmZzZXQpCisgICAgICAgICAgICAsIG1fdXNlZChmYWxzZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgQVNTRVJUKG1fb2Zmc2V0ID09IG9mZnNldCk7CisgICAgICAgIH0K
KworICAgICAgICBpbnQgbV9vZmZzZXQgOiAzMTsKKyAgICAgICAgaW50IG1fdXNlZCA6IDE7Cisg
ICAgfTsKKworICAgIHZvaWQgZW1pdEluc3QoTUlQU1dvcmQgb3ApCisgICAgeworICAgICAgICB2
b2lkICpvbGRfYmFzZSA9IG1fYnVmZmVyLmRhdGEoKTsKKworICAgICAgICBtX2J1ZmZlci5wdXRJ
bnQob3ApOworCisgICAgICAgIHZvaWQgKm5ld19iYXNlID0gbV9idWZmZXIuZGF0YSgpOworICAg
ICAgICBpZiAob2xkX2Jhc2UgIT0gbmV3X2Jhc2UpIHsKKyAgICAgICAgICAgIHJlbG9jYXRlSnVt
cHMob2xkX2Jhc2UsIG5ld19iYXNlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgbm9w
KCkKKyAgICB7CisgICAgICAgIC8qIG5vcCAqLworICAgICAgICBlbWl0SW5zdCgweDAwMDAwMDAw
KTsKKyAgICB9CisKKyAgICB2b2lkIG1vdmUoUmVnaXN0ZXJJRCByZCwgUmVnaXN0ZXJJRCBycykK
KyAgICB7CisjaWYgZGVmaW5lZChfQUJJTzMyKQorICAgICAgICAvKiBhZGR1ICovCisgICAgICAg
IGVtaXRJbnN0KDB4MDAwMDAwMjEgfCAocmQgPDwgT1BfU0hfUkQpIHwgKHJzIDw8IE9QX1NIX1JT
KSk7CisjZWxzZQorICAgICAgICAvKiBkYWRkdSAqLworICAgICAgICBlbWl0SW5zdCgweDAwMDAw
MDJkIHwgKHJkIDw8IE9QX1NIX1JEKSB8IChycyA8PCBPUF9TSF9SUykpOworI2VuZGlmCisgICAg
fQorCisgICAgLyogU2V0IGFuIGltbWVkaWF0ZSB2YWx1ZSB0byBhIHJlZ2lzdGVyLiAgVGhpcyBt
YXkgZ2VuZXJhdGUgMSBvciAyCisgICAgICAgaW5zdHJ1Y3Rpb25zLiAgKi8KKyAgICB2b2lkIGxp
KFJlZ2lzdGVySUQgZGVzdCwgaW50IGltbSkKKyAgICB7CisgICAgICAgIGlmIChpbW0gPj0gLTMy
NzY4ICYmIGltbSA8PSAzMjc2NykKKyAgICAgICAgICAgIGFkZGl1KGRlc3QsIE1JUFNSZWdpc3Rl
cnM6Onplcm8sIGltbSk7CisgICAgICAgIGVsc2UgaWYgKGltbSA+PSAwICYmIGltbSA8IDY1NTM2
KQorICAgICAgICAgICAgb3JpKGRlc3QsIE1JUFNSZWdpc3RlcnM6Onplcm8sIGltbSk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgLyogbHVpICovCisgICAgICAgICAgICBsdWkoZGVzdCwg
aW1tID4+IDE2KTsKKyAgICAgICAgICAgIC8qIG9yaSAqLworICAgICAgICAgICAgaWYgKGltbSAm
IDB4ZmZmZikKKyAgICAgICAgICAgICAgICBvcmkoZGVzdCwgZGVzdCwgaW1tKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHZvaWQgbHVpKFJlZ2lzdGVySUQgcnQsIGludCBpbW0pCisgICAgewor
ICAgICAgICAvKiBsdWkgKi8KKyAgICAgICAgZW1pdEluc3QoMHgzYzAwMDAwMCB8IChydCA8PCBP
UF9TSF9SVCkgfCAoaW1tICYgMHhmZmZmKSk7CisgICAgfQorCisgICAgdm9pZCBhZGRpdShSZWdp
c3RlcklEIHJ0LCBSZWdpc3RlcklEIHJzLCBpbnQgaW1tKQorICAgIHsKKyAgICAgICAgLyogYWRk
aXUgKi8KKyAgICAgICAgZW1pdEluc3QoMHgyNDAwMDAwMCB8IChydCA8PCBPUF9TSF9SVCkgfCAo
cnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAgICAgICAgIHwgKGltbSAmIDB4ZmZmZikpOworICAg
IH0KKworICAgIHZvaWQgYWRkdShSZWdpc3RlcklEIHJkLCBSZWdpc3RlcklEIHJzLCBSZWdpc3Rl
cklEIHJ0KQorICAgIHsKKyAgICAgICAgLyogYWRkdSAqLworICAgICAgICBlbWl0SW5zdCgweDAw
MDAwMDIxIHwgKHJkIDw8IE9QX1NIX1JEKSB8IChycyA8PCBPUF9TSF9SUykKKyAgICAgICAgICAg
ICAgICAgfCAocnQgPDwgT1BfU0hfUlQpKTsKKyAgICB9CisKKyAgICB2b2lkIHN1YnUoUmVnaXN0
ZXJJRCByZCwgUmVnaXN0ZXJJRCBycywgUmVnaXN0ZXJJRCBydCkKKyAgICB7CisgICAgICAgIC8q
IHN1YnUgKi8KKyAgICAgICAgZW1pdEluc3QoMHgwMDAwMDAyMyB8IChyZCA8PCBPUF9TSF9SRCkg
fCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAgICAgICAgIHwgKHJ0IDw8IE9QX1NIX1JUKSk7
CisgICAgfQorCisgICAgdm9pZCBtdWx0KFJlZ2lzdGVySUQgcnMsIFJlZ2lzdGVySUQgcnQpCisg
ICAgeworICAgICAgICAvKiBtdWx0ICovCisgICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMTggfCAo
cnMgPDwgT1BfU0hfUlMpIHwgKHJ0IDw8IE9QX1NIX1JUKSk7CisgICAgfQorCisgICAgdm9pZCBt
ZmhpKFJlZ2lzdGVySUQgcmQpCisgICAgeworICAgICAgICAvKiBtZmhpICovCisgICAgICAgIGVt
aXRJbnN0KDB4MDAwMDAwMTAgfCAocmQgPDwgT1BfU0hfUkQpKTsKKyAgICB9CisKKyAgICB2b2lk
IG1mbG8oUmVnaXN0ZXJJRCByZCkKKyAgICB7CisgICAgICAgIC8qIG1mbG8gKi8KKyAgICAgICAg
ZW1pdEluc3QoMHgwMDAwMDAxMiB8IChyZCA8PCBPUF9TSF9SRCkpOworICAgIH0KKworICAgIHZv
aWQgbXVsKFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcnMsIFJlZ2lzdGVySUQgcnQpCisgICAg
eworI2lmIF9fbWlwcyA+PSAzMgorICAgICAgICAvKiBtdWwgKi8KKyAgICAgICAgZW1pdEluc3Qo
MHg3MDAwMDAwMiB8IChyZCA8PCBPUF9TSF9SRCkgfCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAg
ICAgICAgICAgIHwgKHJ0IDw8IE9QX1NIX1JUKSk7CisjZWxzZQorICAgICAgICBtdWx0KHJzLCBy
dCk7CisgICAgICAgIG1mbG8ocmQpOworI2VuZGlmCisgICAgfQorCisgICAgdm9pZCBhbmRfaW5z
bihSZWdpc3RlcklEIHJkLCBSZWdpc3RlcklEIHJzLCBSZWdpc3RlcklEIHJ0KQorICAgIHsKKyAg
ICAgICAgLyogYW5kICovCisgICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMjQgfCAocmQgPDwgT1Bf
U0hfUkQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChydCA8PCBPUF9T
SF9SVCkpOworICAgIH0KKworICAgIHZvaWQgYW5kaShSZWdpc3RlcklEIHJ0LCBSZWdpc3RlcklE
IHJzLCBpbnQgaW1tKQorICAgIHsKKyAgICAgICAgLyogYW5kaSAqLworICAgICAgICBlbWl0SW5z
dCgweDMwMDAwMDAwIHwgKHJ0IDw8IE9QX1NIX1JUKSB8IChycyA8PCBPUF9TSF9SUykKKyAgICAg
ICAgICAgICAgICAgfCAoaW1tICYgMHhmZmZmKSk7CisgICAgfQorCisgICAgdm9pZCBub3IoUmVn
aXN0ZXJJRCByZCwgUmVnaXN0ZXJJRCBycywgUmVnaXN0ZXJJRCBydCkKKyAgICB7CisgICAgICAg
IC8qIG5vciAqLworICAgICAgICBlbWl0SW5zdCgweDAwMDAwMDI3IHwgKHJkIDw8IE9QX1NIX1JE
KSB8IChycyA8PCBPUF9TSF9SUykKKyAgICAgICAgICAgICAgICAgfCAocnQgPDwgT1BfU0hfUlQp
KTsKKyAgICB9CisKKyAgICB2b2lkIG9yX2luc24oUmVnaXN0ZXJJRCByZCwgUmVnaXN0ZXJJRCBy
cywgUmVnaXN0ZXJJRCBydCkKKyAgICB7CisgICAgICAgIC8qIG9yICovCisgICAgICAgIGVtaXRJ
bnN0KDB4MDAwMDAwMjUgfCAocmQgPDwgT1BfU0hfUkQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAg
ICAgICAgICAgICAgICB8IChydCA8PCBPUF9TSF9SVCkpOworICAgIH0KKworICAgIHZvaWQgb3Jp
KFJlZ2lzdGVySUQgcnQsIFJlZ2lzdGVySUQgcnMsIGludCBpbW0pCisgICAgeworICAgICAgICAv
KiBvcmkgKi8KKyAgICAgICAgZW1pdEluc3QoMHgzNDAwMDAwMCB8IChydCA8PCBPUF9TSF9SVCkg
fCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAgICAgICAgIHwgKGltbSAmIDB4ZmZmZikpOwor
ICAgIH0KKworICAgIHZvaWQgeG9yX2luc24oUmVnaXN0ZXJJRCByZCwgUmVnaXN0ZXJJRCBycywg
UmVnaXN0ZXJJRCBydCkKKyAgICB7CisgICAgICAgIC8qIHhvciAqLworICAgICAgICBlbWl0SW5z
dCgweDAwMDAwMDI2IHwgKHJkIDw8IE9QX1NIX1JEKSB8IChycyA8PCBPUF9TSF9SUykKKyAgICAg
ICAgICAgICAgICAgfCAocnQgPDwgT1BfU0hfUlQpKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcmko
UmVnaXN0ZXJJRCBydCwgUmVnaXN0ZXJJRCBycywgaW50IGltbSkKKyAgICB7CisgICAgICAgIC8q
IHhvcmkgKi8KKyAgICAgICAgZW1pdEluc3QoMHgzODAwMDAwMCB8IChydCA8PCBPUF9TSF9SVCkg
fCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAgICAgICAgIHwgKGltbSAmIDB4ZmZmZikpOwor
ICAgIH0KKworICAgIHZvaWQgc2x0KFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcnMsIFJlZ2lz
dGVySUQgcnQpCisgICAgeworICAgICAgICAvKiBzbHQgKi8KKyAgICAgICAgZW1pdEluc3QoMHgw
MDAwMDAyYSB8IChyZCA8PCBPUF9TSF9SRCkgfCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAg
ICAgICAgIHwgKHJ0IDw8IE9QX1NIX1JUKSk7CisgICAgfQorCisgICAgdm9pZCBzbHR1KFJlZ2lz
dGVySUQgcmQsIFJlZ2lzdGVySUQgcnMsIFJlZ2lzdGVySUQgcnQpCisgICAgeworICAgICAgICAv
KiBzbHR1ICovCisgICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMmIgfCAocmQgPDwgT1BfU0hfUkQp
IHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChydCA8PCBPUF9TSF9SVCkp
OworICAgIH0KKworICAgIHZvaWQgc2x0aXUoUmVnaXN0ZXJJRCBydCwgUmVnaXN0ZXJJRCBycywg
aW50IGltbSkKKyAgICB7CisgICAgICAgIC8qIHNsdGl1ICovCisgICAgICAgIGVtaXRJbnN0KDB4
MmMwMDAwMDAgfCAocnQgPDwgT1BfU0hfUlQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAg
ICAgICAgICB8IChpbW0gJiAweGZmZmYpKTsKKyAgICB9CisKKyAgICB2b2lkIHNsbChSZWdpc3Rl
cklEIHJkLCBSZWdpc3RlcklEIHJ0LCBpbnQgc2hhbXQpCisgICAgeworICAgICAgICAvKiBzbGwg
Ki8KKyAgICAgICAgZW1pdEluc3QoMHgwMDAwMDAwMCB8IChyZCA8PCBPUF9TSF9SRCkgfCAocnQg
PDwgT1BfU0hfUlQpCisgICAgICAgICAgICAgICAgIHwgKChzaGFtdCAmIDB4MWYpIDw8IE9QX1NI
X1NIQU1UKSk7CisgICAgfQorCisgICAgdm9pZCBzbGx2KFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVy
SUQgcnQsIGludCBycykKKyAgICB7CisgICAgICAgIC8qIHNsbHYgKi8KKyAgICAgICAgZW1pdElu
c3QoMHgwMDAwMDAwNCB8IChyZCA8PCBPUF9TSF9SRCkgfCAocnQgPDwgT1BfU0hfUlQpCisgICAg
ICAgICAgICAgICAgIHwgKHJzIDw8IE9QX1NIX1JTKSk7CisgICAgfQorCisgICAgdm9pZCBzcmEo
UmVnaXN0ZXJJRCByZCwgUmVnaXN0ZXJJRCBydCwgaW50IHNoYW10KQorICAgIHsKKyAgICAgICAg
Lyogc3JhICovCisgICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMDMgfCAocmQgPDwgT1BfU0hfUkQp
IHwgKHJ0IDw8IE9QX1NIX1JUKQorICAgICAgICAgICAgICAgICB8ICgoc2hhbXQgJiAweDFmKSA8
PCBPUF9TSF9TSEFNVCkpOworICAgIH0KKworICAgIHZvaWQgc3JhdihSZWdpc3RlcklEIHJkLCBS
ZWdpc3RlcklEIHJ0LCBSZWdpc3RlcklEIHJzKQorICAgIHsKKyAgICAgICAgLyogc3JhdiAqLwor
ICAgICAgICBlbWl0SW5zdCgweDAwMDAwMDA3IHwgKHJkIDw8IE9QX1NIX1JEKSB8IChydCA8PCBP
UF9TSF9SVCkKKyAgICAgICAgICAgICAgICAgfCAocnMgPDwgT1BfU0hfUlMpKTsKKyAgICB9CisK
KyAgICB2b2lkIGx3KFJlZ2lzdGVySUQgcnQsIFJlZ2lzdGVySUQgcnMsIGludCBvZmZzZXQpCisg
ICAgeworICAgICAgICAvKiBsdyAqLworICAgICAgICBlbWl0SW5zdCgweDhjMDAwMDAwIHwgKHJ0
IDw8IE9QX1NIX1JUKSB8IChycyA8PCBPUF9TSF9SUykKKyAgICAgICAgICAgICAgICAgfCAob2Zm
c2V0ICYgMHhmZmZmKSk7CisjaWYgX19taXBzID09IDEKKyAgICAgICAgbm9wKCk7CisjZW5kaWYK
KyAgICB9CisKKyAgICB2b2lkIGx3bChSZWdpc3RlcklEIHJ0LCBSZWdpc3RlcklEIHJzLCBpbnQg
b2Zmc2V0KQorICAgIHsKKyAgICAgICAgLyogbHdsICovCisgICAgICAgIGVtaXRJbnN0KDB4ODgw
MDAwMDAgfCAocnQgPDwgT1BfU0hfUlQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAgICAg
ICAgICB8IChvZmZzZXQgJiAweGZmZmYpKTsKKyAgICB9CisKKyAgICB2b2lkIGx3cihSZWdpc3Rl
cklEIHJ0LCBSZWdpc3RlcklEIHJzLCBpbnQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgLyogbHdy
ICovCisgICAgICAgIGVtaXRJbnN0KDB4OTgwMDAwMDAgfCAocnQgPDwgT1BfU0hfUlQpIHwgKHJz
IDw8IE9QX1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChvZmZzZXQgJiAweGZmZmYpKTsKKyAg
ICB9CisKKyAgICB2b2lkIGxodShSZWdpc3RlcklEIHJ0LCBSZWdpc3RlcklEIHJzLCBpbnQgb2Zm
c2V0KQorICAgIHsKKyAgICAgICAgLyogbGh1ICovCisgICAgICAgIGVtaXRJbnN0KDB4OTQwMDAw
MDAgfCAocnQgPDwgT1BfU0hfUlQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAgICAgICAg
ICB8IChvZmZzZXQgJiAweGZmZmYpKTsKKyNpZiBfX21pcHMgPT0gMQorICAgICAgICBub3AoKTsK
KyNlbmRpZgorICAgIH0KKworICAgIHZvaWQgc3coUmVnaXN0ZXJJRCBydCwgUmVnaXN0ZXJJRCBy
cywgaW50IG9mZnNldCkKKyAgICB7CisgICAgICAgIC8qIHN3ICovCisgICAgICAgIGVtaXRJbnN0
KDB4YWMwMDAwMDAgfCAocnQgPDwgT1BfU0hfUlQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAg
ICAgICAgICAgICB8IChvZmZzZXQgJiAweGZmZmYpKTsKKyAgICB9CisKKyAgICB2b2lkIGptcF9y
ZWdpc3RlcihSZWdpc3RlcklEIHJzKQorICAgIHsKKyAgICAgICAgLyoganIgKi8KKyAgICAgICAg
ZW1pdEluc3QoMHgwMDAwMDAwOCB8IChycyA8PCBPUF9TSF9SUykpOworICAgICAgICAvKiBub3Ag
Ki8KKyAgICAgICAgbm9wKCk7CisgICAgfQorCisgICAgdm9pZCBia3B0KCkKKyAgICB7CisgICAg
ICAgIC8qIGJyZWFrICovCisgICAgICAgIGludCB2YWx1ZSA9IDUxMjsgLyogQlJLX0JVRyAqLwor
ICAgICAgICBlbWl0SW5zdCgweDAwMDAwMDBkIHwgKCh2YWx1ZSAmIDB4M2ZmKSA8PCBPUF9TSF9D
T0RFKSk7CisgICAgfQorCisgICAgLyogTm90ZTogV2UgZG9uJ3QgcHV0IGEgbm9wIGFmdGVyIGJn
ZXogYXMgYW4gb3B0aW1pemF0aW9uLgorICAgICAgICAgICAgIFRoZSBkZWxheSBzbG90IHdpbGwg
YmUgZmlsbGVkIGxhdGVyLiAgKi8KKyAgICB2b2lkIGJnZXooUmVnaXN0ZXJJRCBycywgaW50IGlt
bSkKKyAgICB7CisgICAgICAgIC8qIGJnZXogKi8KKyAgICAgICAgZW1pdEluc3QoMHgwNDAxMDAw
MCB8IChycyA8PCBPUF9TSF9SUykgfCAoaW1tICYgMHhmZmZmKSk7CisgICAgfQorCisgICAgLyog
Tm90ZTogV2UgZG9uJ3QgcHV0IGEgbm9wIGFmdGVyIGJsdHogYXMgYW4gb3B0aW1pemF0aW9uLgor
ICAgICAgICAgICAgIFRoZSBkZWxheSBzbG90IHdpbGwgYmUgZmlsbGVkIGxhdGVyLiAgKi8KKyAg
ICB2b2lkIGJsdHooUmVnaXN0ZXJJRCBycywgaW50IGltbSkKKyAgICB7CisgICAgICAgIC8qIGJs
dHogKi8KKyAgICAgICAgZW1pdEluc3QoMHgwNDAwMDAwMCB8IChycyA8PCBPUF9TSF9SUykgfCAo
aW1tICYgMHhmZmZmKSk7CisgICAgfQorCisgICAgLyogTm90ZTogV2UgZG9uJ3QgcHV0IGEgbm9w
IGFmdGVyIGJlcXogYXMgYW4gb3B0aW1pemF0aW9uLgorICAgICAgICAgICAgIFRoZSBkZWxheSBz
bG90IHdpbGwgYmUgZmlsbGVkIGxhdGVyLiAgKi8KKyAgICB2b2lkIGJlcShSZWdpc3RlcklEIHJz
LCBSZWdpc3RlcklEIHJ0LCBpbnQgaW1tKQorICAgIHsKKyAgICAgICAgLyogYmVxICovCisgICAg
ICAgIGVtaXRJbnN0KDB4MTAwMDAwMDAgfCAocnMgPDwgT1BfU0hfUlMpIHwgKHJ0IDw8IE9QX1NI
X1JUKSB8IChpbW0gJiAweGZmZmYpKTsKKyAgICB9CisKKyAgICBKbXBTcmMgam1wKCkKKyAgICB7
CisgICAgICAgIG1fanVtcHMuYXBwZW5kKG1fYnVmZmVyLnNpemUoKSk7CisKKyAgICAgICAgLyog
YmVxICQwLCAkMCAqLworICAgICAgICBlbWl0SW5zdCgweDEwMDAwMDAwKTsKKyAgICAgICAgbm9w
KCk7CisgICAgICAgIC8qIFdlIG5lZWQgdHdvIGV4dHJhIG5vcHMgZm9yIHJlbGF4YXRpb24uICAq
LworICAgICAgICBub3AoKTsKKyAgICAgICAgbm9wKCk7CisgICAgICAgIHJldHVybiBKbXBTcmMo
bV9idWZmZXIuc2l6ZSgpKTsKKyAgICB9CisKKyAgICBKbXBTcmMgYnJhbmNoX2VxKFJlZ2lzdGVy
SUQgcnMsIFJlZ2lzdGVySUQgcnQpCisgICAgeworICAgICAgICBtX2p1bXBzLmFwcGVuZChtX2J1
ZmZlci5zaXplKCkpOworCisgICAgICAgIC8qIGJlcSAqLworICAgICAgICBlbWl0SW5zdCgweDEw
MDAwMDAwIHwgKHJzIDw8IE9QX1NIX1JTKSB8IChydCA8PCBPUF9TSF9SVCkpOworICAgICAgICBu
b3AoKTsKKyAgICAgICAgLyogV2UgbmVlZCB0d28gZXh0cmEgbm9wcyBmb3IgcmVsYXhhdGlvbi4g
ICovCisgICAgICAgIG5vcCgpOworICAgICAgICBub3AoKTsKKyAgICAgICAgcmV0dXJuIEptcFNy
YyhtX2J1ZmZlci5zaXplKCkpOworICAgIH0KKworICAgIEptcFNyYyBicmFuY2hfbmUoUmVnaXN0
ZXJJRCBycywgUmVnaXN0ZXJJRCBydCkKKyAgICB7CisgICAgICAgIG1fanVtcHMuYXBwZW5kKG1f
YnVmZmVyLnNpemUoKSk7CisKKyAgICAgICAgLyogYm5lICovCisgICAgICAgIGVtaXRJbnN0KDB4
MTQwMDAwMDAgfCAocnMgPDwgT1BfU0hfUlMpIHwgKHJ0IDw8IE9QX1NIX1JUKSk7CisgICAgICAg
IG5vcCgpOworICAgICAgICAvKiBXZSBuZWVkIHR3byBleHRyYSBub3BzIGZvciByZWxheGF0aW9u
LiAgKi8KKyAgICAgICAgbm9wKCk7CisgICAgICAgIG5vcCgpOworICAgICAgICByZXR1cm4gSm1w
U3JjKG1fYnVmZmVyLnNpemUoKSk7CisgICAgfQorCisgICAgdm9pZCBhZGRfZChGUFJlZ2lzdGVy
SUQgZmQsIEZQUmVnaXN0ZXJJRCBmcywgRlBSZWdpc3RlcklEIGZ0KQorICAgIHsKKyAgICAgICAg
LyogYWRkLmQgKi8KKyAgICAgICAgZW1pdEluc3QoMHg0NjIwMDAwMCB8IChmZCA8PCBPUF9TSF9G
RCkgfCAoZnMgPDwgT1BfU0hfRlMpCisgICAgICAgICAgICAgICAgIHwgKGZ0IDw8IE9QX1NIX0ZU
KSk7CisgICAgfQorCisgICAgdm9pZCBzdWJfZChGUFJlZ2lzdGVySUQgZmQsIEZQUmVnaXN0ZXJJ
RCBmcywgRlBSZWdpc3RlcklEIGZ0KQorICAgIHsKKyAgICAgICAgLyogc3ViLmQgKi8KKyAgICAg
ICAgZW1pdEluc3QoMHg0NjIwMDAwMSB8IChmZCA8PCBPUF9TSF9GRCkgfCAoZnMgPDwgT1BfU0hf
RlMpCisgICAgICAgICAgICAgICAgIHwgKGZ0IDw8IE9QX1NIX0ZUKSk7CisgICAgfQorCisgICAg
dm9pZCBtdWxfZChGUFJlZ2lzdGVySUQgZmQsIEZQUmVnaXN0ZXJJRCBmcywgRlBSZWdpc3RlcklE
IGZ0KQorICAgIHsKKyAgICAgICAgLyogbXVsLmQgKi8KKyAgICAgICAgZW1pdEluc3QoMHg0NjIw
MDAwMiB8IChmZCA8PCBPUF9TSF9GRCkgfCAoZnMgPDwgT1BfU0hfRlMpCisgICAgICAgICAgICAg
ICAgIHwgKGZ0IDw8IE9QX1NIX0ZUKSk7CisgICAgfQorCisgICAgdm9pZCBsd2MxKEZQUmVnaXN0
ZXJJRCBmdCwgUmVnaXN0ZXJJRCBycywgaW50IG9mZnNldCkKKyAgICB7CisgICAgICAgIC8qIGx3
YzEgKi8KKyAgICAgICAgZW1pdEluc3QoMHhjNDAwMDAwMCB8IChmdCA8PCBPUF9TSF9GVCkgfCAo
cnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAgICAgICAgIHwgKG9mZnNldCAmIDB4ZmZmZikpOwor
I2lmIF9fbWlwcyA9PSAxCisgICAgICAgIG5vcCgpOworI2VuZGlmCisgICAgfQorCisgICAgdm9p
ZCBsZGMxKEZQUmVnaXN0ZXJJRCBmdCwgUmVnaXN0ZXJJRCBycywgaW50IG9mZnNldCkKKyAgICB7
CisgICAgICAgIC8qIGxkYzEgKi8KKyAgICAgICAgZW1pdEluc3QoMHhkNDAwMDAwMCB8IChmdCA8
PCBPUF9TSF9GVCkgfCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAgICAgICAgIHwgKG9mZnNl
dCAmIDB4ZmZmZikpOworICAgIH0KKworICAgIHZvaWQgc3djMShGUFJlZ2lzdGVySUQgZnQsIFJl
Z2lzdGVySUQgcnMsIGludCBvZmZzZXQpCisgICAgeworICAgICAgICAvKiBzd2MxICovCisgICAg
ICAgIGVtaXRJbnN0KDB4ZTQwMDAwMDAgfCAoZnQgPDwgT1BfU0hfRlQpIHwgKHJzIDw8IE9QX1NI
X1JTKQorICAgICAgICAgICAgICAgICB8IChvZmZzZXQgJiAweGZmZmYpKTsKKyAgICB9CisKKyAg
ICB2b2lkIHNkYzEoRlBSZWdpc3RlcklEIGZ0LCBSZWdpc3RlcklEIHJzLCBpbnQgb2Zmc2V0KQor
ICAgIHsKKyAgICAgICAgLyogc2RjMSAqLworICAgICAgICBlbWl0SW5zdCgweGY0MDAwMDAwIHwg
KGZ0IDw8IE9QX1NIX0ZUKSB8IChycyA8PCBPUF9TSF9SUykKKyAgICAgICAgICAgICAgICAgfCAo
b2Zmc2V0ICYgMHhmZmZmKSk7CisgICAgfQorCisgICAgdm9pZCBtdGMxKFJlZ2lzdGVySUQgcnQs
IEZQUmVnaXN0ZXJJRCBmcykKKyAgICB7CisgICAgICAgIC8qIG10YzEgKi8KKyAgICAgICAgZW1p
dEluc3QoMHg0NDgwMDAwMCB8IChmcyA8PCBPUF9TSF9GUykgfCAocnQgPDwgT1BfU0hfUlQpKTsK
KyNpZiBfX21pcHMgPT0gMQorICAgICAgICBub3AoKTsKKyNlbmRpZgorICAgIH0KKworICAgIHZv
aWQgbWZjMShSZWdpc3RlcklEIHJ0LCBGUFJlZ2lzdGVySUQgZnMpCisgICAgeworICAgICAgICAv
KiBtZmMxICovCisgICAgICAgIGVtaXRJbnN0KDB4NDQwMDAwMDAgfCAoZnMgPDwgT1BfU0hfRlMp
IHwgKHJ0IDw8IE9QX1NIX1JUKSk7CisjaWYgX19taXBzID09IDEKKyAgICAgICAgbm9wKCk7Cisj
ZW5kaWYKKyAgICB9CisKKyAgICB2b2lkIHRydW5jX3dfZChGUFJlZ2lzdGVySUQgZmQsIEZQUmVn
aXN0ZXJJRCBmcykKKyAgICB7CisgICAgICAgIC8qIHRydW5jLncuZCAqLworICAgICAgICBlbWl0
SW5zdCgweDQ2MjAwMDBkIHwgKGZkIDw8IE9QX1NIX0ZEKSB8IChmcyA8PCBPUF9TSF9GUykpOwor
ICAgIH0KKworICAgIHZvaWQgY3Z0X2RfdyhGUFJlZ2lzdGVySUQgZmQsIEZQUmVnaXN0ZXJJRCBm
cykKKyAgICB7CisgICAgICAgIC8qIGN2dC5kLncgKi8KKyAgICAgICAgZW1pdEluc3QoMHg0Njgw
MDAyMSB8IChmZCA8PCBPUF9TSF9GRCkgfCAoZnMgPDwgT1BfU0hfRlMpKTsKKyAgICB9CisKKyAg
ICB2b2lkIGNfZXFfZChGUFJlZ2lzdGVySUQgZnMsIEZQUmVnaXN0ZXJJRCBmdCkKKyAgICB7Cisg
ICAgICAgIC8qIGMuZXEuZCAqLworICAgICAgICBlbWl0SW5zdCgweDQ2MjAwMDMyIHwgKGZzIDw8
IE9QX1NIX0ZTKSB8IChmdCA8PCBPUF9TSF9GVCkpOworI2lmIF9fbWlwcyA9PSAxCisgICAgICAg
IG5vcCgpOworI2VuZGlmCisgICAgfQorCisgICAgdm9pZCBjX2x0X2QoRlBSZWdpc3RlcklEIGZz
LCBGUFJlZ2lzdGVySUQgZnQpCisgICAgeworICAgICAgICAvKiBjLmx0LmQgKi8KKyAgICAgICAg
ZW1pdEluc3QoMHg0NjIwMDAzYyB8IChmcyA8PCBPUF9TSF9GUykgfCAoZnQgPDwgT1BfU0hfRlQp
KTsKKyNpZiBfX21pcHMgPT0gMQorICAgICAgICBub3AoKTsKKyNlbmRpZgorICAgIH0KKworICAg
IHZvaWQgY19sZV9kKEZQUmVnaXN0ZXJJRCBmcywgRlBSZWdpc3RlcklEIGZ0KQorICAgIHsKKyAg
ICAgICAgLyogYy5sdC5kICovCisgICAgICAgIGVtaXRJbnN0KDB4NDYyMDAwM2UgfCAoZnMgPDwg
T1BfU0hfRlMpIHwgKGZ0IDw8IE9QX1NIX0ZUKSk7CisjaWYgX19taXBzID09IDEKKyAgICAgICAg
bm9wKCk7CisjZW5kaWYKKyAgICB9CisKKyAgICBKbXBTcmMgYmMxdCgpCisgICAgeworICAgICAg
ICAvKiBiYzF0ICovCisgICAgICAgIGVtaXRJbnN0KDB4NDUwMTAwMDApOworICAgICAgICBub3Ao
KTsKKyAgICAgICAgLyogV2UgbmVlZCB0d28gZXh0cmEgbm9wcyBmb3IgcmVsYXhhdGlvbi4gICov
CisgICAgICAgIG5vcCgpOworICAgICAgICBub3AoKTsKKyAgICAgICAgcmV0dXJuIEptcFNyYyht
X2J1ZmZlci5zaXplKCkpOworICAgIH0KKworICAgIEptcFNyYyBmYXJfZnVuY3Rpb25fY2FsbCgp
CisgICAgeworICAgICAgICBsdWkoTUlQU1JlZ2lzdGVyczo6dDksIDApOworICAgICAgICBvcmko
TUlQU1JlZ2lzdGVyczo6dDksIE1JUFNSZWdpc3RlcnM6OnQ5LCAwKTsKKyAgICAgICAgLyogamFs
ciAqLworICAgICAgICBlbWl0SW5zdCgweDAwMDBmODA5IHwgKE1JUFNSZWdpc3RlcnM6OnQ5IDw8
IE9QX1NIX1JTKSk7CisgICAgICAgIG5vcCgpOworICAgICAgICByZXR1cm4gSm1wU3JjKG1fYnVm
ZmVyLnNpemUoKSk7CisgICAgfQorCisgICAgSm1wU3JjIGZ1bmN0aW9uX2NhbGwoKQorICAgIHsK
KyAgICAgICAgLyogamFsICovCisgICAgICAgIGVtaXRJbnN0KDB4MGMwMDAwMDApOworICAgICAg
ICBub3AoKTsKKyAgICAgICAgcmV0dXJuIEptcFNyYyhtX2J1ZmZlci5zaXplKCkpOworICAgIH0K
KworICAgIEptcFNyYyBmdW5jdGlvbl9jYWxsX3ZpYV9yZWdpc3RlcihSZWdpc3RlcklEIHJzKQor
ICAgIHsKKyAgICAgICAgLyogamFsciAqLworICAgICAgICBlbWl0SW5zdCgweDAwMDBmODA5IHwg
KHJzIDw8IE9QX1NIX1JTKSk7CisgICAgICAgIG5vcCgpOworICAgICAgICByZXR1cm4gSm1wU3Jj
KG1fYnVmZmVyLnNpemUoKSk7CisgICAgfQorCisgICAgSm1wU3JjIHRhaWxfZnVuY3Rpb25fY2Fs
bF92aWFfcmVnaXN0ZXIoUmVnaXN0ZXJJRCBycykKKyAgICB7CisgICAgICAgIC8qIGpyICovCisg
ICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMDggfCAocnMgPDwgT1BfU0hfUlMpKTsKKyAgICAgICAg
bm9wKCk7CisgICAgICAgIHJldHVybiBKbXBTcmMobV9idWZmZXIuc2l6ZSgpKTsKKyAgICB9CisK
KyAgICAvLyBHZW5lcmFsIGhlbHBlcnMKKworICAgIEptcERzdCBsYWJlbCgpCisgICAgeworICAg
ICAgICByZXR1cm4gSm1wRHN0KG1fYnVmZmVyLnNpemUoKSk7CisgICAgfQorCisgICAgSm1wRHN0
IGFsaWduKGludCBhbGlnbm1lbnQpCisgICAgeworICAgICAgICB3aGlsZSAoIW1fYnVmZmVyLmlz
QWxpZ25lZChhbGlnbm1lbnQpKQorICAgICAgICAgICAgYmtwdCgpOworCisgICAgICAgIHJldHVy
biBsYWJlbCgpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkKiBnZXRSZWxvY2F0ZWRBZGRyZXNz
KHZvaWQqIGNvZGUsIEptcFNyYyBqdW1wKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGp1bXAubV9v
ZmZzZXQgIT0gLTEpOworICAgICAgICB2b2lkICpiID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGNvZGUpKSArIGp1bXAubV9vZmZzZXQpOworICAg
ICAgICByZXR1cm4gYjsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCogZ2V0UmVsb2NhdGVkQWRk
cmVzcyh2b2lkKiBjb2RlLCBKbXBEc3QgbGFiZWwpCisgICAgeworICAgICAgICB2b2lkICpiID0g
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGNvZGUp
KSArIGxhYmVsLm1fb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIGI7CisgICAgfQorCisgICAgc3Rh
dGljIGludCBnZXREaWZmZXJlbmNlQmV0d2VlbkxhYmVscyhKbXBEc3QgZnJvbSwgSm1wRHN0IHRv
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvLm1fb2Zmc2V0IC0gZnJvbS5tX29mZnNldDsKKyAg
ICB9CisKKyAgICBzdGF0aWMgaW50IGdldERpZmZlcmVuY2VCZXR3ZWVuTGFiZWxzKEptcERzdCBm
cm9tLCBKbXBTcmMgdG8pCisgICAgeworICAgICAgICByZXR1cm4gdG8ubV9vZmZzZXQgLSBmcm9t
Lm1fb2Zmc2V0OworICAgIH0KKworICAgIHN0YXRpYyBpbnQgZ2V0RGlmZmVyZW5jZUJldHdlZW5M
YWJlbHMoSm1wU3JjIGZyb20sIEptcERzdCB0bykKKyAgICB7CisgICAgICAgIHJldHVybiB0by5t
X29mZnNldCAtIGZyb20ubV9vZmZzZXQ7CisgICAgfQorCisgICAgLy8gQXNzZW1ibGVyIGFkbWlu
IG1ldGhvZHM6CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9idWZmZXIuc2l6ZSgpOworICAgIH0KKworICAgIHZvaWQqIGV4ZWN1dGFibGVDb3B5KEV4
ZWN1dGFibGVQb29sKiBhbGxvY2F0b3IpCisgICAgeworICAgICAgICBpbnQgc2l6ZSA9IG1fYnVm
ZmVyLnNpemUoKTsKKyAgICAgICAgaWYgKCFzaXplKQorICAgICAgICAgICAgcmV0dXJuIDA7CisK
KyAgICAgICAgdm9pZCogcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvYyhzaXplKTsKKyAgICAgICAg
aWYgKCFyZXN1bHQpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBFeGVjdXRhYmxl
QWxsb2NhdG9yOjptYWtlV3JpdGFibGUocmVzdWx0LCBzaXplKTsKKyAgICAgICAgbWVtY3B5KHJl
c3VsdCwgbV9idWZmZXIuZGF0YSgpLCBtX2J1ZmZlci5zaXplKCkpOworICAgICAgICByZWxvY2F0
ZUp1bXBzKG1fYnVmZmVyLmRhdGEoKSwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisKKyAgICBzdGF0aWMgdW5zaWduZWQgZ2V0Q2FsbFJldHVybk9mZnNldChKbXBTcmMg
Y2FsbCkKKyAgICB7CisgICAgICAgIC8vIFRoZSByZXR1cm4gYWRkcmVzcyBpcyBhZnRlciBhIGNh
bGwgYW5kIGEgZGVsYXkgc2xvdCBpbnN0cnVjdGlvbgorICAgICAgICByZXR1cm4gY2FsbC5tX29m
ZnNldDsKKyAgICB9CisKKyAgICAvLyBMaW5raW5nICYgcGF0Y2hpbmc6CisgICAgLy8KKyAgICAv
LyAnbGluaycgYW5kICdwYXRjaCcgbWV0aG9kcyBhcmUgZm9yIHVzZSBvbiB1bnByb3RlY3RlZCBj
b2RlIC0gc3VjaCBhcyB0aGUgY29kZQorICAgIC8vIHdpdGhpbiB0aGUgQXNzZW1ibGVyQnVmZmVy
LCBhbmQgY29kZSBiZWluZyBwYXRjaGVkIGJ5IHRoZSBwYXRjaCBidWZmZXIuICBPbmNlCisgICAg
Ly8gY29kZSBoYXMgYmVlbiBmaW5hbGl6ZWQgaXQgaXMgKHBsYXRmb3JtIHN1cHBvcnQgcGVybWl0
dGluZykgd2l0aGluIGEgbm9uLQorICAgIC8vIHdyaXRhYmxlIHJlZ2lvbiBvZiBtZW1vcnk7IHRv
IG1vZGlmeSB0aGUgY29kZSBpbiBhbiBleGVjdXRlLW9ubHkgZXhlY3VhYmxlCisgICAgLy8gcG9v
bCB0aGUgJ3JlcGF0Y2gnIGFuZCAncmVsaW5rJyBtZXRob2RzIHNob3VsZCBiZSB1c2VkLgorCisg
ICAgdm9pZCBsaW5rSnVtcChKbXBTcmMgZnJvbSwgSm1wRHN0IHRvKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKHRvLm1fb2Zmc2V0ICE9IC0xKTsKKyAgICAgICAgQVNTRVJUKGZyb20ubV9vZmZzZXQg
IT0gLTEpOworICAgICAgICBNSVBTV29yZCAqaW5zbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8TUlQU1dv
cmQqPihyZWludGVycHJldF9jYXN0PGludHB0cl90PihtX2J1ZmZlci5kYXRhKCkpICsgZnJvbS5t
X29mZnNldCk7CisgICAgICAgIE1JUFNXb3JkICp0b19wb3MgPSByZWludGVycHJldF9jYXN0PE1J
UFNXb3JkKj4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obV9idWZmZXIuZGF0YSgpKSArIHRv
Lm1fb2Zmc2V0KTsKKworICAgICAgICBBU1NFUlQgKCgqKGluc24gLSAxKSkgPT0gMCAmJiAoKCoo
aW5zbiAtIDIpKSA9PSAwIHx8ICgoKihpbnNuIC0gMikpICYgMHhmYzAwMDAwMCkgPT0gMHgwODAw
MDAwMCkgJiYgKCooaW5zbiAtIDMpKSA9PSAwKTsKKyAgICAgICAgaW5zbiA9IGluc24gLSA0Owor
ICAgICAgICBsaW5rV2l0aE9mZnNldChpbnNuLCB0b19wb3MpOworICAgIH0KKworICAgIHN0YXRp
YyB2b2lkIGxpbmtKdW1wKHZvaWQqIGNvZGUsIEptcFNyYyBmcm9tLCB2b2lkKiB0bykKKyAgICB7
CisgICAgICAgIEFTU0VSVChmcm9tLm1fb2Zmc2V0ICE9IC0xKTsKKyAgICAgICAgTUlQU1dvcmQg
Kmluc24gPSByZWludGVycHJldF9jYXN0PE1JUFNXb3JkKj4ocmVpbnRlcnByZXRfY2FzdDxpbnRw
dHJfdD4oY29kZSkgKyBmcm9tLm1fb2Zmc2V0KTsKKworICAgICAgICBBU1NFUlQgKCgqKGluc24g
LSAxKSkgPT0gMCAmJiAoKCooaW5zbiAtIDIpKSA9PSAwIHx8ICgoKihpbnNuIC0gMikpICYgMHhm
YzAwMDAwMCkgPT0gMHgwODAwMDAwMCkgJiYgKCooaW5zbiAtIDMpKSA9PSAwKTsKKyAgICAgICAg
aW5zbiA9IGluc24gLSA0OworICAgICAgICBsaW5rV2l0aE9mZnNldChpbnNuLCB0byk7CisgICAg
fQorCisgICAgc3RhdGljIHZvaWQgbGlua0NhbGwodm9pZCogY29kZSwgSm1wU3JjIGZyb20sIHZv
aWQqIHRvKQorICAgIHsKKyAgICAgICAgTUlQU1dvcmQgKmluc24gPSByZWludGVycHJldF9jYXN0
PE1JUFNXb3JkKj4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oY29kZSkgKyBmcm9tLm1fb2Zm
c2V0KTsKKyAgICAgICAgbGlua0NhbGxJbnRlcm5hbChpbnNuLCB0byk7CisgICAgfQorCisgICAg
c3RhdGljIHZvaWQgbGlua1BvaW50ZXIodm9pZCogY29kZSwgSm1wRHN0IGZyb20sIHZvaWQqIHRv
KQorICAgIHsKKyAgICAgICAgTUlQU1dvcmQgKmluc24gPSByZWludGVycHJldF9jYXN0PE1JUFNX
b3JkKj4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oY29kZSkgKyBmcm9tLm1fb2Zmc2V0KTsK
KyAgICAgICAgQVNTRVJUKCgoKmluc24pICYgMHhmZmUwMDAwMCkgPT0gMHgzYzAwMDAwMCk7IC8v
IGx1aQorICAgICAgICAqaW5zbiA9ICgoKmluc24pICYgMHhmZmZmMDAwMCkgfCAoKHJlaW50ZXJw
cmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSA+PiAxNikgJiAweGZmZmYpOworICAgICAgICBpbnNuKys7
CisgICAgICAgIEFTU0VSVCgoKCppbnNuKSAmIDB4ZmMwMDAwMDApID09IDB4MzQwMDAwMDApOyAv
LyBvcmkKKyAgICAgICAgKmluc24gPSAoKCppbnNuKSAmIDB4ZmZmZjAwMDApIHwgKHJlaW50ZXJw
cmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAmIDB4ZmZmZik7CisgICAgfQorCisgICAgc3RhdGljIHZv
aWQgcmVsaW5rSnVtcCh2b2lkKiBmcm9tLCB2b2lkKiB0bykKKyAgICB7CisgICAgICAgIE1JUFNX
b3JkICppbnNuID0gcmVpbnRlcnByZXRfY2FzdDxNSVBTV29yZCo+KGZyb20pOworCisgICAgICAg
IEFTU0VSVCAoKCooaW5zbiAtIDEpKSA9PSAwICYmICgoKihpbnNuIC0gMikpID09IDAgfHwgKCgq
KGluc24gLSAyKSkgJiAweGZjMDAwMDAwKSA9PSAweDA4MDAwMDAwKSAmJiAoKihpbnNuIC0gMykp
ID09IDAgKTsKKyAgICAgICAgaW5zbiA9IGluc24gLSA0OworICAgICAgICBpbnQgZmx1c2hfc2l6
ZSA9IGxpbmtXaXRoT2Zmc2V0KGluc24sIHRvKTsKKworICAgICAgICBFeGVjdXRhYmxlQWxsb2Nh
dG9yOjpjYWNoZUZsdXNoKGluc24sIGZsdXNoX3NpemUpOworICAgIH0KKworICAgIHN0YXRpYyB2
b2lkIHJlbGlua0NhbGwodm9pZCogZnJvbSwgdm9pZCogdG8pCisgICAgeworICAgICAgICB2b2lk
ICpzdGFydCA9IGxpbmtDYWxsSW50ZXJuYWwoZnJvbSwgdG8pOworICAgICAgICBpbnQgc2l6ZSA9
IHNpemVvZihNSVBTV29yZCk7CisgICAgICAgIGludCBkaWZmID0gKHJlaW50ZXJwcmV0X2Nhc3Q8
aW50cHRyX3Q+KGZyb20pCisgICAgICAgICAgICAgICAgICAgIC0gcmVpbnRlcnByZXRfY2FzdDxp
bnRwdHJfdD4oc3RhcnQpKTsKKyAgICAgICAgaWYgKGRpZmYgPT0gMTYpIC8vIFdlIG1vZGlmeSB0
d28gaW5zdHJ1Y3Rpb25zIGx1aSArIG9yaS4KKyAgICAgICAgICBzaXplID0gMiAqIHNpemVvZihN
SVBTV29yZCk7CisKKyAgICAgICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6Y2FjaGVGbHVzaChzdGFy
dCwgc2l6ZSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVwYXRjaEludDMyKHZvaWQqIGZy
b20sIGludDMyX3QgdG8pCisgICAgeworICAgICAgICBNSVBTV29yZCAqaW5zbiA9IHJlaW50ZXJw
cmV0X2Nhc3Q8TUlQU1dvcmQqPihmcm9tKTsKKyAgICAgICAgQVNTRVJUKCgoKmluc24pICYgMHhm
ZmUwMDAwMCkgPT0gMHgzYzAwMDAwMCk7IC8vIGx1aQorICAgICAgICAqaW5zbiA9ICgoKmluc24p
ICYgMHhmZmZmMDAwMCkgfCAoKHRvID4+IDE2KSAmIDB4ZmZmZik7CisgICAgICAgIGluc24rKzsK
KyAgICAgICAgQVNTRVJUKCgoKmluc24pICYgMHhmYzAwMDAwMCkgPT0gMHgzNDAwMDAwMCk7IC8v
IG9yaQorICAgICAgICAqaW5zbiA9ICgoKmluc24pICYgMHhmZmZmMDAwMCkgfCAodG8gJiAweGZm
ZmYpOworICAgICAgICBpbnNuLS07CisgICAgICAgIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmNhY2hl
Rmx1c2goaW5zbiwgMiAqIHNpemVvZihNSVBTV29yZCkpOworICAgIH0KKworICAgIHN0YXRpYyB2
b2lkIHJlcGF0Y2hQb2ludGVyKHZvaWQqIGZyb20sIHZvaWQqIHRvKQorICAgIHsKKyAgICAgICAg
cmVwYXRjaEludDMyKGZyb20sIHJlaW50ZXJwcmV0X2Nhc3Q8aW50MzJfdD4odG8pKTsKKyAgICB9
CisKKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoTG9hZFB0clRvTEVBKHZvaWQqIGZyb20pCisgICAg
eworICAgICAgICBNSVBTV29yZCAqaW5zbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8TUlQU1dvcmQqPihm
cm9tKTsKKyAgICAgICAgaW5zbiA9IGluc24gKyAzOworICAgICAgICBBU1NFUlQgKCgoKmluc24p
ICYgMHhmYzAwMDAwMCkgPT0gMHg4YzAwMDAwMCk7IC8vIGx3CisgICAgICAgIC8qIGx3IC0+IGFk
ZGl1ICovCisgICAgICAgICppbnNuID0gMHgyNDAwMDAwMCB8ICgoKmluc24pICYgMHgwM2ZmZmZm
ZiApOworCisgICAgICAgIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmNhY2hlRmx1c2goaW5zbiwgc2l6
ZW9mKE1JUFNXb3JkKSk7CisgICAgfQorCitwcml2YXRlOgorCisgICAgLyogVXBkYXRlIGVhY2gg
anVtcCBpbiB0aGUgYnVmZmVyIG9mIG5ld19iYXNlLiAgKi8KKyAgICB2b2lkIHJlbG9jYXRlSnVt
cHModm9pZCAqb2xkX2Jhc2UsIHZvaWQgKm5ld19iYXNlKQorICAgIHsKKyAgICAgICAgLy8gQ2hl
Y2sgZWFjaCBqdW1wCisgICAgICAgIGZvcihKdW1wczo6SXRlcmF0b3IgaXRlciA9IG1fanVtcHMu
YmVnaW4oKTsgaXRlciAhPSBtX2p1bXBzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgICAgIGlu
dCBwb3MgPSAoKml0ZXIpOworICAgICAgICAgICAgTUlQU1dvcmQgKmluc24gPSByZWludGVycHJl
dF9jYXN0PE1JUFNXb3JkKj4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obmV3X2Jhc2UpICsg
cG9zKTsKKyAgICAgICAgICAgIGluc24gPSBpbnNuICsgMjsKKyAgICAgICAgICAgIC8vIE5lZWQg
dG8gbWFrZSBzdXJlIHdlIGhhdmUgMyB2YWxpZCBpbnN0cnVjdGlvbnMgKDEyIGJ5dGVzKSBhZnRl
ciBwb3MKKyAgICAgICAgICAgIGlmKChwb3MgPCBtX2J1ZmZlci5zaXplKCkgLSAxMikgJiYgKCgo
Kmluc24pICYgMHhmYzAwMDAwMCkgPT0gMHgwODAwMDAwMCkpIHsKKyAgICAgICAgICAgICAgICBp
bnQgb2Zmc2V0ID0gKCppbnNuKSAmIDB4MDNmZmZmZmY7CisgICAgICAgICAgICAgICAgaW50IG9s
ZF9pbnNuX2FkZHJlc3MgPSAoaW50KWluc24gLSAoaW50KW5ld19iYXNlICsgKGludClvbGRfYmFz
ZTsKKyAgICAgICAgICAgICAgICBpbnQgdG9wX2ZvdXJfYml0cyA9IChvbGRfaW5zbl9hZGRyZXNz
ICsgNCkgPj4gMjg7CisgICAgICAgICAgICAgICAgaW50IG9sZF90YXJnZXRfYWRkcmVzcyA9ICh0
b3BfZm91cl9iaXRzIDw8IDI4KSB8IChvZmZzZXQgPDwgMik7CisgICAgICAgICAgICAgICAgaW50
IG5ld190YXJnZXRfYWRkcmVzcyA9IG9sZF90YXJnZXRfYWRkcmVzcyAtIChpbnQpb2xkX2Jhc2Ug
KyAoaW50KW5ld19iYXNlOworICAgICAgICAgICAgICAgIGludCBuZXdfaW5zbl9hZGRyZXNzID0g
KGludClpbnNuOworICAgICAgICAgICAgICAgIGlmICgoKG5ld19pbnNuX2FkZHJlc3MgKyA0KSA+
PiAyOCkgIT0gKG5ld190YXJnZXRfYWRkcmVzcyA+PiAyOCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgZnByaW50ZiAoc3RkZXJyLCAiRXJyb3I6IENhbm5vdCBjcmVhdGUgTUlQUyBqdW1wIChKKSBk
dWUgdG8gdGhlIHRvcCBmb3VyIGJpdHMgYXJlIGRpZmZlcmVudC5cbiIpOworICAgICAgICAgICAg
ICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqaW5z
biA9IDB4MDgwMDAwMDAgfCAoKG5ld190YXJnZXRfYWRkcmVzcyA+PiAyKSAmIDB4M2ZmZmZmZik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGxpbmtX
aXRoT2Zmc2V0KE1JUFNXb3JkICppbnNuLCB2b2lkICp0bykKKyAgICB7CisgICAgICAgIEFTU0VS
VCgoKCgqaW5zbikgJiAweGZjMDAwMDAwKSA9PSAweDEwMDAwMDAwKSAvLyBiZXEKKyAgICAgICAg
ICAgICAgIHx8ICgoKCppbnNuKSAmIDB4ZmMwMDAwMDApID09IDB4MTQwMDAwMDApIC8vIGJuZQor
ICAgICAgICAgICAgICAgfHwgKCgoKmluc24pICYgMHhmZmZmMDAwMCkgPT0gMHg0NTAxMDAwMCkg
Ly8gYmMxdAorICAgICAgICAgICAgICAgfHwgKCgoKmluc24pICYgMHhmZmZmMDAwMCkgPT0gMHg0
NTAwMDAwMCkpOyAvLyBiYzFmCisgICAgICAgIGludCBkaWZmID0gKHJlaW50ZXJwcmV0X2Nhc3Q8
aW50cHRyX3Q+KHRvKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluc24pIC0gNCkgPj4g
MjsKKworICAgICAgICBpZiAoZGlmZiA8IC0zMjc2OCB8fCBkaWZmID4gMzI3NjcpIHsKKyAgICAg
ICAgICAgIC8qCisgICAgICAgICAgICAgICAgQ29udmVydCB0aGUgc2VxdWVuY2U6CisgICAgICAg
ICAgICAgICAgICBiZXEgJDIsICQzLCB0YXJnZXQKKyAgICAgICAgICAgICAgICAgIG5vcAorICAg
ICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgICBub3AKKworICAgICAgICAgICAg
ICAgIHRvIHRoZSBuZXcgc2VxdWVuY2U6CisgICAgICAgICAgICAgICAgICBibmUgJDIsICQzLCAx
ZgorICAgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgICBqICAgIHRhcmdldAor
ICAgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgMToKKworICAgICAgICAgICAg
ICAgIE5vdGU6IGJlcS9ibmUvYmMxdCBhcmUgY29udmVydGVkIHRvIGJuZS9iZXEvYmMxZi4KKyAg
ICAgICAgICAgICovCisKKyAgICAgICAgICAgIGlmICgoKihpbnNuICsgMikpID09IDApIHsKKyAg
ICAgICAgICAgICAgICBpZiAoKCgqaW5zbikgJiAweGZjMDAwMDAwKSA9PSAweDEwMDAwMDAwKSAg
ICAgICAvLyBiZXEKKyAgICAgICAgICAgICAgICAgICAgKmluc24gPSAoKCppbnNuKSAmIDB4MDNm
ZjAwMDApIHwgMHgxNDAwMDAwMzsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICgoKCppbnNuKSAm
IDB4ZmMwMDAwMDApID09IDB4MTQwMDAwMDApICAvLyBibmUKKyAgICAgICAgICAgICAgICAgICAg
Kmluc24gPSAoKCppbnNuKSAmIDB4MDNmZjAwMDApIHwgMHgxMDAwMDAwMzsKKyAgICAgICAgICAg
ICAgICBlbHNlIGlmICgoKCppbnNuKSAmIDB4ZmZmZjAwMDApID09IDB4NDUwMTAwMDApICAvLyBi
YzF0CisgICAgICAgICAgICAgICAgICAgICppbnNuID0gKCgqaW5zbikgJiAweDAwMDAwMDAwKSB8
IDB4NDUwMDAwMDM7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBB
U1NFUlQoMCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGluc24gPSBpbnNuICsgMjsK
KyAgICAgICAgICAgIGlmICgoKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluc24pICsgNCkg
Pj4gMjgpICE9IChyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgPj4gMjgpKSB7CisgICAg
ICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvcjogQ2Fubm90IGNyZWF0ZSBNSVBTIGp1
bXAgKEopIGR1ZSB0byB0aGUgdG9wIGZvdXIgYml0cyBhcmUgZGlmZmVyZW50LlxuIik7CisgICAg
ICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICppbnNuID0g
MHgwODAwMDAwMCB8ICgocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pID4+IDIpICYgMHgz
ZmZmZmZmKTsKKyAgICAgICAgICAgIHJldHVybiAzICogc2l6ZW9mKE1JUFNXb3JkKTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICppbnNuID0gKCgqaW5zbikgJiAweGZm
ZmYwMDAwKSB8IChkaWZmICYgMHhmZmZmKTsKKyAgICAgICAgICAgIHJldHVybiBzaXplb2YoTUlQ
U1dvcmQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHN0YXRp
YyB2b2lkICpsaW5rQ2FsbEludGVybmFsKHZvaWQgKmZyb20sIHZvaWQgKnRvKQorICAgIHsKKyAg
ICAgICAgTUlQU1dvcmQgKmluc24gPSByZWludGVycHJldF9jYXN0PE1JUFNXb3JkKj4oZnJvbSk7
CisgICAgICAgIGluc24gPSBpbnNuIC0gMjsKKyAgICAgICAgaWYoKCgqaW5zbikgJiAweGZjMDAw
MDAwKSA9PSAweDBjMDAwMDAwKSB7IC8vIEpBTAorICAgICAgICAgICAgaWYgKCgocmVpbnRlcnBy
ZXRfY2FzdDxpbnRwdHJfdD4oZnJvbSkgKyA0KSA+PiAyOCkgIT0gKHJlaW50ZXJwcmV0X2Nhc3Q8
aW50cHRyX3Q+KHRvKSA+PiAyOCkpIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBD
UkFTSCBtZWFucyB3ZSBjYW5ub3QgdHVybiB0aGUgSklUIG9uCisgICAgICAgICAgICAgICAgLy8g
YnkgZGVmYXVsdCBvbiBNSVBTLgorICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJy
b3I6IENhbm5vdCBjcmVhdGUgTUlQUyBjYWxsIChKQUwpIGR1ZSB0byB0aGUgdG9wIGZvdXIgYml0
cyBhcmUgZGlmZmVyZW50LlxuIik7CisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICppbnNuID0gKCgqaW5zbikgJiAweGZjMDAwMDAwKSB8ICgocmVp
bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pID4+IDIpICYgMHgzZmZmZmZmKTsKKyAgICAgICAg
ICAgIHJldHVybiBpbnNuOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoKCgoKmluc24pICYg
MHhmYzFmMDdmZikgPT0gMHgwMDAwMDAwOSkgIC8vIEpBTFIKKyAgICAgICAgICAgICAgICB8fCAo
KCgqaW5zbikgJiAweGZjMWZmZmZmKSA9PSAweDAwMDAwMDA4KSkgeyAgICAvLyBKUgorICAgICAg
ICAgICAgaW5zbiA9IGluc24gLSAyOworICAgICAgICAgICAgQVNTRVJUKCgoKmluc24pICYgMHhm
ZmUwMDAwMCkgPT0gMHgzYzAwMDAwMCk7IC8vIGx1aQorICAgICAgICAgICAgKmluc24gPSAoKCpp
bnNuKSAmIDB4ZmZmZjAwMDApIHwgKChyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgPj4g
MTYpICYgMHhmZmZmKTsKKyAgICAgICAgICAgIGluc24rKzsKKyAgICAgICAgICAgIEFTU0VSVCgo
KCppbnNuKSAmIDB4ZmMwMDAwMDApID09IDB4MzQwMDAwMDApOyAvLyBvcmkKKyAgICAgICAgICAg
ICppbnNuID0gKCgqaW5zbikgJiAweGZmZmYwMDAwKSB8IChyZWludGVycHJldF9jYXN0PGludHB0
cl90Pih0bykgJiAweGZmZmYpOworICAgICAgICAgICAgaW5zbi0tOworICAgICAgICAgICAgcmV0
dXJuIGluc247CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQo
MCk7CisgICAgICAgICAgICByZXR1cm4gaW5zbjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEFz
c2VtYmxlckJ1ZmZlciBtX2J1ZmZlcjsKKyAgICBKdW1wcyBtX2p1bXBzOworfTsKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoQVNTRU1CTEVSKSAmJiBQTEFURk9STShN
SVBTKQorCisjZW5kaWYgLy8gTUlQU0Fzc2VtYmxlcl9oCkluZGV4OiBhc3NlbWJsZXIvQWJzdHJh
Y3RNYWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGFzc2VtYmxlci9BYnN0cmFjdE1hY3Jv
QXNzZW1ibGVyLmgJKHJldmlzaW9uIDQ5NDgwKQorKysgYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9B
c3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTczLDcgKzE3Myw3IEBACiAgICAgc3RydWN0
IEltbTMyIHsKICAgICAgICAgZXhwbGljaXQgSW1tMzIoaW50MzJfdCB2YWx1ZSkKICAgICAgICAg
ICAgIDogbV92YWx1ZSh2YWx1ZSkKLSNpZiBQTEFURk9STShBUk0pCisjaWYgUExBVEZPUk0oQVJN
KSB8fCBQTEFURk9STShNSVBTKQogICAgICAgICAgICAgLCBtX2lzUG9pbnRlcihmYWxzZSkKICNl
bmRpZgogICAgICAgICB7CkBAIC0xODIsNyArMTgyLDcgQEAKICNpZiAhUExBVEZPUk0oWDg2XzY0
KQogICAgICAgICBleHBsaWNpdCBJbW0zMihJbW1QdHIgcHRyKQogICAgICAgICAgICAgOiBtX3Zh
bHVlKHB0ci5hc0ludHB0cigpKQotI2lmIFBMQVRGT1JNKEFSTSkKKyNpZiBQTEFURk9STShBUk0p
IHx8IFBMQVRGT1JNKE1JUFMpCiAgICAgICAgICAgICAsIG1faXNQb2ludGVyKHRydWUpCiAjZW5k
aWYKICAgICAgICAgewpAQCAtMTkwLDEzICsxOTAsMTQgQEAKICNlbmRpZgogCiAgICAgICAgIGlu
dDMyX3QgbV92YWx1ZTsKLSNpZiBQTEFURk9STShBUk0pCisjaWYgUExBVEZPUk0oQVJNKSB8fCBQ
TEFURk9STShNSVBTKQogICAgICAgICAvLyBXZSByZWx5IG9uIGJlaW5nIGFibGUgdG8gcmVnZW5l
cmF0ZSBjb2RlIHRvIHJlY292ZXIgZXhjZXB0aW9uIGhhbmRsaW5nCiAgICAgICAgIC8vIGluZm9y
bWF0aW9uLiAgU2luY2UgQVJNdjcgc3VwcG9ydHMgMTYtYml0IGltbWVkaWF0ZXMgdGhlcmUgaXMg
YSBkYW5nZXIKICAgICAgICAgLy8gdGhhdCBpZiBwb2ludGVyIHZhbHVlcyBjaGFuZ2UgdGhlIGxh
eW91dCBvZiB0aGUgZ2VuZXJhdGVkIGNvZGUgd2lsbCBjaGFuZ2UuCiAgICAgICAgIC8vIFRvIGF2
b2lkIHRoaXMgcHJvYmxlbSwgYWx3YXlzIGdlbmVyYXRlIHBvaW50ZXJzIChhbmQgdGh1cyBJbW0z
MnMgY29uc3RydWN0ZWQKICAgICAgICAgLy8gZnJvbSBJbW1QdHJzKSB3aXRoIGEgY29kZSBzZXF1
ZW5jZSB0aGF0IGlzIGFibGUgIHRvIHJlcHJlc2VudCAgYW55IHBvaW50ZXIKICAgICAgICAgLy8g
dmFsdWUgLSBkb24ndCB1c2UgYSBtb3JlIGNvbXBhY3QgZm9ybSBpbiB0aGVzZSBjYXNlcy4KKyAg
ICAgICAgLy8gU2FtZSBmb3IgTUlQUy4KICAgICAgICAgYm9vbCBtX2lzUG9pbnRlcjsKICNlbmRp
ZgogICAgIH07CkluZGV4OiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyTUlQUy5oCShyZXZpc2lvbiAwKQorKysgYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyTUlQUy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1NDEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBNSVBTIFRFQ0hOT0xPR0lFUywgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIE1JUFMgVEVDSE5PTE9HSUVTLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBNYWNyb0Fzc2VtYmxlck1JUFNf
aAorI2RlZmluZSBNYWNyb0Fzc2VtYmxlck1JUFNfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3Jt
Lmg+CisKKyNpZiBFTkFCTEUoQVNTRU1CTEVSKSAmJiBQTEFURk9STShNSVBTKQorCisjaW5jbHVk
ZSAiTUlQU0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIkFic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIE1hY3JvQXNzZW1ibGVyTUlQUyA6IHB1YmxpYyBB
YnN0cmFjdE1hY3JvQXNzZW1ibGVyPE1JUFNBc3NlbWJsZXI+IHsKK3B1YmxpYzoKKworICAgIHN0
YXRpYyBjb25zdCBTY2FsZSBTY2FsZVB0ciA9IFRpbWVzRm91cjsKKworICAgIC8vIEZvciBzdG9y
aW5nIGltbWVkaWF0ZSBudW1iZXIKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBpbW1UZW1w
UmVnaXN0ZXIgPSBNSVBTUmVnaXN0ZXJzOjp0MDsKKyAgICAvLyBGb3Igc3RvcmluZyBkYXRhIGxv
YWRlZCBmcm9tIHRoZSBtZW1vcnkKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBkYXRhVGVt
cFJlZ2lzdGVyID0gTUlQU1JlZ2lzdGVyczo6dDE7CisgICAgLy8gRm9yIHN0b3JpbmcgYWRkcmVz
cyBiYXNlCisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgYWRkclRlbXBSZWdpc3RlciA9IE1J
UFNSZWdpc3RlcnM6OnQyOworICAgIC8vIEZvciBzdG9yaW5nIGNvbXBhcmUgcmVzdWx0CisgICAg
c3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgY21wVGVtcFJlZ2lzdGVyID0gTUlQU1JlZ2lzdGVyczo6
dDM7CisKKyAgICAvLyBGUCB0ZW1wIHJlZ2lzdGVyCisgICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0
ZXJJRCBmcFRlbXBSZWdpc3RlciA9IE1JUFNSZWdpc3RlcnM6OmYxNjsKKworICAgIGVudW0gQ29u
ZGl0aW9uIHsKKyAgICAgICAgRXF1YWwsCisgICAgICAgIE5vdEVxdWFsLAorICAgICAgICBBYm92
ZSwKKyAgICAgICAgQWJvdmVPckVxdWFsLAorICAgICAgICBCZWxvdywKKyAgICAgICAgQmVsb3dP
ckVxdWFsLAorICAgICAgICBHcmVhdGVyVGhhbiwKKyAgICAgICAgR3JlYXRlclRoYW5PckVxdWFs
LAorICAgICAgICBMZXNzVGhhbiwKKyAgICAgICAgTGVzc1RoYW5PckVxdWFsLAorICAgICAgICBP
dmVyZmxvdywKKyAgICAgICAgU2lnbmVkLAorICAgICAgICBaZXJvLAorICAgICAgICBOb25aZXJv
CisgICAgfTsKKworICAgIGVudW0gRG91YmxlQ29uZGl0aW9uIHsKKyAgICAgICAgRG91YmxlRXF1
YWwsCisgICAgICAgIERvdWJsZUdyZWF0ZXJUaGFuLAorICAgICAgICBEb3VibGVHcmVhdGVyVGhh
bk9yRXF1YWwsCisgICAgICAgIERvdWJsZUxlc3NUaGFuLAorICAgICAgICBEb3VibGVMZXNzVGhh
bk9yRXF1YWwKKyAgICB9OworCisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIgPSBNSVBTUmVnaXN0ZXJzOjpzcDsKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0
ZXJJRCByZXR1cm5BZGRyZXNzUmVnaXN0ZXIgPSBNSVBTUmVnaXN0ZXJzOjpyYTsKKworICAgIC8v
IEludGVnZXIgYXJpdGhtZXRpYyBvcGVyYXRpb25zOgorICAgIC8vCisgICAgLy8gT3BlcmF0aW9u
cyBhcmUgdHlwaWNhbGx5IHR3byBvcGVyYW5kIC0gb3BlcmF0aW9uKHNvdXJjZSwgc3JjRHN0KQor
ICAgIC8vIEZvciBtYW55IG9wZXJhdGlvbnMgdGhlIHNvdXJjZSBtYXkgYmUgYW4gSW1tMzIsIHRo
ZSBzcmNEc3Qgb3BlcmFuZAorICAgIC8vIG1heSBvZnRlbiBiZSBhIG1lbW9yeSBsb2NhdGlvbiAo
ZXhwbGljdGx5IGRlc2NyaWJlZCB1c2luZyBhbiBBZGRyZXNzCisgICAgLy8gb2JqZWN0KS4KKwor
ICAgIHZvaWQgYWRkMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVk
ID0gMCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoZGVzdCwgZGVzdCwgc3JjKTsK
KyAgICB9CisKKyAgICB2b2lkIGFkZDMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0LCBpbnQg
Zml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgYWRkMzIoaW1tLCBkZXN0LCBkZXN0LCBmaXhlZCk7
CisgICAgfQorCisgICAgdm9pZCBhZGQzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjLCBSZWdp
c3RlcklEIGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBpZighaW1tLm1faXNQ
b2ludGVyICYmIGltbS5tX3ZhbHVlID49IC0zMjc2OCAmJiBpbW0ubV92YWx1ZSA8PSAzMjc2NyAm
JiBmaXhlZCA9PSAwKSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICBhZGRpdSAgICAg
ZGVzdCwgc3JjLCBpbW0KKyAgICAgICAgICAgICovCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5h
ZGRpdShkZXN0LCBzcmMsIGltbS5tX3ZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgIGxpICAgICAgICBpbW1UZW1wLCBpbW0KKyAg
ICAgICAgICAgICAgYWRkdSAgICAgIGRlc3QsIHNyYywgaW1tVGVtcAorICAgICAgICAgICAgKi8K
KyAgICAgICAgICAgIG1vdmUoaW1tLCBpbW1UZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLmFkZHUoZGVzdCwgc3JjLCBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAg
ICB9CisgICAgfQorCisgICAgdm9pZCBhZGQzMihJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcywg
aW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIGlmIChhZGRyZXNzLm9mZnNldCA+PSAtMzI3
NjggJiYgYWRkcmVzcy5vZmZzZXQgPD0gMzI3NjcgJiYgZml4ZWQgPT0gMCkgeworICAgICAgICAg
ICAgLyoKKyAgICAgICAgICAgICAgbHcgICAgICAgIGRhdGFUZW1wLCBvZmZzZXQoYmFzZSkKKyAg
ICAgICAgICAgICAgbGkgICAgICAgIGltbVRlbXAsIGltbQorICAgICAgICAgICAgICBhZGR1ICAg
ICAgZGF0YVRlbXAsIGRhdGFUZW1wLCBpbW1UZW1wCisgICAgICAgICAgICAgIHN3ICAgICAgICBk
YXRhVGVtcCwgb2Zmc2V0KGJhc2UpCisgICAgICAgICAgICAqLworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIubHcoZGF0YVRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCk7
CisgICAgICAgICAgICBpZighaW1tLm1faXNQb2ludGVyICYmIGltbS5tX3ZhbHVlID49IC0zMjc2
OCAmJiBpbW0ubV92YWx1ZSA8PSAzMjc2NyAmJiBmaXhlZCA9PSAwKQorICAgICAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmFkZGl1KGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1tLm1fdmFsdWUpOworICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbW92ZShpbW0sIGltbVRlbXBSZWdpc3RlciwgZml4
ZWQpOworICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoZGF0YVRlbXBSZWdpc3Rlciwg
ZGF0YVRlbXBSZWdpc3RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltbVRl
bXBSZWdpc3Rlcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdyhk
YXRhVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgIGx1aSAgICAg
ICBhZGRyVGVtcCwgKG9mZnNldCArIDB4ODAwMCkgPj4gMTYKKyAgICAgICAgICAgICAgYWRkdSAg
ICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgYmFzZQorICAgICAgICAgICAgICBsdyAgICAgICAgZGF0
YVRlbXAsIChvZmZzZXQgJiAweGZmZmYpKGFkZHJUZW1wKQorICAgICAgICAgICAgICBsaSAgICAg
ICAgaW1tdGVtcCwgaW1tCisgICAgICAgICAgICAgIGFkZHUgICAgICBkYXRhVGVtcCwgZGF0YVRl
bXAsIGltbVRlbXAKKyAgICAgICAgICAgICAgc3cgICAgICAgIGRhdGFUZW1wLCAob2Zmc2V0ICYg
MHhmZmZmKShhZGRyVGVtcCkKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5sdWkoYWRkclRlbXBSZWdpc3RlciwgKGFkZHJlc3Mub2Zmc2V0ICsgMHg4MDAwKSA+PiAxNik7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1w
UmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sdyhkYXRh
VGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCk7CisKKyAgICAg
ICAgICAgIGlmKGltbS5tX3ZhbHVlID49IC0zMjc2OCAmJiBpbW0ubV92YWx1ZSA8PSAzMjc2NyAm
JiBmaXhlZCA9PSAwKQorICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGl1KGRhdGFUZW1w
UmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW1tLm1fdmFsdWUpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
bW92ZShpbW0sIGltbVRlbXBSZWdpc3RlciwgZml4ZWQpOworICAgICAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmFkZHUoZGF0YVRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3RlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdyhkYXRhVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJl
Z2lzdGVyLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGFk
ZDMyKEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgewor
ICAgICAgICBsb2FkMzIoc3JjLCBkYXRhVGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgICAgIGFk
ZDMyKGRhdGFUZW1wUmVnaXN0ZXIsIGRlc3QsIGZpeGVkKTsKKyAgICB9CisKKyAgICB2b2lkIGFk
ZDMyKFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgewor
ICAgICAgICBpZiAoZGVzdC5vZmZzZXQgPj0gLTMyNzY4ICYmIGRlc3Qub2Zmc2V0IDw9IDMyNzY3
ICYmIGZpeGVkID09IDApIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgIGx3ICAgICAg
ICBkYXRhVGVtcCwgb2Zmc2V0KGJhc2UpCisgICAgICAgICAgICAgIGFkZHUgICAgICBkYXRhVGVt
cCwgZGF0YVRlbXAsIHNyYworICAgICAgICAgICAgICBzdyAgICAgICAgZGF0YVRlbXAsIG9mZnNl
dChiYXNlKQorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx3KGRhdGFU
ZW1wUmVnaXN0ZXIsIGRlc3QuYmFzZSwgZGVzdC5vZmZzZXQpOworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIuYWRkdShkYXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLCBzcmMpOworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuc3coZGF0YVRlbXBSZWdpc3RlciwgZGVzdC5iYXNlLCBkZXN0
Lm9mZnNldCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKgorICAg
ICAgICAgICAgICBsdWkgICAgICAgYWRkclRlbXAsIChvZmZzZXQgKyAweDgwMDApID4+IDE2Cisg
ICAgICAgICAgICAgIGFkZHUgICAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGJhc2UKKyAgICAgICAg
ICAgICAgbHcgICAgICAgIGRhdGFUZW1wLCAob2Zmc2V0ICYgMHhmZmZmKShhZGRyVGVtcCkKKyAg
ICAgICAgICAgICAgYWRkdSAgICAgIGRhdGFUZW1wLCBkYXRhVGVtcCwgc3JjCisgICAgICAgICAg
ICAgIHN3ICAgICAgICBkYXRhVGVtcCwgKG9mZnNldCAmIDB4ZmZmZikoYWRkclRlbXApCisgICAg
ICAgICAgICAqLworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHVpKGFkZHJUZW1wUmVnaXN0ZXIs
IChkZXN0Lm9mZnNldCArIDB4ODAwMCkgPj4gMTYpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
YWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBkZXN0LmJhc2UpOworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIubHcoZGF0YVRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3Rl
ciwgZGVzdC5vZmZzZXQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShkYXRhVGVtcFJl
Z2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLCBzcmMpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
c3coZGF0YVRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgZGVzdC5vZmZzZXQpOworICAg
ICAgICB9CisgICAgfQorCisgICAgdm9pZCBhZGQzMihJbW0zMiBpbW0sIEFic29sdXRlQWRkcmVz
cyBhZGRyZXNzLCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICAg
bGkgICBhZGRyVGVtcCwgYWRkcmVzcworICAgICAgICAgICBsaSAgIGltbVRlbXAsIGltbQorICAg
ICAgICAgICBsdyAgIGRhdGFUZW1wLCAwKGFkZHJUZW1wKQorICAgICAgICAgICBhZGR1IGRhdGFU
ZW1wLCBkYXRhVGVtcCwgaW1tVGVtcAorICAgICAgICAgICBzdyAgIGRhdGFUZW1wLCAwKGFkZHJU
ZW1wKQorICAgICAgICAqLworICAgICAgICBtb3ZlKEltbVB0cihhZGRyZXNzLm1fcHRyKSwgYWRk
clRlbXBSZWdpc3RlciwgZml4ZWQpOworICAgICAgICBtX2Fzc2VtYmxlci5sdyhkYXRhVGVtcFJl
Z2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCAwKTsKKyAgICAgICAgaWYgKCFpbW0ubV9pc1BvaW50
ZXIgJiYgaW1tLm1fdmFsdWUgPj0gLTMyNzY4ICYmIGltbS5tX3ZhbHVlIDw9IDMyNzY3ICYmIGZp
eGVkID09IDApCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRpdShkYXRhVGVtcFJlZ2lzdGVy
LCBkYXRhVGVtcFJlZ2lzdGVyLCBpbW0ubV92YWx1ZSk7CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgbW92ZShpbW0sIGltbVRlbXBSZWdpc3RlciwgZml4ZWQpOworICAgICAgICAgICAgbV9h
c3NlbWJsZXIuYWRkdShkYXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLCBpbW1UZW1w
UmVnaXN0ZXIpOworICAgICAgICB9CisgICAgICAgIG1fYXNzZW1ibGVyLnN3KGRhdGFUZW1wUmVn
aXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIDApOworICAgIH0KKworICAgIHZvaWQgYW5kMzIoUmVn
aXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmFuZF9pbnNuKGRlc3QsIGRlc3QsIHNyYyk7CisgICAgfQorCisgICAg
dm9pZCBhbmQzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAg
ICB7CisgICAgICAgIGlmICghaW1tLm1faXNQb2ludGVyICYmIGltbS5tX3ZhbHVlID09IDAgJiYg
Zml4ZWQgPT0gMCkKKyAgICAgICAgICAgIG1vdmUoTUlQU1JlZ2lzdGVyczo6emVybywgZGVzdCwg
Zml4ZWQpOworICAgICAgICBlbHNlIGlmICghaW1tLm1faXNQb2ludGVyICYmIGltbS5tX3ZhbHVl
ID4gMCAmJiBpbW0ubV92YWx1ZSA8IDY1NTM1ICYmIGZpeGVkID09IDApCisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5hbmRpKGRlc3QsIGRlc3QsIGltbS5tX3ZhbHVlKTsKKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICBsaSAgICAgICAgaW1tVGVtcCwgaW1tCisg
ICAgICAgICAgICAgIGFuZCAgICAgICBkZXN0LCBkZXN0LCBpbW1UZW1wCisgICAgICAgICAgICAq
LworICAgICAgICAgICAgbW92ZShpbW0sIGltbVRlbXBSZWdpc3RlciwgZml4ZWQpOworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuYW5kX2luc24oZGVzdCwgZGVzdCwgaW1tVGVtcFJlZ2lzdGVyKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgbHNoaWZ0MzIoSW1tMzIgaW1tLCBSZWdpc3Rl
cklEIGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zbGwo
ZGVzdCwgZGVzdCwgaW1tLm1fdmFsdWUpOworICAgIH0KKworICAgIHZvaWQgbHNoaWZ0MzIoUmVn
aXN0ZXJJRCBzaGlmdF9hbW91bnQsIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAg
ICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnNsbHYoZGVzdCwgZGVzdCwgc2hpZnRfYW1vdW50KTsK
KyAgICB9CisKKyAgICB2b2lkIG11bDMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3Qs
IGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5tdWwoZGVzdCwgZGVz
dCwgc3JjKTsKKyAgICB9CisKKyAgICB2b2lkIG11bDMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBz
cmMsIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIGlmICgh
aW1tLm1faXNQb2ludGVyICYmIGltbS5tX3ZhbHVlID09IDAgJiYgZml4ZWQgPT0gMCkKKyAgICAg
ICAgICAgIG1vdmUoTUlQU1JlZ2lzdGVyczo6emVybywgZGVzdCwgZml4ZWQpOworICAgICAgICBl
bHNlIGlmICghaW1tLm1faXNQb2ludGVyICYmIGltbS5tX3ZhbHVlID09IDEgJiYgZml4ZWQgPT0g
MCkKKyAgICAgICAgICAgIG1vdmUoc3JjLCBkZXN0LCBmaXhlZCk7CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICBsaSAgICAgIGRhdGFUZW1wLCBpbW0KKyAg
ICAgICAgICAgICAgICBtdWwgICAgIGRlc3QsIHNyYywgZGF0YVRlbXAKKyAgICAgICAgICAgICov
CisgICAgICAgICAgICBtb3ZlKGltbSwgZGF0YVRlbXBSZWdpc3RlciwgZml4ZWQpOworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIubXVsKGRlc3QsIHNyYywgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICB2b2lkIG5vdDMyKFJlZ2lzdGVySUQgc3JjRGVzdCwgaW50IGZp
eGVkID0gMCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcihzcmNEZXN0LCBzcmNEZXN0
LCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsKKyAgICB9CisKKyAgICB2b2lkIG9yMzIoUmVnaXN0ZXJJ
RCBzcmMsIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLm9yX2luc24oZGVzdCwgZGVzdCwgc3JjKTsKKyAgICB9CisKKyAgICB2b2lkIG9y
MzIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgeworICAg
ICAgICBpZiAoIWltbS5tX2lzUG9pbnRlciAmJiBpbW0ubV92YWx1ZSA9PSAwICYmIGZpeGVkID09
IDApCisgICAgICAgICAgICA7CisgICAgICAgIGVsc2UgaWYgKCFpbW0ubV9pc1BvaW50ZXIgJiYg
aW1tLm1fdmFsdWUgPiAwICYmIGltbS5tX3ZhbHVlIDwgNjU1MzUgJiYgZml4ZWQgPT0gMCkKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLm9yaShkZXN0LCBkZXN0LCBpbW0ubV92YWx1ZSk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICBsaSAgICAgIGRhdGFU
ZW1wLCBpbW0KKyAgICAgICAgICAgICAgICBvciAgICAgIGRlc3QsIGRlc3QsIGRhdGFUZW1wCisg
ICAgICAgICAgICAqLworICAgICAgICAgICAgbW92ZShpbW0sIGRhdGFUZW1wUmVnaXN0ZXIsIGZp
eGVkKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm9yX2luc24oZGVzdCwgZGVzdCwgZGF0YVRl
bXBSZWdpc3Rlcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHJzaGlmdDMyKFJlZ2lz
dGVySUQgc2hpZnRfYW1vdW50LCBSZWdpc3RlcklEIGRlc3QsIGludCBmaXhlZCA9IDApCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5zcmF2KGRlc3QsIGRlc3QsIHNoaWZ0X2Ftb3VudCk7Cisg
ICAgfQorCisgICAgdm9pZCByc2hpZnQzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCwgaW50
IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnNyYShkZXN0LCBkZXN0LCBp
bW0ubV92YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBzdWIzMihSZWdpc3RlcklEIHNyYywgUmVn
aXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
c3VidShkZXN0LCBkZXN0LCBzcmMpOworICAgIH0KKworICAgIHZvaWQgc3ViMzIoSW1tMzIgaW1t
LCBSZWdpc3RlcklEIGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBpZighaW1t
Lm1faXNQb2ludGVyICYmIGltbS5tX3ZhbHVlID49IC0zMjc2NyAmJiBpbW0ubV92YWx1ZSA8PSAz
Mjc2OCAmJiBmaXhlZCA9PSAwKSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICBhZGRp
dSAgICAgZGVzdCwgc3JjLCBpbW0KKyAgICAgICAgICAgICovCisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5hZGRpdShkZXN0LCBkZXN0LCAtaW1tLm1fdmFsdWUpOworICAgICAgICB9CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgbGkgICAgICAgIGltbVRlbXAs
IGltbQorICAgICAgICAgICAgICBzdWJ1ICAgICAgZGVzdCwgc3JjLCBpbW1UZW1wCisgICAgICAg
ICAgICAqLworICAgICAgICAgICAgbW92ZShpbW0sIGltbVRlbXBSZWdpc3RlciwgZml4ZWQpOwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3VidShkZXN0LCBkZXN0LCBpbW1UZW1wUmVnaXN0ZXIp
OworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBzdWIzMihJbW0zMiBpbW0sIEFkZHJlc3Mg
YWRkcmVzcywgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIGlmIChhZGRyZXNzLm9mZnNl
dCA+PSAtMzI3NjggJiYgYWRkcmVzcy5vZmZzZXQgPD0gMzI3NjcgJiYgZml4ZWQgPT0gMCkgewor
ICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgbHcgICAgICAgIGRhdGFUZW1wLCBvZmZzZXQo
YmFzZSkKKyAgICAgICAgICAgICAgbGkgICAgICAgIGltbVRlbXAsIGltbQorICAgICAgICAgICAg
ICBzdWJ1ICAgICAgZGF0YVRlbXAsIGRhdGFUZW1wLCBpbW1UZW1wCisgICAgICAgICAgICAgIHN3
ICAgICAgICBkYXRhVGVtcCwgb2Zmc2V0KGJhc2UpCisgICAgICAgICAgICAqLworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIubHcoZGF0YVRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlLCBhZGRyZXNz
Lm9mZnNldCk7CisgICAgICAgICAgICBpZighaW1tLm1faXNQb2ludGVyICYmIGltbS5tX3ZhbHVl
ID49IC0zMjc2NyAmJiBpbW0ubV92YWx1ZSA8PSAzMjc2OCAmJiBmaXhlZCA9PSAwKQorICAgICAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGl1KGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVn
aXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWltbS5tX3ZhbHVlKTsK
KyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG1vdmUoaW1tLCBpbW1UZW1wUmVn
aXN0ZXIsIGZpeGVkKTsKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdWJ1KGRhdGFUZW1w
UmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9hc3Nl
bWJsZXIuc3coZGF0YVRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCk7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAg
ICBsdWkgICAgICAgYWRkclRlbXAsIChvZmZzZXQgKyAweDgwMDApID4+IDE2CisgICAgICAgICAg
ICAgIGFkZHUgICAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGJhc2UKKyAgICAgICAgICAgICAgbHcg
ICAgICAgIGRhdGFUZW1wLCAob2Zmc2V0ICYgMHhmZmZmKShhZGRyVGVtcCkKKyAgICAgICAgICAg
ICAgbGkgICAgICAgIGltbXRlbXAsIGltbQorICAgICAgICAgICAgICBzdWJ1ICAgICAgZGF0YVRl
bXAsIGRhdGFUZW1wLCBpbW1UZW1wCisgICAgICAgICAgICAgIHN3ICAgICAgICBkYXRhVGVtcCwg
KG9mZnNldCAmIDB4ZmZmZikoYWRkclRlbXApCisgICAgICAgICAgICAqLworICAgICAgICAgICAg
bV9hc3NlbWJsZXIubHVpKGFkZHJUZW1wUmVnaXN0ZXIsIChhZGRyZXNzLm9mZnNldCArIDB4ODAw
MCkgPj4gMTYpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVy
LCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UpOworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIubHcoZGF0YVRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQp
OworCisgICAgICAgICAgICBpZighaW1tLm1faXNQb2ludGVyICYmIGltbS5tX3ZhbHVlID49IC0z
Mjc2NyAmJiBpbW0ubV92YWx1ZSA8PSAzMjc2OCAmJiBmaXhlZCA9PSAwKQorICAgICAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLmFkZGl1KGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWltbS5tX3ZhbHVlKTsKKyAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG1vdmUoaW1tLCBpbW1UZW1wUmVnaXN0ZXIs
IGZpeGVkKTsKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdWJ1KGRhdGFUZW1wUmVnaXN0
ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bW1UZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9hc3NlbWJsZXIu
c3coZGF0YVRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBzdWIzMihBZGRyZXNzIHNyYywgUmVnaXN0ZXJJ
RCBkZXN0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgbG9hZDMyKHNyYywgZGF0YVRl
bXBSZWdpc3RlciwgZml4ZWQpOworICAgICAgICBzdWIzMihkYXRhVGVtcFJlZ2lzdGVyLCBkZXN0
LCBmaXhlZCk7CisgICAgfQorCisgICAgdm9pZCBzdWIzMihJbW0zMiBpbW0sIEFic29sdXRlQWRk
cmVzcyBhZGRyZXNzLCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAg
ICAgbGkgICBhZGRyVGVtcCwgYWRkcmVzcworICAgICAgICAgICBsaSAgIGltbVRlbXAsIGltbQor
ICAgICAgICAgICBsdyAgIGRhdGFUZW1wLCAwKGFkZHJUZW1wKQorICAgICAgICAgICBzdWJ1IGRh
dGFUZW1wLCBkYXRhVGVtcCwgaW1tVGVtcAorICAgICAgICAgICBzdyAgIGRhdGFUZW1wLCAwKGFk
ZHJUZW1wKQorICAgICAgICAqLworICAgICAgICBtb3ZlKEltbVB0cihhZGRyZXNzLm1fcHRyKSwg
YWRkclRlbXBSZWdpc3RlciwgZml4ZWQpOworICAgICAgICBtX2Fzc2VtYmxlci5sdyhkYXRhVGVt
cFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCAwKTsKKworICAgICAgICBpZighaW1tLm1faXNQ
b2ludGVyICYmIGltbS5tX3ZhbHVlID49IC0zMjc2NyAmJiBpbW0ubV92YWx1ZSA8PSAzMjc2OCAm
JiBmaXhlZCA9PSAwKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRpdShkYXRhVGVtcFJl
Z2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LWltbS5tX3ZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1v
dmUoaW1tLCBpbW1UZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LnN1YnUoZGF0YVRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3RlciwgaW1tVGVtcFJlZ2lzdGVy
KTsKKyAgICAgICAgfQorICAgICAgICBtX2Fzc2VtYmxlci5zdyhkYXRhVGVtcFJlZ2lzdGVyLCBh
ZGRyVGVtcFJlZ2lzdGVyLCAwKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjMyKFJlZ2lzdGVySUQg
c3JjLCBSZWdpc3RlcklEIGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci54b3JfaW5zbihkZXN0LCBkZXN0LCBzcmMpOworICAgIH0KKworICAgIHZvaWQgeG9y
MzIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgeworICAg
ICAgICAvKgorICAgICAgICAgICAgbGkgIGltbVRlbXAsIGltbQorICAgICAgICAgICAgeG9yIGRl
c3QsIGRlc3QsIGltbVRlbXAKKyAgICAgICAgKi8KKyAgICAgICAgbW92ZShpbW0sIGltbVRlbXBS
ZWdpc3RlciwgZml4ZWQpOworICAgICAgICBtX2Fzc2VtYmxlci54b3JfaW5zbihkZXN0LCBkZXN0
LCBpbW1UZW1wUmVnaXN0ZXIpOworICAgIH0KKworICAgIC8vIE1lbW9yeSBhY2Nlc3Mgb3BlcmF0
aW9uczoKKyAgICAvLworICAgIC8vIExvYWRzIGFyZSBvZiB0aGUgZm9ybSBsb2FkKGFkZHJlc3Ms
IGRlc3RpbmF0aW9uKSBhbmQgc3RvcmVzIG9mIHRoZSBmb3JtCisgICAgLy8gc3RvcmUoc291cmNl
LCBhZGRyZXNzKS4gIFRoZSBzb3VyY2UgZm9yIGEgc3RvcmUgbWF5IGJlIGFuIEltbTMyLiAgQWRk
cmVzcworICAgIC8vIG9wZXJhbmQgb2JqZWN0cyB0byBsb2FkcyBhbmQgc3RvcmUgd2lsbCBiZSBp
bXBsaWNpdGx5IGNvbnN0cnVjdGVkIGlmIGEKKyAgICAvLyByZWdpc3RlciBpcyBwYXNzZWQuCisK
KyAgICB2b2lkIGxvYWQzMihJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0
LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgaWYgKGFkZHJlc3Mub2Zmc2V0ID49IC0z
Mjc2OCAmJiBhZGRyZXNzLm9mZnNldCA8PSAzMjc2NyAmJiBmaXhlZCA9PSAwKQorICAgICAgICAg
ICAgbV9hc3NlbWJsZXIubHcoZGVzdCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCk7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICBsdWkgICAgIGFk
ZHJUZW1wLCAob2Zmc2V0ICsgMHg4MDAwKSA+PiAxNgorICAgICAgICAgICAgICAgIGFkZHUgICAg
YWRkclRlbXAsIGFkZHJUZW1wLCBiYXNlCisgICAgICAgICAgICAgICAgbHcgICAgICBkZXN0LCAo
b2Zmc2V0ICYgMHhmZmZmKShhZGRyVGVtcCkKKyAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmx1aShhZGRyVGVtcFJlZ2lzdGVyLCAoYWRkcmVzcy5vZmZzZXQgKyAweDgw
MDApID4+IDE2KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3Rl
ciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlKTsKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLmx3KGRlc3QsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHZvaWQgbG9hZDMyKEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklE
IGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBpZiAoYWRkcmVzcy5vZmZzZXQg
Pj0gLTMyNzY4ICYmIGFkZHJlc3Mub2Zmc2V0IDw9IDMyNzY3ICYmIGZpeGVkID09IDApIHsKKyAg
ICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgc2xsICAgICBhZGRyVGVtcCwgYWRkcmVzcy5p
bmRleCwgYWRkcmVzcy5zY2FsZQorICAgICAgICAgICAgICAgIGFkZHUgICAgYWRkclRlbXAsIGFk
ZHJUZW1wLCBhZGRyZXNzLmJhc2UKKyAgICAgICAgICAgICAgICBsdyAgICAgIGRlc3QsIGFkZHJl
c3Mub2Zmc2V0KGFkZHJUZW1wKQorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLnNsbChhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBS
ZWdpc3RlciwgYWRkcmVzcy5iYXNlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx3KGRlc3Qs
IGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgc2xsICAgICBhZGRyVGVtcCwg
YWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZQorICAgICAgICAgICAgICAgIGFkZHUgICAgYWRk
clRlbXAsIGFkZHJUZW1wLCBhZGRyZXNzLmJhc2UKKyAgICAgICAgICAgICAgICBsdWkgICAgIGlt
bVRlbXAsIChhZGRyZXNzLm9mZnNldCArIDB4ODAwMCkgPj4gMTYKKyAgICAgICAgICAgICAgICBh
ZGR1ICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgaW1tVGVtcAorICAgICAgICAgICAgICAgIGx3ICAg
ICAgZGVzdCwgKGFkZHJlc3Mub2Zmc2V0ICYgMHhmZmZmKShhdCkKKyAgICAgICAgICAgICovCisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5zbGwoYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5pbmRl
eCwgYWRkcmVzcy5zY2FsZSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1w
UmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSk7CisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5sdWkoaW1tVGVtcFJlZ2lzdGVyLCAoYWRkcmVzcy5vZmZzZXQgKyAweDgwMDAp
ID4+IDE2KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3Rlciwg
YWRkclRlbXBSZWdpc3RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1tVGVtcFJl
Z2lzdGVyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx3KGRlc3QsIGFkZHJUZW1wUmVnaXN0
ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgbG9hZDMy
V2l0aFVuYWxpZ25lZEhhbGZXb3JkcyhCYXNlSW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0
LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgaWYgKGFkZHJlc3Mub2Zmc2V0ID49IC0z
Mjc2OCAmJiBhZGRyZXNzLm9mZnNldCA8PSAzMjc2NCAmJiBmaXhlZCA9PSAwKSB7CisgICAgICAg
ICAgICAvKgorICAgICAgICAgICAgICAgIHNsbCAgICAgYWRkclRlbXAsIGFkZHJlc3MuaW5kZXgs
IGFkZHJlc3Muc2NhbGUKKyAgICAgICAgICAgICAgICBhZGR1ICAgIGFkZHJUZW1wLCBhZGRyVGVt
cCwgYWRkcmVzcy5iYXNlCisgICAgICAgICAgICAgICAgKEJpZy1FbmRpYW4pCisgICAgICAgICAg
ICAgICAgbHdsICAgICBkZXN0LCBhZGRyZXNzLm9mZnNldChhZGRyVGVtcCkKKyAgICAgICAgICAg
ICAgICBsd3IgICAgIGRlc3QsIGFkZHJlc3Mub2Zmc2V0KzMoYWRkclRlbXApCisgICAgICAgICAg
ICAgICAgKExpdHRsZS1FbmRpYW4pCisgICAgICAgICAgICAgICAgbHdsICAgICBkZXN0LCBhZGRy
ZXNzLm9mZnNldCszKGFkZHJUZW1wKQorICAgICAgICAgICAgICAgIGx3ciAgICAgZGVzdCwgYWRk
cmVzcy5vZmZzZXQoYWRkclRlbXApCisgICAgICAgICAgICAqLworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIuc2xsKGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUp
OworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVt
cFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UpOworI2lmIGRlZmluZWQoX19NSVBTRUJfXykKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLmx3bChkZXN0LCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9m
ZnNldCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sd3IoZGVzdCwgYWRkclRlbXBSZWdpc3Rl
ciwgYWRkcmVzcy5vZmZzZXQgKyAzKTsKKyNlbHNlCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5s
d2woZGVzdCwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQgKyAzKTsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLmx3cihkZXN0LCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNl
dCk7CisKKyNlbmRpZgorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLyoK
KyAgICAgICAgICAgICAgICBzbGwgICAgIGFkZHJUZW1wLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNz
LnNjYWxlCisgICAgICAgICAgICAgICAgYWRkdSAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGFkZHJl
c3MuYmFzZQorICAgICAgICAgICAgICAgIGx1aSAgICAgaW1tVGVtcCwgYWRkcmVzcy5vZmZzZXQg
Pj4gMTYKKyAgICAgICAgICAgICAgICBvcmkgICAgIGltbVRlbXAsIGltbVRlbXAsIGFkZHJlc3Mu
b2Zmc2V0ICYgMHhmZmZmCisgICAgICAgICAgICAgICAgYWRkdSAgICBhZGRyVGVtcCwgYWRkclRl
bXAsIGltbVRlbXAKKyAgICAgICAgICAgICAgICAoQmlnLUVuZGlhbikKKyAgICAgICAgICAgICAg
ICBsdyAgICAgIGRlc3QsIDAoYXQpCisgICAgICAgICAgICAgICAgbHcgICAgICBkZXN0LCAzKGF0
KQorICAgICAgICAgICAgICAgIChMaXR0bGUtRW5kaWFuKQorICAgICAgICAgICAgICAgIGx3ICAg
ICAgZGVzdCwgMyhhdCkKKyAgICAgICAgICAgICAgICBsdyAgICAgIGRlc3QsIDAoYXQpCisgICAg
ICAgICAgICAqLworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2xsKGFkZHJUZW1wUmVnaXN0ZXIs
IGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
YWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UpOwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIubHVpKGltbVRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZz
ZXQgPj4gMTYpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIub3JpKGltbVRlbXBSZWdpc3Rlciwg
aW1tVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGltbVRlbXBSZWdpc3Rlcik7CisjaWYgZGVmaW5lZChfX01JUFNFQl9f
KQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubHdsKGRlc3QsIGFkZHJUZW1wUmVnaXN0ZXIsIDAp
OworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHdyKGRlc3QsIGFkZHJUZW1wUmVnaXN0ZXIsIDMp
OworI2Vsc2UKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx3bChkZXN0LCBhZGRyVGVtcFJlZ2lz
dGVyLCAzKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx3cihkZXN0LCBhZGRyVGVtcFJlZ2lz
dGVyLCAwKTsKKyNlbmRpZgorICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBsb2FkMzIodm9p
ZCAqYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAg
ICAgLyoKKyAgICAgICAgICAgIGxpICBhZGRyVGVtcCwgYWRkcmVzcworICAgICAgICAgICAgbHcg
IGRlc3QsIDAoYWRkclRlbXApCisgICAgICAgICovCisgICAgICAgIG1vdmUoSW1tUHRyKGFkZHJl
c3MpLCBhZGRyVGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmx3KGRl
c3QsIGFkZHJUZW1wUmVnaXN0ZXIsIDApOworICAgIH0KKworICAgIERhdGFMYWJlbDMyIGxvYWQz
MldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBpbnQgZml4ZWQgPSAxOworICAgICAgICAvKgorICAgICAgICAgICAg
bHVpIGFkZHJUZW1wLCBhZGRyZXNzLm9mZnNldCA+PiAxNgorICAgICAgICAgICAgb3JpIGFkZHJU
ZW1wLCBhZGRyVGVtcCwgYWRkcmVzcy5vZmZzZXQgJiAweGZmZmYKKyAgICAgICAgICAgIGFkZHUg
ICAgICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgYWRkcmVzcy5iYXNlCisgICAgICAgICAgICBsdyAg
ZGVzdCwgMChhZGRyVGVtcCkKKyAgICAgICAgKi8KKyAgICAgICAgRGF0YUxhYmVsMzIgZGF0YUxh
YmVsKHRoaXMpOworICAgICAgICBtb3ZlKEltbTMyKGFkZHJlc3Mub2Zmc2V0KSwgYWRkclRlbXBS
ZWdpc3RlciwgZml4ZWQpOworICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0
ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSk7CisgICAgICAgIG1fYXNzZW1ibGVy
Lmx3KGRlc3QsIGFkZHJUZW1wUmVnaXN0ZXIsIDApOworICAgICAgICByZXR1cm4gZGF0YUxhYmVs
OworICAgIH0KKworICAgIExhYmVsIGxvYWRQdHJXaXRoUGF0Y2hUb0xFQShBZGRyZXNzIGFkZHJl
c3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGludCBmaXhlZCA9IDE7CisgICAg
ICAgIC8qCisgICAgICAgICAgICBsdWkgICAgICAgICBhZGRyVGVtcCwgYWRkcmVzcy5vZmZzZXQg
Pj4gMTYKKyAgICAgICAgICAgIG9yaSAgICAgICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgYWRkcmVz
cy5vZmZzZXQgJiAweGZmZmYKKyAgICAgICAgICAgIGFkZHUgICAgICAgIGFkZHJUZW1wLCBhZGRy
VGVtcCwgYWRkcmVzcy5iYXNlCisgICAgICAgICAgICBsdyAgICAgICAgICBkZXN0LCAwKGFkZHJU
ZW1wKQorICAgICAgICAqLworICAgICAgICBMYWJlbCBsYWJlbCh0aGlzKTsKKyAgICAgICAgbW92
ZShJbW0zMihhZGRyZXNzLm9mZnNldCksIGFkZHJUZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAgICAg
ICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBh
ZGRyZXNzLmJhc2UpOworICAgICAgICBtX2Fzc2VtYmxlci5sdyhkZXN0LCBhZGRyVGVtcFJlZ2lz
dGVyLCAwKTsKKyAgICAgICAgcmV0dXJuIGxhYmVsOworICAgIH0KKworICAgIExhYmVsIGxvYWRQ
dHJXaXRoQWRkcmVzc09mZnNldFBhdGNoKEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGxvYWRQdHJXaXRoUGF0Y2hUb0xFQShhZGRyZXNzLCBk
ZXN0KTsKKyAgICB9CisKKyAgICAvKiBOZWVkIHRvIHVzZSB6ZXJvLWV4dGVuZWQgbG9hZCBoYWxm
LXdvcmQgZm9yIGxvYWQxNi4gICovCisgICAgdm9pZCBsb2FkMTYoQmFzZUluZGV4IGFkZHJlc3Ms
IFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIGlmIChhZGRy
ZXNzLm9mZnNldCA+PSAtMzI3NjggJiYgYWRkcmVzcy5vZmZzZXQgPD0gMzI3NjcgJiYgZml4ZWQg
PT0gMCkgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICBzbGwgICAgIGFkZHJUZW1w
LCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlCisgICAgICAgICAgICAgICAgYWRkdSAgICBh
ZGRyVGVtcCwgYWRkclRlbXAsIGFkZHJlc3MuYmFzZQorICAgICAgICAgICAgICAgIGxodSAgICAg
ZGVzdCwgYWRkcmVzcy5vZmZzZXQoYWRkclRlbXApCisgICAgICAgICAgICAqLworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuc2xsKGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuaW5kZXgsIGFkZHJl
c3Muc2NhbGUpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVy
LCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UpOworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIubGh1KGRlc3QsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgc2xsICAg
ICBhZGRyVGVtcCwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZQorICAgICAgICAgICAgICAg
IGFkZHUgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBhZGRyZXNzLmJhc2UKKyAgICAgICAgICAgICAg
ICBsdWkgICAgIGltbVRlbXAsIChhZGRyZXNzLm9mZnNldCArIDB4ODAwMCkgPj4gMTYKKyAgICAg
ICAgICAgICAgICBhZGR1ICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgaW1tVGVtcAorICAgICAgICAg
ICAgICAgIGxodSAgICAgZGVzdCwgKGFkZHJlc3Mub2Zmc2V0ICYgMHhmZmZmKShhZGRyVGVtcCkK
KyAgICAgICAgICAgICovCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbGwoYWRkclRlbXBSZWdp
c3RlciwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFz
ZSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sdWkoaW1tVGVtcFJlZ2lzdGVyLCAoYWRkcmVz
cy5vZmZzZXQgKyAweDgwMDApID4+IDE2KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUo
YWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxodShk
ZXN0LCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBEYXRhTGFiZWwzMiBzdG9yZTMyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaChSZWdpc3Rl
cklEIHNyYywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgaW50IGZpeGVkID0gMTsK
KyAgICAgICAgLyoKKyAgICAgICAgICAgIGx1aSBhZGRyVGVtcCwgYWRkcmVzcy5vZmZzZXQgPj4g
MTYKKyAgICAgICAgICAgIG9yaSBhZGRyVGVtcCwgYWRkclRlbXAsIGFkZHJlc3Mub2Zmc2V0ICYg
MHhmZmZmCisgICAgICAgICAgICBhZGR1ICAgICAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGFkZHJl
c3MuYmFzZQorICAgICAgICAgICAgc3cgIHNyYywgMChhZGRyVGVtcCkKKyAgICAgICAgKi8KKyAg
ICAgICAgRGF0YUxhYmVsMzIgZGF0YUxhYmVsKHRoaXMpOworICAgICAgICBtb3ZlKEltbTMyKGFk
ZHJlc3Mub2Zmc2V0KSwgYWRkclRlbXBSZWdpc3RlciwgZml4ZWQpOworICAgICAgICBtX2Fzc2Vt
Ymxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFz
ZSk7CisgICAgICAgIG1fYXNzZW1ibGVyLnN3KHNyYywgYWRkclRlbXBSZWdpc3RlciwgMCk7Cisg
ICAgICAgIHJldHVybiBkYXRhTGFiZWw7CisgICAgfQorCisgICAgdm9pZCBzdG9yZTMyKFJlZ2lz
dGVySUQgc3JjLCBJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcywgaW50IGZpeGVkID0gMCkKKyAgICB7
CisgICAgICAgIGlmIChhZGRyZXNzLm9mZnNldCA+PSAtMzI3NjggJiYgYWRkcmVzcy5vZmZzZXQg
PD0gMzI3NjcgJiYgZml4ZWQgPT0gMCkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN3KHNyYywg
YWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgLyoKKyAgICAgICAgICAgICAgICBsdWkgICAgIGFkZHJUZW1wLCAob2Zmc2V0ICsgMHg4MDAw
KSA+PiAxNgorICAgICAgICAgICAgICAgIGFkZHUgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBiYXNl
CisgICAgICAgICAgICAgICAgc3cgICAgICBzcmMsIChvZmZzZXQgJiAweGZmZmYpKGFkZHJUZW1w
KQorICAgICAgICAgICAgICAqLworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHVpKGFkZHJUZW1w
UmVnaXN0ZXIsIChhZGRyZXNzLm9mZnNldCArIDB4ODAwMCkgPj4gMTYpOworICAgICAgICAgICAg
bV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRy
ZXNzLmJhc2UpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3coc3JjLCBhZGRyVGVtcFJlZ2lz
dGVyLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHN0b3Jl
MzIoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBhZGRyZXNzLCBpbnQgZml4ZWQgPSAwKQorICAg
IHsKKyAgICAgICAgaWYgKGFkZHJlc3Mub2Zmc2V0ID49IC0zMjc2OCAmJiBhZGRyZXNzLm9mZnNl
dCA8PSAzMjc2NyAmJiBmaXhlZCA9PSAwKSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAg
ICAgIHNsbCAgICAgYWRkclRlbXAsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUKKyAgICAg
ICAgICAgICAgICBhZGR1ICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgYWRkcmVzcy5iYXNlCisgICAg
ICAgICAgICAgICAgc3cgICAgICBzcmMsIGFkZHJlc3Mub2Zmc2V0KGFkZHJUZW1wKQorICAgICAg
ICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsbChhZGRyVGVtcFJlZ2lzdGVyLCBh
ZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFk
ZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlKTsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLnN3KHNyYywgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5v
ZmZzZXQpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLyoKKyAgICAg
ICAgICAgICAgICBzbGwgICAgIGFkZHJUZW1wLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxl
CisgICAgICAgICAgICAgICAgYWRkdSAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGFkZHJlc3MuYmFz
ZQorICAgICAgICAgICAgICAgIGx1aSAgICAgaW1tVGVtcCwgKGFkZHJlc3Mub2Zmc2V0ICsgMHg4
MDAwKSA+PiAxNgorICAgICAgICAgICAgICAgIGFkZHUgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBp
bW1UZW1wCisgICAgICAgICAgICAgICAgc3cgICAgICBzcmMsIChhZGRyZXNzLm9mZnNldCAmIDB4
ZmZmZikoYXQpCisgICAgICAgICAgICAqLworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2xsKGFk
ZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBh
ZGRyZXNzLmJhc2UpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHVpKGltbVRlbXBSZWdpc3Rl
ciwgKGFkZHJlc3Mub2Zmc2V0ICsgMHg4MDAwKSA+PiAxNik7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5zdyhzcmMsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHZvaWQgc3RvcmUzMihJbW0zMiBpbW0sIEltcGxpY2l0QWRkcmVzcyBh
ZGRyZXNzLCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgaWYgKGFkZHJlc3Mub2Zmc2V0
ID49IC0zMjc2OCAmJiBhZGRyZXNzLm9mZnNldCA8PSAzMjc2NyAmJiBmaXhlZCA9PSAwKSB7Cisg
ICAgICAgICAgICBpZiAoIWltbS5tX2lzUG9pbnRlciAmJiBpbW0ubV92YWx1ZSA9PSAwKQorICAg
ICAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN3KE1JUFNSZWdpc3RlcnM6Onplcm8sIGFkZHJlc3Mu
YmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzLm9mZnNldCk7Cisg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBtb3ZlKGltbSwgaW1tVGVtcFJlZ2lz
dGVyLCBmaXhlZCk7CisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3coaW1tVGVtcFJlZ2lz
dGVyLCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgbHVp
ICAgICBhZGRyVGVtcCwgKG9mZnNldCArIDB4ODAwMCkgPj4gMTYKKyAgICAgICAgICAgICAgICBh
ZGR1ICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgYmFzZQorICAgICAgICAgICAgICAgIHN3ICAgICAg
aW1tVGVtcCwgKG9mZnNldCAmIDB4ZmZmZikoYWRkclRlbXApCisgICAgICAgICAgICAgICovCisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5sdWkoYWRkclRlbXBSZWdpc3RlciwgKGFkZHJlc3Mub2Zm
c2V0ICsgMHg4MDAwKSA+PiAxNik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJU
ZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSk7CisgICAgICAgICAg
ICBpZiAoIWltbS5tX2lzUG9pbnRlciAmJiBpbW0ubV92YWx1ZSA9PSAwICYmIGZpeGVkID09IDAp
CisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3coTUlQU1JlZ2lzdGVyczo6emVybywgYWRk
clRlbXBSZWdpc3RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzLm9m
ZnNldCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBtb3ZlKGltbSwgaW1t
VGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3coaW1t
VGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIHZvaWQgc3RvcmUzMihSZWdpc3RlcklEIHNyYywgdm9pZCogYWRkcmVzcywgaW50IGZp
eGVkID0gMCkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAgICBsaSAgYWRkclRlbXAsIGFk
ZHJlc3MKKyAgICAgICAgICAgIHN3ICBzcmMsIDAoYWRkclRlbXApCisgICAgICAgICovCisgICAg
ICAgIG1vdmUoSW1tUHRyKGFkZHJlc3MpLCBhZGRyVGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAg
ICAgIG1fYXNzZW1ibGVyLnN3KHNyYywgYWRkclRlbXBSZWdpc3RlciwgMCk7CisgICAgfQorCisg
ICAgdm9pZCBzdG9yZTMyKEltbTMyIGltbSwgdm9pZCogYWRkcmVzcywgaW50IGZpeGVkID0gMCkK
KyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAgICBsaSAgaW1tVGVtcCwgaW1tCisgICAgICAg
ICAgICBsaSAgYWRkclRlbXAsIGFkZHJlc3MKKyAgICAgICAgICAgIHN3ICBzcmMsIDAoYWRkclRl
bXApCisgICAgICAgICovCisgICAgICAgIGlmICghaW1tLm1faXNQb2ludGVyICYmIGltbS5tX3Zh
bHVlID09IDAgJiYgZml4ZWQgPT0gMCkgeworICAgICAgICAgICAgbW92ZShJbW1QdHIoYWRkcmVz
cyksIGFkZHJUZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN3
KE1JUFNSZWdpc3RlcnM6Onplcm8sIGFkZHJUZW1wUmVnaXN0ZXIsIDApOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgbW92ZShpbW0sIGltbVRlbXBSZWdpc3RlciwgZml4
ZWQpOworICAgICAgICAgICAgbW92ZShJbW1QdHIoYWRkcmVzcyksIGFkZHJUZW1wUmVnaXN0ZXIs
IGZpeGVkKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN3KGltbVRlbXBSZWdpc3RlciwgYWRk
clRlbXBSZWdpc3RlciwgMCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBGbG9hdGluZy1w
b2ludCBvcGVyYXRpb25zOgorCisgICAgYm9vbCBzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSBjb25z
dAorICAgIHsKKyNpZiBkZWZpbmVkKF9fbWlwc19oYXJkX2Zsb2F0KSAmJiAhZGVmaW5lZChfX21p
cHNfc2luZ2xlX2Zsb2F0KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyNlbmRpZgorICAgIH0KKworICAgIGJvb2wgc3VwcG9ydHNGbG9hdGluZ1Bv
aW50VHJ1bmNhdGUoKSBjb25zdAorICAgIHsKKyNpZiBkZWZpbmVkKF9fbWlwc19oYXJkX2Zsb2F0
KSAmJiAhZGVmaW5lZChfX21pcHNfc2luZ2xlX2Zsb2F0KSAmJiAoX19taXBzID4gMSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisjZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKyAg
ICB9CisKKyAgICAvLyBTdGFjayBtYW5pcHVsYXRpb24gb3BlcmF0aW9uczoKKyAgICAvLworICAg
IC8vIFRoZSBBQkkgaXMgYXNzdW1lZCB0byBwcm92aWRlIGEgc3RhY2sgYWJzdHJhY3Rpb24gdG8g
bWVtb3J5LAorICAgIC8vIGNvbnRhaW5pbmcgbWFjaGluZSB3b3JkIHNpemVkIHVuaXRzIG9mIGRh
dGEuICBQdXNoIGFuZCBwb3AKKyAgICAvLyBvcGVyYXRpb25zIGFkZCBhbmQgcmVtb3ZlIGEgc2lu
Z2xlIHJlZ2lzdGVyIHNpemVkIHVuaXQgb2YgZGF0YQorICAgIC8vIHRvIG9yIGZyb20gdGhlIHN0
YWNrLiAgUGVlayBhbmQgcG9rZSBvcGVyYXRpb25zIHJlYWQgb3Igd3JpdGUKKyAgICAvLyB2YWx1
ZXMgb24gdGhlIHN0YWNrLCB3aXRob3V0IG1vdmluZyB0aGUgY3VycmVudCBzdGFjayBwb3NpdGlv
bi4KKworICAgIHZvaWQgcG9wKFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmx3KGRlc3QsIE1JUFNSZWdpc3RlcnM6OnNwLCAwKTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIuYWRkaXUoTUlQU1JlZ2lzdGVyczo6c3AsIE1JUFNSZWdpc3RlcnM6OnNwLCA0KTsKKyAgICB9
CisKKyAgICB2b2lkIHB1c2goUmVnaXN0ZXJJRCBzcmMpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5hZGRpdShNSVBTUmVnaXN0ZXJzOjpzcCwgTUlQU1JlZ2lzdGVyczo6c3AsIC00KTsKKyAg
ICAgICAgbV9hc3NlbWJsZXIuc3coc3JjLCBNSVBTUmVnaXN0ZXJzOjpzcCwgMCk7CisgICAgfQor
CisgICAgdm9pZCBwdXNoKEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIGxvYWQzMihh
ZGRyZXNzLCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgcHVzaChkYXRhVGVtcFJlZ2lzdGVy
KTsKKyAgICB9CisKKyAgICB2b2lkIHB1c2goSW1tMzIgaW1tKQorICAgIHsKKyAgICAgICAgbW92
ZShpbW0sIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgIHB1c2goaW1tVGVtcFJlZ2lzdGVyKTsK
KyAgICB9CisKKyAgICAvLyBSZWdpc3RlciBtb3ZlIG9wZXJhdGlvbnM6CisgICAgLy8KKyAgICAv
LyBNb3ZlIHZhbHVlcyBpbiByZWdpc3RlcnMuCisKKyAgICB2b2lkIG1vdmUoSW1tMzIgaW1tLCBS
ZWdpc3RlcklEIGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBpZiAoIWltbS5t
X2lzUG9pbnRlciAmJiBpbW0ubV92YWx1ZSA9PSAwICYmIGZpeGVkID09IDApCisgICAgICAgICAg
ICBtb3ZlKE1JUFNSZWdpc3RlcnM6Onplcm8sIGRlc3QsIGZpeGVkKTsKKyAgICAgICAgZWxzZSBp
ZiAoaW1tLm1faXNQb2ludGVyIHx8IGZpeGVkID09IDEpIHsKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLmx1aShkZXN0LCBpbW0ubV92YWx1ZSA+PiAxNik7CisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5vcmkoZGVzdCwgZGVzdCwgaW1tLm1fdmFsdWUpOworICAgICAgICB9CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxpKGRlc3QsIGltbS5tX3ZhbHVlKTsKKyAgICB9CisK
KyAgICB2b2lkIG1vdmUoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVk
ID0gMCkKKyAgICB7CisgICAgICAgIGlmIChzcmMgPT0gZGVzdCAmJiBmaXhlZCA9PSAwKQorICAg
ICAgICAgICAgOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZlKGRl
c3QsIHNyYyk7CisgICAgfQorCisgICAgdm9pZCBtb3ZlKEltbVB0ciBpbW0sIFJlZ2lzdGVySUQg
ZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIG1vdmUoSW1tMzIoaW1tKSwgZGVz
dCwgZml4ZWQpOworICAgIH0KKworICAgIHZvaWQgc3dhcChSZWdpc3RlcklEIHJlZzEsIFJlZ2lz
dGVySUQgcmVnMiwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIG1vdmUocmVnMSwgaW1t
VGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgICAgIG1vdmUocmVnMiwgcmVnMSwgZml4ZWQpOwor
ICAgICAgICBtb3ZlKGltbVRlbXBSZWdpc3RlciwgcmVnMiwgZml4ZWQpOworICAgIH0KKworICAg
IHZvaWQgc2lnbkV4dGVuZDMyVG9QdHIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCwg
aW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIGlmIChzcmMgPT0gZGVzdCAmJiBmaXhlZCA9
PSAwKQorICAgICAgICAgICAgOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtb3ZlKHNyYywg
ZGVzdCwgZml4ZWQpOworICAgIH0KKworICAgIHZvaWQgemVyb0V4dGVuZDMyVG9QdHIoUmVnaXN0
ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAg
IGlmIChzcmMgPT0gZGVzdCAmJiBmaXhlZCA9PSAwKQorICAgICAgICAgICAgOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBtb3ZlKHNyYywgZGVzdCwgZml4ZWQpOworICAgIH0KKworICAgIC8v
IEZvcndhcmRzIC8gZXh0ZXJuYWwgY29udHJvbCBmbG93IG9wZXJhdGlvbnM6CisgICAgLy8KKyAg
ICAvLyBUaGlzIHNldCBvZiBqdW1wIGFuZCBjb25kaXRpb25hbCBicmFuY2ggb3BlcmF0aW9ucyBy
ZXR1cm4gYSBKdW1wCisgICAgLy8gb2JqZWN0IHdoaWNoIG1heSBsaW5rZWQgYXQgYSBsYXRlciBw
b2ludCwgYWxsb3cgZm9yd2FyZHMganVtcCwKKyAgICAvLyBvciBqdW1wcyB0aGF0IHdpbGwgcmVx
dWlyZSBleHRlcm5hbCBsaW5rYWdlIChhZnRlciB0aGUgY29kZSBoYXMgYmVlbgorICAgIC8vIHJl
bG9jYXRlZCkuCisgICAgLy8KKyAgICAvLyBGb3IgYnJhbmNoZXMsIHNpZ25lZCA8LCA+LCA8PSBh
bmQgPj0gYXJlIGRlbm90ZWQgYXMgbCwgZywgbGUsIGFuZCBnZQorICAgIC8vIHJlc3BlY2l0dmVs
eSwgZm9yIHVuc2lnbmVkIGNvbXBhcmlzb25zIHRoZSBuYW1lcyBiLCBhLCBiZSwgYW5kIGFlIGFy
ZQorICAgIC8vIHVzZWQgKHJlcHJlc2VudGluZyB0aGUgbmFtZXMgJ2JlbG93JyBhbmQgJ2Fib3Zl
JykuCisgICAgLy8KKyAgICAvLyBPcGVyYW5kcyB0byB0aGUgY29tcGFyaXNpb24gYXJlIHByb3Zp
ZGVkIGluIHRoZSBleHBlY3RlZCBvcmRlciwgZS5nLgorICAgIC8vIGpsZTMyKHJlZzEsIEltbTMy
KDUpKSB3aWxsIGJyYW5jaCBpZiB0aGUgdmFsdWUgaGVsZCBpbiByZWcxLCB3aGVuCisgICAgLy8g
dHJlYXRlZCBhcyBhIHNpZ25lZCAzMmJpdCB2YWx1ZSwgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRv
IDUuCisgICAgLy8KKyAgICAvLyBqeiBhbmQgam56IHRlc3Qgd2hldGhlciB0aGUgZmlyc3Qgb3Bl
cmFuZCBpcyBlcXVhbCB0byB6ZXJvLCBhbmQgdGFrZQorICAgIC8vIGFuIG9wdGlvbmFsIHNlY29u
ZCBvcGVyYW5kIG9mIGEgbWFzayB1bmRlciB3aGljaCB0byBwZXJmb3JtIHRoZSB0ZXN0LgorCisg
ICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBSZWdpc3Rl
cklEIHJpZ2h0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgaWYgKGNvbmQgPT0gRXF1
YWwgfHwgY29uZCA9PSBaZXJvKQorICAgICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIu
YnJhbmNoX2VxKGxlZnQsIHJpZ2h0KSk7CisgICAgICAgIGVsc2UgaWYgKGNvbmQgPT0gTm90RXF1
YWwgfHwgY29uZCA9PSBOb25aZXJvKQorICAgICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJs
ZXIuYnJhbmNoX25lKGxlZnQsIHJpZ2h0KSk7CisgICAgICAgIGVsc2UgaWYgKGNvbmQgPT0gQWJv
dmUpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdHUoY21wVGVtcFJlZ2lzdGVyLCByaWdo
dCwgbGVmdCk7CisgICAgICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5icmFuY2hfbmUo
Y21wVGVtcFJlZ2lzdGVyLCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKSk7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSBpZiAoY29uZCA9PSBBYm92ZU9yRXF1YWwpIHsKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLnNsdHUoY21wVGVtcFJlZ2lzdGVyLCBsZWZ0LCByaWdodCk7CisgICAgICAgICAgICByZXR1
cm4gSnVtcChtX2Fzc2VtYmxlci5icmFuY2hfZXEoY21wVGVtcFJlZ2lzdGVyLCBNSVBTUmVnaXN0
ZXJzOjp6ZXJvKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY29uZCA9PSBCZWxvdykg
eworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0dShjbXBUZW1wUmVnaXN0ZXIsIGxlZnQsIHJp
Z2h0KTsKKyAgICAgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmJyYW5jaF9uZShjbXBU
ZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onplcm8pKTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlIGlmIChjb25kID09IEJlbG93T3JFcXVhbCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
c2x0dShjbXBUZW1wUmVnaXN0ZXIsIHJpZ2h0LCBsZWZ0KTsKKyAgICAgICAgICAgIHJldHVybiBK
dW1wKG1fYXNzZW1ibGVyLmJyYW5jaF9lcShjbXBUZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6
Onplcm8pKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29uZCA9PSBHcmVhdGVyVGhhbikgewor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0KGNtcFRlbXBSZWdpc3RlciwgcmlnaHQsIGxlZnQp
OworICAgICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuYnJhbmNoX25lKGNtcFRlbXBS
ZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6emVybykpOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
aWYgKGNvbmQgPT0gR3JlYXRlclRoYW5PckVxdWFsKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5zbHQoY21wVGVtcFJlZ2lzdGVyLCBsZWZ0LCByaWdodCk7CisgICAgICAgICAgICByZXR1cm4g
SnVtcChtX2Fzc2VtYmxlci5icmFuY2hfZXEoY21wVGVtcFJlZ2lzdGVyLCBNSVBTUmVnaXN0ZXJz
Ojp6ZXJvKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY29uZCA9PSBMZXNzVGhhbikg
eworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0KGNtcFRlbXBSZWdpc3RlciwgbGVmdCwgcmln
aHQpOworICAgICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuYnJhbmNoX25lKGNtcFRl
bXBSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6emVybykpOworICAgICAgICB9CisgICAgICAgIGVs
c2UgaWYgKGNvbmQgPT0gTGVzc1RoYW5PckVxdWFsKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5zbHQoY21wVGVtcFJlZ2lzdGVyLCByaWdodCwgbGVmdCk7CisgICAgICAgICAgICByZXR1cm4g
SnVtcChtX2Fzc2VtYmxlci5icmFuY2hfZXEoY21wVGVtcFJlZ2lzdGVyLCBNSVBTUmVnaXN0ZXJz
Ojp6ZXJvKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY29uZCA9PSBPdmVyZmxvdykg
eworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICB4b3IgICAgIGNtcFRlbXAsIGxlZnQs
IHJpZ2h0CisgICAgICAgICAgICAgICAgYmdleiAgICBOb19vdmVyZmxvdywgY21wVGVtcCAgICAj
IHNhbWUgc2lnbiBiaXQgLT4gbm8gb3ZlcmZsb3cKKyAgICAgICAgICAgICAgICBub3AKKyAgICAg
ICAgICAgICAgICBzdWJ1ICAgIGNtcFRlbXAsIGxlZnQsIHJpZ2h0CisgICAgICAgICAgICAgICAg
eG9yICAgICBjbXBUZW1wLCBjbXBUZW1wLCBsZWZ0CisgICAgICAgICAgICAgICAgYmdleiAgICBO
b19vdmVyZmxvdywgY21wVGVtcCAgICAjIHNhbWUgc2lnbiBiaXQgLT4gbm8gb3ZlcmZsb3cKKyAg
ICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAgICAgICBiICAgICAgIE92ZXJmbG93CisgICAg
ICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgbm9w
CisgICAgICAgICAgICAgIE5vX292ZXJmbG93OgorICAgICAgICAgICAgKi8KKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLnhvcl9pbnNuKGNtcFRlbXBSZWdpc3RlciwgbGVmdCwgcmlnaHQpOworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuYmdleihjbXBUZW1wUmVnaXN0ZXIsIDkpOworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdWJ1KGNtcFRl
bXBSZWdpc3RlciwgbGVmdCwgcmlnaHQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIueG9yX2lu
c24oY21wVGVtcFJlZ2lzdGVyLCBjbXBUZW1wUmVnaXN0ZXIsIGxlZnQpOworICAgICAgICAgICAg
bV9hc3NlbWJsZXIuYmdleihjbXBUZW1wUmVnaXN0ZXIsIDUpOworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIubm9wKCk7CisgICAgICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qbXAoKSk7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY29uZCA9PSBTaWduZWQpIHsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLnN1YnUoY21wVGVtcFJlZ2lzdGVyLCBsZWZ0LCByaWdodCk7CisgICAg
ICAgICAgICAvLyBDaGVjayBpZiB0aGUgcmVzdWx0IGlzIG5lZ2F0aXZlLgorICAgICAgICAgICAg
bV9hc3NlbWJsZXIuc2x0KGNtcFRlbXBSZWdpc3RlciwgY21wVGVtcFJlZ2lzdGVyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE1JUFNSZWdpc3RlcnM6Onplcm8pOworICAgICAgICAgICAg
cmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuYnJhbmNoX25lKGNtcFRlbXBSZWdpc3RlciwgTUlQU1Jl
Z2lzdGVyczo6emVybykpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEFT
U0VSVCgwKTsKKworICAgICAgICByZXR1cm4gSnVtcCgpOworICAgIH0KKworICAgIEp1bXAgYnJh
bmNoMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgSW1tMzIgcmlnaHQsIGludCBm
aXhlZCA9IDApCisgICAgeworICAgICAgICBtb3ZlKHJpZ2h0LCBpbW1UZW1wUmVnaXN0ZXIsIGZp
eGVkKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIGxlZnQsIGltbVRlbXBSZWdpc3Rl
ciwgZml4ZWQpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIFJl
Z2lzdGVySUQgbGVmdCwgQWRkcmVzcyByaWdodCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAg
ICAgIGxvYWQzMihyaWdodCwgZGF0YVRlbXBSZWdpc3RlciwgZml4ZWQpOworICAgICAgICByZXR1
cm4gYnJhbmNoMzIoY29uZCwgbGVmdCwgZGF0YVRlbXBSZWdpc3RlciwgZml4ZWQpOworICAgIH0K
KworICAgIEp1bXAgYnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgbGVmdCwgUmVnaXN0
ZXJJRCByaWdodCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIGxvYWQzMihsZWZ0LCBk
YXRhVGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBk
YXRhVGVtcFJlZ2lzdGVyLCByaWdodCwgZml4ZWQpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNo
MzIoQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgbGVmdCwgSW1tMzIgcmlnaHQsIGludCBmaXhlZCA9
IDApCisgICAgeworICAgICAgICBsb2FkMzIobGVmdCwgZGF0YVRlbXBSZWdpc3RlciwgZml4ZWQp
OworICAgICAgICBtb3ZlKHJpZ2h0LCBpbW1UZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAgICAgICAg
cmV0dXJuIGJyYW5jaDMyKGNvbmQsIGRhdGFUZW1wUmVnaXN0ZXIsIGltbVRlbXBSZWdpc3Rlciwg
Zml4ZWQpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIEJhc2VJ
bmRleCBsZWZ0LCBJbW0zMiByaWdodCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIGxv
YWQzMihsZWZ0LCBkYXRhVGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgICAgIC8vIEJlIGNhcmVm
dWwgdGhhdCB0aGUgcHJldmlvdXMgbG9hZDMyKCkgdXNlcyBpbW1UZW1wUmVnaXN0ZXIuCisgICAg
ICAgIC8vIFNvLCB3ZSBuZWVkIHRvIHB1dCBtb3ZlKCkgYWZ0ZXIgbG9hZDMyKCkuCisgICAgICAg
IG1vdmUocmlnaHQsIGltbVRlbXBSZWdpc3RlciwgZml4ZWQpOworICAgICAgICByZXR1cm4gYnJh
bmNoMzIoY29uZCwgZGF0YVRlbXBSZWdpc3RlciwgaW1tVGVtcFJlZ2lzdGVyLCBmaXhlZCk7Cisg
ICAgfQorCisgICAgSnVtcCBicmFuY2gzMldpdGhVbmFsaWduZWRIYWxmV29yZHMoQ29uZGl0aW9u
IGNvbmQsIEJhc2VJbmRleCBsZWZ0LCBJbW0zMiByaWdodCwgaW50IGZpeGVkID0gMCkKKyAgICB7
CisgICAgICAgIGxvYWQzMldpdGhVbmFsaWduZWRIYWxmV29yZHMobGVmdCwgZGF0YVRlbXBSZWdp
c3RlciwgZml4ZWQpOworICAgICAgICAvLyBCZSBjYXJlZnVsIHRoYXQgdGhlIHByZXZpb3VzIGxv
YWQzMldpdGhVbmFsaWduZWRIYWxmV29yZHMoKQorICAgICAgICAvLyB1c2VzIGltbVRlbXBSZWdp
c3Rlci4KKyAgICAgICAgLy8gU28sIHdlIG5lZWQgdG8gcHV0IG1vdmUoKSBhZnRlciBsb2FkMzJX
aXRoVW5hbGlnbmVkSGFsZldvcmRzKCkuCisgICAgICAgIG1vdmUocmlnaHQsIGltbVRlbXBSZWdp
c3RlciwgZml4ZWQpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgZGF0YVRlbXBSZWdp
c3RlciwgaW1tVGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2gz
MihDb25kaXRpb24gY29uZCwgQWJzb2x1dGVBZGRyZXNzIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQs
IGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBsb2FkMzIobGVmdC5tX3B0ciwgZGF0YVRl
bXBSZWdpc3RlciwgZml4ZWQpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgZGF0YVRl
bXBSZWdpc3RlciwgcmlnaHQsIGZpeGVkKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDMyKENv
bmRpdGlvbiBjb25kLCBBYnNvbHV0ZUFkZHJlc3MgbGVmdCwgSW1tMzIgcmlnaHQsIGludCBmaXhl
ZCA9IDApCisgICAgeworICAgICAgICBsb2FkMzIobGVmdC5tX3B0ciwgZGF0YVRlbXBSZWdpc3Rl
ciwgZml4ZWQpOworICAgICAgICBtb3ZlKHJpZ2h0LCBpbW1UZW1wUmVnaXN0ZXIsIGZpeGVkKTsK
KyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIGRhdGFUZW1wUmVnaXN0ZXIsIGltbVRlbXBS
ZWdpc3RlciwgZml4ZWQpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoMTYoQ29uZGl0aW9uIGNv
bmQsIEJhc2VJbmRleCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0LCBpbnQgZml4ZWQgPSAwKQorICAg
IHsKKyAgICAgICAgbG9hZDE2KGxlZnQsIGRhdGFUZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAgICAg
ICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIGRhdGFUZW1wUmVnaXN0ZXIsIHJpZ2h0LCBmaXhlZCk7
CisgICAgfQorCisgICAgSnVtcCBicmFuY2gxNihDb25kaXRpb24gY29uZCwgQmFzZUluZGV4IGxl
ZnQsIEltbTMyIHJpZ2h0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCEo
cmlnaHQubV92YWx1ZSAmIDB4RkZGRjAwMDApKTsKKyAgICAgICAgbG9hZDE2KGxlZnQsIGRhdGFU
ZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAgICAgICAgLy8gQmUgY2FyZWZ1bCB0aGF0IHRoZSBwcmV2
aW91cyBsb2FkMTYoKSB1c2VzIGltbVRlbXBSZWdpc3Rlci4KKyAgICAgICAgLy8gU28sIHdlIG5l
ZWQgdG8gcHV0IG1vdmUoKSBhZnRlciBsb2FkMTYoKS4KKyAgICAgICAgbW92ZShyaWdodCwgaW1t
VGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBkYXRh
VGVtcFJlZ2lzdGVyLCBpbW1UZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAgICB9CisKKyAgICBKdW1w
IGJyYW5jaFRlc3QzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCByZWcsIFJlZ2lzdGVySUQg
bWFzaywgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBaZXJv
KSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZF9pbnNuKGNt
cFRlbXBSZWdpc3RlciwgcmVnLCBtYXNrKTsKKyAgICAgICAgaWYgKGNvbmQgPT0gWmVybykKKyAg
ICAgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmJyYW5jaF9lcShjbXBUZW1wUmVnaXN0
ZXIsIE1JUFNSZWdpc3RlcnM6Onplcm8pKTsKKyAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJs
ZXIuYnJhbmNoX25lKGNtcFRlbXBSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6emVybykpOworICAg
IH0KKworICAgIEp1bXAgYnJhbmNoVGVzdDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHJl
ZywgSW1tMzIgbWFzayA9IEltbTMyKC0xKSwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAg
IEFTU0VSVCgoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisgICAgICAgIGlm
IChtYXNrLm1fdmFsdWUgPT0gLTEgJiYgZml4ZWQgPT0gMCkgeworICAgICAgICAgICAgaWYgKGNv
bmQgPT0gWmVybykKKyAgICAgICAgICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5icmFu
Y2hfZXEocmVnLCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKSk7CisgICAgICAgICAgICByZXR1cm4gSnVt
cChtX2Fzc2VtYmxlci5icmFuY2hfbmUocmVnLCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKSk7CisgICAg
ICAgIH0KKyAgICAgICAgbW92ZShtYXNrLCBpbW1UZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAgICAg
ICAgcmV0dXJuIGJyYW5jaFRlc3QzMihjb25kLCByZWcsIGltbVRlbXBSZWdpc3RlciwgZml4ZWQp
OworICAgIH0KKworICAgIEp1bXAgYnJhbmNoVGVzdDMyKENvbmRpdGlvbiBjb25kLCBBZGRyZXNz
IGFkZHJlc3MsIEltbTMyIG1hc2sgPSBJbW0zMigtMSksIGludCBmaXhlZCA9IDApCisgICAgewor
ICAgICAgICBsb2FkMzIoYWRkcmVzcywgZGF0YVRlbXBSZWdpc3RlciwgZml4ZWQpOworICAgICAg
ICByZXR1cm4gYnJhbmNoVGVzdDMyKGNvbmQsIGRhdGFUZW1wUmVnaXN0ZXIsIG1hc2ssIGZpeGVk
KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFRlc3QzMihDb25kaXRpb24gY29uZCwgQmFzZUlu
ZGV4IGFkZHJlc3MsIEltbTMyIG1hc2sgPSBJbW0zMigtMSksIGludCBmaXhlZCA9IDApCisgICAg
eworICAgICAgICBsb2FkMzIoYWRkcmVzcywgZGF0YVRlbXBSZWdpc3RlciwgZml4ZWQpOworICAg
ICAgICByZXR1cm4gYnJhbmNoVGVzdDMyKGNvbmQsIGRhdGFUZW1wUmVnaXN0ZXIsIG1hc2ssIGZp
eGVkKTsKKyAgICB9CisKKyAgICBKdW1wIGp1bXAoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEp1
bXAobV9hc3NlbWJsZXIuam1wKCkpOworICAgIH0KKworICAgIHZvaWQganVtcChSZWdpc3RlcklE
IHRhcmdldCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmptcF9yZWdpc3Rlcih0YXJnZXQp
OworICAgIH0KKworICAgIHZvaWQganVtcChBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAg
ICBpbnQgZml4ZWQgPSAxOworICAgICAgICBsb2FkMzIoYWRkcmVzcywgTUlQU1JlZ2lzdGVyczo6
dDksIGZpeGVkKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuam1wX3JlZ2lzdGVyKE1JUFNSZWdpc3Rl
cnM6OnQ5KTsKKyAgICB9CisKKyAgICAvLyBBcml0aG1ldGljIGNvbnRyb2wgZmxvdyBvcGVyYXRp
b25zOgorICAgIC8vCisgICAgLy8gVGhpcyBzZXQgb2YgY29uZGl0aW9uYWwgYnJhbmNoIG9wZXJh
dGlvbnMgYnJhbmNoIGJhc2VkCisgICAgLy8gb24gdGhlIHJlc3VsdCBvZiBhbiBhcml0aG1ldGlj
IG9wZXJhdGlvbi4gIFRoZSBvcGVyYXRpb24KKyAgICAvLyBpcyBwZXJmb3JtZWQgYXMgbm9ybWFs
LCBzdG9yaW5nIHRoZSByZXN1bHQuCisgICAgLy8KKyAgICAvLyAqIGp6IG9wZXJhdGlvbnMgYnJh
bmNoIGlmIHRoZSByZXN1bHQgaXMgemVyby4KKyAgICAvLyAqIGpvIG9wZXJhdGlvbnMgYnJhbmNo
IGlmIHRoZSAoc2lnbmVkKSBhcml0aG1ldGljCisgICAgLy8gICBvcGVyYXRpb24gY2F1c2VkIGFu
IG92ZXJmbG93IHRvIG9jY3VyLgorCisgICAgSnVtcCBicmFuY2hBZGQzMihDb25kaXRpb24gY29u
ZCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7
CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBPdmVyZmxvdykgfHwgKGNvbmQgPT0gU2lnbmVkKSB8
fCAoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisgICAgICAgIGlmIChjb25k
ID09IE92ZXJmbG93KSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgIG1vdmUgICAg
ZGVzdCwgZGF0YVRlbXAKKyAgICAgICAgICAgICAgICB4b3IgICAgIGNtcFRlbXAsIGRhdGFUZW1w
LCBzcmMKKyAgICAgICAgICAgICAgICBibHR6ICAgIGNtcFRlbXAsIE5vX292ZXJmbG93ICAgICMg
ZGlmZiBzaWduIGJpdCAtPiBubyBvdmVyZmxvdworICAgICAgICAgICAgICAgIGFkZHUgICAgZGVz
dCwgZGF0YVRlbXAsIHNyYworICAgICAgICAgICAgICAgIHhvciAgICAgY21wVGVtcCwgZGVzdCwg
ZGF0YVRlbXAKKyAgICAgICAgICAgICAgICBiZ2V6ICAgIGNtcFRlbXAsIE5vX292ZXJmbG93ICAg
ICMgc2FtZSBzaWduIGJpZyAtPiBubyBvdmVyZmxvdworICAgICAgICAgICAgICAgIG5vcAorICAg
ICAgICAgICAgICAgIGIgICAgICAgT3ZlcmZsb3cKKyAgICAgICAgICAgICAgICBub3AKKyAgICAg
ICAgICAgICAgICBub3AKKyAgICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAgIE5vX292ZXJm
bG93OgorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1vdmUoZGVzdCwgZGF0YVRlbXBSZWdp
c3Rlcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3JfaW5zbihjbXBUZW1wUmVnaXN0ZXIs
IGRhdGFUZW1wUmVnaXN0ZXIsIHNyYyk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5ibHR6KGNt
cFRlbXBSZWdpc3RlciwgOCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGRlc3QsIGRh
dGFUZW1wUmVnaXN0ZXIsIHNyYyk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3JfaW5zbihj
bXBUZW1wUmVnaXN0ZXIsIGRlc3QsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgbV9h
c3NlbWJsZXIuYmdleihjbXBUZW1wUmVnaXN0ZXIsIDUpOworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIubm9wKCk7CisgICAgICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qbXAoKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY29uZCA9PSBTaWduZWQpIHsKKyAgICAgICAgICAg
IGFkZDMyKHNyYywgZGVzdCwgZml4ZWQpOworICAgICAgICAgICAgLy8gQ2hlY2sgaWYgZGVzdCBp
cyBuZWdhdGl2ZS4KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdChjbXBUZW1wUmVnaXN0ZXIs
IGRlc3QsIE1JUFNSZWdpc3RlcnM6Onplcm8pOworICAgICAgICAgICAgcmV0dXJuIEp1bXAobV9h
c3NlbWJsZXIuYnJhbmNoX25lKGNtcFRlbXBSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6emVybykp
OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGNvbmQgPT0gWmVybykgeworICAgICAgICAg
ICAgYWRkMzIoc3JjLCBkZXN0LCBmaXhlZCk7CisgICAgICAgICAgICByZXR1cm4gSnVtcChtX2Fz
c2VtYmxlci5icmFuY2hfZXEoZGVzdCwgTUlQU1JlZ2lzdGVyczo6emVybykpOworICAgICAgICB9
CisgICAgICAgIGVsc2UgaWYgKGNvbmQgPT0gTm9uWmVybykgeworICAgICAgICAgICAgYWRkMzIo
c3JjLCBkZXN0LCBmaXhlZCk7CisgICAgICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5i
cmFuY2hfbmUoZGVzdCwgTUlQU1JlZ2lzdGVyczo6emVybykpOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIEp1bXAoKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaEFkZDMyKENvbmRpdGlv
biBjb25kLCBJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7
CisgICAgICAgIG1vdmUoaW1tLCBpbW1UZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAgICAgICAgcmV0
dXJuIGJyYW5jaEFkZDMyKGNvbmQsIGltbVRlbXBSZWdpc3RlciwgZGVzdCwgZml4ZWQpOworICAg
IH0KKworICAgIEp1bXAgYnJhbmNoTXVsMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgc3Jj
LCBSZWdpc3RlcklEIGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBBU1NFUlQo
KGNvbmQgPT0gT3ZlcmZsb3cpIHx8IChjb25kID09IFNpZ25lZCkgfHwgKGNvbmQgPT0gWmVybykg
fHwgKGNvbmQgPT0gTm9uWmVybykpOworICAgICAgICBpZiAoY29uZCA9PSBPdmVyZmxvdykgewor
ICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICBtdWx0ICAgIHNyYywgZGVzdAorICAgICAg
ICAgICAgICAgIG1maGkgICAgZGF0YVRlbXAKKyAgICAgICAgICAgICAgICBtZmxvICAgIGRlc3QK
KyAgICAgICAgICAgICAgICBzcmEgICAgIGFkZHJUZW1wLCBkZXN0LCAzMQorICAgICAgICAgICAg
ICAgIGJlcSAgICAgZGF0YVRlbXAsIGFkZHJUZW1wLCBOb19vdmVyZmxvdyAjIGFsbCBzaWduIGJp
dHMgKGJpdCA2MyB0byBiaXQgMzEpIGFyZSB0aGUgc2FtZSAtPiBubyBvdmVyZmxvdworICAgICAg
ICAgICAgICAgIG5vcAorICAgICAgICAgICAgICAgIGIgICAgICAgT3ZlcmZsb3cKKyAgICAgICAg
ICAgICAgICBub3AKKyAgICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAgICAgICBub3AKKyAg
ICAgICAgICAgIE5vX292ZXJmbG93OgorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLm11bHQoc3JjLCBkZXN0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1maGkoZGF0
YVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tZmxvKGRlc3QpOworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuc3JhKGFkZHJUZW1wUmVnaXN0ZXIsIGRlc3QsIDMxKTsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLmJlcShkYXRhVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lz
dGVyLCA1KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICAgICAgcmV0
dXJuIEp1bXAobV9hc3NlbWJsZXIuam1wKCkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYg
KGNvbmQgPT0gU2lnbmVkKSB7CisgICAgICAgICAgICBtdWwzMihzcmMsIGRlc3QsIGZpeGVkKTsK
KyAgICAgICAgICAgIC8vIENoZWNrIGlmIGRlc3QgaXMgbmVnYXRpdmUuCisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5zbHQoY21wVGVtcFJlZ2lzdGVyLCBkZXN0LCBNSVBTUmVnaXN0ZXJzOjp6ZXJv
KTsKKyAgICAgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmJyYW5jaF9uZShjbXBUZW1w
UmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onplcm8pKTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
IGlmIChjb25kID09IFplcm8pIHsKKyAgICAgICAgICAgIG11bDMyKHNyYywgZGVzdCwgZml4ZWQp
OworICAgICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuYnJhbmNoX2VxKGRlc3QsIE1J
UFNSZWdpc3RlcnM6Onplcm8pKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChjb25kID09
IE5vblplcm8pIHsKKyAgICAgICAgICAgIG11bDMyKHNyYywgZGVzdCwgZml4ZWQpOworICAgICAg
ICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuYnJhbmNoX25lKGRlc3QsIE1JUFNSZWdpc3Rl
cnM6Onplcm8pKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBKdW1wKCk7CisgICAgfQor
CisgICAgSnVtcCBicmFuY2hNdWwzMihDb25kaXRpb24gY29uZCwgSW1tMzIgaW1tLCBSZWdpc3Rl
cklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAg
bW92ZShpbW0sIGltbVRlbXBSZWdpc3RlciwgZml4ZWQpOworICAgICAgICByZXR1cm4gYnJhbmNo
TXVsMzIoY29uZCwgaW1tVGVtcFJlZ2lzdGVyLCBkZXN0LCBmaXhlZCk7CisgICAgfQorCisgICAg
SnVtcCBicmFuY2hTdWIzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVy
SUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBP
dmVyZmxvdykgfHwgKGNvbmQgPT0gU2lnbmVkKSB8fCAoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9
PSBOb25aZXJvKSk7CisgICAgICAgIGlmIChjb25kID09IE92ZXJmbG93KSB7CisgICAgICAgICAg
ICAvKgorICAgICAgICAgICAgICAgIG1vdmUgICAgZGVzdCwgZGF0YVRlbXAKKyAgICAgICAgICAg
ICAgICB4b3IgICAgIGNtcFRlbXAsIGRhdGFUZW1wLCBzcmMKKyAgICAgICAgICAgICAgICBiZ2V6
ICAgIGNtcFRlbXAsIE5vX292ZXJmbG93ICAgICMgc2FtZSBzaWduIGJpdCAtPiBubyBvdmVyZmxv
dworICAgICAgICAgICAgICAgIHN1YnUgICAgZGVzdCwgZGF0YVRlbXAsIHNyYworICAgICAgICAg
ICAgICAgIHhvciAgICAgY21wVGVtcCwgZGVzdCwgZGF0YVRlbXAKKyAgICAgICAgICAgICAgICBi
Z2V6ICAgIGNtcFRlbXAsIE5vX292ZXJmbG93ICAgICMgc2FtZSBzaWduIGJpdCAtPiBubyBvdmVy
ZmxvdworICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgICAgIGIgICAgICAgT3ZlcmZs
b3cKKyAgICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAg
ICAgICBub3AKKyAgICAgICAgICAgIE5vX292ZXJmbG93OgorICAgICAgICAgICAgKi8KKyAgICAg
ICAgICAgIG1vdmUoZGVzdCwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci54b3JfaW5zbihjbXBUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsIHNyYyk7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5iZ2V6KGNtcFRlbXBSZWdpc3RlciwgOCk7CisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5zdWJ1KGRlc3QsIGRhdGFUZW1wUmVnaXN0ZXIsIHNyYyk7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci54b3JfaW5zbihjbXBUZW1wUmVnaXN0ZXIsIGRlc3QsIGRhdGFU
ZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYmdleihjbXBUZW1wUmVnaXN0
ZXIsIDUpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgICAgICByZXR1
cm4gSnVtcChtX2Fzc2VtYmxlci5qbXAoKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAo
Y29uZCA9PSBTaWduZWQpIHsKKyAgICAgICAgICAgIHN1YjMyKHNyYywgZGVzdCwgZml4ZWQpOwor
ICAgICAgICAgICAgLy8gQ2hlY2sgaWYgZGVzdCBpcyBuZWdhdGl2ZS4KKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLnNsdChjbXBUZW1wUmVnaXN0ZXIsIGRlc3QsIE1JUFNSZWdpc3RlcnM6Onplcm8p
OworICAgICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuYnJhbmNoX25lKGNtcFRlbXBS
ZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6emVybykpOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
aWYgKGNvbmQgPT0gWmVybykgeworICAgICAgICAgICAgc3ViMzIoc3JjLCBkZXN0LCBmaXhlZCk7
CisgICAgICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5icmFuY2hfZXEoZGVzdCwgTUlQ
U1JlZ2lzdGVyczo6emVybykpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGNvbmQgPT0g
Tm9uWmVybykgeworICAgICAgICAgICAgc3ViMzIoc3JjLCBkZXN0LCBmaXhlZCk7CisgICAgICAg
ICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5icmFuY2hfbmUoZGVzdCwgTUlQU1JlZ2lzdGVy
czo6emVybykpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIEp1bXAoKTsKKyAgICB9CisK
KyAgICBKdW1wIGJyYW5jaFN1YjMyKENvbmRpdGlvbiBjb25kLCBJbW0zMiBpbW0sIFJlZ2lzdGVy
SUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIG1vdmUoaW1tLCBpbW1UZW1w
UmVnaXN0ZXIsIGZpeGVkKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFN1YjMyKGNvbmQsIGltbVRl
bXBSZWdpc3RlciwgZGVzdCwgZml4ZWQpOworICAgIH0KKworICAgIC8vIE1pc2NlbGxhbmVvdXMg
b3BlcmF0aW9uczoKKworICAgIHZvaWQgYnJlYWtwb2ludCgpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5ia3B0KCk7CisgICAgfQorCisgICAgQ2FsbCBuZWFyQ2FsbCgpCisgICAgeworICAg
ICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5mdW5jdGlvbl9jYWxsKCksIENhbGw6Okxpbmth
YmxlTmVhcik7CisgICAgfQorCisgICAgQ2FsbCBjYWxsKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBDYWxsKG1fYXNzZW1ibGVyLmZhcl9mdW5jdGlvbl9jYWxsKCksIENhbGw6OkxpbmthYmxlKTsK
KyAgICB9CisKKyAgICBDYWxsIGNhbGwoUmVnaXN0ZXJJRCB0YXJnZXQpCisgICAgeworICAgICAg
ICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5mdW5jdGlvbl9jYWxsX3ZpYV9yZWdpc3Rlcih0YXJn
ZXQpLCBDYWxsOjpOb25lKTsKKyAgICB9CisKKyAgICBDYWxsIGNhbGwoQWRkcmVzcyBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgaW50IGZpeGVkID0gMTsKKyAgICAgICAgbG9hZDMyKGFkZHJlc3Ms
IE1JUFNSZWdpc3RlcnM6OnQ5LCBmaXhlZCk7CisgICAgICAgIHJldHVybiBDYWxsKG1fYXNzZW1i
bGVyLmZ1bmN0aW9uX2NhbGxfdmlhX3JlZ2lzdGVyKE1JUFNSZWdpc3RlcnM6OnQ5KSwgQ2FsbDo6
Tm9uZSk7CisgICAgfQorCisgICAgdm9pZCByZXQoKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIuam1wX3JlZ2lzdGVyKE1JUFNSZWdpc3RlcnM6OnJhKTsKKyAgICB9CisKKyAgICB2b2lkIHNl
dDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQsIFJl
Z2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIGlmIChjb25kID09
IEVxdWFsIHx8IGNvbmQgPT0gWmVybykgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIueG9yX2lu
c24oZGVzdCwgbGVmdCwgcmlnaHQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0aXUoZGVz
dCwgZGVzdCwgMSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY29uZCA9PSBOb3RFcXVh
bCB8fCBjb25kID09IE5vblplcm8pIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnhvcl9pbnNu
KGRlc3QsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdHUoZGVzdCwg
TUlQU1JlZ2lzdGVyczo6emVybywgZGVzdCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAo
Y29uZCA9PSBBYm92ZSkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdHUoZGVzdCwgcmlnaHQs
IGxlZnQpOworICAgICAgICBlbHNlIGlmIChjb25kID09IEFib3ZlT3JFcXVhbCkgeworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuc2x0dShkZXN0LCBsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBt
X2Fzc2VtYmxlci54b3JpKGRlc3QsIGRlc3QsIDEpOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
aWYgKGNvbmQgPT0gQmVsb3cpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHR1KGRlc3QsIGxl
ZnQsIHJpZ2h0KTsKKyAgICAgICAgZWxzZSBpZiAoY29uZCA9PSBCZWxvd09yRXF1YWwpIHsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdHUoZGVzdCwgcmlnaHQsIGxlZnQpOworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIueG9yaShkZXN0LCBkZXN0LCAxKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoY29uZCA9PSBHcmVhdGVyVGhhbikKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdChkZXN0
LCByaWdodCwgbGVmdCk7CisgICAgICAgIGVsc2UgaWYgKGNvbmQgPT0gR3JlYXRlclRoYW5PckVx
dWFsKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHQoZGVzdCwgbGVmdCwgcmlnaHQpOwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIueG9yaShkZXN0LCBkZXN0LCAxKTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlIGlmIChjb25kID09IExlc3NUaGFuKQorICAgICAgICAgICAgbV9hc3NlbWJs
ZXIuc2x0KGRlc3QsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgZWxzZSBpZiAoY29uZCA9PSBMZXNz
VGhhbk9yRXF1YWwpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdChkZXN0LCByaWdodCwg
bGVmdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3JpKGRlc3QsIGRlc3QsIDEpOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgaWYgKGNvbmQgPT0gT3ZlcmZsb3cpIHsKKyAgICAgICAgICAg
IC8qCisgICAgICAgICAgICAgICAgeG9yICAgICBjbXBUZW1wLCBsZWZ0LCByaWdodAorICAgICAg
ICAgICAgICAgIGJnZXogICAgRG9uZSwgY21wVGVtcCAgICMgc2FtZSBzaWduIGJpdCAtPiBubyBv
dmVyZmxvdworICAgICAgICAgICAgICAgIG1vdmUgICAgZGVzdCwgMAorICAgICAgICAgICAgICAg
IHN1YnUgICAgY21wVGVtcCwgbGVmdCwgcmlnaHQKKyAgICAgICAgICAgICAgICB4b3IgICAgIGNt
cFRlbXAsIGNtcFRlbXAsIGxlZnQgIyBkaWZmIHNpZ24gYml0IC0+IG92ZXJmbG93CisgICAgICAg
ICAgICAgICAgc2x0ICAgICBkZXN0LCBjbXBUZW1wLCAwCisgICAgICAgICAgICAgIERvbmU6Cisg
ICAgICAgICAgICAqLworICAgICAgICAgICAgbV9hc3NlbWJsZXIueG9yX2luc24oY21wVGVtcFJl
Z2lzdGVyLCBsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5iZ2V6KGNtcFRl
bXBSZWdpc3RlciwgNCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZlKGRlc3QsIE1JUFNS
ZWdpc3RlcnM6Onplcm8pOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3VidShjbXBUZW1wUmVn
aXN0ZXIsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnhvcl9pbnNuKGNt
cFRlbXBSZWdpc3RlciwgY21wVGVtcFJlZ2lzdGVyLCBsZWZ0KTsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLnNsdChkZXN0LCBjbXBUZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onplcm8pOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGNvbmQgPT0gU2lnbmVkKSB7CisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5zdWJ1KGRlc3QsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIC8vIENo
ZWNrIGlmIHRoZSByZXN1bHQgaXMgbmVnYXRpdmUuCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5z
bHQoZGVzdCwgZGVzdCwgTUlQU1JlZ2lzdGVyczo6emVybyk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICB2b2lkIHNldDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIEltbTMyIHJp
Z2h0LCBSZWdpc3RlcklEIGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBtb3Zl
KHJpZ2h0LCBpbW1UZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAgICAgICAgc2V0MzIoY29uZCwgbGVm
dCwgaW1tVGVtcFJlZ2lzdGVyLCBkZXN0LCBmaXhlZCk7CisgICAgfQorCisgICAgdm9pZCBzZXRU
ZXN0MzIoQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgYWRkcmVzcywgSW1tMzIgbWFzaywgUmVnaXN0
ZXJJRCBkZXN0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgQVNTRVJUKChjb25kID09
IFplcm8pIHx8IChjb25kID09IE5vblplcm8pKTsKKyAgICAgICAgbG9hZDMyKGFkZHJlc3MsIGRh
dGFUZW1wUmVnaXN0ZXIpOworICAgICAgICBpZiAobWFzay5tX3ZhbHVlID09IC0xICYmIGZpeGVk
ID09IDApIHsKKyAgICAgICAgICAgIGlmIChjb25kID09IFplcm8pCisgICAgICAgICAgICAgICAg
bV9hc3NlbWJsZXIuc2x0aXUoZGVzdCwgZGF0YVRlbXBSZWdpc3RlciwgMSk7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0dShkZXN0LCBNSVBTUmVnaXN0
ZXJzOjp6ZXJvLCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIG1vdmUobWFzaywgaW1tVGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5hbmRfaW5zbihjbXBUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbW1UZW1wUmVnaXN0ZXIpOwor
ICAgICAgICAgICAgaWYgKGNvbmQgPT0gWmVybykKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5zbHRpdShkZXN0LCBjbXBUZW1wUmVnaXN0ZXIsIDEpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdHUoZGVzdCwgTUlQU1JlZ2lzdGVyczo6emVybywg
Y21wVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIERhdGFMYWJlbDMyIG1v
dmVXaXRoUGF0Y2goSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBp
bnQgZml4ZWQgPSAxOworICAgICAgICBEYXRhTGFiZWwzMiBsYWJlbCh0aGlzKTsKKyAgICAgICAg
bW92ZShpbW0sIGRlc3QsIGZpeGVkKTsKKyAgICAgICAgcmV0dXJuIGxhYmVsOworICAgIH0KKwor
ICAgIERhdGFMYWJlbFB0ciBtb3ZlV2l0aFBhdGNoKEltbVB0ciBpbml0aWFsVmFsdWUsIFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGludCBmaXhlZCA9IDE7CisgICAgICAgIERhdGFM
YWJlbFB0ciBsYWJlbCh0aGlzKTsKKyAgICAgICAgbW92ZShpbml0aWFsVmFsdWUsIGRlc3QsIGZp
eGVkKTsKKyAgICAgICAgcmV0dXJuIGxhYmVsOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoUHRy
V2l0aFBhdGNoKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIERhdGFMYWJlbFB0ciYg
ZGF0YUxhYmVsLCBJbW1QdHIgaW5pdGlhbFJpZ2h0VmFsdWUgPSBJbW1QdHIoMCkpCisgICAgewor
ICAgICAgICBpbnQgZml4ZWQgPSAxOworICAgICAgICBkYXRhTGFiZWwgPSBtb3ZlV2l0aFBhdGNo
KGluaXRpYWxSaWdodFZhbHVlLCBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gYnJh
bmNoMzIoY29uZCwgbGVmdCwgaW1tVGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgfQorCisgICAg
SnVtcCBicmFuY2hQdHJXaXRoUGF0Y2goQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgbGVmdCwgRGF0
YUxhYmVsUHRyJiBkYXRhTGFiZWwsIEltbVB0ciBpbml0aWFsUmlnaHRWYWx1ZSA9IEltbVB0cigw
KSkKKyAgICB7CisgICAgICAgIGludCBmaXhlZCA9IDE7CisgICAgICAgIGxvYWQzMihsZWZ0LCBk
YXRhVGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgICAgIGRhdGFMYWJlbCA9IG1vdmVXaXRoUGF0
Y2goaW5pdGlhbFJpZ2h0VmFsdWUsIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBi
cmFuY2gzMihjb25kLCBkYXRhVGVtcFJlZ2lzdGVyLCBpbW1UZW1wUmVnaXN0ZXIsIGZpeGVkKTsK
KyAgICB9CisKKyAgICBEYXRhTGFiZWxQdHIgc3RvcmVQdHJXaXRoUGF0Y2goSW1tUHRyIGluaXRp
YWxWYWx1ZSwgSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBpbnQgZml4
ZWQgPSAxOworICAgICAgICBEYXRhTGFiZWxQdHIgZGF0YUxhYmVsID0gbW92ZVdpdGhQYXRjaChp
bml0aWFsVmFsdWUsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICBzdG9yZTMyKGRhdGFUZW1w
UmVnaXN0ZXIsIGFkZHJlc3MsIGZpeGVkKTsKKyAgICAgICAgcmV0dXJuIGRhdGFMYWJlbDsKKyAg
ICB9CisKKyAgICBEYXRhTGFiZWxQdHIgc3RvcmVQdHJXaXRoUGF0Y2goSW1wbGljaXRBZGRyZXNz
IGFkZHJlc3MpCisgICAgeworICAgICAgICByZXR1cm4gc3RvcmVQdHJXaXRoUGF0Y2goSW1tUHRy
KDApLCBhZGRyZXNzKTsKKyAgICB9CisKKyAgICBDYWxsIHRhaWxSZWN1cnNpdmVDYWxsKCkKKyAg
ICB7CisgICAgICAgIC8vIExpa2UgYSBub3JtYWwgY2FsbCwgYnV0IGRvbid0IGxpbmsuCisgICAg
ICAgIGludCBmaXhlZCA9IDE7CisgICAgICAgIG1vdmUoSW1tMzIoMCksIGFkZHJUZW1wUmVnaXN0
ZXIsIGZpeGVkKTsKKyAgICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIudGFpbF9mdW5jdGlv
bl9jYWxsX3ZpYV9yZWdpc3RlcihhZGRyVGVtcFJlZ2lzdGVyKSwKKyAgICAgICAgICAgICAgICAg
ICAgQ2FsbDo6TGlua2FibGUpOworICAgIH0KKworICAgIENhbGwgbWFrZVRhaWxSZWN1cnNpdmVD
YWxsKEp1bXAgb2xkSnVtcCkKKyAgICB7CisgICAgICAgIG9sZEp1bXAubGluayh0aGlzKTsKKyAg
ICAgICAgcmV0dXJuIHRhaWxSZWN1cnNpdmVDYWxsKCk7CisgICAgfQorCisgICAgdm9pZCBsb2Fk
RG91YmxlKEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzLCBGUFJlZ2lzdGVySUQgZGVzdCwgaW50IGZp
eGVkID0gMCkKKyAgICB7CisjaWYgX19taXBzID09IDEKKyAgICAgICAgLyoKKyAgICAgICAgICAg
IGxpICAgICAgICAgIGFkZHJUZW1wLCBhZGRyZXNzLm9mZnNldAorICAgICAgICAgICAgYWRkdSAg
ICAgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBiYXNlCisgICAgICAgICAgICBsd2MxICAgICAgICBk
ZXN0LCAwKGFkZHJUZW1wKQorICAgICAgICAgICAgbHdjMSAgICAgICAgZGVzdCsxLCA0KGFkZHJU
ZW1wKQorICAgICAgICAgKi8KKyAgICAgICAgbW92ZShJbW0zMihhZGRyZXNzLm9mZnNldCksIGFk
ZHJUZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVt
cFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UpOworICAgICAgICBtX2Fz
c2VtYmxlci5sd2MxKGRlc3QsIGFkZHJUZW1wUmVnaXN0ZXIsIDApOworICAgICAgICBtX2Fzc2Vt
Ymxlci5sd2MxKEZQUmVnaXN0ZXJJRChkZXN0ICsgMSksIGFkZHJUZW1wUmVnaXN0ZXIsIDQpOwor
I2Vsc2UKKyAgICAgICAgaWYgKGFkZHJlc3Mub2Zmc2V0ID49IC0zMjc2OCAmJiBhZGRyZXNzLm9m
ZnNldCA8PSAzMjc2NyAmJiBmaXhlZCA9PSAwKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5s
ZGMxKGRlc3QsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5vZmZzZXQpOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICBsdWkgICAgIGFkZHJU
ZW1wLCAob2Zmc2V0ICsgMHg4MDAwKSA+PiAxNgorICAgICAgICAgICAgICAgIGFkZHUgICAgYWRk
clRlbXAsIGFkZHJUZW1wLCBiYXNlCisgICAgICAgICAgICAgICAgbGRjMSAgICBkZXN0LCAob2Zm
c2V0ICYgMHhmZmZmKShhZGRyVGVtcCkKKyAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLmx1aShhZGRyVGVtcFJlZ2lzdGVyLCAoYWRkcmVzcy5vZmZzZXQgKyAweDgwMDAp
ID4+IDE2KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3Rlciwg
YWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LmxkYzEoZGVzdCwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQpOworICAgICAgICB9
CisjZW5kaWYKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlRG91YmxlKEZQUmVnaXN0ZXJJRCBzcmMs
IEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzLCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyNpZiBfX21p
cHMgPT0gMQorICAgICAgICAvKgorICAgICAgICAgICAgbGkgICAgICAgICAgYWRkclRlbXAsIGFk
ZHJlc3Mub2Zmc2V0CisgICAgICAgICAgICBhZGR1ICAgICAgICBhZGRyVGVtcCwgYWRkclRlbXAs
IGJhc2UKKyAgICAgICAgICAgIHN3YzEgICAgICAgIGRlc3QsIDAoYWRkclRlbXApCisgICAgICAg
ICAgICBzd2MxICAgICAgICBkZXN0KzEsIDQoYWRkclRlbXApCisgICAgICAgICAqLworICAgICAg
ICBtb3ZlKEltbTMyKGFkZHJlc3Mub2Zmc2V0KSwgYWRkclRlbXBSZWdpc3RlciwgZml4ZWQpOwor
ICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0
ZXIsIGFkZHJlc3MuYmFzZSk7CisgICAgICAgIG1fYXNzZW1ibGVyLnN3YzEoc3JjLCBhZGRyVGVt
cFJlZ2lzdGVyLCAwKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3djMShGUFJlZ2lzdGVySUQoc3Jj
ICsgMSksIGFkZHJUZW1wUmVnaXN0ZXIsIDQpOworI2Vsc2UKKyAgICAgICAgaWYgKGFkZHJlc3Mu
b2Zmc2V0ID49IC0zMjc2OCAmJiBhZGRyZXNzLm9mZnNldCA8PSAzMjc2NyAmJiBmaXhlZCA9PSAw
KQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2RjMShzcmMsIGFkZHJlc3MuYmFzZSwgYWRkcmVz
cy5vZmZzZXQpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAg
ICAgbHVpICAgICBhZGRyVGVtcCwgKG9mZnNldCArIDB4ODAwMCkgPj4gMTYKKyAgICAgICAgICAg
ICAgICBhZGR1ICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgYmFzZQorICAgICAgICAgICAgICAgIHNk
YzEgICAgc3JjLCAob2Zmc2V0ICYgMHhmZmZmKShhZGRyVGVtcCkKKyAgICAgICAgICAgICAgKi8K
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx1aShhZGRyVGVtcFJlZ2lzdGVyLCAoYWRkcmVzcy5v
ZmZzZXQgKyAweDgwMDApID4+IDE2KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRk
clRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlKTsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLnNkYzEoc3JjLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNl
dCk7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKworICAgIHZvaWQgYWRkRG91YmxlKEZQUmVn
aXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIuYWRkX2QoZGVzdCwgZGVzdCwgc3JjKTsKKyAgICB9CisKKyAgICB2
b2lkIGFkZERvdWJsZShBZGRyZXNzIHNyYywgRlBSZWdpc3RlcklEIGRlc3QsIGludCBmaXhlZCA9
IDApCisgICAgeworICAgICAgICBsb2FkRG91YmxlKHNyYywgZnBUZW1wUmVnaXN0ZXIsIGZpeGVk
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkX2QoZGVzdCwgZGVzdCwgZnBUZW1wUmVnaXN0ZXIp
OworICAgIH0KKworICAgIHZvaWQgc3ViRG91YmxlKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0
ZXJJRCBkZXN0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3Vi
X2QoZGVzdCwgZGVzdCwgc3JjKTsKKyAgICB9CisKKyAgICB2b2lkIHN1YkRvdWJsZShBZGRyZXNz
IHNyYywgRlBSZWdpc3RlcklEIGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBs
b2FkRG91YmxlKHNyYywgZnBUZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIuc3ViX2QoZGVzdCwgZGVzdCwgZnBUZW1wUmVnaXN0ZXIpOworICAgIH0KKworICAgIHZvaWQg
bXVsRG91YmxlKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQg
PSAwKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubXVsX2QoZGVzdCwgZGVzdCwgc3JjKTsK
KyAgICB9CisKKyAgICB2b2lkIG11bERvdWJsZShBZGRyZXNzIHNyYywgRlBSZWdpc3RlcklEIGRl
c3QsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBsb2FkRG91YmxlKHNyYywgZnBUZW1w
UmVnaXN0ZXIsIGZpeGVkKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubXVsX2QoZGVzdCwgZGVzdCwg
ZnBUZW1wUmVnaXN0ZXIpOworICAgIH0KKworICAgIHZvaWQgY29udmVydEludDMyVG9Eb3VibGUo
UmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIubXRjMShzcmMsIGZwVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAg
bV9hc3NlbWJsZXIuY3Z0X2RfdyhkZXN0LCBmcFRlbXBSZWdpc3Rlcik7CisgICAgfQorCisgICAg
SnVtcCBicmFuY2hEb3VibGUoRG91YmxlQ29uZGl0aW9uIGNvbmQsIEZQUmVnaXN0ZXJJRCBsZWZ0
LCBGUFJlZ2lzdGVySUQgcmlnaHQsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBpZiAo
Y29uZCA9PSBEb3VibGVFcXVhbCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY19lcV9kKGxl
ZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmJjMXQoKSk7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY29uZCA9PSBEb3VibGVHcmVhdGVyVGhhbikg
eworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY19sdF9kKHJpZ2h0LCBsZWZ0KTsgLy8gcmV2ZXJz
ZQorICAgICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuYmMxdCgpKTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIGlmIChjb25kID09IERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCkgewor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuY19sZV9kKHJpZ2h0LCBsZWZ0KTsgLy8gcmV2ZXJzZQor
ICAgICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuYmMxdCgpKTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlIGlmIChjb25kID09IERvdWJsZUxlc3NUaGFuKSB7CisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5jX2x0X2QobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgcmV0dXJuIEp1bXAo
bV9hc3NlbWJsZXIuYmMxdCgpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChjb25kID09
IERvdWJsZUxlc3NUaGFuT3JFcXVhbCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY19sZV9k
KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmJjMXQo
KSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgQVNTRVJUKDApOworCisg
ICAgICAgIHJldHVybiBKdW1wKCk7CisgICAgfQorCisgICAgLy8gVHJ1bmNhdGVzICdzcmMnIHRv
IGFuIGludGVnZXIsIGFuZCBwbGFjZXMgdGhlIHJlc3VsdGluZyAnZGVzdCcuCisgICAgLy8gSWYg
dGhlIHJlc3VsdCBpcyBub3QgcmVwcmVzZW50YWJsZSBhcyBhIDMyIGJpdCB2YWx1ZSwgYnJhbmNo
LgorICAgIC8vIE1heSBhbHNvIGJyYW5jaCBmb3Igc29tZSB2YWx1ZXMgdGhhdCBhcmUgcmVwcmVz
ZW50YWJsZSBpbiAzMiBiaXRzCisgICAgLy8gKHNwZWNpZmljYWxseSwgaW4gdGhpcyBjYXNlLCBJ
TlRfTUFYIDB4N2ZmZmZmZmYpLgorICAgIEp1bXAgYnJhbmNoVHJ1bmNhdGVEb3VibGVUb0ludDMy
KEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLnRydW5jX3dfZChmcFRlbXBSZWdpc3RlcixzcmMpOworICAg
ICAgICBtX2Fzc2VtYmxlci5tZmMxKGRlc3QsIGZwVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0
dXJuIGJyYW5jaDMyKEVxdWFsLCBkZXN0LCBJbW0zMigweDdmZmZmZmZmKSwgZml4ZWQpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgTGlua0J1ZmZlcjsKKyAgICBmcmllbmQg
Y2xhc3MgUmVwYXRjaEJ1ZmZlcjsKKworICAgIHN0YXRpYyB2b2lkIGxpbmtDYWxsKHZvaWQqIGNv
ZGUsIENhbGwgY2FsbCwgRnVuY3Rpb25QdHIgZnVuY3Rpb24pCisgICAgeworICAgICAgICBNSVBT
QXNzZW1ibGVyOjpsaW5rQ2FsbChjb2RlLCBjYWxsLm1fam1wLCBmdW5jdGlvbi52YWx1ZSgpKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsIGNh
bGwsIENvZGVMb2NhdGlvbkxhYmVsIGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAgICAgTUlQU0Fz
c2VtYmxlcjo6cmVsaW5rQ2FsbChjYWxsLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5leGVj
dXRhYmxlQWRkcmVzcygpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChD
b2RlTG9jYXRpb25DYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGRlc3RpbmF0aW9uKQorICAgIHsKKyAg
ICAgICAgTUlQU0Fzc2VtYmxlcjo6cmVsaW5rQ2FsbChjYWxsLmRhdGFMb2NhdGlvbigpLCBkZXN0
aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICB9CisKK307CisKK30KKworI2VuZGlm
CisKKyNlbmRpZiAvLyBNYWNyb0Fzc2VtYmxlck1JUFNfaApJbmRleDogaml0L0pJVE9wY29kZXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gNDk0ODApCisr
KyBqaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MjMsNiArMTcyMyw1NiBA
QAogCiAgICAgYWRkUHRyKEltbTMyKHNpemVvZihBcmdMaXN0KSksIHN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKIAorI2VsaWYgUExBVEZPUk0oTUlQUykKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhl
YWRlcjMyKFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCwgcmVnVDApOworCisgICAgLy8gQWxs
b2NhdGUgc3RhY2sgc3BhY2UgZm9yIG91ciBhcmdsaXN0CisgICAgQ09NUElMRV9BU1NFUlQoKHNp
emVvZihBcmdMaXN0KSAmIDB4NykgPT0gMCwgQXJnTGlzdF9zaG91bGRfYnlfOGJ5dGVfYWxpZ25l
ZCk7CisgICAgc3ViUHRyKEltbTMyKHNpemVvZihBcmdMaXN0KSArIDI0KSwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOworCisgICAgLy8gU2V0IHVwIGFyZ3VtZW50cworICAgIHN1YlB0cihJbW0zMigx
KSwgcmVnVDApOyAvLyBEb24ndCBpbmNsdWRlICd0aGlzJyBpbiBhcmdjb3VudAorCisgICAgLy8g
UHVzaCBhcmdjb3VudCB0byAyNCArIG9mZnNldCgkc3ApCisgICAgc3RvcmVQdHIocmVnVDAsIEFk
ZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIDI0ICsgT0JKRUNUX09GRlNFVE9GKEFyZ0xpc3Qs
IG1fYXJnQ291bnQpKSk7CisKKyAgICAvLyBDYWxjdWxhdGUgdGhlIHN0YXJ0IG9mIHRoZSBjYWxs
ZnJhbWUgaGVhZGVyLCBhbmQgc3RvcmUgaW4gcmVnVDEKKyAgICBtb3ZlKGNhbGxGcmFtZVJlZ2lz
dGVyLCByZWdUMSk7CisgICAgc3ViMzIoSW1tMzIoUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFk
ZXJTaXplICogKGludDMyX3Qpc2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1QxKTsKKworICAgIC8vIENh
bGN1bGF0ZSBzdGFydCBvZiBhcmd1bWVudHMgYXMgY2FsbGZyYW1lIGhlYWRlciAtIHNpemVvZihS
ZWdpc3RlcikgKiBhcmdjb3VudCAocmVnVDEpCisgICAgbXVsMzIoSW1tMzIoc2l6ZW9mKFJlZ2lz
dGVyKSksIHJlZ1QwLCByZWdUMCk7CisgICAgc3ViUHRyKHJlZ1QwLCByZWdUMSk7CisKKyAgICAv
LyBwdXNoIHBvaW50ZXIgdG8gYXJndW1lbnRzIHRvIDI0ICsgb2Zmc2V0KCRzcCkKKyAgICBzdG9y
ZVB0cihyZWdUMSwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgMjQgKyBPQkpFQ1RfT0ZG
U0VUT0YoQXJnTGlzdCwgbV9hcmdzKSkpOworCisgICAgLy8gU2V0dXAgYXJnMzogcmVnVDEgY3Vy
cmVudGx5IHBvaW50cyB0byB0aGUgZmlyc3QgYXJndW1lbnQsIHJlZ1QxLXNpemVvZihSZWdpc3Rl
cikgcG9pbnRzIHRvICd0aGlzJworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgLShpbnQzMl90
KXNpemVvZihSZWdpc3RlcikpLCBNSVBTUmVnaXN0ZXJzOjphMyk7CisKKyAgICAvLyBTZXR1cCBh
cmcyOgorICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6Q2Fs
bGVlLCBNSVBTUmVnaXN0ZXJzOjphMik7CisKKyAgICAvLyBTZXR1cCBhcmcxOgorICAgIG1vdmUo
Y2FsbEZyYW1lUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6OmExKTsKKworICAgIC8vIFNldHVwIGFy
ZzQ6IEFyZ0xpc3QgaXMgcGFzc2VkIGJ5IHJlZmVyZW5jZS4gIEF0IDE2KCRzcCksIHN0b3JlICgk
c3AgKyAyNCkKKyAgICBhZGRQdHIoSW1tMzIoMjQpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVn
VDIpOworICAgIHN0b3JlUHRyKHJlZ1QyLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCAx
NikpOworCisgICAgLy8gU2V0dXAgYXJnMCBhcyAyMCgkc3ApIHRvIGhvbGQgdGhlIHJldHVybmVk
IHN0cnVjdHVyZS4KKyAgICBBU1NFUlQoc2l6ZW9mKEpTVmFsdWUpID09IDQpOworICAgIGFkZFB0
cihJbW0zMigyMCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBNSVBTUmVnaXN0ZXJzOjphMCk7CisK
KyAgICAvLyBDYWxsCisgICAgY2FsbChBZGRyZXNzKE1JUFNSZWdpc3RlcnM6OmEyLCBPQkpFQ1Rf
T0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9kYXRhKSkpOworCisgICAgLy8gR2V0IHJldHVybmVkIHZh
bHVlIGZyb20gMCgkdjApIHdoaWNoIGlzIHRoZSBzYW1lIGFzIDIwKCRzcCkKKyAgICBsb2FkUHRy
KEFkZHJlc3MocmV0dXJuVmFsdWVSZWdpc3RlciwgMCksIHJldHVyblZhbHVlUmVnaXN0ZXIpOwor
CisgICAgLy8gUmVzdG9yZSBzdGFjayBzcGFjZQorICAgIGFkZFB0cihJbW0zMihzaXplb2YoQXJn
TGlzdCkgKyAyNCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKwogI2VsaWYgRU5BQkxFKEpJVF9P
UFRJTUlaRV9OQVRJVkVfQ0FMTCkKICNlcnJvciAiSklUX09QVElNSVpFX05BVElWRV9DQUxMIG5v
dCB5ZXQgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0uIgogI2Vsc2UKSW5kZXg6IGppdC9KSVRT
dHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gNDk0ODAp
CisrKyBqaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NzEsNiArNTcxLDg0IEBA
CiAgICAgIm1vdiBwYywgbHIiICJcbiIKICk7CiAKKyNlbGlmIFBMQVRGT1JNKE1JUFMpCisKKyNp
ZiBVU0UoSklUX1NUVUJfQVJHVU1FTlRfVkFfTElTVCkKKyNlcnJvciAiSklUX1NUVUJfQVJHVU1F
TlRfVkFfTElTVCBub3Qgc3VwcG9ydGVkIG9uIE1JUFMuIgorI2VuZGlmCisKK2FzbSB2b2xhdGls
ZSAoCisiLnRleHQiICJcbiIKKyIuYWxpZ24gMiIgIlxuIgorIi5zZXQgbm9yZW9yZGVyIiAiXG4i
CisiLnNldCBub21hY3JvIiAiXG4iCisiLnNldCBub21pcHMxNiIgIlxuIgorIi5nbG9ibCAiIFNZ
TUJPTF9TVFJJTkcoY3RpVHJhbXBvbGluZSkgIlxuIgorU1lNQk9MX1NUUklORyhjdGlUcmFtcG9s
aW5lKSAiOiIgIlxuIgorICAgICJhZGRpdSAkMjksJDI5LC03MiIgIlxuIgorICAgICJzdyAgICAk
MzEsNDQoJDI5KSIgIlxuIgorICAgICJzdyAgICAkMTgsNDAoJDI5KSIgIlxuIgorICAgICJzdyAg
ICAkMTcsMzYoJDI5KSIgIlxuIgorICAgICJzdyAgICAkMTYsMzIoJDI5KSIgIlxuIgorICAgICJt
b3ZlICAkMTYsJDYgICAgICAgIyBzZXQgY2FsbEZyYW1lUmVnaXN0ZXIiICJcbiIKKyAgICAibGkg
ICAgJDE3LDUxMiAgICAgICMgc2V0IHRpbWVvdXRDaGVja1JlZ2lzdGVyIiAiXG4iCisgICAgIm1v
dmUgICQyNSwkNCAgICAgICAjIG1vdmUgZXhlY3V0YWJsZUFkZHJlc3MgdG8gdDkiICJcbiIKKyAg
ICAic3cgICAgJDUsNTIoJDI5KSAgICMgc3RvcmUgcmVnaXN0ZXJGaWxlIHRvIGN1cnJlbnQgc3Rh
Y2siICJcbiIKKyAgICAic3cgICAgJDYsNTYoJDI5KSAgICMgc3RvcmUgY2FsbEZyYW1lIHRvIGN1
cmVudCBzdGFjayIgIlxuIgorICAgICJzdyAgICAkNyw2MCgkMjkpICAgIyBzdG9yZSBleGNlcHRp
b24gdG8gY3VycmVudCBzdGFjayIgIlxuIgorICAgICJsdyAgICAkOCw4OCgkMjkpICAgIyBsb2Fk
IGVuYWJsZVByb2ZpbGVyUmVmZXJlbmNlIGZyb20gcHJldmlvdXMgc3RhY2siICJcbiIKKyAgICAi
bHcgICAgJDksOTIoJDI5KSAgICMgbG9hZCBnbG9iYWxEYXRhIGZyb20gcHJldmlvdXMgc3RhY2si
ICJcbiIKKyAgICAic3cgICAgJDgsNjQoJDI5KSAgICMgc3RvcmUgZW5hYmxlUHJvZmlsZXJSZWZl
cmVuY2UgdG8gY3VycmVudCBzdGFjayIgIlxuIgorICAgICJqYWxyICAkMjUiICJcbiIKKyAgICAi
c3cgICAgJDksNjgoJDI5KSAgICMgc3RvcmUgZ2xvYmFsRGF0YSB0byBjdXJyZW50IHN0YWNrIiAi
XG4iCisgICAgImx3ICAgICQxNiwzMigkMjkpIiAiXG4iCisgICAgImx3ICAgICQxNywzNigkMjkp
IiAiXG4iCisgICAgImx3ICAgICQxOCw0MCgkMjkpIiAiXG4iCisgICAgImx3ICAgICQzMSw0NCgk
MjkpIiAiXG4iCisgICAgImpyICAgICQzMSIgIlxuIgorICAgICJhZGRpdSAkMjksJDI5LDcyIiAi
XG4iCisiLnNldCByZW9yZGVyIiAiXG4iCisiLnNldCBtYWNybyIgIlxuIgorKTsKKworYXNtIHZv
bGF0aWxlICgKKyIudGV4dCIgIlxuIgorIi5hbGlnbiAyIiAiXG4iCisiLnNldCBub3Jlb3JkZXIi
ICJcbiIKKyIuc2V0IG5vbWFjcm8iICJcbiIKKyIuc2V0IG5vbWlwczE2IiAiXG4iCisiLmdsb2Js
ICIgU1lNQk9MX1NUUklORyhjdGlWTVRocm93VHJhbXBvbGluZSkgIlxuIgorU1lNQk9MX1NUUklO
RyhjdGlWTVRocm93VHJhbXBvbGluZSkgIjoiICJcbiIKKyAgICAiamFsICIgU1lNQk9MX1NUUklO
RyhjdGlfdm1fdGhyb3cpICJcbiIKKyAgICAibW92ZSAgJDQsICQyOSIgIlxuIgorICAgICJsdyAg
ICAkMTYsMzIoJDI5KSIgIlxuIgorICAgICJsdyAgICAkMTcsMzYoJDI5KSIgIlxuIgorICAgICJs
dyAgICAkMTgsNDAoJDI5KSIgIlxuIgorICAgICJsdyAgICAkMzEsNDQoJDI5KSIgIlxuIgorICAg
ICJqciAgICAkMzEiICJcbiIKKyAgICAiYWRkaXUgJDI5LCQyOSw3MiIgIlxuIgorIi5zZXQgcmVv
cmRlciIgIlxuIgorIi5zZXQgbWFjcm8iICJcbiIKKyk7CisKK2FzbSB2b2xhdGlsZSAoCisiLnRl
eHQiICJcbiIKKyIuYWxpZ24gMiIgIlxuIgorIi5zZXQgbm9yZW9yZGVyIiAiXG4iCisiLnNldCBu
b21hY3JvIiAiXG4iCisiLnNldCBub21pcHMxNiIgIlxuIgorIi5nbG9ibCAiIFNZTUJPTF9TVFJJ
TkcoY3RpT3BUaHJvd05vdENhdWdodCkgIlxuIgorU1lNQk9MX1NUUklORyhjdGlPcFRocm93Tm90
Q2F1Z2h0KSAiOiIgIlxuIgorICAgICJsdyAgICAkMTYsMzIoJDI5KSIgIlxuIgorICAgICJsdyAg
ICAkMTcsMzYoJDI5KSIgIlxuIgorICAgICJsdyAgICAkMTgsNDAoJDI5KSIgIlxuIgorICAgICJs
dyAgICAkMzEsNDQoJDI5KSIgIlxuIgorICAgICJqciAgICAkMzEiICJcbiIKKyAgICAiYWRkaXUg
JDI5LCQyOSw3MiIgIlxuIgorIi5zZXQgcmVvcmRlciIgIlxuIgorIi5zZXQgbWFjcm8iICJcbiIK
Kyk7CisKICNlbGlmIENPTVBJTEVSKE1TVkMpCiAKICNpZiBVU0UoSklUX1NUVUJfQVJHVU1FTlRf
VkFfTElTVCkKQEAgLTY2NSw2ICs3NDMsMjAgQEAKIAogICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VU
T0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIHRodW5rUmV0dXJuQWRkcmVzcykgPT0gMHgxQyk7CiAj
ZW5kaWYKKworI2lmIFBMQVRGT1JNKE1JUFMpCisgICAgQVNTRVJUKE9CSkVDVF9PRkZTRVRPRihz
dHJ1Y3QgSklUU3RhY2tGcmFtZSwgcHJlc2VydmVkUzApID09IDMyKTsKKyAgICBBU1NFUlQoT0JK
RUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBwcmVzZXJ2ZWRTMSkgPT0gMzYpOwor
ICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIHByZXNlcnZl
ZFMyKSA9PSA0MCk7CisgICAgQVNTRVJUKE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tG
cmFtZSwgcHJlc2VydmVkUmV0dXJuQWRkcmVzcykgPT0gNDQpOworICAgIEFTU0VSVChPQkpFQ1Rf
T0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIHRodW5rUmV0dXJuQWRkcmVzcykgPT0gNDgp
OworICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIHJlZ2lz
dGVyRmlsZSkgPT0gNTIpOworICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0
YWNrRnJhbWUsIGNhbGxGcmFtZSkgPT0gNTYpOworICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yo
c3RydWN0IEpJVFN0YWNrRnJhbWUsIGV4Y2VwdGlvbikgPT0gNjApOworICAgIEFTU0VSVChPQkpF
Q1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIGVuYWJsZWRQcm9maWxlclJlZmVyZW5j
ZSkgPT0gNjQpOworICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJh
bWUsIGdsb2JhbERhdGEpID09IDY4KTsKKworI2VuZGlmCiB9CiAKICNpZiBFTkFCTEUoSklUX09Q
VElNSVpFX1BST1BFUlRZX0FDQ0VTUykKQEAgLTkwOCw2ICsxMDAwLDMwIEBACiAgICAgICAgICk7
IFwKICAgICBydHlwZSBKSVRTdHViVGh1bmtlZF8jI29wKFNUVUJfQVJHU19ERUNMQVJBVElPTikg
XAogCisjZWxpZiBQTEFURk9STShNSVBTKQorI2RlZmluZSBERUZJTkVfU1RVQl9GVU5DVElPTihy
dHlwZSwgb3ApIFwKKyAgICBleHRlcm4gIkMiIHsgXAorICAgICAgICBydHlwZSBKSVRTdHViVGh1
bmtlZF8jI29wKFNUVUJfQVJHU19ERUNMQVJBVElPTik7IFwKKyAgICB9OyBcCisgICAgYXNtIHZv
bGF0aWxlICggXAorICAgICAgICAiLnRleHQiICJcbiIgXAorICAgICAgICAiLmFsaWduIDIiICJc
biIgXAorICAgICAgICAiLnNldCBub3Jlb3JkZXIiICJcbiIgXAorICAgICAgICAiLnNldCBub21h
Y3JvIiAiXG4iIFwKKyAgICAgICAgIi5zZXQgbm9taXBzMTYiICJcbiIgXAorICAgICAgICAiLmds
b2JsICIgU1lNQk9MX1NUUklORyhjdGlfIyNvcCkgIlxuIiBcCisgICAgICAgIFNZTUJPTF9TVFJJ
TkcoY3RpXyMjb3ApICI6IiAiXG4iIFwKKyAgICAgICAgInN3ICAgICQzMSwgNDgoJDI5KSIgIlxu
IiBcCisgICAgICAgICJqYWwgIiBTWU1CT0xfU1RSSU5HKEpJVFN0dWJUaHVua2VkXyMjb3ApICJc
biIgXAorICAgICAgICAibm9wIiAiXG4iIFwKKyAgICAgICAgImx3ICAgICQzMSwgNDgoJDI5KSIg
IlxuIiBcCisgICAgICAgICJqciAgICAkMzEiICJcbiIgXAorICAgICAgICAibm9wIiAiXG4iIFwK
KyAgICAgICAgIi5zZXQgcmVvcmRlciIgIlxuIiBcCisgICAgICAgICIuc2V0IG1hY3JvIiAiXG4i
IFwKKyAgICAgICAgKTsgXAorICAgIHJ0eXBlIEpJVFN0dWJUaHVua2VkXyMjb3AoU1RVQl9BUkdT
X0RFQ0xBUkFUSU9OKSBcCisKICNlbHNlCiAjZGVmaW5lIERFRklORV9TVFVCX0ZVTkNUSU9OKHJ0
eXBlLCBvcCkgcnR5cGUgSklUX1NUVUIgY3RpXyMjb3AoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKQog
I2VuZGlmCkluZGV4OiBqaXQvSklUU3R1YnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBqaXQvSklUU3R1YnMu
aAkocmV2aXNpb24gNDk0ODApCisrKyBqaXQvSklUU3R1YnMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTc4LDYgKzE3OCwyOSBAQAogICAgICAgICAvLyBXaGVuIEpJVCBjb2RlIG1ha2VzIGEgY2FsbCwg
aXQgcHVzaGVzIGl0cyByZXR1cm4gYWRkcmVzcyBqdXN0IGJlbG93IHRoZSByZXN0IG9mIHRoZSBz
dGFjay4KICAgICAgICAgUmV0dXJuQWRkcmVzc1B0ciogcmV0dXJuQWRkcmVzc1Nsb3QoKSB7IHJl
dHVybiByZWludGVycHJldF9jYXN0PFJldHVybkFkZHJlc3NQdHIqPih0aGlzKSAtIDE7IH0KICAg
ICB9OworI2VsaWYgUExBVEZPUk0oTUlQUykKKyAgICBzdHJ1Y3QgSklUU3RhY2tGcmFtZSB7Cisg
ICAgICAgIHZvaWQqIHJlc2VydmVkOyAvLyBVbnVzZWQKKyAgICAgICAgSklUU3R1YkFyZyBhcmdz
WzddOyAvLyBLZWVwIGl0IDggYnl0ZSBhbGlnbmVkCisKKyAgICAgICAgdm9pZCogcHJlc2VydmVk
UzA7CisgICAgICAgIHZvaWQqIHByZXNlcnZlZFMxOworICAgICAgICB2b2lkKiBwcmVzZXJ2ZWRT
MjsKKyAgICAgICAgdm9pZCogcHJlc2VydmVkUmV0dXJuQWRkcmVzczsKKworICAgICAgICBSZXR1
cm5BZGRyZXNzUHRyIHRodW5rUmV0dXJuQWRkcmVzczsKKworICAgICAgICAvLyBUaGVzZSBhcmd1
bWVudHMgcGFzc2VkIGluIGExLi5hMyAoYTAgY29udGFpbmVkIHRoZSBlbnRyeSBjb2RlIHBvaW50
ZWQsIHdoaWNoIGlzIG5vdCBwcmVzZXJ2ZWQpCisgICAgICAgIFJlZ2lzdGVyRmlsZSogcmVnaXN0
ZXJGaWxlOworICAgICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZTsKKyAgICAgICAgSlNWYWx1ZSog
ZXhjZXB0aW9uOworCisgICAgICAgIC8vIFRoZXNlIGFyZ3VtZW50cyBwYXNzZWQgb24gdGhlIHN0
YWNrLgorICAgICAgICBQcm9maWxlcioqIGVuYWJsZWRQcm9maWxlclJlZmVyZW5jZTsKKyAgICAg
ICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhOworCisgICAgICAgIFJldHVybkFkZHJlc3NQdHIq
IHJldHVybkFkZHJlc3NTbG90KCkgeyByZXR1cm4gJnRodW5rUmV0dXJuQWRkcmVzczsgfQorICAg
IH07CiAjZWxzZQogI2Vycm9yICJKSVRTdGFja0ZyYW1lIG5vdCBkZWZpbmVkIGZvciB0aGlzIHBs
YXRmb3JtLiIKICNlbmRpZgpJbmRleDogaml0L0pJVElubGluZU1ldGhvZHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBqaXQvSklUSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiA0OTQ4MCkKKysrIGppdC9KSVRJ
bmxpbmVNZXRob2RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2MSw2ICsxNjEsMjMgQEAKICAgICBs
b2FkUHRyKGFkZHJlc3MsIGxpbmtSZWdpc3Rlcik7CiB9CiAKKyNlbGlmIFBMQVRGT1JNKE1JUFMp
CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2Fs
bChSZWdpc3RlcklEIHJlZykKK3sKKyAgICBtb3ZlKHJldHVybkFkZHJlc3NSZWdpc3RlciwgcmVn
KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cmVzdG9yZVJldHVybkFkZHJlc3NCZWZv
cmVSZXR1cm4oUmVnaXN0ZXJJRCByZWcpCit7CisgICAgbW92ZShyZWcsIHJldHVybkFkZHJlc3NS
ZWdpc3Rlcik7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnJlc3RvcmVSZXR1cm5BZGRy
ZXNzQmVmb3JlUmV0dXJuKEFkZHJlc3MgYWRkcmVzcykKK3sKKyAgICBsb2FkUHRyKGFkZHJlc3Ms
IHJldHVybkFkZHJlc3NSZWdpc3Rlcik7Cit9CisKICNlbHNlIC8vIFBMQVRGT1JNKFg4NikgfHwg
UExBVEZPUk0oWDg2XzY0KSB8fCBQTEFURk9STShBUk1fVFJBRElUSU9OQUwpCiAKIEFMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChSZWdpc3RlcklE
IHJlZykKSW5kZXg6IGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaml0
L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAkocmV2aXNpb24gNDk0ODApCisrKyBqaXQvRXhlY3V0YWJs
ZUFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsNiArMTgwLDMyIEBACiAgICAgc3Rh
dGljIHZvaWQgY2FjaGVGbHVzaCh2b2lkKiwgc2l6ZV90KQogICAgIHsKICAgICB9CisjZWxpZiBQ
TEFURk9STShNSVBTKQorICAgIHN0YXRpYyB2b2lkIGNhY2hlRmx1c2godm9pZCogY29kZSwgc2l6
ZV90IHNpemUpCisgICAgeworI2lmIENPTVBJTEVSKEdDQykgJiYgKEdDQ19WRVJTSU9OID49IDMw
NDA2KQorI2lmIF9fbWlwc19pc2FfcmV2ID09IDIKKyAgICAgICAgaW50IGxpbmVfc2l6ZTsKKyAg
ICAgICAgYXNtICgicmRod3IgJTAsICQxIiA6ICI9ciIgKGxpbmVfc2l6ZSkpOworICAgICAgICAv
LworICAgICAgICAvLyBNb2RpZnkgInN0YXJ0IiBhbmQgImVuZCIgdG8gYXZvaWQgR0NDIDQuMyBi
dWcgaW4KKyAgICAgICAgLy8gbWlwc19leHBhbmRfc3luY2lfbG9vcCB0aGF0IG1heSBleGVjdXRl
IHN5bmNpIG9uZSBtb3JlIHRpbWUuCisgICAgICAgIC8vICJzdGFydCIgcG9pbnRzIHRvIHRoZSBm
aXNydCBieXRlIG9mIHRoZSBjYWNoZSBsaW5lLgorICAgICAgICAvLyAiZW5kIiBwb2ludHMgdG8g
dGhlIGxhc3QgYnl0ZSBvZiB0aGUgbGluZSBiZWZvcmUgdGhlIGxhc3QgY2FjaGUgbGluZS4KKyAg
ICAgICAgLy8gQmVjYXVzZSBzaXplIGlzIGFsd2F5cyBhIG11bHRpcGxlIG9mIDQsIHRoaXMgaXMg
c2FmZSB0byBzZXQKKyAgICAgICAgLy8gImVuZCIgdG8gdGhlIGxhc3QgYnl0ZS4KKyAgICAgICAg
Ly8KKyAgICAgICAgaW50IHN0YXJ0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oY29kZSkg
JiAoLWxpbmVfc2l6ZSk7CisgICAgICAgIGludCBlbmQgPSAoKHJlaW50ZXJwcmV0X2Nhc3Q8aW50
cHRyX3Q+KGNvZGUpICsgc2l6ZSkgJiAoLWxpbmVfc2l6ZSkpIC0gMTsKKyAgICAgICAgX19jbGVh
cl9jYWNoZShyZWludGVycHJldF9jYXN0PGNoYXIqPihzdGFydCksIHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KGVuZCkpOworI2Vsc2UKKyAgICAgICAgaW50IGVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
aW50cHRyX3Q+KGNvZGUpICsgc2l6ZTsKKyAgICAgICAgX19jbGVhcl9jYWNoZShyZWludGVycHJl
dF9jYXN0PGNoYXIqPihjb2RlKSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZW5kKSk7CisjZW5k
aWYKKyNlbHNlCisgICAgICAgICNlcnJvciAiV2UgbmVlZCBHQ0MgdG8gcHJvdmlkZSBfX2NsZWFy
X2NhY2hlIGZvciBNSVBTIgorI2VuZGlmCisgICAgfQogI2VsaWYgUExBVEZPUk0oQVJNX1RIVU1C
MikgJiYgUExBVEZPUk0oSVBIT05FKQogICAgIHN0YXRpYyB2b2lkIGNhY2hlRmx1c2godm9pZCog
Y29kZSwgc2l6ZV90IHNpemUpCiAgICAgewpJbmRleDogaml0L0pJVC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGppdC9KSVQuaAkocmV2aXNpb24gNDk0ODApCisrKyBqaXQvSklULmgJKHdvcmtpbmcgY29weSkK
QEAgLTI2Nyw2ICsyNjcsMjggQEAKICAgICAgICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBm
cFJlZ1QwID0gQVJNUmVnaXN0ZXJzOjpkMDsKICAgICAgICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0
ZXJJRCBmcFJlZ1QxID0gQVJNUmVnaXN0ZXJzOjpkMTsKICAgICAgICAgc3RhdGljIGNvbnN0IEZQ
UmVnaXN0ZXJJRCBmcFJlZ1QyID0gQVJNUmVnaXN0ZXJzOjpkMjsKKyNlbGlmIFBMQVRGT1JNKE1J
UFMpCisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJldHVyblZhbHVlUmVnaXN0ZXIg
PSBNSVBTUmVnaXN0ZXJzOjp2MDsKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgY2Fj
aGVkUmVzdWx0UmVnaXN0ZXIgPSBNSVBTUmVnaXN0ZXJzOjp2MDsKKyAgICAgICAgc3RhdGljIGNv
bnN0IFJlZ2lzdGVySUQgZmlyc3RBcmd1bWVudFJlZ2lzdGVyID0gTUlQU1JlZ2lzdGVyczo6YTA7
CisKKyAgICAgICAgLy8gcmVnVDAgbXVzdCBiZSB2MCBmb3IgcmV0dXJuaW5nIGEgMzItYml0IHZh
bHVlLgorICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdUMCA9IE1JUFNSZWdpc3Rl
cnM6OnYwOworCisgICAgICAgIC8vIHJlZ1QxIG11c3QgYmUgdjEgZm9yIHJldHVybmluZyBhIHBh
aXIgb2YgMzItYml0IHZhbHVlLgorICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdU
MSA9IE1JUFNSZWdpc3RlcnM6OnYxOworCisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklE
IHJlZ1QyID0gTUlQU1JlZ2lzdGVyczo6dDQ7CisKKyAgICAgICAgLy8gcmVnVDMgbXVzdCBiZSBz
YXZlZCBpbiB0aGUgY2FsbGVlLCBzbyB1c2UgYW4gUyByZWdpc3Rlci4KKyAgICAgICAgc3RhdGlj
IGNvbnN0IFJlZ2lzdGVySUQgcmVnVDMgPSBNSVBTUmVnaXN0ZXJzOjpzMjsKKworICAgICAgICBz
dGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBjYWxsRnJhbWVSZWdpc3RlciA9IE1JUFNSZWdpc3RlcnM6
OnMwOworICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCB0aW1lb3V0Q2hlY2tSZWdpc3Rl
ciA9IE1JUFNSZWdpc3RlcnM6OnMxOworCisgICAgICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVy
SUQgZnBSZWdUMCA9IE1JUFNSZWdpc3RlcnM6OmY0OworICAgICAgICBzdGF0aWMgY29uc3QgRlBS
ZWdpc3RlcklEIGZwUmVnVDEgPSBNSVBTUmVnaXN0ZXJzOjpmNjsKKyAgICAgICAgc3RhdGljIGNv
bnN0IEZQUmVnaXN0ZXJJRCBmcFJlZ1QyID0gTUlQU1JlZ2lzdGVyczo6Zjg7CiAjZWxzZQogICAg
ICNlcnJvciAiSklUIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybS4iCiAjZW5kaWYKQEAg
LTYyNCw3ICs2NDYsMzAgQEAKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE1l
dGhvZENoZWNrUHJvdG9PYmogPSAxMjsKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9m
ZnNldE1ldGhvZENoZWNrUHJvdG9TdHJ1Y3QgPSAyMDsKICAgICAgICAgc3RhdGljIGNvbnN0IGlu
dCBwYXRjaE9mZnNldE1ldGhvZENoZWNrUHV0RnVuY3Rpb24gPSAzMjsKKyNlbGlmIFBMQVRGT1JN
KE1JUFMpCisgICAgICAgIC8vIFRoZXNlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyB2YWx1ZSBhcmUg
dXNlZCB0byBlbmFibGUgcGF0Y2hpbmcgLSBzZWUgY29tbWVudCBvbiBvcF9wdXRfYnlfaWQuCisg
ICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRQdXRCeUlkU3RydWN0dXJlID0gMTI7
CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRQdXRCeUlkRXh0ZXJuYWxMb2Fk
ID0gMzY7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hMZW5ndGhQdXRCeUlkRXh0ZXJu
YWxMb2FkID0gMTY7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRQdXRCeUlk
UHJvcGVydHlNYXBPZmZzZXQgPSA1MjsKKyAgICAgICAgLy8gVGhlc2UgYXJjaGl0ZWN0dXJlIHNw
ZWNpZmljIHZhbHVlIGFyZSB1c2VkIHRvIGVuYWJsZSBwYXRjaGluZyAtIHNlZSBjb21tZW50IG9u
IG9wX2dldF9ieV9pZC4KKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5
SWRTdHJ1Y3R1cmUgPSAxMjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdl
dEJ5SWRCcmFuY2hUb1Nsb3dDYXNlID0gMzY7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0
Y2hPZmZzZXRHZXRCeUlkRXh0ZXJuYWxMb2FkID0gMzY7CisgICAgICAgIHN0YXRpYyBjb25zdCBp
bnQgcGF0Y2hMZW5ndGhHZXRCeUlkRXh0ZXJuYWxMb2FkID0gMTY7CisgICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkUHJvcGVydHlNYXBPZmZzZXQgPSA1MjsKKyAgICAg
ICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRQdXRSZXN1bHQgPSA2ODsKKyNp
ZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQorICAgICAgICAjZXJyb3IgIk9QQ09ERV9TQU1QTElO
RyBpcyBub3QgeWV0IHN1cHBvcnRlZCIKKyNlbHNlCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
cGF0Y2hPZmZzZXRHZXRCeUlkU2xvd0Nhc2VDYWxsID0gNDA7CiAjZW5kaWYKKyAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBwYXRjaE9mZnNldE9wQ2FsbENvbXBhcmVUb0p1bXAgPSAyNDsKKworICAg
ICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0TWV0aG9kQ2hlY2tQcm90b09iaiA9IDI0
OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0TWV0aG9kQ2hlY2tQcm90b1N0
cnVjdCA9IDQ0OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0TWV0aG9kQ2hl
Y2tQdXRGdW5jdGlvbiA9IDY4OworI2VuZGlmCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkK
IAogI2lmIFBMQVRGT1JNKEFSTV9UUkFESVRJT05BTCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>41741</attachid>
            <date>2009-10-23 12:07:35 -0700</date>
            <delta_ts>2009-10-29 11:04:51 -0700</delta_ts>
            <desc>MIPS JIT Patch 20091022</desc>
            <filename>mips_jit20091022.diff</filename>
            <type>text/plain</type>
            <size>108165</size>
            <attacher name="Chao-ying Fu">fu</attacher>
            
              <data encoding="base64">SW5kZXg6IHd0Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHd0Zi9QbGF0Zm9ybS5oCShyZXZp
c2lvbiA0OTkyNikKKysrIHd0Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjUsNiAr
MjI1LDE1IEBACiAjZGVmaW5lIFdURl9QTEFURk9STV9CSUdfRU5ESUFOIDEKICNlbmRpZgogCisv
KiBQTEFURk9STShNSVBTKSAqLworLyogTm90ZTogT25seSBPMzIgQUJJIGlzIHRlc3RlZCwgc28g
d2UgZW5hYmxlIGl0IGZvciBPMzIgQUJJIGZvciBub3cuICAqLworI2lmICAgKGRlZmluZWQobWlw
cykgfHwgZGVmaW5lZChfX21pcHNfXykpICYmIGRlZmluZWQoX0FCSU8zMikKKyNkZWZpbmUgV1RG
X1BMQVRGT1JNX01JUFMgMQorI2lmIGRlZmluZWQoX19NSVBTRUJfXykKKyNkZWZpbmUgV1RGX1BM
QVRGT1JNX0JJR19FTkRJQU4gMQorI2VuZGlmCisjZW5kaWYgLyogTUlQUyAqLworCiAvKiBQTEFU
Rk9STShBUk0pICovCiAjZGVmaW5lIFBMQVRGT1JNX0FSTV9BUkNIKE4pIChQTEFURk9STShBUk0p
ICYmIEFSTV9BUkNIX1ZFUlNJT04gPj0gTikKIApAQCAtNzAwLDcgKzcwOSw3IEBACiAjaWYgIWRl
ZmluZWQoV1RGX1VTRV9KU1ZBTFVFNjQpICYmICFkZWZpbmVkKFdURl9VU0VfSlNWQUxVRTMyKSAm
JiAhZGVmaW5lZChXVEZfVVNFX0pTVkFMVUUzMl82NCkKICNpZiBQTEFURk9STShYODZfNjQpICYm
IChQTEFURk9STShEQVJXSU4pIHx8IFBMQVRGT1JNKExJTlVYKSkKICNkZWZpbmUgV1RGX1VTRV9K
U1ZBTFVFNjQgMQotI2VsaWYgUExBVEZPUk0oQVJNKSB8fCBQTEFURk9STShQUEM2NCkKKyNlbGlm
IFBMQVRGT1JNKEFSTSkgfHwgUExBVEZPUk0oUFBDNjQpIHx8IFBMQVRGT1JNKE1JUFMpCiAjZGVm
aW5lIFdURl9VU0VfSlNWQUxVRTMyIDEKICNlbGlmIFBMQVRGT1JNKFdJTl9PUykgJiYgQ09NUElM
RVIoTUlOR1cpCiAvKiBVc2luZyBKU1ZBTFVFMzJfNjQgY2F1c2VzIHBhZGRpbmcvYWxpZ25lbWVu
dCBpc3N1ZXMgZm9yIEpJVFN0dWJBcmcKQEAgLTczMSw2ICs3NDAsMTAgQEAKIC8qIFRoZSBKSVQg
aXMgdGVzdGVkICYgd29ya2luZyBvbiB4ODYgV2luZG93cyAqLwogI2VsaWYgUExBVEZPUk0oWDg2
KSAmJiBQTEFURk9STShXSU4pCiAgICAgI2RlZmluZSBFTkFCTEVfSklUIDEKKy8qIFRoZSBKSVQg
aXMgZm9yIE1JUFMuICAqLworI2VsaWYgUExBVEZPUk0oTUlQUykKKyAgICAjZGVmaW5lIEVOQUJM
RV9KSVQgMQorICAgICNkZWZpbmUgV1RGX1VTRV9KSVRfU1RVQl9BUkdVTUVOVF9WQV9MSVNUIDAK
ICNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQpCkBAIC03OTQsNyArODA3LDggQEAKICB8fCAoUExB
VEZPUk0oWDg2XzY0KSAmJiBQTEFURk9STShNQUMpKSBcCiAgLyogVW5kZXIgZGV2ZWxvcG1lbnQs
IHRlbXBvcmFyaWx5IGRpc2FibGVkIHVudGlsIDE2TWIgbGluayByYW5nZSBsaW1pdCBpbiBhc3Nl
bWJsZXIgaXMgZml4ZWQuICovIFwKICB8fCAoUExBVEZPUk0oQVJNX1RIVU1CMikgJiYgUExBVEZP
Uk0oSVBIT05FKSAmJiAwKSBcCi0gfHwgKFBMQVRGT1JNKFg4NikgJiYgUExBVEZPUk0oV0lOKSkK
KyB8fCAoUExBVEZPUk0oWDg2KSAmJiBQTEFURk9STShXSU4pKSBcCisgfHwgUExBVEZPUk0oTUlQ
UykKICNkZWZpbmUgRU5BQkxFX1lBUlIgMQogI2RlZmluZSBFTkFCTEVfWUFSUl9KSVQgMQogI2Vu
ZGlmCkluZGV4OiB5YXJyL1JlZ2V4SklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB5YXJyL1JlZ2V4SklU
LmNwcAkocmV2aXNpb24gNDk5MjYpCisrKyB5YXJyL1JlZ2V4SklULmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTQsNiArNTQsMTYgQEAKICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdUMSA9
IEFSTVJlZ2lzdGVyczo6cjY7CiAKICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZXR1cm5S
ZWdpc3RlciA9IEFSTVJlZ2lzdGVyczo6cjA7CisjZWxpZiBQTEFURk9STShNSVBTKQorICAgIHN0
YXRpYyBjb25zdCBSZWdpc3RlcklEIGlucHV0ID0gTUlQU1JlZ2lzdGVyczo6YTA7CisgICAgc3Rh
dGljIGNvbnN0IFJlZ2lzdGVySUQgaW5kZXggPSBNSVBTUmVnaXN0ZXJzOjphMTsKKyAgICBzdGF0
aWMgY29uc3QgUmVnaXN0ZXJJRCBsZW5ndGggPSBNSVBTUmVnaXN0ZXJzOjphMjsKKyAgICBzdGF0
aWMgY29uc3QgUmVnaXN0ZXJJRCBvdXRwdXQgPSBNSVBTUmVnaXN0ZXJzOjphMzsKKworICAgIHN0
YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1QwID0gTUlQU1JlZ2lzdGVyczo6dDQ7CisgICAgc3Rh
dGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnVDEgPSBNSVBTUmVnaXN0ZXJzOjp0NTsKKworICAgIHN0
YXRpYyBjb25zdCBSZWdpc3RlcklEIHJldHVyblJlZ2lzdGVyID0gTUlQU1JlZ2lzdGVyczo6djA7
CiAjZWxpZiBQTEFURk9STShYODYpCiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgaW5wdXQg
PSBYODZSZWdpc3RlcnM6OmVheDsKICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBpbmRleCA9
IFg4NlJlZ2lzdGVyczo6ZWR4OwpAQCAtMTMxNiw2ICsxMzI2LDggQEAKICAgICAgICAgcHVzaChB
Uk1SZWdpc3RlcnM6OnI1KTsKICAgICAgICAgcHVzaChBUk1SZWdpc3RlcnM6OnI2KTsKICAgICAg
ICAgbW92ZShBUk1SZWdpc3RlcnM6OnIzLCBvdXRwdXQpOworI2VsaWYgUExBVEZPUk0oTUlQUykK
KyAgICAgICAgLy8gRG8gbm90aGluZy4KICNlbmRpZgogICAgIH0KIApAQCAtMTMzMyw2ICsxMzQ1
LDggQEAKICAgICAgICAgcG9wKEFSTVJlZ2lzdGVyczo6cjYpOwogICAgICAgICBwb3AoQVJNUmVn
aXN0ZXJzOjpyNSk7CiAgICAgICAgIHBvcChBUk1SZWdpc3RlcnM6OnI0KTsKKyNlbGlmIFBMQVRG
T1JNKE1JUFMpCisgICAgICAgIC8vIERvIG5vdGhpbmcKICNlbmRpZgogICAgICAgICByZXQoKTsK
ICAgICB9CkluZGV4OiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBh
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gNDk5MjYpCisrKyBhc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsMTAgQEAKICNpbmNs
dWRlICJNYWNyb0Fzc2VtYmxlckFSTS5oIgogbmFtZXNwYWNlIEpTQyB7IHR5cGVkZWYgTWFjcm9B
c3NlbWJsZXJBUk0gTWFjcm9Bc3NlbWJsZXJCYXNlOyB9OwogCisjZWxpZiBQTEFURk9STShNSVBT
KQorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyTUlQUy5oIgorbmFtZXNwYWNlIEpTQyB7IHR5cGVk
ZWYgTWFjcm9Bc3NlbWJsZXJNSVBTIE1hY3JvQXNzZW1ibGVyQmFzZTsgfTsKKwogI2VsaWYgUExB
VEZPUk0oWDg2KQogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyWDg2LmgiCiBuYW1lc3BhY2UgSlND
IHsgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlclg4NiBNYWNyb0Fzc2VtYmxlckJhc2U7IH07CkluZGV4
OiBhc3NlbWJsZXIvTUlQU0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGFzc2VtYmxlci9NSVBT
QXNzZW1ibGVyLmgJKHJldmlzaW9uIDApCisrKyBhc3NlbWJsZXIvTUlQU0Fzc2VtYmxlci5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
TUlQUyBUZWNobm9sb2dpZXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBNSVBTIFRFQ0hOT0xP
R0lFUywgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIE1JUFMgVEVDSE5P
TE9HSUVTLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBNSVBTQXNzZW1ibGVyX2gKKyNkZWZpbmUgTUlQU0Fzc2VtYmxl
cl9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKyNpbmNsdWRlIDx3dGYvU2VnbWVudGVk
VmVjdG9yLmg+CisKKyNpZiBFTkFCTEUoQVNTRU1CTEVSKSAmJiBQTEFURk9STShNSVBTKQorCisj
aW5jbHVkZSAiQXNzZW1ibGVyQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
KworbmFtZXNwYWNlIEpTQyB7CisKK3R5cGVkZWYgdWludDMyX3QgTUlQU1dvcmQ7CisKK25hbWVz
cGFjZSBNSVBTUmVnaXN0ZXJzIHsKKyAgICB0eXBlZGVmIGVudW0geworICAgICAgICByMCA9IDAs
CisgICAgICAgIHIxLAorICAgICAgICByMiwKKyAgICAgICAgcjMsCisgICAgICAgIHI0LAorICAg
ICAgICByNSwKKyAgICAgICAgcjYsCisgICAgICAgIHI3LAorICAgICAgICByOCwKKyAgICAgICAg
cjksCisgICAgICAgIHIxMCwKKyAgICAgICAgcjExLAorICAgICAgICByMTIsCisgICAgICAgIHIx
MywKKyAgICAgICAgcjE0LAorICAgICAgICByMTUsCisgICAgICAgIHIxNiwKKyAgICAgICAgcjE3
LAorICAgICAgICByMTgsCisgICAgICAgIHIxOSwKKyAgICAgICAgcjIwLAorICAgICAgICByMjEs
CisgICAgICAgIHIyMiwKKyAgICAgICAgcjIzLAorICAgICAgICByMjQsCisgICAgICAgIHIyNSwK
KyAgICAgICAgcjI2LAorICAgICAgICByMjcsCisgICAgICAgIHIyOCwKKyAgICAgICAgcjI5LAor
ICAgICAgICByMzAsCisgICAgICAgIHIzMSwKKyAgICAgICAgemVybyA9IHIwLAorICAgICAgICBh
dCA9IHIxLAorICAgICAgICB2MCA9IHIyLAorICAgICAgICB2MSA9IHIzLAorICAgICAgICBhMCA9
IHI0LAorICAgICAgICBhMSA9IHI1LAorICAgICAgICBhMiA9IHI2LAorICAgICAgICBhMyA9IHI3
LAorICAgICAgICB0MCA9IHI4LAorICAgICAgICB0MSA9IHI5LAorICAgICAgICB0MiA9IHIxMCwK
KyAgICAgICAgdDMgPSByMTEsCisgICAgICAgIHQ0ID0gcjEyLAorICAgICAgICB0NSA9IHIxMywK
KyAgICAgICAgdDYgPSByMTQsCisgICAgICAgIHQ3ID0gcjE1LAorICAgICAgICBzMCA9IHIxNiwK
KyAgICAgICAgczEgPSByMTcsCisgICAgICAgIHMyID0gcjE4LAorICAgICAgICBzMyA9IHIxOSwK
KyAgICAgICAgczQgPSByMjAsCisgICAgICAgIHM1ID0gcjIxLAorICAgICAgICBzNiA9IHIyMiwK
KyAgICAgICAgczcgPSByMjMsCisgICAgICAgIHQ4ID0gcjI0LAorICAgICAgICB0OSA9IHIyNSwK
KyAgICAgICAgazAgPSByMjYsCisgICAgICAgIGsxID0gcjI3LAorICAgICAgICBncCA9IHIyOCwK
KyAgICAgICAgc3AgPSByMjksCisgICAgICAgIGZwID0gcjMwLAorICAgICAgICByYSA9IHIzMQor
ICAgIH0gUmVnaXN0ZXJJRDsKKworICAgIHR5cGVkZWYgZW51bSB7CisgICAgICAgIGYwLAorICAg
ICAgICBmMSwKKyAgICAgICAgZjIsCisgICAgICAgIGYzLAorICAgICAgICBmNCwKKyAgICAgICAg
ZjUsCisgICAgICAgIGY2LAorICAgICAgICBmNywKKyAgICAgICAgZjgsCisgICAgICAgIGY5LAor
ICAgICAgICBmMTAsCisgICAgICAgIGYxMSwKKyAgICAgICAgZjEyLAorICAgICAgICBmMTMsCisg
ICAgICAgIGYxNCwKKyAgICAgICAgZjE1LAorICAgICAgICBmMTYsCisgICAgICAgIGYxNywKKyAg
ICAgICAgZjE4LAorICAgICAgICBmMTksCisgICAgICAgIGYyMCwKKyAgICAgICAgZjIxLAorICAg
ICAgICBmMjIsCisgICAgICAgIGYyMywKKyAgICAgICAgZjI0LAorICAgICAgICBmMjUsCisgICAg
ICAgIGYyNiwKKyAgICAgICAgZjI3LAorICAgICAgICBmMjgsCisgICAgICAgIGYyOSwKKyAgICAg
ICAgZjMwLAorICAgICAgICBmMzEKKyAgICB9IEZQUmVnaXN0ZXJJRDsKKworfSAvLyBuYW1lc3Bh
Y2UgTUlQU1JlZ2lzdGVycworCitjbGFzcyBNSVBTQXNzZW1ibGVyIHsKK3B1YmxpYzoKKyAgICB0
eXBlZGVmIE1JUFNSZWdpc3RlcnM6OlJlZ2lzdGVySUQgUmVnaXN0ZXJJRDsKKyAgICB0eXBlZGVm
IE1JUFNSZWdpc3RlcnM6OkZQUmVnaXN0ZXJJRCBGUFJlZ2lzdGVySUQ7CisgICAgdHlwZWRlZiBT
ZWdtZW50ZWRWZWN0b3I8aW50LCA2ND4gSnVtcHM7CisKKyAgICBNSVBTQXNzZW1ibGVyKCkKKyAg
ICB7CisgICAgfQorCisgICAgLy8gTUlQUyBpbnN0cnVjdGlvbiBvcGNvZGUgZmllbGQgcG9zaXRp
b24KKyAgICBlbnVtIHsKKyAgICAgICAgT1BfU0hfUkQgPSAxMSwKKyAgICAgICAgT1BfU0hfUlQg
PSAxNiwKKyAgICAgICAgT1BfU0hfUlMgPSAyMSwKKyAgICAgICAgT1BfU0hfU0hBTVQgPSA2LAor
ICAgICAgICBPUF9TSF9DT0RFID0gMTYsCisgICAgICAgIE9QX1NIX0ZEID0gNiwKKyAgICAgICAg
T1BfU0hfRlMgPSAxMSwKKyAgICAgICAgT1BfU0hfRlQgPSAxNgorICAgIH07CisKKyAgICBjbGFz
cyBKbXBTcmMgeworICAgICAgICBmcmllbmQgY2xhc3MgTUlQU0Fzc2VtYmxlcjsKKyAgICBwdWJs
aWM6CisgICAgICAgIEptcFNyYygpCisgICAgICAgICAgICA6IG1fb2Zmc2V0KC0xKQorICAgICAg
ICB7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIEptcFNyYyhpbnQgb2Zmc2V0
KQorICAgICAgICAgICAgOiBtX29mZnNldChvZmZzZXQpCisgICAgICAgIHsKKyAgICAgICAgfQor
CisgICAgICAgIGludCBtX29mZnNldDsKKyAgICB9OworCisgICAgY2xhc3MgSm1wRHN0IHsKKyAg
ICAgICAgZnJpZW5kIGNsYXNzIE1JUFNBc3NlbWJsZXI7CisgICAgcHVibGljOgorICAgICAgICBK
bXBEc3QoKQorICAgICAgICAgICAgOiBtX29mZnNldCgtMSkKKyAgICAgICAgICAgICwgbV91c2Vk
KGZhbHNlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBib29sIGlzVXNlZCgpIGNv
bnN0IHsgcmV0dXJuIG1fdXNlZDsgfQorICAgICAgICB2b2lkIHVzZWQoKSB7IG1fdXNlZCA9IHRy
dWU7IH0KKyAgICBwcml2YXRlOgorICAgICAgICBKbXBEc3QoaW50IG9mZnNldCkKKyAgICAgICAg
ICAgIDogbV9vZmZzZXQob2Zmc2V0KQorICAgICAgICAgICAgLCBtX3VzZWQoZmFsc2UpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChtX29mZnNldCA9PSBvZmZzZXQpOworICAgICAgICB9
CisKKyAgICAgICAgaW50IG1fb2Zmc2V0IDogMzE7CisgICAgICAgIGludCBtX3VzZWQgOiAxOwor
ICAgIH07CisKKyAgICB2b2lkIGVtaXRJbnN0KE1JUFNXb3JkIG9wKQorICAgIHsKKyAgICAgICAg
dm9pZCogb2xkX2Jhc2UgPSBtX2J1ZmZlci5kYXRhKCk7CisKKyAgICAgICAgbV9idWZmZXIucHV0
SW50KG9wKTsKKworICAgICAgICB2b2lkKiBuZXdfYmFzZSA9IG1fYnVmZmVyLmRhdGEoKTsKKyAg
ICAgICAgaWYgKG9sZF9iYXNlICE9IG5ld19iYXNlKSB7CisgICAgICAgICAgICByZWxvY2F0ZUp1
bXBzKG9sZF9iYXNlLCBuZXdfYmFzZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIG5v
cCgpCisgICAgeworICAgICAgICAvKiBub3AgKi8KKyAgICAgICAgZW1pdEluc3QoMHgwMDAwMDAw
MCk7CisgICAgfQorCisgICAgdm9pZCBtb3ZlKFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcnMp
CisgICAgeworI2lmIGRlZmluZWQoX0FCSU8zMikKKyAgICAgICAgLyogYWRkdSAqLworICAgICAg
ICBlbWl0SW5zdCgweDAwMDAwMDIxIHwgKHJkIDw8IE9QX1NIX1JEKSB8IChycyA8PCBPUF9TSF9S
UykpOworI2Vsc2UKKyAgICAgICAgLyogZGFkZHUgKi8KKyAgICAgICAgZW1pdEluc3QoMHgwMDAw
MDAyZCB8IChyZCA8PCBPUF9TSF9SRCkgfCAocnMgPDwgT1BfU0hfUlMpKTsKKyNlbmRpZgorICAg
IH0KKworICAgIC8qIFNldCBhbiBpbW1lZGlhdGUgdmFsdWUgdG8gYSByZWdpc3Rlci4gIFRoaXMg
bWF5IGdlbmVyYXRlIDEgb3IgMgorICAgICAgIGluc3RydWN0aW9ucy4gICovCisgICAgdm9pZCBs
aShSZWdpc3RlcklEIGRlc3QsIGludCBpbW0pCisgICAgeworICAgICAgICBpZiAoaW1tID49IC0z
Mjc2OCAmJiBpbW0gPD0gMzI3NjcpCisgICAgICAgICAgICBhZGRpdShkZXN0LCBNSVBTUmVnaXN0
ZXJzOjp6ZXJvLCBpbW0pOworICAgICAgICBlbHNlIGlmIChpbW0gPj0gMCAmJiBpbW0gPCA2NTUz
NikKKyAgICAgICAgICAgIG9yaShkZXN0LCBNSVBTUmVnaXN0ZXJzOjp6ZXJvLCBpbW0pOworICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8qIGx1aSAqLworICAgICAgICAgICAgbHVpKGRlc3Qs
IGltbSA+PiAxNik7CisgICAgICAgICAgICAvKiBvcmkgKi8KKyAgICAgICAgICAgIGlmIChpbW0g
JiAweGZmZmYpCisgICAgICAgICAgICAgICAgb3JpKGRlc3QsIGRlc3QsIGltbSk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICB2b2lkIGx1aShSZWdpc3RlcklEIHJ0LCBpbnQgaW1tKQorICAgIHsK
KyAgICAgICAgLyogbHVpICovCisgICAgICAgIGVtaXRJbnN0KDB4M2MwMDAwMDAgfCAocnQgPDwg
T1BfU0hfUlQpIHwgKGltbSAmIDB4ZmZmZikpOworICAgIH0KKworICAgIHZvaWQgYWRkaXUoUmVn
aXN0ZXJJRCBydCwgUmVnaXN0ZXJJRCBycywgaW50IGltbSkKKyAgICB7CisgICAgICAgIC8qIGFk
ZGl1ICovCisgICAgICAgIGVtaXRJbnN0KDB4MjQwMDAwMDAgfCAocnQgPDwgT1BfU0hfUlQpIHwg
KHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChpbW0gJiAweGZmZmYpKTsKKyAg
ICB9CisKKyAgICB2b2lkIGFkZHUoUmVnaXN0ZXJJRCByZCwgUmVnaXN0ZXJJRCBycywgUmVnaXN0
ZXJJRCBydCkKKyAgICB7CisgICAgICAgIC8qIGFkZHUgKi8KKyAgICAgICAgZW1pdEluc3QoMHgw
MDAwMDAyMSB8IChyZCA8PCBPUF9TSF9SRCkgfCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAg
ICAgICAgIHwgKHJ0IDw8IE9QX1NIX1JUKSk7CisgICAgfQorCisgICAgdm9pZCBzdWJ1KFJlZ2lz
dGVySUQgcmQsIFJlZ2lzdGVySUQgcnMsIFJlZ2lzdGVySUQgcnQpCisgICAgeworICAgICAgICAv
KiBzdWJ1ICovCisgICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMjMgfCAocmQgPDwgT1BfU0hfUkQp
IHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChydCA8PCBPUF9TSF9SVCkp
OworICAgIH0KKworICAgIHZvaWQgbXVsdChSZWdpc3RlcklEIHJzLCBSZWdpc3RlcklEIHJ0KQor
ICAgIHsKKyAgICAgICAgLyogbXVsdCAqLworICAgICAgICBlbWl0SW5zdCgweDAwMDAwMDE4IHwg
KHJzIDw8IE9QX1NIX1JTKSB8IChydCA8PCBPUF9TSF9SVCkpOworICAgIH0KKworICAgIHZvaWQg
bWZoaShSZWdpc3RlcklEIHJkKQorICAgIHsKKyAgICAgICAgLyogbWZoaSAqLworICAgICAgICBl
bWl0SW5zdCgweDAwMDAwMDEwIHwgKHJkIDw8IE9QX1NIX1JEKSk7CisgICAgfQorCisgICAgdm9p
ZCBtZmxvKFJlZ2lzdGVySUQgcmQpCisgICAgeworICAgICAgICAvKiBtZmxvICovCisgICAgICAg
IGVtaXRJbnN0KDB4MDAwMDAwMTIgfCAocmQgPDwgT1BfU0hfUkQpKTsKKyAgICB9CisKKyAgICB2
b2lkIG11bChSZWdpc3RlcklEIHJkLCBSZWdpc3RlcklEIHJzLCBSZWdpc3RlcklEIHJ0KQorICAg
IHsKKyNpZiBfX21pcHMgPj0gMzIKKyAgICAgICAgLyogbXVsICovCisgICAgICAgIGVtaXRJbnN0
KDB4NzAwMDAwMDIgfCAocmQgPDwgT1BfU0hfUkQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAg
ICAgICAgICAgICB8IChydCA8PCBPUF9TSF9SVCkpOworI2Vsc2UKKyAgICAgICAgbXVsdChycywg
cnQpOworICAgICAgICBtZmxvKHJkKTsKKyNlbmRpZgorICAgIH0KKworICAgIHZvaWQgYW5kX2lu
c24oUmVnaXN0ZXJJRCByZCwgUmVnaXN0ZXJJRCBycywgUmVnaXN0ZXJJRCBydCkKKyAgICB7Cisg
ICAgICAgIC8qIGFuZCAqLworICAgICAgICBlbWl0SW5zdCgweDAwMDAwMDI0IHwgKHJkIDw8IE9Q
X1NIX1JEKSB8IChycyA8PCBPUF9TSF9SUykKKyAgICAgICAgICAgICAgICAgfCAocnQgPDwgT1Bf
U0hfUlQpKTsKKyAgICB9CisKKyAgICB2b2lkIGFuZGkoUmVnaXN0ZXJJRCBydCwgUmVnaXN0ZXJJ
RCBycywgaW50IGltbSkKKyAgICB7CisgICAgICAgIC8qIGFuZGkgKi8KKyAgICAgICAgZW1pdElu
c3QoMHgzMDAwMDAwMCB8IChydCA8PCBPUF9TSF9SVCkgfCAocnMgPDwgT1BfU0hfUlMpCisgICAg
ICAgICAgICAgICAgIHwgKGltbSAmIDB4ZmZmZikpOworICAgIH0KKworICAgIHZvaWQgbm9yKFJl
Z2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcnMsIFJlZ2lzdGVySUQgcnQpCisgICAgeworICAgICAg
ICAvKiBub3IgKi8KKyAgICAgICAgZW1pdEluc3QoMHgwMDAwMDAyNyB8IChyZCA8PCBPUF9TSF9S
RCkgfCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAgICAgICAgIHwgKHJ0IDw8IE9QX1NIX1JU
KSk7CisgICAgfQorCisgICAgdm9pZCBvcl9pbnNuKFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQg
cnMsIFJlZ2lzdGVySUQgcnQpCisgICAgeworICAgICAgICAvKiBvciAqLworICAgICAgICBlbWl0
SW5zdCgweDAwMDAwMDI1IHwgKHJkIDw8IE9QX1NIX1JEKSB8IChycyA8PCBPUF9TSF9SUykKKyAg
ICAgICAgICAgICAgICAgfCAocnQgPDwgT1BfU0hfUlQpKTsKKyAgICB9CisKKyAgICB2b2lkIG9y
aShSZWdpc3RlcklEIHJ0LCBSZWdpc3RlcklEIHJzLCBpbnQgaW1tKQorICAgIHsKKyAgICAgICAg
Lyogb3JpICovCisgICAgICAgIGVtaXRJbnN0KDB4MzQwMDAwMDAgfCAocnQgPDwgT1BfU0hfUlQp
IHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChpbW0gJiAweGZmZmYpKTsK
KyAgICB9CisKKyAgICB2b2lkIHhvcl9pbnNuKFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcnMs
IFJlZ2lzdGVySUQgcnQpCisgICAgeworICAgICAgICAvKiB4b3IgKi8KKyAgICAgICAgZW1pdElu
c3QoMHgwMDAwMDAyNiB8IChyZCA8PCBPUF9TSF9SRCkgfCAocnMgPDwgT1BfU0hfUlMpCisgICAg
ICAgICAgICAgICAgIHwgKHJ0IDw8IE9QX1NIX1JUKSk7CisgICAgfQorCisgICAgdm9pZCB4b3Jp
KFJlZ2lzdGVySUQgcnQsIFJlZ2lzdGVySUQgcnMsIGludCBpbW0pCisgICAgeworICAgICAgICAv
KiB4b3JpICovCisgICAgICAgIGVtaXRJbnN0KDB4MzgwMDAwMDAgfCAocnQgPDwgT1BfU0hfUlQp
IHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChpbW0gJiAweGZmZmYpKTsK
KyAgICB9CisKKyAgICB2b2lkIHNsdChSZWdpc3RlcklEIHJkLCBSZWdpc3RlcklEIHJzLCBSZWdp
c3RlcklEIHJ0KQorICAgIHsKKyAgICAgICAgLyogc2x0ICovCisgICAgICAgIGVtaXRJbnN0KDB4
MDAwMDAwMmEgfCAocmQgPDwgT1BfU0hfUkQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAg
ICAgICAgICB8IChydCA8PCBPUF9TSF9SVCkpOworICAgIH0KKworICAgIHZvaWQgc2x0dShSZWdp
c3RlcklEIHJkLCBSZWdpc3RlcklEIHJzLCBSZWdpc3RlcklEIHJ0KQorICAgIHsKKyAgICAgICAg
Lyogc2x0dSAqLworICAgICAgICBlbWl0SW5zdCgweDAwMDAwMDJiIHwgKHJkIDw8IE9QX1NIX1JE
KSB8IChycyA8PCBPUF9TSF9SUykKKyAgICAgICAgICAgICAgICAgfCAocnQgPDwgT1BfU0hfUlQp
KTsKKyAgICB9CisKKyAgICB2b2lkIHNsdGl1KFJlZ2lzdGVySUQgcnQsIFJlZ2lzdGVySUQgcnMs
IGludCBpbW0pCisgICAgeworICAgICAgICAvKiBzbHRpdSAqLworICAgICAgICBlbWl0SW5zdCgw
eDJjMDAwMDAwIHwgKHJ0IDw8IE9QX1NIX1JUKSB8IChycyA8PCBPUF9TSF9SUykKKyAgICAgICAg
ICAgICAgICAgfCAoaW1tICYgMHhmZmZmKSk7CisgICAgfQorCisgICAgdm9pZCBzbGwoUmVnaXN0
ZXJJRCByZCwgUmVnaXN0ZXJJRCBydCwgaW50IHNoYW10KQorICAgIHsKKyAgICAgICAgLyogc2xs
ICovCisgICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMDAgfCAocmQgPDwgT1BfU0hfUkQpIHwgKHJ0
IDw8IE9QX1NIX1JUKQorICAgICAgICAgICAgICAgICB8ICgoc2hhbXQgJiAweDFmKSA8PCBPUF9T
SF9TSEFNVCkpOworICAgIH0KKworICAgIHZvaWQgc2xsdihSZWdpc3RlcklEIHJkLCBSZWdpc3Rl
cklEIHJ0LCBpbnQgcnMpCisgICAgeworICAgICAgICAvKiBzbGx2ICovCisgICAgICAgIGVtaXRJ
bnN0KDB4MDAwMDAwMDQgfCAocmQgPDwgT1BfU0hfUkQpIHwgKHJ0IDw8IE9QX1NIX1JUKQorICAg
ICAgICAgICAgICAgICB8IChycyA8PCBPUF9TSF9SUykpOworICAgIH0KKworICAgIHZvaWQgc3Jh
KFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcnQsIGludCBzaGFtdCkKKyAgICB7CisgICAgICAg
IC8qIHNyYSAqLworICAgICAgICBlbWl0SW5zdCgweDAwMDAwMDAzIHwgKHJkIDw8IE9QX1NIX1JE
KSB8IChydCA8PCBPUF9TSF9SVCkKKyAgICAgICAgICAgICAgICAgfCAoKHNoYW10ICYgMHgxZikg
PDwgT1BfU0hfU0hBTVQpKTsKKyAgICB9CisKKyAgICB2b2lkIHNyYXYoUmVnaXN0ZXJJRCByZCwg
UmVnaXN0ZXJJRCBydCwgUmVnaXN0ZXJJRCBycykKKyAgICB7CisgICAgICAgIC8qIHNyYXYgKi8K
KyAgICAgICAgZW1pdEluc3QoMHgwMDAwMDAwNyB8IChyZCA8PCBPUF9TSF9SRCkgfCAocnQgPDwg
T1BfU0hfUlQpCisgICAgICAgICAgICAgICAgIHwgKHJzIDw8IE9QX1NIX1JTKSk7CisgICAgfQor
CisgICAgdm9pZCBsdyhSZWdpc3RlcklEIHJ0LCBSZWdpc3RlcklEIHJzLCBpbnQgb2Zmc2V0KQor
ICAgIHsKKyAgICAgICAgLyogbHcgKi8KKyAgICAgICAgZW1pdEluc3QoMHg4YzAwMDAwMCB8IChy
dCA8PCBPUF9TSF9SVCkgfCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAgICAgICAgIHwgKG9m
ZnNldCAmIDB4ZmZmZikpOworI2lmIF9fbWlwcyA9PSAxCisgICAgICAgIG5vcCgpOworI2VuZGlm
CisgICAgfQorCisgICAgdm9pZCBsd2woUmVnaXN0ZXJJRCBydCwgUmVnaXN0ZXJJRCBycywgaW50
IG9mZnNldCkKKyAgICB7CisgICAgICAgIC8qIGx3bCAqLworICAgICAgICBlbWl0SW5zdCgweDg4
MDAwMDAwIHwgKHJ0IDw8IE9QX1NIX1JUKSB8IChycyA8PCBPUF9TSF9SUykKKyAgICAgICAgICAg
ICAgICAgfCAob2Zmc2V0ICYgMHhmZmZmKSk7CisgICAgfQorCisgICAgdm9pZCBsd3IoUmVnaXN0
ZXJJRCBydCwgUmVnaXN0ZXJJRCBycywgaW50IG9mZnNldCkKKyAgICB7CisgICAgICAgIC8qIGx3
ciAqLworICAgICAgICBlbWl0SW5zdCgweDk4MDAwMDAwIHwgKHJ0IDw8IE9QX1NIX1JUKSB8IChy
cyA8PCBPUF9TSF9SUykKKyAgICAgICAgICAgICAgICAgfCAob2Zmc2V0ICYgMHhmZmZmKSk7Cisj
aWYgX19taXBzID09IDEKKyAgICAgICAgbm9wKCk7CisjZW5kaWYKKyAgICB9CisKKyAgICB2b2lk
IGxodShSZWdpc3RlcklEIHJ0LCBSZWdpc3RlcklEIHJzLCBpbnQgb2Zmc2V0KQorICAgIHsKKyAg
ICAgICAgLyogbGh1ICovCisgICAgICAgIGVtaXRJbnN0KDB4OTQwMDAwMDAgfCAocnQgPDwgT1Bf
U0hfUlQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChvZmZzZXQgJiAw
eGZmZmYpKTsKKyNpZiBfX21pcHMgPT0gMQorICAgICAgICBub3AoKTsKKyNlbmRpZgorICAgIH0K
KworICAgIHZvaWQgc3coUmVnaXN0ZXJJRCBydCwgUmVnaXN0ZXJJRCBycywgaW50IG9mZnNldCkK
KyAgICB7CisgICAgICAgIC8qIHN3ICovCisgICAgICAgIGVtaXRJbnN0KDB4YWMwMDAwMDAgfCAo
cnQgPDwgT1BfU0hfUlQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChv
ZmZzZXQgJiAweGZmZmYpKTsKKyAgICB9CisKKyAgICB2b2lkIGpyKFJlZ2lzdGVySUQgcnMpCisg
ICAgeworICAgICAgICAvKiBqciAqLworICAgICAgICBlbWl0SW5zdCgweDAwMDAwMDA4IHwgKHJz
IDw8IE9QX1NIX1JTKSk7CisgICAgfQorCisgICAgdm9pZCBqYWxyKFJlZ2lzdGVySUQgcnMpCisg
ICAgeworICAgICAgICAvKiBqYWxyICovCisgICAgICAgIGVtaXRJbnN0KDB4MDAwMGY4MDkgfCAo
cnMgPDwgT1BfU0hfUlMpKTsKKyAgICB9CisKKyAgICB2b2lkIGphbCgpCisgICAgeworICAgICAg
ICAvKiBqYWwgKi8KKyAgICAgICAgZW1pdEluc3QoMHgwYzAwMDAwMCk7CisgICAgfQorCisgICAg
dm9pZCBqbXBfcmVnaXN0ZXIoUmVnaXN0ZXJJRCBycykKKyAgICB7CisgICAgICAgIGpyKHJzKTsK
KyAgICAgICAgbm9wKCk7CisgICAgfQorCisgICAgdm9pZCBia3B0KCkKKyAgICB7CisgICAgICAg
IC8qIGJyZWFrICovCisgICAgICAgIGludCB2YWx1ZSA9IDUxMjsgLyogQlJLX0JVRyAqLworICAg
ICAgICBlbWl0SW5zdCgweDAwMDAwMDBkIHwgKCh2YWx1ZSAmIDB4M2ZmKSA8PCBPUF9TSF9DT0RF
KSk7CisgICAgfQorCisgICAgLyogTm90ZTogV2UgZG9uJ3QgcHV0IGEgbm9wIGFmdGVyIGJnZXou
CisgICAgICAgICAgICAgVGhlIGRlbGF5IHNsb3Qgd2lsbCBiZSBmaWxsZWQgbGF0ZXIuICAqLwor
ICAgIHZvaWQgYmdleihSZWdpc3RlcklEIHJzLCBpbnQgaW1tKQorICAgIHsKKyAgICAgICAgLyog
YmdleiAqLworICAgICAgICBlbWl0SW5zdCgweDA0MDEwMDAwIHwgKHJzIDw8IE9QX1NIX1JTKSB8
IChpbW0gJiAweGZmZmYpKTsKKyAgICB9CisKKyAgICAvKiBOb3RlOiBXZSBkb24ndCBwdXQgYSBu
b3AgYWZ0ZXIgYmx0ei4KKyAgICAgICAgICAgICBUaGUgZGVsYXkgc2xvdCB3aWxsIGJlIGZpbGxl
ZCBsYXRlci4gICovCisgICAgdm9pZCBibHR6KFJlZ2lzdGVySUQgcnMsIGludCBpbW0pCisgICAg
eworICAgICAgICAvKiBibHR6ICovCisgICAgICAgIGVtaXRJbnN0KDB4MDQwMDAwMDAgfCAocnMg
PDwgT1BfU0hfUlMpIHwgKGltbSAmIDB4ZmZmZikpOworICAgIH0KKworICAgIC8qIE5vdGU6IFdl
IGRvbid0IHB1dCBhIG5vcCBhZnRlciBiZXEuCisgICAgICAgICAgICAgVGhlIGRlbGF5IHNsb3Qg
d2lsbCBiZSBmaWxsZWQgbGF0ZXIuICAqLworICAgIHZvaWQgYmVxKFJlZ2lzdGVySUQgcnMsIFJl
Z2lzdGVySUQgcnQsIGludCBpbW0pCisgICAgeworICAgICAgICAvKiBiZXEgKi8KKyAgICAgICAg
ZW1pdEluc3QoMHgxMDAwMDAwMCB8IChycyA8PCBPUF9TSF9SUykgfCAocnQgPDwgT1BfU0hfUlQp
IHwgKGltbSAmIDB4ZmZmZikpOworICAgIH0KKworICAgIC8qIE5vdGU6IFdlIGRvbid0IHB1dCBh
IG5vcCBhZnRlciBibmUuCisgICAgICAgICAgICAgVGhlIGRlbGF5IHNsb3Qgd2lsbCBiZSBmaWxs
ZWQgbGF0ZXIuICAqLworICAgIHZvaWQgYm5lKFJlZ2lzdGVySUQgcnMsIFJlZ2lzdGVySUQgcnQs
IGludCBpbW0pCisgICAgeworICAgICAgICAvKiBibmUgKi8KKyAgICAgICAgZW1pdEluc3QoMHgx
NDAwMDAwMCB8IChycyA8PCBPUF9TSF9SUykgfCAocnQgPDwgT1BfU0hfUlQpIHwgKGltbSAmIDB4
ZmZmZikpOworICAgIH0KKworICAgIEptcFNyYyBqbXAoKQorICAgIHsKKyAgICAgICAgbV9qdW1w
cy5hcHBlbmQobV9idWZmZXIuc2l6ZSgpKTsKKworICAgICAgICAvKiBiZXEgJDAsICQwICovCisg
ICAgICAgIGJlcShNSVBTUmVnaXN0ZXJzOjp6ZXJvLCBNSVBTUmVnaXN0ZXJzOjp6ZXJvLCAwKTsK
KyAgICAgICAgbm9wKCk7CisgICAgICAgIC8qIFdlIG5lZWQgZm91ciB3b3JkcyBmb3IgcmVsYXhh
dGlvbi4gICovCisgICAgICAgIGJlcShNSVBTUmVnaXN0ZXJzOjp6ZXJvLCBNSVBTUmVnaXN0ZXJz
Ojp6ZXJvLCAzKTsgLy8gSnVtcCBvdmVyIG5vcHMKKyAgICAgICAgbm9wKCk7CisgICAgICAgIG5v
cCgpOworICAgICAgICBub3AoKTsKKyAgICAgICAgcmV0dXJuIEptcFNyYyhtX2J1ZmZlci5zaXpl
KCkpOworICAgIH0KKworICAgIEptcFNyYyBicmFuY2hfZXEoUmVnaXN0ZXJJRCBycywgUmVnaXN0
ZXJJRCBydCkKKyAgICB7CisgICAgICAgIG1fanVtcHMuYXBwZW5kKG1fYnVmZmVyLnNpemUoKSk7
CisKKyAgICAgICAgYmVxKHJzLCBydCwgMCk7CisgICAgICAgIG5vcCgpOworICAgICAgICAvKiBX
ZSBuZWVkIGZvdXIgd29yZHMgZm9yIHJlbGF4YXRpb24uICAqLworICAgICAgICBiZXEoTUlQU1Jl
Z2lzdGVyczo6emVybywgTUlQU1JlZ2lzdGVyczo6emVybywgMyk7IC8vIEp1bXAgb3ZlciBub3Bz
CisgICAgICAgIG5vcCgpOworICAgICAgICBub3AoKTsKKyAgICAgICAgbm9wKCk7CisgICAgICAg
IHJldHVybiBKbXBTcmMobV9idWZmZXIuc2l6ZSgpKTsKKyAgICB9CisKKyAgICBKbXBTcmMgYnJh
bmNoX25lKFJlZ2lzdGVySUQgcnMsIFJlZ2lzdGVySUQgcnQpCisgICAgeworICAgICAgICBtX2p1
bXBzLmFwcGVuZChtX2J1ZmZlci5zaXplKCkpOworCisgICAgICAgIC8qIGJuZSAqLworICAgICAg
ICBibmUocnMsIHJ0LCAwKTsKKyAgICAgICAgbm9wKCk7CisgICAgICAgIC8qIFdlIG5lZWQgZm91
ciB3b3JkcyBmb3IgcmVsYXhhdGlvbi4gICovCisgICAgICAgIGJlcShNSVBTUmVnaXN0ZXJzOjp6
ZXJvLCBNSVBTUmVnaXN0ZXJzOjp6ZXJvLCAzKTsgLy8gSnVtcCBvdmVyIG5vcHMKKyAgICAgICAg
bm9wKCk7CisgICAgICAgIG5vcCgpOworICAgICAgICBub3AoKTsKKyAgICAgICAgcmV0dXJuIEpt
cFNyYyhtX2J1ZmZlci5zaXplKCkpOworICAgIH0KKworICAgIHZvaWQgYWRkX2QoRlBSZWdpc3Rl
cklEIGZkLCBGUFJlZ2lzdGVySUQgZnMsIEZQUmVnaXN0ZXJJRCBmdCkKKyAgICB7CisgICAgICAg
IC8qIGFkZC5kICovCisgICAgICAgIGVtaXRJbnN0KDB4NDYyMDAwMDAgfCAoZmQgPDwgT1BfU0hf
RkQpIHwgKGZzIDw8IE9QX1NIX0ZTKQorICAgICAgICAgICAgICAgICB8IChmdCA8PCBPUF9TSF9G
VCkpOworICAgIH0KKworICAgIHZvaWQgc3ViX2QoRlBSZWdpc3RlcklEIGZkLCBGUFJlZ2lzdGVy
SUQgZnMsIEZQUmVnaXN0ZXJJRCBmdCkKKyAgICB7CisgICAgICAgIC8qIHN1Yi5kICovCisgICAg
ICAgIGVtaXRJbnN0KDB4NDYyMDAwMDEgfCAoZmQgPDwgT1BfU0hfRkQpIHwgKGZzIDw8IE9QX1NI
X0ZTKQorICAgICAgICAgICAgICAgICB8IChmdCA8PCBPUF9TSF9GVCkpOworICAgIH0KKworICAg
IHZvaWQgbXVsX2QoRlBSZWdpc3RlcklEIGZkLCBGUFJlZ2lzdGVySUQgZnMsIEZQUmVnaXN0ZXJJ
RCBmdCkKKyAgICB7CisgICAgICAgIC8qIG11bC5kICovCisgICAgICAgIGVtaXRJbnN0KDB4NDYy
MDAwMDIgfCAoZmQgPDwgT1BfU0hfRkQpIHwgKGZzIDw8IE9QX1NIX0ZTKQorICAgICAgICAgICAg
ICAgICB8IChmdCA8PCBPUF9TSF9GVCkpOworICAgIH0KKworICAgIHZvaWQgbHdjMShGUFJlZ2lz
dGVySUQgZnQsIFJlZ2lzdGVySUQgcnMsIGludCBvZmZzZXQpCisgICAgeworICAgICAgICAvKiBs
d2MxICovCisgICAgICAgIGVtaXRJbnN0KDB4YzQwMDAwMDAgfCAoZnQgPDwgT1BfU0hfRlQpIHwg
KHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChvZmZzZXQgJiAweGZmZmYpKTsK
KyNpZiBfX21pcHMgPT0gMQorICAgICAgICBub3AoKTsKKyNlbmRpZgorICAgIH0KKworICAgIHZv
aWQgbGRjMShGUFJlZ2lzdGVySUQgZnQsIFJlZ2lzdGVySUQgcnMsIGludCBvZmZzZXQpCisgICAg
eworICAgICAgICAvKiBsZGMxICovCisgICAgICAgIGVtaXRJbnN0KDB4ZDQwMDAwMDAgfCAoZnQg
PDwgT1BfU0hfRlQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChvZmZz
ZXQgJiAweGZmZmYpKTsKKyAgICB9CisKKyAgICB2b2lkIHN3YzEoRlBSZWdpc3RlcklEIGZ0LCBS
ZWdpc3RlcklEIHJzLCBpbnQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgLyogc3djMSAqLworICAg
ICAgICBlbWl0SW5zdCgweGU0MDAwMDAwIHwgKGZ0IDw8IE9QX1NIX0ZUKSB8IChycyA8PCBPUF9T
SF9SUykKKyAgICAgICAgICAgICAgICAgfCAob2Zmc2V0ICYgMHhmZmZmKSk7CisgICAgfQorCisg
ICAgdm9pZCBzZGMxKEZQUmVnaXN0ZXJJRCBmdCwgUmVnaXN0ZXJJRCBycywgaW50IG9mZnNldCkK
KyAgICB7CisgICAgICAgIC8qIHNkYzEgKi8KKyAgICAgICAgZW1pdEluc3QoMHhmNDAwMDAwMCB8
IChmdCA8PCBPUF9TSF9GVCkgfCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAgICAgICAgIHwg
KG9mZnNldCAmIDB4ZmZmZikpOworICAgIH0KKworICAgIHZvaWQgbXRjMShSZWdpc3RlcklEIHJ0
LCBGUFJlZ2lzdGVySUQgZnMpCisgICAgeworICAgICAgICAvKiBtdGMxICovCisgICAgICAgIGVt
aXRJbnN0KDB4NDQ4MDAwMDAgfCAoZnMgPDwgT1BfU0hfRlMpIHwgKHJ0IDw8IE9QX1NIX1JUKSk7
CisjaWYgX19taXBzID09IDEKKyAgICAgICAgbm9wKCk7CisjZW5kaWYKKyAgICB9CisKKyAgICB2
b2lkIG1mYzEoUmVnaXN0ZXJJRCBydCwgRlBSZWdpc3RlcklEIGZzKQorICAgIHsKKyAgICAgICAg
LyogbWZjMSAqLworICAgICAgICBlbWl0SW5zdCgweDQ0MDAwMDAwIHwgKGZzIDw8IE9QX1NIX0ZT
KSB8IChydCA8PCBPUF9TSF9SVCkpOworI2lmIF9fbWlwcyA9PSAxCisgICAgICAgIG5vcCgpOwor
I2VuZGlmCisgICAgfQorCisgICAgdm9pZCB0cnVuY193X2QoRlBSZWdpc3RlcklEIGZkLCBGUFJl
Z2lzdGVySUQgZnMpCisgICAgeworICAgICAgICAvKiB0cnVuYy53LmQgKi8KKyAgICAgICAgZW1p
dEluc3QoMHg0NjIwMDAwZCB8IChmZCA8PCBPUF9TSF9GRCkgfCAoZnMgPDwgT1BfU0hfRlMpKTsK
KyAgICB9CisKKyAgICB2b2lkIGN2dF9kX3coRlBSZWdpc3RlcklEIGZkLCBGUFJlZ2lzdGVySUQg
ZnMpCisgICAgeworICAgICAgICAvKiBjdnQuZC53ICovCisgICAgICAgIGVtaXRJbnN0KDB4NDY4
MDAwMjEgfCAoZmQgPDwgT1BfU0hfRkQpIHwgKGZzIDw8IE9QX1NIX0ZTKSk7CisgICAgfQorCisg
ICAgdm9pZCBjX2VxX2QoRlBSZWdpc3RlcklEIGZzLCBGUFJlZ2lzdGVySUQgZnQpCisgICAgewor
ICAgICAgICAvKiBjLmVxLmQgKi8KKyAgICAgICAgZW1pdEluc3QoMHg0NjIwMDAzMiB8IChmcyA8
PCBPUF9TSF9GUykgfCAoZnQgPDwgT1BfU0hfRlQpKTsKKyNpZiBfX21pcHMgPT0gMQorICAgICAg
ICBub3AoKTsKKyNlbmRpZgorICAgIH0KKworICAgIHZvaWQgY19sdF9kKEZQUmVnaXN0ZXJJRCBm
cywgRlBSZWdpc3RlcklEIGZ0KQorICAgIHsKKyAgICAgICAgLyogYy5sdC5kICovCisgICAgICAg
IGVtaXRJbnN0KDB4NDYyMDAwM2MgfCAoZnMgPDwgT1BfU0hfRlMpIHwgKGZ0IDw8IE9QX1NIX0ZU
KSk7CisjaWYgX19taXBzID09IDEKKyAgICAgICAgbm9wKCk7CisjZW5kaWYKKyAgICB9CisKKyAg
ICB2b2lkIGNfbGVfZChGUFJlZ2lzdGVySUQgZnMsIEZQUmVnaXN0ZXJJRCBmdCkKKyAgICB7Cisg
ICAgICAgIC8qIGMubHQuZCAqLworICAgICAgICBlbWl0SW5zdCgweDQ2MjAwMDNlIHwgKGZzIDw8
IE9QX1NIX0ZTKSB8IChmdCA8PCBPUF9TSF9GVCkpOworI2lmIF9fbWlwcyA9PSAxCisgICAgICAg
IG5vcCgpOworI2VuZGlmCisgICAgfQorCisgICAgSm1wU3JjIGJjMXQoKQorICAgIHsKKyAgICAg
ICAgLyogYmMxdCAqLworICAgICAgICBlbWl0SW5zdCgweDQ1MDEwMDAwKTsKKyAgICAgICAgbm9w
KCk7CisgICAgICAgIC8qIFdlIG5lZWQgZm91ciB3b3JkcyBmb3IgcmVsYXhhdGlvbi4gICovCisg
ICAgICAgIGJlcShNSVBTUmVnaXN0ZXJzOjp6ZXJvLCBNSVBTUmVnaXN0ZXJzOjp6ZXJvLCAzKTsg
Ly8gSnVtcCBvdmVyIG5vcHMKKyAgICAgICAgbm9wKCk7CisgICAgICAgIG5vcCgpOworICAgICAg
ICBub3AoKTsKKyAgICAgICAgcmV0dXJuIEptcFNyYyhtX2J1ZmZlci5zaXplKCkpOworICAgIH0K
KworICAgIEptcFNyYyBmYXJfZnVuY3Rpb25fY2FsbCgpCisgICAgeworICAgICAgICBsdWkoTUlQ
U1JlZ2lzdGVyczo6dDksIDApOworICAgICAgICBvcmkoTUlQU1JlZ2lzdGVyczo6dDksIE1JUFNS
ZWdpc3RlcnM6OnQ5LCAwKTsKKyAgICAgICAgamFscihNSVBTUmVnaXN0ZXJzOjp0OSk7CisgICAg
ICAgIG5vcCgpOworICAgICAgICByZXR1cm4gSm1wU3JjKG1fYnVmZmVyLnNpemUoKSk7CisgICAg
fQorCisgICAgSm1wU3JjIGZ1bmN0aW9uX2NhbGwoKQorICAgIHsKKyAgICAgICAgLyogV2UgbmVl
ZCB0d28gd29yZHMgZm9yIHJlbGF4YXRpb24uICAqLworICAgICAgICBub3AoKTsKKyAgICAgICAg
bm9wKCk7CisgICAgICAgIGphbCgpOworICAgICAgICBub3AoKTsKKyAgICAgICAgcmV0dXJuIEpt
cFNyYyhtX2J1ZmZlci5zaXplKCkpOworICAgIH0KKworICAgIEptcFNyYyBmdW5jdGlvbl9jYWxs
X3ZpYV9yZWdpc3RlcihSZWdpc3RlcklEIHJzKQorICAgIHsKKyAgICAgICAgamFscihycyk7Cisg
ICAgICAgIG5vcCgpOworICAgICAgICByZXR1cm4gSm1wU3JjKG1fYnVmZmVyLnNpemUoKSk7Cisg
ICAgfQorCisgICAgSm1wU3JjIHRhaWxfZnVuY3Rpb25fY2FsbF92aWFfcmVnaXN0ZXIoUmVnaXN0
ZXJJRCBycykKKyAgICB7CisgICAgICAgIGpyKHJzKTsKKyAgICAgICAgbm9wKCk7CisgICAgICAg
IHJldHVybiBKbXBTcmMobV9idWZmZXIuc2l6ZSgpKTsKKyAgICB9CisKKyAgICAvLyBHZW5lcmFs
IGhlbHBlcnMKKworICAgIEptcERzdCBsYWJlbCgpCisgICAgeworICAgICAgICByZXR1cm4gSm1w
RHN0KG1fYnVmZmVyLnNpemUoKSk7CisgICAgfQorCisgICAgSm1wRHN0IGFsaWduKGludCBhbGln
bm1lbnQpCisgICAgeworICAgICAgICB3aGlsZSAoIW1fYnVmZmVyLmlzQWxpZ25lZChhbGlnbm1l
bnQpKQorICAgICAgICAgICAgYmtwdCgpOworCisgICAgICAgIHJldHVybiBsYWJlbCgpOworICAg
IH0KKworICAgIHN0YXRpYyB2b2lkKiBnZXRSZWxvY2F0ZWRBZGRyZXNzKHZvaWQqIGNvZGUsIEpt
cFNyYyBqdW1wKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGp1bXAubV9vZmZzZXQgIT0gLTEpOwor
ICAgICAgICB2b2lkKiBiID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oKHJlaW50ZXJwcmV0X2Nh
c3Q8aW50cHRyX3Q+KGNvZGUpKSArIGp1bXAubV9vZmZzZXQpOworICAgICAgICByZXR1cm4gYjsK
KyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCogZ2V0UmVsb2NhdGVkQWRkcmVzcyh2b2lkKiBjb2Rl
LCBKbXBEc3QgbGFiZWwpCisgICAgeworICAgICAgICB2b2lkKiBiID0gcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGNvZGUpKSArIGxhYmVsLm1fb2Zm
c2V0KTsKKyAgICAgICAgcmV0dXJuIGI7CisgICAgfQorCisgICAgc3RhdGljIGludCBnZXREaWZm
ZXJlbmNlQmV0d2VlbkxhYmVscyhKbXBEc3QgZnJvbSwgSm1wRHN0IHRvKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHRvLm1fb2Zmc2V0IC0gZnJvbS5tX29mZnNldDsKKyAgICB9CisKKyAgICBzdGF0
aWMgaW50IGdldERpZmZlcmVuY2VCZXR3ZWVuTGFiZWxzKEptcERzdCBmcm9tLCBKbXBTcmMgdG8p
CisgICAgeworICAgICAgICByZXR1cm4gdG8ubV9vZmZzZXQgLSBmcm9tLm1fb2Zmc2V0OworICAg
IH0KKworICAgIHN0YXRpYyBpbnQgZ2V0RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMoSm1wU3JjIGZy
b20sIEptcERzdCB0bykKKyAgICB7CisgICAgICAgIHJldHVybiB0by5tX29mZnNldCAtIGZyb20u
bV9vZmZzZXQ7CisgICAgfQorCisgICAgLy8gQXNzZW1ibGVyIGFkbWluIG1ldGhvZHM6CisKKyAg
ICBzaXplX3Qgc2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9idWZmZXIuc2l6
ZSgpOworICAgIH0KKworICAgIHZvaWQqIGV4ZWN1dGFibGVDb3B5KEV4ZWN1dGFibGVQb29sKiBh
bGxvY2F0b3IpCisgICAgeworICAgICAgICBpbnQgc2l6ZSA9IG1fYnVmZmVyLnNpemUoKTsKKyAg
ICAgICAgaWYgKCFzaXplKQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgdm9pZCog
cmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvYyhzaXplKTsKKyAgICAgICAgaWYgKCFyZXN1bHQpCisg
ICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBFeGVjdXRhYmxlQWxsb2NhdG9yOjptYWtl
V3JpdGFibGUocmVzdWx0LCBzaXplKTsKKyAgICAgICAgbWVtY3B5KHJlc3VsdCwgbV9idWZmZXIu
ZGF0YSgpLCBtX2J1ZmZlci5zaXplKCkpOworICAgICAgICByZWxvY2F0ZUp1bXBzKG1fYnVmZmVy
LmRhdGEoKSwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBz
dGF0aWMgdW5zaWduZWQgZ2V0Q2FsbFJldHVybk9mZnNldChKbXBTcmMgY2FsbCkKKyAgICB7Cisg
ICAgICAgIC8vIFRoZSByZXR1cm4gYWRkcmVzcyBpcyBhZnRlciBhIGNhbGwgYW5kIGEgZGVsYXkg
c2xvdCBpbnN0cnVjdGlvbgorICAgICAgICByZXR1cm4gY2FsbC5tX29mZnNldDsKKyAgICB9CisK
KyAgICAvLyBMaW5raW5nICYgcGF0Y2hpbmc6CisgICAgLy8KKyAgICAvLyAnbGluaycgYW5kICdw
YXRjaCcgbWV0aG9kcyBhcmUgZm9yIHVzZSBvbiB1bnByb3RlY3RlZCBjb2RlIC0gc3VjaCBhcyB0
aGUgY29kZQorICAgIC8vIHdpdGhpbiB0aGUgQXNzZW1ibGVyQnVmZmVyLCBhbmQgY29kZSBiZWlu
ZyBwYXRjaGVkIGJ5IHRoZSBwYXRjaCBidWZmZXIuICBPbmNlCisgICAgLy8gY29kZSBoYXMgYmVl
biBmaW5hbGl6ZWQgaXQgaXMgKHBsYXRmb3JtIHN1cHBvcnQgcGVybWl0dGluZykgd2l0aGluIGEg
bm9uLQorICAgIC8vIHdyaXRhYmxlIHJlZ2lvbiBvZiBtZW1vcnk7IHRvIG1vZGlmeSB0aGUgY29k
ZSBpbiBhbiBleGVjdXRlLW9ubHkgZXhlY3VhYmxlCisgICAgLy8gcG9vbCB0aGUgJ3JlcGF0Y2gn
IGFuZCAncmVsaW5rJyBtZXRob2RzIHNob3VsZCBiZSB1c2VkLgorCisgICAgdm9pZCBsaW5rSnVt
cChKbXBTcmMgZnJvbSwgSm1wRHN0IHRvKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHRvLm1fb2Zm
c2V0ICE9IC0xKTsKKyAgICAgICAgQVNTRVJUKGZyb20ubV9vZmZzZXQgIT0gLTEpOworICAgICAg
ICBNSVBTV29yZCogaW5zbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8TUlQU1dvcmQqPihyZWludGVycHJl
dF9jYXN0PGludHB0cl90PihtX2J1ZmZlci5kYXRhKCkpICsgZnJvbS5tX29mZnNldCk7CisgICAg
ICAgIE1JUFNXb3JkKiB0b19wb3MgPSByZWludGVycHJldF9jYXN0PE1JUFNXb3JkKj4ocmVpbnRl
cnByZXRfY2FzdDxpbnRwdHJfdD4obV9idWZmZXIuZGF0YSgpKSArIHRvLm1fb2Zmc2V0KTsKKwor
ICAgICAgICBBU1NFUlQoKCooaW5zbiAtIDEpKSA9PSAwICYmICgqKGluc24gLSAyKSkgPT0gMCAm
JiAoKihpbnNuIC0gMykpID09IDAgJiYgKCooaW5zbiAtIDUpKSA9PSAwKTsKKyAgICAgICAgaW5z
biA9IGluc24gLSA2OworICAgICAgICBsaW5rV2l0aE9mZnNldChpbnNuLCB0b19wb3MpOworICAg
IH0KKworICAgIHN0YXRpYyB2b2lkIGxpbmtKdW1wKHZvaWQqIGNvZGUsIEptcFNyYyBmcm9tLCB2
b2lkKiB0bykKKyAgICB7CisgICAgICAgIEFTU0VSVChmcm9tLm1fb2Zmc2V0ICE9IC0xKTsKKyAg
ICAgICAgTUlQU1dvcmQqIGluc24gPSByZWludGVycHJldF9jYXN0PE1JUFNXb3JkKj4ocmVpbnRl
cnByZXRfY2FzdDxpbnRwdHJfdD4oY29kZSkgKyBmcm9tLm1fb2Zmc2V0KTsKKworICAgICAgICBB
U1NFUlQoKCooaW5zbiAtIDEpKSA9PSAwICYmICgqKGluc24gLSAyKSkgPT0gMCAmJiAoKihpbnNu
IC0gMykpID09IDAgJiYgKCooaW5zbiAtIDUpKSA9PSAwKTsKKyAgICAgICAgaW5zbiA9IGluc24g
LSA2OworICAgICAgICBsaW5rV2l0aE9mZnNldChpbnNuLCB0byk7CisgICAgfQorCisgICAgc3Rh
dGljIHZvaWQgbGlua0NhbGwodm9pZCogY29kZSwgSm1wU3JjIGZyb20sIHZvaWQqIHRvKQorICAg
IHsKKyAgICAgICAgTUlQU1dvcmQqIGluc24gPSByZWludGVycHJldF9jYXN0PE1JUFNXb3JkKj4o
cmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oY29kZSkgKyBmcm9tLm1fb2Zmc2V0KTsKKyAgICAg
ICAgbGlua0NhbGxJbnRlcm5hbChpbnNuLCB0byk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQg
bGlua1BvaW50ZXIodm9pZCogY29kZSwgSm1wRHN0IGZyb20sIHZvaWQqIHRvKQorICAgIHsKKyAg
ICAgICAgTUlQU1dvcmQqIGluc24gPSByZWludGVycHJldF9jYXN0PE1JUFNXb3JkKj4ocmVpbnRl
cnByZXRfY2FzdDxpbnRwdHJfdD4oY29kZSkgKyBmcm9tLm1fb2Zmc2V0KTsKKyAgICAgICAgQVNT
RVJUKCgoKmluc24pICYgMHhmZmUwMDAwMCkgPT0gMHgzYzAwMDAwMCk7IC8vIGx1aQorICAgICAg
ICAqaW5zbiA9ICgoKmluc24pICYgMHhmZmZmMDAwMCkgfCAoKHJlaW50ZXJwcmV0X2Nhc3Q8aW50
cHRyX3Q+KHRvKSA+PiAxNikgJiAweGZmZmYpOworICAgICAgICBpbnNuKys7CisgICAgICAgIEFT
U0VSVCgoKCppbnNuKSAmIDB4ZmMwMDAwMDApID09IDB4MzQwMDAwMDApOyAvLyBvcmkKKyAgICAg
ICAgKmluc24gPSAoKCppbnNuKSAmIDB4ZmZmZjAwMDApIHwgKHJlaW50ZXJwcmV0X2Nhc3Q8aW50
cHRyX3Q+KHRvKSAmIDB4ZmZmZik7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVsaW5rSnVt
cCh2b2lkKiBmcm9tLCB2b2lkKiB0bykKKyAgICB7CisgICAgICAgIE1JUFNXb3JkKiBpbnNuID0g
cmVpbnRlcnByZXRfY2FzdDxNSVBTV29yZCo+KGZyb20pOworCisgICAgICAgIEFTU0VSVCgoKihp
bnNuIC0gMSkpID09IDAgJiYgKCooaW5zbiAtIDIpKSA9PSAwICYmICgqKGluc24gLSAzKSkgPT0g
MCAmJiAoKihpbnNuIC0gNSkpID09IDApOworICAgICAgICBpbnNuID0gaW5zbiAtIDY7CisgICAg
ICAgIGludCBmbHVzaF9zaXplID0gbGlua1dpdGhPZmZzZXQoaW5zbiwgdG8pOworCisgICAgICAg
IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmNhY2hlRmx1c2goaW5zbiwgZmx1c2hfc2l6ZSk7CisgICAg
fQorCisgICAgc3RhdGljIHZvaWQgcmVsaW5rQ2FsbCh2b2lkKiBmcm9tLCB2b2lkKiB0bykKKyAg
ICB7CisgICAgICAgIHZvaWQqIHN0YXJ0OworICAgICAgICBpbnQgc2l6ZSA9IGxpbmtDYWxsSW50
ZXJuYWwoZnJvbSwgdG8pOworICAgICAgICBpZiAoc2l6ZSA9PSBzaXplb2YoTUlQU1dvcmQpKQor
ICAgICAgICAgICAgc3RhcnQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9j
YXN0PGludHB0cl90Pihmcm9tKSAtIDIgKiBzaXplb2YoTUlQU1dvcmQpKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgc3RhcnQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJl
dF9jYXN0PGludHB0cl90Pihmcm9tKSAtIDQgKiBzaXplb2YoTUlQU1dvcmQpKTsKKworICAgICAg
ICBFeGVjdXRhYmxlQWxsb2NhdG9yOjpjYWNoZUZsdXNoKHN0YXJ0LCBzaXplKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgdm9pZCByZXBhdGNoSW50MzIodm9pZCogZnJvbSwgaW50MzJfdCB0bykKKyAg
ICB7CisgICAgICAgIE1JUFNXb3JkKiBpbnNuID0gcmVpbnRlcnByZXRfY2FzdDxNSVBTV29yZCo+
KGZyb20pOworICAgICAgICBBU1NFUlQoKCgqaW5zbikgJiAweGZmZTAwMDAwKSA9PSAweDNjMDAw
MDAwKTsgLy8gbHVpCisgICAgICAgICppbnNuID0gKCgqaW5zbikgJiAweGZmZmYwMDAwKSB8ICgo
dG8gPj4gMTYpICYgMHhmZmZmKTsKKyAgICAgICAgaW5zbisrOworICAgICAgICBBU1NFUlQoKCgq
aW5zbikgJiAweGZjMDAwMDAwKSA9PSAweDM0MDAwMDAwKTsgLy8gb3JpCisgICAgICAgICppbnNu
ID0gKCgqaW5zbikgJiAweGZmZmYwMDAwKSB8ICh0byAmIDB4ZmZmZik7CisgICAgICAgIGluc24t
LTsKKyAgICAgICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6Y2FjaGVGbHVzaChpbnNuLCAyICogc2l6
ZW9mKE1JUFNXb3JkKSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVwYXRjaFBvaW50ZXIo
dm9pZCogZnJvbSwgdm9pZCogdG8pCisgICAgeworICAgICAgICByZXBhdGNoSW50MzIoZnJvbSwg
cmVpbnRlcnByZXRfY2FzdDxpbnQzMl90Pih0bykpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lk
IHJlcGF0Y2hMb2FkUHRyVG9MRUEodm9pZCogZnJvbSkKKyAgICB7CisgICAgICAgIE1JUFNXb3Jk
KiBpbnNuID0gcmVpbnRlcnByZXRfY2FzdDxNSVBTV29yZCo+KGZyb20pOworICAgICAgICBpbnNu
ID0gaW5zbiArIDM7CisgICAgICAgIEFTU0VSVCgoKCppbnNuKSAmIDB4ZmMwMDAwMDApID09IDB4
OGMwMDAwMDApOyAvLyBsdworICAgICAgICAvKiBsdyAtPiBhZGRpdSAqLworICAgICAgICAqaW5z
biA9IDB4MjQwMDAwMDAgfCAoKCppbnNuKSAmIDB4MDNmZmZmZmYgKTsKKworICAgICAgICBFeGVj
dXRhYmxlQWxsb2NhdG9yOjpjYWNoZUZsdXNoKGluc24sIHNpemVvZihNSVBTV29yZCkpOworICAg
IH0KKworcHJpdmF0ZToKKworICAgIC8qIFVwZGF0ZSBlYWNoIGp1bXAgaW4gdGhlIGJ1ZmZlciBv
ZiBuZXdfYmFzZS4gICovCisgICAgdm9pZCByZWxvY2F0ZUp1bXBzKHZvaWQqIG9sZF9iYXNlLCB2
b2lkKiBuZXdfYmFzZSkKKyAgICB7CisgICAgICAgIC8vIENoZWNrIGVhY2gganVtcAorICAgICAg
ICBmb3IgKEp1bXBzOjpJdGVyYXRvciBpdGVyID0gbV9qdW1wcy5iZWdpbigpOyBpdGVyICE9IG1f
anVtcHMuZW5kKCk7ICsraXRlcikgeworICAgICAgICAgICAgaW50IHBvcyA9ICppdGVyOworICAg
ICAgICAgICAgTUlQU1dvcmQqIGluc24gPSByZWludGVycHJldF9jYXN0PE1JUFNXb3JkKj4ocmVp
bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obmV3X2Jhc2UpICsgcG9zKTsKKyAgICAgICAgICAgIGlu
c24gPSBpbnNuICsgMjsKKyAgICAgICAgICAgIC8vIE5lZWQgdG8gbWFrZSBzdXJlIHdlIGhhdmUg
NSB2YWxpZCBpbnN0cnVjdGlvbnMgYWZ0ZXIgcG9zCisgICAgICAgICAgICBpZiAocG9zID49IG1f
YnVmZmVyLnNpemUoKSAtIDUgKiBzaXplb2YoTUlQU1dvcmQpKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgICAgICBpZiAoKCgqaW5zbikgJiAweGZjMDAwMDAwKSA9PSAweDA4
MDAwMDAwKSB7IC8vIEoKKyAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gKCppbnNuKSAmIDB4
MDNmZmZmZmY7CisgICAgICAgICAgICAgICAgaW50IG9sZF9pbnNuX2FkZHJlc3MgPSAoaW50KWlu
c24gLSAoaW50KW5ld19iYXNlICsgKGludClvbGRfYmFzZTsKKyAgICAgICAgICAgICAgICBpbnQg
dG9wX2ZvdXJfYml0cyA9IChvbGRfaW5zbl9hZGRyZXNzICsgNCkgPj4gMjg7CisgICAgICAgICAg
ICAgICAgaW50IG9sZF90YXJnZXRfYWRkcmVzcyA9ICh0b3BfZm91cl9iaXRzIDw8IDI4KSB8IChv
ZmZzZXQgPDwgMik7CisgICAgICAgICAgICAgICAgaW50IG5ld190YXJnZXRfYWRkcmVzcyA9IG9s
ZF90YXJnZXRfYWRkcmVzcyAtIChpbnQpb2xkX2Jhc2UgKyAoaW50KW5ld19iYXNlOworICAgICAg
ICAgICAgICAgIGludCBuZXdfaW5zbl9hZGRyZXNzID0gKGludClpbnNuOworICAgICAgICAgICAg
ICAgIGlmICgoKG5ld19pbnNuX2FkZHJlc3MgKyA0KSA+PiAyOCkgPT0gKG5ld190YXJnZXRfYWRk
cmVzcyA+PiAyOCkpIHsKKyAgICAgICAgICAgICAgICAgICAgKmluc24gPSAweDA4MDAwMDAwIHwg
KChuZXdfdGFyZ2V0X2FkZHJlc3MgPj4gMikgJiAweDNmZmZmZmYpOworICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8qIGx1aSAqLworICAgICAgICAgICAgICAg
ICAgICAqaW5zbiA9IDB4M2MwMDAwMDAgfCAoTUlQU1JlZ2lzdGVyczo6dDkgPDwgT1BfU0hfUlQp
IHwgKChuZXdfdGFyZ2V0X2FkZHJlc3MgPj4gMTYpICYgMHhmZmZmKTsKKyAgICAgICAgICAgICAg
ICAgICAgLyogb3JpICovCisgICAgICAgICAgICAgICAgICAgICooaW5zbiArIDEpID0gMHgzNDAw
MDAwMCB8IChNSVBTUmVnaXN0ZXJzOjp0OSA8PCBPUF9TSF9SVCkgfCAoTUlQU1JlZ2lzdGVyczo6
dDkgPDwgT1BfU0hfUlMpIHwgKG5ld190YXJnZXRfYWRkcmVzcyAmIDB4ZmZmZik7CisgICAgICAg
ICAgICAgICAgICAgIC8qIGpyICovCisgICAgICAgICAgICAgICAgICAgICooaW5zbiArIDIpID0g
MHgwMDAwMDAwOCB8IChNSVBTUmVnaXN0ZXJzOjp0OSA8PCBPUF9TSF9SUyk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmICgoKCppbnNuKSAmIDB4ZmZlMDAwMDApID09
IDB4M2MwMDAwMDApIHsgLy8gTFVJCisgICAgICAgICAgICAgICAgaW50IGhpZ2ggPSAoKCppbnNu
KSAmIDB4ZmZmZikgPDwgMTY7CisgICAgICAgICAgICAgICAgaW50IGxvdyA9ICgqKGluc24gKyAx
KSkgJiAweGZmZmY7CisgICAgICAgICAgICAgICAgaW50IG9sZF90YXJnZXRfYWRkcmVzcyA9IGhp
Z2ggfCBsb3c7CisgICAgICAgICAgICAgICAgaW50IG5ld190YXJnZXRfYWRkcmVzcyA9IG9sZF90
YXJnZXRfYWRkcmVzcyAtIChpbnQpb2xkX2Jhc2UgKyAoaW50KW5ld19iYXNlOworICAgICAgICAg
ICAgICAgIC8qIGx1aSAqLworICAgICAgICAgICAgICAgICppbnNuID0gMHgzYzAwMDAwMCB8IChN
SVBTUmVnaXN0ZXJzOjp0OSA8PCBPUF9TSF9SVCkgfCAoKG5ld190YXJnZXRfYWRkcmVzcyA+PiAx
NikgJiAweGZmZmYpOworICAgICAgICAgICAgICAgIC8qIG9yaSAqLworICAgICAgICAgICAgICAg
ICooaW5zbiArIDEpID0gMHgzNDAwMDAwMCB8IChNSVBTUmVnaXN0ZXJzOjp0OSA8PCBPUF9TSF9S
VCkgfCAoTUlQU1JlZ2lzdGVyczo6dDkgPDwgT1BfU0hfUlMpIHwgKG5ld190YXJnZXRfYWRkcmVz
cyAmIDB4ZmZmZik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0
aWMgaW50IGxpbmtXaXRoT2Zmc2V0KE1JUFNXb3JkKiBpbnNuLCB2b2lkKiB0bykKKyAgICB7Cisg
ICAgICAgIEFTU0VSVCgoKCgqaW5zbikgJiAweGZjMDAwMDAwKSA9PSAweDEwMDAwMDAwKSAvLyBi
ZXEKKyAgICAgICAgICAgICAgIHx8ICgoKCppbnNuKSAmIDB4ZmMwMDAwMDApID09IDB4MTQwMDAw
MDApIC8vIGJuZQorICAgICAgICAgICAgICAgfHwgKCgoKmluc24pICYgMHhmZmZmMDAwMCkgPT0g
MHg0NTAxMDAwMCkgLy8gYmMxdAorICAgICAgICAgICAgICAgfHwgKCgoKmluc24pICYgMHhmZmZm
MDAwMCkgPT0gMHg0NTAwMDAwMCkpOyAvLyBiYzFmCisgICAgICAgIGludCBkaWZmID0gKHJlaW50
ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGlu
c24pIC0gNCkgPj4gMjsKKworICAgICAgICBpZiAoZGlmZiA8IC0zMjc2OCB8fCBkaWZmID4gMzI3
NjcpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgQ29udmVydCB0aGUgc2VxdWVu
Y2U6CisgICAgICAgICAgICAgICAgICBiZXEgJDIsICQzLCB0YXJnZXQKKyAgICAgICAgICAgICAg
ICAgIG5vcAorICAgICAgICAgICAgICAgICAgYiAxZgorICAgICAgICAgICAgICAgICAgbm9wCisg
ICAgICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAg
ICAgIDE6CisKKyAgICAgICAgICAgICAgICB0byB0aGUgbmV3IHNlcXVlbmNlIGlmIHBvc3NpYmxl
OgorICAgICAgICAgICAgICAgICAgYm5lICQyLCAkMywgMWYKKyAgICAgICAgICAgICAgICAgIG5v
cAorICAgICAgICAgICAgICAgICAgaiAgICB0YXJnZXQKKyAgICAgICAgICAgICAgICAgIG5vcAor
ICAgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAg
ICAgICAxOgorCisgICAgICAgICAgICAgICAgT1IgdG8gdGhlIG5ldyBzZXF1ZW5jZToKKyAgICAg
ICAgICAgICAgICAgIGJuZSAkMiwgJDMsIDFmCisgICAgICAgICAgICAgICAgICBub3AKKyAgICAg
ICAgICAgICAgICAgIGx1aSAkMjUsIHRhcmdldCA+PiAxNgorICAgICAgICAgICAgICAgICAgb3Jp
ICQyNSwgJDI1LCB0YXJnZXQgJiAweGZmZmYKKyAgICAgICAgICAgICAgICAgIGpyICQyNQorICAg
ICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgMToKKworICAgICAgICAgICAgICAg
IE5vdGU6IGJlcS9ibmUvYmMxdCBhcmUgY29udmVydGVkIHRvIGJuZS9iZXEvYmMxZi4KKyAgICAg
ICAgICAgICovCisKKyAgICAgICAgICAgIGlmICgoKihpbnNuICsgMikpID09IDB4MTAwMDAwMDMp
IHsKKyAgICAgICAgICAgICAgICBpZiAoKCgqaW5zbikgJiAweGZjMDAwMDAwKSA9PSAweDEwMDAw
MDAwKSAgICAgICAvLyBiZXEKKyAgICAgICAgICAgICAgICAgICAgKmluc24gPSAoKCppbnNuKSAm
IDB4MDNmZjAwMDApIHwgMHgxNDAwMDAwNTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICgoKCpp
bnNuKSAmIDB4ZmMwMDAwMDApID09IDB4MTQwMDAwMDApICAvLyBibmUKKyAgICAgICAgICAgICAg
ICAgICAgKmluc24gPSAoKCppbnNuKSAmIDB4MDNmZjAwMDApIHwgMHgxMDAwMDAwNTsKKyAgICAg
ICAgICAgICAgICBlbHNlIGlmICgoKCppbnNuKSAmIDB4ZmZmZjAwMDApID09IDB4NDUwMTAwMDAp
ICAvLyBiYzF0CisgICAgICAgICAgICAgICAgICAgICppbnNuID0gKCgqaW5zbikgJiAweDAwMDAw
MDAwKSB8IDB4NDUwMDAwMDU7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoMCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGluc24gPSBpbnNu
ICsgMjsKKyAgICAgICAgICAgIGlmICgoKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluc24p
ICsgNCkgPj4gMjgpID09IChyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgPj4gMjgpKSB7
CisgICAgICAgICAgICAgICAgKmluc24gPSAweDA4MDAwMDAwIHwgKChyZWludGVycHJldF9jYXN0
PGludHB0cl90Pih0bykgPj4gMikgJiAweDNmZmZmZmYpOworICAgICAgICAgICAgICAgIHJldHVy
biAzICogc2l6ZW9mKE1JUFNXb3JkKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgLyogbHVpICovCisgICAgICAgICAgICAgICAgaW50IG5ld190YXJnZXRfYWRkcmVzcyA9
IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKTsKKyAgICAgICAgICAgICAgICAqaW5zbiA9
IDB4M2MwMDAwMDAgfCAoTUlQU1JlZ2lzdGVyczo6dDkgPDwgT1BfU0hfUlQpIHwgKChuZXdfdGFy
Z2V0X2FkZHJlc3MgPj4gMTYpICYgMHhmZmZmKTsKKyAgICAgICAgICAgICAgICAvKiBvcmkgKi8K
KyAgICAgICAgICAgICAgICAqKGluc24gKyAxKSA9IDB4MzQwMDAwMDAgfCAoTUlQU1JlZ2lzdGVy
czo6dDkgPDwgT1BfU0hfUlQpIHwgKE1JUFNSZWdpc3RlcnM6OnQ5IDw8IE9QX1NIX1JTKSB8IChu
ZXdfdGFyZ2V0X2FkZHJlc3MgJiAweGZmZmYpOworICAgICAgICAgICAgICAgIC8qIGpyICovCisg
ICAgICAgICAgICAgICAgKihpbnNuICsgMikgPSAweDAwMDAwMDA4IHwgKE1JUFNSZWdpc3RlcnM6
OnQ5IDw8IE9QX1NIX1JTKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gNSAqIHNpemVvZihNSVBT
V29yZCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAqaW5z
biA9ICgoKmluc24pICYgMHhmZmZmMDAwMCkgfCAoZGlmZiAmIDB4ZmZmZik7CisgICAgICAgICAg
ICByZXR1cm4gc2l6ZW9mKE1JUFNXb3JkKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsK
KyAgICB9CisKKyAgICBzdGF0aWMgaW50IGxpbmtDYWxsSW50ZXJuYWwodm9pZCogZnJvbSwgdm9p
ZCogdG8pCisgICAgeworICAgICAgICBNSVBTV29yZCogaW5zbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8
TUlQU1dvcmQqPihmcm9tKTsKKyAgICAgICAgaW5zbiA9IGluc24gLSA0OworCisgICAgICAgIGlm
ICgoKCooaW5zbiArIDIpKSAmIDB4ZmMwMDAwMDApID09IDB4MGMwMDAwMDApIHsgLy8gamFsCisg
ICAgICAgICAgICBpZiAoKChyZWludGVycHJldF9jYXN0PGludHB0cl90Pihmcm9tKSAtIDQpID4+
IDI4KSA9PSAocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pID4+IDI4KSkgeworICAgICAg
ICAgICAgICAgICooaW5zbiArIDIpID0gMHgwYzAwMDAwMCB8ICgocmVpbnRlcnByZXRfY2FzdDxp
bnRwdHJfdD4odG8pID4+IDIpICYgMHgzZmZmZmZmKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
c2l6ZW9mKE1JUFNXb3JkKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
LyogbHVpICQyNSwgKHRvID4+IDE2KSAmIDB4ZmZmZiAqLworICAgICAgICAgICAgICAgICppbnNu
ID0gMHgzYzAwMDAwMCB8IChNSVBTUmVnaXN0ZXJzOjp0OSA8PCBPUF9TSF9SVCkgfCAoKHJlaW50
ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSA+PiAxNikgJiAweGZmZmYpOworICAgICAgICAgICAg
ICAgIC8qIG9yaSAkMjUsICQyNSwgdG8gJiAweGZmZmYgKi8KKyAgICAgICAgICAgICAgICAqKGlu
c24gKyAxKSA9IDB4MzQwMDAwMDAgfCAoTUlQU1JlZ2lzdGVyczo6dDkgPDwgT1BfU0hfUlQpIHwg
KE1JUFNSZWdpc3RlcnM6OnQ5IDw8IE9QX1NIX1JTKSB8IChyZWludGVycHJldF9jYXN0PGludHB0
cl90Pih0bykgJiAweGZmZmYpOworICAgICAgICAgICAgICAgIC8qIGphbHIgJDI1ICovCisgICAg
ICAgICAgICAgICAgKihpbnNuICsgMikgPSAweDAwMDBmODA5IHwgKE1JUFNSZWdpc3RlcnM6OnQ5
IDw8IE9QX1NIX1JTKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMyAqIHNpemVvZihNSVBTV29y
ZCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiBsdWkgKi8KKyAgICAg
ICAgKmluc24gPSAoKCppbnNuKSAmIDB4ZmZmZjAwMDApIHwgKChyZWludGVycHJldF9jYXN0PGlu
dHB0cl90Pih0bykgPj4gMTYpICYgMHhmZmZmKTsKKyAgICAgICAgLyogb3JpICovCisgICAgICAg
ICooaW5zbiArIDEpID0gKCgqKGluc24gKyAxKSkgJiAweGZmZmYwMDAwKSB8IChyZWludGVycHJl
dF9jYXN0PGludHB0cl90Pih0bykgJiAweGZmZmYpOworICAgICAgICByZXR1cm4gMiAqIHNpemVv
ZihNSVBTV29yZCk7CisgICAgfQorCisgICAgQXNzZW1ibGVyQnVmZmVyIG1fYnVmZmVyOworICAg
IEp1bXBzIG1fanVtcHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVO
QUJMRShBU1NFTUJMRVIpICYmIFBMQVRGT1JNKE1JUFMpCisKKyNlbmRpZiAvLyBNSVBTQXNzZW1i
bGVyX2gKSW5kZXg6IGFzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gNDk5MjYp
CisrKyBhc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNzMsNyArMTczLDcgQEAKICAgICBzdHJ1Y3QgSW1tMzIgewogICAgICAgICBleHBsaWNpdCBJ
bW0zMihpbnQzMl90IHZhbHVlKQogICAgICAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQotI2lmIFBM
QVRGT1JNKEFSTSkKKyNpZiBQTEFURk9STShBUk0pIHx8IFBMQVRGT1JNKE1JUFMpCiAgICAgICAg
ICAgICAsIG1faXNQb2ludGVyKGZhbHNlKQogI2VuZGlmCiAgICAgICAgIHsKQEAgLTE4Miw3ICsx
ODIsNyBAQAogI2lmICFQTEFURk9STShYODZfNjQpCiAgICAgICAgIGV4cGxpY2l0IEltbTMyKElt
bVB0ciBwdHIpCiAgICAgICAgICAgICA6IG1fdmFsdWUocHRyLmFzSW50cHRyKCkpCi0jaWYgUExB
VEZPUk0oQVJNKQorI2lmIFBMQVRGT1JNKEFSTSkgfHwgUExBVEZPUk0oTUlQUykKICAgICAgICAg
ICAgICwgbV9pc1BvaW50ZXIodHJ1ZSkKICNlbmRpZgogICAgICAgICB7CkBAIC0xOTAsMTMgKzE5
MCwxNCBAQAogI2VuZGlmCiAKICAgICAgICAgaW50MzJfdCBtX3ZhbHVlOwotI2lmIFBMQVRGT1JN
KEFSTSkKKyNpZiBQTEFURk9STShBUk0pIHx8IFBMQVRGT1JNKE1JUFMpCiAgICAgICAgIC8vIFdl
IHJlbHkgb24gYmVpbmcgYWJsZSB0byByZWdlbmVyYXRlIGNvZGUgdG8gcmVjb3ZlciBleGNlcHRp
b24gaGFuZGxpbmcKICAgICAgICAgLy8gaW5mb3JtYXRpb24uICBTaW5jZSBBUk12NyBzdXBwb3J0
cyAxNi1iaXQgaW1tZWRpYXRlcyB0aGVyZSBpcyBhIGRhbmdlcgogICAgICAgICAvLyB0aGF0IGlm
IHBvaW50ZXIgdmFsdWVzIGNoYW5nZSB0aGUgbGF5b3V0IG9mIHRoZSBnZW5lcmF0ZWQgY29kZSB3
aWxsIGNoYW5nZS4KICAgICAgICAgLy8gVG8gYXZvaWQgdGhpcyBwcm9ibGVtLCBhbHdheXMgZ2Vu
ZXJhdGUgcG9pbnRlcnMgKGFuZCB0aHVzIEltbTMycyBjb25zdHJ1Y3RlZAogICAgICAgICAvLyBm
cm9tIEltbVB0cnMpIHdpdGggYSBjb2RlIHNlcXVlbmNlIHRoYXQgaXMgYWJsZSAgdG8gcmVwcmVz
ZW50ICBhbnkgcG9pbnRlcgogICAgICAgICAvLyB2YWx1ZSAtIGRvbid0IHVzZSBhIG1vcmUgY29t
cGFjdCBmb3JtIGluIHRoZXNlIGNhc2VzLgorICAgICAgICAvLyBTYW1lIGZvciBNSVBTLgogICAg
ICAgICBib29sIG1faXNQb2ludGVyOwogI2VuZGlmCiAgICAgfTsKSW5kZXg6IGFzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlck1JUFMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJNSVBTLmgJKHJldmlzaW9uIDApCisrKyBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTUyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OSBNSVBTIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIE1JUFMgVEVDSE5PTE9HSUVTLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgTUlQUyBURUNITk9MT0dJRVMsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIE1hY3JvQXNzZW1ibGVyTUlQU19oCisjZGVmaW5lIE1hY3JvQXNzZW1ibGVyTUlQ
U19oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShBU1NFTUJMRVIp
ICYmIFBMQVRGT1JNKE1JUFMpCisKKyNpbmNsdWRlICJNSVBTQXNzZW1ibGVyLmgiCisjaW5jbHVk
ZSAiQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3Mg
TWFjcm9Bc3NlbWJsZXJNSVBTIDogcHVibGljIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI8TUlQU0Fz
c2VtYmxlcj4geworcHVibGljOgorCisgICAgc3RhdGljIGNvbnN0IFNjYWxlIFNjYWxlUHRyID0g
VGltZXNGb3VyOworCisgICAgLy8gRm9yIHN0b3JpbmcgaW1tZWRpYXRlIG51bWJlcgorICAgIHN0
YXRpYyBjb25zdCBSZWdpc3RlcklEIGltbVRlbXBSZWdpc3RlciA9IE1JUFNSZWdpc3RlcnM6OnQw
OworICAgIC8vIEZvciBzdG9yaW5nIGRhdGEgbG9hZGVkIGZyb20gdGhlIG1lbW9yeQorICAgIHN0
YXRpYyBjb25zdCBSZWdpc3RlcklEIGRhdGFUZW1wUmVnaXN0ZXIgPSBNSVBTUmVnaXN0ZXJzOjp0
MTsKKyAgICAvLyBGb3Igc3RvcmluZyBhZGRyZXNzIGJhc2UKKyAgICBzdGF0aWMgY29uc3QgUmVn
aXN0ZXJJRCBhZGRyVGVtcFJlZ2lzdGVyID0gTUlQU1JlZ2lzdGVyczo6dDI7CisgICAgLy8gRm9y
IHN0b3JpbmcgY29tcGFyZSByZXN1bHQKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBjbXBU
ZW1wUmVnaXN0ZXIgPSBNSVBTUmVnaXN0ZXJzOjp0MzsKKworICAgIC8vIEZQIHRlbXAgcmVnaXN0
ZXIKKyAgICBzdGF0aWMgY29uc3QgRlBSZWdpc3RlcklEIGZwVGVtcFJlZ2lzdGVyID0gTUlQU1Jl
Z2lzdGVyczo6ZjE2OworCisgICAgZW51bSBDb25kaXRpb24geworICAgICAgICBFcXVhbCwKKyAg
ICAgICAgTm90RXF1YWwsCisgICAgICAgIEFib3ZlLAorICAgICAgICBBYm92ZU9yRXF1YWwsCisg
ICAgICAgIEJlbG93LAorICAgICAgICBCZWxvd09yRXF1YWwsCisgICAgICAgIEdyZWF0ZXJUaGFu
LAorICAgICAgICBHcmVhdGVyVGhhbk9yRXF1YWwsCisgICAgICAgIExlc3NUaGFuLAorICAgICAg
ICBMZXNzVGhhbk9yRXF1YWwsCisgICAgICAgIE92ZXJmbG93LAorICAgICAgICBTaWduZWQsCisg
ICAgICAgIFplcm8sCisgICAgICAgIE5vblplcm8KKyAgICB9OworCisgICAgZW51bSBEb3VibGVD
b25kaXRpb24geworICAgICAgICBEb3VibGVFcXVhbCwKKyAgICAgICAgRG91YmxlR3JlYXRlclRo
YW4sCisgICAgICAgIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCwKKyAgICAgICAgRG91YmxlTGVz
c1RoYW4sCisgICAgICAgIERvdWJsZUxlc3NUaGFuT3JFcXVhbAorICAgIH07CisKKyAgICBzdGF0
aWMgY29uc3QgUmVnaXN0ZXJJRCBzdGFja1BvaW50ZXJSZWdpc3RlciA9IE1JUFNSZWdpc3RlcnM6
OnNwOworICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJldHVybkFkZHJlc3NSZWdpc3RlciA9
IE1JUFNSZWdpc3RlcnM6OnJhOworCisgICAgLy8gSW50ZWdlciBhcml0aG1ldGljIG9wZXJhdGlv
bnM6CisgICAgLy8KKyAgICAvLyBPcGVyYXRpb25zIGFyZSB0eXBpY2FsbHkgdHdvIG9wZXJhbmQg
LSBvcGVyYXRpb24oc291cmNlLCBzcmNEc3QpCisgICAgLy8gRm9yIG1hbnkgb3BlcmF0aW9ucyB0
aGUgc291cmNlIG1heSBiZSBhbiBJbW0zMiwgdGhlIHNyY0RzdCBvcGVyYW5kCisgICAgLy8gbWF5
IG9mdGVuIGJlIGEgbWVtb3J5IGxvY2F0aW9uIChleHBsaWN0bHkgZGVzY3JpYmVkIHVzaW5nIGFu
IEFkZHJlc3MKKyAgICAvLyBvYmplY3QpLgorCisgICAgdm9pZCBhZGQzMihSZWdpc3RlcklEIHNy
YywgUmVnaXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuYWRkdShkZXN0LCBkZXN0LCBzcmMpOworICAgIH0KKworICAgIHZvaWQgYWRkMzIoSW1t
MzIgaW1tLCBSZWdpc3RlcklEIGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBh
ZGQzMihpbW0sIGRlc3QsIGRlc3QsIGZpeGVkKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZDMyKElt
bTMyIGltbSwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkK
KyAgICB7CisgICAgICAgIGlmICghaW1tLm1faXNQb2ludGVyICYmIGltbS5tX3ZhbHVlID49IC0z
Mjc2OCAmJiBpbW0ubV92YWx1ZSA8PSAzMjc2NyAmJiBmaXhlZCA9PSAwKSB7CisgICAgICAgICAg
ICAvKgorICAgICAgICAgICAgICBhZGRpdSAgICAgZGVzdCwgc3JjLCBpbW0KKyAgICAgICAgICAg
ICovCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRpdShkZXN0LCBzcmMsIGltbS5tX3ZhbHVl
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgIGxpICAg
ICAgICBpbW1UZW1wLCBpbW0KKyAgICAgICAgICAgICAgYWRkdSAgICAgIGRlc3QsIHNyYywgaW1t
VGVtcAorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1vdmUoaW1tLCBpbW1UZW1wUmVnaXN0
ZXIsIGZpeGVkKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoZGVzdCwgc3JjLCBpbW1U
ZW1wUmVnaXN0ZXIpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBhZGQzMihJbW0zMiBp
bW0sIEFkZHJlc3MgYWRkcmVzcywgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIGlmIChh
ZGRyZXNzLm9mZnNldCA+PSAtMzI3NjggJiYgYWRkcmVzcy5vZmZzZXQgPD0gMzI3NjcgJiYgZml4
ZWQgPT0gMCkgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgbHcgICAgICAgIGRhdGFU
ZW1wLCBvZmZzZXQoYmFzZSkKKyAgICAgICAgICAgICAgbGkgICAgICAgIGltbVRlbXAsIGltbQor
ICAgICAgICAgICAgICBhZGR1ICAgICAgZGF0YVRlbXAsIGRhdGFUZW1wLCBpbW1UZW1wCisgICAg
ICAgICAgICAgIHN3ICAgICAgICBkYXRhVGVtcCwgb2Zmc2V0KGJhc2UpCisgICAgICAgICAgICAq
LworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHcoZGF0YVRlbXBSZWdpc3RlciwgYWRkcmVzcy5i
YXNlLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAgICAgICBpZiAoIWltbS5tX2lzUG9pbnRlciAm
JiBpbW0ubV92YWx1ZSA+PSAtMzI3NjggJiYgaW1tLm1fdmFsdWUgPD0gMzI3NjcgJiYgZml4ZWQg
PT0gMCkKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRpdShkYXRhVGVtcFJlZ2lzdGVy
LCBkYXRhVGVtcFJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlt
bS5tX3ZhbHVlKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG1vdmUoaW1t
LCBpbW1UZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5h
ZGR1KGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuc3coZGF0YVRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlLCBhZGRy
ZXNzLm9mZnNldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKgorICAgICAgICAg
ICAgICBsdWkgICAgICAgYWRkclRlbXAsIChvZmZzZXQgKyAweDgwMDApID4+IDE2CisgICAgICAg
ICAgICAgIGFkZHUgICAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGJhc2UKKyAgICAgICAgICAgICAg
bHcgICAgICAgIGRhdGFUZW1wLCAob2Zmc2V0ICYgMHhmZmZmKShhZGRyVGVtcCkKKyAgICAgICAg
ICAgICAgbGkgICAgICAgIGltbXRlbXAsIGltbQorICAgICAgICAgICAgICBhZGR1ICAgICAgZGF0
YVRlbXAsIGRhdGFUZW1wLCBpbW1UZW1wCisgICAgICAgICAgICAgIHN3ICAgICAgICBkYXRhVGVt
cCwgKG9mZnNldCAmIDB4ZmZmZikoYWRkclRlbXApCisgICAgICAgICAgICAqLworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIubHVpKGFkZHJUZW1wUmVnaXN0ZXIsIChhZGRyZXNzLm9mZnNldCArIDB4
ODAwMCkgPj4gMTYpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lz
dGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UpOworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIubHcoZGF0YVRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZz
ZXQpOworCisgICAgICAgICAgICBpZiAoaW1tLm1fdmFsdWUgPj0gLTMyNzY4ICYmIGltbS5tX3Zh
bHVlIDw9IDMyNzY3ICYmIGZpeGVkID09IDApCisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIu
YWRkaXUoZGF0YVRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3RlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbW0ubV92YWx1ZSk7CisgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBtb3ZlKGltbSwgaW1tVGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShkYXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lz
dGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1tVGVtcFJlZ2lzdGVyKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN3KGRhdGFUZW1wUmVnaXN0
ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHZvaWQgYWRkMzIoQWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVk
ID0gMCkKKyAgICB7CisgICAgICAgIGxvYWQzMihzcmMsIGRhdGFUZW1wUmVnaXN0ZXIsIGZpeGVk
KTsKKyAgICAgICAgYWRkMzIoZGF0YVRlbXBSZWdpc3RlciwgZGVzdCwgZml4ZWQpOworICAgIH0K
KworICAgIHZvaWQgYWRkMzIoUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgZGVzdCwgaW50IGZpeGVk
ID0gMCkKKyAgICB7CisgICAgICAgIGlmIChkZXN0Lm9mZnNldCA+PSAtMzI3NjggJiYgZGVzdC5v
ZmZzZXQgPD0gMzI3NjcgJiYgZml4ZWQgPT0gMCkgeworICAgICAgICAgICAgLyoKKyAgICAgICAg
ICAgICAgbHcgICAgICAgIGRhdGFUZW1wLCBvZmZzZXQoYmFzZSkKKyAgICAgICAgICAgICAgYWRk
dSAgICAgIGRhdGFUZW1wLCBkYXRhVGVtcCwgc3JjCisgICAgICAgICAgICAgIHN3ICAgICAgICBk
YXRhVGVtcCwgb2Zmc2V0KGJhc2UpCisgICAgICAgICAgICAqLworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIubHcoZGF0YVRlbXBSZWdpc3RlciwgZGVzdC5iYXNlLCBkZXN0Lm9mZnNldCk7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0
ZXIsIHNyYyk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdyhkYXRhVGVtcFJlZ2lzdGVyLCBk
ZXN0LmJhc2UsIGRlc3Qub2Zmc2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8q
CisgICAgICAgICAgICAgIGx1aSAgICAgICBhZGRyVGVtcCwgKG9mZnNldCArIDB4ODAwMCkgPj4g
MTYKKyAgICAgICAgICAgICAgYWRkdSAgICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgYmFzZQorICAg
ICAgICAgICAgICBsdyAgICAgICAgZGF0YVRlbXAsIChvZmZzZXQgJiAweGZmZmYpKGFkZHJUZW1w
KQorICAgICAgICAgICAgICBhZGR1ICAgICAgZGF0YVRlbXAsIGRhdGFUZW1wLCBzcmMKKyAgICAg
ICAgICAgICAgc3cgICAgICAgIGRhdGFUZW1wLCAob2Zmc2V0ICYgMHhmZmZmKShhZGRyVGVtcCkK
KyAgICAgICAgICAgICovCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sdWkoYWRkclRlbXBSZWdp
c3RlciwgKGRlc3Qub2Zmc2V0ICsgMHg4MDAwKSA+PiAxNik7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGRlc3QuYmFzZSk7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sdyhkYXRhVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJl
Z2lzdGVyLCBkZXN0Lm9mZnNldCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGRhdGFU
ZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsIHNyYyk7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5zdyhkYXRhVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBkZXN0Lm9mZnNldCk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGFkZDMyKEltbTMyIGltbSwgQWJzb2x1dGVB
ZGRyZXNzIGFkZHJlc3MsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICAvKgorICAgICAg
ICAgICBsaSAgIGFkZHJUZW1wLCBhZGRyZXNzCisgICAgICAgICAgIGxpICAgaW1tVGVtcCwgaW1t
CisgICAgICAgICAgIGx3ICAgZGF0YVRlbXAsIDAoYWRkclRlbXApCisgICAgICAgICAgIGFkZHUg
ZGF0YVRlbXAsIGRhdGFUZW1wLCBpbW1UZW1wCisgICAgICAgICAgIHN3ICAgZGF0YVRlbXAsIDAo
YWRkclRlbXApCisgICAgICAgICovCisgICAgICAgIG1vdmUoSW1tUHRyKGFkZHJlc3MubV9wdHIp
LCBhZGRyVGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmx3KGRhdGFU
ZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIDApOworICAgICAgICBpZiAoIWltbS5tX2lz
UG9pbnRlciAmJiBpbW0ubV92YWx1ZSA+PSAtMzI3NjggJiYgaW1tLm1fdmFsdWUgPD0gMzI3Njcg
JiYgZml4ZWQgPT0gMCkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGl1KGRhdGFUZW1wUmVn
aXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsIGltbS5tX3ZhbHVlKTsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICBtb3ZlKGltbSwgaW1tVGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5hZGR1KGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsIGlt
bVRlbXBSZWdpc3Rlcik7CisgICAgICAgIH0KKyAgICAgICAgbV9hc3NlbWJsZXIuc3coZGF0YVRl
bXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgMCk7CisgICAgfQorCisgICAgdm9pZCBhbmQz
MihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIuYW5kX2luc24oZGVzdCwgZGVzdCwgc3JjKTsKKyAgICB9CisK
KyAgICB2b2lkIGFuZDMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQgPSAw
KQorICAgIHsKKyAgICAgICAgaWYgKCFpbW0ubV9pc1BvaW50ZXIgJiYgaW1tLm1fdmFsdWUgPT0g
MCAmJiBmaXhlZCA9PSAwKQorICAgICAgICAgICAgbW92ZShNSVBTUmVnaXN0ZXJzOjp6ZXJvLCBk
ZXN0LCBmaXhlZCk7CisgICAgICAgIGVsc2UgaWYgKCFpbW0ubV9pc1BvaW50ZXIgJiYgaW1tLm1f
dmFsdWUgPiAwICYmIGltbS5tX3ZhbHVlIDwgNjU1MzUgJiYgZml4ZWQgPT0gMCkKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLmFuZGkoZGVzdCwgZGVzdCwgaW1tLm1fdmFsdWUpOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgIGxpICAgICAgICBpbW1UZW1wLCBp
bW0KKyAgICAgICAgICAgICAgYW5kICAgICAgIGRlc3QsIGRlc3QsIGltbVRlbXAKKyAgICAgICAg
ICAgICovCisgICAgICAgICAgICBtb3ZlKGltbSwgaW1tVGVtcFJlZ2lzdGVyLCBmaXhlZCk7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5hbmRfaW5zbihkZXN0LCBkZXN0LCBpbW1UZW1wUmVnaXN0
ZXIpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBsc2hpZnQzMihJbW0zMiBpbW0sIFJl
Z2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVy
LnNsbChkZXN0LCBkZXN0LCBpbW0ubV92YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBsc2hpZnQz
MihSZWdpc3RlcklEIHNoaWZ0X2Ftb3VudCwgUmVnaXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQgPSAw
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc2xsdihkZXN0LCBkZXN0LCBzaGlmdF9hbW91
bnQpOworICAgIH0KKworICAgIHZvaWQgbXVsMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQg
ZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm11bChkZXN0
LCBkZXN0LCBzcmMpOworICAgIH0KKworICAgIHZvaWQgbXVsMzIoSW1tMzIgaW1tLCBSZWdpc3Rl
cklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAg
aWYgKCFpbW0ubV9pc1BvaW50ZXIgJiYgaW1tLm1fdmFsdWUgPT0gMCAmJiBmaXhlZCA9PSAwKQor
ICAgICAgICAgICAgbW92ZShNSVBTUmVnaXN0ZXJzOjp6ZXJvLCBkZXN0LCBmaXhlZCk7CisgICAg
ICAgIGVsc2UgaWYgKCFpbW0ubV9pc1BvaW50ZXIgJiYgaW1tLm1fdmFsdWUgPT0gMSAmJiBmaXhl
ZCA9PSAwKQorICAgICAgICAgICAgbW92ZShzcmMsIGRlc3QsIGZpeGVkKTsKKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgIGxpICAgICAgZGF0YVRlbXAsIGlt
bQorICAgICAgICAgICAgICAgIG11bCAgICAgZGVzdCwgc3JjLCBkYXRhVGVtcAorICAgICAgICAg
ICAgKi8KKyAgICAgICAgICAgIG1vdmUoaW1tLCBkYXRhVGVtcFJlZ2lzdGVyLCBmaXhlZCk7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5tdWwoZGVzdCwgc3JjLCBkYXRhVGVtcFJlZ2lzdGVyKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgbm90MzIoUmVnaXN0ZXJJRCBzcmNEZXN0LCBp
bnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9yKHNyY0Rlc3QsIHNy
Y0Rlc3QsIE1JUFNSZWdpc3RlcnM6Onplcm8pOworICAgIH0KKworICAgIHZvaWQgb3IzMihSZWdp
c3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIub3JfaW5zbihkZXN0LCBkZXN0LCBzcmMpOworICAgIH0KKworICAgIHZv
aWQgb3IzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7
CisgICAgICAgIGlmICghaW1tLm1faXNQb2ludGVyICYmIGltbS5tX3ZhbHVlID09IDAgJiYgZml4
ZWQgPT0gMCkKKyAgICAgICAgICAgIDsKKyAgICAgICAgZWxzZSBpZiAoIWltbS5tX2lzUG9pbnRl
ciAmJiBpbW0ubV92YWx1ZSA+IDAgJiYgaW1tLm1fdmFsdWUgPCA2NTUzNSAmJiBmaXhlZCA9PSAw
KQorICAgICAgICAgICAgbV9hc3NlbWJsZXIub3JpKGRlc3QsIGRlc3QsIGltbS5tX3ZhbHVlKTsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgIGxpICAgICAg
ZGF0YVRlbXAsIGltbQorICAgICAgICAgICAgICAgIG9yICAgICAgZGVzdCwgZGVzdCwgZGF0YVRl
bXAKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBtb3ZlKGltbSwgZGF0YVRlbXBSZWdpc3Rl
ciwgZml4ZWQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIub3JfaW5zbihkZXN0LCBkZXN0LCBk
YXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgcnNoaWZ0MzIo
UmVnaXN0ZXJJRCBzaGlmdF9hbW91bnQsIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnNyYXYoZGVzdCwgZGVzdCwgc2hpZnRfYW1vdW50
KTsKKyAgICB9CisKKyAgICB2b2lkIHJzaGlmdDMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0
LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3JhKGRlc3QsIGRl
c3QsIGltbS5tX3ZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkIHN1YjMyKFJlZ2lzdGVySUQgc3Jj
LCBSZWdpc3RlcklEIGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5zdWJ1KGRlc3QsIGRlc3QsIHNyYyk7CisgICAgfQorCisgICAgdm9pZCBzdWIzMihJbW0z
MiBpbW0sIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIGlm
ICghaW1tLm1faXNQb2ludGVyICYmIGltbS5tX3ZhbHVlID49IC0zMjc2NyAmJiBpbW0ubV92YWx1
ZSA8PSAzMjc2OCAmJiBmaXhlZCA9PSAwKSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAg
ICBhZGRpdSAgICAgZGVzdCwgc3JjLCBpbW0KKyAgICAgICAgICAgICovCisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5hZGRpdShkZXN0LCBkZXN0LCAtaW1tLm1fdmFsdWUpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgbGkgICAgICAgIGltbVRlbXAsIGlt
bQorICAgICAgICAgICAgICBzdWJ1ICAgICAgZGVzdCwgc3JjLCBpbW1UZW1wCisgICAgICAgICAg
ICAqLworICAgICAgICAgICAgbW92ZShpbW0sIGltbVRlbXBSZWdpc3RlciwgZml4ZWQpOworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuc3VidShkZXN0LCBkZXN0LCBpbW1UZW1wUmVnaXN0ZXIpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBzdWIzMihJbW0zMiBpbW0sIEFkZHJlc3MgYWRk
cmVzcywgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIGlmIChhZGRyZXNzLm9mZnNldCA+
PSAtMzI3NjggJiYgYWRkcmVzcy5vZmZzZXQgPD0gMzI3NjcgJiYgZml4ZWQgPT0gMCkgeworICAg
ICAgICAgICAgLyoKKyAgICAgICAgICAgICAgbHcgICAgICAgIGRhdGFUZW1wLCBvZmZzZXQoYmFz
ZSkKKyAgICAgICAgICAgICAgbGkgICAgICAgIGltbVRlbXAsIGltbQorICAgICAgICAgICAgICBz
dWJ1ICAgICAgZGF0YVRlbXAsIGRhdGFUZW1wLCBpbW1UZW1wCisgICAgICAgICAgICAgIHN3ICAg
ICAgICBkYXRhVGVtcCwgb2Zmc2V0KGJhc2UpCisgICAgICAgICAgICAqLworICAgICAgICAgICAg
bV9hc3NlbWJsZXIubHcoZGF0YVRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9m
ZnNldCk7CisgICAgICAgICAgICBpZiAoIWltbS5tX2lzUG9pbnRlciAmJiBpbW0ubV92YWx1ZSA+
PSAtMzI3NjcgJiYgaW1tLm1fdmFsdWUgPD0gMzI3NjggJiYgZml4ZWQgPT0gMCkKKyAgICAgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5hZGRpdShkYXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lz
dGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1pbW0ubV92YWx1ZSk7Cisg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBtb3ZlKGltbSwgaW1tVGVtcFJlZ2lz
dGVyLCBmaXhlZCk7CisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3VidShkYXRhVGVtcFJl
Z2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLnN3KGRhdGFUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5vZmZzZXQpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgbHVpICAgICAg
IGFkZHJUZW1wLCAob2Zmc2V0ICsgMHg4MDAwKSA+PiAxNgorICAgICAgICAgICAgICBhZGR1ICAg
ICAgYWRkclRlbXAsIGFkZHJUZW1wLCBiYXNlCisgICAgICAgICAgICAgIGx3ICAgICAgICBkYXRh
VGVtcCwgKG9mZnNldCAmIDB4ZmZmZikoYWRkclRlbXApCisgICAgICAgICAgICAgIGxpICAgICAg
ICBpbW10ZW1wLCBpbW0KKyAgICAgICAgICAgICAgc3VidSAgICAgIGRhdGFUZW1wLCBkYXRhVGVt
cCwgaW1tVGVtcAorICAgICAgICAgICAgICBzdyAgICAgICAgZGF0YVRlbXAsIChvZmZzZXQgJiAw
eGZmZmYpKGFkZHJUZW1wKQorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
Lmx1aShhZGRyVGVtcFJlZ2lzdGVyLCAoYWRkcmVzcy5vZmZzZXQgKyAweDgwMDApID4+IDE2KTsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBS
ZWdpc3RlciwgYWRkcmVzcy5iYXNlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx3KGRhdGFU
ZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKworICAgICAg
ICAgICAgaWYgKCFpbW0ubV9pc1BvaW50ZXIgJiYgaW1tLm1fdmFsdWUgPj0gLTMyNzY3ICYmIGlt
bS5tX3ZhbHVlIDw9IDMyNzY4ICYmIGZpeGVkID09IDApCisgICAgICAgICAgICAgICAgbV9hc3Nl
bWJsZXIuYWRkaXUoZGF0YVRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3RlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAtaW1tLm1fdmFsdWUpOworICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgbW92ZShpbW0sIGltbVRlbXBSZWdpc3RlciwgZml4ZWQpOwor
ICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN1YnUoZGF0YVRlbXBSZWdpc3RlciwgZGF0YVRl
bXBSZWdpc3RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltbVRlbXBSZWdp
c3Rlcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdyhkYXRhVGVt
cFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICB2b2lkIHN1YjMyKEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QsIGlu
dCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBsb2FkMzIoc3JjLCBkYXRhVGVtcFJlZ2lzdGVy
LCBmaXhlZCk7CisgICAgICAgIHN1YjMyKGRhdGFUZW1wUmVnaXN0ZXIsIGRlc3QsIGZpeGVkKTsK
KyAgICB9CisKKyAgICB2b2lkIHN1YjMyKEltbTMyIGltbSwgQWJzb2x1dGVBZGRyZXNzIGFkZHJl
c3MsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICAvKgorICAgICAgICAgICBsaSAgIGFk
ZHJUZW1wLCBhZGRyZXNzCisgICAgICAgICAgIGxpICAgaW1tVGVtcCwgaW1tCisgICAgICAgICAg
IGx3ICAgZGF0YVRlbXAsIDAoYWRkclRlbXApCisgICAgICAgICAgIHN1YnUgZGF0YVRlbXAsIGRh
dGFUZW1wLCBpbW1UZW1wCisgICAgICAgICAgIHN3ICAgZGF0YVRlbXAsIDAoYWRkclRlbXApCisg
ICAgICAgICovCisgICAgICAgIG1vdmUoSW1tUHRyKGFkZHJlc3MubV9wdHIpLCBhZGRyVGVtcFJl
Z2lzdGVyLCBmaXhlZCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmx3KGRhdGFUZW1wUmVnaXN0ZXIs
IGFkZHJUZW1wUmVnaXN0ZXIsIDApOworCisgICAgICAgIGlmICghaW1tLm1faXNQb2ludGVyICYm
IGltbS5tX3ZhbHVlID49IC0zMjc2NyAmJiBpbW0ubV92YWx1ZSA8PSAzMjc2OCAmJiBmaXhlZCA9
PSAwKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRpdShkYXRhVGVtcFJlZ2lzdGVyLCBk
YXRhVGVtcFJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWltbS5tX3Zh
bHVlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1vdmUoaW1tLCBpbW1UZW1wUmVn
aXN0ZXIsIGZpeGVkKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN1YnUoZGF0YVRlbXBSZWdp
c3RlciwgZGF0YVRlbXBSZWdpc3RlciwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgfQorICAg
ICAgICBtX2Fzc2VtYmxlci5zdyhkYXRhVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCAw
KTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRl
c3QsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci54b3JfaW5zbihk
ZXN0LCBkZXN0LCBzcmMpOworICAgIH0KKworICAgIHZvaWQgeG9yMzIoSW1tMzIgaW1tLCBSZWdp
c3RlcklEIGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICAvKgorICAgICAgICAg
ICAgbGkgIGltbVRlbXAsIGltbQorICAgICAgICAgICAgeG9yIGRlc3QsIGRlc3QsIGltbVRlbXAK
KyAgICAgICAgKi8KKyAgICAgICAgbW92ZShpbW0sIGltbVRlbXBSZWdpc3RlciwgZml4ZWQpOwor
ICAgICAgICBtX2Fzc2VtYmxlci54b3JfaW5zbihkZXN0LCBkZXN0LCBpbW1UZW1wUmVnaXN0ZXIp
OworICAgIH0KKworICAgIC8vIE1lbW9yeSBhY2Nlc3Mgb3BlcmF0aW9uczoKKyAgICAvLworICAg
IC8vIExvYWRzIGFyZSBvZiB0aGUgZm9ybSBsb2FkKGFkZHJlc3MsIGRlc3RpbmF0aW9uKSBhbmQg
c3RvcmVzIG9mIHRoZSBmb3JtCisgICAgLy8gc3RvcmUoc291cmNlLCBhZGRyZXNzKS4gIFRoZSBz
b3VyY2UgZm9yIGEgc3RvcmUgbWF5IGJlIGFuIEltbTMyLiAgQWRkcmVzcworICAgIC8vIG9wZXJh
bmQgb2JqZWN0cyB0byBsb2FkcyBhbmQgc3RvcmUgd2lsbCBiZSBpbXBsaWNpdGx5IGNvbnN0cnVj
dGVkIGlmIGEKKyAgICAvLyByZWdpc3RlciBpcyBwYXNzZWQuCisKKyAgICB2b2lkIGxvYWQzMihJ
bXBsaWNpdEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQgPSAwKQor
ICAgIHsKKyAgICAgICAgaWYgKGFkZHJlc3Mub2Zmc2V0ID49IC0zMjc2OCAmJiBhZGRyZXNzLm9m
ZnNldCA8PSAzMjc2NyAmJiBmaXhlZCA9PSAwKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubHco
ZGVzdCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICBsdWkgICAgIGFkZHJUZW1wLCAob2Zmc2V0ICsg
MHg4MDAwKSA+PiAxNgorICAgICAgICAgICAgICAgIGFkZHUgICAgYWRkclRlbXAsIGFkZHJUZW1w
LCBiYXNlCisgICAgICAgICAgICAgICAgbHcgICAgICBkZXN0LCAob2Zmc2V0ICYgMHhmZmZmKShh
ZGRyVGVtcCkKKyAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx1aShh
ZGRyVGVtcFJlZ2lzdGVyLCAoYWRkcmVzcy5vZmZzZXQgKyAweDgwMDApID4+IDE2KTsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3Rl
ciwgYWRkcmVzcy5iYXNlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx3KGRlc3QsIGFkZHJU
ZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZv
aWQgbG9hZDMyKEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QsIGludCBmaXhlZCA9
IDApCisgICAgeworICAgICAgICBpZiAoYWRkcmVzcy5vZmZzZXQgPj0gLTMyNzY4ICYmIGFkZHJl
c3Mub2Zmc2V0IDw9IDMyNzY3ICYmIGZpeGVkID09IDApIHsKKyAgICAgICAgICAgIC8qCisgICAg
ICAgICAgICAgICAgc2xsICAgICBhZGRyVGVtcCwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2Fs
ZQorICAgICAgICAgICAgICAgIGFkZHUgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBhZGRyZXNzLmJh
c2UKKyAgICAgICAgICAgICAgICBsdyAgICAgIGRlc3QsIGFkZHJlc3Mub2Zmc2V0KGFkZHJUZW1w
KQorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsbChhZGRyVGVtcFJl
Z2lzdGVyLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5i
YXNlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx3KGRlc3QsIGFkZHJUZW1wUmVnaXN0ZXIs
IGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qCisgICAg
ICAgICAgICAgICAgc2xsICAgICBhZGRyVGVtcCwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2Fs
ZQorICAgICAgICAgICAgICAgIGFkZHUgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBhZGRyZXNzLmJh
c2UKKyAgICAgICAgICAgICAgICBsdWkgICAgIGltbVRlbXAsIChhZGRyZXNzLm9mZnNldCArIDB4
ODAwMCkgPj4gMTYKKyAgICAgICAgICAgICAgICBhZGR1ICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwg
aW1tVGVtcAorICAgICAgICAgICAgICAgIGx3ICAgICAgZGVzdCwgKGFkZHJlc3Mub2Zmc2V0ICYg
MHhmZmZmKShhdCkKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbGwo
YWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIs
IGFkZHJlc3MuYmFzZSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sdWkoaW1tVGVtcFJlZ2lz
dGVyLCAoYWRkcmVzcy5vZmZzZXQgKyAweDgwMDApID4+IDE2KTsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmx3KGRlc3QsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHZvaWQgbG9hZDMyV2l0aFVuYWxpZ25lZEhhbGZXb3JkcyhCYXNl
SW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAg
ICAgICAgaWYgKGFkZHJlc3Mub2Zmc2V0ID49IC0zMjc2OCAmJiBhZGRyZXNzLm9mZnNldCA8PSAz
Mjc2NCAmJiBmaXhlZCA9PSAwKSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgIHNs
bCAgICAgYWRkclRlbXAsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUKKyAgICAgICAgICAg
ICAgICBhZGR1ICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgYWRkcmVzcy5iYXNlCisgICAgICAgICAg
ICAgICAgKEJpZy1FbmRpYW4pCisgICAgICAgICAgICAgICAgbHdsICAgICBkZXN0LCBhZGRyZXNz
Lm9mZnNldChhZGRyVGVtcCkKKyAgICAgICAgICAgICAgICBsd3IgICAgIGRlc3QsIGFkZHJlc3Mu
b2Zmc2V0KzMoYWRkclRlbXApCisgICAgICAgICAgICAgICAgKExpdHRsZS1FbmRpYW4pCisgICAg
ICAgICAgICAgICAgbHdsICAgICBkZXN0LCBhZGRyZXNzLm9mZnNldCszKGFkZHJUZW1wKQorICAg
ICAgICAgICAgICAgIGx3ciAgICAgZGVzdCwgYWRkcmVzcy5vZmZzZXQoYWRkclRlbXApCisgICAg
ICAgICAgICAqLworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2xsKGFkZHJUZW1wUmVnaXN0ZXIs
IGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
YWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UpOwor
I2lmIGRlZmluZWQoX19NSVBTRUJfXykKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx3bChkZXN0
LCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5sd3IoZGVzdCwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQgKyAzKTsKKyNl
bHNlCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sd2woZGVzdCwgYWRkclRlbXBSZWdpc3Rlciwg
YWRkcmVzcy5vZmZzZXQgKyAzKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx3cihkZXN0LCBh
ZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCk7CisKKyNlbmRpZgorICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICBzbGwgICAgIGFkZHJUZW1wLCBh
ZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlCisgICAgICAgICAgICAgICAgYWRkdSAgICBhZGRy
VGVtcCwgYWRkclRlbXAsIGFkZHJlc3MuYmFzZQorICAgICAgICAgICAgICAgIGx1aSAgICAgaW1t
VGVtcCwgYWRkcmVzcy5vZmZzZXQgPj4gMTYKKyAgICAgICAgICAgICAgICBvcmkgICAgIGltbVRl
bXAsIGltbVRlbXAsIGFkZHJlc3Mub2Zmc2V0ICYgMHhmZmZmCisgICAgICAgICAgICAgICAgYWRk
dSAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGltbVRlbXAKKyAgICAgICAgICAgICAgICAoQmlnLUVu
ZGlhbikKKyAgICAgICAgICAgICAgICBsdyAgICAgIGRlc3QsIDAoYXQpCisgICAgICAgICAgICAg
ICAgbHcgICAgICBkZXN0LCAzKGF0KQorICAgICAgICAgICAgICAgIChMaXR0bGUtRW5kaWFuKQor
ICAgICAgICAgICAgICAgIGx3ICAgICAgZGVzdCwgMyhhdCkKKyAgICAgICAgICAgICAgICBsdyAg
ICAgIGRlc3QsIDAoYXQpCisgICAgICAgICAgICAqLworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
c2xsKGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lz
dGVyLCBhZGRyZXNzLmJhc2UpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHVpKGltbVRlbXBS
ZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQgPj4gMTYpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
b3JpKGltbVRlbXBSZWdpc3RlciwgaW1tVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCk7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVn
aXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltbVRlbXBSZWdpc3Rlcik7Cisj
aWYgZGVmaW5lZChfX01JUFNFQl9fKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubHdsKGRlc3Qs
IGFkZHJUZW1wUmVnaXN0ZXIsIDApOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHdyKGRlc3Qs
IGFkZHJUZW1wUmVnaXN0ZXIsIDMpOworI2Vsc2UKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx3
bChkZXN0LCBhZGRyVGVtcFJlZ2lzdGVyLCAzKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx3
cihkZXN0LCBhZGRyVGVtcFJlZ2lzdGVyLCAwKTsKKyNlbmRpZgorICAgICAgICB9CisgICAgfQor
CisgICAgdm9pZCBsb2FkMzIodm9pZCogYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0LCBpbnQgZml4
ZWQgPSAwKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICAgIGxpICBhZGRyVGVtcCwgYWRk
cmVzcworICAgICAgICAgICAgbHcgIGRlc3QsIDAoYWRkclRlbXApCisgICAgICAgICovCisgICAg
ICAgIG1vdmUoSW1tUHRyKGFkZHJlc3MpLCBhZGRyVGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmx3KGRlc3QsIGFkZHJUZW1wUmVnaXN0ZXIsIDApOworICAgIH0KKwor
ICAgIERhdGFMYWJlbDMyIGxvYWQzMldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goQWRkcmVzcyBhZGRy
ZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpbnQgZml4ZWQgPSAxOworICAg
ICAgICAvKgorICAgICAgICAgICAgbHVpIGFkZHJUZW1wLCBhZGRyZXNzLm9mZnNldCA+PiAxNgor
ICAgICAgICAgICAgb3JpIGFkZHJUZW1wLCBhZGRyVGVtcCwgYWRkcmVzcy5vZmZzZXQgJiAweGZm
ZmYKKyAgICAgICAgICAgIGFkZHUgICAgICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgYWRkcmVzcy5i
YXNlCisgICAgICAgICAgICBsdyAgZGVzdCwgMChhZGRyVGVtcCkKKyAgICAgICAgKi8KKyAgICAg
ICAgRGF0YUxhYmVsMzIgZGF0YUxhYmVsKHRoaXMpOworICAgICAgICBtb3ZlKEltbTMyKGFkZHJl
c3Mub2Zmc2V0KSwgYWRkclRlbXBSZWdpc3RlciwgZml4ZWQpOworICAgICAgICBtX2Fzc2VtYmxl
ci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSk7
CisgICAgICAgIG1fYXNzZW1ibGVyLmx3KGRlc3QsIGFkZHJUZW1wUmVnaXN0ZXIsIDApOworICAg
ICAgICByZXR1cm4gZGF0YUxhYmVsOworICAgIH0KKworICAgIExhYmVsIGxvYWRQdHJXaXRoUGF0
Y2hUb0xFQShBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAg
IGludCBmaXhlZCA9IDE7CisgICAgICAgIC8qCisgICAgICAgICAgICBsdWkgICAgICAgICBhZGRy
VGVtcCwgYWRkcmVzcy5vZmZzZXQgPj4gMTYKKyAgICAgICAgICAgIG9yaSAgICAgICAgIGFkZHJU
ZW1wLCBhZGRyVGVtcCwgYWRkcmVzcy5vZmZzZXQgJiAweGZmZmYKKyAgICAgICAgICAgIGFkZHUg
ICAgICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgYWRkcmVzcy5iYXNlCisgICAgICAgICAgICBsdyAg
ICAgICAgICBkZXN0LCAwKGFkZHJUZW1wKQorICAgICAgICAqLworICAgICAgICBMYWJlbCBsYWJl
bCh0aGlzKTsKKyAgICAgICAgbW92ZShJbW0zMihhZGRyZXNzLm9mZnNldCksIGFkZHJUZW1wUmVn
aXN0ZXIsIGZpeGVkKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVy
LCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UpOworICAgICAgICBtX2Fzc2VtYmxlci5s
dyhkZXN0LCBhZGRyVGVtcFJlZ2lzdGVyLCAwKTsKKyAgICAgICAgcmV0dXJuIGxhYmVsOworICAg
IH0KKworICAgIExhYmVsIGxvYWRQdHJXaXRoQWRkcmVzc09mZnNldFBhdGNoKEFkZHJlc3MgYWRk
cmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGxvYWRQdHJXaXRo
UGF0Y2hUb0xFQShhZGRyZXNzLCBkZXN0KTsKKyAgICB9CisKKyAgICAvKiBOZWVkIHRvIHVzZSB6
ZXJvLWV4dGVuZWQgbG9hZCBoYWxmLXdvcmQgZm9yIGxvYWQxNi4gICovCisgICAgdm9pZCBsb2Fk
MTYoQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAg
ICB7CisgICAgICAgIGlmIChhZGRyZXNzLm9mZnNldCA+PSAtMzI3NjggJiYgYWRkcmVzcy5vZmZz
ZXQgPD0gMzI3NjcgJiYgZml4ZWQgPT0gMCkgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAg
ICAgICBzbGwgICAgIGFkZHJUZW1wLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlCisgICAg
ICAgICAgICAgICAgYWRkdSAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGFkZHJlc3MuYmFzZQorICAg
ICAgICAgICAgICAgIGxodSAgICAgZGVzdCwgYWRkcmVzcy5vZmZzZXQoYWRkclRlbXApCisgICAg
ICAgICAgICAqLworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2xsKGFkZHJUZW1wUmVnaXN0ZXIs
IGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
YWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UpOwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIubGh1KGRlc3QsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJl
c3Mub2Zmc2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAg
ICAgICAgc2xsICAgICBhZGRyVGVtcCwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZQorICAg
ICAgICAgICAgICAgIGFkZHUgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBhZGRyZXNzLmJhc2UKKyAg
ICAgICAgICAgICAgICBsdWkgICAgIGltbVRlbXAsIChhZGRyZXNzLm9mZnNldCArIDB4ODAwMCkg
Pj4gMTYKKyAgICAgICAgICAgICAgICBhZGR1ICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgaW1tVGVt
cAorICAgICAgICAgICAgICAgIGxodSAgICAgZGVzdCwgKGFkZHJlc3Mub2Zmc2V0ICYgMHhmZmZm
KShhZGRyVGVtcCkKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbGwo
YWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIs
IGFkZHJlc3MuYmFzZSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sdWkoaW1tVGVtcFJlZ2lz
dGVyLCAoYWRkcmVzcy5vZmZzZXQgKyAweDgwMDApID4+IDE2KTsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmxodShkZXN0LCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBEYXRhTGFiZWwzMiBzdG9yZTMyV2l0aEFkZHJlc3NPZmZzZXRQ
YXRjaChSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgaW50
IGZpeGVkID0gMTsKKyAgICAgICAgLyoKKyAgICAgICAgICAgIGx1aSBhZGRyVGVtcCwgYWRkcmVz
cy5vZmZzZXQgPj4gMTYKKyAgICAgICAgICAgIG9yaSBhZGRyVGVtcCwgYWRkclRlbXAsIGFkZHJl
c3Mub2Zmc2V0ICYgMHhmZmZmCisgICAgICAgICAgICBhZGR1ICAgICAgICBhZGRyVGVtcCwgYWRk
clRlbXAsIGFkZHJlc3MuYmFzZQorICAgICAgICAgICAgc3cgIHNyYywgMChhZGRyVGVtcCkKKyAg
ICAgICAgKi8KKyAgICAgICAgRGF0YUxhYmVsMzIgZGF0YUxhYmVsKHRoaXMpOworICAgICAgICBt
b3ZlKEltbTMyKGFkZHJlc3Mub2Zmc2V0KSwgYWRkclRlbXBSZWdpc3RlciwgZml4ZWQpOworICAg
ICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIs
IGFkZHJlc3MuYmFzZSk7CisgICAgICAgIG1fYXNzZW1ibGVyLnN3KHNyYywgYWRkclRlbXBSZWdp
c3RlciwgMCk7CisgICAgICAgIHJldHVybiBkYXRhTGFiZWw7CisgICAgfQorCisgICAgdm9pZCBz
dG9yZTMyKFJlZ2lzdGVySUQgc3JjLCBJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcywgaW50IGZpeGVk
ID0gMCkKKyAgICB7CisgICAgICAgIGlmIChhZGRyZXNzLm9mZnNldCA+PSAtMzI3NjggJiYgYWRk
cmVzcy5vZmZzZXQgPD0gMzI3NjcgJiYgZml4ZWQgPT0gMCkKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLnN3KHNyYywgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICBsdWkgICAgIGFkZHJUZW1wLCAob2Zm
c2V0ICsgMHg4MDAwKSA+PiAxNgorICAgICAgICAgICAgICAgIGFkZHUgICAgYWRkclRlbXAsIGFk
ZHJUZW1wLCBiYXNlCisgICAgICAgICAgICAgICAgc3cgICAgICBzcmMsIChvZmZzZXQgJiAweGZm
ZmYpKGFkZHJUZW1wKQorICAgICAgICAgICAgICAqLworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
bHVpKGFkZHJUZW1wUmVnaXN0ZXIsIChhZGRyZXNzLm9mZnNldCArIDB4ODAwMCkgPj4gMTYpOwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJl
Z2lzdGVyLCBhZGRyZXNzLmJhc2UpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3coc3JjLCBh
ZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICB2b2lkIHN0b3JlMzIoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBhZGRyZXNzLCBpbnQgZml4
ZWQgPSAwKQorICAgIHsKKyAgICAgICAgaWYgKGFkZHJlc3Mub2Zmc2V0ID49IC0zMjc2OCAmJiBh
ZGRyZXNzLm9mZnNldCA8PSAzMjc2NyAmJiBmaXhlZCA9PSAwKSB7CisgICAgICAgICAgICAvKgor
ICAgICAgICAgICAgICAgIHNsbCAgICAgYWRkclRlbXAsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Mu
c2NhbGUKKyAgICAgICAgICAgICAgICBhZGR1ICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgYWRkcmVz
cy5iYXNlCisgICAgICAgICAgICAgICAgc3cgICAgICBzcmMsIGFkZHJlc3Mub2Zmc2V0KGFkZHJU
ZW1wKQorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsbChhZGRyVGVt
cFJlZ2lzdGVyLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVz
cy5iYXNlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN3KHNyYywgYWRkclRlbXBSZWdpc3Rl
ciwgYWRkcmVzcy5vZmZzZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyoKKyAg
ICAgICAgICAgICAgICBzbGwgICAgIGFkZHJUZW1wLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNj
YWxlCisgICAgICAgICAgICAgICAgYWRkdSAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGFkZHJlc3Mu
YmFzZQorICAgICAgICAgICAgICAgIGx1aSAgICAgaW1tVGVtcCwgKGFkZHJlc3Mub2Zmc2V0ICsg
MHg4MDAwKSA+PiAxNgorICAgICAgICAgICAgICAgIGFkZHUgICAgYWRkclRlbXAsIGFkZHJUZW1w
LCBpbW1UZW1wCisgICAgICAgICAgICAgICAgc3cgICAgICBzcmMsIChhZGRyZXNzLm9mZnNldCAm
IDB4ZmZmZikoYXQpCisgICAgICAgICAgICAqLworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2xs
KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVy
LCBhZGRyZXNzLmJhc2UpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHVpKGltbVRlbXBSZWdp
c3RlciwgKGFkZHJlc3Mub2Zmc2V0ICsgMHg4MDAwKSA+PiAxNik7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5zdyhzcmMsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHZvaWQgc3RvcmUzMihJbW0zMiBpbW0sIEltcGxpY2l0QWRkcmVz
cyBhZGRyZXNzLCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgaWYgKGFkZHJlc3Mub2Zm
c2V0ID49IC0zMjc2OCAmJiBhZGRyZXNzLm9mZnNldCA8PSAzMjc2NyAmJiBmaXhlZCA9PSAwKSB7
CisgICAgICAgICAgICBpZiAoIWltbS5tX2lzUG9pbnRlciAmJiBpbW0ubV92YWx1ZSA9PSAwKQor
ICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN3KE1JUFNSZWdpc3RlcnM6Onplcm8sIGFkZHJl
c3MuYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzLm9mZnNldCk7
CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBtb3ZlKGltbSwgaW1tVGVtcFJl
Z2lzdGVyLCBmaXhlZCk7CisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3coaW1tVGVtcFJl
Z2lzdGVyLCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgbHVpICAgICBh
ZGRyVGVtcCwgKG9mZnNldCArIDB4ODAwMCkgPj4gMTYKKyAgICAgICAgICAgICAgICBhZGR1ICAg
IGFkZHJUZW1wLCBhZGRyVGVtcCwgYmFzZQorICAgICAgICAgICAgICAgIHN3ICAgICAgaW1tVGVt
cCwgKG9mZnNldCAmIDB4ZmZmZikoYWRkclRlbXApCisgICAgICAgICAgICAgICovCisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5sdWkoYWRkclRlbXBSZWdpc3RlciwgKGFkZHJlc3Mub2Zmc2V0ICsg
MHg4MDAwKSA+PiAxNik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVn
aXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSk7CisgICAgICAgICAgICBpZiAo
IWltbS5tX2lzUG9pbnRlciAmJiBpbW0ubV92YWx1ZSA9PSAwICYmIGZpeGVkID09IDApCisgICAg
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3coTUlQU1JlZ2lzdGVyczo6emVybywgYWRkclRlbXBS
ZWdpc3RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzLm9mZnNldCk7
CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBtb3ZlKGltbSwgaW1tVGVtcFJl
Z2lzdGVyLCBmaXhlZCk7CisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3coaW1tVGVtcFJl
Z2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAg
IHZvaWQgc3RvcmUzMihSZWdpc3RlcklEIHNyYywgdm9pZCogYWRkcmVzcywgaW50IGZpeGVkID0g
MCkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAgICBsaSAgYWRkclRlbXAsIGFkZHJlc3MK
KyAgICAgICAgICAgIHN3ICBzcmMsIDAoYWRkclRlbXApCisgICAgICAgICovCisgICAgICAgIG1v
dmUoSW1tUHRyKGFkZHJlc3MpLCBhZGRyVGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgICAgIG1f
YXNzZW1ibGVyLnN3KHNyYywgYWRkclRlbXBSZWdpc3RlciwgMCk7CisgICAgfQorCisgICAgdm9p
ZCBzdG9yZTMyKEltbTMyIGltbSwgdm9pZCogYWRkcmVzcywgaW50IGZpeGVkID0gMCkKKyAgICB7
CisgICAgICAgIC8qCisgICAgICAgICAgICBsaSAgaW1tVGVtcCwgaW1tCisgICAgICAgICAgICBs
aSAgYWRkclRlbXAsIGFkZHJlc3MKKyAgICAgICAgICAgIHN3ICBzcmMsIDAoYWRkclRlbXApCisg
ICAgICAgICovCisgICAgICAgIGlmICghaW1tLm1faXNQb2ludGVyICYmIGltbS5tX3ZhbHVlID09
IDAgJiYgZml4ZWQgPT0gMCkgeworICAgICAgICAgICAgbW92ZShJbW1QdHIoYWRkcmVzcyksIGFk
ZHJUZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN3KE1JUFNS
ZWdpc3RlcnM6Onplcm8sIGFkZHJUZW1wUmVnaXN0ZXIsIDApOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgbW92ZShpbW0sIGltbVRlbXBSZWdpc3RlciwgZml4ZWQpOworICAgICAgICAg
ICAgbW92ZShJbW1QdHIoYWRkcmVzcyksIGFkZHJUZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLnN3KGltbVRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3Rlciwg
MCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBGbG9hdGluZy1wb2ludCBvcGVyYXRpb25z
OgorCisgICAgYm9vbCBzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSBjb25zdAorICAgIHsKKyNpZiBk
ZWZpbmVkKF9fbWlwc19oYXJkX2Zsb2F0KSAmJiAhZGVmaW5lZChfX21pcHNfc2luZ2xlX2Zsb2F0
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAgICAgIHJldHVybiBmYWxzZTsKKyNl
bmRpZgorICAgIH0KKworICAgIGJvb2wgc3VwcG9ydHNGbG9hdGluZ1BvaW50VHJ1bmNhdGUoKSBj
b25zdAorICAgIHsKKyNpZiBkZWZpbmVkKF9fbWlwc19oYXJkX2Zsb2F0KSAmJiAhZGVmaW5lZChf
X21pcHNfc2luZ2xlX2Zsb2F0KSAmJiAoX19taXBzID4gMSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisjZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKyAgICB9CisKKyAgICAvLyBT
dGFjayBtYW5pcHVsYXRpb24gb3BlcmF0aW9uczoKKyAgICAvLworICAgIC8vIFRoZSBBQkkgaXMg
YXNzdW1lZCB0byBwcm92aWRlIGEgc3RhY2sgYWJzdHJhY3Rpb24gdG8gbWVtb3J5LAorICAgIC8v
IGNvbnRhaW5pbmcgbWFjaGluZSB3b3JkIHNpemVkIHVuaXRzIG9mIGRhdGEuICBQdXNoIGFuZCBw
b3AKKyAgICAvLyBvcGVyYXRpb25zIGFkZCBhbmQgcmVtb3ZlIGEgc2luZ2xlIHJlZ2lzdGVyIHNp
emVkIHVuaXQgb2YgZGF0YQorICAgIC8vIHRvIG9yIGZyb20gdGhlIHN0YWNrLiAgUGVlayBhbmQg
cG9rZSBvcGVyYXRpb25zIHJlYWQgb3Igd3JpdGUKKyAgICAvLyB2YWx1ZXMgb24gdGhlIHN0YWNr
LCB3aXRob3V0IG1vdmluZyB0aGUgY3VycmVudCBzdGFjayBwb3NpdGlvbi4KKworICAgIHZvaWQg
cG9wKFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmx3KGRlc3Qs
IE1JUFNSZWdpc3RlcnM6OnNwLCAwKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkaXUoTUlQU1Jl
Z2lzdGVyczo6c3AsIE1JUFNSZWdpc3RlcnM6OnNwLCA0KTsKKyAgICB9CisKKyAgICB2b2lkIHB1
c2goUmVnaXN0ZXJJRCBzcmMpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hZGRpdShNSVBT
UmVnaXN0ZXJzOjpzcCwgTUlQU1JlZ2lzdGVyczo6c3AsIC00KTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIuc3coc3JjLCBNSVBTUmVnaXN0ZXJzOjpzcCwgMCk7CisgICAgfQorCisgICAgdm9pZCBwdXNo
KEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIGxvYWQzMihhZGRyZXNzLCBkYXRhVGVt
cFJlZ2lzdGVyKTsKKyAgICAgICAgcHVzaChkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICB9CisKKyAg
ICB2b2lkIHB1c2goSW1tMzIgaW1tKQorICAgIHsKKyAgICAgICAgbW92ZShpbW0sIGltbVRlbXBS
ZWdpc3Rlcik7CisgICAgICAgIHB1c2goaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICAv
LyBSZWdpc3RlciBtb3ZlIG9wZXJhdGlvbnM6CisgICAgLy8KKyAgICAvLyBNb3ZlIHZhbHVlcyBp
biByZWdpc3RlcnMuCisKKyAgICB2b2lkIG1vdmUoSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3Qs
IGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBpZiAoIWltbS5tX2lzUG9pbnRlciAmJiBp
bW0ubV92YWx1ZSA9PSAwICYmIGZpeGVkID09IDApCisgICAgICAgICAgICBtb3ZlKE1JUFNSZWdp
c3RlcnM6Onplcm8sIGRlc3QsIGZpeGVkKTsKKyAgICAgICAgZWxzZSBpZiAoaW1tLm1faXNQb2lu
dGVyIHx8IGZpeGVkID09IDEpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx1aShkZXN0LCBp
bW0ubV92YWx1ZSA+PiAxNik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5vcmkoZGVzdCwgZGVz
dCwgaW1tLm1fdmFsdWUpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LmxpKGRlc3QsIGltbS5tX3ZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkIG1vdmUoUmVnaXN0ZXJJ
RCBzcmMsIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIGlm
IChzcmMgPT0gZGVzdCAmJiBmaXhlZCA9PSAwKQorICAgICAgICAgICAgOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZlKGRlc3QsIHNyYyk7CisgICAgfQorCisgICAg
dm9pZCBtb3ZlKEltbVB0ciBpbW0sIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAg
ICB7CisgICAgICAgIG1vdmUoSW1tMzIoaW1tKSwgZGVzdCwgZml4ZWQpOworICAgIH0KKworICAg
IHZvaWQgc3dhcChSZWdpc3RlcklEIHJlZzEsIFJlZ2lzdGVySUQgcmVnMiwgaW50IGZpeGVkID0g
MCkKKyAgICB7CisgICAgICAgIG1vdmUocmVnMSwgaW1tVGVtcFJlZ2lzdGVyLCBmaXhlZCk7Cisg
ICAgICAgIG1vdmUocmVnMiwgcmVnMSwgZml4ZWQpOworICAgICAgICBtb3ZlKGltbVRlbXBSZWdp
c3RlciwgcmVnMiwgZml4ZWQpOworICAgIH0KKworICAgIHZvaWQgc2lnbkV4dGVuZDMyVG9QdHIo
UmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7Cisg
ICAgICAgIGlmIChzcmMgPT0gZGVzdCAmJiBmaXhlZCA9PSAwKQorICAgICAgICAgICAgOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBtb3ZlKHNyYywgZGVzdCwgZml4ZWQpOworICAgIH0KKwor
ICAgIHZvaWQgemVyb0V4dGVuZDMyVG9QdHIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVz
dCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIGlmIChzcmMgPT0gZGVzdCAmJiBmaXhl
ZCA9PSAwKQorICAgICAgICAgICAgOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtb3ZlKHNy
YywgZGVzdCwgZml4ZWQpOworICAgIH0KKworICAgIC8vIEZvcndhcmRzIC8gZXh0ZXJuYWwgY29u
dHJvbCBmbG93IG9wZXJhdGlvbnM6CisgICAgLy8KKyAgICAvLyBUaGlzIHNldCBvZiBqdW1wIGFu
ZCBjb25kaXRpb25hbCBicmFuY2ggb3BlcmF0aW9ucyByZXR1cm4gYSBKdW1wCisgICAgLy8gb2Jq
ZWN0IHdoaWNoIG1heSBsaW5rZWQgYXQgYSBsYXRlciBwb2ludCwgYWxsb3cgZm9yd2FyZHMganVt
cCwKKyAgICAvLyBvciBqdW1wcyB0aGF0IHdpbGwgcmVxdWlyZSBleHRlcm5hbCBsaW5rYWdlIChh
ZnRlciB0aGUgY29kZSBoYXMgYmVlbgorICAgIC8vIHJlbG9jYXRlZCkuCisgICAgLy8KKyAgICAv
LyBGb3IgYnJhbmNoZXMsIHNpZ25lZCA8LCA+LCA8PSBhbmQgPj0gYXJlIGRlbm90ZWQgYXMgbCwg
ZywgbGUsIGFuZCBnZQorICAgIC8vIHJlc3BlY2l0dmVseSwgZm9yIHVuc2lnbmVkIGNvbXBhcmlz
b25zIHRoZSBuYW1lcyBiLCBhLCBiZSwgYW5kIGFlIGFyZQorICAgIC8vIHVzZWQgKHJlcHJlc2Vu
dGluZyB0aGUgbmFtZXMgJ2JlbG93JyBhbmQgJ2Fib3ZlJykuCisgICAgLy8KKyAgICAvLyBPcGVy
YW5kcyB0byB0aGUgY29tcGFyaXNpb24gYXJlIHByb3ZpZGVkIGluIHRoZSBleHBlY3RlZCBvcmRl
ciwgZS5nLgorICAgIC8vIGpsZTMyKHJlZzEsIEltbTMyKDUpKSB3aWxsIGJyYW5jaCBpZiB0aGUg
dmFsdWUgaGVsZCBpbiByZWcxLCB3aGVuCisgICAgLy8gdHJlYXRlZCBhcyBhIHNpZ25lZCAzMmJp
dCB2YWx1ZSwgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDUuCisgICAgLy8KKyAgICAvLyBqeiBh
bmQgam56IHRlc3Qgd2hldGhlciB0aGUgZmlyc3Qgb3BlcmFuZCBpcyBlcXVhbCB0byB6ZXJvLCBh
bmQgdGFrZQorICAgIC8vIGFuIG9wdGlvbmFsIHNlY29uZCBvcGVyYW5kIG9mIGEgbWFzayB1bmRl
ciB3aGljaCB0byBwZXJmb3JtIHRoZSB0ZXN0LgorCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRp
b24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0LCBpbnQgZml4ZWQgPSAw
KQorICAgIHsKKyAgICAgICAgaWYgKGNvbmQgPT0gRXF1YWwgfHwgY29uZCA9PSBaZXJvKQorICAg
ICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuYnJhbmNoX2VxKGxlZnQsIHJpZ2h0KSk7
CisgICAgICAgIGlmIChjb25kID09IE5vdEVxdWFsIHx8IGNvbmQgPT0gTm9uWmVybykKKyAgICAg
ICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmJyYW5jaF9uZShsZWZ0LCByaWdodCkpOwor
ICAgICAgICBpZiAoY29uZCA9PSBBYm92ZSkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0
dShjbXBUZW1wUmVnaXN0ZXIsIHJpZ2h0LCBsZWZ0KTsKKyAgICAgICAgICAgIHJldHVybiBKdW1w
KG1fYXNzZW1ibGVyLmJyYW5jaF9uZShjbXBUZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onpl
cm8pKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29uZCA9PSBBYm92ZU9yRXF1YWwpIHsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdHUoY21wVGVtcFJlZ2lzdGVyLCBsZWZ0LCByaWdodCk7
CisgICAgICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5icmFuY2hfZXEoY21wVGVtcFJl
Z2lzdGVyLCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNv
bmQgPT0gQmVsb3cpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdHUoY21wVGVtcFJlZ2lz
dGVyLCBsZWZ0LCByaWdodCk7CisgICAgICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5i
cmFuY2hfbmUoY21wVGVtcFJlZ2lzdGVyLCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKSk7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKGNvbmQgPT0gQmVsb3dPckVxdWFsKSB7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5zbHR1KGNtcFRlbXBSZWdpc3RlciwgcmlnaHQsIGxlZnQpOworICAgICAgICAgICAg
cmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuYnJhbmNoX2VxKGNtcFRlbXBSZWdpc3RlciwgTUlQU1Jl
Z2lzdGVyczo6emVybykpOworICAgICAgICB9CisgICAgICAgIGlmIChjb25kID09IEdyZWF0ZXJU
aGFuKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHQoY21wVGVtcFJlZ2lzdGVyLCByaWdo
dCwgbGVmdCk7CisgICAgICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5icmFuY2hfbmUo
Y21wVGVtcFJlZ2lzdGVyLCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKSk7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKGNvbmQgPT0gR3JlYXRlclRoYW5PckVxdWFsKSB7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5zbHQoY21wVGVtcFJlZ2lzdGVyLCBsZWZ0LCByaWdodCk7CisgICAgICAgICAgICByZXR1
cm4gSnVtcChtX2Fzc2VtYmxlci5icmFuY2hfZXEoY21wVGVtcFJlZ2lzdGVyLCBNSVBTUmVnaXN0
ZXJzOjp6ZXJvKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gTGVzc1RoYW4pIHsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdChjbXBUZW1wUmVnaXN0ZXIsIGxlZnQsIHJpZ2h0
KTsKKyAgICAgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmJyYW5jaF9uZShjbXBUZW1w
UmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onplcm8pKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
Y29uZCA9PSBMZXNzVGhhbk9yRXF1YWwpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdChj
bXBUZW1wUmVnaXN0ZXIsIHJpZ2h0LCBsZWZ0KTsKKyAgICAgICAgICAgIHJldHVybiBKdW1wKG1f
YXNzZW1ibGVyLmJyYW5jaF9lcShjbXBUZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onplcm8p
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29uZCA9PSBPdmVyZmxvdykgeworICAgICAgICAg
ICAgLyoKKyAgICAgICAgICAgICAgICB4b3IgICAgIGNtcFRlbXAsIGxlZnQsIHJpZ2h0CisgICAg
ICAgICAgICAgICAgYmdleiAgICBOb19vdmVyZmxvdywgY21wVGVtcCAgICAjIHNhbWUgc2lnbiBi
aXQgLT4gbm8gb3ZlcmZsb3cKKyAgICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAgICAgICBz
dWJ1ICAgIGNtcFRlbXAsIGxlZnQsIHJpZ2h0CisgICAgICAgICAgICAgICAgeG9yICAgICBjbXBU
ZW1wLCBjbXBUZW1wLCBsZWZ0CisgICAgICAgICAgICAgICAgYmdleiAgICBOb19vdmVyZmxvdywg
Y21wVGVtcCAgICAjIHNhbWUgc2lnbiBiaXQgLT4gbm8gb3ZlcmZsb3cKKyAgICAgICAgICAgICAg
ICBub3AKKyAgICAgICAgICAgICAgICBiICAgICAgIE92ZXJmbG93CisgICAgICAgICAgICAgICAg
bm9wCisgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAg
ICAgICAgbm9wCisgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgIE5vX292ZXJmbG93
OgorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnhvcl9pbnNuKGNtcFRl
bXBSZWdpc3RlciwgbGVmdCwgcmlnaHQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYmdleihj
bXBUZW1wUmVnaXN0ZXIsIDExKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuc3VidShjbXBUZW1wUmVnaXN0ZXIsIGxlZnQsIHJpZ2h0KTsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnhvcl9pbnNuKGNtcFRlbXBSZWdpc3RlciwgY21wVGVt
cFJlZ2lzdGVyLCBsZWZ0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmJnZXooY21wVGVtcFJl
Z2lzdGVyLCA3KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICAgICAg
cmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuam1wKCkpOworICAgICAgICB9CisgICAgICAgIGlmIChj
b25kID09IFNpZ25lZCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3VidShjbXBUZW1wUmVn
aXN0ZXIsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSByZXN1bHQg
aXMgbmVnYXRpdmUuCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHQoY21wVGVtcFJlZ2lzdGVy
LCBjbXBUZW1wUmVnaXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUlQU1JlZ2lz
dGVyczo6emVybyk7CisgICAgICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5icmFuY2hf
bmUoY21wVGVtcFJlZ2lzdGVyLCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKSk7CisgICAgICAgIH0KKyAg
ICAgICAgQVNTRVJUKDApOworCisgICAgICAgIHJldHVybiBKdW1wKCk7CisgICAgfQorCisgICAg
SnVtcCBicmFuY2gzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBJbW0zMiByaWdo
dCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIG1vdmUocmlnaHQsIGltbVRlbXBSZWdp
c3RlciwgZml4ZWQpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgbGVmdCwgaW1tVGVt
cFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24g
Y29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBBZGRyZXNzIHJpZ2h0LCBpbnQgZml4ZWQgPSAwKQorICAg
IHsKKyAgICAgICAgbG9hZDMyKHJpZ2h0LCBkYXRhVGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAg
ICAgIHJldHVybiBicmFuY2gzMihjb25kLCBsZWZ0LCBkYXRhVGVtcFJlZ2lzdGVyLCBmaXhlZCk7
CisgICAgfQorCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29uZCwgQWRkcmVzcyBsZWZ0
LCBSZWdpc3RlcklEIHJpZ2h0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgbG9hZDMy
KGxlZnQsIGRhdGFUZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMy
KGNvbmQsIGRhdGFUZW1wUmVnaXN0ZXIsIHJpZ2h0LCBmaXhlZCk7CisgICAgfQorCisgICAgSnVt
cCBicmFuY2gzMihDb25kaXRpb24gY29uZCwgQWRkcmVzcyBsZWZ0LCBJbW0zMiByaWdodCwgaW50
IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIGxvYWQzMihsZWZ0LCBkYXRhVGVtcFJlZ2lzdGVy
LCBmaXhlZCk7CisgICAgICAgIG1vdmUocmlnaHQsIGltbVRlbXBSZWdpc3RlciwgZml4ZWQpOwor
ICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgZGF0YVRlbXBSZWdpc3RlciwgaW1tVGVtcFJl
Z2lzdGVyLCBmaXhlZCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29u
ZCwgQmFzZUluZGV4IGxlZnQsIEltbTMyIHJpZ2h0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAg
ICAgICAgbG9hZDMyKGxlZnQsIGRhdGFUZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAgICAgICAgLy8g
QmUgY2FyZWZ1bCB0aGF0IHRoZSBwcmV2aW91cyBsb2FkMzIoKSB1c2VzIGltbVRlbXBSZWdpc3Rl
ci4KKyAgICAgICAgLy8gU28sIHdlIG5lZWQgdG8gcHV0IG1vdmUoKSBhZnRlciBsb2FkMzIoKS4K
KyAgICAgICAgbW92ZShyaWdodCwgaW1tVGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgICAgIHJl
dHVybiBicmFuY2gzMihjb25kLCBkYXRhVGVtcFJlZ2lzdGVyLCBpbW1UZW1wUmVnaXN0ZXIsIGZp
eGVkKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDMyV2l0aFVuYWxpZ25lZEhhbGZXb3JkcyhD
b25kaXRpb24gY29uZCwgQmFzZUluZGV4IGxlZnQsIEltbTMyIHJpZ2h0LCBpbnQgZml4ZWQgPSAw
KQorICAgIHsKKyAgICAgICAgbG9hZDMyV2l0aFVuYWxpZ25lZEhhbGZXb3JkcyhsZWZ0LCBkYXRh
VGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgICAgIC8vIEJlIGNhcmVmdWwgdGhhdCB0aGUgcHJl
dmlvdXMgbG9hZDMyV2l0aFVuYWxpZ25lZEhhbGZXb3JkcygpCisgICAgICAgIC8vIHVzZXMgaW1t
VGVtcFJlZ2lzdGVyLgorICAgICAgICAvLyBTbywgd2UgbmVlZCB0byBwdXQgbW92ZSgpIGFmdGVy
IGxvYWQzMldpdGhVbmFsaWduZWRIYWxmV29yZHMoKS4KKyAgICAgICAgbW92ZShyaWdodCwgaW1t
VGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBkYXRh
VGVtcFJlZ2lzdGVyLCBpbW1UZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAgICB9CisKKyAgICBKdW1w
IGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBBYnNvbHV0ZUFkZHJlc3MgbGVmdCwgUmVnaXN0ZXJJ
RCByaWdodCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIGxvYWQzMihsZWZ0Lm1fcHRy
LCBkYXRhVGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25k
LCBkYXRhVGVtcFJlZ2lzdGVyLCByaWdodCwgZml4ZWQpOworICAgIH0KKworICAgIEp1bXAgYnJh
bmNoMzIoQ29uZGl0aW9uIGNvbmQsIEFic29sdXRlQWRkcmVzcyBsZWZ0LCBJbW0zMiByaWdodCwg
aW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIGxvYWQzMihsZWZ0Lm1fcHRyLCBkYXRhVGVt
cFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgICAgIG1vdmUocmlnaHQsIGltbVRlbXBSZWdpc3Rlciwg
Zml4ZWQpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgZGF0YVRlbXBSZWdpc3Rlciwg
aW1tVGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2gxNihDb25k
aXRpb24gY29uZCwgQmFzZUluZGV4IGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQsIGludCBmaXhlZCA9
IDApCisgICAgeworICAgICAgICBsb2FkMTYobGVmdCwgZGF0YVRlbXBSZWdpc3RlciwgZml4ZWQp
OworICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgZGF0YVRlbXBSZWdpc3RlciwgcmlnaHQs
IGZpeGVkKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDE2KENvbmRpdGlvbiBjb25kLCBCYXNl
SW5kZXggbGVmdCwgSW1tMzIgcmlnaHQsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBB
U1NFUlQoIShyaWdodC5tX3ZhbHVlICYgMHhGRkZGMDAwMCkpOworICAgICAgICBsb2FkMTYobGVm
dCwgZGF0YVRlbXBSZWdpc3RlciwgZml4ZWQpOworICAgICAgICAvLyBCZSBjYXJlZnVsIHRoYXQg
dGhlIHByZXZpb3VzIGxvYWQxNigpIHVzZXMgaW1tVGVtcFJlZ2lzdGVyLgorICAgICAgICAvLyBT
bywgd2UgbmVlZCB0byBwdXQgbW92ZSgpIGFmdGVyIGxvYWQxNigpLgorICAgICAgICBtb3ZlKHJp
Z2h0LCBpbW1UZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNv
bmQsIGRhdGFUZW1wUmVnaXN0ZXIsIGltbVRlbXBSZWdpc3RlciwgZml4ZWQpOworICAgIH0KKwor
ICAgIEp1bXAgYnJhbmNoVGVzdDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHJlZywgUmVn
aXN0ZXJJRCBtYXNrLCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgQVNTRVJUKChjb25k
ID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8pKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5k
X2luc24oY21wVGVtcFJlZ2lzdGVyLCByZWcsIG1hc2spOworICAgICAgICBpZiAoY29uZCA9PSBa
ZXJvKQorICAgICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuYnJhbmNoX2VxKGNtcFRl
bXBSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6emVybykpOworICAgICAgICByZXR1cm4gSnVtcCht
X2Fzc2VtYmxlci5icmFuY2hfbmUoY21wVGVtcFJlZ2lzdGVyLCBNSVBTUmVnaXN0ZXJzOjp6ZXJv
KSk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hUZXN0MzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lz
dGVySUQgcmVnLCBJbW0zMiBtYXNrID0gSW1tMzIoLTEpLCBpbnQgZml4ZWQgPSAwKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKChjb25kID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8pKTsKKyAg
ICAgICAgaWYgKG1hc2subV92YWx1ZSA9PSAtMSAmJiBmaXhlZCA9PSAwKSB7CisgICAgICAgICAg
ICBpZiAoY29uZCA9PSBaZXJvKQorICAgICAgICAgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1i
bGVyLmJyYW5jaF9lcShyZWcsIE1JUFNSZWdpc3RlcnM6Onplcm8pKTsKKyAgICAgICAgICAgIHJl
dHVybiBKdW1wKG1fYXNzZW1ibGVyLmJyYW5jaF9uZShyZWcsIE1JUFNSZWdpc3RlcnM6Onplcm8p
KTsKKyAgICAgICAgfQorICAgICAgICBtb3ZlKG1hc2ssIGltbVRlbXBSZWdpc3RlciwgZml4ZWQp
OworICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDMyKGNvbmQsIHJlZywgaW1tVGVtcFJlZ2lzdGVy
LCBmaXhlZCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hUZXN0MzIoQ29uZGl0aW9uIGNvbmQs
IEFkZHJlc3MgYWRkcmVzcywgSW1tMzIgbWFzayA9IEltbTMyKC0xKSwgaW50IGZpeGVkID0gMCkK
KyAgICB7CisgICAgICAgIGxvYWQzMihhZGRyZXNzLCBkYXRhVGVtcFJlZ2lzdGVyLCBmaXhlZCk7
CisgICAgICAgIHJldHVybiBicmFuY2hUZXN0MzIoY29uZCwgZGF0YVRlbXBSZWdpc3RlciwgbWFz
aywgZml4ZWQpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoVGVzdDMyKENvbmRpdGlvbiBjb25k
LCBCYXNlSW5kZXggYWRkcmVzcywgSW1tMzIgbWFzayA9IEltbTMyKC0xKSwgaW50IGZpeGVkID0g
MCkKKyAgICB7CisgICAgICAgIGxvYWQzMihhZGRyZXNzLCBkYXRhVGVtcFJlZ2lzdGVyLCBmaXhl
ZCk7CisgICAgICAgIHJldHVybiBicmFuY2hUZXN0MzIoY29uZCwgZGF0YVRlbXBSZWdpc3Rlciwg
bWFzaywgZml4ZWQpOworICAgIH0KKworICAgIEp1bXAganVtcCgpCisgICAgeworICAgICAgICBy
ZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qbXAoKSk7CisgICAgfQorCisgICAgdm9pZCBqdW1wKFJl
Z2lzdGVySUQgdGFyZ2V0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuam1wX3JlZ2lzdGVy
KHRhcmdldCk7CisgICAgfQorCisgICAgdm9pZCBqdW1wKEFkZHJlc3MgYWRkcmVzcykKKyAgICB7
CisgICAgICAgIGludCBmaXhlZCA9IDE7CisgICAgICAgIGxvYWQzMihhZGRyZXNzLCBNSVBTUmVn
aXN0ZXJzOjp0OSwgZml4ZWQpOworICAgICAgICBtX2Fzc2VtYmxlci5qbXBfcmVnaXN0ZXIoTUlQ
U1JlZ2lzdGVyczo6dDkpOworICAgIH0KKworICAgIC8vIEFyaXRobWV0aWMgY29udHJvbCBmbG93
IG9wZXJhdGlvbnM6CisgICAgLy8KKyAgICAvLyBUaGlzIHNldCBvZiBjb25kaXRpb25hbCBicmFu
Y2ggb3BlcmF0aW9ucyBicmFuY2ggYmFzZWQKKyAgICAvLyBvbiB0aGUgcmVzdWx0IG9mIGFuIGFy
aXRobWV0aWMgb3BlcmF0aW9uLiAgVGhlIG9wZXJhdGlvbgorICAgIC8vIGlzIHBlcmZvcm1lZCBh
cyBub3JtYWwsIHN0b3JpbmcgdGhlIHJlc3VsdC4KKyAgICAvLworICAgIC8vICoganogb3BlcmF0
aW9ucyBicmFuY2ggaWYgdGhlIHJlc3VsdCBpcyB6ZXJvLgorICAgIC8vICogam8gb3BlcmF0aW9u
cyBicmFuY2ggaWYgdGhlIChzaWduZWQpIGFyaXRobWV0aWMKKyAgICAvLyAgIG9wZXJhdGlvbiBj
YXVzZWQgYW4gb3ZlcmZsb3cgdG8gb2NjdXIuCisKKyAgICBKdW1wIGJyYW5jaEFkZDMyKENvbmRp
dGlvbiBjb25kLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQgPSAw
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKChjb25kID09IE92ZXJmbG93KSB8fCAoY29uZCA9PSBT
aWduZWQpIHx8IChjb25kID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8pKTsKKyAgICAgICAg
aWYgKGNvbmQgPT0gT3ZlcmZsb3cpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAg
bW92ZSAgICBkZXN0LCBkYXRhVGVtcAorICAgICAgICAgICAgICAgIHhvciAgICAgY21wVGVtcCwg
ZGF0YVRlbXAsIHNyYworICAgICAgICAgICAgICAgIGJsdHogICAgY21wVGVtcCwgTm9fb3ZlcmZs
b3cgICAgIyBkaWZmIHNpZ24gYml0IC0+IG5vIG92ZXJmbG93CisgICAgICAgICAgICAgICAgYWRk
dSAgICBkZXN0LCBkYXRhVGVtcCwgc3JjCisgICAgICAgICAgICAgICAgeG9yICAgICBjbXBUZW1w
LCBkZXN0LCBkYXRhVGVtcAorICAgICAgICAgICAgICAgIGJnZXogICAgY21wVGVtcCwgTm9fb3Zl
cmZsb3cgICAgIyBzYW1lIHNpZ24gYmlnIC0+IG5vIG92ZXJmbG93CisgICAgICAgICAgICAgICAg
bm9wCisgICAgICAgICAgICAgICAgYiAgICAgICBPdmVyZmxvdworICAgICAgICAgICAgICAgIG5v
cAorICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAg
ICAgIG5vcAorICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgTm9fb3ZlcmZsb3c6Cisg
ICAgICAgICAgICAqLworICAgICAgICAgICAgbW92ZShkZXN0LCBkYXRhVGVtcFJlZ2lzdGVyKTsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnhvcl9pbnNuKGNtcFRlbXBSZWdpc3RlciwgZGF0YVRl
bXBSZWdpc3Rlciwgc3JjKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmJsdHooY21wVGVtcFJl
Z2lzdGVyLCAxMCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGRlc3QsIGRhdGFUZW1w
UmVnaXN0ZXIsIHNyYyk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3JfaW5zbihjbXBUZW1w
UmVnaXN0ZXIsIGRlc3QsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIuYmdleihjbXBUZW1wUmVnaXN0ZXIsIDcpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubm9w
KCk7CisgICAgICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qbXAoKSk7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKGNvbmQgPT0gU2lnbmVkKSB7CisgICAgICAgICAgICBhZGQzMihzcmMs
IGRlc3QsIGZpeGVkKTsKKyAgICAgICAgICAgIC8vIENoZWNrIGlmIGRlc3QgaXMgbmVnYXRpdmUu
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHQoY21wVGVtcFJlZ2lzdGVyLCBkZXN0LCBNSVBT
UmVnaXN0ZXJzOjp6ZXJvKTsKKyAgICAgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmJy
YW5jaF9uZShjbXBUZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onplcm8pKTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoY29uZCA9PSBaZXJvKSB7CisgICAgICAgICAgICBhZGQzMihzcmMsIGRl
c3QsIGZpeGVkKTsKKyAgICAgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmJyYW5jaF9l
cShkZXN0LCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNv
bmQgPT0gTm9uWmVybykgeworICAgICAgICAgICAgYWRkMzIoc3JjLCBkZXN0LCBmaXhlZCk7Cisg
ICAgICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5icmFuY2hfbmUoZGVzdCwgTUlQU1Jl
Z2lzdGVyczo6emVybykpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIEp1bXAoKTsKKyAg
ICB9CisKKyAgICBKdW1wIGJyYW5jaEFkZDMyKENvbmRpdGlvbiBjb25kLCBJbW0zMiBpbW0sIFJl
Z2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIG1vdmUoaW1tLCBp
bW1UZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaEFkZDMyKGNvbmQs
IGltbVRlbXBSZWdpc3RlciwgZGVzdCwgZml4ZWQpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNo
TXVsMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QsIGlu
dCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBBU1NFUlQoKGNvbmQgPT0gT3ZlcmZsb3cpIHx8
IChjb25kID09IFNpZ25lZCkgfHwgKGNvbmQgPT0gWmVybykgfHwgKGNvbmQgPT0gTm9uWmVybykp
OworICAgICAgICBpZiAoY29uZCA9PSBPdmVyZmxvdykgeworICAgICAgICAgICAgLyoKKyAgICAg
ICAgICAgICAgICBtdWx0ICAgIHNyYywgZGVzdAorICAgICAgICAgICAgICAgIG1maGkgICAgZGF0
YVRlbXAKKyAgICAgICAgICAgICAgICBtZmxvICAgIGRlc3QKKyAgICAgICAgICAgICAgICBzcmEg
ICAgIGFkZHJUZW1wLCBkZXN0LCAzMQorICAgICAgICAgICAgICAgIGJlcSAgICAgZGF0YVRlbXAs
IGFkZHJUZW1wLCBOb19vdmVyZmxvdyAjIGFsbCBzaWduIGJpdHMgKGJpdCA2MyB0byBiaXQgMzEp
IGFyZSB0aGUgc2FtZSAtPiBubyBvdmVyZmxvdworICAgICAgICAgICAgICAgIG5vcAorICAgICAg
ICAgICAgICAgIGIgICAgICAgT3ZlcmZsb3cKKyAgICAgICAgICAgICAgICBub3AKKyAgICAgICAg
ICAgICAgICBub3AKKyAgICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAgICAgICBub3AKKyAg
ICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAgIE5vX292ZXJmbG93OgorICAgICAgICAgICAg
Ki8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm11bHQoc3JjLCBkZXN0KTsKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLm1maGkoZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5tZmxvKGRlc3QpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3JhKGFkZHJUZW1wUmVn
aXN0ZXIsIGRlc3QsIDMxKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmJlcShkYXRhVGVtcFJl
Z2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCA3KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm5v
cCgpOworICAgICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuam1wKCkpOworICAgICAg
ICB9CisgICAgICAgIGlmIChjb25kID09IFNpZ25lZCkgeworICAgICAgICAgICAgbXVsMzIoc3Jj
LCBkZXN0LCBmaXhlZCk7CisgICAgICAgICAgICAvLyBDaGVjayBpZiBkZXN0IGlzIG5lZ2F0aXZl
LgorICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0KGNtcFRlbXBSZWdpc3RlciwgZGVzdCwgTUlQ
U1JlZ2lzdGVyczo6emVybyk7CisgICAgICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5i
cmFuY2hfbmUoY21wVGVtcFJlZ2lzdGVyLCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKSk7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKGNvbmQgPT0gWmVybykgeworICAgICAgICAgICAgbXVsMzIoc3JjLCBk
ZXN0LCBmaXhlZCk7CisgICAgICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5icmFuY2hf
ZXEoZGVzdCwgTUlQU1JlZ2lzdGVyczo6emVybykpOworICAgICAgICB9CisgICAgICAgIGlmIChj
b25kID09IE5vblplcm8pIHsKKyAgICAgICAgICAgIG11bDMyKHNyYywgZGVzdCwgZml4ZWQpOwor
ICAgICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuYnJhbmNoX25lKGRlc3QsIE1JUFNS
ZWdpc3RlcnM6Onplcm8pKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBKdW1wKCk7Cisg
ICAgfQorCisgICAgSnVtcCBicmFuY2hNdWwzMihDb25kaXRpb24gY29uZCwgSW1tMzIgaW1tLCBS
ZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAg
ICAgICAgbW92ZShpbW0sIGltbVRlbXBSZWdpc3RlciwgZml4ZWQpOworICAgICAgICByZXR1cm4g
YnJhbmNoTXVsMzIoY29uZCwgaW1tVGVtcFJlZ2lzdGVyLCBkZXN0LCBmaXhlZCk7CisgICAgfQor
CisgICAgSnVtcCBicmFuY2hTdWIzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBzcmMsIFJl
Z2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoY29u
ZCA9PSBPdmVyZmxvdykgfHwgKGNvbmQgPT0gU2lnbmVkKSB8fCAoY29uZCA9PSBaZXJvKSB8fCAo
Y29uZCA9PSBOb25aZXJvKSk7CisgICAgICAgIGlmIChjb25kID09IE92ZXJmbG93KSB7CisgICAg
ICAgICAgICAvKgorICAgICAgICAgICAgICAgIG1vdmUgICAgZGVzdCwgZGF0YVRlbXAKKyAgICAg
ICAgICAgICAgICB4b3IgICAgIGNtcFRlbXAsIGRhdGFUZW1wLCBzcmMKKyAgICAgICAgICAgICAg
ICBiZ2V6ICAgIGNtcFRlbXAsIE5vX292ZXJmbG93ICAgICMgc2FtZSBzaWduIGJpdCAtPiBubyBv
dmVyZmxvdworICAgICAgICAgICAgICAgIHN1YnUgICAgZGVzdCwgZGF0YVRlbXAsIHNyYworICAg
ICAgICAgICAgICAgIHhvciAgICAgY21wVGVtcCwgZGVzdCwgZGF0YVRlbXAKKyAgICAgICAgICAg
ICAgICBiZ2V6ICAgIGNtcFRlbXAsIE5vX292ZXJmbG93ICAgICMgc2FtZSBzaWduIGJpdCAtPiBu
byBvdmVyZmxvdworICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgICAgIGIgICAgICAg
T3ZlcmZsb3cKKyAgICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAgICAgICBub3AKKyAgICAg
ICAgICAgICAgICBub3AKKyAgICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAgICAgICBub3AK
KyAgICAgICAgICAgIE5vX292ZXJmbG93OgorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1v
dmUoZGVzdCwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3Jf
aW5zbihjbXBUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsIHNyYyk7CisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5iZ2V6KGNtcFRlbXBSZWdpc3RlciwgMTApOworICAgICAgICAgICAgbV9h
c3NlbWJsZXIuc3VidShkZXN0LCBkYXRhVGVtcFJlZ2lzdGVyLCBzcmMpOworICAgICAgICAgICAg
bV9hc3NlbWJsZXIueG9yX2luc24oY21wVGVtcFJlZ2lzdGVyLCBkZXN0LCBkYXRhVGVtcFJlZ2lz
dGVyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmJnZXooY21wVGVtcFJlZ2lzdGVyLCA3KTsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICAgICAgcmV0dXJuIEp1bXAo
bV9hc3NlbWJsZXIuam1wKCkpOworICAgICAgICB9CisgICAgICAgIGlmIChjb25kID09IFNpZ25l
ZCkgeworICAgICAgICAgICAgc3ViMzIoc3JjLCBkZXN0LCBmaXhlZCk7CisgICAgICAgICAgICAv
LyBDaGVjayBpZiBkZXN0IGlzIG5lZ2F0aXZlLgorICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0
KGNtcFRlbXBSZWdpc3RlciwgZGVzdCwgTUlQU1JlZ2lzdGVyczo6emVybyk7CisgICAgICAgICAg
ICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5icmFuY2hfbmUoY21wVGVtcFJlZ2lzdGVyLCBNSVBT
UmVnaXN0ZXJzOjp6ZXJvKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gWmVybykg
eworICAgICAgICAgICAgc3ViMzIoc3JjLCBkZXN0LCBmaXhlZCk7CisgICAgICAgICAgICByZXR1
cm4gSnVtcChtX2Fzc2VtYmxlci5icmFuY2hfZXEoZGVzdCwgTUlQU1JlZ2lzdGVyczo6emVybykp
OworICAgICAgICB9CisgICAgICAgIGlmIChjb25kID09IE5vblplcm8pIHsKKyAgICAgICAgICAg
IHN1YjMyKHNyYywgZGVzdCwgZml4ZWQpOworICAgICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3Nl
bWJsZXIuYnJhbmNoX25lKGRlc3QsIE1JUFNSZWdpc3RlcnM6Onplcm8pKTsKKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiBKdW1wKCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hTdWIzMihD
b25kaXRpb24gY29uZCwgSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QsIGludCBmaXhlZCA9IDAp
CisgICAgeworICAgICAgICBtb3ZlKGltbSwgaW1tVGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAg
ICAgIHJldHVybiBicmFuY2hTdWIzMihjb25kLCBpbW1UZW1wUmVnaXN0ZXIsIGRlc3QsIGZpeGVk
KTsKKyAgICB9CisKKyAgICAvLyBNaXNjZWxsYW5lb3VzIG9wZXJhdGlvbnM6CisKKyAgICB2b2lk
IGJyZWFrcG9pbnQoKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYmtwdCgpOworICAgIH0K
KworICAgIENhbGwgbmVhckNhbGwoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIENhbGwobV9hc3Nl
bWJsZXIuZnVuY3Rpb25fY2FsbCgpLCBDYWxsOjpMaW5rYWJsZU5lYXIpOworICAgIH0KKworICAg
IENhbGwgY2FsbCgpCisgICAgeworICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5mYXJf
ZnVuY3Rpb25fY2FsbCgpLCBDYWxsOjpMaW5rYWJsZSk7CisgICAgfQorCisgICAgQ2FsbCBjYWxs
KFJlZ2lzdGVySUQgdGFyZ2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJs
ZXIuZnVuY3Rpb25fY2FsbF92aWFfcmVnaXN0ZXIodGFyZ2V0KSwgQ2FsbDo6Tm9uZSk7CisgICAg
fQorCisgICAgQ2FsbCBjYWxsKEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIGludCBm
aXhlZCA9IDE7CisgICAgICAgIGxvYWQzMihhZGRyZXNzLCBNSVBTUmVnaXN0ZXJzOjp0OSwgZml4
ZWQpOworICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5mdW5jdGlvbl9jYWxsX3ZpYV9y
ZWdpc3RlcihNSVBTUmVnaXN0ZXJzOjp0OSksIENhbGw6Ok5vbmUpOworICAgIH0KKworICAgIHZv
aWQgcmV0KCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmptcF9yZWdpc3RlcihNSVBTUmVn
aXN0ZXJzOjpyYSk7CisgICAgfQorCisgICAgdm9pZCBzZXQzMihDb25kaXRpb24gY29uZCwgUmVn
aXN0ZXJJRCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0LCBSZWdpc3RlcklEIGRlc3QsIGludCBmaXhl
ZCA9IDApCisgICAgeworICAgICAgICBpZiAoY29uZCA9PSBFcXVhbCB8fCBjb25kID09IFplcm8p
IHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnhvcl9pbnNuKGRlc3QsIGxlZnQsIHJpZ2h0KTsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdGl1KGRlc3QsIGRlc3QsIDEpOworICAgICAgICB9
IGVsc2UgaWYgKGNvbmQgPT0gTm90RXF1YWwgfHwgY29uZCA9PSBOb25aZXJvKSB7CisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci54b3JfaW5zbihkZXN0LCBsZWZ0LCByaWdodCk7CisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5zbHR1KGRlc3QsIE1JUFNSZWdpc3RlcnM6Onplcm8sIGRlc3QpOworICAg
ICAgICB9IGVsc2UgaWYgKGNvbmQgPT0gQWJvdmUpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5z
bHR1KGRlc3QsIHJpZ2h0LCBsZWZ0KTsKKyAgICAgICAgZWxzZSBpZiAoY29uZCA9PSBBYm92ZU9y
RXF1YWwpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdHUoZGVzdCwgbGVmdCwgcmlnaHQp
OworICAgICAgICAgICAgbV9hc3NlbWJsZXIueG9yaShkZXN0LCBkZXN0LCAxKTsKKyAgICAgICAg
fSBlbHNlIGlmIChjb25kID09IEJlbG93KQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0dShk
ZXN0LCBsZWZ0LCByaWdodCk7CisgICAgICAgIGVsc2UgaWYgKGNvbmQgPT0gQmVsb3dPckVxdWFs
KSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHR1KGRlc3QsIHJpZ2h0LCBsZWZ0KTsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLnhvcmkoZGVzdCwgZGVzdCwgMSk7CisgICAgICAgIH0gZWxz
ZSBpZiAoY29uZCA9PSBHcmVhdGVyVGhhbikKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdChk
ZXN0LCByaWdodCwgbGVmdCk7CisgICAgICAgIGVsc2UgaWYgKGNvbmQgPT0gR3JlYXRlclRoYW5P
ckVxdWFsKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHQoZGVzdCwgbGVmdCwgcmlnaHQp
OworICAgICAgICAgICAgbV9hc3NlbWJsZXIueG9yaShkZXN0LCBkZXN0LCAxKTsKKyAgICAgICAg
fSBlbHNlIGlmIChjb25kID09IExlc3NUaGFuKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0
KGRlc3QsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgZWxzZSBpZiAoY29uZCA9PSBMZXNzVGhhbk9y
RXF1YWwpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdChkZXN0LCByaWdodCwgbGVmdCk7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3JpKGRlc3QsIGRlc3QsIDEpOworICAgICAgICB9
IGVsc2UgaWYgKGNvbmQgPT0gT3ZlcmZsb3cpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAg
ICAgICAgeG9yICAgICBjbXBUZW1wLCBsZWZ0LCByaWdodAorICAgICAgICAgICAgICAgIGJnZXog
ICAgRG9uZSwgY21wVGVtcCAgICMgc2FtZSBzaWduIGJpdCAtPiBubyBvdmVyZmxvdworICAgICAg
ICAgICAgICAgIG1vdmUgICAgZGVzdCwgMAorICAgICAgICAgICAgICAgIHN1YnUgICAgY21wVGVt
cCwgbGVmdCwgcmlnaHQKKyAgICAgICAgICAgICAgICB4b3IgICAgIGNtcFRlbXAsIGNtcFRlbXAs
IGxlZnQgIyBkaWZmIHNpZ24gYml0IC0+IG92ZXJmbG93CisgICAgICAgICAgICAgICAgc2x0ICAg
ICBkZXN0LCBjbXBUZW1wLCAwCisgICAgICAgICAgICAgIERvbmU6CisgICAgICAgICAgICAqLwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIueG9yX2luc24oY21wVGVtcFJlZ2lzdGVyLCBsZWZ0LCBy
aWdodCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5iZ2V6KGNtcFRlbXBSZWdpc3RlciwgNCk7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZlKGRlc3QsIE1JUFNSZWdpc3RlcnM6Onplcm8p
OworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3VidShjbXBUZW1wUmVnaXN0ZXIsIGxlZnQsIHJp
Z2h0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnhvcl9pbnNuKGNtcFRlbXBSZWdpc3Rlciwg
Y21wVGVtcFJlZ2lzdGVyLCBsZWZ0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdChkZXN0
LCBjbXBUZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onplcm8pOworICAgICAgICB9IGVsc2Ug
aWYgKGNvbmQgPT0gU2lnbmVkKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdWJ1KGRlc3Qs
IGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSByZXN1bHQgaXMgbmVn
YXRpdmUuCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHQoZGVzdCwgZGVzdCwgTUlQU1JlZ2lz
dGVyczo6emVybyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHNldDMyKENvbmRpdGlv
biBjb25kLCBSZWdpc3RlcklEIGxlZnQsIEltbTMyIHJpZ2h0LCBSZWdpc3RlcklEIGRlc3QsIGlu
dCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBtb3ZlKHJpZ2h0LCBpbW1UZW1wUmVnaXN0ZXIs
IGZpeGVkKTsKKyAgICAgICAgc2V0MzIoY29uZCwgbGVmdCwgaW1tVGVtcFJlZ2lzdGVyLCBkZXN0
LCBmaXhlZCk7CisgICAgfQorCisgICAgdm9pZCBzZXRUZXN0MzIoQ29uZGl0aW9uIGNvbmQsIEFk
ZHJlc3MgYWRkcmVzcywgSW1tMzIgbWFzaywgUmVnaXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQgPSAw
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKChjb25kID09IFplcm8pIHx8IChjb25kID09IE5vblpl
cm8pKTsKKyAgICAgICAgbG9hZDMyKGFkZHJlc3MsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAg
ICBpZiAobWFzay5tX3ZhbHVlID09IC0xICYmIGZpeGVkID09IDApIHsKKyAgICAgICAgICAgIGlm
IChjb25kID09IFplcm8pCisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0aXUoZGVzdCwg
ZGF0YVRlbXBSZWdpc3RlciwgMSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
bV9hc3NlbWJsZXIuc2x0dShkZXN0LCBNSVBTUmVnaXN0ZXJzOjp6ZXJvLCBkYXRhVGVtcFJlZ2lz
dGVyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1vdmUobWFzaywgaW1tVGVtcFJl
Z2lzdGVyLCBmaXhlZCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hbmRfaW5zbihjbXBUZW1w
UmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgaWYgKGNvbmQgPT0gWmVybykKKyAg
ICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHRpdShkZXN0LCBjbXBUZW1wUmVnaXN0ZXIsIDEp
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdHUoZGVz
dCwgTUlQU1JlZ2lzdGVyczo6emVybywgY21wVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIERhdGFMYWJlbDMyIG1vdmVXaXRoUGF0Y2goSW1tMzIgaW1tLCBSZWdpc3RlcklE
IGRlc3QpCisgICAgeworICAgICAgICBpbnQgZml4ZWQgPSAxOworICAgICAgICBEYXRhTGFiZWwz
MiBsYWJlbCh0aGlzKTsKKyAgICAgICAgbW92ZShpbW0sIGRlc3QsIGZpeGVkKTsKKyAgICAgICAg
cmV0dXJuIGxhYmVsOworICAgIH0KKworICAgIERhdGFMYWJlbFB0ciBtb3ZlV2l0aFBhdGNoKElt
bVB0ciBpbml0aWFsVmFsdWUsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGludCBm
aXhlZCA9IDE7CisgICAgICAgIERhdGFMYWJlbFB0ciBsYWJlbCh0aGlzKTsKKyAgICAgICAgbW92
ZShpbml0aWFsVmFsdWUsIGRlc3QsIGZpeGVkKTsKKyAgICAgICAgcmV0dXJuIGxhYmVsOworICAg
IH0KKworICAgIEp1bXAgYnJhbmNoUHRyV2l0aFBhdGNoKENvbmRpdGlvbiBjb25kLCBSZWdpc3Rl
cklEIGxlZnQsIERhdGFMYWJlbFB0ciYgZGF0YUxhYmVsLCBJbW1QdHIgaW5pdGlhbFJpZ2h0VmFs
dWUgPSBJbW1QdHIoMCkpCisgICAgeworICAgICAgICBpbnQgZml4ZWQgPSAxOworICAgICAgICBk
YXRhTGFiZWwgPSBtb3ZlV2l0aFBhdGNoKGluaXRpYWxSaWdodFZhbHVlLCBpbW1UZW1wUmVnaXN0
ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgbGVmdCwgaW1tVGVtcFJlZ2lzdGVy
LCBmaXhlZCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hQdHJXaXRoUGF0Y2goQ29uZGl0aW9u
IGNvbmQsIEFkZHJlc3MgbGVmdCwgRGF0YUxhYmVsUHRyJiBkYXRhTGFiZWwsIEltbVB0ciBpbml0
aWFsUmlnaHRWYWx1ZSA9IEltbVB0cigwKSkKKyAgICB7CisgICAgICAgIGludCBmaXhlZCA9IDE7
CisgICAgICAgIGxvYWQzMihsZWZ0LCBkYXRhVGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgICAg
IGRhdGFMYWJlbCA9IG1vdmVXaXRoUGF0Y2goaW5pdGlhbFJpZ2h0VmFsdWUsIGltbVRlbXBSZWdp
c3Rlcik7CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBkYXRhVGVtcFJlZ2lzdGVyLCBp
bW1UZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAgICB9CisKKyAgICBEYXRhTGFiZWxQdHIgc3RvcmVQ
dHJXaXRoUGF0Y2goSW1tUHRyIGluaXRpYWxWYWx1ZSwgSW1wbGljaXRBZGRyZXNzIGFkZHJlc3Mp
CisgICAgeworICAgICAgICBpbnQgZml4ZWQgPSAxOworICAgICAgICBEYXRhTGFiZWxQdHIgZGF0
YUxhYmVsID0gbW92ZVdpdGhQYXRjaChpbml0aWFsVmFsdWUsIGRhdGFUZW1wUmVnaXN0ZXIpOwor
ICAgICAgICBzdG9yZTMyKGRhdGFUZW1wUmVnaXN0ZXIsIGFkZHJlc3MsIGZpeGVkKTsKKyAgICAg
ICAgcmV0dXJuIGRhdGFMYWJlbDsKKyAgICB9CisKKyAgICBEYXRhTGFiZWxQdHIgc3RvcmVQdHJX
aXRoUGF0Y2goSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICByZXR1cm4g
c3RvcmVQdHJXaXRoUGF0Y2goSW1tUHRyKDApLCBhZGRyZXNzKTsKKyAgICB9CisKKyAgICBDYWxs
IHRhaWxSZWN1cnNpdmVDYWxsKCkKKyAgICB7CisgICAgICAgIC8vIExpa2UgYSBub3JtYWwgY2Fs
bCwgYnV0IGRvbid0IGxpbmsuCisgICAgICAgIGludCBmaXhlZCA9IDE7CisgICAgICAgIG1vdmUo
SW1tMzIoMCksIE1JUFNSZWdpc3RlcnM6OnQ5LCBmaXhlZCk7CisgICAgICAgIHJldHVybiBDYWxs
KG1fYXNzZW1ibGVyLnRhaWxfZnVuY3Rpb25fY2FsbF92aWFfcmVnaXN0ZXIoTUlQU1JlZ2lzdGVy
czo6dDkpLCBDYWxsOjpMaW5rYWJsZSk7CisgICAgfQorCisgICAgQ2FsbCBtYWtlVGFpbFJlY3Vy
c2l2ZUNhbGwoSnVtcCBvbGRKdW1wKQorICAgIHsKKyAgICAgICAgb2xkSnVtcC5saW5rKHRoaXMp
OworICAgICAgICByZXR1cm4gdGFpbFJlY3Vyc2l2ZUNhbGwoKTsKKyAgICB9CisKKyAgICB2b2lk
IGxvYWREb3VibGUoSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MsIEZQUmVnaXN0ZXJJRCBkZXN0LCBp
bnQgZml4ZWQgPSAwKQorICAgIHsKKyNpZiBfX21pcHMgPT0gMQorICAgICAgICAvKgorICAgICAg
ICAgICAgbGkgICAgICAgICAgYWRkclRlbXAsIGFkZHJlc3Mub2Zmc2V0CisgICAgICAgICAgICBh
ZGR1ICAgICAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGJhc2UKKyAgICAgICAgICAgIGx3YzEgICAg
ICAgIGRlc3QsIDAoYWRkclRlbXApCisgICAgICAgICAgICBsd2MxICAgICAgICBkZXN0KzEsIDQo
YWRkclRlbXApCisgICAgICAgICAqLworICAgICAgICBtb3ZlKEltbTMyKGFkZHJlc3Mub2Zmc2V0
KSwgYWRkclRlbXBSZWdpc3RlciwgZml4ZWQpOworICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFk
ZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSk7CisgICAgICAg
IG1fYXNzZW1ibGVyLmx3YzEoZGVzdCwgYWRkclRlbXBSZWdpc3RlciwgMCk7CisgICAgICAgIG1f
YXNzZW1ibGVyLmx3YzEoRlBSZWdpc3RlcklEKGRlc3QgKyAxKSwgYWRkclRlbXBSZWdpc3Rlciwg
NCk7CisjZWxzZQorICAgICAgICBpZiAoYWRkcmVzcy5vZmZzZXQgPj0gLTMyNzY4ICYmIGFkZHJl
c3Mub2Zmc2V0IDw9IDMyNzY3ICYmIGZpeGVkID09IDApIHsKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLmxkYzEoZGVzdCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgIGx1aSAgICAgYWRkclRlbXAs
IChvZmZzZXQgKyAweDgwMDApID4+IDE2CisgICAgICAgICAgICAgICAgYWRkdSAgICBhZGRyVGVt
cCwgYWRkclRlbXAsIGJhc2UKKyAgICAgICAgICAgICAgICBsZGMxICAgIGRlc3QsIChvZmZzZXQg
JiAweGZmZmYpKGFkZHJUZW1wKQorICAgICAgICAgICAgICAqLworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIubHVpKGFkZHJUZW1wUmVnaXN0ZXIsIChhZGRyZXNzLm9mZnNldCArIDB4ODAwMCkgPj4g
MTYpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRy
VGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubGRj
MShkZXN0LCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAgIH0KKyNl
bmRpZgorICAgIH0KKworICAgIHZvaWQgc3RvcmVEb3VibGUoRlBSZWdpc3RlcklEIHNyYywgSW1w
bGljaXRBZGRyZXNzIGFkZHJlc3MsIGludCBmaXhlZCA9IDApCisgICAgeworI2lmIF9fbWlwcyA9
PSAxCisgICAgICAgIC8qCisgICAgICAgICAgICBsaSAgICAgICAgICBhZGRyVGVtcCwgYWRkcmVz
cy5vZmZzZXQKKyAgICAgICAgICAgIGFkZHUgICAgICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgYmFz
ZQorICAgICAgICAgICAgc3djMSAgICAgICAgZGVzdCwgMChhZGRyVGVtcCkKKyAgICAgICAgICAg
IHN3YzEgICAgICAgIGRlc3QrMSwgNChhZGRyVGVtcCkKKyAgICAgICAgICovCisgICAgICAgIG1v
dmUoSW1tMzIoYWRkcmVzcy5vZmZzZXQpLCBhZGRyVGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3Rlciwg
YWRkcmVzcy5iYXNlKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3djMShzcmMsIGFkZHJUZW1wUmVn
aXN0ZXIsIDApOworICAgICAgICBtX2Fzc2VtYmxlci5zd2MxKEZQUmVnaXN0ZXJJRChzcmMgKyAx
KSwgYWRkclRlbXBSZWdpc3RlciwgNCk7CisjZWxzZQorICAgICAgICBpZiAoYWRkcmVzcy5vZmZz
ZXQgPj0gLTMyNzY4ICYmIGFkZHJlc3Mub2Zmc2V0IDw9IDMyNzY3ICYmIGZpeGVkID09IDApCisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5zZGMxKHNyYywgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9m
ZnNldCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICBs
dWkgICAgIGFkZHJUZW1wLCAob2Zmc2V0ICsgMHg4MDAwKSA+PiAxNgorICAgICAgICAgICAgICAg
IGFkZHUgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBiYXNlCisgICAgICAgICAgICAgICAgc2RjMSAg
ICBzcmMsIChvZmZzZXQgJiAweGZmZmYpKGFkZHJUZW1wKQorICAgICAgICAgICAgICAqLworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIubHVpKGFkZHJUZW1wUmVnaXN0ZXIsIChhZGRyZXNzLm9mZnNl
dCArIDB4ODAwMCkgPj4gMTYpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVt
cFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UpOworICAgICAgICAgICAg
bV9hc3NlbWJsZXIuc2RjMShzcmMsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KTsK
KyAgICAgICAgfQorI2VuZGlmCisgICAgfQorCisgICAgdm9pZCBhZGREb3VibGUoRlBSZWdpc3Rl
cklEIHNyYywgRlBSZWdpc3RlcklEIGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5hZGRfZChkZXN0LCBkZXN0LCBzcmMpOworICAgIH0KKworICAgIHZvaWQg
YWRkRG91YmxlKEFkZHJlc3Mgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkK
KyAgICB7CisgICAgICAgIGxvYWREb3VibGUoc3JjLCBmcFRlbXBSZWdpc3RlciwgZml4ZWQpOwor
ICAgICAgICBtX2Fzc2VtYmxlci5hZGRfZChkZXN0LCBkZXN0LCBmcFRlbXBSZWdpc3Rlcik7Cisg
ICAgfQorCisgICAgdm9pZCBzdWJEb3VibGUoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklE
IGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zdWJfZChk
ZXN0LCBkZXN0LCBzcmMpOworICAgIH0KKworICAgIHZvaWQgc3ViRG91YmxlKEFkZHJlc3Mgc3Jj
LCBGUFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIGxvYWRE
b3VibGUoc3JjLCBmcFRlbXBSZWdpc3RlciwgZml4ZWQpOworICAgICAgICBtX2Fzc2VtYmxlci5z
dWJfZChkZXN0LCBkZXN0LCBmcFRlbXBSZWdpc3Rlcik7CisgICAgfQorCisgICAgdm9pZCBtdWxE
b3VibGUoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRlc3QsIGludCBmaXhlZCA9IDAp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5tdWxfZChkZXN0LCBkZXN0LCBzcmMpOworICAg
IH0KKworICAgIHZvaWQgbXVsRG91YmxlKEFkZHJlc3Mgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCwg
aW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIGxvYWREb3VibGUoc3JjLCBmcFRlbXBSZWdp
c3RlciwgZml4ZWQpOworICAgICAgICBtX2Fzc2VtYmxlci5tdWxfZChkZXN0LCBkZXN0LCBmcFRl
bXBSZWdpc3Rlcik7CisgICAgfQorCisgICAgdm9pZCBjb252ZXJ0SW50MzJUb0RvdWJsZShSZWdp
c3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgeworICAg
ICAgICBtX2Fzc2VtYmxlci5tdGMxKHNyYywgZnBUZW1wUmVnaXN0ZXIpOworICAgICAgICBtX2Fz
c2VtYmxlci5jdnRfZF93KGRlc3QsIGZwVGVtcFJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICBKdW1w
IGJyYW5jaERvdWJsZShEb3VibGVDb25kaXRpb24gY29uZCwgRlBSZWdpc3RlcklEIGxlZnQsIEZQ
UmVnaXN0ZXJJRCByaWdodCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIGlmIChjb25k
ID09IERvdWJsZUVxdWFsKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jX2VxX2QobGVmdCwg
cmlnaHQpOworICAgICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuYmMxdCgpKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoY29uZCA9PSBEb3VibGVHcmVhdGVyVGhhbikgeworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuY19sdF9kKHJpZ2h0LCBsZWZ0KTsgLy8gcmV2ZXJzZQorICAgICAg
ICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuYmMxdCgpKTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoY29uZCA9PSBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwpIHsKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLmNfbGVfZChyaWdodCwgbGVmdCk7IC8vIHJldmVyc2UKKyAgICAgICAgICAgIHJl
dHVybiBKdW1wKG1fYXNzZW1ibGVyLmJjMXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNv
bmQgPT0gRG91YmxlTGVzc1RoYW4pIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNfbHRfZChs
ZWZ0LCByaWdodCk7CisgICAgICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5iYzF0KCkp
OworICAgICAgICB9CisgICAgICAgIGlmIChjb25kID09IERvdWJsZUxlc3NUaGFuT3JFcXVhbCkg
eworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY19sZV9kKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAg
ICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmJjMXQoKSk7CisgICAgICAgIH0KKyAgICAgICAg
QVNTRVJUKDApOworCisgICAgICAgIHJldHVybiBKdW1wKCk7CisgICAgfQorCisgICAgLy8gVHJ1
bmNhdGVzICdzcmMnIHRvIGFuIGludGVnZXIsIGFuZCBwbGFjZXMgdGhlIHJlc3VsdGluZyAnZGVz
dCcuCisgICAgLy8gSWYgdGhlIHJlc3VsdCBpcyBub3QgcmVwcmVzZW50YWJsZSBhcyBhIDMyIGJp
dCB2YWx1ZSwgYnJhbmNoLgorICAgIC8vIE1heSBhbHNvIGJyYW5jaCBmb3Igc29tZSB2YWx1ZXMg
dGhhdCBhcmUgcmVwcmVzZW50YWJsZSBpbiAzMiBiaXRzCisgICAgLy8gKHNwZWNpZmljYWxseSwg
aW4gdGhpcyBjYXNlLCBJTlRfTUFYIDB4N2ZmZmZmZmYpLgorICAgIEp1bXAgYnJhbmNoVHJ1bmNh
dGVEb3VibGVUb0ludDMyKEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZp
eGVkID0gMCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnRydW5jX3dfZChmcFRlbXBSZWdp
c3RlcixzcmMpOworICAgICAgICBtX2Fzc2VtYmxlci5tZmMxKGRlc3QsIGZwVGVtcFJlZ2lzdGVy
KTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKEVxdWFsLCBkZXN0LCBJbW0zMigweDdmZmZmZmZm
KSwgZml4ZWQpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgTGlua0J1ZmZl
cjsKKyAgICBmcmllbmQgY2xhc3MgUmVwYXRjaEJ1ZmZlcjsKKworICAgIHN0YXRpYyB2b2lkIGxp
bmtDYWxsKHZvaWQqIGNvZGUsIENhbGwgY2FsbCwgRnVuY3Rpb25QdHIgZnVuY3Rpb24pCisgICAg
eworICAgICAgICBNSVBTQXNzZW1ibGVyOjpsaW5rQ2FsbChjb2RlLCBjYWxsLm1fam1wLCBmdW5j
dGlvbi52YWx1ZSgpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2Rl
TG9jYXRpb25DYWxsIGNhbGwsIENvZGVMb2NhdGlvbkxhYmVsIGRlc3RpbmF0aW9uKQorICAgIHsK
KyAgICAgICAgTUlQU0Fzc2VtYmxlcjo6cmVsaW5rQ2FsbChjYWxsLmRhdGFMb2NhdGlvbigpLCBk
ZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9p
ZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGRlc3RpbmF0
aW9uKQorICAgIHsKKyAgICAgICAgTUlQU0Fzc2VtYmxlcjo6cmVsaW5rQ2FsbChjYWxsLmRhdGFM
b2NhdGlvbigpLCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICB9CisKK307
CisKK30KKworI2VuZGlmCisKKyNlbmRpZiAvLyBNYWNyb0Fzc2VtYmxlck1JUFNfaApJbmRleDog
aml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGppdC9KSVRPcGNvZGVzLmNwcAkocmV2
aXNpb24gNDk5MjYpCisrKyBqaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3
OTcsNiArMTc5Nyw1NiBAQAogCiAgICAgYWRkUHRyKEltbTMyKHNpemVvZihBcmdMaXN0KSksIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAorI2VsaWYgUExBVEZPUk0oTUlQUykKKyAgICBlbWl0R2V0
RnJvbUNhbGxGcmFtZUhlYWRlcjMyKFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCwgcmVnVDAp
OworCisgICAgLy8gQWxsb2NhdGUgc3RhY2sgc3BhY2UgZm9yIG91ciBhcmdsaXN0CisgICAgQ09N
UElMRV9BU1NFUlQoKHNpemVvZihBcmdMaXN0KSAmIDB4NykgPT0gMCwgQXJnTGlzdF9zaG91bGRf
YnlfOGJ5dGVfYWxpZ25lZCk7CisgICAgc3ViUHRyKEltbTMyKHNpemVvZihBcmdMaXN0KSArIDI0
KSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgLy8gU2V0IHVwIGFyZ3VtZW50cworICAg
IHN1YlB0cihJbW0zMigxKSwgcmVnVDApOyAvLyBEb24ndCBpbmNsdWRlICd0aGlzJyBpbiBhcmdj
b3VudAorCisgICAgLy8gUHVzaCBhcmdjb3VudCB0byAyNCArIG9mZnNldCgkc3ApCisgICAgc3Rv
cmVQdHIocmVnVDAsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIDI0ICsgT0JKRUNUX09G
RlNFVE9GKEFyZ0xpc3QsIG1fYXJnQ291bnQpKSk7CisKKyAgICAvLyBDYWxjdWxhdGUgdGhlIHN0
YXJ0IG9mIHRoZSBjYWxsZnJhbWUgaGVhZGVyLCBhbmQgc3RvcmUgaW4gcmVnVDEKKyAgICBtb3Zl
KGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMSk7CisgICAgc3ViMzIoSW1tMzIoUmVnaXN0ZXJGaWxl
OjpDYWxsRnJhbWVIZWFkZXJTaXplICogKGludDMyX3Qpc2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1Qx
KTsKKworICAgIC8vIENhbGN1bGF0ZSBzdGFydCBvZiBhcmd1bWVudHMgYXMgY2FsbGZyYW1lIGhl
YWRlciAtIHNpemVvZihSZWdpc3RlcikgKiBhcmdjb3VudCAocmVnVDEpCisgICAgbXVsMzIoSW1t
MzIoc2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1QwLCByZWdUMCk7CisgICAgc3ViUHRyKHJlZ1QwLCBy
ZWdUMSk7CisKKyAgICAvLyBwdXNoIHBvaW50ZXIgdG8gYXJndW1lbnRzIHRvIDI0ICsgb2Zmc2V0
KCRzcCkKKyAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rlciwg
MjQgKyBPQkpFQ1RfT0ZGU0VUT0YoQXJnTGlzdCwgbV9hcmdzKSkpOworCisgICAgLy8gU2V0dXAg
YXJnMzogcmVnVDEgY3VycmVudGx5IHBvaW50cyB0byB0aGUgZmlyc3QgYXJndW1lbnQsIHJlZ1Qx
LXNpemVvZihSZWdpc3RlcikgcG9pbnRzIHRvICd0aGlzJworICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMSwgLShpbnQzMl90KXNpemVvZihSZWdpc3RlcikpLCBNSVBTUmVnaXN0ZXJzOjphMyk7CisK
KyAgICAvLyBTZXR1cCBhcmcyOgorICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJl
Z2lzdGVyRmlsZTo6Q2FsbGVlLCBNSVBTUmVnaXN0ZXJzOjphMik7CisKKyAgICAvLyBTZXR1cCBh
cmcxOgorICAgIG1vdmUoY2FsbEZyYW1lUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6OmExKTsKKwor
ICAgIC8vIFNldHVwIGFyZzQ6IEFyZ0xpc3QgaXMgcGFzc2VkIGJ5IHJlZmVyZW5jZS4gIEF0IDE2
KCRzcCksIHN0b3JlICgkc3AgKyAyNCkKKyAgICBhZGRQdHIoSW1tMzIoMjQpLCBzdGFja1BvaW50
ZXJSZWdpc3RlciwgcmVnVDIpOworICAgIHN0b3JlUHRyKHJlZ1QyLCBBZGRyZXNzKHN0YWNrUG9p
bnRlclJlZ2lzdGVyLCAxNikpOworCisgICAgLy8gU2V0dXAgYXJnMCBhcyAyMCgkc3ApIHRvIGhv
bGQgdGhlIHJldHVybmVkIHN0cnVjdHVyZS4KKyAgICBBU1NFUlQoc2l6ZW9mKEpTVmFsdWUpID09
IDQpOworICAgIGFkZFB0cihJbW0zMigyMCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBNSVBTUmVn
aXN0ZXJzOjphMCk7CisKKyAgICAvLyBDYWxsCisgICAgY2FsbChBZGRyZXNzKE1JUFNSZWdpc3Rl
cnM6OmEyLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9kYXRhKSkpOworCisgICAgLy8g
R2V0IHJldHVybmVkIHZhbHVlIGZyb20gMCgkdjApIHdoaWNoIGlzIHRoZSBzYW1lIGFzIDIwKCRz
cCkKKyAgICBsb2FkUHRyKEFkZHJlc3MocmV0dXJuVmFsdWVSZWdpc3RlciwgMCksIHJldHVyblZh
bHVlUmVnaXN0ZXIpOworCisgICAgLy8gUmVzdG9yZSBzdGFjayBzcGFjZQorICAgIGFkZFB0cihJ
bW0zMihzaXplb2YoQXJnTGlzdCkgKyAyNCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKwogI2Vs
aWYgRU5BQkxFKEpJVF9PUFRJTUlaRV9OQVRJVkVfQ0FMTCkKICNlcnJvciAiSklUX09QVElNSVpF
X05BVElWRV9DQUxMIG5vdCB5ZXQgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0uIgogI2Vsc2UK
SW5kZXg6IGppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaml0L0pJVFN0dWJzLmNwcAko
cmV2aXNpb24gNDk5MjYpCisrKyBqaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
NzEsNiArNTcxLDEwMCBAQAogICAgICJtb3YgcGMsIGxyIiAiXG4iCiApOwogCisjZWxpZiBQTEFU
Rk9STShNSVBTKQorCisjaWYgVVNFKEpJVF9TVFVCX0FSR1VNRU5UX1ZBX0xJU1QpCisjZXJyb3Ig
IkpJVF9TVFVCX0FSR1VNRU5UX1ZBX0xJU1Qgbm90IHN1cHBvcnRlZCBvbiBNSVBTLiIKKyNlbmRp
ZgorCithc20gdm9sYXRpbGUgKAorIi50ZXh0IiAiXG4iCisiLmFsaWduIDIiICJcbiIKKyIuc2V0
IG5vcmVvcmRlciIgIlxuIgorIi5zZXQgbm9tYWNybyIgIlxuIgorIi5zZXQgbm9taXBzMTYiICJc
biIKKyIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGN0aVRyYW1wb2xpbmUpICJcbiIKKyIuZW50ICIg
U1lNQk9MX1NUUklORyhjdGlUcmFtcG9saW5lKSAiXG4iCitTWU1CT0xfU1RSSU5HKGN0aVRyYW1w
b2xpbmUpICI6IiAiXG4iCisgICAgImFkZGl1ICQyOSwkMjksLTcyIiAiXG4iCisgICAgInN3ICAg
ICQzMSw0NCgkMjkpIiAiXG4iCisgICAgInN3ICAgICQxOCw0MCgkMjkpIiAiXG4iCisgICAgInN3
ICAgICQxNywzNigkMjkpIiAiXG4iCisgICAgInN3ICAgICQxNiwzMigkMjkpIiAiXG4iCisjaWYg
ZGVmaW5lZChfX1BJQ19fKQorICAgICJzdyAgICAkMjgsMjgoJDI5KSIgIlxuIgorI2VuZGlmCisg
ICAgIm1vdmUgICQxNiwkNiAgICAgICAjIHNldCBjYWxsRnJhbWVSZWdpc3RlciIgIlxuIgorICAg
ICJsaSAgICAkMTcsNTEyICAgICAgIyBzZXQgdGltZW91dENoZWNrUmVnaXN0ZXIiICJcbiIKKyAg
ICAibW92ZSAgJDI1LCQ0ICAgICAgICMgbW92ZSBleGVjdXRhYmxlQWRkcmVzcyB0byB0OSIgIlxu
IgorICAgICJzdyAgICAkNSw1MigkMjkpICAgIyBzdG9yZSByZWdpc3RlckZpbGUgdG8gY3VycmVu
dCBzdGFjayIgIlxuIgorICAgICJzdyAgICAkNiw1NigkMjkpICAgIyBzdG9yZSBjYWxsRnJhbWUg
dG8gY3VyZW50IHN0YWNrIiAiXG4iCisgICAgInN3ICAgICQ3LDYwKCQyOSkgICAjIHN0b3JlIGV4
Y2VwdGlvbiB0byBjdXJyZW50IHN0YWNrIiAiXG4iCisgICAgImx3ICAgICQ4LDg4KCQyOSkgICAj
IGxvYWQgZW5hYmxlUHJvZmlsZXJSZWZlcmVuY2UgZnJvbSBwcmV2aW91cyBzdGFjayIgIlxuIgor
ICAgICJsdyAgICAkOSw5MigkMjkpICAgIyBsb2FkIGdsb2JhbERhdGEgZnJvbSBwcmV2aW91cyBz
dGFjayIgIlxuIgorICAgICJzdyAgICAkOCw2NCgkMjkpICAgIyBzdG9yZSBlbmFibGVQcm9maWxl
clJlZmVyZW5jZSB0byBjdXJyZW50IHN0YWNrIiAiXG4iCisgICAgImphbHIgICQyNSIgIlxuIgor
ICAgICJzdyAgICAkOSw2OCgkMjkpICAgIyBzdG9yZSBnbG9iYWxEYXRhIHRvIGN1cnJlbnQgc3Rh
Y2siICJcbiIKKyAgICAibHcgICAgJDE2LDMyKCQyOSkiICJcbiIKKyAgICAibHcgICAgJDE3LDM2
KCQyOSkiICJcbiIKKyAgICAibHcgICAgJDE4LDQwKCQyOSkiICJcbiIKKyAgICAibHcgICAgJDMx
LDQ0KCQyOSkiICJcbiIKKyAgICAianIgICAgJDMxIiAiXG4iCisgICAgImFkZGl1ICQyOSwkMjks
NzIiICJcbiIKKyIuc2V0IHJlb3JkZXIiICJcbiIKKyIuc2V0IG1hY3JvIiAiXG4iCisiLmVuZCAi
IFNZTUJPTF9TVFJJTkcoY3RpVHJhbXBvbGluZSkgIlxuIgorKTsKKworYXNtIHZvbGF0aWxlICgK
KyIudGV4dCIgIlxuIgorIi5hbGlnbiAyIiAiXG4iCisiLnNldCBub3Jlb3JkZXIiICJcbiIKKyIu
c2V0IG5vbWFjcm8iICJcbiIKKyIuc2V0IG5vbWlwczE2IiAiXG4iCisiLmdsb2JsICIgU1lNQk9M
X1NUUklORyhjdGlWTVRocm93VHJhbXBvbGluZSkgIlxuIgorIi5lbnQgIiBTWU1CT0xfU1RSSU5H
KGN0aVZNVGhyb3dUcmFtcG9saW5lKSAiXG4iCitTWU1CT0xfU1RSSU5HKGN0aVZNVGhyb3dUcmFt
cG9saW5lKSAiOiIgIlxuIgorI2lmIGRlZmluZWQoX19QSUNfXykKKyAgICAibHcgICAgJDI4LDI4
KCQyOSkiICJcbiIKKyIuc2V0IG1hY3JvIiAiXG4iCisjZW5kaWYKKyAgICAiamFsICIgU1lNQk9M
X1NUUklORyhjdGlfdm1fdGhyb3cpICJcbiIKKyAgICAibW92ZSAgJDQsICQyOSIgIlxuIgorI2lm
IGRlZmluZWQoX19QSUNfXykKKyIuc2V0IG5vbWFjcm8iICJcbiIKKyNlbmRpZgorICAgICJsdyAg
ICAkMTYsMzIoJDI5KSIgIlxuIgorICAgICJsdyAgICAkMTcsMzYoJDI5KSIgIlxuIgorICAgICJs
dyAgICAkMTgsNDAoJDI5KSIgIlxuIgorICAgICJsdyAgICAkMzEsNDQoJDI5KSIgIlxuIgorICAg
ICJqciAgICAkMzEiICJcbiIKKyAgICAiYWRkaXUgJDI5LCQyOSw3MiIgIlxuIgorIi5zZXQgcmVv
cmRlciIgIlxuIgorIi5zZXQgbWFjcm8iICJcbiIKKyIuZW5kICIgU1lNQk9MX1NUUklORyhjdGlW
TVRocm93VHJhbXBvbGluZSkgIlxuIgorKTsKKworYXNtIHZvbGF0aWxlICgKKyIudGV4dCIgIlxu
IgorIi5hbGlnbiAyIiAiXG4iCisiLnNldCBub3Jlb3JkZXIiICJcbiIKKyIuc2V0IG5vbWFjcm8i
ICJcbiIKKyIuc2V0IG5vbWlwczE2IiAiXG4iCisiLmdsb2JsICIgU1lNQk9MX1NUUklORyhjdGlP
cFRocm93Tm90Q2F1Z2h0KSAiXG4iCisiLmVudCAiIFNZTUJPTF9TVFJJTkcoY3RpT3BUaHJvd05v
dENhdWdodCkgIlxuIgorU1lNQk9MX1NUUklORyhjdGlPcFRocm93Tm90Q2F1Z2h0KSAiOiIgIlxu
IgorICAgICJsdyAgICAkMTYsMzIoJDI5KSIgIlxuIgorICAgICJsdyAgICAkMTcsMzYoJDI5KSIg
IlxuIgorICAgICJsdyAgICAkMTgsNDAoJDI5KSIgIlxuIgorICAgICJsdyAgICAkMzEsNDQoJDI5
KSIgIlxuIgorICAgICJqciAgICAkMzEiICJcbiIKKyAgICAiYWRkaXUgJDI5LCQyOSw3MiIgIlxu
IgorIi5zZXQgcmVvcmRlciIgIlxuIgorIi5zZXQgbWFjcm8iICJcbiIKKyIuZW5kICIgU1lNQk9M
X1NUUklORyhjdGlPcFRocm93Tm90Q2F1Z2h0KSAiXG4iCispOworCiAjZWxpZiBDT01QSUxFUihN
U1ZDKQogCiAjaWYgVVNFKEpJVF9TVFVCX0FSR1VNRU5UX1ZBX0xJU1QpCkBAIC02NjUsNiArNzU5
LDIxIEBACiAKICAgICBBU1NFUlQoT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1l
LCB0aHVua1JldHVybkFkZHJlc3MpID09IDB4MUMpOwogI2VuZGlmCisKKyNpZiBQTEFURk9STShN
SVBTKQorICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIHBy
ZXNlcnZlZEdQKSA9PSAyOCk7CisgICAgQVNTRVJUKE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklU
U3RhY2tGcmFtZSwgcHJlc2VydmVkUzApID09IDMyKTsKKyAgICBBU1NFUlQoT0JKRUNUX09GRlNF
VE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBwcmVzZXJ2ZWRTMSkgPT0gMzYpOworICAgIEFTU0VS
VChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIHByZXNlcnZlZFMyKSA9PSA0
MCk7CisgICAgQVNTRVJUKE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgcHJl
c2VydmVkUmV0dXJuQWRkcmVzcykgPT0gNDQpOworICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yo
c3RydWN0IEpJVFN0YWNrRnJhbWUsIHRodW5rUmV0dXJuQWRkcmVzcykgPT0gNDgpOworICAgIEFT
U0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIHJlZ2lzdGVyRmlsZSkg
PT0gNTIpOworICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUs
IGNhbGxGcmFtZSkgPT0gNTYpOworICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJ
VFN0YWNrRnJhbWUsIGV4Y2VwdGlvbikgPT0gNjApOworICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VU
T0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIGVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSkgPT0gNjQp
OworICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIGdsb2Jh
bERhdGEpID09IDY4KTsKKworI2VuZGlmCiB9CiAKICNpZiBFTkFCTEUoSklUX09QVElNSVpFX1BS
T1BFUlRZX0FDQ0VTUykKQEAgLTkwOCw2ICsxMDE3LDU5IEBACiAgICAgICAgICk7IFwKICAgICBy
dHlwZSBKSVRTdHViVGh1bmtlZF8jI29wKFNUVUJfQVJHU19ERUNMQVJBVElPTikgXAogCisjZWxp
ZiBQTEFURk9STShNSVBTKQorI2lmICFkZWZpbmVkKF9fUElDX18pCisjZGVmaW5lIERFRklORV9T
VFVCX0ZVTkNUSU9OKHJ0eXBlLCBvcCkgXAorICAgIGV4dGVybiAiQyIgeyBcCisgICAgICAgIHJ0
eXBlIEpJVFN0dWJUaHVua2VkXyMjb3AoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsgXAorICAgIH07
IFwKKyAgICBhc20gdm9sYXRpbGUgKCBcCisgICAgICAgICIudGV4dCIgIlxuIiBcCisgICAgICAg
ICIuYWxpZ24gMiIgIlxuIiBcCisgICAgICAgICIuc2V0IG5vcmVvcmRlciIgIlxuIiBcCisgICAg
ICAgICIuc2V0IG5vbWFjcm8iICJcbiIgXAorICAgICAgICAiLnNldCBub21pcHMxNiIgIlxuIiBc
CisgICAgICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGN0aV8jI29wKSAiXG4iIFwKKyAgICAg
ICAgIi5lbnQgIiBTWU1CT0xfU1RSSU5HKGN0aV8jI29wKSAiXG4iIFwKKyAgICAgICAgU1lNQk9M
X1NUUklORyhjdGlfIyNvcCkgIjoiICJcbiIgXAorICAgICAgICAic3cgICAgJDMxLCA0OCgkMjkp
IiAiXG4iIFwKKyAgICAgICAgImphbCAiIFNZTUJPTF9TVFJJTkcoSklUU3R1YlRodW5rZWRfIyNv
cCkgIlxuIiBcCisgICAgICAgICJub3AiICJcbiIgXAorICAgICAgICAibHcgICAgJDMxLCA0OCgk
MjkpIiAiXG4iIFwKKyAgICAgICAgImpyICAgICQzMSIgIlxuIiBcCisgICAgICAgICJub3AiICJc
biIgXAorICAgICAgICAiLnNldCByZW9yZGVyIiAiXG4iIFwKKyAgICAgICAgIi5zZXQgbWFjcm8i
ICJcbiIgXAorICAgICAgICAiLmVuZCAiIFNZTUJPTF9TVFJJTkcoY3RpXyMjb3ApICJcbiIgXAor
ICAgICAgICApOyBcCisgICAgcnR5cGUgSklUU3R1YlRodW5rZWRfIyNvcChTVFVCX0FSR1NfREVD
TEFSQVRJT04pCisKKyNlbHNlIC8vIF9fUElDX18KKyNkZWZpbmUgREVGSU5FX1NUVUJfRlVOQ1RJ
T04ocnR5cGUsIG9wKSBcCisgICAgZXh0ZXJuICJDIiB7IFwKKyAgICAgICAgcnR5cGUgSklUU3R1
YlRodW5rZWRfIyNvcChTVFVCX0FSR1NfREVDTEFSQVRJT04pOyBcCisgICAgfTsgXAorICAgIGFz
bSB2b2xhdGlsZSAoIFwKKyAgICAgICAgIi50ZXh0IiAiXG4iIFwKKyAgICAgICAgIi5hbGlnbiAy
IiAiXG4iIFwKKyAgICAgICAgIi5zZXQgbm9yZW9yZGVyIiAiXG4iIFwKKyAgICAgICAgIi5zZXQg
bm9taXBzMTYiICJcbiIgXAorICAgICAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhjdGlfIyNv
cCkgIlxuIiBcCisgICAgICAgICIuZW50ICIgU1lNQk9MX1NUUklORyhjdGlfIyNvcCkgIlxuIiBc
CisgICAgICAgIFNZTUJPTF9TVFJJTkcoY3RpXyMjb3ApICI6IiAiXG4iIFwKKyAgICAgICAgImx3
ICAgICQyOCwgMjgoJDI5KSIgIlxuIiBcCisgICAgICAgICJzdyAgICAkMzEsIDQ4KCQyOSkiICJc
biIgXAorICAgICAgICAiamFsICIgU1lNQk9MX1NUUklORyhKSVRTdHViVGh1bmtlZF8jI29wKSAi
XG4iIFwKKyAgICAgICAgIm5vcCIgIlxuIiBcCisgICAgICAgICJsdyAgICAkMzEsIDQ4KCQyOSki
ICJcbiIgXAorICAgICAgICAianIgICAgJDMxIiAiXG4iIFwKKyAgICAgICAgIm5vcCIgIlxuIiBc
CisgICAgICAgICIuc2V0IHJlb3JkZXIiICJcbiIgXAorICAgICAgICAiLmVuZCAiIFNZTUJPTF9T
VFJJTkcoY3RpXyMjb3ApICJcbiIgXAorICAgICAgICApOyBcCisgICAgcnR5cGUgSklUU3R1YlRo
dW5rZWRfIyNvcChTVFVCX0FSR1NfREVDTEFSQVRJT04pCisKKyNlbmRpZgogI2Vsc2UKICNkZWZp
bmUgREVGSU5FX1NUVUJfRlVOQ1RJT04ocnR5cGUsIG9wKSBydHlwZSBKSVRfU1RVQiBjdGlfIyNv
cChTVFVCX0FSR1NfREVDTEFSQVRJT04pCiAjZW5kaWYKSW5kZXg6IGppdC9KSVRTdHVicy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGppdC9KSVRTdHVicy5oCShyZXZpc2lvbiA0OTkyNikKKysrIGppdC9KSVRT
dHVicy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzksNiArMTc5LDMwIEBACiAgICAgICAgIC8vIFdo
ZW4gSklUIGNvZGUgbWFrZXMgYSBjYWxsLCBpdCBwdXNoZXMgaXRzIHJldHVybiBhZGRyZXNzIGp1
c3QgYmVsb3cgdGhlIHJlc3Qgb2YgdGhlIHN0YWNrLgogICAgICAgICBSZXR1cm5BZGRyZXNzUHRy
KiByZXR1cm5BZGRyZXNzU2xvdCgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UmV0dXJuQWRk
cmVzc1B0cio+KHRoaXMpIC0gMTsgfQogICAgIH07CisjZWxpZiBQTEFURk9STShNSVBTKQorICAg
IHN0cnVjdCBKSVRTdGFja0ZyYW1lIHsKKyAgICAgICAgdm9pZCogcmVzZXJ2ZWQ7IC8vIFVudXNl
ZAorICAgICAgICBKSVRTdHViQXJnIGFyZ3NbNl07CisKKyAgICAgICAgdm9pZCogcHJlc2VydmVk
R1A7IC8vIHN0b3JlIEdQIHdoZW4gdXNpbmcgUElDIGNvZGUKKyAgICAgICAgdm9pZCogcHJlc2Vy
dmVkUzA7CisgICAgICAgIHZvaWQqIHByZXNlcnZlZFMxOworICAgICAgICB2b2lkKiBwcmVzZXJ2
ZWRTMjsKKyAgICAgICAgdm9pZCogcHJlc2VydmVkUmV0dXJuQWRkcmVzczsKKworICAgICAgICBS
ZXR1cm5BZGRyZXNzUHRyIHRodW5rUmV0dXJuQWRkcmVzczsKKworICAgICAgICAvLyBUaGVzZSBh
cmd1bWVudHMgcGFzc2VkIGluIGExLi5hMyAoYTAgY29udGFpbmVkIHRoZSBlbnRyeSBjb2RlIHBv
aW50ZWQsIHdoaWNoIGlzIG5vdCBwcmVzZXJ2ZWQpCisgICAgICAgIFJlZ2lzdGVyRmlsZSogcmVn
aXN0ZXJGaWxlOworICAgICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZTsKKyAgICAgICAgSlNWYWx1
ZSogZXhjZXB0aW9uOworCisgICAgICAgIC8vIFRoZXNlIGFyZ3VtZW50cyBwYXNzZWQgb24gdGhl
IHN0YWNrLgorICAgICAgICBQcm9maWxlcioqIGVuYWJsZWRQcm9maWxlclJlZmVyZW5jZTsKKyAg
ICAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhOworCisgICAgICAgIFJldHVybkFkZHJlc3NQ
dHIqIHJldHVybkFkZHJlc3NTbG90KCkgeyByZXR1cm4gJnRodW5rUmV0dXJuQWRkcmVzczsgfQor
ICAgIH07CiAjZWxzZQogI2Vycm9yICJKSVRTdGFja0ZyYW1lIG5vdCBkZWZpbmVkIGZvciB0aGlz
IHBsYXRmb3JtLiIKICNlbmRpZgpJbmRleDogaml0L0pJVElubGluZU1ldGhvZHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBqaXQvSklUSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiA0OTkyNikKKysrIGppdC9K
SVRJbmxpbmVNZXRob2RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2MSw2ICsxNjEsMjMgQEAKICAg
ICBsb2FkUHRyKGFkZHJlc3MsIGxpbmtSZWdpc3Rlcik7CiB9CiAKKyNlbGlmIFBMQVRGT1JNKE1J
UFMpCisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVy
Q2FsbChSZWdpc3RlcklEIHJlZykKK3sKKyAgICBtb3ZlKHJldHVybkFkZHJlc3NSZWdpc3Rlciwg
cmVnKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cmVzdG9yZVJldHVybkFkZHJlc3NC
ZWZvcmVSZXR1cm4oUmVnaXN0ZXJJRCByZWcpCit7CisgICAgbW92ZShyZWcsIHJldHVybkFkZHJl
c3NSZWdpc3Rlcik7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnJlc3RvcmVSZXR1cm5B
ZGRyZXNzQmVmb3JlUmV0dXJuKEFkZHJlc3MgYWRkcmVzcykKK3sKKyAgICBsb2FkUHRyKGFkZHJl
c3MsIHJldHVybkFkZHJlc3NSZWdpc3Rlcik7Cit9CisKICNlbHNlIC8vIFBMQVRGT1JNKFg4Nikg
fHwgUExBVEZPUk0oWDg2XzY0KSB8fCBQTEFURk9STShBUk1fVFJBRElUSU9OQUwpCiAKIEFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChSZWdpc3Rl
cklEIHJlZykKSW5kZXg6IGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
aml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAkocmV2aXNpb24gNDk5MjYpCisrKyBqaXQvRXhlY3V0
YWJsZUFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODMsNiArMTgzLDMyIEBACiAgICAg
c3RhdGljIHZvaWQgY2FjaGVGbHVzaCh2b2lkKiwgc2l6ZV90KQogICAgIHsKICAgICB9CisjZWxp
ZiBQTEFURk9STShNSVBTKQorICAgIHN0YXRpYyB2b2lkIGNhY2hlRmx1c2godm9pZCogY29kZSwg
c2l6ZV90IHNpemUpCisgICAgeworI2lmIENPTVBJTEVSKEdDQykgJiYgKEdDQ19WRVJTSU9OID49
IDMwNDA2KQorI2lmIF9fbWlwc19pc2FfcmV2ID09IDIKKyAgICAgICAgaW50IGxpbmVfc2l6ZTsK
KyAgICAgICAgYXNtICgicmRod3IgJTAsICQxIiA6ICI9ciIgKGxpbmVfc2l6ZSkpOworICAgICAg
ICAvLworICAgICAgICAvLyBNb2RpZnkgInN0YXJ0IiBhbmQgImVuZCIgdG8gYXZvaWQgR0NDIDQu
MyBidWcgaW4KKyAgICAgICAgLy8gbWlwc19leHBhbmRfc3luY2lfbG9vcCB0aGF0IG1heSBleGVj
dXRlIHN5bmNpIG9uZSBtb3JlIHRpbWUuCisgICAgICAgIC8vICJzdGFydCIgcG9pbnRzIHRvIHRo
ZSBmaXNydCBieXRlIG9mIHRoZSBjYWNoZSBsaW5lLgorICAgICAgICAvLyAiZW5kIiBwb2ludHMg
dG8gdGhlIGxhc3QgYnl0ZSBvZiB0aGUgbGluZSBiZWZvcmUgdGhlIGxhc3QgY2FjaGUgbGluZS4K
KyAgICAgICAgLy8gQmVjYXVzZSBzaXplIGlzIGFsd2F5cyBhIG11bHRpcGxlIG9mIDQsIHRoaXMg
aXMgc2FmZSB0byBzZXQKKyAgICAgICAgLy8gImVuZCIgdG8gdGhlIGxhc3QgYnl0ZS4KKyAgICAg
ICAgLy8KKyAgICAgICAgaW50IHN0YXJ0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oY29k
ZSkgJiAoLWxpbmVfc2l6ZSk7CisgICAgICAgIGludCBlbmQgPSAoKHJlaW50ZXJwcmV0X2Nhc3Q8
aW50cHRyX3Q+KGNvZGUpICsgc2l6ZSkgJiAoLWxpbmVfc2l6ZSkpIC0gMTsKKyAgICAgICAgX19j
bGVhcl9jYWNoZShyZWludGVycHJldF9jYXN0PGNoYXIqPihzdGFydCksIHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KGVuZCkpOworI2Vsc2UKKyAgICAgICAgaW50IGVuZCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8aW50cHRyX3Q+KGNvZGUpICsgc2l6ZTsKKyAgICAgICAgX19jbGVhcl9jYWNoZShyZWludGVy
cHJldF9jYXN0PGNoYXIqPihjb2RlKSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZW5kKSk7Cisj
ZW5kaWYKKyNlbHNlCisgICAgICAgICNlcnJvciAiV2UgbmVlZCBHQ0MgdG8gcHJvdmlkZSBfX2Ns
ZWFyX2NhY2hlIGZvciBNSVBTIgorI2VuZGlmCisgICAgfQogI2VsaWYgUExBVEZPUk0oQVJNX1RI
VU1CMikgJiYgUExBVEZPUk0oSVBIT05FKQogICAgIHN0YXRpYyB2b2lkIGNhY2hlRmx1c2godm9p
ZCogY29kZSwgc2l6ZV90IHNpemUpCiAgICAgewpJbmRleDogaml0L0pJVC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGppdC9KSVQuaAkocmV2aXNpb24gNDk5MjYpCisrKyBqaXQvSklULmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI2Nyw2ICsyNjcsMjggQEAKICAgICAgICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJ
RCBmcFJlZ1QwID0gQVJNUmVnaXN0ZXJzOjpkMDsKICAgICAgICAgc3RhdGljIGNvbnN0IEZQUmVn
aXN0ZXJJRCBmcFJlZ1QxID0gQVJNUmVnaXN0ZXJzOjpkMTsKICAgICAgICAgc3RhdGljIGNvbnN0
IEZQUmVnaXN0ZXJJRCBmcFJlZ1QyID0gQVJNUmVnaXN0ZXJzOjpkMjsKKyNlbGlmIFBMQVRGT1JN
KE1JUFMpCisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJldHVyblZhbHVlUmVnaXN0
ZXIgPSBNSVBTUmVnaXN0ZXJzOjp2MDsKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQg
Y2FjaGVkUmVzdWx0UmVnaXN0ZXIgPSBNSVBTUmVnaXN0ZXJzOjp2MDsKKyAgICAgICAgc3RhdGlj
IGNvbnN0IFJlZ2lzdGVySUQgZmlyc3RBcmd1bWVudFJlZ2lzdGVyID0gTUlQU1JlZ2lzdGVyczo6
YTA7CisKKyAgICAgICAgLy8gcmVnVDAgbXVzdCBiZSB2MCBmb3IgcmV0dXJuaW5nIGEgMzItYml0
IHZhbHVlLgorICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdUMCA9IE1JUFNSZWdp
c3RlcnM6OnYwOworCisgICAgICAgIC8vIHJlZ1QxIG11c3QgYmUgdjEgZm9yIHJldHVybmluZyBh
IHBhaXIgb2YgMzItYml0IHZhbHVlLgorICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBy
ZWdUMSA9IE1JUFNSZWdpc3RlcnM6OnYxOworCisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3Rl
cklEIHJlZ1QyID0gTUlQU1JlZ2lzdGVyczo6dDQ7CisKKyAgICAgICAgLy8gcmVnVDMgbXVzdCBi
ZSBzYXZlZCBpbiB0aGUgY2FsbGVlLCBzbyB1c2UgYW4gUyByZWdpc3Rlci4KKyAgICAgICAgc3Rh
dGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnVDMgPSBNSVBTUmVnaXN0ZXJzOjpzMjsKKworICAgICAg
ICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBjYWxsRnJhbWVSZWdpc3RlciA9IE1JUFNSZWdpc3Rl
cnM6OnMwOworICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCB0aW1lb3V0Q2hlY2tSZWdp
c3RlciA9IE1JUFNSZWdpc3RlcnM6OnMxOworCisgICAgICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lz
dGVySUQgZnBSZWdUMCA9IE1JUFNSZWdpc3RlcnM6OmY0OworICAgICAgICBzdGF0aWMgY29uc3Qg
RlBSZWdpc3RlcklEIGZwUmVnVDEgPSBNSVBTUmVnaXN0ZXJzOjpmNjsKKyAgICAgICAgc3RhdGlj
IGNvbnN0IEZQUmVnaXN0ZXJJRCBmcFJlZ1QyID0gTUlQU1JlZ2lzdGVyczo6Zjg7CiAjZWxzZQog
ICAgICNlcnJvciAiSklUIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybS4iCiAjZW5kaWYK
QEAgLTYyNiw3ICs2NDgsMzAgQEAKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNl
dE1ldGhvZENoZWNrUHJvdG9PYmogPSAxMjsKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRj
aE9mZnNldE1ldGhvZENoZWNrUHJvdG9TdHJ1Y3QgPSAyMDsKICAgICAgICAgc3RhdGljIGNvbnN0
IGludCBwYXRjaE9mZnNldE1ldGhvZENoZWNrUHV0RnVuY3Rpb24gPSAzMjsKKyNlbGlmIFBMQVRG
T1JNKE1JUFMpCisgICAgICAgIC8vIFRoZXNlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyB2YWx1ZSBh
cmUgdXNlZCB0byBlbmFibGUgcGF0Y2hpbmcgLSBzZWUgY29tbWVudCBvbiBvcF9wdXRfYnlfaWQu
CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRQdXRCeUlkU3RydWN0dXJlID0g
MTI7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRQdXRCeUlkRXh0ZXJuYWxM
b2FkID0gNDQ7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hMZW5ndGhQdXRCeUlkRXh0
ZXJuYWxMb2FkID0gMTY7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRQdXRC
eUlkUHJvcGVydHlNYXBPZmZzZXQgPSA2MDsKKyAgICAgICAgLy8gVGhlc2UgYXJjaGl0ZWN0dXJl
IHNwZWNpZmljIHZhbHVlIGFyZSB1c2VkIHRvIGVuYWJsZSBwYXRjaGluZyAtIHNlZSBjb21tZW50
IG9uIG9wX2dldF9ieV9pZC4KKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdl
dEJ5SWRTdHJ1Y3R1cmUgPSAxMjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNl
dEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlID0gNDQ7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
cGF0Y2hPZmZzZXRHZXRCeUlkRXh0ZXJuYWxMb2FkID0gNDQ7CisgICAgICAgIHN0YXRpYyBjb25z
dCBpbnQgcGF0Y2hMZW5ndGhHZXRCeUlkRXh0ZXJuYWxMb2FkID0gMTY7CisgICAgICAgIHN0YXRp
YyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkUHJvcGVydHlNYXBPZmZzZXQgPSA2MDsKKyAg
ICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRQdXRSZXN1bHQgPSA3NjsK
KyNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQorICAgICAgICAjZXJyb3IgIk9QQ09ERV9TQU1Q
TElORyBpcyBub3QgeWV0IHN1cHBvcnRlZCIKKyNlbHNlCisgICAgICAgIHN0YXRpYyBjb25zdCBp
bnQgcGF0Y2hPZmZzZXRHZXRCeUlkU2xvd0Nhc2VDYWxsID0gNDA7CiAjZW5kaWYKKyAgICAgICAg
c3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE9wQ2FsbENvbXBhcmVUb0p1bXAgPSAzMjsKKwor
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0TWV0aG9kQ2hlY2tQcm90b09iaiA9
IDMyOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0TWV0aG9kQ2hlY2tQcm90
b1N0cnVjdCA9IDUyOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0TWV0aG9k
Q2hlY2tQdXRGdW5jdGlvbiA9IDg0OworI2VuZGlmCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82
NCkKIAogI2lmIFBMQVRGT1JNKEFSTV9UUkFESVRJT05BTCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42114</attachid>
            <date>2009-10-29 11:04:51 -0700</date>
            <delta_ts>2009-12-01 15:01:27 -0800</delta_ts>
            <desc>MIPS JIT Patch 20091029</desc>
            <filename>mips_jit20091029.diff</filename>
            <type>text/plain</type>
            <size>107167</size>
            <attacher name="Chao-ying Fu">fu</attacher>
            
              <data encoding="base64">SW5kZXg6IHd0Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHd0Zi9QbGF0Zm9ybS5oCShyZXZp
c2lvbiA0OTkyNikKKysrIHd0Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjUsNiAr
MjI1LDE1IEBACiAjZGVmaW5lIFdURl9QTEFURk9STV9CSUdfRU5ESUFOIDEKICNlbmRpZgogCisv
KiBQTEFURk9STShNSVBTKSAqLworLyogTm90ZTogT25seSBPMzIgQUJJIGlzIHRlc3RlZCwgc28g
d2UgZW5hYmxlIGl0IGZvciBPMzIgQUJJIGZvciBub3cuICAqLworI2lmICAgKGRlZmluZWQobWlw
cykgfHwgZGVmaW5lZChfX21pcHNfXykpICYmIGRlZmluZWQoX0FCSU8zMikKKyNkZWZpbmUgV1RG
X1BMQVRGT1JNX01JUFMgMQorI2lmIGRlZmluZWQoX19NSVBTRUJfXykKKyNkZWZpbmUgV1RGX1BM
QVRGT1JNX0JJR19FTkRJQU4gMQorI2VuZGlmCisjZW5kaWYgLyogTUlQUyAqLworCiAvKiBQTEFU
Rk9STShBUk0pICovCiAjZGVmaW5lIFBMQVRGT1JNX0FSTV9BUkNIKE4pIChQTEFURk9STShBUk0p
ICYmIEFSTV9BUkNIX1ZFUlNJT04gPj0gTikKIApAQCAtNzAwLDcgKzcwOSw3IEBACiAjaWYgIWRl
ZmluZWQoV1RGX1VTRV9KU1ZBTFVFNjQpICYmICFkZWZpbmVkKFdURl9VU0VfSlNWQUxVRTMyKSAm
JiAhZGVmaW5lZChXVEZfVVNFX0pTVkFMVUUzMl82NCkKICNpZiBQTEFURk9STShYODZfNjQpICYm
IChQTEFURk9STShEQVJXSU4pIHx8IFBMQVRGT1JNKExJTlVYKSkKICNkZWZpbmUgV1RGX1VTRV9K
U1ZBTFVFNjQgMQotI2VsaWYgUExBVEZPUk0oQVJNKSB8fCBQTEFURk9STShQUEM2NCkKKyNlbGlm
IFBMQVRGT1JNKEFSTSkgfHwgUExBVEZPUk0oUFBDNjQpIHx8IFBMQVRGT1JNKE1JUFMpCiAjZGVm
aW5lIFdURl9VU0VfSlNWQUxVRTMyIDEKICNlbGlmIFBMQVRGT1JNKFdJTl9PUykgJiYgQ09NUElM
RVIoTUlOR1cpCiAvKiBVc2luZyBKU1ZBTFVFMzJfNjQgY2F1c2VzIHBhZGRpbmcvYWxpZ25lbWVu
dCBpc3N1ZXMgZm9yIEpJVFN0dWJBcmcKQEAgLTczMSw2ICs3NDAsMTAgQEAKIC8qIFRoZSBKSVQg
aXMgdGVzdGVkICYgd29ya2luZyBvbiB4ODYgV2luZG93cyAqLwogI2VsaWYgUExBVEZPUk0oWDg2
KSAmJiBQTEFURk9STShXSU4pCiAgICAgI2RlZmluZSBFTkFCTEVfSklUIDEKKy8qIFRoZSBKSVQg
aXMgZm9yIE1JUFMuICAqLworI2VsaWYgUExBVEZPUk0oTUlQUykKKyAgICAjZGVmaW5lIEVOQUJM
RV9KSVQgMQorICAgICNkZWZpbmUgV1RGX1VTRV9KSVRfU1RVQl9BUkdVTUVOVF9WQV9MSVNUIDAK
ICNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQpCkBAIC03OTQsNyArODA3LDggQEAKICB8fCAoUExB
VEZPUk0oWDg2XzY0KSAmJiBQTEFURk9STShNQUMpKSBcCiAgLyogVW5kZXIgZGV2ZWxvcG1lbnQs
IHRlbXBvcmFyaWx5IGRpc2FibGVkIHVudGlsIDE2TWIgbGluayByYW5nZSBsaW1pdCBpbiBhc3Nl
bWJsZXIgaXMgZml4ZWQuICovIFwKICB8fCAoUExBVEZPUk0oQVJNX1RIVU1CMikgJiYgUExBVEZP
Uk0oSVBIT05FKSAmJiAwKSBcCi0gfHwgKFBMQVRGT1JNKFg4NikgJiYgUExBVEZPUk0oV0lOKSkK
KyB8fCAoUExBVEZPUk0oWDg2KSAmJiBQTEFURk9STShXSU4pKSBcCisgfHwgUExBVEZPUk0oTUlQ
UykKICNkZWZpbmUgRU5BQkxFX1lBUlIgMQogI2RlZmluZSBFTkFCTEVfWUFSUl9KSVQgMQogI2Vu
ZGlmCkluZGV4OiB5YXJyL1JlZ2V4SklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB5YXJyL1JlZ2V4SklU
LmNwcAkocmV2aXNpb24gNDk5MjYpCisrKyB5YXJyL1JlZ2V4SklULmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTQsNiArNTQsMTYgQEAKICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdUMSA9
IEFSTVJlZ2lzdGVyczo6cjY7CiAKICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZXR1cm5S
ZWdpc3RlciA9IEFSTVJlZ2lzdGVyczo6cjA7CisjZWxpZiBQTEFURk9STShNSVBTKQorICAgIHN0
YXRpYyBjb25zdCBSZWdpc3RlcklEIGlucHV0ID0gTUlQU1JlZ2lzdGVyczo6YTA7CisgICAgc3Rh
dGljIGNvbnN0IFJlZ2lzdGVySUQgaW5kZXggPSBNSVBTUmVnaXN0ZXJzOjphMTsKKyAgICBzdGF0
aWMgY29uc3QgUmVnaXN0ZXJJRCBsZW5ndGggPSBNSVBTUmVnaXN0ZXJzOjphMjsKKyAgICBzdGF0
aWMgY29uc3QgUmVnaXN0ZXJJRCBvdXRwdXQgPSBNSVBTUmVnaXN0ZXJzOjphMzsKKworICAgIHN0
YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1QwID0gTUlQU1JlZ2lzdGVyczo6dDQ7CisgICAgc3Rh
dGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnVDEgPSBNSVBTUmVnaXN0ZXJzOjp0NTsKKworICAgIHN0
YXRpYyBjb25zdCBSZWdpc3RlcklEIHJldHVyblJlZ2lzdGVyID0gTUlQU1JlZ2lzdGVyczo6djA7
CiAjZWxpZiBQTEFURk9STShYODYpCiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgaW5wdXQg
PSBYODZSZWdpc3RlcnM6OmVheDsKICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBpbmRleCA9
IFg4NlJlZ2lzdGVyczo6ZWR4OwpAQCAtMTMxNiw2ICsxMzI2LDggQEAKICAgICAgICAgcHVzaChB
Uk1SZWdpc3RlcnM6OnI1KTsKICAgICAgICAgcHVzaChBUk1SZWdpc3RlcnM6OnI2KTsKICAgICAg
ICAgbW92ZShBUk1SZWdpc3RlcnM6OnIzLCBvdXRwdXQpOworI2VsaWYgUExBVEZPUk0oTUlQUykK
KyAgICAgICAgLy8gRG8gbm90aGluZy4KICNlbmRpZgogICAgIH0KIApAQCAtMTMzMyw2ICsxMzQ1
LDggQEAKICAgICAgICAgcG9wKEFSTVJlZ2lzdGVyczo6cjYpOwogICAgICAgICBwb3AoQVJNUmVn
aXN0ZXJzOjpyNSk7CiAgICAgICAgIHBvcChBUk1SZWdpc3RlcnM6OnI0KTsKKyNlbGlmIFBMQVRG
T1JNKE1JUFMpCisgICAgICAgIC8vIERvIG5vdGhpbmcKICNlbmRpZgogICAgICAgICByZXQoKTsK
ICAgICB9CkluZGV4OiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBh
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gNDk5MjYpCisrKyBhc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsMTAgQEAKICNpbmNs
dWRlICJNYWNyb0Fzc2VtYmxlckFSTS5oIgogbmFtZXNwYWNlIEpTQyB7IHR5cGVkZWYgTWFjcm9B
c3NlbWJsZXJBUk0gTWFjcm9Bc3NlbWJsZXJCYXNlOyB9OwogCisjZWxpZiBQTEFURk9STShNSVBT
KQorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyTUlQUy5oIgorbmFtZXNwYWNlIEpTQyB7IHR5cGVk
ZWYgTWFjcm9Bc3NlbWJsZXJNSVBTIE1hY3JvQXNzZW1ibGVyQmFzZTsgfTsKKwogI2VsaWYgUExB
VEZPUk0oWDg2KQogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyWDg2LmgiCiBuYW1lc3BhY2UgSlND
IHsgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlclg4NiBNYWNyb0Fzc2VtYmxlckJhc2U7IH07CkluZGV4
OiBhc3NlbWJsZXIvTUlQU0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGFzc2VtYmxlci9NSVBT
QXNzZW1ibGVyLmgJKHJldmlzaW9uIDApCisrKyBhc3NlbWJsZXIvTUlQU0Fzc2VtYmxlci5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBN
SVBTIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwOSBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIE1JUFMgVEVDSE5PTE9H
SUVTLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgTUlQUyBURUNITk9M
T0dJRVMsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIE1JUFNBc3NlbWJsZXJfaAorI2RlZmluZSBNSVBTQXNzZW1ibGVy
X2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorI2luY2x1ZGUgPHd0Zi9TZWdtZW50ZWRW
ZWN0b3IuaD4KKworI2lmIEVOQUJMRShBU1NFTUJMRVIpICYmIFBMQVRGT1JNKE1JUFMpCisKKyNp
bmNsdWRlICJBc3NlbWJsZXJCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgor
CituYW1lc3BhY2UgSlNDIHsKKwordHlwZWRlZiB1aW50MzJfdCBNSVBTV29yZDsKKworbmFtZXNw
YWNlIE1JUFNSZWdpc3RlcnMgeworICAgIHR5cGVkZWYgZW51bSB7CisgICAgICAgIHIwID0gMCwK
KyAgICAgICAgcjEsCisgICAgICAgIHIyLAorICAgICAgICByMywKKyAgICAgICAgcjQsCisgICAg
ICAgIHI1LAorICAgICAgICByNiwKKyAgICAgICAgcjcsCisgICAgICAgIHI4LAorICAgICAgICBy
OSwKKyAgICAgICAgcjEwLAorICAgICAgICByMTEsCisgICAgICAgIHIxMiwKKyAgICAgICAgcjEz
LAorICAgICAgICByMTQsCisgICAgICAgIHIxNSwKKyAgICAgICAgcjE2LAorICAgICAgICByMTcs
CisgICAgICAgIHIxOCwKKyAgICAgICAgcjE5LAorICAgICAgICByMjAsCisgICAgICAgIHIyMSwK
KyAgICAgICAgcjIyLAorICAgICAgICByMjMsCisgICAgICAgIHIyNCwKKyAgICAgICAgcjI1LAor
ICAgICAgICByMjYsCisgICAgICAgIHIyNywKKyAgICAgICAgcjI4LAorICAgICAgICByMjksCisg
ICAgICAgIHIzMCwKKyAgICAgICAgcjMxLAorICAgICAgICB6ZXJvID0gcjAsCisgICAgICAgIGF0
ID0gcjEsCisgICAgICAgIHYwID0gcjIsCisgICAgICAgIHYxID0gcjMsCisgICAgICAgIGEwID0g
cjQsCisgICAgICAgIGExID0gcjUsCisgICAgICAgIGEyID0gcjYsCisgICAgICAgIGEzID0gcjcs
CisgICAgICAgIHQwID0gcjgsCisgICAgICAgIHQxID0gcjksCisgICAgICAgIHQyID0gcjEwLAor
ICAgICAgICB0MyA9IHIxMSwKKyAgICAgICAgdDQgPSByMTIsCisgICAgICAgIHQ1ID0gcjEzLAor
ICAgICAgICB0NiA9IHIxNCwKKyAgICAgICAgdDcgPSByMTUsCisgICAgICAgIHMwID0gcjE2LAor
ICAgICAgICBzMSA9IHIxNywKKyAgICAgICAgczIgPSByMTgsCisgICAgICAgIHMzID0gcjE5LAor
ICAgICAgICBzNCA9IHIyMCwKKyAgICAgICAgczUgPSByMjEsCisgICAgICAgIHM2ID0gcjIyLAor
ICAgICAgICBzNyA9IHIyMywKKyAgICAgICAgdDggPSByMjQsCisgICAgICAgIHQ5ID0gcjI1LAor
ICAgICAgICBrMCA9IHIyNiwKKyAgICAgICAgazEgPSByMjcsCisgICAgICAgIGdwID0gcjI4LAor
ICAgICAgICBzcCA9IHIyOSwKKyAgICAgICAgZnAgPSByMzAsCisgICAgICAgIHJhID0gcjMxCisg
ICAgfSBSZWdpc3RlcklEOworCisgICAgdHlwZWRlZiBlbnVtIHsKKyAgICAgICAgZjAsCisgICAg
ICAgIGYxLAorICAgICAgICBmMiwKKyAgICAgICAgZjMsCisgICAgICAgIGY0LAorICAgICAgICBm
NSwKKyAgICAgICAgZjYsCisgICAgICAgIGY3LAorICAgICAgICBmOCwKKyAgICAgICAgZjksCisg
ICAgICAgIGYxMCwKKyAgICAgICAgZjExLAorICAgICAgICBmMTIsCisgICAgICAgIGYxMywKKyAg
ICAgICAgZjE0LAorICAgICAgICBmMTUsCisgICAgICAgIGYxNiwKKyAgICAgICAgZjE3LAorICAg
ICAgICBmMTgsCisgICAgICAgIGYxOSwKKyAgICAgICAgZjIwLAorICAgICAgICBmMjEsCisgICAg
ICAgIGYyMiwKKyAgICAgICAgZjIzLAorICAgICAgICBmMjQsCisgICAgICAgIGYyNSwKKyAgICAg
ICAgZjI2LAorICAgICAgICBmMjcsCisgICAgICAgIGYyOCwKKyAgICAgICAgZjI5LAorICAgICAg
ICBmMzAsCisgICAgICAgIGYzMQorICAgIH0gRlBSZWdpc3RlcklEOworCit9IC8vIG5hbWVzcGFj
ZSBNSVBTUmVnaXN0ZXJzCisKK2NsYXNzIE1JUFNBc3NlbWJsZXIgeworcHVibGljOgorICAgIHR5
cGVkZWYgTUlQU1JlZ2lzdGVyczo6UmVnaXN0ZXJJRCBSZWdpc3RlcklEOworICAgIHR5cGVkZWYg
TUlQU1JlZ2lzdGVyczo6RlBSZWdpc3RlcklEIEZQUmVnaXN0ZXJJRDsKKyAgICB0eXBlZGVmIFNl
Z21lbnRlZFZlY3RvcjxpbnQsIDY0PiBKdW1wczsKKworICAgIE1JUFNBc3NlbWJsZXIoKQorICAg
IHsKKyAgICB9CisKKyAgICAvLyBNSVBTIGluc3RydWN0aW9uIG9wY29kZSBmaWVsZCBwb3NpdGlv
bgorICAgIGVudW0geworICAgICAgICBPUF9TSF9SRCA9IDExLAorICAgICAgICBPUF9TSF9SVCA9
IDE2LAorICAgICAgICBPUF9TSF9SUyA9IDIxLAorICAgICAgICBPUF9TSF9TSEFNVCA9IDYsCisg
ICAgICAgIE9QX1NIX0NPREUgPSAxNiwKKyAgICAgICAgT1BfU0hfRkQgPSA2LAorICAgICAgICBP
UF9TSF9GUyA9IDExLAorICAgICAgICBPUF9TSF9GVCA9IDE2CisgICAgfTsKKworICAgIGNsYXNz
IEptcFNyYyB7CisgICAgICAgIGZyaWVuZCBjbGFzcyBNSVBTQXNzZW1ibGVyOworICAgIHB1Ymxp
YzoKKyAgICAgICAgSm1wU3JjKCkKKyAgICAgICAgICAgIDogbV9vZmZzZXQoLTEpCisgICAgICAg
IHsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgSm1wU3JjKGludCBvZmZzZXQp
CisgICAgICAgICAgICA6IG1fb2Zmc2V0KG9mZnNldCkKKyAgICAgICAgeworICAgICAgICB9CisK
KyAgICAgICAgaW50IG1fb2Zmc2V0OworICAgIH07CisKKyAgICBjbGFzcyBKbXBEc3QgeworICAg
ICAgICBmcmllbmQgY2xhc3MgTUlQU0Fzc2VtYmxlcjsKKyAgICBwdWJsaWM6CisgICAgICAgIEpt
cERzdCgpCisgICAgICAgICAgICA6IG1fb2Zmc2V0KC0xKQorICAgICAgICAgICAgLCBtX3VzZWQo
ZmFsc2UpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgaXNVc2VkKCkgY29u
c3QgeyByZXR1cm4gbV91c2VkOyB9CisgICAgICAgIHZvaWQgdXNlZCgpIHsgbV91c2VkID0gdHJ1
ZTsgfQorICAgIHByaXZhdGU6CisgICAgICAgIEptcERzdChpbnQgb2Zmc2V0KQorICAgICAgICAg
ICAgOiBtX29mZnNldChvZmZzZXQpCisgICAgICAgICAgICAsIG1fdXNlZChmYWxzZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgQVNTRVJUKG1fb2Zmc2V0ID09IG9mZnNldCk7CisgICAgICAgIH0K
KworICAgICAgICBpbnQgbV9vZmZzZXQgOiAzMTsKKyAgICAgICAgaW50IG1fdXNlZCA6IDE7Cisg
ICAgfTsKKworICAgIHZvaWQgZW1pdEluc3QoTUlQU1dvcmQgb3ApCisgICAgeworICAgICAgICB2
b2lkKiBvbGRfYmFzZSA9IG1fYnVmZmVyLmRhdGEoKTsKKworICAgICAgICBtX2J1ZmZlci5wdXRJ
bnQob3ApOworCisgICAgICAgIHZvaWQqIG5ld19iYXNlID0gbV9idWZmZXIuZGF0YSgpOworICAg
ICAgICBpZiAob2xkX2Jhc2UgIT0gbmV3X2Jhc2UpIHsKKyAgICAgICAgICAgIHJlbG9jYXRlSnVt
cHMob2xkX2Jhc2UsIG5ld19iYXNlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgbm9w
KCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMDApOworICAgIH0KKworICAgIC8q
IE5lZWQgdG8gaW5zZXJ0IG9uZSBsb2FkIGRhdGEgZGVsYXkgbm9wIGZvciBtaXBzMS4gICovCisg
ICAgdm9pZCBsb2FkRGVsYXlOb3AoKQorICAgIHsKKyNpZiBfX21pcHMgPT0gMQorICAgICAgICBu
b3AoKTsKKyNlbmRpZgorICAgIH0KKworICAgIC8qIE5lZWQgdG8gaW5zZXJ0IG9uZSBjb3Byb2Nl
c3NvciBhY2Nlc3MgZGVsYXkgbm9wIGZvciBtaXBzMS4gICovCisgICAgdm9pZCBjb3BEZWxheU5v
cCgpCisgICAgeworI2lmIF9fbWlwcyA9PSAxCisgICAgICAgIG5vcCgpOworI2VuZGlmCisgICAg
fQorCisgICAgdm9pZCBtb3ZlKFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcnMpCisgICAgewor
I2lmIGRlZmluZWQoX0FCSU8zMikKKyAgICAgICAgLyogYWRkdSAqLworICAgICAgICBlbWl0SW5z
dCgweDAwMDAwMDIxIHwgKHJkIDw8IE9QX1NIX1JEKSB8IChycyA8PCBPUF9TSF9SUykpOworI2Vs
c2UKKyAgICAgICAgLyogZGFkZHUgKi8KKyAgICAgICAgZW1pdEluc3QoMHgwMDAwMDAyZCB8IChy
ZCA8PCBPUF9TSF9SRCkgfCAocnMgPDwgT1BfU0hfUlMpKTsKKyNlbmRpZgorICAgIH0KKworICAg
IC8qIFNldCBhbiBpbW1lZGlhdGUgdmFsdWUgdG8gYSByZWdpc3Rlci4gIFRoaXMgbWF5IGdlbmVy
YXRlIDEgb3IgMgorICAgICAgIGluc3RydWN0aW9ucy4gICovCisgICAgdm9pZCBsaShSZWdpc3Rl
cklEIGRlc3QsIGludCBpbW0pCisgICAgeworICAgICAgICBpZiAoaW1tID49IC0zMjc2OCAmJiBp
bW0gPD0gMzI3NjcpCisgICAgICAgICAgICBhZGRpdShkZXN0LCBNSVBTUmVnaXN0ZXJzOjp6ZXJv
LCBpbW0pOworICAgICAgICBlbHNlIGlmIChpbW0gPj0gMCAmJiBpbW0gPCA2NTUzNikKKyAgICAg
ICAgICAgIG9yaShkZXN0LCBNSVBTUmVnaXN0ZXJzOjp6ZXJvLCBpbW0pOworICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIGx1aShkZXN0LCBpbW0gPj4gMTYpOworICAgICAgICAgICAgaWYgKGlt
bSAmIDB4ZmZmZikKKyAgICAgICAgICAgICAgICBvcmkoZGVzdCwgZGVzdCwgaW1tKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHZvaWQgbHVpKFJlZ2lzdGVySUQgcnQsIGludCBpbW0pCisgICAg
eworICAgICAgICBlbWl0SW5zdCgweDNjMDAwMDAwIHwgKHJ0IDw8IE9QX1NIX1JUKSB8IChpbW0g
JiAweGZmZmYpKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZGl1KFJlZ2lzdGVySUQgcnQsIFJlZ2lz
dGVySUQgcnMsIGludCBpbW0pCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDI0MDAwMDAwIHwg
KHJ0IDw8IE9QX1NIX1JUKSB8IChycyA8PCBPUF9TSF9SUykKKyAgICAgICAgICAgICAgICAgfCAo
aW1tICYgMHhmZmZmKSk7CisgICAgfQorCisgICAgdm9pZCBhZGR1KFJlZ2lzdGVySUQgcmQsIFJl
Z2lzdGVySUQgcnMsIFJlZ2lzdGVySUQgcnQpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDAw
MDAwMDIxIHwgKHJkIDw8IE9QX1NIX1JEKSB8IChycyA8PCBPUF9TSF9SUykKKyAgICAgICAgICAg
ICAgICAgfCAocnQgPDwgT1BfU0hfUlQpKTsKKyAgICB9CisKKyAgICB2b2lkIHN1YnUoUmVnaXN0
ZXJJRCByZCwgUmVnaXN0ZXJJRCBycywgUmVnaXN0ZXJJRCBydCkKKyAgICB7CisgICAgICAgIGVt
aXRJbnN0KDB4MDAwMDAwMjMgfCAocmQgPDwgT1BfU0hfUkQpIHwgKHJzIDw8IE9QX1NIX1JTKQor
ICAgICAgICAgICAgICAgICB8IChydCA8PCBPUF9TSF9SVCkpOworICAgIH0KKworICAgIHZvaWQg
bXVsdChSZWdpc3RlcklEIHJzLCBSZWdpc3RlcklEIHJ0KQorICAgIHsKKyAgICAgICAgZW1pdElu
c3QoMHgwMDAwMDAxOCB8IChycyA8PCBPUF9TSF9SUykgfCAocnQgPDwgT1BfU0hfUlQpKTsKKyAg
ICB9CisKKyAgICB2b2lkIG1maGkoUmVnaXN0ZXJJRCByZCkKKyAgICB7CisgICAgICAgIGVtaXRJ
bnN0KDB4MDAwMDAwMTAgfCAocmQgPDwgT1BfU0hfUkQpKTsKKyAgICB9CisKKyAgICB2b2lkIG1m
bG8oUmVnaXN0ZXJJRCByZCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMTIgfCAo
cmQgPDwgT1BfU0hfUkQpKTsKKyAgICB9CisKKyAgICB2b2lkIG11bChSZWdpc3RlcklEIHJkLCBS
ZWdpc3RlcklEIHJzLCBSZWdpc3RlcklEIHJ0KQorICAgIHsKKyNpZiBfX21pcHMgPj0gMzIKKyAg
ICAgICAgZW1pdEluc3QoMHg3MDAwMDAwMiB8IChyZCA8PCBPUF9TSF9SRCkgfCAocnMgPDwgT1Bf
U0hfUlMpCisgICAgICAgICAgICAgICAgIHwgKHJ0IDw8IE9QX1NIX1JUKSk7CisjZWxzZQorICAg
ICAgICBtdWx0KHJzLCBydCk7CisgICAgICAgIG1mbG8ocmQpOworI2VuZGlmCisgICAgfQorCisg
ICAgdm9pZCBhbmRfaW5zbihSZWdpc3RlcklEIHJkLCBSZWdpc3RlcklEIHJzLCBSZWdpc3RlcklE
IHJ0KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHgwMDAwMDAyNCB8IChyZCA8PCBPUF9TSF9S
RCkgfCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAgICAgICAgIHwgKHJ0IDw8IE9QX1NIX1JU
KSk7CisgICAgfQorCisgICAgdm9pZCBhbmRpKFJlZ2lzdGVySUQgcnQsIFJlZ2lzdGVySUQgcnMs
IGludCBpbW0pCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDMwMDAwMDAwIHwgKHJ0IDw8IE9Q
X1NIX1JUKSB8IChycyA8PCBPUF9TSF9SUykKKyAgICAgICAgICAgICAgICAgfCAoaW1tICYgMHhm
ZmZmKSk7CisgICAgfQorCisgICAgdm9pZCBub3IoUmVnaXN0ZXJJRCByZCwgUmVnaXN0ZXJJRCBy
cywgUmVnaXN0ZXJJRCBydCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMjcgfCAo
cmQgPDwgT1BfU0hfUkQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChy
dCA8PCBPUF9TSF9SVCkpOworICAgIH0KKworICAgIHZvaWQgb3JfaW5zbihSZWdpc3RlcklEIHJk
LCBSZWdpc3RlcklEIHJzLCBSZWdpc3RlcklEIHJ0KQorICAgIHsKKyAgICAgICAgZW1pdEluc3Qo
MHgwMDAwMDAyNSB8IChyZCA8PCBPUF9TSF9SRCkgfCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAg
ICAgICAgICAgIHwgKHJ0IDw8IE9QX1NIX1JUKSk7CisgICAgfQorCisgICAgdm9pZCBvcmkoUmVn
aXN0ZXJJRCBydCwgUmVnaXN0ZXJJRCBycywgaW50IGltbSkKKyAgICB7CisgICAgICAgIGVtaXRJ
bnN0KDB4MzQwMDAwMDAgfCAocnQgPDwgT1BfU0hfUlQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAg
ICAgICAgICAgICAgICB8IChpbW0gJiAweGZmZmYpKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcl9p
bnNuKFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcnMsIFJlZ2lzdGVySUQgcnQpCisgICAgewor
ICAgICAgICBlbWl0SW5zdCgweDAwMDAwMDI2IHwgKHJkIDw8IE9QX1NIX1JEKSB8IChycyA8PCBP
UF9TSF9SUykKKyAgICAgICAgICAgICAgICAgfCAocnQgPDwgT1BfU0hfUlQpKTsKKyAgICB9CisK
KyAgICB2b2lkIHhvcmkoUmVnaXN0ZXJJRCBydCwgUmVnaXN0ZXJJRCBycywgaW50IGltbSkKKyAg
ICB7CisgICAgICAgIGVtaXRJbnN0KDB4MzgwMDAwMDAgfCAocnQgPDwgT1BfU0hfUlQpIHwgKHJz
IDw8IE9QX1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChpbW0gJiAweGZmZmYpKTsKKyAgICB9
CisKKyAgICB2b2lkIHNsdChSZWdpc3RlcklEIHJkLCBSZWdpc3RlcklEIHJzLCBSZWdpc3RlcklE
IHJ0KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHgwMDAwMDAyYSB8IChyZCA8PCBPUF9TSF9S
RCkgfCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAgICAgICAgIHwgKHJ0IDw8IE9QX1NIX1JU
KSk7CisgICAgfQorCisgICAgdm9pZCBzbHR1KFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcnMs
IFJlZ2lzdGVySUQgcnQpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDAwMDAwMDJiIHwgKHJk
IDw8IE9QX1NIX1JEKSB8IChycyA8PCBPUF9TSF9SUykKKyAgICAgICAgICAgICAgICAgfCAocnQg
PDwgT1BfU0hfUlQpKTsKKyAgICB9CisKKyAgICB2b2lkIHNsdGl1KFJlZ2lzdGVySUQgcnQsIFJl
Z2lzdGVySUQgcnMsIGludCBpbW0pCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDJjMDAwMDAw
IHwgKHJ0IDw8IE9QX1NIX1JUKSB8IChycyA8PCBPUF9TSF9SUykKKyAgICAgICAgICAgICAgICAg
fCAoaW1tICYgMHhmZmZmKSk7CisgICAgfQorCisgICAgdm9pZCBzbGwoUmVnaXN0ZXJJRCByZCwg
UmVnaXN0ZXJJRCBydCwgaW50IHNoYW10KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHgwMDAw
MDAwMCB8IChyZCA8PCBPUF9TSF9SRCkgfCAocnQgPDwgT1BfU0hfUlQpCisgICAgICAgICAgICAg
ICAgIHwgKChzaGFtdCAmIDB4MWYpIDw8IE9QX1NIX1NIQU1UKSk7CisgICAgfQorCisgICAgdm9p
ZCBzbGx2KFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcnQsIGludCBycykKKyAgICB7CisgICAg
ICAgIGVtaXRJbnN0KDB4MDAwMDAwMDQgfCAocmQgPDwgT1BfU0hfUkQpIHwgKHJ0IDw8IE9QX1NI
X1JUKQorICAgICAgICAgICAgICAgICB8IChycyA8PCBPUF9TSF9SUykpOworICAgIH0KKworICAg
IHZvaWQgc3JhKFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcnQsIGludCBzaGFtdCkKKyAgICB7
CisgICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMDMgfCAocmQgPDwgT1BfU0hfUkQpIHwgKHJ0IDw8
IE9QX1NIX1JUKQorICAgICAgICAgICAgICAgICB8ICgoc2hhbXQgJiAweDFmKSA8PCBPUF9TSF9T
SEFNVCkpOworICAgIH0KKworICAgIHZvaWQgc3JhdihSZWdpc3RlcklEIHJkLCBSZWdpc3RlcklE
IHJ0LCBSZWdpc3RlcklEIHJzKQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHgwMDAwMDAwNyB8
IChyZCA8PCBPUF9TSF9SRCkgfCAocnQgPDwgT1BfU0hfUlQpCisgICAgICAgICAgICAgICAgIHwg
KHJzIDw8IE9QX1NIX1JTKSk7CisgICAgfQorCisgICAgdm9pZCBsdyhSZWdpc3RlcklEIHJ0LCBS
ZWdpc3RlcklEIHJzLCBpbnQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHg4YzAw
MDAwMCB8IChydCA8PCBPUF9TSF9SVCkgfCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAgICAg
ICAgIHwgKG9mZnNldCAmIDB4ZmZmZikpOworICAgICAgICBsb2FkRGVsYXlOb3AoKTsKKyAgICB9
CisKKyAgICB2b2lkIGx3bChSZWdpc3RlcklEIHJ0LCBSZWdpc3RlcklEIHJzLCBpbnQgb2Zmc2V0
KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHg4ODAwMDAwMCB8IChydCA8PCBPUF9TSF9SVCkg
fCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAgICAgICAgIHwgKG9mZnNldCAmIDB4ZmZmZikp
OworICAgICAgICBsb2FkRGVsYXlOb3AoKTsKKyAgICB9CisKKyAgICB2b2lkIGx3cihSZWdpc3Rl
cklEIHJ0LCBSZWdpc3RlcklEIHJzLCBpbnQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgZW1pdElu
c3QoMHg5ODAwMDAwMCB8IChydCA8PCBPUF9TSF9SVCkgfCAocnMgPDwgT1BfU0hfUlMpCisgICAg
ICAgICAgICAgICAgIHwgKG9mZnNldCAmIDB4ZmZmZikpOworICAgICAgICBsb2FkRGVsYXlOb3Ao
KTsKKyAgICB9CisKKyAgICB2b2lkIGxodShSZWdpc3RlcklEIHJ0LCBSZWdpc3RlcklEIHJzLCBp
bnQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHg5NDAwMDAwMCB8IChydCA8PCBP
UF9TSF9SVCkgfCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAgICAgICAgIHwgKG9mZnNldCAm
IDB4ZmZmZikpOworICAgICAgICBsb2FkRGVsYXlOb3AoKTsKKyAgICB9CisKKyAgICB2b2lkIHN3
KFJlZ2lzdGVySUQgcnQsIFJlZ2lzdGVySUQgcnMsIGludCBvZmZzZXQpCisgICAgeworICAgICAg
ICBlbWl0SW5zdCgweGFjMDAwMDAwIHwgKHJ0IDw8IE9QX1NIX1JUKSB8IChycyA8PCBPUF9TSF9S
UykKKyAgICAgICAgICAgICAgICAgfCAob2Zmc2V0ICYgMHhmZmZmKSk7CisgICAgfQorCisgICAg
dm9pZCBqcihSZWdpc3RlcklEIHJzKQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHgwMDAwMDAw
OCB8IChycyA8PCBPUF9TSF9SUykpOworICAgIH0KKworICAgIHZvaWQgamFscihSZWdpc3RlcklE
IHJzKQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHgwMDAwZjgwOSB8IChycyA8PCBPUF9TSF9S
UykpOworICAgIH0KKworICAgIHZvaWQgamFsKCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4
MGMwMDAwMDApOworICAgIH0KKworICAgIHZvaWQgam1wX3JlZ2lzdGVyKFJlZ2lzdGVySUQgcnMp
CisgICAgeworICAgICAgICBqcihycyk7CisgICAgICAgIG5vcCgpOworICAgIH0KKworICAgIHZv
aWQgYmtwdCgpCisgICAgeworICAgICAgICBpbnQgdmFsdWUgPSA1MTI7IC8qIEJSS19CVUcgKi8K
KyAgICAgICAgZW1pdEluc3QoMHgwMDAwMDAwZCB8ICgodmFsdWUgJiAweDNmZikgPDwgT1BfU0hf
Q09ERSkpOworICAgIH0KKworICAgIC8qIE5vdGU6IFdlIGRvbid0IHB1dCBhIG5vcCBhZnRlciBi
Z2V6LgorICAgICAgICAgICAgIFRoZSBkZWxheSBzbG90IHdpbGwgYmUgZmlsbGVkIGxhdGVyLiAg
Ki8KKyAgICB2b2lkIGJnZXooUmVnaXN0ZXJJRCBycywgaW50IGltbSkKKyAgICB7CisgICAgICAg
IGVtaXRJbnN0KDB4MDQwMTAwMDAgfCAocnMgPDwgT1BfU0hfUlMpIHwgKGltbSAmIDB4ZmZmZikp
OworICAgIH0KKworICAgIC8qIE5vdGU6IFdlIGRvbid0IHB1dCBhIG5vcCBhZnRlciBibHR6Lgor
ICAgICAgICAgICAgIFRoZSBkZWxheSBzbG90IHdpbGwgYmUgZmlsbGVkIGxhdGVyLiAgKi8KKyAg
ICB2b2lkIGJsdHooUmVnaXN0ZXJJRCBycywgaW50IGltbSkKKyAgICB7CisgICAgICAgIGVtaXRJ
bnN0KDB4MDQwMDAwMDAgfCAocnMgPDwgT1BfU0hfUlMpIHwgKGltbSAmIDB4ZmZmZikpOworICAg
IH0KKworICAgIC8qIE5vdGU6IFdlIGRvbid0IHB1dCBhIG5vcCBhZnRlciBiZXEuCisgICAgICAg
ICAgICAgVGhlIGRlbGF5IHNsb3Qgd2lsbCBiZSBmaWxsZWQgbGF0ZXIuICAqLworICAgIHZvaWQg
YmVxKFJlZ2lzdGVySUQgcnMsIFJlZ2lzdGVySUQgcnQsIGludCBpbW0pCisgICAgeworICAgICAg
ICBlbWl0SW5zdCgweDEwMDAwMDAwIHwgKHJzIDw8IE9QX1NIX1JTKSB8IChydCA8PCBPUF9TSF9S
VCkgfCAoaW1tICYgMHhmZmZmKSk7CisgICAgfQorCisgICAgLyogTm90ZTogV2UgZG9uJ3QgcHV0
IGEgbm9wIGFmdGVyIGJuZS4KKyAgICAgICAgICAgICBUaGUgZGVsYXkgc2xvdCB3aWxsIGJlIGZp
bGxlZCBsYXRlci4gICovCisgICAgdm9pZCBibmUoUmVnaXN0ZXJJRCBycywgUmVnaXN0ZXJJRCBy
dCwgaW50IGltbSkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4MTQwMDAwMDAgfCAocnMgPDwg
T1BfU0hfUlMpIHwgKHJ0IDw8IE9QX1NIX1JUKSB8IChpbW0gJiAweGZmZmYpKTsKKyAgICB9CisK
KyAgICBKbXBTcmMgam1wKCkKKyAgICB7CisgICAgICAgIG1fanVtcHMuYXBwZW5kKG1fYnVmZmVy
LnNpemUoKSk7CisKKyAgICAgICAgYmVxKE1JUFNSZWdpc3RlcnM6Onplcm8sIE1JUFNSZWdpc3Rl
cnM6Onplcm8sIDApOworICAgICAgICBub3AoKTsKKyAgICAgICAgLyogV2UgbmVlZCBmb3VyIHdv
cmRzIGZvciByZWxheGF0aW9uLiAgKi8KKyAgICAgICAgYmVxKE1JUFNSZWdpc3RlcnM6Onplcm8s
IE1JUFNSZWdpc3RlcnM6Onplcm8sIDMpOyAvLyBKdW1wIG92ZXIgbm9wcworICAgICAgICBub3Ao
KTsKKyAgICAgICAgbm9wKCk7CisgICAgICAgIG5vcCgpOworICAgICAgICByZXR1cm4gSm1wU3Jj
KG1fYnVmZmVyLnNpemUoKSk7CisgICAgfQorCisgICAgSm1wU3JjIGJyYW5jaF9lcShSZWdpc3Rl
cklEIHJzLCBSZWdpc3RlcklEIHJ0KQorICAgIHsKKyAgICAgICAgbV9qdW1wcy5hcHBlbmQobV9i
dWZmZXIuc2l6ZSgpKTsKKworICAgICAgICBiZXEocnMsIHJ0LCAwKTsKKyAgICAgICAgbm9wKCk7
CisgICAgICAgIC8qIFdlIG5lZWQgZm91ciB3b3JkcyBmb3IgcmVsYXhhdGlvbi4gICovCisgICAg
ICAgIGJlcShNSVBTUmVnaXN0ZXJzOjp6ZXJvLCBNSVBTUmVnaXN0ZXJzOjp6ZXJvLCAzKTsgLy8g
SnVtcCBvdmVyIG5vcHMKKyAgICAgICAgbm9wKCk7CisgICAgICAgIG5vcCgpOworICAgICAgICBu
b3AoKTsKKyAgICAgICAgcmV0dXJuIEptcFNyYyhtX2J1ZmZlci5zaXplKCkpOworICAgIH0KKwor
ICAgIEptcFNyYyBicmFuY2hfbmUoUmVnaXN0ZXJJRCBycywgUmVnaXN0ZXJJRCBydCkKKyAgICB7
CisgICAgICAgIG1fanVtcHMuYXBwZW5kKG1fYnVmZmVyLnNpemUoKSk7CisKKyAgICAgICAgYm5l
KHJzLCBydCwgMCk7CisgICAgICAgIG5vcCgpOworICAgICAgICAvKiBXZSBuZWVkIGZvdXIgd29y
ZHMgZm9yIHJlbGF4YXRpb24uICAqLworICAgICAgICBiZXEoTUlQU1JlZ2lzdGVyczo6emVybywg
TUlQU1JlZ2lzdGVyczo6emVybywgMyk7IC8vIEp1bXAgb3ZlciBub3BzCisgICAgICAgIG5vcCgp
OworICAgICAgICBub3AoKTsKKyAgICAgICAgbm9wKCk7CisgICAgICAgIHJldHVybiBKbXBTcmMo
bV9idWZmZXIuc2l6ZSgpKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZF9kKEZQUmVnaXN0ZXJJRCBm
ZCwgRlBSZWdpc3RlcklEIGZzLCBGUFJlZ2lzdGVySUQgZnQpCisgICAgeworICAgICAgICBlbWl0
SW5zdCgweDQ2MjAwMDAwIHwgKGZkIDw8IE9QX1NIX0ZEKSB8IChmcyA8PCBPUF9TSF9GUykKKyAg
ICAgICAgICAgICAgICAgfCAoZnQgPDwgT1BfU0hfRlQpKTsKKyAgICB9CisKKyAgICB2b2lkIHN1
Yl9kKEZQUmVnaXN0ZXJJRCBmZCwgRlBSZWdpc3RlcklEIGZzLCBGUFJlZ2lzdGVySUQgZnQpCisg
ICAgeworICAgICAgICBlbWl0SW5zdCgweDQ2MjAwMDAxIHwgKGZkIDw8IE9QX1NIX0ZEKSB8IChm
cyA8PCBPUF9TSF9GUykKKyAgICAgICAgICAgICAgICAgfCAoZnQgPDwgT1BfU0hfRlQpKTsKKyAg
ICB9CisKKyAgICB2b2lkIG11bF9kKEZQUmVnaXN0ZXJJRCBmZCwgRlBSZWdpc3RlcklEIGZzLCBG
UFJlZ2lzdGVySUQgZnQpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDQ2MjAwMDAyIHwgKGZk
IDw8IE9QX1NIX0ZEKSB8IChmcyA8PCBPUF9TSF9GUykKKyAgICAgICAgICAgICAgICAgfCAoZnQg
PDwgT1BfU0hfRlQpKTsKKyAgICB9CisKKyAgICB2b2lkIGx3YzEoRlBSZWdpc3RlcklEIGZ0LCBS
ZWdpc3RlcklEIHJzLCBpbnQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHhjNDAw
MDAwMCB8IChmdCA8PCBPUF9TSF9GVCkgfCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAgICAg
ICAgIHwgKG9mZnNldCAmIDB4ZmZmZikpOworICAgICAgICBjb3BEZWxheU5vcCgpOworICAgIH0K
KworICAgIHZvaWQgbGRjMShGUFJlZ2lzdGVySUQgZnQsIFJlZ2lzdGVySUQgcnMsIGludCBvZmZz
ZXQpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweGQ0MDAwMDAwIHwgKGZ0IDw8IE9QX1NIX0ZU
KSB8IChycyA8PCBPUF9TSF9SUykKKyAgICAgICAgICAgICAgICAgfCAob2Zmc2V0ICYgMHhmZmZm
KSk7CisgICAgfQorCisgICAgdm9pZCBzd2MxKEZQUmVnaXN0ZXJJRCBmdCwgUmVnaXN0ZXJJRCBy
cywgaW50IG9mZnNldCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4ZTQwMDAwMDAgfCAoZnQg
PDwgT1BfU0hfRlQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChvZmZz
ZXQgJiAweGZmZmYpKTsKKyAgICB9CisKKyAgICB2b2lkIHNkYzEoRlBSZWdpc3RlcklEIGZ0LCBS
ZWdpc3RlcklEIHJzLCBpbnQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHhmNDAw
MDAwMCB8IChmdCA8PCBPUF9TSF9GVCkgfCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAgICAg
ICAgIHwgKG9mZnNldCAmIDB4ZmZmZikpOworICAgIH0KKworICAgIHZvaWQgbXRjMShSZWdpc3Rl
cklEIHJ0LCBGUFJlZ2lzdGVySUQgZnMpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDQ0ODAw
MDAwIHwgKGZzIDw8IE9QX1NIX0ZTKSB8IChydCA8PCBPUF9TSF9SVCkpOworICAgICAgICBjb3BE
ZWxheU5vcCgpOworICAgIH0KKworICAgIHZvaWQgbWZjMShSZWdpc3RlcklEIHJ0LCBGUFJlZ2lz
dGVySUQgZnMpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDQ0MDAwMDAwIHwgKGZzIDw8IE9Q
X1NIX0ZTKSB8IChydCA8PCBPUF9TSF9SVCkpOworICAgICAgICBjb3BEZWxheU5vcCgpOworICAg
IH0KKworICAgIHZvaWQgdHJ1bmNfd19kKEZQUmVnaXN0ZXJJRCBmZCwgRlBSZWdpc3RlcklEIGZz
KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHg0NjIwMDAwZCB8IChmZCA8PCBPUF9TSF9GRCkg
fCAoZnMgPDwgT1BfU0hfRlMpKTsKKyAgICB9CisKKyAgICB2b2lkIGN2dF9kX3coRlBSZWdpc3Rl
cklEIGZkLCBGUFJlZ2lzdGVySUQgZnMpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDQ2ODAw
MDIxIHwgKGZkIDw8IE9QX1NIX0ZEKSB8IChmcyA8PCBPUF9TSF9GUykpOworICAgIH0KKworICAg
IHZvaWQgY19lcV9kKEZQUmVnaXN0ZXJJRCBmcywgRlBSZWdpc3RlcklEIGZ0KQorICAgIHsKKyAg
ICAgICAgZW1pdEluc3QoMHg0NjIwMDAzMiB8IChmcyA8PCBPUF9TSF9GUykgfCAoZnQgPDwgT1Bf
U0hfRlQpKTsKKyAgICAgICAgY29wRGVsYXlOb3AoKTsKKyAgICB9CisKKyAgICB2b2lkIGNfbHRf
ZChGUFJlZ2lzdGVySUQgZnMsIEZQUmVnaXN0ZXJJRCBmdCkKKyAgICB7CisgICAgICAgIGVtaXRJ
bnN0KDB4NDYyMDAwM2MgfCAoZnMgPDwgT1BfU0hfRlMpIHwgKGZ0IDw8IE9QX1NIX0ZUKSk7Cisg
ICAgICAgIGNvcERlbGF5Tm9wKCk7CisgICAgfQorCisgICAgdm9pZCBjX2xlX2QoRlBSZWdpc3Rl
cklEIGZzLCBGUFJlZ2lzdGVySUQgZnQpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDQ2MjAw
MDNlIHwgKGZzIDw8IE9QX1NIX0ZTKSB8IChmdCA8PCBPUF9TSF9GVCkpOworICAgICAgICBjb3BE
ZWxheU5vcCgpOworICAgIH0KKworICAgIEptcFNyYyBiYzF0KCkKKyAgICB7CisgICAgICAgIGVt
aXRJbnN0KDB4NDUwMTAwMDApOworICAgICAgICBub3AoKTsKKyAgICAgICAgLyogV2UgbmVlZCBm
b3VyIHdvcmRzIGZvciByZWxheGF0aW9uLiAgKi8KKyAgICAgICAgYmVxKE1JUFNSZWdpc3RlcnM6
Onplcm8sIE1JUFNSZWdpc3RlcnM6Onplcm8sIDMpOyAvLyBKdW1wIG92ZXIgbm9wcworICAgICAg
ICBub3AoKTsKKyAgICAgICAgbm9wKCk7CisgICAgICAgIG5vcCgpOworICAgICAgICByZXR1cm4g
Sm1wU3JjKG1fYnVmZmVyLnNpemUoKSk7CisgICAgfQorCisgICAgSm1wU3JjIGZhcl9mdW5jdGlv
bl9jYWxsKCkKKyAgICB7CisgICAgICAgIGx1aShNSVBTUmVnaXN0ZXJzOjp0OSwgMCk7CisgICAg
ICAgIG9yaShNSVBTUmVnaXN0ZXJzOjp0OSwgTUlQU1JlZ2lzdGVyczo6dDksIDApOworICAgICAg
ICBqYWxyKE1JUFNSZWdpc3RlcnM6OnQ5KTsKKyAgICAgICAgbm9wKCk7CisgICAgICAgIHJldHVy
biBKbXBTcmMobV9idWZmZXIuc2l6ZSgpKTsKKyAgICB9CisKKyAgICBKbXBTcmMgZnVuY3Rpb25f
Y2FsbCgpCisgICAgeworICAgICAgICAvKiBXZSBuZWVkIHR3byB3b3JkcyBmb3IgcmVsYXhhdGlv
bi4gICovCisgICAgICAgIG5vcCgpOworICAgICAgICBub3AoKTsKKyAgICAgICAgamFsKCk7Cisg
ICAgICAgIG5vcCgpOworICAgICAgICByZXR1cm4gSm1wU3JjKG1fYnVmZmVyLnNpemUoKSk7Cisg
ICAgfQorCisgICAgSm1wU3JjIGZ1bmN0aW9uX2NhbGxfdmlhX3JlZ2lzdGVyKFJlZ2lzdGVySUQg
cnMpCisgICAgeworICAgICAgICBqYWxyKHJzKTsKKyAgICAgICAgbm9wKCk7CisgICAgICAgIHJl
dHVybiBKbXBTcmMobV9idWZmZXIuc2l6ZSgpKTsKKyAgICB9CisKKyAgICBKbXBTcmMgdGFpbF9m
dW5jdGlvbl9jYWxsX3ZpYV9yZWdpc3RlcihSZWdpc3RlcklEIHJzKQorICAgIHsKKyAgICAgICAg
anIocnMpOworICAgICAgICBub3AoKTsKKyAgICAgICAgcmV0dXJuIEptcFNyYyhtX2J1ZmZlci5z
aXplKCkpOworICAgIH0KKworICAgIC8vIEdlbmVyYWwgaGVscGVycworCisgICAgSm1wRHN0IGxh
YmVsKCkKKyAgICB7CisgICAgICAgIHJldHVybiBKbXBEc3QobV9idWZmZXIuc2l6ZSgpKTsKKyAg
ICB9CisKKyAgICBKbXBEc3QgYWxpZ24oaW50IGFsaWdubWVudCkKKyAgICB7CisgICAgICAgIHdo
aWxlICghbV9idWZmZXIuaXNBbGlnbmVkKGFsaWdubWVudCkpCisgICAgICAgICAgICBia3B0KCk7
CisKKyAgICAgICAgcmV0dXJuIGxhYmVsKCk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQqIGdl
dFJlbG9jYXRlZEFkZHJlc3Modm9pZCogY29kZSwgSm1wU3JjIGp1bXApCisgICAgeworICAgICAg
ICBBU1NFUlQoanVtcC5tX29mZnNldCAhPSAtMSk7CisgICAgICAgIHZvaWQqIGIgPSByZWludGVy
cHJldF9jYXN0PHZvaWQqPigocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oY29kZSkpICsganVt
cC5tX29mZnNldCk7CisgICAgICAgIHJldHVybiBiOworICAgIH0KKworICAgIHN0YXRpYyB2b2lk
KiBnZXRSZWxvY2F0ZWRBZGRyZXNzKHZvaWQqIGNvZGUsIEptcERzdCBsYWJlbCkKKyAgICB7Cisg
ICAgICAgIHZvaWQqIGIgPSByZWludGVycHJldF9jYXN0PHZvaWQqPigocmVpbnRlcnByZXRfY2Fz
dDxpbnRwdHJfdD4oY29kZSkpICsgbGFiZWwubV9vZmZzZXQpOworICAgICAgICByZXR1cm4gYjsK
KyAgICB9CisKKyAgICBzdGF0aWMgaW50IGdldERpZmZlcmVuY2VCZXR3ZWVuTGFiZWxzKEptcERz
dCBmcm9tLCBKbXBEc3QgdG8pCisgICAgeworICAgICAgICByZXR1cm4gdG8ubV9vZmZzZXQgLSBm
cm9tLm1fb2Zmc2V0OworICAgIH0KKworICAgIHN0YXRpYyBpbnQgZ2V0RGlmZmVyZW5jZUJldHdl
ZW5MYWJlbHMoSm1wRHN0IGZyb20sIEptcFNyYyB0bykKKyAgICB7CisgICAgICAgIHJldHVybiB0
by5tX29mZnNldCAtIGZyb20ubV9vZmZzZXQ7CisgICAgfQorCisgICAgc3RhdGljIGludCBnZXRE
aWZmZXJlbmNlQmV0d2VlbkxhYmVscyhKbXBTcmMgZnJvbSwgSm1wRHN0IHRvKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRvLm1fb2Zmc2V0IC0gZnJvbS5tX29mZnNldDsKKyAgICB9CisKKyAgICAv
LyBBc3NlbWJsZXIgYWRtaW4gbWV0aG9kczoKKworICAgIHNpemVfdCBzaXplKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX2J1ZmZlci5zaXplKCk7CisgICAgfQorCisgICAgdm9pZCog
ZXhlY3V0YWJsZUNvcHkoRXhlY3V0YWJsZVBvb2wqIGFsbG9jYXRvcikKKyAgICB7CisgICAgICAg
IGludCBzaXplID0gbV9idWZmZXIuc2l6ZSgpOworICAgICAgICBpZiAoIXNpemUpCisgICAgICAg
ICAgICByZXR1cm4gMDsKKworICAgICAgICB2b2lkKiByZXN1bHQgPSBhbGxvY2F0b3ItPmFsbG9j
KHNpemUpOworICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiAwOworCisg
ICAgICAgIEV4ZWN1dGFibGVBbGxvY2F0b3I6Om1ha2VXcml0YWJsZShyZXN1bHQsIHNpemUpOwor
ICAgICAgICBtZW1jcHkocmVzdWx0LCBtX2J1ZmZlci5kYXRhKCksIG1fYnVmZmVyLnNpemUoKSk7
CisgICAgICAgIHJlbG9jYXRlSnVtcHMobV9idWZmZXIuZGF0YSgpLCByZXN1bHQpOworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyB1bnNpZ25lZCBnZXRDYWxsUmV0
dXJuT2Zmc2V0KEptcFNyYyBjYWxsKQorICAgIHsKKyAgICAgICAgLy8gVGhlIHJldHVybiBhZGRy
ZXNzIGlzIGFmdGVyIGEgY2FsbCBhbmQgYSBkZWxheSBzbG90IGluc3RydWN0aW9uCisgICAgICAg
IHJldHVybiBjYWxsLm1fb2Zmc2V0OworICAgIH0KKworICAgIC8vIExpbmtpbmcgJiBwYXRjaGlu
ZzoKKyAgICAvLworICAgIC8vICdsaW5rJyBhbmQgJ3BhdGNoJyBtZXRob2RzIGFyZSBmb3IgdXNl
IG9uIHVucHJvdGVjdGVkIGNvZGUgLSBzdWNoIGFzIHRoZSBjb2RlCisgICAgLy8gd2l0aGluIHRo
ZSBBc3NlbWJsZXJCdWZmZXIsIGFuZCBjb2RlIGJlaW5nIHBhdGNoZWQgYnkgdGhlIHBhdGNoIGJ1
ZmZlci4gIE9uY2UKKyAgICAvLyBjb2RlIGhhcyBiZWVuIGZpbmFsaXplZCBpdCBpcyAocGxhdGZv
cm0gc3VwcG9ydCBwZXJtaXR0aW5nKSB3aXRoaW4gYSBub24tCisgICAgLy8gd3JpdGFibGUgcmVn
aW9uIG9mIG1lbW9yeTsgdG8gbW9kaWZ5IHRoZSBjb2RlIGluIGFuIGV4ZWN1dGUtb25seSBleGVj
dWFibGUKKyAgICAvLyBwb29sIHRoZSAncmVwYXRjaCcgYW5kICdyZWxpbmsnIG1ldGhvZHMgc2hv
dWxkIGJlIHVzZWQuCisKKyAgICB2b2lkIGxpbmtKdW1wKEptcFNyYyBmcm9tLCBKbXBEc3QgdG8p
CisgICAgeworICAgICAgICBBU1NFUlQodG8ubV9vZmZzZXQgIT0gLTEpOworICAgICAgICBBU1NF
UlQoZnJvbS5tX29mZnNldCAhPSAtMSk7CisgICAgICAgIE1JUFNXb3JkKiBpbnNuID0gcmVpbnRl
cnByZXRfY2FzdDxNSVBTV29yZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1fYnVmZmVy
LmRhdGEoKSkgKyBmcm9tLm1fb2Zmc2V0KTsKKyAgICAgICAgTUlQU1dvcmQqIHRvX3BvcyA9IHJl
aW50ZXJwcmV0X2Nhc3Q8TUlQU1dvcmQqPihyZWludGVycHJldF9jYXN0PGludHB0cl90PihtX2J1
ZmZlci5kYXRhKCkpICsgdG8ubV9vZmZzZXQpOworCisgICAgICAgIEFTU0VSVCgqKGluc24gLSAx
KSA9PSAwICYmICooaW5zbiAtIDIpID09IDAgJiYgKihpbnNuIC0gMykgPT0gMCAmJiAqKGluc24g
LSA1KSA9PSAwKTsKKyAgICAgICAgaW5zbiA9IGluc24gLSA2OworICAgICAgICBsaW5rV2l0aE9m
ZnNldChpbnNuLCB0b19wb3MpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGxpbmtKdW1wKHZv
aWQqIGNvZGUsIEptcFNyYyBmcm9tLCB2b2lkKiB0bykKKyAgICB7CisgICAgICAgIEFTU0VSVChm
cm9tLm1fb2Zmc2V0ICE9IC0xKTsKKyAgICAgICAgTUlQU1dvcmQqIGluc24gPSByZWludGVycHJl
dF9jYXN0PE1JUFNXb3JkKj4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oY29kZSkgKyBmcm9t
Lm1fb2Zmc2V0KTsKKworICAgICAgICBBU1NFUlQoKihpbnNuIC0gMSkgPT0gMCAmJiAqKGluc24g
LSAyKSA9PSAwICYmICooaW5zbiAtIDMpID09IDAgJiYgKihpbnNuIC0gNSkgPT0gMCk7CisgICAg
ICAgIGluc24gPSBpbnNuIC0gNjsKKyAgICAgICAgbGlua1dpdGhPZmZzZXQoaW5zbiwgdG8pOwor
ICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGxpbmtDYWxsKHZvaWQqIGNvZGUsIEptcFNyYyBmcm9t
LCB2b2lkKiB0bykKKyAgICB7CisgICAgICAgIE1JUFNXb3JkKiBpbnNuID0gcmVpbnRlcnByZXRf
Y2FzdDxNSVBTV29yZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGNvZGUpICsgZnJvbS5t
X29mZnNldCk7CisgICAgICAgIGxpbmtDYWxsSW50ZXJuYWwoaW5zbiwgdG8pOworICAgIH0KKwor
ICAgIHN0YXRpYyB2b2lkIGxpbmtQb2ludGVyKHZvaWQqIGNvZGUsIEptcERzdCBmcm9tLCB2b2lk
KiB0bykKKyAgICB7CisgICAgICAgIE1JUFNXb3JkKiBpbnNuID0gcmVpbnRlcnByZXRfY2FzdDxN
SVBTV29yZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGNvZGUpICsgZnJvbS5tX29mZnNl
dCk7CisgICAgICAgIEFTU0VSVCgoKmluc24gJiAweGZmZTAwMDAwKSA9PSAweDNjMDAwMDAwKTsg
Ly8gbHVpCisgICAgICAgICppbnNuID0gKCppbnNuICYgMHhmZmZmMDAwMCkgfCAoKHJlaW50ZXJw
cmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSA+PiAxNikgJiAweGZmZmYpOworICAgICAgICBpbnNuKys7
CisgICAgICAgIEFTU0VSVCgoKmluc24gJiAweGZjMDAwMDAwKSA9PSAweDM0MDAwMDAwKTsgLy8g
b3JpCisgICAgICAgICppbnNuID0gKCppbnNuICYgMHhmZmZmMDAwMCkgfCAocmVpbnRlcnByZXRf
Y2FzdDxpbnRwdHJfdD4odG8pICYgMHhmZmZmKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBy
ZWxpbmtKdW1wKHZvaWQqIGZyb20sIHZvaWQqIHRvKQorICAgIHsKKyAgICAgICAgTUlQU1dvcmQq
IGluc24gPSByZWludGVycHJldF9jYXN0PE1JUFNXb3JkKj4oZnJvbSk7CisKKyAgICAgICAgQVNT
RVJUKCooaW5zbiAtIDEpID09IDAgJiYgKihpbnNuIC0gNSkgPT0gMCk7CisgICAgICAgIGluc24g
PSBpbnNuIC0gNjsKKyAgICAgICAgaW50IGZsdXNoX3NpemUgPSBsaW5rV2l0aE9mZnNldChpbnNu
LCB0byk7CisKKyAgICAgICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6Y2FjaGVGbHVzaChpbnNuLCBm
bHVzaF9zaXplKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCByZWxpbmtDYWxsKHZvaWQqIGZy
b20sIHZvaWQqIHRvKQorICAgIHsKKyAgICAgICAgdm9pZCogc3RhcnQ7CisgICAgICAgIGludCBz
aXplID0gbGlua0NhbGxJbnRlcm5hbChmcm9tLCB0byk7CisgICAgICAgIGlmIChzaXplID09IHNp
emVvZihNSVBTV29yZCkpCisgICAgICAgICAgICBzdGFydCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGZyb20pIC0gMiAqIHNpemVvZihNSVBTV29y
ZCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzdGFydCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGZyb20pIC0gNCAqIHNpemVvZihNSVBT
V29yZCkpOworCisgICAgICAgIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmNhY2hlRmx1c2goc3RhcnQs
IHNpemUpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hJbnQzMih2b2lkKiBmcm9t
LCBpbnQzMl90IHRvKQorICAgIHsKKyAgICAgICAgTUlQU1dvcmQqIGluc24gPSByZWludGVycHJl
dF9jYXN0PE1JUFNXb3JkKj4oZnJvbSk7CisgICAgICAgIEFTU0VSVCgoKmluc24gJiAweGZmZTAw
MDAwKSA9PSAweDNjMDAwMDAwKTsgLy8gbHVpCisgICAgICAgICppbnNuID0gKCppbnNuICYgMHhm
ZmZmMDAwMCkgfCAoKHRvID4+IDE2KSAmIDB4ZmZmZik7CisgICAgICAgIGluc24rKzsKKyAgICAg
ICAgQVNTRVJUKCgqaW5zbiAmIDB4ZmMwMDAwMDApID09IDB4MzQwMDAwMDApOyAvLyBvcmkKKyAg
ICAgICAgKmluc24gPSAoKmluc24gJiAweGZmZmYwMDAwKSB8ICh0byAmIDB4ZmZmZik7CisgICAg
ICAgIGluc24tLTsKKyAgICAgICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6Y2FjaGVGbHVzaChpbnNu
LCAyICogc2l6ZW9mKE1JUFNXb3JkKSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVwYXRj
aFBvaW50ZXIodm9pZCogZnJvbSwgdm9pZCogdG8pCisgICAgeworICAgICAgICByZXBhdGNoSW50
MzIoZnJvbSwgcmVpbnRlcnByZXRfY2FzdDxpbnQzMl90Pih0bykpOworICAgIH0KKworICAgIHN0
YXRpYyB2b2lkIHJlcGF0Y2hMb2FkUHRyVG9MRUEodm9pZCogZnJvbSkKKyAgICB7CisgICAgICAg
IE1JUFNXb3JkKiBpbnNuID0gcmVpbnRlcnByZXRfY2FzdDxNSVBTV29yZCo+KGZyb20pOworICAg
ICAgICBpbnNuID0gaW5zbiArIDM7CisgICAgICAgIEFTU0VSVCgoKmluc24gJiAweGZjMDAwMDAw
KSA9PSAweDhjMDAwMDAwKTsgLy8gbHcKKyAgICAgICAgLyogbHcgLT4gYWRkaXUgKi8KKyAgICAg
ICAgKmluc24gPSAweDI0MDAwMDAwIHwgKCppbnNuICYgMHgwM2ZmZmZmZik7CisKKyAgICAgICAg
RXhlY3V0YWJsZUFsbG9jYXRvcjo6Y2FjaGVGbHVzaChpbnNuLCBzaXplb2YoTUlQU1dvcmQpKTsK
KyAgICB9CisKK3ByaXZhdGU6CisKKyAgICAvKiBVcGRhdGUgZWFjaCBqdW1wIGluIHRoZSBidWZm
ZXIgb2YgbmV3X2Jhc2UuICAqLworICAgIHZvaWQgcmVsb2NhdGVKdW1wcyh2b2lkKiBvbGRfYmFz
ZSwgdm9pZCogbmV3X2Jhc2UpCisgICAgeworICAgICAgICAvLyBDaGVjayBlYWNoIGp1bXAKKyAg
ICAgICAgZm9yIChKdW1wczo6SXRlcmF0b3IgaXRlciA9IG1fanVtcHMuYmVnaW4oKTsgaXRlciAh
PSBtX2p1bXBzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgICAgIGludCBwb3MgPSAqaXRlcjsK
KyAgICAgICAgICAgIE1JUFNXb3JkKiBpbnNuID0gcmVpbnRlcnByZXRfY2FzdDxNSVBTV29yZCo+
KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG5ld19iYXNlKSArIHBvcyk7CisgICAgICAgICAg
ICBpbnNuID0gaW5zbiArIDI7CisgICAgICAgICAgICAvLyBOZWVkIHRvIG1ha2Ugc3VyZSB3ZSBo
YXZlIDUgdmFsaWQgaW5zdHJ1Y3Rpb25zIGFmdGVyIHBvcworICAgICAgICAgICAgaWYgKHBvcyA+
PSBtX2J1ZmZlci5zaXplKCkgLSA1ICogc2l6ZW9mKE1JUFNXb3JkKSkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKCgqaW5zbiAmIDB4ZmMwMDAwMDApID09IDB4
MDgwMDAwMDApIHsgLy8gagorICAgICAgICAgICAgICAgIGludCBvZmZzZXQgPSAqaW5zbiAmIDB4
MDNmZmZmZmY7CisgICAgICAgICAgICAgICAgaW50IG9sZF9pbnNuX2FkZHJlc3MgPSAoaW50KWlu
c24gLSAoaW50KW5ld19iYXNlICsgKGludClvbGRfYmFzZTsKKyAgICAgICAgICAgICAgICBpbnQg
dG9wX2ZvdXJfYml0cyA9IChvbGRfaW5zbl9hZGRyZXNzICsgNCkgPj4gMjg7CisgICAgICAgICAg
ICAgICAgaW50IG9sZF90YXJnZXRfYWRkcmVzcyA9ICh0b3BfZm91cl9iaXRzIDw8IDI4KSB8IChv
ZmZzZXQgPDwgMik7CisgICAgICAgICAgICAgICAgaW50IG5ld190YXJnZXRfYWRkcmVzcyA9IG9s
ZF90YXJnZXRfYWRkcmVzcyAtIChpbnQpb2xkX2Jhc2UgKyAoaW50KW5ld19iYXNlOworICAgICAg
ICAgICAgICAgIGludCBuZXdfaW5zbl9hZGRyZXNzID0gKGludClpbnNuOworICAgICAgICAgICAg
ICAgIGlmICgoKG5ld19pbnNuX2FkZHJlc3MgKyA0KSA+PiAyOCkgPT0gKG5ld190YXJnZXRfYWRk
cmVzcyA+PiAyOCkpIHsKKyAgICAgICAgICAgICAgICAgICAgKmluc24gPSAweDA4MDAwMDAwIHwg
KChuZXdfdGFyZ2V0X2FkZHJlc3MgPj4gMikgJiAweDNmZmZmZmYpOworICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8qIGx1aSAqLworICAgICAgICAgICAgICAg
ICAgICAqaW5zbiA9IDB4M2MwMDAwMDAgfCAoTUlQU1JlZ2lzdGVyczo6dDkgPDwgT1BfU0hfUlQp
IHwgKChuZXdfdGFyZ2V0X2FkZHJlc3MgPj4gMTYpICYgMHhmZmZmKTsKKyAgICAgICAgICAgICAg
ICAgICAgLyogb3JpICovCisgICAgICAgICAgICAgICAgICAgICooaW5zbiArIDEpID0gMHgzNDAw
MDAwMCB8IChNSVBTUmVnaXN0ZXJzOjp0OSA8PCBPUF9TSF9SVCkgfCAoTUlQU1JlZ2lzdGVyczo6
dDkgPDwgT1BfU0hfUlMpIHwgKG5ld190YXJnZXRfYWRkcmVzcyAmIDB4ZmZmZik7CisgICAgICAg
ICAgICAgICAgICAgIC8qIGpyICovCisgICAgICAgICAgICAgICAgICAgICooaW5zbiArIDIpID0g
MHgwMDAwMDAwOCB8IChNSVBTUmVnaXN0ZXJzOjp0OSA8PCBPUF9TSF9SUyk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmICgoKmluc24gJiAweGZmZTAwMDAwKSA9PSAw
eDNjMDAwMDAwKSB7IC8vIGx1aQorICAgICAgICAgICAgICAgIGludCBoaWdoID0gKCppbnNuICYg
MHhmZmZmKSA8PCAxNjsKKyAgICAgICAgICAgICAgICBpbnQgbG93ID0gKihpbnNuICsgMSkgJiAw
eGZmZmY7CisgICAgICAgICAgICAgICAgaW50IG9sZF90YXJnZXRfYWRkcmVzcyA9IGhpZ2ggfCBs
b3c7CisgICAgICAgICAgICAgICAgaW50IG5ld190YXJnZXRfYWRkcmVzcyA9IG9sZF90YXJnZXRf
YWRkcmVzcyAtIChpbnQpb2xkX2Jhc2UgKyAoaW50KW5ld19iYXNlOworICAgICAgICAgICAgICAg
IC8qIGx1aSAqLworICAgICAgICAgICAgICAgICppbnNuID0gMHgzYzAwMDAwMCB8IChNSVBTUmVn
aXN0ZXJzOjp0OSA8PCBPUF9TSF9SVCkgfCAoKG5ld190YXJnZXRfYWRkcmVzcyA+PiAxNikgJiAw
eGZmZmYpOworICAgICAgICAgICAgICAgIC8qIG9yaSAqLworICAgICAgICAgICAgICAgICooaW5z
biArIDEpID0gMHgzNDAwMDAwMCB8IChNSVBTUmVnaXN0ZXJzOjp0OSA8PCBPUF9TSF9SVCkgfCAo
TUlQU1JlZ2lzdGVyczo6dDkgPDwgT1BfU0hfUlMpIHwgKG5ld190YXJnZXRfYWRkcmVzcyAmIDB4
ZmZmZik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgaW50
IGxpbmtXaXRoT2Zmc2V0KE1JUFNXb3JkKiBpbnNuLCB2b2lkKiB0bykKKyAgICB7CisgICAgICAg
IEFTU0VSVCgoKmluc24gJiAweGZjMDAwMDAwKSA9PSAweDEwMDAwMDAwIC8vIGJlcQorICAgICAg
ICAgICAgICAgfHwgKCppbnNuICYgMHhmYzAwMDAwMCkgPT0gMHgxNDAwMDAwMCAvLyBibmUKKyAg
ICAgICAgICAgICAgIHx8ICgqaW5zbiAmIDB4ZmZmZjAwMDApID09IDB4NDUwMTAwMDAgLy8gYmMx
dAorICAgICAgICAgICAgICAgfHwgKCppbnNuICYgMHhmZmZmMDAwMCkgPT0gMHg0NTAwMDAwMCk7
IC8vIGJjMWYKKyAgICAgICAgaW50IGRpZmYgPSAocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4o
dG8pIC0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5zbikgLSA0KSA+PiAyOworCisgICAg
ICAgIGlmIChkaWZmIDwgLTMyNzY4IHx8IGRpZmYgPiAzMjc2NyB8fCAqKGluc24gKyAyKSAhPSAw
eDEwMDAwMDAzKSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgIENvbnZlcnQgdGhl
IHNlcXVlbmNlOgorICAgICAgICAgICAgICAgICAgYmVxICQyLCAkMywgdGFyZ2V0CisgICAgICAg
ICAgICAgICAgICBub3AKKyAgICAgICAgICAgICAgICAgIGIgMWYKKyAgICAgICAgICAgICAgICAg
IG5vcAorICAgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgICBub3AKKyAgICAg
ICAgICAgICAgICAxOgorCisgICAgICAgICAgICAgICAgdG8gdGhlIG5ldyBzZXF1ZW5jZSBpZiBw
b3NzaWJsZToKKyAgICAgICAgICAgICAgICAgIGJuZSAkMiwgJDMsIDFmCisgICAgICAgICAgICAg
ICAgICBub3AKKyAgICAgICAgICAgICAgICAgIGogICAgdGFyZ2V0CisgICAgICAgICAgICAgICAg
ICBub3AKKyAgICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgICAgICAgbm9wCisgICAg
ICAgICAgICAgICAgMToKKworICAgICAgICAgICAgICAgIE9SIHRvIHRoZSBuZXcgc2VxdWVuY2U6
CisgICAgICAgICAgICAgICAgICBibmUgJDIsICQzLCAxZgorICAgICAgICAgICAgICAgICAgbm9w
CisgICAgICAgICAgICAgICAgICBsdWkgJDI1LCB0YXJnZXQgPj4gMTYKKyAgICAgICAgICAgICAg
ICAgIG9yaSAkMjUsICQyNSwgdGFyZ2V0ICYgMHhmZmZmCisgICAgICAgICAgICAgICAgICBqciAk
MjUKKyAgICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgICAgIDE6CisKKyAgICAgICAg
ICAgICAgICBOb3RlOiBiZXEvYm5lL2JjMXQgYXJlIGNvbnZlcnRlZCB0byBibmUvYmVxL2JjMWYu
CisgICAgICAgICAgICAqLworCisgICAgICAgICAgICBpZiAoKihpbnNuICsgMikgPT0gMHgxMDAw
MDAwMykgeworICAgICAgICAgICAgICAgIGlmICgoKmluc24gJiAweGZjMDAwMDAwKSA9PSAweDEw
MDAwMDAwKSAgICAgICAvLyBiZXEKKyAgICAgICAgICAgICAgICAgICAgKmluc24gPSAoKmluc24g
JiAweDAzZmYwMDAwKSB8IDB4MTQwMDAwMDU7IC8vIGJuZQorICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKCgqaW5zbiAmIDB4ZmMwMDAwMDApID09IDB4MTQwMDAwMDApICAvLyBibmUKKyAgICAgICAg
ICAgICAgICAgICAgKmluc24gPSAoKmluc24gJiAweDAzZmYwMDAwKSB8IDB4MTAwMDAwMDU7IC8v
IGJlcQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKCgqaW5zbiAmIDB4ZmZmZjAwMDApID09IDB4
NDUwMTAwMDApICAvLyBiYzF0CisgICAgICAgICAgICAgICAgICAgICppbnNuID0gMHg0NTAwMDAw
NTsgLy8gYmMxZgorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKDApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpbnNuID0gaW5zbiArIDI7Cisg
ICAgICAgICAgICBpZiAoKChyZWludGVycHJldF9jYXN0PGludHB0cl90PihpbnNuKSArIDQpID4+
IDI4KSA9PSAocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pID4+IDI4KSkgeworICAgICAg
ICAgICAgICAgICppbnNuID0gMHgwODAwMDAwMCB8ICgocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJf
dD4odG8pID4+IDIpICYgMHgzZmZmZmZmKTsKKyAgICAgICAgICAgICAgICAqKGluc24gKyAxKSA9
IDA7CisgICAgICAgICAgICAgICAgcmV0dXJuIDQgKiBzaXplb2YoTUlQU1dvcmQpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpbnQgbmV3X3RhcmdldF9hZGRyZXNzID0gcmVpbnRlcnBy
ZXRfY2FzdDxpbnRwdHJfdD4odG8pOworICAgICAgICAgICAgLyogbHVpICovCisgICAgICAgICAg
ICAqaW5zbiA9IDB4M2MwMDAwMDAgfCAoTUlQU1JlZ2lzdGVyczo6dDkgPDwgT1BfU0hfUlQpIHwg
KChuZXdfdGFyZ2V0X2FkZHJlc3MgPj4gMTYpICYgMHhmZmZmKTsKKyAgICAgICAgICAgIC8qIG9y
aSAqLworICAgICAgICAgICAgKihpbnNuICsgMSkgPSAweDM0MDAwMDAwIHwgKE1JUFNSZWdpc3Rl
cnM6OnQ5IDw8IE9QX1NIX1JUKSB8IChNSVBTUmVnaXN0ZXJzOjp0OSA8PCBPUF9TSF9SUykgfCAo
bmV3X3RhcmdldF9hZGRyZXNzICYgMHhmZmZmKTsKKyAgICAgICAgICAgIC8qIGpyICovCisgICAg
ICAgICAgICAqKGluc24gKyAyKSA9IDB4MDAwMDAwMDggfCAoTUlQU1JlZ2lzdGVyczo6dDkgPDwg
T1BfU0hfUlMpOworICAgICAgICAgICAgcmV0dXJuIDUgKiBzaXplb2YoTUlQU1dvcmQpOworICAg
ICAgICB9CisKKyAgICAgICAgKmluc24gPSAoKmluc24gJiAweGZmZmYwMDAwKSB8IChkaWZmICYg
MHhmZmZmKTsKKyAgICAgICAgcmV0dXJuIHNpemVvZihNSVBTV29yZCk7CisgICAgfQorCisgICAg
c3RhdGljIGludCBsaW5rQ2FsbEludGVybmFsKHZvaWQqIGZyb20sIHZvaWQqIHRvKQorICAgIHsK
KyAgICAgICAgTUlQU1dvcmQqIGluc24gPSByZWludGVycHJldF9jYXN0PE1JUFNXb3JkKj4oZnJv
bSk7CisgICAgICAgIGluc24gPSBpbnNuIC0gNDsKKworICAgICAgICBpZiAoKCooaW5zbiArIDIp
ICYgMHhmYzAwMDAwMCkgPT0gMHgwYzAwMDAwMCkgeyAvLyBqYWwKKyAgICAgICAgICAgIGlmICgo
KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGZyb20pIC0gNCkgPj4gMjgpID09IChyZWludGVy
cHJldF9jYXN0PGludHB0cl90Pih0bykgPj4gMjgpKSB7CisgICAgICAgICAgICAgICAgKihpbnNu
ICsgMikgPSAweDBjMDAwMDAwIHwgKChyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgPj4g
MikgJiAweDNmZmZmZmYpOworICAgICAgICAgICAgICAgIHJldHVybiBzaXplb2YoTUlQU1dvcmQp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBsdWkgJDI1LCAodG8gPj4gMTYpICYg
MHhmZmZmICovCisgICAgICAgICAgICAqaW5zbiA9IDB4M2MwMDAwMDAgfCAoTUlQU1JlZ2lzdGVy
czo6dDkgPDwgT1BfU0hfUlQpIHwgKChyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgPj4g
MTYpICYgMHhmZmZmKTsKKyAgICAgICAgICAgIC8qIG9yaSAkMjUsICQyNSwgdG8gJiAweGZmZmYg
Ki8KKyAgICAgICAgICAgICooaW5zbiArIDEpID0gMHgzNDAwMDAwMCB8IChNSVBTUmVnaXN0ZXJz
Ojp0OSA8PCBPUF9TSF9SVCkgfCAoTUlQU1JlZ2lzdGVyczo6dDkgPDwgT1BfU0hfUlMpIHwgKHJl
aW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAmIDB4ZmZmZik7CisgICAgICAgICAgICAvKiBq
YWxyICQyNSAqLworICAgICAgICAgICAgKihpbnNuICsgMikgPSAweDAwMDBmODA5IHwgKE1JUFNS
ZWdpc3RlcnM6OnQ5IDw8IE9QX1NIX1JTKTsKKyAgICAgICAgICAgIHJldHVybiAzICogc2l6ZW9m
KE1JUFNXb3JkKTsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVCgoKmluc24gJiAweGZmZTAw
MDAwKSA9PSAweDNjMDAwMDAwKTsgLy8gbHVpCisgICAgICAgIEFTU0VSVCgoKihpbnNuICsgMSkg
JiAweGZjMDAwMDAwKSA9PSAweDM0MDAwMDAwKTsgLy8gb3JpCisKKyAgICAgICAgLyogbHVpICov
CisgICAgICAgICppbnNuID0gKCppbnNuICYgMHhmZmZmMDAwMCkgfCAoKHJlaW50ZXJwcmV0X2Nh
c3Q8aW50cHRyX3Q+KHRvKSA+PiAxNikgJiAweGZmZmYpOworICAgICAgICAvKiBvcmkgKi8KKyAg
ICAgICAgKihpbnNuICsgMSkgPSAoKihpbnNuICsgMSkgJiAweGZmZmYwMDAwKSB8IChyZWludGVy
cHJldF9jYXN0PGludHB0cl90Pih0bykgJiAweGZmZmYpOworICAgICAgICByZXR1cm4gMiAqIHNp
emVvZihNSVBTV29yZCk7CisgICAgfQorCisgICAgQXNzZW1ibGVyQnVmZmVyIG1fYnVmZmVyOwor
ICAgIEp1bXBzIG1fanVtcHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8v
IEVOQUJMRShBU1NFTUJMRVIpICYmIFBMQVRGT1JNKE1JUFMpCisKKyNlbmRpZiAvLyBNSVBTQXNz
ZW1ibGVyX2gKSW5kZXg6IGFzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gNDk5
MjYpCisrKyBhc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNzMsNyArMTczLDcgQEAKICAgICBzdHJ1Y3QgSW1tMzIgewogICAgICAgICBleHBsaWNp
dCBJbW0zMihpbnQzMl90IHZhbHVlKQogICAgICAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQotI2lm
IFBMQVRGT1JNKEFSTSkKKyNpZiBQTEFURk9STShBUk0pIHx8IFBMQVRGT1JNKE1JUFMpCiAgICAg
ICAgICAgICAsIG1faXNQb2ludGVyKGZhbHNlKQogI2VuZGlmCiAgICAgICAgIHsKQEAgLTE4Miw3
ICsxODIsNyBAQAogI2lmICFQTEFURk9STShYODZfNjQpCiAgICAgICAgIGV4cGxpY2l0IEltbTMy
KEltbVB0ciBwdHIpCiAgICAgICAgICAgICA6IG1fdmFsdWUocHRyLmFzSW50cHRyKCkpCi0jaWYg
UExBVEZPUk0oQVJNKQorI2lmIFBMQVRGT1JNKEFSTSkgfHwgUExBVEZPUk0oTUlQUykKICAgICAg
ICAgICAgICwgbV9pc1BvaW50ZXIodHJ1ZSkKICNlbmRpZgogICAgICAgICB7CkBAIC0xOTAsMTMg
KzE5MCwxNCBAQAogI2VuZGlmCiAKICAgICAgICAgaW50MzJfdCBtX3ZhbHVlOwotI2lmIFBMQVRG
T1JNKEFSTSkKKyNpZiBQTEFURk9STShBUk0pIHx8IFBMQVRGT1JNKE1JUFMpCiAgICAgICAgIC8v
IFdlIHJlbHkgb24gYmVpbmcgYWJsZSB0byByZWdlbmVyYXRlIGNvZGUgdG8gcmVjb3ZlciBleGNl
cHRpb24gaGFuZGxpbmcKICAgICAgICAgLy8gaW5mb3JtYXRpb24uICBTaW5jZSBBUk12NyBzdXBw
b3J0cyAxNi1iaXQgaW1tZWRpYXRlcyB0aGVyZSBpcyBhIGRhbmdlcgogICAgICAgICAvLyB0aGF0
IGlmIHBvaW50ZXIgdmFsdWVzIGNoYW5nZSB0aGUgbGF5b3V0IG9mIHRoZSBnZW5lcmF0ZWQgY29k
ZSB3aWxsIGNoYW5nZS4KICAgICAgICAgLy8gVG8gYXZvaWQgdGhpcyBwcm9ibGVtLCBhbHdheXMg
Z2VuZXJhdGUgcG9pbnRlcnMgKGFuZCB0aHVzIEltbTMycyBjb25zdHJ1Y3RlZAogICAgICAgICAv
LyBmcm9tIEltbVB0cnMpIHdpdGggYSBjb2RlIHNlcXVlbmNlIHRoYXQgaXMgYWJsZSAgdG8gcmVw
cmVzZW50ICBhbnkgcG9pbnRlcgogICAgICAgICAvLyB2YWx1ZSAtIGRvbid0IHVzZSBhIG1vcmUg
Y29tcGFjdCBmb3JtIGluIHRoZXNlIGNhc2VzLgorICAgICAgICAvLyBTYW1lIGZvciBNSVBTLgog
ICAgICAgICBib29sIG1faXNQb2ludGVyOwogI2VuZGlmCiAgICAgfTsKSW5kZXg6IGFzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlck1JUFMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBhc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJNSVBTLmgJKHJldmlzaW9uIDApCisrKyBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJNSVBT
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTUyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOSBNSVBTIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIE1JUFMgVEVDSE5PTE9HSUVTLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgTUlQUyBURUNITk9MT0dJRVMs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIE1hY3JvQXNzZW1ibGVyTUlQU19oCisjZGVmaW5lIE1hY3JvQXNzZW1ibGVy
TUlQU19oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShBU1NFTUJM
RVIpICYmIFBMQVRGT1JNKE1JUFMpCisKKyNpbmNsdWRlICJNSVBTQXNzZW1ibGVyLmgiCisjaW5j
bHVkZSAiQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xh
c3MgTWFjcm9Bc3NlbWJsZXJNSVBTIDogcHVibGljIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI8TUlQ
U0Fzc2VtYmxlcj4geworcHVibGljOgorCisgICAgc3RhdGljIGNvbnN0IFNjYWxlIFNjYWxlUHRy
ID0gVGltZXNGb3VyOworCisgICAgLy8gRm9yIHN0b3JpbmcgaW1tZWRpYXRlIG51bWJlcgorICAg
IHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGltbVRlbXBSZWdpc3RlciA9IE1JUFNSZWdpc3RlcnM6
OnQwOworICAgIC8vIEZvciBzdG9yaW5nIGRhdGEgbG9hZGVkIGZyb20gdGhlIG1lbW9yeQorICAg
IHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGRhdGFUZW1wUmVnaXN0ZXIgPSBNSVBTUmVnaXN0ZXJz
Ojp0MTsKKyAgICAvLyBGb3Igc3RvcmluZyBhZGRyZXNzIGJhc2UKKyAgICBzdGF0aWMgY29uc3Qg
UmVnaXN0ZXJJRCBhZGRyVGVtcFJlZ2lzdGVyID0gTUlQU1JlZ2lzdGVyczo6dDI7CisgICAgLy8g
Rm9yIHN0b3JpbmcgY29tcGFyZSByZXN1bHQKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBj
bXBUZW1wUmVnaXN0ZXIgPSBNSVBTUmVnaXN0ZXJzOjp0MzsKKworICAgIC8vIEZQIHRlbXAgcmVn
aXN0ZXIKKyAgICBzdGF0aWMgY29uc3QgRlBSZWdpc3RlcklEIGZwVGVtcFJlZ2lzdGVyID0gTUlQ
U1JlZ2lzdGVyczo6ZjE2OworCisgICAgZW51bSBDb25kaXRpb24geworICAgICAgICBFcXVhbCwK
KyAgICAgICAgTm90RXF1YWwsCisgICAgICAgIEFib3ZlLAorICAgICAgICBBYm92ZU9yRXF1YWws
CisgICAgICAgIEJlbG93LAorICAgICAgICBCZWxvd09yRXF1YWwsCisgICAgICAgIEdyZWF0ZXJU
aGFuLAorICAgICAgICBHcmVhdGVyVGhhbk9yRXF1YWwsCisgICAgICAgIExlc3NUaGFuLAorICAg
ICAgICBMZXNzVGhhbk9yRXF1YWwsCisgICAgICAgIE92ZXJmbG93LAorICAgICAgICBTaWduZWQs
CisgICAgICAgIFplcm8sCisgICAgICAgIE5vblplcm8KKyAgICB9OworCisgICAgZW51bSBEb3Vi
bGVDb25kaXRpb24geworICAgICAgICBEb3VibGVFcXVhbCwKKyAgICAgICAgRG91YmxlR3JlYXRl
clRoYW4sCisgICAgICAgIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCwKKyAgICAgICAgRG91Ymxl
TGVzc1RoYW4sCisgICAgICAgIERvdWJsZUxlc3NUaGFuT3JFcXVhbAorICAgIH07CisKKyAgICBz
dGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBzdGFja1BvaW50ZXJSZWdpc3RlciA9IE1JUFNSZWdpc3Rl
cnM6OnNwOworICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJldHVybkFkZHJlc3NSZWdpc3Rl
ciA9IE1JUFNSZWdpc3RlcnM6OnJhOworCisgICAgLy8gSW50ZWdlciBhcml0aG1ldGljIG9wZXJh
dGlvbnM6CisgICAgLy8KKyAgICAvLyBPcGVyYXRpb25zIGFyZSB0eXBpY2FsbHkgdHdvIG9wZXJh
bmQgLSBvcGVyYXRpb24oc291cmNlLCBzcmNEc3QpCisgICAgLy8gRm9yIG1hbnkgb3BlcmF0aW9u
cyB0aGUgc291cmNlIG1heSBiZSBhbiBJbW0zMiwgdGhlIHNyY0RzdCBvcGVyYW5kCisgICAgLy8g
bWF5IG9mdGVuIGJlIGEgbWVtb3J5IGxvY2F0aW9uIChleHBsaWN0bHkgZGVzY3JpYmVkIHVzaW5n
IGFuIEFkZHJlc3MKKyAgICAvLyBvYmplY3QpLgorCisgICAgdm9pZCBhZGQzMihSZWdpc3RlcklE
IHNyYywgUmVnaXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIuYWRkdShkZXN0LCBkZXN0LCBzcmMpOworICAgIH0KKworICAgIHZvaWQgYWRkMzIo
SW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAg
ICBhZGQzMihpbW0sIGRlc3QsIGRlc3QsIGZpeGVkKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZDMy
KEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0g
MCkKKyAgICB7CisgICAgICAgIGlmICghaW1tLm1faXNQb2ludGVyICYmIGltbS5tX3ZhbHVlID49
IC0zMjc2OCAmJiBpbW0ubV92YWx1ZSA8PSAzMjc2NyAmJiBmaXhlZCA9PSAwKSB7CisgICAgICAg
ICAgICAvKgorICAgICAgICAgICAgICBhZGRpdSAgICAgZGVzdCwgc3JjLCBpbW0KKyAgICAgICAg
ICAgICovCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRpdShkZXN0LCBzcmMsIGltbS5tX3Zh
bHVlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgIGxp
ICAgICAgICBpbW1UZW1wLCBpbW0KKyAgICAgICAgICAgICAgYWRkdSAgICAgIGRlc3QsIHNyYywg
aW1tVGVtcAorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1vdmUoaW1tLCBpbW1UZW1wUmVn
aXN0ZXIsIGZpeGVkKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoZGVzdCwgc3JjLCBp
bW1UZW1wUmVnaXN0ZXIpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBhZGQzMihJbW0z
MiBpbW0sIEFkZHJlc3MgYWRkcmVzcywgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIGlm
IChhZGRyZXNzLm9mZnNldCA+PSAtMzI3NjggJiYgYWRkcmVzcy5vZmZzZXQgPD0gMzI3NjcgJiYg
Zml4ZWQgPT0gMCkgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgbHcgICAgICAgIGRh
dGFUZW1wLCBvZmZzZXQoYmFzZSkKKyAgICAgICAgICAgICAgbGkgICAgICAgIGltbVRlbXAsIGlt
bQorICAgICAgICAgICAgICBhZGR1ICAgICAgZGF0YVRlbXAsIGRhdGFUZW1wLCBpbW1UZW1wCisg
ICAgICAgICAgICAgIHN3ICAgICAgICBkYXRhVGVtcCwgb2Zmc2V0KGJhc2UpCisgICAgICAgICAg
ICAqLworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHcoZGF0YVRlbXBSZWdpc3RlciwgYWRkcmVz
cy5iYXNlLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAgICAgICBpZiAoIWltbS5tX2lzUG9pbnRl
ciAmJiBpbW0ubV92YWx1ZSA+PSAtMzI3NjggJiYgaW1tLm1fdmFsdWUgPD0gMzI3NjcgJiYgZml4
ZWQgPT0gMCkKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRpdShkYXRhVGVtcFJlZ2lz
dGVyLCBkYXRhVGVtcFJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGltbS5tX3ZhbHVlKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG1vdmUo
aW1tLCBpbW1UZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5hZGR1KGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuc3coZGF0YVRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlLCBh
ZGRyZXNzLm9mZnNldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKgorICAgICAg
ICAgICAgICBsdWkgICAgICAgYWRkclRlbXAsIChvZmZzZXQgKyAweDgwMDApID4+IDE2CisgICAg
ICAgICAgICAgIGFkZHUgICAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGJhc2UKKyAgICAgICAgICAg
ICAgbHcgICAgICAgIGRhdGFUZW1wLCAob2Zmc2V0ICYgMHhmZmZmKShhZGRyVGVtcCkKKyAgICAg
ICAgICAgICAgbGkgICAgICAgIGltbXRlbXAsIGltbQorICAgICAgICAgICAgICBhZGR1ICAgICAg
ZGF0YVRlbXAsIGRhdGFUZW1wLCBpbW1UZW1wCisgICAgICAgICAgICAgIHN3ICAgICAgICBkYXRh
VGVtcCwgKG9mZnNldCAmIDB4ZmZmZikoYWRkclRlbXApCisgICAgICAgICAgICAqLworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIubHVpKGFkZHJUZW1wUmVnaXN0ZXIsIChhZGRyZXNzLm9mZnNldCAr
IDB4ODAwMCkgPj4gMTYpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJl
Z2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UpOworICAgICAgICAgICAgbV9h
c3NlbWJsZXIubHcoZGF0YVRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5v
ZmZzZXQpOworCisgICAgICAgICAgICBpZiAoaW1tLm1fdmFsdWUgPj0gLTMyNzY4ICYmIGltbS5t
X3ZhbHVlIDw9IDMyNzY3ICYmIGZpeGVkID09IDApCisgICAgICAgICAgICAgICAgbV9hc3NlbWJs
ZXIuYWRkaXUoZGF0YVRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3RlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbW0ubV92YWx1ZSk7CisgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICBtb3ZlKGltbSwgaW1tVGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAg
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShkYXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJl
Z2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1tVGVtcFJlZ2lzdGVy
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN3KGRhdGFUZW1wUmVn
aXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHZvaWQgYWRkMzIoQWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZp
eGVkID0gMCkKKyAgICB7CisgICAgICAgIGxvYWQzMihzcmMsIGRhdGFUZW1wUmVnaXN0ZXIsIGZp
eGVkKTsKKyAgICAgICAgYWRkMzIoZGF0YVRlbXBSZWdpc3RlciwgZGVzdCwgZml4ZWQpOworICAg
IH0KKworICAgIHZvaWQgYWRkMzIoUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgZGVzdCwgaW50IGZp
eGVkID0gMCkKKyAgICB7CisgICAgICAgIGlmIChkZXN0Lm9mZnNldCA+PSAtMzI3NjggJiYgZGVz
dC5vZmZzZXQgPD0gMzI3NjcgJiYgZml4ZWQgPT0gMCkgeworICAgICAgICAgICAgLyoKKyAgICAg
ICAgICAgICAgbHcgICAgICAgIGRhdGFUZW1wLCBvZmZzZXQoYmFzZSkKKyAgICAgICAgICAgICAg
YWRkdSAgICAgIGRhdGFUZW1wLCBkYXRhVGVtcCwgc3JjCisgICAgICAgICAgICAgIHN3ICAgICAg
ICBkYXRhVGVtcCwgb2Zmc2V0KGJhc2UpCisgICAgICAgICAgICAqLworICAgICAgICAgICAgbV9h
c3NlbWJsZXIubHcoZGF0YVRlbXBSZWdpc3RlciwgZGVzdC5iYXNlLCBkZXN0Lm9mZnNldCk7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVn
aXN0ZXIsIHNyYyk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdyhkYXRhVGVtcFJlZ2lzdGVy
LCBkZXN0LmJhc2UsIGRlc3Qub2Zmc2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IC8qCisgICAgICAgICAgICAgIGx1aSAgICAgICBhZGRyVGVtcCwgKG9mZnNldCArIDB4ODAwMCkg
Pj4gMTYKKyAgICAgICAgICAgICAgYWRkdSAgICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgYmFzZQor
ICAgICAgICAgICAgICBsdyAgICAgICAgZGF0YVRlbXAsIChvZmZzZXQgJiAweGZmZmYpKGFkZHJU
ZW1wKQorICAgICAgICAgICAgICBhZGR1ICAgICAgZGF0YVRlbXAsIGRhdGFUZW1wLCBzcmMKKyAg
ICAgICAgICAgICAgc3cgICAgICAgIGRhdGFUZW1wLCAob2Zmc2V0ICYgMHhmZmZmKShhZGRyVGVt
cCkKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sdWkoYWRkclRlbXBS
ZWdpc3RlciwgKGRlc3Qub2Zmc2V0ICsgMHg4MDAwKSA+PiAxNik7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGRlc3QuYmFz
ZSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sdyhkYXRhVGVtcFJlZ2lzdGVyLCBhZGRyVGVt
cFJlZ2lzdGVyLCBkZXN0Lm9mZnNldCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGRh
dGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsIHNyYyk7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5zdyhkYXRhVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBkZXN0Lm9mZnNl
dCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGFkZDMyKEltbTMyIGltbSwgQWJzb2x1
dGVBZGRyZXNzIGFkZHJlc3MsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICAvKgorICAg
ICAgICAgICBsaSAgIGFkZHJUZW1wLCBhZGRyZXNzCisgICAgICAgICAgIGxpICAgaW1tVGVtcCwg
aW1tCisgICAgICAgICAgIGx3ICAgZGF0YVRlbXAsIDAoYWRkclRlbXApCisgICAgICAgICAgIGFk
ZHUgZGF0YVRlbXAsIGRhdGFUZW1wLCBpbW1UZW1wCisgICAgICAgICAgIHN3ICAgZGF0YVRlbXAs
IDAoYWRkclRlbXApCisgICAgICAgICovCisgICAgICAgIG1vdmUoSW1tUHRyKGFkZHJlc3MubV9w
dHIpLCBhZGRyVGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmx3KGRh
dGFUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIDApOworICAgICAgICBpZiAoIWltbS5t
X2lzUG9pbnRlciAmJiBpbW0ubV92YWx1ZSA+PSAtMzI3NjggJiYgaW1tLm1fdmFsdWUgPD0gMzI3
NjcgJiYgZml4ZWQgPT0gMCkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGl1KGRhdGFUZW1w
UmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsIGltbS5tX3ZhbHVlKTsKKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBtb3ZlKGltbSwgaW1tVGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5hZGR1KGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIs
IGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgIH0KKyAgICAgICAgbV9hc3NlbWJsZXIuc3coZGF0
YVRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgMCk7CisgICAgfQorCisgICAgdm9pZCBh
bmQzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQgPSAwKQorICAg
IHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5kX2luc24oZGVzdCwgZGVzdCwgc3JjKTsKKyAgICB9
CisKKyAgICB2b2lkIGFuZDMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQg
PSAwKQorICAgIHsKKyAgICAgICAgaWYgKCFpbW0ubV9pc1BvaW50ZXIgJiYgaW1tLm1fdmFsdWUg
PT0gMCAmJiBmaXhlZCA9PSAwKQorICAgICAgICAgICAgbW92ZShNSVBTUmVnaXN0ZXJzOjp6ZXJv
LCBkZXN0LCBmaXhlZCk7CisgICAgICAgIGVsc2UgaWYgKCFpbW0ubV9pc1BvaW50ZXIgJiYgaW1t
Lm1fdmFsdWUgPiAwICYmIGltbS5tX3ZhbHVlIDwgNjU1MzUgJiYgZml4ZWQgPT0gMCkKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLmFuZGkoZGVzdCwgZGVzdCwgaW1tLm1fdmFsdWUpOworICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgIGxpICAgICAgICBpbW1UZW1w
LCBpbW0KKyAgICAgICAgICAgICAgYW5kICAgICAgIGRlc3QsIGRlc3QsIGltbVRlbXAKKyAgICAg
ICAgICAgICovCisgICAgICAgICAgICBtb3ZlKGltbSwgaW1tVGVtcFJlZ2lzdGVyLCBmaXhlZCk7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hbmRfaW5zbihkZXN0LCBkZXN0LCBpbW1UZW1wUmVn
aXN0ZXIpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBsc2hpZnQzMihJbW0zMiBpbW0s
IFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLnNsbChkZXN0LCBkZXN0LCBpbW0ubV92YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBsc2hp
ZnQzMihSZWdpc3RlcklEIHNoaWZ0X2Ftb3VudCwgUmVnaXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQg
PSAwKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc2xsdihkZXN0LCBkZXN0LCBzaGlmdF9h
bW91bnQpOworICAgIH0KKworICAgIHZvaWQgbXVsMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVy
SUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm11bChk
ZXN0LCBkZXN0LCBzcmMpOworICAgIH0KKworICAgIHZvaWQgbXVsMzIoSW1tMzIgaW1tLCBSZWdp
c3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAg
ICAgaWYgKCFpbW0ubV9pc1BvaW50ZXIgJiYgaW1tLm1fdmFsdWUgPT0gMCAmJiBmaXhlZCA9PSAw
KQorICAgICAgICAgICAgbW92ZShNSVBTUmVnaXN0ZXJzOjp6ZXJvLCBkZXN0LCBmaXhlZCk7Cisg
ICAgICAgIGVsc2UgaWYgKCFpbW0ubV9pc1BvaW50ZXIgJiYgaW1tLm1fdmFsdWUgPT0gMSAmJiBm
aXhlZCA9PSAwKQorICAgICAgICAgICAgbW92ZShzcmMsIGRlc3QsIGZpeGVkKTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgIGxpICAgICAgZGF0YVRlbXAs
IGltbQorICAgICAgICAgICAgICAgIG11bCAgICAgZGVzdCwgc3JjLCBkYXRhVGVtcAorICAgICAg
ICAgICAgKi8KKyAgICAgICAgICAgIG1vdmUoaW1tLCBkYXRhVGVtcFJlZ2lzdGVyLCBmaXhlZCk7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tdWwoZGVzdCwgc3JjLCBkYXRhVGVtcFJlZ2lzdGVy
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgbm90MzIoUmVnaXN0ZXJJRCBzcmNEZXN0
LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9yKHNyY0Rlc3Qs
IHNyY0Rlc3QsIE1JUFNSZWdpc3RlcnM6Onplcm8pOworICAgIH0KKworICAgIHZvaWQgb3IzMihS
ZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIub3JfaW5zbihkZXN0LCBkZXN0LCBzcmMpOworICAgIH0KKworICAg
IHZvaWQgb3IzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAg
ICB7CisgICAgICAgIGlmICghaW1tLm1faXNQb2ludGVyICYmIGltbS5tX3ZhbHVlID09IDAgJiYg
Zml4ZWQgPT0gMCkKKyAgICAgICAgICAgIDsKKyAgICAgICAgZWxzZSBpZiAoIWltbS5tX2lzUG9p
bnRlciAmJiBpbW0ubV92YWx1ZSA+IDAgJiYgaW1tLm1fdmFsdWUgPCA2NTUzNSAmJiBmaXhlZCA9
PSAwKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIub3JpKGRlc3QsIGRlc3QsIGltbS5tX3ZhbHVl
KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgIGxpICAg
ICAgZGF0YVRlbXAsIGltbQorICAgICAgICAgICAgICAgIG9yICAgICAgZGVzdCwgZGVzdCwgZGF0
YVRlbXAKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBtb3ZlKGltbSwgZGF0YVRlbXBSZWdp
c3RlciwgZml4ZWQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIub3JfaW5zbihkZXN0LCBkZXN0
LCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgcnNoaWZ0
MzIoUmVnaXN0ZXJJRCBzaGlmdF9hbW91bnQsIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0g
MCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnNyYXYoZGVzdCwgZGVzdCwgc2hpZnRfYW1v
dW50KTsKKyAgICB9CisKKyAgICB2b2lkIHJzaGlmdDMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBk
ZXN0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3JhKGRlc3Qs
IGRlc3QsIGltbS5tX3ZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkIHN1YjMyKFJlZ2lzdGVySUQg
c3JjLCBSZWdpc3RlcklEIGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5zdWJ1KGRlc3QsIGRlc3QsIHNyYyk7CisgICAgfQorCisgICAgdm9pZCBzdWIzMihJ
bW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAg
IGlmICghaW1tLm1faXNQb2ludGVyICYmIGltbS5tX3ZhbHVlID49IC0zMjc2NyAmJiBpbW0ubV92
YWx1ZSA8PSAzMjc2OCAmJiBmaXhlZCA9PSAwKSB7CisgICAgICAgICAgICAvKgorICAgICAgICAg
ICAgICBhZGRpdSAgICAgZGVzdCwgc3JjLCBpbW0KKyAgICAgICAgICAgICovCisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5hZGRpdShkZXN0LCBkZXN0LCAtaW1tLm1fdmFsdWUpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgbGkgICAgICAgIGltbVRlbXAs
IGltbQorICAgICAgICAgICAgICBzdWJ1ICAgICAgZGVzdCwgc3JjLCBpbW1UZW1wCisgICAgICAg
ICAgICAqLworICAgICAgICAgICAgbW92ZShpbW0sIGltbVRlbXBSZWdpc3RlciwgZml4ZWQpOwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3VidShkZXN0LCBkZXN0LCBpbW1UZW1wUmVnaXN0ZXIp
OworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBzdWIzMihJbW0zMiBpbW0sIEFkZHJlc3Mg
YWRkcmVzcywgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIGlmIChhZGRyZXNzLm9mZnNl
dCA+PSAtMzI3NjggJiYgYWRkcmVzcy5vZmZzZXQgPD0gMzI3NjcgJiYgZml4ZWQgPT0gMCkgewor
ICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgbHcgICAgICAgIGRhdGFUZW1wLCBvZmZzZXQo
YmFzZSkKKyAgICAgICAgICAgICAgbGkgICAgICAgIGltbVRlbXAsIGltbQorICAgICAgICAgICAg
ICBzdWJ1ICAgICAgZGF0YVRlbXAsIGRhdGFUZW1wLCBpbW1UZW1wCisgICAgICAgICAgICAgIHN3
ICAgICAgICBkYXRhVGVtcCwgb2Zmc2V0KGJhc2UpCisgICAgICAgICAgICAqLworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIubHcoZGF0YVRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlLCBhZGRyZXNz
Lm9mZnNldCk7CisgICAgICAgICAgICBpZiAoIWltbS5tX2lzUG9pbnRlciAmJiBpbW0ubV92YWx1
ZSA+PSAtMzI3NjcgJiYgaW1tLm1fdmFsdWUgPD0gMzI3NjggJiYgZml4ZWQgPT0gMCkKKyAgICAg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRpdShkYXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJl
Z2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1pbW0ubV92YWx1ZSk7
CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBtb3ZlKGltbSwgaW1tVGVtcFJl
Z2lzdGVyLCBmaXhlZCk7CisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3VidShkYXRhVGVt
cFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLnN3KGRhdGFUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5vZmZzZXQp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgbHVpICAg
ICAgIGFkZHJUZW1wLCAob2Zmc2V0ICsgMHg4MDAwKSA+PiAxNgorICAgICAgICAgICAgICBhZGR1
ICAgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBiYXNlCisgICAgICAgICAgICAgIGx3ICAgICAgICBk
YXRhVGVtcCwgKG9mZnNldCAmIDB4ZmZmZikoYWRkclRlbXApCisgICAgICAgICAgICAgIGxpICAg
ICAgICBpbW10ZW1wLCBpbW0KKyAgICAgICAgICAgICAgc3VidSAgICAgIGRhdGFUZW1wLCBkYXRh
VGVtcCwgaW1tVGVtcAorICAgICAgICAgICAgICBzdyAgICAgICAgZGF0YVRlbXAsIChvZmZzZXQg
JiAweGZmZmYpKGFkZHJUZW1wKQorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLmx1aShhZGRyVGVtcFJlZ2lzdGVyLCAoYWRkcmVzcy5vZmZzZXQgKyAweDgwMDApID4+IDE2
KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRl
bXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx3KGRh
dGFUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKworICAg
ICAgICAgICAgaWYgKCFpbW0ubV9pc1BvaW50ZXIgJiYgaW1tLm1fdmFsdWUgPj0gLTMyNzY3ICYm
IGltbS5tX3ZhbHVlIDw9IDMyNzY4ICYmIGZpeGVkID09IDApCisgICAgICAgICAgICAgICAgbV9h
c3NlbWJsZXIuYWRkaXUoZGF0YVRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3RlciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtaW1tLm1fdmFsdWUpOworICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgbW92ZShpbW0sIGltbVRlbXBSZWdpc3RlciwgZml4ZWQp
OworICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN1YnUoZGF0YVRlbXBSZWdpc3RlciwgZGF0
YVRlbXBSZWdpc3RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltbVRlbXBS
ZWdpc3Rlcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdyhkYXRh
VGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICB2b2lkIHN1YjMyKEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3Qs
IGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBsb2FkMzIoc3JjLCBkYXRhVGVtcFJlZ2lz
dGVyLCBmaXhlZCk7CisgICAgICAgIHN1YjMyKGRhdGFUZW1wUmVnaXN0ZXIsIGRlc3QsIGZpeGVk
KTsKKyAgICB9CisKKyAgICB2b2lkIHN1YjMyKEltbTMyIGltbSwgQWJzb2x1dGVBZGRyZXNzIGFk
ZHJlc3MsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICAvKgorICAgICAgICAgICBsaSAg
IGFkZHJUZW1wLCBhZGRyZXNzCisgICAgICAgICAgIGxpICAgaW1tVGVtcCwgaW1tCisgICAgICAg
ICAgIGx3ICAgZGF0YVRlbXAsIDAoYWRkclRlbXApCisgICAgICAgICAgIHN1YnUgZGF0YVRlbXAs
IGRhdGFUZW1wLCBpbW1UZW1wCisgICAgICAgICAgIHN3ICAgZGF0YVRlbXAsIDAoYWRkclRlbXAp
CisgICAgICAgICovCisgICAgICAgIG1vdmUoSW1tUHRyKGFkZHJlc3MubV9wdHIpLCBhZGRyVGVt
cFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmx3KGRhdGFUZW1wUmVnaXN0
ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIDApOworCisgICAgICAgIGlmICghaW1tLm1faXNQb2ludGVy
ICYmIGltbS5tX3ZhbHVlID49IC0zMjc2NyAmJiBpbW0ubV92YWx1ZSA8PSAzMjc2OCAmJiBmaXhl
ZCA9PSAwKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRpdShkYXRhVGVtcFJlZ2lzdGVy
LCBkYXRhVGVtcFJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWltbS5t
X3ZhbHVlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1vdmUoaW1tLCBpbW1UZW1w
UmVnaXN0ZXIsIGZpeGVkKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN1YnUoZGF0YVRlbXBS
ZWdpc3RlciwgZGF0YVRlbXBSZWdpc3RlciwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgfQor
ICAgICAgICBtX2Fzc2VtYmxlci5zdyhkYXRhVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVy
LCAwKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklE
IGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci54b3JfaW5z
bihkZXN0LCBkZXN0LCBzcmMpOworICAgIH0KKworICAgIHZvaWQgeG9yMzIoSW1tMzIgaW1tLCBS
ZWdpc3RlcklEIGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICAvKgorICAgICAg
ICAgICAgbGkgIGltbVRlbXAsIGltbQorICAgICAgICAgICAgeG9yIGRlc3QsIGRlc3QsIGltbVRl
bXAKKyAgICAgICAgKi8KKyAgICAgICAgbW92ZShpbW0sIGltbVRlbXBSZWdpc3RlciwgZml4ZWQp
OworICAgICAgICBtX2Fzc2VtYmxlci54b3JfaW5zbihkZXN0LCBkZXN0LCBpbW1UZW1wUmVnaXN0
ZXIpOworICAgIH0KKworICAgIC8vIE1lbW9yeSBhY2Nlc3Mgb3BlcmF0aW9uczoKKyAgICAvLwor
ICAgIC8vIExvYWRzIGFyZSBvZiB0aGUgZm9ybSBsb2FkKGFkZHJlc3MsIGRlc3RpbmF0aW9uKSBh
bmQgc3RvcmVzIG9mIHRoZSBmb3JtCisgICAgLy8gc3RvcmUoc291cmNlLCBhZGRyZXNzKS4gIFRo
ZSBzb3VyY2UgZm9yIGEgc3RvcmUgbWF5IGJlIGFuIEltbTMyLiAgQWRkcmVzcworICAgIC8vIG9w
ZXJhbmQgb2JqZWN0cyB0byBsb2FkcyBhbmQgc3RvcmUgd2lsbCBiZSBpbXBsaWNpdGx5IGNvbnN0
cnVjdGVkIGlmIGEKKyAgICAvLyByZWdpc3RlciBpcyBwYXNzZWQuCisKKyAgICB2b2lkIGxvYWQz
MihJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQgPSAw
KQorICAgIHsKKyAgICAgICAgaWYgKGFkZHJlc3Mub2Zmc2V0ID49IC0zMjc2OCAmJiBhZGRyZXNz
Lm9mZnNldCA8PSAzMjc2NyAmJiBmaXhlZCA9PSAwKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIu
bHcoZGVzdCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICBsdWkgICAgIGFkZHJUZW1wLCAob2Zmc2V0
ICsgMHg4MDAwKSA+PiAxNgorICAgICAgICAgICAgICAgIGFkZHUgICAgYWRkclRlbXAsIGFkZHJU
ZW1wLCBiYXNlCisgICAgICAgICAgICAgICAgbHcgICAgICBkZXN0LCAob2Zmc2V0ICYgMHhmZmZm
KShhZGRyVGVtcCkKKyAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx1
aShhZGRyVGVtcFJlZ2lzdGVyLCAoYWRkcmVzcy5vZmZzZXQgKyAweDgwMDApID4+IDE2KTsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdp
c3RlciwgYWRkcmVzcy5iYXNlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx3KGRlc3QsIGFk
ZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHZvaWQgbG9hZDMyKEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QsIGludCBmaXhl
ZCA9IDApCisgICAgeworICAgICAgICBpZiAoYWRkcmVzcy5vZmZzZXQgPj0gLTMyNzY4ICYmIGFk
ZHJlc3Mub2Zmc2V0IDw9IDMyNzY3ICYmIGZpeGVkID09IDApIHsKKyAgICAgICAgICAgIC8qCisg
ICAgICAgICAgICAgICAgc2xsICAgICBhZGRyVGVtcCwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5z
Y2FsZQorICAgICAgICAgICAgICAgIGFkZHUgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBhZGRyZXNz
LmJhc2UKKyAgICAgICAgICAgICAgICBsdyAgICAgIGRlc3QsIGFkZHJlc3Mub2Zmc2V0KGFkZHJU
ZW1wKQorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsbChhZGRyVGVt
cFJlZ2lzdGVyLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVz
cy5iYXNlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx3KGRlc3QsIGFkZHJUZW1wUmVnaXN0
ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qCisg
ICAgICAgICAgICAgICAgc2xsICAgICBhZGRyVGVtcCwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5z
Y2FsZQorICAgICAgICAgICAgICAgIGFkZHUgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBhZGRyZXNz
LmJhc2UKKyAgICAgICAgICAgICAgICBsdWkgICAgIGltbVRlbXAsIChhZGRyZXNzLm9mZnNldCAr
IDB4ODAwMCkgPj4gMTYKKyAgICAgICAgICAgICAgICBhZGR1ICAgIGFkZHJUZW1wLCBhZGRyVGVt
cCwgaW1tVGVtcAorICAgICAgICAgICAgICAgIGx3ICAgICAgZGVzdCwgKGFkZHJlc3Mub2Zmc2V0
ICYgMHhmZmZmKShhdCkKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5z
bGwoYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0
ZXIsIGFkZHJlc3MuYmFzZSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sdWkoaW1tVGVtcFJl
Z2lzdGVyLCAoYWRkcmVzcy5vZmZzZXQgKyAweDgwMDApID4+IDE2KTsKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLmx3KGRlc3QsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHZvaWQgbG9hZDMyV2l0aFVuYWxpZ25lZEhhbGZXb3JkcyhC
YXNlSW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsK
KyAgICAgICAgaWYgKGFkZHJlc3Mub2Zmc2V0ID49IC0zMjc2OCAmJiBhZGRyZXNzLm9mZnNldCA8
PSAzMjc2NCAmJiBmaXhlZCA9PSAwKSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAg
IHNsbCAgICAgYWRkclRlbXAsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUKKyAgICAgICAg
ICAgICAgICBhZGR1ICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgYWRkcmVzcy5iYXNlCisgICAgICAg
ICAgICAgICAgKEJpZy1FbmRpYW4pCisgICAgICAgICAgICAgICAgbHdsICAgICBkZXN0LCBhZGRy
ZXNzLm9mZnNldChhZGRyVGVtcCkKKyAgICAgICAgICAgICAgICBsd3IgICAgIGRlc3QsIGFkZHJl
c3Mub2Zmc2V0KzMoYWRkclRlbXApCisgICAgICAgICAgICAgICAgKExpdHRsZS1FbmRpYW4pCisg
ICAgICAgICAgICAgICAgbHdsICAgICBkZXN0LCBhZGRyZXNzLm9mZnNldCszKGFkZHJUZW1wKQor
ICAgICAgICAgICAgICAgIGx3ciAgICAgZGVzdCwgYWRkcmVzcy5vZmZzZXQoYWRkclRlbXApCisg
ICAgICAgICAgICAqLworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2xsKGFkZHJUZW1wUmVnaXN0
ZXIsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2Up
OworI2lmIGRlZmluZWQoX19NSVBTRUJfXykKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx3bChk
ZXN0LCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5sd3IoZGVzdCwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQgKyAzKTsK
KyNlbHNlCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sd2woZGVzdCwgYWRkclRlbXBSZWdpc3Rl
ciwgYWRkcmVzcy5vZmZzZXQgKyAzKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx3cihkZXN0
LCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCk7CisKKyNlbmRpZgorICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICBzbGwgICAgIGFkZHJUZW1w
LCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlCisgICAgICAgICAgICAgICAgYWRkdSAgICBh
ZGRyVGVtcCwgYWRkclRlbXAsIGFkZHJlc3MuYmFzZQorICAgICAgICAgICAgICAgIGx1aSAgICAg
aW1tVGVtcCwgYWRkcmVzcy5vZmZzZXQgPj4gMTYKKyAgICAgICAgICAgICAgICBvcmkgICAgIGlt
bVRlbXAsIGltbVRlbXAsIGFkZHJlc3Mub2Zmc2V0ICYgMHhmZmZmCisgICAgICAgICAgICAgICAg
YWRkdSAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGltbVRlbXAKKyAgICAgICAgICAgICAgICAoQmln
LUVuZGlhbikKKyAgICAgICAgICAgICAgICBsdyAgICAgIGRlc3QsIDAoYXQpCisgICAgICAgICAg
ICAgICAgbHcgICAgICBkZXN0LCAzKGF0KQorICAgICAgICAgICAgICAgIChMaXR0bGUtRW5kaWFu
KQorICAgICAgICAgICAgICAgIGx3ICAgICAgZGVzdCwgMyhhdCkKKyAgICAgICAgICAgICAgICBs
dyAgICAgIGRlc3QsIDAoYXQpCisgICAgICAgICAgICAqLworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIuc2xsKGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJl
Z2lzdGVyLCBhZGRyZXNzLmJhc2UpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHVpKGltbVRl
bXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQgPj4gMTYpOworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIub3JpKGltbVRlbXBSZWdpc3RlciwgaW1tVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCk7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1w
UmVnaXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltbVRlbXBSZWdpc3Rlcik7
CisjaWYgZGVmaW5lZChfX01JUFNFQl9fKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubHdsKGRl
c3QsIGFkZHJUZW1wUmVnaXN0ZXIsIDApOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHdyKGRl
c3QsIGFkZHJUZW1wUmVnaXN0ZXIsIDMpOworI2Vsc2UKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
Lmx3bChkZXN0LCBhZGRyVGVtcFJlZ2lzdGVyLCAzKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
Lmx3cihkZXN0LCBhZGRyVGVtcFJlZ2lzdGVyLCAwKTsKKyNlbmRpZgorICAgICAgICB9CisgICAg
fQorCisgICAgdm9pZCBsb2FkMzIodm9pZCogYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0LCBpbnQg
Zml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICAgIGxpICBhZGRyVGVtcCwg
YWRkcmVzcworICAgICAgICAgICAgbHcgIGRlc3QsIDAoYWRkclRlbXApCisgICAgICAgICovCisg
ICAgICAgIG1vdmUoSW1tUHRyKGFkZHJlc3MpLCBhZGRyVGVtcFJlZ2lzdGVyLCBmaXhlZCk7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmx3KGRlc3QsIGFkZHJUZW1wUmVnaXN0ZXIsIDApOworICAgIH0K
KworICAgIERhdGFMYWJlbDMyIGxvYWQzMldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goQWRkcmVzcyBh
ZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpbnQgZml4ZWQgPSAxOwor
ICAgICAgICAvKgorICAgICAgICAgICAgbHVpIGFkZHJUZW1wLCBhZGRyZXNzLm9mZnNldCA+PiAx
NgorICAgICAgICAgICAgb3JpIGFkZHJUZW1wLCBhZGRyVGVtcCwgYWRkcmVzcy5vZmZzZXQgJiAw
eGZmZmYKKyAgICAgICAgICAgIGFkZHUgICAgICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgYWRkcmVz
cy5iYXNlCisgICAgICAgICAgICBsdyAgZGVzdCwgMChhZGRyVGVtcCkKKyAgICAgICAgKi8KKyAg
ICAgICAgRGF0YUxhYmVsMzIgZGF0YUxhYmVsKHRoaXMpOworICAgICAgICBtb3ZlKEltbTMyKGFk
ZHJlc3Mub2Zmc2V0KSwgYWRkclRlbXBSZWdpc3RlciwgZml4ZWQpOworICAgICAgICBtX2Fzc2Vt
Ymxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFz
ZSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmx3KGRlc3QsIGFkZHJUZW1wUmVnaXN0ZXIsIDApOwor
ICAgICAgICByZXR1cm4gZGF0YUxhYmVsOworICAgIH0KKworICAgIExhYmVsIGxvYWRQdHJXaXRo
UGF0Y2hUb0xFQShBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIGludCBmaXhlZCA9IDE7CisgICAgICAgIC8qCisgICAgICAgICAgICBsdWkgICAgICAgICBh
ZGRyVGVtcCwgYWRkcmVzcy5vZmZzZXQgPj4gMTYKKyAgICAgICAgICAgIG9yaSAgICAgICAgIGFk
ZHJUZW1wLCBhZGRyVGVtcCwgYWRkcmVzcy5vZmZzZXQgJiAweGZmZmYKKyAgICAgICAgICAgIGFk
ZHUgICAgICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgYWRkcmVzcy5iYXNlCisgICAgICAgICAgICBs
dyAgICAgICAgICBkZXN0LCAwKGFkZHJUZW1wKQorICAgICAgICAqLworICAgICAgICBMYWJlbCBs
YWJlbCh0aGlzKTsKKyAgICAgICAgbW92ZShJbW0zMihhZGRyZXNzLm9mZnNldCksIGFkZHJUZW1w
UmVnaXN0ZXIsIGZpeGVkKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lz
dGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UpOworICAgICAgICBtX2Fzc2VtYmxl
ci5sdyhkZXN0LCBhZGRyVGVtcFJlZ2lzdGVyLCAwKTsKKyAgICAgICAgcmV0dXJuIGxhYmVsOwor
ICAgIH0KKworICAgIExhYmVsIGxvYWRQdHJXaXRoQWRkcmVzc09mZnNldFBhdGNoKEFkZHJlc3Mg
YWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGxvYWRQdHJX
aXRoUGF0Y2hUb0xFQShhZGRyZXNzLCBkZXN0KTsKKyAgICB9CisKKyAgICAvKiBOZWVkIHRvIHVz
ZSB6ZXJvLWV4dGVuZWQgbG9hZCBoYWxmLXdvcmQgZm9yIGxvYWQxNi4gICovCisgICAgdm9pZCBs
b2FkMTYoQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkK
KyAgICB7CisgICAgICAgIGlmIChhZGRyZXNzLm9mZnNldCA+PSAtMzI3NjggJiYgYWRkcmVzcy5v
ZmZzZXQgPD0gMzI3NjcgJiYgZml4ZWQgPT0gMCkgeworICAgICAgICAgICAgLyoKKyAgICAgICAg
ICAgICAgICBzbGwgICAgIGFkZHJUZW1wLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlCisg
ICAgICAgICAgICAgICAgYWRkdSAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGFkZHJlc3MuYmFzZQor
ICAgICAgICAgICAgICAgIGxodSAgICAgZGVzdCwgYWRkcmVzcy5vZmZzZXQoYWRkclRlbXApCisg
ICAgICAgICAgICAqLworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2xsKGFkZHJUZW1wUmVnaXN0
ZXIsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2Up
OworICAgICAgICAgICAgbV9hc3NlbWJsZXIubGh1KGRlc3QsIGFkZHJUZW1wUmVnaXN0ZXIsIGFk
ZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qCisgICAgICAg
ICAgICAgICAgc2xsICAgICBhZGRyVGVtcCwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZQor
ICAgICAgICAgICAgICAgIGFkZHUgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBhZGRyZXNzLmJhc2UK
KyAgICAgICAgICAgICAgICBsdWkgICAgIGltbVRlbXAsIChhZGRyZXNzLm9mZnNldCArIDB4ODAw
MCkgPj4gMTYKKyAgICAgICAgICAgICAgICBhZGR1ICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgaW1t
VGVtcAorICAgICAgICAgICAgICAgIGxodSAgICAgZGVzdCwgKGFkZHJlc3Mub2Zmc2V0ICYgMHhm
ZmZmKShhZGRyVGVtcCkKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5z
bGwoYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0
ZXIsIGFkZHJlc3MuYmFzZSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sdWkoaW1tVGVtcFJl
Z2lzdGVyLCAoYWRkcmVzcy5vZmZzZXQgKyAweDgwMDApID4+IDE2KTsKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLmxodShkZXN0LCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBEYXRhTGFiZWwzMiBzdG9yZTMyV2l0aEFkZHJlc3NPZmZz
ZXRQYXRjaChSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAg
aW50IGZpeGVkID0gMTsKKyAgICAgICAgLyoKKyAgICAgICAgICAgIGx1aSBhZGRyVGVtcCwgYWRk
cmVzcy5vZmZzZXQgPj4gMTYKKyAgICAgICAgICAgIG9yaSBhZGRyVGVtcCwgYWRkclRlbXAsIGFk
ZHJlc3Mub2Zmc2V0ICYgMHhmZmZmCisgICAgICAgICAgICBhZGR1ICAgICAgICBhZGRyVGVtcCwg
YWRkclRlbXAsIGFkZHJlc3MuYmFzZQorICAgICAgICAgICAgc3cgIHNyYywgMChhZGRyVGVtcCkK
KyAgICAgICAgKi8KKyAgICAgICAgRGF0YUxhYmVsMzIgZGF0YUxhYmVsKHRoaXMpOworICAgICAg
ICBtb3ZlKEltbTMyKGFkZHJlc3Mub2Zmc2V0KSwgYWRkclRlbXBSZWdpc3RlciwgZml4ZWQpOwor
ICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0
ZXIsIGFkZHJlc3MuYmFzZSk7CisgICAgICAgIG1fYXNzZW1ibGVyLnN3KHNyYywgYWRkclRlbXBS
ZWdpc3RlciwgMCk7CisgICAgICAgIHJldHVybiBkYXRhTGFiZWw7CisgICAgfQorCisgICAgdm9p
ZCBzdG9yZTMyKFJlZ2lzdGVySUQgc3JjLCBJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcywgaW50IGZp
eGVkID0gMCkKKyAgICB7CisgICAgICAgIGlmIChhZGRyZXNzLm9mZnNldCA+PSAtMzI3NjggJiYg
YWRkcmVzcy5vZmZzZXQgPD0gMzI3NjcgJiYgZml4ZWQgPT0gMCkKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLnN3KHNyYywgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICBsdWkgICAgIGFkZHJUZW1wLCAo
b2Zmc2V0ICsgMHg4MDAwKSA+PiAxNgorICAgICAgICAgICAgICAgIGFkZHUgICAgYWRkclRlbXAs
IGFkZHJUZW1wLCBiYXNlCisgICAgICAgICAgICAgICAgc3cgICAgICBzcmMsIChvZmZzZXQgJiAw
eGZmZmYpKGFkZHJUZW1wKQorICAgICAgICAgICAgICAqLworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIubHVpKGFkZHJUZW1wUmVnaXN0ZXIsIChhZGRyZXNzLm9mZnNldCArIDB4ODAwMCkgPj4gMTYp
OworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVt
cFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3coc3Jj
LCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICB2b2lkIHN0b3JlMzIoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBhZGRyZXNzLCBpbnQg
Zml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgaWYgKGFkZHJlc3Mub2Zmc2V0ID49IC0zMjc2OCAm
JiBhZGRyZXNzLm9mZnNldCA8PSAzMjc2NyAmJiBmaXhlZCA9PSAwKSB7CisgICAgICAgICAgICAv
KgorICAgICAgICAgICAgICAgIHNsbCAgICAgYWRkclRlbXAsIGFkZHJlc3MuaW5kZXgsIGFkZHJl
c3Muc2NhbGUKKyAgICAgICAgICAgICAgICBhZGR1ICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgYWRk
cmVzcy5iYXNlCisgICAgICAgICAgICAgICAgc3cgICAgICBzcmMsIGFkZHJlc3Mub2Zmc2V0KGFk
ZHJUZW1wKQorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsbChhZGRy
VGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRk
cmVzcy5iYXNlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN3KHNyYywgYWRkclRlbXBSZWdp
c3RlciwgYWRkcmVzcy5vZmZzZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyoK
KyAgICAgICAgICAgICAgICBzbGwgICAgIGFkZHJUZW1wLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNz
LnNjYWxlCisgICAgICAgICAgICAgICAgYWRkdSAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGFkZHJl
c3MuYmFzZQorICAgICAgICAgICAgICAgIGx1aSAgICAgaW1tVGVtcCwgKGFkZHJlc3Mub2Zmc2V0
ICsgMHg4MDAwKSA+PiAxNgorICAgICAgICAgICAgICAgIGFkZHUgICAgYWRkclRlbXAsIGFkZHJU
ZW1wLCBpbW1UZW1wCisgICAgICAgICAgICAgICAgc3cgICAgICBzcmMsIChhZGRyZXNzLm9mZnNl
dCAmIDB4ZmZmZikoYXQpCisgICAgICAgICAgICAqLworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
c2xsKGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lz
dGVyLCBhZGRyZXNzLmJhc2UpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHVpKGltbVRlbXBS
ZWdpc3RlciwgKGFkZHJlc3Mub2Zmc2V0ICsgMHg4MDAwKSA+PiAxNik7CisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5zdyhzcmMsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHZvaWQgc3RvcmUzMihJbW0zMiBpbW0sIEltcGxpY2l0QWRk
cmVzcyBhZGRyZXNzLCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgaWYgKGFkZHJlc3Mu
b2Zmc2V0ID49IC0zMjc2OCAmJiBhZGRyZXNzLm9mZnNldCA8PSAzMjc2NyAmJiBmaXhlZCA9PSAw
KSB7CisgICAgICAgICAgICBpZiAoIWltbS5tX2lzUG9pbnRlciAmJiBpbW0ubV92YWx1ZSA9PSAw
KQorICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN3KE1JUFNSZWdpc3RlcnM6Onplcm8sIGFk
ZHJlc3MuYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzLm9mZnNl
dCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBtb3ZlKGltbSwgaW1tVGVt
cFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3coaW1tVGVt
cFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgbHVpICAg
ICBhZGRyVGVtcCwgKG9mZnNldCArIDB4ODAwMCkgPj4gMTYKKyAgICAgICAgICAgICAgICBhZGR1
ICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgYmFzZQorICAgICAgICAgICAgICAgIHN3ICAgICAgaW1t
VGVtcCwgKG9mZnNldCAmIDB4ZmZmZikoYWRkclRlbXApCisgICAgICAgICAgICAgICovCisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5sdWkoYWRkclRlbXBSZWdpc3RlciwgKGFkZHJlc3Mub2Zmc2V0
ICsgMHg4MDAwKSA+PiAxNik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1w
UmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSk7CisgICAgICAgICAgICBp
ZiAoIWltbS5tX2lzUG9pbnRlciAmJiBpbW0ubV92YWx1ZSA9PSAwICYmIGZpeGVkID09IDApCisg
ICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3coTUlQU1JlZ2lzdGVyczo6emVybywgYWRkclRl
bXBSZWdpc3RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzLm9mZnNl
dCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBtb3ZlKGltbSwgaW1tVGVt
cFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3coaW1tVGVt
cFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHZvaWQgc3RvcmUzMihSZWdpc3RlcklEIHNyYywgdm9pZCogYWRkcmVzcywgaW50IGZpeGVk
ID0gMCkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAgICBsaSAgYWRkclRlbXAsIGFkZHJl
c3MKKyAgICAgICAgICAgIHN3ICBzcmMsIDAoYWRkclRlbXApCisgICAgICAgICovCisgICAgICAg
IG1vdmUoSW1tUHRyKGFkZHJlc3MpLCBhZGRyVGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgICAg
IG1fYXNzZW1ibGVyLnN3KHNyYywgYWRkclRlbXBSZWdpc3RlciwgMCk7CisgICAgfQorCisgICAg
dm9pZCBzdG9yZTMyKEltbTMyIGltbSwgdm9pZCogYWRkcmVzcywgaW50IGZpeGVkID0gMCkKKyAg
ICB7CisgICAgICAgIC8qCisgICAgICAgICAgICBsaSAgaW1tVGVtcCwgaW1tCisgICAgICAgICAg
ICBsaSAgYWRkclRlbXAsIGFkZHJlc3MKKyAgICAgICAgICAgIHN3ICBzcmMsIDAoYWRkclRlbXAp
CisgICAgICAgICovCisgICAgICAgIGlmICghaW1tLm1faXNQb2ludGVyICYmIGltbS5tX3ZhbHVl
ID09IDAgJiYgZml4ZWQgPT0gMCkgeworICAgICAgICAgICAgbW92ZShJbW1QdHIoYWRkcmVzcyks
IGFkZHJUZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN3KE1J
UFNSZWdpc3RlcnM6Onplcm8sIGFkZHJUZW1wUmVnaXN0ZXIsIDApOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgbW92ZShpbW0sIGltbVRlbXBSZWdpc3RlciwgZml4ZWQpOworICAgICAg
ICAgICAgbW92ZShJbW1QdHIoYWRkcmVzcyksIGFkZHJUZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLnN3KGltbVRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3Rl
ciwgMCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBGbG9hdGluZy1wb2ludCBvcGVyYXRp
b25zOgorCisgICAgYm9vbCBzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSBjb25zdAorICAgIHsKKyNp
ZiBkZWZpbmVkKF9fbWlwc19oYXJkX2Zsb2F0KSAmJiAhZGVmaW5lZChfX21pcHNfc2luZ2xlX2Zs
b2F0KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyNlbmRpZgorICAgIH0KKworICAgIGJvb2wgc3VwcG9ydHNGbG9hdGluZ1BvaW50VHJ1bmNhdGUo
KSBjb25zdAorICAgIHsKKyNpZiBkZWZpbmVkKF9fbWlwc19oYXJkX2Zsb2F0KSAmJiAhZGVmaW5l
ZChfX21pcHNfc2luZ2xlX2Zsb2F0KSAmJiAoX19taXBzID4gMSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisjZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKyAgICB9CisKKyAgICAv
LyBTdGFjayBtYW5pcHVsYXRpb24gb3BlcmF0aW9uczoKKyAgICAvLworICAgIC8vIFRoZSBBQkkg
aXMgYXNzdW1lZCB0byBwcm92aWRlIGEgc3RhY2sgYWJzdHJhY3Rpb24gdG8gbWVtb3J5LAorICAg
IC8vIGNvbnRhaW5pbmcgbWFjaGluZSB3b3JkIHNpemVkIHVuaXRzIG9mIGRhdGEuICBQdXNoIGFu
ZCBwb3AKKyAgICAvLyBvcGVyYXRpb25zIGFkZCBhbmQgcmVtb3ZlIGEgc2luZ2xlIHJlZ2lzdGVy
IHNpemVkIHVuaXQgb2YgZGF0YQorICAgIC8vIHRvIG9yIGZyb20gdGhlIHN0YWNrLiAgUGVlayBh
bmQgcG9rZSBvcGVyYXRpb25zIHJlYWQgb3Igd3JpdGUKKyAgICAvLyB2YWx1ZXMgb24gdGhlIHN0
YWNrLCB3aXRob3V0IG1vdmluZyB0aGUgY3VycmVudCBzdGFjayBwb3NpdGlvbi4KKworICAgIHZv
aWQgcG9wKFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmx3KGRl
c3QsIE1JUFNSZWdpc3RlcnM6OnNwLCAwKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkaXUoTUlQ
U1JlZ2lzdGVyczo6c3AsIE1JUFNSZWdpc3RlcnM6OnNwLCA0KTsKKyAgICB9CisKKyAgICB2b2lk
IHB1c2goUmVnaXN0ZXJJRCBzcmMpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hZGRpdShN
SVBTUmVnaXN0ZXJzOjpzcCwgTUlQU1JlZ2lzdGVyczo6c3AsIC00KTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuc3coc3JjLCBNSVBTUmVnaXN0ZXJzOjpzcCwgMCk7CisgICAgfQorCisgICAgdm9pZCBw
dXNoKEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIGxvYWQzMihhZGRyZXNzLCBkYXRh
VGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgcHVzaChkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICB9CisK
KyAgICB2b2lkIHB1c2goSW1tMzIgaW1tKQorICAgIHsKKyAgICAgICAgbW92ZShpbW0sIGltbVRl
bXBSZWdpc3Rlcik7CisgICAgICAgIHB1c2goaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICB9CisKKyAg
ICAvLyBSZWdpc3RlciBtb3ZlIG9wZXJhdGlvbnM6CisgICAgLy8KKyAgICAvLyBNb3ZlIHZhbHVl
cyBpbiByZWdpc3RlcnMuCisKKyAgICB2b2lkIG1vdmUoSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRl
c3QsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBpZiAoIWltbS5tX2lzUG9pbnRlciAm
JiBpbW0ubV92YWx1ZSA9PSAwICYmIGZpeGVkID09IDApCisgICAgICAgICAgICBtb3ZlKE1JUFNS
ZWdpc3RlcnM6Onplcm8sIGRlc3QsIGZpeGVkKTsKKyAgICAgICAgZWxzZSBpZiAoaW1tLm1faXNQ
b2ludGVyIHx8IGZpeGVkID09IDEpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx1aShkZXN0
LCBpbW0ubV92YWx1ZSA+PiAxNik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5vcmkoZGVzdCwg
ZGVzdCwgaW1tLm1fdmFsdWUpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLmxpKGRlc3QsIGltbS5tX3ZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkIG1vdmUoUmVnaXN0
ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAg
IGlmIChzcmMgPT0gZGVzdCAmJiBmaXhlZCA9PSAwKQorICAgICAgICAgICAgOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZlKGRlc3QsIHNyYyk7CisgICAgfQorCisg
ICAgdm9pZCBtb3ZlKEltbVB0ciBpbW0sIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkK
KyAgICB7CisgICAgICAgIG1vdmUoSW1tMzIoaW1tKSwgZGVzdCwgZml4ZWQpOworICAgIH0KKwor
ICAgIHZvaWQgc3dhcChSZWdpc3RlcklEIHJlZzEsIFJlZ2lzdGVySUQgcmVnMiwgaW50IGZpeGVk
ID0gMCkKKyAgICB7CisgICAgICAgIG1vdmUocmVnMSwgaW1tVGVtcFJlZ2lzdGVyLCBmaXhlZCk7
CisgICAgICAgIG1vdmUocmVnMiwgcmVnMSwgZml4ZWQpOworICAgICAgICBtb3ZlKGltbVRlbXBS
ZWdpc3RlciwgcmVnMiwgZml4ZWQpOworICAgIH0KKworICAgIHZvaWQgc2lnbkV4dGVuZDMyVG9Q
dHIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7
CisgICAgICAgIGlmIChzcmMgPT0gZGVzdCAmJiBmaXhlZCA9PSAwKQorICAgICAgICAgICAgOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBtb3ZlKHNyYywgZGVzdCwgZml4ZWQpOworICAgIH0K
KworICAgIHZvaWQgemVyb0V4dGVuZDMyVG9QdHIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQg
ZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIGlmIChzcmMgPT0gZGVzdCAmJiBm
aXhlZCA9PSAwKQorICAgICAgICAgICAgOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtb3Zl
KHNyYywgZGVzdCwgZml4ZWQpOworICAgIH0KKworICAgIC8vIEZvcndhcmRzIC8gZXh0ZXJuYWwg
Y29udHJvbCBmbG93IG9wZXJhdGlvbnM6CisgICAgLy8KKyAgICAvLyBUaGlzIHNldCBvZiBqdW1w
IGFuZCBjb25kaXRpb25hbCBicmFuY2ggb3BlcmF0aW9ucyByZXR1cm4gYSBKdW1wCisgICAgLy8g
b2JqZWN0IHdoaWNoIG1heSBsaW5rZWQgYXQgYSBsYXRlciBwb2ludCwgYWxsb3cgZm9yd2FyZHMg
anVtcCwKKyAgICAvLyBvciBqdW1wcyB0aGF0IHdpbGwgcmVxdWlyZSBleHRlcm5hbCBsaW5rYWdl
IChhZnRlciB0aGUgY29kZSBoYXMgYmVlbgorICAgIC8vIHJlbG9jYXRlZCkuCisgICAgLy8KKyAg
ICAvLyBGb3IgYnJhbmNoZXMsIHNpZ25lZCA8LCA+LCA8PSBhbmQgPj0gYXJlIGRlbm90ZWQgYXMg
bCwgZywgbGUsIGFuZCBnZQorICAgIC8vIHJlc3BlY2l0dmVseSwgZm9yIHVuc2lnbmVkIGNvbXBh
cmlzb25zIHRoZSBuYW1lcyBiLCBhLCBiZSwgYW5kIGFlIGFyZQorICAgIC8vIHVzZWQgKHJlcHJl
c2VudGluZyB0aGUgbmFtZXMgJ2JlbG93JyBhbmQgJ2Fib3ZlJykuCisgICAgLy8KKyAgICAvLyBP
cGVyYW5kcyB0byB0aGUgY29tcGFyaXNpb24gYXJlIHByb3ZpZGVkIGluIHRoZSBleHBlY3RlZCBv
cmRlciwgZS5nLgorICAgIC8vIGpsZTMyKHJlZzEsIEltbTMyKDUpKSB3aWxsIGJyYW5jaCBpZiB0
aGUgdmFsdWUgaGVsZCBpbiByZWcxLCB3aGVuCisgICAgLy8gdHJlYXRlZCBhcyBhIHNpZ25lZCAz
MmJpdCB2YWx1ZSwgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDUuCisgICAgLy8KKyAgICAvLyBq
eiBhbmQgam56IHRlc3Qgd2hldGhlciB0aGUgZmlyc3Qgb3BlcmFuZCBpcyBlcXVhbCB0byB6ZXJv
LCBhbmQgdGFrZQorICAgIC8vIGFuIG9wdGlvbmFsIHNlY29uZCBvcGVyYW5kIG9mIGEgbWFzayB1
bmRlciB3aGljaCB0byBwZXJmb3JtIHRoZSB0ZXN0LgorCisgICAgSnVtcCBicmFuY2gzMihDb25k
aXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0LCBpbnQgZml4ZWQg
PSAwKQorICAgIHsKKyAgICAgICAgaWYgKGNvbmQgPT0gRXF1YWwgfHwgY29uZCA9PSBaZXJvKQor
ICAgICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuYnJhbmNoX2VxKGxlZnQsIHJpZ2h0
KSk7CisgICAgICAgIGlmIChjb25kID09IE5vdEVxdWFsIHx8IGNvbmQgPT0gTm9uWmVybykKKyAg
ICAgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmJyYW5jaF9uZShsZWZ0LCByaWdodCkp
OworICAgICAgICBpZiAoY29uZCA9PSBBYm92ZSkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
c2x0dShjbXBUZW1wUmVnaXN0ZXIsIHJpZ2h0LCBsZWZ0KTsKKyAgICAgICAgICAgIHJldHVybiBK
dW1wKG1fYXNzZW1ibGVyLmJyYW5jaF9uZShjbXBUZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6
Onplcm8pKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29uZCA9PSBBYm92ZU9yRXF1YWwpIHsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdHUoY21wVGVtcFJlZ2lzdGVyLCBsZWZ0LCByaWdo
dCk7CisgICAgICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5icmFuY2hfZXEoY21wVGVt
cFJlZ2lzdGVyLCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KGNvbmQgPT0gQmVsb3cpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdHUoY21wVGVtcFJl
Z2lzdGVyLCBsZWZ0LCByaWdodCk7CisgICAgICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxl
ci5icmFuY2hfbmUoY21wVGVtcFJlZ2lzdGVyLCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKSk7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gQmVsb3dPckVxdWFsKSB7CisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5zbHR1KGNtcFRlbXBSZWdpc3RlciwgcmlnaHQsIGxlZnQpOworICAgICAgICAg
ICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuYnJhbmNoX2VxKGNtcFRlbXBSZWdpc3RlciwgTUlQ
U1JlZ2lzdGVyczo6emVybykpOworICAgICAgICB9CisgICAgICAgIGlmIChjb25kID09IEdyZWF0
ZXJUaGFuKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHQoY21wVGVtcFJlZ2lzdGVyLCBy
aWdodCwgbGVmdCk7CisgICAgICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5icmFuY2hf
bmUoY21wVGVtcFJlZ2lzdGVyLCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKSk7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKGNvbmQgPT0gR3JlYXRlclRoYW5PckVxdWFsKSB7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5zbHQoY21wVGVtcFJlZ2lzdGVyLCBsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBy
ZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5icmFuY2hfZXEoY21wVGVtcFJlZ2lzdGVyLCBNSVBTUmVn
aXN0ZXJzOjp6ZXJvKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gTGVzc1RoYW4p
IHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdChjbXBUZW1wUmVnaXN0ZXIsIGxlZnQsIHJp
Z2h0KTsKKyAgICAgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmJyYW5jaF9uZShjbXBU
ZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onplcm8pKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoY29uZCA9PSBMZXNzVGhhbk9yRXF1YWwpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNs
dChjbXBUZW1wUmVnaXN0ZXIsIHJpZ2h0LCBsZWZ0KTsKKyAgICAgICAgICAgIHJldHVybiBKdW1w
KG1fYXNzZW1ibGVyLmJyYW5jaF9lcShjbXBUZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onpl
cm8pKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29uZCA9PSBPdmVyZmxvdykgeworICAgICAg
ICAgICAgLyoKKyAgICAgICAgICAgICAgICB4b3IgICAgIGNtcFRlbXAsIGxlZnQsIHJpZ2h0Cisg
ICAgICAgICAgICAgICAgYmdleiAgICBOb19vdmVyZmxvdywgY21wVGVtcCAgICAjIHNhbWUgc2ln
biBiaXQgLT4gbm8gb3ZlcmZsb3cKKyAgICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAgICAg
ICBzdWJ1ICAgIGNtcFRlbXAsIGxlZnQsIHJpZ2h0CisgICAgICAgICAgICAgICAgeG9yICAgICBj
bXBUZW1wLCBjbXBUZW1wLCBsZWZ0CisgICAgICAgICAgICAgICAgYmdleiAgICBOb19vdmVyZmxv
dywgY21wVGVtcCAgICAjIHNhbWUgc2lnbiBiaXQgLT4gbm8gb3ZlcmZsb3cKKyAgICAgICAgICAg
ICAgICBub3AKKyAgICAgICAgICAgICAgICBiICAgICAgIE92ZXJmbG93CisgICAgICAgICAgICAg
ICAgbm9wCisgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgbm9wCisgICAgICAg
ICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgIE5vX292ZXJm
bG93OgorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnhvcl9pbnNuKGNt
cFRlbXBSZWdpc3RlciwgbGVmdCwgcmlnaHQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYmdl
eihjbXBUZW1wUmVnaXN0ZXIsIDExKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3VidShjbXBUZW1wUmVnaXN0ZXIsIGxlZnQsIHJpZ2h0
KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnhvcl9pbnNuKGNtcFRlbXBSZWdpc3RlciwgY21w
VGVtcFJlZ2lzdGVyLCBsZWZ0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmJnZXooY21wVGVt
cFJlZ2lzdGVyLCA3KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICAg
ICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuam1wKCkpOworICAgICAgICB9CisgICAgICAgIGlm
IChjb25kID09IFNpZ25lZCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3VidShjbXBUZW1w
UmVnaXN0ZXIsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSByZXN1
bHQgaXMgbmVnYXRpdmUuCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHQoY21wVGVtcFJlZ2lz
dGVyLCBjbXBUZW1wUmVnaXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUlQU1Jl
Z2lzdGVyczo6emVybyk7CisgICAgICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5icmFu
Y2hfbmUoY21wVGVtcFJlZ2lzdGVyLCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKSk7CisgICAgICAgIH0K
KyAgICAgICAgQVNTRVJUKDApOworCisgICAgICAgIHJldHVybiBKdW1wKCk7CisgICAgfQorCisg
ICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBJbW0zMiBy
aWdodCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIG1vdmUocmlnaHQsIGltbVRlbXBS
ZWdpc3RlciwgZml4ZWQpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgbGVmdCwgaW1t
VGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRp
b24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBBZGRyZXNzIHJpZ2h0LCBpbnQgZml4ZWQgPSAwKQor
ICAgIHsKKyAgICAgICAgbG9hZDMyKHJpZ2h0LCBkYXRhVGVtcFJlZ2lzdGVyLCBmaXhlZCk7Cisg
ICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBsZWZ0LCBkYXRhVGVtcFJlZ2lzdGVyLCBmaXhl
ZCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29uZCwgQWRkcmVzcyBs
ZWZ0LCBSZWdpc3RlcklEIHJpZ2h0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgbG9h
ZDMyKGxlZnQsIGRhdGFUZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAgICAgICAgcmV0dXJuIGJyYW5j
aDMyKGNvbmQsIGRhdGFUZW1wUmVnaXN0ZXIsIHJpZ2h0LCBmaXhlZCk7CisgICAgfQorCisgICAg
SnVtcCBicmFuY2gzMihDb25kaXRpb24gY29uZCwgQWRkcmVzcyBsZWZ0LCBJbW0zMiByaWdodCwg
aW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIGxvYWQzMihsZWZ0LCBkYXRhVGVtcFJlZ2lz
dGVyLCBmaXhlZCk7CisgICAgICAgIG1vdmUocmlnaHQsIGltbVRlbXBSZWdpc3RlciwgZml4ZWQp
OworICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgZGF0YVRlbXBSZWdpc3RlciwgaW1tVGVt
cFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24g
Y29uZCwgQmFzZUluZGV4IGxlZnQsIEltbTMyIHJpZ2h0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsK
KyAgICAgICAgbG9hZDMyKGxlZnQsIGRhdGFUZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAgICAgICAg
Ly8gQmUgY2FyZWZ1bCB0aGF0IHRoZSBwcmV2aW91cyBsb2FkMzIoKSB1c2VzIGltbVRlbXBSZWdp
c3Rlci4KKyAgICAgICAgLy8gU28sIHdlIG5lZWQgdG8gcHV0IG1vdmUoKSBhZnRlciBsb2FkMzIo
KS4KKyAgICAgICAgbW92ZShyaWdodCwgaW1tVGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgICAg
IHJldHVybiBicmFuY2gzMihjb25kLCBkYXRhVGVtcFJlZ2lzdGVyLCBpbW1UZW1wUmVnaXN0ZXIs
IGZpeGVkKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDMyV2l0aFVuYWxpZ25lZEhhbGZXb3Jk
cyhDb25kaXRpb24gY29uZCwgQmFzZUluZGV4IGxlZnQsIEltbTMyIHJpZ2h0LCBpbnQgZml4ZWQg
PSAwKQorICAgIHsKKyAgICAgICAgbG9hZDMyV2l0aFVuYWxpZ25lZEhhbGZXb3JkcyhsZWZ0LCBk
YXRhVGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgICAgIC8vIEJlIGNhcmVmdWwgdGhhdCB0aGUg
cHJldmlvdXMgbG9hZDMyV2l0aFVuYWxpZ25lZEhhbGZXb3JkcygpCisgICAgICAgIC8vIHVzZXMg
aW1tVGVtcFJlZ2lzdGVyLgorICAgICAgICAvLyBTbywgd2UgbmVlZCB0byBwdXQgbW92ZSgpIGFm
dGVyIGxvYWQzMldpdGhVbmFsaWduZWRIYWxmV29yZHMoKS4KKyAgICAgICAgbW92ZShyaWdodCwg
aW1tVGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBk
YXRhVGVtcFJlZ2lzdGVyLCBpbW1UZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAgICB9CisKKyAgICBK
dW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBBYnNvbHV0ZUFkZHJlc3MgbGVmdCwgUmVnaXN0
ZXJJRCByaWdodCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIGxvYWQzMihsZWZ0Lm1f
cHRyLCBkYXRhVGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgICAgIHJldHVybiBicmFuY2gzMihj
b25kLCBkYXRhVGVtcFJlZ2lzdGVyLCByaWdodCwgZml4ZWQpOworICAgIH0KKworICAgIEp1bXAg
YnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIEFic29sdXRlQWRkcmVzcyBsZWZ0LCBJbW0zMiByaWdo
dCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIGxvYWQzMihsZWZ0Lm1fcHRyLCBkYXRh
VGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgICAgIG1vdmUocmlnaHQsIGltbVRlbXBSZWdpc3Rl
ciwgZml4ZWQpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgZGF0YVRlbXBSZWdpc3Rl
ciwgaW1tVGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2gxNihD
b25kaXRpb24gY29uZCwgQmFzZUluZGV4IGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQsIGludCBmaXhl
ZCA9IDApCisgICAgeworICAgICAgICBsb2FkMTYobGVmdCwgZGF0YVRlbXBSZWdpc3RlciwgZml4
ZWQpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgZGF0YVRlbXBSZWdpc3Rlciwgcmln
aHQsIGZpeGVkKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDE2KENvbmRpdGlvbiBjb25kLCBC
YXNlSW5kZXggbGVmdCwgSW1tMzIgcmlnaHQsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAg
ICBBU1NFUlQoIShyaWdodC5tX3ZhbHVlICYgMHhGRkZGMDAwMCkpOworICAgICAgICBsb2FkMTYo
bGVmdCwgZGF0YVRlbXBSZWdpc3RlciwgZml4ZWQpOworICAgICAgICAvLyBCZSBjYXJlZnVsIHRo
YXQgdGhlIHByZXZpb3VzIGxvYWQxNigpIHVzZXMgaW1tVGVtcFJlZ2lzdGVyLgorICAgICAgICAv
LyBTbywgd2UgbmVlZCB0byBwdXQgbW92ZSgpIGFmdGVyIGxvYWQxNigpLgorICAgICAgICBtb3Zl
KHJpZ2h0LCBpbW1UZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMy
KGNvbmQsIGRhdGFUZW1wUmVnaXN0ZXIsIGltbVRlbXBSZWdpc3RlciwgZml4ZWQpOworICAgIH0K
KworICAgIEp1bXAgYnJhbmNoVGVzdDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHJlZywg
UmVnaXN0ZXJJRCBtYXNrLCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyAgICAgICAgQVNTRVJUKChj
b25kID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8pKTsKKyAgICAgICAgbV9hc3NlbWJsZXIu
YW5kX2luc24oY21wVGVtcFJlZ2lzdGVyLCByZWcsIG1hc2spOworICAgICAgICBpZiAoY29uZCA9
PSBaZXJvKQorICAgICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuYnJhbmNoX2VxKGNt
cFRlbXBSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6emVybykpOworICAgICAgICByZXR1cm4gSnVt
cChtX2Fzc2VtYmxlci5icmFuY2hfbmUoY21wVGVtcFJlZ2lzdGVyLCBNSVBTUmVnaXN0ZXJzOjp6
ZXJvKSk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hUZXN0MzIoQ29uZGl0aW9uIGNvbmQsIFJl
Z2lzdGVySUQgcmVnLCBJbW0zMiBtYXNrID0gSW1tMzIoLTEpLCBpbnQgZml4ZWQgPSAwKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKChjb25kID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8pKTsK
KyAgICAgICAgaWYgKG1hc2subV92YWx1ZSA9PSAtMSAmJiBmaXhlZCA9PSAwKSB7CisgICAgICAg
ICAgICBpZiAoY29uZCA9PSBaZXJvKQorICAgICAgICAgICAgICAgIHJldHVybiBKdW1wKG1fYXNz
ZW1ibGVyLmJyYW5jaF9lcShyZWcsIE1JUFNSZWdpc3RlcnM6Onplcm8pKTsKKyAgICAgICAgICAg
IHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmJyYW5jaF9uZShyZWcsIE1JUFNSZWdpc3RlcnM6Onpl
cm8pKTsKKyAgICAgICAgfQorICAgICAgICBtb3ZlKG1hc2ssIGltbVRlbXBSZWdpc3RlciwgZml4
ZWQpOworICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDMyKGNvbmQsIHJlZywgaW1tVGVtcFJlZ2lz
dGVyLCBmaXhlZCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hUZXN0MzIoQ29uZGl0aW9uIGNv
bmQsIEFkZHJlc3MgYWRkcmVzcywgSW1tMzIgbWFzayA9IEltbTMyKC0xKSwgaW50IGZpeGVkID0g
MCkKKyAgICB7CisgICAgICAgIGxvYWQzMihhZGRyZXNzLCBkYXRhVGVtcFJlZ2lzdGVyLCBmaXhl
ZCk7CisgICAgICAgIHJldHVybiBicmFuY2hUZXN0MzIoY29uZCwgZGF0YVRlbXBSZWdpc3Rlciwg
bWFzaywgZml4ZWQpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoVGVzdDMyKENvbmRpdGlvbiBj
b25kLCBCYXNlSW5kZXggYWRkcmVzcywgSW1tMzIgbWFzayA9IEltbTMyKC0xKSwgaW50IGZpeGVk
ID0gMCkKKyAgICB7CisgICAgICAgIGxvYWQzMihhZGRyZXNzLCBkYXRhVGVtcFJlZ2lzdGVyLCBm
aXhlZCk7CisgICAgICAgIHJldHVybiBicmFuY2hUZXN0MzIoY29uZCwgZGF0YVRlbXBSZWdpc3Rl
ciwgbWFzaywgZml4ZWQpOworICAgIH0KKworICAgIEp1bXAganVtcCgpCisgICAgeworICAgICAg
ICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qbXAoKSk7CisgICAgfQorCisgICAgdm9pZCBqdW1w
KFJlZ2lzdGVySUQgdGFyZ2V0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuam1wX3JlZ2lz
dGVyKHRhcmdldCk7CisgICAgfQorCisgICAgdm9pZCBqdW1wKEFkZHJlc3MgYWRkcmVzcykKKyAg
ICB7CisgICAgICAgIGludCBmaXhlZCA9IDE7CisgICAgICAgIGxvYWQzMihhZGRyZXNzLCBNSVBT
UmVnaXN0ZXJzOjp0OSwgZml4ZWQpOworICAgICAgICBtX2Fzc2VtYmxlci5qbXBfcmVnaXN0ZXIo
TUlQU1JlZ2lzdGVyczo6dDkpOworICAgIH0KKworICAgIC8vIEFyaXRobWV0aWMgY29udHJvbCBm
bG93IG9wZXJhdGlvbnM6CisgICAgLy8KKyAgICAvLyBUaGlzIHNldCBvZiBjb25kaXRpb25hbCBi
cmFuY2ggb3BlcmF0aW9ucyBicmFuY2ggYmFzZWQKKyAgICAvLyBvbiB0aGUgcmVzdWx0IG9mIGFu
IGFyaXRobWV0aWMgb3BlcmF0aW9uLiAgVGhlIG9wZXJhdGlvbgorICAgIC8vIGlzIHBlcmZvcm1l
ZCBhcyBub3JtYWwsIHN0b3JpbmcgdGhlIHJlc3VsdC4KKyAgICAvLworICAgIC8vICoganogb3Bl
cmF0aW9ucyBicmFuY2ggaWYgdGhlIHJlc3VsdCBpcyB6ZXJvLgorICAgIC8vICogam8gb3BlcmF0
aW9ucyBicmFuY2ggaWYgdGhlIChzaWduZWQpIGFyaXRobWV0aWMKKyAgICAvLyAgIG9wZXJhdGlv
biBjYXVzZWQgYW4gb3ZlcmZsb3cgdG8gb2NjdXIuCisKKyAgICBKdW1wIGJyYW5jaEFkZDMyKENv
bmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQg
PSAwKQorICAgIHsKKyAgICAgICAgQVNTRVJUKChjb25kID09IE92ZXJmbG93KSB8fCAoY29uZCA9
PSBTaWduZWQpIHx8IChjb25kID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8pKTsKKyAgICAg
ICAgaWYgKGNvbmQgPT0gT3ZlcmZsb3cpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAg
ICAgbW92ZSAgICBkZXN0LCBkYXRhVGVtcAorICAgICAgICAgICAgICAgIHhvciAgICAgY21wVGVt
cCwgZGF0YVRlbXAsIHNyYworICAgICAgICAgICAgICAgIGJsdHogICAgY21wVGVtcCwgTm9fb3Zl
cmZsb3cgICAgIyBkaWZmIHNpZ24gYml0IC0+IG5vIG92ZXJmbG93CisgICAgICAgICAgICAgICAg
YWRkdSAgICBkZXN0LCBkYXRhVGVtcCwgc3JjCisgICAgICAgICAgICAgICAgeG9yICAgICBjbXBU
ZW1wLCBkZXN0LCBkYXRhVGVtcAorICAgICAgICAgICAgICAgIGJnZXogICAgY21wVGVtcCwgTm9f
b3ZlcmZsb3cgICAgIyBzYW1lIHNpZ24gYmlnIC0+IG5vIG92ZXJmbG93CisgICAgICAgICAgICAg
ICAgbm9wCisgICAgICAgICAgICAgICAgYiAgICAgICBPdmVyZmxvdworICAgICAgICAgICAgICAg
IG5vcAorICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAg
ICAgICAgIG5vcAorICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgTm9fb3ZlcmZsb3c6
CisgICAgICAgICAgICAqLworICAgICAgICAgICAgbW92ZShkZXN0LCBkYXRhVGVtcFJlZ2lzdGVy
KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnhvcl9pbnNuKGNtcFRlbXBSZWdpc3RlciwgZGF0
YVRlbXBSZWdpc3Rlciwgc3JjKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmJsdHooY21wVGVt
cFJlZ2lzdGVyLCAxMCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGRlc3QsIGRhdGFU
ZW1wUmVnaXN0ZXIsIHNyYyk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3JfaW5zbihjbXBU
ZW1wUmVnaXN0ZXIsIGRlc3QsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIuYmdleihjbXBUZW1wUmVnaXN0ZXIsIDcpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
bm9wKCk7CisgICAgICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qbXAoKSk7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gU2lnbmVkKSB7CisgICAgICAgICAgICBhZGQzMihz
cmMsIGRlc3QsIGZpeGVkKTsKKyAgICAgICAgICAgIC8vIENoZWNrIGlmIGRlc3QgaXMgbmVnYXRp
dmUuCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHQoY21wVGVtcFJlZ2lzdGVyLCBkZXN0LCBN
SVBTUmVnaXN0ZXJzOjp6ZXJvKTsKKyAgICAgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVy
LmJyYW5jaF9uZShjbXBUZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onplcm8pKTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoY29uZCA9PSBaZXJvKSB7CisgICAgICAgICAgICBhZGQzMihzcmMs
IGRlc3QsIGZpeGVkKTsKKyAgICAgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmJyYW5j
aF9lcShkZXN0LCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KGNvbmQgPT0gTm9uWmVybykgeworICAgICAgICAgICAgYWRkMzIoc3JjLCBkZXN0LCBmaXhlZCk7
CisgICAgICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5icmFuY2hfbmUoZGVzdCwgTUlQ
U1JlZ2lzdGVyczo6emVybykpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIEp1bXAoKTsK
KyAgICB9CisKKyAgICBKdW1wIGJyYW5jaEFkZDMyKENvbmRpdGlvbiBjb25kLCBJbW0zMiBpbW0s
IFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIG1vdmUoaW1t
LCBpbW1UZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaEFkZDMyKGNv
bmQsIGltbVRlbXBSZWdpc3RlciwgZGVzdCwgZml4ZWQpOworICAgIH0KKworICAgIEp1bXAgYnJh
bmNoTXVsMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3Qs
IGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBBU1NFUlQoKGNvbmQgPT0gT3ZlcmZsb3cp
IHx8IChjb25kID09IFNpZ25lZCkgfHwgKGNvbmQgPT0gWmVybykgfHwgKGNvbmQgPT0gTm9uWmVy
bykpOworICAgICAgICBpZiAoY29uZCA9PSBPdmVyZmxvdykgeworICAgICAgICAgICAgLyoKKyAg
ICAgICAgICAgICAgICBtdWx0ICAgIHNyYywgZGVzdAorICAgICAgICAgICAgICAgIG1maGkgICAg
ZGF0YVRlbXAKKyAgICAgICAgICAgICAgICBtZmxvICAgIGRlc3QKKyAgICAgICAgICAgICAgICBz
cmEgICAgIGFkZHJUZW1wLCBkZXN0LCAzMQorICAgICAgICAgICAgICAgIGJlcSAgICAgZGF0YVRl
bXAsIGFkZHJUZW1wLCBOb19vdmVyZmxvdyAjIGFsbCBzaWduIGJpdHMgKGJpdCA2MyB0byBiaXQg
MzEpIGFyZSB0aGUgc2FtZSAtPiBubyBvdmVyZmxvdworICAgICAgICAgICAgICAgIG5vcAorICAg
ICAgICAgICAgICAgIGIgICAgICAgT3ZlcmZsb3cKKyAgICAgICAgICAgICAgICBub3AKKyAgICAg
ICAgICAgICAgICBub3AKKyAgICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAgICAgICBub3AK
KyAgICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAgIE5vX292ZXJmbG93OgorICAgICAgICAg
ICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm11bHQoc3JjLCBkZXN0KTsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLm1maGkoZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5tZmxvKGRlc3QpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3JhKGFkZHJUZW1w
UmVnaXN0ZXIsIGRlc3QsIDMxKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmJlcShkYXRhVGVt
cFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCA3KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
Lm5vcCgpOworICAgICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuam1wKCkpOworICAg
ICAgICB9CisgICAgICAgIGlmIChjb25kID09IFNpZ25lZCkgeworICAgICAgICAgICAgbXVsMzIo
c3JjLCBkZXN0LCBmaXhlZCk7CisgICAgICAgICAgICAvLyBDaGVjayBpZiBkZXN0IGlzIG5lZ2F0
aXZlLgorICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0KGNtcFRlbXBSZWdpc3RlciwgZGVzdCwg
TUlQU1JlZ2lzdGVyczo6emVybyk7CisgICAgICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxl
ci5icmFuY2hfbmUoY21wVGVtcFJlZ2lzdGVyLCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKSk7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gWmVybykgeworICAgICAgICAgICAgbXVsMzIoc3Jj
LCBkZXN0LCBmaXhlZCk7CisgICAgICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5icmFu
Y2hfZXEoZGVzdCwgTUlQU1JlZ2lzdGVyczo6emVybykpOworICAgICAgICB9CisgICAgICAgIGlm
IChjb25kID09IE5vblplcm8pIHsKKyAgICAgICAgICAgIG11bDMyKHNyYywgZGVzdCwgZml4ZWQp
OworICAgICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuYnJhbmNoX25lKGRlc3QsIE1J
UFNSZWdpc3RlcnM6Onplcm8pKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBKdW1wKCk7
CisgICAgfQorCisgICAgSnVtcCBicmFuY2hNdWwzMihDb25kaXRpb24gY29uZCwgSW1tMzIgaW1t
LCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQgPSAwKQorICAgIHsK
KyAgICAgICAgbW92ZShpbW0sIGltbVRlbXBSZWdpc3RlciwgZml4ZWQpOworICAgICAgICByZXR1
cm4gYnJhbmNoTXVsMzIoY29uZCwgaW1tVGVtcFJlZ2lzdGVyLCBkZXN0LCBmaXhlZCk7CisgICAg
fQorCisgICAgSnVtcCBicmFuY2hTdWIzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBzcmMs
IFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgo
Y29uZCA9PSBPdmVyZmxvdykgfHwgKGNvbmQgPT0gU2lnbmVkKSB8fCAoY29uZCA9PSBaZXJvKSB8
fCAoY29uZCA9PSBOb25aZXJvKSk7CisgICAgICAgIGlmIChjb25kID09IE92ZXJmbG93KSB7Cisg
ICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgIG1vdmUgICAgZGVzdCwgZGF0YVRlbXAKKyAg
ICAgICAgICAgICAgICB4b3IgICAgIGNtcFRlbXAsIGRhdGFUZW1wLCBzcmMKKyAgICAgICAgICAg
ICAgICBiZ2V6ICAgIGNtcFRlbXAsIE5vX292ZXJmbG93ICAgICMgc2FtZSBzaWduIGJpdCAtPiBu
byBvdmVyZmxvdworICAgICAgICAgICAgICAgIHN1YnUgICAgZGVzdCwgZGF0YVRlbXAsIHNyYwor
ICAgICAgICAgICAgICAgIHhvciAgICAgY21wVGVtcCwgZGVzdCwgZGF0YVRlbXAKKyAgICAgICAg
ICAgICAgICBiZ2V6ICAgIGNtcFRlbXAsIE5vX292ZXJmbG93ICAgICMgc2FtZSBzaWduIGJpdCAt
PiBubyBvdmVyZmxvdworICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgICAgIGIgICAg
ICAgT3ZlcmZsb3cKKyAgICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAgICAgICBub3AKKyAg
ICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAgICAgICBu
b3AKKyAgICAgICAgICAgIE5vX292ZXJmbG93OgorICAgICAgICAgICAgKi8KKyAgICAgICAgICAg
IG1vdmUoZGVzdCwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci54
b3JfaW5zbihjbXBUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsIHNyYyk7CisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5iZ2V6KGNtcFRlbXBSZWdpc3RlciwgMTApOworICAgICAgICAgICAg
bV9hc3NlbWJsZXIuc3VidShkZXN0LCBkYXRhVGVtcFJlZ2lzdGVyLCBzcmMpOworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIueG9yX2luc24oY21wVGVtcFJlZ2lzdGVyLCBkZXN0LCBkYXRhVGVtcFJl
Z2lzdGVyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmJnZXooY21wVGVtcFJlZ2lzdGVyLCA3
KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICAgICAgcmV0dXJuIEp1
bXAobV9hc3NlbWJsZXIuam1wKCkpOworICAgICAgICB9CisgICAgICAgIGlmIChjb25kID09IFNp
Z25lZCkgeworICAgICAgICAgICAgc3ViMzIoc3JjLCBkZXN0LCBmaXhlZCk7CisgICAgICAgICAg
ICAvLyBDaGVjayBpZiBkZXN0IGlzIG5lZ2F0aXZlLgorICAgICAgICAgICAgbV9hc3NlbWJsZXIu
c2x0KGNtcFRlbXBSZWdpc3RlciwgZGVzdCwgTUlQU1JlZ2lzdGVyczo6emVybyk7CisgICAgICAg
ICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5icmFuY2hfbmUoY21wVGVtcFJlZ2lzdGVyLCBN
SVBTUmVnaXN0ZXJzOjp6ZXJvKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gWmVy
bykgeworICAgICAgICAgICAgc3ViMzIoc3JjLCBkZXN0LCBmaXhlZCk7CisgICAgICAgICAgICBy
ZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5icmFuY2hfZXEoZGVzdCwgTUlQU1JlZ2lzdGVyczo6emVy
bykpOworICAgICAgICB9CisgICAgICAgIGlmIChjb25kID09IE5vblplcm8pIHsKKyAgICAgICAg
ICAgIHN1YjMyKHNyYywgZGVzdCwgZml4ZWQpOworICAgICAgICAgICAgcmV0dXJuIEp1bXAobV9h
c3NlbWJsZXIuYnJhbmNoX25lKGRlc3QsIE1JUFNSZWdpc3RlcnM6Onplcm8pKTsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiBKdW1wKCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hTdWIz
MihDb25kaXRpb24gY29uZCwgSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QsIGludCBmaXhlZCA9
IDApCisgICAgeworICAgICAgICBtb3ZlKGltbSwgaW1tVGVtcFJlZ2lzdGVyLCBmaXhlZCk7Cisg
ICAgICAgIHJldHVybiBicmFuY2hTdWIzMihjb25kLCBpbW1UZW1wUmVnaXN0ZXIsIGRlc3QsIGZp
eGVkKTsKKyAgICB9CisKKyAgICAvLyBNaXNjZWxsYW5lb3VzIG9wZXJhdGlvbnM6CisKKyAgICB2
b2lkIGJyZWFrcG9pbnQoKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYmtwdCgpOworICAg
IH0KKworICAgIENhbGwgbmVhckNhbGwoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIENhbGwobV9h
c3NlbWJsZXIuZnVuY3Rpb25fY2FsbCgpLCBDYWxsOjpMaW5rYWJsZU5lYXIpOworICAgIH0KKwor
ICAgIENhbGwgY2FsbCgpCisgICAgeworICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5m
YXJfZnVuY3Rpb25fY2FsbCgpLCBDYWxsOjpMaW5rYWJsZSk7CisgICAgfQorCisgICAgQ2FsbCBj
YWxsKFJlZ2lzdGVySUQgdGFyZ2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIENhbGwobV9hc3Nl
bWJsZXIuZnVuY3Rpb25fY2FsbF92aWFfcmVnaXN0ZXIodGFyZ2V0KSwgQ2FsbDo6Tm9uZSk7Cisg
ICAgfQorCisgICAgQ2FsbCBjYWxsKEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIGlu
dCBmaXhlZCA9IDE7CisgICAgICAgIGxvYWQzMihhZGRyZXNzLCBNSVBTUmVnaXN0ZXJzOjp0OSwg
Zml4ZWQpOworICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5mdW5jdGlvbl9jYWxsX3Zp
YV9yZWdpc3RlcihNSVBTUmVnaXN0ZXJzOjp0OSksIENhbGw6Ok5vbmUpOworICAgIH0KKworICAg
IHZvaWQgcmV0KCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmptcF9yZWdpc3RlcihNSVBT
UmVnaXN0ZXJzOjpyYSk7CisgICAgfQorCisgICAgdm9pZCBzZXQzMihDb25kaXRpb24gY29uZCwg
UmVnaXN0ZXJJRCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0LCBSZWdpc3RlcklEIGRlc3QsIGludCBm
aXhlZCA9IDApCisgICAgeworICAgICAgICBpZiAoY29uZCA9PSBFcXVhbCB8fCBjb25kID09IFpl
cm8pIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnhvcl9pbnNuKGRlc3QsIGxlZnQsIHJpZ2h0
KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdGl1KGRlc3QsIGRlc3QsIDEpOworICAgICAg
ICB9IGVsc2UgaWYgKGNvbmQgPT0gTm90RXF1YWwgfHwgY29uZCA9PSBOb25aZXJvKSB7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci54b3JfaW5zbihkZXN0LCBsZWZ0LCByaWdodCk7CisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5zbHR1KGRlc3QsIE1JUFNSZWdpc3RlcnM6Onplcm8sIGRlc3QpOwor
ICAgICAgICB9IGVsc2UgaWYgKGNvbmQgPT0gQWJvdmUpCisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5zbHR1KGRlc3QsIHJpZ2h0LCBsZWZ0KTsKKyAgICAgICAgZWxzZSBpZiAoY29uZCA9PSBBYm92
ZU9yRXF1YWwpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdHUoZGVzdCwgbGVmdCwgcmln
aHQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIueG9yaShkZXN0LCBkZXN0LCAxKTsKKyAgICAg
ICAgfSBlbHNlIGlmIChjb25kID09IEJlbG93KQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0
dShkZXN0LCBsZWZ0LCByaWdodCk7CisgICAgICAgIGVsc2UgaWYgKGNvbmQgPT0gQmVsb3dPckVx
dWFsKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHR1KGRlc3QsIHJpZ2h0LCBsZWZ0KTsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnhvcmkoZGVzdCwgZGVzdCwgMSk7CisgICAgICAgIH0g
ZWxzZSBpZiAoY29uZCA9PSBHcmVhdGVyVGhhbikKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNs
dChkZXN0LCByaWdodCwgbGVmdCk7CisgICAgICAgIGVsc2UgaWYgKGNvbmQgPT0gR3JlYXRlclRo
YW5PckVxdWFsKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHQoZGVzdCwgbGVmdCwgcmln
aHQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIueG9yaShkZXN0LCBkZXN0LCAxKTsKKyAgICAg
ICAgfSBlbHNlIGlmIChjb25kID09IExlc3NUaGFuKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIu
c2x0KGRlc3QsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgZWxzZSBpZiAoY29uZCA9PSBMZXNzVGhh
bk9yRXF1YWwpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdChkZXN0LCByaWdodCwgbGVm
dCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3JpKGRlc3QsIGRlc3QsIDEpOworICAgICAg
ICB9IGVsc2UgaWYgKGNvbmQgPT0gT3ZlcmZsb3cpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAg
ICAgICAgICAgeG9yICAgICBjbXBUZW1wLCBsZWZ0LCByaWdodAorICAgICAgICAgICAgICAgIGJn
ZXogICAgRG9uZSwgY21wVGVtcCAgICMgc2FtZSBzaWduIGJpdCAtPiBubyBvdmVyZmxvdworICAg
ICAgICAgICAgICAgIG1vdmUgICAgZGVzdCwgMAorICAgICAgICAgICAgICAgIHN1YnUgICAgY21w
VGVtcCwgbGVmdCwgcmlnaHQKKyAgICAgICAgICAgICAgICB4b3IgICAgIGNtcFRlbXAsIGNtcFRl
bXAsIGxlZnQgIyBkaWZmIHNpZ24gYml0IC0+IG92ZXJmbG93CisgICAgICAgICAgICAgICAgc2x0
ICAgICBkZXN0LCBjbXBUZW1wLCAwCisgICAgICAgICAgICAgIERvbmU6CisgICAgICAgICAgICAq
LworICAgICAgICAgICAgbV9hc3NlbWJsZXIueG9yX2luc24oY21wVGVtcFJlZ2lzdGVyLCBsZWZ0
LCByaWdodCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5iZ2V6KGNtcFRlbXBSZWdpc3Rlciwg
NCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZlKGRlc3QsIE1JUFNSZWdpc3RlcnM6Onpl
cm8pOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3VidShjbXBUZW1wUmVnaXN0ZXIsIGxlZnQs
IHJpZ2h0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnhvcl9pbnNuKGNtcFRlbXBSZWdpc3Rl
ciwgY21wVGVtcFJlZ2lzdGVyLCBsZWZ0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdChk
ZXN0LCBjbXBUZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onplcm8pOworICAgICAgICB9IGVs
c2UgaWYgKGNvbmQgPT0gU2lnbmVkKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdWJ1KGRl
c3QsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSByZXN1bHQgaXMg
bmVnYXRpdmUuCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHQoZGVzdCwgZGVzdCwgTUlQU1Jl
Z2lzdGVyczo6emVybyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHNldDMyKENvbmRp
dGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIEltbTMyIHJpZ2h0LCBSZWdpc3RlcklEIGRlc3Qs
IGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBtb3ZlKHJpZ2h0LCBpbW1UZW1wUmVnaXN0
ZXIsIGZpeGVkKTsKKyAgICAgICAgc2V0MzIoY29uZCwgbGVmdCwgaW1tVGVtcFJlZ2lzdGVyLCBk
ZXN0LCBmaXhlZCk7CisgICAgfQorCisgICAgdm9pZCBzZXRUZXN0MzIoQ29uZGl0aW9uIGNvbmQs
IEFkZHJlc3MgYWRkcmVzcywgSW1tMzIgbWFzaywgUmVnaXN0ZXJJRCBkZXN0LCBpbnQgZml4ZWQg
PSAwKQorICAgIHsKKyAgICAgICAgQVNTRVJUKChjb25kID09IFplcm8pIHx8IChjb25kID09IE5v
blplcm8pKTsKKyAgICAgICAgbG9hZDMyKGFkZHJlc3MsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAg
ICAgICBpZiAobWFzay5tX3ZhbHVlID09IC0xICYmIGZpeGVkID09IDApIHsKKyAgICAgICAgICAg
IGlmIChjb25kID09IFplcm8pCisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0aXUoZGVz
dCwgZGF0YVRlbXBSZWdpc3RlciwgMSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuc2x0dShkZXN0LCBNSVBTUmVnaXN0ZXJzOjp6ZXJvLCBkYXRhVGVtcFJl
Z2lzdGVyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1vdmUobWFzaywgaW1tVGVt
cFJlZ2lzdGVyLCBmaXhlZCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hbmRfaW5zbihjbXBU
ZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgaWYgKGNvbmQgPT0gWmVybykK
KyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHRpdShkZXN0LCBjbXBUZW1wUmVnaXN0ZXIs
IDEpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdHUo
ZGVzdCwgTUlQU1JlZ2lzdGVyczo6emVybywgY21wVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIERhdGFMYWJlbDMyIG1vdmVXaXRoUGF0Y2goSW1tMzIgaW1tLCBSZWdpc3Rl
cklEIGRlc3QpCisgICAgeworICAgICAgICBpbnQgZml4ZWQgPSAxOworICAgICAgICBEYXRhTGFi
ZWwzMiBsYWJlbCh0aGlzKTsKKyAgICAgICAgbW92ZShpbW0sIGRlc3QsIGZpeGVkKTsKKyAgICAg
ICAgcmV0dXJuIGxhYmVsOworICAgIH0KKworICAgIERhdGFMYWJlbFB0ciBtb3ZlV2l0aFBhdGNo
KEltbVB0ciBpbml0aWFsVmFsdWUsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlu
dCBmaXhlZCA9IDE7CisgICAgICAgIERhdGFMYWJlbFB0ciBsYWJlbCh0aGlzKTsKKyAgICAgICAg
bW92ZShpbml0aWFsVmFsdWUsIGRlc3QsIGZpeGVkKTsKKyAgICAgICAgcmV0dXJuIGxhYmVsOwor
ICAgIH0KKworICAgIEp1bXAgYnJhbmNoUHRyV2l0aFBhdGNoKENvbmRpdGlvbiBjb25kLCBSZWdp
c3RlcklEIGxlZnQsIERhdGFMYWJlbFB0ciYgZGF0YUxhYmVsLCBJbW1QdHIgaW5pdGlhbFJpZ2h0
VmFsdWUgPSBJbW1QdHIoMCkpCisgICAgeworICAgICAgICBpbnQgZml4ZWQgPSAxOworICAgICAg
ICBkYXRhTGFiZWwgPSBtb3ZlV2l0aFBhdGNoKGluaXRpYWxSaWdodFZhbHVlLCBpbW1UZW1wUmVn
aXN0ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgbGVmdCwgaW1tVGVtcFJlZ2lz
dGVyLCBmaXhlZCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hQdHJXaXRoUGF0Y2goQ29uZGl0
aW9uIGNvbmQsIEFkZHJlc3MgbGVmdCwgRGF0YUxhYmVsUHRyJiBkYXRhTGFiZWwsIEltbVB0ciBp
bml0aWFsUmlnaHRWYWx1ZSA9IEltbVB0cigwKSkKKyAgICB7CisgICAgICAgIGludCBmaXhlZCA9
IDE7CisgICAgICAgIGxvYWQzMihsZWZ0LCBkYXRhVGVtcFJlZ2lzdGVyLCBmaXhlZCk7CisgICAg
ICAgIGRhdGFMYWJlbCA9IG1vdmVXaXRoUGF0Y2goaW5pdGlhbFJpZ2h0VmFsdWUsIGltbVRlbXBS
ZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBkYXRhVGVtcFJlZ2lzdGVy
LCBpbW1UZW1wUmVnaXN0ZXIsIGZpeGVkKTsKKyAgICB9CisKKyAgICBEYXRhTGFiZWxQdHIgc3Rv
cmVQdHJXaXRoUGF0Y2goSW1tUHRyIGluaXRpYWxWYWx1ZSwgSW1wbGljaXRBZGRyZXNzIGFkZHJl
c3MpCisgICAgeworICAgICAgICBpbnQgZml4ZWQgPSAxOworICAgICAgICBEYXRhTGFiZWxQdHIg
ZGF0YUxhYmVsID0gbW92ZVdpdGhQYXRjaChpbml0aWFsVmFsdWUsIGRhdGFUZW1wUmVnaXN0ZXIp
OworICAgICAgICBzdG9yZTMyKGRhdGFUZW1wUmVnaXN0ZXIsIGFkZHJlc3MsIGZpeGVkKTsKKyAg
ICAgICAgcmV0dXJuIGRhdGFMYWJlbDsKKyAgICB9CisKKyAgICBEYXRhTGFiZWxQdHIgc3RvcmVQ
dHJXaXRoUGF0Y2goSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICByZXR1
cm4gc3RvcmVQdHJXaXRoUGF0Y2goSW1tUHRyKDApLCBhZGRyZXNzKTsKKyAgICB9CisKKyAgICBD
YWxsIHRhaWxSZWN1cnNpdmVDYWxsKCkKKyAgICB7CisgICAgICAgIC8vIExpa2UgYSBub3JtYWwg
Y2FsbCwgYnV0IGRvbid0IGxpbmsuCisgICAgICAgIGludCBmaXhlZCA9IDE7CisgICAgICAgIG1v
dmUoSW1tMzIoMCksIE1JUFNSZWdpc3RlcnM6OnQ5LCBmaXhlZCk7CisgICAgICAgIHJldHVybiBD
YWxsKG1fYXNzZW1ibGVyLnRhaWxfZnVuY3Rpb25fY2FsbF92aWFfcmVnaXN0ZXIoTUlQU1JlZ2lz
dGVyczo6dDkpLCBDYWxsOjpMaW5rYWJsZSk7CisgICAgfQorCisgICAgQ2FsbCBtYWtlVGFpbFJl
Y3Vyc2l2ZUNhbGwoSnVtcCBvbGRKdW1wKQorICAgIHsKKyAgICAgICAgb2xkSnVtcC5saW5rKHRo
aXMpOworICAgICAgICByZXR1cm4gdGFpbFJlY3Vyc2l2ZUNhbGwoKTsKKyAgICB9CisKKyAgICB2
b2lkIGxvYWREb3VibGUoSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MsIEZQUmVnaXN0ZXJJRCBkZXN0
LCBpbnQgZml4ZWQgPSAwKQorICAgIHsKKyNpZiBfX21pcHMgPT0gMQorICAgICAgICAvKgorICAg
ICAgICAgICAgbGkgICAgICAgICAgYWRkclRlbXAsIGFkZHJlc3Mub2Zmc2V0CisgICAgICAgICAg
ICBhZGR1ICAgICAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGJhc2UKKyAgICAgICAgICAgIGx3YzEg
ICAgICAgIGRlc3QsIDAoYWRkclRlbXApCisgICAgICAgICAgICBsd2MxICAgICAgICBkZXN0KzEs
IDQoYWRkclRlbXApCisgICAgICAgICAqLworICAgICAgICBtb3ZlKEltbTMyKGFkZHJlc3Mub2Zm
c2V0KSwgYWRkclRlbXBSZWdpc3RlciwgZml4ZWQpOworICAgICAgICBtX2Fzc2VtYmxlci5hZGR1
KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSk7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmx3YzEoZGVzdCwgYWRkclRlbXBSZWdpc3RlciwgMCk7CisgICAgICAg
IG1fYXNzZW1ibGVyLmx3YzEoRlBSZWdpc3RlcklEKGRlc3QgKyAxKSwgYWRkclRlbXBSZWdpc3Rl
ciwgNCk7CisjZWxzZQorICAgICAgICBpZiAoYWRkcmVzcy5vZmZzZXQgPj0gLTMyNzY4ICYmIGFk
ZHJlc3Mub2Zmc2V0IDw9IDMyNzY3ICYmIGZpeGVkID09IDApIHsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmxkYzEoZGVzdCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgIGx1aSAgICAgYWRkclRl
bXAsIChvZmZzZXQgKyAweDgwMDApID4+IDE2CisgICAgICAgICAgICAgICAgYWRkdSAgICBhZGRy
VGVtcCwgYWRkclRlbXAsIGJhc2UKKyAgICAgICAgICAgICAgICBsZGMxICAgIGRlc3QsIChvZmZz
ZXQgJiAweGZmZmYpKGFkZHJUZW1wKQorICAgICAgICAgICAgICAqLworICAgICAgICAgICAgbV9h
c3NlbWJsZXIubHVpKGFkZHJUZW1wUmVnaXN0ZXIsIChhZGRyZXNzLm9mZnNldCArIDB4ODAwMCkg
Pj4gMTYpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBh
ZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
bGRjMShkZXN0LCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAgIH0K
KyNlbmRpZgorICAgIH0KKworICAgIHZvaWQgc3RvcmVEb3VibGUoRlBSZWdpc3RlcklEIHNyYywg
SW1wbGljaXRBZGRyZXNzIGFkZHJlc3MsIGludCBmaXhlZCA9IDApCisgICAgeworI2lmIF9fbWlw
cyA9PSAxCisgICAgICAgIC8qCisgICAgICAgICAgICBsaSAgICAgICAgICBhZGRyVGVtcCwgYWRk
cmVzcy5vZmZzZXQKKyAgICAgICAgICAgIGFkZHUgICAgICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwg
YmFzZQorICAgICAgICAgICAgc3djMSAgICAgICAgZGVzdCwgMChhZGRyVGVtcCkKKyAgICAgICAg
ICAgIHN3YzEgICAgICAgIGRlc3QrMSwgNChhZGRyVGVtcCkKKyAgICAgICAgICovCisgICAgICAg
IG1vdmUoSW1tMzIoYWRkcmVzcy5vZmZzZXQpLCBhZGRyVGVtcFJlZ2lzdGVyLCBmaXhlZCk7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3Rl
ciwgYWRkcmVzcy5iYXNlKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3djMShzcmMsIGFkZHJUZW1w
UmVnaXN0ZXIsIDApOworICAgICAgICBtX2Fzc2VtYmxlci5zd2MxKEZQUmVnaXN0ZXJJRChzcmMg
KyAxKSwgYWRkclRlbXBSZWdpc3RlciwgNCk7CisjZWxzZQorICAgICAgICBpZiAoYWRkcmVzcy5v
ZmZzZXQgPj0gLTMyNzY4ICYmIGFkZHJlc3Mub2Zmc2V0IDw9IDMyNzY3ICYmIGZpeGVkID09IDAp
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zZGMxKHNyYywgYWRkcmVzcy5iYXNlLCBhZGRyZXNz
Lm9mZnNldCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAg
ICBsdWkgICAgIGFkZHJUZW1wLCAob2Zmc2V0ICsgMHg4MDAwKSA+PiAxNgorICAgICAgICAgICAg
ICAgIGFkZHUgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBiYXNlCisgICAgICAgICAgICAgICAgc2Rj
MSAgICBzcmMsIChvZmZzZXQgJiAweGZmZmYpKGFkZHJUZW1wKQorICAgICAgICAgICAgICAqLwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIubHVpKGFkZHJUZW1wUmVnaXN0ZXIsIChhZGRyZXNzLm9m
ZnNldCArIDB4ODAwMCkgPj4gMTYpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRy
VGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UpOworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuc2RjMShzcmMsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0
KTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorCisgICAgdm9pZCBhZGREb3VibGUoRlBSZWdp
c3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgeworICAg
ICAgICBtX2Fzc2VtYmxlci5hZGRfZChkZXN0LCBkZXN0LCBzcmMpOworICAgIH0KKworICAgIHZv
aWQgYWRkRG91YmxlKEFkZHJlc3Mgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0g
MCkKKyAgICB7CisgICAgICAgIGxvYWREb3VibGUoc3JjLCBmcFRlbXBSZWdpc3RlciwgZml4ZWQp
OworICAgICAgICBtX2Fzc2VtYmxlci5hZGRfZChkZXN0LCBkZXN0LCBmcFRlbXBSZWdpc3Rlcik7
CisgICAgfQorCisgICAgdm9pZCBzdWJEb3VibGUoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3Rl
cklEIGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zdWJf
ZChkZXN0LCBkZXN0LCBzcmMpOworICAgIH0KKworICAgIHZvaWQgc3ViRG91YmxlKEFkZHJlc3Mg
c3JjLCBGUFJlZ2lzdGVySUQgZGVzdCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIGxv
YWREb3VibGUoc3JjLCBmcFRlbXBSZWdpc3RlciwgZml4ZWQpOworICAgICAgICBtX2Fzc2VtYmxl
ci5zdWJfZChkZXN0LCBkZXN0LCBmcFRlbXBSZWdpc3Rlcik7CisgICAgfQorCisgICAgdm9pZCBt
dWxEb3VibGUoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRlc3QsIGludCBmaXhlZCA9
IDApCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5tdWxfZChkZXN0LCBkZXN0LCBzcmMpOwor
ICAgIH0KKworICAgIHZvaWQgbXVsRG91YmxlKEFkZHJlc3Mgc3JjLCBGUFJlZ2lzdGVySUQgZGVz
dCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIGxvYWREb3VibGUoc3JjLCBmcFRlbXBS
ZWdpc3RlciwgZml4ZWQpOworICAgICAgICBtX2Fzc2VtYmxlci5tdWxfZChkZXN0LCBkZXN0LCBm
cFRlbXBSZWdpc3Rlcik7CisgICAgfQorCisgICAgdm9pZCBjb252ZXJ0SW50MzJUb0RvdWJsZShS
ZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRlc3QsIGludCBmaXhlZCA9IDApCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5tdGMxKHNyYywgZnBUZW1wUmVnaXN0ZXIpOworICAgICAgICBt
X2Fzc2VtYmxlci5jdnRfZF93KGRlc3QsIGZwVGVtcFJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICBK
dW1wIGJyYW5jaERvdWJsZShEb3VibGVDb25kaXRpb24gY29uZCwgRlBSZWdpc3RlcklEIGxlZnQs
IEZQUmVnaXN0ZXJJRCByaWdodCwgaW50IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIGlmIChj
b25kID09IERvdWJsZUVxdWFsKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jX2VxX2QobGVm
dCwgcmlnaHQpOworICAgICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuYmMxdCgpKTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoY29uZCA9PSBEb3VibGVHcmVhdGVyVGhhbikgeworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuY19sdF9kKHJpZ2h0LCBsZWZ0KTsgLy8gcmV2ZXJzZQorICAg
ICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuYmMxdCgpKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoY29uZCA9PSBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwpIHsKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmNfbGVfZChyaWdodCwgbGVmdCk7IC8vIHJldmVyc2UKKyAgICAgICAgICAg
IHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmJjMXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KGNvbmQgPT0gRG91YmxlTGVzc1RoYW4pIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNfbHRf
ZChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5iYzF0
KCkpOworICAgICAgICB9CisgICAgICAgIGlmIChjb25kID09IERvdWJsZUxlc3NUaGFuT3JFcXVh
bCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY19sZV9kKGxlZnQsIHJpZ2h0KTsKKyAgICAg
ICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmJjMXQoKSk7CisgICAgICAgIH0KKyAgICAg
ICAgQVNTRVJUKDApOworCisgICAgICAgIHJldHVybiBKdW1wKCk7CisgICAgfQorCisgICAgLy8g
VHJ1bmNhdGVzICdzcmMnIHRvIGFuIGludGVnZXIsIGFuZCBwbGFjZXMgdGhlIHJlc3VsdGluZyAn
ZGVzdCcuCisgICAgLy8gSWYgdGhlIHJlc3VsdCBpcyBub3QgcmVwcmVzZW50YWJsZSBhcyBhIDMy
IGJpdCB2YWx1ZSwgYnJhbmNoLgorICAgIC8vIE1heSBhbHNvIGJyYW5jaCBmb3Igc29tZSB2YWx1
ZXMgdGhhdCBhcmUgcmVwcmVzZW50YWJsZSBpbiAzMiBiaXRzCisgICAgLy8gKHNwZWNpZmljYWxs
eSwgaW4gdGhpcyBjYXNlLCBJTlRfTUFYIDB4N2ZmZmZmZmYpLgorICAgIEp1bXAgYnJhbmNoVHJ1
bmNhdGVEb3VibGVUb0ludDMyKEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCwgaW50
IGZpeGVkID0gMCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnRydW5jX3dfZChmcFRlbXBS
ZWdpc3RlcixzcmMpOworICAgICAgICBtX2Fzc2VtYmxlci5tZmMxKGRlc3QsIGZwVGVtcFJlZ2lz
dGVyKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKEVxdWFsLCBkZXN0LCBJbW0zMigweDdmZmZm
ZmZmKSwgZml4ZWQpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgTGlua0J1
ZmZlcjsKKyAgICBmcmllbmQgY2xhc3MgUmVwYXRjaEJ1ZmZlcjsKKworICAgIHN0YXRpYyB2b2lk
IGxpbmtDYWxsKHZvaWQqIGNvZGUsIENhbGwgY2FsbCwgRnVuY3Rpb25QdHIgZnVuY3Rpb24pCisg
ICAgeworICAgICAgICBNSVBTQXNzZW1ibGVyOjpsaW5rQ2FsbChjb2RlLCBjYWxsLm1fam1wLCBm
dW5jdGlvbi52YWx1ZSgpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChD
b2RlTG9jYXRpb25DYWxsIGNhbGwsIENvZGVMb2NhdGlvbkxhYmVsIGRlc3RpbmF0aW9uKQorICAg
IHsKKyAgICAgICAgTUlQU0Fzc2VtYmxlcjo6cmVsaW5rQ2FsbChjYWxsLmRhdGFMb2NhdGlvbigp
LCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICB9CisKKyAgICBzdGF0aWMg
dm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGRlc3Rp
bmF0aW9uKQorICAgIHsKKyAgICAgICAgTUlQU0Fzc2VtYmxlcjo6cmVsaW5rQ2FsbChjYWxsLmRh
dGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICB9CisK
K307CisKK30KKworI2VuZGlmCisKKyNlbmRpZiAvLyBNYWNyb0Fzc2VtYmxlck1JUFNfaApJbmRl
eDogaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGppdC9KSVRPcGNvZGVzLmNwcAko
cmV2aXNpb24gNDk5MjYpCisrKyBqaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE3OTcsNiArMTc5Nyw1NiBAQAogCiAgICAgYWRkUHRyKEltbTMyKHNpemVvZihBcmdMaXN0KSks
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAorI2VsaWYgUExBVEZPUk0oTUlQUykKKyAgICBlbWl0
R2V0RnJvbUNhbGxGcmFtZUhlYWRlcjMyKFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCwgcmVn
VDApOworCisgICAgLy8gQWxsb2NhdGUgc3RhY2sgc3BhY2UgZm9yIG91ciBhcmdsaXN0CisgICAg
Q09NUElMRV9BU1NFUlQoKHNpemVvZihBcmdMaXN0KSAmIDB4NykgPT0gMCwgQXJnTGlzdF9zaG91
bGRfYnlfOGJ5dGVfYWxpZ25lZCk7CisgICAgc3ViUHRyKEltbTMyKHNpemVvZihBcmdMaXN0KSAr
IDI0KSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgLy8gU2V0IHVwIGFyZ3VtZW50cwor
ICAgIHN1YlB0cihJbW0zMigxKSwgcmVnVDApOyAvLyBEb24ndCBpbmNsdWRlICd0aGlzJyBpbiBh
cmdjb3VudAorCisgICAgLy8gUHVzaCBhcmdjb3VudCB0byAyNCArIG9mZnNldCgkc3ApCisgICAg
c3RvcmVQdHIocmVnVDAsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIDI0ICsgT0JKRUNU
X09GRlNFVE9GKEFyZ0xpc3QsIG1fYXJnQ291bnQpKSk7CisKKyAgICAvLyBDYWxjdWxhdGUgdGhl
IHN0YXJ0IG9mIHRoZSBjYWxsZnJhbWUgaGVhZGVyLCBhbmQgc3RvcmUgaW4gcmVnVDEKKyAgICBt
b3ZlKGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMSk7CisgICAgc3ViMzIoSW1tMzIoUmVnaXN0ZXJG
aWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplICogKGludDMyX3Qpc2l6ZW9mKFJlZ2lzdGVyKSksIHJl
Z1QxKTsKKworICAgIC8vIENhbGN1bGF0ZSBzdGFydCBvZiBhcmd1bWVudHMgYXMgY2FsbGZyYW1l
IGhlYWRlciAtIHNpemVvZihSZWdpc3RlcikgKiBhcmdjb3VudCAocmVnVDEpCisgICAgbXVsMzIo
SW1tMzIoc2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1QwLCByZWdUMCk7CisgICAgc3ViUHRyKHJlZ1Qw
LCByZWdUMSk7CisKKyAgICAvLyBwdXNoIHBvaW50ZXIgdG8gYXJndW1lbnRzIHRvIDI0ICsgb2Zm
c2V0KCRzcCkKKyAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rl
ciwgMjQgKyBPQkpFQ1RfT0ZGU0VUT0YoQXJnTGlzdCwgbV9hcmdzKSkpOworCisgICAgLy8gU2V0
dXAgYXJnMzogcmVnVDEgY3VycmVudGx5IHBvaW50cyB0byB0aGUgZmlyc3QgYXJndW1lbnQsIHJl
Z1QxLXNpemVvZihSZWdpc3RlcikgcG9pbnRzIHRvICd0aGlzJworICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMSwgLShpbnQzMl90KXNpemVvZihSZWdpc3RlcikpLCBNSVBTUmVnaXN0ZXJzOjphMyk7
CisKKyAgICAvLyBTZXR1cCBhcmcyOgorICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRy
KFJlZ2lzdGVyRmlsZTo6Q2FsbGVlLCBNSVBTUmVnaXN0ZXJzOjphMik7CisKKyAgICAvLyBTZXR1
cCBhcmcxOgorICAgIG1vdmUoY2FsbEZyYW1lUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6OmExKTsK
KworICAgIC8vIFNldHVwIGFyZzQ6IEFyZ0xpc3QgaXMgcGFzc2VkIGJ5IHJlZmVyZW5jZS4gIEF0
IDE2KCRzcCksIHN0b3JlICgkc3AgKyAyNCkKKyAgICBhZGRQdHIoSW1tMzIoMjQpLCBzdGFja1Bv
aW50ZXJSZWdpc3RlciwgcmVnVDIpOworICAgIHN0b3JlUHRyKHJlZ1QyLCBBZGRyZXNzKHN0YWNr
UG9pbnRlclJlZ2lzdGVyLCAxNikpOworCisgICAgLy8gU2V0dXAgYXJnMCBhcyAyMCgkc3ApIHRv
IGhvbGQgdGhlIHJldHVybmVkIHN0cnVjdHVyZS4KKyAgICBBU1NFUlQoc2l6ZW9mKEpTVmFsdWUp
ID09IDQpOworICAgIGFkZFB0cihJbW0zMigyMCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBNSVBT
UmVnaXN0ZXJzOjphMCk7CisKKyAgICAvLyBDYWxsCisgICAgY2FsbChBZGRyZXNzKE1JUFNSZWdp
c3RlcnM6OmEyLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9kYXRhKSkpOworCisgICAg
Ly8gR2V0IHJldHVybmVkIHZhbHVlIGZyb20gMCgkdjApIHdoaWNoIGlzIHRoZSBzYW1lIGFzIDIw
KCRzcCkKKyAgICBsb2FkUHRyKEFkZHJlc3MocmV0dXJuVmFsdWVSZWdpc3RlciwgMCksIHJldHVy
blZhbHVlUmVnaXN0ZXIpOworCisgICAgLy8gUmVzdG9yZSBzdGFjayBzcGFjZQorICAgIGFkZFB0
cihJbW0zMihzaXplb2YoQXJnTGlzdCkgKyAyNCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKwog
I2VsaWYgRU5BQkxFKEpJVF9PUFRJTUlaRV9OQVRJVkVfQ0FMTCkKICNlcnJvciAiSklUX09QVElN
SVpFX05BVElWRV9DQUxMIG5vdCB5ZXQgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0uIgogI2Vs
c2UKSW5kZXg6IGppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaml0L0pJVFN0dWJzLmNw
cAkocmV2aXNpb24gNDk5MjYpCisrKyBqaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01NzEsNiArNTcxLDEwMCBAQAogICAgICJtb3YgcGMsIGxyIiAiXG4iCiApOwogCisjZWxpZiBQ
TEFURk9STShNSVBTKQorCisjaWYgVVNFKEpJVF9TVFVCX0FSR1VNRU5UX1ZBX0xJU1QpCisjZXJy
b3IgIkpJVF9TVFVCX0FSR1VNRU5UX1ZBX0xJU1Qgbm90IHN1cHBvcnRlZCBvbiBNSVBTLiIKKyNl
bmRpZgorCithc20gdm9sYXRpbGUgKAorIi50ZXh0IiAiXG4iCisiLmFsaWduIDIiICJcbiIKKyIu
c2V0IG5vcmVvcmRlciIgIlxuIgorIi5zZXQgbm9tYWNybyIgIlxuIgorIi5zZXQgbm9taXBzMTYi
ICJcbiIKKyIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGN0aVRyYW1wb2xpbmUpICJcbiIKKyIuZW50
ICIgU1lNQk9MX1NUUklORyhjdGlUcmFtcG9saW5lKSAiXG4iCitTWU1CT0xfU1RSSU5HKGN0aVRy
YW1wb2xpbmUpICI6IiAiXG4iCisgICAgImFkZGl1ICQyOSwkMjksLTcyIiAiXG4iCisgICAgInN3
ICAgICQzMSw0NCgkMjkpIiAiXG4iCisgICAgInN3ICAgICQxOCw0MCgkMjkpIiAiXG4iCisgICAg
InN3ICAgICQxNywzNigkMjkpIiAiXG4iCisgICAgInN3ICAgICQxNiwzMigkMjkpIiAiXG4iCisj
aWYgZGVmaW5lZChfX1BJQ19fKQorICAgICJzdyAgICAkMjgsMjgoJDI5KSIgIlxuIgorI2VuZGlm
CisgICAgIm1vdmUgICQxNiwkNiAgICAgICAjIHNldCBjYWxsRnJhbWVSZWdpc3RlciIgIlxuIgor
ICAgICJsaSAgICAkMTcsNTEyICAgICAgIyBzZXQgdGltZW91dENoZWNrUmVnaXN0ZXIiICJcbiIK
KyAgICAibW92ZSAgJDI1LCQ0ICAgICAgICMgbW92ZSBleGVjdXRhYmxlQWRkcmVzcyB0byB0OSIg
IlxuIgorICAgICJzdyAgICAkNSw1MigkMjkpICAgIyBzdG9yZSByZWdpc3RlckZpbGUgdG8gY3Vy
cmVudCBzdGFjayIgIlxuIgorICAgICJzdyAgICAkNiw1NigkMjkpICAgIyBzdG9yZSBjYWxsRnJh
bWUgdG8gY3VyZW50IHN0YWNrIiAiXG4iCisgICAgInN3ICAgICQ3LDYwKCQyOSkgICAjIHN0b3Jl
IGV4Y2VwdGlvbiB0byBjdXJyZW50IHN0YWNrIiAiXG4iCisgICAgImx3ICAgICQ4LDg4KCQyOSkg
ICAjIGxvYWQgZW5hYmxlUHJvZmlsZXJSZWZlcmVuY2UgZnJvbSBwcmV2aW91cyBzdGFjayIgIlxu
IgorICAgICJsdyAgICAkOSw5MigkMjkpICAgIyBsb2FkIGdsb2JhbERhdGEgZnJvbSBwcmV2aW91
cyBzdGFjayIgIlxuIgorICAgICJzdyAgICAkOCw2NCgkMjkpICAgIyBzdG9yZSBlbmFibGVQcm9m
aWxlclJlZmVyZW5jZSB0byBjdXJyZW50IHN0YWNrIiAiXG4iCisgICAgImphbHIgICQyNSIgIlxu
IgorICAgICJzdyAgICAkOSw2OCgkMjkpICAgIyBzdG9yZSBnbG9iYWxEYXRhIHRvIGN1cnJlbnQg
c3RhY2siICJcbiIKKyAgICAibHcgICAgJDE2LDMyKCQyOSkiICJcbiIKKyAgICAibHcgICAgJDE3
LDM2KCQyOSkiICJcbiIKKyAgICAibHcgICAgJDE4LDQwKCQyOSkiICJcbiIKKyAgICAibHcgICAg
JDMxLDQ0KCQyOSkiICJcbiIKKyAgICAianIgICAgJDMxIiAiXG4iCisgICAgImFkZGl1ICQyOSwk
MjksNzIiICJcbiIKKyIuc2V0IHJlb3JkZXIiICJcbiIKKyIuc2V0IG1hY3JvIiAiXG4iCisiLmVu
ZCAiIFNZTUJPTF9TVFJJTkcoY3RpVHJhbXBvbGluZSkgIlxuIgorKTsKKworYXNtIHZvbGF0aWxl
ICgKKyIudGV4dCIgIlxuIgorIi5hbGlnbiAyIiAiXG4iCisiLnNldCBub3Jlb3JkZXIiICJcbiIK
KyIuc2V0IG5vbWFjcm8iICJcbiIKKyIuc2V0IG5vbWlwczE2IiAiXG4iCisiLmdsb2JsICIgU1lN
Qk9MX1NUUklORyhjdGlWTVRocm93VHJhbXBvbGluZSkgIlxuIgorIi5lbnQgIiBTWU1CT0xfU1RS
SU5HKGN0aVZNVGhyb3dUcmFtcG9saW5lKSAiXG4iCitTWU1CT0xfU1RSSU5HKGN0aVZNVGhyb3dU
cmFtcG9saW5lKSAiOiIgIlxuIgorI2lmIGRlZmluZWQoX19QSUNfXykKKyAgICAibHcgICAgJDI4
LDI4KCQyOSkiICJcbiIKKyIuc2V0IG1hY3JvIiAiXG4iCisjZW5kaWYKKyAgICAiamFsICIgU1lN
Qk9MX1NUUklORyhjdGlfdm1fdGhyb3cpICJcbiIKKyAgICAibW92ZSAgJDQsICQyOSIgIlxuIgor
I2lmIGRlZmluZWQoX19QSUNfXykKKyIuc2V0IG5vbWFjcm8iICJcbiIKKyNlbmRpZgorICAgICJs
dyAgICAkMTYsMzIoJDI5KSIgIlxuIgorICAgICJsdyAgICAkMTcsMzYoJDI5KSIgIlxuIgorICAg
ICJsdyAgICAkMTgsNDAoJDI5KSIgIlxuIgorICAgICJsdyAgICAkMzEsNDQoJDI5KSIgIlxuIgor
ICAgICJqciAgICAkMzEiICJcbiIKKyAgICAiYWRkaXUgJDI5LCQyOSw3MiIgIlxuIgorIi5zZXQg
cmVvcmRlciIgIlxuIgorIi5zZXQgbWFjcm8iICJcbiIKKyIuZW5kICIgU1lNQk9MX1NUUklORyhj
dGlWTVRocm93VHJhbXBvbGluZSkgIlxuIgorKTsKKworYXNtIHZvbGF0aWxlICgKKyIudGV4dCIg
IlxuIgorIi5hbGlnbiAyIiAiXG4iCisiLnNldCBub3Jlb3JkZXIiICJcbiIKKyIuc2V0IG5vbWFj
cm8iICJcbiIKKyIuc2V0IG5vbWlwczE2IiAiXG4iCisiLmdsb2JsICIgU1lNQk9MX1NUUklORyhj
dGlPcFRocm93Tm90Q2F1Z2h0KSAiXG4iCisiLmVudCAiIFNZTUJPTF9TVFJJTkcoY3RpT3BUaHJv
d05vdENhdWdodCkgIlxuIgorU1lNQk9MX1NUUklORyhjdGlPcFRocm93Tm90Q2F1Z2h0KSAiOiIg
IlxuIgorICAgICJsdyAgICAkMTYsMzIoJDI5KSIgIlxuIgorICAgICJsdyAgICAkMTcsMzYoJDI5
KSIgIlxuIgorICAgICJsdyAgICAkMTgsNDAoJDI5KSIgIlxuIgorICAgICJsdyAgICAkMzEsNDQo
JDI5KSIgIlxuIgorICAgICJqciAgICAkMzEiICJcbiIKKyAgICAiYWRkaXUgJDI5LCQyOSw3MiIg
IlxuIgorIi5zZXQgcmVvcmRlciIgIlxuIgorIi5zZXQgbWFjcm8iICJcbiIKKyIuZW5kICIgU1lN
Qk9MX1NUUklORyhjdGlPcFRocm93Tm90Q2F1Z2h0KSAiXG4iCispOworCiAjZWxpZiBDT01QSUxF
UihNU1ZDKQogCiAjaWYgVVNFKEpJVF9TVFVCX0FSR1VNRU5UX1ZBX0xJU1QpCkBAIC02NjUsNiAr
NzU5LDIxIEBACiAKICAgICBBU1NFUlQoT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0Zy
YW1lLCB0aHVua1JldHVybkFkZHJlc3MpID09IDB4MUMpOwogI2VuZGlmCisKKyNpZiBQTEFURk9S
TShNSVBTKQorICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUs
IHByZXNlcnZlZEdQKSA9PSAyOCk7CisgICAgQVNTRVJUKE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3Qg
SklUU3RhY2tGcmFtZSwgcHJlc2VydmVkUzApID09IDMyKTsKKyAgICBBU1NFUlQoT0JKRUNUX09G
RlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBwcmVzZXJ2ZWRTMSkgPT0gMzYpOworICAgIEFT
U0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIHByZXNlcnZlZFMyKSA9
PSA0MCk7CisgICAgQVNTRVJUKE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwg
cHJlc2VydmVkUmV0dXJuQWRkcmVzcykgPT0gNDQpOworICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VU
T0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIHRodW5rUmV0dXJuQWRkcmVzcykgPT0gNDgpOworICAg
IEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIHJlZ2lzdGVyRmls
ZSkgPT0gNTIpOworICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJh
bWUsIGNhbGxGcmFtZSkgPT0gNTYpOworICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0
IEpJVFN0YWNrRnJhbWUsIGV4Y2VwdGlvbikgPT0gNjApOworICAgIEFTU0VSVChPQkpFQ1RfT0ZG
U0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIGVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSkgPT0g
NjQpOworICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIGds
b2JhbERhdGEpID09IDY4KTsKKworI2VuZGlmCiB9CiAKICNpZiBFTkFCTEUoSklUX09QVElNSVpF
X1BST1BFUlRZX0FDQ0VTUykKQEAgLTkwOCw2ICsxMDE3LDU5IEBACiAgICAgICAgICk7IFwKICAg
ICBydHlwZSBKSVRTdHViVGh1bmtlZF8jI29wKFNUVUJfQVJHU19ERUNMQVJBVElPTikgXAogCisj
ZWxpZiBQTEFURk9STShNSVBTKQorI2lmICFkZWZpbmVkKF9fUElDX18pCisjZGVmaW5lIERFRklO
RV9TVFVCX0ZVTkNUSU9OKHJ0eXBlLCBvcCkgXAorICAgIGV4dGVybiAiQyIgeyBcCisgICAgICAg
IHJ0eXBlIEpJVFN0dWJUaHVua2VkXyMjb3AoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsgXAorICAg
IH07IFwKKyAgICBhc20gdm9sYXRpbGUgKCBcCisgICAgICAgICIudGV4dCIgIlxuIiBcCisgICAg
ICAgICIuYWxpZ24gMiIgIlxuIiBcCisgICAgICAgICIuc2V0IG5vcmVvcmRlciIgIlxuIiBcCisg
ICAgICAgICIuc2V0IG5vbWFjcm8iICJcbiIgXAorICAgICAgICAiLnNldCBub21pcHMxNiIgIlxu
IiBcCisgICAgICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGN0aV8jI29wKSAiXG4iIFwKKyAg
ICAgICAgIi5lbnQgIiBTWU1CT0xfU1RSSU5HKGN0aV8jI29wKSAiXG4iIFwKKyAgICAgICAgU1lN
Qk9MX1NUUklORyhjdGlfIyNvcCkgIjoiICJcbiIgXAorICAgICAgICAic3cgICAgJDMxLCA0OCgk
MjkpIiAiXG4iIFwKKyAgICAgICAgImphbCAiIFNZTUJPTF9TVFJJTkcoSklUU3R1YlRodW5rZWRf
IyNvcCkgIlxuIiBcCisgICAgICAgICJub3AiICJcbiIgXAorICAgICAgICAibHcgICAgJDMxLCA0
OCgkMjkpIiAiXG4iIFwKKyAgICAgICAgImpyICAgICQzMSIgIlxuIiBcCisgICAgICAgICJub3Ai
ICJcbiIgXAorICAgICAgICAiLnNldCByZW9yZGVyIiAiXG4iIFwKKyAgICAgICAgIi5zZXQgbWFj
cm8iICJcbiIgXAorICAgICAgICAiLmVuZCAiIFNZTUJPTF9TVFJJTkcoY3RpXyMjb3ApICJcbiIg
XAorICAgICAgICApOyBcCisgICAgcnR5cGUgSklUU3R1YlRodW5rZWRfIyNvcChTVFVCX0FSR1Nf
REVDTEFSQVRJT04pCisKKyNlbHNlIC8vIF9fUElDX18KKyNkZWZpbmUgREVGSU5FX1NUVUJfRlVO
Q1RJT04ocnR5cGUsIG9wKSBcCisgICAgZXh0ZXJuICJDIiB7IFwKKyAgICAgICAgcnR5cGUgSklU
U3R1YlRodW5rZWRfIyNvcChTVFVCX0FSR1NfREVDTEFSQVRJT04pOyBcCisgICAgfTsgXAorICAg
IGFzbSB2b2xhdGlsZSAoIFwKKyAgICAgICAgIi50ZXh0IiAiXG4iIFwKKyAgICAgICAgIi5hbGln
biAyIiAiXG4iIFwKKyAgICAgICAgIi5zZXQgbm9yZW9yZGVyIiAiXG4iIFwKKyAgICAgICAgIi5z
ZXQgbm9taXBzMTYiICJcbiIgXAorICAgICAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhjdGlf
IyNvcCkgIlxuIiBcCisgICAgICAgICIuZW50ICIgU1lNQk9MX1NUUklORyhjdGlfIyNvcCkgIlxu
IiBcCisgICAgICAgIFNZTUJPTF9TVFJJTkcoY3RpXyMjb3ApICI6IiAiXG4iIFwKKyAgICAgICAg
Imx3ICAgICQyOCwgMjgoJDI5KSIgIlxuIiBcCisgICAgICAgICJzdyAgICAkMzEsIDQ4KCQyOSki
ICJcbiIgXAorICAgICAgICAiamFsICIgU1lNQk9MX1NUUklORyhKSVRTdHViVGh1bmtlZF8jI29w
KSAiXG4iIFwKKyAgICAgICAgIm5vcCIgIlxuIiBcCisgICAgICAgICJsdyAgICAkMzEsIDQ4KCQy
OSkiICJcbiIgXAorICAgICAgICAianIgICAgJDMxIiAiXG4iIFwKKyAgICAgICAgIm5vcCIgIlxu
IiBcCisgICAgICAgICIuc2V0IHJlb3JkZXIiICJcbiIgXAorICAgICAgICAiLmVuZCAiIFNZTUJP
TF9TVFJJTkcoY3RpXyMjb3ApICJcbiIgXAorICAgICAgICApOyBcCisgICAgcnR5cGUgSklUU3R1
YlRodW5rZWRfIyNvcChTVFVCX0FSR1NfREVDTEFSQVRJT04pCisKKyNlbmRpZgogI2Vsc2UKICNk
ZWZpbmUgREVGSU5FX1NUVUJfRlVOQ1RJT04ocnR5cGUsIG9wKSBydHlwZSBKSVRfU1RVQiBjdGlf
IyNvcChTVFVCX0FSR1NfREVDTEFSQVRJT04pCiAjZW5kaWYKSW5kZXg6IGppdC9KSVRTdHVicy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGppdC9KSVRTdHVicy5oCShyZXZpc2lvbiA0OTkyNikKKysrIGppdC9K
SVRTdHVicy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzksNiArMTc5LDMwIEBACiAgICAgICAgIC8v
IFdoZW4gSklUIGNvZGUgbWFrZXMgYSBjYWxsLCBpdCBwdXNoZXMgaXRzIHJldHVybiBhZGRyZXNz
IGp1c3QgYmVsb3cgdGhlIHJlc3Qgb2YgdGhlIHN0YWNrLgogICAgICAgICBSZXR1cm5BZGRyZXNz
UHRyKiByZXR1cm5BZGRyZXNzU2xvdCgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UmV0dXJu
QWRkcmVzc1B0cio+KHRoaXMpIC0gMTsgfQogICAgIH07CisjZWxpZiBQTEFURk9STShNSVBTKQor
ICAgIHN0cnVjdCBKSVRTdGFja0ZyYW1lIHsKKyAgICAgICAgdm9pZCogcmVzZXJ2ZWQ7IC8vIFVu
dXNlZAorICAgICAgICBKSVRTdHViQXJnIGFyZ3NbNl07CisKKyAgICAgICAgdm9pZCogcHJlc2Vy
dmVkR1A7IC8vIHN0b3JlIEdQIHdoZW4gdXNpbmcgUElDIGNvZGUKKyAgICAgICAgdm9pZCogcHJl
c2VydmVkUzA7CisgICAgICAgIHZvaWQqIHByZXNlcnZlZFMxOworICAgICAgICB2b2lkKiBwcmVz
ZXJ2ZWRTMjsKKyAgICAgICAgdm9pZCogcHJlc2VydmVkUmV0dXJuQWRkcmVzczsKKworICAgICAg
ICBSZXR1cm5BZGRyZXNzUHRyIHRodW5rUmV0dXJuQWRkcmVzczsKKworICAgICAgICAvLyBUaGVz
ZSBhcmd1bWVudHMgcGFzc2VkIGluIGExLi5hMyAoYTAgY29udGFpbmVkIHRoZSBlbnRyeSBjb2Rl
IHBvaW50ZWQsIHdoaWNoIGlzIG5vdCBwcmVzZXJ2ZWQpCisgICAgICAgIFJlZ2lzdGVyRmlsZSog
cmVnaXN0ZXJGaWxlOworICAgICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZTsKKyAgICAgICAgSlNW
YWx1ZSogZXhjZXB0aW9uOworCisgICAgICAgIC8vIFRoZXNlIGFyZ3VtZW50cyBwYXNzZWQgb24g
dGhlIHN0YWNrLgorICAgICAgICBQcm9maWxlcioqIGVuYWJsZWRQcm9maWxlclJlZmVyZW5jZTsK
KyAgICAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhOworCisgICAgICAgIFJldHVybkFkZHJl
c3NQdHIqIHJldHVybkFkZHJlc3NTbG90KCkgeyByZXR1cm4gJnRodW5rUmV0dXJuQWRkcmVzczsg
fQorICAgIH07CiAjZWxzZQogI2Vycm9yICJKSVRTdGFja0ZyYW1lIG5vdCBkZWZpbmVkIGZvciB0
aGlzIHBsYXRmb3JtLiIKICNlbmRpZgpJbmRleDogaml0L0pJVElubGluZU1ldGhvZHMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBqaXQvSklUSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiA0OTkyNikKKysrIGpp
dC9KSVRJbmxpbmVNZXRob2RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2MSw2ICsxNjEsMjMgQEAK
ICAgICBsb2FkUHRyKGFkZHJlc3MsIGxpbmtSZWdpc3Rlcik7CiB9CiAKKyNlbGlmIFBMQVRGT1JN
KE1JUFMpCisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnByZXNlcnZlUmV0dXJuQWRkcmVzc0Fm
dGVyQ2FsbChSZWdpc3RlcklEIHJlZykKK3sKKyAgICBtb3ZlKHJldHVybkFkZHJlc3NSZWdpc3Rl
ciwgcmVnKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cmVzdG9yZVJldHVybkFkZHJl
c3NCZWZvcmVSZXR1cm4oUmVnaXN0ZXJJRCByZWcpCit7CisgICAgbW92ZShyZWcsIHJldHVybkFk
ZHJlc3NSZWdpc3Rlcik7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnJlc3RvcmVSZXR1
cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEFkZHJlc3MgYWRkcmVzcykKK3sKKyAgICBsb2FkUHRyKGFk
ZHJlc3MsIHJldHVybkFkZHJlc3NSZWdpc3Rlcik7Cit9CisKICNlbHNlIC8vIFBMQVRGT1JNKFg4
NikgfHwgUExBVEZPUk0oWDg2XzY0KSB8fCBQTEFURk9STShBUk1fVFJBRElUSU9OQUwpCiAKIEFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChSZWdp
c3RlcklEIHJlZykKSW5kZXg6IGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAkocmV2aXNpb24gNDk5MjYpCisrKyBqaXQvRXhl
Y3V0YWJsZUFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODMsNiArMTgzLDMyIEBACiAg
ICAgc3RhdGljIHZvaWQgY2FjaGVGbHVzaCh2b2lkKiwgc2l6ZV90KQogICAgIHsKICAgICB9Cisj
ZWxpZiBQTEFURk9STShNSVBTKQorICAgIHN0YXRpYyB2b2lkIGNhY2hlRmx1c2godm9pZCogY29k
ZSwgc2l6ZV90IHNpemUpCisgICAgeworI2lmIENPTVBJTEVSKEdDQykgJiYgKEdDQ19WRVJTSU9O
ID49IDMwNDA2KQorI2lmIF9fbWlwc19pc2FfcmV2ID09IDIgJiYgKEdDQ19WRVJTSU9OIDwgNDA1
MDApCisgICAgICAgIGludCBsaW5lX3NpemU7CisgICAgICAgIGFzbSAoInJkaHdyICUwLCAkMSIg
OiAiPXIiIChsaW5lX3NpemUpKTsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gTW9kaWZ5ICJzdGFy
dCIgYW5kICJlbmQiIHRvIGF2b2lkIEdDQyA0LjMgYnVnIGluCisgICAgICAgIC8vIG1pcHNfZXhw
YW5kX3N5bmNpX2xvb3AgdGhhdCBtYXkgZXhlY3V0ZSBzeW5jaSBvbmUgbW9yZSB0aW1lLgorICAg
ICAgICAvLyAic3RhcnQiIHBvaW50cyB0byB0aGUgZmlzcnQgYnl0ZSBvZiB0aGUgY2FjaGUgbGlu
ZS4KKyAgICAgICAgLy8gImVuZCIgcG9pbnRzIHRvIHRoZSBsYXN0IGJ5dGUgb2YgdGhlIGxpbmUg
YmVmb3JlIHRoZSBsYXN0IGNhY2hlIGxpbmUuCisgICAgICAgIC8vIEJlY2F1c2Ugc2l6ZSBpcyBh
bHdheXMgYSBtdWx0aXBsZSBvZiA0LCB0aGlzIGlzIHNhZmUgdG8gc2V0CisgICAgICAgIC8vICJl
bmQiIHRvIHRoZSBsYXN0IGJ5dGUuCisgICAgICAgIC8vCisgICAgICAgIGludCBzdGFydCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGNvZGUpICYgKC1saW5lX3NpemUpOworICAgICAgICBp
bnQgZW5kID0gKChyZWludGVycHJldF9jYXN0PGludHB0cl90Pihjb2RlKSArIHNpemUpICYgKC1s
aW5lX3NpemUpKSAtIDE7CisgICAgICAgIF9fY2xlYXJfY2FjaGUocmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4oc3RhcnQpLCByZWludGVycHJldF9jYXN0PGNoYXIqPihlbmQpKTsKKyNlbHNlCisgICAg
ICAgIGludCBlbmQgPSByZWludGVycHJldF9jYXN0PGludHB0cl90Pihjb2RlKSArIHNpemU7Cisg
ICAgICAgIF9fY2xlYXJfY2FjaGUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY29kZSksIHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KGVuZCkpOworI2VuZGlmCisjZWxzZQorICAgICAgICAjZXJyb3Ig
IldlIG5lZWQgR0NDIHRvIHByb3ZpZGUgX19jbGVhcl9jYWNoZSBmb3IgTUlQUyIKKyNlbmRpZgor
ICAgIH0KICNlbGlmIFBMQVRGT1JNKEFSTV9USFVNQjIpICYmIFBMQVRGT1JNKElQSE9ORSkKICAg
ICBzdGF0aWMgdm9pZCBjYWNoZUZsdXNoKHZvaWQqIGNvZGUsIHNpemVfdCBzaXplKQogICAgIHsK
SW5kZXg6IGppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBqaXQvSklULmgJKHJldmlzaW9uIDQ5OTI2
KQorKysgaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjcsNiArMjY3LDI4IEBACiAgICAg
ICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQgZnBSZWdUMCA9IEFSTVJlZ2lzdGVyczo6ZDA7
CiAgICAgICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQgZnBSZWdUMSA9IEFSTVJlZ2lzdGVy
czo6ZDE7CiAgICAgICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQgZnBSZWdUMiA9IEFSTVJl
Z2lzdGVyczo6ZDI7CisjZWxpZiBQTEFURk9STShNSVBTKQorICAgICAgICBzdGF0aWMgY29uc3Qg
UmVnaXN0ZXJJRCByZXR1cm5WYWx1ZVJlZ2lzdGVyID0gTUlQU1JlZ2lzdGVyczo6djA7CisgICAg
ICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGNhY2hlZFJlc3VsdFJlZ2lzdGVyID0gTUlQU1Jl
Z2lzdGVyczo6djA7CisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGZpcnN0QXJndW1l
bnRSZWdpc3RlciA9IE1JUFNSZWdpc3RlcnM6OmEwOworCisgICAgICAgIC8vIHJlZ1QwIG11c3Qg
YmUgdjAgZm9yIHJldHVybmluZyBhIDMyLWJpdCB2YWx1ZS4KKyAgICAgICAgc3RhdGljIGNvbnN0
IFJlZ2lzdGVySUQgcmVnVDAgPSBNSVBTUmVnaXN0ZXJzOjp2MDsKKworICAgICAgICAvLyByZWdU
MSBtdXN0IGJlIHYxIGZvciByZXR1cm5pbmcgYSBwYWlyIG9mIDMyLWJpdCB2YWx1ZS4KKyAgICAg
ICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnVDEgPSBNSVBTUmVnaXN0ZXJzOjp2MTsKKwor
ICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdUMiA9IE1JUFNSZWdpc3RlcnM6OnQ0
OworCisgICAgICAgIC8vIHJlZ1QzIG11c3QgYmUgc2F2ZWQgaW4gdGhlIGNhbGxlZSwgc28gdXNl
IGFuIFMgcmVnaXN0ZXIuCisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1QzID0g
TUlQU1JlZ2lzdGVyczo6czI7CisKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgY2Fs
bEZyYW1lUmVnaXN0ZXIgPSBNSVBTUmVnaXN0ZXJzOjpzMDsKKyAgICAgICAgc3RhdGljIGNvbnN0
IFJlZ2lzdGVySUQgdGltZW91dENoZWNrUmVnaXN0ZXIgPSBNSVBTUmVnaXN0ZXJzOjpzMTsKKwor
ICAgICAgICBzdGF0aWMgY29uc3QgRlBSZWdpc3RlcklEIGZwUmVnVDAgPSBNSVBTUmVnaXN0ZXJz
OjpmNDsKKyAgICAgICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBmcFJlZ1QxID0gTUlQU1Jl
Z2lzdGVyczo6ZjY7CisgICAgICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQgZnBSZWdUMiA9
IE1JUFNSZWdpc3RlcnM6OmY4OwogI2Vsc2UKICAgICAjZXJyb3IgIkpJVCBub3Qgc3VwcG9ydGVk
IG9uIHRoaXMgcGxhdGZvcm0uIgogI2VuZGlmCkBAIC02MjYsNyArNjQ4LDMwIEBACiAgICAgICAg
IHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRNZXRob2RDaGVja1Byb3RvT2JqID0gMTI7CiAg
ICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRNZXRob2RDaGVja1Byb3RvU3RydWN0
ID0gMjA7CiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRNZXRob2RDaGVja1B1
dEZ1bmN0aW9uID0gMzI7CisjZWxpZiBQTEFURk9STShNSVBTKQorICAgICAgICAvLyBUaGVzZSBh
cmNoaXRlY3R1cmUgc3BlY2lmaWMgdmFsdWUgYXJlIHVzZWQgdG8gZW5hYmxlIHBhdGNoaW5nIC0g
c2VlIGNvbW1lbnQgb24gb3BfcHV0X2J5X2lkLgorICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBh
dGNoT2Zmc2V0UHV0QnlJZFN0cnVjdHVyZSA9IDEyOworICAgICAgICBzdGF0aWMgY29uc3QgaW50
IHBhdGNoT2Zmc2V0UHV0QnlJZEV4dGVybmFsTG9hZCA9IDQ0OworICAgICAgICBzdGF0aWMgY29u
c3QgaW50IHBhdGNoTGVuZ3RoUHV0QnlJZEV4dGVybmFsTG9hZCA9IDE2OworICAgICAgICBzdGF0
aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0UHV0QnlJZFByb3BlcnR5TWFwT2Zmc2V0ID0gNjA7Cisg
ICAgICAgIC8vIFRoZXNlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyB2YWx1ZSBhcmUgdXNlZCB0byBl
bmFibGUgcGF0Y2hpbmcgLSBzZWUgY29tbWVudCBvbiBvcF9nZXRfYnlfaWQuCisgICAgICAgIHN0
YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkU3RydWN0dXJlID0gMTI7CisgICAgICAg
IHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSA9IDQ0
OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZEV4dGVybmFsTG9h
ZCA9IDQ0OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoTGVuZ3RoR2V0QnlJZEV4dGVy
bmFsTG9hZCA9IDE2OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJ
ZFByb3BlcnR5TWFwT2Zmc2V0ID0gNjA7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hP
ZmZzZXRHZXRCeUlkUHV0UmVzdWx0ID0gNzY7CisjaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykK
KyAgICAgICAgI2Vycm9yICJPUENPREVfU0FNUExJTkcgaXMgbm90IHlldCBzdXBwb3J0ZWQiCisj
ZWxzZQorICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNl
Q2FsbCA9IDQwOwogI2VuZGlmCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRP
cENhbGxDb21wYXJlVG9KdW1wID0gMzI7CisKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRj
aE9mZnNldE1ldGhvZENoZWNrUHJvdG9PYmogPSAzMjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGlu
dCBwYXRjaE9mZnNldE1ldGhvZENoZWNrUHJvdG9TdHJ1Y3QgPSA1MjsKKyAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhvZENoZWNrUHV0RnVuY3Rpb24gPSA4NDsKKyNlbmRp
ZgogI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAKICNpZiBQTEFURk9STShBUk1fVFJBRElU
SU9OQUwpCg==
</data>
<flag name="review"
          id="23618"
          type_id="1"
          status="-"
          setter="barraclough"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42603</attachid>
            <date>2009-11-05 15:20:31 -0800</date>
            <delta_ts>2009-11-05 16:10:00 -0800</delta_ts>
            <desc>MIPS Patch Part 1 for YARR</desc>
            <filename>mips_part1_yarr.diff</filename>
            <type>text/plain</type>
            <size>1618</size>
            <attacher name="Chao-ying Fu">fu</attacher>
            
              <data encoding="base64">SW5kZXg6IHd0Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHd0Zi9QbGF0Zm9ybS5oCShyZXZp
c2lvbiA1MDQ5MikKKysrIHd0Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjUsNiAr
MjI1LDE1IEBACiAjZGVmaW5lIFdURl9QTEFURk9STV9CSUdfRU5ESUFOIDEKICNlbmRpZgogCisv
KiBQTEFURk9STShNSVBTKSAqLworLyogTm90ZTogT25seSBPMzIgQUJJIGlzIHRlc3RlZCwgc28g
d2UgZW5hYmxlIGl0IGZvciBPMzIgQUJJIGZvciBub3cuICAqLworI2lmICAgKGRlZmluZWQobWlw
cykgfHwgZGVmaW5lZChfX21pcHNfXykpICYmIGRlZmluZWQoX0FCSU8zMikKKyNkZWZpbmUgV1RG
X1BMQVRGT1JNX01JUFMgMQorI2lmIGRlZmluZWQoX19NSVBTRUJfXykKKyNkZWZpbmUgV1RGX1BM
QVRGT1JNX0JJR19FTkRJQU4gMQorI2VuZGlmCisjZW5kaWYgLyogTUlQUyAqLworCiAvKiBQTEFU
Rk9STShBUk0pICovCiAjZGVmaW5lIFBMQVRGT1JNX0FSTV9BUkNIKE4pIChQTEFURk9STShBUk0p
ICYmIEFSTV9BUkNIX1ZFUlNJT04gPj0gTikKIApAQCAtNzA5LDcgKzcxOCw3IEBACiAjaWYgIWRl
ZmluZWQoV1RGX1VTRV9KU1ZBTFVFNjQpICYmICFkZWZpbmVkKFdURl9VU0VfSlNWQUxVRTMyKSAm
JiAhZGVmaW5lZChXVEZfVVNFX0pTVkFMVUUzMl82NCkKICNpZiBQTEFURk9STShYODZfNjQpICYm
IChQTEFURk9STShEQVJXSU4pIHx8IFBMQVRGT1JNKExJTlVYKSB8fCBQTEFURk9STShXSU5fT1Mp
KQogI2RlZmluZSBXVEZfVVNFX0pTVkFMVUU2NCAxCi0jZWxpZiBQTEFURk9STShBUk0pIHx8IFBM
QVRGT1JNKFBQQzY0KQorI2VsaWYgUExBVEZPUk0oQVJNKSB8fCBQTEFURk9STShQUEM2NCkgfHwg
UExBVEZPUk0oTUlQUykKICNkZWZpbmUgV1RGX1VTRV9KU1ZBTFVFMzIgMQogI2VsaWYgUExBVEZP
Uk0oV0lOX09TKSAmJiBDT01QSUxFUihNSU5HVykKIC8qIFVzaW5nIEpTVkFMVUUzMl82NCBjYXVz
ZXMgcGFkZGluZy9hbGlnbmVtZW50IGlzc3VlcyBmb3IgSklUU3R1YkFyZwpAQCAtNzU2LDYgKzc2
NSw5IEBACiAgICAgI2lmIFBMQVRGT1JNKEFSTV9USFVNQjIpCiAgICAgICAgICNkZWZpbmUgRU5B
QkxFX0pJVF9PUFRJTUlaRV9OQVRJVkVfQ0FMTCAwCiAgICAgI2VuZGlmCisjZWxpZiBQTEFURk9S
TShNSVBTKSAmJiBQTEFURk9STShMSU5VWCkKKyAgICAjZGVmaW5lIEVOQUJMRV9KSVQgMAorICAg
ICNkZWZpbmUgV1RGX1VTRV9KSVRfU1RVQl9BUkdVTUVOVF9WQV9MSVNUIDAKICNlbmRpZgogI2Vu
ZGlmIC8qIFBMQVRGT1JNKFFUKSAqLwogCkBAIC04MTMsOCArODI1LDEyIEBACiAgfHwgKFBMQVRG
T1JNKEFSTV9UUkFESVRJT05BTCkgJiYgUExBVEZPUk0oTElOVVgpKQogI2RlZmluZSBFTkFCTEVf
WUFSUiAxCiAjZGVmaW5lIEVOQUJMRV9ZQVJSX0pJVCAxCisjaWYgKFBMQVRGT1JNKE1JUFMpICYm
IFBMQVRGT1JNKExJTlVYKSkKKyNkZWZpbmUgRU5BQkxFX1lBUlIgMQorI2RlZmluZSBFTkFCTEVf
WUFSUl9KSVQgMAogI2VuZGlmCiAjZW5kaWYKKyNlbmRpZgogCiAjZW5kaWYgLyogIWRlZmluZWQo
RU5BQkxFX1lBUlJfSklUKSAqLwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42608</attachid>
            <date>2009-11-05 16:10:00 -0800</date>
            <delta_ts>2009-12-01 15:03:54 -0800</delta_ts>
            <desc>MIPS Patch Part 1 for YARR (new)</desc>
            <filename>mips_part1_yarr_new.diff</filename>
            <type>text/plain</type>
            <size>1566</size>
            <attacher name="Chao-ying Fu">fu</attacher>
            
              <data encoding="base64">SW5kZXg6IHd0Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHd0Zi9QbGF0Zm9ybS5oCShyZXZp
c2lvbiA1MDQ5MikKKysrIHd0Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjUsNiAr
MjI1LDE1IEBACiAjZGVmaW5lIFdURl9QTEFURk9STV9CSUdfRU5ESUFOIDEKICNlbmRpZgogCisv
KiBQTEFURk9STShNSVBTKSAqLworLyogTm90ZTogT25seSBPMzIgQUJJIGlzIHRlc3RlZCwgc28g
d2UgZW5hYmxlIGl0IGZvciBPMzIgQUJJIGZvciBub3cuICAqLworI2lmICAgKGRlZmluZWQobWlw
cykgfHwgZGVmaW5lZChfX21pcHNfXykpICYmIGRlZmluZWQoX0FCSU8zMikKKyNkZWZpbmUgV1RG
X1BMQVRGT1JNX01JUFMgMQorI2lmIGRlZmluZWQoX19NSVBTRUJfXykKKyNkZWZpbmUgV1RGX1BM
QVRGT1JNX0JJR19FTkRJQU4gMQorI2VuZGlmCisjZW5kaWYgLyogTUlQUyAqLworCiAvKiBQTEFU
Rk9STShBUk0pICovCiAjZGVmaW5lIFBMQVRGT1JNX0FSTV9BUkNIKE4pIChQTEFURk9STShBUk0p
ICYmIEFSTV9BUkNIX1ZFUlNJT04gPj0gTikKIApAQCAtNzA5LDcgKzcxOCw3IEBACiAjaWYgIWRl
ZmluZWQoV1RGX1VTRV9KU1ZBTFVFNjQpICYmICFkZWZpbmVkKFdURl9VU0VfSlNWQUxVRTMyKSAm
JiAhZGVmaW5lZChXVEZfVVNFX0pTVkFMVUUzMl82NCkKICNpZiBQTEFURk9STShYODZfNjQpICYm
IChQTEFURk9STShEQVJXSU4pIHx8IFBMQVRGT1JNKExJTlVYKSB8fCBQTEFURk9STShXSU5fT1Mp
KQogI2RlZmluZSBXVEZfVVNFX0pTVkFMVUU2NCAxCi0jZWxpZiBQTEFURk9STShBUk0pIHx8IFBM
QVRGT1JNKFBQQzY0KQorI2VsaWYgUExBVEZPUk0oQVJNKSB8fCBQTEFURk9STShQUEM2NCkgfHwg
UExBVEZPUk0oTUlQUykKICNkZWZpbmUgV1RGX1VTRV9KU1ZBTFVFMzIgMQogI2VsaWYgUExBVEZP
Uk0oV0lOX09TKSAmJiBDT01QSUxFUihNSU5HVykKIC8qIFVzaW5nIEpTVkFMVUUzMl82NCBjYXVz
ZXMgcGFkZGluZy9hbGlnbmVtZW50IGlzc3VlcyBmb3IgSklUU3R1YkFyZwpAQCAtNzU2LDYgKzc2
NSw5IEBACiAgICAgI2lmIFBMQVRGT1JNKEFSTV9USFVNQjIpCiAgICAgICAgICNkZWZpbmUgRU5B
QkxFX0pJVF9PUFRJTUlaRV9OQVRJVkVfQ0FMTCAwCiAgICAgI2VuZGlmCisjZWxpZiBQTEFURk9S
TShNSVBTKSAmJiBQTEFURk9STShMSU5VWCkKKyAgICAjZGVmaW5lIEVOQUJMRV9KSVQgMAorICAg
ICNkZWZpbmUgV1RGX1VTRV9KSVRfU1RVQl9BUkdVTUVOVF9WQV9MSVNUIDAKICNlbmRpZgogI2Vu
ZGlmIC8qIFBMQVRGT1JNKFFUKSAqLwogCkBAIC04MTQsNyArODI2LDExIEBACiAjZGVmaW5lIEVO
QUJMRV9ZQVJSIDEKICNkZWZpbmUgRU5BQkxFX1lBUlJfSklUIDEKICNlbmRpZgorI2lmIChQTEFU
Rk9STShNSVBTKSAmJiBQTEFURk9STShMSU5VWCkpCisjZGVmaW5lIEVOQUJMRV9ZQVJSIDEKKyNk
ZWZpbmUgRU5BQkxFX1lBUlJfSklUIDAKICNlbmRpZgorI2VuZGlmCiAKICNlbmRpZiAvKiAhZGVm
aW5lZChFTkFCTEVfWUFSUl9KSVQpICovCiAK
</data>
<flag name="review"
          id="24168"
          type_id="1"
          status="-"
          setter="barraclough"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42679</attachid>
            <date>2009-11-06 17:46:36 -0800</date>
            <delta_ts>2009-12-01 15:01:27 -0800</delta_ts>
            <desc>MIPS JIT Patch 20091106</desc>
            <filename>mips_jit20091106.diff</filename>
            <type>text/plain</type>
            <size>108827</size>
            <attacher name="Chao-ying Fu">fu</attacher>
            
              <data encoding="base64">SW5kZXg6IHd0Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHd0Zi9QbGF0Zm9ybS5oCShyZXZp
c2lvbiA1MDYxMCkKKysrIHd0Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzAsNiAr
MjMwLDE1IEBACiAjZGVmaW5lIFdURl9QTEFURk9STV9CSUdfRU5ESUFOIDEKICNlbmRpZgogCisv
KiBQTEFURk9STShNSVBTKSAqLworLyogTm90ZTogT25seSBPMzIgQUJJIGlzIHRlc3RlZCwgc28g
d2UgZW5hYmxlIGl0IGZvciBPMzIgQUJJIGZvciBub3cuICAqLworI2lmICAgKGRlZmluZWQobWlw
cykgfHwgZGVmaW5lZChfX21pcHNfXykpICYmIGRlZmluZWQoX0FCSU8zMikKKyNkZWZpbmUgV1RG
X1BMQVRGT1JNX01JUFMgMQorI2lmIGRlZmluZWQoX19NSVBTRUJfXykKKyNkZWZpbmUgV1RGX1BM
QVRGT1JNX0JJR19FTkRJQU4gMQorI2VuZGlmCisjZW5kaWYgLyogTUlQUyAqLworCiAvKiBQTEFU
Rk9STShBUk0pICovCiAjZGVmaW5lIFBMQVRGT1JNX0FSTV9BUkNIKE4pIChQTEFURk9STShBUk0p
ICYmIEFSTV9BUkNIX1ZFUlNJT04gPj0gTikKIApAQCAtNzE0LDcgKzcyMyw3IEBACiAjaWYgIWRl
ZmluZWQoV1RGX1VTRV9KU1ZBTFVFNjQpICYmICFkZWZpbmVkKFdURl9VU0VfSlNWQUxVRTMyKSAm
JiAhZGVmaW5lZChXVEZfVVNFX0pTVkFMVUUzMl82NCkKICNpZiBQTEFURk9STShYODZfNjQpICYm
IChQTEFURk9STShEQVJXSU4pIHx8IFBMQVRGT1JNKExJTlVYKSB8fCBQTEFURk9STShXSU5fT1Mp
KQogI2RlZmluZSBXVEZfVVNFX0pTVkFMVUU2NCAxCi0jZWxpZiBQTEFURk9STShBUk0pIHx8IFBM
QVRGT1JNKFBQQzY0KQorI2VsaWYgUExBVEZPUk0oQVJNKSB8fCBQTEFURk9STShQUEM2NCkgfHwg
UExBVEZPUk0oTUlQUykKICNkZWZpbmUgV1RGX1VTRV9KU1ZBTFVFMzIgMQogI2VsaWYgUExBVEZP
Uk0oV0lOX09TKSAmJiBDT01QSUxFUihNSU5HVykKIC8qIFVzaW5nIEpTVkFMVUUzMl82NCBjYXVz
ZXMgcGFkZGluZy9hbGlnbmVtZW50IGlzc3VlcyBmb3IgSklUU3R1YkFyZwpAQCAtNzU3LDYgKzc2
Niw5IEBACiAgICAgI2RlZmluZSBXVEZfVVNFX0pJVF9TVFVCX0FSR1VNRU5UX1ZBX0xJU1QgMQog
I2VsaWYgUExBVEZPUk0oQVJNX1RSQURJVElPTkFMKSAmJiBQTEFURk9STShMSU5VWCkKICAgICAj
ZGVmaW5lIEVOQUJMRV9KSVQgMQorI2VsaWYgUExBVEZPUk0oTUlQUykgJiYgUExBVEZPUk0oTElO
VVgpCisgICAgI2RlZmluZSBFTkFCTEVfSklUIDEKKyAgICAjZGVmaW5lIFdURl9VU0VfSklUX1NU
VUJfQVJHVU1FTlRfVkFfTElTVCAwCiAjZW5kaWYKICNlbmRpZiAvKiBQTEFURk9STShRVCkgKi8K
IApAQCAtODExLDcgKzgyMyw4IEBACiAjaWYgKFBMQVRGT1JNKFg4NikgJiYgUExBVEZPUk0oV0lO
X09TKSAmJiBDT01QSUxFUihNSU5HVykgJiYgR0NDX1ZFUlNJT04gPj0gNDAxMDApIFwKICB8fCAo
UExBVEZPUk0oWDg2KSAmJiBQTEFURk9STShXSU5fT1MpICYmIENPTVBJTEVSKE1TVkMpKSBcCiAg
fHwgKFBMQVRGT1JNKFg4NikgJiYgUExBVEZPUk0oTElOVVgpICYmIEdDQ19WRVJTSU9OID49IDQw
MTAwKSBcCi0gfHwgKFBMQVRGT1JNKEFSTV9UUkFESVRJT05BTCkgJiYgUExBVEZPUk0oTElOVVgp
KQorIHx8IChQTEFURk9STShBUk1fVFJBRElUSU9OQUwpICYmIFBMQVRGT1JNKExJTlVYKSkgXAor
IHx8IChQTEFURk9STShNSVBTKSAmJiBQTEFURk9STShMSU5VWCkpCiAjZGVmaW5lIEVOQUJMRV9Z
QVJSIDEKICNkZWZpbmUgRU5BQkxFX1lBUlJfSklUIDEKICNlbmRpZgpJbmRleDogeWFyci9SZWdl
eEpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0geWFyci9SZWdleEpJVC5jcHAJKHJldmlzaW9uIDUwNjEw
KQorKysgeWFyci9SZWdleEpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDE2IEBA
CiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnVDEgPSBBUk1SZWdpc3RlcnM6OnI2Owog
CiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmV0dXJuUmVnaXN0ZXIgPSBBUk1SZWdpc3Rl
cnM6OnIwOworI2VsaWYgUExBVEZPUk0oTUlQUykKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJ
RCBpbnB1dCA9IE1JUFNSZWdpc3RlcnM6OmEwOworICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklE
IGluZGV4ID0gTUlQU1JlZ2lzdGVyczo6YTE7CisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQg
bGVuZ3RoID0gTUlQU1JlZ2lzdGVyczo6YTI7CisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQg
b3V0cHV0ID0gTUlQU1JlZ2lzdGVyczo6YTM7CisKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJ
RCByZWdUMCA9IE1JUFNSZWdpc3RlcnM6OnQ0OworICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklE
IHJlZ1QxID0gTUlQU1JlZ2lzdGVyczo6dDU7CisKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJ
RCByZXR1cm5SZWdpc3RlciA9IE1JUFNSZWdpc3RlcnM6OnYwOwogI2VsaWYgUExBVEZPUk0oWDg2
KQogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGlucHV0ID0gWDg2UmVnaXN0ZXJzOjplYXg7
CiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgaW5kZXggPSBYODZSZWdpc3RlcnM6OmVkeDsK
QEAgLTEzMTMsNiArMTMyMyw4IEBACiAgICAgICAgIHB1c2goQVJNUmVnaXN0ZXJzOjpyNSk7CiAg
ICAgICAgIHB1c2goQVJNUmVnaXN0ZXJzOjpyNik7CiAgICAgICAgIG1vdmUoQVJNUmVnaXN0ZXJz
OjpyMywgb3V0cHV0KTsKKyNlbGlmIFBMQVRGT1JNKE1JUFMpCisgICAgICAgIC8vIERvIG5vdGhp
bmcuCiAjZW5kaWYKICAgICB9CiAKQEAgLTEzMzAsNiArMTM0Miw4IEBACiAgICAgICAgIHBvcChB
Uk1SZWdpc3RlcnM6OnI2KTsKICAgICAgICAgcG9wKEFSTVJlZ2lzdGVyczo6cjUpOwogICAgICAg
ICBwb3AoQVJNUmVnaXN0ZXJzOjpyNCk7CisjZWxpZiBQTEFURk9STShNSVBTKQorICAgICAgICAv
LyBEbyBub3RoaW5nCiAjZW5kaWYKICAgICAgICAgcmV0KCk7CiAgICAgfQpJbmRleDogYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyLmgJKHJldmlzaW9uIDUwNjEwKQorKysgYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDEwIEBACiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJB
Uk0uaCIKIG5hbWVzcGFjZSBKU0MgeyB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyQVJNIE1hY3JvQXNz
ZW1ibGVyQmFzZTsgfTsKIAorI2VsaWYgUExBVEZPUk0oTUlQUykKKyNpbmNsdWRlICJNYWNyb0Fz
c2VtYmxlck1JUFMuaCIKK25hbWVzcGFjZSBKU0MgeyB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyTUlQ
UyBNYWNyb0Fzc2VtYmxlckJhc2U7IH07CisKICNlbGlmIFBMQVRGT1JNKFg4NikKICNpbmNsdWRl
ICJNYWNyb0Fzc2VtYmxlclg4Ni5oIgogbmFtZXNwYWNlIEpTQyB7IHR5cGVkZWYgTWFjcm9Bc3Nl
bWJsZXJYODYgTWFjcm9Bc3NlbWJsZXJCYXNlOyB9OwpJbmRleDogYXNzZW1ibGVyL01JUFNBc3Nl
bWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBhc3NlbWJsZXIvTUlQU0Fzc2VtYmxlci5oCShyZXZpc2lv
biAwKQorKysgYXNzZW1ibGVyL01JUFNBc3NlbWJsZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw5NDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTUlQUyBUZWNobm9sb2dpZXMsIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVW5pdmVyc2l0eSBv
ZiBTemVnZWQKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBNSVBTIFRFQ0hOT0xPR0lFUywgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIE1JUFMgVEVDSE5PTE9HSUVTLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBN
SVBTQXNzZW1ibGVyX2gKKyNkZWZpbmUgTUlQU0Fzc2VtYmxlcl9oCisKKyNpbmNsdWRlIDx3dGYv
UGxhdGZvcm0uaD4KKyNpbmNsdWRlIDx3dGYvU2VnbWVudGVkVmVjdG9yLmg+CisKKyNpZiBFTkFC
TEUoQVNTRU1CTEVSKSAmJiBQTEFURk9STShNSVBTKQorCisjaW5jbHVkZSAiQXNzZW1ibGVyQnVm
ZmVyLmgiCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEpTQyB7CisK
K3R5cGVkZWYgdWludDMyX3QgTUlQU1dvcmQ7CisKK25hbWVzcGFjZSBNSVBTUmVnaXN0ZXJzIHsK
KyAgICB0eXBlZGVmIGVudW0geworICAgICAgICByMCA9IDAsCisgICAgICAgIHIxLAorICAgICAg
ICByMiwKKyAgICAgICAgcjMsCisgICAgICAgIHI0LAorICAgICAgICByNSwKKyAgICAgICAgcjYs
CisgICAgICAgIHI3LAorICAgICAgICByOCwKKyAgICAgICAgcjksCisgICAgICAgIHIxMCwKKyAg
ICAgICAgcjExLAorICAgICAgICByMTIsCisgICAgICAgIHIxMywKKyAgICAgICAgcjE0LAorICAg
ICAgICByMTUsCisgICAgICAgIHIxNiwKKyAgICAgICAgcjE3LAorICAgICAgICByMTgsCisgICAg
ICAgIHIxOSwKKyAgICAgICAgcjIwLAorICAgICAgICByMjEsCisgICAgICAgIHIyMiwKKyAgICAg
ICAgcjIzLAorICAgICAgICByMjQsCisgICAgICAgIHIyNSwKKyAgICAgICAgcjI2LAorICAgICAg
ICByMjcsCisgICAgICAgIHIyOCwKKyAgICAgICAgcjI5LAorICAgICAgICByMzAsCisgICAgICAg
IHIzMSwKKyAgICAgICAgemVybyA9IHIwLAorICAgICAgICBhdCA9IHIxLAorICAgICAgICB2MCA9
IHIyLAorICAgICAgICB2MSA9IHIzLAorICAgICAgICBhMCA9IHI0LAorICAgICAgICBhMSA9IHI1
LAorICAgICAgICBhMiA9IHI2LAorICAgICAgICBhMyA9IHI3LAorICAgICAgICB0MCA9IHI4LAor
ICAgICAgICB0MSA9IHI5LAorICAgICAgICB0MiA9IHIxMCwKKyAgICAgICAgdDMgPSByMTEsCisg
ICAgICAgIHQ0ID0gcjEyLAorICAgICAgICB0NSA9IHIxMywKKyAgICAgICAgdDYgPSByMTQsCisg
ICAgICAgIHQ3ID0gcjE1LAorICAgICAgICBzMCA9IHIxNiwKKyAgICAgICAgczEgPSByMTcsCisg
ICAgICAgIHMyID0gcjE4LAorICAgICAgICBzMyA9IHIxOSwKKyAgICAgICAgczQgPSByMjAsCisg
ICAgICAgIHM1ID0gcjIxLAorICAgICAgICBzNiA9IHIyMiwKKyAgICAgICAgczcgPSByMjMsCisg
ICAgICAgIHQ4ID0gcjI0LAorICAgICAgICB0OSA9IHIyNSwKKyAgICAgICAgazAgPSByMjYsCisg
ICAgICAgIGsxID0gcjI3LAorICAgICAgICBncCA9IHIyOCwKKyAgICAgICAgc3AgPSByMjksCisg
ICAgICAgIGZwID0gcjMwLAorICAgICAgICByYSA9IHIzMQorICAgIH0gUmVnaXN0ZXJJRDsKKwor
ICAgIHR5cGVkZWYgZW51bSB7CisgICAgICAgIGYwLAorICAgICAgICBmMSwKKyAgICAgICAgZjIs
CisgICAgICAgIGYzLAorICAgICAgICBmNCwKKyAgICAgICAgZjUsCisgICAgICAgIGY2LAorICAg
ICAgICBmNywKKyAgICAgICAgZjgsCisgICAgICAgIGY5LAorICAgICAgICBmMTAsCisgICAgICAg
IGYxMSwKKyAgICAgICAgZjEyLAorICAgICAgICBmMTMsCisgICAgICAgIGYxNCwKKyAgICAgICAg
ZjE1LAorICAgICAgICBmMTYsCisgICAgICAgIGYxNywKKyAgICAgICAgZjE4LAorICAgICAgICBm
MTksCisgICAgICAgIGYyMCwKKyAgICAgICAgZjIxLAorICAgICAgICBmMjIsCisgICAgICAgIGYy
MywKKyAgICAgICAgZjI0LAorICAgICAgICBmMjUsCisgICAgICAgIGYyNiwKKyAgICAgICAgZjI3
LAorICAgICAgICBmMjgsCisgICAgICAgIGYyOSwKKyAgICAgICAgZjMwLAorICAgICAgICBmMzEK
KyAgICB9IEZQUmVnaXN0ZXJJRDsKKworfSAvLyBuYW1lc3BhY2UgTUlQU1JlZ2lzdGVycworCitj
bGFzcyBNSVBTQXNzZW1ibGVyIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIE1JUFNSZWdpc3RlcnM6
OlJlZ2lzdGVySUQgUmVnaXN0ZXJJRDsKKyAgICB0eXBlZGVmIE1JUFNSZWdpc3RlcnM6OkZQUmVn
aXN0ZXJJRCBGUFJlZ2lzdGVySUQ7CisgICAgdHlwZWRlZiBTZWdtZW50ZWRWZWN0b3I8aW50LCA2
ND4gSnVtcHM7CisKKyAgICBNSVBTQXNzZW1ibGVyKCkKKyAgICB7CisgICAgfQorCisgICAgLy8g
TUlQUyBpbnN0cnVjdGlvbiBvcGNvZGUgZmllbGQgcG9zaXRpb24KKyAgICBlbnVtIHsKKyAgICAg
ICAgT1BfU0hfUkQgPSAxMSwKKyAgICAgICAgT1BfU0hfUlQgPSAxNiwKKyAgICAgICAgT1BfU0hf
UlMgPSAyMSwKKyAgICAgICAgT1BfU0hfU0hBTVQgPSA2LAorICAgICAgICBPUF9TSF9DT0RFID0g
MTYsCisgICAgICAgIE9QX1NIX0ZEID0gNiwKKyAgICAgICAgT1BfU0hfRlMgPSAxMSwKKyAgICAg
ICAgT1BfU0hfRlQgPSAxNgorICAgIH07CisKKyAgICBjbGFzcyBKbXBTcmMgeworICAgICAgICBm
cmllbmQgY2xhc3MgTUlQU0Fzc2VtYmxlcjsKKyAgICBwdWJsaWM6CisgICAgICAgIEptcFNyYygp
CisgICAgICAgICAgICA6IG1fb2Zmc2V0KC0xKQorICAgICAgICB7CisgICAgICAgIH0KKworICAg
IHByaXZhdGU6CisgICAgICAgIEptcFNyYyhpbnQgb2Zmc2V0KQorICAgICAgICAgICAgOiBtX29m
ZnNldChvZmZzZXQpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGludCBtX29mZnNl
dDsKKyAgICB9OworCisgICAgY2xhc3MgSm1wRHN0IHsKKyAgICAgICAgZnJpZW5kIGNsYXNzIE1J
UFNBc3NlbWJsZXI7CisgICAgcHVibGljOgorICAgICAgICBKbXBEc3QoKQorICAgICAgICAgICAg
OiBtX29mZnNldCgtMSkKKyAgICAgICAgICAgICwgbV91c2VkKGZhbHNlKQorICAgICAgICB7Cisg
ICAgICAgIH0KKworICAgICAgICBib29sIGlzVXNlZCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlZDsg
fQorICAgICAgICB2b2lkIHVzZWQoKSB7IG1fdXNlZCA9IHRydWU7IH0KKyAgICBwcml2YXRlOgor
ICAgICAgICBKbXBEc3QoaW50IG9mZnNldCkKKyAgICAgICAgICAgIDogbV9vZmZzZXQob2Zmc2V0
KQorICAgICAgICAgICAgLCBtX3VzZWQoZmFsc2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFT
U0VSVChtX29mZnNldCA9PSBvZmZzZXQpOworICAgICAgICB9CisKKyAgICAgICAgaW50IG1fb2Zm
c2V0IDogMzE7CisgICAgICAgIGludCBtX3VzZWQgOiAxOworICAgIH07CisKKyAgICB2b2lkIGVt
aXRJbnN0KE1JUFNXb3JkIG9wKQorICAgIHsKKyAgICAgICAgdm9pZCogb2xkX2Jhc2UgPSBtX2J1
ZmZlci5kYXRhKCk7CisKKyAgICAgICAgbV9idWZmZXIucHV0SW50KG9wKTsKKworICAgICAgICB2
b2lkKiBuZXdfYmFzZSA9IG1fYnVmZmVyLmRhdGEoKTsKKyAgICAgICAgaWYgKG9sZF9iYXNlICE9
IG5ld19iYXNlKSB7CisgICAgICAgICAgICByZWxvY2F0ZUp1bXBzKG9sZF9iYXNlLCBuZXdfYmFz
ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIG5vcCgpCisgICAgeworICAgICAgICBl
bWl0SW5zdCgweDAwMDAwMDAwKTsKKyAgICB9CisKKyAgICAvKiBOZWVkIHRvIGluc2VydCBvbmUg
bG9hZCBkYXRhIGRlbGF5IG5vcCBmb3IgbWlwczEuICAqLworICAgIHZvaWQgbG9hZERlbGF5Tm9w
KCkKKyAgICB7CisjaWYgX19taXBzID09IDEKKyAgICAgICAgbm9wKCk7CisjZW5kaWYKKyAgICB9
CisKKyAgICAvKiBOZWVkIHRvIGluc2VydCBvbmUgY29wcm9jZXNzb3IgYWNjZXNzIGRlbGF5IG5v
cCBmb3IgbWlwczEuICAqLworICAgIHZvaWQgY29wRGVsYXlOb3AoKQorICAgIHsKKyNpZiBfX21p
cHMgPT0gMQorICAgICAgICBub3AoKTsKKyNlbmRpZgorICAgIH0KKworICAgIHZvaWQgbW92ZShS
ZWdpc3RlcklEIHJkLCBSZWdpc3RlcklEIHJzKQorICAgIHsKKyNpZiBkZWZpbmVkKF9BQklPMzIp
CisgICAgICAgIC8qIGFkZHUgKi8KKyAgICAgICAgZW1pdEluc3QoMHgwMDAwMDAyMSB8IChyZCA8
PCBPUF9TSF9SRCkgfCAocnMgPDwgT1BfU0hfUlMpKTsKKyNlbHNlCisgICAgICAgIC8qIGRhZGR1
ICovCisgICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMmQgfCAocmQgPDwgT1BfU0hfUkQpIHwgKHJz
IDw8IE9QX1NIX1JTKSk7CisjZW5kaWYKKyAgICB9CisKKyAgICAvKiBTZXQgYW4gaW1tZWRpYXRl
IHZhbHVlIHRvIGEgcmVnaXN0ZXIuICBUaGlzIG1heSBnZW5lcmF0ZSAxIG9yIDIKKyAgICAgICBp
bnN0cnVjdGlvbnMuICAqLworICAgIHZvaWQgbGkoUmVnaXN0ZXJJRCBkZXN0LCBpbnQgaW1tKQor
ICAgIHsKKyAgICAgICAgaWYgKGltbSA+PSAtMzI3NjggJiYgaW1tIDw9IDMyNzY3KQorICAgICAg
ICAgICAgYWRkaXUoZGVzdCwgTUlQU1JlZ2lzdGVyczo6emVybywgaW1tKTsKKyAgICAgICAgZWxz
ZSBpZiAoaW1tID49IDAgJiYgaW1tIDwgNjU1MzYpCisgICAgICAgICAgICBvcmkoZGVzdCwgTUlQ
U1JlZ2lzdGVyczo6emVybywgaW1tKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBsdWko
ZGVzdCwgaW1tID4+IDE2KTsKKyAgICAgICAgICAgIGlmIChpbW0gJiAweGZmZmYpCisgICAgICAg
ICAgICAgICAgb3JpKGRlc3QsIGRlc3QsIGltbSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2
b2lkIGx1aShSZWdpc3RlcklEIHJ0LCBpbnQgaW1tKQorICAgIHsKKyAgICAgICAgZW1pdEluc3Qo
MHgzYzAwMDAwMCB8IChydCA8PCBPUF9TSF9SVCkgfCAoaW1tICYgMHhmZmZmKSk7CisgICAgfQor
CisgICAgdm9pZCBhZGRpdShSZWdpc3RlcklEIHJ0LCBSZWdpc3RlcklEIHJzLCBpbnQgaW1tKQor
ICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHgyNDAwMDAwMCB8IChydCA8PCBPUF9TSF9SVCkgfCAo
cnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAgICAgICAgIHwgKGltbSAmIDB4ZmZmZikpOworICAg
IH0KKworICAgIHZvaWQgYWRkdShSZWdpc3RlcklEIHJkLCBSZWdpc3RlcklEIHJzLCBSZWdpc3Rl
cklEIHJ0KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHgwMDAwMDAyMSB8IChyZCA8PCBPUF9T
SF9SRCkgfCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAgICAgICAgIHwgKHJ0IDw8IE9QX1NI
X1JUKSk7CisgICAgfQorCisgICAgdm9pZCBzdWJ1KFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQg
cnMsIFJlZ2lzdGVySUQgcnQpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDAwMDAwMDIzIHwg
KHJkIDw8IE9QX1NIX1JEKSB8IChycyA8PCBPUF9TSF9SUykKKyAgICAgICAgICAgICAgICAgfCAo
cnQgPDwgT1BfU0hfUlQpKTsKKyAgICB9CisKKyAgICB2b2lkIG11bHQoUmVnaXN0ZXJJRCBycywg
UmVnaXN0ZXJJRCBydCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMTggfCAocnMg
PDwgT1BfU0hfUlMpIHwgKHJ0IDw8IE9QX1NIX1JUKSk7CisgICAgfQorCisgICAgdm9pZCBtZmhp
KFJlZ2lzdGVySUQgcmQpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDAwMDAwMDEwIHwgKHJk
IDw8IE9QX1NIX1JEKSk7CisgICAgfQorCisgICAgdm9pZCBtZmxvKFJlZ2lzdGVySUQgcmQpCisg
ICAgeworICAgICAgICBlbWl0SW5zdCgweDAwMDAwMDEyIHwgKHJkIDw8IE9QX1NIX1JEKSk7Cisg
ICAgfQorCisgICAgdm9pZCBtdWwoUmVnaXN0ZXJJRCByZCwgUmVnaXN0ZXJJRCBycywgUmVnaXN0
ZXJJRCBydCkKKyAgICB7CisjaWYgX19taXBzID49IDMyCisgICAgICAgIGVtaXRJbnN0KDB4NzAw
MDAwMDIgfCAocmQgPDwgT1BfU0hfUkQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAgICAg
ICAgICB8IChydCA8PCBPUF9TSF9SVCkpOworI2Vsc2UKKyAgICAgICAgbXVsdChycywgcnQpOwor
ICAgICAgICBtZmxvKHJkKTsKKyNlbmRpZgorICAgIH0KKworICAgIHZvaWQgYW5kX2luc24oUmVn
aXN0ZXJJRCByZCwgUmVnaXN0ZXJJRCBycywgUmVnaXN0ZXJJRCBydCkKKyAgICB7CisgICAgICAg
IGVtaXRJbnN0KDB4MDAwMDAwMjQgfCAocmQgPDwgT1BfU0hfUkQpIHwgKHJzIDw8IE9QX1NIX1JT
KQorICAgICAgICAgICAgICAgICB8IChydCA8PCBPUF9TSF9SVCkpOworICAgIH0KKworICAgIHZv
aWQgYW5kaShSZWdpc3RlcklEIHJ0LCBSZWdpc3RlcklEIHJzLCBpbnQgaW1tKQorICAgIHsKKyAg
ICAgICAgZW1pdEluc3QoMHgzMDAwMDAwMCB8IChydCA8PCBPUF9TSF9SVCkgfCAocnMgPDwgT1Bf
U0hfUlMpCisgICAgICAgICAgICAgICAgIHwgKGltbSAmIDB4ZmZmZikpOworICAgIH0KKworICAg
IHZvaWQgbm9yKFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcnMsIFJlZ2lzdGVySUQgcnQpCisg
ICAgeworICAgICAgICBlbWl0SW5zdCgweDAwMDAwMDI3IHwgKHJkIDw8IE9QX1NIX1JEKSB8IChy
cyA8PCBPUF9TSF9SUykKKyAgICAgICAgICAgICAgICAgfCAocnQgPDwgT1BfU0hfUlQpKTsKKyAg
ICB9CisKKyAgICB2b2lkIG9yX2luc24oUmVnaXN0ZXJJRCByZCwgUmVnaXN0ZXJJRCBycywgUmVn
aXN0ZXJJRCBydCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMjUgfCAocmQgPDwg
T1BfU0hfUkQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChydCA8PCBP
UF9TSF9SVCkpOworICAgIH0KKworICAgIHZvaWQgb3JpKFJlZ2lzdGVySUQgcnQsIFJlZ2lzdGVy
SUQgcnMsIGludCBpbW0pCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDM0MDAwMDAwIHwgKHJ0
IDw8IE9QX1NIX1JUKSB8IChycyA8PCBPUF9TSF9SUykKKyAgICAgICAgICAgICAgICAgfCAoaW1t
ICYgMHhmZmZmKSk7CisgICAgfQorCisgICAgdm9pZCB4b3JfaW5zbihSZWdpc3RlcklEIHJkLCBS
ZWdpc3RlcklEIHJzLCBSZWdpc3RlcklEIHJ0KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHgw
MDAwMDAyNiB8IChyZCA8PCBPUF9TSF9SRCkgfCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAg
ICAgICAgIHwgKHJ0IDw8IE9QX1NIX1JUKSk7CisgICAgfQorCisgICAgdm9pZCB4b3JpKFJlZ2lz
dGVySUQgcnQsIFJlZ2lzdGVySUQgcnMsIGludCBpbW0pCisgICAgeworICAgICAgICBlbWl0SW5z
dCgweDM4MDAwMDAwIHwgKHJ0IDw8IE9QX1NIX1JUKSB8IChycyA8PCBPUF9TSF9SUykKKyAgICAg
ICAgICAgICAgICAgfCAoaW1tICYgMHhmZmZmKSk7CisgICAgfQorCisgICAgdm9pZCBzbHQoUmVn
aXN0ZXJJRCByZCwgUmVnaXN0ZXJJRCBycywgUmVnaXN0ZXJJRCBydCkKKyAgICB7CisgICAgICAg
IGVtaXRJbnN0KDB4MDAwMDAwMmEgfCAocmQgPDwgT1BfU0hfUkQpIHwgKHJzIDw8IE9QX1NIX1JT
KQorICAgICAgICAgICAgICAgICB8IChydCA8PCBPUF9TSF9SVCkpOworICAgIH0KKworICAgIHZv
aWQgc2x0dShSZWdpc3RlcklEIHJkLCBSZWdpc3RlcklEIHJzLCBSZWdpc3RlcklEIHJ0KQorICAg
IHsKKyAgICAgICAgZW1pdEluc3QoMHgwMDAwMDAyYiB8IChyZCA8PCBPUF9TSF9SRCkgfCAocnMg
PDwgT1BfU0hfUlMpCisgICAgICAgICAgICAgICAgIHwgKHJ0IDw8IE9QX1NIX1JUKSk7CisgICAg
fQorCisgICAgdm9pZCBzbHRpdShSZWdpc3RlcklEIHJ0LCBSZWdpc3RlcklEIHJzLCBpbnQgaW1t
KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHgyYzAwMDAwMCB8IChydCA8PCBPUF9TSF9SVCkg
fCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAgICAgICAgIHwgKGltbSAmIDB4ZmZmZikpOwor
ICAgIH0KKworICAgIHZvaWQgc2xsKFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcnQsIGludCBz
aGFtdCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMDAgfCAocmQgPDwgT1BfU0hf
UkQpIHwgKHJ0IDw8IE9QX1NIX1JUKQorICAgICAgICAgICAgICAgICB8ICgoc2hhbXQgJiAweDFm
KSA8PCBPUF9TSF9TSEFNVCkpOworICAgIH0KKworICAgIHZvaWQgc2xsdihSZWdpc3RlcklEIHJk
LCBSZWdpc3RlcklEIHJ0LCBpbnQgcnMpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDAwMDAw
MDA0IHwgKHJkIDw8IE9QX1NIX1JEKSB8IChydCA8PCBPUF9TSF9SVCkKKyAgICAgICAgICAgICAg
ICAgfCAocnMgPDwgT1BfU0hfUlMpKTsKKyAgICB9CisKKyAgICB2b2lkIHNyYShSZWdpc3RlcklE
IHJkLCBSZWdpc3RlcklEIHJ0LCBpbnQgc2hhbXQpCisgICAgeworICAgICAgICBlbWl0SW5zdCgw
eDAwMDAwMDAzIHwgKHJkIDw8IE9QX1NIX1JEKSB8IChydCA8PCBPUF9TSF9SVCkKKyAgICAgICAg
ICAgICAgICAgfCAoKHNoYW10ICYgMHgxZikgPDwgT1BfU0hfU0hBTVQpKTsKKyAgICB9CisKKyAg
ICB2b2lkIHNyYXYoUmVnaXN0ZXJJRCByZCwgUmVnaXN0ZXJJRCBydCwgUmVnaXN0ZXJJRCBycykK
KyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMDcgfCAocmQgPDwgT1BfU0hfUkQpIHwg
KHJ0IDw8IE9QX1NIX1JUKQorICAgICAgICAgICAgICAgICB8IChycyA8PCBPUF9TSF9SUykpOwor
ICAgIH0KKworICAgIHZvaWQgbHcoUmVnaXN0ZXJJRCBydCwgUmVnaXN0ZXJJRCBycywgaW50IG9m
ZnNldCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4OGMwMDAwMDAgfCAocnQgPDwgT1BfU0hf
UlQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChvZmZzZXQgJiAweGZm
ZmYpKTsKKyAgICAgICAgbG9hZERlbGF5Tm9wKCk7CisgICAgfQorCisgICAgdm9pZCBsd2woUmVn
aXN0ZXJJRCBydCwgUmVnaXN0ZXJJRCBycywgaW50IG9mZnNldCkKKyAgICB7CisgICAgICAgIGVt
aXRJbnN0KDB4ODgwMDAwMDAgfCAocnQgPDwgT1BfU0hfUlQpIHwgKHJzIDw8IE9QX1NIX1JTKQor
ICAgICAgICAgICAgICAgICB8IChvZmZzZXQgJiAweGZmZmYpKTsKKyAgICAgICAgbG9hZERlbGF5
Tm9wKCk7CisgICAgfQorCisgICAgdm9pZCBsd3IoUmVnaXN0ZXJJRCBydCwgUmVnaXN0ZXJJRCBy
cywgaW50IG9mZnNldCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4OTgwMDAwMDAgfCAocnQg
PDwgT1BfU0hfUlQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChvZmZz
ZXQgJiAweGZmZmYpKTsKKyAgICAgICAgbG9hZERlbGF5Tm9wKCk7CisgICAgfQorCisgICAgdm9p
ZCBsaHUoUmVnaXN0ZXJJRCBydCwgUmVnaXN0ZXJJRCBycywgaW50IG9mZnNldCkKKyAgICB7Cisg
ICAgICAgIGVtaXRJbnN0KDB4OTQwMDAwMDAgfCAocnQgPDwgT1BfU0hfUlQpIHwgKHJzIDw8IE9Q
X1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChvZmZzZXQgJiAweGZmZmYpKTsKKyAgICAgICAg
bG9hZERlbGF5Tm9wKCk7CisgICAgfQorCisgICAgdm9pZCBzdyhSZWdpc3RlcklEIHJ0LCBSZWdp
c3RlcklEIHJzLCBpbnQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHhhYzAwMDAw
MCB8IChydCA8PCBPUF9TSF9SVCkgfCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAgICAgICAg
IHwgKG9mZnNldCAmIDB4ZmZmZikpOworICAgIH0KKworICAgIHZvaWQganIoUmVnaXN0ZXJJRCBy
cykKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMDggfCAocnMgPDwgT1BfU0hfUlMp
KTsKKyAgICB9CisKKyAgICB2b2lkIGphbHIoUmVnaXN0ZXJJRCBycykKKyAgICB7CisgICAgICAg
IGVtaXRJbnN0KDB4MDAwMGY4MDkgfCAocnMgPDwgT1BfU0hfUlMpKTsKKyAgICB9CisKKyAgICB2
b2lkIGphbCgpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDBjMDAwMDAwKTsKKyAgICB9CisK
KyAgICB2b2lkIGJrcHQoKQorICAgIHsKKyAgICAgICAgaW50IHZhbHVlID0gNTEyOyAvKiBCUktf
QlVHICovCisgICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMGQgfCAoKHZhbHVlICYgMHgzZmYpIDw8
IE9QX1NIX0NPREUpKTsKKyAgICB9CisKKyAgICB2b2lkIGJnZXooUmVnaXN0ZXJJRCBycywgaW50
IGltbSkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4MDQwMTAwMDAgfCAocnMgPDwgT1BfU0hf
UlMpIHwgKGltbSAmIDB4ZmZmZikpOworICAgIH0KKworICAgIHZvaWQgYmx0eihSZWdpc3RlcklE
IHJzLCBpbnQgaW1tKQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHgwNDAwMDAwMCB8IChycyA8
PCBPUF9TSF9SUykgfCAoaW1tICYgMHhmZmZmKSk7CisgICAgfQorCisgICAgdm9pZCBiZXEoUmVn
aXN0ZXJJRCBycywgUmVnaXN0ZXJJRCBydCwgaW50IGltbSkKKyAgICB7CisgICAgICAgIGVtaXRJ
bnN0KDB4MTAwMDAwMDAgfCAocnMgPDwgT1BfU0hfUlMpIHwgKHJ0IDw8IE9QX1NIX1JUKSB8IChp
bW0gJiAweGZmZmYpKTsKKyAgICB9CisKKyAgICB2b2lkIGJuZShSZWdpc3RlcklEIHJzLCBSZWdp
c3RlcklEIHJ0LCBpbnQgaW1tKQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHgxNDAwMDAwMCB8
IChycyA8PCBPUF9TSF9SUykgfCAocnQgPDwgT1BfU0hfUlQpIHwgKGltbSAmIDB4ZmZmZikpOwor
ICAgIH0KKworICAgIHZvaWQgYmMxdCgpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDQ1MDEw
MDAwKTsKKyAgICB9CisKKyAgICB2b2lkIGJjMWYoKQorICAgIHsKKyAgICAgICAgZW1pdEluc3Qo
MHg0NTAwMDAwMCk7CisgICAgfQorCisgICAgSm1wU3JjIG5ld0ptcFNyYygpCisgICAgeworICAg
ICAgICByZXR1cm4gSm1wU3JjKG1fYnVmZmVyLnNpemUoKSk7CisgICAgfQorCisgICAgdm9pZCBh
cHBlbmRKdW1wKCkKKyAgICB7CisgICAgICAgIG1fanVtcHMuYXBwZW5kKG1fYnVmZmVyLnNpemUo
KSk7CisgICAgfQorCisgICAgdm9pZCBhZGRfZChGUFJlZ2lzdGVySUQgZmQsIEZQUmVnaXN0ZXJJ
RCBmcywgRlBSZWdpc3RlcklEIGZ0KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHg0NjIwMDAw
MCB8IChmZCA8PCBPUF9TSF9GRCkgfCAoZnMgPDwgT1BfU0hfRlMpCisgICAgICAgICAgICAgICAg
IHwgKGZ0IDw8IE9QX1NIX0ZUKSk7CisgICAgfQorCisgICAgdm9pZCBzdWJfZChGUFJlZ2lzdGVy
SUQgZmQsIEZQUmVnaXN0ZXJJRCBmcywgRlBSZWdpc3RlcklEIGZ0KQorICAgIHsKKyAgICAgICAg
ZW1pdEluc3QoMHg0NjIwMDAwMSB8IChmZCA8PCBPUF9TSF9GRCkgfCAoZnMgPDwgT1BfU0hfRlMp
CisgICAgICAgICAgICAgICAgIHwgKGZ0IDw8IE9QX1NIX0ZUKSk7CisgICAgfQorCisgICAgdm9p
ZCBtdWxfZChGUFJlZ2lzdGVySUQgZmQsIEZQUmVnaXN0ZXJJRCBmcywgRlBSZWdpc3RlcklEIGZ0
KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHg0NjIwMDAwMiB8IChmZCA8PCBPUF9TSF9GRCkg
fCAoZnMgPDwgT1BfU0hfRlMpCisgICAgICAgICAgICAgICAgIHwgKGZ0IDw8IE9QX1NIX0ZUKSk7
CisgICAgfQorCisgICAgdm9pZCBsd2MxKEZQUmVnaXN0ZXJJRCBmdCwgUmVnaXN0ZXJJRCBycywg
aW50IG9mZnNldCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4YzQwMDAwMDAgfCAoZnQgPDwg
T1BfU0hfRlQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChvZmZzZXQg
JiAweGZmZmYpKTsKKyAgICAgICAgY29wRGVsYXlOb3AoKTsKKyAgICB9CisKKyAgICB2b2lkIGxk
YzEoRlBSZWdpc3RlcklEIGZ0LCBSZWdpc3RlcklEIHJzLCBpbnQgb2Zmc2V0KQorICAgIHsKKyAg
ICAgICAgZW1pdEluc3QoMHhkNDAwMDAwMCB8IChmdCA8PCBPUF9TSF9GVCkgfCAocnMgPDwgT1Bf
U0hfUlMpCisgICAgICAgICAgICAgICAgIHwgKG9mZnNldCAmIDB4ZmZmZikpOworICAgIH0KKwor
ICAgIHZvaWQgc3djMShGUFJlZ2lzdGVySUQgZnQsIFJlZ2lzdGVySUQgcnMsIGludCBvZmZzZXQp
CisgICAgeworICAgICAgICBlbWl0SW5zdCgweGU0MDAwMDAwIHwgKGZ0IDw8IE9QX1NIX0ZUKSB8
IChycyA8PCBPUF9TSF9SUykKKyAgICAgICAgICAgICAgICAgfCAob2Zmc2V0ICYgMHhmZmZmKSk7
CisgICAgfQorCisgICAgdm9pZCBzZGMxKEZQUmVnaXN0ZXJJRCBmdCwgUmVnaXN0ZXJJRCBycywg
aW50IG9mZnNldCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4ZjQwMDAwMDAgfCAoZnQgPDwg
T1BfU0hfRlQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChvZmZzZXQg
JiAweGZmZmYpKTsKKyAgICB9CisKKyAgICB2b2lkIG10YzEoUmVnaXN0ZXJJRCBydCwgRlBSZWdp
c3RlcklEIGZzKQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHg0NDgwMDAwMCB8IChmcyA8PCBP
UF9TSF9GUykgfCAocnQgPDwgT1BfU0hfUlQpKTsKKyAgICAgICAgY29wRGVsYXlOb3AoKTsKKyAg
ICB9CisKKyAgICB2b2lkIG1mYzEoUmVnaXN0ZXJJRCBydCwgRlBSZWdpc3RlcklEIGZzKQorICAg
IHsKKyAgICAgICAgZW1pdEluc3QoMHg0NDAwMDAwMCB8IChmcyA8PCBPUF9TSF9GUykgfCAocnQg
PDwgT1BfU0hfUlQpKTsKKyAgICAgICAgY29wRGVsYXlOb3AoKTsKKyAgICB9CisKKyAgICB2b2lk
IHRydW5jX3dfZChGUFJlZ2lzdGVySUQgZmQsIEZQUmVnaXN0ZXJJRCBmcykKKyAgICB7CisgICAg
ICAgIGVtaXRJbnN0KDB4NDYyMDAwMGQgfCAoZmQgPDwgT1BfU0hfRkQpIHwgKGZzIDw8IE9QX1NI
X0ZTKSk7CisgICAgfQorCisgICAgdm9pZCBjdnRfZF93KEZQUmVnaXN0ZXJJRCBmZCwgRlBSZWdp
c3RlcklEIGZzKQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHg0NjgwMDAyMSB8IChmZCA8PCBP
UF9TSF9GRCkgfCAoZnMgPDwgT1BfU0hfRlMpKTsKKyAgICB9CisKKyAgICB2b2lkIGNfZXFfZChG
UFJlZ2lzdGVySUQgZnMsIEZQUmVnaXN0ZXJJRCBmdCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0
KDB4NDYyMDAwMzIgfCAoZnMgPDwgT1BfU0hfRlMpIHwgKGZ0IDw8IE9QX1NIX0ZUKSk7CisgICAg
ICAgIGNvcERlbGF5Tm9wKCk7CisgICAgfQorCisgICAgdm9pZCBjX25ndF9kKEZQUmVnaXN0ZXJJ
RCBmcywgRlBSZWdpc3RlcklEIGZ0KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHg0NjIwMDAz
ZiB8IChmcyA8PCBPUF9TSF9GUykgfCAoZnQgPDwgT1BfU0hfRlQpKTsKKyAgICAgICAgY29wRGVs
YXlOb3AoKTsKKyAgICB9CisKKyAgICB2b2lkIGNfbmdlX2QoRlBSZWdpc3RlcklEIGZzLCBGUFJl
Z2lzdGVySUQgZnQpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDQ2MjAwMDNkIHwgKGZzIDw8
IE9QX1NIX0ZTKSB8IChmdCA8PCBPUF9TSF9GVCkpOworICAgICAgICBjb3BEZWxheU5vcCgpOwor
ICAgIH0KKworICAgIHZvaWQgY19sdF9kKEZQUmVnaXN0ZXJJRCBmcywgRlBSZWdpc3RlcklEIGZ0
KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHg0NjIwMDAzYyB8IChmcyA8PCBPUF9TSF9GUykg
fCAoZnQgPDwgT1BfU0hfRlQpKTsKKyAgICAgICAgY29wRGVsYXlOb3AoKTsKKyAgICB9CisKKyAg
ICB2b2lkIGNfbGVfZChGUFJlZ2lzdGVySUQgZnMsIEZQUmVnaXN0ZXJJRCBmdCkKKyAgICB7Cisg
ICAgICAgIGVtaXRJbnN0KDB4NDYyMDAwM2UgfCAoZnMgPDwgT1BfU0hfRlMpIHwgKGZ0IDw8IE9Q
X1NIX0ZUKSk7CisgICAgICAgIGNvcERlbGF5Tm9wKCk7CisgICAgfQorCisgICAgdm9pZCBjX3Vl
cV9kKEZQUmVnaXN0ZXJJRCBmcywgRlBSZWdpc3RlcklEIGZ0KQorICAgIHsKKyAgICAgICAgZW1p
dEluc3QoMHg0NjIwMDAzMyB8IChmcyA8PCBPUF9TSF9GUykgfCAoZnQgPDwgT1BfU0hfRlQpKTsK
KyAgICAgICAgY29wRGVsYXlOb3AoKTsKKyAgICB9CisKKyAgICB2b2lkIGNfb2xlX2QoRlBSZWdp
c3RlcklEIGZzLCBGUFJlZ2lzdGVySUQgZnQpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDQ2
MjAwMDM2IHwgKGZzIDw8IE9QX1NIX0ZTKSB8IChmdCA8PCBPUF9TSF9GVCkpOworICAgICAgICBj
b3BEZWxheU5vcCgpOworICAgIH0KKworICAgIHZvaWQgY19vbHRfZChGUFJlZ2lzdGVySUQgZnMs
IEZQUmVnaXN0ZXJJRCBmdCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4NDYyMDAwMzQgfCAo
ZnMgPDwgT1BfU0hfRlMpIHwgKGZ0IDw8IE9QX1NIX0ZUKSk7CisgICAgICAgIGNvcERlbGF5Tm9w
KCk7CisgICAgfQorCisgICAgdm9pZCBjX3VsZV9kKEZQUmVnaXN0ZXJJRCBmcywgRlBSZWdpc3Rl
cklEIGZ0KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHg0NjIwMDAzNyB8IChmcyA8PCBPUF9T
SF9GUykgfCAoZnQgPDwgT1BfU0hfRlQpKTsKKyAgICAgICAgY29wRGVsYXlOb3AoKTsKKyAgICB9
CisKKyAgICB2b2lkIGNfdWx0X2QoRlBSZWdpc3RlcklEIGZzLCBGUFJlZ2lzdGVySUQgZnQpCisg
ICAgeworICAgICAgICBlbWl0SW5zdCgweDQ2MjAwMDM1IHwgKGZzIDw8IE9QX1NIX0ZTKSB8IChm
dCA8PCBPUF9TSF9GVCkpOworICAgICAgICBjb3BEZWxheU5vcCgpOworICAgIH0KKworICAgIC8v
IEdlbmVyYWwgaGVscGVycworCisgICAgSm1wRHN0IGxhYmVsKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBKbXBEc3QobV9idWZmZXIuc2l6ZSgpKTsKKyAgICB9CisKKyAgICBKbXBEc3QgYWxpZ24o
aW50IGFsaWdubWVudCkKKyAgICB7CisgICAgICAgIHdoaWxlICghbV9idWZmZXIuaXNBbGlnbmVk
KGFsaWdubWVudCkpCisgICAgICAgICAgICBia3B0KCk7CisKKyAgICAgICAgcmV0dXJuIGxhYmVs
KCk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQqIGdldFJlbG9jYXRlZEFkZHJlc3Modm9pZCog
Y29kZSwgSm1wU3JjIGp1bXApCisgICAgeworICAgICAgICBBU1NFUlQoanVtcC5tX29mZnNldCAh
PSAtMSk7CisgICAgICAgIHZvaWQqIGIgPSByZWludGVycHJldF9jYXN0PHZvaWQqPigocmVpbnRl
cnByZXRfY2FzdDxpbnRwdHJfdD4oY29kZSkpICsganVtcC5tX29mZnNldCk7CisgICAgICAgIHJl
dHVybiBiOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkKiBnZXRSZWxvY2F0ZWRBZGRyZXNzKHZv
aWQqIGNvZGUsIEptcERzdCBsYWJlbCkKKyAgICB7CisgICAgICAgIHZvaWQqIGIgPSByZWludGVy
cHJldF9jYXN0PHZvaWQqPigocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oY29kZSkpICsgbGFi
ZWwubV9vZmZzZXQpOworICAgICAgICByZXR1cm4gYjsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50
IGdldERpZmZlcmVuY2VCZXR3ZWVuTGFiZWxzKEptcERzdCBmcm9tLCBKbXBEc3QgdG8pCisgICAg
eworICAgICAgICByZXR1cm4gdG8ubV9vZmZzZXQgLSBmcm9tLm1fb2Zmc2V0OworICAgIH0KKwor
ICAgIHN0YXRpYyBpbnQgZ2V0RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMoSm1wRHN0IGZyb20sIEpt
cFNyYyB0bykKKyAgICB7CisgICAgICAgIHJldHVybiB0by5tX29mZnNldCAtIGZyb20ubV9vZmZz
ZXQ7CisgICAgfQorCisgICAgc3RhdGljIGludCBnZXREaWZmZXJlbmNlQmV0d2VlbkxhYmVscyhK
bXBTcmMgZnJvbSwgSm1wRHN0IHRvKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvLm1fb2Zmc2V0
IC0gZnJvbS5tX29mZnNldDsKKyAgICB9CisKKyAgICAvLyBBc3NlbWJsZXIgYWRtaW4gbWV0aG9k
czoKKworICAgIHNpemVfdCBzaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2J1
ZmZlci5zaXplKCk7CisgICAgfQorCisgICAgdm9pZCogZXhlY3V0YWJsZUNvcHkoRXhlY3V0YWJs
ZVBvb2wqIGFsbG9jYXRvcikKKyAgICB7CisgICAgICAgIHZvaWQgKnJlc3VsdCA9IG1fYnVmZmVy
LmV4ZWN1dGFibGVDb3B5KGFsbG9jYXRvcik7CisgICAgICAgIGlmICghcmVzdWx0KQorICAgICAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgcmVsb2NhdGVKdW1wcyhtX2J1ZmZlci5kYXRhKCks
IHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIHVu
c2lnbmVkIGdldENhbGxSZXR1cm5PZmZzZXQoSm1wU3JjIGNhbGwpCisgICAgeworICAgICAgICAv
LyBUaGUgcmV0dXJuIGFkZHJlc3MgaXMgYWZ0ZXIgYSBjYWxsIGFuZCBhIGRlbGF5IHNsb3QgaW5z
dHJ1Y3Rpb24KKyAgICAgICAgcmV0dXJuIGNhbGwubV9vZmZzZXQ7CisgICAgfQorCisgICAgLy8g
TGlua2luZyAmIHBhdGNoaW5nOgorICAgIC8vCisgICAgLy8gJ2xpbmsnIGFuZCAncGF0Y2gnIG1l
dGhvZHMgYXJlIGZvciB1c2Ugb24gdW5wcm90ZWN0ZWQgY29kZSAtIHN1Y2ggYXMgdGhlIGNvZGUK
KyAgICAvLyB3aXRoaW4gdGhlIEFzc2VtYmxlckJ1ZmZlciwgYW5kIGNvZGUgYmVpbmcgcGF0Y2hl
ZCBieSB0aGUgcGF0Y2ggYnVmZmVyLiAgT25jZQorICAgIC8vIGNvZGUgaGFzIGJlZW4gZmluYWxp
emVkIGl0IGlzIChwbGF0Zm9ybSBzdXBwb3J0IHBlcm1pdHRpbmcpIHdpdGhpbiBhIG5vbi0KKyAg
ICAvLyB3cml0YWJsZSByZWdpb24gb2YgbWVtb3J5OyB0byBtb2RpZnkgdGhlIGNvZGUgaW4gYW4g
ZXhlY3V0ZS1vbmx5IGV4ZWN1YWJsZQorICAgIC8vIHBvb2wgdGhlICdyZXBhdGNoJyBhbmQgJ3Jl
bGluaycgbWV0aG9kcyBzaG91bGQgYmUgdXNlZC4KKworICAgIHZvaWQgbGlua0p1bXAoSm1wU3Jj
IGZyb20sIEptcERzdCB0bykKKyAgICB7CisgICAgICAgIEFTU0VSVCh0by5tX29mZnNldCAhPSAt
MSk7CisgICAgICAgIEFTU0VSVChmcm9tLm1fb2Zmc2V0ICE9IC0xKTsKKyAgICAgICAgTUlQU1dv
cmQqIGluc24gPSByZWludGVycHJldF9jYXN0PE1JUFNXb3JkKj4ocmVpbnRlcnByZXRfY2FzdDxp
bnRwdHJfdD4obV9idWZmZXIuZGF0YSgpKSArIGZyb20ubV9vZmZzZXQpOworICAgICAgICBNSVBT
V29yZCogdG9fcG9zID0gcmVpbnRlcnByZXRfY2FzdDxNSVBTV29yZCo+KHJlaW50ZXJwcmV0X2Nh
c3Q8aW50cHRyX3Q+KG1fYnVmZmVyLmRhdGEoKSkgKyB0by5tX29mZnNldCk7CisKKyAgICAgICAg
QVNTRVJUKCooaW5zbiAtIDEpID09IDAgJiYgKihpbnNuIC0gMikgPT0gMCAmJiAqKGluc24gLSAz
KSA9PSAwICYmICooaW5zbiAtIDUpID09IDApOworICAgICAgICBpbnNuID0gaW5zbiAtIDY7Cisg
ICAgICAgIGxpbmtXaXRoT2Zmc2V0KGluc24sIHRvX3Bvcyk7CisgICAgfQorCisgICAgc3RhdGlj
IHZvaWQgbGlua0p1bXAodm9pZCogY29kZSwgSm1wU3JjIGZyb20sIHZvaWQqIHRvKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGZyb20ubV9vZmZzZXQgIT0gLTEpOworICAgICAgICBNSVBTV29yZCog
aW5zbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8TUlQU1dvcmQqPihyZWludGVycHJldF9jYXN0PGludHB0
cl90Pihjb2RlKSArIGZyb20ubV9vZmZzZXQpOworCisgICAgICAgIEFTU0VSVCgqKGluc24gLSAx
KSA9PSAwICYmICooaW5zbiAtIDIpID09IDAgJiYgKihpbnNuIC0gMykgPT0gMCAmJiAqKGluc24g
LSA1KSA9PSAwKTsKKyAgICAgICAgaW5zbiA9IGluc24gLSA2OworICAgICAgICBsaW5rV2l0aE9m
ZnNldChpbnNuLCB0byk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgbGlua0NhbGwodm9pZCog
Y29kZSwgSm1wU3JjIGZyb20sIHZvaWQqIHRvKQorICAgIHsKKyAgICAgICAgTUlQU1dvcmQqIGlu
c24gPSByZWludGVycHJldF9jYXN0PE1JUFNXb3JkKj4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJf
dD4oY29kZSkgKyBmcm9tLm1fb2Zmc2V0KTsKKyAgICAgICAgbGlua0NhbGxJbnRlcm5hbChpbnNu
LCB0byk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgbGlua1BvaW50ZXIodm9pZCogY29kZSwg
Sm1wRHN0IGZyb20sIHZvaWQqIHRvKQorICAgIHsKKyAgICAgICAgTUlQU1dvcmQqIGluc24gPSBy
ZWludGVycHJldF9jYXN0PE1JUFNXb3JkKj4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oY29k
ZSkgKyBmcm9tLm1fb2Zmc2V0KTsKKyAgICAgICAgQVNTRVJUKCgqaW5zbiAmIDB4ZmZlMDAwMDAp
ID09IDB4M2MwMDAwMDApOyAvLyBsdWkKKyAgICAgICAgKmluc24gPSAoKmluc24gJiAweGZmZmYw
MDAwKSB8ICgocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pID4+IDE2KSAmIDB4ZmZmZik7
CisgICAgICAgIGluc24rKzsKKyAgICAgICAgQVNTRVJUKCgqaW5zbiAmIDB4ZmMwMDAwMDApID09
IDB4MzQwMDAwMDApOyAvLyBvcmkKKyAgICAgICAgKmluc24gPSAoKmluc24gJiAweGZmZmYwMDAw
KSB8IChyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgJiAweGZmZmYpOworICAgIH0KKwor
ICAgIHN0YXRpYyB2b2lkIHJlbGlua0p1bXAodm9pZCogZnJvbSwgdm9pZCogdG8pCisgICAgewor
ICAgICAgICBNSVBTV29yZCogaW5zbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8TUlQU1dvcmQqPihmcm9t
KTsKKworICAgICAgICBBU1NFUlQoKihpbnNuIC0gMSkgPT0gMCAmJiAqKGluc24gLSA1KSA9PSAw
KTsKKyAgICAgICAgaW5zbiA9IGluc24gLSA2OworICAgICAgICBpbnQgZmx1c2hfc2l6ZSA9IGxp
bmtXaXRoT2Zmc2V0KGluc24sIHRvKTsKKworICAgICAgICBFeGVjdXRhYmxlQWxsb2NhdG9yOjpj
YWNoZUZsdXNoKGluc24sIGZsdXNoX3NpemUpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHJl
bGlua0NhbGwodm9pZCogZnJvbSwgdm9pZCogdG8pCisgICAgeworICAgICAgICB2b2lkKiBzdGFy
dDsKKyAgICAgICAgaW50IHNpemUgPSBsaW5rQ2FsbEludGVybmFsKGZyb20sIHRvKTsKKyAgICAg
ICAgaWYgKHNpemUgPT0gc2l6ZW9mKE1JUFNXb3JkKSkKKyAgICAgICAgICAgIHN0YXJ0ID0gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZnJvbSkgLSAy
ICogc2l6ZW9mKE1JUFNXb3JkKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN0YXJ0ID0g
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZnJvbSkg
LSA0ICogc2l6ZW9mKE1JUFNXb3JkKSk7CisKKyAgICAgICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6
Y2FjaGVGbHVzaChzdGFydCwgc2l6ZSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVwYXRj
aEludDMyKHZvaWQqIGZyb20sIGludDMyX3QgdG8pCisgICAgeworICAgICAgICBNSVBTV29yZCog
aW5zbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8TUlQU1dvcmQqPihmcm9tKTsKKyAgICAgICAgQVNTRVJU
KCgqaW5zbiAmIDB4ZmZlMDAwMDApID09IDB4M2MwMDAwMDApOyAvLyBsdWkKKyAgICAgICAgKmlu
c24gPSAoKmluc24gJiAweGZmZmYwMDAwKSB8ICgodG8gPj4gMTYpICYgMHhmZmZmKTsKKyAgICAg
ICAgaW5zbisrOworICAgICAgICBBU1NFUlQoKCppbnNuICYgMHhmYzAwMDAwMCkgPT0gMHgzNDAw
MDAwMCk7IC8vIG9yaQorICAgICAgICAqaW5zbiA9ICgqaW5zbiAmIDB4ZmZmZjAwMDApIHwgKHRv
ICYgMHhmZmZmKTsKKyAgICAgICAgaW5zbi0tOworICAgICAgICBFeGVjdXRhYmxlQWxsb2NhdG9y
OjpjYWNoZUZsdXNoKGluc24sIDIgKiBzaXplb2YoTUlQU1dvcmQpKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgdm9pZCByZXBhdGNoUG9pbnRlcih2b2lkKiBmcm9tLCB2b2lkKiB0bykKKyAgICB7Cisg
ICAgICAgIHJlcGF0Y2hJbnQzMihmcm9tLCByZWludGVycHJldF9jYXN0PGludDMyX3Q+KHRvKSk7
CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVwYXRjaExvYWRQdHJUb0xFQSh2b2lkKiBmcm9t
KQorICAgIHsKKyAgICAgICAgTUlQU1dvcmQqIGluc24gPSByZWludGVycHJldF9jYXN0PE1JUFNX
b3JkKj4oZnJvbSk7CisgICAgICAgIGluc24gPSBpbnNuICsgMzsKKyAgICAgICAgQVNTRVJUKCgq
aW5zbiAmIDB4ZmMwMDAwMDApID09IDB4OGMwMDAwMDApOyAvLyBsdworICAgICAgICAvKiBsdyAt
PiBhZGRpdSAqLworICAgICAgICAqaW5zbiA9IDB4MjQwMDAwMDAgfCAoKmluc24gJiAweDAzZmZm
ZmZmKTsKKworICAgICAgICBFeGVjdXRhYmxlQWxsb2NhdG9yOjpjYWNoZUZsdXNoKGluc24sIHNp
emVvZihNSVBTV29yZCkpOworICAgIH0KKworcHJpdmF0ZToKKworICAgIC8qIFVwZGF0ZSBlYWNo
IGp1bXAgaW4gdGhlIGJ1ZmZlciBvZiBuZXdfYmFzZS4gICovCisgICAgdm9pZCByZWxvY2F0ZUp1
bXBzKHZvaWQqIG9sZF9iYXNlLCB2b2lkKiBuZXdfYmFzZSkKKyAgICB7CisgICAgICAgIC8vIENo
ZWNrIGVhY2gganVtcAorICAgICAgICBmb3IgKEp1bXBzOjpJdGVyYXRvciBpdGVyID0gbV9qdW1w
cy5iZWdpbigpOyBpdGVyICE9IG1fanVtcHMuZW5kKCk7ICsraXRlcikgeworICAgICAgICAgICAg
aW50IHBvcyA9ICppdGVyOworICAgICAgICAgICAgTUlQU1dvcmQqIGluc24gPSByZWludGVycHJl
dF9jYXN0PE1JUFNXb3JkKj4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obmV3X2Jhc2UpICsg
cG9zKTsKKyAgICAgICAgICAgIGluc24gPSBpbnNuICsgMjsKKyAgICAgICAgICAgIC8vIE5lZWQg
dG8gbWFrZSBzdXJlIHdlIGhhdmUgNSB2YWxpZCBpbnN0cnVjdGlvbnMgYWZ0ZXIgcG9zCisgICAg
ICAgICAgICBpZiAocG9zID49IG1fYnVmZmVyLnNpemUoKSAtIDUgKiBzaXplb2YoTUlQU1dvcmQp
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBpZiAoKCppbnNuICYg
MHhmYzAwMDAwMCkgPT0gMHgwODAwMDAwMCkgeyAvLyBqCisgICAgICAgICAgICAgICAgaW50IG9m
ZnNldCA9ICppbnNuICYgMHgwM2ZmZmZmZjsKKyAgICAgICAgICAgICAgICBpbnQgb2xkX2luc25f
YWRkcmVzcyA9IChpbnQpaW5zbiAtIChpbnQpbmV3X2Jhc2UgKyAoaW50KW9sZF9iYXNlOworICAg
ICAgICAgICAgICAgIGludCB0b3BfZm91cl9iaXRzID0gKG9sZF9pbnNuX2FkZHJlc3MgKyA0KSA+
PiAyODsKKyAgICAgICAgICAgICAgICBpbnQgb2xkX3RhcmdldF9hZGRyZXNzID0gKHRvcF9mb3Vy
X2JpdHMgPDwgMjgpIHwgKG9mZnNldCA8PCAyKTsKKyAgICAgICAgICAgICAgICBpbnQgbmV3X3Rh
cmdldF9hZGRyZXNzID0gb2xkX3RhcmdldF9hZGRyZXNzIC0gKGludClvbGRfYmFzZSArIChpbnQp
bmV3X2Jhc2U7CisgICAgICAgICAgICAgICAgaW50IG5ld19pbnNuX2FkZHJlc3MgPSAoaW50KWlu
c247CisgICAgICAgICAgICAgICAgaWYgKCgobmV3X2luc25fYWRkcmVzcyArIDQpID4+IDI4KSA9
PSAobmV3X3RhcmdldF9hZGRyZXNzID4+IDI4KSkgeworICAgICAgICAgICAgICAgICAgICAqaW5z
biA9IDB4MDgwMDAwMDAgfCAoKG5ld190YXJnZXRfYWRkcmVzcyA+PiAyKSAmIDB4M2ZmZmZmZik7
CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLyogbHVpICov
CisgICAgICAgICAgICAgICAgICAgICppbnNuID0gMHgzYzAwMDAwMCB8IChNSVBTUmVnaXN0ZXJz
Ojp0OSA8PCBPUF9TSF9SVCkgfCAoKG5ld190YXJnZXRfYWRkcmVzcyA+PiAxNikgJiAweGZmZmYp
OworICAgICAgICAgICAgICAgICAgICAvKiBvcmkgKi8KKyAgICAgICAgICAgICAgICAgICAgKihp
bnNuICsgMSkgPSAweDM0MDAwMDAwIHwgKE1JUFNSZWdpc3RlcnM6OnQ5IDw8IE9QX1NIX1JUKSB8
IChNSVBTUmVnaXN0ZXJzOjp0OSA8PCBPUF9TSF9SUykgfCAobmV3X3RhcmdldF9hZGRyZXNzICYg
MHhmZmZmKTsKKyAgICAgICAgICAgICAgICAgICAgLyoganIgKi8KKyAgICAgICAgICAgICAgICAg
ICAgKihpbnNuICsgMikgPSAweDAwMDAwMDA4IHwgKE1JUFNSZWdpc3RlcnM6OnQ5IDw8IE9QX1NI
X1JTKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKCgqaW5zbiAm
IDB4ZmZlMDAwMDApID09IDB4M2MwMDAwMDApIHsgLy8gbHVpCisgICAgICAgICAgICAgICAgaW50
IGhpZ2ggPSAoKmluc24gJiAweGZmZmYpIDw8IDE2OworICAgICAgICAgICAgICAgIGludCBsb3cg
PSAqKGluc24gKyAxKSAmIDB4ZmZmZjsKKyAgICAgICAgICAgICAgICBpbnQgb2xkX3RhcmdldF9h
ZGRyZXNzID0gaGlnaCB8IGxvdzsKKyAgICAgICAgICAgICAgICBpbnQgbmV3X3RhcmdldF9hZGRy
ZXNzID0gb2xkX3RhcmdldF9hZGRyZXNzIC0gKGludClvbGRfYmFzZSArIChpbnQpbmV3X2Jhc2U7
CisgICAgICAgICAgICAgICAgLyogbHVpICovCisgICAgICAgICAgICAgICAgKmluc24gPSAweDNj
MDAwMDAwIHwgKE1JUFNSZWdpc3RlcnM6OnQ5IDw8IE9QX1NIX1JUKSB8ICgobmV3X3RhcmdldF9h
ZGRyZXNzID4+IDE2KSAmIDB4ZmZmZik7CisgICAgICAgICAgICAgICAgLyogb3JpICovCisgICAg
ICAgICAgICAgICAgKihpbnNuICsgMSkgPSAweDM0MDAwMDAwIHwgKE1JUFNSZWdpc3RlcnM6OnQ5
IDw8IE9QX1NIX1JUKSB8IChNSVBTUmVnaXN0ZXJzOjp0OSA8PCBPUF9TSF9SUykgfCAobmV3X3Rh
cmdldF9hZGRyZXNzICYgMHhmZmZmKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIHN0YXRpYyBpbnQgbGlua1dpdGhPZmZzZXQoTUlQU1dvcmQqIGluc24sIHZvaWQqIHRv
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKCgqaW5zbiAmIDB4ZmMwMDAwMDApID09IDB4MTAwMDAw
MDAgLy8gYmVxCisgICAgICAgICAgICAgICB8fCAoKmluc24gJiAweGZjMDAwMDAwKSA9PSAweDE0
MDAwMDAwIC8vIGJuZQorICAgICAgICAgICAgICAgfHwgKCppbnNuICYgMHhmZmZmMDAwMCkgPT0g
MHg0NTAxMDAwMCAvLyBiYzF0CisgICAgICAgICAgICAgICB8fCAoKmluc24gJiAweGZmZmYwMDAw
KSA9PSAweDQ1MDAwMDAwKTsgLy8gYmMxZgorICAgICAgICBpbnRwdHJfdCBkaWZmID0gKHJlaW50
ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKQorICAgICAgICAgICAgICAgICAgICAgICAgIC0gcmVp
bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5zbikgLSA0KSA+PiAyOworCisgICAgICAgIGlmIChk
aWZmIDwgLTMyNzY4IHx8IGRpZmYgPiAzMjc2NyB8fCAqKGluc24gKyAyKSAhPSAweDEwMDAwMDAz
KSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgIENvbnZlcnQgdGhlIHNlcXVlbmNl
OgorICAgICAgICAgICAgICAgICAgYmVxICQyLCAkMywgdGFyZ2V0CisgICAgICAgICAgICAgICAg
ICBub3AKKyAgICAgICAgICAgICAgICAgIGIgMWYKKyAgICAgICAgICAgICAgICAgIG5vcAorICAg
ICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAgICAg
ICAxOgorCisgICAgICAgICAgICAgICAgdG8gdGhlIG5ldyBzZXF1ZW5jZSBpZiBwb3NzaWJsZToK
KyAgICAgICAgICAgICAgICAgIGJuZSAkMiwgJDMsIDFmCisgICAgICAgICAgICAgICAgICBub3AK
KyAgICAgICAgICAgICAgICAgIGogICAgdGFyZ2V0CisgICAgICAgICAgICAgICAgICBub3AKKyAg
ICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAg
ICAgMToKKworICAgICAgICAgICAgICAgIE9SIHRvIHRoZSBuZXcgc2VxdWVuY2U6CisgICAgICAg
ICAgICAgICAgICBibmUgJDIsICQzLCAxZgorICAgICAgICAgICAgICAgICAgbm9wCisgICAgICAg
ICAgICAgICAgICBsdWkgJDI1LCB0YXJnZXQgPj4gMTYKKyAgICAgICAgICAgICAgICAgIG9yaSAk
MjUsICQyNSwgdGFyZ2V0ICYgMHhmZmZmCisgICAgICAgICAgICAgICAgICBqciAkMjUKKyAgICAg
ICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgICAgIDE6CisKKyAgICAgICAgICAgICAgICBO
b3RlOiBiZXEvYm5lL2JjMXQgYXJlIGNvbnZlcnRlZCB0byBibmUvYmVxL2JjMWYuCisgICAgICAg
ICAgICAqLworCisgICAgICAgICAgICBpZiAoKihpbnNuICsgMikgPT0gMHgxMDAwMDAwMykgewor
ICAgICAgICAgICAgICAgIGlmICgoKmluc24gJiAweGZjMDAwMDAwKSA9PSAweDEwMDAwMDAwKSAg
ICAgICAvLyBiZXEKKyAgICAgICAgICAgICAgICAgICAgKmluc24gPSAoKmluc24gJiAweDAzZmYw
MDAwKSB8IDB4MTQwMDAwMDU7IC8vIGJuZQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKCgqaW5z
biAmIDB4ZmMwMDAwMDApID09IDB4MTQwMDAwMDApICAvLyBibmUKKyAgICAgICAgICAgICAgICAg
ICAgKmluc24gPSAoKmluc24gJiAweDAzZmYwMDAwKSB8IDB4MTAwMDAwMDU7IC8vIGJlcQorICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKCgqaW5zbiAmIDB4ZmZmZjAwMDApID09IDB4NDUwMTAwMDAp
ICAvLyBiYzF0CisgICAgICAgICAgICAgICAgICAgICppbnNuID0gMHg0NTAwMDAwNTsgLy8gYmMx
ZgorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKDApOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpbnNuID0gaW5zbiArIDI7CisgICAgICAgICAg
ICBpZiAoKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluc24pICsgNCkgPj4gMjgKKyAgICAg
ICAgICAgICAgICA9PSByZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgPj4gMjgpIHsKKyAg
ICAgICAgICAgICAgICAqaW5zbiA9IDB4MDgwMDAwMDAgfCAoKHJlaW50ZXJwcmV0X2Nhc3Q8aW50
cHRyX3Q+KHRvKSA+PiAyKSAmIDB4M2ZmZmZmZik7CisgICAgICAgICAgICAgICAgKihpbnNuICsg
MSkgPSAwOworICAgICAgICAgICAgICAgIHJldHVybiA0ICogc2l6ZW9mKE1JUFNXb3JkKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaW50cHRyX3QgbmV3X3RhcmdldF9hZGRyZXNzID0g
cmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pOworICAgICAgICAgICAgLyogbHVpICovCisg
ICAgICAgICAgICAqaW5zbiA9IDB4M2MwMDAwMDAgfCAoTUlQU1JlZ2lzdGVyczo6dDkgPDwgT1Bf
U0hfUlQpIHwgKChuZXdfdGFyZ2V0X2FkZHJlc3MgPj4gMTYpICYgMHhmZmZmKTsKKyAgICAgICAg
ICAgIC8qIG9yaSAqLworICAgICAgICAgICAgKihpbnNuICsgMSkgPSAweDM0MDAwMDAwIHwgKE1J
UFNSZWdpc3RlcnM6OnQ5IDw8IE9QX1NIX1JUKSB8IChNSVBTUmVnaXN0ZXJzOjp0OSA8PCBPUF9T
SF9SUykgfCAobmV3X3RhcmdldF9hZGRyZXNzICYgMHhmZmZmKTsKKyAgICAgICAgICAgIC8qIGpy
ICovCisgICAgICAgICAgICAqKGluc24gKyAyKSA9IDB4MDAwMDAwMDggfCAoTUlQU1JlZ2lzdGVy
czo6dDkgPDwgT1BfU0hfUlMpOworICAgICAgICAgICAgcmV0dXJuIDUgKiBzaXplb2YoTUlQU1dv
cmQpOworICAgICAgICB9CisKKyAgICAgICAgKmluc24gPSAoKmluc24gJiAweGZmZmYwMDAwKSB8
IChkaWZmICYgMHhmZmZmKTsKKyAgICAgICAgcmV0dXJuIHNpemVvZihNSVBTV29yZCk7CisgICAg
fQorCisgICAgc3RhdGljIGludCBsaW5rQ2FsbEludGVybmFsKHZvaWQqIGZyb20sIHZvaWQqIHRv
KQorICAgIHsKKyAgICAgICAgTUlQU1dvcmQqIGluc24gPSByZWludGVycHJldF9jYXN0PE1JUFNX
b3JkKj4oZnJvbSk7CisgICAgICAgIGluc24gPSBpbnNuIC0gNDsKKworICAgICAgICBpZiAoKCoo
aW5zbiArIDIpICYgMHhmYzAwMDAwMCkgPT0gMHgwYzAwMDAwMCkgeyAvLyBqYWwKKyAgICAgICAg
ICAgIGlmICgocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZnJvbSkgLSA0KSA+PiAyOAorICAg
ICAgICAgICAgICAgID09IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSA+PiAyOCkgewor
ICAgICAgICAgICAgICAgICooaW5zbiArIDIpID0gMHgwYzAwMDAwMCB8ICgocmVpbnRlcnByZXRf
Y2FzdDxpbnRwdHJfdD4odG8pID4+IDIpICYgMHgzZmZmZmZmKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gc2l6ZW9mKE1JUFNXb3JkKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyog
bHVpICQyNSwgKHRvID4+IDE2KSAmIDB4ZmZmZiAqLworICAgICAgICAgICAgKmluc24gPSAweDNj
MDAwMDAwIHwgKE1JUFNSZWdpc3RlcnM6OnQ5IDw8IE9QX1NIX1JUKSB8ICgocmVpbnRlcnByZXRf
Y2FzdDxpbnRwdHJfdD4odG8pID4+IDE2KSAmIDB4ZmZmZik7CisgICAgICAgICAgICAvKiBvcmkg
JDI1LCAkMjUsIHRvICYgMHhmZmZmICovCisgICAgICAgICAgICAqKGluc24gKyAxKSA9IDB4MzQw
MDAwMDAgfCAoTUlQU1JlZ2lzdGVyczo6dDkgPDwgT1BfU0hfUlQpIHwgKE1JUFNSZWdpc3RlcnM6
OnQ5IDw8IE9QX1NIX1JTKSB8IChyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgJiAweGZm
ZmYpOworICAgICAgICAgICAgLyogamFsciAkMjUgKi8KKyAgICAgICAgICAgICooaW5zbiArIDIp
ID0gMHgwMDAwZjgwOSB8IChNSVBTUmVnaXN0ZXJzOjp0OSA8PCBPUF9TSF9SUyk7CisgICAgICAg
ICAgICByZXR1cm4gMyAqIHNpemVvZihNSVBTV29yZCk7CisgICAgICAgIH0KKworICAgICAgICBB
U1NFUlQoKCppbnNuICYgMHhmZmUwMDAwMCkgPT0gMHgzYzAwMDAwMCk7IC8vIGx1aQorICAgICAg
ICBBU1NFUlQoKCooaW5zbiArIDEpICYgMHhmYzAwMDAwMCkgPT0gMHgzNDAwMDAwMCk7IC8vIG9y
aQorCisgICAgICAgIC8qIGx1aSAqLworICAgICAgICAqaW5zbiA9ICgqaW5zbiAmIDB4ZmZmZjAw
MDApIHwgKChyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgPj4gMTYpICYgMHhmZmZmKTsK
KyAgICAgICAgLyogb3JpICovCisgICAgICAgICooaW5zbiArIDEpID0gKCooaW5zbiArIDEpICYg
MHhmZmZmMDAwMCkgfCAocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pICYgMHhmZmZmKTsK
KyAgICAgICAgcmV0dXJuIDIgKiBzaXplb2YoTUlQU1dvcmQpOworICAgIH0KKworICAgIEFzc2Vt
YmxlckJ1ZmZlciBtX2J1ZmZlcjsKKyAgICBKdW1wcyBtX2p1bXBzOworfTsKKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoQVNTRU1CTEVSKSAmJiBQTEFURk9STShNSVBT
KQorCisjZW5kaWYgLy8gTUlQU0Fzc2VtYmxlcl9oCkluZGV4OiBhc3NlbWJsZXIvQWJzdHJhY3RN
YWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGFzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNz
ZW1ibGVyLmgJKHJldmlzaW9uIDUwNjEwKQorKysgYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3Nl
bWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTczLDcgKzE3Myw3IEBACiAgICAgc3RydWN0IElt
bTMyIHsKICAgICAgICAgZXhwbGljaXQgSW1tMzIoaW50MzJfdCB2YWx1ZSkKICAgICAgICAgICAg
IDogbV92YWx1ZSh2YWx1ZSkKLSNpZiBQTEFURk9STShBUk0pCisjaWYgUExBVEZPUk0oQVJNKSB8
fCBQTEFURk9STShNSVBTKQogICAgICAgICAgICAgLCBtX2lzUG9pbnRlcihmYWxzZSkKICNlbmRp
ZgogICAgICAgICB7CkBAIC0xODIsNyArMTgyLDcgQEAKICNpZiAhUExBVEZPUk0oWDg2XzY0KQog
ICAgICAgICBleHBsaWNpdCBJbW0zMihJbW1QdHIgcHRyKQogICAgICAgICAgICAgOiBtX3ZhbHVl
KHB0ci5hc0ludHB0cigpKQotI2lmIFBMQVRGT1JNKEFSTSkKKyNpZiBQTEFURk9STShBUk0pIHx8
IFBMQVRGT1JNKE1JUFMpCiAgICAgICAgICAgICAsIG1faXNQb2ludGVyKHRydWUpCiAjZW5kaWYK
ICAgICAgICAgewpAQCAtMTkwLDEzICsxOTAsMTQgQEAKICNlbmRpZgogCiAgICAgICAgIGludDMy
X3QgbV92YWx1ZTsKLSNpZiBQTEFURk9STShBUk0pCisjaWYgUExBVEZPUk0oQVJNKSB8fCBQTEFU
Rk9STShNSVBTKQogICAgICAgICAvLyBXZSByZWx5IG9uIGJlaW5nIGFibGUgdG8gcmVnZW5lcmF0
ZSBjb2RlIHRvIHJlY292ZXIgZXhjZXB0aW9uIGhhbmRsaW5nCiAgICAgICAgIC8vIGluZm9ybWF0
aW9uLiAgU2luY2UgQVJNdjcgc3VwcG9ydHMgMTYtYml0IGltbWVkaWF0ZXMgdGhlcmUgaXMgYSBk
YW5nZXIKICAgICAgICAgLy8gdGhhdCBpZiBwb2ludGVyIHZhbHVlcyBjaGFuZ2UgdGhlIGxheW91
dCBvZiB0aGUgZ2VuZXJhdGVkIGNvZGUgd2lsbCBjaGFuZ2UuCiAgICAgICAgIC8vIFRvIGF2b2lk
IHRoaXMgcHJvYmxlbSwgYWx3YXlzIGdlbmVyYXRlIHBvaW50ZXJzIChhbmQgdGh1cyBJbW0zMnMg
Y29uc3RydWN0ZWQKICAgICAgICAgLy8gZnJvbSBJbW1QdHJzKSB3aXRoIGEgY29kZSBzZXF1ZW5j
ZSB0aGF0IGlzIGFibGUgIHRvIHJlcHJlc2VudCAgYW55IHBvaW50ZXIKICAgICAgICAgLy8gdmFs
dWUgLSBkb24ndCB1c2UgYSBtb3JlIGNvbXBhY3QgZm9ybSBpbiB0aGVzZSBjYXNlcy4KKyAgICAg
ICAgLy8gU2FtZSBmb3IgTUlQUy4KICAgICAgICAgYm9vbCBtX2lzUG9pbnRlcjsKICNlbmRpZgog
ICAgIH07CkluZGV4OiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyTUlQUy5oCShyZXZpc2lvbiAwKQorKysgYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyTUlQUy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2NjMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBNSVBTIFRFQ0hOT0xPR0lFUywgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIE1JUFMgVEVDSE5PTE9HSUVTLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBNYWNyb0Fzc2VtYmxlck1JUFNfaAor
I2RlZmluZSBNYWNyb0Fzc2VtYmxlck1JUFNfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+
CisKKyNpZiBFTkFCTEUoQVNTRU1CTEVSKSAmJiBQTEFURk9STShNSVBTKQorCisjaW5jbHVkZSAi
TUlQU0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIkFic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIE1hY3JvQXNzZW1ibGVyTUlQUyA6IHB1YmxpYyBBYnN0
cmFjdE1hY3JvQXNzZW1ibGVyPE1JUFNBc3NlbWJsZXI+IHsKK3B1YmxpYzoKKworICAgIE1hY3Jv
QXNzZW1ibGVyTUlQUygpCisgICAgICAgIDogbV9maXhlZFdpZHRoKGZhbHNlKQorICAgIHsKKyAg
ICB9CisKKyAgICBzdGF0aWMgY29uc3QgU2NhbGUgU2NhbGVQdHIgPSBUaW1lc0ZvdXI7CisKKyAg
ICAvLyBGb3Igc3RvcmluZyBpbW1lZGlhdGUgbnVtYmVyCisgICAgc3RhdGljIGNvbnN0IFJlZ2lz
dGVySUQgaW1tVGVtcFJlZ2lzdGVyID0gTUlQU1JlZ2lzdGVyczo6dDA7CisgICAgLy8gRm9yIHN0
b3JpbmcgZGF0YSBsb2FkZWQgZnJvbSB0aGUgbWVtb3J5CisgICAgc3RhdGljIGNvbnN0IFJlZ2lz
dGVySUQgZGF0YVRlbXBSZWdpc3RlciA9IE1JUFNSZWdpc3RlcnM6OnQxOworICAgIC8vIEZvciBz
dG9yaW5nIGFkZHJlc3MgYmFzZQorICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGFkZHJUZW1w
UmVnaXN0ZXIgPSBNSVBTUmVnaXN0ZXJzOjp0MjsKKyAgICAvLyBGb3Igc3RvcmluZyBjb21wYXJl
IHJlc3VsdAorICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGNtcFRlbXBSZWdpc3RlciA9IE1J
UFNSZWdpc3RlcnM6OnQzOworCisgICAgLy8gRlAgdGVtcCByZWdpc3RlcgorICAgIHN0YXRpYyBj
b25zdCBGUFJlZ2lzdGVySUQgZnBUZW1wUmVnaXN0ZXIgPSBNSVBTUmVnaXN0ZXJzOjpmMTY7CisK
KyAgICBlbnVtIENvbmRpdGlvbiB7CisgICAgICAgIEVxdWFsLAorICAgICAgICBOb3RFcXVhbCwK
KyAgICAgICAgQWJvdmUsCisgICAgICAgIEFib3ZlT3JFcXVhbCwKKyAgICAgICAgQmVsb3csCisg
ICAgICAgIEJlbG93T3JFcXVhbCwKKyAgICAgICAgR3JlYXRlclRoYW4sCisgICAgICAgIEdyZWF0
ZXJUaGFuT3JFcXVhbCwKKyAgICAgICAgTGVzc1RoYW4sCisgICAgICAgIExlc3NUaGFuT3JFcXVh
bCwKKyAgICAgICAgT3ZlcmZsb3csCisgICAgICAgIFNpZ25lZCwKKyAgICAgICAgWmVybywKKyAg
ICAgICAgTm9uWmVybworICAgIH07CisKKyAgICBlbnVtIERvdWJsZUNvbmRpdGlvbiB7CisgICAg
ICAgIERvdWJsZUVxdWFsLAorICAgICAgICBEb3VibGVOb3RFcXVhbCwKKyAgICAgICAgRG91Ymxl
R3JlYXRlclRoYW4sCisgICAgICAgIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCwKKyAgICAgICAg
RG91YmxlTGVzc1RoYW4sCisgICAgICAgIERvdWJsZUxlc3NUaGFuT3JFcXVhbCwKKyAgICAgICAg
RG91YmxlRXF1YWxPclVub3JkZXJlZCwKKyAgICAgICAgRG91YmxlTm90RXF1YWxPclVub3JkZXJl
ZCwKKyAgICAgICAgRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCwKKyAgICAgICAgRG91Ymxl
R3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQsCisgICAgICAgIERvdWJsZUxlc3NUaGFuT3JV
bm9yZGVyZWQsCisgICAgICAgIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkCisgICAg
fTsKKworICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHN0YWNrUG9pbnRlclJlZ2lzdGVyID0g
TUlQU1JlZ2lzdGVyczo6c3A7CisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmV0dXJuQWRk
cmVzc1JlZ2lzdGVyID0gTUlQU1JlZ2lzdGVyczo6cmE7CisKKyAgICAvLyBJbnRlZ2VyIGFyaXRo
bWV0aWMgb3BlcmF0aW9uczoKKyAgICAvLworICAgIC8vIE9wZXJhdGlvbnMgYXJlIHR5cGljYWxs
eSB0d28gb3BlcmFuZCAtIG9wZXJhdGlvbihzb3VyY2UsIHNyY0RzdCkKKyAgICAvLyBGb3IgbWFu
eSBvcGVyYXRpb25zIHRoZSBzb3VyY2UgbWF5IGJlIGFuIEltbTMyLCB0aGUgc3JjRHN0IG9wZXJh
bmQKKyAgICAvLyBtYXkgb2Z0ZW4gYmUgYSBtZW1vcnkgbG9jYXRpb24gKGV4cGxpY3RseSBkZXNj
cmliZWQgdXNpbmcgYW4gQWRkcmVzcworICAgIC8vIG9iamVjdCkuCisKKyAgICB2b2lkIGFkZDMy
KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5hZGR1KGRlc3QsIGRlc3QsIHNyYyk7CisgICAgfQorCisgICAgdm9pZCBhZGQzMihJbW0z
MiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGFkZDMyKGltbSwgZGVzdCwg
ZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBhZGQzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3Jj
LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAoIWltbS5tX2lzUG9pbnRlciAm
JiBpbW0ubV92YWx1ZSA+PSAtMzI3NjggJiYgaW1tLm1fdmFsdWUgPD0gMzI3NjcKKyAgICAgICAg
ICAgICYmICFtX2ZpeGVkV2lkdGgpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgIGFk
ZGl1ICAgICBkZXN0LCBzcmMsIGltbQorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmFkZGl1KGRlc3QsIHNyYywgaW1tLm1fdmFsdWUpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgbGkgICAgICAgIGltbVRlbXAsIGltbQorICAg
ICAgICAgICAgICBhZGR1ICAgICAgZGVzdCwgc3JjLCBpbW1UZW1wCisgICAgICAgICAgICAqLwor
ICAgICAgICAgICAgbW92ZShpbW0sIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5hZGR1KGRlc3QsIHNyYywgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHZvaWQgYWRkMzIoSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgewor
ICAgICAgICBpZiAoYWRkcmVzcy5vZmZzZXQgPj0gLTMyNzY4ICYmIGFkZHJlc3Mub2Zmc2V0IDw9
IDMyNzY3CisgICAgICAgICAgICAmJiAhbV9maXhlZFdpZHRoKSB7CisgICAgICAgICAgICAvKgor
ICAgICAgICAgICAgICBsdyAgICAgICAgZGF0YVRlbXAsIG9mZnNldChiYXNlKQorICAgICAgICAg
ICAgICBsaSAgICAgICAgaW1tVGVtcCwgaW1tCisgICAgICAgICAgICAgIGFkZHUgICAgICBkYXRh
VGVtcCwgZGF0YVRlbXAsIGltbVRlbXAKKyAgICAgICAgICAgICAgc3cgICAgICAgIGRhdGFUZW1w
LCBvZmZzZXQoYmFzZSkKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5s
dyhkYXRhVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAg
ICAgICAgIGlmICghaW1tLm1faXNQb2ludGVyCisgICAgICAgICAgICAgICAgJiYgaW1tLm1fdmFs
dWUgPj0gLTMyNzY4ICYmIGltbS5tX3ZhbHVlIDw9IDMyNzY3CisgICAgICAgICAgICAgICAgJiYg
IW1fZml4ZWRXaWR0aCkKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRpdShkYXRhVGVt
cFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGltbS5tX3ZhbHVlKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IG1vdmUoaW1tLCBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVy
LmFkZHUoZGF0YVRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3RlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5zdyhkYXRhVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UsIGFk
ZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qCisgICAgICAg
ICAgICAgIGx1aSAgICAgICBhZGRyVGVtcCwgKG9mZnNldCArIDB4ODAwMCkgPj4gMTYKKyAgICAg
ICAgICAgICAgYWRkdSAgICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgYmFzZQorICAgICAgICAgICAg
ICBsdyAgICAgICAgZGF0YVRlbXAsIChvZmZzZXQgJiAweGZmZmYpKGFkZHJUZW1wKQorICAgICAg
ICAgICAgICBsaSAgICAgICAgaW1tdGVtcCwgaW1tCisgICAgICAgICAgICAgIGFkZHUgICAgICBk
YXRhVGVtcCwgZGF0YVRlbXAsIGltbVRlbXAKKyAgICAgICAgICAgICAgc3cgICAgICAgIGRhdGFU
ZW1wLCAob2Zmc2V0ICYgMHhmZmZmKShhZGRyVGVtcCkKKyAgICAgICAgICAgICovCisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5sdWkoYWRkclRlbXBSZWdpc3RlciwgKGFkZHJlc3Mub2Zmc2V0ICsg
MHg4MDAwKSA+PiAxNik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVn
aXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSk7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5sdyhkYXRhVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9m
ZnNldCk7CisKKyAgICAgICAgICAgIGlmIChpbW0ubV92YWx1ZSA+PSAtMzI3NjggJiYgaW1tLm1f
dmFsdWUgPD0gMzI3NjcgJiYgIW1fZml4ZWRXaWR0aCkKKyAgICAgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5hZGRpdShkYXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGltbS5tX3ZhbHVlKTsKKyAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgIG1vdmUoaW1tLCBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoZGF0YVRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3Rl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltbVRlbXBSZWdpc3Rlcik7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdyhkYXRhVGVtcFJlZ2lzdGVy
LCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICB2b2lkIGFkZDMyKEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBsb2FkMzIoc3JjLCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgYWRkMzIoZGF0YVRl
bXBSZWdpc3RlciwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBhZGQzMihSZWdpc3RlcklEIHNy
YywgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKGRlc3Qub2Zmc2V0ID49IC0zMjc2
OCAmJiBkZXN0Lm9mZnNldCA8PSAzMjc2NyAmJiAhbV9maXhlZFdpZHRoKSB7CisgICAgICAgICAg
ICAvKgorICAgICAgICAgICAgICBsdyAgICAgICAgZGF0YVRlbXAsIG9mZnNldChiYXNlKQorICAg
ICAgICAgICAgICBhZGR1ICAgICAgZGF0YVRlbXAsIGRhdGFUZW1wLCBzcmMKKyAgICAgICAgICAg
ICAgc3cgICAgICAgIGRhdGFUZW1wLCBvZmZzZXQoYmFzZSkKKyAgICAgICAgICAgICovCisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5sdyhkYXRhVGVtcFJlZ2lzdGVyLCBkZXN0LmJhc2UsIGRlc3Qu
b2Zmc2V0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoZGF0YVRlbXBSZWdpc3Rlciwg
ZGF0YVRlbXBSZWdpc3Rlciwgc3JjKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN3KGRhdGFU
ZW1wUmVnaXN0ZXIsIGRlc3QuYmFzZSwgZGVzdC5vZmZzZXQpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgbHVpICAgICAgIGFkZHJUZW1wLCAob2Zmc2V0
ICsgMHg4MDAwKSA+PiAxNgorICAgICAgICAgICAgICBhZGR1ICAgICAgYWRkclRlbXAsIGFkZHJU
ZW1wLCBiYXNlCisgICAgICAgICAgICAgIGx3ICAgICAgICBkYXRhVGVtcCwgKG9mZnNldCAmIDB4
ZmZmZikoYWRkclRlbXApCisgICAgICAgICAgICAgIGFkZHUgICAgICBkYXRhVGVtcCwgZGF0YVRl
bXAsIHNyYworICAgICAgICAgICAgICBzdyAgICAgICAgZGF0YVRlbXAsIChvZmZzZXQgJiAweGZm
ZmYpKGFkZHJUZW1wKQorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx1
aShhZGRyVGVtcFJlZ2lzdGVyLCAoZGVzdC5vZmZzZXQgKyAweDgwMDApID4+IDE2KTsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3Rl
ciwgZGVzdC5iYXNlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx3KGRhdGFUZW1wUmVnaXN0
ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGRlc3Qub2Zmc2V0KTsKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLmFkZHUoZGF0YVRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3Rlciwgc3JjKTsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLnN3KGRhdGFUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIs
IGRlc3Qub2Zmc2V0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgYWRkMzIoSW1tMzIg
aW1tLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIC8qCisgICAgICAg
ICAgIGxpICAgYWRkclRlbXAsIGFkZHJlc3MKKyAgICAgICAgICAgbGkgICBpbW1UZW1wLCBpbW0K
KyAgICAgICAgICAgbHcgICBkYXRhVGVtcCwgMChhZGRyVGVtcCkKKyAgICAgICAgICAgYWRkdSBk
YXRhVGVtcCwgZGF0YVRlbXAsIGltbVRlbXAKKyAgICAgICAgICAgc3cgICBkYXRhVGVtcCwgMChh
ZGRyVGVtcCkKKyAgICAgICAgKi8KKyAgICAgICAgbW92ZShJbW1QdHIoYWRkcmVzcy5tX3B0ciks
IGFkZHJUZW1wUmVnaXN0ZXIpOworICAgICAgICBtX2Fzc2VtYmxlci5sdyhkYXRhVGVtcFJlZ2lz
dGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCAwKTsKKyAgICAgICAgaWYgKCFpbW0ubV9pc1BvaW50ZXIg
JiYgaW1tLm1fdmFsdWUgPj0gLTMyNzY4ICYmIGltbS5tX3ZhbHVlIDw9IDMyNzY3CisgICAgICAg
ICAgICAmJiAhbV9maXhlZFdpZHRoKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkaXUoZGF0
YVRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3RlciwgaW1tLm1fdmFsdWUpOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIG1vdmUoaW1tLCBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuYWRkdShkYXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLCBp
bW1UZW1wUmVnaXN0ZXIpOworICAgICAgICB9CisgICAgICAgIG1fYXNzZW1ibGVyLnN3KGRhdGFU
ZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIDApOworICAgIH0KKworICAgIHZvaWQgYW5k
MzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmFuZF9pbnNuKGRlc3QsIGRlc3QsIHNyYyk7CisgICAgfQorCisgICAgdm9pZCBhbmQz
MihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlmICghaW1tLm1f
aXNQb2ludGVyICYmIGltbS5tX3ZhbHVlID09IDAgJiYgIW1fZml4ZWRXaWR0aCkKKyAgICAgICAg
ICAgIG1vdmUoTUlQU1JlZ2lzdGVyczo6emVybywgZGVzdCk7CisgICAgICAgIGVsc2UgaWYgKCFp
bW0ubV9pc1BvaW50ZXIgJiYgaW1tLm1fdmFsdWUgPiAwICYmIGltbS5tX3ZhbHVlIDwgNjU1MzUK
KyAgICAgICAgICAgICAgICAgJiYgIW1fZml4ZWRXaWR0aCkKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLmFuZGkoZGVzdCwgZGVzdCwgaW1tLm1fdmFsdWUpOworICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIC8qCisgICAgICAgICAgICAgIGxpICAgICAgICBpbW1UZW1wLCBpbW0KKyAgICAgICAg
ICAgICAgYW5kICAgICAgIGRlc3QsIGRlc3QsIGltbVRlbXAKKyAgICAgICAgICAgICovCisgICAg
ICAgICAgICBtb3ZlKGltbSwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLmFuZF9pbnNuKGRlc3QsIGRlc3QsIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICB2b2lkIGxzaGlmdDMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAg
IHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc2xsKGRlc3QsIGRlc3QsIGltbS5tX3ZhbHVlKTsKKyAg
ICB9CisKKyAgICB2b2lkIGxzaGlmdDMyKFJlZ2lzdGVySUQgc2hpZnRfYW1vdW50LCBSZWdpc3Rl
cklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zbGx2KGRlc3QsIGRlc3QsIHNo
aWZ0X2Ftb3VudCk7CisgICAgfQorCisgICAgdm9pZCBtdWwzMihSZWdpc3RlcklEIHNyYywgUmVn
aXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubXVsKGRlc3QsIGRlc3Qs
IHNyYyk7CisgICAgfQorCisgICAgdm9pZCBtdWwzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3Jj
LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAoIWltbS5tX2lzUG9pbnRlciAm
JiBpbW0ubV92YWx1ZSA9PSAwICYmICFtX2ZpeGVkV2lkdGgpCisgICAgICAgICAgICBtb3ZlKE1J
UFNSZWdpc3RlcnM6Onplcm8sIGRlc3QpOworICAgICAgICBlbHNlIGlmICghaW1tLm1faXNQb2lu
dGVyICYmIGltbS5tX3ZhbHVlID09IDEgJiYgIW1fZml4ZWRXaWR0aCkKKyAgICAgICAgICAgIG1v
dmUoc3JjLCBkZXN0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKgorICAgICAgICAg
ICAgICAgIGxpICAgICAgZGF0YVRlbXAsIGltbQorICAgICAgICAgICAgICAgIG11bCAgICAgZGVz
dCwgc3JjLCBkYXRhVGVtcAorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1vdmUoaW1tLCBk
YXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm11bChkZXN0LCBzcmMs
IGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBub3QzMihS
ZWdpc3RlcklEIHNyY0Rlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5ub3Ioc3JjRGVz
dCwgc3JjRGVzdCwgTUlQU1JlZ2lzdGVyczo6emVybyk7CisgICAgfQorCisgICAgdm9pZCBvcjMy
KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5vcl9pbnNuKGRlc3QsIGRlc3QsIHNyYyk7CisgICAgfQorCisgICAgdm9pZCBvcjMyKElt
bTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKCFpbW0ubV9pc1Bv
aW50ZXIgJiYgaW1tLm1fdmFsdWUgPT0gMCAmJiAhbV9maXhlZFdpZHRoKQorICAgICAgICAgICAg
OworICAgICAgICBlbHNlIGlmICghaW1tLm1faXNQb2ludGVyICYmIGltbS5tX3ZhbHVlID4gMCAm
JiBpbW0ubV92YWx1ZSA8IDY1NTM1CisgICAgICAgICAgICAgICAgICYmICFtX2ZpeGVkV2lkdGgp
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5vcmkoZGVzdCwgZGVzdCwgaW1tLm1fdmFsdWUpOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgbGkgICAgICBk
YXRhVGVtcCwgaW1tCisgICAgICAgICAgICAgICAgb3IgICAgICBkZXN0LCBkZXN0LCBkYXRhVGVt
cAorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1vdmUoaW1tLCBkYXRhVGVtcFJlZ2lzdGVy
KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm9yX2luc24oZGVzdCwgZGVzdCwgZGF0YVRlbXBS
ZWdpc3Rlcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHJzaGlmdDMyKFJlZ2lzdGVy
SUQgc2hpZnRfYW1vdW50LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5zcmF2KGRlc3QsIGRlc3QsIHNoaWZ0X2Ftb3VudCk7CisgICAgfQorCisgICAgdm9pZCBy
c2hpZnQzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLnNyYShkZXN0LCBkZXN0LCBpbW0ubV92YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBz
dWIzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIuc3VidShkZXN0LCBkZXN0LCBzcmMpOworICAgIH0KKworICAgIHZvaWQgc3ViMzIo
SW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAoIWltbS5tX2lz
UG9pbnRlciAmJiBpbW0ubV92YWx1ZSA+PSAtMzI3NjcgJiYgaW1tLm1fdmFsdWUgPD0gMzI3NjgK
KyAgICAgICAgICAgICYmICFtX2ZpeGVkV2lkdGgpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAg
ICAgICAgIGFkZGl1ICAgICBkZXN0LCBzcmMsIGltbQorICAgICAgICAgICAgKi8KKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLmFkZGl1KGRlc3QsIGRlc3QsIC1pbW0ubV92YWx1ZSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICBsaSAgICAgICAgaW1tVGVt
cCwgaW1tCisgICAgICAgICAgICAgIHN1YnUgICAgICBkZXN0LCBzcmMsIGltbVRlbXAKKyAgICAg
ICAgICAgICovCisgICAgICAgICAgICBtb3ZlKGltbSwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLnN1YnUoZGVzdCwgZGVzdCwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHZvaWQgc3ViMzIoSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJl
c3MpCisgICAgeworICAgICAgICBpZiAoYWRkcmVzcy5vZmZzZXQgPj0gLTMyNzY4ICYmIGFkZHJl
c3Mub2Zmc2V0IDw9IDMyNzY3CisgICAgICAgICAgICAmJiAhbV9maXhlZFdpZHRoKSB7CisgICAg
ICAgICAgICAvKgorICAgICAgICAgICAgICBsdyAgICAgICAgZGF0YVRlbXAsIG9mZnNldChiYXNl
KQorICAgICAgICAgICAgICBsaSAgICAgICAgaW1tVGVtcCwgaW1tCisgICAgICAgICAgICAgIHN1
YnUgICAgICBkYXRhVGVtcCwgZGF0YVRlbXAsIGltbVRlbXAKKyAgICAgICAgICAgICAgc3cgICAg
ICAgIGRhdGFUZW1wLCBvZmZzZXQoYmFzZSkKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5sdyhkYXRhVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mub2Zm
c2V0KTsKKyAgICAgICAgICAgIGlmICghaW1tLm1faXNQb2ludGVyCisgICAgICAgICAgICAgICAg
JiYgaW1tLm1fdmFsdWUgPj0gLTMyNzY3ICYmIGltbS5tX3ZhbHVlIDw9IDMyNzY4CisgICAgICAg
ICAgICAgICAgJiYgIW1fZml4ZWRXaWR0aCkKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5h
ZGRpdShkYXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC1pbW0ubV92YWx1ZSk7CisgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBtb3ZlKGltbSwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5zdWJ1KGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3coZGF0YVRlbXBSZWdpc3RlciwgYWRk
cmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAvKgorICAgICAgICAgICAgICBsdWkgICAgICAgYWRkclRlbXAsIChvZmZzZXQgKyAweDgwMDAp
ID4+IDE2CisgICAgICAgICAgICAgIGFkZHUgICAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGJhc2UK
KyAgICAgICAgICAgICAgbHcgICAgICAgIGRhdGFUZW1wLCAob2Zmc2V0ICYgMHhmZmZmKShhZGRy
VGVtcCkKKyAgICAgICAgICAgICAgbGkgICAgICAgIGltbXRlbXAsIGltbQorICAgICAgICAgICAg
ICBzdWJ1ICAgICAgZGF0YVRlbXAsIGRhdGFUZW1wLCBpbW1UZW1wCisgICAgICAgICAgICAgIHN3
ICAgICAgICBkYXRhVGVtcCwgKG9mZnNldCAmIDB4ZmZmZikoYWRkclRlbXApCisgICAgICAgICAg
ICAqLworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHVpKGFkZHJUZW1wUmVnaXN0ZXIsIChhZGRy
ZXNzLm9mZnNldCArIDB4ODAwMCkgPj4gMTYpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRk
dShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UpOworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIubHcoZGF0YVRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3Rl
ciwgYWRkcmVzcy5vZmZzZXQpOworCisgICAgICAgICAgICBpZiAoIWltbS5tX2lzUG9pbnRlcgor
ICAgICAgICAgICAgICAgICYmIGltbS5tX3ZhbHVlID49IC0zMjc2NyAmJiBpbW0ubV92YWx1ZSA8
PSAzMjc2OAorICAgICAgICAgICAgICAgICYmICFtX2ZpeGVkV2lkdGgpCisgICAgICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuYWRkaXUoZGF0YVRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3RlciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtaW1tLm1fdmFsdWUpOworICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbW92ZShpbW0sIGltbVRlbXBSZWdpc3Rlcik7
CisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3VidShkYXRhVGVtcFJlZ2lzdGVyLCBkYXRh
VGVtcFJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1tVGVtcFJl
Z2lzdGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN3KGRhdGFU
ZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHZvaWQgc3ViMzIoQWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIGxvYWQzMihzcmMsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICBz
dWIzMihkYXRhVGVtcFJlZ2lzdGVyLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHN1YjMyKElt
bTMyIGltbSwgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICAvKgorICAg
ICAgICAgICBsaSAgIGFkZHJUZW1wLCBhZGRyZXNzCisgICAgICAgICAgIGxpICAgaW1tVGVtcCwg
aW1tCisgICAgICAgICAgIGx3ICAgZGF0YVRlbXAsIDAoYWRkclRlbXApCisgICAgICAgICAgIHN1
YnUgZGF0YVRlbXAsIGRhdGFUZW1wLCBpbW1UZW1wCisgICAgICAgICAgIHN3ICAgZGF0YVRlbXAs
IDAoYWRkclRlbXApCisgICAgICAgICovCisgICAgICAgIG1vdmUoSW1tUHRyKGFkZHJlc3MubV9w
dHIpLCBhZGRyVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubHcoZGF0YVRlbXBS
ZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgMCk7CisKKyAgICAgICAgaWYgKCFpbW0ubV9pc1Bv
aW50ZXIgJiYgaW1tLm1fdmFsdWUgPj0gLTMyNzY3ICYmIGltbS5tX3ZhbHVlIDw9IDMyNzY4Cisg
ICAgICAgICAgICAmJiAhbV9maXhlZFdpZHRoKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5h
ZGRpdShkYXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLWltbS5tX3ZhbHVlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIG1vdmUoaW1tLCBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
c3VidShkYXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLCBpbW1UZW1wUmVnaXN0ZXIp
OworICAgICAgICB9CisgICAgICAgIG1fYXNzZW1ibGVyLnN3KGRhdGFUZW1wUmVnaXN0ZXIsIGFk
ZHJUZW1wUmVnaXN0ZXIsIDApOworICAgIH0KKworICAgIHZvaWQgeG9yMzIoUmVnaXN0ZXJJRCBz
cmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnhvcl9pbnNu
KGRlc3QsIGRlc3QsIHNyYyk7CisgICAgfQorCisgICAgdm9pZCB4b3IzMihJbW0zMiBpbW0sIFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAgICBsaSAgaW1tVGVt
cCwgaW1tCisgICAgICAgICAgICB4b3IgZGVzdCwgZGVzdCwgaW1tVGVtcAorICAgICAgICAqLwor
ICAgICAgICBtb3ZlKGltbSwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIu
eG9yX2luc24oZGVzdCwgZGVzdCwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICAvLyBN
ZW1vcnkgYWNjZXNzIG9wZXJhdGlvbnM6CisgICAgLy8KKyAgICAvLyBMb2FkcyBhcmUgb2YgdGhl
IGZvcm0gbG9hZChhZGRyZXNzLCBkZXN0aW5hdGlvbikgYW5kIHN0b3JlcyBvZiB0aGUgZm9ybQor
ICAgIC8vIHN0b3JlKHNvdXJjZSwgYWRkcmVzcykuICBUaGUgc291cmNlIGZvciBhIHN0b3JlIG1h
eSBiZSBhbiBJbW0zMi4gIEFkZHJlc3MKKyAgICAvLyBvcGVyYW5kIG9iamVjdHMgdG8gbG9hZHMg
YW5kIHN0b3JlIHdpbGwgYmUgaW1wbGljaXRseSBjb25zdHJ1Y3RlZCBpZiBhCisgICAgLy8gcmVn
aXN0ZXIgaXMgcGFzc2VkLgorCisgICAgdm9pZCBsb2FkMzIoSW1wbGljaXRBZGRyZXNzIGFkZHJl
c3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlmIChhZGRyZXNzLm9mZnNldCA+
PSAtMzI3NjggJiYgYWRkcmVzcy5vZmZzZXQgPD0gMzI3NjcKKyAgICAgICAgICAgICYmICFtX2Zp
eGVkV2lkdGgpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sdyhkZXN0LCBhZGRyZXNzLmJhc2Us
IGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKgorICAgICAg
ICAgICAgICAgIGx1aSAgICAgYWRkclRlbXAsIChvZmZzZXQgKyAweDgwMDApID4+IDE2CisgICAg
ICAgICAgICAgICAgYWRkdSAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGJhc2UKKyAgICAgICAgICAg
ICAgICBsdyAgICAgIGRlc3QsIChvZmZzZXQgJiAweGZmZmYpKGFkZHJUZW1wKQorICAgICAgICAg
ICAgICAqLworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHVpKGFkZHJUZW1wUmVnaXN0ZXIsIChh
ZGRyZXNzLm9mZnNldCArIDB4ODAwMCkgPj4gMTYpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
YWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UpOwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIubHcoZGVzdCwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVz
cy5vZmZzZXQpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBsb2FkMzIoQmFzZUluZGV4
IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlmIChhZGRyZXNzLm9m
ZnNldCA+PSAtMzI3NjggJiYgYWRkcmVzcy5vZmZzZXQgPD0gMzI3NjcKKyAgICAgICAgICAgICYm
ICFtX2ZpeGVkV2lkdGgpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgc2xsICAg
ICBhZGRyVGVtcCwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZQorICAgICAgICAgICAgICAg
IGFkZHUgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBhZGRyZXNzLmJhc2UKKyAgICAgICAgICAgICAg
ICBsdyAgICAgIGRlc3QsIGFkZHJlc3Mub2Zmc2V0KGFkZHJUZW1wKQorICAgICAgICAgICAgKi8K
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsbChhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmlu
ZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRl
bXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlKTsKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmx3KGRlc3QsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgc2xsICAg
ICBhZGRyVGVtcCwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZQorICAgICAgICAgICAgICAg
IGFkZHUgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBhZGRyZXNzLmJhc2UKKyAgICAgICAgICAgICAg
ICBsdWkgICAgIGltbVRlbXAsIChhZGRyZXNzLm9mZnNldCArIDB4ODAwMCkgPj4gMTYKKyAgICAg
ICAgICAgICAgICBhZGR1ICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgaW1tVGVtcAorICAgICAgICAg
ICAgICAgIGx3ICAgICAgZGVzdCwgKGFkZHJlc3Mub2Zmc2V0ICYgMHhmZmZmKShhdCkKKyAgICAg
ICAgICAgICovCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbGwoYWRkclRlbXBSZWdpc3Rlciwg
YWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5h
ZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSk7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5sdWkoaW1tVGVtcFJlZ2lzdGVyLCAoYWRkcmVzcy5vZmZz
ZXQgKyAweDgwMDApID4+IDE2KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRl
bXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx3KGRlc3QsIGFk
ZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHZvaWQgbG9hZDMyV2l0aFVuYWxpZ25lZEhhbGZXb3JkcyhCYXNlSW5kZXggYWRkcmVzcywgUmVn
aXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKGFkZHJlc3Mub2Zmc2V0ID49IC0zMjc2
OCAmJiBhZGRyZXNzLm9mZnNldCA8PSAzMjc2NAorICAgICAgICAgICAgJiYgIW1fZml4ZWRXaWR0
aCkgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICBzbGwgICAgIGFkZHJUZW1wLCBh
ZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlCisgICAgICAgICAgICAgICAgYWRkdSAgICBhZGRy
VGVtcCwgYWRkclRlbXAsIGFkZHJlc3MuYmFzZQorICAgICAgICAgICAgICAgIChCaWctRW5kaWFu
KQorICAgICAgICAgICAgICAgIGx3bCAgICAgZGVzdCwgYWRkcmVzcy5vZmZzZXQoYWRkclRlbXAp
CisgICAgICAgICAgICAgICAgbHdyICAgICBkZXN0LCBhZGRyZXNzLm9mZnNldCszKGFkZHJUZW1w
KQorICAgICAgICAgICAgICAgIChMaXR0bGUtRW5kaWFuKQorICAgICAgICAgICAgICAgIGx3bCAg
ICAgZGVzdCwgYWRkcmVzcy5vZmZzZXQrMyhhZGRyVGVtcCkKKyAgICAgICAgICAgICAgICBsd3Ig
ICAgIGRlc3QsIGFkZHJlc3Mub2Zmc2V0KGFkZHJUZW1wKQorICAgICAgICAgICAgKi8KKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLnNsbChhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmluZGV4LCBh
ZGRyZXNzLnNjYWxlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdp
c3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlKTsKKyNpZiBkZWZpbmVkKF9fTUlQ
U0VCX18pCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sd2woZGVzdCwgYWRkclRlbXBSZWdpc3Rl
ciwgYWRkcmVzcy5vZmZzZXQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHdyKGRlc3QsIGFk
ZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0ICsgMyk7CisjZWxzZQorICAgICAgICAgICAg
bV9hc3NlbWJsZXIubHdsKGRlc3QsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0ICsg
Myk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sd3IoZGVzdCwgYWRkclRlbXBSZWdpc3Rlciwg
YWRkcmVzcy5vZmZzZXQpOworCisjZW5kaWYKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IC8qCisgICAgICAgICAgICAgICAgc2xsICAgICBhZGRyVGVtcCwgYWRkcmVzcy5pbmRleCwgYWRk
cmVzcy5zY2FsZQorICAgICAgICAgICAgICAgIGFkZHUgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBh
ZGRyZXNzLmJhc2UKKyAgICAgICAgICAgICAgICBsdWkgICAgIGltbVRlbXAsIGFkZHJlc3Mub2Zm
c2V0ID4+IDE2CisgICAgICAgICAgICAgICAgb3JpICAgICBpbW1UZW1wLCBpbW1UZW1wLCBhZGRy
ZXNzLm9mZnNldCAmIDB4ZmZmZgorICAgICAgICAgICAgICAgIGFkZHUgICAgYWRkclRlbXAsIGFk
ZHJUZW1wLCBpbW1UZW1wCisgICAgICAgICAgICAgICAgKEJpZy1FbmRpYW4pCisgICAgICAgICAg
ICAgICAgbHcgICAgICBkZXN0LCAwKGF0KQorICAgICAgICAgICAgICAgIGx3ICAgICAgZGVzdCwg
MyhhdCkKKyAgICAgICAgICAgICAgICAoTGl0dGxlLUVuZGlhbikKKyAgICAgICAgICAgICAgICBs
dyAgICAgIGRlc3QsIDMoYXQpCisgICAgICAgICAgICAgICAgbHcgICAgICBkZXN0LCAwKGF0KQor
ICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsbChhZGRyVGVtcFJlZ2lz
dGVyLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNl
KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx1aShpbW1UZW1wUmVnaXN0ZXIsIGFkZHJlc3Mu
b2Zmc2V0ID4+IDE2KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm9yaShpbW1UZW1wUmVnaXN0
ZXIsIGltbVRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQpOworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbW1UZW1wUmVnaXN0ZXIpOworI2lmIGRlZmluZWQoX19NSVBT
RUJfXykKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx3bChkZXN0LCBhZGRyVGVtcFJlZ2lzdGVy
LCAwKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx3cihkZXN0LCBhZGRyVGVtcFJlZ2lzdGVy
LCAzKTsKKyNlbHNlCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sd2woZGVzdCwgYWRkclRlbXBS
ZWdpc3RlciwgMyk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sd3IoZGVzdCwgYWRkclRlbXBS
ZWdpc3RlciwgMCk7CisjZW5kaWYKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgbG9hZDMy
KHZvaWQqIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIC8qCisgICAg
ICAgICAgICBsaSAgYWRkclRlbXAsIGFkZHJlc3MKKyAgICAgICAgICAgIGx3ICBkZXN0LCAwKGFk
ZHJUZW1wKQorICAgICAgICAqLworICAgICAgICBtb3ZlKEltbVB0cihhZGRyZXNzKSwgYWRkclRl
bXBSZWdpc3Rlcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmx3KGRlc3QsIGFkZHJUZW1wUmVnaXN0
ZXIsIDApOworICAgIH0KKworICAgIERhdGFMYWJlbDMyIGxvYWQzMldpdGhBZGRyZXNzT2Zmc2V0
UGF0Y2goQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBt
X2ZpeGVkV2lkdGggPSB0cnVlOworICAgICAgICAvKgorICAgICAgICAgICAgbHVpIGFkZHJUZW1w
LCBhZGRyZXNzLm9mZnNldCA+PiAxNgorICAgICAgICAgICAgb3JpIGFkZHJUZW1wLCBhZGRyVGVt
cCwgYWRkcmVzcy5vZmZzZXQgJiAweGZmZmYKKyAgICAgICAgICAgIGFkZHUgICAgICAgIGFkZHJU
ZW1wLCBhZGRyVGVtcCwgYWRkcmVzcy5iYXNlCisgICAgICAgICAgICBsdyAgZGVzdCwgMChhZGRy
VGVtcCkKKyAgICAgICAgKi8KKyAgICAgICAgRGF0YUxhYmVsMzIgZGF0YUxhYmVsKHRoaXMpOwor
ICAgICAgICBtb3ZlKEltbTMyKGFkZHJlc3Mub2Zmc2V0KSwgYWRkclRlbXBSZWdpc3Rlcik7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3Rl
ciwgYWRkcmVzcy5iYXNlKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubHcoZGVzdCwgYWRkclRlbXBS
ZWdpc3RlciwgMCk7CisgICAgICAgIG1fZml4ZWRXaWR0aCA9IGZhbHNlOworICAgICAgICByZXR1
cm4gZGF0YUxhYmVsOworICAgIH0KKworICAgIExhYmVsIGxvYWRQdHJXaXRoUGF0Y2hUb0xFQShB
ZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fZml4ZWRX
aWR0aCA9IHRydWU7CisgICAgICAgIC8qCisgICAgICAgICAgICBsdWkgICAgICAgICBhZGRyVGVt
cCwgYWRkcmVzcy5vZmZzZXQgPj4gMTYKKyAgICAgICAgICAgIG9yaSAgICAgICAgIGFkZHJUZW1w
LCBhZGRyVGVtcCwgYWRkcmVzcy5vZmZzZXQgJiAweGZmZmYKKyAgICAgICAgICAgIGFkZHUgICAg
ICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgYWRkcmVzcy5iYXNlCisgICAgICAgICAgICBsdyAgICAg
ICAgICBkZXN0LCAwKGFkZHJUZW1wKQorICAgICAgICAqLworICAgICAgICBMYWJlbCBsYWJlbCh0
aGlzKTsKKyAgICAgICAgbW92ZShJbW0zMihhZGRyZXNzLm9mZnNldCksIGFkZHJUZW1wUmVnaXN0
ZXIpOworICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1w
UmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmx3KGRlc3QsIGFk
ZHJUZW1wUmVnaXN0ZXIsIDApOworICAgICAgICBtX2ZpeGVkV2lkdGggPSBmYWxzZTsKKyAgICAg
ICAgcmV0dXJuIGxhYmVsOworICAgIH0KKworICAgIExhYmVsIGxvYWRQdHJXaXRoQWRkcmVzc09m
ZnNldFBhdGNoKEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGxvYWRQdHJXaXRoUGF0Y2hUb0xFQShhZGRyZXNzLCBkZXN0KTsKKyAgICB9CisK
KyAgICAvKiBOZWVkIHRvIHVzZSB6ZXJvLWV4dGVuZWQgbG9hZCBoYWxmLXdvcmQgZm9yIGxvYWQx
Ni4gICovCisgICAgdm9pZCBsb2FkMTYoQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB7CisgICAgICAgIGlmIChhZGRyZXNzLm9mZnNldCA+PSAtMzI3NjggJiYgYWRkcmVz
cy5vZmZzZXQgPD0gMzI3NjcKKyAgICAgICAgICAgICYmICFtX2ZpeGVkV2lkdGgpIHsKKyAgICAg
ICAgICAgIC8qCisgICAgICAgICAgICAgICAgc2xsICAgICBhZGRyVGVtcCwgYWRkcmVzcy5pbmRl
eCwgYWRkcmVzcy5zY2FsZQorICAgICAgICAgICAgICAgIGFkZHUgICAgYWRkclRlbXAsIGFkZHJU
ZW1wLCBhZGRyZXNzLmJhc2UKKyAgICAgICAgICAgICAgICBsaHUgICAgIGRlc3QsIGFkZHJlc3Mu
b2Zmc2V0KGFkZHJUZW1wKQorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LnNsbChhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdp
c3RlciwgYWRkcmVzcy5iYXNlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxodShkZXN0LCBh
ZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAvKgorICAgICAgICAgICAgICAgIHNsbCAgICAgYWRkclRlbXAsIGFkZHJlc3MuaW5k
ZXgsIGFkZHJlc3Muc2NhbGUKKyAgICAgICAgICAgICAgICBhZGR1ICAgIGFkZHJUZW1wLCBhZGRy
VGVtcCwgYWRkcmVzcy5iYXNlCisgICAgICAgICAgICAgICAgbHVpICAgICBpbW1UZW1wLCAoYWRk
cmVzcy5vZmZzZXQgKyAweDgwMDApID4+IDE2CisgICAgICAgICAgICAgICAgYWRkdSAgICBhZGRy
VGVtcCwgYWRkclRlbXAsIGltbVRlbXAKKyAgICAgICAgICAgICAgICBsaHUgICAgIGRlc3QsIChh
ZGRyZXNzLm9mZnNldCAmIDB4ZmZmZikoYWRkclRlbXApCisgICAgICAgICAgICAqLworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuc2xsKGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuaW5kZXgsIGFk
ZHJlc3Muc2NhbGUpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lz
dGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UpOworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIubHVpKGltbVRlbXBSZWdpc3RlciwgKGFkZHJlc3Mub2Zmc2V0ICsgMHg4MDAwKSA+PiAx
Nik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJU
ZW1wUmVnaXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltbVRlbXBSZWdpc3Rl
cik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5saHUoZGVzdCwgYWRkclRlbXBSZWdpc3Rlciwg
YWRkcmVzcy5vZmZzZXQpOworICAgICAgICB9CisgICAgfQorCisgICAgRGF0YUxhYmVsMzIgc3Rv
cmUzMldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgYWRkcmVz
cykKKyAgICB7CisgICAgICAgIG1fZml4ZWRXaWR0aCA9IHRydWU7CisgICAgICAgIC8qCisgICAg
ICAgICAgICBsdWkgYWRkclRlbXAsIGFkZHJlc3Mub2Zmc2V0ID4+IDE2CisgICAgICAgICAgICBv
cmkgYWRkclRlbXAsIGFkZHJUZW1wLCBhZGRyZXNzLm9mZnNldCAmIDB4ZmZmZgorICAgICAgICAg
ICAgYWRkdSAgICAgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBhZGRyZXNzLmJhc2UKKyAgICAgICAg
ICAgIHN3ICBzcmMsIDAoYWRkclRlbXApCisgICAgICAgICovCisgICAgICAgIERhdGFMYWJlbDMy
IGRhdGFMYWJlbCh0aGlzKTsKKyAgICAgICAgbW92ZShJbW0zMihhZGRyZXNzLm9mZnNldCksIGFk
ZHJUZW1wUmVnaXN0ZXIpOworICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0
ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSk7CisgICAgICAgIG1fYXNzZW1ibGVy
LnN3KHNyYywgYWRkclRlbXBSZWdpc3RlciwgMCk7CisgICAgICAgIG1fZml4ZWRXaWR0aCA9IGZh
bHNlOworICAgICAgICByZXR1cm4gZGF0YUxhYmVsOworICAgIH0KKworICAgIHZvaWQgc3RvcmUz
MihSZWdpc3RlcklEIHNyYywgSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAg
ICBpZiAoYWRkcmVzcy5vZmZzZXQgPj0gLTMyNzY4ICYmIGFkZHJlc3Mub2Zmc2V0IDw9IDMyNzY3
CisgICAgICAgICAgICAmJiAhbV9maXhlZFdpZHRoKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIu
c3coc3JjLCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgIGx1aSAgICAgYWRkclRlbXAsIChvZmZzZXQg
KyAweDgwMDApID4+IDE2CisgICAgICAgICAgICAgICAgYWRkdSAgICBhZGRyVGVtcCwgYWRkclRl
bXAsIGJhc2UKKyAgICAgICAgICAgICAgICBzdyAgICAgIHNyYywgKG9mZnNldCAmIDB4ZmZmZiko
YWRkclRlbXApCisgICAgICAgICAgICAgICovCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sdWko
YWRkclRlbXBSZWdpc3RlciwgKGFkZHJlc3Mub2Zmc2V0ICsgMHg4MDAwKSA+PiAxNik7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0
ZXIsIGFkZHJlc3MuYmFzZSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdyhzcmMsIGFkZHJU
ZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZv
aWQgc3RvcmUzMihSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAg
ICAgICBpZiAoYWRkcmVzcy5vZmZzZXQgPj0gLTMyNzY4ICYmIGFkZHJlc3Mub2Zmc2V0IDw9IDMy
NzY3CisgICAgICAgICAgICAmJiAhbV9maXhlZFdpZHRoKSB7CisgICAgICAgICAgICAvKgorICAg
ICAgICAgICAgICAgIHNsbCAgICAgYWRkclRlbXAsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2Nh
bGUKKyAgICAgICAgICAgICAgICBhZGR1ICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgYWRkcmVzcy5i
YXNlCisgICAgICAgICAgICAgICAgc3cgICAgICBzcmMsIGFkZHJlc3Mub2Zmc2V0KGFkZHJUZW1w
KQorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsbChhZGRyVGVtcFJl
Z2lzdGVyLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5i
YXNlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN3KHNyYywgYWRkclRlbXBSZWdpc3Rlciwg
YWRkcmVzcy5vZmZzZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyoKKyAgICAg
ICAgICAgICAgICBzbGwgICAgIGFkZHJUZW1wLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxl
CisgICAgICAgICAgICAgICAgYWRkdSAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGFkZHJlc3MuYmFz
ZQorICAgICAgICAgICAgICAgIGx1aSAgICAgaW1tVGVtcCwgKGFkZHJlc3Mub2Zmc2V0ICsgMHg4
MDAwKSA+PiAxNgorICAgICAgICAgICAgICAgIGFkZHUgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBp
bW1UZW1wCisgICAgICAgICAgICAgICAgc3cgICAgICBzcmMsIChhZGRyZXNzLm9mZnNldCAmIDB4
ZmZmZikoYXQpCisgICAgICAgICAgICAqLworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2xsKGFk
ZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBh
ZGRyZXNzLmJhc2UpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHVpKGltbVRlbXBSZWdpc3Rl
ciwgKGFkZHJlc3Mub2Zmc2V0ICsgMHg4MDAwKSA+PiAxNik7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5zdyhzcmMsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHZvaWQgc3RvcmUzMihJbW0zMiBpbW0sIEltcGxpY2l0QWRkcmVzcyBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgaWYgKGFkZHJlc3Mub2Zmc2V0ID49IC0zMjc2OCAmJiBh
ZGRyZXNzLm9mZnNldCA8PSAzMjc2NworICAgICAgICAgICAgJiYgIW1fZml4ZWRXaWR0aCkgewor
ICAgICAgICAgICAgaWYgKCFpbW0ubV9pc1BvaW50ZXIgJiYgaW1tLm1fdmFsdWUgPT0gMCkKKyAg
ICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdyhNSVBTUmVnaXN0ZXJzOjp6ZXJvLCBhZGRyZXNz
LmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcy5vZmZzZXQpOwor
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbW92ZShpbW0sIGltbVRlbXBSZWdp
c3Rlcik7CisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3coaW1tVGVtcFJlZ2lzdGVyLCBh
ZGRyZXNzLmJhc2UsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgbHVpICAgICBhZGRyVGVtcCwg
KG9mZnNldCArIDB4ODAwMCkgPj4gMTYKKyAgICAgICAgICAgICAgICBhZGR1ICAgIGFkZHJUZW1w
LCBhZGRyVGVtcCwgYmFzZQorICAgICAgICAgICAgICAgIHN3ICAgICAgaW1tVGVtcCwgKG9mZnNl
dCAmIDB4ZmZmZikoYWRkclRlbXApCisgICAgICAgICAgICAgICovCisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5sdWkoYWRkclRlbXBSZWdpc3RlciwgKGFkZHJlc3Mub2Zmc2V0ICsgMHg4MDAwKSA+
PiAxNik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFk
ZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSk7CisgICAgICAgICAgICBpZiAoIWltbS5tX2lz
UG9pbnRlciAmJiBpbW0ubV92YWx1ZSA9PSAwICYmICFtX2ZpeGVkV2lkdGgpCisgICAgICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuc3coTUlQU1JlZ2lzdGVyczo6emVybywgYWRkclRlbXBSZWdpc3Rl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzLm9mZnNldCk7CisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBtb3ZlKGltbSwgaW1tVGVtcFJlZ2lzdGVy
KTsKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdyhpbW1UZW1wUmVnaXN0ZXIsIGFkZHJU
ZW1wUmVnaXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcy5vZmZz
ZXQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBzdG9yZTMy
KFJlZ2lzdGVySUQgc3JjLCB2b2lkKiBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAg
ICAgICAgIGxpICBhZGRyVGVtcCwgYWRkcmVzcworICAgICAgICAgICAgc3cgIHNyYywgMChhZGRy
VGVtcCkKKyAgICAgICAgKi8KKyAgICAgICAgbW92ZShJbW1QdHIoYWRkcmVzcyksIGFkZHJUZW1w
UmVnaXN0ZXIpOworICAgICAgICBtX2Fzc2VtYmxlci5zdyhzcmMsIGFkZHJUZW1wUmVnaXN0ZXIs
IDApOworICAgIH0KKworICAgIHZvaWQgc3RvcmUzMihJbW0zMiBpbW0sIHZvaWQqIGFkZHJlc3Mp
CisgICAgeworICAgICAgICAvKgorICAgICAgICAgICAgbGkgIGltbVRlbXAsIGltbQorICAgICAg
ICAgICAgbGkgIGFkZHJUZW1wLCBhZGRyZXNzCisgICAgICAgICAgICBzdyAgc3JjLCAwKGFkZHJU
ZW1wKQorICAgICAgICAqLworICAgICAgICBpZiAoIWltbS5tX2lzUG9pbnRlciAmJiBpbW0ubV92
YWx1ZSA9PSAwICYmICFtX2ZpeGVkV2lkdGgpIHsKKyAgICAgICAgICAgIG1vdmUoSW1tUHRyKGFk
ZHJlc3MpLCBhZGRyVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN3KE1J
UFNSZWdpc3RlcnM6Onplcm8sIGFkZHJUZW1wUmVnaXN0ZXIsIDApOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgbW92ZShpbW0sIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICBt
b3ZlKEltbVB0cihhZGRyZXNzKSwgYWRkclRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5zdyhpbW1UZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIDApOworICAgICAg
ICB9CisgICAgfQorCisgICAgLy8gRmxvYXRpbmctcG9pbnQgb3BlcmF0aW9uczoKKworICAgIGJv
b2wgc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkgY29uc3QKKyAgICB7CisjaWYgZGVmaW5lZChfX21p
cHNfaGFyZF9mbG9hdCkgJiYgIWRlZmluZWQoX19taXBzX3NpbmdsZV9mbG9hdCkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisjZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKyAgICB9
CisKKyAgICBib29sIHN1cHBvcnRzRmxvYXRpbmdQb2ludFRydW5jYXRlKCkgY29uc3QKKyAgICB7
CisjaWYgZGVmaW5lZChfX21pcHNfaGFyZF9mbG9hdCkgJiYgIWRlZmluZWQoX19taXBzX3Npbmds
ZV9mbG9hdCkgJiYgKF9fbWlwcyA+IDEpCisgICAgICAgIHJldHVybiB0cnVlOworI2Vsc2UKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCisgICAgfQorCisgICAgLy8gU3RhY2sgbWFuaXB1
bGF0aW9uIG9wZXJhdGlvbnM6CisgICAgLy8KKyAgICAvLyBUaGUgQUJJIGlzIGFzc3VtZWQgdG8g
cHJvdmlkZSBhIHN0YWNrIGFic3RyYWN0aW9uIHRvIG1lbW9yeSwKKyAgICAvLyBjb250YWluaW5n
IG1hY2hpbmUgd29yZCBzaXplZCB1bml0cyBvZiBkYXRhLiAgUHVzaCBhbmQgcG9wCisgICAgLy8g
b3BlcmF0aW9ucyBhZGQgYW5kIHJlbW92ZSBhIHNpbmdsZSByZWdpc3RlciBzaXplZCB1bml0IG9m
IGRhdGEKKyAgICAvLyB0byBvciBmcm9tIHRoZSBzdGFjay4gIFBlZWsgYW5kIHBva2Ugb3BlcmF0
aW9ucyByZWFkIG9yIHdyaXRlCisgICAgLy8gdmFsdWVzIG9uIHRoZSBzdGFjaywgd2l0aG91dCBt
b3ZpbmcgdGhlIGN1cnJlbnQgc3RhY2sgcG9zaXRpb24uCisKKyAgICB2b2lkIHBvcChSZWdpc3Rl
cklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sdyhkZXN0LCBNSVBTUmVnaXN0
ZXJzOjpzcCwgMCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGl1KE1JUFNSZWdpc3RlcnM6OnNw
LCBNSVBTUmVnaXN0ZXJzOjpzcCwgNCk7CisgICAgfQorCisgICAgdm9pZCBwdXNoKFJlZ2lzdGVy
SUQgc3JjKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkaXUoTUlQU1JlZ2lzdGVyczo6
c3AsIE1JUFNSZWdpc3RlcnM6OnNwLCAtNCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnN3KHNyYywg
TUlQU1JlZ2lzdGVyczo6c3AsIDApOworICAgIH0KKworICAgIHZvaWQgcHVzaChBZGRyZXNzIGFk
ZHJlc3MpCisgICAgeworICAgICAgICBsb2FkMzIoYWRkcmVzcywgZGF0YVRlbXBSZWdpc3Rlcik7
CisgICAgICAgIHB1c2goZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgfQorCisgICAgdm9pZCBwdXNo
KEltbTMyIGltbSkKKyAgICB7CisgICAgICAgIG1vdmUoaW1tLCBpbW1UZW1wUmVnaXN0ZXIpOwor
ICAgICAgICBwdXNoKGltbVRlbXBSZWdpc3Rlcik7CisgICAgfQorCisgICAgLy8gUmVnaXN0ZXIg
bW92ZSBvcGVyYXRpb25zOgorICAgIC8vCisgICAgLy8gTW92ZSB2YWx1ZXMgaW4gcmVnaXN0ZXJz
LgorCisgICAgdm9pZCBtb3ZlKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAg
ICAgICAgaWYgKCFpbW0ubV9pc1BvaW50ZXIgJiYgaW1tLm1fdmFsdWUgPT0gMCAmJiAhbV9maXhl
ZFdpZHRoKQorICAgICAgICAgICAgbW92ZShNSVBTUmVnaXN0ZXJzOjp6ZXJvLCBkZXN0KTsKKyAg
ICAgICAgZWxzZSBpZiAoaW1tLm1faXNQb2ludGVyIHx8IG1fZml4ZWRXaWR0aCkgeworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIubHVpKGRlc3QsIGltbS5tX3ZhbHVlID4+IDE2KTsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLm9yaShkZXN0LCBkZXN0LCBpbW0ubV92YWx1ZSk7CisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubGkoZGVzdCwgaW1tLm1fdmFsdWUpOworICAg
IH0KKworICAgIHZvaWQgbW92ZShSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAg
IHsKKyAgICAgICAgaWYgKHNyYyA9PSBkZXN0ICYmICFtX2ZpeGVkV2lkdGgpCisgICAgICAgICAg
ICA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmUoZGVzdCwgc3Jj
KTsKKyAgICB9CisKKyAgICB2b2lkIG1vdmUoSW1tUHRyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgbW92ZShJbW0zMihpbW0pLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lk
IHN3YXAoUmVnaXN0ZXJJRCByZWcxLCBSZWdpc3RlcklEIHJlZzIpCisgICAgeworICAgICAgICBt
b3ZlKHJlZzEsIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgIG1vdmUocmVnMiwgcmVnMSk7Cisg
ICAgICAgIG1vdmUoaW1tVGVtcFJlZ2lzdGVyLCByZWcyKTsKKyAgICB9CisKKyAgICB2b2lkIHNp
Z25FeHRlbmQzMlRvUHRyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgewor
ICAgICAgICBpZiAoc3JjID09IGRlc3QgJiYgIW1fZml4ZWRXaWR0aCkKKyAgICAgICAgICAgIDsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgbW92ZShzcmMsIGRlc3QpOworICAgIH0KKworICAg
IHZvaWQgemVyb0V4dGVuZDMyVG9QdHIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIGlmIChzcmMgPT0gZGVzdCAmJiAhbV9maXhlZFdpZHRoKQorICAgICAg
ICAgICAgOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtb3ZlKHNyYywgZGVzdCk7CisgICAg
fQorCisgICAgLy8gRm9yd2FyZHMgLyBleHRlcm5hbCBjb250cm9sIGZsb3cgb3BlcmF0aW9uczoK
KyAgICAvLworICAgIC8vIFRoaXMgc2V0IG9mIGp1bXAgYW5kIGNvbmRpdGlvbmFsIGJyYW5jaCBv
cGVyYXRpb25zIHJldHVybiBhIEp1bXAKKyAgICAvLyBvYmplY3Qgd2hpY2ggbWF5IGxpbmtlZCBh
dCBhIGxhdGVyIHBvaW50LCBhbGxvdyBmb3J3YXJkcyBqdW1wLAorICAgIC8vIG9yIGp1bXBzIHRo
YXQgd2lsbCByZXF1aXJlIGV4dGVybmFsIGxpbmthZ2UgKGFmdGVyIHRoZSBjb2RlIGhhcyBiZWVu
CisgICAgLy8gcmVsb2NhdGVkKS4KKyAgICAvLworICAgIC8vIEZvciBicmFuY2hlcywgc2lnbmVk
IDwsID4sIDw9IGFuZCA+PSBhcmUgZGVub3RlZCBhcyBsLCBnLCBsZSwgYW5kIGdlCisgICAgLy8g
cmVzcGVjaXR2ZWx5LCBmb3IgdW5zaWduZWQgY29tcGFyaXNvbnMgdGhlIG5hbWVzIGIsIGEsIGJl
LCBhbmQgYWUgYXJlCisgICAgLy8gdXNlZCAocmVwcmVzZW50aW5nIHRoZSBuYW1lcyAnYmVsb3cn
IGFuZCAnYWJvdmUnKS4KKyAgICAvLworICAgIC8vIE9wZXJhbmRzIHRvIHRoZSBjb21wYXJpc2lv
biBhcmUgcHJvdmlkZWQgaW4gdGhlIGV4cGVjdGVkIG9yZGVyLCBlLmcuCisgICAgLy8gamxlMzIo
cmVnMSwgSW1tMzIoNSkpIHdpbGwgYnJhbmNoIGlmIHRoZSB2YWx1ZSBoZWxkIGluIHJlZzEsIHdo
ZW4KKyAgICAvLyB0cmVhdGVkIGFzIGEgc2lnbmVkIDMyYml0IHZhbHVlLCBpcyBsZXNzIHRoYW4g
b3IgZXF1YWwgdG8gNS4KKyAgICAvLworICAgIC8vIGp6IGFuZCBqbnogdGVzdCB3aGV0aGVyIHRo
ZSBmaXJzdCBvcGVyYW5kIGlzIGVxdWFsIHRvIHplcm8sIGFuZCB0YWtlCisgICAgLy8gYW4gb3B0
aW9uYWwgc2Vjb25kIG9wZXJhbmQgb2YgYSBtYXNrIHVuZGVyIHdoaWNoIHRvIHBlcmZvcm0gdGhl
IHRlc3QuCisKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxl
ZnQsIFJlZ2lzdGVySUQgcmlnaHQpCisgICAgeworICAgICAgICBpZiAoY29uZCA9PSBFcXVhbCB8
fCBjb25kID09IFplcm8pCisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRXF1YWwobGVmdCwgcmln
aHQpOworICAgICAgICBpZiAoY29uZCA9PSBOb3RFcXVhbCB8fCBjb25kID09IE5vblplcm8pCisg
ICAgICAgICAgICByZXR1cm4gYnJhbmNoTm90RXF1YWwobGVmdCwgcmlnaHQpOworICAgICAgICBp
ZiAoY29uZCA9PSBBYm92ZSkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0dShjbXBUZW1w
UmVnaXN0ZXIsIHJpZ2h0LCBsZWZ0KTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hOb3RFcXVh
bChjbXBUZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onplcm8pOworICAgICAgICB9CisgICAg
ICAgIGlmIChjb25kID09IEFib3ZlT3JFcXVhbCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
c2x0dShjbXBUZW1wUmVnaXN0ZXIsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIHJldHVybiBi
cmFuY2hFcXVhbChjbXBUZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onplcm8pOworICAgICAg
ICB9CisgICAgICAgIGlmIChjb25kID09IEJlbG93KSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5zbHR1KGNtcFRlbXBSZWdpc3RlciwgbGVmdCwgcmlnaHQpOworICAgICAgICAgICAgcmV0dXJu
IGJyYW5jaE5vdEVxdWFsKGNtcFRlbXBSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6emVybyk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gQmVsb3dPckVxdWFsKSB7CisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5zbHR1KGNtcFRlbXBSZWdpc3RlciwgcmlnaHQsIGxlZnQpOworICAgICAg
ICAgICAgcmV0dXJuIGJyYW5jaEVxdWFsKGNtcFRlbXBSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6
emVybyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gR3JlYXRlclRoYW4pIHsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdChjbXBUZW1wUmVnaXN0ZXIsIHJpZ2h0LCBsZWZ0KTsK
KyAgICAgICAgICAgIHJldHVybiBicmFuY2hOb3RFcXVhbChjbXBUZW1wUmVnaXN0ZXIsIE1JUFNS
ZWdpc3RlcnM6Onplcm8pOworICAgICAgICB9CisgICAgICAgIGlmIChjb25kID09IEdyZWF0ZXJU
aGFuT3JFcXVhbCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0KGNtcFRlbXBSZWdpc3Rl
ciwgbGVmdCwgcmlnaHQpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEVxdWFsKGNtcFRlbXBS
ZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6emVybyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNv
bmQgPT0gTGVzc1RoYW4pIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdChjbXBUZW1wUmVn
aXN0ZXIsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hOb3RFcXVhbChj
bXBUZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onplcm8pOworICAgICAgICB9CisgICAgICAg
IGlmIChjb25kID09IExlc3NUaGFuT3JFcXVhbCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
c2x0KGNtcFRlbXBSZWdpc3RlciwgcmlnaHQsIGxlZnQpOworICAgICAgICAgICAgcmV0dXJuIGJy
YW5jaEVxdWFsKGNtcFRlbXBSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6emVybyk7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKGNvbmQgPT0gT3ZlcmZsb3cpIHsKKyAgICAgICAgICAgIC8qCisgICAg
ICAgICAgICAgICAgeG9yICAgICBjbXBUZW1wLCBsZWZ0LCByaWdodAorICAgICAgICAgICAgICAg
IGJnZXogICAgTm9fb3ZlcmZsb3csIGNtcFRlbXAgICAgIyBzYW1lIHNpZ24gYml0IC0+IG5vIG92
ZXJmbG93CisgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgc3VidSAgICBjbXBU
ZW1wLCBsZWZ0LCByaWdodAorICAgICAgICAgICAgICAgIHhvciAgICAgY21wVGVtcCwgY21wVGVt
cCwgbGVmdAorICAgICAgICAgICAgICAgIGJnZXogICAgTm9fb3ZlcmZsb3csIGNtcFRlbXAgICAg
IyBzYW1lIHNpZ24gYml0IC0+IG5vIG92ZXJmbG93CisgICAgICAgICAgICAgICAgbm9wCisgICAg
ICAgICAgICAgICAgYiAgICAgICBPdmVyZmxvdworICAgICAgICAgICAgICAgIG5vcAorICAgICAg
ICAgICAgICAgIG5vcAorICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgICAgIG5vcAor
ICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgICBOb19vdmVyZmxvdzoKKyAgICAgICAg
ICAgICovCisgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3JfaW5zbihjbXBUZW1wUmVnaXN0ZXIs
IGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmJnZXooY21wVGVtcFJlZ2lz
dGVyLCAxMSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLnN1YnUoY21wVGVtcFJlZ2lzdGVyLCBsZWZ0LCByaWdodCk7CisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci54b3JfaW5zbihjbXBUZW1wUmVnaXN0ZXIsIGNtcFRlbXBSZWdpc3Rlciwg
bGVmdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5iZ2V6KGNtcFRlbXBSZWdpc3RlciwgNyk7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgICAgIHJldHVybiBqdW1w
KCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gU2lnbmVkKSB7CisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5zdWJ1KGNtcFRlbXBSZWdpc3RlciwgbGVmdCwgcmlnaHQpOworICAgICAg
ICAgICAgLy8gQ2hlY2sgaWYgdGhlIHJlc3VsdCBpcyBuZWdhdGl2ZS4KKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLnNsdChjbXBUZW1wUmVnaXN0ZXIsIGNtcFRlbXBSZWdpc3RlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsKKyAgICAgICAgICAgIHJl
dHVybiBicmFuY2hOb3RFcXVhbChjbXBUZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onplcm8p
OworICAgICAgICB9CisgICAgICAgIEFTU0VSVCgwKTsKKworICAgICAgICByZXR1cm4gSnVtcCgp
OworICAgIH0KKworICAgIEp1bXAgYnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQg
bGVmdCwgSW1tMzIgcmlnaHQpCisgICAgeworICAgICAgICBtb3ZlKHJpZ2h0LCBpbW1UZW1wUmVn
aXN0ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgbGVmdCwgaW1tVGVtcFJlZ2lz
dGVyKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3Rl
cklEIGxlZnQsIEFkZHJlc3MgcmlnaHQpCisgICAgeworICAgICAgICBsb2FkMzIocmlnaHQsIGRh
dGFUZW1wUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgbGVmdCwgZGF0
YVRlbXBSZWdpc3Rlcik7CisgICAgfQorCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29u
ZCwgQWRkcmVzcyBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0KQorICAgIHsKKyAgICAgICAgbG9hZDMy
KGxlZnQsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwg
ZGF0YVRlbXBSZWdpc3RlciwgcmlnaHQpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoMzIoQ29u
ZGl0aW9uIGNvbmQsIEFkZHJlc3MgbGVmdCwgSW1tMzIgcmlnaHQpCisgICAgeworICAgICAgICBs
b2FkMzIobGVmdCwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgIG1vdmUocmlnaHQsIGltbVRl
bXBSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBkYXRhVGVtcFJlZ2lz
dGVyLCBpbW1UZW1wUmVnaXN0ZXIpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoMzIoQ29uZGl0
aW9uIGNvbmQsIEJhc2VJbmRleCBsZWZ0LCBJbW0zMiByaWdodCkKKyAgICB7CisgICAgICAgIGxv
YWQzMihsZWZ0LCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgLy8gQmUgY2FyZWZ1bCB0aGF0
IHRoZSBwcmV2aW91cyBsb2FkMzIoKSB1c2VzIGltbVRlbXBSZWdpc3Rlci4KKyAgICAgICAgLy8g
U28sIHdlIG5lZWQgdG8gcHV0IG1vdmUoKSBhZnRlciBsb2FkMzIoKS4KKyAgICAgICAgbW92ZShy
aWdodCwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIGRh
dGFUZW1wUmVnaXN0ZXIsIGltbVRlbXBSZWdpc3Rlcik7CisgICAgfQorCisgICAgSnVtcCBicmFu
Y2gzMldpdGhVbmFsaWduZWRIYWxmV29yZHMoQ29uZGl0aW9uIGNvbmQsIEJhc2VJbmRleCBsZWZ0
LCBJbW0zMiByaWdodCkKKyAgICB7CisgICAgICAgIGxvYWQzMldpdGhVbmFsaWduZWRIYWxmV29y
ZHMobGVmdCwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgIC8vIEJlIGNhcmVmdWwgdGhhdCB0
aGUgcHJldmlvdXMgbG9hZDMyV2l0aFVuYWxpZ25lZEhhbGZXb3JkcygpCisgICAgICAgIC8vIHVz
ZXMgaW1tVGVtcFJlZ2lzdGVyLgorICAgICAgICAvLyBTbywgd2UgbmVlZCB0byBwdXQgbW92ZSgp
IGFmdGVyIGxvYWQzMldpdGhVbmFsaWduZWRIYWxmV29yZHMoKS4KKyAgICAgICAgbW92ZShyaWdo
dCwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIGRhdGFU
ZW1wUmVnaXN0ZXIsIGltbVRlbXBSZWdpc3Rlcik7CisgICAgfQorCisgICAgSnVtcCBicmFuY2gz
MihDb25kaXRpb24gY29uZCwgQWJzb2x1dGVBZGRyZXNzIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQp
CisgICAgeworICAgICAgICBsb2FkMzIobGVmdC5tX3B0ciwgZGF0YVRlbXBSZWdpc3Rlcik7Cisg
ICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBkYXRhVGVtcFJlZ2lzdGVyLCByaWdodCk7Cisg
ICAgfQorCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29uZCwgQWJzb2x1dGVBZGRyZXNz
IGxlZnQsIEltbTMyIHJpZ2h0KQorICAgIHsKKyAgICAgICAgbG9hZDMyKGxlZnQubV9wdHIsIGRh
dGFUZW1wUmVnaXN0ZXIpOworICAgICAgICBtb3ZlKHJpZ2h0LCBpbW1UZW1wUmVnaXN0ZXIpOwor
ICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgZGF0YVRlbXBSZWdpc3RlciwgaW1tVGVtcFJl
Z2lzdGVyKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDE2KENvbmRpdGlvbiBjb25kLCBCYXNl
SW5kZXggbGVmdCwgUmVnaXN0ZXJJRCByaWdodCkKKyAgICB7CisgICAgICAgIGxvYWQxNihsZWZ0
LCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIGRhdGFU
ZW1wUmVnaXN0ZXIsIHJpZ2h0KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDE2KENvbmRpdGlv
biBjb25kLCBCYXNlSW5kZXggbGVmdCwgSW1tMzIgcmlnaHQpCisgICAgeworICAgICAgICBBU1NF
UlQoIShyaWdodC5tX3ZhbHVlICYgMHhGRkZGMDAwMCkpOworICAgICAgICBsb2FkMTYobGVmdCwg
ZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgIC8vIEJlIGNhcmVmdWwgdGhhdCB0aGUgcHJldmlv
dXMgbG9hZDE2KCkgdXNlcyBpbW1UZW1wUmVnaXN0ZXIuCisgICAgICAgIC8vIFNvLCB3ZSBuZWVk
IHRvIHB1dCBtb3ZlKCkgYWZ0ZXIgbG9hZDE2KCkuCisgICAgICAgIG1vdmUocmlnaHQsIGltbVRl
bXBSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBkYXRhVGVtcFJlZ2lz
dGVyLCBpbW1UZW1wUmVnaXN0ZXIpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoVGVzdDMyKENv
bmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHJlZywgUmVnaXN0ZXJJRCBtYXNrKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKChjb25kID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8pKTsKKyAgICAg
ICAgbV9hc3NlbWJsZXIuYW5kX2luc24oY21wVGVtcFJlZ2lzdGVyLCByZWcsIG1hc2spOworICAg
ICAgICBpZiAoY29uZCA9PSBaZXJvKQorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEVxdWFsKGNt
cFRlbXBSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6emVybyk7CisgICAgICAgIHJldHVybiBicmFu
Y2hOb3RFcXVhbChjbXBUZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onplcm8pOworICAgIH0K
KworICAgIEp1bXAgYnJhbmNoVGVzdDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHJlZywg
SW1tMzIgbWFzayA9IEltbTMyKC0xKSkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBa
ZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisgICAgICAgIGlmIChtYXNrLm1fdmFsdWUgPT0g
LTEgJiYgIW1fZml4ZWRXaWR0aCkgeworICAgICAgICAgICAgaWYgKGNvbmQgPT0gWmVybykKKyAg
ICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoRXF1YWwocmVnLCBNSVBTUmVnaXN0ZXJzOjp6ZXJv
KTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hOb3RFcXVhbChyZWcsIE1JUFNSZWdpc3RlcnM6
Onplcm8pOworICAgICAgICB9CisgICAgICAgIG1vdmUobWFzaywgaW1tVGVtcFJlZ2lzdGVyKTsK
KyAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3QzMihjb25kLCByZWcsIGltbVRlbXBSZWdpc3Rlcik7
CisgICAgfQorCisgICAgSnVtcCBicmFuY2hUZXN0MzIoQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3Mg
YWRkcmVzcywgSW1tMzIgbWFzayA9IEltbTMyKC0xKSkKKyAgICB7CisgICAgICAgIGxvYWQzMihh
ZGRyZXNzLCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3QzMihj
b25kLCBkYXRhVGVtcFJlZ2lzdGVyLCBtYXNrKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFRl
c3QzMihDb25kaXRpb24gY29uZCwgQmFzZUluZGV4IGFkZHJlc3MsIEltbTMyIG1hc2sgPSBJbW0z
MigtMSkpCisgICAgeworICAgICAgICBsb2FkMzIoYWRkcmVzcywgZGF0YVRlbXBSZWdpc3Rlcik7
CisgICAgICAgIHJldHVybiBicmFuY2hUZXN0MzIoY29uZCwgZGF0YVRlbXBSZWdpc3RlciwgbWFz
ayk7CisgICAgfQorCisgICAgSnVtcCBqdW1wKCkKKyAgICB7CisgICAgICAgIHJldHVybiBicmFu
Y2hFcXVhbChNSVBTUmVnaXN0ZXJzOjp6ZXJvLCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsKKyAgICB9
CisKKyAgICB2b2lkIGp1bXAoUmVnaXN0ZXJJRCB0YXJnZXQpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5qcih0YXJnZXQpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICB9CisK
KyAgICB2b2lkIGp1bXAoQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9maXhlZFdp
ZHRoID0gdHJ1ZTsKKyAgICAgICAgbG9hZDMyKGFkZHJlc3MsIE1JUFNSZWdpc3RlcnM6OnQ5KTsK
KyAgICAgICAgbV9hc3NlbWJsZXIuanIoTUlQU1JlZ2lzdGVyczo6dDkpOworICAgICAgICBtX2Fz
c2VtYmxlci5ub3AoKTsKKyAgICAgICAgbV9maXhlZFdpZHRoID0gZmFsc2U7CisgICAgfQorCisg
ICAgLy8gQXJpdGhtZXRpYyBjb250cm9sIGZsb3cgb3BlcmF0aW9uczoKKyAgICAvLworICAgIC8v
IFRoaXMgc2V0IG9mIGNvbmRpdGlvbmFsIGJyYW5jaCBvcGVyYXRpb25zIGJyYW5jaCBiYXNlZAor
ICAgIC8vIG9uIHRoZSByZXN1bHQgb2YgYW4gYXJpdGhtZXRpYyBvcGVyYXRpb24uICBUaGUgb3Bl
cmF0aW9uCisgICAgLy8gaXMgcGVyZm9ybWVkIGFzIG5vcm1hbCwgc3RvcmluZyB0aGUgcmVzdWx0
LgorICAgIC8vCisgICAgLy8gKiBqeiBvcGVyYXRpb25zIGJyYW5jaCBpZiB0aGUgcmVzdWx0IGlz
IHplcm8uCisgICAgLy8gKiBqbyBvcGVyYXRpb25zIGJyYW5jaCBpZiB0aGUgKHNpZ25lZCkgYXJp
dGhtZXRpYworICAgIC8vICAgb3BlcmF0aW9uIGNhdXNlZCBhbiBvdmVyZmxvdyB0byBvY2N1ci4K
KworICAgIEp1bXAgYnJhbmNoQWRkMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgc3JjLCBS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBBU1NFUlQoKGNvbmQgPT0gT3ZlcmZsb3cp
IHx8IChjb25kID09IFNpZ25lZCkgfHwgKGNvbmQgPT0gWmVybykgfHwgKGNvbmQgPT0gTm9uWmVy
bykpOworICAgICAgICBpZiAoY29uZCA9PSBPdmVyZmxvdykgeworICAgICAgICAgICAgLyoKKyAg
ICAgICAgICAgICAgICBtb3ZlICAgIGRlc3QsIGRhdGFUZW1wCisgICAgICAgICAgICAgICAgeG9y
ICAgICBjbXBUZW1wLCBkYXRhVGVtcCwgc3JjCisgICAgICAgICAgICAgICAgYmx0eiAgICBjbXBU
ZW1wLCBOb19vdmVyZmxvdyAgICAjIGRpZmYgc2lnbiBiaXQgLT4gbm8gb3ZlcmZsb3cKKyAgICAg
ICAgICAgICAgICBhZGR1ICAgIGRlc3QsIGRhdGFUZW1wLCBzcmMKKyAgICAgICAgICAgICAgICB4
b3IgICAgIGNtcFRlbXAsIGRlc3QsIGRhdGFUZW1wCisgICAgICAgICAgICAgICAgYmdleiAgICBj
bXBUZW1wLCBOb19vdmVyZmxvdyAgICAjIHNhbWUgc2lnbiBiaWcgLT4gbm8gb3ZlcmZsb3cKKyAg
ICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAgICAgICBiICAgICAgIE92ZXJmbG93CisgICAg
ICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgbm9w
CisgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICBO
b19vdmVyZmxvdzoKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBtb3ZlKGRlc3QsIGRhdGFU
ZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIueG9yX2luc24oY21wVGVtcFJl
Z2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLCBzcmMpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
Ymx0eihjbXBUZW1wUmVnaXN0ZXIsIDEwKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUo
ZGVzdCwgZGF0YVRlbXBSZWdpc3Rlciwgc3JjKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnhv
cl9pbnNuKGNtcFRlbXBSZWdpc3RlciwgZGVzdCwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5iZ2V6KGNtcFRlbXBSZWdpc3RlciwgNyk7CisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgICAgIHJldHVybiBqdW1wKCk7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKGNvbmQgPT0gU2lnbmVkKSB7CisgICAgICAgICAgICBhZGQzMihzcmMsIGRl
c3QpOworICAgICAgICAgICAgLy8gQ2hlY2sgaWYgZGVzdCBpcyBuZWdhdGl2ZS4KKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLnNsdChjbXBUZW1wUmVnaXN0ZXIsIGRlc3QsIE1JUFNSZWdpc3RlcnM6
Onplcm8pOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaE5vdEVxdWFsKGNtcFRlbXBSZWdpc3Rl
ciwgTUlQU1JlZ2lzdGVyczo6emVybyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0g
WmVybykgeworICAgICAgICAgICAgYWRkMzIoc3JjLCBkZXN0KTsKKyAgICAgICAgICAgIHJldHVy
biBicmFuY2hFcXVhbChkZXN0LCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoY29uZCA9PSBOb25aZXJvKSB7CisgICAgICAgICAgICBhZGQzMihzcmMsIGRlc3Qp
OworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaE5vdEVxdWFsKGRlc3QsIE1JUFNSZWdpc3RlcnM6
Onplcm8pOworICAgICAgICB9CisgICAgICAgIEFTU0VSVCgwKTsKKyAgICAgICAgcmV0dXJuIEp1
bXAoKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaEFkZDMyKENvbmRpdGlvbiBjb25kLCBJbW0z
MiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1vdmUoaW1tLCBpbW1UZW1w
UmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNoQWRkMzIoY29uZCwgaW1tVGVtcFJlZ2lz
dGVyLCBkZXN0KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaE11bDMyKENvbmRpdGlvbiBjb25k
LCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgQVNTRVJU
KChjb25kID09IE92ZXJmbG93KSB8fCAoY29uZCA9PSBTaWduZWQpIHx8IChjb25kID09IFplcm8p
IHx8IChjb25kID09IE5vblplcm8pKTsKKyAgICAgICAgaWYgKGNvbmQgPT0gT3ZlcmZsb3cpIHsK
KyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgbXVsdCAgICBzcmMsIGRlc3QKKyAgICAg
ICAgICAgICAgICBtZmhpICAgIGRhdGFUZW1wCisgICAgICAgICAgICAgICAgbWZsbyAgICBkZXN0
CisgICAgICAgICAgICAgICAgc3JhICAgICBhZGRyVGVtcCwgZGVzdCwgMzEKKyAgICAgICAgICAg
ICAgICBiZXEgICAgIGRhdGFUZW1wLCBhZGRyVGVtcCwgTm9fb3ZlcmZsb3cgIyBhbGwgc2lnbiBi
aXRzIChiaXQgNjMgdG8gYml0IDMxKSBhcmUgdGhlIHNhbWUgLT4gbm8gb3ZlcmZsb3cKKyAgICAg
ICAgICAgICAgICBub3AKKyAgICAgICAgICAgICAgICBiICAgICAgIE92ZXJmbG93CisgICAgICAg
ICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgbm9wCisg
ICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICBOb19v
dmVyZmxvdzoKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tdWx0KHNy
YywgZGVzdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tZmhpKGRhdGFUZW1wUmVnaXN0ZXIp
OworICAgICAgICAgICAgbV9hc3NlbWJsZXIubWZsbyhkZXN0KTsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLnNyYShhZGRyVGVtcFJlZ2lzdGVyLCBkZXN0LCAzMSk7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5iZXEoZGF0YVRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgNyk7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgICAgIHJldHVybiBqdW1wKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gU2lnbmVkKSB7CisgICAgICAgICAgICBtdWwz
MihzcmMsIGRlc3QpOworICAgICAgICAgICAgLy8gQ2hlY2sgaWYgZGVzdCBpcyBuZWdhdGl2ZS4K
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdChjbXBUZW1wUmVnaXN0ZXIsIGRlc3QsIE1JUFNS
ZWdpc3RlcnM6Onplcm8pOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaE5vdEVxdWFsKGNtcFRl
bXBSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6emVybyk7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KGNvbmQgPT0gWmVybykgeworICAgICAgICAgICAgbXVsMzIoc3JjLCBkZXN0KTsKKyAgICAgICAg
ICAgIHJldHVybiBicmFuY2hFcXVhbChkZXN0LCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoY29uZCA9PSBOb25aZXJvKSB7CisgICAgICAgICAgICBtdWwzMihz
cmMsIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaE5vdEVxdWFsKGRlc3QsIE1JUFNS
ZWdpc3RlcnM6Onplcm8pOworICAgICAgICB9CisgICAgICAgIEFTU0VSVCgwKTsKKyAgICAgICAg
cmV0dXJuIEp1bXAoKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaE11bDMyKENvbmRpdGlvbiBj
b25kLCBJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgewor
ICAgICAgICBtb3ZlKGltbSwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIGJyYW5j
aE11bDMyKGNvbmQsIGltbVRlbXBSZWdpc3RlciwgZGVzdCk7CisgICAgfQorCisgICAgSnVtcCBi
cmFuY2hTdWIzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBPdmVyZmxvdykgfHwgKGNvbmQgPT0g
U2lnbmVkKSB8fCAoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisgICAgICAg
IGlmIChjb25kID09IE92ZXJmbG93KSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAg
IG1vdmUgICAgZGVzdCwgZGF0YVRlbXAKKyAgICAgICAgICAgICAgICB4b3IgICAgIGNtcFRlbXAs
IGRhdGFUZW1wLCBzcmMKKyAgICAgICAgICAgICAgICBiZ2V6ICAgIGNtcFRlbXAsIE5vX292ZXJm
bG93ICAgICMgc2FtZSBzaWduIGJpdCAtPiBubyBvdmVyZmxvdworICAgICAgICAgICAgICAgIHN1
YnUgICAgZGVzdCwgZGF0YVRlbXAsIHNyYworICAgICAgICAgICAgICAgIHhvciAgICAgY21wVGVt
cCwgZGVzdCwgZGF0YVRlbXAKKyAgICAgICAgICAgICAgICBiZ2V6ICAgIGNtcFRlbXAsIE5vX292
ZXJmbG93ICAgICMgc2FtZSBzaWduIGJpdCAtPiBubyBvdmVyZmxvdworICAgICAgICAgICAgICAg
IG5vcAorICAgICAgICAgICAgICAgIGIgICAgICAgT3ZlcmZsb3cKKyAgICAgICAgICAgICAgICBu
b3AKKyAgICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAg
ICAgICBub3AKKyAgICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAgIE5vX292ZXJmbG93Ogor
ICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1vdmUoZGVzdCwgZGF0YVRlbXBSZWdpc3Rlcik7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3JfaW5zbihjbXBUZW1wUmVnaXN0ZXIsIGRhdGFU
ZW1wUmVnaXN0ZXIsIHNyYyk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5iZ2V6KGNtcFRlbXBS
ZWdpc3RlciwgMTApOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3VidShkZXN0LCBkYXRhVGVt
cFJlZ2lzdGVyLCBzcmMpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIueG9yX2luc24oY21wVGVt
cFJlZ2lzdGVyLCBkZXN0LCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLmJnZXooY21wVGVtcFJlZ2lzdGVyLCA3KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm5v
cCgpOworICAgICAgICAgICAgcmV0dXJuIGp1bXAoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
Y29uZCA9PSBTaWduZWQpIHsKKyAgICAgICAgICAgIHN1YjMyKHNyYywgZGVzdCk7CisgICAgICAg
ICAgICAvLyBDaGVjayBpZiBkZXN0IGlzIG5lZ2F0aXZlLgorICAgICAgICAgICAgbV9hc3NlbWJs
ZXIuc2x0KGNtcFRlbXBSZWdpc3RlciwgZGVzdCwgTUlQU1JlZ2lzdGVyczo6emVybyk7CisgICAg
ICAgICAgICByZXR1cm4gYnJhbmNoTm90RXF1YWwoY21wVGVtcFJlZ2lzdGVyLCBNSVBTUmVnaXN0
ZXJzOjp6ZXJvKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29uZCA9PSBaZXJvKSB7CisgICAg
ICAgICAgICBzdWIzMihzcmMsIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEVxdWFs
KGRlc3QsIE1JUFNSZWdpc3RlcnM6Onplcm8pOworICAgICAgICB9CisgICAgICAgIGlmIChjb25k
ID09IE5vblplcm8pIHsKKyAgICAgICAgICAgIHN1YjMyKHNyYywgZGVzdCk7CisgICAgICAgICAg
ICByZXR1cm4gYnJhbmNoTm90RXF1YWwoZGVzdCwgTUlQU1JlZ2lzdGVyczo6emVybyk7CisgICAg
ICAgIH0KKyAgICAgICAgQVNTRVJUKDApOworICAgICAgICByZXR1cm4gSnVtcCgpOworICAgIH0K
KworICAgIEp1bXAgYnJhbmNoU3ViMzIoQ29uZGl0aW9uIGNvbmQsIEltbTMyIGltbSwgUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbW92ZShpbW0sIGltbVRlbXBSZWdpc3Rlcik7Cisg
ICAgICAgIHJldHVybiBicmFuY2hTdWIzMihjb25kLCBpbW1UZW1wUmVnaXN0ZXIsIGRlc3QpOwor
ICAgIH0KKworICAgIC8vIE1pc2NlbGxhbmVvdXMgb3BlcmF0aW9uczoKKworICAgIHZvaWQgYnJl
YWtwb2ludCgpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5ia3B0KCk7CisgICAgfQorCisg
ICAgQ2FsbCBuZWFyQ2FsbCgpCisgICAgeworICAgICAgICAvKiBXZSBuZWVkIHR3byB3b3JkcyBm
b3IgcmVsYXhhdGlvbi4gICovCisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICBt
X2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuamFsKCk7CisgICAgICAgIG1f
YXNzZW1ibGVyLm5vcCgpOworICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5uZXdKbXBT
cmMoKSwgQ2FsbDo6TGlua2FibGVOZWFyKTsKKyAgICB9CisKKyAgICBDYWxsIGNhbGwoKQorICAg
IHsKKyAgICAgICAgbV9hc3NlbWJsZXIubHVpKE1JUFNSZWdpc3RlcnM6OnQ5LCAwKTsKKyAgICAg
ICAgbV9hc3NlbWJsZXIub3JpKE1JUFNSZWdpc3RlcnM6OnQ5LCBNSVBTUmVnaXN0ZXJzOjp0OSwg
MCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmphbHIoTUlQU1JlZ2lzdGVyczo6dDkpOworICAgICAg
ICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIubmV3
Sm1wU3JjKCksIENhbGw6OkxpbmthYmxlKTsKKyAgICB9CisKKyAgICBDYWxsIGNhbGwoUmVnaXN0
ZXJJRCB0YXJnZXQpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5qYWxyKHRhcmdldCk7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxl
ci5uZXdKbXBTcmMoKSwgQ2FsbDo6Tm9uZSk7CisgICAgfQorCisgICAgQ2FsbCBjYWxsKEFkZHJl
c3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fZml4ZWRXaWR0aCA9IHRydWU7CisgICAgICAg
IGxvYWQzMihhZGRyZXNzLCBNSVBTUmVnaXN0ZXJzOjp0OSk7CisgICAgICAgIG1fYXNzZW1ibGVy
LmphbHIoTUlQU1JlZ2lzdGVyczo6dDkpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAg
ICAgICAgbV9maXhlZFdpZHRoID0gZmFsc2U7CisgICAgICAgIHJldHVybiBDYWxsKG1fYXNzZW1i
bGVyLm5ld0ptcFNyYygpLCBDYWxsOjpOb25lKTsKKyAgICB9CisKKyAgICB2b2lkIHJldCgpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5qcihNSVBTUmVnaXN0ZXJzOjpyYSk7CisgICAgICAg
IG1fYXNzZW1ibGVyLm5vcCgpOworICAgIH0KKworICAgIHZvaWQgc2V0MzIoQ29uZGl0aW9uIGNv
bmQsIFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCwgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgaWYgKGNvbmQgPT0gRXF1YWwgfHwgY29uZCA9PSBaZXJvKSB7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci54b3JfaW5zbihkZXN0LCBsZWZ0LCByaWdodCk7CisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5zbHRpdShkZXN0LCBkZXN0LCAxKTsKKyAgICAgICAgfSBlbHNlIGlm
IChjb25kID09IE5vdEVxdWFsIHx8IGNvbmQgPT0gTm9uWmVybykgeworICAgICAgICAgICAgbV9h
c3NlbWJsZXIueG9yX2luc24oZGVzdCwgbGVmdCwgcmlnaHQpOworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIuc2x0dShkZXN0LCBNSVBTUmVnaXN0ZXJzOjp6ZXJvLCBkZXN0KTsKKyAgICAgICAgfSBl
bHNlIGlmIChjb25kID09IEFib3ZlKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0dShkZXN0
LCByaWdodCwgbGVmdCk7CisgICAgICAgIGVsc2UgaWYgKGNvbmQgPT0gQWJvdmVPckVxdWFsKSB7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHR1KGRlc3QsIGxlZnQsIHJpZ2h0KTsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLnhvcmkoZGVzdCwgZGVzdCwgMSk7CisgICAgICAgIH0gZWxzZSBp
ZiAoY29uZCA9PSBCZWxvdykKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdHUoZGVzdCwgbGVm
dCwgcmlnaHQpOworICAgICAgICBlbHNlIGlmIChjb25kID09IEJlbG93T3JFcXVhbCkgeworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuc2x0dShkZXN0LCByaWdodCwgbGVmdCk7CisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci54b3JpKGRlc3QsIGRlc3QsIDEpOworICAgICAgICB9IGVsc2UgaWYgKGNv
bmQgPT0gR3JlYXRlclRoYW4pCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHQoZGVzdCwgcmln
aHQsIGxlZnQpOworICAgICAgICBlbHNlIGlmIChjb25kID09IEdyZWF0ZXJUaGFuT3JFcXVhbCkg
eworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0KGRlc3QsIGxlZnQsIHJpZ2h0KTsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLnhvcmkoZGVzdCwgZGVzdCwgMSk7CisgICAgICAgIH0gZWxzZSBp
ZiAoY29uZCA9PSBMZXNzVGhhbikKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdChkZXN0LCBs
ZWZ0LCByaWdodCk7CisgICAgICAgIGVsc2UgaWYgKGNvbmQgPT0gTGVzc1RoYW5PckVxdWFsKSB7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHQoZGVzdCwgcmlnaHQsIGxlZnQpOworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIueG9yaShkZXN0LCBkZXN0LCAxKTsKKyAgICAgICAgfSBlbHNlIGlm
IChjb25kID09IE92ZXJmbG93KSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgIHhv
ciAgICAgY21wVGVtcCwgbGVmdCwgcmlnaHQKKyAgICAgICAgICAgICAgICBiZ2V6ICAgIERvbmUs
IGNtcFRlbXAgICAjIHNhbWUgc2lnbiBiaXQgLT4gbm8gb3ZlcmZsb3cKKyAgICAgICAgICAgICAg
ICBtb3ZlICAgIGRlc3QsIDAKKyAgICAgICAgICAgICAgICBzdWJ1ICAgIGNtcFRlbXAsIGxlZnQs
IHJpZ2h0CisgICAgICAgICAgICAgICAgeG9yICAgICBjbXBUZW1wLCBjbXBUZW1wLCBsZWZ0ICMg
ZGlmZiBzaWduIGJpdCAtPiBvdmVyZmxvdworICAgICAgICAgICAgICAgIHNsdCAgICAgZGVzdCwg
Y21wVGVtcCwgMAorICAgICAgICAgICAgICBEb25lOgorICAgICAgICAgICAgKi8KKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLnhvcl9pbnNuKGNtcFRlbXBSZWdpc3RlciwgbGVmdCwgcmlnaHQpOwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuYmdleihjbXBUZW1wUmVnaXN0ZXIsIDQpOworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIubW92ZShkZXN0LCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLnN1YnUoY21wVGVtcFJlZ2lzdGVyLCBsZWZ0LCByaWdodCk7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci54b3JfaW5zbihjbXBUZW1wUmVnaXN0ZXIsIGNtcFRlbXBS
ZWdpc3RlciwgbGVmdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHQoZGVzdCwgY21wVGVt
cFJlZ2lzdGVyLCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsKKyAgICAgICAgfSBlbHNlIGlmIChjb25k
ID09IFNpZ25lZCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3VidShkZXN0LCBsZWZ0LCBy
aWdodCk7CisgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgcmVzdWx0IGlzIG5lZ2F0aXZlLgor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0KGRlc3QsIGRlc3QsIE1JUFNSZWdpc3RlcnM6Onpl
cm8pOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBzZXQzMihDb25kaXRpb24gY29uZCwg
UmVnaXN0ZXJJRCBsZWZ0LCBJbW0zMiByaWdodCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAg
ICAgICAgbW92ZShyaWdodCwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgc2V0MzIoY29uZCwg
bGVmdCwgaW1tVGVtcFJlZ2lzdGVyLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHNldFRlc3Qz
MihDb25kaXRpb24gY29uZCwgQWRkcmVzcyBhZGRyZXNzLCBJbW0zMiBtYXNrLCBSZWdpc3RlcklE
IGRlc3QpCisgICAgeworICAgICAgICBBU1NFUlQoKGNvbmQgPT0gWmVybykgfHwgKGNvbmQgPT0g
Tm9uWmVybykpOworICAgICAgICBsb2FkMzIoYWRkcmVzcywgZGF0YVRlbXBSZWdpc3Rlcik7Cisg
ICAgICAgIGlmIChtYXNrLm1fdmFsdWUgPT0gLTEgJiYgIW1fZml4ZWRXaWR0aCkgeworICAgICAg
ICAgICAgaWYgKGNvbmQgPT0gWmVybykKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHRp
dShkZXN0LCBkYXRhVGVtcFJlZ2lzdGVyLCAxKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5zbHR1KGRlc3QsIE1JUFNSZWdpc3RlcnM6Onplcm8sIGRhdGFU
ZW1wUmVnaXN0ZXIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbW92ZShtYXNrLCBp
bW1UZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYW5kX2luc24oY21wVGVt
cFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIGlmIChjb25kID09IFplcm8pCisg
ICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0aXUoZGVzdCwgY21wVGVtcFJlZ2lzdGVyLCAx
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHR1KGRl
c3QsIE1JUFNSZWdpc3RlcnM6Onplcm8sIGNtcFRlbXBSZWdpc3Rlcik7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBEYXRhTGFiZWwzMiBtb3ZlV2l0aFBhdGNoKEltbTMyIGltbSwgUmVnaXN0ZXJJ
RCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9maXhlZFdpZHRoID0gdHJ1ZTsKKyAgICAgICAgRGF0
YUxhYmVsMzIgbGFiZWwodGhpcyk7CisgICAgICAgIG1vdmUoaW1tLCBkZXN0KTsKKyAgICAgICAg
bV9maXhlZFdpZHRoID0gZmFsc2U7CisgICAgICAgIHJldHVybiBsYWJlbDsKKyAgICB9CisKKyAg
ICBEYXRhTGFiZWxQdHIgbW92ZVdpdGhQYXRjaChJbW1QdHIgaW5pdGlhbFZhbHVlLCBSZWdpc3Rl
cklEIGRlc3QpCisgICAgeworICAgICAgICBtX2ZpeGVkV2lkdGggPSB0cnVlOworICAgICAgICBE
YXRhTGFiZWxQdHIgbGFiZWwodGhpcyk7CisgICAgICAgIG1vdmUoaW5pdGlhbFZhbHVlLCBkZXN0
KTsKKyAgICAgICAgbV9maXhlZFdpZHRoID0gZmFsc2U7CisgICAgICAgIHJldHVybiBsYWJlbDsK
KyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFB0cldpdGhQYXRjaChDb25kaXRpb24gY29uZCwgUmVn
aXN0ZXJJRCBsZWZ0LCBEYXRhTGFiZWxQdHImIGRhdGFMYWJlbCwgSW1tUHRyIGluaXRpYWxSaWdo
dFZhbHVlID0gSW1tUHRyKDApKQorICAgIHsKKyAgICAgICAgbV9maXhlZFdpZHRoID0gdHJ1ZTsK
KyAgICAgICAgZGF0YUxhYmVsID0gbW92ZVdpdGhQYXRjaChpbml0aWFsUmlnaHRWYWx1ZSwgaW1t
VGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgSnVtcCB0ZW1wID0gYnJhbmNoMzIoY29uZCwgbGVmdCwg
aW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgbV9maXhlZFdpZHRoID0gZmFsc2U7CisgICAgICAg
IHJldHVybiB0ZW1wOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoUHRyV2l0aFBhdGNoKENvbmRp
dGlvbiBjb25kLCBBZGRyZXNzIGxlZnQsIERhdGFMYWJlbFB0ciYgZGF0YUxhYmVsLCBJbW1QdHIg
aW5pdGlhbFJpZ2h0VmFsdWUgPSBJbW1QdHIoMCkpCisgICAgeworICAgICAgICBtX2ZpeGVkV2lk
dGggPSB0cnVlOworICAgICAgICBsb2FkMzIobGVmdCwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAg
ICAgIGRhdGFMYWJlbCA9IG1vdmVXaXRoUGF0Y2goaW5pdGlhbFJpZ2h0VmFsdWUsIGltbVRlbXBS
ZWdpc3Rlcik7CisgICAgICAgIEp1bXAgdGVtcCA9IGJyYW5jaDMyKGNvbmQsIGRhdGFUZW1wUmVn
aXN0ZXIsIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgIG1fZml4ZWRXaWR0aCA9IGZhbHNlOwor
ICAgICAgICByZXR1cm4gdGVtcDsKKyAgICB9CisKKyAgICBEYXRhTGFiZWxQdHIgc3RvcmVQdHJX
aXRoUGF0Y2goSW1tUHRyIGluaXRpYWxWYWx1ZSwgSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MpCisg
ICAgeworICAgICAgICBtX2ZpeGVkV2lkdGggPSB0cnVlOworICAgICAgICBEYXRhTGFiZWxQdHIg
ZGF0YUxhYmVsID0gbW92ZVdpdGhQYXRjaChpbml0aWFsVmFsdWUsIGRhdGFUZW1wUmVnaXN0ZXIp
OworICAgICAgICBzdG9yZTMyKGRhdGFUZW1wUmVnaXN0ZXIsIGFkZHJlc3MpOworICAgICAgICBt
X2ZpeGVkV2lkdGggPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGRhdGFMYWJlbDsKKyAgICB9CisK
KyAgICBEYXRhTGFiZWxQdHIgc3RvcmVQdHJXaXRoUGF0Y2goSW1wbGljaXRBZGRyZXNzIGFkZHJl
c3MpCisgICAgeworICAgICAgICByZXR1cm4gc3RvcmVQdHJXaXRoUGF0Y2goSW1tUHRyKDApLCBh
ZGRyZXNzKTsKKyAgICB9CisKKyAgICBDYWxsIHRhaWxSZWN1cnNpdmVDYWxsKCkKKyAgICB7Cisg
ICAgICAgIC8vIExpa2UgYSBub3JtYWwgY2FsbCwgYnV0IGRvbid0IHVwZGF0ZSB0aGUgcmV0dXJu
ZWQgYWRkcmVzcyByZWdpc3RlcgorICAgICAgICBtX2ZpeGVkV2lkdGggPSB0cnVlOworICAgICAg
ICBtb3ZlKEltbTMyKDApLCBNSVBTUmVnaXN0ZXJzOjp0OSk7CisgICAgICAgIG1fYXNzZW1ibGVy
LmpyKE1JUFNSZWdpc3RlcnM6OnQ5KTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAg
ICAgIG1fZml4ZWRXaWR0aCA9IGZhbHNlOworICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxl
ci5uZXdKbXBTcmMoKSwgQ2FsbDo6TGlua2FibGUpOworICAgIH0KKworICAgIENhbGwgbWFrZVRh
aWxSZWN1cnNpdmVDYWxsKEp1bXAgb2xkSnVtcCkKKyAgICB7CisgICAgICAgIG9sZEp1bXAubGlu
ayh0aGlzKTsKKyAgICAgICAgcmV0dXJuIHRhaWxSZWN1cnNpdmVDYWxsKCk7CisgICAgfQorCisg
ICAgdm9pZCBsb2FkRG91YmxlKEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzLCBGUFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisjaWYgX19taXBzID09IDEKKyAgICAgICAgLyoKKyAgICAgICAgICAgIGxp
ICAgICAgICAgIGFkZHJUZW1wLCBhZGRyZXNzLm9mZnNldAorICAgICAgICAgICAgYWRkdSAgICAg
ICAgYWRkclRlbXAsIGFkZHJUZW1wLCBiYXNlCisgICAgICAgICAgICBsd2MxICAgICAgICBkZXN0
LCAwKGFkZHJUZW1wKQorICAgICAgICAgICAgbHdjMSAgICAgICAgZGVzdCsxLCA0KGFkZHJUZW1w
KQorICAgICAgICAgKi8KKyAgICAgICAgbW92ZShJbW0zMihhZGRyZXNzLm9mZnNldCksIGFkZHJU
ZW1wUmVnaXN0ZXIpOworICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIs
IGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmx3
YzEoZGVzdCwgYWRkclRlbXBSZWdpc3RlciwgMCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmx3YzEo
RlBSZWdpc3RlcklEKGRlc3QgKyAxKSwgYWRkclRlbXBSZWdpc3RlciwgNCk7CisjZWxzZQorICAg
ICAgICBpZiAoYWRkcmVzcy5vZmZzZXQgPj0gLTMyNzY4ICYmIGFkZHJlc3Mub2Zmc2V0IDw9IDMy
NzY3CisgICAgICAgICAgICAmJiAhbV9maXhlZFdpZHRoKSB7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5sZGMxKGRlc3QsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5vZmZzZXQpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICBsdWkgICAgIGFkZHJUZW1w
LCAob2Zmc2V0ICsgMHg4MDAwKSA+PiAxNgorICAgICAgICAgICAgICAgIGFkZHUgICAgYWRkclRl
bXAsIGFkZHJUZW1wLCBiYXNlCisgICAgICAgICAgICAgICAgbGRjMSAgICBkZXN0LCAob2Zmc2V0
ICYgMHhmZmZmKShhZGRyVGVtcCkKKyAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmx1aShhZGRyVGVtcFJlZ2lzdGVyLCAoYWRkcmVzcy5vZmZzZXQgKyAweDgwMDApID4+
IDE2KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRk
clRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxk
YzEoZGVzdCwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQpOworICAgICAgICB9Cisj
ZW5kaWYKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlRG91YmxlKEZQUmVnaXN0ZXJJRCBzcmMsIElt
cGxpY2l0QWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyNpZiBfX21pcHMgPT0gMQorICAgICAgICAv
KgorICAgICAgICAgICAgbGkgICAgICAgICAgYWRkclRlbXAsIGFkZHJlc3Mub2Zmc2V0CisgICAg
ICAgICAgICBhZGR1ICAgICAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGJhc2UKKyAgICAgICAgICAg
IHN3YzEgICAgICAgIGRlc3QsIDAoYWRkclRlbXApCisgICAgICAgICAgICBzd2MxICAgICAgICBk
ZXN0KzEsIDQoYWRkclRlbXApCisgICAgICAgICAqLworICAgICAgICBtb3ZlKEltbTMyKGFkZHJl
c3Mub2Zmc2V0KSwgYWRkclRlbXBSZWdpc3Rlcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUo
YWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlKTsKKyAgICAg
ICAgbV9hc3NlbWJsZXIuc3djMShzcmMsIGFkZHJUZW1wUmVnaXN0ZXIsIDApOworICAgICAgICBt
X2Fzc2VtYmxlci5zd2MxKEZQUmVnaXN0ZXJJRChzcmMgKyAxKSwgYWRkclRlbXBSZWdpc3Rlciwg
NCk7CisjZWxzZQorICAgICAgICBpZiAoYWRkcmVzcy5vZmZzZXQgPj0gLTMyNzY4ICYmIGFkZHJl
c3Mub2Zmc2V0IDw9IDMyNzY3CisgICAgICAgICAgICAmJiAhbV9maXhlZFdpZHRoKQorICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuc2RjMShzcmMsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5vZmZzZXQp
OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgbHVpICAg
ICBhZGRyVGVtcCwgKG9mZnNldCArIDB4ODAwMCkgPj4gMTYKKyAgICAgICAgICAgICAgICBhZGR1
ICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgYmFzZQorICAgICAgICAgICAgICAgIHNkYzEgICAgc3Jj
LCAob2Zmc2V0ICYgMHhmZmZmKShhZGRyVGVtcCkKKyAgICAgICAgICAgICAgKi8KKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLmx1aShhZGRyVGVtcFJlZ2lzdGVyLCAoYWRkcmVzcy5vZmZzZXQgKyAw
eDgwMDApID4+IDE2KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdp
c3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlKTsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLnNkYzEoc3JjLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCk7CisgICAg
ICAgIH0KKyNlbmRpZgorICAgIH0KKworICAgIHZvaWQgYWRkRG91YmxlKEZQUmVnaXN0ZXJJRCBz
cmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkX2Qo
ZGVzdCwgZGVzdCwgc3JjKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZERvdWJsZShBZGRyZXNzIHNy
YywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBsb2FkRG91YmxlKHNyYywgZnBU
ZW1wUmVnaXN0ZXIpOworICAgICAgICBtX2Fzc2VtYmxlci5hZGRfZChkZXN0LCBkZXN0LCBmcFRl
bXBSZWdpc3Rlcik7CisgICAgfQorCisgICAgdm9pZCBzdWJEb3VibGUoRlBSZWdpc3RlcklEIHNy
YywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zdWJfZChk
ZXN0LCBkZXN0LCBzcmMpOworICAgIH0KKworICAgIHZvaWQgc3ViRG91YmxlKEFkZHJlc3Mgc3Jj
LCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGxvYWREb3VibGUoc3JjLCBmcFRl
bXBSZWdpc3Rlcik7CisgICAgICAgIG1fYXNzZW1ibGVyLnN1Yl9kKGRlc3QsIGRlc3QsIGZwVGVt
cFJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICB2b2lkIG11bERvdWJsZShGUFJlZ2lzdGVySUQgc3Jj
LCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm11bF9kKGRl
c3QsIGRlc3QsIHNyYyk7CisgICAgfQorCisgICAgdm9pZCBtdWxEb3VibGUoQWRkcmVzcyBzcmMs
IEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbG9hZERvdWJsZShzcmMsIGZwVGVt
cFJlZ2lzdGVyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubXVsX2QoZGVzdCwgZGVzdCwgZnBUZW1w
UmVnaXN0ZXIpOworICAgIH0KKworICAgIHZvaWQgY29udmVydEludDMyVG9Eb3VibGUoUmVnaXN0
ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
bXRjMShzcmMsIGZwVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuY3Z0X2Rfdyhk
ZXN0LCBmcFRlbXBSZWdpc3Rlcik7CisgICAgfQorCisgICAgdm9pZCBpbnNlcnRSZWxheGF0aW9u
V29yZHMoKQorICAgIHsKKyAgICAgICAgLyogV2UgbmVlZCBmb3VyIHdvcmRzIGZvciByZWxheGF0
aW9uLiAqLworICAgICAgICBtX2Fzc2VtYmxlci5iZXEoTUlQU1JlZ2lzdGVyczo6emVybywgTUlQ
U1JlZ2lzdGVyczo6emVybywgMyk7IC8vIEp1bXAgb3ZlciBub3BzOworICAgICAgICBtX2Fzc2Vt
Ymxlci5ub3AoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIG1fYXNzZW1i
bGVyLm5vcCgpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoVHJ1ZSgpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5hcHBlbmRKdW1wKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmJjMXQoKTsK
KyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIGluc2VydFJlbGF4YXRpb25Xb3Jk
cygpOworICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5uZXdKbXBTcmMoKSk7CisgICAg
fQorCisgICAgSnVtcCBicmFuY2hGYWxzZSgpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5h
cHBlbmRKdW1wKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmJjMWYoKTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubm9wKCk7CisgICAgICAgIGluc2VydFJlbGF4YXRpb25Xb3JkcygpOworICAgICAgICBy
ZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5uZXdKbXBTcmMoKSk7CisgICAgfQorCisgICAgSnVtcCBi
cmFuY2hFcXVhbChSZWdpc3RlcklEIHJzLCBSZWdpc3RlcklEIHJ0KQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIuYXBwZW5kSnVtcCgpOworICAgICAgICBtX2Fzc2VtYmxlci5iZXEocnMsIHJ0
LCAwKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIGluc2VydFJlbGF4YXRp
b25Xb3JkcygpOworICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5uZXdKbXBTcmMoKSk7
CisgICAgfQorCisgICAgSnVtcCBicmFuY2hOb3RFcXVhbChSZWdpc3RlcklEIHJzLCBSZWdpc3Rl
cklEIHJ0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYXBwZW5kSnVtcCgpOworICAgICAg
ICBtX2Fzc2VtYmxlci5ibmUocnMsIHJ0LCAwKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7
CisgICAgICAgIGluc2VydFJlbGF4YXRpb25Xb3JkcygpOworICAgICAgICByZXR1cm4gSnVtcCht
X2Fzc2VtYmxlci5uZXdKbXBTcmMoKSk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hEb3VibGUo
RG91YmxlQ29uZGl0aW9uIGNvbmQsIEZQUmVnaXN0ZXJJRCBsZWZ0LCBGUFJlZ2lzdGVySUQgcmln
aHQpCisgICAgeworICAgICAgICBpZiAoY29uZCA9PSBEb3VibGVFcXVhbCkgeworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuY19lcV9kKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIHJldHVybiBi
cmFuY2hUcnVlKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gRG91YmxlTm90RXF1
YWwpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNfZXFfZChsZWZ0LCByaWdodCk7CisgICAg
ICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsgLy8gZmFsc2UKKyAgICAgICAgfQorICAgICAg
ICBpZiAoY29uZCA9PSBEb3VibGVHcmVhdGVyVGhhbikgeworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIuY19uZ3RfZChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2Uo
KTsgLy8gZmFsc2UKKyAgICAgICAgfQorICAgICAgICBpZiAoY29uZCA9PSBEb3VibGVHcmVhdGVy
VGhhbk9yRXF1YWwpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNfbmdlX2QocmlnaHQsIGxl
ZnQpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7IC8vIGZhbHNlCisgICAgICAg
IH0KKyAgICAgICAgaWYgKGNvbmQgPT0gRG91YmxlTGVzc1RoYW4pIHsKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLmNfbHRfZChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNo
VHJ1ZSgpOworICAgICAgICB9CisgICAgICAgIGlmIChjb25kID09IERvdWJsZUxlc3NUaGFuT3JF
cXVhbCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY19sZV9kKGxlZnQsIHJpZ2h0KTsKKyAg
ICAgICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNv
bmQgPT0gRG91YmxlRXF1YWxPclVub3JkZXJlZCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
Y191ZXFfZChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgpOwor
ICAgICAgICB9CisgICAgICAgIGlmIChjb25kID09IERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVy
ZWQpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNfb2xlX2QobGVmdCwgcmlnaHQpOworICAg
ICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7IC8vIGZhbHNlCisgICAgICAgIH0KKyAgICAg
ICAgaWYgKGNvbmQgPT0gRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQpIHsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLmNfb2x0X2QobGVmdCwgcmlnaHQpOworICAgICAgICAgICAg
cmV0dXJuIGJyYW5jaEZhbHNlKCk7IC8vIGZhbHNlCisgICAgICAgIH0KKyAgICAgICAgaWYgKGNv
bmQgPT0gRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCkgeworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIuY191bHRfZChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgp
OworICAgICAgICB9CisgICAgICAgIGlmIChjb25kID09IERvdWJsZUxlc3NUaGFuT3JFcXVhbE9y
VW5vcmRlcmVkKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jX3VsZV9kKGxlZnQsIHJpZ2h0
KTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7CisgICAgICAgIH0KKyAgICAgICAg
QVNTRVJUKDApOworCisgICAgICAgIHJldHVybiBKdW1wKCk7CisgICAgfQorCisgICAgLy8gVHJ1
bmNhdGVzICdzcmMnIHRvIGFuIGludGVnZXIsIGFuZCBwbGFjZXMgdGhlIHJlc3VsdGluZyAnZGVz
dCcuCisgICAgLy8gSWYgdGhlIHJlc3VsdCBpcyBub3QgcmVwcmVzZW50YWJsZSBhcyBhIDMyIGJp
dCB2YWx1ZSwgYnJhbmNoLgorICAgIC8vIE1heSBhbHNvIGJyYW5jaCBmb3Igc29tZSB2YWx1ZXMg
dGhhdCBhcmUgcmVwcmVzZW50YWJsZSBpbiAzMiBiaXRzCisgICAgLy8gKHNwZWNpZmljYWxseSwg
aW4gdGhpcyBjYXNlLCBJTlRfTUFYIDB4N2ZmZmZmZmYpLgorICAgIEp1bXAgYnJhbmNoVHJ1bmNh
dGVEb3VibGVUb0ludDMyKEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLnRydW5jX3dfZChmcFRlbXBSZWdpc3RlcixzcmMpOworICAg
ICAgICBtX2Fzc2VtYmxlci5tZmMxKGRlc3QsIGZwVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0
dXJuIGJyYW5jaDMyKEVxdWFsLCBkZXN0LCBJbW0zMigweDdmZmZmZmZmKSk7CisgICAgfQorCitw
cml2YXRlOgorICAgIC8vIElmIG1fZml4ZWRXaWR0aCBpcyB0cnVlLCB3ZSB3aWxsIGdlbmVyYXRl
IGEgZml4ZWQgbnVtYmVyIG9mIGluc3RydWN0aW9ucy4KKyAgICAvLyBPdGhlcndpc2UsIHdlIGNh
biBlbWl0IGFueSBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zLgorICAgIGJvb2wgbV9maXhlZFdpZHRo
OworCisgICAgZnJpZW5kIGNsYXNzIExpbmtCdWZmZXI7CisgICAgZnJpZW5kIGNsYXNzIFJlcGF0
Y2hCdWZmZXI7CisKKyAgICBzdGF0aWMgdm9pZCBsaW5rQ2FsbCh2b2lkKiBjb2RlLCBDYWxsIGNh
bGwsIEZ1bmN0aW9uUHRyIGZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAgTUlQU0Fzc2VtYmxlcjo6
bGlua0NhbGwoY29kZSwgY2FsbC5tX2ptcCwgZnVuY3Rpb24udmFsdWUoKSk7CisgICAgfQorCisg
ICAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbCBjYWxsLCBDb2RlTG9j
YXRpb25MYWJlbCBkZXN0aW5hdGlvbikKKyAgICB7CisgICAgICAgIE1JUFNBc3NlbWJsZXI6OnJl
bGlua0NhbGwoY2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJl
c3MoKSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0aW9u
Q2FsbCBjYWxsLCBGdW5jdGlvblB0ciBkZXN0aW5hdGlvbikKKyAgICB7CisgICAgICAgIE1JUFNB
c3NlbWJsZXI6OnJlbGlua0NhbGwoY2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZXhl
Y3V0YWJsZUFkZHJlc3MoKSk7CisgICAgfQorCit9OworCit9CisKKyNlbmRpZgorCisjZW5kaWYg
Ly8gTWFjcm9Bc3NlbWJsZXJNSVBTX2gKSW5kZXg6IGppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBqaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDUwNjEwKQorKysgaml0L0pJVE9w
Y29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzk2LDYgKzE3OTYsNTYgQEAKIAogICAgIGFk
ZFB0cihJbW0zMihzaXplb2YoQXJnTGlzdCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKKyNl
bGlmIFBMQVRGT1JNKE1JUFMpCisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIzMihSZWdp
c3RlckZpbGU6OkFyZ3VtZW50Q291bnQsIHJlZ1QwKTsKKworICAgIC8vIEFsbG9jYXRlIHN0YWNr
IHNwYWNlIGZvciBvdXIgYXJnbGlzdAorICAgIENPTVBJTEVfQVNTRVJUKChzaXplb2YoQXJnTGlz
dCkgJiAweDcpID09IDAsIEFyZ0xpc3Rfc2hvdWxkX2J5XzhieXRlX2FsaWduZWQpOworICAgIHN1
YlB0cihJbW0zMihzaXplb2YoQXJnTGlzdCkgKyAyNCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
KworICAgIC8vIFNldCB1cCBhcmd1bWVudHMKKyAgICBzdWJQdHIoSW1tMzIoMSksIHJlZ1QwKTsg
Ly8gRG9uJ3QgaW5jbHVkZSAndGhpcycgaW4gYXJnY291bnQKKworICAgIC8vIFB1c2ggYXJnY291
bnQgdG8gMjQgKyBvZmZzZXQoJHNwKQorICAgIHN0b3JlUHRyKHJlZ1QwLCBBZGRyZXNzKHN0YWNr
UG9pbnRlclJlZ2lzdGVyLCAyNCArIE9CSkVDVF9PRkZTRVRPRihBcmdMaXN0LCBtX2FyZ0NvdW50
KSkpOworCisgICAgLy8gQ2FsY3VsYXRlIHRoZSBzdGFydCBvZiB0aGUgY2FsbGZyYW1lIGhlYWRl
ciwgYW5kIHN0b3JlIGluIHJlZ1QxCisgICAgbW92ZShjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDEp
OworICAgIHN1YjMyKEltbTMyKFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAqIChp
bnQzMl90KXNpemVvZihSZWdpc3RlcikpLCByZWdUMSk7CisKKyAgICAvLyBDYWxjdWxhdGUgc3Rh
cnQgb2YgYXJndW1lbnRzIGFzIGNhbGxmcmFtZSBoZWFkZXIgLSBzaXplb2YoUmVnaXN0ZXIpICog
YXJnY291bnQgKHJlZ1QxKQorICAgIG11bDMyKEltbTMyKHNpemVvZihSZWdpc3RlcikpLCByZWdU
MCwgcmVnVDApOworICAgIHN1YlB0cihyZWdUMCwgcmVnVDEpOworCisgICAgLy8gcHVzaCBwb2lu
dGVyIHRvIGFyZ3VtZW50cyB0byAyNCArIG9mZnNldCgkc3ApCisgICAgc3RvcmVQdHIocmVnVDEs
IEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIDI0ICsgT0JKRUNUX09GRlNFVE9GKEFyZ0xp
c3QsIG1fYXJncykpKTsKKworICAgIC8vIFNldHVwIGFyZzM6IHJlZ1QxIGN1cnJlbnRseSBwb2lu
dHMgdG8gdGhlIGZpcnN0IGFyZ3VtZW50LCByZWdUMS1zaXplb2YoUmVnaXN0ZXIpIHBvaW50cyB0
byAndGhpcycKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIC0oaW50MzJfdClzaXplb2YoUmVn
aXN0ZXIpKSwgTUlQU1JlZ2lzdGVyczo6YTMpOworCisgICAgLy8gU2V0dXAgYXJnMjoKKyAgICBl
bWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihSZWdpc3RlckZpbGU6OkNhbGxlZSwgTUlQU1Jl
Z2lzdGVyczo6YTIpOworCisgICAgLy8gU2V0dXAgYXJnMToKKyAgICBtb3ZlKGNhbGxGcmFtZVJl
Z2lzdGVyLCBNSVBTUmVnaXN0ZXJzOjphMSk7CisKKyAgICAvLyBTZXR1cCBhcmc0OiBBcmdMaXN0
IGlzIHBhc3NlZCBieSByZWZlcmVuY2UuICBBdCAxNigkc3ApLCBzdG9yZSAoJHNwICsgMjQpCisg
ICAgYWRkUHRyKEltbTMyKDI0KSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QyKTsKKyAgICBz
dG9yZVB0cihyZWdUMiwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgMTYpKTsKKworICAg
IC8vIFNldHVwIGFyZzAgYXMgMjAoJHNwKSB0byBob2xkIHRoZSByZXR1cm5lZCBzdHJ1Y3R1cmUu
CisgICAgQVNTRVJUKHNpemVvZihKU1ZhbHVlKSA9PSA0KTsKKyAgICBhZGRQdHIoSW1tMzIoMjAp
LCBzdGFja1BvaW50ZXJSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6YTApOworCisgICAgLy8gQ2Fs
bAorICAgIGNhbGwoQWRkcmVzcyhNSVBTUmVnaXN0ZXJzOjphMiwgT0JKRUNUX09GRlNFVE9GKEpT
RnVuY3Rpb24sIG1fZGF0YSkpKTsKKworICAgIC8vIEdldCByZXR1cm5lZCB2YWx1ZSBmcm9tIDAo
JHYwKSB3aGljaCBpcyB0aGUgc2FtZSBhcyAyMCgkc3ApCisgICAgbG9hZFB0cihBZGRyZXNzKHJl
dHVyblZhbHVlUmVnaXN0ZXIsIDApLCByZXR1cm5WYWx1ZVJlZ2lzdGVyKTsKKworICAgIC8vIFJl
c3RvcmUgc3RhY2sgc3BhY2UKKyAgICBhZGRQdHIoSW1tMzIoc2l6ZW9mKEFyZ0xpc3QpICsgMjQp
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKICNlbGlmIEVOQUJMRShKSVRfT1BUSU1JWkVfTkFU
SVZFX0NBTEwpCiAjZXJyb3IgIkpJVF9PUFRJTUlaRV9OQVRJVkVfQ0FMTCBub3QgeWV0IHN1cHBv
cnRlZCBvbiB0aGlzIHBsYXRmb3JtLiIKICNlbHNlCkluZGV4OiBqaXQvSklUU3R1YnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDUwNjEwKQorKysgaml0L0pJ
VFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYxLDYgKzU2MSwxMDAgQEAKICAgICAibW92
IHBjLCBsciIgIlxuIgogKTsKIAorI2VsaWYgUExBVEZPUk0oTUlQUykKKworI2lmIFVTRShKSVRf
U1RVQl9BUkdVTUVOVF9WQV9MSVNUKQorI2Vycm9yICJKSVRfU1RVQl9BUkdVTUVOVF9WQV9MSVNU
IG5vdCBzdXBwb3J0ZWQgb24gTUlQUy4iCisjZW5kaWYKKworYXNtIHZvbGF0aWxlICgKKyIudGV4
dCIgIlxuIgorIi5hbGlnbiAyIiAiXG4iCisiLnNldCBub3Jlb3JkZXIiICJcbiIKKyIuc2V0IG5v
bWFjcm8iICJcbiIKKyIuc2V0IG5vbWlwczE2IiAiXG4iCisiLmdsb2JsICIgU1lNQk9MX1NUUklO
RyhjdGlUcmFtcG9saW5lKSAiXG4iCisiLmVudCAiIFNZTUJPTF9TVFJJTkcoY3RpVHJhbXBvbGlu
ZSkgIlxuIgorU1lNQk9MX1NUUklORyhjdGlUcmFtcG9saW5lKSAiOiIgIlxuIgorICAgICJhZGRp
dSAkMjksJDI5LC03MiIgIlxuIgorICAgICJzdyAgICAkMzEsNDQoJDI5KSIgIlxuIgorICAgICJz
dyAgICAkMTgsNDAoJDI5KSIgIlxuIgorICAgICJzdyAgICAkMTcsMzYoJDI5KSIgIlxuIgorICAg
ICJzdyAgICAkMTYsMzIoJDI5KSIgIlxuIgorI2lmIGRlZmluZWQoX19QSUNfXykKKyAgICAic3cg
ICAgJDI4LDI4KCQyOSkiICJcbiIKKyNlbmRpZgorICAgICJtb3ZlICAkMTYsJDYgICAgICAgIyBz
ZXQgY2FsbEZyYW1lUmVnaXN0ZXIiICJcbiIKKyAgICAibGkgICAgJDE3LDUxMiAgICAgICMgc2V0
IHRpbWVvdXRDaGVja1JlZ2lzdGVyIiAiXG4iCisgICAgIm1vdmUgICQyNSwkNCAgICAgICAjIG1v
dmUgZXhlY3V0YWJsZUFkZHJlc3MgdG8gdDkiICJcbiIKKyAgICAic3cgICAgJDUsNTIoJDI5KSAg
ICMgc3RvcmUgcmVnaXN0ZXJGaWxlIHRvIGN1cnJlbnQgc3RhY2siICJcbiIKKyAgICAic3cgICAg
JDYsNTYoJDI5KSAgICMgc3RvcmUgY2FsbEZyYW1lIHRvIGN1cmVudCBzdGFjayIgIlxuIgorICAg
ICJzdyAgICAkNyw2MCgkMjkpICAgIyBzdG9yZSBleGNlcHRpb24gdG8gY3VycmVudCBzdGFjayIg
IlxuIgorICAgICJsdyAgICAkOCw4OCgkMjkpICAgIyBsb2FkIGVuYWJsZVByb2ZpbGVyUmVmZXJl
bmNlIGZyb20gcHJldmlvdXMgc3RhY2siICJcbiIKKyAgICAibHcgICAgJDksOTIoJDI5KSAgICMg
bG9hZCBnbG9iYWxEYXRhIGZyb20gcHJldmlvdXMgc3RhY2siICJcbiIKKyAgICAic3cgICAgJDgs
NjQoJDI5KSAgICMgc3RvcmUgZW5hYmxlUHJvZmlsZXJSZWZlcmVuY2UgdG8gY3VycmVudCBzdGFj
ayIgIlxuIgorICAgICJqYWxyICAkMjUiICJcbiIKKyAgICAic3cgICAgJDksNjgoJDI5KSAgICMg
c3RvcmUgZ2xvYmFsRGF0YSB0byBjdXJyZW50IHN0YWNrIiAiXG4iCisgICAgImx3ICAgICQxNiwz
MigkMjkpIiAiXG4iCisgICAgImx3ICAgICQxNywzNigkMjkpIiAiXG4iCisgICAgImx3ICAgICQx
OCw0MCgkMjkpIiAiXG4iCisgICAgImx3ICAgICQzMSw0NCgkMjkpIiAiXG4iCisgICAgImpyICAg
ICQzMSIgIlxuIgorICAgICJhZGRpdSAkMjksJDI5LDcyIiAiXG4iCisiLnNldCByZW9yZGVyIiAi
XG4iCisiLnNldCBtYWNybyIgIlxuIgorIi5lbmQgIiBTWU1CT0xfU1RSSU5HKGN0aVRyYW1wb2xp
bmUpICJcbiIKKyk7CisKK2FzbSB2b2xhdGlsZSAoCisiLnRleHQiICJcbiIKKyIuYWxpZ24gMiIg
IlxuIgorIi5zZXQgbm9yZW9yZGVyIiAiXG4iCisiLnNldCBub21hY3JvIiAiXG4iCisiLnNldCBu
b21pcHMxNiIgIlxuIgorIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoY3RpVk1UaHJvd1RyYW1wb2xp
bmUpICJcbiIKKyIuZW50ICIgU1lNQk9MX1NUUklORyhjdGlWTVRocm93VHJhbXBvbGluZSkgIlxu
IgorU1lNQk9MX1NUUklORyhjdGlWTVRocm93VHJhbXBvbGluZSkgIjoiICJcbiIKKyNpZiBkZWZp
bmVkKF9fUElDX18pCisgICAgImx3ICAgICQyOCwyOCgkMjkpIiAiXG4iCisiLnNldCBtYWNybyIg
IlxuIgorI2VuZGlmCisgICAgImphbCAiIFNZTUJPTF9TVFJJTkcoY3RpX3ZtX3Rocm93KSAiXG4i
CisgICAgIm1vdmUgICQ0LCAkMjkiICJcbiIKKyNpZiBkZWZpbmVkKF9fUElDX18pCisiLnNldCBu
b21hY3JvIiAiXG4iCisjZW5kaWYKKyAgICAibHcgICAgJDE2LDMyKCQyOSkiICJcbiIKKyAgICAi
bHcgICAgJDE3LDM2KCQyOSkiICJcbiIKKyAgICAibHcgICAgJDE4LDQwKCQyOSkiICJcbiIKKyAg
ICAibHcgICAgJDMxLDQ0KCQyOSkiICJcbiIKKyAgICAianIgICAgJDMxIiAiXG4iCisgICAgImFk
ZGl1ICQyOSwkMjksNzIiICJcbiIKKyIuc2V0IHJlb3JkZXIiICJcbiIKKyIuc2V0IG1hY3JvIiAi
XG4iCisiLmVuZCAiIFNZTUJPTF9TVFJJTkcoY3RpVk1UaHJvd1RyYW1wb2xpbmUpICJcbiIKKyk7
CisKK2FzbSB2b2xhdGlsZSAoCisiLnRleHQiICJcbiIKKyIuYWxpZ24gMiIgIlxuIgorIi5zZXQg
bm9yZW9yZGVyIiAiXG4iCisiLnNldCBub21hY3JvIiAiXG4iCisiLnNldCBub21pcHMxNiIgIlxu
IgorIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoY3RpT3BUaHJvd05vdENhdWdodCkgIlxuIgorIi5l
bnQgIiBTWU1CT0xfU1RSSU5HKGN0aU9wVGhyb3dOb3RDYXVnaHQpICJcbiIKK1NZTUJPTF9TVFJJ
TkcoY3RpT3BUaHJvd05vdENhdWdodCkgIjoiICJcbiIKKyAgICAibHcgICAgJDE2LDMyKCQyOSki
ICJcbiIKKyAgICAibHcgICAgJDE3LDM2KCQyOSkiICJcbiIKKyAgICAibHcgICAgJDE4LDQwKCQy
OSkiICJcbiIKKyAgICAibHcgICAgJDMxLDQ0KCQyOSkiICJcbiIKKyAgICAianIgICAgJDMxIiAi
XG4iCisgICAgImFkZGl1ICQyOSwkMjksNzIiICJcbiIKKyIuc2V0IHJlb3JkZXIiICJcbiIKKyIu
c2V0IG1hY3JvIiAiXG4iCisiLmVuZCAiIFNZTUJPTF9TVFJJTkcoY3RpT3BUaHJvd05vdENhdWdo
dCkgIlxuIgorKTsKKwogI2VsaWYgQ09NUElMRVIoTVNWQykKIAogI2lmIFVTRShKSVRfU1RVQl9B
UkdVTUVOVF9WQV9MSVNUKQpAQCAtNjU1LDYgKzc0OSwyMSBAQAogCiAgICAgQVNTRVJUKE9CSkVD
VF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgdGh1bmtSZXR1cm5BZGRyZXNzKSA9PSAw
eDFDKTsKICNlbmRpZgorCisjaWYgUExBVEZPUk0oTUlQUykKKyAgICBBU1NFUlQoT0JKRUNUX09G
RlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBwcmVzZXJ2ZWRHUCkgPT0gMjgpOworICAgIEFT
U0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIHByZXNlcnZlZFMwKSA9
PSAzMik7CisgICAgQVNTRVJUKE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwg
cHJlc2VydmVkUzEpID09IDM2KTsKKyAgICBBU1NFUlQoT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBK
SVRTdGFja0ZyYW1lLCBwcmVzZXJ2ZWRTMikgPT0gNDApOworICAgIEFTU0VSVChPQkpFQ1RfT0ZG
U0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIHByZXNlcnZlZFJldHVybkFkZHJlc3MpID09IDQ0
KTsKKyAgICBBU1NFUlQoT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCB0aHVu
a1JldHVybkFkZHJlc3MpID09IDQ4KTsKKyAgICBBU1NFUlQoT0JKRUNUX09GRlNFVE9GKHN0cnVj
dCBKSVRTdGFja0ZyYW1lLCByZWdpc3RlckZpbGUpID09IDUyKTsKKyAgICBBU1NFUlQoT0JKRUNU
X09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBjYWxsRnJhbWUpID09IDU2KTsKKyAgICBB
U1NFUlQoT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBleGNlcHRpb24pID09
IDYwKTsKKyAgICBBU1NFUlQoT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBl
bmFibGVkUHJvZmlsZXJSZWZlcmVuY2UpID09IDY0KTsKKyAgICBBU1NFUlQoT0JKRUNUX09GRlNF
VE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBnbG9iYWxEYXRhKSA9PSA2OCk7CisKKyNlbmRpZgog
fQogCiAjaWYgRU5BQkxFKEpJVF9PUFRJTUlaRV9QUk9QRVJUWV9BQ0NFU1MpCkBAIC05MDMsNiAr
MTAxMiw2MCBAQAogICAgICAgICApOyBcCiAgICAgcnR5cGUgSklUU3R1YlRodW5rZWRfIyNvcChT
VFVCX0FSR1NfREVDTEFSQVRJT04pIFwKIAorI2VsaWYgUExBVEZPUk0oTUlQUykKKyNpZiAhZGVm
aW5lZChfX1BJQ19fKQorI2RlZmluZSBERUZJTkVfU1RVQl9GVU5DVElPTihydHlwZSwgb3ApIFwK
KyAgICBleHRlcm4gIkMiIHsgXAorICAgICAgICBydHlwZSBKSVRTdHViVGh1bmtlZF8jI29wKFNU
VUJfQVJHU19ERUNMQVJBVElPTik7IFwKKyAgICB9OyBcCisgICAgYXNtIHZvbGF0aWxlICggXAor
ICAgICAgICAiLnRleHQiICJcbiIgXAorICAgICAgICAiLmFsaWduIDIiICJcbiIgXAorICAgICAg
ICAiLnNldCBub3Jlb3JkZXIiICJcbiIgXAorICAgICAgICAiLnNldCBub21hY3JvIiAiXG4iIFwK
KyAgICAgICAgIi5zZXQgbm9taXBzMTYiICJcbiIgXAorICAgICAgICAiLmdsb2JsICIgU1lNQk9M
X1NUUklORyhjdGlfIyNvcCkgIlxuIiBcCisgICAgICAgICIuZW50ICIgU1lNQk9MX1NUUklORyhj
dGlfIyNvcCkgIlxuIiBcCisgICAgICAgIFNZTUJPTF9TVFJJTkcoY3RpXyMjb3ApICI6IiAiXG4i
IFwKKyAgICAgICAgInN3ICAgICQzMSwgNDgoJDI5KSIgIlxuIiBcCisgICAgICAgICJqYWwgIiBT
WU1CT0xfU1RSSU5HKEpJVFN0dWJUaHVua2VkXyMjb3ApICJcbiIgXAorICAgICAgICAibm9wIiAi
XG4iIFwKKyAgICAgICAgImx3ICAgICQzMSwgNDgoJDI5KSIgIlxuIiBcCisgICAgICAgICJqciAg
ICAkMzEiICJcbiIgXAorICAgICAgICAibm9wIiAiXG4iIFwKKyAgICAgICAgIi5zZXQgcmVvcmRl
ciIgIlxuIiBcCisgICAgICAgICIuc2V0IG1hY3JvIiAiXG4iIFwKKyAgICAgICAgIi5lbmQgIiBT
WU1CT0xfU1RSSU5HKGN0aV8jI29wKSAiXG4iIFwKKyAgICAgICAgKTsgXAorICAgIHJ0eXBlIEpJ
VFN0dWJUaHVua2VkXyMjb3AoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKQorCisjZWxzZSAvLyBfX1BJ
Q19fCisjZGVmaW5lIERFRklORV9TVFVCX0ZVTkNUSU9OKHJ0eXBlLCBvcCkgXAorICAgIGV4dGVy
biAiQyIgeyBcCisgICAgICAgIHJ0eXBlIEpJVFN0dWJUaHVua2VkXyMjb3AoU1RVQl9BUkdTX0RF
Q0xBUkFUSU9OKTsgXAorICAgIH07IFwKKyAgICBhc20gdm9sYXRpbGUgKCBcCisgICAgICAgICIu
dGV4dCIgIlxuIiBcCisgICAgICAgICIuYWxpZ24gMiIgIlxuIiBcCisgICAgICAgICIuc2V0IG5v
cmVvcmRlciIgIlxuIiBcCisgICAgICAgICIuc2V0IG5vbWlwczE2IiAiXG4iIFwKKyAgICAgICAg
Ii5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoY3RpXyMjb3ApICJcbiIgXAorICAgICAgICAiLmVudCAi
IFNZTUJPTF9TVFJJTkcoY3RpXyMjb3ApICJcbiIgXAorICAgICAgICBTWU1CT0xfU1RSSU5HKGN0
aV8jI29wKSAiOiIgIlxuIiBcCisgICAgICAgICJsdyAgICAkMjgsIDI4KCQyOSkiICJcbiIgXAor
ICAgICAgICAic3cgICAgJDMxLCA0OCgkMjkpIiAiXG4iIFwKKyAgICAgICAgImphbCAiIFNZTUJP
TF9TVFJJTkcoSklUU3R1YlRodW5rZWRfIyNvcCkgIlxuIiBcCisgICAgICAgICJub3AiICJcbiIg
XAorICAgICAgICAibHcgICAgJDMxLCA0OCgkMjkpIiAiXG4iIFwKKyAgICAgICAgImpyICAgICQz
MSIgIlxuIiBcCisgICAgICAgICJub3AiICJcbiIgXAorICAgICAgICAiLnNldCByZW9yZGVyIiAi
XG4iIFwKKyAgICAgICAgIi5lbmQgIiBTWU1CT0xfU1RSSU5HKGN0aV8jI29wKSAiXG4iIFwKKyAg
ICAgICAgKTsgXAorICAgIHJ0eXBlIEpJVFN0dWJUaHVua2VkXyMjb3AoU1RVQl9BUkdTX0RFQ0xB
UkFUSU9OKQorCisjZW5kaWYKKwogI2VsaWYgUExBVEZPUk0oQVJNX1RSQURJVElPTkFMKSAmJiBD
T01QSUxFUihHQ0MpCiAKICNkZWZpbmUgREVGSU5FX1NUVUJfRlVOQ1RJT04ocnR5cGUsIG9wKSBc
CkluZGV4OiBqaXQvSklUU3R1YnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBqaXQvSklUU3R1YnMuaAkocmV2
aXNpb24gNTA2MTApCisrKyBqaXQvSklUU3R1YnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTgzLDYg
KzE4MywzMCBAQAogICAgICAgICAvLyBXaGVuIEpJVCBjb2RlIG1ha2VzIGEgY2FsbCwgaXQgcHVz
aGVzIGl0cyByZXR1cm4gYWRkcmVzcyBqdXN0IGJlbG93IHRoZSByZXN0IG9mIHRoZSBzdGFjay4K
ICAgICAgICAgUmV0dXJuQWRkcmVzc1B0ciogcmV0dXJuQWRkcmVzc1Nsb3QoKSB7IHJldHVybiAm
dGh1bmtSZXR1cm5BZGRyZXNzOyB9CiAgICAgfTsKKyNlbGlmIFBMQVRGT1JNKE1JUFMpCisgICAg
c3RydWN0IEpJVFN0YWNrRnJhbWUgeworICAgICAgICB2b2lkKiByZXNlcnZlZDsgLy8gVW51c2Vk
CisgICAgICAgIEpJVFN0dWJBcmcgYXJnc1s2XTsKKworICAgICAgICB2b2lkKiBwcmVzZXJ2ZWRH
UDsgLy8gc3RvcmUgR1Agd2hlbiB1c2luZyBQSUMgY29kZQorICAgICAgICB2b2lkKiBwcmVzZXJ2
ZWRTMDsKKyAgICAgICAgdm9pZCogcHJlc2VydmVkUzE7CisgICAgICAgIHZvaWQqIHByZXNlcnZl
ZFMyOworICAgICAgICB2b2lkKiBwcmVzZXJ2ZWRSZXR1cm5BZGRyZXNzOworCisgICAgICAgIFJl
dHVybkFkZHJlc3NQdHIgdGh1bmtSZXR1cm5BZGRyZXNzOworCisgICAgICAgIC8vIFRoZXNlIGFy
Z3VtZW50cyBwYXNzZWQgaW4gYTEuLmEzIChhMCBjb250YWluZWQgdGhlIGVudHJ5IGNvZGUgcG9p
bnRlZCwgd2hpY2ggaXMgbm90IHByZXNlcnZlZCkKKyAgICAgICAgUmVnaXN0ZXJGaWxlKiByZWdp
c3RlckZpbGU7CisgICAgICAgIENhbGxGcmFtZSogY2FsbEZyYW1lOworICAgICAgICBKU1ZhbHVl
KiBleGNlcHRpb247CisKKyAgICAgICAgLy8gVGhlc2UgYXJndW1lbnRzIHBhc3NlZCBvbiB0aGUg
c3RhY2suCisgICAgICAgIFByb2ZpbGVyKiogZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlOworICAg
ICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGE7CisKKyAgICAgICAgUmV0dXJuQWRkcmVzc1B0
ciogcmV0dXJuQWRkcmVzc1Nsb3QoKSB7IHJldHVybiAmdGh1bmtSZXR1cm5BZGRyZXNzOyB9Cisg
ICAgfTsKICNlbHNlCiAjZXJyb3IgIkpJVFN0YWNrRnJhbWUgbm90IGRlZmluZWQgZm9yIHRoaXMg
cGxhdGZvcm0uIgogI2VuZGlmCkluZGV4OiBqaXQvSklUSW5saW5lTWV0aG9kcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGppdC9KSVRJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDUwNjEwKQorKysgaml0L0pJ
VElubGluZU1ldGhvZHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTYxLDYgKzE2MSwyMyBAQAogICAg
IGxvYWRQdHIoYWRkcmVzcywgbGlua1JlZ2lzdGVyKTsKIH0KIAorI2VsaWYgUExBVEZPUk0oTUlQ
UykKKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJD
YWxsKFJlZ2lzdGVySUQgcmVnKQoreworICAgIG1vdmUocmV0dXJuQWRkcmVzc1JlZ2lzdGVyLCBy
ZWcpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpyZXN0b3JlUmV0dXJuQWRkcmVzc0Jl
Zm9yZVJldHVybihSZWdpc3RlcklEIHJlZykKK3sKKyAgICBtb3ZlKHJlZywgcmV0dXJuQWRkcmVz
c1JlZ2lzdGVyKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cmVzdG9yZVJldHVybkFk
ZHJlc3NCZWZvcmVSZXR1cm4oQWRkcmVzcyBhZGRyZXNzKQoreworICAgIGxvYWRQdHIoYWRkcmVz
cywgcmV0dXJuQWRkcmVzc1JlZ2lzdGVyKTsKK30KKwogI2Vsc2UgLy8gUExBVEZPUk0oWDg2KSB8
fCBQTEFURk9STShYODZfNjQpCiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnByZXNlcnZlUmV0
dXJuQWRkcmVzc0FmdGVyQ2FsbChSZWdpc3RlcklEIHJlZykKSW5kZXg6IGppdC9FeGVjdXRhYmxl
QWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAkocmV2
aXNpb24gNTA2MTApCisrKyBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Miw2ICs0MiwxMCBAQAogI2luY2x1ZGUgPGUzMnN0ZC5oPgogI2VuZGlmCiAKKyNpZiBQ
TEFURk9STShNSVBTKSAmJiBQTEFURk9STShMSU5VWCkKKyNpbmNsdWRlIDxzeXMvY2FjaGVjdGwu
aD4KKyNlbmRpZgorCiAjZGVmaW5lIEpJVF9BTExPQ0FUT1JfUEFHRV9TSVpFIChFeGVjdXRhYmxl
QWxsb2NhdG9yOjpwYWdlU2l6ZSkKICNkZWZpbmUgSklUX0FMTE9DQVRPUl9MQVJHRV9BTExPQ19T
SVpFIChFeGVjdXRhYmxlQWxsb2NhdG9yOjpwYWdlU2l6ZSAqIDQpCiAKQEAgLTE4Myw2ICsxODcs
MzIgQEAKICAgICBzdGF0aWMgdm9pZCBjYWNoZUZsdXNoKHZvaWQqLCBzaXplX3QpCiAgICAgewog
ICAgIH0KKyNlbGlmIFBMQVRGT1JNKE1JUFMpCisgICAgc3RhdGljIHZvaWQgY2FjaGVGbHVzaCh2
b2lkKiBjb2RlLCBzaXplX3Qgc2l6ZSkKKyAgICB7CisjaWYgQ09NUElMRVIoR0NDKSAmJiAoR0ND
X1ZFUlNJT04gPj0gNDAzMDApCisjaWYgX19taXBzX2lzYV9yZXYgPT0gMiAmJiAoR0NDX1ZFUlNJ
T04gPCA0MDUwMCkKKyAgICAgICAgaW50IGxpbmVfc2l6ZTsKKyAgICAgICAgYXNtICgicmRod3Ig
JTAsICQxIiA6ICI9ciIgKGxpbmVfc2l6ZSkpOworICAgICAgICAvLworICAgICAgICAvLyBNb2Rp
ZnkgInN0YXJ0IiBhbmQgImVuZCIgdG8gYXZvaWQgR0NDIDQuMyBidWcgaW4KKyAgICAgICAgLy8g
bWlwc19leHBhbmRfc3luY2lfbG9vcCB0aGF0IG1heSBleGVjdXRlIHN5bmNpIG9uZSBtb3JlIHRp
bWUuCisgICAgICAgIC8vICJzdGFydCIgcG9pbnRzIHRvIHRoZSBmaXNydCBieXRlIG9mIHRoZSBj
YWNoZSBsaW5lLgorICAgICAgICAvLyAiZW5kIiBwb2ludHMgdG8gdGhlIGxhc3QgYnl0ZSBvZiB0
aGUgbGluZSBiZWZvcmUgdGhlIGxhc3QgY2FjaGUgbGluZS4KKyAgICAgICAgLy8gQmVjYXVzZSBz
aXplIGlzIGFsd2F5cyBhIG11bHRpcGxlIG9mIDQsIHRoaXMgaXMgc2FmZSB0byBzZXQKKyAgICAg
ICAgLy8gImVuZCIgdG8gdGhlIGxhc3QgYnl0ZS4KKyAgICAgICAgLy8KKyAgICAgICAgaW50cHRy
X3Qgc3RhcnQgPSByZWludGVycHJldF9jYXN0PGludHB0cl90Pihjb2RlKSAmICgtbGluZV9zaXpl
KTsKKyAgICAgICAgaW50cHRyX3QgZW5kID0gKChyZWludGVycHJldF9jYXN0PGludHB0cl90Pihj
b2RlKSArIHNpemUpICYgKC1saW5lX3NpemUpKSAtIDE7CisgICAgICAgIF9fY2xlYXJfY2FjaGUo
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc3RhcnQpLCByZWludGVycHJldF9jYXN0PGNoYXIqPihl
bmQpKTsKKyNlbHNlCisgICAgICAgIGludHB0cl90IGVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50
cHRyX3Q+KGNvZGUpICsgc2l6ZTsKKyAgICAgICAgX19jbGVhcl9jYWNoZShyZWludGVycHJldF9j
YXN0PGNoYXIqPihjb2RlKSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZW5kKSk7CisjZW5kaWYK
KyNlbHNlCisgICAgICAgIF9mbHVzaF9jYWNoZShyZWludGVycHJldF9jYXN0PGNoYXIqPihjb2Rl
KSwgc2l6ZSwgQkNBQ0hFKTsKKyNlbmRpZgorICAgIH0KICNlbGlmIFBMQVRGT1JNKEFSTV9USFVN
QjIpICYmIFBMQVRGT1JNKElQSE9ORSkKICAgICBzdGF0aWMgdm9pZCBjYWNoZUZsdXNoKHZvaWQq
IGNvZGUsIHNpemVfdCBzaXplKQogICAgIHsKSW5kZXg6IGppdC9KSVQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBqaXQvSklULmgJKHJldmlzaW9uIDUwNjEwKQorKysgaml0L0pJVC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNjgsNiArMjY4LDI4IEBACiAgICAgICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQg
ZnBSZWdUMCA9IEFSTVJlZ2lzdGVyczo6ZDA7CiAgICAgICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lz
dGVySUQgZnBSZWdUMSA9IEFSTVJlZ2lzdGVyczo6ZDE7CiAgICAgICAgIHN0YXRpYyBjb25zdCBG
UFJlZ2lzdGVySUQgZnBSZWdUMiA9IEFSTVJlZ2lzdGVyczo6ZDI7CisjZWxpZiBQTEFURk9STShN
SVBTKQorICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZXR1cm5WYWx1ZVJlZ2lzdGVy
ID0gTUlQU1JlZ2lzdGVyczo6djA7CisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGNh
Y2hlZFJlc3VsdFJlZ2lzdGVyID0gTUlQU1JlZ2lzdGVyczo6djA7CisgICAgICAgIHN0YXRpYyBj
b25zdCBSZWdpc3RlcklEIGZpcnN0QXJndW1lbnRSZWdpc3RlciA9IE1JUFNSZWdpc3RlcnM6OmEw
OworCisgICAgICAgIC8vIHJlZ1QwIG11c3QgYmUgdjAgZm9yIHJldHVybmluZyBhIDMyLWJpdCB2
YWx1ZS4KKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnVDAgPSBNSVBTUmVnaXN0
ZXJzOjp2MDsKKworICAgICAgICAvLyByZWdUMSBtdXN0IGJlIHYxIGZvciByZXR1cm5pbmcgYSBw
YWlyIG9mIDMyLWJpdCB2YWx1ZS4KKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmVn
VDEgPSBNSVBTUmVnaXN0ZXJzOjp2MTsKKworICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJ
RCByZWdUMiA9IE1JUFNSZWdpc3RlcnM6OnQ0OworCisgICAgICAgIC8vIHJlZ1QzIG11c3QgYmUg
c2F2ZWQgaW4gdGhlIGNhbGxlZSwgc28gdXNlIGFuIFMgcmVnaXN0ZXIuCisgICAgICAgIHN0YXRp
YyBjb25zdCBSZWdpc3RlcklEIHJlZ1QzID0gTUlQU1JlZ2lzdGVyczo6czI7CisKKyAgICAgICAg
c3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgY2FsbEZyYW1lUmVnaXN0ZXIgPSBNSVBTUmVnaXN0ZXJz
OjpzMDsKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgdGltZW91dENoZWNrUmVnaXN0
ZXIgPSBNSVBTUmVnaXN0ZXJzOjpzMTsKKworICAgICAgICBzdGF0aWMgY29uc3QgRlBSZWdpc3Rl
cklEIGZwUmVnVDAgPSBNSVBTUmVnaXN0ZXJzOjpmNDsKKyAgICAgICAgc3RhdGljIGNvbnN0IEZQ
UmVnaXN0ZXJJRCBmcFJlZ1QxID0gTUlQU1JlZ2lzdGVyczo6ZjY7CisgICAgICAgIHN0YXRpYyBj
b25zdCBGUFJlZ2lzdGVySUQgZnBSZWdUMiA9IE1JUFNSZWdpc3RlcnM6OmY4OwogI2Vsc2UKICAg
ICAjZXJyb3IgIkpJVCBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0uIgogI2VuZGlmCkBA
IC02MjksNyArNjUxLDUwIEBACiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRN
ZXRob2RDaGVja1Byb3RvT2JqID0gMTI7CiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hP
ZmZzZXRNZXRob2RDaGVja1Byb3RvU3RydWN0ID0gMjA7CiAgICAgICAgIHN0YXRpYyBjb25zdCBp
bnQgcGF0Y2hPZmZzZXRNZXRob2RDaGVja1B1dEZ1bmN0aW9uID0gMzI7CisjZWxpZiBQTEFURk9S
TShNSVBTKQorI2lmIF9fbWlwcyA9PSAxCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hP
ZmZzZXRQdXRCeUlkU3RydWN0dXJlID0gMTY7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0
Y2hPZmZzZXRQdXRCeUlkRXh0ZXJuYWxMb2FkID0gNDg7CisgICAgICAgIHN0YXRpYyBjb25zdCBp
bnQgcGF0Y2hMZW5ndGhQdXRCeUlkRXh0ZXJuYWxMb2FkID0gMjA7CisgICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgcGF0Y2hPZmZzZXRQdXRCeUlkUHJvcGVydHlNYXBPZmZzZXQgPSA2ODsKKyAgICAg
ICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRTdHJ1Y3R1cmUgPSAxNjsKKyAg
ICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNl
ID0gNDg7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkRXh0ZXJu
YWxMb2FkID0gNDg7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hMZW5ndGhHZXRCeUlk
RXh0ZXJuYWxMb2FkID0gMjA7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRH
ZXRCeUlkUHJvcGVydHlNYXBPZmZzZXQgPSA2ODsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBw
YXRjaE9mZnNldEdldEJ5SWRQdXRSZXN1bHQgPSA4ODsKKyNpZiBFTkFCTEUoT1BDT0RFX1NBTVBM
SU5HKQorICAgICAgICAjZXJyb3IgIk9QQ09ERV9TQU1QTElORyBpcyBub3QgeWV0IHN1cHBvcnRl
ZCIKKyNlbHNlCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkU2xv
d0Nhc2VDYWxsID0gNDA7CiAjZW5kaWYKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9m
ZnNldE9wQ2FsbENvbXBhcmVUb0p1bXAgPSAzMjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBw
YXRjaE9mZnNldE1ldGhvZENoZWNrUHJvdG9PYmogPSAzMjsKKyAgICAgICAgc3RhdGljIGNvbnN0
IGludCBwYXRjaE9mZnNldE1ldGhvZENoZWNrUHJvdG9TdHJ1Y3QgPSA1NjsKKyAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhvZENoZWNrUHV0RnVuY3Rpb24gPSA4ODsKKwor
I2Vsc2UgLy8gX19taXBzID09IDEKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNl
dFB1dEJ5SWRTdHJ1Y3R1cmUgPSAxMjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9m
ZnNldFB1dEJ5SWRFeHRlcm5hbExvYWQgPSA0NDsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBw
YXRjaExlbmd0aFB1dEJ5SWRFeHRlcm5hbExvYWQgPSAxNjsKKyAgICAgICAgc3RhdGljIGNvbnN0
IGludCBwYXRjaE9mZnNldFB1dEJ5SWRQcm9wZXJ0eU1hcE9mZnNldCA9IDYwOworICAgICAgICBz
dGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZFN0cnVjdHVyZSA9IDEyOworICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2UgPSA0
NDsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRFeHRlcm5hbExv
YWQgPSA0NDsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaExlbmd0aEdldEJ5SWRFeHRl
cm5hbExvYWQgPSAxNjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5
SWRQcm9wZXJ0eU1hcE9mZnNldCA9IDYwOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNo
T2Zmc2V0R2V0QnlJZFB1dFJlc3VsdCA9IDc2OworI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcp
CisgICAgICAgICNlcnJvciAiT1BDT0RFX1NBTVBMSU5HIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIgor
I2Vsc2UKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRTbG93Q2Fz
ZUNhbGwgPSA0MDsKKyNlbmRpZgorICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0
T3BDYWxsQ29tcGFyZVRvSnVtcCA9IDMyOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNo
T2Zmc2V0TWV0aG9kQ2hlY2tQcm90b09iaiA9IDMyOworICAgICAgICBzdGF0aWMgY29uc3QgaW50
IHBhdGNoT2Zmc2V0TWV0aG9kQ2hlY2tQcm90b1N0cnVjdCA9IDUyOworICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IHBhdGNoT2Zmc2V0TWV0aG9kQ2hlY2tQdXRGdW5jdGlvbiA9IDg0OworI2VuZGlm
CisjZW5kaWYKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQogCiAjaWYgUExBVEZPUk0oQVJN
X1RSQURJVElPTkFMKQo=
</data>
<flag name="review"
          id="24910"
          type_id="1"
          status="-"
          setter="barraclough"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44104</attachid>
            <date>2009-12-01 15:01:27 -0800</date>
            <delta_ts>2010-02-01 17:20:39 -0800</delta_ts>
            <desc>MIPS JIT Patch 20091201</desc>
            <filename>mips_jit20091201.diff</filename>
            <type>text/plain</type>
            <size>108749</size>
            <attacher name="Chao-ying Fu">fu</attacher>
            
              <data encoding="base64">SW5kZXg6IHd0Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHd0Zi9QbGF0Zm9ybS5oCShyZXZp
c2lvbiA1MTU1MikKKysrIHd0Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzYsNiAr
MjM2LDE1IEBACiAjZGVmaW5lIFdURl9QTEFURk9STV9CSUdfRU5ESUFOIDEKICNlbmRpZgogCisv
KiBQTEFURk9STShNSVBTKSAqLworLyogTm90ZTogT25seSBPMzIgQUJJIGlzIHRlc3RlZCwgc28g
d2UgZW5hYmxlIGl0IGZvciBPMzIgQUJJIGZvciBub3cuICAqLworI2lmICAgKGRlZmluZWQobWlw
cykgfHwgZGVmaW5lZChfX21pcHNfXykpICYmIGRlZmluZWQoX0FCSU8zMikKKyNkZWZpbmUgV1RG
X1BMQVRGT1JNX01JUFMgMQorI2lmIGRlZmluZWQoX19NSVBTRUJfXykKKyNkZWZpbmUgV1RGX1BM
QVRGT1JNX0JJR19FTkRJQU4gMQorI2VuZGlmCisjZW5kaWYgLyogTUlQUyAqLworCiAvKiBQTEFU
Rk9STShBUk0pICovCiAjZGVmaW5lIFBMQVRGT1JNX0FSTV9BUkNIKE4pIChQTEFURk9STShBUk0p
ICYmIEFSTV9BUkNIX1ZFUlNJT04gPj0gTikKIApAQCAtNzQ4LDcgKzc1Nyw3IEBACiAjaWYgIWRl
ZmluZWQoV1RGX1VTRV9KU1ZBTFVFNjQpICYmICFkZWZpbmVkKFdURl9VU0VfSlNWQUxVRTMyKSAm
JiAhZGVmaW5lZChXVEZfVVNFX0pTVkFMVUUzMl82NCkKICNpZiBQTEFURk9STShYODZfNjQpICYm
IChQTEFURk9STShEQVJXSU4pIHx8IFBMQVRGT1JNKExJTlVYKSB8fCBQTEFURk9STShXSU5fT1Mp
KQogI2RlZmluZSBXVEZfVVNFX0pTVkFMVUU2NCAxCi0jZWxpZiBQTEFURk9STShBUk0pIHx8IFBM
QVRGT1JNKFBQQzY0KQorI2VsaWYgUExBVEZPUk0oQVJNKSB8fCBQTEFURk9STShQUEM2NCkgfHwg
UExBVEZPUk0oTUlQUykKICNkZWZpbmUgV1RGX1VTRV9KU1ZBTFVFMzIgMQogI2VsaWYgUExBVEZP
Uk0oV0lOX09TKSAmJiBDT01QSUxFUihNSU5HVykKIC8qIFVzaW5nIEpTVkFMVUUzMl82NCBjYXVz
ZXMgcGFkZGluZy9hbGlnbmVtZW50IGlzc3VlcyBmb3IgSklUU3R1YkFyZwpAQCAtNzk2LDYgKzgw
NSw5IEBACiAgICAgI2RlZmluZSBXVEZfVVNFX0pJVF9TVFVCX0FSR1VNRU5UX1ZBX0xJU1QgMQog
I2VsaWYgUExBVEZPUk0oQVJNX1RSQURJVElPTkFMKSAmJiBQTEFURk9STShMSU5VWCkKICAgICAj
ZGVmaW5lIEVOQUJMRV9KSVQgMQorI2VsaWYgUExBVEZPUk0oTUlQUykgJiYgUExBVEZPUk0oTElO
VVgpCisgICAgI2RlZmluZSBFTkFCTEVfSklUIDEKKyAgICAjZGVmaW5lIFdURl9VU0VfSklUX1NU
VUJfQVJHVU1FTlRfVkFfTElTVCAwCiAjZW5kaWYKICNlbmRpZiAvKiBQTEFURk9STShRVCkgKi8K
IApAQCAtODUwLDcgKzg2Miw4IEBACiAjaWYgKFBMQVRGT1JNKFg4NikgJiYgUExBVEZPUk0oV0lO
X09TKSAmJiBDT01QSUxFUihNSU5HVykgJiYgR0NDX1ZFUlNJT04gPj0gNDAxMDApIFwKICB8fCAo
UExBVEZPUk0oWDg2KSAmJiBQTEFURk9STShXSU5fT1MpICYmIENPTVBJTEVSKE1TVkMpKSBcCiAg
fHwgKFBMQVRGT1JNKFg4NikgJiYgUExBVEZPUk0oTElOVVgpICYmIEdDQ19WRVJTSU9OID49IDQw
MTAwKSBcCi0gfHwgKFBMQVRGT1JNKEFSTV9UUkFESVRJT05BTCkgJiYgUExBVEZPUk0oTElOVVgp
KQorIHx8IChQTEFURk9STShBUk1fVFJBRElUSU9OQUwpICYmIFBMQVRGT1JNKExJTlVYKSkgXAor
IHx8IChQTEFURk9STShNSVBTKSAmJiBQTEFURk9STShMSU5VWCkpCiAjZGVmaW5lIEVOQUJMRV9Z
QVJSIDEKICNkZWZpbmUgRU5BQkxFX1lBUlJfSklUIDEKICNlbmRpZgpJbmRleDogeWFyci9SZWdl
eEpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0geWFyci9SZWdleEpJVC5jcHAJKHJldmlzaW9uIDUxNTUy
KQorKysgeWFyci9SZWdleEpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDE2IEBA
CiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnVDEgPSBBUk1SZWdpc3RlcnM6OnI2Owog
CiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmV0dXJuUmVnaXN0ZXIgPSBBUk1SZWdpc3Rl
cnM6OnIwOworI2VsaWYgUExBVEZPUk0oTUlQUykKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJ
RCBpbnB1dCA9IE1JUFNSZWdpc3RlcnM6OmEwOworICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklE
IGluZGV4ID0gTUlQU1JlZ2lzdGVyczo6YTE7CisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQg
bGVuZ3RoID0gTUlQU1JlZ2lzdGVyczo6YTI7CisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQg
b3V0cHV0ID0gTUlQU1JlZ2lzdGVyczo6YTM7CisKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJ
RCByZWdUMCA9IE1JUFNSZWdpc3RlcnM6OnQ0OworICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklE
IHJlZ1QxID0gTUlQU1JlZ2lzdGVyczo6dDU7CisKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJ
RCByZXR1cm5SZWdpc3RlciA9IE1JUFNSZWdpc3RlcnM6OnYwOwogI2VsaWYgUExBVEZPUk0oWDg2
KQogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGlucHV0ID0gWDg2UmVnaXN0ZXJzOjplYXg7
CiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgaW5kZXggPSBYODZSZWdpc3RlcnM6OmVkeDsK
QEAgLTEzMTMsNiArMTMyMyw4IEBACiAgICAgICAgIHB1c2goQVJNUmVnaXN0ZXJzOjpyNSk7CiAg
ICAgICAgIHB1c2goQVJNUmVnaXN0ZXJzOjpyNik7CiAgICAgICAgIG1vdmUoQVJNUmVnaXN0ZXJz
OjpyMywgb3V0cHV0KTsKKyNlbGlmIFBMQVRGT1JNKE1JUFMpCisgICAgICAgIC8vIERvIG5vdGhp
bmcuCiAjZW5kaWYKICAgICB9CiAKQEAgLTEzMzAsNiArMTM0Miw4IEBACiAgICAgICAgIHBvcChB
Uk1SZWdpc3RlcnM6OnI2KTsKICAgICAgICAgcG9wKEFSTVJlZ2lzdGVyczo6cjUpOwogICAgICAg
ICBwb3AoQVJNUmVnaXN0ZXJzOjpyNCk7CisjZWxpZiBQTEFURk9STShNSVBTKQorICAgICAgICAv
LyBEbyBub3RoaW5nCiAjZW5kaWYKICAgICAgICAgcmV0KCk7CiAgICAgfQpJbmRleDogYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyLmgJKHJldmlzaW9uIDUxNTUyKQorKysgYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDEwIEBACiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJB
Uk0uaCIKIG5hbWVzcGFjZSBKU0MgeyB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyQVJNIE1hY3JvQXNz
ZW1ibGVyQmFzZTsgfTsKIAorI2VsaWYgUExBVEZPUk0oTUlQUykKKyNpbmNsdWRlICJNYWNyb0Fz
c2VtYmxlck1JUFMuaCIKK25hbWVzcGFjZSBKU0MgeyB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyTUlQ
UyBNYWNyb0Fzc2VtYmxlckJhc2U7IH07CisKICNlbGlmIFBMQVRGT1JNKFg4NikKICNpbmNsdWRl
ICJNYWNyb0Fzc2VtYmxlclg4Ni5oIgogbmFtZXNwYWNlIEpTQyB7IHR5cGVkZWYgTWFjcm9Bc3Nl
bWJsZXJYODYgTWFjcm9Bc3NlbWJsZXJCYXNlOyB9OwpJbmRleDogYXNzZW1ibGVyL01JUFNBc3Nl
bWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBhc3NlbWJsZXIvTUlQU0Fzc2VtYmxlci5oCShyZXZpc2lv
biAwKQorKysgYXNzZW1ibGVyL01JUFNBc3NlbWJsZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw5NDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IFVuaXZlcnNpdHkgb2YgU3plZ2VkCisg
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1JUFMgVGVjaG5v
bG9naWVzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBNSVBTIFRFQ0hOT0xPR0lFUywgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIE1JUFMgVEVDSE5PTE9HSUVTLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBN
SVBTQXNzZW1ibGVyX2gKKyNkZWZpbmUgTUlQU0Fzc2VtYmxlcl9oCisKKyNpbmNsdWRlIDx3dGYv
UGxhdGZvcm0uaD4KKyNpbmNsdWRlIDx3dGYvU2VnbWVudGVkVmVjdG9yLmg+CisKKyNpZiBFTkFC
TEUoQVNTRU1CTEVSKSAmJiBQTEFURk9STShNSVBTKQorCisjaW5jbHVkZSAiQXNzZW1ibGVyQnVm
ZmVyLmgiCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEpTQyB7CisK
K3R5cGVkZWYgdWludDMyX3QgTUlQU1dvcmQ7CisKK25hbWVzcGFjZSBNSVBTUmVnaXN0ZXJzIHsK
KyAgICB0eXBlZGVmIGVudW0geworICAgICAgICByMCA9IDAsCisgICAgICAgIHIxLAorICAgICAg
ICByMiwKKyAgICAgICAgcjMsCisgICAgICAgIHI0LAorICAgICAgICByNSwKKyAgICAgICAgcjYs
CisgICAgICAgIHI3LAorICAgICAgICByOCwKKyAgICAgICAgcjksCisgICAgICAgIHIxMCwKKyAg
ICAgICAgcjExLAorICAgICAgICByMTIsCisgICAgICAgIHIxMywKKyAgICAgICAgcjE0LAorICAg
ICAgICByMTUsCisgICAgICAgIHIxNiwKKyAgICAgICAgcjE3LAorICAgICAgICByMTgsCisgICAg
ICAgIHIxOSwKKyAgICAgICAgcjIwLAorICAgICAgICByMjEsCisgICAgICAgIHIyMiwKKyAgICAg
ICAgcjIzLAorICAgICAgICByMjQsCisgICAgICAgIHIyNSwKKyAgICAgICAgcjI2LAorICAgICAg
ICByMjcsCisgICAgICAgIHIyOCwKKyAgICAgICAgcjI5LAorICAgICAgICByMzAsCisgICAgICAg
IHIzMSwKKyAgICAgICAgemVybyA9IHIwLAorICAgICAgICBhdCA9IHIxLAorICAgICAgICB2MCA9
IHIyLAorICAgICAgICB2MSA9IHIzLAorICAgICAgICBhMCA9IHI0LAorICAgICAgICBhMSA9IHI1
LAorICAgICAgICBhMiA9IHI2LAorICAgICAgICBhMyA9IHI3LAorICAgICAgICB0MCA9IHI4LAor
ICAgICAgICB0MSA9IHI5LAorICAgICAgICB0MiA9IHIxMCwKKyAgICAgICAgdDMgPSByMTEsCisg
ICAgICAgIHQ0ID0gcjEyLAorICAgICAgICB0NSA9IHIxMywKKyAgICAgICAgdDYgPSByMTQsCisg
ICAgICAgIHQ3ID0gcjE1LAorICAgICAgICBzMCA9IHIxNiwKKyAgICAgICAgczEgPSByMTcsCisg
ICAgICAgIHMyID0gcjE4LAorICAgICAgICBzMyA9IHIxOSwKKyAgICAgICAgczQgPSByMjAsCisg
ICAgICAgIHM1ID0gcjIxLAorICAgICAgICBzNiA9IHIyMiwKKyAgICAgICAgczcgPSByMjMsCisg
ICAgICAgIHQ4ID0gcjI0LAorICAgICAgICB0OSA9IHIyNSwKKyAgICAgICAgazAgPSByMjYsCisg
ICAgICAgIGsxID0gcjI3LAorICAgICAgICBncCA9IHIyOCwKKyAgICAgICAgc3AgPSByMjksCisg
ICAgICAgIGZwID0gcjMwLAorICAgICAgICByYSA9IHIzMQorICAgIH0gUmVnaXN0ZXJJRDsKKwor
ICAgIHR5cGVkZWYgZW51bSB7CisgICAgICAgIGYwLAorICAgICAgICBmMSwKKyAgICAgICAgZjIs
CisgICAgICAgIGYzLAorICAgICAgICBmNCwKKyAgICAgICAgZjUsCisgICAgICAgIGY2LAorICAg
ICAgICBmNywKKyAgICAgICAgZjgsCisgICAgICAgIGY5LAorICAgICAgICBmMTAsCisgICAgICAg
IGYxMSwKKyAgICAgICAgZjEyLAorICAgICAgICBmMTMsCisgICAgICAgIGYxNCwKKyAgICAgICAg
ZjE1LAorICAgICAgICBmMTYsCisgICAgICAgIGYxNywKKyAgICAgICAgZjE4LAorICAgICAgICBm
MTksCisgICAgICAgIGYyMCwKKyAgICAgICAgZjIxLAorICAgICAgICBmMjIsCisgICAgICAgIGYy
MywKKyAgICAgICAgZjI0LAorICAgICAgICBmMjUsCisgICAgICAgIGYyNiwKKyAgICAgICAgZjI3
LAorICAgICAgICBmMjgsCisgICAgICAgIGYyOSwKKyAgICAgICAgZjMwLAorICAgICAgICBmMzEK
KyAgICB9IEZQUmVnaXN0ZXJJRDsKKworfSAvLyBuYW1lc3BhY2UgTUlQU1JlZ2lzdGVycworCitj
bGFzcyBNSVBTQXNzZW1ibGVyIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIE1JUFNSZWdpc3RlcnM6
OlJlZ2lzdGVySUQgUmVnaXN0ZXJJRDsKKyAgICB0eXBlZGVmIE1JUFNSZWdpc3RlcnM6OkZQUmVn
aXN0ZXJJRCBGUFJlZ2lzdGVySUQ7CisgICAgdHlwZWRlZiBTZWdtZW50ZWRWZWN0b3I8aW50LCA2
ND4gSnVtcHM7CisKKyAgICBNSVBTQXNzZW1ibGVyKCkKKyAgICB7CisgICAgfQorCisgICAgLy8g
TUlQUyBpbnN0cnVjdGlvbiBvcGNvZGUgZmllbGQgcG9zaXRpb24KKyAgICBlbnVtIHsKKyAgICAg
ICAgT1BfU0hfUkQgPSAxMSwKKyAgICAgICAgT1BfU0hfUlQgPSAxNiwKKyAgICAgICAgT1BfU0hf
UlMgPSAyMSwKKyAgICAgICAgT1BfU0hfU0hBTVQgPSA2LAorICAgICAgICBPUF9TSF9DT0RFID0g
MTYsCisgICAgICAgIE9QX1NIX0ZEID0gNiwKKyAgICAgICAgT1BfU0hfRlMgPSAxMSwKKyAgICAg
ICAgT1BfU0hfRlQgPSAxNgorICAgIH07CisKKyAgICBjbGFzcyBKbXBTcmMgeworICAgICAgICBm
cmllbmQgY2xhc3MgTUlQU0Fzc2VtYmxlcjsKKyAgICBwdWJsaWM6CisgICAgICAgIEptcFNyYygp
CisgICAgICAgICAgICA6IG1fb2Zmc2V0KC0xKQorICAgICAgICB7CisgICAgICAgIH0KKworICAg
IHByaXZhdGU6CisgICAgICAgIEptcFNyYyhpbnQgb2Zmc2V0KQorICAgICAgICAgICAgOiBtX29m
ZnNldChvZmZzZXQpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGludCBtX29mZnNl
dDsKKyAgICB9OworCisgICAgY2xhc3MgSm1wRHN0IHsKKyAgICAgICAgZnJpZW5kIGNsYXNzIE1J
UFNBc3NlbWJsZXI7CisgICAgcHVibGljOgorICAgICAgICBKbXBEc3QoKQorICAgICAgICAgICAg
OiBtX29mZnNldCgtMSkKKyAgICAgICAgICAgICwgbV91c2VkKGZhbHNlKQorICAgICAgICB7Cisg
ICAgICAgIH0KKworICAgICAgICBib29sIGlzVXNlZCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlZDsg
fQorICAgICAgICB2b2lkIHVzZWQoKSB7IG1fdXNlZCA9IHRydWU7IH0KKyAgICBwcml2YXRlOgor
ICAgICAgICBKbXBEc3QoaW50IG9mZnNldCkKKyAgICAgICAgICAgIDogbV9vZmZzZXQob2Zmc2V0
KQorICAgICAgICAgICAgLCBtX3VzZWQoZmFsc2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFT
U0VSVChtX29mZnNldCA9PSBvZmZzZXQpOworICAgICAgICB9CisKKyAgICAgICAgaW50IG1fb2Zm
c2V0IDogMzE7CisgICAgICAgIGludCBtX3VzZWQgOiAxOworICAgIH07CisKKyAgICB2b2lkIGVt
aXRJbnN0KE1JUFNXb3JkIG9wKQorICAgIHsKKyAgICAgICAgdm9pZCogb2xkX2Jhc2UgPSBtX2J1
ZmZlci5kYXRhKCk7CisKKyAgICAgICAgbV9idWZmZXIucHV0SW50KG9wKTsKKworICAgICAgICB2
b2lkKiBuZXdfYmFzZSA9IG1fYnVmZmVyLmRhdGEoKTsKKyAgICAgICAgaWYgKG9sZF9iYXNlICE9
IG5ld19iYXNlKSB7CisgICAgICAgICAgICByZWxvY2F0ZUp1bXBzKG9sZF9iYXNlLCBuZXdfYmFz
ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIG5vcCgpCisgICAgeworICAgICAgICBl
bWl0SW5zdCgweDAwMDAwMDAwKTsKKyAgICB9CisKKyAgICAvKiBOZWVkIHRvIGluc2VydCBvbmUg
bG9hZCBkYXRhIGRlbGF5IG5vcCBmb3IgbWlwczEuICAqLworICAgIHZvaWQgbG9hZERlbGF5Tm9w
KCkKKyAgICB7CisjaWYgX19taXBzID09IDEKKyAgICAgICAgbm9wKCk7CisjZW5kaWYKKyAgICB9
CisKKyAgICAvKiBOZWVkIHRvIGluc2VydCBvbmUgY29wcm9jZXNzb3IgYWNjZXNzIGRlbGF5IG5v
cCBmb3IgbWlwczEuICAqLworICAgIHZvaWQgY29wRGVsYXlOb3AoKQorICAgIHsKKyNpZiBfX21p
cHMgPT0gMQorICAgICAgICBub3AoKTsKKyNlbmRpZgorICAgIH0KKworICAgIHZvaWQgbW92ZShS
ZWdpc3RlcklEIHJkLCBSZWdpc3RlcklEIHJzKQorICAgIHsKKyNpZiBkZWZpbmVkKF9BQklPMzIp
CisgICAgICAgIC8qIGFkZHUgKi8KKyAgICAgICAgZW1pdEluc3QoMHgwMDAwMDAyMSB8IChyZCA8
PCBPUF9TSF9SRCkgfCAocnMgPDwgT1BfU0hfUlMpKTsKKyNlbHNlCisgICAgICAgIC8qIGRhZGR1
ICovCisgICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMmQgfCAocmQgPDwgT1BfU0hfUkQpIHwgKHJz
IDw8IE9QX1NIX1JTKSk7CisjZW5kaWYKKyAgICB9CisKKyAgICAvKiBTZXQgYW4gaW1tZWRpYXRl
IHZhbHVlIHRvIGEgcmVnaXN0ZXIuICBUaGlzIG1heSBnZW5lcmF0ZSAxIG9yIDIKKyAgICAgICBp
bnN0cnVjdGlvbnMuICAqLworICAgIHZvaWQgbGkoUmVnaXN0ZXJJRCBkZXN0LCBpbnQgaW1tKQor
ICAgIHsKKyAgICAgICAgaWYgKGltbSA+PSAtMzI3NjggJiYgaW1tIDw9IDMyNzY3KQorICAgICAg
ICAgICAgYWRkaXUoZGVzdCwgTUlQU1JlZ2lzdGVyczo6emVybywgaW1tKTsKKyAgICAgICAgZWxz
ZSBpZiAoaW1tID49IDAgJiYgaW1tIDwgNjU1MzYpCisgICAgICAgICAgICBvcmkoZGVzdCwgTUlQ
U1JlZ2lzdGVyczo6emVybywgaW1tKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBsdWko
ZGVzdCwgaW1tID4+IDE2KTsKKyAgICAgICAgICAgIGlmIChpbW0gJiAweGZmZmYpCisgICAgICAg
ICAgICAgICAgb3JpKGRlc3QsIGRlc3QsIGltbSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2
b2lkIGx1aShSZWdpc3RlcklEIHJ0LCBpbnQgaW1tKQorICAgIHsKKyAgICAgICAgZW1pdEluc3Qo
MHgzYzAwMDAwMCB8IChydCA8PCBPUF9TSF9SVCkgfCAoaW1tICYgMHhmZmZmKSk7CisgICAgfQor
CisgICAgdm9pZCBhZGRpdShSZWdpc3RlcklEIHJ0LCBSZWdpc3RlcklEIHJzLCBpbnQgaW1tKQor
ICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHgyNDAwMDAwMCB8IChydCA8PCBPUF9TSF9SVCkgfCAo
cnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAgICAgICAgIHwgKGltbSAmIDB4ZmZmZikpOworICAg
IH0KKworICAgIHZvaWQgYWRkdShSZWdpc3RlcklEIHJkLCBSZWdpc3RlcklEIHJzLCBSZWdpc3Rl
cklEIHJ0KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHgwMDAwMDAyMSB8IChyZCA8PCBPUF9T
SF9SRCkgfCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAgICAgICAgIHwgKHJ0IDw8IE9QX1NI
X1JUKSk7CisgICAgfQorCisgICAgdm9pZCBzdWJ1KFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQg
cnMsIFJlZ2lzdGVySUQgcnQpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDAwMDAwMDIzIHwg
KHJkIDw8IE9QX1NIX1JEKSB8IChycyA8PCBPUF9TSF9SUykKKyAgICAgICAgICAgICAgICAgfCAo
cnQgPDwgT1BfU0hfUlQpKTsKKyAgICB9CisKKyAgICB2b2lkIG11bHQoUmVnaXN0ZXJJRCBycywg
UmVnaXN0ZXJJRCBydCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMTggfCAocnMg
PDwgT1BfU0hfUlMpIHwgKHJ0IDw8IE9QX1NIX1JUKSk7CisgICAgfQorCisgICAgdm9pZCBtZmhp
KFJlZ2lzdGVySUQgcmQpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDAwMDAwMDEwIHwgKHJk
IDw8IE9QX1NIX1JEKSk7CisgICAgfQorCisgICAgdm9pZCBtZmxvKFJlZ2lzdGVySUQgcmQpCisg
ICAgeworICAgICAgICBlbWl0SW5zdCgweDAwMDAwMDEyIHwgKHJkIDw8IE9QX1NIX1JEKSk7Cisg
ICAgfQorCisgICAgdm9pZCBtdWwoUmVnaXN0ZXJJRCByZCwgUmVnaXN0ZXJJRCBycywgUmVnaXN0
ZXJJRCBydCkKKyAgICB7CisjaWYgX19taXBzID49IDMyCisgICAgICAgIGVtaXRJbnN0KDB4NzAw
MDAwMDIgfCAocmQgPDwgT1BfU0hfUkQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAgICAg
ICAgICB8IChydCA8PCBPUF9TSF9SVCkpOworI2Vsc2UKKyAgICAgICAgbXVsdChycywgcnQpOwor
ICAgICAgICBtZmxvKHJkKTsKKyNlbmRpZgorICAgIH0KKworICAgIHZvaWQgYW5kX2luc24oUmVn
aXN0ZXJJRCByZCwgUmVnaXN0ZXJJRCBycywgUmVnaXN0ZXJJRCBydCkKKyAgICB7CisgICAgICAg
IGVtaXRJbnN0KDB4MDAwMDAwMjQgfCAocmQgPDwgT1BfU0hfUkQpIHwgKHJzIDw8IE9QX1NIX1JT
KQorICAgICAgICAgICAgICAgICB8IChydCA8PCBPUF9TSF9SVCkpOworICAgIH0KKworICAgIHZv
aWQgYW5kaShSZWdpc3RlcklEIHJ0LCBSZWdpc3RlcklEIHJzLCBpbnQgaW1tKQorICAgIHsKKyAg
ICAgICAgZW1pdEluc3QoMHgzMDAwMDAwMCB8IChydCA8PCBPUF9TSF9SVCkgfCAocnMgPDwgT1Bf
U0hfUlMpCisgICAgICAgICAgICAgICAgIHwgKGltbSAmIDB4ZmZmZikpOworICAgIH0KKworICAg
IHZvaWQgbm9yKFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcnMsIFJlZ2lzdGVySUQgcnQpCisg
ICAgeworICAgICAgICBlbWl0SW5zdCgweDAwMDAwMDI3IHwgKHJkIDw8IE9QX1NIX1JEKSB8IChy
cyA8PCBPUF9TSF9SUykKKyAgICAgICAgICAgICAgICAgfCAocnQgPDwgT1BfU0hfUlQpKTsKKyAg
ICB9CisKKyAgICB2b2lkIG9yX2luc24oUmVnaXN0ZXJJRCByZCwgUmVnaXN0ZXJJRCBycywgUmVn
aXN0ZXJJRCBydCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMjUgfCAocmQgPDwg
T1BfU0hfUkQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChydCA8PCBP
UF9TSF9SVCkpOworICAgIH0KKworICAgIHZvaWQgb3JpKFJlZ2lzdGVySUQgcnQsIFJlZ2lzdGVy
SUQgcnMsIGludCBpbW0pCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDM0MDAwMDAwIHwgKHJ0
IDw8IE9QX1NIX1JUKSB8IChycyA8PCBPUF9TSF9SUykKKyAgICAgICAgICAgICAgICAgfCAoaW1t
ICYgMHhmZmZmKSk7CisgICAgfQorCisgICAgdm9pZCB4b3JfaW5zbihSZWdpc3RlcklEIHJkLCBS
ZWdpc3RlcklEIHJzLCBSZWdpc3RlcklEIHJ0KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHgw
MDAwMDAyNiB8IChyZCA8PCBPUF9TSF9SRCkgfCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAg
ICAgICAgIHwgKHJ0IDw8IE9QX1NIX1JUKSk7CisgICAgfQorCisgICAgdm9pZCB4b3JpKFJlZ2lz
dGVySUQgcnQsIFJlZ2lzdGVySUQgcnMsIGludCBpbW0pCisgICAgeworICAgICAgICBlbWl0SW5z
dCgweDM4MDAwMDAwIHwgKHJ0IDw8IE9QX1NIX1JUKSB8IChycyA8PCBPUF9TSF9SUykKKyAgICAg
ICAgICAgICAgICAgfCAoaW1tICYgMHhmZmZmKSk7CisgICAgfQorCisgICAgdm9pZCBzbHQoUmVn
aXN0ZXJJRCByZCwgUmVnaXN0ZXJJRCBycywgUmVnaXN0ZXJJRCBydCkKKyAgICB7CisgICAgICAg
IGVtaXRJbnN0KDB4MDAwMDAwMmEgfCAocmQgPDwgT1BfU0hfUkQpIHwgKHJzIDw8IE9QX1NIX1JT
KQorICAgICAgICAgICAgICAgICB8IChydCA8PCBPUF9TSF9SVCkpOworICAgIH0KKworICAgIHZv
aWQgc2x0dShSZWdpc3RlcklEIHJkLCBSZWdpc3RlcklEIHJzLCBSZWdpc3RlcklEIHJ0KQorICAg
IHsKKyAgICAgICAgZW1pdEluc3QoMHgwMDAwMDAyYiB8IChyZCA8PCBPUF9TSF9SRCkgfCAocnMg
PDwgT1BfU0hfUlMpCisgICAgICAgICAgICAgICAgIHwgKHJ0IDw8IE9QX1NIX1JUKSk7CisgICAg
fQorCisgICAgdm9pZCBzbHRpdShSZWdpc3RlcklEIHJ0LCBSZWdpc3RlcklEIHJzLCBpbnQgaW1t
KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHgyYzAwMDAwMCB8IChydCA8PCBPUF9TSF9SVCkg
fCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAgICAgICAgIHwgKGltbSAmIDB4ZmZmZikpOwor
ICAgIH0KKworICAgIHZvaWQgc2xsKFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcnQsIGludCBz
aGFtdCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMDAgfCAocmQgPDwgT1BfU0hf
UkQpIHwgKHJ0IDw8IE9QX1NIX1JUKQorICAgICAgICAgICAgICAgICB8ICgoc2hhbXQgJiAweDFm
KSA8PCBPUF9TSF9TSEFNVCkpOworICAgIH0KKworICAgIHZvaWQgc2xsdihSZWdpc3RlcklEIHJk
LCBSZWdpc3RlcklEIHJ0LCBpbnQgcnMpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDAwMDAw
MDA0IHwgKHJkIDw8IE9QX1NIX1JEKSB8IChydCA8PCBPUF9TSF9SVCkKKyAgICAgICAgICAgICAg
ICAgfCAocnMgPDwgT1BfU0hfUlMpKTsKKyAgICB9CisKKyAgICB2b2lkIHNyYShSZWdpc3RlcklE
IHJkLCBSZWdpc3RlcklEIHJ0LCBpbnQgc2hhbXQpCisgICAgeworICAgICAgICBlbWl0SW5zdCgw
eDAwMDAwMDAzIHwgKHJkIDw8IE9QX1NIX1JEKSB8IChydCA8PCBPUF9TSF9SVCkKKyAgICAgICAg
ICAgICAgICAgfCAoKHNoYW10ICYgMHgxZikgPDwgT1BfU0hfU0hBTVQpKTsKKyAgICB9CisKKyAg
ICB2b2lkIHNyYXYoUmVnaXN0ZXJJRCByZCwgUmVnaXN0ZXJJRCBydCwgUmVnaXN0ZXJJRCBycykK
KyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMDcgfCAocmQgPDwgT1BfU0hfUkQpIHwg
KHJ0IDw8IE9QX1NIX1JUKQorICAgICAgICAgICAgICAgICB8IChycyA8PCBPUF9TSF9SUykpOwor
ICAgIH0KKworICAgIHZvaWQgbHcoUmVnaXN0ZXJJRCBydCwgUmVnaXN0ZXJJRCBycywgaW50IG9m
ZnNldCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4OGMwMDAwMDAgfCAocnQgPDwgT1BfU0hf
UlQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChvZmZzZXQgJiAweGZm
ZmYpKTsKKyAgICAgICAgbG9hZERlbGF5Tm9wKCk7CisgICAgfQorCisgICAgdm9pZCBsd2woUmVn
aXN0ZXJJRCBydCwgUmVnaXN0ZXJJRCBycywgaW50IG9mZnNldCkKKyAgICB7CisgICAgICAgIGVt
aXRJbnN0KDB4ODgwMDAwMDAgfCAocnQgPDwgT1BfU0hfUlQpIHwgKHJzIDw8IE9QX1NIX1JTKQor
ICAgICAgICAgICAgICAgICB8IChvZmZzZXQgJiAweGZmZmYpKTsKKyAgICAgICAgbG9hZERlbGF5
Tm9wKCk7CisgICAgfQorCisgICAgdm9pZCBsd3IoUmVnaXN0ZXJJRCBydCwgUmVnaXN0ZXJJRCBy
cywgaW50IG9mZnNldCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4OTgwMDAwMDAgfCAocnQg
PDwgT1BfU0hfUlQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChvZmZz
ZXQgJiAweGZmZmYpKTsKKyAgICAgICAgbG9hZERlbGF5Tm9wKCk7CisgICAgfQorCisgICAgdm9p
ZCBsaHUoUmVnaXN0ZXJJRCBydCwgUmVnaXN0ZXJJRCBycywgaW50IG9mZnNldCkKKyAgICB7Cisg
ICAgICAgIGVtaXRJbnN0KDB4OTQwMDAwMDAgfCAocnQgPDwgT1BfU0hfUlQpIHwgKHJzIDw8IE9Q
X1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChvZmZzZXQgJiAweGZmZmYpKTsKKyAgICAgICAg
bG9hZERlbGF5Tm9wKCk7CisgICAgfQorCisgICAgdm9pZCBzdyhSZWdpc3RlcklEIHJ0LCBSZWdp
c3RlcklEIHJzLCBpbnQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHhhYzAwMDAw
MCB8IChydCA8PCBPUF9TSF9SVCkgfCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAgICAgICAg
IHwgKG9mZnNldCAmIDB4ZmZmZikpOworICAgIH0KKworICAgIHZvaWQganIoUmVnaXN0ZXJJRCBy
cykKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMDggfCAocnMgPDwgT1BfU0hfUlMp
KTsKKyAgICB9CisKKyAgICB2b2lkIGphbHIoUmVnaXN0ZXJJRCBycykKKyAgICB7CisgICAgICAg
IGVtaXRJbnN0KDB4MDAwMGY4MDkgfCAocnMgPDwgT1BfU0hfUlMpKTsKKyAgICB9CisKKyAgICB2
b2lkIGphbCgpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDBjMDAwMDAwKTsKKyAgICB9CisK
KyAgICB2b2lkIGJrcHQoKQorICAgIHsKKyAgICAgICAgaW50IHZhbHVlID0gNTEyOyAvKiBCUktf
QlVHICovCisgICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMGQgfCAoKHZhbHVlICYgMHgzZmYpIDw8
IE9QX1NIX0NPREUpKTsKKyAgICB9CisKKyAgICB2b2lkIGJnZXooUmVnaXN0ZXJJRCBycywgaW50
IGltbSkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4MDQwMTAwMDAgfCAocnMgPDwgT1BfU0hf
UlMpIHwgKGltbSAmIDB4ZmZmZikpOworICAgIH0KKworICAgIHZvaWQgYmx0eihSZWdpc3RlcklE
IHJzLCBpbnQgaW1tKQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHgwNDAwMDAwMCB8IChycyA8
PCBPUF9TSF9SUykgfCAoaW1tICYgMHhmZmZmKSk7CisgICAgfQorCisgICAgdm9pZCBiZXEoUmVn
aXN0ZXJJRCBycywgUmVnaXN0ZXJJRCBydCwgaW50IGltbSkKKyAgICB7CisgICAgICAgIGVtaXRJ
bnN0KDB4MTAwMDAwMDAgfCAocnMgPDwgT1BfU0hfUlMpIHwgKHJ0IDw8IE9QX1NIX1JUKSB8IChp
bW0gJiAweGZmZmYpKTsKKyAgICB9CisKKyAgICB2b2lkIGJuZShSZWdpc3RlcklEIHJzLCBSZWdp
c3RlcklEIHJ0LCBpbnQgaW1tKQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHgxNDAwMDAwMCB8
IChycyA8PCBPUF9TSF9SUykgfCAocnQgPDwgT1BfU0hfUlQpIHwgKGltbSAmIDB4ZmZmZikpOwor
ICAgIH0KKworICAgIHZvaWQgYmMxdCgpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDQ1MDEw
MDAwKTsKKyAgICB9CisKKyAgICB2b2lkIGJjMWYoKQorICAgIHsKKyAgICAgICAgZW1pdEluc3Qo
MHg0NTAwMDAwMCk7CisgICAgfQorCisgICAgSm1wU3JjIG5ld0ptcFNyYygpCisgICAgeworICAg
ICAgICByZXR1cm4gSm1wU3JjKG1fYnVmZmVyLnNpemUoKSk7CisgICAgfQorCisgICAgdm9pZCBh
cHBlbmRKdW1wKCkKKyAgICB7CisgICAgICAgIG1fanVtcHMuYXBwZW5kKG1fYnVmZmVyLnNpemUo
KSk7CisgICAgfQorCisgICAgdm9pZCBhZGRfZChGUFJlZ2lzdGVySUQgZmQsIEZQUmVnaXN0ZXJJ
RCBmcywgRlBSZWdpc3RlcklEIGZ0KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHg0NjIwMDAw
MCB8IChmZCA8PCBPUF9TSF9GRCkgfCAoZnMgPDwgT1BfU0hfRlMpCisgICAgICAgICAgICAgICAg
IHwgKGZ0IDw8IE9QX1NIX0ZUKSk7CisgICAgfQorCisgICAgdm9pZCBzdWJfZChGUFJlZ2lzdGVy
SUQgZmQsIEZQUmVnaXN0ZXJJRCBmcywgRlBSZWdpc3RlcklEIGZ0KQorICAgIHsKKyAgICAgICAg
ZW1pdEluc3QoMHg0NjIwMDAwMSB8IChmZCA8PCBPUF9TSF9GRCkgfCAoZnMgPDwgT1BfU0hfRlMp
CisgICAgICAgICAgICAgICAgIHwgKGZ0IDw8IE9QX1NIX0ZUKSk7CisgICAgfQorCisgICAgdm9p
ZCBtdWxfZChGUFJlZ2lzdGVySUQgZmQsIEZQUmVnaXN0ZXJJRCBmcywgRlBSZWdpc3RlcklEIGZ0
KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHg0NjIwMDAwMiB8IChmZCA8PCBPUF9TSF9GRCkg
fCAoZnMgPDwgT1BfU0hfRlMpCisgICAgICAgICAgICAgICAgIHwgKGZ0IDw8IE9QX1NIX0ZUKSk7
CisgICAgfQorCisgICAgdm9pZCBsd2MxKEZQUmVnaXN0ZXJJRCBmdCwgUmVnaXN0ZXJJRCBycywg
aW50IG9mZnNldCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4YzQwMDAwMDAgfCAoZnQgPDwg
T1BfU0hfRlQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChvZmZzZXQg
JiAweGZmZmYpKTsKKyAgICAgICAgY29wRGVsYXlOb3AoKTsKKyAgICB9CisKKyAgICB2b2lkIGxk
YzEoRlBSZWdpc3RlcklEIGZ0LCBSZWdpc3RlcklEIHJzLCBpbnQgb2Zmc2V0KQorICAgIHsKKyAg
ICAgICAgZW1pdEluc3QoMHhkNDAwMDAwMCB8IChmdCA8PCBPUF9TSF9GVCkgfCAocnMgPDwgT1Bf
U0hfUlMpCisgICAgICAgICAgICAgICAgIHwgKG9mZnNldCAmIDB4ZmZmZikpOworICAgIH0KKwor
ICAgIHZvaWQgc3djMShGUFJlZ2lzdGVySUQgZnQsIFJlZ2lzdGVySUQgcnMsIGludCBvZmZzZXQp
CisgICAgeworICAgICAgICBlbWl0SW5zdCgweGU0MDAwMDAwIHwgKGZ0IDw8IE9QX1NIX0ZUKSB8
IChycyA8PCBPUF9TSF9SUykKKyAgICAgICAgICAgICAgICAgfCAob2Zmc2V0ICYgMHhmZmZmKSk7
CisgICAgfQorCisgICAgdm9pZCBzZGMxKEZQUmVnaXN0ZXJJRCBmdCwgUmVnaXN0ZXJJRCBycywg
aW50IG9mZnNldCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4ZjQwMDAwMDAgfCAoZnQgPDwg
T1BfU0hfRlQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChvZmZzZXQg
JiAweGZmZmYpKTsKKyAgICB9CisKKyAgICB2b2lkIG10YzEoUmVnaXN0ZXJJRCBydCwgRlBSZWdp
c3RlcklEIGZzKQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHg0NDgwMDAwMCB8IChmcyA8PCBP
UF9TSF9GUykgfCAocnQgPDwgT1BfU0hfUlQpKTsKKyAgICAgICAgY29wRGVsYXlOb3AoKTsKKyAg
ICB9CisKKyAgICB2b2lkIG1mYzEoUmVnaXN0ZXJJRCBydCwgRlBSZWdpc3RlcklEIGZzKQorICAg
IHsKKyAgICAgICAgZW1pdEluc3QoMHg0NDAwMDAwMCB8IChmcyA8PCBPUF9TSF9GUykgfCAocnQg
PDwgT1BfU0hfUlQpKTsKKyAgICAgICAgY29wRGVsYXlOb3AoKTsKKyAgICB9CisKKyAgICB2b2lk
IHRydW5jX3dfZChGUFJlZ2lzdGVySUQgZmQsIEZQUmVnaXN0ZXJJRCBmcykKKyAgICB7CisgICAg
ICAgIGVtaXRJbnN0KDB4NDYyMDAwMGQgfCAoZmQgPDwgT1BfU0hfRkQpIHwgKGZzIDw8IE9QX1NI
X0ZTKSk7CisgICAgfQorCisgICAgdm9pZCBjdnRfZF93KEZQUmVnaXN0ZXJJRCBmZCwgRlBSZWdp
c3RlcklEIGZzKQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHg0NjgwMDAyMSB8IChmZCA8PCBP
UF9TSF9GRCkgfCAoZnMgPDwgT1BfU0hfRlMpKTsKKyAgICB9CisKKyAgICB2b2lkIGNfZXFfZChG
UFJlZ2lzdGVySUQgZnMsIEZQUmVnaXN0ZXJJRCBmdCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0
KDB4NDYyMDAwMzIgfCAoZnMgPDwgT1BfU0hfRlMpIHwgKGZ0IDw8IE9QX1NIX0ZUKSk7CisgICAg
ICAgIGNvcERlbGF5Tm9wKCk7CisgICAgfQorCisgICAgdm9pZCBjX25ndF9kKEZQUmVnaXN0ZXJJ
RCBmcywgRlBSZWdpc3RlcklEIGZ0KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHg0NjIwMDAz
ZiB8IChmcyA8PCBPUF9TSF9GUykgfCAoZnQgPDwgT1BfU0hfRlQpKTsKKyAgICAgICAgY29wRGVs
YXlOb3AoKTsKKyAgICB9CisKKyAgICB2b2lkIGNfbmdlX2QoRlBSZWdpc3RlcklEIGZzLCBGUFJl
Z2lzdGVySUQgZnQpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDQ2MjAwMDNkIHwgKGZzIDw8
IE9QX1NIX0ZTKSB8IChmdCA8PCBPUF9TSF9GVCkpOworICAgICAgICBjb3BEZWxheU5vcCgpOwor
ICAgIH0KKworICAgIHZvaWQgY19sdF9kKEZQUmVnaXN0ZXJJRCBmcywgRlBSZWdpc3RlcklEIGZ0
KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHg0NjIwMDAzYyB8IChmcyA8PCBPUF9TSF9GUykg
fCAoZnQgPDwgT1BfU0hfRlQpKTsKKyAgICAgICAgY29wRGVsYXlOb3AoKTsKKyAgICB9CisKKyAg
ICB2b2lkIGNfbGVfZChGUFJlZ2lzdGVySUQgZnMsIEZQUmVnaXN0ZXJJRCBmdCkKKyAgICB7Cisg
ICAgICAgIGVtaXRJbnN0KDB4NDYyMDAwM2UgfCAoZnMgPDwgT1BfU0hfRlMpIHwgKGZ0IDw8IE9Q
X1NIX0ZUKSk7CisgICAgICAgIGNvcERlbGF5Tm9wKCk7CisgICAgfQorCisgICAgdm9pZCBjX3Vl
cV9kKEZQUmVnaXN0ZXJJRCBmcywgRlBSZWdpc3RlcklEIGZ0KQorICAgIHsKKyAgICAgICAgZW1p
dEluc3QoMHg0NjIwMDAzMyB8IChmcyA8PCBPUF9TSF9GUykgfCAoZnQgPDwgT1BfU0hfRlQpKTsK
KyAgICAgICAgY29wRGVsYXlOb3AoKTsKKyAgICB9CisKKyAgICB2b2lkIGNfb2xlX2QoRlBSZWdp
c3RlcklEIGZzLCBGUFJlZ2lzdGVySUQgZnQpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDQ2
MjAwMDM2IHwgKGZzIDw8IE9QX1NIX0ZTKSB8IChmdCA8PCBPUF9TSF9GVCkpOworICAgICAgICBj
b3BEZWxheU5vcCgpOworICAgIH0KKworICAgIHZvaWQgY19vbHRfZChGUFJlZ2lzdGVySUQgZnMs
IEZQUmVnaXN0ZXJJRCBmdCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4NDYyMDAwMzQgfCAo
ZnMgPDwgT1BfU0hfRlMpIHwgKGZ0IDw8IE9QX1NIX0ZUKSk7CisgICAgICAgIGNvcERlbGF5Tm9w
KCk7CisgICAgfQorCisgICAgdm9pZCBjX3VsZV9kKEZQUmVnaXN0ZXJJRCBmcywgRlBSZWdpc3Rl
cklEIGZ0KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHg0NjIwMDAzNyB8IChmcyA8PCBPUF9T
SF9GUykgfCAoZnQgPDwgT1BfU0hfRlQpKTsKKyAgICAgICAgY29wRGVsYXlOb3AoKTsKKyAgICB9
CisKKyAgICB2b2lkIGNfdWx0X2QoRlBSZWdpc3RlcklEIGZzLCBGUFJlZ2lzdGVySUQgZnQpCisg
ICAgeworICAgICAgICBlbWl0SW5zdCgweDQ2MjAwMDM1IHwgKGZzIDw8IE9QX1NIX0ZTKSB8IChm
dCA8PCBPUF9TSF9GVCkpOworICAgICAgICBjb3BEZWxheU5vcCgpOworICAgIH0KKworICAgIC8v
IEdlbmVyYWwgaGVscGVycworCisgICAgSm1wRHN0IGxhYmVsKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBKbXBEc3QobV9idWZmZXIuc2l6ZSgpKTsKKyAgICB9CisKKyAgICBKbXBEc3QgYWxpZ24o
aW50IGFsaWdubWVudCkKKyAgICB7CisgICAgICAgIHdoaWxlICghbV9idWZmZXIuaXNBbGlnbmVk
KGFsaWdubWVudCkpCisgICAgICAgICAgICBia3B0KCk7CisKKyAgICAgICAgcmV0dXJuIGxhYmVs
KCk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQqIGdldFJlbG9jYXRlZEFkZHJlc3Modm9pZCog
Y29kZSwgSm1wU3JjIGp1bXApCisgICAgeworICAgICAgICBBU1NFUlQoanVtcC5tX29mZnNldCAh
PSAtMSk7CisgICAgICAgIHZvaWQqIGIgPSByZWludGVycHJldF9jYXN0PHZvaWQqPigocmVpbnRl
cnByZXRfY2FzdDxpbnRwdHJfdD4oY29kZSkpICsganVtcC5tX29mZnNldCk7CisgICAgICAgIHJl
dHVybiBiOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkKiBnZXRSZWxvY2F0ZWRBZGRyZXNzKHZv
aWQqIGNvZGUsIEptcERzdCBsYWJlbCkKKyAgICB7CisgICAgICAgIHZvaWQqIGIgPSByZWludGVy
cHJldF9jYXN0PHZvaWQqPigocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oY29kZSkpICsgbGFi
ZWwubV9vZmZzZXQpOworICAgICAgICByZXR1cm4gYjsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50
IGdldERpZmZlcmVuY2VCZXR3ZWVuTGFiZWxzKEptcERzdCBmcm9tLCBKbXBEc3QgdG8pCisgICAg
eworICAgICAgICByZXR1cm4gdG8ubV9vZmZzZXQgLSBmcm9tLm1fb2Zmc2V0OworICAgIH0KKwor
ICAgIHN0YXRpYyBpbnQgZ2V0RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMoSm1wRHN0IGZyb20sIEpt
cFNyYyB0bykKKyAgICB7CisgICAgICAgIHJldHVybiB0by5tX29mZnNldCAtIGZyb20ubV9vZmZz
ZXQ7CisgICAgfQorCisgICAgc3RhdGljIGludCBnZXREaWZmZXJlbmNlQmV0d2VlbkxhYmVscyhK
bXBTcmMgZnJvbSwgSm1wRHN0IHRvKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvLm1fb2Zmc2V0
IC0gZnJvbS5tX29mZnNldDsKKyAgICB9CisKKyAgICAvLyBBc3NlbWJsZXIgYWRtaW4gbWV0aG9k
czoKKworICAgIHNpemVfdCBzaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2J1
ZmZlci5zaXplKCk7CisgICAgfQorCisgICAgdm9pZCogZXhlY3V0YWJsZUNvcHkoRXhlY3V0YWJs
ZVBvb2wqIGFsbG9jYXRvcikKKyAgICB7CisgICAgICAgIHZvaWQgKnJlc3VsdCA9IG1fYnVmZmVy
LmV4ZWN1dGFibGVDb3B5KGFsbG9jYXRvcik7CisgICAgICAgIGlmICghcmVzdWx0KQorICAgICAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgcmVsb2NhdGVKdW1wcyhtX2J1ZmZlci5kYXRhKCks
IHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIHVu
c2lnbmVkIGdldENhbGxSZXR1cm5PZmZzZXQoSm1wU3JjIGNhbGwpCisgICAgeworICAgICAgICAv
LyBUaGUgcmV0dXJuIGFkZHJlc3MgaXMgYWZ0ZXIgYSBjYWxsIGFuZCBhIGRlbGF5IHNsb3QgaW5z
dHJ1Y3Rpb24KKyAgICAgICAgcmV0dXJuIGNhbGwubV9vZmZzZXQ7CisgICAgfQorCisgICAgLy8g
TGlua2luZyAmIHBhdGNoaW5nOgorICAgIC8vCisgICAgLy8gJ2xpbmsnIGFuZCAncGF0Y2gnIG1l
dGhvZHMgYXJlIGZvciB1c2Ugb24gdW5wcm90ZWN0ZWQgY29kZSAtIHN1Y2ggYXMgdGhlIGNvZGUK
KyAgICAvLyB3aXRoaW4gdGhlIEFzc2VtYmxlckJ1ZmZlciwgYW5kIGNvZGUgYmVpbmcgcGF0Y2hl
ZCBieSB0aGUgcGF0Y2ggYnVmZmVyLiAgT25jZQorICAgIC8vIGNvZGUgaGFzIGJlZW4gZmluYWxp
emVkIGl0IGlzIChwbGF0Zm9ybSBzdXBwb3J0IHBlcm1pdHRpbmcpIHdpdGhpbiBhIG5vbi0KKyAg
ICAvLyB3cml0YWJsZSByZWdpb24gb2YgbWVtb3J5OyB0byBtb2RpZnkgdGhlIGNvZGUgaW4gYW4g
ZXhlY3V0ZS1vbmx5IGV4ZWN1YWJsZQorICAgIC8vIHBvb2wgdGhlICdyZXBhdGNoJyBhbmQgJ3Jl
bGluaycgbWV0aG9kcyBzaG91bGQgYmUgdXNlZC4KKworICAgIHZvaWQgbGlua0p1bXAoSm1wU3Jj
IGZyb20sIEptcERzdCB0bykKKyAgICB7CisgICAgICAgIEFTU0VSVCh0by5tX29mZnNldCAhPSAt
MSk7CisgICAgICAgIEFTU0VSVChmcm9tLm1fb2Zmc2V0ICE9IC0xKTsKKyAgICAgICAgTUlQU1dv
cmQqIGluc24gPSByZWludGVycHJldF9jYXN0PE1JUFNXb3JkKj4ocmVpbnRlcnByZXRfY2FzdDxp
bnRwdHJfdD4obV9idWZmZXIuZGF0YSgpKSArIGZyb20ubV9vZmZzZXQpOworICAgICAgICBNSVBT
V29yZCogdG9fcG9zID0gcmVpbnRlcnByZXRfY2FzdDxNSVBTV29yZCo+KHJlaW50ZXJwcmV0X2Nh
c3Q8aW50cHRyX3Q+KG1fYnVmZmVyLmRhdGEoKSkgKyB0by5tX29mZnNldCk7CisKKyAgICAgICAg
QVNTRVJUKCooaW5zbiAtIDEpID09IDAgJiYgKihpbnNuIC0gMikgPT0gMCAmJiAqKGluc24gLSAz
KSA9PSAwICYmICooaW5zbiAtIDUpID09IDApOworICAgICAgICBpbnNuID0gaW5zbiAtIDY7Cisg
ICAgICAgIGxpbmtXaXRoT2Zmc2V0KGluc24sIHRvX3Bvcyk7CisgICAgfQorCisgICAgc3RhdGlj
IHZvaWQgbGlua0p1bXAodm9pZCogY29kZSwgSm1wU3JjIGZyb20sIHZvaWQqIHRvKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGZyb20ubV9vZmZzZXQgIT0gLTEpOworICAgICAgICBNSVBTV29yZCog
aW5zbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8TUlQU1dvcmQqPihyZWludGVycHJldF9jYXN0PGludHB0
cl90Pihjb2RlKSArIGZyb20ubV9vZmZzZXQpOworCisgICAgICAgIEFTU0VSVCgqKGluc24gLSAx
KSA9PSAwICYmICooaW5zbiAtIDIpID09IDAgJiYgKihpbnNuIC0gMykgPT0gMCAmJiAqKGluc24g
LSA1KSA9PSAwKTsKKyAgICAgICAgaW5zbiA9IGluc24gLSA2OworICAgICAgICBsaW5rV2l0aE9m
ZnNldChpbnNuLCB0byk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgbGlua0NhbGwodm9pZCog
Y29kZSwgSm1wU3JjIGZyb20sIHZvaWQqIHRvKQorICAgIHsKKyAgICAgICAgTUlQU1dvcmQqIGlu
c24gPSByZWludGVycHJldF9jYXN0PE1JUFNXb3JkKj4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJf
dD4oY29kZSkgKyBmcm9tLm1fb2Zmc2V0KTsKKyAgICAgICAgbGlua0NhbGxJbnRlcm5hbChpbnNu
LCB0byk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgbGlua1BvaW50ZXIodm9pZCogY29kZSwg
Sm1wRHN0IGZyb20sIHZvaWQqIHRvKQorICAgIHsKKyAgICAgICAgTUlQU1dvcmQqIGluc24gPSBy
ZWludGVycHJldF9jYXN0PE1JUFNXb3JkKj4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oY29k
ZSkgKyBmcm9tLm1fb2Zmc2V0KTsKKyAgICAgICAgQVNTRVJUKCgqaW5zbiAmIDB4ZmZlMDAwMDAp
ID09IDB4M2MwMDAwMDApOyAvLyBsdWkKKyAgICAgICAgKmluc24gPSAoKmluc24gJiAweGZmZmYw
MDAwKSB8ICgocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pID4+IDE2KSAmIDB4ZmZmZik7
CisgICAgICAgIGluc24rKzsKKyAgICAgICAgQVNTRVJUKCgqaW5zbiAmIDB4ZmMwMDAwMDApID09
IDB4MzQwMDAwMDApOyAvLyBvcmkKKyAgICAgICAgKmluc24gPSAoKmluc24gJiAweGZmZmYwMDAw
KSB8IChyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgJiAweGZmZmYpOworICAgIH0KKwor
ICAgIHN0YXRpYyB2b2lkIHJlbGlua0p1bXAodm9pZCogZnJvbSwgdm9pZCogdG8pCisgICAgewor
ICAgICAgICBNSVBTV29yZCogaW5zbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8TUlQU1dvcmQqPihmcm9t
KTsKKworICAgICAgICBBU1NFUlQoKihpbnNuIC0gMSkgPT0gMCAmJiAqKGluc24gLSA1KSA9PSAw
KTsKKyAgICAgICAgaW5zbiA9IGluc24gLSA2OworICAgICAgICBpbnQgZmx1c2hfc2l6ZSA9IGxp
bmtXaXRoT2Zmc2V0KGluc24sIHRvKTsKKworICAgICAgICBFeGVjdXRhYmxlQWxsb2NhdG9yOjpj
YWNoZUZsdXNoKGluc24sIGZsdXNoX3NpemUpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHJl
bGlua0NhbGwodm9pZCogZnJvbSwgdm9pZCogdG8pCisgICAgeworICAgICAgICB2b2lkKiBzdGFy
dDsKKyAgICAgICAgaW50IHNpemUgPSBsaW5rQ2FsbEludGVybmFsKGZyb20sIHRvKTsKKyAgICAg
ICAgaWYgKHNpemUgPT0gc2l6ZW9mKE1JUFNXb3JkKSkKKyAgICAgICAgICAgIHN0YXJ0ID0gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZnJvbSkgLSAy
ICogc2l6ZW9mKE1JUFNXb3JkKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN0YXJ0ID0g
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZnJvbSkg
LSA0ICogc2l6ZW9mKE1JUFNXb3JkKSk7CisKKyAgICAgICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6
Y2FjaGVGbHVzaChzdGFydCwgc2l6ZSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVwYXRj
aEludDMyKHZvaWQqIGZyb20sIGludDMyX3QgdG8pCisgICAgeworICAgICAgICBNSVBTV29yZCog
aW5zbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8TUlQU1dvcmQqPihmcm9tKTsKKyAgICAgICAgQVNTRVJU
KCgqaW5zbiAmIDB4ZmZlMDAwMDApID09IDB4M2MwMDAwMDApOyAvLyBsdWkKKyAgICAgICAgKmlu
c24gPSAoKmluc24gJiAweGZmZmYwMDAwKSB8ICgodG8gPj4gMTYpICYgMHhmZmZmKTsKKyAgICAg
ICAgaW5zbisrOworICAgICAgICBBU1NFUlQoKCppbnNuICYgMHhmYzAwMDAwMCkgPT0gMHgzNDAw
MDAwMCk7IC8vIG9yaQorICAgICAgICAqaW5zbiA9ICgqaW5zbiAmIDB4ZmZmZjAwMDApIHwgKHRv
ICYgMHhmZmZmKTsKKyAgICAgICAgaW5zbi0tOworICAgICAgICBFeGVjdXRhYmxlQWxsb2NhdG9y
OjpjYWNoZUZsdXNoKGluc24sIDIgKiBzaXplb2YoTUlQU1dvcmQpKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgdm9pZCByZXBhdGNoUG9pbnRlcih2b2lkKiBmcm9tLCB2b2lkKiB0bykKKyAgICB7Cisg
ICAgICAgIHJlcGF0Y2hJbnQzMihmcm9tLCByZWludGVycHJldF9jYXN0PGludDMyX3Q+KHRvKSk7
CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVwYXRjaExvYWRQdHJUb0xFQSh2b2lkKiBmcm9t
KQorICAgIHsKKyAgICAgICAgTUlQU1dvcmQqIGluc24gPSByZWludGVycHJldF9jYXN0PE1JUFNX
b3JkKj4oZnJvbSk7CisgICAgICAgIGluc24gPSBpbnNuICsgMzsKKyAgICAgICAgQVNTRVJUKCgq
aW5zbiAmIDB4ZmMwMDAwMDApID09IDB4OGMwMDAwMDApOyAvLyBsdworICAgICAgICAvKiBsdyAt
PiBhZGRpdSAqLworICAgICAgICAqaW5zbiA9IDB4MjQwMDAwMDAgfCAoKmluc24gJiAweDAzZmZm
ZmZmKTsKKworICAgICAgICBFeGVjdXRhYmxlQWxsb2NhdG9yOjpjYWNoZUZsdXNoKGluc24sIHNp
emVvZihNSVBTV29yZCkpOworICAgIH0KKworcHJpdmF0ZToKKworICAgIC8qIFVwZGF0ZSBlYWNo
IGp1bXAgaW4gdGhlIGJ1ZmZlciBvZiBuZXdfYmFzZS4gICovCisgICAgdm9pZCByZWxvY2F0ZUp1
bXBzKHZvaWQqIG9sZF9iYXNlLCB2b2lkKiBuZXdfYmFzZSkKKyAgICB7CisgICAgICAgIC8vIENo
ZWNrIGVhY2gganVtcAorICAgICAgICBmb3IgKEp1bXBzOjpJdGVyYXRvciBpdGVyID0gbV9qdW1w
cy5iZWdpbigpOyBpdGVyICE9IG1fanVtcHMuZW5kKCk7ICsraXRlcikgeworICAgICAgICAgICAg
aW50IHBvcyA9ICppdGVyOworICAgICAgICAgICAgTUlQU1dvcmQqIGluc24gPSByZWludGVycHJl
dF9jYXN0PE1JUFNXb3JkKj4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obmV3X2Jhc2UpICsg
cG9zKTsKKyAgICAgICAgICAgIGluc24gPSBpbnNuICsgMjsKKyAgICAgICAgICAgIC8vIE5lZWQg
dG8gbWFrZSBzdXJlIHdlIGhhdmUgNSB2YWxpZCBpbnN0cnVjdGlvbnMgYWZ0ZXIgcG9zCisgICAg
ICAgICAgICBpZiAoKHVuc2lnbmVkIGludClwb3MgPj0gbV9idWZmZXIuc2l6ZSgpIC0gNSAqIHNp
emVvZihNSVBTV29yZCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAg
IGlmICgoKmluc24gJiAweGZjMDAwMDAwKSA9PSAweDA4MDAwMDAwKSB7IC8vIGoKKyAgICAgICAg
ICAgICAgICBpbnQgb2Zmc2V0ID0gKmluc24gJiAweDAzZmZmZmZmOworICAgICAgICAgICAgICAg
IGludCBvbGRfaW5zbl9hZGRyZXNzID0gKGludClpbnNuIC0gKGludCluZXdfYmFzZSArIChpbnQp
b2xkX2Jhc2U7CisgICAgICAgICAgICAgICAgaW50IHRvcF9mb3VyX2JpdHMgPSAob2xkX2luc25f
YWRkcmVzcyArIDQpID4+IDI4OworICAgICAgICAgICAgICAgIGludCBvbGRfdGFyZ2V0X2FkZHJl
c3MgPSAodG9wX2ZvdXJfYml0cyA8PCAyOCkgfCAob2Zmc2V0IDw8IDIpOworICAgICAgICAgICAg
ICAgIGludCBuZXdfdGFyZ2V0X2FkZHJlc3MgPSBvbGRfdGFyZ2V0X2FkZHJlc3MgLSAoaW50KW9s
ZF9iYXNlICsgKGludCluZXdfYmFzZTsKKyAgICAgICAgICAgICAgICBpbnQgbmV3X2luc25fYWRk
cmVzcyA9IChpbnQpaW5zbjsKKyAgICAgICAgICAgICAgICBpZiAoKChuZXdfaW5zbl9hZGRyZXNz
ICsgNCkgPj4gMjgpID09IChuZXdfdGFyZ2V0X2FkZHJlc3MgPj4gMjgpKSB7CisgICAgICAgICAg
ICAgICAgICAgICppbnNuID0gMHgwODAwMDAwMCB8ICgobmV3X3RhcmdldF9hZGRyZXNzID4+IDIp
ICYgMHgzZmZmZmZmKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICAvKiBsdWkgKi8KKyAgICAgICAgICAgICAgICAgICAgKmluc24gPSAweDNjMDAwMDAwIHwg
KE1JUFNSZWdpc3RlcnM6OnQ5IDw8IE9QX1NIX1JUKSB8ICgobmV3X3RhcmdldF9hZGRyZXNzID4+
IDE2KSAmIDB4ZmZmZik7CisgICAgICAgICAgICAgICAgICAgIC8qIG9yaSAqLworICAgICAgICAg
ICAgICAgICAgICAqKGluc24gKyAxKSA9IDB4MzQwMDAwMDAgfCAoTUlQU1JlZ2lzdGVyczo6dDkg
PDwgT1BfU0hfUlQpIHwgKE1JUFNSZWdpc3RlcnM6OnQ5IDw8IE9QX1NIX1JTKSB8IChuZXdfdGFy
Z2V0X2FkZHJlc3MgJiAweGZmZmYpOworICAgICAgICAgICAgICAgICAgICAvKiBqciAqLworICAg
ICAgICAgICAgICAgICAgICAqKGluc24gKyAyKSA9IDB4MDAwMDAwMDggfCAoTUlQU1JlZ2lzdGVy
czo6dDkgPDwgT1BfU0hfUlMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAoKCppbnNuICYgMHhmZmUwMDAwMCkgPT0gMHgzYzAwMDAwMCkgeyAvLyBsdWkKKyAgICAg
ICAgICAgICAgICBpbnQgaGlnaCA9ICgqaW5zbiAmIDB4ZmZmZikgPDwgMTY7CisgICAgICAgICAg
ICAgICAgaW50IGxvdyA9ICooaW5zbiArIDEpICYgMHhmZmZmOworICAgICAgICAgICAgICAgIGlu
dCBvbGRfdGFyZ2V0X2FkZHJlc3MgPSBoaWdoIHwgbG93OworICAgICAgICAgICAgICAgIGludCBu
ZXdfdGFyZ2V0X2FkZHJlc3MgPSBvbGRfdGFyZ2V0X2FkZHJlc3MgLSAoaW50KW9sZF9iYXNlICsg
KGludCluZXdfYmFzZTsKKyAgICAgICAgICAgICAgICAvKiBsdWkgKi8KKyAgICAgICAgICAgICAg
ICAqaW5zbiA9IDB4M2MwMDAwMDAgfCAoTUlQU1JlZ2lzdGVyczo6dDkgPDwgT1BfU0hfUlQpIHwg
KChuZXdfdGFyZ2V0X2FkZHJlc3MgPj4gMTYpICYgMHhmZmZmKTsKKyAgICAgICAgICAgICAgICAv
KiBvcmkgKi8KKyAgICAgICAgICAgICAgICAqKGluc24gKyAxKSA9IDB4MzQwMDAwMDAgfCAoTUlQ
U1JlZ2lzdGVyczo6dDkgPDwgT1BfU0hfUlQpIHwgKE1JUFNSZWdpc3RlcnM6OnQ5IDw8IE9QX1NI
X1JTKSB8IChuZXdfdGFyZ2V0X2FkZHJlc3MgJiAweGZmZmYpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgc3RhdGljIGludCBsaW5rV2l0aE9mZnNldChNSVBTV29yZCog
aW5zbiwgdm9pZCogdG8pCisgICAgeworICAgICAgICBBU1NFUlQoKCppbnNuICYgMHhmYzAwMDAw
MCkgPT0gMHgxMDAwMDAwMCAvLyBiZXEKKyAgICAgICAgICAgICAgIHx8ICgqaW5zbiAmIDB4ZmMw
MDAwMDApID09IDB4MTQwMDAwMDAgLy8gYm5lCisgICAgICAgICAgICAgICB8fCAoKmluc24gJiAw
eGZmZmYwMDAwKSA9PSAweDQ1MDEwMDAwIC8vIGJjMXQKKyAgICAgICAgICAgICAgIHx8ICgqaW5z
biAmIDB4ZmZmZjAwMDApID09IDB4NDUwMDAwMDApOyAvLyBiYzFmCisgICAgICAgIGludHB0cl90
IGRpZmYgPSAocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pCisgICAgICAgICAgICAgICAg
ICAgICAgICAgLSByZWludGVycHJldF9jYXN0PGludHB0cl90PihpbnNuKSAtIDQpID4+IDI7CisK
KyAgICAgICAgaWYgKGRpZmYgPCAtMzI3NjggfHwgZGlmZiA+IDMyNzY3IHx8ICooaW5zbiArIDIp
ICE9IDB4MTAwMDAwMDMpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgQ29udmVy
dCB0aGUgc2VxdWVuY2U6CisgICAgICAgICAgICAgICAgICBiZXEgJDIsICQzLCB0YXJnZXQKKyAg
ICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgICAgICAgYiAxZgorICAgICAgICAgICAg
ICAgICAgbm9wCisgICAgICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAgICAgICAgIG5vcAor
ICAgICAgICAgICAgICAgIDE6CisKKyAgICAgICAgICAgICAgICB0byB0aGUgbmV3IHNlcXVlbmNl
IGlmIHBvc3NpYmxlOgorICAgICAgICAgICAgICAgICAgYm5lICQyLCAkMywgMWYKKyAgICAgICAg
ICAgICAgICAgIG5vcAorICAgICAgICAgICAgICAgICAgaiAgICB0YXJnZXQKKyAgICAgICAgICAg
ICAgICAgIG5vcAorICAgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgICBub3AK
KyAgICAgICAgICAgICAgICAxOgorCisgICAgICAgICAgICAgICAgT1IgdG8gdGhlIG5ldyBzZXF1
ZW5jZToKKyAgICAgICAgICAgICAgICAgIGJuZSAkMiwgJDMsIDFmCisgICAgICAgICAgICAgICAg
ICBub3AKKyAgICAgICAgICAgICAgICAgIGx1aSAkMjUsIHRhcmdldCA+PiAxNgorICAgICAgICAg
ICAgICAgICAgb3JpICQyNSwgJDI1LCB0YXJnZXQgJiAweGZmZmYKKyAgICAgICAgICAgICAgICAg
IGpyICQyNQorICAgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgMToKKworICAg
ICAgICAgICAgICAgIE5vdGU6IGJlcS9ibmUvYmMxdCBhcmUgY29udmVydGVkIHRvIGJuZS9iZXEv
YmMxZi4KKyAgICAgICAgICAgICovCisKKyAgICAgICAgICAgIGlmICgqKGluc24gKyAyKSA9PSAw
eDEwMDAwMDAzKSB7CisgICAgICAgICAgICAgICAgaWYgKCgqaW5zbiAmIDB4ZmMwMDAwMDApID09
IDB4MTAwMDAwMDApICAgICAgIC8vIGJlcQorICAgICAgICAgICAgICAgICAgICAqaW5zbiA9ICgq
aW5zbiAmIDB4MDNmZjAwMDApIHwgMHgxNDAwMDAwNTsgLy8gYm5lCisgICAgICAgICAgICAgICAg
ZWxzZSBpZiAoKCppbnNuICYgMHhmYzAwMDAwMCkgPT0gMHgxNDAwMDAwMCkgIC8vIGJuZQorICAg
ICAgICAgICAgICAgICAgICAqaW5zbiA9ICgqaW5zbiAmIDB4MDNmZjAwMDApIHwgMHgxMDAwMDAw
NTsgLy8gYmVxCisgICAgICAgICAgICAgICAgZWxzZSBpZiAoKCppbnNuICYgMHhmZmZmMDAwMCkg
PT0gMHg0NTAxMDAwMCkgIC8vIGJjMXQKKyAgICAgICAgICAgICAgICAgICAgKmluc24gPSAweDQ1
MDAwMDA1OyAvLyBiYzFmCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQoMCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGluc24gPSBpbnNuICsg
MjsKKyAgICAgICAgICAgIGlmICgocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5zbikgKyA0
KSA+PiAyOAorICAgICAgICAgICAgICAgID09IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRv
KSA+PiAyOCkgeworICAgICAgICAgICAgICAgICppbnNuID0gMHgwODAwMDAwMCB8ICgocmVpbnRl
cnByZXRfY2FzdDxpbnRwdHJfdD4odG8pID4+IDIpICYgMHgzZmZmZmZmKTsKKyAgICAgICAgICAg
ICAgICAqKGluc24gKyAxKSA9IDA7CisgICAgICAgICAgICAgICAgcmV0dXJuIDQgKiBzaXplb2Yo
TUlQU1dvcmQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpbnRwdHJfdCBuZXdfdGFy
Z2V0X2FkZHJlc3MgPSByZWludGVycHJldF9jYXN0PGludHB0cl90Pih0byk7CisgICAgICAgICAg
ICAvKiBsdWkgKi8KKyAgICAgICAgICAgICppbnNuID0gMHgzYzAwMDAwMCB8IChNSVBTUmVnaXN0
ZXJzOjp0OSA8PCBPUF9TSF9SVCkgfCAoKG5ld190YXJnZXRfYWRkcmVzcyA+PiAxNikgJiAweGZm
ZmYpOworICAgICAgICAgICAgLyogb3JpICovCisgICAgICAgICAgICAqKGluc24gKyAxKSA9IDB4
MzQwMDAwMDAgfCAoTUlQU1JlZ2lzdGVyczo6dDkgPDwgT1BfU0hfUlQpIHwgKE1JUFNSZWdpc3Rl
cnM6OnQ5IDw8IE9QX1NIX1JTKSB8IChuZXdfdGFyZ2V0X2FkZHJlc3MgJiAweGZmZmYpOworICAg
ICAgICAgICAgLyoganIgKi8KKyAgICAgICAgICAgICooaW5zbiArIDIpID0gMHgwMDAwMDAwOCB8
IChNSVBTUmVnaXN0ZXJzOjp0OSA8PCBPUF9TSF9SUyk7CisgICAgICAgICAgICByZXR1cm4gNSAq
IHNpemVvZihNSVBTV29yZCk7CisgICAgICAgIH0KKworICAgICAgICAqaW5zbiA9ICgqaW5zbiAm
IDB4ZmZmZjAwMDApIHwgKGRpZmYgJiAweGZmZmYpOworICAgICAgICByZXR1cm4gc2l6ZW9mKE1J
UFNXb3JkKTsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGxpbmtDYWxsSW50ZXJuYWwodm9pZCog
ZnJvbSwgdm9pZCogdG8pCisgICAgeworICAgICAgICBNSVBTV29yZCogaW5zbiA9IHJlaW50ZXJw
cmV0X2Nhc3Q8TUlQU1dvcmQqPihmcm9tKTsKKyAgICAgICAgaW5zbiA9IGluc24gLSA0OworCisg
ICAgICAgIGlmICgoKihpbnNuICsgMikgJiAweGZjMDAwMDAwKSA9PSAweDBjMDAwMDAwKSB7IC8v
IGphbAorICAgICAgICAgICAgaWYgKChyZWludGVycHJldF9jYXN0PGludHB0cl90Pihmcm9tKSAt
IDQpID4+IDI4CisgICAgICAgICAgICAgICAgPT0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4o
dG8pID4+IDI4KSB7CisgICAgICAgICAgICAgICAgKihpbnNuICsgMikgPSAweDBjMDAwMDAwIHwg
KChyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgPj4gMikgJiAweDNmZmZmZmYpOworICAg
ICAgICAgICAgICAgIHJldHVybiBzaXplb2YoTUlQU1dvcmQpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAvKiBsdWkgJDI1LCAodG8gPj4gMTYpICYgMHhmZmZmICovCisgICAgICAgICAg
ICAqaW5zbiA9IDB4M2MwMDAwMDAgfCAoTUlQU1JlZ2lzdGVyczo6dDkgPDwgT1BfU0hfUlQpIHwg
KChyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgPj4gMTYpICYgMHhmZmZmKTsKKyAgICAg
ICAgICAgIC8qIG9yaSAkMjUsICQyNSwgdG8gJiAweGZmZmYgKi8KKyAgICAgICAgICAgICooaW5z
biArIDEpID0gMHgzNDAwMDAwMCB8IChNSVBTUmVnaXN0ZXJzOjp0OSA8PCBPUF9TSF9SVCkgfCAo
TUlQU1JlZ2lzdGVyczo6dDkgPDwgT1BfU0hfUlMpIHwgKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRy
X3Q+KHRvKSAmIDB4ZmZmZik7CisgICAgICAgICAgICAvKiBqYWxyICQyNSAqLworICAgICAgICAg
ICAgKihpbnNuICsgMikgPSAweDAwMDBmODA5IHwgKE1JUFNSZWdpc3RlcnM6OnQ5IDw8IE9QX1NI
X1JTKTsKKyAgICAgICAgICAgIHJldHVybiAzICogc2l6ZW9mKE1JUFNXb3JkKTsKKyAgICAgICAg
fQorCisgICAgICAgIEFTU0VSVCgoKmluc24gJiAweGZmZTAwMDAwKSA9PSAweDNjMDAwMDAwKTsg
Ly8gbHVpCisgICAgICAgIEFTU0VSVCgoKihpbnNuICsgMSkgJiAweGZjMDAwMDAwKSA9PSAweDM0
MDAwMDAwKTsgLy8gb3JpCisKKyAgICAgICAgLyogbHVpICovCisgICAgICAgICppbnNuID0gKCpp
bnNuICYgMHhmZmZmMDAwMCkgfCAoKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSA+PiAx
NikgJiAweGZmZmYpOworICAgICAgICAvKiBvcmkgKi8KKyAgICAgICAgKihpbnNuICsgMSkgPSAo
KihpbnNuICsgMSkgJiAweGZmZmYwMDAwKSB8IChyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0
bykgJiAweGZmZmYpOworICAgICAgICByZXR1cm4gMiAqIHNpemVvZihNSVBTV29yZCk7CisgICAg
fQorCisgICAgQXNzZW1ibGVyQnVmZmVyIG1fYnVmZmVyOworICAgIEp1bXBzIG1fanVtcHM7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShBU1NFTUJMRVIpICYm
IFBMQVRGT1JNKE1JUFMpCisKKyNlbmRpZiAvLyBNSVBTQXNzZW1ibGVyX2gKSW5kZXg6IGFzc2Vt
Ymxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYXNzZW1ibGVyL0Fi
c3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gNTE1NTIpCisrKyBhc3NlbWJsZXIvQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsNyArMTczLDcgQEAK
ICAgICBzdHJ1Y3QgSW1tMzIgewogICAgICAgICBleHBsaWNpdCBJbW0zMihpbnQzMl90IHZhbHVl
KQogICAgICAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQotI2lmIFBMQVRGT1JNKEFSTSkKKyNpZiBQ
TEFURk9STShBUk0pIHx8IFBMQVRGT1JNKE1JUFMpCiAgICAgICAgICAgICAsIG1faXNQb2ludGVy
KGZhbHNlKQogI2VuZGlmCiAgICAgICAgIHsKQEAgLTE4Miw3ICsxODIsNyBAQAogI2lmICFQTEFU
Rk9STShYODZfNjQpCiAgICAgICAgIGV4cGxpY2l0IEltbTMyKEltbVB0ciBwdHIpCiAgICAgICAg
ICAgICA6IG1fdmFsdWUocHRyLmFzSW50cHRyKCkpCi0jaWYgUExBVEZPUk0oQVJNKQorI2lmIFBM
QVRGT1JNKEFSTSkgfHwgUExBVEZPUk0oTUlQUykKICAgICAgICAgICAgICwgbV9pc1BvaW50ZXIo
dHJ1ZSkKICNlbmRpZgogICAgICAgICB7CkBAIC0xOTAsMTMgKzE5MCwxNCBAQAogI2VuZGlmCiAK
ICAgICAgICAgaW50MzJfdCBtX3ZhbHVlOwotI2lmIFBMQVRGT1JNKEFSTSkKKyNpZiBQTEFURk9S
TShBUk0pIHx8IFBMQVRGT1JNKE1JUFMpCiAgICAgICAgIC8vIFdlIHJlbHkgb24gYmVpbmcgYWJs
ZSB0byByZWdlbmVyYXRlIGNvZGUgdG8gcmVjb3ZlciBleGNlcHRpb24gaGFuZGxpbmcKICAgICAg
ICAgLy8gaW5mb3JtYXRpb24uICBTaW5jZSBBUk12NyBzdXBwb3J0cyAxNi1iaXQgaW1tZWRpYXRl
cyB0aGVyZSBpcyBhIGRhbmdlcgogICAgICAgICAvLyB0aGF0IGlmIHBvaW50ZXIgdmFsdWVzIGNo
YW5nZSB0aGUgbGF5b3V0IG9mIHRoZSBnZW5lcmF0ZWQgY29kZSB3aWxsIGNoYW5nZS4KICAgICAg
ICAgLy8gVG8gYXZvaWQgdGhpcyBwcm9ibGVtLCBhbHdheXMgZ2VuZXJhdGUgcG9pbnRlcnMgKGFu
ZCB0aHVzIEltbTMycyBjb25zdHJ1Y3RlZAogICAgICAgICAvLyBmcm9tIEltbVB0cnMpIHdpdGgg
YSBjb2RlIHNlcXVlbmNlIHRoYXQgaXMgYWJsZSAgdG8gcmVwcmVzZW50ICBhbnkgcG9pbnRlcgog
ICAgICAgICAvLyB2YWx1ZSAtIGRvbid0IHVzZSBhIG1vcmUgY29tcGFjdCBmb3JtIGluIHRoZXNl
IGNhc2VzLgorICAgICAgICAvLyBTYW1lIGZvciBNSVBTLgogICAgICAgICBib29sIG1faXNQb2lu
dGVyOwogI2VuZGlmCiAgICAgfTsKSW5kZXg6IGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlck1JUFMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmgJKHJldmlzaW9u
IDApCisrKyBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTY2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTUlQUyBUZWNobm9sb2dpZXMs
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIE1JUFMgVEVDSE5PTE9HSUVTLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgTUlQUyBURUNITk9MT0dJRVMsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE1hY3JvQXNz
ZW1ibGVyTUlQU19oCisjZGVmaW5lIE1hY3JvQXNzZW1ibGVyTUlQU19oCisKKyNpbmNsdWRlIDx3
dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShBU1NFTUJMRVIpICYmIFBMQVRGT1JNKE1JUFMp
CisKKyNpbmNsdWRlICJNSVBTQXNzZW1ibGVyLmgiCisjaW5jbHVkZSAiQWJzdHJhY3RNYWNyb0Fz
c2VtYmxlci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgTWFjcm9Bc3NlbWJsZXJNSVBT
IDogcHVibGljIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI8TUlQU0Fzc2VtYmxlcj4geworcHVibGlj
OgorCisgICAgTWFjcm9Bc3NlbWJsZXJNSVBTKCkKKyAgICAgICAgOiBtX2ZpeGVkV2lkdGgoZmFs
c2UpCisgICAgeworICAgIH0KKworICAgIHN0YXRpYyBjb25zdCBTY2FsZSBTY2FsZVB0ciA9IFRp
bWVzRm91cjsKKworICAgIC8vIEZvciBzdG9yaW5nIGltbWVkaWF0ZSBudW1iZXIKKyAgICBzdGF0
aWMgY29uc3QgUmVnaXN0ZXJJRCBpbW1UZW1wUmVnaXN0ZXIgPSBNSVBTUmVnaXN0ZXJzOjp0MDsK
KyAgICAvLyBGb3Igc3RvcmluZyBkYXRhIGxvYWRlZCBmcm9tIHRoZSBtZW1vcnkKKyAgICBzdGF0
aWMgY29uc3QgUmVnaXN0ZXJJRCBkYXRhVGVtcFJlZ2lzdGVyID0gTUlQU1JlZ2lzdGVyczo6dDE7
CisgICAgLy8gRm9yIHN0b3JpbmcgYWRkcmVzcyBiYXNlCisgICAgc3RhdGljIGNvbnN0IFJlZ2lz
dGVySUQgYWRkclRlbXBSZWdpc3RlciA9IE1JUFNSZWdpc3RlcnM6OnQyOworICAgIC8vIEZvciBz
dG9yaW5nIGNvbXBhcmUgcmVzdWx0CisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgY21wVGVt
cFJlZ2lzdGVyID0gTUlQU1JlZ2lzdGVyczo6dDM7CisKKyAgICAvLyBGUCB0ZW1wIHJlZ2lzdGVy
CisgICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBmcFRlbXBSZWdpc3RlciA9IE1JUFNSZWdp
c3RlcnM6OmYxNjsKKworICAgIGVudW0gQ29uZGl0aW9uIHsKKyAgICAgICAgRXF1YWwsCisgICAg
ICAgIE5vdEVxdWFsLAorICAgICAgICBBYm92ZSwKKyAgICAgICAgQWJvdmVPckVxdWFsLAorICAg
ICAgICBCZWxvdywKKyAgICAgICAgQmVsb3dPckVxdWFsLAorICAgICAgICBHcmVhdGVyVGhhbiwK
KyAgICAgICAgR3JlYXRlclRoYW5PckVxdWFsLAorICAgICAgICBMZXNzVGhhbiwKKyAgICAgICAg
TGVzc1RoYW5PckVxdWFsLAorICAgICAgICBPdmVyZmxvdywKKyAgICAgICAgU2lnbmVkLAorICAg
ICAgICBaZXJvLAorICAgICAgICBOb25aZXJvCisgICAgfTsKKworICAgIGVudW0gRG91YmxlQ29u
ZGl0aW9uIHsKKyAgICAgICAgRG91YmxlRXF1YWwsCisgICAgICAgIERvdWJsZU5vdEVxdWFsLAor
ICAgICAgICBEb3VibGVHcmVhdGVyVGhhbiwKKyAgICAgICAgRG91YmxlR3JlYXRlclRoYW5PckVx
dWFsLAorICAgICAgICBEb3VibGVMZXNzVGhhbiwKKyAgICAgICAgRG91YmxlTGVzc1RoYW5PckVx
dWFsLAorICAgICAgICBEb3VibGVFcXVhbE9yVW5vcmRlcmVkLAorICAgICAgICBEb3VibGVOb3RF
cXVhbE9yVW5vcmRlcmVkLAorICAgICAgICBEb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkLAor
ICAgICAgICBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCwKKyAgICAgICAgRG91
YmxlTGVzc1RoYW5PclVub3JkZXJlZCwKKyAgICAgICAgRG91YmxlTGVzc1RoYW5PckVxdWFsT3JV
bm9yZGVyZWQKKyAgICB9OworCisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIgPSBNSVBTUmVnaXN0ZXJzOjpzcDsKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0
ZXJJRCByZXR1cm5BZGRyZXNzUmVnaXN0ZXIgPSBNSVBTUmVnaXN0ZXJzOjpyYTsKKworICAgIC8v
IEludGVnZXIgYXJpdGhtZXRpYyBvcGVyYXRpb25zOgorICAgIC8vCisgICAgLy8gT3BlcmF0aW9u
cyBhcmUgdHlwaWNhbGx5IHR3byBvcGVyYW5kIC0gb3BlcmF0aW9uKHNvdXJjZSwgc3JjRHN0KQor
ICAgIC8vIEZvciBtYW55IG9wZXJhdGlvbnMgdGhlIHNvdXJjZSBtYXkgYmUgYW4gSW1tMzIsIHRo
ZSBzcmNEc3Qgb3BlcmFuZAorICAgIC8vIG1heSBvZnRlbiBiZSBhIG1lbW9yeSBsb2NhdGlvbiAo
ZXhwbGljdGx5IGRlc2NyaWJlZCB1c2luZyBhbiBBZGRyZXNzCisgICAgLy8gb2JqZWN0KS4KKwor
ICAgIHZvaWQgYWRkMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoZGVzdCwgZGVzdCwgc3JjKTsKKyAgICB9CisKKyAgICB2
b2lkIGFkZDMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgYWRk
MzIoaW1tLCBkZXN0LCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGFkZDMyKEltbTMyIGltbSwg
UmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlmICghaW1t
Lm1faXNQb2ludGVyICYmIGltbS5tX3ZhbHVlID49IC0zMjc2OCAmJiBpbW0ubV92YWx1ZSA8PSAz
Mjc2NworICAgICAgICAgICAgJiYgIW1fZml4ZWRXaWR0aCkgeworICAgICAgICAgICAgLyoKKyAg
ICAgICAgICAgICAgYWRkaXUgICAgIGRlc3QsIHNyYywgaW1tCisgICAgICAgICAgICAqLworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuYWRkaXUoZGVzdCwgc3JjLCBpbW0ubV92YWx1ZSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICBsaSAgICAgICAgaW1t
VGVtcCwgaW1tCisgICAgICAgICAgICAgIGFkZHUgICAgICBkZXN0LCBzcmMsIGltbVRlbXAKKyAg
ICAgICAgICAgICovCisgICAgICAgICAgICBtb3ZlKGltbSwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoZGVzdCwgc3JjLCBpbW1UZW1wUmVnaXN0ZXIpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBhZGQzMihJbW0zMiBpbW0sIEFkZHJlc3MgYWRk
cmVzcykKKyAgICB7CisgICAgICAgIGlmIChhZGRyZXNzLm9mZnNldCA+PSAtMzI3NjggJiYgYWRk
cmVzcy5vZmZzZXQgPD0gMzI3NjcKKyAgICAgICAgICAgICYmICFtX2ZpeGVkV2lkdGgpIHsKKyAg
ICAgICAgICAgIC8qCisgICAgICAgICAgICAgIGx3ICAgICAgICBkYXRhVGVtcCwgb2Zmc2V0KGJh
c2UpCisgICAgICAgICAgICAgIGxpICAgICAgICBpbW1UZW1wLCBpbW0KKyAgICAgICAgICAgICAg
YWRkdSAgICAgIGRhdGFUZW1wLCBkYXRhVGVtcCwgaW1tVGVtcAorICAgICAgICAgICAgICBzdyAg
ICAgICAgZGF0YVRlbXAsIG9mZnNldChiYXNlKQorICAgICAgICAgICAgKi8KKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmx3KGRhdGFUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5v
ZmZzZXQpOworICAgICAgICAgICAgaWYgKCFpbW0ubV9pc1BvaW50ZXIKKyAgICAgICAgICAgICAg
ICAmJiBpbW0ubV92YWx1ZSA+PSAtMzI3NjggJiYgaW1tLm1fdmFsdWUgPD0gMzI3NjcKKyAgICAg
ICAgICAgICAgICAmJiAhbV9maXhlZFdpZHRoKQorICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVy
LmFkZGl1KGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW1tLm1fdmFsdWUpOworICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgbW92ZShpbW0sIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuYWRkdShkYXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN3KGRhdGFUZW1wUmVnaXN0ZXIsIGFk
ZHJlc3MuYmFzZSwgYWRkcmVzcy5vZmZzZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgLyoKKyAgICAgICAgICAgICAgbHVpICAgICAgIGFkZHJUZW1wLCAob2Zmc2V0ICsgMHg4MDAw
KSA+PiAxNgorICAgICAgICAgICAgICBhZGR1ICAgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBiYXNl
CisgICAgICAgICAgICAgIGx3ICAgICAgICBkYXRhVGVtcCwgKG9mZnNldCAmIDB4ZmZmZikoYWRk
clRlbXApCisgICAgICAgICAgICAgIGxpICAgICAgICBpbW10ZW1wLCBpbW0KKyAgICAgICAgICAg
ICAgYWRkdSAgICAgIGRhdGFUZW1wLCBkYXRhVGVtcCwgaW1tVGVtcAorICAgICAgICAgICAgICBz
dyAgICAgICAgZGF0YVRlbXAsIChvZmZzZXQgJiAweGZmZmYpKGFkZHJUZW1wKQorICAgICAgICAg
ICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx1aShhZGRyVGVtcFJlZ2lzdGVyLCAoYWRk
cmVzcy5vZmZzZXQgKyAweDgwMDApID4+IDE2KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFk
ZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlKTsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLmx3KGRhdGFUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0
ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKworICAgICAgICAgICAgaWYgKGltbS5tX3ZhbHVlID49IC0z
Mjc2OCAmJiBpbW0ubV92YWx1ZSA8PSAzMjc2NyAmJiAhbV9maXhlZFdpZHRoKQorICAgICAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLmFkZGl1KGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1tLm1fdmFsdWUpOworICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbW92ZShpbW0sIGltbVRlbXBSZWdpc3Rl
cik7CisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShkYXRhVGVtcFJlZ2lzdGVyLCBk
YXRhVGVtcFJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1tVGVt
cFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN3KGRh
dGFUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHZvaWQgYWRkMzIoQWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB7CisgICAgICAgIGxvYWQzMihzcmMsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAg
ICBhZGQzMihkYXRhVGVtcFJlZ2lzdGVyLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGFkZDMy
KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBpZiAoZGVzdC5v
ZmZzZXQgPj0gLTMyNzY4ICYmIGRlc3Qub2Zmc2V0IDw9IDMyNzY3ICYmICFtX2ZpeGVkV2lkdGgp
IHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgIGx3ICAgICAgICBkYXRhVGVtcCwgb2Zm
c2V0KGJhc2UpCisgICAgICAgICAgICAgIGFkZHUgICAgICBkYXRhVGVtcCwgZGF0YVRlbXAsIHNy
YworICAgICAgICAgICAgICBzdyAgICAgICAgZGF0YVRlbXAsIG9mZnNldChiYXNlKQorICAgICAg
ICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx3KGRhdGFUZW1wUmVnaXN0ZXIsIGRl
c3QuYmFzZSwgZGVzdC5vZmZzZXQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShkYXRh
VGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLCBzcmMpOworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIuc3coZGF0YVRlbXBSZWdpc3RlciwgZGVzdC5iYXNlLCBkZXN0Lm9mZnNldCk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICBsdWkgICAgICAgYWRk
clRlbXAsIChvZmZzZXQgKyAweDgwMDApID4+IDE2CisgICAgICAgICAgICAgIGFkZHUgICAgICBh
ZGRyVGVtcCwgYWRkclRlbXAsIGJhc2UKKyAgICAgICAgICAgICAgbHcgICAgICAgIGRhdGFUZW1w
LCAob2Zmc2V0ICYgMHhmZmZmKShhZGRyVGVtcCkKKyAgICAgICAgICAgICAgYWRkdSAgICAgIGRh
dGFUZW1wLCBkYXRhVGVtcCwgc3JjCisgICAgICAgICAgICAgIHN3ICAgICAgICBkYXRhVGVtcCwg
KG9mZnNldCAmIDB4ZmZmZikoYWRkclRlbXApCisgICAgICAgICAgICAqLworICAgICAgICAgICAg
bV9hc3NlbWJsZXIubHVpKGFkZHJUZW1wUmVnaXN0ZXIsIChkZXN0Lm9mZnNldCArIDB4ODAwMCkg
Pj4gMTYpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBh
ZGRyVGVtcFJlZ2lzdGVyLCBkZXN0LmJhc2UpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHco
ZGF0YVRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgZGVzdC5vZmZzZXQpOworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuYWRkdShkYXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVy
LCBzcmMpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3coZGF0YVRlbXBSZWdpc3RlciwgYWRk
clRlbXBSZWdpc3RlciwgZGVzdC5vZmZzZXQpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9p
ZCBhZGQzMihJbW0zMiBpbW0sIEFic29sdXRlQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAg
ICAgLyoKKyAgICAgICAgICAgbGkgICBhZGRyVGVtcCwgYWRkcmVzcworICAgICAgICAgICBsaSAg
IGltbVRlbXAsIGltbQorICAgICAgICAgICBsdyAgIGRhdGFUZW1wLCAwKGFkZHJUZW1wKQorICAg
ICAgICAgICBhZGR1IGRhdGFUZW1wLCBkYXRhVGVtcCwgaW1tVGVtcAorICAgICAgICAgICBzdyAg
IGRhdGFUZW1wLCAwKGFkZHJUZW1wKQorICAgICAgICAqLworICAgICAgICBtb3ZlKEltbVB0cihh
ZGRyZXNzLm1fcHRyKSwgYWRkclRlbXBSZWdpc3Rlcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmx3
KGRhdGFUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIDApOworICAgICAgICBpZiAoIWlt
bS5tX2lzUG9pbnRlciAmJiBpbW0ubV92YWx1ZSA+PSAtMzI3NjggJiYgaW1tLm1fdmFsdWUgPD0g
MzI3NjcKKyAgICAgICAgICAgICYmICFtX2ZpeGVkV2lkdGgpCisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5hZGRpdShkYXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLCBpbW0ubV92YWx1
ZSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbW92ZShpbW0sIGltbVRlbXBSZWdpc3Rl
cik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFU
ZW1wUmVnaXN0ZXIsIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgIH0KKyAgICAgICAgbV9hc3Nl
bWJsZXIuc3coZGF0YVRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgMCk7CisgICAgfQor
CisgICAgdm9pZCBhbmQzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIuYW5kX2luc24oZGVzdCwgZGVzdCwgc3JjKTsKKyAgICB9CisK
KyAgICB2b2lkIGFuZDMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAg
ICAgaWYgKCFpbW0ubV9pc1BvaW50ZXIgJiYgaW1tLm1fdmFsdWUgPT0gMCAmJiAhbV9maXhlZFdp
ZHRoKQorICAgICAgICAgICAgbW92ZShNSVBTUmVnaXN0ZXJzOjp6ZXJvLCBkZXN0KTsKKyAgICAg
ICAgZWxzZSBpZiAoIWltbS5tX2lzUG9pbnRlciAmJiBpbW0ubV92YWx1ZSA+IDAgJiYgaW1tLm1f
dmFsdWUgPCA2NTUzNQorICAgICAgICAgICAgICAgICAmJiAhbV9maXhlZFdpZHRoKQorICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuYW5kaShkZXN0LCBkZXN0LCBpbW0ubV92YWx1ZSk7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgbGkgICAgICAgIGltbVRlbXAs
IGltbQorICAgICAgICAgICAgICBhbmQgICAgICAgZGVzdCwgZGVzdCwgaW1tVGVtcAorICAgICAg
ICAgICAgKi8KKyAgICAgICAgICAgIG1vdmUoaW1tLCBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuYW5kX2luc24oZGVzdCwgZGVzdCwgaW1tVGVtcFJlZ2lzdGVyKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgbHNoaWZ0MzIoSW1tMzIgaW1tLCBSZWdpc3Rl
cklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zbGwoZGVzdCwgZGVzdCwgaW1t
Lm1fdmFsdWUpOworICAgIH0KKworICAgIHZvaWQgbHNoaWZ0MzIoUmVnaXN0ZXJJRCBzaGlmdF9h
bW91bnQsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnNsbHYo
ZGVzdCwgZGVzdCwgc2hpZnRfYW1vdW50KTsKKyAgICB9CisKKyAgICB2b2lkIG11bDMyKFJlZ2lz
dGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5t
dWwoZGVzdCwgZGVzdCwgc3JjKTsKKyAgICB9CisKKyAgICB2b2lkIG11bDMyKEltbTMyIGltbSwg
UmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlmICghaW1t
Lm1faXNQb2ludGVyICYmIGltbS5tX3ZhbHVlID09IDAgJiYgIW1fZml4ZWRXaWR0aCkKKyAgICAg
ICAgICAgIG1vdmUoTUlQU1JlZ2lzdGVyczo6emVybywgZGVzdCk7CisgICAgICAgIGVsc2UgaWYg
KCFpbW0ubV9pc1BvaW50ZXIgJiYgaW1tLm1fdmFsdWUgPT0gMSAmJiAhbV9maXhlZFdpZHRoKQor
ICAgICAgICAgICAgbW92ZShzcmMsIGRlc3QpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IC8qCisgICAgICAgICAgICAgICAgbGkgICAgICBkYXRhVGVtcCwgaW1tCisgICAgICAgICAgICAg
ICAgbXVsICAgICBkZXN0LCBzcmMsIGRhdGFUZW1wCisgICAgICAgICAgICAqLworICAgICAgICAg
ICAgbW92ZShpbW0sIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
bXVsKGRlc3QsIHNyYywgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICB2b2lkIG5vdDMyKFJlZ2lzdGVySUQgc3JjRGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLm5vcihzcmNEZXN0LCBzcmNEZXN0LCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsKKyAgICB9CisK
KyAgICB2b2lkIG9yMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLm9yX2luc24oZGVzdCwgZGVzdCwgc3JjKTsKKyAgICB9CisKKyAg
ICB2b2lkIG9yMzIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBp
ZiAoIWltbS5tX2lzUG9pbnRlciAmJiBpbW0ubV92YWx1ZSA9PSAwICYmICFtX2ZpeGVkV2lkdGgp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKCFpbW0ubV9pc1BvaW50ZXIgJiYg
aW1tLm1fdmFsdWUgPiAwICYmIGltbS5tX3ZhbHVlIDwgNjU1MzUKKyAgICAgICAgICAgICYmICFt
X2ZpeGVkV2lkdGgpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm9yaShkZXN0LCBkZXN0LCBp
bW0ubV92YWx1ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAv
KgorICAgICAgICAgICAgbGkgICAgICBkYXRhVGVtcCwgaW1tCisgICAgICAgICAgICBvciAgICAg
IGRlc3QsIGRlc3QsIGRhdGFUZW1wCisgICAgICAgICovCisgICAgICAgIG1vdmUoaW1tLCBkYXRh
VGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIub3JfaW5zbihkZXN0LCBkZXN0LCBk
YXRhVGVtcFJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICB2b2lkIHJzaGlmdDMyKFJlZ2lzdGVySUQg
c2hpZnRfYW1vdW50LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5zcmF2KGRlc3QsIGRlc3QsIHNoaWZ0X2Ftb3VudCk7CisgICAgfQorCisgICAgdm9pZCByc2hp
ZnQzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLnNyYShkZXN0LCBkZXN0LCBpbW0ubV92YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBzdWIz
MihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuc3VidShkZXN0LCBkZXN0LCBzcmMpOworICAgIH0KKworICAgIHZvaWQgc3ViMzIoSW1t
MzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAoIWltbS5tX2lzUG9p
bnRlciAmJiBpbW0ubV92YWx1ZSA+PSAtMzI3NjcgJiYgaW1tLm1fdmFsdWUgPD0gMzI3NjgKKyAg
ICAgICAgICAgICYmICFtX2ZpeGVkV2lkdGgpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAg
ICAgIGFkZGl1ICAgICBkZXN0LCBzcmMsIGltbQorICAgICAgICAgICAgKi8KKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmFkZGl1KGRlc3QsIGRlc3QsIC1pbW0ubV92YWx1ZSk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICBsaSAgICAgICAgaW1tVGVtcCwg
aW1tCisgICAgICAgICAgICAgIHN1YnUgICAgICBkZXN0LCBzcmMsIGltbVRlbXAKKyAgICAgICAg
ICAgICovCisgICAgICAgICAgICBtb3ZlKGltbSwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLnN1YnUoZGVzdCwgZGVzdCwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHZvaWQgc3ViMzIoSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3Mp
CisgICAgeworICAgICAgICBpZiAoYWRkcmVzcy5vZmZzZXQgPj0gLTMyNzY4ICYmIGFkZHJlc3Mu
b2Zmc2V0IDw9IDMyNzY3CisgICAgICAgICAgICAmJiAhbV9maXhlZFdpZHRoKSB7CisgICAgICAg
ICAgICAvKgorICAgICAgICAgICAgICBsdyAgICAgICAgZGF0YVRlbXAsIG9mZnNldChiYXNlKQor
ICAgICAgICAgICAgICBsaSAgICAgICAgaW1tVGVtcCwgaW1tCisgICAgICAgICAgICAgIHN1YnUg
ICAgICBkYXRhVGVtcCwgZGF0YVRlbXAsIGltbVRlbXAKKyAgICAgICAgICAgICAgc3cgICAgICAg
IGRhdGFUZW1wLCBvZmZzZXQoYmFzZSkKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5sdyhkYXRhVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mub2Zmc2V0
KTsKKyAgICAgICAgICAgIGlmICghaW1tLm1faXNQb2ludGVyCisgICAgICAgICAgICAgICAgJiYg
aW1tLm1fdmFsdWUgPj0gLTMyNzY3ICYmIGltbS5tX3ZhbHVlIDw9IDMyNzY4CisgICAgICAgICAg
ICAgICAgJiYgIW1fZml4ZWRXaWR0aCkKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRp
dShkYXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC1pbW0ubV92YWx1ZSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBtb3ZlKGltbSwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBt
X2Fzc2VtYmxlci5zdWJ1KGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3coZGF0YVRlbXBSZWdpc3RlciwgYWRkcmVz
cy5iYXNlLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAv
KgorICAgICAgICAgICAgICBsdWkgICAgICAgYWRkclRlbXAsIChvZmZzZXQgKyAweDgwMDApID4+
IDE2CisgICAgICAgICAgICAgIGFkZHUgICAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGJhc2UKKyAg
ICAgICAgICAgICAgbHcgICAgICAgIGRhdGFUZW1wLCAob2Zmc2V0ICYgMHhmZmZmKShhZGRyVGVt
cCkKKyAgICAgICAgICAgICAgbGkgICAgICAgIGltbXRlbXAsIGltbQorICAgICAgICAgICAgICBz
dWJ1ICAgICAgZGF0YVRlbXAsIGRhdGFUZW1wLCBpbW1UZW1wCisgICAgICAgICAgICAgIHN3ICAg
ICAgICBkYXRhVGVtcCwgKG9mZnNldCAmIDB4ZmZmZikoYWRkclRlbXApCisgICAgICAgICAgICAq
LworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHVpKGFkZHJUZW1wUmVnaXN0ZXIsIChhZGRyZXNz
Lm9mZnNldCArIDB4ODAwMCkgPj4gMTYpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShh
ZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UpOworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIubHcoZGF0YVRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3Rlciwg
YWRkcmVzcy5vZmZzZXQpOworCisgICAgICAgICAgICBpZiAoIWltbS5tX2lzUG9pbnRlcgorICAg
ICAgICAgICAgICAgICYmIGltbS5tX3ZhbHVlID49IC0zMjc2NyAmJiBpbW0ubV92YWx1ZSA8PSAz
Mjc2OAorICAgICAgICAgICAgICAgICYmICFtX2ZpeGVkV2lkdGgpCisgICAgICAgICAgICAgICAg
bV9hc3NlbWJsZXIuYWRkaXUoZGF0YVRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3RlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtaW1tLm1fdmFsdWUpOworICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbW92ZShpbW0sIGltbVRlbXBSZWdpc3Rlcik7Cisg
ICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3VidShkYXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVt
cFJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1tVGVtcFJlZ2lz
dGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN3KGRhdGFUZW1w
UmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHZvaWQgc3ViMzIoQWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAg
ICB7CisgICAgICAgIGxvYWQzMihzcmMsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICBzdWIz
MihkYXRhVGVtcFJlZ2lzdGVyLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHN1YjMyKEltbTMy
IGltbSwgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICAvKgorICAgICAg
ICAgICBsaSAgIGFkZHJUZW1wLCBhZGRyZXNzCisgICAgICAgICAgIGxpICAgaW1tVGVtcCwgaW1t
CisgICAgICAgICAgIGx3ICAgZGF0YVRlbXAsIDAoYWRkclRlbXApCisgICAgICAgICAgIHN1YnUg
ZGF0YVRlbXAsIGRhdGFUZW1wLCBpbW1UZW1wCisgICAgICAgICAgIHN3ICAgZGF0YVRlbXAsIDAo
YWRkclRlbXApCisgICAgICAgICovCisgICAgICAgIG1vdmUoSW1tUHRyKGFkZHJlc3MubV9wdHIp
LCBhZGRyVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubHcoZGF0YVRlbXBSZWdp
c3RlciwgYWRkclRlbXBSZWdpc3RlciwgMCk7CisKKyAgICAgICAgaWYgKCFpbW0ubV9pc1BvaW50
ZXIgJiYgaW1tLm1fdmFsdWUgPj0gLTMyNzY3ICYmIGltbS5tX3ZhbHVlIDw9IDMyNzY4CisgICAg
ICAgICAgICAmJiAhbV9maXhlZFdpZHRoKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRp
dShkYXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLWltbS5tX3ZhbHVlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IG1vdmUoaW1tLCBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3Vi
dShkYXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLCBpbW1UZW1wUmVnaXN0ZXIpOwor
ICAgICAgICB9CisgICAgICAgIG1fYXNzZW1ibGVyLnN3KGRhdGFUZW1wUmVnaXN0ZXIsIGFkZHJU
ZW1wUmVnaXN0ZXIsIDApOworICAgIH0KKworICAgIHZvaWQgeG9yMzIoUmVnaXN0ZXJJRCBzcmMs
IFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnhvcl9pbnNuKGRl
c3QsIGRlc3QsIHNyYyk7CisgICAgfQorCisgICAgdm9pZCB4b3IzMihJbW0zMiBpbW0sIFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAgICBsaSAgaW1tVGVtcCwg
aW1tCisgICAgICAgICAgICB4b3IgZGVzdCwgZGVzdCwgaW1tVGVtcAorICAgICAgICAqLworICAg
ICAgICBtb3ZlKGltbSwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIueG9y
X2luc24oZGVzdCwgZGVzdCwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICAvLyBNZW1v
cnkgYWNjZXNzIG9wZXJhdGlvbnM6CisgICAgLy8KKyAgICAvLyBMb2FkcyBhcmUgb2YgdGhlIGZv
cm0gbG9hZChhZGRyZXNzLCBkZXN0aW5hdGlvbikgYW5kIHN0b3JlcyBvZiB0aGUgZm9ybQorICAg
IC8vIHN0b3JlKHNvdXJjZSwgYWRkcmVzcykuICBUaGUgc291cmNlIGZvciBhIHN0b3JlIG1heSBi
ZSBhbiBJbW0zMi4gIEFkZHJlc3MKKyAgICAvLyBvcGVyYW5kIG9iamVjdHMgdG8gbG9hZHMgYW5k
IHN0b3JlIHdpbGwgYmUgaW1wbGljaXRseSBjb25zdHJ1Y3RlZCBpZiBhCisgICAgLy8gcmVnaXN0
ZXIgaXMgcGFzc2VkLgorCisgICAgdm9pZCBsb2FkMzIoSW1wbGljaXRBZGRyZXNzIGFkZHJlc3Ms
IFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlmIChhZGRyZXNzLm9mZnNldCA+PSAt
MzI3NjggJiYgYWRkcmVzcy5vZmZzZXQgPD0gMzI3NjcKKyAgICAgICAgICAgICYmICFtX2ZpeGVk
V2lkdGgpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sdyhkZXN0LCBhZGRyZXNzLmJhc2UsIGFk
ZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKgorICAgICAgICAg
ICAgICAgIGx1aSAgICAgYWRkclRlbXAsIChvZmZzZXQgKyAweDgwMDApID4+IDE2CisgICAgICAg
ICAgICAgICAgYWRkdSAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGJhc2UKKyAgICAgICAgICAgICAg
ICBsdyAgICAgIGRlc3QsIChvZmZzZXQgJiAweGZmZmYpKGFkZHJUZW1wKQorICAgICAgICAgICAg
ICAqLworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHVpKGFkZHJUZW1wUmVnaXN0ZXIsIChhZGRy
ZXNzLm9mZnNldCArIDB4ODAwMCkgPj4gMTYpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRk
dShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UpOworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIubHcoZGVzdCwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5v
ZmZzZXQpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBsb2FkMzIoQmFzZUluZGV4IGFk
ZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlmIChhZGRyZXNzLm9mZnNl
dCA+PSAtMzI3NjggJiYgYWRkcmVzcy5vZmZzZXQgPD0gMzI3NjcKKyAgICAgICAgICAgICYmICFt
X2ZpeGVkV2lkdGgpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgc2xsICAgICBh
ZGRyVGVtcCwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZQorICAgICAgICAgICAgICAgIGFk
ZHUgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBhZGRyZXNzLmJhc2UKKyAgICAgICAgICAgICAgICBs
dyAgICAgIGRlc3QsIGFkZHJlc3Mub2Zmc2V0KGFkZHJUZW1wKQorICAgICAgICAgICAgKi8KKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLnNsbChhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmluZGV4
LCBhZGRyZXNzLnNjYWxlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBS
ZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlKTsKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLmx3KGRlc3QsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgc2xsICAgICBh
ZGRyVGVtcCwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZQorICAgICAgICAgICAgICAgIGFk
ZHUgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBhZGRyZXNzLmJhc2UKKyAgICAgICAgICAgICAgICBs
dWkgICAgIGltbVRlbXAsIChhZGRyZXNzLm9mZnNldCArIDB4ODAwMCkgPj4gMTYKKyAgICAgICAg
ICAgICAgICBhZGR1ICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgaW1tVGVtcAorICAgICAgICAgICAg
ICAgIGx3ICAgICAgZGVzdCwgKGFkZHJlc3Mub2Zmc2V0ICYgMHhmZmZmKShhdCkKKyAgICAgICAg
ICAgICovCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbGwoYWRkclRlbXBSZWdpc3RlciwgYWRk
cmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1
KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSk7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5sdWkoaW1tVGVtcFJlZ2lzdGVyLCAoYWRkcmVzcy5vZmZzZXQg
KyAweDgwMDApID4+IDE2KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBS
ZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx3KGRlc3QsIGFkZHJU
ZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZv
aWQgbG9hZDMyV2l0aFVuYWxpZ25lZEhhbGZXb3JkcyhCYXNlSW5kZXggYWRkcmVzcywgUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKGFkZHJlc3Mub2Zmc2V0ID49IC0zMjc2OCAm
JiBhZGRyZXNzLm9mZnNldCA8PSAzMjc2NAorICAgICAgICAgICAgJiYgIW1fZml4ZWRXaWR0aCkg
eworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICBzbGwgICAgIGFkZHJUZW1wLCBhZGRy
ZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlCisgICAgICAgICAgICAgICAgYWRkdSAgICBhZGRyVGVt
cCwgYWRkclRlbXAsIGFkZHJlc3MuYmFzZQorICAgICAgICAgICAgICAgIChCaWctRW5kaWFuKQor
ICAgICAgICAgICAgICAgIGx3bCAgICAgZGVzdCwgYWRkcmVzcy5vZmZzZXQoYWRkclRlbXApCisg
ICAgICAgICAgICAgICAgbHdyICAgICBkZXN0LCBhZGRyZXNzLm9mZnNldCszKGFkZHJUZW1wKQor
ICAgICAgICAgICAgICAgIChMaXR0bGUtRW5kaWFuKQorICAgICAgICAgICAgICAgIGx3bCAgICAg
ZGVzdCwgYWRkcmVzcy5vZmZzZXQrMyhhZGRyVGVtcCkKKyAgICAgICAgICAgICAgICBsd3IgICAg
IGRlc3QsIGFkZHJlc3Mub2Zmc2V0KGFkZHJUZW1wKQorICAgICAgICAgICAgKi8KKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLnNsbChhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmluZGV4LCBhZGRy
ZXNzLnNjYWxlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3Rl
ciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlKTsKKyNpZiBkZWZpbmVkKF9fTUlQU0VC
X18pCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sd2woZGVzdCwgYWRkclRlbXBSZWdpc3Rlciwg
YWRkcmVzcy5vZmZzZXQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHdyKGRlc3QsIGFkZHJU
ZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0ICsgMyk7CisjZWxzZQorICAgICAgICAgICAgbV9h
c3NlbWJsZXIubHdsKGRlc3QsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0ICsgMyk7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sd3IoZGVzdCwgYWRkclRlbXBSZWdpc3RlciwgYWRk
cmVzcy5vZmZzZXQpOworCisjZW5kaWYKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8q
CisgICAgICAgICAgICAgICAgc2xsICAgICBhZGRyVGVtcCwgYWRkcmVzcy5pbmRleCwgYWRkcmVz
cy5zY2FsZQorICAgICAgICAgICAgICAgIGFkZHUgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBhZGRy
ZXNzLmJhc2UKKyAgICAgICAgICAgICAgICBsdWkgICAgIGltbVRlbXAsIGFkZHJlc3Mub2Zmc2V0
ID4+IDE2CisgICAgICAgICAgICAgICAgb3JpICAgICBpbW1UZW1wLCBpbW1UZW1wLCBhZGRyZXNz
Lm9mZnNldCAmIDB4ZmZmZgorICAgICAgICAgICAgICAgIGFkZHUgICAgYWRkclRlbXAsIGFkZHJU
ZW1wLCBpbW1UZW1wCisgICAgICAgICAgICAgICAgKEJpZy1FbmRpYW4pCisgICAgICAgICAgICAg
ICAgbHcgICAgICBkZXN0LCAwKGF0KQorICAgICAgICAgICAgICAgIGx3ICAgICAgZGVzdCwgMyhh
dCkKKyAgICAgICAgICAgICAgICAoTGl0dGxlLUVuZGlhbikKKyAgICAgICAgICAgICAgICBsdyAg
ICAgIGRlc3QsIDMoYXQpCisgICAgICAgICAgICAgICAgbHcgICAgICBkZXN0LCAwKGF0KQorICAg
ICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsbChhZGRyVGVtcFJlZ2lzdGVy
LCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlKTsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx1aShpbW1UZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zm
c2V0ID4+IDE2KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm9yaShpbW1UZW1wUmVnaXN0ZXIs
IGltbVRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQpOworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbW1UZW1wUmVnaXN0ZXIpOworI2lmIGRlZmluZWQoX19NSVBTRUJf
XykKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx3bChkZXN0LCBhZGRyVGVtcFJlZ2lzdGVyLCAw
KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx3cihkZXN0LCBhZGRyVGVtcFJlZ2lzdGVyLCAz
KTsKKyNlbHNlCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sd2woZGVzdCwgYWRkclRlbXBSZWdp
c3RlciwgMyk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sd3IoZGVzdCwgYWRkclRlbXBSZWdp
c3RlciwgMCk7CisjZW5kaWYKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgbG9hZDMyKHZv
aWQqIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAg
ICAgICBsaSAgYWRkclRlbXAsIGFkZHJlc3MKKyAgICAgICAgICAgIGx3ICBkZXN0LCAwKGFkZHJU
ZW1wKQorICAgICAgICAqLworICAgICAgICBtb3ZlKEltbVB0cihhZGRyZXNzKSwgYWRkclRlbXBS
ZWdpc3Rlcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmx3KGRlc3QsIGFkZHJUZW1wUmVnaXN0ZXIs
IDApOworICAgIH0KKworICAgIERhdGFMYWJlbDMyIGxvYWQzMldpdGhBZGRyZXNzT2Zmc2V0UGF0
Y2goQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Zp
eGVkV2lkdGggPSB0cnVlOworICAgICAgICAvKgorICAgICAgICAgICAgbHVpIGFkZHJUZW1wLCBh
ZGRyZXNzLm9mZnNldCA+PiAxNgorICAgICAgICAgICAgb3JpIGFkZHJUZW1wLCBhZGRyVGVtcCwg
YWRkcmVzcy5vZmZzZXQgJiAweGZmZmYKKyAgICAgICAgICAgIGFkZHUgICAgICAgIGFkZHJUZW1w
LCBhZGRyVGVtcCwgYWRkcmVzcy5iYXNlCisgICAgICAgICAgICBsdyAgZGVzdCwgMChhZGRyVGVt
cCkKKyAgICAgICAgKi8KKyAgICAgICAgRGF0YUxhYmVsMzIgZGF0YUxhYmVsKHRoaXMpOworICAg
ICAgICBtb3ZlKEltbTMyKGFkZHJlc3Mub2Zmc2V0KSwgYWRkclRlbXBSZWdpc3Rlcik7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3Rlciwg
YWRkcmVzcy5iYXNlKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubHcoZGVzdCwgYWRkclRlbXBSZWdp
c3RlciwgMCk7CisgICAgICAgIG1fZml4ZWRXaWR0aCA9IGZhbHNlOworICAgICAgICByZXR1cm4g
ZGF0YUxhYmVsOworICAgIH0KKworICAgIExhYmVsIGxvYWRQdHJXaXRoUGF0Y2hUb0xFQShBZGRy
ZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fZml4ZWRXaWR0
aCA9IHRydWU7CisgICAgICAgIC8qCisgICAgICAgICAgICBsdWkgICAgICAgICBhZGRyVGVtcCwg
YWRkcmVzcy5vZmZzZXQgPj4gMTYKKyAgICAgICAgICAgIG9yaSAgICAgICAgIGFkZHJUZW1wLCBh
ZGRyVGVtcCwgYWRkcmVzcy5vZmZzZXQgJiAweGZmZmYKKyAgICAgICAgICAgIGFkZHUgICAgICAg
IGFkZHJUZW1wLCBhZGRyVGVtcCwgYWRkcmVzcy5iYXNlCisgICAgICAgICAgICBsdyAgICAgICAg
ICBkZXN0LCAwKGFkZHJUZW1wKQorICAgICAgICAqLworICAgICAgICBMYWJlbCBsYWJlbCh0aGlz
KTsKKyAgICAgICAgbW92ZShJbW0zMihhZGRyZXNzLm9mZnNldCksIGFkZHJUZW1wUmVnaXN0ZXIp
OworICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVn
aXN0ZXIsIGFkZHJlc3MuYmFzZSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmx3KGRlc3QsIGFkZHJU
ZW1wUmVnaXN0ZXIsIDApOworICAgICAgICBtX2ZpeGVkV2lkdGggPSBmYWxzZTsKKyAgICAgICAg
cmV0dXJuIGxhYmVsOworICAgIH0KKworICAgIExhYmVsIGxvYWRQdHJXaXRoQWRkcmVzc09mZnNl
dFBhdGNoKEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGxvYWRQdHJXaXRoUGF0Y2hUb0xFQShhZGRyZXNzLCBkZXN0KTsKKyAgICB9CisKKyAg
ICAvKiBOZWVkIHRvIHVzZSB6ZXJvLWV4dGVuZWQgbG9hZCBoYWxmLXdvcmQgZm9yIGxvYWQxNi4g
ICovCisgICAgdm9pZCBsb2FkMTYoQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIGlmIChhZGRyZXNzLm9mZnNldCA+PSAtMzI3NjggJiYgYWRkcmVzcy5v
ZmZzZXQgPD0gMzI3NjcKKyAgICAgICAgICAgICYmICFtX2ZpeGVkV2lkdGgpIHsKKyAgICAgICAg
ICAgIC8qCisgICAgICAgICAgICAgICAgc2xsICAgICBhZGRyVGVtcCwgYWRkcmVzcy5pbmRleCwg
YWRkcmVzcy5zY2FsZQorICAgICAgICAgICAgICAgIGFkZHUgICAgYWRkclRlbXAsIGFkZHJUZW1w
LCBhZGRyZXNzLmJhc2UKKyAgICAgICAgICAgICAgICBsaHUgICAgIGRlc3QsIGFkZHJlc3Mub2Zm
c2V0KGFkZHJUZW1wKQorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNs
bChhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3Rl
ciwgYWRkcmVzcy5iYXNlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxodShkZXN0LCBhZGRy
VGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAvKgorICAgICAgICAgICAgICAgIHNsbCAgICAgYWRkclRlbXAsIGFkZHJlc3MuaW5kZXgs
IGFkZHJlc3Muc2NhbGUKKyAgICAgICAgICAgICAgICBhZGR1ICAgIGFkZHJUZW1wLCBhZGRyVGVt
cCwgYWRkcmVzcy5iYXNlCisgICAgICAgICAgICAgICAgbHVpICAgICBpbW1UZW1wLCAoYWRkcmVz
cy5vZmZzZXQgKyAweDgwMDApID4+IDE2CisgICAgICAgICAgICAgICAgYWRkdSAgICBhZGRyVGVt
cCwgYWRkclRlbXAsIGltbVRlbXAKKyAgICAgICAgICAgICAgICBsaHUgICAgIGRlc3QsIChhZGRy
ZXNzLm9mZnNldCAmIDB4ZmZmZikoYWRkclRlbXApCisgICAgICAgICAgICAqLworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuc2xsKGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuaW5kZXgsIGFkZHJl
c3Muc2NhbGUpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVy
LCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UpOworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIubHVpKGltbVRlbXBSZWdpc3RlciwgKGFkZHJlc3Mub2Zmc2V0ICsgMHg4MDAwKSA+PiAxNik7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1w
UmVnaXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltbVRlbXBSZWdpc3Rlcik7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5saHUoZGVzdCwgYWRkclRlbXBSZWdpc3RlciwgYWRk
cmVzcy5vZmZzZXQpOworICAgICAgICB9CisgICAgfQorCisgICAgRGF0YUxhYmVsMzIgc3RvcmUz
MldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgYWRkcmVzcykK
KyAgICB7CisgICAgICAgIG1fZml4ZWRXaWR0aCA9IHRydWU7CisgICAgICAgIC8qCisgICAgICAg
ICAgICBsdWkgYWRkclRlbXAsIGFkZHJlc3Mub2Zmc2V0ID4+IDE2CisgICAgICAgICAgICBvcmkg
YWRkclRlbXAsIGFkZHJUZW1wLCBhZGRyZXNzLm9mZnNldCAmIDB4ZmZmZgorICAgICAgICAgICAg
YWRkdSAgICAgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBhZGRyZXNzLmJhc2UKKyAgICAgICAgICAg
IHN3ICBzcmMsIDAoYWRkclRlbXApCisgICAgICAgICovCisgICAgICAgIERhdGFMYWJlbDMyIGRh
dGFMYWJlbCh0aGlzKTsKKyAgICAgICAgbW92ZShJbW0zMihhZGRyZXNzLm9mZnNldCksIGFkZHJU
ZW1wUmVnaXN0ZXIpOworICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIs
IGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSk7CisgICAgICAgIG1fYXNzZW1ibGVyLnN3
KHNyYywgYWRkclRlbXBSZWdpc3RlciwgMCk7CisgICAgICAgIG1fZml4ZWRXaWR0aCA9IGZhbHNl
OworICAgICAgICByZXR1cm4gZGF0YUxhYmVsOworICAgIH0KKworICAgIHZvaWQgc3RvcmUzMihS
ZWdpc3RlcklEIHNyYywgSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBp
ZiAoYWRkcmVzcy5vZmZzZXQgPj0gLTMyNzY4ICYmIGFkZHJlc3Mub2Zmc2V0IDw9IDMyNzY3Cisg
ICAgICAgICAgICAmJiAhbV9maXhlZFdpZHRoKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3co
c3JjLCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAvKgorICAgICAgICAgICAgICAgIGx1aSAgICAgYWRkclRlbXAsIChvZmZzZXQgKyAw
eDgwMDApID4+IDE2CisgICAgICAgICAgICAgICAgYWRkdSAgICBhZGRyVGVtcCwgYWRkclRlbXAs
IGJhc2UKKyAgICAgICAgICAgICAgICBzdyAgICAgIHNyYywgKG9mZnNldCAmIDB4ZmZmZikoYWRk
clRlbXApCisgICAgICAgICAgICAgICovCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sdWkoYWRk
clRlbXBSZWdpc3RlciwgKGFkZHJlc3Mub2Zmc2V0ICsgMHg4MDAwKSA+PiAxNik7CisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIs
IGFkZHJlc3MuYmFzZSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdyhzcmMsIGFkZHJUZW1w
UmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQg
c3RvcmUzMihSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAg
ICBpZiAoYWRkcmVzcy5vZmZzZXQgPj0gLTMyNzY4ICYmIGFkZHJlc3Mub2Zmc2V0IDw9IDMyNzY3
CisgICAgICAgICAgICAmJiAhbV9maXhlZFdpZHRoKSB7CisgICAgICAgICAgICAvKgorICAgICAg
ICAgICAgICAgIHNsbCAgICAgYWRkclRlbXAsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUK
KyAgICAgICAgICAgICAgICBhZGR1ICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgYWRkcmVzcy5iYXNl
CisgICAgICAgICAgICAgICAgc3cgICAgICBzcmMsIGFkZHJlc3Mub2Zmc2V0KGFkZHJUZW1wKQor
ICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsbChhZGRyVGVtcFJlZ2lz
dGVyLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNl
KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN3KHNyYywgYWRkclRlbXBSZWdpc3RlciwgYWRk
cmVzcy5vZmZzZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyoKKyAgICAgICAg
ICAgICAgICBzbGwgICAgIGFkZHJUZW1wLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlCisg
ICAgICAgICAgICAgICAgYWRkdSAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGFkZHJlc3MuYmFzZQor
ICAgICAgICAgICAgICAgIGx1aSAgICAgaW1tVGVtcCwgKGFkZHJlc3Mub2Zmc2V0ICsgMHg4MDAw
KSA+PiAxNgorICAgICAgICAgICAgICAgIGFkZHUgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBpbW1U
ZW1wCisgICAgICAgICAgICAgICAgc3cgICAgICBzcmMsIChhZGRyZXNzLm9mZnNldCAmIDB4ZmZm
ZikoYXQpCisgICAgICAgICAgICAqLworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2xsKGFkZHJU
ZW1wUmVnaXN0ZXIsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgICAgICAgICAg
bV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRy
ZXNzLmJhc2UpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHVpKGltbVRlbXBSZWdpc3Rlciwg
KGFkZHJlc3Mub2Zmc2V0ICsgMHg4MDAwKSA+PiAxNik7CisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5zdyhzcmMsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHZvaWQgc3RvcmUzMihJbW0zMiBpbW0sIEltcGxpY2l0QWRkcmVzcyBhZGRy
ZXNzKQorICAgIHsKKyAgICAgICAgaWYgKGFkZHJlc3Mub2Zmc2V0ID49IC0zMjc2OCAmJiBhZGRy
ZXNzLm9mZnNldCA8PSAzMjc2NworICAgICAgICAgICAgJiYgIW1fZml4ZWRXaWR0aCkgeworICAg
ICAgICAgICAgaWYgKCFpbW0ubV9pc1BvaW50ZXIgJiYgaW1tLm1fdmFsdWUgPT0gMCkKKyAgICAg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5zdyhNSVBTUmVnaXN0ZXJzOjp6ZXJvLCBhZGRyZXNzLmJh
c2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcy5vZmZzZXQpOworICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbW92ZShpbW0sIGltbVRlbXBSZWdpc3Rl
cik7CisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3coaW1tVGVtcFJlZ2lzdGVyLCBhZGRy
ZXNzLmJhc2UsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgbHVpICAgICBhZGRyVGVtcCwgKG9m
ZnNldCArIDB4ODAwMCkgPj4gMTYKKyAgICAgICAgICAgICAgICBhZGR1ICAgIGFkZHJUZW1wLCBh
ZGRyVGVtcCwgYmFzZQorICAgICAgICAgICAgICAgIHN3ICAgICAgaW1tVGVtcCwgKG9mZnNldCAm
IDB4ZmZmZikoYWRkclRlbXApCisgICAgICAgICAgICAgICovCisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5sdWkoYWRkclRlbXBSZWdpc3RlciwgKGFkZHJlc3Mub2Zmc2V0ICsgMHg4MDAwKSA+PiAx
Nik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJU
ZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSk7CisgICAgICAgICAgICBpZiAoIWltbS5tX2lzUG9p
bnRlciAmJiBpbW0ubV92YWx1ZSA9PSAwICYmICFtX2ZpeGVkV2lkdGgpCisgICAgICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuc3coTUlQU1JlZ2lzdGVyczo6emVybywgYWRkclRlbXBSZWdpc3RlciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzLm9mZnNldCk7CisgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBtb3ZlKGltbSwgaW1tVGVtcFJlZ2lzdGVyKTsK
KyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdyhpbW1UZW1wUmVnaXN0ZXIsIGFkZHJUZW1w
UmVnaXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcy5vZmZzZXQp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBzdG9yZTMyKFJl
Z2lzdGVySUQgc3JjLCB2b2lkKiBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAg
ICAgIGxpICBhZGRyVGVtcCwgYWRkcmVzcworICAgICAgICAgICAgc3cgIHNyYywgMChhZGRyVGVt
cCkKKyAgICAgICAgKi8KKyAgICAgICAgbW92ZShJbW1QdHIoYWRkcmVzcyksIGFkZHJUZW1wUmVn
aXN0ZXIpOworICAgICAgICBtX2Fzc2VtYmxlci5zdyhzcmMsIGFkZHJUZW1wUmVnaXN0ZXIsIDAp
OworICAgIH0KKworICAgIHZvaWQgc3RvcmUzMihJbW0zMiBpbW0sIHZvaWQqIGFkZHJlc3MpCisg
ICAgeworICAgICAgICAvKgorICAgICAgICAgICAgbGkgIGltbVRlbXAsIGltbQorICAgICAgICAg
ICAgbGkgIGFkZHJUZW1wLCBhZGRyZXNzCisgICAgICAgICAgICBzdyAgc3JjLCAwKGFkZHJUZW1w
KQorICAgICAgICAqLworICAgICAgICBpZiAoIWltbS5tX2lzUG9pbnRlciAmJiBpbW0ubV92YWx1
ZSA9PSAwICYmICFtX2ZpeGVkV2lkdGgpIHsKKyAgICAgICAgICAgIG1vdmUoSW1tUHRyKGFkZHJl
c3MpLCBhZGRyVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN3KE1JUFNS
ZWdpc3RlcnM6Onplcm8sIGFkZHJUZW1wUmVnaXN0ZXIsIDApOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgbW92ZShpbW0sIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICBtb3Zl
KEltbVB0cihhZGRyZXNzKSwgYWRkclRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5zdyhpbW1UZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIDApOworICAgICAgICB9
CisgICAgfQorCisgICAgLy8gRmxvYXRpbmctcG9pbnQgb3BlcmF0aW9uczoKKworICAgIGJvb2wg
c3VwcG9ydHNGbG9hdGluZ1BvaW50KCkgY29uc3QKKyAgICB7CisjaWYgZGVmaW5lZChfX21pcHNf
aGFyZF9mbG9hdCkgJiYgIWRlZmluZWQoX19taXBzX3NpbmdsZV9mbG9hdCkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisjZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKyAgICB9CisK
KyAgICBib29sIHN1cHBvcnRzRmxvYXRpbmdQb2ludFRydW5jYXRlKCkgY29uc3QKKyAgICB7Cisj
aWYgZGVmaW5lZChfX21pcHNfaGFyZF9mbG9hdCkgJiYgIWRlZmluZWQoX19taXBzX3NpbmdsZV9m
bG9hdCkgJiYgKF9fbWlwcyA+IDEpCisgICAgICAgIHJldHVybiB0cnVlOworI2Vsc2UKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCisgICAgfQorCisgICAgLy8gU3RhY2sgbWFuaXB1bGF0
aW9uIG9wZXJhdGlvbnM6CisgICAgLy8KKyAgICAvLyBUaGUgQUJJIGlzIGFzc3VtZWQgdG8gcHJv
dmlkZSBhIHN0YWNrIGFic3RyYWN0aW9uIHRvIG1lbW9yeSwKKyAgICAvLyBjb250YWluaW5nIG1h
Y2hpbmUgd29yZCBzaXplZCB1bml0cyBvZiBkYXRhLiAgUHVzaCBhbmQgcG9wCisgICAgLy8gb3Bl
cmF0aW9ucyBhZGQgYW5kIHJlbW92ZSBhIHNpbmdsZSByZWdpc3RlciBzaXplZCB1bml0IG9mIGRh
dGEKKyAgICAvLyB0byBvciBmcm9tIHRoZSBzdGFjay4gIFBlZWsgYW5kIHBva2Ugb3BlcmF0aW9u
cyByZWFkIG9yIHdyaXRlCisgICAgLy8gdmFsdWVzIG9uIHRoZSBzdGFjaywgd2l0aG91dCBtb3Zp
bmcgdGhlIGN1cnJlbnQgc3RhY2sgcG9zaXRpb24uCisKKyAgICB2b2lkIHBvcChSZWdpc3RlcklE
IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sdyhkZXN0LCBNSVBTUmVnaXN0ZXJz
OjpzcCwgMCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGl1KE1JUFNSZWdpc3RlcnM6OnNwLCBN
SVBTUmVnaXN0ZXJzOjpzcCwgNCk7CisgICAgfQorCisgICAgdm9pZCBwdXNoKFJlZ2lzdGVySUQg
c3JjKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkaXUoTUlQU1JlZ2lzdGVyczo6c3As
IE1JUFNSZWdpc3RlcnM6OnNwLCAtNCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnN3KHNyYywgTUlQ
U1JlZ2lzdGVyczo6c3AsIDApOworICAgIH0KKworICAgIHZvaWQgcHVzaChBZGRyZXNzIGFkZHJl
c3MpCisgICAgeworICAgICAgICBsb2FkMzIoYWRkcmVzcywgZGF0YVRlbXBSZWdpc3Rlcik7Cisg
ICAgICAgIHB1c2goZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgfQorCisgICAgdm9pZCBwdXNoKElt
bTMyIGltbSkKKyAgICB7CisgICAgICAgIG1vdmUoaW1tLCBpbW1UZW1wUmVnaXN0ZXIpOworICAg
ICAgICBwdXNoKGltbVRlbXBSZWdpc3Rlcik7CisgICAgfQorCisgICAgLy8gUmVnaXN0ZXIgbW92
ZSBvcGVyYXRpb25zOgorICAgIC8vCisgICAgLy8gTW92ZSB2YWx1ZXMgaW4gcmVnaXN0ZXJzLgor
CisgICAgdm9pZCBtb3ZlKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAg
ICAgaWYgKCFpbW0ubV9pc1BvaW50ZXIgJiYgaW1tLm1fdmFsdWUgPT0gMCAmJiAhbV9maXhlZFdp
ZHRoKQorICAgICAgICAgICAgbW92ZShNSVBTUmVnaXN0ZXJzOjp6ZXJvLCBkZXN0KTsKKyAgICAg
ICAgZWxzZSBpZiAoaW1tLm1faXNQb2ludGVyIHx8IG1fZml4ZWRXaWR0aCkgeworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIubHVpKGRlc3QsIGltbS5tX3ZhbHVlID4+IDE2KTsKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLm9yaShkZXN0LCBkZXN0LCBpbW0ubV92YWx1ZSk7CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubGkoZGVzdCwgaW1tLm1fdmFsdWUpOworICAgIH0K
KworICAgIHZvaWQgbW92ZShSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsK
KyAgICAgICAgaWYgKHNyYyAhPSBkZXN0IHx8IG1fZml4ZWRXaWR0aCkKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLm1vdmUoZGVzdCwgc3JjKTsKKyAgICB9CisKKyAgICB2b2lkIG1vdmUoSW1tUHRy
IGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbW92ZShJbW0zMihpbW0pLCBk
ZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHN3YXAoUmVnaXN0ZXJJRCByZWcxLCBSZWdpc3RlcklE
IHJlZzIpCisgICAgeworICAgICAgICBtb3ZlKHJlZzEsIGltbVRlbXBSZWdpc3Rlcik7CisgICAg
ICAgIG1vdmUocmVnMiwgcmVnMSk7CisgICAgICAgIG1vdmUoaW1tVGVtcFJlZ2lzdGVyLCByZWcy
KTsKKyAgICB9CisKKyAgICB2b2lkIHNpZ25FeHRlbmQzMlRvUHRyKFJlZ2lzdGVySUQgc3JjLCBS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAoc3JjICE9IGRlc3QgfHwgbV9maXhl
ZFdpZHRoKQorICAgICAgICAgICAgbW92ZShzcmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQg
emVyb0V4dGVuZDMyVG9QdHIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7
CisgICAgICAgIGlmIChzcmMgIT0gZGVzdCB8fCBtX2ZpeGVkV2lkdGgpCisgICAgICAgICAgICBt
b3ZlKHNyYywgZGVzdCk7CisgICAgfQorCisgICAgLy8gRm9yd2FyZHMgLyBleHRlcm5hbCBjb250
cm9sIGZsb3cgb3BlcmF0aW9uczoKKyAgICAvLworICAgIC8vIFRoaXMgc2V0IG9mIGp1bXAgYW5k
IGNvbmRpdGlvbmFsIGJyYW5jaCBvcGVyYXRpb25zIHJldHVybiBhIEp1bXAKKyAgICAvLyBvYmpl
Y3Qgd2hpY2ggbWF5IGxpbmtlZCBhdCBhIGxhdGVyIHBvaW50LCBhbGxvdyBmb3J3YXJkcyBqdW1w
LAorICAgIC8vIG9yIGp1bXBzIHRoYXQgd2lsbCByZXF1aXJlIGV4dGVybmFsIGxpbmthZ2UgKGFm
dGVyIHRoZSBjb2RlIGhhcyBiZWVuCisgICAgLy8gcmVsb2NhdGVkKS4KKyAgICAvLworICAgIC8v
IEZvciBicmFuY2hlcywgc2lnbmVkIDwsID4sIDw9IGFuZCA+PSBhcmUgZGVub3RlZCBhcyBsLCBn
LCBsZSwgYW5kIGdlCisgICAgLy8gcmVzcGVjaXR2ZWx5LCBmb3IgdW5zaWduZWQgY29tcGFyaXNv
bnMgdGhlIG5hbWVzIGIsIGEsIGJlLCBhbmQgYWUgYXJlCisgICAgLy8gdXNlZCAocmVwcmVzZW50
aW5nIHRoZSBuYW1lcyAnYmVsb3cnIGFuZCAnYWJvdmUnKS4KKyAgICAvLworICAgIC8vIE9wZXJh
bmRzIHRvIHRoZSBjb21wYXJpc2lvbiBhcmUgcHJvdmlkZWQgaW4gdGhlIGV4cGVjdGVkIG9yZGVy
LCBlLmcuCisgICAgLy8gamxlMzIocmVnMSwgSW1tMzIoNSkpIHdpbGwgYnJhbmNoIGlmIHRoZSB2
YWx1ZSBoZWxkIGluIHJlZzEsIHdoZW4KKyAgICAvLyB0cmVhdGVkIGFzIGEgc2lnbmVkIDMyYml0
IHZhbHVlLCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gNS4KKyAgICAvLworICAgIC8vIGp6IGFu
ZCBqbnogdGVzdCB3aGV0aGVyIHRoZSBmaXJzdCBvcGVyYW5kIGlzIGVxdWFsIHRvIHplcm8sIGFu
ZCB0YWtlCisgICAgLy8gYW4gb3B0aW9uYWwgc2Vjb25kIG9wZXJhbmQgb2YgYSBtYXNrIHVuZGVy
IHdoaWNoIHRvIHBlcmZvcm0gdGhlIHRlc3QuCisKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlv
biBjb25kLCBSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQpCisgICAgeworICAgICAg
ICBpZiAoY29uZCA9PSBFcXVhbCB8fCBjb25kID09IFplcm8pCisgICAgICAgICAgICByZXR1cm4g
YnJhbmNoRXF1YWwobGVmdCwgcmlnaHQpOworICAgICAgICBpZiAoY29uZCA9PSBOb3RFcXVhbCB8
fCBjb25kID09IE5vblplcm8pCisgICAgICAgICAgICByZXR1cm4gYnJhbmNoTm90RXF1YWwobGVm
dCwgcmlnaHQpOworICAgICAgICBpZiAoY29uZCA9PSBBYm92ZSkgeworICAgICAgICAgICAgbV9h
c3NlbWJsZXIuc2x0dShjbXBUZW1wUmVnaXN0ZXIsIHJpZ2h0LCBsZWZ0KTsKKyAgICAgICAgICAg
IHJldHVybiBicmFuY2hOb3RFcXVhbChjbXBUZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onpl
cm8pOworICAgICAgICB9CisgICAgICAgIGlmIChjb25kID09IEFib3ZlT3JFcXVhbCkgeworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuc2x0dShjbXBUZW1wUmVnaXN0ZXIsIGxlZnQsIHJpZ2h0KTsK
KyAgICAgICAgICAgIHJldHVybiBicmFuY2hFcXVhbChjbXBUZW1wUmVnaXN0ZXIsIE1JUFNSZWdp
c3RlcnM6Onplcm8pOworICAgICAgICB9CisgICAgICAgIGlmIChjb25kID09IEJlbG93KSB7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHR1KGNtcFRlbXBSZWdpc3RlciwgbGVmdCwgcmlnaHQp
OworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaE5vdEVxdWFsKGNtcFRlbXBSZWdpc3RlciwgTUlQ
U1JlZ2lzdGVyczo6emVybyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gQmVsb3dP
ckVxdWFsKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHR1KGNtcFRlbXBSZWdpc3Rlciwg
cmlnaHQsIGxlZnQpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEVxdWFsKGNtcFRlbXBSZWdp
c3RlciwgTUlQU1JlZ2lzdGVyczo6emVybyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbmQg
PT0gR3JlYXRlclRoYW4pIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdChjbXBUZW1wUmVn
aXN0ZXIsIHJpZ2h0LCBsZWZ0KTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hOb3RFcXVhbChj
bXBUZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onplcm8pOworICAgICAgICB9CisgICAgICAg
IGlmIChjb25kID09IEdyZWF0ZXJUaGFuT3JFcXVhbCkgeworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIuc2x0KGNtcFRlbXBSZWdpc3RlciwgbGVmdCwgcmlnaHQpOworICAgICAgICAgICAgcmV0dXJu
IGJyYW5jaEVxdWFsKGNtcFRlbXBSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6emVybyk7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gTGVzc1RoYW4pIHsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLnNsdChjbXBUZW1wUmVnaXN0ZXIsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIHJl
dHVybiBicmFuY2hOb3RFcXVhbChjbXBUZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onplcm8p
OworICAgICAgICB9CisgICAgICAgIGlmIChjb25kID09IExlc3NUaGFuT3JFcXVhbCkgeworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuc2x0KGNtcFRlbXBSZWdpc3RlciwgcmlnaHQsIGxlZnQpOwor
ICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEVxdWFsKGNtcFRlbXBSZWdpc3RlciwgTUlQU1JlZ2lz
dGVyczo6emVybyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gT3ZlcmZsb3cpIHsK
KyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgeG9yICAgICBjbXBUZW1wLCBsZWZ0LCBy
aWdodAorICAgICAgICAgICAgICAgIGJnZXogICAgTm9fb3ZlcmZsb3csIGNtcFRlbXAgICAgIyBz
YW1lIHNpZ24gYml0IC0+IG5vIG92ZXJmbG93CisgICAgICAgICAgICAgICAgbm9wCisgICAgICAg
ICAgICAgICAgc3VidSAgICBjbXBUZW1wLCBsZWZ0LCByaWdodAorICAgICAgICAgICAgICAgIHhv
ciAgICAgY21wVGVtcCwgY21wVGVtcCwgbGVmdAorICAgICAgICAgICAgICAgIGJnZXogICAgTm9f
b3ZlcmZsb3csIGNtcFRlbXAgICAgIyBzYW1lIHNpZ24gYml0IC0+IG5vIG92ZXJmbG93CisgICAg
ICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgYiAgICAgICBPdmVyZmxvdworICAgICAg
ICAgICAgICAgIG5vcAorICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgICAgIG5vcAor
ICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgICBO
b19vdmVyZmxvdzoKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3Jf
aW5zbihjbXBUZW1wUmVnaXN0ZXIsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLmJnZXooY21wVGVtcFJlZ2lzdGVyLCAxMSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5u
b3AoKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN1YnUoY21wVGVtcFJlZ2lzdGVyLCBsZWZ0
LCByaWdodCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3JfaW5zbihjbXBUZW1wUmVnaXN0
ZXIsIGNtcFRlbXBSZWdpc3RlciwgbGVmdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5iZ2V6
KGNtcFRlbXBSZWdpc3RlciwgNyk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAg
ICAgICAgICAgIHJldHVybiBqdW1wKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0g
U2lnbmVkKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdWJ1KGNtcFRlbXBSZWdpc3Rlciwg
bGVmdCwgcmlnaHQpOworICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHJlc3VsdCBpcyBuZWdh
dGl2ZS4KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdChjbXBUZW1wUmVnaXN0ZXIsIGNtcFRl
bXBSZWdpc3RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNSVBTUmVnaXN0ZXJzOjp6
ZXJvKTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hOb3RFcXVhbChjbXBUZW1wUmVnaXN0ZXIs
IE1JUFNSZWdpc3RlcnM6Onplcm8pOworICAgICAgICB9CisgICAgICAgIEFTU0VSVCgwKTsKKwor
ICAgICAgICByZXR1cm4gSnVtcCgpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoMzIoQ29uZGl0
aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgSW1tMzIgcmlnaHQpCisgICAgeworICAgICAgICBt
b3ZlKHJpZ2h0LCBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29u
ZCwgbGVmdCwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDMyKENv
bmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIEFkZHJlc3MgcmlnaHQpCisgICAgeworICAg
ICAgICBsb2FkMzIocmlnaHQsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gYnJh
bmNoMzIoY29uZCwgbGVmdCwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgfQorCisgICAgSnVtcCBi
cmFuY2gzMihDb25kaXRpb24gY29uZCwgQWRkcmVzcyBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0KQor
ICAgIHsKKyAgICAgICAgbG9hZDMyKGxlZnQsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICBy
ZXR1cm4gYnJhbmNoMzIoY29uZCwgZGF0YVRlbXBSZWdpc3RlciwgcmlnaHQpOworICAgIH0KKwor
ICAgIEp1bXAgYnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgbGVmdCwgSW1tMzIgcmln
aHQpCisgICAgeworICAgICAgICBsb2FkMzIobGVmdCwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAg
ICAgIG1vdmUocmlnaHQsIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBicmFuY2gz
Mihjb25kLCBkYXRhVGVtcFJlZ2lzdGVyLCBpbW1UZW1wUmVnaXN0ZXIpOworICAgIH0KKworICAg
IEp1bXAgYnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIEJhc2VJbmRleCBsZWZ0LCBJbW0zMiByaWdo
dCkKKyAgICB7CisgICAgICAgIGxvYWQzMihsZWZ0LCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAg
ICAgLy8gQmUgY2FyZWZ1bCB0aGF0IHRoZSBwcmV2aW91cyBsb2FkMzIoKSB1c2VzIGltbVRlbXBS
ZWdpc3Rlci4KKyAgICAgICAgLy8gU28sIHdlIG5lZWQgdG8gcHV0IG1vdmUoKSBhZnRlciBsb2Fk
MzIoKS4KKyAgICAgICAgbW92ZShyaWdodCwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0
dXJuIGJyYW5jaDMyKGNvbmQsIGRhdGFUZW1wUmVnaXN0ZXIsIGltbVRlbXBSZWdpc3Rlcik7Cisg
ICAgfQorCisgICAgSnVtcCBicmFuY2gzMldpdGhVbmFsaWduZWRIYWxmV29yZHMoQ29uZGl0aW9u
IGNvbmQsIEJhc2VJbmRleCBsZWZ0LCBJbW0zMiByaWdodCkKKyAgICB7CisgICAgICAgIGxvYWQz
MldpdGhVbmFsaWduZWRIYWxmV29yZHMobGVmdCwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAg
IC8vIEJlIGNhcmVmdWwgdGhhdCB0aGUgcHJldmlvdXMgbG9hZDMyV2l0aFVuYWxpZ25lZEhhbGZX
b3JkcygpCisgICAgICAgIC8vIHVzZXMgaW1tVGVtcFJlZ2lzdGVyLgorICAgICAgICAvLyBTbywg
d2UgbmVlZCB0byBwdXQgbW92ZSgpIGFmdGVyIGxvYWQzMldpdGhVbmFsaWduZWRIYWxmV29yZHMo
KS4KKyAgICAgICAgbW92ZShyaWdodCwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJu
IGJyYW5jaDMyKGNvbmQsIGRhdGFUZW1wUmVnaXN0ZXIsIGltbVRlbXBSZWdpc3Rlcik7CisgICAg
fQorCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29uZCwgQWJzb2x1dGVBZGRyZXNzIGxl
ZnQsIFJlZ2lzdGVySUQgcmlnaHQpCisgICAgeworICAgICAgICBsb2FkMzIobGVmdC5tX3B0ciwg
ZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBkYXRhVGVt
cFJlZ2lzdGVyLCByaWdodCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24g
Y29uZCwgQWJzb2x1dGVBZGRyZXNzIGxlZnQsIEltbTMyIHJpZ2h0KQorICAgIHsKKyAgICAgICAg
bG9hZDMyKGxlZnQubV9wdHIsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICBtb3ZlKHJpZ2h0
LCBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgZGF0YVRl
bXBSZWdpc3RlciwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDE2
KENvbmRpdGlvbiBjb25kLCBCYXNlSW5kZXggbGVmdCwgUmVnaXN0ZXJJRCByaWdodCkKKyAgICB7
CisgICAgICAgIGxvYWQxNihsZWZ0LCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJu
IGJyYW5jaDMyKGNvbmQsIGRhdGFUZW1wUmVnaXN0ZXIsIHJpZ2h0KTsKKyAgICB9CisKKyAgICBK
dW1wIGJyYW5jaDE2KENvbmRpdGlvbiBjb25kLCBCYXNlSW5kZXggbGVmdCwgSW1tMzIgcmlnaHQp
CisgICAgeworICAgICAgICBBU1NFUlQoIShyaWdodC5tX3ZhbHVlICYgMHhGRkZGMDAwMCkpOwor
ICAgICAgICBsb2FkMTYobGVmdCwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgIC8vIEJlIGNh
cmVmdWwgdGhhdCB0aGUgcHJldmlvdXMgbG9hZDE2KCkgdXNlcyBpbW1UZW1wUmVnaXN0ZXIuCisg
ICAgICAgIC8vIFNvLCB3ZSBuZWVkIHRvIHB1dCBtb3ZlKCkgYWZ0ZXIgbG9hZDE2KCkuCisgICAg
ICAgIG1vdmUocmlnaHQsIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBicmFuY2gz
Mihjb25kLCBkYXRhVGVtcFJlZ2lzdGVyLCBpbW1UZW1wUmVnaXN0ZXIpOworICAgIH0KKworICAg
IEp1bXAgYnJhbmNoVGVzdDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHJlZywgUmVnaXN0
ZXJJRCBtYXNrKQorICAgIHsKKyAgICAgICAgQVNTRVJUKChjb25kID09IFplcm8pIHx8IChjb25k
ID09IE5vblplcm8pKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5kX2luc24oY21wVGVtcFJlZ2lz
dGVyLCByZWcsIG1hc2spOworICAgICAgICBpZiAoY29uZCA9PSBaZXJvKQorICAgICAgICAgICAg
cmV0dXJuIGJyYW5jaEVxdWFsKGNtcFRlbXBSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6emVybyk7
CisgICAgICAgIHJldHVybiBicmFuY2hOb3RFcXVhbChjbXBUZW1wUmVnaXN0ZXIsIE1JUFNSZWdp
c3RlcnM6Onplcm8pOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoVGVzdDMyKENvbmRpdGlvbiBj
b25kLCBSZWdpc3RlcklEIHJlZywgSW1tMzIgbWFzayA9IEltbTMyKC0xKSkKKyAgICB7CisgICAg
ICAgIEFTU0VSVCgoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisgICAgICAg
IGlmIChtYXNrLm1fdmFsdWUgPT0gLTEgJiYgIW1fZml4ZWRXaWR0aCkgeworICAgICAgICAgICAg
aWYgKGNvbmQgPT0gWmVybykKKyAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoRXF1YWwocmVn
LCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hOb3RFcXVh
bChyZWcsIE1JUFNSZWdpc3RlcnM6Onplcm8pOworICAgICAgICB9CisgICAgICAgIG1vdmUobWFz
aywgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3QzMihjb25kLCBy
ZWcsIGltbVRlbXBSZWdpc3Rlcik7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hUZXN0MzIoQ29u
ZGl0aW9uIGNvbmQsIEFkZHJlc3MgYWRkcmVzcywgSW1tMzIgbWFzayA9IEltbTMyKC0xKSkKKyAg
ICB7CisgICAgICAgIGxvYWQzMihhZGRyZXNzLCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAg
cmV0dXJuIGJyYW5jaFRlc3QzMihjb25kLCBkYXRhVGVtcFJlZ2lzdGVyLCBtYXNrKTsKKyAgICB9
CisKKyAgICBKdW1wIGJyYW5jaFRlc3QzMihDb25kaXRpb24gY29uZCwgQmFzZUluZGV4IGFkZHJl
c3MsIEltbTMyIG1hc2sgPSBJbW0zMigtMSkpCisgICAgeworICAgICAgICBsb2FkMzIoYWRkcmVz
cywgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBicmFuY2hUZXN0MzIoY29uZCwg
ZGF0YVRlbXBSZWdpc3RlciwgbWFzayk7CisgICAgfQorCisgICAgSnVtcCBqdW1wKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBicmFuY2hFcXVhbChNSVBTUmVnaXN0ZXJzOjp6ZXJvLCBNSVBTUmVn
aXN0ZXJzOjp6ZXJvKTsKKyAgICB9CisKKyAgICB2b2lkIGp1bXAoUmVnaXN0ZXJJRCB0YXJnZXQp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5qcih0YXJnZXQpOworICAgICAgICBtX2Fzc2Vt
Ymxlci5ub3AoKTsKKyAgICB9CisKKyAgICB2b2lkIGp1bXAoQWRkcmVzcyBhZGRyZXNzKQorICAg
IHsKKyAgICAgICAgbV9maXhlZFdpZHRoID0gdHJ1ZTsKKyAgICAgICAgbG9hZDMyKGFkZHJlc3Ms
IE1JUFNSZWdpc3RlcnM6OnQ5KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuanIoTUlQU1JlZ2lzdGVy
czo6dDkpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgbV9maXhlZFdpZHRo
ID0gZmFsc2U7CisgICAgfQorCisgICAgLy8gQXJpdGhtZXRpYyBjb250cm9sIGZsb3cgb3BlcmF0
aW9uczoKKyAgICAvLworICAgIC8vIFRoaXMgc2V0IG9mIGNvbmRpdGlvbmFsIGJyYW5jaCBvcGVy
YXRpb25zIGJyYW5jaCBiYXNlZAorICAgIC8vIG9uIHRoZSByZXN1bHQgb2YgYW4gYXJpdGhtZXRp
YyBvcGVyYXRpb24uICBUaGUgb3BlcmF0aW9uCisgICAgLy8gaXMgcGVyZm9ybWVkIGFzIG5vcm1h
bCwgc3RvcmluZyB0aGUgcmVzdWx0LgorICAgIC8vCisgICAgLy8gKiBqeiBvcGVyYXRpb25zIGJy
YW5jaCBpZiB0aGUgcmVzdWx0IGlzIHplcm8uCisgICAgLy8gKiBqbyBvcGVyYXRpb25zIGJyYW5j
aCBpZiB0aGUgKHNpZ25lZCkgYXJpdGhtZXRpYworICAgIC8vICAgb3BlcmF0aW9uIGNhdXNlZCBh
biBvdmVyZmxvdyB0byBvY2N1ci4KKworICAgIEp1bXAgYnJhbmNoQWRkMzIoQ29uZGl0aW9uIGNv
bmQsIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBBU1NF
UlQoKGNvbmQgPT0gT3ZlcmZsb3cpIHx8IChjb25kID09IFNpZ25lZCkgfHwgKGNvbmQgPT0gWmVy
bykgfHwgKGNvbmQgPT0gTm9uWmVybykpOworICAgICAgICBpZiAoY29uZCA9PSBPdmVyZmxvdykg
eworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICBtb3ZlICAgIGRlc3QsIGRhdGFUZW1w
CisgICAgICAgICAgICAgICAgeG9yICAgICBjbXBUZW1wLCBkYXRhVGVtcCwgc3JjCisgICAgICAg
ICAgICAgICAgYmx0eiAgICBjbXBUZW1wLCBOb19vdmVyZmxvdyAgICAjIGRpZmYgc2lnbiBiaXQg
LT4gbm8gb3ZlcmZsb3cKKyAgICAgICAgICAgICAgICBhZGR1ICAgIGRlc3QsIGRhdGFUZW1wLCBz
cmMKKyAgICAgICAgICAgICAgICB4b3IgICAgIGNtcFRlbXAsIGRlc3QsIGRhdGFUZW1wCisgICAg
ICAgICAgICAgICAgYmdleiAgICBjbXBUZW1wLCBOb19vdmVyZmxvdyAgICAjIHNhbWUgc2lnbiBi
aWcgLT4gbm8gb3ZlcmZsb3cKKyAgICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAgICAgICBi
ICAgICAgIE92ZXJmbG93CisgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgbm9w
CisgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAg
ICAgbm9wCisgICAgICAgICAgICBOb19vdmVyZmxvdzoKKyAgICAgICAgICAgICovCisgICAgICAg
ICAgICBtb3ZlKGRlc3QsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIueG9yX2luc24oY21wVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLCBzcmMpOworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuYmx0eihjbXBUZW1wUmVnaXN0ZXIsIDEwKTsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLmFkZHUoZGVzdCwgZGF0YVRlbXBSZWdpc3Rlciwgc3JjKTsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLnhvcl9pbnNuKGNtcFRlbXBSZWdpc3RlciwgZGVzdCwgZGF0YVRl
bXBSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5iZ2V6KGNtcFRlbXBSZWdpc3Rl
ciwgNyk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgICAgIHJldHVy
biBqdW1wKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gU2lnbmVkKSB7CisgICAg
ICAgICAgICBhZGQzMihzcmMsIGRlc3QpOworICAgICAgICAgICAgLy8gQ2hlY2sgaWYgZGVzdCBp
cyBuZWdhdGl2ZS4KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdChjbXBUZW1wUmVnaXN0ZXIs
IGRlc3QsIE1JUFNSZWdpc3RlcnM6Onplcm8pOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaE5v
dEVxdWFsKGNtcFRlbXBSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6emVybyk7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKGNvbmQgPT0gWmVybykgeworICAgICAgICAgICAgYWRkMzIoc3JjLCBkZXN0
KTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hFcXVhbChkZXN0LCBNSVBTUmVnaXN0ZXJzOjp6
ZXJvKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29uZCA9PSBOb25aZXJvKSB7CisgICAgICAg
ICAgICBhZGQzMihzcmMsIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaE5vdEVxdWFs
KGRlc3QsIE1JUFNSZWdpc3RlcnM6Onplcm8pOworICAgICAgICB9CisgICAgICAgIEFTU0VSVCgw
KTsKKyAgICAgICAgcmV0dXJuIEp1bXAoKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaEFkZDMy
KENvbmRpdGlvbiBjb25kLCBJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIG1vdmUoaW1tLCBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNoQWRk
MzIoY29uZCwgaW1tVGVtcFJlZ2lzdGVyLCBkZXN0KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5j
aE11bDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKChjb25kID09IE92ZXJmbG93KSB8fCAoY29uZCA9PSBTaWdu
ZWQpIHx8IChjb25kID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8pKTsKKyAgICAgICAgaWYg
KGNvbmQgPT0gT3ZlcmZsb3cpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgbXVs
dCAgICBzcmMsIGRlc3QKKyAgICAgICAgICAgICAgICBtZmhpICAgIGRhdGFUZW1wCisgICAgICAg
ICAgICAgICAgbWZsbyAgICBkZXN0CisgICAgICAgICAgICAgICAgc3JhICAgICBhZGRyVGVtcCwg
ZGVzdCwgMzEKKyAgICAgICAgICAgICAgICBiZXEgICAgIGRhdGFUZW1wLCBhZGRyVGVtcCwgTm9f
b3ZlcmZsb3cgIyBhbGwgc2lnbiBiaXRzIChiaXQgNjMgdG8gYml0IDMxKSBhcmUgdGhlIHNhbWUg
LT4gbm8gb3ZlcmZsb3cKKyAgICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAgICAgICBiICAg
ICAgIE92ZXJmbG93CisgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgbm9wCisg
ICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAg
bm9wCisgICAgICAgICAgICBOb19vdmVyZmxvdzoKKyAgICAgICAgICAgICovCisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5tdWx0KHNyYywgZGVzdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5t
ZmhpKGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubWZsbyhkZXN0
KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNyYShhZGRyVGVtcFJlZ2lzdGVyLCBkZXN0LCAz
MSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5iZXEoZGF0YVRlbXBSZWdpc3RlciwgYWRkclRl
bXBSZWdpc3RlciwgNyk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAg
ICAgIHJldHVybiBqdW1wKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gU2lnbmVk
KSB7CisgICAgICAgICAgICBtdWwzMihzcmMsIGRlc3QpOworICAgICAgICAgICAgLy8gQ2hlY2sg
aWYgZGVzdCBpcyBuZWdhdGl2ZS4KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdChjbXBUZW1w
UmVnaXN0ZXIsIGRlc3QsIE1JUFNSZWdpc3RlcnM6Onplcm8pOworICAgICAgICAgICAgcmV0dXJu
IGJyYW5jaE5vdEVxdWFsKGNtcFRlbXBSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6emVybyk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gWmVybykgeworICAgICAgICAgICAgbXVsMzIo
c3JjLCBkZXN0KTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hFcXVhbChkZXN0LCBNSVBTUmVn
aXN0ZXJzOjp6ZXJvKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29uZCA9PSBOb25aZXJvKSB7
CisgICAgICAgICAgICBtdWwzMihzcmMsIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5j
aE5vdEVxdWFsKGRlc3QsIE1JUFNSZWdpc3RlcnM6Onplcm8pOworICAgICAgICB9CisgICAgICAg
IEFTU0VSVCgwKTsKKyAgICAgICAgcmV0dXJuIEp1bXAoKTsKKyAgICB9CisKKyAgICBKdW1wIGJy
YW5jaE11bDMyKENvbmRpdGlvbiBjb25kLCBJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjLCBSZWdp
c3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtb3ZlKGltbSwgaW1tVGVtcFJlZ2lzdGVyKTsK
KyAgICAgICAgbW92ZShzcmMsIGRlc3QpOworICAgICAgICByZXR1cm4gYnJhbmNoTXVsMzIoY29u
ZCwgaW1tVGVtcFJlZ2lzdGVyLCBkZXN0KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFN1YjMy
KENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsK
KyAgICAgICAgQVNTRVJUKChjb25kID09IE92ZXJmbG93KSB8fCAoY29uZCA9PSBTaWduZWQpIHx8
IChjb25kID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8pKTsKKyAgICAgICAgaWYgKGNvbmQg
PT0gT3ZlcmZsb3cpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgbW92ZSAgICBk
ZXN0LCBkYXRhVGVtcAorICAgICAgICAgICAgICAgIHhvciAgICAgY21wVGVtcCwgZGF0YVRlbXAs
IHNyYworICAgICAgICAgICAgICAgIGJnZXogICAgY21wVGVtcCwgTm9fb3ZlcmZsb3cgICAgIyBz
YW1lIHNpZ24gYml0IC0+IG5vIG92ZXJmbG93CisgICAgICAgICAgICAgICAgc3VidSAgICBkZXN0
LCBkYXRhVGVtcCwgc3JjCisgICAgICAgICAgICAgICAgeG9yICAgICBjbXBUZW1wLCBkZXN0LCBk
YXRhVGVtcAorICAgICAgICAgICAgICAgIGJnZXogICAgY21wVGVtcCwgTm9fb3ZlcmZsb3cgICAg
IyBzYW1lIHNpZ24gYml0IC0+IG5vIG92ZXJmbG93CisgICAgICAgICAgICAgICAgbm9wCisgICAg
ICAgICAgICAgICAgYiAgICAgICBPdmVyZmxvdworICAgICAgICAgICAgICAgIG5vcAorICAgICAg
ICAgICAgICAgIG5vcAorICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgICAgIG5vcAor
ICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgTm9fb3ZlcmZsb3c6CisgICAgICAgICAg
ICAqLworICAgICAgICAgICAgbW92ZShkZXN0LCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLnhvcl9pbnNuKGNtcFRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3Rl
ciwgc3JjKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmJnZXooY21wVGVtcFJlZ2lzdGVyLCAx
MCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdWJ1KGRlc3QsIGRhdGFUZW1wUmVnaXN0ZXIs
IHNyYyk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3JfaW5zbihjbXBUZW1wUmVnaXN0ZXIs
IGRlc3QsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYmdleihj
bXBUZW1wUmVnaXN0ZXIsIDcpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAg
ICAgICAgICByZXR1cm4ganVtcCgpOworICAgICAgICB9CisgICAgICAgIGlmIChjb25kID09IFNp
Z25lZCkgeworICAgICAgICAgICAgc3ViMzIoc3JjLCBkZXN0KTsKKyAgICAgICAgICAgIC8vIENo
ZWNrIGlmIGRlc3QgaXMgbmVnYXRpdmUuCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHQoY21w
VGVtcFJlZ2lzdGVyLCBkZXN0LCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsKKyAgICAgICAgICAgIHJl
dHVybiBicmFuY2hOb3RFcXVhbChjbXBUZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onplcm8p
OworICAgICAgICB9CisgICAgICAgIGlmIChjb25kID09IFplcm8pIHsKKyAgICAgICAgICAgIHN1
YjMyKHNyYywgZGVzdCk7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRXF1YWwoZGVzdCwgTUlQ
U1JlZ2lzdGVyczo6emVybyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gTm9uWmVy
bykgeworICAgICAgICAgICAgc3ViMzIoc3JjLCBkZXN0KTsKKyAgICAgICAgICAgIHJldHVybiBi
cmFuY2hOb3RFcXVhbChkZXN0LCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsKKyAgICAgICAgfQorICAg
ICAgICBBU1NFUlQoMCk7CisgICAgICAgIHJldHVybiBKdW1wKCk7CisgICAgfQorCisgICAgSnVt
cCBicmFuY2hTdWIzMihDb25kaXRpb24gY29uZCwgSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBtb3ZlKGltbSwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0
dXJuIGJyYW5jaFN1YjMyKGNvbmQsIGltbVRlbXBSZWdpc3RlciwgZGVzdCk7CisgICAgfQorCisg
ICAgLy8gTWlzY2VsbGFuZW91cyBvcGVyYXRpb25zOgorCisgICAgdm9pZCBicmVha3BvaW50KCkK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmJrcHQoKTsKKyAgICB9CisKKyAgICBDYWxsIG5l
YXJDYWxsKCkKKyAgICB7CisgICAgICAgIC8qIFdlIG5lZWQgdHdvIHdvcmRzIGZvciByZWxheGF0
aW9uLiAgKi8KKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIG1fYXNzZW1ibGVy
Lm5vcCgpOworICAgICAgICBtX2Fzc2VtYmxlci5qYWwoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIu
bm9wKCk7CisgICAgICAgIHJldHVybiBDYWxsKG1fYXNzZW1ibGVyLm5ld0ptcFNyYygpLCBDYWxs
OjpMaW5rYWJsZU5lYXIpOworICAgIH0KKworICAgIENhbGwgY2FsbCgpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5sdWkoTUlQU1JlZ2lzdGVyczo6dDksIDApOworICAgICAgICBtX2Fzc2Vt
Ymxlci5vcmkoTUlQU1JlZ2lzdGVyczo6dDksIE1JUFNSZWdpc3RlcnM6OnQ5LCAwKTsKKyAgICAg
ICAgbV9hc3NlbWJsZXIuamFscihNSVBTUmVnaXN0ZXJzOjp0OSk7CisgICAgICAgIG1fYXNzZW1i
bGVyLm5vcCgpOworICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5uZXdKbXBTcmMoKSwg
Q2FsbDo6TGlua2FibGUpOworICAgIH0KKworICAgIENhbGwgY2FsbChSZWdpc3RlcklEIHRhcmdl
dCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmphbHIodGFyZ2V0KTsKKyAgICAgICAgbV9h
c3NlbWJsZXIubm9wKCk7CisgICAgICAgIHJldHVybiBDYWxsKG1fYXNzZW1ibGVyLm5ld0ptcFNy
YygpLCBDYWxsOjpOb25lKTsKKyAgICB9CisKKyAgICBDYWxsIGNhbGwoQWRkcmVzcyBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgbV9maXhlZFdpZHRoID0gdHJ1ZTsKKyAgICAgICAgbG9hZDMyKGFk
ZHJlc3MsIE1JUFNSZWdpc3RlcnM6OnQ5KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuamFscihNSVBT
UmVnaXN0ZXJzOjp0OSk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICBtX2Zp
eGVkV2lkdGggPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIubmV3Sm1w
U3JjKCksIENhbGw6Ok5vbmUpOworICAgIH0KKworICAgIHZvaWQgcmV0KCkKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmpyKE1JUFNSZWdpc3RlcnM6OnJhKTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubm9wKCk7CisgICAgfQorCisgICAgdm9pZCBzZXQzMihDb25kaXRpb24gY29uZCwgUmVnaXN0
ZXJJRCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBpZiAoY29uZCA9PSBFcXVhbCB8fCBjb25kID09IFplcm8pIHsKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLnhvcl9pbnNuKGRlc3QsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLnNsdGl1KGRlc3QsIGRlc3QsIDEpOworICAgICAgICB9IGVsc2UgaWYgKGNvbmQgPT0g
Tm90RXF1YWwgfHwgY29uZCA9PSBOb25aZXJvKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci54
b3JfaW5zbihkZXN0LCBsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHR1
KGRlc3QsIE1JUFNSZWdpc3RlcnM6Onplcm8sIGRlc3QpOworICAgICAgICB9IGVsc2UgaWYgKGNv
bmQgPT0gQWJvdmUpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHR1KGRlc3QsIHJpZ2h0LCBs
ZWZ0KTsKKyAgICAgICAgZWxzZSBpZiAoY29uZCA9PSBBYm92ZU9yRXF1YWwpIHsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLnNsdHUoZGVzdCwgbGVmdCwgcmlnaHQpOworICAgICAgICAgICAgbV9h
c3NlbWJsZXIueG9yaShkZXN0LCBkZXN0LCAxKTsKKyAgICAgICAgfSBlbHNlIGlmIChjb25kID09
IEJlbG93KQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0dShkZXN0LCBsZWZ0LCByaWdodCk7
CisgICAgICAgIGVsc2UgaWYgKGNvbmQgPT0gQmVsb3dPckVxdWFsKSB7CisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5zbHR1KGRlc3QsIHJpZ2h0LCBsZWZ0KTsKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLnhvcmkoZGVzdCwgZGVzdCwgMSk7CisgICAgICAgIH0gZWxzZSBpZiAoY29uZCA9PSBHcmVh
dGVyVGhhbikKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdChkZXN0LCByaWdodCwgbGVmdCk7
CisgICAgICAgIGVsc2UgaWYgKGNvbmQgPT0gR3JlYXRlclRoYW5PckVxdWFsKSB7CisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5zbHQoZGVzdCwgbGVmdCwgcmlnaHQpOworICAgICAgICAgICAgbV9h
c3NlbWJsZXIueG9yaShkZXN0LCBkZXN0LCAxKTsKKyAgICAgICAgfSBlbHNlIGlmIChjb25kID09
IExlc3NUaGFuKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0KGRlc3QsIGxlZnQsIHJpZ2h0
KTsKKyAgICAgICAgZWxzZSBpZiAoY29uZCA9PSBMZXNzVGhhbk9yRXF1YWwpIHsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLnNsdChkZXN0LCByaWdodCwgbGVmdCk7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci54b3JpKGRlc3QsIGRlc3QsIDEpOworICAgICAgICB9IGVsc2UgaWYgKGNvbmQgPT0g
T3ZlcmZsb3cpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgeG9yICAgICBjbXBU
ZW1wLCBsZWZ0LCByaWdodAorICAgICAgICAgICAgICAgIGJnZXogICAgRG9uZSwgY21wVGVtcCAg
ICMgc2FtZSBzaWduIGJpdCAtPiBubyBvdmVyZmxvdworICAgICAgICAgICAgICAgIG1vdmUgICAg
ZGVzdCwgMAorICAgICAgICAgICAgICAgIHN1YnUgICAgY21wVGVtcCwgbGVmdCwgcmlnaHQKKyAg
ICAgICAgICAgICAgICB4b3IgICAgIGNtcFRlbXAsIGNtcFRlbXAsIGxlZnQgIyBkaWZmIHNpZ24g
Yml0IC0+IG92ZXJmbG93CisgICAgICAgICAgICAgICAgc2x0ICAgICBkZXN0LCBjbXBUZW1wLCAw
CisgICAgICAgICAgICAgIERvbmU6CisgICAgICAgICAgICAqLworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIueG9yX2luc24oY21wVGVtcFJlZ2lzdGVyLCBsZWZ0LCByaWdodCk7CisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5iZ2V6KGNtcFRlbXBSZWdpc3RlciwgNCk7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5tb3ZlKGRlc3QsIE1JUFNSZWdpc3RlcnM6Onplcm8pOworICAgICAgICAgICAgbV9h
c3NlbWJsZXIuc3VidShjbXBUZW1wUmVnaXN0ZXIsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLnhvcl9pbnNuKGNtcFRlbXBSZWdpc3RlciwgY21wVGVtcFJlZ2lzdGVyLCBs
ZWZ0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdChkZXN0LCBjbXBUZW1wUmVnaXN0ZXIs
IE1JUFNSZWdpc3RlcnM6Onplcm8pOworICAgICAgICB9IGVsc2UgaWYgKGNvbmQgPT0gU2lnbmVk
KSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdWJ1KGRlc3QsIGxlZnQsIHJpZ2h0KTsKKyAg
ICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSByZXN1bHQgaXMgbmVnYXRpdmUuCisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5zbHQoZGVzdCwgZGVzdCwgTUlQU1JlZ2lzdGVyczo6emVybyk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHNldDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklE
IGxlZnQsIEltbTMyIHJpZ2h0LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtb3Zl
KHJpZ2h0LCBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICBzZXQzMihjb25kLCBsZWZ0LCBpbW1U
ZW1wUmVnaXN0ZXIsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgc2V0VGVzdDMyKENvbmRpdGlv
biBjb25kLCBBZGRyZXNzIGFkZHJlc3MsIEltbTMyIG1hc2ssIFJlZ2lzdGVySUQgZGVzdCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7
CisgICAgICAgIGxvYWQzMihhZGRyZXNzLCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgaWYg
KG1hc2subV92YWx1ZSA9PSAtMSAmJiAhbV9maXhlZFdpZHRoKSB7CisgICAgICAgICAgICBpZiAo
Y29uZCA9PSBaZXJvKQorICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdGl1KGRlc3QsIGRh
dGFUZW1wUmVnaXN0ZXIsIDEpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1f
YXNzZW1ibGVyLnNsdHUoZGVzdCwgTUlQU1JlZ2lzdGVyczo6emVybywgZGF0YVRlbXBSZWdpc3Rl
cik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtb3ZlKG1hc2ssIGltbVRlbXBSZWdp
c3Rlcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hbmRfaW5zbihjbXBUZW1wUmVnaXN0ZXIs
IGRhdGFUZW1wUmVnaXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbW1U
ZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgaWYgKGNvbmQgPT0gWmVybykKKyAgICAgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5zbHRpdShkZXN0LCBjbXBUZW1wUmVnaXN0ZXIsIDEpOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdHUoZGVzdCwgTUlQU1Jl
Z2lzdGVyczo6emVybywgY21wVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IERhdGFMYWJlbDMyIG1vdmVXaXRoUGF0Y2goSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICBtX2ZpeGVkV2lkdGggPSB0cnVlOworICAgICAgICBEYXRhTGFiZWwzMiBs
YWJlbCh0aGlzKTsKKyAgICAgICAgbW92ZShpbW0sIGRlc3QpOworICAgICAgICBtX2ZpeGVkV2lk
dGggPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGxhYmVsOworICAgIH0KKworICAgIERhdGFMYWJl
bFB0ciBtb3ZlV2l0aFBhdGNoKEltbVB0ciBpbml0aWFsVmFsdWUsIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIG1fZml4ZWRXaWR0aCA9IHRydWU7CisgICAgICAgIERhdGFMYWJlbFB0
ciBsYWJlbCh0aGlzKTsKKyAgICAgICAgbW92ZShpbml0aWFsVmFsdWUsIGRlc3QpOworICAgICAg
ICBtX2ZpeGVkV2lkdGggPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGxhYmVsOworICAgIH0KKwor
ICAgIEp1bXAgYnJhbmNoUHRyV2l0aFBhdGNoKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxl
ZnQsIERhdGFMYWJlbFB0ciYgZGF0YUxhYmVsLCBJbW1QdHIgaW5pdGlhbFJpZ2h0VmFsdWUgPSBJ
bW1QdHIoMCkpCisgICAgeworICAgICAgICBtX2ZpeGVkV2lkdGggPSB0cnVlOworICAgICAgICBk
YXRhTGFiZWwgPSBtb3ZlV2l0aFBhdGNoKGluaXRpYWxSaWdodFZhbHVlLCBpbW1UZW1wUmVnaXN0
ZXIpOworICAgICAgICBKdW1wIHRlbXAgPSBicmFuY2gzMihjb25kLCBsZWZ0LCBpbW1UZW1wUmVn
aXN0ZXIpOworICAgICAgICBtX2ZpeGVkV2lkdGggPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRl
bXA7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hQdHJXaXRoUGF0Y2goQ29uZGl0aW9uIGNvbmQs
IEFkZHJlc3MgbGVmdCwgRGF0YUxhYmVsUHRyJiBkYXRhTGFiZWwsIEltbVB0ciBpbml0aWFsUmln
aHRWYWx1ZSA9IEltbVB0cigwKSkKKyAgICB7CisgICAgICAgIG1fZml4ZWRXaWR0aCA9IHRydWU7
CisgICAgICAgIGxvYWQzMihsZWZ0LCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgZGF0YUxh
YmVsID0gbW92ZVdpdGhQYXRjaChpbml0aWFsUmlnaHRWYWx1ZSwgaW1tVGVtcFJlZ2lzdGVyKTsK
KyAgICAgICAgSnVtcCB0ZW1wID0gYnJhbmNoMzIoY29uZCwgZGF0YVRlbXBSZWdpc3RlciwgaW1t
VGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgbV9maXhlZFdpZHRoID0gZmFsc2U7CisgICAgICAgIHJl
dHVybiB0ZW1wOworICAgIH0KKworICAgIERhdGFMYWJlbFB0ciBzdG9yZVB0cldpdGhQYXRjaChJ
bW1QdHIgaW5pdGlhbFZhbHVlLCBJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAg
ICAgIG1fZml4ZWRXaWR0aCA9IHRydWU7CisgICAgICAgIERhdGFMYWJlbFB0ciBkYXRhTGFiZWwg
PSBtb3ZlV2l0aFBhdGNoKGluaXRpYWxWYWx1ZSwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAg
IHN0b3JlMzIoZGF0YVRlbXBSZWdpc3RlciwgYWRkcmVzcyk7CisgICAgICAgIG1fZml4ZWRXaWR0
aCA9IGZhbHNlOworICAgICAgICByZXR1cm4gZGF0YUxhYmVsOworICAgIH0KKworICAgIERhdGFM
YWJlbFB0ciBzdG9yZVB0cldpdGhQYXRjaChJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcykKKyAgICB7
CisgICAgICAgIHJldHVybiBzdG9yZVB0cldpdGhQYXRjaChJbW1QdHIoMCksIGFkZHJlc3MpOwor
ICAgIH0KKworICAgIENhbGwgdGFpbFJlY3Vyc2l2ZUNhbGwoKQorICAgIHsKKyAgICAgICAgLy8g
TGlrZSBhIG5vcm1hbCBjYWxsLCBidXQgZG9uJ3QgdXBkYXRlIHRoZSByZXR1cm5lZCBhZGRyZXNz
IHJlZ2lzdGVyCisgICAgICAgIG1fZml4ZWRXaWR0aCA9IHRydWU7CisgICAgICAgIG1vdmUoSW1t
MzIoMCksIE1JUFNSZWdpc3RlcnM6OnQ5KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuanIoTUlQU1Jl
Z2lzdGVyczo6dDkpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgbV9maXhl
ZFdpZHRoID0gZmFsc2U7CisgICAgICAgIHJldHVybiBDYWxsKG1fYXNzZW1ibGVyLm5ld0ptcFNy
YygpLCBDYWxsOjpMaW5rYWJsZSk7CisgICAgfQorCisgICAgQ2FsbCBtYWtlVGFpbFJlY3Vyc2l2
ZUNhbGwoSnVtcCBvbGRKdW1wKQorICAgIHsKKyAgICAgICAgb2xkSnVtcC5saW5rKHRoaXMpOwor
ICAgICAgICByZXR1cm4gdGFpbFJlY3Vyc2l2ZUNhbGwoKTsKKyAgICB9CisKKyAgICB2b2lkIGxv
YWREb3VibGUoSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAg
IHsKKyNpZiBfX21pcHMgPT0gMQorICAgICAgICAvKgorICAgICAgICAgICAgbGkgICAgICAgICAg
YWRkclRlbXAsIGFkZHJlc3Mub2Zmc2V0CisgICAgICAgICAgICBhZGR1ICAgICAgICBhZGRyVGVt
cCwgYWRkclRlbXAsIGJhc2UKKyAgICAgICAgICAgIGx3YzEgICAgICAgIGRlc3QsIDAoYWRkclRl
bXApCisgICAgICAgICAgICBsd2MxICAgICAgICBkZXN0KzEsIDQoYWRkclRlbXApCisgICAgICAg
ICAqLworICAgICAgICBtb3ZlKEltbTMyKGFkZHJlc3Mub2Zmc2V0KSwgYWRkclRlbXBSZWdpc3Rl
cik7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBS
ZWdpc3RlciwgYWRkcmVzcy5iYXNlKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubHdjMShkZXN0LCBh
ZGRyVGVtcFJlZ2lzdGVyLCAwKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubHdjMShGUFJlZ2lzdGVy
SUQoZGVzdCArIDEpLCBhZGRyVGVtcFJlZ2lzdGVyLCA0KTsKKyNlbHNlCisgICAgICAgIGlmIChh
ZGRyZXNzLm9mZnNldCA+PSAtMzI3NjggJiYgYWRkcmVzcy5vZmZzZXQgPD0gMzI3NjcKKyAgICAg
ICAgICAgICYmICFtX2ZpeGVkV2lkdGgpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxkYzEo
ZGVzdCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgIGx1aSAgICAgYWRkclRlbXAsIChvZmZzZXQg
KyAweDgwMDApID4+IDE2CisgICAgICAgICAgICAgICAgYWRkdSAgICBhZGRyVGVtcCwgYWRkclRl
bXAsIGJhc2UKKyAgICAgICAgICAgICAgICBsZGMxICAgIGRlc3QsIChvZmZzZXQgJiAweGZmZmYp
KGFkZHJUZW1wKQorICAgICAgICAgICAgICAqLworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHVp
KGFkZHJUZW1wUmVnaXN0ZXIsIChhZGRyZXNzLm9mZnNldCArIDB4ODAwMCkgPj4gMTYpOworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lz
dGVyLCBhZGRyZXNzLmJhc2UpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubGRjMShkZXN0LCBh
ZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAgIH0KKyNlbmRpZgorICAg
IH0KKworICAgIHZvaWQgc3RvcmVEb3VibGUoRlBSZWdpc3RlcklEIHNyYywgSW1wbGljaXRBZGRy
ZXNzIGFkZHJlc3MpCisgICAgeworI2lmIF9fbWlwcyA9PSAxCisgICAgICAgIC8qCisgICAgICAg
ICAgICBsaSAgICAgICAgICBhZGRyVGVtcCwgYWRkcmVzcy5vZmZzZXQKKyAgICAgICAgICAgIGFk
ZHUgICAgICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgYmFzZQorICAgICAgICAgICAgc3djMSAgICAg
ICAgZGVzdCwgMChhZGRyVGVtcCkKKyAgICAgICAgICAgIHN3YzEgICAgICAgIGRlc3QrMSwgNChh
ZGRyVGVtcCkKKyAgICAgICAgICovCisgICAgICAgIG1vdmUoSW1tMzIoYWRkcmVzcy5vZmZzZXQp
LCBhZGRyVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJl
Z2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UpOworICAgICAgICBtX2Fzc2Vt
Ymxlci5zd2MxKHNyYywgYWRkclRlbXBSZWdpc3RlciwgMCk7CisgICAgICAgIG1fYXNzZW1ibGVy
LnN3YzEoRlBSZWdpc3RlcklEKHNyYyArIDEpLCBhZGRyVGVtcFJlZ2lzdGVyLCA0KTsKKyNlbHNl
CisgICAgICAgIGlmIChhZGRyZXNzLm9mZnNldCA+PSAtMzI3NjggJiYgYWRkcmVzcy5vZmZzZXQg
PD0gMzI3NjcKKyAgICAgICAgICAgICYmICFtX2ZpeGVkV2lkdGgpCisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5zZGMxKHNyYywgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICBsdWkgICAgIGFkZHJUZW1w
LCAob2Zmc2V0ICsgMHg4MDAwKSA+PiAxNgorICAgICAgICAgICAgICAgIGFkZHUgICAgYWRkclRl
bXAsIGFkZHJUZW1wLCBiYXNlCisgICAgICAgICAgICAgICAgc2RjMSAgICBzcmMsIChvZmZzZXQg
JiAweGZmZmYpKGFkZHJUZW1wKQorICAgICAgICAgICAgICAqLworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIubHVpKGFkZHJUZW1wUmVnaXN0ZXIsIChhZGRyZXNzLm9mZnNldCArIDB4ODAwMCkgPj4g
MTYpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRy
VGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2Rj
MShzcmMsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgfQorI2Vu
ZGlmCisgICAgfQorCisgICAgdm9pZCBhZGREb3VibGUoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdp
c3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hZGRfZChkZXN0LCBkZXN0
LCBzcmMpOworICAgIH0KKworICAgIHZvaWQgYWRkRG91YmxlKEFkZHJlc3Mgc3JjLCBGUFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGxvYWREb3VibGUoc3JjLCBmcFRlbXBSZWdpc3Rl
cik7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZF9kKGRlc3QsIGRlc3QsIGZwVGVtcFJlZ2lzdGVy
KTsKKyAgICB9CisKKyAgICB2b2lkIHN1YkRvdWJsZShGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN1Yl9kKGRlc3QsIGRlc3Qs
IHNyYyk7CisgICAgfQorCisgICAgdm9pZCBzdWJEb3VibGUoQWRkcmVzcyBzcmMsIEZQUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbG9hZERvdWJsZShzcmMsIGZwVGVtcFJlZ2lzdGVy
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3ViX2QoZGVzdCwgZGVzdCwgZnBUZW1wUmVnaXN0ZXIp
OworICAgIH0KKworICAgIHZvaWQgbXVsRG91YmxlKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubXVsX2QoZGVzdCwgZGVzdCwg
c3JjKTsKKyAgICB9CisKKyAgICB2b2lkIG11bERvdWJsZShBZGRyZXNzIHNyYywgRlBSZWdpc3Rl
cklEIGRlc3QpCisgICAgeworICAgICAgICBsb2FkRG91YmxlKHNyYywgZnBUZW1wUmVnaXN0ZXIp
OworICAgICAgICBtX2Fzc2VtYmxlci5tdWxfZChkZXN0LCBkZXN0LCBmcFRlbXBSZWdpc3Rlcik7
CisgICAgfQorCisgICAgdm9pZCBjb252ZXJ0SW50MzJUb0RvdWJsZShSZWdpc3RlcklEIHNyYywg
RlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5tdGMxKHNyYywg
ZnBUZW1wUmVnaXN0ZXIpOworICAgICAgICBtX2Fzc2VtYmxlci5jdnRfZF93KGRlc3QsIGZwVGVt
cFJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICB2b2lkIGluc2VydFJlbGF4YXRpb25Xb3JkcygpCisg
ICAgeworICAgICAgICAvKiBXZSBuZWVkIGZvdXIgd29yZHMgZm9yIHJlbGF4YXRpb24uICovCisg
ICAgICAgIG1fYXNzZW1ibGVyLmJlcShNSVBTUmVnaXN0ZXJzOjp6ZXJvLCBNSVBTUmVnaXN0ZXJz
Ojp6ZXJvLCAzKTsgLy8gSnVtcCBvdmVyIG5vcHM7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgp
OworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7
CisgICAgfQorCisgICAgSnVtcCBicmFuY2hUcnVlKCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLmFwcGVuZEp1bXAoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYmMxdCgpOworICAgICAgICBt
X2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgaW5zZXJ0UmVsYXhhdGlvbldvcmRzKCk7CisgICAg
ICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLm5ld0ptcFNyYygpKTsKKyAgICB9CisKKyAgICBK
dW1wIGJyYW5jaEZhbHNlKCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFwcGVuZEp1bXAo
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYmMxZigpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3Ao
KTsKKyAgICAgICAgaW5zZXJ0UmVsYXhhdGlvbldvcmRzKCk7CisgICAgICAgIHJldHVybiBKdW1w
KG1fYXNzZW1ibGVyLm5ld0ptcFNyYygpKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaEVxdWFs
KFJlZ2lzdGVySUQgcnMsIFJlZ2lzdGVySUQgcnQpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5hcHBlbmRKdW1wKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmJlcShycywgcnQsIDApOworICAg
ICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgaW5zZXJ0UmVsYXhhdGlvbldvcmRzKCk7
CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLm5ld0ptcFNyYygpKTsKKyAgICB9CisK
KyAgICBKdW1wIGJyYW5jaE5vdEVxdWFsKFJlZ2lzdGVySUQgcnMsIFJlZ2lzdGVySUQgcnQpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hcHBlbmRKdW1wKCk7CisgICAgICAgIG1fYXNzZW1i
bGVyLmJuZShycywgcnQsIDApOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAg
aW5zZXJ0UmVsYXhhdGlvbldvcmRzKCk7CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVy
Lm5ld0ptcFNyYygpKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaERvdWJsZShEb3VibGVDb25k
aXRpb24gY29uZCwgRlBSZWdpc3RlcklEIGxlZnQsIEZQUmVnaXN0ZXJJRCByaWdodCkKKyAgICB7
CisgICAgICAgIGlmIChjb25kID09IERvdWJsZUVxdWFsKSB7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5jX2VxX2QobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUo
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29uZCA9PSBEb3VibGVOb3RFcXVhbCkgeworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuY19lcV9kKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIHJl
dHVybiBicmFuY2hGYWxzZSgpOyAvLyBmYWxzZQorICAgICAgICB9CisgICAgICAgIGlmIChjb25k
ID09IERvdWJsZUdyZWF0ZXJUaGFuKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jX25ndF9k
KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hGYWxzZSgpOyAvLyBmYWxz
ZQorICAgICAgICB9CisgICAgICAgIGlmIChjb25kID09IERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVh
bCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY19uZ2VfZChyaWdodCwgbGVmdCk7CisgICAg
ICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsgLy8gZmFsc2UKKyAgICAgICAgfQorICAgICAg
ICBpZiAoY29uZCA9PSBEb3VibGVMZXNzVGhhbikgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
Y19sdF9kKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gRG91YmxlTGVzc1RoYW5PckVxdWFsKSB7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5jX2xlX2QobGVmdCwgcmlnaHQpOworICAgICAgICAgICAg
cmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29uZCA9PSBEb3Vi
bGVFcXVhbE9yVW5vcmRlcmVkKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jX3VlcV9kKGxl
ZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKGNvbmQgPT0gRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCkgeworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuY19vbGVfZChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBy
ZXR1cm4gYnJhbmNoRmFsc2UoKTsgLy8gZmFsc2UKKyAgICAgICAgfQorICAgICAgICBpZiAoY29u
ZCA9PSBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCkgeworICAgICAgICAgICAg
bV9hc3NlbWJsZXIuY19vbHRfZChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICByZXR1cm4gYnJh
bmNoRmFsc2UoKTsgLy8gZmFsc2UKKyAgICAgICAgfQorICAgICAgICBpZiAoY29uZCA9PSBEb3Vi
bGVMZXNzVGhhbk9yVW5vcmRlcmVkKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jX3VsdF9k
KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKGNvbmQgPT0gRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQp
IHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNfdWxlX2QobGVmdCwgcmlnaHQpOworICAgICAg
ICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQoMCk7
CisKKyAgICAgICAgcmV0dXJuIEp1bXAoKTsKKyAgICB9CisKKyAgICAvLyBUcnVuY2F0ZXMgJ3Ny
YycgdG8gYW4gaW50ZWdlciwgYW5kIHBsYWNlcyB0aGUgcmVzdWx0aW5nICdkZXN0Jy4KKyAgICAv
LyBJZiB0aGUgcmVzdWx0IGlzIG5vdCByZXByZXNlbnRhYmxlIGFzIGEgMzIgYml0IHZhbHVlLCBi
cmFuY2guCisgICAgLy8gTWF5IGFsc28gYnJhbmNoIGZvciBzb21lIHZhbHVlcyB0aGF0IGFyZSBy
ZXByZXNlbnRhYmxlIGluIDMyIGJpdHMKKyAgICAvLyAoc3BlY2lmaWNhbGx5LCBpbiB0aGlzIGNh
c2UsIElOVF9NQVggMHg3ZmZmZmZmZikuCisgICAgSnVtcCBicmFuY2hUcnVuY2F0ZURvdWJsZVRv
SW50MzIoRlBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIudHJ1bmNfd19kKGZwVGVtcFJlZ2lzdGVyLHNyYyk7CisgICAgICAgIG1fYXNz
ZW1ibGVyLm1mYzEoZGVzdCwgZnBUZW1wUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNo
MzIoRXF1YWwsIGRlc3QsIEltbTMyKDB4N2ZmZmZmZmYpKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgLy8gSWYgbV9maXhlZFdpZHRoIGlzIHRydWUsIHdlIHdpbGwgZ2VuZXJhdGUgYSBmaXhlZCBu
dW1iZXIgb2YgaW5zdHJ1Y3Rpb25zLgorICAgIC8vIE90aGVyd2lzZSwgd2UgY2FuIGVtaXQgYW55
IG51bWJlciBvZiBpbnN0cnVjdGlvbnMuCisgICAgYm9vbCBtX2ZpeGVkV2lkdGg7CisKKyAgICBm
cmllbmQgY2xhc3MgTGlua0J1ZmZlcjsKKyAgICBmcmllbmQgY2xhc3MgUmVwYXRjaEJ1ZmZlcjsK
KworICAgIHN0YXRpYyB2b2lkIGxpbmtDYWxsKHZvaWQqIGNvZGUsIENhbGwgY2FsbCwgRnVuY3Rp
b25QdHIgZnVuY3Rpb24pCisgICAgeworICAgICAgICBNSVBTQXNzZW1ibGVyOjpsaW5rQ2FsbChj
b2RlLCBjYWxsLm1fam1wLCBmdW5jdGlvbi52YWx1ZSgpKTsKKyAgICB9CisKKyAgICBzdGF0aWMg
dm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsIGNhbGwsIENvZGVMb2NhdGlvbkxhYmVs
IGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAgICAgTUlQU0Fzc2VtYmxlcjo6cmVsaW5rQ2FsbChj
YWxsLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsIGNhbGws
IEZ1bmN0aW9uUHRyIGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAgICAgTUlQU0Fzc2VtYmxlcjo6
cmVsaW5rQ2FsbChjYWxsLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRk
cmVzcygpKTsKKyAgICB9CisKK307CisKK30KKworI2VuZGlmCisKKyNlbmRpZiAvLyBNYWNyb0Fz
c2VtYmxlck1JUFNfaApJbmRleDogaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGpp
dC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gNTE1NTIpCisrKyBqaXQvSklUT3Bjb2Rlcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE4NTcsNiArMTg1Nyw1NiBAQAogCiAgICAgYWRkUHRyKEltbTMy
KHNpemVvZihBcmdMaXN0KSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAorI2VsaWYgUExBVEZP
Uk0oTUlQUykKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcjMyKFJlZ2lzdGVyRmlsZTo6
QXJndW1lbnRDb3VudCwgcmVnVDApOworCisgICAgLy8gQWxsb2NhdGUgc3RhY2sgc3BhY2UgZm9y
IG91ciBhcmdsaXN0CisgICAgQ09NUElMRV9BU1NFUlQoKHNpemVvZihBcmdMaXN0KSAmIDB4Nykg
PT0gMCwgQXJnTGlzdF9zaG91bGRfYnlfOGJ5dGVfYWxpZ25lZCk7CisgICAgc3ViUHRyKEltbTMy
KHNpemVvZihBcmdMaXN0KSArIDI0KSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgLy8g
U2V0IHVwIGFyZ3VtZW50cworICAgIHN1YlB0cihJbW0zMigxKSwgcmVnVDApOyAvLyBEb24ndCBp
bmNsdWRlICd0aGlzJyBpbiBhcmdjb3VudAorCisgICAgLy8gUHVzaCBhcmdjb3VudCB0byAyNCAr
IG9mZnNldCgkc3ApCisgICAgc3RvcmVQdHIocmVnVDAsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVn
aXN0ZXIsIDI0ICsgT0JKRUNUX09GRlNFVE9GKEFyZ0xpc3QsIG1fYXJnQ291bnQpKSk7CisKKyAg
ICAvLyBDYWxjdWxhdGUgdGhlIHN0YXJ0IG9mIHRoZSBjYWxsZnJhbWUgaGVhZGVyLCBhbmQgc3Rv
cmUgaW4gcmVnVDEKKyAgICBtb3ZlKGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMSk7CisgICAgc3Vi
MzIoSW1tMzIoUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplICogKGludDMyX3Qpc2l6
ZW9mKFJlZ2lzdGVyKSksIHJlZ1QxKTsKKworICAgIC8vIENhbGN1bGF0ZSBzdGFydCBvZiBhcmd1
bWVudHMgYXMgY2FsbGZyYW1lIGhlYWRlciAtIHNpemVvZihSZWdpc3RlcikgKiBhcmdjb3VudCAo
cmVnVDEpCisgICAgbXVsMzIoSW1tMzIoc2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1QwLCByZWdUMCk7
CisgICAgc3ViUHRyKHJlZ1QwLCByZWdUMSk7CisKKyAgICAvLyBwdXNoIHBvaW50ZXIgdG8gYXJn
dW1lbnRzIHRvIDI0ICsgb2Zmc2V0KCRzcCkKKyAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhz
dGFja1BvaW50ZXJSZWdpc3RlciwgMjQgKyBPQkpFQ1RfT0ZGU0VUT0YoQXJnTGlzdCwgbV9hcmdz
KSkpOworCisgICAgLy8gU2V0dXAgYXJnMzogcmVnVDEgY3VycmVudGx5IHBvaW50cyB0byB0aGUg
Zmlyc3QgYXJndW1lbnQsIHJlZ1QxLXNpemVvZihSZWdpc3RlcikgcG9pbnRzIHRvICd0aGlzJwor
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgLShpbnQzMl90KXNpemVvZihSZWdpc3RlcikpLCBN
SVBTUmVnaXN0ZXJzOjphMyk7CisKKyAgICAvLyBTZXR1cCBhcmcyOgorICAgIGVtaXRHZXRGcm9t
Q2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6Q2FsbGVlLCBNSVBTUmVnaXN0ZXJzOjph
Mik7CisKKyAgICAvLyBTZXR1cCBhcmcxOgorICAgIG1vdmUoY2FsbEZyYW1lUmVnaXN0ZXIsIE1J
UFNSZWdpc3RlcnM6OmExKTsKKworICAgIC8vIFNldHVwIGFyZzQ6IEFyZ0xpc3QgaXMgcGFzc2Vk
IGJ5IHJlZmVyZW5jZS4gIEF0IDE2KCRzcCksIHN0b3JlICgkc3AgKyAyNCkKKyAgICBhZGRQdHIo
SW1tMzIoMjQpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVnVDIpOworICAgIHN0b3JlUHRyKHJl
Z1QyLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCAxNikpOworCisgICAgLy8gU2V0dXAg
YXJnMCBhcyAyMCgkc3ApIHRvIGhvbGQgdGhlIHJldHVybmVkIHN0cnVjdHVyZS4KKyAgICBBU1NF
UlQoc2l6ZW9mKEpTVmFsdWUpID09IDQpOworICAgIGFkZFB0cihJbW0zMigyMCksIHN0YWNrUG9p
bnRlclJlZ2lzdGVyLCBNSVBTUmVnaXN0ZXJzOjphMCk7CisKKyAgICAvLyBDYWxsCisgICAgY2Fs
bChBZGRyZXNzKE1JUFNSZWdpc3RlcnM6OmEyLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwg
bV9kYXRhKSkpOworCisgICAgLy8gR2V0IHJldHVybmVkIHZhbHVlIGZyb20gMCgkdjApIHdoaWNo
IGlzIHRoZSBzYW1lIGFzIDIwKCRzcCkKKyAgICBsb2FkUHRyKEFkZHJlc3MocmV0dXJuVmFsdWVS
ZWdpc3RlciwgMCksIHJldHVyblZhbHVlUmVnaXN0ZXIpOworCisgICAgLy8gUmVzdG9yZSBzdGFj
ayBzcGFjZQorICAgIGFkZFB0cihJbW0zMihzaXplb2YoQXJnTGlzdCkgKyAyNCksIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKKwogI2VsaWYgRU5BQkxFKEpJVF9PUFRJTUlaRV9OQVRJVkVfQ0FMTCkK
ICNlcnJvciAiSklUX09QVElNSVpFX05BVElWRV9DQUxMIG5vdCB5ZXQgc3VwcG9ydGVkIG9uIHRo
aXMgcGxhdGZvcm0uIgogI2Vsc2UKSW5kZXg6IGppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gNTE1NTIpCisrKyBqaXQvSklUU3R1YnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02MzMsNiArNjMzLDEwMCBAQAogICAgICJtb3YgcGMsIGxyIiAi
XG4iCiApOwogCisjZWxpZiBQTEFURk9STShNSVBTKQorCisjaWYgVVNFKEpJVF9TVFVCX0FSR1VN
RU5UX1ZBX0xJU1QpCisjZXJyb3IgIkpJVF9TVFVCX0FSR1VNRU5UX1ZBX0xJU1Qgbm90IHN1cHBv
cnRlZCBvbiBNSVBTLiIKKyNlbmRpZgorCithc20gdm9sYXRpbGUgKAorIi50ZXh0IiAiXG4iCisi
LmFsaWduIDIiICJcbiIKKyIuc2V0IG5vcmVvcmRlciIgIlxuIgorIi5zZXQgbm9tYWNybyIgIlxu
IgorIi5zZXQgbm9taXBzMTYiICJcbiIKKyIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGN0aVRyYW1w
b2xpbmUpICJcbiIKKyIuZW50ICIgU1lNQk9MX1NUUklORyhjdGlUcmFtcG9saW5lKSAiXG4iCitT
WU1CT0xfU1RSSU5HKGN0aVRyYW1wb2xpbmUpICI6IiAiXG4iCisgICAgImFkZGl1ICQyOSwkMjks
LTcyIiAiXG4iCisgICAgInN3ICAgICQzMSw0NCgkMjkpIiAiXG4iCisgICAgInN3ICAgICQxOCw0
MCgkMjkpIiAiXG4iCisgICAgInN3ICAgICQxNywzNigkMjkpIiAiXG4iCisgICAgInN3ICAgICQx
NiwzMigkMjkpIiAiXG4iCisjaWYgZGVmaW5lZChfX1BJQ19fKQorICAgICJzdyAgICAkMjgsMjgo
JDI5KSIgIlxuIgorI2VuZGlmCisgICAgIm1vdmUgICQxNiwkNiAgICAgICAjIHNldCBjYWxsRnJh
bWVSZWdpc3RlciIgIlxuIgorICAgICJsaSAgICAkMTcsNTEyICAgICAgIyBzZXQgdGltZW91dENo
ZWNrUmVnaXN0ZXIiICJcbiIKKyAgICAibW92ZSAgJDI1LCQ0ICAgICAgICMgbW92ZSBleGVjdXRh
YmxlQWRkcmVzcyB0byB0OSIgIlxuIgorICAgICJzdyAgICAkNSw1MigkMjkpICAgIyBzdG9yZSBy
ZWdpc3RlckZpbGUgdG8gY3VycmVudCBzdGFjayIgIlxuIgorICAgICJzdyAgICAkNiw1NigkMjkp
ICAgIyBzdG9yZSBjYWxsRnJhbWUgdG8gY3VyZW50IHN0YWNrIiAiXG4iCisgICAgInN3ICAgICQ3
LDYwKCQyOSkgICAjIHN0b3JlIGV4Y2VwdGlvbiB0byBjdXJyZW50IHN0YWNrIiAiXG4iCisgICAg
Imx3ICAgICQ4LDg4KCQyOSkgICAjIGxvYWQgZW5hYmxlUHJvZmlsZXJSZWZlcmVuY2UgZnJvbSBw
cmV2aW91cyBzdGFjayIgIlxuIgorICAgICJsdyAgICAkOSw5MigkMjkpICAgIyBsb2FkIGdsb2Jh
bERhdGEgZnJvbSBwcmV2aW91cyBzdGFjayIgIlxuIgorICAgICJzdyAgICAkOCw2NCgkMjkpICAg
IyBzdG9yZSBlbmFibGVQcm9maWxlclJlZmVyZW5jZSB0byBjdXJyZW50IHN0YWNrIiAiXG4iCisg
ICAgImphbHIgICQyNSIgIlxuIgorICAgICJzdyAgICAkOSw2OCgkMjkpICAgIyBzdG9yZSBnbG9i
YWxEYXRhIHRvIGN1cnJlbnQgc3RhY2siICJcbiIKKyAgICAibHcgICAgJDE2LDMyKCQyOSkiICJc
biIKKyAgICAibHcgICAgJDE3LDM2KCQyOSkiICJcbiIKKyAgICAibHcgICAgJDE4LDQwKCQyOSki
ICJcbiIKKyAgICAibHcgICAgJDMxLDQ0KCQyOSkiICJcbiIKKyAgICAianIgICAgJDMxIiAiXG4i
CisgICAgImFkZGl1ICQyOSwkMjksNzIiICJcbiIKKyIuc2V0IHJlb3JkZXIiICJcbiIKKyIuc2V0
IG1hY3JvIiAiXG4iCisiLmVuZCAiIFNZTUJPTF9TVFJJTkcoY3RpVHJhbXBvbGluZSkgIlxuIgor
KTsKKworYXNtIHZvbGF0aWxlICgKKyIudGV4dCIgIlxuIgorIi5hbGlnbiAyIiAiXG4iCisiLnNl
dCBub3Jlb3JkZXIiICJcbiIKKyIuc2V0IG5vbWFjcm8iICJcbiIKKyIuc2V0IG5vbWlwczE2IiAi
XG4iCisiLmdsb2JsICIgU1lNQk9MX1NUUklORyhjdGlWTVRocm93VHJhbXBvbGluZSkgIlxuIgor
Ii5lbnQgIiBTWU1CT0xfU1RSSU5HKGN0aVZNVGhyb3dUcmFtcG9saW5lKSAiXG4iCitTWU1CT0xf
U1RSSU5HKGN0aVZNVGhyb3dUcmFtcG9saW5lKSAiOiIgIlxuIgorI2lmIGRlZmluZWQoX19QSUNf
XykKKyAgICAibHcgICAgJDI4LDI4KCQyOSkiICJcbiIKKyIuc2V0IG1hY3JvIiAiXG4iCisjZW5k
aWYKKyAgICAiamFsICIgU1lNQk9MX1NUUklORyhjdGlfdm1fdGhyb3cpICJcbiIKKyAgICAibW92
ZSAgJDQsICQyOSIgIlxuIgorI2lmIGRlZmluZWQoX19QSUNfXykKKyIuc2V0IG5vbWFjcm8iICJc
biIKKyNlbmRpZgorICAgICJsdyAgICAkMTYsMzIoJDI5KSIgIlxuIgorICAgICJsdyAgICAkMTcs
MzYoJDI5KSIgIlxuIgorICAgICJsdyAgICAkMTgsNDAoJDI5KSIgIlxuIgorICAgICJsdyAgICAk
MzEsNDQoJDI5KSIgIlxuIgorICAgICJqciAgICAkMzEiICJcbiIKKyAgICAiYWRkaXUgJDI5LCQy
OSw3MiIgIlxuIgorIi5zZXQgcmVvcmRlciIgIlxuIgorIi5zZXQgbWFjcm8iICJcbiIKKyIuZW5k
ICIgU1lNQk9MX1NUUklORyhjdGlWTVRocm93VHJhbXBvbGluZSkgIlxuIgorKTsKKworYXNtIHZv
bGF0aWxlICgKKyIudGV4dCIgIlxuIgorIi5hbGlnbiAyIiAiXG4iCisiLnNldCBub3Jlb3JkZXIi
ICJcbiIKKyIuc2V0IG5vbWFjcm8iICJcbiIKKyIuc2V0IG5vbWlwczE2IiAiXG4iCisiLmdsb2Js
ICIgU1lNQk9MX1NUUklORyhjdGlPcFRocm93Tm90Q2F1Z2h0KSAiXG4iCisiLmVudCAiIFNZTUJP
TF9TVFJJTkcoY3RpT3BUaHJvd05vdENhdWdodCkgIlxuIgorU1lNQk9MX1NUUklORyhjdGlPcFRo
cm93Tm90Q2F1Z2h0KSAiOiIgIlxuIgorICAgICJsdyAgICAkMTYsMzIoJDI5KSIgIlxuIgorICAg
ICJsdyAgICAkMTcsMzYoJDI5KSIgIlxuIgorICAgICJsdyAgICAkMTgsNDAoJDI5KSIgIlxuIgor
ICAgICJsdyAgICAkMzEsNDQoJDI5KSIgIlxuIgorICAgICJqciAgICAkMzEiICJcbiIKKyAgICAi
YWRkaXUgJDI5LCQyOSw3MiIgIlxuIgorIi5zZXQgcmVvcmRlciIgIlxuIgorIi5zZXQgbWFjcm8i
ICJcbiIKKyIuZW5kICIgU1lNQk9MX1NUUklORyhjdGlPcFRocm93Tm90Q2F1Z2h0KSAiXG4iCisp
OworCiAjZWxpZiBDT01QSUxFUihNU1ZDKQogCiAjaWYgVVNFKEpJVF9TVFVCX0FSR1VNRU5UX1ZB
X0xJU1QpCkBAIC03MjcsNiArODIxLDIxIEBACiAKICAgICBBU1NFUlQoT0JKRUNUX09GRlNFVE9G
KHN0cnVjdCBKSVRTdGFja0ZyYW1lLCB0aHVua1JldHVybkFkZHJlc3MpID09IDB4MUMpOwogI2Vu
ZGlmCisKKyNpZiBQTEFURk9STShNSVBTKQorICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3Ry
dWN0IEpJVFN0YWNrRnJhbWUsIHByZXNlcnZlZEdQKSA9PSAyOCk7CisgICAgQVNTRVJUKE9CSkVD
VF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgcHJlc2VydmVkUzApID09IDMyKTsKKyAg
ICBBU1NFUlQoT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBwcmVzZXJ2ZWRT
MSkgPT0gMzYpOworICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJh
bWUsIHByZXNlcnZlZFMyKSA9PSA0MCk7CisgICAgQVNTRVJUKE9CSkVDVF9PRkZTRVRPRihzdHJ1
Y3QgSklUU3RhY2tGcmFtZSwgcHJlc2VydmVkUmV0dXJuQWRkcmVzcykgPT0gNDQpOworICAgIEFT
U0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIHRodW5rUmV0dXJuQWRk
cmVzcykgPT0gNDgpOworICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNr
RnJhbWUsIHJlZ2lzdGVyRmlsZSkgPT0gNTIpOworICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yo
c3RydWN0IEpJVFN0YWNrRnJhbWUsIGNhbGxGcmFtZSkgPT0gNTYpOworICAgIEFTU0VSVChPQkpF
Q1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIGV4Y2VwdGlvbikgPT0gNjApOworICAg
IEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIGVuYWJsZWRQcm9m
aWxlclJlZmVyZW5jZSkgPT0gNjQpOworICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0
IEpJVFN0YWNrRnJhbWUsIGdsb2JhbERhdGEpID09IDY4KTsKKworI2VuZGlmCiB9CiAKICNpZiBF
TkFCTEUoSklUX09QVElNSVpFX1BST1BFUlRZX0FDQ0VTUykKQEAgLTk3Niw2ICsxMDg1LDYwIEBA
CiAgICAgICAgICk7IFwKICAgICBydHlwZSBKSVRTdHViVGh1bmtlZF8jI29wKFNUVUJfQVJHU19E
RUNMQVJBVElPTikgXAogCisjZWxpZiBQTEFURk9STShNSVBTKQorI2lmICFkZWZpbmVkKF9fUElD
X18pCisjZGVmaW5lIERFRklORV9TVFVCX0ZVTkNUSU9OKHJ0eXBlLCBvcCkgXAorICAgIGV4dGVy
biAiQyIgeyBcCisgICAgICAgIHJ0eXBlIEpJVFN0dWJUaHVua2VkXyMjb3AoU1RVQl9BUkdTX0RF
Q0xBUkFUSU9OKTsgXAorICAgIH07IFwKKyAgICBhc20gdm9sYXRpbGUgKCBcCisgICAgICAgICIu
dGV4dCIgIlxuIiBcCisgICAgICAgICIuYWxpZ24gMiIgIlxuIiBcCisgICAgICAgICIuc2V0IG5v
cmVvcmRlciIgIlxuIiBcCisgICAgICAgICIuc2V0IG5vbWFjcm8iICJcbiIgXAorICAgICAgICAi
LnNldCBub21pcHMxNiIgIlxuIiBcCisgICAgICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGN0
aV8jI29wKSAiXG4iIFwKKyAgICAgICAgIi5lbnQgIiBTWU1CT0xfU1RSSU5HKGN0aV8jI29wKSAi
XG4iIFwKKyAgICAgICAgU1lNQk9MX1NUUklORyhjdGlfIyNvcCkgIjoiICJcbiIgXAorICAgICAg
ICAic3cgICAgJDMxLCA0OCgkMjkpIiAiXG4iIFwKKyAgICAgICAgImphbCAiIFNZTUJPTF9TVFJJ
TkcoSklUU3R1YlRodW5rZWRfIyNvcCkgIlxuIiBcCisgICAgICAgICJub3AiICJcbiIgXAorICAg
ICAgICAibHcgICAgJDMxLCA0OCgkMjkpIiAiXG4iIFwKKyAgICAgICAgImpyICAgICQzMSIgIlxu
IiBcCisgICAgICAgICJub3AiICJcbiIgXAorICAgICAgICAiLnNldCByZW9yZGVyIiAiXG4iIFwK
KyAgICAgICAgIi5zZXQgbWFjcm8iICJcbiIgXAorICAgICAgICAiLmVuZCAiIFNZTUJPTF9TVFJJ
TkcoY3RpXyMjb3ApICJcbiIgXAorICAgICAgICApOyBcCisgICAgcnR5cGUgSklUU3R1YlRodW5r
ZWRfIyNvcChTVFVCX0FSR1NfREVDTEFSQVRJT04pCisKKyNlbHNlIC8vIF9fUElDX18KKyNkZWZp
bmUgREVGSU5FX1NUVUJfRlVOQ1RJT04ocnR5cGUsIG9wKSBcCisgICAgZXh0ZXJuICJDIiB7IFwK
KyAgICAgICAgcnR5cGUgSklUU3R1YlRodW5rZWRfIyNvcChTVFVCX0FSR1NfREVDTEFSQVRJT04p
OyBcCisgICAgfTsgXAorICAgIGFzbSB2b2xhdGlsZSAoIFwKKyAgICAgICAgIi50ZXh0IiAiXG4i
IFwKKyAgICAgICAgIi5hbGlnbiAyIiAiXG4iIFwKKyAgICAgICAgIi5zZXQgbm9yZW9yZGVyIiAi
XG4iIFwKKyAgICAgICAgIi5zZXQgbm9taXBzMTYiICJcbiIgXAorICAgICAgICAiLmdsb2JsICIg
U1lNQk9MX1NUUklORyhjdGlfIyNvcCkgIlxuIiBcCisgICAgICAgICIuZW50ICIgU1lNQk9MX1NU
UklORyhjdGlfIyNvcCkgIlxuIiBcCisgICAgICAgIFNZTUJPTF9TVFJJTkcoY3RpXyMjb3ApICI6
IiAiXG4iIFwKKyAgICAgICAgImx3ICAgICQyOCwgMjgoJDI5KSIgIlxuIiBcCisgICAgICAgICJz
dyAgICAkMzEsIDQ4KCQyOSkiICJcbiIgXAorICAgICAgICAiamFsICIgU1lNQk9MX1NUUklORyhK
SVRTdHViVGh1bmtlZF8jI29wKSAiXG4iIFwKKyAgICAgICAgIm5vcCIgIlxuIiBcCisgICAgICAg
ICJsdyAgICAkMzEsIDQ4KCQyOSkiICJcbiIgXAorICAgICAgICAianIgICAgJDMxIiAiXG4iIFwK
KyAgICAgICAgIm5vcCIgIlxuIiBcCisgICAgICAgICIuc2V0IHJlb3JkZXIiICJcbiIgXAorICAg
ICAgICAiLmVuZCAiIFNZTUJPTF9TVFJJTkcoY3RpXyMjb3ApICJcbiIgXAorICAgICAgICApOyBc
CisgICAgcnR5cGUgSklUU3R1YlRodW5rZWRfIyNvcChTVFVCX0FSR1NfREVDTEFSQVRJT04pCisK
KyNlbmRpZgorCiAjZWxpZiBQTEFURk9STShBUk1fVFJBRElUSU9OQUwpICYmIENPTVBJTEVSKEdD
QykKIAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCkluZGV4OiBqaXQvSklUU3R1YnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBqaXQvSklUU3R1YnMuaAkocmV2aXNpb24gNTE1NTIpCisrKyBqaXQvSklUU3R1YnMu
aAkod29ya2luZyBjb3B5KQpAQCAtMTgzLDYgKzE4MywzMCBAQAogICAgICAgICAvLyBXaGVuIEpJ
VCBjb2RlIG1ha2VzIGEgY2FsbCwgaXQgcHVzaGVzIGl0cyByZXR1cm4gYWRkcmVzcyBqdXN0IGJl
bG93IHRoZSByZXN0IG9mIHRoZSBzdGFjay4KICAgICAgICAgUmV0dXJuQWRkcmVzc1B0ciogcmV0
dXJuQWRkcmVzc1Nsb3QoKSB7IHJldHVybiAmdGh1bmtSZXR1cm5BZGRyZXNzOyB9CiAgICAgfTsK
KyNlbGlmIFBMQVRGT1JNKE1JUFMpCisgICAgc3RydWN0IEpJVFN0YWNrRnJhbWUgeworICAgICAg
ICB2b2lkKiByZXNlcnZlZDsgLy8gVW51c2VkCisgICAgICAgIEpJVFN0dWJBcmcgYXJnc1s2XTsK
KworICAgICAgICB2b2lkKiBwcmVzZXJ2ZWRHUDsgLy8gc3RvcmUgR1Agd2hlbiB1c2luZyBQSUMg
Y29kZQorICAgICAgICB2b2lkKiBwcmVzZXJ2ZWRTMDsKKyAgICAgICAgdm9pZCogcHJlc2VydmVk
UzE7CisgICAgICAgIHZvaWQqIHByZXNlcnZlZFMyOworICAgICAgICB2b2lkKiBwcmVzZXJ2ZWRS
ZXR1cm5BZGRyZXNzOworCisgICAgICAgIFJldHVybkFkZHJlc3NQdHIgdGh1bmtSZXR1cm5BZGRy
ZXNzOworCisgICAgICAgIC8vIFRoZXNlIGFyZ3VtZW50cyBwYXNzZWQgaW4gYTEuLmEzIChhMCBj
b250YWluZWQgdGhlIGVudHJ5IGNvZGUgcG9pbnRlZCwgd2hpY2ggaXMgbm90IHByZXNlcnZlZCkK
KyAgICAgICAgUmVnaXN0ZXJGaWxlKiByZWdpc3RlckZpbGU7CisgICAgICAgIENhbGxGcmFtZSog
Y2FsbEZyYW1lOworICAgICAgICBKU1ZhbHVlKiBleGNlcHRpb247CisKKyAgICAgICAgLy8gVGhl
c2UgYXJndW1lbnRzIHBhc3NlZCBvbiB0aGUgc3RhY2suCisgICAgICAgIFByb2ZpbGVyKiogZW5h
YmxlZFByb2ZpbGVyUmVmZXJlbmNlOworICAgICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGE7
CisKKyAgICAgICAgUmV0dXJuQWRkcmVzc1B0ciogcmV0dXJuQWRkcmVzc1Nsb3QoKSB7IHJldHVy
biAmdGh1bmtSZXR1cm5BZGRyZXNzOyB9CisgICAgfTsKICNlbHNlCiAjZXJyb3IgIkpJVFN0YWNr
RnJhbWUgbm90IGRlZmluZWQgZm9yIHRoaXMgcGxhdGZvcm0uIgogI2VuZGlmCkluZGV4OiBqaXQv
SklUSW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGppdC9KSVRJbmxpbmVNZXRob2RzLmgJ
KHJldmlzaW9uIDUxNTUyKQorKysgaml0L0pJVElubGluZU1ldGhvZHMuaAkod29ya2luZyBjb3B5
KQpAQCAtMTYxLDYgKzE2MSwyMyBAQAogICAgIGxvYWRQdHIoYWRkcmVzcywgbGlua1JlZ2lzdGVy
KTsKIH0KIAorI2VsaWYgUExBVEZPUk0oTUlQUykKKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
cHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKFJlZ2lzdGVySUQgcmVnKQoreworICAgIG1v
dmUocmV0dXJuQWRkcmVzc1JlZ2lzdGVyLCByZWcpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjpyZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihSZWdpc3RlcklEIHJlZykKK3sK
KyAgICBtb3ZlKHJlZywgcmV0dXJuQWRkcmVzc1JlZ2lzdGVyKTsKK30KKworQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6cmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oQWRkcmVzcyBhZGRy
ZXNzKQoreworICAgIGxvYWRQdHIoYWRkcmVzcywgcmV0dXJuQWRkcmVzc1JlZ2lzdGVyKTsKK30K
KwogI2Vsc2UgLy8gUExBVEZPUk0oWDg2KSB8fCBQTEFURk9STShYODZfNjQpCiAKIEFMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChSZWdpc3RlcklE
IHJlZykKSW5kZXg6IGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaml0
L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAkocmV2aXNpb24gNTE1NTIpCisrKyBqaXQvRXhlY3V0YWJs
ZUFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0MiwxMCBAQAogI2luY2x1ZGUg
PGUzMnN0ZC5oPgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShNSVBTKSAmJiBQTEFURk9STShMSU5V
WCkKKyNpbmNsdWRlIDxzeXMvY2FjaGVjdGwuaD4KKyNlbmRpZgorCiAjZGVmaW5lIEpJVF9BTExP
Q0FUT1JfUEFHRV9TSVpFIChFeGVjdXRhYmxlQWxsb2NhdG9yOjpwYWdlU2l6ZSkKICNkZWZpbmUg
SklUX0FMTE9DQVRPUl9MQVJHRV9BTExPQ19TSVpFIChFeGVjdXRhYmxlQWxsb2NhdG9yOjpwYWdl
U2l6ZSAqIDQpCiAKQEAgLTE4Myw2ICsxODcsMzIgQEAKICAgICBzdGF0aWMgdm9pZCBjYWNoZUZs
dXNoKHZvaWQqLCBzaXplX3QpCiAgICAgewogICAgIH0KKyNlbGlmIFBMQVRGT1JNKE1JUFMpCisg
ICAgc3RhdGljIHZvaWQgY2FjaGVGbHVzaCh2b2lkKiBjb2RlLCBzaXplX3Qgc2l6ZSkKKyAgICB7
CisjaWYgQ09NUElMRVIoR0NDKSAmJiAoR0NDX1ZFUlNJT04gPj0gNDAzMDApCisjaWYgX19taXBz
X2lzYV9yZXYgPT0gMiAmJiAoR0NDX1ZFUlNJT04gPCA0MDQwMykKKyAgICAgICAgaW50IGxpbmVf
c2l6ZTsKKyAgICAgICAgYXNtICgicmRod3IgJTAsICQxIiA6ICI9ciIgKGxpbmVfc2l6ZSkpOwor
ICAgICAgICAvLworICAgICAgICAvLyBNb2RpZnkgInN0YXJ0IiBhbmQgImVuZCIgdG8gYXZvaWQg
R0NDIDQuMy4wLTQuNC4yIGJ1ZyBpbgorICAgICAgICAvLyBtaXBzX2V4cGFuZF9zeW5jaV9sb29w
IHRoYXQgbWF5IGV4ZWN1dGUgc3luY2kgb25lIG1vcmUgdGltZS4KKyAgICAgICAgLy8gInN0YXJ0
IiBwb2ludHMgdG8gdGhlIGZpc3J0IGJ5dGUgb2YgdGhlIGNhY2hlIGxpbmUuCisgICAgICAgIC8v
ICJlbmQiIHBvaW50cyB0byB0aGUgbGFzdCBieXRlIG9mIHRoZSBsaW5lIGJlZm9yZSB0aGUgbGFz
dCBjYWNoZSBsaW5lLgorICAgICAgICAvLyBCZWNhdXNlIHNpemUgaXMgYWx3YXlzIGEgbXVsdGlw
bGUgb2YgNCwgdGhpcyBpcyBzYWZlIHRvIHNldAorICAgICAgICAvLyAiZW5kIiB0byB0aGUgbGFz
dCBieXRlLgorICAgICAgICAvLworICAgICAgICBpbnRwdHJfdCBzdGFydCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8aW50cHRyX3Q+KGNvZGUpICYgKC1saW5lX3NpemUpOworICAgICAgICBpbnRwdHJfdCBl
bmQgPSAoKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGNvZGUpICsgc2l6ZSAtIDEpICYgKC1s
aW5lX3NpemUpKSAtIDE7CisgICAgICAgIF9fY2xlYXJfY2FjaGUocmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4oc3RhcnQpLCByZWludGVycHJldF9jYXN0PGNoYXIqPihlbmQpKTsKKyNlbHNlCisgICAg
ICAgIGludHB0cl90IGVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGNvZGUpICsgc2l6
ZTsKKyAgICAgICAgX19jbGVhcl9jYWNoZShyZWludGVycHJldF9jYXN0PGNoYXIqPihjb2RlKSwg
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZW5kKSk7CisjZW5kaWYKKyNlbHNlCisgICAgICAgIF9m
bHVzaF9jYWNoZShyZWludGVycHJldF9jYXN0PGNoYXIqPihjb2RlKSwgc2l6ZSwgQkNBQ0hFKTsK
KyNlbmRpZgorICAgIH0KICNlbGlmIFBMQVRGT1JNKEFSTV9USFVNQjIpICYmIFBMQVRGT1JNKElQ
SE9ORSkKICAgICBzdGF0aWMgdm9pZCBjYWNoZUZsdXNoKHZvaWQqIGNvZGUsIHNpemVfdCBzaXpl
KQogICAgIHsKSW5kZXg6IGppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBqaXQvSklULmgJKHJldmlz
aW9uIDUxNTUyKQorKysgaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjgsNiArMjY4LDI4
IEBACiAgICAgICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQgZnBSZWdUMCA9IEFSTVJlZ2lz
dGVyczo6ZDA7CiAgICAgICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQgZnBSZWdUMSA9IEFS
TVJlZ2lzdGVyczo6ZDE7CiAgICAgICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQgZnBSZWdU
MiA9IEFSTVJlZ2lzdGVyczo6ZDI7CisjZWxpZiBQTEFURk9STShNSVBTKQorICAgICAgICBzdGF0
aWMgY29uc3QgUmVnaXN0ZXJJRCByZXR1cm5WYWx1ZVJlZ2lzdGVyID0gTUlQU1JlZ2lzdGVyczo6
djA7CisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGNhY2hlZFJlc3VsdFJlZ2lzdGVy
ID0gTUlQU1JlZ2lzdGVyczo6djA7CisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGZp
cnN0QXJndW1lbnRSZWdpc3RlciA9IE1JUFNSZWdpc3RlcnM6OmEwOworCisgICAgICAgIC8vIHJl
Z1QwIG11c3QgYmUgdjAgZm9yIHJldHVybmluZyBhIDMyLWJpdCB2YWx1ZS4KKyAgICAgICAgc3Rh
dGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnVDAgPSBNSVBTUmVnaXN0ZXJzOjp2MDsKKworICAgICAg
ICAvLyByZWdUMSBtdXN0IGJlIHYxIGZvciByZXR1cm5pbmcgYSBwYWlyIG9mIDMyLWJpdCB2YWx1
ZS4KKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnVDEgPSBNSVBTUmVnaXN0ZXJz
Ojp2MTsKKworICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdUMiA9IE1JUFNSZWdp
c3RlcnM6OnQ0OworCisgICAgICAgIC8vIHJlZ1QzIG11c3QgYmUgc2F2ZWQgaW4gdGhlIGNhbGxl
ZSwgc28gdXNlIGFuIFMgcmVnaXN0ZXIuCisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklE
IHJlZ1QzID0gTUlQU1JlZ2lzdGVyczo6czI7CisKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lz
dGVySUQgY2FsbEZyYW1lUmVnaXN0ZXIgPSBNSVBTUmVnaXN0ZXJzOjpzMDsKKyAgICAgICAgc3Rh
dGljIGNvbnN0IFJlZ2lzdGVySUQgdGltZW91dENoZWNrUmVnaXN0ZXIgPSBNSVBTUmVnaXN0ZXJz
OjpzMTsKKworICAgICAgICBzdGF0aWMgY29uc3QgRlBSZWdpc3RlcklEIGZwUmVnVDAgPSBNSVBT
UmVnaXN0ZXJzOjpmNDsKKyAgICAgICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBmcFJlZ1Qx
ID0gTUlQU1JlZ2lzdGVyczo6ZjY7CisgICAgICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQg
ZnBSZWdUMiA9IE1JUFNSZWdpc3RlcnM6OmY4OwogI2Vsc2UKICAgICAjZXJyb3IgIkpJVCBub3Qg
c3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0uIgogI2VuZGlmCkBAIC02ODYsNyArNzA4LDQ5IEBA
CiAgICAgICAgIC8vIHNlcXVlbmNlUHV0QnlJZAogICAgICAgICBzdGF0aWMgY29uc3QgaW50IHNl
cXVlbmNlUHV0QnlJZEluc3RydWN0aW9uU3BhY2UgPSAyODsKICAgICAgICAgc3RhdGljIGNvbnN0
IGludCBzZXF1ZW5jZVB1dEJ5SWRDb25zdGFudFNwYWNlID0gMzsKKyNlbGlmIFBMQVRGT1JNKE1J
UFMpCisjaWYgX19taXBzID09IDEKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNl
dFB1dEJ5SWRTdHJ1Y3R1cmUgPSAxNjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9m
ZnNldFB1dEJ5SWRFeHRlcm5hbExvYWQgPSA0ODsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBw
YXRjaExlbmd0aFB1dEJ5SWRFeHRlcm5hbExvYWQgPSAyMDsKKyAgICAgICAgc3RhdGljIGNvbnN0
IGludCBwYXRjaE9mZnNldFB1dEJ5SWRQcm9wZXJ0eU1hcE9mZnNldCA9IDY4OworICAgICAgICBz
dGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZFN0cnVjdHVyZSA9IDE2OworICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2UgPSA0
ODsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRFeHRlcm5hbExv
YWQgPSA0ODsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaExlbmd0aEdldEJ5SWRFeHRl
cm5hbExvYWQgPSAyMDsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5
SWRQcm9wZXJ0eU1hcE9mZnNldCA9IDY4OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNo
T2Zmc2V0R2V0QnlJZFB1dFJlc3VsdCA9IDg4OworI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcp
CisgICAgICAgICNlcnJvciAiT1BDT0RFX1NBTVBMSU5HIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIgor
I2Vsc2UKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRTbG93Q2Fz
ZUNhbGwgPSA0MDsKICNlbmRpZgorICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0
T3BDYWxsQ29tcGFyZVRvSnVtcCA9IDMyOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNo
T2Zmc2V0TWV0aG9kQ2hlY2tQcm90b09iaiA9IDMyOworICAgICAgICBzdGF0aWMgY29uc3QgaW50
IHBhdGNoT2Zmc2V0TWV0aG9kQ2hlY2tQcm90b1N0cnVjdCA9IDU2OworICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IHBhdGNoT2Zmc2V0TWV0aG9kQ2hlY2tQdXRGdW5jdGlvbiA9IDg4OworI2Vsc2Ug
Ly8gX19taXBzID09IDEKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldFB1dEJ5
SWRTdHJ1Y3R1cmUgPSAxMjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldFB1
dEJ5SWRFeHRlcm5hbExvYWQgPSA0NDsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaExl
bmd0aFB1dEJ5SWRFeHRlcm5hbExvYWQgPSAxNjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBw
YXRjaE9mZnNldFB1dEJ5SWRQcm9wZXJ0eU1hcE9mZnNldCA9IDYwOworICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZFN0cnVjdHVyZSA9IDEyOworICAgICAgICBzdGF0
aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2UgPSA0NDsKKyAg
ICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRFeHRlcm5hbExvYWQgPSA0
NDsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaExlbmd0aEdldEJ5SWRFeHRlcm5hbExv
YWQgPSAxNjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRQcm9w
ZXJ0eU1hcE9mZnNldCA9IDYwOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0
R2V0QnlJZFB1dFJlc3VsdCA9IDc2OworI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCisgICAg
ICAgICNlcnJvciAiT1BDT0RFX1NBTVBMSU5HIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIgorI2Vsc2UK
KyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwg
PSA0MDsKKyNlbmRpZgorICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0T3BDYWxs
Q29tcGFyZVRvSnVtcCA9IDMyOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0
TWV0aG9kQ2hlY2tQcm90b09iaiA9IDMyOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNo
T2Zmc2V0TWV0aG9kQ2hlY2tQcm90b1N0cnVjdCA9IDUyOworICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IHBhdGNoT2Zmc2V0TWV0aG9kQ2hlY2tQdXRGdW5jdGlvbiA9IDg0OworI2VuZGlmCisjZW5k
aWYKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQogCiAjaWYgZGVmaW5lZChBU1NFTUJMRVJf
SEFTX0NPTlNUQU5UX1BPT0wpICYmIEFTU0VNQkxFUl9IQVNfQ09OU1RBTlRfUE9PTAo=
</data>
<flag name="commit-queue"
          id="30434"
          type_id="3"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44106</attachid>
            <date>2009-12-01 15:03:54 -0800</date>
            <delta_ts>2010-02-01 17:20:39 -0800</delta_ts>
            <desc>MIPS Patch Part 1 20091201</desc>
            <filename>mips_jit_part1_20091201.diff</filename>
            <type>text/plain</type>
            <size>94466</size>
            <attacher name="Chao-ying Fu">fu</attacher>
            
              <data encoding="base64">SW5kZXg6IHd0Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHd0Zi9QbGF0Zm9ybS5oCShyZXZp
c2lvbiA1MTU1MikKKysrIHd0Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzYsNiAr
MjM2LDE1IEBACiAjZGVmaW5lIFdURl9QTEFURk9STV9CSUdfRU5ESUFOIDEKICNlbmRpZgogCisv
KiBQTEFURk9STShNSVBTKSAqLworLyogTm90ZTogT25seSBPMzIgQUJJIGlzIHRlc3RlZCwgc28g
d2UgZW5hYmxlIGl0IGZvciBPMzIgQUJJIGZvciBub3cuICAqLworI2lmICAgKGRlZmluZWQobWlw
cykgfHwgZGVmaW5lZChfX21pcHNfXykpICYmIGRlZmluZWQoX0FCSU8zMikKKyNkZWZpbmUgV1RG
X1BMQVRGT1JNX01JUFMgMQorI2lmIGRlZmluZWQoX19NSVBTRUJfXykKKyNkZWZpbmUgV1RGX1BM
QVRGT1JNX0JJR19FTkRJQU4gMQorI2VuZGlmCisjZW5kaWYgLyogTUlQUyAqLworCiAvKiBQTEFU
Rk9STShBUk0pICovCiAjZGVmaW5lIFBMQVRGT1JNX0FSTV9BUkNIKE4pIChQTEFURk9STShBUk0p
ICYmIEFSTV9BUkNIX1ZFUlNJT04gPj0gTikKIApAQCAtNzQ4LDcgKzc1Nyw3IEBACiAjaWYgIWRl
ZmluZWQoV1RGX1VTRV9KU1ZBTFVFNjQpICYmICFkZWZpbmVkKFdURl9VU0VfSlNWQUxVRTMyKSAm
JiAhZGVmaW5lZChXVEZfVVNFX0pTVkFMVUUzMl82NCkKICNpZiBQTEFURk9STShYODZfNjQpICYm
IChQTEFURk9STShEQVJXSU4pIHx8IFBMQVRGT1JNKExJTlVYKSB8fCBQTEFURk9STShXSU5fT1Mp
KQogI2RlZmluZSBXVEZfVVNFX0pTVkFMVUU2NCAxCi0jZWxpZiBQTEFURk9STShBUk0pIHx8IFBM
QVRGT1JNKFBQQzY0KQorI2VsaWYgUExBVEZPUk0oQVJNKSB8fCBQTEFURk9STShQUEM2NCkgfHwg
UExBVEZPUk0oTUlQUykKICNkZWZpbmUgV1RGX1VTRV9KU1ZBTFVFMzIgMQogI2VsaWYgUExBVEZP
Uk0oV0lOX09TKSAmJiBDT01QSUxFUihNSU5HVykKIC8qIFVzaW5nIEpTVkFMVUUzMl82NCBjYXVz
ZXMgcGFkZGluZy9hbGlnbmVtZW50IGlzc3VlcyBmb3IgSklUU3R1YkFyZwpAQCAtNzk2LDYgKzgw
NSw5IEBACiAgICAgI2RlZmluZSBXVEZfVVNFX0pJVF9TVFVCX0FSR1VNRU5UX1ZBX0xJU1QgMQog
I2VsaWYgUExBVEZPUk0oQVJNX1RSQURJVElPTkFMKSAmJiBQTEFURk9STShMSU5VWCkKICAgICAj
ZGVmaW5lIEVOQUJMRV9KSVQgMQorI2VsaWYgUExBVEZPUk0oTUlQUykgJiYgUExBVEZPUk0oTElO
VVgpCisgICAgI2RlZmluZSBFTkFCTEVfSklUIDAKKyAgICAjZGVmaW5lIFdURl9VU0VfSklUX1NU
VUJfQVJHVU1FTlRfVkFfTElTVCAwCiAjZW5kaWYKICNlbmRpZiAvKiBQTEFURk9STShRVCkgKi8K
IApAQCAtODUwLDcgKzg2Miw4IEBACiAjaWYgKFBMQVRGT1JNKFg4NikgJiYgUExBVEZPUk0oV0lO
X09TKSAmJiBDT01QSUxFUihNSU5HVykgJiYgR0NDX1ZFUlNJT04gPj0gNDAxMDApIFwKICB8fCAo
UExBVEZPUk0oWDg2KSAmJiBQTEFURk9STShXSU5fT1MpICYmIENPTVBJTEVSKE1TVkMpKSBcCiAg
fHwgKFBMQVRGT1JNKFg4NikgJiYgUExBVEZPUk0oTElOVVgpICYmIEdDQ19WRVJTSU9OID49IDQw
MTAwKSBcCi0gfHwgKFBMQVRGT1JNKEFSTV9UUkFESVRJT05BTCkgJiYgUExBVEZPUk0oTElOVVgp
KQorIHx8IChQTEFURk9STShBUk1fVFJBRElUSU9OQUwpICYmIFBMQVRGT1JNKExJTlVYKSkgXAor
IHx8IChQTEFURk9STShNSVBTKSAmJiBQTEFURk9STShMSU5VWCkpCiAjZGVmaW5lIEVOQUJMRV9Z
QVJSIDEKICNkZWZpbmUgRU5BQkxFX1lBUlJfSklUIDEKICNlbmRpZgpJbmRleDogeWFyci9SZWdl
eEpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0geWFyci9SZWdleEpJVC5jcHAJKHJldmlzaW9uIDUxNTUy
KQorKysgeWFyci9SZWdleEpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDE2IEBA
CiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnVDEgPSBBUk1SZWdpc3RlcnM6OnI2Owog
CiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmV0dXJuUmVnaXN0ZXIgPSBBUk1SZWdpc3Rl
cnM6OnIwOworI2VsaWYgUExBVEZPUk0oTUlQUykKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJ
RCBpbnB1dCA9IE1JUFNSZWdpc3RlcnM6OmEwOworICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklE
IGluZGV4ID0gTUlQU1JlZ2lzdGVyczo6YTE7CisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQg
bGVuZ3RoID0gTUlQU1JlZ2lzdGVyczo6YTI7CisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQg
b3V0cHV0ID0gTUlQU1JlZ2lzdGVyczo6YTM7CisKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJ
RCByZWdUMCA9IE1JUFNSZWdpc3RlcnM6OnQ0OworICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklE
IHJlZ1QxID0gTUlQU1JlZ2lzdGVyczo6dDU7CisKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJ
RCByZXR1cm5SZWdpc3RlciA9IE1JUFNSZWdpc3RlcnM6OnYwOwogI2VsaWYgUExBVEZPUk0oWDg2
KQogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGlucHV0ID0gWDg2UmVnaXN0ZXJzOjplYXg7
CiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgaW5kZXggPSBYODZSZWdpc3RlcnM6OmVkeDsK
QEAgLTEzMTMsNiArMTMyMyw4IEBACiAgICAgICAgIHB1c2goQVJNUmVnaXN0ZXJzOjpyNSk7CiAg
ICAgICAgIHB1c2goQVJNUmVnaXN0ZXJzOjpyNik7CiAgICAgICAgIG1vdmUoQVJNUmVnaXN0ZXJz
OjpyMywgb3V0cHV0KTsKKyNlbGlmIFBMQVRGT1JNKE1JUFMpCisgICAgICAgIC8vIERvIG5vdGhp
bmcuCiAjZW5kaWYKICAgICB9CiAKQEAgLTEzMzAsNiArMTM0Miw4IEBACiAgICAgICAgIHBvcChB
Uk1SZWdpc3RlcnM6OnI2KTsKICAgICAgICAgcG9wKEFSTVJlZ2lzdGVyczo6cjUpOwogICAgICAg
ICBwb3AoQVJNUmVnaXN0ZXJzOjpyNCk7CisjZWxpZiBQTEFURk9STShNSVBTKQorICAgICAgICAv
LyBEbyBub3RoaW5nCiAjZW5kaWYKICAgICAgICAgcmV0KCk7CiAgICAgfQpJbmRleDogYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyLmgJKHJldmlzaW9uIDUxNTUyKQorKysgYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDEwIEBACiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJB
Uk0uaCIKIG5hbWVzcGFjZSBKU0MgeyB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyQVJNIE1hY3JvQXNz
ZW1ibGVyQmFzZTsgfTsKIAorI2VsaWYgUExBVEZPUk0oTUlQUykKKyNpbmNsdWRlICJNYWNyb0Fz
c2VtYmxlck1JUFMuaCIKK25hbWVzcGFjZSBKU0MgeyB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyTUlQ
UyBNYWNyb0Fzc2VtYmxlckJhc2U7IH07CisKICNlbGlmIFBMQVRGT1JNKFg4NikKICNpbmNsdWRl
ICJNYWNyb0Fzc2VtYmxlclg4Ni5oIgogbmFtZXNwYWNlIEpTQyB7IHR5cGVkZWYgTWFjcm9Bc3Nl
bWJsZXJYODYgTWFjcm9Bc3NlbWJsZXJCYXNlOyB9OwpJbmRleDogYXNzZW1ibGVyL01JUFNBc3Nl
bWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBhc3NlbWJsZXIvTUlQU0Fzc2VtYmxlci5oCShyZXZpc2lv
biAwKQorKysgYXNzZW1ibGVyL01JUFNBc3NlbWJsZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw5NDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IFVuaXZlcnNpdHkgb2YgU3plZ2VkCisg
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1JUFMgVGVjaG5v
bG9naWVzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBNSVBTIFRFQ0hOT0xPR0lFUywgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIE1JUFMgVEVDSE5PTE9HSUVTLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBN
SVBTQXNzZW1ibGVyX2gKKyNkZWZpbmUgTUlQU0Fzc2VtYmxlcl9oCisKKyNpbmNsdWRlIDx3dGYv
UGxhdGZvcm0uaD4KKyNpbmNsdWRlIDx3dGYvU2VnbWVudGVkVmVjdG9yLmg+CisKKyNpZiBFTkFC
TEUoQVNTRU1CTEVSKSAmJiBQTEFURk9STShNSVBTKQorCisjaW5jbHVkZSAiQXNzZW1ibGVyQnVm
ZmVyLmgiCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEpTQyB7CisK
K3R5cGVkZWYgdWludDMyX3QgTUlQU1dvcmQ7CisKK25hbWVzcGFjZSBNSVBTUmVnaXN0ZXJzIHsK
KyAgICB0eXBlZGVmIGVudW0geworICAgICAgICByMCA9IDAsCisgICAgICAgIHIxLAorICAgICAg
ICByMiwKKyAgICAgICAgcjMsCisgICAgICAgIHI0LAorICAgICAgICByNSwKKyAgICAgICAgcjYs
CisgICAgICAgIHI3LAorICAgICAgICByOCwKKyAgICAgICAgcjksCisgICAgICAgIHIxMCwKKyAg
ICAgICAgcjExLAorICAgICAgICByMTIsCisgICAgICAgIHIxMywKKyAgICAgICAgcjE0LAorICAg
ICAgICByMTUsCisgICAgICAgIHIxNiwKKyAgICAgICAgcjE3LAorICAgICAgICByMTgsCisgICAg
ICAgIHIxOSwKKyAgICAgICAgcjIwLAorICAgICAgICByMjEsCisgICAgICAgIHIyMiwKKyAgICAg
ICAgcjIzLAorICAgICAgICByMjQsCisgICAgICAgIHIyNSwKKyAgICAgICAgcjI2LAorICAgICAg
ICByMjcsCisgICAgICAgIHIyOCwKKyAgICAgICAgcjI5LAorICAgICAgICByMzAsCisgICAgICAg
IHIzMSwKKyAgICAgICAgemVybyA9IHIwLAorICAgICAgICBhdCA9IHIxLAorICAgICAgICB2MCA9
IHIyLAorICAgICAgICB2MSA9IHIzLAorICAgICAgICBhMCA9IHI0LAorICAgICAgICBhMSA9IHI1
LAorICAgICAgICBhMiA9IHI2LAorICAgICAgICBhMyA9IHI3LAorICAgICAgICB0MCA9IHI4LAor
ICAgICAgICB0MSA9IHI5LAorICAgICAgICB0MiA9IHIxMCwKKyAgICAgICAgdDMgPSByMTEsCisg
ICAgICAgIHQ0ID0gcjEyLAorICAgICAgICB0NSA9IHIxMywKKyAgICAgICAgdDYgPSByMTQsCisg
ICAgICAgIHQ3ID0gcjE1LAorICAgICAgICBzMCA9IHIxNiwKKyAgICAgICAgczEgPSByMTcsCisg
ICAgICAgIHMyID0gcjE4LAorICAgICAgICBzMyA9IHIxOSwKKyAgICAgICAgczQgPSByMjAsCisg
ICAgICAgIHM1ID0gcjIxLAorICAgICAgICBzNiA9IHIyMiwKKyAgICAgICAgczcgPSByMjMsCisg
ICAgICAgIHQ4ID0gcjI0LAorICAgICAgICB0OSA9IHIyNSwKKyAgICAgICAgazAgPSByMjYsCisg
ICAgICAgIGsxID0gcjI3LAorICAgICAgICBncCA9IHIyOCwKKyAgICAgICAgc3AgPSByMjksCisg
ICAgICAgIGZwID0gcjMwLAorICAgICAgICByYSA9IHIzMQorICAgIH0gUmVnaXN0ZXJJRDsKKwor
ICAgIHR5cGVkZWYgZW51bSB7CisgICAgICAgIGYwLAorICAgICAgICBmMSwKKyAgICAgICAgZjIs
CisgICAgICAgIGYzLAorICAgICAgICBmNCwKKyAgICAgICAgZjUsCisgICAgICAgIGY2LAorICAg
ICAgICBmNywKKyAgICAgICAgZjgsCisgICAgICAgIGY5LAorICAgICAgICBmMTAsCisgICAgICAg
IGYxMSwKKyAgICAgICAgZjEyLAorICAgICAgICBmMTMsCisgICAgICAgIGYxNCwKKyAgICAgICAg
ZjE1LAorICAgICAgICBmMTYsCisgICAgICAgIGYxNywKKyAgICAgICAgZjE4LAorICAgICAgICBm
MTksCisgICAgICAgIGYyMCwKKyAgICAgICAgZjIxLAorICAgICAgICBmMjIsCisgICAgICAgIGYy
MywKKyAgICAgICAgZjI0LAorICAgICAgICBmMjUsCisgICAgICAgIGYyNiwKKyAgICAgICAgZjI3
LAorICAgICAgICBmMjgsCisgICAgICAgIGYyOSwKKyAgICAgICAgZjMwLAorICAgICAgICBmMzEK
KyAgICB9IEZQUmVnaXN0ZXJJRDsKKworfSAvLyBuYW1lc3BhY2UgTUlQU1JlZ2lzdGVycworCitj
bGFzcyBNSVBTQXNzZW1ibGVyIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIE1JUFNSZWdpc3RlcnM6
OlJlZ2lzdGVySUQgUmVnaXN0ZXJJRDsKKyAgICB0eXBlZGVmIE1JUFNSZWdpc3RlcnM6OkZQUmVn
aXN0ZXJJRCBGUFJlZ2lzdGVySUQ7CisgICAgdHlwZWRlZiBTZWdtZW50ZWRWZWN0b3I8aW50LCA2
ND4gSnVtcHM7CisKKyAgICBNSVBTQXNzZW1ibGVyKCkKKyAgICB7CisgICAgfQorCisgICAgLy8g
TUlQUyBpbnN0cnVjdGlvbiBvcGNvZGUgZmllbGQgcG9zaXRpb24KKyAgICBlbnVtIHsKKyAgICAg
ICAgT1BfU0hfUkQgPSAxMSwKKyAgICAgICAgT1BfU0hfUlQgPSAxNiwKKyAgICAgICAgT1BfU0hf
UlMgPSAyMSwKKyAgICAgICAgT1BfU0hfU0hBTVQgPSA2LAorICAgICAgICBPUF9TSF9DT0RFID0g
MTYsCisgICAgICAgIE9QX1NIX0ZEID0gNiwKKyAgICAgICAgT1BfU0hfRlMgPSAxMSwKKyAgICAg
ICAgT1BfU0hfRlQgPSAxNgorICAgIH07CisKKyAgICBjbGFzcyBKbXBTcmMgeworICAgICAgICBm
cmllbmQgY2xhc3MgTUlQU0Fzc2VtYmxlcjsKKyAgICBwdWJsaWM6CisgICAgICAgIEptcFNyYygp
CisgICAgICAgICAgICA6IG1fb2Zmc2V0KC0xKQorICAgICAgICB7CisgICAgICAgIH0KKworICAg
IHByaXZhdGU6CisgICAgICAgIEptcFNyYyhpbnQgb2Zmc2V0KQorICAgICAgICAgICAgOiBtX29m
ZnNldChvZmZzZXQpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGludCBtX29mZnNl
dDsKKyAgICB9OworCisgICAgY2xhc3MgSm1wRHN0IHsKKyAgICAgICAgZnJpZW5kIGNsYXNzIE1J
UFNBc3NlbWJsZXI7CisgICAgcHVibGljOgorICAgICAgICBKbXBEc3QoKQorICAgICAgICAgICAg
OiBtX29mZnNldCgtMSkKKyAgICAgICAgICAgICwgbV91c2VkKGZhbHNlKQorICAgICAgICB7Cisg
ICAgICAgIH0KKworICAgICAgICBib29sIGlzVXNlZCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlZDsg
fQorICAgICAgICB2b2lkIHVzZWQoKSB7IG1fdXNlZCA9IHRydWU7IH0KKyAgICBwcml2YXRlOgor
ICAgICAgICBKbXBEc3QoaW50IG9mZnNldCkKKyAgICAgICAgICAgIDogbV9vZmZzZXQob2Zmc2V0
KQorICAgICAgICAgICAgLCBtX3VzZWQoZmFsc2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFT
U0VSVChtX29mZnNldCA9PSBvZmZzZXQpOworICAgICAgICB9CisKKyAgICAgICAgaW50IG1fb2Zm
c2V0IDogMzE7CisgICAgICAgIGludCBtX3VzZWQgOiAxOworICAgIH07CisKKyAgICB2b2lkIGVt
aXRJbnN0KE1JUFNXb3JkIG9wKQorICAgIHsKKyAgICAgICAgdm9pZCogb2xkX2Jhc2UgPSBtX2J1
ZmZlci5kYXRhKCk7CisKKyAgICAgICAgbV9idWZmZXIucHV0SW50KG9wKTsKKworICAgICAgICB2
b2lkKiBuZXdfYmFzZSA9IG1fYnVmZmVyLmRhdGEoKTsKKyAgICAgICAgaWYgKG9sZF9iYXNlICE9
IG5ld19iYXNlKSB7CisgICAgICAgICAgICByZWxvY2F0ZUp1bXBzKG9sZF9iYXNlLCBuZXdfYmFz
ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIG5vcCgpCisgICAgeworICAgICAgICBl
bWl0SW5zdCgweDAwMDAwMDAwKTsKKyAgICB9CisKKyAgICAvKiBOZWVkIHRvIGluc2VydCBvbmUg
bG9hZCBkYXRhIGRlbGF5IG5vcCBmb3IgbWlwczEuICAqLworICAgIHZvaWQgbG9hZERlbGF5Tm9w
KCkKKyAgICB7CisjaWYgX19taXBzID09IDEKKyAgICAgICAgbm9wKCk7CisjZW5kaWYKKyAgICB9
CisKKyAgICAvKiBOZWVkIHRvIGluc2VydCBvbmUgY29wcm9jZXNzb3IgYWNjZXNzIGRlbGF5IG5v
cCBmb3IgbWlwczEuICAqLworICAgIHZvaWQgY29wRGVsYXlOb3AoKQorICAgIHsKKyNpZiBfX21p
cHMgPT0gMQorICAgICAgICBub3AoKTsKKyNlbmRpZgorICAgIH0KKworICAgIHZvaWQgbW92ZShS
ZWdpc3RlcklEIHJkLCBSZWdpc3RlcklEIHJzKQorICAgIHsKKyNpZiBkZWZpbmVkKF9BQklPMzIp
CisgICAgICAgIC8qIGFkZHUgKi8KKyAgICAgICAgZW1pdEluc3QoMHgwMDAwMDAyMSB8IChyZCA8
PCBPUF9TSF9SRCkgfCAocnMgPDwgT1BfU0hfUlMpKTsKKyNlbHNlCisgICAgICAgIC8qIGRhZGR1
ICovCisgICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMmQgfCAocmQgPDwgT1BfU0hfUkQpIHwgKHJz
IDw8IE9QX1NIX1JTKSk7CisjZW5kaWYKKyAgICB9CisKKyAgICAvKiBTZXQgYW4gaW1tZWRpYXRl
IHZhbHVlIHRvIGEgcmVnaXN0ZXIuICBUaGlzIG1heSBnZW5lcmF0ZSAxIG9yIDIKKyAgICAgICBp
bnN0cnVjdGlvbnMuICAqLworICAgIHZvaWQgbGkoUmVnaXN0ZXJJRCBkZXN0LCBpbnQgaW1tKQor
ICAgIHsKKyAgICAgICAgaWYgKGltbSA+PSAtMzI3NjggJiYgaW1tIDw9IDMyNzY3KQorICAgICAg
ICAgICAgYWRkaXUoZGVzdCwgTUlQU1JlZ2lzdGVyczo6emVybywgaW1tKTsKKyAgICAgICAgZWxz
ZSBpZiAoaW1tID49IDAgJiYgaW1tIDwgNjU1MzYpCisgICAgICAgICAgICBvcmkoZGVzdCwgTUlQ
U1JlZ2lzdGVyczo6emVybywgaW1tKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBsdWko
ZGVzdCwgaW1tID4+IDE2KTsKKyAgICAgICAgICAgIGlmIChpbW0gJiAweGZmZmYpCisgICAgICAg
ICAgICAgICAgb3JpKGRlc3QsIGRlc3QsIGltbSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2
b2lkIGx1aShSZWdpc3RlcklEIHJ0LCBpbnQgaW1tKQorICAgIHsKKyAgICAgICAgZW1pdEluc3Qo
MHgzYzAwMDAwMCB8IChydCA8PCBPUF9TSF9SVCkgfCAoaW1tICYgMHhmZmZmKSk7CisgICAgfQor
CisgICAgdm9pZCBhZGRpdShSZWdpc3RlcklEIHJ0LCBSZWdpc3RlcklEIHJzLCBpbnQgaW1tKQor
ICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHgyNDAwMDAwMCB8IChydCA8PCBPUF9TSF9SVCkgfCAo
cnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAgICAgICAgIHwgKGltbSAmIDB4ZmZmZikpOworICAg
IH0KKworICAgIHZvaWQgYWRkdShSZWdpc3RlcklEIHJkLCBSZWdpc3RlcklEIHJzLCBSZWdpc3Rl
cklEIHJ0KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHgwMDAwMDAyMSB8IChyZCA8PCBPUF9T
SF9SRCkgfCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAgICAgICAgIHwgKHJ0IDw8IE9QX1NI
X1JUKSk7CisgICAgfQorCisgICAgdm9pZCBzdWJ1KFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQg
cnMsIFJlZ2lzdGVySUQgcnQpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDAwMDAwMDIzIHwg
KHJkIDw8IE9QX1NIX1JEKSB8IChycyA8PCBPUF9TSF9SUykKKyAgICAgICAgICAgICAgICAgfCAo
cnQgPDwgT1BfU0hfUlQpKTsKKyAgICB9CisKKyAgICB2b2lkIG11bHQoUmVnaXN0ZXJJRCBycywg
UmVnaXN0ZXJJRCBydCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMTggfCAocnMg
PDwgT1BfU0hfUlMpIHwgKHJ0IDw8IE9QX1NIX1JUKSk7CisgICAgfQorCisgICAgdm9pZCBtZmhp
KFJlZ2lzdGVySUQgcmQpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDAwMDAwMDEwIHwgKHJk
IDw8IE9QX1NIX1JEKSk7CisgICAgfQorCisgICAgdm9pZCBtZmxvKFJlZ2lzdGVySUQgcmQpCisg
ICAgeworICAgICAgICBlbWl0SW5zdCgweDAwMDAwMDEyIHwgKHJkIDw8IE9QX1NIX1JEKSk7Cisg
ICAgfQorCisgICAgdm9pZCBtdWwoUmVnaXN0ZXJJRCByZCwgUmVnaXN0ZXJJRCBycywgUmVnaXN0
ZXJJRCBydCkKKyAgICB7CisjaWYgX19taXBzID49IDMyCisgICAgICAgIGVtaXRJbnN0KDB4NzAw
MDAwMDIgfCAocmQgPDwgT1BfU0hfUkQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAgICAg
ICAgICB8IChydCA8PCBPUF9TSF9SVCkpOworI2Vsc2UKKyAgICAgICAgbXVsdChycywgcnQpOwor
ICAgICAgICBtZmxvKHJkKTsKKyNlbmRpZgorICAgIH0KKworICAgIHZvaWQgYW5kX2luc24oUmVn
aXN0ZXJJRCByZCwgUmVnaXN0ZXJJRCBycywgUmVnaXN0ZXJJRCBydCkKKyAgICB7CisgICAgICAg
IGVtaXRJbnN0KDB4MDAwMDAwMjQgfCAocmQgPDwgT1BfU0hfUkQpIHwgKHJzIDw8IE9QX1NIX1JT
KQorICAgICAgICAgICAgICAgICB8IChydCA8PCBPUF9TSF9SVCkpOworICAgIH0KKworICAgIHZv
aWQgYW5kaShSZWdpc3RlcklEIHJ0LCBSZWdpc3RlcklEIHJzLCBpbnQgaW1tKQorICAgIHsKKyAg
ICAgICAgZW1pdEluc3QoMHgzMDAwMDAwMCB8IChydCA8PCBPUF9TSF9SVCkgfCAocnMgPDwgT1Bf
U0hfUlMpCisgICAgICAgICAgICAgICAgIHwgKGltbSAmIDB4ZmZmZikpOworICAgIH0KKworICAg
IHZvaWQgbm9yKFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcnMsIFJlZ2lzdGVySUQgcnQpCisg
ICAgeworICAgICAgICBlbWl0SW5zdCgweDAwMDAwMDI3IHwgKHJkIDw8IE9QX1NIX1JEKSB8IChy
cyA8PCBPUF9TSF9SUykKKyAgICAgICAgICAgICAgICAgfCAocnQgPDwgT1BfU0hfUlQpKTsKKyAg
ICB9CisKKyAgICB2b2lkIG9yX2luc24oUmVnaXN0ZXJJRCByZCwgUmVnaXN0ZXJJRCBycywgUmVn
aXN0ZXJJRCBydCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMjUgfCAocmQgPDwg
T1BfU0hfUkQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChydCA8PCBP
UF9TSF9SVCkpOworICAgIH0KKworICAgIHZvaWQgb3JpKFJlZ2lzdGVySUQgcnQsIFJlZ2lzdGVy
SUQgcnMsIGludCBpbW0pCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDM0MDAwMDAwIHwgKHJ0
IDw8IE9QX1NIX1JUKSB8IChycyA8PCBPUF9TSF9SUykKKyAgICAgICAgICAgICAgICAgfCAoaW1t
ICYgMHhmZmZmKSk7CisgICAgfQorCisgICAgdm9pZCB4b3JfaW5zbihSZWdpc3RlcklEIHJkLCBS
ZWdpc3RlcklEIHJzLCBSZWdpc3RlcklEIHJ0KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHgw
MDAwMDAyNiB8IChyZCA8PCBPUF9TSF9SRCkgfCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAg
ICAgICAgIHwgKHJ0IDw8IE9QX1NIX1JUKSk7CisgICAgfQorCisgICAgdm9pZCB4b3JpKFJlZ2lz
dGVySUQgcnQsIFJlZ2lzdGVySUQgcnMsIGludCBpbW0pCisgICAgeworICAgICAgICBlbWl0SW5z
dCgweDM4MDAwMDAwIHwgKHJ0IDw8IE9QX1NIX1JUKSB8IChycyA8PCBPUF9TSF9SUykKKyAgICAg
ICAgICAgICAgICAgfCAoaW1tICYgMHhmZmZmKSk7CisgICAgfQorCisgICAgdm9pZCBzbHQoUmVn
aXN0ZXJJRCByZCwgUmVnaXN0ZXJJRCBycywgUmVnaXN0ZXJJRCBydCkKKyAgICB7CisgICAgICAg
IGVtaXRJbnN0KDB4MDAwMDAwMmEgfCAocmQgPDwgT1BfU0hfUkQpIHwgKHJzIDw8IE9QX1NIX1JT
KQorICAgICAgICAgICAgICAgICB8IChydCA8PCBPUF9TSF9SVCkpOworICAgIH0KKworICAgIHZv
aWQgc2x0dShSZWdpc3RlcklEIHJkLCBSZWdpc3RlcklEIHJzLCBSZWdpc3RlcklEIHJ0KQorICAg
IHsKKyAgICAgICAgZW1pdEluc3QoMHgwMDAwMDAyYiB8IChyZCA8PCBPUF9TSF9SRCkgfCAocnMg
PDwgT1BfU0hfUlMpCisgICAgICAgICAgICAgICAgIHwgKHJ0IDw8IE9QX1NIX1JUKSk7CisgICAg
fQorCisgICAgdm9pZCBzbHRpdShSZWdpc3RlcklEIHJ0LCBSZWdpc3RlcklEIHJzLCBpbnQgaW1t
KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHgyYzAwMDAwMCB8IChydCA8PCBPUF9TSF9SVCkg
fCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAgICAgICAgIHwgKGltbSAmIDB4ZmZmZikpOwor
ICAgIH0KKworICAgIHZvaWQgc2xsKFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcnQsIGludCBz
aGFtdCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMDAgfCAocmQgPDwgT1BfU0hf
UkQpIHwgKHJ0IDw8IE9QX1NIX1JUKQorICAgICAgICAgICAgICAgICB8ICgoc2hhbXQgJiAweDFm
KSA8PCBPUF9TSF9TSEFNVCkpOworICAgIH0KKworICAgIHZvaWQgc2xsdihSZWdpc3RlcklEIHJk
LCBSZWdpc3RlcklEIHJ0LCBpbnQgcnMpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDAwMDAw
MDA0IHwgKHJkIDw8IE9QX1NIX1JEKSB8IChydCA8PCBPUF9TSF9SVCkKKyAgICAgICAgICAgICAg
ICAgfCAocnMgPDwgT1BfU0hfUlMpKTsKKyAgICB9CisKKyAgICB2b2lkIHNyYShSZWdpc3RlcklE
IHJkLCBSZWdpc3RlcklEIHJ0LCBpbnQgc2hhbXQpCisgICAgeworICAgICAgICBlbWl0SW5zdCgw
eDAwMDAwMDAzIHwgKHJkIDw8IE9QX1NIX1JEKSB8IChydCA8PCBPUF9TSF9SVCkKKyAgICAgICAg
ICAgICAgICAgfCAoKHNoYW10ICYgMHgxZikgPDwgT1BfU0hfU0hBTVQpKTsKKyAgICB9CisKKyAg
ICB2b2lkIHNyYXYoUmVnaXN0ZXJJRCByZCwgUmVnaXN0ZXJJRCBydCwgUmVnaXN0ZXJJRCBycykK
KyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMDcgfCAocmQgPDwgT1BfU0hfUkQpIHwg
KHJ0IDw8IE9QX1NIX1JUKQorICAgICAgICAgICAgICAgICB8IChycyA8PCBPUF9TSF9SUykpOwor
ICAgIH0KKworICAgIHZvaWQgbHcoUmVnaXN0ZXJJRCBydCwgUmVnaXN0ZXJJRCBycywgaW50IG9m
ZnNldCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4OGMwMDAwMDAgfCAocnQgPDwgT1BfU0hf
UlQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChvZmZzZXQgJiAweGZm
ZmYpKTsKKyAgICAgICAgbG9hZERlbGF5Tm9wKCk7CisgICAgfQorCisgICAgdm9pZCBsd2woUmVn
aXN0ZXJJRCBydCwgUmVnaXN0ZXJJRCBycywgaW50IG9mZnNldCkKKyAgICB7CisgICAgICAgIGVt
aXRJbnN0KDB4ODgwMDAwMDAgfCAocnQgPDwgT1BfU0hfUlQpIHwgKHJzIDw8IE9QX1NIX1JTKQor
ICAgICAgICAgICAgICAgICB8IChvZmZzZXQgJiAweGZmZmYpKTsKKyAgICAgICAgbG9hZERlbGF5
Tm9wKCk7CisgICAgfQorCisgICAgdm9pZCBsd3IoUmVnaXN0ZXJJRCBydCwgUmVnaXN0ZXJJRCBy
cywgaW50IG9mZnNldCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4OTgwMDAwMDAgfCAocnQg
PDwgT1BfU0hfUlQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChvZmZz
ZXQgJiAweGZmZmYpKTsKKyAgICAgICAgbG9hZERlbGF5Tm9wKCk7CisgICAgfQorCisgICAgdm9p
ZCBsaHUoUmVnaXN0ZXJJRCBydCwgUmVnaXN0ZXJJRCBycywgaW50IG9mZnNldCkKKyAgICB7Cisg
ICAgICAgIGVtaXRJbnN0KDB4OTQwMDAwMDAgfCAocnQgPDwgT1BfU0hfUlQpIHwgKHJzIDw8IE9Q
X1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChvZmZzZXQgJiAweGZmZmYpKTsKKyAgICAgICAg
bG9hZERlbGF5Tm9wKCk7CisgICAgfQorCisgICAgdm9pZCBzdyhSZWdpc3RlcklEIHJ0LCBSZWdp
c3RlcklEIHJzLCBpbnQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHhhYzAwMDAw
MCB8IChydCA8PCBPUF9TSF9SVCkgfCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAgICAgICAg
IHwgKG9mZnNldCAmIDB4ZmZmZikpOworICAgIH0KKworICAgIHZvaWQganIoUmVnaXN0ZXJJRCBy
cykKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMDggfCAocnMgPDwgT1BfU0hfUlMp
KTsKKyAgICB9CisKKyAgICB2b2lkIGphbHIoUmVnaXN0ZXJJRCBycykKKyAgICB7CisgICAgICAg
IGVtaXRJbnN0KDB4MDAwMGY4MDkgfCAocnMgPDwgT1BfU0hfUlMpKTsKKyAgICB9CisKKyAgICB2
b2lkIGphbCgpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDBjMDAwMDAwKTsKKyAgICB9CisK
KyAgICB2b2lkIGJrcHQoKQorICAgIHsKKyAgICAgICAgaW50IHZhbHVlID0gNTEyOyAvKiBCUktf
QlVHICovCisgICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMGQgfCAoKHZhbHVlICYgMHgzZmYpIDw8
IE9QX1NIX0NPREUpKTsKKyAgICB9CisKKyAgICB2b2lkIGJnZXooUmVnaXN0ZXJJRCBycywgaW50
IGltbSkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4MDQwMTAwMDAgfCAocnMgPDwgT1BfU0hf
UlMpIHwgKGltbSAmIDB4ZmZmZikpOworICAgIH0KKworICAgIHZvaWQgYmx0eihSZWdpc3RlcklE
IHJzLCBpbnQgaW1tKQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHgwNDAwMDAwMCB8IChycyA8
PCBPUF9TSF9SUykgfCAoaW1tICYgMHhmZmZmKSk7CisgICAgfQorCisgICAgdm9pZCBiZXEoUmVn
aXN0ZXJJRCBycywgUmVnaXN0ZXJJRCBydCwgaW50IGltbSkKKyAgICB7CisgICAgICAgIGVtaXRJ
bnN0KDB4MTAwMDAwMDAgfCAocnMgPDwgT1BfU0hfUlMpIHwgKHJ0IDw8IE9QX1NIX1JUKSB8IChp
bW0gJiAweGZmZmYpKTsKKyAgICB9CisKKyAgICB2b2lkIGJuZShSZWdpc3RlcklEIHJzLCBSZWdp
c3RlcklEIHJ0LCBpbnQgaW1tKQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHgxNDAwMDAwMCB8
IChycyA8PCBPUF9TSF9SUykgfCAocnQgPDwgT1BfU0hfUlQpIHwgKGltbSAmIDB4ZmZmZikpOwor
ICAgIH0KKworICAgIHZvaWQgYmMxdCgpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDQ1MDEw
MDAwKTsKKyAgICB9CisKKyAgICB2b2lkIGJjMWYoKQorICAgIHsKKyAgICAgICAgZW1pdEluc3Qo
MHg0NTAwMDAwMCk7CisgICAgfQorCisgICAgSm1wU3JjIG5ld0ptcFNyYygpCisgICAgeworICAg
ICAgICByZXR1cm4gSm1wU3JjKG1fYnVmZmVyLnNpemUoKSk7CisgICAgfQorCisgICAgdm9pZCBh
cHBlbmRKdW1wKCkKKyAgICB7CisgICAgICAgIG1fanVtcHMuYXBwZW5kKG1fYnVmZmVyLnNpemUo
KSk7CisgICAgfQorCisgICAgdm9pZCBhZGRfZChGUFJlZ2lzdGVySUQgZmQsIEZQUmVnaXN0ZXJJ
RCBmcywgRlBSZWdpc3RlcklEIGZ0KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHg0NjIwMDAw
MCB8IChmZCA8PCBPUF9TSF9GRCkgfCAoZnMgPDwgT1BfU0hfRlMpCisgICAgICAgICAgICAgICAg
IHwgKGZ0IDw8IE9QX1NIX0ZUKSk7CisgICAgfQorCisgICAgdm9pZCBzdWJfZChGUFJlZ2lzdGVy
SUQgZmQsIEZQUmVnaXN0ZXJJRCBmcywgRlBSZWdpc3RlcklEIGZ0KQorICAgIHsKKyAgICAgICAg
ZW1pdEluc3QoMHg0NjIwMDAwMSB8IChmZCA8PCBPUF9TSF9GRCkgfCAoZnMgPDwgT1BfU0hfRlMp
CisgICAgICAgICAgICAgICAgIHwgKGZ0IDw8IE9QX1NIX0ZUKSk7CisgICAgfQorCisgICAgdm9p
ZCBtdWxfZChGUFJlZ2lzdGVySUQgZmQsIEZQUmVnaXN0ZXJJRCBmcywgRlBSZWdpc3RlcklEIGZ0
KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHg0NjIwMDAwMiB8IChmZCA8PCBPUF9TSF9GRCkg
fCAoZnMgPDwgT1BfU0hfRlMpCisgICAgICAgICAgICAgICAgIHwgKGZ0IDw8IE9QX1NIX0ZUKSk7
CisgICAgfQorCisgICAgdm9pZCBsd2MxKEZQUmVnaXN0ZXJJRCBmdCwgUmVnaXN0ZXJJRCBycywg
aW50IG9mZnNldCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4YzQwMDAwMDAgfCAoZnQgPDwg
T1BfU0hfRlQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChvZmZzZXQg
JiAweGZmZmYpKTsKKyAgICAgICAgY29wRGVsYXlOb3AoKTsKKyAgICB9CisKKyAgICB2b2lkIGxk
YzEoRlBSZWdpc3RlcklEIGZ0LCBSZWdpc3RlcklEIHJzLCBpbnQgb2Zmc2V0KQorICAgIHsKKyAg
ICAgICAgZW1pdEluc3QoMHhkNDAwMDAwMCB8IChmdCA8PCBPUF9TSF9GVCkgfCAocnMgPDwgT1Bf
U0hfUlMpCisgICAgICAgICAgICAgICAgIHwgKG9mZnNldCAmIDB4ZmZmZikpOworICAgIH0KKwor
ICAgIHZvaWQgc3djMShGUFJlZ2lzdGVySUQgZnQsIFJlZ2lzdGVySUQgcnMsIGludCBvZmZzZXQp
CisgICAgeworICAgICAgICBlbWl0SW5zdCgweGU0MDAwMDAwIHwgKGZ0IDw8IE9QX1NIX0ZUKSB8
IChycyA8PCBPUF9TSF9SUykKKyAgICAgICAgICAgICAgICAgfCAob2Zmc2V0ICYgMHhmZmZmKSk7
CisgICAgfQorCisgICAgdm9pZCBzZGMxKEZQUmVnaXN0ZXJJRCBmdCwgUmVnaXN0ZXJJRCBycywg
aW50IG9mZnNldCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4ZjQwMDAwMDAgfCAoZnQgPDwg
T1BfU0hfRlQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChvZmZzZXQg
JiAweGZmZmYpKTsKKyAgICB9CisKKyAgICB2b2lkIG10YzEoUmVnaXN0ZXJJRCBydCwgRlBSZWdp
c3RlcklEIGZzKQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHg0NDgwMDAwMCB8IChmcyA8PCBP
UF9TSF9GUykgfCAocnQgPDwgT1BfU0hfUlQpKTsKKyAgICAgICAgY29wRGVsYXlOb3AoKTsKKyAg
ICB9CisKKyAgICB2b2lkIG1mYzEoUmVnaXN0ZXJJRCBydCwgRlBSZWdpc3RlcklEIGZzKQorICAg
IHsKKyAgICAgICAgZW1pdEluc3QoMHg0NDAwMDAwMCB8IChmcyA8PCBPUF9TSF9GUykgfCAocnQg
PDwgT1BfU0hfUlQpKTsKKyAgICAgICAgY29wRGVsYXlOb3AoKTsKKyAgICB9CisKKyAgICB2b2lk
IHRydW5jX3dfZChGUFJlZ2lzdGVySUQgZmQsIEZQUmVnaXN0ZXJJRCBmcykKKyAgICB7CisgICAg
ICAgIGVtaXRJbnN0KDB4NDYyMDAwMGQgfCAoZmQgPDwgT1BfU0hfRkQpIHwgKGZzIDw8IE9QX1NI
X0ZTKSk7CisgICAgfQorCisgICAgdm9pZCBjdnRfZF93KEZQUmVnaXN0ZXJJRCBmZCwgRlBSZWdp
c3RlcklEIGZzKQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHg0NjgwMDAyMSB8IChmZCA8PCBP
UF9TSF9GRCkgfCAoZnMgPDwgT1BfU0hfRlMpKTsKKyAgICB9CisKKyAgICB2b2lkIGNfZXFfZChG
UFJlZ2lzdGVySUQgZnMsIEZQUmVnaXN0ZXJJRCBmdCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0
KDB4NDYyMDAwMzIgfCAoZnMgPDwgT1BfU0hfRlMpIHwgKGZ0IDw8IE9QX1NIX0ZUKSk7CisgICAg
ICAgIGNvcERlbGF5Tm9wKCk7CisgICAgfQorCisgICAgdm9pZCBjX25ndF9kKEZQUmVnaXN0ZXJJ
RCBmcywgRlBSZWdpc3RlcklEIGZ0KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHg0NjIwMDAz
ZiB8IChmcyA8PCBPUF9TSF9GUykgfCAoZnQgPDwgT1BfU0hfRlQpKTsKKyAgICAgICAgY29wRGVs
YXlOb3AoKTsKKyAgICB9CisKKyAgICB2b2lkIGNfbmdlX2QoRlBSZWdpc3RlcklEIGZzLCBGUFJl
Z2lzdGVySUQgZnQpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDQ2MjAwMDNkIHwgKGZzIDw8
IE9QX1NIX0ZTKSB8IChmdCA8PCBPUF9TSF9GVCkpOworICAgICAgICBjb3BEZWxheU5vcCgpOwor
ICAgIH0KKworICAgIHZvaWQgY19sdF9kKEZQUmVnaXN0ZXJJRCBmcywgRlBSZWdpc3RlcklEIGZ0
KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHg0NjIwMDAzYyB8IChmcyA8PCBPUF9TSF9GUykg
fCAoZnQgPDwgT1BfU0hfRlQpKTsKKyAgICAgICAgY29wRGVsYXlOb3AoKTsKKyAgICB9CisKKyAg
ICB2b2lkIGNfbGVfZChGUFJlZ2lzdGVySUQgZnMsIEZQUmVnaXN0ZXJJRCBmdCkKKyAgICB7Cisg
ICAgICAgIGVtaXRJbnN0KDB4NDYyMDAwM2UgfCAoZnMgPDwgT1BfU0hfRlMpIHwgKGZ0IDw8IE9Q
X1NIX0ZUKSk7CisgICAgICAgIGNvcERlbGF5Tm9wKCk7CisgICAgfQorCisgICAgdm9pZCBjX3Vl
cV9kKEZQUmVnaXN0ZXJJRCBmcywgRlBSZWdpc3RlcklEIGZ0KQorICAgIHsKKyAgICAgICAgZW1p
dEluc3QoMHg0NjIwMDAzMyB8IChmcyA8PCBPUF9TSF9GUykgfCAoZnQgPDwgT1BfU0hfRlQpKTsK
KyAgICAgICAgY29wRGVsYXlOb3AoKTsKKyAgICB9CisKKyAgICB2b2lkIGNfb2xlX2QoRlBSZWdp
c3RlcklEIGZzLCBGUFJlZ2lzdGVySUQgZnQpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDQ2
MjAwMDM2IHwgKGZzIDw8IE9QX1NIX0ZTKSB8IChmdCA8PCBPUF9TSF9GVCkpOworICAgICAgICBj
b3BEZWxheU5vcCgpOworICAgIH0KKworICAgIHZvaWQgY19vbHRfZChGUFJlZ2lzdGVySUQgZnMs
IEZQUmVnaXN0ZXJJRCBmdCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4NDYyMDAwMzQgfCAo
ZnMgPDwgT1BfU0hfRlMpIHwgKGZ0IDw8IE9QX1NIX0ZUKSk7CisgICAgICAgIGNvcERlbGF5Tm9w
KCk7CisgICAgfQorCisgICAgdm9pZCBjX3VsZV9kKEZQUmVnaXN0ZXJJRCBmcywgRlBSZWdpc3Rl
cklEIGZ0KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHg0NjIwMDAzNyB8IChmcyA8PCBPUF9T
SF9GUykgfCAoZnQgPDwgT1BfU0hfRlQpKTsKKyAgICAgICAgY29wRGVsYXlOb3AoKTsKKyAgICB9
CisKKyAgICB2b2lkIGNfdWx0X2QoRlBSZWdpc3RlcklEIGZzLCBGUFJlZ2lzdGVySUQgZnQpCisg
ICAgeworICAgICAgICBlbWl0SW5zdCgweDQ2MjAwMDM1IHwgKGZzIDw8IE9QX1NIX0ZTKSB8IChm
dCA8PCBPUF9TSF9GVCkpOworICAgICAgICBjb3BEZWxheU5vcCgpOworICAgIH0KKworICAgIC8v
IEdlbmVyYWwgaGVscGVycworCisgICAgSm1wRHN0IGxhYmVsKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBKbXBEc3QobV9idWZmZXIuc2l6ZSgpKTsKKyAgICB9CisKKyAgICBKbXBEc3QgYWxpZ24o
aW50IGFsaWdubWVudCkKKyAgICB7CisgICAgICAgIHdoaWxlICghbV9idWZmZXIuaXNBbGlnbmVk
KGFsaWdubWVudCkpCisgICAgICAgICAgICBia3B0KCk7CisKKyAgICAgICAgcmV0dXJuIGxhYmVs
KCk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQqIGdldFJlbG9jYXRlZEFkZHJlc3Modm9pZCog
Y29kZSwgSm1wU3JjIGp1bXApCisgICAgeworICAgICAgICBBU1NFUlQoanVtcC5tX29mZnNldCAh
PSAtMSk7CisgICAgICAgIHZvaWQqIGIgPSByZWludGVycHJldF9jYXN0PHZvaWQqPigocmVpbnRl
cnByZXRfY2FzdDxpbnRwdHJfdD4oY29kZSkpICsganVtcC5tX29mZnNldCk7CisgICAgICAgIHJl
dHVybiBiOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkKiBnZXRSZWxvY2F0ZWRBZGRyZXNzKHZv
aWQqIGNvZGUsIEptcERzdCBsYWJlbCkKKyAgICB7CisgICAgICAgIHZvaWQqIGIgPSByZWludGVy
cHJldF9jYXN0PHZvaWQqPigocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oY29kZSkpICsgbGFi
ZWwubV9vZmZzZXQpOworICAgICAgICByZXR1cm4gYjsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50
IGdldERpZmZlcmVuY2VCZXR3ZWVuTGFiZWxzKEptcERzdCBmcm9tLCBKbXBEc3QgdG8pCisgICAg
eworICAgICAgICByZXR1cm4gdG8ubV9vZmZzZXQgLSBmcm9tLm1fb2Zmc2V0OworICAgIH0KKwor
ICAgIHN0YXRpYyBpbnQgZ2V0RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMoSm1wRHN0IGZyb20sIEpt
cFNyYyB0bykKKyAgICB7CisgICAgICAgIHJldHVybiB0by5tX29mZnNldCAtIGZyb20ubV9vZmZz
ZXQ7CisgICAgfQorCisgICAgc3RhdGljIGludCBnZXREaWZmZXJlbmNlQmV0d2VlbkxhYmVscyhK
bXBTcmMgZnJvbSwgSm1wRHN0IHRvKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvLm1fb2Zmc2V0
IC0gZnJvbS5tX29mZnNldDsKKyAgICB9CisKKyAgICAvLyBBc3NlbWJsZXIgYWRtaW4gbWV0aG9k
czoKKworICAgIHNpemVfdCBzaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2J1
ZmZlci5zaXplKCk7CisgICAgfQorCisgICAgdm9pZCogZXhlY3V0YWJsZUNvcHkoRXhlY3V0YWJs
ZVBvb2wqIGFsbG9jYXRvcikKKyAgICB7CisgICAgICAgIHZvaWQgKnJlc3VsdCA9IG1fYnVmZmVy
LmV4ZWN1dGFibGVDb3B5KGFsbG9jYXRvcik7CisgICAgICAgIGlmICghcmVzdWx0KQorICAgICAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgcmVsb2NhdGVKdW1wcyhtX2J1ZmZlci5kYXRhKCks
IHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIHVu
c2lnbmVkIGdldENhbGxSZXR1cm5PZmZzZXQoSm1wU3JjIGNhbGwpCisgICAgeworICAgICAgICAv
LyBUaGUgcmV0dXJuIGFkZHJlc3MgaXMgYWZ0ZXIgYSBjYWxsIGFuZCBhIGRlbGF5IHNsb3QgaW5z
dHJ1Y3Rpb24KKyAgICAgICAgcmV0dXJuIGNhbGwubV9vZmZzZXQ7CisgICAgfQorCisgICAgLy8g
TGlua2luZyAmIHBhdGNoaW5nOgorICAgIC8vCisgICAgLy8gJ2xpbmsnIGFuZCAncGF0Y2gnIG1l
dGhvZHMgYXJlIGZvciB1c2Ugb24gdW5wcm90ZWN0ZWQgY29kZSAtIHN1Y2ggYXMgdGhlIGNvZGUK
KyAgICAvLyB3aXRoaW4gdGhlIEFzc2VtYmxlckJ1ZmZlciwgYW5kIGNvZGUgYmVpbmcgcGF0Y2hl
ZCBieSB0aGUgcGF0Y2ggYnVmZmVyLiAgT25jZQorICAgIC8vIGNvZGUgaGFzIGJlZW4gZmluYWxp
emVkIGl0IGlzIChwbGF0Zm9ybSBzdXBwb3J0IHBlcm1pdHRpbmcpIHdpdGhpbiBhIG5vbi0KKyAg
ICAvLyB3cml0YWJsZSByZWdpb24gb2YgbWVtb3J5OyB0byBtb2RpZnkgdGhlIGNvZGUgaW4gYW4g
ZXhlY3V0ZS1vbmx5IGV4ZWN1YWJsZQorICAgIC8vIHBvb2wgdGhlICdyZXBhdGNoJyBhbmQgJ3Jl
bGluaycgbWV0aG9kcyBzaG91bGQgYmUgdXNlZC4KKworICAgIHZvaWQgbGlua0p1bXAoSm1wU3Jj
IGZyb20sIEptcERzdCB0bykKKyAgICB7CisgICAgICAgIEFTU0VSVCh0by5tX29mZnNldCAhPSAt
MSk7CisgICAgICAgIEFTU0VSVChmcm9tLm1fb2Zmc2V0ICE9IC0xKTsKKyAgICAgICAgTUlQU1dv
cmQqIGluc24gPSByZWludGVycHJldF9jYXN0PE1JUFNXb3JkKj4ocmVpbnRlcnByZXRfY2FzdDxp
bnRwdHJfdD4obV9idWZmZXIuZGF0YSgpKSArIGZyb20ubV9vZmZzZXQpOworICAgICAgICBNSVBT
V29yZCogdG9fcG9zID0gcmVpbnRlcnByZXRfY2FzdDxNSVBTV29yZCo+KHJlaW50ZXJwcmV0X2Nh
c3Q8aW50cHRyX3Q+KG1fYnVmZmVyLmRhdGEoKSkgKyB0by5tX29mZnNldCk7CisKKyAgICAgICAg
QVNTRVJUKCooaW5zbiAtIDEpID09IDAgJiYgKihpbnNuIC0gMikgPT0gMCAmJiAqKGluc24gLSAz
KSA9PSAwICYmICooaW5zbiAtIDUpID09IDApOworICAgICAgICBpbnNuID0gaW5zbiAtIDY7Cisg
ICAgICAgIGxpbmtXaXRoT2Zmc2V0KGluc24sIHRvX3Bvcyk7CisgICAgfQorCisgICAgc3RhdGlj
IHZvaWQgbGlua0p1bXAodm9pZCogY29kZSwgSm1wU3JjIGZyb20sIHZvaWQqIHRvKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGZyb20ubV9vZmZzZXQgIT0gLTEpOworICAgICAgICBNSVBTV29yZCog
aW5zbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8TUlQU1dvcmQqPihyZWludGVycHJldF9jYXN0PGludHB0
cl90Pihjb2RlKSArIGZyb20ubV9vZmZzZXQpOworCisgICAgICAgIEFTU0VSVCgqKGluc24gLSAx
KSA9PSAwICYmICooaW5zbiAtIDIpID09IDAgJiYgKihpbnNuIC0gMykgPT0gMCAmJiAqKGluc24g
LSA1KSA9PSAwKTsKKyAgICAgICAgaW5zbiA9IGluc24gLSA2OworICAgICAgICBsaW5rV2l0aE9m
ZnNldChpbnNuLCB0byk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgbGlua0NhbGwodm9pZCog
Y29kZSwgSm1wU3JjIGZyb20sIHZvaWQqIHRvKQorICAgIHsKKyAgICAgICAgTUlQU1dvcmQqIGlu
c24gPSByZWludGVycHJldF9jYXN0PE1JUFNXb3JkKj4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJf
dD4oY29kZSkgKyBmcm9tLm1fb2Zmc2V0KTsKKyAgICAgICAgbGlua0NhbGxJbnRlcm5hbChpbnNu
LCB0byk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgbGlua1BvaW50ZXIodm9pZCogY29kZSwg
Sm1wRHN0IGZyb20sIHZvaWQqIHRvKQorICAgIHsKKyAgICAgICAgTUlQU1dvcmQqIGluc24gPSBy
ZWludGVycHJldF9jYXN0PE1JUFNXb3JkKj4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oY29k
ZSkgKyBmcm9tLm1fb2Zmc2V0KTsKKyAgICAgICAgQVNTRVJUKCgqaW5zbiAmIDB4ZmZlMDAwMDAp
ID09IDB4M2MwMDAwMDApOyAvLyBsdWkKKyAgICAgICAgKmluc24gPSAoKmluc24gJiAweGZmZmYw
MDAwKSB8ICgocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pID4+IDE2KSAmIDB4ZmZmZik7
CisgICAgICAgIGluc24rKzsKKyAgICAgICAgQVNTRVJUKCgqaW5zbiAmIDB4ZmMwMDAwMDApID09
IDB4MzQwMDAwMDApOyAvLyBvcmkKKyAgICAgICAgKmluc24gPSAoKmluc24gJiAweGZmZmYwMDAw
KSB8IChyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgJiAweGZmZmYpOworICAgIH0KKwor
ICAgIHN0YXRpYyB2b2lkIHJlbGlua0p1bXAodm9pZCogZnJvbSwgdm9pZCogdG8pCisgICAgewor
ICAgICAgICBNSVBTV29yZCogaW5zbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8TUlQU1dvcmQqPihmcm9t
KTsKKworICAgICAgICBBU1NFUlQoKihpbnNuIC0gMSkgPT0gMCAmJiAqKGluc24gLSA1KSA9PSAw
KTsKKyAgICAgICAgaW5zbiA9IGluc24gLSA2OworICAgICAgICBpbnQgZmx1c2hfc2l6ZSA9IGxp
bmtXaXRoT2Zmc2V0KGluc24sIHRvKTsKKworICAgICAgICBFeGVjdXRhYmxlQWxsb2NhdG9yOjpj
YWNoZUZsdXNoKGluc24sIGZsdXNoX3NpemUpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHJl
bGlua0NhbGwodm9pZCogZnJvbSwgdm9pZCogdG8pCisgICAgeworICAgICAgICB2b2lkKiBzdGFy
dDsKKyAgICAgICAgaW50IHNpemUgPSBsaW5rQ2FsbEludGVybmFsKGZyb20sIHRvKTsKKyAgICAg
ICAgaWYgKHNpemUgPT0gc2l6ZW9mKE1JUFNXb3JkKSkKKyAgICAgICAgICAgIHN0YXJ0ID0gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZnJvbSkgLSAy
ICogc2l6ZW9mKE1JUFNXb3JkKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN0YXJ0ID0g
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZnJvbSkg
LSA0ICogc2l6ZW9mKE1JUFNXb3JkKSk7CisKKyAgICAgICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6
Y2FjaGVGbHVzaChzdGFydCwgc2l6ZSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVwYXRj
aEludDMyKHZvaWQqIGZyb20sIGludDMyX3QgdG8pCisgICAgeworICAgICAgICBNSVBTV29yZCog
aW5zbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8TUlQU1dvcmQqPihmcm9tKTsKKyAgICAgICAgQVNTRVJU
KCgqaW5zbiAmIDB4ZmZlMDAwMDApID09IDB4M2MwMDAwMDApOyAvLyBsdWkKKyAgICAgICAgKmlu
c24gPSAoKmluc24gJiAweGZmZmYwMDAwKSB8ICgodG8gPj4gMTYpICYgMHhmZmZmKTsKKyAgICAg
ICAgaW5zbisrOworICAgICAgICBBU1NFUlQoKCppbnNuICYgMHhmYzAwMDAwMCkgPT0gMHgzNDAw
MDAwMCk7IC8vIG9yaQorICAgICAgICAqaW5zbiA9ICgqaW5zbiAmIDB4ZmZmZjAwMDApIHwgKHRv
ICYgMHhmZmZmKTsKKyAgICAgICAgaW5zbi0tOworICAgICAgICBFeGVjdXRhYmxlQWxsb2NhdG9y
OjpjYWNoZUZsdXNoKGluc24sIDIgKiBzaXplb2YoTUlQU1dvcmQpKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgdm9pZCByZXBhdGNoUG9pbnRlcih2b2lkKiBmcm9tLCB2b2lkKiB0bykKKyAgICB7Cisg
ICAgICAgIHJlcGF0Y2hJbnQzMihmcm9tLCByZWludGVycHJldF9jYXN0PGludDMyX3Q+KHRvKSk7
CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVwYXRjaExvYWRQdHJUb0xFQSh2b2lkKiBmcm9t
KQorICAgIHsKKyAgICAgICAgTUlQU1dvcmQqIGluc24gPSByZWludGVycHJldF9jYXN0PE1JUFNX
b3JkKj4oZnJvbSk7CisgICAgICAgIGluc24gPSBpbnNuICsgMzsKKyAgICAgICAgQVNTRVJUKCgq
aW5zbiAmIDB4ZmMwMDAwMDApID09IDB4OGMwMDAwMDApOyAvLyBsdworICAgICAgICAvKiBsdyAt
PiBhZGRpdSAqLworICAgICAgICAqaW5zbiA9IDB4MjQwMDAwMDAgfCAoKmluc24gJiAweDAzZmZm
ZmZmKTsKKworICAgICAgICBFeGVjdXRhYmxlQWxsb2NhdG9yOjpjYWNoZUZsdXNoKGluc24sIHNp
emVvZihNSVBTV29yZCkpOworICAgIH0KKworcHJpdmF0ZToKKworICAgIC8qIFVwZGF0ZSBlYWNo
IGp1bXAgaW4gdGhlIGJ1ZmZlciBvZiBuZXdfYmFzZS4gICovCisgICAgdm9pZCByZWxvY2F0ZUp1
bXBzKHZvaWQqIG9sZF9iYXNlLCB2b2lkKiBuZXdfYmFzZSkKKyAgICB7CisgICAgICAgIC8vIENo
ZWNrIGVhY2gganVtcAorICAgICAgICBmb3IgKEp1bXBzOjpJdGVyYXRvciBpdGVyID0gbV9qdW1w
cy5iZWdpbigpOyBpdGVyICE9IG1fanVtcHMuZW5kKCk7ICsraXRlcikgeworICAgICAgICAgICAg
aW50IHBvcyA9ICppdGVyOworICAgICAgICAgICAgTUlQU1dvcmQqIGluc24gPSByZWludGVycHJl
dF9jYXN0PE1JUFNXb3JkKj4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obmV3X2Jhc2UpICsg
cG9zKTsKKyAgICAgICAgICAgIGluc24gPSBpbnNuICsgMjsKKyAgICAgICAgICAgIC8vIE5lZWQg
dG8gbWFrZSBzdXJlIHdlIGhhdmUgNSB2YWxpZCBpbnN0cnVjdGlvbnMgYWZ0ZXIgcG9zCisgICAg
ICAgICAgICBpZiAoKHVuc2lnbmVkIGludClwb3MgPj0gbV9idWZmZXIuc2l6ZSgpIC0gNSAqIHNp
emVvZihNSVBTV29yZCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAg
IGlmICgoKmluc24gJiAweGZjMDAwMDAwKSA9PSAweDA4MDAwMDAwKSB7IC8vIGoKKyAgICAgICAg
ICAgICAgICBpbnQgb2Zmc2V0ID0gKmluc24gJiAweDAzZmZmZmZmOworICAgICAgICAgICAgICAg
IGludCBvbGRfaW5zbl9hZGRyZXNzID0gKGludClpbnNuIC0gKGludCluZXdfYmFzZSArIChpbnQp
b2xkX2Jhc2U7CisgICAgICAgICAgICAgICAgaW50IHRvcF9mb3VyX2JpdHMgPSAob2xkX2luc25f
YWRkcmVzcyArIDQpID4+IDI4OworICAgICAgICAgICAgICAgIGludCBvbGRfdGFyZ2V0X2FkZHJl
c3MgPSAodG9wX2ZvdXJfYml0cyA8PCAyOCkgfCAob2Zmc2V0IDw8IDIpOworICAgICAgICAgICAg
ICAgIGludCBuZXdfdGFyZ2V0X2FkZHJlc3MgPSBvbGRfdGFyZ2V0X2FkZHJlc3MgLSAoaW50KW9s
ZF9iYXNlICsgKGludCluZXdfYmFzZTsKKyAgICAgICAgICAgICAgICBpbnQgbmV3X2luc25fYWRk
cmVzcyA9IChpbnQpaW5zbjsKKyAgICAgICAgICAgICAgICBpZiAoKChuZXdfaW5zbl9hZGRyZXNz
ICsgNCkgPj4gMjgpID09IChuZXdfdGFyZ2V0X2FkZHJlc3MgPj4gMjgpKSB7CisgICAgICAgICAg
ICAgICAgICAgICppbnNuID0gMHgwODAwMDAwMCB8ICgobmV3X3RhcmdldF9hZGRyZXNzID4+IDIp
ICYgMHgzZmZmZmZmKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICAvKiBsdWkgKi8KKyAgICAgICAgICAgICAgICAgICAgKmluc24gPSAweDNjMDAwMDAwIHwg
KE1JUFNSZWdpc3RlcnM6OnQ5IDw8IE9QX1NIX1JUKSB8ICgobmV3X3RhcmdldF9hZGRyZXNzID4+
IDE2KSAmIDB4ZmZmZik7CisgICAgICAgICAgICAgICAgICAgIC8qIG9yaSAqLworICAgICAgICAg
ICAgICAgICAgICAqKGluc24gKyAxKSA9IDB4MzQwMDAwMDAgfCAoTUlQU1JlZ2lzdGVyczo6dDkg
PDwgT1BfU0hfUlQpIHwgKE1JUFNSZWdpc3RlcnM6OnQ5IDw8IE9QX1NIX1JTKSB8IChuZXdfdGFy
Z2V0X2FkZHJlc3MgJiAweGZmZmYpOworICAgICAgICAgICAgICAgICAgICAvKiBqciAqLworICAg
ICAgICAgICAgICAgICAgICAqKGluc24gKyAyKSA9IDB4MDAwMDAwMDggfCAoTUlQU1JlZ2lzdGVy
czo6dDkgPDwgT1BfU0hfUlMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAoKCppbnNuICYgMHhmZmUwMDAwMCkgPT0gMHgzYzAwMDAwMCkgeyAvLyBsdWkKKyAgICAg
ICAgICAgICAgICBpbnQgaGlnaCA9ICgqaW5zbiAmIDB4ZmZmZikgPDwgMTY7CisgICAgICAgICAg
ICAgICAgaW50IGxvdyA9ICooaW5zbiArIDEpICYgMHhmZmZmOworICAgICAgICAgICAgICAgIGlu
dCBvbGRfdGFyZ2V0X2FkZHJlc3MgPSBoaWdoIHwgbG93OworICAgICAgICAgICAgICAgIGludCBu
ZXdfdGFyZ2V0X2FkZHJlc3MgPSBvbGRfdGFyZ2V0X2FkZHJlc3MgLSAoaW50KW9sZF9iYXNlICsg
KGludCluZXdfYmFzZTsKKyAgICAgICAgICAgICAgICAvKiBsdWkgKi8KKyAgICAgICAgICAgICAg
ICAqaW5zbiA9IDB4M2MwMDAwMDAgfCAoTUlQU1JlZ2lzdGVyczo6dDkgPDwgT1BfU0hfUlQpIHwg
KChuZXdfdGFyZ2V0X2FkZHJlc3MgPj4gMTYpICYgMHhmZmZmKTsKKyAgICAgICAgICAgICAgICAv
KiBvcmkgKi8KKyAgICAgICAgICAgICAgICAqKGluc24gKyAxKSA9IDB4MzQwMDAwMDAgfCAoTUlQ
U1JlZ2lzdGVyczo6dDkgPDwgT1BfU0hfUlQpIHwgKE1JUFNSZWdpc3RlcnM6OnQ5IDw8IE9QX1NI
X1JTKSB8IChuZXdfdGFyZ2V0X2FkZHJlc3MgJiAweGZmZmYpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgc3RhdGljIGludCBsaW5rV2l0aE9mZnNldChNSVBTV29yZCog
aW5zbiwgdm9pZCogdG8pCisgICAgeworICAgICAgICBBU1NFUlQoKCppbnNuICYgMHhmYzAwMDAw
MCkgPT0gMHgxMDAwMDAwMCAvLyBiZXEKKyAgICAgICAgICAgICAgIHx8ICgqaW5zbiAmIDB4ZmMw
MDAwMDApID09IDB4MTQwMDAwMDAgLy8gYm5lCisgICAgICAgICAgICAgICB8fCAoKmluc24gJiAw
eGZmZmYwMDAwKSA9PSAweDQ1MDEwMDAwIC8vIGJjMXQKKyAgICAgICAgICAgICAgIHx8ICgqaW5z
biAmIDB4ZmZmZjAwMDApID09IDB4NDUwMDAwMDApOyAvLyBiYzFmCisgICAgICAgIGludHB0cl90
IGRpZmYgPSAocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pCisgICAgICAgICAgICAgICAg
ICAgICAgICAgLSByZWludGVycHJldF9jYXN0PGludHB0cl90PihpbnNuKSAtIDQpID4+IDI7CisK
KyAgICAgICAgaWYgKGRpZmYgPCAtMzI3NjggfHwgZGlmZiA+IDMyNzY3IHx8ICooaW5zbiArIDIp
ICE9IDB4MTAwMDAwMDMpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgQ29udmVy
dCB0aGUgc2VxdWVuY2U6CisgICAgICAgICAgICAgICAgICBiZXEgJDIsICQzLCB0YXJnZXQKKyAg
ICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgICAgICAgYiAxZgorICAgICAgICAgICAg
ICAgICAgbm9wCisgICAgICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAgICAgICAgIG5vcAor
ICAgICAgICAgICAgICAgIDE6CisKKyAgICAgICAgICAgICAgICB0byB0aGUgbmV3IHNlcXVlbmNl
IGlmIHBvc3NpYmxlOgorICAgICAgICAgICAgICAgICAgYm5lICQyLCAkMywgMWYKKyAgICAgICAg
ICAgICAgICAgIG5vcAorICAgICAgICAgICAgICAgICAgaiAgICB0YXJnZXQKKyAgICAgICAgICAg
ICAgICAgIG5vcAorICAgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgICBub3AK
KyAgICAgICAgICAgICAgICAxOgorCisgICAgICAgICAgICAgICAgT1IgdG8gdGhlIG5ldyBzZXF1
ZW5jZToKKyAgICAgICAgICAgICAgICAgIGJuZSAkMiwgJDMsIDFmCisgICAgICAgICAgICAgICAg
ICBub3AKKyAgICAgICAgICAgICAgICAgIGx1aSAkMjUsIHRhcmdldCA+PiAxNgorICAgICAgICAg
ICAgICAgICAgb3JpICQyNSwgJDI1LCB0YXJnZXQgJiAweGZmZmYKKyAgICAgICAgICAgICAgICAg
IGpyICQyNQorICAgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgMToKKworICAg
ICAgICAgICAgICAgIE5vdGU6IGJlcS9ibmUvYmMxdCBhcmUgY29udmVydGVkIHRvIGJuZS9iZXEv
YmMxZi4KKyAgICAgICAgICAgICovCisKKyAgICAgICAgICAgIGlmICgqKGluc24gKyAyKSA9PSAw
eDEwMDAwMDAzKSB7CisgICAgICAgICAgICAgICAgaWYgKCgqaW5zbiAmIDB4ZmMwMDAwMDApID09
IDB4MTAwMDAwMDApICAgICAgIC8vIGJlcQorICAgICAgICAgICAgICAgICAgICAqaW5zbiA9ICgq
aW5zbiAmIDB4MDNmZjAwMDApIHwgMHgxNDAwMDAwNTsgLy8gYm5lCisgICAgICAgICAgICAgICAg
ZWxzZSBpZiAoKCppbnNuICYgMHhmYzAwMDAwMCkgPT0gMHgxNDAwMDAwMCkgIC8vIGJuZQorICAg
ICAgICAgICAgICAgICAgICAqaW5zbiA9ICgqaW5zbiAmIDB4MDNmZjAwMDApIHwgMHgxMDAwMDAw
NTsgLy8gYmVxCisgICAgICAgICAgICAgICAgZWxzZSBpZiAoKCppbnNuICYgMHhmZmZmMDAwMCkg
PT0gMHg0NTAxMDAwMCkgIC8vIGJjMXQKKyAgICAgICAgICAgICAgICAgICAgKmluc24gPSAweDQ1
MDAwMDA1OyAvLyBiYzFmCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQoMCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGluc24gPSBpbnNuICsg
MjsKKyAgICAgICAgICAgIGlmICgocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5zbikgKyA0
KSA+PiAyOAorICAgICAgICAgICAgICAgID09IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRv
KSA+PiAyOCkgeworICAgICAgICAgICAgICAgICppbnNuID0gMHgwODAwMDAwMCB8ICgocmVpbnRl
cnByZXRfY2FzdDxpbnRwdHJfdD4odG8pID4+IDIpICYgMHgzZmZmZmZmKTsKKyAgICAgICAgICAg
ICAgICAqKGluc24gKyAxKSA9IDA7CisgICAgICAgICAgICAgICAgcmV0dXJuIDQgKiBzaXplb2Yo
TUlQU1dvcmQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpbnRwdHJfdCBuZXdfdGFy
Z2V0X2FkZHJlc3MgPSByZWludGVycHJldF9jYXN0PGludHB0cl90Pih0byk7CisgICAgICAgICAg
ICAvKiBsdWkgKi8KKyAgICAgICAgICAgICppbnNuID0gMHgzYzAwMDAwMCB8IChNSVBTUmVnaXN0
ZXJzOjp0OSA8PCBPUF9TSF9SVCkgfCAoKG5ld190YXJnZXRfYWRkcmVzcyA+PiAxNikgJiAweGZm
ZmYpOworICAgICAgICAgICAgLyogb3JpICovCisgICAgICAgICAgICAqKGluc24gKyAxKSA9IDB4
MzQwMDAwMDAgfCAoTUlQU1JlZ2lzdGVyczo6dDkgPDwgT1BfU0hfUlQpIHwgKE1JUFNSZWdpc3Rl
cnM6OnQ5IDw8IE9QX1NIX1JTKSB8IChuZXdfdGFyZ2V0X2FkZHJlc3MgJiAweGZmZmYpOworICAg
ICAgICAgICAgLyoganIgKi8KKyAgICAgICAgICAgICooaW5zbiArIDIpID0gMHgwMDAwMDAwOCB8
IChNSVBTUmVnaXN0ZXJzOjp0OSA8PCBPUF9TSF9SUyk7CisgICAgICAgICAgICByZXR1cm4gNSAq
IHNpemVvZihNSVBTV29yZCk7CisgICAgICAgIH0KKworICAgICAgICAqaW5zbiA9ICgqaW5zbiAm
IDB4ZmZmZjAwMDApIHwgKGRpZmYgJiAweGZmZmYpOworICAgICAgICByZXR1cm4gc2l6ZW9mKE1J
UFNXb3JkKTsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGxpbmtDYWxsSW50ZXJuYWwodm9pZCog
ZnJvbSwgdm9pZCogdG8pCisgICAgeworICAgICAgICBNSVBTV29yZCogaW5zbiA9IHJlaW50ZXJw
cmV0X2Nhc3Q8TUlQU1dvcmQqPihmcm9tKTsKKyAgICAgICAgaW5zbiA9IGluc24gLSA0OworCisg
ICAgICAgIGlmICgoKihpbnNuICsgMikgJiAweGZjMDAwMDAwKSA9PSAweDBjMDAwMDAwKSB7IC8v
IGphbAorICAgICAgICAgICAgaWYgKChyZWludGVycHJldF9jYXN0PGludHB0cl90Pihmcm9tKSAt
IDQpID4+IDI4CisgICAgICAgICAgICAgICAgPT0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4o
dG8pID4+IDI4KSB7CisgICAgICAgICAgICAgICAgKihpbnNuICsgMikgPSAweDBjMDAwMDAwIHwg
KChyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgPj4gMikgJiAweDNmZmZmZmYpOworICAg
ICAgICAgICAgICAgIHJldHVybiBzaXplb2YoTUlQU1dvcmQpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAvKiBsdWkgJDI1LCAodG8gPj4gMTYpICYgMHhmZmZmICovCisgICAgICAgICAg
ICAqaW5zbiA9IDB4M2MwMDAwMDAgfCAoTUlQU1JlZ2lzdGVyczo6dDkgPDwgT1BfU0hfUlQpIHwg
KChyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgPj4gMTYpICYgMHhmZmZmKTsKKyAgICAg
ICAgICAgIC8qIG9yaSAkMjUsICQyNSwgdG8gJiAweGZmZmYgKi8KKyAgICAgICAgICAgICooaW5z
biArIDEpID0gMHgzNDAwMDAwMCB8IChNSVBTUmVnaXN0ZXJzOjp0OSA8PCBPUF9TSF9SVCkgfCAo
TUlQU1JlZ2lzdGVyczo6dDkgPDwgT1BfU0hfUlMpIHwgKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRy
X3Q+KHRvKSAmIDB4ZmZmZik7CisgICAgICAgICAgICAvKiBqYWxyICQyNSAqLworICAgICAgICAg
ICAgKihpbnNuICsgMikgPSAweDAwMDBmODA5IHwgKE1JUFNSZWdpc3RlcnM6OnQ5IDw8IE9QX1NI
X1JTKTsKKyAgICAgICAgICAgIHJldHVybiAzICogc2l6ZW9mKE1JUFNXb3JkKTsKKyAgICAgICAg
fQorCisgICAgICAgIEFTU0VSVCgoKmluc24gJiAweGZmZTAwMDAwKSA9PSAweDNjMDAwMDAwKTsg
Ly8gbHVpCisgICAgICAgIEFTU0VSVCgoKihpbnNuICsgMSkgJiAweGZjMDAwMDAwKSA9PSAweDM0
MDAwMDAwKTsgLy8gb3JpCisKKyAgICAgICAgLyogbHVpICovCisgICAgICAgICppbnNuID0gKCpp
bnNuICYgMHhmZmZmMDAwMCkgfCAoKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSA+PiAx
NikgJiAweGZmZmYpOworICAgICAgICAvKiBvcmkgKi8KKyAgICAgICAgKihpbnNuICsgMSkgPSAo
KihpbnNuICsgMSkgJiAweGZmZmYwMDAwKSB8IChyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0
bykgJiAweGZmZmYpOworICAgICAgICByZXR1cm4gMiAqIHNpemVvZihNSVBTV29yZCk7CisgICAg
fQorCisgICAgQXNzZW1ibGVyQnVmZmVyIG1fYnVmZmVyOworICAgIEp1bXBzIG1fanVtcHM7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShBU1NFTUJMRVIpICYm
IFBMQVRGT1JNKE1JUFMpCisKKyNlbmRpZiAvLyBNSVBTQXNzZW1ibGVyX2gKSW5kZXg6IGFzc2Vt
Ymxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYXNzZW1ibGVyL0Fi
c3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gNTE1NTIpCisrKyBhc3NlbWJsZXIvQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsNyArMTczLDcgQEAK
ICAgICBzdHJ1Y3QgSW1tMzIgewogICAgICAgICBleHBsaWNpdCBJbW0zMihpbnQzMl90IHZhbHVl
KQogICAgICAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQotI2lmIFBMQVRGT1JNKEFSTSkKKyNpZiBQ
TEFURk9STShBUk0pIHx8IFBMQVRGT1JNKE1JUFMpCiAgICAgICAgICAgICAsIG1faXNQb2ludGVy
KGZhbHNlKQogI2VuZGlmCiAgICAgICAgIHsKQEAgLTE4Miw3ICsxODIsNyBAQAogI2lmICFQTEFU
Rk9STShYODZfNjQpCiAgICAgICAgIGV4cGxpY2l0IEltbTMyKEltbVB0ciBwdHIpCiAgICAgICAg
ICAgICA6IG1fdmFsdWUocHRyLmFzSW50cHRyKCkpCi0jaWYgUExBVEZPUk0oQVJNKQorI2lmIFBM
QVRGT1JNKEFSTSkgfHwgUExBVEZPUk0oTUlQUykKICAgICAgICAgICAgICwgbV9pc1BvaW50ZXIo
dHJ1ZSkKICNlbmRpZgogICAgICAgICB7CkBAIC0xOTAsMTMgKzE5MCwxNCBAQAogI2VuZGlmCiAK
ICAgICAgICAgaW50MzJfdCBtX3ZhbHVlOwotI2lmIFBMQVRGT1JNKEFSTSkKKyNpZiBQTEFURk9S
TShBUk0pIHx8IFBMQVRGT1JNKE1JUFMpCiAgICAgICAgIC8vIFdlIHJlbHkgb24gYmVpbmcgYWJs
ZSB0byByZWdlbmVyYXRlIGNvZGUgdG8gcmVjb3ZlciBleGNlcHRpb24gaGFuZGxpbmcKICAgICAg
ICAgLy8gaW5mb3JtYXRpb24uICBTaW5jZSBBUk12NyBzdXBwb3J0cyAxNi1iaXQgaW1tZWRpYXRl
cyB0aGVyZSBpcyBhIGRhbmdlcgogICAgICAgICAvLyB0aGF0IGlmIHBvaW50ZXIgdmFsdWVzIGNo
YW5nZSB0aGUgbGF5b3V0IG9mIHRoZSBnZW5lcmF0ZWQgY29kZSB3aWxsIGNoYW5nZS4KICAgICAg
ICAgLy8gVG8gYXZvaWQgdGhpcyBwcm9ibGVtLCBhbHdheXMgZ2VuZXJhdGUgcG9pbnRlcnMgKGFu
ZCB0aHVzIEltbTMycyBjb25zdHJ1Y3RlZAogICAgICAgICAvLyBmcm9tIEltbVB0cnMpIHdpdGgg
YSBjb2RlIHNlcXVlbmNlIHRoYXQgaXMgYWJsZSAgdG8gcmVwcmVzZW50ICBhbnkgcG9pbnRlcgog
ICAgICAgICAvLyB2YWx1ZSAtIGRvbid0IHVzZSBhIG1vcmUgY29tcGFjdCBmb3JtIGluIHRoZXNl
IGNhc2VzLgorICAgICAgICAvLyBTYW1lIGZvciBNSVBTLgogICAgICAgICBib29sIG1faXNQb2lu
dGVyOwogI2VuZGlmCiAgICAgfTsKSW5kZXg6IGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlck1JUFMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmgJKHJldmlzaW9u
IDApCisrKyBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTY2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTUlQUyBUZWNobm9sb2dpZXMs
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIE1JUFMgVEVDSE5PTE9HSUVTLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgTUlQUyBURUNITk9MT0dJRVMsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE1hY3JvQXNz
ZW1ibGVyTUlQU19oCisjZGVmaW5lIE1hY3JvQXNzZW1ibGVyTUlQU19oCisKKyNpbmNsdWRlIDx3
dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShBU1NFTUJMRVIpICYmIFBMQVRGT1JNKE1JUFMp
CisKKyNpbmNsdWRlICJNSVBTQXNzZW1ibGVyLmgiCisjaW5jbHVkZSAiQWJzdHJhY3RNYWNyb0Fz
c2VtYmxlci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgTWFjcm9Bc3NlbWJsZXJNSVBT
IDogcHVibGljIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI8TUlQU0Fzc2VtYmxlcj4geworcHVibGlj
OgorCisgICAgTWFjcm9Bc3NlbWJsZXJNSVBTKCkKKyAgICAgICAgOiBtX2ZpeGVkV2lkdGgoZmFs
c2UpCisgICAgeworICAgIH0KKworICAgIHN0YXRpYyBjb25zdCBTY2FsZSBTY2FsZVB0ciA9IFRp
bWVzRm91cjsKKworICAgIC8vIEZvciBzdG9yaW5nIGltbWVkaWF0ZSBudW1iZXIKKyAgICBzdGF0
aWMgY29uc3QgUmVnaXN0ZXJJRCBpbW1UZW1wUmVnaXN0ZXIgPSBNSVBTUmVnaXN0ZXJzOjp0MDsK
KyAgICAvLyBGb3Igc3RvcmluZyBkYXRhIGxvYWRlZCBmcm9tIHRoZSBtZW1vcnkKKyAgICBzdGF0
aWMgY29uc3QgUmVnaXN0ZXJJRCBkYXRhVGVtcFJlZ2lzdGVyID0gTUlQU1JlZ2lzdGVyczo6dDE7
CisgICAgLy8gRm9yIHN0b3JpbmcgYWRkcmVzcyBiYXNlCisgICAgc3RhdGljIGNvbnN0IFJlZ2lz
dGVySUQgYWRkclRlbXBSZWdpc3RlciA9IE1JUFNSZWdpc3RlcnM6OnQyOworICAgIC8vIEZvciBz
dG9yaW5nIGNvbXBhcmUgcmVzdWx0CisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgY21wVGVt
cFJlZ2lzdGVyID0gTUlQU1JlZ2lzdGVyczo6dDM7CisKKyAgICAvLyBGUCB0ZW1wIHJlZ2lzdGVy
CisgICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBmcFRlbXBSZWdpc3RlciA9IE1JUFNSZWdp
c3RlcnM6OmYxNjsKKworICAgIGVudW0gQ29uZGl0aW9uIHsKKyAgICAgICAgRXF1YWwsCisgICAg
ICAgIE5vdEVxdWFsLAorICAgICAgICBBYm92ZSwKKyAgICAgICAgQWJvdmVPckVxdWFsLAorICAg
ICAgICBCZWxvdywKKyAgICAgICAgQmVsb3dPckVxdWFsLAorICAgICAgICBHcmVhdGVyVGhhbiwK
KyAgICAgICAgR3JlYXRlclRoYW5PckVxdWFsLAorICAgICAgICBMZXNzVGhhbiwKKyAgICAgICAg
TGVzc1RoYW5PckVxdWFsLAorICAgICAgICBPdmVyZmxvdywKKyAgICAgICAgU2lnbmVkLAorICAg
ICAgICBaZXJvLAorICAgICAgICBOb25aZXJvCisgICAgfTsKKworICAgIGVudW0gRG91YmxlQ29u
ZGl0aW9uIHsKKyAgICAgICAgRG91YmxlRXF1YWwsCisgICAgICAgIERvdWJsZU5vdEVxdWFsLAor
ICAgICAgICBEb3VibGVHcmVhdGVyVGhhbiwKKyAgICAgICAgRG91YmxlR3JlYXRlclRoYW5PckVx
dWFsLAorICAgICAgICBEb3VibGVMZXNzVGhhbiwKKyAgICAgICAgRG91YmxlTGVzc1RoYW5PckVx
dWFsLAorICAgICAgICBEb3VibGVFcXVhbE9yVW5vcmRlcmVkLAorICAgICAgICBEb3VibGVOb3RF
cXVhbE9yVW5vcmRlcmVkLAorICAgICAgICBEb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkLAor
ICAgICAgICBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCwKKyAgICAgICAgRG91
YmxlTGVzc1RoYW5PclVub3JkZXJlZCwKKyAgICAgICAgRG91YmxlTGVzc1RoYW5PckVxdWFsT3JV
bm9yZGVyZWQKKyAgICB9OworCisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIgPSBNSVBTUmVnaXN0ZXJzOjpzcDsKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0
ZXJJRCByZXR1cm5BZGRyZXNzUmVnaXN0ZXIgPSBNSVBTUmVnaXN0ZXJzOjpyYTsKKworICAgIC8v
IEludGVnZXIgYXJpdGhtZXRpYyBvcGVyYXRpb25zOgorICAgIC8vCisgICAgLy8gT3BlcmF0aW9u
cyBhcmUgdHlwaWNhbGx5IHR3byBvcGVyYW5kIC0gb3BlcmF0aW9uKHNvdXJjZSwgc3JjRHN0KQor
ICAgIC8vIEZvciBtYW55IG9wZXJhdGlvbnMgdGhlIHNvdXJjZSBtYXkgYmUgYW4gSW1tMzIsIHRo
ZSBzcmNEc3Qgb3BlcmFuZAorICAgIC8vIG1heSBvZnRlbiBiZSBhIG1lbW9yeSBsb2NhdGlvbiAo
ZXhwbGljdGx5IGRlc2NyaWJlZCB1c2luZyBhbiBBZGRyZXNzCisgICAgLy8gb2JqZWN0KS4KKwor
ICAgIHZvaWQgYWRkMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoZGVzdCwgZGVzdCwgc3JjKTsKKyAgICB9CisKKyAgICB2
b2lkIGFkZDMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgYWRk
MzIoaW1tLCBkZXN0LCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGFkZDMyKEltbTMyIGltbSwg
UmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlmICghaW1t
Lm1faXNQb2ludGVyICYmIGltbS5tX3ZhbHVlID49IC0zMjc2OCAmJiBpbW0ubV92YWx1ZSA8PSAz
Mjc2NworICAgICAgICAgICAgJiYgIW1fZml4ZWRXaWR0aCkgeworICAgICAgICAgICAgLyoKKyAg
ICAgICAgICAgICAgYWRkaXUgICAgIGRlc3QsIHNyYywgaW1tCisgICAgICAgICAgICAqLworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuYWRkaXUoZGVzdCwgc3JjLCBpbW0ubV92YWx1ZSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICBsaSAgICAgICAgaW1t
VGVtcCwgaW1tCisgICAgICAgICAgICAgIGFkZHUgICAgICBkZXN0LCBzcmMsIGltbVRlbXAKKyAg
ICAgICAgICAgICovCisgICAgICAgICAgICBtb3ZlKGltbSwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoZGVzdCwgc3JjLCBpbW1UZW1wUmVnaXN0ZXIpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBhZGQzMihJbW0zMiBpbW0sIEFkZHJlc3MgYWRk
cmVzcykKKyAgICB7CisgICAgICAgIGlmIChhZGRyZXNzLm9mZnNldCA+PSAtMzI3NjggJiYgYWRk
cmVzcy5vZmZzZXQgPD0gMzI3NjcKKyAgICAgICAgICAgICYmICFtX2ZpeGVkV2lkdGgpIHsKKyAg
ICAgICAgICAgIC8qCisgICAgICAgICAgICAgIGx3ICAgICAgICBkYXRhVGVtcCwgb2Zmc2V0KGJh
c2UpCisgICAgICAgICAgICAgIGxpICAgICAgICBpbW1UZW1wLCBpbW0KKyAgICAgICAgICAgICAg
YWRkdSAgICAgIGRhdGFUZW1wLCBkYXRhVGVtcCwgaW1tVGVtcAorICAgICAgICAgICAgICBzdyAg
ICAgICAgZGF0YVRlbXAsIG9mZnNldChiYXNlKQorICAgICAgICAgICAgKi8KKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmx3KGRhdGFUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5v
ZmZzZXQpOworICAgICAgICAgICAgaWYgKCFpbW0ubV9pc1BvaW50ZXIKKyAgICAgICAgICAgICAg
ICAmJiBpbW0ubV92YWx1ZSA+PSAtMzI3NjggJiYgaW1tLm1fdmFsdWUgPD0gMzI3NjcKKyAgICAg
ICAgICAgICAgICAmJiAhbV9maXhlZFdpZHRoKQorICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVy
LmFkZGl1KGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW1tLm1fdmFsdWUpOworICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgbW92ZShpbW0sIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuYWRkdShkYXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN3KGRhdGFUZW1wUmVnaXN0ZXIsIGFk
ZHJlc3MuYmFzZSwgYWRkcmVzcy5vZmZzZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgLyoKKyAgICAgICAgICAgICAgbHVpICAgICAgIGFkZHJUZW1wLCAob2Zmc2V0ICsgMHg4MDAw
KSA+PiAxNgorICAgICAgICAgICAgICBhZGR1ICAgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBiYXNl
CisgICAgICAgICAgICAgIGx3ICAgICAgICBkYXRhVGVtcCwgKG9mZnNldCAmIDB4ZmZmZikoYWRk
clRlbXApCisgICAgICAgICAgICAgIGxpICAgICAgICBpbW10ZW1wLCBpbW0KKyAgICAgICAgICAg
ICAgYWRkdSAgICAgIGRhdGFUZW1wLCBkYXRhVGVtcCwgaW1tVGVtcAorICAgICAgICAgICAgICBz
dyAgICAgICAgZGF0YVRlbXAsIChvZmZzZXQgJiAweGZmZmYpKGFkZHJUZW1wKQorICAgICAgICAg
ICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx1aShhZGRyVGVtcFJlZ2lzdGVyLCAoYWRk
cmVzcy5vZmZzZXQgKyAweDgwMDApID4+IDE2KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFk
ZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlKTsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLmx3KGRhdGFUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0
ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKworICAgICAgICAgICAgaWYgKGltbS5tX3ZhbHVlID49IC0z
Mjc2OCAmJiBpbW0ubV92YWx1ZSA8PSAzMjc2NyAmJiAhbV9maXhlZFdpZHRoKQorICAgICAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLmFkZGl1KGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1tLm1fdmFsdWUpOworICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbW92ZShpbW0sIGltbVRlbXBSZWdpc3Rl
cik7CisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShkYXRhVGVtcFJlZ2lzdGVyLCBk
YXRhVGVtcFJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1tVGVt
cFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN3KGRh
dGFUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHZvaWQgYWRkMzIoQWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB7CisgICAgICAgIGxvYWQzMihzcmMsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAg
ICBhZGQzMihkYXRhVGVtcFJlZ2lzdGVyLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGFkZDMy
KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBpZiAoZGVzdC5v
ZmZzZXQgPj0gLTMyNzY4ICYmIGRlc3Qub2Zmc2V0IDw9IDMyNzY3ICYmICFtX2ZpeGVkV2lkdGgp
IHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgIGx3ICAgICAgICBkYXRhVGVtcCwgb2Zm
c2V0KGJhc2UpCisgICAgICAgICAgICAgIGFkZHUgICAgICBkYXRhVGVtcCwgZGF0YVRlbXAsIHNy
YworICAgICAgICAgICAgICBzdyAgICAgICAgZGF0YVRlbXAsIG9mZnNldChiYXNlKQorICAgICAg
ICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx3KGRhdGFUZW1wUmVnaXN0ZXIsIGRl
c3QuYmFzZSwgZGVzdC5vZmZzZXQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShkYXRh
VGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLCBzcmMpOworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIuc3coZGF0YVRlbXBSZWdpc3RlciwgZGVzdC5iYXNlLCBkZXN0Lm9mZnNldCk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICBsdWkgICAgICAgYWRk
clRlbXAsIChvZmZzZXQgKyAweDgwMDApID4+IDE2CisgICAgICAgICAgICAgIGFkZHUgICAgICBh
ZGRyVGVtcCwgYWRkclRlbXAsIGJhc2UKKyAgICAgICAgICAgICAgbHcgICAgICAgIGRhdGFUZW1w
LCAob2Zmc2V0ICYgMHhmZmZmKShhZGRyVGVtcCkKKyAgICAgICAgICAgICAgYWRkdSAgICAgIGRh
dGFUZW1wLCBkYXRhVGVtcCwgc3JjCisgICAgICAgICAgICAgIHN3ICAgICAgICBkYXRhVGVtcCwg
KG9mZnNldCAmIDB4ZmZmZikoYWRkclRlbXApCisgICAgICAgICAgICAqLworICAgICAgICAgICAg
bV9hc3NlbWJsZXIubHVpKGFkZHJUZW1wUmVnaXN0ZXIsIChkZXN0Lm9mZnNldCArIDB4ODAwMCkg
Pj4gMTYpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBh
ZGRyVGVtcFJlZ2lzdGVyLCBkZXN0LmJhc2UpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHco
ZGF0YVRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgZGVzdC5vZmZzZXQpOworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuYWRkdShkYXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVy
LCBzcmMpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3coZGF0YVRlbXBSZWdpc3RlciwgYWRk
clRlbXBSZWdpc3RlciwgZGVzdC5vZmZzZXQpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9p
ZCBhZGQzMihJbW0zMiBpbW0sIEFic29sdXRlQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAg
ICAgLyoKKyAgICAgICAgICAgbGkgICBhZGRyVGVtcCwgYWRkcmVzcworICAgICAgICAgICBsaSAg
IGltbVRlbXAsIGltbQorICAgICAgICAgICBsdyAgIGRhdGFUZW1wLCAwKGFkZHJUZW1wKQorICAg
ICAgICAgICBhZGR1IGRhdGFUZW1wLCBkYXRhVGVtcCwgaW1tVGVtcAorICAgICAgICAgICBzdyAg
IGRhdGFUZW1wLCAwKGFkZHJUZW1wKQorICAgICAgICAqLworICAgICAgICBtb3ZlKEltbVB0cihh
ZGRyZXNzLm1fcHRyKSwgYWRkclRlbXBSZWdpc3Rlcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmx3
KGRhdGFUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIDApOworICAgICAgICBpZiAoIWlt
bS5tX2lzUG9pbnRlciAmJiBpbW0ubV92YWx1ZSA+PSAtMzI3NjggJiYgaW1tLm1fdmFsdWUgPD0g
MzI3NjcKKyAgICAgICAgICAgICYmICFtX2ZpeGVkV2lkdGgpCisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5hZGRpdShkYXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLCBpbW0ubV92YWx1
ZSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbW92ZShpbW0sIGltbVRlbXBSZWdpc3Rl
cik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFU
ZW1wUmVnaXN0ZXIsIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgIH0KKyAgICAgICAgbV9hc3Nl
bWJsZXIuc3coZGF0YVRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgMCk7CisgICAgfQor
CisgICAgdm9pZCBhbmQzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIuYW5kX2luc24oZGVzdCwgZGVzdCwgc3JjKTsKKyAgICB9CisK
KyAgICB2b2lkIGFuZDMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAg
ICAgaWYgKCFpbW0ubV9pc1BvaW50ZXIgJiYgaW1tLm1fdmFsdWUgPT0gMCAmJiAhbV9maXhlZFdp
ZHRoKQorICAgICAgICAgICAgbW92ZShNSVBTUmVnaXN0ZXJzOjp6ZXJvLCBkZXN0KTsKKyAgICAg
ICAgZWxzZSBpZiAoIWltbS5tX2lzUG9pbnRlciAmJiBpbW0ubV92YWx1ZSA+IDAgJiYgaW1tLm1f
dmFsdWUgPCA2NTUzNQorICAgICAgICAgICAgICAgICAmJiAhbV9maXhlZFdpZHRoKQorICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuYW5kaShkZXN0LCBkZXN0LCBpbW0ubV92YWx1ZSk7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgbGkgICAgICAgIGltbVRlbXAs
IGltbQorICAgICAgICAgICAgICBhbmQgICAgICAgZGVzdCwgZGVzdCwgaW1tVGVtcAorICAgICAg
ICAgICAgKi8KKyAgICAgICAgICAgIG1vdmUoaW1tLCBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuYW5kX2luc24oZGVzdCwgZGVzdCwgaW1tVGVtcFJlZ2lzdGVyKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgbHNoaWZ0MzIoSW1tMzIgaW1tLCBSZWdpc3Rl
cklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zbGwoZGVzdCwgZGVzdCwgaW1t
Lm1fdmFsdWUpOworICAgIH0KKworICAgIHZvaWQgbHNoaWZ0MzIoUmVnaXN0ZXJJRCBzaGlmdF9h
bW91bnQsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnNsbHYo
ZGVzdCwgZGVzdCwgc2hpZnRfYW1vdW50KTsKKyAgICB9CisKKyAgICB2b2lkIG11bDMyKFJlZ2lz
dGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5t
dWwoZGVzdCwgZGVzdCwgc3JjKTsKKyAgICB9CisKKyAgICB2b2lkIG11bDMyKEltbTMyIGltbSwg
UmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlmICghaW1t
Lm1faXNQb2ludGVyICYmIGltbS5tX3ZhbHVlID09IDAgJiYgIW1fZml4ZWRXaWR0aCkKKyAgICAg
ICAgICAgIG1vdmUoTUlQU1JlZ2lzdGVyczo6emVybywgZGVzdCk7CisgICAgICAgIGVsc2UgaWYg
KCFpbW0ubV9pc1BvaW50ZXIgJiYgaW1tLm1fdmFsdWUgPT0gMSAmJiAhbV9maXhlZFdpZHRoKQor
ICAgICAgICAgICAgbW92ZShzcmMsIGRlc3QpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IC8qCisgICAgICAgICAgICAgICAgbGkgICAgICBkYXRhVGVtcCwgaW1tCisgICAgICAgICAgICAg
ICAgbXVsICAgICBkZXN0LCBzcmMsIGRhdGFUZW1wCisgICAgICAgICAgICAqLworICAgICAgICAg
ICAgbW92ZShpbW0sIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
bXVsKGRlc3QsIHNyYywgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICB2b2lkIG5vdDMyKFJlZ2lzdGVySUQgc3JjRGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLm5vcihzcmNEZXN0LCBzcmNEZXN0LCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsKKyAgICB9CisK
KyAgICB2b2lkIG9yMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLm9yX2luc24oZGVzdCwgZGVzdCwgc3JjKTsKKyAgICB9CisKKyAg
ICB2b2lkIG9yMzIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBp
ZiAoIWltbS5tX2lzUG9pbnRlciAmJiBpbW0ubV92YWx1ZSA9PSAwICYmICFtX2ZpeGVkV2lkdGgp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKCFpbW0ubV9pc1BvaW50ZXIgJiYg
aW1tLm1fdmFsdWUgPiAwICYmIGltbS5tX3ZhbHVlIDwgNjU1MzUKKyAgICAgICAgICAgICYmICFt
X2ZpeGVkV2lkdGgpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm9yaShkZXN0LCBkZXN0LCBp
bW0ubV92YWx1ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAv
KgorICAgICAgICAgICAgbGkgICAgICBkYXRhVGVtcCwgaW1tCisgICAgICAgICAgICBvciAgICAg
IGRlc3QsIGRlc3QsIGRhdGFUZW1wCisgICAgICAgICovCisgICAgICAgIG1vdmUoaW1tLCBkYXRh
VGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIub3JfaW5zbihkZXN0LCBkZXN0LCBk
YXRhVGVtcFJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICB2b2lkIHJzaGlmdDMyKFJlZ2lzdGVySUQg
c2hpZnRfYW1vdW50LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5zcmF2KGRlc3QsIGRlc3QsIHNoaWZ0X2Ftb3VudCk7CisgICAgfQorCisgICAgdm9pZCByc2hp
ZnQzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLnNyYShkZXN0LCBkZXN0LCBpbW0ubV92YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBzdWIz
MihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuc3VidShkZXN0LCBkZXN0LCBzcmMpOworICAgIH0KKworICAgIHZvaWQgc3ViMzIoSW1t
MzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAoIWltbS5tX2lzUG9p
bnRlciAmJiBpbW0ubV92YWx1ZSA+PSAtMzI3NjcgJiYgaW1tLm1fdmFsdWUgPD0gMzI3NjgKKyAg
ICAgICAgICAgICYmICFtX2ZpeGVkV2lkdGgpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAg
ICAgIGFkZGl1ICAgICBkZXN0LCBzcmMsIGltbQorICAgICAgICAgICAgKi8KKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmFkZGl1KGRlc3QsIGRlc3QsIC1pbW0ubV92YWx1ZSk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICBsaSAgICAgICAgaW1tVGVtcCwg
aW1tCisgICAgICAgICAgICAgIHN1YnUgICAgICBkZXN0LCBzcmMsIGltbVRlbXAKKyAgICAgICAg
ICAgICovCisgICAgICAgICAgICBtb3ZlKGltbSwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLnN1YnUoZGVzdCwgZGVzdCwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHZvaWQgc3ViMzIoSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3Mp
CisgICAgeworICAgICAgICBpZiAoYWRkcmVzcy5vZmZzZXQgPj0gLTMyNzY4ICYmIGFkZHJlc3Mu
b2Zmc2V0IDw9IDMyNzY3CisgICAgICAgICAgICAmJiAhbV9maXhlZFdpZHRoKSB7CisgICAgICAg
ICAgICAvKgorICAgICAgICAgICAgICBsdyAgICAgICAgZGF0YVRlbXAsIG9mZnNldChiYXNlKQor
ICAgICAgICAgICAgICBsaSAgICAgICAgaW1tVGVtcCwgaW1tCisgICAgICAgICAgICAgIHN1YnUg
ICAgICBkYXRhVGVtcCwgZGF0YVRlbXAsIGltbVRlbXAKKyAgICAgICAgICAgICAgc3cgICAgICAg
IGRhdGFUZW1wLCBvZmZzZXQoYmFzZSkKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5sdyhkYXRhVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mub2Zmc2V0
KTsKKyAgICAgICAgICAgIGlmICghaW1tLm1faXNQb2ludGVyCisgICAgICAgICAgICAgICAgJiYg
aW1tLm1fdmFsdWUgPj0gLTMyNzY3ICYmIGltbS5tX3ZhbHVlIDw9IDMyNzY4CisgICAgICAgICAg
ICAgICAgJiYgIW1fZml4ZWRXaWR0aCkKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRp
dShkYXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC1pbW0ubV92YWx1ZSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBtb3ZlKGltbSwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBt
X2Fzc2VtYmxlci5zdWJ1KGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3coZGF0YVRlbXBSZWdpc3RlciwgYWRkcmVz
cy5iYXNlLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAv
KgorICAgICAgICAgICAgICBsdWkgICAgICAgYWRkclRlbXAsIChvZmZzZXQgKyAweDgwMDApID4+
IDE2CisgICAgICAgICAgICAgIGFkZHUgICAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGJhc2UKKyAg
ICAgICAgICAgICAgbHcgICAgICAgIGRhdGFUZW1wLCAob2Zmc2V0ICYgMHhmZmZmKShhZGRyVGVt
cCkKKyAgICAgICAgICAgICAgbGkgICAgICAgIGltbXRlbXAsIGltbQorICAgICAgICAgICAgICBz
dWJ1ICAgICAgZGF0YVRlbXAsIGRhdGFUZW1wLCBpbW1UZW1wCisgICAgICAgICAgICAgIHN3ICAg
ICAgICBkYXRhVGVtcCwgKG9mZnNldCAmIDB4ZmZmZikoYWRkclRlbXApCisgICAgICAgICAgICAq
LworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHVpKGFkZHJUZW1wUmVnaXN0ZXIsIChhZGRyZXNz
Lm9mZnNldCArIDB4ODAwMCkgPj4gMTYpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShh
ZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UpOworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIubHcoZGF0YVRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3Rlciwg
YWRkcmVzcy5vZmZzZXQpOworCisgICAgICAgICAgICBpZiAoIWltbS5tX2lzUG9pbnRlcgorICAg
ICAgICAgICAgICAgICYmIGltbS5tX3ZhbHVlID49IC0zMjc2NyAmJiBpbW0ubV92YWx1ZSA8PSAz
Mjc2OAorICAgICAgICAgICAgICAgICYmICFtX2ZpeGVkV2lkdGgpCisgICAgICAgICAgICAgICAg
bV9hc3NlbWJsZXIuYWRkaXUoZGF0YVRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3RlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtaW1tLm1fdmFsdWUpOworICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbW92ZShpbW0sIGltbVRlbXBSZWdpc3Rlcik7Cisg
ICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3VidShkYXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVt
cFJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1tVGVtcFJlZ2lz
dGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN3KGRhdGFUZW1w
UmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHZvaWQgc3ViMzIoQWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAg
ICB7CisgICAgICAgIGxvYWQzMihzcmMsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICBzdWIz
MihkYXRhVGVtcFJlZ2lzdGVyLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHN1YjMyKEltbTMy
IGltbSwgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICAvKgorICAgICAg
ICAgICBsaSAgIGFkZHJUZW1wLCBhZGRyZXNzCisgICAgICAgICAgIGxpICAgaW1tVGVtcCwgaW1t
CisgICAgICAgICAgIGx3ICAgZGF0YVRlbXAsIDAoYWRkclRlbXApCisgICAgICAgICAgIHN1YnUg
ZGF0YVRlbXAsIGRhdGFUZW1wLCBpbW1UZW1wCisgICAgICAgICAgIHN3ICAgZGF0YVRlbXAsIDAo
YWRkclRlbXApCisgICAgICAgICovCisgICAgICAgIG1vdmUoSW1tUHRyKGFkZHJlc3MubV9wdHIp
LCBhZGRyVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubHcoZGF0YVRlbXBSZWdp
c3RlciwgYWRkclRlbXBSZWdpc3RlciwgMCk7CisKKyAgICAgICAgaWYgKCFpbW0ubV9pc1BvaW50
ZXIgJiYgaW1tLm1fdmFsdWUgPj0gLTMyNzY3ICYmIGltbS5tX3ZhbHVlIDw9IDMyNzY4CisgICAg
ICAgICAgICAmJiAhbV9maXhlZFdpZHRoKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRp
dShkYXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLWltbS5tX3ZhbHVlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IG1vdmUoaW1tLCBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3Vi
dShkYXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLCBpbW1UZW1wUmVnaXN0ZXIpOwor
ICAgICAgICB9CisgICAgICAgIG1fYXNzZW1ibGVyLnN3KGRhdGFUZW1wUmVnaXN0ZXIsIGFkZHJU
ZW1wUmVnaXN0ZXIsIDApOworICAgIH0KKworICAgIHZvaWQgeG9yMzIoUmVnaXN0ZXJJRCBzcmMs
IFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnhvcl9pbnNuKGRl
c3QsIGRlc3QsIHNyYyk7CisgICAgfQorCisgICAgdm9pZCB4b3IzMihJbW0zMiBpbW0sIFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAgICBsaSAgaW1tVGVtcCwg
aW1tCisgICAgICAgICAgICB4b3IgZGVzdCwgZGVzdCwgaW1tVGVtcAorICAgICAgICAqLworICAg
ICAgICBtb3ZlKGltbSwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIueG9y
X2luc24oZGVzdCwgZGVzdCwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICAvLyBNZW1v
cnkgYWNjZXNzIG9wZXJhdGlvbnM6CisgICAgLy8KKyAgICAvLyBMb2FkcyBhcmUgb2YgdGhlIGZv
cm0gbG9hZChhZGRyZXNzLCBkZXN0aW5hdGlvbikgYW5kIHN0b3JlcyBvZiB0aGUgZm9ybQorICAg
IC8vIHN0b3JlKHNvdXJjZSwgYWRkcmVzcykuICBUaGUgc291cmNlIGZvciBhIHN0b3JlIG1heSBi
ZSBhbiBJbW0zMi4gIEFkZHJlc3MKKyAgICAvLyBvcGVyYW5kIG9iamVjdHMgdG8gbG9hZHMgYW5k
IHN0b3JlIHdpbGwgYmUgaW1wbGljaXRseSBjb25zdHJ1Y3RlZCBpZiBhCisgICAgLy8gcmVnaXN0
ZXIgaXMgcGFzc2VkLgorCisgICAgdm9pZCBsb2FkMzIoSW1wbGljaXRBZGRyZXNzIGFkZHJlc3Ms
IFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlmIChhZGRyZXNzLm9mZnNldCA+PSAt
MzI3NjggJiYgYWRkcmVzcy5vZmZzZXQgPD0gMzI3NjcKKyAgICAgICAgICAgICYmICFtX2ZpeGVk
V2lkdGgpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sdyhkZXN0LCBhZGRyZXNzLmJhc2UsIGFk
ZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKgorICAgICAgICAg
ICAgICAgIGx1aSAgICAgYWRkclRlbXAsIChvZmZzZXQgKyAweDgwMDApID4+IDE2CisgICAgICAg
ICAgICAgICAgYWRkdSAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGJhc2UKKyAgICAgICAgICAgICAg
ICBsdyAgICAgIGRlc3QsIChvZmZzZXQgJiAweGZmZmYpKGFkZHJUZW1wKQorICAgICAgICAgICAg
ICAqLworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHVpKGFkZHJUZW1wUmVnaXN0ZXIsIChhZGRy
ZXNzLm9mZnNldCArIDB4ODAwMCkgPj4gMTYpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRk
dShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UpOworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIubHcoZGVzdCwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5v
ZmZzZXQpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBsb2FkMzIoQmFzZUluZGV4IGFk
ZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlmIChhZGRyZXNzLm9mZnNl
dCA+PSAtMzI3NjggJiYgYWRkcmVzcy5vZmZzZXQgPD0gMzI3NjcKKyAgICAgICAgICAgICYmICFt
X2ZpeGVkV2lkdGgpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgc2xsICAgICBh
ZGRyVGVtcCwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZQorICAgICAgICAgICAgICAgIGFk
ZHUgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBhZGRyZXNzLmJhc2UKKyAgICAgICAgICAgICAgICBs
dyAgICAgIGRlc3QsIGFkZHJlc3Mub2Zmc2V0KGFkZHJUZW1wKQorICAgICAgICAgICAgKi8KKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLnNsbChhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmluZGV4
LCBhZGRyZXNzLnNjYWxlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBS
ZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlKTsKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLmx3KGRlc3QsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgc2xsICAgICBh
ZGRyVGVtcCwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZQorICAgICAgICAgICAgICAgIGFk
ZHUgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBhZGRyZXNzLmJhc2UKKyAgICAgICAgICAgICAgICBs
dWkgICAgIGltbVRlbXAsIChhZGRyZXNzLm9mZnNldCArIDB4ODAwMCkgPj4gMTYKKyAgICAgICAg
ICAgICAgICBhZGR1ICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgaW1tVGVtcAorICAgICAgICAgICAg
ICAgIGx3ICAgICAgZGVzdCwgKGFkZHJlc3Mub2Zmc2V0ICYgMHhmZmZmKShhdCkKKyAgICAgICAg
ICAgICovCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbGwoYWRkclRlbXBSZWdpc3RlciwgYWRk
cmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1
KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSk7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5sdWkoaW1tVGVtcFJlZ2lzdGVyLCAoYWRkcmVzcy5vZmZzZXQg
KyAweDgwMDApID4+IDE2KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBS
ZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx3KGRlc3QsIGFkZHJU
ZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZv
aWQgbG9hZDMyV2l0aFVuYWxpZ25lZEhhbGZXb3JkcyhCYXNlSW5kZXggYWRkcmVzcywgUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKGFkZHJlc3Mub2Zmc2V0ID49IC0zMjc2OCAm
JiBhZGRyZXNzLm9mZnNldCA8PSAzMjc2NAorICAgICAgICAgICAgJiYgIW1fZml4ZWRXaWR0aCkg
eworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICBzbGwgICAgIGFkZHJUZW1wLCBhZGRy
ZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlCisgICAgICAgICAgICAgICAgYWRkdSAgICBhZGRyVGVt
cCwgYWRkclRlbXAsIGFkZHJlc3MuYmFzZQorICAgICAgICAgICAgICAgIChCaWctRW5kaWFuKQor
ICAgICAgICAgICAgICAgIGx3bCAgICAgZGVzdCwgYWRkcmVzcy5vZmZzZXQoYWRkclRlbXApCisg
ICAgICAgICAgICAgICAgbHdyICAgICBkZXN0LCBhZGRyZXNzLm9mZnNldCszKGFkZHJUZW1wKQor
ICAgICAgICAgICAgICAgIChMaXR0bGUtRW5kaWFuKQorICAgICAgICAgICAgICAgIGx3bCAgICAg
ZGVzdCwgYWRkcmVzcy5vZmZzZXQrMyhhZGRyVGVtcCkKKyAgICAgICAgICAgICAgICBsd3IgICAg
IGRlc3QsIGFkZHJlc3Mub2Zmc2V0KGFkZHJUZW1wKQorICAgICAgICAgICAgKi8KKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLnNsbChhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmluZGV4LCBhZGRy
ZXNzLnNjYWxlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3Rl
ciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlKTsKKyNpZiBkZWZpbmVkKF9fTUlQU0VC
X18pCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sd2woZGVzdCwgYWRkclRlbXBSZWdpc3Rlciwg
YWRkcmVzcy5vZmZzZXQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHdyKGRlc3QsIGFkZHJU
ZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0ICsgMyk7CisjZWxzZQorICAgICAgICAgICAgbV9h
c3NlbWJsZXIubHdsKGRlc3QsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0ICsgMyk7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sd3IoZGVzdCwgYWRkclRlbXBSZWdpc3RlciwgYWRk
cmVzcy5vZmZzZXQpOworCisjZW5kaWYKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8q
CisgICAgICAgICAgICAgICAgc2xsICAgICBhZGRyVGVtcCwgYWRkcmVzcy5pbmRleCwgYWRkcmVz
cy5zY2FsZQorICAgICAgICAgICAgICAgIGFkZHUgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBhZGRy
ZXNzLmJhc2UKKyAgICAgICAgICAgICAgICBsdWkgICAgIGltbVRlbXAsIGFkZHJlc3Mub2Zmc2V0
ID4+IDE2CisgICAgICAgICAgICAgICAgb3JpICAgICBpbW1UZW1wLCBpbW1UZW1wLCBhZGRyZXNz
Lm9mZnNldCAmIDB4ZmZmZgorICAgICAgICAgICAgICAgIGFkZHUgICAgYWRkclRlbXAsIGFkZHJU
ZW1wLCBpbW1UZW1wCisgICAgICAgICAgICAgICAgKEJpZy1FbmRpYW4pCisgICAgICAgICAgICAg
ICAgbHcgICAgICBkZXN0LCAwKGF0KQorICAgICAgICAgICAgICAgIGx3ICAgICAgZGVzdCwgMyhh
dCkKKyAgICAgICAgICAgICAgICAoTGl0dGxlLUVuZGlhbikKKyAgICAgICAgICAgICAgICBsdyAg
ICAgIGRlc3QsIDMoYXQpCisgICAgICAgICAgICAgICAgbHcgICAgICBkZXN0LCAwKGF0KQorICAg
ICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsbChhZGRyVGVtcFJlZ2lzdGVy
LCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlKTsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx1aShpbW1UZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zm
c2V0ID4+IDE2KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm9yaShpbW1UZW1wUmVnaXN0ZXIs
IGltbVRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQpOworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbW1UZW1wUmVnaXN0ZXIpOworI2lmIGRlZmluZWQoX19NSVBTRUJf
XykKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx3bChkZXN0LCBhZGRyVGVtcFJlZ2lzdGVyLCAw
KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx3cihkZXN0LCBhZGRyVGVtcFJlZ2lzdGVyLCAz
KTsKKyNlbHNlCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sd2woZGVzdCwgYWRkclRlbXBSZWdp
c3RlciwgMyk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sd3IoZGVzdCwgYWRkclRlbXBSZWdp
c3RlciwgMCk7CisjZW5kaWYKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgbG9hZDMyKHZv
aWQqIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAg
ICAgICBsaSAgYWRkclRlbXAsIGFkZHJlc3MKKyAgICAgICAgICAgIGx3ICBkZXN0LCAwKGFkZHJU
ZW1wKQorICAgICAgICAqLworICAgICAgICBtb3ZlKEltbVB0cihhZGRyZXNzKSwgYWRkclRlbXBS
ZWdpc3Rlcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmx3KGRlc3QsIGFkZHJUZW1wUmVnaXN0ZXIs
IDApOworICAgIH0KKworICAgIERhdGFMYWJlbDMyIGxvYWQzMldpdGhBZGRyZXNzT2Zmc2V0UGF0
Y2goQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Zp
eGVkV2lkdGggPSB0cnVlOworICAgICAgICAvKgorICAgICAgICAgICAgbHVpIGFkZHJUZW1wLCBh
ZGRyZXNzLm9mZnNldCA+PiAxNgorICAgICAgICAgICAgb3JpIGFkZHJUZW1wLCBhZGRyVGVtcCwg
YWRkcmVzcy5vZmZzZXQgJiAweGZmZmYKKyAgICAgICAgICAgIGFkZHUgICAgICAgIGFkZHJUZW1w
LCBhZGRyVGVtcCwgYWRkcmVzcy5iYXNlCisgICAgICAgICAgICBsdyAgZGVzdCwgMChhZGRyVGVt
cCkKKyAgICAgICAgKi8KKyAgICAgICAgRGF0YUxhYmVsMzIgZGF0YUxhYmVsKHRoaXMpOworICAg
ICAgICBtb3ZlKEltbTMyKGFkZHJlc3Mub2Zmc2V0KSwgYWRkclRlbXBSZWdpc3Rlcik7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3Rlciwg
YWRkcmVzcy5iYXNlKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubHcoZGVzdCwgYWRkclRlbXBSZWdp
c3RlciwgMCk7CisgICAgICAgIG1fZml4ZWRXaWR0aCA9IGZhbHNlOworICAgICAgICByZXR1cm4g
ZGF0YUxhYmVsOworICAgIH0KKworICAgIExhYmVsIGxvYWRQdHJXaXRoUGF0Y2hUb0xFQShBZGRy
ZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fZml4ZWRXaWR0
aCA9IHRydWU7CisgICAgICAgIC8qCisgICAgICAgICAgICBsdWkgICAgICAgICBhZGRyVGVtcCwg
YWRkcmVzcy5vZmZzZXQgPj4gMTYKKyAgICAgICAgICAgIG9yaSAgICAgICAgIGFkZHJUZW1wLCBh
ZGRyVGVtcCwgYWRkcmVzcy5vZmZzZXQgJiAweGZmZmYKKyAgICAgICAgICAgIGFkZHUgICAgICAg
IGFkZHJUZW1wLCBhZGRyVGVtcCwgYWRkcmVzcy5iYXNlCisgICAgICAgICAgICBsdyAgICAgICAg
ICBkZXN0LCAwKGFkZHJUZW1wKQorICAgICAgICAqLworICAgICAgICBMYWJlbCBsYWJlbCh0aGlz
KTsKKyAgICAgICAgbW92ZShJbW0zMihhZGRyZXNzLm9mZnNldCksIGFkZHJUZW1wUmVnaXN0ZXIp
OworICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVn
aXN0ZXIsIGFkZHJlc3MuYmFzZSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmx3KGRlc3QsIGFkZHJU
ZW1wUmVnaXN0ZXIsIDApOworICAgICAgICBtX2ZpeGVkV2lkdGggPSBmYWxzZTsKKyAgICAgICAg
cmV0dXJuIGxhYmVsOworICAgIH0KKworICAgIExhYmVsIGxvYWRQdHJXaXRoQWRkcmVzc09mZnNl
dFBhdGNoKEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGxvYWRQdHJXaXRoUGF0Y2hUb0xFQShhZGRyZXNzLCBkZXN0KTsKKyAgICB9CisKKyAg
ICAvKiBOZWVkIHRvIHVzZSB6ZXJvLWV4dGVuZWQgbG9hZCBoYWxmLXdvcmQgZm9yIGxvYWQxNi4g
ICovCisgICAgdm9pZCBsb2FkMTYoQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIGlmIChhZGRyZXNzLm9mZnNldCA+PSAtMzI3NjggJiYgYWRkcmVzcy5v
ZmZzZXQgPD0gMzI3NjcKKyAgICAgICAgICAgICYmICFtX2ZpeGVkV2lkdGgpIHsKKyAgICAgICAg
ICAgIC8qCisgICAgICAgICAgICAgICAgc2xsICAgICBhZGRyVGVtcCwgYWRkcmVzcy5pbmRleCwg
YWRkcmVzcy5zY2FsZQorICAgICAgICAgICAgICAgIGFkZHUgICAgYWRkclRlbXAsIGFkZHJUZW1w
LCBhZGRyZXNzLmJhc2UKKyAgICAgICAgICAgICAgICBsaHUgICAgIGRlc3QsIGFkZHJlc3Mub2Zm
c2V0KGFkZHJUZW1wKQorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNs
bChhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3Rl
ciwgYWRkcmVzcy5iYXNlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxodShkZXN0LCBhZGRy
VGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAvKgorICAgICAgICAgICAgICAgIHNsbCAgICAgYWRkclRlbXAsIGFkZHJlc3MuaW5kZXgs
IGFkZHJlc3Muc2NhbGUKKyAgICAgICAgICAgICAgICBhZGR1ICAgIGFkZHJUZW1wLCBhZGRyVGVt
cCwgYWRkcmVzcy5iYXNlCisgICAgICAgICAgICAgICAgbHVpICAgICBpbW1UZW1wLCAoYWRkcmVz
cy5vZmZzZXQgKyAweDgwMDApID4+IDE2CisgICAgICAgICAgICAgICAgYWRkdSAgICBhZGRyVGVt
cCwgYWRkclRlbXAsIGltbVRlbXAKKyAgICAgICAgICAgICAgICBsaHUgICAgIGRlc3QsIChhZGRy
ZXNzLm9mZnNldCAmIDB4ZmZmZikoYWRkclRlbXApCisgICAgICAgICAgICAqLworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuc2xsKGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuaW5kZXgsIGFkZHJl
c3Muc2NhbGUpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVy
LCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UpOworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIubHVpKGltbVRlbXBSZWdpc3RlciwgKGFkZHJlc3Mub2Zmc2V0ICsgMHg4MDAwKSA+PiAxNik7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1w
UmVnaXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltbVRlbXBSZWdpc3Rlcik7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5saHUoZGVzdCwgYWRkclRlbXBSZWdpc3RlciwgYWRk
cmVzcy5vZmZzZXQpOworICAgICAgICB9CisgICAgfQorCisgICAgRGF0YUxhYmVsMzIgc3RvcmUz
MldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgYWRkcmVzcykK
KyAgICB7CisgICAgICAgIG1fZml4ZWRXaWR0aCA9IHRydWU7CisgICAgICAgIC8qCisgICAgICAg
ICAgICBsdWkgYWRkclRlbXAsIGFkZHJlc3Mub2Zmc2V0ID4+IDE2CisgICAgICAgICAgICBvcmkg
YWRkclRlbXAsIGFkZHJUZW1wLCBhZGRyZXNzLm9mZnNldCAmIDB4ZmZmZgorICAgICAgICAgICAg
YWRkdSAgICAgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBhZGRyZXNzLmJhc2UKKyAgICAgICAgICAg
IHN3ICBzcmMsIDAoYWRkclRlbXApCisgICAgICAgICovCisgICAgICAgIERhdGFMYWJlbDMyIGRh
dGFMYWJlbCh0aGlzKTsKKyAgICAgICAgbW92ZShJbW0zMihhZGRyZXNzLm9mZnNldCksIGFkZHJU
ZW1wUmVnaXN0ZXIpOworICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIs
IGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSk7CisgICAgICAgIG1fYXNzZW1ibGVyLnN3
KHNyYywgYWRkclRlbXBSZWdpc3RlciwgMCk7CisgICAgICAgIG1fZml4ZWRXaWR0aCA9IGZhbHNl
OworICAgICAgICByZXR1cm4gZGF0YUxhYmVsOworICAgIH0KKworICAgIHZvaWQgc3RvcmUzMihS
ZWdpc3RlcklEIHNyYywgSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBp
ZiAoYWRkcmVzcy5vZmZzZXQgPj0gLTMyNzY4ICYmIGFkZHJlc3Mub2Zmc2V0IDw9IDMyNzY3Cisg
ICAgICAgICAgICAmJiAhbV9maXhlZFdpZHRoKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3co
c3JjLCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAvKgorICAgICAgICAgICAgICAgIGx1aSAgICAgYWRkclRlbXAsIChvZmZzZXQgKyAw
eDgwMDApID4+IDE2CisgICAgICAgICAgICAgICAgYWRkdSAgICBhZGRyVGVtcCwgYWRkclRlbXAs
IGJhc2UKKyAgICAgICAgICAgICAgICBzdyAgICAgIHNyYywgKG9mZnNldCAmIDB4ZmZmZikoYWRk
clRlbXApCisgICAgICAgICAgICAgICovCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sdWkoYWRk
clRlbXBSZWdpc3RlciwgKGFkZHJlc3Mub2Zmc2V0ICsgMHg4MDAwKSA+PiAxNik7CisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIs
IGFkZHJlc3MuYmFzZSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdyhzcmMsIGFkZHJUZW1w
UmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQg
c3RvcmUzMihSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAg
ICBpZiAoYWRkcmVzcy5vZmZzZXQgPj0gLTMyNzY4ICYmIGFkZHJlc3Mub2Zmc2V0IDw9IDMyNzY3
CisgICAgICAgICAgICAmJiAhbV9maXhlZFdpZHRoKSB7CisgICAgICAgICAgICAvKgorICAgICAg
ICAgICAgICAgIHNsbCAgICAgYWRkclRlbXAsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUK
KyAgICAgICAgICAgICAgICBhZGR1ICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgYWRkcmVzcy5iYXNl
CisgICAgICAgICAgICAgICAgc3cgICAgICBzcmMsIGFkZHJlc3Mub2Zmc2V0KGFkZHJUZW1wKQor
ICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsbChhZGRyVGVtcFJlZ2lz
dGVyLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNl
KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN3KHNyYywgYWRkclRlbXBSZWdpc3RlciwgYWRk
cmVzcy5vZmZzZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyoKKyAgICAgICAg
ICAgICAgICBzbGwgICAgIGFkZHJUZW1wLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlCisg
ICAgICAgICAgICAgICAgYWRkdSAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGFkZHJlc3MuYmFzZQor
ICAgICAgICAgICAgICAgIGx1aSAgICAgaW1tVGVtcCwgKGFkZHJlc3Mub2Zmc2V0ICsgMHg4MDAw
KSA+PiAxNgorICAgICAgICAgICAgICAgIGFkZHUgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBpbW1U
ZW1wCisgICAgICAgICAgICAgICAgc3cgICAgICBzcmMsIChhZGRyZXNzLm9mZnNldCAmIDB4ZmZm
ZikoYXQpCisgICAgICAgICAgICAqLworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2xsKGFkZHJU
ZW1wUmVnaXN0ZXIsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgICAgICAgICAg
bV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRy
ZXNzLmJhc2UpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHVpKGltbVRlbXBSZWdpc3Rlciwg
KGFkZHJlc3Mub2Zmc2V0ICsgMHg4MDAwKSA+PiAxNik7CisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5zdyhzcmMsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHZvaWQgc3RvcmUzMihJbW0zMiBpbW0sIEltcGxpY2l0QWRkcmVzcyBhZGRy
ZXNzKQorICAgIHsKKyAgICAgICAgaWYgKGFkZHJlc3Mub2Zmc2V0ID49IC0zMjc2OCAmJiBhZGRy
ZXNzLm9mZnNldCA8PSAzMjc2NworICAgICAgICAgICAgJiYgIW1fZml4ZWRXaWR0aCkgeworICAg
ICAgICAgICAgaWYgKCFpbW0ubV9pc1BvaW50ZXIgJiYgaW1tLm1fdmFsdWUgPT0gMCkKKyAgICAg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5zdyhNSVBTUmVnaXN0ZXJzOjp6ZXJvLCBhZGRyZXNzLmJh
c2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcy5vZmZzZXQpOworICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbW92ZShpbW0sIGltbVRlbXBSZWdpc3Rl
cik7CisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3coaW1tVGVtcFJlZ2lzdGVyLCBhZGRy
ZXNzLmJhc2UsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgbHVpICAgICBhZGRyVGVtcCwgKG9m
ZnNldCArIDB4ODAwMCkgPj4gMTYKKyAgICAgICAgICAgICAgICBhZGR1ICAgIGFkZHJUZW1wLCBh
ZGRyVGVtcCwgYmFzZQorICAgICAgICAgICAgICAgIHN3ICAgICAgaW1tVGVtcCwgKG9mZnNldCAm
IDB4ZmZmZikoYWRkclRlbXApCisgICAgICAgICAgICAgICovCisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5sdWkoYWRkclRlbXBSZWdpc3RlciwgKGFkZHJlc3Mub2Zmc2V0ICsgMHg4MDAwKSA+PiAx
Nik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJU
ZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSk7CisgICAgICAgICAgICBpZiAoIWltbS5tX2lzUG9p
bnRlciAmJiBpbW0ubV92YWx1ZSA9PSAwICYmICFtX2ZpeGVkV2lkdGgpCisgICAgICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuc3coTUlQU1JlZ2lzdGVyczo6emVybywgYWRkclRlbXBSZWdpc3RlciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzLm9mZnNldCk7CisgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBtb3ZlKGltbSwgaW1tVGVtcFJlZ2lzdGVyKTsK
KyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdyhpbW1UZW1wUmVnaXN0ZXIsIGFkZHJUZW1w
UmVnaXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcy5vZmZzZXQp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBzdG9yZTMyKFJl
Z2lzdGVySUQgc3JjLCB2b2lkKiBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAg
ICAgIGxpICBhZGRyVGVtcCwgYWRkcmVzcworICAgICAgICAgICAgc3cgIHNyYywgMChhZGRyVGVt
cCkKKyAgICAgICAgKi8KKyAgICAgICAgbW92ZShJbW1QdHIoYWRkcmVzcyksIGFkZHJUZW1wUmVn
aXN0ZXIpOworICAgICAgICBtX2Fzc2VtYmxlci5zdyhzcmMsIGFkZHJUZW1wUmVnaXN0ZXIsIDAp
OworICAgIH0KKworICAgIHZvaWQgc3RvcmUzMihJbW0zMiBpbW0sIHZvaWQqIGFkZHJlc3MpCisg
ICAgeworICAgICAgICAvKgorICAgICAgICAgICAgbGkgIGltbVRlbXAsIGltbQorICAgICAgICAg
ICAgbGkgIGFkZHJUZW1wLCBhZGRyZXNzCisgICAgICAgICAgICBzdyAgc3JjLCAwKGFkZHJUZW1w
KQorICAgICAgICAqLworICAgICAgICBpZiAoIWltbS5tX2lzUG9pbnRlciAmJiBpbW0ubV92YWx1
ZSA9PSAwICYmICFtX2ZpeGVkV2lkdGgpIHsKKyAgICAgICAgICAgIG1vdmUoSW1tUHRyKGFkZHJl
c3MpLCBhZGRyVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN3KE1JUFNS
ZWdpc3RlcnM6Onplcm8sIGFkZHJUZW1wUmVnaXN0ZXIsIDApOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgbW92ZShpbW0sIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICBtb3Zl
KEltbVB0cihhZGRyZXNzKSwgYWRkclRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5zdyhpbW1UZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIDApOworICAgICAgICB9
CisgICAgfQorCisgICAgLy8gRmxvYXRpbmctcG9pbnQgb3BlcmF0aW9uczoKKworICAgIGJvb2wg
c3VwcG9ydHNGbG9hdGluZ1BvaW50KCkgY29uc3QKKyAgICB7CisjaWYgZGVmaW5lZChfX21pcHNf
aGFyZF9mbG9hdCkgJiYgIWRlZmluZWQoX19taXBzX3NpbmdsZV9mbG9hdCkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisjZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKyAgICB9CisK
KyAgICBib29sIHN1cHBvcnRzRmxvYXRpbmdQb2ludFRydW5jYXRlKCkgY29uc3QKKyAgICB7Cisj
aWYgZGVmaW5lZChfX21pcHNfaGFyZF9mbG9hdCkgJiYgIWRlZmluZWQoX19taXBzX3NpbmdsZV9m
bG9hdCkgJiYgKF9fbWlwcyA+IDEpCisgICAgICAgIHJldHVybiB0cnVlOworI2Vsc2UKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCisgICAgfQorCisgICAgLy8gU3RhY2sgbWFuaXB1bGF0
aW9uIG9wZXJhdGlvbnM6CisgICAgLy8KKyAgICAvLyBUaGUgQUJJIGlzIGFzc3VtZWQgdG8gcHJv
dmlkZSBhIHN0YWNrIGFic3RyYWN0aW9uIHRvIG1lbW9yeSwKKyAgICAvLyBjb250YWluaW5nIG1h
Y2hpbmUgd29yZCBzaXplZCB1bml0cyBvZiBkYXRhLiAgUHVzaCBhbmQgcG9wCisgICAgLy8gb3Bl
cmF0aW9ucyBhZGQgYW5kIHJlbW92ZSBhIHNpbmdsZSByZWdpc3RlciBzaXplZCB1bml0IG9mIGRh
dGEKKyAgICAvLyB0byBvciBmcm9tIHRoZSBzdGFjay4gIFBlZWsgYW5kIHBva2Ugb3BlcmF0aW9u
cyByZWFkIG9yIHdyaXRlCisgICAgLy8gdmFsdWVzIG9uIHRoZSBzdGFjaywgd2l0aG91dCBtb3Zp
bmcgdGhlIGN1cnJlbnQgc3RhY2sgcG9zaXRpb24uCisKKyAgICB2b2lkIHBvcChSZWdpc3RlcklE
IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sdyhkZXN0LCBNSVBTUmVnaXN0ZXJz
OjpzcCwgMCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGl1KE1JUFNSZWdpc3RlcnM6OnNwLCBN
SVBTUmVnaXN0ZXJzOjpzcCwgNCk7CisgICAgfQorCisgICAgdm9pZCBwdXNoKFJlZ2lzdGVySUQg
c3JjKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkaXUoTUlQU1JlZ2lzdGVyczo6c3As
IE1JUFNSZWdpc3RlcnM6OnNwLCAtNCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnN3KHNyYywgTUlQ
U1JlZ2lzdGVyczo6c3AsIDApOworICAgIH0KKworICAgIHZvaWQgcHVzaChBZGRyZXNzIGFkZHJl
c3MpCisgICAgeworICAgICAgICBsb2FkMzIoYWRkcmVzcywgZGF0YVRlbXBSZWdpc3Rlcik7Cisg
ICAgICAgIHB1c2goZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgfQorCisgICAgdm9pZCBwdXNoKElt
bTMyIGltbSkKKyAgICB7CisgICAgICAgIG1vdmUoaW1tLCBpbW1UZW1wUmVnaXN0ZXIpOworICAg
ICAgICBwdXNoKGltbVRlbXBSZWdpc3Rlcik7CisgICAgfQorCisgICAgLy8gUmVnaXN0ZXIgbW92
ZSBvcGVyYXRpb25zOgorICAgIC8vCisgICAgLy8gTW92ZSB2YWx1ZXMgaW4gcmVnaXN0ZXJzLgor
CisgICAgdm9pZCBtb3ZlKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAg
ICAgaWYgKCFpbW0ubV9pc1BvaW50ZXIgJiYgaW1tLm1fdmFsdWUgPT0gMCAmJiAhbV9maXhlZFdp
ZHRoKQorICAgICAgICAgICAgbW92ZShNSVBTUmVnaXN0ZXJzOjp6ZXJvLCBkZXN0KTsKKyAgICAg
ICAgZWxzZSBpZiAoaW1tLm1faXNQb2ludGVyIHx8IG1fZml4ZWRXaWR0aCkgeworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIubHVpKGRlc3QsIGltbS5tX3ZhbHVlID4+IDE2KTsKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLm9yaShkZXN0LCBkZXN0LCBpbW0ubV92YWx1ZSk7CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubGkoZGVzdCwgaW1tLm1fdmFsdWUpOworICAgIH0K
KworICAgIHZvaWQgbW92ZShSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsK
KyAgICAgICAgaWYgKHNyYyAhPSBkZXN0IHx8IG1fZml4ZWRXaWR0aCkKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLm1vdmUoZGVzdCwgc3JjKTsKKyAgICB9CisKKyAgICB2b2lkIG1vdmUoSW1tUHRy
IGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbW92ZShJbW0zMihpbW0pLCBk
ZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHN3YXAoUmVnaXN0ZXJJRCByZWcxLCBSZWdpc3RlcklE
IHJlZzIpCisgICAgeworICAgICAgICBtb3ZlKHJlZzEsIGltbVRlbXBSZWdpc3Rlcik7CisgICAg
ICAgIG1vdmUocmVnMiwgcmVnMSk7CisgICAgICAgIG1vdmUoaW1tVGVtcFJlZ2lzdGVyLCByZWcy
KTsKKyAgICB9CisKKyAgICB2b2lkIHNpZ25FeHRlbmQzMlRvUHRyKFJlZ2lzdGVySUQgc3JjLCBS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAoc3JjICE9IGRlc3QgfHwgbV9maXhl
ZFdpZHRoKQorICAgICAgICAgICAgbW92ZShzcmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQg
emVyb0V4dGVuZDMyVG9QdHIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7
CisgICAgICAgIGlmIChzcmMgIT0gZGVzdCB8fCBtX2ZpeGVkV2lkdGgpCisgICAgICAgICAgICBt
b3ZlKHNyYywgZGVzdCk7CisgICAgfQorCisgICAgLy8gRm9yd2FyZHMgLyBleHRlcm5hbCBjb250
cm9sIGZsb3cgb3BlcmF0aW9uczoKKyAgICAvLworICAgIC8vIFRoaXMgc2V0IG9mIGp1bXAgYW5k
IGNvbmRpdGlvbmFsIGJyYW5jaCBvcGVyYXRpb25zIHJldHVybiBhIEp1bXAKKyAgICAvLyBvYmpl
Y3Qgd2hpY2ggbWF5IGxpbmtlZCBhdCBhIGxhdGVyIHBvaW50LCBhbGxvdyBmb3J3YXJkcyBqdW1w
LAorICAgIC8vIG9yIGp1bXBzIHRoYXQgd2lsbCByZXF1aXJlIGV4dGVybmFsIGxpbmthZ2UgKGFm
dGVyIHRoZSBjb2RlIGhhcyBiZWVuCisgICAgLy8gcmVsb2NhdGVkKS4KKyAgICAvLworICAgIC8v
IEZvciBicmFuY2hlcywgc2lnbmVkIDwsID4sIDw9IGFuZCA+PSBhcmUgZGVub3RlZCBhcyBsLCBn
LCBsZSwgYW5kIGdlCisgICAgLy8gcmVzcGVjaXR2ZWx5LCBmb3IgdW5zaWduZWQgY29tcGFyaXNv
bnMgdGhlIG5hbWVzIGIsIGEsIGJlLCBhbmQgYWUgYXJlCisgICAgLy8gdXNlZCAocmVwcmVzZW50
aW5nIHRoZSBuYW1lcyAnYmVsb3cnIGFuZCAnYWJvdmUnKS4KKyAgICAvLworICAgIC8vIE9wZXJh
bmRzIHRvIHRoZSBjb21wYXJpc2lvbiBhcmUgcHJvdmlkZWQgaW4gdGhlIGV4cGVjdGVkIG9yZGVy
LCBlLmcuCisgICAgLy8gamxlMzIocmVnMSwgSW1tMzIoNSkpIHdpbGwgYnJhbmNoIGlmIHRoZSB2
YWx1ZSBoZWxkIGluIHJlZzEsIHdoZW4KKyAgICAvLyB0cmVhdGVkIGFzIGEgc2lnbmVkIDMyYml0
IHZhbHVlLCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gNS4KKyAgICAvLworICAgIC8vIGp6IGFu
ZCBqbnogdGVzdCB3aGV0aGVyIHRoZSBmaXJzdCBvcGVyYW5kIGlzIGVxdWFsIHRvIHplcm8sIGFu
ZCB0YWtlCisgICAgLy8gYW4gb3B0aW9uYWwgc2Vjb25kIG9wZXJhbmQgb2YgYSBtYXNrIHVuZGVy
IHdoaWNoIHRvIHBlcmZvcm0gdGhlIHRlc3QuCisKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlv
biBjb25kLCBSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQpCisgICAgeworICAgICAg
ICBpZiAoY29uZCA9PSBFcXVhbCB8fCBjb25kID09IFplcm8pCisgICAgICAgICAgICByZXR1cm4g
YnJhbmNoRXF1YWwobGVmdCwgcmlnaHQpOworICAgICAgICBpZiAoY29uZCA9PSBOb3RFcXVhbCB8
fCBjb25kID09IE5vblplcm8pCisgICAgICAgICAgICByZXR1cm4gYnJhbmNoTm90RXF1YWwobGVm
dCwgcmlnaHQpOworICAgICAgICBpZiAoY29uZCA9PSBBYm92ZSkgeworICAgICAgICAgICAgbV9h
c3NlbWJsZXIuc2x0dShjbXBUZW1wUmVnaXN0ZXIsIHJpZ2h0LCBsZWZ0KTsKKyAgICAgICAgICAg
IHJldHVybiBicmFuY2hOb3RFcXVhbChjbXBUZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onpl
cm8pOworICAgICAgICB9CisgICAgICAgIGlmIChjb25kID09IEFib3ZlT3JFcXVhbCkgeworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuc2x0dShjbXBUZW1wUmVnaXN0ZXIsIGxlZnQsIHJpZ2h0KTsK
KyAgICAgICAgICAgIHJldHVybiBicmFuY2hFcXVhbChjbXBUZW1wUmVnaXN0ZXIsIE1JUFNSZWdp
c3RlcnM6Onplcm8pOworICAgICAgICB9CisgICAgICAgIGlmIChjb25kID09IEJlbG93KSB7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHR1KGNtcFRlbXBSZWdpc3RlciwgbGVmdCwgcmlnaHQp
OworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaE5vdEVxdWFsKGNtcFRlbXBSZWdpc3RlciwgTUlQ
U1JlZ2lzdGVyczo6emVybyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gQmVsb3dP
ckVxdWFsKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHR1KGNtcFRlbXBSZWdpc3Rlciwg
cmlnaHQsIGxlZnQpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEVxdWFsKGNtcFRlbXBSZWdp
c3RlciwgTUlQU1JlZ2lzdGVyczo6emVybyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbmQg
PT0gR3JlYXRlclRoYW4pIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdChjbXBUZW1wUmVn
aXN0ZXIsIHJpZ2h0LCBsZWZ0KTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hOb3RFcXVhbChj
bXBUZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onplcm8pOworICAgICAgICB9CisgICAgICAg
IGlmIChjb25kID09IEdyZWF0ZXJUaGFuT3JFcXVhbCkgeworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIuc2x0KGNtcFRlbXBSZWdpc3RlciwgbGVmdCwgcmlnaHQpOworICAgICAgICAgICAgcmV0dXJu
IGJyYW5jaEVxdWFsKGNtcFRlbXBSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6emVybyk7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gTGVzc1RoYW4pIHsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLnNsdChjbXBUZW1wUmVnaXN0ZXIsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIHJl
dHVybiBicmFuY2hOb3RFcXVhbChjbXBUZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onplcm8p
OworICAgICAgICB9CisgICAgICAgIGlmIChjb25kID09IExlc3NUaGFuT3JFcXVhbCkgeworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuc2x0KGNtcFRlbXBSZWdpc3RlciwgcmlnaHQsIGxlZnQpOwor
ICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEVxdWFsKGNtcFRlbXBSZWdpc3RlciwgTUlQU1JlZ2lz
dGVyczo6emVybyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gT3ZlcmZsb3cpIHsK
KyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgeG9yICAgICBjbXBUZW1wLCBsZWZ0LCBy
aWdodAorICAgICAgICAgICAgICAgIGJnZXogICAgTm9fb3ZlcmZsb3csIGNtcFRlbXAgICAgIyBz
YW1lIHNpZ24gYml0IC0+IG5vIG92ZXJmbG93CisgICAgICAgICAgICAgICAgbm9wCisgICAgICAg
ICAgICAgICAgc3VidSAgICBjbXBUZW1wLCBsZWZ0LCByaWdodAorICAgICAgICAgICAgICAgIHhv
ciAgICAgY21wVGVtcCwgY21wVGVtcCwgbGVmdAorICAgICAgICAgICAgICAgIGJnZXogICAgTm9f
b3ZlcmZsb3csIGNtcFRlbXAgICAgIyBzYW1lIHNpZ24gYml0IC0+IG5vIG92ZXJmbG93CisgICAg
ICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgYiAgICAgICBPdmVyZmxvdworICAgICAg
ICAgICAgICAgIG5vcAorICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgICAgIG5vcAor
ICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgICBO
b19vdmVyZmxvdzoKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3Jf
aW5zbihjbXBUZW1wUmVnaXN0ZXIsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLmJnZXooY21wVGVtcFJlZ2lzdGVyLCAxMSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5u
b3AoKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN1YnUoY21wVGVtcFJlZ2lzdGVyLCBsZWZ0
LCByaWdodCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3JfaW5zbihjbXBUZW1wUmVnaXN0
ZXIsIGNtcFRlbXBSZWdpc3RlciwgbGVmdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5iZ2V6
KGNtcFRlbXBSZWdpc3RlciwgNyk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAg
ICAgICAgICAgIHJldHVybiBqdW1wKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0g
U2lnbmVkKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdWJ1KGNtcFRlbXBSZWdpc3Rlciwg
bGVmdCwgcmlnaHQpOworICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHJlc3VsdCBpcyBuZWdh
dGl2ZS4KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdChjbXBUZW1wUmVnaXN0ZXIsIGNtcFRl
bXBSZWdpc3RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNSVBTUmVnaXN0ZXJzOjp6
ZXJvKTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hOb3RFcXVhbChjbXBUZW1wUmVnaXN0ZXIs
IE1JUFNSZWdpc3RlcnM6Onplcm8pOworICAgICAgICB9CisgICAgICAgIEFTU0VSVCgwKTsKKwor
ICAgICAgICByZXR1cm4gSnVtcCgpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoMzIoQ29uZGl0
aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgSW1tMzIgcmlnaHQpCisgICAgeworICAgICAgICBt
b3ZlKHJpZ2h0LCBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29u
ZCwgbGVmdCwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDMyKENv
bmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIEFkZHJlc3MgcmlnaHQpCisgICAgeworICAg
ICAgICBsb2FkMzIocmlnaHQsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gYnJh
bmNoMzIoY29uZCwgbGVmdCwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgfQorCisgICAgSnVtcCBi
cmFuY2gzMihDb25kaXRpb24gY29uZCwgQWRkcmVzcyBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0KQor
ICAgIHsKKyAgICAgICAgbG9hZDMyKGxlZnQsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICBy
ZXR1cm4gYnJhbmNoMzIoY29uZCwgZGF0YVRlbXBSZWdpc3RlciwgcmlnaHQpOworICAgIH0KKwor
ICAgIEp1bXAgYnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgbGVmdCwgSW1tMzIgcmln
aHQpCisgICAgeworICAgICAgICBsb2FkMzIobGVmdCwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAg
ICAgIG1vdmUocmlnaHQsIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBicmFuY2gz
Mihjb25kLCBkYXRhVGVtcFJlZ2lzdGVyLCBpbW1UZW1wUmVnaXN0ZXIpOworICAgIH0KKworICAg
IEp1bXAgYnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIEJhc2VJbmRleCBsZWZ0LCBJbW0zMiByaWdo
dCkKKyAgICB7CisgICAgICAgIGxvYWQzMihsZWZ0LCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAg
ICAgLy8gQmUgY2FyZWZ1bCB0aGF0IHRoZSBwcmV2aW91cyBsb2FkMzIoKSB1c2VzIGltbVRlbXBS
ZWdpc3Rlci4KKyAgICAgICAgLy8gU28sIHdlIG5lZWQgdG8gcHV0IG1vdmUoKSBhZnRlciBsb2Fk
MzIoKS4KKyAgICAgICAgbW92ZShyaWdodCwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0
dXJuIGJyYW5jaDMyKGNvbmQsIGRhdGFUZW1wUmVnaXN0ZXIsIGltbVRlbXBSZWdpc3Rlcik7Cisg
ICAgfQorCisgICAgSnVtcCBicmFuY2gzMldpdGhVbmFsaWduZWRIYWxmV29yZHMoQ29uZGl0aW9u
IGNvbmQsIEJhc2VJbmRleCBsZWZ0LCBJbW0zMiByaWdodCkKKyAgICB7CisgICAgICAgIGxvYWQz
MldpdGhVbmFsaWduZWRIYWxmV29yZHMobGVmdCwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAg
IC8vIEJlIGNhcmVmdWwgdGhhdCB0aGUgcHJldmlvdXMgbG9hZDMyV2l0aFVuYWxpZ25lZEhhbGZX
b3JkcygpCisgICAgICAgIC8vIHVzZXMgaW1tVGVtcFJlZ2lzdGVyLgorICAgICAgICAvLyBTbywg
d2UgbmVlZCB0byBwdXQgbW92ZSgpIGFmdGVyIGxvYWQzMldpdGhVbmFsaWduZWRIYWxmV29yZHMo
KS4KKyAgICAgICAgbW92ZShyaWdodCwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJu
IGJyYW5jaDMyKGNvbmQsIGRhdGFUZW1wUmVnaXN0ZXIsIGltbVRlbXBSZWdpc3Rlcik7CisgICAg
fQorCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29uZCwgQWJzb2x1dGVBZGRyZXNzIGxl
ZnQsIFJlZ2lzdGVySUQgcmlnaHQpCisgICAgeworICAgICAgICBsb2FkMzIobGVmdC5tX3B0ciwg
ZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBkYXRhVGVt
cFJlZ2lzdGVyLCByaWdodCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24g
Y29uZCwgQWJzb2x1dGVBZGRyZXNzIGxlZnQsIEltbTMyIHJpZ2h0KQorICAgIHsKKyAgICAgICAg
bG9hZDMyKGxlZnQubV9wdHIsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICBtb3ZlKHJpZ2h0
LCBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgZGF0YVRl
bXBSZWdpc3RlciwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDE2
KENvbmRpdGlvbiBjb25kLCBCYXNlSW5kZXggbGVmdCwgUmVnaXN0ZXJJRCByaWdodCkKKyAgICB7
CisgICAgICAgIGxvYWQxNihsZWZ0LCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJu
IGJyYW5jaDMyKGNvbmQsIGRhdGFUZW1wUmVnaXN0ZXIsIHJpZ2h0KTsKKyAgICB9CisKKyAgICBK
dW1wIGJyYW5jaDE2KENvbmRpdGlvbiBjb25kLCBCYXNlSW5kZXggbGVmdCwgSW1tMzIgcmlnaHQp
CisgICAgeworICAgICAgICBBU1NFUlQoIShyaWdodC5tX3ZhbHVlICYgMHhGRkZGMDAwMCkpOwor
ICAgICAgICBsb2FkMTYobGVmdCwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgIC8vIEJlIGNh
cmVmdWwgdGhhdCB0aGUgcHJldmlvdXMgbG9hZDE2KCkgdXNlcyBpbW1UZW1wUmVnaXN0ZXIuCisg
ICAgICAgIC8vIFNvLCB3ZSBuZWVkIHRvIHB1dCBtb3ZlKCkgYWZ0ZXIgbG9hZDE2KCkuCisgICAg
ICAgIG1vdmUocmlnaHQsIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBicmFuY2gz
Mihjb25kLCBkYXRhVGVtcFJlZ2lzdGVyLCBpbW1UZW1wUmVnaXN0ZXIpOworICAgIH0KKworICAg
IEp1bXAgYnJhbmNoVGVzdDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHJlZywgUmVnaXN0
ZXJJRCBtYXNrKQorICAgIHsKKyAgICAgICAgQVNTRVJUKChjb25kID09IFplcm8pIHx8IChjb25k
ID09IE5vblplcm8pKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5kX2luc24oY21wVGVtcFJlZ2lz
dGVyLCByZWcsIG1hc2spOworICAgICAgICBpZiAoY29uZCA9PSBaZXJvKQorICAgICAgICAgICAg
cmV0dXJuIGJyYW5jaEVxdWFsKGNtcFRlbXBSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6emVybyk7
CisgICAgICAgIHJldHVybiBicmFuY2hOb3RFcXVhbChjbXBUZW1wUmVnaXN0ZXIsIE1JUFNSZWdp
c3RlcnM6Onplcm8pOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoVGVzdDMyKENvbmRpdGlvbiBj
b25kLCBSZWdpc3RlcklEIHJlZywgSW1tMzIgbWFzayA9IEltbTMyKC0xKSkKKyAgICB7CisgICAg
ICAgIEFTU0VSVCgoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisgICAgICAg
IGlmIChtYXNrLm1fdmFsdWUgPT0gLTEgJiYgIW1fZml4ZWRXaWR0aCkgeworICAgICAgICAgICAg
aWYgKGNvbmQgPT0gWmVybykKKyAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoRXF1YWwocmVn
LCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hOb3RFcXVh
bChyZWcsIE1JUFNSZWdpc3RlcnM6Onplcm8pOworICAgICAgICB9CisgICAgICAgIG1vdmUobWFz
aywgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3QzMihjb25kLCBy
ZWcsIGltbVRlbXBSZWdpc3Rlcik7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hUZXN0MzIoQ29u
ZGl0aW9uIGNvbmQsIEFkZHJlc3MgYWRkcmVzcywgSW1tMzIgbWFzayA9IEltbTMyKC0xKSkKKyAg
ICB7CisgICAgICAgIGxvYWQzMihhZGRyZXNzLCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAg
cmV0dXJuIGJyYW5jaFRlc3QzMihjb25kLCBkYXRhVGVtcFJlZ2lzdGVyLCBtYXNrKTsKKyAgICB9
CisKKyAgICBKdW1wIGJyYW5jaFRlc3QzMihDb25kaXRpb24gY29uZCwgQmFzZUluZGV4IGFkZHJl
c3MsIEltbTMyIG1hc2sgPSBJbW0zMigtMSkpCisgICAgeworICAgICAgICBsb2FkMzIoYWRkcmVz
cywgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBicmFuY2hUZXN0MzIoY29uZCwg
ZGF0YVRlbXBSZWdpc3RlciwgbWFzayk7CisgICAgfQorCisgICAgSnVtcCBqdW1wKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBicmFuY2hFcXVhbChNSVBTUmVnaXN0ZXJzOjp6ZXJvLCBNSVBTUmVn
aXN0ZXJzOjp6ZXJvKTsKKyAgICB9CisKKyAgICB2b2lkIGp1bXAoUmVnaXN0ZXJJRCB0YXJnZXQp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5qcih0YXJnZXQpOworICAgICAgICBtX2Fzc2Vt
Ymxlci5ub3AoKTsKKyAgICB9CisKKyAgICB2b2lkIGp1bXAoQWRkcmVzcyBhZGRyZXNzKQorICAg
IHsKKyAgICAgICAgbV9maXhlZFdpZHRoID0gdHJ1ZTsKKyAgICAgICAgbG9hZDMyKGFkZHJlc3Ms
IE1JUFNSZWdpc3RlcnM6OnQ5KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuanIoTUlQU1JlZ2lzdGVy
czo6dDkpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgbV9maXhlZFdpZHRo
ID0gZmFsc2U7CisgICAgfQorCisgICAgLy8gQXJpdGhtZXRpYyBjb250cm9sIGZsb3cgb3BlcmF0
aW9uczoKKyAgICAvLworICAgIC8vIFRoaXMgc2V0IG9mIGNvbmRpdGlvbmFsIGJyYW5jaCBvcGVy
YXRpb25zIGJyYW5jaCBiYXNlZAorICAgIC8vIG9uIHRoZSByZXN1bHQgb2YgYW4gYXJpdGhtZXRp
YyBvcGVyYXRpb24uICBUaGUgb3BlcmF0aW9uCisgICAgLy8gaXMgcGVyZm9ybWVkIGFzIG5vcm1h
bCwgc3RvcmluZyB0aGUgcmVzdWx0LgorICAgIC8vCisgICAgLy8gKiBqeiBvcGVyYXRpb25zIGJy
YW5jaCBpZiB0aGUgcmVzdWx0IGlzIHplcm8uCisgICAgLy8gKiBqbyBvcGVyYXRpb25zIGJyYW5j
aCBpZiB0aGUgKHNpZ25lZCkgYXJpdGhtZXRpYworICAgIC8vICAgb3BlcmF0aW9uIGNhdXNlZCBh
biBvdmVyZmxvdyB0byBvY2N1ci4KKworICAgIEp1bXAgYnJhbmNoQWRkMzIoQ29uZGl0aW9uIGNv
bmQsIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBBU1NF
UlQoKGNvbmQgPT0gT3ZlcmZsb3cpIHx8IChjb25kID09IFNpZ25lZCkgfHwgKGNvbmQgPT0gWmVy
bykgfHwgKGNvbmQgPT0gTm9uWmVybykpOworICAgICAgICBpZiAoY29uZCA9PSBPdmVyZmxvdykg
eworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICBtb3ZlICAgIGRlc3QsIGRhdGFUZW1w
CisgICAgICAgICAgICAgICAgeG9yICAgICBjbXBUZW1wLCBkYXRhVGVtcCwgc3JjCisgICAgICAg
ICAgICAgICAgYmx0eiAgICBjbXBUZW1wLCBOb19vdmVyZmxvdyAgICAjIGRpZmYgc2lnbiBiaXQg
LT4gbm8gb3ZlcmZsb3cKKyAgICAgICAgICAgICAgICBhZGR1ICAgIGRlc3QsIGRhdGFUZW1wLCBz
cmMKKyAgICAgICAgICAgICAgICB4b3IgICAgIGNtcFRlbXAsIGRlc3QsIGRhdGFUZW1wCisgICAg
ICAgICAgICAgICAgYmdleiAgICBjbXBUZW1wLCBOb19vdmVyZmxvdyAgICAjIHNhbWUgc2lnbiBi
aWcgLT4gbm8gb3ZlcmZsb3cKKyAgICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAgICAgICBi
ICAgICAgIE92ZXJmbG93CisgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgbm9w
CisgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAg
ICAgbm9wCisgICAgICAgICAgICBOb19vdmVyZmxvdzoKKyAgICAgICAgICAgICovCisgICAgICAg
ICAgICBtb3ZlKGRlc3QsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIueG9yX2luc24oY21wVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLCBzcmMpOworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuYmx0eihjbXBUZW1wUmVnaXN0ZXIsIDEwKTsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLmFkZHUoZGVzdCwgZGF0YVRlbXBSZWdpc3Rlciwgc3JjKTsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLnhvcl9pbnNuKGNtcFRlbXBSZWdpc3RlciwgZGVzdCwgZGF0YVRl
bXBSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5iZ2V6KGNtcFRlbXBSZWdpc3Rl
ciwgNyk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgICAgIHJldHVy
biBqdW1wKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gU2lnbmVkKSB7CisgICAg
ICAgICAgICBhZGQzMihzcmMsIGRlc3QpOworICAgICAgICAgICAgLy8gQ2hlY2sgaWYgZGVzdCBp
cyBuZWdhdGl2ZS4KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdChjbXBUZW1wUmVnaXN0ZXIs
IGRlc3QsIE1JUFNSZWdpc3RlcnM6Onplcm8pOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaE5v
dEVxdWFsKGNtcFRlbXBSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6emVybyk7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKGNvbmQgPT0gWmVybykgeworICAgICAgICAgICAgYWRkMzIoc3JjLCBkZXN0
KTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hFcXVhbChkZXN0LCBNSVBTUmVnaXN0ZXJzOjp6
ZXJvKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29uZCA9PSBOb25aZXJvKSB7CisgICAgICAg
ICAgICBhZGQzMihzcmMsIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaE5vdEVxdWFs
KGRlc3QsIE1JUFNSZWdpc3RlcnM6Onplcm8pOworICAgICAgICB9CisgICAgICAgIEFTU0VSVCgw
KTsKKyAgICAgICAgcmV0dXJuIEp1bXAoKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaEFkZDMy
KENvbmRpdGlvbiBjb25kLCBJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIG1vdmUoaW1tLCBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNoQWRk
MzIoY29uZCwgaW1tVGVtcFJlZ2lzdGVyLCBkZXN0KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5j
aE11bDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKChjb25kID09IE92ZXJmbG93KSB8fCAoY29uZCA9PSBTaWdu
ZWQpIHx8IChjb25kID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8pKTsKKyAgICAgICAgaWYg
KGNvbmQgPT0gT3ZlcmZsb3cpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgbXVs
dCAgICBzcmMsIGRlc3QKKyAgICAgICAgICAgICAgICBtZmhpICAgIGRhdGFUZW1wCisgICAgICAg
ICAgICAgICAgbWZsbyAgICBkZXN0CisgICAgICAgICAgICAgICAgc3JhICAgICBhZGRyVGVtcCwg
ZGVzdCwgMzEKKyAgICAgICAgICAgICAgICBiZXEgICAgIGRhdGFUZW1wLCBhZGRyVGVtcCwgTm9f
b3ZlcmZsb3cgIyBhbGwgc2lnbiBiaXRzIChiaXQgNjMgdG8gYml0IDMxKSBhcmUgdGhlIHNhbWUg
LT4gbm8gb3ZlcmZsb3cKKyAgICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAgICAgICBiICAg
ICAgIE92ZXJmbG93CisgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgbm9wCisg
ICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAg
bm9wCisgICAgICAgICAgICBOb19vdmVyZmxvdzoKKyAgICAgICAgICAgICovCisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5tdWx0KHNyYywgZGVzdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5t
ZmhpKGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubWZsbyhkZXN0
KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNyYShhZGRyVGVtcFJlZ2lzdGVyLCBkZXN0LCAz
MSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5iZXEoZGF0YVRlbXBSZWdpc3RlciwgYWRkclRl
bXBSZWdpc3RlciwgNyk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAg
ICAgIHJldHVybiBqdW1wKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gU2lnbmVk
KSB7CisgICAgICAgICAgICBtdWwzMihzcmMsIGRlc3QpOworICAgICAgICAgICAgLy8gQ2hlY2sg
aWYgZGVzdCBpcyBuZWdhdGl2ZS4KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdChjbXBUZW1w
UmVnaXN0ZXIsIGRlc3QsIE1JUFNSZWdpc3RlcnM6Onplcm8pOworICAgICAgICAgICAgcmV0dXJu
IGJyYW5jaE5vdEVxdWFsKGNtcFRlbXBSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6emVybyk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gWmVybykgeworICAgICAgICAgICAgbXVsMzIo
c3JjLCBkZXN0KTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hFcXVhbChkZXN0LCBNSVBTUmVn
aXN0ZXJzOjp6ZXJvKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29uZCA9PSBOb25aZXJvKSB7
CisgICAgICAgICAgICBtdWwzMihzcmMsIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5j
aE5vdEVxdWFsKGRlc3QsIE1JUFNSZWdpc3RlcnM6Onplcm8pOworICAgICAgICB9CisgICAgICAg
IEFTU0VSVCgwKTsKKyAgICAgICAgcmV0dXJuIEp1bXAoKTsKKyAgICB9CisKKyAgICBKdW1wIGJy
YW5jaE11bDMyKENvbmRpdGlvbiBjb25kLCBJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjLCBSZWdp
c3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtb3ZlKGltbSwgaW1tVGVtcFJlZ2lzdGVyKTsK
KyAgICAgICAgbW92ZShzcmMsIGRlc3QpOworICAgICAgICByZXR1cm4gYnJhbmNoTXVsMzIoY29u
ZCwgaW1tVGVtcFJlZ2lzdGVyLCBkZXN0KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFN1YjMy
KENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsK
KyAgICAgICAgQVNTRVJUKChjb25kID09IE92ZXJmbG93KSB8fCAoY29uZCA9PSBTaWduZWQpIHx8
IChjb25kID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8pKTsKKyAgICAgICAgaWYgKGNvbmQg
PT0gT3ZlcmZsb3cpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgbW92ZSAgICBk
ZXN0LCBkYXRhVGVtcAorICAgICAgICAgICAgICAgIHhvciAgICAgY21wVGVtcCwgZGF0YVRlbXAs
IHNyYworICAgICAgICAgICAgICAgIGJnZXogICAgY21wVGVtcCwgTm9fb3ZlcmZsb3cgICAgIyBz
YW1lIHNpZ24gYml0IC0+IG5vIG92ZXJmbG93CisgICAgICAgICAgICAgICAgc3VidSAgICBkZXN0
LCBkYXRhVGVtcCwgc3JjCisgICAgICAgICAgICAgICAgeG9yICAgICBjbXBUZW1wLCBkZXN0LCBk
YXRhVGVtcAorICAgICAgICAgICAgICAgIGJnZXogICAgY21wVGVtcCwgTm9fb3ZlcmZsb3cgICAg
IyBzYW1lIHNpZ24gYml0IC0+IG5vIG92ZXJmbG93CisgICAgICAgICAgICAgICAgbm9wCisgICAg
ICAgICAgICAgICAgYiAgICAgICBPdmVyZmxvdworICAgICAgICAgICAgICAgIG5vcAorICAgICAg
ICAgICAgICAgIG5vcAorICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgICAgIG5vcAor
ICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgTm9fb3ZlcmZsb3c6CisgICAgICAgICAg
ICAqLworICAgICAgICAgICAgbW92ZShkZXN0LCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLnhvcl9pbnNuKGNtcFRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3Rl
ciwgc3JjKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmJnZXooY21wVGVtcFJlZ2lzdGVyLCAx
MCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdWJ1KGRlc3QsIGRhdGFUZW1wUmVnaXN0ZXIs
IHNyYyk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3JfaW5zbihjbXBUZW1wUmVnaXN0ZXIs
IGRlc3QsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYmdleihj
bXBUZW1wUmVnaXN0ZXIsIDcpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAg
ICAgICAgICByZXR1cm4ganVtcCgpOworICAgICAgICB9CisgICAgICAgIGlmIChjb25kID09IFNp
Z25lZCkgeworICAgICAgICAgICAgc3ViMzIoc3JjLCBkZXN0KTsKKyAgICAgICAgICAgIC8vIENo
ZWNrIGlmIGRlc3QgaXMgbmVnYXRpdmUuCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHQoY21w
VGVtcFJlZ2lzdGVyLCBkZXN0LCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsKKyAgICAgICAgICAgIHJl
dHVybiBicmFuY2hOb3RFcXVhbChjbXBUZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onplcm8p
OworICAgICAgICB9CisgICAgICAgIGlmIChjb25kID09IFplcm8pIHsKKyAgICAgICAgICAgIHN1
YjMyKHNyYywgZGVzdCk7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRXF1YWwoZGVzdCwgTUlQ
U1JlZ2lzdGVyczo6emVybyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gTm9uWmVy
bykgeworICAgICAgICAgICAgc3ViMzIoc3JjLCBkZXN0KTsKKyAgICAgICAgICAgIHJldHVybiBi
cmFuY2hOb3RFcXVhbChkZXN0LCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsKKyAgICAgICAgfQorICAg
ICAgICBBU1NFUlQoMCk7CisgICAgICAgIHJldHVybiBKdW1wKCk7CisgICAgfQorCisgICAgSnVt
cCBicmFuY2hTdWIzMihDb25kaXRpb24gY29uZCwgSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBtb3ZlKGltbSwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0
dXJuIGJyYW5jaFN1YjMyKGNvbmQsIGltbVRlbXBSZWdpc3RlciwgZGVzdCk7CisgICAgfQorCisg
ICAgLy8gTWlzY2VsbGFuZW91cyBvcGVyYXRpb25zOgorCisgICAgdm9pZCBicmVha3BvaW50KCkK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmJrcHQoKTsKKyAgICB9CisKKyAgICBDYWxsIG5l
YXJDYWxsKCkKKyAgICB7CisgICAgICAgIC8qIFdlIG5lZWQgdHdvIHdvcmRzIGZvciByZWxheGF0
aW9uLiAgKi8KKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIG1fYXNzZW1ibGVy
Lm5vcCgpOworICAgICAgICBtX2Fzc2VtYmxlci5qYWwoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIu
bm9wKCk7CisgICAgICAgIHJldHVybiBDYWxsKG1fYXNzZW1ibGVyLm5ld0ptcFNyYygpLCBDYWxs
OjpMaW5rYWJsZU5lYXIpOworICAgIH0KKworICAgIENhbGwgY2FsbCgpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5sdWkoTUlQU1JlZ2lzdGVyczo6dDksIDApOworICAgICAgICBtX2Fzc2Vt
Ymxlci5vcmkoTUlQU1JlZ2lzdGVyczo6dDksIE1JUFNSZWdpc3RlcnM6OnQ5LCAwKTsKKyAgICAg
ICAgbV9hc3NlbWJsZXIuamFscihNSVBTUmVnaXN0ZXJzOjp0OSk7CisgICAgICAgIG1fYXNzZW1i
bGVyLm5vcCgpOworICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5uZXdKbXBTcmMoKSwg
Q2FsbDo6TGlua2FibGUpOworICAgIH0KKworICAgIENhbGwgY2FsbChSZWdpc3RlcklEIHRhcmdl
dCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmphbHIodGFyZ2V0KTsKKyAgICAgICAgbV9h
c3NlbWJsZXIubm9wKCk7CisgICAgICAgIHJldHVybiBDYWxsKG1fYXNzZW1ibGVyLm5ld0ptcFNy
YygpLCBDYWxsOjpOb25lKTsKKyAgICB9CisKKyAgICBDYWxsIGNhbGwoQWRkcmVzcyBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgbV9maXhlZFdpZHRoID0gdHJ1ZTsKKyAgICAgICAgbG9hZDMyKGFk
ZHJlc3MsIE1JUFNSZWdpc3RlcnM6OnQ5KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuamFscihNSVBT
UmVnaXN0ZXJzOjp0OSk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICBtX2Zp
eGVkV2lkdGggPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIubmV3Sm1w
U3JjKCksIENhbGw6Ok5vbmUpOworICAgIH0KKworICAgIHZvaWQgcmV0KCkKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmpyKE1JUFNSZWdpc3RlcnM6OnJhKTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubm9wKCk7CisgICAgfQorCisgICAgdm9pZCBzZXQzMihDb25kaXRpb24gY29uZCwgUmVnaXN0
ZXJJRCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBpZiAoY29uZCA9PSBFcXVhbCB8fCBjb25kID09IFplcm8pIHsKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLnhvcl9pbnNuKGRlc3QsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLnNsdGl1KGRlc3QsIGRlc3QsIDEpOworICAgICAgICB9IGVsc2UgaWYgKGNvbmQgPT0g
Tm90RXF1YWwgfHwgY29uZCA9PSBOb25aZXJvKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci54
b3JfaW5zbihkZXN0LCBsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHR1
KGRlc3QsIE1JUFNSZWdpc3RlcnM6Onplcm8sIGRlc3QpOworICAgICAgICB9IGVsc2UgaWYgKGNv
bmQgPT0gQWJvdmUpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHR1KGRlc3QsIHJpZ2h0LCBs
ZWZ0KTsKKyAgICAgICAgZWxzZSBpZiAoY29uZCA9PSBBYm92ZU9yRXF1YWwpIHsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLnNsdHUoZGVzdCwgbGVmdCwgcmlnaHQpOworICAgICAgICAgICAgbV9h
c3NlbWJsZXIueG9yaShkZXN0LCBkZXN0LCAxKTsKKyAgICAgICAgfSBlbHNlIGlmIChjb25kID09
IEJlbG93KQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0dShkZXN0LCBsZWZ0LCByaWdodCk7
CisgICAgICAgIGVsc2UgaWYgKGNvbmQgPT0gQmVsb3dPckVxdWFsKSB7CisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5zbHR1KGRlc3QsIHJpZ2h0LCBsZWZ0KTsKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLnhvcmkoZGVzdCwgZGVzdCwgMSk7CisgICAgICAgIH0gZWxzZSBpZiAoY29uZCA9PSBHcmVh
dGVyVGhhbikKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdChkZXN0LCByaWdodCwgbGVmdCk7
CisgICAgICAgIGVsc2UgaWYgKGNvbmQgPT0gR3JlYXRlclRoYW5PckVxdWFsKSB7CisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5zbHQoZGVzdCwgbGVmdCwgcmlnaHQpOworICAgICAgICAgICAgbV9h
c3NlbWJsZXIueG9yaShkZXN0LCBkZXN0LCAxKTsKKyAgICAgICAgfSBlbHNlIGlmIChjb25kID09
IExlc3NUaGFuKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0KGRlc3QsIGxlZnQsIHJpZ2h0
KTsKKyAgICAgICAgZWxzZSBpZiAoY29uZCA9PSBMZXNzVGhhbk9yRXF1YWwpIHsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLnNsdChkZXN0LCByaWdodCwgbGVmdCk7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci54b3JpKGRlc3QsIGRlc3QsIDEpOworICAgICAgICB9IGVsc2UgaWYgKGNvbmQgPT0g
T3ZlcmZsb3cpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgeG9yICAgICBjbXBU
ZW1wLCBsZWZ0LCByaWdodAorICAgICAgICAgICAgICAgIGJnZXogICAgRG9uZSwgY21wVGVtcCAg
ICMgc2FtZSBzaWduIGJpdCAtPiBubyBvdmVyZmxvdworICAgICAgICAgICAgICAgIG1vdmUgICAg
ZGVzdCwgMAorICAgICAgICAgICAgICAgIHN1YnUgICAgY21wVGVtcCwgbGVmdCwgcmlnaHQKKyAg
ICAgICAgICAgICAgICB4b3IgICAgIGNtcFRlbXAsIGNtcFRlbXAsIGxlZnQgIyBkaWZmIHNpZ24g
Yml0IC0+IG92ZXJmbG93CisgICAgICAgICAgICAgICAgc2x0ICAgICBkZXN0LCBjbXBUZW1wLCAw
CisgICAgICAgICAgICAgIERvbmU6CisgICAgICAgICAgICAqLworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIueG9yX2luc24oY21wVGVtcFJlZ2lzdGVyLCBsZWZ0LCByaWdodCk7CisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5iZ2V6KGNtcFRlbXBSZWdpc3RlciwgNCk7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5tb3ZlKGRlc3QsIE1JUFNSZWdpc3RlcnM6Onplcm8pOworICAgICAgICAgICAgbV9h
c3NlbWJsZXIuc3VidShjbXBUZW1wUmVnaXN0ZXIsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLnhvcl9pbnNuKGNtcFRlbXBSZWdpc3RlciwgY21wVGVtcFJlZ2lzdGVyLCBs
ZWZ0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdChkZXN0LCBjbXBUZW1wUmVnaXN0ZXIs
IE1JUFNSZWdpc3RlcnM6Onplcm8pOworICAgICAgICB9IGVsc2UgaWYgKGNvbmQgPT0gU2lnbmVk
KSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdWJ1KGRlc3QsIGxlZnQsIHJpZ2h0KTsKKyAg
ICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSByZXN1bHQgaXMgbmVnYXRpdmUuCisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5zbHQoZGVzdCwgZGVzdCwgTUlQU1JlZ2lzdGVyczo6emVybyk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHNldDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklE
IGxlZnQsIEltbTMyIHJpZ2h0LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtb3Zl
KHJpZ2h0LCBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICBzZXQzMihjb25kLCBsZWZ0LCBpbW1U
ZW1wUmVnaXN0ZXIsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgc2V0VGVzdDMyKENvbmRpdGlv
biBjb25kLCBBZGRyZXNzIGFkZHJlc3MsIEltbTMyIG1hc2ssIFJlZ2lzdGVySUQgZGVzdCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7
CisgICAgICAgIGxvYWQzMihhZGRyZXNzLCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgaWYg
KG1hc2subV92YWx1ZSA9PSAtMSAmJiAhbV9maXhlZFdpZHRoKSB7CisgICAgICAgICAgICBpZiAo
Y29uZCA9PSBaZXJvKQorICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdGl1KGRlc3QsIGRh
dGFUZW1wUmVnaXN0ZXIsIDEpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1f
YXNzZW1ibGVyLnNsdHUoZGVzdCwgTUlQU1JlZ2lzdGVyczo6emVybywgZGF0YVRlbXBSZWdpc3Rl
cik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtb3ZlKG1hc2ssIGltbVRlbXBSZWdp
c3Rlcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hbmRfaW5zbihjbXBUZW1wUmVnaXN0ZXIs
IGRhdGFUZW1wUmVnaXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbW1U
ZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgaWYgKGNvbmQgPT0gWmVybykKKyAgICAgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5zbHRpdShkZXN0LCBjbXBUZW1wUmVnaXN0ZXIsIDEpOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdHUoZGVzdCwgTUlQU1Jl
Z2lzdGVyczo6emVybywgY21wVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IERhdGFMYWJlbDMyIG1vdmVXaXRoUGF0Y2goSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICBtX2ZpeGVkV2lkdGggPSB0cnVlOworICAgICAgICBEYXRhTGFiZWwzMiBs
YWJlbCh0aGlzKTsKKyAgICAgICAgbW92ZShpbW0sIGRlc3QpOworICAgICAgICBtX2ZpeGVkV2lk
dGggPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGxhYmVsOworICAgIH0KKworICAgIERhdGFMYWJl
bFB0ciBtb3ZlV2l0aFBhdGNoKEltbVB0ciBpbml0aWFsVmFsdWUsIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIG1fZml4ZWRXaWR0aCA9IHRydWU7CisgICAgICAgIERhdGFMYWJlbFB0
ciBsYWJlbCh0aGlzKTsKKyAgICAgICAgbW92ZShpbml0aWFsVmFsdWUsIGRlc3QpOworICAgICAg
ICBtX2ZpeGVkV2lkdGggPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGxhYmVsOworICAgIH0KKwor
ICAgIEp1bXAgYnJhbmNoUHRyV2l0aFBhdGNoKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxl
ZnQsIERhdGFMYWJlbFB0ciYgZGF0YUxhYmVsLCBJbW1QdHIgaW5pdGlhbFJpZ2h0VmFsdWUgPSBJ
bW1QdHIoMCkpCisgICAgeworICAgICAgICBtX2ZpeGVkV2lkdGggPSB0cnVlOworICAgICAgICBk
YXRhTGFiZWwgPSBtb3ZlV2l0aFBhdGNoKGluaXRpYWxSaWdodFZhbHVlLCBpbW1UZW1wUmVnaXN0
ZXIpOworICAgICAgICBKdW1wIHRlbXAgPSBicmFuY2gzMihjb25kLCBsZWZ0LCBpbW1UZW1wUmVn
aXN0ZXIpOworICAgICAgICBtX2ZpeGVkV2lkdGggPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRl
bXA7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hQdHJXaXRoUGF0Y2goQ29uZGl0aW9uIGNvbmQs
IEFkZHJlc3MgbGVmdCwgRGF0YUxhYmVsUHRyJiBkYXRhTGFiZWwsIEltbVB0ciBpbml0aWFsUmln
aHRWYWx1ZSA9IEltbVB0cigwKSkKKyAgICB7CisgICAgICAgIG1fZml4ZWRXaWR0aCA9IHRydWU7
CisgICAgICAgIGxvYWQzMihsZWZ0LCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgZGF0YUxh
YmVsID0gbW92ZVdpdGhQYXRjaChpbml0aWFsUmlnaHRWYWx1ZSwgaW1tVGVtcFJlZ2lzdGVyKTsK
KyAgICAgICAgSnVtcCB0ZW1wID0gYnJhbmNoMzIoY29uZCwgZGF0YVRlbXBSZWdpc3RlciwgaW1t
VGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgbV9maXhlZFdpZHRoID0gZmFsc2U7CisgICAgICAgIHJl
dHVybiB0ZW1wOworICAgIH0KKworICAgIERhdGFMYWJlbFB0ciBzdG9yZVB0cldpdGhQYXRjaChJ
bW1QdHIgaW5pdGlhbFZhbHVlLCBJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAg
ICAgIG1fZml4ZWRXaWR0aCA9IHRydWU7CisgICAgICAgIERhdGFMYWJlbFB0ciBkYXRhTGFiZWwg
PSBtb3ZlV2l0aFBhdGNoKGluaXRpYWxWYWx1ZSwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAg
IHN0b3JlMzIoZGF0YVRlbXBSZWdpc3RlciwgYWRkcmVzcyk7CisgICAgICAgIG1fZml4ZWRXaWR0
aCA9IGZhbHNlOworICAgICAgICByZXR1cm4gZGF0YUxhYmVsOworICAgIH0KKworICAgIERhdGFM
YWJlbFB0ciBzdG9yZVB0cldpdGhQYXRjaChJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcykKKyAgICB7
CisgICAgICAgIHJldHVybiBzdG9yZVB0cldpdGhQYXRjaChJbW1QdHIoMCksIGFkZHJlc3MpOwor
ICAgIH0KKworICAgIENhbGwgdGFpbFJlY3Vyc2l2ZUNhbGwoKQorICAgIHsKKyAgICAgICAgLy8g
TGlrZSBhIG5vcm1hbCBjYWxsLCBidXQgZG9uJ3QgdXBkYXRlIHRoZSByZXR1cm5lZCBhZGRyZXNz
IHJlZ2lzdGVyCisgICAgICAgIG1fZml4ZWRXaWR0aCA9IHRydWU7CisgICAgICAgIG1vdmUoSW1t
MzIoMCksIE1JUFNSZWdpc3RlcnM6OnQ5KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuanIoTUlQU1Jl
Z2lzdGVyczo6dDkpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgbV9maXhl
ZFdpZHRoID0gZmFsc2U7CisgICAgICAgIHJldHVybiBDYWxsKG1fYXNzZW1ibGVyLm5ld0ptcFNy
YygpLCBDYWxsOjpMaW5rYWJsZSk7CisgICAgfQorCisgICAgQ2FsbCBtYWtlVGFpbFJlY3Vyc2l2
ZUNhbGwoSnVtcCBvbGRKdW1wKQorICAgIHsKKyAgICAgICAgb2xkSnVtcC5saW5rKHRoaXMpOwor
ICAgICAgICByZXR1cm4gdGFpbFJlY3Vyc2l2ZUNhbGwoKTsKKyAgICB9CisKKyAgICB2b2lkIGxv
YWREb3VibGUoSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAg
IHsKKyNpZiBfX21pcHMgPT0gMQorICAgICAgICAvKgorICAgICAgICAgICAgbGkgICAgICAgICAg
YWRkclRlbXAsIGFkZHJlc3Mub2Zmc2V0CisgICAgICAgICAgICBhZGR1ICAgICAgICBhZGRyVGVt
cCwgYWRkclRlbXAsIGJhc2UKKyAgICAgICAgICAgIGx3YzEgICAgICAgIGRlc3QsIDAoYWRkclRl
bXApCisgICAgICAgICAgICBsd2MxICAgICAgICBkZXN0KzEsIDQoYWRkclRlbXApCisgICAgICAg
ICAqLworICAgICAgICBtb3ZlKEltbTMyKGFkZHJlc3Mub2Zmc2V0KSwgYWRkclRlbXBSZWdpc3Rl
cik7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBS
ZWdpc3RlciwgYWRkcmVzcy5iYXNlKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubHdjMShkZXN0LCBh
ZGRyVGVtcFJlZ2lzdGVyLCAwKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubHdjMShGUFJlZ2lzdGVy
SUQoZGVzdCArIDEpLCBhZGRyVGVtcFJlZ2lzdGVyLCA0KTsKKyNlbHNlCisgICAgICAgIGlmIChh
ZGRyZXNzLm9mZnNldCA+PSAtMzI3NjggJiYgYWRkcmVzcy5vZmZzZXQgPD0gMzI3NjcKKyAgICAg
ICAgICAgICYmICFtX2ZpeGVkV2lkdGgpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxkYzEo
ZGVzdCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgIGx1aSAgICAgYWRkclRlbXAsIChvZmZzZXQg
KyAweDgwMDApID4+IDE2CisgICAgICAgICAgICAgICAgYWRkdSAgICBhZGRyVGVtcCwgYWRkclRl
bXAsIGJhc2UKKyAgICAgICAgICAgICAgICBsZGMxICAgIGRlc3QsIChvZmZzZXQgJiAweGZmZmYp
KGFkZHJUZW1wKQorICAgICAgICAgICAgICAqLworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHVp
KGFkZHJUZW1wUmVnaXN0ZXIsIChhZGRyZXNzLm9mZnNldCArIDB4ODAwMCkgPj4gMTYpOworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lz
dGVyLCBhZGRyZXNzLmJhc2UpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubGRjMShkZXN0LCBh
ZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAgIH0KKyNlbmRpZgorICAg
IH0KKworICAgIHZvaWQgc3RvcmVEb3VibGUoRlBSZWdpc3RlcklEIHNyYywgSW1wbGljaXRBZGRy
ZXNzIGFkZHJlc3MpCisgICAgeworI2lmIF9fbWlwcyA9PSAxCisgICAgICAgIC8qCisgICAgICAg
ICAgICBsaSAgICAgICAgICBhZGRyVGVtcCwgYWRkcmVzcy5vZmZzZXQKKyAgICAgICAgICAgIGFk
ZHUgICAgICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgYmFzZQorICAgICAgICAgICAgc3djMSAgICAg
ICAgZGVzdCwgMChhZGRyVGVtcCkKKyAgICAgICAgICAgIHN3YzEgICAgICAgIGRlc3QrMSwgNChh
ZGRyVGVtcCkKKyAgICAgICAgICovCisgICAgICAgIG1vdmUoSW1tMzIoYWRkcmVzcy5vZmZzZXQp
LCBhZGRyVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJl
Z2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UpOworICAgICAgICBtX2Fzc2Vt
Ymxlci5zd2MxKHNyYywgYWRkclRlbXBSZWdpc3RlciwgMCk7CisgICAgICAgIG1fYXNzZW1ibGVy
LnN3YzEoRlBSZWdpc3RlcklEKHNyYyArIDEpLCBhZGRyVGVtcFJlZ2lzdGVyLCA0KTsKKyNlbHNl
CisgICAgICAgIGlmIChhZGRyZXNzLm9mZnNldCA+PSAtMzI3NjggJiYgYWRkcmVzcy5vZmZzZXQg
PD0gMzI3NjcKKyAgICAgICAgICAgICYmICFtX2ZpeGVkV2lkdGgpCisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5zZGMxKHNyYywgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICBsdWkgICAgIGFkZHJUZW1w
LCAob2Zmc2V0ICsgMHg4MDAwKSA+PiAxNgorICAgICAgICAgICAgICAgIGFkZHUgICAgYWRkclRl
bXAsIGFkZHJUZW1wLCBiYXNlCisgICAgICAgICAgICAgICAgc2RjMSAgICBzcmMsIChvZmZzZXQg
JiAweGZmZmYpKGFkZHJUZW1wKQorICAgICAgICAgICAgICAqLworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIubHVpKGFkZHJUZW1wUmVnaXN0ZXIsIChhZGRyZXNzLm9mZnNldCArIDB4ODAwMCkgPj4g
MTYpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRy
VGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2Rj
MShzcmMsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgfQorI2Vu
ZGlmCisgICAgfQorCisgICAgdm9pZCBhZGREb3VibGUoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdp
c3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hZGRfZChkZXN0LCBkZXN0
LCBzcmMpOworICAgIH0KKworICAgIHZvaWQgYWRkRG91YmxlKEFkZHJlc3Mgc3JjLCBGUFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGxvYWREb3VibGUoc3JjLCBmcFRlbXBSZWdpc3Rl
cik7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZF9kKGRlc3QsIGRlc3QsIGZwVGVtcFJlZ2lzdGVy
KTsKKyAgICB9CisKKyAgICB2b2lkIHN1YkRvdWJsZShGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN1Yl9kKGRlc3QsIGRlc3Qs
IHNyYyk7CisgICAgfQorCisgICAgdm9pZCBzdWJEb3VibGUoQWRkcmVzcyBzcmMsIEZQUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbG9hZERvdWJsZShzcmMsIGZwVGVtcFJlZ2lzdGVy
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3ViX2QoZGVzdCwgZGVzdCwgZnBUZW1wUmVnaXN0ZXIp
OworICAgIH0KKworICAgIHZvaWQgbXVsRG91YmxlKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubXVsX2QoZGVzdCwgZGVzdCwg
c3JjKTsKKyAgICB9CisKKyAgICB2b2lkIG11bERvdWJsZShBZGRyZXNzIHNyYywgRlBSZWdpc3Rl
cklEIGRlc3QpCisgICAgeworICAgICAgICBsb2FkRG91YmxlKHNyYywgZnBUZW1wUmVnaXN0ZXIp
OworICAgICAgICBtX2Fzc2VtYmxlci5tdWxfZChkZXN0LCBkZXN0LCBmcFRlbXBSZWdpc3Rlcik7
CisgICAgfQorCisgICAgdm9pZCBjb252ZXJ0SW50MzJUb0RvdWJsZShSZWdpc3RlcklEIHNyYywg
RlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5tdGMxKHNyYywg
ZnBUZW1wUmVnaXN0ZXIpOworICAgICAgICBtX2Fzc2VtYmxlci5jdnRfZF93KGRlc3QsIGZwVGVt
cFJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICB2b2lkIGluc2VydFJlbGF4YXRpb25Xb3JkcygpCisg
ICAgeworICAgICAgICAvKiBXZSBuZWVkIGZvdXIgd29yZHMgZm9yIHJlbGF4YXRpb24uICovCisg
ICAgICAgIG1fYXNzZW1ibGVyLmJlcShNSVBTUmVnaXN0ZXJzOjp6ZXJvLCBNSVBTUmVnaXN0ZXJz
Ojp6ZXJvLCAzKTsgLy8gSnVtcCBvdmVyIG5vcHM7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgp
OworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7
CisgICAgfQorCisgICAgSnVtcCBicmFuY2hUcnVlKCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLmFwcGVuZEp1bXAoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYmMxdCgpOworICAgICAgICBt
X2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgaW5zZXJ0UmVsYXhhdGlvbldvcmRzKCk7CisgICAg
ICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLm5ld0ptcFNyYygpKTsKKyAgICB9CisKKyAgICBK
dW1wIGJyYW5jaEZhbHNlKCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFwcGVuZEp1bXAo
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYmMxZigpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3Ao
KTsKKyAgICAgICAgaW5zZXJ0UmVsYXhhdGlvbldvcmRzKCk7CisgICAgICAgIHJldHVybiBKdW1w
KG1fYXNzZW1ibGVyLm5ld0ptcFNyYygpKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaEVxdWFs
KFJlZ2lzdGVySUQgcnMsIFJlZ2lzdGVySUQgcnQpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5hcHBlbmRKdW1wKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmJlcShycywgcnQsIDApOworICAg
ICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgaW5zZXJ0UmVsYXhhdGlvbldvcmRzKCk7
CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLm5ld0ptcFNyYygpKTsKKyAgICB9CisK
KyAgICBKdW1wIGJyYW5jaE5vdEVxdWFsKFJlZ2lzdGVySUQgcnMsIFJlZ2lzdGVySUQgcnQpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hcHBlbmRKdW1wKCk7CisgICAgICAgIG1fYXNzZW1i
bGVyLmJuZShycywgcnQsIDApOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAg
aW5zZXJ0UmVsYXhhdGlvbldvcmRzKCk7CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVy
Lm5ld0ptcFNyYygpKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaERvdWJsZShEb3VibGVDb25k
aXRpb24gY29uZCwgRlBSZWdpc3RlcklEIGxlZnQsIEZQUmVnaXN0ZXJJRCByaWdodCkKKyAgICB7
CisgICAgICAgIGlmIChjb25kID09IERvdWJsZUVxdWFsKSB7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5jX2VxX2QobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUo
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29uZCA9PSBEb3VibGVOb3RFcXVhbCkgeworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuY19lcV9kKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIHJl
dHVybiBicmFuY2hGYWxzZSgpOyAvLyBmYWxzZQorICAgICAgICB9CisgICAgICAgIGlmIChjb25k
ID09IERvdWJsZUdyZWF0ZXJUaGFuKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jX25ndF9k
KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hGYWxzZSgpOyAvLyBmYWxz
ZQorICAgICAgICB9CisgICAgICAgIGlmIChjb25kID09IERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVh
bCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY19uZ2VfZChyaWdodCwgbGVmdCk7CisgICAg
ICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsgLy8gZmFsc2UKKyAgICAgICAgfQorICAgICAg
ICBpZiAoY29uZCA9PSBEb3VibGVMZXNzVGhhbikgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
Y19sdF9kKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gRG91YmxlTGVzc1RoYW5PckVxdWFsKSB7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5jX2xlX2QobGVmdCwgcmlnaHQpOworICAgICAgICAgICAg
cmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29uZCA9PSBEb3Vi
bGVFcXVhbE9yVW5vcmRlcmVkKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jX3VlcV9kKGxl
ZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKGNvbmQgPT0gRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCkgeworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuY19vbGVfZChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBy
ZXR1cm4gYnJhbmNoRmFsc2UoKTsgLy8gZmFsc2UKKyAgICAgICAgfQorICAgICAgICBpZiAoY29u
ZCA9PSBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCkgeworICAgICAgICAgICAg
bV9hc3NlbWJsZXIuY19vbHRfZChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICByZXR1cm4gYnJh
bmNoRmFsc2UoKTsgLy8gZmFsc2UKKyAgICAgICAgfQorICAgICAgICBpZiAoY29uZCA9PSBEb3Vi
bGVMZXNzVGhhbk9yVW5vcmRlcmVkKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jX3VsdF9k
KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKGNvbmQgPT0gRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQp
IHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNfdWxlX2QobGVmdCwgcmlnaHQpOworICAgICAg
ICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQoMCk7
CisKKyAgICAgICAgcmV0dXJuIEp1bXAoKTsKKyAgICB9CisKKyAgICAvLyBUcnVuY2F0ZXMgJ3Ny
YycgdG8gYW4gaW50ZWdlciwgYW5kIHBsYWNlcyB0aGUgcmVzdWx0aW5nICdkZXN0Jy4KKyAgICAv
LyBJZiB0aGUgcmVzdWx0IGlzIG5vdCByZXByZXNlbnRhYmxlIGFzIGEgMzIgYml0IHZhbHVlLCBi
cmFuY2guCisgICAgLy8gTWF5IGFsc28gYnJhbmNoIGZvciBzb21lIHZhbHVlcyB0aGF0IGFyZSBy
ZXByZXNlbnRhYmxlIGluIDMyIGJpdHMKKyAgICAvLyAoc3BlY2lmaWNhbGx5LCBpbiB0aGlzIGNh
c2UsIElOVF9NQVggMHg3ZmZmZmZmZikuCisgICAgSnVtcCBicmFuY2hUcnVuY2F0ZURvdWJsZVRv
SW50MzIoRlBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIudHJ1bmNfd19kKGZwVGVtcFJlZ2lzdGVyLHNyYyk7CisgICAgICAgIG1fYXNz
ZW1ibGVyLm1mYzEoZGVzdCwgZnBUZW1wUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNo
MzIoRXF1YWwsIGRlc3QsIEltbTMyKDB4N2ZmZmZmZmYpKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgLy8gSWYgbV9maXhlZFdpZHRoIGlzIHRydWUsIHdlIHdpbGwgZ2VuZXJhdGUgYSBmaXhlZCBu
dW1iZXIgb2YgaW5zdHJ1Y3Rpb25zLgorICAgIC8vIE90aGVyd2lzZSwgd2UgY2FuIGVtaXQgYW55
IG51bWJlciBvZiBpbnN0cnVjdGlvbnMuCisgICAgYm9vbCBtX2ZpeGVkV2lkdGg7CisKKyAgICBm
cmllbmQgY2xhc3MgTGlua0J1ZmZlcjsKKyAgICBmcmllbmQgY2xhc3MgUmVwYXRjaEJ1ZmZlcjsK
KworICAgIHN0YXRpYyB2b2lkIGxpbmtDYWxsKHZvaWQqIGNvZGUsIENhbGwgY2FsbCwgRnVuY3Rp
b25QdHIgZnVuY3Rpb24pCisgICAgeworICAgICAgICBNSVBTQXNzZW1ibGVyOjpsaW5rQ2FsbChj
b2RlLCBjYWxsLm1fam1wLCBmdW5jdGlvbi52YWx1ZSgpKTsKKyAgICB9CisKKyAgICBzdGF0aWMg
dm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsIGNhbGwsIENvZGVMb2NhdGlvbkxhYmVs
IGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAgICAgTUlQU0Fzc2VtYmxlcjo6cmVsaW5rQ2FsbChj
YWxsLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsIGNhbGws
IEZ1bmN0aW9uUHRyIGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAgICAgTUlQU0Fzc2VtYmxlcjo6
cmVsaW5rQ2FsbChjYWxsLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRk
cmVzcygpKTsKKyAgICB9CisKK307CisKK30KKworI2VuZGlmCisKKyNlbmRpZiAvLyBNYWNyb0Fz
c2VtYmxlck1JUFNfaApJbmRleDogaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCShyZXZpc2lvbiA1MTU1MikKKysrIGppdC9F
eGVjdXRhYmxlQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDEwIEBACiAj
aW5jbHVkZSA8ZTMyc3RkLmg+CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKE1JUFMpICYmIFBMQVRG
T1JNKExJTlVYKQorI2luY2x1ZGUgPHN5cy9jYWNoZWN0bC5oPgorI2VuZGlmCisKICNkZWZpbmUg
SklUX0FMTE9DQVRPUl9QQUdFX1NJWkUgKEV4ZWN1dGFibGVBbGxvY2F0b3I6OnBhZ2VTaXplKQog
I2RlZmluZSBKSVRfQUxMT0NBVE9SX0xBUkdFX0FMTE9DX1NJWkUgKEV4ZWN1dGFibGVBbGxvY2F0
b3I6OnBhZ2VTaXplICogNCkKIApAQCAtMTgzLDYgKzE4NywzMiBAQAogICAgIHN0YXRpYyB2b2lk
IGNhY2hlRmx1c2godm9pZCosIHNpemVfdCkKICAgICB7CiAgICAgfQorI2VsaWYgUExBVEZPUk0o
TUlQUykKKyAgICBzdGF0aWMgdm9pZCBjYWNoZUZsdXNoKHZvaWQqIGNvZGUsIHNpemVfdCBzaXpl
KQorICAgIHsKKyNpZiBDT01QSUxFUihHQ0MpICYmIChHQ0NfVkVSU0lPTiA+PSA0MDMwMCkKKyNp
ZiBfX21pcHNfaXNhX3JldiA9PSAyICYmIChHQ0NfVkVSU0lPTiA8IDQwNDAzKQorICAgICAgICBp
bnQgbGluZV9zaXplOworICAgICAgICBhc20gKCJyZGh3ciAlMCwgJDEiIDogIj1yIiAobGluZV9z
aXplKSk7CisgICAgICAgIC8vCisgICAgICAgIC8vIE1vZGlmeSAic3RhcnQiIGFuZCAiZW5kIiB0
byBhdm9pZCBHQ0MgNC4zLjAtNC40LjIgYnVnIGluCisgICAgICAgIC8vIG1pcHNfZXhwYW5kX3N5
bmNpX2xvb3AgdGhhdCBtYXkgZXhlY3V0ZSBzeW5jaSBvbmUgbW9yZSB0aW1lLgorICAgICAgICAv
LyAic3RhcnQiIHBvaW50cyB0byB0aGUgZmlzcnQgYnl0ZSBvZiB0aGUgY2FjaGUgbGluZS4KKyAg
ICAgICAgLy8gImVuZCIgcG9pbnRzIHRvIHRoZSBsYXN0IGJ5dGUgb2YgdGhlIGxpbmUgYmVmb3Jl
IHRoZSBsYXN0IGNhY2hlIGxpbmUuCisgICAgICAgIC8vIEJlY2F1c2Ugc2l6ZSBpcyBhbHdheXMg
YSBtdWx0aXBsZSBvZiA0LCB0aGlzIGlzIHNhZmUgdG8gc2V0CisgICAgICAgIC8vICJlbmQiIHRv
IHRoZSBsYXN0IGJ5dGUuCisgICAgICAgIC8vCisgICAgICAgIGludHB0cl90IHN0YXJ0ID0gcmVp
bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oY29kZSkgJiAoLWxpbmVfc2l6ZSk7CisgICAgICAgIGlu
dHB0cl90IGVuZCA9ICgocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oY29kZSkgKyBzaXplIC0g
MSkgJiAoLWxpbmVfc2l6ZSkpIC0gMTsKKyAgICAgICAgX19jbGVhcl9jYWNoZShyZWludGVycHJl
dF9jYXN0PGNoYXIqPihzdGFydCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGVuZCkpOworI2Vs
c2UKKyAgICAgICAgaW50cHRyX3QgZW5kID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oY29k
ZSkgKyBzaXplOworICAgICAgICBfX2NsZWFyX2NhY2hlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KGNvZGUpLCByZWludGVycHJldF9jYXN0PGNoYXIqPihlbmQpKTsKKyNlbmRpZgorI2Vsc2UKKyAg
ICAgICAgX2ZsdXNoX2NhY2hlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvZGUpLCBzaXplLCBC
Q0FDSEUpOworI2VuZGlmCisgICAgfQogI2VsaWYgUExBVEZPUk0oQVJNX1RIVU1CMikgJiYgUExB
VEZPUk0oSVBIT05FKQogICAgIHN0YXRpYyB2b2lkIGNhY2hlRmx1c2godm9pZCogY29kZSwgc2l6
ZV90IHNpemUpCiAgICAgewo=
</data>
<flag name="commit-queue"
          id="30435"
          type_id="3"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47887</attachid>
            <date>2010-02-01 17:20:39 -0800</date>
            <delta_ts>2010-02-25 17:14:09 -0800</delta_ts>
            <desc>MIPS JIT Patch 20100201</desc>
            <filename>mips_jit20100201.diff</filename>
            <type>text/plain</type>
            <size>117515</size>
            <attacher name="Chao-ying Fu">fu</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDU0MTc5KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTg1IEBACisyMDEwLTAyLTAxICBDaGFvLXlp
bmcgRnUgIDxmdUBtaXBzLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBNSVBTIEpJVCBTdXBwb3J0cworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzAxNDQKKworICAgICAgICBUaGUgZm9sbG93aW5nIGNo
YW5nZXMgYXJlIGZvciBNSVBTIEpJVC4KKworICAgICAgICAqIGFzc2VtYmxlci9BYnN0cmFjdE1h
Y3JvQXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6Oklt
bTMyOjpJbW0zMik6CisgICAgICAgICogYXNzZW1ibGVyL01JUFNBc3NlbWJsZXIuaDogQWRkZWQu
CisgICAgICAgIChKU0M6Ok1JUFNSZWdpc3RlcnM6Oik6CisgICAgICAgIChKU0M6Ok1JUFNBc3Nl
bWJsZXI6Ok1JUFNBc3NlbWJsZXIpOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjopOgor
ICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpKbXBTcmM6OkptcFNyYyk6CisgICAgICAgIChK
U0M6Ok1JUFNBc3NlbWJsZXI6OkptcERzdDo6Sm1wRHN0KToKKyAgICAgICAgKEpTQzo6TUlQU0Fz
c2VtYmxlcjo6Sm1wRHN0Ojppc1VzZWQpOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpK
bXBEc3Q6OnVzZWQpOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjplbWl0SW5zdCk6Cisg
ICAgICAgIChKU0M6Ok1JUFNBc3NlbWJsZXI6Om5vcCk6CisgICAgICAgIChKU0M6Ok1JUFNBc3Nl
bWJsZXI6OmxvYWREZWxheU5vcCk6CisgICAgICAgIChKU0M6Ok1JUFNBc3NlbWJsZXI6OmNvcERl
bGF5Tm9wKToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6bW92ZSk6CisgICAgICAgIChK
U0M6Ok1JUFNBc3NlbWJsZXI6OmxpKToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6bHVp
KToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6YWRkaXUpOgorICAgICAgICAoSlNDOjpN
SVBTQXNzZW1ibGVyOjphZGR1KToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6c3VidSk6
CisgICAgICAgIChKU0M6Ok1JUFNBc3NlbWJsZXI6Om11bHQpOgorICAgICAgICAoSlNDOjpNSVBT
QXNzZW1ibGVyOjptZmhpKToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6bWZsbyk6Cisg
ICAgICAgIChKU0M6Ok1JUFNBc3NlbWJsZXI6Om11bCk6CisgICAgICAgIChKU0M6Ok1JUFNBc3Nl
bWJsZXI6OmFuZF9pbnNuKToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6YW5kaSk6Cisg
ICAgICAgIChKU0M6Ok1JUFNBc3NlbWJsZXI6Om5vcik6CisgICAgICAgIChKU0M6Ok1JUFNBc3Nl
bWJsZXI6Om9yX2luc24pOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpvcmkpOgorICAg
ICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjp4b3JfaW5zbik6CisgICAgICAgIChKU0M6Ok1JUFNB
c3NlbWJsZXI6OnhvcmkpOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpzbHQpOgorICAg
ICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpzbHR1KToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2Vt
Ymxlcjo6c2x0aXUpOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpzbGwpOgorICAgICAg
ICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpzbGx2KToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxl
cjo6c3JhKToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6c3Jhdik6CisgICAgICAgIChK
U0M6Ok1JUFNBc3NlbWJsZXI6Omx3KToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6bHds
KToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6bHdyKToKKyAgICAgICAgKEpTQzo6TUlQ
U0Fzc2VtYmxlcjo6bGh1KToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6c3cpOgorICAg
ICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpqcik6CisgICAgICAgIChKU0M6Ok1JUFNBc3NlbWJs
ZXI6OmphbHIpOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpqYWwpOgorICAgICAgICAo
SlNDOjpNSVBTQXNzZW1ibGVyOjpia3B0KToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6
Ymdleik6CisgICAgICAgIChKU0M6Ok1JUFNBc3NlbWJsZXI6OmJsdHopOgorICAgICAgICAoSlND
OjpNSVBTQXNzZW1ibGVyOjpiZXEpOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpibmUp
OgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpiYzF0KToKKyAgICAgICAgKEpTQzo6TUlQ
U0Fzc2VtYmxlcjo6YmMxZik6CisgICAgICAgIChKU0M6Ok1JUFNBc3NlbWJsZXI6Om5ld0ptcFNy
Yyk6CisgICAgICAgIChKU0M6Ok1JUFNBc3NlbWJsZXI6OmFwcGVuZEp1bXApOgorICAgICAgICAo
SlNDOjpNSVBTQXNzZW1ibGVyOjphZGRfZCk6CisgICAgICAgIChKU0M6Ok1JUFNBc3NlbWJsZXI6
OnN1Yl9kKToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6bXVsX2QpOgorICAgICAgICAo
SlNDOjpNSVBTQXNzZW1ibGVyOjpsd2MxKToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6
bGRjMSk6CisgICAgICAgIChKU0M6Ok1JUFNBc3NlbWJsZXI6OnN3YzEpOgorICAgICAgICAoSlND
OjpNSVBTQXNzZW1ibGVyOjpzZGMxKToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6bXRj
MSk6CisgICAgICAgIChKU0M6Ok1JUFNBc3NlbWJsZXI6Om1mYzEpOgorICAgICAgICAoSlNDOjpN
SVBTQXNzZW1ibGVyOjp0cnVuY193X2QpOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpj
dnRfZF93KToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6Y19lcV9kKToKKyAgICAgICAg
KEpTQzo6TUlQU0Fzc2VtYmxlcjo6Y19uZ3RfZCk6CisgICAgICAgIChKU0M6Ok1JUFNBc3NlbWJs
ZXI6OmNfbmdlX2QpOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpjX2x0X2QpOgorICAg
ICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpjX2xlX2QpOgorICAgICAgICAoSlNDOjpNSVBTQXNz
ZW1ibGVyOjpjX3VlcV9kKToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6Y19vbGVfZCk6
CisgICAgICAgIChKU0M6Ok1JUFNBc3NlbWJsZXI6OmNfb2x0X2QpOgorICAgICAgICAoSlNDOjpN
SVBTQXNzZW1ibGVyOjpjX3VsZV9kKToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6Y191
bHRfZCk6CisgICAgICAgIChKU0M6Ok1JUFNBc3NlbWJsZXI6OmxhYmVsKToKKyAgICAgICAgKEpT
Qzo6TUlQU0Fzc2VtYmxlcjo6YWxpZ24pOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpn
ZXRSZWxvY2F0ZWRBZGRyZXNzKToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6Z2V0RGlm
ZmVyZW5jZUJldHdlZW5MYWJlbHMpOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpzaXpl
KToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6ZXhlY3V0YWJsZUNvcHkpOgorICAgICAg
ICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpnZXRDYWxsUmV0dXJuT2Zmc2V0KToKKyAgICAgICAgKEpT
Qzo6TUlQU0Fzc2VtYmxlcjo6bGlua0p1bXApOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVy
OjpsaW5rQ2FsbCk6CisgICAgICAgIChKU0M6Ok1JUFNBc3NlbWJsZXI6OmxpbmtQb2ludGVyKToK
KyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6cmVsaW5rSnVtcCk6CisgICAgICAgIChKU0M6
Ok1JUFNBc3NlbWJsZXI6OnJlbGlua0NhbGwpOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVy
OjpyZXBhdGNoSW50MzIpOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpyZXBhdGNoUG9p
bnRlcik6CisgICAgICAgIChKU0M6Ok1JUFNBc3NlbWJsZXI6OnJlcGF0Y2hMb2FkUHRyVG9MRUEp
OgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpyZWxvY2F0ZUp1bXBzKToKKyAgICAgICAg
KEpTQzo6TUlQU0Fzc2VtYmxlcjo6bGlua1dpdGhPZmZzZXQpOgorICAgICAgICAoSlNDOjpNSVBT
QXNzZW1ibGVyOjpsaW5rQ2FsbEludGVybmFsKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXIuaDoKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1JUFM6Ok1hY3JvQXNzZW1ibGVyTUlQ
Uyk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6KToKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJNSVBTOjphZGQzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVy
TUlQUzo6YW5kMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1JUFM6OmxzaGlmdDMy
KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjptdWwzMik6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6bm90MzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
Ymxlck1JUFM6Om9yMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1JUFM6OnJzaGlm
dDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjpzdWIzMik6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6eG9yMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fz
c2VtYmxlck1JUFM6OmxvYWQzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6
bG9hZDMyV2l0aFVuYWxpZ25lZEhhbGZXb3Jkcyk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyTUlQUzo6bG9hZDMyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaCk6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyTUlQUzo6bG9hZFB0cldpdGhQYXRjaFRvTEVBKToKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJNSVBTOjpsb2FkUHRyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaCk6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6bG9hZDE2KToKKyAgICAgICAgKEpTQzo6TWFj
cm9Bc3NlbWJsZXJNSVBTOjpzdG9yZTMyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaCk6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6c3RvcmUzMik6CisgICAgICAgIChKU0M6Ok1hY3Jv
QXNzZW1ibGVyTUlQUzo6c3VwcG9ydHNGbG9hdGluZ1BvaW50KToKKyAgICAgICAgKEpTQzo6TWFj
cm9Bc3NlbWJsZXJNSVBTOjpzdXBwb3J0c0Zsb2F0aW5nUG9pbnRUcnVuY2F0ZSk6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6cG9wKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJNSVBTOjpwdXNoKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjptb3Zl
KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjpzd2FwKToKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjpzaWduRXh0ZW5kMzJUb1B0cik6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyTUlQUzo6emVyb0V4dGVuZDMyVG9QdHIpOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlck1JUFM6OmJyYW5jaDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJNSVBTOjpicmFuY2gzMldpdGhVbmFsaWduZWRIYWxmV29yZHMpOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlck1JUFM6OmJyYW5jaDE2KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJNSVBTOjpicmFuY2hUZXN0MzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1JUFM6
Omp1bXApOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1JUFM6OmJyYW5jaEFkZDMyKToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjpicmFuY2hNdWwzMik6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6YnJhbmNoU3ViMzIpOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlck1JUFM6OmJyZWFrcG9pbnQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
Ymxlck1JUFM6Om5lYXJDYWxsKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjpj
YWxsKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjpyZXQpOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlck1JUFM6OnNldDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJNSVBTOjpzZXRUZXN0MzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1JUFM6
Om1vdmVXaXRoUGF0Y2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1JUFM6OmJyYW5j
aFB0cldpdGhQYXRjaCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6c3RvcmVQ
dHJXaXRoUGF0Y2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1JUFM6OnRhaWxSZWN1
cnNpdmVDYWxsKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjptYWtlVGFpbFJl
Y3Vyc2l2ZUNhbGwpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1JUFM6OmxvYWREb3Vi
bGUpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1JUFM6OnN0b3JlRG91YmxlKToKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjphZGREb3VibGUpOgorICAgICAgICAoSlND
OjpNYWNyb0Fzc2VtYmxlck1JUFM6OnN1YkRvdWJsZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyTUlQUzo6bXVsRG91YmxlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBT
Ojpjb252ZXJ0SW50MzJUb0RvdWJsZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQ
Uzo6aW5zZXJ0UmVsYXhhdGlvbldvcmRzKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJN
SVBTOjpicmFuY2hUcnVlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjpicmFu
Y2hGYWxzZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6YnJhbmNoRXF1YWwp
OgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1JUFM6OmJyYW5jaE5vdEVxdWFsKToKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjpicmFuY2hEb3VibGUpOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlck1JUFM6OmJyYW5jaFRydW5jYXRlRG91YmxlVG9JbnQzMik6Cisg
ICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6bGlua0NhbGwpOgorICAgICAgICAoSlND
OjpNYWNyb0Fzc2VtYmxlck1JUFM6OnJlcGF0Y2hDYWxsKToKKyAgICAgICAgKiBqaXQvRXhlY3V0
YWJsZUFsbG9jYXRvci5oOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpjYWNo
ZUZsdXNoKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVElubGluZU1l
dGhvZHMuaDoKKyAgICAgICAgKEpTQzo6SklUOjpwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNh
bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJu
KToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgICogaml0L0pJVFN0dWJz
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpKSVRUaHVua3MpOgorICAgICAgICAqIGpp
dC9KSVRTdHVicy5oOgorICAgICAgICAoSlNDOjpKSVRTdGFja0ZyYW1lOjpyZXR1cm5BZGRyZXNz
U2xvdCk6CisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6CisgICAgICAgICogeWFyci9SZWdleEpJ
VC5jcHA6CisgICAgICAgIChKU0M6OllhcnI6OlJlZ2V4R2VuZXJhdG9yOjpnZW5lcmF0ZUVudGVy
KToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OmdlbmVyYXRlUmV0dXJuKToK
KwogMjAxMC0wMi0wMSAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAcGFyb2dhLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gNTQxNDAp
CisrKyBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzMsNyArMTczLDcgQEAgcHVibGljOgogICAgIHN0cnVjdCBJbW0z
MiB7CiAgICAgICAgIGV4cGxpY2l0IEltbTMyKGludDMyX3QgdmFsdWUpCiAgICAgICAgICAgICA6
IG1fdmFsdWUodmFsdWUpCi0jaWYgQ1BVKEFSTSkKKyNpZiBDUFUoQVJNKSB8fCBDUFUoTUlQUykK
ICAgICAgICAgICAgICwgbV9pc1BvaW50ZXIoZmFsc2UpCiAjZW5kaWYKICAgICAgICAgewpAQCAt
MTgyLDcgKzE4Miw3IEBAIHB1YmxpYzoKICNpZiAhQ1BVKFg4Nl82NCkKICAgICAgICAgZXhwbGlj
aXQgSW1tMzIoSW1tUHRyIHB0cikKICAgICAgICAgICAgIDogbV92YWx1ZShwdHIuYXNJbnRwdHIo
KSkKLSNpZiBDUFUoQVJNKQorI2lmIENQVShBUk0pIHx8IENQVShNSVBTKQogICAgICAgICAgICAg
LCBtX2lzUG9pbnRlcih0cnVlKQogI2VuZGlmCiAgICAgICAgIHsKQEAgLTE5MCwxMyArMTkwLDE0
IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgICAgIGludDMyX3QgbV92YWx1ZTsKLSNpZiBDUFUo
QVJNKQorI2lmIENQVShBUk0pIHx8IENQVShNSVBTKQogICAgICAgICAvLyBXZSByZWx5IG9uIGJl
aW5nIGFibGUgdG8gcmVnZW5lcmF0ZSBjb2RlIHRvIHJlY292ZXIgZXhjZXB0aW9uIGhhbmRsaW5n
CiAgICAgICAgIC8vIGluZm9ybWF0aW9uLiAgU2luY2UgQVJNdjcgc3VwcG9ydHMgMTYtYml0IGlt
bWVkaWF0ZXMgdGhlcmUgaXMgYSBkYW5nZXIKICAgICAgICAgLy8gdGhhdCBpZiBwb2ludGVyIHZh
bHVlcyBjaGFuZ2UgdGhlIGxheW91dCBvZiB0aGUgZ2VuZXJhdGVkIGNvZGUgd2lsbCBjaGFuZ2Uu
CiAgICAgICAgIC8vIFRvIGF2b2lkIHRoaXMgcHJvYmxlbSwgYWx3YXlzIGdlbmVyYXRlIHBvaW50
ZXJzIChhbmQgdGh1cyBJbW0zMnMgY29uc3RydWN0ZWQKICAgICAgICAgLy8gZnJvbSBJbW1QdHJz
KSB3aXRoIGEgY29kZSBzZXF1ZW5jZSB0aGF0IGlzIGFibGUgIHRvIHJlcHJlc2VudCAgYW55IHBv
aW50ZXIKICAgICAgICAgLy8gdmFsdWUgLSBkb24ndCB1c2UgYSBtb3JlIGNvbXBhY3QgZm9ybSBp
biB0aGVzZSBjYXNlcy4KKyAgICAgICAgLy8gU2FtZSBmb3IgTUlQUy4KICAgICAgICAgYm9vbCBt
X2lzUG9pbnRlcjsKICNlbmRpZgogICAgIH07CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTUlQU0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NSVBTQXNzZW1ibGVyLmgJKHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTUlQU0Fzc2VtYmxlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk0MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIE1JUFMgVEVDSE5PTE9HSUVTLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgTUlQUyBURUNITk9MT0dJRVMsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE1JUFNBc3NlbWJsZXJfaAor
I2RlZmluZSBNSVBTQXNzZW1ibGVyX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorI2lu
Y2x1ZGUgPHd0Zi9TZWdtZW50ZWRWZWN0b3IuaD4KKworI2lmIEVOQUJMRShBU1NFTUJMRVIpICYm
IENQVShNSVBTKQorCisjaW5jbHVkZSAiQXNzZW1ibGVyQnVmZmVyLmgiCisjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3R5cGVkZWYgdWludDMyX3QgTUlQ
U1dvcmQ7CisKK25hbWVzcGFjZSBNSVBTUmVnaXN0ZXJzIHsKKyAgICB0eXBlZGVmIGVudW0gewor
ICAgICAgICByMCA9IDAsCisgICAgICAgIHIxLAorICAgICAgICByMiwKKyAgICAgICAgcjMsCisg
ICAgICAgIHI0LAorICAgICAgICByNSwKKyAgICAgICAgcjYsCisgICAgICAgIHI3LAorICAgICAg
ICByOCwKKyAgICAgICAgcjksCisgICAgICAgIHIxMCwKKyAgICAgICAgcjExLAorICAgICAgICBy
MTIsCisgICAgICAgIHIxMywKKyAgICAgICAgcjE0LAorICAgICAgICByMTUsCisgICAgICAgIHIx
NiwKKyAgICAgICAgcjE3LAorICAgICAgICByMTgsCisgICAgICAgIHIxOSwKKyAgICAgICAgcjIw
LAorICAgICAgICByMjEsCisgICAgICAgIHIyMiwKKyAgICAgICAgcjIzLAorICAgICAgICByMjQs
CisgICAgICAgIHIyNSwKKyAgICAgICAgcjI2LAorICAgICAgICByMjcsCisgICAgICAgIHIyOCwK
KyAgICAgICAgcjI5LAorICAgICAgICByMzAsCisgICAgICAgIHIzMSwKKyAgICAgICAgemVybyA9
IHIwLAorICAgICAgICBhdCA9IHIxLAorICAgICAgICB2MCA9IHIyLAorICAgICAgICB2MSA9IHIz
LAorICAgICAgICBhMCA9IHI0LAorICAgICAgICBhMSA9IHI1LAorICAgICAgICBhMiA9IHI2LAor
ICAgICAgICBhMyA9IHI3LAorICAgICAgICB0MCA9IHI4LAorICAgICAgICB0MSA9IHI5LAorICAg
ICAgICB0MiA9IHIxMCwKKyAgICAgICAgdDMgPSByMTEsCisgICAgICAgIHQ0ID0gcjEyLAorICAg
ICAgICB0NSA9IHIxMywKKyAgICAgICAgdDYgPSByMTQsCisgICAgICAgIHQ3ID0gcjE1LAorICAg
ICAgICBzMCA9IHIxNiwKKyAgICAgICAgczEgPSByMTcsCisgICAgICAgIHMyID0gcjE4LAorICAg
ICAgICBzMyA9IHIxOSwKKyAgICAgICAgczQgPSByMjAsCisgICAgICAgIHM1ID0gcjIxLAorICAg
ICAgICBzNiA9IHIyMiwKKyAgICAgICAgczcgPSByMjMsCisgICAgICAgIHQ4ID0gcjI0LAorICAg
ICAgICB0OSA9IHIyNSwKKyAgICAgICAgazAgPSByMjYsCisgICAgICAgIGsxID0gcjI3LAorICAg
ICAgICBncCA9IHIyOCwKKyAgICAgICAgc3AgPSByMjksCisgICAgICAgIGZwID0gcjMwLAorICAg
ICAgICByYSA9IHIzMQorICAgIH0gUmVnaXN0ZXJJRDsKKworICAgIHR5cGVkZWYgZW51bSB7Cisg
ICAgICAgIGYwLAorICAgICAgICBmMSwKKyAgICAgICAgZjIsCisgICAgICAgIGYzLAorICAgICAg
ICBmNCwKKyAgICAgICAgZjUsCisgICAgICAgIGY2LAorICAgICAgICBmNywKKyAgICAgICAgZjgs
CisgICAgICAgIGY5LAorICAgICAgICBmMTAsCisgICAgICAgIGYxMSwKKyAgICAgICAgZjEyLAor
ICAgICAgICBmMTMsCisgICAgICAgIGYxNCwKKyAgICAgICAgZjE1LAorICAgICAgICBmMTYsCisg
ICAgICAgIGYxNywKKyAgICAgICAgZjE4LAorICAgICAgICBmMTksCisgICAgICAgIGYyMCwKKyAg
ICAgICAgZjIxLAorICAgICAgICBmMjIsCisgICAgICAgIGYyMywKKyAgICAgICAgZjI0LAorICAg
ICAgICBmMjUsCisgICAgICAgIGYyNiwKKyAgICAgICAgZjI3LAorICAgICAgICBmMjgsCisgICAg
ICAgIGYyOSwKKyAgICAgICAgZjMwLAorICAgICAgICBmMzEKKyAgICB9IEZQUmVnaXN0ZXJJRDsK
KworfSAvLyBuYW1lc3BhY2UgTUlQU1JlZ2lzdGVycworCitjbGFzcyBNSVBTQXNzZW1ibGVyIHsK
K3B1YmxpYzoKKyAgICB0eXBlZGVmIE1JUFNSZWdpc3RlcnM6OlJlZ2lzdGVySUQgUmVnaXN0ZXJJ
RDsKKyAgICB0eXBlZGVmIE1JUFNSZWdpc3RlcnM6OkZQUmVnaXN0ZXJJRCBGUFJlZ2lzdGVySUQ7
CisgICAgdHlwZWRlZiBTZWdtZW50ZWRWZWN0b3I8aW50LCA2ND4gSnVtcHM7CisKKyAgICBNSVBT
QXNzZW1ibGVyKCkKKyAgICB7CisgICAgfQorCisgICAgLy8gTUlQUyBpbnN0cnVjdGlvbiBvcGNv
ZGUgZmllbGQgcG9zaXRpb24KKyAgICBlbnVtIHsKKyAgICAgICAgT1BfU0hfUkQgPSAxMSwKKyAg
ICAgICAgT1BfU0hfUlQgPSAxNiwKKyAgICAgICAgT1BfU0hfUlMgPSAyMSwKKyAgICAgICAgT1Bf
U0hfU0hBTVQgPSA2LAorICAgICAgICBPUF9TSF9DT0RFID0gMTYsCisgICAgICAgIE9QX1NIX0ZE
ID0gNiwKKyAgICAgICAgT1BfU0hfRlMgPSAxMSwKKyAgICAgICAgT1BfU0hfRlQgPSAxNgorICAg
IH07CisKKyAgICBjbGFzcyBKbXBTcmMgeworICAgICAgICBmcmllbmQgY2xhc3MgTUlQU0Fzc2Vt
YmxlcjsKKyAgICBwdWJsaWM6CisgICAgICAgIEptcFNyYygpCisgICAgICAgICAgICA6IG1fb2Zm
c2V0KC0xKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIEpt
cFNyYyhpbnQgb2Zmc2V0KQorICAgICAgICAgICAgOiBtX29mZnNldChvZmZzZXQpCisgICAgICAg
IHsKKyAgICAgICAgfQorCisgICAgICAgIGludCBtX29mZnNldDsKKyAgICB9OworCisgICAgY2xh
c3MgSm1wRHN0IHsKKyAgICAgICAgZnJpZW5kIGNsYXNzIE1JUFNBc3NlbWJsZXI7CisgICAgcHVi
bGljOgorICAgICAgICBKbXBEc3QoKQorICAgICAgICAgICAgOiBtX29mZnNldCgtMSkKKyAgICAg
ICAgICAgICwgbV91c2VkKGZhbHNlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBi
b29sIGlzVXNlZCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlZDsgfQorICAgICAgICB2b2lkIHVzZWQo
KSB7IG1fdXNlZCA9IHRydWU7IH0KKyAgICBwcml2YXRlOgorICAgICAgICBKbXBEc3QoaW50IG9m
ZnNldCkKKyAgICAgICAgICAgIDogbV9vZmZzZXQob2Zmc2V0KQorICAgICAgICAgICAgLCBtX3Vz
ZWQoZmFsc2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChtX29mZnNldCA9PSBvZmZz
ZXQpOworICAgICAgICB9CisKKyAgICAgICAgaW50IG1fb2Zmc2V0IDogMzE7CisgICAgICAgIGlu
dCBtX3VzZWQgOiAxOworICAgIH07CisKKyAgICB2b2lkIGVtaXRJbnN0KE1JUFNXb3JkIG9wKQor
ICAgIHsKKyAgICAgICAgdm9pZCogb2xkX2Jhc2UgPSBtX2J1ZmZlci5kYXRhKCk7CisKKyAgICAg
ICAgbV9idWZmZXIucHV0SW50KG9wKTsKKworICAgICAgICB2b2lkKiBuZXdfYmFzZSA9IG1fYnVm
ZmVyLmRhdGEoKTsKKyAgICAgICAgaWYgKG9sZF9iYXNlICE9IG5ld19iYXNlKSB7CisgICAgICAg
ICAgICByZWxvY2F0ZUp1bXBzKG9sZF9iYXNlLCBuZXdfYmFzZSk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICB2b2lkIG5vcCgpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDAwMDAwMDAwKTsK
KyAgICB9CisKKyAgICAvKiBOZWVkIHRvIGluc2VydCBvbmUgbG9hZCBkYXRhIGRlbGF5IG5vcCBm
b3IgbWlwczEuICAqLworICAgIHZvaWQgbG9hZERlbGF5Tm9wKCkKKyAgICB7CisjaWYgX19taXBz
ID09IDEKKyAgICAgICAgbm9wKCk7CisjZW5kaWYKKyAgICB9CisKKyAgICAvKiBOZWVkIHRvIGlu
c2VydCBvbmUgY29wcm9jZXNzb3IgYWNjZXNzIGRlbGF5IG5vcCBmb3IgbWlwczEuICAqLworICAg
IHZvaWQgY29wRGVsYXlOb3AoKQorICAgIHsKKyNpZiBfX21pcHMgPT0gMQorICAgICAgICBub3Ao
KTsKKyNlbmRpZgorICAgIH0KKworICAgIHZvaWQgbW92ZShSZWdpc3RlcklEIHJkLCBSZWdpc3Rl
cklEIHJzKQorICAgIHsKKyNpZiBkZWZpbmVkKF9BQklPMzIpCisgICAgICAgIC8qIGFkZHUgKi8K
KyAgICAgICAgZW1pdEluc3QoMHgwMDAwMDAyMSB8IChyZCA8PCBPUF9TSF9SRCkgfCAocnMgPDwg
T1BfU0hfUlMpKTsKKyNlbHNlCisgICAgICAgIC8qIGRhZGR1ICovCisgICAgICAgIGVtaXRJbnN0
KDB4MDAwMDAwMmQgfCAocmQgPDwgT1BfU0hfUkQpIHwgKHJzIDw8IE9QX1NIX1JTKSk7CisjZW5k
aWYKKyAgICB9CisKKyAgICAvKiBTZXQgYW4gaW1tZWRpYXRlIHZhbHVlIHRvIGEgcmVnaXN0ZXIu
ICBUaGlzIG1heSBnZW5lcmF0ZSAxIG9yIDIKKyAgICAgICBpbnN0cnVjdGlvbnMuICAqLworICAg
IHZvaWQgbGkoUmVnaXN0ZXJJRCBkZXN0LCBpbnQgaW1tKQorICAgIHsKKyAgICAgICAgaWYgKGlt
bSA+PSAtMzI3NjggJiYgaW1tIDw9IDMyNzY3KQorICAgICAgICAgICAgYWRkaXUoZGVzdCwgTUlQ
U1JlZ2lzdGVyczo6emVybywgaW1tKTsKKyAgICAgICAgZWxzZSBpZiAoaW1tID49IDAgJiYgaW1t
IDwgNjU1MzYpCisgICAgICAgICAgICBvcmkoZGVzdCwgTUlQU1JlZ2lzdGVyczo6emVybywgaW1t
KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBsdWkoZGVzdCwgaW1tID4+IDE2KTsKKyAg
ICAgICAgICAgIGlmIChpbW0gJiAweGZmZmYpCisgICAgICAgICAgICAgICAgb3JpKGRlc3QsIGRl
c3QsIGltbSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGx1aShSZWdpc3RlcklEIHJ0
LCBpbnQgaW1tKQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHgzYzAwMDAwMCB8IChydCA8PCBP
UF9TSF9SVCkgfCAoaW1tICYgMHhmZmZmKSk7CisgICAgfQorCisgICAgdm9pZCBhZGRpdShSZWdp
c3RlcklEIHJ0LCBSZWdpc3RlcklEIHJzLCBpbnQgaW1tKQorICAgIHsKKyAgICAgICAgZW1pdElu
c3QoMHgyNDAwMDAwMCB8IChydCA8PCBPUF9TSF9SVCkgfCAocnMgPDwgT1BfU0hfUlMpCisgICAg
ICAgICAgICAgICAgIHwgKGltbSAmIDB4ZmZmZikpOworICAgIH0KKworICAgIHZvaWQgYWRkdShS
ZWdpc3RlcklEIHJkLCBSZWdpc3RlcklEIHJzLCBSZWdpc3RlcklEIHJ0KQorICAgIHsKKyAgICAg
ICAgZW1pdEluc3QoMHgwMDAwMDAyMSB8IChyZCA8PCBPUF9TSF9SRCkgfCAocnMgPDwgT1BfU0hf
UlMpCisgICAgICAgICAgICAgICAgIHwgKHJ0IDw8IE9QX1NIX1JUKSk7CisgICAgfQorCisgICAg
dm9pZCBzdWJ1KFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcnMsIFJlZ2lzdGVySUQgcnQpCisg
ICAgeworICAgICAgICBlbWl0SW5zdCgweDAwMDAwMDIzIHwgKHJkIDw8IE9QX1NIX1JEKSB8IChy
cyA8PCBPUF9TSF9SUykKKyAgICAgICAgICAgICAgICAgfCAocnQgPDwgT1BfU0hfUlQpKTsKKyAg
ICB9CisKKyAgICB2b2lkIG11bHQoUmVnaXN0ZXJJRCBycywgUmVnaXN0ZXJJRCBydCkKKyAgICB7
CisgICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMTggfCAocnMgPDwgT1BfU0hfUlMpIHwgKHJ0IDw8
IE9QX1NIX1JUKSk7CisgICAgfQorCisgICAgdm9pZCBtZmhpKFJlZ2lzdGVySUQgcmQpCisgICAg
eworICAgICAgICBlbWl0SW5zdCgweDAwMDAwMDEwIHwgKHJkIDw8IE9QX1NIX1JEKSk7CisgICAg
fQorCisgICAgdm9pZCBtZmxvKFJlZ2lzdGVySUQgcmQpCisgICAgeworICAgICAgICBlbWl0SW5z
dCgweDAwMDAwMDEyIHwgKHJkIDw8IE9QX1NIX1JEKSk7CisgICAgfQorCisgICAgdm9pZCBtdWwo
UmVnaXN0ZXJJRCByZCwgUmVnaXN0ZXJJRCBycywgUmVnaXN0ZXJJRCBydCkKKyAgICB7CisjaWYg
X19taXBzID49IDMyCisgICAgICAgIGVtaXRJbnN0KDB4NzAwMDAwMDIgfCAocmQgPDwgT1BfU0hf
UkQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChydCA8PCBPUF9TSF9S
VCkpOworI2Vsc2UKKyAgICAgICAgbXVsdChycywgcnQpOworICAgICAgICBtZmxvKHJkKTsKKyNl
bmRpZgorICAgIH0KKworICAgIHZvaWQgYW5kX2luc24oUmVnaXN0ZXJJRCByZCwgUmVnaXN0ZXJJ
RCBycywgUmVnaXN0ZXJJRCBydCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMjQg
fCAocmQgPDwgT1BfU0hfUkQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAgICAgICAgICB8
IChydCA8PCBPUF9TSF9SVCkpOworICAgIH0KKworICAgIHZvaWQgYW5kaShSZWdpc3RlcklEIHJ0
LCBSZWdpc3RlcklEIHJzLCBpbnQgaW1tKQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHgzMDAw
MDAwMCB8IChydCA8PCBPUF9TSF9SVCkgfCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAgICAg
ICAgIHwgKGltbSAmIDB4ZmZmZikpOworICAgIH0KKworICAgIHZvaWQgbm9yKFJlZ2lzdGVySUQg
cmQsIFJlZ2lzdGVySUQgcnMsIFJlZ2lzdGVySUQgcnQpCisgICAgeworICAgICAgICBlbWl0SW5z
dCgweDAwMDAwMDI3IHwgKHJkIDw8IE9QX1NIX1JEKSB8IChycyA8PCBPUF9TSF9SUykKKyAgICAg
ICAgICAgICAgICAgfCAocnQgPDwgT1BfU0hfUlQpKTsKKyAgICB9CisKKyAgICB2b2lkIG9yX2lu
c24oUmVnaXN0ZXJJRCByZCwgUmVnaXN0ZXJJRCBycywgUmVnaXN0ZXJJRCBydCkKKyAgICB7Cisg
ICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMjUgfCAocmQgPDwgT1BfU0hfUkQpIHwgKHJzIDw8IE9Q
X1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChydCA8PCBPUF9TSF9SVCkpOworICAgIH0KKwor
ICAgIHZvaWQgb3JpKFJlZ2lzdGVySUQgcnQsIFJlZ2lzdGVySUQgcnMsIGludCBpbW0pCisgICAg
eworICAgICAgICBlbWl0SW5zdCgweDM0MDAwMDAwIHwgKHJ0IDw8IE9QX1NIX1JUKSB8IChycyA8
PCBPUF9TSF9SUykKKyAgICAgICAgICAgICAgICAgfCAoaW1tICYgMHhmZmZmKSk7CisgICAgfQor
CisgICAgdm9pZCB4b3JfaW5zbihSZWdpc3RlcklEIHJkLCBSZWdpc3RlcklEIHJzLCBSZWdpc3Rl
cklEIHJ0KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHgwMDAwMDAyNiB8IChyZCA8PCBPUF9T
SF9SRCkgfCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAgICAgICAgIHwgKHJ0IDw8IE9QX1NI
X1JUKSk7CisgICAgfQorCisgICAgdm9pZCB4b3JpKFJlZ2lzdGVySUQgcnQsIFJlZ2lzdGVySUQg
cnMsIGludCBpbW0pCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDM4MDAwMDAwIHwgKHJ0IDw8
IE9QX1NIX1JUKSB8IChycyA8PCBPUF9TSF9SUykKKyAgICAgICAgICAgICAgICAgfCAoaW1tICYg
MHhmZmZmKSk7CisgICAgfQorCisgICAgdm9pZCBzbHQoUmVnaXN0ZXJJRCByZCwgUmVnaXN0ZXJJ
RCBycywgUmVnaXN0ZXJJRCBydCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMmEg
fCAocmQgPDwgT1BfU0hfUkQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAgICAgICAgICB8
IChydCA8PCBPUF9TSF9SVCkpOworICAgIH0KKworICAgIHZvaWQgc2x0dShSZWdpc3RlcklEIHJk
LCBSZWdpc3RlcklEIHJzLCBSZWdpc3RlcklEIHJ0KQorICAgIHsKKyAgICAgICAgZW1pdEluc3Qo
MHgwMDAwMDAyYiB8IChyZCA8PCBPUF9TSF9SRCkgfCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAg
ICAgICAgICAgIHwgKHJ0IDw8IE9QX1NIX1JUKSk7CisgICAgfQorCisgICAgdm9pZCBzbHRpdShS
ZWdpc3RlcklEIHJ0LCBSZWdpc3RlcklEIHJzLCBpbnQgaW1tKQorICAgIHsKKyAgICAgICAgZW1p
dEluc3QoMHgyYzAwMDAwMCB8IChydCA8PCBPUF9TSF9SVCkgfCAocnMgPDwgT1BfU0hfUlMpCisg
ICAgICAgICAgICAgICAgIHwgKGltbSAmIDB4ZmZmZikpOworICAgIH0KKworICAgIHZvaWQgc2xs
KFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcnQsIGludCBzaGFtdCkKKyAgICB7CisgICAgICAg
IGVtaXRJbnN0KDB4MDAwMDAwMDAgfCAocmQgPDwgT1BfU0hfUkQpIHwgKHJ0IDw8IE9QX1NIX1JU
KQorICAgICAgICAgICAgICAgICB8ICgoc2hhbXQgJiAweDFmKSA8PCBPUF9TSF9TSEFNVCkpOwor
ICAgIH0KKworICAgIHZvaWQgc2xsdihSZWdpc3RlcklEIHJkLCBSZWdpc3RlcklEIHJ0LCBpbnQg
cnMpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDAwMDAwMDA0IHwgKHJkIDw8IE9QX1NIX1JE
KSB8IChydCA8PCBPUF9TSF9SVCkKKyAgICAgICAgICAgICAgICAgfCAocnMgPDwgT1BfU0hfUlMp
KTsKKyAgICB9CisKKyAgICB2b2lkIHNyYShSZWdpc3RlcklEIHJkLCBSZWdpc3RlcklEIHJ0LCBp
bnQgc2hhbXQpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDAwMDAwMDAzIHwgKHJkIDw8IE9Q
X1NIX1JEKSB8IChydCA8PCBPUF9TSF9SVCkKKyAgICAgICAgICAgICAgICAgfCAoKHNoYW10ICYg
MHgxZikgPDwgT1BfU0hfU0hBTVQpKTsKKyAgICB9CisKKyAgICB2b2lkIHNyYXYoUmVnaXN0ZXJJ
RCByZCwgUmVnaXN0ZXJJRCBydCwgUmVnaXN0ZXJJRCBycykKKyAgICB7CisgICAgICAgIGVtaXRJ
bnN0KDB4MDAwMDAwMDcgfCAocmQgPDwgT1BfU0hfUkQpIHwgKHJ0IDw8IE9QX1NIX1JUKQorICAg
ICAgICAgICAgICAgICB8IChycyA8PCBPUF9TSF9SUykpOworICAgIH0KKworICAgIHZvaWQgbHco
UmVnaXN0ZXJJRCBydCwgUmVnaXN0ZXJJRCBycywgaW50IG9mZnNldCkKKyAgICB7CisgICAgICAg
IGVtaXRJbnN0KDB4OGMwMDAwMDAgfCAocnQgPDwgT1BfU0hfUlQpIHwgKHJzIDw8IE9QX1NIX1JT
KQorICAgICAgICAgICAgICAgICB8IChvZmZzZXQgJiAweGZmZmYpKTsKKyAgICAgICAgbG9hZERl
bGF5Tm9wKCk7CisgICAgfQorCisgICAgdm9pZCBsd2woUmVnaXN0ZXJJRCBydCwgUmVnaXN0ZXJJ
RCBycywgaW50IG9mZnNldCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4ODgwMDAwMDAgfCAo
cnQgPDwgT1BfU0hfUlQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChv
ZmZzZXQgJiAweGZmZmYpKTsKKyAgICAgICAgbG9hZERlbGF5Tm9wKCk7CisgICAgfQorCisgICAg
dm9pZCBsd3IoUmVnaXN0ZXJJRCBydCwgUmVnaXN0ZXJJRCBycywgaW50IG9mZnNldCkKKyAgICB7
CisgICAgICAgIGVtaXRJbnN0KDB4OTgwMDAwMDAgfCAocnQgPDwgT1BfU0hfUlQpIHwgKHJzIDw8
IE9QX1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChvZmZzZXQgJiAweGZmZmYpKTsKKyAgICAg
ICAgbG9hZERlbGF5Tm9wKCk7CisgICAgfQorCisgICAgdm9pZCBsaHUoUmVnaXN0ZXJJRCBydCwg
UmVnaXN0ZXJJRCBycywgaW50IG9mZnNldCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4OTQw
MDAwMDAgfCAocnQgPDwgT1BfU0hfUlQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAgICAg
ICAgICB8IChvZmZzZXQgJiAweGZmZmYpKTsKKyAgICAgICAgbG9hZERlbGF5Tm9wKCk7CisgICAg
fQorCisgICAgdm9pZCBzdyhSZWdpc3RlcklEIHJ0LCBSZWdpc3RlcklEIHJzLCBpbnQgb2Zmc2V0
KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHhhYzAwMDAwMCB8IChydCA8PCBPUF9TSF9SVCkg
fCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAgICAgICAgIHwgKG9mZnNldCAmIDB4ZmZmZikp
OworICAgIH0KKworICAgIHZvaWQganIoUmVnaXN0ZXJJRCBycykKKyAgICB7CisgICAgICAgIGVt
aXRJbnN0KDB4MDAwMDAwMDggfCAocnMgPDwgT1BfU0hfUlMpKTsKKyAgICB9CisKKyAgICB2b2lk
IGphbHIoUmVnaXN0ZXJJRCBycykKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4MDAwMGY4MDkg
fCAocnMgPDwgT1BfU0hfUlMpKTsKKyAgICB9CisKKyAgICB2b2lkIGphbCgpCisgICAgeworICAg
ICAgICBlbWl0SW5zdCgweDBjMDAwMDAwKTsKKyAgICB9CisKKyAgICB2b2lkIGJrcHQoKQorICAg
IHsKKyAgICAgICAgaW50IHZhbHVlID0gNTEyOyAvKiBCUktfQlVHICovCisgICAgICAgIGVtaXRJ
bnN0KDB4MDAwMDAwMGQgfCAoKHZhbHVlICYgMHgzZmYpIDw8IE9QX1NIX0NPREUpKTsKKyAgICB9
CisKKyAgICB2b2lkIGJnZXooUmVnaXN0ZXJJRCBycywgaW50IGltbSkKKyAgICB7CisgICAgICAg
IGVtaXRJbnN0KDB4MDQwMTAwMDAgfCAocnMgPDwgT1BfU0hfUlMpIHwgKGltbSAmIDB4ZmZmZikp
OworICAgIH0KKworICAgIHZvaWQgYmx0eihSZWdpc3RlcklEIHJzLCBpbnQgaW1tKQorICAgIHsK
KyAgICAgICAgZW1pdEluc3QoMHgwNDAwMDAwMCB8IChycyA8PCBPUF9TSF9SUykgfCAoaW1tICYg
MHhmZmZmKSk7CisgICAgfQorCisgICAgdm9pZCBiZXEoUmVnaXN0ZXJJRCBycywgUmVnaXN0ZXJJ
RCBydCwgaW50IGltbSkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4MTAwMDAwMDAgfCAocnMg
PDwgT1BfU0hfUlMpIHwgKHJ0IDw8IE9QX1NIX1JUKSB8IChpbW0gJiAweGZmZmYpKTsKKyAgICB9
CisKKyAgICB2b2lkIGJuZShSZWdpc3RlcklEIHJzLCBSZWdpc3RlcklEIHJ0LCBpbnQgaW1tKQor
ICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHgxNDAwMDAwMCB8IChycyA8PCBPUF9TSF9SUykgfCAo
cnQgPDwgT1BfU0hfUlQpIHwgKGltbSAmIDB4ZmZmZikpOworICAgIH0KKworICAgIHZvaWQgYmMx
dCgpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDQ1MDEwMDAwKTsKKyAgICB9CisKKyAgICB2
b2lkIGJjMWYoKQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHg0NTAwMDAwMCk7CisgICAgfQor
CisgICAgSm1wU3JjIG5ld0ptcFNyYygpCisgICAgeworICAgICAgICByZXR1cm4gSm1wU3JjKG1f
YnVmZmVyLnNpemUoKSk7CisgICAgfQorCisgICAgdm9pZCBhcHBlbmRKdW1wKCkKKyAgICB7Cisg
ICAgICAgIG1fanVtcHMuYXBwZW5kKG1fYnVmZmVyLnNpemUoKSk7CisgICAgfQorCisgICAgdm9p
ZCBhZGRfZChGUFJlZ2lzdGVySUQgZmQsIEZQUmVnaXN0ZXJJRCBmcywgRlBSZWdpc3RlcklEIGZ0
KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHg0NjIwMDAwMCB8IChmZCA8PCBPUF9TSF9GRCkg
fCAoZnMgPDwgT1BfU0hfRlMpCisgICAgICAgICAgICAgICAgIHwgKGZ0IDw8IE9QX1NIX0ZUKSk7
CisgICAgfQorCisgICAgdm9pZCBzdWJfZChGUFJlZ2lzdGVySUQgZmQsIEZQUmVnaXN0ZXJJRCBm
cywgRlBSZWdpc3RlcklEIGZ0KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHg0NjIwMDAwMSB8
IChmZCA8PCBPUF9TSF9GRCkgfCAoZnMgPDwgT1BfU0hfRlMpCisgICAgICAgICAgICAgICAgIHwg
KGZ0IDw8IE9QX1NIX0ZUKSk7CisgICAgfQorCisgICAgdm9pZCBtdWxfZChGUFJlZ2lzdGVySUQg
ZmQsIEZQUmVnaXN0ZXJJRCBmcywgRlBSZWdpc3RlcklEIGZ0KQorICAgIHsKKyAgICAgICAgZW1p
dEluc3QoMHg0NjIwMDAwMiB8IChmZCA8PCBPUF9TSF9GRCkgfCAoZnMgPDwgT1BfU0hfRlMpCisg
ICAgICAgICAgICAgICAgIHwgKGZ0IDw8IE9QX1NIX0ZUKSk7CisgICAgfQorCisgICAgdm9pZCBs
d2MxKEZQUmVnaXN0ZXJJRCBmdCwgUmVnaXN0ZXJJRCBycywgaW50IG9mZnNldCkKKyAgICB7Cisg
ICAgICAgIGVtaXRJbnN0KDB4YzQwMDAwMDAgfCAoZnQgPDwgT1BfU0hfRlQpIHwgKHJzIDw8IE9Q
X1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChvZmZzZXQgJiAweGZmZmYpKTsKKyAgICAgICAg
Y29wRGVsYXlOb3AoKTsKKyAgICB9CisKKyAgICB2b2lkIGxkYzEoRlBSZWdpc3RlcklEIGZ0LCBS
ZWdpc3RlcklEIHJzLCBpbnQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHhkNDAw
MDAwMCB8IChmdCA8PCBPUF9TSF9GVCkgfCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAgICAg
ICAgIHwgKG9mZnNldCAmIDB4ZmZmZikpOworICAgIH0KKworICAgIHZvaWQgc3djMShGUFJlZ2lz
dGVySUQgZnQsIFJlZ2lzdGVySUQgcnMsIGludCBvZmZzZXQpCisgICAgeworICAgICAgICBlbWl0
SW5zdCgweGU0MDAwMDAwIHwgKGZ0IDw8IE9QX1NIX0ZUKSB8IChycyA8PCBPUF9TSF9SUykKKyAg
ICAgICAgICAgICAgICAgfCAob2Zmc2V0ICYgMHhmZmZmKSk7CisgICAgfQorCisgICAgdm9pZCBz
ZGMxKEZQUmVnaXN0ZXJJRCBmdCwgUmVnaXN0ZXJJRCBycywgaW50IG9mZnNldCkKKyAgICB7Cisg
ICAgICAgIGVtaXRJbnN0KDB4ZjQwMDAwMDAgfCAoZnQgPDwgT1BfU0hfRlQpIHwgKHJzIDw8IE9Q
X1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChvZmZzZXQgJiAweGZmZmYpKTsKKyAgICB9CisK
KyAgICB2b2lkIG10YzEoUmVnaXN0ZXJJRCBydCwgRlBSZWdpc3RlcklEIGZzKQorICAgIHsKKyAg
ICAgICAgZW1pdEluc3QoMHg0NDgwMDAwMCB8IChmcyA8PCBPUF9TSF9GUykgfCAocnQgPDwgT1Bf
U0hfUlQpKTsKKyAgICAgICAgY29wRGVsYXlOb3AoKTsKKyAgICB9CisKKyAgICB2b2lkIG1mYzEo
UmVnaXN0ZXJJRCBydCwgRlBSZWdpc3RlcklEIGZzKQorICAgIHsKKyAgICAgICAgZW1pdEluc3Qo
MHg0NDAwMDAwMCB8IChmcyA8PCBPUF9TSF9GUykgfCAocnQgPDwgT1BfU0hfUlQpKTsKKyAgICAg
ICAgY29wRGVsYXlOb3AoKTsKKyAgICB9CisKKyAgICB2b2lkIHRydW5jX3dfZChGUFJlZ2lzdGVy
SUQgZmQsIEZQUmVnaXN0ZXJJRCBmcykKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4NDYyMDAw
MGQgfCAoZmQgPDwgT1BfU0hfRkQpIHwgKGZzIDw8IE9QX1NIX0ZTKSk7CisgICAgfQorCisgICAg
dm9pZCBjdnRfZF93KEZQUmVnaXN0ZXJJRCBmZCwgRlBSZWdpc3RlcklEIGZzKQorICAgIHsKKyAg
ICAgICAgZW1pdEluc3QoMHg0NjgwMDAyMSB8IChmZCA8PCBPUF9TSF9GRCkgfCAoZnMgPDwgT1Bf
U0hfRlMpKTsKKyAgICB9CisKKyAgICB2b2lkIGNfZXFfZChGUFJlZ2lzdGVySUQgZnMsIEZQUmVn
aXN0ZXJJRCBmdCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4NDYyMDAwMzIgfCAoZnMgPDwg
T1BfU0hfRlMpIHwgKGZ0IDw8IE9QX1NIX0ZUKSk7CisgICAgICAgIGNvcERlbGF5Tm9wKCk7Cisg
ICAgfQorCisgICAgdm9pZCBjX25ndF9kKEZQUmVnaXN0ZXJJRCBmcywgRlBSZWdpc3RlcklEIGZ0
KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHg0NjIwMDAzZiB8IChmcyA8PCBPUF9TSF9GUykg
fCAoZnQgPDwgT1BfU0hfRlQpKTsKKyAgICAgICAgY29wRGVsYXlOb3AoKTsKKyAgICB9CisKKyAg
ICB2b2lkIGNfbmdlX2QoRlBSZWdpc3RlcklEIGZzLCBGUFJlZ2lzdGVySUQgZnQpCisgICAgewor
ICAgICAgICBlbWl0SW5zdCgweDQ2MjAwMDNkIHwgKGZzIDw8IE9QX1NIX0ZTKSB8IChmdCA8PCBP
UF9TSF9GVCkpOworICAgICAgICBjb3BEZWxheU5vcCgpOworICAgIH0KKworICAgIHZvaWQgY19s
dF9kKEZQUmVnaXN0ZXJJRCBmcywgRlBSZWdpc3RlcklEIGZ0KQorICAgIHsKKyAgICAgICAgZW1p
dEluc3QoMHg0NjIwMDAzYyB8IChmcyA8PCBPUF9TSF9GUykgfCAoZnQgPDwgT1BfU0hfRlQpKTsK
KyAgICAgICAgY29wRGVsYXlOb3AoKTsKKyAgICB9CisKKyAgICB2b2lkIGNfbGVfZChGUFJlZ2lz
dGVySUQgZnMsIEZQUmVnaXN0ZXJJRCBmdCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4NDYy
MDAwM2UgfCAoZnMgPDwgT1BfU0hfRlMpIHwgKGZ0IDw8IE9QX1NIX0ZUKSk7CisgICAgICAgIGNv
cERlbGF5Tm9wKCk7CisgICAgfQorCisgICAgdm9pZCBjX3VlcV9kKEZQUmVnaXN0ZXJJRCBmcywg
RlBSZWdpc3RlcklEIGZ0KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHg0NjIwMDAzMyB8IChm
cyA8PCBPUF9TSF9GUykgfCAoZnQgPDwgT1BfU0hfRlQpKTsKKyAgICAgICAgY29wRGVsYXlOb3Ao
KTsKKyAgICB9CisKKyAgICB2b2lkIGNfb2xlX2QoRlBSZWdpc3RlcklEIGZzLCBGUFJlZ2lzdGVy
SUQgZnQpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDQ2MjAwMDM2IHwgKGZzIDw8IE9QX1NI
X0ZTKSB8IChmdCA8PCBPUF9TSF9GVCkpOworICAgICAgICBjb3BEZWxheU5vcCgpOworICAgIH0K
KworICAgIHZvaWQgY19vbHRfZChGUFJlZ2lzdGVySUQgZnMsIEZQUmVnaXN0ZXJJRCBmdCkKKyAg
ICB7CisgICAgICAgIGVtaXRJbnN0KDB4NDYyMDAwMzQgfCAoZnMgPDwgT1BfU0hfRlMpIHwgKGZ0
IDw8IE9QX1NIX0ZUKSk7CisgICAgICAgIGNvcERlbGF5Tm9wKCk7CisgICAgfQorCisgICAgdm9p
ZCBjX3VsZV9kKEZQUmVnaXN0ZXJJRCBmcywgRlBSZWdpc3RlcklEIGZ0KQorICAgIHsKKyAgICAg
ICAgZW1pdEluc3QoMHg0NjIwMDAzNyB8IChmcyA8PCBPUF9TSF9GUykgfCAoZnQgPDwgT1BfU0hf
RlQpKTsKKyAgICAgICAgY29wRGVsYXlOb3AoKTsKKyAgICB9CisKKyAgICB2b2lkIGNfdWx0X2Qo
RlBSZWdpc3RlcklEIGZzLCBGUFJlZ2lzdGVySUQgZnQpCisgICAgeworICAgICAgICBlbWl0SW5z
dCgweDQ2MjAwMDM1IHwgKGZzIDw8IE9QX1NIX0ZTKSB8IChmdCA8PCBPUF9TSF9GVCkpOworICAg
ICAgICBjb3BEZWxheU5vcCgpOworICAgIH0KKworICAgIC8vIEdlbmVyYWwgaGVscGVycworCisg
ICAgSm1wRHN0IGxhYmVsKCkKKyAgICB7CisgICAgICAgIHJldHVybiBKbXBEc3QobV9idWZmZXIu
c2l6ZSgpKTsKKyAgICB9CisKKyAgICBKbXBEc3QgYWxpZ24oaW50IGFsaWdubWVudCkKKyAgICB7
CisgICAgICAgIHdoaWxlICghbV9idWZmZXIuaXNBbGlnbmVkKGFsaWdubWVudCkpCisgICAgICAg
ICAgICBia3B0KCk7CisKKyAgICAgICAgcmV0dXJuIGxhYmVsKCk7CisgICAgfQorCisgICAgc3Rh
dGljIHZvaWQqIGdldFJlbG9jYXRlZEFkZHJlc3Modm9pZCogY29kZSwgSm1wU3JjIGp1bXApCisg
ICAgeworICAgICAgICBBU1NFUlQoanVtcC5tX29mZnNldCAhPSAtMSk7CisgICAgICAgIHZvaWQq
IGIgPSByZWludGVycHJldF9jYXN0PHZvaWQqPigocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4o
Y29kZSkpICsganVtcC5tX29mZnNldCk7CisgICAgICAgIHJldHVybiBiOworICAgIH0KKworICAg
IHN0YXRpYyB2b2lkKiBnZXRSZWxvY2F0ZWRBZGRyZXNzKHZvaWQqIGNvZGUsIEptcERzdCBsYWJl
bCkKKyAgICB7CisgICAgICAgIHZvaWQqIGIgPSByZWludGVycHJldF9jYXN0PHZvaWQqPigocmVp
bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oY29kZSkpICsgbGFiZWwubV9vZmZzZXQpOworICAgICAg
ICByZXR1cm4gYjsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGdldERpZmZlcmVuY2VCZXR3ZWVu
TGFiZWxzKEptcERzdCBmcm9tLCBKbXBEc3QgdG8pCisgICAgeworICAgICAgICByZXR1cm4gdG8u
bV9vZmZzZXQgLSBmcm9tLm1fb2Zmc2V0OworICAgIH0KKworICAgIHN0YXRpYyBpbnQgZ2V0RGlm
ZmVyZW5jZUJldHdlZW5MYWJlbHMoSm1wRHN0IGZyb20sIEptcFNyYyB0bykKKyAgICB7CisgICAg
ICAgIHJldHVybiB0by5tX29mZnNldCAtIGZyb20ubV9vZmZzZXQ7CisgICAgfQorCisgICAgc3Rh
dGljIGludCBnZXREaWZmZXJlbmNlQmV0d2VlbkxhYmVscyhKbXBTcmMgZnJvbSwgSm1wRHN0IHRv
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvLm1fb2Zmc2V0IC0gZnJvbS5tX29mZnNldDsKKyAg
ICB9CisKKyAgICAvLyBBc3NlbWJsZXIgYWRtaW4gbWV0aG9kczoKKworICAgIHNpemVfdCBzaXpl
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2J1ZmZlci5zaXplKCk7CisgICAgfQor
CisgICAgdm9pZCogZXhlY3V0YWJsZUNvcHkoRXhlY3V0YWJsZVBvb2wqIGFsbG9jYXRvcikKKyAg
ICB7CisgICAgICAgIHZvaWQgKnJlc3VsdCA9IG1fYnVmZmVyLmV4ZWN1dGFibGVDb3B5KGFsbG9j
YXRvcik7CisgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICAgICAgcmVsb2NhdGVKdW1wcyhtX2J1ZmZlci5kYXRhKCksIHJlc3VsdCk7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIHVuc2lnbmVkIGdldENhbGxSZXR1cm5P
ZmZzZXQoSm1wU3JjIGNhbGwpCisgICAgeworICAgICAgICAvLyBUaGUgcmV0dXJuIGFkZHJlc3Mg
aXMgYWZ0ZXIgYSBjYWxsIGFuZCBhIGRlbGF5IHNsb3QgaW5zdHJ1Y3Rpb24KKyAgICAgICAgcmV0
dXJuIGNhbGwubV9vZmZzZXQ7CisgICAgfQorCisgICAgLy8gTGlua2luZyAmIHBhdGNoaW5nOgor
ICAgIC8vCisgICAgLy8gJ2xpbmsnIGFuZCAncGF0Y2gnIG1ldGhvZHMgYXJlIGZvciB1c2Ugb24g
dW5wcm90ZWN0ZWQgY29kZSAtIHN1Y2ggYXMgdGhlIGNvZGUKKyAgICAvLyB3aXRoaW4gdGhlIEFz
c2VtYmxlckJ1ZmZlciwgYW5kIGNvZGUgYmVpbmcgcGF0Y2hlZCBieSB0aGUgcGF0Y2ggYnVmZmVy
LiAgT25jZQorICAgIC8vIGNvZGUgaGFzIGJlZW4gZmluYWxpemVkIGl0IGlzIChwbGF0Zm9ybSBz
dXBwb3J0IHBlcm1pdHRpbmcpIHdpdGhpbiBhIG5vbi0KKyAgICAvLyB3cml0YWJsZSByZWdpb24g
b2YgbWVtb3J5OyB0byBtb2RpZnkgdGhlIGNvZGUgaW4gYW4gZXhlY3V0ZS1vbmx5IGV4ZWN1YWJs
ZQorICAgIC8vIHBvb2wgdGhlICdyZXBhdGNoJyBhbmQgJ3JlbGluaycgbWV0aG9kcyBzaG91bGQg
YmUgdXNlZC4KKworICAgIHZvaWQgbGlua0p1bXAoSm1wU3JjIGZyb20sIEptcERzdCB0bykKKyAg
ICB7CisgICAgICAgIEFTU0VSVCh0by5tX29mZnNldCAhPSAtMSk7CisgICAgICAgIEFTU0VSVChm
cm9tLm1fb2Zmc2V0ICE9IC0xKTsKKyAgICAgICAgTUlQU1dvcmQqIGluc24gPSByZWludGVycHJl
dF9jYXN0PE1JUFNXb3JkKj4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obV9idWZmZXIuZGF0
YSgpKSArIGZyb20ubV9vZmZzZXQpOworICAgICAgICBNSVBTV29yZCogdG9fcG9zID0gcmVpbnRl
cnByZXRfY2FzdDxNSVBTV29yZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1fYnVmZmVy
LmRhdGEoKSkgKyB0by5tX29mZnNldCk7CisKKyAgICAgICAgQVNTRVJUKCooaW5zbiAtIDEpID09
IDAgJiYgKihpbnNuIC0gMikgPT0gMCAmJiAqKGluc24gLSAzKSA9PSAwICYmICooaW5zbiAtIDUp
ID09IDApOworICAgICAgICBpbnNuID0gaW5zbiAtIDY7CisgICAgICAgIGxpbmtXaXRoT2Zmc2V0
KGluc24sIHRvX3Bvcyk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgbGlua0p1bXAodm9pZCog
Y29kZSwgSm1wU3JjIGZyb20sIHZvaWQqIHRvKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGZyb20u
bV9vZmZzZXQgIT0gLTEpOworICAgICAgICBNSVBTV29yZCogaW5zbiA9IHJlaW50ZXJwcmV0X2Nh
c3Q8TUlQU1dvcmQqPihyZWludGVycHJldF9jYXN0PGludHB0cl90Pihjb2RlKSArIGZyb20ubV9v
ZmZzZXQpOworCisgICAgICAgIEFTU0VSVCgqKGluc24gLSAxKSA9PSAwICYmICooaW5zbiAtIDIp
ID09IDAgJiYgKihpbnNuIC0gMykgPT0gMCAmJiAqKGluc24gLSA1KSA9PSAwKTsKKyAgICAgICAg
aW5zbiA9IGluc24gLSA2OworICAgICAgICBsaW5rV2l0aE9mZnNldChpbnNuLCB0byk7CisgICAg
fQorCisgICAgc3RhdGljIHZvaWQgbGlua0NhbGwodm9pZCogY29kZSwgSm1wU3JjIGZyb20sIHZv
aWQqIHRvKQorICAgIHsKKyAgICAgICAgTUlQU1dvcmQqIGluc24gPSByZWludGVycHJldF9jYXN0
PE1JUFNXb3JkKj4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oY29kZSkgKyBmcm9tLm1fb2Zm
c2V0KTsKKyAgICAgICAgbGlua0NhbGxJbnRlcm5hbChpbnNuLCB0byk7CisgICAgfQorCisgICAg
c3RhdGljIHZvaWQgbGlua1BvaW50ZXIodm9pZCogY29kZSwgSm1wRHN0IGZyb20sIHZvaWQqIHRv
KQorICAgIHsKKyAgICAgICAgTUlQU1dvcmQqIGluc24gPSByZWludGVycHJldF9jYXN0PE1JUFNX
b3JkKj4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oY29kZSkgKyBmcm9tLm1fb2Zmc2V0KTsK
KyAgICAgICAgQVNTRVJUKCgqaW5zbiAmIDB4ZmZlMDAwMDApID09IDB4M2MwMDAwMDApOyAvLyBs
dWkKKyAgICAgICAgKmluc24gPSAoKmluc24gJiAweGZmZmYwMDAwKSB8ICgocmVpbnRlcnByZXRf
Y2FzdDxpbnRwdHJfdD4odG8pID4+IDE2KSAmIDB4ZmZmZik7CisgICAgICAgIGluc24rKzsKKyAg
ICAgICAgQVNTRVJUKCgqaW5zbiAmIDB4ZmMwMDAwMDApID09IDB4MzQwMDAwMDApOyAvLyBvcmkK
KyAgICAgICAgKmluc24gPSAoKmluc24gJiAweGZmZmYwMDAwKSB8IChyZWludGVycHJldF9jYXN0
PGludHB0cl90Pih0bykgJiAweGZmZmYpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHJlbGlu
a0p1bXAodm9pZCogZnJvbSwgdm9pZCogdG8pCisgICAgeworICAgICAgICBNSVBTV29yZCogaW5z
biA9IHJlaW50ZXJwcmV0X2Nhc3Q8TUlQU1dvcmQqPihmcm9tKTsKKworICAgICAgICBBU1NFUlQo
KihpbnNuIC0gMSkgPT0gMCAmJiAqKGluc24gLSA1KSA9PSAwKTsKKyAgICAgICAgaW5zbiA9IGlu
c24gLSA2OworICAgICAgICBpbnQgZmx1c2hfc2l6ZSA9IGxpbmtXaXRoT2Zmc2V0KGluc24sIHRv
KTsKKworICAgICAgICBFeGVjdXRhYmxlQWxsb2NhdG9yOjpjYWNoZUZsdXNoKGluc24sIGZsdXNo
X3NpemUpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHJlbGlua0NhbGwodm9pZCogZnJvbSwg
dm9pZCogdG8pCisgICAgeworICAgICAgICB2b2lkKiBzdGFydDsKKyAgICAgICAgaW50IHNpemUg
PSBsaW5rQ2FsbEludGVybmFsKGZyb20sIHRvKTsKKyAgICAgICAgaWYgKHNpemUgPT0gc2l6ZW9m
KE1JUFNXb3JkKSkKKyAgICAgICAgICAgIHN0YXJ0ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
cmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZnJvbSkgLSAyICogc2l6ZW9mKE1JUFNXb3JkKSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN0YXJ0ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZnJvbSkgLSA0ICogc2l6ZW9mKE1JUFNXb3Jk
KSk7CisKKyAgICAgICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6Y2FjaGVGbHVzaChzdGFydCwgc2l6
ZSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVwYXRjaEludDMyKHZvaWQqIGZyb20sIGlu
dDMyX3QgdG8pCisgICAgeworICAgICAgICBNSVBTV29yZCogaW5zbiA9IHJlaW50ZXJwcmV0X2Nh
c3Q8TUlQU1dvcmQqPihmcm9tKTsKKyAgICAgICAgQVNTRVJUKCgqaW5zbiAmIDB4ZmZlMDAwMDAp
ID09IDB4M2MwMDAwMDApOyAvLyBsdWkKKyAgICAgICAgKmluc24gPSAoKmluc24gJiAweGZmZmYw
MDAwKSB8ICgodG8gPj4gMTYpICYgMHhmZmZmKTsKKyAgICAgICAgaW5zbisrOworICAgICAgICBB
U1NFUlQoKCppbnNuICYgMHhmYzAwMDAwMCkgPT0gMHgzNDAwMDAwMCk7IC8vIG9yaQorICAgICAg
ICAqaW5zbiA9ICgqaW5zbiAmIDB4ZmZmZjAwMDApIHwgKHRvICYgMHhmZmZmKTsKKyAgICAgICAg
aW5zbi0tOworICAgICAgICBFeGVjdXRhYmxlQWxsb2NhdG9yOjpjYWNoZUZsdXNoKGluc24sIDIg
KiBzaXplb2YoTUlQU1dvcmQpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoUG9p
bnRlcih2b2lkKiBmcm9tLCB2b2lkKiB0bykKKyAgICB7CisgICAgICAgIHJlcGF0Y2hJbnQzMihm
cm9tLCByZWludGVycHJldF9jYXN0PGludDMyX3Q+KHRvKSk7CisgICAgfQorCisgICAgc3RhdGlj
IHZvaWQgcmVwYXRjaExvYWRQdHJUb0xFQSh2b2lkKiBmcm9tKQorICAgIHsKKyAgICAgICAgTUlQ
U1dvcmQqIGluc24gPSByZWludGVycHJldF9jYXN0PE1JUFNXb3JkKj4oZnJvbSk7CisgICAgICAg
IGluc24gPSBpbnNuICsgMzsKKyAgICAgICAgQVNTRVJUKCgqaW5zbiAmIDB4ZmMwMDAwMDApID09
IDB4OGMwMDAwMDApOyAvLyBsdworICAgICAgICAvKiBsdyAtPiBhZGRpdSAqLworICAgICAgICAq
aW5zbiA9IDB4MjQwMDAwMDAgfCAoKmluc24gJiAweDAzZmZmZmZmKTsKKworICAgICAgICBFeGVj
dXRhYmxlQWxsb2NhdG9yOjpjYWNoZUZsdXNoKGluc24sIHNpemVvZihNSVBTV29yZCkpOworICAg
IH0KKworcHJpdmF0ZToKKworICAgIC8qIFVwZGF0ZSBlYWNoIGp1bXAgaW4gdGhlIGJ1ZmZlciBv
ZiBuZXdfYmFzZS4gICovCisgICAgdm9pZCByZWxvY2F0ZUp1bXBzKHZvaWQqIG9sZF9iYXNlLCB2
b2lkKiBuZXdfYmFzZSkKKyAgICB7CisgICAgICAgIC8vIENoZWNrIGVhY2gganVtcAorICAgICAg
ICBmb3IgKEp1bXBzOjpJdGVyYXRvciBpdGVyID0gbV9qdW1wcy5iZWdpbigpOyBpdGVyICE9IG1f
anVtcHMuZW5kKCk7ICsraXRlcikgeworICAgICAgICAgICAgaW50IHBvcyA9ICppdGVyOworICAg
ICAgICAgICAgTUlQU1dvcmQqIGluc24gPSByZWludGVycHJldF9jYXN0PE1JUFNXb3JkKj4ocmVp
bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obmV3X2Jhc2UpICsgcG9zKTsKKyAgICAgICAgICAgIGlu
c24gPSBpbnNuICsgMjsKKyAgICAgICAgICAgIC8vIE5lZWQgdG8gbWFrZSBzdXJlIHdlIGhhdmUg
NSB2YWxpZCBpbnN0cnVjdGlvbnMgYWZ0ZXIgcG9zCisgICAgICAgICAgICBpZiAoKHVuc2lnbmVk
IGludClwb3MgPj0gbV9idWZmZXIuc2l6ZSgpIC0gNSAqIHNpemVvZihNSVBTV29yZCkpCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGlmICgoKmluc24gJiAweGZjMDAw
MDAwKSA9PSAweDA4MDAwMDAwKSB7IC8vIGoKKyAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0g
Kmluc24gJiAweDAzZmZmZmZmOworICAgICAgICAgICAgICAgIGludCBvbGRfaW5zbl9hZGRyZXNz
ID0gKGludClpbnNuIC0gKGludCluZXdfYmFzZSArIChpbnQpb2xkX2Jhc2U7CisgICAgICAgICAg
ICAgICAgaW50IHRvcF9mb3VyX2JpdHMgPSAob2xkX2luc25fYWRkcmVzcyArIDQpID4+IDI4Owor
ICAgICAgICAgICAgICAgIGludCBvbGRfdGFyZ2V0X2FkZHJlc3MgPSAodG9wX2ZvdXJfYml0cyA8
PCAyOCkgfCAob2Zmc2V0IDw8IDIpOworICAgICAgICAgICAgICAgIGludCBuZXdfdGFyZ2V0X2Fk
ZHJlc3MgPSBvbGRfdGFyZ2V0X2FkZHJlc3MgLSAoaW50KW9sZF9iYXNlICsgKGludCluZXdfYmFz
ZTsKKyAgICAgICAgICAgICAgICBpbnQgbmV3X2luc25fYWRkcmVzcyA9IChpbnQpaW5zbjsKKyAg
ICAgICAgICAgICAgICBpZiAoKChuZXdfaW5zbl9hZGRyZXNzICsgNCkgPj4gMjgpID09IChuZXdf
dGFyZ2V0X2FkZHJlc3MgPj4gMjgpKQorICAgICAgICAgICAgICAgICAgICAqaW5zbiA9IDB4MDgw
MDAwMDAgfCAoKG5ld190YXJnZXRfYWRkcmVzcyA+PiAyKSAmIDB4M2ZmZmZmZik7CisgICAgICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8qIGx1aSAqLworICAgICAgICAg
ICAgICAgICAgICAqaW5zbiA9IDB4M2MwMDAwMDAgfCAoTUlQU1JlZ2lzdGVyczo6dDkgPDwgT1Bf
U0hfUlQpIHwgKChuZXdfdGFyZ2V0X2FkZHJlc3MgPj4gMTYpICYgMHhmZmZmKTsKKyAgICAgICAg
ICAgICAgICAgICAgLyogb3JpICovCisgICAgICAgICAgICAgICAgICAgICooaW5zbiArIDEpID0g
MHgzNDAwMDAwMCB8IChNSVBTUmVnaXN0ZXJzOjp0OSA8PCBPUF9TSF9SVCkgfCAoTUlQU1JlZ2lz
dGVyczo6dDkgPDwgT1BfU0hfUlMpIHwgKG5ld190YXJnZXRfYWRkcmVzcyAmIDB4ZmZmZik7Cisg
ICAgICAgICAgICAgICAgICAgIC8qIGpyICovCisgICAgICAgICAgICAgICAgICAgICooaW5zbiAr
IDIpID0gMHgwMDAwMDAwOCB8IChNSVBTUmVnaXN0ZXJzOjp0OSA8PCBPUF9TSF9SUyk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmICgoKmluc24gJiAweGZmZTAwMDAw
KSA9PSAweDNjMDAwMDAwKSB7IC8vIGx1aQorICAgICAgICAgICAgICAgIGludCBoaWdoID0gKCpp
bnNuICYgMHhmZmZmKSA8PCAxNjsKKyAgICAgICAgICAgICAgICBpbnQgbG93ID0gKihpbnNuICsg
MSkgJiAweGZmZmY7CisgICAgICAgICAgICAgICAgaW50IG9sZF90YXJnZXRfYWRkcmVzcyA9IGhp
Z2ggfCBsb3c7CisgICAgICAgICAgICAgICAgaW50IG5ld190YXJnZXRfYWRkcmVzcyA9IG9sZF90
YXJnZXRfYWRkcmVzcyAtIChpbnQpb2xkX2Jhc2UgKyAoaW50KW5ld19iYXNlOworICAgICAgICAg
ICAgICAgIC8qIGx1aSAqLworICAgICAgICAgICAgICAgICppbnNuID0gMHgzYzAwMDAwMCB8IChN
SVBTUmVnaXN0ZXJzOjp0OSA8PCBPUF9TSF9SVCkgfCAoKG5ld190YXJnZXRfYWRkcmVzcyA+PiAx
NikgJiAweGZmZmYpOworICAgICAgICAgICAgICAgIC8qIG9yaSAqLworICAgICAgICAgICAgICAg
ICooaW5zbiArIDEpID0gMHgzNDAwMDAwMCB8IChNSVBTUmVnaXN0ZXJzOjp0OSA8PCBPUF9TSF9S
VCkgfCAoTUlQU1JlZ2lzdGVyczo6dDkgPDwgT1BfU0hfUlMpIHwgKG5ld190YXJnZXRfYWRkcmVz
cyAmIDB4ZmZmZik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0
aWMgaW50IGxpbmtXaXRoT2Zmc2V0KE1JUFNXb3JkKiBpbnNuLCB2b2lkKiB0bykKKyAgICB7Cisg
ICAgICAgIEFTU0VSVCgoKmluc24gJiAweGZjMDAwMDAwKSA9PSAweDEwMDAwMDAwIC8vIGJlcQor
ICAgICAgICAgICAgICAgfHwgKCppbnNuICYgMHhmYzAwMDAwMCkgPT0gMHgxNDAwMDAwMCAvLyBi
bmUKKyAgICAgICAgICAgICAgIHx8ICgqaW5zbiAmIDB4ZmZmZjAwMDApID09IDB4NDUwMTAwMDAg
Ly8gYmMxdAorICAgICAgICAgICAgICAgfHwgKCppbnNuICYgMHhmZmZmMDAwMCkgPT0gMHg0NTAw
MDAwMCk7IC8vIGJjMWYKKyAgICAgICAgaW50cHRyX3QgZGlmZiA9IChyZWludGVycHJldF9jYXN0
PGludHB0cl90Pih0bykKKyAgICAgICAgICAgICAgICAgICAgICAgICAtIHJlaW50ZXJwcmV0X2Nh
c3Q8aW50cHRyX3Q+KGluc24pIC0gNCkgPj4gMjsKKworICAgICAgICBpZiAoZGlmZiA8IC0zMjc2
OCB8fCBkaWZmID4gMzI3NjcgfHwgKihpbnNuICsgMikgIT0gMHgxMDAwMDAwMykgeworICAgICAg
ICAgICAgLyoKKyAgICAgICAgICAgICAgICBDb252ZXJ0IHRoZSBzZXF1ZW5jZToKKyAgICAgICAg
ICAgICAgICAgIGJlcSAkMiwgJDMsIHRhcmdldAorICAgICAgICAgICAgICAgICAgbm9wCisgICAg
ICAgICAgICAgICAgICBiIDFmCisgICAgICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAgICAg
ICAgIG5vcAorICAgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgMToKKworICAg
ICAgICAgICAgICAgIHRvIHRoZSBuZXcgc2VxdWVuY2UgaWYgcG9zc2libGU6CisgICAgICAgICAg
ICAgICAgICBibmUgJDIsICQzLCAxZgorICAgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAg
ICAgICAgICBqICAgIHRhcmdldAorICAgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAg
ICAgICBub3AKKyAgICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgICAgIDE6CisKKyAg
ICAgICAgICAgICAgICBPUiB0byB0aGUgbmV3IHNlcXVlbmNlOgorICAgICAgICAgICAgICAgICAg
Ym5lICQyLCAkMywgMWYKKyAgICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgICAgICAg
bHVpICQyNSwgdGFyZ2V0ID4+IDE2CisgICAgICAgICAgICAgICAgICBvcmkgJDI1LCAkMjUsIHRh
cmdldCAmIDB4ZmZmZgorICAgICAgICAgICAgICAgICAganIgJDI1CisgICAgICAgICAgICAgICAg
ICBub3AKKyAgICAgICAgICAgICAgICAxOgorCisgICAgICAgICAgICAgICAgTm90ZTogYmVxL2Ju
ZS9iYzF0IGFyZSBjb252ZXJ0ZWQgdG8gYm5lL2JlcS9iYzFmLgorICAgICAgICAgICAgKi8KKwor
ICAgICAgICAgICAgaWYgKCooaW5zbiArIDIpID09IDB4MTAwMDAwMDMpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoKCppbnNuICYgMHhmYzAwMDAwMCkgPT0gMHgxMDAwMDAwMCkgLy8gYmVxCisgICAg
ICAgICAgICAgICAgICAgICppbnNuID0gKCppbnNuICYgMHgwM2ZmMDAwMCkgfCAweDE0MDAwMDA1
OyAvLyBibmUKKyAgICAgICAgICAgICAgICBlbHNlIGlmICgoKmluc24gJiAweGZjMDAwMDAwKSA9
PSAweDE0MDAwMDAwKSAvLyBibmUKKyAgICAgICAgICAgICAgICAgICAgKmluc24gPSAoKmluc24g
JiAweDAzZmYwMDAwKSB8IDB4MTAwMDAwMDU7IC8vIGJlcQorICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKCgqaW5zbiAmIDB4ZmZmZjAwMDApID09IDB4NDUwMTAwMDApIC8vIGJjMXQKKyAgICAgICAg
ICAgICAgICAgICAgKmluc24gPSAweDQ1MDAwMDA1OyAvLyBiYzFmCisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICBBU1NFUlQoMCk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGluc24gPSBpbnNuICsgMjsKKyAgICAgICAgICAgIGlmICgocmVpbnRlcnByZXRf
Y2FzdDxpbnRwdHJfdD4oaW5zbikgKyA0KSA+PiAyOAorICAgICAgICAgICAgICAgID09IHJlaW50
ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSA+PiAyOCkgeworICAgICAgICAgICAgICAgICppbnNu
ID0gMHgwODAwMDAwMCB8ICgocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pID4+IDIpICYg
MHgzZmZmZmZmKTsKKyAgICAgICAgICAgICAgICAqKGluc24gKyAxKSA9IDA7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIDQgKiBzaXplb2YoTUlQU1dvcmQpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpbnRwdHJfdCBuZXdfdGFyZ2V0X2FkZHJlc3MgPSByZWludGVycHJldF9jYXN0PGlu
dHB0cl90Pih0byk7CisgICAgICAgICAgICAvKiBsdWkgKi8KKyAgICAgICAgICAgICppbnNuID0g
MHgzYzAwMDAwMCB8IChNSVBTUmVnaXN0ZXJzOjp0OSA8PCBPUF9TSF9SVCkgfCAoKG5ld190YXJn
ZXRfYWRkcmVzcyA+PiAxNikgJiAweGZmZmYpOworICAgICAgICAgICAgLyogb3JpICovCisgICAg
ICAgICAgICAqKGluc24gKyAxKSA9IDB4MzQwMDAwMDAgfCAoTUlQU1JlZ2lzdGVyczo6dDkgPDwg
T1BfU0hfUlQpIHwgKE1JUFNSZWdpc3RlcnM6OnQ5IDw8IE9QX1NIX1JTKSB8IChuZXdfdGFyZ2V0
X2FkZHJlc3MgJiAweGZmZmYpOworICAgICAgICAgICAgLyoganIgKi8KKyAgICAgICAgICAgICoo
aW5zbiArIDIpID0gMHgwMDAwMDAwOCB8IChNSVBTUmVnaXN0ZXJzOjp0OSA8PCBPUF9TSF9SUyk7
CisgICAgICAgICAgICByZXR1cm4gNSAqIHNpemVvZihNSVBTV29yZCk7CisgICAgICAgIH0KKwor
ICAgICAgICAqaW5zbiA9ICgqaW5zbiAmIDB4ZmZmZjAwMDApIHwgKGRpZmYgJiAweGZmZmYpOwor
ICAgICAgICByZXR1cm4gc2l6ZW9mKE1JUFNXb3JkKTsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50
IGxpbmtDYWxsSW50ZXJuYWwodm9pZCogZnJvbSwgdm9pZCogdG8pCisgICAgeworICAgICAgICBN
SVBTV29yZCogaW5zbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8TUlQU1dvcmQqPihmcm9tKTsKKyAgICAg
ICAgaW5zbiA9IGluc24gLSA0OworCisgICAgICAgIGlmICgoKihpbnNuICsgMikgJiAweGZjMDAw
MDAwKSA9PSAweDBjMDAwMDAwKSB7IC8vIGphbAorICAgICAgICAgICAgaWYgKChyZWludGVycHJl
dF9jYXN0PGludHB0cl90Pihmcm9tKSAtIDQpID4+IDI4CisgICAgICAgICAgICAgICAgPT0gcmVp
bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pID4+IDI4KSB7CisgICAgICAgICAgICAgICAgKihp
bnNuICsgMikgPSAweDBjMDAwMDAwIHwgKChyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykg
Pj4gMikgJiAweDNmZmZmZmYpOworICAgICAgICAgICAgICAgIHJldHVybiBzaXplb2YoTUlQU1dv
cmQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBsdWkgJDI1LCAodG8gPj4gMTYp
ICYgMHhmZmZmICovCisgICAgICAgICAgICAqaW5zbiA9IDB4M2MwMDAwMDAgfCAoTUlQU1JlZ2lz
dGVyczo6dDkgPDwgT1BfU0hfUlQpIHwgKChyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykg
Pj4gMTYpICYgMHhmZmZmKTsKKyAgICAgICAgICAgIC8qIG9yaSAkMjUsICQyNSwgdG8gJiAweGZm
ZmYgKi8KKyAgICAgICAgICAgICooaW5zbiArIDEpID0gMHgzNDAwMDAwMCB8IChNSVBTUmVnaXN0
ZXJzOjp0OSA8PCBPUF9TSF9SVCkgfCAoTUlQU1JlZ2lzdGVyczo6dDkgPDwgT1BfU0hfUlMpIHwg
KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAmIDB4ZmZmZik7CisgICAgICAgICAgICAv
KiBqYWxyICQyNSAqLworICAgICAgICAgICAgKihpbnNuICsgMikgPSAweDAwMDBmODA5IHwgKE1J
UFNSZWdpc3RlcnM6OnQ5IDw8IE9QX1NIX1JTKTsKKyAgICAgICAgICAgIHJldHVybiAzICogc2l6
ZW9mKE1JUFNXb3JkKTsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVCgoKmluc24gJiAweGZm
ZTAwMDAwKSA9PSAweDNjMDAwMDAwKTsgLy8gbHVpCisgICAgICAgIEFTU0VSVCgoKihpbnNuICsg
MSkgJiAweGZjMDAwMDAwKSA9PSAweDM0MDAwMDAwKTsgLy8gb3JpCisKKyAgICAgICAgLyogbHVp
ICovCisgICAgICAgICppbnNuID0gKCppbnNuICYgMHhmZmZmMDAwMCkgfCAoKHJlaW50ZXJwcmV0
X2Nhc3Q8aW50cHRyX3Q+KHRvKSA+PiAxNikgJiAweGZmZmYpOworICAgICAgICAvKiBvcmkgKi8K
KyAgICAgICAgKihpbnNuICsgMSkgPSAoKihpbnNuICsgMSkgJiAweGZmZmYwMDAwKSB8IChyZWlu
dGVycHJldF9jYXN0PGludHB0cl90Pih0bykgJiAweGZmZmYpOworICAgICAgICByZXR1cm4gMiAq
IHNpemVvZihNSVBTV29yZCk7CisgICAgfQorCisgICAgQXNzZW1ibGVyQnVmZmVyIG1fYnVmZmVy
OworICAgIEp1bXBzIG1fanVtcHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIEVOQUJMRShBU1NFTUJMRVIpICYmIENQVShNSVBTKQorCisjZW5kaWYgLy8gTUlQU0Fzc2Vt
Ymxlcl9oCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAko
cmV2aXNpb24gNTQxNDApCisrKyBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsMTAgQEAgbmFtZXNwYWNlIEpTQyB7IHR5
cGVkZWYgTWFjcm9Bc3NlbWJsZXJBUgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQVJNLmgiCiBu
YW1lc3BhY2UgSlNDIHsgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlckFSTSBNYWNyb0Fzc2VtYmxlckJh
c2U7IH07CiAKKyNlbGlmIENQVShNSVBTKQorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyTUlQUy5o
IgorbmFtZXNwYWNlIEpTQyB7IHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJNSVBTIE1hY3JvQXNzZW1i
bGVyQmFzZTsgfTsKKwogI2VsaWYgQ1BVKFg4NikKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclg4
Ni5oIgogbmFtZXNwYWNlIEpTQyB7IHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJYODYgTWFjcm9Bc3Nl
bWJsZXJCYXNlOyB9OwpJbmRleDogSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyTUlQUy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlck1JUFMuaAkocmV2aXNpb24gMCkKKysrIEphdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlck1JUFMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNjYwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOSBNSVBTIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgTUlQ
UyBURUNITk9MT0dJRVMsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBN
SVBTIFRFQ0hOT0xPR0lFUywgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTWFjcm9Bc3NlbWJsZXJNSVBTX2gKKyNkZWZp
bmUgTWFjcm9Bc3NlbWJsZXJNSVBTX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisj
aWYgRU5BQkxFKEFTU0VNQkxFUikgJiYgQ1BVKE1JUFMpCisKKyNpbmNsdWRlICJNSVBTQXNzZW1i
bGVyLmgiCisjaW5jbHVkZSAiQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworY2xhc3MgTWFjcm9Bc3NlbWJsZXJNSVBTIDogcHVibGljIEFic3RyYWN0TWFjcm9B
c3NlbWJsZXI8TUlQU0Fzc2VtYmxlcj4geworcHVibGljOgorCisgICAgTWFjcm9Bc3NlbWJsZXJN
SVBTKCkKKyAgICAgICAgOiBtX2ZpeGVkV2lkdGgoZmFsc2UpCisgICAgeworICAgIH0KKworICAg
IHN0YXRpYyBjb25zdCBTY2FsZSBTY2FsZVB0ciA9IFRpbWVzRm91cjsKKworICAgIC8vIEZvciBz
dG9yaW5nIGltbWVkaWF0ZSBudW1iZXIKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBpbW1U
ZW1wUmVnaXN0ZXIgPSBNSVBTUmVnaXN0ZXJzOjp0MDsKKyAgICAvLyBGb3Igc3RvcmluZyBkYXRh
IGxvYWRlZCBmcm9tIHRoZSBtZW1vcnkKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBkYXRh
VGVtcFJlZ2lzdGVyID0gTUlQU1JlZ2lzdGVyczo6dDE7CisgICAgLy8gRm9yIHN0b3JpbmcgYWRk
cmVzcyBiYXNlCisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgYWRkclRlbXBSZWdpc3RlciA9
IE1JUFNSZWdpc3RlcnM6OnQyOworICAgIC8vIEZvciBzdG9yaW5nIGNvbXBhcmUgcmVzdWx0Cisg
ICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgY21wVGVtcFJlZ2lzdGVyID0gTUlQU1JlZ2lzdGVy
czo6dDM7CisKKyAgICAvLyBGUCB0ZW1wIHJlZ2lzdGVyCisgICAgc3RhdGljIGNvbnN0IEZQUmVn
aXN0ZXJJRCBmcFRlbXBSZWdpc3RlciA9IE1JUFNSZWdpc3RlcnM6OmYxNjsKKworICAgIGVudW0g
Q29uZGl0aW9uIHsKKyAgICAgICAgRXF1YWwsCisgICAgICAgIE5vdEVxdWFsLAorICAgICAgICBB
Ym92ZSwKKyAgICAgICAgQWJvdmVPckVxdWFsLAorICAgICAgICBCZWxvdywKKyAgICAgICAgQmVs
b3dPckVxdWFsLAorICAgICAgICBHcmVhdGVyVGhhbiwKKyAgICAgICAgR3JlYXRlclRoYW5PckVx
dWFsLAorICAgICAgICBMZXNzVGhhbiwKKyAgICAgICAgTGVzc1RoYW5PckVxdWFsLAorICAgICAg
ICBPdmVyZmxvdywKKyAgICAgICAgU2lnbmVkLAorICAgICAgICBaZXJvLAorICAgICAgICBOb25a
ZXJvCisgICAgfTsKKworICAgIGVudW0gRG91YmxlQ29uZGl0aW9uIHsKKyAgICAgICAgRG91Ymxl
RXF1YWwsCisgICAgICAgIERvdWJsZU5vdEVxdWFsLAorICAgICAgICBEb3VibGVHcmVhdGVyVGhh
biwKKyAgICAgICAgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsLAorICAgICAgICBEb3VibGVMZXNz
VGhhbiwKKyAgICAgICAgRG91YmxlTGVzc1RoYW5PckVxdWFsLAorICAgICAgICBEb3VibGVFcXVh
bE9yVW5vcmRlcmVkLAorICAgICAgICBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkLAorICAgICAg
ICBEb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkLAorICAgICAgICBEb3VibGVHcmVhdGVyVGhh
bk9yRXF1YWxPclVub3JkZXJlZCwKKyAgICAgICAgRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCwK
KyAgICAgICAgRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQKKyAgICB9OworCisgICAg
c3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgc3RhY2tQb2ludGVyUmVnaXN0ZXIgPSBNSVBTUmVnaXN0
ZXJzOjpzcDsKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZXR1cm5BZGRyZXNzUmVnaXN0
ZXIgPSBNSVBTUmVnaXN0ZXJzOjpyYTsKKworICAgIC8vIEludGVnZXIgYXJpdGhtZXRpYyBvcGVy
YXRpb25zOgorICAgIC8vCisgICAgLy8gT3BlcmF0aW9ucyBhcmUgdHlwaWNhbGx5IHR3byBvcGVy
YW5kIC0gb3BlcmF0aW9uKHNvdXJjZSwgc3JjRHN0KQorICAgIC8vIEZvciBtYW55IG9wZXJhdGlv
bnMgdGhlIHNvdXJjZSBtYXkgYmUgYW4gSW1tMzIsIHRoZSBzcmNEc3Qgb3BlcmFuZAorICAgIC8v
IG1heSBvZnRlbiBiZSBhIG1lbW9yeSBsb2NhdGlvbiAoZXhwbGljdGx5IGRlc2NyaWJlZCB1c2lu
ZyBhbiBBZGRyZXNzCisgICAgLy8gb2JqZWN0KS4KKworICAgIHZvaWQgYWRkMzIoUmVnaXN0ZXJJ
RCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUo
ZGVzdCwgZGVzdCwgc3JjKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZDMyKEltbTMyIGltbSwgUmVn
aXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgYWRkMzIoaW1tLCBkZXN0LCBkZXN0KTsKKyAg
ICB9CisKKyAgICB2b2lkIGFkZDMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlmICghaW1tLm1faXNQb2ludGVyICYmIGltbS5tX3Zh
bHVlID49IC0zMjc2OCAmJiBpbW0ubV92YWx1ZSA8PSAzMjc2NworICAgICAgICAgICAgJiYgIW1f
Zml4ZWRXaWR0aCkgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgYWRkaXUgICAgIGRl
c3QsIHNyYywgaW1tCisgICAgICAgICAgICAqLworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRk
aXUoZGVzdCwgc3JjLCBpbW0ubV92YWx1ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAvKgorICAgICAgICAgICAgICBsaSAgICAgICAgaW1tVGVtcCwgaW1tCisgICAgICAgICAgICAg
IGFkZHUgICAgICBkZXN0LCBzcmMsIGltbVRlbXAKKyAgICAgICAgICAgICovCisgICAgICAgICAg
ICBtb3ZlKGltbSwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFk
ZHUoZGVzdCwgc3JjLCBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICB9CisgICAgfQorCisgICAg
dm9pZCBhZGQzMihJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIGlm
IChhZGRyZXNzLm9mZnNldCA+PSAtMzI3NjggJiYgYWRkcmVzcy5vZmZzZXQgPD0gMzI3NjcKKyAg
ICAgICAgICAgICYmICFtX2ZpeGVkV2lkdGgpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAg
ICAgIGx3ICAgICAgICBkYXRhVGVtcCwgb2Zmc2V0KGJhc2UpCisgICAgICAgICAgICAgIGxpICAg
ICAgICBpbW1UZW1wLCBpbW0KKyAgICAgICAgICAgICAgYWRkdSAgICAgIGRhdGFUZW1wLCBkYXRh
VGVtcCwgaW1tVGVtcAorICAgICAgICAgICAgICBzdyAgICAgICAgZGF0YVRlbXAsIG9mZnNldChi
YXNlKQorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx3KGRhdGFUZW1w
UmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5vZmZzZXQpOworICAgICAgICAgICAgaWYg
KCFpbW0ubV9pc1BvaW50ZXIKKyAgICAgICAgICAgICAgICAmJiBpbW0ubV92YWx1ZSA+PSAtMzI3
NjggJiYgaW1tLm1fdmFsdWUgPD0gMzI3NjcKKyAgICAgICAgICAgICAgICAmJiAhbV9maXhlZFdp
ZHRoKQorICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGl1KGRhdGFUZW1wUmVnaXN0ZXIs
IGRhdGFUZW1wUmVnaXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1t
Lm1fdmFsdWUpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbW92ZShpbW0s
IGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShkYXRh
VGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLnN3KGRhdGFUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5vZmZz
ZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgbHVp
ICAgICAgIGFkZHJUZW1wLCAob2Zmc2V0ICsgMHg4MDAwKSA+PiAxNgorICAgICAgICAgICAgICBh
ZGR1ICAgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBiYXNlCisgICAgICAgICAgICAgIGx3ICAgICAg
ICBkYXRhVGVtcCwgKG9mZnNldCAmIDB4ZmZmZikoYWRkclRlbXApCisgICAgICAgICAgICAgIGxp
ICAgICAgICBpbW10ZW1wLCBpbW0KKyAgICAgICAgICAgICAgYWRkdSAgICAgIGRhdGFUZW1wLCBk
YXRhVGVtcCwgaW1tVGVtcAorICAgICAgICAgICAgICBzdyAgICAgICAgZGF0YVRlbXAsIChvZmZz
ZXQgJiAweGZmZmYpKGFkZHJUZW1wKQorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmx1aShhZGRyVGVtcFJlZ2lzdGVyLCAoYWRkcmVzcy5vZmZzZXQgKyAweDgwMDApID4+
IDE2KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRk
clRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx3
KGRhdGFUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKwor
ICAgICAgICAgICAgaWYgKGltbS5tX3ZhbHVlID49IC0zMjc2OCAmJiBpbW0ubV92YWx1ZSA8PSAz
Mjc2NyAmJiAhbV9maXhlZFdpZHRoKQorICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGl1
KGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW1tLm1fdmFsdWUpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgbW92ZShpbW0sIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgbV9h
c3NlbWJsZXIuYWRkdShkYXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN3KGRhdGFUZW1wUmVnaXN0ZXIsIGFkZHJUZW1w
UmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQg
YWRkMzIoQWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGxvYWQz
MihzcmMsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICBhZGQzMihkYXRhVGVtcFJlZ2lzdGVy
LCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGFkZDMyKFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNz
IGRlc3QpCisgICAgeworICAgICAgICBpZiAoZGVzdC5vZmZzZXQgPj0gLTMyNzY4ICYmIGRlc3Qu
b2Zmc2V0IDw9IDMyNzY3ICYmICFtX2ZpeGVkV2lkdGgpIHsKKyAgICAgICAgICAgIC8qCisgICAg
ICAgICAgICAgIGx3ICAgICAgICBkYXRhVGVtcCwgb2Zmc2V0KGJhc2UpCisgICAgICAgICAgICAg
IGFkZHUgICAgICBkYXRhVGVtcCwgZGF0YVRlbXAsIHNyYworICAgICAgICAgICAgICBzdyAgICAg
ICAgZGF0YVRlbXAsIG9mZnNldChiYXNlKQorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLmx3KGRhdGFUZW1wUmVnaXN0ZXIsIGRlc3QuYmFzZSwgZGVzdC5vZmZzZXQpOwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShkYXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJl
Z2lzdGVyLCBzcmMpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3coZGF0YVRlbXBSZWdpc3Rl
ciwgZGVzdC5iYXNlLCBkZXN0Lm9mZnNldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAvKgorICAgICAgICAgICAgICBsdWkgICAgICAgYWRkclRlbXAsIChvZmZzZXQgKyAweDgwMDAp
ID4+IDE2CisgICAgICAgICAgICAgIGFkZHUgICAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGJhc2UK
KyAgICAgICAgICAgICAgbHcgICAgICAgIGRhdGFUZW1wLCAob2Zmc2V0ICYgMHhmZmZmKShhZGRy
VGVtcCkKKyAgICAgICAgICAgICAgYWRkdSAgICAgIGRhdGFUZW1wLCBkYXRhVGVtcCwgc3JjCisg
ICAgICAgICAgICAgIHN3ICAgICAgICBkYXRhVGVtcCwgKG9mZnNldCAmIDB4ZmZmZikoYWRkclRl
bXApCisgICAgICAgICAgICAqLworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHVpKGFkZHJUZW1w
UmVnaXN0ZXIsIChkZXN0Lm9mZnNldCArIDB4ODAwMCkgPj4gMTYpOworICAgICAgICAgICAgbV9h
c3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBkZXN0LmJh
c2UpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHcoZGF0YVRlbXBSZWdpc3RlciwgYWRkclRl
bXBSZWdpc3RlciwgZGVzdC5vZmZzZXQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShk
YXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLCBzcmMpOworICAgICAgICAgICAgbV9h
c3NlbWJsZXIuc3coZGF0YVRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgZGVzdC5vZmZz
ZXQpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBhZGQzMihJbW0zMiBpbW0sIEFic29s
dXRlQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICAgbGkgICBh
ZGRyVGVtcCwgYWRkcmVzcworICAgICAgICAgICBsaSAgIGltbVRlbXAsIGltbQorICAgICAgICAg
ICBsdyAgIGRhdGFUZW1wLCAwKGFkZHJUZW1wKQorICAgICAgICAgICBhZGR1IGRhdGFUZW1wLCBk
YXRhVGVtcCwgaW1tVGVtcAorICAgICAgICAgICBzdyAgIGRhdGFUZW1wLCAwKGFkZHJUZW1wKQor
ICAgICAgICAqLworICAgICAgICBtb3ZlKEltbVB0cihhZGRyZXNzLm1fcHRyKSwgYWRkclRlbXBS
ZWdpc3Rlcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmx3KGRhdGFUZW1wUmVnaXN0ZXIsIGFkZHJU
ZW1wUmVnaXN0ZXIsIDApOworICAgICAgICBpZiAoIWltbS5tX2lzUG9pbnRlciAmJiBpbW0ubV92
YWx1ZSA+PSAtMzI3NjggJiYgaW1tLm1fdmFsdWUgPD0gMzI3NjcKKyAgICAgICAgICAgICYmICFt
X2ZpeGVkV2lkdGgpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRpdShkYXRhVGVtcFJlZ2lz
dGVyLCBkYXRhVGVtcFJlZ2lzdGVyLCBpbW0ubV92YWx1ZSk7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgbW92ZShpbW0sIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5hZGR1KGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsIGltbVRlbXBSZWdp
c3Rlcik7CisgICAgICAgIH0KKyAgICAgICAgbV9hc3NlbWJsZXIuc3coZGF0YVRlbXBSZWdpc3Rl
ciwgYWRkclRlbXBSZWdpc3RlciwgMCk7CisgICAgfQorCisgICAgdm9pZCBhbmQzMihSZWdpc3Rl
cklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5k
X2luc24oZGVzdCwgZGVzdCwgc3JjKTsKKyAgICB9CisKKyAgICB2b2lkIGFuZDMyKEltbTMyIGlt
bSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKCFpbW0ubV9pc1BvaW50ZXIg
JiYgaW1tLm1fdmFsdWUgPT0gMCAmJiAhbV9maXhlZFdpZHRoKQorICAgICAgICAgICAgbW92ZShN
SVBTUmVnaXN0ZXJzOjp6ZXJvLCBkZXN0KTsKKyAgICAgICAgZWxzZSBpZiAoIWltbS5tX2lzUG9p
bnRlciAmJiBpbW0ubV92YWx1ZSA+IDAgJiYgaW1tLm1fdmFsdWUgPCA2NTUzNQorICAgICAgICAg
ICAgICAgICAmJiAhbV9maXhlZFdpZHRoKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuYW5kaShk
ZXN0LCBkZXN0LCBpbW0ubV92YWx1ZSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLyoK
KyAgICAgICAgICAgICAgbGkgICAgICAgIGltbVRlbXAsIGltbQorICAgICAgICAgICAgICBhbmQg
ICAgICAgZGVzdCwgZGVzdCwgaW1tVGVtcAorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1v
dmUoaW1tLCBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYW5kX2lu
c24oZGVzdCwgZGVzdCwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHZvaWQgbHNoaWZ0MzIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5zbGwoZGVzdCwgZGVzdCwgaW1tLm1fdmFsdWUpOworICAgIH0KKworICAg
IHZvaWQgbHNoaWZ0MzIoUmVnaXN0ZXJJRCBzaGlmdF9hbW91bnQsIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnNsbHYoZGVzdCwgZGVzdCwgc2hpZnRfYW1vdW50
KTsKKyAgICB9CisKKyAgICB2b2lkIG11bDMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5tdWwoZGVzdCwgZGVzdCwgc3JjKTsKKyAg
ICB9CisKKyAgICB2b2lkIG11bDMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlmICghaW1tLm1faXNQb2ludGVyICYmIGltbS5tX3Zh
bHVlID09IDAgJiYgIW1fZml4ZWRXaWR0aCkKKyAgICAgICAgICAgIG1vdmUoTUlQU1JlZ2lzdGVy
czo6emVybywgZGVzdCk7CisgICAgICAgIGVsc2UgaWYgKCFpbW0ubV9pc1BvaW50ZXIgJiYgaW1t
Lm1fdmFsdWUgPT0gMSAmJiAhbV9maXhlZFdpZHRoKQorICAgICAgICAgICAgbW92ZShzcmMsIGRl
c3QpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgbGkg
ICAgICBkYXRhVGVtcCwgaW1tCisgICAgICAgICAgICAgICAgbXVsICAgICBkZXN0LCBzcmMsIGRh
dGFUZW1wCisgICAgICAgICAgICAqLworICAgICAgICAgICAgbW92ZShpbW0sIGRhdGFUZW1wUmVn
aXN0ZXIpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubXVsKGRlc3QsIHNyYywgZGF0YVRlbXBS
ZWdpc3Rlcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIG5vdDMyKFJlZ2lzdGVySUQg
c3JjRGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcihzcmNEZXN0LCBzcmNEZXN0
LCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsKKyAgICB9CisKKyAgICB2b2lkIG9yMzIoUmVnaXN0ZXJJ
RCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9yX2lu
c24oZGVzdCwgZGVzdCwgc3JjKTsKKyAgICB9CisKKyAgICB2b2lkIG9yMzIoSW1tMzIgaW1tLCBS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAoIWltbS5tX2lzUG9pbnRlciAmJiBp
bW0ubV92YWx1ZSA9PSAwICYmICFtX2ZpeGVkV2lkdGgpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgaWYgKCFpbW0ubV9pc1BvaW50ZXIgJiYgaW1tLm1fdmFsdWUgPiAwICYmIGltbS5t
X3ZhbHVlIDwgNjU1MzUKKyAgICAgICAgICAgICYmICFtX2ZpeGVkV2lkdGgpIHsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLm9yaShkZXN0LCBkZXN0LCBpbW0ubV92YWx1ZSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgICAgbGkgICAgICBk
YXRhVGVtcCwgaW1tCisgICAgICAgICAgICBvciAgICAgIGRlc3QsIGRlc3QsIGRhdGFUZW1wCisg
ICAgICAgICovCisgICAgICAgIG1vdmUoaW1tLCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAg
bV9hc3NlbWJsZXIub3JfaW5zbihkZXN0LCBkZXN0LCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICB9
CisKKyAgICB2b2lkIHJzaGlmdDMyKFJlZ2lzdGVySUQgc2hpZnRfYW1vdW50LCBSZWdpc3RlcklE
IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zcmF2KGRlc3QsIGRlc3QsIHNoaWZ0
X2Ftb3VudCk7CisgICAgfQorCisgICAgdm9pZCByc2hpZnQzMihJbW0zMiBpbW0sIFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnNyYShkZXN0LCBkZXN0LCBpbW0u
bV92YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBzdWIzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3VidShkZXN0LCBkZXN0LCBz
cmMpOworICAgIH0KKworICAgIHZvaWQgc3ViMzIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBpZiAoIWltbS5tX2lzUG9pbnRlciAmJiBpbW0ubV92YWx1ZSA+PSAt
MzI3NjcgJiYgaW1tLm1fdmFsdWUgPD0gMzI3NjgKKyAgICAgICAgICAgICYmICFtX2ZpeGVkV2lk
dGgpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgIGFkZGl1ICAgICBkZXN0LCBzcmMs
IGltbQorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGl1KGRlc3Qs
IGRlc3QsIC1pbW0ubV92YWx1ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKgor
ICAgICAgICAgICAgICBsaSAgICAgICAgaW1tVGVtcCwgaW1tCisgICAgICAgICAgICAgIHN1YnUg
ICAgICBkZXN0LCBzcmMsIGltbVRlbXAKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBtb3Zl
KGltbSwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN1YnUoZGVz
dCwgZGVzdCwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQg
c3ViMzIoSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBpZiAoYWRk
cmVzcy5vZmZzZXQgPj0gLTMyNzY4ICYmIGFkZHJlc3Mub2Zmc2V0IDw9IDMyNzY3CisgICAgICAg
ICAgICAmJiAhbV9maXhlZFdpZHRoKSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICBs
dyAgICAgICAgZGF0YVRlbXAsIG9mZnNldChiYXNlKQorICAgICAgICAgICAgICBsaSAgICAgICAg
aW1tVGVtcCwgaW1tCisgICAgICAgICAgICAgIHN1YnUgICAgICBkYXRhVGVtcCwgZGF0YVRlbXAs
IGltbVRlbXAKKyAgICAgICAgICAgICAgc3cgICAgICAgIGRhdGFUZW1wLCBvZmZzZXQoYmFzZSkK
KyAgICAgICAgICAgICovCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sdyhkYXRhVGVtcFJlZ2lz
dGVyLCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgICAgIGlmICghaW1t
Lm1faXNQb2ludGVyCisgICAgICAgICAgICAgICAgJiYgaW1tLm1fdmFsdWUgPj0gLTMyNzY3ICYm
IGltbS5tX3ZhbHVlIDw9IDMyNzY4CisgICAgICAgICAgICAgICAgJiYgIW1fZml4ZWRXaWR0aCkK
KyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRpdShkYXRhVGVtcFJlZ2lzdGVyLCBkYXRh
VGVtcFJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1pbW0ubV92
YWx1ZSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBtb3ZlKGltbSwgaW1t
VGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdWJ1KGRhdGFUZW1w
UmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9hc3Nl
bWJsZXIuc3coZGF0YVRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICBsdWkgICAg
ICAgYWRkclRlbXAsIChvZmZzZXQgKyAweDgwMDApID4+IDE2CisgICAgICAgICAgICAgIGFkZHUg
ICAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGJhc2UKKyAgICAgICAgICAgICAgbHcgICAgICAgIGRh
dGFUZW1wLCAob2Zmc2V0ICYgMHhmZmZmKShhZGRyVGVtcCkKKyAgICAgICAgICAgICAgbGkgICAg
ICAgIGltbXRlbXAsIGltbQorICAgICAgICAgICAgICBzdWJ1ICAgICAgZGF0YVRlbXAsIGRhdGFU
ZW1wLCBpbW1UZW1wCisgICAgICAgICAgICAgIHN3ICAgICAgICBkYXRhVGVtcCwgKG9mZnNldCAm
IDB4ZmZmZikoYWRkclRlbXApCisgICAgICAgICAgICAqLworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIubHVpKGFkZHJUZW1wUmVnaXN0ZXIsIChhZGRyZXNzLm9mZnNldCArIDB4ODAwMCkgPj4gMTYp
OworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVt
cFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHcoZGF0
YVRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQpOworCisgICAg
ICAgICAgICBpZiAoIWltbS5tX2lzUG9pbnRlcgorICAgICAgICAgICAgICAgICYmIGltbS5tX3Zh
bHVlID49IC0zMjc2NyAmJiBpbW0ubV92YWx1ZSA8PSAzMjc2OAorICAgICAgICAgICAgICAgICYm
ICFtX2ZpeGVkV2lkdGgpCisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkaXUoZGF0YVRl
bXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAtaW1tLm1fdmFsdWUpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgbW92ZShpbW0sIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgbV9hc3NlbWJs
ZXIuc3VidShkYXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLnN3KGRhdGFUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0
ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgc3ViMzIo
QWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGxvYWQzMihzcmMs
IGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICBzdWIzMihkYXRhVGVtcFJlZ2lzdGVyLCBkZXN0
KTsKKyAgICB9CisKKyAgICB2b2lkIHN1YjMyKEltbTMyIGltbSwgQWJzb2x1dGVBZGRyZXNzIGFk
ZHJlc3MpCisgICAgeworICAgICAgICAvKgorICAgICAgICAgICBsaSAgIGFkZHJUZW1wLCBhZGRy
ZXNzCisgICAgICAgICAgIGxpICAgaW1tVGVtcCwgaW1tCisgICAgICAgICAgIGx3ICAgZGF0YVRl
bXAsIDAoYWRkclRlbXApCisgICAgICAgICAgIHN1YnUgZGF0YVRlbXAsIGRhdGFUZW1wLCBpbW1U
ZW1wCisgICAgICAgICAgIHN3ICAgZGF0YVRlbXAsIDAoYWRkclRlbXApCisgICAgICAgICovCisg
ICAgICAgIG1vdmUoSW1tUHRyKGFkZHJlc3MubV9wdHIpLCBhZGRyVGVtcFJlZ2lzdGVyKTsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubHcoZGF0YVRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3Rlciwg
MCk7CisKKyAgICAgICAgaWYgKCFpbW0ubV9pc1BvaW50ZXIgJiYgaW1tLm1fdmFsdWUgPj0gLTMy
NzY3ICYmIGltbS5tX3ZhbHVlIDw9IDMyNzY4CisgICAgICAgICAgICAmJiAhbV9maXhlZFdpZHRo
KSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRpdShkYXRhVGVtcFJlZ2lzdGVyLCBkYXRh
VGVtcFJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWltbS5tX3ZhbHVl
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1vdmUoaW1tLCBpbW1UZW1wUmVnaXN0
ZXIpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3VidShkYXRhVGVtcFJlZ2lzdGVyLCBkYXRh
VGVtcFJlZ2lzdGVyLCBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICB9CisgICAgICAgIG1fYXNz
ZW1ibGVyLnN3KGRhdGFUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIDApOworICAgIH0K
KworICAgIHZvaWQgeG9yMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLnhvcl9pbnNuKGRlc3QsIGRlc3QsIHNyYyk7CisgICAgfQor
CisgICAgdm9pZCB4b3IzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIC8qCisgICAgICAgICAgICBsaSAgaW1tVGVtcCwgaW1tCisgICAgICAgICAgICB4b3IgZGVz
dCwgZGVzdCwgaW1tVGVtcAorICAgICAgICAqLworICAgICAgICBtb3ZlKGltbSwgaW1tVGVtcFJl
Z2lzdGVyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIueG9yX2luc24oZGVzdCwgZGVzdCwgaW1tVGVt
cFJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICAvLyBNZW1vcnkgYWNjZXNzIG9wZXJhdGlvbnM6Cisg
ICAgLy8KKyAgICAvLyBMb2FkcyBhcmUgb2YgdGhlIGZvcm0gbG9hZChhZGRyZXNzLCBkZXN0aW5h
dGlvbikgYW5kIHN0b3JlcyBvZiB0aGUgZm9ybQorICAgIC8vIHN0b3JlKHNvdXJjZSwgYWRkcmVz
cykuICBUaGUgc291cmNlIGZvciBhIHN0b3JlIG1heSBiZSBhbiBJbW0zMi4gIEFkZHJlc3MKKyAg
ICAvLyBvcGVyYW5kIG9iamVjdHMgdG8gbG9hZHMgYW5kIHN0b3JlIHdpbGwgYmUgaW1wbGljaXRs
eSBjb25zdHJ1Y3RlZCBpZiBhCisgICAgLy8gcmVnaXN0ZXIgaXMgcGFzc2VkLgorCisgICAgdm9p
ZCBsb2FkMzIoSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7
CisgICAgICAgIGlmIChhZGRyZXNzLm9mZnNldCA+PSAtMzI3NjggJiYgYWRkcmVzcy5vZmZzZXQg
PD0gMzI3NjcKKyAgICAgICAgICAgICYmICFtX2ZpeGVkV2lkdGgpCisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5sdyhkZXN0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgIGx1aSAgICAgYWRkclRlbXAs
IChvZmZzZXQgKyAweDgwMDApID4+IDE2CisgICAgICAgICAgICAgICAgYWRkdSAgICBhZGRyVGVt
cCwgYWRkclRlbXAsIGJhc2UKKyAgICAgICAgICAgICAgICBsdyAgICAgIGRlc3QsIChvZmZzZXQg
JiAweGZmZmYpKGFkZHJUZW1wKQorICAgICAgICAgICAgICAqLworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIubHVpKGFkZHJUZW1wUmVnaXN0ZXIsIChhZGRyZXNzLm9mZnNldCArIDB4ODAwMCkgPj4g
MTYpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRy
VGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHco
ZGVzdCwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQpOworICAgICAgICB9CisgICAg
fQorCisgICAgdm9pZCBsb2FkMzIoQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIGlmIChhZGRyZXNzLm9mZnNldCA+PSAtMzI3NjggJiYgYWRkcmVzcy5v
ZmZzZXQgPD0gMzI3NjcKKyAgICAgICAgICAgICYmICFtX2ZpeGVkV2lkdGgpIHsKKyAgICAgICAg
ICAgIC8qCisgICAgICAgICAgICAgICAgc2xsICAgICBhZGRyVGVtcCwgYWRkcmVzcy5pbmRleCwg
YWRkcmVzcy5zY2FsZQorICAgICAgICAgICAgICAgIGFkZHUgICAgYWRkclRlbXAsIGFkZHJUZW1w
LCBhZGRyZXNzLmJhc2UKKyAgICAgICAgICAgICAgICBsdyAgICAgIGRlc3QsIGFkZHJlc3Mub2Zm
c2V0KGFkZHJUZW1wKQorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNs
bChhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3Rl
ciwgYWRkcmVzcy5iYXNlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx3KGRlc3QsIGFkZHJU
ZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIC8qCisgICAgICAgICAgICAgICAgc2xsICAgICBhZGRyVGVtcCwgYWRkcmVzcy5pbmRleCwg
YWRkcmVzcy5zY2FsZQorICAgICAgICAgICAgICAgIGFkZHUgICAgYWRkclRlbXAsIGFkZHJUZW1w
LCBhZGRyZXNzLmJhc2UKKyAgICAgICAgICAgICAgICBsdWkgICAgIGltbVRlbXAsIChhZGRyZXNz
Lm9mZnNldCArIDB4ODAwMCkgPj4gMTYKKyAgICAgICAgICAgICAgICBhZGR1ICAgIGFkZHJUZW1w
LCBhZGRyVGVtcCwgaW1tVGVtcAorICAgICAgICAgICAgICAgIGx3ICAgICAgZGVzdCwgKGFkZHJl
c3Mub2Zmc2V0ICYgMHhmZmZmKShhdCkKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5zbGwoYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2Fs
ZSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJU
ZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sdWko
aW1tVGVtcFJlZ2lzdGVyLCAoYWRkcmVzcy5vZmZzZXQgKyAweDgwMDApID4+IDE2KTsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3Rl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLmx3KGRlc3QsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zm
c2V0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgbG9hZDMyV2l0aFVuYWxpZ25lZEhh
bGZXb3JkcyhCYXNlSW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAg
ICAgaWYgKGFkZHJlc3Mub2Zmc2V0ID49IC0zMjc2OCAmJiBhZGRyZXNzLm9mZnNldCA8PSAzMjc2
NAorICAgICAgICAgICAgJiYgIW1fZml4ZWRXaWR0aCkgeworICAgICAgICAgICAgLyoKKyAgICAg
ICAgICAgICAgICBzbGwgICAgIGFkZHJUZW1wLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxl
CisgICAgICAgICAgICAgICAgYWRkdSAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGFkZHJlc3MuYmFz
ZQorICAgICAgICAgICAgICAgIChCaWctRW5kaWFuKQorICAgICAgICAgICAgICAgIGx3bCAgICAg
ZGVzdCwgYWRkcmVzcy5vZmZzZXQoYWRkclRlbXApCisgICAgICAgICAgICAgICAgbHdyICAgICBk
ZXN0LCBhZGRyZXNzLm9mZnNldCszKGFkZHJUZW1wKQorICAgICAgICAgICAgICAgIChMaXR0bGUt
RW5kaWFuKQorICAgICAgICAgICAgICAgIGx3bCAgICAgZGVzdCwgYWRkcmVzcy5vZmZzZXQrMyhh
ZGRyVGVtcCkKKyAgICAgICAgICAgICAgICBsd3IgICAgIGRlc3QsIGFkZHJlc3Mub2Zmc2V0KGFk
ZHJUZW1wKQorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsbChhZGRy
VGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRk
cmVzcy5iYXNlKTsKKyNpZiBkZWZpbmVkKF9fTUlQU0VCX18pCisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5sd2woZGVzdCwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQpOworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIubHdyKGRlc3QsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zm
c2V0ICsgMyk7CisjZWxzZQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubHdsKGRlc3QsIGFkZHJU
ZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0ICsgMyk7CisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5sd3IoZGVzdCwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQpOworCisjZW5kaWYK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgc2xsICAg
ICBhZGRyVGVtcCwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZQorICAgICAgICAgICAgICAg
IGFkZHUgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBhZGRyZXNzLmJhc2UKKyAgICAgICAgICAgICAg
ICBsdWkgICAgIGltbVRlbXAsIGFkZHJlc3Mub2Zmc2V0ID4+IDE2CisgICAgICAgICAgICAgICAg
b3JpICAgICBpbW1UZW1wLCBpbW1UZW1wLCBhZGRyZXNzLm9mZnNldCAmIDB4ZmZmZgorICAgICAg
ICAgICAgICAgIGFkZHUgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBpbW1UZW1wCisgICAgICAgICAg
ICAgICAgKEJpZy1FbmRpYW4pCisgICAgICAgICAgICAgICAgbHcgICAgICBkZXN0LCAwKGF0KQor
ICAgICAgICAgICAgICAgIGx3ICAgICAgZGVzdCwgMyhhdCkKKyAgICAgICAgICAgICAgICAoTGl0
dGxlLUVuZGlhbikKKyAgICAgICAgICAgICAgICBsdyAgICAgIGRlc3QsIDMoYXQpCisgICAgICAg
ICAgICAgICAgbHcgICAgICBkZXN0LCAwKGF0KQorICAgICAgICAgICAgKi8KKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLnNsbChhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNz
LnNjYWxlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3Rlciwg
YWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
Lmx1aShpbW1UZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0ID4+IDE2KTsKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLm9yaShpbW1UZW1wUmVnaXN0ZXIsIGltbVRlbXBSZWdpc3RlciwgYWRkcmVz
cy5vZmZzZXQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVy
LCBhZGRyVGVtcFJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbW1UZW1w
UmVnaXN0ZXIpOworI2lmIGRlZmluZWQoX19NSVBTRUJfXykKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLmx3bChkZXN0LCBhZGRyVGVtcFJlZ2lzdGVyLCAwKTsKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLmx3cihkZXN0LCBhZGRyVGVtcFJlZ2lzdGVyLCAzKTsKKyNlbHNlCisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5sd2woZGVzdCwgYWRkclRlbXBSZWdpc3RlciwgMyk7CisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5sd3IoZGVzdCwgYWRkclRlbXBSZWdpc3RlciwgMCk7CisjZW5kaWYKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHZvaWQgbG9hZDMyKHZvaWQqIGFkZHJlc3MsIFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAgICBsaSAgYWRkclRlbXAsIGFkZHJl
c3MKKyAgICAgICAgICAgIGx3ICBkZXN0LCAwKGFkZHJUZW1wKQorICAgICAgICAqLworICAgICAg
ICBtb3ZlKEltbVB0cihhZGRyZXNzKSwgYWRkclRlbXBSZWdpc3Rlcik7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmx3KGRlc3QsIGFkZHJUZW1wUmVnaXN0ZXIsIDApOworICAgIH0KKworICAgIERhdGFM
YWJlbDMyIGxvYWQzMldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goQWRkcmVzcyBhZGRyZXNzLCBSZWdp
c3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2ZpeGVkV2lkdGggPSB0cnVlOworICAgICAg
ICAvKgorICAgICAgICAgICAgbHVpIGFkZHJUZW1wLCBhZGRyZXNzLm9mZnNldCA+PiAxNgorICAg
ICAgICAgICAgb3JpIGFkZHJUZW1wLCBhZGRyVGVtcCwgYWRkcmVzcy5vZmZzZXQgJiAweGZmZmYK
KyAgICAgICAgICAgIGFkZHUgICAgICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgYWRkcmVzcy5iYXNl
CisgICAgICAgICAgICBsdyAgZGVzdCwgMChhZGRyVGVtcCkKKyAgICAgICAgKi8KKyAgICAgICAg
RGF0YUxhYmVsMzIgZGF0YUxhYmVsKHRoaXMpOworICAgICAgICBtb3ZlKEltbTMyKGFkZHJlc3Mu
b2Zmc2V0KSwgYWRkclRlbXBSZWdpc3Rlcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRk
clRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlKTsKKyAgICAgICAg
bV9hc3NlbWJsZXIubHcoZGVzdCwgYWRkclRlbXBSZWdpc3RlciwgMCk7CisgICAgICAgIG1fZml4
ZWRXaWR0aCA9IGZhbHNlOworICAgICAgICByZXR1cm4gZGF0YUxhYmVsOworICAgIH0KKworICAg
IExhYmVsIGxvYWRQdHJXaXRoUGF0Y2hUb0xFQShBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIG1fZml4ZWRXaWR0aCA9IHRydWU7CisgICAgICAgIC8qCisg
ICAgICAgICAgICBsdWkgICAgICAgICBhZGRyVGVtcCwgYWRkcmVzcy5vZmZzZXQgPj4gMTYKKyAg
ICAgICAgICAgIG9yaSAgICAgICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgYWRkcmVzcy5vZmZzZXQg
JiAweGZmZmYKKyAgICAgICAgICAgIGFkZHUgICAgICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgYWRk
cmVzcy5iYXNlCisgICAgICAgICAgICBsdyAgICAgICAgICBkZXN0LCAwKGFkZHJUZW1wKQorICAg
ICAgICAqLworICAgICAgICBMYWJlbCBsYWJlbCh0aGlzKTsKKyAgICAgICAgbW92ZShJbW0zMihh
ZGRyZXNzLm9mZnNldCksIGFkZHJUZW1wUmVnaXN0ZXIpOworICAgICAgICBtX2Fzc2VtYmxlci5h
ZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSk7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmx3KGRlc3QsIGFkZHJUZW1wUmVnaXN0ZXIsIDApOworICAgICAg
ICBtX2ZpeGVkV2lkdGggPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGxhYmVsOworICAgIH0KKwor
ICAgIExhYmVsIGxvYWRQdHJXaXRoQWRkcmVzc09mZnNldFBhdGNoKEFkZHJlc3MgYWRkcmVzcywg
UmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGxvYWRQdHJXaXRoUGF0Y2hU
b0xFQShhZGRyZXNzLCBkZXN0KTsKKyAgICB9CisKKyAgICAvKiBOZWVkIHRvIHVzZSB6ZXJvLWV4
dGVuZWQgbG9hZCBoYWxmLXdvcmQgZm9yIGxvYWQxNi4gICovCisgICAgdm9pZCBsb2FkMTYoQmFz
ZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlmIChhZGRy
ZXNzLm9mZnNldCA+PSAtMzI3NjggJiYgYWRkcmVzcy5vZmZzZXQgPD0gMzI3NjcKKyAgICAgICAg
ICAgICYmICFtX2ZpeGVkV2lkdGgpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAg
c2xsICAgICBhZGRyVGVtcCwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZQorICAgICAgICAg
ICAgICAgIGFkZHUgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBhZGRyZXNzLmJhc2UKKyAgICAgICAg
ICAgICAgICBsaHUgICAgIGRlc3QsIGFkZHJlc3Mub2Zmc2V0KGFkZHJUZW1wKQorICAgICAgICAg
ICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsbChhZGRyVGVtcFJlZ2lzdGVyLCBhZGRy
ZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUo
YWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlKTsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLmxodShkZXN0LCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9m
ZnNldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAg
IHNsbCAgICAgYWRkclRlbXAsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUKKyAgICAgICAg
ICAgICAgICBhZGR1ICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgYWRkcmVzcy5iYXNlCisgICAgICAg
ICAgICAgICAgbHVpICAgICBpbW1UZW1wLCAoYWRkcmVzcy5vZmZzZXQgKyAweDgwMDApID4+IDE2
CisgICAgICAgICAgICAgICAgYWRkdSAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGltbVRlbXAKKyAg
ICAgICAgICAgICAgICBsaHUgICAgIGRlc3QsIChhZGRyZXNzLm9mZnNldCAmIDB4ZmZmZikoYWRk
clRlbXApCisgICAgICAgICAgICAqLworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2xsKGFkZHJU
ZW1wUmVnaXN0ZXIsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgICAgICAgICAg
bV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRy
ZXNzLmJhc2UpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHVpKGltbVRlbXBSZWdpc3Rlciwg
KGFkZHJlc3Mub2Zmc2V0ICsgMHg4MDAwKSA+PiAxNik7CisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5saHUoZGVzdCwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQpOworICAgICAgICB9
CisgICAgfQorCisgICAgRGF0YUxhYmVsMzIgc3RvcmUzMldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2go
UmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fZml4ZWRX
aWR0aCA9IHRydWU7CisgICAgICAgIC8qCisgICAgICAgICAgICBsdWkgYWRkclRlbXAsIGFkZHJl
c3Mub2Zmc2V0ID4+IDE2CisgICAgICAgICAgICBvcmkgYWRkclRlbXAsIGFkZHJUZW1wLCBhZGRy
ZXNzLm9mZnNldCAmIDB4ZmZmZgorICAgICAgICAgICAgYWRkdSAgICAgICAgYWRkclRlbXAsIGFk
ZHJUZW1wLCBhZGRyZXNzLmJhc2UKKyAgICAgICAgICAgIHN3ICBzcmMsIDAoYWRkclRlbXApCisg
ICAgICAgICovCisgICAgICAgIERhdGFMYWJlbDMyIGRhdGFMYWJlbCh0aGlzKTsKKyAgICAgICAg
bW92ZShJbW0zMihhZGRyZXNzLm9mZnNldCksIGFkZHJUZW1wUmVnaXN0ZXIpOworICAgICAgICBt
X2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJl
c3MuYmFzZSk7CisgICAgICAgIG1fYXNzZW1ibGVyLnN3KHNyYywgYWRkclRlbXBSZWdpc3Rlciwg
MCk7CisgICAgICAgIG1fZml4ZWRXaWR0aCA9IGZhbHNlOworICAgICAgICByZXR1cm4gZGF0YUxh
YmVsOworICAgIH0KKworICAgIHZvaWQgc3RvcmUzMihSZWdpc3RlcklEIHNyYywgSW1wbGljaXRB
ZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBpZiAoYWRkcmVzcy5vZmZzZXQgPj0gLTMy
NzY4ICYmIGFkZHJlc3Mub2Zmc2V0IDw9IDMyNzY3CisgICAgICAgICAgICAmJiAhbV9maXhlZFdp
ZHRoKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3coc3JjLCBhZGRyZXNzLmJhc2UsIGFkZHJl
c3Mub2Zmc2V0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAg
ICAgIGx1aSAgICAgYWRkclRlbXAsIChvZmZzZXQgKyAweDgwMDApID4+IDE2CisgICAgICAgICAg
ICAgICAgYWRkdSAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGJhc2UKKyAgICAgICAgICAgICAgICBz
dyAgICAgIHNyYywgKG9mZnNldCAmIDB4ZmZmZikoYWRkclRlbXApCisgICAgICAgICAgICAgICov
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sdWkoYWRkclRlbXBSZWdpc3RlciwgKGFkZHJlc3Mu
b2Zmc2V0ICsgMHg4MDAwKSA+PiAxNik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFk
ZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSk7CisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5zdyhzcmMsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgc3RvcmUzMihSZWdpc3RlcklEIHNyYywg
QmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBpZiAoYWRkcmVzcy5vZmZzZXQgPj0g
LTMyNzY4ICYmIGFkZHJlc3Mub2Zmc2V0IDw9IDMyNzY3CisgICAgICAgICAgICAmJiAhbV9maXhl
ZFdpZHRoKSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgIHNsbCAgICAgYWRkclRl
bXAsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUKKyAgICAgICAgICAgICAgICBhZGR1ICAg
IGFkZHJUZW1wLCBhZGRyVGVtcCwgYWRkcmVzcy5iYXNlCisgICAgICAgICAgICAgICAgc3cgICAg
ICBzcmMsIGFkZHJlc3Mub2Zmc2V0KGFkZHJUZW1wKQorICAgICAgICAgICAgKi8KKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLnNsbChhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmluZGV4LCBhZGRy
ZXNzLnNjYWxlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3Rl
ciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlKTsKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLnN3KHNyYywgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICBzbGwgICAgIGFkZHJUZW1w
LCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlCisgICAgICAgICAgICAgICAgYWRkdSAgICBh
ZGRyVGVtcCwgYWRkclRlbXAsIGFkZHJlc3MuYmFzZQorICAgICAgICAgICAgICAgIGx1aSAgICAg
aW1tVGVtcCwgKGFkZHJlc3Mub2Zmc2V0ICsgMHg4MDAwKSA+PiAxNgorICAgICAgICAgICAgICAg
IGFkZHUgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBpbW1UZW1wCisgICAgICAgICAgICAgICAgc3cg
ICAgICBzcmMsIChhZGRyZXNzLm9mZnNldCAmIDB4ZmZmZikoYXQpCisgICAgICAgICAgICAqLwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2xsKGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuaW5k
ZXgsIGFkZHJlc3Muc2NhbGUpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVt
cFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UpOworICAgICAgICAgICAg
bV9hc3NlbWJsZXIubHVpKGltbVRlbXBSZWdpc3RlciwgKGFkZHJlc3Mub2Zmc2V0ICsgMHg4MDAw
KSA+PiAxNik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIs
IGFkZHJUZW1wUmVnaXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltbVRlbXBS
ZWdpc3Rlcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdyhzcmMsIGFkZHJUZW1wUmVnaXN0
ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgc3RvcmUz
MihJbW0zMiBpbW0sIEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgaWYg
KGFkZHJlc3Mub2Zmc2V0ID49IC0zMjc2OCAmJiBhZGRyZXNzLm9mZnNldCA8PSAzMjc2NworICAg
ICAgICAgICAgJiYgIW1fZml4ZWRXaWR0aCkgeworICAgICAgICAgICAgaWYgKCFpbW0ubV9pc1Bv
aW50ZXIgJiYgaW1tLm1fdmFsdWUgPT0gMCkKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5z
dyhNSVBTUmVnaXN0ZXJzOjp6ZXJvLCBhZGRyZXNzLmJhc2UsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYWRkcmVzcy5vZmZzZXQpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgbW92ZShpbW0sIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgbV9h
c3NlbWJsZXIuc3coaW1tVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mub2Zmc2V0
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qCisgICAg
ICAgICAgICAgICAgbHVpICAgICBhZGRyVGVtcCwgKG9mZnNldCArIDB4ODAwMCkgPj4gMTYKKyAg
ICAgICAgICAgICAgICBhZGR1ICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgYmFzZQorICAgICAgICAg
ICAgICAgIHN3ICAgICAgaW1tVGVtcCwgKG9mZnNldCAmIDB4ZmZmZikoYWRkclRlbXApCisgICAg
ICAgICAgICAgICovCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sdWkoYWRkclRlbXBSZWdpc3Rl
ciwgKGFkZHJlc3Mub2Zmc2V0ICsgMHg4MDAwKSA+PiAxNik7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFz
ZSk7CisgICAgICAgICAgICBpZiAoIWltbS5tX2lzUG9pbnRlciAmJiBpbW0ubV92YWx1ZSA9PSAw
ICYmICFtX2ZpeGVkV2lkdGgpCisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3coTUlQU1Jl
Z2lzdGVyczo6emVybywgYWRkclRlbXBSZWdpc3RlciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhZGRyZXNzLm9mZnNldCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBtb3ZlKGltbSwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5zdyhpbW1UZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYWRkcmVzcy5vZmZzZXQpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgdm9pZCBzdG9yZTMyKFJlZ2lzdGVySUQgc3JjLCB2b2lkKiBhZGRy
ZXNzKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICAgIGxpICBhZGRyVGVtcCwgYWRkcmVz
cworICAgICAgICAgICAgc3cgIHNyYywgMChhZGRyVGVtcCkKKyAgICAgICAgKi8KKyAgICAgICAg
bW92ZShJbW1QdHIoYWRkcmVzcyksIGFkZHJUZW1wUmVnaXN0ZXIpOworICAgICAgICBtX2Fzc2Vt
Ymxlci5zdyhzcmMsIGFkZHJUZW1wUmVnaXN0ZXIsIDApOworICAgIH0KKworICAgIHZvaWQgc3Rv
cmUzMihJbW0zMiBpbW0sIHZvaWQqIGFkZHJlc3MpCisgICAgeworICAgICAgICAvKgorICAgICAg
ICAgICAgbGkgIGltbVRlbXAsIGltbQorICAgICAgICAgICAgbGkgIGFkZHJUZW1wLCBhZGRyZXNz
CisgICAgICAgICAgICBzdyAgc3JjLCAwKGFkZHJUZW1wKQorICAgICAgICAqLworICAgICAgICBp
ZiAoIWltbS5tX2lzUG9pbnRlciAmJiBpbW0ubV92YWx1ZSA9PSAwICYmICFtX2ZpeGVkV2lkdGgp
IHsKKyAgICAgICAgICAgIG1vdmUoSW1tUHRyKGFkZHJlc3MpLCBhZGRyVGVtcFJlZ2lzdGVyKTsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN3KE1JUFNSZWdpc3RlcnM6Onplcm8sIGFkZHJUZW1w
UmVnaXN0ZXIsIDApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbW92ZShpbW0sIGlt
bVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICBtb3ZlKEltbVB0cihhZGRyZXNzKSwgYWRkclRl
bXBSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdyhpbW1UZW1wUmVnaXN0ZXIs
IGFkZHJUZW1wUmVnaXN0ZXIsIDApOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gRmxvYXRp
bmctcG9pbnQgb3BlcmF0aW9uczoKKworICAgIGJvb2wgc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkg
Y29uc3QKKyAgICB7CisjaWYgZGVmaW5lZChfX21pcHNfaGFyZF9mbG9hdCkgJiYgIWRlZmluZWQo
X19taXBzX3NpbmdsZV9mbG9hdCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisjZWxzZQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKyAgICB9CisKKyAgICBib29sIHN1cHBvcnRzRmxvYXRp
bmdQb2ludFRydW5jYXRlKCkgY29uc3QKKyAgICB7CisjaWYgZGVmaW5lZChfX21pcHNfaGFyZF9m
bG9hdCkgJiYgIWRlZmluZWQoX19taXBzX3NpbmdsZV9mbG9hdCkgJiYgKF9fbWlwcyA+IDEpCisg
ICAgICAgIHJldHVybiB0cnVlOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlm
CisgICAgfQorCisgICAgLy8gU3RhY2sgbWFuaXB1bGF0aW9uIG9wZXJhdGlvbnM6CisgICAgLy8K
KyAgICAvLyBUaGUgQUJJIGlzIGFzc3VtZWQgdG8gcHJvdmlkZSBhIHN0YWNrIGFic3RyYWN0aW9u
IHRvIG1lbW9yeSwKKyAgICAvLyBjb250YWluaW5nIG1hY2hpbmUgd29yZCBzaXplZCB1bml0cyBv
ZiBkYXRhLiAgUHVzaCBhbmQgcG9wCisgICAgLy8gb3BlcmF0aW9ucyBhZGQgYW5kIHJlbW92ZSBh
IHNpbmdsZSByZWdpc3RlciBzaXplZCB1bml0IG9mIGRhdGEKKyAgICAvLyB0byBvciBmcm9tIHRo
ZSBzdGFjay4gIFBlZWsgYW5kIHBva2Ugb3BlcmF0aW9ucyByZWFkIG9yIHdyaXRlCisgICAgLy8g
dmFsdWVzIG9uIHRoZSBzdGFjaywgd2l0aG91dCBtb3ZpbmcgdGhlIGN1cnJlbnQgc3RhY2sgcG9z
aXRpb24uCisKKyAgICB2b2lkIHBvcChSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBt
X2Fzc2VtYmxlci5sdyhkZXN0LCBNSVBTUmVnaXN0ZXJzOjpzcCwgMCk7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmFkZGl1KE1JUFNSZWdpc3RlcnM6OnNwLCBNSVBTUmVnaXN0ZXJzOjpzcCwgNCk7Cisg
ICAgfQorCisgICAgdm9pZCBwdXNoKFJlZ2lzdGVySUQgc3JjKQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIuYWRkaXUoTUlQU1JlZ2lzdGVyczo6c3AsIE1JUFNSZWdpc3RlcnM6OnNwLCAtNCk7
CisgICAgICAgIG1fYXNzZW1ibGVyLnN3KHNyYywgTUlQU1JlZ2lzdGVyczo6c3AsIDApOworICAg
IH0KKworICAgIHZvaWQgcHVzaChBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBsb2Fk
MzIoYWRkcmVzcywgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgIHB1c2goZGF0YVRlbXBSZWdp
c3Rlcik7CisgICAgfQorCisgICAgdm9pZCBwdXNoKEltbTMyIGltbSkKKyAgICB7CisgICAgICAg
IG1vdmUoaW1tLCBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICBwdXNoKGltbVRlbXBSZWdpc3Rl
cik7CisgICAgfQorCisgICAgLy8gUmVnaXN0ZXIgbW92ZSBvcGVyYXRpb25zOgorICAgIC8vCisg
ICAgLy8gTW92ZSB2YWx1ZXMgaW4gcmVnaXN0ZXJzLgorCisgICAgdm9pZCBtb3ZlKEltbTMyIGlt
bSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKCFpbW0ubV9pc1BvaW50ZXIg
JiYgaW1tLm1fdmFsdWUgPT0gMCAmJiAhbV9maXhlZFdpZHRoKQorICAgICAgICAgICAgbW92ZShN
SVBTUmVnaXN0ZXJzOjp6ZXJvLCBkZXN0KTsKKyAgICAgICAgZWxzZSBpZiAoaW1tLm1faXNQb2lu
dGVyIHx8IG1fZml4ZWRXaWR0aCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHVpKGRlc3Qs
IGltbS5tX3ZhbHVlID4+IDE2KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm9yaShkZXN0LCBk
ZXN0LCBpbW0ubV92YWx1ZSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9hc3NlbWJs
ZXIubGkoZGVzdCwgaW1tLm1fdmFsdWUpOworICAgIH0KKworICAgIHZvaWQgbW92ZShSZWdpc3Rl
cklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKHNyYyAhPSBkZXN0
IHx8IG1fZml4ZWRXaWR0aCkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmUoZGVzdCwgc3Jj
KTsKKyAgICB9CisKKyAgICB2b2lkIG1vdmUoSW1tUHRyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgbW92ZShJbW0zMihpbW0pLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lk
IHN3YXAoUmVnaXN0ZXJJRCByZWcxLCBSZWdpc3RlcklEIHJlZzIpCisgICAgeworICAgICAgICBt
b3ZlKHJlZzEsIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgIG1vdmUocmVnMiwgcmVnMSk7Cisg
ICAgICAgIG1vdmUoaW1tVGVtcFJlZ2lzdGVyLCByZWcyKTsKKyAgICB9CisKKyAgICB2b2lkIHNp
Z25FeHRlbmQzMlRvUHRyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgewor
ICAgICAgICBpZiAoc3JjICE9IGRlc3QgfHwgbV9maXhlZFdpZHRoKQorICAgICAgICAgICAgbW92
ZShzcmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgemVyb0V4dGVuZDMyVG9QdHIoUmVnaXN0
ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlmIChzcmMgIT0gZGVz
dCB8fCBtX2ZpeGVkV2lkdGgpCisgICAgICAgICAgICBtb3ZlKHNyYywgZGVzdCk7CisgICAgfQor
CisgICAgLy8gRm9yd2FyZHMgLyBleHRlcm5hbCBjb250cm9sIGZsb3cgb3BlcmF0aW9uczoKKyAg
ICAvLworICAgIC8vIFRoaXMgc2V0IG9mIGp1bXAgYW5kIGNvbmRpdGlvbmFsIGJyYW5jaCBvcGVy
YXRpb25zIHJldHVybiBhIEp1bXAKKyAgICAvLyBvYmplY3Qgd2hpY2ggbWF5IGxpbmtlZCBhdCBh
IGxhdGVyIHBvaW50LCBhbGxvdyBmb3J3YXJkcyBqdW1wLAorICAgIC8vIG9yIGp1bXBzIHRoYXQg
d2lsbCByZXF1aXJlIGV4dGVybmFsIGxpbmthZ2UgKGFmdGVyIHRoZSBjb2RlIGhhcyBiZWVuCisg
ICAgLy8gcmVsb2NhdGVkKS4KKyAgICAvLworICAgIC8vIEZvciBicmFuY2hlcywgc2lnbmVkIDws
ID4sIDw9IGFuZCA+PSBhcmUgZGVub3RlZCBhcyBsLCBnLCBsZSwgYW5kIGdlCisgICAgLy8gcmVz
cGVjaXR2ZWx5LCBmb3IgdW5zaWduZWQgY29tcGFyaXNvbnMgdGhlIG5hbWVzIGIsIGEsIGJlLCBh
bmQgYWUgYXJlCisgICAgLy8gdXNlZCAocmVwcmVzZW50aW5nIHRoZSBuYW1lcyAnYmVsb3cnIGFu
ZCAnYWJvdmUnKS4KKyAgICAvLworICAgIC8vIE9wZXJhbmRzIHRvIHRoZSBjb21wYXJpc2lvbiBh
cmUgcHJvdmlkZWQgaW4gdGhlIGV4cGVjdGVkIG9yZGVyLCBlLmcuCisgICAgLy8gamxlMzIocmVn
MSwgSW1tMzIoNSkpIHdpbGwgYnJhbmNoIGlmIHRoZSB2YWx1ZSBoZWxkIGluIHJlZzEsIHdoZW4K
KyAgICAvLyB0cmVhdGVkIGFzIGEgc2lnbmVkIDMyYml0IHZhbHVlLCBpcyBsZXNzIHRoYW4gb3Ig
ZXF1YWwgdG8gNS4KKyAgICAvLworICAgIC8vIGp6IGFuZCBqbnogdGVzdCB3aGV0aGVyIHRoZSBm
aXJzdCBvcGVyYW5kIGlzIGVxdWFsIHRvIHplcm8sIGFuZCB0YWtlCisgICAgLy8gYW4gb3B0aW9u
YWwgc2Vjb25kIG9wZXJhbmQgb2YgYSBtYXNrIHVuZGVyIHdoaWNoIHRvIHBlcmZvcm0gdGhlIHRl
c3QuCisKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQs
IFJlZ2lzdGVySUQgcmlnaHQpCisgICAgeworICAgICAgICBpZiAoY29uZCA9PSBFcXVhbCB8fCBj
b25kID09IFplcm8pCisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRXF1YWwobGVmdCwgcmlnaHQp
OworICAgICAgICBpZiAoY29uZCA9PSBOb3RFcXVhbCB8fCBjb25kID09IE5vblplcm8pCisgICAg
ICAgICAgICByZXR1cm4gYnJhbmNoTm90RXF1YWwobGVmdCwgcmlnaHQpOworICAgICAgICBpZiAo
Y29uZCA9PSBBYm92ZSkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0dShjbXBUZW1wUmVn
aXN0ZXIsIHJpZ2h0LCBsZWZ0KTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hOb3RFcXVhbChj
bXBUZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onplcm8pOworICAgICAgICB9CisgICAgICAg
IGlmIChjb25kID09IEFib3ZlT3JFcXVhbCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0
dShjbXBUZW1wUmVnaXN0ZXIsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIHJldHVybiBicmFu
Y2hFcXVhbChjbXBUZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onplcm8pOworICAgICAgICB9
CisgICAgICAgIGlmIChjb25kID09IEJlbG93KSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5z
bHR1KGNtcFRlbXBSZWdpc3RlciwgbGVmdCwgcmlnaHQpOworICAgICAgICAgICAgcmV0dXJuIGJy
YW5jaE5vdEVxdWFsKGNtcFRlbXBSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6emVybyk7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gQmVsb3dPckVxdWFsKSB7CisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5zbHR1KGNtcFRlbXBSZWdpc3RlciwgcmlnaHQsIGxlZnQpOworICAgICAgICAg
ICAgcmV0dXJuIGJyYW5jaEVxdWFsKGNtcFRlbXBSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6emVy
byk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gR3JlYXRlclRoYW4pIHsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLnNsdChjbXBUZW1wUmVnaXN0ZXIsIHJpZ2h0LCBsZWZ0KTsKKyAg
ICAgICAgICAgIHJldHVybiBicmFuY2hOb3RFcXVhbChjbXBUZW1wUmVnaXN0ZXIsIE1JUFNSZWdp
c3RlcnM6Onplcm8pOworICAgICAgICB9CisgICAgICAgIGlmIChjb25kID09IEdyZWF0ZXJUaGFu
T3JFcXVhbCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0KGNtcFRlbXBSZWdpc3Rlciwg
bGVmdCwgcmlnaHQpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEVxdWFsKGNtcFRlbXBSZWdp
c3RlciwgTUlQU1JlZ2lzdGVyczo6emVybyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbmQg
PT0gTGVzc1RoYW4pIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdChjbXBUZW1wUmVnaXN0
ZXIsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hOb3RFcXVhbChjbXBU
ZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onplcm8pOworICAgICAgICB9CisgICAgICAgIGlm
IChjb25kID09IExlc3NUaGFuT3JFcXVhbCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0
KGNtcFRlbXBSZWdpc3RlciwgcmlnaHQsIGxlZnQpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5j
aEVxdWFsKGNtcFRlbXBSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6emVybyk7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKGNvbmQgPT0gT3ZlcmZsb3cpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAg
ICAgICAgICAgeG9yICAgICBjbXBUZW1wLCBsZWZ0LCByaWdodAorICAgICAgICAgICAgICAgIGJn
ZXogICAgTm9fb3ZlcmZsb3csIGNtcFRlbXAgICAgIyBzYW1lIHNpZ24gYml0IC0+IG5vIG92ZXJm
bG93CisgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgc3VidSAgICBjbXBUZW1w
LCBsZWZ0LCByaWdodAorICAgICAgICAgICAgICAgIHhvciAgICAgY21wVGVtcCwgY21wVGVtcCwg
bGVmdAorICAgICAgICAgICAgICAgIGJnZXogICAgTm9fb3ZlcmZsb3csIGNtcFRlbXAgICAgIyBz
YW1lIHNpZ24gYml0IC0+IG5vIG92ZXJmbG93CisgICAgICAgICAgICAgICAgbm9wCisgICAgICAg
ICAgICAgICAgYiAgICAgICBPdmVyZmxvdworICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAg
ICAgICAgIG5vcAorICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgICAgIG5vcAorICAg
ICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgICBOb19vdmVyZmxvdzoKKyAgICAgICAgICAg
ICovCisgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3JfaW5zbihjbXBUZW1wUmVnaXN0ZXIsIGxl
ZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmJnZXooY21wVGVtcFJlZ2lzdGVy
LCAxMSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLnN1YnUoY21wVGVtcFJlZ2lzdGVyLCBsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBt
X2Fzc2VtYmxlci54b3JfaW5zbihjbXBUZW1wUmVnaXN0ZXIsIGNtcFRlbXBSZWdpc3RlciwgbGVm
dCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5iZ2V6KGNtcFRlbXBSZWdpc3RlciwgNyk7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgICAgIHJldHVybiBqdW1wKCk7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gU2lnbmVkKSB7CisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5zdWJ1KGNtcFRlbXBSZWdpc3RlciwgbGVmdCwgcmlnaHQpOworICAgICAgICAg
ICAgLy8gQ2hlY2sgaWYgdGhlIHJlc3VsdCBpcyBuZWdhdGl2ZS4KKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLnNsdChjbXBUZW1wUmVnaXN0ZXIsIGNtcFRlbXBSZWdpc3RlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsKKyAgICAgICAgICAgIHJldHVy
biBicmFuY2hOb3RFcXVhbChjbXBUZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onplcm8pOwor
ICAgICAgICB9CisgICAgICAgIEFTU0VSVCgwKTsKKworICAgICAgICByZXR1cm4gSnVtcCgpOwor
ICAgIH0KKworICAgIEp1bXAgYnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVm
dCwgSW1tMzIgcmlnaHQpCisgICAgeworICAgICAgICBtb3ZlKHJpZ2h0LCBpbW1UZW1wUmVnaXN0
ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgbGVmdCwgaW1tVGVtcFJlZ2lzdGVy
KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklE
IGxlZnQsIEFkZHJlc3MgcmlnaHQpCisgICAgeworICAgICAgICBsb2FkMzIocmlnaHQsIGRhdGFU
ZW1wUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgbGVmdCwgZGF0YVRl
bXBSZWdpc3Rlcik7CisgICAgfQorCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29uZCwg
QWRkcmVzcyBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0KQorICAgIHsKKyAgICAgICAgbG9hZDMyKGxl
ZnQsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgZGF0
YVRlbXBSZWdpc3RlciwgcmlnaHQpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoMzIoQ29uZGl0
aW9uIGNvbmQsIEFkZHJlc3MgbGVmdCwgSW1tMzIgcmlnaHQpCisgICAgeworICAgICAgICBsb2Fk
MzIobGVmdCwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgIG1vdmUocmlnaHQsIGltbVRlbXBS
ZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBkYXRhVGVtcFJlZ2lzdGVy
LCBpbW1UZW1wUmVnaXN0ZXIpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoMzIoQ29uZGl0aW9u
IGNvbmQsIEJhc2VJbmRleCBsZWZ0LCBJbW0zMiByaWdodCkKKyAgICB7CisgICAgICAgIGxvYWQz
MihsZWZ0LCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgLy8gQmUgY2FyZWZ1bCB0aGF0IHRo
ZSBwcmV2aW91cyBsb2FkMzIoKSB1c2VzIGltbVRlbXBSZWdpc3Rlci4KKyAgICAgICAgLy8gU28s
IHdlIG5lZWQgdG8gcHV0IG1vdmUoKSBhZnRlciBsb2FkMzIoKS4KKyAgICAgICAgbW92ZShyaWdo
dCwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIGRhdGFU
ZW1wUmVnaXN0ZXIsIGltbVRlbXBSZWdpc3Rlcik7CisgICAgfQorCisgICAgSnVtcCBicmFuY2gz
MldpdGhVbmFsaWduZWRIYWxmV29yZHMoQ29uZGl0aW9uIGNvbmQsIEJhc2VJbmRleCBsZWZ0LCBJ
bW0zMiByaWdodCkKKyAgICB7CisgICAgICAgIGxvYWQzMldpdGhVbmFsaWduZWRIYWxmV29yZHMo
bGVmdCwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgIC8vIEJlIGNhcmVmdWwgdGhhdCB0aGUg
cHJldmlvdXMgbG9hZDMyV2l0aFVuYWxpZ25lZEhhbGZXb3JkcygpCisgICAgICAgIC8vIHVzZXMg
aW1tVGVtcFJlZ2lzdGVyLgorICAgICAgICAvLyBTbywgd2UgbmVlZCB0byBwdXQgbW92ZSgpIGFm
dGVyIGxvYWQzMldpdGhVbmFsaWduZWRIYWxmV29yZHMoKS4KKyAgICAgICAgbW92ZShyaWdodCwg
aW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIGRhdGFUZW1w
UmVnaXN0ZXIsIGltbVRlbXBSZWdpc3Rlcik7CisgICAgfQorCisgICAgSnVtcCBicmFuY2gzMihD
b25kaXRpb24gY29uZCwgQWJzb2x1dGVBZGRyZXNzIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQpCisg
ICAgeworICAgICAgICBsb2FkMzIobGVmdC5tX3B0ciwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAg
ICAgIHJldHVybiBicmFuY2gzMihjb25kLCBkYXRhVGVtcFJlZ2lzdGVyLCByaWdodCk7CisgICAg
fQorCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29uZCwgQWJzb2x1dGVBZGRyZXNzIGxl
ZnQsIEltbTMyIHJpZ2h0KQorICAgIHsKKyAgICAgICAgbG9hZDMyKGxlZnQubV9wdHIsIGRhdGFU
ZW1wUmVnaXN0ZXIpOworICAgICAgICBtb3ZlKHJpZ2h0LCBpbW1UZW1wUmVnaXN0ZXIpOworICAg
ICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgZGF0YVRlbXBSZWdpc3RlciwgaW1tVGVtcFJlZ2lz
dGVyKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDE2KENvbmRpdGlvbiBjb25kLCBCYXNlSW5k
ZXggbGVmdCwgUmVnaXN0ZXJJRCByaWdodCkKKyAgICB7CisgICAgICAgIGxvYWQxNihsZWZ0LCBk
YXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIGRhdGFUZW1w
UmVnaXN0ZXIsIHJpZ2h0KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDE2KENvbmRpdGlvbiBj
b25kLCBCYXNlSW5kZXggbGVmdCwgSW1tMzIgcmlnaHQpCisgICAgeworICAgICAgICBBU1NFUlQo
IShyaWdodC5tX3ZhbHVlICYgMHhGRkZGMDAwMCkpOworICAgICAgICBsb2FkMTYobGVmdCwgZGF0
YVRlbXBSZWdpc3Rlcik7CisgICAgICAgIC8vIEJlIGNhcmVmdWwgdGhhdCB0aGUgcHJldmlvdXMg
bG9hZDE2KCkgdXNlcyBpbW1UZW1wUmVnaXN0ZXIuCisgICAgICAgIC8vIFNvLCB3ZSBuZWVkIHRv
IHB1dCBtb3ZlKCkgYWZ0ZXIgbG9hZDE2KCkuCisgICAgICAgIG1vdmUocmlnaHQsIGltbVRlbXBS
ZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBkYXRhVGVtcFJlZ2lzdGVy
LCBpbW1UZW1wUmVnaXN0ZXIpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoVGVzdDMyKENvbmRp
dGlvbiBjb25kLCBSZWdpc3RlcklEIHJlZywgUmVnaXN0ZXJJRCBtYXNrKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKChjb25kID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8pKTsKKyAgICAgICAg
bV9hc3NlbWJsZXIuYW5kX2luc24oY21wVGVtcFJlZ2lzdGVyLCByZWcsIG1hc2spOworICAgICAg
ICBpZiAoY29uZCA9PSBaZXJvKQorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEVxdWFsKGNtcFRl
bXBSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6emVybyk7CisgICAgICAgIHJldHVybiBicmFuY2hO
b3RFcXVhbChjbXBUZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onplcm8pOworICAgIH0KKwor
ICAgIEp1bXAgYnJhbmNoVGVzdDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHJlZywgSW1t
MzIgbWFzayA9IEltbTMyKC0xKSkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBaZXJv
KSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisgICAgICAgIGlmIChtYXNrLm1fdmFsdWUgPT0gLTEg
JiYgIW1fZml4ZWRXaWR0aCkgeworICAgICAgICAgICAgaWYgKGNvbmQgPT0gWmVybykKKyAgICAg
ICAgICAgICAgICByZXR1cm4gYnJhbmNoRXF1YWwocmVnLCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsK
KyAgICAgICAgICAgIHJldHVybiBicmFuY2hOb3RFcXVhbChyZWcsIE1JUFNSZWdpc3RlcnM6Onpl
cm8pOworICAgICAgICB9CisgICAgICAgIG1vdmUobWFzaywgaW1tVGVtcFJlZ2lzdGVyKTsKKyAg
ICAgICAgcmV0dXJuIGJyYW5jaFRlc3QzMihjb25kLCByZWcsIGltbVRlbXBSZWdpc3Rlcik7Cisg
ICAgfQorCisgICAgSnVtcCBicmFuY2hUZXN0MzIoQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgYWRk
cmVzcywgSW1tMzIgbWFzayA9IEltbTMyKC0xKSkKKyAgICB7CisgICAgICAgIGxvYWQzMihhZGRy
ZXNzLCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3QzMihjb25k
LCBkYXRhVGVtcFJlZ2lzdGVyLCBtYXNrKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFRlc3Qz
MihDb25kaXRpb24gY29uZCwgQmFzZUluZGV4IGFkZHJlc3MsIEltbTMyIG1hc2sgPSBJbW0zMigt
MSkpCisgICAgeworICAgICAgICBsb2FkMzIoYWRkcmVzcywgZGF0YVRlbXBSZWdpc3Rlcik7Cisg
ICAgICAgIHJldHVybiBicmFuY2hUZXN0MzIoY29uZCwgZGF0YVRlbXBSZWdpc3RlciwgbWFzayk7
CisgICAgfQorCisgICAgSnVtcCBqdW1wKCkKKyAgICB7CisgICAgICAgIHJldHVybiBicmFuY2hF
cXVhbChNSVBTUmVnaXN0ZXJzOjp6ZXJvLCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsKKyAgICB9CisK
KyAgICB2b2lkIGp1bXAoUmVnaXN0ZXJJRCB0YXJnZXQpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5qcih0YXJnZXQpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICB9CisKKyAg
ICB2b2lkIGp1bXAoQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9maXhlZFdpZHRo
ID0gdHJ1ZTsKKyAgICAgICAgbG9hZDMyKGFkZHJlc3MsIE1JUFNSZWdpc3RlcnM6OnQ5KTsKKyAg
ICAgICAgbV9hc3NlbWJsZXIuanIoTUlQU1JlZ2lzdGVyczo6dDkpOworICAgICAgICBtX2Fzc2Vt
Ymxlci5ub3AoKTsKKyAgICAgICAgbV9maXhlZFdpZHRoID0gZmFsc2U7CisgICAgfQorCisgICAg
Ly8gQXJpdGhtZXRpYyBjb250cm9sIGZsb3cgb3BlcmF0aW9uczoKKyAgICAvLworICAgIC8vIFRo
aXMgc2V0IG9mIGNvbmRpdGlvbmFsIGJyYW5jaCBvcGVyYXRpb25zIGJyYW5jaCBiYXNlZAorICAg
IC8vIG9uIHRoZSByZXN1bHQgb2YgYW4gYXJpdGhtZXRpYyBvcGVyYXRpb24uICBUaGUgb3BlcmF0
aW9uCisgICAgLy8gaXMgcGVyZm9ybWVkIGFzIG5vcm1hbCwgc3RvcmluZyB0aGUgcmVzdWx0Lgor
ICAgIC8vCisgICAgLy8gKiBqeiBvcGVyYXRpb25zIGJyYW5jaCBpZiB0aGUgcmVzdWx0IGlzIHpl
cm8uCisgICAgLy8gKiBqbyBvcGVyYXRpb25zIGJyYW5jaCBpZiB0aGUgKHNpZ25lZCkgYXJpdGht
ZXRpYworICAgIC8vICAgb3BlcmF0aW9uIGNhdXNlZCBhbiBvdmVyZmxvdyB0byBvY2N1ci4KKwor
ICAgIEp1bXAgYnJhbmNoQWRkMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgc3JjLCBSZWdp
c3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBBU1NFUlQoKGNvbmQgPT0gT3ZlcmZsb3cpIHx8
IChjb25kID09IFNpZ25lZCkgfHwgKGNvbmQgPT0gWmVybykgfHwgKGNvbmQgPT0gTm9uWmVybykp
OworICAgICAgICBpZiAoY29uZCA9PSBPdmVyZmxvdykgeworICAgICAgICAgICAgLyoKKyAgICAg
ICAgICAgICAgICBtb3ZlICAgIGRlc3QsIGRhdGFUZW1wCisgICAgICAgICAgICAgICAgeG9yICAg
ICBjbXBUZW1wLCBkYXRhVGVtcCwgc3JjCisgICAgICAgICAgICAgICAgYmx0eiAgICBjbXBUZW1w
LCBOb19vdmVyZmxvdyAgICAjIGRpZmYgc2lnbiBiaXQgLT4gbm8gb3ZlcmZsb3cKKyAgICAgICAg
ICAgICAgICBhZGR1ICAgIGRlc3QsIGRhdGFUZW1wLCBzcmMKKyAgICAgICAgICAgICAgICB4b3Ig
ICAgIGNtcFRlbXAsIGRlc3QsIGRhdGFUZW1wCisgICAgICAgICAgICAgICAgYmdleiAgICBjbXBU
ZW1wLCBOb19vdmVyZmxvdyAgICAjIHNhbWUgc2lnbiBiaWcgLT4gbm8gb3ZlcmZsb3cKKyAgICAg
ICAgICAgICAgICBub3AKKyAgICAgICAgICAgICAgICBiICAgICAgIE92ZXJmbG93CisgICAgICAg
ICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgbm9wCisg
ICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICBOb19v
dmVyZmxvdzoKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBtb3ZlKGRlc3QsIGRhdGFUZW1w
UmVnaXN0ZXIpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIueG9yX2luc24oY21wVGVtcFJlZ2lz
dGVyLCBkYXRhVGVtcFJlZ2lzdGVyLCBzcmMpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYmx0
eihjbXBUZW1wUmVnaXN0ZXIsIDEwKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoZGVz
dCwgZGF0YVRlbXBSZWdpc3Rlciwgc3JjKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnhvcl9p
bnNuKGNtcFRlbXBSZWdpc3RlciwgZGVzdCwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5iZ2V6KGNtcFRlbXBSZWdpc3RlciwgNyk7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5ub3AoKTsKKyAgICAgICAgICAgIHJldHVybiBqdW1wKCk7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKGNvbmQgPT0gU2lnbmVkKSB7CisgICAgICAgICAgICBhZGQzMihzcmMsIGRlc3Qp
OworICAgICAgICAgICAgLy8gQ2hlY2sgaWYgZGVzdCBpcyBuZWdhdGl2ZS4KKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLnNsdChjbXBUZW1wUmVnaXN0ZXIsIGRlc3QsIE1JUFNSZWdpc3RlcnM6Onpl
cm8pOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaE5vdEVxdWFsKGNtcFRlbXBSZWdpc3Rlciwg
TUlQU1JlZ2lzdGVyczo6emVybyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gWmVy
bykgeworICAgICAgICAgICAgYWRkMzIoc3JjLCBkZXN0KTsKKyAgICAgICAgICAgIHJldHVybiBi
cmFuY2hFcXVhbChkZXN0LCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoY29uZCA9PSBOb25aZXJvKSB7CisgICAgICAgICAgICBhZGQzMihzcmMsIGRlc3QpOwor
ICAgICAgICAgICAgcmV0dXJuIGJyYW5jaE5vdEVxdWFsKGRlc3QsIE1JUFNSZWdpc3RlcnM6Onpl
cm8pOworICAgICAgICB9CisgICAgICAgIEFTU0VSVCgwKTsKKyAgICAgICAgcmV0dXJuIEp1bXAo
KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaEFkZDMyKENvbmRpdGlvbiBjb25kLCBJbW0zMiBp
bW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1vdmUoaW1tLCBpbW1UZW1wUmVn
aXN0ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNoQWRkMzIoY29uZCwgaW1tVGVtcFJlZ2lzdGVy
LCBkZXN0KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaE11bDMyKENvbmRpdGlvbiBjb25kLCBS
ZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKChj
b25kID09IE92ZXJmbG93KSB8fCAoY29uZCA9PSBTaWduZWQpIHx8IChjb25kID09IFplcm8pIHx8
IChjb25kID09IE5vblplcm8pKTsKKyAgICAgICAgaWYgKGNvbmQgPT0gT3ZlcmZsb3cpIHsKKyAg
ICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgbXVsdCAgICBzcmMsIGRlc3QKKyAgICAgICAg
ICAgICAgICBtZmhpICAgIGRhdGFUZW1wCisgICAgICAgICAgICAgICAgbWZsbyAgICBkZXN0Cisg
ICAgICAgICAgICAgICAgc3JhICAgICBhZGRyVGVtcCwgZGVzdCwgMzEKKyAgICAgICAgICAgICAg
ICBiZXEgICAgIGRhdGFUZW1wLCBhZGRyVGVtcCwgTm9fb3ZlcmZsb3cgIyBhbGwgc2lnbiBiaXRz
IChiaXQgNjMgdG8gYml0IDMxKSBhcmUgdGhlIHNhbWUgLT4gbm8gb3ZlcmZsb3cKKyAgICAgICAg
ICAgICAgICBub3AKKyAgICAgICAgICAgICAgICBiICAgICAgIE92ZXJmbG93CisgICAgICAgICAg
ICAgICAgbm9wCisgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgbm9wCisgICAg
ICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICBOb19vdmVy
ZmxvdzoKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tdWx0KHNyYywg
ZGVzdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tZmhpKGRhdGFUZW1wUmVnaXN0ZXIpOwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIubWZsbyhkZXN0KTsKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLnNyYShhZGRyVGVtcFJlZ2lzdGVyLCBkZXN0LCAzMSk7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5iZXEoZGF0YVRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgNyk7CisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgICAgIHJldHVybiBqdW1wKCk7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gU2lnbmVkKSB7CisgICAgICAgICAgICBtdWwzMihz
cmMsIGRlc3QpOworICAgICAgICAgICAgLy8gQ2hlY2sgaWYgZGVzdCBpcyBuZWdhdGl2ZS4KKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdChjbXBUZW1wUmVnaXN0ZXIsIGRlc3QsIE1JUFNSZWdp
c3RlcnM6Onplcm8pOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaE5vdEVxdWFsKGNtcFRlbXBS
ZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6emVybyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNv
bmQgPT0gWmVybykgeworICAgICAgICAgICAgbXVsMzIoc3JjLCBkZXN0KTsKKyAgICAgICAgICAg
IHJldHVybiBicmFuY2hFcXVhbChkZXN0LCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoY29uZCA9PSBOb25aZXJvKSB7CisgICAgICAgICAgICBtdWwzMihzcmMs
IGRlc3QpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaE5vdEVxdWFsKGRlc3QsIE1JUFNSZWdp
c3RlcnM6Onplcm8pOworICAgICAgICB9CisgICAgICAgIEFTU0VSVCgwKTsKKyAgICAgICAgcmV0
dXJuIEp1bXAoKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaE11bDMyKENvbmRpdGlvbiBjb25k
LCBJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBtb3ZlKGltbSwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgbW92ZShzcmMsIGRlc3Qp
OworICAgICAgICByZXR1cm4gYnJhbmNoTXVsMzIoY29uZCwgaW1tVGVtcFJlZ2lzdGVyLCBkZXN0
KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFN1YjMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3Rl
cklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKChjb25kID09
IE92ZXJmbG93KSB8fCAoY29uZCA9PSBTaWduZWQpIHx8IChjb25kID09IFplcm8pIHx8IChjb25k
ID09IE5vblplcm8pKTsKKyAgICAgICAgaWYgKGNvbmQgPT0gT3ZlcmZsb3cpIHsKKyAgICAgICAg
ICAgIC8qCisgICAgICAgICAgICAgICAgbW92ZSAgICBkZXN0LCBkYXRhVGVtcAorICAgICAgICAg
ICAgICAgIHhvciAgICAgY21wVGVtcCwgZGF0YVRlbXAsIHNyYworICAgICAgICAgICAgICAgIGJn
ZXogICAgY21wVGVtcCwgTm9fb3ZlcmZsb3cgICAgIyBzYW1lIHNpZ24gYml0IC0+IG5vIG92ZXJm
bG93CisgICAgICAgICAgICAgICAgc3VidSAgICBkZXN0LCBkYXRhVGVtcCwgc3JjCisgICAgICAg
ICAgICAgICAgeG9yICAgICBjbXBUZW1wLCBkZXN0LCBkYXRhVGVtcAorICAgICAgICAgICAgICAg
IGJnZXogICAgY21wVGVtcCwgTm9fb3ZlcmZsb3cgICAgIyBzYW1lIHNpZ24gYml0IC0+IG5vIG92
ZXJmbG93CisgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgYiAgICAgICBPdmVy
ZmxvdworICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAg
ICAgICAgIG5vcAorICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgICAgIG5vcAorICAg
ICAgICAgICAgTm9fb3ZlcmZsb3c6CisgICAgICAgICAgICAqLworICAgICAgICAgICAgbW92ZShk
ZXN0LCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnhvcl9pbnNu
KGNtcFRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3Rlciwgc3JjKTsKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLmJnZXooY21wVGVtcFJlZ2lzdGVyLCAxMCk7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5zdWJ1KGRlc3QsIGRhdGFUZW1wUmVnaXN0ZXIsIHNyYyk7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci54b3JfaW5zbihjbXBUZW1wUmVnaXN0ZXIsIGRlc3QsIGRhdGFUZW1wUmVnaXN0ZXIp
OworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYmdleihjbXBUZW1wUmVnaXN0ZXIsIDcpOworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgICAgICByZXR1cm4ganVtcCgpOwor
ICAgICAgICB9CisgICAgICAgIGlmIChjb25kID09IFNpZ25lZCkgeworICAgICAgICAgICAgc3Vi
MzIoc3JjLCBkZXN0KTsKKyAgICAgICAgICAgIC8vIENoZWNrIGlmIGRlc3QgaXMgbmVnYXRpdmUu
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHQoY21wVGVtcFJlZ2lzdGVyLCBkZXN0LCBNSVBT
UmVnaXN0ZXJzOjp6ZXJvKTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hOb3RFcXVhbChjbXBU
ZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onplcm8pOworICAgICAgICB9CisgICAgICAgIGlm
IChjb25kID09IFplcm8pIHsKKyAgICAgICAgICAgIHN1YjMyKHNyYywgZGVzdCk7CisgICAgICAg
ICAgICByZXR1cm4gYnJhbmNoRXF1YWwoZGVzdCwgTUlQU1JlZ2lzdGVyczo6emVybyk7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gTm9uWmVybykgeworICAgICAgICAgICAgc3ViMzIo
c3JjLCBkZXN0KTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hOb3RFcXVhbChkZXN0LCBNSVBT
UmVnaXN0ZXJzOjp6ZXJvKTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQoMCk7CisgICAgICAg
IHJldHVybiBKdW1wKCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hTdWIzMihDb25kaXRpb24g
Y29uZCwgSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtb3ZlKGlt
bSwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFN1YjMyKGNvbmQsIGlt
bVRlbXBSZWdpc3RlciwgZGVzdCk7CisgICAgfQorCisgICAgLy8gTWlzY2VsbGFuZW91cyBvcGVy
YXRpb25zOgorCisgICAgdm9pZCBicmVha3BvaW50KCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLmJrcHQoKTsKKyAgICB9CisKKyAgICBDYWxsIG5lYXJDYWxsKCkKKyAgICB7CisgICAgICAg
IC8qIFdlIG5lZWQgdHdvIHdvcmRzIGZvciByZWxheGF0aW9uLiAgKi8KKyAgICAgICAgbV9hc3Nl
bWJsZXIubm9wKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICBtX2Fzc2Vt
Ymxlci5qYWwoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIHJldHVybiBD
YWxsKG1fYXNzZW1ibGVyLm5ld0ptcFNyYygpLCBDYWxsOjpMaW5rYWJsZU5lYXIpOworICAgIH0K
KworICAgIENhbGwgY2FsbCgpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sdWkoTUlQU1Jl
Z2lzdGVyczo6dDksIDApOworICAgICAgICBtX2Fzc2VtYmxlci5vcmkoTUlQU1JlZ2lzdGVyczo6
dDksIE1JUFNSZWdpc3RlcnM6OnQ5LCAwKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuamFscihNSVBT
UmVnaXN0ZXJzOjp0OSk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICByZXR1
cm4gQ2FsbChtX2Fzc2VtYmxlci5uZXdKbXBTcmMoKSwgQ2FsbDo6TGlua2FibGUpOworICAgIH0K
KworICAgIENhbGwgY2FsbChSZWdpc3RlcklEIHRhcmdldCkKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmphbHIodGFyZ2V0KTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAg
IHJldHVybiBDYWxsKG1fYXNzZW1ibGVyLm5ld0ptcFNyYygpLCBDYWxsOjpOb25lKTsKKyAgICB9
CisKKyAgICBDYWxsIGNhbGwoQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9maXhl
ZFdpZHRoID0gdHJ1ZTsKKyAgICAgICAgbG9hZDMyKGFkZHJlc3MsIE1JUFNSZWdpc3RlcnM6OnQ5
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuamFscihNSVBTUmVnaXN0ZXJzOjp0OSk7CisgICAgICAg
IG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICBtX2ZpeGVkV2lkdGggPSBmYWxzZTsKKyAgICAg
ICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIubmV3Sm1wU3JjKCksIENhbGw6Ok5vbmUpOworICAg
IH0KKworICAgIHZvaWQgcmV0KCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmpyKE1JUFNS
ZWdpc3RlcnM6OnJhKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgfQorCisgICAg
dm9pZCBzZXQzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBSZWdpc3RlcklEIHJp
Z2h0LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAoY29uZCA9PSBFcXVhbCB8
fCBjb25kID09IFplcm8pIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnhvcl9pbnNuKGRlc3Qs
IGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdGl1KGRlc3QsIGRlc3Qs
IDEpOworICAgICAgICB9IGVsc2UgaWYgKGNvbmQgPT0gTm90RXF1YWwgfHwgY29uZCA9PSBOb25a
ZXJvKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3JfaW5zbihkZXN0LCBsZWZ0LCByaWdo
dCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHR1KGRlc3QsIE1JUFNSZWdpc3RlcnM6Onpl
cm8sIGRlc3QpOworICAgICAgICB9IGVsc2UgaWYgKGNvbmQgPT0gQWJvdmUpCisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5zbHR1KGRlc3QsIHJpZ2h0LCBsZWZ0KTsKKyAgICAgICAgZWxzZSBpZiAo
Y29uZCA9PSBBYm92ZU9yRXF1YWwpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdHUoZGVz
dCwgbGVmdCwgcmlnaHQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIueG9yaShkZXN0LCBkZXN0
LCAxKTsKKyAgICAgICAgfSBlbHNlIGlmIChjb25kID09IEJlbG93KQorICAgICAgICAgICAgbV9h
c3NlbWJsZXIuc2x0dShkZXN0LCBsZWZ0LCByaWdodCk7CisgICAgICAgIGVsc2UgaWYgKGNvbmQg
PT0gQmVsb3dPckVxdWFsKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHR1KGRlc3QsIHJp
Z2h0LCBsZWZ0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnhvcmkoZGVzdCwgZGVzdCwgMSk7
CisgICAgICAgIH0gZWxzZSBpZiAoY29uZCA9PSBHcmVhdGVyVGhhbikKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLnNsdChkZXN0LCByaWdodCwgbGVmdCk7CisgICAgICAgIGVsc2UgaWYgKGNvbmQg
PT0gR3JlYXRlclRoYW5PckVxdWFsKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHQoZGVz
dCwgbGVmdCwgcmlnaHQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIueG9yaShkZXN0LCBkZXN0
LCAxKTsKKyAgICAgICAgfSBlbHNlIGlmIChjb25kID09IExlc3NUaGFuKQorICAgICAgICAgICAg
bV9hc3NlbWJsZXIuc2x0KGRlc3QsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgZWxzZSBpZiAoY29u
ZCA9PSBMZXNzVGhhbk9yRXF1YWwpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdChkZXN0
LCByaWdodCwgbGVmdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3JpKGRlc3QsIGRlc3Qs
IDEpOworICAgICAgICB9IGVsc2UgaWYgKGNvbmQgPT0gT3ZlcmZsb3cpIHsKKyAgICAgICAgICAg
IC8qCisgICAgICAgICAgICAgICAgeG9yICAgICBjbXBUZW1wLCBsZWZ0LCByaWdodAorICAgICAg
ICAgICAgICAgIGJnZXogICAgRG9uZSwgY21wVGVtcCAgICMgc2FtZSBzaWduIGJpdCAtPiBubyBv
dmVyZmxvdworICAgICAgICAgICAgICAgIG1vdmUgICAgZGVzdCwgMAorICAgICAgICAgICAgICAg
IHN1YnUgICAgY21wVGVtcCwgbGVmdCwgcmlnaHQKKyAgICAgICAgICAgICAgICB4b3IgICAgIGNt
cFRlbXAsIGNtcFRlbXAsIGxlZnQgIyBkaWZmIHNpZ24gYml0IC0+IG92ZXJmbG93CisgICAgICAg
ICAgICAgICAgc2x0ICAgICBkZXN0LCBjbXBUZW1wLCAwCisgICAgICAgICAgICAgIERvbmU6Cisg
ICAgICAgICAgICAqLworICAgICAgICAgICAgbV9hc3NlbWJsZXIueG9yX2luc24oY21wVGVtcFJl
Z2lzdGVyLCBsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5iZ2V6KGNtcFRl
bXBSZWdpc3RlciwgNCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZlKGRlc3QsIE1JUFNS
ZWdpc3RlcnM6Onplcm8pOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3VidShjbXBUZW1wUmVn
aXN0ZXIsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnhvcl9pbnNuKGNt
cFRlbXBSZWdpc3RlciwgY21wVGVtcFJlZ2lzdGVyLCBsZWZ0KTsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLnNsdChkZXN0LCBjbXBUZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onplcm8pOwor
ICAgICAgICB9IGVsc2UgaWYgKGNvbmQgPT0gU2lnbmVkKSB7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5zdWJ1KGRlc3QsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIC8vIENoZWNrIGlmIHRo
ZSByZXN1bHQgaXMgbmVnYXRpdmUuCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHQoZGVzdCwg
ZGVzdCwgTUlQU1JlZ2lzdGVyczo6emVybyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lk
IHNldDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIEltbTMyIHJpZ2h0LCBSZWdp
c3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtb3ZlKHJpZ2h0LCBpbW1UZW1wUmVnaXN0ZXIp
OworICAgICAgICBzZXQzMihjb25kLCBsZWZ0LCBpbW1UZW1wUmVnaXN0ZXIsIGRlc3QpOworICAg
IH0KKworICAgIHZvaWQgc2V0VGVzdDMyKENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGFkZHJlc3Ms
IEltbTMyIG1hc2ssIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoY29u
ZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisgICAgICAgIGxvYWQzMihhZGRyZXNz
LCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgaWYgKG1hc2subV92YWx1ZSA9PSAtMSAmJiAh
bV9maXhlZFdpZHRoKSB7CisgICAgICAgICAgICBpZiAoY29uZCA9PSBaZXJvKQorICAgICAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLnNsdGl1KGRlc3QsIGRhdGFUZW1wUmVnaXN0ZXIsIDEpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdHUoZGVzdCwgTUlQ
U1JlZ2lzdGVyczo6emVybywgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBtb3ZlKG1hc2ssIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5hbmRfaW5zbihjbXBUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICAg
ICAgaWYgKGNvbmQgPT0gWmVybykKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHRpdShk
ZXN0LCBjbXBUZW1wUmVnaXN0ZXIsIDEpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLnNsdHUoZGVzdCwgTUlQU1JlZ2lzdGVyczo6emVybywgY21wVGVtcFJl
Z2lzdGVyKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIERhdGFMYWJlbDMyIG1vdmVXaXRoUGF0
Y2goSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2ZpeGVkV2lk
dGggPSB0cnVlOworICAgICAgICBEYXRhTGFiZWwzMiBsYWJlbCh0aGlzKTsKKyAgICAgICAgbW92
ZShpbW0sIGRlc3QpOworICAgICAgICBtX2ZpeGVkV2lkdGggPSBmYWxzZTsKKyAgICAgICAgcmV0
dXJuIGxhYmVsOworICAgIH0KKworICAgIERhdGFMYWJlbFB0ciBtb3ZlV2l0aFBhdGNoKEltbVB0
ciBpbml0aWFsVmFsdWUsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fZml4ZWRX
aWR0aCA9IHRydWU7CisgICAgICAgIERhdGFMYWJlbFB0ciBsYWJlbCh0aGlzKTsKKyAgICAgICAg
bW92ZShpbml0aWFsVmFsdWUsIGRlc3QpOworICAgICAgICBtX2ZpeGVkV2lkdGggPSBmYWxzZTsK
KyAgICAgICAgcmV0dXJuIGxhYmVsOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoUHRyV2l0aFBh
dGNoKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIERhdGFMYWJlbFB0ciYgZGF0YUxh
YmVsLCBJbW1QdHIgaW5pdGlhbFJpZ2h0VmFsdWUgPSBJbW1QdHIoMCkpCisgICAgeworICAgICAg
ICBtX2ZpeGVkV2lkdGggPSB0cnVlOworICAgICAgICBkYXRhTGFiZWwgPSBtb3ZlV2l0aFBhdGNo
KGluaXRpYWxSaWdodFZhbHVlLCBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICBKdW1wIHRlbXAg
PSBicmFuY2gzMihjb25kLCBsZWZ0LCBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICBtX2ZpeGVk
V2lkdGggPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRlbXA7CisgICAgfQorCisgICAgSnVtcCBi
cmFuY2hQdHJXaXRoUGF0Y2goQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgbGVmdCwgRGF0YUxhYmVs
UHRyJiBkYXRhTGFiZWwsIEltbVB0ciBpbml0aWFsUmlnaHRWYWx1ZSA9IEltbVB0cigwKSkKKyAg
ICB7CisgICAgICAgIG1fZml4ZWRXaWR0aCA9IHRydWU7CisgICAgICAgIGxvYWQzMihsZWZ0LCBk
YXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgZGF0YUxhYmVsID0gbW92ZVdpdGhQYXRjaChpbml0
aWFsUmlnaHRWYWx1ZSwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgSnVtcCB0ZW1wID0gYnJh
bmNoMzIoY29uZCwgZGF0YVRlbXBSZWdpc3RlciwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAg
bV9maXhlZFdpZHRoID0gZmFsc2U7CisgICAgICAgIHJldHVybiB0ZW1wOworICAgIH0KKworICAg
IERhdGFMYWJlbFB0ciBzdG9yZVB0cldpdGhQYXRjaChJbW1QdHIgaW5pdGlhbFZhbHVlLCBJbXBs
aWNpdEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fZml4ZWRXaWR0aCA9IHRydWU7
CisgICAgICAgIERhdGFMYWJlbFB0ciBkYXRhTGFiZWwgPSBtb3ZlV2l0aFBhdGNoKGluaXRpYWxW
YWx1ZSwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgIHN0b3JlMzIoZGF0YVRlbXBSZWdpc3Rl
ciwgYWRkcmVzcyk7CisgICAgICAgIG1fZml4ZWRXaWR0aCA9IGZhbHNlOworICAgICAgICByZXR1
cm4gZGF0YUxhYmVsOworICAgIH0KKworICAgIERhdGFMYWJlbFB0ciBzdG9yZVB0cldpdGhQYXRj
aChJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIHJldHVybiBzdG9yZVB0
cldpdGhQYXRjaChJbW1QdHIoMCksIGFkZHJlc3MpOworICAgIH0KKworICAgIENhbGwgdGFpbFJl
Y3Vyc2l2ZUNhbGwoKQorICAgIHsKKyAgICAgICAgLy8gTGlrZSBhIG5vcm1hbCBjYWxsLCBidXQg
ZG9uJ3QgdXBkYXRlIHRoZSByZXR1cm5lZCBhZGRyZXNzIHJlZ2lzdGVyCisgICAgICAgIG1fZml4
ZWRXaWR0aCA9IHRydWU7CisgICAgICAgIG1vdmUoSW1tMzIoMCksIE1JUFNSZWdpc3RlcnM6OnQ5
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuanIoTUlQU1JlZ2lzdGVyczo6dDkpOworICAgICAgICBt
X2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgbV9maXhlZFdpZHRoID0gZmFsc2U7CisgICAgICAg
IHJldHVybiBDYWxsKG1fYXNzZW1ibGVyLm5ld0ptcFNyYygpLCBDYWxsOjpMaW5rYWJsZSk7Cisg
ICAgfQorCisgICAgQ2FsbCBtYWtlVGFpbFJlY3Vyc2l2ZUNhbGwoSnVtcCBvbGRKdW1wKQorICAg
IHsKKyAgICAgICAgb2xkSnVtcC5saW5rKHRoaXMpOworICAgICAgICByZXR1cm4gdGFpbFJlY3Vy
c2l2ZUNhbGwoKTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWREb3VibGUoSW1wbGljaXRBZGRyZXNz
IGFkZHJlc3MsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyNpZiBfX21pcHMgPT0gMQorICAg
ICAgICAvKgorICAgICAgICAgICAgbGkgICAgICAgICAgYWRkclRlbXAsIGFkZHJlc3Mub2Zmc2V0
CisgICAgICAgICAgICBhZGR1ICAgICAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGJhc2UKKyAgICAg
ICAgICAgIGx3YzEgICAgICAgIGRlc3QsIDAoYWRkclRlbXApCisgICAgICAgICAgICBsd2MxICAg
ICAgICBkZXN0KzEsIDQoYWRkclRlbXApCisgICAgICAgICAqLworICAgICAgICBtb3ZlKEltbTMy
KGFkZHJlc3Mub2Zmc2V0KSwgYWRkclRlbXBSZWdpc3Rlcik7CisgICAgICAgIG1fYXNzZW1ibGVy
LmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlKTsK
KyAgICAgICAgbV9hc3NlbWJsZXIubHdjMShkZXN0LCBhZGRyVGVtcFJlZ2lzdGVyLCAwKTsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubHdjMShGUFJlZ2lzdGVySUQoZGVzdCArIDEpLCBhZGRyVGVtcFJl
Z2lzdGVyLCA0KTsKKyNlbHNlCisgICAgICAgIGlmIChhZGRyZXNzLm9mZnNldCA+PSAtMzI3Njgg
JiYgYWRkcmVzcy5vZmZzZXQgPD0gMzI3NjcKKyAgICAgICAgICAgICYmICFtX2ZpeGVkV2lkdGgp
IHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxkYzEoZGVzdCwgYWRkcmVzcy5iYXNlLCBhZGRy
ZXNzLm9mZnNldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKgorICAgICAgICAg
ICAgICAgIGx1aSAgICAgYWRkclRlbXAsIChvZmZzZXQgKyAweDgwMDApID4+IDE2CisgICAgICAg
ICAgICAgICAgYWRkdSAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGJhc2UKKyAgICAgICAgICAgICAg
ICBsZGMxICAgIGRlc3QsIChvZmZzZXQgJiAweGZmZmYpKGFkZHJUZW1wKQorICAgICAgICAgICAg
ICAqLworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHVpKGFkZHJUZW1wUmVnaXN0ZXIsIChhZGRy
ZXNzLm9mZnNldCArIDB4ODAwMCkgPj4gMTYpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRk
dShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UpOworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIubGRjMShkZXN0LCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNz
Lm9mZnNldCk7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKworICAgIHZvaWQgc3RvcmVEb3Vi
bGUoRlBSZWdpc3RlcklEIHNyYywgSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MpCisgICAgeworI2lm
IF9fbWlwcyA9PSAxCisgICAgICAgIC8qCisgICAgICAgICAgICBsaSAgICAgICAgICBhZGRyVGVt
cCwgYWRkcmVzcy5vZmZzZXQKKyAgICAgICAgICAgIGFkZHUgICAgICAgIGFkZHJUZW1wLCBhZGRy
VGVtcCwgYmFzZQorICAgICAgICAgICAgc3djMSAgICAgICAgZGVzdCwgMChhZGRyVGVtcCkKKyAg
ICAgICAgICAgIHN3YzEgICAgICAgIGRlc3QrMSwgNChhZGRyVGVtcCkKKyAgICAgICAgICovCisg
ICAgICAgIG1vdmUoSW1tMzIoYWRkcmVzcy5vZmZzZXQpLCBhZGRyVGVtcFJlZ2lzdGVyKTsKKyAg
ICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVy
LCBhZGRyZXNzLmJhc2UpOworICAgICAgICBtX2Fzc2VtYmxlci5zd2MxKHNyYywgYWRkclRlbXBS
ZWdpc3RlciwgMCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnN3YzEoRlBSZWdpc3RlcklEKHNyYyAr
IDEpLCBhZGRyVGVtcFJlZ2lzdGVyLCA0KTsKKyNlbHNlCisgICAgICAgIGlmIChhZGRyZXNzLm9m
ZnNldCA+PSAtMzI3NjggJiYgYWRkcmVzcy5vZmZzZXQgPD0gMzI3NjcKKyAgICAgICAgICAgICYm
ICFtX2ZpeGVkV2lkdGgpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zZGMxKHNyYywgYWRkcmVz
cy5iYXNlLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLyoK
KyAgICAgICAgICAgICAgICBsdWkgICAgIGFkZHJUZW1wLCAob2Zmc2V0ICsgMHg4MDAwKSA+PiAx
NgorICAgICAgICAgICAgICAgIGFkZHUgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBiYXNlCisgICAg
ICAgICAgICAgICAgc2RjMSAgICBzcmMsIChvZmZzZXQgJiAweGZmZmYpKGFkZHJUZW1wKQorICAg
ICAgICAgICAgICAqLworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHVpKGFkZHJUZW1wUmVnaXN0
ZXIsIChhZGRyZXNzLm9mZnNldCArIDB4ODAwMCkgPj4gMTYpOworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJh
c2UpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2RjMShzcmMsIGFkZHJUZW1wUmVnaXN0ZXIs
IGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorCisgICAgdm9pZCBh
ZGREb3VibGUoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBtX2Fzc2VtYmxlci5hZGRfZChkZXN0LCBkZXN0LCBzcmMpOworICAgIH0KKworICAgIHZv
aWQgYWRkRG91YmxlKEFkZHJlc3Mgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIGxvYWREb3VibGUoc3JjLCBmcFRlbXBSZWdpc3Rlcik7CisgICAgICAgIG1fYXNzZW1ibGVy
LmFkZF9kKGRlc3QsIGRlc3QsIGZwVGVtcFJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICB2b2lkIHN1
YkRvdWJsZShGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLnN1Yl9kKGRlc3QsIGRlc3QsIHNyYyk7CisgICAgfQorCisgICAgdm9p
ZCBzdWJEb3VibGUoQWRkcmVzcyBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAg
ICAgbG9hZERvdWJsZShzcmMsIGZwVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIu
c3ViX2QoZGVzdCwgZGVzdCwgZnBUZW1wUmVnaXN0ZXIpOworICAgIH0KKworICAgIHZvaWQgbXVs
RG91YmxlKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubXVsX2QoZGVzdCwgZGVzdCwgc3JjKTsKKyAgICB9CisKKyAgICB2b2lk
IG11bERvdWJsZShBZGRyZXNzIHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAg
ICBsb2FkRG91YmxlKHNyYywgZnBUZW1wUmVnaXN0ZXIpOworICAgICAgICBtX2Fzc2VtYmxlci5t
dWxfZChkZXN0LCBkZXN0LCBmcFRlbXBSZWdpc3Rlcik7CisgICAgfQorCisgICAgdm9pZCBjb252
ZXJ0SW50MzJUb0RvdWJsZShSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5tdGMxKHNyYywgZnBUZW1wUmVnaXN0ZXIpOworICAgICAg
ICBtX2Fzc2VtYmxlci5jdnRfZF93KGRlc3QsIGZwVGVtcFJlZ2lzdGVyKTsKKyAgICB9CisKKyAg
ICB2b2lkIGluc2VydFJlbGF4YXRpb25Xb3JkcygpCisgICAgeworICAgICAgICAvKiBXZSBuZWVk
IGZvdXIgd29yZHMgZm9yIHJlbGF4YXRpb24uICovCisgICAgICAgIG1fYXNzZW1ibGVyLmJlcShN
SVBTUmVnaXN0ZXJzOjp6ZXJvLCBNSVBTUmVnaXN0ZXJzOjp6ZXJvLCAzKTsgLy8gSnVtcCBvdmVy
IG5vcHM7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICBtX2Fzc2VtYmxlci5u
b3AoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgfQorCisgICAgSnVtcCBicmFu
Y2hUcnVlKCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFwcGVuZEp1bXAoKTsKKyAgICAg
ICAgbV9hc3NlbWJsZXIuYmMxdCgpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAg
ICAgaW5zZXJ0UmVsYXhhdGlvbldvcmRzKCk7CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1i
bGVyLm5ld0ptcFNyYygpKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaEZhbHNlKCkKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLmFwcGVuZEp1bXAoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIu
YmMxZigpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgaW5zZXJ0UmVsYXhh
dGlvbldvcmRzKCk7CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLm5ld0ptcFNyYygp
KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaEVxdWFsKFJlZ2lzdGVySUQgcnMsIFJlZ2lzdGVy
SUQgcnQpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hcHBlbmRKdW1wKCk7CisgICAgICAg
IG1fYXNzZW1ibGVyLmJlcShycywgcnQsIDApOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsK
KyAgICAgICAgaW5zZXJ0UmVsYXhhdGlvbldvcmRzKCk7CisgICAgICAgIHJldHVybiBKdW1wKG1f
YXNzZW1ibGVyLm5ld0ptcFNyYygpKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaE5vdEVxdWFs
KFJlZ2lzdGVySUQgcnMsIFJlZ2lzdGVySUQgcnQpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5hcHBlbmRKdW1wKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmJuZShycywgcnQsIDApOworICAg
ICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgaW5zZXJ0UmVsYXhhdGlvbldvcmRzKCk7
CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLm5ld0ptcFNyYygpKTsKKyAgICB9CisK
KyAgICBKdW1wIGJyYW5jaERvdWJsZShEb3VibGVDb25kaXRpb24gY29uZCwgRlBSZWdpc3RlcklE
IGxlZnQsIEZQUmVnaXN0ZXJJRCByaWdodCkKKyAgICB7CisgICAgICAgIGlmIChjb25kID09IERv
dWJsZUVxdWFsKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jX2VxX2QobGVmdCwgcmlnaHQp
OworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoY29uZCA9PSBEb3VibGVOb3RFcXVhbCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY19l
cV9kKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hGYWxzZSgpOyAvLyBm
YWxzZQorICAgICAgICB9CisgICAgICAgIGlmIChjb25kID09IERvdWJsZUdyZWF0ZXJUaGFuKSB7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jX25ndF9kKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAg
ICAgIHJldHVybiBicmFuY2hGYWxzZSgpOyAvLyBmYWxzZQorICAgICAgICB9CisgICAgICAgIGlm
IChjb25kID09IERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCkgeworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIuY19uZ2VfZChyaWdodCwgbGVmdCk7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFs
c2UoKTsgLy8gZmFsc2UKKyAgICAgICAgfQorICAgICAgICBpZiAoY29uZCA9PSBEb3VibGVMZXNz
VGhhbikgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY19sdF9kKGxlZnQsIHJpZ2h0KTsKKyAg
ICAgICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNv
bmQgPT0gRG91YmxlTGVzc1RoYW5PckVxdWFsKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5j
X2xlX2QobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoY29uZCA9PSBEb3VibGVFcXVhbE9yVW5vcmRlcmVkKSB7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5jX3VlcV9kKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAg
IHJldHVybiBicmFuY2hUcnVlKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gRG91
YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY19v
bGVfZChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsgLy8g
ZmFsc2UKKyAgICAgICAgfQorICAgICAgICBpZiAoY29uZCA9PSBEb3VibGVHcmVhdGVyVGhhbk9y
RXF1YWxPclVub3JkZXJlZCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY19vbHRfZChsZWZ0
LCByaWdodCk7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsgLy8gZmFsc2UKKyAg
ICAgICAgfQorICAgICAgICBpZiAoY29uZCA9PSBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkKSB7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jX3VsdF9kKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAg
ICAgIHJldHVybiBicmFuY2hUcnVlKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0g
RG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQpIHsKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLmNfdWxlX2QobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUo
KTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQoMCk7CisKKyAgICAgICAgcmV0dXJuIEp1bXAo
KTsKKyAgICB9CisKKyAgICAvLyBUcnVuY2F0ZXMgJ3NyYycgdG8gYW4gaW50ZWdlciwgYW5kIHBs
YWNlcyB0aGUgcmVzdWx0aW5nICdkZXN0Jy4KKyAgICAvLyBJZiB0aGUgcmVzdWx0IGlzIG5vdCBy
ZXByZXNlbnRhYmxlIGFzIGEgMzIgYml0IHZhbHVlLCBicmFuY2guCisgICAgLy8gTWF5IGFsc28g
YnJhbmNoIGZvciBzb21lIHZhbHVlcyB0aGF0IGFyZSByZXByZXNlbnRhYmxlIGluIDMyIGJpdHMK
KyAgICAvLyAoc3BlY2lmaWNhbGx5LCBpbiB0aGlzIGNhc2UsIElOVF9NQVggMHg3ZmZmZmZmZiku
CisgICAgSnVtcCBicmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50MzIoRlBSZWdpc3RlcklEIHNyYywg
UmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIudHJ1bmNfd19kKGZw
VGVtcFJlZ2lzdGVyLCBzcmMpOworICAgICAgICBtX2Fzc2VtYmxlci5tZmMxKGRlc3QsIGZwVGVt
cFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKEVxdWFsLCBkZXN0LCBJbW0zMigw
eDdmZmZmZmZmKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIC8vIElmIG1fZml4ZWRXaWR0aCBp
cyB0cnVlLCB3ZSB3aWxsIGdlbmVyYXRlIGEgZml4ZWQgbnVtYmVyIG9mIGluc3RydWN0aW9ucy4K
KyAgICAvLyBPdGhlcndpc2UsIHdlIGNhbiBlbWl0IGFueSBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25z
LgorICAgIGJvb2wgbV9maXhlZFdpZHRoOworCisgICAgZnJpZW5kIGNsYXNzIExpbmtCdWZmZXI7
CisgICAgZnJpZW5kIGNsYXNzIFJlcGF0Y2hCdWZmZXI7CisKKyAgICBzdGF0aWMgdm9pZCBsaW5r
Q2FsbCh2b2lkKiBjb2RlLCBDYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGZ1bmN0aW9uKQorICAgIHsK
KyAgICAgICAgTUlQU0Fzc2VtYmxlcjo6bGlua0NhbGwoY29kZSwgY2FsbC5tX2ptcCwgZnVuY3Rp
b24udmFsdWUoKSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxv
Y2F0aW9uQ2FsbCBjYWxsLCBDb2RlTG9jYXRpb25MYWJlbCBkZXN0aW5hdGlvbikKKyAgICB7Cisg
ICAgICAgIE1JUFNBc3NlbWJsZXI6OnJlbGlua0NhbGwoY2FsbC5kYXRhTG9jYXRpb24oKSwgZGVz
dGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQg
cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbCBjYWxsLCBGdW5jdGlvblB0ciBkZXN0aW5hdGlv
bikKKyAgICB7CisgICAgICAgIE1JUFNBc3NlbWJsZXI6OnJlbGlua0NhbGwoY2FsbC5kYXRhTG9j
YXRpb24oKSwgZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgfQorCit9Owor
Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQVNTRU1CTEVSKSAmJiBDUFUoTUlQUykKKworI2VuZGlm
IC8vIE1hY3JvQXNzZW1ibGVyTUlQU19oCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0
YWJsZUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRh
YmxlQWxsb2NhdG9yLmgJKHJldmlzaW9uIDU0MTQwKQorKysgSmF2YVNjcmlwdENvcmUvaml0L0V4
ZWN1dGFibGVBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsMTAgQEAKICNp
bmNsdWRlIDxlMzJzdGQuaD4KICNlbmRpZgogCisjaWYgQ1BVKE1JUFMpICYmIE9TKExJTlVYKQor
I2luY2x1ZGUgPHN5cy9jYWNoZWN0bC5oPgorI2VuZGlmCisKICNpZiBPUyhXSU5DRSkKIC8vIEZy
b20gcGtmdW5jcy5oIChwcml2YXRlIGhlYWRlciBmaWxlIGZyb20gdGhlIFBsYXRmb3JtIEJ1aWxk
ZXIpCiAjZGVmaW5lIENBQ0hFX1NZTkNfQUxMIDB4MDdGCkBAIC0xOTAsNiArMTk0LDMyIEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgdm9pZCBjYWNoZUZsdXNoKHZvaWQqLCBzaXplX3QpCiAgICAgewog
ICAgIH0KKyNlbGlmIENQVShNSVBTKQorICAgIHN0YXRpYyB2b2lkIGNhY2hlRmx1c2godm9pZCog
Y29kZSwgc2l6ZV90IHNpemUpCisgICAgeworI2lmIENPTVBJTEVSKEdDQykgJiYgKEdDQ19WRVJT
SU9OID49IDQwMzAwKQorI2lmIF9fbWlwc19pc2FfcmV2ID09IDIgJiYgKEdDQ19WRVJTSU9OIDwg
NDA0MDMpCisgICAgICAgIGludCBsaW5lX3NpemU7CisgICAgICAgIGFzbSAoInJkaHdyICUwLCAk
MSIgOiAiPXIiIChsaW5lX3NpemUpKTsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gTW9kaWZ5ICJz
dGFydCIgYW5kICJlbmQiIHRvIGF2b2lkIEdDQyA0LjMuMC00LjQuMiBidWcgaW4KKyAgICAgICAg
Ly8gbWlwc19leHBhbmRfc3luY2lfbG9vcCB0aGF0IG1heSBleGVjdXRlIHN5bmNpIG9uZSBtb3Jl
IHRpbWUuCisgICAgICAgIC8vICJzdGFydCIgcG9pbnRzIHRvIHRoZSBmaXNydCBieXRlIG9mIHRo
ZSBjYWNoZSBsaW5lLgorICAgICAgICAvLyAiZW5kIiBwb2ludHMgdG8gdGhlIGxhc3QgYnl0ZSBv
ZiB0aGUgbGluZSBiZWZvcmUgdGhlIGxhc3QgY2FjaGUgbGluZS4KKyAgICAgICAgLy8gQmVjYXVz
ZSBzaXplIGlzIGFsd2F5cyBhIG11bHRpcGxlIG9mIDQsIHRoaXMgaXMgc2FmZSB0byBzZXQKKyAg
ICAgICAgLy8gImVuZCIgdG8gdGhlIGxhc3QgYnl0ZS4KKyAgICAgICAgLy8KKyAgICAgICAgaW50
cHRyX3Qgc3RhcnQgPSByZWludGVycHJldF9jYXN0PGludHB0cl90Pihjb2RlKSAmICgtbGluZV9z
aXplKTsKKyAgICAgICAgaW50cHRyX3QgZW5kID0gKChyZWludGVycHJldF9jYXN0PGludHB0cl90
Pihjb2RlKSArIHNpemUgLSAxKSAmICgtbGluZV9zaXplKSkgLSAxOworICAgICAgICBfX2NsZWFy
X2NhY2hlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHN0YXJ0KSwgcmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4oZW5kKSk7CisjZWxzZQorICAgICAgICBpbnRwdHJfdCBlbmQgPSByZWludGVycHJldF9j
YXN0PGludHB0cl90Pihjb2RlKSArIHNpemU7CisgICAgICAgIF9fY2xlYXJfY2FjaGUocmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4oY29kZSksIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGVuZCkpOwor
I2VuZGlmCisjZWxzZQorICAgICAgICBfZmx1c2hfY2FjaGUocmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4oY29kZSksIHNpemUsIEJDQUNIRSk7CisjZW5kaWYKKyAgICB9CiAjZWxpZiBDUFUoQVJNX1RI
VU1CMikgJiYgT1MoSVBIT05FX09TKQogICAgIHN0YXRpYyB2b2lkIGNhY2hlRmx1c2godm9pZCog
Y29kZSwgc2l6ZV90IHNpemUpCiAgICAgewpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gNTQxNDAp
CisrKyBKYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTI2OCw2ICsy
NjgsMjggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVy
SUQgZnBSZWdUMCA9IEFSTVJlZ2lzdGVyczo6ZDA7CiAgICAgICAgIHN0YXRpYyBjb25zdCBGUFJl
Z2lzdGVySUQgZnBSZWdUMSA9IEFSTVJlZ2lzdGVyczo6ZDE7CiAgICAgICAgIHN0YXRpYyBjb25z
dCBGUFJlZ2lzdGVySUQgZnBSZWdUMiA9IEFSTVJlZ2lzdGVyczo6ZDI7CisjZWxpZiBDUFUoTUlQ
UykKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmV0dXJuVmFsdWVSZWdpc3RlciA9
IE1JUFNSZWdpc3RlcnM6OnYwOworICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBjYWNo
ZWRSZXN1bHRSZWdpc3RlciA9IE1JUFNSZWdpc3RlcnM6OnYwOworICAgICAgICBzdGF0aWMgY29u
c3QgUmVnaXN0ZXJJRCBmaXJzdEFyZ3VtZW50UmVnaXN0ZXIgPSBNSVBTUmVnaXN0ZXJzOjphMDsK
KworICAgICAgICAvLyByZWdUMCBtdXN0IGJlIHYwIGZvciByZXR1cm5pbmcgYSAzMi1iaXQgdmFs
dWUuCisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1QwID0gTUlQU1JlZ2lzdGVy
czo6djA7CisKKyAgICAgICAgLy8gcmVnVDEgbXVzdCBiZSB2MSBmb3IgcmV0dXJuaW5nIGEgcGFp
ciBvZiAzMi1iaXQgdmFsdWUuCisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1Qx
ID0gTUlQU1JlZ2lzdGVyczo6djE7CisKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQg
cmVnVDIgPSBNSVBTUmVnaXN0ZXJzOjp0NDsKKworICAgICAgICAvLyByZWdUMyBtdXN0IGJlIHNh
dmVkIGluIHRoZSBjYWxsZWUsIHNvIHVzZSBhbiBTIHJlZ2lzdGVyLgorICAgICAgICBzdGF0aWMg
Y29uc3QgUmVnaXN0ZXJJRCByZWdUMyA9IE1JUFNSZWdpc3RlcnM6OnMyOworCisgICAgICAgIHN0
YXRpYyBjb25zdCBSZWdpc3RlcklEIGNhbGxGcmFtZVJlZ2lzdGVyID0gTUlQU1JlZ2lzdGVyczo6
czA7CisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHRpbWVvdXRDaGVja1JlZ2lzdGVy
ID0gTUlQU1JlZ2lzdGVyczo6czE7CisKKyAgICAgICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJ
RCBmcFJlZ1QwID0gTUlQU1JlZ2lzdGVyczo6ZjQ7CisgICAgICAgIHN0YXRpYyBjb25zdCBGUFJl
Z2lzdGVySUQgZnBSZWdUMSA9IE1JUFNSZWdpc3RlcnM6OmY2OworICAgICAgICBzdGF0aWMgY29u
c3QgRlBSZWdpc3RlcklEIGZwUmVnVDIgPSBNSVBTUmVnaXN0ZXJzOjpmODsKICNlbHNlCiAgICAg
I2Vycm9yICJKSVQgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtLiIKICNlbmRpZgpAQCAt
Njg2LDYgKzcwOCw0OCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gc2VxdWVuY2VQdXRC
eUlkCiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgc2VxdWVuY2VQdXRCeUlkSW5zdHJ1Y3Rpb25T
cGFjZSA9IDI4OwogICAgICAgICBzdGF0aWMgY29uc3QgaW50IHNlcXVlbmNlUHV0QnlJZENvbnN0
YW50U3BhY2UgPSAzOworI2VsaWYgQ1BVKE1JUFMpCisjaWYgX19taXBzID09IDEKKyAgICAgICAg
c3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldFB1dEJ5SWRTdHJ1Y3R1cmUgPSAxNjsKKyAgICAg
ICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldFB1dEJ5SWRFeHRlcm5hbExvYWQgPSA0ODsK
KyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaExlbmd0aFB1dEJ5SWRFeHRlcm5hbExvYWQg
PSAyMDsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldFB1dEJ5SWRQcm9wZXJ0
eU1hcE9mZnNldCA9IDY4OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0
QnlJZFN0cnVjdHVyZSA9IDE2OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0
R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2UgPSA0ODsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBw
YXRjaE9mZnNldEdldEJ5SWRFeHRlcm5hbExvYWQgPSA0ODsKKyAgICAgICAgc3RhdGljIGNvbnN0
IGludCBwYXRjaExlbmd0aEdldEJ5SWRFeHRlcm5hbExvYWQgPSAyMDsKKyAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRQcm9wZXJ0eU1hcE9mZnNldCA9IDY4OworICAg
ICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZFB1dFJlc3VsdCA9IDg4Owor
I2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCisgICAgICAgICNlcnJvciAiT1BDT0RFX1NBTVBM
SU5HIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIgorI2Vsc2UKKyAgICAgICAgc3RhdGljIGNvbnN0IGlu
dCBwYXRjaE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwgPSA0MDsKKyNlbmRpZgorICAgICAgICBz
dGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0T3BDYWxsQ29tcGFyZVRvSnVtcCA9IDMyOworICAg
ICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0TWV0aG9kQ2hlY2tQcm90b09iaiA9IDMy
OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0TWV0aG9kQ2hlY2tQcm90b1N0
cnVjdCA9IDU2OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0TWV0aG9kQ2hl
Y2tQdXRGdW5jdGlvbiA9IDg4OworI2Vsc2UgLy8gX19taXBzID09IDEKKyAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBwYXRjaE9mZnNldFB1dEJ5SWRTdHJ1Y3R1cmUgPSAxMjsKKyAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBwYXRjaE9mZnNldFB1dEJ5SWRFeHRlcm5hbExvYWQgPSA0NDsKKyAgICAg
ICAgc3RhdGljIGNvbnN0IGludCBwYXRjaExlbmd0aFB1dEJ5SWRFeHRlcm5hbExvYWQgPSAxNjsK
KyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldFB1dEJ5SWRQcm9wZXJ0eU1hcE9m
ZnNldCA9IDYwOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZFN0
cnVjdHVyZSA9IDEyOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJ
ZEJyYW5jaFRvU2xvd0Nhc2UgPSA0NDsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9m
ZnNldEdldEJ5SWRFeHRlcm5hbExvYWQgPSA0NDsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBw
YXRjaExlbmd0aEdldEJ5SWRFeHRlcm5hbExvYWQgPSAxNjsKKyAgICAgICAgc3RhdGljIGNvbnN0
IGludCBwYXRjaE9mZnNldEdldEJ5SWRQcm9wZXJ0eU1hcE9mZnNldCA9IDYwOworICAgICAgICBz
dGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZFB1dFJlc3VsdCA9IDc2OworI2lmIEVO
QUJMRShPUENPREVfU0FNUExJTkcpCisgICAgICAgICNlcnJvciAiT1BDT0RFX1NBTVBMSU5HIGlz
IG5vdCB5ZXQgc3VwcG9ydGVkIgorI2Vsc2UKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRj
aE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwgPSA0MDsKKyNlbmRpZgorICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IHBhdGNoT2Zmc2V0T3BDYWxsQ29tcGFyZVRvSnVtcCA9IDMyOworICAgICAgICBz
dGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0TWV0aG9kQ2hlY2tQcm90b09iaiA9IDMyOworICAg
ICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0TWV0aG9kQ2hlY2tQcm90b1N0cnVjdCA9
IDUyOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0TWV0aG9kQ2hlY2tQdXRG
dW5jdGlvbiA9IDg0OworI2VuZGlmCiAjZW5kaWYKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0
KQogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDU0
MTQwKQorKysgSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaAkod29ya2luZyBj
b3B5KQpAQCAtMTYxLDYgKzE2MSwyMyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpyZXN0b3Jl
UmV0dXJuQWRkCiAgICAgbG9hZFB0cihhZGRyZXNzLCBsaW5rUmVnaXN0ZXIpOwogfQogCisjZWxp
ZiBDUFUoTUlQUykKKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cHJlc2VydmVSZXR1cm5BZGRy
ZXNzQWZ0ZXJDYWxsKFJlZ2lzdGVySUQgcmVnKQoreworICAgIG1vdmUocmV0dXJuQWRkcmVzc1Jl
Z2lzdGVyLCByZWcpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpyZXN0b3JlUmV0dXJu
QWRkcmVzc0JlZm9yZVJldHVybihSZWdpc3RlcklEIHJlZykKK3sKKyAgICBtb3ZlKHJlZywgcmV0
dXJuQWRkcmVzc1JlZ2lzdGVyKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cmVzdG9y
ZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oQWRkcmVzcyBhZGRyZXNzKQoreworICAgIGxvYWRQ
dHIoYWRkcmVzcywgcmV0dXJuQWRkcmVzc1JlZ2lzdGVyKTsKK30KKwogI2Vsc2UgLy8gQ1BVKFg4
NikgfHwgQ1BVKFg4Nl82NCkKIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cHJlc2VydmVSZXR1
cm5BZGRyZXNzQWZ0ZXJDYWxsKFJlZ2lzdGVySUQgcmVnKQpJbmRleDogSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzLmNwcAkocmV2aXNpb24gNTQxNDApCisrKyBKYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bj
b2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NjksNiArMTc2OSw1NiBAQCB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvCiAKICAgICBhZGRQdHIoSW1tMzIoc2l6ZW9m
KEFyZ0xpc3QpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCisjZWxpZiBDUFUoTUlQUykKKyAg
ICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcjMyKFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3Vu
dCwgcmVnVDApOworCisgICAgLy8gQWxsb2NhdGUgc3RhY2sgc3BhY2UgZm9yIG91ciBhcmdsaXN0
CisgICAgQ09NUElMRV9BU1NFUlQoKHNpemVvZihBcmdMaXN0KSAmIDB4NykgPT0gMCwgQXJnTGlz
dF9zaG91bGRfYnlfOGJ5dGVfYWxpZ25lZCk7CisgICAgc3ViUHRyKEltbTMyKHNpemVvZihBcmdM
aXN0KSArIDI0KSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgLy8gU2V0IHVwIGFyZ3Vt
ZW50cworICAgIHN1YlB0cihJbW0zMigxKSwgcmVnVDApOyAvLyBEb24ndCBpbmNsdWRlICd0aGlz
JyBpbiBhcmdjb3VudAorCisgICAgLy8gUHVzaCBhcmdjb3VudCB0byAyNCArIG9mZnNldCgkc3Ap
CisgICAgc3RvcmVQdHIocmVnVDAsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIDI0ICsg
T0JKRUNUX09GRlNFVE9GKEFyZ0xpc3QsIG1fYXJnQ291bnQpKSk7CisKKyAgICAvLyBDYWxjdWxh
dGUgdGhlIHN0YXJ0IG9mIHRoZSBjYWxsZnJhbWUgaGVhZGVyLCBhbmQgc3RvcmUgaW4gcmVnVDEK
KyAgICBtb3ZlKGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMSk7CisgICAgc3ViMzIoSW1tMzIoUmVn
aXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplICogKGludDMyX3Qpc2l6ZW9mKFJlZ2lzdGVy
KSksIHJlZ1QxKTsKKworICAgIC8vIENhbGN1bGF0ZSBzdGFydCBvZiBhcmd1bWVudHMgYXMgY2Fs
bGZyYW1lIGhlYWRlciAtIHNpemVvZihSZWdpc3RlcikgKiBhcmdjb3VudCAocmVnVDEpCisgICAg
bXVsMzIoSW1tMzIoc2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1QwLCByZWdUMCk7CisgICAgc3ViUHRy
KHJlZ1QwLCByZWdUMSk7CisKKyAgICAvLyBwdXNoIHBvaW50ZXIgdG8gYXJndW1lbnRzIHRvIDI0
ICsgb2Zmc2V0KCRzcCkKKyAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhzdGFja1BvaW50ZXJS
ZWdpc3RlciwgMjQgKyBPQkpFQ1RfT0ZGU0VUT0YoQXJnTGlzdCwgbV9hcmdzKSkpOworCisgICAg
Ly8gU2V0dXAgYXJnMzogcmVnVDEgY3VycmVudGx5IHBvaW50cyB0byB0aGUgZmlyc3QgYXJndW1l
bnQsIHJlZ1QxLXNpemVvZihSZWdpc3RlcikgcG9pbnRzIHRvICd0aGlzJworICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMSwgLShpbnQzMl90KXNpemVvZihSZWdpc3RlcikpLCBNSVBTUmVnaXN0ZXJz
OjphMyk7CisKKyAgICAvLyBTZXR1cCBhcmcyOgorICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVh
ZGVyUHRyKFJlZ2lzdGVyRmlsZTo6Q2FsbGVlLCBNSVBTUmVnaXN0ZXJzOjphMik7CisKKyAgICAv
LyBTZXR1cCBhcmcxOgorICAgIG1vdmUoY2FsbEZyYW1lUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6
OmExKTsKKworICAgIC8vIFNldHVwIGFyZzQ6IEFyZ0xpc3QgaXMgcGFzc2VkIGJ5IHJlZmVyZW5j
ZS4gIEF0IDE2KCRzcCksIHN0b3JlICgkc3AgKyAyNCkKKyAgICBhZGRQdHIoSW1tMzIoMjQpLCBz
dGFja1BvaW50ZXJSZWdpc3RlciwgcmVnVDIpOworICAgIHN0b3JlUHRyKHJlZ1QyLCBBZGRyZXNz
KHN0YWNrUG9pbnRlclJlZ2lzdGVyLCAxNikpOworCisgICAgLy8gU2V0dXAgYXJnMCBhcyAyMCgk
c3ApIHRvIGhvbGQgdGhlIHJldHVybmVkIHN0cnVjdHVyZS4KKyAgICBBU1NFUlQoc2l6ZW9mKEpT
VmFsdWUpID09IDQpOworICAgIGFkZFB0cihJbW0zMigyMCksIHN0YWNrUG9pbnRlclJlZ2lzdGVy
LCBNSVBTUmVnaXN0ZXJzOjphMCk7CisKKyAgICAvLyBDYWxsCisgICAgY2FsbChBZGRyZXNzKE1J
UFNSZWdpc3RlcnM6OmEyLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9kYXRhKSkpOwor
CisgICAgLy8gR2V0IHJldHVybmVkIHZhbHVlIGZyb20gMCgkdjApIHdoaWNoIGlzIHRoZSBzYW1l
IGFzIDIwKCRzcCkKKyAgICBsb2FkUHRyKEFkZHJlc3MocmV0dXJuVmFsdWVSZWdpc3RlciwgMCks
IHJldHVyblZhbHVlUmVnaXN0ZXIpOworCisgICAgLy8gUmVzdG9yZSBzdGFjayBzcGFjZQorICAg
IGFkZFB0cihJbW0zMihzaXplb2YoQXJnTGlzdCkgKyAyNCksIHN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKKwogI2VsaWYgRU5BQkxFKEpJVF9PUFRJTUlaRV9OQVRJVkVfQ0FMTCkKICNlcnJvciAiSklU
X09QVElNSVpFX05BVElWRV9DQUxMIG5vdCB5ZXQgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0u
IgogI2Vsc2UKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gNTQxNDApCisr
KyBKYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NDEs
NiArNjQxLDEwMCBAQCBTWU1CT0xfU1RSSU5HKGN0aU9wVGhyb3dOb3RDYXVnaHQpICI6IiAiCiAg
ICAgIm1vdiBwYywgbHIiICJcbiIKICk7CiAKKyNlbGlmIENQVShNSVBTKQorCisjaWYgVVNFKEpJ
VF9TVFVCX0FSR1VNRU5UX1ZBX0xJU1QpCisjZXJyb3IgIkpJVF9TVFVCX0FSR1VNRU5UX1ZBX0xJ
U1Qgbm90IHN1cHBvcnRlZCBvbiBNSVBTLiIKKyNlbmRpZgorCithc20gdm9sYXRpbGUgKAorIi50
ZXh0IiAiXG4iCisiLmFsaWduIDIiICJcbiIKKyIuc2V0IG5vcmVvcmRlciIgIlxuIgorIi5zZXQg
bm9tYWNybyIgIlxuIgorIi5zZXQgbm9taXBzMTYiICJcbiIKKyIuZ2xvYmwgIiBTWU1CT0xfU1RS
SU5HKGN0aVRyYW1wb2xpbmUpICJcbiIKKyIuZW50ICIgU1lNQk9MX1NUUklORyhjdGlUcmFtcG9s
aW5lKSAiXG4iCitTWU1CT0xfU1RSSU5HKGN0aVRyYW1wb2xpbmUpICI6IiAiXG4iCisgICAgImFk
ZGl1ICQyOSwkMjksLTcyIiAiXG4iCisgICAgInN3ICAgICQzMSw0NCgkMjkpIiAiXG4iCisgICAg
InN3ICAgICQxOCw0MCgkMjkpIiAiXG4iCisgICAgInN3ICAgICQxNywzNigkMjkpIiAiXG4iCisg
ICAgInN3ICAgICQxNiwzMigkMjkpIiAiXG4iCisjaWYgZGVmaW5lZChfX1BJQ19fKQorICAgICJz
dyAgICAkMjgsMjgoJDI5KSIgIlxuIgorI2VuZGlmCisgICAgIm1vdmUgICQxNiwkNiAgICAgICAj
IHNldCBjYWxsRnJhbWVSZWdpc3RlciIgIlxuIgorICAgICJsaSAgICAkMTcsNTEyICAgICAgIyBz
ZXQgdGltZW91dENoZWNrUmVnaXN0ZXIiICJcbiIKKyAgICAibW92ZSAgJDI1LCQ0ICAgICAgICMg
bW92ZSBleGVjdXRhYmxlQWRkcmVzcyB0byB0OSIgIlxuIgorICAgICJzdyAgICAkNSw1MigkMjkp
ICAgIyBzdG9yZSByZWdpc3RlckZpbGUgdG8gY3VycmVudCBzdGFjayIgIlxuIgorICAgICJzdyAg
ICAkNiw1NigkMjkpICAgIyBzdG9yZSBjYWxsRnJhbWUgdG8gY3VyZW50IHN0YWNrIiAiXG4iCisg
ICAgInN3ICAgICQ3LDYwKCQyOSkgICAjIHN0b3JlIGV4Y2VwdGlvbiB0byBjdXJyZW50IHN0YWNr
IiAiXG4iCisgICAgImx3ICAgICQ4LDg4KCQyOSkgICAjIGxvYWQgZW5hYmxlUHJvZmlsZXJSZWZl
cmVuY2UgZnJvbSBwcmV2aW91cyBzdGFjayIgIlxuIgorICAgICJsdyAgICAkOSw5MigkMjkpICAg
IyBsb2FkIGdsb2JhbERhdGEgZnJvbSBwcmV2aW91cyBzdGFjayIgIlxuIgorICAgICJzdyAgICAk
OCw2NCgkMjkpICAgIyBzdG9yZSBlbmFibGVQcm9maWxlclJlZmVyZW5jZSB0byBjdXJyZW50IHN0
YWNrIiAiXG4iCisgICAgImphbHIgICQyNSIgIlxuIgorICAgICJzdyAgICAkOSw2OCgkMjkpICAg
IyBzdG9yZSBnbG9iYWxEYXRhIHRvIGN1cnJlbnQgc3RhY2siICJcbiIKKyAgICAibHcgICAgJDE2
LDMyKCQyOSkiICJcbiIKKyAgICAibHcgICAgJDE3LDM2KCQyOSkiICJcbiIKKyAgICAibHcgICAg
JDE4LDQwKCQyOSkiICJcbiIKKyAgICAibHcgICAgJDMxLDQ0KCQyOSkiICJcbiIKKyAgICAianIg
ICAgJDMxIiAiXG4iCisgICAgImFkZGl1ICQyOSwkMjksNzIiICJcbiIKKyIuc2V0IHJlb3JkZXIi
ICJcbiIKKyIuc2V0IG1hY3JvIiAiXG4iCisiLmVuZCAiIFNZTUJPTF9TVFJJTkcoY3RpVHJhbXBv
bGluZSkgIlxuIgorKTsKKworYXNtIHZvbGF0aWxlICgKKyIudGV4dCIgIlxuIgorIi5hbGlnbiAy
IiAiXG4iCisiLnNldCBub3Jlb3JkZXIiICJcbiIKKyIuc2V0IG5vbWFjcm8iICJcbiIKKyIuc2V0
IG5vbWlwczE2IiAiXG4iCisiLmdsb2JsICIgU1lNQk9MX1NUUklORyhjdGlWTVRocm93VHJhbXBv
bGluZSkgIlxuIgorIi5lbnQgIiBTWU1CT0xfU1RSSU5HKGN0aVZNVGhyb3dUcmFtcG9saW5lKSAi
XG4iCitTWU1CT0xfU1RSSU5HKGN0aVZNVGhyb3dUcmFtcG9saW5lKSAiOiIgIlxuIgorI2lmIGRl
ZmluZWQoX19QSUNfXykKKyAgICAibHcgICAgJDI4LDI4KCQyOSkiICJcbiIKKyIuc2V0IG1hY3Jv
IiAiXG4iCisjZW5kaWYKKyAgICAiamFsICIgU1lNQk9MX1NUUklORyhjdGlfdm1fdGhyb3cpICJc
biIKKyAgICAibW92ZSAgJDQsICQyOSIgIlxuIgorI2lmIGRlZmluZWQoX19QSUNfXykKKyIuc2V0
IG5vbWFjcm8iICJcbiIKKyNlbmRpZgorICAgICJsdyAgICAkMTYsMzIoJDI5KSIgIlxuIgorICAg
ICJsdyAgICAkMTcsMzYoJDI5KSIgIlxuIgorICAgICJsdyAgICAkMTgsNDAoJDI5KSIgIlxuIgor
ICAgICJsdyAgICAkMzEsNDQoJDI5KSIgIlxuIgorICAgICJqciAgICAkMzEiICJcbiIKKyAgICAi
YWRkaXUgJDI5LCQyOSw3MiIgIlxuIgorIi5zZXQgcmVvcmRlciIgIlxuIgorIi5zZXQgbWFjcm8i
ICJcbiIKKyIuZW5kICIgU1lNQk9MX1NUUklORyhjdGlWTVRocm93VHJhbXBvbGluZSkgIlxuIgor
KTsKKworYXNtIHZvbGF0aWxlICgKKyIudGV4dCIgIlxuIgorIi5hbGlnbiAyIiAiXG4iCisiLnNl
dCBub3Jlb3JkZXIiICJcbiIKKyIuc2V0IG5vbWFjcm8iICJcbiIKKyIuc2V0IG5vbWlwczE2IiAi
XG4iCisiLmdsb2JsICIgU1lNQk9MX1NUUklORyhjdGlPcFRocm93Tm90Q2F1Z2h0KSAiXG4iCisi
LmVudCAiIFNZTUJPTF9TVFJJTkcoY3RpT3BUaHJvd05vdENhdWdodCkgIlxuIgorU1lNQk9MX1NU
UklORyhjdGlPcFRocm93Tm90Q2F1Z2h0KSAiOiIgIlxuIgorICAgICJsdyAgICAkMTYsMzIoJDI5
KSIgIlxuIgorICAgICJsdyAgICAkMTcsMzYoJDI5KSIgIlxuIgorICAgICJsdyAgICAkMTgsNDAo
JDI5KSIgIlxuIgorICAgICJsdyAgICAkMzEsNDQoJDI5KSIgIlxuIgorICAgICJqciAgICAkMzEi
ICJcbiIKKyAgICAiYWRkaXUgJDI5LCQyOSw3MiIgIlxuIgorIi5zZXQgcmVvcmRlciIgIlxuIgor
Ii5zZXQgbWFjcm8iICJcbiIKKyIuZW5kICIgU1lNQk9MX1NUUklORyhjdGlPcFRocm93Tm90Q2F1
Z2h0KSAiXG4iCispOworCiAjZWxpZiBDT01QSUxFUihSVkNUKSAmJiBDUFUoQVJNX1RSQURJVElP
TkFMKQogCiBfX2FzbSBFbmNvZGVkSlNWYWx1ZSBjdGlUcmFtcG9saW5lKHZvaWQqLCBSZWdpc3Rl
ckZpbGUqLCBDYWxsRnJhbWUqLCBKU1ZhbHVlKiwgUHJvZmlsZXIqKiwgSlNHbG9iYWxEYXRhKikK
QEAgLTc3Niw2ICs4NzAsMjEgQEAgSklUVGh1bmtzOjpKSVRUaHVua3MoSlNHbG9iYWxEYXRhKiBn
bG9iYQogCiAgICAgQVNTRVJUKE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwg
dGh1bmtSZXR1cm5BZGRyZXNzKSA9PSAweDFDKTsKICNlbmRpZgorCisjaWYgQ1BVKE1JUFMpCisg
ICAgQVNTRVJUKE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgcHJlc2VydmVk
R1ApID09IDI4KTsKKyAgICBBU1NFUlQoT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0Zy
YW1lLCBwcmVzZXJ2ZWRTMCkgPT0gMzIpOworICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3Ry
dWN0IEpJVFN0YWNrRnJhbWUsIHByZXNlcnZlZFMxKSA9PSAzNik7CisgICAgQVNTRVJUKE9CSkVD
VF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgcHJlc2VydmVkUzIpID09IDQwKTsKKyAg
ICBBU1NFUlQoT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBwcmVzZXJ2ZWRS
ZXR1cm5BZGRyZXNzKSA9PSA0NCk7CisgICAgQVNTRVJUKE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3Qg
SklUU3RhY2tGcmFtZSwgdGh1bmtSZXR1cm5BZGRyZXNzKSA9PSA0OCk7CisgICAgQVNTRVJUKE9C
SkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgcmVnaXN0ZXJGaWxlKSA9PSA1Mik7
CisgICAgQVNTRVJUKE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgY2FsbEZy
YW1lKSA9PSA1Nik7CisgICAgQVNTRVJUKE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tG
cmFtZSwgZXhjZXB0aW9uKSA9PSA2MCk7CisgICAgQVNTRVJUKE9CSkVDVF9PRkZTRVRPRihzdHJ1
Y3QgSklUU3RhY2tGcmFtZSwgZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlKSA9PSA2NCk7CisgICAg
QVNTRVJUKE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgZ2xvYmFsRGF0YSkg
PT0gNjgpOworCisjZW5kaWYKIH0KIAogI2lmIEVOQUJMRShKSVRfT1BUSU1JWkVfUFJPUEVSVFlf
QUNDRVNTKQpAQCAtMTAzMSw2ICsxMTQwLDYwIEBAIHN0YXRpYyBORVZFUl9JTkxJTkUgdm9pZCB0
aHJvd1N0YWNrT3ZlcmYKICAgICAgICAgKTsgXAogICAgIHJ0eXBlIEpJVFN0dWJUaHVua2VkXyMj
b3AoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBcCiAKKyNlbGlmIENQVShNSVBTKQorI2lmICFkZWZp
bmVkKF9fUElDX18pCisjZGVmaW5lIERFRklORV9TVFVCX0ZVTkNUSU9OKHJ0eXBlLCBvcCkgXAor
ICAgIGV4dGVybiAiQyIgeyBcCisgICAgICAgIHJ0eXBlIEpJVFN0dWJUaHVua2VkXyMjb3AoU1RV
Ql9BUkdTX0RFQ0xBUkFUSU9OKTsgXAorICAgIH07IFwKKyAgICBhc20gdm9sYXRpbGUgKCBcCisg
ICAgICAgICIudGV4dCIgIlxuIiBcCisgICAgICAgICIuYWxpZ24gMiIgIlxuIiBcCisgICAgICAg
ICIuc2V0IG5vcmVvcmRlciIgIlxuIiBcCisgICAgICAgICIuc2V0IG5vbWFjcm8iICJcbiIgXAor
ICAgICAgICAiLnNldCBub21pcHMxNiIgIlxuIiBcCisgICAgICAgICIuZ2xvYmwgIiBTWU1CT0xf
U1RSSU5HKGN0aV8jI29wKSAiXG4iIFwKKyAgICAgICAgIi5lbnQgIiBTWU1CT0xfU1RSSU5HKGN0
aV8jI29wKSAiXG4iIFwKKyAgICAgICAgU1lNQk9MX1NUUklORyhjdGlfIyNvcCkgIjoiICJcbiIg
XAorICAgICAgICAic3cgICAgJDMxLCA0OCgkMjkpIiAiXG4iIFwKKyAgICAgICAgImphbCAiIFNZ
TUJPTF9TVFJJTkcoSklUU3R1YlRodW5rZWRfIyNvcCkgIlxuIiBcCisgICAgICAgICJub3AiICJc
biIgXAorICAgICAgICAibHcgICAgJDMxLCA0OCgkMjkpIiAiXG4iIFwKKyAgICAgICAgImpyICAg
ICQzMSIgIlxuIiBcCisgICAgICAgICJub3AiICJcbiIgXAorICAgICAgICAiLnNldCByZW9yZGVy
IiAiXG4iIFwKKyAgICAgICAgIi5zZXQgbWFjcm8iICJcbiIgXAorICAgICAgICAiLmVuZCAiIFNZ
TUJPTF9TVFJJTkcoY3RpXyMjb3ApICJcbiIgXAorICAgICAgICApOyBcCisgICAgcnR5cGUgSklU
U3R1YlRodW5rZWRfIyNvcChTVFVCX0FSR1NfREVDTEFSQVRJT04pCisKKyNlbHNlIC8vIF9fUElD
X18KKyNkZWZpbmUgREVGSU5FX1NUVUJfRlVOQ1RJT04ocnR5cGUsIG9wKSBcCisgICAgZXh0ZXJu
ICJDIiB7IFwKKyAgICAgICAgcnR5cGUgSklUU3R1YlRodW5rZWRfIyNvcChTVFVCX0FSR1NfREVD
TEFSQVRJT04pOyBcCisgICAgfTsgXAorICAgIGFzbSB2b2xhdGlsZSAoIFwKKyAgICAgICAgIi50
ZXh0IiAiXG4iIFwKKyAgICAgICAgIi5hbGlnbiAyIiAiXG4iIFwKKyAgICAgICAgIi5zZXQgbm9y
ZW9yZGVyIiAiXG4iIFwKKyAgICAgICAgIi5zZXQgbm9taXBzMTYiICJcbiIgXAorICAgICAgICAi
Lmdsb2JsICIgU1lNQk9MX1NUUklORyhjdGlfIyNvcCkgIlxuIiBcCisgICAgICAgICIuZW50ICIg
U1lNQk9MX1NUUklORyhjdGlfIyNvcCkgIlxuIiBcCisgICAgICAgIFNZTUJPTF9TVFJJTkcoY3Rp
XyMjb3ApICI6IiAiXG4iIFwKKyAgICAgICAgImx3ICAgICQyOCwgMjgoJDI5KSIgIlxuIiBcCisg
ICAgICAgICJzdyAgICAkMzEsIDQ4KCQyOSkiICJcbiIgXAorICAgICAgICAiamFsICIgU1lNQk9M
X1NUUklORyhKSVRTdHViVGh1bmtlZF8jI29wKSAiXG4iIFwKKyAgICAgICAgIm5vcCIgIlxuIiBc
CisgICAgICAgICJsdyAgICAkMzEsIDQ4KCQyOSkiICJcbiIgXAorICAgICAgICAianIgICAgJDMx
IiAiXG4iIFwKKyAgICAgICAgIm5vcCIgIlxuIiBcCisgICAgICAgICIuc2V0IHJlb3JkZXIiICJc
biIgXAorICAgICAgICAiLmVuZCAiIFNZTUJPTF9TVFJJTkcoY3RpXyMjb3ApICJcbiIgXAorICAg
ICAgICApOyBcCisgICAgcnR5cGUgSklUU3R1YlRodW5rZWRfIyNvcChTVFVCX0FSR1NfREVDTEFS
QVRJT04pCisKKyNlbmRpZgorCiAjZWxpZiBDUFUoQVJNX1RSQURJVElPTkFMKSAmJiBDT01QSUxF
UihHQ0MpCiAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0
L0pJVFN0dWJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgJ
KHJldmlzaW9uIDU0MTQwKQorKysgSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE4Myw2ICsxODMsMzAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8v
IFdoZW4gSklUIGNvZGUgbWFrZXMgYSBjYWxsLCBpdCBwdXNoZXMgaXRzIHJldHVybiBhZGRyZXNz
IGp1c3QgYmVsb3cgdGhlIHJlc3Qgb2YgdGhlIHN0YWNrLgogICAgICAgICBSZXR1cm5BZGRyZXNz
UHRyKiByZXR1cm5BZGRyZXNzU2xvdCgpIHsgcmV0dXJuICZ0aHVua1JldHVybkFkZHJlc3M7IH0K
ICAgICB9OworI2VsaWYgQ1BVKE1JUFMpCisgICAgc3RydWN0IEpJVFN0YWNrRnJhbWUgeworICAg
ICAgICB2b2lkKiByZXNlcnZlZDsgLy8gVW51c2VkCisgICAgICAgIEpJVFN0dWJBcmcgYXJnc1s2
XTsKKworICAgICAgICB2b2lkKiBwcmVzZXJ2ZWRHUDsgLy8gc3RvcmUgR1Agd2hlbiB1c2luZyBQ
SUMgY29kZQorICAgICAgICB2b2lkKiBwcmVzZXJ2ZWRTMDsKKyAgICAgICAgdm9pZCogcHJlc2Vy
dmVkUzE7CisgICAgICAgIHZvaWQqIHByZXNlcnZlZFMyOworICAgICAgICB2b2lkKiBwcmVzZXJ2
ZWRSZXR1cm5BZGRyZXNzOworCisgICAgICAgIFJldHVybkFkZHJlc3NQdHIgdGh1bmtSZXR1cm5B
ZGRyZXNzOworCisgICAgICAgIC8vIFRoZXNlIGFyZ3VtZW50cyBwYXNzZWQgaW4gYTEuLmEzIChh
MCBjb250YWluZWQgdGhlIGVudHJ5IGNvZGUgcG9pbnRlZCwgd2hpY2ggaXMgbm90IHByZXNlcnZl
ZCkKKyAgICAgICAgUmVnaXN0ZXJGaWxlKiByZWdpc3RlckZpbGU7CisgICAgICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lOworICAgICAgICBKU1ZhbHVlKiBleGNlcHRpb247CisKKyAgICAgICAgLy8g
VGhlc2UgYXJndW1lbnRzIHBhc3NlZCBvbiB0aGUgc3RhY2suCisgICAgICAgIFByb2ZpbGVyKiog
ZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlOworICAgICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGE7CisKKyAgICAgICAgUmV0dXJuQWRkcmVzc1B0ciogcmV0dXJuQWRkcmVzc1Nsb3QoKSB7IHJl
dHVybiAmdGh1bmtSZXR1cm5BZGRyZXNzOyB9CisgICAgfTsKICNlbHNlCiAjZXJyb3IgIkpJVFN0
YWNrRnJhbWUgbm90IGRlZmluZWQgZm9yIHRoaXMgcGxhdGZvcm0uIgogI2VuZGlmCkluZGV4OiBK
YXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS93dGYvUGxhdGZvcm0uaAkocmV2aXNpb24gNTQxNDApCisrKyBKYXZhU2NyaXB0Q29yZS93dGYv
UGxhdGZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDYgKzEwNCwxNSBAQAogI2RlZmluZSBX
VEZfQ1BVX0lBNjQgMQogI2VuZGlmCiAKKy8qIENQVShNSVBTKSAtIE1JUFMgMzItYml0ICovCisv
KiBOb3RlOiBPbmx5IE8zMiBBQkkgaXMgdGVzdGVkLCBzbyB3ZSBlbmFibGUgaXQgZm9yIE8zMiBB
QkkgZm9yIG5vdy4gICovCisjaWYgICAoZGVmaW5lZChtaXBzKSB8fCBkZWZpbmVkKF9fbWlwc19f
KSkgJiYgZGVmaW5lZChfQUJJTzMyKQorI2RlZmluZSBXVEZfQ1BVX01JUFMgMQorI2lmIGRlZmlu
ZWQoX19NSVBTRUJfXykKKyNkZWZpbmUgV1RGX0NQVV9CSUdfRU5ESUFOIDEKKyNlbmRpZgorI2Vu
ZGlmIC8qIE1JUFMgKi8KKwogLyogQ1BVKFBQQykgLSBQb3dlclBDIDMyLWJpdCAqLwogI2lmICAg
ZGVmaW5lZChfX3BwY19fKSAgICAgXAogICAgIHx8IGRlZmluZWQoX19QUENfXykgICAgIFwKQEAg
LTgxMyw3ICs4MjIsNyBAQAogI2lmICFkZWZpbmVkKFdURl9VU0VfSlNWQUxVRTY0KSAmJiAhZGVm
aW5lZChXVEZfVVNFX0pTVkFMVUUzMikgJiYgIWRlZmluZWQoV1RGX1VTRV9KU1ZBTFVFMzJfNjQp
CiAjaWYgKENQVShYODZfNjQpICYmIChPUyhVTklYKSB8fCBPUyhXSU5ET1dTKSkpIHx8IENQVShJ
QTY0KSB8fCBDUFUoQUxQSEEpCiAjZGVmaW5lIFdURl9VU0VfSlNWQUxVRTY0IDEKLSNlbGlmIENQ
VShBUk0pIHx8IENQVShQUEM2NCkKKyNlbGlmIENQVShBUk0pIHx8IENQVShQUEM2NCkgfHwgQ1BV
KE1JUFMpCiAjZGVmaW5lIFdURl9VU0VfSlNWQUxVRTMyIDEKICNlbGlmIE9TKFdJTkRPV1MpICYm
IENPTVBJTEVSKE1JTkdXKQogLyogVXNpbmcgSlNWQUxVRTMyXzY0IGNhdXNlcyBwYWRkaW5nL2Fs
aWduZW1lbnQgaXNzdWVzIGZvciBKSVRTdHViQXJnCkBAIC04NjMsNiArODcyLDkgQEAgb24gTWlu
R1cuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaAogICAgICNkZWZpbmUgRU5BQkxFX0pJ
VCAxCiAjZWxpZiBDUFUoQVJNX1RSQURJVElPTkFMKSAmJiBPUyhMSU5VWCkKICAgICAjZGVmaW5l
IEVOQUJMRV9KSVQgMQorI2VsaWYgQ1BVKE1JUFMpICYmIE9TKExJTlVYKQorICAgICNkZWZpbmUg
RU5BQkxFX0pJVCAxCisgICAgI2RlZmluZSBXVEZfVVNFX0pJVF9TVFVCX0FSR1VNRU5UX1ZBX0xJ
U1QgMAogI2VuZGlmCiAjZW5kaWYgLyogUExBVEZPUk0oUVQpICovCiAKQEAgLTkxOCw3ICs5MzAs
OCBAQCBvbiBNaW5HVy4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3NoCiAgICAgfHwgKENQ
VShYODYpICYmIE9TKFdJTkRPV1MpICYmIENPTVBJTEVSKE1TVkMpKSBcCiAgICAgfHwgKENQVShY
ODYpICYmIE9TKExJTlVYKSAmJiBHQ0NfVkVSU0lPTiA+PSA0MDEwMCkgXAogICAgIHx8IChDUFUo
WDg2XzY0KSAmJiBPUyhMSU5VWCkgJiYgR0NDX1ZFUlNJT04gPj0gNDAxMDApIFwKLSAgICB8fCAo
Q1BVKEFSTV9UUkFESVRJT05BTCkgJiYgT1MoTElOVVgpKQorICAgIHx8IChDUFUoQVJNX1RSQURJ
VElPTkFMKSAmJiBPUyhMSU5VWCkpIFwKKyAgICB8fCAoQ1BVKE1JUFMpICYmIE9TKExJTlVYKSkK
ICNkZWZpbmUgRU5BQkxFX1lBUlIgMQogI2RlZmluZSBFTkFCTEVfWUFSUl9KSVQgMQogI2VuZGlm
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4SklULmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4SklULmNwcAkocmV2aXNpb24gNTQxNDApCisrKyBKYXZh
U2NyaXB0Q29yZS95YXJyL1JlZ2V4SklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQs
MTYgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZQogICAgIHN0YXRp
YyBjb25zdCBSZWdpc3RlcklEIHJlZ1QxID0gQVJNUmVnaXN0ZXJzOjpyNjsKIAogICAgIHN0YXRp
YyBjb25zdCBSZWdpc3RlcklEIHJldHVyblJlZ2lzdGVyID0gQVJNUmVnaXN0ZXJzOjpyMDsKKyNl
bGlmIENQVShNSVBTKQorICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGlucHV0ID0gTUlQU1Jl
Z2lzdGVyczo6YTA7CisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgaW5kZXggPSBNSVBTUmVn
aXN0ZXJzOjphMTsKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBsZW5ndGggPSBNSVBTUmVn
aXN0ZXJzOjphMjsKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBvdXRwdXQgPSBNSVBTUmVn
aXN0ZXJzOjphMzsKKworICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1QwID0gTUlQU1Jl
Z2lzdGVyczo6dDQ7CisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnVDEgPSBNSVBTUmVn
aXN0ZXJzOjp0NTsKKworICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJldHVyblJlZ2lzdGVy
ID0gTUlQU1JlZ2lzdGVyczo6djA7CiAjZWxpZiBDUFUoWDg2KQogICAgIHN0YXRpYyBjb25zdCBS
ZWdpc3RlcklEIGlucHV0ID0gWDg2UmVnaXN0ZXJzOjplYXg7CiAgICAgc3RhdGljIGNvbnN0IFJl
Z2lzdGVySUQgaW5kZXggPSBYODZSZWdpc3RlcnM6OmVkeDsKQEAgLTEzMTMsNiArMTMyMyw4IEBA
IGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2UKICAgICAgICAgcHVzaChB
Uk1SZWdpc3RlcnM6OnI1KTsKICAgICAgICAgcHVzaChBUk1SZWdpc3RlcnM6OnI2KTsKICAgICAg
ICAgbW92ZShBUk1SZWdpc3RlcnM6OnIzLCBvdXRwdXQpOworI2VsaWYgQ1BVKE1JUFMpCisgICAg
ICAgIC8vIERvIG5vdGhpbmcuCiAjZW5kaWYKICAgICB9CiAKQEAgLTEzMzAsNiArMTM0Miw4IEBA
IGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2UKICAgICAgICAgcG9wKEFS
TVJlZ2lzdGVyczo6cjYpOwogICAgICAgICBwb3AoQVJNUmVnaXN0ZXJzOjpyNSk7CiAgICAgICAg
IHBvcChBUk1SZWdpc3RlcnM6OnI0KTsKKyNlbGlmIENQVShNSVBTKQorICAgICAgICAvLyBEbyBu
b3RoaW5nCiAjZW5kaWYKICAgICAgICAgcmV0KCk7CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49551</attachid>
            <date>2010-02-25 17:14:09 -0800</date>
            <delta_ts>2010-03-02 11:38:32 -0800</delta_ts>
            <desc>MIPS JIT Patch 20100225</desc>
            <filename>mips_jit20100225.diff</filename>
            <type>text/plain</type>
            <size>117424</size>
            <attacher name="Chao-ying Fu">fu</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDU1MjYwKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTg1IEBACisyMDEwLTAyLTI1ICBDaGFvLXlp
bmcgRnUgIDxmdUBtaXBzLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBNSVBTIEpJVCBTdXBwb3J0cworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzAxNDQKKworCVRoZSBmb2xsb3dpbmcgY2hhbmdlcyBh
cmUgZm9yIE1JUFMgSklULgorCisgICAgICAgICogYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3Nl
bWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6SW1tMzI6Oklt
bTMyKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTUlQU0Fzc2VtYmxlci5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6TUlQU1JlZ2lzdGVyczo6KToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6
TUlQU0Fzc2VtYmxlcik6CisgICAgICAgIChKU0M6Ok1JUFNBc3NlbWJsZXI6Oik6CisgICAgICAg
IChKU0M6Ok1JUFNBc3NlbWJsZXI6OkptcFNyYzo6Sm1wU3JjKToKKyAgICAgICAgKEpTQzo6TUlQ
U0Fzc2VtYmxlcjo6Sm1wRHN0OjpKbXBEc3QpOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVy
OjpKbXBEc3Q6OmlzVXNlZCk6CisgICAgICAgIChKU0M6Ok1JUFNBc3NlbWJsZXI6OkptcERzdDo6
dXNlZCk6CisgICAgICAgIChKU0M6Ok1JUFNBc3NlbWJsZXI6OmVtaXRJbnN0KToKKyAgICAgICAg
KEpTQzo6TUlQU0Fzc2VtYmxlcjo6bm9wKToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6
bG9hZERlbGF5Tm9wKToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6Y29wRGVsYXlOb3Ap
OgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjptb3ZlKToKKyAgICAgICAgKEpTQzo6TUlQ
U0Fzc2VtYmxlcjo6bGkpOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpsdWkpOgorICAg
ICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjphZGRpdSk6CisgICAgICAgIChKU0M6Ok1JUFNBc3Nl
bWJsZXI6OmFkZHUpOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpzdWJ1KToKKyAgICAg
ICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6bXVsdCk6CisgICAgICAgIChKU0M6Ok1JUFNBc3NlbWJs
ZXI6Om1maGkpOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjptZmxvKToKKyAgICAgICAg
KEpTQzo6TUlQU0Fzc2VtYmxlcjo6bXVsKToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6
YW5kSW5zbik6CisgICAgICAgIChKU0M6Ok1JUFNBc3NlbWJsZXI6OmFuZGkpOgorICAgICAgICAo
SlNDOjpNSVBTQXNzZW1ibGVyOjpub3IpOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpv
ckluc24pOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpvcmkpOgorICAgICAgICAoSlND
OjpNSVBTQXNzZW1ibGVyOjp4b3JJbnNuKToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6
eG9yaSk6CisgICAgICAgIChKU0M6Ok1JUFNBc3NlbWJsZXI6OnNsdCk6CisgICAgICAgIChKU0M6
Ok1JUFNBc3NlbWJsZXI6OnNsdHUpOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpzbHRp
dSk6CisgICAgICAgIChKU0M6Ok1JUFNBc3NlbWJsZXI6OnNsbCk6CisgICAgICAgIChKU0M6Ok1J
UFNBc3NlbWJsZXI6OnNsbHYpOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpzcmEpOgor
ICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpzcmF2KToKKyAgICAgICAgKEpTQzo6TUlQU0Fz
c2VtYmxlcjo6bHcpOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpsd2wpOgorICAgICAg
ICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpsd3IpOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVy
OjpsaHUpOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpzdyk6CisgICAgICAgIChKU0M6
Ok1JUFNBc3NlbWJsZXI6OmpyKToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6amFscik6
CisgICAgICAgIChKU0M6Ok1JUFNBc3NlbWJsZXI6OmphbCk6CisgICAgICAgIChKU0M6Ok1JUFNB
c3NlbWJsZXI6OmJrcHQpOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpiZ2V6KToKKyAg
ICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6Ymx0eik6CisgICAgICAgIChKU0M6Ok1JUFNBc3Nl
bWJsZXI6OmJlcSk6CisgICAgICAgIChKU0M6Ok1JUFNBc3NlbWJsZXI6OmJuZSk6CisgICAgICAg
IChKU0M6Ok1JUFNBc3NlbWJsZXI6OmJjMXQpOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVy
OjpiYzFmKToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6bmV3Sm1wU3JjKToKKyAgICAg
ICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6YXBwZW5kSnVtcCk6CisgICAgICAgIChKU0M6Ok1JUFNB
c3NlbWJsZXI6OmFkZGQpOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpzdWJkKToKKyAg
ICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6bXVsZCk6CisgICAgICAgIChKU0M6Ok1JUFNBc3Nl
bWJsZXI6Omx3YzEpOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpsZGMxKToKKyAgICAg
ICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6c3djMSk6CisgICAgICAgIChKU0M6Ok1JUFNBc3NlbWJs
ZXI6OnNkYzEpOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjptdGMxKToKKyAgICAgICAg
KEpTQzo6TUlQU0Fzc2VtYmxlcjo6bWZjMSk6CisgICAgICAgIChKU0M6Ok1JUFNBc3NlbWJsZXI6
OnRydW5jd2QpOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpjdnRkdyk6CisgICAgICAg
IChKU0M6Ok1JUFNBc3NlbWJsZXI6OmNlcWQpOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVy
Ojpjbmd0ZCk6CisgICAgICAgIChKU0M6Ok1JUFNBc3NlbWJsZXI6OmNuZ2VkKToKKyAgICAgICAg
KEpTQzo6TUlQU0Fzc2VtYmxlcjo6Y2x0ZCk6CisgICAgICAgIChKU0M6Ok1JUFNBc3NlbWJsZXI6
OmNsZWQpOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpjdWVxZCk6CisgICAgICAgIChK
U0M6Ok1JUFNBc3NlbWJsZXI6OmNvbGVkKToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6
Y29sdGQpOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpjdWxlZCk6CisgICAgICAgIChK
U0M6Ok1JUFNBc3NlbWJsZXI6OmN1bHRkKToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6
bGFiZWwpOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjphbGlnbik6CisgICAgICAgIChK
U0M6Ok1JUFNBc3NlbWJsZXI6OmdldFJlbG9jYXRlZEFkZHJlc3MpOgorICAgICAgICAoSlNDOjpN
SVBTQXNzZW1ibGVyOjpnZXREaWZmZXJlbmNlQmV0d2VlbkxhYmVscyk6CisgICAgICAgIChKU0M6
Ok1JUFNBc3NlbWJsZXI6OnNpemUpOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpleGVj
dXRhYmxlQ29weSk6CisgICAgICAgIChKU0M6Ok1JUFNBc3NlbWJsZXI6OmdldENhbGxSZXR1cm5P
ZmZzZXQpOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpsaW5rSnVtcCk6CisgICAgICAg
IChKU0M6Ok1JUFNBc3NlbWJsZXI6OmxpbmtDYWxsKToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2Vt
Ymxlcjo6bGlua1BvaW50ZXIpOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpyZWxpbmtK
dW1wKToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6cmVsaW5rQ2FsbCk6CisgICAgICAg
IChKU0M6Ok1JUFNBc3NlbWJsZXI6OnJlcGF0Y2hJbnQzMik6CisgICAgICAgIChKU0M6Ok1JUFNB
c3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6
cmVwYXRjaExvYWRQdHJUb0xFQSk6CisgICAgICAgIChKU0M6Ok1JUFNBc3NlbWJsZXI6OnJlbG9j
YXRlSnVtcHMpOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpsaW5rV2l0aE9mZnNldCk6
CisgICAgICAgIChKU0M6Ok1JUFNBc3NlbWJsZXI6OmxpbmtDYWxsSW50ZXJuYWwpOgorICAgICAg
ICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlck1JUFMuaDogQWRkZWQuCisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQ
Uzo6TWFjcm9Bc3NlbWJsZXJNSVBTKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBT
OjopOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1JUFM6OmFkZDMyKToKKyAgICAgICAg
KEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjphbmQzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyTUlQUzo6bHNoaWZ0MzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1JUFM6
Om11bDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjpub3QzMik6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6b3IzMik6CisgICAgICAgIChKU0M6Ok1hY3Jv
QXNzZW1ibGVyTUlQUzo6cnNoaWZ0MzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1J
UFM6OnN1YjMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjp4b3IzMik6Cisg
ICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6bG9hZDMyKToKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJNSVBTOjpsb2FkMzJXaXRoVW5hbGlnbmVkSGFsZldvcmRzKToKKyAgICAg
ICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjpsb2FkMzJXaXRoQWRkcmVzc09mZnNldFBhdGNo
KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjpsb2FkUHRyV2l0aFBhdGNoVG9M
RUEpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1JUFM6OmxvYWRQdHJXaXRoQWRkcmVz
c09mZnNldFBhdGNoKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjpsb2FkMTYp
OgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1JUFM6OnN0b3JlMzJXaXRoQWRkcmVzc09m
ZnNldFBhdGNoKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjpzdG9yZTMyKToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjpzdXBwb3J0c0Zsb2F0aW5nUG9pbnQp
OgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1JUFM6OnN1cHBvcnRzRmxvYXRpbmdQb2lu
dFRydW5jYXRlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjpwb3ApOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1JUFM6OnB1c2gpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlck1JUFM6Om1vdmUpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1JUFM6
OnN3YXApOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1JUFM6OnNpZ25FeHRlbmQzMlRv
UHRyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjp6ZXJvRXh0ZW5kMzJUb1B0
cik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6YnJhbmNoMzIpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1JUFM6OmJyYW5jaDMyV2l0aFVuYWxpZ25lZEhhbGZXb3Jk
cyk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6YnJhbmNoMTYpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1JUFM6OmJyYW5jaFRlc3QzMik6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyTUlQUzo6anVtcCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVy
TUlQUzo6YnJhbmNoQWRkMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1JUFM6OmJy
YW5jaE11bDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjpicmFuY2hTdWIz
Mik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6YnJlYWtwb2ludCk6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6bmVhckNhbGwpOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlck1JUFM6OmNhbGwpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1J
UFM6OnJldCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6c2V0MzIpOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1JUFM6OnNldFRlc3QzMik6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyTUlQUzo6bW92ZVdpdGhQYXRjaCk6CisgICAgICAgIChKU0M6Ok1hY3Jv
QXNzZW1ibGVyTUlQUzo6YnJhbmNoUHRyV2l0aFBhdGNoKToKKyAgICAgICAgKEpTQzo6TWFjcm9B
c3NlbWJsZXJNSVBTOjpzdG9yZVB0cldpdGhQYXRjaCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyTUlQUzo6dGFpbFJlY3Vyc2l2ZUNhbGwpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
Ymxlck1JUFM6Om1ha2VUYWlsUmVjdXJzaXZlQ2FsbCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyTUlQUzo6bG9hZERvdWJsZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQ
Uzo6c3RvcmVEb3VibGUpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1JUFM6OmFkZERv
dWJsZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6c3ViRG91YmxlKToKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjptdWxEb3VibGUpOgorICAgICAgICAoSlND
OjpNYWNyb0Fzc2VtYmxlck1JUFM6OmNvbnZlcnRJbnQzMlRvRG91YmxlKToKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjppbnNlcnRSZWxheGF0aW9uV29yZHMpOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlck1JUFM6OmJyYW5jaFRydWUpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlck1JUFM6OmJyYW5jaEZhbHNlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJNSVBTOjpicmFuY2hFcXVhbCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6
YnJhbmNoTm90RXF1YWwpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1JUFM6OmJyYW5j
aERvdWJsZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6YnJhbmNoVHJ1bmNh
dGVEb3VibGVUb0ludDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjpsaW5r
Q2FsbCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6cmVwYXRjaENhbGwpOgor
ICAgICAgICAqIGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmg6CisgICAgICAgIChKU0M6OkV4ZWN1
dGFibGVBbGxvY2F0b3I6OmNhY2hlRmx1c2gpOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAg
ICAgKiBqaXQvSklUSW5saW5lTWV0aG9kcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OnByZXNlcnZl
UmV0dXJuQWRkcmVzc0FmdGVyQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6cmVzdG9yZVJldHVy
bkFkZHJlc3NCZWZvcmVSZXR1cm4pOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAg
ICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAoSlNDOjpKSVRUaHVua3M6OkpJVFRo
dW5rcyk6CisgICAgICAgICogaml0L0pJVFN0dWJzLmg6CisgICAgICAgIChKU0M6OkpJVFN0YWNr
RnJhbWU6OnJldHVybkFkZHJlc3NTbG90KToKKyAgICAgICAgKiB3dGYvUGxhdGZvcm0uaDoKKyAg
ICAgICAgKiB5YXJyL1JlZ2V4SklULmNwcDoKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5l
cmF0b3I6OmdlbmVyYXRlRW50ZXIpOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRv
cjo6Z2VuZXJhdGVSZXR1cm4pOgorCiAyMDEwLTAyLTI1ICBPbGl2ZXIgSHVudCAgPG9saXZlckBh
cHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmYgR2FyZW4uCkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHJl
dmlzaW9uIDU1MTk1KQorKysgSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9B
c3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTczLDcgKzE3Myw3IEBAIHB1YmxpYzoKICAg
ICBzdHJ1Y3QgSW1tMzIgewogICAgICAgICBleHBsaWNpdCBJbW0zMihpbnQzMl90IHZhbHVlKQog
ICAgICAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQotI2lmIENQVShBUk0pCisjaWYgQ1BVKEFSTSkg
fHwgQ1BVKE1JUFMpCiAgICAgICAgICAgICAsIG1faXNQb2ludGVyKGZhbHNlKQogI2VuZGlmCiAg
ICAgICAgIHsKQEAgLTE4Miw3ICsxODIsNyBAQCBwdWJsaWM6CiAjaWYgIUNQVShYODZfNjQpCiAg
ICAgICAgIGV4cGxpY2l0IEltbTMyKEltbVB0ciBwdHIpCiAgICAgICAgICAgICA6IG1fdmFsdWUo
cHRyLmFzSW50cHRyKCkpCi0jaWYgQ1BVKEFSTSkKKyNpZiBDUFUoQVJNKSB8fCBDUFUoTUlQUykK
ICAgICAgICAgICAgICwgbV9pc1BvaW50ZXIodHJ1ZSkKICNlbmRpZgogICAgICAgICB7CkBAIC0x
OTAsMTMgKzE5MCwxNCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgICAgICBpbnQzMl90IG1fdmFs
dWU7Ci0jaWYgQ1BVKEFSTSkKKyNpZiBDUFUoQVJNKSB8fCBDUFUoTUlQUykKICAgICAgICAgLy8g
V2UgcmVseSBvbiBiZWluZyBhYmxlIHRvIHJlZ2VuZXJhdGUgY29kZSB0byByZWNvdmVyIGV4Y2Vw
dGlvbiBoYW5kbGluZwogICAgICAgICAvLyBpbmZvcm1hdGlvbi4gIFNpbmNlIEFSTXY3IHN1cHBv
cnRzIDE2LWJpdCBpbW1lZGlhdGVzIHRoZXJlIGlzIGEgZGFuZ2VyCiAgICAgICAgIC8vIHRoYXQg
aWYgcG9pbnRlciB2YWx1ZXMgY2hhbmdlIHRoZSBsYXlvdXQgb2YgdGhlIGdlbmVyYXRlZCBjb2Rl
IHdpbGwgY2hhbmdlLgogICAgICAgICAvLyBUbyBhdm9pZCB0aGlzIHByb2JsZW0sIGFsd2F5cyBn
ZW5lcmF0ZSBwb2ludGVycyAoYW5kIHRodXMgSW1tMzJzIGNvbnN0cnVjdGVkCiAgICAgICAgIC8v
IGZyb20gSW1tUHRycykgd2l0aCBhIGNvZGUgc2VxdWVuY2UgdGhhdCBpcyBhYmxlICB0byByZXBy
ZXNlbnQgIGFueSBwb2ludGVyCiAgICAgICAgIC8vIHZhbHVlIC0gZG9uJ3QgdXNlIGEgbW9yZSBj
b21wYWN0IGZvcm0gaW4gdGhlc2UgY2FzZXMuCisgICAgICAgIC8vIFNhbWUgZm9yIE1JUFMuCiAg
ICAgICAgIGJvb2wgbV9pc1BvaW50ZXI7CiAjZW5kaWYKICAgICB9OwpJbmRleDogSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01JUFNBc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTUlQU0Fzc2VtYmxlci5oCShyZXZpc2lvbiAwKQorKysgSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01JUFNBc3NlbWJsZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5
MzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1JUFMgVGVjaG5vbG9n
aWVzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBNSVBTIFRFQ0hOT0xPR0lFUywgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIE1JUFMgVEVDSE5PTE9HSUVTLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBNSVBT
QXNzZW1ibGVyX2gKKyNkZWZpbmUgTUlQU0Fzc2VtYmxlcl9oCisKKyNpbmNsdWRlIDx3dGYvUGxh
dGZvcm0uaD4KKyNpbmNsdWRlIDx3dGYvU2VnbWVudGVkVmVjdG9yLmg+CisKKyNpZiBFTkFCTEUo
QVNTRU1CTEVSKSAmJiBDUFUoTUlQUykKKworI2luY2x1ZGUgIkFzc2VtYmxlckJ1ZmZlci5oIgor
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBKU0MgeworCit0eXBlZGVm
IHVpbnQzMl90IE1JUFNXb3JkOworCituYW1lc3BhY2UgTUlQU1JlZ2lzdGVycyB7Cit0eXBlZGVm
IGVudW0geworICAgIHIwID0gMCwKKyAgICByMSwKKyAgICByMiwKKyAgICByMywKKyAgICByNCwK
KyAgICByNSwKKyAgICByNiwKKyAgICByNywKKyAgICByOCwKKyAgICByOSwKKyAgICByMTAsCisg
ICAgcjExLAorICAgIHIxMiwKKyAgICByMTMsCisgICAgcjE0LAorICAgIHIxNSwKKyAgICByMTYs
CisgICAgcjE3LAorICAgIHIxOCwKKyAgICByMTksCisgICAgcjIwLAorICAgIHIyMSwKKyAgICBy
MjIsCisgICAgcjIzLAorICAgIHIyNCwKKyAgICByMjUsCisgICAgcjI2LAorICAgIHIyNywKKyAg
ICByMjgsCisgICAgcjI5LAorICAgIHIzMCwKKyAgICByMzEsCisgICAgemVybyA9IHIwLAorICAg
IGF0ID0gcjEsCisgICAgdjAgPSByMiwKKyAgICB2MSA9IHIzLAorICAgIGEwID0gcjQsCisgICAg
YTEgPSByNSwKKyAgICBhMiA9IHI2LAorICAgIGEzID0gcjcsCisgICAgdDAgPSByOCwKKyAgICB0
MSA9IHI5LAorICAgIHQyID0gcjEwLAorICAgIHQzID0gcjExLAorICAgIHQ0ID0gcjEyLAorICAg
IHQ1ID0gcjEzLAorICAgIHQ2ID0gcjE0LAorICAgIHQ3ID0gcjE1LAorICAgIHMwID0gcjE2LAor
ICAgIHMxID0gcjE3LAorICAgIHMyID0gcjE4LAorICAgIHMzID0gcjE5LAorICAgIHM0ID0gcjIw
LAorICAgIHM1ID0gcjIxLAorICAgIHM2ID0gcjIyLAorICAgIHM3ID0gcjIzLAorICAgIHQ4ID0g
cjI0LAorICAgIHQ5ID0gcjI1LAorICAgIGswID0gcjI2LAorICAgIGsxID0gcjI3LAorICAgIGdw
ID0gcjI4LAorICAgIHNwID0gcjI5LAorICAgIGZwID0gcjMwLAorICAgIHJhID0gcjMxCit9IFJl
Z2lzdGVySUQ7CisKK3R5cGVkZWYgZW51bSB7CisgICAgZjAsCisgICAgZjEsCisgICAgZjIsCisg
ICAgZjMsCisgICAgZjQsCisgICAgZjUsCisgICAgZjYsCisgICAgZjcsCisgICAgZjgsCisgICAg
ZjksCisgICAgZjEwLAorICAgIGYxMSwKKyAgICBmMTIsCisgICAgZjEzLAorICAgIGYxNCwKKyAg
ICBmMTUsCisgICAgZjE2LAorICAgIGYxNywKKyAgICBmMTgsCisgICAgZjE5LAorICAgIGYyMCwK
KyAgICBmMjEsCisgICAgZjIyLAorICAgIGYyMywKKyAgICBmMjQsCisgICAgZjI1LAorICAgIGYy
NiwKKyAgICBmMjcsCisgICAgZjI4LAorICAgIGYyOSwKKyAgICBmMzAsCisgICAgZjMxCit9IEZQ
UmVnaXN0ZXJJRDsKKworfSAvLyBuYW1lc3BhY2UgTUlQU1JlZ2lzdGVycworCitjbGFzcyBNSVBT
QXNzZW1ibGVyIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIE1JUFNSZWdpc3RlcnM6OlJlZ2lzdGVy
SUQgUmVnaXN0ZXJJRDsKKyAgICB0eXBlZGVmIE1JUFNSZWdpc3RlcnM6OkZQUmVnaXN0ZXJJRCBG
UFJlZ2lzdGVySUQ7CisgICAgdHlwZWRlZiBTZWdtZW50ZWRWZWN0b3I8aW50LCA2ND4gSnVtcHM7
CisKKyAgICBNSVBTQXNzZW1ibGVyKCkKKyAgICB7CisgICAgfQorCisgICAgLy8gTUlQUyBpbnN0
cnVjdGlvbiBvcGNvZGUgZmllbGQgcG9zaXRpb24KKyAgICBlbnVtIHsKKyAgICAgICAgT1BfU0hf
UkQgPSAxMSwKKyAgICAgICAgT1BfU0hfUlQgPSAxNiwKKyAgICAgICAgT1BfU0hfUlMgPSAyMSwK
KyAgICAgICAgT1BfU0hfU0hBTVQgPSA2LAorICAgICAgICBPUF9TSF9DT0RFID0gMTYsCisgICAg
ICAgIE9QX1NIX0ZEID0gNiwKKyAgICAgICAgT1BfU0hfRlMgPSAxMSwKKyAgICAgICAgT1BfU0hf
RlQgPSAxNgorICAgIH07CisKKyAgICBjbGFzcyBKbXBTcmMgeworICAgICAgICBmcmllbmQgY2xh
c3MgTUlQU0Fzc2VtYmxlcjsKKyAgICBwdWJsaWM6CisgICAgICAgIEptcFNyYygpCisgICAgICAg
ICAgICA6IG1fb2Zmc2V0KC0xKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6
CisgICAgICAgIEptcFNyYyhpbnQgb2Zmc2V0KQorICAgICAgICAgICAgOiBtX29mZnNldChvZmZz
ZXQpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGludCBtX29mZnNldDsKKyAgICB9
OworCisgICAgY2xhc3MgSm1wRHN0IHsKKyAgICAgICAgZnJpZW5kIGNsYXNzIE1JUFNBc3NlbWJs
ZXI7CisgICAgcHVibGljOgorICAgICAgICBKbXBEc3QoKQorICAgICAgICAgICAgOiBtX29mZnNl
dCgtMSkKKyAgICAgICAgICAgICwgbV91c2VkKGZhbHNlKQorICAgICAgICB7CisgICAgICAgIH0K
KworICAgICAgICBib29sIGlzVXNlZCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlZDsgfQorICAgICAg
ICB2b2lkIHVzZWQoKSB7IG1fdXNlZCA9IHRydWU7IH0KKyAgICBwcml2YXRlOgorICAgICAgICBK
bXBEc3QoaW50IG9mZnNldCkKKyAgICAgICAgICAgIDogbV9vZmZzZXQob2Zmc2V0KQorICAgICAg
ICAgICAgLCBtX3VzZWQoZmFsc2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChtX29m
ZnNldCA9PSBvZmZzZXQpOworICAgICAgICB9CisKKyAgICAgICAgaW50IG1fb2Zmc2V0IDogMzE7
CisgICAgICAgIGludCBtX3VzZWQgOiAxOworICAgIH07CisKKyAgICB2b2lkIGVtaXRJbnN0KE1J
UFNXb3JkIG9wKQorICAgIHsKKyAgICAgICAgdm9pZCogb2xkQmFzZSA9IG1fYnVmZmVyLmRhdGEo
KTsKKworICAgICAgICBtX2J1ZmZlci5wdXRJbnQob3ApOworCisgICAgICAgIHZvaWQqIG5ld0Jh
c2UgPSBtX2J1ZmZlci5kYXRhKCk7CisgICAgICAgIGlmIChvbGRCYXNlICE9IG5ld0Jhc2UpCisg
ICAgICAgICAgICByZWxvY2F0ZUp1bXBzKG9sZEJhc2UsIG5ld0Jhc2UpOworICAgIH0KKworICAg
IHZvaWQgbm9wKCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMDApOworICAgIH0K
KworICAgIC8qIE5lZWQgdG8gaW5zZXJ0IG9uZSBsb2FkIGRhdGEgZGVsYXkgbm9wIGZvciBtaXBz
MS4gICovCisgICAgdm9pZCBsb2FkRGVsYXlOb3AoKQorICAgIHsKKyNpZiBXVEZfTUlQU19JU0Eo
MSkKKyAgICAgICAgbm9wKCk7CisjZW5kaWYKKyAgICB9CisKKyAgICAvKiBOZWVkIHRvIGluc2Vy
dCBvbmUgY29wcm9jZXNzb3IgYWNjZXNzIGRlbGF5IG5vcCBmb3IgbWlwczEuICAqLworICAgIHZv
aWQgY29wRGVsYXlOb3AoKQorICAgIHsKKyNpZiBXVEZfTUlQU19JU0EoMSkKKyAgICAgICAgbm9w
KCk7CisjZW5kaWYKKyAgICB9CisKKyAgICB2b2lkIG1vdmUoUmVnaXN0ZXJJRCByZCwgUmVnaXN0
ZXJJRCBycykKKyAgICB7CisgICAgICAgIC8qIGFkZHUgKi8KKyAgICAgICAgZW1pdEluc3QoMHgw
MDAwMDAyMSB8IChyZCA8PCBPUF9TSF9SRCkgfCAocnMgPDwgT1BfU0hfUlMpKTsKKyAgICB9CisK
KyAgICAvKiBTZXQgYW4gaW1tZWRpYXRlIHZhbHVlIHRvIGEgcmVnaXN0ZXIuICBUaGlzIG1heSBn
ZW5lcmF0ZSAxIG9yIDIKKyAgICAgICBpbnN0cnVjdGlvbnMuICAqLworICAgIHZvaWQgbGkoUmVn
aXN0ZXJJRCBkZXN0LCBpbnQgaW1tKQorICAgIHsKKyAgICAgICAgaWYgKGltbSA+PSAtMzI3Njgg
JiYgaW1tIDw9IDMyNzY3KQorICAgICAgICAgICAgYWRkaXUoZGVzdCwgTUlQU1JlZ2lzdGVyczo6
emVybywgaW1tKTsKKyAgICAgICAgZWxzZSBpZiAoaW1tID49IDAgJiYgaW1tIDwgNjU1MzYpCisg
ICAgICAgICAgICBvcmkoZGVzdCwgTUlQU1JlZ2lzdGVyczo6emVybywgaW1tKTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBsdWkoZGVzdCwgaW1tID4+IDE2KTsKKyAgICAgICAgICAgIGlm
IChpbW0gJiAweGZmZmYpCisgICAgICAgICAgICAgICAgb3JpKGRlc3QsIGRlc3QsIGltbSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGx1aShSZWdpc3RlcklEIHJ0LCBpbnQgaW1tKQor
ICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHgzYzAwMDAwMCB8IChydCA8PCBPUF9TSF9SVCkgfCAo
aW1tICYgMHhmZmZmKSk7CisgICAgfQorCisgICAgdm9pZCBhZGRpdShSZWdpc3RlcklEIHJ0LCBS
ZWdpc3RlcklEIHJzLCBpbnQgaW1tKQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHgyNDAwMDAw
MCB8IChydCA8PCBPUF9TSF9SVCkgfCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAgICAgICAg
IHwgKGltbSAmIDB4ZmZmZikpOworICAgIH0KKworICAgIHZvaWQgYWRkdShSZWdpc3RlcklEIHJk
LCBSZWdpc3RlcklEIHJzLCBSZWdpc3RlcklEIHJ0KQorICAgIHsKKyAgICAgICAgZW1pdEluc3Qo
MHgwMDAwMDAyMSB8IChyZCA8PCBPUF9TSF9SRCkgfCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAg
ICAgICAgICAgIHwgKHJ0IDw8IE9QX1NIX1JUKSk7CisgICAgfQorCisgICAgdm9pZCBzdWJ1KFJl
Z2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcnMsIFJlZ2lzdGVySUQgcnQpCisgICAgeworICAgICAg
ICBlbWl0SW5zdCgweDAwMDAwMDIzIHwgKHJkIDw8IE9QX1NIX1JEKSB8IChycyA8PCBPUF9TSF9S
UykKKyAgICAgICAgICAgICAgICAgfCAocnQgPDwgT1BfU0hfUlQpKTsKKyAgICB9CisKKyAgICB2
b2lkIG11bHQoUmVnaXN0ZXJJRCBycywgUmVnaXN0ZXJJRCBydCkKKyAgICB7CisgICAgICAgIGVt
aXRJbnN0KDB4MDAwMDAwMTggfCAocnMgPDwgT1BfU0hfUlMpIHwgKHJ0IDw8IE9QX1NIX1JUKSk7
CisgICAgfQorCisgICAgdm9pZCBtZmhpKFJlZ2lzdGVySUQgcmQpCisgICAgeworICAgICAgICBl
bWl0SW5zdCgweDAwMDAwMDEwIHwgKHJkIDw8IE9QX1NIX1JEKSk7CisgICAgfQorCisgICAgdm9p
ZCBtZmxvKFJlZ2lzdGVySUQgcmQpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDAwMDAwMDEy
IHwgKHJkIDw8IE9QX1NIX1JEKSk7CisgICAgfQorCisgICAgdm9pZCBtdWwoUmVnaXN0ZXJJRCBy
ZCwgUmVnaXN0ZXJJRCBycywgUmVnaXN0ZXJJRCBydCkKKyAgICB7CisjaWYgV1RGX01JUFNfSVNB
X0FUX0xFQVNUKDMyKSAKKyAgICAgICAgZW1pdEluc3QoMHg3MDAwMDAwMiB8IChyZCA8PCBPUF9T
SF9SRCkgfCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAgICAgICAgIHwgKHJ0IDw8IE9QX1NI
X1JUKSk7CisjZWxzZQorICAgICAgICBtdWx0KHJzLCBydCk7CisgICAgICAgIG1mbG8ocmQpOwor
I2VuZGlmCisgICAgfQorCisgICAgdm9pZCBhbmRJbnNuKFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVy
SUQgcnMsIFJlZ2lzdGVySUQgcnQpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDAwMDAwMDI0
IHwgKHJkIDw8IE9QX1NIX1JEKSB8IChycyA8PCBPUF9TSF9SUykKKyAgICAgICAgICAgICAgICAg
fCAocnQgPDwgT1BfU0hfUlQpKTsKKyAgICB9CisKKyAgICB2b2lkIGFuZGkoUmVnaXN0ZXJJRCBy
dCwgUmVnaXN0ZXJJRCBycywgaW50IGltbSkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4MzAw
MDAwMDAgfCAocnQgPDwgT1BfU0hfUlQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAgICAg
ICAgICB8IChpbW0gJiAweGZmZmYpKTsKKyAgICB9CisKKyAgICB2b2lkIG5vcihSZWdpc3RlcklE
IHJkLCBSZWdpc3RlcklEIHJzLCBSZWdpc3RlcklEIHJ0KQorICAgIHsKKyAgICAgICAgZW1pdElu
c3QoMHgwMDAwMDAyNyB8IChyZCA8PCBPUF9TSF9SRCkgfCAocnMgPDwgT1BfU0hfUlMpCisgICAg
ICAgICAgICAgICAgIHwgKHJ0IDw8IE9QX1NIX1JUKSk7CisgICAgfQorCisgICAgdm9pZCBvcklu
c24oUmVnaXN0ZXJJRCByZCwgUmVnaXN0ZXJJRCBycywgUmVnaXN0ZXJJRCBydCkKKyAgICB7Cisg
ICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMjUgfCAocmQgPDwgT1BfU0hfUkQpIHwgKHJzIDw8IE9Q
X1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChydCA8PCBPUF9TSF9SVCkpOworICAgIH0KKwor
ICAgIHZvaWQgb3JpKFJlZ2lzdGVySUQgcnQsIFJlZ2lzdGVySUQgcnMsIGludCBpbW0pCisgICAg
eworICAgICAgICBlbWl0SW5zdCgweDM0MDAwMDAwIHwgKHJ0IDw8IE9QX1NIX1JUKSB8IChycyA8
PCBPUF9TSF9SUykKKyAgICAgICAgICAgICAgICAgfCAoaW1tICYgMHhmZmZmKSk7CisgICAgfQor
CisgICAgdm9pZCB4b3JJbnNuKFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcnMsIFJlZ2lzdGVy
SUQgcnQpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDAwMDAwMDI2IHwgKHJkIDw8IE9QX1NI
X1JEKSB8IChycyA8PCBPUF9TSF9SUykKKyAgICAgICAgICAgICAgICAgfCAocnQgPDwgT1BfU0hf
UlQpKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcmkoUmVnaXN0ZXJJRCBydCwgUmVnaXN0ZXJJRCBy
cywgaW50IGltbSkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4MzgwMDAwMDAgfCAocnQgPDwg
T1BfU0hfUlQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChpbW0gJiAw
eGZmZmYpKTsKKyAgICB9CisKKyAgICB2b2lkIHNsdChSZWdpc3RlcklEIHJkLCBSZWdpc3RlcklE
IHJzLCBSZWdpc3RlcklEIHJ0KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHgwMDAwMDAyYSB8
IChyZCA8PCBPUF9TSF9SRCkgfCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAgICAgICAgIHwg
KHJ0IDw8IE9QX1NIX1JUKSk7CisgICAgfQorCisgICAgdm9pZCBzbHR1KFJlZ2lzdGVySUQgcmQs
IFJlZ2lzdGVySUQgcnMsIFJlZ2lzdGVySUQgcnQpCisgICAgeworICAgICAgICBlbWl0SW5zdCgw
eDAwMDAwMDJiIHwgKHJkIDw8IE9QX1NIX1JEKSB8IChycyA8PCBPUF9TSF9SUykKKyAgICAgICAg
ICAgICAgICAgfCAocnQgPDwgT1BfU0hfUlQpKTsKKyAgICB9CisKKyAgICB2b2lkIHNsdGl1KFJl
Z2lzdGVySUQgcnQsIFJlZ2lzdGVySUQgcnMsIGludCBpbW0pCisgICAgeworICAgICAgICBlbWl0
SW5zdCgweDJjMDAwMDAwIHwgKHJ0IDw8IE9QX1NIX1JUKSB8IChycyA8PCBPUF9TSF9SUykKKyAg
ICAgICAgICAgICAgICAgfCAoaW1tICYgMHhmZmZmKSk7CisgICAgfQorCisgICAgdm9pZCBzbGwo
UmVnaXN0ZXJJRCByZCwgUmVnaXN0ZXJJRCBydCwgaW50IHNoYW10KQorICAgIHsKKyAgICAgICAg
ZW1pdEluc3QoMHgwMDAwMDAwMCB8IChyZCA8PCBPUF9TSF9SRCkgfCAocnQgPDwgT1BfU0hfUlQp
CisgICAgICAgICAgICAgICAgIHwgKChzaGFtdCAmIDB4MWYpIDw8IE9QX1NIX1NIQU1UKSk7Cisg
ICAgfQorCisgICAgdm9pZCBzbGx2KFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcnQsIGludCBy
cykKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMDQgfCAocmQgPDwgT1BfU0hfUkQp
IHwgKHJ0IDw8IE9QX1NIX1JUKQorICAgICAgICAgICAgICAgICB8IChycyA8PCBPUF9TSF9SUykp
OworICAgIH0KKworICAgIHZvaWQgc3JhKFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcnQsIGlu
dCBzaGFtdCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMDMgfCAocmQgPDwgT1Bf
U0hfUkQpIHwgKHJ0IDw8IE9QX1NIX1JUKQorICAgICAgICAgICAgICAgICB8ICgoc2hhbXQgJiAw
eDFmKSA8PCBPUF9TSF9TSEFNVCkpOworICAgIH0KKworICAgIHZvaWQgc3JhdihSZWdpc3RlcklE
IHJkLCBSZWdpc3RlcklEIHJ0LCBSZWdpc3RlcklEIHJzKQorICAgIHsKKyAgICAgICAgZW1pdElu
c3QoMHgwMDAwMDAwNyB8IChyZCA8PCBPUF9TSF9SRCkgfCAocnQgPDwgT1BfU0hfUlQpCisgICAg
ICAgICAgICAgICAgIHwgKHJzIDw8IE9QX1NIX1JTKSk7CisgICAgfQorCisgICAgdm9pZCBsdyhS
ZWdpc3RlcklEIHJ0LCBSZWdpc3RlcklEIHJzLCBpbnQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAg
ZW1pdEluc3QoMHg4YzAwMDAwMCB8IChydCA8PCBPUF9TSF9SVCkgfCAocnMgPDwgT1BfU0hfUlMp
CisgICAgICAgICAgICAgICAgIHwgKG9mZnNldCAmIDB4ZmZmZikpOworICAgICAgICBsb2FkRGVs
YXlOb3AoKTsKKyAgICB9CisKKyAgICB2b2lkIGx3bChSZWdpc3RlcklEIHJ0LCBSZWdpc3RlcklE
IHJzLCBpbnQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHg4ODAwMDAwMCB8IChy
dCA8PCBPUF9TSF9SVCkgfCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAgICAgICAgIHwgKG9m
ZnNldCAmIDB4ZmZmZikpOworICAgICAgICBsb2FkRGVsYXlOb3AoKTsKKyAgICB9CisKKyAgICB2
b2lkIGx3cihSZWdpc3RlcklEIHJ0LCBSZWdpc3RlcklEIHJzLCBpbnQgb2Zmc2V0KQorICAgIHsK
KyAgICAgICAgZW1pdEluc3QoMHg5ODAwMDAwMCB8IChydCA8PCBPUF9TSF9SVCkgfCAocnMgPDwg
T1BfU0hfUlMpCisgICAgICAgICAgICAgICAgIHwgKG9mZnNldCAmIDB4ZmZmZikpOworICAgICAg
ICBsb2FkRGVsYXlOb3AoKTsKKyAgICB9CisKKyAgICB2b2lkIGxodShSZWdpc3RlcklEIHJ0LCBS
ZWdpc3RlcklEIHJzLCBpbnQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHg5NDAw
MDAwMCB8IChydCA8PCBPUF9TSF9SVCkgfCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAgICAg
ICAgIHwgKG9mZnNldCAmIDB4ZmZmZikpOworICAgICAgICBsb2FkRGVsYXlOb3AoKTsKKyAgICB9
CisKKyAgICB2b2lkIHN3KFJlZ2lzdGVySUQgcnQsIFJlZ2lzdGVySUQgcnMsIGludCBvZmZzZXQp
CisgICAgeworICAgICAgICBlbWl0SW5zdCgweGFjMDAwMDAwIHwgKHJ0IDw8IE9QX1NIX1JUKSB8
IChycyA8PCBPUF9TSF9SUykKKyAgICAgICAgICAgICAgICAgfCAob2Zmc2V0ICYgMHhmZmZmKSk7
CisgICAgfQorCisgICAgdm9pZCBqcihSZWdpc3RlcklEIHJzKQorICAgIHsKKyAgICAgICAgZW1p
dEluc3QoMHgwMDAwMDAwOCB8IChycyA8PCBPUF9TSF9SUykpOworICAgIH0KKworICAgIHZvaWQg
amFscihSZWdpc3RlcklEIHJzKQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHgwMDAwZjgwOSB8
IChycyA8PCBPUF9TSF9SUykpOworICAgIH0KKworICAgIHZvaWQgamFsKCkKKyAgICB7CisgICAg
ICAgIGVtaXRJbnN0KDB4MGMwMDAwMDApOworICAgIH0KKworICAgIHZvaWQgYmtwdCgpCisgICAg
eworICAgICAgICBpbnQgdmFsdWUgPSA1MTI7IC8qIEJSS19CVUcgKi8KKyAgICAgICAgZW1pdElu
c3QoMHgwMDAwMDAwZCB8ICgodmFsdWUgJiAweDNmZikgPDwgT1BfU0hfQ09ERSkpOworICAgIH0K
KworICAgIHZvaWQgYmdleihSZWdpc3RlcklEIHJzLCBpbnQgaW1tKQorICAgIHsKKyAgICAgICAg
ZW1pdEluc3QoMHgwNDAxMDAwMCB8IChycyA8PCBPUF9TSF9SUykgfCAoaW1tICYgMHhmZmZmKSk7
CisgICAgfQorCisgICAgdm9pZCBibHR6KFJlZ2lzdGVySUQgcnMsIGludCBpbW0pCisgICAgewor
ICAgICAgICBlbWl0SW5zdCgweDA0MDAwMDAwIHwgKHJzIDw8IE9QX1NIX1JTKSB8IChpbW0gJiAw
eGZmZmYpKTsKKyAgICB9CisKKyAgICB2b2lkIGJlcShSZWdpc3RlcklEIHJzLCBSZWdpc3RlcklE
IHJ0LCBpbnQgaW1tKQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHgxMDAwMDAwMCB8IChycyA8
PCBPUF9TSF9SUykgfCAocnQgPDwgT1BfU0hfUlQpIHwgKGltbSAmIDB4ZmZmZikpOworICAgIH0K
KworICAgIHZvaWQgYm5lKFJlZ2lzdGVySUQgcnMsIFJlZ2lzdGVySUQgcnQsIGludCBpbW0pCisg
ICAgeworICAgICAgICBlbWl0SW5zdCgweDE0MDAwMDAwIHwgKHJzIDw8IE9QX1NIX1JTKSB8IChy
dCA8PCBPUF9TSF9SVCkgfCAoaW1tICYgMHhmZmZmKSk7CisgICAgfQorCisgICAgdm9pZCBiYzF0
KCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4NDUwMTAwMDApOworICAgIH0KKworICAgIHZv
aWQgYmMxZigpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDQ1MDAwMDAwKTsKKyAgICB9CisK
KyAgICBKbXBTcmMgbmV3Sm1wU3JjKCkKKyAgICB7CisgICAgICAgIHJldHVybiBKbXBTcmMobV9i
dWZmZXIuc2l6ZSgpKTsKKyAgICB9CisKKyAgICB2b2lkIGFwcGVuZEp1bXAoKQorICAgIHsKKyAg
ICAgICAgbV9qdW1wcy5hcHBlbmQobV9idWZmZXIuc2l6ZSgpKTsKKyAgICB9CisKKyAgICB2b2lk
IGFkZGQoRlBSZWdpc3RlcklEIGZkLCBGUFJlZ2lzdGVySUQgZnMsIEZQUmVnaXN0ZXJJRCBmdCkK
KyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4NDYyMDAwMDAgfCAoZmQgPDwgT1BfU0hfRkQpIHwg
KGZzIDw8IE9QX1NIX0ZTKQorICAgICAgICAgICAgICAgICB8IChmdCA8PCBPUF9TSF9GVCkpOwor
ICAgIH0KKworICAgIHZvaWQgc3ViZChGUFJlZ2lzdGVySUQgZmQsIEZQUmVnaXN0ZXJJRCBmcywg
RlBSZWdpc3RlcklEIGZ0KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHg0NjIwMDAwMSB8IChm
ZCA8PCBPUF9TSF9GRCkgfCAoZnMgPDwgT1BfU0hfRlMpCisgICAgICAgICAgICAgICAgIHwgKGZ0
IDw8IE9QX1NIX0ZUKSk7CisgICAgfQorCisgICAgdm9pZCBtdWxkKEZQUmVnaXN0ZXJJRCBmZCwg
RlBSZWdpc3RlcklEIGZzLCBGUFJlZ2lzdGVySUQgZnQpCisgICAgeworICAgICAgICBlbWl0SW5z
dCgweDQ2MjAwMDAyIHwgKGZkIDw8IE9QX1NIX0ZEKSB8IChmcyA8PCBPUF9TSF9GUykKKyAgICAg
ICAgICAgICAgICAgfCAoZnQgPDwgT1BfU0hfRlQpKTsKKyAgICB9CisKKyAgICB2b2lkIGx3YzEo
RlBSZWdpc3RlcklEIGZ0LCBSZWdpc3RlcklEIHJzLCBpbnQgb2Zmc2V0KQorICAgIHsKKyAgICAg
ICAgZW1pdEluc3QoMHhjNDAwMDAwMCB8IChmdCA8PCBPUF9TSF9GVCkgfCAocnMgPDwgT1BfU0hf
UlMpCisgICAgICAgICAgICAgICAgIHwgKG9mZnNldCAmIDB4ZmZmZikpOworICAgICAgICBjb3BE
ZWxheU5vcCgpOworICAgIH0KKworICAgIHZvaWQgbGRjMShGUFJlZ2lzdGVySUQgZnQsIFJlZ2lz
dGVySUQgcnMsIGludCBvZmZzZXQpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweGQ0MDAwMDAw
IHwgKGZ0IDw8IE9QX1NIX0ZUKSB8IChycyA8PCBPUF9TSF9SUykKKyAgICAgICAgICAgICAgICAg
fCAob2Zmc2V0ICYgMHhmZmZmKSk7CisgICAgfQorCisgICAgdm9pZCBzd2MxKEZQUmVnaXN0ZXJJ
RCBmdCwgUmVnaXN0ZXJJRCBycywgaW50IG9mZnNldCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0
KDB4ZTQwMDAwMDAgfCAoZnQgPDwgT1BfU0hfRlQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAg
ICAgICAgICAgICB8IChvZmZzZXQgJiAweGZmZmYpKTsKKyAgICB9CisKKyAgICB2b2lkIHNkYzEo
RlBSZWdpc3RlcklEIGZ0LCBSZWdpc3RlcklEIHJzLCBpbnQgb2Zmc2V0KQorICAgIHsKKyAgICAg
ICAgZW1pdEluc3QoMHhmNDAwMDAwMCB8IChmdCA8PCBPUF9TSF9GVCkgfCAocnMgPDwgT1BfU0hf
UlMpCisgICAgICAgICAgICAgICAgIHwgKG9mZnNldCAmIDB4ZmZmZikpOworICAgIH0KKworICAg
IHZvaWQgbXRjMShSZWdpc3RlcklEIHJ0LCBGUFJlZ2lzdGVySUQgZnMpCisgICAgeworICAgICAg
ICBlbWl0SW5zdCgweDQ0ODAwMDAwIHwgKGZzIDw8IE9QX1NIX0ZTKSB8IChydCA8PCBPUF9TSF9S
VCkpOworICAgICAgICBjb3BEZWxheU5vcCgpOworICAgIH0KKworICAgIHZvaWQgbWZjMShSZWdp
c3RlcklEIHJ0LCBGUFJlZ2lzdGVySUQgZnMpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDQ0
MDAwMDAwIHwgKGZzIDw8IE9QX1NIX0ZTKSB8IChydCA8PCBPUF9TSF9SVCkpOworICAgICAgICBj
b3BEZWxheU5vcCgpOworICAgIH0KKworICAgIHZvaWQgdHJ1bmN3ZChGUFJlZ2lzdGVySUQgZmQs
IEZQUmVnaXN0ZXJJRCBmcykKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4NDYyMDAwMGQgfCAo
ZmQgPDwgT1BfU0hfRkQpIHwgKGZzIDw8IE9QX1NIX0ZTKSk7CisgICAgfQorCisgICAgdm9pZCBj
dnRkdyhGUFJlZ2lzdGVySUQgZmQsIEZQUmVnaXN0ZXJJRCBmcykKKyAgICB7CisgICAgICAgIGVt
aXRJbnN0KDB4NDY4MDAwMjEgfCAoZmQgPDwgT1BfU0hfRkQpIHwgKGZzIDw8IE9QX1NIX0ZTKSk7
CisgICAgfQorCisgICAgdm9pZCBjZXFkKEZQUmVnaXN0ZXJJRCBmcywgRlBSZWdpc3RlcklEIGZ0
KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHg0NjIwMDAzMiB8IChmcyA8PCBPUF9TSF9GUykg
fCAoZnQgPDwgT1BfU0hfRlQpKTsKKyAgICAgICAgY29wRGVsYXlOb3AoKTsKKyAgICB9CisKKyAg
ICB2b2lkIGNuZ3RkKEZQUmVnaXN0ZXJJRCBmcywgRlBSZWdpc3RlcklEIGZ0KQorICAgIHsKKyAg
ICAgICAgZW1pdEluc3QoMHg0NjIwMDAzZiB8IChmcyA8PCBPUF9TSF9GUykgfCAoZnQgPDwgT1Bf
U0hfRlQpKTsKKyAgICAgICAgY29wRGVsYXlOb3AoKTsKKyAgICB9CisKKyAgICB2b2lkIGNuZ2Vk
KEZQUmVnaXN0ZXJJRCBmcywgRlBSZWdpc3RlcklEIGZ0KQorICAgIHsKKyAgICAgICAgZW1pdElu
c3QoMHg0NjIwMDAzZCB8IChmcyA8PCBPUF9TSF9GUykgfCAoZnQgPDwgT1BfU0hfRlQpKTsKKyAg
ICAgICAgY29wRGVsYXlOb3AoKTsKKyAgICB9CisKKyAgICB2b2lkIGNsdGQoRlBSZWdpc3RlcklE
IGZzLCBGUFJlZ2lzdGVySUQgZnQpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDQ2MjAwMDNj
IHwgKGZzIDw8IE9QX1NIX0ZTKSB8IChmdCA8PCBPUF9TSF9GVCkpOworICAgICAgICBjb3BEZWxh
eU5vcCgpOworICAgIH0KKworICAgIHZvaWQgY2xlZChGUFJlZ2lzdGVySUQgZnMsIEZQUmVnaXN0
ZXJJRCBmdCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4NDYyMDAwM2UgfCAoZnMgPDwgT1Bf
U0hfRlMpIHwgKGZ0IDw8IE9QX1NIX0ZUKSk7CisgICAgICAgIGNvcERlbGF5Tm9wKCk7CisgICAg
fQorCisgICAgdm9pZCBjdWVxZChGUFJlZ2lzdGVySUQgZnMsIEZQUmVnaXN0ZXJJRCBmdCkKKyAg
ICB7CisgICAgICAgIGVtaXRJbnN0KDB4NDYyMDAwMzMgfCAoZnMgPDwgT1BfU0hfRlMpIHwgKGZ0
IDw8IE9QX1NIX0ZUKSk7CisgICAgICAgIGNvcERlbGF5Tm9wKCk7CisgICAgfQorCisgICAgdm9p
ZCBjb2xlZChGUFJlZ2lzdGVySUQgZnMsIEZQUmVnaXN0ZXJJRCBmdCkKKyAgICB7CisgICAgICAg
IGVtaXRJbnN0KDB4NDYyMDAwMzYgfCAoZnMgPDwgT1BfU0hfRlMpIHwgKGZ0IDw8IE9QX1NIX0ZU
KSk7CisgICAgICAgIGNvcERlbGF5Tm9wKCk7CisgICAgfQorCisgICAgdm9pZCBjb2x0ZChGUFJl
Z2lzdGVySUQgZnMsIEZQUmVnaXN0ZXJJRCBmdCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4
NDYyMDAwMzQgfCAoZnMgPDwgT1BfU0hfRlMpIHwgKGZ0IDw8IE9QX1NIX0ZUKSk7CisgICAgICAg
IGNvcERlbGF5Tm9wKCk7CisgICAgfQorCisgICAgdm9pZCBjdWxlZChGUFJlZ2lzdGVySUQgZnMs
IEZQUmVnaXN0ZXJJRCBmdCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4NDYyMDAwMzcgfCAo
ZnMgPDwgT1BfU0hfRlMpIHwgKGZ0IDw8IE9QX1NIX0ZUKSk7CisgICAgICAgIGNvcERlbGF5Tm9w
KCk7CisgICAgfQorCisgICAgdm9pZCBjdWx0ZChGUFJlZ2lzdGVySUQgZnMsIEZQUmVnaXN0ZXJJ
RCBmdCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4NDYyMDAwMzUgfCAoZnMgPDwgT1BfU0hf
RlMpIHwgKGZ0IDw8IE9QX1NIX0ZUKSk7CisgICAgICAgIGNvcERlbGF5Tm9wKCk7CisgICAgfQor
CisgICAgLy8gR2VuZXJhbCBoZWxwZXJzCisKKyAgICBKbXBEc3QgbGFiZWwoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEptcERzdChtX2J1ZmZlci5zaXplKCkpOworICAgIH0KKworICAgIEptcERz
dCBhbGlnbihpbnQgYWxpZ25tZW50KQorICAgIHsKKyAgICAgICAgd2hpbGUgKCFtX2J1ZmZlci5p
c0FsaWduZWQoYWxpZ25tZW50KSkKKyAgICAgICAgICAgIGJrcHQoKTsKKworICAgICAgICByZXR1
cm4gbGFiZWwoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCogZ2V0UmVsb2NhdGVkQWRkcmVz
cyh2b2lkKiBjb2RlLCBKbXBTcmMganVtcCkKKyAgICB7CisgICAgICAgIEFTU0VSVChqdW1wLm1f
b2Zmc2V0ICE9IC0xKTsKKyAgICAgICAgdm9pZCogYiA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KChyZWludGVycHJldF9jYXN0PGludHB0cl90Pihjb2RlKSkgKyBqdW1wLm1fb2Zmc2V0KTsKKyAg
ICAgICAgcmV0dXJuIGI7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQqIGdldFJlbG9jYXRlZEFk
ZHJlc3Modm9pZCogY29kZSwgSm1wRHN0IGxhYmVsKQorICAgIHsKKyAgICAgICAgdm9pZCogYiA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KChyZWludGVycHJldF9jYXN0PGludHB0cl90Pihjb2Rl
KSkgKyBsYWJlbC5tX29mZnNldCk7CisgICAgICAgIHJldHVybiBiOworICAgIH0KKworICAgIHN0
YXRpYyBpbnQgZ2V0RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMoSm1wRHN0IGZyb20sIEptcERzdCB0
bykKKyAgICB7CisgICAgICAgIHJldHVybiB0by5tX29mZnNldCAtIGZyb20ubV9vZmZzZXQ7Cisg
ICAgfQorCisgICAgc3RhdGljIGludCBnZXREaWZmZXJlbmNlQmV0d2VlbkxhYmVscyhKbXBEc3Qg
ZnJvbSwgSm1wU3JjIHRvKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvLm1fb2Zmc2V0IC0gZnJv
bS5tX29mZnNldDsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGdldERpZmZlcmVuY2VCZXR3ZWVu
TGFiZWxzKEptcFNyYyBmcm9tLCBKbXBEc3QgdG8pCisgICAgeworICAgICAgICByZXR1cm4gdG8u
bV9vZmZzZXQgLSBmcm9tLm1fb2Zmc2V0OworICAgIH0KKworICAgIC8vIEFzc2VtYmxlciBhZG1p
biBtZXRob2RzOgorCisgICAgc2l6ZV90IHNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fYnVmZmVyLnNpemUoKTsKKyAgICB9CisKKyAgICB2b2lkKiBleGVjdXRhYmxlQ29weShF
eGVjdXRhYmxlUG9vbCogYWxsb2NhdG9yKQorICAgIHsKKyAgICAgICAgdm9pZCAqcmVzdWx0ID0g
bV9idWZmZXIuZXhlY3V0YWJsZUNvcHkoYWxsb2NhdG9yKTsKKyAgICAgICAgaWYgKCFyZXN1bHQp
CisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICByZWxvY2F0ZUp1bXBzKG1fYnVmZmVy
LmRhdGEoKSwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBz
dGF0aWMgdW5zaWduZWQgZ2V0Q2FsbFJldHVybk9mZnNldChKbXBTcmMgY2FsbCkKKyAgICB7Cisg
ICAgICAgIC8vIFRoZSByZXR1cm4gYWRkcmVzcyBpcyBhZnRlciBhIGNhbGwgYW5kIGEgZGVsYXkg
c2xvdCBpbnN0cnVjdGlvbgorICAgICAgICByZXR1cm4gY2FsbC5tX29mZnNldDsKKyAgICB9CisK
KyAgICAvLyBMaW5raW5nICYgcGF0Y2hpbmc6CisgICAgLy8KKyAgICAvLyAnbGluaycgYW5kICdw
YXRjaCcgbWV0aG9kcyBhcmUgZm9yIHVzZSBvbiB1bnByb3RlY3RlZCBjb2RlIC0gc3VjaCBhcyB0
aGUgY29kZQorICAgIC8vIHdpdGhpbiB0aGUgQXNzZW1ibGVyQnVmZmVyLCBhbmQgY29kZSBiZWlu
ZyBwYXRjaGVkIGJ5IHRoZSBwYXRjaCBidWZmZXIuICBPbmNlCisgICAgLy8gY29kZSBoYXMgYmVl
biBmaW5hbGl6ZWQgaXQgaXMgKHBsYXRmb3JtIHN1cHBvcnQgcGVybWl0dGluZykgd2l0aGluIGEg
bm9uLQorICAgIC8vIHdyaXRhYmxlIHJlZ2lvbiBvZiBtZW1vcnk7IHRvIG1vZGlmeSB0aGUgY29k
ZSBpbiBhbiBleGVjdXRlLW9ubHkgZXhlY3VhYmxlCisgICAgLy8gcG9vbCB0aGUgJ3JlcGF0Y2gn
IGFuZCAncmVsaW5rJyBtZXRob2RzIHNob3VsZCBiZSB1c2VkLgorCisgICAgdm9pZCBsaW5rSnVt
cChKbXBTcmMgZnJvbSwgSm1wRHN0IHRvKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHRvLm1fb2Zm
c2V0ICE9IC0xKTsKKyAgICAgICAgQVNTRVJUKGZyb20ubV9vZmZzZXQgIT0gLTEpOworICAgICAg
ICBNSVBTV29yZCogaW5zbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8TUlQU1dvcmQqPihyZWludGVycHJl
dF9jYXN0PGludHB0cl90PihtX2J1ZmZlci5kYXRhKCkpICsgZnJvbS5tX29mZnNldCk7CisgICAg
ICAgIE1JUFNXb3JkKiB0b1BvcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8TUlQU1dvcmQqPihyZWludGVy
cHJldF9jYXN0PGludHB0cl90PihtX2J1ZmZlci5kYXRhKCkpICsgdG8ubV9vZmZzZXQpOworCisg
ICAgICAgIEFTU0VSVCghKCooaW5zbiAtIDEpKSAmJiAhKCooaW5zbiAtIDIpKSAmJiAhKCooaW5z
biAtIDMpKSAmJiAhKCooaW5zbiAtIDUpKSk7CisgICAgICAgIGluc24gPSBpbnNuIC0gNjsKKyAg
ICAgICAgbGlua1dpdGhPZmZzZXQoaW5zbiwgdG9Qb3MpOworICAgIH0KKworICAgIHN0YXRpYyB2
b2lkIGxpbmtKdW1wKHZvaWQqIGNvZGUsIEptcFNyYyBmcm9tLCB2b2lkKiB0bykKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChmcm9tLm1fb2Zmc2V0ICE9IC0xKTsKKyAgICAgICAgTUlQU1dvcmQqIGlu
c24gPSByZWludGVycHJldF9jYXN0PE1JUFNXb3JkKj4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJf
dD4oY29kZSkgKyBmcm9tLm1fb2Zmc2V0KTsKKworICAgICAgICBBU1NFUlQoISgqKGluc24gLSAx
KSkgJiYgISgqKGluc24gLSAyKSkgJiYgISgqKGluc24gLSAzKSkgJiYgISgqKGluc24gLSA1KSkp
OworICAgICAgICBpbnNuID0gaW5zbiAtIDY7CisgICAgICAgIGxpbmtXaXRoT2Zmc2V0KGluc24s
IHRvKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBsaW5rQ2FsbCh2b2lkKiBjb2RlLCBKbXBT
cmMgZnJvbSwgdm9pZCogdG8pCisgICAgeworICAgICAgICBNSVBTV29yZCogaW5zbiA9IHJlaW50
ZXJwcmV0X2Nhc3Q8TUlQU1dvcmQqPihyZWludGVycHJldF9jYXN0PGludHB0cl90Pihjb2RlKSAr
IGZyb20ubV9vZmZzZXQpOworICAgICAgICBsaW5rQ2FsbEludGVybmFsKGluc24sIHRvKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgdm9pZCBsaW5rUG9pbnRlcih2b2lkKiBjb2RlLCBKbXBEc3QgZnJv
bSwgdm9pZCogdG8pCisgICAgeworICAgICAgICBNSVBTV29yZCogaW5zbiA9IHJlaW50ZXJwcmV0
X2Nhc3Q8TUlQU1dvcmQqPihyZWludGVycHJldF9jYXN0PGludHB0cl90Pihjb2RlKSArIGZyb20u
bV9vZmZzZXQpOworICAgICAgICBBU1NFUlQoKCppbnNuICYgMHhmZmUwMDAwMCkgPT0gMHgzYzAw
MDAwMCk7IC8vIGx1aQorICAgICAgICAqaW5zbiA9ICgqaW5zbiAmIDB4ZmZmZjAwMDApIHwgKChy
ZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgPj4gMTYpICYgMHhmZmZmKTsKKyAgICAgICAg
aW5zbisrOworICAgICAgICBBU1NFUlQoKCppbnNuICYgMHhmYzAwMDAwMCkgPT0gMHgzNDAwMDAw
MCk7IC8vIG9yaQorICAgICAgICAqaW5zbiA9ICgqaW5zbiAmIDB4ZmZmZjAwMDApIHwgKHJlaW50
ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAmIDB4ZmZmZik7CisgICAgfQorCisgICAgc3RhdGlj
IHZvaWQgcmVsaW5rSnVtcCh2b2lkKiBmcm9tLCB2b2lkKiB0bykKKyAgICB7CisgICAgICAgIE1J
UFNXb3JkKiBpbnNuID0gcmVpbnRlcnByZXRfY2FzdDxNSVBTV29yZCo+KGZyb20pOworCisgICAg
ICAgIEFTU0VSVCghKCooaW5zbiAtIDEpKSAmJiAhKCooaW5zbiAtIDUpKSk7CisgICAgICAgIGlu
c24gPSBpbnNuIC0gNjsKKyAgICAgICAgaW50IGZsdXNoU2l6ZSA9IGxpbmtXaXRoT2Zmc2V0KGlu
c24sIHRvKTsKKworICAgICAgICBFeGVjdXRhYmxlQWxsb2NhdG9yOjpjYWNoZUZsdXNoKGluc24s
IGZsdXNoU2l6ZSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVsaW5rQ2FsbCh2b2lkKiBm
cm9tLCB2b2lkKiB0bykKKyAgICB7CisgICAgICAgIHZvaWQqIHN0YXJ0OworICAgICAgICBpbnQg
c2l6ZSA9IGxpbmtDYWxsSW50ZXJuYWwoZnJvbSwgdG8pOworICAgICAgICBpZiAoc2l6ZSA9PSBz
aXplb2YoTUlQU1dvcmQpKQorICAgICAgICAgICAgc3RhcnQgPSByZWludGVycHJldF9jYXN0PHZv
aWQqPihyZWludGVycHJldF9jYXN0PGludHB0cl90Pihmcm9tKSAtIDIgKiBzaXplb2YoTUlQU1dv
cmQpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3RhcnQgPSByZWludGVycHJldF9jYXN0
PHZvaWQqPihyZWludGVycHJldF9jYXN0PGludHB0cl90Pihmcm9tKSAtIDQgKiBzaXplb2YoTUlQ
U1dvcmQpKTsKKworICAgICAgICBFeGVjdXRhYmxlQWxsb2NhdG9yOjpjYWNoZUZsdXNoKHN0YXJ0
LCBzaXplKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoSW50MzIodm9pZCogZnJv
bSwgaW50MzJfdCB0bykKKyAgICB7CisgICAgICAgIE1JUFNXb3JkKiBpbnNuID0gcmVpbnRlcnBy
ZXRfY2FzdDxNSVBTV29yZCo+KGZyb20pOworICAgICAgICBBU1NFUlQoKCppbnNuICYgMHhmZmUw
MDAwMCkgPT0gMHgzYzAwMDAwMCk7IC8vIGx1aQorICAgICAgICAqaW5zbiA9ICgqaW5zbiAmIDB4
ZmZmZjAwMDApIHwgKCh0byA+PiAxNikgJiAweGZmZmYpOworICAgICAgICBpbnNuKys7CisgICAg
ICAgIEFTU0VSVCgoKmluc24gJiAweGZjMDAwMDAwKSA9PSAweDM0MDAwMDAwKTsgLy8gb3JpCisg
ICAgICAgICppbnNuID0gKCppbnNuICYgMHhmZmZmMDAwMCkgfCAodG8gJiAweGZmZmYpOworICAg
ICAgICBpbnNuLS07CisgICAgICAgIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmNhY2hlRmx1c2goaW5z
biwgMiAqIHNpemVvZihNSVBTV29yZCkpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHJlcGF0
Y2hQb2ludGVyKHZvaWQqIGZyb20sIHZvaWQqIHRvKQorICAgIHsKKyAgICAgICAgcmVwYXRjaElu
dDMyKGZyb20sIHJlaW50ZXJwcmV0X2Nhc3Q8aW50MzJfdD4odG8pKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgdm9pZCByZXBhdGNoTG9hZFB0clRvTEVBKHZvaWQqIGZyb20pCisgICAgeworICAgICAg
ICBNSVBTV29yZCogaW5zbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8TUlQU1dvcmQqPihmcm9tKTsKKyAg
ICAgICAgaW5zbiA9IGluc24gKyAzOworICAgICAgICBBU1NFUlQoKCppbnNuICYgMHhmYzAwMDAw
MCkgPT0gMHg4YzAwMDAwMCk7IC8vIGx3CisgICAgICAgIC8qIGx3IC0+IGFkZGl1ICovCisgICAg
ICAgICppbnNuID0gMHgyNDAwMDAwMCB8ICgqaW5zbiAmIDB4MDNmZmZmZmYpOworCisgICAgICAg
IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmNhY2hlRmx1c2goaW5zbiwgc2l6ZW9mKE1JUFNXb3JkKSk7
CisgICAgfQorCitwcml2YXRlOgorCisgICAgLyogVXBkYXRlIGVhY2gganVtcCBpbiB0aGUgYnVm
ZmVyIG9mIG5ld0Jhc2UuICAqLworICAgIHZvaWQgcmVsb2NhdGVKdW1wcyh2b2lkKiBvbGRCYXNl
LCB2b2lkKiBuZXdCYXNlKQorICAgIHsKKyAgICAgICAgLy8gQ2hlY2sgZWFjaCBqdW1wCisgICAg
ICAgIGZvciAoSnVtcHM6Okl0ZXJhdG9yIGl0ZXIgPSBtX2p1bXBzLmJlZ2luKCk7IGl0ZXIgIT0g
bV9qdW1wcy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgICAgICBpbnQgcG9zID0gKml0ZXI7Cisg
ICAgICAgICAgICBNSVBTV29yZCogaW5zbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8TUlQU1dvcmQqPihy
ZWludGVycHJldF9jYXN0PGludHB0cl90PihuZXdCYXNlKSArIHBvcyk7CisgICAgICAgICAgICBp
bnNuID0gaW5zbiArIDI7CisgICAgICAgICAgICAvLyBOZWVkIHRvIG1ha2Ugc3VyZSB3ZSBoYXZl
IDUgdmFsaWQgaW5zdHJ1Y3Rpb25zIGFmdGVyIHBvcworICAgICAgICAgICAgaWYgKCh1bnNpZ25l
ZCBpbnQpcG9zID49IG1fYnVmZmVyLnNpemUoKSAtIDUgKiBzaXplb2YoTUlQU1dvcmQpKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBpZiAoKCppbnNuICYgMHhmYzAw
MDAwMCkgPT0gMHgwODAwMDAwMCkgeyAvLyBqCisgICAgICAgICAgICAgICAgaW50IG9mZnNldCA9
ICppbnNuICYgMHgwM2ZmZmZmZjsKKyAgICAgICAgICAgICAgICBpbnQgb2xkSW5zbkFkZHJlc3Mg
PSAoaW50KWluc24gLSAoaW50KW5ld0Jhc2UgKyAoaW50KW9sZEJhc2U7CisgICAgICAgICAgICAg
ICAgaW50IHRvcEZvdXJCaXRzID0gKG9sZEluc25BZGRyZXNzICsgNCkgPj4gMjg7CisgICAgICAg
ICAgICAgICAgaW50IG9sZFRhcmdldEFkZHJlc3MgPSAodG9wRm91ckJpdHMgPDwgMjgpIHwgKG9m
ZnNldCA8PCAyKTsKKyAgICAgICAgICAgICAgICBpbnQgbmV3VGFyZ2V0QWRkcmVzcyA9IG9sZFRh
cmdldEFkZHJlc3MgLSAoaW50KW9sZEJhc2UgKyAoaW50KW5ld0Jhc2U7CisgICAgICAgICAgICAg
ICAgaW50IG5ld0luc25BZGRyZXNzID0gKGludClpbnNuOworICAgICAgICAgICAgICAgIGlmICgo
KG5ld0luc25BZGRyZXNzICsgNCkgPj4gMjgpID09IChuZXdUYXJnZXRBZGRyZXNzID4+IDI4KSkK
KyAgICAgICAgICAgICAgICAgICAgKmluc24gPSAweDA4MDAwMDAwIHwgKChuZXdUYXJnZXRBZGRy
ZXNzID4+IDIpICYgMHgzZmZmZmZmKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgLyogbHVpICovCisgICAgICAgICAgICAgICAgICAgICppbnNuID0gMHgzYzAw
MDAwMCB8IChNSVBTUmVnaXN0ZXJzOjp0OSA8PCBPUF9TSF9SVCkgfCAoKG5ld1RhcmdldEFkZHJl
c3MgPj4gMTYpICYgMHhmZmZmKTsKKyAgICAgICAgICAgICAgICAgICAgLyogb3JpICovCisgICAg
ICAgICAgICAgICAgICAgICooaW5zbiArIDEpID0gMHgzNDAwMDAwMCB8IChNSVBTUmVnaXN0ZXJz
Ojp0OSA8PCBPUF9TSF9SVCkgfCAoTUlQU1JlZ2lzdGVyczo6dDkgPDwgT1BfU0hfUlMpIHwgKG5l
d1RhcmdldEFkZHJlc3MgJiAweGZmZmYpOworICAgICAgICAgICAgICAgICAgICAvKiBqciAqLwor
ICAgICAgICAgICAgICAgICAgICAqKGluc24gKyAyKSA9IDB4MDAwMDAwMDggfCAoTUlQU1JlZ2lz
dGVyczo6dDkgPDwgT1BfU0hfUlMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAoKCppbnNuICYgMHhmZmUwMDAwMCkgPT0gMHgzYzAwMDAwMCkgeyAvLyBsdWkKKyAg
ICAgICAgICAgICAgICBpbnQgaGlnaCA9ICgqaW5zbiAmIDB4ZmZmZikgPDwgMTY7CisgICAgICAg
ICAgICAgICAgaW50IGxvdyA9ICooaW5zbiArIDEpICYgMHhmZmZmOworICAgICAgICAgICAgICAg
IGludCBvbGRUYXJnZXRBZGRyZXNzID0gaGlnaCB8IGxvdzsKKyAgICAgICAgICAgICAgICBpbnQg
bmV3VGFyZ2V0QWRkcmVzcyA9IG9sZFRhcmdldEFkZHJlc3MgLSAoaW50KW9sZEJhc2UgKyAoaW50
KW5ld0Jhc2U7CisgICAgICAgICAgICAgICAgLyogbHVpICovCisgICAgICAgICAgICAgICAgKmlu
c24gPSAweDNjMDAwMDAwIHwgKE1JUFNSZWdpc3RlcnM6OnQ5IDw8IE9QX1NIX1JUKSB8ICgobmV3
VGFyZ2V0QWRkcmVzcyA+PiAxNikgJiAweGZmZmYpOworICAgICAgICAgICAgICAgIC8qIG9yaSAq
LworICAgICAgICAgICAgICAgICooaW5zbiArIDEpID0gMHgzNDAwMDAwMCB8IChNSVBTUmVnaXN0
ZXJzOjp0OSA8PCBPUF9TSF9SVCkgfCAoTUlQU1JlZ2lzdGVyczo6dDkgPDwgT1BfU0hfUlMpIHwg
KG5ld1RhcmdldEFkZHJlc3MgJiAweGZmZmYpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorCisgICAgc3RhdGljIGludCBsaW5rV2l0aE9mZnNldChNSVBTV29yZCogaW5zbiwgdm9p
ZCogdG8pCisgICAgeworICAgICAgICBBU1NFUlQoKCppbnNuICYgMHhmYzAwMDAwMCkgPT0gMHgx
MDAwMDAwMCAvLyBiZXEKKyAgICAgICAgICAgICAgIHx8ICgqaW5zbiAmIDB4ZmMwMDAwMDApID09
IDB4MTQwMDAwMDAgLy8gYm5lCisgICAgICAgICAgICAgICB8fCAoKmluc24gJiAweGZmZmYwMDAw
KSA9PSAweDQ1MDEwMDAwIC8vIGJjMXQKKyAgICAgICAgICAgICAgIHx8ICgqaW5zbiAmIDB4ZmZm
ZjAwMDApID09IDB4NDUwMDAwMDApOyAvLyBiYzFmCisgICAgICAgIGludHB0cl90IGRpZmYgPSAo
cmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pCisgICAgICAgICAgICAgICAgICAgICAgICAg
LSByZWludGVycHJldF9jYXN0PGludHB0cl90PihpbnNuKSAtIDQpID4+IDI7CisKKyAgICAgICAg
aWYgKGRpZmYgPCAtMzI3NjggfHwgZGlmZiA+IDMyNzY3IHx8ICooaW5zbiArIDIpICE9IDB4MTAw
MDAwMDMpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgQ29udmVydCB0aGUgc2Vx
dWVuY2U6CisgICAgICAgICAgICAgICAgICBiZXEgJDIsICQzLCB0YXJnZXQKKyAgICAgICAgICAg
ICAgICAgIG5vcAorICAgICAgICAgICAgICAgICAgYiAxZgorICAgICAgICAgICAgICAgICAgbm9w
CisgICAgICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAg
ICAgICAgIDE6CisKKyAgICAgICAgICAgICAgICB0byB0aGUgbmV3IHNlcXVlbmNlIGlmIHBvc3Np
YmxlOgorICAgICAgICAgICAgICAgICAgYm5lICQyLCAkMywgMWYKKyAgICAgICAgICAgICAgICAg
IG5vcAorICAgICAgICAgICAgICAgICAgaiAgICB0YXJnZXQKKyAgICAgICAgICAgICAgICAgIG5v
cAorICAgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgICBub3AKKyAgICAgICAg
ICAgICAgICAxOgorCisgICAgICAgICAgICAgICAgT1IgdG8gdGhlIG5ldyBzZXF1ZW5jZToKKyAg
ICAgICAgICAgICAgICAgIGJuZSAkMiwgJDMsIDFmCisgICAgICAgICAgICAgICAgICBub3AKKyAg
ICAgICAgICAgICAgICAgIGx1aSAkMjUsIHRhcmdldCA+PiAxNgorICAgICAgICAgICAgICAgICAg
b3JpICQyNSwgJDI1LCB0YXJnZXQgJiAweGZmZmYKKyAgICAgICAgICAgICAgICAgIGpyICQyNQor
ICAgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgMToKKworICAgICAgICAgICAg
ICAgIE5vdGU6IGJlcS9ibmUvYmMxdCBhcmUgY29udmVydGVkIHRvIGJuZS9iZXEvYmMxZi4KKyAg
ICAgICAgICAgICovCisKKyAgICAgICAgICAgIGlmICgqKGluc24gKyAyKSA9PSAweDEwMDAwMDAz
KSB7CisgICAgICAgICAgICAgICAgaWYgKCgqaW5zbiAmIDB4ZmMwMDAwMDApID09IDB4MTAwMDAw
MDApIC8vIGJlcQorICAgICAgICAgICAgICAgICAgICAqaW5zbiA9ICgqaW5zbiAmIDB4MDNmZjAw
MDApIHwgMHgxNDAwMDAwNTsgLy8gYm5lCisgICAgICAgICAgICAgICAgZWxzZSBpZiAoKCppbnNu
ICYgMHhmYzAwMDAwMCkgPT0gMHgxNDAwMDAwMCkgLy8gYm5lCisgICAgICAgICAgICAgICAgICAg
ICppbnNuID0gKCppbnNuICYgMHgwM2ZmMDAwMCkgfCAweDEwMDAwMDA1OyAvLyBiZXEKKyAgICAg
ICAgICAgICAgICBlbHNlIGlmICgoKmluc24gJiAweGZmZmYwMDAwKSA9PSAweDQ1MDEwMDAwKSAv
LyBiYzF0CisgICAgICAgICAgICAgICAgICAgICppbnNuID0gMHg0NTAwMDAwNTsgLy8gYmMxZgor
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKDApOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpbnNuID0gaW5zbiArIDI7CisgICAgICAgICAgICBp
ZiAoKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluc24pICsgNCkgPj4gMjgKKyAgICAgICAg
ICAgICAgICA9PSByZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgPj4gMjgpIHsKKyAgICAg
ICAgICAgICAgICAqaW5zbiA9IDB4MDgwMDAwMDAgfCAoKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRy
X3Q+KHRvKSA+PiAyKSAmIDB4M2ZmZmZmZik7CisgICAgICAgICAgICAgICAgKihpbnNuICsgMSkg
PSAwOworICAgICAgICAgICAgICAgIHJldHVybiA0ICogc2l6ZW9mKE1JUFNXb3JkKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaW50cHRyX3QgbmV3VGFyZ2V0QWRkcmVzcyA9IHJlaW50
ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKTsKKyAgICAgICAgICAgIC8qIGx1aSAqLworICAgICAg
ICAgICAgKmluc24gPSAweDNjMDAwMDAwIHwgKE1JUFNSZWdpc3RlcnM6OnQ5IDw8IE9QX1NIX1JU
KSB8ICgobmV3VGFyZ2V0QWRkcmVzcyA+PiAxNikgJiAweGZmZmYpOworICAgICAgICAgICAgLyog
b3JpICovCisgICAgICAgICAgICAqKGluc24gKyAxKSA9IDB4MzQwMDAwMDAgfCAoTUlQU1JlZ2lz
dGVyczo6dDkgPDwgT1BfU0hfUlQpIHwgKE1JUFNSZWdpc3RlcnM6OnQ5IDw8IE9QX1NIX1JTKSB8
IChuZXdUYXJnZXRBZGRyZXNzICYgMHhmZmZmKTsKKyAgICAgICAgICAgIC8qIGpyICovCisgICAg
ICAgICAgICAqKGluc24gKyAyKSA9IDB4MDAwMDAwMDggfCAoTUlQU1JlZ2lzdGVyczo6dDkgPDwg
T1BfU0hfUlMpOworICAgICAgICAgICAgcmV0dXJuIDUgKiBzaXplb2YoTUlQU1dvcmQpOworICAg
ICAgICB9CisKKyAgICAgICAgKmluc24gPSAoKmluc24gJiAweGZmZmYwMDAwKSB8IChkaWZmICYg
MHhmZmZmKTsKKyAgICAgICAgcmV0dXJuIHNpemVvZihNSVBTV29yZCk7CisgICAgfQorCisgICAg
c3RhdGljIGludCBsaW5rQ2FsbEludGVybmFsKHZvaWQqIGZyb20sIHZvaWQqIHRvKQorICAgIHsK
KyAgICAgICAgTUlQU1dvcmQqIGluc24gPSByZWludGVycHJldF9jYXN0PE1JUFNXb3JkKj4oZnJv
bSk7CisgICAgICAgIGluc24gPSBpbnNuIC0gNDsKKworICAgICAgICBpZiAoKCooaW5zbiArIDIp
ICYgMHhmYzAwMDAwMCkgPT0gMHgwYzAwMDAwMCkgeyAvLyBqYWwKKyAgICAgICAgICAgIGlmICgo
cmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZnJvbSkgLSA0KSA+PiAyOAorICAgICAgICAgICAg
ICAgID09IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSA+PiAyOCkgeworICAgICAgICAg
ICAgICAgICooaW5zbiArIDIpID0gMHgwYzAwMDAwMCB8ICgocmVpbnRlcnByZXRfY2FzdDxpbnRw
dHJfdD4odG8pID4+IDIpICYgMHgzZmZmZmZmKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gc2l6
ZW9mKE1JUFNXb3JkKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogbHVpICQyNSwg
KHRvID4+IDE2KSAmIDB4ZmZmZiAqLworICAgICAgICAgICAgKmluc24gPSAweDNjMDAwMDAwIHwg
KE1JUFNSZWdpc3RlcnM6OnQ5IDw8IE9QX1NIX1JUKSB8ICgocmVpbnRlcnByZXRfY2FzdDxpbnRw
dHJfdD4odG8pID4+IDE2KSAmIDB4ZmZmZik7CisgICAgICAgICAgICAvKiBvcmkgJDI1LCAkMjUs
IHRvICYgMHhmZmZmICovCisgICAgICAgICAgICAqKGluc24gKyAxKSA9IDB4MzQwMDAwMDAgfCAo
TUlQU1JlZ2lzdGVyczo6dDkgPDwgT1BfU0hfUlQpIHwgKE1JUFNSZWdpc3RlcnM6OnQ5IDw8IE9Q
X1NIX1JTKSB8IChyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgJiAweGZmZmYpOworICAg
ICAgICAgICAgLyogamFsciAkMjUgKi8KKyAgICAgICAgICAgICooaW5zbiArIDIpID0gMHgwMDAw
ZjgwOSB8IChNSVBTUmVnaXN0ZXJzOjp0OSA8PCBPUF9TSF9SUyk7CisgICAgICAgICAgICByZXR1
cm4gMyAqIHNpemVvZihNSVBTV29yZCk7CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQoKCpp
bnNuICYgMHhmZmUwMDAwMCkgPT0gMHgzYzAwMDAwMCk7IC8vIGx1aQorICAgICAgICBBU1NFUlQo
KCooaW5zbiArIDEpICYgMHhmYzAwMDAwMCkgPT0gMHgzNDAwMDAwMCk7IC8vIG9yaQorCisgICAg
ICAgIC8qIGx1aSAqLworICAgICAgICAqaW5zbiA9ICgqaW5zbiAmIDB4ZmZmZjAwMDApIHwgKChy
ZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgPj4gMTYpICYgMHhmZmZmKTsKKyAgICAgICAg
Lyogb3JpICovCisgICAgICAgICooaW5zbiArIDEpID0gKCooaW5zbiArIDEpICYgMHhmZmZmMDAw
MCkgfCAocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pICYgMHhmZmZmKTsKKyAgICAgICAg
cmV0dXJuIDIgKiBzaXplb2YoTUlQU1dvcmQpOworICAgIH0KKworICAgIEFzc2VtYmxlckJ1ZmZl
ciBtX2J1ZmZlcjsKKyAgICBKdW1wcyBtX2p1bXBzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBFTkFCTEUoQVNTRU1CTEVSKSAmJiBDUFUoTUlQUykKKworI2VuZGlmIC8v
IE1JUFNBc3NlbWJsZXJfaApJbmRleDogSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyLmgJKHJldmlzaW9uIDU1MTk1KQorKysgSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDEwIEBAIG5hbWVzcGFj
ZSBKU0MgeyB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyQVIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxl
ckFSTS5oIgogbmFtZXNwYWNlIEpTQyB7IHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJBUk0gTWFjcm9B
c3NlbWJsZXJCYXNlOyB9OwogCisjZWxpZiBDUFUoTUlQUykKKyNpbmNsdWRlICJNYWNyb0Fzc2Vt
Ymxlck1JUFMuaCIKK25hbWVzcGFjZSBKU0MgeyB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyTUlQUyBN
YWNyb0Fzc2VtYmxlckJhc2U7IH07CisKICNlbGlmIENQVShYODYpCiAjaW5jbHVkZSAiTWFjcm9B
c3NlbWJsZXJYODYuaCIKIG5hbWVzcGFjZSBKU0MgeyB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyWDg2
IE1hY3JvQXNzZW1ibGVyQmFzZTsgfTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlck1JUFMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmgJKHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTY2
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIE1JUFMgVEVDSE5PTE9HSUVTLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgTUlQUyBURUNITk9MT0dJRVMsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE1hY3JvQXNzZW1ibGVyTUlQ
U19oCisjZGVmaW5lIE1hY3JvQXNzZW1ibGVyTUlQU19oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZv
cm0uaD4KKworI2lmIEVOQUJMRShBU1NFTUJMRVIpICYmIENQVShNSVBTKQorCisjaW5jbHVkZSAi
TUlQU0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIkFic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIE1hY3JvQXNzZW1ibGVyTUlQUyA6IHB1YmxpYyBBYnN0
cmFjdE1hY3JvQXNzZW1ibGVyPE1JUFNBc3NlbWJsZXI+IHsKK3B1YmxpYzoKKworICAgIE1hY3Jv
QXNzZW1ibGVyTUlQUygpCisgICAgICAgIDogbV9maXhlZFdpZHRoKGZhbHNlKQorICAgIHsKKyAg
ICB9CisKKyAgICBzdGF0aWMgY29uc3QgU2NhbGUgU2NhbGVQdHIgPSBUaW1lc0ZvdXI7CisKKyAg
ICAvLyBGb3Igc3RvcmluZyBpbW1lZGlhdGUgbnVtYmVyCisgICAgc3RhdGljIGNvbnN0IFJlZ2lz
dGVySUQgaW1tVGVtcFJlZ2lzdGVyID0gTUlQU1JlZ2lzdGVyczo6dDA7CisgICAgLy8gRm9yIHN0
b3JpbmcgZGF0YSBsb2FkZWQgZnJvbSB0aGUgbWVtb3J5CisgICAgc3RhdGljIGNvbnN0IFJlZ2lz
dGVySUQgZGF0YVRlbXBSZWdpc3RlciA9IE1JUFNSZWdpc3RlcnM6OnQxOworICAgIC8vIEZvciBz
dG9yaW5nIGFkZHJlc3MgYmFzZQorICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGFkZHJUZW1w
UmVnaXN0ZXIgPSBNSVBTUmVnaXN0ZXJzOjp0MjsKKyAgICAvLyBGb3Igc3RvcmluZyBjb21wYXJl
IHJlc3VsdAorICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGNtcFRlbXBSZWdpc3RlciA9IE1J
UFNSZWdpc3RlcnM6OnQzOworCisgICAgLy8gRlAgdGVtcCByZWdpc3RlcgorICAgIHN0YXRpYyBj
b25zdCBGUFJlZ2lzdGVySUQgZnBUZW1wUmVnaXN0ZXIgPSBNSVBTUmVnaXN0ZXJzOjpmMTY7CisK
KyAgICBlbnVtIENvbmRpdGlvbiB7CisgICAgICAgIEVxdWFsLAorICAgICAgICBOb3RFcXVhbCwK
KyAgICAgICAgQWJvdmUsCisgICAgICAgIEFib3ZlT3JFcXVhbCwKKyAgICAgICAgQmVsb3csCisg
ICAgICAgIEJlbG93T3JFcXVhbCwKKyAgICAgICAgR3JlYXRlclRoYW4sCisgICAgICAgIEdyZWF0
ZXJUaGFuT3JFcXVhbCwKKyAgICAgICAgTGVzc1RoYW4sCisgICAgICAgIExlc3NUaGFuT3JFcXVh
bCwKKyAgICAgICAgT3ZlcmZsb3csCisgICAgICAgIFNpZ25lZCwKKyAgICAgICAgWmVybywKKyAg
ICAgICAgTm9uWmVybworICAgIH07CisKKyAgICBlbnVtIERvdWJsZUNvbmRpdGlvbiB7CisgICAg
ICAgIERvdWJsZUVxdWFsLAorICAgICAgICBEb3VibGVOb3RFcXVhbCwKKyAgICAgICAgRG91Ymxl
R3JlYXRlclRoYW4sCisgICAgICAgIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCwKKyAgICAgICAg
RG91YmxlTGVzc1RoYW4sCisgICAgICAgIERvdWJsZUxlc3NUaGFuT3JFcXVhbCwKKyAgICAgICAg
RG91YmxlRXF1YWxPclVub3JkZXJlZCwKKyAgICAgICAgRG91YmxlTm90RXF1YWxPclVub3JkZXJl
ZCwKKyAgICAgICAgRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCwKKyAgICAgICAgRG91Ymxl
R3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQsCisgICAgICAgIERvdWJsZUxlc3NUaGFuT3JV
bm9yZGVyZWQsCisgICAgICAgIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkCisgICAg
fTsKKworICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHN0YWNrUG9pbnRlclJlZ2lzdGVyID0g
TUlQU1JlZ2lzdGVyczo6c3A7CisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmV0dXJuQWRk
cmVzc1JlZ2lzdGVyID0gTUlQU1JlZ2lzdGVyczo6cmE7CisKKyAgICAvLyBJbnRlZ2VyIGFyaXRo
bWV0aWMgb3BlcmF0aW9uczoKKyAgICAvLworICAgIC8vIE9wZXJhdGlvbnMgYXJlIHR5cGljYWxs
eSB0d28gb3BlcmFuZCAtIG9wZXJhdGlvbihzb3VyY2UsIHNyY0RzdCkKKyAgICAvLyBGb3IgbWFu
eSBvcGVyYXRpb25zIHRoZSBzb3VyY2UgbWF5IGJlIGFuIEltbTMyLCB0aGUgc3JjRHN0IG9wZXJh
bmQKKyAgICAvLyBtYXkgb2Z0ZW4gYmUgYSBtZW1vcnkgbG9jYXRpb24gKGV4cGxpY3RseSBkZXNj
cmliZWQgdXNpbmcgYW4gQWRkcmVzcworICAgIC8vIG9iamVjdCkuCisKKyAgICB2b2lkIGFkZDMy
KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5hZGR1KGRlc3QsIGRlc3QsIHNyYyk7CisgICAgfQorCisgICAgdm9pZCBhZGQzMihJbW0z
MiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGFkZDMyKGltbSwgZGVzdCwg
ZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBhZGQzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3Jj
LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAoIWltbS5tX2lzUG9pbnRlciAm
JiBpbW0ubV92YWx1ZSA+PSAtMzI3NjggJiYgaW1tLm1fdmFsdWUgPD0gMzI3NjcKKyAgICAgICAg
ICAgICYmICFtX2ZpeGVkV2lkdGgpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgIGFk
ZGl1ICAgICBkZXN0LCBzcmMsIGltbQorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmFkZGl1KGRlc3QsIHNyYywgaW1tLm1fdmFsdWUpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgbGkgICAgICAgIGltbVRlbXAsIGltbQorICAg
ICAgICAgICAgICBhZGR1ICAgICAgZGVzdCwgc3JjLCBpbW1UZW1wCisgICAgICAgICAgICAqLwor
ICAgICAgICAgICAgbW92ZShpbW0sIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5hZGR1KGRlc3QsIHNyYywgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHZvaWQgYWRkMzIoSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgewor
ICAgICAgICBpZiAoYWRkcmVzcy5vZmZzZXQgPj0gLTMyNzY4ICYmIGFkZHJlc3Mub2Zmc2V0IDw9
IDMyNzY3CisgICAgICAgICAgICAmJiAhbV9maXhlZFdpZHRoKSB7CisgICAgICAgICAgICAvKgor
ICAgICAgICAgICAgICBsdyAgICAgICAgZGF0YVRlbXAsIG9mZnNldChiYXNlKQorICAgICAgICAg
ICAgICBsaSAgICAgICAgaW1tVGVtcCwgaW1tCisgICAgICAgICAgICAgIGFkZHUgICAgICBkYXRh
VGVtcCwgZGF0YVRlbXAsIGltbVRlbXAKKyAgICAgICAgICAgICAgc3cgICAgICAgIGRhdGFUZW1w
LCBvZmZzZXQoYmFzZSkKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5s
dyhkYXRhVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAg
ICAgICAgIGlmICghaW1tLm1faXNQb2ludGVyCisgICAgICAgICAgICAgICAgJiYgaW1tLm1fdmFs
dWUgPj0gLTMyNzY4ICYmIGltbS5tX3ZhbHVlIDw9IDMyNzY3CisgICAgICAgICAgICAgICAgJiYg
IW1fZml4ZWRXaWR0aCkKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRpdShkYXRhVGVt
cFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGltbS5tX3ZhbHVlKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IG1vdmUoaW1tLCBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVy
LmFkZHUoZGF0YVRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3RlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5zdyhkYXRhVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UsIGFk
ZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qCisgICAgICAg
ICAgICAgIGx1aSAgICAgICBhZGRyVGVtcCwgKG9mZnNldCArIDB4ODAwMCkgPj4gMTYKKyAgICAg
ICAgICAgICAgYWRkdSAgICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgYmFzZQorICAgICAgICAgICAg
ICBsdyAgICAgICAgZGF0YVRlbXAsIChvZmZzZXQgJiAweGZmZmYpKGFkZHJUZW1wKQorICAgICAg
ICAgICAgICBsaSAgICAgICAgaW1tdGVtcCwgaW1tCisgICAgICAgICAgICAgIGFkZHUgICAgICBk
YXRhVGVtcCwgZGF0YVRlbXAsIGltbVRlbXAKKyAgICAgICAgICAgICAgc3cgICAgICAgIGRhdGFU
ZW1wLCAob2Zmc2V0ICYgMHhmZmZmKShhZGRyVGVtcCkKKyAgICAgICAgICAgICovCisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5sdWkoYWRkclRlbXBSZWdpc3RlciwgKGFkZHJlc3Mub2Zmc2V0ICsg
MHg4MDAwKSA+PiAxNik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVn
aXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSk7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5sdyhkYXRhVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9m
ZnNldCk7CisKKyAgICAgICAgICAgIGlmIChpbW0ubV92YWx1ZSA+PSAtMzI3NjggJiYgaW1tLm1f
dmFsdWUgPD0gMzI3NjcgJiYgIW1fZml4ZWRXaWR0aCkKKyAgICAgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5hZGRpdShkYXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGltbS5tX3ZhbHVlKTsKKyAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgIG1vdmUoaW1tLCBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoZGF0YVRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3Rl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltbVRlbXBSZWdpc3Rlcik7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdyhkYXRhVGVtcFJlZ2lzdGVy
LCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICB2b2lkIGFkZDMyKEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBsb2FkMzIoc3JjLCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgYWRkMzIoZGF0YVRl
bXBSZWdpc3RlciwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBhZGQzMihSZWdpc3RlcklEIHNy
YywgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKGRlc3Qub2Zmc2V0ID49IC0zMjc2
OCAmJiBkZXN0Lm9mZnNldCA8PSAzMjc2NyAmJiAhbV9maXhlZFdpZHRoKSB7CisgICAgICAgICAg
ICAvKgorICAgICAgICAgICAgICBsdyAgICAgICAgZGF0YVRlbXAsIG9mZnNldChiYXNlKQorICAg
ICAgICAgICAgICBhZGR1ICAgICAgZGF0YVRlbXAsIGRhdGFUZW1wLCBzcmMKKyAgICAgICAgICAg
ICAgc3cgICAgICAgIGRhdGFUZW1wLCBvZmZzZXQoYmFzZSkKKyAgICAgICAgICAgICovCisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5sdyhkYXRhVGVtcFJlZ2lzdGVyLCBkZXN0LmJhc2UsIGRlc3Qu
b2Zmc2V0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoZGF0YVRlbXBSZWdpc3Rlciwg
ZGF0YVRlbXBSZWdpc3Rlciwgc3JjKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN3KGRhdGFU
ZW1wUmVnaXN0ZXIsIGRlc3QuYmFzZSwgZGVzdC5vZmZzZXQpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgbHVpICAgICAgIGFkZHJUZW1wLCAob2Zmc2V0
ICsgMHg4MDAwKSA+PiAxNgorICAgICAgICAgICAgICBhZGR1ICAgICAgYWRkclRlbXAsIGFkZHJU
ZW1wLCBiYXNlCisgICAgICAgICAgICAgIGx3ICAgICAgICBkYXRhVGVtcCwgKG9mZnNldCAmIDB4
ZmZmZikoYWRkclRlbXApCisgICAgICAgICAgICAgIGFkZHUgICAgICBkYXRhVGVtcCwgZGF0YVRl
bXAsIHNyYworICAgICAgICAgICAgICBzdyAgICAgICAgZGF0YVRlbXAsIChvZmZzZXQgJiAweGZm
ZmYpKGFkZHJUZW1wKQorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx1
aShhZGRyVGVtcFJlZ2lzdGVyLCAoZGVzdC5vZmZzZXQgKyAweDgwMDApID4+IDE2KTsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3Rl
ciwgZGVzdC5iYXNlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx3KGRhdGFUZW1wUmVnaXN0
ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGRlc3Qub2Zmc2V0KTsKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLmFkZHUoZGF0YVRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3Rlciwgc3JjKTsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLnN3KGRhdGFUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIs
IGRlc3Qub2Zmc2V0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgYWRkMzIoSW1tMzIg
aW1tLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIC8qCisgICAgICAg
ICAgIGxpICAgYWRkclRlbXAsIGFkZHJlc3MKKyAgICAgICAgICAgbGkgICBpbW1UZW1wLCBpbW0K
KyAgICAgICAgICAgbHcgICBkYXRhVGVtcCwgMChhZGRyVGVtcCkKKyAgICAgICAgICAgYWRkdSBk
YXRhVGVtcCwgZGF0YVRlbXAsIGltbVRlbXAKKyAgICAgICAgICAgc3cgICBkYXRhVGVtcCwgMChh
ZGRyVGVtcCkKKyAgICAgICAgKi8KKyAgICAgICAgbW92ZShJbW1QdHIoYWRkcmVzcy5tX3B0ciks
IGFkZHJUZW1wUmVnaXN0ZXIpOworICAgICAgICBtX2Fzc2VtYmxlci5sdyhkYXRhVGVtcFJlZ2lz
dGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCAwKTsKKyAgICAgICAgaWYgKCFpbW0ubV9pc1BvaW50ZXIg
JiYgaW1tLm1fdmFsdWUgPj0gLTMyNzY4ICYmIGltbS5tX3ZhbHVlIDw9IDMyNzY3CisgICAgICAg
ICAgICAmJiAhbV9maXhlZFdpZHRoKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkaXUoZGF0
YVRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3RlciwgaW1tLm1fdmFsdWUpOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIG1vdmUoaW1tLCBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuYWRkdShkYXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLCBp
bW1UZW1wUmVnaXN0ZXIpOworICAgICAgICB9CisgICAgICAgIG1fYXNzZW1ibGVyLnN3KGRhdGFU
ZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIDApOworICAgIH0KKworICAgIHZvaWQgYW5k
MzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmFuZEluc24oZGVzdCwgZGVzdCwgc3JjKTsKKyAgICB9CisKKyAgICB2b2lkIGFuZDMy
KEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKCFpbW0ubV9p
c1BvaW50ZXIgJiYgIWltbS5tX3ZhbHVlICYmICFtX2ZpeGVkV2lkdGgpCisgICAgICAgICAgICBt
b3ZlKE1JUFNSZWdpc3RlcnM6Onplcm8sIGRlc3QpOworICAgICAgICBlbHNlIGlmICghaW1tLm1f
aXNQb2ludGVyICYmIGltbS5tX3ZhbHVlID4gMCAmJiBpbW0ubV92YWx1ZSA8IDY1NTM1CisgICAg
ICAgICAgICAgICAgICYmICFtX2ZpeGVkV2lkdGgpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5h
bmRpKGRlc3QsIGRlc3QsIGltbS5tX3ZhbHVlKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAvKgorICAgICAgICAgICAgICBsaSAgICAgICAgaW1tVGVtcCwgaW1tCisgICAgICAgICAgICAg
IGFuZCAgICAgICBkZXN0LCBkZXN0LCBpbW1UZW1wCisgICAgICAgICAgICAqLworICAgICAgICAg
ICAgbW92ZShpbW0sIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5h
bmRJbnNuKGRlc3QsIGRlc3QsIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICB2b2lkIGxzaGlmdDMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIuc2xsKGRlc3QsIGRlc3QsIGltbS5tX3ZhbHVlKTsKKyAgICB9CisK
KyAgICB2b2lkIGxzaGlmdDMyKFJlZ2lzdGVySUQgc2hpZnRBbW91bnQsIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnNsbHYoZGVzdCwgZGVzdCwgc2hpZnRBbW91
bnQpOworICAgIH0KKworICAgIHZvaWQgbXVsMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm11bChkZXN0LCBkZXN0LCBzcmMpOwor
ICAgIH0KKworICAgIHZvaWQgbXVsMzIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKCFpbW0ubV9pc1BvaW50ZXIgJiYgIWltbS5t
X3ZhbHVlICYmICFtX2ZpeGVkV2lkdGgpCisgICAgICAgICAgICBtb3ZlKE1JUFNSZWdpc3RlcnM6
Onplcm8sIGRlc3QpOworICAgICAgICBlbHNlIGlmICghaW1tLm1faXNQb2ludGVyICYmIGltbS5t
X3ZhbHVlID09IDEgJiYgIW1fZml4ZWRXaWR0aCkKKyAgICAgICAgICAgIG1vdmUoc3JjLCBkZXN0
KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgIGxpICAg
ICAgZGF0YVRlbXAsIGltbQorICAgICAgICAgICAgICAgIG11bCAgICAgZGVzdCwgc3JjLCBkYXRh
VGVtcAorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1vdmUoaW1tLCBkYXRhVGVtcFJlZ2lz
dGVyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm11bChkZXN0LCBzcmMsIGRhdGFUZW1wUmVn
aXN0ZXIpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBub3QzMihSZWdpc3RlcklEIHNy
Y0Rlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5ub3Ioc3JjRGVzdCwgc3JjRGVzdCwg
TUlQU1JlZ2lzdGVyczo6emVybyk7CisgICAgfQorCisgICAgdm9pZCBvcjMyKFJlZ2lzdGVySUQg
c3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5vckluc24o
ZGVzdCwgZGVzdCwgc3JjKTsKKyAgICB9CisKKyAgICB2b2lkIG9yMzIoSW1tMzIgaW1tLCBSZWdp
c3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAoIWltbS5tX2lzUG9pbnRlciAmJiAhaW1t
Lm1fdmFsdWUgJiYgIW1fZml4ZWRXaWR0aCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICBpZiAoIWltbS5tX2lzUG9pbnRlciAmJiBpbW0ubV92YWx1ZSA+IDAgJiYgaW1tLm1fdmFsdWUg
PCA2NTUzNQorICAgICAgICAgICAgJiYgIW1fZml4ZWRXaWR0aCkgeworICAgICAgICAgICAgbV9h
c3NlbWJsZXIub3JpKGRlc3QsIGRlc3QsIGltbS5tX3ZhbHVlKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAgICBsaSAgICAgIGRhdGFUZW1w
LCBpbW0KKyAgICAgICAgICAgIG9yICAgICAgZGVzdCwgZGVzdCwgZGF0YVRlbXAKKyAgICAgICAg
Ki8KKyAgICAgICAgbW92ZShpbW0sIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICBtX2Fzc2Vt
Ymxlci5vckluc24oZGVzdCwgZGVzdCwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgfQorCisgICAg
dm9pZCByc2hpZnQzMihSZWdpc3RlcklEIHNoaWZ0QW1vdW50LCBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zcmF2KGRlc3QsIGRlc3QsIHNoaWZ0QW1vdW50KTsK
KyAgICB9CisKKyAgICB2b2lkIHJzaGlmdDMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3JhKGRlc3QsIGRlc3QsIGltbS5tX3ZhbHVlKTsK
KyAgICB9CisKKyAgICB2b2lkIHN1YjMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zdWJ1KGRlc3QsIGRlc3QsIHNyYyk7CisgICAg
fQorCisgICAgdm9pZCBzdWIzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisg
ICAgICAgIGlmICghaW1tLm1faXNQb2ludGVyICYmIGltbS5tX3ZhbHVlID49IC0zMjc2NyAmJiBp
bW0ubV92YWx1ZSA8PSAzMjc2OAorICAgICAgICAgICAgJiYgIW1fZml4ZWRXaWR0aCkgeworICAg
ICAgICAgICAgLyoKKyAgICAgICAgICAgICAgYWRkaXUgICAgIGRlc3QsIHNyYywgaW1tCisgICAg
ICAgICAgICAqLworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkaXUoZGVzdCwgZGVzdCwgLWlt
bS5tX3ZhbHVlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAg
ICAgIGxpICAgICAgICBpbW1UZW1wLCBpbW0KKyAgICAgICAgICAgICAgc3VidSAgICAgIGRlc3Qs
IHNyYywgaW1tVGVtcAorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1vdmUoaW1tLCBpbW1U
ZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3VidShkZXN0LCBkZXN0LCBp
bW1UZW1wUmVnaXN0ZXIpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBzdWIzMihJbW0z
MiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIGlmIChhZGRyZXNzLm9mZnNl
dCA+PSAtMzI3NjggJiYgYWRkcmVzcy5vZmZzZXQgPD0gMzI3NjcKKyAgICAgICAgICAgICYmICFt
X2ZpeGVkV2lkdGgpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgIGx3ICAgICAgICBk
YXRhVGVtcCwgb2Zmc2V0KGJhc2UpCisgICAgICAgICAgICAgIGxpICAgICAgICBpbW1UZW1wLCBp
bW0KKyAgICAgICAgICAgICAgc3VidSAgICAgIGRhdGFUZW1wLCBkYXRhVGVtcCwgaW1tVGVtcAor
ICAgICAgICAgICAgICBzdyAgICAgICAgZGF0YVRlbXAsIG9mZnNldChiYXNlKQorICAgICAgICAg
ICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx3KGRhdGFUZW1wUmVnaXN0ZXIsIGFkZHJl
c3MuYmFzZSwgYWRkcmVzcy5vZmZzZXQpOworICAgICAgICAgICAgaWYgKCFpbW0ubV9pc1BvaW50
ZXIKKyAgICAgICAgICAgICAgICAmJiBpbW0ubV92YWx1ZSA+PSAtMzI3NjcgJiYgaW1tLm1fdmFs
dWUgPD0gMzI3NjgKKyAgICAgICAgICAgICAgICAmJiAhbV9maXhlZFdpZHRoKQorICAgICAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLmFkZGl1KGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWltbS5tX3ZhbHVlKTsKKyAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG1vdmUoaW1tLCBpbW1UZW1wUmVnaXN0
ZXIpOworICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN1YnUoZGF0YVRlbXBSZWdpc3Rlciwg
ZGF0YVRlbXBSZWdpc3RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltbVRl
bXBSZWdpc3Rlcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdyhk
YXRhVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgIGx1aSAgICAgICBhZGRyVGVt
cCwgKG9mZnNldCArIDB4ODAwMCkgPj4gMTYKKyAgICAgICAgICAgICAgYWRkdSAgICAgIGFkZHJU
ZW1wLCBhZGRyVGVtcCwgYmFzZQorICAgICAgICAgICAgICBsdyAgICAgICAgZGF0YVRlbXAsIChv
ZmZzZXQgJiAweGZmZmYpKGFkZHJUZW1wKQorICAgICAgICAgICAgICBsaSAgICAgICAgaW1tdGVt
cCwgaW1tCisgICAgICAgICAgICAgIHN1YnUgICAgICBkYXRhVGVtcCwgZGF0YVRlbXAsIGltbVRl
bXAKKyAgICAgICAgICAgICAgc3cgICAgICAgIGRhdGFUZW1wLCAob2Zmc2V0ICYgMHhmZmZmKShh
ZGRyVGVtcCkKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sdWkoYWRk
clRlbXBSZWdpc3RlciwgKGFkZHJlc3Mub2Zmc2V0ICsgMHg4MDAwKSA+PiAxNik7CisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIs
IGFkZHJlc3MuYmFzZSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sdyhkYXRhVGVtcFJlZ2lz
dGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCk7CisKKyAgICAgICAgICAgIGlm
ICghaW1tLm1faXNQb2ludGVyCisgICAgICAgICAgICAgICAgJiYgaW1tLm1fdmFsdWUgPj0gLTMy
NzY3ICYmIGltbS5tX3ZhbHVlIDw9IDMyNzY4CisgICAgICAgICAgICAgICAgJiYgIW1fZml4ZWRX
aWR0aCkKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRpdShkYXRhVGVtcFJlZ2lzdGVy
LCBkYXRhVGVtcFJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1p
bW0ubV92YWx1ZSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBtb3ZlKGlt
bSwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdWJ1KGRh
dGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
bV9hc3NlbWJsZXIuc3coZGF0YVRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVz
cy5vZmZzZXQpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBzdWIzMihBZGRyZXNzIHNy
YywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbG9hZDMyKHNyYywgZGF0YVRlbXBS
ZWdpc3Rlcik7CisgICAgICAgIHN1YjMyKGRhdGFUZW1wUmVnaXN0ZXIsIGRlc3QpOworICAgIH0K
KworICAgIHZvaWQgc3ViMzIoSW1tMzIgaW1tLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcykKKyAg
ICB7CisgICAgICAgIC8qCisgICAgICAgICAgIGxpICAgYWRkclRlbXAsIGFkZHJlc3MKKyAgICAg
ICAgICAgbGkgICBpbW1UZW1wLCBpbW0KKyAgICAgICAgICAgbHcgICBkYXRhVGVtcCwgMChhZGRy
VGVtcCkKKyAgICAgICAgICAgc3VidSBkYXRhVGVtcCwgZGF0YVRlbXAsIGltbVRlbXAKKyAgICAg
ICAgICAgc3cgICBkYXRhVGVtcCwgMChhZGRyVGVtcCkKKyAgICAgICAgKi8KKyAgICAgICAgbW92
ZShJbW1QdHIoYWRkcmVzcy5tX3B0ciksIGFkZHJUZW1wUmVnaXN0ZXIpOworICAgICAgICBtX2Fz
c2VtYmxlci5sdyhkYXRhVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCAwKTsKKworICAg
ICAgICBpZiAoIWltbS5tX2lzUG9pbnRlciAmJiBpbW0ubV92YWx1ZSA+PSAtMzI3NjcgJiYgaW1t
Lm1fdmFsdWUgPD0gMzI3NjgKKyAgICAgICAgICAgICYmICFtX2ZpeGVkV2lkdGgpIHsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLmFkZGl1KGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtaW1tLm1fdmFsdWUpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgbW92ZShpbW0sIGltbVRlbXBSZWdpc3Rlcik7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5zdWJ1KGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0
ZXIsIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgIH0KKyAgICAgICAgbV9hc3NlbWJsZXIuc3co
ZGF0YVRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgMCk7CisgICAgfQorCisgICAgdm9p
ZCB4b3IzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIueG9ySW5zbihkZXN0LCBkZXN0LCBzcmMpOworICAgIH0KKworICAgIHZvaWQg
eG9yMzIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICAvKgorICAg
ICAgICAgICAgbGkgIGltbVRlbXAsIGltbQorICAgICAgICAgICAgeG9yIGRlc3QsIGRlc3QsIGlt
bVRlbXAKKyAgICAgICAgKi8KKyAgICAgICAgbW92ZShpbW0sIGltbVRlbXBSZWdpc3Rlcik7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLnhvckluc24oZGVzdCwgZGVzdCwgaW1tVGVtcFJlZ2lzdGVyKTsK
KyAgICB9CisKKyAgICAvLyBNZW1vcnkgYWNjZXNzIG9wZXJhdGlvbnM6CisgICAgLy8KKyAgICAv
LyBMb2FkcyBhcmUgb2YgdGhlIGZvcm0gbG9hZChhZGRyZXNzLCBkZXN0aW5hdGlvbikgYW5kIHN0
b3JlcyBvZiB0aGUgZm9ybQorICAgIC8vIHN0b3JlKHNvdXJjZSwgYWRkcmVzcykuICBUaGUgc291
cmNlIGZvciBhIHN0b3JlIG1heSBiZSBhbiBJbW0zMi4gIEFkZHJlc3MKKyAgICAvLyBvcGVyYW5k
IG9iamVjdHMgdG8gbG9hZHMgYW5kIHN0b3JlIHdpbGwgYmUgaW1wbGljaXRseSBjb25zdHJ1Y3Rl
ZCBpZiBhCisgICAgLy8gcmVnaXN0ZXIgaXMgcGFzc2VkLgorCisgICAgdm9pZCBsb2FkMzIoSW1w
bGljaXRBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlm
IChhZGRyZXNzLm9mZnNldCA+PSAtMzI3NjggJiYgYWRkcmVzcy5vZmZzZXQgPD0gMzI3NjcKKyAg
ICAgICAgICAgICYmICFtX2ZpeGVkV2lkdGgpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sdyhk
ZXN0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAvKgorICAgICAgICAgICAgICAgIGx1aSAgICAgYWRkclRlbXAsIChvZmZzZXQgKyAw
eDgwMDApID4+IDE2CisgICAgICAgICAgICAgICAgYWRkdSAgICBhZGRyVGVtcCwgYWRkclRlbXAs
IGJhc2UKKyAgICAgICAgICAgICAgICBsdyAgICAgIGRlc3QsIChvZmZzZXQgJiAweGZmZmYpKGFk
ZHJUZW1wKQorICAgICAgICAgICAgICAqLworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHVpKGFk
ZHJUZW1wUmVnaXN0ZXIsIChhZGRyZXNzLm9mZnNldCArIDB4ODAwMCkgPj4gMTYpOworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVy
LCBhZGRyZXNzLmJhc2UpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHcoZGVzdCwgYWRkclRl
bXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9p
ZCBsb2FkMzIoQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIGlmIChhZGRyZXNzLm9mZnNldCA+PSAtMzI3NjggJiYgYWRkcmVzcy5vZmZzZXQgPD0gMzI3
NjcKKyAgICAgICAgICAgICYmICFtX2ZpeGVkV2lkdGgpIHsKKyAgICAgICAgICAgIC8qCisgICAg
ICAgICAgICAgICAgc2xsICAgICBhZGRyVGVtcCwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2Fs
ZQorICAgICAgICAgICAgICAgIGFkZHUgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBhZGRyZXNzLmJh
c2UKKyAgICAgICAgICAgICAgICBsdyAgICAgIGRlc3QsIGFkZHJlc3Mub2Zmc2V0KGFkZHJUZW1w
KQorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsbChhZGRyVGVtcFJl
Z2lzdGVyLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5i
YXNlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx3KGRlc3QsIGFkZHJUZW1wUmVnaXN0ZXIs
IGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qCisgICAg
ICAgICAgICAgICAgc2xsICAgICBhZGRyVGVtcCwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2Fs
ZQorICAgICAgICAgICAgICAgIGFkZHUgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBhZGRyZXNzLmJh
c2UKKyAgICAgICAgICAgICAgICBsdWkgICAgIGltbVRlbXAsIChhZGRyZXNzLm9mZnNldCArIDB4
ODAwMCkgPj4gMTYKKyAgICAgICAgICAgICAgICBhZGR1ICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwg
aW1tVGVtcAorICAgICAgICAgICAgICAgIGx3ICAgICAgZGVzdCwgKGFkZHJlc3Mub2Zmc2V0ICYg
MHhmZmZmKShhdCkKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbGwo
YWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIs
IGFkZHJlc3MuYmFzZSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sdWkoaW1tVGVtcFJlZ2lz
dGVyLCAoYWRkcmVzcy5vZmZzZXQgKyAweDgwMDApID4+IDE2KTsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmx3KGRlc3QsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHZvaWQgbG9hZDMyV2l0aFVuYWxpZ25lZEhhbGZXb3JkcyhCYXNl
SW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKGFkZHJl
c3Mub2Zmc2V0ID49IC0zMjc2OCAmJiBhZGRyZXNzLm9mZnNldCA8PSAzMjc2NAorICAgICAgICAg
ICAgJiYgIW1fZml4ZWRXaWR0aCkgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICBz
bGwgICAgIGFkZHJUZW1wLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlCisgICAgICAgICAg
ICAgICAgYWRkdSAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGFkZHJlc3MuYmFzZQorICAgICAgICAg
ICAgICAgIChCaWctRW5kaWFuKQorICAgICAgICAgICAgICAgIGx3bCAgICAgZGVzdCwgYWRkcmVz
cy5vZmZzZXQoYWRkclRlbXApCisgICAgICAgICAgICAgICAgbHdyICAgICBkZXN0LCBhZGRyZXNz
Lm9mZnNldCszKGFkZHJUZW1wKQorICAgICAgICAgICAgICAgIChMaXR0bGUtRW5kaWFuKQorICAg
ICAgICAgICAgICAgIGx3bCAgICAgZGVzdCwgYWRkcmVzcy5vZmZzZXQrMyhhZGRyVGVtcCkKKyAg
ICAgICAgICAgICAgICBsd3IgICAgIGRlc3QsIGFkZHJlc3Mub2Zmc2V0KGFkZHJUZW1wKQorICAg
ICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsbChhZGRyVGVtcFJlZ2lzdGVy
LCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlKTsK
KyNpZiBDUFUoQklHX0VORElBTikKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx3bChkZXN0LCBh
ZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5sd3IoZGVzdCwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQgKyAzKTsKKyNlbHNl
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sd2woZGVzdCwgYWRkclRlbXBSZWdpc3RlciwgYWRk
cmVzcy5vZmZzZXQgKyAzKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx3cihkZXN0LCBhZGRy
VGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCk7CisKKyNlbmRpZgorICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICBzbGwgICAgIGFkZHJUZW1wLCBhZGRy
ZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlCisgICAgICAgICAgICAgICAgYWRkdSAgICBhZGRyVGVt
cCwgYWRkclRlbXAsIGFkZHJlc3MuYmFzZQorICAgICAgICAgICAgICAgIGx1aSAgICAgaW1tVGVt
cCwgYWRkcmVzcy5vZmZzZXQgPj4gMTYKKyAgICAgICAgICAgICAgICBvcmkgICAgIGltbVRlbXAs
IGltbVRlbXAsIGFkZHJlc3Mub2Zmc2V0ICYgMHhmZmZmCisgICAgICAgICAgICAgICAgYWRkdSAg
ICBhZGRyVGVtcCwgYWRkclRlbXAsIGltbVRlbXAKKyAgICAgICAgICAgICAgICAoQmlnLUVuZGlh
bikKKyAgICAgICAgICAgICAgICBsdyAgICAgIGRlc3QsIDAoYXQpCisgICAgICAgICAgICAgICAg
bHcgICAgICBkZXN0LCAzKGF0KQorICAgICAgICAgICAgICAgIChMaXR0bGUtRW5kaWFuKQorICAg
ICAgICAgICAgICAgIGx3ICAgICAgZGVzdCwgMyhhdCkKKyAgICAgICAgICAgICAgICBsdyAgICAg
IGRlc3QsIDAoYXQpCisgICAgICAgICAgICAqLworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2xs
KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVy
LCBhZGRyZXNzLmJhc2UpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHVpKGltbVRlbXBSZWdp
c3RlciwgYWRkcmVzcy5vZmZzZXQgPj4gMTYpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIub3Jp
KGltbVRlbXBSZWdpc3RlciwgaW1tVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCk7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltbVRlbXBSZWdpc3Rlcik7CisjaWYg
Q1BVKEJJR19FTkRJQU4pCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sd2woZGVzdCwgYWRkclRl
bXBSZWdpc3RlciwgMCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sd3IoZGVzdCwgYWRkclRl
bXBSZWdpc3RlciwgMyk7CisjZWxzZQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubHdsKGRlc3Qs
IGFkZHJUZW1wUmVnaXN0ZXIsIDMpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHdyKGRlc3Qs
IGFkZHJUZW1wUmVnaXN0ZXIsIDApOworI2VuZGlmCisgICAgICAgIH0KKyAgICB9CisKKyAgICB2
b2lkIGxvYWQzMih2b2lkKiBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAg
ICAvKgorICAgICAgICAgICAgbGkgIGFkZHJUZW1wLCBhZGRyZXNzCisgICAgICAgICAgICBsdyAg
ZGVzdCwgMChhZGRyVGVtcCkKKyAgICAgICAgKi8KKyAgICAgICAgbW92ZShJbW1QdHIoYWRkcmVz
cyksIGFkZHJUZW1wUmVnaXN0ZXIpOworICAgICAgICBtX2Fzc2VtYmxlci5sdyhkZXN0LCBhZGRy
VGVtcFJlZ2lzdGVyLCAwKTsKKyAgICB9CisKKyAgICBEYXRhTGFiZWwzMiBsb2FkMzJXaXRoQWRk
cmVzc09mZnNldFBhdGNoKEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsK
KyAgICAgICAgbV9maXhlZFdpZHRoID0gdHJ1ZTsKKyAgICAgICAgLyoKKyAgICAgICAgICAgIGx1
aSBhZGRyVGVtcCwgYWRkcmVzcy5vZmZzZXQgPj4gMTYKKyAgICAgICAgICAgIG9yaSBhZGRyVGVt
cCwgYWRkclRlbXAsIGFkZHJlc3Mub2Zmc2V0ICYgMHhmZmZmCisgICAgICAgICAgICBhZGR1ICAg
ICAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGFkZHJlc3MuYmFzZQorICAgICAgICAgICAgbHcgIGRl
c3QsIDAoYWRkclRlbXApCisgICAgICAgICovCisgICAgICAgIERhdGFMYWJlbDMyIGRhdGFMYWJl
bCh0aGlzKTsKKyAgICAgICAgbW92ZShJbW0zMihhZGRyZXNzLm9mZnNldCksIGFkZHJUZW1wUmVn
aXN0ZXIpOworICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJU
ZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmx3KGRlc3Qs
IGFkZHJUZW1wUmVnaXN0ZXIsIDApOworICAgICAgICBtX2ZpeGVkV2lkdGggPSBmYWxzZTsKKyAg
ICAgICAgcmV0dXJuIGRhdGFMYWJlbDsKKyAgICB9CisKKyAgICBMYWJlbCBsb2FkUHRyV2l0aFBh
dGNoVG9MRUEoQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAg
ICBtX2ZpeGVkV2lkdGggPSB0cnVlOworICAgICAgICAvKgorICAgICAgICAgICAgbHVpICAgICAg
ICAgYWRkclRlbXAsIGFkZHJlc3Mub2Zmc2V0ID4+IDE2CisgICAgICAgICAgICBvcmkgICAgICAg
ICBhZGRyVGVtcCwgYWRkclRlbXAsIGFkZHJlc3Mub2Zmc2V0ICYgMHhmZmZmCisgICAgICAgICAg
ICBhZGR1ICAgICAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGFkZHJlc3MuYmFzZQorICAgICAgICAg
ICAgbHcgICAgICAgICAgZGVzdCwgMChhZGRyVGVtcCkKKyAgICAgICAgKi8KKyAgICAgICAgTGFi
ZWwgbGFiZWwodGhpcyk7CisgICAgICAgIG1vdmUoSW1tMzIoYWRkcmVzcy5vZmZzZXQpLCBhZGRy
VGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVy
LCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UpOworICAgICAgICBtX2Fzc2VtYmxlci5s
dyhkZXN0LCBhZGRyVGVtcFJlZ2lzdGVyLCAwKTsKKyAgICAgICAgbV9maXhlZFdpZHRoID0gZmFs
c2U7CisgICAgICAgIHJldHVybiBsYWJlbDsKKyAgICB9CisKKyAgICBMYWJlbCBsb2FkUHRyV2l0
aEFkZHJlc3NPZmZzZXRQYXRjaChBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBsb2FkUHRyV2l0aFBhdGNoVG9MRUEoYWRkcmVzcywgZGVzdCk7
CisgICAgfQorCisgICAgLyogTmVlZCB0byB1c2UgemVyby1leHRlbmVkIGxvYWQgaGFsZi13b3Jk
IGZvciBsb2FkMTYuICAqLworICAgIHZvaWQgbG9hZDE2KEJhc2VJbmRleCBhZGRyZXNzLCBSZWdp
c3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAoYWRkcmVzcy5vZmZzZXQgPj0gLTMyNzY4
ICYmIGFkZHJlc3Mub2Zmc2V0IDw9IDMyNzY3CisgICAgICAgICAgICAmJiAhbV9maXhlZFdpZHRo
KSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgIHNsbCAgICAgYWRkclRlbXAsIGFk
ZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUKKyAgICAgICAgICAgICAgICBhZGR1ICAgIGFkZHJU
ZW1wLCBhZGRyVGVtcCwgYWRkcmVzcy5iYXNlCisgICAgICAgICAgICAgICAgbGh1ICAgICBkZXN0
LCBhZGRyZXNzLm9mZnNldChhZGRyVGVtcCkKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5zbGwoYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5z
Y2FsZSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFk
ZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5s
aHUoZGVzdCwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICBzbGwgICAgIGFkZHJUZW1wLCBh
ZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlCisgICAgICAgICAgICAgICAgYWRkdSAgICBhZGRy
VGVtcCwgYWRkclRlbXAsIGFkZHJlc3MuYmFzZQorICAgICAgICAgICAgICAgIGx1aSAgICAgaW1t
VGVtcCwgKGFkZHJlc3Mub2Zmc2V0ICsgMHg4MDAwKSA+PiAxNgorICAgICAgICAgICAgICAgIGFk
ZHUgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBpbW1UZW1wCisgICAgICAgICAgICAgICAgbGh1ICAg
ICBkZXN0LCAoYWRkcmVzcy5vZmZzZXQgJiAweGZmZmYpKGFkZHJUZW1wKQorICAgICAgICAgICAg
Ki8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsbChhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNz
LmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRk
clRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlKTsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLmx1aShpbW1UZW1wUmVnaXN0ZXIsIChhZGRyZXNzLm9mZnNldCArIDB4
ODAwMCkgPj4gMTYpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lz
dGVyLCBhZGRyVGVtcFJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbW1U
ZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubGh1KGRlc3QsIGFkZHJUZW1w
UmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIERhdGFM
YWJlbDMyIHN0b3JlMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKFJlZ2lzdGVySUQgc3JjLCBBZGRy
ZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2ZpeGVkV2lkdGggPSB0cnVlOworICAgICAg
ICAvKgorICAgICAgICAgICAgbHVpIGFkZHJUZW1wLCBhZGRyZXNzLm9mZnNldCA+PiAxNgorICAg
ICAgICAgICAgb3JpIGFkZHJUZW1wLCBhZGRyVGVtcCwgYWRkcmVzcy5vZmZzZXQgJiAweGZmZmYK
KyAgICAgICAgICAgIGFkZHUgICAgICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgYWRkcmVzcy5iYXNl
CisgICAgICAgICAgICBzdyAgc3JjLCAwKGFkZHJUZW1wKQorICAgICAgICAqLworICAgICAgICBE
YXRhTGFiZWwzMiBkYXRhTGFiZWwodGhpcyk7CisgICAgICAgIG1vdmUoSW1tMzIoYWRkcmVzcy5v
ZmZzZXQpLCBhZGRyVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRy
VGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UpOworICAgICAgICBt
X2Fzc2VtYmxlci5zdyhzcmMsIGFkZHJUZW1wUmVnaXN0ZXIsIDApOworICAgICAgICBtX2ZpeGVk
V2lkdGggPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGRhdGFMYWJlbDsKKyAgICB9CisKKyAgICB2
b2lkIHN0b3JlMzIoUmVnaXN0ZXJJRCBzcmMsIEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzKQorICAg
IHsKKyAgICAgICAgaWYgKGFkZHJlc3Mub2Zmc2V0ID49IC0zMjc2OCAmJiBhZGRyZXNzLm9mZnNl
dCA8PSAzMjc2NworICAgICAgICAgICAgJiYgIW1fZml4ZWRXaWR0aCkKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLnN3KHNyYywgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICBsdWkgICAgIGFkZHJUZW1w
LCAob2Zmc2V0ICsgMHg4MDAwKSA+PiAxNgorICAgICAgICAgICAgICAgIGFkZHUgICAgYWRkclRl
bXAsIGFkZHJUZW1wLCBiYXNlCisgICAgICAgICAgICAgICAgc3cgICAgICBzcmMsIChvZmZzZXQg
JiAweGZmZmYpKGFkZHJUZW1wKQorICAgICAgICAgICAgICAqLworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIubHVpKGFkZHJUZW1wUmVnaXN0ZXIsIChhZGRyZXNzLm9mZnNldCArIDB4ODAwMCkgPj4g
MTYpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRy
VGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3co
c3JjLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICB2b2lkIHN0b3JlMzIoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBhZGRyZXNzKQor
ICAgIHsKKyAgICAgICAgaWYgKGFkZHJlc3Mub2Zmc2V0ID49IC0zMjc2OCAmJiBhZGRyZXNzLm9m
ZnNldCA8PSAzMjc2NworICAgICAgICAgICAgJiYgIW1fZml4ZWRXaWR0aCkgeworICAgICAgICAg
ICAgLyoKKyAgICAgICAgICAgICAgICBzbGwgICAgIGFkZHJUZW1wLCBhZGRyZXNzLmluZGV4LCBh
ZGRyZXNzLnNjYWxlCisgICAgICAgICAgICAgICAgYWRkdSAgICBhZGRyVGVtcCwgYWRkclRlbXAs
IGFkZHJlc3MuYmFzZQorICAgICAgICAgICAgICAgIHN3ICAgICAgc3JjLCBhZGRyZXNzLm9mZnNl
dChhZGRyVGVtcCkKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbGwo
YWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIs
IGFkZHJlc3MuYmFzZSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdyhzcmMsIGFkZHJUZW1w
UmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IC8qCisgICAgICAgICAgICAgICAgc2xsICAgICBhZGRyVGVtcCwgYWRkcmVzcy5pbmRleCwgYWRk
cmVzcy5zY2FsZQorICAgICAgICAgICAgICAgIGFkZHUgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBh
ZGRyZXNzLmJhc2UKKyAgICAgICAgICAgICAgICBsdWkgICAgIGltbVRlbXAsIChhZGRyZXNzLm9m
ZnNldCArIDB4ODAwMCkgPj4gMTYKKyAgICAgICAgICAgICAgICBhZGR1ICAgIGFkZHJUZW1wLCBh
ZGRyVGVtcCwgaW1tVGVtcAorICAgICAgICAgICAgICAgIHN3ICAgICAgc3JjLCAoYWRkcmVzcy5v
ZmZzZXQgJiAweGZmZmYpKGF0KQorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLnNsbChhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBS
ZWdpc3RlciwgYWRkcmVzcy5iYXNlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx1aShpbW1U
ZW1wUmVnaXN0ZXIsIChhZGRyZXNzLm9mZnNldCArIDB4ODAwMCkgPj4gMTYpOworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuc3coc3JjLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHN0b3JlMzIoSW1tMzIgaW1tLCBJbXBsaWNp
dEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIGlmIChhZGRyZXNzLm9mZnNldCA+PSAt
MzI3NjggJiYgYWRkcmVzcy5vZmZzZXQgPD0gMzI3NjcKKyAgICAgICAgICAgICYmICFtX2ZpeGVk
V2lkdGgpIHsKKyAgICAgICAgICAgIGlmICghaW1tLm1faXNQb2ludGVyICYmICFpbW0ubV92YWx1
ZSkKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdyhNSVBTUmVnaXN0ZXJzOjp6ZXJvLCBh
ZGRyZXNzLmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcy5vZmZz
ZXQpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbW92ZShpbW0sIGltbVRl
bXBSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3coaW1tVGVtcFJlZ2lz
dGVyLCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgbHVpICAgICBhZGRy
VGVtcCwgKG9mZnNldCArIDB4ODAwMCkgPj4gMTYKKyAgICAgICAgICAgICAgICBhZGR1ICAgIGFk
ZHJUZW1wLCBhZGRyVGVtcCwgYmFzZQorICAgICAgICAgICAgICAgIHN3ICAgICAgaW1tVGVtcCwg
KG9mZnNldCAmIDB4ZmZmZikoYWRkclRlbXApCisgICAgICAgICAgICAgICovCisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5sdWkoYWRkclRlbXBSZWdpc3RlciwgKGFkZHJlc3Mub2Zmc2V0ICsgMHg4
MDAwKSA+PiAxNik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0
ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSk7CisgICAgICAgICAgICBpZiAoIWlt
bS5tX2lzUG9pbnRlciAmJiAhaW1tLm1fdmFsdWUgJiYgIW1fZml4ZWRXaWR0aCkKKyAgICAgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5zdyhNSVBTUmVnaXN0ZXJzOjp6ZXJvLCBhZGRyVGVtcFJlZ2lz
dGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3Mub2Zmc2V0KTsKKyAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG1vdmUoaW1tLCBpbW1UZW1wUmVnaXN0
ZXIpOworICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN3KGltbVRlbXBSZWdpc3RlciwgYWRk
clRlbXBSZWdpc3RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzLm9m
ZnNldCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHN0b3Jl
MzIoUmVnaXN0ZXJJRCBzcmMsIHZvaWQqIGFkZHJlc3MpCisgICAgeworICAgICAgICAvKgorICAg
ICAgICAgICAgbGkgIGFkZHJUZW1wLCBhZGRyZXNzCisgICAgICAgICAgICBzdyAgc3JjLCAwKGFk
ZHJUZW1wKQorICAgICAgICAqLworICAgICAgICBtb3ZlKEltbVB0cihhZGRyZXNzKSwgYWRkclRl
bXBSZWdpc3Rlcik7CisgICAgICAgIG1fYXNzZW1ibGVyLnN3KHNyYywgYWRkclRlbXBSZWdpc3Rl
ciwgMCk7CisgICAgfQorCisgICAgdm9pZCBzdG9yZTMyKEltbTMyIGltbSwgdm9pZCogYWRkcmVz
cykKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAgICBsaSAgaW1tVGVtcCwgaW1tCisgICAg
ICAgICAgICBsaSAgYWRkclRlbXAsIGFkZHJlc3MKKyAgICAgICAgICAgIHN3ICBzcmMsIDAoYWRk
clRlbXApCisgICAgICAgICovCisgICAgICAgIGlmICghaW1tLm1faXNQb2ludGVyICYmICFpbW0u
bV92YWx1ZSAmJiAhbV9maXhlZFdpZHRoKSB7CisgICAgICAgICAgICBtb3ZlKEltbVB0cihhZGRy
ZXNzKSwgYWRkclRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdyhNSVBT
UmVnaXN0ZXJzOjp6ZXJvLCBhZGRyVGVtcFJlZ2lzdGVyLCAwKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIG1vdmUoaW1tLCBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgbW92
ZShJbW1QdHIoYWRkcmVzcyksIGFkZHJUZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIuc3coaW1tVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCAwKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIC8vIEZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnM6CisKKyAgICBib29s
IHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpIGNvbnN0CisgICAgeworI2lmIFdURl9NSVBTX0RPVUJM
RV9GTE9BVAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyNlbmRpZgorICAgIH0KKworICAgIGJvb2wgc3VwcG9ydHNGbG9hdGluZ1BvaW50VHJ1bmNh
dGUoKSBjb25zdAorICAgIHsKKyNpZiBXVEZfTUlQU19ET1VCTEVfRkxPQVQgJiYgV1RGX01JUFNf
SVNBX0FUX0xFQVNUKDIpCisgICAgICAgIHJldHVybiB0cnVlOworI2Vsc2UKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworI2VuZGlmCisgICAgfQorCisgICAgLy8gU3RhY2sgbWFuaXB1bGF0aW9uIG9w
ZXJhdGlvbnM6CisgICAgLy8KKyAgICAvLyBUaGUgQUJJIGlzIGFzc3VtZWQgdG8gcHJvdmlkZSBh
IHN0YWNrIGFic3RyYWN0aW9uIHRvIG1lbW9yeSwKKyAgICAvLyBjb250YWluaW5nIG1hY2hpbmUg
d29yZCBzaXplZCB1bml0cyBvZiBkYXRhLiAgUHVzaCBhbmQgcG9wCisgICAgLy8gb3BlcmF0aW9u
cyBhZGQgYW5kIHJlbW92ZSBhIHNpbmdsZSByZWdpc3RlciBzaXplZCB1bml0IG9mIGRhdGEKKyAg
ICAvLyB0byBvciBmcm9tIHRoZSBzdGFjay4gIFBlZWsgYW5kIHBva2Ugb3BlcmF0aW9ucyByZWFk
IG9yIHdyaXRlCisgICAgLy8gdmFsdWVzIG9uIHRoZSBzdGFjaywgd2l0aG91dCBtb3ZpbmcgdGhl
IGN1cnJlbnQgc3RhY2sgcG9zaXRpb24uCisKKyAgICB2b2lkIHBvcChSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sdyhkZXN0LCBNSVBTUmVnaXN0ZXJzOjpzcCwg
MCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGl1KE1JUFNSZWdpc3RlcnM6OnNwLCBNSVBTUmVn
aXN0ZXJzOjpzcCwgNCk7CisgICAgfQorCisgICAgdm9pZCBwdXNoKFJlZ2lzdGVySUQgc3JjKQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkaXUoTUlQU1JlZ2lzdGVyczo6c3AsIE1JUFNS
ZWdpc3RlcnM6OnNwLCAtNCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnN3KHNyYywgTUlQU1JlZ2lz
dGVyczo6c3AsIDApOworICAgIH0KKworICAgIHZvaWQgcHVzaChBZGRyZXNzIGFkZHJlc3MpCisg
ICAgeworICAgICAgICBsb2FkMzIoYWRkcmVzcywgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAg
IHB1c2goZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgfQorCisgICAgdm9pZCBwdXNoKEltbTMyIGlt
bSkKKyAgICB7CisgICAgICAgIG1vdmUoaW1tLCBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICBw
dXNoKGltbVRlbXBSZWdpc3Rlcik7CisgICAgfQorCisgICAgLy8gUmVnaXN0ZXIgbW92ZSBvcGVy
YXRpb25zOgorICAgIC8vCisgICAgLy8gTW92ZSB2YWx1ZXMgaW4gcmVnaXN0ZXJzLgorCisgICAg
dm9pZCBtb3ZlKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYg
KCFpbW0ubV9pc1BvaW50ZXIgJiYgIWltbS5tX3ZhbHVlICYmICFtX2ZpeGVkV2lkdGgpCisgICAg
ICAgICAgICBtb3ZlKE1JUFNSZWdpc3RlcnM6Onplcm8sIGRlc3QpOworICAgICAgICBlbHNlIGlm
IChpbW0ubV9pc1BvaW50ZXIgfHwgbV9maXhlZFdpZHRoKSB7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5sdWkoZGVzdCwgaW1tLm1fdmFsdWUgPj4gMTYpOworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIub3JpKGRlc3QsIGRlc3QsIGltbS5tX3ZhbHVlKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5saShkZXN0LCBpbW0ubV92YWx1ZSk7CisgICAgfQorCisgICAgdm9p
ZCBtb3ZlKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBp
ZiAoc3JjICE9IGRlc3QgfHwgbV9maXhlZFdpZHRoKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIu
bW92ZShkZXN0LCBzcmMpOworICAgIH0KKworICAgIHZvaWQgbW92ZShJbW1QdHIgaW1tLCBSZWdp
c3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtb3ZlKEltbTMyKGltbSksIGRlc3QpOworICAg
IH0KKworICAgIHZvaWQgc3dhcChSZWdpc3RlcklEIHJlZzEsIFJlZ2lzdGVySUQgcmVnMikKKyAg
ICB7CisgICAgICAgIG1vdmUocmVnMSwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgbW92ZShy
ZWcyLCByZWcxKTsKKyAgICAgICAgbW92ZShpbW1UZW1wUmVnaXN0ZXIsIHJlZzIpOworICAgIH0K
KworICAgIHZvaWQgc2lnbkV4dGVuZDMyVG9QdHIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIGlmIChzcmMgIT0gZGVzdCB8fCBtX2ZpeGVkV2lkdGgpCisg
ICAgICAgICAgICBtb3ZlKHNyYywgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCB6ZXJvRXh0ZW5k
MzJUb1B0cihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
aWYgKHNyYyAhPSBkZXN0IHx8IG1fZml4ZWRXaWR0aCkKKyAgICAgICAgICAgIG1vdmUoc3JjLCBk
ZXN0KTsKKyAgICB9CisKKyAgICAvLyBGb3J3YXJkcyAvIGV4dGVybmFsIGNvbnRyb2wgZmxvdyBv
cGVyYXRpb25zOgorICAgIC8vCisgICAgLy8gVGhpcyBzZXQgb2YganVtcCBhbmQgY29uZGl0aW9u
YWwgYnJhbmNoIG9wZXJhdGlvbnMgcmV0dXJuIGEgSnVtcAorICAgIC8vIG9iamVjdCB3aGljaCBt
YXkgbGlua2VkIGF0IGEgbGF0ZXIgcG9pbnQsIGFsbG93IGZvcndhcmRzIGp1bXAsCisgICAgLy8g
b3IganVtcHMgdGhhdCB3aWxsIHJlcXVpcmUgZXh0ZXJuYWwgbGlua2FnZSAoYWZ0ZXIgdGhlIGNv
ZGUgaGFzIGJlZW4KKyAgICAvLyByZWxvY2F0ZWQpLgorICAgIC8vCisgICAgLy8gRm9yIGJyYW5j
aGVzLCBzaWduZWQgPCwgPiwgPD0gYW5kID49IGFyZSBkZW5vdGVkIGFzIGwsIGcsIGxlLCBhbmQg
Z2UKKyAgICAvLyByZXNwZWNpdHZlbHksIGZvciB1bnNpZ25lZCBjb21wYXJpc29ucyB0aGUgbmFt
ZXMgYiwgYSwgYmUsIGFuZCBhZSBhcmUKKyAgICAvLyB1c2VkIChyZXByZXNlbnRpbmcgdGhlIG5h
bWVzICdiZWxvdycgYW5kICdhYm92ZScpLgorICAgIC8vCisgICAgLy8gT3BlcmFuZHMgdG8gdGhl
IGNvbXBhcmlzaW9uIGFyZSBwcm92aWRlZCBpbiB0aGUgZXhwZWN0ZWQgb3JkZXIsIGUuZy4KKyAg
ICAvLyBqbGUzMihyZWcxLCBJbW0zMig1KSkgd2lsbCBicmFuY2ggaWYgdGhlIHZhbHVlIGhlbGQg
aW4gcmVnMSwgd2hlbgorICAgIC8vIHRyZWF0ZWQgYXMgYSBzaWduZWQgMzJiaXQgdmFsdWUsIGlz
IGxlc3MgdGhhbiBvciBlcXVhbCB0byA1LgorICAgIC8vCisgICAgLy8ganogYW5kIGpueiB0ZXN0
IHdoZXRoZXIgdGhlIGZpcnN0IG9wZXJhbmQgaXMgZXF1YWwgdG8gemVybywgYW5kIHRha2UKKyAg
ICAvLyBhbiBvcHRpb25hbCBzZWNvbmQgb3BlcmFuZCBvZiBhIG1hc2sgdW5kZXIgd2hpY2ggdG8g
cGVyZm9ybSB0aGUgdGVzdC4KKworICAgIEp1bXAgYnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIFJl
Z2lzdGVySUQgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCkKKyAgICB7CisgICAgICAgIGlmIChjb25k
ID09IEVxdWFsIHx8IGNvbmQgPT0gWmVybykKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hFcXVh
bChsZWZ0LCByaWdodCk7CisgICAgICAgIGlmIChjb25kID09IE5vdEVxdWFsIHx8IGNvbmQgPT0g
Tm9uWmVybykKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hOb3RFcXVhbChsZWZ0LCByaWdodCk7
CisgICAgICAgIGlmIChjb25kID09IEFib3ZlKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5z
bHR1KGNtcFRlbXBSZWdpc3RlciwgcmlnaHQsIGxlZnQpOworICAgICAgICAgICAgcmV0dXJuIGJy
YW5jaE5vdEVxdWFsKGNtcFRlbXBSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6emVybyk7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gQWJvdmVPckVxdWFsKSB7CisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5zbHR1KGNtcFRlbXBSZWdpc3RlciwgbGVmdCwgcmlnaHQpOworICAgICAgICAg
ICAgcmV0dXJuIGJyYW5jaEVxdWFsKGNtcFRlbXBSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6emVy
byk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gQmVsb3cpIHsKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLnNsdHUoY21wVGVtcFJlZ2lzdGVyLCBsZWZ0LCByaWdodCk7CisgICAgICAg
ICAgICByZXR1cm4gYnJhbmNoTm90RXF1YWwoY21wVGVtcFJlZ2lzdGVyLCBNSVBTUmVnaXN0ZXJz
Ojp6ZXJvKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29uZCA9PSBCZWxvd09yRXF1YWwpIHsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdHUoY21wVGVtcFJlZ2lzdGVyLCByaWdodCwgbGVm
dCk7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRXF1YWwoY21wVGVtcFJlZ2lzdGVyLCBNSVBT
UmVnaXN0ZXJzOjp6ZXJvKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29uZCA9PSBHcmVhdGVy
VGhhbikgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0KGNtcFRlbXBSZWdpc3Rlciwgcmln
aHQsIGxlZnQpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaE5vdEVxdWFsKGNtcFRlbXBSZWdp
c3RlciwgTUlQU1JlZ2lzdGVyczo6emVybyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbmQg
PT0gR3JlYXRlclRoYW5PckVxdWFsKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHQoY21w
VGVtcFJlZ2lzdGVyLCBsZWZ0LCByaWdodCk7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRXF1
YWwoY21wVGVtcFJlZ2lzdGVyLCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoY29uZCA9PSBMZXNzVGhhbikgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0
KGNtcFRlbXBSZWdpc3RlciwgbGVmdCwgcmlnaHQpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5j
aE5vdEVxdWFsKGNtcFRlbXBSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6emVybyk7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKGNvbmQgPT0gTGVzc1RoYW5PckVxdWFsKSB7CisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5zbHQoY21wVGVtcFJlZ2lzdGVyLCByaWdodCwgbGVmdCk7CisgICAgICAgICAg
ICByZXR1cm4gYnJhbmNoRXF1YWwoY21wVGVtcFJlZ2lzdGVyLCBNSVBTUmVnaXN0ZXJzOjp6ZXJv
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29uZCA9PSBPdmVyZmxvdykgeworICAgICAgICAg
ICAgLyoKKyAgICAgICAgICAgICAgICB4b3IgICAgIGNtcFRlbXAsIGxlZnQsIHJpZ2h0CisgICAg
ICAgICAgICAgICAgYmdleiAgICBOb19vdmVyZmxvdywgY21wVGVtcCAgICAjIHNhbWUgc2lnbiBi
aXQgLT4gbm8gb3ZlcmZsb3cKKyAgICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAgICAgICBz
dWJ1ICAgIGNtcFRlbXAsIGxlZnQsIHJpZ2h0CisgICAgICAgICAgICAgICAgeG9yICAgICBjbXBU
ZW1wLCBjbXBUZW1wLCBsZWZ0CisgICAgICAgICAgICAgICAgYmdleiAgICBOb19vdmVyZmxvdywg
Y21wVGVtcCAgICAjIHNhbWUgc2lnbiBiaXQgLT4gbm8gb3ZlcmZsb3cKKyAgICAgICAgICAgICAg
ICBub3AKKyAgICAgICAgICAgICAgICBiICAgICAgIE92ZXJmbG93CisgICAgICAgICAgICAgICAg
bm9wCisgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAg
ICAgICAgbm9wCisgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgIE5vX292ZXJmbG93
OgorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnhvckluc24oY21wVGVt
cFJlZ2lzdGVyLCBsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5iZ2V6KGNt
cFRlbXBSZWdpc3RlciwgMTEpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5zdWJ1KGNtcFRlbXBSZWdpc3RlciwgbGVmdCwgcmlnaHQpOwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIueG9ySW5zbihjbXBUZW1wUmVnaXN0ZXIsIGNtcFRlbXBS
ZWdpc3RlciwgbGVmdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5iZ2V6KGNtcFRlbXBSZWdp
c3RlciwgNyk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgICAgIHJl
dHVybiBqdW1wKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gU2lnbmVkKSB7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5zdWJ1KGNtcFRlbXBSZWdpc3RlciwgbGVmdCwgcmlnaHQp
OworICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHJlc3VsdCBpcyBuZWdhdGl2ZS4KKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLnNsdChjbXBUZW1wUmVnaXN0ZXIsIGNtcFRlbXBSZWdpc3RlciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsKKyAgICAg
ICAgICAgIHJldHVybiBicmFuY2hOb3RFcXVhbChjbXBUZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3Rl
cnM6Onplcm8pOworICAgICAgICB9CisgICAgICAgIEFTU0VSVCgwKTsKKworICAgICAgICByZXR1
cm4gSnVtcCgpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIFJl
Z2lzdGVySUQgbGVmdCwgSW1tMzIgcmlnaHQpCisgICAgeworICAgICAgICBtb3ZlKHJpZ2h0LCBp
bW1UZW1wUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgbGVmdCwgaW1t
VGVtcFJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25k
LCBSZWdpc3RlcklEIGxlZnQsIEFkZHJlc3MgcmlnaHQpCisgICAgeworICAgICAgICBsb2FkMzIo
cmlnaHQsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwg
bGVmdCwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgfQorCisgICAgSnVtcCBicmFuY2gzMihDb25k
aXRpb24gY29uZCwgQWRkcmVzcyBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0KQorICAgIHsKKyAgICAg
ICAgbG9hZDMyKGxlZnQsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNo
MzIoY29uZCwgZGF0YVRlbXBSZWdpc3RlciwgcmlnaHQpOworICAgIH0KKworICAgIEp1bXAgYnJh
bmNoMzIoQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgbGVmdCwgSW1tMzIgcmlnaHQpCisgICAgewor
ICAgICAgICBsb2FkMzIobGVmdCwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgIG1vdmUocmln
aHQsIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBkYXRh
VGVtcFJlZ2lzdGVyLCBpbW1UZW1wUmVnaXN0ZXIpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNo
MzIoQ29uZGl0aW9uIGNvbmQsIEJhc2VJbmRleCBsZWZ0LCBJbW0zMiByaWdodCkKKyAgICB7Cisg
ICAgICAgIGxvYWQzMihsZWZ0LCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgLy8gQmUgY2Fy
ZWZ1bCB0aGF0IHRoZSBwcmV2aW91cyBsb2FkMzIoKSB1c2VzIGltbVRlbXBSZWdpc3Rlci4KKyAg
ICAgICAgLy8gU28sIHdlIG5lZWQgdG8gcHV0IG1vdmUoKSBhZnRlciBsb2FkMzIoKS4KKyAgICAg
ICAgbW92ZShyaWdodCwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMy
KGNvbmQsIGRhdGFUZW1wUmVnaXN0ZXIsIGltbVRlbXBSZWdpc3Rlcik7CisgICAgfQorCisgICAg
SnVtcCBicmFuY2gzMldpdGhVbmFsaWduZWRIYWxmV29yZHMoQ29uZGl0aW9uIGNvbmQsIEJhc2VJ
bmRleCBsZWZ0LCBJbW0zMiByaWdodCkKKyAgICB7CisgICAgICAgIGxvYWQzMldpdGhVbmFsaWdu
ZWRIYWxmV29yZHMobGVmdCwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgIC8vIEJlIGNhcmVm
dWwgdGhhdCB0aGUgcHJldmlvdXMgbG9hZDMyV2l0aFVuYWxpZ25lZEhhbGZXb3JkcygpCisgICAg
ICAgIC8vIHVzZXMgaW1tVGVtcFJlZ2lzdGVyLgorICAgICAgICAvLyBTbywgd2UgbmVlZCB0byBw
dXQgbW92ZSgpIGFmdGVyIGxvYWQzMldpdGhVbmFsaWduZWRIYWxmV29yZHMoKS4KKyAgICAgICAg
bW92ZShyaWdodCwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNv
bmQsIGRhdGFUZW1wUmVnaXN0ZXIsIGltbVRlbXBSZWdpc3Rlcik7CisgICAgfQorCisgICAgSnVt
cCBicmFuY2gzMihDb25kaXRpb24gY29uZCwgQWJzb2x1dGVBZGRyZXNzIGxlZnQsIFJlZ2lzdGVy
SUQgcmlnaHQpCisgICAgeworICAgICAgICBsb2FkMzIobGVmdC5tX3B0ciwgZGF0YVRlbXBSZWdp
c3Rlcik7CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBkYXRhVGVtcFJlZ2lzdGVyLCBy
aWdodCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29uZCwgQWJzb2x1
dGVBZGRyZXNzIGxlZnQsIEltbTMyIHJpZ2h0KQorICAgIHsKKyAgICAgICAgbG9hZDMyKGxlZnQu
bV9wdHIsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICBtb3ZlKHJpZ2h0LCBpbW1UZW1wUmVn
aXN0ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgZGF0YVRlbXBSZWdpc3Rlciwg
aW1tVGVtcFJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDE2KENvbmRpdGlvbiBj
b25kLCBCYXNlSW5kZXggbGVmdCwgUmVnaXN0ZXJJRCByaWdodCkKKyAgICB7CisgICAgICAgIGxv
YWQxNihsZWZ0LCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNv
bmQsIGRhdGFUZW1wUmVnaXN0ZXIsIHJpZ2h0KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDE2
KENvbmRpdGlvbiBjb25kLCBCYXNlSW5kZXggbGVmdCwgSW1tMzIgcmlnaHQpCisgICAgeworICAg
ICAgICBBU1NFUlQoIShyaWdodC5tX3ZhbHVlICYgMHhGRkZGMDAwMCkpOworICAgICAgICBsb2Fk
MTYobGVmdCwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgIC8vIEJlIGNhcmVmdWwgdGhhdCB0
aGUgcHJldmlvdXMgbG9hZDE2KCkgdXNlcyBpbW1UZW1wUmVnaXN0ZXIuCisgICAgICAgIC8vIFNv
LCB3ZSBuZWVkIHRvIHB1dCBtb3ZlKCkgYWZ0ZXIgbG9hZDE2KCkuCisgICAgICAgIG1vdmUocmln
aHQsIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBkYXRh
VGVtcFJlZ2lzdGVyLCBpbW1UZW1wUmVnaXN0ZXIpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNo
VGVzdDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHJlZywgUmVnaXN0ZXJJRCBtYXNrKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKChjb25kID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8p
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5kSW5zbihjbXBUZW1wUmVnaXN0ZXIsIHJlZywgbWFz
ayk7CisgICAgICAgIGlmIChjb25kID09IFplcm8pCisgICAgICAgICAgICByZXR1cm4gYnJhbmNo
RXF1YWwoY21wVGVtcFJlZ2lzdGVyLCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsKKyAgICAgICAgcmV0
dXJuIGJyYW5jaE5vdEVxdWFsKGNtcFRlbXBSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6emVybyk7
CisgICAgfQorCisgICAgSnVtcCBicmFuY2hUZXN0MzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVy
SUQgcmVnLCBJbW0zMiBtYXNrID0gSW1tMzIoLTEpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKChj
b25kID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8pKTsKKyAgICAgICAgaWYgKG1hc2subV92
YWx1ZSA9PSAtMSAmJiAhbV9maXhlZFdpZHRoKSB7CisgICAgICAgICAgICBpZiAoY29uZCA9PSBa
ZXJvKQorICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hFcXVhbChyZWcsIE1JUFNSZWdpc3Rl
cnM6Onplcm8pOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaE5vdEVxdWFsKHJlZywgTUlQU1Jl
Z2lzdGVyczo6emVybyk7CisgICAgICAgIH0KKyAgICAgICAgbW92ZShtYXNrLCBpbW1UZW1wUmVn
aXN0ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDMyKGNvbmQsIHJlZywgaW1tVGVtcFJl
Z2lzdGVyKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFRlc3QzMihDb25kaXRpb24gY29uZCwg
QWRkcmVzcyBhZGRyZXNzLCBJbW0zMiBtYXNrID0gSW1tMzIoLTEpKQorICAgIHsKKyAgICAgICAg
bG9hZDMyKGFkZHJlc3MsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNo
VGVzdDMyKGNvbmQsIGRhdGFUZW1wUmVnaXN0ZXIsIG1hc2spOworICAgIH0KKworICAgIEp1bXAg
YnJhbmNoVGVzdDMyKENvbmRpdGlvbiBjb25kLCBCYXNlSW5kZXggYWRkcmVzcywgSW1tMzIgbWFz
ayA9IEltbTMyKC0xKSkKKyAgICB7CisgICAgICAgIGxvYWQzMihhZGRyZXNzLCBkYXRhVGVtcFJl
Z2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3QzMihjb25kLCBkYXRhVGVtcFJlZ2lz
dGVyLCBtYXNrKTsKKyAgICB9CisKKyAgICBKdW1wIGp1bXAoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGJyYW5jaEVxdWFsKE1JUFNSZWdpc3RlcnM6Onplcm8sIE1JUFNSZWdpc3RlcnM6Onplcm8p
OworICAgIH0KKworICAgIHZvaWQganVtcChSZWdpc3RlcklEIHRhcmdldCkKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmpyKHRhcmdldCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOwor
ICAgIH0KKworICAgIHZvaWQganVtcChBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBt
X2ZpeGVkV2lkdGggPSB0cnVlOworICAgICAgICBsb2FkMzIoYWRkcmVzcywgTUlQU1JlZ2lzdGVy
czo6dDkpOworICAgICAgICBtX2Fzc2VtYmxlci5qcihNSVBTUmVnaXN0ZXJzOjp0OSk7CisgICAg
ICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICBtX2ZpeGVkV2lkdGggPSBmYWxzZTsKKyAg
ICB9CisKKyAgICAvLyBBcml0aG1ldGljIGNvbnRyb2wgZmxvdyBvcGVyYXRpb25zOgorICAgIC8v
CisgICAgLy8gVGhpcyBzZXQgb2YgY29uZGl0aW9uYWwgYnJhbmNoIG9wZXJhdGlvbnMgYnJhbmNo
IGJhc2VkCisgICAgLy8gb24gdGhlIHJlc3VsdCBvZiBhbiBhcml0aG1ldGljIG9wZXJhdGlvbi4g
IFRoZSBvcGVyYXRpb24KKyAgICAvLyBpcyBwZXJmb3JtZWQgYXMgbm9ybWFsLCBzdG9yaW5nIHRo
ZSByZXN1bHQuCisgICAgLy8KKyAgICAvLyAqIGp6IG9wZXJhdGlvbnMgYnJhbmNoIGlmIHRoZSBy
ZXN1bHQgaXMgemVyby4KKyAgICAvLyAqIGpvIG9wZXJhdGlvbnMgYnJhbmNoIGlmIHRoZSAoc2ln
bmVkKSBhcml0aG1ldGljCisgICAgLy8gICBvcGVyYXRpb24gY2F1c2VkIGFuIG92ZXJmbG93IHRv
IG9jY3VyLgorCisgICAgSnVtcCBicmFuY2hBZGQzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJ
RCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBP
dmVyZmxvdykgfHwgKGNvbmQgPT0gU2lnbmVkKSB8fCAoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9
PSBOb25aZXJvKSk7CisgICAgICAgIGlmIChjb25kID09IE92ZXJmbG93KSB7CisgICAgICAgICAg
ICAvKgorICAgICAgICAgICAgICAgIG1vdmUgICAgZGVzdCwgZGF0YVRlbXAKKyAgICAgICAgICAg
ICAgICB4b3IgICAgIGNtcFRlbXAsIGRhdGFUZW1wLCBzcmMKKyAgICAgICAgICAgICAgICBibHR6
ICAgIGNtcFRlbXAsIE5vX292ZXJmbG93ICAgICMgZGlmZiBzaWduIGJpdCAtPiBubyBvdmVyZmxv
dworICAgICAgICAgICAgICAgIGFkZHUgICAgZGVzdCwgZGF0YVRlbXAsIHNyYworICAgICAgICAg
ICAgICAgIHhvciAgICAgY21wVGVtcCwgZGVzdCwgZGF0YVRlbXAKKyAgICAgICAgICAgICAgICBi
Z2V6ICAgIGNtcFRlbXAsIE5vX292ZXJmbG93ICAgICMgc2FtZSBzaWduIGJpZyAtPiBubyBvdmVy
ZmxvdworICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgICAgIGIgICAgICAgT3ZlcmZs
b3cKKyAgICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAg
ICAgICBub3AKKyAgICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAgICAgICBub3AKKyAgICAg
ICAgICAgIE5vX292ZXJmbG93OgorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1vdmUoZGVz
dCwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3JJbnNuKGNt
cFRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3Rlciwgc3JjKTsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmJsdHooY21wVGVtcFJlZ2lzdGVyLCAxMCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5hZGR1KGRlc3QsIGRhdGFUZW1wUmVnaXN0ZXIsIHNyYyk7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci54b3JJbnNuKGNtcFRlbXBSZWdpc3RlciwgZGVzdCwgZGF0YVRlbXBSZWdpc3Rlcik7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5iZ2V6KGNtcFRlbXBSZWdpc3RlciwgNyk7CisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgICAgIHJldHVybiBqdW1wKCk7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gU2lnbmVkKSB7CisgICAgICAgICAgICBhZGQzMihz
cmMsIGRlc3QpOworICAgICAgICAgICAgLy8gQ2hlY2sgaWYgZGVzdCBpcyBuZWdhdGl2ZS4KKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdChjbXBUZW1wUmVnaXN0ZXIsIGRlc3QsIE1JUFNSZWdp
c3RlcnM6Onplcm8pOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaE5vdEVxdWFsKGNtcFRlbXBS
ZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6emVybyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNv
bmQgPT0gWmVybykgeworICAgICAgICAgICAgYWRkMzIoc3JjLCBkZXN0KTsKKyAgICAgICAgICAg
IHJldHVybiBicmFuY2hFcXVhbChkZXN0LCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoY29uZCA9PSBOb25aZXJvKSB7CisgICAgICAgICAgICBhZGQzMihzcmMs
IGRlc3QpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaE5vdEVxdWFsKGRlc3QsIE1JUFNSZWdp
c3RlcnM6Onplcm8pOworICAgICAgICB9CisgICAgICAgIEFTU0VSVCgwKTsKKyAgICAgICAgcmV0
dXJuIEp1bXAoKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaEFkZDMyKENvbmRpdGlvbiBjb25k
LCBJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1vdmUoaW1tLCBp
bW1UZW1wUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNoQWRkMzIoY29uZCwgaW1tVGVt
cFJlZ2lzdGVyLCBkZXN0KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaE11bDMyKENvbmRpdGlv
biBjb25kLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
QVNTRVJUKChjb25kID09IE92ZXJmbG93KSB8fCAoY29uZCA9PSBTaWduZWQpIHx8IChjb25kID09
IFplcm8pIHx8IChjb25kID09IE5vblplcm8pKTsKKyAgICAgICAgaWYgKGNvbmQgPT0gT3ZlcmZs
b3cpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgbXVsdCAgICBzcmMsIGRlc3QK
KyAgICAgICAgICAgICAgICBtZmhpICAgIGRhdGFUZW1wCisgICAgICAgICAgICAgICAgbWZsbyAg
ICBkZXN0CisgICAgICAgICAgICAgICAgc3JhICAgICBhZGRyVGVtcCwgZGVzdCwgMzEKKyAgICAg
ICAgICAgICAgICBiZXEgICAgIGRhdGFUZW1wLCBhZGRyVGVtcCwgTm9fb3ZlcmZsb3cgIyBhbGwg
c2lnbiBiaXRzIChiaXQgNjMgdG8gYml0IDMxKSBhcmUgdGhlIHNhbWUgLT4gbm8gb3ZlcmZsb3cK
KyAgICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAgICAgICBiICAgICAgIE92ZXJmbG93Cisg
ICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAg
bm9wCisgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAg
ICBOb19vdmVyZmxvdzoKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5t
dWx0KHNyYywgZGVzdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tZmhpKGRhdGFUZW1wUmVn
aXN0ZXIpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubWZsbyhkZXN0KTsKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLnNyYShhZGRyVGVtcFJlZ2lzdGVyLCBkZXN0LCAzMSk7CisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5iZXEoZGF0YVRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgNyk7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgICAgIHJldHVybiBqdW1w
KCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gU2lnbmVkKSB7CisgICAgICAgICAg
ICBtdWwzMihzcmMsIGRlc3QpOworICAgICAgICAgICAgLy8gQ2hlY2sgaWYgZGVzdCBpcyBuZWdh
dGl2ZS4KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdChjbXBUZW1wUmVnaXN0ZXIsIGRlc3Qs
IE1JUFNSZWdpc3RlcnM6Onplcm8pOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaE5vdEVxdWFs
KGNtcFRlbXBSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6emVybyk7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKGNvbmQgPT0gWmVybykgeworICAgICAgICAgICAgbXVsMzIoc3JjLCBkZXN0KTsKKyAg
ICAgICAgICAgIHJldHVybiBicmFuY2hFcXVhbChkZXN0LCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoY29uZCA9PSBOb25aZXJvKSB7CisgICAgICAgICAgICBt
dWwzMihzcmMsIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaE5vdEVxdWFsKGRlc3Qs
IE1JUFNSZWdpc3RlcnM6Onplcm8pOworICAgICAgICB9CisgICAgICAgIEFTU0VSVCgwKTsKKyAg
ICAgICAgcmV0dXJuIEp1bXAoKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaE11bDMyKENvbmRp
dGlvbiBjb25kLCBJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICBtb3ZlKGltbSwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgbW92ZShz
cmMsIGRlc3QpOworICAgICAgICByZXR1cm4gYnJhbmNoTXVsMzIoY29uZCwgaW1tVGVtcFJlZ2lz
dGVyLCBkZXN0KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFN1YjMyKENvbmRpdGlvbiBjb25k
LCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgQVNTRVJU
KChjb25kID09IE92ZXJmbG93KSB8fCAoY29uZCA9PSBTaWduZWQpIHx8IChjb25kID09IFplcm8p
IHx8IChjb25kID09IE5vblplcm8pKTsKKyAgICAgICAgaWYgKGNvbmQgPT0gT3ZlcmZsb3cpIHsK
KyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgbW92ZSAgICBkZXN0LCBkYXRhVGVtcAor
ICAgICAgICAgICAgICAgIHhvciAgICAgY21wVGVtcCwgZGF0YVRlbXAsIHNyYworICAgICAgICAg
ICAgICAgIGJnZXogICAgY21wVGVtcCwgTm9fb3ZlcmZsb3cgICAgIyBzYW1lIHNpZ24gYml0IC0+
IG5vIG92ZXJmbG93CisgICAgICAgICAgICAgICAgc3VidSAgICBkZXN0LCBkYXRhVGVtcCwgc3Jj
CisgICAgICAgICAgICAgICAgeG9yICAgICBjbXBUZW1wLCBkZXN0LCBkYXRhVGVtcAorICAgICAg
ICAgICAgICAgIGJnZXogICAgY21wVGVtcCwgTm9fb3ZlcmZsb3cgICAgIyBzYW1lIHNpZ24gYml0
IC0+IG5vIG92ZXJmbG93CisgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgYiAg
ICAgICBPdmVyZmxvdworICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgICAgIG5vcAor
ICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgICAg
IG5vcAorICAgICAgICAgICAgTm9fb3ZlcmZsb3c6CisgICAgICAgICAgICAqLworICAgICAgICAg
ICAgbW92ZShkZXN0LCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
Lnhvckluc24oY21wVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLCBzcmMpOworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuYmdleihjbXBUZW1wUmVnaXN0ZXIsIDEwKTsKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLnN1YnUoZGVzdCwgZGF0YVRlbXBSZWdpc3Rlciwgc3JjKTsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLnhvckluc24oY21wVGVtcFJlZ2lzdGVyLCBkZXN0LCBkYXRhVGVtcFJl
Z2lzdGVyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmJnZXooY21wVGVtcFJlZ2lzdGVyLCA3
KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICAgICAgcmV0dXJuIGp1
bXAoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29uZCA9PSBTaWduZWQpIHsKKyAgICAgICAg
ICAgIHN1YjMyKHNyYywgZGVzdCk7CisgICAgICAgICAgICAvLyBDaGVjayBpZiBkZXN0IGlzIG5l
Z2F0aXZlLgorICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0KGNtcFRlbXBSZWdpc3RlciwgZGVz
dCwgTUlQU1JlZ2lzdGVyczo6emVybyk7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoTm90RXF1
YWwoY21wVGVtcFJlZ2lzdGVyLCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoY29uZCA9PSBaZXJvKSB7CisgICAgICAgICAgICBzdWIzMihzcmMsIGRlc3QpOwor
ICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEVxdWFsKGRlc3QsIE1JUFNSZWdpc3RlcnM6Onplcm8p
OworICAgICAgICB9CisgICAgICAgIGlmIChjb25kID09IE5vblplcm8pIHsKKyAgICAgICAgICAg
IHN1YjMyKHNyYywgZGVzdCk7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoTm90RXF1YWwoZGVz
dCwgTUlQU1JlZ2lzdGVyczo6emVybyk7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKDApOwor
ICAgICAgICByZXR1cm4gSnVtcCgpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoU3ViMzIoQ29u
ZGl0aW9uIGNvbmQsIEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
bW92ZShpbW0sIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBicmFuY2hTdWIzMihj
b25kLCBpbW1UZW1wUmVnaXN0ZXIsIGRlc3QpOworICAgIH0KKworICAgIC8vIE1pc2NlbGxhbmVv
dXMgb3BlcmF0aW9uczoKKworICAgIHZvaWQgYnJlYWtwb2ludCgpCisgICAgeworICAgICAgICBt
X2Fzc2VtYmxlci5ia3B0KCk7CisgICAgfQorCisgICAgQ2FsbCBuZWFyQ2FsbCgpCisgICAgewor
ICAgICAgICAvKiBXZSBuZWVkIHR3byB3b3JkcyBmb3IgcmVsYXhhdGlvbi4gICovCisgICAgICAg
IG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAg
bV9hc3NlbWJsZXIuamFsKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICBy
ZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5uZXdKbXBTcmMoKSwgQ2FsbDo6TGlua2FibGVOZWFyKTsK
KyAgICB9CisKKyAgICBDYWxsIGNhbGwoKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubHVp
KE1JUFNSZWdpc3RlcnM6OnQ5LCAwKTsKKyAgICAgICAgbV9hc3NlbWJsZXIub3JpKE1JUFNSZWdp
c3RlcnM6OnQ5LCBNSVBTUmVnaXN0ZXJzOjp0OSwgMCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmph
bHIoTUlQU1JlZ2lzdGVyczo6dDkpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAg
ICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIubmV3Sm1wU3JjKCksIENhbGw6OkxpbmthYmxlKTsK
KyAgICB9CisKKyAgICBDYWxsIGNhbGwoUmVnaXN0ZXJJRCB0YXJnZXQpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5qYWxyKHRhcmdldCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOwor
ICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5uZXdKbXBTcmMoKSwgQ2FsbDo6Tm9uZSk7
CisgICAgfQorCisgICAgQ2FsbCBjYWxsKEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAg
IG1fZml4ZWRXaWR0aCA9IHRydWU7CisgICAgICAgIGxvYWQzMihhZGRyZXNzLCBNSVBTUmVnaXN0
ZXJzOjp0OSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmphbHIoTUlQU1JlZ2lzdGVyczo6dDkpOwor
ICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgbV9maXhlZFdpZHRoID0gZmFsc2U7
CisgICAgICAgIHJldHVybiBDYWxsKG1fYXNzZW1ibGVyLm5ld0ptcFNyYygpLCBDYWxsOjpOb25l
KTsKKyAgICB9CisKKyAgICB2b2lkIHJldCgpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5q
cihNSVBTUmVnaXN0ZXJzOjpyYSk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgIH0K
KworICAgIHZvaWQgc2V0MzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0
ZXJJRCByaWdodCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKGNvbmQgPT0g
RXF1YWwgfHwgY29uZCA9PSBaZXJvKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3JJbnNu
KGRlc3QsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdGl1KGRlc3Qs
IGRlc3QsIDEpOworICAgICAgICB9IGVsc2UgaWYgKGNvbmQgPT0gTm90RXF1YWwgfHwgY29uZCA9
PSBOb25aZXJvKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3JJbnNuKGRlc3QsIGxlZnQs
IHJpZ2h0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdHUoZGVzdCwgTUlQU1JlZ2lzdGVy
czo6emVybywgZGVzdCk7CisgICAgICAgIH0gZWxzZSBpZiAoY29uZCA9PSBBYm92ZSkKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLnNsdHUoZGVzdCwgcmlnaHQsIGxlZnQpOworICAgICAgICBlbHNl
IGlmIChjb25kID09IEFib3ZlT3JFcXVhbCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0
dShkZXN0LCBsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3JpKGRlc3Qs
IGRlc3QsIDEpOworICAgICAgICB9IGVsc2UgaWYgKGNvbmQgPT0gQmVsb3cpCisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5zbHR1KGRlc3QsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgZWxzZSBpZiAo
Y29uZCA9PSBCZWxvd09yRXF1YWwpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdHUoZGVz
dCwgcmlnaHQsIGxlZnQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIueG9yaShkZXN0LCBkZXN0
LCAxKTsKKyAgICAgICAgfSBlbHNlIGlmIChjb25kID09IEdyZWF0ZXJUaGFuKQorICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuc2x0KGRlc3QsIHJpZ2h0LCBsZWZ0KTsKKyAgICAgICAgZWxzZSBpZiAo
Y29uZCA9PSBHcmVhdGVyVGhhbk9yRXF1YWwpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNs
dChkZXN0LCBsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3JpKGRlc3Qs
IGRlc3QsIDEpOworICAgICAgICB9IGVsc2UgaWYgKGNvbmQgPT0gTGVzc1RoYW4pCisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5zbHQoZGVzdCwgbGVmdCwgcmlnaHQpOworICAgICAgICBlbHNlIGlm
IChjb25kID09IExlc3NUaGFuT3JFcXVhbCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0
KGRlc3QsIHJpZ2h0LCBsZWZ0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnhvcmkoZGVzdCwg
ZGVzdCwgMSk7CisgICAgICAgIH0gZWxzZSBpZiAoY29uZCA9PSBPdmVyZmxvdykgeworICAgICAg
ICAgICAgLyoKKyAgICAgICAgICAgICAgICB4b3IgICAgIGNtcFRlbXAsIGxlZnQsIHJpZ2h0Cisg
ICAgICAgICAgICAgICAgYmdleiAgICBEb25lLCBjbXBUZW1wICAgIyBzYW1lIHNpZ24gYml0IC0+
IG5vIG92ZXJmbG93CisgICAgICAgICAgICAgICAgbW92ZSAgICBkZXN0LCAwCisgICAgICAgICAg
ICAgICAgc3VidSAgICBjbXBUZW1wLCBsZWZ0LCByaWdodAorICAgICAgICAgICAgICAgIHhvciAg
ICAgY21wVGVtcCwgY21wVGVtcCwgbGVmdCAjIGRpZmYgc2lnbiBiaXQgLT4gb3ZlcmZsb3cKKyAg
ICAgICAgICAgICAgICBzbHQgICAgIGRlc3QsIGNtcFRlbXAsIDAKKyAgICAgICAgICAgICAgRG9u
ZToKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3JJbnNuKGNtcFRl
bXBSZWdpc3RlciwgbGVmdCwgcmlnaHQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYmdleihj
bXBUZW1wUmVnaXN0ZXIsIDQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92ZShkZXN0LCBN
SVBTUmVnaXN0ZXJzOjp6ZXJvKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN1YnUoY21wVGVt
cFJlZ2lzdGVyLCBsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3JJbnNu
KGNtcFRlbXBSZWdpc3RlciwgY21wVGVtcFJlZ2lzdGVyLCBsZWZ0KTsKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLnNsdChkZXN0LCBjbXBUZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onplcm8p
OworICAgICAgICB9IGVsc2UgaWYgKGNvbmQgPT0gU2lnbmVkKSB7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5zdWJ1KGRlc3QsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIC8vIENoZWNrIGlm
IHRoZSByZXN1bHQgaXMgbmVnYXRpdmUuCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHQoZGVz
dCwgZGVzdCwgTUlQU1JlZ2lzdGVyczo6emVybyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2
b2lkIHNldDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIEltbTMyIHJpZ2h0LCBS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtb3ZlKHJpZ2h0LCBpbW1UZW1wUmVnaXN0
ZXIpOworICAgICAgICBzZXQzMihjb25kLCBsZWZ0LCBpbW1UZW1wUmVnaXN0ZXIsIGRlc3QpOwor
ICAgIH0KKworICAgIHZvaWQgc2V0VGVzdDMyKENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGFkZHJl
c3MsIEltbTMyIG1hc2ssIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgo
Y29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisgICAgICAgIGxvYWQzMihhZGRy
ZXNzLCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgaWYgKG1hc2subV92YWx1ZSA9PSAtMSAm
JiAhbV9maXhlZFdpZHRoKSB7CisgICAgICAgICAgICBpZiAoY29uZCA9PSBaZXJvKQorICAgICAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdGl1KGRlc3QsIGRhdGFUZW1wUmVnaXN0ZXIsIDEpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdHUoZGVzdCwg
TUlQU1JlZ2lzdGVyczo6emVybywgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBtb3ZlKG1hc2ssIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5hbmRJbnNuKGNtcFRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3RlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAg
ICAgICBpZiAoY29uZCA9PSBaZXJvKQorICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdGl1
KGRlc3QsIGNtcFRlbXBSZWdpc3RlciwgMSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuc2x0dShkZXN0LCBNSVBTUmVnaXN0ZXJzOjp6ZXJvLCBjbXBUZW1w
UmVnaXN0ZXIpOworICAgICAgICB9CisgICAgfQorCisgICAgRGF0YUxhYmVsMzIgbW92ZVdpdGhQ
YXRjaChJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fZml4ZWRX
aWR0aCA9IHRydWU7CisgICAgICAgIERhdGFMYWJlbDMyIGxhYmVsKHRoaXMpOworICAgICAgICBt
b3ZlKGltbSwgZGVzdCk7CisgICAgICAgIG1fZml4ZWRXaWR0aCA9IGZhbHNlOworICAgICAgICBy
ZXR1cm4gbGFiZWw7CisgICAgfQorCisgICAgRGF0YUxhYmVsUHRyIG1vdmVXaXRoUGF0Y2goSW1t
UHRyIGluaXRpYWxWYWx1ZSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9maXhl
ZFdpZHRoID0gdHJ1ZTsKKyAgICAgICAgRGF0YUxhYmVsUHRyIGxhYmVsKHRoaXMpOworICAgICAg
ICBtb3ZlKGluaXRpYWxWYWx1ZSwgZGVzdCk7CisgICAgICAgIG1fZml4ZWRXaWR0aCA9IGZhbHNl
OworICAgICAgICByZXR1cm4gbGFiZWw7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hQdHJXaXRo
UGF0Y2goQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgRGF0YUxhYmVsUHRyJiBkYXRh
TGFiZWwsIEltbVB0ciBpbml0aWFsUmlnaHRWYWx1ZSA9IEltbVB0cigwKSkKKyAgICB7CisgICAg
ICAgIG1fZml4ZWRXaWR0aCA9IHRydWU7CisgICAgICAgIGRhdGFMYWJlbCA9IG1vdmVXaXRoUGF0
Y2goaW5pdGlhbFJpZ2h0VmFsdWUsIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgIEp1bXAgdGVt
cCA9IGJyYW5jaDMyKGNvbmQsIGxlZnQsIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgIG1fZml4
ZWRXaWR0aCA9IGZhbHNlOworICAgICAgICByZXR1cm4gdGVtcDsKKyAgICB9CisKKyAgICBKdW1w
IGJyYW5jaFB0cldpdGhQYXRjaChDb25kaXRpb24gY29uZCwgQWRkcmVzcyBsZWZ0LCBEYXRhTGFi
ZWxQdHImIGRhdGFMYWJlbCwgSW1tUHRyIGluaXRpYWxSaWdodFZhbHVlID0gSW1tUHRyKDApKQor
ICAgIHsKKyAgICAgICAgbV9maXhlZFdpZHRoID0gdHJ1ZTsKKyAgICAgICAgbG9hZDMyKGxlZnQs
IGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICBkYXRhTGFiZWwgPSBtb3ZlV2l0aFBhdGNoKGlu
aXRpYWxSaWdodFZhbHVlLCBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICBKdW1wIHRlbXAgPSBi
cmFuY2gzMihjb25kLCBkYXRhVGVtcFJlZ2lzdGVyLCBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAg
ICBtX2ZpeGVkV2lkdGggPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRlbXA7CisgICAgfQorCisg
ICAgRGF0YUxhYmVsUHRyIHN0b3JlUHRyV2l0aFBhdGNoKEltbVB0ciBpbml0aWFsVmFsdWUsIElt
cGxpY2l0QWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9maXhlZFdpZHRoID0gdHJ1
ZTsKKyAgICAgICAgRGF0YUxhYmVsUHRyIGRhdGFMYWJlbCA9IG1vdmVXaXRoUGF0Y2goaW5pdGlh
bFZhbHVlLCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgc3RvcmUzMihkYXRhVGVtcFJlZ2lz
dGVyLCBhZGRyZXNzKTsKKyAgICAgICAgbV9maXhlZFdpZHRoID0gZmFsc2U7CisgICAgICAgIHJl
dHVybiBkYXRhTGFiZWw7CisgICAgfQorCisgICAgRGF0YUxhYmVsUHRyIHN0b3JlUHRyV2l0aFBh
dGNoKEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0b3Jl
UHRyV2l0aFBhdGNoKEltbVB0cigwKSwgYWRkcmVzcyk7CisgICAgfQorCisgICAgQ2FsbCB0YWls
UmVjdXJzaXZlQ2FsbCgpCisgICAgeworICAgICAgICAvLyBMaWtlIGEgbm9ybWFsIGNhbGwsIGJ1
dCBkb24ndCB1cGRhdGUgdGhlIHJldHVybmVkIGFkZHJlc3MgcmVnaXN0ZXIKKyAgICAgICAgbV9m
aXhlZFdpZHRoID0gdHJ1ZTsKKyAgICAgICAgbW92ZShJbW0zMigwKSwgTUlQU1JlZ2lzdGVyczo6
dDkpOworICAgICAgICBtX2Fzc2VtYmxlci5qcihNSVBTUmVnaXN0ZXJzOjp0OSk7CisgICAgICAg
IG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICBtX2ZpeGVkV2lkdGggPSBmYWxzZTsKKyAgICAg
ICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIubmV3Sm1wU3JjKCksIENhbGw6OkxpbmthYmxlKTsK
KyAgICB9CisKKyAgICBDYWxsIG1ha2VUYWlsUmVjdXJzaXZlQ2FsbChKdW1wIG9sZEp1bXApCisg
ICAgeworICAgICAgICBvbGRKdW1wLmxpbmsodGhpcyk7CisgICAgICAgIHJldHVybiB0YWlsUmVj
dXJzaXZlQ2FsbCgpOworICAgIH0KKworICAgIHZvaWQgbG9hZERvdWJsZShJbXBsaWNpdEFkZHJl
c3MgYWRkcmVzcywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworI2lmIFdURl9NSVBTX0lTQSgx
KQorICAgICAgICAvKgorICAgICAgICAgICAgbGkgICAgICAgICAgYWRkclRlbXAsIGFkZHJlc3Mu
b2Zmc2V0CisgICAgICAgICAgICBhZGR1ICAgICAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGJhc2UK
KyAgICAgICAgICAgIGx3YzEgICAgICAgIGRlc3QsIDAoYWRkclRlbXApCisgICAgICAgICAgICBs
d2MxICAgICAgICBkZXN0KzEsIDQoYWRkclRlbXApCisgICAgICAgICAqLworICAgICAgICBtb3Zl
KEltbTMyKGFkZHJlc3Mub2Zmc2V0KSwgYWRkclRlbXBSZWdpc3Rlcik7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5i
YXNlKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubHdjMShkZXN0LCBhZGRyVGVtcFJlZ2lzdGVyLCAw
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIubHdjMShGUFJlZ2lzdGVySUQoZGVzdCArIDEpLCBhZGRy
VGVtcFJlZ2lzdGVyLCA0KTsKKyNlbHNlCisgICAgICAgIGlmIChhZGRyZXNzLm9mZnNldCA+PSAt
MzI3NjggJiYgYWRkcmVzcy5vZmZzZXQgPD0gMzI3NjcKKyAgICAgICAgICAgICYmICFtX2ZpeGVk
V2lkdGgpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxkYzEoZGVzdCwgYWRkcmVzcy5iYXNl
LCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKgorICAg
ICAgICAgICAgICAgIGx1aSAgICAgYWRkclRlbXAsIChvZmZzZXQgKyAweDgwMDApID4+IDE2Cisg
ICAgICAgICAgICAgICAgYWRkdSAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGJhc2UKKyAgICAgICAg
ICAgICAgICBsZGMxICAgIGRlc3QsIChvZmZzZXQgJiAweGZmZmYpKGFkZHJUZW1wKQorICAgICAg
ICAgICAgICAqLworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHVpKGFkZHJUZW1wUmVnaXN0ZXIs
IChhZGRyZXNzLm9mZnNldCArIDB4ODAwMCkgPj4gMTYpOworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2Up
OworICAgICAgICAgICAgbV9hc3NlbWJsZXIubGRjMShkZXN0LCBhZGRyVGVtcFJlZ2lzdGVyLCBh
ZGRyZXNzLm9mZnNldCk7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKworICAgIHZvaWQgc3Rv
cmVEb3VibGUoRlBSZWdpc3RlcklEIHNyYywgSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MpCisgICAg
eworI2lmIFdURl9NSVBTX0lTQSgxKQorICAgICAgICAvKgorICAgICAgICAgICAgbGkgICAgICAg
ICAgYWRkclRlbXAsIGFkZHJlc3Mub2Zmc2V0CisgICAgICAgICAgICBhZGR1ICAgICAgICBhZGRy
VGVtcCwgYWRkclRlbXAsIGJhc2UKKyAgICAgICAgICAgIHN3YzEgICAgICAgIGRlc3QsIDAoYWRk
clRlbXApCisgICAgICAgICAgICBzd2MxICAgICAgICBkZXN0KzEsIDQoYWRkclRlbXApCisgICAg
ICAgICAqLworICAgICAgICBtb3ZlKEltbTMyKGFkZHJlc3Mub2Zmc2V0KSwgYWRkclRlbXBSZWdp
c3Rlcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRl
bXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3djMShzcmMs
IGFkZHJUZW1wUmVnaXN0ZXIsIDApOworICAgICAgICBtX2Fzc2VtYmxlci5zd2MxKEZQUmVnaXN0
ZXJJRChzcmMgKyAxKSwgYWRkclRlbXBSZWdpc3RlciwgNCk7CisjZWxzZQorICAgICAgICBpZiAo
YWRkcmVzcy5vZmZzZXQgPj0gLTMyNzY4ICYmIGFkZHJlc3Mub2Zmc2V0IDw9IDMyNzY3CisgICAg
ICAgICAgICAmJiAhbV9maXhlZFdpZHRoKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2RjMShz
cmMsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5vZmZzZXQpOworICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIC8qCisgICAgICAgICAgICAgICAgbHVpICAgICBhZGRyVGVtcCwgKG9mZnNldCArIDB4
ODAwMCkgPj4gMTYKKyAgICAgICAgICAgICAgICBhZGR1ICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwg
YmFzZQorICAgICAgICAgICAgICAgIHNkYzEgICAgc3JjLCAob2Zmc2V0ICYgMHhmZmZmKShhZGRy
VGVtcCkKKyAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx1aShhZGRy
VGVtcFJlZ2lzdGVyLCAoYWRkcmVzcy5vZmZzZXQgKyAweDgwMDApID4+IDE2KTsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3Rlciwg
YWRkcmVzcy5iYXNlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNkYzEoc3JjLCBhZGRyVGVt
cFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKwor
ICAgIHZvaWQgYWRkRG91YmxlKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkZChkZXN0LCBkZXN0LCBzcmMpOworICAgIH0K
KworICAgIHZvaWQgYWRkRG91YmxlKEFkZHJlc3Mgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAg
ICB7CisgICAgICAgIGxvYWREb3VibGUoc3JjLCBmcFRlbXBSZWdpc3Rlcik7CisgICAgICAgIG1f
YXNzZW1ibGVyLmFkZGQoZGVzdCwgZGVzdCwgZnBUZW1wUmVnaXN0ZXIpOworICAgIH0KKworICAg
IHZvaWQgc3ViRG91YmxlKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAg
IHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3ViZChkZXN0LCBkZXN0LCBzcmMpOworICAgIH0KKwor
ICAgIHZvaWQgc3ViRG91YmxlKEFkZHJlc3Mgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7
CisgICAgICAgIGxvYWREb3VibGUoc3JjLCBmcFRlbXBSZWdpc3Rlcik7CisgICAgICAgIG1fYXNz
ZW1ibGVyLnN1YmQoZGVzdCwgZGVzdCwgZnBUZW1wUmVnaXN0ZXIpOworICAgIH0KKworICAgIHZv
aWQgbXVsRG91YmxlKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIubXVsZChkZXN0LCBkZXN0LCBzcmMpOworICAgIH0KKworICAg
IHZvaWQgbXVsRG91YmxlKEFkZHJlc3Mgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisg
ICAgICAgIGxvYWREb3VibGUoc3JjLCBmcFRlbXBSZWdpc3Rlcik7CisgICAgICAgIG1fYXNzZW1i
bGVyLm11bGQoZGVzdCwgZGVzdCwgZnBUZW1wUmVnaXN0ZXIpOworICAgIH0KKworICAgIHZvaWQg
Y29udmVydEludDMyVG9Eb3VibGUoUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubXRjMShzcmMsIGZwVGVtcFJlZ2lzdGVyKTsKKyAg
ICAgICAgbV9hc3NlbWJsZXIuY3Z0ZHcoZGVzdCwgZnBUZW1wUmVnaXN0ZXIpOworICAgIH0KKwor
ICAgIHZvaWQgaW5zZXJ0UmVsYXhhdGlvbldvcmRzKCkKKyAgICB7CisgICAgICAgIC8qIFdlIG5l
ZWQgZm91ciB3b3JkcyBmb3IgcmVsYXhhdGlvbi4gKi8KKyAgICAgICAgbV9hc3NlbWJsZXIuYmVx
KE1JUFNSZWdpc3RlcnM6Onplcm8sIE1JUFNSZWdpc3RlcnM6Onplcm8sIDMpOyAvLyBKdW1wIG92
ZXIgbm9wczsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIG1fYXNzZW1ibGVy
Lm5vcCgpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICB9CisKKyAgICBKdW1wIGJy
YW5jaFRydWUoKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYXBwZW5kSnVtcCgpOworICAg
ICAgICBtX2Fzc2VtYmxlci5iYzF0KCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAg
ICAgICBpbnNlcnRSZWxheGF0aW9uV29yZHMoKTsKKyAgICAgICAgcmV0dXJuIEp1bXAobV9hc3Nl
bWJsZXIubmV3Sm1wU3JjKCkpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoRmFsc2UoKQorICAg
IHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYXBwZW5kSnVtcCgpOworICAgICAgICBtX2Fzc2VtYmxl
ci5iYzFmKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICBpbnNlcnRSZWxh
eGF0aW9uV29yZHMoKTsKKyAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIubmV3Sm1wU3Jj
KCkpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoRXF1YWwoUmVnaXN0ZXJJRCBycywgUmVnaXN0
ZXJJRCBydCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFwcGVuZEp1bXAoKTsKKyAgICAg
ICAgbV9hc3NlbWJsZXIuYmVxKHJzLCBydCwgMCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgp
OworICAgICAgICBpbnNlcnRSZWxheGF0aW9uV29yZHMoKTsKKyAgICAgICAgcmV0dXJuIEp1bXAo
bV9hc3NlbWJsZXIubmV3Sm1wU3JjKCkpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoTm90RXF1
YWwoUmVnaXN0ZXJJRCBycywgUmVnaXN0ZXJJRCBydCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLmFwcGVuZEp1bXAoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYm5lKHJzLCBydCwgMCk7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICBpbnNlcnRSZWxheGF0aW9uV29yZHMo
KTsKKyAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIubmV3Sm1wU3JjKCkpOworICAgIH0K
KworICAgIEp1bXAgYnJhbmNoRG91YmxlKERvdWJsZUNvbmRpdGlvbiBjb25kLCBGUFJlZ2lzdGVy
SUQgbGVmdCwgRlBSZWdpc3RlcklEIHJpZ2h0KQorICAgIHsKKyAgICAgICAgaWYgKGNvbmQgPT0g
RG91YmxlRXF1YWwpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNlcWQobGVmdCwgcmlnaHQp
OworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoY29uZCA9PSBEb3VibGVOb3RFcXVhbCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY2Vx
ZChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsgLy8gZmFs
c2UKKyAgICAgICAgfQorICAgICAgICBpZiAoY29uZCA9PSBEb3VibGVHcmVhdGVyVGhhbikgewor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuY25ndGQobGVmdCwgcmlnaHQpOworICAgICAgICAgICAg
cmV0dXJuIGJyYW5jaEZhbHNlKCk7IC8vIGZhbHNlCisgICAgICAgIH0KKyAgICAgICAgaWYgKGNv
bmQgPT0gRG91YmxlR3JlYXRlclRoYW5PckVxdWFsKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5jbmdlZChyaWdodCwgbGVmdCk7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsg
Ly8gZmFsc2UKKyAgICAgICAgfQorICAgICAgICBpZiAoY29uZCA9PSBEb3VibGVMZXNzVGhhbikg
eworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY2x0ZChsZWZ0LCByaWdodCk7CisgICAgICAgICAg
ICByZXR1cm4gYnJhbmNoVHJ1ZSgpOworICAgICAgICB9CisgICAgICAgIGlmIChjb25kID09IERv
dWJsZUxlc3NUaGFuT3JFcXVhbCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY2xlZChsZWZ0
LCByaWdodCk7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgpOworICAgICAgICB9Cisg
ICAgICAgIGlmIChjb25kID09IERvdWJsZUVxdWFsT3JVbm9yZGVyZWQpIHsKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmN1ZXFkKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIHJldHVybiBicmFu
Y2hUcnVlKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gRG91YmxlR3JlYXRlclRo
YW5PclVub3JkZXJlZCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY29sZWQobGVmdCwgcmln
aHQpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7IC8vIGZhbHNlCisgICAgICAg
IH0KKyAgICAgICAgaWYgKGNvbmQgPT0gRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVy
ZWQpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNvbHRkKGxlZnQsIHJpZ2h0KTsKKyAgICAg
ICAgICAgIHJldHVybiBicmFuY2hGYWxzZSgpOyAvLyBmYWxzZQorICAgICAgICB9CisgICAgICAg
IGlmIChjb25kID09IERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQpIHsKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLmN1bHRkKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hU
cnVlKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gRG91YmxlTGVzc1RoYW5PckVx
dWFsT3JVbm9yZGVyZWQpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmN1bGVkKGxlZnQsIHJp
Z2h0KTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7CisgICAgICAgIH0KKyAgICAg
ICAgQVNTRVJUKDApOworCisgICAgICAgIHJldHVybiBKdW1wKCk7CisgICAgfQorCisgICAgLy8g
VHJ1bmNhdGVzICdzcmMnIHRvIGFuIGludGVnZXIsIGFuZCBwbGFjZXMgdGhlIHJlc3VsdGluZyAn
ZGVzdCcuCisgICAgLy8gSWYgdGhlIHJlc3VsdCBpcyBub3QgcmVwcmVzZW50YWJsZSBhcyBhIDMy
IGJpdCB2YWx1ZSwgYnJhbmNoLgorICAgIC8vIE1heSBhbHNvIGJyYW5jaCBmb3Igc29tZSB2YWx1
ZXMgdGhhdCBhcmUgcmVwcmVzZW50YWJsZSBpbiAzMiBiaXRzCisgICAgLy8gKHNwZWNpZmljYWxs
eSwgaW4gdGhpcyBjYXNlLCBJTlRfTUFYIDB4N2ZmZmZmZmYpLgorICAgIEp1bXAgYnJhbmNoVHJ1
bmNhdGVEb3VibGVUb0ludDMyKEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAg
ICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnRydW5jd2QoZnBUZW1wUmVnaXN0ZXIsIHNyYyk7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLm1mYzEoZGVzdCwgZnBUZW1wUmVnaXN0ZXIpOworICAgICAgICBy
ZXR1cm4gYnJhbmNoMzIoRXF1YWwsIGRlc3QsIEltbTMyKDB4N2ZmZmZmZmYpKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgLy8gSWYgbV9maXhlZFdpZHRoIGlzIHRydWUsIHdlIHdpbGwgZ2VuZXJh
dGUgYSBmaXhlZCBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zLgorICAgIC8vIE90aGVyd2lzZSwgd2Ug
Y2FuIGVtaXQgYW55IG51bWJlciBvZiBpbnN0cnVjdGlvbnMuCisgICAgYm9vbCBtX2ZpeGVkV2lk
dGg7CisKKyAgICBmcmllbmQgY2xhc3MgTGlua0J1ZmZlcjsKKyAgICBmcmllbmQgY2xhc3MgUmVw
YXRjaEJ1ZmZlcjsKKworICAgIHN0YXRpYyB2b2lkIGxpbmtDYWxsKHZvaWQqIGNvZGUsIENhbGwg
Y2FsbCwgRnVuY3Rpb25QdHIgZnVuY3Rpb24pCisgICAgeworICAgICAgICBNSVBTQXNzZW1ibGVy
OjpsaW5rQ2FsbChjb2RlLCBjYWxsLm1fam1wLCBmdW5jdGlvbi52YWx1ZSgpKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsIGNhbGwsIENvZGVM
b2NhdGlvbkxhYmVsIGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAgICAgTUlQU0Fzc2VtYmxlcjo6
cmVsaW5rQ2FsbChjYWxsLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRk
cmVzcygpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRp
b25DYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAgICAgTUlQ
U0Fzc2VtYmxlcjo6cmVsaW5rQ2FsbChjYWxsLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5l
eGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICB9CisKK307CisKK30KKworI2VuZGlmIC8vIEVOQUJM
RShBU1NFTUJMRVIpICYmIENQVShNSVBTKQorCisjZW5kaWYgLy8gTWFjcm9Bc3NlbWJsZXJNSVBT
X2gKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAkocmV2aXNp
b24gNTUxOTUpCisrKyBKYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0MywxMCBAQAogI2luY2x1ZGUgPGUzMnN0ZC5oPgogI2Vu
ZGlmCiAKKyNpZiBDUFUoTUlQUykgJiYgT1MoTElOVVgpCisjaW5jbHVkZSA8c3lzL2NhY2hlY3Rs
Lmg+CisjZW5kaWYKKwogI2lmIE9TKFdJTkNFKQogLy8gRnJvbSBwa2Z1bmNzLmggKHByaXZhdGUg
aGVhZGVyIGZpbGUgZnJvbSB0aGUgUGxhdGZvcm0gQnVpbGRlcikKICNkZWZpbmUgQ0FDSEVfU1lO
Q19BTEwgMHgwN0YKQEAgLTE5MCw2ICsxOTQsMzIgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lk
IGNhY2hlRmx1c2godm9pZCosIHNpemVfdCkKICAgICB7CiAgICAgfQorI2VsaWYgQ1BVKE1JUFMp
CisgICAgc3RhdGljIHZvaWQgY2FjaGVGbHVzaCh2b2lkKiBjb2RlLCBzaXplX3Qgc2l6ZSkKKyAg
ICB7CisjaWYgQ09NUElMRVIoR0NDKSAmJiAoR0NDX1ZFUlNJT04gPj0gNDAzMDApCisjaWYgV1RG
X01JUFNfSVNBX1JFVigyKSAmJiAoR0NDX1ZFUlNJT04gPCA0MDQwMykKKyAgICAgICAgaW50IGxp
bmVTaXplOworICAgICAgICBhc20gKCJyZGh3ciAlMCwgJDEiIDogIj1yIiAobGluZVNpemUpKTsK
KyAgICAgICAgLy8KKyAgICAgICAgLy8gTW9kaWZ5ICJzdGFydCIgYW5kICJlbmQiIHRvIGF2b2lk
IEdDQyA0LjMuMC00LjQuMiBidWcgaW4KKyAgICAgICAgLy8gbWlwc19leHBhbmRfc3luY2lfbG9v
cCB0aGF0IG1heSBleGVjdXRlIHN5bmNpIG9uZSBtb3JlIHRpbWUuCisgICAgICAgIC8vICJzdGFy
dCIgcG9pbnRzIHRvIHRoZSBmaXNydCBieXRlIG9mIHRoZSBjYWNoZSBsaW5lLgorICAgICAgICAv
LyAiZW5kIiBwb2ludHMgdG8gdGhlIGxhc3QgYnl0ZSBvZiB0aGUgbGluZSBiZWZvcmUgdGhlIGxh
c3QgY2FjaGUgbGluZS4KKyAgICAgICAgLy8gQmVjYXVzZSBzaXplIGlzIGFsd2F5cyBhIG11bHRp
cGxlIG9mIDQsIHRoaXMgaXMgc2FmZSB0byBzZXQKKyAgICAgICAgLy8gImVuZCIgdG8gdGhlIGxh
c3QgYnl0ZS4KKyAgICAgICAgLy8KKyAgICAgICAgaW50cHRyX3Qgc3RhcnQgPSByZWludGVycHJl
dF9jYXN0PGludHB0cl90Pihjb2RlKSAmICgtbGluZVNpemUpOworICAgICAgICBpbnRwdHJfdCBl
bmQgPSAoKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGNvZGUpICsgc2l6ZSAtIDEpICYgKC1s
aW5lU2l6ZSkpIC0gMTsKKyAgICAgICAgX19idWlsdGluX19fY2xlYXJfY2FjaGUocmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4oc3RhcnQpLCByZWludGVycHJldF9jYXN0PGNoYXIqPihlbmQpKTsKKyNl
bHNlCisgICAgICAgIGludHB0cl90IGVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGNv
ZGUpICsgc2l6ZTsKKyAgICAgICAgX19idWlsdGluX19fY2xlYXJfY2FjaGUocmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4oY29kZSksIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGVuZCkpOworI2VuZGlm
CisjZWxzZQorICAgICAgICBfZmx1c2hfY2FjaGUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY29k
ZSksIHNpemUsIEJDQUNIRSk7CisjZW5kaWYKKyAgICB9CiAjZWxpZiBDUFUoQVJNX1RIVU1CMikg
JiYgT1MoSVBIT05FX09TKQogICAgIHN0YXRpYyB2b2lkIGNhY2hlRmx1c2godm9pZCogY29kZSwg
c2l6ZV90IHNpemUpCiAgICAgewpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gNTUxOTUpCisrKyBK
YXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTI2OCw2ICsyNjgsMjgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQgZnBS
ZWdUMCA9IEFSTVJlZ2lzdGVyczo6ZDA7CiAgICAgICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVy
SUQgZnBSZWdUMSA9IEFSTVJlZ2lzdGVyczo6ZDE7CiAgICAgICAgIHN0YXRpYyBjb25zdCBGUFJl
Z2lzdGVySUQgZnBSZWdUMiA9IEFSTVJlZ2lzdGVyczo6ZDI7CisjZWxpZiBDUFUoTUlQUykKKyAg
ICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmV0dXJuVmFsdWVSZWdpc3RlciA9IE1JUFNS
ZWdpc3RlcnM6OnYwOworICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBjYWNoZWRSZXN1
bHRSZWdpc3RlciA9IE1JUFNSZWdpc3RlcnM6OnYwOworICAgICAgICBzdGF0aWMgY29uc3QgUmVn
aXN0ZXJJRCBmaXJzdEFyZ3VtZW50UmVnaXN0ZXIgPSBNSVBTUmVnaXN0ZXJzOjphMDsKKworICAg
ICAgICAvLyByZWdUMCBtdXN0IGJlIHYwIGZvciByZXR1cm5pbmcgYSAzMi1iaXQgdmFsdWUuCisg
ICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1QwID0gTUlQU1JlZ2lzdGVyczo6djA7
CisKKyAgICAgICAgLy8gcmVnVDEgbXVzdCBiZSB2MSBmb3IgcmV0dXJuaW5nIGEgcGFpciBvZiAz
Mi1iaXQgdmFsdWUuCisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1QxID0gTUlQ
U1JlZ2lzdGVyczo6djE7CisKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnVDIg
PSBNSVBTUmVnaXN0ZXJzOjp0NDsKKworICAgICAgICAvLyByZWdUMyBtdXN0IGJlIHNhdmVkIGlu
IHRoZSBjYWxsZWUsIHNvIHVzZSBhbiBTIHJlZ2lzdGVyLgorICAgICAgICBzdGF0aWMgY29uc3Qg
UmVnaXN0ZXJJRCByZWdUMyA9IE1JUFNSZWdpc3RlcnM6OnMyOworCisgICAgICAgIHN0YXRpYyBj
b25zdCBSZWdpc3RlcklEIGNhbGxGcmFtZVJlZ2lzdGVyID0gTUlQU1JlZ2lzdGVyczo6czA7Cisg
ICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHRpbWVvdXRDaGVja1JlZ2lzdGVyID0gTUlQ
U1JlZ2lzdGVyczo6czE7CisKKyAgICAgICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBmcFJl
Z1QwID0gTUlQU1JlZ2lzdGVyczo6ZjQ7CisgICAgICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVy
SUQgZnBSZWdUMSA9IE1JUFNSZWdpc3RlcnM6OmY2OworICAgICAgICBzdGF0aWMgY29uc3QgRlBS
ZWdpc3RlcklEIGZwUmVnVDIgPSBNSVBTUmVnaXN0ZXJzOjpmODsKICNlbHNlCiAgICAgI2Vycm9y
ICJKSVQgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtLiIKICNlbmRpZgpAQCAtNjg2LDYg
KzcwOCw0OCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gc2VxdWVuY2VQdXRCeUlkCiAg
ICAgICAgIHN0YXRpYyBjb25zdCBpbnQgc2VxdWVuY2VQdXRCeUlkSW5zdHJ1Y3Rpb25TcGFjZSA9
IDI4OwogICAgICAgICBzdGF0aWMgY29uc3QgaW50IHNlcXVlbmNlUHV0QnlJZENvbnN0YW50U3Bh
Y2UgPSAzOworI2VsaWYgQ1BVKE1JUFMpCisjaWYgV1RGX01JUFNfSVNBKDEpCisgICAgICAgIHN0
YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRQdXRCeUlkU3RydWN0dXJlID0gMTY7CisgICAgICAg
IHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRQdXRCeUlkRXh0ZXJuYWxMb2FkID0gNDg7Cisg
ICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hMZW5ndGhQdXRCeUlkRXh0ZXJuYWxMb2FkID0g
MjA7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRQdXRCeUlkUHJvcGVydHlN
YXBPZmZzZXQgPSA2ODsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5
SWRTdHJ1Y3R1cmUgPSAxNjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdl
dEJ5SWRCcmFuY2hUb1Nsb3dDYXNlID0gNDg7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0
Y2hPZmZzZXRHZXRCeUlkRXh0ZXJuYWxMb2FkID0gNDg7CisgICAgICAgIHN0YXRpYyBjb25zdCBp
bnQgcGF0Y2hMZW5ndGhHZXRCeUlkRXh0ZXJuYWxMb2FkID0gMjA7CisgICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkUHJvcGVydHlNYXBPZmZzZXQgPSA2ODsKKyAgICAg
ICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRQdXRSZXN1bHQgPSA4ODsKKyNp
ZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQorICAgICAgICAjZXJyb3IgIk9QQ09ERV9TQU1QTElO
RyBpcyBub3QgeWV0IHN1cHBvcnRlZCIKKyNlbHNlCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
cGF0Y2hPZmZzZXRHZXRCeUlkU2xvd0Nhc2VDYWxsID0gNDA7CisjZW5kaWYKKyAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBwYXRjaE9mZnNldE9wQ2FsbENvbXBhcmVUb0p1bXAgPSAzMjsKKyAgICAg
ICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhvZENoZWNrUHJvdG9PYmogPSAzMjsK
KyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhvZENoZWNrUHJvdG9TdHJ1
Y3QgPSA1NjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhvZENoZWNr
UHV0RnVuY3Rpb24gPSA4ODsKKyNlbHNlIC8vIFdURl9NSVBTX0lTQSgxKQorICAgICAgICBzdGF0
aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0UHV0QnlJZFN0cnVjdHVyZSA9IDEyOworICAgICAgICBz
dGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0UHV0QnlJZEV4dGVybmFsTG9hZCA9IDQ0OworICAg
ICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoTGVuZ3RoUHV0QnlJZEV4dGVybmFsTG9hZCA9IDE2
OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0UHV0QnlJZFByb3BlcnR5TWFw
T2Zmc2V0ID0gNjA7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlk
U3RydWN0dXJlID0gMTI7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRC
eUlkQnJhbmNoVG9TbG93Q2FzZSA9IDQ0OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNo
T2Zmc2V0R2V0QnlJZEV4dGVybmFsTG9hZCA9IDQ0OworICAgICAgICBzdGF0aWMgY29uc3QgaW50
IHBhdGNoTGVuZ3RoR2V0QnlJZEV4dGVybmFsTG9hZCA9IDE2OworICAgICAgICBzdGF0aWMgY29u
c3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0ID0gNjA7CisgICAgICAg
IHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkUHV0UmVzdWx0ID0gNzY7CisjaWYg
RU5BQkxFKE9QQ09ERV9TQU1QTElORykKKyAgICAgICAgI2Vycm9yICJPUENPREVfU0FNUExJTkcg
aXMgbm90IHlldCBzdXBwb3J0ZWQiCisjZWxzZQorICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBh
dGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbCA9IDQwOworI2VuZGlmCisgICAgICAgIHN0YXRp
YyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRPcENhbGxDb21wYXJlVG9KdW1wID0gMzI7CisgICAgICAg
IHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRNZXRob2RDaGVja1Byb3RvT2JqID0gMzI7Cisg
ICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRNZXRob2RDaGVja1Byb3RvU3RydWN0
ID0gNTI7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRNZXRob2RDaGVja1B1
dEZ1bmN0aW9uID0gODQ7CisjZW5kaWYKICNlbmRpZgogI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJf
NjQpCiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaAkocmV2aXNpb24g
NTUxOTUpCisrKyBKYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNjEsNiArMTYxLDIzIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnJlc3Rv
cmVSZXR1cm5BZGQKICAgICBsb2FkUHRyKGFkZHJlc3MsIGxpbmtSZWdpc3Rlcik7CiB9CiAKKyNl
bGlmIENQVShNSVBTKQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpwcmVzZXJ2ZVJldHVybkFk
ZHJlc3NBZnRlckNhbGwoUmVnaXN0ZXJJRCByZWcpCit7CisgICAgbW92ZShyZXR1cm5BZGRyZXNz
UmVnaXN0ZXIsIHJlZyk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnJlc3RvcmVSZXR1
cm5BZGRyZXNzQmVmb3JlUmV0dXJuKFJlZ2lzdGVySUQgcmVnKQoreworICAgIG1vdmUocmVnLCBy
ZXR1cm5BZGRyZXNzUmVnaXN0ZXIpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpyZXN0
b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihBZGRyZXNzIGFkZHJlc3MpCit7CisgICAgbG9h
ZFB0cihhZGRyZXNzLCByZXR1cm5BZGRyZXNzUmVnaXN0ZXIpOworfQorCiAjZWxzZSAvLyBDUFUo
WDg2KSB8fCBDUFUoWDg2XzY0KQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpwcmVzZXJ2ZVJl
dHVybkFkZHJlc3NBZnRlckNhbGwoUmVnaXN0ZXJJRCByZWcpCkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMuY3BwCShyZXZpc2lvbiA1NTE5NSkKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc4MCw2ICsxNzgwLDU2IEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG8KIAogICAgIGFkZFB0cihJbW0zMihzaXpl
b2YoQXJnTGlzdCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKKyNlbGlmIENQVShNSVBTKQor
ICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyMzIoUmVnaXN0ZXJGaWxlOjpBcmd1bWVudENv
dW50LCByZWdUMCk7CisKKyAgICAvLyBBbGxvY2F0ZSBzdGFjayBzcGFjZSBmb3Igb3VyIGFyZ2xp
c3QKKyAgICBDT01QSUxFX0FTU0VSVCgoc2l6ZW9mKEFyZ0xpc3QpICYgMHg3KSA9PSAwLCBBcmdM
aXN0X3Nob3VsZF9ieV84Ynl0ZV9hbGlnbmVkKTsKKyAgICBzdWJQdHIoSW1tMzIoc2l6ZW9mKEFy
Z0xpc3QpICsgMjQpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKKyAgICAvLyBTZXQgdXAgYXJn
dW1lbnRzCisgICAgc3ViUHRyKEltbTMyKDEpLCByZWdUMCk7IC8vIERvbid0IGluY2x1ZGUgJ3Ro
aXMnIGluIGFyZ2NvdW50CisKKyAgICAvLyBQdXNoIGFyZ2NvdW50IHRvIDI0ICsgb2Zmc2V0KCRz
cCkKKyAgICBzdG9yZVB0cihyZWdUMCwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgMjQg
KyBPQkpFQ1RfT0ZGU0VUT0YoQXJnTGlzdCwgbV9hcmdDb3VudCkpKTsKKworICAgIC8vIENhbGN1
bGF0ZSB0aGUgc3RhcnQgb2YgdGhlIGNhbGxmcmFtZSBoZWFkZXIsIGFuZCBzdG9yZSBpbiByZWdU
MQorICAgIG1vdmUoY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QxKTsKKyAgICBzdWIzMihJbW0zMihS
ZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUgKiAoaW50MzJfdClzaXplb2YoUmVnaXN0
ZXIpKSwgcmVnVDEpOworCisgICAgLy8gQ2FsY3VsYXRlIHN0YXJ0IG9mIGFyZ3VtZW50cyBhcyBj
YWxsZnJhbWUgaGVhZGVyIC0gc2l6ZW9mKFJlZ2lzdGVyKSAqIGFyZ2NvdW50IChyZWdUMSkKKyAg
ICBtdWwzMihJbW0zMihzaXplb2YoUmVnaXN0ZXIpKSwgcmVnVDAsIHJlZ1QwKTsKKyAgICBzdWJQ
dHIocmVnVDAsIHJlZ1QxKTsKKworICAgIC8vIHB1c2ggcG9pbnRlciB0byBhcmd1bWVudHMgdG8g
MjQgKyBvZmZzZXQoJHNwKQorICAgIHN0b3JlUHRyKHJlZ1QxLCBBZGRyZXNzKHN0YWNrUG9pbnRl
clJlZ2lzdGVyLCAyNCArIE9CSkVDVF9PRkZTRVRPRihBcmdMaXN0LCBtX2FyZ3MpKSk7CisKKyAg
ICAvLyBTZXR1cCBhcmczOiByZWdUMSBjdXJyZW50bHkgcG9pbnRzIHRvIHRoZSBmaXJzdCBhcmd1
bWVudCwgcmVnVDEtc2l6ZW9mKFJlZ2lzdGVyKSBwb2ludHMgdG8gJ3RoaXMnCisgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QxLCAtKGludDMyX3Qpc2l6ZW9mKFJlZ2lzdGVyKSksIE1JUFNSZWdpc3Rl
cnM6OmEzKTsKKworICAgIC8vIFNldHVwIGFyZzI6CisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVI
ZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpDYWxsZWUsIE1JUFNSZWdpc3RlcnM6OmEyKTsKKworICAg
IC8vIFNldHVwIGFyZzE6CisgICAgbW92ZShjYWxsRnJhbWVSZWdpc3RlciwgTUlQU1JlZ2lzdGVy
czo6YTEpOworCisgICAgLy8gU2V0dXAgYXJnNDogQXJnTGlzdCBpcyBwYXNzZWQgYnkgcmVmZXJl
bmNlLiAgQXQgMTYoJHNwKSwgc3RvcmUgKCRzcCArIDI0KQorICAgIGFkZFB0cihJbW0zMigyNCks
IHN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZWdUMik7CisgICAgc3RvcmVQdHIocmVnVDIsIEFkZHJl
c3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIDE2KSk7CisKKyAgICAvLyBTZXR1cCBhcmcwIGFzIDIw
KCRzcCkgdG8gaG9sZCB0aGUgcmV0dXJuZWQgc3RydWN0dXJlLgorICAgIEFTU0VSVChzaXplb2Yo
SlNWYWx1ZSkgPT0gNCk7CisgICAgYWRkUHRyKEltbTMyKDIwKSwgc3RhY2tQb2ludGVyUmVnaXN0
ZXIsIE1JUFNSZWdpc3RlcnM6OmEwKTsKKworICAgIC8vIENhbGwKKyAgICBjYWxsKEFkZHJlc3Mo
TUlQU1JlZ2lzdGVyczo6YTIsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2RhdGEpKSk7
CisKKyAgICAvLyBHZXQgcmV0dXJuZWQgdmFsdWUgZnJvbSAwKCR2MCkgd2hpY2ggaXMgdGhlIHNh
bWUgYXMgMjAoJHNwKQorICAgIGxvYWRQdHIoQWRkcmVzcyhyZXR1cm5WYWx1ZVJlZ2lzdGVyLCAw
KSwgcmV0dXJuVmFsdWVSZWdpc3Rlcik7CisKKyAgICAvLyBSZXN0b3JlIHN0YWNrIHNwYWNlCisg
ICAgYWRkUHRyKEltbTMyKHNpemVvZihBcmdMaXN0KSArIDI0KSwgc3RhY2tQb2ludGVyUmVnaXN0
ZXIpOworCiAjZWxpZiBFTkFCTEUoSklUX09QVElNSVpFX05BVElWRV9DQUxMKQogI2Vycm9yICJK
SVRfT1BUSU1JWkVfTkFUSVZFX0NBTEwgbm90IHlldCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9y
bS4iCiAjZWxzZQpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiA1NTE5NSkK
KysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0
Miw2ICs2NDIsMTAyIEBAIFNZTUJPTF9TVFJJTkcoY3RpT3BUaHJvd05vdENhdWdodCkgIjoiICIK
ICAgICAibW92IHBjLCBsciIgIlxuIgogKTsKIAorI2VsaWYgQ1BVKE1JUFMpCisKKyNpZiBVU0Uo
SklUX1NUVUJfQVJHVU1FTlRfVkFfTElTVCkKKyNlcnJvciAiSklUX1NUVUJfQVJHVU1FTlRfVkFf
TElTVCBub3Qgc3VwcG9ydGVkIG9uIE1JUFMuIgorI2VuZGlmCisKK2FzbSB2b2xhdGlsZSAoCisi
LnRleHQiICJcbiIKKyIuYWxpZ24gMiIgIlxuIgorIi5zZXQgbm9yZW9yZGVyIiAiXG4iCisiLnNl
dCBub21hY3JvIiAiXG4iCisiLnNldCBub21pcHMxNiIgIlxuIgorIi5nbG9ibCAiIFNZTUJPTF9T
VFJJTkcoY3RpVHJhbXBvbGluZSkgIlxuIgorIi5lbnQgIiBTWU1CT0xfU1RSSU5HKGN0aVRyYW1w
b2xpbmUpICJcbiIKK1NZTUJPTF9TVFJJTkcoY3RpVHJhbXBvbGluZSkgIjoiICJcbiIKKyAgICAi
YWRkaXUgJDI5LCQyOSwtNzIiICJcbiIKKyAgICAic3cgICAgJDMxLDQ0KCQyOSkiICJcbiIKKyAg
ICAic3cgICAgJDE4LDQwKCQyOSkiICJcbiIKKyAgICAic3cgICAgJDE3LDM2KCQyOSkiICJcbiIK
KyAgICAic3cgICAgJDE2LDMyKCQyOSkiICJcbiIKKyNpZiBXVEZfTUlQU19QSUMKKyAgICAic3cg
ICAgJDI4LDI4KCQyOSkiICJcbiIKKyNlbmRpZgorICAgICJtb3ZlICAkMTYsJDYgICAgICAgIyBz
ZXQgY2FsbEZyYW1lUmVnaXN0ZXIiICJcbiIKKyAgICAibGkgICAgJDE3LDUxMiAgICAgICMgc2V0
IHRpbWVvdXRDaGVja1JlZ2lzdGVyIiAiXG4iCisgICAgIm1vdmUgICQyNSwkNCAgICAgICAjIG1v
dmUgZXhlY3V0YWJsZUFkZHJlc3MgdG8gdDkiICJcbiIKKyAgICAic3cgICAgJDUsNTIoJDI5KSAg
ICMgc3RvcmUgcmVnaXN0ZXJGaWxlIHRvIGN1cnJlbnQgc3RhY2siICJcbiIKKyAgICAic3cgICAg
JDYsNTYoJDI5KSAgICMgc3RvcmUgY2FsbEZyYW1lIHRvIGN1cmVudCBzdGFjayIgIlxuIgorICAg
ICJzdyAgICAkNyw2MCgkMjkpICAgIyBzdG9yZSBleGNlcHRpb24gdG8gY3VycmVudCBzdGFjayIg
IlxuIgorICAgICJsdyAgICAkOCw4OCgkMjkpICAgIyBsb2FkIGVuYWJsZVByb2ZpbGVyUmVmZXJl
bmNlIGZyb20gcHJldmlvdXMgc3RhY2siICJcbiIKKyAgICAibHcgICAgJDksOTIoJDI5KSAgICMg
bG9hZCBnbG9iYWxEYXRhIGZyb20gcHJldmlvdXMgc3RhY2siICJcbiIKKyAgICAic3cgICAgJDgs
NjQoJDI5KSAgICMgc3RvcmUgZW5hYmxlUHJvZmlsZXJSZWZlcmVuY2UgdG8gY3VycmVudCBzdGFj
ayIgIlxuIgorICAgICJqYWxyICAkMjUiICJcbiIKKyAgICAic3cgICAgJDksNjgoJDI5KSAgICMg
c3RvcmUgZ2xvYmFsRGF0YSB0byBjdXJyZW50IHN0YWNrIiAiXG4iCisgICAgImx3ICAgICQxNiwz
MigkMjkpIiAiXG4iCisgICAgImx3ICAgICQxNywzNigkMjkpIiAiXG4iCisgICAgImx3ICAgICQx
OCw0MCgkMjkpIiAiXG4iCisgICAgImx3ICAgICQzMSw0NCgkMjkpIiAiXG4iCisgICAgImpyICAg
ICQzMSIgIlxuIgorICAgICJhZGRpdSAkMjksJDI5LDcyIiAiXG4iCisiLnNldCByZW9yZGVyIiAi
XG4iCisiLnNldCBtYWNybyIgIlxuIgorIi5lbmQgIiBTWU1CT0xfU1RSSU5HKGN0aVRyYW1wb2xp
bmUpICJcbiIKKyk7CisKK2FzbSB2b2xhdGlsZSAoCisiLnRleHQiICJcbiIKKyIuYWxpZ24gMiIg
IlxuIgorIi5zZXQgbm9yZW9yZGVyIiAiXG4iCisiLnNldCBub21hY3JvIiAiXG4iCisiLnNldCBu
b21pcHMxNiIgIlxuIgorIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoY3RpVk1UaHJvd1RyYW1wb2xp
bmUpICJcbiIKKyIuZW50ICIgU1lNQk9MX1NUUklORyhjdGlWTVRocm93VHJhbXBvbGluZSkgIlxu
IgorU1lNQk9MX1NUUklORyhjdGlWTVRocm93VHJhbXBvbGluZSkgIjoiICJcbiIKKyNpZiBXVEZf
TUlQU19QSUMKKyAgICAibHcgICAgJDI4LDI4KCQyOSkiICJcbiIKKyIuc2V0IG1hY3JvIiAiXG4i
CisgICAgImxhICAgICQyNSwiIFNZTUJPTF9TVFJJTkcoY3RpX3ZtX3Rocm93KSAiXG4iCisiLnNl
dCBub21hY3JvIiAiXG4iCisgICAgImJhbCAiIFNZTUJPTF9TVFJJTkcoY3RpX3ZtX3Rocm93KSAi
XG4iCisgICAgIm1vdmUgICQ0LCQyOSIgIlxuIgorI2Vsc2UKKyAgICAiamFsICIgU1lNQk9MX1NU
UklORyhjdGlfdm1fdGhyb3cpICJcbiIKKyAgICAibW92ZSAgJDQsJDI5IiAiXG4iCisjZW5kaWYK
KyAgICAibHcgICAgJDE2LDMyKCQyOSkiICJcbiIKKyAgICAibHcgICAgJDE3LDM2KCQyOSkiICJc
biIKKyAgICAibHcgICAgJDE4LDQwKCQyOSkiICJcbiIKKyAgICAibHcgICAgJDMxLDQ0KCQyOSki
ICJcbiIKKyAgICAianIgICAgJDMxIiAiXG4iCisgICAgImFkZGl1ICQyOSwkMjksNzIiICJcbiIK
KyIuc2V0IHJlb3JkZXIiICJcbiIKKyIuc2V0IG1hY3JvIiAiXG4iCisiLmVuZCAiIFNZTUJPTF9T
VFJJTkcoY3RpVk1UaHJvd1RyYW1wb2xpbmUpICJcbiIKKyk7CisKK2FzbSB2b2xhdGlsZSAoCisi
LnRleHQiICJcbiIKKyIuYWxpZ24gMiIgIlxuIgorIi5zZXQgbm9yZW9yZGVyIiAiXG4iCisiLnNl
dCBub21hY3JvIiAiXG4iCisiLnNldCBub21pcHMxNiIgIlxuIgorIi5nbG9ibCAiIFNZTUJPTF9T
VFJJTkcoY3RpT3BUaHJvd05vdENhdWdodCkgIlxuIgorIi5lbnQgIiBTWU1CT0xfU1RSSU5HKGN0
aU9wVGhyb3dOb3RDYXVnaHQpICJcbiIKK1NZTUJPTF9TVFJJTkcoY3RpT3BUaHJvd05vdENhdWdo
dCkgIjoiICJcbiIKKyAgICAibHcgICAgJDE2LDMyKCQyOSkiICJcbiIKKyAgICAibHcgICAgJDE3
LDM2KCQyOSkiICJcbiIKKyAgICAibHcgICAgJDE4LDQwKCQyOSkiICJcbiIKKyAgICAibHcgICAg
JDMxLDQ0KCQyOSkiICJcbiIKKyAgICAianIgICAgJDMxIiAiXG4iCisgICAgImFkZGl1ICQyOSwk
MjksNzIiICJcbiIKKyIuc2V0IHJlb3JkZXIiICJcbiIKKyIuc2V0IG1hY3JvIiAiXG4iCisiLmVu
ZCAiIFNZTUJPTF9TVFJJTkcoY3RpT3BUaHJvd05vdENhdWdodCkgIlxuIgorKTsKKwogI2VsaWYg
Q09NUElMRVIoUlZDVCkgJiYgQ1BVKEFSTV9UUkFESVRJT05BTCkKIAogX19hc20gRW5jb2RlZEpT
VmFsdWUgY3RpVHJhbXBvbGluZSh2b2lkKiwgUmVnaXN0ZXJGaWxlKiwgQ2FsbEZyYW1lKiwgSlNW
YWx1ZSosIFByb2ZpbGVyKiosIEpTR2xvYmFsRGF0YSopCkBAIC03NzcsNiArODczLDIxIEBAIEpJ
VFRodW5rczo6SklUVGh1bmtzKEpTR2xvYmFsRGF0YSogZ2xvYmEKIAogICAgIEFTU0VSVChPQkpF
Q1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIHRodW5rUmV0dXJuQWRkcmVzcykgPT0g
MHgxQyk7CiAjZW5kaWYKKworI2lmIENQVShNSVBTKQorICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VU
T0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIHByZXNlcnZlZEdQKSA9PSAyOCk7CisgICAgQVNTRVJU
KE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgcHJlc2VydmVkUzApID09IDMy
KTsKKyAgICBBU1NFUlQoT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBwcmVz
ZXJ2ZWRTMSkgPT0gMzYpOworICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0
YWNrRnJhbWUsIHByZXNlcnZlZFMyKSA9PSA0MCk7CisgICAgQVNTRVJUKE9CSkVDVF9PRkZTRVRP
RihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgcHJlc2VydmVkUmV0dXJuQWRkcmVzcykgPT0gNDQpOwor
ICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIHRodW5rUmV0
dXJuQWRkcmVzcykgPT0gNDgpOworICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJ
VFN0YWNrRnJhbWUsIHJlZ2lzdGVyRmlsZSkgPT0gNTIpOworICAgIEFTU0VSVChPQkpFQ1RfT0ZG
U0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIGNhbGxGcmFtZSkgPT0gNTYpOworICAgIEFTU0VS
VChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIGV4Y2VwdGlvbikgPT0gNjAp
OworICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIGVuYWJs
ZWRQcm9maWxlclJlZmVyZW5jZSkgPT0gNjQpOworICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yo
c3RydWN0IEpJVFN0YWNrRnJhbWUsIGdsb2JhbERhdGEpID09IDY4KTsKKworI2VuZGlmCiB9CiAK
ICNpZiBFTkFCTEUoSklUX09QVElNSVpFX1BST1BFUlRZX0FDQ0VTUykKQEAgLTEwMzQsNiArMTE0
NSw2NSBAQCBzdGF0aWMgTkVWRVJfSU5MSU5FIHZvaWQgdGhyb3dTdGFja092ZXJmCiAgICAgICAg
ICk7IFwKICAgICBydHlwZSBKSVRTdHViVGh1bmtlZF8jI29wKFNUVUJfQVJHU19ERUNMQVJBVElP
TikgXAogCisjZWxpZiBDUFUoTUlQUykKKyNpZiBXVEZfTUlQU19QSUMKKyNkZWZpbmUgREVGSU5F
X1NUVUJfRlVOQ1RJT04ocnR5cGUsIG9wKSBcCisgICAgZXh0ZXJuICJDIiB7IFwKKyAgICAgICAg
cnR5cGUgSklUU3R1YlRodW5rZWRfIyNvcChTVFVCX0FSR1NfREVDTEFSQVRJT04pOyBcCisgICAg
fTsgXAorICAgIGFzbSB2b2xhdGlsZSAoIFwKKyAgICAgICAgIi50ZXh0IiAiXG4iIFwKKyAgICAg
ICAgIi5hbGlnbiAyIiAiXG4iIFwKKyAgICAgICAgIi5zZXQgbm9yZW9yZGVyIiAiXG4iIFwKKyAg
ICAgICAgIi5zZXQgbm9tYWNybyIgIlxuIiBcCisgICAgICAgICIuc2V0IG5vbWlwczE2IiAiXG4i
IFwKKyAgICAgICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoY3RpXyMjb3ApICJcbiIgXAorICAg
ICAgICAiLmVudCAiIFNZTUJPTF9TVFJJTkcoY3RpXyMjb3ApICJcbiIgXAorICAgICAgICBTWU1C
T0xfU1RSSU5HKGN0aV8jI29wKSAiOiIgIlxuIiBcCisgICAgICAgICJsdyAgICAkMjgsMjgoJDI5
KSIgIlxuIiBcCisgICAgICAgICJzdyAgICAkMzEsNDgoJDI5KSIgIlxuIiBcCisgICAgICAgICIu
c2V0IG1hY3JvIiAiXG4iIFwKKyAgICAgICAgImxhICAgICQyNSwiIFNZTUJPTF9TVFJJTkcoSklU
U3R1YlRodW5rZWRfIyNvcCkgIlxuIiBcCisgICAgICAgICIuc2V0IG5vbWFjcm8iICJcbiIgXAor
ICAgICAgICAiYmFsICIgU1lNQk9MX1NUUklORyhKSVRTdHViVGh1bmtlZF8jI29wKSAiXG4iIFwK
KyAgICAgICAgIm5vcCIgIlxuIiBcCisgICAgICAgICJsdyAgICAkMzEsNDgoJDI5KSIgIlxuIiBc
CisgICAgICAgICJqciAgICAkMzEiICJcbiIgXAorICAgICAgICAibm9wIiAiXG4iIFwKKyAgICAg
ICAgIi5zZXQgcmVvcmRlciIgIlxuIiBcCisgICAgICAgICIuc2V0IG1hY3JvIiAiXG4iIFwKKyAg
ICAgICAgIi5lbmQgIiBTWU1CT0xfU1RSSU5HKGN0aV8jI29wKSAiXG4iIFwKKyAgICAgICAgKTsg
XAorICAgIHJ0eXBlIEpJVFN0dWJUaHVua2VkXyMjb3AoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKQor
CisjZWxzZSAvLyBXVEZfTUlQU19QSUMKKyNkZWZpbmUgREVGSU5FX1NUVUJfRlVOQ1RJT04ocnR5
cGUsIG9wKSBcCisgICAgZXh0ZXJuICJDIiB7IFwKKyAgICAgICAgcnR5cGUgSklUU3R1YlRodW5r
ZWRfIyNvcChTVFVCX0FSR1NfREVDTEFSQVRJT04pOyBcCisgICAgfTsgXAorICAgIGFzbSB2b2xh
dGlsZSAoIFwKKyAgICAgICAgIi50ZXh0IiAiXG4iIFwKKyAgICAgICAgIi5hbGlnbiAyIiAiXG4i
IFwKKyAgICAgICAgIi5zZXQgbm9yZW9yZGVyIiAiXG4iIFwKKyAgICAgICAgIi5zZXQgbm9tYWNy
byIgIlxuIiBcCisgICAgICAgICIuc2V0IG5vbWlwczE2IiAiXG4iIFwKKyAgICAgICAgIi5nbG9i
bCAiIFNZTUJPTF9TVFJJTkcoY3RpXyMjb3ApICJcbiIgXAorICAgICAgICAiLmVudCAiIFNZTUJP
TF9TVFJJTkcoY3RpXyMjb3ApICJcbiIgXAorICAgICAgICBTWU1CT0xfU1RSSU5HKGN0aV8jI29w
KSAiOiIgIlxuIiBcCisgICAgICAgICJzdyAgICAkMzEsNDgoJDI5KSIgIlxuIiBcCisgICAgICAg
ICJqYWwgIiBTWU1CT0xfU1RSSU5HKEpJVFN0dWJUaHVua2VkXyMjb3ApICJcbiIgXAorICAgICAg
ICAibm9wIiAiXG4iIFwKKyAgICAgICAgImx3ICAgICQzMSw0OCgkMjkpIiAiXG4iIFwKKyAgICAg
ICAgImpyICAgICQzMSIgIlxuIiBcCisgICAgICAgICJub3AiICJcbiIgXAorICAgICAgICAiLnNl
dCByZW9yZGVyIiAiXG4iIFwKKyAgICAgICAgIi5zZXQgbWFjcm8iICJcbiIgXAorICAgICAgICAi
LmVuZCAiIFNZTUJPTF9TVFJJTkcoY3RpXyMjb3ApICJcbiIgXAorICAgICAgICApOyBcCisgICAg
cnR5cGUgSklUU3R1YlRodW5rZWRfIyNvcChTVFVCX0FSR1NfREVDTEFSQVRJT04pCisKKyNlbmRp
ZgorCiAjZWxpZiBDUFUoQVJNX1RSQURJVElPTkFMKSAmJiBDT01QSUxFUihHQ0MpCiAKICNpZiBV
U0UoSlNWQUxVRTMyXzY0KQpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgJKHJldmlzaW9uIDU1MTk1
KQorKysgSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5
MSw2ICsxOTEsMzAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIFdoZW4gSklUIGNvZGUg
bWFrZXMgYSBjYWxsLCBpdCBwdXNoZXMgaXRzIHJldHVybiBhZGRyZXNzIGp1c3QgYmVsb3cgdGhl
IHJlc3Qgb2YgdGhlIHN0YWNrLgogICAgICAgICBSZXR1cm5BZGRyZXNzUHRyKiByZXR1cm5BZGRy
ZXNzU2xvdCgpIHsgcmV0dXJuICZ0aHVua1JldHVybkFkZHJlc3M7IH0KICAgICB9OworI2VsaWYg
Q1BVKE1JUFMpCisgICAgc3RydWN0IEpJVFN0YWNrRnJhbWUgeworICAgICAgICB2b2lkKiByZXNl
cnZlZDsgLy8gVW51c2VkCisgICAgICAgIEpJVFN0dWJBcmcgYXJnc1s2XTsKKworICAgICAgICB2
b2lkKiBwcmVzZXJ2ZWRHUDsgLy8gc3RvcmUgR1Agd2hlbiB1c2luZyBQSUMgY29kZQorICAgICAg
ICB2b2lkKiBwcmVzZXJ2ZWRTMDsKKyAgICAgICAgdm9pZCogcHJlc2VydmVkUzE7CisgICAgICAg
IHZvaWQqIHByZXNlcnZlZFMyOworICAgICAgICB2b2lkKiBwcmVzZXJ2ZWRSZXR1cm5BZGRyZXNz
OworCisgICAgICAgIFJldHVybkFkZHJlc3NQdHIgdGh1bmtSZXR1cm5BZGRyZXNzOworCisgICAg
ICAgIC8vIFRoZXNlIGFyZ3VtZW50cyBwYXNzZWQgaW4gYTEuLmEzIChhMCBjb250YWluZWQgdGhl
IGVudHJ5IGNvZGUgcG9pbnRlZCwgd2hpY2ggaXMgbm90IHByZXNlcnZlZCkKKyAgICAgICAgUmVn
aXN0ZXJGaWxlKiByZWdpc3RlckZpbGU7CisgICAgICAgIENhbGxGcmFtZSogY2FsbEZyYW1lOwor
ICAgICAgICBKU1ZhbHVlKiBleGNlcHRpb247CisKKyAgICAgICAgLy8gVGhlc2UgYXJndW1lbnRz
IHBhc3NlZCBvbiB0aGUgc3RhY2suCisgICAgICAgIFByb2ZpbGVyKiogZW5hYmxlZFByb2ZpbGVy
UmVmZXJlbmNlOworICAgICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGE7CisKKyAgICAgICAg
UmV0dXJuQWRkcmVzc1B0ciogcmV0dXJuQWRkcmVzc1Nsb3QoKSB7IHJldHVybiAmdGh1bmtSZXR1
cm5BZGRyZXNzOyB9CisgICAgfTsKICNlbHNlCiAjZXJyb3IgIkpJVFN0YWNrRnJhbWUgbm90IGRl
ZmluZWQgZm9yIHRoaXMgcGxhdGZvcm0uIgogI2VuZGlmCkluZGV4OiBKYXZhU2NyaXB0Q29yZS93
dGYvUGxhdGZvcm0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0u
aAkocmV2aXNpb24gNTUxOTUpCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAkod29y
a2luZyBjb3B5KQpAQCAtMTA0LDYgKzEwNCwyMiBAQAogI2RlZmluZSBXVEZfQ1BVX0lBNjQgMQog
I2VuZGlmCiAKKy8qIENQVShNSVBTKSAtIE1JUFMgMzItYml0ICovCisvKiBOb3RlOiBPbmx5IE8z
MiBBQkkgaXMgdGVzdGVkLCBzbyB3ZSBlbmFibGUgaXQgZm9yIE8zMiBBQkkgZm9yIG5vdy4gICov
CisjaWYgICAoZGVmaW5lZChtaXBzKSB8fCBkZWZpbmVkKF9fbWlwc19fKSkgJiYgZGVmaW5lZChf
QUJJTzMyKQorI2RlZmluZSBXVEZfQ1BVX01JUFMgMQorI2lmIGRlZmluZWQoX19NSVBTRUJfXykK
KyNkZWZpbmUgV1RGX0NQVV9CSUdfRU5ESUFOIDEKKyNlbmRpZgorI2RlZmluZSBXVEZfTUlQU19Q
SUMgKGRlZmluZWQgX19QSUNfXykKKyNkZWZpbmUgV1RGX01JUFNfQVJDSCBfX21pcHMKKyNkZWZp
bmUgV1RGX01JUFNfSVNBKHYpIChkZWZpbmVkIFdURl9NSVBTX0FSQ0ggJiYgV1RGX01JUFNfQVJD
SCA9PSB2KQorI2RlZmluZSBXVEZfTUlQU19JU0FfQVRfTEVBU1QodikgKGRlZmluZWQgV1RGX01J
UFNfQVJDSCAmJiBXVEZfTUlQU19BUkNIID49IHYpCisjZGVmaW5lIFdURl9NSVBTX0FSQ0hfUkVW
IF9fbWlwc19pc2FfcmV2CisjZGVmaW5lIFdURl9NSVBTX0lTQV9SRVYodikgKGRlZmluZWQgV1RG
X01JUFNfQVJDSF9SRVYgJiYgV1RGX01JUFNfQVJDSF9SRVYgPT0gdikKKyNkZWZpbmUgV1RGX01J
UFNfRE9VQkxFX0ZMT0FUIChkZWZpbmVkIF9fbWlwc19oYXJkX2Zsb2F0ICYmICFkZWZpbmVkIF9f
bWlwc19zaW5nbGVfZmxvYXQpCisjZW5kaWYgLyogTUlQUyAqLworCiAvKiBDUFUoUFBDKSAtIFBv
d2VyUEMgMzItYml0ICovCiAjaWYgICBkZWZpbmVkKF9fcHBjX18pICAgICBcCiAgICAgfHwgZGVm
aW5lZChfX1BQQ19fKSAgICAgXApAQCAtODMwLDcgKzg0Niw3IEBACiAjaWYgIWRlZmluZWQoV1RG
X1VTRV9KU1ZBTFVFNjQpICYmICFkZWZpbmVkKFdURl9VU0VfSlNWQUxVRTMyKSAmJiAhZGVmaW5l
ZChXVEZfVVNFX0pTVkFMVUUzMl82NCkKICNpZiAoQ1BVKFg4Nl82NCkgJiYgKE9TKFVOSVgpIHx8
IE9TKFdJTkRPV1MpKSkgfHwgQ1BVKElBNjQpIHx8IENQVShBTFBIQSkKICNkZWZpbmUgV1RGX1VT
RV9KU1ZBTFVFNjQgMQotI2VsaWYgQ1BVKEFSTSkgfHwgQ1BVKFBQQzY0KQorI2VsaWYgQ1BVKEFS
TSkgfHwgQ1BVKFBQQzY0KSB8fCBDUFUoTUlQUykKICNkZWZpbmUgV1RGX1VTRV9KU1ZBTFVFMzIg
MQogI2VsaWYgT1MoV0lORE9XUykgJiYgQ09NUElMRVIoTUlOR1cpCiAvKiBVc2luZyBKU1ZBTFVF
MzJfNjQgY2F1c2VzIHBhZGRpbmcvYWxpZ25lbWVudCBpc3N1ZXMgZm9yIEpJVFN0dWJBcmcKQEAg
LTg4Myw2ICs4OTksOSBAQCBvbiBNaW5HVy4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
CiAgICAgI2RlZmluZSBFTkFCTEVfSklUIDEKICNlbGlmIENQVShBUk1fVFJBRElUSU9OQUwpICYm
IE9TKExJTlVYKQogICAgICNkZWZpbmUgRU5BQkxFX0pJVCAxCisjZWxpZiBDUFUoTUlQUykgJiYg
T1MoTElOVVgpCisgICAgI2RlZmluZSBFTkFCTEVfSklUIDEKKyAgICAjZGVmaW5lIFdURl9VU0Vf
SklUX1NUVUJfQVJHVU1FTlRfVkFfTElTVCAwCiAjZW5kaWYKICNlbmRpZiAvKiBQTEFURk9STShR
VCkgKi8KIApAQCAtOTUwLDcgKzk2OSw4IEBAIG9uIE1pbkdXLiBTZWUgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2gKICAgICB8fCAoQ1BVKFg4NikgJiYgT1MoV0lORE9XUykgJiYgQ09NUElMRVIo
TVNWQykpIFwKICAgICB8fCAoQ1BVKFg4NikgJiYgT1MoTElOVVgpICYmIEdDQ19WRVJTSU9OID49
IDQwMTAwKSBcCiAgICAgfHwgKENQVShYODZfNjQpICYmIE9TKExJTlVYKSAmJiBHQ0NfVkVSU0lP
TiA+PSA0MDEwMCkgXAotICAgIHx8IChDUFUoQVJNX1RSQURJVElPTkFMKSAmJiBPUyhMSU5VWCkp
CisgICAgfHwgKENQVShBUk1fVFJBRElUSU9OQUwpICYmIE9TKExJTlVYKSkgXAorICAgIHx8IChD
UFUoTUlQUykgJiYgT1MoTElOVVgpKQogI2RlZmluZSBFTkFCTEVfWUFSUiAxCiAjZGVmaW5lIEVO
QUJMRV9ZQVJSX0pJVCAxCiAjZW5kaWYKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhK
SVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhKSVQuY3BwCShy
ZXZpc2lvbiA1NTE5NSkKKysrIEphdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhKSVQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NCw2ICs1NCwxNiBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZh
dGUgTWFjcm9Bc3NlCiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnVDEgPSBBUk1SZWdp
c3RlcnM6OnI2OwogCiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmV0dXJuUmVnaXN0ZXIg
PSBBUk1SZWdpc3RlcnM6OnIwOworI2VsaWYgQ1BVKE1JUFMpCisgICAgc3RhdGljIGNvbnN0IFJl
Z2lzdGVySUQgaW5wdXQgPSBNSVBTUmVnaXN0ZXJzOjphMDsKKyAgICBzdGF0aWMgY29uc3QgUmVn
aXN0ZXJJRCBpbmRleCA9IE1JUFNSZWdpc3RlcnM6OmExOworICAgIHN0YXRpYyBjb25zdCBSZWdp
c3RlcklEIGxlbmd0aCA9IE1JUFNSZWdpc3RlcnM6OmEyOworICAgIHN0YXRpYyBjb25zdCBSZWdp
c3RlcklEIG91dHB1dCA9IE1JUFNSZWdpc3RlcnM6OmEzOworCisgICAgc3RhdGljIGNvbnN0IFJl
Z2lzdGVySUQgcmVnVDAgPSBNSVBTUmVnaXN0ZXJzOjp0NDsKKyAgICBzdGF0aWMgY29uc3QgUmVn
aXN0ZXJJRCByZWdUMSA9IE1JUFNSZWdpc3RlcnM6OnQ1OworCisgICAgc3RhdGljIGNvbnN0IFJl
Z2lzdGVySUQgcmV0dXJuUmVnaXN0ZXIgPSBNSVBTUmVnaXN0ZXJzOjp2MDsKICNlbGlmIENQVShY
ODYpCiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgaW5wdXQgPSBYODZSZWdpc3RlcnM6OmVh
eDsKICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBpbmRleCA9IFg4NlJlZ2lzdGVyczo6ZWR4
OwpAQCAtMTMxMyw2ICsxMzIzLDggQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1h
Y3JvQXNzZQogICAgICAgICBwdXNoKEFSTVJlZ2lzdGVyczo6cjUpOwogICAgICAgICBwdXNoKEFS
TVJlZ2lzdGVyczo6cjYpOwogICAgICAgICBtb3ZlKEFSTVJlZ2lzdGVyczo6cjMsIG91dHB1dCk7
CisjZWxpZiBDUFUoTUlQUykKKyAgICAgICAgLy8gRG8gbm90aGluZy4KICNlbmRpZgogICAgIH0K
IApAQCAtMTMzMCw2ICsxMzQyLDggQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1h
Y3JvQXNzZQogICAgICAgICBwb3AoQVJNUmVnaXN0ZXJzOjpyNik7CiAgICAgICAgIHBvcChBUk1S
ZWdpc3RlcnM6OnI1KTsKICAgICAgICAgcG9wKEFSTVJlZ2lzdGVyczo6cjQpOworI2VsaWYgQ1BV
KE1JUFMpCisgICAgICAgIC8vIERvIG5vdGhpbmcKICNlbmRpZgogICAgICAgICByZXQoKTsKICAg
ICB9Cg==
</data>
<flag name="review"
          id="32461"
          type_id="1"
          status="-"
          setter="barraclough"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49826</attachid>
            <date>2010-03-02 11:38:32 -0800</date>
            <delta_ts>2010-03-03 19:57:40 -0800</delta_ts>
            <desc>MIPS YARR JIT Patch 20100302</desc>
            <filename>mips_yarr_jit20100302.diff</filename>
            <type>text/plain</type>
            <size>101816</size>
            <attacher name="Chao-ying Fu">fu</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDU1NDE1KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTc2IEBACisyMDEwLTAzLTAyICBDaGFvLXlp
bmcgRnUgIDxmdUBtaXBzLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBNSVBTIEpJVCBTdXBwb3J0cworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzAxNDQKKworICAgICAgICBUaGUgZm9sbG93aW5nIGNo
YW5nZXMgZW5hYmxlIE1JUFMgWUFSUiBhbmQgWUFSUl9KSVQuCisKKyAgICAgICAgKiBhc3NlbWJs
ZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oOgorICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3Jv
QXNzZW1ibGVyOjpJbW0zMjo6SW1tMzIpOgorICAgICAgICAqIGFzc2VtYmxlci9NSVBTQXNzZW1i
bGVyLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpNSVBTUmVnaXN0ZXJzOjopOgorICAgICAgICAo
SlNDOjpNSVBTQXNzZW1ibGVyOjpNSVBTQXNzZW1ibGVyKToKKyAgICAgICAgKEpTQzo6TUlQU0Fz
c2VtYmxlcjo6KToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6Sm1wU3JjOjpKbXBTcmMp
OgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpKbXBEc3Q6OkptcERzdCk6CisgICAgICAg
IChKU0M6Ok1JUFNBc3NlbWJsZXI6OkptcERzdDo6aXNVc2VkKToKKyAgICAgICAgKEpTQzo6TUlQ
U0Fzc2VtYmxlcjo6Sm1wRHN0Ojp1c2VkKToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6
ZW1pdEluc3QpOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpub3ApOgorICAgICAgICAo
SlNDOjpNSVBTQXNzZW1ibGVyOjpsb2FkRGVsYXlOb3ApOgorICAgICAgICAoSlNDOjpNSVBTQXNz
ZW1ibGVyOjpjb3BEZWxheU5vcCk6CisgICAgICAgIChKU0M6Ok1JUFNBc3NlbWJsZXI6Om1vdmUp
OgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpsaSk6CisgICAgICAgIChKU0M6Ok1JUFNB
c3NlbWJsZXI6Omx1aSk6CisgICAgICAgIChKU0M6Ok1JUFNBc3NlbWJsZXI6OmFkZGl1KToKKyAg
ICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6YWRkdSk6CisgICAgICAgIChKU0M6Ok1JUFNBc3Nl
bWJsZXI6OnN1YnUpOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjptdWx0KToKKyAgICAg
ICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6bWZoaSk6CisgICAgICAgIChKU0M6Ok1JUFNBc3NlbWJs
ZXI6Om1mbG8pOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjptdWwpOgorICAgICAgICAo
SlNDOjpNSVBTQXNzZW1ibGVyOjphbmRJbnNuKToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxl
cjo6YW5kaSk6CisgICAgICAgIChKU0M6Ok1JUFNBc3NlbWJsZXI6Om5vcik6CisgICAgICAgIChK
U0M6Ok1JUFNBc3NlbWJsZXI6Om9ySW5zbik6CisgICAgICAgIChKU0M6Ok1JUFNBc3NlbWJsZXI6
Om9yaSk6CisgICAgICAgIChKU0M6Ok1JUFNBc3NlbWJsZXI6Onhvckluc24pOgorICAgICAgICAo
SlNDOjpNSVBTQXNzZW1ibGVyOjp4b3JpKToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6
c2x0KToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6c2x0dSk6CisgICAgICAgIChKU0M6
Ok1JUFNBc3NlbWJsZXI6OnNsdGl1KToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6c2xs
KToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6c2xsdik6CisgICAgICAgIChKU0M6Ok1J
UFNBc3NlbWJsZXI6OnNyYSk6CisgICAgICAgIChKU0M6Ok1JUFNBc3NlbWJsZXI6OnNyYXYpOgor
ICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpsdyk6CisgICAgICAgIChKU0M6Ok1JUFNBc3Nl
bWJsZXI6Omx3bCk6CisgICAgICAgIChKU0M6Ok1JUFNBc3NlbWJsZXI6Omx3cik6CisgICAgICAg
IChKU0M6Ok1JUFNBc3NlbWJsZXI6OmxodSk6CisgICAgICAgIChKU0M6Ok1JUFNBc3NlbWJsZXI6
OnN3KToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6anIpOgorICAgICAgICAoSlNDOjpN
SVBTQXNzZW1ibGVyOjpqYWxyKToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6amFsKToK
KyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6YmtwdCk6CisgICAgICAgIChKU0M6Ok1JUFNB
c3NlbWJsZXI6OmJnZXopOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpibHR6KToKKyAg
ICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6YmVxKToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2Vt
Ymxlcjo6Ym5lKToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6YmMxdCk6CisgICAgICAg
IChKU0M6Ok1JUFNBc3NlbWJsZXI6OmJjMWYpOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVy
OjpuZXdKbXBTcmMpOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjphcHBlbmRKdW1wKToK
KyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6YWRkZCk6CisgICAgICAgIChKU0M6Ok1JUFNB
c3NlbWJsZXI6OnN1YmQpOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjptdWxkKToKKyAg
ICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6bHdjMSk6CisgICAgICAgIChKU0M6Ok1JUFNBc3Nl
bWJsZXI6OmxkYzEpOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpzd2MxKToKKyAgICAg
ICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6c2RjMSk6CisgICAgICAgIChKU0M6Ok1JUFNBc3NlbWJs
ZXI6Om10YzEpOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjptZmMxKToKKyAgICAgICAg
KEpTQzo6TUlQU0Fzc2VtYmxlcjo6dHJ1bmN3ZCk6CisgICAgICAgIChKU0M6Ok1JUFNBc3NlbWJs
ZXI6OmN2dGR3KToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6Y2VxZCk6CisgICAgICAg
IChKU0M6Ok1JUFNBc3NlbWJsZXI6OmNuZ3RkKToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxl
cjo6Y25nZWQpOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpjbHRkKToKKyAgICAgICAg
KEpTQzo6TUlQU0Fzc2VtYmxlcjo6Y2xlZCk6CisgICAgICAgIChKU0M6Ok1JUFNBc3NlbWJsZXI6
OmN1ZXFkKToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6Y29sZWQpOgorICAgICAgICAo
SlNDOjpNSVBTQXNzZW1ibGVyOjpjb2x0ZCk6CisgICAgICAgIChKU0M6Ok1JUFNBc3NlbWJsZXI6
OmN1bGVkKToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6Y3VsdGQpOgorICAgICAgICAo
SlNDOjpNSVBTQXNzZW1ibGVyOjpsYWJlbCk6CisgICAgICAgIChKU0M6Ok1JUFNBc3NlbWJsZXI6
OmFsaWduKToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6Z2V0UmVsb2NhdGVkQWRkcmVz
cyk6CisgICAgICAgIChKU0M6Ok1JUFNBc3NlbWJsZXI6OmdldERpZmZlcmVuY2VCZXR3ZWVuTGFi
ZWxzKToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6c2l6ZSk6CisgICAgICAgIChKU0M6
Ok1JUFNBc3NlbWJsZXI6OmV4ZWN1dGFibGVDb3B5KToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2Vt
Ymxlcjo6Z2V0Q2FsbFJldHVybk9mZnNldCk6CisgICAgICAgIChKU0M6Ok1JUFNBc3NlbWJsZXI6
OmxpbmtKdW1wKToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6bGlua0NhbGwpOgorICAg
ICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpsaW5rUG9pbnRlcik6CisgICAgICAgIChKU0M6Ok1J
UFNBc3NlbWJsZXI6OnJlbGlua0p1bXApOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpy
ZWxpbmtDYWxsKToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6cmVwYXRjaEludDMyKToK
KyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIpOgorICAgICAgICAo
SlNDOjpNSVBTQXNzZW1ibGVyOjpyZXBhdGNoTG9hZFB0clRvTEVBKToKKyAgICAgICAgKEpTQzo6
TUlQU0Fzc2VtYmxlcjo6cmVsb2NhdGVKdW1wcyk6CisgICAgICAgIChKU0M6Ok1JUFNBc3NlbWJs
ZXI6OmxpbmtXaXRoT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6bGlua0Nh
bGxJbnRlcm5hbCk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmg6CisgICAg
ICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyTUlQUy5oOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjpNYWNyb0Fzc2VtYmxlck1JUFMpOgorICAgICAgICAoSlND
OjpNYWNyb0Fzc2VtYmxlck1JUFM6Oik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQ
Uzo6YWRkMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1JUFM6OmFuZDMyKToKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjpsc2hpZnQzMik6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyTUlQUzo6bXVsMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
ck1JUFM6Om5vdDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjpvcjMyKToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjpyc2hpZnQzMik6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6c3ViMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
Ymxlck1JUFM6OnhvcjMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjpsb2Fk
MzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1JUFM6OmxvYWQzMldpdGhVbmFsaWdu
ZWRIYWxmV29yZHMpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1JUFM6OmxvYWQzMldp
dGhBZGRyZXNzT2Zmc2V0UGF0Y2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1JUFM6
OmxvYWRQdHJXaXRoUGF0Y2hUb0xFQSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQ
Uzo6bG9hZFB0cldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fz
c2VtYmxlck1JUFM6OmxvYWQxNik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6
c3RvcmUzMldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
Ymxlck1JUFM6OnN0b3JlMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1JUFM6OnN1
cHBvcnRzRmxvYXRpbmdQb2ludCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6
c3VwcG9ydHNGbG9hdGluZ1BvaW50VHJ1bmNhdGUpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
Ymxlck1JUFM6OnBvcCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6cHVzaCk6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6bW92ZSk6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyTUlQUzo6c3dhcCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVy
TUlQUzo6c2lnbkV4dGVuZDMyVG9QdHIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1J
UFM6Onplcm9FeHRlbmQzMlRvUHRyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBT
OjpicmFuY2gzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6YnJhbmNoMzJX
aXRoVW5hbGlnbmVkSGFsZldvcmRzKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBT
OjpicmFuY2gxNik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6YnJhbmNoVGVz
dDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjpqdW1wKToKKyAgICAgICAg
KEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjpicmFuY2hBZGQzMik6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyTUlQUzo6YnJhbmNoTXVsMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
Ymxlck1JUFM6OmJyYW5jaFN1YjMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBT
OjpicmVha3BvaW50KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjpuZWFyQ2Fs
bCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6Y2FsbCk6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6cmV0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJNSVBTOjpzZXQzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6c2V0VGVz
dDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjptb3ZlV2l0aFBhdGNoKToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjpicmFuY2hQdHJXaXRoUGF0Y2gpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1JUFM6OnN0b3JlUHRyV2l0aFBhdGNoKToKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjp0YWlsUmVjdXJzaXZlQ2FsbCk6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6bWFrZVRhaWxSZWN1cnNpdmVDYWxsKToKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjpsb2FkRG91YmxlKToKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjpzdG9yZURvdWJsZSk6CisgICAgICAgIChKU0M6Ok1hY3Jv
QXNzZW1ibGVyTUlQUzo6YWRkRG91YmxlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJN
SVBTOjpzdWJEb3VibGUpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1JUFM6Om11bERv
dWJsZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6Y29udmVydEludDMyVG9E
b3VibGUpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1JUFM6Omluc2VydFJlbGF4YXRp
b25Xb3Jkcyk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6YnJhbmNoVHJ1ZSk6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6YnJhbmNoRmFsc2UpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1JUFM6OmJyYW5jaEVxdWFsKToKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJNSVBTOjpicmFuY2hOb3RFcXVhbCk6CisgICAgICAgIChKU0M6Ok1hY3Jv
QXNzZW1ibGVyTUlQUzo6YnJhbmNoRG91YmxlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJNSVBTOjpicmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50MzIpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlck1JUFM6OmxpbmtDYWxsKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJN
SVBTOjpyZXBhdGNoQ2FsbCk6CisgICAgICAgICogaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaDoK
KyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6Y2FjaGVGbHVzaCk6CisgICAgICAg
ICogd3RmL1BsYXRmb3JtLmg6CisgICAgICAgICogeWFyci9SZWdleEpJVC5jcHA6CisgICAgICAg
IChKU0M6OllhcnI6OlJlZ2V4R2VuZXJhdG9yOjpnZW5lcmF0ZUVudGVyKToKKyAgICAgICAgKEpT
Qzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OmdlbmVyYXRlUmV0dXJuKToKKwogMjAxMC0wMy0wMiAg
T2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoQnVpbGQgZml4KS4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFj
dE1hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gNTUxOTUpCisrKyBKYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNzMsNyArMTczLDcgQEAgcHVibGljOgogICAgIHN0cnVjdCBJbW0zMiB7CiAgICAgICAgIGV4
cGxpY2l0IEltbTMyKGludDMyX3QgdmFsdWUpCiAgICAgICAgICAgICA6IG1fdmFsdWUodmFsdWUp
Ci0jaWYgQ1BVKEFSTSkKKyNpZiBDUFUoQVJNKSB8fCBDUFUoTUlQUykKICAgICAgICAgICAgICwg
bV9pc1BvaW50ZXIoZmFsc2UpCiAjZW5kaWYKICAgICAgICAgewpAQCAtMTgyLDcgKzE4Miw3IEBA
IHB1YmxpYzoKICNpZiAhQ1BVKFg4Nl82NCkKICAgICAgICAgZXhwbGljaXQgSW1tMzIoSW1tUHRy
IHB0cikKICAgICAgICAgICAgIDogbV92YWx1ZShwdHIuYXNJbnRwdHIoKSkKLSNpZiBDUFUoQVJN
KQorI2lmIENQVShBUk0pIHx8IENQVShNSVBTKQogICAgICAgICAgICAgLCBtX2lzUG9pbnRlcih0
cnVlKQogI2VuZGlmCiAgICAgICAgIHsKQEAgLTE5MCwxMyArMTkwLDE0IEBAIHB1YmxpYzoKICNl
bmRpZgogCiAgICAgICAgIGludDMyX3QgbV92YWx1ZTsKLSNpZiBDUFUoQVJNKQorI2lmIENQVShB
Uk0pIHx8IENQVShNSVBTKQogICAgICAgICAvLyBXZSByZWx5IG9uIGJlaW5nIGFibGUgdG8gcmVn
ZW5lcmF0ZSBjb2RlIHRvIHJlY292ZXIgZXhjZXB0aW9uIGhhbmRsaW5nCiAgICAgICAgIC8vIGlu
Zm9ybWF0aW9uLiAgU2luY2UgQVJNdjcgc3VwcG9ydHMgMTYtYml0IGltbWVkaWF0ZXMgdGhlcmUg
aXMgYSBkYW5nZXIKICAgICAgICAgLy8gdGhhdCBpZiBwb2ludGVyIHZhbHVlcyBjaGFuZ2UgdGhl
IGxheW91dCBvZiB0aGUgZ2VuZXJhdGVkIGNvZGUgd2lsbCBjaGFuZ2UuCiAgICAgICAgIC8vIFRv
IGF2b2lkIHRoaXMgcHJvYmxlbSwgYWx3YXlzIGdlbmVyYXRlIHBvaW50ZXJzIChhbmQgdGh1cyBJ
bW0zMnMgY29uc3RydWN0ZWQKICAgICAgICAgLy8gZnJvbSBJbW1QdHJzKSB3aXRoIGEgY29kZSBz
ZXF1ZW5jZSB0aGF0IGlzIGFibGUgIHRvIHJlcHJlc2VudCAgYW55IHBvaW50ZXIKICAgICAgICAg
Ly8gdmFsdWUgLSBkb24ndCB1c2UgYSBtb3JlIGNvbXBhY3QgZm9ybSBpbiB0aGVzZSBjYXNlcy4K
KyAgICAgICAgLy8gU2FtZSBmb3IgTUlQUy4KICAgICAgICAgYm9vbCBtX2lzUG9pbnRlcjsKICNl
bmRpZgogICAgIH07CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTUlQU0Fzc2VtYmxl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NSVBTQXNzZW1ibGVy
LmgJKHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTUlQU0Fzc2VtYmxl
ci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIE1JUFMgVEVD
SE5PTE9HSUVTLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgTUlQUyBU
RUNITk9MT0dJRVMsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIE1JUFNBc3NlbWJsZXJfaAorI2RlZmluZSBNSVBTQXNz
ZW1ibGVyX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEFTU0VN
QkxFUikgJiYgQ1BVKE1JUFMpCisKKyNpbmNsdWRlICJBc3NlbWJsZXJCdWZmZXIuaCIKKyNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9TZWdtZW50ZWRWZWN0b3IuaD4K
KworbmFtZXNwYWNlIEpTQyB7CisKK3R5cGVkZWYgdWludDMyX3QgTUlQU1dvcmQ7CisKK25hbWVz
cGFjZSBNSVBTUmVnaXN0ZXJzIHsKK3R5cGVkZWYgZW51bSB7CisgICAgcjAgPSAwLAorICAgIHIx
LAorICAgIHIyLAorICAgIHIzLAorICAgIHI0LAorICAgIHI1LAorICAgIHI2LAorICAgIHI3LAor
ICAgIHI4LAorICAgIHI5LAorICAgIHIxMCwKKyAgICByMTEsCisgICAgcjEyLAorICAgIHIxMywK
KyAgICByMTQsCisgICAgcjE1LAorICAgIHIxNiwKKyAgICByMTcsCisgICAgcjE4LAorICAgIHIx
OSwKKyAgICByMjAsCisgICAgcjIxLAorICAgIHIyMiwKKyAgICByMjMsCisgICAgcjI0LAorICAg
IHIyNSwKKyAgICByMjYsCisgICAgcjI3LAorICAgIHIyOCwKKyAgICByMjksCisgICAgcjMwLAor
ICAgIHIzMSwKKyAgICB6ZXJvID0gcjAsCisgICAgYXQgPSByMSwKKyAgICB2MCA9IHIyLAorICAg
IHYxID0gcjMsCisgICAgYTAgPSByNCwKKyAgICBhMSA9IHI1LAorICAgIGEyID0gcjYsCisgICAg
YTMgPSByNywKKyAgICB0MCA9IHI4LAorICAgIHQxID0gcjksCisgICAgdDIgPSByMTAsCisgICAg
dDMgPSByMTEsCisgICAgdDQgPSByMTIsCisgICAgdDUgPSByMTMsCisgICAgdDYgPSByMTQsCisg
ICAgdDcgPSByMTUsCisgICAgczAgPSByMTYsCisgICAgczEgPSByMTcsCisgICAgczIgPSByMTgs
CisgICAgczMgPSByMTksCisgICAgczQgPSByMjAsCisgICAgczUgPSByMjEsCisgICAgczYgPSBy
MjIsCisgICAgczcgPSByMjMsCisgICAgdDggPSByMjQsCisgICAgdDkgPSByMjUsCisgICAgazAg
PSByMjYsCisgICAgazEgPSByMjcsCisgICAgZ3AgPSByMjgsCisgICAgc3AgPSByMjksCisgICAg
ZnAgPSByMzAsCisgICAgcmEgPSByMzEKK30gUmVnaXN0ZXJJRDsKKwordHlwZWRlZiBlbnVtIHsK
KyAgICBmMCwKKyAgICBmMSwKKyAgICBmMiwKKyAgICBmMywKKyAgICBmNCwKKyAgICBmNSwKKyAg
ICBmNiwKKyAgICBmNywKKyAgICBmOCwKKyAgICBmOSwKKyAgICBmMTAsCisgICAgZjExLAorICAg
IGYxMiwKKyAgICBmMTMsCisgICAgZjE0LAorICAgIGYxNSwKKyAgICBmMTYsCisgICAgZjE3LAor
ICAgIGYxOCwKKyAgICBmMTksCisgICAgZjIwLAorICAgIGYyMSwKKyAgICBmMjIsCisgICAgZjIz
LAorICAgIGYyNCwKKyAgICBmMjUsCisgICAgZjI2LAorICAgIGYyNywKKyAgICBmMjgsCisgICAg
ZjI5LAorICAgIGYzMCwKKyAgICBmMzEKK30gRlBSZWdpc3RlcklEOworCit9IC8vIG5hbWVzcGFj
ZSBNSVBTUmVnaXN0ZXJzCisKK2NsYXNzIE1JUFNBc3NlbWJsZXIgeworcHVibGljOgorICAgIHR5
cGVkZWYgTUlQU1JlZ2lzdGVyczo6UmVnaXN0ZXJJRCBSZWdpc3RlcklEOworICAgIHR5cGVkZWYg
TUlQU1JlZ2lzdGVyczo6RlBSZWdpc3RlcklEIEZQUmVnaXN0ZXJJRDsKKyAgICB0eXBlZGVmIFNl
Z21lbnRlZFZlY3RvcjxpbnQsIDY0PiBKdW1wczsKKworICAgIE1JUFNBc3NlbWJsZXIoKQorICAg
IHsKKyAgICB9CisKKyAgICAvLyBNSVBTIGluc3RydWN0aW9uIG9wY29kZSBmaWVsZCBwb3NpdGlv
bgorICAgIGVudW0geworICAgICAgICBPUF9TSF9SRCA9IDExLAorICAgICAgICBPUF9TSF9SVCA9
IDE2LAorICAgICAgICBPUF9TSF9SUyA9IDIxLAorICAgICAgICBPUF9TSF9TSEFNVCA9IDYsCisg
ICAgICAgIE9QX1NIX0NPREUgPSAxNiwKKyAgICAgICAgT1BfU0hfRkQgPSA2LAorICAgICAgICBP
UF9TSF9GUyA9IDExLAorICAgICAgICBPUF9TSF9GVCA9IDE2CisgICAgfTsKKworICAgIGNsYXNz
IEptcFNyYyB7CisgICAgICAgIGZyaWVuZCBjbGFzcyBNSVBTQXNzZW1ibGVyOworICAgIHB1Ymxp
YzoKKyAgICAgICAgSm1wU3JjKCkKKyAgICAgICAgICAgIDogbV9vZmZzZXQoLTEpCisgICAgICAg
IHsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgSm1wU3JjKGludCBvZmZzZXQp
CisgICAgICAgICAgICA6IG1fb2Zmc2V0KG9mZnNldCkKKyAgICAgICAgeworICAgICAgICB9CisK
KyAgICAgICAgaW50IG1fb2Zmc2V0OworICAgIH07CisKKyAgICBjbGFzcyBKbXBEc3QgeworICAg
ICAgICBmcmllbmQgY2xhc3MgTUlQU0Fzc2VtYmxlcjsKKyAgICBwdWJsaWM6CisgICAgICAgIEpt
cERzdCgpCisgICAgICAgICAgICA6IG1fb2Zmc2V0KC0xKQorICAgICAgICAgICAgLCBtX3VzZWQo
ZmFsc2UpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgaXNVc2VkKCkgY29u
c3QgeyByZXR1cm4gbV91c2VkOyB9CisgICAgICAgIHZvaWQgdXNlZCgpIHsgbV91c2VkID0gdHJ1
ZTsgfQorICAgIHByaXZhdGU6CisgICAgICAgIEptcERzdChpbnQgb2Zmc2V0KQorICAgICAgICAg
ICAgOiBtX29mZnNldChvZmZzZXQpCisgICAgICAgICAgICAsIG1fdXNlZChmYWxzZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgQVNTRVJUKG1fb2Zmc2V0ID09IG9mZnNldCk7CisgICAgICAgIH0K
KworICAgICAgICBpbnQgbV9vZmZzZXQgOiAzMTsKKyAgICAgICAgaW50IG1fdXNlZCA6IDE7Cisg
ICAgfTsKKworICAgIHZvaWQgZW1pdEluc3QoTUlQU1dvcmQgb3ApCisgICAgeworICAgICAgICB2
b2lkKiBvbGRCYXNlID0gbV9idWZmZXIuZGF0YSgpOworCisgICAgICAgIG1fYnVmZmVyLnB1dElu
dChvcCk7CisKKyAgICAgICAgdm9pZCogbmV3QmFzZSA9IG1fYnVmZmVyLmRhdGEoKTsKKyAgICAg
ICAgaWYgKG9sZEJhc2UgIT0gbmV3QmFzZSkKKyAgICAgICAgICAgIHJlbG9jYXRlSnVtcHMob2xk
QmFzZSwgbmV3QmFzZSk7CisgICAgfQorCisgICAgdm9pZCBub3AoKQorICAgIHsKKyAgICAgICAg
ZW1pdEluc3QoMHgwMDAwMDAwMCk7CisgICAgfQorCisgICAgLyogTmVlZCB0byBpbnNlcnQgb25l
IGxvYWQgZGF0YSBkZWxheSBub3AgZm9yIG1pcHMxLiAgKi8KKyAgICB2b2lkIGxvYWREZWxheU5v
cCgpCisgICAgeworI2lmIFdURl9NSVBTX0lTQSgxKQorICAgICAgICBub3AoKTsKKyNlbmRpZgor
ICAgIH0KKworICAgIC8qIE5lZWQgdG8gaW5zZXJ0IG9uZSBjb3Byb2Nlc3NvciBhY2Nlc3MgZGVs
YXkgbm9wIGZvciBtaXBzMS4gICovCisgICAgdm9pZCBjb3BEZWxheU5vcCgpCisgICAgeworI2lm
IFdURl9NSVBTX0lTQSgxKQorICAgICAgICBub3AoKTsKKyNlbmRpZgorICAgIH0KKworICAgIHZv
aWQgbW92ZShSZWdpc3RlcklEIHJkLCBSZWdpc3RlcklEIHJzKQorICAgIHsKKyAgICAgICAgLyog
YWRkdSAqLworICAgICAgICBlbWl0SW5zdCgweDAwMDAwMDIxIHwgKHJkIDw8IE9QX1NIX1JEKSB8
IChycyA8PCBPUF9TSF9SUykpOworICAgIH0KKworICAgIC8qIFNldCBhbiBpbW1lZGlhdGUgdmFs
dWUgdG8gYSByZWdpc3Rlci4gIFRoaXMgbWF5IGdlbmVyYXRlIDEgb3IgMgorICAgICAgIGluc3Ry
dWN0aW9ucy4gICovCisgICAgdm9pZCBsaShSZWdpc3RlcklEIGRlc3QsIGludCBpbW0pCisgICAg
eworICAgICAgICBpZiAoaW1tID49IC0zMjc2OCAmJiBpbW0gPD0gMzI3NjcpCisgICAgICAgICAg
ICBhZGRpdShkZXN0LCBNSVBTUmVnaXN0ZXJzOjp6ZXJvLCBpbW0pOworICAgICAgICBlbHNlIGlm
IChpbW0gPj0gMCAmJiBpbW0gPCA2NTUzNikKKyAgICAgICAgICAgIG9yaShkZXN0LCBNSVBTUmVn
aXN0ZXJzOjp6ZXJvLCBpbW0pOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGx1aShkZXN0
LCBpbW0gPj4gMTYpOworICAgICAgICAgICAgaWYgKGltbSAmIDB4ZmZmZikKKyAgICAgICAgICAg
ICAgICBvcmkoZGVzdCwgZGVzdCwgaW1tKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQg
bHVpKFJlZ2lzdGVySUQgcnQsIGludCBpbW0pCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDNj
MDAwMDAwIHwgKHJ0IDw8IE9QX1NIX1JUKSB8IChpbW0gJiAweGZmZmYpKTsKKyAgICB9CisKKyAg
ICB2b2lkIGFkZGl1KFJlZ2lzdGVySUQgcnQsIFJlZ2lzdGVySUQgcnMsIGludCBpbW0pCisgICAg
eworICAgICAgICBlbWl0SW5zdCgweDI0MDAwMDAwIHwgKHJ0IDw8IE9QX1NIX1JUKSB8IChycyA8
PCBPUF9TSF9SUykKKyAgICAgICAgICAgICAgICAgfCAoaW1tICYgMHhmZmZmKSk7CisgICAgfQor
CisgICAgdm9pZCBhZGR1KFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcnMsIFJlZ2lzdGVySUQg
cnQpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDAwMDAwMDIxIHwgKHJkIDw8IE9QX1NIX1JE
KSB8IChycyA8PCBPUF9TSF9SUykKKyAgICAgICAgICAgICAgICAgfCAocnQgPDwgT1BfU0hfUlQp
KTsKKyAgICB9CisKKyAgICB2b2lkIHN1YnUoUmVnaXN0ZXJJRCByZCwgUmVnaXN0ZXJJRCBycywg
UmVnaXN0ZXJJRCBydCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMjMgfCAocmQg
PDwgT1BfU0hfUkQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChydCA8
PCBPUF9TSF9SVCkpOworICAgIH0KKworICAgIHZvaWQgbXVsdChSZWdpc3RlcklEIHJzLCBSZWdp
c3RlcklEIHJ0KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHgwMDAwMDAxOCB8IChycyA8PCBP
UF9TSF9SUykgfCAocnQgPDwgT1BfU0hfUlQpKTsKKyAgICB9CisKKyAgICB2b2lkIG1maGkoUmVn
aXN0ZXJJRCByZCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMTAgfCAocmQgPDwg
T1BfU0hfUkQpKTsKKyAgICB9CisKKyAgICB2b2lkIG1mbG8oUmVnaXN0ZXJJRCByZCkKKyAgICB7
CisgICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMTIgfCAocmQgPDwgT1BfU0hfUkQpKTsKKyAgICB9
CisKKyAgICB2b2lkIG11bChSZWdpc3RlcklEIHJkLCBSZWdpc3RlcklEIHJzLCBSZWdpc3RlcklE
IHJ0KQorICAgIHsKKyNpZiBXVEZfTUlQU19JU0FfQVRfTEVBU1QoMzIpIAorICAgICAgICBlbWl0
SW5zdCgweDcwMDAwMDAyIHwgKHJkIDw8IE9QX1NIX1JEKSB8IChycyA8PCBPUF9TSF9SUykKKyAg
ICAgICAgICAgICAgICAgfCAocnQgPDwgT1BfU0hfUlQpKTsKKyNlbHNlCisgICAgICAgIG11bHQo
cnMsIHJ0KTsKKyAgICAgICAgbWZsbyhyZCk7CisjZW5kaWYKKyAgICB9CisKKyAgICB2b2lkIGFu
ZEluc24oUmVnaXN0ZXJJRCByZCwgUmVnaXN0ZXJJRCBycywgUmVnaXN0ZXJJRCBydCkKKyAgICB7
CisgICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMjQgfCAocmQgPDwgT1BfU0hfUkQpIHwgKHJzIDw8
IE9QX1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChydCA8PCBPUF9TSF9SVCkpOworICAgIH0K
KworICAgIHZvaWQgYW5kaShSZWdpc3RlcklEIHJ0LCBSZWdpc3RlcklEIHJzLCBpbnQgaW1tKQor
ICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHgzMDAwMDAwMCB8IChydCA8PCBPUF9TSF9SVCkgfCAo
cnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAgICAgICAgIHwgKGltbSAmIDB4ZmZmZikpOworICAg
IH0KKworICAgIHZvaWQgbm9yKFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcnMsIFJlZ2lzdGVy
SUQgcnQpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDAwMDAwMDI3IHwgKHJkIDw8IE9QX1NI
X1JEKSB8IChycyA8PCBPUF9TSF9SUykKKyAgICAgICAgICAgICAgICAgfCAocnQgPDwgT1BfU0hf
UlQpKTsKKyAgICB9CisKKyAgICB2b2lkIG9ySW5zbihSZWdpc3RlcklEIHJkLCBSZWdpc3RlcklE
IHJzLCBSZWdpc3RlcklEIHJ0KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHgwMDAwMDAyNSB8
IChyZCA8PCBPUF9TSF9SRCkgfCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAgICAgICAgIHwg
KHJ0IDw8IE9QX1NIX1JUKSk7CisgICAgfQorCisgICAgdm9pZCBvcmkoUmVnaXN0ZXJJRCBydCwg
UmVnaXN0ZXJJRCBycywgaW50IGltbSkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4MzQwMDAw
MDAgfCAocnQgPDwgT1BfU0hfUlQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAgICAgICAg
ICB8IChpbW0gJiAweGZmZmYpKTsKKyAgICB9CisKKyAgICB2b2lkIHhvckluc24oUmVnaXN0ZXJJ
RCByZCwgUmVnaXN0ZXJJRCBycywgUmVnaXN0ZXJJRCBydCkKKyAgICB7CisgICAgICAgIGVtaXRJ
bnN0KDB4MDAwMDAwMjYgfCAocmQgPDwgT1BfU0hfUkQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAg
ICAgICAgICAgICAgICB8IChydCA8PCBPUF9TSF9SVCkpOworICAgIH0KKworICAgIHZvaWQgeG9y
aShSZWdpc3RlcklEIHJ0LCBSZWdpc3RlcklEIHJzLCBpbnQgaW1tKQorICAgIHsKKyAgICAgICAg
ZW1pdEluc3QoMHgzODAwMDAwMCB8IChydCA8PCBPUF9TSF9SVCkgfCAocnMgPDwgT1BfU0hfUlMp
CisgICAgICAgICAgICAgICAgIHwgKGltbSAmIDB4ZmZmZikpOworICAgIH0KKworICAgIHZvaWQg
c2x0KFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcnMsIFJlZ2lzdGVySUQgcnQpCisgICAgewor
ICAgICAgICBlbWl0SW5zdCgweDAwMDAwMDJhIHwgKHJkIDw8IE9QX1NIX1JEKSB8IChycyA8PCBP
UF9TSF9SUykKKyAgICAgICAgICAgICAgICAgfCAocnQgPDwgT1BfU0hfUlQpKTsKKyAgICB9CisK
KyAgICB2b2lkIHNsdHUoUmVnaXN0ZXJJRCByZCwgUmVnaXN0ZXJJRCBycywgUmVnaXN0ZXJJRCBy
dCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4MDAwMDAwMmIgfCAocmQgPDwgT1BfU0hfUkQp
IHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChydCA8PCBPUF9TSF9SVCkp
OworICAgIH0KKworICAgIHZvaWQgc2x0aXUoUmVnaXN0ZXJJRCBydCwgUmVnaXN0ZXJJRCBycywg
aW50IGltbSkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4MmMwMDAwMDAgfCAocnQgPDwgT1Bf
U0hfUlQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChpbW0gJiAweGZm
ZmYpKTsKKyAgICB9CisKKyAgICB2b2lkIHNsbChSZWdpc3RlcklEIHJkLCBSZWdpc3RlcklEIHJ0
LCBpbnQgc2hhbXQpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDAwMDAwMDAwIHwgKHJkIDw8
IE9QX1NIX1JEKSB8IChydCA8PCBPUF9TSF9SVCkKKyAgICAgICAgICAgICAgICAgfCAoKHNoYW10
ICYgMHgxZikgPDwgT1BfU0hfU0hBTVQpKTsKKyAgICB9CisKKyAgICB2b2lkIHNsbHYoUmVnaXN0
ZXJJRCByZCwgUmVnaXN0ZXJJRCBydCwgaW50IHJzKQorICAgIHsKKyAgICAgICAgZW1pdEluc3Qo
MHgwMDAwMDAwNCB8IChyZCA8PCBPUF9TSF9SRCkgfCAocnQgPDwgT1BfU0hfUlQpCisgICAgICAg
ICAgICAgICAgIHwgKHJzIDw8IE9QX1NIX1JTKSk7CisgICAgfQorCisgICAgdm9pZCBzcmEoUmVn
aXN0ZXJJRCByZCwgUmVnaXN0ZXJJRCBydCwgaW50IHNoYW10KQorICAgIHsKKyAgICAgICAgZW1p
dEluc3QoMHgwMDAwMDAwMyB8IChyZCA8PCBPUF9TSF9SRCkgfCAocnQgPDwgT1BfU0hfUlQpCisg
ICAgICAgICAgICAgICAgIHwgKChzaGFtdCAmIDB4MWYpIDw8IE9QX1NIX1NIQU1UKSk7CisgICAg
fQorCisgICAgdm9pZCBzcmF2KFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcnQsIFJlZ2lzdGVy
SUQgcnMpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDAwMDAwMDA3IHwgKHJkIDw8IE9QX1NI
X1JEKSB8IChydCA8PCBPUF9TSF9SVCkKKyAgICAgICAgICAgICAgICAgfCAocnMgPDwgT1BfU0hf
UlMpKTsKKyAgICB9CisKKyAgICB2b2lkIGx3KFJlZ2lzdGVySUQgcnQsIFJlZ2lzdGVySUQgcnMs
IGludCBvZmZzZXQpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDhjMDAwMDAwIHwgKHJ0IDw8
IE9QX1NIX1JUKSB8IChycyA8PCBPUF9TSF9SUykKKyAgICAgICAgICAgICAgICAgfCAob2Zmc2V0
ICYgMHhmZmZmKSk7CisgICAgICAgIGxvYWREZWxheU5vcCgpOworICAgIH0KKworICAgIHZvaWQg
bHdsKFJlZ2lzdGVySUQgcnQsIFJlZ2lzdGVySUQgcnMsIGludCBvZmZzZXQpCisgICAgeworICAg
ICAgICBlbWl0SW5zdCgweDg4MDAwMDAwIHwgKHJ0IDw8IE9QX1NIX1JUKSB8IChycyA8PCBPUF9T
SF9SUykKKyAgICAgICAgICAgICAgICAgfCAob2Zmc2V0ICYgMHhmZmZmKSk7CisgICAgICAgIGxv
YWREZWxheU5vcCgpOworICAgIH0KKworICAgIHZvaWQgbHdyKFJlZ2lzdGVySUQgcnQsIFJlZ2lz
dGVySUQgcnMsIGludCBvZmZzZXQpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDk4MDAwMDAw
IHwgKHJ0IDw8IE9QX1NIX1JUKSB8IChycyA8PCBPUF9TSF9SUykKKyAgICAgICAgICAgICAgICAg
fCAob2Zmc2V0ICYgMHhmZmZmKSk7CisgICAgICAgIGxvYWREZWxheU5vcCgpOworICAgIH0KKwor
ICAgIHZvaWQgbGh1KFJlZ2lzdGVySUQgcnQsIFJlZ2lzdGVySUQgcnMsIGludCBvZmZzZXQpCisg
ICAgeworICAgICAgICBlbWl0SW5zdCgweDk0MDAwMDAwIHwgKHJ0IDw8IE9QX1NIX1JUKSB8IChy
cyA8PCBPUF9TSF9SUykKKyAgICAgICAgICAgICAgICAgfCAob2Zmc2V0ICYgMHhmZmZmKSk7Cisg
ICAgICAgIGxvYWREZWxheU5vcCgpOworICAgIH0KKworICAgIHZvaWQgc3coUmVnaXN0ZXJJRCBy
dCwgUmVnaXN0ZXJJRCBycywgaW50IG9mZnNldCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4
YWMwMDAwMDAgfCAocnQgPDwgT1BfU0hfUlQpIHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAg
ICAgICAgICB8IChvZmZzZXQgJiAweGZmZmYpKTsKKyAgICB9CisKKyAgICB2b2lkIGpyKFJlZ2lz
dGVySUQgcnMpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDAwMDAwMDA4IHwgKHJzIDw8IE9Q
X1NIX1JTKSk7CisgICAgfQorCisgICAgdm9pZCBqYWxyKFJlZ2lzdGVySUQgcnMpCisgICAgewor
ICAgICAgICBlbWl0SW5zdCgweDAwMDBmODA5IHwgKHJzIDw8IE9QX1NIX1JTKSk7CisgICAgfQor
CisgICAgdm9pZCBqYWwoKQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHgwYzAwMDAwMCk7Cisg
ICAgfQorCisgICAgdm9pZCBia3B0KCkKKyAgICB7CisgICAgICAgIGludCB2YWx1ZSA9IDUxMjsg
LyogQlJLX0JVRyAqLworICAgICAgICBlbWl0SW5zdCgweDAwMDAwMDBkIHwgKCh2YWx1ZSAmIDB4
M2ZmKSA8PCBPUF9TSF9DT0RFKSk7CisgICAgfQorCisgICAgdm9pZCBiZ2V6KFJlZ2lzdGVySUQg
cnMsIGludCBpbW0pCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDA0MDEwMDAwIHwgKHJzIDw8
IE9QX1NIX1JTKSB8IChpbW0gJiAweGZmZmYpKTsKKyAgICB9CisKKyAgICB2b2lkIGJsdHooUmVn
aXN0ZXJJRCBycywgaW50IGltbSkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4MDQwMDAwMDAg
fCAocnMgPDwgT1BfU0hfUlMpIHwgKGltbSAmIDB4ZmZmZikpOworICAgIH0KKworICAgIHZvaWQg
YmVxKFJlZ2lzdGVySUQgcnMsIFJlZ2lzdGVySUQgcnQsIGludCBpbW0pCisgICAgeworICAgICAg
ICBlbWl0SW5zdCgweDEwMDAwMDAwIHwgKHJzIDw8IE9QX1NIX1JTKSB8IChydCA8PCBPUF9TSF9S
VCkgfCAoaW1tICYgMHhmZmZmKSk7CisgICAgfQorCisgICAgdm9pZCBibmUoUmVnaXN0ZXJJRCBy
cywgUmVnaXN0ZXJJRCBydCwgaW50IGltbSkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4MTQw
MDAwMDAgfCAocnMgPDwgT1BfU0hfUlMpIHwgKHJ0IDw8IE9QX1NIX1JUKSB8IChpbW0gJiAweGZm
ZmYpKTsKKyAgICB9CisKKyAgICB2b2lkIGJjMXQoKQorICAgIHsKKyAgICAgICAgZW1pdEluc3Qo
MHg0NTAxMDAwMCk7CisgICAgfQorCisgICAgdm9pZCBiYzFmKCkKKyAgICB7CisgICAgICAgIGVt
aXRJbnN0KDB4NDUwMDAwMDApOworICAgIH0KKworICAgIEptcFNyYyBuZXdKbXBTcmMoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEptcFNyYyhtX2J1ZmZlci5zaXplKCkpOworICAgIH0KKworICAg
IHZvaWQgYXBwZW5kSnVtcCgpCisgICAgeworICAgICAgICBtX2p1bXBzLmFwcGVuZChtX2J1ZmZl
ci5zaXplKCkpOworICAgIH0KKworICAgIHZvaWQgYWRkZChGUFJlZ2lzdGVySUQgZmQsIEZQUmVn
aXN0ZXJJRCBmcywgRlBSZWdpc3RlcklEIGZ0KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHg0
NjIwMDAwMCB8IChmZCA8PCBPUF9TSF9GRCkgfCAoZnMgPDwgT1BfU0hfRlMpCisgICAgICAgICAg
ICAgICAgIHwgKGZ0IDw8IE9QX1NIX0ZUKSk7CisgICAgfQorCisgICAgdm9pZCBzdWJkKEZQUmVn
aXN0ZXJJRCBmZCwgRlBSZWdpc3RlcklEIGZzLCBGUFJlZ2lzdGVySUQgZnQpCisgICAgeworICAg
ICAgICBlbWl0SW5zdCgweDQ2MjAwMDAxIHwgKGZkIDw8IE9QX1NIX0ZEKSB8IChmcyA8PCBPUF9T
SF9GUykKKyAgICAgICAgICAgICAgICAgfCAoZnQgPDwgT1BfU0hfRlQpKTsKKyAgICB9CisKKyAg
ICB2b2lkIG11bGQoRlBSZWdpc3RlcklEIGZkLCBGUFJlZ2lzdGVySUQgZnMsIEZQUmVnaXN0ZXJJ
RCBmdCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4NDYyMDAwMDIgfCAoZmQgPDwgT1BfU0hf
RkQpIHwgKGZzIDw8IE9QX1NIX0ZTKQorICAgICAgICAgICAgICAgICB8IChmdCA8PCBPUF9TSF9G
VCkpOworICAgIH0KKworICAgIHZvaWQgbHdjMShGUFJlZ2lzdGVySUQgZnQsIFJlZ2lzdGVySUQg
cnMsIGludCBvZmZzZXQpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweGM0MDAwMDAwIHwgKGZ0
IDw8IE9QX1NIX0ZUKSB8IChycyA8PCBPUF9TSF9SUykKKyAgICAgICAgICAgICAgICAgfCAob2Zm
c2V0ICYgMHhmZmZmKSk7CisgICAgICAgIGNvcERlbGF5Tm9wKCk7CisgICAgfQorCisgICAgdm9p
ZCBsZGMxKEZQUmVnaXN0ZXJJRCBmdCwgUmVnaXN0ZXJJRCBycywgaW50IG9mZnNldCkKKyAgICB7
CisgICAgICAgIGVtaXRJbnN0KDB4ZDQwMDAwMDAgfCAoZnQgPDwgT1BfU0hfRlQpIHwgKHJzIDw8
IE9QX1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChvZmZzZXQgJiAweGZmZmYpKTsKKyAgICB9
CisKKyAgICB2b2lkIHN3YzEoRlBSZWdpc3RlcklEIGZ0LCBSZWdpc3RlcklEIHJzLCBpbnQgb2Zm
c2V0KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHhlNDAwMDAwMCB8IChmdCA8PCBPUF9TSF9G
VCkgfCAocnMgPDwgT1BfU0hfUlMpCisgICAgICAgICAgICAgICAgIHwgKG9mZnNldCAmIDB4ZmZm
ZikpOworICAgIH0KKworICAgIHZvaWQgc2RjMShGUFJlZ2lzdGVySUQgZnQsIFJlZ2lzdGVySUQg
cnMsIGludCBvZmZzZXQpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweGY0MDAwMDAwIHwgKGZ0
IDw8IE9QX1NIX0ZUKSB8IChycyA8PCBPUF9TSF9SUykKKyAgICAgICAgICAgICAgICAgfCAob2Zm
c2V0ICYgMHhmZmZmKSk7CisgICAgfQorCisgICAgdm9pZCBtdGMxKFJlZ2lzdGVySUQgcnQsIEZQ
UmVnaXN0ZXJJRCBmcykKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4NDQ4MDAwMDAgfCAoZnMg
PDwgT1BfU0hfRlMpIHwgKHJ0IDw8IE9QX1NIX1JUKSk7CisgICAgICAgIGNvcERlbGF5Tm9wKCk7
CisgICAgfQorCisgICAgdm9pZCBtZmMxKFJlZ2lzdGVySUQgcnQsIEZQUmVnaXN0ZXJJRCBmcykK
KyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4NDQwMDAwMDAgfCAoZnMgPDwgT1BfU0hfRlMpIHwg
KHJ0IDw8IE9QX1NIX1JUKSk7CisgICAgICAgIGNvcERlbGF5Tm9wKCk7CisgICAgfQorCisgICAg
dm9pZCB0cnVuY3dkKEZQUmVnaXN0ZXJJRCBmZCwgRlBSZWdpc3RlcklEIGZzKQorICAgIHsKKyAg
ICAgICAgZW1pdEluc3QoMHg0NjIwMDAwZCB8IChmZCA8PCBPUF9TSF9GRCkgfCAoZnMgPDwgT1Bf
U0hfRlMpKTsKKyAgICB9CisKKyAgICB2b2lkIGN2dGR3KEZQUmVnaXN0ZXJJRCBmZCwgRlBSZWdp
c3RlcklEIGZzKQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHg0NjgwMDAyMSB8IChmZCA8PCBP
UF9TSF9GRCkgfCAoZnMgPDwgT1BfU0hfRlMpKTsKKyAgICB9CisKKyAgICB2b2lkIGNlcWQoRlBS
ZWdpc3RlcklEIGZzLCBGUFJlZ2lzdGVySUQgZnQpCisgICAgeworICAgICAgICBlbWl0SW5zdCgw
eDQ2MjAwMDMyIHwgKGZzIDw8IE9QX1NIX0ZTKSB8IChmdCA8PCBPUF9TSF9GVCkpOworICAgICAg
ICBjb3BEZWxheU5vcCgpOworICAgIH0KKworICAgIHZvaWQgY25ndGQoRlBSZWdpc3RlcklEIGZz
LCBGUFJlZ2lzdGVySUQgZnQpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDQ2MjAwMDNmIHwg
KGZzIDw8IE9QX1NIX0ZTKSB8IChmdCA8PCBPUF9TSF9GVCkpOworICAgICAgICBjb3BEZWxheU5v
cCgpOworICAgIH0KKworICAgIHZvaWQgY25nZWQoRlBSZWdpc3RlcklEIGZzLCBGUFJlZ2lzdGVy
SUQgZnQpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDQ2MjAwMDNkIHwgKGZzIDw8IE9QX1NI
X0ZTKSB8IChmdCA8PCBPUF9TSF9GVCkpOworICAgICAgICBjb3BEZWxheU5vcCgpOworICAgIH0K
KworICAgIHZvaWQgY2x0ZChGUFJlZ2lzdGVySUQgZnMsIEZQUmVnaXN0ZXJJRCBmdCkKKyAgICB7
CisgICAgICAgIGVtaXRJbnN0KDB4NDYyMDAwM2MgfCAoZnMgPDwgT1BfU0hfRlMpIHwgKGZ0IDw8
IE9QX1NIX0ZUKSk7CisgICAgICAgIGNvcERlbGF5Tm9wKCk7CisgICAgfQorCisgICAgdm9pZCBj
bGVkKEZQUmVnaXN0ZXJJRCBmcywgRlBSZWdpc3RlcklEIGZ0KQorICAgIHsKKyAgICAgICAgZW1p
dEluc3QoMHg0NjIwMDAzZSB8IChmcyA8PCBPUF9TSF9GUykgfCAoZnQgPDwgT1BfU0hfRlQpKTsK
KyAgICAgICAgY29wRGVsYXlOb3AoKTsKKyAgICB9CisKKyAgICB2b2lkIGN1ZXFkKEZQUmVnaXN0
ZXJJRCBmcywgRlBSZWdpc3RlcklEIGZ0KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHg0NjIw
MDAzMyB8IChmcyA8PCBPUF9TSF9GUykgfCAoZnQgPDwgT1BfU0hfRlQpKTsKKyAgICAgICAgY29w
RGVsYXlOb3AoKTsKKyAgICB9CisKKyAgICB2b2lkIGNvbGVkKEZQUmVnaXN0ZXJJRCBmcywgRlBS
ZWdpc3RlcklEIGZ0KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHg0NjIwMDAzNiB8IChmcyA8
PCBPUF9TSF9GUykgfCAoZnQgPDwgT1BfU0hfRlQpKTsKKyAgICAgICAgY29wRGVsYXlOb3AoKTsK
KyAgICB9CisKKyAgICB2b2lkIGNvbHRkKEZQUmVnaXN0ZXJJRCBmcywgRlBSZWdpc3RlcklEIGZ0
KQorICAgIHsKKyAgICAgICAgZW1pdEluc3QoMHg0NjIwMDAzNCB8IChmcyA8PCBPUF9TSF9GUykg
fCAoZnQgPDwgT1BfU0hfRlQpKTsKKyAgICAgICAgY29wRGVsYXlOb3AoKTsKKyAgICB9CisKKyAg
ICB2b2lkIGN1bGVkKEZQUmVnaXN0ZXJJRCBmcywgRlBSZWdpc3RlcklEIGZ0KQorICAgIHsKKyAg
ICAgICAgZW1pdEluc3QoMHg0NjIwMDAzNyB8IChmcyA8PCBPUF9TSF9GUykgfCAoZnQgPDwgT1Bf
U0hfRlQpKTsKKyAgICAgICAgY29wRGVsYXlOb3AoKTsKKyAgICB9CisKKyAgICB2b2lkIGN1bHRk
KEZQUmVnaXN0ZXJJRCBmcywgRlBSZWdpc3RlcklEIGZ0KQorICAgIHsKKyAgICAgICAgZW1pdElu
c3QoMHg0NjIwMDAzNSB8IChmcyA8PCBPUF9TSF9GUykgfCAoZnQgPDwgT1BfU0hfRlQpKTsKKyAg
ICAgICAgY29wRGVsYXlOb3AoKTsKKyAgICB9CisKKyAgICAvLyBHZW5lcmFsIGhlbHBlcnMKKwor
ICAgIEptcERzdCBsYWJlbCgpCisgICAgeworICAgICAgICByZXR1cm4gSm1wRHN0KG1fYnVmZmVy
LnNpemUoKSk7CisgICAgfQorCisgICAgSm1wRHN0IGFsaWduKGludCBhbGlnbm1lbnQpCisgICAg
eworICAgICAgICB3aGlsZSAoIW1fYnVmZmVyLmlzQWxpZ25lZChhbGlnbm1lbnQpKQorICAgICAg
ICAgICAgYmtwdCgpOworCisgICAgICAgIHJldHVybiBsYWJlbCgpOworICAgIH0KKworICAgIHN0
YXRpYyB2b2lkKiBnZXRSZWxvY2F0ZWRBZGRyZXNzKHZvaWQqIGNvZGUsIEptcFNyYyBqdW1wKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGp1bXAubV9vZmZzZXQgIT0gLTEpOworICAgICAgICB2b2lk
KiBiID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+
KGNvZGUpKSArIGp1bXAubV9vZmZzZXQpOworICAgICAgICByZXR1cm4gYjsKKyAgICB9CisKKyAg
ICBzdGF0aWMgdm9pZCogZ2V0UmVsb2NhdGVkQWRkcmVzcyh2b2lkKiBjb2RlLCBKbXBEc3QgbGFi
ZWwpCisgICAgeworICAgICAgICB2b2lkKiBiID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oKHJl
aW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGNvZGUpKSArIGxhYmVsLm1fb2Zmc2V0KTsKKyAgICAg
ICAgcmV0dXJuIGI7CisgICAgfQorCisgICAgc3RhdGljIGludCBnZXREaWZmZXJlbmNlQmV0d2Vl
bkxhYmVscyhKbXBEc3QgZnJvbSwgSm1wRHN0IHRvKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRv
Lm1fb2Zmc2V0IC0gZnJvbS5tX29mZnNldDsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGdldERp
ZmZlcmVuY2VCZXR3ZWVuTGFiZWxzKEptcERzdCBmcm9tLCBKbXBTcmMgdG8pCisgICAgeworICAg
ICAgICByZXR1cm4gdG8ubV9vZmZzZXQgLSBmcm9tLm1fb2Zmc2V0OworICAgIH0KKworICAgIHN0
YXRpYyBpbnQgZ2V0RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMoSm1wU3JjIGZyb20sIEptcERzdCB0
bykKKyAgICB7CisgICAgICAgIHJldHVybiB0by5tX29mZnNldCAtIGZyb20ubV9vZmZzZXQ7Cisg
ICAgfQorCisgICAgLy8gQXNzZW1ibGVyIGFkbWluIG1ldGhvZHM6CisKKyAgICBzaXplX3Qgc2l6
ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9idWZmZXIuc2l6ZSgpOworICAgIH0K
KworICAgIHZvaWQqIGV4ZWN1dGFibGVDb3B5KEV4ZWN1dGFibGVQb29sKiBhbGxvY2F0b3IpCisg
ICAgeworICAgICAgICB2b2lkICpyZXN1bHQgPSBtX2J1ZmZlci5leGVjdXRhYmxlQ29weShhbGxv
Y2F0b3IpOworICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiAwOworCisg
ICAgICAgIHJlbG9jYXRlSnVtcHMobV9idWZmZXIuZGF0YSgpLCByZXN1bHQpOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyB1bnNpZ25lZCBnZXRDYWxsUmV0dXJu
T2Zmc2V0KEptcFNyYyBjYWxsKQorICAgIHsKKyAgICAgICAgLy8gVGhlIHJldHVybiBhZGRyZXNz
IGlzIGFmdGVyIGEgY2FsbCBhbmQgYSBkZWxheSBzbG90IGluc3RydWN0aW9uCisgICAgICAgIHJl
dHVybiBjYWxsLm1fb2Zmc2V0OworICAgIH0KKworICAgIC8vIExpbmtpbmcgJiBwYXRjaGluZzoK
KyAgICAvLworICAgIC8vICdsaW5rJyBhbmQgJ3BhdGNoJyBtZXRob2RzIGFyZSBmb3IgdXNlIG9u
IHVucHJvdGVjdGVkIGNvZGUgLSBzdWNoIGFzIHRoZSBjb2RlCisgICAgLy8gd2l0aGluIHRoZSBB
c3NlbWJsZXJCdWZmZXIsIGFuZCBjb2RlIGJlaW5nIHBhdGNoZWQgYnkgdGhlIHBhdGNoIGJ1ZmZl
ci4gIE9uY2UKKyAgICAvLyBjb2RlIGhhcyBiZWVuIGZpbmFsaXplZCBpdCBpcyAocGxhdGZvcm0g
c3VwcG9ydCBwZXJtaXR0aW5nKSB3aXRoaW4gYSBub24tCisgICAgLy8gd3JpdGFibGUgcmVnaW9u
IG9mIG1lbW9yeTsgdG8gbW9kaWZ5IHRoZSBjb2RlIGluIGFuIGV4ZWN1dGUtb25seSBleGVjdWFi
bGUKKyAgICAvLyBwb29sIHRoZSAncmVwYXRjaCcgYW5kICdyZWxpbmsnIG1ldGhvZHMgc2hvdWxk
IGJlIHVzZWQuCisKKyAgICB2b2lkIGxpbmtKdW1wKEptcFNyYyBmcm9tLCBKbXBEc3QgdG8pCisg
ICAgeworICAgICAgICBBU1NFUlQodG8ubV9vZmZzZXQgIT0gLTEpOworICAgICAgICBBU1NFUlQo
ZnJvbS5tX29mZnNldCAhPSAtMSk7CisgICAgICAgIE1JUFNXb3JkKiBpbnNuID0gcmVpbnRlcnBy
ZXRfY2FzdDxNSVBTV29yZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1fYnVmZmVyLmRh
dGEoKSkgKyBmcm9tLm1fb2Zmc2V0KTsKKyAgICAgICAgTUlQU1dvcmQqIHRvUG9zID0gcmVpbnRl
cnByZXRfY2FzdDxNSVBTV29yZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1fYnVmZmVy
LmRhdGEoKSkgKyB0by5tX29mZnNldCk7CisKKyAgICAgICAgQVNTRVJUKCEoKihpbnNuIC0gMSkp
ICYmICEoKihpbnNuIC0gMikpICYmICEoKihpbnNuIC0gMykpICYmICEoKihpbnNuIC0gNSkpKTsK
KyAgICAgICAgaW5zbiA9IGluc24gLSA2OworICAgICAgICBsaW5rV2l0aE9mZnNldChpbnNuLCB0
b1Bvcyk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgbGlua0p1bXAodm9pZCogY29kZSwgSm1w
U3JjIGZyb20sIHZvaWQqIHRvKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGZyb20ubV9vZmZzZXQg
IT0gLTEpOworICAgICAgICBNSVBTV29yZCogaW5zbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8TUlQU1dv
cmQqPihyZWludGVycHJldF9jYXN0PGludHB0cl90Pihjb2RlKSArIGZyb20ubV9vZmZzZXQpOwor
CisgICAgICAgIEFTU0VSVCghKCooaW5zbiAtIDEpKSAmJiAhKCooaW5zbiAtIDIpKSAmJiAhKCoo
aW5zbiAtIDMpKSAmJiAhKCooaW5zbiAtIDUpKSk7CisgICAgICAgIGluc24gPSBpbnNuIC0gNjsK
KyAgICAgICAgbGlua1dpdGhPZmZzZXQoaW5zbiwgdG8pOworICAgIH0KKworICAgIHN0YXRpYyB2
b2lkIGxpbmtDYWxsKHZvaWQqIGNvZGUsIEptcFNyYyBmcm9tLCB2b2lkKiB0bykKKyAgICB7Cisg
ICAgICAgIE1JUFNXb3JkKiBpbnNuID0gcmVpbnRlcnByZXRfY2FzdDxNSVBTV29yZCo+KHJlaW50
ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGNvZGUpICsgZnJvbS5tX29mZnNldCk7CisgICAgICAgIGxp
bmtDYWxsSW50ZXJuYWwoaW5zbiwgdG8pOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGxpbmtQ
b2ludGVyKHZvaWQqIGNvZGUsIEptcERzdCBmcm9tLCB2b2lkKiB0bykKKyAgICB7CisgICAgICAg
IE1JUFNXb3JkKiBpbnNuID0gcmVpbnRlcnByZXRfY2FzdDxNSVBTV29yZCo+KHJlaW50ZXJwcmV0
X2Nhc3Q8aW50cHRyX3Q+KGNvZGUpICsgZnJvbS5tX29mZnNldCk7CisgICAgICAgIEFTU0VSVCgo
Kmluc24gJiAweGZmZTAwMDAwKSA9PSAweDNjMDAwMDAwKTsgLy8gbHVpCisgICAgICAgICppbnNu
ID0gKCppbnNuICYgMHhmZmZmMDAwMCkgfCAoKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRv
KSA+PiAxNikgJiAweGZmZmYpOworICAgICAgICBpbnNuKys7CisgICAgICAgIEFTU0VSVCgoKmlu
c24gJiAweGZjMDAwMDAwKSA9PSAweDM0MDAwMDAwKTsgLy8gb3JpCisgICAgICAgICppbnNuID0g
KCppbnNuICYgMHhmZmZmMDAwMCkgfCAocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pICYg
MHhmZmZmKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCByZWxpbmtKdW1wKHZvaWQqIGZyb20s
IHZvaWQqIHRvKQorICAgIHsKKyAgICAgICAgTUlQU1dvcmQqIGluc24gPSByZWludGVycHJldF9j
YXN0PE1JUFNXb3JkKj4oZnJvbSk7CisKKyAgICAgICAgQVNTRVJUKCEoKihpbnNuIC0gMSkpICYm
ICEoKihpbnNuIC0gNSkpKTsKKyAgICAgICAgaW5zbiA9IGluc24gLSA2OworICAgICAgICBpbnQg
Zmx1c2hTaXplID0gbGlua1dpdGhPZmZzZXQoaW5zbiwgdG8pOworCisgICAgICAgIEV4ZWN1dGFi
bGVBbGxvY2F0b3I6OmNhY2hlRmx1c2goaW5zbiwgZmx1c2hTaXplKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgdm9pZCByZWxpbmtDYWxsKHZvaWQqIGZyb20sIHZvaWQqIHRvKQorICAgIHsKKyAgICAg
ICAgdm9pZCogc3RhcnQ7CisgICAgICAgIGludCBzaXplID0gbGlua0NhbGxJbnRlcm5hbChmcm9t
LCB0byk7CisgICAgICAgIGlmIChzaXplID09IHNpemVvZihNSVBTV29yZCkpCisgICAgICAgICAg
ICBzdGFydCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRy
X3Q+KGZyb20pIC0gMiAqIHNpemVvZihNSVBTV29yZCkpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBzdGFydCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50
cHRyX3Q+KGZyb20pIC0gNCAqIHNpemVvZihNSVBTV29yZCkpOworCisgICAgICAgIEV4ZWN1dGFi
bGVBbGxvY2F0b3I6OmNhY2hlRmx1c2goc3RhcnQsIHNpemUpOworICAgIH0KKworICAgIHN0YXRp
YyB2b2lkIHJlcGF0Y2hJbnQzMih2b2lkKiBmcm9tLCBpbnQzMl90IHRvKQorICAgIHsKKyAgICAg
ICAgTUlQU1dvcmQqIGluc24gPSByZWludGVycHJldF9jYXN0PE1JUFNXb3JkKj4oZnJvbSk7Cisg
ICAgICAgIEFTU0VSVCgoKmluc24gJiAweGZmZTAwMDAwKSA9PSAweDNjMDAwMDAwKTsgLy8gbHVp
CisgICAgICAgICppbnNuID0gKCppbnNuICYgMHhmZmZmMDAwMCkgfCAoKHRvID4+IDE2KSAmIDB4
ZmZmZik7CisgICAgICAgIGluc24rKzsKKyAgICAgICAgQVNTRVJUKCgqaW5zbiAmIDB4ZmMwMDAw
MDApID09IDB4MzQwMDAwMDApOyAvLyBvcmkKKyAgICAgICAgKmluc24gPSAoKmluc24gJiAweGZm
ZmYwMDAwKSB8ICh0byAmIDB4ZmZmZik7CisgICAgICAgIGluc24tLTsKKyAgICAgICAgRXhlY3V0
YWJsZUFsbG9jYXRvcjo6Y2FjaGVGbHVzaChpbnNuLCAyICogc2l6ZW9mKE1JUFNXb3JkKSk7Cisg
ICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVwYXRjaFBvaW50ZXIodm9pZCogZnJvbSwgdm9pZCog
dG8pCisgICAgeworICAgICAgICByZXBhdGNoSW50MzIoZnJvbSwgcmVpbnRlcnByZXRfY2FzdDxp
bnQzMl90Pih0bykpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hMb2FkUHRyVG9M
RUEodm9pZCogZnJvbSkKKyAgICB7CisgICAgICAgIE1JUFNXb3JkKiBpbnNuID0gcmVpbnRlcnBy
ZXRfY2FzdDxNSVBTV29yZCo+KGZyb20pOworICAgICAgICBpbnNuID0gaW5zbiArIDM7CisgICAg
ICAgIEFTU0VSVCgoKmluc24gJiAweGZjMDAwMDAwKSA9PSAweDhjMDAwMDAwKTsgLy8gbHcKKyAg
ICAgICAgLyogbHcgLT4gYWRkaXUgKi8KKyAgICAgICAgKmluc24gPSAweDI0MDAwMDAwIHwgKCpp
bnNuICYgMHgwM2ZmZmZmZik7CisKKyAgICAgICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6Y2FjaGVG
bHVzaChpbnNuLCBzaXplb2YoTUlQU1dvcmQpKTsKKyAgICB9CisKK3ByaXZhdGU6CisKKyAgICAv
KiBVcGRhdGUgZWFjaCBqdW1wIGluIHRoZSBidWZmZXIgb2YgbmV3QmFzZS4gICovCisgICAgdm9p
ZCByZWxvY2F0ZUp1bXBzKHZvaWQqIG9sZEJhc2UsIHZvaWQqIG5ld0Jhc2UpCisgICAgeworICAg
ICAgICAvLyBDaGVjayBlYWNoIGp1bXAKKyAgICAgICAgZm9yIChKdW1wczo6SXRlcmF0b3IgaXRl
ciA9IG1fanVtcHMuYmVnaW4oKTsgaXRlciAhPSBtX2p1bXBzLmVuZCgpOyArK2l0ZXIpIHsKKyAg
ICAgICAgICAgIGludCBwb3MgPSAqaXRlcjsKKyAgICAgICAgICAgIE1JUFNXb3JkKiBpbnNuID0g
cmVpbnRlcnByZXRfY2FzdDxNSVBTV29yZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG5l
d0Jhc2UpICsgcG9zKTsKKyAgICAgICAgICAgIGluc24gPSBpbnNuICsgMjsKKyAgICAgICAgICAg
IC8vIE5lZWQgdG8gbWFrZSBzdXJlIHdlIGhhdmUgNSB2YWxpZCBpbnN0cnVjdGlvbnMgYWZ0ZXIg
cG9zCisgICAgICAgICAgICBpZiAoKHVuc2lnbmVkIGludClwb3MgPj0gbV9idWZmZXIuc2l6ZSgp
IC0gNSAqIHNpemVvZihNSVBTV29yZCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgICAgIGlmICgoKmluc24gJiAweGZjMDAwMDAwKSA9PSAweDA4MDAwMDAwKSB7IC8vIGoK
KyAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gKmluc24gJiAweDAzZmZmZmZmOworICAgICAg
ICAgICAgICAgIGludCBvbGRJbnNuQWRkcmVzcyA9IChpbnQpaW5zbiAtIChpbnQpbmV3QmFzZSAr
IChpbnQpb2xkQmFzZTsKKyAgICAgICAgICAgICAgICBpbnQgdG9wRm91ckJpdHMgPSAob2xkSW5z
bkFkZHJlc3MgKyA0KSA+PiAyODsKKyAgICAgICAgICAgICAgICBpbnQgb2xkVGFyZ2V0QWRkcmVz
cyA9ICh0b3BGb3VyQml0cyA8PCAyOCkgfCAob2Zmc2V0IDw8IDIpOworICAgICAgICAgICAgICAg
IGludCBuZXdUYXJnZXRBZGRyZXNzID0gb2xkVGFyZ2V0QWRkcmVzcyAtIChpbnQpb2xkQmFzZSAr
IChpbnQpbmV3QmFzZTsKKyAgICAgICAgICAgICAgICBpbnQgbmV3SW5zbkFkZHJlc3MgPSAoaW50
KWluc247CisgICAgICAgICAgICAgICAgaWYgKCgobmV3SW5zbkFkZHJlc3MgKyA0KSA+PiAyOCkg
PT0gKG5ld1RhcmdldEFkZHJlc3MgPj4gMjgpKQorICAgICAgICAgICAgICAgICAgICAqaW5zbiA9
IDB4MDgwMDAwMDAgfCAoKG5ld1RhcmdldEFkZHJlc3MgPj4gMikgJiAweDNmZmZmZmYpOworICAg
ICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvKiBsdWkgKi8KKyAgICAg
ICAgICAgICAgICAgICAgKmluc24gPSAweDNjMDAwMDAwIHwgKE1JUFNSZWdpc3RlcnM6OnQ5IDw8
IE9QX1NIX1JUKSB8ICgobmV3VGFyZ2V0QWRkcmVzcyA+PiAxNikgJiAweGZmZmYpOworICAgICAg
ICAgICAgICAgICAgICAvKiBvcmkgKi8KKyAgICAgICAgICAgICAgICAgICAgKihpbnNuICsgMSkg
PSAweDM0MDAwMDAwIHwgKE1JUFNSZWdpc3RlcnM6OnQ5IDw8IE9QX1NIX1JUKSB8IChNSVBTUmVn
aXN0ZXJzOjp0OSA8PCBPUF9TSF9SUykgfCAobmV3VGFyZ2V0QWRkcmVzcyAmIDB4ZmZmZik7Cisg
ICAgICAgICAgICAgICAgICAgIC8qIGpyICovCisgICAgICAgICAgICAgICAgICAgICooaW5zbiAr
IDIpID0gMHgwMDAwMDAwOCB8IChNSVBTUmVnaXN0ZXJzOjp0OSA8PCBPUF9TSF9SUyk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmICgoKmluc24gJiAweGZmZTAwMDAw
KSA9PSAweDNjMDAwMDAwKSB7IC8vIGx1aQorICAgICAgICAgICAgICAgIGludCBoaWdoID0gKCpp
bnNuICYgMHhmZmZmKSA8PCAxNjsKKyAgICAgICAgICAgICAgICBpbnQgbG93ID0gKihpbnNuICsg
MSkgJiAweGZmZmY7CisgICAgICAgICAgICAgICAgaW50IG9sZFRhcmdldEFkZHJlc3MgPSBoaWdo
IHwgbG93OworICAgICAgICAgICAgICAgIGludCBuZXdUYXJnZXRBZGRyZXNzID0gb2xkVGFyZ2V0
QWRkcmVzcyAtIChpbnQpb2xkQmFzZSArIChpbnQpbmV3QmFzZTsKKyAgICAgICAgICAgICAgICAv
KiBsdWkgKi8KKyAgICAgICAgICAgICAgICAqaW5zbiA9IDB4M2MwMDAwMDAgfCAoTUlQU1JlZ2lz
dGVyczo6dDkgPDwgT1BfU0hfUlQpIHwgKChuZXdUYXJnZXRBZGRyZXNzID4+IDE2KSAmIDB4ZmZm
Zik7CisgICAgICAgICAgICAgICAgLyogb3JpICovCisgICAgICAgICAgICAgICAgKihpbnNuICsg
MSkgPSAweDM0MDAwMDAwIHwgKE1JUFNSZWdpc3RlcnM6OnQ5IDw8IE9QX1NIX1JUKSB8IChNSVBT
UmVnaXN0ZXJzOjp0OSA8PCBPUF9TSF9SUykgfCAobmV3VGFyZ2V0QWRkcmVzcyAmIDB4ZmZmZik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGxpbmtX
aXRoT2Zmc2V0KE1JUFNXb3JkKiBpbnNuLCB2b2lkKiB0bykKKyAgICB7CisgICAgICAgIEFTU0VS
VCgoKmluc24gJiAweGZjMDAwMDAwKSA9PSAweDEwMDAwMDAwIC8vIGJlcQorICAgICAgICAgICAg
ICAgfHwgKCppbnNuICYgMHhmYzAwMDAwMCkgPT0gMHgxNDAwMDAwMCAvLyBibmUKKyAgICAgICAg
ICAgICAgIHx8ICgqaW5zbiAmIDB4ZmZmZjAwMDApID09IDB4NDUwMTAwMDAgLy8gYmMxdAorICAg
ICAgICAgICAgICAgfHwgKCppbnNuICYgMHhmZmZmMDAwMCkgPT0gMHg0NTAwMDAwMCk7IC8vIGJj
MWYKKyAgICAgICAgaW50cHRyX3QgZGlmZiA9IChyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0
bykKKyAgICAgICAgICAgICAgICAgICAgICAgICAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+
KGluc24pIC0gNCkgPj4gMjsKKworICAgICAgICBpZiAoZGlmZiA8IC0zMjc2OCB8fCBkaWZmID4g
MzI3NjcgfHwgKihpbnNuICsgMikgIT0gMHgxMDAwMDAwMykgeworICAgICAgICAgICAgLyoKKyAg
ICAgICAgICAgICAgICBDb252ZXJ0IHRoZSBzZXF1ZW5jZToKKyAgICAgICAgICAgICAgICAgIGJl
cSAkMiwgJDMsIHRhcmdldAorICAgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAg
ICBiIDFmCisgICAgICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAgICAgICAgIG5vcAorICAg
ICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgMToKKworICAgICAgICAgICAgICAg
IHRvIHRoZSBuZXcgc2VxdWVuY2UgaWYgcG9zc2libGU6CisgICAgICAgICAgICAgICAgICBibmUg
JDIsICQzLCAxZgorICAgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgICBqICAg
IHRhcmdldAorICAgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgICBub3AKKyAg
ICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgICAgIDE6CisKKyAgICAgICAgICAgICAg
ICBPUiB0byB0aGUgbmV3IHNlcXVlbmNlOgorICAgICAgICAgICAgICAgICAgYm5lICQyLCAkMywg
MWYKKyAgICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgICAgICAgbHVpICQyNSwgdGFy
Z2V0ID4+IDE2CisgICAgICAgICAgICAgICAgICBvcmkgJDI1LCAkMjUsIHRhcmdldCAmIDB4ZmZm
ZgorICAgICAgICAgICAgICAgICAganIgJDI1CisgICAgICAgICAgICAgICAgICBub3AKKyAgICAg
ICAgICAgICAgICAxOgorCisgICAgICAgICAgICAgICAgTm90ZTogYmVxL2JuZS9iYzF0IGFyZSBj
b252ZXJ0ZWQgdG8gYm5lL2JlcS9iYzFmLgorICAgICAgICAgICAgKi8KKworICAgICAgICAgICAg
aWYgKCooaW5zbiArIDIpID09IDB4MTAwMDAwMDMpIHsKKyAgICAgICAgICAgICAgICBpZiAoKCpp
bnNuICYgMHhmYzAwMDAwMCkgPT0gMHgxMDAwMDAwMCkgLy8gYmVxCisgICAgICAgICAgICAgICAg
ICAgICppbnNuID0gKCppbnNuICYgMHgwM2ZmMDAwMCkgfCAweDE0MDAwMDA1OyAvLyBibmUKKyAg
ICAgICAgICAgICAgICBlbHNlIGlmICgoKmluc24gJiAweGZjMDAwMDAwKSA9PSAweDE0MDAwMDAw
KSAvLyBibmUKKyAgICAgICAgICAgICAgICAgICAgKmluc24gPSAoKmluc24gJiAweDAzZmYwMDAw
KSB8IDB4MTAwMDAwMDU7IC8vIGJlcQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKCgqaW5zbiAm
IDB4ZmZmZjAwMDApID09IDB4NDUwMTAwMDApIC8vIGJjMXQKKyAgICAgICAgICAgICAgICAgICAg
Kmluc24gPSAweDQ1MDAwMDA1OyAvLyBiYzFmCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoMCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlu
c24gPSBpbnNuICsgMjsKKyAgICAgICAgICAgIGlmICgocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJf
dD4oaW5zbikgKyA0KSA+PiAyOAorICAgICAgICAgICAgICAgID09IHJlaW50ZXJwcmV0X2Nhc3Q8
aW50cHRyX3Q+KHRvKSA+PiAyOCkgeworICAgICAgICAgICAgICAgICppbnNuID0gMHgwODAwMDAw
MCB8ICgocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pID4+IDIpICYgMHgzZmZmZmZmKTsK
KyAgICAgICAgICAgICAgICAqKGluc24gKyAxKSA9IDA7CisgICAgICAgICAgICAgICAgcmV0dXJu
IDQgKiBzaXplb2YoTUlQU1dvcmQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpbnRw
dHJfdCBuZXdUYXJnZXRBZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pOwor
ICAgICAgICAgICAgLyogbHVpICovCisgICAgICAgICAgICAqaW5zbiA9IDB4M2MwMDAwMDAgfCAo
TUlQU1JlZ2lzdGVyczo6dDkgPDwgT1BfU0hfUlQpIHwgKChuZXdUYXJnZXRBZGRyZXNzID4+IDE2
KSAmIDB4ZmZmZik7CisgICAgICAgICAgICAvKiBvcmkgKi8KKyAgICAgICAgICAgICooaW5zbiAr
IDEpID0gMHgzNDAwMDAwMCB8IChNSVBTUmVnaXN0ZXJzOjp0OSA8PCBPUF9TSF9SVCkgfCAoTUlQ
U1JlZ2lzdGVyczo6dDkgPDwgT1BfU0hfUlMpIHwgKG5ld1RhcmdldEFkZHJlc3MgJiAweGZmZmYp
OworICAgICAgICAgICAgLyoganIgKi8KKyAgICAgICAgICAgICooaW5zbiArIDIpID0gMHgwMDAw
MDAwOCB8IChNSVBTUmVnaXN0ZXJzOjp0OSA8PCBPUF9TSF9SUyk7CisgICAgICAgICAgICByZXR1
cm4gNSAqIHNpemVvZihNSVBTV29yZCk7CisgICAgICAgIH0KKworICAgICAgICAqaW5zbiA9ICgq
aW5zbiAmIDB4ZmZmZjAwMDApIHwgKGRpZmYgJiAweGZmZmYpOworICAgICAgICByZXR1cm4gc2l6
ZW9mKE1JUFNXb3JkKTsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGxpbmtDYWxsSW50ZXJuYWwo
dm9pZCogZnJvbSwgdm9pZCogdG8pCisgICAgeworICAgICAgICBNSVBTV29yZCogaW5zbiA9IHJl
aW50ZXJwcmV0X2Nhc3Q8TUlQU1dvcmQqPihmcm9tKTsKKyAgICAgICAgaW5zbiA9IGluc24gLSA0
OworCisgICAgICAgIGlmICgoKihpbnNuICsgMikgJiAweGZjMDAwMDAwKSA9PSAweDBjMDAwMDAw
KSB7IC8vIGphbAorICAgICAgICAgICAgaWYgKChyZWludGVycHJldF9jYXN0PGludHB0cl90Pihm
cm9tKSAtIDQpID4+IDI4CisgICAgICAgICAgICAgICAgPT0gcmVpbnRlcnByZXRfY2FzdDxpbnRw
dHJfdD4odG8pID4+IDI4KSB7CisgICAgICAgICAgICAgICAgKihpbnNuICsgMikgPSAweDBjMDAw
MDAwIHwgKChyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgPj4gMikgJiAweDNmZmZmZmYp
OworICAgICAgICAgICAgICAgIHJldHVybiBzaXplb2YoTUlQU1dvcmQpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAvKiBsdWkgJDI1LCAodG8gPj4gMTYpICYgMHhmZmZmICovCisgICAg
ICAgICAgICAqaW5zbiA9IDB4M2MwMDAwMDAgfCAoTUlQU1JlZ2lzdGVyczo6dDkgPDwgT1BfU0hf
UlQpIHwgKChyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgPj4gMTYpICYgMHhmZmZmKTsK
KyAgICAgICAgICAgIC8qIG9yaSAkMjUsICQyNSwgdG8gJiAweGZmZmYgKi8KKyAgICAgICAgICAg
ICooaW5zbiArIDEpID0gMHgzNDAwMDAwMCB8IChNSVBTUmVnaXN0ZXJzOjp0OSA8PCBPUF9TSF9S
VCkgfCAoTUlQU1JlZ2lzdGVyczo6dDkgPDwgT1BfU0hfUlMpIHwgKHJlaW50ZXJwcmV0X2Nhc3Q8
aW50cHRyX3Q+KHRvKSAmIDB4ZmZmZik7CisgICAgICAgICAgICAvKiBqYWxyICQyNSAqLworICAg
ICAgICAgICAgKihpbnNuICsgMikgPSAweDAwMDBmODA5IHwgKE1JUFNSZWdpc3RlcnM6OnQ5IDw8
IE9QX1NIX1JTKTsKKyAgICAgICAgICAgIHJldHVybiAzICogc2l6ZW9mKE1JUFNXb3JkKTsKKyAg
ICAgICAgfQorCisgICAgICAgIEFTU0VSVCgoKmluc24gJiAweGZmZTAwMDAwKSA9PSAweDNjMDAw
MDAwKTsgLy8gbHVpCisgICAgICAgIEFTU0VSVCgoKihpbnNuICsgMSkgJiAweGZjMDAwMDAwKSA9
PSAweDM0MDAwMDAwKTsgLy8gb3JpCisKKyAgICAgICAgLyogbHVpICovCisgICAgICAgICppbnNu
ID0gKCppbnNuICYgMHhmZmZmMDAwMCkgfCAoKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRv
KSA+PiAxNikgJiAweGZmZmYpOworICAgICAgICAvKiBvcmkgKi8KKyAgICAgICAgKihpbnNuICsg
MSkgPSAoKihpbnNuICsgMSkgJiAweGZmZmYwMDAwKSB8IChyZWludGVycHJldF9jYXN0PGludHB0
cl90Pih0bykgJiAweGZmZmYpOworICAgICAgICByZXR1cm4gMiAqIHNpemVvZihNSVBTV29yZCk7
CisgICAgfQorCisgICAgQXNzZW1ibGVyQnVmZmVyIG1fYnVmZmVyOworICAgIEp1bXBzIG1fanVt
cHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShBU1NFTUJM
RVIpICYmIENQVShNSVBTKQorCisjZW5kaWYgLy8gTUlQU0Fzc2VtYmxlcl9oCkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gNTUxOTUpCisr
KyBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMzgsNiArMzgsMTIgQEAgbmFtZXNwYWNlIEpTQyB7IHR5cGVkZWYgTWFjcm9Bc3NlbWJs
ZXJBUgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQVJNLmgiCiBuYW1lc3BhY2UgSlNDIHsgdHlw
ZWRlZiBNYWNyb0Fzc2VtYmxlckFSTSBNYWNyb0Fzc2VtYmxlckJhc2U7IH07CiAKKyNlbGlmIENQ
VShNSVBTKQorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyTUlQUy5oIgorbmFtZXNwYWNlIEpTQyB7
Cit0eXBlZGVmIE1hY3JvQXNzZW1ibGVyTUlQUyBNYWNyb0Fzc2VtYmxlckJhc2U7Cit9OworCiAj
ZWxpZiBDUFUoWDg2KQogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyWDg2LmgiCiBuYW1lc3BhY2Ug
SlNDIHsgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlclg4NiBNYWNyb0Fzc2VtYmxlckJhc2U7IH07Cklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyTUlQUy5oCShy
ZXZpc2lvbiAwKQorKysgSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyTUlQ
Uy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2NjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEwIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBNSVBTIFRFQ0hOT0xPR0lFUywg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIE1JUFMgVEVDSE5PTE9HSUVT
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBNYWNyb0Fzc2VtYmxlck1JUFNfaAorI2RlZmluZSBNYWNyb0Fzc2VtYmxl
ck1JUFNfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoQVNTRU1C
TEVSKSAmJiBDUFUoTUlQUykKKworI2luY2x1ZGUgIkFic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCIK
KyNpbmNsdWRlICJNSVBTQXNzZW1ibGVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBN
YWNyb0Fzc2VtYmxlck1JUFMgOiBwdWJsaWMgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxNSVBTQXNz
ZW1ibGVyPiB7CitwdWJsaWM6CisKKyAgICBNYWNyb0Fzc2VtYmxlck1JUFMoKQorICAgICAgICA6
IG1fZml4ZWRXaWR0aChmYWxzZSkKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0IFNj
YWxlIFNjYWxlUHRyID0gVGltZXNGb3VyOworCisgICAgLy8gRm9yIHN0b3JpbmcgaW1tZWRpYXRl
IG51bWJlcgorICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGltbVRlbXBSZWdpc3RlciA9IE1J
UFNSZWdpc3RlcnM6OnQwOworICAgIC8vIEZvciBzdG9yaW5nIGRhdGEgbG9hZGVkIGZyb20gdGhl
IG1lbW9yeQorICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGRhdGFUZW1wUmVnaXN0ZXIgPSBN
SVBTUmVnaXN0ZXJzOjp0MTsKKyAgICAvLyBGb3Igc3RvcmluZyBhZGRyZXNzIGJhc2UKKyAgICBz
dGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBhZGRyVGVtcFJlZ2lzdGVyID0gTUlQU1JlZ2lzdGVyczo6
dDI7CisgICAgLy8gRm9yIHN0b3JpbmcgY29tcGFyZSByZXN1bHQKKyAgICBzdGF0aWMgY29uc3Qg
UmVnaXN0ZXJJRCBjbXBUZW1wUmVnaXN0ZXIgPSBNSVBTUmVnaXN0ZXJzOjp0MzsKKworICAgIC8v
IEZQIHRlbXAgcmVnaXN0ZXIKKyAgICBzdGF0aWMgY29uc3QgRlBSZWdpc3RlcklEIGZwVGVtcFJl
Z2lzdGVyID0gTUlQU1JlZ2lzdGVyczo6ZjE2OworCisgICAgZW51bSBDb25kaXRpb24geworICAg
ICAgICBFcXVhbCwKKyAgICAgICAgTm90RXF1YWwsCisgICAgICAgIEFib3ZlLAorICAgICAgICBB
Ym92ZU9yRXF1YWwsCisgICAgICAgIEJlbG93LAorICAgICAgICBCZWxvd09yRXF1YWwsCisgICAg
ICAgIEdyZWF0ZXJUaGFuLAorICAgICAgICBHcmVhdGVyVGhhbk9yRXF1YWwsCisgICAgICAgIExl
c3NUaGFuLAorICAgICAgICBMZXNzVGhhbk9yRXF1YWwsCisgICAgICAgIE92ZXJmbG93LAorICAg
ICAgICBTaWduZWQsCisgICAgICAgIFplcm8sCisgICAgICAgIE5vblplcm8KKyAgICB9OworCisg
ICAgZW51bSBEb3VibGVDb25kaXRpb24geworICAgICAgICBEb3VibGVFcXVhbCwKKyAgICAgICAg
RG91YmxlTm90RXF1YWwsCisgICAgICAgIERvdWJsZUdyZWF0ZXJUaGFuLAorICAgICAgICBEb3Vi
bGVHcmVhdGVyVGhhbk9yRXF1YWwsCisgICAgICAgIERvdWJsZUxlc3NUaGFuLAorICAgICAgICBE
b3VibGVMZXNzVGhhbk9yRXF1YWwsCisgICAgICAgIERvdWJsZUVxdWFsT3JVbm9yZGVyZWQsCisg
ICAgICAgIERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsCisgICAgICAgIERvdWJsZUdyZWF0ZXJU
aGFuT3JVbm9yZGVyZWQsCisgICAgICAgIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRl
cmVkLAorICAgICAgICBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLAorICAgICAgICBEb3VibGVM
ZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZAorICAgIH07CisKKyAgICBzdGF0aWMgY29uc3QgUmVn
aXN0ZXJJRCBzdGFja1BvaW50ZXJSZWdpc3RlciA9IE1JUFNSZWdpc3RlcnM6OnNwOworICAgIHN0
YXRpYyBjb25zdCBSZWdpc3RlcklEIHJldHVybkFkZHJlc3NSZWdpc3RlciA9IE1JUFNSZWdpc3Rl
cnM6OnJhOworCisgICAgLy8gSW50ZWdlciBhcml0aG1ldGljIG9wZXJhdGlvbnM6CisgICAgLy8K
KyAgICAvLyBPcGVyYXRpb25zIGFyZSB0eXBpY2FsbHkgdHdvIG9wZXJhbmQgLSBvcGVyYXRpb24o
c291cmNlLCBzcmNEc3QpCisgICAgLy8gRm9yIG1hbnkgb3BlcmF0aW9ucyB0aGUgc291cmNlIG1h
eSBiZSBhbiBJbW0zMiwgdGhlIHNyY0RzdCBvcGVyYW5kCisgICAgLy8gbWF5IG9mdGVuIGJlIGEg
bWVtb3J5IGxvY2F0aW9uIChleHBsaWN0bHkgZGVzY3JpYmVkIHVzaW5nIGFuIEFkZHJlc3MKKyAg
ICAvLyBvYmplY3QpLgorCisgICAgdm9pZCBhZGQzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJ
RCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShkZXN0LCBkZXN0LCBzcmMp
OworICAgIH0KKworICAgIHZvaWQgYWRkMzIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICBhZGQzMihpbW0sIGRlc3QsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQg
YWRkMzIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsK
KyAgICAgICAgaWYgKCFpbW0ubV9pc1BvaW50ZXIgJiYgaW1tLm1fdmFsdWUgPj0gLTMyNzY4ICYm
IGltbS5tX3ZhbHVlIDw9IDMyNzY3CisgICAgICAgICAgICAmJiAhbV9maXhlZFdpZHRoKSB7Cisg
ICAgICAgICAgICAvKgorICAgICAgICAgICAgICBhZGRpdSAgICAgZGVzdCwgc3JjLCBpbW0KKyAg
ICAgICAgICAgICovCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRpdShkZXN0LCBzcmMsIGlt
bS5tX3ZhbHVlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAg
ICAgIGxpICAgICAgICBpbW1UZW1wLCBpbW0KKyAgICAgICAgICAgICAgYWRkdSAgICAgIGRlc3Qs
IHNyYywgaW1tVGVtcAorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1vdmUoaW1tLCBpbW1U
ZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShkZXN0LCBzcmMsIGlt
bVRlbXBSZWdpc3Rlcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGFkZDMyKEltbTMy
IGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgaWYgKGFkZHJlc3Mub2Zmc2V0
ID49IC0zMjc2OCAmJiBhZGRyZXNzLm9mZnNldCA8PSAzMjc2NworICAgICAgICAgICAgJiYgIW1f
Zml4ZWRXaWR0aCkgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgbHcgICAgICAgIGRh
dGFUZW1wLCBvZmZzZXQoYmFzZSkKKyAgICAgICAgICAgICAgbGkgICAgICAgIGltbVRlbXAsIGlt
bQorICAgICAgICAgICAgICBhZGR1ICAgICAgZGF0YVRlbXAsIGRhdGFUZW1wLCBpbW1UZW1wCisg
ICAgICAgICAgICAgIHN3ICAgICAgICBkYXRhVGVtcCwgb2Zmc2V0KGJhc2UpCisgICAgICAgICAg
ICAqLworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHcoZGF0YVRlbXBSZWdpc3RlciwgYWRkcmVz
cy5iYXNlLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAgICAgICBpZiAoIWltbS5tX2lzUG9pbnRl
cgorICAgICAgICAgICAgICAgICYmIGltbS5tX3ZhbHVlID49IC0zMjc2OCAmJiBpbW0ubV92YWx1
ZSA8PSAzMjc2NworICAgICAgICAgICAgICAgICYmICFtX2ZpeGVkV2lkdGgpCisgICAgICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuYWRkaXUoZGF0YVRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3Rl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbW0ubV92YWx1ZSk7CisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBtb3ZlKGltbSwgaW1tVGVtcFJlZ2lzdGVy
KTsKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGRhdGFUZW1wUmVnaXN0ZXIsIGRh
dGFUZW1wUmVnaXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbW1UZW1w
UmVnaXN0ZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3coZGF0
YVRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICBsdWkgICAgICAgYWRkclRlbXAs
IChvZmZzZXQgKyAweDgwMDApID4+IDE2CisgICAgICAgICAgICAgIGFkZHUgICAgICBhZGRyVGVt
cCwgYWRkclRlbXAsIGJhc2UKKyAgICAgICAgICAgICAgbHcgICAgICAgIGRhdGFUZW1wLCAob2Zm
c2V0ICYgMHhmZmZmKShhZGRyVGVtcCkKKyAgICAgICAgICAgICAgbGkgICAgICAgIGltbXRlbXAs
IGltbQorICAgICAgICAgICAgICBhZGR1ICAgICAgZGF0YVRlbXAsIGRhdGFUZW1wLCBpbW1UZW1w
CisgICAgICAgICAgICAgIHN3ICAgICAgICBkYXRhVGVtcCwgKG9mZnNldCAmIDB4ZmZmZikoYWRk
clRlbXApCisgICAgICAgICAgICAqLworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHVpKGFkZHJU
ZW1wUmVnaXN0ZXIsIChhZGRyZXNzLm9mZnNldCArIDB4ODAwMCkgPj4gMTYpOworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBh
ZGRyZXNzLmJhc2UpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHcoZGF0YVRlbXBSZWdpc3Rl
ciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQpOworCisgICAgICAgICAgICBpZiAo
aW1tLm1fdmFsdWUgPj0gLTMyNzY4ICYmIGltbS5tX3ZhbHVlIDw9IDMyNzY3ICYmICFtX2ZpeGVk
V2lkdGgpCisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkaXUoZGF0YVRlbXBSZWdpc3Rl
ciwgZGF0YVRlbXBSZWdpc3RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bW0ubV92YWx1ZSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBtb3ZlKGlt
bSwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGRh
dGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
bV9hc3NlbWJsZXIuc3coZGF0YVRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVz
cy5vZmZzZXQpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBhZGQzMihBZGRyZXNzIHNy
YywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbG9hZDMyKHNyYywgZGF0YVRlbXBS
ZWdpc3Rlcik7CisgICAgICAgIGFkZDMyKGRhdGFUZW1wUmVnaXN0ZXIsIGRlc3QpOworICAgIH0K
KworICAgIHZvaWQgYWRkMzIoUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgZGVzdCkKKyAgICB7Cisg
ICAgICAgIGlmIChkZXN0Lm9mZnNldCA+PSAtMzI3NjggJiYgZGVzdC5vZmZzZXQgPD0gMzI3Njcg
JiYgIW1fZml4ZWRXaWR0aCkgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgbHcgICAg
ICAgIGRhdGFUZW1wLCBvZmZzZXQoYmFzZSkKKyAgICAgICAgICAgICAgYWRkdSAgICAgIGRhdGFU
ZW1wLCBkYXRhVGVtcCwgc3JjCisgICAgICAgICAgICAgIHN3ICAgICAgICBkYXRhVGVtcCwgb2Zm
c2V0KGJhc2UpCisgICAgICAgICAgICAqLworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHcoZGF0
YVRlbXBSZWdpc3RlciwgZGVzdC5iYXNlLCBkZXN0Lm9mZnNldCk7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5hZGR1KGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsIHNyYyk7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5zdyhkYXRhVGVtcFJlZ2lzdGVyLCBkZXN0LmJhc2UsIGRl
c3Qub2Zmc2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAg
ICAgIGx1aSAgICAgICBhZGRyVGVtcCwgKG9mZnNldCArIDB4ODAwMCkgPj4gMTYKKyAgICAgICAg
ICAgICAgYWRkdSAgICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgYmFzZQorICAgICAgICAgICAgICBs
dyAgICAgICAgZGF0YVRlbXAsIChvZmZzZXQgJiAweGZmZmYpKGFkZHJUZW1wKQorICAgICAgICAg
ICAgICBhZGR1ICAgICAgZGF0YVRlbXAsIGRhdGFUZW1wLCBzcmMKKyAgICAgICAgICAgICAgc3cg
ICAgICAgIGRhdGFUZW1wLCAob2Zmc2V0ICYgMHhmZmZmKShhZGRyVGVtcCkKKyAgICAgICAgICAg
ICovCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sdWkoYWRkclRlbXBSZWdpc3RlciwgKGRlc3Qu
b2Zmc2V0ICsgMHg4MDAwKSA+PiAxNik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFk
ZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGRlc3QuYmFzZSk7CisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5sdyhkYXRhVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBkZXN0
Lm9mZnNldCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGRhdGFUZW1wUmVnaXN0ZXIs
IGRhdGFUZW1wUmVnaXN0ZXIsIHNyYyk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdyhkYXRh
VGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBkZXN0Lm9mZnNldCk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICB2b2lkIGFkZDMyKEltbTMyIGltbSwgQWJzb2x1dGVBZGRyZXNzIGFkZHJl
c3MpCisgICAgeworICAgICAgICAvKgorICAgICAgICAgICBsaSAgIGFkZHJUZW1wLCBhZGRyZXNz
CisgICAgICAgICAgIGxpICAgaW1tVGVtcCwgaW1tCisgICAgICAgICAgIGx3ICAgZGF0YVRlbXAs
IDAoYWRkclRlbXApCisgICAgICAgICAgIGFkZHUgZGF0YVRlbXAsIGRhdGFUZW1wLCBpbW1UZW1w
CisgICAgICAgICAgIHN3ICAgZGF0YVRlbXAsIDAoYWRkclRlbXApCisgICAgICAgICovCisgICAg
ICAgIG1vdmUoSW1tUHRyKGFkZHJlc3MubV9wdHIpLCBhZGRyVGVtcFJlZ2lzdGVyKTsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubHcoZGF0YVRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgMCk7
CisgICAgICAgIGlmICghaW1tLm1faXNQb2ludGVyICYmIGltbS5tX3ZhbHVlID49IC0zMjc2OCAm
JiBpbW0ubV92YWx1ZSA8PSAzMjc2NworICAgICAgICAgICAgJiYgIW1fZml4ZWRXaWR0aCkKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGl1KGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVn
aXN0ZXIsIGltbS5tX3ZhbHVlKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtb3ZlKGlt
bSwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoZGF0YVRl
bXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3RlciwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAg
fQorICAgICAgICBtX2Fzc2VtYmxlci5zdyhkYXRhVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lz
dGVyLCAwKTsKKyAgICB9CisKKyAgICB2b2lkIGFuZDMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3Rl
cklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hbmRJbnNuKGRlc3QsIGRlc3Qs
IHNyYyk7CisgICAgfQorCisgICAgdm9pZCBhbmQzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB7CisgICAgICAgIGlmICghaW1tLm1faXNQb2ludGVyICYmICFpbW0ubV92YWx1ZSAm
JiAhbV9maXhlZFdpZHRoKQorICAgICAgICAgICAgbW92ZShNSVBTUmVnaXN0ZXJzOjp6ZXJvLCBk
ZXN0KTsKKyAgICAgICAgZWxzZSBpZiAoIWltbS5tX2lzUG9pbnRlciAmJiBpbW0ubV92YWx1ZSA+
IDAgJiYgaW1tLm1fdmFsdWUgPCA2NTUzNQorICAgICAgICAgICAgICAgICAmJiAhbV9maXhlZFdp
ZHRoKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuYW5kaShkZXN0LCBkZXN0LCBpbW0ubV92YWx1
ZSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgbGkgICAg
ICAgIGltbVRlbXAsIGltbQorICAgICAgICAgICAgICBhbmQgICAgICAgZGVzdCwgZGVzdCwgaW1t
VGVtcAorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1vdmUoaW1tLCBpbW1UZW1wUmVnaXN0
ZXIpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYW5kSW5zbihkZXN0LCBkZXN0LCBpbW1UZW1w
UmVnaXN0ZXIpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBsc2hpZnQzMihJbW0zMiBp
bW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnNsbChkZXN0
LCBkZXN0LCBpbW0ubV92YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBsc2hpZnQzMihSZWdpc3Rl
cklEIHNoaWZ0QW1vdW50LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5zbGx2KGRlc3QsIGRlc3QsIHNoaWZ0QW1vdW50KTsKKyAgICB9CisKKyAgICB2b2lkIG11
bDMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5tdWwoZGVzdCwgZGVzdCwgc3JjKTsKKyAgICB9CisKKyAgICB2b2lkIG11bDMyKElt
bTMyIGltbSwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAg
IGlmICghaW1tLm1faXNQb2ludGVyICYmICFpbW0ubV92YWx1ZSAmJiAhbV9maXhlZFdpZHRoKQor
ICAgICAgICAgICAgbW92ZShNSVBTUmVnaXN0ZXJzOjp6ZXJvLCBkZXN0KTsKKyAgICAgICAgZWxz
ZSBpZiAoIWltbS5tX2lzUG9pbnRlciAmJiBpbW0ubV92YWx1ZSA9PSAxICYmICFtX2ZpeGVkV2lk
dGgpCisgICAgICAgICAgICBtb3ZlKHNyYywgZGVzdCk7CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgLyoKKyAgICAgICAgICAgICAgICBsaSAgICAgIGRhdGFUZW1wLCBpbW0KKyAgICAgICAg
ICAgICAgICBtdWwgICAgIGRlc3QsIHNyYywgZGF0YVRlbXAKKyAgICAgICAgICAgICovCisgICAg
ICAgICAgICBtb3ZlKGltbSwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5tdWwoZGVzdCwgc3JjLCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHZvaWQgbm90MzIoUmVnaXN0ZXJJRCBzcmNEZXN0KQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIubm9yKHNyY0Rlc3QsIHNyY0Rlc3QsIE1JUFNSZWdpc3RlcnM6Onplcm8pOworICAg
IH0KKworICAgIHZvaWQgb3IzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAg
IHsKKyAgICAgICAgbV9hc3NlbWJsZXIub3JJbnNuKGRlc3QsIGRlc3QsIHNyYyk7CisgICAgfQor
CisgICAgdm9pZCBvcjMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAg
ICAgaWYgKCFpbW0ubV9pc1BvaW50ZXIgJiYgIWltbS5tX3ZhbHVlICYmICFtX2ZpeGVkV2lkdGgp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKCFpbW0ubV9pc1BvaW50ZXIgJiYg
aW1tLm1fdmFsdWUgPiAwICYmIGltbS5tX3ZhbHVlIDwgNjU1MzUKKyAgICAgICAgICAgICYmICFt
X2ZpeGVkV2lkdGgpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm9yaShkZXN0LCBkZXN0LCBp
bW0ubV92YWx1ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAv
KgorICAgICAgICAgICAgbGkgICAgICBkYXRhVGVtcCwgaW1tCisgICAgICAgICAgICBvciAgICAg
IGRlc3QsIGRlc3QsIGRhdGFUZW1wCisgICAgICAgICovCisgICAgICAgIG1vdmUoaW1tLCBkYXRh
VGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIub3JJbnNuKGRlc3QsIGRlc3QsIGRh
dGFUZW1wUmVnaXN0ZXIpOworICAgIH0KKworICAgIHZvaWQgcnNoaWZ0MzIoUmVnaXN0ZXJJRCBz
aGlmdEFtb3VudCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
c3JhdihkZXN0LCBkZXN0LCBzaGlmdEFtb3VudCk7CisgICAgfQorCisgICAgdm9pZCByc2hpZnQz
MihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVy
LnNyYShkZXN0LCBkZXN0LCBpbW0ubV92YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBzdWIzMihS
ZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIuc3VidShkZXN0LCBkZXN0LCBzcmMpOworICAgIH0KKworICAgIHZvaWQgc3ViMzIoSW1tMzIg
aW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAoIWltbS5tX2lzUG9pbnRl
ciAmJiBpbW0ubV92YWx1ZSA+PSAtMzI3NjcgJiYgaW1tLm1fdmFsdWUgPD0gMzI3NjgKKyAgICAg
ICAgICAgICYmICFtX2ZpeGVkV2lkdGgpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAg
IGFkZGl1ICAgICBkZXN0LCBzcmMsIGltbQorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLmFkZGl1KGRlc3QsIGRlc3QsIC1pbW0ubV92YWx1ZSk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICBsaSAgICAgICAgaW1tVGVtcCwgaW1t
CisgICAgICAgICAgICAgIHN1YnUgICAgICBkZXN0LCBzcmMsIGltbVRlbXAKKyAgICAgICAgICAg
ICovCisgICAgICAgICAgICBtb3ZlKGltbSwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLnN1YnUoZGVzdCwgZGVzdCwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHZvaWQgc3ViMzIoSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisg
ICAgeworICAgICAgICBpZiAoYWRkcmVzcy5vZmZzZXQgPj0gLTMyNzY4ICYmIGFkZHJlc3Mub2Zm
c2V0IDw9IDMyNzY3CisgICAgICAgICAgICAmJiAhbV9maXhlZFdpZHRoKSB7CisgICAgICAgICAg
ICAvKgorICAgICAgICAgICAgICBsdyAgICAgICAgZGF0YVRlbXAsIG9mZnNldChiYXNlKQorICAg
ICAgICAgICAgICBsaSAgICAgICAgaW1tVGVtcCwgaW1tCisgICAgICAgICAgICAgIHN1YnUgICAg
ICBkYXRhVGVtcCwgZGF0YVRlbXAsIGltbVRlbXAKKyAgICAgICAgICAgICAgc3cgICAgICAgIGRh
dGFUZW1wLCBvZmZzZXQoYmFzZSkKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5sdyhkYXRhVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mub2Zmc2V0KTsK
KyAgICAgICAgICAgIGlmICghaW1tLm1faXNQb2ludGVyCisgICAgICAgICAgICAgICAgJiYgaW1t
Lm1fdmFsdWUgPj0gLTMyNzY3ICYmIGltbS5tX3ZhbHVlIDw9IDMyNzY4CisgICAgICAgICAgICAg
ICAgJiYgIW1fZml4ZWRXaWR0aCkKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRpdShk
YXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC1pbW0ubV92YWx1ZSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBtb3ZlKGltbSwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBtX2Fz
c2VtYmxlci5zdWJ1KGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3coZGF0YVRlbXBSZWdpc3RlciwgYWRkcmVzcy5i
YXNlLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKgor
ICAgICAgICAgICAgICBsdWkgICAgICAgYWRkclRlbXAsIChvZmZzZXQgKyAweDgwMDApID4+IDE2
CisgICAgICAgICAgICAgIGFkZHUgICAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGJhc2UKKyAgICAg
ICAgICAgICAgbHcgICAgICAgIGRhdGFUZW1wLCAob2Zmc2V0ICYgMHhmZmZmKShhZGRyVGVtcCkK
KyAgICAgICAgICAgICAgbGkgICAgICAgIGltbXRlbXAsIGltbQorICAgICAgICAgICAgICBzdWJ1
ICAgICAgZGF0YVRlbXAsIGRhdGFUZW1wLCBpbW1UZW1wCisgICAgICAgICAgICAgIHN3ICAgICAg
ICBkYXRhVGVtcCwgKG9mZnNldCAmIDB4ZmZmZikoYWRkclRlbXApCisgICAgICAgICAgICAqLwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIubHVpKGFkZHJUZW1wUmVnaXN0ZXIsIChhZGRyZXNzLm9m
ZnNldCArIDB4ODAwMCkgPj4gMTYpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRy
VGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UpOworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIubHcoZGF0YVRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRk
cmVzcy5vZmZzZXQpOworCisgICAgICAgICAgICBpZiAoIWltbS5tX2lzUG9pbnRlcgorICAgICAg
ICAgICAgICAgICYmIGltbS5tX3ZhbHVlID49IC0zMjc2NyAmJiBpbW0ubV92YWx1ZSA8PSAzMjc2
OAorICAgICAgICAgICAgICAgICYmICFtX2ZpeGVkV2lkdGgpCisgICAgICAgICAgICAgICAgbV9h
c3NlbWJsZXIuYWRkaXUoZGF0YVRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3RlciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtaW1tLm1fdmFsdWUpOworICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgbW92ZShpbW0sIGltbVRlbXBSZWdpc3Rlcik7CisgICAg
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3VidShkYXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJl
Z2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1tVGVtcFJlZ2lzdGVy
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN3KGRhdGFUZW1wUmVn
aXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHZvaWQgc3ViMzIoQWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7
CisgICAgICAgIGxvYWQzMihzcmMsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICBzdWIzMihk
YXRhVGVtcFJlZ2lzdGVyLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHN1YjMyKEltbTMyIGlt
bSwgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICAvKgorICAgICAgICAg
ICBsaSAgIGFkZHJUZW1wLCBhZGRyZXNzCisgICAgICAgICAgIGxpICAgaW1tVGVtcCwgaW1tCisg
ICAgICAgICAgIGx3ICAgZGF0YVRlbXAsIDAoYWRkclRlbXApCisgICAgICAgICAgIHN1YnUgZGF0
YVRlbXAsIGRhdGFUZW1wLCBpbW1UZW1wCisgICAgICAgICAgIHN3ICAgZGF0YVRlbXAsIDAoYWRk
clRlbXApCisgICAgICAgICovCisgICAgICAgIG1vdmUoSW1tUHRyKGFkZHJlc3MubV9wdHIpLCBh
ZGRyVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubHcoZGF0YVRlbXBSZWdpc3Rl
ciwgYWRkclRlbXBSZWdpc3RlciwgMCk7CisKKyAgICAgICAgaWYgKCFpbW0ubV9pc1BvaW50ZXIg
JiYgaW1tLm1fdmFsdWUgPj0gLTMyNzY3ICYmIGltbS5tX3ZhbHVlIDw9IDMyNzY4CisgICAgICAg
ICAgICAmJiAhbV9maXhlZFdpZHRoKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRpdShk
YXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLWltbS5tX3ZhbHVlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1v
dmUoaW1tLCBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3VidShk
YXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLCBpbW1UZW1wUmVnaXN0ZXIpOworICAg
ICAgICB9CisgICAgICAgIG1fYXNzZW1ibGVyLnN3KGRhdGFUZW1wUmVnaXN0ZXIsIGFkZHJUZW1w
UmVnaXN0ZXIsIDApOworICAgIH0KKworICAgIHZvaWQgeG9yMzIoUmVnaXN0ZXJJRCBzcmMsIFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnhvckluc24oZGVzdCwg
ZGVzdCwgc3JjKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjMyKEltbTMyIGltbSwgUmVnaXN0ZXJJ
RCBkZXN0KQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICAgIGxpICBpbW1UZW1wLCBpbW0K
KyAgICAgICAgICAgIHhvciBkZXN0LCBkZXN0LCBpbW1UZW1wCisgICAgICAgICovCisgICAgICAg
IG1vdmUoaW1tLCBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICBtX2Fzc2VtYmxlci54b3JJbnNu
KGRlc3QsIGRlc3QsIGltbVRlbXBSZWdpc3Rlcik7CisgICAgfQorCisgICAgLy8gTWVtb3J5IGFj
Y2VzcyBvcGVyYXRpb25zOgorICAgIC8vCisgICAgLy8gTG9hZHMgYXJlIG9mIHRoZSBmb3JtIGxv
YWQoYWRkcmVzcywgZGVzdGluYXRpb24pIGFuZCBzdG9yZXMgb2YgdGhlIGZvcm0KKyAgICAvLyBz
dG9yZShzb3VyY2UsIGFkZHJlc3MpLiAgVGhlIHNvdXJjZSBmb3IgYSBzdG9yZSBtYXkgYmUgYW4g
SW1tMzIuICBBZGRyZXNzCisgICAgLy8gb3BlcmFuZCBvYmplY3RzIHRvIGxvYWRzIGFuZCBzdG9y
ZSB3aWxsIGJlIGltcGxpY2l0bHkgY29uc3RydWN0ZWQgaWYgYQorICAgIC8vIHJlZ2lzdGVyIGlz
IHBhc3NlZC4KKworICAgIHZvaWQgbG9hZDMyKEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzLCBSZWdp
c3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAoYWRkcmVzcy5vZmZzZXQgPj0gLTMyNzY4
ICYmIGFkZHJlc3Mub2Zmc2V0IDw9IDMyNzY3CisgICAgICAgICAgICAmJiAhbV9maXhlZFdpZHRo
KQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubHcoZGVzdCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNz
Lm9mZnNldCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAg
ICBsdWkgICAgIGFkZHJUZW1wLCAob2Zmc2V0ICsgMHg4MDAwKSA+PiAxNgorICAgICAgICAgICAg
ICAgIGFkZHUgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBiYXNlCisgICAgICAgICAgICAgICAgbHcg
ICAgICBkZXN0LCAob2Zmc2V0ICYgMHhmZmZmKShhZGRyVGVtcCkKKyAgICAgICAgICAgICAgKi8K
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx1aShhZGRyVGVtcFJlZ2lzdGVyLCAoYWRkcmVzcy5v
ZmZzZXQgKyAweDgwMDApID4+IDE2KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRk
clRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlKTsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLmx3KGRlc3QsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgbG9hZDMyKEJhc2VJbmRleCBhZGRyZXNz
LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAoYWRkcmVzcy5vZmZzZXQgPj0g
LTMyNzY4ICYmIGFkZHJlc3Mub2Zmc2V0IDw9IDMyNzY3CisgICAgICAgICAgICAmJiAhbV9maXhl
ZFdpZHRoKSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgIHNsbCAgICAgYWRkclRl
bXAsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUKKyAgICAgICAgICAgICAgICBhZGR1ICAg
IGFkZHJUZW1wLCBhZGRyVGVtcCwgYWRkcmVzcy5iYXNlCisgICAgICAgICAgICAgICAgbHcgICAg
ICBkZXN0LCBhZGRyZXNzLm9mZnNldChhZGRyVGVtcCkKKyAgICAgICAgICAgICovCisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5zbGwoYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5pbmRleCwgYWRk
cmVzcy5zY2FsZSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0
ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSk7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5sdyhkZXN0LCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgIHNsbCAgICAgYWRkclRl
bXAsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUKKyAgICAgICAgICAgICAgICBhZGR1ICAg
IGFkZHJUZW1wLCBhZGRyVGVtcCwgYWRkcmVzcy5iYXNlCisgICAgICAgICAgICAgICAgbHVpICAg
ICBpbW1UZW1wLCAoYWRkcmVzcy5vZmZzZXQgKyAweDgwMDApID4+IDE2CisgICAgICAgICAgICAg
ICAgYWRkdSAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGltbVRlbXAKKyAgICAgICAgICAgICAgICBs
dyAgICAgIGRlc3QsIChhZGRyZXNzLm9mZnNldCAmIDB4ZmZmZikoYXQpCisgICAgICAgICAgICAq
LworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2xsKGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mu
aW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRy
VGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UpOworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIubHVpKGltbVRlbXBSZWdpc3RlciwgKGFkZHJlc3Mub2Zmc2V0ICsgMHg4
MDAwKSA+PiAxNik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0
ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltbVRl
bXBSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sdyhkZXN0LCBhZGRyVGVtcFJl
Z2lzdGVyLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGxv
YWQzMldpdGhVbmFsaWduZWRIYWxmV29yZHMoQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIGlmIChhZGRyZXNzLm9mZnNldCA+PSAtMzI3NjggJiYgYWRk
cmVzcy5vZmZzZXQgPD0gMzI3NjQKKyAgICAgICAgICAgICYmICFtX2ZpeGVkV2lkdGgpIHsKKyAg
ICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgc2xsICAgICBhZGRyVGVtcCwgYWRkcmVzcy5p
bmRleCwgYWRkcmVzcy5zY2FsZQorICAgICAgICAgICAgICAgIGFkZHUgICAgYWRkclRlbXAsIGFk
ZHJUZW1wLCBhZGRyZXNzLmJhc2UKKyAgICAgICAgICAgICAgICAoQmlnLUVuZGlhbikKKyAgICAg
ICAgICAgICAgICBsd2wgICAgIGRlc3QsIGFkZHJlc3Mub2Zmc2V0KGFkZHJUZW1wKQorICAgICAg
ICAgICAgICAgIGx3ciAgICAgZGVzdCwgYWRkcmVzcy5vZmZzZXQrMyhhZGRyVGVtcCkKKyAgICAg
ICAgICAgICAgICAoTGl0dGxlLUVuZGlhbikKKyAgICAgICAgICAgICAgICBsd2wgICAgIGRlc3Qs
IGFkZHJlc3Mub2Zmc2V0KzMoYWRkclRlbXApCisgICAgICAgICAgICAgICAgbHdyICAgICBkZXN0
LCBhZGRyZXNzLm9mZnNldChhZGRyVGVtcCkKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5zbGwoYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5z
Y2FsZSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFk
ZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSk7CisjaWYgQ1BVKEJJR19FTkRJQU4pCisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5sd2woZGVzdCwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5v
ZmZzZXQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHdyKGRlc3QsIGFkZHJUZW1wUmVnaXN0
ZXIsIGFkZHJlc3Mub2Zmc2V0ICsgMyk7CisjZWxzZQorICAgICAgICAgICAgbV9hc3NlbWJsZXIu
bHdsKGRlc3QsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0ICsgMyk7CisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5sd3IoZGVzdCwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZz
ZXQpOworCisjZW5kaWYKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qCisgICAgICAg
ICAgICAgICAgc2xsICAgICBhZGRyVGVtcCwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZQor
ICAgICAgICAgICAgICAgIGFkZHUgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBhZGRyZXNzLmJhc2UK
KyAgICAgICAgICAgICAgICBsdWkgICAgIGltbVRlbXAsIGFkZHJlc3Mub2Zmc2V0ID4+IDE2Cisg
ICAgICAgICAgICAgICAgb3JpICAgICBpbW1UZW1wLCBpbW1UZW1wLCBhZGRyZXNzLm9mZnNldCAm
IDB4ZmZmZgorICAgICAgICAgICAgICAgIGFkZHUgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBpbW1U
ZW1wCisgICAgICAgICAgICAgICAgKEJpZy1FbmRpYW4pCisgICAgICAgICAgICAgICAgbHcgICAg
ICBkZXN0LCAwKGF0KQorICAgICAgICAgICAgICAgIGx3ICAgICAgZGVzdCwgMyhhdCkKKyAgICAg
ICAgICAgICAgICAoTGl0dGxlLUVuZGlhbikKKyAgICAgICAgICAgICAgICBsdyAgICAgIGRlc3Qs
IDMoYXQpCisgICAgICAgICAgICAgICAgbHcgICAgICBkZXN0LCAwKGF0KQorICAgICAgICAgICAg
Ki8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsbChhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNz
LmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRk
clRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlKTsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLmx1aShpbW1UZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0ID4+IDE2
KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm9yaShpbW1UZW1wUmVnaXN0ZXIsIGltbVRlbXBS
ZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShh
ZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbW1UZW1wUmVnaXN0ZXIpOworI2lmIENQVShCSUdfRU5ESUFOKQorICAgICAgICAg
ICAgbV9hc3NlbWJsZXIubHdsKGRlc3QsIGFkZHJUZW1wUmVnaXN0ZXIsIDApOworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIubHdyKGRlc3QsIGFkZHJUZW1wUmVnaXN0ZXIsIDMpOworI2Vsc2UKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLmx3bChkZXN0LCBhZGRyVGVtcFJlZ2lzdGVyLCAzKTsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLmx3cihkZXN0LCBhZGRyVGVtcFJlZ2lzdGVyLCAwKTsKKyNl
bmRpZgorICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBsb2FkMzIodm9pZCogYWRkcmVzcywg
UmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICAgIGxpICBhZGRy
VGVtcCwgYWRkcmVzcworICAgICAgICAgICAgbHcgIGRlc3QsIDAoYWRkclRlbXApCisgICAgICAg
ICovCisgICAgICAgIG1vdmUoSW1tUHRyKGFkZHJlc3MpLCBhZGRyVGVtcFJlZ2lzdGVyKTsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubHcoZGVzdCwgYWRkclRlbXBSZWdpc3RlciwgMCk7CisgICAgfQor
CisgICAgRGF0YUxhYmVsMzIgbG9hZDMyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaChBZGRyZXNzIGFk
ZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fZml4ZWRXaWR0aCA9IHRy
dWU7CisgICAgICAgIC8qCisgICAgICAgICAgICBsdWkgYWRkclRlbXAsIGFkZHJlc3Mub2Zmc2V0
ID4+IDE2CisgICAgICAgICAgICBvcmkgYWRkclRlbXAsIGFkZHJUZW1wLCBhZGRyZXNzLm9mZnNl
dCAmIDB4ZmZmZgorICAgICAgICAgICAgYWRkdSAgICAgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBh
ZGRyZXNzLmJhc2UKKyAgICAgICAgICAgIGx3ICBkZXN0LCAwKGFkZHJUZW1wKQorICAgICAgICAq
LworICAgICAgICBEYXRhTGFiZWwzMiBkYXRhTGFiZWwodGhpcyk7CisgICAgICAgIG1vdmUoSW1t
MzIoYWRkcmVzcy5vZmZzZXQpLCBhZGRyVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2Up
OworICAgICAgICBtX2Fzc2VtYmxlci5sdyhkZXN0LCBhZGRyVGVtcFJlZ2lzdGVyLCAwKTsKKyAg
ICAgICAgbV9maXhlZFdpZHRoID0gZmFsc2U7CisgICAgICAgIHJldHVybiBkYXRhTGFiZWw7Cisg
ICAgfQorCisgICAgTGFiZWwgbG9hZFB0cldpdGhQYXRjaFRvTEVBKEFkZHJlc3MgYWRkcmVzcywg
UmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9maXhlZFdpZHRoID0gdHJ1ZTsKKyAg
ICAgICAgLyoKKyAgICAgICAgICAgIGx1aSAgICAgICAgIGFkZHJUZW1wLCBhZGRyZXNzLm9mZnNl
dCA+PiAxNgorICAgICAgICAgICAgb3JpICAgICAgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBhZGRy
ZXNzLm9mZnNldCAmIDB4ZmZmZgorICAgICAgICAgICAgYWRkdSAgICAgICAgYWRkclRlbXAsIGFk
ZHJUZW1wLCBhZGRyZXNzLmJhc2UKKyAgICAgICAgICAgIGx3ICAgICAgICAgIGRlc3QsIDAoYWRk
clRlbXApCisgICAgICAgICovCisgICAgICAgIExhYmVsIGxhYmVsKHRoaXMpOworICAgICAgICBt
b3ZlKEltbTMyKGFkZHJlc3Mub2Zmc2V0KSwgYWRkclRlbXBSZWdpc3Rlcik7CisgICAgICAgIG1f
YXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVz
cy5iYXNlKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubHcoZGVzdCwgYWRkclRlbXBSZWdpc3Rlciwg
MCk7CisgICAgICAgIG1fZml4ZWRXaWR0aCA9IGZhbHNlOworICAgICAgICByZXR1cm4gbGFiZWw7
CisgICAgfQorCisgICAgTGFiZWwgbG9hZFB0cldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goQWRkcmVz
cyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICByZXR1cm4gbG9hZFB0
cldpdGhQYXRjaFRvTEVBKGFkZHJlc3MsIGRlc3QpOworICAgIH0KKworICAgIC8qIE5lZWQgdG8g
dXNlIHplcm8tZXh0ZW5lZCBsb2FkIGhhbGYtd29yZCBmb3IgbG9hZDE2LiAgKi8KKyAgICB2b2lk
IGxvYWQxNihCYXNlSW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAg
ICAgaWYgKGFkZHJlc3Mub2Zmc2V0ID49IC0zMjc2OCAmJiBhZGRyZXNzLm9mZnNldCA8PSAzMjc2
NworICAgICAgICAgICAgJiYgIW1fZml4ZWRXaWR0aCkgeworICAgICAgICAgICAgLyoKKyAgICAg
ICAgICAgICAgICBzbGwgICAgIGFkZHJUZW1wLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxl
CisgICAgICAgICAgICAgICAgYWRkdSAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGFkZHJlc3MuYmFz
ZQorICAgICAgICAgICAgICAgIGxodSAgICAgZGVzdCwgYWRkcmVzcy5vZmZzZXQoYWRkclRlbXAp
CisgICAgICAgICAgICAqLworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2xsKGFkZHJUZW1wUmVn
aXN0ZXIsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJh
c2UpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubGh1KGRlc3QsIGFkZHJUZW1wUmVnaXN0ZXIs
IGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qCisgICAg
ICAgICAgICAgICAgc2xsICAgICBhZGRyVGVtcCwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2Fs
ZQorICAgICAgICAgICAgICAgIGFkZHUgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBhZGRyZXNzLmJh
c2UKKyAgICAgICAgICAgICAgICBsdWkgICAgIGltbVRlbXAsIChhZGRyZXNzLm9mZnNldCArIDB4
ODAwMCkgPj4gMTYKKyAgICAgICAgICAgICAgICBhZGR1ICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwg
aW1tVGVtcAorICAgICAgICAgICAgICAgIGxodSAgICAgZGVzdCwgKGFkZHJlc3Mub2Zmc2V0ICYg
MHhmZmZmKShhZGRyVGVtcCkKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5zbGwoYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVn
aXN0ZXIsIGFkZHJlc3MuYmFzZSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sdWkoaW1tVGVt
cFJlZ2lzdGVyLCAoYWRkcmVzcy5vZmZzZXQgKyAweDgwMDApID4+IDE2KTsKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmxodShkZXN0LCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBEYXRhTGFiZWwzMiBzdG9yZTMyV2l0aEFkZHJlc3NP
ZmZzZXRQYXRjaChSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAg
ICAgbV9maXhlZFdpZHRoID0gdHJ1ZTsKKyAgICAgICAgLyoKKyAgICAgICAgICAgIGx1aSBhZGRy
VGVtcCwgYWRkcmVzcy5vZmZzZXQgPj4gMTYKKyAgICAgICAgICAgIG9yaSBhZGRyVGVtcCwgYWRk
clRlbXAsIGFkZHJlc3Mub2Zmc2V0ICYgMHhmZmZmCisgICAgICAgICAgICBhZGR1ICAgICAgICBh
ZGRyVGVtcCwgYWRkclRlbXAsIGFkZHJlc3MuYmFzZQorICAgICAgICAgICAgc3cgIHNyYywgMChh
ZGRyVGVtcCkKKyAgICAgICAgKi8KKyAgICAgICAgRGF0YUxhYmVsMzIgZGF0YUxhYmVsKHRoaXMp
OworICAgICAgICBtb3ZlKEltbTMyKGFkZHJlc3Mub2Zmc2V0KSwgYWRkclRlbXBSZWdpc3Rlcik7
CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdp
c3RlciwgYWRkcmVzcy5iYXNlKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3coc3JjLCBhZGRyVGVt
cFJlZ2lzdGVyLCAwKTsKKyAgICAgICAgbV9maXhlZFdpZHRoID0gZmFsc2U7CisgICAgICAgIHJl
dHVybiBkYXRhTGFiZWw7CisgICAgfQorCisgICAgdm9pZCBzdG9yZTMyKFJlZ2lzdGVySUQgc3Jj
LCBJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIGlmIChhZGRyZXNzLm9m
ZnNldCA+PSAtMzI3NjggJiYgYWRkcmVzcy5vZmZzZXQgPD0gMzI3NjcKKyAgICAgICAgICAgICYm
ICFtX2ZpeGVkV2lkdGgpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdyhzcmMsIGFkZHJlc3Mu
YmFzZSwgYWRkcmVzcy5vZmZzZXQpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8qCisg
ICAgICAgICAgICAgICAgbHVpICAgICBhZGRyVGVtcCwgKG9mZnNldCArIDB4ODAwMCkgPj4gMTYK
KyAgICAgICAgICAgICAgICBhZGR1ICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgYmFzZQorICAgICAg
ICAgICAgICAgIHN3ICAgICAgc3JjLCAob2Zmc2V0ICYgMHhmZmZmKShhZGRyVGVtcCkKKyAgICAg
ICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx1aShhZGRyVGVtcFJlZ2lzdGVy
LCAoYWRkcmVzcy5vZmZzZXQgKyAweDgwMDApID4+IDE2KTsKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNl
KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN3KHNyYywgYWRkclRlbXBSZWdpc3RlciwgYWRk
cmVzcy5vZmZzZXQpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBzdG9yZTMyKFJlZ2lz
dGVySUQgc3JjLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIGlmIChhZGRyZXNz
Lm9mZnNldCA+PSAtMzI3NjggJiYgYWRkcmVzcy5vZmZzZXQgPD0gMzI3NjcKKyAgICAgICAgICAg
ICYmICFtX2ZpeGVkV2lkdGgpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgc2xs
ICAgICBhZGRyVGVtcCwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZQorICAgICAgICAgICAg
ICAgIGFkZHUgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBhZGRyZXNzLmJhc2UKKyAgICAgICAgICAg
ICAgICBzdyAgICAgIHNyYywgYWRkcmVzcy5vZmZzZXQoYWRkclRlbXApCisgICAgICAgICAgICAq
LworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2xsKGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mu
aW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRy
VGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UpOworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuc3coc3JjLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgIHNsbCAg
ICAgYWRkclRlbXAsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUKKyAgICAgICAgICAgICAg
ICBhZGR1ICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgYWRkcmVzcy5iYXNlCisgICAgICAgICAgICAg
ICAgbHVpICAgICBpbW1UZW1wLCAoYWRkcmVzcy5vZmZzZXQgKyAweDgwMDApID4+IDE2CisgICAg
ICAgICAgICAgICAgYWRkdSAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGltbVRlbXAKKyAgICAgICAg
ICAgICAgICBzdyAgICAgIHNyYywgKGFkZHJlc3Mub2Zmc2V0ICYgMHhmZmZmKShhdCkKKyAgICAg
ICAgICAgICovCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbGwoYWRkclRlbXBSZWdpc3Rlciwg
YWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5h
ZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSk7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5sdWkoaW1tVGVtcFJlZ2lzdGVyLCAoYWRkcmVzcy5vZmZz
ZXQgKyAweDgwMDApID4+IDE2KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRl
bXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN3KHNyYywgYWRk
clRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQpOworICAgICAgICB9CisgICAgfQorCisgICAg
dm9pZCBzdG9yZTMyKEltbTMyIGltbSwgSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MpCisgICAgewor
ICAgICAgICBpZiAoYWRkcmVzcy5vZmZzZXQgPj0gLTMyNzY4ICYmIGFkZHJlc3Mub2Zmc2V0IDw9
IDMyNzY3CisgICAgICAgICAgICAmJiAhbV9maXhlZFdpZHRoKSB7CisgICAgICAgICAgICBpZiAo
IWltbS5tX2lzUG9pbnRlciAmJiAhaW1tLm1fdmFsdWUpCisgICAgICAgICAgICAgICAgbV9hc3Nl
bWJsZXIuc3coTUlQU1JlZ2lzdGVyczo6emVybywgYWRkcmVzcy5iYXNlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgIG1vdmUoaW1tLCBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLnN3KGltbVRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlLCBhZGRyZXNz
Lm9mZnNldCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAv
KgorICAgICAgICAgICAgICAgIGx1aSAgICAgYWRkclRlbXAsIChvZmZzZXQgKyAweDgwMDApID4+
IDE2CisgICAgICAgICAgICAgICAgYWRkdSAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGJhc2UKKyAg
ICAgICAgICAgICAgICBzdyAgICAgIGltbVRlbXAsIChvZmZzZXQgJiAweGZmZmYpKGFkZHJUZW1w
KQorICAgICAgICAgICAgICAqLworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHVpKGFkZHJUZW1w
UmVnaXN0ZXIsIChhZGRyZXNzLm9mZnNldCArIDB4ODAwMCkgPj4gMTYpOworICAgICAgICAgICAg
bV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRy
ZXNzLmJhc2UpOworICAgICAgICAgICAgaWYgKCFpbW0ubV9pc1BvaW50ZXIgJiYgIWltbS5tX3Zh
bHVlICYmICFtX2ZpeGVkV2lkdGgpCisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3coTUlQ
U1JlZ2lzdGVyczo6emVybywgYWRkclRlbXBSZWdpc3RlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhZGRyZXNzLm9mZnNldCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBtb3ZlKGltbSwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBtX2Fz
c2VtYmxlci5zdyhpbW1UZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcy5vZmZzZXQpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgdm9pZCBzdG9yZTMyKFJlZ2lzdGVySUQgc3JjLCB2b2lkKiBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICAgIGxpICBhZGRyVGVtcCwgYWRk
cmVzcworICAgICAgICAgICAgc3cgIHNyYywgMChhZGRyVGVtcCkKKyAgICAgICAgKi8KKyAgICAg
ICAgbW92ZShJbW1QdHIoYWRkcmVzcyksIGFkZHJUZW1wUmVnaXN0ZXIpOworICAgICAgICBtX2Fz
c2VtYmxlci5zdyhzcmMsIGFkZHJUZW1wUmVnaXN0ZXIsIDApOworICAgIH0KKworICAgIHZvaWQg
c3RvcmUzMihJbW0zMiBpbW0sIHZvaWQqIGFkZHJlc3MpCisgICAgeworICAgICAgICAvKgorICAg
ICAgICAgICAgbGkgIGltbVRlbXAsIGltbQorICAgICAgICAgICAgbGkgIGFkZHJUZW1wLCBhZGRy
ZXNzCisgICAgICAgICAgICBzdyAgc3JjLCAwKGFkZHJUZW1wKQorICAgICAgICAqLworICAgICAg
ICBpZiAoIWltbS5tX2lzUG9pbnRlciAmJiAhaW1tLm1fdmFsdWUgJiYgIW1fZml4ZWRXaWR0aCkg
eworICAgICAgICAgICAgbW92ZShJbW1QdHIoYWRkcmVzcyksIGFkZHJUZW1wUmVnaXN0ZXIpOwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3coTUlQU1JlZ2lzdGVyczo6emVybywgYWRkclRlbXBS
ZWdpc3RlciwgMCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtb3ZlKGltbSwgaW1t
VGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG1vdmUoSW1tUHRyKGFkZHJlc3MpLCBhZGRyVGVt
cFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN3KGltbVRlbXBSZWdpc3Rlciwg
YWRkclRlbXBSZWdpc3RlciwgMCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBGbG9hdGlu
Zy1wb2ludCBvcGVyYXRpb25zOgorCisgICAgYm9vbCBzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSBj
b25zdAorICAgIHsKKyNpZiBXVEZfTUlQU19ET1VCTEVfRkxPQVQKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisjZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKyAgICB9CisKKyAgICBi
b29sIHN1cHBvcnRzRmxvYXRpbmdQb2ludFRydW5jYXRlKCkgY29uc3QKKyAgICB7CisjaWYgV1RG
X01JUFNfRE9VQkxFX0ZMT0FUICYmIFdURl9NSVBTX0lTQV9BVF9MRUFTVCgyKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorICAgIH0K
KworICAgIC8vIFN0YWNrIG1hbmlwdWxhdGlvbiBvcGVyYXRpb25zOgorICAgIC8vCisgICAgLy8g
VGhlIEFCSSBpcyBhc3N1bWVkIHRvIHByb3ZpZGUgYSBzdGFjayBhYnN0cmFjdGlvbiB0byBtZW1v
cnksCisgICAgLy8gY29udGFpbmluZyBtYWNoaW5lIHdvcmQgc2l6ZWQgdW5pdHMgb2YgZGF0YS4g
IFB1c2ggYW5kIHBvcAorICAgIC8vIG9wZXJhdGlvbnMgYWRkIGFuZCByZW1vdmUgYSBzaW5nbGUg
cmVnaXN0ZXIgc2l6ZWQgdW5pdCBvZiBkYXRhCisgICAgLy8gdG8gb3IgZnJvbSB0aGUgc3RhY2su
ICBQZWVrIGFuZCBwb2tlIG9wZXJhdGlvbnMgcmVhZCBvciB3cml0ZQorICAgIC8vIHZhbHVlcyBv
biB0aGUgc3RhY2ssIHdpdGhvdXQgbW92aW5nIHRoZSBjdXJyZW50IHN0YWNrIHBvc2l0aW9uLgor
CisgICAgdm9pZCBwb3AoUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubHcoZGVzdCwgTUlQU1JlZ2lzdGVyczo6c3AsIDApOworICAgICAgICBtX2Fzc2VtYmxlci5h
ZGRpdShNSVBTUmVnaXN0ZXJzOjpzcCwgTUlQU1JlZ2lzdGVyczo6c3AsIDQpOworICAgIH0KKwor
ICAgIHZvaWQgcHVzaChSZWdpc3RlcklEIHNyYykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVy
LmFkZGl1KE1JUFNSZWdpc3RlcnM6OnNwLCBNSVBTUmVnaXN0ZXJzOjpzcCwgLTQpOworICAgICAg
ICBtX2Fzc2VtYmxlci5zdyhzcmMsIE1JUFNSZWdpc3RlcnM6OnNwLCAwKTsKKyAgICB9CisKKyAg
ICB2b2lkIHB1c2goQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbG9hZDMyKGFkZHJl
c3MsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICBwdXNoKGRhdGFUZW1wUmVnaXN0ZXIpOwor
ICAgIH0KKworICAgIHZvaWQgcHVzaChJbW0zMiBpbW0pCisgICAgeworICAgICAgICBtb3ZlKGlt
bSwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgcHVzaChpbW1UZW1wUmVnaXN0ZXIpOworICAg
IH0KKworICAgIC8vIFJlZ2lzdGVyIG1vdmUgb3BlcmF0aW9uczoKKyAgICAvLworICAgIC8vIE1v
dmUgdmFsdWVzIGluIHJlZ2lzdGVycy4KKworICAgIHZvaWQgbW92ZShJbW0zMiBpbW0sIFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlmICghaW1tLm1faXNQb2ludGVyICYmICFpbW0u
bV92YWx1ZSAmJiAhbV9maXhlZFdpZHRoKQorICAgICAgICAgICAgbW92ZShNSVBTUmVnaXN0ZXJz
Ojp6ZXJvLCBkZXN0KTsKKyAgICAgICAgZWxzZSBpZiAoaW1tLm1faXNQb2ludGVyIHx8IG1fZml4
ZWRXaWR0aCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIubHVpKGRlc3QsIGltbS5tX3ZhbHVl
ID4+IDE2KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm9yaShkZXN0LCBkZXN0LCBpbW0ubV92
YWx1ZSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubGkoZGVzdCwg
aW1tLm1fdmFsdWUpOworICAgIH0KKworICAgIHZvaWQgbW92ZShSZWdpc3RlcklEIHNyYywgUmVn
aXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKHNyYyAhPSBkZXN0IHx8IG1fZml4ZWRX
aWR0aCkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmUoZGVzdCwgc3JjKTsKKyAgICB9CisK
KyAgICB2b2lkIG1vdmUoSW1tUHRyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAg
ICAgbW92ZShJbW0zMihpbW0pLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHN3YXAoUmVnaXN0
ZXJJRCByZWcxLCBSZWdpc3RlcklEIHJlZzIpCisgICAgeworICAgICAgICBtb3ZlKHJlZzEsIGlt
bVRlbXBSZWdpc3Rlcik7CisgICAgICAgIG1vdmUocmVnMiwgcmVnMSk7CisgICAgICAgIG1vdmUo
aW1tVGVtcFJlZ2lzdGVyLCByZWcyKTsKKyAgICB9CisKKyAgICB2b2lkIHNpZ25FeHRlbmQzMlRv
UHRyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAo
c3JjICE9IGRlc3QgfHwgbV9maXhlZFdpZHRoKQorICAgICAgICAgICAgbW92ZShzcmMsIGRlc3Qp
OworICAgIH0KKworICAgIHZvaWQgemVyb0V4dGVuZDMyVG9QdHIoUmVnaXN0ZXJJRCBzcmMsIFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlmIChzcmMgIT0gZGVzdCB8fCBtX2ZpeGVk
V2lkdGgpCisgICAgICAgICAgICBtb3ZlKHNyYywgZGVzdCk7CisgICAgfQorCisgICAgLy8gRm9y
d2FyZHMgLyBleHRlcm5hbCBjb250cm9sIGZsb3cgb3BlcmF0aW9uczoKKyAgICAvLworICAgIC8v
IFRoaXMgc2V0IG9mIGp1bXAgYW5kIGNvbmRpdGlvbmFsIGJyYW5jaCBvcGVyYXRpb25zIHJldHVy
biBhIEp1bXAKKyAgICAvLyBvYmplY3Qgd2hpY2ggbWF5IGxpbmtlZCBhdCBhIGxhdGVyIHBvaW50
LCBhbGxvdyBmb3J3YXJkcyBqdW1wLAorICAgIC8vIG9yIGp1bXBzIHRoYXQgd2lsbCByZXF1aXJl
IGV4dGVybmFsIGxpbmthZ2UgKGFmdGVyIHRoZSBjb2RlIGhhcyBiZWVuCisgICAgLy8gcmVsb2Nh
dGVkKS4KKyAgICAvLworICAgIC8vIEZvciBicmFuY2hlcywgc2lnbmVkIDwsID4sIDw9IGFuZCA+
PSBhcmUgZGVub3RlZCBhcyBsLCBnLCBsZSwgYW5kIGdlCisgICAgLy8gcmVzcGVjaXR2ZWx5LCBm
b3IgdW5zaWduZWQgY29tcGFyaXNvbnMgdGhlIG5hbWVzIGIsIGEsIGJlLCBhbmQgYWUgYXJlCisg
ICAgLy8gdXNlZCAocmVwcmVzZW50aW5nIHRoZSBuYW1lcyAnYmVsb3cnIGFuZCAnYWJvdmUnKS4K
KyAgICAvLworICAgIC8vIE9wZXJhbmRzIHRvIHRoZSBjb21wYXJpc2lvbiBhcmUgcHJvdmlkZWQg
aW4gdGhlIGV4cGVjdGVkIG9yZGVyLCBlLmcuCisgICAgLy8gamxlMzIocmVnMSwgSW1tMzIoNSkp
IHdpbGwgYnJhbmNoIGlmIHRoZSB2YWx1ZSBoZWxkIGluIHJlZzEsIHdoZW4KKyAgICAvLyB0cmVh
dGVkIGFzIGEgc2lnbmVkIDMyYml0IHZhbHVlLCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gNS4K
KyAgICAvLworICAgIC8vIGp6IGFuZCBqbnogdGVzdCB3aGV0aGVyIHRoZSBmaXJzdCBvcGVyYW5k
IGlzIGVxdWFsIHRvIHplcm8sIGFuZCB0YWtlCisgICAgLy8gYW4gb3B0aW9uYWwgc2Vjb25kIG9w
ZXJhbmQgb2YgYSBtYXNrIHVuZGVyIHdoaWNoIHRvIHBlcmZvcm0gdGhlIHRlc3QuCisKKyAgICBK
dW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQg
cmlnaHQpCisgICAgeworICAgICAgICBpZiAoY29uZCA9PSBFcXVhbCB8fCBjb25kID09IFplcm8p
CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRXF1YWwobGVmdCwgcmlnaHQpOworICAgICAgICBp
ZiAoY29uZCA9PSBOb3RFcXVhbCB8fCBjb25kID09IE5vblplcm8pCisgICAgICAgICAgICByZXR1
cm4gYnJhbmNoTm90RXF1YWwobGVmdCwgcmlnaHQpOworICAgICAgICBpZiAoY29uZCA9PSBBYm92
ZSkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0dShjbXBUZW1wUmVnaXN0ZXIsIHJpZ2h0
LCBsZWZ0KTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hOb3RFcXVhbChjbXBUZW1wUmVnaXN0
ZXIsIE1JUFNSZWdpc3RlcnM6Onplcm8pOworICAgICAgICB9CisgICAgICAgIGlmIChjb25kID09
IEFib3ZlT3JFcXVhbCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0dShjbXBUZW1wUmVn
aXN0ZXIsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hFcXVhbChjbXBU
ZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onplcm8pOworICAgICAgICB9CisgICAgICAgIGlm
IChjb25kID09IEJlbG93KSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHR1KGNtcFRlbXBS
ZWdpc3RlciwgbGVmdCwgcmlnaHQpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaE5vdEVxdWFs
KGNtcFRlbXBSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6emVybyk7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKGNvbmQgPT0gQmVsb3dPckVxdWFsKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5z
bHR1KGNtcFRlbXBSZWdpc3RlciwgcmlnaHQsIGxlZnQpOworICAgICAgICAgICAgcmV0dXJuIGJy
YW5jaEVxdWFsKGNtcFRlbXBSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6emVybyk7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKGNvbmQgPT0gR3JlYXRlclRoYW4pIHsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLnNsdChjbXBUZW1wUmVnaXN0ZXIsIHJpZ2h0LCBsZWZ0KTsKKyAgICAgICAgICAgIHJl
dHVybiBicmFuY2hOb3RFcXVhbChjbXBUZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onplcm8p
OworICAgICAgICB9CisgICAgICAgIGlmIChjb25kID09IEdyZWF0ZXJUaGFuT3JFcXVhbCkgewor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0KGNtcFRlbXBSZWdpc3RlciwgbGVmdCwgcmlnaHQp
OworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEVxdWFsKGNtcFRlbXBSZWdpc3RlciwgTUlQU1Jl
Z2lzdGVyczo6emVybyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gTGVzc1RoYW4p
IHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdChjbXBUZW1wUmVnaXN0ZXIsIGxlZnQsIHJp
Z2h0KTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hOb3RFcXVhbChjbXBUZW1wUmVnaXN0ZXIs
IE1JUFNSZWdpc3RlcnM6Onplcm8pOworICAgICAgICB9CisgICAgICAgIGlmIChjb25kID09IExl
c3NUaGFuT3JFcXVhbCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0KGNtcFRlbXBSZWdp
c3RlciwgcmlnaHQsIGxlZnQpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEVxdWFsKGNtcFRl
bXBSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6emVybyk7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KGNvbmQgPT0gT3ZlcmZsb3cpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgeG9y
ICAgICBjbXBUZW1wLCBsZWZ0LCByaWdodAorICAgICAgICAgICAgICAgIGJnZXogICAgTm9fb3Zl
cmZsb3csIGNtcFRlbXAgICAgIyBzYW1lIHNpZ24gYml0IC0+IG5vIG92ZXJmbG93CisgICAgICAg
ICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgc3VidSAgICBjbXBUZW1wLCBsZWZ0LCByaWdo
dAorICAgICAgICAgICAgICAgIHhvciAgICAgY21wVGVtcCwgY21wVGVtcCwgbGVmdAorICAgICAg
ICAgICAgICAgIGJnZXogICAgTm9fb3ZlcmZsb3csIGNtcFRlbXAgICAgIyBzYW1lIHNpZ24gYml0
IC0+IG5vIG92ZXJmbG93CisgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgYiAg
ICAgICBPdmVyZmxvdworICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgICAgIG5vcAor
ICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgICAg
IG5vcAorICAgICAgICAgICAgICBOb19vdmVyZmxvdzoKKyAgICAgICAgICAgICovCisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci54b3JJbnNuKGNtcFRlbXBSZWdpc3RlciwgbGVmdCwgcmlnaHQpOwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuYmdleihjbXBUZW1wUmVnaXN0ZXIsIDExKTsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3VidShj
bXBUZW1wUmVnaXN0ZXIsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnhv
ckluc24oY21wVGVtcFJlZ2lzdGVyLCBjbXBUZW1wUmVnaXN0ZXIsIGxlZnQpOworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuYmdleihjbXBUZW1wUmVnaXN0ZXIsIDcpOworICAgICAgICAgICAgbV9h
c3NlbWJsZXIubm9wKCk7CisgICAgICAgICAgICByZXR1cm4ganVtcCgpOworICAgICAgICB9Cisg
ICAgICAgIGlmIChjb25kID09IFNpZ25lZCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3Vi
dShjbXBUZW1wUmVnaXN0ZXIsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIC8vIENoZWNrIGlm
IHRoZSByZXN1bHQgaXMgbmVnYXRpdmUuCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHQoY21w
VGVtcFJlZ2lzdGVyLCBjbXBUZW1wUmVnaXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTUlQU1JlZ2lzdGVyczo6emVybyk7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoTm90RXF1
YWwoY21wVGVtcFJlZ2lzdGVyLCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsKKyAgICAgICAgfQorICAg
ICAgICBBU1NFUlQoMCk7CisKKyAgICAgICAgcmV0dXJuIEp1bXAoKTsKKyAgICB9CisKKyAgICBK
dW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIEltbTMyIHJpZ2h0
KQorICAgIHsKKyAgICAgICAgbW92ZShyaWdodCwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAg
cmV0dXJuIGJyYW5jaDMyKGNvbmQsIGxlZnQsIGltbVRlbXBSZWdpc3Rlcik7CisgICAgfQorCisg
ICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBBZGRyZXNz
IHJpZ2h0KQorICAgIHsKKyAgICAgICAgbG9hZDMyKHJpZ2h0LCBkYXRhVGVtcFJlZ2lzdGVyKTsK
KyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIGxlZnQsIGRhdGFUZW1wUmVnaXN0ZXIpOwor
ICAgIH0KKworICAgIEp1bXAgYnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgbGVmdCwg
UmVnaXN0ZXJJRCByaWdodCkKKyAgICB7CisgICAgICAgIGxvYWQzMihsZWZ0LCBkYXRhVGVtcFJl
Z2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIGRhdGFUZW1wUmVnaXN0ZXIs
IHJpZ2h0KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBBZGRy
ZXNzIGxlZnQsIEltbTMyIHJpZ2h0KQorICAgIHsKKyAgICAgICAgbG9hZDMyKGxlZnQsIGRhdGFU
ZW1wUmVnaXN0ZXIpOworICAgICAgICBtb3ZlKHJpZ2h0LCBpbW1UZW1wUmVnaXN0ZXIpOworICAg
ICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgZGF0YVRlbXBSZWdpc3RlciwgaW1tVGVtcFJlZ2lz
dGVyKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBCYXNlSW5k
ZXggbGVmdCwgSW1tMzIgcmlnaHQpCisgICAgeworICAgICAgICBsb2FkMzIobGVmdCwgZGF0YVRl
bXBSZWdpc3Rlcik7CisgICAgICAgIC8vIEJlIGNhcmVmdWwgdGhhdCB0aGUgcHJldmlvdXMgbG9h
ZDMyKCkgdXNlcyBpbW1UZW1wUmVnaXN0ZXIuCisgICAgICAgIC8vIFNvLCB3ZSBuZWVkIHRvIHB1
dCBtb3ZlKCkgYWZ0ZXIgbG9hZDMyKCkuCisgICAgICAgIG1vdmUocmlnaHQsIGltbVRlbXBSZWdp
c3Rlcik7CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBkYXRhVGVtcFJlZ2lzdGVyLCBp
bW1UZW1wUmVnaXN0ZXIpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoMzJXaXRoVW5hbGlnbmVk
SGFsZldvcmRzKENvbmRpdGlvbiBjb25kLCBCYXNlSW5kZXggbGVmdCwgSW1tMzIgcmlnaHQpCisg
ICAgeworICAgICAgICBsb2FkMzJXaXRoVW5hbGlnbmVkSGFsZldvcmRzKGxlZnQsIGRhdGFUZW1w
UmVnaXN0ZXIpOworICAgICAgICAvLyBCZSBjYXJlZnVsIHRoYXQgdGhlIHByZXZpb3VzIGxvYWQz
MldpdGhVbmFsaWduZWRIYWxmV29yZHMoKQorICAgICAgICAvLyB1c2VzIGltbVRlbXBSZWdpc3Rl
ci4KKyAgICAgICAgLy8gU28sIHdlIG5lZWQgdG8gcHV0IG1vdmUoKSBhZnRlciBsb2FkMzJXaXRo
VW5hbGlnbmVkSGFsZldvcmRzKCkuCisgICAgICAgIG1vdmUocmlnaHQsIGltbVRlbXBSZWdpc3Rl
cik7CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBkYXRhVGVtcFJlZ2lzdGVyLCBpbW1U
ZW1wUmVnaXN0ZXIpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQs
IEFic29sdXRlQWRkcmVzcyBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0KQorICAgIHsKKyAgICAgICAg
bG9hZDMyKGxlZnQubV9wdHIsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gYnJh
bmNoMzIoY29uZCwgZGF0YVRlbXBSZWdpc3RlciwgcmlnaHQpOworICAgIH0KKworICAgIEp1bXAg
YnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIEFic29sdXRlQWRkcmVzcyBsZWZ0LCBJbW0zMiByaWdo
dCkKKyAgICB7CisgICAgICAgIGxvYWQzMihsZWZ0Lm1fcHRyLCBkYXRhVGVtcFJlZ2lzdGVyKTsK
KyAgICAgICAgbW92ZShyaWdodCwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIGJy
YW5jaDMyKGNvbmQsIGRhdGFUZW1wUmVnaXN0ZXIsIGltbVRlbXBSZWdpc3Rlcik7CisgICAgfQor
CisgICAgSnVtcCBicmFuY2gxNihDb25kaXRpb24gY29uZCwgQmFzZUluZGV4IGxlZnQsIFJlZ2lz
dGVySUQgcmlnaHQpCisgICAgeworICAgICAgICBsb2FkMTYobGVmdCwgZGF0YVRlbXBSZWdpc3Rl
cik7CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBkYXRhVGVtcFJlZ2lzdGVyLCByaWdo
dCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2gxNihDb25kaXRpb24gY29uZCwgQmFzZUluZGV4
IGxlZnQsIEltbTMyIHJpZ2h0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKCEocmlnaHQubV92YWx1
ZSAmIDB4RkZGRjAwMDApKTsKKyAgICAgICAgbG9hZDE2KGxlZnQsIGRhdGFUZW1wUmVnaXN0ZXIp
OworICAgICAgICAvLyBCZSBjYXJlZnVsIHRoYXQgdGhlIHByZXZpb3VzIGxvYWQxNigpIHVzZXMg
aW1tVGVtcFJlZ2lzdGVyLgorICAgICAgICAvLyBTbywgd2UgbmVlZCB0byBwdXQgbW92ZSgpIGFm
dGVyIGxvYWQxNigpLgorICAgICAgICBtb3ZlKHJpZ2h0LCBpbW1UZW1wUmVnaXN0ZXIpOworICAg
ICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgZGF0YVRlbXBSZWdpc3RlciwgaW1tVGVtcFJlZ2lz
dGVyKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFRlc3QzMihDb25kaXRpb24gY29uZCwgUmVn
aXN0ZXJJRCByZWcsIFJlZ2lzdGVySUQgbWFzaykKKyAgICB7CisgICAgICAgIEFTU0VSVCgoY29u
ZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmFu
ZEluc24oY21wVGVtcFJlZ2lzdGVyLCByZWcsIG1hc2spOworICAgICAgICBpZiAoY29uZCA9PSBa
ZXJvKQorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEVxdWFsKGNtcFRlbXBSZWdpc3RlciwgTUlQ
U1JlZ2lzdGVyczo6emVybyk7CisgICAgICAgIHJldHVybiBicmFuY2hOb3RFcXVhbChjbXBUZW1w
UmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onplcm8pOworICAgIH0KKworICAgIEp1bXAgYnJhbmNo
VGVzdDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHJlZywgSW1tMzIgbWFzayA9IEltbTMy
KC0xKSkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBO
b25aZXJvKSk7CisgICAgICAgIGlmIChtYXNrLm1fdmFsdWUgPT0gLTEgJiYgIW1fZml4ZWRXaWR0
aCkgeworICAgICAgICAgICAgaWYgKGNvbmQgPT0gWmVybykKKyAgICAgICAgICAgICAgICByZXR1
cm4gYnJhbmNoRXF1YWwocmVnLCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsKKyAgICAgICAgICAgIHJl
dHVybiBicmFuY2hOb3RFcXVhbChyZWcsIE1JUFNSZWdpc3RlcnM6Onplcm8pOworICAgICAgICB9
CisgICAgICAgIG1vdmUobWFzaywgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIGJy
YW5jaFRlc3QzMihjb25kLCByZWcsIGltbVRlbXBSZWdpc3Rlcik7CisgICAgfQorCisgICAgSnVt
cCBicmFuY2hUZXN0MzIoQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgYWRkcmVzcywgSW1tMzIgbWFz
ayA9IEltbTMyKC0xKSkKKyAgICB7CisgICAgICAgIGxvYWQzMihhZGRyZXNzLCBkYXRhVGVtcFJl
Z2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3QzMihjb25kLCBkYXRhVGVtcFJlZ2lz
dGVyLCBtYXNrKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFRlc3QzMihDb25kaXRpb24gY29u
ZCwgQmFzZUluZGV4IGFkZHJlc3MsIEltbTMyIG1hc2sgPSBJbW0zMigtMSkpCisgICAgeworICAg
ICAgICBsb2FkMzIoYWRkcmVzcywgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBi
cmFuY2hUZXN0MzIoY29uZCwgZGF0YVRlbXBSZWdpc3RlciwgbWFzayk7CisgICAgfQorCisgICAg
SnVtcCBqdW1wKCkKKyAgICB7CisgICAgICAgIHJldHVybiBicmFuY2hFcXVhbChNSVBTUmVnaXN0
ZXJzOjp6ZXJvLCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsKKyAgICB9CisKKyAgICB2b2lkIGp1bXAo
UmVnaXN0ZXJJRCB0YXJnZXQpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5qcih0YXJnZXQp
OworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICB9CisKKyAgICB2b2lkIGp1bXAoQWRk
cmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9maXhlZFdpZHRoID0gdHJ1ZTsKKyAgICAg
ICAgbG9hZDMyKGFkZHJlc3MsIE1JUFNSZWdpc3RlcnM6OnQ5KTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIuanIoTUlQU1JlZ2lzdGVyczo6dDkpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAg
ICAgICAgbV9maXhlZFdpZHRoID0gZmFsc2U7CisgICAgfQorCisgICAgLy8gQXJpdGhtZXRpYyBj
b250cm9sIGZsb3cgb3BlcmF0aW9uczoKKyAgICAvLworICAgIC8vIFRoaXMgc2V0IG9mIGNvbmRp
dGlvbmFsIGJyYW5jaCBvcGVyYXRpb25zIGJyYW5jaCBiYXNlZAorICAgIC8vIG9uIHRoZSByZXN1
bHQgb2YgYW4gYXJpdGhtZXRpYyBvcGVyYXRpb24uICBUaGUgb3BlcmF0aW9uCisgICAgLy8gaXMg
cGVyZm9ybWVkIGFzIG5vcm1hbCwgc3RvcmluZyB0aGUgcmVzdWx0LgorICAgIC8vCisgICAgLy8g
KiBqeiBvcGVyYXRpb25zIGJyYW5jaCBpZiB0aGUgcmVzdWx0IGlzIHplcm8uCisgICAgLy8gKiBq
byBvcGVyYXRpb25zIGJyYW5jaCBpZiB0aGUgKHNpZ25lZCkgYXJpdGhtZXRpYworICAgIC8vICAg
b3BlcmF0aW9uIGNhdXNlZCBhbiBvdmVyZmxvdyB0byBvY2N1ci4KKworICAgIEp1bXAgYnJhbmNo
QWRkMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICBBU1NFUlQoKGNvbmQgPT0gT3ZlcmZsb3cpIHx8IChjb25kID09IFNpZ25l
ZCkgfHwgKGNvbmQgPT0gWmVybykgfHwgKGNvbmQgPT0gTm9uWmVybykpOworICAgICAgICBpZiAo
Y29uZCA9PSBPdmVyZmxvdykgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICBtb3Zl
ICAgIGRlc3QsIGRhdGFUZW1wCisgICAgICAgICAgICAgICAgeG9yICAgICBjbXBUZW1wLCBkYXRh
VGVtcCwgc3JjCisgICAgICAgICAgICAgICAgYmx0eiAgICBjbXBUZW1wLCBOb19vdmVyZmxvdyAg
ICAjIGRpZmYgc2lnbiBiaXQgLT4gbm8gb3ZlcmZsb3cKKyAgICAgICAgICAgICAgICBhZGR1ICAg
IGRlc3QsIGRhdGFUZW1wLCBzcmMKKyAgICAgICAgICAgICAgICB4b3IgICAgIGNtcFRlbXAsIGRl
c3QsIGRhdGFUZW1wCisgICAgICAgICAgICAgICAgYmdleiAgICBjbXBUZW1wLCBOb19vdmVyZmxv
dyAgICAjIHNhbWUgc2lnbiBiaWcgLT4gbm8gb3ZlcmZsb3cKKyAgICAgICAgICAgICAgICBub3AK
KyAgICAgICAgICAgICAgICBiICAgICAgIE92ZXJmbG93CisgICAgICAgICAgICAgICAgbm9wCisg
ICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAg
bm9wCisgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICBOb19vdmVyZmxvdzoKKyAgICAg
ICAgICAgICovCisgICAgICAgICAgICBtb3ZlKGRlc3QsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIueG9ySW5zbihjbXBUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVn
aXN0ZXIsIHNyYyk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5ibHR6KGNtcFRlbXBSZWdpc3Rl
ciwgMTApOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShkZXN0LCBkYXRhVGVtcFJlZ2lz
dGVyLCBzcmMpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIueG9ySW5zbihjbXBUZW1wUmVnaXN0
ZXIsIGRlc3QsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYmdl
eihjbXBUZW1wUmVnaXN0ZXIsIDcpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7Cisg
ICAgICAgICAgICByZXR1cm4ganVtcCgpOworICAgICAgICB9CisgICAgICAgIGlmIChjb25kID09
IFNpZ25lZCkgeworICAgICAgICAgICAgYWRkMzIoc3JjLCBkZXN0KTsKKyAgICAgICAgICAgIC8v
IENoZWNrIGlmIGRlc3QgaXMgbmVnYXRpdmUuCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHQo
Y21wVGVtcFJlZ2lzdGVyLCBkZXN0LCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsKKyAgICAgICAgICAg
IHJldHVybiBicmFuY2hOb3RFcXVhbChjbXBUZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onpl
cm8pOworICAgICAgICB9CisgICAgICAgIGlmIChjb25kID09IFplcm8pIHsKKyAgICAgICAgICAg
IGFkZDMyKHNyYywgZGVzdCk7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRXF1YWwoZGVzdCwg
TUlQU1JlZ2lzdGVyczo6emVybyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gTm9u
WmVybykgeworICAgICAgICAgICAgYWRkMzIoc3JjLCBkZXN0KTsKKyAgICAgICAgICAgIHJldHVy
biBicmFuY2hOb3RFcXVhbChkZXN0LCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsKKyAgICAgICAgfQor
ICAgICAgICBBU1NFUlQoMCk7CisgICAgICAgIHJldHVybiBKdW1wKCk7CisgICAgfQorCisgICAg
SnVtcCBicmFuY2hBZGQzMihDb25kaXRpb24gY29uZCwgSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICBtb3ZlKGltbSwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAg
cmV0dXJuIGJyYW5jaEFkZDMyKGNvbmQsIGltbVRlbXBSZWdpc3RlciwgZGVzdCk7CisgICAgfQor
CisgICAgSnVtcCBicmFuY2hNdWwzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBzcmMsIFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBPdmVyZmxvdykg
fHwgKGNvbmQgPT0gU2lnbmVkKSB8fCAoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJv
KSk7CisgICAgICAgIGlmIChjb25kID09IE92ZXJmbG93KSB7CisgICAgICAgICAgICAvKgorICAg
ICAgICAgICAgICAgIG11bHQgICAgc3JjLCBkZXN0CisgICAgICAgICAgICAgICAgbWZoaSAgICBk
YXRhVGVtcAorICAgICAgICAgICAgICAgIG1mbG8gICAgZGVzdAorICAgICAgICAgICAgICAgIHNy
YSAgICAgYWRkclRlbXAsIGRlc3QsIDMxCisgICAgICAgICAgICAgICAgYmVxICAgICBkYXRhVGVt
cCwgYWRkclRlbXAsIE5vX292ZXJmbG93ICMgYWxsIHNpZ24gYml0cyAoYml0IDYzIHRvIGJpdCAz
MSkgYXJlIHRoZSBzYW1lIC0+IG5vIG92ZXJmbG93CisgICAgICAgICAgICAgICAgbm9wCisgICAg
ICAgICAgICAgICAgYiAgICAgICBPdmVyZmxvdworICAgICAgICAgICAgICAgIG5vcAorICAgICAg
ICAgICAgICAgIG5vcAorICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgICAgIG5vcAor
ICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgTm9fb3ZlcmZsb3c6CisgICAgICAgICAg
ICAqLworICAgICAgICAgICAgbV9hc3NlbWJsZXIubXVsdChzcmMsIGRlc3QpOworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIubWZoaShkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLm1mbG8oZGVzdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zcmEoYWRkclRlbXBS
ZWdpc3RlciwgZGVzdCwgMzEpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYmVxKGRhdGFUZW1w
UmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIDcpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
bm9wKCk7CisgICAgICAgICAgICByZXR1cm4ganVtcCgpOworICAgICAgICB9CisgICAgICAgIGlm
IChjb25kID09IFNpZ25lZCkgeworICAgICAgICAgICAgbXVsMzIoc3JjLCBkZXN0KTsKKyAgICAg
ICAgICAgIC8vIENoZWNrIGlmIGRlc3QgaXMgbmVnYXRpdmUuCisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5zbHQoY21wVGVtcFJlZ2lzdGVyLCBkZXN0LCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsKKyAg
ICAgICAgICAgIHJldHVybiBicmFuY2hOb3RFcXVhbChjbXBUZW1wUmVnaXN0ZXIsIE1JUFNSZWdp
c3RlcnM6Onplcm8pOworICAgICAgICB9CisgICAgICAgIGlmIChjb25kID09IFplcm8pIHsKKyAg
ICAgICAgICAgIG11bDMyKHNyYywgZGVzdCk7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRXF1
YWwoZGVzdCwgTUlQU1JlZ2lzdGVyczo6emVybyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNv
bmQgPT0gTm9uWmVybykgeworICAgICAgICAgICAgbXVsMzIoc3JjLCBkZXN0KTsKKyAgICAgICAg
ICAgIHJldHVybiBicmFuY2hOb3RFcXVhbChkZXN0LCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsKKyAg
ICAgICAgfQorICAgICAgICBBU1NFUlQoMCk7CisgICAgICAgIHJldHVybiBKdW1wKCk7CisgICAg
fQorCisgICAgSnVtcCBicmFuY2hNdWwzMihDb25kaXRpb24gY29uZCwgSW1tMzIgaW1tLCBSZWdp
c3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbW92ZShpbW0sIGlt
bVRlbXBSZWdpc3Rlcik7CisgICAgICAgIG1vdmUoc3JjLCBkZXN0KTsKKyAgICAgICAgcmV0dXJu
IGJyYW5jaE11bDMyKGNvbmQsIGltbVRlbXBSZWdpc3RlciwgZGVzdCk7CisgICAgfQorCisgICAg
SnVtcCBicmFuY2hTdWIzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBPdmVyZmxvdykgfHwgKGNv
bmQgPT0gU2lnbmVkKSB8fCAoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7Cisg
ICAgICAgIGlmIChjb25kID09IE92ZXJmbG93KSB7CisgICAgICAgICAgICAvKgorICAgICAgICAg
ICAgICAgIG1vdmUgICAgZGVzdCwgZGF0YVRlbXAKKyAgICAgICAgICAgICAgICB4b3IgICAgIGNt
cFRlbXAsIGRhdGFUZW1wLCBzcmMKKyAgICAgICAgICAgICAgICBiZ2V6ICAgIGNtcFRlbXAsIE5v
X292ZXJmbG93ICAgICMgc2FtZSBzaWduIGJpdCAtPiBubyBvdmVyZmxvdworICAgICAgICAgICAg
ICAgIHN1YnUgICAgZGVzdCwgZGF0YVRlbXAsIHNyYworICAgICAgICAgICAgICAgIHhvciAgICAg
Y21wVGVtcCwgZGVzdCwgZGF0YVRlbXAKKyAgICAgICAgICAgICAgICBiZ2V6ICAgIGNtcFRlbXAs
IE5vX292ZXJmbG93ICAgICMgc2FtZSBzaWduIGJpdCAtPiBubyBvdmVyZmxvdworICAgICAgICAg
ICAgICAgIG5vcAorICAgICAgICAgICAgICAgIGIgICAgICAgT3ZlcmZsb3cKKyAgICAgICAgICAg
ICAgICBub3AKKyAgICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAgICAgICBub3AKKyAgICAg
ICAgICAgICAgICBub3AKKyAgICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAgIE5vX292ZXJm
bG93OgorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1vdmUoZGVzdCwgZGF0YVRlbXBSZWdp
c3Rlcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3JJbnNuKGNtcFRlbXBSZWdpc3Rlciwg
ZGF0YVRlbXBSZWdpc3Rlciwgc3JjKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmJnZXooY21w
VGVtcFJlZ2lzdGVyLCAxMCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdWJ1KGRlc3QsIGRh
dGFUZW1wUmVnaXN0ZXIsIHNyYyk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3JJbnNuKGNt
cFRlbXBSZWdpc3RlciwgZGVzdCwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5iZ2V6KGNtcFRlbXBSZWdpc3RlciwgNyk7CisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5ub3AoKTsKKyAgICAgICAgICAgIHJldHVybiBqdW1wKCk7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKGNvbmQgPT0gU2lnbmVkKSB7CisgICAgICAgICAgICBzdWIzMihzcmMsIGRlc3QpOworICAg
ICAgICAgICAgLy8gQ2hlY2sgaWYgZGVzdCBpcyBuZWdhdGl2ZS4KKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLnNsdChjbXBUZW1wUmVnaXN0ZXIsIGRlc3QsIE1JUFNSZWdpc3RlcnM6Onplcm8pOwor
ICAgICAgICAgICAgcmV0dXJuIGJyYW5jaE5vdEVxdWFsKGNtcFRlbXBSZWdpc3RlciwgTUlQU1Jl
Z2lzdGVyczo6emVybyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gWmVybykgewor
ICAgICAgICAgICAgc3ViMzIoc3JjLCBkZXN0KTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hF
cXVhbChkZXN0LCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
Y29uZCA9PSBOb25aZXJvKSB7CisgICAgICAgICAgICBzdWIzMihzcmMsIGRlc3QpOworICAgICAg
ICAgICAgcmV0dXJuIGJyYW5jaE5vdEVxdWFsKGRlc3QsIE1JUFNSZWdpc3RlcnM6Onplcm8pOwor
ICAgICAgICB9CisgICAgICAgIEFTU0VSVCgwKTsKKyAgICAgICAgcmV0dXJuIEp1bXAoKTsKKyAg
ICB9CisKKyAgICBKdW1wIGJyYW5jaFN1YjMyKENvbmRpdGlvbiBjb25kLCBJbW0zMiBpbW0sIFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1vdmUoaW1tLCBpbW1UZW1wUmVnaXN0ZXIp
OworICAgICAgICByZXR1cm4gYnJhbmNoU3ViMzIoY29uZCwgaW1tVGVtcFJlZ2lzdGVyLCBkZXN0
KTsKKyAgICB9CisKKyAgICAvLyBNaXNjZWxsYW5lb3VzIG9wZXJhdGlvbnM6CisKKyAgICB2b2lk
IGJyZWFrcG9pbnQoKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYmtwdCgpOworICAgIH0K
KworICAgIENhbGwgbmVhckNhbGwoKQorICAgIHsKKyAgICAgICAgLyogV2UgbmVlZCB0d28gd29y
ZHMgZm9yIHJlbGF4YXRpb24uICAqLworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmphbCgpOworICAgICAg
ICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIubmV3
Sm1wU3JjKCksIENhbGw6OkxpbmthYmxlTmVhcik7CisgICAgfQorCisgICAgQ2FsbCBjYWxsKCkK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmx1aShNSVBTUmVnaXN0ZXJzOjp0OSwgMCk7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLm9yaShNSVBTUmVnaXN0ZXJzOjp0OSwgTUlQU1JlZ2lzdGVyczo6
dDksIDApOworICAgICAgICBtX2Fzc2VtYmxlci5qYWxyKE1JUFNSZWdpc3RlcnM6OnQ5KTsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIHJldHVybiBDYWxsKG1fYXNzZW1ibGVy
Lm5ld0ptcFNyYygpLCBDYWxsOjpMaW5rYWJsZSk7CisgICAgfQorCisgICAgQ2FsbCBjYWxsKFJl
Z2lzdGVySUQgdGFyZ2V0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuamFscih0YXJnZXQp
OworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgcmV0dXJuIENhbGwobV9hc3Nl
bWJsZXIubmV3Sm1wU3JjKCksIENhbGw6Ok5vbmUpOworICAgIH0KKworICAgIENhbGwgY2FsbChB
ZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2ZpeGVkV2lkdGggPSB0cnVlOworICAg
ICAgICBsb2FkMzIoYWRkcmVzcywgTUlQU1JlZ2lzdGVyczo6dDkpOworICAgICAgICBtX2Fzc2Vt
Ymxlci5qYWxyKE1JUFNSZWdpc3RlcnM6OnQ5KTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7
CisgICAgICAgIG1fZml4ZWRXaWR0aCA9IGZhbHNlOworICAgICAgICByZXR1cm4gQ2FsbChtX2Fz
c2VtYmxlci5uZXdKbXBTcmMoKSwgQ2FsbDo6Tm9uZSk7CisgICAgfQorCisgICAgdm9pZCByZXQo
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuanIoTUlQU1JlZ2lzdGVyczo6cmEpOworICAg
ICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICB9CisKKyAgICB2b2lkIHNldDMyKENvbmRpdGlv
biBjb25kLCBSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQsIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB7CisgICAgICAgIGlmIChjb25kID09IEVxdWFsIHx8IGNvbmQgPT0gWmVybykgewor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIueG9ySW5zbihkZXN0LCBsZWZ0LCByaWdodCk7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5zbHRpdShkZXN0LCBkZXN0LCAxKTsKKyAgICAgICAgfSBlbHNl
IGlmIChjb25kID09IE5vdEVxdWFsIHx8IGNvbmQgPT0gTm9uWmVybykgeworICAgICAgICAgICAg
bV9hc3NlbWJsZXIueG9ySW5zbihkZXN0LCBsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5zbHR1KGRlc3QsIE1JUFNSZWdpc3RlcnM6Onplcm8sIGRlc3QpOworICAgICAgICB9
IGVsc2UgaWYgKGNvbmQgPT0gQWJvdmUpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHR1KGRl
c3QsIHJpZ2h0LCBsZWZ0KTsKKyAgICAgICAgZWxzZSBpZiAoY29uZCA9PSBBYm92ZU9yRXF1YWwp
IHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdHUoZGVzdCwgbGVmdCwgcmlnaHQpOworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIueG9yaShkZXN0LCBkZXN0LCAxKTsKKyAgICAgICAgfSBlbHNl
IGlmIChjb25kID09IEJlbG93KQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0dShkZXN0LCBs
ZWZ0LCByaWdodCk7CisgICAgICAgIGVsc2UgaWYgKGNvbmQgPT0gQmVsb3dPckVxdWFsKSB7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHR1KGRlc3QsIHJpZ2h0LCBsZWZ0KTsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLnhvcmkoZGVzdCwgZGVzdCwgMSk7CisgICAgICAgIH0gZWxzZSBpZiAo
Y29uZCA9PSBHcmVhdGVyVGhhbikKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdChkZXN0LCBy
aWdodCwgbGVmdCk7CisgICAgICAgIGVsc2UgaWYgKGNvbmQgPT0gR3JlYXRlclRoYW5PckVxdWFs
KSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHQoZGVzdCwgbGVmdCwgcmlnaHQpOworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIueG9yaShkZXN0LCBkZXN0LCAxKTsKKyAgICAgICAgfSBlbHNl
IGlmIChjb25kID09IExlc3NUaGFuKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0KGRlc3Qs
IGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgZWxzZSBpZiAoY29uZCA9PSBMZXNzVGhhbk9yRXF1YWwp
IHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdChkZXN0LCByaWdodCwgbGVmdCk7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci54b3JpKGRlc3QsIGRlc3QsIDEpOworICAgICAgICB9IGVsc2Ug
aWYgKGNvbmQgPT0gT3ZlcmZsb3cpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAg
eG9yICAgICBjbXBUZW1wLCBsZWZ0LCByaWdodAorICAgICAgICAgICAgICAgIGJnZXogICAgRG9u
ZSwgY21wVGVtcCAgICMgc2FtZSBzaWduIGJpdCAtPiBubyBvdmVyZmxvdworICAgICAgICAgICAg
ICAgIG1vdmUgICAgZGVzdCwgMAorICAgICAgICAgICAgICAgIHN1YnUgICAgY21wVGVtcCwgbGVm
dCwgcmlnaHQKKyAgICAgICAgICAgICAgICB4b3IgICAgIGNtcFRlbXAsIGNtcFRlbXAsIGxlZnQg
IyBkaWZmIHNpZ24gYml0IC0+IG92ZXJmbG93CisgICAgICAgICAgICAgICAgc2x0ICAgICBkZXN0
LCBjbXBUZW1wLCAwCisgICAgICAgICAgICAgIERvbmU6CisgICAgICAgICAgICAqLworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIueG9ySW5zbihjbXBUZW1wUmVnaXN0ZXIsIGxlZnQsIHJpZ2h0KTsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmJnZXooY21wVGVtcFJlZ2lzdGVyLCA0KTsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLm1vdmUoZGVzdCwgTUlQU1JlZ2lzdGVyczo6emVybyk7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5zdWJ1KGNtcFRlbXBSZWdpc3RlciwgbGVmdCwgcmlnaHQpOwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIueG9ySW5zbihjbXBUZW1wUmVnaXN0ZXIsIGNtcFRlbXBS
ZWdpc3RlciwgbGVmdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHQoZGVzdCwgY21wVGVt
cFJlZ2lzdGVyLCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsKKyAgICAgICAgfSBlbHNlIGlmIChjb25k
ID09IFNpZ25lZCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3VidShkZXN0LCBsZWZ0LCBy
aWdodCk7CisgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgcmVzdWx0IGlzIG5lZ2F0aXZlLgor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0KGRlc3QsIGRlc3QsIE1JUFNSZWdpc3RlcnM6Onpl
cm8pOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBzZXQzMihDb25kaXRpb24gY29uZCwg
UmVnaXN0ZXJJRCBsZWZ0LCBJbW0zMiByaWdodCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAg
ICAgICAgbW92ZShyaWdodCwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgc2V0MzIoY29uZCwg
bGVmdCwgaW1tVGVtcFJlZ2lzdGVyLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHNldFRlc3Qz
MihDb25kaXRpb24gY29uZCwgQWRkcmVzcyBhZGRyZXNzLCBJbW0zMiBtYXNrLCBSZWdpc3RlcklE
IGRlc3QpCisgICAgeworICAgICAgICBBU1NFUlQoKGNvbmQgPT0gWmVybykgfHwgKGNvbmQgPT0g
Tm9uWmVybykpOworICAgICAgICBsb2FkMzIoYWRkcmVzcywgZGF0YVRlbXBSZWdpc3Rlcik7Cisg
ICAgICAgIGlmIChtYXNrLm1fdmFsdWUgPT0gLTEgJiYgIW1fZml4ZWRXaWR0aCkgeworICAgICAg
ICAgICAgaWYgKGNvbmQgPT0gWmVybykKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHRp
dShkZXN0LCBkYXRhVGVtcFJlZ2lzdGVyLCAxKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5zbHR1KGRlc3QsIE1JUFNSZWdpc3RlcnM6Onplcm8sIGRhdGFU
ZW1wUmVnaXN0ZXIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbW92ZShtYXNrLCBp
bW1UZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYW5kSW5zbihjbXBUZW1w
UmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgaWYgKGNvbmQgPT0gWmVybykKKyAg
ICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHRpdShkZXN0LCBjbXBUZW1wUmVnaXN0ZXIsIDEp
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdHUoZGVz
dCwgTUlQU1JlZ2lzdGVyczo6emVybywgY21wVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIERhdGFMYWJlbDMyIG1vdmVXaXRoUGF0Y2goSW1tMzIgaW1tLCBSZWdpc3RlcklE
IGRlc3QpCisgICAgeworICAgICAgICBtX2ZpeGVkV2lkdGggPSB0cnVlOworICAgICAgICBEYXRh
TGFiZWwzMiBsYWJlbCh0aGlzKTsKKyAgICAgICAgbW92ZShpbW0sIGRlc3QpOworICAgICAgICBt
X2ZpeGVkV2lkdGggPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGxhYmVsOworICAgIH0KKworICAg
IERhdGFMYWJlbFB0ciBtb3ZlV2l0aFBhdGNoKEltbVB0ciBpbml0aWFsVmFsdWUsIFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fZml4ZWRXaWR0aCA9IHRydWU7CisgICAgICAgIERh
dGFMYWJlbFB0ciBsYWJlbCh0aGlzKTsKKyAgICAgICAgbW92ZShpbml0aWFsVmFsdWUsIGRlc3Qp
OworICAgICAgICBtX2ZpeGVkV2lkdGggPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGxhYmVsOwor
ICAgIH0KKworICAgIEp1bXAgYnJhbmNoUHRyV2l0aFBhdGNoKENvbmRpdGlvbiBjb25kLCBSZWdp
c3RlcklEIGxlZnQsIERhdGFMYWJlbFB0ciYgZGF0YUxhYmVsLCBJbW1QdHIgaW5pdGlhbFJpZ2h0
VmFsdWUgPSBJbW1QdHIoMCkpCisgICAgeworICAgICAgICBtX2ZpeGVkV2lkdGggPSB0cnVlOwor
ICAgICAgICBkYXRhTGFiZWwgPSBtb3ZlV2l0aFBhdGNoKGluaXRpYWxSaWdodFZhbHVlLCBpbW1U
ZW1wUmVnaXN0ZXIpOworICAgICAgICBKdW1wIHRlbXAgPSBicmFuY2gzMihjb25kLCBsZWZ0LCBp
bW1UZW1wUmVnaXN0ZXIpOworICAgICAgICBtX2ZpeGVkV2lkdGggPSBmYWxzZTsKKyAgICAgICAg
cmV0dXJuIHRlbXA7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hQdHJXaXRoUGF0Y2goQ29uZGl0
aW9uIGNvbmQsIEFkZHJlc3MgbGVmdCwgRGF0YUxhYmVsUHRyJiBkYXRhTGFiZWwsIEltbVB0ciBp
bml0aWFsUmlnaHRWYWx1ZSA9IEltbVB0cigwKSkKKyAgICB7CisgICAgICAgIG1fZml4ZWRXaWR0
aCA9IHRydWU7CisgICAgICAgIGxvYWQzMihsZWZ0LCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAg
ICAgZGF0YUxhYmVsID0gbW92ZVdpdGhQYXRjaChpbml0aWFsUmlnaHRWYWx1ZSwgaW1tVGVtcFJl
Z2lzdGVyKTsKKyAgICAgICAgSnVtcCB0ZW1wID0gYnJhbmNoMzIoY29uZCwgZGF0YVRlbXBSZWdp
c3RlciwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgbV9maXhlZFdpZHRoID0gZmFsc2U7Cisg
ICAgICAgIHJldHVybiB0ZW1wOworICAgIH0KKworICAgIERhdGFMYWJlbFB0ciBzdG9yZVB0cldp
dGhQYXRjaChJbW1QdHIgaW5pdGlhbFZhbHVlLCBJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcykKKyAg
ICB7CisgICAgICAgIG1fZml4ZWRXaWR0aCA9IHRydWU7CisgICAgICAgIERhdGFMYWJlbFB0ciBk
YXRhTGFiZWwgPSBtb3ZlV2l0aFBhdGNoKGluaXRpYWxWYWx1ZSwgZGF0YVRlbXBSZWdpc3Rlcik7
CisgICAgICAgIHN0b3JlMzIoZGF0YVRlbXBSZWdpc3RlciwgYWRkcmVzcyk7CisgICAgICAgIG1f
Zml4ZWRXaWR0aCA9IGZhbHNlOworICAgICAgICByZXR1cm4gZGF0YUxhYmVsOworICAgIH0KKwor
ICAgIERhdGFMYWJlbFB0ciBzdG9yZVB0cldpdGhQYXRjaChJbXBsaWNpdEFkZHJlc3MgYWRkcmVz
cykKKyAgICB7CisgICAgICAgIHJldHVybiBzdG9yZVB0cldpdGhQYXRjaChJbW1QdHIoMCksIGFk
ZHJlc3MpOworICAgIH0KKworICAgIENhbGwgdGFpbFJlY3Vyc2l2ZUNhbGwoKQorICAgIHsKKyAg
ICAgICAgLy8gTGlrZSBhIG5vcm1hbCBjYWxsLCBidXQgZG9uJ3QgdXBkYXRlIHRoZSByZXR1cm5l
ZCBhZGRyZXNzIHJlZ2lzdGVyCisgICAgICAgIG1fZml4ZWRXaWR0aCA9IHRydWU7CisgICAgICAg
IG1vdmUoSW1tMzIoMCksIE1JUFNSZWdpc3RlcnM6OnQ5KTsKKyAgICAgICAgbV9hc3NlbWJsZXIu
anIoTUlQU1JlZ2lzdGVyczo6dDkpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAg
ICAgbV9maXhlZFdpZHRoID0gZmFsc2U7CisgICAgICAgIHJldHVybiBDYWxsKG1fYXNzZW1ibGVy
Lm5ld0ptcFNyYygpLCBDYWxsOjpMaW5rYWJsZSk7CisgICAgfQorCisgICAgQ2FsbCBtYWtlVGFp
bFJlY3Vyc2l2ZUNhbGwoSnVtcCBvbGRKdW1wKQorICAgIHsKKyAgICAgICAgb2xkSnVtcC5saW5r
KHRoaXMpOworICAgICAgICByZXR1cm4gdGFpbFJlY3Vyc2l2ZUNhbGwoKTsKKyAgICB9CisKKyAg
ICB2b2lkIGxvYWREb3VibGUoSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MsIEZQUmVnaXN0ZXJJRCBk
ZXN0KQorICAgIHsKKyNpZiBXVEZfTUlQU19JU0EoMSkKKyAgICAgICAgLyoKKyAgICAgICAgICAg
IGxpICAgICAgICAgIGFkZHJUZW1wLCBhZGRyZXNzLm9mZnNldAorICAgICAgICAgICAgYWRkdSAg
ICAgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBiYXNlCisgICAgICAgICAgICBsd2MxICAgICAgICBk
ZXN0LCAwKGFkZHJUZW1wKQorICAgICAgICAgICAgbHdjMSAgICAgICAgZGVzdCsxLCA0KGFkZHJU
ZW1wKQorICAgICAgICAgKi8KKyAgICAgICAgbW92ZShJbW0zMihhZGRyZXNzLm9mZnNldCksIGFk
ZHJUZW1wUmVnaXN0ZXIpOworICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0
ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSk7CisgICAgICAgIG1fYXNzZW1ibGVy
Lmx3YzEoZGVzdCwgYWRkclRlbXBSZWdpc3RlciwgMCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmx3
YzEoRlBSZWdpc3RlcklEKGRlc3QgKyAxKSwgYWRkclRlbXBSZWdpc3RlciwgNCk7CisjZWxzZQor
ICAgICAgICBpZiAoYWRkcmVzcy5vZmZzZXQgPj0gLTMyNzY4ICYmIGFkZHJlc3Mub2Zmc2V0IDw9
IDMyNzY3CisgICAgICAgICAgICAmJiAhbV9maXhlZFdpZHRoKSB7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5sZGMxKGRlc3QsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5vZmZzZXQpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICBsdWkgICAgIGFkZHJU
ZW1wLCAob2Zmc2V0ICsgMHg4MDAwKSA+PiAxNgorICAgICAgICAgICAgICAgIGFkZHUgICAgYWRk
clRlbXAsIGFkZHJUZW1wLCBiYXNlCisgICAgICAgICAgICAgICAgbGRjMSAgICBkZXN0LCAob2Zm
c2V0ICYgMHhmZmZmKShhZGRyVGVtcCkKKyAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLmx1aShhZGRyVGVtcFJlZ2lzdGVyLCAoYWRkcmVzcy5vZmZzZXQgKyAweDgwMDAp
ID4+IDE2KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3Rlciwg
YWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LmxkYzEoZGVzdCwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQpOworICAgICAgICB9
CisjZW5kaWYKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlRG91YmxlKEZQUmVnaXN0ZXJJRCBzcmMs
IEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyNpZiBXVEZfTUlQU19JU0EoMSkKKyAg
ICAgICAgLyoKKyAgICAgICAgICAgIGxpICAgICAgICAgIGFkZHJUZW1wLCBhZGRyZXNzLm9mZnNl
dAorICAgICAgICAgICAgYWRkdSAgICAgICAgYWRkclRlbXAsIGFkZHJUZW1wLCBiYXNlCisgICAg
ICAgICAgICBzd2MxICAgICAgICBkZXN0LCAwKGFkZHJUZW1wKQorICAgICAgICAgICAgc3djMSAg
ICAgICAgZGVzdCsxLCA0KGFkZHJUZW1wKQorICAgICAgICAgKi8KKyAgICAgICAgbW92ZShJbW0z
MihhZGRyZXNzLm9mZnNldCksIGFkZHJUZW1wUmVnaXN0ZXIpOworICAgICAgICBtX2Fzc2VtYmxl
ci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSk7
CisgICAgICAgIG1fYXNzZW1ibGVyLnN3YzEoc3JjLCBhZGRyVGVtcFJlZ2lzdGVyLCAwKTsKKyAg
ICAgICAgbV9hc3NlbWJsZXIuc3djMShGUFJlZ2lzdGVySUQoc3JjICsgMSksIGFkZHJUZW1wUmVn
aXN0ZXIsIDQpOworI2Vsc2UKKyAgICAgICAgaWYgKGFkZHJlc3Mub2Zmc2V0ID49IC0zMjc2OCAm
JiBhZGRyZXNzLm9mZnNldCA8PSAzMjc2NworICAgICAgICAgICAgJiYgIW1fZml4ZWRXaWR0aCkK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNkYzEoc3JjLCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mu
b2Zmc2V0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAg
IGx1aSAgICAgYWRkclRlbXAsIChvZmZzZXQgKyAweDgwMDApID4+IDE2CisgICAgICAgICAgICAg
ICAgYWRkdSAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGJhc2UKKyAgICAgICAgICAgICAgICBzZGMx
ICAgIHNyYywgKG9mZnNldCAmIDB4ZmZmZikoYWRkclRlbXApCisgICAgICAgICAgICAgICovCisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5sdWkoYWRkclRlbXBSZWdpc3RlciwgKGFkZHJlc3Mub2Zm
c2V0ICsgMHg4MDAwKSA+PiAxNik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJU
ZW1wUmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFzZSk7CisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5zZGMxKHNyYywgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQp
OworICAgICAgICB9CisjZW5kaWYKKyAgICB9CisKKyAgICB2b2lkIGFkZERvdWJsZShGUFJlZ2lz
dGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVy
LmFkZGQoZGVzdCwgZGVzdCwgc3JjKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZERvdWJsZShBZGRy
ZXNzIHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBsb2FkRG91YmxlKHNy
YywgZnBUZW1wUmVnaXN0ZXIpOworICAgICAgICBtX2Fzc2VtYmxlci5hZGRkKGRlc3QsIGRlc3Qs
IGZwVGVtcFJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICB2b2lkIHN1YkRvdWJsZShGUFJlZ2lzdGVy
SUQgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN1
YmQoZGVzdCwgZGVzdCwgc3JjKTsKKyAgICB9CisKKyAgICB2b2lkIHN1YkRvdWJsZShBZGRyZXNz
IHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBsb2FkRG91YmxlKHNyYywg
ZnBUZW1wUmVnaXN0ZXIpOworICAgICAgICBtX2Fzc2VtYmxlci5zdWJkKGRlc3QsIGRlc3QsIGZw
VGVtcFJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICB2b2lkIG11bERvdWJsZShGUFJlZ2lzdGVySUQg
c3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm11bGQo
ZGVzdCwgZGVzdCwgc3JjKTsKKyAgICB9CisKKyAgICB2b2lkIG11bERvdWJsZShBZGRyZXNzIHNy
YywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBsb2FkRG91YmxlKHNyYywgZnBU
ZW1wUmVnaXN0ZXIpOworICAgICAgICBtX2Fzc2VtYmxlci5tdWxkKGRlc3QsIGRlc3QsIGZwVGVt
cFJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICB2b2lkIGNvbnZlcnRJbnQzMlRvRG91YmxlKFJlZ2lz
dGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVy
Lm10YzEoc3JjLCBmcFRlbXBSZWdpc3Rlcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmN2dGR3KGRl
c3QsIGZwVGVtcFJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICB2b2lkIGluc2VydFJlbGF4YXRpb25X
b3JkcygpCisgICAgeworICAgICAgICAvKiBXZSBuZWVkIGZvdXIgd29yZHMgZm9yIHJlbGF4YXRp
b24uICovCisgICAgICAgIG1fYXNzZW1ibGVyLmJlcShNSVBTUmVnaXN0ZXJzOjp6ZXJvLCBNSVBT
UmVnaXN0ZXJzOjp6ZXJvLCAzKTsgLy8gSnVtcCBvdmVyIG5vcHM7CisgICAgICAgIG1fYXNzZW1i
bGVyLm5vcCgpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubm9wKCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hUcnVlKCkKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLmFwcGVuZEp1bXAoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYmMxdCgpOwor
ICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgaW5zZXJ0UmVsYXhhdGlvbldvcmRz
KCk7CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLm5ld0ptcFNyYygpKTsKKyAgICB9
CisKKyAgICBKdW1wIGJyYW5jaEZhbHNlKCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFw
cGVuZEp1bXAoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYmMxZigpOworICAgICAgICBtX2Fzc2Vt
Ymxlci5ub3AoKTsKKyAgICAgICAgaW5zZXJ0UmVsYXhhdGlvbldvcmRzKCk7CisgICAgICAgIHJl
dHVybiBKdW1wKG1fYXNzZW1ibGVyLm5ld0ptcFNyYygpKTsKKyAgICB9CisKKyAgICBKdW1wIGJy
YW5jaEVxdWFsKFJlZ2lzdGVySUQgcnMsIFJlZ2lzdGVySUQgcnQpCisgICAgeworICAgICAgICBt
X2Fzc2VtYmxlci5hcHBlbmRKdW1wKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmJlcShycywgcnQs
IDApOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgaW5zZXJ0UmVsYXhhdGlv
bldvcmRzKCk7CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLm5ld0ptcFNyYygpKTsK
KyAgICB9CisKKyAgICBKdW1wIGJyYW5jaE5vdEVxdWFsKFJlZ2lzdGVySUQgcnMsIFJlZ2lzdGVy
SUQgcnQpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hcHBlbmRKdW1wKCk7CisgICAgICAg
IG1fYXNzZW1ibGVyLmJuZShycywgcnQsIDApOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsK
KyAgICAgICAgaW5zZXJ0UmVsYXhhdGlvbldvcmRzKCk7CisgICAgICAgIHJldHVybiBKdW1wKG1f
YXNzZW1ibGVyLm5ld0ptcFNyYygpKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaERvdWJsZShE
b3VibGVDb25kaXRpb24gY29uZCwgRlBSZWdpc3RlcklEIGxlZnQsIEZQUmVnaXN0ZXJJRCByaWdo
dCkKKyAgICB7CisgICAgICAgIGlmIChjb25kID09IERvdWJsZUVxdWFsKSB7CisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5jZXFkKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIHJldHVybiBicmFu
Y2hUcnVlKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gRG91YmxlTm90RXF1YWwp
IHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNlcWQobGVmdCwgcmlnaHQpOworICAgICAgICAg
ICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7IC8vIGZhbHNlCisgICAgICAgIH0KKyAgICAgICAgaWYg
KGNvbmQgPT0gRG91YmxlR3JlYXRlclRoYW4pIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNu
Z3RkKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hGYWxzZSgpOyAvLyBm
YWxzZQorICAgICAgICB9CisgICAgICAgIGlmIChjb25kID09IERvdWJsZUdyZWF0ZXJUaGFuT3JF
cXVhbCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY25nZWQocmlnaHQsIGxlZnQpOworICAg
ICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7IC8vIGZhbHNlCisgICAgICAgIH0KKyAgICAg
ICAgaWYgKGNvbmQgPT0gRG91YmxlTGVzc1RoYW4pIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LmNsdGQobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoY29uZCA9PSBEb3VibGVMZXNzVGhhbk9yRXF1YWwpIHsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLmNsZWQobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgcmV0
dXJuIGJyYW5jaFRydWUoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29uZCA9PSBEb3VibGVF
cXVhbE9yVW5vcmRlcmVkKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jdWVxZChsZWZ0LCBy
aWdodCk7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgpOworICAgICAgICB9CisgICAg
ICAgIGlmIChjb25kID09IERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQpIHsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLmNvbGVkKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIHJldHVybiBi
cmFuY2hGYWxzZSgpOyAvLyBmYWxzZQorICAgICAgICB9CisgICAgICAgIGlmIChjb25kID09IERv
dWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKSB7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5jb2x0ZChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2Uo
KTsgLy8gZmFsc2UKKyAgICAgICAgfQorICAgICAgICBpZiAoY29uZCA9PSBEb3VibGVMZXNzVGhh
bk9yVW5vcmRlcmVkKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jdWx0ZChsZWZ0LCByaWdo
dCk7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgpOworICAgICAgICB9CisgICAgICAg
IGlmIChjb25kID09IERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKSB7CisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5jdWxlZChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICByZXR1cm4g
YnJhbmNoVHJ1ZSgpOworICAgICAgICB9CisgICAgICAgIEFTU0VSVCgwKTsKKworICAgICAgICBy
ZXR1cm4gSnVtcCgpOworICAgIH0KKworICAgIC8vIFRydW5jYXRlcyAnc3JjJyB0byBhbiBpbnRl
Z2VyLCBhbmQgcGxhY2VzIHRoZSByZXN1bHRpbmcgJ2Rlc3QnLgorICAgIC8vIElmIHRoZSByZXN1
bHQgaXMgbm90IHJlcHJlc2VudGFibGUgYXMgYSAzMiBiaXQgdmFsdWUsIGJyYW5jaC4KKyAgICAv
LyBNYXkgYWxzbyBicmFuY2ggZm9yIHNvbWUgdmFsdWVzIHRoYXQgYXJlIHJlcHJlc2VudGFibGUg
aW4gMzIgYml0cworICAgIC8vIChzcGVjaWZpY2FsbHksIGluIHRoaXMgY2FzZSwgSU5UX01BWCAw
eDdmZmZmZmZmKS4KKyAgICBKdW1wIGJyYW5jaFRydW5jYXRlRG91YmxlVG9JbnQzMihGUFJlZ2lz
dGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci50
cnVuY3dkKGZwVGVtcFJlZ2lzdGVyLCBzcmMpOworICAgICAgICBtX2Fzc2VtYmxlci5tZmMxKGRl
c3QsIGZwVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKEVxdWFsLCBkZXN0
LCBJbW0zMigweDdmZmZmZmZmKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIC8vIElmIG1fZml4
ZWRXaWR0aCBpcyB0cnVlLCB3ZSB3aWxsIGdlbmVyYXRlIGEgZml4ZWQgbnVtYmVyIG9mIGluc3Ry
dWN0aW9ucy4KKyAgICAvLyBPdGhlcndpc2UsIHdlIGNhbiBlbWl0IGFueSBudW1iZXIgb2YgaW5z
dHJ1Y3Rpb25zLgorICAgIGJvb2wgbV9maXhlZFdpZHRoOworCisgICAgZnJpZW5kIGNsYXNzIExp
bmtCdWZmZXI7CisgICAgZnJpZW5kIGNsYXNzIFJlcGF0Y2hCdWZmZXI7CisKKyAgICBzdGF0aWMg
dm9pZCBsaW5rQ2FsbCh2b2lkKiBjb2RlLCBDYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGZ1bmN0aW9u
KQorICAgIHsKKyAgICAgICAgTUlQU0Fzc2VtYmxlcjo6bGlua0NhbGwoY29kZSwgY2FsbC5tX2pt
cCwgZnVuY3Rpb24udmFsdWUoKSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVwYXRjaENh
bGwoQ29kZUxvY2F0aW9uQ2FsbCBjYWxsLCBDb2RlTG9jYXRpb25MYWJlbCBkZXN0aW5hdGlvbikK
KyAgICB7CisgICAgICAgIE1JUFNBc3NlbWJsZXI6OnJlbGlua0NhbGwoY2FsbC5kYXRhTG9jYXRp
b24oKSwgZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgfQorCisgICAgc3Rh
dGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbCBjYWxsLCBGdW5jdGlvblB0ciBk
ZXN0aW5hdGlvbikKKyAgICB7CisgICAgICAgIE1JUFNBc3NlbWJsZXI6OnJlbGlua0NhbGwoY2Fs
bC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAg
fQorCit9OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQVNTRU1CTEVSKSAmJiBDUFUoTUlQUykK
KworI2VuZGlmIC8vIE1hY3JvQXNzZW1ibGVyTUlQU19oCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9q
aXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2pp
dC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgJKHJldmlzaW9uIDU1MTk1KQorKysgSmF2YVNjcmlwdENv
cmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMs
MTAgQEAKICNpbmNsdWRlIDxlMzJzdGQuaD4KICNlbmRpZgogCisjaWYgQ1BVKE1JUFMpICYmIE9T
KExJTlVYKQorI2luY2x1ZGUgPHN5cy9jYWNoZWN0bC5oPgorI2VuZGlmCisKICNpZiBPUyhXSU5D
RSkKIC8vIEZyb20gcGtmdW5jcy5oIChwcml2YXRlIGhlYWRlciBmaWxlIGZyb20gdGhlIFBsYXRm
b3JtIEJ1aWxkZXIpCiAjZGVmaW5lIENBQ0hFX1NZTkNfQUxMIDB4MDdGCkBAIC0xOTAsNiArMTk0
LDMyIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBjYWNoZUZsdXNoKHZvaWQqLCBzaXplX3Qp
CiAgICAgewogICAgIH0KKyNlbGlmIENQVShNSVBTKQorICAgIHN0YXRpYyB2b2lkIGNhY2hlRmx1
c2godm9pZCogY29kZSwgc2l6ZV90IHNpemUpCisgICAgeworI2lmIENPTVBJTEVSKEdDQykgJiYg
KEdDQ19WRVJTSU9OID49IDQwMzAwKQorI2lmIFdURl9NSVBTX0lTQV9SRVYoMikgJiYgKEdDQ19W
RVJTSU9OIDwgNDA0MDMpCisgICAgICAgIGludCBsaW5lU2l6ZTsKKyAgICAgICAgYXNtKCJyZGh3
ciAlMCwgJDEiIDogIj1yIiAobGluZVNpemUpKTsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gTW9k
aWZ5ICJzdGFydCIgYW5kICJlbmQiIHRvIGF2b2lkIEdDQyA0LjMuMC00LjQuMiBidWcgaW4KKyAg
ICAgICAgLy8gbWlwc19leHBhbmRfc3luY2lfbG9vcCB0aGF0IG1heSBleGVjdXRlIHN5bmNpIG9u
ZSBtb3JlIHRpbWUuCisgICAgICAgIC8vICJzdGFydCIgcG9pbnRzIHRvIHRoZSBmaXNydCBieXRl
IG9mIHRoZSBjYWNoZSBsaW5lLgorICAgICAgICAvLyAiZW5kIiBwb2ludHMgdG8gdGhlIGxhc3Qg
Ynl0ZSBvZiB0aGUgbGluZSBiZWZvcmUgdGhlIGxhc3QgY2FjaGUgbGluZS4KKyAgICAgICAgLy8g
QmVjYXVzZSBzaXplIGlzIGFsd2F5cyBhIG11bHRpcGxlIG9mIDQsIHRoaXMgaXMgc2FmZSB0byBz
ZXQKKyAgICAgICAgLy8gImVuZCIgdG8gdGhlIGxhc3QgYnl0ZS4KKyAgICAgICAgLy8KKyAgICAg
ICAgaW50cHRyX3Qgc3RhcnQgPSByZWludGVycHJldF9jYXN0PGludHB0cl90Pihjb2RlKSAmICgt
bGluZVNpemUpOworICAgICAgICBpbnRwdHJfdCBlbmQgPSAoKHJlaW50ZXJwcmV0X2Nhc3Q8aW50
cHRyX3Q+KGNvZGUpICsgc2l6ZSAtIDEpICYgKC1saW5lU2l6ZSkpIC0gMTsKKyAgICAgICAgX19i
dWlsdGluX19fY2xlYXJfY2FjaGUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc3RhcnQpLCByZWlu
dGVycHJldF9jYXN0PGNoYXIqPihlbmQpKTsKKyNlbHNlCisgICAgICAgIGludHB0cl90IGVuZCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGNvZGUpICsgc2l6ZTsKKyAgICAgICAgX19idWls
dGluX19fY2xlYXJfY2FjaGUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY29kZSksIHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KGVuZCkpOworI2VuZGlmCisjZWxzZQorICAgICAgICBfZmx1c2hfY2Fj
aGUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY29kZSksIHNpemUsIEJDQUNIRSk7CisjZW5kaWYK
KyAgICB9CiAjZWxpZiBDUFUoQVJNX1RIVU1CMikgJiYgT1MoSVBIT05FX09TKQogICAgIHN0YXRp
YyB2b2lkIGNhY2hlRmx1c2godm9pZCogY29kZSwgc2l6ZV90IHNpemUpCiAgICAgewpJbmRleDog
SmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUvd3RmL1BsYXRmb3JtLmgJKHJldmlzaW9uIDU1MTk1KQorKysgSmF2YVNjcmlwdENvcmUvd3Rm
L1BsYXRmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw2ICsxMDQsMjMgQEAKICNkZWZpbmUg
V1RGX0NQVV9JQTY0IDEKICNlbmRpZgogCisvKiBDUFUoTUlQUykgLSBNSVBTIDMyLWJpdCAqLwor
LyogTm90ZTogT25seSBPMzIgQUJJIGlzIHRlc3RlZCwgc28gd2UgZW5hYmxlIGl0IGZvciBPMzIg
QUJJIGZvciBub3cuICAqLworI2lmIChkZWZpbmVkKG1pcHMpIHx8IGRlZmluZWQoX19taXBzX18p
KSBcCisgICAgJiYgZGVmaW5lZChfQUJJTzMyKQorI2RlZmluZSBXVEZfQ1BVX01JUFMgMQorI2lm
IGRlZmluZWQoX19NSVBTRUJfXykKKyNkZWZpbmUgV1RGX0NQVV9CSUdfRU5ESUFOIDEKKyNlbmRp
ZgorI2RlZmluZSBXVEZfTUlQU19QSUMgKGRlZmluZWQgX19QSUNfXykKKyNkZWZpbmUgV1RGX01J
UFNfQVJDSCBfX21pcHMKKyNkZWZpbmUgV1RGX01JUFNfSVNBKHYpIChkZWZpbmVkIFdURl9NSVBT
X0FSQ0ggJiYgV1RGX01JUFNfQVJDSCA9PSB2KQorI2RlZmluZSBXVEZfTUlQU19JU0FfQVRfTEVB
U1QodikgKGRlZmluZWQgV1RGX01JUFNfQVJDSCAmJiBXVEZfTUlQU19BUkNIID49IHYpCisjZGVm
aW5lIFdURl9NSVBTX0FSQ0hfUkVWIF9fbWlwc19pc2FfcmV2CisjZGVmaW5lIFdURl9NSVBTX0lT
QV9SRVYodikgKGRlZmluZWQgV1RGX01JUFNfQVJDSF9SRVYgJiYgV1RGX01JUFNfQVJDSF9SRVYg
PT0gdikKKyNkZWZpbmUgV1RGX01JUFNfRE9VQkxFX0ZMT0FUIChkZWZpbmVkIF9fbWlwc19oYXJk
X2Zsb2F0ICYmICFkZWZpbmVkIF9fbWlwc19zaW5nbGVfZmxvYXQpCisjZW5kaWYgLyogTUlQUyAq
LworCiAvKiBDUFUoUFBDKSAtIFBvd2VyUEMgMzItYml0ICovCiAjaWYgICBkZWZpbmVkKF9fcHBj
X18pICAgICBcCiAgICAgfHwgZGVmaW5lZChfX1BQQ19fKSAgICAgXApAQCAtODMwLDcgKzg0Nyw3
IEBACiAjaWYgIWRlZmluZWQoV1RGX1VTRV9KU1ZBTFVFNjQpICYmICFkZWZpbmVkKFdURl9VU0Vf
SlNWQUxVRTMyKSAmJiAhZGVmaW5lZChXVEZfVVNFX0pTVkFMVUUzMl82NCkKICNpZiAoQ1BVKFg4
Nl82NCkgJiYgKE9TKFVOSVgpIHx8IE9TKFdJTkRPV1MpKSkgfHwgQ1BVKElBNjQpIHx8IENQVShB
TFBIQSkKICNkZWZpbmUgV1RGX1VTRV9KU1ZBTFVFNjQgMQotI2VsaWYgQ1BVKEFSTSkgfHwgQ1BV
KFBQQzY0KQorI2VsaWYgQ1BVKEFSTSkgfHwgQ1BVKFBQQzY0KSB8fCBDUFUoTUlQUykKICNkZWZp
bmUgV1RGX1VTRV9KU1ZBTFVFMzIgMQogI2VsaWYgT1MoV0lORE9XUykgJiYgQ09NUElMRVIoTUlO
R1cpCiAvKiBVc2luZyBKU1ZBTFVFMzJfNjQgY2F1c2VzIHBhZGRpbmcvYWxpZ25lbWVudCBpc3N1
ZXMgZm9yIEpJVFN0dWJBcmcKQEAgLTk1MCw3ICs5NjcsOCBAQCBvbiBNaW5HVy4gU2VlIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3NoCiAgICAgfHwgKENQVShYODYpICYmIE9TKFdJTkRPV1MpICYm
IENPTVBJTEVSKE1TVkMpKSBcCiAgICAgfHwgKENQVShYODYpICYmIE9TKExJTlVYKSAmJiBHQ0Nf
VkVSU0lPTiA+PSA0MDEwMCkgXAogICAgIHx8IChDUFUoWDg2XzY0KSAmJiBPUyhMSU5VWCkgJiYg
R0NDX1ZFUlNJT04gPj0gNDAxMDApIFwKLSAgICB8fCAoQ1BVKEFSTV9UUkFESVRJT05BTCkgJiYg
T1MoTElOVVgpKQorICAgIHx8IChDUFUoQVJNX1RSQURJVElPTkFMKSAmJiBPUyhMSU5VWCkpIFwK
KyAgICB8fCAoQ1BVKE1JUFMpICYmIE9TKExJTlVYKSkKICNkZWZpbmUgRU5BQkxFX1lBUlIgMQog
I2RlZmluZSBFTkFCTEVfWUFSUl9KSVQgMQogI2VuZGlmCkluZGV4OiBKYXZhU2NyaXB0Q29yZS95
YXJyL1JlZ2V4SklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4
SklULmNwcAkocmV2aXNpb24gNTUxOTUpCisrKyBKYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4SklU
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsMTYgQEAgY2xhc3MgUmVnZXhHZW5lcmF0
b3IgOiBwcml2YXRlIE1hY3JvQXNzZQogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1Qx
ID0gQVJNUmVnaXN0ZXJzOjpyNjsKIAogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJldHVy
blJlZ2lzdGVyID0gQVJNUmVnaXN0ZXJzOjpyMDsKKyNlbGlmIENQVShNSVBTKQorICAgIHN0YXRp
YyBjb25zdCBSZWdpc3RlcklEIGlucHV0ID0gTUlQU1JlZ2lzdGVyczo6YTA7CisgICAgc3RhdGlj
IGNvbnN0IFJlZ2lzdGVySUQgaW5kZXggPSBNSVBTUmVnaXN0ZXJzOjphMTsKKyAgICBzdGF0aWMg
Y29uc3QgUmVnaXN0ZXJJRCBsZW5ndGggPSBNSVBTUmVnaXN0ZXJzOjphMjsKKyAgICBzdGF0aWMg
Y29uc3QgUmVnaXN0ZXJJRCBvdXRwdXQgPSBNSVBTUmVnaXN0ZXJzOjphMzsKKworICAgIHN0YXRp
YyBjb25zdCBSZWdpc3RlcklEIHJlZ1QwID0gTUlQU1JlZ2lzdGVyczo6dDQ7CisgICAgc3RhdGlj
IGNvbnN0IFJlZ2lzdGVySUQgcmVnVDEgPSBNSVBTUmVnaXN0ZXJzOjp0NTsKKworICAgIHN0YXRp
YyBjb25zdCBSZWdpc3RlcklEIHJldHVyblJlZ2lzdGVyID0gTUlQU1JlZ2lzdGVyczo6djA7CiAj
ZWxpZiBDUFUoWDg2KQogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGlucHV0ID0gWDg2UmVn
aXN0ZXJzOjplYXg7CiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgaW5kZXggPSBYODZSZWdp
c3RlcnM6OmVkeDsKQEAgLTEzMTMsNiArMTMyMyw4IEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDog
cHJpdmF0ZSBNYWNyb0Fzc2UKICAgICAgICAgcHVzaChBUk1SZWdpc3RlcnM6OnI1KTsKICAgICAg
ICAgcHVzaChBUk1SZWdpc3RlcnM6OnI2KTsKICAgICAgICAgbW92ZShBUk1SZWdpc3RlcnM6OnIz
LCBvdXRwdXQpOworI2VsaWYgQ1BVKE1JUFMpCisgICAgICAgIC8vIERvIG5vdGhpbmcuCiAjZW5k
aWYKICAgICB9CiAKQEAgLTEzMzAsNiArMTM0Miw4IEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDog
cHJpdmF0ZSBNYWNyb0Fzc2UKICAgICAgICAgcG9wKEFSTVJlZ2lzdGVyczo6cjYpOwogICAgICAg
ICBwb3AoQVJNUmVnaXN0ZXJzOjpyNSk7CiAgICAgICAgIHBvcChBUk1SZWdpc3RlcnM6OnI0KTsK
KyNlbGlmIENQVShNSVBTKQorICAgICAgICAvLyBEbyBub3RoaW5nCiAjZW5kaWYKICAgICAgICAg
cmV0KCk7CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50070</attachid>
            <date>2010-03-04 17:33:12 -0800</date>
            <delta_ts>2010-03-09 11:39:36 -0800</delta_ts>
            <desc>MIPS JIT Part2 Patch 20100304</desc>
            <filename>mips_jit20100304.diff</filename>
            <type>text/plain</type>
            <size>16466</size>
            <attacher name="Chao-ying Fu">fu</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDU1NTYzKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTAtMDMtMDQgIENoYW8teWlu
ZyBGdSAgPGZ1QG1pcHMuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIE1JUFMgSklUIFN1cHBvcnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMDE0NAorCisgICAgICAgIFRoZSBmb2xsb3dpbmcgY2hh
bmdlcyBlbmFibGUgTUlQUyBKSVQuCisKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICog
aml0L0pJVElubGluZU1ldGhvZHMuaDoKKyAgICAgICAgKEpTQzo6SklUOjpwcmVzZXJ2ZVJldHVy
bkFkZHJlc3NBZnRlckNhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OnJlc3RvcmVSZXR1cm5BZGRy
ZXNzQmVmb3JlUmV0dXJuKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAg
ICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpKSVRUaHVua3Mp
OgorICAgICAgICAqIGppdC9KSVRTdHVicy5oOgorICAgICAgICAoSlNDOjpKSVRTdGFja0ZyYW1l
OjpyZXR1cm5BZGRyZXNzU2xvdCk6CisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6CisKIDIwMTAt
MDMtMDQgIFNoaW5pY2hpcm8gSGFtYWppICA8aGFtYWppQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBVbnJldmlld2VkLiBSZW1vdmUgYSBub24tQVNDSUkgY2hhcmFjdGVyIGludHJvZHVjZWQgaW4g
dGhlIGZvbGxvd2luZyBidWcuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiA1NTU1MSkKKysrIEph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjY4LDYgKzI2OCwyOCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBmcFJl
Z1QwID0gQVJNUmVnaXN0ZXJzOjpkMDsKICAgICAgICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJ
RCBmcFJlZ1QxID0gQVJNUmVnaXN0ZXJzOjpkMTsKICAgICAgICAgc3RhdGljIGNvbnN0IEZQUmVn
aXN0ZXJJRCBmcFJlZ1QyID0gQVJNUmVnaXN0ZXJzOjpkMjsKKyNlbGlmIENQVShNSVBTKQorICAg
ICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZXR1cm5WYWx1ZVJlZ2lzdGVyID0gTUlQU1Jl
Z2lzdGVyczo6djA7CisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGNhY2hlZFJlc3Vs
dFJlZ2lzdGVyID0gTUlQU1JlZ2lzdGVyczo6djA7CisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdp
c3RlcklEIGZpcnN0QXJndW1lbnRSZWdpc3RlciA9IE1JUFNSZWdpc3RlcnM6OmEwOworCisgICAg
ICAgIC8vIHJlZ1QwIG11c3QgYmUgdjAgZm9yIHJldHVybmluZyBhIDMyLWJpdCB2YWx1ZS4KKyAg
ICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnVDAgPSBNSVBTUmVnaXN0ZXJzOjp2MDsK
KworICAgICAgICAvLyByZWdUMSBtdXN0IGJlIHYxIGZvciByZXR1cm5pbmcgYSBwYWlyIG9mIDMy
LWJpdCB2YWx1ZS4KKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnVDEgPSBNSVBT
UmVnaXN0ZXJzOjp2MTsKKworICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdUMiA9
IE1JUFNSZWdpc3RlcnM6OnQ0OworCisgICAgICAgIC8vIHJlZ1QzIG11c3QgYmUgc2F2ZWQgaW4g
dGhlIGNhbGxlZSwgc28gdXNlIGFuIFMgcmVnaXN0ZXIuCisgICAgICAgIHN0YXRpYyBjb25zdCBS
ZWdpc3RlcklEIHJlZ1QzID0gTUlQU1JlZ2lzdGVyczo6czI7CisKKyAgICAgICAgc3RhdGljIGNv
bnN0IFJlZ2lzdGVySUQgY2FsbEZyYW1lUmVnaXN0ZXIgPSBNSVBTUmVnaXN0ZXJzOjpzMDsKKyAg
ICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgdGltZW91dENoZWNrUmVnaXN0ZXIgPSBNSVBT
UmVnaXN0ZXJzOjpzMTsKKworICAgICAgICBzdGF0aWMgY29uc3QgRlBSZWdpc3RlcklEIGZwUmVn
VDAgPSBNSVBTUmVnaXN0ZXJzOjpmNDsKKyAgICAgICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJ
RCBmcFJlZ1QxID0gTUlQU1JlZ2lzdGVyczo6ZjY7CisgICAgICAgIHN0YXRpYyBjb25zdCBGUFJl
Z2lzdGVySUQgZnBSZWdUMiA9IE1JUFNSZWdpc3RlcnM6OmY4OwogI2Vsc2UKICAgICAjZXJyb3Ig
IkpJVCBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0uIgogI2VuZGlmCkBAIC02ODYsNiAr
NzA4LDQ4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyBzZXF1ZW5jZVB1dEJ5SWQKICAg
ICAgICAgc3RhdGljIGNvbnN0IGludCBzZXF1ZW5jZVB1dEJ5SWRJbnN0cnVjdGlvblNwYWNlID0g
Mjg7CiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgc2VxdWVuY2VQdXRCeUlkQ29uc3RhbnRTcGFj
ZSA9IDM7CisjZWxpZiBDUFUoTUlQUykKKyNpZiBXVEZfTUlQU19JU0EoMSkKKyAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBwYXRjaE9mZnNldFB1dEJ5SWRTdHJ1Y3R1cmUgPSAxNjsKKyAgICAgICAg
c3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldFB1dEJ5SWRFeHRlcm5hbExvYWQgPSA0ODsKKyAg
ICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaExlbmd0aFB1dEJ5SWRFeHRlcm5hbExvYWQgPSAy
MDsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldFB1dEJ5SWRQcm9wZXJ0eU1h
cE9mZnNldCA9IDY4OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJ
ZFN0cnVjdHVyZSA9IDE2OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0
QnlJZEJyYW5jaFRvU2xvd0Nhc2UgPSA0ODsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRj
aE9mZnNldEdldEJ5SWRFeHRlcm5hbExvYWQgPSA0ODsKKyAgICAgICAgc3RhdGljIGNvbnN0IGlu
dCBwYXRjaExlbmd0aEdldEJ5SWRFeHRlcm5hbExvYWQgPSAyMDsKKyAgICAgICAgc3RhdGljIGNv
bnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRQcm9wZXJ0eU1hcE9mZnNldCA9IDY4OworICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZFB1dFJlc3VsdCA9IDg4OworI2lm
IEVOQUJMRShPUENPREVfU0FNUExJTkcpCisgICAgICAgICNlcnJvciAiT1BDT0RFX1NBTVBMSU5H
IGlzIG5vdCB5ZXQgc3VwcG9ydGVkIgorI2Vsc2UKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBw
YXRjaE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwgPSA0MDsKKyNlbmRpZgorICAgICAgICBzdGF0
aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0T3BDYWxsQ29tcGFyZVRvSnVtcCA9IDMyOworICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0TWV0aG9kQ2hlY2tQcm90b09iaiA9IDMyOwor
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0TWV0aG9kQ2hlY2tQcm90b1N0cnVj
dCA9IDU2OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0TWV0aG9kQ2hlY2tQ
dXRGdW5jdGlvbiA9IDg4OworI2Vsc2UgLy8gV1RGX01JUFNfSVNBKDEpCisgICAgICAgIHN0YXRp
YyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRQdXRCeUlkU3RydWN0dXJlID0gMTI7CisgICAgICAgIHN0
YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRQdXRCeUlkRXh0ZXJuYWxMb2FkID0gNDQ7CisgICAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hMZW5ndGhQdXRCeUlkRXh0ZXJuYWxMb2FkID0gMTY7
CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRQdXRCeUlkUHJvcGVydHlNYXBP
ZmZzZXQgPSA2MDsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRT
dHJ1Y3R1cmUgPSAxMjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5
SWRCcmFuY2hUb1Nsb3dDYXNlID0gNDQ7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hP
ZmZzZXRHZXRCeUlkRXh0ZXJuYWxMb2FkID0gNDQ7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
cGF0Y2hMZW5ndGhHZXRCeUlkRXh0ZXJuYWxMb2FkID0gMTY7CisgICAgICAgIHN0YXRpYyBjb25z
dCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkUHJvcGVydHlNYXBPZmZzZXQgPSA2MDsKKyAgICAgICAg
c3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRQdXRSZXN1bHQgPSA3NjsKKyNpZiBF
TkFCTEUoT1BDT0RFX1NBTVBMSU5HKQorICAgICAgICAjZXJyb3IgIk9QQ09ERV9TQU1QTElORyBp
cyBub3QgeWV0IHN1cHBvcnRlZCIKKyNlbHNlCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0
Y2hPZmZzZXRHZXRCeUlkU2xvd0Nhc2VDYWxsID0gNDA7CisjZW5kaWYKKyAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBwYXRjaE9mZnNldE9wQ2FsbENvbXBhcmVUb0p1bXAgPSAzMjsKKyAgICAgICAg
c3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhvZENoZWNrUHJvdG9PYmogPSAzMjsKKyAg
ICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhvZENoZWNrUHJvdG9TdHJ1Y3Qg
PSA1MjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhvZENoZWNrUHV0
RnVuY3Rpb24gPSA4NDsKKyNlbmRpZgogI2VuZGlmCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82
NCkKIApJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiA1
NTU1MSkKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE2MSw2ICsxNjEsMjMgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cmVzdG9y
ZVJldHVybkFkZAogICAgIGxvYWRQdHIoYWRkcmVzcywgbGlua1JlZ2lzdGVyKTsKIH0KIAorI2Vs
aWYgQ1BVKE1JUFMpCisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnByZXNlcnZlUmV0dXJuQWRk
cmVzc0FmdGVyQ2FsbChSZWdpc3RlcklEIHJlZykKK3sKKyAgICBtb3ZlKHJldHVybkFkZHJlc3NS
ZWdpc3RlciwgcmVnKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cmVzdG9yZVJldHVy
bkFkZHJlc3NCZWZvcmVSZXR1cm4oUmVnaXN0ZXJJRCByZWcpCit7CisgICAgbW92ZShyZWcsIHJl
dHVybkFkZHJlc3NSZWdpc3Rlcik7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnJlc3Rv
cmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEFkZHJlc3MgYWRkcmVzcykKK3sKKyAgICBsb2Fk
UHRyKGFkZHJlc3MsIHJldHVybkFkZHJlc3NSZWdpc3Rlcik7Cit9CisKICNlbHNlIC8vIENQVShY
ODYpIHx8IENQVShYODZfNjQpCiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnByZXNlcnZlUmV0
dXJuQWRkcmVzc0FmdGVyQ2FsbChSZWdpc3RlcklEIHJlZykKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDU1NTUxKQorKysgSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzgwLDYgKzE3ODAsNTYgQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wbwogCiAgICAgYWRkUHRyKEltbTMyKHNpemVv
ZihBcmdMaXN0KSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAorI2VsaWYgQ1BVKE1JUFMpCisg
ICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIzMihSZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291
bnQsIHJlZ1QwKTsKKworICAgIC8vIEFsbG9jYXRlIHN0YWNrIHNwYWNlIGZvciBvdXIgYXJnbGlz
dAorICAgIENPTVBJTEVfQVNTRVJUKCEoc2l6ZW9mKEFyZ0xpc3QpICYgMHg3KSwgQXJnTGlzdF9z
aG91bGRfYnlfOGJ5dGVfYWxpZ25lZCk7CisgICAgc3ViUHRyKEltbTMyKHNpemVvZihBcmdMaXN0
KSArIDI0KSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgLy8gU2V0IHVwIGFyZ3VtZW50
cworICAgIHN1YlB0cihJbW0zMigxKSwgcmVnVDApOyAvLyBEb24ndCBpbmNsdWRlICd0aGlzJyBp
biBhcmdjb3VudAorCisgICAgLy8gUHVzaCBhcmdjb3VudCB0byAyNCArIG9mZnNldCgkc3ApCisg
ICAgc3RvcmVQdHIocmVnVDAsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIDI0ICsgT0JK
RUNUX09GRlNFVE9GKEFyZ0xpc3QsIG1fYXJnQ291bnQpKSk7CisKKyAgICAvLyBDYWxjdWxhdGUg
dGhlIHN0YXJ0IG9mIHRoZSBjYWxsZnJhbWUgaGVhZGVyLCBhbmQgc3RvcmUgaW4gcmVnVDEKKyAg
ICBtb3ZlKGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMSk7CisgICAgc3ViMzIoSW1tMzIoUmVnaXN0
ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplICogKGludDMyX3Qpc2l6ZW9mKFJlZ2lzdGVyKSks
IHJlZ1QxKTsKKworICAgIC8vIENhbGN1bGF0ZSBzdGFydCBvZiBhcmd1bWVudHMgYXMgY2FsbGZy
YW1lIGhlYWRlciAtIHNpemVvZihSZWdpc3RlcikgKiBhcmdjb3VudCAocmVnVDEpCisgICAgbXVs
MzIoSW1tMzIoc2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1QwLCByZWdUMCk7CisgICAgc3ViUHRyKHJl
Z1QwLCByZWdUMSk7CisKKyAgICAvLyBwdXNoIHBvaW50ZXIgdG8gYXJndW1lbnRzIHRvIDI0ICsg
b2Zmc2V0KCRzcCkKKyAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdp
c3RlciwgMjQgKyBPQkpFQ1RfT0ZGU0VUT0YoQXJnTGlzdCwgbV9hcmdzKSkpOworCisgICAgLy8g
U2V0dXAgYXJnMzogcmVnVDEgY3VycmVudGx5IHBvaW50cyB0byB0aGUgZmlyc3QgYXJndW1lbnQs
IHJlZ1QxLXNpemVvZihSZWdpc3RlcikgcG9pbnRzIHRvICd0aGlzJworICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMSwgLShpbnQzMl90KXNpemVvZihSZWdpc3RlcikpLCBNSVBTUmVnaXN0ZXJzOjph
Myk7CisKKyAgICAvLyBTZXR1cCBhcmcyOgorICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVy
UHRyKFJlZ2lzdGVyRmlsZTo6Q2FsbGVlLCBNSVBTUmVnaXN0ZXJzOjphMik7CisKKyAgICAvLyBT
ZXR1cCBhcmcxOgorICAgIG1vdmUoY2FsbEZyYW1lUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6OmEx
KTsKKworICAgIC8vIFNldHVwIGFyZzQ6IEFyZ0xpc3QgaXMgcGFzc2VkIGJ5IHJlZmVyZW5jZS4g
IEF0IDE2KCRzcCksIHN0b3JlICgkc3AgKyAyNCkKKyAgICBhZGRQdHIoSW1tMzIoMjQpLCBzdGFj
a1BvaW50ZXJSZWdpc3RlciwgcmVnVDIpOworICAgIHN0b3JlUHRyKHJlZ1QyLCBBZGRyZXNzKHN0
YWNrUG9pbnRlclJlZ2lzdGVyLCAxNikpOworCisgICAgLy8gU2V0dXAgYXJnMCBhcyAyMCgkc3Ap
IHRvIGhvbGQgdGhlIHJldHVybmVkIHN0cnVjdHVyZS4KKyAgICBBU1NFUlQoc2l6ZW9mKEpTVmFs
dWUpID09IDQpOworICAgIGFkZFB0cihJbW0zMigyMCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBN
SVBTUmVnaXN0ZXJzOjphMCk7CisKKyAgICAvLyBDYWxsCisgICAgY2FsbChBZGRyZXNzKE1JUFNS
ZWdpc3RlcnM6OmEyLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9kYXRhKSkpOworCisg
ICAgLy8gR2V0IHJldHVybmVkIHZhbHVlIGZyb20gMCgkdjApIHdoaWNoIGlzIHRoZSBzYW1lIGFz
IDIwKCRzcCkKKyAgICBsb2FkUHRyKEFkZHJlc3MocmV0dXJuVmFsdWVSZWdpc3RlciwgMCksIHJl
dHVyblZhbHVlUmVnaXN0ZXIpOworCisgICAgLy8gUmVzdG9yZSBzdGFjayBzcGFjZQorICAgIGFk
ZFB0cihJbW0zMihzaXplb2YoQXJnTGlzdCkgKyAyNCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
KwogI2VsaWYgRU5BQkxFKEpJVF9PUFRJTUlaRV9OQVRJVkVfQ0FMTCkKICNlcnJvciAiSklUX09Q
VElNSVpFX05BVElWRV9DQUxMIG5vdCB5ZXQgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0uIgog
I2Vsc2UKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gNTU1NTEpCisrKyBK
YXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NDIsNiAr
NjQyLDEwMiBAQCBTWU1CT0xfU1RSSU5HKGN0aU9wVGhyb3dOb3RDYXVnaHQpICI6IiAiCiAgICAg
Im1vdiBwYywgbHIiICJcbiIKICk7CiAKKyNlbGlmIENQVShNSVBTKQorCisjaWYgVVNFKEpJVF9T
VFVCX0FSR1VNRU5UX1ZBX0xJU1QpCisjZXJyb3IgIkpJVF9TVFVCX0FSR1VNRU5UX1ZBX0xJU1Qg
bm90IHN1cHBvcnRlZCBvbiBNSVBTLiIKKyNlbmRpZgorCithc20gdm9sYXRpbGUoCisiLnRleHQi
ICJcbiIKKyIuYWxpZ24gMiIgIlxuIgorIi5zZXQgbm9yZW9yZGVyIiAiXG4iCisiLnNldCBub21h
Y3JvIiAiXG4iCisiLnNldCBub21pcHMxNiIgIlxuIgorIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkco
Y3RpVHJhbXBvbGluZSkgIlxuIgorIi5lbnQgIiBTWU1CT0xfU1RSSU5HKGN0aVRyYW1wb2xpbmUp
ICJcbiIKK1NZTUJPTF9TVFJJTkcoY3RpVHJhbXBvbGluZSkgIjoiICJcbiIKKyAgICAiYWRkaXUg
JDI5LCQyOSwtNzIiICJcbiIKKyAgICAic3cgICAgJDMxLDQ0KCQyOSkiICJcbiIKKyAgICAic3cg
ICAgJDE4LDQwKCQyOSkiICJcbiIKKyAgICAic3cgICAgJDE3LDM2KCQyOSkiICJcbiIKKyAgICAi
c3cgICAgJDE2LDMyKCQyOSkiICJcbiIKKyNpZiBXVEZfTUlQU19QSUMKKyAgICAic3cgICAgJDI4
LDI4KCQyOSkiICJcbiIKKyNlbmRpZgorICAgICJtb3ZlICAkMTYsJDYgICAgICAgIyBzZXQgY2Fs
bEZyYW1lUmVnaXN0ZXIiICJcbiIKKyAgICAibGkgICAgJDE3LDUxMiAgICAgICMgc2V0IHRpbWVv
dXRDaGVja1JlZ2lzdGVyIiAiXG4iCisgICAgIm1vdmUgICQyNSwkNCAgICAgICAjIG1vdmUgZXhl
Y3V0YWJsZUFkZHJlc3MgdG8gdDkiICJcbiIKKyAgICAic3cgICAgJDUsNTIoJDI5KSAgICMgc3Rv
cmUgcmVnaXN0ZXJGaWxlIHRvIGN1cnJlbnQgc3RhY2siICJcbiIKKyAgICAic3cgICAgJDYsNTYo
JDI5KSAgICMgc3RvcmUgY2FsbEZyYW1lIHRvIGN1cmVudCBzdGFjayIgIlxuIgorICAgICJzdyAg
ICAkNyw2MCgkMjkpICAgIyBzdG9yZSBleGNlcHRpb24gdG8gY3VycmVudCBzdGFjayIgIlxuIgor
ICAgICJsdyAgICAkOCw4OCgkMjkpICAgIyBsb2FkIGVuYWJsZVByb2ZpbGVyUmVmZXJlbmNlIGZy
b20gcHJldmlvdXMgc3RhY2siICJcbiIKKyAgICAibHcgICAgJDksOTIoJDI5KSAgICMgbG9hZCBn
bG9iYWxEYXRhIGZyb20gcHJldmlvdXMgc3RhY2siICJcbiIKKyAgICAic3cgICAgJDgsNjQoJDI5
KSAgICMgc3RvcmUgZW5hYmxlUHJvZmlsZXJSZWZlcmVuY2UgdG8gY3VycmVudCBzdGFjayIgIlxu
IgorICAgICJqYWxyICAkMjUiICJcbiIKKyAgICAic3cgICAgJDksNjgoJDI5KSAgICMgc3RvcmUg
Z2xvYmFsRGF0YSB0byBjdXJyZW50IHN0YWNrIiAiXG4iCisgICAgImx3ICAgICQxNiwzMigkMjkp
IiAiXG4iCisgICAgImx3ICAgICQxNywzNigkMjkpIiAiXG4iCisgICAgImx3ICAgICQxOCw0MCgk
MjkpIiAiXG4iCisgICAgImx3ICAgICQzMSw0NCgkMjkpIiAiXG4iCisgICAgImpyICAgICQzMSIg
IlxuIgorICAgICJhZGRpdSAkMjksJDI5LDcyIiAiXG4iCisiLnNldCByZW9yZGVyIiAiXG4iCisi
LnNldCBtYWNybyIgIlxuIgorIi5lbmQgIiBTWU1CT0xfU1RSSU5HKGN0aVRyYW1wb2xpbmUpICJc
biIKKyk7CisKK2FzbSB2b2xhdGlsZSgKKyIudGV4dCIgIlxuIgorIi5hbGlnbiAyIiAiXG4iCisi
LnNldCBub3Jlb3JkZXIiICJcbiIKKyIuc2V0IG5vbWFjcm8iICJcbiIKKyIuc2V0IG5vbWlwczE2
IiAiXG4iCisiLmdsb2JsICIgU1lNQk9MX1NUUklORyhjdGlWTVRocm93VHJhbXBvbGluZSkgIlxu
IgorIi5lbnQgIiBTWU1CT0xfU1RSSU5HKGN0aVZNVGhyb3dUcmFtcG9saW5lKSAiXG4iCitTWU1C
T0xfU1RSSU5HKGN0aVZNVGhyb3dUcmFtcG9saW5lKSAiOiIgIlxuIgorI2lmIFdURl9NSVBTX1BJ
QworICAgICJsdyAgICAkMjgsMjgoJDI5KSIgIlxuIgorIi5zZXQgbWFjcm8iICJcbiIKKyAgICAi
bGEgICAgJDI1LCIgU1lNQk9MX1NUUklORyhjdGlfdm1fdGhyb3cpICJcbiIKKyIuc2V0IG5vbWFj
cm8iICJcbiIKKyAgICAiYmFsICIgU1lNQk9MX1NUUklORyhjdGlfdm1fdGhyb3cpICJcbiIKKyAg
ICAibW92ZSAgJDQsJDI5IiAiXG4iCisjZWxzZQorICAgICJqYWwgIiBTWU1CT0xfU1RSSU5HKGN0
aV92bV90aHJvdykgIlxuIgorICAgICJtb3ZlICAkNCwkMjkiICJcbiIKKyNlbmRpZgorICAgICJs
dyAgICAkMTYsMzIoJDI5KSIgIlxuIgorICAgICJsdyAgICAkMTcsMzYoJDI5KSIgIlxuIgorICAg
ICJsdyAgICAkMTgsNDAoJDI5KSIgIlxuIgorICAgICJsdyAgICAkMzEsNDQoJDI5KSIgIlxuIgor
ICAgICJqciAgICAkMzEiICJcbiIKKyAgICAiYWRkaXUgJDI5LCQyOSw3MiIgIlxuIgorIi5zZXQg
cmVvcmRlciIgIlxuIgorIi5zZXQgbWFjcm8iICJcbiIKKyIuZW5kICIgU1lNQk9MX1NUUklORyhj
dGlWTVRocm93VHJhbXBvbGluZSkgIlxuIgorKTsKKworYXNtIHZvbGF0aWxlKAorIi50ZXh0IiAi
XG4iCisiLmFsaWduIDIiICJcbiIKKyIuc2V0IG5vcmVvcmRlciIgIlxuIgorIi5zZXQgbm9tYWNy
byIgIlxuIgorIi5zZXQgbm9taXBzMTYiICJcbiIKKyIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGN0
aU9wVGhyb3dOb3RDYXVnaHQpICJcbiIKKyIuZW50ICIgU1lNQk9MX1NUUklORyhjdGlPcFRocm93
Tm90Q2F1Z2h0KSAiXG4iCitTWU1CT0xfU1RSSU5HKGN0aU9wVGhyb3dOb3RDYXVnaHQpICI6IiAi
XG4iCisgICAgImx3ICAgICQxNiwzMigkMjkpIiAiXG4iCisgICAgImx3ICAgICQxNywzNigkMjkp
IiAiXG4iCisgICAgImx3ICAgICQxOCw0MCgkMjkpIiAiXG4iCisgICAgImx3ICAgICQzMSw0NCgk
MjkpIiAiXG4iCisgICAgImpyICAgICQzMSIgIlxuIgorICAgICJhZGRpdSAkMjksJDI5LDcyIiAi
XG4iCisiLnNldCByZW9yZGVyIiAiXG4iCisiLnNldCBtYWNybyIgIlxuIgorIi5lbmQgIiBTWU1C
T0xfU1RSSU5HKGN0aU9wVGhyb3dOb3RDYXVnaHQpICJcbiIKKyk7CisKICNlbGlmIENPTVBJTEVS
KFJWQ1QpICYmIENQVShBUk1fVFJBRElUSU9OQUwpCiAKIF9fYXNtIEVuY29kZWRKU1ZhbHVlIGN0
aVRyYW1wb2xpbmUodm9pZCosIFJlZ2lzdGVyRmlsZSosIENhbGxGcmFtZSosIEpTVmFsdWUqLCBQ
cm9maWxlcioqLCBKU0dsb2JhbERhdGEqKQpAQCAtNzc2LDYgKzg3MiwyMCBAQCBKSVRUaHVua3M6
OkpJVFRodW5rcyhKU0dsb2JhbERhdGEqIGdsb2JhCiAgICAgQVNTRVJUKE9CSkVDVF9PRkZTRVRP
RihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlKSA9PSAweDQw
KTsKIAogICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIHRo
dW5rUmV0dXJuQWRkcmVzcykgPT0gMHgxQyk7CisKKyNlbGlmIENQVShNSVBTKQorICAgIEFTU0VS
VChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIHByZXNlcnZlZEdQKSA9PSAy
OCk7CisgICAgQVNTRVJUKE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgcHJl
c2VydmVkUzApID09IDMyKTsKKyAgICBBU1NFUlQoT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRT
dGFja0ZyYW1lLCBwcmVzZXJ2ZWRTMSkgPT0gMzYpOworICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VU
T0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIHByZXNlcnZlZFMyKSA9PSA0MCk7CisgICAgQVNTRVJU
KE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgcHJlc2VydmVkUmV0dXJuQWRk
cmVzcykgPT0gNDQpOworICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNr
RnJhbWUsIHRodW5rUmV0dXJuQWRkcmVzcykgPT0gNDgpOworICAgIEFTU0VSVChPQkpFQ1RfT0ZG
U0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIHJlZ2lzdGVyRmlsZSkgPT0gNTIpOworICAgIEFT
U0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIGNhbGxGcmFtZSkgPT0g
NTYpOworICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIGV4
Y2VwdGlvbikgPT0gNjApOworICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0
YWNrRnJhbWUsIGVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSkgPT0gNjQpOworICAgIEFTU0VSVChP
QkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIGdsb2JhbERhdGEpID09IDY4KTsK
KwogI2VuZGlmCiB9CiAKQEAgLTEwMzQsNiArMTE0NCw2NSBAQCBzdGF0aWMgTkVWRVJfSU5MSU5F
IHZvaWQgdGhyb3dTdGFja092ZXJmCiAgICAgICAgICk7IFwKICAgICBydHlwZSBKSVRTdHViVGh1
bmtlZF8jI29wKFNUVUJfQVJHU19ERUNMQVJBVElPTikgXAogCisjZWxpZiBDUFUoTUlQUykKKyNp
ZiBXVEZfTUlQU19QSUMKKyNkZWZpbmUgREVGSU5FX1NUVUJfRlVOQ1RJT04ocnR5cGUsIG9wKSBc
CisgICAgZXh0ZXJuICJDIiB7IFwKKyAgICAgICAgcnR5cGUgSklUU3R1YlRodW5rZWRfIyNvcChT
VFVCX0FSR1NfREVDTEFSQVRJT04pOyBcCisgICAgfTsgXAorICAgIGFzbSB2b2xhdGlsZSggXAor
ICAgICAgICAiLnRleHQiICJcbiIgXAorICAgICAgICAiLmFsaWduIDIiICJcbiIgXAorICAgICAg
ICAiLnNldCBub3Jlb3JkZXIiICJcbiIgXAorICAgICAgICAiLnNldCBub21hY3JvIiAiXG4iIFwK
KyAgICAgICAgIi5zZXQgbm9taXBzMTYiICJcbiIgXAorICAgICAgICAiLmdsb2JsICIgU1lNQk9M
X1NUUklORyhjdGlfIyNvcCkgIlxuIiBcCisgICAgICAgICIuZW50ICIgU1lNQk9MX1NUUklORyhj
dGlfIyNvcCkgIlxuIiBcCisgICAgICAgIFNZTUJPTF9TVFJJTkcoY3RpXyMjb3ApICI6IiAiXG4i
IFwKKyAgICAgICAgImx3ICAgICQyOCwyOCgkMjkpIiAiXG4iIFwKKyAgICAgICAgInN3ICAgICQz
MSw0OCgkMjkpIiAiXG4iIFwKKyAgICAgICAgIi5zZXQgbWFjcm8iICJcbiIgXAorICAgICAgICAi
bGEgICAgJDI1LCIgU1lNQk9MX1NUUklORyhKSVRTdHViVGh1bmtlZF8jI29wKSAiXG4iIFwKKyAg
ICAgICAgIi5zZXQgbm9tYWNybyIgIlxuIiBcCisgICAgICAgICJiYWwgIiBTWU1CT0xfU1RSSU5H
KEpJVFN0dWJUaHVua2VkXyMjb3ApICJcbiIgXAorICAgICAgICAibm9wIiAiXG4iIFwKKyAgICAg
ICAgImx3ICAgICQzMSw0OCgkMjkpIiAiXG4iIFwKKyAgICAgICAgImpyICAgICQzMSIgIlxuIiBc
CisgICAgICAgICJub3AiICJcbiIgXAorICAgICAgICAiLnNldCByZW9yZGVyIiAiXG4iIFwKKyAg
ICAgICAgIi5zZXQgbWFjcm8iICJcbiIgXAorICAgICAgICAiLmVuZCAiIFNZTUJPTF9TVFJJTkco
Y3RpXyMjb3ApICJcbiIgXAorICAgICAgICApOyBcCisgICAgcnR5cGUgSklUU3R1YlRodW5rZWRf
IyNvcChTVFVCX0FSR1NfREVDTEFSQVRJT04pCisKKyNlbHNlIC8vIFdURl9NSVBTX1BJQworI2Rl
ZmluZSBERUZJTkVfU1RVQl9GVU5DVElPTihydHlwZSwgb3ApIFwKKyAgICBleHRlcm4gIkMiIHsg
XAorICAgICAgICBydHlwZSBKSVRTdHViVGh1bmtlZF8jI29wKFNUVUJfQVJHU19ERUNMQVJBVElP
Tik7IFwKKyAgICB9OyBcCisgICAgYXNtIHZvbGF0aWxlKCBcCisgICAgICAgICIudGV4dCIgIlxu
IiBcCisgICAgICAgICIuYWxpZ24gMiIgIlxuIiBcCisgICAgICAgICIuc2V0IG5vcmVvcmRlciIg
IlxuIiBcCisgICAgICAgICIuc2V0IG5vbWFjcm8iICJcbiIgXAorICAgICAgICAiLnNldCBub21p
cHMxNiIgIlxuIiBcCisgICAgICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGN0aV8jI29wKSAi
XG4iIFwKKyAgICAgICAgIi5lbnQgIiBTWU1CT0xfU1RSSU5HKGN0aV8jI29wKSAiXG4iIFwKKyAg
ICAgICAgU1lNQk9MX1NUUklORyhjdGlfIyNvcCkgIjoiICJcbiIgXAorICAgICAgICAic3cgICAg
JDMxLDQ4KCQyOSkiICJcbiIgXAorICAgICAgICAiamFsICIgU1lNQk9MX1NUUklORyhKSVRTdHVi
VGh1bmtlZF8jI29wKSAiXG4iIFwKKyAgICAgICAgIm5vcCIgIlxuIiBcCisgICAgICAgICJsdyAg
ICAkMzEsNDgoJDI5KSIgIlxuIiBcCisgICAgICAgICJqciAgICAkMzEiICJcbiIgXAorICAgICAg
ICAibm9wIiAiXG4iIFwKKyAgICAgICAgIi5zZXQgcmVvcmRlciIgIlxuIiBcCisgICAgICAgICIu
c2V0IG1hY3JvIiAiXG4iIFwKKyAgICAgICAgIi5lbmQgIiBTWU1CT0xfU1RSSU5HKGN0aV8jI29w
KSAiXG4iIFwKKyAgICAgICAgKTsgXAorICAgIHJ0eXBlIEpJVFN0dWJUaHVua2VkXyMjb3AoU1RV
Ql9BUkdTX0RFQ0xBUkFUSU9OKQorCisjZW5kaWYKKwogI2VsaWYgQ1BVKEFSTV9UUkFESVRJT05B
TCkgJiYgQ09NUElMRVIoR0NDKQogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKSW5kZXg6IEphdmFT
Y3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2pp
dC9KSVRTdHVicy5oCShyZXZpc2lvbiA1NTU1MSkKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRT
dHVicy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTEsNiArMTkxLDMwIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAvLyBXaGVuIEpJVCBjb2RlIG1ha2VzIGEgY2FsbCwgaXQgcHVzaGVzIGl0cyBy
ZXR1cm4gYWRkcmVzcyBqdXN0IGJlbG93IHRoZSByZXN0IG9mIHRoZSBzdGFjay4KICAgICAgICAg
UmV0dXJuQWRkcmVzc1B0ciogcmV0dXJuQWRkcmVzc1Nsb3QoKSB7IHJldHVybiAmdGh1bmtSZXR1
cm5BZGRyZXNzOyB9CiAgICAgfTsKKyNlbGlmIENQVShNSVBTKQorICAgIHN0cnVjdCBKSVRTdGFj
a0ZyYW1lIHsKKyAgICAgICAgdm9pZCogcmVzZXJ2ZWQ7IC8vIFVudXNlZAorICAgICAgICBKSVRT
dHViQXJnIGFyZ3NbNl07CisKKyAgICAgICAgdm9pZCogcHJlc2VydmVkR1A7IC8vIHN0b3JlIEdQ
IHdoZW4gdXNpbmcgUElDIGNvZGUKKyAgICAgICAgdm9pZCogcHJlc2VydmVkUzA7CisgICAgICAg
IHZvaWQqIHByZXNlcnZlZFMxOworICAgICAgICB2b2lkKiBwcmVzZXJ2ZWRTMjsKKyAgICAgICAg
dm9pZCogcHJlc2VydmVkUmV0dXJuQWRkcmVzczsKKworICAgICAgICBSZXR1cm5BZGRyZXNzUHRy
IHRodW5rUmV0dXJuQWRkcmVzczsKKworICAgICAgICAvLyBUaGVzZSBhcmd1bWVudHMgcGFzc2Vk
IGluIGExLi5hMyAoYTAgY29udGFpbmVkIHRoZSBlbnRyeSBjb2RlIHBvaW50ZWQsIHdoaWNoIGlz
IG5vdCBwcmVzZXJ2ZWQpCisgICAgICAgIFJlZ2lzdGVyRmlsZSogcmVnaXN0ZXJGaWxlOworICAg
ICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZTsKKyAgICAgICAgSlNWYWx1ZSogZXhjZXB0aW9uOwor
CisgICAgICAgIC8vIFRoZXNlIGFyZ3VtZW50cyBwYXNzZWQgb24gdGhlIHN0YWNrLgorICAgICAg
ICBQcm9maWxlcioqIGVuYWJsZWRQcm9maWxlclJlZmVyZW5jZTsKKyAgICAgICAgSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhOworCisgICAgICAgIFJldHVybkFkZHJlc3NQdHIqIHJldHVybkFkZHJl
c3NTbG90KCkgeyByZXR1cm4gJnRodW5rUmV0dXJuQWRkcmVzczsgfQorICAgIH07CiAjZWxzZQog
I2Vycm9yICJKSVRTdGFja0ZyYW1lIG5vdCBkZWZpbmVkIGZvciB0aGlzIHBsYXRmb3JtLiIKICNl
bmRpZgpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgJKHJldmlzaW9uIDU1NTUxKQorKysgSmF2YVNj
cmlwdENvcmUvd3RmL1BsYXRmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTkwMCw2ICs5MDAsOSBA
QCBvbiBNaW5HVy4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3NoCiAgICAgI2RlZmluZSBF
TkFCTEVfSklUIDEKICNlbGlmIENQVShBUk1fVFJBRElUSU9OQUwpICYmIE9TKExJTlVYKQogICAg
ICNkZWZpbmUgRU5BQkxFX0pJVCAxCisjZWxpZiBDUFUoTUlQUykgJiYgT1MoTElOVVgpCisgICAg
I2RlZmluZSBFTkFCTEVfSklUIDEKKyAgICAjZGVmaW5lIFdURl9VU0VfSklUX1NUVUJfQVJHVU1F
TlRfVkFfTElTVCAwCiAjZW5kaWYKICNlbmRpZiAvKiBQTEFURk9STShRVCkgKi8KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50335</attachid>
            <date>2010-03-09 11:39:36 -0800</date>
            <delta_ts>2010-03-16 18:16:39 -0700</delta_ts>
            <desc>MIPS JIT Part2 Patch 20100309</desc>
            <filename>mips_jit20100309.diff</filename>
            <type>text/plain</type>
            <size>20576</size>
            <attacher name="Chao-ying Fu">fu</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDU1NzM2KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTAtMDMtMDkgIENoYW8teWlu
ZyBGdSAgPGZ1QG1pcHMuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIE1JUFMgSklUIFN1cHBvcnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMDE0NAorCisgICAgICAgIFRoZSBmb2xsb3dpbmcgY2hh
bmdlcyBlbmFibGUgTUlQUyBKSVQuCisKKyAgICAgICAgKiBhc3NlbWJsZXIvTUlQU0Fzc2VtYmxl
ci5oOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpsYik6CisgICAgICAgICogYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyTUlQUy5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1J
UFM6OmxvYWQ4KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjpicmFuY2g4KToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjpicmFuY2hUZXN0OCk6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6c2V0VGVzdDgpOgorICAgICAgICAqIGppdC9KSVQu
aDoKKyAgICAgICAgKiBqaXQvSklUSW5saW5lTWV0aG9kcy5oOgorICAgICAgICAoSlNDOjpKSVQ6
OnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6cmVz
dG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4pOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVz
LmNwcDoKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAoSlNDOjpKSVRUaHVu
a3M6OkpJVFRodW5rcyk6CisgICAgICAgICogaml0L0pJVFN0dWJzLmg6CisgICAgICAgIChKU0M6
OkpJVFN0YWNrRnJhbWU6OnJldHVybkFkZHJlc3NTbG90KToKKyAgICAgICAgKiB3dGYvUGxhdGZv
cm0uaDoKKwogMjAxMC0wMy0wOSAgR2Fib3IgTG9raSAgPGxva2lAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBSdWJiZXItc3RhbXBlZCBieSBNYWNpZWogU3RhY2hvd2lhay4KSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NSVBTQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01JUFNBc3NlbWJsZXIuaAkocmV2aXNpb24gNTU2OTYpCisrKyBKYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTUlQU0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
OTIsNiArMzkyLDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgfCAocnMgPDwgT1BfU0hf
UlMpKTsKICAgICB9CiAKKyAgICB2b2lkIGxiKFJlZ2lzdGVySUQgcnQsIFJlZ2lzdGVySUQgcnMs
IGludCBvZmZzZXQpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDgwMDAwMDAwIHwgKHJ0IDw8
IE9QX1NIX1JUKSB8IChycyA8PCBPUF9TSF9SUykKKyAgICAgICAgICAgICAgICAgfCAob2Zmc2V0
ICYgMHhmZmZmKSk7CisgICAgICAgIGxvYWREZWxheU5vcCgpOworICAgIH0KKwogICAgIHZvaWQg
bHcoUmVnaXN0ZXJJRCBydCwgUmVnaXN0ZXJJRCBycywgaW50IG9mZnNldCkKICAgICB7CiAgICAg
ICAgIGVtaXRJbnN0KDB4OGMwMDAwMDAgfCAocnQgPDwgT1BfU0hfUlQpIHwgKHJzIDw8IE9QX1NI
X1JTKQpJbmRleDogSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyTUlQUy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlck1J
UFMuaAkocmV2aXNpb24gNTU2OTYpCisrKyBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJNSVBTLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0Miw2ICs0NDIsMjMgQEAgcHVibGlj
OgogICAgIC8vIG9wZXJhbmQgb2JqZWN0cyB0byBsb2FkcyBhbmQgc3RvcmUgd2lsbCBiZSBpbXBs
aWNpdGx5IGNvbnN0cnVjdGVkIGlmIGEKICAgICAvLyByZWdpc3RlciBpcyBwYXNzZWQuCiAKKyAg
ICB2b2lkIGxvYWQ4KEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICBpZiAoYWRkcmVzcy5vZmZzZXQgPj0gLTMyNzY4ICYmIGFkZHJlc3Mub2Zm
c2V0IDw9IDMyNzY3CisgICAgICAgICAgICAmJiAhbV9maXhlZFdpZHRoKQorICAgICAgICAgICAg
bV9hc3NlbWJsZXIubGIoZGVzdCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICBsdWkgICAgIGFkZHJU
ZW1wLCAob2Zmc2V0ICsgMHg4MDAwKSA+PiAxNgorICAgICAgICAgICAgICAgIGFkZHUgICAgYWRk
clRlbXAsIGFkZHJUZW1wLCBiYXNlCisgICAgICAgICAgICAgICAgbGIgICAgICBkZXN0LCAob2Zm
c2V0ICYgMHhmZmZmKShhZGRyVGVtcCkKKyAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLmx1aShhZGRyVGVtcFJlZ2lzdGVyLCAoYWRkcmVzcy5vZmZzZXQgKyAweDgwMDAp
ID4+IDE2KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3Rlciwg
YWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LmxiKGRlc3QsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgfQor
ICAgIH0KKwogICAgIHZvaWQgbG9hZDMyKEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzLCBSZWdpc3Rl
cklEIGRlc3QpCiAgICAgewogICAgICAgICBpZiAoYWRkcmVzcy5vZmZzZXQgPj0gLTMyNzY4ICYm
IGFkZHJlc3Mub2Zmc2V0IDw9IDMyNzY3CkBAIC04NTYsNiArODczLDEzIEBAIHB1YmxpYzoKICAg
ICAvLyBqeiBhbmQgam56IHRlc3Qgd2hldGhlciB0aGUgZmlyc3Qgb3BlcmFuZCBpcyBlcXVhbCB0
byB6ZXJvLCBhbmQgdGFrZQogICAgIC8vIGFuIG9wdGlvbmFsIHNlY29uZCBvcGVyYW5kIG9mIGEg
bWFzayB1bmRlciB3aGljaCB0byBwZXJmb3JtIHRoZSB0ZXN0LgogCisgICAgSnVtcCBicmFuY2g4
KENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGxlZnQsIEltbTMyIHJpZ2h0KQorICAgIHsKKyAgICAg
ICAgbG9hZDgobGVmdCwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgIG1vdmUocmlnaHQsIGlt
bVRlbXBSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBkYXRhVGVtcFJl
Z2lzdGVyLCBpbW1UZW1wUmVnaXN0ZXIpOworICAgIH0KKwogICAgIEp1bXAgYnJhbmNoMzIoQ29u
ZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCkKICAgICB7CiAg
ICAgICAgIGlmIChjb25kID09IEVxdWFsIHx8IGNvbmQgPT0gWmVybykKQEAgLTEwMzgsNiArMTA2
MiwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBicmFuY2hUZXN0MzIoY29uZCwgZGF0YVRl
bXBSZWdpc3RlciwgbWFzayk7CiAgICAgfQogCisgICAgSnVtcCBicmFuY2hUZXN0OChDb25kaXRp
b24gY29uZCwgQWRkcmVzcyBhZGRyZXNzLCBJbW0zMiBtYXNrID0gSW1tMzIoLTEpKQorICAgIHsK
KyAgICAgICAgbG9hZDgoYWRkcmVzcywgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgIHJldHVy
biBicmFuY2hUZXN0MzIoY29uZCwgZGF0YVRlbXBSZWdpc3RlciwgbWFzayk7CisgICAgfQorCiAg
ICAgSnVtcCBqdW1wKCkKICAgICB7CiAgICAgICAgIHJldHVybiBicmFuY2hFcXVhbChNSVBTUmVn
aXN0ZXJzOjp6ZXJvLCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsKQEAgLTEzMzIsNiArMTM2MiwyNiBA
QCBwdWJsaWM6CiAgICAgICAgIHNldDMyKGNvbmQsIGxlZnQsIGltbVRlbXBSZWdpc3RlciwgZGVz
dCk7CiAgICAgfQogCisgICAgdm9pZCBzZXRUZXN0OChDb25kaXRpb24gY29uZCwgQWRkcmVzcyBh
ZGRyZXNzLCBJbW0zMiBtYXNrLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBBU1NF
UlQoKGNvbmQgPT0gWmVybykgfHwgKGNvbmQgPT0gTm9uWmVybykpOworICAgICAgICBsb2FkOChh
ZGRyZXNzLCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgaWYgKG1hc2subV92YWx1ZSA9PSAt
MSAmJiAhbV9maXhlZFdpZHRoKSB7CisgICAgICAgICAgICBpZiAoY29uZCA9PSBaZXJvKQorICAg
ICAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdGl1KGRlc3QsIGRhdGFUZW1wUmVnaXN0ZXIsIDEp
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdHUoZGVz
dCwgTUlQU1JlZ2lzdGVyczo6emVybywgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBtb3ZlKG1hc2ssIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5hbmRJbnNuKGNtcFRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3RlciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltbVRlbXBSZWdpc3Rlcik7CisgICAg
ICAgICAgICBpZiAoY29uZCA9PSBaZXJvKQorICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNs
dGl1KGRlc3QsIGNtcFRlbXBSZWdpc3RlciwgMSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuc2x0dShkZXN0LCBNSVBTUmVnaXN0ZXJzOjp6ZXJvLCBjbXBU
ZW1wUmVnaXN0ZXIpOworICAgICAgICB9CisgICAgfQorCiAgICAgdm9pZCBzZXRUZXN0MzIoQ29u
ZGl0aW9uIGNvbmQsIEFkZHJlc3MgYWRkcmVzcywgSW1tMzIgbWFzaywgUmVnaXN0ZXJJRCBkZXN0
KQogICAgIHsKICAgICAgICAgQVNTRVJUKChjb25kID09IFplcm8pIHx8IChjb25kID09IE5vblpl
cm8pKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDU1Njk2KQorKysgSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjYsNiArMjY2LDI4IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBzdGF0aWMgY29uc3QgRlBSZWdpc3RlcklEIGZwUmVnVDAgPSBBUk1SZWdp
c3RlcnM6OmQwOwogICAgICAgICBzdGF0aWMgY29uc3QgRlBSZWdpc3RlcklEIGZwUmVnVDEgPSBB
Uk1SZWdpc3RlcnM6OmQxOwogICAgICAgICBzdGF0aWMgY29uc3QgRlBSZWdpc3RlcklEIGZwUmVn
VDIgPSBBUk1SZWdpc3RlcnM6OmQyOworI2VsaWYgQ1BVKE1JUFMpCisgICAgICAgIHN0YXRpYyBj
b25zdCBSZWdpc3RlcklEIHJldHVyblZhbHVlUmVnaXN0ZXIgPSBNSVBTUmVnaXN0ZXJzOjp2MDsK
KyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgY2FjaGVkUmVzdWx0UmVnaXN0ZXIgPSBN
SVBTUmVnaXN0ZXJzOjp2MDsKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgZmlyc3RB
cmd1bWVudFJlZ2lzdGVyID0gTUlQU1JlZ2lzdGVyczo6YTA7CisKKyAgICAgICAgLy8gcmVnVDAg
bXVzdCBiZSB2MCBmb3IgcmV0dXJuaW5nIGEgMzItYml0IHZhbHVlLgorICAgICAgICBzdGF0aWMg
Y29uc3QgUmVnaXN0ZXJJRCByZWdUMCA9IE1JUFNSZWdpc3RlcnM6OnYwOworCisgICAgICAgIC8v
IHJlZ1QxIG11c3QgYmUgdjEgZm9yIHJldHVybmluZyBhIHBhaXIgb2YgMzItYml0IHZhbHVlLgor
ICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdUMSA9IE1JUFNSZWdpc3RlcnM6OnYx
OworCisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1QyID0gTUlQU1JlZ2lzdGVy
czo6dDQ7CisKKyAgICAgICAgLy8gcmVnVDMgbXVzdCBiZSBzYXZlZCBpbiB0aGUgY2FsbGVlLCBz
byB1c2UgYW4gUyByZWdpc3Rlci4KKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmVn
VDMgPSBNSVBTUmVnaXN0ZXJzOjpzMjsKKworICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJ
RCBjYWxsRnJhbWVSZWdpc3RlciA9IE1JUFNSZWdpc3RlcnM6OnMwOworICAgICAgICBzdGF0aWMg
Y29uc3QgUmVnaXN0ZXJJRCB0aW1lb3V0Q2hlY2tSZWdpc3RlciA9IE1JUFNSZWdpc3RlcnM6OnMx
OworCisgICAgICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQgZnBSZWdUMCA9IE1JUFNSZWdp
c3RlcnM6OmY0OworICAgICAgICBzdGF0aWMgY29uc3QgRlBSZWdpc3RlcklEIGZwUmVnVDEgPSBN
SVBTUmVnaXN0ZXJzOjpmNjsKKyAgICAgICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBmcFJl
Z1QyID0gTUlQU1JlZ2lzdGVyczo6Zjg7CiAjZWxzZQogICAgICNlcnJvciAiSklUIG5vdCBzdXBw
b3J0ZWQgb24gdGhpcyBwbGF0Zm9ybS4iCiAjZW5kaWYKQEAgLTY4NCw2ICs3MDYsNDggQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIHNlcXVlbmNlUHV0QnlJZAogICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IHNlcXVlbmNlUHV0QnlJZEluc3RydWN0aW9uU3BhY2UgPSAyODsKICAgICAgICAg
c3RhdGljIGNvbnN0IGludCBzZXF1ZW5jZVB1dEJ5SWRDb25zdGFudFNwYWNlID0gMzsKKyNlbGlm
IENQVShNSVBTKQorI2lmIFdURl9NSVBTX0lTQSgxKQorICAgICAgICBzdGF0aWMgY29uc3QgaW50
IHBhdGNoT2Zmc2V0UHV0QnlJZFN0cnVjdHVyZSA9IDE2OworICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IHBhdGNoT2Zmc2V0UHV0QnlJZEV4dGVybmFsTG9hZCA9IDQ4OworICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IHBhdGNoTGVuZ3RoUHV0QnlJZEV4dGVybmFsTG9hZCA9IDIwOworICAgICAgICBz
dGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0UHV0QnlJZFByb3BlcnR5TWFwT2Zmc2V0ID0gNjg7
CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkU3RydWN0dXJlID0g
MTY7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9T
bG93Q2FzZSA9IDQ4OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJ
ZEV4dGVybmFsTG9hZCA9IDQ4OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoTGVuZ3Ro
R2V0QnlJZEV4dGVybmFsTG9hZCA9IDIwOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNo
T2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0ID0gNjg7CisgICAgICAgIHN0YXRpYyBjb25z
dCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkUHV0UmVzdWx0ID0gODg7CisjaWYgRU5BQkxFKE9QQ09E
RV9TQU1QTElORykKKyAgICAgICAgI2Vycm9yICJPUENPREVfU0FNUExJTkcgaXMgbm90IHlldCBz
dXBwb3J0ZWQiCisjZWxzZQorICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0
QnlJZFNsb3dDYXNlQ2FsbCA9IDQwOworI2VuZGlmCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
cGF0Y2hPZmZzZXRPcENhbGxDb21wYXJlVG9KdW1wID0gMzI7CisgICAgICAgIHN0YXRpYyBjb25z
dCBpbnQgcGF0Y2hPZmZzZXRNZXRob2RDaGVja1Byb3RvT2JqID0gMzI7CisgICAgICAgIHN0YXRp
YyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRNZXRob2RDaGVja1Byb3RvU3RydWN0ID0gNTY7CisgICAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRNZXRob2RDaGVja1B1dEZ1bmN0aW9uID0g
ODg7CisjZWxzZSAvLyBXVEZfTUlQU19JU0EoMSkKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBw
YXRjaE9mZnNldFB1dEJ5SWRTdHJ1Y3R1cmUgPSAxMjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGlu
dCBwYXRjaE9mZnNldFB1dEJ5SWRFeHRlcm5hbExvYWQgPSA0NDsKKyAgICAgICAgc3RhdGljIGNv
bnN0IGludCBwYXRjaExlbmd0aFB1dEJ5SWRFeHRlcm5hbExvYWQgPSAxNjsKKyAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBwYXRjaE9mZnNldFB1dEJ5SWRQcm9wZXJ0eU1hcE9mZnNldCA9IDYwOwor
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZFN0cnVjdHVyZSA9IDEy
OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xv
d0Nhc2UgPSA0NDsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRF
eHRlcm5hbExvYWQgPSA0NDsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaExlbmd0aEdl
dEJ5SWRFeHRlcm5hbExvYWQgPSAxNjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9m
ZnNldEdldEJ5SWRQcm9wZXJ0eU1hcE9mZnNldCA9IDYwOworICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IHBhdGNoT2Zmc2V0R2V0QnlJZFB1dFJlc3VsdCA9IDc2OworI2lmIEVOQUJMRShPUENPREVf
U0FNUExJTkcpCisgICAgICAgICNlcnJvciAiT1BDT0RFX1NBTVBMSU5HIGlzIG5vdCB5ZXQgc3Vw
cG9ydGVkIgorI2Vsc2UKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5
SWRTbG93Q2FzZUNhbGwgPSA0MDsKKyNlbmRpZgorICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBh
dGNoT2Zmc2V0T3BDYWxsQ29tcGFyZVRvSnVtcCA9IDMyOworICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IHBhdGNoT2Zmc2V0TWV0aG9kQ2hlY2tQcm90b09iaiA9IDMyOworICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IHBhdGNoT2Zmc2V0TWV0aG9kQ2hlY2tQcm90b1N0cnVjdCA9IDUyOworICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0TWV0aG9kQ2hlY2tQdXRGdW5jdGlvbiA9IDg0
OworI2VuZGlmCiAjZW5kaWYKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQogCkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDU1Njk2KQorKysgSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTYw
LDYgKzE2MCwyMyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpyZXN0b3JlUmV0dXJuQWRkCiAg
ICAgbG9hZFB0cihhZGRyZXNzLCBsaW5rUmVnaXN0ZXIpOwogfQogCisjZWxpZiBDUFUoTUlQUykK
KworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxs
KFJlZ2lzdGVySUQgcmVnKQoreworICAgIG1vdmUocmV0dXJuQWRkcmVzc1JlZ2lzdGVyLCByZWcp
OworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpyZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9y
ZVJldHVybihSZWdpc3RlcklEIHJlZykKK3sKKyAgICBtb3ZlKHJlZywgcmV0dXJuQWRkcmVzc1Jl
Z2lzdGVyKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cmVzdG9yZVJldHVybkFkZHJl
c3NCZWZvcmVSZXR1cm4oQWRkcmVzcyBhZGRyZXNzKQoreworICAgIGxvYWRQdHIoYWRkcmVzcywg
cmV0dXJuQWRkcmVzc1JlZ2lzdGVyKTsKK30KKwogI2Vsc2UgLy8gQ1BVKFg4NikgfHwgQ1BVKFg4
Nl82NCkKIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0
ZXJDYWxsKFJlZ2lzdGVySUQgcmVnKQpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAko
cmV2aXNpb24gNTU2OTYpCisrKyBKYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE4MzQsNiArMTgzNCw1NiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVDVElNYWNoaW5lVHJhbXBvCiAgICAgYWRkUHRyKEltbTMyKHNpemVvZihBcmdMaXN0KSksIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKICNlbmRpZiAvLyBPUyhXSU5DRSkKIAorI2VsaWYgQ1BVKE1J
UFMpCisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIzMihSZWdpc3RlckZpbGU6OkFyZ3Vt
ZW50Q291bnQsIHJlZ1QwKTsKKworICAgIC8vIEFsbG9jYXRlIHN0YWNrIHNwYWNlIGZvciBvdXIg
YXJnbGlzdAorICAgIENPTVBJTEVfQVNTRVJUKCEoc2l6ZW9mKEFyZ0xpc3QpICYgMHg3KSwgQXJn
TGlzdF9zaG91bGRfYnlfOGJ5dGVfYWxpZ25lZCk7CisgICAgc3ViUHRyKEltbTMyKHNpemVvZihB
cmdMaXN0KSArIDI0KSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgLy8gU2V0IHVwIGFy
Z3VtZW50cworICAgIHN1YlB0cihJbW0zMigxKSwgcmVnVDApOyAvLyBEb24ndCBpbmNsdWRlICd0
aGlzJyBpbiBhcmdjb3VudAorCisgICAgLy8gUHVzaCBhcmdjb3VudCB0byAyNCArIG9mZnNldCgk
c3ApCisgICAgc3RvcmVQdHIocmVnVDAsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIDI0
ICsgT0JKRUNUX09GRlNFVE9GKEFyZ0xpc3QsIG1fYXJnQ291bnQpKSk7CisKKyAgICAvLyBDYWxj
dWxhdGUgdGhlIHN0YXJ0IG9mIHRoZSBjYWxsZnJhbWUgaGVhZGVyLCBhbmQgc3RvcmUgaW4gcmVn
VDEKKyAgICBtb3ZlKGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMSk7CisgICAgc3ViMzIoSW1tMzIo
UmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplICogKGludDMyX3Qpc2l6ZW9mKFJlZ2lz
dGVyKSksIHJlZ1QxKTsKKworICAgIC8vIENhbGN1bGF0ZSBzdGFydCBvZiBhcmd1bWVudHMgYXMg
Y2FsbGZyYW1lIGhlYWRlciAtIHNpemVvZihSZWdpc3RlcikgKiBhcmdjb3VudCAocmVnVDEpCisg
ICAgbXVsMzIoSW1tMzIoc2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1QwLCByZWdUMCk7CisgICAgc3Vi
UHRyKHJlZ1QwLCByZWdUMSk7CisKKyAgICAvLyBwdXNoIHBvaW50ZXIgdG8gYXJndW1lbnRzIHRv
IDI0ICsgb2Zmc2V0KCRzcCkKKyAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhzdGFja1BvaW50
ZXJSZWdpc3RlciwgMjQgKyBPQkpFQ1RfT0ZGU0VUT0YoQXJnTGlzdCwgbV9hcmdzKSkpOworCisg
ICAgLy8gU2V0dXAgYXJnMzogcmVnVDEgY3VycmVudGx5IHBvaW50cyB0byB0aGUgZmlyc3QgYXJn
dW1lbnQsIHJlZ1QxLXNpemVvZihSZWdpc3RlcikgcG9pbnRzIHRvICd0aGlzJworICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMSwgLShpbnQzMl90KXNpemVvZihSZWdpc3RlcikpLCBNSVBTUmVnaXN0
ZXJzOjphMyk7CisKKyAgICAvLyBTZXR1cCBhcmcyOgorICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1l
SGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6Q2FsbGVlLCBNSVBTUmVnaXN0ZXJzOjphMik7CisKKyAg
ICAvLyBTZXR1cCBhcmcxOgorICAgIG1vdmUoY2FsbEZyYW1lUmVnaXN0ZXIsIE1JUFNSZWdpc3Rl
cnM6OmExKTsKKworICAgIC8vIFNldHVwIGFyZzQ6IEFyZ0xpc3QgaXMgcGFzc2VkIGJ5IHJlZmVy
ZW5jZS4gIEF0IDE2KCRzcCksIHN0b3JlICgkc3AgKyAyNCkKKyAgICBhZGRQdHIoSW1tMzIoMjQp
LCBzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVnVDIpOworICAgIHN0b3JlUHRyKHJlZ1QyLCBBZGRy
ZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCAxNikpOworCisgICAgLy8gU2V0dXAgYXJnMCBhcyAy
MCgkc3ApIHRvIGhvbGQgdGhlIHJldHVybmVkIHN0cnVjdHVyZS4KKyAgICBBU1NFUlQoc2l6ZW9m
KEpTVmFsdWUpID09IDQpOworICAgIGFkZFB0cihJbW0zMigyMCksIHN0YWNrUG9pbnRlclJlZ2lz
dGVyLCBNSVBTUmVnaXN0ZXJzOjphMCk7CisKKyAgICAvLyBDYWxsCisgICAgY2FsbChBZGRyZXNz
KE1JUFNSZWdpc3RlcnM6OmEyLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9kYXRhKSkp
OworCisgICAgLy8gR2V0IHJldHVybmVkIHZhbHVlIGZyb20gMCgkdjApIHdoaWNoIGlzIHRoZSBz
YW1lIGFzIDIwKCRzcCkKKyAgICBsb2FkUHRyKEFkZHJlc3MocmV0dXJuVmFsdWVSZWdpc3Rlciwg
MCksIHJldHVyblZhbHVlUmVnaXN0ZXIpOworCisgICAgLy8gUmVzdG9yZSBzdGFjayBzcGFjZQor
ICAgIGFkZFB0cihJbW0zMihzaXplb2YoQXJnTGlzdCkgKyAyNCksIHN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKKwogI2VsaWYgRU5BQkxFKEpJVF9PUFRJTUlaRV9OQVRJVkVfQ0FMTCkKICNlcnJvciAi
SklUX09QVElNSVpFX05BVElWRV9DQUxMIG5vdCB5ZXQgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZv
cm0uIgogI2Vsc2UKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gNTU2OTYp
CisrKyBKYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
NDIsNiArNjQyLDEwMiBAQCBTWU1CT0xfU1RSSU5HKGN0aU9wVGhyb3dOb3RDYXVnaHQpICI6IiAi
CiAgICAgIm1vdiBwYywgbHIiICJcbiIKICk7CiAKKyNlbGlmIENQVShNSVBTKQorCisjaWYgVVNF
KEpJVF9TVFVCX0FSR1VNRU5UX1ZBX0xJU1QpCisjZXJyb3IgIkpJVF9TVFVCX0FSR1VNRU5UX1ZB
X0xJU1Qgbm90IHN1cHBvcnRlZCBvbiBNSVBTLiIKKyNlbmRpZgorCithc20gdm9sYXRpbGUoCisi
LnRleHQiICJcbiIKKyIuYWxpZ24gMiIgIlxuIgorIi5zZXQgbm9yZW9yZGVyIiAiXG4iCisiLnNl
dCBub21hY3JvIiAiXG4iCisiLnNldCBub21pcHMxNiIgIlxuIgorIi5nbG9ibCAiIFNZTUJPTF9T
VFJJTkcoY3RpVHJhbXBvbGluZSkgIlxuIgorIi5lbnQgIiBTWU1CT0xfU1RSSU5HKGN0aVRyYW1w
b2xpbmUpICJcbiIKK1NZTUJPTF9TVFJJTkcoY3RpVHJhbXBvbGluZSkgIjoiICJcbiIKKyAgICAi
YWRkaXUgJDI5LCQyOSwtNzIiICJcbiIKKyAgICAic3cgICAgJDMxLDQ0KCQyOSkiICJcbiIKKyAg
ICAic3cgICAgJDE4LDQwKCQyOSkiICJcbiIKKyAgICAic3cgICAgJDE3LDM2KCQyOSkiICJcbiIK
KyAgICAic3cgICAgJDE2LDMyKCQyOSkiICJcbiIKKyNpZiBXVEZfTUlQU19QSUMKKyAgICAic3cg
ICAgJDI4LDI4KCQyOSkiICJcbiIKKyNlbmRpZgorICAgICJtb3ZlICAkMTYsJDYgICAgICAgIyBz
ZXQgY2FsbEZyYW1lUmVnaXN0ZXIiICJcbiIKKyAgICAibGkgICAgJDE3LDUxMiAgICAgICMgc2V0
IHRpbWVvdXRDaGVja1JlZ2lzdGVyIiAiXG4iCisgICAgIm1vdmUgICQyNSwkNCAgICAgICAjIG1v
dmUgZXhlY3V0YWJsZUFkZHJlc3MgdG8gdDkiICJcbiIKKyAgICAic3cgICAgJDUsNTIoJDI5KSAg
ICMgc3RvcmUgcmVnaXN0ZXJGaWxlIHRvIGN1cnJlbnQgc3RhY2siICJcbiIKKyAgICAic3cgICAg
JDYsNTYoJDI5KSAgICMgc3RvcmUgY2FsbEZyYW1lIHRvIGN1cmVudCBzdGFjayIgIlxuIgorICAg
ICJzdyAgICAkNyw2MCgkMjkpICAgIyBzdG9yZSBleGNlcHRpb24gdG8gY3VycmVudCBzdGFjayIg
IlxuIgorICAgICJsdyAgICAkOCw4OCgkMjkpICAgIyBsb2FkIGVuYWJsZVByb2ZpbGVyUmVmZXJl
bmNlIGZyb20gcHJldmlvdXMgc3RhY2siICJcbiIKKyAgICAibHcgICAgJDksOTIoJDI5KSAgICMg
bG9hZCBnbG9iYWxEYXRhIGZyb20gcHJldmlvdXMgc3RhY2siICJcbiIKKyAgICAic3cgICAgJDgs
NjQoJDI5KSAgICMgc3RvcmUgZW5hYmxlUHJvZmlsZXJSZWZlcmVuY2UgdG8gY3VycmVudCBzdGFj
ayIgIlxuIgorICAgICJqYWxyICAkMjUiICJcbiIKKyAgICAic3cgICAgJDksNjgoJDI5KSAgICMg
c3RvcmUgZ2xvYmFsRGF0YSB0byBjdXJyZW50IHN0YWNrIiAiXG4iCisgICAgImx3ICAgICQxNiwz
MigkMjkpIiAiXG4iCisgICAgImx3ICAgICQxNywzNigkMjkpIiAiXG4iCisgICAgImx3ICAgICQx
OCw0MCgkMjkpIiAiXG4iCisgICAgImx3ICAgICQzMSw0NCgkMjkpIiAiXG4iCisgICAgImpyICAg
ICQzMSIgIlxuIgorICAgICJhZGRpdSAkMjksJDI5LDcyIiAiXG4iCisiLnNldCByZW9yZGVyIiAi
XG4iCisiLnNldCBtYWNybyIgIlxuIgorIi5lbmQgIiBTWU1CT0xfU1RSSU5HKGN0aVRyYW1wb2xp
bmUpICJcbiIKKyk7CisKK2FzbSB2b2xhdGlsZSgKKyIudGV4dCIgIlxuIgorIi5hbGlnbiAyIiAi
XG4iCisiLnNldCBub3Jlb3JkZXIiICJcbiIKKyIuc2V0IG5vbWFjcm8iICJcbiIKKyIuc2V0IG5v
bWlwczE2IiAiXG4iCisiLmdsb2JsICIgU1lNQk9MX1NUUklORyhjdGlWTVRocm93VHJhbXBvbGlu
ZSkgIlxuIgorIi5lbnQgIiBTWU1CT0xfU1RSSU5HKGN0aVZNVGhyb3dUcmFtcG9saW5lKSAiXG4i
CitTWU1CT0xfU1RSSU5HKGN0aVZNVGhyb3dUcmFtcG9saW5lKSAiOiIgIlxuIgorI2lmIFdURl9N
SVBTX1BJQworICAgICJsdyAgICAkMjgsMjgoJDI5KSIgIlxuIgorIi5zZXQgbWFjcm8iICJcbiIK
KyAgICAibGEgICAgJDI1LCIgU1lNQk9MX1NUUklORyhjdGlfdm1fdGhyb3cpICJcbiIKKyIuc2V0
IG5vbWFjcm8iICJcbiIKKyAgICAiYmFsICIgU1lNQk9MX1NUUklORyhjdGlfdm1fdGhyb3cpICJc
biIKKyAgICAibW92ZSAgJDQsJDI5IiAiXG4iCisjZWxzZQorICAgICJqYWwgIiBTWU1CT0xfU1RS
SU5HKGN0aV92bV90aHJvdykgIlxuIgorICAgICJtb3ZlICAkNCwkMjkiICJcbiIKKyNlbmRpZgor
ICAgICJsdyAgICAkMTYsMzIoJDI5KSIgIlxuIgorICAgICJsdyAgICAkMTcsMzYoJDI5KSIgIlxu
IgorICAgICJsdyAgICAkMTgsNDAoJDI5KSIgIlxuIgorICAgICJsdyAgICAkMzEsNDQoJDI5KSIg
IlxuIgorICAgICJqciAgICAkMzEiICJcbiIKKyAgICAiYWRkaXUgJDI5LCQyOSw3MiIgIlxuIgor
Ii5zZXQgcmVvcmRlciIgIlxuIgorIi5zZXQgbWFjcm8iICJcbiIKKyIuZW5kICIgU1lNQk9MX1NU
UklORyhjdGlWTVRocm93VHJhbXBvbGluZSkgIlxuIgorKTsKKworYXNtIHZvbGF0aWxlKAorIi50
ZXh0IiAiXG4iCisiLmFsaWduIDIiICJcbiIKKyIuc2V0IG5vcmVvcmRlciIgIlxuIgorIi5zZXQg
bm9tYWNybyIgIlxuIgorIi5zZXQgbm9taXBzMTYiICJcbiIKKyIuZ2xvYmwgIiBTWU1CT0xfU1RS
SU5HKGN0aU9wVGhyb3dOb3RDYXVnaHQpICJcbiIKKyIuZW50ICIgU1lNQk9MX1NUUklORyhjdGlP
cFRocm93Tm90Q2F1Z2h0KSAiXG4iCitTWU1CT0xfU1RSSU5HKGN0aU9wVGhyb3dOb3RDYXVnaHQp
ICI6IiAiXG4iCisgICAgImx3ICAgICQxNiwzMigkMjkpIiAiXG4iCisgICAgImx3ICAgICQxNywz
NigkMjkpIiAiXG4iCisgICAgImx3ICAgICQxOCw0MCgkMjkpIiAiXG4iCisgICAgImx3ICAgICQz
MSw0NCgkMjkpIiAiXG4iCisgICAgImpyICAgICQzMSIgIlxuIgorICAgICJhZGRpdSAkMjksJDI5
LDcyIiAiXG4iCisiLnNldCByZW9yZGVyIiAiXG4iCisiLnNldCBtYWNybyIgIlxuIgorIi5lbmQg
IiBTWU1CT0xfU1RSSU5HKGN0aU9wVGhyb3dOb3RDYXVnaHQpICJcbiIKKyk7CisKICNlbGlmIENP
TVBJTEVSKFJWQ1QpICYmIENQVShBUk1fVFJBRElUSU9OQUwpCiAKIF9fYXNtIEVuY29kZWRKU1Zh
bHVlIGN0aVRyYW1wb2xpbmUodm9pZCosIFJlZ2lzdGVyRmlsZSosIENhbGxGcmFtZSosIEpTVmFs
dWUqLCBQcm9maWxlcioqLCBKU0dsb2JhbERhdGEqKQpAQCAtNzc2LDYgKzg3MiwyMCBAQCBKSVRU
aHVua3M6OkpJVFRodW5rcyhKU0dsb2JhbERhdGEqIGdsb2JhCiAgICAgQVNTRVJUKE9CSkVDVF9P
RkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlKSA9
PSAweDQwKTsKIAogICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJh
bWUsIHRodW5rUmV0dXJuQWRkcmVzcykgPT0gMHgxQyk7CisKKyNlbGlmIENQVShNSVBTKQorICAg
IEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIHByZXNlcnZlZEdQ
KSA9PSAyOCk7CisgICAgQVNTRVJUKE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFt
ZSwgcHJlc2VydmVkUzApID09IDMyKTsKKyAgICBBU1NFUlQoT0JKRUNUX09GRlNFVE9GKHN0cnVj
dCBKSVRTdGFja0ZyYW1lLCBwcmVzZXJ2ZWRTMSkgPT0gMzYpOworICAgIEFTU0VSVChPQkpFQ1Rf
T0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIHByZXNlcnZlZFMyKSA9PSA0MCk7CisgICAg
QVNTRVJUKE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgcHJlc2VydmVkUmV0
dXJuQWRkcmVzcykgPT0gNDQpOworICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJ
VFN0YWNrRnJhbWUsIHRodW5rUmV0dXJuQWRkcmVzcykgPT0gNDgpOworICAgIEFTU0VSVChPQkpF
Q1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIHJlZ2lzdGVyRmlsZSkgPT0gNTIpOwor
ICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIGNhbGxGcmFt
ZSkgPT0gNTYpOworICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJh
bWUsIGV4Y2VwdGlvbikgPT0gNjApOworICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0
IEpJVFN0YWNrRnJhbWUsIGVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSkgPT0gNjQpOworICAgIEFT
U0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIGdsb2JhbERhdGEpID09
IDY4KTsKKwogI2VuZGlmCiB9CiAKQEAgLTEwMzQsNiArMTE0NCw2NSBAQCBzdGF0aWMgTkVWRVJf
SU5MSU5FIHZvaWQgdGhyb3dTdGFja092ZXJmCiAgICAgICAgICk7IFwKICAgICBydHlwZSBKSVRT
dHViVGh1bmtlZF8jI29wKFNUVUJfQVJHU19ERUNMQVJBVElPTikgXAogCisjZWxpZiBDUFUoTUlQ
UykKKyNpZiBXVEZfTUlQU19QSUMKKyNkZWZpbmUgREVGSU5FX1NUVUJfRlVOQ1RJT04ocnR5cGUs
IG9wKSBcCisgICAgZXh0ZXJuICJDIiB7IFwKKyAgICAgICAgcnR5cGUgSklUU3R1YlRodW5rZWRf
IyNvcChTVFVCX0FSR1NfREVDTEFSQVRJT04pOyBcCisgICAgfTsgXAorICAgIGFzbSB2b2xhdGls
ZSggXAorICAgICAgICAiLnRleHQiICJcbiIgXAorICAgICAgICAiLmFsaWduIDIiICJcbiIgXAor
ICAgICAgICAiLnNldCBub3Jlb3JkZXIiICJcbiIgXAorICAgICAgICAiLnNldCBub21hY3JvIiAi
XG4iIFwKKyAgICAgICAgIi5zZXQgbm9taXBzMTYiICJcbiIgXAorICAgICAgICAiLmdsb2JsICIg
U1lNQk9MX1NUUklORyhjdGlfIyNvcCkgIlxuIiBcCisgICAgICAgICIuZW50ICIgU1lNQk9MX1NU
UklORyhjdGlfIyNvcCkgIlxuIiBcCisgICAgICAgIFNZTUJPTF9TVFJJTkcoY3RpXyMjb3ApICI6
IiAiXG4iIFwKKyAgICAgICAgImx3ICAgICQyOCwyOCgkMjkpIiAiXG4iIFwKKyAgICAgICAgInN3
ICAgICQzMSw0OCgkMjkpIiAiXG4iIFwKKyAgICAgICAgIi5zZXQgbWFjcm8iICJcbiIgXAorICAg
ICAgICAibGEgICAgJDI1LCIgU1lNQk9MX1NUUklORyhKSVRTdHViVGh1bmtlZF8jI29wKSAiXG4i
IFwKKyAgICAgICAgIi5zZXQgbm9tYWNybyIgIlxuIiBcCisgICAgICAgICJiYWwgIiBTWU1CT0xf
U1RSSU5HKEpJVFN0dWJUaHVua2VkXyMjb3ApICJcbiIgXAorICAgICAgICAibm9wIiAiXG4iIFwK
KyAgICAgICAgImx3ICAgICQzMSw0OCgkMjkpIiAiXG4iIFwKKyAgICAgICAgImpyICAgICQzMSIg
IlxuIiBcCisgICAgICAgICJub3AiICJcbiIgXAorICAgICAgICAiLnNldCByZW9yZGVyIiAiXG4i
IFwKKyAgICAgICAgIi5zZXQgbWFjcm8iICJcbiIgXAorICAgICAgICAiLmVuZCAiIFNZTUJPTF9T
VFJJTkcoY3RpXyMjb3ApICJcbiIgXAorICAgICAgICApOyBcCisgICAgcnR5cGUgSklUU3R1YlRo
dW5rZWRfIyNvcChTVFVCX0FSR1NfREVDTEFSQVRJT04pCisKKyNlbHNlIC8vIFdURl9NSVBTX1BJ
QworI2RlZmluZSBERUZJTkVfU1RVQl9GVU5DVElPTihydHlwZSwgb3ApIFwKKyAgICBleHRlcm4g
IkMiIHsgXAorICAgICAgICBydHlwZSBKSVRTdHViVGh1bmtlZF8jI29wKFNUVUJfQVJHU19ERUNM
QVJBVElPTik7IFwKKyAgICB9OyBcCisgICAgYXNtIHZvbGF0aWxlKCBcCisgICAgICAgICIudGV4
dCIgIlxuIiBcCisgICAgICAgICIuYWxpZ24gMiIgIlxuIiBcCisgICAgICAgICIuc2V0IG5vcmVv
cmRlciIgIlxuIiBcCisgICAgICAgICIuc2V0IG5vbWFjcm8iICJcbiIgXAorICAgICAgICAiLnNl
dCBub21pcHMxNiIgIlxuIiBcCisgICAgICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGN0aV8j
I29wKSAiXG4iIFwKKyAgICAgICAgIi5lbnQgIiBTWU1CT0xfU1RSSU5HKGN0aV8jI29wKSAiXG4i
IFwKKyAgICAgICAgU1lNQk9MX1NUUklORyhjdGlfIyNvcCkgIjoiICJcbiIgXAorICAgICAgICAi
c3cgICAgJDMxLDQ4KCQyOSkiICJcbiIgXAorICAgICAgICAiamFsICIgU1lNQk9MX1NUUklORyhK
SVRTdHViVGh1bmtlZF8jI29wKSAiXG4iIFwKKyAgICAgICAgIm5vcCIgIlxuIiBcCisgICAgICAg
ICJsdyAgICAkMzEsNDgoJDI5KSIgIlxuIiBcCisgICAgICAgICJqciAgICAkMzEiICJcbiIgXAor
ICAgICAgICAibm9wIiAiXG4iIFwKKyAgICAgICAgIi5zZXQgcmVvcmRlciIgIlxuIiBcCisgICAg
ICAgICIuc2V0IG1hY3JvIiAiXG4iIFwKKyAgICAgICAgIi5lbmQgIiBTWU1CT0xfU1RSSU5HKGN0
aV8jI29wKSAiXG4iIFwKKyAgICAgICAgKTsgXAorICAgIHJ0eXBlIEpJVFN0dWJUaHVua2VkXyMj
b3AoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKQorCisjZW5kaWYKKwogI2VsaWYgQ1BVKEFSTV9UUkFE
SVRJT05BTCkgJiYgQ09NUElMRVIoR0NDKQogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL2ppdC9KSVRTdHVicy5oCShyZXZpc2lvbiA1NTY5NikKKysrIEphdmFTY3JpcHRDb3JlL2pp
dC9KSVRTdHVicy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODksNiArMTg5LDMwIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAvLyBXaGVuIEpJVCBjb2RlIG1ha2VzIGEgY2FsbCwgaXQgcHVzaGVz
IGl0cyByZXR1cm4gYWRkcmVzcyBqdXN0IGJlbG93IHRoZSByZXN0IG9mIHRoZSBzdGFjay4KICAg
ICAgICAgUmV0dXJuQWRkcmVzc1B0ciogcmV0dXJuQWRkcmVzc1Nsb3QoKSB7IHJldHVybiAmdGh1
bmtSZXR1cm5BZGRyZXNzOyB9CiAgICAgfTsKKyNlbGlmIENQVShNSVBTKQorICAgIHN0cnVjdCBK
SVRTdGFja0ZyYW1lIHsKKyAgICAgICAgdm9pZCogcmVzZXJ2ZWQ7IC8vIFVudXNlZAorICAgICAg
ICBKSVRTdHViQXJnIGFyZ3NbNl07CisKKyAgICAgICAgdm9pZCogcHJlc2VydmVkR1A7IC8vIHN0
b3JlIEdQIHdoZW4gdXNpbmcgUElDIGNvZGUKKyAgICAgICAgdm9pZCogcHJlc2VydmVkUzA7Cisg
ICAgICAgIHZvaWQqIHByZXNlcnZlZFMxOworICAgICAgICB2b2lkKiBwcmVzZXJ2ZWRTMjsKKyAg
ICAgICAgdm9pZCogcHJlc2VydmVkUmV0dXJuQWRkcmVzczsKKworICAgICAgICBSZXR1cm5BZGRy
ZXNzUHRyIHRodW5rUmV0dXJuQWRkcmVzczsKKworICAgICAgICAvLyBUaGVzZSBhcmd1bWVudHMg
cGFzc2VkIGluIGExLi5hMyAoYTAgY29udGFpbmVkIHRoZSBlbnRyeSBjb2RlIHBvaW50ZWQsIHdo
aWNoIGlzIG5vdCBwcmVzZXJ2ZWQpCisgICAgICAgIFJlZ2lzdGVyRmlsZSogcmVnaXN0ZXJGaWxl
OworICAgICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZTsKKyAgICAgICAgSlNWYWx1ZSogZXhjZXB0
aW9uOworCisgICAgICAgIC8vIFRoZXNlIGFyZ3VtZW50cyBwYXNzZWQgb24gdGhlIHN0YWNrLgor
ICAgICAgICBQcm9maWxlcioqIGVuYWJsZWRQcm9maWxlclJlZmVyZW5jZTsKKyAgICAgICAgSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhOworCisgICAgICAgIFJldHVybkFkZHJlc3NQdHIqIHJldHVy
bkFkZHJlc3NTbG90KCkgeyByZXR1cm4gJnRodW5rUmV0dXJuQWRkcmVzczsgfQorICAgIH07CiAj
ZWxzZQogI2Vycm9yICJKSVRTdGFja0ZyYW1lIG5vdCBkZWZpbmVkIGZvciB0aGlzIHBsYXRmb3Jt
LiIKICNlbmRpZgpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgJKHJldmlzaW9uIDU1Njk2KQorKysg
SmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTkwNSw2ICs5
MDUsOSBAQCBvbiBNaW5HVy4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3NoCiAgICAgI2Rl
ZmluZSBFTkFCTEVfSklUIDEKICNlbGlmIENQVShBUk1fVFJBRElUSU9OQUwpICYmIE9TKExJTlVY
KQogICAgICNkZWZpbmUgRU5BQkxFX0pJVCAxCisjZWxpZiBDUFUoTUlQUykgJiYgT1MoTElOVVgp
CisgICAgI2RlZmluZSBFTkFCTEVfSklUIDEKKyAgICAjZGVmaW5lIFdURl9VU0VfSklUX1NUVUJf
QVJHVU1FTlRfVkFfTElTVCAwCiAjZW5kaWYKICNlbmRpZiAvKiBQTEFURk9STShRVCkgKi8KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50862</attachid>
            <date>2010-03-16 18:16:39 -0700</date>
            <delta_ts>2010-03-29 15:20:39 -0700</delta_ts>
            <desc>MIPS JIT Part2 Patch 20100316</desc>
            <filename>mips_jit20100316.diff</filename>
            <type>text/plain</type>
            <size>21840</size>
            <attacher name="Chao-ying Fu">fu</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDU2MDk2KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTAtMDMtMTYgIENoYW8teWlu
ZyBGdSAgPGZ1QG1pcHMuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIE1JUFMgSklUIFN1cHBvcnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMDE0NAorCisgICAgICAgIFRoZSBmb2xsb3dpbmcgY2hh
bmdlcyBlbmFibGUgTUlQUyBKSVQuCisKKyAgICAgICAgKiBhc3NlbWJsZXIvTUlQU0Fzc2VtYmxl
ci5oOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpsYik6CisgICAgICAgIChKU0M6Ok1J
UFNBc3NlbWJsZXI6OmxpbmtXaXRoT2Zmc2V0KToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJNSVBTLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6bG9hZDgp
OgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1JUFM6OmJyYW5jaDgpOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlck1JUFM6OmJyYW5jaFRlc3Q4KToKKyAgICAgICAgKEpTQzo6TWFj
cm9Bc3NlbWJsZXJNSVBTOjpzZXRUZXN0OCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVy
TUlQUzo6c2V0VGVzdDMyKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJ
VElubGluZU1ldGhvZHMuaDoKKyAgICAgICAgKEpTQzo6SklUOjpwcmVzZXJ2ZVJldHVybkFkZHJl
c3NBZnRlckNhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVm
b3JlUmV0dXJuKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgICogaml0
L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpKSVRUaHVua3MpOgorICAg
ICAgICAqIGppdC9KSVRTdHVicy5oOgorICAgICAgICAoSlNDOjpKSVRTdGFja0ZyYW1lOjpyZXR1
cm5BZGRyZXNzU2xvdCk6CisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6CisKIDIwMTAtMDMtMTYg
IEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IE9saXZlciBIdW50LCBEYXJpbiBBZGxlci4KSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NSVBTQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01JUFNBc3NlbWJsZXIuaAkocmV2aXNpb24gNTYwODcpCisrKyBKYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTUlQU0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOTIsNiAr
MzkyLDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgfCAocnMgPDwgT1BfU0hfUlMpKTsK
ICAgICB9CiAKKyAgICB2b2lkIGxiKFJlZ2lzdGVySUQgcnQsIFJlZ2lzdGVySUQgcnMsIGludCBv
ZmZzZXQpCisgICAgeworICAgICAgICBlbWl0SW5zdCgweDgwMDAwMDAwIHwgKHJ0IDw8IE9QX1NI
X1JUKSB8IChycyA8PCBPUF9TSF9SUykKKyAgICAgICAgICAgICAgICAgfCAob2Zmc2V0ICYgMHhm
ZmZmKSk7CisgICAgICAgIGxvYWREZWxheU5vcCgpOworICAgIH0KKwogICAgIHZvaWQgbHcoUmVn
aXN0ZXJJRCBydCwgUmVnaXN0ZXJJRCBycywgaW50IG9mZnNldCkKICAgICB7CiAgICAgICAgIGVt
aXRJbnN0KDB4OGMwMDAwMDAgfCAocnQgPDwgT1BfU0hfUlQpIHwgKHJzIDw8IE9QX1NIX1JTKQpA
QCAtODU3LDcgKzg2NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICBub3AKICAgICAg
ICAgICAgICAgICAxOgogCi0gICAgICAgICAgICAgICAgTm90ZTogYmVxL2JuZS9iYzF0IGFyZSBj
b252ZXJ0ZWQgdG8gYm5lL2JlcS9iYzFmLgorICAgICAgICAgICAgICAgIE5vdGU6IGJlcS9ibmUv
YmMxdC9iYzFmIGFyZSBjb252ZXJ0ZWQgdG8gYm5lL2JlcS9iYzFmL2JjMXQuCiAgICAgICAgICAg
ICAqLwogCiAgICAgICAgICAgICBpZiAoKihpbnNuICsgMikgPT0gMHgxMDAwMDAwMykgewpAQCAt
ODY3LDYgKzg3NCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICppbnNuID0gKCpp
bnNuICYgMHgwM2ZmMDAwMCkgfCAweDEwMDAwMDA1OyAvLyBiZXEKICAgICAgICAgICAgICAgICBl
bHNlIGlmICgoKmluc24gJiAweGZmZmYwMDAwKSA9PSAweDQ1MDEwMDAwKSAvLyBiYzF0CiAgICAg
ICAgICAgICAgICAgICAgICppbnNuID0gMHg0NTAwMDAwNTsgLy8gYmMxZgorICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKCgqaW5zbiAmIDB4ZmZmZjAwMDApID09IDB4NDUwMDAwMDApIC8vIGJjMWYK
KyAgICAgICAgICAgICAgICAgICAgKmluc24gPSAweDQ1MDEwMDA1OyAvLyBiYzF0CiAgICAgICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoMCk7CiAgICAgICAgICAg
ICB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyTUlQ
Uy5oCShyZXZpc2lvbiA1NjA4NykKKysrIEphdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlck1JUFMuaAkod29ya2luZyBjb3B5KQpAQCAtNDQyLDYgKzQ0MiwyMyBAQCBwdWJsaWM6
CiAgICAgLy8gb3BlcmFuZCBvYmplY3RzIHRvIGxvYWRzIGFuZCBzdG9yZSB3aWxsIGJlIGltcGxp
Y2l0bHkgY29uc3RydWN0ZWQgaWYgYQogICAgIC8vIHJlZ2lzdGVyIGlzIHBhc3NlZC4KIAorICAg
IHZvaWQgbG9hZDgoSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAg
ICB7CisgICAgICAgIGlmIChhZGRyZXNzLm9mZnNldCA+PSAtMzI3NjggJiYgYWRkcmVzcy5vZmZz
ZXQgPD0gMzI3NjcKKyAgICAgICAgICAgICYmICFtX2ZpeGVkV2lkdGgpCisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5sYihkZXN0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgIGx1aSAgICAgYWRkclRl
bXAsIChvZmZzZXQgKyAweDgwMDApID4+IDE2CisgICAgICAgICAgICAgICAgYWRkdSAgICBhZGRy
VGVtcCwgYWRkclRlbXAsIGJhc2UKKyAgICAgICAgICAgICAgICBsYiAgICAgIGRlc3QsIChvZmZz
ZXQgJiAweGZmZmYpKGFkZHJUZW1wKQorICAgICAgICAgICAgICAqLworICAgICAgICAgICAgbV9h
c3NlbWJsZXIubHVpKGFkZHJUZW1wUmVnaXN0ZXIsIChhZGRyZXNzLm9mZnNldCArIDB4ODAwMCkg
Pj4gMTYpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBh
ZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
bGIoZGVzdCwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQpOworICAgICAgICB9Cisg
ICAgfQorCiAgICAgdm9pZCBsb2FkMzIoSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVy
SUQgZGVzdCkKICAgICB7CiAgICAgICAgIGlmIChhZGRyZXNzLm9mZnNldCA+PSAtMzI3NjggJiYg
YWRkcmVzcy5vZmZzZXQgPD0gMzI3NjcKQEAgLTg1Niw2ICs4NzMsMTMgQEAgcHVibGljOgogICAg
IC8vIGp6IGFuZCBqbnogdGVzdCB3aGV0aGVyIHRoZSBmaXJzdCBvcGVyYW5kIGlzIGVxdWFsIHRv
IHplcm8sIGFuZCB0YWtlCiAgICAgLy8gYW4gb3B0aW9uYWwgc2Vjb25kIG9wZXJhbmQgb2YgYSBt
YXNrIHVuZGVyIHdoaWNoIHRvIHBlcmZvcm0gdGhlIHRlc3QuCiAKKyAgICBKdW1wIGJyYW5jaDgo
Q29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgbGVmdCwgSW1tMzIgcmlnaHQpCisgICAgeworICAgICAg
ICBsb2FkOChsZWZ0LCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgbW92ZShyaWdodCwgaW1t
VGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIGRhdGFUZW1wUmVn
aXN0ZXIsIGltbVRlbXBSZWdpc3Rlcik7CisgICAgfQorCiAgICAgSnVtcCBicmFuY2gzMihDb25k
aXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0KQogICAgIHsKICAg
ICAgICAgaWYgKGNvbmQgPT0gRXF1YWwgfHwgY29uZCA9PSBaZXJvKQpAQCAtMTAzOCw2ICsxMDYy
LDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3QzMihjb25kLCBkYXRhVGVt
cFJlZ2lzdGVyLCBtYXNrKTsKICAgICB9CiAKKyAgICBKdW1wIGJyYW5jaFRlc3Q4KENvbmRpdGlv
biBjb25kLCBBZGRyZXNzIGFkZHJlc3MsIEltbTMyIG1hc2sgPSBJbW0zMigtMSkpCisgICAgewor
ICAgICAgICBsb2FkOChhZGRyZXNzLCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJu
IGJyYW5jaFRlc3QzMihjb25kLCBkYXRhVGVtcFJlZ2lzdGVyLCBtYXNrKTsKKyAgICB9CisKICAg
ICBKdW1wIGp1bXAoKQogICAgIHsKICAgICAgICAgcmV0dXJuIGJyYW5jaEVxdWFsKE1JUFNSZWdp
c3RlcnM6Onplcm8sIE1JUFNSZWdpc3RlcnM6Onplcm8pOwpAQCAtMTMzMiw2ICsxMzYyLDI2IEBA
IHB1YmxpYzoKICAgICAgICAgc2V0MzIoY29uZCwgbGVmdCwgaW1tVGVtcFJlZ2lzdGVyLCBkZXN0
KTsKICAgICB9CiAKKyAgICB2b2lkIHNldFRlc3Q4KENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGFk
ZHJlc3MsIEltbTMyIG1hc2ssIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIEFTU0VS
VCgoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisgICAgICAgIGxvYWQ4KGFk
ZHJlc3MsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICBpZiAobWFzay5tX3ZhbHVlID09IC0x
ICYmICFtX2ZpeGVkV2lkdGgpIHsKKyAgICAgICAgICAgIGlmIChjb25kID09IFplcm8pCisgICAg
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0aXUoZGVzdCwgZGF0YVRlbXBSZWdpc3RlciwgMSk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0dShkZXN0
LCBNSVBTUmVnaXN0ZXJzOjp6ZXJvLCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIG1vdmUobWFzaywgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmFuZEluc24oY21wVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAg
ICAgICAgaWYgKGNvbmQgPT0gWmVybykKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHRp
dShkZXN0LCBjbXBUZW1wUmVnaXN0ZXIsIDEpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLnNsdHUoZGVzdCwgTUlQU1JlZ2lzdGVyczo6emVybywgY21wVGVt
cFJlZ2lzdGVyKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHZvaWQgc2V0VGVzdDMyKENvbmRp
dGlvbiBjb25kLCBBZGRyZXNzIGFkZHJlc3MsIEltbTMyIG1hc2ssIFJlZ2lzdGVySUQgZGVzdCkK
ICAgICB7CiAgICAgICAgIEFTU0VSVCgoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJv
KSk7CkBAIC0xMzQ0LDcgKzEzOTQsNyBAQCBwdWJsaWM6CiAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICBtb3ZlKG1hc2ssIGltbVRlbXBSZWdpc3Rlcik7CiAgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5hbmRJbnNuKGNtcFRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3RlciwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGltbVRlbXBSZWdpc3Rlcik7CiAgICAgICAgICAgICBpZiAoY29u
ZCA9PSBaZXJvKQogICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdGl1KGRlc3QsIGNtcFRl
bXBSZWdpc3RlciwgMSk7CiAgICAgICAgICAgICBlbHNlCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9q
aXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lv
biA1NjA4NykKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAt
MjY2LDYgKzI2NiwyOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGNvbnN0IEZQ
UmVnaXN0ZXJJRCBmcFJlZ1QwID0gQVJNUmVnaXN0ZXJzOjpkMDsKICAgICAgICAgc3RhdGljIGNv
bnN0IEZQUmVnaXN0ZXJJRCBmcFJlZ1QxID0gQVJNUmVnaXN0ZXJzOjpkMTsKICAgICAgICAgc3Rh
dGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBmcFJlZ1QyID0gQVJNUmVnaXN0ZXJzOjpkMjsKKyNlbGlm
IENQVShNSVBTKQorICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZXR1cm5WYWx1ZVJl
Z2lzdGVyID0gTUlQU1JlZ2lzdGVyczo6djA7CisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3Rl
cklEIGNhY2hlZFJlc3VsdFJlZ2lzdGVyID0gTUlQU1JlZ2lzdGVyczo6djA7CisgICAgICAgIHN0
YXRpYyBjb25zdCBSZWdpc3RlcklEIGZpcnN0QXJndW1lbnRSZWdpc3RlciA9IE1JUFNSZWdpc3Rl
cnM6OmEwOworCisgICAgICAgIC8vIHJlZ1QwIG11c3QgYmUgdjAgZm9yIHJldHVybmluZyBhIDMy
LWJpdCB2YWx1ZS4KKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnVDAgPSBNSVBT
UmVnaXN0ZXJzOjp2MDsKKworICAgICAgICAvLyByZWdUMSBtdXN0IGJlIHYxIGZvciByZXR1cm5p
bmcgYSBwYWlyIG9mIDMyLWJpdCB2YWx1ZS4KKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVy
SUQgcmVnVDEgPSBNSVBTUmVnaXN0ZXJzOjp2MTsKKworICAgICAgICBzdGF0aWMgY29uc3QgUmVn
aXN0ZXJJRCByZWdUMiA9IE1JUFNSZWdpc3RlcnM6OnQ0OworCisgICAgICAgIC8vIHJlZ1QzIG11
c3QgYmUgc2F2ZWQgaW4gdGhlIGNhbGxlZSwgc28gdXNlIGFuIFMgcmVnaXN0ZXIuCisgICAgICAg
IHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1QzID0gTUlQU1JlZ2lzdGVyczo6czI7CisKKyAg
ICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgY2FsbEZyYW1lUmVnaXN0ZXIgPSBNSVBTUmVn
aXN0ZXJzOjpzMDsKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgdGltZW91dENoZWNr
UmVnaXN0ZXIgPSBNSVBTUmVnaXN0ZXJzOjpzMTsKKworICAgICAgICBzdGF0aWMgY29uc3QgRlBS
ZWdpc3RlcklEIGZwUmVnVDAgPSBNSVBTUmVnaXN0ZXJzOjpmNDsKKyAgICAgICAgc3RhdGljIGNv
bnN0IEZQUmVnaXN0ZXJJRCBmcFJlZ1QxID0gTUlQU1JlZ2lzdGVyczo6ZjY7CisgICAgICAgIHN0
YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQgZnBSZWdUMiA9IE1JUFNSZWdpc3RlcnM6OmY4OwogI2Vs
c2UKICAgICAjZXJyb3IgIkpJVCBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0uIgogI2Vu
ZGlmCkBAIC02ODQsNiArNzA2LDQ4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyBzZXF1
ZW5jZVB1dEJ5SWQKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBzZXF1ZW5jZVB1dEJ5SWRJbnN0
cnVjdGlvblNwYWNlID0gMjg7CiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgc2VxdWVuY2VQdXRC
eUlkQ29uc3RhbnRTcGFjZSA9IDM7CisjZWxpZiBDUFUoTUlQUykKKyNpZiBXVEZfTUlQU19JU0Eo
MSkKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldFB1dEJ5SWRTdHJ1Y3R1cmUg
PSAxNjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldFB1dEJ5SWRFeHRlcm5h
bExvYWQgPSA0ODsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaExlbmd0aFB1dEJ5SWRF
eHRlcm5hbExvYWQgPSAyMDsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldFB1
dEJ5SWRQcm9wZXJ0eU1hcE9mZnNldCA9IDY4OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBh
dGNoT2Zmc2V0R2V0QnlJZFN0cnVjdHVyZSA9IDE2OworICAgICAgICBzdGF0aWMgY29uc3QgaW50
IHBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2UgPSA0ODsKKyAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRFeHRlcm5hbExvYWQgPSA0ODsKKyAgICAgICAg
c3RhdGljIGNvbnN0IGludCBwYXRjaExlbmd0aEdldEJ5SWRFeHRlcm5hbExvYWQgPSAyMDsKKyAg
ICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRQcm9wZXJ0eU1hcE9mZnNl
dCA9IDY4OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZFB1dFJl
c3VsdCA9IDg4OworI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCisgICAgICAgICNlcnJvciAi
T1BDT0RFX1NBTVBMSU5HIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIgorI2Vsc2UKKyAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwgPSA0MDsKKyNlbmRp
ZgorICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0T3BDYWxsQ29tcGFyZVRvSnVt
cCA9IDMyOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0TWV0aG9kQ2hlY2tQ
cm90b09iaiA9IDMyOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0TWV0aG9k
Q2hlY2tQcm90b1N0cnVjdCA9IDU2OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zm
c2V0TWV0aG9kQ2hlY2tQdXRGdW5jdGlvbiA9IDg4OworI2Vsc2UgLy8gV1RGX01JUFNfSVNBKDEp
CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRQdXRCeUlkU3RydWN0dXJlID0g
MTI7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRQdXRCeUlkRXh0ZXJuYWxM
b2FkID0gNDQ7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hMZW5ndGhQdXRCeUlkRXh0
ZXJuYWxMb2FkID0gMTY7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRQdXRC
eUlkUHJvcGVydHlNYXBPZmZzZXQgPSA2MDsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRj
aE9mZnNldEdldEJ5SWRTdHJ1Y3R1cmUgPSAxMjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBw
YXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlID0gNDQ7CisgICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkRXh0ZXJuYWxMb2FkID0gNDQ7CisgICAgICAgIHN0
YXRpYyBjb25zdCBpbnQgcGF0Y2hMZW5ndGhHZXRCeUlkRXh0ZXJuYWxMb2FkID0gMTY7CisgICAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkUHJvcGVydHlNYXBPZmZzZXQg
PSA2MDsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRQdXRSZXN1
bHQgPSA3NjsKKyNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQorICAgICAgICAjZXJyb3IgIk9Q
Q09ERV9TQU1QTElORyBpcyBub3QgeWV0IHN1cHBvcnRlZCIKKyNlbHNlCisgICAgICAgIHN0YXRp
YyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkU2xvd0Nhc2VDYWxsID0gNDA7CisjZW5kaWYK
KyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE9wQ2FsbENvbXBhcmVUb0p1bXAg
PSAzMjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhvZENoZWNrUHJv
dG9PYmogPSAzMjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhvZENo
ZWNrUHJvdG9TdHJ1Y3QgPSA1MjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNl
dE1ldGhvZENoZWNrUHV0RnVuY3Rpb24gPSA4NDsKKyNlbmRpZgogI2VuZGlmCiAjZW5kaWYgLy8g
VVNFKEpTVkFMVUUzMl82NCkKIApJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1l
dGhvZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9k
cy5oCShyZXZpc2lvbiA1NjA4NykKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRo
b2RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2MCw2ICsxNjAsMjMgQEAgQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6cmVzdG9yZVJldHVybkFkZAogICAgIGxvYWRQdHIoYWRkcmVzcywgbGlua1JlZ2lz
dGVyKTsKIH0KIAorI2VsaWYgQ1BVKE1JUFMpCisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnBy
ZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChSZWdpc3RlcklEIHJlZykKK3sKKyAgICBtb3Zl
KHJldHVybkFkZHJlc3NSZWdpc3RlciwgcmVnKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6cmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oUmVnaXN0ZXJJRCByZWcpCit7Cisg
ICAgbW92ZShyZWcsIHJldHVybkFkZHJlc3NSZWdpc3Rlcik7Cit9CisKK0FMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEFkZHJlc3MgYWRkcmVz
cykKK3sKKyAgICBsb2FkUHRyKGFkZHJlc3MsIHJldHVybkFkZHJlc3NSZWdpc3Rlcik7Cit9CisK
ICNlbHNlIC8vIENQVShYODYpIHx8IENQVShYODZfNjQpCiAKIEFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChSZWdpc3RlcklEIHJlZykKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDU2MDg3KQorKysgSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODM0LDYgKzE4MzQs
NTYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wbwogICAgIGFkZFB0
cihJbW0zMihzaXplb2YoQXJnTGlzdCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAjZW5kaWYg
Ly8gT1MoV0lOQ0UpCiAKKyNlbGlmIENQVShNSVBTKQorICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1l
SGVhZGVyMzIoUmVnaXN0ZXJGaWxlOjpBcmd1bWVudENvdW50LCByZWdUMCk7CisKKyAgICAvLyBB
bGxvY2F0ZSBzdGFjayBzcGFjZSBmb3Igb3VyIGFyZ2xpc3QKKyAgICBDT01QSUxFX0FTU0VSVCgh
KHNpemVvZihBcmdMaXN0KSAmIDB4NyksIEFyZ0xpc3Rfc2hvdWxkX2J5XzhieXRlX2FsaWduZWQp
OworICAgIHN1YlB0cihJbW0zMihzaXplb2YoQXJnTGlzdCkgKyAyNCksIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKKworICAgIC8vIFNldCB1cCBhcmd1bWVudHMKKyAgICBzdWJQdHIoSW1tMzIoMSks
IHJlZ1QwKTsgLy8gRG9uJ3QgaW5jbHVkZSAndGhpcycgaW4gYXJnY291bnQKKworICAgIC8vIFB1
c2ggYXJnY291bnQgdG8gMjQgKyBvZmZzZXQoJHNwKQorICAgIHN0b3JlUHRyKHJlZ1QwLCBBZGRy
ZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCAyNCArIE9CSkVDVF9PRkZTRVRPRihBcmdMaXN0LCBt
X2FyZ0NvdW50KSkpOworCisgICAgLy8gQ2FsY3VsYXRlIHRoZSBzdGFydCBvZiB0aGUgY2FsbGZy
YW1lIGhlYWRlciwgYW5kIHN0b3JlIGluIHJlZ1QxCisgICAgbW92ZShjYWxsRnJhbWVSZWdpc3Rl
ciwgcmVnVDEpOworICAgIHN1YjMyKEltbTMyKFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVy
U2l6ZSAqIChpbnQzMl90KXNpemVvZihSZWdpc3RlcikpLCByZWdUMSk7CisKKyAgICAvLyBDYWxj
dWxhdGUgc3RhcnQgb2YgYXJndW1lbnRzIGFzIGNhbGxmcmFtZSBoZWFkZXIgLSBzaXplb2YoUmVn
aXN0ZXIpICogYXJnY291bnQgKHJlZ1QxKQorICAgIG11bDMyKEltbTMyKHNpemVvZihSZWdpc3Rl
cikpLCByZWdUMCwgcmVnVDApOworICAgIHN1YlB0cihyZWdUMCwgcmVnVDEpOworCisgICAgLy8g
cHVzaCBwb2ludGVyIHRvIGFyZ3VtZW50cyB0byAyNCArIG9mZnNldCgkc3ApCisgICAgc3RvcmVQ
dHIocmVnVDEsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIDI0ICsgT0JKRUNUX09GRlNF
VE9GKEFyZ0xpc3QsIG1fYXJncykpKTsKKworICAgIC8vIFNldHVwIGFyZzM6IHJlZ1QxIGN1cnJl
bnRseSBwb2ludHMgdG8gdGhlIGZpcnN0IGFyZ3VtZW50LCByZWdUMS1zaXplb2YoUmVnaXN0ZXIp
IHBvaW50cyB0byAndGhpcycKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIC0oaW50MzJfdClz
aXplb2YoUmVnaXN0ZXIpKSwgTUlQU1JlZ2lzdGVyczo6YTMpOworCisgICAgLy8gU2V0dXAgYXJn
MjoKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihSZWdpc3RlckZpbGU6OkNhbGxl
ZSwgTUlQU1JlZ2lzdGVyczo6YTIpOworCisgICAgLy8gU2V0dXAgYXJnMToKKyAgICBtb3ZlKGNh
bGxGcmFtZVJlZ2lzdGVyLCBNSVBTUmVnaXN0ZXJzOjphMSk7CisKKyAgICAvLyBTZXR1cCBhcmc0
OiBBcmdMaXN0IGlzIHBhc3NlZCBieSByZWZlcmVuY2UuICBBdCAxNigkc3ApLCBzdG9yZSAoJHNw
ICsgMjQpCisgICAgYWRkUHRyKEltbTMyKDI0KSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1Qy
KTsKKyAgICBzdG9yZVB0cihyZWdUMiwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgMTYp
KTsKKworICAgIC8vIFNldHVwIGFyZzAgYXMgMjAoJHNwKSB0byBob2xkIHRoZSByZXR1cm5lZCBz
dHJ1Y3R1cmUuCisgICAgQVNTRVJUKHNpemVvZihKU1ZhbHVlKSA9PSA0KTsKKyAgICBhZGRQdHIo
SW1tMzIoMjApLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6YTApOworCisg
ICAgLy8gQ2FsbAorICAgIGNhbGwoQWRkcmVzcyhNSVBTUmVnaXN0ZXJzOjphMiwgT0JKRUNUX09G
RlNFVE9GKEpTRnVuY3Rpb24sIG1fZGF0YSkpKTsKKworICAgIC8vIEdldCByZXR1cm5lZCB2YWx1
ZSBmcm9tIDAoJHYwKSB3aGljaCBpcyB0aGUgc2FtZSBhcyAyMCgkc3ApCisgICAgbG9hZFB0cihB
ZGRyZXNzKHJldHVyblZhbHVlUmVnaXN0ZXIsIDApLCByZXR1cm5WYWx1ZVJlZ2lzdGVyKTsKKwor
ICAgIC8vIFJlc3RvcmUgc3RhY2sgc3BhY2UKKyAgICBhZGRQdHIoSW1tMzIoc2l6ZW9mKEFyZ0xp
c3QpICsgMjQpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKICNlbGlmIEVOQUJMRShKSVRfT1BU
SU1JWkVfTkFUSVZFX0NBTEwpCiAjZXJyb3IgIkpJVF9PUFRJTUlaRV9OQVRJVkVfQ0FMTCBub3Qg
eWV0IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtLiIKICNlbHNlCkluZGV4OiBKYXZhU2NyaXB0
Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ppdC9K
SVRTdHVicy5jcHAJKHJldmlzaW9uIDU2MDg3KQorKysgSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0
dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgwLDYgKzQ4MCwxMDIgQEAgU1lNQk9MX1NUUklO
RyhjdGlPcFRocm93Tm90Q2F1Z2h0KSAiOiIgIgogI2RlZmluZSBUSFVOS19SRVRVUk5fQUREUkVT
U19PRkZTRVQgMzIKICNkZWZpbmUgUFJFU0VSVkVEUjRfT0ZGU0VUICAgICAgICAgIDM2CiAKKyNl
bGlmIENQVShNSVBTKQorCisjaWYgVVNFKEpJVF9TVFVCX0FSR1VNRU5UX1ZBX0xJU1QpCisjZXJy
b3IgIkpJVF9TVFVCX0FSR1VNRU5UX1ZBX0xJU1Qgbm90IHN1cHBvcnRlZCBvbiBNSVBTLiIKKyNl
bmRpZgorCithc20gdm9sYXRpbGUoCisiLnRleHQiICJcbiIKKyIuYWxpZ24gMiIgIlxuIgorIi5z
ZXQgbm9yZW9yZGVyIiAiXG4iCisiLnNldCBub21hY3JvIiAiXG4iCisiLnNldCBub21pcHMxNiIg
IlxuIgorIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoY3RpVHJhbXBvbGluZSkgIlxuIgorIi5lbnQg
IiBTWU1CT0xfU1RSSU5HKGN0aVRyYW1wb2xpbmUpICJcbiIKK1NZTUJPTF9TVFJJTkcoY3RpVHJh
bXBvbGluZSkgIjoiICJcbiIKKyAgICAiYWRkaXUgJDI5LCQyOSwtNzIiICJcbiIKKyAgICAic3cg
ICAgJDMxLDQ0KCQyOSkiICJcbiIKKyAgICAic3cgICAgJDE4LDQwKCQyOSkiICJcbiIKKyAgICAi
c3cgICAgJDE3LDM2KCQyOSkiICJcbiIKKyAgICAic3cgICAgJDE2LDMyKCQyOSkiICJcbiIKKyNp
ZiBXVEZfTUlQU19QSUMKKyAgICAic3cgICAgJDI4LDI4KCQyOSkiICJcbiIKKyNlbmRpZgorICAg
ICJtb3ZlICAkMTYsJDYgICAgICAgIyBzZXQgY2FsbEZyYW1lUmVnaXN0ZXIiICJcbiIKKyAgICAi
bGkgICAgJDE3LDUxMiAgICAgICMgc2V0IHRpbWVvdXRDaGVja1JlZ2lzdGVyIiAiXG4iCisgICAg
Im1vdmUgICQyNSwkNCAgICAgICAjIG1vdmUgZXhlY3V0YWJsZUFkZHJlc3MgdG8gdDkiICJcbiIK
KyAgICAic3cgICAgJDUsNTIoJDI5KSAgICMgc3RvcmUgcmVnaXN0ZXJGaWxlIHRvIGN1cnJlbnQg
c3RhY2siICJcbiIKKyAgICAic3cgICAgJDYsNTYoJDI5KSAgICMgc3RvcmUgY2FsbEZyYW1lIHRv
IGN1cmVudCBzdGFjayIgIlxuIgorICAgICJzdyAgICAkNyw2MCgkMjkpICAgIyBzdG9yZSBleGNl
cHRpb24gdG8gY3VycmVudCBzdGFjayIgIlxuIgorICAgICJsdyAgICAkOCw4OCgkMjkpICAgIyBs
b2FkIGVuYWJsZVByb2ZpbGVyUmVmZXJlbmNlIGZyb20gcHJldmlvdXMgc3RhY2siICJcbiIKKyAg
ICAibHcgICAgJDksOTIoJDI5KSAgICMgbG9hZCBnbG9iYWxEYXRhIGZyb20gcHJldmlvdXMgc3Rh
Y2siICJcbiIKKyAgICAic3cgICAgJDgsNjQoJDI5KSAgICMgc3RvcmUgZW5hYmxlUHJvZmlsZXJS
ZWZlcmVuY2UgdG8gY3VycmVudCBzdGFjayIgIlxuIgorICAgICJqYWxyICAkMjUiICJcbiIKKyAg
ICAic3cgICAgJDksNjgoJDI5KSAgICMgc3RvcmUgZ2xvYmFsRGF0YSB0byBjdXJyZW50IHN0YWNr
IiAiXG4iCisgICAgImx3ICAgICQxNiwzMigkMjkpIiAiXG4iCisgICAgImx3ICAgICQxNywzNigk
MjkpIiAiXG4iCisgICAgImx3ICAgICQxOCw0MCgkMjkpIiAiXG4iCisgICAgImx3ICAgICQzMSw0
NCgkMjkpIiAiXG4iCisgICAgImpyICAgICQzMSIgIlxuIgorICAgICJhZGRpdSAkMjksJDI5LDcy
IiAiXG4iCisiLnNldCByZW9yZGVyIiAiXG4iCisiLnNldCBtYWNybyIgIlxuIgorIi5lbmQgIiBT
WU1CT0xfU1RSSU5HKGN0aVRyYW1wb2xpbmUpICJcbiIKKyk7CisKK2FzbSB2b2xhdGlsZSgKKyIu
dGV4dCIgIlxuIgorIi5hbGlnbiAyIiAiXG4iCisiLnNldCBub3Jlb3JkZXIiICJcbiIKKyIuc2V0
IG5vbWFjcm8iICJcbiIKKyIuc2V0IG5vbWlwczE2IiAiXG4iCisiLmdsb2JsICIgU1lNQk9MX1NU
UklORyhjdGlWTVRocm93VHJhbXBvbGluZSkgIlxuIgorIi5lbnQgIiBTWU1CT0xfU1RSSU5HKGN0
aVZNVGhyb3dUcmFtcG9saW5lKSAiXG4iCitTWU1CT0xfU1RSSU5HKGN0aVZNVGhyb3dUcmFtcG9s
aW5lKSAiOiIgIlxuIgorI2lmIFdURl9NSVBTX1BJQworICAgICJsdyAgICAkMjgsMjgoJDI5KSIg
IlxuIgorIi5zZXQgbWFjcm8iICJcbiIKKyAgICAibGEgICAgJDI1LCIgU1lNQk9MX1NUUklORyhj
dGlfdm1fdGhyb3cpICJcbiIKKyIuc2V0IG5vbWFjcm8iICJcbiIKKyAgICAiYmFsICIgU1lNQk9M
X1NUUklORyhjdGlfdm1fdGhyb3cpICJcbiIKKyAgICAibW92ZSAgJDQsJDI5IiAiXG4iCisjZWxz
ZQorICAgICJqYWwgIiBTWU1CT0xfU1RSSU5HKGN0aV92bV90aHJvdykgIlxuIgorICAgICJtb3Zl
ICAkNCwkMjkiICJcbiIKKyNlbmRpZgorICAgICJsdyAgICAkMTYsMzIoJDI5KSIgIlxuIgorICAg
ICJsdyAgICAkMTcsMzYoJDI5KSIgIlxuIgorICAgICJsdyAgICAkMTgsNDAoJDI5KSIgIlxuIgor
ICAgICJsdyAgICAkMzEsNDQoJDI5KSIgIlxuIgorICAgICJqciAgICAkMzEiICJcbiIKKyAgICAi
YWRkaXUgJDI5LCQyOSw3MiIgIlxuIgorIi5zZXQgcmVvcmRlciIgIlxuIgorIi5zZXQgbWFjcm8i
ICJcbiIKKyIuZW5kICIgU1lNQk9MX1NUUklORyhjdGlWTVRocm93VHJhbXBvbGluZSkgIlxuIgor
KTsKKworYXNtIHZvbGF0aWxlKAorIi50ZXh0IiAiXG4iCisiLmFsaWduIDIiICJcbiIKKyIuc2V0
IG5vcmVvcmRlciIgIlxuIgorIi5zZXQgbm9tYWNybyIgIlxuIgorIi5zZXQgbm9taXBzMTYiICJc
biIKKyIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGN0aU9wVGhyb3dOb3RDYXVnaHQpICJcbiIKKyIu
ZW50ICIgU1lNQk9MX1NUUklORyhjdGlPcFRocm93Tm90Q2F1Z2h0KSAiXG4iCitTWU1CT0xfU1RS
SU5HKGN0aU9wVGhyb3dOb3RDYXVnaHQpICI6IiAiXG4iCisgICAgImx3ICAgICQxNiwzMigkMjkp
IiAiXG4iCisgICAgImx3ICAgICQxNywzNigkMjkpIiAiXG4iCisgICAgImx3ICAgICQxOCw0MCgk
MjkpIiAiXG4iCisgICAgImx3ICAgICQzMSw0NCgkMjkpIiAiXG4iCisgICAgImpyICAgICQzMSIg
IlxuIgorICAgICJhZGRpdSAkMjksJDI5LDcyIiAiXG4iCisiLnNldCByZW9yZGVyIiAiXG4iCisi
LnNldCBtYWNybyIgIlxuIgorIi5lbmQgIiBTWU1CT0xfU1RSSU5HKGN0aU9wVGhyb3dOb3RDYXVn
aHQpICJcbiIKKyk7CisKICNlbGlmIENPTVBJTEVSKFJWQ1QpICYmIENQVShBUk1fVFJBRElUSU9O
QUwpCiAKIF9fYXNtIEVuY29kZWRKU1ZhbHVlIGN0aVRyYW1wb2xpbmUodm9pZCosIFJlZ2lzdGVy
RmlsZSosIENhbGxGcmFtZSosIEpTVmFsdWUqLCBQcm9maWxlcioqLCBKU0dsb2JhbERhdGEqKQpA
QCAtNzIyLDYgKzgxOCwyMCBAQCBKSVRUaHVua3M6OkpJVFRodW5rcyhKU0dsb2JhbERhdGEqIGds
b2JhCiAgICAgQVNTRVJUKE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgdGh1
bmtSZXR1cm5BZGRyZXNzKSA9PSBUSFVOS19SRVRVUk5fQUREUkVTU19PRkZTRVQpOwogICAgIEFT
U0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIHByZXNlcnZlZFI0KSA9
PSBQUkVTRVJWRURSNF9PRkZTRVQpOwogCisKKyNlbGlmIENQVShNSVBTKQorICAgIEFTU0VSVChP
QkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIHByZXNlcnZlZEdQKSA9PSAyOCk7
CisgICAgQVNTRVJUKE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgcHJlc2Vy
dmVkUzApID09IDMyKTsKKyAgICBBU1NFUlQoT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFj
a0ZyYW1lLCBwcmVzZXJ2ZWRTMSkgPT0gMzYpOworICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yo
c3RydWN0IEpJVFN0YWNrRnJhbWUsIHByZXNlcnZlZFMyKSA9PSA0MCk7CisgICAgQVNTRVJUKE9C
SkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgcHJlc2VydmVkUmV0dXJuQWRkcmVz
cykgPT0gNDQpOworICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJh
bWUsIHRodW5rUmV0dXJuQWRkcmVzcykgPT0gNDgpOworICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VU
T0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIHJlZ2lzdGVyRmlsZSkgPT0gNTIpOworICAgIEFTU0VS
VChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIGNhbGxGcmFtZSkgPT0gNTYp
OworICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIGV4Y2Vw
dGlvbikgPT0gNjApOworICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNr
RnJhbWUsIGVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSkgPT0gNjQpOworICAgIEFTU0VSVChPQkpF
Q1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIGdsb2JhbERhdGEpID09IDY4KTsKKwog
I2VuZGlmCiB9CiAKQEAgLTk4MCw2ICsxMDkwLDY1IEBAIHN0YXRpYyBORVZFUl9JTkxJTkUgdm9p
ZCB0aHJvd1N0YWNrT3ZlcmYKICAgICAgICAgKTsgXAogICAgIHJ0eXBlIEpJVFN0dWJUaHVua2Vk
XyMjb3AoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBcCiAKKyNlbGlmIENQVShNSVBTKQorI2lmIFdU
Rl9NSVBTX1BJQworI2RlZmluZSBERUZJTkVfU1RVQl9GVU5DVElPTihydHlwZSwgb3ApIFwKKyAg
ICBleHRlcm4gIkMiIHsgXAorICAgICAgICBydHlwZSBKSVRTdHViVGh1bmtlZF8jI29wKFNUVUJf
QVJHU19ERUNMQVJBVElPTik7IFwKKyAgICB9OyBcCisgICAgYXNtIHZvbGF0aWxlKCBcCisgICAg
ICAgICIudGV4dCIgIlxuIiBcCisgICAgICAgICIuYWxpZ24gMiIgIlxuIiBcCisgICAgICAgICIu
c2V0IG5vcmVvcmRlciIgIlxuIiBcCisgICAgICAgICIuc2V0IG5vbWFjcm8iICJcbiIgXAorICAg
ICAgICAiLnNldCBub21pcHMxNiIgIlxuIiBcCisgICAgICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RS
SU5HKGN0aV8jI29wKSAiXG4iIFwKKyAgICAgICAgIi5lbnQgIiBTWU1CT0xfU1RSSU5HKGN0aV8j
I29wKSAiXG4iIFwKKyAgICAgICAgU1lNQk9MX1NUUklORyhjdGlfIyNvcCkgIjoiICJcbiIgXAor
ICAgICAgICAibHcgICAgJDI4LDI4KCQyOSkiICJcbiIgXAorICAgICAgICAic3cgICAgJDMxLDQ4
KCQyOSkiICJcbiIgXAorICAgICAgICAiLnNldCBtYWNybyIgIlxuIiBcCisgICAgICAgICJsYSAg
ICAkMjUsIiBTWU1CT0xfU1RSSU5HKEpJVFN0dWJUaHVua2VkXyMjb3ApICJcbiIgXAorICAgICAg
ICAiLnNldCBub21hY3JvIiAiXG4iIFwKKyAgICAgICAgImJhbCAiIFNZTUJPTF9TVFJJTkcoSklU
U3R1YlRodW5rZWRfIyNvcCkgIlxuIiBcCisgICAgICAgICJub3AiICJcbiIgXAorICAgICAgICAi
bHcgICAgJDMxLDQ4KCQyOSkiICJcbiIgXAorICAgICAgICAianIgICAgJDMxIiAiXG4iIFwKKyAg
ICAgICAgIm5vcCIgIlxuIiBcCisgICAgICAgICIuc2V0IHJlb3JkZXIiICJcbiIgXAorICAgICAg
ICAiLnNldCBtYWNybyIgIlxuIiBcCisgICAgICAgICIuZW5kICIgU1lNQk9MX1NUUklORyhjdGlf
IyNvcCkgIlxuIiBcCisgICAgICAgICk7IFwKKyAgICBydHlwZSBKSVRTdHViVGh1bmtlZF8jI29w
KFNUVUJfQVJHU19ERUNMQVJBVElPTikKKworI2Vsc2UgLy8gV1RGX01JUFNfUElDCisjZGVmaW5l
IERFRklORV9TVFVCX0ZVTkNUSU9OKHJ0eXBlLCBvcCkgXAorICAgIGV4dGVybiAiQyIgeyBcCisg
ICAgICAgIHJ0eXBlIEpJVFN0dWJUaHVua2VkXyMjb3AoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsg
XAorICAgIH07IFwKKyAgICBhc20gdm9sYXRpbGUoIFwKKyAgICAgICAgIi50ZXh0IiAiXG4iIFwK
KyAgICAgICAgIi5hbGlnbiAyIiAiXG4iIFwKKyAgICAgICAgIi5zZXQgbm9yZW9yZGVyIiAiXG4i
IFwKKyAgICAgICAgIi5zZXQgbm9tYWNybyIgIlxuIiBcCisgICAgICAgICIuc2V0IG5vbWlwczE2
IiAiXG4iIFwKKyAgICAgICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoY3RpXyMjb3ApICJcbiIg
XAorICAgICAgICAiLmVudCAiIFNZTUJPTF9TVFJJTkcoY3RpXyMjb3ApICJcbiIgXAorICAgICAg
ICBTWU1CT0xfU1RSSU5HKGN0aV8jI29wKSAiOiIgIlxuIiBcCisgICAgICAgICJzdyAgICAkMzEs
NDgoJDI5KSIgIlxuIiBcCisgICAgICAgICJqYWwgIiBTWU1CT0xfU1RSSU5HKEpJVFN0dWJUaHVu
a2VkXyMjb3ApICJcbiIgXAorICAgICAgICAibm9wIiAiXG4iIFwKKyAgICAgICAgImx3ICAgICQz
MSw0OCgkMjkpIiAiXG4iIFwKKyAgICAgICAgImpyICAgICQzMSIgIlxuIiBcCisgICAgICAgICJu
b3AiICJcbiIgXAorICAgICAgICAiLnNldCByZW9yZGVyIiAiXG4iIFwKKyAgICAgICAgIi5zZXQg
bWFjcm8iICJcbiIgXAorICAgICAgICAiLmVuZCAiIFNZTUJPTF9TVFJJTkcoY3RpXyMjb3ApICJc
biIgXAorICAgICAgICApOyBcCisgICAgcnR5cGUgSklUU3R1YlRodW5rZWRfIyNvcChTVFVCX0FS
R1NfREVDTEFSQVRJT04pCisKKyNlbmRpZgorCiAjZWxpZiBDUFUoQVJNX1RSQURJVElPTkFMKSAm
JiBDT01QSUxFUihHQ0MpCiAKICNkZWZpbmUgREVGSU5FX1NUVUJfRlVOQ1RJT04ocnR5cGUsIG9w
KSBcCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAkocmV2aXNpb24gNTYwODcpCisrKyBKYXZhU2Ny
aXB0Q29yZS9qaXQvSklUU3R1YnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTg5LDYgKzE4OSwzMCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gV2hlbiBKSVQgY29kZSBtYWtlcyBhIGNhbGws
IGl0IHB1c2hlcyBpdHMgcmV0dXJuIGFkZHJlc3MganVzdCBiZWxvdyB0aGUgcmVzdCBvZiB0aGUg
c3RhY2suCiAgICAgICAgIFJldHVybkFkZHJlc3NQdHIqIHJldHVybkFkZHJlc3NTbG90KCkgeyBy
ZXR1cm4gJnRodW5rUmV0dXJuQWRkcmVzczsgfQogICAgIH07CisjZWxpZiBDUFUoTUlQUykKKyAg
ICBzdHJ1Y3QgSklUU3RhY2tGcmFtZSB7CisgICAgICAgIHZvaWQqIHJlc2VydmVkOyAvLyBVbnVz
ZWQKKyAgICAgICAgSklUU3R1YkFyZyBhcmdzWzZdOworCisgICAgICAgIHZvaWQqIHByZXNlcnZl
ZEdQOyAvLyBzdG9yZSBHUCB3aGVuIHVzaW5nIFBJQyBjb2RlCisgICAgICAgIHZvaWQqIHByZXNl
cnZlZFMwOworICAgICAgICB2b2lkKiBwcmVzZXJ2ZWRTMTsKKyAgICAgICAgdm9pZCogcHJlc2Vy
dmVkUzI7CisgICAgICAgIHZvaWQqIHByZXNlcnZlZFJldHVybkFkZHJlc3M7CisKKyAgICAgICAg
UmV0dXJuQWRkcmVzc1B0ciB0aHVua1JldHVybkFkZHJlc3M7CisKKyAgICAgICAgLy8gVGhlc2Ug
YXJndW1lbnRzIHBhc3NlZCBpbiBhMS4uYTMgKGEwIGNvbnRhaW5lZCB0aGUgZW50cnkgY29kZSBw
b2ludGVkLCB3aGljaCBpcyBub3QgcHJlc2VydmVkKQorICAgICAgICBSZWdpc3RlckZpbGUqIHJl
Z2lzdGVyRmlsZTsKKyAgICAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWU7CisgICAgICAgIEpTVmFs
dWUqIGV4Y2VwdGlvbjsKKworICAgICAgICAvLyBUaGVzZSBhcmd1bWVudHMgcGFzc2VkIG9uIHRo
ZSBzdGFjay4KKyAgICAgICAgUHJvZmlsZXIqKiBlbmFibGVkUHJvZmlsZXJSZWZlcmVuY2U7Cisg
ICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YTsKKworICAgICAgICBSZXR1cm5BZGRyZXNz
UHRyKiByZXR1cm5BZGRyZXNzU2xvdCgpIHsgcmV0dXJuICZ0aHVua1JldHVybkFkZHJlc3M7IH0K
KyAgICB9OwogI2Vsc2UKICNlcnJvciAiSklUU3RhY2tGcmFtZSBub3QgZGVmaW5lZCBmb3IgdGhp
cyBwbGF0Zm9ybS4iCiAjZW5kaWYKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCShyZXZpc2lvbiA1
NjA4NykKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBA
IC05MTUsNiArOTE1LDkgQEAgb24gTWluR1cuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aAogICAgICNkZWZpbmUgRU5BQkxFX0pJVCAxCiAjZWxpZiBDUFUoQVJNX1RSQURJVElPTkFMKSAm
JiBPUyhMSU5VWCkKICAgICAjZGVmaW5lIEVOQUJMRV9KSVQgMQorI2VsaWYgQ1BVKE1JUFMpICYm
IE9TKExJTlVYKQorICAgICNkZWZpbmUgRU5BQkxFX0pJVCAxCisgICAgI2RlZmluZSBXVEZfVVNF
X0pJVF9TVFVCX0FSR1VNRU5UX1ZBX0xJU1QgMAogI2VuZGlmCiAjZW5kaWYgLyogUExBVEZPUk0o
UVQpICovCiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51972</attachid>
            <date>2010-03-29 15:20:39 -0700</date>
            <delta_ts>2010-03-29 19:59:29 -0700</delta_ts>
            <desc>MIPS JIT Part2 Patch 20100329</desc>
            <filename>mips_jit20100329.diff</filename>
            <type>text/plain</type>
            <size>22006</size>
            <attacher name="Chao-ying Fu">fu</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDU2NzQwKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTAtMDMtMjkgIENoYW8teWlu
ZyBGdSAgPGZ1QG1pcHMuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIE1JUFMgSklUIFN1cHBvcnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMDE0NAorCisgICAgICAgIFRoZSBmb2xsb3dpbmcgY2hh
bmdlcyBlbmFibGUgTUlQUyBKSVQuCisKKyAgICAgICAgKiBhc3NlbWJsZXIvTUlQU0Fzc2VtYmxl
ci5oOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpsYnUpOgorICAgICAgICAoSlNDOjpN
SVBTQXNzZW1ibGVyOjpsaW5rV2l0aE9mZnNldCk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyTUlQUy5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1JUFM6OmxvYWQ4
KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjpicmFuY2g4KToKKyAgICAgICAg
KEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjpicmFuY2hUZXN0OCk6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyTUlQUzo6c2V0VGVzdDgpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
ck1JUFM6OnNldFRlc3QzMik6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9K
SVRJbmxpbmVNZXRob2RzLmg6CisgICAgICAgIChKU0M6OkpJVDo6cHJlc2VydmVSZXR1cm5BZGRy
ZXNzQWZ0ZXJDYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjpyZXN0b3JlUmV0dXJuQWRkcmVzc0Jl
Zm9yZVJldHVybik6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAqIGpp
dC9KSVRTdHVicy5jcHA6CisgICAgICAgIChKU0M6OkpJVFRodW5rczo6SklUVGh1bmtzKToKKyAg
ICAgICAgKiBqaXQvSklUU3R1YnMuaDoKKyAgICAgICAgKEpTQzo6SklUU3RhY2tGcmFtZTo6cmV0
dXJuQWRkcmVzc1Nsb3QpOgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgorCiAyMDEwLTAyLTI2
ICBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbiAgPGtlbm5ldGhAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTUlQU0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NSVBTQXNzZW1ibGVyLmgJKHJldmlzaW9uIDU2NTY3KQorKysgSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01JUFNBc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzkyLDYgKzM5Miwx
MyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgIHwgKHJzIDw8IE9QX1NIX1JTKSk7CiAgICAg
fQogCisgICAgdm9pZCBsYnUoUmVnaXN0ZXJJRCBydCwgUmVnaXN0ZXJJRCBycywgaW50IG9mZnNl
dCkKKyAgICB7CisgICAgICAgIGVtaXRJbnN0KDB4OTAwMDAwMDAgfCAocnQgPDwgT1BfU0hfUlQp
IHwgKHJzIDw8IE9QX1NIX1JTKQorICAgICAgICAgICAgICAgICB8IChvZmZzZXQgJiAweGZmZmYp
KTsKKyAgICAgICAgbG9hZERlbGF5Tm9wKCk7CisgICAgfQorCiAgICAgdm9pZCBsdyhSZWdpc3Rl
cklEIHJ0LCBSZWdpc3RlcklEIHJzLCBpbnQgb2Zmc2V0KQogICAgIHsKICAgICAgICAgZW1pdElu
c3QoMHg4YzAwMDAwMCB8IChydCA8PCBPUF9TSF9SVCkgfCAocnMgPDwgT1BfU0hfUlMpCkBAIC04
NTcsNyArODY0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgIG5vcAogICAgICAgICAg
ICAgICAgIDE6CiAKLSAgICAgICAgICAgICAgICBOb3RlOiBiZXEvYm5lL2JjMXQgYXJlIGNvbnZl
cnRlZCB0byBibmUvYmVxL2JjMWYuCisgICAgICAgICAgICAgICAgTm90ZTogYmVxL2JuZS9iYzF0
L2JjMWYgYXJlIGNvbnZlcnRlZCB0byBibmUvYmVxL2JjMWYvYmMxdC4KICAgICAgICAgICAgICov
CiAKICAgICAgICAgICAgIGlmICgqKGluc24gKyAyKSA9PSAweDEwMDAwMDAzKSB7CkBAIC04Njcs
NiArODc0LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgKmluc24gPSAoKmluc24g
JiAweDAzZmYwMDAwKSB8IDB4MTAwMDAwMDU7IC8vIGJlcQogICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKCgqaW5zbiAmIDB4ZmZmZjAwMDApID09IDB4NDUwMTAwMDApIC8vIGJjMXQKICAgICAgICAg
ICAgICAgICAgICAgKmluc24gPSAweDQ1MDAwMDA1OyAvLyBiYzFmCisgICAgICAgICAgICAgICAg
ZWxzZSBpZiAoKCppbnNuICYgMHhmZmZmMDAwMCkgPT0gMHg0NTAwMDAwMCkgLy8gYmMxZgorICAg
ICAgICAgICAgICAgICAgICAqaW5zbiA9IDB4NDUwMTAwMDU7IC8vIGJjMXQKICAgICAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCgwKTsKICAgICAgICAgICAgIH0K
SW5kZXg6IEphdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlck1JUFMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmgJ
KHJldmlzaW9uIDU2NTY3KQorKysgSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyTUlQUy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NDIsNiArNDQyLDI0IEBAIHB1YmxpYzoKICAg
ICAvLyBvcGVyYW5kIG9iamVjdHMgdG8gbG9hZHMgYW5kIHN0b3JlIHdpbGwgYmUgaW1wbGljaXRs
eSBjb25zdHJ1Y3RlZCBpZiBhCiAgICAgLy8gcmVnaXN0ZXIgaXMgcGFzc2VkLgogCisgICAgLyog
TmVlZCB0byB1c2UgemVyby1leHRlbmVkIGxvYWQgYnl0ZSBmb3IgbG9hZDguICAqLworICAgIHZv
aWQgbG9hZDgoSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7
CisgICAgICAgIGlmIChhZGRyZXNzLm9mZnNldCA+PSAtMzI3NjggJiYgYWRkcmVzcy5vZmZzZXQg
PD0gMzI3NjcKKyAgICAgICAgICAgICYmICFtX2ZpeGVkV2lkdGgpCisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5sYnUoZGVzdCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICBsdWkgICAgIGFkZHJUZW1w
LCAob2Zmc2V0ICsgMHg4MDAwKSA+PiAxNgorICAgICAgICAgICAgICAgIGFkZHUgICAgYWRkclRl
bXAsIGFkZHJUZW1wLCBiYXNlCisgICAgICAgICAgICAgICAgbGJ1ICAgICBkZXN0LCAob2Zmc2V0
ICYgMHhmZmZmKShhZGRyVGVtcCkKKyAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmx1aShhZGRyVGVtcFJlZ2lzdGVyLCAoYWRkcmVzcy5vZmZzZXQgKyAweDgwMDApID4+
IDE2KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRk
clRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxi
dShkZXN0LCBhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAgIH0KKyAg
ICB9CisKICAgICB2b2lkIGxvYWQzMihJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJ
RCBkZXN0KQogICAgIHsKICAgICAgICAgaWYgKGFkZHJlc3Mub2Zmc2V0ID49IC0zMjc2OCAmJiBh
ZGRyZXNzLm9mZnNldCA8PSAzMjc2NwpAQCAtODU2LDYgKzg3NCwxNSBAQCBwdWJsaWM6CiAgICAg
Ly8ganogYW5kIGpueiB0ZXN0IHdoZXRoZXIgdGhlIGZpcnN0IG9wZXJhbmQgaXMgZXF1YWwgdG8g
emVybywgYW5kIHRha2UKICAgICAvLyBhbiBvcHRpb25hbCBzZWNvbmQgb3BlcmFuZCBvZiBhIG1h
c2sgdW5kZXIgd2hpY2ggdG8gcGVyZm9ybSB0aGUgdGVzdC4KIAorICAgIEp1bXAgYnJhbmNoOChD
b25kaXRpb24gY29uZCwgQWRkcmVzcyBsZWZ0LCBJbW0zMiByaWdodCkKKyAgICB7CisgICAgICAg
IC8vIE1ha2Ugc3VyZSB0aGUgaW1tZWRpYXRlIHZhbHVlIGlzIHVuc2lnbmVkIDggYml0cy4KKyAg
ICAgICAgQVNTRVJUKCEocmlnaHQubV92YWx1ZSAmIDB4RkZGRkZGMDApKTsKKyAgICAgICAgbG9h
ZDgobGVmdCwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgIG1vdmUocmlnaHQsIGltbVRlbXBS
ZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBkYXRhVGVtcFJlZ2lzdGVy
LCBpbW1UZW1wUmVnaXN0ZXIpOworICAgIH0KKwogICAgIEp1bXAgYnJhbmNoMzIoQ29uZGl0aW9u
IGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCkKICAgICB7CiAgICAgICAg
IGlmIChjb25kID09IEVxdWFsIHx8IGNvbmQgPT0gWmVybykKQEAgLTEwMzgsNiArMTA2NSwxMiBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBicmFuY2hUZXN0MzIoY29uZCwgZGF0YVRlbXBSZWdp
c3RlciwgbWFzayk7CiAgICAgfQogCisgICAgSnVtcCBicmFuY2hUZXN0OChDb25kaXRpb24gY29u
ZCwgQWRkcmVzcyBhZGRyZXNzLCBJbW0zMiBtYXNrID0gSW1tMzIoLTEpKQorICAgIHsKKyAgICAg
ICAgbG9hZDgoYWRkcmVzcywgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBicmFu
Y2hUZXN0MzIoY29uZCwgZGF0YVRlbXBSZWdpc3RlciwgbWFzayk7CisgICAgfQorCiAgICAgSnVt
cCBqdW1wKCkKICAgICB7CiAgICAgICAgIHJldHVybiBicmFuY2hFcXVhbChNSVBTUmVnaXN0ZXJz
Ojp6ZXJvLCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsKQEAgLTEzMzIsNiArMTM2NSwyNiBAQCBwdWJs
aWM6CiAgICAgICAgIHNldDMyKGNvbmQsIGxlZnQsIGltbVRlbXBSZWdpc3RlciwgZGVzdCk7CiAg
ICAgfQogCisgICAgdm9pZCBzZXRUZXN0OChDb25kaXRpb24gY29uZCwgQWRkcmVzcyBhZGRyZXNz
LCBJbW0zMiBtYXNrLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBBU1NFUlQoKGNv
bmQgPT0gWmVybykgfHwgKGNvbmQgPT0gTm9uWmVybykpOworICAgICAgICBsb2FkOChhZGRyZXNz
LCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgaWYgKG1hc2subV92YWx1ZSA9PSAtMSAmJiAh
bV9maXhlZFdpZHRoKSB7CisgICAgICAgICAgICBpZiAoY29uZCA9PSBaZXJvKQorICAgICAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLnNsdGl1KGRlc3QsIGRhdGFUZW1wUmVnaXN0ZXIsIDEpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdHUoZGVzdCwgTUlQ
U1JlZ2lzdGVyczo6emVybywgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBtb3ZlKG1hc2ssIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5hbmRJbnNuKGNtcFRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3RlciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAg
IGlmIChjb25kID09IFplcm8pCisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0aXUoZGVz
dCwgY21wVGVtcFJlZ2lzdGVyLCAxKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5zbHR1KGRlc3QsIE1JUFNSZWdpc3RlcnM6Onplcm8sIGNtcFRlbXBSZWdp
c3Rlcik7CisgICAgICAgIH0KKyAgICB9CisKICAgICB2b2lkIHNldFRlc3QzMihDb25kaXRpb24g
Y29uZCwgQWRkcmVzcyBhZGRyZXNzLCBJbW0zMiBtYXNrLCBSZWdpc3RlcklEIGRlc3QpCiAgICAg
ewogICAgICAgICBBU1NFUlQoKGNvbmQgPT0gWmVybykgfHwgKGNvbmQgPT0gTm9uWmVybykpOwpA
QCAtMTM0NCw3ICsxMzk3LDcgQEAgcHVibGljOgogICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgbW92ZShtYXNrLCBpbW1UZW1wUmVnaXN0ZXIpOwogICAgICAgICAgICAgbV9hc3NlbWJsZXIu
YW5kSW5zbihjbXBUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbW1UZW1wUmVnaXN0ZXIpOwogICAgICAgICAgICAgaWYgKGNvbmQgPT0g
WmVybykKICAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHRpdShkZXN0LCBjbXBUZW1wUmVn
aXN0ZXIsIDEpOwogICAgICAgICAgICAgZWxzZQpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gNTY1
NjcpCisrKyBKYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTI2Niw2
ICsyNjYsMjggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lz
dGVySUQgZnBSZWdUMCA9IEFSTVJlZ2lzdGVyczo6ZDA7CiAgICAgICAgIHN0YXRpYyBjb25zdCBG
UFJlZ2lzdGVySUQgZnBSZWdUMSA9IEFSTVJlZ2lzdGVyczo6ZDE7CiAgICAgICAgIHN0YXRpYyBj
b25zdCBGUFJlZ2lzdGVySUQgZnBSZWdUMiA9IEFSTVJlZ2lzdGVyczo6ZDI7CisjZWxpZiBDUFUo
TUlQUykKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmV0dXJuVmFsdWVSZWdpc3Rl
ciA9IE1JUFNSZWdpc3RlcnM6OnYwOworICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBj
YWNoZWRSZXN1bHRSZWdpc3RlciA9IE1JUFNSZWdpc3RlcnM6OnYwOworICAgICAgICBzdGF0aWMg
Y29uc3QgUmVnaXN0ZXJJRCBmaXJzdEFyZ3VtZW50UmVnaXN0ZXIgPSBNSVBTUmVnaXN0ZXJzOjph
MDsKKworICAgICAgICAvLyByZWdUMCBtdXN0IGJlIHYwIGZvciByZXR1cm5pbmcgYSAzMi1iaXQg
dmFsdWUuCisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1QwID0gTUlQU1JlZ2lz
dGVyczo6djA7CisKKyAgICAgICAgLy8gcmVnVDEgbXVzdCBiZSB2MSBmb3IgcmV0dXJuaW5nIGEg
cGFpciBvZiAzMi1iaXQgdmFsdWUuCisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJl
Z1QxID0gTUlQU1JlZ2lzdGVyczo6djE7CisKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVy
SUQgcmVnVDIgPSBNSVBTUmVnaXN0ZXJzOjp0NDsKKworICAgICAgICAvLyByZWdUMyBtdXN0IGJl
IHNhdmVkIGluIHRoZSBjYWxsZWUsIHNvIHVzZSBhbiBTIHJlZ2lzdGVyLgorICAgICAgICBzdGF0
aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdUMyA9IE1JUFNSZWdpc3RlcnM6OnMyOworCisgICAgICAg
IHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGNhbGxGcmFtZVJlZ2lzdGVyID0gTUlQU1JlZ2lzdGVy
czo6czA7CisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHRpbWVvdXRDaGVja1JlZ2lz
dGVyID0gTUlQU1JlZ2lzdGVyczo6czE7CisKKyAgICAgICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0
ZXJJRCBmcFJlZ1QwID0gTUlQU1JlZ2lzdGVyczo6ZjQ7CisgICAgICAgIHN0YXRpYyBjb25zdCBG
UFJlZ2lzdGVySUQgZnBSZWdUMSA9IE1JUFNSZWdpc3RlcnM6OmY2OworICAgICAgICBzdGF0aWMg
Y29uc3QgRlBSZWdpc3RlcklEIGZwUmVnVDIgPSBNSVBTUmVnaXN0ZXJzOjpmODsKICNlbHNlCiAg
ICAgI2Vycm9yICJKSVQgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtLiIKICNlbmRpZgpA
QCAtNjg0LDYgKzcwNiw0OCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gc2VxdWVuY2VQ
dXRCeUlkCiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgc2VxdWVuY2VQdXRCeUlkSW5zdHJ1Y3Rp
b25TcGFjZSA9IDI4OwogICAgICAgICBzdGF0aWMgY29uc3QgaW50IHNlcXVlbmNlUHV0QnlJZENv
bnN0YW50U3BhY2UgPSAzOworI2VsaWYgQ1BVKE1JUFMpCisjaWYgV1RGX01JUFNfSVNBKDEpCisg
ICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRQdXRCeUlkU3RydWN0dXJlID0gMTY7
CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRQdXRCeUlkRXh0ZXJuYWxMb2Fk
ID0gNDg7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hMZW5ndGhQdXRCeUlkRXh0ZXJu
YWxMb2FkID0gMjA7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRQdXRCeUlk
UHJvcGVydHlNYXBPZmZzZXQgPSA2ODsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9m
ZnNldEdldEJ5SWRTdHJ1Y3R1cmUgPSAxNjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRj
aE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlID0gNDg7CisgICAgICAgIHN0YXRpYyBjb25z
dCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkRXh0ZXJuYWxMb2FkID0gNDg7CisgICAgICAgIHN0YXRp
YyBjb25zdCBpbnQgcGF0Y2hMZW5ndGhHZXRCeUlkRXh0ZXJuYWxMb2FkID0gMjA7CisgICAgICAg
IHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkUHJvcGVydHlNYXBPZmZzZXQgPSA2
ODsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRQdXRSZXN1bHQg
PSA4ODsKKyNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQorICAgICAgICAjZXJyb3IgIk9QQ09E
RV9TQU1QTElORyBpcyBub3QgeWV0IHN1cHBvcnRlZCIKKyNlbHNlCisgICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkU2xvd0Nhc2VDYWxsID0gNDA7CisjZW5kaWYKKyAg
ICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE9wQ2FsbENvbXBhcmVUb0p1bXAgPSAz
MjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhvZENoZWNrUHJvdG9P
YmogPSAzMjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhvZENoZWNr
UHJvdG9TdHJ1Y3QgPSA1NjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE1l
dGhvZENoZWNrUHV0RnVuY3Rpb24gPSA4ODsKKyNlbHNlIC8vIFdURl9NSVBTX0lTQSgxKQorICAg
ICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0UHV0QnlJZFN0cnVjdHVyZSA9IDEyOwor
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0UHV0QnlJZEV4dGVybmFsTG9hZCA9
IDQ0OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoTGVuZ3RoUHV0QnlJZEV4dGVybmFs
TG9hZCA9IDE2OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0UHV0QnlJZFBy
b3BlcnR5TWFwT2Zmc2V0ID0gNjA7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZz
ZXRHZXRCeUlkU3RydWN0dXJlID0gMTI7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hP
ZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSA9IDQ0OworICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IHBhdGNoT2Zmc2V0R2V0QnlJZEV4dGVybmFsTG9hZCA9IDQ0OworICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IHBhdGNoTGVuZ3RoR2V0QnlJZEV4dGVybmFsTG9hZCA9IDE2OworICAgICAgICBz
dGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0ID0gNjA7
CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkUHV0UmVzdWx0ID0g
NzY7CisjaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKKyAgICAgICAgI2Vycm9yICJPUENPREVf
U0FNUExJTkcgaXMgbm90IHlldCBzdXBwb3J0ZWQiCisjZWxzZQorICAgICAgICBzdGF0aWMgY29u
c3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbCA9IDQwOworI2VuZGlmCisgICAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRPcENhbGxDb21wYXJlVG9KdW1wID0gMzI7
CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRNZXRob2RDaGVja1Byb3RvT2Jq
ID0gMzI7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRNZXRob2RDaGVja1By
b3RvU3RydWN0ID0gNTI7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRNZXRo
b2RDaGVja1B1dEZ1bmN0aW9uID0gODQ7CisjZW5kaWYKICNlbmRpZgogI2VuZGlmIC8vIFVTRShK
U1ZBTFVFMzJfNjQpCiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2Rz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaAko
cmV2aXNpb24gNTY1NjcpCisrKyBKYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsNiArMTYwLDIzIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OnJlc3RvcmVSZXR1cm5BZGQKICAgICBsb2FkUHRyKGFkZHJlc3MsIGxpbmtSZWdpc3Rlcik7
CiB9CiAKKyNlbGlmIENQVShNSVBTKQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpwcmVzZXJ2
ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoUmVnaXN0ZXJJRCByZWcpCit7CisgICAgbW92ZShyZXR1
cm5BZGRyZXNzUmVnaXN0ZXIsIHJlZyk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnJl
c3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKFJlZ2lzdGVySUQgcmVnKQoreworICAgIG1v
dmUocmVnLCByZXR1cm5BZGRyZXNzUmVnaXN0ZXIpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjpyZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihBZGRyZXNzIGFkZHJlc3MpCit7
CisgICAgbG9hZFB0cihhZGRyZXNzLCByZXR1cm5BZGRyZXNzUmVnaXN0ZXIpOworfQorCiAjZWxz
ZSAvLyBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpw
cmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoUmVnaXN0ZXJJRCByZWcpCkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiA1NjU2NykKKysrIEphdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgzNCw2ICsxODM0LDU2IEBA
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG8KICAgICBhZGRQdHIoSW1t
MzIoc2l6ZW9mKEFyZ0xpc3QpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogI2VuZGlmIC8vIE9T
KFdJTkNFKQogCisjZWxpZiBDUFUoTUlQUykKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRl
cjMyKFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCwgcmVnVDApOworCisgICAgLy8gQWxsb2Nh
dGUgc3RhY2sgc3BhY2UgZm9yIG91ciBhcmdsaXN0CisgICAgQ09NUElMRV9BU1NFUlQoIShzaXpl
b2YoQXJnTGlzdCkgJiAweDcpLCBBcmdMaXN0X3Nob3VsZF9ieV84Ynl0ZV9hbGlnbmVkKTsKKyAg
ICBzdWJQdHIoSW1tMzIoc2l6ZW9mKEFyZ0xpc3QpICsgMjQpLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CisKKyAgICAvLyBTZXQgdXAgYXJndW1lbnRzCisgICAgc3ViUHRyKEltbTMyKDEpLCByZWdU
MCk7IC8vIERvbid0IGluY2x1ZGUgJ3RoaXMnIGluIGFyZ2NvdW50CisKKyAgICAvLyBQdXNoIGFy
Z2NvdW50IHRvIDI0ICsgb2Zmc2V0KCRzcCkKKyAgICBzdG9yZVB0cihyZWdUMCwgQWRkcmVzcyhz
dGFja1BvaW50ZXJSZWdpc3RlciwgMjQgKyBPQkpFQ1RfT0ZGU0VUT0YoQXJnTGlzdCwgbV9hcmdD
b3VudCkpKTsKKworICAgIC8vIENhbGN1bGF0ZSB0aGUgc3RhcnQgb2YgdGhlIGNhbGxmcmFtZSBo
ZWFkZXIsIGFuZCBzdG9yZSBpbiByZWdUMQorICAgIG1vdmUoY2FsbEZyYW1lUmVnaXN0ZXIsIHJl
Z1QxKTsKKyAgICBzdWIzMihJbW0zMihSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUg
KiAoaW50MzJfdClzaXplb2YoUmVnaXN0ZXIpKSwgcmVnVDEpOworCisgICAgLy8gQ2FsY3VsYXRl
IHN0YXJ0IG9mIGFyZ3VtZW50cyBhcyBjYWxsZnJhbWUgaGVhZGVyIC0gc2l6ZW9mKFJlZ2lzdGVy
KSAqIGFyZ2NvdW50IChyZWdUMSkKKyAgICBtdWwzMihJbW0zMihzaXplb2YoUmVnaXN0ZXIpKSwg
cmVnVDAsIHJlZ1QwKTsKKyAgICBzdWJQdHIocmVnVDAsIHJlZ1QxKTsKKworICAgIC8vIHB1c2gg
cG9pbnRlciB0byBhcmd1bWVudHMgdG8gMjQgKyBvZmZzZXQoJHNwKQorICAgIHN0b3JlUHRyKHJl
Z1QxLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCAyNCArIE9CSkVDVF9PRkZTRVRPRihB
cmdMaXN0LCBtX2FyZ3MpKSk7CisKKyAgICAvLyBTZXR1cCBhcmczOiByZWdUMSBjdXJyZW50bHkg
cG9pbnRzIHRvIHRoZSBmaXJzdCBhcmd1bWVudCwgcmVnVDEtc2l6ZW9mKFJlZ2lzdGVyKSBwb2lu
dHMgdG8gJ3RoaXMnCisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCAtKGludDMyX3Qpc2l6ZW9m
KFJlZ2lzdGVyKSksIE1JUFNSZWdpc3RlcnM6OmEzKTsKKworICAgIC8vIFNldHVwIGFyZzI6Cisg
ICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpDYWxsZWUsIE1J
UFNSZWdpc3RlcnM6OmEyKTsKKworICAgIC8vIFNldHVwIGFyZzE6CisgICAgbW92ZShjYWxsRnJh
bWVSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6YTEpOworCisgICAgLy8gU2V0dXAgYXJnNDogQXJn
TGlzdCBpcyBwYXNzZWQgYnkgcmVmZXJlbmNlLiAgQXQgMTYoJHNwKSwgc3RvcmUgKCRzcCArIDI0
KQorICAgIGFkZFB0cihJbW0zMigyNCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZWdUMik7Cisg
ICAgc3RvcmVQdHIocmVnVDIsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIDE2KSk7CisK
KyAgICAvLyBTZXR1cCBhcmcwIGFzIDIwKCRzcCkgdG8gaG9sZCB0aGUgcmV0dXJuZWQgc3RydWN0
dXJlLgorICAgIEFTU0VSVChzaXplb2YoSlNWYWx1ZSkgPT0gNCk7CisgICAgYWRkUHRyKEltbTMy
KDIwKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6OmEwKTsKKworICAgIC8v
IENhbGwKKyAgICBjYWxsKEFkZHJlc3MoTUlQU1JlZ2lzdGVyczo6YTIsIE9CSkVDVF9PRkZTRVRP
RihKU0Z1bmN0aW9uLCBtX2RhdGEpKSk7CisKKyAgICAvLyBHZXQgcmV0dXJuZWQgdmFsdWUgZnJv
bSAwKCR2MCkgd2hpY2ggaXMgdGhlIHNhbWUgYXMgMjAoJHNwKQorICAgIGxvYWRQdHIoQWRkcmVz
cyhyZXR1cm5WYWx1ZVJlZ2lzdGVyLCAwKSwgcmV0dXJuVmFsdWVSZWdpc3Rlcik7CisKKyAgICAv
LyBSZXN0b3JlIHN0YWNrIHNwYWNlCisgICAgYWRkUHRyKEltbTMyKHNpemVvZihBcmdMaXN0KSAr
IDI0KSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCiAjZWxpZiBFTkFCTEUoSklUX09QVElNSVpF
X05BVElWRV9DQUxMKQogI2Vycm9yICJKSVRfT1BUSU1JWkVfTkFUSVZFX0NBTEwgbm90IHlldCBz
dXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybS4iCiAjZWxzZQpJbmRleDogSmF2YVNjcmlwdENvcmUv
aml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1
YnMuY3BwCShyZXZpc2lvbiA1NjU2NykKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4MCw2ICs0ODAsMTAyIEBAIFNZTUJPTF9TVFJJTkcoY3Rp
T3BUaHJvd05vdENhdWdodCkgIjoiICIKICNkZWZpbmUgVEhVTktfUkVUVVJOX0FERFJFU1NfT0ZG
U0VUIDMyCiAjZGVmaW5lIFBSRVNFUlZFRFI0X09GRlNFVCAgICAgICAgICAzNgogCisjZWxpZiBD
UFUoTUlQUykKKworI2lmIFVTRShKSVRfU1RVQl9BUkdVTUVOVF9WQV9MSVNUKQorI2Vycm9yICJK
SVRfU1RVQl9BUkdVTUVOVF9WQV9MSVNUIG5vdCBzdXBwb3J0ZWQgb24gTUlQUy4iCisjZW5kaWYK
KworYXNtIHZvbGF0aWxlKAorIi50ZXh0IiAiXG4iCisiLmFsaWduIDIiICJcbiIKKyIuc2V0IG5v
cmVvcmRlciIgIlxuIgorIi5zZXQgbm9tYWNybyIgIlxuIgorIi5zZXQgbm9taXBzMTYiICJcbiIK
KyIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGN0aVRyYW1wb2xpbmUpICJcbiIKKyIuZW50ICIgU1lN
Qk9MX1NUUklORyhjdGlUcmFtcG9saW5lKSAiXG4iCitTWU1CT0xfU1RSSU5HKGN0aVRyYW1wb2xp
bmUpICI6IiAiXG4iCisgICAgImFkZGl1ICQyOSwkMjksLTcyIiAiXG4iCisgICAgInN3ICAgICQz
MSw0NCgkMjkpIiAiXG4iCisgICAgInN3ICAgICQxOCw0MCgkMjkpIiAiXG4iCisgICAgInN3ICAg
ICQxNywzNigkMjkpIiAiXG4iCisgICAgInN3ICAgICQxNiwzMigkMjkpIiAiXG4iCisjaWYgV1RG
X01JUFNfUElDCisgICAgInN3ICAgICQyOCwyOCgkMjkpIiAiXG4iCisjZW5kaWYKKyAgICAibW92
ZSAgJDE2LCQ2ICAgICAgICMgc2V0IGNhbGxGcmFtZVJlZ2lzdGVyIiAiXG4iCisgICAgImxpICAg
ICQxNyw1MTIgICAgICAjIHNldCB0aW1lb3V0Q2hlY2tSZWdpc3RlciIgIlxuIgorICAgICJtb3Zl
ICAkMjUsJDQgICAgICAgIyBtb3ZlIGV4ZWN1dGFibGVBZGRyZXNzIHRvIHQ5IiAiXG4iCisgICAg
InN3ICAgICQ1LDUyKCQyOSkgICAjIHN0b3JlIHJlZ2lzdGVyRmlsZSB0byBjdXJyZW50IHN0YWNr
IiAiXG4iCisgICAgInN3ICAgICQ2LDU2KCQyOSkgICAjIHN0b3JlIGNhbGxGcmFtZSB0byBjdXJl
bnQgc3RhY2siICJcbiIKKyAgICAic3cgICAgJDcsNjAoJDI5KSAgICMgc3RvcmUgZXhjZXB0aW9u
IHRvIGN1cnJlbnQgc3RhY2siICJcbiIKKyAgICAibHcgICAgJDgsODgoJDI5KSAgICMgbG9hZCBl
bmFibGVQcm9maWxlclJlZmVyZW5jZSBmcm9tIHByZXZpb3VzIHN0YWNrIiAiXG4iCisgICAgImx3
ICAgICQ5LDkyKCQyOSkgICAjIGxvYWQgZ2xvYmFsRGF0YSBmcm9tIHByZXZpb3VzIHN0YWNrIiAi
XG4iCisgICAgInN3ICAgICQ4LDY0KCQyOSkgICAjIHN0b3JlIGVuYWJsZVByb2ZpbGVyUmVmZXJl
bmNlIHRvIGN1cnJlbnQgc3RhY2siICJcbiIKKyAgICAiamFsciAgJDI1IiAiXG4iCisgICAgInN3
ICAgICQ5LDY4KCQyOSkgICAjIHN0b3JlIGdsb2JhbERhdGEgdG8gY3VycmVudCBzdGFjayIgIlxu
IgorICAgICJsdyAgICAkMTYsMzIoJDI5KSIgIlxuIgorICAgICJsdyAgICAkMTcsMzYoJDI5KSIg
IlxuIgorICAgICJsdyAgICAkMTgsNDAoJDI5KSIgIlxuIgorICAgICJsdyAgICAkMzEsNDQoJDI5
KSIgIlxuIgorICAgICJqciAgICAkMzEiICJcbiIKKyAgICAiYWRkaXUgJDI5LCQyOSw3MiIgIlxu
IgorIi5zZXQgcmVvcmRlciIgIlxuIgorIi5zZXQgbWFjcm8iICJcbiIKKyIuZW5kICIgU1lNQk9M
X1NUUklORyhjdGlUcmFtcG9saW5lKSAiXG4iCispOworCithc20gdm9sYXRpbGUoCisiLnRleHQi
ICJcbiIKKyIuYWxpZ24gMiIgIlxuIgorIi5zZXQgbm9yZW9yZGVyIiAiXG4iCisiLnNldCBub21h
Y3JvIiAiXG4iCisiLnNldCBub21pcHMxNiIgIlxuIgorIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkco
Y3RpVk1UaHJvd1RyYW1wb2xpbmUpICJcbiIKKyIuZW50ICIgU1lNQk9MX1NUUklORyhjdGlWTVRo
cm93VHJhbXBvbGluZSkgIlxuIgorU1lNQk9MX1NUUklORyhjdGlWTVRocm93VHJhbXBvbGluZSkg
IjoiICJcbiIKKyNpZiBXVEZfTUlQU19QSUMKKyAgICAibHcgICAgJDI4LDI4KCQyOSkiICJcbiIK
KyIuc2V0IG1hY3JvIiAiXG4iCisgICAgImxhICAgICQyNSwiIFNZTUJPTF9TVFJJTkcoY3RpX3Zt
X3Rocm93KSAiXG4iCisiLnNldCBub21hY3JvIiAiXG4iCisgICAgImJhbCAiIFNZTUJPTF9TVFJJ
TkcoY3RpX3ZtX3Rocm93KSAiXG4iCisgICAgIm1vdmUgICQ0LCQyOSIgIlxuIgorI2Vsc2UKKyAg
ICAiamFsICIgU1lNQk9MX1NUUklORyhjdGlfdm1fdGhyb3cpICJcbiIKKyAgICAibW92ZSAgJDQs
JDI5IiAiXG4iCisjZW5kaWYKKyAgICAibHcgICAgJDE2LDMyKCQyOSkiICJcbiIKKyAgICAibHcg
ICAgJDE3LDM2KCQyOSkiICJcbiIKKyAgICAibHcgICAgJDE4LDQwKCQyOSkiICJcbiIKKyAgICAi
bHcgICAgJDMxLDQ0KCQyOSkiICJcbiIKKyAgICAianIgICAgJDMxIiAiXG4iCisgICAgImFkZGl1
ICQyOSwkMjksNzIiICJcbiIKKyIuc2V0IHJlb3JkZXIiICJcbiIKKyIuc2V0IG1hY3JvIiAiXG4i
CisiLmVuZCAiIFNZTUJPTF9TVFJJTkcoY3RpVk1UaHJvd1RyYW1wb2xpbmUpICJcbiIKKyk7CisK
K2FzbSB2b2xhdGlsZSgKKyIudGV4dCIgIlxuIgorIi5hbGlnbiAyIiAiXG4iCisiLnNldCBub3Jl
b3JkZXIiICJcbiIKKyIuc2V0IG5vbWFjcm8iICJcbiIKKyIuc2V0IG5vbWlwczE2IiAiXG4iCisi
Lmdsb2JsICIgU1lNQk9MX1NUUklORyhjdGlPcFRocm93Tm90Q2F1Z2h0KSAiXG4iCisiLmVudCAi
IFNZTUJPTF9TVFJJTkcoY3RpT3BUaHJvd05vdENhdWdodCkgIlxuIgorU1lNQk9MX1NUUklORyhj
dGlPcFRocm93Tm90Q2F1Z2h0KSAiOiIgIlxuIgorICAgICJsdyAgICAkMTYsMzIoJDI5KSIgIlxu
IgorICAgICJsdyAgICAkMTcsMzYoJDI5KSIgIlxuIgorICAgICJsdyAgICAkMTgsNDAoJDI5KSIg
IlxuIgorICAgICJsdyAgICAkMzEsNDQoJDI5KSIgIlxuIgorICAgICJqciAgICAkMzEiICJcbiIK
KyAgICAiYWRkaXUgJDI5LCQyOSw3MiIgIlxuIgorIi5zZXQgcmVvcmRlciIgIlxuIgorIi5zZXQg
bWFjcm8iICJcbiIKKyIuZW5kICIgU1lNQk9MX1NUUklORyhjdGlPcFRocm93Tm90Q2F1Z2h0KSAi
XG4iCispOworCiAjZWxpZiBDT01QSUxFUihSVkNUKSAmJiBDUFUoQVJNX1RSQURJVElPTkFMKQog
CiBfX2FzbSBFbmNvZGVkSlNWYWx1ZSBjdGlUcmFtcG9saW5lKHZvaWQqLCBSZWdpc3RlckZpbGUq
LCBDYWxsRnJhbWUqLCBKU1ZhbHVlKiwgUHJvZmlsZXIqKiwgSlNHbG9iYWxEYXRhKikKQEAgLTcy
Miw2ICs4MTgsMjAgQEAgSklUVGh1bmtzOjpKSVRUaHVua3MoSlNHbG9iYWxEYXRhKiBnbG9iYQog
ICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIHRodW5rUmV0
dXJuQWRkcmVzcykgPT0gVEhVTktfUkVUVVJOX0FERFJFU1NfT0ZGU0VUKTsKICAgICBBU1NFUlQo
T0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBwcmVzZXJ2ZWRSNCkgPT0gUFJF
U0VSVkVEUjRfT0ZGU0VUKTsKIAorCisjZWxpZiBDUFUoTUlQUykKKyAgICBBU1NFUlQoT0JKRUNU
X09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBwcmVzZXJ2ZWRHUCkgPT0gMjgpOworICAg
IEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIHByZXNlcnZlZFMw
KSA9PSAzMik7CisgICAgQVNTRVJUKE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFt
ZSwgcHJlc2VydmVkUzEpID09IDM2KTsKKyAgICBBU1NFUlQoT0JKRUNUX09GRlNFVE9GKHN0cnVj
dCBKSVRTdGFja0ZyYW1lLCBwcmVzZXJ2ZWRTMikgPT0gNDApOworICAgIEFTU0VSVChPQkpFQ1Rf
T0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIHByZXNlcnZlZFJldHVybkFkZHJlc3MpID09
IDQ0KTsKKyAgICBBU1NFUlQoT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCB0
aHVua1JldHVybkFkZHJlc3MpID09IDQ4KTsKKyAgICBBU1NFUlQoT0JKRUNUX09GRlNFVE9GKHN0
cnVjdCBKSVRTdGFja0ZyYW1lLCByZWdpc3RlckZpbGUpID09IDUyKTsKKyAgICBBU1NFUlQoT0JK
RUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBjYWxsRnJhbWUpID09IDU2KTsKKyAg
ICBBU1NFUlQoT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBleGNlcHRpb24p
ID09IDYwKTsKKyAgICBBU1NFUlQoT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1l
LCBlbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UpID09IDY0KTsKKyAgICBBU1NFUlQoT0JKRUNUX09G
RlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBnbG9iYWxEYXRhKSA9PSA2OCk7CisKICNlbmRp
ZgogfQogCkBAIC05ODAsNiArMTA5MCw2NSBAQCBzdGF0aWMgTkVWRVJfSU5MSU5FIHZvaWQgdGhy
b3dTdGFja092ZXJmCiAgICAgICAgICk7IFwKICAgICBydHlwZSBKSVRTdHViVGh1bmtlZF8jI29w
KFNUVUJfQVJHU19ERUNMQVJBVElPTikgXAogCisjZWxpZiBDUFUoTUlQUykKKyNpZiBXVEZfTUlQ
U19QSUMKKyNkZWZpbmUgREVGSU5FX1NUVUJfRlVOQ1RJT04ocnR5cGUsIG9wKSBcCisgICAgZXh0
ZXJuICJDIiB7IFwKKyAgICAgICAgcnR5cGUgSklUU3R1YlRodW5rZWRfIyNvcChTVFVCX0FSR1Nf
REVDTEFSQVRJT04pOyBcCisgICAgfTsgXAorICAgIGFzbSB2b2xhdGlsZSggXAorICAgICAgICAi
LnRleHQiICJcbiIgXAorICAgICAgICAiLmFsaWduIDIiICJcbiIgXAorICAgICAgICAiLnNldCBu
b3Jlb3JkZXIiICJcbiIgXAorICAgICAgICAiLnNldCBub21hY3JvIiAiXG4iIFwKKyAgICAgICAg
Ii5zZXQgbm9taXBzMTYiICJcbiIgXAorICAgICAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhj
dGlfIyNvcCkgIlxuIiBcCisgICAgICAgICIuZW50ICIgU1lNQk9MX1NUUklORyhjdGlfIyNvcCkg
IlxuIiBcCisgICAgICAgIFNZTUJPTF9TVFJJTkcoY3RpXyMjb3ApICI6IiAiXG4iIFwKKyAgICAg
ICAgImx3ICAgICQyOCwyOCgkMjkpIiAiXG4iIFwKKyAgICAgICAgInN3ICAgICQzMSw0OCgkMjkp
IiAiXG4iIFwKKyAgICAgICAgIi5zZXQgbWFjcm8iICJcbiIgXAorICAgICAgICAibGEgICAgJDI1
LCIgU1lNQk9MX1NUUklORyhKSVRTdHViVGh1bmtlZF8jI29wKSAiXG4iIFwKKyAgICAgICAgIi5z
ZXQgbm9tYWNybyIgIlxuIiBcCisgICAgICAgICJiYWwgIiBTWU1CT0xfU1RSSU5HKEpJVFN0dWJU
aHVua2VkXyMjb3ApICJcbiIgXAorICAgICAgICAibm9wIiAiXG4iIFwKKyAgICAgICAgImx3ICAg
ICQzMSw0OCgkMjkpIiAiXG4iIFwKKyAgICAgICAgImpyICAgICQzMSIgIlxuIiBcCisgICAgICAg
ICJub3AiICJcbiIgXAorICAgICAgICAiLnNldCByZW9yZGVyIiAiXG4iIFwKKyAgICAgICAgIi5z
ZXQgbWFjcm8iICJcbiIgXAorICAgICAgICAiLmVuZCAiIFNZTUJPTF9TVFJJTkcoY3RpXyMjb3Ap
ICJcbiIgXAorICAgICAgICApOyBcCisgICAgcnR5cGUgSklUU3R1YlRodW5rZWRfIyNvcChTVFVC
X0FSR1NfREVDTEFSQVRJT04pCisKKyNlbHNlIC8vIFdURl9NSVBTX1BJQworI2RlZmluZSBERUZJ
TkVfU1RVQl9GVU5DVElPTihydHlwZSwgb3ApIFwKKyAgICBleHRlcm4gIkMiIHsgXAorICAgICAg
ICBydHlwZSBKSVRTdHViVGh1bmtlZF8jI29wKFNUVUJfQVJHU19ERUNMQVJBVElPTik7IFwKKyAg
ICB9OyBcCisgICAgYXNtIHZvbGF0aWxlKCBcCisgICAgICAgICIudGV4dCIgIlxuIiBcCisgICAg
ICAgICIuYWxpZ24gMiIgIlxuIiBcCisgICAgICAgICIuc2V0IG5vcmVvcmRlciIgIlxuIiBcCisg
ICAgICAgICIuc2V0IG5vbWFjcm8iICJcbiIgXAorICAgICAgICAiLnNldCBub21pcHMxNiIgIlxu
IiBcCisgICAgICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGN0aV8jI29wKSAiXG4iIFwKKyAg
ICAgICAgIi5lbnQgIiBTWU1CT0xfU1RSSU5HKGN0aV8jI29wKSAiXG4iIFwKKyAgICAgICAgU1lN
Qk9MX1NUUklORyhjdGlfIyNvcCkgIjoiICJcbiIgXAorICAgICAgICAic3cgICAgJDMxLDQ4KCQy
OSkiICJcbiIgXAorICAgICAgICAiamFsICIgU1lNQk9MX1NUUklORyhKSVRTdHViVGh1bmtlZF8j
I29wKSAiXG4iIFwKKyAgICAgICAgIm5vcCIgIlxuIiBcCisgICAgICAgICJsdyAgICAkMzEsNDgo
JDI5KSIgIlxuIiBcCisgICAgICAgICJqciAgICAkMzEiICJcbiIgXAorICAgICAgICAibm9wIiAi
XG4iIFwKKyAgICAgICAgIi5zZXQgcmVvcmRlciIgIlxuIiBcCisgICAgICAgICIuc2V0IG1hY3Jv
IiAiXG4iIFwKKyAgICAgICAgIi5lbmQgIiBTWU1CT0xfU1RSSU5HKGN0aV8jI29wKSAiXG4iIFwK
KyAgICAgICAgKTsgXAorICAgIHJ0eXBlIEpJVFN0dWJUaHVua2VkXyMjb3AoU1RVQl9BUkdTX0RF
Q0xBUkFUSU9OKQorCisjZW5kaWYKKwogI2VsaWYgQ1BVKEFSTV9UUkFESVRJT05BTCkgJiYgQ09N
UElMRVIoR0NDKQogCiAjZGVmaW5lIERFRklORV9TVFVCX0ZVTkNUSU9OKHJ0eXBlLCBvcCkgXApJ
bmRleDogSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUvaml0L0pJVFN0dWJzLmgJKHJldmlzaW9uIDU2NTY3KQorKysgSmF2YVNjcmlwdENv
cmUvaml0L0pJVFN0dWJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4OSw2ICsxODksMzAgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIFdoZW4gSklUIGNvZGUgbWFrZXMgYSBjYWxsLCBpdCBw
dXNoZXMgaXRzIHJldHVybiBhZGRyZXNzIGp1c3QgYmVsb3cgdGhlIHJlc3Qgb2YgdGhlIHN0YWNr
LgogICAgICAgICBSZXR1cm5BZGRyZXNzUHRyKiByZXR1cm5BZGRyZXNzU2xvdCgpIHsgcmV0dXJu
ICZ0aHVua1JldHVybkFkZHJlc3M7IH0KICAgICB9OworI2VsaWYgQ1BVKE1JUFMpCisgICAgc3Ry
dWN0IEpJVFN0YWNrRnJhbWUgeworICAgICAgICB2b2lkKiByZXNlcnZlZDsgLy8gVW51c2VkCisg
ICAgICAgIEpJVFN0dWJBcmcgYXJnc1s2XTsKKworICAgICAgICB2b2lkKiBwcmVzZXJ2ZWRHUDsg
Ly8gc3RvcmUgR1Agd2hlbiB1c2luZyBQSUMgY29kZQorICAgICAgICB2b2lkKiBwcmVzZXJ2ZWRT
MDsKKyAgICAgICAgdm9pZCogcHJlc2VydmVkUzE7CisgICAgICAgIHZvaWQqIHByZXNlcnZlZFMy
OworICAgICAgICB2b2lkKiBwcmVzZXJ2ZWRSZXR1cm5BZGRyZXNzOworCisgICAgICAgIFJldHVy
bkFkZHJlc3NQdHIgdGh1bmtSZXR1cm5BZGRyZXNzOworCisgICAgICAgIC8vIFRoZXNlIGFyZ3Vt
ZW50cyBwYXNzZWQgaW4gYTEuLmEzIChhMCBjb250YWluZWQgdGhlIGVudHJ5IGNvZGUgcG9pbnRl
ZCwgd2hpY2ggaXMgbm90IHByZXNlcnZlZCkKKyAgICAgICAgUmVnaXN0ZXJGaWxlKiByZWdpc3Rl
ckZpbGU7CisgICAgICAgIENhbGxGcmFtZSogY2FsbEZyYW1lOworICAgICAgICBKU1ZhbHVlKiBl
eGNlcHRpb247CisKKyAgICAgICAgLy8gVGhlc2UgYXJndW1lbnRzIHBhc3NlZCBvbiB0aGUgc3Rh
Y2suCisgICAgICAgIFByb2ZpbGVyKiogZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlOworICAgICAg
ICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGE7CisKKyAgICAgICAgUmV0dXJuQWRkcmVzc1B0ciog
cmV0dXJuQWRkcmVzc1Nsb3QoKSB7IHJldHVybiAmdGh1bmtSZXR1cm5BZGRyZXNzOyB9CisgICAg
fTsKICNlbHNlCiAjZXJyb3IgIkpJVFN0YWNrRnJhbWUgbm90IGRlZmluZWQgZm9yIHRoaXMgcGxh
dGZvcm0uIgogI2VuZGlmCkluZGV4OiBKYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAkocmV2aXNpb24gNTY1Njcp
CisrKyBKYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtOTIy
LDYgKzkyMiw5IEBAIG9uIE1pbkdXLiBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2gKICAg
ICAjZGVmaW5lIEVOQUJMRV9KSVQgMQogI2VsaWYgQ1BVKEFSTV9UUkFESVRJT05BTCkgJiYgT1Mo
TElOVVgpCiAgICAgI2RlZmluZSBFTkFCTEVfSklUIDEKKyNlbGlmIENQVShNSVBTKSAmJiBPUyhM
SU5VWCkKKyAgICAjZGVmaW5lIEVOQUJMRV9KSVQgMQorICAgICNkZWZpbmUgV1RGX1VTRV9KSVRf
U1RVQl9BUkdVTUVOVF9WQV9MSVNUIDAKICNlbmRpZgogI2VuZGlmIC8qIFBMQVRGT1JNKFFUKSAq
LwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>