<?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>148717</bug_id>
          
          <creation_ts>2015-09-02 10:39:00 -0700</creation_ts>
          <short_desc>There should be one stub hanging off an inline cache that contains code for all of the cases, rather than forming a linked list consisting of one stub per case</short_desc>
          <delta_ts>2015-09-10 19:50:07 -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>Other</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>148718</dependson>
    
    <dependson>148915</dependson>
    
    <dependson>148943</dependson>
          <blocked>148610</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>basile_clement</cc>
    
    <cc>benjamin</cc>
    
    <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>rniwa</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1122855</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-02 10:39:00 -0700</bug_when>
    <thetext>Such a new approach where we regenerate the One True Stub every time a case is added will enable us to more easily prune out cases that become irrelevant once a new case is added.  For a while now this has been something we should have added, for example when we go to slow path because a prototype check failed.  But for the type checking PutById&apos;s that will be introduced in https://bugs.webkit.org/show_bug.cgi?id=148610, this kind of thing will be even more profitable.  So, we should just implement this now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1123660</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-04 15:03:51 -0700</bug_when>
    <thetext>*** Bug 148718 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1123661</commentid>
    <comment_count>2</comment_count>
      <attachid>260628</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-04 15:04:32 -0700</bug_when>
    <thetext>Created attachment 260628
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1123689</commentid>
    <comment_count>3</comment_count>
      <attachid>260638</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-04 16:02:43 -0700</bug_when>
    <thetext>Created attachment 260638
just a bit more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1123964</commentid>
    <comment_count>4</comment_count>
      <attachid>260696</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-05 11:44:49 -0700</bug_when>
    <thetext>Created attachment 260696
some more stuff

Now it has code generation for all of the &quot;o.f&quot; inline caches (get, put, in).

I just need to finish hooking it up to Repatch, and deleting the old code from Repatch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1123968</commentid>
    <comment_count>5</comment_count>
      <attachid>260697</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-05 13:14:24 -0700</bug_when>
    <thetext>Created attachment 260697
more glue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124025</commentid>
    <comment_count>6</comment_count>
      <attachid>260711</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-06 12:06:09 -0700</bug_when>
    <thetext>Created attachment 260711
starting to get interesting

Now most of the GetById patching code has been converted to use PolymorphicAccess.

This also solves a longstanding issue: it establishes a way for the stub to jump to slow path while indicating that it&apos;s not useful to attempt patching. This comes into play for things like negative array length.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124036</commentid>
    <comment_count>7</comment_count>
      <attachid>260715</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-06 13:16:33 -0700</bug_when>
    <thetext>Created attachment 260715
inching towards victory</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124161</commentid>
    <comment_count>8</comment_count>
      <attachid>260746</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-07 13:28:39 -0700</bug_when>
    <thetext>Created attachment 260746
making this change a little less incremental</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124283</commentid>
    <comment_count>9</comment_count>
      <attachid>260768</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-08 10:36:41 -0700</bug_when>
    <thetext>Created attachment 260768
it is written</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124285</commentid>
    <comment_count>10</comment_count>
      <attachid>260769</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-08 10:39:25 -0700</bug_when>
    <thetext>Created attachment 260769
rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124326</commentid>
    <comment_count>11</comment_count>
      <attachid>260773</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-08 11:32:52 -0700</bug_when>
    <thetext>Created attachment 260773
inching towards victory</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124361</commentid>
    <comment_count>12</comment_count>
      <attachid>260784</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-08 13:02:22 -0700</bug_when>
    <thetext>Created attachment 260784
it compiles!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124404</commentid>
    <comment_count>13</comment_count>
      <attachid>260797</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-08 14:46:59 -0700</bug_when>
    <thetext>Created attachment 260797
it does simple things</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124436</commentid>
    <comment_count>14</comment_count>
      <attachid>260801</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-08 16:06:25 -0700</bug_when>
    <thetext>Created attachment 260801
more

Now it has a changelog!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124452</commentid>
    <comment_count>15</comment_count>
      <attachid>260807</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-08 16:31:09 -0700</bug_when>
    <thetext>Created attachment 260807
rebased again

It&apos;s starting to pass a lot of tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124464</commentid>
    <comment_count>16</comment_count>
      <attachid>260812</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-08 16:53:30 -0700</bug_when>
    <thetext>Created attachment 260812
it&apos;s passing tests so much</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124519</commentid>
    <comment_count>17</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-08 20:38:08 -0700</bug_when>
    <thetext>Well this is promising so far.


Benchmark report for SunSpider and Octane on shakezilla (MacBookPro11,3).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r189515)
&quot;NewPolyIC&quot; at /Volumes/Data/primary/OpenSource/WebKitBuild/Release/jsc (r189515)

Collected 6 samples per benchmark/VM, with 6 VM invocations per benchmark. Emitted a call to gc() between sample
measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime()
function to get microsecond-level timing. Reporting benchmark execution times with 95% confidence intervals in
milliseconds.

                                        TipOfTree                 NewPolyIC                                     
SunSpider:
   3d-cube                            4.6024+-0.2057     ?      4.6746+-0.3917        ? might be 1.0157x slower
   3d-morph                           4.9763+-0.0703     ?      5.1038+-0.1656        ? might be 1.0256x slower
   3d-raytrace                        5.5236+-1.3352            5.2140+-0.2418          might be 1.0594x faster
   access-binary-trees                1.9876+-0.1296     ?      2.1369+-0.1340        ? might be 1.0751x slower
   access-fannkuch                    5.3289+-0.1978     ?      5.3676+-0.2694        ?
   access-nbody                       2.3927+-0.0273     ?      2.4355+-0.0598        ? might be 1.0179x slower
   access-nsieve                      3.0258+-0.1913     ?      3.0612+-0.2531        ? might be 1.0117x slower
   bitops-3bit-bits-in-byte           1.1162+-0.0642            1.0994+-0.0417          might be 1.0153x faster
   bitops-bits-in-byte                3.1965+-0.0740     ?      3.2351+-0.0609        ? might be 1.0121x slower
   bitops-bitwise-and                 2.0063+-0.1278            1.9414+-0.0195          might be 1.0335x faster
   bitops-nsieve-bits                 2.9116+-0.0211     ?      2.9129+-0.0259        ?
   controlflow-recursive              2.1255+-0.1569     ?      2.1341+-0.1410        ?
   crypto-aes                         3.7949+-0.1613     ?      3.8543+-0.3143        ? might be 1.0157x slower
   crypto-md5                         2.3102+-0.0309     ?      2.3524+-0.0716        ? might be 1.0183x slower
   crypto-sha1                        2.2855+-0.2040            2.2119+-0.1688          might be 1.0333x faster
   date-format-tofte                  6.5839+-0.0778     ?      6.9934+-0.6136        ? might be 1.0622x slower
   date-format-xparb                  4.6549+-0.3346            4.6510+-0.3760        
   math-cordic                        2.7710+-0.0694     ?      2.9258+-0.2232        ? might be 1.0559x slower
   math-partial-sums                  4.8258+-0.2197            4.7726+-0.1412          might be 1.0111x faster
   math-spectral-norm                 1.8119+-0.0436            1.7715+-0.0082          might be 1.0228x faster
   regexp-dna                         6.4183+-0.1144            6.4147+-0.1123        
   string-base64                      4.3978+-0.1363            4.3759+-0.1998        
   string-fasta                       5.6844+-0.0468     ?      5.9449+-0.4471        ? might be 1.0458x slower
   string-tagcloud                    7.7238+-0.1715     ?      7.7596+-0.1759        ?
   string-unpack-code                18.5982+-0.6501     ?     18.6956+-0.9401        ?
   string-validate-input              4.5659+-0.2548            4.5386+-0.0605        

   &lt;arithmetic&gt;                       4.4469+-0.0887     ?      4.4838+-0.0390        ? might be 1.0083x slower

                                        TipOfTree                 NewPolyIC                                     
Octane:
   encrypt                           0.17087+-0.00309          0.16614+-0.00481         might be 1.0285x faster
   decrypt                           3.28232+-0.03832          3.25622+-0.01320       
   deltablue                x2       0.16196+-0.01141          0.16081+-0.01273       
   earley                            0.28344+-0.00397    ?     0.28406+-0.00337       ?
   boyer                             4.27942+-0.04376    ?     4.32630+-0.14208       ? might be 1.0110x slower
   navier-stokes            x2       4.80868+-0.01543    ?     4.82552+-0.02474       ?
   raytrace                 x2       1.02167+-0.06816    ^     0.89800+-0.00457       ^ definitely 1.1377x faster
   richards                 x2       0.10766+-0.00134          0.10765+-0.00166       
   splay                    x2       0.32496+-0.00199    ?     0.32772+-0.00371       ?
   regexp                   x2      25.00191+-0.54257         24.92420+-0.47411       
   pdfjs                    x2      36.83656+-0.33963         36.36966+-0.38146         might be 1.0128x faster
   mandreel                 x2      44.36845+-1.14861    ?    44.49560+-0.74444       ?
   gbemu                    x2      33.64794+-0.14868    ?    34.52705+-1.54902       ? might be 1.0261x slower
   closure                           0.57074+-0.00573          0.56838+-0.00330       
   jquery                            7.09301+-0.07669          7.08691+-0.03837       
   box2d                    x2       9.93760+-0.16151    ?     9.95929+-0.15017       ?
   zlib                     x2     379.93174+-6.77425    ?   385.75085+-5.85169       ? might be 1.0153x slower
   typescript               x2     641.18534+-13.63696   ^   615.81299+-8.24530       ^ definitely 1.0412x faster

   &lt;geometric&gt;                       5.56752+-0.02770          5.51303+-0.05167         might be 1.0099x faster

                                        TipOfTree                 NewPolyIC                                     
Geomean of preferred means:
   &lt;scaled-result&gt;                   15.7343+-0.1832           15.7219+-0.0499          might be 1.0008x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124523</commentid>
    <comment_count>18</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-08 20:54:00 -0700</bug_when>
    <thetext>The only thing remaining with this patch is to make custom accessors work again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124556</commentid>
    <comment_count>19</comment_count>
      <attachid>260836</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-08 22:39:52 -0700</bug_when>
    <thetext>Created attachment 260836
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124557</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-08 22:42:16 -0700</bug_when>
    <thetext>Attachment 260836 did not pass style-queue:


ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:560:  Declaration has space between type name and * in numberOfRegsForCall * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:629:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:677:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:840:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:870:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:919:  Use &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:936:  Use &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:964:  Use &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:979:  Use &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:988:  Use &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:989:  Use &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:1120:  Use &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.h:135:  The parameter name &quot;structure&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.h:135:  The parameter name &quot;offset&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.h:138:  The parameter name &quot;offset&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.h:147:  The parameter name &quot;structure&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.h:94:  The parameter name &quot;accessCase&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/jit/Repatch.cpp:305:  Use &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/JavaScriptCore/jit/Repatch.cpp:448:  Use &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/JavaScriptCore/jit/Repatch.cpp:506:  Use &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp:56:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.h:61:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:58:  Use &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:67:  Use &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:69:  Use &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:72:  Use &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
Total errors found: 26 in 23 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>1124558</commentid>
    <comment_count>21</comment_count>
      <attachid>260837</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-08 22:44:57 -0700</bug_when>
    <thetext>Created attachment 260837
the patch

Include my WTF changes as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124559</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-08 22:47:43 -0700</bug_when>
    <thetext>Attachment 260837 did not pass style-queue:


ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:560:  Declaration has space between type name and * in numberOfRegsForCall * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:629:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:677:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:840:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:870:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:919:  Use &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:936:  Use &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:964:  Use &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:979:  Use &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:988:  Use &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:989:  Use &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:1120:  Use &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.h:135:  The parameter name &quot;structure&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.h:135:  The parameter name &quot;offset&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.h:138:  The parameter name &quot;offset&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.h:147:  The parameter name &quot;structure&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.h:94:  The parameter name &quot;accessCase&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/jit/Repatch.cpp:305:  Use &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/JavaScriptCore/jit/Repatch.cpp:448:  Use &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/JavaScriptCore/jit/Repatch.cpp:506:  Use &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp:56:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.h:61:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:58:  Use &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:67:  Use &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:69:  Use &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:72:  Use &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
Total errors found: 26 in 25 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>1124654</commentid>
    <comment_count>23</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-09 12:21:37 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; Attachment 260837 [details] did not pass style-queue:
&gt; 
&gt; 
&gt; ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:560: 
&gt; Declaration has space between type name and * in numberOfRegsForCall *
&gt; sizeof  [whitespace/declaration] [3]

No.  That * is a multiply and not a pointer.

&gt; ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:629:  Place
&gt; brace on its own line for function definitions.  [whitespace/braces] [4]
&gt; ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:677:  Place
&gt; brace on its own line for function definitions.  [whitespace/braces] [4]
&gt; ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:840:  Place
&gt; brace on its own line for function definitions.  [whitespace/braces] [4]
&gt; ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:870:  Place
&gt; brace on its own line for function definitions.  [whitespace/braces] [4]

No.

&gt; ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:919:  Use
&gt; &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
&gt; ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:936:  Use
&gt; &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
&gt; ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:964:  Use
&gt; &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
&gt; ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:979:  Use
&gt; &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
&gt; ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:988:  Use
&gt; &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
&gt; ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:989:  Use
&gt; &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
&gt; ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:1120:  Use
&gt; &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]

Fixed.

&gt; ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.h:135:  The
&gt; parameter name &quot;structure&quot; adds no information, so it should be removed. 
&gt; [readability/parameter_name] [5]
&gt; ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.h:135:  The
&gt; parameter name &quot;offset&quot; adds no information, so it should be removed. 
&gt; [readability/parameter_name] [5]
&gt; ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.h:138:  The
&gt; parameter name &quot;offset&quot; adds no information, so it should be removed. 
&gt; [readability/parameter_name] [5]
&gt; ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.h:147:  The
&gt; parameter name &quot;structure&quot; adds no information, so it should be removed. 
&gt; [readability/parameter_name] [5]

Fixed.

&gt; ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.h:94:  The parameter
&gt; name &quot;accessCase&quot; adds no information, so it should be removed. 
&gt; [readability/parameter_name] [5]

Fixed.

&gt; ERROR: Source/JavaScriptCore/jit/Repatch.cpp:305:  Use &apos;WTF::move()&apos; instead
&gt; of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
&gt; ERROR: Source/JavaScriptCore/jit/Repatch.cpp:448:  Use &apos;WTF::move()&apos; instead
&gt; of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
&gt; ERROR: Source/JavaScriptCore/jit/Repatch.cpp:506:  Use &apos;WTF::move()&apos; instead
&gt; of &apos;std::move()&apos;.  [runtime/wtf_move] [4]

Fixed.

&gt; ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp:56:  Wrong
&gt; number of spaces before statement. (expected: 8)  [whitespace/indent] [4]

No.

&gt; ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.h:61:  The
&gt; parameter name &quot;value&quot; adds no information, so it should be removed. 
&gt; [readability/parameter_name] [5]

No.  The name &quot;value&quot; most definitely adds information here and should not be removed.

&gt; ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:58:  Use
&gt; &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
&gt; ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:67:  Use
&gt; &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
&gt; ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:69:  Use
&gt; &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
&gt; ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:72:  Use
&gt; &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]

Fixed.

&gt; Total errors found: 26 in 25 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against
&gt; check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124662</commentid>
    <comment_count>24</comment_count>
      <attachid>260868</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-09 12:52:34 -0700</bug_when>
    <thetext>Created attachment 260868
the patch

Fixed style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124663</commentid>
    <comment_count>25</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2015-09-09 12:55:21 -0700</bug_when>
    <thetext>This is way better than the old IC code. If I could r=me I would.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124664</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-09 12:55:31 -0700</bug_when>
    <thetext>Attachment 260868 did not pass style-queue:


ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:560:  Declaration has space between type name and * in numberOfRegsForCall * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:629:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:677:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:840:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:870:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp:56:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.h:61:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 7 in 25 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>1124679</commentid>
    <comment_count>27</comment_count>
      <attachid>260868</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2015-09-09 13:41:07 -0700</bug_when>
    <thetext>Comment on attachment 260868
the patch

Attachment 260868 did not pass mac-ews (mac):
Output: http://webkit-queues.webkit.org/results/155148

New failing tests:
fast/canvas/webgl/array-message-passing.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124680</commentid>
    <comment_count>28</comment_count>
      <attachid>260870</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2015-09-09 13:41:13 -0700</bug_when>
    <thetext>Created attachment 260870
Archive of layout-test-results from ews103 for mac-mavericks

The attached test failures were seen while running run-webkit-tests on the mac-ews.
Bot: ews103  Port: mac-mavericks  Platform: Mac OS X 10.9.5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124681</commentid>
    <comment_count>29</comment_count>
      <attachid>260868</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-09-09 13:43:31 -0700</bug_when>
    <thetext>Comment on attachment 260868
the patch

Mac EWS failure appears repeatable. There seems to be a bug here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124701</commentid>
    <comment_count>30</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-09 14:48:49 -0700</bug_when>
    <thetext>(In reply to comment #29)
&gt; Comment on attachment 260868 [details]
&gt; the patch
&gt; 
&gt; Mac EWS failure appears repeatable. There seems to be a bug here.

Yup, I&apos;m looking at it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124702</commentid>
    <comment_count>31</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-09 14:49:17 -0700</bug_when>
    <thetext>Performance right now.  Note that this is still crashy...


Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on shakezilla (MacBookPro11,3).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r189543)
&quot;NewPolyIC&quot; at /Volumes/Data/primary/OpenSource/WebKitBuild/Release/jsc (r189543)

Collected 7 samples per benchmark/VM, with 7 VM invocations per benchmark. Emitted a call to gc() between sample measurements.
Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to get microsecond-level
timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds.

                                                        TipOfTree                 NewPolyIC                                     
SunSpider:
   3d-cube                                            5.1075+-0.6560            4.7601+-0.3870          might be 1.0730x faster
   3d-morph                                           5.0320+-0.1400     ?      5.2651+-0.3521        ? might be 1.0463x slower
   3d-raytrace                                        4.9996+-0.0689     ?      5.0286+-0.0677        ?
   access-binary-trees                                2.2453+-0.5531            2.1274+-0.3070          might be 1.0554x faster
   access-fannkuch                                    5.3371+-0.1715            5.2975+-0.1321        
   access-nbody                                       2.4964+-0.1009            2.4405+-0.1112          might be 1.0229x faster
   access-nsieve                                      3.0154+-0.0434            3.0007+-0.1009        
   bitops-3bit-bits-in-byte                           1.1410+-0.0621            1.1209+-0.0541          might be 1.0180x faster
   bitops-bits-in-byte                                3.2891+-0.2005            3.2593+-0.0336        
   bitops-bitwise-and                                 1.9700+-0.0245     ?      2.0135+-0.1010        ? might be 1.0221x slower
   bitops-nsieve-bits                                 3.0685+-0.4055            2.9649+-0.1037          might be 1.0349x faster
   controlflow-recursive                              2.2236+-0.2178            2.1899+-0.1005          might be 1.0154x faster
   crypto-aes                                         3.7646+-0.0613     ?      4.1674+-0.6451        ? might be 1.1070x slower
   crypto-md5                                         2.3670+-0.0518            2.3224+-0.0700          might be 1.0192x faster
   crypto-sha1                                        2.4143+-0.2377            2.3173+-0.1680          might be 1.0419x faster
   date-format-tofte                                  7.0110+-0.5702            6.8600+-0.4968          might be 1.0220x faster
   date-format-xparb                                  4.5725+-0.1417     ?      4.8746+-0.5230        ? might be 1.0661x slower
   math-cordic                                        2.8699+-0.1687            2.8324+-0.1953          might be 1.0132x faster
   math-partial-sums                                  4.8574+-0.0635            4.7650+-0.1495          might be 1.0194x faster
   math-spectral-norm                                 1.7814+-0.0390     ?      1.8792+-0.2496        ? might be 1.0549x slower
   regexp-dna                                         6.3695+-0.0549     ?      6.4812+-0.2530        ? might be 1.0175x slower
   string-base64                                      4.3328+-0.1619     ?      4.5306+-0.3657        ? might be 1.0456x slower
   string-fasta                                       6.0422+-0.4884            5.7344+-0.1970          might be 1.0537x faster
   string-tagcloud                                    8.4223+-1.2020            7.6838+-0.0787          might be 1.0961x faster
   string-unpack-code                                18.6022+-0.6993           18.2919+-0.5691          might be 1.0170x faster
   string-validate-input                              4.4676+-0.1120     ?      4.5831+-0.1879        ? might be 1.0259x slower

   &lt;arithmetic&gt;                                       4.5308+-0.0818            4.4920+-0.0296          might be 1.0086x faster

                                                        TipOfTree                 NewPolyIC                                     
LongSpider:
   3d-cube                                          809.6053+-3.9580     ?    811.3845+-6.4851        ?
   3d-morph                                        1486.1304+-3.2766         1483.5084+-2.7493        
   3d-raytrace                                      597.8175+-3.1973     ?    598.3330+-2.8893        ?
   access-binary-trees                              795.7429+-6.7876     ?    800.4827+-2.3669        ?
   access-fannkuch                                  269.5301+-0.6699     ?    276.0987+-7.0337        ? might be 1.0244x slower
   access-nbody                                     507.9226+-0.4334     !    511.4803+-3.0121        ! definitely 1.0070x slower
   access-nsieve                                    365.9178+-10.6595         359.2681+-1.5470          might be 1.0185x faster
   bitops-3bit-bits-in-byte                          34.3169+-0.5829           34.2000+-0.8549        
   bitops-bits-in-byte                               75.1884+-2.0288     ?     75.6968+-1.6298        ?
   bitops-nsieve-bits                               401.9336+-4.8055          397.8354+-4.2023          might be 1.0103x faster
   controlflow-recursive                            418.9929+-6.7955          416.9046+-4.8172        
   crypto-aes                                       578.5614+-2.7896          575.3235+-1.8384        
   crypto-md5                                       491.3981+-10.7190         484.9644+-23.8053         might be 1.0133x faster
   crypto-sha1                                      626.8269+-12.6420         615.2220+-1.6506          might be 1.0189x faster
   date-format-tofte                                500.3375+-8.7373          498.4564+-6.3742        
   date-format-xparb                                660.9286+-10.5195    ?    676.7945+-59.0872       ? might be 1.0240x slower
   hash-map                                         165.9336+-3.0773          165.8269+-0.7891        
   math-cordic                                      475.5828+-2.4531     ?    477.7976+-3.4316        ?
   math-partial-sums                                459.8112+-0.8460     ?    460.2152+-0.5471        ?
   math-spectral-norm                               545.5664+-0.5491     ?    546.1919+-1.3176        ?
   string-base64                                    365.3368+-6.6264     ?    366.2951+-7.3312        ?
   string-fasta                                     359.3473+-1.7211     ?    362.2948+-2.2072        ?
   string-tagcloud                                  174.1983+-1.9124     ?    175.2374+-0.9227        ?

   &lt;geometric&gt;                                      387.1291+-0.9274     ?    387.2913+-1.7999        ? might be 1.0004x slower

                                                        TipOfTree                 NewPolyIC                                     
V8Spider:
   crypto                                            49.9816+-1.1614           49.0812+-1.1449          might be 1.0183x faster
   deltablue                                         85.0666+-3.0589     ?     86.6115+-2.9666        ? might be 1.0182x slower
   earley-boyer                                      40.8530+-1.4286     ?     41.3219+-0.8405        ? might be 1.0115x slower
   raytrace                                          31.8295+-2.1171           31.5521+-1.6879        
   regexp                                            63.0987+-1.7526           62.1826+-1.3531          might be 1.0147x faster
   richards                                          64.5601+-1.4575     ?     65.1003+-1.9806        ?
   splay                                             36.3726+-1.2844     ^     32.9393+-0.9570        ^ definitely 1.1042x faster

   &lt;geometric&gt;                                       50.3082+-0.6714           49.5827+-0.5999          might be 1.0146x faster

                                                        TipOfTree                 NewPolyIC                                     
Octane:
   encrypt                                           0.16804+-0.00333          0.16620+-0.00418         might be 1.0111x faster
   decrypt                                           3.25691+-0.01040          3.25420+-0.00595       
   deltablue                                x2       0.15740+-0.00105          0.15504+-0.00172         might be 1.0153x faster
   earley                                            0.28122+-0.00219          0.28094+-0.00112       
   boyer                                             4.25290+-0.02204    ?     4.25976+-0.01565       ?
   navier-stokes                            x2       4.82187+-0.05331          4.80793+-0.02086       
   raytrace                                 x2       1.00222+-0.03859    ^     0.90785+-0.01213       ^ definitely 1.1040x faster
   richards                                 x2       0.10629+-0.00107    ?     0.10702+-0.00142       ?
   splay                                    x2       0.33672+-0.01169          0.33314+-0.00487         might be 1.0107x faster
   regexp                                   x2      24.78739+-0.26856    ?    24.97754+-0.50844       ?
   pdfjs                                    x2      36.74056+-0.33416         36.52673+-0.31558       
   mandreel                                 x2      44.23978+-1.11454         44.09202+-0.99418       
   gbemu                                    x2      34.99170+-2.26470         33.87401+-0.17512         might be 1.0330x faster
   closure                                           0.56867+-0.00377          0.56740+-0.00296       
   jquery                                            7.04663+-0.05138    ?     7.11633+-0.17211       ?
   box2d                                    x2       9.85185+-0.03790    ?     9.97573+-0.10546       ? might be 1.0126x slower
   zlib                                     x2     374.49586+-17.12213   ?   384.25307+-9.31213       ? might be 1.0261x slower
   typescript                               x2     643.61314+-12.90819   ^   620.64286+-5.78507       ^ definitely 1.0370x faster

   &lt;geometric&gt;                                       5.55216+-0.03399    ^     5.49643+-0.00916       ^ definitely 1.0101x faster

                                                        TipOfTree                 NewPolyIC                                     
Kraken:
   ai-astar                                          220.708+-2.295            218.039+-1.637           might be 1.0122x faster
   audio-beat-detection                               50.623+-0.463             50.368+-0.483         
   audio-dft                                          96.257+-1.906             95.427+-1.555         
   audio-fft                                          35.381+-1.643             34.839+-0.236           might be 1.0155x faster
   audio-oscillator                                   60.669+-3.027             58.669+-0.363           might be 1.0341x faster
   imaging-darkroom                                   60.743+-0.321      ?      61.395+-1.836         ? might be 1.0107x slower
   imaging-desaturate                                 48.885+-0.322      ?      49.288+-0.351         ?
   imaging-gaussian-blur                              84.987+-0.446      ?      87.021+-4.687         ? might be 1.0239x slower
   json-parse-financial                               37.807+-0.479      ?      38.162+-1.391         ?
   json-stringify-tinderbox                           22.106+-0.313      !      24.894+-1.215         ! definitely 1.1262x slower
   stanford-crypto-aes                                41.385+-2.062             41.173+-1.384         
   stanford-crypto-ccm                                35.960+-1.493             35.695+-1.259         
   stanford-crypto-pbkdf2                             93.304+-0.343      ?      93.648+-0.678         ?
   stanford-crypto-sha256-iterative                   37.347+-1.565             36.838+-1.140           might be 1.0138x faster

   &lt;arithmetic&gt;                                       66.154+-0.465             66.104+-0.411           might be 1.0008x faster

                                                        TipOfTree                 NewPolyIC                                     
JSRegress:
   abc-forward-loop-equal                            29.4827+-0.3607     ?     29.7214+-1.0619        ?
   abc-postfix-backward-loop                         29.6307+-0.6166     ?     30.1094+-1.3583        ? might be 1.0162x slower
   abc-simple-backward-loop                          29.6631+-1.5155           29.3856+-1.5383        
   abc-simple-forward-loop                           30.0333+-1.6490           29.6564+-1.8017          might be 1.0127x faster
   abc-skippy-loop                                   21.0393+-0.4155     ?     21.4065+-0.2126        ? might be 1.0174x slower
   abs-boolean                                        2.4545+-0.1030     ?      2.4709+-0.0955        ?
   adapt-to-double-divide                            16.7863+-0.7291     ?     16.9810+-0.7255        ? might be 1.0116x slower
   aliased-arguments-getbyval                         1.1653+-0.0870     ?      1.1700+-0.0539        ?
   allocate-big-object                                2.4905+-0.0988     ?      2.6195+-0.5289        ? might be 1.0518x slower
   arguments-named-and-reflective                    11.1848+-0.8763           10.9711+-0.4680          might be 1.0195x faster
   arguments-out-of-bounds                            9.3388+-0.3065            9.2277+-0.5527          might be 1.0120x faster
   arguments-strict-mode                              9.7055+-0.6204            9.6486+-0.9985        
   arguments                                          8.4119+-0.3836            8.2973+-0.3068          might be 1.0138x faster
   arity-mismatch-inlining                            0.8235+-0.0221     ?      0.8588+-0.0653        ? might be 1.0429x slower
   array-access-polymorphic-structure                 5.7975+-0.1120     ?      5.8343+-0.1597        ?
   array-nonarray-polymorhpic-access                 24.5723+-0.6498           23.7154+-0.6516          might be 1.0361x faster
   array-prototype-every                             75.6078+-2.1788           75.3799+-1.3309        
   array-prototype-forEach                           74.7404+-2.0104           73.9970+-1.0558          might be 1.0100x faster
   array-prototype-map                               79.8269+-0.7447     ?     80.4953+-1.0972        ?
   array-prototype-reduce                            70.2274+-0.9570     ?     70.7728+-1.4600        ?
   array-prototype-reduceRight                       70.3583+-1.4368     ?     71.2870+-1.9813        ? might be 1.0132x slower
   array-prototype-some                              75.3365+-1.0169           74.6313+-1.6556        
   array-splice-contiguous                           21.2718+-0.5439     ?     22.0295+-2.1383        ? might be 1.0356x slower
   array-with-double-add                              3.4384+-0.1577     ?      3.4623+-0.1650        ?
   array-with-double-increment                        3.0944+-0.1125     ?      3.1009+-0.1789        ?
   array-with-double-mul-add                          4.2584+-0.1057            4.1370+-0.0455          might be 1.0293x faster
   array-with-double-sum                              3.2586+-0.1650            3.1237+-0.0164          might be 1.0432x faster
   array-with-int32-add-sub                           5.6055+-0.0613     ?      5.6932+-0.1773        ? might be 1.0156x slower
   array-with-int32-or-double-sum                     3.2460+-0.1880     ?      3.3141+-0.1697        ? might be 1.0210x slower
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     25.6887+-0.8838     ?     27.1256+-1.8324        ? might be 1.0559x slower
   ArrayBuffer-DataView-alloc-long-lived             11.8639+-0.3817           11.7981+-0.4534        
   ArrayBuffer-Int32Array-byteOffset                  3.5019+-0.0763            3.4851+-0.1207        
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     30.8180+-1.7967           30.3651+-0.6900          might be 1.0149x faster
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     20.2607+-0.4183     ?     21.3177+-1.0934        ? might be 1.0522x slower
   ArrayBuffer-Int8Array-alloc-long-lived            12.3179+-0.5055     ?     12.3189+-0.7590        ?
   ArrayBuffer-Int8Array-alloc                        9.4633+-0.3967     ?      9.5524+-0.5062        ?
   arrowfunction-call                                 9.9027+-0.1601            9.8614+-0.1317        
   asmjs_bool_bug                                     7.4319+-0.1969     ?      7.5542+-0.3540        ? might be 1.0165x slower
   assign-custom-setter-polymorphic                   2.3085+-0.0628     ?      2.4720+-0.1520        ? might be 1.0708x slower
   assign-custom-setter                               3.1340+-0.0494     ?      3.2322+-0.0788        ? might be 1.0313x slower
   basic-set                                          7.1469+-0.2058     ?      7.3257+-0.6986        ? might be 1.0250x slower
   big-int-mul                                        3.4082+-0.0546     ?      3.4494+-0.0893        ? might be 1.0121x slower
   boolean-test                                       2.8813+-0.0639     ?      2.8881+-0.0213        ?
   branch-fold                                        3.6698+-0.1719     ?      3.6754+-0.2311        ?
   branch-on-string-as-boolean                       17.5798+-0.8557           17.3710+-0.5012          might be 1.0120x faster
   by-val-generic                                     2.4084+-0.3337            2.3033+-0.1229          might be 1.0456x faster
   call-spread-apply                                 26.0063+-0.5907           25.9428+-0.6743        
   call-spread-call                                  21.3142+-0.7482           20.8861+-0.5101          might be 1.0205x faster
   captured-assignments                               0.4110+-0.0227     ?      0.4518+-0.0612        ? might be 1.0992x slower
   cast-int-to-double                                 5.0475+-0.1328            4.9980+-0.0883        
   cell-argument                                      6.5038+-0.3804            6.2392+-0.1884          might be 1.0424x faster
   cfg-simplify                                       2.8218+-0.0845     ?      2.9031+-0.2099        ? might be 1.0288x slower
   chain-getter-access                                8.4399+-0.2094            8.2271+-0.1312          might be 1.0259x faster
   cmpeq-obj-to-obj-other                            12.1866+-0.8155     ?     12.3672+-1.6706        ? might be 1.0148x slower
   constant-test                                      4.7427+-0.1635            4.7312+-0.0727        
   create-lots-of-functions                           9.6595+-0.8759            9.2115+-0.3716          might be 1.0486x faster
   cse-new-array-buffer                               2.2253+-0.1311            2.1706+-0.0901          might be 1.0252x faster
   cse-new-array                                      3.0022+-1.7512            2.2514+-0.0941          might be 1.3335x faster
   DataView-custom-properties                        31.1648+-1.5371           31.1243+-1.4138        
   delay-tear-off-arguments-strictmode               12.6584+-0.7602           12.3959+-0.4637          might be 1.0212x faster
   deltablue-varargs                                160.8017+-3.5139          158.3215+-1.9129          might be 1.0157x faster
   destructuring-arguments                          163.3447+-1.9397     ?    163.5504+-0.7293        ?
   destructuring-parameters-overridden-by-function   
                                                      0.4329+-0.0084     ?      0.4902+-0.0569        ? might be 1.1323x slower
   destructuring-swap                                 4.6838+-0.1550            4.6820+-0.0711        
   direct-arguments-getbyval                          1.1636+-0.0629            1.1052+-0.0339          might be 1.0529x faster
   div-boolean-double                                 5.3056+-0.1568     ?      5.3097+-0.0885        ?
   div-boolean                                        8.1618+-0.2975            8.0997+-0.1364        
   double-get-by-val-out-of-bounds                    4.1674+-0.2641            4.0087+-0.0847          might be 1.0396x faster
   double-pollution-getbyval                          8.7495+-0.3360     ?      8.8559+-0.3579        ? might be 1.0122x slower
   double-pollution-putbyoffset                       3.6738+-0.1738     ?      3.7230+-0.1902        ? might be 1.0134x slower
   double-real-use                                   24.7588+-1.1652     ?     25.3221+-1.8578        ? might be 1.0228x slower
   double-to-int32-typed-array-no-inline              2.0026+-0.0974            1.9776+-0.0662          might be 1.0126x faster
   double-to-int32-typed-array                        1.7745+-0.0364            1.7645+-0.0675        
   double-to-uint32-typed-array-no-inline             2.0896+-0.1457     ?      2.1373+-0.2807        ? might be 1.0228x slower
   double-to-uint32-typed-array                       1.8732+-0.1104     ?      1.9479+-0.1478        ? might be 1.0399x slower
   elidable-new-object-dag                           35.0045+-1.2805           34.1770+-0.9491          might be 1.0242x faster
   elidable-new-object-roflcopter                    32.9935+-0.5720     ?     33.2759+-1.1725        ?
   elidable-new-object-then-call                     33.1413+-1.8925           32.1100+-1.8914          might be 1.0321x faster
   elidable-new-object-tree                          37.6701+-1.6256           37.6440+-1.4968        
   empty-string-plus-int                              4.7306+-0.1397            4.6538+-0.1667          might be 1.0165x faster
   emscripten-cube2hash                              27.5827+-0.6800           27.3231+-2.0532        
   exit-length-on-plain-object                       13.0200+-0.9690     ?     13.4278+-1.4707        ? might be 1.0313x slower
   external-arguments-getbyval                        1.1794+-0.0345     ?      1.2119+-0.1175        ? might be 1.0276x slower
   external-arguments-putbyval                        2.3375+-0.4381            2.1752+-0.1324          might be 1.0746x faster
   fixed-typed-array-storage-var-index                1.2962+-0.3603            1.1784+-0.0874          might be 1.0999x faster
   fixed-typed-array-storage                          0.8849+-0.0832            0.8592+-0.0678          might be 1.0298x faster
   Float32Array-matrix-mult                           3.8473+-0.1124     ?      4.0200+-0.4307        ? might be 1.0449x slower
   Float32Array-to-Float64Array-set                  46.3595+-0.5574     ?     47.1399+-1.5388        ? might be 1.0168x slower
   Float64Array-alloc-long-lived                     70.0729+-1.7150     ?     70.2935+-2.2537        ?
   Float64Array-to-Int16Array-set                    56.6025+-1.0564           55.4960+-0.9563          might be 1.0199x faster
   fold-double-to-int                                12.1222+-0.5848     ?     12.1606+-0.5593        ?
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     11.3149+-1.1291     ?     12.1633+-1.0000        ? might be 1.0750x slower
   fold-get-by-id-to-multi-get-by-offset             10.0302+-0.6417     ?     10.3791+-0.4443        ? might be 1.0348x slower
   fold-multi-get-by-offset-to-get-by-offset   
                                                      9.0641+-0.8956            8.7765+-1.5193          might be 1.0328x faster
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      7.9405+-0.9065            7.7867+-1.1706          might be 1.0197x faster
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      8.4993+-0.6274     ?      9.3335+-0.2343        ? might be 1.0981x slower
   fold-multi-put-by-offset-to-put-by-offset   
                                                      4.1995+-0.5731     ?      4.6303+-0.7585        ? might be 1.1026x slower
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                      8.7965+-0.8589     ?      9.6766+-0.4680        ? might be 1.1001x slower
   fold-put-by-id-to-multi-put-by-offset             11.4880+-1.1559     ?     12.0700+-1.1159        ? might be 1.0507x slower
   fold-put-by-val-with-string-to-multi-put-by-offset   
                                                     10.8771+-0.9090     ?     11.3743+-1.1234        ? might be 1.0457x slower
   fold-put-by-val-with-symbol-to-multi-put-by-offset   
                                                     10.1823+-1.5338     ?     10.6002+-0.7861        ? might be 1.0410x slower
   fold-put-structure                                 4.3298+-0.3623     ?      4.5824+-1.0212        ? might be 1.0584x slower
   for-of-iterate-array-entries                      11.4380+-0.5785     ?     11.4420+-0.4518        ?
   for-of-iterate-array-keys                          3.6518+-0.1785     ?      3.6953+-0.1593        ? might be 1.0119x slower
   for-of-iterate-array-values                        3.7957+-0.4072            3.6401+-0.2064          might be 1.0428x faster
   fround                                            17.8805+-0.4461           17.6460+-0.3801          might be 1.0133x faster
   ftl-library-inlining-dataview                     56.1237+-0.7259           55.9549+-1.0552        
   ftl-library-inlining                              95.2243+-1.2162     ?     95.7191+-0.8219        ?
   function-call                                      9.9362+-0.2223     ?     10.0033+-0.2136        ?
   function-dot-apply                                 2.0926+-0.2486            1.9850+-0.1146          might be 1.0542x faster
   function-test                                      2.7679+-0.1756     ?      2.8648+-0.2638        ? might be 1.0350x slower
   function-with-eval                                99.6352+-1.8479     ?    103.5155+-3.2789        ? might be 1.0389x slower
   gcse-poly-get-less-obvious                        14.6280+-1.0409     !     18.5351+-0.1695        ! definitely 1.2671x slower
   gcse-poly-get                                     15.8617+-0.3204     !     22.0256+-0.7602        ! definitely 1.3886x slower
   gcse                                               3.7969+-0.0446     ?      3.9950+-0.3145        ? might be 1.0522x slower
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.6593+-0.1735            2.6546+-0.1860        
   get-by-id-bimorphic-check-structure-elimination   
                                                      5.7222+-0.1640     ?      5.7434+-0.3457        ?
   get-by-id-chain-from-try-block                     5.5054+-0.2768            5.4199+-0.1691          might be 1.0158x faster
   get-by-id-check-structure-elimination              4.4006+-0.0694     ?      4.4429+-0.0514        ?
   get-by-id-proto-or-self                           14.6330+-0.2818     ?     15.3632+-0.5265        ? might be 1.0499x slower
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      2.8511+-0.0585     ?      3.1593+-0.6173        ? might be 1.1081x slower
   get-by-id-self-or-proto                           15.4144+-0.6034     ?     15.5662+-0.6628        ?
   get-by-val-out-of-bounds                           3.9080+-0.1952     ?      3.9112+-0.1101        ?
   get-by-val-with-string-bimorphic-check-structure-elimination-simple   
                                                      2.7396+-0.0404     ?      2.7494+-0.0252        ?
   get-by-val-with-string-bimorphic-check-structure-elimination   
                                                      5.9702+-0.0997     ?      6.0829+-0.1680        ? might be 1.0189x slower
   get-by-val-with-string-chain-from-try-block   
                                                      5.6085+-0.1841     ?      5.7550+-0.3724        ? might be 1.0261x slower
   get-by-val-with-string-check-structure-elimination   
                                                      5.0995+-0.0827     ?      5.1159+-0.1757        ?
   get-by-val-with-string-proto-or-self              15.0379+-0.5903     ?     15.6604+-1.4231        ? might be 1.0414x slower
   get-by-val-with-string-quadmorphic-check-structure-elimination-simple   
                                                      3.3245+-0.0528            3.3037+-0.0604        
   get-by-val-with-string-self-or-proto              15.7241+-1.2060           15.6344+-0.8814        
   get-by-val-with-symbol-bimorphic-check-structure-elimination-simple   
                                                      3.1130+-0.1016     ?      3.2099+-0.3127        ? might be 1.0311x slower
   get-by-val-with-symbol-bimorphic-check-structure-elimination   
                                                     12.6816+-0.6539     ?     12.9689+-1.4128        ? might be 1.0227x slower
   get-by-val-with-symbol-chain-from-try-block   
                                                      5.4856+-0.0685     ?      5.5936+-0.1470        ? might be 1.0197x slower
   get-by-val-with-symbol-check-structure-elimination   
                                                     11.1132+-0.3332           11.0871+-0.2499        
   get-by-val-with-symbol-proto-or-self              14.8131+-0.9009     ?     15.9215+-0.7395        ? might be 1.0748x slower
   get-by-val-with-symbol-quadmorphic-check-structure-elimination-simple   
                                                      3.7819+-0.3031     ?      3.9305+-0.3500        ? might be 1.0393x slower
   get-by-val-with-symbol-self-or-proto              15.6397+-0.8039           15.4517+-0.8269          might be 1.0122x faster
   get_callee_monomorphic                             2.5271+-0.4456            2.4854+-0.4470          might be 1.0168x faster
   get_callee_polymorphic                             3.2113+-0.0466     ?      3.3606+-0.2072        ? might be 1.0465x slower
   getter-no-activation                               4.7807+-0.2564            4.7502+-0.1712        
   getter-prototype                                   8.9587+-0.1583            8.7340+-0.2325          might be 1.0257x faster
   getter-richards                                  117.7746+-4.1061          116.6130+-8.2667        
   getter                                             5.7845+-0.7333     ?      5.9121+-0.7352        ? might be 1.0221x slower
   global-object-access-with-mutating-structure   
                                                      5.7900+-0.2680            5.7549+-0.4126        
   global-var-const-infer-fire-from-opt               0.8838+-0.2711            0.7825+-0.0514          might be 1.1294x faster
   global-var-const-infer                             0.6185+-0.0349            0.5904+-0.0162          might be 1.0476x faster
   hard-overflow-check-equal                         32.8856+-0.8859     ?     33.4152+-1.2498        ? might be 1.0161x slower
   hard-overflow-check                               32.8915+-1.3756           32.6631+-0.8393        
   HashMap-put-get-iterate-keys                      27.3347+-2.0865           25.5123+-1.5986          might be 1.0714x faster
   HashMap-put-get-iterate                           28.9101+-0.9982           28.0691+-1.0667          might be 1.0300x faster
   HashMap-string-put-get-iterate                    25.2002+-2.8351     ?     25.5573+-1.9905        ? might be 1.0142x slower
   hoist-make-rope                                    9.6164+-1.4235            8.7898+-0.6416          might be 1.0940x faster
   hoist-poly-check-structure-effectful-loop   
                                                      4.1336+-0.2317            4.0438+-0.0691          might be 1.0222x faster
   hoist-poly-check-structure                         3.2937+-0.1567            3.2393+-0.0520          might be 1.0168x faster
   imul-double-only                                   7.3452+-0.3659     ?      7.3872+-0.6378        ?
   imul-int-only                                      8.3098+-0.7673     ?      8.7393+-0.7817        ? might be 1.0517x slower
   imul-mixed                                         6.9233+-0.4298     ?      7.2306+-0.4539        ? might be 1.0444x slower
   in-four-cases                                     16.7223+-0.8025     ?     16.8579+-0.4346        ?
   in-one-case-false                                  9.9339+-0.6650     ?     10.1345+-0.7628        ? might be 1.0202x slower
   in-one-case-true                                  10.1658+-0.9222           10.0036+-0.7543          might be 1.0162x faster
   in-two-cases                                      10.1089+-0.6008           10.0869+-0.1110        
   indexed-properties-in-objects                      2.7484+-0.0475            2.7461+-0.1446        
   infer-closure-const-then-mov-no-inline             3.0143+-0.0541            3.0020+-0.0518        
   infer-closure-const-then-mov                      18.4009+-0.3867           18.0909+-0.6086          might be 1.0171x faster
   infer-closure-const-then-put-to-scope-no-inline   
                                                      9.8418+-0.1087     ?     10.2132+-0.4056        ? might be 1.0377x slower
   infer-closure-const-then-put-to-scope             22.8895+-0.3485           22.7981+-1.1854        
   infer-closure-const-then-reenter-no-inline   
                                                     45.1586+-1.7685     ?     45.1716+-0.9921        ?
   infer-closure-const-then-reenter                  22.5262+-1.0363           22.4987+-1.3555        
   infer-constant-global-property                     3.4619+-0.1626            3.4513+-0.0970        
   infer-constant-property                            2.5834+-0.0617     ?      2.6789+-0.2906        ? might be 1.0369x slower
   infer-one-time-closure-ten-vars                    7.7796+-0.4251     ?      7.8540+-0.3811        ?
   infer-one-time-closure-two-vars                    7.2216+-0.2799     ?      7.3160+-0.1708        ? might be 1.0131x slower
   infer-one-time-closure                             7.1757+-0.4528     ?      7.3222+-0.3630        ? might be 1.0204x slower
   infer-one-time-deep-closure                       11.0037+-0.5622           10.9153+-0.7444        
   inline-arguments-access                            3.6974+-0.2989            3.6600+-0.2197          might be 1.0102x faster
   inline-arguments-aliased-access                    3.8458+-0.3684            3.5640+-0.1185          might be 1.0791x faster
   inline-arguments-local-escape                      3.7261+-0.2094            3.5614+-0.1142          might be 1.0463x faster
   inline-get-scoped-var                              4.4755+-0.1321            4.4322+-0.0752        
   inlined-put-by-id-transition                      10.8137+-1.3723            9.2073+-0.4570          might be 1.1745x faster
   inlined-put-by-val-with-string-transition   
                                                     72.6438+-3.9758     ^     41.2424+-1.8262        ^ definitely 1.7614x faster
   inlined-put-by-val-with-symbol-transition   
                                                     70.3780+-0.9152     ^     41.2326+-1.3954        ^ definitely 1.7069x faster
   int-or-other-abs-then-get-by-val                   4.0519+-0.0428     ?      4.1366+-0.0680        ? might be 1.0209x slower
   int-or-other-abs-zero-then-get-by-val             15.5216+-0.4210     ?     15.7687+-0.6526        ? might be 1.0159x slower
   int-or-other-add-then-get-by-val                   4.0375+-0.1783     ?      4.1189+-0.2410        ? might be 1.0202x slower
   int-or-other-add                                   4.7487+-0.0704     ?      5.0979+-0.3345        ? might be 1.0735x slower
   int-or-other-div-then-get-by-val                   3.6810+-0.0604     ?      3.7524+-0.0819        ? might be 1.0194x slower
   int-or-other-max-then-get-by-val                   3.8418+-0.4812            3.7259+-0.1553          might be 1.0311x faster
   int-or-other-min-then-get-by-val                   3.8742+-0.4322            3.7784+-0.1025          might be 1.0254x faster
   int-or-other-mod-then-get-by-val                   3.4543+-0.0678            3.4169+-0.0500          might be 1.0110x faster
   int-or-other-mul-then-get-by-val                   3.5915+-0.0901     ?      3.9361+-0.6230        ? might be 1.0960x slower
   int-or-other-neg-then-get-by-val                   3.8596+-0.1058     ?      3.8797+-0.1669        ?
   int-or-other-neg-zero-then-get-by-val             15.3652+-0.3771     ?     15.4408+-0.5653        ?
   int-or-other-sub-then-get-by-val                   4.1926+-0.3401            4.0048+-0.0705          might be 1.0469x faster
   int-or-other-sub                                   3.4665+-0.1053            3.3845+-0.0612          might be 1.0242x faster
   int-overflow-local                                 3.9411+-0.0235     ?      3.9579+-0.0802        ?
   Int16Array-alloc-long-lived                       45.9919+-0.7681     ?     47.9485+-1.3440        ? might be 1.0425x slower
   Int16Array-bubble-sort-with-byteLength            17.8592+-1.2230           17.5242+-0.1616          might be 1.0191x faster
   Int16Array-bubble-sort                            18.0943+-0.5513           18.0746+-0.3566        
   Int16Array-load-int-mul                            1.4037+-0.0497     ?      1.4344+-0.0537        ? might be 1.0219x slower
   Int16Array-to-Int32Array-set                      43.8099+-0.8927     ?     43.9587+-2.0841        ?
   Int32Array-alloc-large                            12.1019+-0.6316     ?     12.9754+-0.9018        ? might be 1.0722x slower
   Int32Array-alloc-long-lived                       54.9708+-1.5492     ?     55.0248+-1.7429        ?
   Int32Array-alloc                                   2.7409+-0.2002     ?      2.8403+-0.3071        ? might be 1.0363x slower
   Int32Array-Int8Array-view-alloc                    6.0284+-0.2558            5.9403+-0.1909          might be 1.0148x faster
   int52-spill                                        4.4882+-0.0504     ?      4.5686+-0.2015        ? might be 1.0179x slower
   Int8Array-alloc-long-lived                        41.9918+-1.9272           40.2285+-0.6346          might be 1.0438x faster
   Int8Array-load-with-byteLength                     3.4107+-0.2222            3.3640+-0.0625          might be 1.0139x faster
   Int8Array-load                                     3.4136+-0.1107     ?      3.7002+-0.2579        ? might be 1.0840x slower
   integer-divide                                    10.2019+-0.0709     ?     10.2446+-0.1389        ?
   integer-modulo                                     1.5895+-0.1275     ?      1.6460+-0.2057        ? might be 1.0355x slower
   is-boolean-fold-tricky                             3.6218+-0.0667     ?      3.6294+-0.0959        ?
   is-boolean-fold                                    2.6307+-0.0247            2.5876+-0.0319          might be 1.0166x faster
   is-function-fold-tricky-internal-function   
                                                      9.7915+-0.3773            9.6386+-0.2522          might be 1.0159x faster
   is-function-fold-tricky                            3.9284+-0.4679            3.8539+-0.3927          might be 1.0193x faster
   is-function-fold                                   2.6281+-0.0550     ?      2.6617+-0.0556        ? might be 1.0128x slower
   is-number-fold-tricky                              3.7077+-0.1273            3.6167+-0.0301          might be 1.0252x faster
   is-number-fold                                     2.6107+-0.0589     ?      2.6112+-0.0173        ?
   is-object-or-null-fold-functions                   2.6446+-0.0252            2.6436+-0.0501        
   is-object-or-null-fold-less-tricky                 3.7839+-0.2444            3.6847+-0.0579          might be 1.0269x faster
   is-object-or-null-fold-tricky                      4.4562+-0.0918     ?      4.4773+-0.0621        ?
   is-object-or-null-fold                             2.6464+-0.0267     ?      2.6594+-0.0776        ?
   is-object-or-null-trickier-function                3.7288+-0.0879     ?      3.7503+-0.0620        ?
   is-object-or-null-trickier-internal-function   
                                                      9.6041+-0.1733     ?      9.8485+-0.1326        ? might be 1.0254x slower
   is-object-or-null-tricky-function                  3.8137+-0.1850            3.7094+-0.0712          might be 1.0281x faster
   is-object-or-null-tricky-internal-function   
                                                      7.1667+-0.1232     ?      7.2501+-0.0671        ? might be 1.0116x slower
   is-string-fold-tricky                              3.6298+-0.0525     ?      3.6428+-0.0851        ?
   is-string-fold                                     2.5950+-0.0550            2.5923+-0.0510        
   is-undefined-fold-tricky                           2.8072+-0.0262     ?      3.0736+-0.5586        ? might be 1.0949x slower
   is-undefined-fold                                  2.6684+-0.1452            2.6371+-0.0301          might be 1.0119x faster
   JSONP-negative-0                                   0.2512+-0.0307     ?      0.2543+-0.0186        ? might be 1.0124x slower
   large-int-captured                                 3.9194+-0.2470            3.7739+-0.1667          might be 1.0386x faster
   large-int-neg                                     13.9124+-0.2626     ?     14.0268+-0.5026        ?
   large-int                                         12.9276+-0.2431     ?     13.3826+-0.6343        ? might be 1.0352x slower
   load-varargs-elimination                          20.7050+-0.6937     ?     20.9970+-1.5988        ? might be 1.0141x slower
   logical-not-weird-types                            2.7457+-0.0355     ?      2.8655+-0.1192        ? might be 1.0436x slower
   logical-not                                        3.8721+-0.0980     ?      4.0562+-0.3533        ? might be 1.0475x slower
   lots-of-fields                                     8.4889+-0.1485     ?      8.8735+-0.3558        ? might be 1.0453x slower
   make-indexed-storage                               2.8316+-0.1228            2.7818+-0.0519          might be 1.0179x faster
   make-rope-cse                                      3.8218+-0.5091            3.5540+-0.0738          might be 1.0753x faster
   marsaglia-larger-ints                             31.5935+-0.4695     ?     31.9410+-1.1375        ? might be 1.0110x slower
   marsaglia-osr-entry                               21.3730+-0.6321           20.9876+-0.3617          might be 1.0184x faster
   math-with-out-of-bounds-array-values              21.8956+-0.7243     ?     22.1317+-1.2004        ? might be 1.0108x slower
   max-boolean                                        2.7966+-0.4559            2.6514+-0.0654          might be 1.0548x faster
   method-on-number                                  17.5921+-2.3271           16.1689+-0.9431          might be 1.0880x faster
   min-boolean                                        2.5912+-0.0596     ?      2.6452+-0.0487        ? might be 1.0208x slower
   minus-boolean-double                               3.0644+-0.0229     ?      3.1033+-0.0781        ? might be 1.0127x slower
   minus-boolean                                      2.3256+-0.0849     ?      2.3626+-0.0771        ? might be 1.0159x slower
   misc-strict-eq                                    27.5782+-0.6645     ?     28.5178+-1.9061        ? might be 1.0341x slower
   mod-boolean-double                                11.0269+-0.3246           10.9732+-0.0827        
   mod-boolean                                        8.2103+-0.0451     ?      8.3065+-0.1911        ? might be 1.0117x slower
   mul-boolean-double                                 3.6419+-0.1250     ?      3.7218+-0.2017        ? might be 1.0219x slower
   mul-boolean                                        2.8734+-0.1285            2.8043+-0.0723          might be 1.0247x faster
   neg-boolean                                        3.1650+-0.1830            3.0705+-0.0554          might be 1.0308x faster
   negative-zero-divide                               0.3574+-0.0606            0.3281+-0.0047          might be 1.0894x faster
   negative-zero-modulo                               0.3252+-0.0039     ?      0.3497+-0.0410        ? might be 1.0756x slower
   negative-zero-negate                               0.4047+-0.2153            0.3241+-0.0176          might be 1.2485x faster
   nested-function-parsing                           44.4465+-0.7348     ?     44.5638+-0.7258        ?
   new-array-buffer-dead                             89.0078+-1.7278           87.2928+-1.0476          might be 1.0196x faster
   new-array-buffer-push                              6.4101+-0.7057            6.0497+-0.3552          might be 1.0596x faster
   new-array-dead                                    15.4235+-1.2700           15.2636+-0.9277          might be 1.0105x faster
   new-array-push                                     3.5560+-0.4794            3.3837+-0.2020          might be 1.0509x faster
   no-inline-constructor                             32.0130+-1.6072     ?     33.0959+-1.8180        ? might be 1.0338x slower
   number-test                                        3.1161+-0.6992            3.0123+-0.3902          might be 1.0344x faster
   object-closure-call                                5.1105+-0.0520            5.0861+-0.0664        
   object-get-own-property-symbols-on-large-array   
                                                      4.1708+-0.3296            4.1292+-0.2494          might be 1.0101x faster
   object-test                                        2.7287+-0.1827            2.6386+-0.0463          might be 1.0341x faster
   obvious-sink-pathology-taken                      98.7021+-1.4791     ?     99.0081+-1.1866        ?
   obvious-sink-pathology                            93.5946+-1.4385     ?     94.3019+-1.0521        ?
   obviously-elidable-new-object                     29.6667+-1.7614           29.5003+-1.9391        
   plus-boolean-arith                                 2.3333+-0.0510     ?      2.3924+-0.0567        ? might be 1.0254x slower
   plus-boolean-double                                3.1956+-0.1133            3.0765+-0.0539          might be 1.0387x faster
   plus-boolean                                       2.6000+-0.1819            2.4764+-0.0548          might be 1.0499x faster
   poly-chain-access-different-prototypes-simple   
                                                      3.2030+-0.0531     ?      3.4128+-0.1765        ? might be 1.0655x slower
   poly-chain-access-different-prototypes             3.2477+-0.1094     ?      3.2568+-0.0385        ?
   poly-chain-access-simpler                          3.3506+-0.4195     ?      3.4652+-0.0766        ? might be 1.0342x slower
   poly-chain-access                                  3.2027+-0.0381     ?      3.3022+-0.0802        ? might be 1.0311x slower
   poly-stricteq                                     50.5701+-2.4948     ?     50.9478+-2.2033        ?
   polymorphic-array-call                             1.2616+-0.1126                ERROR             
   polymorphic-get-by-id                              2.8157+-0.1135     ?      2.8413+-0.0797        ?
   polymorphic-put-by-id                             24.7850+-1.0770     !     28.5172+-0.6276        ! definitely 1.1506x slower
   polymorphic-put-by-val-with-string                25.0303+-0.8124     !     29.5797+-1.7070        ! definitely 1.1818x slower
   polymorphic-put-by-val-with-symbol                25.5333+-1.2361     !     27.6089+-0.3341        ! definitely 1.0813x slower
   polymorphic-structure                             12.9117+-0.3324     ?     13.0308+-0.5017        ?
   polyvariant-monomorphic-get-by-id                  6.3628+-0.8938     ?      7.3165+-1.2692        ? might be 1.1499x slower
   proto-getter-access                                8.2995+-0.2186     ?      8.3900+-0.2011        ? might be 1.0109x slower
   prototype-access-with-mutating-prototype           5.3836+-0.0769     ?      5.4852+-0.1530        ? might be 1.0189x slower
   put-by-id-replace-and-transition                   7.8712+-0.6463            7.5909+-0.3264          might be 1.0369x faster
   put-by-id-slightly-polymorphic                     2.6514+-0.1192     ?      2.7445+-0.1776        ? might be 1.0351x slower
   put-by-id                                          9.5186+-0.4856     ?      9.5272+-0.3246        ?
   put-by-val-direct                                  0.4873+-0.2740            0.3386+-0.0210          might be 1.4395x faster
   put-by-val-large-index-blank-indexing-type   
                                                      5.1635+-0.2846     ?      5.4386+-0.6054        ? might be 1.0533x slower
   put-by-val-machine-int                             2.4363+-0.1803            2.4097+-0.1703          might be 1.0110x faster
   put-by-val-with-string-replace-and-transition   
                                                      9.7352+-0.0957     ?     10.2951+-0.6629        ? might be 1.0575x slower
   put-by-val-with-string-slightly-polymorphic   
                                                      2.9011+-0.1494            2.8328+-0.0399          might be 1.0241x faster
   put-by-val-with-string                            10.2152+-0.5029     ?     10.2219+-0.4663        ?
   put-by-val-with-symbol-replace-and-transition   
                                                     11.5022+-0.4566     ?     12.0575+-0.9607        ? might be 1.0483x slower
   put-by-val-with-symbol-slightly-polymorphic   
                                                      3.1166+-0.0834            3.1126+-0.0678        
   put-by-val-with-symbol                            11.0364+-0.5235           10.2553+-0.5247          might be 1.0762x faster
   rare-osr-exit-on-local                            13.4074+-0.1971     ?     13.9234+-0.7151        ? might be 1.0385x slower
   register-pressure-from-osr                        16.4147+-0.4987     ?     16.5071+-0.4117        ?
   repeat-multi-get-by-offset                        20.7601+-0.2696     ?     20.9120+-0.7323        ?
   setter-prototype                                   7.6626+-0.2313     ?      7.6734+-0.2092        ?
   setter                                             5.5045+-0.4129            5.4978+-0.4401        
   simple-activation-demo                            24.3068+-0.4168     ?     24.4869+-0.8986        ?
   simple-getter-access                              10.6019+-0.2463           10.5633+-0.2311        
   simple-poly-call-nested                            8.4321+-0.7550            8.2975+-0.8184          might be 1.0162x faster
   simple-poly-call                                   1.1296+-0.0323            1.1294+-0.0291        
   sin-boolean                                       20.6144+-1.8443     ?     21.0148+-1.8351        ? might be 1.0194x slower
   singleton-scope                                   55.0364+-1.1251     ?     55.4321+-0.9536        ?
   sink-function                                      9.8300+-0.4396     ?     10.3881+-1.2097        ? might be 1.0568x slower
   sink-huge-activation                              16.1642+-1.2933     ?     17.0401+-0.7199        ? might be 1.0542x slower
   sinkable-new-object-dag                           55.5725+-1.5707           54.5355+-1.3000          might be 1.0190x faster
   sinkable-new-object-taken                         43.5704+-1.5172           43.5632+-0.9638        
   sinkable-new-object                               29.4796+-0.3823     ?     29.6930+-0.3820        ?
   slow-array-profile-convergence                     2.3567+-0.0810     ?      2.3761+-0.0334        ?
   slow-convergence                                   2.2894+-0.0625            2.2575+-0.0461          might be 1.0142x faster
   slow-ternaries                                    17.5651+-0.4812           17.2562+-0.3153          might be 1.0179x faster
   sorting-benchmark                                 16.8188+-0.2816     ?     17.3362+-1.1051        ? might be 1.0308x slower
   sparse-conditional                                 1.1884+-0.1133            1.1177+-0.0057          might be 1.0632x faster
   splice-to-remove                                  12.1964+-0.9621           11.8202+-0.1882          might be 1.0318x faster
   string-char-code-at                               13.1814+-0.4328           12.9048+-0.4135          might be 1.0214x faster
   string-concat-object                               2.0890+-0.1280     ?      2.3130+-0.3069        ? might be 1.1072x slower
   string-concat-pair-object                          2.1667+-0.2016            2.1027+-0.1746          might be 1.0305x faster
   string-concat-pair-simple                          9.1200+-0.2439     ?     10.2148+-1.3996        ? might be 1.1201x slower
   string-concat-simple                               9.3874+-0.4654     ?      9.7610+-0.7386        ? might be 1.0398x slower
   string-cons-repeat                                 6.7603+-0.7195            6.5241+-0.4478          might be 1.0362x faster
   string-cons-tower                                  6.6130+-0.2664     ?      6.6937+-0.4509        ? might be 1.0122x slower
   string-equality                                   15.8530+-0.2138     ?     15.9399+-0.2099        ?
   string-get-by-val-big-char                         6.5070+-0.1476            6.4845+-0.1965        
   string-get-by-val-out-of-bounds-insane             3.0780+-0.1275     ?      3.0957+-0.1170        ?
   string-get-by-val-out-of-bounds                    4.2801+-0.6171            3.9026+-0.0661          might be 1.0967x faster
   string-get-by-val                                  2.7802+-0.0207     ?      2.7954+-0.0465        ?
   string-hash                                        1.7963+-0.0223            1.7885+-0.0553        
   string-long-ident-equality                        13.3568+-0.3418           13.2543+-0.2242        
   string-out-of-bounds                              10.0272+-0.2119           10.0070+-0.2392        
   string-repeat-arith                               27.3014+-0.9589           27.1584+-0.4409        
   string-sub                                        53.5487+-1.4652           53.1037+-1.6422        
   string-test                                        2.8773+-0.2132            2.7502+-0.0607          might be 1.0462x faster
   string-var-equality                               25.7118+-0.5069           25.2362+-0.4450          might be 1.0188x faster
   structure-hoist-over-transitions                   2.3719+-0.0493     ?      2.4723+-0.2688        ? might be 1.0423x slower
   substring-concat-weird                            35.9517+-1.0117     ?     36.3435+-1.4392        ? might be 1.0109x slower
   substring-concat                                  39.7954+-1.2485     ?     39.9030+-1.1510        ?
   substring                                         45.2133+-1.3888           44.2791+-0.6978          might be 1.0211x faster
   switch-char-constant                               2.6959+-0.1427            2.6221+-0.0473          might be 1.0281x faster
   switch-char                                        5.6748+-0.7996     ?      5.7040+-0.8403        ?
   switch-constant                                    8.0575+-0.7252            7.8456+-0.7597          might be 1.0270x faster
   switch-string-basic-big-var                       13.3040+-0.2213     ?     13.3959+-0.2766        ?
   switch-string-basic-big                           14.1127+-0.9837           13.9955+-0.8126        
   switch-string-basic-var                           12.9421+-0.4662           12.6441+-0.2105          might be 1.0236x faster
   switch-string-basic                               12.3180+-0.1770           12.2356+-0.2656        
   switch-string-big-length-tower-var                17.7317+-0.4247     ?     17.7591+-0.3601        ?
   switch-string-length-tower-var                    13.3729+-0.3905           13.0472+-0.2952          might be 1.0250x faster
   switch-string-length-tower                        11.6212+-0.1933     ?     11.6571+-0.5260        ?
   switch-string-short                               11.8155+-0.5449           11.5797+-0.1011          might be 1.0204x faster
   switch                                            11.2640+-0.4091     ?     11.3058+-0.5703        ?
   tear-off-arguments-simple                          2.9888+-0.1363     ?      3.0495+-0.1585        ? might be 1.0203x slower
   tear-off-arguments                                 4.1885+-0.2707            4.0549+-0.5055          might be 1.0330x faster
   temporal-structure                                11.7441+-0.1933     ?     11.7633+-0.2253        ?
   to-int32-boolean                                  12.6164+-0.4174           12.3920+-0.0933          might be 1.0181x faster
   try-catch-get-by-val-cloned-arguments             14.0280+-0.5272           13.9606+-0.7588        
   try-catch-get-by-val-direct-arguments              6.4890+-0.6329            6.2231+-0.2252          might be 1.0427x faster
   try-catch-get-by-val-scoped-arguments              7.6760+-0.3974            7.4541+-0.2315          might be 1.0298x faster
   typed-array-get-set-by-val-profiling              27.0093+-0.9579           26.7186+-0.5656          might be 1.0109x faster
   undefined-property-access                        224.9176+-0.8511     ?    225.8445+-2.0551        ?
   undefined-test                                     2.8604+-0.0736     ?      2.9276+-0.0392        ? might be 1.0235x slower
   unprofiled-licm                                   13.6104+-0.2384     ?     13.9234+-0.5151        ? might be 1.0230x slower
   varargs-call                                      12.4609+-0.2951     ?     12.5722+-0.2279        ?
   varargs-construct-inline                          22.8646+-1.0615           21.7610+-1.1961          might be 1.0507x faster
   varargs-construct                                 20.4170+-1.2253           19.8159+-0.9795          might be 1.0303x faster
   varargs-inline                                     8.1285+-0.3946            7.7846+-0.1182          might be 1.0442x faster
   varargs-strict-mode                                9.0262+-0.6311            8.6633+-0.1398          might be 1.0419x faster
   varargs                                            8.5977+-0.1317     ?      9.0539+-1.1400        ? might be 1.0531x slower
   weird-inlining-const-prop                          2.0829+-0.0803            2.0679+-0.2963        

   &lt;geometric&gt;                                        7.7813+-0.0288                ERROR             

                                                        TipOfTree                 NewPolyIC                                     
AsmBench:
   bigfib.cpp                                       448.3273+-8.3243     ?    453.2424+-5.6490        ? might be 1.0110x slower
   cray.c                                           398.2515+-3.2341          398.1871+-2.4686        
   dry.c                                            420.0529+-7.9347          412.8385+-7.9821          might be 1.0175x faster
   FloatMM.c                                        681.9023+-2.0043     ?    684.2348+-3.5513        ?
   gcc-loops.cpp                                   3423.1442+-17.6593        3416.4462+-20.5228       
   n-body.c                                         819.8316+-1.5053     ?    823.9700+-7.8652        ?
   Quicksort.c                                      405.2087+-6.5606          404.3651+-0.8151        
   stepanov_container.cpp                          3546.6263+-16.1474        3526.1716+-22.6991       
   Towers.c                                         235.6921+-1.8398     ?    236.7061+-3.7922        ?

   &lt;geometric&gt;                                      714.5940+-2.0892          714.3088+-2.2449          might be 1.0004x faster

                                                        TipOfTree                 NewPolyIC                                     
CompressionBench:
   huffman                                           58.9485+-0.8693     ?     59.9698+-0.6593        ? might be 1.0173x slower
   arithmetic-simple                                270.1069+-0.6587     ?    271.5894+-2.7625        ?
   arithmetic-precise                               243.8536+-3.0425          240.2072+-1.9811          might be 1.0152x faster
   arithmetic-complex-precise                       241.4851+-1.6367     ?    242.3879+-3.3590        ?
   arithmetic-precise-order-0                       278.4817+-0.7713     ?    280.1524+-1.9989        ?
   arithmetic-precise-order-1                       305.4280+-5.7719          304.0262+-1.8489        
   arithmetic-precise-order-2                       350.2224+-2.1488     ?    350.7878+-4.8364        ?
   arithmetic-simple-order-1                        325.7271+-1.3399     ?    326.7786+-2.9401        ?
   arithmetic-simple-order-2                        380.1700+-3.9336     ^    374.6579+-1.4940        ^ definitely 1.0147x faster
   lz-string                                        312.2294+-3.3868          311.1443+-5.5307        

   &lt;geometric&gt;                                      253.1143+-0.6356          253.0992+-0.7479          might be 1.0001x faster

                                                        TipOfTree                 NewPolyIC                                     
Geomean of preferred means:
   &lt;scaled-result&gt;                                   50.9769+-0.1137                ERROR</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124734</commentid>
    <comment_count>32</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-09 16:07:51 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; (In reply to comment #29)
&gt; &gt; Comment on attachment 260868 [details]
&gt; &gt; the patch
&gt; &gt; 
&gt; &gt; Mac EWS failure appears repeatable. There seems to be a bug here.
&gt; 
&gt; Yup, I&apos;m looking at it.

This turned out to be an existing bug in BinarySwitch.  This patch makes it easy to reproduce this using typed array tests.  I&apos;ll upload a new patch shortly that fixes that BinarySwitch bug and adds a test...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124737</commentid>
    <comment_count>33</comment_count>
      <attachid>260886</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-09 16:14:23 -0700</bug_when>
    <thetext>Created attachment 260886
the patch

And now, with fixes to the array-message-passing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124739</commentid>
    <comment_count>34</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-09 16:16:37 -0700</bug_when>
    <thetext>Attachment 260886 did not pass style-queue:


ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:560:  Declaration has space between type name and * in numberOfRegsForCall * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:629:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:677:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:840:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:870:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/BinarySwitch.cpp:143:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/BinarySwitch.cpp:217:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp:56:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.h:61:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 9 in 29 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>1124820</commentid>
    <comment_count>35</comment_count>
      <attachid>260906</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-09 20:00:50 -0700</bug_when>
    <thetext>Created attachment 260906
the patch

Fixes for 32-bit x86.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124821</commentid>
    <comment_count>36</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-09 20:03:54 -0700</bug_when>
    <thetext>Attachment 260906 did not pass style-queue:


ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:560:  Declaration has space between type name and * in numberOfRegsForCall * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:629:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:677:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:844:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:875:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/BinarySwitch.cpp:143:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/BinarySwitch.cpp:217:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp:56:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.h:61:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 9 in 29 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>1124956</commentid>
    <comment_count>37</comment_count>
      <attachid>260906</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-09-10 11:16:27 -0700</bug_when>
    <thetext>Comment on attachment 260906
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124985</commentid>
    <comment_count>38</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-10 12:50:18 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/189586</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1125132</commentid>
    <comment_count>39</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-09-10 19:50:07 -0700</bug_when>
    <thetext>Looks like a 4% progression on Speedometer :)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260628</attachid>
            <date>2015-09-04 15:04:32 -0700</date>
            <delta_ts>2015-09-04 16:02:43 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>47640</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3Jw
aGljQWNjZXNzLmNwcAkocmV2aXNpb24gMTg5MzI0KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHA6MTg5MzI0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDE1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUG9seW1v
cnBoaWNHZXRCeUlkTGlzdC5oIgorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkNvZGVC
bG9jay5oIgorI2luY2x1ZGUgIkhlYXAuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5j
bHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0dldEJ5SWRB
Y2Nlc3M6OkdldEJ5SWRBY2Nlc3MoCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NU
eXBlIHR5cGUsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lLAorICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29u
ZGl0aW9uU2V0KQorICAgIDogbV90eXBlKHR5cGUpCisgICAgLCBtX3N0cnVjdHVyZSh2bSwgb3du
ZXIsIHN0cnVjdHVyZSkKKyAgICAsIG1fY29uZGl0aW9uU2V0KGNvbmRpdGlvblNldCkKKyAgICAs
IG1fc3R1YlJvdXRpbmUoc3R1YlJvdXRpbmUpCit7Cit9CisKK0dldEJ5SWRBY2Nlc3M6On5HZXRC
eUlkQWNjZXNzKCkKK3sKK30KKworR2V0QnlJZEFjY2VzcyBHZXRCeUlkQWNjZXNzOjpmcm9tU3Ry
dWN0dXJlU3R1YkluZm8oU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBpbml0aWFsU2xvd1BhdGggPQorICAgICAgICBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Ns
b3dDYXNlKTsKKyAgICAKKyAgICBHZXRCeUlkQWNjZXNzIHJlc3VsdDsKKyAgICAKKyAgICBSRUxF
QVNFX0FTU0VSVChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZik7
CisgICAgCisgICAgcmVzdWx0Lm1fdHlwZSA9IFNpbXBsZUlubGluZTsKKyAgICByZXN1bHQubV9z
dHJ1Y3R1cmUuY29weUZyb20oc3R1YkluZm8udS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0
dXJlKTsKKyAgICByZXN1bHQubV9zdHViUm91dGluZSA9IEpJVFN0dWJSb3V0aW5lOjpjcmVhdGVT
ZWxmTWFuYWdlZFJvdXRpbmUoaW5pdGlhbFNsb3dQYXRoKTsKKyAgICAKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitib29sIEdldEJ5SWRBY2Nlc3M6OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0Cit7
CisgICAgaWYgKG1fc3RydWN0dXJlICYmICFIZWFwOjppc01hcmtlZChtX3N0cnVjdHVyZS5nZXQo
KSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW1fY29uZGl0aW9uU2V0LmFyZVN0
aWxsTGl2ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFtX3N0dWJSb3V0aW5l
LT52aXNpdFdlYWsodm0pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK1BvbHltb3JwaGljR2V0QnlJZExpc3Q6OlBvbHltb3JwaGljR2V0QnlJZExpc3QoU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBl
ID09IGFjY2Vzc191bnNldCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fbGlzdC5hcHBl
bmQoR2V0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKHN0dWJJbmZvKSk7Cit9CisK
K1BvbHltb3JwaGljR2V0QnlJZExpc3QqIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmZyb20oU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBl
ID09IGFjY2Vzc19nZXRfYnlfaWRfbGlzdCkKKyAgICAgICAgcmV0dXJuIHN0dWJJbmZvLnUuZ2V0
QnlJZExpc3QubGlzdDsKKyAgICAKKyAgICBBU1NFUlQoCisgICAgICAgIHN0dWJJbmZvLmFjY2Vz
c1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmCisgICAgICAgIHx8IHN0dWJJbmZvLmFjY2Vz
c1R5cGUgPT0gYWNjZXNzX3Vuc2V0KTsKKyAgICAKKyAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0
KiByZXN1bHQgPSBuZXcgUG9seW1vcnBoaWNHZXRCeUlkTGlzdChzdHViSW5mbyk7CisgICAgCisg
ICAgc3R1YkluZm8uaW5pdEdldEJ5SWRMaXN0KHJlc3VsdCk7CisgICAgCisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6flBvbHltb3JwaGljR2V0QnlJZExp
c3QoKSB7IH0KKworTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6
OmN1cnJlbnRTbG93UGF0aFRhcmdldCgKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8p
IGNvbnN0Cit7CisgICAgaWYgKGlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRv
U2xvd0Nhc2UpOworICAgIHJldHVybiBtX2xpc3QubGFzdCgpLnN0dWJSb3V0aW5lKCktPmNvZGUo
KS5jb2RlKCk7Cit9CisKK3ZvaWQgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6YWRkQWNjZXNzKGNv
bnN0IEdldEJ5SWRBY2Nlc3MmIGFjY2VzcykKK3sKKyAgICBBU1NFUlQoIWlzRnVsbCgpKTsKKyAg
ICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgcmVzaXppbmcgb3B0aW1pemVzIGZvciBzcGFjZSwgbm90
IHRpbWUuCisgICAgbV9saXN0LnJlc2l6ZVRvRml0KG1fbGlzdC5zaXplKCkgKyAxKTsKKyAgICBt
X2xpc3QubGFzdCgpID0gYWNjZXNzOworfQorCitib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6
OmlzRnVsbCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKHNpemUoKSA8PSBQT0xZTU9SUEhJQ19MSVNU
X0NBQ0hFX1NJWkUpOworICAgIHJldHVybiBzaXplKCkgPT0gUE9MWU1PUlBISUNfTElTVF9DQUNI
RV9TSVpFOworfQorCitib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmlzQWxtb3N0RnVsbCgp
IGNvbnN0Cit7CisgICAgQVNTRVJUKHNpemUoKSA8PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJ
WkUpOworICAgIHJldHVybiBzaXplKCkgPj0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIC0g
MTsKK30KKworYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpkaWRTZWxmUGF0Y2hpbmcoKSBj
b25zdAoreworICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUoKTsgaS0tOykgeworICAgICAgICBp
ZiAoYXQoaSkudHlwZSgpID09IEdldEJ5SWRBY2Nlc3M6OlNpbXBsZUlubGluZSkKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUG9s
eW1vcnBoaWNHZXRCeUlkTGlzdDo6dmlzaXRXZWFrKFZNJiB2bSkgY29uc3QKK3sKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBzaXplKCk7IGktLTspIHsKKyAgICAgICAgaWYgKCFhdChpKS52aXNpdFdl
YWsodm0pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3Jw
aGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQs
NyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0LmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKIAogI2lmIEVOQUJM
RShKSVQpCiAKQEAgLTM1LDU2ICszNSwzNDIgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUdldEJ5
SWRBY2Nlc3M6OkdldEJ5SWRBY2Nlc3MoCi0gICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nl
c3NUeXBlIHR5cGUsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lLAotICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYg
Y29uZGl0aW9uU2V0KQorc3RydWN0IEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSB7CisgICAgQ0NhbGxI
ZWxwZXJzKiBqaXQgeyBudWxscHRyIH07CisgICAgUG9seW1vcnBoaWNBY2Nlc3MqIGFjY2VzcyB7
IG51bGxwdHIgfTsKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8geyBudWxscHRyIH07
CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBmYWlsdXJlOworICAgIEdQUlJlZyBiYXNlR1BS
IHsgSW52YWxpZEdQUlJlZyB9OworICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVnczsKKyAgICBHUFJS
ZWcgc2NyYXRjaEdQUiB7IEludmFsaWRHUFJSZWcgfTsKKyAgICBib29sIG5lZWRUb1Jlc3RvcmVT
Y3JhdGNoIHsgZmFsc2UgfTsKKyAgICBWZWN0b3I8c3RkOjpmdW5jdGlvbjx2b2lkKExpbmtCdWZm
ZXImKT4gY2FsbGJhY2tzOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50OworfTsKKworQWNj
ZXNzQ2FzZTo6QWNjZXNzQ2FzZSgKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5
cGUgdHlwZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBib29sIHZpYVByb3h5LAorICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0
aW9uU2V0LAorICAgIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQpCiAgICAgOiBtX3R5cGUo
dHlwZSkKKyAgICAsIG1fb2Zmc2V0KG9mZnNldCkKICAgICAsIG1fc3RydWN0dXJlKHZtLCBvd25l
ciwgc3RydWN0dXJlKQogICAgICwgbV9jb25kaXRpb25TZXQoY29uZGl0aW9uU2V0KQotICAgICwg
bV9zdHViUm91dGluZShzdHViUm91dGluZSkKIHsKKyAgICBpZiAodmlhUHJveHkgfHwgYWRkaXRp
b25hbFNldCB8fCBkb2VzQ2FsbHMoKSkgeworICAgICAgICBtX3JhcmVEYXRhID0gc3RkOjptYWtl
X3VuaXF1ZTxSYXJlRGF0YT4oKTsKKyAgICAgICAgbV9yYXJlRGF0YS0+dmlhUHJveHkgPSB2aWFQ
cm94eTsKKyAgICAgICAgbV9yYXJlRGF0YS0+YWRkaXRpb25hbFNldCA9IGFkZGl0aW9uYWxTZXQ7
CisgICAgfQogfQogCi1HZXRCeUlkQWNjZXNzOjp+R2V0QnlJZEFjY2VzcygpCitBY2Nlc3NDYXNl
Ojp+QWNjZXNzQ2FzZSgpCiB7CiB9CiAKLUdldEJ5SWRBY2Nlc3MgR2V0QnlJZEFjY2Vzczo6ZnJv
bVN0cnVjdHVyZVN0dWJJbmZvKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK0FjY2Vzc0Nh
c2UgQWNjZXNzQ2FzZTo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbykKIHsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgaW5pdGlhbFNsb3dQYXRoID0K
ICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1Yklu
Zm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSk7CiAgICAgCi0gICAgR2V0QnlJZEFjY2VzcyBy
ZXN1bHQ7CisgICAgLy8gRklYTUU6IFRoaXMgaXMgYWxsIHNvIHdyb25nLgogICAgIAorICAgIEFj
Y2Vzc0Nhc2UgcmVzdWx0OworCiAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8uYWNjZXNzVHlw
ZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYpOwogICAgIAogICAgIHJlc3VsdC5tX3R5cGUgPSBT
aW1wbGVJbmxpbmU7CiAgICAgcmVzdWx0Lm1fc3RydWN0dXJlLmNvcHlGcm9tKHN0dWJJbmZvLnUu
Z2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZSk7Ci0gICAgcmVzdWx0Lm1fc3R1YlJvdXRp
bmUgPSBKSVRTdHViUm91dGluZTo6Y3JlYXRlU2VsZk1hbmFnZWRSb3V0aW5lKGluaXRpYWxTbG93
UGF0aCk7CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotYm9vbCBHZXRCeUlkQWNjZXNz
Ojp2aXNpdFdlYWsoVk0mIHZtKSBjb25zdAorYm9vbCBBY2Nlc3NDYXNlOjp2aXNpdFdlYWsoVk0m
IHZtKSBjb25zdAogewogICAgIGlmIChtX3N0cnVjdHVyZSAmJiAhSGVhcDo6aXNNYXJrZWQobV9z
dHJ1Y3R1cmUuZ2V0KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFtX2NvbmRp
dGlvblNldC5hcmVTdGlsbExpdmUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICgh
bV9zdHViUm91dGluZS0+dmlzaXRXZWFrKHZtKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGlmIChtX3JhcmVEYXRhICYmIG1fcmFyZURhdGEtPmNhbGxMaW5rSW5mbykKKyAgICAgICAgbV9y
YXJlRGF0YS0+Y2FsbExpbmtJbmZvLT52aXNpdFdlYWsodm0pOwogICAgIHJldHVybiB0cnVlOwog
fQogCi1Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3ZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3Vh
cmQoCisgICAgQWNjZXNzR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSwgQ0NhbGxIZWxwZXJzOjpKdW1w
TGlzdCYgZmFsbFRocm91Z2gpCit7CisgICAgQ0NhbGxIZWxwZXJzJiBqaXQgPSAqc3RhdGUuaml0
OworCisgICAgaWYgKHZpYVByb3h5KCkpIHsKKyAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKAor
ICAgICAgICAgICAgaml0LmJyYW5jaDgoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpO
b3RFcXVhbCwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RhdGUuYmFz
ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoUHVyZUZvcndhcmRpbmdQcm94eVR5cGUpKSk7CisKKyAg
ICAgICAgaml0LmxvYWRQdHIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3Rh
dGUuYmFzZUdQUiwgSlNQcm94eTo6dGFyZ2V0T2Zmc2V0KCkpLAorICAgICAgICAgICAgc3RhdGUu
c2NyYXRjaEdQUik7CisKKyAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKAorICAgICAgICAgICAg
aml0LmJyYW5jaFN0cnVjdHVyZSgKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVx
dWFsLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdGF0ZS5zY3JhdGNo
R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIHN0cnVj
dHVyZSgpKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKAorICAg
ICAgICAgICAgaml0LmJyYW5jaFN0cnVjdHVyZSgKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdGF0
ZS5iYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAorICAgICAgICAgICAgICAg
IHN0cnVjdHVyZSgpKSk7CisgICAgfQorCisgICAgZ2VuZXJhdGUoc3RhdGUpOworfQorCit2b2lk
IEFjY2Vzc0Nhc2U6OmdlbmVyYXRlKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCit7Cisg
ICAgQ0NhbGxIZWxwZXJzJiBqaXQgPSAqc3RhdGUuaml0OworICAgIFZNJiB2bSA9ICpqaXQudm0o
KTsKKyAgICBQb2x5bW9ycGhpY0FjY2VzcyYgYWNjZXNzID0gKnN0YXRlLmFjY2VzczsKKyAgICBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSAqc3RhdGUuc3R1YkluZm87CisgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBqaXQuY29kZUJsb2NrKCk7CisgICAgY29uc3QgSWRlbnRpZmllciYg
aWRlbnQgPSAqc3RhdGUuaWRlbnQ7CisKKyAgICBBU1NFUlQobV9jb25kaXRpb25TZXQuc3RydWN0
dXJlc0Vuc3VyZVZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSk7CisK
KyAgICBpZiAoc3RydWN0dXJlKCktPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSB8fCBt
X2NvbmRpdGlvblNldC5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpCisgICAgICAgIHZt
LnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KGlkZW50LCBhY2Nlc3MuYWRkV2F0
Y2hwb2ludChzdGF0ZSkpOworCisgICAgaWYgKGFkZGl0aW9uYWxTZXQoKSkKKyAgICAgICAgYWRk
aXRpb25hbFNldCgpLT5hZGQoYWNjZXNzLmFkZFdhdGNocG9pbnQoc3RhdGUpKTsKKworICAgIGZv
ciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6IG1fY29uZGl0aW9u
U2V0KSB7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY29uZGl0aW9uLm9iamVjdCgp
LT5zdHJ1Y3R1cmUoKTsKKworICAgICAgICBpZiAoY29uZGl0aW9uLmlzV2F0Y2hhYmxlQXNzdW1p
bmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkgeworICAgICAgICAgICAgc3RydWN0dXJlLT5h
ZGRUcmFuc2l0aW9uV2F0Y2hwb2ludChhY2Nlc3MuYWRkV2F0Y2hwb2ludChzdGF0ZSwgY29uZGl0
aW9uKSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGNvbmRpdGlvbi5zdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWluZ0ltcHVy
ZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUpKTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNvbmRpdGlvbi5vYmplY3QoKSksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICBzdGF0ZS5mYWlsdXJlLmFwcGVuZCgKKyAgICAgICAgICAgIGppdC5icmFuY2hTdHJ1
Y3R1cmUoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKKyAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUpKTsKKyAgICB9CisKKyAg
ICBpZiAoaXNWYWxpZE9mZnNldChtX29mZnNldCkpIHsKKyAgICAgICAgU3RydWN0dXJlKiBjdXJy
U3RydWN0dXJlOworICAgICAgICBpZiAobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKQorICAgICAg
ICAgICAgY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgY3VyclN0cnVjdHVyZSA9IG1fY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Jq
ZWN0KCktPnN0cnVjdHVyZSgpOworICAgICAgICBjdXJyU3RydWN0dXJlLT5zdGFydFdhdGNoaW5n
UHJvcGVydHlGb3JSZXBsYWNlbWVudHModm0sIG9mZnNldCk7CisgICAgfQorCisgICAgR1BSUmVn
IGJhc2VGb3JHZXRHUFI7CisgICAgaWYgKHZpYVByb3h5KCkpIHsKKyAgICAgICAgYmFzZUZvckdl
dEdQUiA9IHZhbHVlUmVncy5wYXlsb2FkR1BSKCk7CisgICAgICAgIGppdC5sb2FkUHRyKAorICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTUHJveHk6OnRhcmdldE9m
ZnNldCgpKSwKKyAgICAgICAgICAgIGJhc2VGb3JHZXRHUFIpOworICAgIH0gZWxzZQorICAgICAg
ICBiYXNlRm9yR2V0R1BSID0gYmFzZUdQUjsKKworICAgIEdQUlJlZyBiYXNlRm9yQWNjZXNzR1BS
ID0gSW52YWxpZEdQUlJlZzsKKyAgICBpZiAobV90eXBlICE9IE1pc3MpIHsKKyAgICAgICAgaWYg
KCFjb25kaXRpb25TZXQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBqaXQubW92ZSgKKyAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY29uZGl0aW9uU2V0LnNsb3RC
YXNlQ29uZGl0aW9uKCkub2JqZWN0KCkpLAorICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgYmFzZUZvckFjY2Vzc0dQUiA9IHNjcmF0Y2hHUFIKKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBiYXNlRm9yQWNjZXNzR1BSID0gYmFzZUZvckdldEdQUjsKKyAgICB9CisK
KyAgICBHUFJSZWcgbG9hZGVkVmFsdWVHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgIGlmIChtX3R5
cGUgPT0gTWlzcykKKyAgICAgICAgaml0Lm1vdmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwg
dmFsdWVSZWdzKTsKKyAgICBlbHNlIGlmIChtX3R5cGUgIT0gQ3VzdG9tR2V0dGVyICYmIG1fdHlw
ZSAhPSBDdXN0b21TZXR0ZXIpIHsKKyAgICAgICAgaWYgKG1fdHlwZSA9PSBMb2FkKQorICAgICAg
ICAgICAgbG9hZGVkVmFsdWVHUFIgPSB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUiA9IHNjcmF0Y2hHUFI7CisKKyAgICAgICAg
R1BSUmVnIHN0b3JhZ2VHUFI7CisgICAgICAgIGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKQor
ICAgICAgICAgICAgc3RvcmFnZUdQUiA9IGJhc2VGb3JBY2Nlc3NHUFI7CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgaml0LmxvYWRQdHIoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKGJhc2VGb3JBY2Nlc3NHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSks
CisgICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIpOworICAgICAgICAgICAgc3RvcmFnZUdQ
UiA9IGxvYWRlZFZhbHVlR1BSOworICAgICAgICB9CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAg
ICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6QWRkcmVzcyhzdG9yYWdlR1BSLCBvZmZzZXRS
ZWxhdGl2ZVRvQmFzZShvZmZzZXQpKSwgbG9hZGVkVmFsdWVHUFIpOworI2Vsc2UKKyAgICAgICAg
aWYgKG1fdHlwZSA9PSBsb2FkKSB7CisgICAgICAgICAgICBqaXQubG9hZDMyKAorICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdG9yYWdlR1BSLCBvZmZzZXRSZWxhdGl2ZVRv
QmFzZShvZmZzZXQpICsgVGFnT2Zmc2V0KSwKKyAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MudGFn
R1BSKCkpOworICAgICAgICB9CisgICAgICAgIGppdC5sb2FkMzIoCisgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3Moc3RvcmFnZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uob2Zmc2V0
KSArIFBheWxvYWRPZmZzZXQpLAorICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIpOworI2VuZGlm
CisgICAgfQorCisgICAgLy8gU3R1ZmYgZm9yIGN1c3RvbSBnZXR0ZXJzLgorICAgIENDYWxsSGVs
cGVyczo6Q2FsbCBvcGVyYXRpb25DYWxsOworICAgIENDYWxsSGVscGVyczo6Q2FsbCBoYW5kbGVy
Q2FsbDsKKworICAgIC8vIFN0dWZmIGZvciBKUyBnZXR0ZXJzLgorICAgIENDYWxsSGVscGVyczo6
RGF0YUxhYmVsUHRyIGFkZHJlc3NPZkxpbmtGdW5jdGlvbkNoZWNrOworICAgIENDYWxsSGVscGVy
czo6Q2FsbCBmYXN0UGF0aENhbGw7CisgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHNsb3dQYXRoQ2Fs
bDsKKworICAgIENDYWxsSGVscGVyczo6SnVtcCBzdWNjZXNzOworICAgIENDYWxsSGVscGVyczo6
SnVtcCBmYWlsOworICAgIGlmIChtX3R5cGUgIT0gTG9hZCAmJiBtX3R5cGUgIT0gTWlzcykgewor
ICAgICAgICAvLyBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdoZW5ldmVyIHRoaXMgY2FsbCBpcyBt
YWRlIGluIHRoZSBmdXR1cmUsIHdlIHJlbWVtYmVyIHRoZQorICAgICAgICAvLyBwbGFjZSB0aGF0
IHdlIG1hZGUgaXQgZnJvbS4KKyAgICAgICAgaml0LnN0b3JlMzIoCisgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdHViSW5mby5jYWxsU2l0ZUluZGV4LmJpdHMoKSksCisg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0
ZXI+KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7CisKKyAgICAgICAgaWYgKG1fdHlwZSA9PSBH
ZXR0ZXIgfHwgbV90eXBlID09IFNldHRlcikgeworICAgICAgICAgICAgLy8gQ3JlYXRlIGEgSlMg
Y2FsbCB1c2luZyBhIEpTIGNhbGwgaW5saW5lIGNhY2hlLiBBc3N1bWUgdGhhdDoKKyAgICAgICAg
ICAgIC8vCisgICAgICAgICAgICAvLyAtIFNQIGlzIGFsaWduZWQgYW5kIHJlcHJlc2VudHMgdGhl
IGV4dGVudCBvZiB0aGUgY2FsbGluZyBjb21waWxlcidzIHN0YWNrIHVzYWdlLgorICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgIC8vIC0gRlAgaXMgc2V0IGNvcnJlY3RseSAoaS5lLiBpdCBwb2lu
dHMgdG8gdGhlIGNhbGxlcidzIGNhbGwgZnJhbWUgaGVhZGVyKS4KKyAgICAgICAgICAgIC8vCisg
ICAgICAgICAgICAvLyAtIFNQIC0gRlAgaXMgYW4gYWxpZ25lZCBkaWZmZXJlbmNlLgorICAgICAg
ICAgICAgLy8KKyAgICAgICAgICAgIC8vIC0gQW55IGJ5dGUgYmV0d2VlbiBGUCAoZXhjbHVzaXZl
KSBhbmQgU1AgKGluY2x1c2l2ZSkgY291bGQgYmUgbGl2ZSBpbiB0aGUgY2FsbGluZworICAgICAg
ICAgICAgLy8gICBjb2RlLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFRoZXJlZm9y
ZSwgd2UgdGVtcG9yYXJpbHkgZ3JvdyB0aGUgc3RhY2sgZm9yIHRoZSBwdXJwb3NlIG9mIHRoZSBj
YWxsIGFuZCB0aGVuCisgICAgICAgICAgICAvLyBzaHJpbmsgaXQgYWZ0ZXIuCisKKyAgICAgICAg
ICAgIG1fcmFyZURhdGEtPmNhbGxMaW5rSW5mbyA9IHN0ZDo6bWFrZV91bmlxdWU8Q2FsbExpbmtJ
bmZvPigpOworICAgICAgICAgICAgbV9yYXJlRGF0YS0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6
Q2FsbCwgc3R1YkluZm8uY29kZU9yaWdpbiwgbG9hZGVkVmFsdWVHUFIpOworCisgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7CisKKyAgICAgICAgICAgIC8vIFRoZXJlIGlz
IGEgInRoaXMiIGFyZ3VtZW50LgorICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZQYXJhbWV0
ZXJzID0gMTsKKyAgICAgICAgICAgIC8vIC4uLiBhbmQgYSB2YWx1ZSBhcmd1bWVudCBpZiB3ZSdy
ZSBjYWxsaW5nIGEgc2V0dGVyLgorICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBTZXR0ZXIpCisg
ICAgICAgICAgICAgICAgbnVtYmVyT2ZQYXJhbWV0ZXJzKys7CisKKyAgICAgICAgICAgIC8vIEdl
dCB0aGUgYWNjZXNzb3I7IGlmIHRoZXJlIGFpbid0IG9uZSB0aGVuIHRoZSByZXN1bHQgaXMganNV
bmRlZmluZWQoKS4KKyAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gU2V0dGVyKSB7CisgICAgICAg
ICAgICAgICAgaml0LmxvYWRQdHIoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
QWRkcmVzcyhsb2FkZWRWYWx1ZUdQUiwgR2V0dGVyU2V0dGVyOjpvZmZzZXRPZlNldHRlcigpKSwK
KyAgICAgICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIpOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cigKKyAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKGxvYWRlZFZhbHVlR1BSLCBHZXR0ZXJTZXR0ZXI6Om9mZnNldE9m
R2V0dGVyKCkpLAorICAgICAgICAgICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCByZXR1cm5VbmRlZmluZWQg
PSBqaXQuYnJhbmNoVGVzdFB0cigKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Olplcm8s
IGxvYWRlZFZhbHVlR1BSKTsKKworICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZSZWdzRm9y
Q2FsbCA9IEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUgKyBudW1iZXJPZlBhcmFtZXRlcnM7
CisKKyAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQnl0ZXNGb3JDYWxsID0KKyAgICAgICAg
ICAgICAgICBudW1iZXJPZlJlZ3NGb3JDYWxsICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihD
YWxsZXJGcmFtZUFuZFBDKTsKKworICAgICAgICAgICAgdW5zaWduZWQgYWxpZ25lZE51bWJlck9m
Qnl0ZXNGb3JDYWxsID0KKyAgICAgICAgICAgICAgICBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yo
c3RhY2tBbGlnbm1lbnRCeXR3cygpLCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCk7CisKKyAgICAgICAg
ICAgIGppdC5zdWJQdHIoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxsKSwKKyAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzIGNhbGxlZUZyYW1lID0gQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsCisgICAgICAgICAgICAg
ICAgLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7CisK
KyAgICAgICAgICAgIGppdC5zdG9yZTMyKAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKG51bWJlck9mUGFyYW1ldGVycyksCisgICAgICAgICAgICAgICAgY2FsbGVl
RnJhbWUud2l0aE9mZnNldChKU1N0YWNrOjpBcmd1bWVudENvdW50ICogc2l6ZW9mKFJlZ2lzdGVy
KSArIFBheWxvYWRPZmZzZXQpKTsKKworICAgICAgICAgICAgaml0LnN0b3JlQ2VsbCgKKyAgICAg
ICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUiwgY2FsbGVlRnJhbWUud2l0aE9mZnNldChKU1N0YWNr
OjpDYWxsZWUgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisKKyAgICAgICAgICAgIGppdC5zdG9yZUNl
bGwoCisgICAgICAgICAgICAgICAgYmFzZUZvckdldEdQUiwKKyAgICAgICAgICAgICAgICBjYWxs
ZWVGcmFtZS53aXRoT2Zmc2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDApLm9mZnNldCgp
ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworCisgICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsU2V0
dGVyKSB7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUoCisgICAgICAgICAgICAgICAg
ICAgIHZhbHVlUmVncywKKyAgICAgICAgICAgICAgICAgICAgY2FsbGVlRnJhbWUud2l0aE9mZnNl
dCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxKS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3Rl
cikpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHNs
b3dDYXNlID0gaml0LmJyYW5jaFB0cldpdGhQYXRjaCgKKyAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6Ok5vdEVxdWFsLCBsb2FkZWRWYWx1ZUdQUiwgYWRkcmVzc09mTGlua0Z1bmN0aW9uQ2hl
Y2ssCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKDApKTsKKwor
ICAgICAgICAgICAgZmFzdFBhdGhDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisKKyAgICAgICAgICAg
IGppdC5hZGRQdHIoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
YWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxsKSwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgICAgIGlmIChraW5kID09IENhbGxH
ZXR0ZXIpCisgICAgICAgICAgICAgICAgaml0LnNldHVwUmVzdWx0cyh2YWx1ZVJlZ3MpOworCisg
ICAgICAgICAgICBkb25lLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgICAgIHNsb3dDYXNl
LmxpbmsoJmppdCk7CisKKyAgICAgICAgICAgIGppdC5tb3ZlKGxvYWRlZFZhbHVlR1BSLCBHUFJJ
bmZvOjpyZWdUMCk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgICAgIC8vIFdlICph
bHdheXMqIGtub3cgdGhhdCB0aGUgZ2V0dGVyL3NldHRlciwgaWYgbm9uLW51bGwsIGlzIGEgY2Vs
bC4KKyAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkNlbGxUYWcpLCBHUFJJbmZvOjpyZWdUMSk7CisjZW5kaWYKKyAgICAgICAgICAgIGppdC5t
b3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX3JhcmVEYXRhLT5jYWxsTGlua0luZm8u
Z2V0KCkpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgICAgICBzbG93UGF0aENhbGwgPSBqaXQu
bmVhckNhbGwoKTsKKworICAgICAgICAgICAgaml0LmFkZFB0cigKKyAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwpLAor
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAg
ICAgICAgICAgaWYgKGtpbmQgPT0gQ2FsbEdldHRlcikKKyAgICAgICAgICAgICAgICBqaXQuc2V0
dXBSZXN1bHRzKHZhbHVlUmVncyk7CisKKyAgICAgICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1w
KCkpOworICAgICAgICAgICAgcmV0dXJuVW5kZWZpbmVkLmxpbmsoJmppdCk7CisKKyAgICAgICAg
ICAgIGlmIChraW5kID09IENhbGxHZXR0ZXIpCisgICAgICAgICAgICAgICAgaml0Lm1vdmVUcnVz
dGVkVmFsdWUoanNVbmRlZmluZWQoKSwgdmFsdWVSZWdzKTsKKworICAgICAgICAgICAgZG9uZS5s
aW5rKCZqaXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgCisgICAgICAgIH0KKyAg
ICB9CisKKyAgICAvLyBIZXJlJ3MgdGhlIGJhc2ljIGlkZWEgb2YgaG93IHRoaXMgc2hvdWxkIHdv
cms6CisgICAgLy8gLSBBbnl0aGluZyBpbiBTdHJ1Y3R1cmVTdHViSW5mbyB0aGF0IHJlcXVpcmVz
IG91dC1vZi1saW5lIGNvZGUgb3Igd2F0Y2hwb2ludHMgc2hvdWxkIHVzZSBhIGxpc3QuCisgICAg
Ly8gLSBBIGxpc3Qgc2hvdWxkIGhhdmUgYWNjZXNzIHRvIHRoZSBTdHJ1Y3R1cmVTdHViSW5mbyBz
byB0aGF0IGl0IGNhbiBjbGVhciBpdC4KKyAgICAvLyAtIEFsbCB3YXRjaHBvaW50cyBzaG91bGQg
aGFuZyBvZmYgdGhlIGxpc3QuCit9CisKK1BvbHltb3JwaGljQWNjZXNzOjpQb2x5bW9ycGhpY0Fj
Y2VzcyhTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7CiAgICAgaWYgKHN0dWJJbmZvLmFj
Y2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0KQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgbV9s
aXN0LmFwcGVuZChHZXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0dXJlU3R1YkluZm8oc3R1YkluZm8p
KTsKKyAgICBtX2xpc3QuYXBwZW5kKEFjY2Vzc0Nhc2U6OmZyb21TdHJ1Y3R1cmVTdHViSW5mbyhz
dHViSW5mbykpOwogfQogCi1Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBQb2x5bW9ycGhpY0dldEJ5
SWRMaXN0Ojpmcm9tKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK1BvbHltb3JwaGljQWNj
ZXNzKiBQb2x5bW9ycGhpY0FjY2Vzczo6ZnJvbShTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8p
CiB7CiAgICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9saXN0
KQogICAgICAgICByZXR1cm4gc3R1YkluZm8udS5nZXRCeUlkTGlzdC5saXN0OwpAQCAtOTMsMTYg
KzM3OSwxNiBAQCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBQb2x5bW9ycGhpY0dldEJ5CiAgICAg
ICAgIHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmCiAgICAgICAg
IHx8IHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0KTsKICAgICAKLSAgICBQb2x5
bW9ycGhpY0dldEJ5SWRMaXN0KiByZXN1bHQgPSBuZXcgUG9seW1vcnBoaWNHZXRCeUlkTGlzdChz
dHViSW5mbyk7CisgICAgUG9seW1vcnBoaWNBY2Nlc3MqIHJlc3VsdCA9IG5ldyBQb2x5bW9ycGhp
Y0FjY2VzcyhzdHViSW5mbyk7CiAgICAgCiAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRMaXN0KHJl
c3VsdCk7CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUG9seW1vcnBoaWNHZXRCeUlk
TGlzdDo6flBvbHltb3JwaGljR2V0QnlJZExpc3QoKSB7IH0KK1BvbHltb3JwaGljQWNjZXNzOjp+
UG9seW1vcnBoaWNBY2Nlc3MoKSB7IH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIFBvbHltb3Jw
aGljR2V0QnlJZExpc3Q6OmN1cnJlbnRTbG93UGF0aFRhcmdldCgKK01hY3JvQXNzZW1ibGVyQ29k
ZVB0ciBQb2x5bW9ycGhpY0FjY2Vzczo6Y3VycmVudFNsb3dQYXRoVGFyZ2V0KAogICAgIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbykgY29uc3QKIHsKICAgICBpZiAoaXNFbXB0eSgpKQpAQCAt
MTEwLDM4ICszOTYsMTQ2IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBQb2x5bW9ycGhpY0dldEJ5
SWQKICAgICByZXR1cm4gbV9saXN0Lmxhc3QoKS5zdHViUm91dGluZSgpLT5jb2RlKCkuY29kZSgp
OwogfQogCi12b2lkIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmFkZEFjY2Vzcyhjb25zdCBHZXRC
eUlkQWNjZXNzJiBhY2Nlc3MpCi17Ci0gICAgQVNTRVJUKCFpc0Z1bGwoKSk7Ci0gICAgLy8gTWFr
ZSBzdXJlIHRoYXQgdGhlIHJlc2l6aW5nIG9wdGltaXplcyBmb3Igc3BhY2UsIG5vdCB0aW1lLgot
ICAgIG1fbGlzdC5yZXNpemVUb0ZpdChtX2xpc3Quc2l6ZSgpICsgMSk7Ci0gICAgbV9saXN0Lmxh
c3QoKSA9IGFjY2VzczsKLX0KLQotYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojppc0Z1bGwo
KSBjb25zdAorYm9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6aXNGdWxsKCkgY29uc3QKIHsKICAgICBB
U1NFUlQoc2l6ZSgpIDw9IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSk7CiAgICAgcmV0dXJu
IHNpemUoKSA9PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkU7CiB9CiAKLWJvb2wgUG9seW1v
cnBoaWNHZXRCeUlkTGlzdDo6aXNBbG1vc3RGdWxsKCkgY29uc3QKK2Jvb2wgUG9seW1vcnBoaWNB
Y2Nlc3M6OmlzQWxtb3N0RnVsbCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKHNpemUoKSA8PSBQT0xZ
TU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpOwogICAgIHJldHVybiBzaXplKCkgPj0gUE9MWU1PUlBI
SUNfTElTVF9DQUNIRV9TSVpFIC0gMTsKIH0KIAotYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0
OjpkaWRTZWxmUGF0Y2hpbmcoKSBjb25zdAorV2F0Y2hwb2ludCogUG9seW1vcnBoaWNBY2Nlc3M6
OmFkZFdhdGNocG9pbnQoCisgICAgQWNjZXNzR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSwgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbikKK3sKKyAgICByZXR1cm4gV2F0Y2hw
b2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjplbnN1cmVSZWZlcmVuY2VBbmRBZGRXYXRjaHBvaW50
KAorICAgICAgICBtX3dhdGNocG9pbnRzLCBzdGF0ZS5qaXQtPmNvZGVCbG9jaygpLCBzdGF0ZS5z
dHViSW5mbywgY29uZGl0aW9uKTsKK30KKwordm9pZCBQb2x5bW9ycGhpY0FjY2Vzczo6YWRkQWNj
ZXNzKHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBhY2Nlc3MpCit7CisgICAgQVNTRVJUKCFp
c0Z1bGwoKSk7CisgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHJlc2l6aW5nIG9wdGltaXplcyBm
b3Igc3BhY2UsIG5vdCB0aW1lLgorICAgIG1fbGlzdC5yZXNpemVUb0ZpdChtX2xpc3Quc2l6ZSgp
ICsgMSk7CisgICAgbV9saXN0Lmxhc3QoKSA9IGFjY2VzczsKK30KKworTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIFBvbHltb3JwaGljQWNjZXNzOjpyZWdlbmVyYXRlKAorICAgIFZNJiB2bSwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQpCiB7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gc2l6ZSgpOyBpLS07KSB7Ci0g
ICAgICAgIGlmIChhdChpKS50eXBlKCkgPT0gR2V0QnlJZEFjY2Vzczo6U2ltcGxlSW5saW5lKQot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgbV93YXRjaHBvaW50cyA9IG51bGxwdHI7Cisg
ICAgbV9zdHViUm91dGluZSA9IG51bGxwdHI7CisgICAgCisgICAgQWNjZXNzR2VuZXJhdGlvblN0
YXRlIHN0YXRlOworCisgICAgc3RhdGUuYWNjZXNzID0gdGhpczsKKyAgICBzdGF0ZS5zdHViSW5m
byA9ICZzdHViSW5mbzsKKyAgICBzdGF0ZS5pZGVudCA9ICZpZGVudDsKKyAgICAKKyAgICBzdGF0
ZS5iYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKTsK
KyAgICBzdGF0ZS52YWx1ZVJlZ3MgPSBKU1ZhbHVlUmVncygKKyNpZiBVU0UoSlNWQUxVRTMyXzY0
KQorICAgICAgICBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVlVGFnR1BS
KSwKKyNlbmRpZgorICAgICAgICBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZh
bHVlR1BSKSk7CisgICAgc3RhdGUuc2NyYXRjaEdQUiA9IFRlbXBSZWdpc3RlclNldChzdHViSW5m
by5wYXRjaC51c2VkUmVnaXN0ZXJzKS5nZXRGcmVlR1BSKCk7CisgICAgc3RhdGUubmVlZFRvUmVz
dG9yZVNjcmF0Y2ggPSBzY3JhdGNoR1BSID09IEludmFsaWRHUFJSZWc7CisgICAgCisgICAgQ0Nh
bGxIZWxwZXJzIGppdCgmdm0sIGNvZGVCbG9jayk7CisgICAgc3RhdGUuaml0ID0gJmppdDsKKyAg
ICAKKyAgICBpZiAoc3RhdGUubmVlZFRvUmVzdG9yZVNjcmF0Y2gpIHsKKyAgICAgICAgc3RhdGUu
c2NyYXRjaEdQUiA9IEFzc2VtYmx5SGVsZXByczo6c2VsZWN0U2NyYXRjaEdQUigKKyAgICAgICAg
ICAgIHN0YXRlLmJhc2VHUFIsIHN0YXRlLnZhbHVlUmVncy50YWdHUFIoKSwgc3RhdGUudmFsdWVS
ZWdzLnBheWxvYWRHUFIoKSk7CisgICAgICAgIGppdC5wdXNoVG9TYXZlKHN0YXRlLnNjcmF0Y2hH
UFIpOworICAgIH0KKworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc3VjY2VzczsKKworICAg
IGF1dG8gcmVzdG9yZVNjcmF0Y2ggPSBbJl0gKCkgeworICAgICAgICBpZiAoc3RhdGUubmVlZFRv
UmVzdG9yZVNjcmF0Y2gpCisgICAgICAgICAgICBqaXQucG9wVG9SZXN0b3JlKHNjcmF0Y2hHUFIp
OworICAgIH07CisKKyAgICBib29sIGFsbEd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrID0gdHJ1ZTsK
KyAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9saXN0KQorICAgICAgICBhbGxHdWFyZGVkQnlTdHJ1
Y3R1cmVDaGVjayAmPSBlbnRyeS0+Z3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2soKTsKKworICAgIGlm
ICghc2l6ZSgpKSB7CisgICAgICAgIC8vIFRoaXMgaXMgc3VwZXIgdW5saWtlbHksIGJ1dCB3ZSBt
YWtlIGl0IGxlZ2FsIGFueXdheS4KKyAgICAgICAgc3RhdGUuZmFpbHVyZS5hcHBlbmQoaml0Lmp1
bXAoKSk7CisgICAgfSBlbHNlIGlmICghYWxsR3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2sgfHwgc2l6
ZSgpID09IDEpIHsKKyAgICAgICAgLy8gSWYgdGhlcmUgYXJlIGFueSBwcm94aWVzIGluIHRoZSBs
aXN0LCB3ZSBjYW5ub3QganVzdCB1c2UgYSBiaW5hcnkgc3dpdGNoIG92ZXIgdGhlIHN0cnVjdHVy
ZS4KKyAgICAgICAgLy8gV2UgbmVlZCB0byByZXNvcnQgdG8gYSBjYXNjYWRlLiBBIGNhc2NhZGUg
YWxzbyBoYXBwZW5zIHRvIGJlIG9wdGltYWwgaWYgd2Ugb25seSBoYXZlIGp1c3QKKyAgICAgICAg
Ly8gb25lIGNhc2UuCisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZmFsbFRocm91Z2g7
CisgICAgICAgIAorICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9saXN0KSB7CisgICAgICAg
ICAgICBmYWxsVGhyb3VnaC5saW5rKCZqaXQpOworICAgICAgICAgICAgZW50cnktPmdlbmVyYXRl
V2l0aEd1YXJkKHN0YXRlLCBmYWxsVGhyb3VnaCk7CisgICAgICAgICAgICByZXN0b3JlU2NyYXRj
aCgpOworICAgICAgICAgICAgc3VjY2Vzcy5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIH0K
KyAgICAgICAgc3RhdGUuZmFpbHVyZS5hcHBlbmQoZmFsbFRocm91Z2gpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGppdC5sb2FkMzIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
c3RhdGUuYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAgICAgICAg
IHN0YXRlLnNjcmF0Y2hHUFIpOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPGludDY0X3Q+IGNh
c2VWYWx1ZXMobV9saXN0LnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX2xpc3Quc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBjYXNlVmFsdWVzW2ldID0gYml0d2lz
ZV9jYXN0PGludDMyX3Q+KG1fbGlzdFtpXS0+c3RydWN0dXJlKCkpOworICAgICAgICAKKyAgICAg
ICAgQmluYXJ5U3dpdGNoIGJpbmFyeVN3aXRjaChzdGF0ZS5zY3JhdGNoR1BSLCBjYXNlVmFsdWVz
LCBCaW5hcnlTd2l0Y2g6OkludDMyKTsKKyAgICAgICAgd2hpbGUgKGJpbmFyeVN3aXRjaC5hZHZh
bmNlKGppdCkpIHsKKyAgICAgICAgICAgIEdldEJ5SWRDYXNlJiBnZXRDYXNlID0gYXQoYmluYXJ5
U3dpdGNoLmNhc2VJbmRleCgpKTsKKyAgICAgICAgICAgIGdldENhc2UuZ2VuZXJhdGUoc3RhdGUp
OworICAgICAgICAgICAgcmVzdG9yZVNjcmF0Y2goKTsKKyAgICAgICAgICAgIHN1Y2Nlc3MuYXBw
ZW5kKGppdC5qdW1wKCkpOworICAgICAgICB9CisgICAgICAgIHN0YXRlLmZhaWx1cmUuYXBwZW5k
KGJpbmFyeVN3aXRjaC5mYWxsVGhyb3VnaCgpKTsKKyAgICB9CisKKyAgICBpZiAoc3RhdGUubmVl
ZFRvUmVzdG9yZVNjcmF0Y2gpIHsKKyAgICAgICAgc3RhdGUuZmFpbHVyZS5saW5rKCZqaXQpOwor
ICAgICAgICByZXN0b3JlU2NyYXRjaCgpOworICAgICAgICBzdGF0ZS5mYWlsdXJlID0gaml0Lmp1
bXAoKTsKICAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOworCisgICAgTGlua0J1ZmZlciBsaW5rQnVm
ZmVyKHZtLCBqaXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICBpZiAo
bGlua0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKQorICAgICAgICByZXR1cm4gTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyKCk7CisKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgc3VjY2Vzc0xhYmVs
ID0KKyAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1
YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKTsKKyAgICAgICAgCisgICAgbGlua0J1ZmZlci5s
aW5rKHN1Y2Nlc3MsIHN1Y2Nlc3NMYWJlbCk7CisKKyAgICBsaW5rQnVmZmVyLmxpbmsoCisgICAg
ICAgIHN0YXRlLmZhaWx1cmUsCisgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5s
YWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKKyAgICAK
KyAgICBmb3IgKGF1dG8gY2FsbGJhY2sgOiBzdGF0ZS5jYWxsYmFja3MpCisgICAgICAgIGNhbGxi
YWNrKGxpbmtCdWZmZXIpOworICAgIAorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlID0g
RklOQUxJWkVfQ09ERV9GT1IoCisgICAgICAgIGNvZGVCTG9jaywgbGlua0J1ZmZlciwKKyAgICAg
ICAgKCIlcyIsIHRvQ1N0cmluZygiR2V0IGFjY2VzcyBzdHViIGZvciAiLCAqY29kZUJsb2NrLCAi
ICIsIHN0dWJJbmZvLmNvZGVPcmlnaW4sICIgd2l0aCByZXR1cm4gcG9pbnQgIiwgc3VjY2Vzc0xh
YmVsKSkpOworCisgICAgYm9vbCBkb2VzQ2FsbHMgPSBmYWxzZTsKKyAgICBmb3IgKGF1dG8gZW50
cnkgOiBtX2xpc3QpCisgICAgICAgIGRvZXNDYWxscyB8PSBlbnRyeS0+ZG9lc0NhbGxzKCk7Cisg
ICAgCisgICAgbV9zdHViUm91dGluZSA9IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKGNvZGUsIHZtLCBj
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBkb2VzQ2FsbHMpOworICAgIHJldHVybiBjb2Rl
LmNvZGUoKTsKIH0KIAotYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojp2aXNpdFdlYWsoVk0m
IHZtKSBjb25zdAorYm9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6dmlzaXRXZWFrKFZNJiB2bSkgY29u
c3QKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXplKCk7IGktLTspIHsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc2l6ZSgpOyArK2kpIHsKICAgICAgICAgaWYgKCFhdChpKS52aXNp
dFdlYWsodm0pKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCShy
ZXZpc2lvbiAxODkzMjQpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY0dldEJ5SWRMaXN0Lmg6MTg5MzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0X2gKKyNkZWZpbmUgUG9seW1vcnBoaWNHZXRC
eUlkTGlzdF9oCisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgor
I2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQuaCIKKyNpbmNsdWRlICJPcGNvZGUuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIK
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb2Rl
QmxvY2s7CitzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm87CisKK2NsYXNzIEdldEJ5SWRBY2Nlc3Mg
eworcHVibGljOgorICAgIGVudW0gQWNjZXNzVHlwZSB7CisgICAgICAgIEludmFsaWQsCisgICAg
ICAgIFNpbXBsZUlubGluZSwgLy8gVGhpcyBpcyB0aGUgcGF0Y2hlZCBpbmxpbmUgYWNjZXNzLgor
ICAgICAgICBTaW1wbGVTdHViLCAvLyBUaGlzIGlzIGEgc3R1Yi4KKyAgICAgICAgV2F0Y2hlZFN0
dWIsCisgICAgICAgIEdldHRlciwKKyAgICAgICAgQ3VzdG9tR2V0dGVyLAorICAgICAgICBTaW1w
bGVNaXNzLAorICAgIH07CisgICAgCisgICAgR2V0QnlJZEFjY2VzcygpCisgICAgICAgIDogbV90
eXBlKEludmFsaWQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBHZXRCeUlkQWNjZXNzKAorICAg
ICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUsIFBhc3NSZWZQdHI8SklUU3R1YlJv
dXRpbmU+LCBTdHJ1Y3R1cmUqLAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpKTsKKyAgICAKKyAgICB+R2V0QnlJ
ZEFjY2VzcygpOworICAgIAorICAgIHN0YXRpYyBHZXRCeUlkQWNjZXNzIGZyb21TdHJ1Y3R1cmVT
dHViSW5mbyhTdHJ1Y3R1cmVTdHViSW5mbyYpOworICAgIAorICAgIGJvb2wgaXNTZXQoKSBjb25z
dCB7IHJldHVybiBtX3R5cGUgIT0gSW52YWxpZDsgfQorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29u
c3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KKyAgICAKKyAgICBBY2Nlc3NUeXBlIHR5cGUoKSBjb25z
dCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICAKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlLmdldCgpOyB9CisgICAgCisgICAgY29uc3QgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29u
ZGl0aW9uU2V0OyB9CisgICAgCisgICAgSklUU3R1YlJvdXRpbmUqIHN0dWJSb3V0aW5lKCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1NldCgpKTsKKyAgICAgICAgcmV0dXJuIG1fc3R1
YlJvdXRpbmUuZ2V0KCk7CisgICAgfQorICAgIAorICAgIGJvb2wgZG9lc0NhbGxzKCkgY29uc3Qg
eyByZXR1cm4gdHlwZSgpID09IEdldHRlciB8fCB0eXBlKCkgPT0gQ3VzdG9tR2V0dGVyOyB9Cisg
ICAgCisgICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBmcmll
bmQgY2xhc3MgQ29kZUJsb2NrOworICAgIAorICAgIEFjY2Vzc1R5cGUgbV90eXBlOworICAgIFdy
aXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOworICAgIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OworICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gbV9z
dHViUm91dGluZTsKK307CisKK2NsYXNzIFBvbHltb3JwaGljR2V0QnlJZExpc3QgeworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIC8vIEVpdGhlciBjcmVhdGVzIGEg
bmV3IHBvbHltb3JwaGljIGdldCBsaXN0LCBvciByZXR1cm5zIHRoZSBvbmUgdGhhdCBpcyBhbHJl
YWR5IGluCisgICAgLy8gcGxhY2UuCisgICAgc3RhdGljIFBvbHltb3JwaGljR2V0QnlJZExpc3Qq
IGZyb20oU3RydWN0dXJlU3R1YkluZm8mKTsKKyAgICAKKyAgICB+UG9seW1vcnBoaWNHZXRCeUlk
TGlzdCgpOworICAgIAorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdXJyZW50U2xvd1BhdGhU
YXJnZXQoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKSBjb25zdDsKKyAgICAKKyAgICB2b2lk
IGFkZEFjY2Vzcyhjb25zdCBHZXRCeUlkQWNjZXNzJik7CisgICAgCisgICAgYm9vbCBpc0VtcHR5
KCkgY29uc3QgeyByZXR1cm4gbV9saXN0LmlzRW1wdHkoKTsgfQorICAgIHVuc2lnbmVkIHNpemUo
KSBjb25zdCB7IHJldHVybiBtX2xpc3Quc2l6ZSgpOyB9CisgICAgYm9vbCBpc0Z1bGwoKSBjb25z
dDsKKyAgICBib29sIGlzQWxtb3N0RnVsbCgpIGNvbnN0OyAvLyBUcnVlIGlmIGFkZGluZyBhbiBl
bGVtZW50IHdvdWxkIG1ha2UgaXNGdWxsKCkgdHJ1ZS4KKyAgICBjb25zdCBHZXRCeUlkQWNjZXNz
JiBhdCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2xpc3RbaV07IH0KKyAgICBjb25zdCBH
ZXRCeUlkQWNjZXNzJiBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbGlz
dFtpXTsgfQorICAgIAorICAgIGJvb2wgZGlkU2VsZlBhdGNoaW5nKCkgY29uc3Q7IC8vIEFyZSBh
bnkgb2YgdGhlIGFjY2Vzc2VzIFNpbXBsZUlubGluZT8KKyAgICAKKyAgICBib29sIHZpc2l0V2Vh
ayhWTSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7Cisg
ICAgCisgICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyYpOworICAg
IAorICAgIFZlY3RvcjxHZXRCeUlkQWNjZXNzLCAyPiBtX2xpc3Q7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKKyNlbmRpZiAvLyBQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Bv
bHltb3JwaGljQWNjZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zOCw5MSArMzgsMTY3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQ29kZUJsb2NrOwor
Y2xhc3MgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDsKIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbzsK
IAotY2xhc3MgR2V0QnlJZEFjY2VzcyB7CitzdHJ1Y3QgQWNjZXNzR2VuZXJhdGlvblN0YXRlOwor
CitjbGFzcyBBY2Nlc3NDYXNlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBY2Nlc3NDYXNl
KTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBlbnVtIEFjY2Vz
c1R5cGUgewogICAgICAgICBJbnZhbGlkLAotICAgICAgICBTaW1wbGVJbmxpbmUsIC8vIFRoaXMg
aXMgdGhlIHBhdGNoZWQgaW5saW5lIGFjY2Vzcy4KLSAgICAgICAgU2ltcGxlU3R1YiwgLy8gVGhp
cyBpcyBhIHN0dWIuCi0gICAgICAgIFdhdGNoZWRTdHViLAorICAgICAgICBMb2FkLAorICAgICAg
ICBUcmFuc2l0aW9uLAorICAgICAgICBSZXBsYWNlLAorICAgICAgICBNaXNzLAogICAgICAgICBH
ZXR0ZXIsCisgICAgICAgIFNldHRlciwKICAgICAgICAgQ3VzdG9tR2V0dGVyLAotICAgICAgICBT
aW1wbGVNaXNzLAorICAgICAgICBDdXN0b21TZXR0ZXIsCisgICAgICAgIEluSGl0LAorICAgICAg
ICBJbk1pc3MKICAgICB9OwogICAgIAotICAgIEdldEJ5SWRBY2Nlc3MoKQorICAgIEFjY2Vzc0Nh
c2UoKQogICAgICAgICA6IG1fdHlwZShJbnZhbGlkKQogICAgIHsKICAgICB9Ci0gICAgCi0gICAg
R2V0QnlJZEFjY2VzcygKLSAgICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBQ
YXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiwgU3RydWN0dXJlKiwKKworICAgIHN0ZDo6dW5pcXVl
X3B0cjxBY2Nlc3NDYXNlPiBnZXQoCisgICAgICAgIFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNz
VHlwZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBib29sIHZpYVByb3h5LCBTdHJ1Y3R1cmUqLAor
ICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCgpLAorICAgICAgICBXYXRjaHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0ID0g
bnVsbHB0ciwKKyAgICAgICAgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgPSBudWxscHRyKTsK
KworICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiB0cmFuc2l0aW9uKAorICAgICAgICBW
TSYsIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5l
d1N0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAorICAgICAgICBjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpKTsKKwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXBsYWNlKAorICAgICAgICBWTSYsIEpT
Q2VsbCogb3duZXIsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQp
OworCisgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHNldHRlcigKKyAgICAgICAgVk0m
LCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCwK
KyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBQdXRQcm9wZXJ0eVNs
b3Q6OlB1dFZhbHVlRnVuYyk7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gaW4o
CisgICAgICAgIFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsCiAgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiA9IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0KCkpOwogICAgIAotICAgIH5HZXRCeUlkQWNjZXNzKCk7Cisg
ICAgfkFjY2Vzc0Nhc2UoKTsKICAgICAKLSAgICBzdGF0aWMgR2V0QnlJZEFjY2VzcyBmcm9tU3Ry
dWN0dXJlU3R1YkluZm8oU3RydWN0dXJlU3R1YkluZm8mKTsKKyAgICBzdGF0aWMgQWNjZXNzQ2Fz
ZSBmcm9tU3RydWN0dXJlU3R1YkluZm8oU3RydWN0dXJlU3R1YkluZm8mKTsKICAgICAKICAgICBi
b29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV90eXBlICE9IEludmFsaWQ7IH0KICAgICBib29s
IG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9CiAgICAgCiAgICAgQWNjZXNz
VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKyAgICBib29sIHZpYVByb3h5KCkg
Y29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPnZpYVByb3h5IDogZmFsc2U7
IH0KICAgICAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Ry
dWN0dXJlLmdldCgpOyB9Ci0gICAgCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9Ci0gICAg
Ci0gICAgSklUU3R1YlJvdXRpbmUqIHN0dWJSb3V0aW5lKCkgY29uc3QKKyAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQoaXNTZXQoKSk7Ci0gICAg
ICAgIHJldHVybiBtX3N0dWJSb3V0aW5lLmdldCgpOworICAgICAgICBpZiAobV9raW5kID09IFRy
YW5zaXRpb24pCisgICAgICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKTsK
KyAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlLmdldCgpOworICAgIH0KKyAgICBib29sIGd1YXJk
ZWRCeVN0cnVjdHVyZUNoZWNrKCkgY29uc3QgeyByZXR1cm4gIXZpYVByb3h5KCk7IH0KKworICAg
IFN0cnVjdHVyZSogbmV3U3RydWN0dXJlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCht
X2tpbmQgPT0gVHJhbnNpdGlvbik7CisgICAgICAgIHJldHVybiBtX3N0cnVjdHVyZS5nZXQoKTsK
ICAgICB9CiAgICAgCi0gICAgYm9vbCBkb2VzQ2FsbHMoKSBjb25zdCB7IHJldHVybiB0eXBlKCkg
PT0gR2V0dGVyIHx8IHR5cGUoKSA9PSBDdXN0b21HZXR0ZXI7IH0KKyAgICBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNl
dDsgfQorCisgICAgV2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCgpIGNvbnN0IHsgbV9yYXJl
RGF0YSA/IG1fcmFyZURhdGEtPmFkZGl0aW9uYWxTZXQuZ2V0KCkgOiBudWxscHRyOyB9CiAgICAg
Ci0gICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25zdDsKKyAgICBib29sIGRvZXNDYWxscygpIGNv
bnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBHZXR0ZXIgfHwgdHlwZSgpID09IEN1c3RvbUdldHRlcjsg
fQogCisgICAgYm9vbCBjYW5SZXBsYWNlKGNvbnN0IEFjY2Vzc0Nhc2UmIG90aGVyKTsKKyAgICAK
IHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKKyAgICBmcmllbmQgY2xhc3Mg
UG9seW1vcnBoaWNBY2Nlc3M7CisKKyAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OworCisg
ICAgLy8gRmFsbCB0aHJvdWdoIG9uIHN1Y2Nlc3MuIFR3byBraW5kcyBvZiBmYWlsdXJlcyBhcmUg
c3VwcG9ydGVkOiBmYWxsLXRocm91Z2gsIHdoaWNoIG1lYW5zIHRoYXQgd2UKKyAgICAvLyBzaG91
bGQgdHJ5IGEgZGlmZmVyZW50IGNhc2U7IGFuZCBmYWlsdXJlLCB3aGljaCBtZWFucyB0aGF0IHRo
aXMgd2FzIHRoZSByaWdodCBjYXNlIGJ1dCBpdCBuZWVkcworICAgIC8vIGhlbHAgZnJvbSB0aGUg
c2xvdyBwYXRoLgorICAgIHZvaWQgZ2VuZXJhdGVXaXRoR3VhcmQoQWNjZXNzR2VuZXJhdGlvblN0
YXRlJiwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCYgZmFsbFRocm91Z2gpOworCisgICAgLy8gRmFs
bCB0aHJvdWdoIG9uIHN1Y2Nlc3MsIGFkZCBhIGp1bXAgdG8gdGhlIGZhaWx1cmUgbGlzdCBvbiBm
YWlsdXJlLgorICAgIHZvaWQgZ2VuZXJhdGUoQWNjZXNzR2VuZXJhdGlvblN0YXRlJik7CiAgICAg
CiAgICAgQWNjZXNzVHlwZSBtX3R5cGU7CisgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7CisK
KyAgICAvLyBVc3VhbGx5IHRoaXMgaXMgdGhlIHN0cnVjdHVyZSB0aGF0IHdlIGV4cGVjdCB0aGUg
YmFzZSBvYmplY3QgdG8gaGF2ZS4gQnV0LCB0aGlzIGlzIHRoZSAqbmV3KgorICAgIC8vIHN0cnVj
dHVyZSBmb3IgYSB0cmFuc2l0aW9uIGFuZCB3ZSByZWx5IG9uIHRoZSBmYWN0IHRoYXQgaXQgaGFz
IGEgc3Ryb25nIHJlZmVyZW5jZSB0byB0aGUgb2xkCisgICAgLy8gc3RydWN0dXJlLiBGb3IgcHJv
eGllcywgdGhpcyBpcyB0aGUgc3RydWN0dXJlIG9mIHRoZSBvYmplY3QgYmVoaW5kIHRoZSBwcm94
eS4KICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cnVjdHVyZTsKKwogICAgIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OwotICAgIFJlZlB0cjxKSVRTdHVi
Um91dGluZT4gbV9zdHViUm91dGluZTsKKworICAgIGNsYXNzIFJhcmVEYXRhIHsKKyAgICAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgcHVibGljOgorICAgICAgICBib29sIHZpYVBy
b3h5OworICAgICAgICBSZWZQdHI8V2F0Y2hwb2ludFNldD4gYWRkaXRpb25hbFNldDsKKyAgICAg
ICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rSW5mbz4gY2FsbExpbmtJbmZvOworICAgICAgICB1
bmlvbiB7CisgICAgICAgICAgICBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYyBnZXR0ZXI7Cisg
ICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyBzZXR0ZXI7CisgICAgICAg
IH0gY3VzdG9tQWNjZXNzb3I7CisgICAgfTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxSYXJlRGF0
YT4gbV9yYXJlRGF0YTsKIH07CiAKLWNsYXNzIFBvbHltb3JwaGljR2V0QnlJZExpc3QgeworY2xh
c3MgUG9seW1vcnBoaWNBY2Nlc3MgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBvbHltb3Jw
aGljQWNjZXNzKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICAv
LyBFaXRoZXIgY3JlYXRlcyBhIG5ldyBwb2x5bW9ycGhpYyBnZXQgbGlzdCwgb3IgcmV0dXJucyB0
aGUgb25lIHRoYXQgaXMgYWxyZWFkeSBpbgogICAgIC8vIHBsYWNlLgotICAgIHN0YXRpYyBQb2x5
bW9ycGhpY0dldEJ5SWRMaXN0KiBmcm9tKFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxQb2x5bW9ycGhpY0FjY2Vzcz4gZnJvbShTdHJ1Y3R1cmVTdHViSW5m
byYpOwogICAgIAotICAgIH5Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0KCk7Ci0gICAgCi0gICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyIGN1cnJlbnRTbG93UGF0aFRhcmdldChTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8pIGNvbnN0OwotICAgIAotICAgIHZvaWQgYWRkQWNjZXNzKGNvbnN0IEdldEJ5
SWRBY2Nlc3MmKTsKKyAgICB+UG9seW1vcnBoaWNBY2Nlc3MoKTsKKworICAgIC8vIFRoaXMgY2xl
YXJzIHRoZSBvbGQgc3R1YiByb3V0aW5lIGFuZCB0aGVuIHJlZ2VuZXJhdGVzIHdpdGggYSBuZXcg
Y2FzZS4gVGhpcyBtYXkgcmV0dXJuIG51bGwgdG8KKyAgICAvLyBpbmRpY2F0ZSBzb21lIHNvcnQg
b2YgZmFpbHVyZS4gV2hlbiB0aGF0IGhhcHBlbnMsIGl0IG1lYW5zIHRoYXQgd2UgYXJlIHJlcXVl
c3RpbmcgYSByZXNldCBvZiB0aGUKKyAgICAvLyBvd25pbmcgU3RydWN0dXJlU3R1YkluZm8uIFRo
YXQncyBiZWNhdXNlIHRoZSBvbGQgc3R1YiByb3V0aW5lIGhhcyBhbHJlYWR5IGJlZW4gZGVsZXRl
ZC4KKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVnZW5lcmF0ZVdpdGhDYXNlKHN0ZDo6dW5p
cXVlX3B0cjxBY2Nlc3NDYXNlPik7CiAgICAgCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9saXN0LmlzRW1wdHkoKTsgfQogICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX2xpc3Quc2l6ZSgpOyB9CiAgICAgYm9vbCBpc0Z1bGwoKSBjb25zdDsKICAgICBib29s
IGlzQWxtb3N0RnVsbCgpIGNvbnN0OyAvLyBUcnVlIGlmIGFkZGluZyBhbiBlbGVtZW50IHdvdWxk
IG1ha2UgaXNGdWxsKCkgdHJ1ZS4KLSAgICBjb25zdCBHZXRCeUlkQWNjZXNzJiBhdCh1bnNpZ25l
ZCBpKSBjb25zdCB7IHJldHVybiBtX2xpc3RbaV07IH0KLSAgICBjb25zdCBHZXRCeUlkQWNjZXNz
JiBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdFtpXTsgfQotICAg
IAotICAgIGJvb2wgZGlkU2VsZlBhdGNoaW5nKCkgY29uc3Q7IC8vIEFyZSBhbnkgb2YgdGhlIGFj
Y2Vzc2VzIFNpbXBsZUlubGluZT8KLSAgICAKKyAgICBjb25zdCBBY2Nlc3NDYXNlJiBhdCh1bnNp
Z25lZCBpKSBjb25zdCB7IHJldHVybiAqbV9saXN0W2ldOyB9CisgICAgY29uc3QgQWNjZXNzQ2Fz
ZSYgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiAqbV9saXN0W2ldOyB9CisK
KyAgICAvLyBJZiB0aGlzIHJldHVybnMgZmFsc2UgdGhlbiB3ZSBhcmUgcmVxdWVzdGluZyBhIHJl
c2V0IG9mIHRoZSBvd25pbmcgU3RydWN0dXJlU3R1YkluZm8uCiAgICAgYm9vbCB2aXNpdFdlYWso
Vk0mKSBjb25zdDsKIAogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQWNjZXNzQ2FzZTsKICAg
ICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOwogICAgIAotICAgIFBvbHltb3JwaGljR2V0QnlJZExp
c3QoU3RydWN0dXJlU3R1YkluZm8mKTsKKyAgICBQb2x5bW9ycGhpY0FjY2VzcyhTdHJ1Y3R1cmVT
dHViSW5mbyYpOworCisgICAgV2F0Y2hwb2ludCogYWRkV2F0Y2hwb2ludCgKKyAgICAgICAgQWNj
ZXNzR2VuZXJhdGlvblN0YXRlJiwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mID0gT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24oKSk7CisgICAgCisgICAgdm9pZCBhZGRBY2Nlc3NDYXNlKHN0
ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJl
Z2VuZXJhdGUoVk0mLCBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIGNvbnN0IElkZW50
aWZpZXImKTsKICAgICAKLSAgICBWZWN0b3I8R2V0QnlJZEFjY2VzcywgMj4gbV9saXN0OworICAg
IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4sIDI+IG1fbGlzdDsKKyAgICBSZWZQ
dHI8SklUU3R1YlJvdXRpbmU+IG1fc3R1YlJvdXRpbmU7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdh
dGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbz4gbV93YXRjaHBvaW50czsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHlt
b3JwaGljR2V0QnlJZExpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcAkocmV2aXNpb24gMTg5MzI0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE1NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgiCi0KLSNpZiBFTkFCTEUoSklUKQotCi0j
aW5jbHVkZSAiQ29kZUJsb2NrLmgiCi0jaW5jbHVkZSAiSGVhcC5oIgotI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgotCi1uYW1lc3BhY2UgSlND
IHsKLQotR2V0QnlJZEFjY2Vzczo6R2V0QnlJZEFjY2VzcygKLSAgICBWTSYgdm0sIEpTQ2VsbCog
b3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJv
dXRpbmUsCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCi0gICAgOiBtX3R5cGUodHlwZSkKLSAgICAsIG1fc3Ry
dWN0dXJlKHZtLCBvd25lciwgc3RydWN0dXJlKQotICAgICwgbV9jb25kaXRpb25TZXQoY29uZGl0
aW9uU2V0KQotICAgICwgbV9zdHViUm91dGluZShzdHViUm91dGluZSkKLXsKLX0KLQotR2V0QnlJ
ZEFjY2Vzczo6fkdldEJ5SWRBY2Nlc3MoKQotewotfQotCi1HZXRCeUlkQWNjZXNzIEdldEJ5SWRB
Y2Nlc3M6OmZyb21TdHJ1Y3R1cmVTdHViSW5mbyhTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8p
Ci17Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGluaXRpYWxTbG93UGF0aCA9Ci0gICAgICAg
IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNo
LmRlbHRhQ2FsbFRvU2xvd0Nhc2UpOwotICAgIAotICAgIEdldEJ5SWRBY2Nlc3MgcmVzdWx0Owot
ICAgIAotICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dl
dF9ieV9pZF9zZWxmKTsKLSAgICAKLSAgICByZXN1bHQubV90eXBlID0gU2ltcGxlSW5saW5lOwot
ICAgIHJlc3VsdC5tX3N0cnVjdHVyZS5jb3B5RnJvbShzdHViSW5mby51LmdldEJ5SWRTZWxmLmJh
c2VPYmplY3RTdHJ1Y3R1cmUpOwotICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gSklUU3R1YlJv
dXRpbmU6OmNyZWF0ZVNlbGZNYW5hZ2VkUm91dGluZShpbml0aWFsU2xvd1BhdGgpOwotICAgIAot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgR2V0QnlJZEFjY2Vzczo6dmlzaXRXZWFrKFZN
JiB2bSkgY29uc3QKLXsKLSAgICBpZiAobV9zdHJ1Y3R1cmUgJiYgIUhlYXA6OmlzTWFya2VkKG1f
c3RydWN0dXJlLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghbV9jb25k
aXRpb25TZXQuYXJlU3RpbGxMaXZlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAo
IW1fc3R1YlJvdXRpbmUtPnZpc2l0V2Vhayh2bSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6UG9seW1vcnBoaWNH
ZXRCeUlkTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAgaWYgKHN0dWJJ
bmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0KQotICAgICAgICByZXR1cm47Ci0gICAgCi0g
ICAgbV9saXN0LmFwcGVuZChHZXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0dXJlU3R1YkluZm8oc3R1
YkluZm8pKTsKLX0KLQotUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogUG9seW1vcnBoaWNHZXRCeUlk
TGlzdDo6ZnJvbShTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAgaWYgKHN0dWJJ
bmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9saXN0KQotICAgICAgICByZXR1cm4g
c3R1YkluZm8udS5nZXRCeUlkTGlzdC5saXN0OwotICAgIAotICAgIEFTU0VSVCgKLSAgICAgICAg
c3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYKLSAgICAgICAgfHwg
c3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpOwotICAgIAotICAgIFBvbHltb3Jw
aGljR2V0QnlJZExpc3QqIHJlc3VsdCA9IG5ldyBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KHN0dWJJ
bmZvKTsKLSAgICAKLSAgICBzdHViSW5mby5pbml0R2V0QnlJZExpc3QocmVzdWx0KTsKLSAgICAK
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojp+UG9seW1v
cnBoaWNHZXRCeUlkTGlzdCgpIHsgfQotCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHIgUG9seW1vcnBo
aWNHZXRCeUlkTGlzdDo6Y3VycmVudFNsb3dQYXRoVGFyZ2V0KAotICAgIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbykgY29uc3QKLXsKLSAgICBpZiAoaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm4gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0
Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSk7Ci0gICAgcmV0dXJuIG1fbGlzdC5sYXN0KCkuc3R1YlJv
dXRpbmUoKS0+Y29kZSgpLmNvZGUoKTsKLX0KLQotdm9pZCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0
OjphZGRBY2Nlc3MoY29uc3QgR2V0QnlJZEFjY2VzcyYgYWNjZXNzKQotewotICAgIEFTU0VSVCgh
aXNGdWxsKCkpOwotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSByZXNpemluZyBvcHRpbWl6ZXMg
Zm9yIHNwYWNlLCBub3QgdGltZS4KLSAgICBtX2xpc3QucmVzaXplVG9GaXQobV9saXN0LnNpemUo
KSArIDEpOwotICAgIG1fbGlzdC5sYXN0KCkgPSBhY2Nlc3M7Ci19Ci0KLWJvb2wgUG9seW1vcnBo
aWNHZXRCeUlkTGlzdDo6aXNGdWxsKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoc2l6ZSgpIDw9IFBP
TFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSk7Ci0gICAgcmV0dXJuIHNpemUoKSA9PSBQT0xZTU9S
UEhJQ19MSVNUX0NBQ0hFX1NJWkU7Ci19Ci0KLWJvb2wgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6
aXNBbG1vc3RGdWxsKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoc2l6ZSgpIDw9IFBPTFlNT1JQSElD
X0xJU1RfQ0FDSEVfU0laRSk7Ci0gICAgcmV0dXJuIHNpemUoKSA+PSBQT0xZTU9SUEhJQ19MSVNU
X0NBQ0hFX1NJWkUgLSAxOwotfQotCi1ib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmRpZFNl
bGZQYXRjaGluZygpIGNvbnN0Ci17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gc2l6ZSgpOyBpLS07
KSB7Ci0gICAgICAgIGlmIChhdChpKS50eXBlKCkgPT0gR2V0QnlJZEFjY2Vzczo6U2ltcGxlSW5s
aW5lKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojp2aXNpdFdlYWsoVk0mIHZtKSBjb25z
dAotewotICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUoKTsgaS0tOykgewotICAgICAgICBpZiAo
IWF0KGkpLnZpc2l0V2Vhayh2bSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
ICAgIHJldHVybiB0cnVlOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEVO
QUJMRShKSVQpCi0KLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHlt
b3JwaGljR2V0QnlJZExpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oCShyZXZpc2lvbiAxODkzMjQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDEzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0
LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgUG9seW1vcnBoaWNHZXRCeUlkTGlz
dF9oCi0jZGVmaW5lIFBvbHltb3JwaGljR2V0QnlJZExpc3RfaAotCi0jaWYgRU5BQkxFKEpJVCkK
LQotI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKLSNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgot
I2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiCi0jaW5jbHVkZSAiT3Bjb2Rl
LmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlLmgiCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1u
YW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgQ29kZUJsb2NrOwotc3RydWN0IFN0cnVjdHVyZVN0dWJJ
bmZvOwotCi1jbGFzcyBHZXRCeUlkQWNjZXNzIHsKLXB1YmxpYzoKLSAgICBlbnVtIEFjY2Vzc1R5
cGUgewotICAgICAgICBJbnZhbGlkLAotICAgICAgICBTaW1wbGVJbmxpbmUsIC8vIFRoaXMgaXMg
dGhlIHBhdGNoZWQgaW5saW5lIGFjY2Vzcy4KLSAgICAgICAgU2ltcGxlU3R1YiwgLy8gVGhpcyBp
cyBhIHN0dWIuCi0gICAgICAgIFdhdGNoZWRTdHViLAotICAgICAgICBHZXR0ZXIsCi0gICAgICAg
IEN1c3RvbUdldHRlciwKLSAgICAgICAgU2ltcGxlTWlzcywKLSAgICB9OwotICAgIAotICAgIEdl
dEJ5SWRBY2Nlc3MoKQotICAgICAgICA6IG1fdHlwZShJbnZhbGlkKQotICAgIHsKLSAgICB9Ci0g
ICAgCi0gICAgR2V0QnlJZEFjY2VzcygKLSAgICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nl
c3NUeXBlLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiwgU3RydWN0dXJlKiwKLSAgICAgICAg
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQoKSk7Ci0gICAgCi0gICAgfkdldEJ5SWRBY2Nlc3MoKTsKLSAgICAKLSAgICBzdGF0aWMg
R2V0QnlJZEFjY2VzcyBmcm9tU3RydWN0dXJlU3R1YkluZm8oU3RydWN0dXJlU3R1YkluZm8mKTsK
LSAgICAKLSAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV90eXBlICE9IEludmFsaWQ7
IH0KLSAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9Ci0gICAg
Ci0gICAgQWNjZXNzVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAgCi0g
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZS5nZXQo
KTsgfQotICAgIAotICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRp
b25TZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQotICAgIAotICAgIEpJVFN0
dWJSb3V0aW5lKiBzdHViUm91dGluZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaXNT
ZXQoKSk7Ci0gICAgICAgIHJldHVybiBtX3N0dWJSb3V0aW5lLmdldCgpOwotICAgIH0KLSAgICAK
LSAgICBib29sIGRvZXNDYWxscygpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBHZXR0ZXIgfHwg
dHlwZSgpID09IEN1c3RvbUdldHRlcjsgfQotICAgIAotICAgIGJvb2wgdmlzaXRXZWFrKFZNJikg
Y29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKLSAgICAKLSAg
ICBBY2Nlc3NUeXBlIG1fdHlwZTsKLSAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cnVj
dHVyZTsKLSAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKLSAg
ICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IG1fc3R1YlJvdXRpbmU7Ci19OwotCi1jbGFzcyBQb2x5
bW9ycGhpY0dldEJ5SWRMaXN0IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1Ymxp
YzoKLSAgICAvLyBFaXRoZXIgY3JlYXRlcyBhIG5ldyBwb2x5bW9ycGhpYyBnZXQgbGlzdCwgb3Ig
cmV0dXJucyB0aGUgb25lIHRoYXQgaXMgYWxyZWFkeSBpbgotICAgIC8vIHBsYWNlLgotICAgIHN0
YXRpYyBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBmcm9tKFN0cnVjdHVyZVN0dWJJbmZvJik7Ci0g
ICAgCi0gICAgflBvbHltb3JwaGljR2V0QnlJZExpc3QoKTsKLSAgICAKLSAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgY3VycmVudFNsb3dQYXRoVGFyZ2V0KFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbykgY29uc3Q7Ci0gICAgCi0gICAgdm9pZCBhZGRBY2Nlc3MoY29uc3QgR2V0QnlJZEFjY2Vz
cyYpOwotICAgIAotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5pc0Vt
cHR5KCk7IH0KLSAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9saXN0LnNpemUo
KTsgfQotICAgIGJvb2wgaXNGdWxsKCkgY29uc3Q7Ci0gICAgYm9vbCBpc0FsbW9zdEZ1bGwoKSBj
b25zdDsgLy8gVHJ1ZSBpZiBhZGRpbmcgYW4gZWxlbWVudCB3b3VsZCBtYWtlIGlzRnVsbCgpIHRy
dWUuCi0gICAgY29uc3QgR2V0QnlJZEFjY2VzcyYgYXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1
cm4gbV9saXN0W2ldOyB9Ci0gICAgY29uc3QgR2V0QnlJZEFjY2VzcyYgb3BlcmF0b3JbXSh1bnNp
Z25lZCBpKSBjb25zdCB7IHJldHVybiBtX2xpc3RbaV07IH0KLSAgICAKLSAgICBib29sIGRpZFNl
bGZQYXRjaGluZygpIGNvbnN0OyAvLyBBcmUgYW55IG9mIHRoZSBhY2Nlc3NlcyBTaW1wbGVJbmxp
bmU/Ci0gICAgCi0gICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25zdDsKLQotcHJpdmF0ZToKLSAg
ICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOwotICAgIAotICAgIFBvbHltb3JwaGljR2V0QnlJZExp
c3QoU3RydWN0dXJlU3R1YkluZm8mKTsKLSAgICAKLSAgICBWZWN0b3I8R2V0QnlJZEFjY2Vzcywg
Mj4gbV9saXN0OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUo
SklUKQotCi0jZW5kaWYgLy8gUG9seW1vcnBoaWNHZXRCeUlkTGlzdF9oCi0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMTg5MzI0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTYzLDcgKzU2Myw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJyYW5j
aDMyKEVxdWFsLCByZWdzLnRhZ0dQUigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1
ZVRhZykpOwogI2VuZGlmCiAgICAgfQotICAgIAorCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4K
ICAgICBKdW1wIGJyYW5jaFN0cnVjdHVyZShSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwg
VCBsZWZ0SGFuZFNpZGUsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260638</attachid>
            <date>2015-09-04 16:02:43 -0700</date>
            <delta_ts>2015-09-05 11:44:49 -0700</delta_ts>
            <desc>just a bit more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>55164</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3Jw
aGljQWNjZXNzLmNwcAkocmV2aXNpb24gMTg5MzI0KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHA6MTg5MzI0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDE1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUG9seW1v
cnBoaWNHZXRCeUlkTGlzdC5oIgorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkNvZGVC
bG9jay5oIgorI2luY2x1ZGUgIkhlYXAuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5j
bHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0dldEJ5SWRB
Y2Nlc3M6OkdldEJ5SWRBY2Nlc3MoCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NU
eXBlIHR5cGUsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lLAorICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29u
ZGl0aW9uU2V0KQorICAgIDogbV90eXBlKHR5cGUpCisgICAgLCBtX3N0cnVjdHVyZSh2bSwgb3du
ZXIsIHN0cnVjdHVyZSkKKyAgICAsIG1fY29uZGl0aW9uU2V0KGNvbmRpdGlvblNldCkKKyAgICAs
IG1fc3R1YlJvdXRpbmUoc3R1YlJvdXRpbmUpCit7Cit9CisKK0dldEJ5SWRBY2Nlc3M6On5HZXRC
eUlkQWNjZXNzKCkKK3sKK30KKworR2V0QnlJZEFjY2VzcyBHZXRCeUlkQWNjZXNzOjpmcm9tU3Ry
dWN0dXJlU3R1YkluZm8oU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBpbml0aWFsU2xvd1BhdGggPQorICAgICAgICBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Ns
b3dDYXNlKTsKKyAgICAKKyAgICBHZXRCeUlkQWNjZXNzIHJlc3VsdDsKKyAgICAKKyAgICBSRUxF
QVNFX0FTU0VSVChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZik7
CisgICAgCisgICAgcmVzdWx0Lm1fdHlwZSA9IFNpbXBsZUlubGluZTsKKyAgICByZXN1bHQubV9z
dHJ1Y3R1cmUuY29weUZyb20oc3R1YkluZm8udS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0
dXJlKTsKKyAgICByZXN1bHQubV9zdHViUm91dGluZSA9IEpJVFN0dWJSb3V0aW5lOjpjcmVhdGVT
ZWxmTWFuYWdlZFJvdXRpbmUoaW5pdGlhbFNsb3dQYXRoKTsKKyAgICAKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitib29sIEdldEJ5SWRBY2Nlc3M6OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0Cit7
CisgICAgaWYgKG1fc3RydWN0dXJlICYmICFIZWFwOjppc01hcmtlZChtX3N0cnVjdHVyZS5nZXQo
KSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW1fY29uZGl0aW9uU2V0LmFyZVN0
aWxsTGl2ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFtX3N0dWJSb3V0aW5l
LT52aXNpdFdlYWsodm0pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK1BvbHltb3JwaGljR2V0QnlJZExpc3Q6OlBvbHltb3JwaGljR2V0QnlJZExpc3QoU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBl
ID09IGFjY2Vzc191bnNldCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fbGlzdC5hcHBl
bmQoR2V0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKHN0dWJJbmZvKSk7Cit9CisK
K1BvbHltb3JwaGljR2V0QnlJZExpc3QqIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmZyb20oU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBl
ID09IGFjY2Vzc19nZXRfYnlfaWRfbGlzdCkKKyAgICAgICAgcmV0dXJuIHN0dWJJbmZvLnUuZ2V0
QnlJZExpc3QubGlzdDsKKyAgICAKKyAgICBBU1NFUlQoCisgICAgICAgIHN0dWJJbmZvLmFjY2Vz
c1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmCisgICAgICAgIHx8IHN0dWJJbmZvLmFjY2Vz
c1R5cGUgPT0gYWNjZXNzX3Vuc2V0KTsKKyAgICAKKyAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0
KiByZXN1bHQgPSBuZXcgUG9seW1vcnBoaWNHZXRCeUlkTGlzdChzdHViSW5mbyk7CisgICAgCisg
ICAgc3R1YkluZm8uaW5pdEdldEJ5SWRMaXN0KHJlc3VsdCk7CisgICAgCisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6flBvbHltb3JwaGljR2V0QnlJZExp
c3QoKSB7IH0KKworTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6
OmN1cnJlbnRTbG93UGF0aFRhcmdldCgKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8p
IGNvbnN0Cit7CisgICAgaWYgKGlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRv
U2xvd0Nhc2UpOworICAgIHJldHVybiBtX2xpc3QubGFzdCgpLnN0dWJSb3V0aW5lKCktPmNvZGUo
KS5jb2RlKCk7Cit9CisKK3ZvaWQgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6YWRkQWNjZXNzKGNv
bnN0IEdldEJ5SWRBY2Nlc3MmIGFjY2VzcykKK3sKKyAgICBBU1NFUlQoIWlzRnVsbCgpKTsKKyAg
ICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgcmVzaXppbmcgb3B0aW1pemVzIGZvciBzcGFjZSwgbm90
IHRpbWUuCisgICAgbV9saXN0LnJlc2l6ZVRvRml0KG1fbGlzdC5zaXplKCkgKyAxKTsKKyAgICBt
X2xpc3QubGFzdCgpID0gYWNjZXNzOworfQorCitib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6
OmlzRnVsbCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKHNpemUoKSA8PSBQT0xZTU9SUEhJQ19MSVNU
X0NBQ0hFX1NJWkUpOworICAgIHJldHVybiBzaXplKCkgPT0gUE9MWU1PUlBISUNfTElTVF9DQUNI
RV9TSVpFOworfQorCitib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmlzQWxtb3N0RnVsbCgp
IGNvbnN0Cit7CisgICAgQVNTRVJUKHNpemUoKSA8PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJ
WkUpOworICAgIHJldHVybiBzaXplKCkgPj0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIC0g
MTsKK30KKworYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpkaWRTZWxmUGF0Y2hpbmcoKSBj
b25zdAoreworICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUoKTsgaS0tOykgeworICAgICAgICBp
ZiAoYXQoaSkudHlwZSgpID09IEdldEJ5SWRBY2Nlc3M6OlNpbXBsZUlubGluZSkKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUG9s
eW1vcnBoaWNHZXRCeUlkTGlzdDo6dmlzaXRXZWFrKFZNJiB2bSkgY29uc3QKK3sKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBzaXplKCk7IGktLTspIHsKKyAgICAgICAgaWYgKCFhdChpKS52aXNpdFdl
YWsodm0pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3Jw
aGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQs
NyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0LmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKIAogI2lmIEVOQUJM
RShKSVQpCiAKQEAgLTM1LDU2ICszNSw0MzAgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUdldEJ5
SWRBY2Nlc3M6OkdldEJ5SWRBY2Nlc3MoCi0gICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nl
c3NUeXBlIHR5cGUsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lLAotICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYg
Y29uZGl0aW9uU2V0KQorc3RydWN0IEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSB7CisgICAgQ0NhbGxI
ZWxwZXJzKiBqaXQgeyBudWxscHRyIH07CisgICAgUG9seW1vcnBoaWNBY2Nlc3MqIGFjY2VzcyB7
IG51bGxwdHIgfTsKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8geyBudWxscHRyIH07
CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBmYWlsdXJlOworICAgIEdQUlJlZyBiYXNlR1BS
IHsgSW52YWxpZEdQUlJlZyB9OworICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVnczsKKyAgICBHUFJS
ZWcgc2NyYXRjaEdQUiB7IEludmFsaWRHUFJSZWcgfTsKKyAgICBib29sIG5lZWRUb1Jlc3RvcmVT
Y3JhdGNoIHsgZmFsc2UgfTsKKyAgICBWZWN0b3I8c3RkOjpmdW5jdGlvbjx2b2lkKExpbmtCdWZm
ZXImKT4gY2FsbGJhY2tzOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50OworfTsKKworQWNj
ZXNzQ2FzZTo6QWNjZXNzQ2FzZSgKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5
cGUgdHlwZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBib29sIHZpYVByb3h5LAorICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0
aW9uU2V0LAorICAgIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQpCiAgICAgOiBtX3R5cGUo
dHlwZSkKKyAgICAsIG1fb2Zmc2V0KG9mZnNldCkKICAgICAsIG1fc3RydWN0dXJlKHZtLCBvd25l
ciwgc3RydWN0dXJlKQogICAgICwgbV9jb25kaXRpb25TZXQoY29uZGl0aW9uU2V0KQotICAgICwg
bV9zdHViUm91dGluZShzdHViUm91dGluZSkKIHsKKyAgICBpZiAodmlhUHJveHkgfHwgYWRkaXRp
b25hbFNldCB8fCBkb2VzQ2FsbHMoKSkgeworICAgICAgICBtX3JhcmVEYXRhID0gc3RkOjptYWtl
X3VuaXF1ZTxSYXJlRGF0YT4oKTsKKyAgICAgICAgbV9yYXJlRGF0YS0+dmlhUHJveHkgPSB2aWFQ
cm94eTsKKyAgICAgICAgbV9yYXJlRGF0YS0+YWRkaXRpb25hbFNldCA9IGFkZGl0aW9uYWxTZXQ7
CisgICAgfQogfQogCi1HZXRCeUlkQWNjZXNzOjp+R2V0QnlJZEFjY2VzcygpCitBY2Nlc3NDYXNl
Ojp+QWNjZXNzQ2FzZSgpCiB7CiB9CiAKLUdldEJ5SWRBY2Nlc3MgR2V0QnlJZEFjY2Vzczo6ZnJv
bVN0cnVjdHVyZVN0dWJJbmZvKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK0FjY2Vzc0Nh
c2UgQWNjZXNzQ2FzZTo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbykKIHsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgaW5pdGlhbFNsb3dQYXRoID0K
ICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1Yklu
Zm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSk7CiAgICAgCi0gICAgR2V0QnlJZEFjY2VzcyBy
ZXN1bHQ7CisgICAgLy8gRklYTUU6IFRoaXMgaXMgYWxsIHNvIHdyb25nLgogICAgIAorICAgIEFj
Y2Vzc0Nhc2UgcmVzdWx0OworCiAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8uYWNjZXNzVHlw
ZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYpOwogICAgIAogICAgIHJlc3VsdC5tX3R5cGUgPSBT
aW1wbGVJbmxpbmU7CiAgICAgcmVzdWx0Lm1fc3RydWN0dXJlLmNvcHlGcm9tKHN0dWJJbmZvLnUu
Z2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZSk7Ci0gICAgcmVzdWx0Lm1fc3R1YlJvdXRp
bmUgPSBKSVRTdHViUm91dGluZTo6Y3JlYXRlU2VsZk1hbmFnZWRSb3V0aW5lKGluaXRpYWxTbG93
UGF0aCk7CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotYm9vbCBHZXRCeUlkQWNjZXNz
Ojp2aXNpdFdlYWsoVk0mIHZtKSBjb25zdAorYm9vbCBBY2Nlc3NDYXNlOjp2aXNpdFdlYWsoVk0m
IHZtKSBjb25zdAogewogICAgIGlmIChtX3N0cnVjdHVyZSAmJiAhSGVhcDo6aXNNYXJrZWQobV9z
dHJ1Y3R1cmUuZ2V0KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFtX2NvbmRp
dGlvblNldC5hcmVTdGlsbExpdmUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICgh
bV9zdHViUm91dGluZS0+dmlzaXRXZWFrKHZtKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGlmIChtX3JhcmVEYXRhICYmIG1fcmFyZURhdGEtPmNhbGxMaW5rSW5mbykKKyAgICAgICAgbV9y
YXJlRGF0YS0+Y2FsbExpbmtJbmZvLT52aXNpdFdlYWsodm0pOwogICAgIHJldHVybiB0cnVlOwog
fQogCi1Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3ZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3Vh
cmQoCisgICAgQWNjZXNzR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSwgQ0NhbGxIZWxwZXJzOjpKdW1w
TGlzdCYgZmFsbFRocm91Z2gpCit7CisgICAgQ0NhbGxIZWxwZXJzJiBqaXQgPSAqc3RhdGUuaml0
OworCisgICAgaWYgKHZpYVByb3h5KCkpIHsKKyAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKAor
ICAgICAgICAgICAgaml0LmJyYW5jaDgoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpO
b3RFcXVhbCwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RhdGUuYmFz
ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoUHVyZUZvcndhcmRpbmdQcm94eVR5cGUpKSk7CisKKyAg
ICAgICAgaml0LmxvYWRQdHIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3Rh
dGUuYmFzZUdQUiwgSlNQcm94eTo6dGFyZ2V0T2Zmc2V0KCkpLAorICAgICAgICAgICAgc3RhdGUu
c2NyYXRjaEdQUik7CisKKyAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKAorICAgICAgICAgICAg
aml0LmJyYW5jaFN0cnVjdHVyZSgKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVx
dWFsLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdGF0ZS5zY3JhdGNo
R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIHN0cnVj
dHVyZSgpKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKAorICAg
ICAgICAgICAgaml0LmJyYW5jaFN0cnVjdHVyZSgKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdGF0
ZS5iYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAorICAgICAgICAgICAgICAg
IHN0cnVjdHVyZSgpKSk7CisgICAgfQorCisgICAgZ2VuZXJhdGUoc3RhdGUpOworfQorCit2b2lk
IEFjY2Vzc0Nhc2U6OmdlbmVyYXRlKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCit7Cisg
ICAgQ0NhbGxIZWxwZXJzJiBqaXQgPSAqc3RhdGUuaml0OworICAgIFZNJiB2bSA9ICpqaXQudm0o
KTsKKyAgICBQb2x5bW9ycGhpY0FjY2VzcyYgYWNjZXNzID0gKnN0YXRlLmFjY2VzczsKKyAgICBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSAqc3RhdGUuc3R1YkluZm87CisgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBqaXQuY29kZUJsb2NrKCk7CisgICAgY29uc3QgSWRlbnRpZmllciYg
aWRlbnQgPSAqc3RhdGUuaWRlbnQ7CisgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzID0gc3RhdGUu
dmFsdWVSZWdzOworICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGUuYmFzZUdQUjsKKyAgICBHUFJS
ZWcgc2NyYXRjaEdQUiA9IHN0YXRlLnNjcmF0Y2hHUFI7CisKKyAgICBBU1NFUlQobV9jb25kaXRp
b25TZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNo
cG9pbnQoKSk7CisKKyAgICBpZiAoc3RydWN0dXJlKCktPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNo
cG9pbnQoKSB8fCBtX2NvbmRpdGlvblNldC5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkp
CisgICAgICAgIHZtLnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KGlkZW50LCBh
Y2Nlc3MuYWRkV2F0Y2hwb2ludChzdGF0ZSkpOworCisgICAgaWYgKGFkZGl0aW9uYWxTZXQoKSkK
KyAgICAgICAgYWRkaXRpb25hbFNldCgpLT5hZGQoYWNjZXNzLmFkZFdhdGNocG9pbnQoc3RhdGUp
KTsKKworICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6
IG1fY29uZGl0aW9uU2V0KSB7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY29uZGl0
aW9uLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKTsKKworICAgICAgICBpZiAoY29uZGl0aW9uLmlzV2F0
Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkgeworICAgICAgICAgICAg
c3RydWN0dXJlLT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludChhY2Nlc3MuYWRkV2F0Y2hwb2ludChz
dGF0ZSwgY29uZGl0aW9uKSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbmRpdGlvbi5zdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlB
c3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUpKTsKKyAgICAgICAgaml0
Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNvbmRpdGlvbi5vYmplY3QoKSksIHNj
cmF0Y2hHUFIpOworICAgICAgICBzdGF0ZS5mYWlsdXJlLmFwcGVuZCgKKyAgICAgICAgICAgIGpp
dC5icmFuY2hTdHJ1Y3R1cmUoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVh
bCwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgSlND
ZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUpKTsK
KyAgICB9CisKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgSW52YWxpZDoKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICBjYXNlIEluSGl0OgorICAgIGNhc2UgSW5NaXNzOgorICAgICAgICBqaXQuYm94Qm9v
bGVhblBheWxvYWQobV90eXBlID09IEluSGl0LCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKKyAg
ICAgICAgcmV0dXJuOworCisgICAgY2FzZSBNaXNzOgorICAgICAgICBqaXQubW92ZVRydXN0ZWRW
YWx1ZShqc1VuZGVmaW5lZCgpLCB2YWx1ZVJlZ3MpOworICAgICAgICByZXR1cm47CisKKyAgICBj
YXNlIExvYWQ6CisgICAgY2FzZSBHZXR0ZXI6CisgICAgY2FzZSBTZXR0ZXI6CisgICAgY2FzZSBD
dXN0b21HZXR0ZXI6CisgICAgY2FzZSBDdXN0b21TZXR0ZXI6IHsKKyAgICAgICAgaWYgKGlzVmFs
aWRPZmZzZXQobV9vZmZzZXQpKSB7CisgICAgICAgICAgICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1
cmU7CisgICAgICAgICAgICBpZiAobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgY3VyclN0cnVjdHVyZSA9IG1fY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0
aW9uKCkub2JqZWN0KCktPnN0cnVjdHVyZSgpOworICAgICAgICAgICAgY3VyclN0cnVjdHVyZS0+
c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBvZmZzZXQpOworICAgICAg
ICB9CisKKyAgICAgICAgR1BSUmVnIGJhc2VGb3JHZXRHUFI7CisgICAgICAgIGlmICh2aWFQcm94
eSgpKSB7CisgICAgICAgICAgICBiYXNlRm9yR2V0R1BSID0gdmFsdWVSZWdzLnBheWxvYWRHUFIo
KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6QWRkcmVzcyhiYXNlR1BSLCBKU1Byb3h5Ojp0YXJnZXRPZmZzZXQoKSksCisgICAgICAgICAg
ICAgICAgYmFzZUZvckdldEdQUik7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgYmFzZUZv
ckdldEdQUiA9IGJhc2VHUFI7CisKKyAgICAgICAgR1BSUmVnIGJhc2VGb3JBY2Nlc3NHUFI7Cisg
ICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgaml0Lm1v
dmUoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNvbmRpdGlv
blNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9iamVjdCgpKSwKKyAgICAgICAgICAgICAgICBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgICAgIGJhc2VGb3JBY2Nlc3NHUFIgPSBzY3JhdGNoR1BSOworICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgIGJhc2VGb3JBY2Nlc3NHUFIgPSBiYXNlRm9yR2V0R1BS
OworCisgICAgICAgIEdQUlJlZyBsb2FkZWRWYWx1ZUdQUiA9IEludmFsaWRHUFJSZWc7CisgICAg
ICAgIGlmIChtX3R5cGUgIT0gQ3VzdG9tR2V0dGVyICYmIG1fdHlwZSAhPSBDdXN0b21TZXR0ZXIp
IHsKKyAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gTG9hZCkKKyAgICAgICAgICAgICAgICBsb2Fk
ZWRWYWx1ZUdQUiA9IHZhbHVlUmVncy5wYXlsb2FkR1BSKCk7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIgPSBzY3JhdGNoR1BSOworCisgICAgICAgICAg
ICBHUFJSZWcgc3RvcmFnZUdQUjsKKyAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChvZmZz
ZXQpKQorICAgICAgICAgICAgICAgIHN0b3JhZ2VHUFIgPSBiYXNlRm9yQWNjZXNzR1BSOworICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoCisgICAgICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlRm9yQWNjZXNzR1BSLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgICAgICBsb2FkZWRWYWx1ZUdQ
Uik7CisgICAgICAgICAgICAgICAgc3RvcmFnZUdQUiA9IGxvYWRlZFZhbHVlR1BSOworICAgICAg
ICAgICAgfQorCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgIGppdC5sb2FkNjQoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKG9mZnNl
dCkpLCBsb2FkZWRWYWx1ZUdQUik7CisjZWxzZQorICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBs
b2FkKSB7CisgICAgICAgICAgICAgICAgaml0LmxvYWQzMigKKyAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKG9m
ZnNldCkgKyBUYWdPZmZzZXQpLAorICAgICAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MudGFnR1BS
KCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaml0LmxvYWQzMigKKyAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RvcmFnZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jh
c2Uob2Zmc2V0KSArIFBheWxvYWRPZmZzZXQpLAorICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVl
R1BSKTsKKyNlbmRpZgorICAgICAgICB9CisKKyAgICAgICAgLy8gU3R1ZmYgZm9yIGN1c3RvbSBn
ZXR0ZXJzLgorICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9uQ2FsbDsKKyAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGhhbmRsZXJDYWxsOworCisgICAgICAgIC8vIFN0dWZmIGZv
ciBKUyBnZXR0ZXJzLgorICAgICAgICBDQ2FsbEhlbHBlcnM6OkRhdGFMYWJlbFB0ciBhZGRyZXNz
T2ZMaW5rRnVuY3Rpb25DaGVjazsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGZhc3RQYXRo
Q2FsbDsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHNsb3dQYXRoQ2FsbDsKKworICAgICAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXAgc3VjY2VzczsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
IGZhaWw7CisgICAgICAgIGlmIChtX3R5cGUgIT0gTG9hZCAmJiBtX3R5cGUgIT0gTWlzcykgewor
ICAgICAgICAgICAgLy8gTmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3aGVuZXZlciB0aGlzIGNhbGwg
aXMgbWFkZSBpbiB0aGUgZnV0dXJlLCB3ZSByZW1lbWJlciB0aGUKKyAgICAgICAgICAgIC8vIHBs
YWNlIHRoYXQgd2UgbWFkZSBpdCBmcm9tLgorICAgICAgICAgICAgaml0LnN0b3JlMzIoCisgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3R1YkluZm8uY2FsbFNpdGVJ
bmRleC5iaXRzKCkpLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKHN0YXRp
Y19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKKworICAg
ICAgICAgICAgaWYgKG1fdHlwZSA9PSBHZXR0ZXIgfHwgbV90eXBlID09IFNldHRlcikgeworICAg
ICAgICAgICAgICAgIC8vIENyZWF0ZSBhIEpTIGNhbGwgdXNpbmcgYSBKUyBjYWxsIGlubGluZSBj
YWNoZS4gQXNzdW1lIHRoYXQ6CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAv
LyAtIFNQIGlzIGFsaWduZWQgYW5kIHJlcHJlc2VudHMgdGhlIGV4dGVudCBvZiB0aGUgY2FsbGlu
ZyBjb21waWxlcidzIHN0YWNrIHVzYWdlLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAg
ICAgICAgLy8gLSBGUCBpcyBzZXQgY29ycmVjdGx5IChpLmUuIGl0IHBvaW50cyB0byB0aGUgY2Fs
bGVyJ3MgY2FsbCBmcmFtZSBoZWFkZXIpLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAg
ICAgICAgLy8gLSBTUCAtIEZQIGlzIGFuIGFsaWduZWQgZGlmZmVyZW5jZS4KKyAgICAgICAgICAg
ICAgICAvLworICAgICAgICAgICAgICAgIC8vIC0gQW55IGJ5dGUgYmV0d2VlbiBGUCAoZXhjbHVz
aXZlKSBhbmQgU1AgKGluY2x1c2l2ZSkgY291bGQgYmUgbGl2ZSBpbiB0aGUgY2FsbGluZworICAg
ICAgICAgICAgICAgIC8vICAgY29kZS4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAg
ICAgIC8vIFRoZXJlZm9yZSwgd2UgdGVtcG9yYXJpbHkgZ3JvdyB0aGUgc3RhY2sgZm9yIHRoZSBw
dXJwb3NlIG9mIHRoZSBjYWxsIGFuZCB0aGVuCisgICAgICAgICAgICAgICAgLy8gc2hyaW5rIGl0
IGFmdGVyLgorCisgICAgICAgICAgICAgICAgbV9yYXJlRGF0YS0+Y2FsbExpbmtJbmZvID0gc3Rk
OjptYWtlX3VuaXF1ZTxDYWxsTGlua0luZm8+KCk7CisgICAgICAgICAgICAgICAgbV9yYXJlRGF0
YS0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgc3R1YkluZm8uY29kZU9yaWdpbiwgbG9h
ZGVkVmFsdWVHUFIpOworCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBk
b25lOworCisgICAgICAgICAgICAgICAgLy8gVGhlcmUgaXMgYSAidGhpcyIgYXJndW1lbnQuCisg
ICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZQYXJhbWV0ZXJzID0gMTsKKyAgICAgICAg
ICAgICAgICAvLyAuLi4gYW5kIGEgdmFsdWUgYXJndW1lbnQgaWYgd2UncmUgY2FsbGluZyBhIHNl
dHRlci4KKyAgICAgICAgICAgICAgICBpZiAobV90eXBlID09IFNldHRlcikKKyAgICAgICAgICAg
ICAgICAgICAgbnVtYmVyT2ZQYXJhbWV0ZXJzKys7CisKKyAgICAgICAgICAgICAgICAvLyBHZXQg
dGhlIGFjY2Vzc29yOyBpZiB0aGVyZSBhaW4ndCBvbmUgdGhlbiB0aGUgcmVzdWx0IGlzIGpzVW5k
ZWZpbmVkKCkuCisgICAgICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBTZXR0ZXIpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MobG9hZGVkVmFsdWVHUFIsIEdldHRlclNldHRlcjo6b2Zmc2V0T2ZT
ZXR0ZXIoKSksCisgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUik7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoCisg
ICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobG9hZGVkVmFsdWVH
UFIsIEdldHRlclNldHRlcjo6b2Zmc2V0T2ZHZXR0ZXIoKSksCisgICAgICAgICAgICAgICAgICAg
ICAgICBsb2FkZWRWYWx1ZUdQUik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHJldHVyblVuZGVmaW5lZCA9IGppdC5icmFuY2hUZXN0UHRy
KAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Olplcm8sIGxvYWRlZFZhbHVlR1BS
KTsKKworICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mUmVnc0ZvckNhbGwgPSBKU1N0
YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgbnVtYmVyT2ZQYXJhbWV0ZXJzOworCisgICAgICAg
ICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZCeXRlc0ZvckNhbGwgPQorICAgICAgICAgICAgICAg
ICAgICBudW1iZXJPZlJlZ3NGb3JDYWxsICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihDYWxs
ZXJGcmFtZUFuZFBDKTsKKworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFsaWduZWROdW1iZXJP
ZkJ5dGVzRm9yQ2FsbCA9CisgICAgICAgICAgICAgICAgICAgIFdURjo6cm91bmRVcFRvTXVsdGlw
bGVPZihzdGFja0FsaWdubWVudEJ5dHdzKCksIG51bWJlck9mQnl0ZXNGb3JDYWxsKTsKKworICAg
ICAgICAgICAgICAgIGppdC5zdWJQdHIoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2FsbCksCisgICAgICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzIGNhbGxlZUZyYW1lID0gQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRl
clJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90Pihz
aXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKKworICAgICAgICAgICAgICAgIGppdC5zdG9yZTMy
KAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihudW1iZXJP
ZlBhcmFtZXRlcnMpLAorICAgICAgICAgICAgICAgICAgICBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0
KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQgKiBzaXplb2YoUmVnaXN0ZXIpICsgUGF5bG9hZE9mZnNl
dCkpOworCisgICAgICAgICAgICAgICAgaml0LnN0b3JlQ2VsbCgKKyAgICAgICAgICAgICAgICAg
ICAgbG9hZGVkVmFsdWVHUFIsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoSlNTdGFjazo6Q2FsbGVl
ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworCisgICAgICAgICAgICAgICAgaml0LnN0b3JlQ2VsbCgK
KyAgICAgICAgICAgICAgICAgICAgYmFzZUZvckdldEdQUiwKKyAgICAgICAgICAgICAgICAgICAg
Y2FsbGVlRnJhbWUud2l0aE9mZnNldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwKS5vZmZz
ZXQoKSAqIHNpemVvZihSZWdpc3RlcikpKTsKKworICAgICAgICAgICAgICAgIGlmIChraW5kID09
IENhbGxTZXR0ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUoCisgICAg
ICAgICAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICBj
YWxsZWVGcmFtZS53aXRoT2Zmc2V0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KDEpLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBz
bG93Q2FzZSA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2goCisgICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6Tm90RXF1YWwsIGxvYWRlZFZhbHVlR1BSLCBhZGRyZXNzT2ZMaW5rRnVuY3Rp
b25DaGVjaywKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KDApKTsKKworICAgICAgICAgICAgICAgIGZhc3RQYXRoQ2FsbCA9IGppdC5uZWFyQ2FsbCgpOwor
CisgICAgICAgICAgICAgICAgaml0LmFkZFB0cigKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxsKSwKKyAgICAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAg
ICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ2FsbEdldHRlcikKKyAgICAgICAgICAgICAgICAgICAg
aml0LnNldHVwUmVzdWx0cyh2YWx1ZVJlZ3MpOworCisgICAgICAgICAgICAgICAgZG9uZS5hcHBl
bmQoaml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2UubGluaygmaml0KTsKKwor
ICAgICAgICAgICAgICAgIGppdC5tb3ZlKGxvYWRlZFZhbHVlR1BSLCBHUFJJbmZvOjpyZWdUMCk7
CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgICAgICAgICAvLyBXZSAqYWx3YXlzKiBr
bm93IHRoYXQgdGhlIGdldHRlci9zZXR0ZXIsIGlmIG5vbi1udWxsLCBpcyBhIGNlbGwuCisgICAg
ICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
Q2VsbFRhZyksIEdQUkluZm86OnJlZ1QxKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGppdC5t
b3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX3JhcmVEYXRhLT5jYWxsTGlua0luZm8u
Z2V0KCkpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsID0g
aml0Lm5lYXJDYWxsKCk7CisKKyAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAorICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihhbGlnbmVkTnVtYmVyT2ZCeXRl
c0ZvckNhbGwpLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsR2V0dGVyKQorICAg
ICAgICAgICAgICAgICAgICBqaXQuc2V0dXBSZXN1bHRzKHZhbHVlUmVncyk7CisKKyAgICAgICAg
ICAgICAgICBkb25lLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm5V
bmRlZmluZWQubGluaygmaml0KTsKKworICAgICAgICAgICAgICAgIGlmIChraW5kID09IENhbGxH
ZXR0ZXIpCisgICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlVHJ1c3RlZFZhbHVlKGpzVW5kZWZp
bmVkKCksIHZhbHVlUmVncyk7CisKKyAgICAgICAgICAgICAgICBkb25lLmxpbmsoJmppdCk7CisK
KyAgICAgICAgICAgICAgICBzdGF0ZS5jYWxsYmFja3MuYXBwZW5kKAorICAgICAgICAgICAgICAg
ICAgICBbJl0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1fcmFyZURhdGEtPmNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucygKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChzbG93UGF0
aENhbGwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25P
ZihhZGRyZXNzT2ZMaW5rRnVuY3Rpb25DaGVjayksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoZmFzdFBhdGhDYWxsKSk7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluaygKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzbG93UGF0aENhbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxv
Y2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkp
KTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIC8vIGdldHRlcjogRW5jb2RlZEpTVmFsdWUgKCpHZXRWYWx1ZUZ1bmMpKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpOworICAgICAgICAgICAgICAgIC8vIHNldHRlcjogdm9pZCAoKlB1dFZhbHVlRnVu
YykoRXhlY1N0YXRlKiwgSlNPYmplY3QqIGJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNPYmplY3Qs
IEVuY29kZWRKU1ZhbHVlIHZhbHVlKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAg
ICAgIGlmIChraW5kID09IENhbGxDdXN0b21HZXR0ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAg
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJhc2VGb3JBY2Nlc3NHUFIsIGJhc2VGb3JHZXRHUFIsCisgICAgICAgICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIocHJvcGVydHlOYW1lLmltcGwoKSkpOworICAg
ICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKGJhc2VGb3JBY2Nlc3NHUFIsIGJhc2VGb3JHZXRHUFIsIHZhbHVlUmVn
cy5ncHIoKSk7CisjZWxzZQorICAgICAgICAgICAgICAgIGlmIChraW5kID09IENhbGxDdXN0b21H
ZXR0ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VGb3JBY2Nlc3NHUFIsIGJhc2VGb3JH
ZXRHUFIsCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpDZWxsVGFnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihwcm9wZXJ0eU5hbWUuaW1wbCgpKSk7CisgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VGb3JBY2Nlc3NHUFIsIGJhc2VGb3JH
ZXRHUFIsCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpDZWxsVGFnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlUmVncy5w
YXlsb2FkR1BSKCksIHZhbHVlUmVncy50YWdHUFIoKSk7CisgICAgICAgICAgICAgICAgfQorI2Vu
ZGlmCisgICAgICAgICAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCAmdm0tPnRvcENhbGxGcmFtZSk7CisKKyAgICAgICAgICAgICAgICBvcGVyYXRpb25DYWxs
ID0gaml0LmNhbGwoKTsKKyAgICAgICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsQ3VzdG9tR2V0
dGVyKQorICAgICAgICAgICAgICAgICAgICBqaXQuc2V0dXBSZXN1bHRzKHZhbHVlUmVncyk7Cisg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIG5vRXhjZXB0aW9uID0KKyAgICAgICAg
ICAgICAgICAgICAgaml0LmVtaXRFeGNlcHRpb25DaGVjayhDQ2FsbEhlbHBlcnM6OkludmVydGVk
RXhjZXB0aW9uQ2hlY2spOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaml0LnNldHVw
QXJndW1lbnRzKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih2bSksIEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBoYW5kbGVyQ2FsbCA9IGppdC5jYWxsKCk7
CisgICAgICAgICAgICAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIG5vRXhjZXB0aW9uLmxpbmsoJmppdCk7CisKKyAgICAgICAg
ICAgICAgICBzdGF0ZS5jYWxsYmFja3MuYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICBbJl0g
KExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtC
dWZmZXIubGluayhvcGVyYXRpb25DYWxsLCBGdW5jdGlvblB0cihtX3JhcmVEYXRhLT5jdXN0b21B
Y2Nlc3Nvci5vcGFxdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGlu
ayhoYW5kbGVyQ2FsbCwgbG9va3VwRXhjZXB0aW9uSGFuZGxlcik7CisgICAgICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBjYXNlIFJlcGxhY2U6IHsKKyAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG1fb2Zm
c2V0KSkgeworICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUoCisgICAgICAgICAgICAgICAgdmFs
dWVSZWdzLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAg
ICAgICAgICAgICAgYmFzZUdQUiwKKyAgICAgICAgICAgICAgICAgICAgSlNPYmplY3Q6Om9mZnNl
dE9mSW5saW5lU3RvcmFnZSgpICsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0SW5JbmxpbmVT
dG9yYWdlKG1fb2Zmc2V0KSAqIHNpemVvZihKU1ZhbHVlKSkpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgaml0
LnN0b3JlVmFsdWUoCisgICAgICAgICAgICAgICAgdmFsdWVSZWdzLAorICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICAgICAgc2NyYXRjaEdQUjEs
IG9mZnNldEluQnV0dGVyZmx5KG1fb2Zmc2V0KSAqIHNpemVvZihKU1ZhbHVlKSkpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybjsKKyAgICB9IH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorCitQb2x5bW9ycGhpY0FjY2Vzczo6UG9seW1vcnBoaWNBY2Nlc3Mo
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogewogICAgIGlmIChzdHViSW5mby5hY2Nlc3NU
eXBlID09IGFjY2Vzc191bnNldCkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIG1fbGlzdC5h
cHBlbmQoR2V0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKHN0dWJJbmZvKSk7Cisg
ICAgbV9saXN0LmFwcGVuZChBY2Nlc3NDYXNlOjpmcm9tU3RydWN0dXJlU3R1YkluZm8oc3R1Yklu
Zm8pKTsKIH0KIAotUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogUG9seW1vcnBoaWNHZXRCeUlkTGlz
dDo6ZnJvbShTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCitQb2x5bW9ycGhpY0FjY2Vzcyog
UG9seW1vcnBoaWNBY2Nlc3M6OmZyb20oU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogewog
ICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfbGlzdCkKICAg
ICAgICAgcmV0dXJuIHN0dWJJbmZvLnUuZ2V0QnlJZExpc3QubGlzdDsKQEAgLTkzLDE2ICs0Njcs
MTYgQEAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogUG9seW1vcnBoaWNHZXRCeQogICAgICAgICBz
dHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZgogICAgICAgICB8fCBz
dHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc191bnNldCk7CiAgICAgCi0gICAgUG9seW1vcnBo
aWNHZXRCeUlkTGlzdCogcmVzdWx0ID0gbmV3IFBvbHltb3JwaGljR2V0QnlJZExpc3Qoc3R1Yklu
Zm8pOworICAgIFBvbHltb3JwaGljQWNjZXNzKiByZXN1bHQgPSBuZXcgUG9seW1vcnBoaWNBY2Nl
c3Moc3R1YkluZm8pOwogICAgIAogICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkTGlzdChyZXN1bHQp
OwogICAgIAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVBvbHltb3JwaGljR2V0QnlJZExpc3Q6
On5Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0KCkgeyB9CitQb2x5bW9ycGhpY0FjY2Vzczo6flBvbHlt
b3JwaGljQWNjZXNzKCkgeyB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBQb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0OjpjdXJyZW50U2xvd1BhdGhUYXJnZXQoCitNYWNyb0Fzc2VtYmxlckNvZGVQdHIg
UG9seW1vcnBoaWNBY2Nlc3M6OmN1cnJlbnRTbG93UGF0aFRhcmdldCgKICAgICBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8pIGNvbnN0CiB7CiAgICAgaWYgKGlzRW1wdHkoKSkKQEAgLTExMCwz
OCArNDg0LDE0NiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgUG9seW1vcnBoaWNHZXRCeUlkCiAg
ICAgcmV0dXJuIG1fbGlzdC5sYXN0KCkuc3R1YlJvdXRpbmUoKS0+Y29kZSgpLmNvZGUoKTsKIH0K
IAotdm9pZCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjphZGRBY2Nlc3MoY29uc3QgR2V0QnlJZEFj
Y2VzcyYgYWNjZXNzKQotewotICAgIEFTU0VSVCghaXNGdWxsKCkpOwotICAgIC8vIE1ha2Ugc3Vy
ZSB0aGF0IHRoZSByZXNpemluZyBvcHRpbWl6ZXMgZm9yIHNwYWNlLCBub3QgdGltZS4KLSAgICBt
X2xpc3QucmVzaXplVG9GaXQobV9saXN0LnNpemUoKSArIDEpOwotICAgIG1fbGlzdC5sYXN0KCkg
PSBhY2Nlc3M7Ci19Ci0KLWJvb2wgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6aXNGdWxsKCkgY29u
c3QKK2Jvb2wgUG9seW1vcnBoaWNBY2Nlc3M6OmlzRnVsbCgpIGNvbnN0CiB7CiAgICAgQVNTRVJU
KHNpemUoKSA8PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpOwogICAgIHJldHVybiBzaXpl
KCkgPT0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFOwogfQogCi1ib29sIFBvbHltb3JwaGlj
R2V0QnlJZExpc3Q6OmlzQWxtb3N0RnVsbCgpIGNvbnN0Citib29sIFBvbHltb3JwaGljQWNjZXNz
Ojppc0FsbW9zdEZ1bGwoKSBjb25zdAogewogICAgIEFTU0VSVChzaXplKCkgPD0gUE9MWU1PUlBI
SUNfTElTVF9DQUNIRV9TSVpFKTsKICAgICByZXR1cm4gc2l6ZSgpID49IFBPTFlNT1JQSElDX0xJ
U1RfQ0FDSEVfU0laRSAtIDE7CiB9CiAKLWJvb2wgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6ZGlk
U2VsZlBhdGNoaW5nKCkgY29uc3QKK1dhdGNocG9pbnQqIFBvbHltb3JwaGljQWNjZXNzOjphZGRX
YXRjaHBvaW50KAorICAgIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUsIGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24pCit7CisgICAgcmV0dXJuIFdhdGNocG9pbnRz
T25TdHJ1Y3R1cmVTdHViSW5mbzo6ZW5zdXJlUmVmZXJlbmNlQW5kQWRkV2F0Y2hwb2ludCgKKyAg
ICAgICAgbV93YXRjaHBvaW50cywgc3RhdGUuaml0LT5jb2RlQmxvY2soKSwgc3RhdGUuc3R1Yklu
Zm8sIGNvbmRpdGlvbik7Cit9CisKK3ZvaWQgUG9seW1vcnBoaWNBY2Nlc3M6OmFkZEFjY2Vzcyhz
dGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gYWNjZXNzKQoreworICAgIEFTU0VSVCghaXNGdWxs
KCkpOworICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSByZXNpemluZyBvcHRpbWl6ZXMgZm9yIHNw
YWNlLCBub3QgdGltZS4KKyAgICBtX2xpc3QucmVzaXplVG9GaXQobV9saXN0LnNpemUoKSArIDEp
OworICAgIG1fbGlzdC5sYXN0KCkgPSBhY2Nlc3M7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVB0
ciBQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZSgKKyAgICBWTSYgdm0sIENvZGVCbG9jayog
Y29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIGNvbnN0IElkZW50aWZpZXIm
IGlkZW50KQogewotICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUoKTsgaS0tOykgewotICAgICAg
ICBpZiAoYXQoaSkudHlwZSgpID09IEdldEJ5SWRBY2Nlc3M6OlNpbXBsZUlubGluZSkKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgIG1fd2F0Y2hwb2ludHMgPSBudWxscHRyOworICAgIG1f
c3R1YlJvdXRpbmUgPSBudWxscHRyOworICAgIAorICAgIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSBz
dGF0ZTsKKworICAgIHN0YXRlLmFjY2VzcyA9IHRoaXM7CisgICAgc3RhdGUuc3R1YkluZm8gPSAm
c3R1YkluZm87CisgICAgc3RhdGUuaWRlbnQgPSAmaWRlbnQ7CisgICAgCisgICAgc3RhdGUuYmFz
ZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guYmFzZUdQUik7CisgICAg
c3RhdGUudmFsdWVSZWdzID0gSlNWYWx1ZVJlZ3MoCisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAg
ICAgICAgc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZVRhZ0dQUiksCisj
ZW5kaWYKKyAgICAgICAgc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZUdQ
UikpOworCisgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcihzdHViSW5mby5w
YXRoYy51c2VkUmVnaXN0ZXJzKTsKKyAgICBhbGxvY2F0b3IubG9jayhzdGF0ZS5iYXNlR1BSKTsK
KyAgICBhbGxvY2F0b3IubG9jayhzdGF0ZS52YWx1ZVJlZ3MpOworCisgICAgc3RhdGUuc2NyYXRj
aEdQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAKKyAgICBDQ2FsbEhl
bHBlcnMgaml0KCZ2bSwgY29kZUJsb2NrKTsKKyAgICBzdGF0ZS5qaXQgPSAmaml0OworCisgICAg
c2l6ZV90IG51bWJlck9mUGFkZGluZ0J5dGVzID0gYWxsb2NhdG9yLnByZXNlcnZlUmV1c2VkUmVn
aXN0ZXJzQnlQdXNoaW5nKGppdCk7CisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHN1Y2Nl
c3M7CisKKyAgICBhdXRvIHJlc3RvcmVTY3JhdGNoID0gWyZdICgpIHsKKyAgICAgICAgYWxsb2Nh
dG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBudW1iZXJPZlBhZGRpbmdC
eXRlcyk7CisgICAgfTsKKworICAgIGJvb2wgYWxsR3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2sgPSB0
cnVlOworICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2xpc3QpCisgICAgICAgIGFsbEd1YXJkZWRC
eVN0cnVjdHVyZUNoZWNrICY9IGVudHJ5LT5ndWFyZGVkQnlTdHJ1Y3R1cmVDaGVjaygpOworCisg
ICAgaWYgKCFzaXplKCkpIHsKKyAgICAgICAgLy8gVGhpcyBpcyBzdXBlciB1bmxpa2VseSwgYnV0
IHdlIG1ha2UgaXQgbGVnYWwgYW55d2F5LgorICAgICAgICBzdGF0ZS5mYWlsdXJlLmFwcGVuZChq
aXQuanVtcCgpKTsKKyAgICB9IGVsc2UgaWYgKCFhbGxHdWFyZGVkQnlTdHJ1Y3R1cmVDaGVjayB8
fCBzaXplKCkgPT0gMSkgeworICAgICAgICAvLyBJZiB0aGVyZSBhcmUgYW55IHByb3hpZXMgaW4g
dGhlIGxpc3QsIHdlIGNhbm5vdCBqdXN0IHVzZSBhIGJpbmFyeSBzd2l0Y2ggb3ZlciB0aGUgc3Ry
dWN0dXJlLgorICAgICAgICAvLyBXZSBuZWVkIHRvIHJlc29ydCB0byBhIGNhc2NhZGUuIEEgY2Fz
Y2FkZSBhbHNvIGhhcHBlbnMgdG8gYmUgb3B0aW1hbCBpZiB3ZSBvbmx5IGhhdmUganVzdAorICAg
ICAgICAvLyBvbmUgY2FzZS4KKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBmYWxsVGhy
b3VnaDsKKworICAgICAgICAvLyBDYXNjYWRlIHRocm91Z2ggdGhlIGxpc3QsIHByZWZlcnJpbmcg
bmV3ZXIgZW50cmllcy4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9saXN0LnNpemUoKTsg
aS0tOykgeworICAgICAgICAgICAgZmFsbFRocm91Z2gubGluaygmaml0KTsKKyAgICAgICAgICAg
IG1fbGlzdFtpXS0+Z2VuZXJhdGVXaXRoR3VhcmQoc3RhdGUsIGZhbGxUaHJvdWdoKTsKKyAgICAg
ICAgICAgIHJlc3RvcmVTY3JhdGNoKCk7CisgICAgICAgICAgICBzdWNjZXNzLmFwcGVuZChqaXQu
anVtcCgpKTsKKyAgICAgICAgfQorICAgICAgICBzdGF0ZS5mYWlsdXJlLmFwcGVuZChmYWxsVGhy
b3VnaCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaml0LmxvYWQzMigKKyAgICAgICAgICAgIEND
YWxsSGVscGVyczo6QWRkcmVzcyhzdGF0ZS5iYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLAorICAgICAgICAgICAgc3RhdGUuc2NyYXRjaEdQUik7CisgICAgICAgIAorICAgICAg
ICBWZWN0b3I8aW50NjRfdD4gY2FzZVZhbHVlcyhtX2xpc3Quc2l6ZSgpKTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbGlzdC5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIGNh
c2VWYWx1ZXNbaV0gPSBiaXR3aXNlX2Nhc3Q8aW50MzJfdD4obV9saXN0W2ldLT5zdHJ1Y3R1cmUo
KSk7CisgICAgICAgIAorICAgICAgICBCaW5hcnlTd2l0Y2ggYmluYXJ5U3dpdGNoKHN0YXRlLnNj
cmF0Y2hHUFIsIGNhc2VWYWx1ZXMsIEJpbmFyeVN3aXRjaDo6SW50MzIpOworICAgICAgICB3aGls
ZSAoYmluYXJ5U3dpdGNoLmFkdmFuY2Uoaml0KSkgeworICAgICAgICAgICAgR2V0QnlJZENhc2Um
IGdldENhc2UgPSBhdChiaW5hcnlTd2l0Y2guY2FzZUluZGV4KCkpOworICAgICAgICAgICAgZ2V0
Q2FzZS5nZW5lcmF0ZShzdGF0ZSk7CisgICAgICAgICAgICByZXN0b3JlU2NyYXRjaCgpOworICAg
ICAgICAgICAgc3VjY2Vzcy5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIH0KKyAgICAgICAg
c3RhdGUuZmFpbHVyZS5hcHBlbmQoYmluYXJ5U3dpdGNoLmZhbGxUaHJvdWdoKCkpOwogICAgIH0K
LSAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJz
KCkpIHsKKyAgICAgICAgc3RhdGUuZmFpbHVyZS5saW5rKCZqaXQpOworICAgICAgICByZXN0b3Jl
U2NyYXRjaCgpOworICAgICAgICBzdGF0ZS5mYWlsdXJlID0gaml0Lmp1bXAoKTsKKyAgICB9CisK
KyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIodm0sIGppdCwgY29kZUJsb2NrLCBKSVRDb21waWxh
dGlvbkNhbkZhaWwpOworICAgIGlmIChsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpCisg
ICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKKworICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0ciBzdWNjZXNzTGFiZWwgPQorICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpOworICAg
ICAgICAKKyAgICBsaW5rQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3VjY2Vzc0xhYmVsKTsKKworICAg
IGxpbmtCdWZmZXIubGluaygKKyAgICAgICAgc3RhdGUuZmFpbHVyZSwKKyAgICAgICAgc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFD
YWxsVG9TbG93Q2FzZSkpOworICAgIAorICAgIGZvciAoYXV0byBjYWxsYmFjayA6IHN0YXRlLmNh
bGxiYWNrcykKKyAgICAgICAgY2FsbGJhY2sobGlua0J1ZmZlcik7CisgICAgCisgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIGNvZGUgPSBGSU5BTElaRV9DT0RFX0ZPUigKKyAgICAgICAgY29kZUJM
b2NrLCBsaW5rQnVmZmVyLAorICAgICAgICAoIiVzIiwgdG9DU3RyaW5nKCJHZXQgYWNjZXNzIHN0
dWIgZm9yICIsICpjb2RlQmxvY2ssICIgIiwgc3R1YkluZm8uY29kZU9yaWdpbiwgIiB3aXRoIHJl
dHVybiBwb2ludCAiLCBzdWNjZXNzTGFiZWwpKSk7CisKKyAgICBib29sIGRvZXNDYWxscyA9IGZh
bHNlOworICAgIGZvciAoYXV0byBlbnRyeSA6IG1fbGlzdCkKKyAgICAgICAgZG9lc0NhbGxzIHw9
IGVudHJ5LT5kb2VzQ2FsbHMoKTsKKyAgICAKKyAgICBtX3N0dWJSb3V0aW5lID0gY3JlYXRlSklU
U3R1YlJvdXRpbmUoY29kZSwgdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGRvZXND
YWxscyk7CisgICAgcmV0dXJuIGNvZGUuY29kZSgpOwogfQogCi1ib29sIFBvbHltb3JwaGljR2V0
QnlJZExpc3Q6OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0Citib29sIFBvbHltb3JwaGljQWNjZXNz
Ojp2aXNpdFdlYWsoVk0mIHZtKSBjb25zdAogewotICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUo
KTsgaS0tOykgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkgewog
ICAgICAgICBpZiAoIWF0KGkpLnZpc2l0V2Vhayh2bSkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3Jw
aGljQWNjZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1BvbHltb3JwaGljQWNjZXNzLmgJKHJldmlzaW9uIDE4OTMyNCkJKGZyb20gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuaDoxODkzMjQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDEzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBvbHltb3JwaGljR2V0QnlJZExpc3RfaAor
I2RlZmluZSBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0X2gKKworI2lmIEVOQUJMRShKSVQpCisKKyNp
bmNsdWRlICJDb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKyNpbmNs
dWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgorI2luY2x1ZGUgIk9wY29kZS5oIgor
I2luY2x1ZGUgIlN0cnVjdHVyZS5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNw
YWNlIEpTQyB7CisKK2NsYXNzIENvZGVCbG9jazsKK3N0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbzsK
KworY2xhc3MgR2V0QnlJZEFjY2VzcyB7CitwdWJsaWM6CisgICAgZW51bSBBY2Nlc3NUeXBlIHsK
KyAgICAgICAgSW52YWxpZCwKKyAgICAgICAgU2ltcGxlSW5saW5lLCAvLyBUaGlzIGlzIHRoZSBw
YXRjaGVkIGlubGluZSBhY2Nlc3MuCisgICAgICAgIFNpbXBsZVN0dWIsIC8vIFRoaXMgaXMgYSBz
dHViLgorICAgICAgICBXYXRjaGVkU3R1YiwKKyAgICAgICAgR2V0dGVyLAorICAgICAgICBDdXN0
b21HZXR0ZXIsCisgICAgICAgIFNpbXBsZU1pc3MsCisgICAgfTsKKyAgICAKKyAgICBHZXRCeUlk
QWNjZXNzKCkKKyAgICAgICAgOiBtX3R5cGUoSW52YWxpZCkKKyAgICB7CisgICAgfQorICAgIAor
ICAgIEdldEJ5SWRBY2Nlc3MoCisgICAgICAgIFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlw
ZSwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4sIFN0cnVjdHVyZSosCisgICAgICAgIGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
KCkpOworICAgIAorICAgIH5HZXRCeUlkQWNjZXNzKCk7CisgICAgCisgICAgc3RhdGljIEdldEJ5
SWRBY2Nlc3MgZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAg
CisgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSAhPSBJbnZhbGlkOyB9Cisg
ICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQorICAgIAorICAg
IEFjY2Vzc1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIAorICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7IH0K
KyAgICAKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0
KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0KKyAgICAKKyAgICBKSVRTdHViUm91
dGluZSogc3R1YlJvdXRpbmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzU2V0KCkp
OworICAgICAgICByZXR1cm4gbV9zdHViUm91dGluZS5nZXQoKTsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBkb2VzQ2FsbHMoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gR2V0dGVyIHx8IHR5cGUo
KSA9PSBDdXN0b21HZXR0ZXI7IH0KKyAgICAKKyAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0
OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7CisgICAgCisgICAgQWNj
ZXNzVHlwZSBtX3R5cGU7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7
CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7CisgICAgUmVm
UHRyPEpJVFN0dWJSb3V0aW5lPiBtX3N0dWJSb3V0aW5lOworfTsKKworY2xhc3MgUG9seW1vcnBo
aWNHZXRCeUlkTGlzdCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgLy8gRWl0aGVyIGNyZWF0ZXMgYSBuZXcgcG9seW1vcnBoaWMgZ2V0IGxpc3QsIG9yIHJldHVy
bnMgdGhlIG9uZSB0aGF0IGlzIGFscmVhZHkgaW4KKyAgICAvLyBwbGFjZS4KKyAgICBzdGF0aWMg
UG9seW1vcnBoaWNHZXRCeUlkTGlzdCogZnJvbShTdHJ1Y3R1cmVTdHViSW5mbyYpOworICAgIAor
ICAgIH5Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0KCk7CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIGN1cnJlbnRTbG93UGF0aFRhcmdldChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8p
IGNvbnN0OworICAgIAorICAgIHZvaWQgYWRkQWNjZXNzKGNvbnN0IEdldEJ5SWRBY2Nlc3MmKTsK
KyAgICAKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2xpc3QuaXNFbXB0eSgp
OyB9CisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5zaXplKCk7IH0K
KyAgICBib29sIGlzRnVsbCgpIGNvbnN0OworICAgIGJvb2wgaXNBbG1vc3RGdWxsKCkgY29uc3Q7
IC8vIFRydWUgaWYgYWRkaW5nIGFuIGVsZW1lbnQgd291bGQgbWFrZSBpc0Z1bGwoKSB0cnVlLgor
ICAgIGNvbnN0IEdldEJ5SWRBY2Nlc3MmIGF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1f
bGlzdFtpXTsgfQorICAgIGNvbnN0IEdldEJ5SWRBY2Nlc3MmIG9wZXJhdG9yW10odW5zaWduZWQg
aSkgY29uc3QgeyByZXR1cm4gbV9saXN0W2ldOyB9CisgICAgCisgICAgYm9vbCBkaWRTZWxmUGF0
Y2hpbmcoKSBjb25zdDsgLy8gQXJlIGFueSBvZiB0aGUgYWNjZXNzZXMgU2ltcGxlSW5saW5lPwor
ICAgIAorICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZnJp
ZW5kIGNsYXNzIENvZGVCbG9jazsKKyAgICAKKyAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KFN0
cnVjdHVyZVN0dWJJbmZvJik7CisgICAgCisgICAgVmVjdG9yPEdldEJ5SWRBY2Nlc3MsIDI+IG1f
bGlzdDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkK
KworI2VuZGlmIC8vIFBvbHltb3JwaGljR2V0QnlJZExpc3RfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAkod29ya2lu
ZyBjb3B5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNj
ZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDkxICszOCwyMjUgQEAKIG5hbWVzcGFjZSBKU0Mg
ewogCiBjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Owogc3Ry
dWN0IFN0cnVjdHVyZVN0dWJJbmZvOwogCi1jbGFzcyBHZXRCeUlkQWNjZXNzIHsKK3N0cnVjdCBB
Y2Nlc3NHZW5lcmF0aW9uU3RhdGU7CisKK2NsYXNzIEFjY2Vzc0Nhc2UgeworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKEFjY2Vzc0Nhc2UpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
cHVibGljOgogICAgIGVudW0gQWNjZXNzVHlwZSB7CiAgICAgICAgIEludmFsaWQsCi0gICAgICAg
IFNpbXBsZUlubGluZSwgLy8gVGhpcyBpcyB0aGUgcGF0Y2hlZCBpbmxpbmUgYWNjZXNzLgotICAg
ICAgICBTaW1wbGVTdHViLCAvLyBUaGlzIGlzIGEgc3R1Yi4KLSAgICAgICAgV2F0Y2hlZFN0dWIs
CisgICAgICAgIExvYWQsCisgICAgICAgIFRyYW5zaXRpb24sCisgICAgICAgIFJlcGxhY2UsCisg
ICAgICAgIE1pc3MsCiAgICAgICAgIEdldHRlciwKKyAgICAgICAgU2V0dGVyLAogICAgICAgICBD
dXN0b21HZXR0ZXIsCi0gICAgICAgIFNpbXBsZU1pc3MsCisgICAgICAgIEN1c3RvbVNldHRlciwK
KyAgICAgICAgSW5IaXQsCisgICAgICAgIEluTWlzcwogICAgIH07Ci0gICAgCi0gICAgR2V0QnlJ
ZEFjY2VzcygpCisKKyAgICBzdGF0aWMgYm9vbCBpc0dldChBY2Nlc3NUeXBlIHR5cGUpCisgICAg
eworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBJbnZhbGlkOgorICAgICAg
ICBjYXNlIFRyYW5zaXRpb246CisgICAgICAgIGNhc2UgUmVwbGFjZToKKyAgICAgICAgY2FzZSBT
ZXR0ZXI6CisgICAgICAgIGNhc2UgQ3VzdG9tU2V0dGVyOgorICAgICAgICBjYXNlIEluSGl0Ogor
ICAgICAgICBjYXNlIEluTWlzczoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
Y2FzZSBMb2FkOgorICAgICAgICBjYXNlIE1pc3M6CisgICAgICAgIGNhc2UgR2V0dGVyOgorICAg
ICAgICBjYXNlIEN1c3RvbUdldHRlcjoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNQdXQoQWNjZXNzVHlwZSB0eXBlKQorICAg
IHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgSW52YWxpZDoKKyAgICAg
ICAgY2FzZSBMb2FkOgorICAgICAgICBjYXNlIE1pc3M6CisgICAgICAgIGNhc2UgR2V0dGVyOgor
ICAgICAgICBjYXNlIEN1c3RvbUdldHRlcjoKKyAgICAgICAgY2FzZSBJbkhpdDoKKyAgICAgICAg
Y2FzZSBJbk1pc3M6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgVHJh
bnNpdGlvbjoKKyAgICAgICAgY2FzZSBSZXBsYWNlOgorICAgICAgICBjYXNlIFNldHRlcjoKKyAg
ICAgICAgY2FzZSBDdXN0b21TZXR0ZXI6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzSW4oQWNjZXNzVHlwZSB0eXBlKQorICAg
IHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgSW52YWxpZDoKKyAgICAg
ICAgY2FzZSBMb2FkOgorICAgICAgICBjYXNlIE1pc3M6CisgICAgICAgIGNhc2UgR2V0dGVyOgor
ICAgICAgICBjYXNlIEN1c3RvbUdldHRlcjoKKyAgICAgICAgY2FzZSBUcmFuc2l0aW9uOgorICAg
ICAgICBjYXNlIFJlcGxhY2U6CisgICAgICAgIGNhc2UgU2V0dGVyOgorICAgICAgICBjYXNlIEN1
c3RvbVNldHRlcjoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBJbkhp
dDoKKyAgICAgICAgY2FzZSBJbk1pc3M6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIEFjY2Vzc0Nhc2UoKQogICAgICAgICA6IG1fdHlwZShJbnZhbGlk
KQogICAgIHsKICAgICB9Ci0gICAgCi0gICAgR2V0QnlJZEFjY2VzcygKLSAgICAgICAgVk0mLCBK
U0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiwgU3Ry
dWN0dXJlKiwKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBnZXQoCisgICAgICAg
IFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBi
b29sIHZpYVByb3h5LCBTdHJ1Y3R1cmUqLAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpLAorICAgICAgICBXYXRj
aHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0ID0gbnVsbHB0ciwKKyAgICAgICAgUHJvcGVydHlTbG90
OjpHZXRWYWx1ZUZ1bmMgPSBudWxscHRyKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3ND
YXNlPiB0cmFuc2l0aW9uKAorICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSog
b2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0LAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCgpKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNl
PiByZXBsYWNlKAorICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vz
c0Nhc2U+IHNldHRlcigKKyAgICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBT
dHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCwKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQmLCBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyk7CisKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gaW4oCisgICAgICAgIFZNJiwgSlNDZWxsKiBvd25lciwg
QWNjZXNzVHlwZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCiAgICAgICAgIGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCkpOwogICAg
IAotICAgIH5HZXRCeUlkQWNjZXNzKCk7CisgICAgfkFjY2Vzc0Nhc2UoKTsKICAgICAKLSAgICBz
dGF0aWMgR2V0QnlJZEFjY2VzcyBmcm9tU3RydWN0dXJlU3R1YkluZm8oU3RydWN0dXJlU3R1Yklu
Zm8mKTsKKyAgICBzdGF0aWMgQWNjZXNzQ2FzZSBmcm9tU3RydWN0dXJlU3R1YkluZm8oU3RydWN0
dXJlU3R1YkluZm8mKTsKICAgICAKICAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV90
eXBlICE9IEludmFsaWQ7IH0KICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFp
c1NldCgpOyB9CiAgICAgCiAgICAgQWNjZXNzVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90
eXBlOyB9CisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZz
ZXQ7IH0KKyAgICBib29sIHZpYVByb3h5KCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1f
cmFyZURhdGEtPnZpYVByb3h5IDogZmFsc2U7IH0KICAgICAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlLmdldCgpOyB9Ci0gICAgCi0gICAgY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0
dXJuIG1fY29uZGl0aW9uU2V0OyB9Ci0gICAgCi0gICAgSklUU3R1YlJvdXRpbmUqIHN0dWJSb3V0
aW5lKCkgY29uc3QKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0CisgICAgeworICAg
ICAgICBpZiAobV9raW5kID09IFRyYW5zaXRpb24pCisgICAgICAgICAgICByZXR1cm4gbV9zdHJ1
Y3R1cmUtPnByZXZpb3VzSUQoKTsKKyAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlLmdldCgpOwor
ICAgIH0KKyAgICBib29sIGd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrKCkgY29uc3QgeyByZXR1cm4g
IXZpYVByb3h5KCk7IH0KKworICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlKCkgY29uc3QKICAg
ICB7Ci0gICAgICAgIEFTU0VSVChpc1NldCgpKTsKLSAgICAgICAgcmV0dXJuIG1fc3R1YlJvdXRp
bmUuZ2V0KCk7CisgICAgICAgIEFTU0VSVChtX2tpbmQgPT0gVHJhbnNpdGlvbik7CisgICAgICAg
IHJldHVybiBtX3N0cnVjdHVyZS5nZXQoKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBkb2VzQ2Fs
bHMoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gR2V0dGVyIHx8IHR5cGUoKSA9PSBDdXN0b21H
ZXR0ZXI7IH0KKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQoKSBj
b25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQorCisgICAgV2F0Y2hwb2ludFNldCogYWRk
aXRpb25hbFNldCgpIGNvbnN0IHsgbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPmFkZGl0aW9uYWxT
ZXQuZ2V0KCkgOiBudWxscHRyOyB9CiAgICAgCi0gICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25z
dDsKKyAgICBib29sIGRvZXNDYWxscygpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBHZXR0ZXIg
fHwgdHlwZSgpID09IEN1c3RvbUdldHRlcjsgfQogCisgICAgYm9vbCBjYW5SZXBsYWNlKGNvbnN0
IEFjY2Vzc0Nhc2UmIG90aGVyKTsKKyAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIENv
ZGVCbG9jazsKKyAgICBmcmllbmQgY2xhc3MgUG9seW1vcnBoaWNBY2Nlc3M7CisKKyAgICBib29s
IHZpc2l0V2VhayhWTSYpIGNvbnN0OworCisgICAgLy8gRmFsbCB0aHJvdWdoIG9uIHN1Y2Nlc3Mu
IFR3byBraW5kcyBvZiBmYWlsdXJlcyBhcmUgc3VwcG9ydGVkOiBmYWxsLXRocm91Z2gsIHdoaWNo
IG1lYW5zIHRoYXQgd2UKKyAgICAvLyBzaG91bGQgdHJ5IGEgZGlmZmVyZW50IGNhc2U7IGFuZCBm
YWlsdXJlLCB3aGljaCBtZWFucyB0aGF0IHRoaXMgd2FzIHRoZSByaWdodCBjYXNlIGJ1dCBpdCBu
ZWVkcworICAgIC8vIGhlbHAgZnJvbSB0aGUgc2xvdyBwYXRoLgorICAgIHZvaWQgZ2VuZXJhdGVX
aXRoR3VhcmQoQWNjZXNzR2VuZXJhdGlvblN0YXRlJiwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCYg
ZmFsbFRocm91Z2gpOworCisgICAgLy8gRmFsbCB0aHJvdWdoIG9uIHN1Y2Nlc3MsIGFkZCBhIGp1
bXAgdG8gdGhlIGZhaWx1cmUgbGlzdCBvbiBmYWlsdXJlLgorICAgIHZvaWQgZ2VuZXJhdGUoQWNj
ZXNzR2VuZXJhdGlvblN0YXRlJik7CiAgICAgCiAgICAgQWNjZXNzVHlwZSBtX3R5cGU7CisgICAg
UHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7CisKKyAgICAvLyBVc3VhbGx5IHRoaXMgaXMgdGhlIHN0
cnVjdHVyZSB0aGF0IHdlIGV4cGVjdCB0aGUgYmFzZSBvYmplY3QgdG8gaGF2ZS4gQnV0LCB0aGlz
IGlzIHRoZSAqbmV3KgorICAgIC8vIHN0cnVjdHVyZSBmb3IgYSB0cmFuc2l0aW9uIGFuZCB3ZSBy
ZWx5IG9uIHRoZSBmYWN0IHRoYXQgaXQgaGFzIGEgc3Ryb25nIHJlZmVyZW5jZSB0byB0aGUgb2xk
CisgICAgLy8gc3RydWN0dXJlLiBGb3IgcHJveGllcywgdGhpcyBpcyB0aGUgc3RydWN0dXJlIG9m
IHRoZSBvYmplY3QgYmVoaW5kIHRoZSBwcm94eS4KICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJl
PiBtX3N0cnVjdHVyZTsKKwogICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0
aW9uU2V0OwotICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gbV9zdHViUm91dGluZTsKKworICAg
IGNsYXNzIFJhcmVEYXRhIHsKKyAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAg
cHVibGljOgorICAgICAgICBib29sIHZpYVByb3h5OworICAgICAgICBSZWZQdHI8V2F0Y2hwb2lu
dFNldD4gYWRkaXRpb25hbFNldDsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rSW5m
bz4gY2FsbExpbmtJbmZvOworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICBQcm9wZXJ0eVNs
b3Q6OkdldFZhbHVlRnVuYyBnZXR0ZXI7CisgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Q6OlB1
dFZhbHVlRnVuYyBzZXR0ZXI7CisgICAgICAgICAgICB2b2lkKiBvcGFxdWU7CisgICAgICAgIH0g
Y3VzdG9tQWNjZXNzb3I7CisgICAgfTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxSYXJlRGF0YT4g
bV9yYXJlRGF0YTsKIH07CiAKLWNsYXNzIFBvbHltb3JwaGljR2V0QnlJZExpc3QgeworY2xhc3Mg
UG9seW1vcnBoaWNBY2Nlc3MgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBvbHltb3JwaGlj
QWNjZXNzKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICAvLyBF
aXRoZXIgY3JlYXRlcyBhIG5ldyBwb2x5bW9ycGhpYyBnZXQgbGlzdCwgb3IgcmV0dXJucyB0aGUg
b25lIHRoYXQgaXMgYWxyZWFkeSBpbgogICAgIC8vIHBsYWNlLgotICAgIHN0YXRpYyBQb2x5bW9y
cGhpY0dldEJ5SWRMaXN0KiBmcm9tKFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAgc3RhdGljIHN0
ZDo6dW5pcXVlX3B0cjxQb2x5bW9ycGhpY0FjY2Vzcz4gZnJvbShTdHJ1Y3R1cmVTdHViSW5mbyYp
OwogICAgIAotICAgIH5Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0KCk7Ci0gICAgCi0gICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIGN1cnJlbnRTbG93UGF0aFRhcmdldChTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8pIGNvbnN0OwotICAgIAotICAgIHZvaWQgYWRkQWNjZXNzKGNvbnN0IEdldEJ5SWRB
Y2Nlc3MmKTsKKyAgICB+UG9seW1vcnBoaWNBY2Nlc3MoKTsKKworICAgIC8vIFRoaXMgY2xlYXJz
IHRoZSBvbGQgc3R1YiByb3V0aW5lIGFuZCB0aGVuIHJlZ2VuZXJhdGVzIHdpdGggYSBuZXcgY2Fz
ZS4gVGhpcyBtYXkgcmV0dXJuIG51bGwgdG8KKyAgICAvLyBpbmRpY2F0ZSBzb21lIHNvcnQgb2Yg
ZmFpbHVyZS4gV2hlbiB0aGF0IGhhcHBlbnMsIGl0IG1lYW5zIHRoYXQgd2UgYXJlIHJlcXVlc3Rp
bmcgYSByZXNldCBvZiB0aGUKKyAgICAvLyBvd25pbmcgU3RydWN0dXJlU3R1YkluZm8uIFRoYXQn
cyBiZWNhdXNlIHRoZSBvbGQgc3R1YiByb3V0aW5lIGhhcyBhbHJlYWR5IGJlZW4gZGVsZXRlZC4K
KyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVnZW5lcmF0ZVdpdGhDYXNlKHN0ZDo6dW5pcXVl
X3B0cjxBY2Nlc3NDYXNlPik7CiAgICAgCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1
cm4gbV9saXN0LmlzRW1wdHkoKTsgfQogICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVy
biBtX2xpc3Quc2l6ZSgpOyB9CiAgICAgYm9vbCBpc0Z1bGwoKSBjb25zdDsKICAgICBib29sIGlz
QWxtb3N0RnVsbCgpIGNvbnN0OyAvLyBUcnVlIGlmIGFkZGluZyBhbiBlbGVtZW50IHdvdWxkIG1h
a2UgaXNGdWxsKCkgdHJ1ZS4KLSAgICBjb25zdCBHZXRCeUlkQWNjZXNzJiBhdCh1bnNpZ25lZCBp
KSBjb25zdCB7IHJldHVybiBtX2xpc3RbaV07IH0KLSAgICBjb25zdCBHZXRCeUlkQWNjZXNzJiBv
cGVyYXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdFtpXTsgfQotICAgIAot
ICAgIGJvb2wgZGlkU2VsZlBhdGNoaW5nKCkgY29uc3Q7IC8vIEFyZSBhbnkgb2YgdGhlIGFjY2Vz
c2VzIFNpbXBsZUlubGluZT8KLSAgICAKKyAgICBjb25zdCBBY2Nlc3NDYXNlJiBhdCh1bnNpZ25l
ZCBpKSBjb25zdCB7IHJldHVybiAqbV9saXN0W2ldOyB9CisgICAgY29uc3QgQWNjZXNzQ2FzZSYg
b3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiAqbV9saXN0W2ldOyB9CisKKyAg
ICAvLyBJZiB0aGlzIHJldHVybnMgZmFsc2UgdGhlbiB3ZSBhcmUgcmVxdWVzdGluZyBhIHJlc2V0
IG9mIHRoZSBvd25pbmcgU3RydWN0dXJlU3R1YkluZm8uCiAgICAgYm9vbCB2aXNpdFdlYWsoVk0m
KSBjb25zdDsKIAogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQWNjZXNzQ2FzZTsKICAgICBm
cmllbmQgY2xhc3MgQ29kZUJsb2NrOwogICAgIAotICAgIFBvbHltb3JwaGljR2V0QnlJZExpc3Qo
U3RydWN0dXJlU3R1YkluZm8mKTsKKyAgICBQb2x5bW9ycGhpY0FjY2VzcyhTdHJ1Y3R1cmVTdHVi
SW5mbyYpOworCisgICAgV2F0Y2hwb2ludCogYWRkV2F0Y2hwb2ludCgKKyAgICAgICAgQWNjZXNz
R2VuZXJhdGlvblN0YXRlJiwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mID0gT2JqZWN0
UHJvcGVydHlDb25kaXRpb24oKSk7CisgICAgCisgICAgdm9pZCBhZGRBY2Nlc3NDYXNlKHN0ZDo6
dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJlZ2Vu
ZXJhdGUoVk0mLCBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIGNvbnN0IElkZW50aWZp
ZXImKTsKICAgICAKLSAgICBWZWN0b3I8R2V0QnlJZEFjY2VzcywgMj4gbV9saXN0OworICAgIFZl
Y3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4sIDI+IG1fbGlzdDsKKyAgICBSZWZQdHI8
SklUU3R1YlJvdXRpbmU+IG1fc3R1YlJvdXRpbmU7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdhdGNo
cG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbz4gbV93YXRjaHBvaW50czsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3Jw
aGljR2V0QnlJZExpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcAkocmV2aXNpb24gMTg5MzI0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDE1NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgiCi0KLSNpZiBFTkFCTEUoSklUKQotCi0jaW5j
bHVkZSAiQ29kZUJsb2NrLmgiCi0jaW5jbHVkZSAiSGVhcC5oIgotI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgotCi1uYW1lc3BhY2UgSlNDIHsK
LQotR2V0QnlJZEFjY2Vzczo6R2V0QnlJZEFjY2VzcygKLSAgICBWTSYgdm0sIEpTQ2VsbCogb3du
ZXIsIEFjY2Vzc1R5cGUgdHlwZSwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRp
bmUsCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0JiBjb25kaXRpb25TZXQpCi0gICAgOiBtX3R5cGUodHlwZSkKLSAgICAsIG1fc3RydWN0
dXJlKHZtLCBvd25lciwgc3RydWN0dXJlKQotICAgICwgbV9jb25kaXRpb25TZXQoY29uZGl0aW9u
U2V0KQotICAgICwgbV9zdHViUm91dGluZShzdHViUm91dGluZSkKLXsKLX0KLQotR2V0QnlJZEFj
Y2Vzczo6fkdldEJ5SWRBY2Nlc3MoKQotewotfQotCi1HZXRCeUlkQWNjZXNzIEdldEJ5SWRBY2Nl
c3M6OmZyb21TdHJ1Y3R1cmVTdHViSW5mbyhTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17
Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGluaXRpYWxTbG93UGF0aCA9Ci0gICAgICAgIHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRl
bHRhQ2FsbFRvU2xvd0Nhc2UpOwotICAgIAotICAgIEdldEJ5SWRBY2Nlc3MgcmVzdWx0OwotICAg
IAotICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9i
eV9pZF9zZWxmKTsKLSAgICAKLSAgICByZXN1bHQubV90eXBlID0gU2ltcGxlSW5saW5lOwotICAg
IHJlc3VsdC5tX3N0cnVjdHVyZS5jb3B5RnJvbShzdHViSW5mby51LmdldEJ5SWRTZWxmLmJhc2VP
YmplY3RTdHJ1Y3R1cmUpOwotICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gSklUU3R1YlJvdXRp
bmU6OmNyZWF0ZVNlbGZNYW5hZ2VkUm91dGluZShpbml0aWFsU2xvd1BhdGgpOwotICAgIAotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgR2V0QnlJZEFjY2Vzczo6dmlzaXRXZWFrKFZNJiB2
bSkgY29uc3QKLXsKLSAgICBpZiAobV9zdHJ1Y3R1cmUgJiYgIUhlYXA6OmlzTWFya2VkKG1fc3Ry
dWN0dXJlLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghbV9jb25kaXRp
b25TZXQuYXJlU3RpbGxMaXZlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIW1f
c3R1YlJvdXRpbmUtPnZpc2l0V2Vhayh2bSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6UG9seW1vcnBoaWNHZXRC
eUlkTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAgaWYgKHN0dWJJbmZv
LmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAg
bV9saXN0LmFwcGVuZChHZXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0dXJlU3R1YkluZm8oc3R1Yklu
Zm8pKTsKLX0KLQotUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogUG9seW1vcnBoaWNHZXRCeUlkTGlz
dDo6ZnJvbShTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAgaWYgKHN0dWJJbmZv
LmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9saXN0KQotICAgICAgICByZXR1cm4gc3R1
YkluZm8udS5nZXRCeUlkTGlzdC5saXN0OwotICAgIAotICAgIEFTU0VSVCgKLSAgICAgICAgc3R1
YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYKLSAgICAgICAgfHwgc3R1
YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpOwotICAgIAotICAgIFBvbHltb3JwaGlj
R2V0QnlJZExpc3QqIHJlc3VsdCA9IG5ldyBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KHN0dWJJbmZv
KTsKLSAgICAKLSAgICBzdHViSW5mby5pbml0R2V0QnlJZExpc3QocmVzdWx0KTsKLSAgICAKLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotCi1Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojp+UG9seW1vcnBo
aWNHZXRCeUlkTGlzdCgpIHsgfQotCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHIgUG9seW1vcnBoaWNH
ZXRCeUlkTGlzdDo6Y3VycmVudFNsb3dQYXRoVGFyZ2V0KAotICAgIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbykgY29uc3QKLXsKLSAgICBpZiAoaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4g
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGVsdGFDYWxsVG9TbG93Q2FzZSk7Ci0gICAgcmV0dXJuIG1fbGlzdC5sYXN0KCkuc3R1YlJvdXRp
bmUoKS0+Y29kZSgpLmNvZGUoKTsKLX0KLQotdm9pZCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojph
ZGRBY2Nlc3MoY29uc3QgR2V0QnlJZEFjY2VzcyYgYWNjZXNzKQotewotICAgIEFTU0VSVCghaXNG
dWxsKCkpOwotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSByZXNpemluZyBvcHRpbWl6ZXMgZm9y
IHNwYWNlLCBub3QgdGltZS4KLSAgICBtX2xpc3QucmVzaXplVG9GaXQobV9saXN0LnNpemUoKSAr
IDEpOwotICAgIG1fbGlzdC5sYXN0KCkgPSBhY2Nlc3M7Ci19Ci0KLWJvb2wgUG9seW1vcnBoaWNH
ZXRCeUlkTGlzdDo6aXNGdWxsKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoc2l6ZSgpIDw9IFBPTFlN
T1JQSElDX0xJU1RfQ0FDSEVfU0laRSk7Ci0gICAgcmV0dXJuIHNpemUoKSA9PSBQT0xZTU9SUEhJ
Q19MSVNUX0NBQ0hFX1NJWkU7Ci19Ci0KLWJvb2wgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6aXNB
bG1vc3RGdWxsKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoc2l6ZSgpIDw9IFBPTFlNT1JQSElDX0xJ
U1RfQ0FDSEVfU0laRSk7Ci0gICAgcmV0dXJuIHNpemUoKSA+PSBQT0xZTU9SUEhJQ19MSVNUX0NB
Q0hFX1NJWkUgLSAxOwotfQotCi1ib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmRpZFNlbGZQ
YXRjaGluZygpIGNvbnN0Ci17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gc2l6ZSgpOyBpLS07KSB7
Ci0gICAgICAgIGlmIChhdChpKS50eXBlKCkgPT0gR2V0QnlJZEFjY2Vzczo6U2ltcGxlSW5saW5l
KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojp2aXNpdFdlYWsoVk0mIHZtKSBjb25zdAot
ewotICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUoKTsgaS0tOykgewotICAgICAgICBpZiAoIWF0
KGkpLnZpc2l0V2Vhayh2bSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAg
IHJldHVybiB0cnVlOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEVOQUJM
RShKSVQpCi0KLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3Jw
aGljR2V0QnlJZExpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oCShyZXZpc2lvbiAxODkzMjQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDEzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgUG9seW1vcnBoaWNHZXRCeUlkTGlzdF9o
Ci0jZGVmaW5lIFBvbHltb3JwaGljR2V0QnlJZExpc3RfaAotCi0jaWYgRU5BQkxFKEpJVCkKLQot
I2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKLSNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgotI2lu
Y2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiCi0jaW5jbHVkZSAiT3Bjb2RlLmgi
Ci0jaW5jbHVkZSAiU3RydWN0dXJlLmgiCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1l
c3BhY2UgSlNDIHsKLQotY2xhc3MgQ29kZUJsb2NrOwotc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZv
OwotCi1jbGFzcyBHZXRCeUlkQWNjZXNzIHsKLXB1YmxpYzoKLSAgICBlbnVtIEFjY2Vzc1R5cGUg
ewotICAgICAgICBJbnZhbGlkLAotICAgICAgICBTaW1wbGVJbmxpbmUsIC8vIFRoaXMgaXMgdGhl
IHBhdGNoZWQgaW5saW5lIGFjY2Vzcy4KLSAgICAgICAgU2ltcGxlU3R1YiwgLy8gVGhpcyBpcyBh
IHN0dWIuCi0gICAgICAgIFdhdGNoZWRTdHViLAotICAgICAgICBHZXR0ZXIsCi0gICAgICAgIEN1
c3RvbUdldHRlciwKLSAgICAgICAgU2ltcGxlTWlzcywKLSAgICB9OwotICAgIAotICAgIEdldEJ5
SWRBY2Nlc3MoKQotICAgICAgICA6IG1fdHlwZShJbnZhbGlkKQotICAgIHsKLSAgICB9Ci0gICAg
Ci0gICAgR2V0QnlJZEFjY2VzcygKLSAgICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NU
eXBlLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiwgU3RydWN0dXJlKiwKLSAgICAgICAgY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQoKSk7Ci0gICAgCi0gICAgfkdldEJ5SWRBY2Nlc3MoKTsKLSAgICAKLSAgICBzdGF0aWMgR2V0
QnlJZEFjY2VzcyBmcm9tU3RydWN0dXJlU3R1YkluZm8oU3RydWN0dXJlU3R1YkluZm8mKTsKLSAg
ICAKLSAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV90eXBlICE9IEludmFsaWQ7IH0K
LSAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9Ci0gICAgCi0g
ICAgQWNjZXNzVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAgCi0gICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZS5nZXQoKTsg
fQotICAgIAotICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25T
ZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQotICAgIAotICAgIEpJVFN0dWJS
b3V0aW5lKiBzdHViUm91dGluZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaXNTZXQo
KSk7Ci0gICAgICAgIHJldHVybiBtX3N0dWJSb3V0aW5lLmdldCgpOwotICAgIH0KLSAgICAKLSAg
ICBib29sIGRvZXNDYWxscygpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBHZXR0ZXIgfHwgdHlw
ZSgpID09IEN1c3RvbUdldHRlcjsgfQotICAgIAotICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgY29u
c3Q7Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKLSAgICAKLSAgICBB
Y2Nlc3NUeXBlIG1fdHlwZTsKLSAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cnVjdHVy
ZTsKLSAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKLSAgICBS
ZWZQdHI8SklUU3R1YlJvdXRpbmU+IG1fc3R1YlJvdXRpbmU7Ci19OwotCi1jbGFzcyBQb2x5bW9y
cGhpY0dldEJ5SWRMaXN0IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoK
LSAgICAvLyBFaXRoZXIgY3JlYXRlcyBhIG5ldyBwb2x5bW9ycGhpYyBnZXQgbGlzdCwgb3IgcmV0
dXJucyB0aGUgb25lIHRoYXQgaXMgYWxyZWFkeSBpbgotICAgIC8vIHBsYWNlLgotICAgIHN0YXRp
YyBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBmcm9tKFN0cnVjdHVyZVN0dWJJbmZvJik7Ci0gICAg
Ci0gICAgflBvbHltb3JwaGljR2V0QnlJZExpc3QoKTsKLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgY3VycmVudFNsb3dQYXRoVGFyZ2V0KFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bykgY29uc3Q7Ci0gICAgCi0gICAgdm9pZCBhZGRBY2Nlc3MoY29uc3QgR2V0QnlJZEFjY2VzcyYp
OwotICAgIAotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5pc0VtcHR5
KCk7IH0KLSAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9saXN0LnNpemUoKTsg
fQotICAgIGJvb2wgaXNGdWxsKCkgY29uc3Q7Ci0gICAgYm9vbCBpc0FsbW9zdEZ1bGwoKSBjb25z
dDsgLy8gVHJ1ZSBpZiBhZGRpbmcgYW4gZWxlbWVudCB3b3VsZCBtYWtlIGlzRnVsbCgpIHRydWUu
Ci0gICAgY29uc3QgR2V0QnlJZEFjY2VzcyYgYXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4g
bV9saXN0W2ldOyB9Ci0gICAgY29uc3QgR2V0QnlJZEFjY2VzcyYgb3BlcmF0b3JbXSh1bnNpZ25l
ZCBpKSBjb25zdCB7IHJldHVybiBtX2xpc3RbaV07IH0KLSAgICAKLSAgICBib29sIGRpZFNlbGZQ
YXRjaGluZygpIGNvbnN0OyAvLyBBcmUgYW55IG9mIHRoZSBhY2Nlc3NlcyBTaW1wbGVJbmxpbmU/
Ci0gICAgCi0gICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBm
cmllbmQgY2xhc3MgQ29kZUJsb2NrOwotICAgIAotICAgIFBvbHltb3JwaGljR2V0QnlJZExpc3Qo
U3RydWN0dXJlU3R1YkluZm8mKTsKLSAgICAKLSAgICBWZWN0b3I8R2V0QnlJZEFjY2VzcywgMj4g
bV9saXN0OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoSklU
KQotCi0jZW5kaWYgLy8gUG9seW1vcnBoaWNHZXRCeUlkTGlzdF9oCi0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMTg5MzI0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBj
b3B5KQpAQCAtNTYzLDcgKzU2Myw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJyYW5jaDMy
KEVxdWFsLCByZWdzLnRhZ0dQUigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRh
ZykpOwogI2VuZGlmCiAgICAgfQotICAgIAorCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAg
ICBKdW1wIGJyYW5jaFN0cnVjdHVyZShSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgVCBs
ZWZ0SGFuZFNpZGUsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKQEAgLTgzMiw2ICs4MzIs
MTUgQEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogCisgICAgdm9pZCBib3hCb29sZWFuUGF5bG9h
ZChib29sIHZhbHVlLCBHUFJSZWcgcGF5bG9hZEdQUikKKyAgICB7CisjaWYgVVNFKEpTVkFMVUU2
NCkKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSArIHZhbHVlKSwgcGF5bG9h
ZEdQUik7CisjZWxzZQorICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMih2YWx1ZSksIHBheWxvYWRH
UFIpOworI2VuZGlmCisgICAgfQorCiAgICAgdm9pZCBib3hCb29sZWFuKEdQUlJlZyBib29sR1BS
LCBKU1ZhbHVlUmVncyBib3hlZFJlZ3MpCiAgICAgewogICAgICAgICBib3hCb29sZWFuUGF5bG9h
ZChib29sR1BSLCBib3hlZFJlZ3MucGF5bG9hZEdQUigpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5jcHAJKHJl
dmlzaW9uIDE4OTMyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2NyYXRjaFJlZ2lz
dGVyQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsOCBAQCBTY3JhdGNo
UmVnaXN0ZXJBbGxvY2F0b3I6On5TY3JhdGNoUmVnaXN0CiAKIHZvaWQgU2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yOjpsb2NrKEdQUlJlZyByZWcpCiB7CisgICAgaWYgKHJlZyA9PSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICByZXR1cm47CiAgICAgdW5zaWduZWQgaW5kZXggPSBHUFJJbmZvOjp0b0lu
ZGV4KHJlZyk7CiAgICAgaWYgKGluZGV4ID09IEdQUkluZm86OkludmFsaWRJbmRleCkKICAgICAg
ICAgcmV0dXJuOwpAQCAtNTIsMTIgKzU0LDIwIEBAIHZvaWQgU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yOjpsb2NrKEdQUlIKIAogdm9pZCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OmxvY2soRlBS
UmVnIHJlZykKIHsKKyAgICBpZiAocmVnID09IEludmFsaWRGUFJSZWcpCisgICAgICAgIHJldHVy
bjsKICAgICB1bnNpZ25lZCBpbmRleCA9IEZQUkluZm86OnRvSW5kZXgocmVnKTsKICAgICBpZiAo
aW5kZXggPT0gRlBSSW5mbzo6SW52YWxpZEluZGV4KQogICAgICAgICByZXR1cm47CiAgICAgbV9s
b2NrZWRSZWdpc3RlcnMuc2V0RlBSQnlJbmRleChpbmRleCk7CiB9CiAKK3ZvaWQgU2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yOjpsb2NrKEpTVmFsdWVSZWdzIHJlZ3MpCit7CisgICAgbG9jayhyZWdz
LnRhZ0dQUigpKTsKKyAgICBsb2NrKHJlZ3MucGF5bG9hZEdQUigpKTsKK30KKwogdGVtcGxhdGU8
dHlwZW5hbWUgQmFua0luZm8+CiB0eXBlbmFtZSBCYW5rSW5mbzo6UmVnaXN0ZXJUeXBlIFNjcmF0
Y2hSZWdpc3RlckFsbG9jYXRvcjo6YWxsb2NhdGVTY3JhdGNoKCkKIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaAko
cmV2aXNpb24gMTg5MzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsOCArNDMsOSBAQCBwdWJsaWM6
CiAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yKGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVn
aXN0ZXJzKTsKICAgICB+U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yKCk7CiAKLSAgICB2b2lkIGxv
Y2soR1BSUmVnIHJlZyk7Ci0gICAgdm9pZCBsb2NrKEZQUlJlZyByZWcpOworICAgIHZvaWQgbG9j
ayhHUFJSZWcpOworICAgIHZvaWQgbG9jayhGUFJSZWcpOworICAgIHZvaWQgbG9jayhKU1ZhbHVl
UmVncyk7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmFua0luZm8+CiAgICAgdHlwZW5h
bWUgQmFua0luZm86OlJlZ2lzdGVyVHlwZSBhbGxvY2F0ZVNjcmF0Y2goKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260696</attachid>
            <date>2015-09-05 11:44:49 -0700</date>
            <delta_ts>2015-09-05 13:14:24 -0700</delta_ts>
            <desc>some more stuff</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>66787</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3Jw
aGljQWNjZXNzLmNwcAkocmV2aXNpb24gMTg5MzI0KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHA6MTg5MzI0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDE1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUG9seW1v
cnBoaWNHZXRCeUlkTGlzdC5oIgorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkNvZGVC
bG9jay5oIgorI2luY2x1ZGUgIkhlYXAuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5j
bHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0dldEJ5SWRB
Y2Nlc3M6OkdldEJ5SWRBY2Nlc3MoCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NU
eXBlIHR5cGUsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lLAorICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29u
ZGl0aW9uU2V0KQorICAgIDogbV90eXBlKHR5cGUpCisgICAgLCBtX3N0cnVjdHVyZSh2bSwgb3du
ZXIsIHN0cnVjdHVyZSkKKyAgICAsIG1fY29uZGl0aW9uU2V0KGNvbmRpdGlvblNldCkKKyAgICAs
IG1fc3R1YlJvdXRpbmUoc3R1YlJvdXRpbmUpCit7Cit9CisKK0dldEJ5SWRBY2Nlc3M6On5HZXRC
eUlkQWNjZXNzKCkKK3sKK30KKworR2V0QnlJZEFjY2VzcyBHZXRCeUlkQWNjZXNzOjpmcm9tU3Ry
dWN0dXJlU3R1YkluZm8oU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBpbml0aWFsU2xvd1BhdGggPQorICAgICAgICBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Ns
b3dDYXNlKTsKKyAgICAKKyAgICBHZXRCeUlkQWNjZXNzIHJlc3VsdDsKKyAgICAKKyAgICBSRUxF
QVNFX0FTU0VSVChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZik7
CisgICAgCisgICAgcmVzdWx0Lm1fdHlwZSA9IFNpbXBsZUlubGluZTsKKyAgICByZXN1bHQubV9z
dHJ1Y3R1cmUuY29weUZyb20oc3R1YkluZm8udS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0
dXJlKTsKKyAgICByZXN1bHQubV9zdHViUm91dGluZSA9IEpJVFN0dWJSb3V0aW5lOjpjcmVhdGVT
ZWxmTWFuYWdlZFJvdXRpbmUoaW5pdGlhbFNsb3dQYXRoKTsKKyAgICAKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitib29sIEdldEJ5SWRBY2Nlc3M6OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0Cit7
CisgICAgaWYgKG1fc3RydWN0dXJlICYmICFIZWFwOjppc01hcmtlZChtX3N0cnVjdHVyZS5nZXQo
KSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW1fY29uZGl0aW9uU2V0LmFyZVN0
aWxsTGl2ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFtX3N0dWJSb3V0aW5l
LT52aXNpdFdlYWsodm0pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK1BvbHltb3JwaGljR2V0QnlJZExpc3Q6OlBvbHltb3JwaGljR2V0QnlJZExpc3QoU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBl
ID09IGFjY2Vzc191bnNldCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fbGlzdC5hcHBl
bmQoR2V0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKHN0dWJJbmZvKSk7Cit9CisK
K1BvbHltb3JwaGljR2V0QnlJZExpc3QqIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmZyb20oU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBl
ID09IGFjY2Vzc19nZXRfYnlfaWRfbGlzdCkKKyAgICAgICAgcmV0dXJuIHN0dWJJbmZvLnUuZ2V0
QnlJZExpc3QubGlzdDsKKyAgICAKKyAgICBBU1NFUlQoCisgICAgICAgIHN0dWJJbmZvLmFjY2Vz
c1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmCisgICAgICAgIHx8IHN0dWJJbmZvLmFjY2Vz
c1R5cGUgPT0gYWNjZXNzX3Vuc2V0KTsKKyAgICAKKyAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0
KiByZXN1bHQgPSBuZXcgUG9seW1vcnBoaWNHZXRCeUlkTGlzdChzdHViSW5mbyk7CisgICAgCisg
ICAgc3R1YkluZm8uaW5pdEdldEJ5SWRMaXN0KHJlc3VsdCk7CisgICAgCisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6flBvbHltb3JwaGljR2V0QnlJZExp
c3QoKSB7IH0KKworTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6
OmN1cnJlbnRTbG93UGF0aFRhcmdldCgKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8p
IGNvbnN0Cit7CisgICAgaWYgKGlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRv
U2xvd0Nhc2UpOworICAgIHJldHVybiBtX2xpc3QubGFzdCgpLnN0dWJSb3V0aW5lKCktPmNvZGUo
KS5jb2RlKCk7Cit9CisKK3ZvaWQgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6YWRkQWNjZXNzKGNv
bnN0IEdldEJ5SWRBY2Nlc3MmIGFjY2VzcykKK3sKKyAgICBBU1NFUlQoIWlzRnVsbCgpKTsKKyAg
ICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgcmVzaXppbmcgb3B0aW1pemVzIGZvciBzcGFjZSwgbm90
IHRpbWUuCisgICAgbV9saXN0LnJlc2l6ZVRvRml0KG1fbGlzdC5zaXplKCkgKyAxKTsKKyAgICBt
X2xpc3QubGFzdCgpID0gYWNjZXNzOworfQorCitib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6
OmlzRnVsbCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKHNpemUoKSA8PSBQT0xZTU9SUEhJQ19MSVNU
X0NBQ0hFX1NJWkUpOworICAgIHJldHVybiBzaXplKCkgPT0gUE9MWU1PUlBISUNfTElTVF9DQUNI
RV9TSVpFOworfQorCitib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmlzQWxtb3N0RnVsbCgp
IGNvbnN0Cit7CisgICAgQVNTRVJUKHNpemUoKSA8PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJ
WkUpOworICAgIHJldHVybiBzaXplKCkgPj0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIC0g
MTsKK30KKworYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpkaWRTZWxmUGF0Y2hpbmcoKSBj
b25zdAoreworICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUoKTsgaS0tOykgeworICAgICAgICBp
ZiAoYXQoaSkudHlwZSgpID09IEdldEJ5SWRBY2Nlc3M6OlNpbXBsZUlubGluZSkKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUG9s
eW1vcnBoaWNHZXRCeUlkTGlzdDo6dmlzaXRXZWFrKFZNJiB2bSkgY29uc3QKK3sKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBzaXplKCk7IGktLTspIHsKKyAgICAgICAgaWYgKCFhdChpKS52aXNpdFdl
YWsodm0pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3Jw
aGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQs
NyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0LmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKIAogI2lmIEVOQUJM
RShKSVQpCiAKQEAgLTM1LDU2ICszNSw2ODEgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUdldEJ5
SWRBY2Nlc3M6OkdldEJ5SWRBY2Nlc3MoCi0gICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nl
c3NUeXBlIHR5cGUsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lLAotICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYg
Y29uZGl0aW9uU2V0KQotICAgIDogbV90eXBlKHR5cGUpCi0gICAgLCBtX3N0cnVjdHVyZSh2bSwg
b3duZXIsIHN0cnVjdHVyZSkKLSAgICAsIG1fY29uZGl0aW9uU2V0KGNvbmRpdGlvblNldCkKLSAg
ICAsIG1fc3R1YlJvdXRpbmUoc3R1YlJvdXRpbmUpCitzdHJ1Y3QgQWNjZXNzR2VuZXJhdGlvblN0
YXRlIHsKKyAgICBDQ2FsbEhlbHBlcnMqIGppdCB7IG51bGxwdHIgfTsKKyAgICBTY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3IqIGFsbG9jYXRvcjsKKyAgICBzaXplX3QgbnVtYmVyT2ZQYWRkaW5nQnl0
ZXMgeyAwIH07CisgICAgUG9seW1vcnBoaWNBY2Nlc3MqIGFjY2VzcyB7IG51bGxwdHIgfTsKKyAg
ICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8geyBudWxscHRyIH07CisgICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wTGlzdCBzdWNjZXNzOworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZmFpbHVy
ZTsKKyAgICBHUFJSZWcgYmFzZUdQUiB7IEludmFsaWRHUFJSZWcgfTsKKyAgICBKU1ZhbHVlUmVn
cyB2YWx1ZVJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgeyBJbnZhbGlkR1BSUmVnIH07Cisg
ICAgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCB7IGZhbHNlIH07CisgICAgVmVjdG9yPHN0ZDo6
ZnVuY3Rpb248dm9pZChMaW5rQnVmZmVyJik+IGNhbGxiYWNrczsKKyAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudDsKKworICAgIHZvaWQgYWRkV2F0Y2hwb2ludChjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiYgY29uZGl0aW9uID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb24oKSkKKyAgICB7
CisgICAgICAgIHJldHVybiBXYXRjaHBvaW50T25TdHJ1Y3R1cmVTdHViSW5mbzo6ZW5zdXJlUmVm
ZXJlbmNlQW5kQWRkV2F0Y2hwb2ludCgKKyAgICAgICAgICAgIGFjY2Vzcy0+bV93YXRjaHBvaW50
cywgaml0LT5jb2RlQmxvY2soKSwgc3R1YkluZm8sIGNvbmRpdGlvbik7CisgICAgfQorCisgICAg
dm9pZCByZXN0b3JlU2NyYXRjaCgpCisgICAgeworICAgICAgICBhbGxvY2F0b3ItPnJlc3RvcmVS
ZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoKmppdCwgbnVtYmVyT2ZQYWRkaW5nQnl0ZXMpOworICAg
IH0KKworICAgIHZvaWQgc3VjY2VlZCgpCisgICAgeworICAgICAgICByZXN0b3JlU2NyYXRjaCgp
OworICAgICAgICBzdWNjZXNzLmFwcGVuZChqaXQtPmp1bXAoKSk7CisgICAgfQorfTsKKworQWNj
ZXNzQ2FzZTo6QWNjZXNzQ2FzZSgpCiB7CiB9CiAKLUdldEJ5SWRBY2Nlc3M6On5HZXRCeUlkQWNj
ZXNzKCkKK3N0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpnZXQoCisgICAg
Vk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5cGUsIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCwgYm9vbCB2aWFQcm94eSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCisgICAgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgV2F0Y2hwb2ludFNldCogYWRk
aXRpb25hbFNldCwKKyAgICBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYyBjdXN0b21HZXR0ZXIp
CiB7CisgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHJlc3VsdChuZXcgQWNjZXNzQ2Fz
ZSgpKTsKKworICAgIHJlc3VsdC0+bV90eXBlID0gdHlwZTsKKyAgICByZXN1bHQtPm1fb2Zmc2V0
ID0gb2Zmc2V0OworICAgIHJlc3VsdC0+bV9zdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3RydWN0
dXJlKTsKKyAgICByZXN1bHQtPm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OworICAgIAor
ICAgIGlmICh2aWFQcm94eSB8fCBhZGRpdGlvbmFsU2V0IHx8IGRvZXNDYWxscygpIHx8IGN1c3Rv
bUdldHRlcikgeworICAgICAgICByZXN1bHQtPm1fcmFyZURhdGEgPSBzdGQ6Om1ha2VfdW5pcXVl
PFJhcmVEYXRhPigpOworICAgICAgICByZXN1bHQtPm1fcmFyZURhdGEtPnZpYVByb3h5ID0gdmlh
UHJveHk7CisgICAgICAgIHJlc3VsdC0+bV9yYXJlRGF0YS0+YWRkaXRpb25hbFNldCA9IGFkZGl0
aW9uYWxTZXQ7CisgICAgICAgIHJlc3VsdC0+bV9yYXJlRGF0YS0+Y3VzdG9tQWNjZXNzb3IuZ2V0
dGVyID0gY3VzdG9tR2V0dGVyOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUdl
dEJ5SWRBY2Nlc3MgR2V0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbykKK3N0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3ND
YXNlOjpyZXBsYWNlKAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgaW5pdGlhbFNsb3dQYXRoID0KLSAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSk7Ci0gICAg
Ci0gICAgR2V0QnlJZEFjY2VzcyByZXN1bHQ7Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NFUlQoc3R1
YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYpOwotICAgIAotICAgIHJl
c3VsdC5tX3R5cGUgPSBTaW1wbGVJbmxpbmU7Ci0gICAgcmVzdWx0Lm1fc3RydWN0dXJlLmNvcHlG
cm9tKHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZSk7Ci0gICAgcmVz
dWx0Lm1fc3R1YlJvdXRpbmUgPSBKSVRTdHViUm91dGluZTo6Y3JlYXRlU2VsZk1hbmFnZWRSb3V0
aW5lKGluaXRpYWxTbG93UGF0aCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHJl
c3VsdChuZXcgQWNjZXNzQ2FzZSgpKTsKKworICAgIHJlc3VsdC0+bV90eXBlID0gUmVwbGFjZTsK
KyAgICByZXN1bHQtPm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgIHJlc3VsdC0+bV9zdHJ1Y3R1cmUu
c2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0
ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjp0cmFuc2l0aW9uKAorICAgIFZN
JiB2bSwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSog
bmV3U3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCisgICAgY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChv
bGRTdHJ1Y3R1cmUgPT0gbmV3U3RydWN0dXJlLT5wcmV2aW91c0lEKCkpOwogICAgIAorICAgIHN0
ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nhc2UoKSk7CisKKyAg
ICByZXN1bHQtPm1fdHlwZSA9IFRyYW5zaXRpb247CisgICAgcmVzdWx0LT5tX29mZnNldCA9IG9m
ZnNldDsKKyAgICByZXN1bHQtPm1fc3RydWN0dXJlLnNldCh2bSwgb3duZXIsIG5ld1N0cnVjdHVy
ZSk7CisgICAgcmVzdWx0LT5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKKworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNl
OjpzZXR0ZXIoCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5cGUsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCisgICAgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgUHV0UHJvcGVydHlTbG90OjpQ
dXRWYWx1ZUZ1bmMgY3VzdG9tU2V0dGVyKQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3ND
YXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nhc2UoKSk7CisKKyAgICByZXN1bHQtPm1fdHlwZSA9IHR5
cGU7CisgICAgcmVzdWx0LT5tX29mZnNldCA9IG9mZnNldDsKKyAgICByZXN1bHQtPm1fc3RydWN0
dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7CisgICAgcmVzdWx0LT5tX2NvbmRpdGlvblNl
dCA9IGNvbmRpdGlvblNldDsKKworICAgIGlmIChjdXN0b21TZXR0ZXIpIHsKKyAgICAgICAgcmVz
dWx0LT5tX3JhcmVEYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxSYXJlRGF0YT4oKTsKKyAgICAgICAg
cmVzdWx0LT5tX3JhcmVEYXRhLT5jdXN0b21BY2Nlc3Nvci5zZXR0ZXIgPSBjdXN0b21TZXR0ZXI7
CisgICAgfQorCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotYm9vbCBHZXRCeUlkQWNjZXNzOjp2
aXNpdFdlYWsoVk0mIHZtKSBjb25zdAorQWNjZXNzQ2FzZTo6fkFjY2Vzc0Nhc2UoKQoreworfQor
CitzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6ZnJvbVN0cnVjdHVyZVN0
dWJJbmZvKAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvKQoreworICAgIHN3aXRjaCAoc3R1YkluZm8uYWNjZXNzVHlwZSkgeworICAgIGNhc2Ug
YWNjZXNzX2dldF9ieV9pZF9zZWxmOgorICAgICAgICByZXR1cm4gZ2V0KAorICAgICAgICAgICAg
dm0sIG93bmVyLCBMb2FkLCBzdHViSW5mby51LmJ5SWRTZWxmLm9mZnNldCwgc3R1YkluZm8udS5i
eUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlKTsKKworICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9p
ZF9yZXBsYWNlOgorICAgICAgICByZXR1cm4gcmVwbGFjZSh2bSwgb3duZXIsIHN0dWJJbmZvLnUu
YnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZSwgc3R1YkluZm8udS5ieUlkU2VsZi5vZmZzZXQp
OworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorfQorCiti
b29sIEFjY2Vzc0Nhc2U6OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0CiB7CiAgICAgaWYgKG1fc3Ry
dWN0dXJlICYmICFIZWFwOjppc01hcmtlZChtX3N0cnVjdHVyZS5nZXQoKSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBpZiAoIW1fY29uZGl0aW9uU2V0LmFyZVN0aWxsTGl2ZSgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFtX3N0dWJSb3V0aW5lLT52aXNpdFdlYWsodm0p
KQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fcmFyZURhdGEgJiYgbV9yYXJlRGF0
YS0+Y2FsbExpbmtJbmZvKQorICAgICAgICBtX3JhcmVEYXRhLT5jYWxsTGlua0luZm8tPnZpc2l0
V2Vhayh2bSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVBvbHltb3JwaGljR2V0QnlJZExpc3Q6
OlBvbHltb3JwaGljR2V0QnlJZExpc3QoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQordm9p
ZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKKyAgICBBY2Nlc3NHZW5lcmF0aW9uU3Rh
dGUmIHN0YXRlLCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0JiBmYWxsVGhyb3VnaCkKK3sKKyAgICBD
Q2FsbEhlbHBlcnMmIGppdCA9ICpzdGF0ZS5qaXQ7CisKKyAgICBpZiAodmlhUHJveHkoKSkgewor
ICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCisgICAgICAgICAgICBqaXQuYnJhbmNoOCgKKyAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6QWRkcmVzcyhzdGF0ZS5iYXNlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9m
ZnNldCgpKSwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihQdXJl
Rm9yd2FyZGluZ1Byb3h5VHlwZSkpKTsKKworICAgICAgICBqaXQubG9hZFB0cigKKyAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdGF0ZS5iYXNlR1BSLCBKU1Byb3h5Ojp0YXJnZXRP
ZmZzZXQoKSksCisgICAgICAgICAgICBzdGF0ZS5zY3JhdGNoR1BSKTsKKworICAgICAgICBmYWxs
VGhyb3VnaC5hcHBlbmQoCisgICAgICAgICAgICBqaXQuYnJhbmNoU3RydWN0dXJlKAorICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsCisgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKHN0YXRlLnNjcmF0Y2hHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksCisgICAgICAgICAgICAgICAgc3RydWN0dXJlKCkpKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCisgICAgICAgICAgICBqaXQuYnJhbmNoU3RydWN0dXJl
KAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsCisgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0YXRlLmJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgc3RydWN0dXJlKCkpKTsKKyAgICB9CisKKyAg
ICBnZW5lcmF0ZShzdGF0ZSk7Cit9CisKK3ZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGUoQWNjZXNz
R2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkKK3sKKyAgICBDQ2FsbEhlbHBlcnMmIGppdCA9ICpzdGF0
ZS5qaXQ7CisgICAgVk0mIHZtID0gKmppdC52bSgpOworICAgIFBvbHltb3JwaGljQWNjZXNzJiBh
Y2Nlc3MgPSAqc3RhdGUuYWNjZXNzOworICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9
ICpzdGF0ZS5zdHViSW5mbzsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGppdC5jb2RlQmxv
Y2soKTsKKyAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9ICpzdGF0ZS5pZGVudDsKKyAgICBK
U1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSBzdGF0ZS52YWx1ZVJlZ3M7CisgICAgR1BSUmVnIGJhc2VH
UFIgPSBzdGF0ZS5iYXNlR1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc3RhdGUuc2NyYXRj
aEdQUjsKKworICAgIEFTU0VSVChtX2NvbmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRp
dHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKTsKKworICAgIGlmIChzdHJ1Y3R1
cmUoKS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIHx8IG1fY29uZGl0aW9uU2V0Lm5l
ZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkKKyAgICAgICAgdm0ucmVnaXN0ZXJXYXRjaHBv
aW50Rm9ySW1wdXJlUHJvcGVydHkoaWRlbnQsIGFjY2Vzcy5hZGRXYXRjaHBvaW50KHN0YXRlKSk7
CisKKyAgICBpZiAoYWRkaXRpb25hbFNldCgpKQorICAgICAgICBhZGRpdGlvbmFsU2V0KCktPmFk
ZChhY2Nlc3MuYWRkV2F0Y2hwb2ludChzdGF0ZSkpOworCisgICAgZm9yIChjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogbV9jb25kaXRpb25TZXQpIHsKKyAgICAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjb25kaXRpb24ub2JqZWN0KCktPnN0cnVjdHVyZSgpOwor
CisgICAgICAgIGlmIChjb25kaXRpb24uaXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5
V2F0Y2hwb2ludCgpKSB7CisgICAgICAgICAgICBzdHJ1Y3R1cmUtPmFkZFRyYW5zaXRpb25XYXRj
aHBvaW50KGFjY2Vzcy5hZGRXYXRjaHBvaW50KHN0YXRlLCBjb25kaXRpb24pKTsKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uZGl0
aW9uLnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBv
aW50KHN0cnVjdHVyZSkpOworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIoY29uZGl0aW9uLm9iamVjdCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0YXRlLmZh
aWx1cmUuYXBwZW5kKAorICAgICAgICAgICAgaml0LmJyYW5jaFN0cnVjdHVyZSgKKyAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAor
ICAgICAgICAgICAgICAgIHN0cnVjdHVyZSkpOworICAgIH0KKworICAgIHN3aXRjaCAobV90eXBl
KSB7CisgICAgY2FzZSBJbnZhbGlkOgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgSW5IaXQ6CisgICAgY2Fz
ZSBJbk1pc3M6CisgICAgICAgIGppdC5ib3hCb29sZWFuUGF5bG9hZChtX3R5cGUgPT0gSW5IaXQs
IHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOworICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7CisgICAg
ICAgIHJldHVybjsKKworICAgIGNhc2UgTWlzczoKKyAgICAgICAgaml0Lm1vdmVUcnVzdGVkVmFs
dWUoanNVbmRlZmluZWQoKSwgdmFsdWVSZWdzKTsKKyAgICAgICAgc3RhdGUuc3VjY2VlZCgpOwor
ICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIExvYWQ6CisgICAgY2FzZSBHZXR0ZXI6CisgICAg
Y2FzZSBTZXR0ZXI6CisgICAgY2FzZSBDdXN0b21HZXR0ZXI6CisgICAgY2FzZSBDdXN0b21TZXR0
ZXI6IHsKKyAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQobV9vZmZzZXQpKSB7CisgICAgICAgICAg
ICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmU7CisgICAgICAgICAgICBpZiAobV9jb25kaXRpb25T
ZXQuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY3VyclN0cnVjdHVyZSA9IG1fY29u
ZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2JqZWN0KCktPnN0cnVjdHVyZSgpOworICAg
ICAgICAgICAgY3VyclN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1l
bnRzKHZtLCBvZmZzZXQpOworICAgICAgICB9CisKKyAgICAgICAgR1BSUmVnIGJhc2VGb3JHZXRH
UFI7CisgICAgICAgIGlmICh2aWFQcm94eSgpKSB7CisgICAgICAgICAgICBiYXNlRm9yR2V0R1BS
ID0gdmFsdWVSZWdzLnBheWxvYWRHUFIoKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKAorICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU1Byb3h5Ojp0YXJn
ZXRPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgYmFzZUZvckdldEdQUik7CisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgYmFzZUZvckdldEdQUiA9IGJhc2VHUFI7CisKKyAgICAgICAgR1BS
UmVnIGJhc2VGb3JBY2Nlc3NHUFI7CisgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzRW1wdHko
KSkgeworICAgICAgICAgICAgaml0Lm1vdmUoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9iamVjdCgp
KSwKKyAgICAgICAgICAgICAgICBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGJhc2VGb3JBY2Nl
c3NHUFIgPSBzY3JhdGNoR1BSOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGJhc2VGb3JB
Y2Nlc3NHUFIgPSBiYXNlRm9yR2V0R1BSOworCisgICAgICAgIEdQUlJlZyBsb2FkZWRWYWx1ZUdQ
UiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGlmIChtX3R5cGUgIT0gQ3VzdG9tR2V0dGVyICYm
IG1fdHlwZSAhPSBDdXN0b21TZXR0ZXIpIHsKKyAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gTG9h
ZCkKKyAgICAgICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUiA9IHZhbHVlUmVncy5wYXlsb2FkR1BS
KCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIgPSBz
Y3JhdGNoR1BSOworCisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUjsKKyAgICAgICAgICAg
IGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKQorICAgICAgICAgICAgICAgIHN0b3JhZ2VHUFIg
PSBiYXNlRm9yQWNjZXNzR1BSOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
aml0LmxvYWRQdHIoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhi
YXNlRm9yQWNjZXNzR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLAorICAgICAgICAg
ICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUik7CisgICAgICAgICAgICAgICAgc3RvcmFnZUdQUiA9
IGxvYWRlZFZhbHVlR1BSOworICAgICAgICAgICAgfQorCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAg
ICAgICAgICAgIGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9m
ZnNldFJlbGF0aXZlVG9CYXNlKG9mZnNldCkpLCBsb2FkZWRWYWx1ZUdQUik7CisjZWxzZQorICAg
ICAgICAgICAgaWYgKG1fdHlwZSA9PSBsb2FkKSB7CisgICAgICAgICAgICAgICAgaml0LmxvYWQz
MigKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0b3JhZ2VHUFIs
IG9mZnNldFJlbGF0aXZlVG9CYXNlKG9mZnNldCkgKyBUYWdPZmZzZXQpLAorICAgICAgICAgICAg
ICAgICAgICB2YWx1ZVJlZ3MudGFnR1BSKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aml0LmxvYWQzMigKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RvcmFn
ZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uob2Zmc2V0KSArIFBheWxvYWRPZmZzZXQpLAorICAg
ICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSKTsKKyNlbmRpZgorICAgICAgICB9CisKKyAgICAg
ICAgLy8gU3R1ZmYgZm9yIGN1c3RvbSBnZXR0ZXJzLgorICAgICAgICBDQ2FsbEhlbHBlcnM6OkNh
bGwgb3BlcmF0aW9uQ2FsbDsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGhhbmRsZXJDYWxs
OworCisgICAgICAgIC8vIFN0dWZmIGZvciBKUyBnZXR0ZXJzLgorICAgICAgICBDQ2FsbEhlbHBl
cnM6OkRhdGFMYWJlbFB0ciBhZGRyZXNzT2ZMaW5rRnVuY3Rpb25DaGVjazsKKyAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpDYWxsIGZhc3RQYXRoQ2FsbDsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxs
IHNsb3dQYXRoQ2FsbDsKKworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgc3VjY2VzczsKKyAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGZhaWw7CisgICAgICAgIGlmIChtX3R5cGUgIT0gTG9h
ZCAmJiBtX3R5cGUgIT0gTWlzcykgeworICAgICAgICAgICAgLy8gTmVlZCB0byBtYWtlIHN1cmUg
dGhhdCB3aGVuZXZlciB0aGlzIGNhbGwgaXMgbWFkZSBpbiB0aGUgZnV0dXJlLCB3ZSByZW1lbWJl
ciB0aGUKKyAgICAgICAgICAgIC8vIHBsYWNlIHRoYXQgd2UgbWFkZSBpdCBmcm9tLgorICAgICAg
ICAgICAgaml0LnN0b3JlMzIoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoc3R1YkluZm8uY2FsbFNpdGVJbmRleC5iaXRzKCkpLAorICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oSlNTdGFjazo6
QXJndW1lbnRDb3VudCkpKTsKKworICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBHZXR0ZXIgfHwg
bV90eXBlID09IFNldHRlcikgeworICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIEpTIGNhbGwg
dXNpbmcgYSBKUyBjYWxsIGlubGluZSBjYWNoZS4gQXNzdW1lIHRoYXQ6CisgICAgICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgICAgICAvLyAtIFNQIGlzIGFsaWduZWQgYW5kIHJlcHJlc2VudHMg
dGhlIGV4dGVudCBvZiB0aGUgY2FsbGluZyBjb21waWxlcidzIHN0YWNrIHVzYWdlLgorICAgICAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gLSBGUCBpcyBzZXQgY29ycmVjdGx5IChp
LmUuIGl0IHBvaW50cyB0byB0aGUgY2FsbGVyJ3MgY2FsbCBmcmFtZSBoZWFkZXIpLgorICAgICAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gLSBTUCAtIEZQIGlzIGFuIGFsaWduZWQg
ZGlmZmVyZW5jZS4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIC0gQW55
IGJ5dGUgYmV0d2VlbiBGUCAoZXhjbHVzaXZlKSBhbmQgU1AgKGluY2x1c2l2ZSkgY291bGQgYmUg
bGl2ZSBpbiB0aGUgY2FsbGluZworICAgICAgICAgICAgICAgIC8vICAgY29kZS4KKyAgICAgICAg
ICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIFRoZXJlZm9yZSwgd2UgdGVtcG9yYXJpbHkg
Z3JvdyB0aGUgc3RhY2sgZm9yIHRoZSBwdXJwb3NlIG9mIHRoZSBjYWxsIGFuZCB0aGVuCisgICAg
ICAgICAgICAgICAgLy8gc2hyaW5rIGl0IGFmdGVyLgorCisgICAgICAgICAgICAgICAgbV9yYXJl
RGF0YS0+Y2FsbExpbmtJbmZvID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxsTGlua0luZm8+KCk7Cisg
ICAgICAgICAgICAgICAgbV9yYXJlRGF0YS0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwg
c3R1YkluZm8uY29kZU9yaWdpbiwgbG9hZGVkVmFsdWVHUFIpOworCisgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOworCisgICAgICAgICAgICAgICAgLy8gVGhlcmUg
aXMgYSAidGhpcyIgYXJndW1lbnQuCisgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZQ
YXJhbWV0ZXJzID0gMTsKKyAgICAgICAgICAgICAgICAvLyAuLi4gYW5kIGEgdmFsdWUgYXJndW1l
bnQgaWYgd2UncmUgY2FsbGluZyBhIHNldHRlci4KKyAgICAgICAgICAgICAgICBpZiAobV90eXBl
ID09IFNldHRlcikKKyAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZQYXJhbWV0ZXJzKys7CisK
KyAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGFjY2Vzc29yOyBpZiB0aGVyZSBhaW4ndCBvbmUg
dGhlbiB0aGUgcmVzdWx0IGlzIGpzVW5kZWZpbmVkKCkuCisgICAgICAgICAgICAgICAgaWYgKG1f
dHlwZSA9PSBTZXR0ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoCisgICAg
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobG9hZGVkVmFsdWVHUFIs
IEdldHRlclNldHRlcjo6b2Zmc2V0T2ZTZXR0ZXIoKSksCisgICAgICAgICAgICAgICAgICAgICAg
ICBsb2FkZWRWYWx1ZUdQUik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgaml0LmxvYWRQdHIoCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MobG9hZGVkVmFsdWVHUFIsIEdldHRlclNldHRlcjo6b2Zmc2V0T2ZHZXR0ZXIo
KSksCisgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUik7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHJldHVyblVuZGVm
aW5lZCA9IGppdC5icmFuY2hUZXN0UHRyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6Olplcm8sIGxvYWRlZFZhbHVlR1BSKTsKKworICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51
bWJlck9mUmVnc0ZvckNhbGwgPSBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgbnVtYmVy
T2ZQYXJhbWV0ZXJzOworCisgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZCeXRlc0Zv
ckNhbGwgPQorICAgICAgICAgICAgICAgICAgICBudW1iZXJPZlJlZ3NGb3JDYWxsICogc2l6ZW9m
KFJlZ2lzdGVyKSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKTsKKworICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2FsbCA9CisgICAgICAgICAgICAgICAg
ICAgIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dHdzKCksIG51bWJl
ck9mQnl0ZXNGb3JDYWxsKTsKKworICAgICAgICAgICAgICAgIGppdC5zdWJQdHIoCisgICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFsaWduZWROdW1iZXJPZkJ5
dGVzRm9yQ2FsbCksCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6c3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOworCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzIGNh
bGxlZUZyYW1lID0gQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAt
c3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKKworICAg
ICAgICAgICAgICAgIGppdC5zdG9yZTMyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihudW1iZXJPZlBhcmFtZXRlcnMpLAorICAgICAgICAgICAgICAgICAg
ICBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQgKiBzaXplb2Yo
UmVnaXN0ZXIpICsgUGF5bG9hZE9mZnNldCkpOworCisgICAgICAgICAgICAgICAgaml0LnN0b3Jl
Q2VsbCgKKyAgICAgICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIsIGNhbGxlZUZyYW1lLndp
dGhPZmZzZXQoSlNTdGFjazo6Q2FsbGVlICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworCisgICAgICAg
ICAgICAgICAgaml0LnN0b3JlQ2VsbCgKKyAgICAgICAgICAgICAgICAgICAgYmFzZUZvckdldEdQ
UiwKKyAgICAgICAgICAgICAgICAgICAgY2FsbGVlRnJhbWUud2l0aE9mZnNldCh2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudCgwKS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpKTsKKworICAg
ICAgICAgICAgICAgIGlmIChraW5kID09IENhbGxTZXR0ZXIpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaml0LnN0b3JlVmFsdWUoCisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MsCisg
ICAgICAgICAgICAgICAgICAgICAgICBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEpLm9mZnNldCgp
ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6SnVtcCBzbG93Q2FzZSA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2go
CisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIGxvYWRlZFZhbHVl
R1BSLCBhZGRyZXNzT2ZMaW5rRnVuY3Rpb25DaGVjaywKKyAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKDApKTsKKworICAgICAgICAgICAgICAgIGZhc3RQYXRo
Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOworCisgICAgICAgICAgICAgICAgaml0LmFkZFB0cigKKyAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYWxpZ25lZE51bWJl
ck9mQnl0ZXNGb3JDYWxsKSwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ2FsbEdldHRl
cikKKyAgICAgICAgICAgICAgICAgICAgaml0LnNldHVwUmVzdWx0cyh2YWx1ZVJlZ3MpOworCisg
ICAgICAgICAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAg
c2xvd0Nhc2UubGluaygmaml0KTsKKworICAgICAgICAgICAgICAgIGppdC5tb3ZlKGxvYWRlZFZh
bHVlR1BSLCBHUFJJbmZvOjpyZWdUMCk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAg
ICAgICAgICAvLyBXZSAqYWx3YXlzKiBrbm93IHRoYXQgdGhlIGdldHRlci9zZXR0ZXIsIGlmIG5v
bi1udWxsLCBpcyBhIGNlbGwuCisgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIEdQUkluZm86OnJlZ1QxKTsKKyNlbmRp
ZgorICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0ciht
X3JhcmVEYXRhLT5jYWxsTGlua0luZm8uZ2V0KCkpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAg
ICAgICAgICAgc2xvd1BhdGhDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisKKyAgICAgICAgICAgICAg
ICBqaXQuYWRkUHRyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwpLAorICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBpZiAo
a2luZCA9PSBDYWxsR2V0dGVyKQorICAgICAgICAgICAgICAgICAgICBqaXQuc2V0dXBSZXN1bHRz
KHZhbHVlUmVncyk7CisKKyAgICAgICAgICAgICAgICBkb25lLmFwcGVuZChqaXQuanVtcCgpKTsK
KyAgICAgICAgICAgICAgICByZXR1cm5VbmRlZmluZWQubGluaygmaml0KTsKKworICAgICAgICAg
ICAgICAgIGlmIChraW5kID09IENhbGxHZXR0ZXIpCisgICAgICAgICAgICAgICAgICAgIGppdC5t
b3ZlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIHZhbHVlUmVncyk7CisKKyAgICAgICAgICAg
ICAgICBkb25lLmxpbmsoJmppdCk7CisKKyAgICAgICAgICAgICAgICBzdGF0ZS5jYWxsYmFja3Mu
YXBwZW5kKAorICAgICAgICAgICAgICAgICAgICBbJl0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fcmFyZURhdGEtPmNhbGxMaW5rSW5mby0+c2V0
Q2FsbExvY2F0aW9ucygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2ZOZWFyQ2FsbChzbG93UGF0aENhbGwpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZihhZGRyZXNzT2ZMaW5rRnVuY3Rpb25DaGVjayksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwo
ZmFzdFBhdGhDYWxsKSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGlu
aygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1YihsaW5rQ2Fs
bFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIGdldHRlcjogRW5jb2RlZEpTVmFs
dWUgKCpHZXRWYWx1ZUZ1bmMpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgICAgIC8vIHNl
dHRlcjogdm9pZCAoKlB1dFZhbHVlRnVuYykoRXhlY1N0YXRlKiwgSlNPYmplY3QqIGJhc2UsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKTsKKyNpZiBVU0Uo
SlNWQUxVRTY0KQorICAgICAgICAgICAgICAgIGlmIChraW5kID09IENhbGxDdXN0b21HZXR0ZXIp
IHsKKyAgICAgICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VGb3JBY2Nlc3NHUFIsIGJhc2VGb3JHZXRHUFIs
CisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIocHJv
cGVydHlOYW1lLmltcGwoKSkpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
ICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VGb3JBY2Nlc3NHUFIs
IGJhc2VGb3JHZXRHUFIsIHZhbHVlUmVncy5ncHIoKSk7CisjZWxzZQorICAgICAgICAgICAgICAg
IGlmIChraW5kID09IENhbGxDdXN0b21HZXR0ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgaml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIGJh
c2VGb3JBY2Nlc3NHUFIsIGJhc2VGb3JHZXRHUFIsCisgICAgICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihwcm9wZXJ0eU5hbWUuaW1w
bCgpKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIGJh
c2VGb3JBY2Nlc3NHUFIsIGJhc2VGb3JHZXRHUFIsCisgICAgICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHZhbHVlUmVncy50YWdHUFIoKSk7
CisgICAgICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgICAgICAgICAgaml0LnN0b3JlUHRy
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAmdm0tPnRvcENhbGxGcmFtZSk7CisKKyAgICAg
ICAgICAgICAgICBvcGVyYXRpb25DYWxsID0gaml0LmNhbGwoKTsKKyAgICAgICAgICAgICAgICBp
ZiAoa2luZCA9PSBDYWxsQ3VzdG9tR2V0dGVyKQorICAgICAgICAgICAgICAgICAgICBqaXQuc2V0
dXBSZXN1bHRzKHZhbHVlUmVncyk7CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
IG5vRXhjZXB0aW9uID0KKyAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRFeGNlcHRpb25DaGVj
ayhDQ2FsbEhlbHBlcnM6OkludmVydGVkRXhjZXB0aW9uQ2hlY2spOworICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cih2bSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBo
YW5kbGVyQ2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgICAgICAgICAgaml0Lmp1bXBUb0V4Y2Vw
dGlvbkhhbmRsZXIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG5vRXhjZXB0aW9u
LmxpbmsoJmppdCk7CisKKyAgICAgICAgICAgICAgICBzdGF0ZS5jYWxsYmFja3MuYXBwZW5kKAor
ICAgICAgICAgICAgICAgICAgICBbJl0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhvcGVyYXRpb25DYWxsLCBGdW5jdGlv
blB0cihtX3JhcmVEYXRhLT5jdXN0b21BY2Nlc3Nvci5vcGFxdWUpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGxpbmtCdWZmZXIubGluayhoYW5kbGVyQ2FsbCwgbG9va3VwRXhjZXB0aW9uSGFu
ZGxlcik7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGNhc2UgUmVwbGFjZTogeworICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQobV9vZmZzZXQpKSB7
CisgICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSgKKyAgICAgICAgICAgICAgICB2YWx1ZVJlZ3Ms
CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgICAg
ICAgICBiYXNlR1BSLAorICAgICAgICAgICAgICAgICAgICBKU09iamVjdDo6b2Zmc2V0T2ZJbmxp
bmVTdG9yYWdlKCkgKworICAgICAgICAgICAgICAgICAgICBvZmZzZXRJbklubGluZVN0b3JhZ2Uo
bV9vZmZzZXQpICogc2l6ZW9mKEpTVmFsdWUpKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6
OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBqaXQuc3RvcmVW
YWx1ZSgKKyAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MsCisgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgICAgICAgICBzY3JhdGNoR1BSMSwgb2Zmc2V0
SW5CdXR0ZXJmbHkobV9vZmZzZXQpICogc2l6ZW9mKEpTVmFsdWUpKSk7CisgICAgICAgIH0KKyAg
ICAgICAgc3RhdGUuc3VjY2VlZCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2Fz
ZSBUcmFuc2l0aW9uOiB7CisgICAgICAgIC8vIEFjY2Vzc0Nhc2U6OnRyYW5zaXRpb24oKSBzaG91
bGQgaGF2ZSByZXR1cm5lZCBudWxsLgorICAgICAgICBSRUxFQVNFX0FTU0VSVChHUFJJbmZvOjpu
dW1iZXJPZlJlZ2lzdGVycyA+PSA2IHx8ICFzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSB8fCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA9PSBuZXdTdHJ1Y3R1cmUoKS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFvbGRTdHJ1Y3R1
cmUtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpOworCisgICAgICAgIENDYWxsSGVscGVyczo6
SnVtcExpc3Qgc2xvd1BhdGg7CisKKyAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFs
bG9jYXRvcihzdHViSW5mby5wYXRjaC51c2VkUmVnaXN0ZXJzKTsKKyAgICAgICAgYWxsb2NhdG9y
LmxvY2soYmFzZUdQUik7CisgICAgICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlUmVncyk7CisgICAg
ICAgIGFsbG9jYXRvci5sb2NrKHNjcmF0Y2hHUFIpOworCisgICAgICAgIEdQUlJlZyBzY3JhdGNo
R1BSMiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgR1BSUmVnIHNj
cmF0Y2hHUFIzOworICAgICAgICBpZiAobmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5
KCkgIT0gc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkKKyAgICAgICAgICAgICYmIHN0
cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKQorICAgICAgICAgICAgc2NyYXRjaEdQUjMg
PSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHNjcmF0Y2hHUFIzID0gSW52YWxpZEdQUlJlZzsKKworICAgICAgICBzaXplX3QgbnVtYmVy
T2ZQYWRkaW5nQnl0ZXMgPSBhbGxvY2F0ZS5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGlu
ZyhqaXQpOworCisgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNocG9p
bnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7CisKKyAgICAgICAgYm9vbCBzY3JhdGNoR1BSSGFz
U3RvcmFnZSA9IGZhbHNlOworCisgICAgICAgIGlmIChuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSAhPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgeworICAgICAg
ICAgICAgc2l6ZV90IG5ld1NpemUgPSBuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSAqIHNpemVvZihKU1ZhbHVlKTsKKyAgICAgICAgICAgIENvcGllZEFsbG9jYXRvciogY29waWVk
QWxsb2NhdG9yID0gJnZtLT5oZWFwLnN0b3JhZ2VBbGxvY2F0b3IoKTsKKworICAgICAgICAgICAg
aWYgKCFzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkpIHsKKyAgICAgICAgICAgICAgICBq
aXQubG9hZFB0cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hH
UFIpOworICAgICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAg
ICAgaml0LmJyYW5jaFN1YlB0cigKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6U2lnbmVkLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRjaEdQ
UikpOworICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCAmY29waWVkQWxs
b2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcpOworICAgICAgICAgICAgICAgIGppdC5uZWdQdHIo
c2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgaml0LmFkZFB0cigKKyAgICAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9jYXRvci0+bV9j
dXJyZW50UGF5bG9hZEVuZCksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGppdC5hZGRQ
dHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEpTVmFsdWUpKSwgc2NyYXRjaEdQ
Uik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNpemVfdCBvbGRTaXpl
ID0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwor
ICAgICAgICAgICAgICAgIEFTU0VSVChuZXdTaXplID4gb2xkU2l6ZSk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUjMpOworICAgICAgICAg
ICAgICAgIGppdC5sb2FkUHRyKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZywg
c2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKAorICAgICAgICAg
ICAgICAgICAgICBqaXQuYnJhbmNoU3ViUHRyKAorICAgICAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpTaWduZWQsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG5ld1NpemUpLCBz
Y3JhdGNoR1BSKSk7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIsICZj
b3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZyk7CisgICAgICAgICAgICAgICAgaml0
Lm5lZ1B0cihzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAorICAgICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFic29sdXRlQWRkcmVzcygmY29waWVkQWxsb2Nh
dG9yLT5tX2N1cnJlbnRQYXlsb2FkRW5kKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAg
aml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzaXplb2YoSlNWYWx1ZSkpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHNjcmF0Y2hHUFIgPSBuZXcg
c3RvcmFnZSwgc2NyYXRjaEdQUjMgPSBvbGQgc3RvcmFnZSwKKyAgICAgICAgICAgICAgICAvLyBz
Y3JhdGNoR1BSMiA9IGF2YWlsYWJsZQorICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IG9mZnNl
dCA9IDA7IG9mZnNldCA8IG9sZFNpemU7IG9mZnNldCArPSBzaXplb2Yodm9pZCopKSB7CisgICAg
ICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKAorICAgICAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hH
UFIzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKyBzaXplb2YoSlNWYWx1
ZSkgKyBzaXplb2Yodm9pZCopKSksCisgICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoR1BS
Mik7CisgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cigKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHNjcmF0Y2hHUFIyLAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4ob2Zmc2V0ICsg
c2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCBDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoYnNhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkp
OworICAgICAgICAgICAgc2NyYXRjaEdQUkhhc1N0b3JhZ2UgPSB0cnVlOworICAgICAgICB9CisK
KyAgICAgICAgdWludDMyX3Qgc3RydWN0dXJlQml0cyA9IGJpdHdpc2VfY2FzdDx1aW50MzJfdD4o
c3RydWN0dXJlLT5pZCgpKTsKKyAgICAgICAgaml0LnN0b3JlMzIoCisgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlQml0cyksCisgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOnN0cnVjdHVyZUlET2Zmc2V0KCkpKTsK
KworICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQobV9vZmZzZXQpKSB7CisgICAgICAgICAgICBq
aXQuc3RvcmVWYWx1ZSgKKyAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MsCisgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgICAgICAgICBiYXNlR1BSLAor
ICAgICAgICAgICAgICAgICAgICBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKwor
ICAgICAgICAgICAgICAgICAgICBvZmZzZXRJbklubGluZVN0b3JhZ2UobV9vZmZzZXQgKiBzaXpl
b2YoSlNWYWx1ZSkpKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoIXNjcmF0
Y2hHUFJIYXNTdG9yYWdlKQorICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVy
czo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVZhbHVlKAorICAgICAgICAgICAgICAgIHZhbHVl
UmVncywKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwg
b2Zmc2V0SW5CdXR0ZXJmbHkobV9vZmZzZXQpICogc2l6ZW9mKEpTVmFsdWUpKSk7CisgICAgICAg
IH0KKworICAgICAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gbnVsbHB0cjsKKyAg
ICAgICAgaWYgKG5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IHN0cnVjdHVy
ZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKQorICAgICAgICAgICAgc2NyYXRjaEJ1ZmZlciA9IHZt
LT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShhbGxvY2F0b3IuZGVzaXJlZFNjcmF0Y2hCdWZmZXJTaXpl
Rm9yQ2FsbCgpKTsKKworI2lmIEVOQUJMRShHR0MpCisgICAgICAgIGlmIChuZXdTdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSkgeworICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxGbHVzaFdyaXRlQmFycmll
ckJ1ZmZlcjsKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBvd25lcklzUmVtZW1iZXJl
ZE9ySW5FZGVuID0gaml0Lmp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKGJhc2VHUFIpOworICAg
ICAgICAgICAgV3JpdGVCYXJyaWVyQnVmZmVyJiB3cml0ZUJhcnJpZXJCdWZmZXIgPSBqaXQudm0o
KS0+aGVhcC53cml0ZUJhcnJpZXJCdWZmZXIoKTsKKyAgICAgICAgICAgIGppdC5sb2FkMzIod3Jp
dGVCYXJyaWVyQnVmZmVyLmN1cnJlbnRJbmRleEFkZHJlc3MoKSwgc2NyYXRjaEdQUjIpOworICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIG5lZWRUb0ZsdXNoID0KKyAgICAgICAgICAgICAg
ICBqaXQuYnJhbmNoMzIoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWJvdmVP
ckVxdWFsLCBzY3JhdGNoR1BSMiwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIod3JpdGVCYXJyaWVyQnVmZmVyLmNhcGFjaXR5KCkpKTsKKworICAgICAgICAg
ICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoR1BSMik7
CisgICAgICAgICAgICBqaXQuc3RvcmUzMihzY3JhdGNoR1BSMiwgd3JpdGVCYXJyaWVyQnVmZmVy
LmN1cnJlbnRJbmRleEFkZHJlc3MoKSk7CisKKyAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cih3cml0ZUJhcnJpZXJCdWZmZXIuYnVmZmVyKCkpLCBzY3JhdGNo
R1BSMSk7CisgICAgICAgICAgICAvLyBXZSB1c2UgYW4gb2Zmc2V0IG9mIC1zaXplb2Yodm9pZCop
IGJlY2F1c2Ugd2UgYWxyZWFkeSBhZGRlZCAxIHRvIHNjcmF0Y2hHUFIyLgorICAgICAgICAgICAg
aml0LnN0b3JlUHRyKAorICAgICAgICAgICAgICAgIGJhc2VHUFIsCisgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoCisgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIx
LCBzY3JhdGNoR1BSMiwgQ0NhbGxIZWxwZXJzOjpTY2FsZVB0ciwKKyAgICAgICAgICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4oLXNpemVvZih2b2lkKikpKSk7CisKKyAgICAgICAgICAg
IENDYWxsSGVscGVyczo6SnVtcCBkb25lV2l0aEJhcnJpZXIgPSBqaXQuanVtcCgpOworICAgICAg
ICAgICAgbmVlZFRvRmx1c2gubGluaygmaml0KTsKKworICAgICAgICAgICAgYWxsb2NhdG9yLnBy
ZXNlcnZlVXNlZFJlZ2lzdGVyc1RvU2NyYXRjaEJ1ZmZlckZvckNhbGwoaml0LCBzY3JhdGNoQnVm
ZmVyLCBzY3JhdGNoR1BSMik7CisgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKGJhc2VHUFIpOworICAgICAgICAgICAgY2FsbEZsdXNoV3JpdGVCYXJyaWVyQnVmZmVy
ID0gaml0LmNhbGwoKTsKKyAgICAgICAgICAgIGFsbG9jYXRvci5yZXN0b3JlVXNlZFJlZ2lzdGVy
c0Zyb21TY3JhdGNoQnVmZmVyRm9yQ2FsbCgKKyAgICAgICAgICAgICAgICBqaXQsIHNjcmF0Y2hC
dWZmZXIsIHNjcmF0Y2hHUFIyKTsKKworICAgICAgICAgICAgZG9uZVdpdGhCYXJyaWVyLmxpbmso
JmppdCk7CisgICAgICAgICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsoJmppdCk7
CisKKyAgICAgICAgICAgIHN0YXRlLmNhbGxiYWNrcy5hcHBlbmQoCisgICAgICAgICAgICAgICAg
WyZdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgIGxpbmtC
dWZmZXIubGluayhjYWxsRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIsIG9wZXJhdGlvbkZsdXNoV3Jp
dGVCYXJyaWVyQnVmZmVyKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorI2VuZGlm
IC8vIEVOQUJMRShHR0MpCisgICAgICAgIAorICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7CisKKyAg
ICAgICAgaWYgKG5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IHN0cnVjdHVy
ZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CisgICAgICAgICAgICBzbG93UGF0aC5saW5rKCZq
aXQpOworICAgICAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBp
bmcoaml0LCBudW1iZXJPZlBhZGRpbmdCeXRlcyk7CisgICAgICAgICAgICBhbGxvY2F0b3IucHJl
c2VydmVVc2VkUmVnaXN0ZXJzVG9TY3JhdGNoQnVmZmVyRm9yQ2FsbChqaXQsIHNjcmF0Y2hCdWZm
ZXIsIHNjcmF0Y2hHUFIpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICBqaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKAorICAgICAgICAgICAgICAgIGJhc2VHUFIsCisgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksCisgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2xvdC5jYWNoZWRPZmZzZXQo
KSksCisgICAgICAgICAgICAgICAgdmFsdWVHUFIpOworI2Vsc2UKKyAgICAgICAgICAgIGppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoCisgICAgICAgICAgICAgICAgYmFzZUdQUiwKKyAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwKKyAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzbG90LmNhY2hlZE9mZnNl
dCgpKSwKKyAgICAgICAgICAgICAgICB2YWx1ZUdQUiwgdmFsdWVUYWdHUFIpOworI2VuZGlmCisg
ICAgICAgICAgICBvcGVyYXRpb25DYWxsID0gaml0LmNhbGwoKTsKKyAgICAgICAgICAgIGFsbG9j
YXRvci5yZXN0b3JlVXNlZFJlZ2lzdGVyc0Zyb21TY3JhdGNoQnVmZmVyRm9yQ2FsbChqaSwgc2Ny
YXRjaEJ1ZmZlciwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7CisK
KyAgICAgICAgICAgIHN0YXRlLmNhbGxiYWNrcy5hcHBlbmQoCisgICAgICAgICAgICAgICAgWyZd
IChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZm
ZXIubGluayhvcGVyYXRpb25DYWxsLCBvcGVyYXRpb25SZWFsbG9jYXRlU3RvcmFnZUFuZEZpbmlz
aFB1dCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOwor
ICAgIH0gfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK1Bv
bHltb3JwaGljQWNjZXNzOjpQb2x5bW9ycGhpY0FjY2VzcyhTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8pCiB7CiAgICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0KQog
ICAgICAgICByZXR1cm47CiAgICAgCi0gICAgbV9saXN0LmFwcGVuZChHZXRCeUlkQWNjZXNzOjpm
cm9tU3RydWN0dXJlU3R1YkluZm8oc3R1YkluZm8pKTsKKyAgICBtX2xpc3QuYXBwZW5kKEFjY2Vz
c0Nhc2U6OmZyb21TdHJ1Y3R1cmVTdHViSW5mbyhzdHViSW5mbykpOwogfQogCi1Qb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0KiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojpmcm9tKFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbykKK1BvbHltb3JwaGljQWNjZXNzKiBQb2x5bW9ycGhpY0FjY2Vzczo6ZnJv
bShTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7CiAgICAgaWYgKHN0dWJJbmZvLmFjY2Vz
c1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9saXN0KQogICAgICAgICByZXR1cm4gc3R1YkluZm8u
dS5nZXRCeUlkTGlzdC5saXN0OwpAQCAtOTMsMTYgKzcxOCwxNiBAQCBQb2x5bW9ycGhpY0dldEJ5
SWRMaXN0KiBQb2x5bW9ycGhpY0dldEJ5CiAgICAgICAgIHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0g
YWNjZXNzX2dldF9ieV9pZF9zZWxmCiAgICAgICAgIHx8IHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0g
YWNjZXNzX3Vuc2V0KTsKICAgICAKLSAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiByZXN1bHQg
PSBuZXcgUG9seW1vcnBoaWNHZXRCeUlkTGlzdChzdHViSW5mbyk7CisgICAgUG9seW1vcnBoaWNB
Y2Nlc3MqIHJlc3VsdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2VzcyhzdHViSW5mbyk7CiAgICAgCiAg
ICAgc3R1YkluZm8uaW5pdEdldEJ5SWRMaXN0KHJlc3VsdCk7CiAgICAgCiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6flBvbHltb3JwaGljR2V0QnlJZExp
c3QoKSB7IH0KK1BvbHltb3JwaGljQWNjZXNzOjp+UG9seW1vcnBoaWNBY2Nlc3MoKSB7IH0KIAot
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmN1cnJlbnRTbG93
UGF0aFRhcmdldCgKK01hY3JvQXNzZW1ibGVyQ29kZVB0ciBQb2x5bW9ycGhpY0FjY2Vzczo6Y3Vy
cmVudFNsb3dQYXRoVGFyZ2V0KAogICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykgY29u
c3QKIHsKICAgICBpZiAoaXNFbXB0eSgpKQpAQCAtMTEwLDM4ICs3MzUsMTM3IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciBQb2x5bW9ycGhpY0dldEJ5SWQKICAgICByZXR1cm4gbV9saXN0Lmxhc3Qo
KS5zdHViUm91dGluZSgpLT5jb2RlKCkuY29kZSgpOwogfQogCi12b2lkIFBvbHltb3JwaGljR2V0
QnlJZExpc3Q6OmFkZEFjY2Vzcyhjb25zdCBHZXRCeUlkQWNjZXNzJiBhY2Nlc3MpCi17Ci0gICAg
QVNTRVJUKCFpc0Z1bGwoKSk7Ci0gICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHJlc2l6aW5nIG9w
dGltaXplcyBmb3Igc3BhY2UsIG5vdCB0aW1lLgotICAgIG1fbGlzdC5yZXNpemVUb0ZpdChtX2xp
c3Quc2l6ZSgpICsgMSk7Ci0gICAgbV9saXN0Lmxhc3QoKSA9IGFjY2VzczsKLX0KLQotYm9vbCBQ
b2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojppc0Z1bGwoKSBjb25zdAorYm9vbCBQb2x5bW9ycGhpY0Fj
Y2Vzczo6aXNGdWxsKCkgY29uc3QKIHsKICAgICBBU1NFUlQoc2l6ZSgpIDw9IFBPTFlNT1JQSElD
X0xJU1RfQ0FDSEVfU0laRSk7CiAgICAgcmV0dXJuIHNpemUoKSA9PSBQT0xZTU9SUEhJQ19MSVNU
X0NBQ0hFX1NJWkU7CiB9CiAKLWJvb2wgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6aXNBbG1vc3RG
dWxsKCkgY29uc3QKK2Jvb2wgUG9seW1vcnBoaWNBY2Nlc3M6OmlzQWxtb3N0RnVsbCgpIGNvbnN0
CiB7CiAgICAgQVNTRVJUKHNpemUoKSA8PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpOwog
ICAgIHJldHVybiBzaXplKCkgPj0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIC0gMTsKIH0K
IAotYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpkaWRTZWxmUGF0Y2hpbmcoKSBjb25zdAor
V2F0Y2hwb2ludCogUG9seW1vcnBoaWNBY2Nlc3M6OmFkZFdhdGNocG9pbnQoCisgICAgQWNjZXNz
R2VuZXJhdGlvblN0YXRlJiBzdGF0ZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNv
bmRpdGlvbikKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXplKCk7IGktLTspIHsKLSAgICAg
ICAgaWYgKGF0KGkpLnR5cGUoKSA9PSBHZXRCeUlkQWNjZXNzOjpTaW1wbGVJbmxpbmUpCi0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0
dWJJbmZvOjplbnN1cmVSZWZlcmVuY2VBbmRBZGRXYXRjaHBvaW50KAorICAgICAgICBtX3dhdGNo
cG9pbnRzLCBzdGF0ZS5qaXQtPmNvZGVCbG9jaygpLCBzdGF0ZS5zdHViSW5mbywgY29uZGl0aW9u
KTsKK30KKwordm9pZCBQb2x5bW9ycGhpY0FjY2Vzczo6YWRkQWNjZXNzKHN0ZDo6dW5pcXVlX3B0
cjxBY2Nlc3NDYXNlPiBhY2Nlc3MpCit7CisgICAgQVNTRVJUKCFpc0Z1bGwoKSk7CisgICAgLy8g
TWFrZSBzdXJlIHRoYXQgdGhlIHJlc2l6aW5nIG9wdGltaXplcyBmb3Igc3BhY2UsIG5vdCB0aW1l
LgorICAgIG1fbGlzdC5yZXNpemVUb0ZpdChtX2xpc3Quc2l6ZSgpICsgMSk7CisgICAgbV9saXN0
Lmxhc3QoKSA9IGFjY2VzczsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIFBvbHltb3JwaGlj
QWNjZXNzOjpyZWdlbmVyYXRlKAorICAgIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgY29uc3QgSWRlbnRpZmllciYgaWRlbnQpCit7Cisg
ICAgbV93YXRjaHBvaW50cyA9IG51bGxwdHI7CisgICAgbV9zdHViUm91dGluZSA9IG51bGxwdHI7
CisgICAgCisgICAgQWNjZXNzR2VuZXJhdGlvblN0YXRlIHN0YXRlOworCisgICAgc3RhdGUuYWNj
ZXNzID0gdGhpczsKKyAgICBzdGF0ZS5zdHViSW5mbyA9ICZzdHViSW5mbzsKKyAgICBzdGF0ZS5p
ZGVudCA9ICZpZGVudDsKKyAgICAKKyAgICBzdGF0ZS5iYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BS
UmVnPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKTsKKyAgICBzdGF0ZS52YWx1ZVJlZ3MgPSBKU1Zh
bHVlUmVncygKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBzdGF0aWNfY2FzdDxHUFJS
ZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVlVGFnR1BSKSwKKyNlbmRpZgorICAgICAgICBzdGF0aWNf
Y2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVlR1BSKSk7CisKKyAgICBTY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHN0dWJJbmZvLnBhdGhjLnVzZWRSZWdpc3RlcnMpOwor
ICAgIHN0YXRlLmFsbG9jYXRvciA9ICZhbGxvY2F0b3I7CisgICAgYWxsb2NhdG9yLmxvY2soc3Rh
dGUuYmFzZUdQUik7CisgICAgYWxsb2NhdG9yLmxvY2soc3RhdGUudmFsdWVSZWdzKTsKKworICAg
IHN0YXRlLnNjcmF0Y2hHUFIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAg
CisgICAgQ0NhbGxIZWxwZXJzIGppdCgmdm0sIGNvZGVCbG9jayk7CisgICAgc3RhdGUuaml0ID0g
JmppdDsKKworICAgIHN0YXRlLm51bWJlck9mUGFkZGluZ0J5dGVzID0gYWxsb2NhdG9yLnByZXNl
cnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKGppdCk7CisKKyAgICBib29sIGFsbEd1YXJkZWRC
eVN0cnVjdHVyZUNoZWNrID0gdHJ1ZTsKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9saXN0KQor
ICAgICAgICBhbGxHdWFyZGVkQnlTdHJ1Y3R1cmVDaGVjayAmPSBlbnRyeS0+Z3VhcmRlZEJ5U3Ry
dWN0dXJlQ2hlY2soKTsKKworICAgIGlmICghc2l6ZSgpKSB7CisgICAgICAgIC8vIFRoaXMgaXMg
c3VwZXIgdW5saWtlbHksIGJ1dCB3ZSBtYWtlIGl0IGxlZ2FsIGFueXdheS4KKyAgICAgICAgc3Rh
dGUuZmFpbHVyZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgfSBlbHNlIGlmICghYWxsR3VhcmRl
ZEJ5U3RydWN0dXJlQ2hlY2sgfHwgc2l6ZSgpID09IDEpIHsKKyAgICAgICAgLy8gSWYgdGhlcmUg
YXJlIGFueSBwcm94aWVzIGluIHRoZSBsaXN0LCB3ZSBjYW5ub3QganVzdCB1c2UgYSBiaW5hcnkg
c3dpdGNoIG92ZXIgdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgLy8gV2UgbmVlZCB0byByZXNvcnQg
dG8gYSBjYXNjYWRlLiBBIGNhc2NhZGUgYWxzbyBoYXBwZW5zIHRvIGJlIG9wdGltYWwgaWYgd2Ug
b25seSBoYXZlIGp1c3QKKyAgICAgICAgLy8gb25lIGNhc2UuCisgICAgICAgIENDYWxsSGVscGVy
czo6SnVtcExpc3QgZmFsbFRocm91Z2g7CisKKyAgICAgICAgLy8gQ2FzY2FkZSB0aHJvdWdoIHRo
ZSBsaXN0LCBwcmVmZXJyaW5nIG5ld2VyIGVudHJpZXMuCisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IG1fbGlzdC5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIGZhbGxUaHJvdWdoLmxpbmso
JmppdCk7CisgICAgICAgICAgICBtX2xpc3RbaV0tPmdlbmVyYXRlV2l0aEd1YXJkKHN0YXRlLCBm
YWxsVGhyb3VnaCk7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGUuZmFpbHVyZS5hcHBlbmQoZmFs
bFRocm91Z2gpOworICAgIH0gZWxzZSB7CisgICAgICAgIGppdC5sb2FkMzIoCisgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RhdGUuYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwKKyAgICAgICAgICAgIHN0YXRlLnNjcmF0Y2hHUFIpOworICAgICAgICAKKyAg
ICAgICAgVmVjdG9yPGludDY0X3Q+IGNhc2VWYWx1ZXMobV9saXN0LnNpemUoKSk7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xpc3Quc2l6ZSgpOyArK2kpCisgICAgICAgICAg
ICBjYXNlVmFsdWVzW2ldID0gYml0d2lzZV9jYXN0PGludDMyX3Q+KG1fbGlzdFtpXS0+c3RydWN0
dXJlKCkpOworICAgICAgICAKKyAgICAgICAgQmluYXJ5U3dpdGNoIGJpbmFyeVN3aXRjaChzdGF0
ZS5zY3JhdGNoR1BSLCBjYXNlVmFsdWVzLCBCaW5hcnlTd2l0Y2g6OkludDMyKTsKKyAgICAgICAg
d2hpbGUgKGJpbmFyeVN3aXRjaC5hZHZhbmNlKGppdCkpIHsKKyAgICAgICAgICAgIEdldEJ5SWRD
YXNlJiBnZXRDYXNlID0gYXQoYmluYXJ5U3dpdGNoLmNhc2VJbmRleCgpKTsKKyAgICAgICAgICAg
IGdldENhc2UuZ2VuZXJhdGUoc3RhdGUpOworICAgICAgICB9CisgICAgICAgIHN0YXRlLmZhaWx1
cmUuYXBwZW5kKGJpbmFyeVN3aXRjaC5mYWxsVGhyb3VnaCgpKTsKICAgICB9Ci0gICAgcmV0dXJu
IGZhbHNlOworCisgICAgaWYgKGFsbG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygpKSB7CisgICAg
ICAgIHN0YXRlLmZhaWx1cmUubGluaygmaml0KTsKKyAgICAgICAgc3RhdGUucmVzdG9yZVNjcmF0
Y2goKTsKKyAgICAgICAgc3RhdGUuZmFpbHVyZSA9IGppdC5qdW1wKCk7CisgICAgfQorCisgICAg
TGlua0J1ZmZlciBsaW5rQnVmZmVyKHZtLCBqaXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25D
YW5GYWlsKTsKKyAgICBpZiAobGlua0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKQorICAgICAg
ICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7CisKKyAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgc3VjY2Vzc0xhYmVsID0KKyAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKTsKKyAgICAgICAg
CisgICAgbGlua0J1ZmZlci5saW5rKHN0YXRlLnN1Y2Nlc3MsIHN1Y2Nlc3NMYWJlbCk7CisKKyAg
ICBsaW5rQnVmZmVyLmxpbmsoCisgICAgICAgIHN0YXRlLmZhaWx1cmUsCisgICAgICAgIHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRh
Q2FsbFRvU2xvd0Nhc2UpKTsKKyAgICAKKyAgICBmb3IgKGF1dG8gY2FsbGJhY2sgOiBzdGF0ZS5j
YWxsYmFja3MpCisgICAgICAgIGNhbGxiYWNrKGxpbmtCdWZmZXIpOworICAgIAorICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBjb2RlID0gRklOQUxJWkVfQ09ERV9GT1IoCisgICAgICAgIGNvZGVC
TG9jaywgbGlua0J1ZmZlciwKKyAgICAgICAgKCIlcyIsIHRvQ1N0cmluZygiR2V0IGFjY2VzcyBz
dHViIGZvciAiLCAqY29kZUJsb2NrLCAiICIsIHN0dWJJbmZvLmNvZGVPcmlnaW4sICIgd2l0aCBy
ZXR1cm4gcG9pbnQgIiwgc3VjY2Vzc0xhYmVsKSkpOworCisgICAgYm9vbCBkb2VzQ2FsbHMgPSBm
YWxzZTsKKyAgICBmb3IgKGF1dG8gZW50cnkgOiBtX2xpc3QpCisgICAgICAgIGRvZXNDYWxscyB8
PSBlbnRyeS0+ZG9lc0NhbGxzKCk7CisgICAgCisgICAgbV9zdHViUm91dGluZSA9IGNyZWF0ZUpJ
VFN0dWJSb3V0aW5lKGNvZGUsIHZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBkb2Vz
Q2FsbHMpOworICAgIHJldHVybiBjb2RlLmNvZGUoKTsKIH0KIAotYm9vbCBQb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0Ojp2aXNpdFdlYWsoVk0mIHZtKSBjb25zdAorYm9vbCBQb2x5bW9ycGhpY0FjY2Vz
czo6dmlzaXRXZWFrKFZNJiB2bSkgY29uc3QKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXpl
KCk7IGktLTspIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgaWYgKCFhdChpKS52aXNpdFdlYWsodm0pKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9y
cGhpY0FjY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCShyZXZpc2lvbiAxODkzMjQpCShmcm9tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0Lmg6MTg5MzI0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0X2gK
KyNkZWZpbmUgUG9seW1vcnBoaWNHZXRCeUlkTGlzdF9oCisKKyNpZiBFTkFCTEUoSklUKQorCisj
aW5jbHVkZSAiQ29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCisjaW5j
bHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIKKyNpbmNsdWRlICJPcGNvZGUuaCIK
KyNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVz
cGFjZSBKU0MgeworCitjbGFzcyBDb2RlQmxvY2s7CitzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm87
CisKK2NsYXNzIEdldEJ5SWRBY2Nlc3MgeworcHVibGljOgorICAgIGVudW0gQWNjZXNzVHlwZSB7
CisgICAgICAgIEludmFsaWQsCisgICAgICAgIFNpbXBsZUlubGluZSwgLy8gVGhpcyBpcyB0aGUg
cGF0Y2hlZCBpbmxpbmUgYWNjZXNzLgorICAgICAgICBTaW1wbGVTdHViLCAvLyBUaGlzIGlzIGEg
c3R1Yi4KKyAgICAgICAgV2F0Y2hlZFN0dWIsCisgICAgICAgIEdldHRlciwKKyAgICAgICAgQ3Vz
dG9tR2V0dGVyLAorICAgICAgICBTaW1wbGVNaXNzLAorICAgIH07CisgICAgCisgICAgR2V0QnlJ
ZEFjY2VzcygpCisgICAgICAgIDogbV90eXBlKEludmFsaWQpCisgICAgeworICAgIH0KKyAgICAK
KyAgICBHZXRCeUlkQWNjZXNzKAorICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5
cGUsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+LCBTdHJ1Y3R1cmUqLAorICAgICAgICBjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCgpKTsKKyAgICAKKyAgICB+R2V0QnlJZEFjY2VzcygpOworICAgIAorICAgIHN0YXRpYyBHZXRC
eUlkQWNjZXNzIGZyb21TdHJ1Y3R1cmVTdHViSW5mbyhTdHJ1Y3R1cmVTdHViSW5mbyYpOworICAg
IAorICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgIT0gSW52YWxpZDsgfQor
ICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KKyAgICAKKyAg
ICBBY2Nlc3NUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICAKKyAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlLmdldCgpOyB9
CisgICAgCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9CisgICAgCisgICAgSklUU3R1YlJv
dXRpbmUqIHN0dWJSb3V0aW5lKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1NldCgp
KTsKKyAgICAgICAgcmV0dXJuIG1fc3R1YlJvdXRpbmUuZ2V0KCk7CisgICAgfQorICAgIAorICAg
IGJvb2wgZG9lc0NhbGxzKCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09IEdldHRlciB8fCB0eXBl
KCkgPT0gQ3VzdG9tR2V0dGVyOyB9CisgICAgCisgICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25z
dDsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOworICAgIAorICAgIEFj
Y2Vzc1R5cGUgbV90eXBlOworICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fc3RydWN0dXJl
OworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OworICAgIFJl
ZlB0cjxKSVRTdHViUm91dGluZT4gbV9zdHViUm91dGluZTsKK307CisKK2NsYXNzIFBvbHltb3Jw
aGljR2V0QnlJZExpc3QgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIC8vIEVpdGhlciBjcmVhdGVzIGEgbmV3IHBvbHltb3JwaGljIGdldCBsaXN0LCBvciByZXR1
cm5zIHRoZSBvbmUgdGhhdCBpcyBhbHJlYWR5IGluCisgICAgLy8gcGxhY2UuCisgICAgc3RhdGlj
IFBvbHltb3JwaGljR2V0QnlJZExpc3QqIGZyb20oU3RydWN0dXJlU3R1YkluZm8mKTsKKyAgICAK
KyAgICB+UG9seW1vcnBoaWNHZXRCeUlkTGlzdCgpOworICAgIAorICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBjdXJyZW50U2xvd1BhdGhUYXJnZXQoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
KSBjb25zdDsKKyAgICAKKyAgICB2b2lkIGFkZEFjY2Vzcyhjb25zdCBHZXRCeUlkQWNjZXNzJik7
CisgICAgCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9saXN0LmlzRW1wdHko
KTsgfQorICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2xpc3Quc2l6ZSgpOyB9
CisgICAgYm9vbCBpc0Z1bGwoKSBjb25zdDsKKyAgICBib29sIGlzQWxtb3N0RnVsbCgpIGNvbnN0
OyAvLyBUcnVlIGlmIGFkZGluZyBhbiBlbGVtZW50IHdvdWxkIG1ha2UgaXNGdWxsKCkgdHJ1ZS4K
KyAgICBjb25zdCBHZXRCeUlkQWNjZXNzJiBhdCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBt
X2xpc3RbaV07IH0KKyAgICBjb25zdCBHZXRCeUlkQWNjZXNzJiBvcGVyYXRvcltdKHVuc2lnbmVk
IGkpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdFtpXTsgfQorICAgIAorICAgIGJvb2wgZGlkU2VsZlBh
dGNoaW5nKCkgY29uc3Q7IC8vIEFyZSBhbnkgb2YgdGhlIGFjY2Vzc2VzIFNpbXBsZUlubGluZT8K
KyAgICAKKyAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIGZy
aWVuZCBjbGFzcyBDb2RlQmxvY2s7CisgICAgCisgICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdChT
dHJ1Y3R1cmVTdHViSW5mbyYpOworICAgIAorICAgIFZlY3RvcjxHZXRCeUlkQWNjZXNzLCAyPiBt
X2xpc3Q7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQp
CisKKyNlbmRpZiAvLyBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0X2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgJKHdvcmtp
bmcgY29weSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw5MSArMzgsMjIzIEBACiBuYW1lc3BhY2UgSlND
IHsKIAogY2xhc3MgQ29kZUJsb2NrOworY2xhc3MgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDsKIHN0
cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbzsKIAotY2xhc3MgR2V0QnlJZEFjY2VzcyB7CitzdHJ1Y3Qg
QWNjZXNzR2VuZXJhdGlvblN0YXRlOworCitjbGFzcyBBY2Nlc3NDYXNlIHsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShBY2Nlc3NDYXNlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKICAgICBlbnVtIEFjY2Vzc1R5cGUgewotICAgICAgICBJbnZhbGlkLAotICAgICAg
ICBTaW1wbGVJbmxpbmUsIC8vIFRoaXMgaXMgdGhlIHBhdGNoZWQgaW5saW5lIGFjY2Vzcy4KLSAg
ICAgICAgU2ltcGxlU3R1YiwgLy8gVGhpcyBpcyBhIHN0dWIuCi0gICAgICAgIFdhdGNoZWRTdHVi
LAorICAgICAgICBMb2FkLAorICAgICAgICBUcmFuc2l0aW9uLAorICAgICAgICBSZXBsYWNlLAor
ICAgICAgICBNaXNzLAogICAgICAgICBHZXR0ZXIsCisgICAgICAgIFNldHRlciwKICAgICAgICAg
Q3VzdG9tR2V0dGVyLAotICAgICAgICBTaW1wbGVNaXNzLAorICAgICAgICBDdXN0b21TZXR0ZXIs
CisgICAgICAgIEluSGl0LAorICAgICAgICBJbk1pc3MKICAgICB9OwotICAgIAotICAgIEdldEJ5
SWRBY2Nlc3MoKQotICAgICAgICA6IG1fdHlwZShJbnZhbGlkKQorCisgICAgc3RhdGljIGJvb2wg
aXNHZXQoQWNjZXNzVHlwZSB0eXBlKQogICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7Cisg
ICAgICAgIGNhc2UgSW52YWxpZDoKKyAgICAgICAgY2FzZSBUcmFuc2l0aW9uOgorICAgICAgICBj
YXNlIFJlcGxhY2U6CisgICAgICAgIGNhc2UgU2V0dGVyOgorICAgICAgICBjYXNlIEN1c3RvbVNl
dHRlcjoKKyAgICAgICAgY2FzZSBJbkhpdDoKKyAgICAgICAgY2FzZSBJbk1pc3M6CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgTG9hZDoKKyAgICAgICAgY2FzZSBNaXNz
OgorICAgICAgICBjYXNlIEdldHRlcjoKKyAgICAgICAgY2FzZSBDdXN0b21HZXR0ZXI6CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICBHZXRCeUlk
QWNjZXNzKAotICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUsIFBhc3NSZWZQ
dHI8SklUU3R1YlJvdXRpbmU+LCBTdHJ1Y3R1cmUqLAorCisgICAgc3RhdGljIGJvb2wgaXNQdXQo
QWNjZXNzVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAg
IGNhc2UgSW52YWxpZDoKKyAgICAgICAgY2FzZSBMb2FkOgorICAgICAgICBjYXNlIE1pc3M6Cisg
ICAgICAgIGNhc2UgR2V0dGVyOgorICAgICAgICBjYXNlIEN1c3RvbUdldHRlcjoKKyAgICAgICAg
Y2FzZSBJbkhpdDoKKyAgICAgICAgY2FzZSBJbk1pc3M6CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGNhc2UgVHJhbnNpdGlvbjoKKyAgICAgICAgY2FzZSBSZXBsYWNlOgorICAg
ICAgICBjYXNlIFNldHRlcjoKKyAgICAgICAgY2FzZSBDdXN0b21TZXR0ZXI6CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzSW4o
QWNjZXNzVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAg
IGNhc2UgSW52YWxpZDoKKyAgICAgICAgY2FzZSBMb2FkOgorICAgICAgICBjYXNlIE1pc3M6Cisg
ICAgICAgIGNhc2UgR2V0dGVyOgorICAgICAgICBjYXNlIEN1c3RvbUdldHRlcjoKKyAgICAgICAg
Y2FzZSBUcmFuc2l0aW9uOgorICAgICAgICBjYXNlIFJlcGxhY2U6CisgICAgICAgIGNhc2UgU2V0
dGVyOgorICAgICAgICBjYXNlIEN1c3RvbVNldHRlcjoKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgY2FzZSBJbkhpdDoKKyAgICAgICAgY2FzZSBJbk1pc3M6CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0ZDo6dW5pcXVlX3B0cjxB
Y2Nlc3NDYXNlPiBnZXQoCisgICAgICAgIFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwg
UHJvcGVydHlPZmZzZXQsIFN0cnVjdHVyZSosCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCksCisgICAgICAgIGJv
b2wgdmlhUHJveHkgPSBmYWxzZSwKKyAgICAgICAgV2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNl
dCA9IG51bGxwdHIsCisgICAgICAgIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jID0gbnVsbHB0
cik7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gcmVwbGFjZSgKKyAgICAgICAg
Vk0mLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiB0cmFuc2l0aW9uKAor
ICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBTdHJ1
Y3R1cmUqIG5ld1N0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAorICAgICAgICBjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCgpKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBzZXR0ZXIoCisgICAgICAg
IFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZz
ZXQsCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgUHV0UHJvcGVy
dHlTbG90OjpQdXRWYWx1ZUZ1bmMpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+
IGluKAorICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUsIFN0cnVjdHVyZSog
c3RydWN0dXJlLAogICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpKTsKICAgICAKLSAgICB+R2V0QnlJZEFjY2Vzcygp
OworICAgIH5BY2Nlc3NDYXNlKCk7CiAgICAgCi0gICAgc3RhdGljIEdldEJ5SWRBY2Nlc3MgZnJv
bVN0cnVjdHVyZVN0dWJJbmZvKFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAgc3RhdGljIEFjY2Vz
c0Nhc2UgZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFZNJiwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJl
U3R1YkluZm8mKTsKICAgICAKICAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV90eXBl
ICE9IEludmFsaWQ7IH0KICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1Nl
dCgpOyB9CiAgICAgCiAgICAgQWNjZXNzVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBl
OyB9CisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7
IH0KKyAgICBib29sIHZpYVByb3h5KCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFy
ZURhdGEtPnZpYVByb3h5IDogZmFsc2U7IH0KICAgICAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlLmdldCgpOyB9Ci0gICAgCi0gICAgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJu
IG1fY29uZGl0aW9uU2V0OyB9Ci0gICAgCi0gICAgSklUU3R1YlJvdXRpbmUqIHN0dWJSb3V0aW5l
KCkgY29uc3QKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0CisgICAgeworICAgICAg
ICBpZiAobV9raW5kID09IFRyYW5zaXRpb24pCisgICAgICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1
cmUtPnByZXZpb3VzSUQoKTsKKyAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlLmdldCgpOworICAg
IH0KKyAgICBib29sIGd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrKCkgY29uc3QgeyByZXR1cm4gIXZp
YVByb3h5KCk7IH0KKworICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlKCkgY29uc3QKICAgICB7
Ci0gICAgICAgIEFTU0VSVChpc1NldCgpKTsKLSAgICAgICAgcmV0dXJuIG1fc3R1YlJvdXRpbmUu
Z2V0KCk7CisgICAgICAgIEFTU0VSVChtX2tpbmQgPT0gVHJhbnNpdGlvbik7CisgICAgICAgIHJl
dHVybiBtX3N0cnVjdHVyZS5nZXQoKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBkb2VzQ2FsbHMo
KSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gR2V0dGVyIHx8IHR5cGUoKSA9PSBDdXN0b21HZXR0
ZXI7IH0KKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQoKSBjb25z
dCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQorCisgICAgV2F0Y2hwb2ludFNldCogYWRkaXRp
b25hbFNldCgpIGNvbnN0IHsgbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPmFkZGl0aW9uYWxTZXQu
Z2V0KCkgOiBudWxscHRyOyB9CiAgICAgCi0gICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25zdDsK
KyAgICBib29sIGRvZXNDYWxscygpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBHZXR0ZXIgfHwg
dHlwZSgpID09IEN1c3RvbUdldHRlcjsgfQogCisgICAgYm9vbCBjYW5SZXBsYWNlKGNvbnN0IEFj
Y2Vzc0Nhc2UmIG90aGVyKTsKKyAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIENvZGVC
bG9jazsKKyAgICBmcmllbmQgY2xhc3MgUG9seW1vcnBoaWNBY2Nlc3M7CisKKyAgICBBY2Nlc3ND
YXNlKCk7CisKKyAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OworCisgICAgLy8gRmFsbCB0
aHJvdWdoIG9uIHN1Y2Nlc3MuIFR3byBraW5kcyBvZiBmYWlsdXJlcyBhcmUgc3VwcG9ydGVkOiBm
YWxsLXRocm91Z2gsIHdoaWNoIG1lYW5zIHRoYXQgd2UKKyAgICAvLyBzaG91bGQgdHJ5IGEgZGlm
ZmVyZW50IGNhc2U7IGFuZCBmYWlsdXJlLCB3aGljaCBtZWFucyB0aGF0IHRoaXMgd2FzIHRoZSBy
aWdodCBjYXNlIGJ1dCBpdCBuZWVkcworICAgIC8vIGhlbHAgZnJvbSB0aGUgc2xvdyBwYXRoLgor
ICAgIHZvaWQgZ2VuZXJhdGVXaXRoR3VhcmQoQWNjZXNzR2VuZXJhdGlvblN0YXRlJiwgQ0NhbGxI
ZWxwZXJzOjpKdW1wTGlzdCYgZmFsbFRocm91Z2gpOworCisgICAgLy8gRmFsbCB0aHJvdWdoIG9u
IHN1Y2Nlc3MsIGFkZCBhIGp1bXAgdG8gdGhlIGZhaWx1cmUgbGlzdCBvbiBmYWlsdXJlLgorICAg
IHZvaWQgZ2VuZXJhdGUoQWNjZXNzR2VuZXJhdGlvblN0YXRlJik7CiAgICAgCiAgICAgQWNjZXNz
VHlwZSBtX3R5cGU7CisgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7CisKKyAgICAvLyBVc3Vh
bGx5IHRoaXMgaXMgdGhlIHN0cnVjdHVyZSB0aGF0IHdlIGV4cGVjdCB0aGUgYmFzZSBvYmplY3Qg
dG8gaGF2ZS4gQnV0LCB0aGlzIGlzIHRoZSAqbmV3KgorICAgIC8vIHN0cnVjdHVyZSBmb3IgYSB0
cmFuc2l0aW9uIGFuZCB3ZSByZWx5IG9uIHRoZSBmYWN0IHRoYXQgaXQgaGFzIGEgc3Ryb25nIHJl
ZmVyZW5jZSB0byB0aGUgb2xkCisgICAgLy8gc3RydWN0dXJlLiBGb3IgcHJveGllcywgdGhpcyBp
cyB0aGUgc3RydWN0dXJlIG9mIHRoZSBvYmplY3QgYmVoaW5kIHRoZSBwcm94eS4KICAgICBXcml0
ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cnVjdHVyZTsKKwogICAgIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OwotICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gbV9z
dHViUm91dGluZTsKKworICAgIGNsYXNzIFJhcmVEYXRhIHsKKyAgICAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CisgICAgcHVibGljOgorICAgICAgICBib29sIHZpYVByb3h5OworICAgICAg
ICBSZWZQdHI8V2F0Y2hwb2ludFNldD4gYWRkaXRpb25hbFNldDsKKyAgICAgICAgc3RkOjp1bmlx
dWVfcHRyPENhbGxMaW5rSW5mbz4gY2FsbExpbmtJbmZvOworICAgICAgICB1bmlvbiB7CisgICAg
ICAgICAgICBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYyBnZXR0ZXI7CisgICAgICAgICAgICBQ
dXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyBzZXR0ZXI7CisgICAgICAgICAgICB2b2lkKiBv
cGFxdWU7CisgICAgICAgIH0gY3VzdG9tQWNjZXNzb3I7CisgICAgfTsKKworICAgIHN0ZDo6dW5p
cXVlX3B0cjxSYXJlRGF0YT4gbV9yYXJlRGF0YTsKIH07CiAKLWNsYXNzIFBvbHltb3JwaGljR2V0
QnlJZExpc3QgeworY2xhc3MgUG9seW1vcnBoaWNBY2Nlc3MgeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKFBvbHltb3JwaGljQWNjZXNzKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKICAgICAvLyBFaXRoZXIgY3JlYXRlcyBhIG5ldyBwb2x5bW9ycGhpYyBnZXQgbGlz
dCwgb3IgcmV0dXJucyB0aGUgb25lIHRoYXQgaXMgYWxyZWFkeSBpbgogICAgIC8vIHBsYWNlLgot
ICAgIHN0YXRpYyBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBmcm9tKFN0cnVjdHVyZVN0dWJJbmZv
Jik7Ci0gICAgCi0gICAgflBvbHltb3JwaGljR2V0QnlJZExpc3QoKTsKKyAgICBzdGF0aWMgc3Rk
Ojp1bmlxdWVfcHRyPFBvbHltb3JwaGljQWNjZXNzPiBmcm9tKFN0cnVjdHVyZVN0dWJJbmZvJik7
CiAgICAgCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN1cnJlbnRTbG93UGF0aFRhcmdldChT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pIGNvbnN0OwotICAgIAotICAgIHZvaWQgYWRkQWNj
ZXNzKGNvbnN0IEdldEJ5SWRBY2Nlc3MmKTsKKyAgICB+UG9seW1vcnBoaWNBY2Nlc3MoKTsKKwor
ICAgIC8vIFRoaXMgY2xlYXJzIHRoZSBvbGQgc3R1YiByb3V0aW5lIGFuZCB0aGVuIHJlZ2VuZXJh
dGVzIHdpdGggYSBuZXcgY2FzZS4gVGhpcyBtYXkgcmV0dXJuIG51bGwgdG8KKyAgICAvLyBpbmRp
Y2F0ZSBzb21lIHNvcnQgb2YgZmFpbHVyZS4gV2hlbiB0aGF0IGhhcHBlbnMsIGl0IG1lYW5zIHRo
YXQgd2UgYXJlIHJlcXVlc3RpbmcgYSByZXNldCBvZiB0aGUKKyAgICAvLyBvd25pbmcgU3RydWN0
dXJlU3R1YkluZm8uIFRoYXQncyBiZWNhdXNlIHRoZSBvbGQgc3R1YiByb3V0aW5lIGhhcyBhbHJl
YWR5IGJlZW4gZGVsZXRlZC4KKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVnZW5lcmF0ZVdp
dGhDYXNlKHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPik7CiAgICAgCiAgICAgYm9vbCBpc0Vt
cHR5KCkgY29uc3QgeyByZXR1cm4gbV9saXN0LmlzRW1wdHkoKTsgfQogICAgIHVuc2lnbmVkIHNp
emUoKSBjb25zdCB7IHJldHVybiBtX2xpc3Quc2l6ZSgpOyB9CiAgICAgYm9vbCBpc0Z1bGwoKSBj
b25zdDsKICAgICBib29sIGlzQWxtb3N0RnVsbCgpIGNvbnN0OyAvLyBUcnVlIGlmIGFkZGluZyBh
biBlbGVtZW50IHdvdWxkIG1ha2UgaXNGdWxsKCkgdHJ1ZS4KLSAgICBjb25zdCBHZXRCeUlkQWNj
ZXNzJiBhdCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2xpc3RbaV07IH0KLSAgICBjb25z
dCBHZXRCeUlkQWNjZXNzJiBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1f
bGlzdFtpXTsgfQotICAgIAotICAgIGJvb2wgZGlkU2VsZlBhdGNoaW5nKCkgY29uc3Q7IC8vIEFy
ZSBhbnkgb2YgdGhlIGFjY2Vzc2VzIFNpbXBsZUlubGluZT8KLSAgICAKKyAgICBjb25zdCBBY2Nl
c3NDYXNlJiBhdCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiAqbV9saXN0W2ldOyB9CisgICAg
Y29uc3QgQWNjZXNzQ2FzZSYgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiAq
bV9saXN0W2ldOyB9CisKKyAgICAvLyBJZiB0aGlzIHJldHVybnMgZmFsc2UgdGhlbiB3ZSBhcmUg
cmVxdWVzdGluZyBhIHJlc2V0IG9mIHRoZSBvd25pbmcgU3RydWN0dXJlU3R1YkluZm8uCiAgICAg
Ym9vbCB2aXNpdFdlYWsoVk0mKSBjb25zdDsKIAogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3Mg
QWNjZXNzQ2FzZTsKKyAgICBmcmllbmQgY2xhc3MgQWNjZXNzR2VuZXJhdGlvblN0YXRlOwogICAg
IGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7CiAgICAgCi0gICAgUG9seW1vcnBoaWNHZXRCeUlkTGlz
dChTdHJ1Y3R1cmVTdHViSW5mbyYpOworICAgIFBvbHltb3JwaGljQWNjZXNzKFN0cnVjdHVyZVN0
dWJJbmZvJik7CisKKyAgICBXYXRjaHBvaW50KiBhZGRXYXRjaHBvaW50KAorICAgICAgICBBY2Nl
c3NHZW5lcmF0aW9uU3RhdGUmLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgPSBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbigpKTsKICAgICAKLSAgICBWZWN0b3I8R2V0QnlJZEFjY2Vzcywg
Mj4gbV9saXN0OworICAgIHZvaWQgYWRkQWNjZXNzQ2FzZShzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNz
Q2FzZT4pOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByZWdlbmVyYXRlKFZNJiwgQ29kZUJs
b2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBjb25zdCBJZGVudGlmaWVyJik7CisgICAgCisgICAg
VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiwgMj4gbV9saXN0OworICAgIFJlZlB0
cjxKSVRTdHViUm91dGluZT4gbV9zdHViUm91dGluZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2F0
Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvPiBtX3dhdGNocG9pbnRzOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNHZXRCeUlkTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwCShyZXZpc2lvbiAxODkzMjQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTU1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlBvbHltb3JwaGljR2V0QnlJZExpc3QuaCIKLQotI2lmIEVOQUJMRShKSVQpCi0KLSNp
bmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRlICJIZWFwLmgiCi0jaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCi0KLW5hbWVzcGFjZSBKU0Mg
ewotCi1HZXRCeUlkQWNjZXNzOjpHZXRCeUlkQWNjZXNzKAotICAgIFZNJiB2bSwgSlNDZWxsKiBv
d25lciwgQWNjZXNzVHlwZSB0eXBlLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91
dGluZSwKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQmIGNvbmRpdGlvblNldCkKLSAgICA6IG1fdHlwZSh0eXBlKQotICAgICwgbV9zdHJ1
Y3R1cmUodm0sIG93bmVyLCBzdHJ1Y3R1cmUpCi0gICAgLCBtX2NvbmRpdGlvblNldChjb25kaXRp
b25TZXQpCi0gICAgLCBtX3N0dWJSb3V0aW5lKHN0dWJSb3V0aW5lKQotewotfQotCi1HZXRCeUlk
QWNjZXNzOjp+R2V0QnlJZEFjY2VzcygpCi17Ci19Ci0KLUdldEJ5SWRBY2Nlc3MgR2V0QnlJZEFj
Y2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykK
LXsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgaW5pdGlhbFNsb3dQYXRoID0KLSAgICAgICAg
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGVsdGFDYWxsVG9TbG93Q2FzZSk7Ci0gICAgCi0gICAgR2V0QnlJZEFjY2VzcyByZXN1bHQ7Ci0g
ICAgCi0gICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0
X2J5X2lkX3NlbGYpOwotICAgIAotICAgIHJlc3VsdC5tX3R5cGUgPSBTaW1wbGVJbmxpbmU7Ci0g
ICAgcmVzdWx0Lm1fc3RydWN0dXJlLmNvcHlGcm9tKHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFz
ZU9iamVjdFN0cnVjdHVyZSk7Ci0gICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBKSVRTdHViUm91
dGluZTo6Y3JlYXRlU2VsZk1hbmFnZWRSb3V0aW5lKGluaXRpYWxTbG93UGF0aCk7Ci0gICAgCi0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBHZXRCeUlkQWNjZXNzOjp2aXNpdFdlYWsoVk0m
IHZtKSBjb25zdAotewotICAgIGlmIChtX3N0cnVjdHVyZSAmJiAhSGVhcDo6aXNNYXJrZWQobV9z
dHJ1Y3R1cmUuZ2V0KCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFtX2NvbmRp
dGlvblNldC5hcmVTdGlsbExpdmUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICgh
bV9zdHViUm91dGluZS0+dmlzaXRXZWFrKHZtKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IHJldHVybiB0cnVlOwotfQotCi1Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpQb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0KFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBpZiAoc3R1Yklu
Zm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAg
ICBtX2xpc3QuYXBwZW5kKEdldEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1cmVTdHViSW5mbyhzdHVi
SW5mbykpOwotfQotCi1Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBQb2x5bW9ycGhpY0dldEJ5SWRM
aXN0Ojpmcm9tKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBpZiAoc3R1Yklu
Zm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3QpCi0gICAgICAgIHJldHVybiBz
dHViSW5mby51LmdldEJ5SWRMaXN0Lmxpc3Q7Ci0gICAgCi0gICAgQVNTRVJUKAotICAgICAgICBz
dHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZgotICAgICAgICB8fCBz
dHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc191bnNldCk7Ci0gICAgCi0gICAgUG9seW1vcnBo
aWNHZXRCeUlkTGlzdCogcmVzdWx0ID0gbmV3IFBvbHltb3JwaGljR2V0QnlJZExpc3Qoc3R1Yklu
Zm8pOwotICAgIAotICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkTGlzdChyZXN1bHQpOwotICAgIAot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVBvbHltb3JwaGljR2V0QnlJZExpc3Q6On5Qb2x5bW9y
cGhpY0dldEJ5SWRMaXN0KCkgeyB9Ci0KLU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0OjpjdXJyZW50U2xvd1BhdGhUYXJnZXQoCi0gICAgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvKSBjb25zdAotewotICAgIGlmIChpc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRj
aC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKLSAgICByZXR1cm4gbV9saXN0Lmxhc3QoKS5zdHViUm91
dGluZSgpLT5jb2RlKCkuY29kZSgpOwotfQotCi12b2lkIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6
OmFkZEFjY2Vzcyhjb25zdCBHZXRCeUlkQWNjZXNzJiBhY2Nlc3MpCi17Ci0gICAgQVNTRVJUKCFp
c0Z1bGwoKSk7Ci0gICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHJlc2l6aW5nIG9wdGltaXplcyBm
b3Igc3BhY2UsIG5vdCB0aW1lLgotICAgIG1fbGlzdC5yZXNpemVUb0ZpdChtX2xpc3Quc2l6ZSgp
ICsgMSk7Ci0gICAgbV9saXN0Lmxhc3QoKSA9IGFjY2VzczsKLX0KLQotYm9vbCBQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0Ojppc0Z1bGwoKSBjb25zdAotewotICAgIEFTU0VSVChzaXplKCkgPD0gUE9M
WU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKTsKLSAgICByZXR1cm4gc2l6ZSgpID09IFBPTFlNT1JQ
SElDX0xJU1RfQ0FDSEVfU0laRTsKLX0KLQotYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojpp
c0FsbW9zdEZ1bGwoKSBjb25zdAotewotICAgIEFTU0VSVChzaXplKCkgPD0gUE9MWU1PUlBISUNf
TElTVF9DQUNIRV9TSVpFKTsKLSAgICByZXR1cm4gc2l6ZSgpID49IFBPTFlNT1JQSElDX0xJU1Rf
Q0FDSEVfU0laRSAtIDE7Ci19Ci0KLWJvb2wgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6ZGlkU2Vs
ZlBhdGNoaW5nKCkgY29uc3QKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXplKCk7IGktLTsp
IHsKLSAgICAgICAgaWYgKGF0KGkpLnR5cGUoKSA9PSBHZXRCeUlkQWNjZXNzOjpTaW1wbGVJbmxp
bmUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1ib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0
Ci17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIGlmICgh
YXQoaSkudmlzaXRXZWFrKHZtKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gRU5B
QkxFKEpJVCkKLQotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNHZXRCeUlkTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgJKHJldmlzaW9uIDE4OTMyNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQs
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0
X2gKLSNkZWZpbmUgUG9seW1vcnBoaWNHZXRCeUlkTGlzdF9oCi0KLSNpZiBFTkFCTEUoSklUKQot
Ci0jaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgotI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCi0j
aW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIKLSNpbmNsdWRlICJPcGNvZGUu
aCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5h
bWVzcGFjZSBKU0MgewotCi1jbGFzcyBDb2RlQmxvY2s7Ci1zdHJ1Y3QgU3RydWN0dXJlU3R1Yklu
Zm87Ci0KLWNsYXNzIEdldEJ5SWRBY2Nlc3MgewotcHVibGljOgotICAgIGVudW0gQWNjZXNzVHlw
ZSB7Ci0gICAgICAgIEludmFsaWQsCi0gICAgICAgIFNpbXBsZUlubGluZSwgLy8gVGhpcyBpcyB0
aGUgcGF0Y2hlZCBpbmxpbmUgYWNjZXNzLgotICAgICAgICBTaW1wbGVTdHViLCAvLyBUaGlzIGlz
IGEgc3R1Yi4KLSAgICAgICAgV2F0Y2hlZFN0dWIsCi0gICAgICAgIEdldHRlciwKLSAgICAgICAg
Q3VzdG9tR2V0dGVyLAotICAgICAgICBTaW1wbGVNaXNzLAotICAgIH07Ci0gICAgCi0gICAgR2V0
QnlJZEFjY2VzcygpCi0gICAgICAgIDogbV90eXBlKEludmFsaWQpCi0gICAgewotICAgIH0KLSAg
ICAKLSAgICBHZXRCeUlkQWNjZXNzKAotICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vz
c1R5cGUsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+LCBTdHJ1Y3R1cmUqLAotICAgICAgICBj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCgpKTsKLSAgICAKLSAgICB+R2V0QnlJZEFjY2VzcygpOwotICAgIAotICAgIHN0YXRpYyBH
ZXRCeUlkQWNjZXNzIGZyb21TdHJ1Y3R1cmVTdHViSW5mbyhTdHJ1Y3R1cmVTdHViSW5mbyYpOwot
ICAgIAotICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgIT0gSW52YWxpZDsg
fQotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KLSAgICAK
LSAgICBBY2Nlc3NUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICAKLSAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlLmdldCgp
OyB9Ci0gICAgCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlv
blNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9Ci0gICAgCi0gICAgSklUU3R1
YlJvdXRpbmUqIHN0dWJSb3V0aW5lKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc1Nl
dCgpKTsKLSAgICAgICAgcmV0dXJuIG1fc3R1YlJvdXRpbmUuZ2V0KCk7Ci0gICAgfQotICAgIAot
ICAgIGJvb2wgZG9lc0NhbGxzKCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09IEdldHRlciB8fCB0
eXBlKCkgPT0gQ3VzdG9tR2V0dGVyOyB9Ci0gICAgCi0gICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBj
b25zdDsKLQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOwotICAgIAotICAg
IEFjY2Vzc1R5cGUgbV90eXBlOwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fc3RydWN0
dXJlOwotICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OwotICAg
IFJlZlB0cjxKSVRTdHViUm91dGluZT4gbV9zdHViUm91dGluZTsKLX07Ci0KLWNsYXNzIFBvbHlt
b3JwaGljR2V0QnlJZExpc3QgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGlj
OgotICAgIC8vIEVpdGhlciBjcmVhdGVzIGEgbmV3IHBvbHltb3JwaGljIGdldCBsaXN0LCBvciBy
ZXR1cm5zIHRoZSBvbmUgdGhhdCBpcyBhbHJlYWR5IGluCi0gICAgLy8gcGxhY2UuCi0gICAgc3Rh
dGljIFBvbHltb3JwaGljR2V0QnlJZExpc3QqIGZyb20oU3RydWN0dXJlU3R1YkluZm8mKTsKLSAg
ICAKLSAgICB+UG9seW1vcnBoaWNHZXRCeUlkTGlzdCgpOwotICAgIAotICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0ciBjdXJyZW50U2xvd1BhdGhUYXJnZXQoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvKSBjb25zdDsKLSAgICAKLSAgICB2b2lkIGFkZEFjY2Vzcyhjb25zdCBHZXRCeUlkQWNjZXNz
Jik7Ci0gICAgCi0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9saXN0LmlzRW1w
dHkoKTsgfQotICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2xpc3Quc2l6ZSgp
OyB9Ci0gICAgYm9vbCBpc0Z1bGwoKSBjb25zdDsKLSAgICBib29sIGlzQWxtb3N0RnVsbCgpIGNv
bnN0OyAvLyBUcnVlIGlmIGFkZGluZyBhbiBlbGVtZW50IHdvdWxkIG1ha2UgaXNGdWxsKCkgdHJ1
ZS4KLSAgICBjb25zdCBHZXRCeUlkQWNjZXNzJiBhdCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVy
biBtX2xpc3RbaV07IH0KLSAgICBjb25zdCBHZXRCeUlkQWNjZXNzJiBvcGVyYXRvcltdKHVuc2ln
bmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdFtpXTsgfQotICAgIAotICAgIGJvb2wgZGlkU2Vs
ZlBhdGNoaW5nKCkgY29uc3Q7IC8vIEFyZSBhbnkgb2YgdGhlIGFjY2Vzc2VzIFNpbXBsZUlubGlu
ZT8KLSAgICAKLSAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OwotCi1wcml2YXRlOgotICAg
IGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7Ci0gICAgCi0gICAgUG9seW1vcnBoaWNHZXRCeUlkTGlz
dChTdHJ1Y3R1cmVTdHViSW5mbyYpOwotICAgIAotICAgIFZlY3RvcjxHZXRCeUlkQWNjZXNzLCAy
PiBtX2xpc3Q7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEVOQUJMRShK
SVQpCi0KLSNlbmRpZiAvLyBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0X2gKLQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJl
dmlzaW9uIDE4OTMyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1
cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDcsNyArMjA3LDggQEAgc3RydWN0IFN0
cnVjdHVyZVN0dWJJbmZvIHsKICAgICAgICAgfSB1bnNldDsKICAgICAgICAgc3RydWN0IHsKICAg
ICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBiYXNlT2JqZWN0U3RydWN0dXJl
OwotICAgICAgICB9IGdldEJ5SWRTZWxmOworICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0OworICAgICAgICB9IGJ5SWRTZWxmOwogICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAg
UG9seW1vcnBoaWNHZXRCeUlkTGlzdCogbGlzdDsKICAgICAgICAgfSBnZXRCeUlkTGlzdDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNp
b24gMTg5MzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMu
aAkod29ya2luZyBjb3B5KQpAQCAtNTYzLDcgKzU2Myw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIGJyYW5jaDMyKEVxdWFsLCByZWdzLnRhZ0dQUigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
RW1wdHlWYWx1ZVRhZykpOwogI2VuZGlmCiAgICAgfQotICAgIAorCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KICAgICBKdW1wIGJyYW5jaFN0cnVjdHVyZShSZWxhdGlvbmFsQ29uZGl0aW9uIGNv
bmRpdGlvbiwgVCBsZWZ0SGFuZFNpZGUsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKQEAg
LTgzMiw2ICs4MzIsMTUgQEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogCisgICAgdm9pZCBib3hC
b29sZWFuUGF5bG9hZChib29sIHZhbHVlLCBHUFJSZWcgcGF5bG9hZEdQUikKKyAgICB7CisjaWYg
VVNFKEpTVkFMVUU2NCkKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSArIHZh
bHVlKSwgcGF5bG9hZEdQUik7CisjZWxzZQorICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMih2YWx1
ZSksIHBheWxvYWRHUFIpOworI2VuZGlmCisgICAgfQorCiAgICAgdm9pZCBib3hCb29sZWFuKEdQ
UlJlZyBib29sR1BSLCBKU1ZhbHVlUmVncyBib3hlZFJlZ3MpCiAgICAgewogICAgICAgICBib3hC
b29sZWFuUGF5bG9hZChib29sR1BSLCBib3hlZFJlZ3MucGF5bG9hZEdQUigpKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NjcmF0Y2hSZWdpc3RlckFsbG9j
YXRvci5jcHAJKHJldmlzaW9uIDE4OTMyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQs
OCBAQCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6On5TY3JhdGNoUmVnaXN0CiAKIHZvaWQgU2Ny
YXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpsb2NrKEdQUlJlZyByZWcpCiB7CisgICAgaWYgKHJlZyA9
PSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm47CiAgICAgdW5zaWduZWQgaW5kZXggPSBH
UFJJbmZvOjp0b0luZGV4KHJlZyk7CiAgICAgaWYgKGluZGV4ID09IEdQUkluZm86OkludmFsaWRJ
bmRleCkKICAgICAgICAgcmV0dXJuOwpAQCAtNTIsMTIgKzU0LDIwIEBAIHZvaWQgU2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yOjpsb2NrKEdQUlIKIAogdm9pZCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3I6OmxvY2soRlBSUmVnIHJlZykKIHsKKyAgICBpZiAocmVnID09IEludmFsaWRGUFJSZWcpCisg
ICAgICAgIHJldHVybjsKICAgICB1bnNpZ25lZCBpbmRleCA9IEZQUkluZm86OnRvSW5kZXgocmVn
KTsKICAgICBpZiAoaW5kZXggPT0gRlBSSW5mbzo6SW52YWxpZEluZGV4KQogICAgICAgICByZXR1
cm47CiAgICAgbV9sb2NrZWRSZWdpc3RlcnMuc2V0RlBSQnlJbmRleChpbmRleCk7CiB9CiAKK3Zv
aWQgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpsb2NrKEpTVmFsdWVSZWdzIHJlZ3MpCit7Cisg
ICAgbG9jayhyZWdzLnRhZ0dQUigpKTsKKyAgICBsb2NrKHJlZ3MucGF5bG9hZEdQUigpKTsKK30K
KwogdGVtcGxhdGU8dHlwZW5hbWUgQmFua0luZm8+CiB0eXBlbmFtZSBCYW5rSW5mbzo6UmVnaXN0
ZXJUeXBlIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6YWxsb2NhdGVTY3JhdGNoKCkKIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3IuaAkocmV2aXNpb24gMTg5MzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTEgKzQw
LDEzIEBAIHN0cnVjdCBTY3JhdGNoQnVmZmVyOwogCiBjbGFzcyBTY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3IgewogcHVibGljOgorICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcigpIHsgfQogICAg
IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcihjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVy
cyk7CiAgICAgflNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcigpOwogCi0gICAgdm9pZCBsb2NrKEdQ
UlJlZyByZWcpOwotICAgIHZvaWQgbG9jayhGUFJSZWcgcmVnKTsKKyAgICB2b2lkIGxvY2soR1BS
UmVnKTsKKyAgICB2b2lkIGxvY2soRlBSUmVnKTsKKyAgICB2b2lkIGxvY2soSlNWYWx1ZVJlZ3Mp
OwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJhbmtJbmZvPgogICAgIHR5cGVuYW1lIEJh
bmtJbmZvOjpSZWdpc3RlclR5cGUgYWxsb2NhdGVTY3JhdGNoKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260697</attachid>
            <date>2015-09-05 13:14:24 -0700</date>
            <delta_ts>2015-09-06 12:06:09 -0700</delta_ts>
            <desc>more glue</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>98432</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3Jw
aGljQWNjZXNzLmNwcAkocmV2aXNpb24gMTg5MzI0KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHA6MTg5MzI0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDE1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUG9seW1v
cnBoaWNHZXRCeUlkTGlzdC5oIgorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkNvZGVC
bG9jay5oIgorI2luY2x1ZGUgIkhlYXAuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5j
bHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0dldEJ5SWRB
Y2Nlc3M6OkdldEJ5SWRBY2Nlc3MoCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NU
eXBlIHR5cGUsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lLAorICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29u
ZGl0aW9uU2V0KQorICAgIDogbV90eXBlKHR5cGUpCisgICAgLCBtX3N0cnVjdHVyZSh2bSwgb3du
ZXIsIHN0cnVjdHVyZSkKKyAgICAsIG1fY29uZGl0aW9uU2V0KGNvbmRpdGlvblNldCkKKyAgICAs
IG1fc3R1YlJvdXRpbmUoc3R1YlJvdXRpbmUpCit7Cit9CisKK0dldEJ5SWRBY2Nlc3M6On5HZXRC
eUlkQWNjZXNzKCkKK3sKK30KKworR2V0QnlJZEFjY2VzcyBHZXRCeUlkQWNjZXNzOjpmcm9tU3Ry
dWN0dXJlU3R1YkluZm8oU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBpbml0aWFsU2xvd1BhdGggPQorICAgICAgICBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Ns
b3dDYXNlKTsKKyAgICAKKyAgICBHZXRCeUlkQWNjZXNzIHJlc3VsdDsKKyAgICAKKyAgICBSRUxF
QVNFX0FTU0VSVChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZik7
CisgICAgCisgICAgcmVzdWx0Lm1fdHlwZSA9IFNpbXBsZUlubGluZTsKKyAgICByZXN1bHQubV9z
dHJ1Y3R1cmUuY29weUZyb20oc3R1YkluZm8udS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0
dXJlKTsKKyAgICByZXN1bHQubV9zdHViUm91dGluZSA9IEpJVFN0dWJSb3V0aW5lOjpjcmVhdGVT
ZWxmTWFuYWdlZFJvdXRpbmUoaW5pdGlhbFNsb3dQYXRoKTsKKyAgICAKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitib29sIEdldEJ5SWRBY2Nlc3M6OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0Cit7
CisgICAgaWYgKG1fc3RydWN0dXJlICYmICFIZWFwOjppc01hcmtlZChtX3N0cnVjdHVyZS5nZXQo
KSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW1fY29uZGl0aW9uU2V0LmFyZVN0
aWxsTGl2ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFtX3N0dWJSb3V0aW5l
LT52aXNpdFdlYWsodm0pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK1BvbHltb3JwaGljR2V0QnlJZExpc3Q6OlBvbHltb3JwaGljR2V0QnlJZExpc3QoU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBl
ID09IGFjY2Vzc191bnNldCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fbGlzdC5hcHBl
bmQoR2V0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKHN0dWJJbmZvKSk7Cit9CisK
K1BvbHltb3JwaGljR2V0QnlJZExpc3QqIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmZyb20oU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBl
ID09IGFjY2Vzc19nZXRfYnlfaWRfbGlzdCkKKyAgICAgICAgcmV0dXJuIHN0dWJJbmZvLnUuZ2V0
QnlJZExpc3QubGlzdDsKKyAgICAKKyAgICBBU1NFUlQoCisgICAgICAgIHN0dWJJbmZvLmFjY2Vz
c1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmCisgICAgICAgIHx8IHN0dWJJbmZvLmFjY2Vz
c1R5cGUgPT0gYWNjZXNzX3Vuc2V0KTsKKyAgICAKKyAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0
KiByZXN1bHQgPSBuZXcgUG9seW1vcnBoaWNHZXRCeUlkTGlzdChzdHViSW5mbyk7CisgICAgCisg
ICAgc3R1YkluZm8uaW5pdEdldEJ5SWRMaXN0KHJlc3VsdCk7CisgICAgCisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6flBvbHltb3JwaGljR2V0QnlJZExp
c3QoKSB7IH0KKworTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6
OmN1cnJlbnRTbG93UGF0aFRhcmdldCgKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8p
IGNvbnN0Cit7CisgICAgaWYgKGlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRv
U2xvd0Nhc2UpOworICAgIHJldHVybiBtX2xpc3QubGFzdCgpLnN0dWJSb3V0aW5lKCktPmNvZGUo
KS5jb2RlKCk7Cit9CisKK3ZvaWQgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6YWRkQWNjZXNzKGNv
bnN0IEdldEJ5SWRBY2Nlc3MmIGFjY2VzcykKK3sKKyAgICBBU1NFUlQoIWlzRnVsbCgpKTsKKyAg
ICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgcmVzaXppbmcgb3B0aW1pemVzIGZvciBzcGFjZSwgbm90
IHRpbWUuCisgICAgbV9saXN0LnJlc2l6ZVRvRml0KG1fbGlzdC5zaXplKCkgKyAxKTsKKyAgICBt
X2xpc3QubGFzdCgpID0gYWNjZXNzOworfQorCitib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6
OmlzRnVsbCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKHNpemUoKSA8PSBQT0xZTU9SUEhJQ19MSVNU
X0NBQ0hFX1NJWkUpOworICAgIHJldHVybiBzaXplKCkgPT0gUE9MWU1PUlBISUNfTElTVF9DQUNI
RV9TSVpFOworfQorCitib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmlzQWxtb3N0RnVsbCgp
IGNvbnN0Cit7CisgICAgQVNTRVJUKHNpemUoKSA8PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJ
WkUpOworICAgIHJldHVybiBzaXplKCkgPj0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIC0g
MTsKK30KKworYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpkaWRTZWxmUGF0Y2hpbmcoKSBj
b25zdAoreworICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUoKTsgaS0tOykgeworICAgICAgICBp
ZiAoYXQoaSkudHlwZSgpID09IEdldEJ5SWRBY2Nlc3M6OlNpbXBsZUlubGluZSkKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUG9s
eW1vcnBoaWNHZXRCeUlkTGlzdDo6dmlzaXRXZWFrKFZNJiB2bSkgY29uc3QKK3sKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBzaXplKCk7IGktLTspIHsKKyAgICAgICAgaWYgKCFhdChpKS52aXNpdFdl
YWsodm0pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3Jw
aGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNjcgKzI0
LDcyNCBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0LmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKIAogI2lmIEVO
QUJMRShKSVQpCiAKKyNpbmNsdWRlICJCaW5hcnlTd2l0Y2guaCIKICNpbmNsdWRlICJDb2RlQmxv
Y2suaCIKICNpbmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1
ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgog
CiBuYW1lc3BhY2UgSlNDIHsKIAotR2V0QnlJZEFjY2Vzczo6R2V0QnlJZEFjY2VzcygKLSAgICBW
TSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgUGFzc1JlZlB0cjxKSVRTdHVi
Um91dGluZT4gc3R1YlJvdXRpbmUsCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCi0gICAgOiBtX3R5cGUodHlw
ZSkKLSAgICAsIG1fc3RydWN0dXJlKHZtLCBvd25lciwgc3RydWN0dXJlKQotICAgICwgbV9jb25k
aXRpb25TZXQoY29uZGl0aW9uU2V0KQotICAgICwgbV9zdHViUm91dGluZShzdHViUm91dGluZSkK
K3N0cnVjdCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUgeworICAgIENDYWxsSGVscGVycyogaml0IHsg
bnVsbHB0ciB9OworICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciogYWxsb2NhdG9yOworICAg
IHNpemVfdCBudW1iZXJPZlBhZGRpbmdCeXRlcyB7IDAgfTsKKyAgICBQb2x5bW9ycGhpY0FjY2Vz
cyogYWNjZXNzIHsgbnVsbHB0ciB9OworICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyB7
IG51bGxwdHIgfTsKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHN1Y2Nlc3M7CisgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wTGlzdCBmYWlsdXJlOworICAgIEdQUlJlZyBiYXNlR1BSIHsgSW52YWxp
ZEdQUlJlZyB9OworICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVnczsKKyAgICBHUFJSZWcgc2NyYXRj
aEdQUiB7IEludmFsaWRHUFJSZWcgfTsKKyAgICBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoIHsg
ZmFsc2UgfTsKKyAgICBWZWN0b3I8c3RkOjpmdW5jdGlvbjx2b2lkKExpbmtCdWZmZXImKT4gY2Fs
bGJhY2tzOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50OworICAgIHN0ZDo6dW5pcXVlX3B0
cjxXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8+IHdhdGNocG9pbnRzOworCisgICAgdm9p
ZCBhZGRXYXRjaHBvaW50KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24g
PSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdhdGNo
cG9pbnRPblN0cnVjdHVyZVN0dWJJbmZvOjplbnN1cmVSZWZlcmVuY2VBbmRBZGRXYXRjaHBvaW50
KAorICAgICAgICAgICAgd2F0Y2hwb2ludHMsIGppdC0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLCBj
b25kaXRpb24pOworICAgIH0KKworICAgIHZvaWQgcmVzdG9yZVNjcmF0Y2goKQorICAgIHsKKyAg
ICAgICAgYWxsb2NhdG9yLT5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKCpqaXQsIG51
bWJlck9mUGFkZGluZ0J5dGVzKTsKKyAgICB9CisKKyAgICB2b2lkIHN1Y2NlZWQoKQorICAgIHsK
KyAgICAgICAgcmVzdG9yZVNjcmF0Y2goKTsKKyAgICAgICAgc3VjY2Vzcy5hcHBlbmQoaml0LT5q
dW1wKCkpOworICAgIH0KK307CisKK0FjY2Vzc0Nhc2U6OkFjY2Vzc0Nhc2UoKQogewogfQogCi1H
ZXRCeUlkQWNjZXNzOjp+R2V0QnlJZEFjY2VzcygpCitzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2Fz
ZT4gQWNjZXNzQ2FzZTo6Z2V0KAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlw
ZSB0eXBlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIGJvb2wgdmlhUHJveHksIFN0cnVjdHVyZSog
c3RydWN0dXJlLAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRp
b25TZXQsIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQsCisgICAgUHJvcGVydHlTbG90OjpH
ZXRWYWx1ZUZ1bmMgY3VzdG9tR2V0dGVyKQogeworICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3ND
YXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nhc2UoKSk7CisKKyAgICByZXN1bHQtPm1fdHlwZSA9IHR5
cGU7CisgICAgcmVzdWx0LT5tX29mZnNldCA9IG9mZnNldDsKKyAgICByZXN1bHQtPm1fc3RydWN0
dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7CisgICAgcmVzdWx0LT5tX2NvbmRpdGlvblNl
dCA9IGNvbmRpdGlvblNldDsKKyAgICAKKyAgICBpZiAodmlhUHJveHkgfHwgYWRkaXRpb25hbFNl
dCB8fCBkb2VzQ2FsbHMoKSB8fCBjdXN0b21HZXR0ZXIpIHsKKyAgICAgICAgcmVzdWx0LT5tX3Jh
cmVEYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxSYXJlRGF0YT4oKTsKKyAgICAgICAgcmVzdWx0LT5t
X3JhcmVEYXRhLT52aWFQcm94eSA9IHZpYVByb3h5OworICAgICAgICByZXN1bHQtPm1fcmFyZURh
dGEtPmFkZGl0aW9uYWxTZXQgPSBhZGRpdGlvbmFsU2V0OworICAgICAgICByZXN1bHQtPm1fcmFy
ZURhdGEtPmN1c3RvbUFjY2Vzc29yLmdldHRlciA9IGN1c3RvbUdldHRlcjsKKyAgICB9CisKKyAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1HZXRCeUlkQWNjZXNzIEdldEJ5SWRBY2Nlc3M6OmZyb21T
dHJ1Y3R1cmVTdHViSW5mbyhTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCitzdGQ6OnVuaXF1
ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6cmVwbGFjZSgKKyAgICBWTSYgdm0sIEpTQ2Vs
bCogb3duZXIsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7
Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGluaXRpYWxTbG93UGF0aCA9Ci0gICAgICAgIHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRl
bHRhQ2FsbFRvU2xvd0Nhc2UpOwotICAgIAotICAgIEdldEJ5SWRBY2Nlc3MgcmVzdWx0OwotICAg
IAotICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9i
eV9pZF9zZWxmKTsKLSAgICAKLSAgICByZXN1bHQubV90eXBlID0gU2ltcGxlSW5saW5lOwotICAg
IHJlc3VsdC5tX3N0cnVjdHVyZS5jb3B5RnJvbShzdHViSW5mby51LmdldEJ5SWRTZWxmLmJhc2VP
YmplY3RTdHJ1Y3R1cmUpOwotICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gSklUU3R1YlJvdXRp
bmU6OmNyZWF0ZVNlbGZNYW5hZ2VkUm91dGluZShpbml0aWFsU2xvd1BhdGgpOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nhc2UoKSk7CisKKyAgICBy
ZXN1bHQtPm1fdHlwZSA9IFJlcGxhY2U7CisgICAgcmVzdWx0LT5tX29mZnNldCA9IG9mZnNldDsK
KyAgICByZXN1bHQtPm1fc3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7CisKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNz
Q2FzZTo6dHJhbnNpdGlvbigKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSog
b2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0LAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQp
Cit7CisgICAgUkVMRUFTRV9BU1NFUlQob2xkU3RydWN0dXJlID09IG5ld1N0cnVjdHVyZS0+cHJl
dmlvdXNJRCgpKTsKICAgICAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gcmVzdWx0
KG5ldyBBY2Nlc3NDYXNlKCkpOworCisgICAgcmVzdWx0LT5tX3R5cGUgPSBUcmFuc2l0aW9uOwor
ICAgIHJlc3VsdC0+bV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgcmVzdWx0LT5tX3N0cnVjdHVyZS5z
ZXQodm0sIG93bmVyLCBuZXdTdHJ1Y3R1cmUpOworICAgIHJlc3VsdC0+bV9jb25kaXRpb25TZXQg
PSBjb25kaXRpb25TZXQ7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGQ6OnVuaXF1ZV9w
dHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6c2V0dGVyKAorICAgIFZNJiB2bSwgSlNDZWxsKiBv
d25lciwgQWNjZXNzVHlwZSB0eXBlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0LAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRp
b25TZXQsIFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jIGN1c3RvbVNldHRlcikKK3sKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gcmVzdWx0KG5ldyBBY2Nlc3NDYXNlKCkpOwor
CisgICAgcmVzdWx0LT5tX3R5cGUgPSB0eXBlOworICAgIHJlc3VsdC0+bV9vZmZzZXQgPSBvZmZz
ZXQ7CisgICAgcmVzdWx0LT5tX3N0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOwor
ICAgIHJlc3VsdC0+bV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7CisKKyAgICBpZiAoY3Vz
dG9tU2V0dGVyKSB7CisgICAgICAgIHJlc3VsdC0+bV9yYXJlRGF0YSA9IHN0ZDo6bWFrZV91bmlx
dWU8UmFyZURhdGE+KCk7CisgICAgICAgIHJlc3VsdC0+bV9yYXJlRGF0YS0+Y3VzdG9tQWNjZXNz
b3Iuc2V0dGVyID0gY3VzdG9tU2V0dGVyOworICAgIH0KKwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLWJvb2wgR2V0QnlJZEFjY2Vzczo6dmlzaXRXZWFrKFZNJiB2bSkgY29uc3QKK0FjY2Vzc0Nh
c2U6On5BY2Nlc3NDYXNlKCkKK3sKK30KKworc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFj
Y2Vzc0Nhc2U6OmZyb21TdHJ1Y3R1cmVTdHViSW5mbygKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3du
ZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBzd2l0Y2ggKHN0dWJJbmZv
LmFjY2Vzc1R5cGUpIHsKKyAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZjoKKyAgICAgICAg
cmV0dXJuIGdldCgKKyAgICAgICAgICAgIHZtLCBvd25lciwgTG9hZCwgc3R1YkluZm8udS5ieUlk
U2VsZi5vZmZzZXQsIHN0dWJJbmZvLnUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZSk7CisK
KyAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFjZToKKyAgICAgICAgcmV0dXJuIHJlcGxh
Y2Uodm0sIG93bmVyLCBzdHViSW5mby51LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUsIHN0
dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0KTsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KK30KKworYm9vbCBBY2Nlc3NDYXNlOjpjYW5SZXBsYWNlKGNvbnN0
IEFjY2Vzc0Nhc2UmIG90aGVyKQoreworICAgIC8vIFdlIGNvdWxkIGRvIGEgbG90IGJldHRlciBo
ZXJlLCBidXQgZm9yIG5vdyB3ZSBqdXN0IGRvIHNvbWV0aGluZyBvYnZpb3VzLgorCisgICAgaWYg
KCFndWFyZGVkQnlTdHJ1Y3R1cmVDaGVjaygpIHx8ICFvdGhlci5ndWFyZGVkQnlTdHJ1Y3R1cmVD
aGVjaygpKSB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyEKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiBzdHJ1Y3R1cmUoKSA9PSBvdGhlci5zdHJ1
Y3R1cmUoKTsKK30KKwordm9pZCBBY2Nlc3NDYXNlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Cit7CisgICAgb3V0LnByaW50KAorICAgICAgICBtX3R5cGUsICI6KHN0cnVjdHVyZSA9ICIs
IHBvaW50ZXJEdW1wKG1fc3RydWN0dXJlLmdldCgpKSwgIiwgb2Zmc2V0ID0gIiwgbV9vZmZzZXQs
CisgICAgICAgICIsIGNvbmRpdGlvbnMgPSAiLCBtX2NvbmRpdGlvblNldCk7CisKKyAgICBpZiAo
UmFyZURhdGEqIHJhcmVEYXRhID0gbV9yYXJlRGF0YS5nZXQoKSkgeworICAgICAgICBvdXQucHJp
bnQoCisgICAgICAgICAgICAiLCB2aWFQcm94eSA9ICIsIHJhcmVEYXRhLT52aWFQcm94eSwKKyAg
ICAgICAgICAgICIsIGFkZGl0aW9uYWxTZXQgPSAiLCBSYXdQb2ludGVyKHJhcmVEYXRhLT5hZGRp
dGlvbmFsU2V0LmdldCgpKSwKKyAgICAgICAgICAgICIsIGNhbGxMaW5rSW5mbyA9ICIsIFJhd1Bv
aW50ZXIocmFyZURhdGEtPmNhbGxMaW5rSW5mby5nZXQoKSksCisgICAgICAgICAgICAiLCBjdXN0
b21BY2Nlc3NvciA9ICIsIFJhd1BvaW50ZXIocmFyZURhdGEtPmN1c3RvbUFjY2Vzc29yLm9wYXF1
ZSkpOworICAgIH0KKworICAgIG91dC5wcmludCgiKSIpOworfQorCitib29sIEFjY2Vzc0Nhc2U6
OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0CiB7CiAgICAgaWYgKG1fc3RydWN0dXJlICYmICFIZWFw
Ojppc01hcmtlZChtX3N0cnVjdHVyZS5nZXQoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBpZiAoIW1fY29uZGl0aW9uU2V0LmFyZVN0aWxsTGl2ZSgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgaWYgKCFtX3N0dWJSb3V0aW5lLT52aXNpdFdlYWsodm0pKQotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKG1fcmFyZURhdGEgJiYgbV9yYXJlRGF0YS0+Y2FsbExpbmtJbmZv
KQorICAgICAgICBtX3JhcmVEYXRhLT5jYWxsTGlua0luZm8tPnZpc2l0V2Vhayh2bSk7CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLVBvbHltb3JwaGljR2V0QnlJZExpc3Q6OlBvbHltb3JwaGljR2V0
QnlJZExpc3QoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQordm9pZCBBY2Nlc3NDYXNlOjpn
ZW5lcmF0ZVdpdGhHdWFyZCgKKyAgICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlLCBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0JiBmYWxsVGhyb3VnaCkKK3sKKyAgICBDQ2FsbEhlbHBlcnMmIGpp
dCA9ICpzdGF0ZS5qaXQ7CisKKyAgICBpZiAodmlhUHJveHkoKSkgeworICAgICAgICBmYWxsVGhy
b3VnaC5hcHBlbmQoCisgICAgICAgICAgICBqaXQuYnJhbmNoOCgKKyAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRk
cmVzcyhzdGF0ZS5iYXNlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwKKyAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihQdXJlRm9yd2FyZGluZ1Byb3h5
VHlwZSkpKTsKKworICAgICAgICBqaXQubG9hZFB0cigKKyAgICAgICAgICAgIENDYWxsSGVscGVy
czo6QWRkcmVzcyhzdGF0ZS5iYXNlR1BSLCBKU1Byb3h5Ojp0YXJnZXRPZmZzZXQoKSksCisgICAg
ICAgICAgICBzdGF0ZS5zY3JhdGNoR1BSKTsKKworICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQo
CisgICAgICAgICAgICBqaXQuYnJhbmNoU3RydWN0dXJlKAorICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6Tm90RXF1YWwsCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KHN0YXRlLnNjcmF0Y2hHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCisgICAgICAg
ICAgICAgICAgc3RydWN0dXJlKCkpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBmYWxsVGhyb3Vn
aC5hcHBlbmQoCisgICAgICAgICAgICBqaXQuYnJhbmNoU3RydWN0dXJlKAorICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKHN0YXRlLmJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCisg
ICAgICAgICAgICAgICAgc3RydWN0dXJlKCkpKTsKKyAgICB9CisKKyAgICBnZW5lcmF0ZShzdGF0
ZSk7Cit9CisKK3ZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGUoQWNjZXNzR2VuZXJhdGlvblN0YXRl
JiBzdGF0ZSkKK3sKKyAgICBDQ2FsbEhlbHBlcnMmIGppdCA9ICpzdGF0ZS5qaXQ7CisgICAgVk0m
IHZtID0gKmppdC52bSgpOworICAgIFBvbHltb3JwaGljQWNjZXNzJiBhY2Nlc3MgPSAqc3RhdGUu
YWNjZXNzOworICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9ICpzdGF0ZS5zdHViSW5m
bzsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGppdC5jb2RlQmxvY2soKTsKKyAgICBjb25z
dCBJZGVudGlmaWVyJiBpZGVudCA9ICpzdGF0ZS5pZGVudDsKKyAgICBKU1ZhbHVlUmVncyB2YWx1
ZVJlZ3MgPSBzdGF0ZS52YWx1ZVJlZ3M7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0ZS5iYXNl
R1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc3RhdGUuc2NyYXRjaEdQUjsKKworICAgIEFT
U0VSVChtX2NvbmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHlBc3N1bWluZ0ltcHVy
ZVByb3BlcnR5V2F0Y2hwb2ludCgpKTsKKworICAgIGlmIChzdHJ1Y3R1cmUoKS0+bmVlZEltcHVy
ZVByb3BlcnR5V2F0Y2hwb2ludCgpIHx8IG1fY29uZGl0aW9uU2V0Lm5lZWRJbXB1cmVQcm9wZXJ0
eVdhdGNocG9pbnQoKSkKKyAgICAgICAgdm0ucmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJv
cGVydHkoaWRlbnQsIHN0YXRlLmFkZFdhdGNocG9pbnQoKSk7CisKKyAgICBpZiAoYWRkaXRpb25h
bFNldCgpKQorICAgICAgICBhZGRpdGlvbmFsU2V0KCktPmFkZChzdGF0ZS5hZGRXYXRjaHBvaW50
KCkpOworCisgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9u
IDogbV9jb25kaXRpb25TZXQpIHsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjb25k
aXRpb24ub2JqZWN0KCktPnN0cnVjdHVyZSgpOworCisgICAgICAgIGlmIChjb25kaXRpb24uaXNX
YXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKSB7CisgICAgICAgICAg
ICBzdHJ1Y3R1cmUtPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KHN0YXRlLmFkZFdhdGNocG9pbnQo
Y29uZGl0aW9uKSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGNvbmRpdGlvbi5zdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWlu
Z0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUpKTsKKyAgICAgICAgaml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNvbmRpdGlvbi5vYmplY3QoKSksIHNjcmF0Y2hH
UFIpOworICAgICAgICBzdGF0ZS5mYWlsdXJlLmFwcGVuZCgKKyAgICAgICAgICAgIGppdC5icmFu
Y2hTdHJ1Y3R1cmUoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKKyAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgSlNDZWxsOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUpKTsKKyAgICB9
CisKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgSW52YWxpZDoKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAg
ICBjYXNlIEluSGl0OgorICAgIGNhc2UgSW5NaXNzOgorICAgICAgICBqaXQuYm94Qm9vbGVhblBh
eWxvYWQobV90eXBlID09IEluSGl0LCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAg
c3RhdGUuc3VjY2VlZCgpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIE1pc3M6CisgICAg
ICAgIGppdC5tb3ZlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIHZhbHVlUmVncyk7CisgICAg
ICAgIHN0YXRlLnN1Y2NlZWQoKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBMb2FkOgor
ICAgIGNhc2UgR2V0dGVyOgorICAgIGNhc2UgU2V0dGVyOgorICAgIGNhc2UgQ3VzdG9tR2V0dGVy
OgorICAgIGNhc2UgQ3VzdG9tU2V0dGVyOiB7CisgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG1f
b2Zmc2V0KSkgeworICAgICAgICAgICAgU3RydWN0dXJlKiBjdXJyU3RydWN0dXJlOworICAgICAg
ICAgICAgaWYgKG1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBjdXJy
U3RydWN0dXJlID0gc3RydWN0dXJlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IGN1cnJTdHJ1Y3R1cmUgPSBtX2NvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9iamVj
dCgpLT5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgIGN1cnJTdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hp
bmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgb2Zmc2V0KTsKKyAgICAgICAgfQorCisgICAg
ICAgIEdQUlJlZyBiYXNlRm9yR2V0R1BSOworICAgICAgICBpZiAodmlhUHJveHkoKSkgeworICAg
ICAgICAgICAgYmFzZUZvckdldEdQUiA9IHZhbHVlUmVncy5wYXlsb2FkR1BSKCk7CisgICAgICAg
ICAgICBqaXQubG9hZFB0cigKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNQcm94eTo6dGFyZ2V0T2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIGJhc2VG
b3JHZXRHUFIpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGJhc2VGb3JHZXRHUFIgPSBi
YXNlR1BSOworCisgICAgICAgIEdQUlJlZyBiYXNlRm9yQWNjZXNzR1BSOworICAgICAgICBpZiAo
IWNvbmRpdGlvblNldC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGppdC5tb3ZlKAorICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjb25kaXRpb25TZXQuc2xvdEJh
c2VDb25kaXRpb24oKS5vYmplY3QoKSksCisgICAgICAgICAgICAgICAgc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICBiYXNlRm9yQWNjZXNzR1BSID0gc2NyYXRjaEdQUjsKKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBiYXNlRm9yQWNjZXNzR1BSID0gYmFzZUZvckdldEdQUjsKKworICAgICAg
ICBHUFJSZWcgbG9hZGVkVmFsdWVHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICBpZiAobV90
eXBlICE9IEN1c3RvbUdldHRlciAmJiBtX3R5cGUgIT0gQ3VzdG9tU2V0dGVyKSB7CisgICAgICAg
ICAgICBpZiAobV90eXBlID09IExvYWQpCisgICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIg
PSB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIGxvYWRlZFZhbHVlR1BSID0gc2NyYXRjaEdQUjsKKworICAgICAgICAgICAgR1BSUmVnIHN0
b3JhZ2VHUFI7CisgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKKyAgICAg
ICAgICAgICAgICBzdG9yYWdlR1BSID0gYmFzZUZvckFjY2Vzc0dQUjsKKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKAorICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUZvckFjY2Vzc0dQUiwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIpOworICAgICAg
ICAgICAgICAgIHN0b3JhZ2VHUFIgPSBsb2FkZWRWYWx1ZUdQUjsKKyAgICAgICAgICAgIH0KKwor
I2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6
QWRkcmVzcyhzdG9yYWdlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShvZmZzZXQpKSwgbG9hZGVk
VmFsdWVHUFIpOworI2Vsc2UKKyAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gbG9hZCkgeworICAg
ICAgICAgICAgICAgIGppdC5sb2FkMzIoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6QWRkcmVzcyhzdG9yYWdlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShvZmZzZXQpICsgVGFn
T2Zmc2V0KSwKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVSZWdzLnRhZ0dQUigpKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGppdC5sb2FkMzIoCisgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKG9mZnNldCkg
KyBQYXlsb2FkT2Zmc2V0KSwKKyAgICAgICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUik7CisjZW5k
aWYKKyAgICAgICAgfQorCisgICAgICAgIC8vIFN0dWZmIGZvciBjdXN0b20gZ2V0dGVycy4KKyAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlvbkNhbGw7CisgICAgICAgIENDYWxsSGVs
cGVyczo6Q2FsbCBoYW5kbGVyQ2FsbDsKKworICAgICAgICAvLyBTdHVmZiBmb3IgSlMgZ2V0dGVy
cy4KKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpEYXRhTGFiZWxQdHIgYWRkcmVzc09mTGlua0Z1bmN0
aW9uQ2hlY2s7CisgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBmYXN0UGF0aENhbGw7CisgICAg
ICAgIENDYWxsSGVscGVyczo6Q2FsbCBzbG93UGF0aENhbGw7CisKKyAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wIHN1Y2Nlc3M7CisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBmYWlsOworICAg
ICAgICBpZiAobV90eXBlICE9IExvYWQgJiYgbV90eXBlICE9IE1pc3MpIHsKKyAgICAgICAgICAg
IC8vIE5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2hlbmV2ZXIgdGhpcyBjYWxsIGlzIG1hZGUgaW4g
dGhlIGZ1dHVyZSwgd2UgcmVtZW1iZXIgdGhlCisgICAgICAgICAgICAvLyBwbGFjZSB0aGF0IHdl
IG1hZGUgaXQgZnJvbS4KKyAgICAgICAgICAgIGppdC5zdG9yZTMyKAorICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHN0dWJJbmZvLmNhbGxTaXRlSW5kZXguYml0cygp
KSwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0
dWFsUmVnaXN0ZXI+KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7CisKKyAgICAgICAgICAgIGlm
IChtX3R5cGUgPT0gR2V0dGVyIHx8IG1fdHlwZSA9PSBTZXR0ZXIpIHsKKyAgICAgICAgICAgICAg
ICAvLyBDcmVhdGUgYSBKUyBjYWxsIHVzaW5nIGEgSlMgY2FsbCBpbmxpbmUgY2FjaGUuIEFzc3Vt
ZSB0aGF0OgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gLSBTUCBpcyBh
bGlnbmVkIGFuZCByZXByZXNlbnRzIHRoZSBleHRlbnQgb2YgdGhlIGNhbGxpbmcgY29tcGlsZXIn
cyBzdGFjayB1c2FnZS4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIC0g
RlAgaXMgc2V0IGNvcnJlY3RseSAoaS5lLiBpdCBwb2ludHMgdG8gdGhlIGNhbGxlcidzIGNhbGwg
ZnJhbWUgaGVhZGVyKS4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIC0g
U1AgLSBGUCBpcyBhbiBhbGlnbmVkIGRpZmZlcmVuY2UuCisgICAgICAgICAgICAgICAgLy8KKyAg
ICAgICAgICAgICAgICAvLyAtIEFueSBieXRlIGJldHdlZW4gRlAgKGV4Y2x1c2l2ZSkgYW5kIFNQ
IChpbmNsdXNpdmUpIGNvdWxkIGJlIGxpdmUgaW4gdGhlIGNhbGxpbmcKKyAgICAgICAgICAgICAg
ICAvLyAgIGNvZGUuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBUaGVy
ZWZvcmUsIHdlIHRlbXBvcmFyaWx5IGdyb3cgdGhlIHN0YWNrIGZvciB0aGUgcHVycG9zZSBvZiB0
aGUgY2FsbCBhbmQgdGhlbgorICAgICAgICAgICAgICAgIC8vIHNocmluayBpdCBhZnRlci4KKwor
ICAgICAgICAgICAgICAgIG1fcmFyZURhdGEtPmNhbGxMaW5rSW5mbyA9IHN0ZDo6bWFrZV91bmlx
dWU8Q2FsbExpbmtJbmZvPigpOworICAgICAgICAgICAgICAgIG1fcmFyZURhdGEtPnNldFVwQ2Fs
bChDYWxsTGlua0luZm86OkNhbGwsIHN0dWJJbmZvLmNvZGVPcmlnaW4sIGxvYWRlZFZhbHVlR1BS
KTsKKworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKKworICAg
ICAgICAgICAgICAgIC8vIFRoZXJlIGlzIGEgInRoaXMiIGFyZ3VtZW50LgorICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIG51bWJlck9mUGFyYW1ldGVycyA9IDE7CisgICAgICAgICAgICAgICAgLy8g
Li4uIGFuZCBhIHZhbHVlIGFyZ3VtZW50IGlmIHdlJ3JlIGNhbGxpbmcgYSBzZXR0ZXIuCisgICAg
ICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBTZXR0ZXIpCisgICAgICAgICAgICAgICAgICAgIG51
bWJlck9mUGFyYW1ldGVycysrOworCisgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBhY2Nlc3Nv
cjsgaWYgdGhlcmUgYWluJ3Qgb25lIHRoZW4gdGhlIHJlc3VsdCBpcyBqc1VuZGVmaW5lZCgpLgor
ICAgICAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gU2V0dGVyKSB7CisgICAgICAgICAgICAgICAg
ICAgIGppdC5sb2FkUHRyKAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKGxvYWRlZFZhbHVlR1BSLCBHZXR0ZXJTZXR0ZXI6Om9mZnNldE9mU2V0dGVyKCkpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIpOworICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKAorICAgICAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGxvYWRlZFZhbHVlR1BSLCBHZXR0ZXJT
ZXR0ZXI6Om9mZnNldE9mR2V0dGVyKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVk
VmFsdWVHUFIpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcCByZXR1cm5VbmRlZmluZWQgPSBqaXQuYnJhbmNoVGVzdFB0cigKKyAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpaZXJvLCBsb2FkZWRWYWx1ZUdQUik7CisKKyAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlJlZ3NGb3JDYWxsID0gSlNTdGFjazo6Q2FsbEZy
YW1lSGVhZGVyU2l6ZSArIG51bWJlck9mUGFyYW1ldGVyczsKKworICAgICAgICAgICAgICAgIHVu
c2lnbmVkIG51bWJlck9mQnl0ZXNGb3JDYWxsID0KKyAgICAgICAgICAgICAgICAgICAgbnVtYmVy
T2ZSZWdzRm9yQ2FsbCAqIHNpemVvZihSZWdpc3RlcikgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQ
Qyk7CisKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNh
bGwgPQorICAgICAgICAgICAgICAgICAgICBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tB
bGlnbm1lbnRCeXR3cygpLCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCk7CisKKyAgICAgICAgICAgICAg
ICBqaXQuc3ViUHRyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwpLAorICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6QWRkcmVzcyBjYWxsZWVGcmFtZSA9IENDYWxsSGVscGVyczo6QWRkcmVzcygK
KyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwK
KyAgICAgICAgICAgICAgICAgICAgLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxl
ckZyYW1lQW5kUEMpKSk7CisKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMigKKyAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobnVtYmVyT2ZQYXJhbWV0ZXJz
KSwKKyAgICAgICAgICAgICAgICAgICAgY2FsbGVlRnJhbWUud2l0aE9mZnNldChKU1N0YWNrOjpB
cmd1bWVudENvdW50ICogc2l6ZW9mKFJlZ2lzdGVyKSArIFBheWxvYWRPZmZzZXQpKTsKKworICAg
ICAgICAgICAgICAgIGppdC5zdG9yZUNlbGwoCisgICAgICAgICAgICAgICAgICAgIGxvYWRlZFZh
bHVlR1BSLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KEpTU3RhY2s6OkNhbGxlZSAqIHNpemVvZihS
ZWdpc3RlcikpKTsKKworICAgICAgICAgICAgICAgIGppdC5zdG9yZUNlbGwoCisgICAgICAgICAg
ICAgICAgICAgIGJhc2VGb3JHZXRHUFIsCisgICAgICAgICAgICAgICAgICAgIGNhbGxlZUZyYW1l
LndpdGhPZmZzZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCkub2Zmc2V0KCkgKiBzaXpl
b2YoUmVnaXN0ZXIpKSk7CisKKyAgICAgICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsU2V0dGVy
KSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZVZhbHVlKAorICAgICAgICAgICAgICAg
ICAgICAgICAgdmFsdWVSZWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGVlRnJhbWUu
d2l0aE9mZnNldCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudCgxKS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpKTsKKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgc2xvd0Nhc2UgPSBq
aXQuYnJhbmNoUHRyV2l0aFBhdGNoKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
Ok5vdEVxdWFsLCBsb2FkZWRWYWx1ZUdQUiwgYWRkcmVzc09mTGlua0Z1bmN0aW9uQ2hlY2ssCisg
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigwKSk7CisKKyAg
ICAgICAgICAgICAgICBmYXN0UGF0aENhbGwgPSBqaXQubmVhckNhbGwoKTsKKworICAgICAgICAg
ICAgICAgIGppdC5hZGRQdHIoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2FsbCksCisgICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICAgICAgICAg
IGlmIChraW5kID09IENhbGxHZXR0ZXIpCisgICAgICAgICAgICAgICAgICAgIGppdC5zZXR1cFJl
c3VsdHModmFsdWVSZWdzKTsKKworICAgICAgICAgICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1w
KCkpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmxpbmsoJmppdCk7CisKKyAgICAgICAgICAg
ICAgICBqaXQubW92ZShsb2FkZWRWYWx1ZUdQUiwgR1BSSW5mbzo6cmVnVDApOworI2lmIFVTRShK
U1ZBTFVFMzJfNjQpCisgICAgICAgICAgICAgICAgLy8gV2UgKmFsd2F5cyoga25vdyB0aGF0IHRo
ZSBnZXR0ZXIvc2V0dGVyLCBpZiBub24tbnVsbCwgaXMgYSBjZWxsLgorICAgICAgICAgICAgICAg
IGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBH
UFJJbmZvOjpyZWdUMSk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIobV9yYXJlRGF0YS0+Y2FsbExpbmtJbmZvLmdldCgpKSwgR1BS
SW5mbzo6cmVnVDIpOworICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCA9IGppdC5uZWFyQ2Fs
bCgpOworCisgICAgICAgICAgICAgICAgaml0LmFkZFB0cigKKyAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxsKSwK
KyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CisgICAgICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ2FsbEdldHRlcikKKyAgICAgICAgICAgICAg
ICAgICAgaml0LnNldHVwUmVzdWx0cyh2YWx1ZVJlZ3MpOworCisgICAgICAgICAgICAgICAgZG9u
ZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuVW5kZWZpbmVkLmxp
bmsoJmppdCk7CisKKyAgICAgICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsR2V0dGVyKQorICAg
ICAgICAgICAgICAgICAgICBqaXQubW92ZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCB2YWx1
ZVJlZ3MpOworCisgICAgICAgICAgICAgICAgZG9uZS5saW5rKCZqaXQpOworCisgICAgICAgICAg
ICAgICAgc3RhdGUuY2FsbGJhY2tzLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgWyZdIChM
aW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3JhcmVE
YXRhLT5jYWxsTGlua0luZm8tPnNldENhbGxMb2NhdGlvbnMoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoc2xvd1BhdGhDYWxsKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoYWRkcmVzc09m
TGlua0Z1bmN0aW9uQ2hlY2spLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZm
ZXIubG9jYXRpb25PZk5lYXJDYWxsKGZhc3RQYXRoQ2FsbCkpOworCisgICAgICAgICAgICAgICAg
ICAgICAgICBsaW5rQnVmZmVyLmxpbmsoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xv
d1BhdGhDYWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVs
KHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CisgICAgICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAv
LyBnZXR0ZXI6IEVuY29kZWRKU1ZhbHVlICgqR2V0VmFsdWVGdW5jKShFeGVjU3RhdGUqLCBKU09i
amVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKTsK
KyAgICAgICAgICAgICAgICAvLyBzZXR0ZXI6IHZvaWQgKCpQdXRWYWx1ZUZ1bmMpKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiBiYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzT2JqZWN0LCBFbmNvZGVkSlNW
YWx1ZSB2YWx1ZSk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgICAgICBpZiAoa2lu
ZCA9PSBDYWxsQ3VzdG9tR2V0dGVyKSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICBiYXNlRm9yQWNj
ZXNzR1BSLCBiYXNlRm9yR2V0R1BSLAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKHByb3BlcnR5TmFtZS5pbXBsKCkpKTsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShiYXNlRm9yQWNjZXNzR1BSLCBiYXNlRm9yR2V0R1BSLCB2YWx1ZVJlZ3MuZ3ByKCkpOwor
I2Vsc2UKKyAgICAgICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsQ3VzdG9tR2V0dGVyKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoCisgICAg
ICAgICAgICAgICAgICAgICAgICBiYXNlRm9yQWNjZXNzR1BSLCBiYXNlRm9yR2V0R1BSLAorICAg
ICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
Q2VsbFRhZyksCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIocHJvcGVydHlOYW1lLmltcGwoKSkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoCisgICAg
ICAgICAgICAgICAgICAgICAgICBiYXNlRm9yQWNjZXNzR1BSLCBiYXNlRm9yR2V0R1BSLAorICAg
ICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
Q2VsbFRhZyksCisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MucGF5bG9hZEdQUigp
LCB2YWx1ZVJlZ3MudGFnR1BSKCkpOworICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAg
ICAgICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgJnZtLT50
b3BDYWxsRnJhbWUpOworCisgICAgICAgICAgICAgICAgb3BlcmF0aW9uQ2FsbCA9IGppdC5jYWxs
KCk7CisgICAgICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ2FsbEN1c3RvbUdldHRlcikKKyAgICAg
ICAgICAgICAgICAgICAgaml0LnNldHVwUmVzdWx0cyh2YWx1ZVJlZ3MpOworICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6SnVtcCBub0V4Y2VwdGlvbiA9CisgICAgICAgICAgICAgICAgICAg
IGppdC5lbWl0RXhjZXB0aW9uQ2hlY2soQ0NhbGxIZWxwZXJzOjpJbnZlcnRlZEV4Y2VwdGlvbkNo
ZWNrKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50cyhD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodm0pLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
cik7CisgICAgICAgICAgICAgICAgaGFuZGxlckNhbGwgPSBqaXQuY2FsbCgpOworICAgICAgICAg
ICAgICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBub0V4Y2VwdGlvbi5saW5rKCZqaXQpOworCisgICAgICAgICAgICAgICAgc3Rh
dGUuY2FsbGJhY2tzLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgWyZdIChMaW5rQnVmZmVy
JiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmso
b3BlcmF0aW9uQ2FsbCwgRnVuY3Rpb25QdHIobV9yYXJlRGF0YS0+Y3VzdG9tQWNjZXNzb3Iub3Bh
cXVlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoaGFuZGxlckNh
bGwsIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBjYXNlIFJlcGxhY2U6IHsKKyAgICAgICAgaWYgKGlzSW5s
aW5lT2Zmc2V0KG1fb2Zmc2V0KSkgeworICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUoCisgICAg
ICAgICAgICAgICAgdmFsdWVSZWdzLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRk
cmVzcygKKyAgICAgICAgICAgICAgICAgICAgYmFzZUdQUiwKKyAgICAgICAgICAgICAgICAgICAg
SlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsKKyAgICAgICAgICAgICAgICAgICAg
b2Zmc2V0SW5JbmxpbmVTdG9yYWdlKG1fb2Zmc2V0KSAqIHNpemVvZihKU1ZhbHVlKSkpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUoCisgICAgICAgICAgICAgICAgdmFsdWVSZWdzLAor
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICAg
ICAgc2NyYXRjaEdQUjEsIG9mZnNldEluQnV0dGVyZmx5KG1fb2Zmc2V0KSAqIHNpemVvZihKU1Zh
bHVlKSkpOworICAgICAgICB9CisgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGNhc2UgVHJhbnNpdGlvbjogeworICAgICAgICAvLyBBY2Nlc3ND
YXNlOjp0cmFuc2l0aW9uKCkgc2hvdWxkIGhhdmUgcmV0dXJuZWQgbnVsbC4KKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgPj0gNiB8fCAhc3RydWN0dXJl
KCktPm91dE9mTGluZUNhcGFjaXR5KCkgfHwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5
KCkgPT0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpOworICAgICAgICBSRUxF
QVNFX0FTU0VSVCghb2xkU3RydWN0dXJlLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKTsKKwor
ICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOworCisgICAgICAgIFNjcmF0
Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1YkluZm8ucGF0Y2gudXNlZFJlZ2lzdGVy
cyk7CisgICAgICAgIGFsbG9jYXRvci5sb2NrKGJhc2VHUFIpOworICAgICAgICBhbGxvY2F0b3Iu
bG9jayh2YWx1ZVJlZ3MpOworICAgICAgICBhbGxvY2F0b3IubG9jayhzY3JhdGNoR1BSKTsKKwor
ICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BS
KCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMzsKKyAgICAgICAgaWYgKG5ld1N0cnVjdHVy
ZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0
eSgpCisgICAgICAgICAgICAmJiBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkKKyAg
ICAgICAgICAgIHNjcmF0Y2hHUFIzID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBzY3JhdGNoR1BSMyA9IEludmFsaWRHUFJSZWc7CisK
KyAgICAgICAgc2l6ZV90IG51bWJlck9mUGFkZGluZ0J5dGVzID0gYWxsb2NhdGUucHJlc2VydmVS
ZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0KTsKKworICAgICAgICBBU1NFUlQoc3RydWN0dXJl
KCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOworCisgICAg
ICAgIGJvb2wgc2NyYXRjaEdQUkhhc1N0b3JhZ2UgPSBmYWxzZTsKKworICAgICAgICBpZiAobmV3
U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlKCktPm91dE9mTGlu
ZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgICAgIHNpemVfdCBuZXdTaXplID0gbmV3U3RydWN0dXJl
KCktPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7CisgICAgICAgICAgICBD
b3BpZWRBbGxvY2F0b3IqIGNvcGllZEFsbG9jYXRvciA9ICZ2bS0+aGVhcC5zdG9yYWdlQWxsb2Nh
dG9yKCk7CisKKyAgICAgICAgICAgIGlmICghc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5
KSB7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJy
ZW50UmVtYWluaW5nLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBzbG93UGF0aC5hcHBl
bmQoCisgICAgICAgICAgICAgICAgICAgIGppdC5icmFuY2hTdWJQdHIoCisgICAgICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlNpZ25lZCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIobmV3U2l6ZSksIHNjcmF0Y2hHUFIpKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIo
c2NyYXRjaEdQUiwgJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKKyAgICAg
ICAgICAgICAgICBqaXQubmVnUHRyKHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGppdC5h
ZGRQdHIoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRyZXNz
KCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNpemVv
ZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSAqIHNpemVvZihKU1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobmV3U2l6ZSA+IG9s
ZFNpemUpOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNj
cmF0Y2hHUFIzKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cigmY29waWVkQWxsb2NhdG9y
LT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIHNsb3dQ
YXRoLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgaml0LmJyYW5jaFN1YlB0cigKKyAgICAg
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6U2lnbmVkLCBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRjaEdQUikpOworICAgICAgICAgICAgICAgIGppdC5z
dG9yZVB0cihzY3JhdGNoR1BSLCAmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcp
OworICAgICAgICAgICAgICAgIGppdC5uZWdQdHIoc2NyYXRjaEdQUik7CisgICAgICAgICAgICAg
ICAgaml0LmFkZFB0cigKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBYnNvbHV0
ZUFkZHJlc3MoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UGF5bG9hZEVuZCksIHNjcmF0Y2hH
UFIpOworICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoc2l6ZW9mKEpTVmFsdWUpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgLy8gV2Ug
aGF2ZSBzY3JhdGNoR1BSID0gbmV3IHN0b3JhZ2UsIHNjcmF0Y2hHUFIzID0gb2xkIHN0b3JhZ2Us
CisgICAgICAgICAgICAgICAgLy8gc2NyYXRjaEdQUjIgPSBhdmFpbGFibGUKKyAgICAgICAgICAg
ICAgICBmb3IgKHNpemVfdCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBvbGRTaXplOyBvZmZzZXQgKz0g
c2l6ZW9mKHZvaWQqKSkgeworICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFB0cigKKyAgICAg
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzY3JhdGNoR1BSMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAt
c3RhdGljX2Nhc3Q8cHRyZGlmZl90PigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b2Zmc2V0ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgc2NyYXRjaEdQUjIpOworICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmVQ
dHIoCisgICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoR1BSMiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzY3JhdGNoR1BSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1zdGF0aWNfY2Fz
dDxwdHJkaWZmX3Q+KG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZih2b2lkKikpKSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBqaXQuc3Rv
cmVQdHIoc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJzYXNlR1BSLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFJIYXNTdG9yYWdl
ID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHVpbnQzMl90IHN0cnVjdHVyZUJpdHMgPSBi
aXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHN0cnVjdHVyZS0+aWQoKSk7CisgICAgICAgIGppdC5zdG9y
ZTMyKAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZUJp
dHMpLAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSk7CisKKyAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG1fb2Zm
c2V0KSkgeworICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUoCisgICAgICAgICAgICAgICAgdmFs
dWVSZWdzLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAg
ICAgICAgICAgICAgYmFzZUdQUiwKKyAgICAgICAgICAgICAgICAgICAgSlNPYmplY3Q6Om9mZnNl
dE9mSW5saW5lU3RvcmFnZSgpICsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0SW5JbmxpbmVT
dG9yYWdlKG1fb2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWUpKSkpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgaWYgKCFzY3JhdGNoR1BSSGFzU3RvcmFnZSkKKyAgICAgICAgICAgICAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSgK
KyAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MsCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldEluQnV0dGVyZmx5KG1fb2Zmc2V0KSAqIHNpemVv
ZihKU1ZhbHVlKSkpOworICAgICAgICB9CisKKyAgICAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRj
aEJ1ZmZlciA9IG51bGxwdHI7CisgICAgICAgIGlmIChuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSAhPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkKKyAgICAgICAg
ICAgIHNjcmF0Y2hCdWZmZXIgPSB2bS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoYWxsb2NhdG9yLmRl
c2lyZWRTY3JhdGNoQnVmZmVyU2l6ZUZvckNhbGwoKSk7CisKKyNpZiBFTkFCTEUoR0dDKQorICAg
ICAgICBpZiAobmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJl
KCktPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2Fs
bCBjYWxsRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXI7CisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
Okp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGppdC5qdW1wSWZJc1JlbWVtYmVyZWRP
ckluRWRlbihiYXNlR1BSKTsKKyAgICAgICAgICAgIFdyaXRlQmFycmllckJ1ZmZlciYgd3JpdGVC
YXJyaWVyQnVmZmVyID0gaml0LnZtKCktPmhlYXAud3JpdGVCYXJyaWVyQnVmZmVyKCk7CisgICAg
ICAgICAgICBqaXQubG9hZDMyKHdyaXRlQmFycmllckJ1ZmZlci5jdXJyZW50SW5kZXhBZGRyZXNz
KCksIHNjcmF0Y2hHUFIyKTsKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBuZWVkVG9G
bHVzaCA9CisgICAgICAgICAgICAgICAgaml0LmJyYW5jaDMyKAorICAgICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgc2NyYXRjaEdQUjIsCisgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHdyaXRlQmFycmllckJ1ZmZlci5jYXBh
Y2l0eSgpKSk7CisKKyAgICAgICAgICAgIGppdC5hZGQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMigxKSwgc2NyYXRjaEdQUjIpOworICAgICAgICAgICAgaml0LnN0b3JlMzIoc2NyYXRjaEdQ
UjIsIHdyaXRlQmFycmllckJ1ZmZlci5jdXJyZW50SW5kZXhBZGRyZXNzKCkpOworCisgICAgICAg
ICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIod3JpdGVCYXJyaWVyQnVm
ZmVyLmJ1ZmZlcigpKSwgc2NyYXRjaEdQUjEpOworICAgICAgICAgICAgLy8gV2UgdXNlIGFuIG9m
ZnNldCBvZiAtc2l6ZW9mKHZvaWQqKSBiZWNhdXNlIHdlIGFscmVhZHkgYWRkZWQgMSB0byBzY3Jh
dGNoR1BSMi4KKyAgICAgICAgICAgIGppdC5zdG9yZVB0cigKKyAgICAgICAgICAgICAgICBiYXNl
R1BSLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QmFzZUluZGV4KAorICAgICAgICAg
ICAgICAgICAgICBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIENDYWxsSGVscGVyczo6U2NhbGVQ
dHIsCisgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KC1zaXplb2Yodm9p
ZCopKSkpOworCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZVdpdGhCYXJyaWVy
ID0gaml0Lmp1bXAoKTsKKyAgICAgICAgICAgIG5lZWRUb0ZsdXNoLmxpbmsoJmppdCk7CisKKyAg
ICAgICAgICAgIGFsbG9jYXRvci5wcmVzZXJ2ZVVzZWRSZWdpc3RlcnNUb1NjcmF0Y2hCdWZmZXJG
b3JDYWxsKGppdCwgc2NyYXRjaEJ1ZmZlciwgc2NyYXRjaEdQUjIpOworICAgICAgICAgICAgaml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlR1BSKTsKKyAgICAgICAgICAgIGNhbGxG
bHVzaFdyaXRlQmFycmllckJ1ZmZlciA9IGppdC5jYWxsKCk7CisgICAgICAgICAgICBhbGxvY2F0
b3IucmVzdG9yZVVzZWRSZWdpc3RlcnNGcm9tU2NyYXRjaEJ1ZmZlckZvckNhbGwoCisgICAgICAg
ICAgICAgICAgaml0LCBzY3JhdGNoQnVmZmVyLCBzY3JhdGNoR1BSMik7CisKKyAgICAgICAgICAg
IGRvbmVXaXRoQmFycmllci5saW5rKCZqaXQpOworICAgICAgICAgICAgb3duZXJJc1JlbWVtYmVy
ZWRPckluRWRlbi5saW5rKCZqaXQpOworCisgICAgICAgICAgICBzdGF0ZS5jYWxsYmFja3MuYXBw
ZW5kKAorICAgICAgICAgICAgICAgIFsmXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAg
ICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbEZsdXNoV3JpdGVCYXJyaWVyQnVm
ZmVyLCBvcGVyYXRpb25GbHVzaFdyaXRlQmFycmllckJ1ZmZlcik7CisgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoR0dDKQorICAgICAgICAKKyAgICAgICAg
c3RhdGUuc3VjY2VlZCgpOworCisgICAgICAgIGlmIChuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSAhPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgeworICAgICAg
ICAgICAgc2xvd1BhdGgubGluaygmaml0KTsKKyAgICAgICAgICAgIGFsbG9jYXRvci5yZXN0b3Jl
UmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgbnVtYmVyT2ZQYWRkaW5nQnl0ZXMpOworICAg
ICAgICAgICAgYWxsb2NhdG9yLnByZXNlcnZlVXNlZFJlZ2lzdGVyc1RvU2NyYXRjaEJ1ZmZlckZv
ckNhbGwoaml0LCBzY3JhdGNoQnVmZmVyLCBzY3JhdGNoR1BSKTsKKyNpZiBVU0UoSlNWQUxVRTY0
KQorICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKKyAgICAgICAg
ICAgICAgICBiYXNlR1BSLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cihzdHJ1Y3R1cmUpLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKHNsb3QuY2FjaGVkT2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIHZhbHVlR1BSKTsKKyNl
bHNlCisgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKAorICAgICAg
ICAgICAgICAgIGJhc2VHUFIsCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKHN0cnVjdHVyZSksCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoc2xvdC5jYWNoZWRPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgdmFsdWVHUFIsIHZh
bHVlVGFnR1BSKTsKKyNlbmRpZgorICAgICAgICAgICAgb3BlcmF0aW9uQ2FsbCA9IGppdC5jYWxs
KCk7CisgICAgICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVVzZWRSZWdpc3RlcnNGcm9tU2NyYXRj
aEJ1ZmZlckZvckNhbGwoamksIHNjcmF0Y2hCdWZmZXIsIHNjcmF0Y2hHUFIpOworICAgICAgICAg
ICAgc3RhdGUuc3VjY2VlZCgpOworCisgICAgICAgICAgICBzdGF0ZS5jYWxsYmFja3MuYXBwZW5k
KAorICAgICAgICAgICAgICAgIFsmXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAg
ICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsob3BlcmF0aW9uQ2FsbCwgb3BlcmF0aW9uUmVh
bGxvY2F0ZVN0b3JhZ2VBbmRGaW5pc2hQdXQpOworICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICB9CisgICAgICAgIHJldHVybjsKKyAgICB9IH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorCitQb2x5bW9ycGhpY0FjY2Vzczo6UG9seW1vcnBoaWNBY2Nlc3Mo
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogewogICAgIGlmIChzdHViSW5mby5hY2Nlc3NU
eXBlID09IGFjY2Vzc191bnNldCkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIG1fbGlzdC5h
cHBlbmQoR2V0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKHN0dWJJbmZvKSk7Cisg
ICAgbV9saXN0LmFwcGVuZChBY2Nlc3NDYXNlOjpmcm9tU3RydWN0dXJlU3R1YkluZm8oc3R1Yklu
Zm8pKTsKIH0KIAotUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogUG9seW1vcnBoaWNHZXRCeUlkTGlz
dDo6ZnJvbShTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCitQb2x5bW9ycGhpY0FjY2Vzcyog
UG9seW1vcnBoaWNBY2Nlc3M6OmZyb20oU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogewog
ICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfbGlzdCkKICAg
ICAgICAgcmV0dXJuIHN0dWJJbmZvLnUuZ2V0QnlJZExpc3QubGlzdDsKQEAgLTkzLDYzICs3NTAs
MjM3IEBAIFBvbHltb3JwaGljR2V0QnlJZExpc3QqIFBvbHltb3JwaGljR2V0QnkKICAgICAgICAg
c3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYKICAgICAgICAgfHwg
c3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpOwogICAgIAotICAgIFBvbHltb3Jw
aGljR2V0QnlJZExpc3QqIHJlc3VsdCA9IG5ldyBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KHN0dWJJ
bmZvKTsKKyAgICBQb2x5bW9ycGhpY0FjY2VzcyogcmVzdWx0ID0gbmV3IFBvbHltb3JwaGljQWNj
ZXNzKHN0dWJJbmZvKTsKICAgICAKICAgICBzdHViSW5mby5pbml0R2V0QnlJZExpc3QocmVzdWx0
KTsKICAgICAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0
Ojp+UG9seW1vcnBoaWNHZXRCeUlkTGlzdCgpIHsgfQorUG9seW1vcnBoaWNBY2Nlc3M6On5Qb2x5
bW9ycGhpY0FjY2VzcygpIHsgfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHIgUG9seW1vcnBoaWNH
ZXRCeUlkTGlzdDo6Y3VycmVudFNsb3dQYXRoVGFyZ2V0KAotICAgIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbykgY29uc3QKK01hY3JvQXNzZW1ibGVyQ29kZVB0ciBQb2x5bW9ycGhpY0FjY2Vz
czo6cmVnZW5lcmF0ZVdpdGhDYXNlKAorICAgIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsCisg
ICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IG5ld0FjY2VzcykKIHsKLSAgICBpZiAoaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVs
QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSk7Ci0gICAgcmV0dXJu
IG1fbGlzdC5sYXN0KCkuc3R1YlJvdXRpbmUoKS0+Y29kZSgpLmNvZGUoKTsKLX0KKyAgICBWZWN0
b3I8c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+PiByZXBsYWNlZCA9IGFkZEFjY2Vzc0Nhc2Uo
bmV3QWNjZXNzKTsKKyAgICAKKyAgICBpZiAobV9saXN0LnNpemUoKSA+IFBPTFlNT1JQSElDX0xJ
U1RfQ0FDSEVfU0laRSkgeworICAgICAgICB1bmRvQWRkQWNjZXNzQ2FzZShzdGQ6Om1vdmUocmVw
bGFjZWQpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOworICAgIH0K
IAotdm9pZCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjphZGRBY2Nlc3MoY29uc3QgR2V0QnlJZEFj
Y2VzcyYgYWNjZXNzKQotewotICAgIEFTU0VSVCghaXNGdWxsKCkpOwotICAgIC8vIE1ha2Ugc3Vy
ZSB0aGF0IHRoZSByZXNpemluZyBvcHRpbWl6ZXMgZm9yIHNwYWNlLCBub3QgdGltZS4KLSAgICBt
X2xpc3QucmVzaXplVG9GaXQobV9saXN0LnNpemUoKSArIDEpOwotICAgIG1fbGlzdC5sYXN0KCkg
PSBhY2Nlc3M7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJlc3VsdCA9IHJlZ2VuZXJhdGUo
dm0sIGNvZGVCbG9jaywgc3R1YkluZm8sIGlkZW50KTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAg
ICAgICB1bmRvQWRkQWNjZXNzQ2FzZShzdGQ6Om1vdmUocmVwbGFjZWQpKTsKKyAgICAgICAgcmV0
dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1ib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmlzRnVsbCgpIGNvbnN0Citib29sIFBv
bHltb3JwaGljQWNjZXNzOjppc0Z1bGwoKSBjb25zdAogewogICAgIEFTU0VSVChzaXplKCkgPD0g
UE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKTsKICAgICByZXR1cm4gc2l6ZSgpID09IFBPTFlN
T1JQSElDX0xJU1RfQ0FDSEVfU0laRTsKIH0KIAotYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0
Ojppc0FsbW9zdEZ1bGwoKSBjb25zdAorYm9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6aXNBbG1vc3RG
dWxsKCkgY29uc3QKIHsKICAgICBBU1NFUlQoc2l6ZSgpIDw9IFBPTFlNT1JQSElDX0xJU1RfQ0FD
SEVfU0laRSk7CiAgICAgcmV0dXJuIHNpemUoKSA+PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJ
WkUgLSAxOwogfQogCi1ib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmRpZFNlbGZQYXRjaGlu
ZygpIGNvbnN0Citib29sIFBvbHltb3JwaGljQWNjZXNzOjp2aXNpdFdlYWsoVk0mIHZtKSBjb25z
dAogewotICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUoKTsgaS0tOykgewotICAgICAgICBpZiAo
YXQoaSkudHlwZSgpID09IEdldEJ5SWRBY2Nlc3M6OlNpbXBsZUlubGluZSkKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkg
eworICAgICAgICBpZiAoIWF0KGkpLnZpc2l0V2Vhayh2bSkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
Ym9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojp2aXNpdFdlYWsoVk0mIHZtKSBjb25zdAordm9p
ZCBQb2x5bW9ycGhpY0FjY2Vzczo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewotICAg
IGZvciAodW5zaWduZWQgaSA9IHNpemUoKTsgaS0tOykgewotICAgICAgICBpZiAoIWF0KGkpLnZp
c2l0V2Vhayh2bSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgb3V0LnByaW50KFJh
d1BvaW50ZXIodGhpcyksICI6WyIpOworICAgIENvbW1hUHJpbnRlciBjb21tYTsKKyAgICBmb3Ig
KGF1dG8mIGVudHJ5IDogbV9saXN0KQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICplbnRyeSk7
CisgICAgb3V0LnByaW50KCJdIik7Cit9CisKK1ZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNz
Q2FzZT4+IFBvbHltb3JwaGljQWNjZXNzOjphZGRBY2Nlc3NDYXNlKHN0ZDo6dW5pcXVlX3B0cjxB
Y2Nlc3NDYXNlPiBhY2Nlc3MpCit7CisgICAgQVNTRVJUKCFpc0Z1bGwoKSk7CisKKyAgICBWZWN0
b3I8c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+PiByZXBsYWNlZDsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9saXN0LnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChhY2Nlc3Mu
Y2FuUmVwbGFjZSgqbV9saXN0W2ldKSkgeworICAgICAgICAgICAgcmVwbGFjZWQuYXBwZW5kKHN0
ZDo6bW92ZShtX2xpc3RbaV0pKTsKKyAgICAgICAgICAgIG1fbGlzdFtpLS1dID0gc3RkOjptb3Zl
KG1fbGlzdC5sYXN0KCkpOworICAgICAgICAgICAgbV9saXN0LnRha2VMYXN0KCk7CisgICAgICAg
IH0KICAgICB9Ci0gICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgLy8gTWFrZSBzdXJlIHRoYXQg
dGhlIHJlc2l6aW5nIG9wdGltaXplcyBmb3Igc3BhY2UsIG5vdCB0aW1lLgorICAgIG1fbGlzdC5y
ZXNpemVUb0ZpdChtX2xpc3Quc2l6ZSgpICsgMSk7CisgICAgbV9saXN0Lmxhc3QoKSA9IGFjY2Vz
czsKKyAgICByZXR1cm4gcmVwbGFjZWQ7Cit9CisKK3ZvaWQgUG9seW1vcnBoaWNBY2Nlc3M6OnVu
ZG9BZGRBY2Nlc3NDYXNlKFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4+IHJlcGxh
Y2VkKQoreworICAgIG1fbGlzdC50YWtlTGFzdCgpOworCisgICAgZm9yIChhdXRvJiBlbnRyeSA6
IHJlcGxhY2VkKQorICAgICAgICBtX2xpc3QuYXBwZW5kKHN0ZDo6bW92ZShlbnRyeSkpOworfQor
CitNYWNyb0Fzc2VtYmxlckNvZGVQdHIgUG9seW1vcnBoaWNBY2Nlc3M6OnJlZ2VuZXJhdGUoCisg
ICAgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKK3sKKyAgICBBY2Nlc3NHZW5lcmF0aW9uU3Rh
dGUgc3RhdGU7CisKKyAgICBzdGF0ZS5hY2Nlc3MgPSB0aGlzOworICAgIHN0YXRlLnN0dWJJbmZv
ID0gJnN0dWJJbmZvOworICAgIHN0YXRlLmlkZW50ID0gJmlkZW50OworICAgIAorICAgIHN0YXRl
LmJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmJhc2VHUFIpOwor
ICAgIHN0YXRlLnZhbHVlUmVncyA9IEpTVmFsdWVSZWdzKAorI2lmIFVTRShKU1ZBTFVFMzJfNjQp
CisgICAgICAgIHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVUYWdHUFIp
LAorI2VuZGlmCisgICAgICAgIHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gudmFs
dWVHUFIpKTsKKworICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1Yklu
Zm8ucGF0aGMudXNlZFJlZ2lzdGVycyk7CisgICAgc3RhdGUuYWxsb2NhdG9yID0gJmFsbG9jYXRv
cjsKKyAgICBhbGxvY2F0b3IubG9jayhzdGF0ZS5iYXNlR1BSKTsKKyAgICBhbGxvY2F0b3IubG9j
ayhzdGF0ZS52YWx1ZVJlZ3MpOworCisgICAgc3RhdGUuc2NyYXRjaEdQUiA9IGFsbG9jYXRvci5h
bGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAKKyAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSwgY29k
ZUJsb2NrKTsKKyAgICBzdGF0ZS5qaXQgPSAmaml0OworCisgICAgc3RhdGUubnVtYmVyT2ZQYWRk
aW5nQnl0ZXMgPSBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0
KTsKKworICAgIGJvb2wgYWxsR3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2sgPSB0cnVlOworICAgIGZv
ciAoYXV0byYgZW50cnkgOiBtX2xpc3QpCisgICAgICAgIGFsbEd1YXJkZWRCeVN0cnVjdHVyZUNo
ZWNrICY9IGVudHJ5LT5ndWFyZGVkQnlTdHJ1Y3R1cmVDaGVjaygpOworCisgICAgaWYgKCFzaXpl
KCkpIHsKKyAgICAgICAgLy8gVGhpcyBpcyBzdXBlciB1bmxpa2VseSwgYnV0IHdlIG1ha2UgaXQg
bGVnYWwgYW55d2F5LgorICAgICAgICBzdGF0ZS5mYWlsdXJlLmFwcGVuZChqaXQuanVtcCgpKTsK
KyAgICB9IGVsc2UgaWYgKCFhbGxHdWFyZGVkQnlTdHJ1Y3R1cmVDaGVjayB8fCBzaXplKCkgPT0g
MSkgeworICAgICAgICAvLyBJZiB0aGVyZSBhcmUgYW55IHByb3hpZXMgaW4gdGhlIGxpc3QsIHdl
IGNhbm5vdCBqdXN0IHVzZSBhIGJpbmFyeSBzd2l0Y2ggb3ZlciB0aGUgc3RydWN0dXJlLgorICAg
ICAgICAvLyBXZSBuZWVkIHRvIHJlc29ydCB0byBhIGNhc2NhZGUuIEEgY2FzY2FkZSBhbHNvIGhh
cHBlbnMgdG8gYmUgb3B0aW1hbCBpZiB3ZSBvbmx5IGhhdmUganVzdAorICAgICAgICAvLyBvbmUg
Y2FzZS4KKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBmYWxsVGhyb3VnaDsKKworICAg
ICAgICAvLyBDYXNjYWRlIHRocm91Z2ggdGhlIGxpc3QsIHByZWZlcnJpbmcgbmV3ZXIgZW50cmll
cy4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9saXN0LnNpemUoKTsgaS0tOykgeworICAg
ICAgICAgICAgZmFsbFRocm91Z2gubGluaygmaml0KTsKKyAgICAgICAgICAgIG1fbGlzdFtpXS0+
Z2VuZXJhdGVXaXRoR3VhcmQoc3RhdGUsIGZhbGxUaHJvdWdoKTsKKyAgICAgICAgfQorICAgICAg
ICBzdGF0ZS5mYWlsdXJlLmFwcGVuZChmYWxsVGhyb3VnaCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgaml0LmxvYWQzMigKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdGF0ZS5i
YXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAorICAgICAgICAgICAgc3RhdGUu
c2NyYXRjaEdQUik7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8aW50NjRfdD4gY2FzZVZhbHVl
cyhtX2xpc3Quc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbGlz
dC5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIGNhc2VWYWx1ZXNbaV0gPSBiaXR3aXNlX2Nhc3Q8
aW50MzJfdD4obV9saXN0W2ldLT5zdHJ1Y3R1cmUoKSk7CisgICAgICAgIAorICAgICAgICBCaW5h
cnlTd2l0Y2ggYmluYXJ5U3dpdGNoKHN0YXRlLnNjcmF0Y2hHUFIsIGNhc2VWYWx1ZXMsIEJpbmFy
eVN3aXRjaDo6SW50MzIpOworICAgICAgICB3aGlsZSAoYmluYXJ5U3dpdGNoLmFkdmFuY2Uoaml0
KSkgeworICAgICAgICAgICAgR2V0QnlJZENhc2UmIGdldENhc2UgPSBhdChiaW5hcnlTd2l0Y2gu
Y2FzZUluZGV4KCkpOworICAgICAgICAgICAgZ2V0Q2FzZS5nZW5lcmF0ZShzdGF0ZSk7CisgICAg
ICAgIH0KKyAgICAgICAgc3RhdGUuZmFpbHVyZS5hcHBlbmQoYmluYXJ5U3dpdGNoLmZhbGxUaHJv
dWdoKCkpOworICAgIH0KKworICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMoKSkg
eworICAgICAgICBzdGF0ZS5mYWlsdXJlLmxpbmsoJmppdCk7CisgICAgICAgIHN0YXRlLnJlc3Rv
cmVTY3JhdGNoKCk7CisgICAgICAgIHN0YXRlLmZhaWx1cmUgPSBqaXQuanVtcCgpOworICAgIH0K
KworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcih2bSwgaml0LCBjb2RlQmxvY2ssIEpJVENvbXBp
bGF0aW9uQ2FuRmFpbCk7CisgICAgaWYgKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkK
KyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOworCisgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIHN1Y2Nlc3NMYWJlbCA9CisgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSk7Cisg
ICAgICAgIAorICAgIGxpbmtCdWZmZXIubGluayhzdGF0ZS5zdWNjZXNzLCBzdWNjZXNzTGFiZWwp
OworCisgICAgbGlua0J1ZmZlci5saW5rKAorICAgICAgICBzdGF0ZS5mYWlsdXJlLAorICAgICAg
ICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRj
aC5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7CisgICAgCisgICAgZm9yIChhdXRvIGNhbGxiYWNrIDog
c3RhdGUuY2FsbGJhY2tzKQorICAgICAgICBjYWxsYmFjayhsaW5rQnVmZmVyKTsKKyAgICAKKyAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZSA9IEZJTkFMSVpFX0NPREVfRk9SKAorICAgICAg
ICBjb2RlQkxvY2ssIGxpbmtCdWZmZXIsCisgICAgICAgICgiJXMiLCB0b0NTdHJpbmcoIkdldCBh
Y2Nlc3Mgc3R1YiBmb3IgIiwgKmNvZGVCbG9jaywgIiAiLCBzdHViSW5mby5jb2RlT3JpZ2luLCAi
IHdpdGggcmV0dXJuIHBvaW50ICIsIHN1Y2Nlc3NMYWJlbCwgIjogIiwgKnRoaXMpKSk7CisKKyAg
ICBib29sIGRvZXNDYWxscyA9IGZhbHNlOworICAgIGZvciAoYXV0byBlbnRyeSA6IG1fbGlzdCkK
KyAgICAgICAgZG9lc0NhbGxzIHw9IGVudHJ5LT5kb2VzQ2FsbHMoKTsKKyAgICAKKyAgICBtX3N0
dWJSb3V0aW5lID0gY3JlYXRlSklUU3R1YlJvdXRpbmUoY29kZSwgdm0sIGNvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCksIGRvZXNDYWxscyk7CisgICAgbV93YXRjaHBvaW50cyA9IHN0ZDo6bW92
ZShzdGF0ZS53YXRjaHBvaW50cyk7CisgICAgcmV0dXJuIGNvZGUuY29kZSgpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKIAorbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7
CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBY2Nlc3NDYXNlOjpBY2Nl
c3NUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBBY2Nlc3NDYXNl
OjpMb2FkOgorICAgICAgICBvdXQucHJpbnQoIkxvYWQiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgQWNjZXNzQ2FzZTo6VHJhbnNpdGlvbjoKKyAgICAgICAgb3V0LnByaW50KCJUcmFuc2l0
aW9uIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OlJlcGxhY2U6Cisg
ICAgICAgIG91dC5wcmludCgiUmVwbGFjZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBB
Y2Nlc3NDYXNlOjpNaXNzOgorICAgICAgICBvdXQucHJpbnQoIk1pc3MiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6R2V0dGVyOgorICAgICAgICBvdXQucHJpbnQoIkdl
dHRlciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpTZXR0ZXI6Cisg
ICAgICAgIG91dC5wcmludCgiU2V0dGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFj
Y2Vzc0Nhc2U6OkN1c3RvbUdldHRlcjoKKyAgICAgICAgb3V0LnByaW50KCJDdXN0b21HZXR0ZXIi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6Q3VzdG9tU2V0dGVyOgor
ICAgICAgICBvdXQucHJpbnQoIkN1c3RvbVNldHRlciIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBBY2Nlc3NDYXNlOjpJbkhpdDoKKyAgICAgICAgb3V0LnByaW50KCJJbkhpdCIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbk1pc3M6CisgICAgICAgIG91dC5w
cmludCgiSW5NaXNzIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwogI2VuZGlmIC8v
IEVOQUJMRShKSVQpCiAKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Bv
bHltb3JwaGljQWNjZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgJKHJldmlzaW9uIDE4OTMyNCkJKGZyb20gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuaDoxODkzMjQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBvbHltb3JwaGljR2V0QnlJZExp
c3RfaAorI2RlZmluZSBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0X2gKKworI2lmIEVOQUJMRShKSVQp
CisKKyNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIK
KyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgorI2luY2x1ZGUgIk9wY29k
ZS5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
bmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVCbG9jazsKK3N0cnVjdCBTdHJ1Y3R1cmVTdHVi
SW5mbzsKKworY2xhc3MgR2V0QnlJZEFjY2VzcyB7CitwdWJsaWM6CisgICAgZW51bSBBY2Nlc3NU
eXBlIHsKKyAgICAgICAgSW52YWxpZCwKKyAgICAgICAgU2ltcGxlSW5saW5lLCAvLyBUaGlzIGlz
IHRoZSBwYXRjaGVkIGlubGluZSBhY2Nlc3MuCisgICAgICAgIFNpbXBsZVN0dWIsIC8vIFRoaXMg
aXMgYSBzdHViLgorICAgICAgICBXYXRjaGVkU3R1YiwKKyAgICAgICAgR2V0dGVyLAorICAgICAg
ICBDdXN0b21HZXR0ZXIsCisgICAgICAgIFNpbXBsZU1pc3MsCisgICAgfTsKKyAgICAKKyAgICBH
ZXRCeUlkQWNjZXNzKCkKKyAgICAgICAgOiBtX3R5cGUoSW52YWxpZCkKKyAgICB7CisgICAgfQor
ICAgIAorICAgIEdldEJ5SWRBY2Nlc3MoCisgICAgICAgIFZNJiwgSlNDZWxsKiBvd25lciwgQWNj
ZXNzVHlwZSwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4sIFN0cnVjdHVyZSosCisgICAgICAg
IGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0KCkpOworICAgIAorICAgIH5HZXRCeUlkQWNjZXNzKCk7CisgICAgCisgICAgc3RhdGlj
IEdldEJ5SWRBY2Nlc3MgZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFN0cnVjdHVyZVN0dWJJbmZvJik7
CisgICAgCisgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSAhPSBJbnZhbGlk
OyB9CisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQorICAg
IAorICAgIEFjY2Vzc1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIAor
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0
KCk7IH0KKyAgICAKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0
aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0KKyAgICAKKyAgICBKSVRT
dHViUm91dGluZSogc3R1YlJvdXRpbmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlz
U2V0KCkpOworICAgICAgICByZXR1cm4gbV9zdHViUm91dGluZS5nZXQoKTsKKyAgICB9CisgICAg
CisgICAgYm9vbCBkb2VzQ2FsbHMoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gR2V0dGVyIHx8
IHR5cGUoKSA9PSBDdXN0b21HZXR0ZXI7IH0KKyAgICAKKyAgICBib29sIHZpc2l0V2VhayhWTSYp
IGNvbnN0OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7CisgICAgCisg
ICAgQWNjZXNzVHlwZSBtX3R5cGU7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJ1
Y3R1cmU7CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7Cisg
ICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBtX3N0dWJSb3V0aW5lOworfTsKKworY2xhc3MgUG9s
eW1vcnBoaWNHZXRCeUlkTGlzdCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJs
aWM6CisgICAgLy8gRWl0aGVyIGNyZWF0ZXMgYSBuZXcgcG9seW1vcnBoaWMgZ2V0IGxpc3QsIG9y
IHJldHVybnMgdGhlIG9uZSB0aGF0IGlzIGFscmVhZHkgaW4KKyAgICAvLyBwbGFjZS4KKyAgICBz
dGF0aWMgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogZnJvbShTdHJ1Y3R1cmVTdHViSW5mbyYpOwor
ICAgIAorICAgIH5Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0KCk7CisgICAgCisgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIGN1cnJlbnRTbG93UGF0aFRhcmdldChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8pIGNvbnN0OworICAgIAorICAgIHZvaWQgYWRkQWNjZXNzKGNvbnN0IEdldEJ5SWRBY2Nl
c3MmKTsKKyAgICAKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2xpc3QuaXNF
bXB0eSgpOyB9CisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5zaXpl
KCk7IH0KKyAgICBib29sIGlzRnVsbCgpIGNvbnN0OworICAgIGJvb2wgaXNBbG1vc3RGdWxsKCkg
Y29uc3Q7IC8vIFRydWUgaWYgYWRkaW5nIGFuIGVsZW1lbnQgd291bGQgbWFrZSBpc0Z1bGwoKSB0
cnVlLgorICAgIGNvbnN0IEdldEJ5SWRBY2Nlc3MmIGF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0
dXJuIG1fbGlzdFtpXTsgfQorICAgIGNvbnN0IEdldEJ5SWRBY2Nlc3MmIG9wZXJhdG9yW10odW5z
aWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9saXN0W2ldOyB9CisgICAgCisgICAgYm9vbCBkaWRT
ZWxmUGF0Y2hpbmcoKSBjb25zdDsgLy8gQXJlIGFueSBvZiB0aGUgYWNjZXNzZXMgU2ltcGxlSW5s
aW5lPworICAgIAorICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgY29uc3Q7CisKK3ByaXZhdGU6Cisg
ICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKKyAgICAKKyAgICBQb2x5bW9ycGhpY0dldEJ5SWRM
aXN0KFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAgCisgICAgVmVjdG9yPEdldEJ5SWRBY2Nlc3Ms
IDI+IG1fbGlzdDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxF
KEpJVCkKKworI2VuZGlmIC8vIFBvbHltb3JwaGljR2V0QnlJZExpc3RfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAko
d29ya2luZyBjb3B5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3Jw
aGljQWNjZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDggQEAKICAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAogICovCiAKLSNpZm5kZWYgUG9seW1vcnBoaWNHZXRCeUlkTGlzdF9oCi0jZGVmaW5lIFBv
bHltb3JwaGljR2V0QnlJZExpc3RfaAorI2lmbmRlZiBQb2x5bW9ycGhpY0FjY2Vzc19oCisjZGVm
aW5lIFBvbHltb3JwaGljQWNjZXNzX2gKIAogI2lmIEVOQUJMRShKSVQpCiAKQEAgLTM4LDk2ICsz
OCwyMzggQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBQb2x5
bW9ycGhpY0FjY2VzczsKIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbzsKIAotY2xhc3MgR2V0QnlJ
ZEFjY2VzcyB7CitzdHJ1Y3QgQWNjZXNzR2VuZXJhdGlvblN0YXRlOworCitjbGFzcyBBY2Nlc3ND
YXNlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBY2Nlc3NDYXNlKTsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBlbnVtIEFjY2Vzc1R5cGUgewotICAgICAg
ICBJbnZhbGlkLAotICAgICAgICBTaW1wbGVJbmxpbmUsIC8vIFRoaXMgaXMgdGhlIHBhdGNoZWQg
aW5saW5lIGFjY2Vzcy4KLSAgICAgICAgU2ltcGxlU3R1YiwgLy8gVGhpcyBpcyBhIHN0dWIuCi0g
ICAgICAgIFdhdGNoZWRTdHViLAorICAgICAgICBMb2FkLAorICAgICAgICBUcmFuc2l0aW9uLAor
ICAgICAgICBSZXBsYWNlLAorICAgICAgICBNaXNzLAogICAgICAgICBHZXR0ZXIsCisgICAgICAg
IFNldHRlciwKICAgICAgICAgQ3VzdG9tR2V0dGVyLAotICAgICAgICBTaW1wbGVNaXNzLAorICAg
ICAgICBDdXN0b21TZXR0ZXIsCisgICAgICAgIEluSGl0LAorICAgICAgICBJbk1pc3MKICAgICB9
OwotICAgIAotICAgIEdldEJ5SWRBY2Nlc3MoKQotICAgICAgICA6IG1fdHlwZShJbnZhbGlkKQor
CisgICAgc3RhdGljIGJvb2wgaXNHZXQoQWNjZXNzVHlwZSB0eXBlKQogICAgIHsKKyAgICAgICAg
c3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgSW52YWxpZDoKKyAgICAgICAgY2FzZSBUcmFu
c2l0aW9uOgorICAgICAgICBjYXNlIFJlcGxhY2U6CisgICAgICAgIGNhc2UgU2V0dGVyOgorICAg
ICAgICBjYXNlIEN1c3RvbVNldHRlcjoKKyAgICAgICAgY2FzZSBJbkhpdDoKKyAgICAgICAgY2Fz
ZSBJbk1pc3M6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgTG9hZDoK
KyAgICAgICAgY2FzZSBNaXNzOgorICAgICAgICBjYXNlIEdldHRlcjoKKyAgICAgICAgY2FzZSBD
dXN0b21HZXR0ZXI6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQogICAgIH0K
LSAgICAKLSAgICBHZXRCeUlkQWNjZXNzKAotICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIEFj
Y2Vzc1R5cGUsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+LCBTdHJ1Y3R1cmUqLAorCisgICAg
c3RhdGljIGJvb2wgaXNQdXQoQWNjZXNzVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgICAgIGNhc2UgSW52YWxpZDoKKyAgICAgICAgY2FzZSBMb2FkOgorICAg
ICAgICBjYXNlIE1pc3M6CisgICAgICAgIGNhc2UgR2V0dGVyOgorICAgICAgICBjYXNlIEN1c3Rv
bUdldHRlcjoKKyAgICAgICAgY2FzZSBJbkhpdDoKKyAgICAgICAgY2FzZSBJbk1pc3M6CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgVHJhbnNpdGlvbjoKKyAgICAgICAg
Y2FzZSBSZXBsYWNlOgorICAgICAgICBjYXNlIFNldHRlcjoKKyAgICAgICAgY2FzZSBDdXN0b21T
ZXR0ZXI6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHN0YXRpYyBib29sIGlzSW4oQWNjZXNzVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgICAgIGNhc2UgSW52YWxpZDoKKyAgICAgICAgY2FzZSBMb2FkOgorICAg
ICAgICBjYXNlIE1pc3M6CisgICAgICAgIGNhc2UgR2V0dGVyOgorICAgICAgICBjYXNlIEN1c3Rv
bUdldHRlcjoKKyAgICAgICAgY2FzZSBUcmFuc2l0aW9uOgorICAgICAgICBjYXNlIFJlcGxhY2U6
CisgICAgICAgIGNhc2UgU2V0dGVyOgorICAgICAgICBjYXNlIEN1c3RvbVNldHRlcjoKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBJbkhpdDoKKyAgICAgICAgY2FzZSBJ
bk1pc3M6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBnZXQoCisgICAgICAgIFZNJiwgSlNDZWxsKiBv
d25lciwgQWNjZXNzVHlwZSwgUHJvcGVydHlPZmZzZXQsIFN0cnVjdHVyZSosCisgICAgICAgIGNv
bnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0KCksCisgICAgICAgIGJvb2wgdmlhUHJveHkgPSBmYWxzZSwKKyAgICAgICAgV2F0Y2hwb2lu
dFNldCogYWRkaXRpb25hbFNldCA9IG51bGxwdHIsCisgICAgICAgIFByb3BlcnR5U2xvdDo6R2V0
VmFsdWVGdW5jID0gbnVsbHB0cik7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4g
cmVwbGFjZSgKKyAgICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3ND
YXNlPiB0cmFuc2l0aW9uKAorICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSog
b2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0LAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCgpKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNl
PiBzZXR0ZXIoCisgICAgICAgIFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgU3RydWN0
dXJlKiwgUHJvcGVydHlPZmZzZXQsCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0JiwgUHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmMpOworCisgICAgc3RkOjp1bmlx
dWVfcHRyPEFjY2Vzc0Nhc2U+IGluKAorICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vz
c1R5cGUsIFN0cnVjdHVyZSogc3RydWN0dXJlLAogICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpKTsKICAgICAKLSAg
ICB+R2V0QnlJZEFjY2VzcygpOworICAgIH5BY2Nlc3NDYXNlKCk7CiAgICAgCi0gICAgc3RhdGlj
IEdldEJ5SWRBY2Nlc3MgZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFN0cnVjdHVyZVN0dWJJbmZvJik7
CisgICAgc3RhdGljIEFjY2Vzc0Nhc2UgZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFZNJiwgSlNDZWxs
KiBvd25lciwgU3RydWN0dXJlU3R1YkluZm8mKTsKICAgICAKICAgICBib29sIGlzU2V0KCkgY29u
c3QgeyByZXR1cm4gbV90eXBlICE9IEludmFsaWQ7IH0KICAgICBib29sIG9wZXJhdG9yISgpIGNv
bnN0IHsgcmV0dXJuICFpc1NldCgpOyB9CiAgICAgCiAgICAgQWNjZXNzVHlwZSB0eXBlKCkgY29u
c3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3Qg
eyByZXR1cm4gbV9vZmZzZXQ7IH0KKyAgICBib29sIHZpYVByb3h5KCkgY29uc3QgeyByZXR1cm4g
bV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPnZpYVByb3h5IDogZmFsc2U7IH0KICAgICAKLSAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlLmdldCgpOyB9
Ci0gICAgCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9Ci0gICAgCi0gICAgSklUU3R1YlJv
dXRpbmUqIHN0dWJSb3V0aW5lKCkgY29uc3QKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNv
bnN0CiAgICAgewotICAgICAgICBBU1NFUlQoaXNTZXQoKSk7Ci0gICAgICAgIHJldHVybiBtX3N0
dWJSb3V0aW5lLmdldCgpOworICAgICAgICBpZiAobV9raW5kID09IFRyYW5zaXRpb24pCisgICAg
ICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKTsKKyAgICAgICAgcmV0dXJu
IG1fc3RydWN0dXJlLmdldCgpOworICAgIH0KKyAgICBib29sIGd1YXJkZWRCeVN0cnVjdHVyZUNo
ZWNrKCkgY29uc3QgeyByZXR1cm4gIXZpYVByb3h5KCk7IH0KKworICAgIFN0cnVjdHVyZSogbmV3
U3RydWN0dXJlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2tpbmQgPT0gVHJhbnNp
dGlvbik7CisgICAgICAgIHJldHVybiBtX3N0cnVjdHVyZS5nZXQoKTsKICAgICB9CiAgICAgCi0g
ICAgYm9vbCBkb2VzQ2FsbHMoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gR2V0dGVyIHx8IHR5
cGUoKSA9PSBDdXN0b21HZXR0ZXI7IH0KKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBj
b25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQorCisgICAgV2F0
Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCgpIGNvbnN0IHsgbV9yYXJlRGF0YSA/IG1fcmFyZURh
dGEtPmFkZGl0aW9uYWxTZXQuZ2V0KCkgOiBudWxscHRyOyB9CiAgICAgCi0gICAgYm9vbCB2aXNp
dFdlYWsoVk0mKSBjb25zdDsKKyAgICBib29sIGRvZXNDYWxscygpIGNvbnN0IHsgcmV0dXJuIHR5
cGUoKSA9PSBHZXR0ZXIgfHwgdHlwZSgpID09IEN1c3RvbUdldHRlcjsgfQogCisgICAgLy8gSWYg
dGhpcyBtZXRob2QgcmV0dXJucyB0cnVlLCB0aGVuIGl0J3MgYSBnb29kIGlkZWEgdG8gcmVtb3Zl
ICdvdGhlcicgZnJvbSB0aGUgYWNjZXNzIG9uY2UgJ3RoaXMnCisgICAgLy8gaXMgYWRkZWQuIFRo
aXMgbWV0aG9kIGFzc3VtZXMgdGhhdCBpbiBjYXNlIG9mIGNvbnRyYWRpY3Rpb25zLCAndGhpcycg
cmVwcmVzZW50cyBhIG5ld2VyLCBhbmQgc28KKyAgICAvLyBtb3JlIHVzZWZ1bCwgdHJ1dGguIFRo
aXMgbWV0aG9kIGNhbiBiZSBjb25zZXJ2YXRpdmU7IGl0IHdpbGwgcmV0dXJuIGZhbHNlIHdoZW4g
aXQgZG91YnQuCisgICAgYm9vbCBjYW5SZXBsYWNlKGNvbnN0IEFjY2Vzc0Nhc2UmIG90aGVyKTsK
KworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKyAgICAKIHByaXZhdGU6
CiAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKKyAgICBmcmllbmQgY2xhc3MgUG9seW1vcnBo
aWNBY2Nlc3M7CisKKyAgICBBY2Nlc3NDYXNlKCk7CisKKyAgICBib29sIHZpc2l0V2VhayhWTSYp
IGNvbnN0OworCisgICAgLy8gRmFsbCB0aHJvdWdoIG9uIHN1Y2Nlc3MuIFR3byBraW5kcyBvZiBm
YWlsdXJlcyBhcmUgc3VwcG9ydGVkOiBmYWxsLXRocm91Z2gsIHdoaWNoIG1lYW5zIHRoYXQgd2UK
KyAgICAvLyBzaG91bGQgdHJ5IGEgZGlmZmVyZW50IGNhc2U7IGFuZCBmYWlsdXJlLCB3aGljaCBt
ZWFucyB0aGF0IHRoaXMgd2FzIHRoZSByaWdodCBjYXNlIGJ1dCBpdCBuZWVkcworICAgIC8vIGhl
bHAgZnJvbSB0aGUgc2xvdyBwYXRoLgorICAgIHZvaWQgZ2VuZXJhdGVXaXRoR3VhcmQoQWNjZXNz
R2VuZXJhdGlvblN0YXRlJiwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCYgZmFsbFRocm91Z2gpOwor
CisgICAgLy8gRmFsbCB0aHJvdWdoIG9uIHN1Y2Nlc3MsIGFkZCBhIGp1bXAgdG8gdGhlIGZhaWx1
cmUgbGlzdCBvbiBmYWlsdXJlLgorICAgIHZvaWQgZ2VuZXJhdGUoQWNjZXNzR2VuZXJhdGlvblN0
YXRlJik7CiAgICAgCiAgICAgQWNjZXNzVHlwZSBtX3R5cGU7CisgICAgUHJvcGVydHlPZmZzZXQg
bV9vZmZzZXQ7CisKKyAgICAvLyBVc3VhbGx5IHRoaXMgaXMgdGhlIHN0cnVjdHVyZSB0aGF0IHdl
IGV4cGVjdCB0aGUgYmFzZSBvYmplY3QgdG8gaGF2ZS4gQnV0LCB0aGlzIGlzIHRoZSAqbmV3Kgor
ICAgIC8vIHN0cnVjdHVyZSBmb3IgYSB0cmFuc2l0aW9uIGFuZCB3ZSByZWx5IG9uIHRoZSBmYWN0
IHRoYXQgaXQgaGFzIGEgc3Ryb25nIHJlZmVyZW5jZSB0byB0aGUgb2xkCisgICAgLy8gc3RydWN0
dXJlLiBGb3IgcHJveGllcywgdGhpcyBpcyB0aGUgc3RydWN0dXJlIG9mIHRoZSBvYmplY3QgYmVo
aW5kIHRoZSBwcm94eS4KICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cnVjdHVyZTsK
KwogICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OwotICAgIFJl
ZlB0cjxKSVRTdHViUm91dGluZT4gbV9zdHViUm91dGluZTsKKworICAgIGNsYXNzIFJhcmVEYXRh
IHsKKyAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgcHVibGljOgorICAgICAg
ICBib29sIHZpYVByb3h5OworICAgICAgICBSZWZQdHI8V2F0Y2hwb2ludFNldD4gYWRkaXRpb25h
bFNldDsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rSW5mbz4gY2FsbExpbmtJbmZv
OworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVu
YyBnZXR0ZXI7CisgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyBzZXR0
ZXI7CisgICAgICAgICAgICB2b2lkKiBvcGFxdWU7CisgICAgICAgIH0gY3VzdG9tQWNjZXNzb3I7
CisgICAgfTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxSYXJlRGF0YT4gbV9yYXJlRGF0YTsKIH07
CiAKLWNsYXNzIFBvbHltb3JwaGljR2V0QnlJZExpc3QgeworY2xhc3MgUG9seW1vcnBoaWNBY2Nl
c3MgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBvbHltb3JwaGljQWNjZXNzKTsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICAvLyBFaXRoZXIgY3JlYXRlcyBh
IG5ldyBwb2x5bW9ycGhpYyBnZXQgbGlzdCwgb3IgcmV0dXJucyB0aGUgb25lIHRoYXQgaXMgYWxy
ZWFkeSBpbgogICAgIC8vIHBsYWNlLgotICAgIHN0YXRpYyBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0
KiBmcm9tKFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxQ
b2x5bW9ycGhpY0FjY2Vzcz4gZnJvbShTdHJ1Y3R1cmVTdHViSW5mbyYpOwogICAgIAotICAgIH5Q
b2x5bW9ycGhpY0dldEJ5SWRMaXN0KCk7Ci0gICAgCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IGN1cnJlbnRTbG93UGF0aFRhcmdldChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pIGNvbnN0
OwotICAgIAotICAgIHZvaWQgYWRkQWNjZXNzKGNvbnN0IEdldEJ5SWRBY2Nlc3MmKTsKKyAgICB+
UG9seW1vcnBoaWNBY2Nlc3MoKTsKKworICAgIC8vIFRoaXMgbWF5IHJldHVybiBudWxsLCBpbiB3
aGljaCBjYXNlIHRoZSBvbGQgc3R1YiByb3V0aW5lIGlzIGxlZnQgaW50YWN0LgorICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciByZWdlbmVyYXRlV2l0aENhc2UoCisgICAgICAgIFZNJiwgQ29kZUJs
b2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBjb25zdCBJZGVudGlmaWVyJiwgc3RkOjp1bmlxdWVf
cHRyPEFjY2Vzc0Nhc2U+KTsKICAgICAKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVy
biBtX2xpc3QuaXNFbXB0eSgpOyB9CiAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbGlzdC5zaXplKCk7IH0KICAgICBib29sIGlzRnVsbCgpIGNvbnN0OwogICAgIGJvb2wgaXNB
bG1vc3RGdWxsKCkgY29uc3Q7IC8vIFRydWUgaWYgYWRkaW5nIGFuIGVsZW1lbnQgd291bGQgbWFr
ZSBpc0Z1bGwoKSB0cnVlLgotICAgIGNvbnN0IEdldEJ5SWRBY2Nlc3MmIGF0KHVuc2lnbmVkIGkp
IGNvbnN0IHsgcmV0dXJuIG1fbGlzdFtpXTsgfQotICAgIGNvbnN0IEdldEJ5SWRBY2Nlc3MmIG9w
ZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9saXN0W2ldOyB9Ci0gICAgCi0g
ICAgYm9vbCBkaWRTZWxmUGF0Y2hpbmcoKSBjb25zdDsgLy8gQXJlIGFueSBvZiB0aGUgYWNjZXNz
ZXMgU2ltcGxlSW5saW5lPwotICAgIAorICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIGF0KHVuc2lnbmVk
IGkpIGNvbnN0IHsgcmV0dXJuICptX2xpc3RbaV07IH0KKyAgICBjb25zdCBBY2Nlc3NDYXNlJiBv
cGVyYXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuICptX2xpc3RbaV07IH0KKworICAg
IC8vIElmIHRoaXMgcmV0dXJucyBmYWxzZSB0aGVuIHdlIGFyZSByZXF1ZXN0aW5nIGEgcmVzZXQg
b2YgdGhlIG93bmluZyBTdHJ1Y3R1cmVTdHViSW5mby4KICAgICBib29sIHZpc2l0V2VhayhWTSYp
IGNvbnN0OwogCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworCiBwcml2
YXRlOgorICAgIGZyaWVuZCBjbGFzcyBBY2Nlc3NDYXNlOworICAgIGZyaWVuZCBjbGFzcyBBY2Nl
c3NHZW5lcmF0aW9uU3RhdGU7CiAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKICAgICAKLSAg
ICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAgUG9seW1v
cnBoaWNBY2Nlc3MoU3RydWN0dXJlU3R1YkluZm8mKTsKKworICAgIFZlY3RvcjxzdGQ6OnVuaXF1
ZV9wdHI8QWNjZXNzQ2FzZT4+IGFkZEFjY2Vzc0Nhc2Uoc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nh
c2U+IHRvQWRkKTsKKyAgICB2b2lkIHVuZG9BZGRBY2Nlc3NDYXNlKFZlY3RvcjxzdGQ6OnVuaXF1
ZV9wdHI8QWNjZXNzQ2FzZT4+IHJlcGxhY2VkKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIg
cmVnZW5lcmF0ZShWTSYsIENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgY29uc3QgSWRl
bnRpZmllciYpOwogICAgIAotICAgIFZlY3RvcjxHZXRCeUlkQWNjZXNzLCAyPiBtX2xpc3Q7Cisg
ICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiwgMj4gbV9saXN0OworICAgIFJl
ZlB0cjxKSVRTdHViUm91dGluZT4gbV9zdHViUm91dGluZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvPiBtX3dhdGNocG9pbnRzOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCiAKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwo
UHJpbnRTdHJlYW0mLCBKU0M6OkFjY2Vzc0Nhc2U6OkFjY2Vzc1R5cGUpOworCit9IC8vIG5hbWVz
cGFjZSBXVEYKKwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKLSNlbmRpZiAvLyBQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0X2gKKyNlbmRpZiAvLyBQb2x5bW9ycGhpY0FjY2Vzc19oCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNH
ZXRCeUlkTGlzdC5jcHAJKHJldmlzaW9uIDE4OTMyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSwxNTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUG9seW1vcnBoaWNHZXRC
eUlkTGlzdC5oIgotCi0jaWYgRU5BQkxFKEpJVCkKLQotI2luY2x1ZGUgIkNvZGVCbG9jay5oIgot
I2luY2x1ZGUgIkhlYXAuaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3Ry
dWN0dXJlU3R1YkluZm8uaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLUdldEJ5SWRBY2Nlc3M6Okdl
dEJ5SWRBY2Nlc3MoCi0gICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5cGUs
IFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lLAotICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0
KQotICAgIDogbV90eXBlKHR5cGUpCi0gICAgLCBtX3N0cnVjdHVyZSh2bSwgb3duZXIsIHN0cnVj
dHVyZSkKLSAgICAsIG1fY29uZGl0aW9uU2V0KGNvbmRpdGlvblNldCkKLSAgICAsIG1fc3R1YlJv
dXRpbmUoc3R1YlJvdXRpbmUpCi17Ci19Ci0KLUdldEJ5SWRBY2Nlc3M6On5HZXRCeUlkQWNjZXNz
KCkKLXsKLX0KLQotR2V0QnlJZEFjY2VzcyBHZXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0dXJlU3R1
YkluZm8oU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBpbml0aWFsU2xvd1BhdGggPQotICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsK
LSAgICAKLSAgICBHZXRCeUlkQWNjZXNzIHJlc3VsdDsKLSAgICAKLSAgICBSRUxFQVNFX0FTU0VS
VChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZik7Ci0gICAgCi0g
ICAgcmVzdWx0Lm1fdHlwZSA9IFNpbXBsZUlubGluZTsKLSAgICByZXN1bHQubV9zdHJ1Y3R1cmUu
Y29weUZyb20oc3R1YkluZm8udS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlKTsKLSAg
ICByZXN1bHQubV9zdHViUm91dGluZSA9IEpJVFN0dWJSb3V0aW5lOjpjcmVhdGVTZWxmTWFuYWdl
ZFJvdXRpbmUoaW5pdGlhbFNsb3dQYXRoKTsKLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci1ib29sIEdldEJ5SWRBY2Nlc3M6OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0Ci17Ci0gICAgaWYg
KG1fc3RydWN0dXJlICYmICFIZWFwOjppc01hcmtlZChtX3N0cnVjdHVyZS5nZXQoKSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIW1fY29uZGl0aW9uU2V0LmFyZVN0aWxsTGl2ZSgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFtX3N0dWJSb3V0aW5lLT52aXNpdFdl
YWsodm0pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVBv
bHltb3JwaGljR2V0QnlJZExpc3Q6OlBvbHltb3JwaGljR2V0QnlJZExpc3QoU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvKQotewotICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vz
c191bnNldCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIG1fbGlzdC5hcHBlbmQoR2V0QnlJ
ZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKHN0dWJJbmZvKSk7Ci19Ci0KLVBvbHltb3Jw
aGljR2V0QnlJZExpc3QqIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmZyb20oU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvKQotewotICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vz
c19nZXRfYnlfaWRfbGlzdCkKLSAgICAgICAgcmV0dXJuIHN0dWJJbmZvLnUuZ2V0QnlJZExpc3Qu
bGlzdDsKLSAgICAKLSAgICBBU1NFUlQoCi0gICAgICAgIHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0g
YWNjZXNzX2dldF9ieV9pZF9zZWxmCi0gICAgICAgIHx8IHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0g
YWNjZXNzX3Vuc2V0KTsKLSAgICAKLSAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiByZXN1bHQg
PSBuZXcgUG9seW1vcnBoaWNHZXRCeUlkTGlzdChzdHViSW5mbyk7Ci0gICAgCi0gICAgc3R1Yklu
Zm8uaW5pdEdldEJ5SWRMaXN0KHJlc3VsdCk7Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6flBvbHltb3JwaGljR2V0QnlJZExpc3QoKSB7IH0K
LQotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmN1cnJlbnRT
bG93UGF0aFRhcmdldCgKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pIGNvbnN0Ci17
Ci0gICAgaWYgKGlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2Up
OwotICAgIHJldHVybiBtX2xpc3QubGFzdCgpLnN0dWJSb3V0aW5lKCktPmNvZGUoKS5jb2RlKCk7
Ci19Ci0KLXZvaWQgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6YWRkQWNjZXNzKGNvbnN0IEdldEJ5
SWRBY2Nlc3MmIGFjY2VzcykKLXsKLSAgICBBU1NFUlQoIWlzRnVsbCgpKTsKLSAgICAvLyBNYWtl
IHN1cmUgdGhhdCB0aGUgcmVzaXppbmcgb3B0aW1pemVzIGZvciBzcGFjZSwgbm90IHRpbWUuCi0g
ICAgbV9saXN0LnJlc2l6ZVRvRml0KG1fbGlzdC5zaXplKCkgKyAxKTsKLSAgICBtX2xpc3QubGFz
dCgpID0gYWNjZXNzOwotfQotCi1ib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmlzRnVsbCgp
IGNvbnN0Ci17Ci0gICAgQVNTRVJUKHNpemUoKSA8PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJ
WkUpOwotICAgIHJldHVybiBzaXplKCkgPT0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFOwot
fQotCi1ib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmlzQWxtb3N0RnVsbCgpIGNvbnN0Ci17
Ci0gICAgQVNTRVJUKHNpemUoKSA8PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpOwotICAg
IHJldHVybiBzaXplKCkgPj0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIC0gMTsKLX0KLQot
Ym9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpkaWRTZWxmUGF0Y2hpbmcoKSBjb25zdAotewot
ICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUoKTsgaS0tOykgewotICAgICAgICBpZiAoYXQoaSku
dHlwZSgpID09IEdldEJ5SWRBY2Nlc3M6OlNpbXBsZUlubGluZSkKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUG9seW1vcnBoaWNH
ZXRCeUlkTGlzdDo6dmlzaXRXZWFrKFZNJiB2bSkgY29uc3QKLXsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSBzaXplKCk7IGktLTspIHsKLSAgICAgICAgaWYgKCFhdChpKS52aXNpdFdlYWsodm0pKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotCi0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0
QnlJZExpc3QuaAkocmV2aXNpb24gMTg5MzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMzMg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jaWZuZGVmIFBvbHltb3JwaGljR2V0QnlJZExpc3RfaAotI2RlZmluZSBQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0X2gKLQotI2lmIEVOQUJMRShKSVQpCi0KLSNpbmNsdWRlICJDb2RlT3JpZ2lu
LmgiCi0jaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKLSNpbmNsdWRlICJPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldC5oIgotI2luY2x1ZGUgIk9wY29kZS5oIgotI2luY2x1ZGUgIlN0cnVjdHVy
ZS5oIgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNz
IENvZGVCbG9jazsKLXN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbzsKLQotY2xhc3MgR2V0QnlJZEFj
Y2VzcyB7Ci1wdWJsaWM6Ci0gICAgZW51bSBBY2Nlc3NUeXBlIHsKLSAgICAgICAgSW52YWxpZCwK
LSAgICAgICAgU2ltcGxlSW5saW5lLCAvLyBUaGlzIGlzIHRoZSBwYXRjaGVkIGlubGluZSBhY2Nl
c3MuCi0gICAgICAgIFNpbXBsZVN0dWIsIC8vIFRoaXMgaXMgYSBzdHViLgotICAgICAgICBXYXRj
aGVkU3R1YiwKLSAgICAgICAgR2V0dGVyLAotICAgICAgICBDdXN0b21HZXR0ZXIsCi0gICAgICAg
IFNpbXBsZU1pc3MsCi0gICAgfTsKLSAgICAKLSAgICBHZXRCeUlkQWNjZXNzKCkKLSAgICAgICAg
OiBtX3R5cGUoSW52YWxpZCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIEdldEJ5SWRBY2Nlc3Mo
Ci0gICAgICAgIFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgUGFzc1JlZlB0cjxKSVRT
dHViUm91dGluZT4sIFN0cnVjdHVyZSosCi0gICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCkpOwotICAgIAotICAgIH5H
ZXRCeUlkQWNjZXNzKCk7Ci0gICAgCi0gICAgc3RhdGljIEdldEJ5SWRBY2Nlc3MgZnJvbVN0cnVj
dHVyZVN0dWJJbmZvKFN0cnVjdHVyZVN0dWJJbmZvJik7Ci0gICAgCi0gICAgYm9vbCBpc1NldCgp
IGNvbnN0IHsgcmV0dXJuIG1fdHlwZSAhPSBJbnZhbGlkOyB9Ci0gICAgYm9vbCBvcGVyYXRvciEo
KSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQotICAgIAotICAgIEFjY2Vzc1R5cGUgdHlwZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQotICAgIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
KCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7IH0KLSAgICAKLSAgICBjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4g
bV9jb25kaXRpb25TZXQ7IH0KLSAgICAKLSAgICBKSVRTdHViUm91dGluZSogc3R1YlJvdXRpbmUo
KSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzU2V0KCkpOwotICAgICAgICByZXR1cm4g
bV9zdHViUm91dGluZS5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBkb2VzQ2FsbHMoKSBj
b25zdCB7IHJldHVybiB0eXBlKCkgPT0gR2V0dGVyIHx8IHR5cGUoKSA9PSBDdXN0b21HZXR0ZXI7
IH0KLSAgICAKLSAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OwotCi1wcml2YXRlOgotICAg
IGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7Ci0gICAgCi0gICAgQWNjZXNzVHlwZSBtX3R5cGU7Ci0g
ICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7Ci0gICAgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7Ci0gICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5l
PiBtX3N0dWJSb3V0aW5lOwotfTsKLQotY2xhc3MgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCB7Ci0g
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgLy8gRWl0aGVyIGNyZWF0
ZXMgYSBuZXcgcG9seW1vcnBoaWMgZ2V0IGxpc3QsIG9yIHJldHVybnMgdGhlIG9uZSB0aGF0IGlz
IGFscmVhZHkgaW4KLSAgICAvLyBwbGFjZS4KLSAgICBzdGF0aWMgUG9seW1vcnBoaWNHZXRCeUlk
TGlzdCogZnJvbShTdHJ1Y3R1cmVTdHViSW5mbyYpOwotICAgIAotICAgIH5Qb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0KCk7Ci0gICAgCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN1cnJlbnRTbG93
UGF0aFRhcmdldChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pIGNvbnN0OwotICAgIAotICAg
IHZvaWQgYWRkQWNjZXNzKGNvbnN0IEdldEJ5SWRBY2Nlc3MmKTsKLSAgICAKLSAgICBib29sIGlz
RW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2xpc3QuaXNFbXB0eSgpOyB9Ci0gICAgdW5zaWduZWQg
c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5zaXplKCk7IH0KLSAgICBib29sIGlzRnVsbCgp
IGNvbnN0OwotICAgIGJvb2wgaXNBbG1vc3RGdWxsKCkgY29uc3Q7IC8vIFRydWUgaWYgYWRkaW5n
IGFuIGVsZW1lbnQgd291bGQgbWFrZSBpc0Z1bGwoKSB0cnVlLgotICAgIGNvbnN0IEdldEJ5SWRB
Y2Nlc3MmIGF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdFtpXTsgfQotICAgIGNv
bnN0IEdldEJ5SWRBY2Nlc3MmIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4g
bV9saXN0W2ldOyB9Ci0gICAgCi0gICAgYm9vbCBkaWRTZWxmUGF0Y2hpbmcoKSBjb25zdDsgLy8g
QXJlIGFueSBvZiB0aGUgYWNjZXNzZXMgU2ltcGxlSW5saW5lPwotICAgIAotICAgIGJvb2wgdmlz
aXRXZWFrKFZNJikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIENvZGVCbG9j
azsKLSAgICAKLSAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KFN0cnVjdHVyZVN0dWJJbmZvJik7
Ci0gICAgCi0gICAgVmVjdG9yPEdldEJ5SWRBY2Nlc3MsIDI+IG1fbGlzdDsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQotI2VuZGlmIC8vIFBvbHlt
b3JwaGljR2V0QnlJZExpc3RfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHJldmlzaW9uIDE4OTMyNCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM2LDM3ICszNiwyMiBAQCBuYW1lc3BhY2UgSlNDIHsKICNpZiBFTkFC
TEUoSklUKQogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6ZGVyZWYoKQogewotICAgIHN3aXRjaCAo
YWNjZXNzVHlwZSkgewotICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9saXN0OiB7Ci0gICAgICAg
IGRlbGV0ZSB1LmdldEJ5SWRMaXN0Lmxpc3Q7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
Y2FzZSBhY2Nlc3NfcHV0X2J5X2lkX2xpc3Q6Ci0gICAgICAgIGRlbGV0ZSB1LnB1dEJ5SWRMaXN0
Lmxpc3Q7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIGFjY2Vzc19pbl9saXN0OiB7Ci0gICAg
ICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcG9seW1vcnBoaWNTdHJ1Y3R1cmVz
ID0gdS5pbkxpc3Quc3RydWN0dXJlTGlzdDsKLSAgICAgICAgZGVsZXRlIHBvbHltb3JwaGljU3Ry
dWN0dXJlczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlf
aWRfdHJhbnNpdGlvbl9ub3JtYWw6Ci0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRp
b25fZGlyZWN0OgotICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6YWRvcHRSYXdQ
b2ludGVyKHUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0KTsKLSAgICAgICAgdS5w
dXRCeUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQgPSBudWxscHRyOwotICAgICAgICByZXR1
cm47Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGY6Ci0gICAgY2FzZSBhY2Nlc3NfcHV0
X2J5X2lkX3JlcGxhY2U6Ci0gICAgY2FzZSBhY2Nlc3NfdW5zZXQ6Ci0gICAgICAgIC8vIFRoZXNl
IGluc3RydWN0aW9ucyBkb24ndCBoYXZlIHRvIHJlbGVhc2UgYW55IGFsbG9jYXRlZCBtZW1vcnkK
KyAgICBzd2l0Y2ggKGNhY2hlVHlwZSkgeworICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOgorICAg
ICAgICBkZWxldGUgdS5zdHViOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDYWNoZVR5cGU6
OlVuc2V0OgorICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKKyAgICBjYXNlIENhY2hl
VHlwZTo6UHV0QnlJZFJlcGxhY2UKICAgICAgICAgcmV0dXJuOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQorCisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQo
Q29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0gICAgaWYgKGFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vu
c2V0KQorICAgIGlmIChjYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpVbnNldCkKICAgICAgICAgcmV0
dXJuOwogICAgIAogICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKQEAgLTc0LDE4ICs1
OSwyMSBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpyZXNldChDb2RlQmxvY2sqCiAgICAgICAg
IC8vIG9mIHRoZSBDb2RlQmxvY2suCiAgICAgICAgIGRhdGFMb2coIkNsZWFyaW5nIHN0cnVjdHVy
ZSBjYWNoZSAoa2luZCAiLCBzdGF0aWNfY2FzdDxpbnQ+KGFjY2Vzc1R5cGUpLCAiKSBpbiAiLCBS
YXdQb2ludGVyKGNvZGVCbG9jayksICIuXG4iKTsKICAgICB9Ci0gICAgCi0gICAgaWYgKGlzR2V0
QnlJZEFjY2VzcyhzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihhY2Nlc3NUeXBlKSkpCisKKyAgICBz
d2l0Y2ggKGFjY2Vzc1R5cGUpIHsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldDoKICAgICAgICAg
cmVzZXRHZXRCeUlEKGNvZGVCbG9jaywgKnRoaXMpOwotICAgIGVsc2UgaWYgKGlzUHV0QnlJZEFj
Y2VzcyhzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihhY2Nlc3NUeXBlKSkpCisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0OgogICAgICAgICByZXNldFB1dEJ5SUQoY29kZUJs
b2NrLCAqdGhpcyk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzSW5BY2Nl
c3Moc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oYWNjZXNzVHlwZSkpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbjoKICAgICAgICAgcmVzZXRJbihjb2RlQmxvY2ssICp0
aGlzKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIAogICAgIGRlcmVmKCk7Ci0gICAgYWNj
ZXNzVHlwZSA9IGFjY2Vzc191bnNldDsKKyAgICBjYWNoZVR5cGUgPSBDYWNoZVR5cGU6OlVuc2V0
OwogICAgIHN0dWJSb3V0aW5lID0gbnVsbHB0cjsKICAgICB3YXRjaHBvaW50cyA9IG51bGxwdHI7
CiB9CkBAIC05Myw0MSArODEsMTggQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoQ29k
ZUJsb2NrKgogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbmNlcyhDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBWTSYgdm0gPSAqY29kZUJsb2NrLT52bSgpOwotICAg
IAotICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgewotICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9z
ZWxmOgotICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQodS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0
U3RydWN0dXJlLmdldCgpKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3Q6IHsKLSAgICAgICAgaWYgKHUuZ2V0QnlJZExp
c3QubGlzdC0+dmlzaXRXZWFrKHZtKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoK
LSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6Ci0gICAgICAgIGlm
IChIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLmdl
dCgpKQotICAgICAgICAgICAgJiYgSGVhcDo6aXNNYXJrZWQodS5wdXRCeUlkVHJhbnNpdGlvbi5z
dHJ1Y3R1cmUuZ2V0KCkpCi0gICAgICAgICAgICAmJiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dDo6ZnJvbVJhd1BvaW50ZXIodS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQpLmFy
ZVN0aWxsTGl2ZSgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFjZToKLSAgICAgICAgaWYgKEhlYXA6OmlzTWFya2Vk
KHUucHV0QnlJZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSkpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9saXN0
OgotICAgICAgICBpZiAodS5wdXRCeUlkTGlzdC5saXN0LT52aXNpdFdlYWsodm0pKQorCisgICAg
c3dpdGNoIChjYWNoZVR5cGUpIHsKKyAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJZFNlbGY6Cisg
ICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOgorICAgICAgICBpZiAoSGVhcDo6aXNN
YXJrZWQodS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpKSkKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBhY2Nlc3NfaW5fbGlzdDogewotICAg
ICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJl
cyA9IHUuaW5MaXN0LnN0cnVjdHVyZUxpc3Q7Ci0gICAgICAgIGlmIChwb2x5bW9ycGhpY1N0cnVj
dHVyZXMtPnZpc2l0V2Vhayh1LmluTGlzdC5saXN0U2l6ZSkpCisgICAgY2FzZSBDYWNoZVR5cGU6
OlN0dWI6CisgICAgICAgIGlmICh1LnN0dWItPnZpc2l0V2Vhayh2bSkpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIGJyZWFrOwotICAgIH0KICAgICBkZWZhdWx0OgotICAgICAgICAvLyBU
aGUgcmVzdCBvZiB0aGUgaW5zdHJ1Y3Rpb25zIGRvbid0IHJlcXVpcmUgcmVmZXJlbmNlcywgc28g
dGhlcmUgaXMgbm8gbmVlZCB0bwotICAgICAgICAvLyBkbyBhbnl0aGluZy4KICAgICAgICAgcmV0
dXJuOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDE4OTMyNCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKICNpbmNsdWRlICJP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgotI2luY2x1
ZGUgIlBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdC5oIgorI2luY2x1ZGUgIlBvbHltb3Jw
aGljQWNjZXNzLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKICNpbmNsdWRlICJTcGlsbFJl
Z2lzdGVyc01vZGUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKQEAgLTQyLDU3ICs0MiwyNSBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIEVOQUJMRShKSVQpCiAKLWNsYXNzIFBvbHltb3JwaGlj
R2V0QnlJZExpc3Q7Ci1jbGFzcyBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0OworY2xhc3MgUG9seW1v
cnBoaWNBY2Nlc3M7CiAKLWVudW0gQWNjZXNzVHlwZSB7Ci0gICAgYWNjZXNzX2dldF9ieV9pZF9z
ZWxmLAotICAgIGFjY2Vzc19nZXRfYnlfaWRfbGlzdCwKLSAgICBhY2Nlc3NfcHV0X2J5X2lkX3Ry
YW5zaXRpb25fbm9ybWFsLAotICAgIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Qs
Ci0gICAgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlLAotICAgIGFjY2Vzc19wdXRfYnlfaWRfbGlz
dCwKLSAgICBhY2Nlc3NfdW5zZXQsCi0gICAgYWNjZXNzX2luX2xpc3QKK2VudW0gY2xhc3MgQWNj
ZXNzVHlwZSA6IGludDhfdCB7CisgICAgR2V0LAorICAgIFB1dCwKKyAgICBJbgogfTsKIAotaW5s
aW5lIGJvb2wgaXNHZXRCeUlkQWNjZXNzKEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSkKLXsKLSAgICBz
d2l0Y2ggKGFjY2Vzc1R5cGUpIHsKLSAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZjoKLSAg
ICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfbGlzdDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLSAgICAKLWlubGluZSBi
b29sIGlzUHV0QnlJZEFjY2VzcyhBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUpCi17Ci0gICAgc3dpdGNo
IChhY2Nlc3NUeXBlKSB7Ci0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9y
bWFsOgotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdDoKLSAgICBj
YXNlIGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFjZToKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRf
bGlzdDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLX0KLQotaW5saW5lIGJvb2wgaXNJbkFjY2VzcyhBY2Nlc3NUeXBlIGFj
Y2Vzc1R5cGUpCi17Ci0gICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7Ci0gICAgY2FzZSBhY2Nlc3Nf
aW5fbGlzdDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLX0KK2VudW0gY2xhc3MgQ2FjaGVUeXBlIDogaW50OF90IHsKKyAg
ICBVbnNldCwKKyAgICBHZXRCeUlkU2VsZiwKKyAgICBQdXRCeUlkUmVwbGFjZSwKKyAgICBTdHVi
Cit9OwogCiBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewotICAgIFN0cnVjdHVyZVN0dWJJbmZv
KCkKLSAgICAgICAgOiBhY2Nlc3NUeXBlKGFjY2Vzc191bnNldCkKKyAgICBTdHJ1Y3R1cmVTdHVi
SW5mbyhBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUpCisgICAgICAgIDogYWNjZXNzVHlwZShhY2Nlc3NU
eXBlKQorICAgICAgICAsIGNhY2hlVHlwZShDYWNoZVR5cGU6OlVuc2V0KQogICAgICAgICAsIHNl
ZW4oZmFsc2UpCiAgICAgICAgICwgcmVzZXRCeUdDKGZhbHNlKQogICAgICAgICAsIHRvb2tTbG93
UGF0aChmYWxzZSkKQEAgLTEwMCw1MyArNjgsMjggQEAgc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZv
IHsKICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBpbml0R2V0QnlJZFNlbGYoVk0mIHZtLCBKU0Nl
bGwqIG93bmVyLCBTdHJ1Y3R1cmUqIGJhc2VPYmplY3RTdHJ1Y3R1cmUpCisgICAgdm9pZCBpbml0
R2V0QnlJZFNlbGYoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIGJhc2VPYmplY3RT
dHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKICAgICB7Ci0gICAgICAgIGFjY2Vzc1R5
cGUgPSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGY7CisgICAgICAgIGNhY2hlVHlwZSA9IENhY2hlVHlw
ZTo6R2V0QnlJZFNlbGY7CiAKLSAgICAgICAgdS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0
dXJlLnNldCh2bSwgb3duZXIsIGJhc2VPYmplY3RTdHJ1Y3R1cmUpOworICAgICAgICB1LmJ5SWRT
ZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgYmFzZU9iamVjdFN0cnVjdHVy
ZSk7CisgICAgICAgIHUuYnlJZFNlbGYub2Zmc2V0ID0gb2Zmc2V0OwogICAgIH0KIAotICAgIHZv
aWQgaW5pdEdldEJ5SWRMaXN0KFBvbHltb3JwaGljR2V0QnlJZExpc3QqIGxpc3QpCi0gICAgewot
ICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX2dldF9ieV9pZF9saXN0OwotICAgICAgICB1Lmdl
dEJ5SWRMaXN0Lmxpc3QgPSBsaXN0OwotICAgIH0KLQotICAgIC8vIFB1dEJ5SWQqCi0KLSAgICB2
b2lkIGluaXRQdXRCeUlkVHJhbnNpdGlvbihWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVy
ZSogcHJldmlvdXNTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQsIGJvb2wgaXNEaXJlY3QpCisgICAgdm9pZCBpbml0
UHV0QnlJZFJlcGxhY2UoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIGJhc2VPYmpl
Y3RTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKICAgICB7Ci0gICAgICAgIGlmIChp
c0RpcmVjdCkKLSAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5z
aXRpb25fZGlyZWN0OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhY2Nlc3NUeXBlID0gYWNj
ZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDsKKyAgICAgICAgY2FjaGVUeXBlID0gQ2Fj
aGVUeXBlOjpQdXRCeUlkUmVwbGFjZTsKIAotICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9uLnBy
ZXZpb3VzU3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHByZXZpb3VzU3RydWN0dXJlKTsKLSAgICAg
ICAgdS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJl
KTsKLSAgICAgICAgdS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQgPSBjb25kaXRp
b25TZXQucmVsZWFzZVJhd1BvaW50ZXIoKTsKKyAgICAgICAgdS5ieUlkU2VsZi5iYXNlT2JqZWN0
U3RydWN0dXJlLnNldCh2bSwgb3duZXIsIGJhc2VPYmplY3RTdHJ1Y3R1cmUpOworICAgICAgICB1
LmJ5SWRTZWxmLm9mZnNldCA9IG9mZnNldDsKICAgICB9CiAKLSAgICB2b2lkIGluaXRQdXRCeUlk
UmVwbGFjZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogYmFzZU9iamVjdFN0cnVj
dHVyZSkKKyAgICB2b2lkIGluaXRTdHViKHN0ZDo6dW5pcXVlX3B0cjxQb2x5bW9ycGhpY0FjY2Vz
cz4gc3R1YikKICAgICB7Ci0gICAgICAgIGFjY2Vzc1R5cGUgPSBhY2Nlc3NfcHV0X2J5X2lkX3Jl
cGxhY2U7Ci0gICAgCi0gICAgICAgIHUucHV0QnlJZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVjdHVy
ZS5zZXQodm0sIG93bmVyLCBiYXNlT2JqZWN0U3RydWN0dXJlKTsKLSAgICB9Ci0gICAgICAgIAot
ICAgIHZvaWQgaW5pdFB1dEJ5SWRMaXN0KFBvbHltb3JwaGljUHV0QnlJZExpc3QqIGxpc3QpCi0g
ICAgewotICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX3B1dF9ieV9pZF9saXN0OwotICAgICAg
ICB1LnB1dEJ5SWRMaXN0Lmxpc3QgPSBsaXN0OworICAgICAgICBjYWNoZVR5cGUgPSBDYWNoZVR5
cGU6OlN0dWI7CisgICAgICAgIHUuc3R1YiA9IHN0dWIucmVsZWFzZSgpOwogICAgIH0KLSAgICAK
LSAgICB2b2lkIGluaXRJbkxpc3QoUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBsaXN0
LCBpbnQgbGlzdFNpemUpCi0gICAgewotICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX2luX2xp
c3Q7Ci0gICAgICAgIHUuaW5MaXN0LnN0cnVjdHVyZUxpc3QgPSBsaXN0OwotICAgICAgICB1Lmlu
TGlzdC5saXN0U2l6ZSA9IGxpc3RTaXplOwotICAgIH0KLSAgICAgICAgCisKICAgICB2b2lkIHJl
c2V0KENvZGVCbG9jayopOwogCiAgICAgdm9pZCBkZXJlZigpOwpAQCAtMTcyLDcgKzExNSw4IEBA
IHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAgICAgICAgICAgICB3YXRjaHBvaW50cywgY29k
ZUJsb2NrLCB0aGlzLCBjb25kaXRpb24pOwogICAgIH0KICAgICAKLSAgICBpbnQ4X3QgYWNjZXNz
VHlwZTsKKyAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGU7CisgICAgQ2FjaGVUeXBlIGNhY2hlVHlw
ZTsKICAgICBib29sIHNlZW4gOiAxOwogICAgIGJvb2wgcmVzZXRCeUdDIDogMTsKICAgICBib29s
IHRvb2tTbG93UGF0aCA6IDE7CkBAIC0yMDMsMzQgKzE0NywxMyBAQCBzdHJ1Y3QgU3RydWN0dXJl
U3R1YkluZm8gewogCiAgICAgdW5pb24gewogICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAg
Ly8gSXQgd291bGQgYmUgdW53aXNlIHRvIHB1dCBhbnl0aGluZyBoZXJlLCBhcyBpdCB3aWxsIHN1
cmVseSBiZSBvdmVyd3JpdHRlbi4KLSAgICAgICAgfSB1bnNldDsKLSAgICAgICAgc3RydWN0IHsK
LSAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBiYXNlT2JqZWN0U3RydWN0
dXJlOwotICAgICAgICB9IGdldEJ5SWRTZWxmOwotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAg
ICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogbGlzdDsKLSAgICAgICAgfSBnZXRCeUlkTGlzdDsK
LSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJl
PiBwcmV2aW91c1N0cnVjdHVyZTsKLSAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0
dXJlPiBzdHJ1Y3R1cmU7Ci0gICAgICAgICAgICB2b2lkKiByYXdDb25kaXRpb25TZXQ7Ci0gICAg
ICAgIH0gcHV0QnlJZFRyYW5zaXRpb247Ci0gICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICBX
cml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4gYmFzZU9iamVjdFN0cnVjdHVyZTsKLSAgICAgICAg
fSBwdXRCeUlkUmVwbGFjZTsKLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIFBvbHltb3Jw
aGljUHV0QnlJZExpc3QqIGxpc3Q7Ci0gICAgICAgIH0gcHV0QnlJZExpc3Q7Ci0gICAgICAgIHN0
cnVjdCB7Ci0gICAgICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHN0cnVj
dHVyZUxpc3Q7Ci0gICAgICAgICAgICBpbnQgbGlzdFNpemU7Ci0gICAgICAgIH0gaW5MaXN0Owor
ICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OworICAgICAgICB9IGJ5SWRTZWxmOwor
ICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzcyogc3R1YjsKICAgICB9IHU7CiAKLSAgICBSZWZQdHI8
SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwogICAgIENvZGVMb2NhdGlvbkNhbGwgY2FsbFJl
dHVybkxvY2F0aW9uOwotICAgIFJlZlB0cjxXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8+
IHdhdGNocG9pbnRzOwogfTsKIAogaW5saW5lIENvZGVPcmlnaW4gZ2V0U3RydWN0dXJlU3R1Yklu
Zm9Db2RlT3JpZ2luKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHJ1Y3R1cmVTdHViSW5mbykKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24g
MTg5MzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAko
d29ya2luZyBjb3B5KQpAQCAtNTYzLDcgKzU2Myw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IGJyYW5jaDMyKEVxdWFsLCByZWdzLnRhZ0dQUigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1w
dHlWYWx1ZVRhZykpOwogI2VuZGlmCiAgICAgfQotICAgIAorCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KICAgICBKdW1wIGJyYW5jaFN0cnVjdHVyZShSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRp
dGlvbiwgVCBsZWZ0SGFuZFNpZGUsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKQEAgLTgz
Miw2ICs4MzIsMTUgQEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogCisgICAgdm9pZCBib3hCb29s
ZWFuUGF5bG9hZChib29sIHZhbHVlLCBHUFJSZWcgcGF5bG9hZEdQUikKKyAgICB7CisjaWYgVVNF
KEpTVkFMVUU2NCkKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSArIHZhbHVl
KSwgcGF5bG9hZEdQUik7CisjZWxzZQorICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMih2YWx1ZSks
IHBheWxvYWRHUFIpOworI2VuZGlmCisgICAgfQorCiAgICAgdm9pZCBib3hCb29sZWFuKEdQUlJl
ZyBib29sR1BSLCBKU1ZhbHVlUmVncyBib3hlZFJlZ3MpCiAgICAgewogICAgICAgICBib3hCb29s
ZWFuUGF5bG9hZChib29sR1BSLCBib3hlZFJlZ3MucGF5bG9hZEdQUigpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMTg5MzI0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI5LDM1
ICsxMjksNiBAQCBzdGF0aWMgdm9pZCByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoCiAjZW5kaWYKIH0K
IAotc3RhdGljIHZvaWQgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigKLSAgICBjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAotICAgIENDYWxsSGVscGVycyYgaml0LCBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgR1BSUmVnIHNjcmF0Y2hHUFIpCi17
Ci0gICAgaWYgKGNvbmRpdGlvbi5pc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRj
aHBvaW50KCkpIHsKLSAgICAgICAgY29uZGl0aW9uLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKS0+YWRk
VHJhbnNpdGlvbldhdGNocG9pbnQoCi0gICAgICAgICAgICBzdHViSW5mby5hZGRXYXRjaHBvaW50
KGNvZGVCbG9jaywgY29uZGl0aW9uKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNvbmRpdGlvbi5vYmplY3QoKS0+c3RydWN0dXJlKCk7Ci0g
ICAgUkVMRUFTRV9BU1NFUlQoY29uZGl0aW9uLnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eUFzc3Vt
aW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KHN0cnVjdHVyZSkpOwotICAgIGppdC5tb3ZlKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGNvbmRpdGlvbi5vYmplY3QoKSksIHNjcmF0Y2hH
UFIpOwotICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoCi0gICAgICAgIGppdC5icmFuY2hTdHJ1Y3R1
cmUoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCi0gICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLCBzdHJ1Y3R1cmUpKTsKLX0KLQotc3RhdGljIHZvaWQgY2hlY2tPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbnMoCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIHNldCwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywKLSAgICBD
Q2FsbEhlbHBlcnMmIGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMs
IEdQUlJlZyBzY3JhdGNoR1BSKQotewotICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24mIGNvbmRpdGlvbiA6IHNldCkgewotICAgICAgICBjaGVja09iamVjdFByb3BlcnR5Q29u
ZGl0aW9uKAotICAgICAgICAgICAgY29uZGl0aW9uLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBqaXQs
IGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7Ci0gICAgfQotfQotCiBzdGF0aWMgdm9pZCByZXBs
YWNlV2l0aEp1bXAoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25zdCBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgdGFyZ2V0KQogewogICAgIGlmIChNYWNyb0Fzc2VtYmxlcjo6Y2FuSnVtcFJl
cGxhY2VQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaCgpKSB7CkBAIC0xNzUsNTIgKzE0Niw2IEBA
IHN0YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChTdHJ1Y3R1cmVTdHUKICAgICAgICAgQ29kZUxv
Y2F0aW9uTGFiZWwodGFyZ2V0KSk7CiB9CiAKLXN0YXRpYyB2b2lkIGVtaXRSZXN0b3JlU2NyYXRj
aChNYWNyb0Fzc2VtYmxlciYgc3R1YkppdCwgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgR1BS
UmVnIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpKdW1wJiBzdWNjZXNzLCBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCYgZmFpbCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlcykK
LXsKLSAgICBpZiAobmVlZFRvUmVzdG9yZVNjcmF0Y2gpIHsKLSAgICAgICAgc3R1YkppdC5wb3BU
b1Jlc3RvcmUoc2NyYXRjaEdQUik7Ci0gICAgICAgIAotICAgICAgICBzdWNjZXNzID0gc3R1Ykpp
dC5qdW1wKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBsaW5rIGZhaWx1cmUgY2FzZXMgaGVyZSwg
c28gd2UgY2FuIHBvcCBzY3JhdGNoR1BSLCBhbmQgdGhlbiBqdW1wIGJhY2suCi0gICAgICAgIGZh
aWx1cmVDYXNlcy5saW5rKCZzdHViSml0KTsKLSAgICAgICAgCi0gICAgICAgIHN0dWJKaXQucG9w
VG9SZXN0b3JlKHNjcmF0Y2hHUFIpOwotICAgICAgICAKLSAgICAgICAgZmFpbCA9IHN0dWJKaXQu
anVtcCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIHN1Y2Nlc3MgPSBzdHVi
Sml0Lmp1bXAoKTsKLX0KLQotc3RhdGljIHZvaWQgbGlua1Jlc3RvcmVTY3JhdGNoKExpbmtCdWZm
ZXImIHBhdGNoQnVmZmVyLCBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBzdWNjZXNzLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsLCBNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzLCBDb2RlTG9jYXRpb25MYWJlbCBzdWNjZXNzTGFiZWws
IENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlQmVnaW4pCi17Ci0gICAgcGF0Y2hCdWZmZXIubGlu
ayhzdWNjZXNzLCBzdWNjZXNzTGFiZWwpOwotICAgICAgICAKLSAgICBpZiAobmVlZFRvUmVzdG9y
ZVNjcmF0Y2gpIHsKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsLCBzbG93Q2FzZUJlZ2lu
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICAvLyBsaW5rIGZhaWx1cmUgY2Fz
ZXMgZGlyZWN0bHkgYmFjayB0byBub3JtYWwgcGF0aAotICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFp
bHVyZUNhc2VzLCBzbG93Q2FzZUJlZ2luKTsKLX0KLQotc3RhdGljIHZvaWQgbGlua1Jlc3RvcmVT
Y3JhdGNoKExpbmtCdWZmZXImIHBhdGNoQnVmZmVyLCBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNo
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nl
c3MsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhaWwsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBm
YWlsdXJlQ2FzZXMpCi17Ci0gICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVk
VG9SZXN0b3JlU2NyYXRjaCwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzLCBzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxU
b0RvbmUpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5m
by5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7Ci19Ci0KLWVudW0gQnlJZFN0dWJLaW5kIHsK
LSAgICBHZXRWYWx1ZSwKLSAgICBHZXRVbmRlZmluZWQsCi0gICAgQ2FsbEdldHRlciwKLSAgICBD
YWxsQ3VzdG9tR2V0dGVyLAotICAgIENhbGxTZXR0ZXIsCi0gICAgQ2FsbEN1c3RvbVNldHRlcgot
fTsKLQogc3RhdGljIGNvbnN0IGNoYXIqIHRvU3RyaW5nKEJ5SWRTdHViS2luZCBraW5kKQogewog
ICAgIHN3aXRjaCAoa2luZCkgewpAQCAtMjc3LDMxMiArMjAyLDYgQEAgc3RhdGljIEZ1bmN0aW9u
UHRyIGN1c3RvbUZvcihjb25zdCBQdXRQcgogICAgIHJldHVybiBGdW5jdGlvblB0cihzbG90LmN1
c3RvbVNldHRlcigpKTsKIH0KIAotc3RhdGljIGJvb2wgZ2VuZXJhdGVCeUlkU3R1YigKLSAgICBF
eGVjU3RhdGUqIGV4ZWMsIEJ5SWRTdHViS2luZCBraW5kLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsCi0gICAgRnVuY3Rpb25QdHIgY3VzdG9tLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8sIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCi0g
ICAgSlNPYmplY3QqIGFsdGVybmF0ZUJhc2UsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIGJvb2wgbG9hZFRhcmdldEZyb21Qcm94eSwKLSAgICBXYXRjaHBvaW50
U2V0KiB3YXRjaHBvaW50U2V0LCBDb2RlTG9jYXRpb25MYWJlbCBzdWNjZXNzTGFiZWwsIENvZGVM
b2NhdGlvbkxhYmVsIHNsb3dDYXNlTGFiZWwsCi0gICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYg
c3R1YlJvdXRpbmUpCi17Ci0gICAgQVNTRVJUKGNvbmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJl
VmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKTsKLSAgICAKLSAgICBW
TSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQ
UlJlZz4oc3R1YkluZm8ucGF0Y2guYmFzZUdQUik7Ci0gICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdz
ID0gSlNWYWx1ZVJlZ3MoCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgc3RhdGljX2Nh
c3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZVRhZ0dQUiksCi0jZW5kaWYKLSAgICAgICAg
c3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZUdQUikpOwotICAgIEdQUlJl
ZyBzY3JhdGNoR1BSID0gVGVtcFJlZ2lzdGVyU2V0KHN0dWJJbmZvLnBhdGNoLnVzZWRSZWdpc3Rl
cnMpLmdldEZyZWVHUFIoKTsKLSAgICBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gc2NyYXRj
aEdQUiA9PSBJbnZhbGlkR1BSUmVnOwotICAgIFJFTEVBU0VfQVNTRVJUKCFuZWVkVG9SZXN0b3Jl
U2NyYXRjaCB8fCAoa2luZCA9PSBHZXRWYWx1ZSB8fCBraW5kID09IEdldFVuZGVmaW5lZCkpOwot
ICAgIAotICAgIENDYWxsSGVscGVycyBzdHViSml0KCZleGVjLT52bSgpLCBleGVjLT5jb2RlQmxv
Y2soKSk7Ci0gICAgaWYgKG5lZWRUb1Jlc3RvcmVTY3JhdGNoKSB7Ci0gICAgICAgIHNjcmF0Y2hH
UFIgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoCi0gICAgICAgICAgICBiYXNl
R1BSLCB2YWx1ZVJlZ3MudGFnR1BSKCksIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwotICAgICAg
ICBzdHViSml0LnB1c2hUb1NhdmUoc2NyYXRjaEdQUik7Ci0gICAgICAgIG5lZWRUb1Jlc3RvcmVT
Y3JhdGNoID0gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IGZhaWx1cmVDYXNlczsKLQotICAgIEdQUlJlZyBiYXNlRm9yR2V0R1BSOwotICAgIGlmIChsb2Fk
VGFyZ2V0RnJvbVByb3h5KSB7Ci0gICAgICAgIGJhc2VGb3JHZXRHUFIgPSB2YWx1ZVJlZ3MucGF5
bG9hZEdQUigpOwotICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoOCgK
LSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgCi0gICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgp
KSwgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKFB1cmVGb3J3YXJk
aW5nUHJveHlUeXBlKSkpOwotCi0gICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU1Byb3h5Ojp0YXJnZXRPZmZzZXQoKSksIHNjcmF0Y2hHUFIp
OwotICAgICAgICAKLSAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFN0
cnVjdHVyZSgKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgCi0gICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLAotICAgICAgICAgICAgc3RydWN0dXJlKSk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgYmFzZUZvckdldEdQUiA9IGJhc2VHUFI7Ci0KLSAgICAgICAgZmFpbHVyZUNhc2VzLmFw
cGVuZChzdHViSml0LmJyYW5jaFN0cnVjdHVyZSgKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlRm9y
R2V0R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCAKLSAgICAgICAgICAgIHN0cnVj
dHVyZSkpOwotICAgIH0KLQotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJs
b2NrKCk7Ci0gICAgaWYgKHN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgp
IHx8IGNvbmRpdGlvblNldC5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpCi0gICAgICAg
IHZtLT5yZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHN0
dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7Ci0KLSAgICBpZiAod2F0Y2hwb2ludFNl
dCkKLSAgICAgICAgd2F0Y2hwb2ludFNldC0+YWRkKHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29k
ZUJsb2NrKSk7Ci0KLSAgICBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9ucygKLSAgICAgICAg
Y29uZGl0aW9uU2V0LCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHViSml0LCBmYWlsdXJlQ2FzZXMs
IHNjcmF0Y2hHUFIpOwotCi0gICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgewotICAgICAg
ICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmU7Ci0gICAgICAgIGlmIChjb25kaXRpb25TZXQuaXNF
bXB0eSgpKQotICAgICAgICAgICAgY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgY3VyclN0cnVjdHVyZSA9IGNvbmRpdGlvblNldC5zbG90QmFzZUNv
bmRpdGlvbigpLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgY3VyclN0cnVjdHVyZS0+
c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKCp2bSwgb2Zmc2V0KTsKLSAgICB9
Ci0gICAgCi0gICAgR1BSUmVnIGJhc2VGb3JBY2Nlc3NHUFIgPSBJbnZhbGlkR1BSUmVnOwotICAg
IGlmIChraW5kICE9IEdldFVuZGVmaW5lZCkgewotICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5p
c0VtcHR5KCkpIHsKLSAgICAgICAgICAgIC8vIFdlIGNvdWxkIGhhdmUgY2xvYmJlcmVkIHNjcmF0
Y2hHUFIgZWFybGllciwgc28gd2UgaGF2ZSB0byByZWxvYWQgZnJvbSBiYXNlR1BSIHRvIGdldCB0
aGUgdGFyZ2V0LgotICAgICAgICAgICAgaWYgKGxvYWRUYXJnZXRGcm9tUHJveHkpCi0gICAgICAg
ICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTUHJveHk6OnRhcmdldE9mZnNldCgpKSwgYmFzZUZvckdldEdQUik7Ci0gICAgICAgICAgICBz
dHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoYWx0ZXJuYXRlQmFzZSks
IHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgYmFzZUZvckFjY2Vzc0dQUiA9IHNjcmF0Y2hHUFI7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBGb3IgcHJveHkgb2JqZWN0cywgd2Ug
bmVlZCB0byBkbyBhbGwgdGhlIFN0cnVjdHVyZSBjaGVja3MgYmVmb3JlIG1vdmluZyB0aGUgYmFz
ZUdQUiBpbnRvCi0gICAgICAgICAgICAvLyBiYXNlRm9yR2V0R1BSIGJlY2F1c2UgaWYgd2UgZmFp
bCBhbnkgb2YgdGhlIGNoZWNrcyB0aGVuIHdlIHdvdWxkIGhhdmUgdGhlIHdyb25nIHZhbHVlIGlu
IGJhc2VHUFIKLSAgICAgICAgICAgIC8vIG9uIHRoZSBzbG93IHBhdGguCi0gICAgICAgICAgICBp
ZiAobG9hZFRhcmdldEZyb21Qcm94eSkKLSAgICAgICAgICAgICAgICBzdHViSml0Lm1vdmUoc2Ny
YXRjaEdQUiwgYmFzZUZvckdldEdQUik7Ci0gICAgICAgICAgICBiYXNlRm9yQWNjZXNzR1BSID0g
YmFzZUZvckdldEdQUjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEdQUlJlZyBsb2FkZWRWYWx1
ZUdQUiA9IEludmFsaWRHUFJSZWc7Ci0gICAgaWYgKGtpbmQgPT0gR2V0VW5kZWZpbmVkKQotICAg
ICAgICBzdHViSml0Lm1vdmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgdmFsdWVSZWdzKTsK
LSAgICBlbHNlIGlmIChraW5kICE9IENhbGxDdXN0b21HZXR0ZXIgJiYga2luZCAhPSBDYWxsQ3Vz
dG9tU2V0dGVyKSB7Ci0gICAgICAgIGlmIChraW5kID09IEdldFZhbHVlKQotICAgICAgICAgICAg
bG9hZGVkVmFsdWVHUFIgPSB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUiA9IHNjcmF0Y2hHUFI7Ci0gICAgICAgIAotICAgICAg
ICBHUFJSZWcgc3RvcmFnZUdQUjsKLSAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNldCkp
Ci0gICAgICAgICAgICBzdG9yYWdlR1BSID0gYmFzZUZvckFjY2Vzc0dQUjsKLSAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZUZvckFjY2Vzc0dQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgbG9hZGVkVmFs
dWVHUFIpOwotICAgICAgICAgICAgc3RvcmFnZUdQUiA9IGxvYWRlZFZhbHVlR1BSOwotICAgICAg
ICB9Ci0gICAgICAgIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHN0dWJKaXQubG9hZDY0
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNl
KG9mZnNldCkpLCBsb2FkZWRWYWx1ZUdQUik7Ci0jZWxzZQotICAgICAgICBpZiAoa2luZCA9PSBH
ZXRWYWx1ZSkKLSAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKG9mZnNldCkgKyBUYWdPZmZzZXQp
LCB2YWx1ZVJlZ3MudGFnR1BSKCkpOwotICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShvZmZzZXQpICsg
UGF5bG9hZE9mZnNldCksIGxvYWRlZFZhbHVlR1BSKTsKLSNlbmRpZgotICAgIH0KLQotICAgIC8v
IFN0dWZmIGZvciBjdXN0b20gZ2V0dGVycy4KLSAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBvcGVy
YXRpb25DYWxsOwotICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGhhbmRsZXJDYWxsOwotCi0gICAg
Ly8gU3R1ZmYgZm9yIEpTIGdldHRlcnMuCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0
ciBhZGRyZXNzT2ZMaW5rRnVuY3Rpb25DaGVjazsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBm
YXN0UGF0aENhbGw7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgc2xvd1BhdGhDYWxsOwotICAg
IHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua0luZm8+IGNhbGxMaW5rSW5mbzsKLQotICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3MsIGZhaWw7Ci0gICAgaWYgKGtpbmQgIT0gR2V0VmFsdWUg
JiYga2luZCAhPSBHZXRVbmRlZmluZWQpIHsKLSAgICAgICAgLy8gTmVlZCB0byBtYWtlIHN1cmUg
dGhhdCB3aGVuZXZlciB0aGlzIGNhbGwgaXMgbWFkZSBpbiB0aGUgZnV0dXJlLCB3ZSByZW1lbWJl
ciB0aGUKLSAgICAgICAgLy8gcGxhY2UgdGhhdCB3ZSBtYWRlIGl0IGZyb20uIEl0IGp1c3Qgc28g
aGFwcGVucyB0byBiZSB0aGUgcGxhY2UgdGhhdCB3ZSBhcmUgYXQKLSAgICAgICAgLy8gcmlnaHQg
bm93IQotICAgICAgICBzdHViSml0LnN0b3JlMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MihzdHViSW5mby5jYWxsU2l0ZUluZGV4LmJpdHMoKSksCi0gICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KEpTU3RhY2s6OkFyZ3VtZW50
Q291bnQpKSk7Ci0KLSAgICAgICAgaWYgKGtpbmQgPT0gQ2FsbEdldHRlciB8fCBraW5kID09IENh
bGxTZXR0ZXIpIHsKLSAgICAgICAgICAgIC8vIENyZWF0ZSBhIEpTIGNhbGwgdXNpbmcgYSBKUyBj
YWxsIGlubGluZSBjYWNoZS4gQXNzdW1lIHRoYXQ6Ci0gICAgICAgICAgICAvLwotICAgICAgICAg
ICAgLy8gLSBTUCBpcyBhbGlnbmVkIGFuZCByZXByZXNlbnRzIHRoZSBleHRlbnQgb2YgdGhlIGNh
bGxpbmcgY29tcGlsZXIncyBzdGFjayB1c2FnZS4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAg
ICAvLyAtIEZQIGlzIHNldCBjb3JyZWN0bHkgKGkuZS4gaXQgcG9pbnRzIHRvIHRoZSBjYWxsZXIn
cyBjYWxsIGZyYW1lIGhlYWRlcikuCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gLSBT
UCAtIEZQIGlzIGFuIGFsaWduZWQgZGlmZmVyZW5jZS4KLSAgICAgICAgICAgIC8vCi0gICAgICAg
ICAgICAvLyAtIEFueSBieXRlIGJldHdlZW4gRlAgKGV4Y2x1c2l2ZSkgYW5kIFNQIChpbmNsdXNp
dmUpIGNvdWxkIGJlIGxpdmUgaW4gdGhlIGNhbGxpbmcKLSAgICAgICAgICAgIC8vICAgY29kZS4K
LSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBUaGVyZWZvcmUsIHdlIHRlbXBvcmFyaWx5
IGdyb3cgdGhlIHN0YWNrIGZvciB0aGUgcHVycG9zZSBvZiB0aGUgY2FsbCBhbmQgdGhlbgotICAg
ICAgICAgICAgLy8gc2hyaW5rIGl0IGFmdGVyLgotICAgICAgICAgICAgCi0gICAgICAgICAgICBj
YWxsTGlua0luZm8gPSBzdGQ6Om1ha2VfdW5pcXVlPENhbGxMaW5rSW5mbz4oKTsKLSAgICAgICAg
ICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgc3R1YkluZm8u
Y29kZU9yaWdpbiwgbG9hZGVkVmFsdWVHUFIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZG9uZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
Ly8gVGhlcmUgaXMgYSAndGhpcycgYXJndW1lbnQgYnV0IG5vdGhpbmcgZWxzZS4KLSAgICAgICAg
ICAgIHVuc2lnbmVkIG51bWJlck9mUGFyYW1ldGVycyA9IDE7Ci0gICAgICAgICAgICAvLyAuLi4g
dW5sZXNzIHdlJ3JlIGNhbGxpbmcgYSBzZXR0ZXIuCi0gICAgICAgICAgICBpZiAoa2luZCA9PSBD
YWxsU2V0dGVyKQotICAgICAgICAgICAgICAgIG51bWJlck9mUGFyYW1ldGVycysrOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICAvLyBHZXQgdGhlIGFjY2Vzc29yOyBpZiB0aGVyZSBhaW4ndCBv
bmUgdGhlbiB0aGUgcmVzdWx0IGlzIGpzVW5kZWZpbmVkKCkuCi0gICAgICAgICAgICBpZiAoa2lu
ZCA9PSBDYWxsU2V0dGVyKSB7Ci0gICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKAotICAg
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhsb2FkZWRWYWx1ZUdQUiwg
R2V0dGVyU2V0dGVyOjpvZmZzZXRPZlNldHRlcigpKSwKLSAgICAgICAgICAgICAgICAgICAgbG9h
ZGVkVmFsdWVHUFIpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzdHVi
Sml0LmxvYWRQdHIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGxvYWRlZFZhbHVlR1BSLCBHZXR0ZXJTZXR0ZXI6Om9mZnNldE9mR2V0dGVyKCkpLAotICAgICAg
ICAgICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCByZXR1cm5VbmRlZmluZWQgPSBzdHViSml0LmJyYW5jaFRl
c3RQdHIoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGxvYWRlZFZhbHVl
R1BSKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZSZWdzRm9y
Q2FsbCA9Ci0gICAgICAgICAgICAgICAgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIG51
bWJlck9mUGFyYW1ldGVyczsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgdW5zaWduZWQgbnVt
YmVyT2ZCeXRlc0ZvckNhbGwgPQotICAgICAgICAgICAgICAgIG51bWJlck9mUmVnc0ZvckNhbGwg
KiBzaXplb2YoUmVnaXN0ZXIpIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICB1bnNpZ25lZCBhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwgPQot
ICAgICAgICAgICAgICAgIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5
dGVzKCksIG51bWJlck9mQnl0ZXNGb3JDYWxsKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
c3R1YkppdC5zdWJQdHIoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMihhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwpLAotICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzIGNhbGxlZUZyYW1lID0gTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJl
Z2lzdGVyLAotICAgICAgICAgICAgICAgIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihD
YWxsZXJGcmFtZUFuZFBDKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzdHViSml0LnN0
b3JlMzIoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihudW1i
ZXJPZlBhcmFtZXRlcnMpLAotICAgICAgICAgICAgICAgIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQo
Ci0gICAgICAgICAgICAgICAgICAgIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQgKiBzaXplb2YoUmVn
aXN0ZXIpICsgUGF5bG9hZE9mZnNldCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzdHVi
Sml0LnN0b3JlQ2VsbCgKLSAgICAgICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUiwgY2FsbGVlRnJh
bWUud2l0aE9mZnNldChKU1N0YWNrOjpDYWxsZWUgKiBzaXplb2YoUmVnaXN0ZXIpKSk7Ci0KLSAg
ICAgICAgICAgIHN0dWJKaXQuc3RvcmVDZWxsKAotICAgICAgICAgICAgICAgIGJhc2VGb3JHZXRH
UFIsCi0gICAgICAgICAgICAgICAgY2FsbGVlRnJhbWUud2l0aE9mZnNldCgKLSAgICAgICAgICAg
ICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCkub2Zmc2V0KCkgKiBzaXplb2Yo
UmVnaXN0ZXIpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChraW5kID09IENhbGxT
ZXR0ZXIpIHsKLSAgICAgICAgICAgICAgICBzdHViSml0LnN0b3JlVmFsdWUoCi0gICAgICAgICAg
ICAgICAgICAgIHZhbHVlUmVncywKLSAgICAgICAgICAgICAgICAgICAgY2FsbGVlRnJhbWUud2l0
aE9mZnNldCgKLSAgICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50KDEpLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93Q2FzZSA9IHN0
dWJKaXQuYnJhbmNoUHRyV2l0aFBhdGNoKAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgbG9hZGVkVmFsdWVHUFIsIGFkZHJlc3NPZkxpbmtGdW5jdGlvbkNoZWNrLAot
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgZmFzdFBhdGhDYWxsID0gc3R1YkppdC5uZWFyQ2FsbCgpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBzdHViSml0LmFkZFB0cigKLSAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2Fs
bCksCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKLSAgICAgICAgICAgIGlmIChraW5kID09IENhbGxHZXR0ZXIpCi0gICAgICAgICAgICAgICAg
c3R1YkppdC5zZXR1cFJlc3VsdHModmFsdWVSZWdzKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgZG9uZS5hcHBlbmQoc3R1YkppdC5qdW1wKCkpOwotICAgICAgICAgICAgc2xvd0Nhc2UubGlu
aygmc3R1YkppdCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN0dWJKaXQubW92ZShsb2Fk
ZWRWYWx1ZUdQUiwgR1BSSW5mbzo6cmVnVDApOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAg
ICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpDZWxsVGFnKSwgR1BSSW5mbzo6cmVnVDEpOwotI2VuZGlmCi0gICAgICAgICAgICBzdHViSml0
Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvLmdldCgpKSwg
R1BSSW5mbzo6cmVnVDIpOwotICAgICAgICAgICAgc2xvd1BhdGhDYWxsID0gc3R1YkppdC5uZWFy
Q2FsbCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzdHViSml0LmFkZFB0cigKLSAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGFsaWduZWROdW1iZXJPZkJ5
dGVzRm9yQ2FsbCksCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKLSAgICAgICAgICAgIGlmIChraW5kID09IENhbGxHZXR0ZXIpCi0gICAgICAg
ICAgICAgICAgc3R1YkppdC5zZXR1cFJlc3VsdHModmFsdWVSZWdzKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgZG9uZS5hcHBlbmQoc3R1YkppdC5qdW1wKCkpOwotICAgICAgICAgICAgcmV0
dXJuVW5kZWZpbmVkLmxpbmsoJnN0dWJKaXQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBp
ZiAoa2luZCA9PSBDYWxsR2V0dGVyKQotICAgICAgICAgICAgICAgIHN0dWJKaXQubW92ZVRydXN0
ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCB2YWx1ZVJlZ3MpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBkb25lLmxpbmsoJnN0dWJKaXQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
Ly8gZ2V0dGVyOiBFbmNvZGVkSlNWYWx1ZSAoKkdldFZhbHVlRnVuYykoRXhlY1N0YXRlKiwgSlNP
YmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSk7
Ci0gICAgICAgICAgICAvLyBzZXR0ZXI6IHZvaWQgKCpQdXRWYWx1ZUZ1bmMpKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiBiYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSB2YWx1ZSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIGlmIChraW5kID09IENh
bGxDdXN0b21HZXR0ZXIpCi0gICAgICAgICAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoYmFzZUZvckFjY2Vzc0dQUiwgYmFzZUZvckdldEdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIocHJvcGVydHlOYW1lLmltcGwoKSkpOwotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJh
c2VGb3JBY2Nlc3NHUFIsIGJhc2VGb3JHZXRHUFIsIHZhbHVlUmVncy5ncHIoKSk7Ci0jZWxzZQot
ICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ2FsbEN1c3RvbUdldHRlcikKLSAgICAgICAgICAgICAg
ICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlRm9yQWNjZXNzR1BSLCBi
YXNlRm9yR2V0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxU
YWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihwcm9wZXJ0eU5hbWUuaW1wbCgpKSk7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoYmFzZUZvckFjY2Vzc0dQUiwgYmFzZUZvckdldEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgdmFsdWVSZWdzLnBheWxvYWRH
UFIoKSwgdmFsdWVSZWdzLnRhZ0dQUigpKTsKLSNlbmRpZgotICAgICAgICAgICAgc3R1YkppdC5z
dG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgJnZtLT50b3BDYWxsRnJhbWUpOwot
Ci0gICAgICAgICAgICBvcGVyYXRpb25DYWxsID0gc3R1YkppdC5jYWxsKCk7Ci0gICAgICAgICAg
ICBpZiAoa2luZCA9PSBDYWxsQ3VzdG9tR2V0dGVyKQotICAgICAgICAgICAgICAgIHN0dWJKaXQu
c2V0dXBSZXN1bHRzKHZhbHVlUmVncyk7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBub0V4Y2VwdGlvbiA9IHN0dWJKaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKENDYWxsSGVscGVyczo6
SW52ZXJ0ZWRFeGNlcHRpb25DaGVjayk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN0dWJK
aXQuc2V0dXBBcmd1bWVudHMoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHZtKSwgR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgICAgICAgICAgaGFuZGxlckNhbGwgPSBzdHViSml0
LmNhbGwoKTsKLSAgICAgICAgICAgIHN0dWJKaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBub0V4Y2VwdGlvbi5saW5rKCZzdHViSml0KTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICBlbWl0UmVzdG9yZVNjcmF0Y2goc3R1YkppdCwgbmVlZFRvUmVz
dG9yZVNjcmF0Y2gsIHNjcmF0Y2hHUFIsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcyk7Ci0g
ICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIHN0dWJKaXQsIGV4ZWMtPmNvZGVC
bG9jaygpLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwotICAgIGlmIChwYXRjaEJ1ZmZlci5kaWRG
YWlsVG9BbGxvY2F0ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgbGlua1Jl
c3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc3VjY2Vzcywg
ZmFpbCwgZmFpbHVyZUNhc2VzLCBzdWNjZXNzTGFiZWwsIHNsb3dDYXNlTGFiZWwpOwotICAgIGlm
IChraW5kID09IENhbGxDdXN0b21HZXR0ZXIgfHwga2luZCA9PSBDYWxsQ3VzdG9tU2V0dGVyKSB7
Ci0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsob3BlcmF0aW9uQ2FsbCwgY3VzdG9tKTsKLSAgICAg
ICAgcGF0Y2hCdWZmZXIubGluayhoYW5kbGVyQ2FsbCwgbG9va3VwRXhjZXB0aW9uSGFuZGxlcik7
Ci0gICAgfSBlbHNlIGlmIChraW5kID09IENhbGxHZXR0ZXIgfHwga2luZCA9PSBDYWxsU2V0dGVy
KSB7Ci0gICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucyhwYXRjaEJ1ZmZlci5s
b2NhdGlvbk9mTmVhckNhbGwoc2xvd1BhdGhDYWxsKSwKLSAgICAgICAgICAgIHBhdGNoQnVmZmVy
LmxvY2F0aW9uT2YoYWRkcmVzc09mTGlua0Z1bmN0aW9uQ2hlY2spLAotICAgICAgICAgICAgcGF0
Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKGZhc3RQYXRoQ2FsbCkpOwotCi0gICAgICAgIHBh
dGNoQnVmZmVyLmxpbmsoCi0gICAgICAgICAgICBzbG93UGF0aENhbGwsIENvZGVMb2NhdGlvbkxh
YmVsKHZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwotICAg
IH0KLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZSA9IEZJTkFMSVpFX0NPREVf
Rk9SKAotICAgICAgICBleGVjLT5jb2RlQmxvY2soKSwgcGF0Y2hCdWZmZXIsCi0gICAgICAgICgi
JXMgYWNjZXNzIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAgICAgdG9T
dHJpbmcoa2luZCksIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwKLSAgICAg
ICAgICAgIHN1Y2Nlc3NMYWJlbC5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgCi0gICAgaWYg
KGtpbmQgPT0gQ2FsbEdldHRlciB8fCBraW5kID09IENhbGxTZXR0ZXIpCi0gICAgICAgIHN0dWJS
b3V0aW5lID0gYWRvcHRSZWYobmV3IEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lKGNvZGUsICp2
bSwgV1RGOjptb3ZlKGNhbGxMaW5rSW5mbykpKTsKLSAgICBlbHNlCi0gICAgICAgIHN0dWJSb3V0
aW5lID0gY3JlYXRlSklUU3R1YlJvdXRpbmUoY29kZSwgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpLCB0cnVlKTsKLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogZW51bSBJbmxp
bmVDYWNoZUFjdGlvbiB7CiAgICAgR2l2ZVVwT25DYWNoZSwKICAgICBSZXRyeUNhY2hlTGF0ZXIs
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAxODkzMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ0LDYgKzQ0LDggQEAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjp+U2NyYXRjaFJlZ2lzdAog
CiB2b2lkIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6bG9jayhHUFJSZWcgcmVnKQogeworICAg
IGlmIChyZWcgPT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuOwogICAgIHVuc2lnbmVk
IGluZGV4ID0gR1BSSW5mbzo6dG9JbmRleChyZWcpOwogICAgIGlmIChpbmRleCA9PSBHUFJJbmZv
OjpJbnZhbGlkSW5kZXgpCiAgICAgICAgIHJldHVybjsKQEAgLTUyLDEyICs1NCwyMCBAQCB2b2lk
IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6bG9jayhHUFJSCiAKIHZvaWQgU2NyYXRjaFJlZ2lz
dGVyQWxsb2NhdG9yOjpsb2NrKEZQUlJlZyByZWcpCiB7CisgICAgaWYgKHJlZyA9PSBJbnZhbGlk
RlBSUmVnKQorICAgICAgICByZXR1cm47CiAgICAgdW5zaWduZWQgaW5kZXggPSBGUFJJbmZvOjp0
b0luZGV4KHJlZyk7CiAgICAgaWYgKGluZGV4ID09IEZQUkluZm86OkludmFsaWRJbmRleCkKICAg
ICAgICAgcmV0dXJuOwogICAgIG1fbG9ja2VkUmVnaXN0ZXJzLnNldEZQUkJ5SW5kZXgoaW5kZXgp
OwogfQogCit2b2lkIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6bG9jayhKU1ZhbHVlUmVncyBy
ZWdzKQoreworICAgIGxvY2socmVncy50YWdHUFIoKSk7CisgICAgbG9jayhyZWdzLnBheWxvYWRH
UFIoKSk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIEJhbmtJbmZvPgogdHlwZW5hbWUgQmFua0lu
Zm86OlJlZ2lzdGVyVHlwZSBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OmFsbG9jYXRlU2NyYXRj
aCgpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2NyYXRj
aFJlZ2lzdGVyQWxsb2NhdG9yLmgJKHJldmlzaW9uIDE4OTMyNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQwLDExICs0MCwxMyBAQCBzdHJ1Y3QgU2NyYXRjaEJ1ZmZlcjsKIAogY2xhc3MgU2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yIHsKIHB1YmxpYzoKKyAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3Io
KSB7IH0KICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IoY29uc3QgUmVnaXN0ZXJTZXQmIHVz
ZWRSZWdpc3RlcnMpOwogICAgIH5TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IoKTsKIAotICAgIHZv
aWQgbG9jayhHUFJSZWcgcmVnKTsKLSAgICB2b2lkIGxvY2soRlBSUmVnIHJlZyk7CisgICAgdm9p
ZCBsb2NrKEdQUlJlZyk7CisgICAgdm9pZCBsb2NrKEZQUlJlZyk7CisgICAgdm9pZCBsb2NrKEpT
VmFsdWVSZWdzKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rSW5mbz4KICAgICB0
eXBlbmFtZSBCYW5rSW5mbzo6UmVnaXN0ZXJUeXBlIGFsbG9jYXRlU2NyYXRjaCgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260711</attachid>
            <date>2015-09-06 12:06:09 -0700</date>
            <delta_ts>2015-09-06 13:16:33 -0700</delta_ts>
            <desc>starting to get interesting</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>118829</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3Jw
aGljQWNjZXNzLmNwcAkocmV2aXNpb24gMTg5MzI0KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHA6MTg5MzI0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDE1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUG9seW1v
cnBoaWNHZXRCeUlkTGlzdC5oIgorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkNvZGVC
bG9jay5oIgorI2luY2x1ZGUgIkhlYXAuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5j
bHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0dldEJ5SWRB
Y2Nlc3M6OkdldEJ5SWRBY2Nlc3MoCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NU
eXBlIHR5cGUsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lLAorICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29u
ZGl0aW9uU2V0KQorICAgIDogbV90eXBlKHR5cGUpCisgICAgLCBtX3N0cnVjdHVyZSh2bSwgb3du
ZXIsIHN0cnVjdHVyZSkKKyAgICAsIG1fY29uZGl0aW9uU2V0KGNvbmRpdGlvblNldCkKKyAgICAs
IG1fc3R1YlJvdXRpbmUoc3R1YlJvdXRpbmUpCit7Cit9CisKK0dldEJ5SWRBY2Nlc3M6On5HZXRC
eUlkQWNjZXNzKCkKK3sKK30KKworR2V0QnlJZEFjY2VzcyBHZXRCeUlkQWNjZXNzOjpmcm9tU3Ry
dWN0dXJlU3R1YkluZm8oU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBpbml0aWFsU2xvd1BhdGggPQorICAgICAgICBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Ns
b3dDYXNlKTsKKyAgICAKKyAgICBHZXRCeUlkQWNjZXNzIHJlc3VsdDsKKyAgICAKKyAgICBSRUxF
QVNFX0FTU0VSVChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZik7
CisgICAgCisgICAgcmVzdWx0Lm1fdHlwZSA9IFNpbXBsZUlubGluZTsKKyAgICByZXN1bHQubV9z
dHJ1Y3R1cmUuY29weUZyb20oc3R1YkluZm8udS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0
dXJlKTsKKyAgICByZXN1bHQubV9zdHViUm91dGluZSA9IEpJVFN0dWJSb3V0aW5lOjpjcmVhdGVT
ZWxmTWFuYWdlZFJvdXRpbmUoaW5pdGlhbFNsb3dQYXRoKTsKKyAgICAKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitib29sIEdldEJ5SWRBY2Nlc3M6OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0Cit7
CisgICAgaWYgKG1fc3RydWN0dXJlICYmICFIZWFwOjppc01hcmtlZChtX3N0cnVjdHVyZS5nZXQo
KSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW1fY29uZGl0aW9uU2V0LmFyZVN0
aWxsTGl2ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFtX3N0dWJSb3V0aW5l
LT52aXNpdFdlYWsodm0pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK1BvbHltb3JwaGljR2V0QnlJZExpc3Q6OlBvbHltb3JwaGljR2V0QnlJZExpc3QoU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBl
ID09IGFjY2Vzc191bnNldCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fbGlzdC5hcHBl
bmQoR2V0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKHN0dWJJbmZvKSk7Cit9CisK
K1BvbHltb3JwaGljR2V0QnlJZExpc3QqIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmZyb20oU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBl
ID09IGFjY2Vzc19nZXRfYnlfaWRfbGlzdCkKKyAgICAgICAgcmV0dXJuIHN0dWJJbmZvLnUuZ2V0
QnlJZExpc3QubGlzdDsKKyAgICAKKyAgICBBU1NFUlQoCisgICAgICAgIHN0dWJJbmZvLmFjY2Vz
c1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmCisgICAgICAgIHx8IHN0dWJJbmZvLmFjY2Vz
c1R5cGUgPT0gYWNjZXNzX3Vuc2V0KTsKKyAgICAKKyAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0
KiByZXN1bHQgPSBuZXcgUG9seW1vcnBoaWNHZXRCeUlkTGlzdChzdHViSW5mbyk7CisgICAgCisg
ICAgc3R1YkluZm8uaW5pdEdldEJ5SWRMaXN0KHJlc3VsdCk7CisgICAgCisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6flBvbHltb3JwaGljR2V0QnlJZExp
c3QoKSB7IH0KKworTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6
OmN1cnJlbnRTbG93UGF0aFRhcmdldCgKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8p
IGNvbnN0Cit7CisgICAgaWYgKGlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRv
U2xvd0Nhc2UpOworICAgIHJldHVybiBtX2xpc3QubGFzdCgpLnN0dWJSb3V0aW5lKCktPmNvZGUo
KS5jb2RlKCk7Cit9CisKK3ZvaWQgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6YWRkQWNjZXNzKGNv
bnN0IEdldEJ5SWRBY2Nlc3MmIGFjY2VzcykKK3sKKyAgICBBU1NFUlQoIWlzRnVsbCgpKTsKKyAg
ICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgcmVzaXppbmcgb3B0aW1pemVzIGZvciBzcGFjZSwgbm90
IHRpbWUuCisgICAgbV9saXN0LnJlc2l6ZVRvRml0KG1fbGlzdC5zaXplKCkgKyAxKTsKKyAgICBt
X2xpc3QubGFzdCgpID0gYWNjZXNzOworfQorCitib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6
OmlzRnVsbCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKHNpemUoKSA8PSBQT0xZTU9SUEhJQ19MSVNU
X0NBQ0hFX1NJWkUpOworICAgIHJldHVybiBzaXplKCkgPT0gUE9MWU1PUlBISUNfTElTVF9DQUNI
RV9TSVpFOworfQorCitib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmlzQWxtb3N0RnVsbCgp
IGNvbnN0Cit7CisgICAgQVNTRVJUKHNpemUoKSA8PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJ
WkUpOworICAgIHJldHVybiBzaXplKCkgPj0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIC0g
MTsKK30KKworYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpkaWRTZWxmUGF0Y2hpbmcoKSBj
b25zdAoreworICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUoKTsgaS0tOykgeworICAgICAgICBp
ZiAoYXQoaSkudHlwZSgpID09IEdldEJ5SWRBY2Nlc3M6OlNpbXBsZUlubGluZSkKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUG9s
eW1vcnBoaWNHZXRCeUlkTGlzdDo6dmlzaXRXZWFrKFZNJiB2bSkgY29uc3QKK3sKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBzaXplKCk7IGktLTspIHsKKyAgICAgICAgaWYgKCFhdChpKS52aXNpdFdl
YWsodm0pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3Jw
aGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTMyICsy
NCwxMDU1IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBvbHltb3Jw
aGljR2V0QnlJZExpc3QuaCIKKyNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgogCiAjaWYg
RU5BQkxFKEpJVCkKIAorI2luY2x1ZGUgIkJpbmFyeVN3aXRjaC5oIgogI2luY2x1ZGUgIkNvZGVC
bG9jay5oIgogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewogCi1HZXRCeUlkQWNjZXNzOjpHZXRCeUlkQWNjZXNzKAotICAg
IFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBQYXNzUmVmUHRyPEpJVFN0
dWJSb3V0aW5lPiBzdHViUm91dGluZSwKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkKLSAgICA6IG1fdHlwZSh0
eXBlKQotICAgICwgbV9zdHJ1Y3R1cmUodm0sIG93bmVyLCBzdHJ1Y3R1cmUpCi0gICAgLCBtX2Nv
bmRpdGlvblNldChjb25kaXRpb25TZXQpCi0gICAgLCBtX3N0dWJSb3V0aW5lKHN0dWJSb3V0aW5l
KQorc3RydWN0IEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSB7CisgICAgQ0NhbGxIZWxwZXJzKiBqaXQg
eyBudWxscHRyIH07CisgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yKiBhbGxvY2F0b3I7Cisg
ICAgc2l6ZV90IG51bWJlck9mUGFkZGluZ0J5dGVzIHsgMCB9OworICAgIFBvbHltb3JwaGljQWNj
ZXNzKiBhY2Nlc3MgeyBudWxscHRyIH07CisgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
IHsgbnVsbHB0ciB9OworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc3VjY2VzczsKKyAgICBD
Q2FsbEhlbHBlcnM6Okp1bXBMaXN0IGZhaWx1cmU7CisgICAgR1BSUmVnIGJhc2VHUFIgeyBJbnZh
bGlkR1BSUmVnIH07CisgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzOworICAgIEdQUlJlZyBzY3Jh
dGNoR1BSIHsgSW52YWxpZEdQUlJlZyB9OworICAgIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2gg
eyBmYWxzZSB9OworICAgIFZlY3RvcjxzdGQ6OmZ1bmN0aW9uPHZvaWQoTGlua0J1ZmZlciYpPiBj
YWxsYmFja3M7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQ7CisgICAgc3RkOjp1bmlxdWVf
cHRyPFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbz4gd2F0Y2hwb2ludHM7CisKKyAgICB2
b2lkIGFkZFdhdGNocG9pbnQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlv
biA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCkpCisgICAgeworICAgICAgICByZXR1cm4gV2F0
Y2hwb2ludE9uU3RydWN0dXJlU3R1YkluZm86OmVuc3VyZVJlZmVyZW5jZUFuZEFkZFdhdGNocG9p
bnQoCisgICAgICAgICAgICB3YXRjaHBvaW50cywgaml0LT5jb2RlQmxvY2soKSwgc3R1YkluZm8s
IGNvbmRpdGlvbik7CisgICAgfQorCisgICAgdm9pZCByZXN0b3JlU2NyYXRjaCgpCisgICAgewor
ICAgICAgICBhbGxvY2F0b3ItPnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoKmppdCwg
bnVtYmVyT2ZQYWRkaW5nQnl0ZXMpOworICAgIH0KKworICAgIHZvaWQgc3VjY2VlZCgpCisgICAg
eworICAgICAgICByZXN0b3JlU2NyYXRjaCgpOworICAgICAgICBzdWNjZXNzLmFwcGVuZChqaXQt
Pmp1bXAoKSk7CisgICAgfQorfTsKKworQWNjZXNzQ2FzZTo6QWNjZXNzQ2FzZSgpCiB7CiB9CiAK
LUdldEJ5SWRBY2Nlc3M6On5HZXRCeUlkQWNjZXNzKCkKK3N0ZDo6dW5pcXVlX3B0cjxBY2Nlc3ND
YXNlPiBBY2Nlc3NDYXNlOjpnZXQoCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NU
eXBlIHR5cGUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgYm9vbCB2aWFQcm94eSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRp
dGlvblNldCwgV2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCwKKyAgICBQcm9wZXJ0eVNsb3Q6
OkdldFZhbHVlRnVuYyBjdXN0b21HZXR0ZXIpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vz
c0Nhc2U+IHJlc3VsdChuZXcgQWNjZXNzQ2FzZSgpKTsKKworICAgIHJlc3VsdC0+bV90eXBlID0g
dHlwZTsKKyAgICByZXN1bHQtPm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgIHJlc3VsdC0+bV9zdHJ1
Y3R1cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKKyAgICByZXN1bHQtPm1fY29uZGl0aW9u
U2V0ID0gY29uZGl0aW9uU2V0OworICAgIAorICAgIGlmICh2aWFQcm94eSB8fCBhZGRpdGlvbmFs
U2V0IHx8IGRvZXNDYWxscygpIHx8IGN1c3RvbUdldHRlcikgeworICAgICAgICByZXN1bHQtPm1f
cmFyZURhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPFJhcmVEYXRhPigpOworICAgICAgICByZXN1bHQt
Pm1fcmFyZURhdGEtPnZpYVByb3h5ID0gdmlhUHJveHk7CisgICAgICAgIHJlc3VsdC0+bV9yYXJl
RGF0YS0+YWRkaXRpb25hbFNldCA9IGFkZGl0aW9uYWxTZXQ7CisgICAgICAgIHJlc3VsdC0+bV9y
YXJlRGF0YS0+Y3VzdG9tQWNjZXNzb3IuZ2V0dGVyID0gY3VzdG9tR2V0dGVyOworICAgIH0KKwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nl
c3NDYXNlOjpyZXBsYWNlKAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
QWNjZXNzQ2FzZT4gcmVzdWx0KG5ldyBBY2Nlc3NDYXNlKCkpOworCisgICAgcmVzdWx0LT5tX3R5
cGUgPSBSZXBsYWNlOworICAgIHJlc3VsdC0+bV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgcmVzdWx0
LT5tX3N0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOworCisgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotR2V0QnlJZEFjY2VzcyBHZXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0dXJlU3R1
YkluZm8oU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQorc3RkOjp1bmlxdWVfcHRyPEFjY2Vz
c0Nhc2U+IEFjY2Vzc0Nhc2U6OnRyYW5zaXRpb24oCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVy
LCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCwKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYg
Y29uZGl0aW9uU2V0KQogewotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBpbml0aWFsU2xvd1Bh
dGggPQotICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChz
dHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKLSAgICAKLSAgICBHZXRCeUlkQWNj
ZXNzIHJlc3VsdDsKLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5hY2Nlc3NUeXBl
ID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZik7Ci0gICAgCi0gICAgcmVzdWx0Lm1fdHlwZSA9IFNp
bXBsZUlubGluZTsKLSAgICByZXN1bHQubV9zdHJ1Y3R1cmUuY29weUZyb20oc3R1YkluZm8udS5n
ZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlKTsKLSAgICByZXN1bHQubV9zdHViUm91dGlu
ZSA9IEpJVFN0dWJSb3V0aW5lOjpjcmVhdGVTZWxmTWFuYWdlZFJvdXRpbmUoaW5pdGlhbFNsb3dQ
YXRoKTsKKyAgICBSRUxFQVNFX0FTU0VSVChvbGRTdHJ1Y3R1cmUgPT0gbmV3U3RydWN0dXJlLT5w
cmV2aW91c0lEKCkpOwogICAgIAorICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1
bHQobmV3IEFjY2Vzc0Nhc2UoKSk7CisKKyAgICByZXN1bHQtPm1fdHlwZSA9IFRyYW5zaXRpb247
CisgICAgcmVzdWx0LT5tX29mZnNldCA9IG9mZnNldDsKKyAgICByZXN1bHQtPm1fc3RydWN0dXJl
LnNldCh2bSwgb3duZXIsIG5ld1N0cnVjdHVyZSk7CisgICAgcmVzdWx0LT5tX2NvbmRpdGlvblNl
dCA9IGNvbmRpdGlvblNldDsKKwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWJvb2wgR2V0QnlJ
ZEFjY2Vzczo6dmlzaXRXZWFrKFZNJiB2bSkgY29uc3QKK3N0ZDo6dW5pcXVlX3B0cjxBY2Nlc3ND
YXNlPiBBY2Nlc3NDYXNlOjpzZXR0ZXIoCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nl
c3NUeXBlIHR5cGUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQs
CisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgUHV0
UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmMgY3VzdG9tU2V0dGVyKQoreworICAgIHN0ZDo6dW5p
cXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nhc2UoKSk7CisKKyAgICByZXN1
bHQtPm1fdHlwZSA9IHR5cGU7CisgICAgcmVzdWx0LT5tX29mZnNldCA9IG9mZnNldDsKKyAgICBy
ZXN1bHQtPm1fc3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7CisgICAgcmVzdWx0
LT5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKKworICAgIGlmIChjdXN0b21TZXR0ZXIp
IHsKKyAgICAgICAgcmVzdWx0LT5tX3JhcmVEYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxSYXJlRGF0
YT4oKTsKKyAgICAgICAgcmVzdWx0LT5tX3JhcmVEYXRhLT5jdXN0b21BY2Nlc3Nvci5zZXR0ZXIg
PSBjdXN0b21TZXR0ZXI7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RkOjp1
bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OmluKAorICAgIFZNJiB2bSwgSlNDZWxs
KiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKKyAgICBjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KQoreworICAgIHN0ZDo6
dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nhc2UoKSk7CisKKyAgICBy
ZXN1bHQtPm1fdHlwZSA9IHR5cGU7CisgICAgcmVzdWx0LT5tX3N0cnVjdHVyZS5zZXQodm0sIG93
bmVyLCBzdHJ1Y3R1cmUpOworICAgIHJlc3VsdC0+bV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25T
ZXQ7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzVHlw
ZT4gQWNjZXNzQ2FzZTo6Z2V0TGVuZ3RoKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlw
ZSB0eXBlKQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEFj
Y2Vzc0Nhc2UoKSk7CisKKyAgICByZXN1bHQtPm1fdHlwZSA9IHR5cGU7CisKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitBY2Nlc3NDYXNlOjp+QWNjZXNzQ2FzZSgpCit7Cit9CisKK3N0ZDo6dW5p
cXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpmcm9tU3RydWN0dXJlU3R1YkluZm8oCisg
ICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7
CisgICAgc3dpdGNoIChzdHViSW5mby5hY2Nlc3NUeXBlKSB7CisgICAgY2FzZSBhY2Nlc3NfZ2V0
X2J5X2lkX3NlbGY6CisgICAgICAgIHJldHVybiBnZXQoCisgICAgICAgICAgICB2bSwgb3duZXIs
IExvYWQsIHN0dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0LCBzdHViSW5mby51LmJ5SWRTZWxmLmJh
c2VPYmplY3RTdHJ1Y3R1cmUpOworCisgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2U6
CisgICAgICAgIHJldHVybiByZXBsYWNlKHZtLCBvd25lciwgc3R1YkluZm8udS5ieUlkU2VsZi5i
YXNlT2JqZWN0U3RydWN0dXJlLCBzdHViSW5mby51LmJ5SWRTZWxmLm9mZnNldCk7CisKKyAgICBk
ZWZhdWx0OgorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9Cit9CisKK2Jvb2wgQWNjZXNz
Q2FzZTo6Z3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2soKSBjb25zdAoreworICAgIGlmICh2aWFQcm94
eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAg
IGNhc2UgQXJyYXlMZW5ndGg6CisgICAgY2FzZSBTdHJpbmdMZW5ndGg6CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisK
K2Jvb2wgQWNjZXNzQ2FzZTo6Y2FuUmVwbGFjZShjb25zdCBBY2Nlc3NDYXNlJiBvdGhlcikKK3sK
KyAgICAvLyBXZSBjb3VsZCBkbyBhIGxvdCBiZXR0ZXIgaGVyZSwgYnV0IGZvciBub3cgd2UganVz
dCBkbyBzb21ldGhpbmcgb2J2aW91cy4KKworICAgIGlmICghZ3VhcmRlZEJ5U3RydWN0dXJlQ2hl
Y2soKSB8fCAhb3RoZXIuZ3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2soKSkgeworICAgICAgICAvLyBG
SVhNRTogSW1wbGVtZW50IHRoaXMhCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICByZXR1cm4gc3RydWN0dXJlKCkgPT0gb3RoZXIuc3RydWN0dXJlKCk7Cit9CisKK3ZvaWQgQWNj
ZXNzQ2FzZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgK
KyAgICAgICAgbV90eXBlLCAiOihzdHJ1Y3R1cmUgPSAiLCBwb2ludGVyRHVtcChtX3N0cnVjdHVy
ZS5nZXQoKSksICIsIG9mZnNldCA9ICIsIG1fb2Zmc2V0LAorICAgICAgICAiLCBjb25kaXRpb25z
ID0gIiwgbV9jb25kaXRpb25TZXQpOworCisgICAgaWYgKFJhcmVEYXRhKiByYXJlRGF0YSA9IG1f
cmFyZURhdGEuZ2V0KCkpIHsKKyAgICAgICAgb3V0LnByaW50KAorICAgICAgICAgICAgIiwgdmlh
UHJveHkgPSAiLCByYXJlRGF0YS0+dmlhUHJveHksCisgICAgICAgICAgICAiLCBhZGRpdGlvbmFs
U2V0ID0gIiwgUmF3UG9pbnRlcihyYXJlRGF0YS0+YWRkaXRpb25hbFNldC5nZXQoKSksCisgICAg
ICAgICAgICAiLCBjYWxsTGlua0luZm8gPSAiLCBSYXdQb2ludGVyKHJhcmVEYXRhLT5jYWxsTGlu
a0luZm8uZ2V0KCkpLAorICAgICAgICAgICAgIiwgY3VzdG9tQWNjZXNzb3IgPSAiLCBSYXdQb2lu
dGVyKHJhcmVEYXRhLT5jdXN0b21BY2Nlc3Nvci5vcGFxdWUpKTsKKyAgICB9CisKKyAgICBvdXQu
cHJpbnQoIikiKTsKK30KKworYm9vbCBBY2Nlc3NDYXNlOjp2aXNpdFdlYWsoVk0mIHZtKSBjb25z
dAogewogICAgIGlmIChtX3N0cnVjdHVyZSAmJiAhSGVhcDo6aXNNYXJrZWQobV9zdHJ1Y3R1cmUu
Z2V0KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFtX2NvbmRpdGlvblNldC5h
cmVTdGlsbExpdmUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghbV9zdHViUm91
dGluZS0+dmlzaXRXZWFrKHZtKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3Jh
cmVEYXRhICYmIG1fcmFyZURhdGEtPmNhbGxMaW5rSW5mbykKKyAgICAgICAgbV9yYXJlRGF0YS0+
Y2FsbExpbmtJbmZvLT52aXNpdFdlYWsodm0pOwogICAgIHJldHVybiB0cnVlOwogfQogCi1Qb2x5
bW9ycGhpY0dldEJ5SWRMaXN0OjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbykKK3ZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCisgICAg
QWNjZXNzR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCYgZmFs
bFRocm91Z2gpCiB7Ci0gICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0
KQorICAgIENDYWxsSGVscGVycyYgaml0ID0gKnN0YXRlLmppdDsKKworICAgIHN3aXRjaCAobV90
eXBlKSB7CisgICAgY2FzZSBBcnJheUxlbmd0aDogeworICAgICAgICBBU1NFUlQoIXZpYVByb3h5
KCkpOworICAgICAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpT
Q2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgZmFsbFRo
cm91Z2guYXBwZW5kKAorICAgICAgICAgICAgaml0LmJyYW5jaFRlc3QzMihDQ2FsbEhlbHBlcnM6
Olplcm8sIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKElzQXJyYXkpKSk7
CisgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgKKyAgICAgICAgICAgIGppdC5icmFuY2hUZXN0
MzIoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpaZXJvLCBzY3JhdGNoR1BSLCBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMihJbmRleGluU2hhcGVNYXNrKSkpOworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBjYXNlIFN0cmluZ0xlbmd0aDogeworICAgICAgICBBU1NFUlQoIXZp
YVByb3h5KCkpOworICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCisgICAgICAgICAgICBqaXQu
YnJhbmNoOCgKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAorICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnR5cGVJbmZv
VHlwZU9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihTdHJpbmdUeXBlKSkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBkZWZhdWx0OiB7
CisgICAgICAgIGlmICh2aWFQcm94eSgpKSB7CisgICAgICAgICAgICBmYWxsVGhyb3VnaC5hcHBl
bmQoCisgICAgICAgICAgICAgICAgaml0LmJyYW5jaDgoCisgICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6Tm90RXF1YWwsCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
QWRkcmVzcyhzdGF0ZS5iYXNlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwKKyAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoUHVyZUZvcndhcmRp
bmdQcm94eVR5cGUpKSk7CisKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKAorICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdGF0ZS5iYXNlR1BSLCBKU1Byb3h5Ojp0YXJnZXRP
ZmZzZXQoKSksCisgICAgICAgICAgICAgICAgc3RhdGUuc2NyYXRjaEdQUik7CisKKyAgICAgICAg
ICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgKKyAgICAgICAgICAgICAgICBqaXQuYnJhbmNoU3RydWN0
dXJlKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAorICAgICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RhdGUuc2NyYXRjaEdQUiwgSlND
ZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJl
KCkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgK
KyAgICAgICAgICAgICAgICBqaXQuYnJhbmNoU3RydWN0dXJlKAorICAgICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3Moc3RhdGUuYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwK
KyAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlKCkpKTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICB9IH07CisKKyAgICBnZW5lcmF0ZShzdGF0ZSk7Cit9CisKK3ZvaWQgQWNjZXNz
Q2FzZTo6Z2VuZXJhdGUoQWNjZXNzR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkKK3sKKyAgICBDQ2Fs
bEhlbHBlcnMmIGppdCA9ICpzdGF0ZS5qaXQ7CisgICAgVk0mIHZtID0gKmppdC52bSgpOworICAg
IFBvbHltb3JwaGljQWNjZXNzJiBhY2Nlc3MgPSAqc3RhdGUuYWNjZXNzOworICAgIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbyA9ICpzdGF0ZS5zdHViSW5mbzsKKyAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IGppdC5jb2RlQmxvY2soKTsKKyAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9
ICpzdGF0ZS5pZGVudDsKKyAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSBzdGF0ZS52YWx1ZVJl
Z3M7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0ZS5iYXNlR1BSOworICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gc3RhdGUuc2NyYXRjaEdQUjsKKworICAgIEFTU0VSVChtX2NvbmRpdGlvblNldC5z
dHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgp
KTsKKworICAgIGlmIChzdHJ1Y3R1cmUoKS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgp
IHx8IG1fY29uZGl0aW9uU2V0Lm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkKKyAgICAg
ICAgdm0ucmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVydHkoaWRlbnQsIHN0YXRlLmFk
ZFdhdGNocG9pbnQoKSk7CisKKyAgICBpZiAoYWRkaXRpb25hbFNldCgpKQorICAgICAgICBhZGRp
dGlvbmFsU2V0KCktPmFkZChzdGF0ZS5hZGRXYXRjaHBvaW50KCkpOworCisgICAgZm9yIChjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogbV9jb25kaXRpb25TZXQpIHsK
KyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjb25kaXRpb24ub2JqZWN0KCktPnN0cnVj
dHVyZSgpOworCisgICAgICAgIGlmIChjb25kaXRpb24uaXNXYXRjaGFibGVBc3N1bWluZ0ltcHVy
ZVByb3BlcnR5V2F0Y2hwb2ludCgpKSB7CisgICAgICAgICAgICBzdHJ1Y3R1cmUtPmFkZFRyYW5z
aXRpb25XYXRjaHBvaW50KHN0YXRlLmFkZFdhdGNocG9pbnQoY29uZGl0aW9uKSk7CisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbmRp
dGlvbi5zdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hw
b2ludChzdHJ1Y3R1cmUpKTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKGNvbmRpdGlvbi5vYmplY3QoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBzdGF0ZS5m
YWlsdXJlLmFwcGVuZCgKKyAgICAgICAgICAgIGppdC5icmFuY2hTdHJ1Y3R1cmUoCisgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKKyAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwK
KyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUpKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKG1fdHlw
ZSkgeworICAgIGNhc2UgSW5IaXQ6CisgICAgY2FzZSBJbk1pc3M6CisgICAgICAgIGppdC5ib3hC
b29sZWFuUGF5bG9hZChtX3R5cGUgPT0gSW5IaXQsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwor
ICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgTWlz
czoKKyAgICAgICAgaml0Lm1vdmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgdmFsdWVSZWdz
KTsKKyAgICAgICAgc3RhdGUuc3VjY2VlZCgpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNl
IExvYWQ6CisgICAgY2FzZSBHZXR0ZXI6CisgICAgY2FzZSBTZXR0ZXI6CisgICAgY2FzZSBDdXN0
b21HZXR0ZXI6CisgICAgY2FzZSBDdXN0b21TZXR0ZXI6IHsKKyAgICAgICAgaWYgKGlzVmFsaWRP
ZmZzZXQobV9vZmZzZXQpKSB7CisgICAgICAgICAgICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmU7
CisgICAgICAgICAgICBpZiAobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKQorICAgICAgICAgICAg
ICAgIGN1cnJTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgY3VyclN0cnVjdHVyZSA9IG1fY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9u
KCkub2JqZWN0KCktPnN0cnVjdHVyZSgpOworICAgICAgICAgICAgY3VyclN0cnVjdHVyZS0+c3Rh
cnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBvZmZzZXQpOworICAgICAgICB9
CisKKyAgICAgICAgR1BSUmVnIGJhc2VGb3JHZXRHUFI7CisgICAgICAgIGlmICh2aWFQcm94eSgp
KSB7CisgICAgICAgICAgICBiYXNlRm9yR2V0R1BSID0gdmFsdWVSZWdzLnBheWxvYWRHUFIoKTsK
KyAgICAgICAgICAgIGppdC5sb2FkUHRyKAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
QWRkcmVzcyhiYXNlR1BSLCBKU1Byb3h5Ojp0YXJnZXRPZmZzZXQoKSksCisgICAgICAgICAgICAg
ICAgYmFzZUZvckdldEdQUik7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgYmFzZUZvckdl
dEdQUiA9IGJhc2VHUFI7CisKKyAgICAgICAgR1BSUmVnIGJhc2VGb3JBY2Nlc3NHUFI7CisgICAg
ICAgIGlmICghY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgaml0Lm1vdmUo
CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNvbmRpdGlvblNl
dC5zbG90QmFzZUNvbmRpdGlvbigpLm9iamVjdCgpKSwKKyAgICAgICAgICAgICAgICBzY3JhdGNo
R1BSKTsKKyAgICAgICAgICAgIGJhc2VGb3JBY2Nlc3NHUFIgPSBzY3JhdGNoR1BSOworICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgIGJhc2VGb3JBY2Nlc3NHUFIgPSBiYXNlRm9yR2V0R1BSOwor
CisgICAgICAgIEdQUlJlZyBsb2FkZWRWYWx1ZUdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAg
IGlmIChtX3R5cGUgIT0gQ3VzdG9tR2V0dGVyICYmIG1fdHlwZSAhPSBDdXN0b21TZXR0ZXIpIHsK
KyAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gTG9hZCkKKyAgICAgICAgICAgICAgICBsb2FkZWRW
YWx1ZUdQUiA9IHZhbHVlUmVncy5wYXlsb2FkR1BSKCk7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIgPSBzY3JhdGNoR1BSOworCisgICAgICAgICAgICBH
UFJSZWcgc3RvcmFnZUdQUjsKKyAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChvZmZzZXQp
KQorICAgICAgICAgICAgICAgIHN0b3JhZ2VHUFIgPSBiYXNlRm9yQWNjZXNzR1BSOworICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoCisgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlRm9yQWNjZXNzR1BSLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUik7
CisgICAgICAgICAgICAgICAgc3RvcmFnZUdQUiA9IGxvYWRlZFZhbHVlR1BSOworICAgICAgICAg
ICAgfQorCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgIGppdC5sb2FkNjQoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKG9mZnNldCkp
LCBsb2FkZWRWYWx1ZUdQUik7CisjZWxzZQorICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBMb2Fk
KSB7CisgICAgICAgICAgICAgICAgaml0LmxvYWQzMigKKyAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKG9mZnNl
dCkgKyBUYWdPZmZzZXQpLAorICAgICAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MudGFnR1BSKCkp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaml0LmxvYWQzMigKKyAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RvcmFnZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uo
b2Zmc2V0KSArIFBheWxvYWRPZmZzZXQpLAorICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BS
KTsKKyNlbmRpZgorICAgICAgICB9CisKKyAgICAgICAgLy8gU3R1ZmYgZm9yIGN1c3RvbSBnZXR0
ZXJzLgorICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9uQ2FsbDsKKyAgICAgICAg
Q0NhbGxIZWxwZXJzOjpDYWxsIGhhbmRsZXJDYWxsOworCisgICAgICAgIC8vIFN0dWZmIGZvciBK
UyBnZXR0ZXJzLgorICAgICAgICBDQ2FsbEhlbHBlcnM6OkRhdGFMYWJlbFB0ciBhZGRyZXNzT2ZM
aW5rRnVuY3Rpb25DaGVjazsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGZhc3RQYXRoQ2Fs
bDsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHNsb3dQYXRoQ2FsbDsKKworICAgICAgICBD
Q2FsbEhlbHBlcnM6Okp1bXAgc3VjY2VzczsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGZh
aWw7CisgICAgICAgIGlmIChtX3R5cGUgIT0gTG9hZCAmJiBtX3R5cGUgIT0gTWlzcykgeworICAg
ICAgICAgICAgLy8gTmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3aGVuZXZlciB0aGlzIGNhbGwgaXMg
bWFkZSBpbiB0aGUgZnV0dXJlLCB3ZSByZW1lbWJlciB0aGUKKyAgICAgICAgICAgIC8vIHBsYWNl
IHRoYXQgd2UgbWFkZSBpdCBmcm9tLgorICAgICAgICAgICAgaml0LnN0b3JlMzIoCisgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3R1YkluZm8uY2FsbFNpdGVJbmRl
eC5iaXRzKCkpLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKHN0YXRpY19j
YXN0PFZpcnR1YWxSZWdpc3Rlcj4oSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKKworICAgICAg
ICAgICAgaWYgKG1fdHlwZSA9PSBHZXR0ZXIgfHwgbV90eXBlID09IFNldHRlcikgeworICAgICAg
ICAgICAgICAgIC8vIENyZWF0ZSBhIEpTIGNhbGwgdXNpbmcgYSBKUyBjYWxsIGlubGluZSBjYWNo
ZS4gQXNzdW1lIHRoYXQ6CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAt
IFNQIGlzIGFsaWduZWQgYW5kIHJlcHJlc2VudHMgdGhlIGV4dGVudCBvZiB0aGUgY2FsbGluZyBj
b21waWxlcidzIHN0YWNrIHVzYWdlLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAg
ICAgLy8gLSBGUCBpcyBzZXQgY29ycmVjdGx5IChpLmUuIGl0IHBvaW50cyB0byB0aGUgY2FsbGVy
J3MgY2FsbCBmcmFtZSBoZWFkZXIpLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAg
ICAgLy8gLSBTUCAtIEZQIGlzIGFuIGFsaWduZWQgZGlmZmVyZW5jZS4KKyAgICAgICAgICAgICAg
ICAvLworICAgICAgICAgICAgICAgIC8vIC0gQW55IGJ5dGUgYmV0d2VlbiBGUCAoZXhjbHVzaXZl
KSBhbmQgU1AgKGluY2x1c2l2ZSkgY291bGQgYmUgbGl2ZSBpbiB0aGUgY2FsbGluZworICAgICAg
ICAgICAgICAgIC8vICAgY29kZS4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAg
IC8vIFRoZXJlZm9yZSwgd2UgdGVtcG9yYXJpbHkgZ3JvdyB0aGUgc3RhY2sgZm9yIHRoZSBwdXJw
b3NlIG9mIHRoZSBjYWxsIGFuZCB0aGVuCisgICAgICAgICAgICAgICAgLy8gc2hyaW5rIGl0IGFm
dGVyLgorCisgICAgICAgICAgICAgICAgbV9yYXJlRGF0YS0+Y2FsbExpbmtJbmZvID0gc3RkOjpt
YWtlX3VuaXF1ZTxDYWxsTGlua0luZm8+KCk7CisgICAgICAgICAgICAgICAgbV9yYXJlRGF0YS0+
c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgc3R1YkluZm8uY29kZU9yaWdpbiwgbG9hZGVk
VmFsdWVHUFIpOworCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25l
OworCisgICAgICAgICAgICAgICAgLy8gVGhlcmUgaXMgYSAidGhpcyIgYXJndW1lbnQuCisgICAg
ICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZQYXJhbWV0ZXJzID0gMTsKKyAgICAgICAgICAg
ICAgICAvLyAuLi4gYW5kIGEgdmFsdWUgYXJndW1lbnQgaWYgd2UncmUgY2FsbGluZyBhIHNldHRl
ci4KKyAgICAgICAgICAgICAgICBpZiAobV90eXBlID09IFNldHRlcikKKyAgICAgICAgICAgICAg
ICAgICAgbnVtYmVyT2ZQYXJhbWV0ZXJzKys7CisKKyAgICAgICAgICAgICAgICAvLyBHZXQgdGhl
IGFjY2Vzc29yOyBpZiB0aGVyZSBhaW4ndCBvbmUgdGhlbiB0aGUgcmVzdWx0IGlzIGpzVW5kZWZp
bmVkKCkuCisgICAgICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBTZXR0ZXIpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaml0LmxvYWRQdHIoCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MobG9hZGVkVmFsdWVHUFIsIEdldHRlclNldHRlcjo6b2Zmc2V0T2ZTZXR0
ZXIoKSksCisgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUik7CisgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoCisgICAg
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobG9hZGVkVmFsdWVHUFIs
IEdldHRlclNldHRlcjo6b2Zmc2V0T2ZHZXR0ZXIoKSksCisgICAgICAgICAgICAgICAgICAgICAg
ICBsb2FkZWRWYWx1ZUdQUik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpKdW1wIHJldHVyblVuZGVmaW5lZCA9IGppdC5icmFuY2hUZXN0UHRyKAor
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Olplcm8sIGxvYWRlZFZhbHVlR1BSKTsK
KworICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mUmVnc0ZvckNhbGwgPSBKU1N0YWNr
OjpDYWxsRnJhbWVIZWFkZXJTaXplICsgbnVtYmVyT2ZQYXJhbWV0ZXJzOworCisgICAgICAgICAg
ICAgICAgdW5zaWduZWQgbnVtYmVyT2ZCeXRlc0ZvckNhbGwgPQorICAgICAgICAgICAgICAgICAg
ICBudW1iZXJPZlJlZ3NGb3JDYWxsICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihDYWxsZXJG
cmFtZUFuZFBDKTsKKworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFsaWduZWROdW1iZXJPZkJ5
dGVzRm9yQ2FsbCA9CisgICAgICAgICAgICAgICAgICAgIFdURjo6cm91bmRVcFRvTXVsdGlwbGVP
ZihzdGFja0FsaWdubWVudEJ5dHdzKCksIG51bWJlck9mQnl0ZXNGb3JDYWxsKTsKKworICAgICAg
ICAgICAgICAgIGppdC5zdWJQdHIoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2FsbCksCisgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzIGNhbGxlZUZyYW1lID0gQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJl
Z2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXpl
b2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKKworICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKAor
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihudW1iZXJPZlBh
cmFtZXRlcnMpLAorICAgICAgICAgICAgICAgICAgICBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KEpT
U3RhY2s6OkFyZ3VtZW50Q291bnQgKiBzaXplb2YoUmVnaXN0ZXIpICsgUGF5bG9hZE9mZnNldCkp
OworCisgICAgICAgICAgICAgICAgaml0LnN0b3JlQ2VsbCgKKyAgICAgICAgICAgICAgICAgICAg
bG9hZGVkVmFsdWVHUFIsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoSlNTdGFjazo6Q2FsbGVlICog
c2l6ZW9mKFJlZ2lzdGVyKSkpOworCisgICAgICAgICAgICAgICAgaml0LnN0b3JlQ2VsbCgKKyAg
ICAgICAgICAgICAgICAgICAgYmFzZUZvckdldEdQUiwKKyAgICAgICAgICAgICAgICAgICAgY2Fs
bGVlRnJhbWUud2l0aE9mZnNldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwKS5vZmZzZXQo
KSAqIHNpemVvZihSZWdpc3RlcikpKTsKKworICAgICAgICAgICAgICAgIGlmIChraW5kID09IENh
bGxTZXR0ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUoCisgICAgICAg
ICAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICBjYWxs
ZWVGcmFtZS53aXRoT2Zmc2V0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50KDEpLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBzbG93
Q2FzZSA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2goCisgICAgICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6Tm90RXF1YWwsIGxvYWRlZFZhbHVlR1BSLCBhZGRyZXNzT2ZMaW5rRnVuY3Rpb25D
aGVjaywKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKDAp
KTsKKworICAgICAgICAgICAgICAgIGZhc3RQYXRoQ2FsbCA9IGppdC5uZWFyQ2FsbCgpOworCisg
ICAgICAgICAgICAgICAgaml0LmFkZFB0cigKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxsKSwKKyAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAg
ICAgICAgICAgaWYgKGtpbmQgPT0gQ2FsbEdldHRlcikKKyAgICAgICAgICAgICAgICAgICAgaml0
LnNldHVwUmVzdWx0cyh2YWx1ZVJlZ3MpOworCisgICAgICAgICAgICAgICAgZG9uZS5hcHBlbmQo
aml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2UubGluaygmaml0KTsKKworICAg
ICAgICAgICAgICAgIGppdC5tb3ZlKGxvYWRlZFZhbHVlR1BSLCBHUFJJbmZvOjpyZWdUMCk7Cisj
aWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgICAgICAgICAvLyBXZSAqYWx3YXlzKiBrbm93
IHRoYXQgdGhlIGdldHRlci9zZXR0ZXIsIGlmIG5vbi1udWxsLCBpcyBhIGNlbGwuCisgICAgICAg
ICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2Vs
bFRhZyksIEdQUkluZm86OnJlZ1QxKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX3JhcmVEYXRhLT5jYWxsTGlua0luZm8uZ2V0
KCkpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsID0gaml0
Lm5lYXJDYWxsKCk7CisKKyAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAorICAgICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihhbGlnbmVkTnVtYmVyT2ZCeXRlc0Zv
ckNhbGwpLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKKyAgICAgICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsR2V0dGVyKQorICAgICAg
ICAgICAgICAgICAgICBqaXQuc2V0dXBSZXN1bHRzKHZhbHVlUmVncyk7CisKKyAgICAgICAgICAg
ICAgICBkb25lLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm5VbmRl
ZmluZWQubGluaygmaml0KTsKKworICAgICAgICAgICAgICAgIGlmIChraW5kID09IENhbGxHZXR0
ZXIpCisgICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVk
KCksIHZhbHVlUmVncyk7CisKKyAgICAgICAgICAgICAgICBkb25lLmxpbmsoJmppdCk7CisKKyAg
ICAgICAgICAgICAgICBzdGF0ZS5jYWxsYmFja3MuYXBwZW5kKAorICAgICAgICAgICAgICAgICAg
ICBbJl0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1fcmFyZURhdGEtPmNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucygKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChzbG93UGF0aENh
bGwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZihh
ZGRyZXNzT2ZMaW5rRnVuY3Rpb25DaGVjayksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoZmFzdFBhdGhDYWxsKSk7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluaygKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzbG93UGF0aENhbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0
aW9uTGFiZWwodm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsK
KyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIC8vIGdldHRlcjogRW5jb2RlZEpTVmFsdWUgKCpHZXRWYWx1ZUZ1bmMpKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpOworICAgICAgICAgICAgICAgIC8vIHNldHRlcjogdm9pZCAoKlB1dFZhbHVlRnVuYyko
RXhlY1N0YXRlKiwgSlNPYmplY3QqIGJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNPYmplY3QsIEVu
Y29kZWRKU1ZhbHVlIHZhbHVlKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgICAg
IGlmIChraW5kID09IENhbGxDdXN0b21HZXR0ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgaml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIGJh
c2VGb3JBY2Nlc3NHUFIsIGJhc2VGb3JHZXRHUFIsCisgICAgICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIocHJvcGVydHlOYW1lLmltcGwoKSkpOworICAgICAg
ICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKGJhc2VGb3JBY2Nlc3NHUFIsIGJhc2VGb3JHZXRHUFIsIHZhbHVlUmVncy5n
cHIoKSk7CisjZWxzZQorICAgICAgICAgICAgICAgIGlmIChraW5kID09IENhbGxDdXN0b21HZXR0
ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VGb3JBY2Nlc3NHUFIsIGJhc2VGb3JHZXRH
UFIsCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpDZWxsVGFnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cihwcm9wZXJ0eU5hbWUuaW1wbCgpKSk7CisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VGb3JBY2Nlc3NHUFIsIGJhc2VGb3JHZXRH
UFIsCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpDZWxsVGFnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlUmVncy5wYXls
b2FkR1BSKCksIHZhbHVlUmVncy50YWdHUFIoKSk7CisgICAgICAgICAgICAgICAgfQorI2VuZGlm
CisgICAgICAgICAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCAmdm0tPnRvcENhbGxGcmFtZSk7CisKKyAgICAgICAgICAgICAgICBvcGVyYXRpb25DYWxsID0g
aml0LmNhbGwoKTsKKyAgICAgICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsQ3VzdG9tR2V0dGVy
KQorICAgICAgICAgICAgICAgICAgICBqaXQuc2V0dXBSZXN1bHRzKHZhbHVlUmVncyk7CisgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIG5vRXhjZXB0aW9uID0KKyAgICAgICAgICAg
ICAgICAgICAgaml0LmVtaXRFeGNlcHRpb25DaGVjayhDQ2FsbEhlbHBlcnM6OkludmVydGVkRXhj
ZXB0aW9uQ2hlY2spOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaml0LnNldHVwQXJn
dW1lbnRzKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih2bSksIEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBoYW5kbGVyQ2FsbCA9IGppdC5jYWxsKCk7Cisg
ICAgICAgICAgICAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIG5vRXhjZXB0aW9uLmxpbmsoJmppdCk7CisKKyAgICAgICAgICAg
ICAgICBzdGF0ZS5jYWxsYmFja3MuYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICBbJl0gKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZm
ZXIubGluayhvcGVyYXRpb25DYWxsLCBGdW5jdGlvblB0cihtX3JhcmVEYXRhLT5jdXN0b21BY2Nl
c3Nvci5vcGFxdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayho
YW5kbGVyQ2FsbCwgbG9va3VwRXhjZXB0aW9uSGFuZGxlcik7CisgICAgICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsK
ICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNhc2UgUmVwbGFjZTogeworICAgICAgICBp
ZiAoaXNJbmxpbmVPZmZzZXQobV9vZmZzZXQpKSB7CisgICAgICAgICAgICBqaXQuc3RvcmVWYWx1
ZSgKKyAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MsCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgICAgICAgICBiYXNlR1BSLAorICAgICAgICAgICAg
ICAgICAgICBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKworICAgICAgICAgICAg
ICAgICAgICBvZmZzZXRJbklubGluZVN0b3JhZ2UobV9vZmZzZXQpICogc2l6ZW9mKEpTVmFsdWUp
KSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRj
aEdQUik7CisgICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSgKKyAgICAgICAgICAgICAgICB2YWx1
ZVJlZ3MsCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAg
ICAgICAgICAgICBzY3JhdGNoR1BSMSwgb2Zmc2V0SW5CdXR0ZXJmbHkobV9vZmZzZXQpICogc2l6
ZW9mKEpTVmFsdWUpKSk7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGUuc3VjY2VlZCgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgY2FzZSBUcmFuc2l0aW9uOiB7CisgICAgICAgIC8v
IEFjY2Vzc0Nhc2U6OnRyYW5zaXRpb24oKSBzaG91bGQgaGF2ZSByZXR1cm5lZCBudWxsLgorICAg
ICAgICBSRUxFQVNFX0FTU0VSVChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyA+PSA2IHx8ICFz
dHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSB8fCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSA9PSBuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKCFvbGRTdHJ1Y3R1cmUtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVy
KCkpOworCisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CisKKyAgICAg
ICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcihzdHViSW5mby5wYXRjaC51c2Vk
UmVnaXN0ZXJzKTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2soYmFzZUdQUik7CisgICAgICAgIGFs
bG9jYXRvci5sb2NrKHZhbHVlUmVncyk7CisgICAgICAgIGFsbG9jYXRvci5sb2NrKHNjcmF0Y2hH
UFIpOworCisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNj
cmF0Y2hHUFIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIzOworICAgICAgICBpZiAobmV3
U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlKCktPm91dE9mTGlu
ZUNhcGFjaXR5KCkKKyAgICAgICAgICAgICYmIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0
eSgpKQorICAgICAgICAgICAgc2NyYXRjaEdQUjMgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNo
R1BSKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIzID0gSW52YWxpZEdQ
UlJlZzsKKworICAgICAgICBzaXplX3QgbnVtYmVyT2ZQYWRkaW5nQnl0ZXMgPSBhbGxvY2F0ZS5w
cmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhqaXQpOworCisgICAgICAgIEFTU0VSVChz
dHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7
CisKKyAgICAgICAgYm9vbCBzY3JhdGNoR1BSSGFzU3RvcmFnZSA9IGZhbHNlOworCisgICAgICAg
IGlmIChuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBzdHJ1Y3R1cmUoKS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgeworICAgICAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBuZXdT
dHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKKyAgICAg
ICAgICAgIENvcGllZEFsbG9jYXRvciogY29waWVkQWxsb2NhdG9yID0gJnZtLT5oZWFwLnN0b3Jh
Z2VBbGxvY2F0b3IoKTsKKworICAgICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5l
Q2FwYWNpdHkpIHsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cigmY29waWVkQWxsb2NhdG9y
LT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIHNsb3dQ
YXRoLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgaml0LmJyYW5jaFN1YlB0cigKKyAgICAg
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6U2lnbmVkLCBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRjaEdQUikpOworICAgICAgICAgICAgICAgIGppdC5z
dG9yZVB0cihzY3JhdGNoR1BSLCAmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcp
OworICAgICAgICAgICAgICAgIGppdC5uZWdQdHIoc2NyYXRjaEdQUik7CisgICAgICAgICAgICAg
ICAgaml0LmFkZFB0cigKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBYnNvbHV0
ZUFkZHJlc3MoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UGF5bG9hZEVuZCksIHNjcmF0Y2hH
UFIpOworICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoc2l6ZW9mKEpTVmFsdWUpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIHNpemVfdCBvbGRTaXplID0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOworICAgICAgICAgICAgICAgIEFTU0VSVChuZXdT
aXplID4gb2xkU2l6ZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0
cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgc2NyYXRjaEdQUjMpOworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKCZjb3BpZWRB
bGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZywgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAg
ICAgc2xvd1BhdGguYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICBqaXQuYnJhbmNoU3ViUHRy
KAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpTaWduZWQsIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BSKSk7CisgICAgICAgICAgICAg
ICAgaml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIsICZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJl
bWFpbmluZyk7CisgICAgICAgICAgICAgICAgaml0Lm5lZ1B0cihzY3JhdGNoR1BSKTsKKyAgICAg
ICAgICAgICAgICBqaXQuYWRkUHRyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OkFic29sdXRlQWRkcmVzcygmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRQYXlsb2FkRW5kKSwg
c2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihzaXplb2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAg
ICAvLyBXZSBoYXZlIHNjcmF0Y2hHUFIgPSBuZXcgc3RvcmFnZSwgc2NyYXRjaEdQUjMgPSBvbGQg
c3RvcmFnZSwKKyAgICAgICAgICAgICAgICAvLyBzY3JhdGNoR1BSMiA9IGF2YWlsYWJsZQorICAg
ICAgICAgICAgICAgIGZvciAoc2l6ZV90IG9mZnNldCA9IDA7IG9mZnNldCA8IG9sZFNpemU7IG9m
ZnNldCArPSBzaXplb2Yodm9pZCopKSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRy
KAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2Yodm9pZCopKSksCisgICAg
ICAgICAgICAgICAgICAgICAgICBzY3JhdGNoR1BSMik7CisgICAgICAgICAgICAgICAgICAgIGpp
dC5zdG9yZVB0cigKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNjcmF0Y2hHUFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLXN0
YXRpY19jYXN0PHB0cmRpZmZfdD4ob2Zmc2V0ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZv
aWQqKSkpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYnNhc2VHUFIs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOworICAgICAgICAgICAgc2NyYXRjaEdQUkhh
c1N0b3JhZ2UgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgdWludDMyX3Qgc3RydWN0dXJl
Qml0cyA9IGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oc3RydWN0dXJlLT5pZCgpKTsKKyAgICAgICAg
aml0LnN0b3JlMzIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3Ry
dWN0dXJlQml0cyksCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwg
SlNDZWxsOnN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKKworICAgICAgICBpZiAoaXNJbmxpbmVPZmZz
ZXQobV9vZmZzZXQpKSB7CisgICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSgKKyAgICAgICAgICAg
ICAgICB2YWx1ZVJlZ3MsCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAor
ICAgICAgICAgICAgICAgICAgICBiYXNlR1BSLAorICAgICAgICAgICAgICAgICAgICBKU09iamVj
dDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKworICAgICAgICAgICAgICAgICAgICBvZmZzZXRJ
bklubGluZVN0b3JhZ2UobV9vZmZzZXQgKiBzaXplb2YoSlNWYWx1ZSkpKSk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBpZiAoIXNjcmF0Y2hHUFJIYXNTdG9yYWdlKQorICAgICAgICAg
ICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGppdC5zdG9y
ZVZhbHVlKAorICAgICAgICAgICAgICAgIHZhbHVlUmVncywKKyAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkobV9vZmZzZXQp
ICogc2l6ZW9mKEpTVmFsdWUpKSk7CisgICAgICAgIH0KKworICAgICAgICBTY3JhdGNoQnVmZmVy
KiBzY3JhdGNoQnVmZmVyID0gbnVsbHB0cjsKKyAgICAgICAgaWYgKG5ld1N0cnVjdHVyZSgpLT5v
dXRPZkxpbmVDYXBhY2l0eSgpICE9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKQor
ICAgICAgICAgICAgc2NyYXRjaEJ1ZmZlciA9IHZtLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShhbGxv
Y2F0b3IuZGVzaXJlZFNjcmF0Y2hCdWZmZXJTaXplRm9yQ2FsbCgpKTsKKworI2lmIEVOQUJMRShH
R0MpCisgICAgICAgIGlmIChuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBz
dHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgeworICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpDYWxsIGNhbGxGbHVzaFdyaXRlQmFycmllckJ1ZmZlcjsKKyAgICAgICAgICAgIENDYWxs
SGVscGVyczo6SnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gaml0Lmp1bXBJZklzUmVt
ZW1iZXJlZE9ySW5FZGVuKGJhc2VHUFIpOworICAgICAgICAgICAgV3JpdGVCYXJyaWVyQnVmZmVy
JiB3cml0ZUJhcnJpZXJCdWZmZXIgPSBqaXQudm0oKS0+aGVhcC53cml0ZUJhcnJpZXJCdWZmZXIo
KTsKKyAgICAgICAgICAgIGppdC5sb2FkMzIod3JpdGVCYXJyaWVyQnVmZmVyLmN1cnJlbnRJbmRl
eEFkZHJlc3MoKSwgc2NyYXRjaEdQUjIpOworICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
IG5lZWRUb0ZsdXNoID0KKyAgICAgICAgICAgICAgICBqaXQuYnJhbmNoMzIoCisgICAgICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBzY3JhdGNoR1BSMiwKKyAgICAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIod3JpdGVCYXJyaWVyQnVm
ZmVyLmNhcGFjaXR5KCkpKTsKKworICAgICAgICAgICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoR1BSMik7CisgICAgICAgICAgICBqaXQuc3RvcmUzMihz
Y3JhdGNoR1BSMiwgd3JpdGVCYXJyaWVyQnVmZmVyLmN1cnJlbnRJbmRleEFkZHJlc3MoKSk7CisK
KyAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih3cml0ZUJh
cnJpZXJCdWZmZXIuYnVmZmVyKCkpLCBzY3JhdGNoR1BSMSk7CisgICAgICAgICAgICAvLyBXZSB1
c2UgYW4gb2Zmc2V0IG9mIC1zaXplb2Yodm9pZCopIGJlY2F1c2Ugd2UgYWxyZWFkeSBhZGRlZCAx
IHRvIHNjcmF0Y2hHUFIyLgorICAgICAgICAgICAgaml0LnN0b3JlUHRyKAorICAgICAgICAgICAg
ICAgIGJhc2VHUFIsCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoCisg
ICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgQ0NhbGxIZWxwZXJz
OjpTY2FsZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4oLXNp
emVvZih2b2lkKikpKSk7CisKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lV2l0
aEJhcnJpZXIgPSBqaXQuanVtcCgpOworICAgICAgICAgICAgbmVlZFRvRmx1c2gubGluaygmaml0
KTsKKworICAgICAgICAgICAgYWxsb2NhdG9yLnByZXNlcnZlVXNlZFJlZ2lzdGVyc1RvU2NyYXRj
aEJ1ZmZlckZvckNhbGwoaml0LCBzY3JhdGNoQnVmZmVyLCBzY3JhdGNoR1BSMik7CisgICAgICAg
ICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VHUFIpOworICAgICAgICAg
ICAgY2FsbEZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyID0gaml0LmNhbGwoKTsKKyAgICAgICAgICAg
IGFsbG9jYXRvci5yZXN0b3JlVXNlZFJlZ2lzdGVyc0Zyb21TY3JhdGNoQnVmZmVyRm9yQ2FsbCgK
KyAgICAgICAgICAgICAgICBqaXQsIHNjcmF0Y2hCdWZmZXIsIHNjcmF0Y2hHUFIyKTsKKworICAg
ICAgICAgICAgZG9uZVdpdGhCYXJyaWVyLmxpbmsoJmppdCk7CisgICAgICAgICAgICBvd25lcklz
UmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsoJmppdCk7CisKKyAgICAgICAgICAgIHN0YXRlLmNhbGxi
YWNrcy5hcHBlbmQoCisgICAgICAgICAgICAgICAgWyZdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7CisgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsRmx1c2hXcml0ZUJh
cnJpZXJCdWZmZXIsIG9wZXJhdGlvbkZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKTsKKyAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfQorI2VuZGlmIC8vIEVOQUJMRShHR0MpCisgICAgICAgIAor
ICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7CisKKyAgICAgICAgaWYgKG5ld1N0cnVjdHVyZSgpLT5v
dXRPZkxpbmVDYXBhY2l0eSgpICE9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7
CisgICAgICAgICAgICBzbG93UGF0aC5saW5rKCZqaXQpOworICAgICAgICAgICAgYWxsb2NhdG9y
LnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBudW1iZXJPZlBhZGRpbmdCeXRl
cyk7CisgICAgICAgICAgICBhbGxvY2F0b3IucHJlc2VydmVVc2VkUmVnaXN0ZXJzVG9TY3JhdGNo
QnVmZmVyRm9yQ2FsbChqaXQsIHNjcmF0Y2hCdWZmZXIsIHNjcmF0Y2hHUFIpOworI2lmIFVTRShK
U1ZBTFVFNjQpCisgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKAor
ICAgICAgICAgICAgICAgIGJhc2VHUFIsCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoc2xvdC5jYWNoZWRPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgdmFsdWVH
UFIpOworI2Vsc2UKKyAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
CisgICAgICAgICAgICAgICAgYmFzZUdQUiwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihzbG90LmNhY2hlZE9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICB2YWx1
ZUdQUiwgdmFsdWVUYWdHUFIpOworI2VuZGlmCisgICAgICAgICAgICBvcGVyYXRpb25DYWxsID0g
aml0LmNhbGwoKTsKKyAgICAgICAgICAgIGFsbG9jYXRvci5yZXN0b3JlVXNlZFJlZ2lzdGVyc0Zy
b21TY3JhdGNoQnVmZmVyRm9yQ2FsbChqaSwgc2NyYXRjaEJ1ZmZlciwgc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7CisKKyAgICAgICAgICAgIHN0YXRlLmNhbGxiYWNr
cy5hcHBlbmQoCisgICAgICAgICAgICAgICAgWyZdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7
CisgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhvcGVyYXRpb25DYWxsLCBvcGVy
YXRpb25SZWFsbG9jYXRlU3RvcmFnZUFuZEZpbmlzaFB1dCk7CisgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNhc2UgQXJyYXlMZW5n
dGg6IHsKKyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBqaXQu
bG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6Omxl
bmd0aE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0YXRlLmZhaWx1cmUuYXBwZW5k
KAorICAgICAgICAgICAgaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6TGVzc1RoYW4sIHNjcmF0
Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgIGppdC5ib3hJ
bnQzMihzY3JhdGNoR1BSLCB2YWx1ZVJlZ3MpOworICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYXNlIFN0cmluZ0xlbmd0aDogeworICAgICAg
ICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU1N0cmluZzo6b2Zm
c2V0T2ZMZW5ndGgoKSksIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOworICAgICAgICBqaXQuYm94
SW50MzIodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgdmFsdWVSZWdzKTsKKyAgICAgICAgc3RhdGUu
c3VjY2VlZCgpOworICAgICAgICByZXR1cm47CisgICAgfSB9CiAgICAgCi0gICAgbV9saXN0LmFw
cGVuZChHZXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0dXJlU3R1YkluZm8oc3R1YkluZm8pKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1Qb2x5bW9ycGhpY0dldEJ5SWRM
aXN0KiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojpmcm9tKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbykKK1BvbHltb3JwaGljQWNjZXNzOjpQb2x5bW9ycGhpY0FjY2VzcygpIHsgfQorUG9seW1v
cnBoaWNBY2Nlc3M6On5Qb2x5bW9ycGhpY0FjY2VzcygpIHsgfQorCitNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgUG9seW1vcnBoaWNBY2Nlc3M6OnJlZ2VuZXJhdGVXaXRoQ2FzZXMoCisgICAgVk0mIHZt
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25z
dCBJZGVudGlmaWVyJiBpZGVudCwKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nh
c2U+PiBuZXdBY2Nlc3NlcykKIHsKLSAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nl
c3NfZ2V0X2J5X2lkX2xpc3QpCi0gICAgICAgIHJldHVybiBzdHViSW5mby51LmdldEJ5SWRMaXN0
Lmxpc3Q7Ci0gICAgCi0gICAgQVNTRVJUKAotICAgICAgICBzdHViSW5mby5hY2Nlc3NUeXBlID09
IGFjY2Vzc19nZXRfYnlfaWRfc2VsZgotICAgICAgICB8fCBzdHViSW5mby5hY2Nlc3NUeXBlID09
IGFjY2Vzc191bnNldCk7Ci0gICAgCi0gICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogcmVzdWx0
ID0gbmV3IFBvbHltb3JwaGljR2V0QnlJZExpc3Qoc3R1YkluZm8pOworICAgIFZlY3RvcjxBY2Nl
c3NDYXNlKj4gbmV3QWNjZXNzUHRycyhuZXdBY2Nlc3Nlcy5zaXplKCkpOworICAgIGZvciAodW5z
aWduZWQgaSA9IG5ld0FjY2Vzc2VzLnNpemUoKTsgaS0tOykgeworICAgICAgICBBY2Nlc3NDYXNl
KiBhY2Nlc3NDYXNlID0gbmV3QWNjZXNzZXNbaV0uZ2V0KCk7CisgICAgICAgIGlmIChhY2Nlc3ND
YXNlLT5kb2VzQ2FsbHMoKSAmJiBzdHViSW5mby5wYXRjaC5zcGlsbE1vZGUgPT0gTmVlZFRvU3Bp
bGwpCisgICAgICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7CisgICAgICAg
IG5ld0FjY2Vzc1B0cnNbaV0gPSBhY2Nlc3NDYXNlOworICAgIH0KICAgICAKLSAgICBzdHViSW5m
by5pbml0R2V0QnlJZExpc3QocmVzdWx0KTsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFj
Y2Vzc0Nhc2U+PiByZXBsYWNlZDsKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogbmV3QWNjZXNzZXMp
CisgICAgICAgIGFkZEFjY2Vzc0Nhc2Uoc3RkOjptb3ZlKGVudHJ5KSwgcmVwbGFjZWQpOwogICAg
IAotICAgIHJldHVybiByZXN1bHQ7Ci19CisgICAgaWYgKG1fbGlzdC5zaXplKCkgPiBQT0xZTU9S
UEhJQ19MSVNUX0NBQ0hFX1NJWkUpIHsKKyAgICAgICAgdW5kb0FkZEFjY2Vzc0Nhc2UobmV3QWNj
ZXNzUHRycywgc3RkOjptb3ZlKHJlcGxhY2VkKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIoKTsKKyAgICB9CiAKLVBvbHltb3JwaGljR2V0QnlJZExpc3Q6On5Qb2x5bW9y
cGhpY0dldEJ5SWRMaXN0KCkgeyB9CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJlc3VsdCA9
IHJlZ2VuZXJhdGUodm0sIGNvZGVCbG9jaywgc3R1YkluZm8sIGlkZW50KTsKKyAgICBpZiAoIXJl
c3VsdCkgeworICAgICAgICB1bmRvQWRkQWNjZXNzQ2FzZShuZXdBY2Nlc3NQdHJzLCBzdGQ6Om1v
dmUocmVwbGFjZWQpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOwor
ICAgIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmN1
cnJlbnRTbG93UGF0aFRhcmdldCgKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pIGNv
bnN0Ci17Ci0gICAgaWYgKGlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xv
d0Nhc2UpOwotICAgIHJldHVybiBtX2xpc3QubGFzdCgpLnN0dWJSb3V0aW5lKCktPmNvZGUoKS5j
b2RlKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBQb2x5bW9ycGhpY0dldEJ5SWRM
aXN0OjphZGRBY2Nlc3MoY29uc3QgR2V0QnlJZEFjY2VzcyYgYWNjZXNzKQorTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIFBvbHltb3JwaGljQWNjZXNzOjpyZWdlbmVyYXRlV2l0aENhc2UoCisgICAgVk0m
IHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBj
b25zdCBJZGVudGlmaWVyJiBpZGVudCwKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4g
bmV3QWNjZXNzKQogewotICAgIEFTU0VSVCghaXNGdWxsKCkpOwotICAgIC8vIE1ha2Ugc3VyZSB0
aGF0IHRoZSByZXNpemluZyBvcHRpbWl6ZXMgZm9yIHNwYWNlLCBub3QgdGltZS4KLSAgICBtX2xp
c3QucmVzaXplVG9GaXQobV9saXN0LnNpemUoKSArIDEpOwotICAgIG1fbGlzdC5sYXN0KCkgPSBh
Y2Nlc3M7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPj4gbmV3QWNjZXNz
ZXM7CisgICAgbmV3QWNjZXNzZXMuYXBwZW5kKHN0ZDo6bW92ZShuZXdBY2Nlc3MpKTsKKyAgICBy
ZXR1cm4gcmVnZW5lcmF0ZVdpdGhDYXNlcyh2bSwgY29kZUJsb2NrLCBzdHViSW5mbywgaWRlbnQs
IG5ld0FjY2Vzc2VzKTsKIH0KIAotYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojppc0Z1bGwo
KSBjb25zdAorYm9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6aXNGdWxsKCkgY29uc3QKIHsKICAgICBB
U1NFUlQoc2l6ZSgpIDw9IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSk7CiAgICAgcmV0dXJu
IHNpemUoKSA9PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkU7CiB9CiAKLWJvb2wgUG9seW1v
cnBoaWNHZXRCeUlkTGlzdDo6aXNBbG1vc3RGdWxsKCkgY29uc3QKK2Jvb2wgUG9seW1vcnBoaWNB
Y2Nlc3M6OmlzQWxtb3N0RnVsbCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKHNpemUoKSA8PSBQT0xZ
TU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpOwogICAgIHJldHVybiBzaXplKCkgPj0gUE9MWU1PUlBI
SUNfTElTVF9DQUNIRV9TSVpFIC0gMTsKIH0KIAotYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0
OjpkaWRTZWxmUGF0Y2hpbmcoKSBjb25zdAorYm9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6dmlzaXRX
ZWFrKFZNJiB2bSkgY29uc3QKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXplKCk7IGktLTsp
IHsKLSAgICAgICAgaWYgKGF0KGkpLnR5cGUoKSA9PSBHZXRCeUlkQWNjZXNzOjpTaW1wbGVJbmxp
bmUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFhdChpKS52aXNpdFdlYWsodm0pKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0
dXJuIHRydWU7CiB9CiAKLWJvb2wgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6dmlzaXRXZWFrKFZN
JiB2bSkgY29uc3QKK3ZvaWQgUG9seW1vcnBoaWNBY2Nlc3M6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXplKCk7IGktLTspIHsKLSAgICAg
ICAgaWYgKCFhdChpKS52aXNpdFdlYWsodm0pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIG91dC5wcmludChSYXdQb2ludGVyKHRoaXMpLCAiOlsiKTsKKyAgICBDb21tYVByaW50ZXIg
Y29tbWE7CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fbGlzdCkKKyAgICAgICAgb3V0LnByaW50
KGNvbW1hLCAqZW50cnkpOworICAgIG91dC5wcmludCgiXSIpOworfQorCitWZWN0b3I8c3RkOjp1
bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+PgorUG9seW1vcnBoaWNBY2Nlc3M6OmFkZEFjY2Vzc0Nhc2Uo
c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGFjY2VzcykKK3sKKyAgICBBU1NFUlQoIWlzRnVs
bCgpKTsKKworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4+IHJlcGxhY2Vk
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xpc3Quc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgaWYgKGFjY2Vzcy5jYW5SZXBsYWNlKCptX2xpc3RbaV0pKSB7CisgICAgICAgICAgICBy
ZXBsYWNlZC5hcHBlbmQoc3RkOjptb3ZlKG1fbGlzdFtpXSkpOworICAgICAgICAgICAgbV9saXN0
W2ktLV0gPSBzdGQ6Om1vdmUobV9saXN0Lmxhc3QoKSk7CisgICAgICAgICAgICBtX2xpc3QudGFr
ZUxhc3QoKTsKKyAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICAv
LyBNYWtlIHN1cmUgdGhhdCB0aGUgcmVzaXppbmcgb3B0aW1pemVzIGZvciBzcGFjZSwgbm90IHRp
bWUuCisgICAgbV9saXN0LnJlc2l6ZVRvRml0KG1fbGlzdC5zaXplKCkgKyAxKTsKKyAgICBtX2xp
c3QubGFzdCgpID0gYWNjZXNzOworICAgIHJldHVybiByZXBsYWNlZDsKK30KKwordm9pZCBQb2x5
bW9ycGhpY0FjY2Vzczo6dW5kb0FkZEFjY2Vzc0Nhc2UoCisgICAgY29uc3QgVmVjdG9yPEFjY2Vz
c0Nhc2UqPiYgdG9SZW1vdmUsIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4+IHJl
cGxhY2VkKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xpc3Quc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgaWYgKHRvUmVtb3ZlLmNvbnRhaW5zKG1fbGlzdFtpXS5nZXQoKSkpIHsK
KyAgICAgICAgICAgIG1fbGlzdFtpLS1dID0gc3RkOjptb3ZlKG1fbGlzdC5sYXN0KCkpOworICAg
ICAgICAgICAgbV9saXN0LnRha2VMYXN0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3Ig
KGF1dG8mIGVudHJ5IDogcmVwbGFjZWQpCisgICAgICAgIG1fbGlzdC5hcHBlbmQoc3RkOjptb3Zl
KGVudHJ5KSk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVB0ciBQb2x5bW9ycGhpY0FjY2Vzczo6
cmVnZW5lcmF0ZSgKKyAgICBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8sIGNvbnN0IElkZW50aWZpZXImIGlkZW50KQoreworICAgIEFjY2Vz
c0dlbmVyYXRpb25TdGF0ZSBzdGF0ZTsKKworICAgIHN0YXRlLmFjY2VzcyA9IHRoaXM7CisgICAg
c3RhdGUuc3R1YkluZm8gPSAmc3R1YkluZm87CisgICAgc3RhdGUuaWRlbnQgPSAmaWRlbnQ7Cisg
ICAgCisgICAgc3RhdGUuYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0
Y2guYmFzZUdQUik7CisgICAgc3RhdGUudmFsdWVSZWdzID0gSlNWYWx1ZVJlZ3MoCisjaWYgVVNF
KEpTVkFMVUUzMl82NCkKKyAgICAgICAgc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRj
aC52YWx1ZVRhZ0dQUiksCisjZW5kaWYKKyAgICAgICAgc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHVi
SW5mby5wYXRjaC52YWx1ZUdQUikpOworCisgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFs
bG9jYXRvcihzdHViSW5mby5wYXRoYy51c2VkUmVnaXN0ZXJzKTsKKyAgICBzdGF0ZS5hbGxvY2F0
b3IgPSAmYWxsb2NhdG9yOworICAgIGFsbG9jYXRvci5sb2NrKHN0YXRlLmJhc2VHUFIpOworICAg
IGFsbG9jYXRvci5sb2NrKHN0YXRlLnZhbHVlUmVncyk7CisKKyAgICBzdGF0ZS5zY3JhdGNoR1BS
ID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgIAorICAgIENDYWxsSGVscGVy
cyBqaXQoJnZtLCBjb2RlQmxvY2spOworICAgIHN0YXRlLmppdCA9ICZqaXQ7CisKKyAgICBzdGF0
ZS5udW1iZXJPZlBhZGRpbmdCeXRlcyA9IGFsbG9jYXRvci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVy
c0J5UHVzaGluZyhqaXQpOworCisgICAgYm9vbCBhbGxHdWFyZGVkQnlTdHJ1Y3R1cmVDaGVjayA9
IHRydWU7CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fbGlzdCkKKyAgICAgICAgYWxsR3VhcmRl
ZEJ5U3RydWN0dXJlQ2hlY2sgJj0gZW50cnktPmd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrKCk7CisK
KyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGZlZWxUaHJvdWdoQWxsVGhlV2F5OworCisgICAg
aWYgKCFzaXplKCkpIHsKKyAgICAgICAgLy8gVGhpcyBpcyBzdXBlciB1bmxpa2VseSwgYnV0IHdl
IG1ha2UgaXQgbGVnYWwgYW55d2F5LgorICAgICAgICBmZWxsVGhyb3VnaEFsbFRoZVdheS5hcHBl
bmQoaml0Lmp1bXAoKSk7CisgICAgfSBlbHNlIGlmICghYWxsR3VhcmRlZEJ5U3RydWN0dXJlQ2hl
Y2sgfHwgc2l6ZSgpID09IDEpIHsKKyAgICAgICAgLy8gSWYgdGhlcmUgYXJlIGFueSBwcm94aWVz
IGluIHRoZSBsaXN0LCB3ZSBjYW5ub3QganVzdCB1c2UgYSBiaW5hcnkgc3dpdGNoIG92ZXIgdGhl
IHN0cnVjdHVyZS4KKyAgICAgICAgLy8gV2UgbmVlZCB0byByZXNvcnQgdG8gYSBjYXNjYWRlLiBB
IGNhc2NhZGUgYWxzbyBoYXBwZW5zIHRvIGJlIG9wdGltYWwgaWYgd2Ugb25seSBoYXZlIGp1c3QK
KyAgICAgICAgLy8gb25lIGNhc2UuCisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZmFs
bFRocm91Z2g7CisKKyAgICAgICAgLy8gQ2FzY2FkZSB0aHJvdWdoIHRoZSBsaXN0LCBwcmVmZXJy
aW5nIG5ld2VyIGVudHJpZXMuCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fbGlzdC5zaXpl
KCk7IGktLTspIHsKKyAgICAgICAgICAgIGZhbGxUaHJvdWdoLmxpbmsoJmppdCk7CisgICAgICAg
ICAgICBtX2xpc3RbaV0tPmdlbmVyYXRlV2l0aEd1YXJkKHN0YXRlLCBmYWxsVGhyb3VnaCk7Cisg
ICAgICAgIH0KKyAgICAgICAgZmVlbFRocm91Z2hBbGxUaGVXYXkuYXBwZW5kKGZhbGxUaHJvdWdo
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBqaXQubG9hZDMyKAorICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKHN0YXRlLmJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksCisgICAgICAgICAgICBzdGF0ZS5zY3JhdGNoR1BSKTsKKyAgICAgICAgCisgICAgICAgIFZl
Y3RvcjxpbnQ2NF90PiBjYXNlVmFsdWVzKG1fbGlzdC5zaXplKCkpOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9saXN0LnNpemUoKTsgKytpKQorICAgICAgICAgICAgY2FzZVZh
bHVlc1tpXSA9IGJpdHdpc2VfY2FzdDxpbnQzMl90PihtX2xpc3RbaV0tPnN0cnVjdHVyZSgpKTsK
KyAgICAgICAgCisgICAgICAgIEJpbmFyeVN3aXRjaCBiaW5hcnlTd2l0Y2goc3RhdGUuc2NyYXRj
aEdQUiwgY2FzZVZhbHVlcywgQmluYXJ5U3dpdGNoOjpJbnQzMik7CisgICAgICAgIHdoaWxlIChi
aW5hcnlTd2l0Y2guYWR2YW5jZShqaXQpKSB7CisgICAgICAgICAgICBHZXRCeUlkQ2FzZSYgZ2V0
Q2FzZSA9IGF0KGJpbmFyeVN3aXRjaC5jYXNlSW5kZXgoKSk7CisgICAgICAgICAgICBnZXRDYXNl
LmdlbmVyYXRlKHN0YXRlKTsKKyAgICAgICAgfQorICAgICAgICBmZWxsVGhyb3VnaEFsbFRoZVdh
eS5hcHBlbmQoYmluYXJ5U3dpdGNoLmZhbGxUaHJvdWdoKCkpOworICAgIH0KKworICAgIHN0YXRl
LmZhaWx1cmUubGluaygmaml0KTsKKworICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBpbmxpbmUg
Y2FjaGUgb3B0aW1pemF0aW9uIGNvZGUga25vd3MgdGhhdCB3ZSBhcmUgdGFraW5nIHNsb3cgcGF0
aCBiZWNhdXNlCisgICAgLy8gb2Ygc29tZXRoaW5nIHRoYXQgaXNuJ3QgcGF0Y2hhYmxlLiAic2Vl
biIgYmVpbmcgZmFsc2UgbWVhbnMgdGhhdCB3ZSBieXBhc3MgcGF0Y2hpbmcuIFRoaXMgaXMKKyAg
ICAvLyBwcmV0dHkgZ3Jvc3MgYnV0IGl0IG1lYW5zIHRoYXQgd2UgZG9uJ3QgbmVlZCB0byBoYXZl
IHR3byBzbG93IHBhdGggZW50cnlwb2ludHMgLSBvbmUgZm9yCisgICAgLy8gcGF0Y2hpbmcgYW5k
IG9uZSBmb3Igbm9ybWFsIHNsb3cgc3R1ZmYuCisgICAgaml0LnN0b3JlOChUcnVzdGVkSW1tMzIo
ZmFsc2UpLCAmc3R1YkluZm8uc2Vlbik7CisKKyAgICBmZWxsVGhyb3VnaEFsbFRoZVdheS5saW5r
KCZqaXQpOworICAgIAorICAgIHN0YXRlLnJlc3RvcmVTY3JhdGNoKCk7CisgICAgc3RhdGUuZmFp
bHVyZSA9IGppdC5qdW1wKCk7CisKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIodm0sIGppdCwg
Y29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgIGlmIChsaW5rQnVmZmVyLmRp
ZEZhaWxUb0FsbG9jYXRlKCkpCisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIo
KTsKKworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBzdWNjZXNzTGFiZWwgPQorICAgICAgICBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5k
ZWx0YUNhbGxUb0RvbmUpOworICAgICAgICAKKyAgICBsaW5rQnVmZmVyLmxpbmsoc3RhdGUuc3Vj
Y2Vzcywgc3VjY2Vzc0xhYmVsKTsKKworICAgIGxpbmtCdWZmZXIubGluaygKKyAgICAgICAgc3Rh
dGUuZmFpbHVyZSwKKyAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRP
ZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSkpOworICAgIAorICAgIGZv
ciAoYXV0byBjYWxsYmFjayA6IHN0YXRlLmNhbGxiYWNrcykKKyAgICAgICAgY2FsbGJhY2sobGlu
a0J1ZmZlcik7CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGUgPSBGSU5BTEla
RV9DT0RFX0ZPUigKKyAgICAgICAgY29kZUJMb2NrLCBsaW5rQnVmZmVyLAorICAgICAgICAoIiVz
IiwgdG9DU3RyaW5nKCJHZXQgYWNjZXNzIHN0dWIgZm9yICIsICpjb2RlQmxvY2ssICIgIiwgc3R1
YkluZm8uY29kZU9yaWdpbiwgIiB3aXRoIHJldHVybiBwb2ludCAiLCBzdWNjZXNzTGFiZWwsICI6
ICIsICp0aGlzKSkpOworCisgICAgYm9vbCBkb2VzQ2FsbHMgPSBmYWxzZTsKKyAgICBmb3IgKGF1
dG8gZW50cnkgOiBtX2xpc3QpCisgICAgICAgIGRvZXNDYWxscyB8PSBlbnRyeS0+ZG9lc0NhbGxz
KCk7CisgICAgCisgICAgbV9zdHViUm91dGluZSA9IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKGNvZGUs
IHZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBkb2VzQ2FsbHMpOworICAgIG1fd2F0
Y2hwb2ludHMgPSBzdGQ6Om1vdmUoc3RhdGUud2F0Y2hwb2ludHMpOworICAgIHJldHVybiBjb2Rl
LmNvZGUoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKK25hbWVzcGFjZSBXVEYgeworCit1
c2luZyBuYW1lc3BhY2UgSlNDOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91
dCwgQWNjZXNzQ2FzZTo6QWNjZXNzVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgewor
ICAgIGNhc2UgQWNjZXNzQ2FzZTo6TG9hZDoKKyAgICAgICAgb3V0LnByaW50KCJMb2FkIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OlRyYW5zaXRpb246CisgICAgICAg
IG91dC5wcmludCgiVHJhbnNpdGlvbiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nl
c3NDYXNlOjpSZXBsYWNlOgorICAgICAgICBvdXQucHJpbnQoIlJlcGxhY2UiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6TWlzczoKKyAgICAgICAgb3V0LnByaW50KCJN
aXNzIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkdldHRlcjoKKyAg
ICAgICAgb3V0LnByaW50KCJHZXR0ZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNj
ZXNzQ2FzZTo6U2V0dGVyOgorICAgICAgICBvdXQucHJpbnQoIlNldHRlciIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpDdXN0b21HZXR0ZXI6CisgICAgICAgIG91dC5w
cmludCgiQ3VzdG9tR2V0dGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nh
c2U6OkN1c3RvbVNldHRlcjoKKyAgICAgICAgb3V0LnByaW50KCJDdXN0b21TZXR0ZXIiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5IaXQ6CisgICAgICAgIG91dC5w
cmludCgiSW5IaXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5N
aXNzOgorICAgICAgICBvdXQucHJpbnQoIkluTWlzcyIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBBY2Nlc3NDYXNlOjpBcnJheUxlbmd0aDoKKyAgICAgICAgb3V0LnByaW50KCJBcnJheUxl
bmd0aCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpTdHJpbmdMZW5n
dGg6CisgICAgICAgIG91dC5wcmludCgiU3RyaW5nTGVuZ3RoIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXVEYKKwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgJKHJldmlz
aW9uIDE4OTMyNCkJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3Jw
aGljR2V0QnlJZExpc3QuaDoxODkzMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIFBvbHltb3JwaGljR2V0QnlJZExpc3RfaAorI2RlZmluZSBQb2x5bW9ycGhpY0dldEJ5SWRM
aXN0X2gKKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCisjaW5j
bHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldC5oIgorI2luY2x1ZGUgIk9wY29kZS5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVCbG9j
azsKK3N0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbzsKKworY2xhc3MgR2V0QnlJZEFjY2VzcyB7Citw
dWJsaWM6CisgICAgZW51bSBBY2Nlc3NUeXBlIHsKKyAgICAgICAgSW52YWxpZCwKKyAgICAgICAg
U2ltcGxlSW5saW5lLCAvLyBUaGlzIGlzIHRoZSBwYXRjaGVkIGlubGluZSBhY2Nlc3MuCisgICAg
ICAgIFNpbXBsZVN0dWIsIC8vIFRoaXMgaXMgYSBzdHViLgorICAgICAgICBXYXRjaGVkU3R1YiwK
KyAgICAgICAgR2V0dGVyLAorICAgICAgICBDdXN0b21HZXR0ZXIsCisgICAgICAgIFNpbXBsZU1p
c3MsCisgICAgfTsKKyAgICAKKyAgICBHZXRCeUlkQWNjZXNzKCkKKyAgICAgICAgOiBtX3R5cGUo
SW52YWxpZCkKKyAgICB7CisgICAgfQorICAgIAorICAgIEdldEJ5SWRBY2Nlc3MoCisgICAgICAg
IFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGlu
ZT4sIFN0cnVjdHVyZSosCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCkpOworICAgIAorICAgIH5HZXRCeUlkQWNj
ZXNzKCk7CisgICAgCisgICAgc3RhdGljIEdldEJ5SWRBY2Nlc3MgZnJvbVN0cnVjdHVyZVN0dWJJ
bmZvKFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAgCisgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsg
cmV0dXJuIG1fdHlwZSAhPSBJbnZhbGlkOyB9CisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7
IHJldHVybiAhaXNTZXQoKTsgfQorICAgIAorICAgIEFjY2Vzc1R5cGUgdHlwZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdHlwZTsgfQorICAgIAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3Qg
eyByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7IH0KKyAgICAKKyAgICBjb25zdCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRp
b25TZXQ7IH0KKyAgICAKKyAgICBKSVRTdHViUm91dGluZSogc3R1YlJvdXRpbmUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGlzU2V0KCkpOworICAgICAgICByZXR1cm4gbV9zdHViUm91
dGluZS5nZXQoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBkb2VzQ2FsbHMoKSBjb25zdCB7IHJl
dHVybiB0eXBlKCkgPT0gR2V0dGVyIHx8IHR5cGUoKSA9PSBDdXN0b21HZXR0ZXI7IH0KKyAgICAK
KyAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIGZyaWVuZCBj
bGFzcyBDb2RlQmxvY2s7CisgICAgCisgICAgQWNjZXNzVHlwZSBtX3R5cGU7CisgICAgV3JpdGVC
YXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQgbV9jb25kaXRpb25TZXQ7CisgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBtX3N0dWJS
b3V0aW5lOworfTsKKworY2xhc3MgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCB7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgLy8gRWl0aGVyIGNyZWF0ZXMgYSBuZXcg
cG9seW1vcnBoaWMgZ2V0IGxpc3QsIG9yIHJldHVybnMgdGhlIG9uZSB0aGF0IGlzIGFscmVhZHkg
aW4KKyAgICAvLyBwbGFjZS4KKyAgICBzdGF0aWMgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogZnJv
bShTdHJ1Y3R1cmVTdHViSW5mbyYpOworICAgIAorICAgIH5Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0
KCk7CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN1cnJlbnRTbG93UGF0aFRhcmdl
dChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pIGNvbnN0OworICAgIAorICAgIHZvaWQgYWRk
QWNjZXNzKGNvbnN0IEdldEJ5SWRBY2Nlc3MmKTsKKyAgICAKKyAgICBib29sIGlzRW1wdHkoKSBj
b25zdCB7IHJldHVybiBtX2xpc3QuaXNFbXB0eSgpOyB9CisgICAgdW5zaWduZWQgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbGlzdC5zaXplKCk7IH0KKyAgICBib29sIGlzRnVsbCgpIGNvbnN0Owor
ICAgIGJvb2wgaXNBbG1vc3RGdWxsKCkgY29uc3Q7IC8vIFRydWUgaWYgYWRkaW5nIGFuIGVsZW1l
bnQgd291bGQgbWFrZSBpc0Z1bGwoKSB0cnVlLgorICAgIGNvbnN0IEdldEJ5SWRBY2Nlc3MmIGF0
KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdFtpXTsgfQorICAgIGNvbnN0IEdldEJ5
SWRBY2Nlc3MmIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9saXN0W2ld
OyB9CisgICAgCisgICAgYm9vbCBkaWRTZWxmUGF0Y2hpbmcoKSBjb25zdDsgLy8gQXJlIGFueSBv
ZiB0aGUgYWNjZXNzZXMgU2ltcGxlSW5saW5lPworICAgIAorICAgIGJvb2wgdmlzaXRXZWFrKFZN
JikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKKyAgICAK
KyAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAgCisg
ICAgVmVjdG9yPEdldEJ5SWRBY2Nlc3MsIDI+IG1fbGlzdDsKK307CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKworI2VuZGlmIC8vIFBvbHltb3JwaGljR2V0
QnlJZExpc3RfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNBY2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAkod29ya2luZyBjb3B5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIz
LDggKzIzLDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgUG9seW1vcnBoaWNH
ZXRCeUlkTGlzdF9oCi0jZGVmaW5lIFBvbHltb3JwaGljR2V0QnlJZExpc3RfaAorI2lmbmRlZiBQ
b2x5bW9ycGhpY0FjY2Vzc19oCisjZGVmaW5lIFBvbHltb3JwaGljQWNjZXNzX2gKIAogI2lmIEVO
QUJMRShKSVQpCiAKQEAgLTM4LDk2ICszOCwyNDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFz
cyBDb2RlQmxvY2s7CitjbGFzcyBQb2x5bW9ycGhpY0FjY2VzczsKIHN0cnVjdCBTdHJ1Y3R1cmVT
dHViSW5mbzsKIAotY2xhc3MgR2V0QnlJZEFjY2VzcyB7CitzdHJ1Y3QgQWNjZXNzR2VuZXJhdGlv
blN0YXRlOworCitjbGFzcyBBY2Nlc3NDYXNlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShB
Y2Nlc3NDYXNlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBl
bnVtIEFjY2Vzc1R5cGUgewotICAgICAgICBJbnZhbGlkLAotICAgICAgICBTaW1wbGVJbmxpbmUs
IC8vIFRoaXMgaXMgdGhlIHBhdGNoZWQgaW5saW5lIGFjY2Vzcy4KLSAgICAgICAgU2ltcGxlU3R1
YiwgLy8gVGhpcyBpcyBhIHN0dWIuCi0gICAgICAgIFdhdGNoZWRTdHViLAorICAgICAgICBMb2Fk
LAorICAgICAgICBUcmFuc2l0aW9uLAorICAgICAgICBSZXBsYWNlLAorICAgICAgICBNaXNzLAog
ICAgICAgICBHZXR0ZXIsCisgICAgICAgIFNldHRlciwKICAgICAgICAgQ3VzdG9tR2V0dGVyLAot
ICAgICAgICBTaW1wbGVNaXNzLAorICAgICAgICBDdXN0b21TZXR0ZXIsCisgICAgICAgIEluSGl0
LAorICAgICAgICBJbk1pc3MsCisgICAgICAgIEFycmF5TGVuZ3RoLAorICAgICAgICBTdHJpbmdM
ZW5ndGgKICAgICB9OwotICAgIAotICAgIEdldEJ5SWRBY2Nlc3MoKQotICAgICAgICA6IG1fdHlw
ZShJbnZhbGlkKQorCisgICAgc3RhdGljIGJvb2wgaXNHZXQoQWNjZXNzVHlwZSB0eXBlKQogICAg
IHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgSW52YWxpZDoKKyAgICAg
ICAgY2FzZSBUcmFuc2l0aW9uOgorICAgICAgICBjYXNlIFJlcGxhY2U6CisgICAgICAgIGNhc2Ug
U2V0dGVyOgorICAgICAgICBjYXNlIEN1c3RvbVNldHRlcjoKKyAgICAgICAgY2FzZSBJbkhpdDoK
KyAgICAgICAgY2FzZSBJbk1pc3M6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGNhc2UgTG9hZDoKKyAgICAgICAgY2FzZSBNaXNzOgorICAgICAgICBjYXNlIEdldHRlcjoKKyAg
ICAgICAgY2FzZSBDdXN0b21HZXR0ZXI6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQogICAgIH0KLSAgICAKLSAgICBHZXRCeUlkQWNjZXNzKAotICAgICAgICBWTSYsIEpTQ2Vs
bCogb3duZXIsIEFjY2Vzc1R5cGUsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+LCBTdHJ1Y3R1
cmUqLAorCisgICAgc3RhdGljIGJvb2wgaXNQdXQoQWNjZXNzVHlwZSB0eXBlKQorICAgIHsKKyAg
ICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgSW52YWxpZDoKKyAgICAgICAgY2Fz
ZSBMb2FkOgorICAgICAgICBjYXNlIE1pc3M6CisgICAgICAgIGNhc2UgR2V0dGVyOgorICAgICAg
ICBjYXNlIEN1c3RvbUdldHRlcjoKKyAgICAgICAgY2FzZSBJbkhpdDoKKyAgICAgICAgY2FzZSBJ
bk1pc3M6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgVHJhbnNpdGlv
bjoKKyAgICAgICAgY2FzZSBSZXBsYWNlOgorICAgICAgICBjYXNlIFNldHRlcjoKKyAgICAgICAg
Y2FzZSBDdXN0b21TZXR0ZXI6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzSW4oQWNjZXNzVHlwZSB0eXBlKQorICAgIHsKKyAg
ICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgSW52YWxpZDoKKyAgICAgICAgY2Fz
ZSBMb2FkOgorICAgICAgICBjYXNlIE1pc3M6CisgICAgICAgIGNhc2UgR2V0dGVyOgorICAgICAg
ICBjYXNlIEN1c3RvbUdldHRlcjoKKyAgICAgICAgY2FzZSBUcmFuc2l0aW9uOgorICAgICAgICBj
YXNlIFJlcGxhY2U6CisgICAgICAgIGNhc2UgU2V0dGVyOgorICAgICAgICBjYXNlIEN1c3RvbVNl
dHRlcjoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBJbkhpdDoKKyAg
ICAgICAgY2FzZSBJbk1pc3M6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBnZXQoCisgICAgICAgIFZN
JiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgUHJvcGVydHlPZmZzZXQsIFN0cnVjdHVyZSos
CisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiA9IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0KCksCisgICAgICAgIGJvb2wgdmlhUHJveHkgPSBmYWxzZSwKKyAgICAg
ICAgV2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCA9IG51bGxwdHIsCisgICAgICAgIFByb3Bl
cnR5U2xvdDo6R2V0VmFsdWVGdW5jID0gbnVsbHB0cik7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
QWNjZXNzQ2FzZT4gcmVwbGFjZSgKKyAgICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KTsKKworICAgIHN0ZDo6dW5pcXVl
X3B0cjxBY2Nlc3NDYXNlPiB0cmFuc2l0aW9uKAorICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIs
IFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0LAogICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0
cjxBY2Nlc3NDYXNlPiBzZXR0ZXIoCisgICAgICAgIFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNz
VHlwZSwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQsCisgICAgICAgIGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0JiwgUHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmMpOworCisg
ICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGluKAorICAgICAgICBWTSYsIEpTQ2VsbCog
b3duZXIsIEFjY2Vzc1R5cGUsIFN0cnVjdHVyZSogc3RydWN0dXJlLAorICAgICAgICBjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgp
KTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDQXNlPiBnZXRMZW5ndGgoVk0mLCBKU0Nl
bGwqIG93bmVyLCBBY2Nlc3NUeXBlKTsKICAgICAKLSAgICB+R2V0QnlJZEFjY2VzcygpOworICAg
IH5BY2Nlc3NDYXNlKCk7CiAgICAgCi0gICAgc3RhdGljIEdldEJ5SWRBY2Nlc3MgZnJvbVN0cnVj
dHVyZVN0dWJJbmZvKFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVl
X3B0cjxBY2Nlc3NDYXNlPiBmcm9tU3RydWN0dXJlU3R1YkluZm8oVk0mLCBKU0NlbGwqIG93bmVy
LCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwogICAgIAogICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJl
dHVybiBtX3R5cGUgIT0gSW52YWxpZDsgfQogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyBy
ZXR1cm4gIWlzU2V0KCk7IH0KICAgICAKICAgICBBY2Nlc3NUeXBlIHR5cGUoKSBjb25zdCB7IHJl
dHVybiBtX3R5cGU7IH0KKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdCB7IHJldHVy
biBtX29mZnNldDsgfQorICAgIGJvb2wgdmlhUHJveHkoKSBjb25zdCB7IHJldHVybiBtX3JhcmVE
YXRhID8gbV9yYXJlRGF0YS0+dmlhUHJveHkgOiBmYWxzZTsgfQogICAgIAotICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7IH0KLSAgICAK
LSAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29u
c3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0KLSAgICAKLSAgICBKSVRTdHViUm91dGluZSog
c3R1YlJvdXRpbmUoKSBjb25zdAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QKICAg
ICB7Ci0gICAgICAgIEFTU0VSVChpc1NldCgpKTsKLSAgICAgICAgcmV0dXJuIG1fc3R1YlJvdXRp
bmUuZ2V0KCk7CisgICAgICAgIGlmIChtX2tpbmQgPT0gVHJhbnNpdGlvbikKKyAgICAgICAgICAg
IHJldHVybiBtX3N0cnVjdHVyZS0+cHJldmlvdXNJRCgpOworICAgICAgICByZXR1cm4gbV9zdHJ1
Y3R1cmUuZ2V0KCk7CisgICAgfQorICAgIGJvb2wgZ3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2soKSBj
b25zdCB7IHJldHVybiAhdmlhUHJveHkoKTsgfQorCisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1
cmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBUcmFuc2l0aW9uKTsK
KyAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlLmdldCgpOwogICAgIH0KICAgICAKLSAgICBib29s
IGRvZXNDYWxscygpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBHZXR0ZXIgfHwgdHlwZSgpID09
IEN1c3RvbUdldHRlcjsgfQorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlv
blNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9CisKKyAgICBXYXRjaHBvaW50
U2V0KiBhZGRpdGlvbmFsU2V0KCkgY29uc3QgeyBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+YWRk
aXRpb25hbFNldC5nZXQoKSA6IG51bGxwdHI7IH0KICAgICAKLSAgICBib29sIHZpc2l0V2VhayhW
TSYpIGNvbnN0OworICAgIGJvb2wgZG9lc0NhbGxzKCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09
IEdldHRlciB8fCB0eXBlKCkgPT0gQ3VzdG9tR2V0dGVyOyB9CiAKKyAgICAvLyBJZiB0aGlzIG1l
dGhvZCByZXR1cm5zIHRydWUsIHRoZW4gaXQncyBhIGdvb2QgaWRlYSB0byByZW1vdmUgJ290aGVy
JyBmcm9tIHRoZSBhY2Nlc3Mgb25jZSAndGhpcycKKyAgICAvLyBpcyBhZGRlZC4gVGhpcyBtZXRo
b2QgYXNzdW1lcyB0aGF0IGluIGNhc2Ugb2YgY29udHJhZGljdGlvbnMsICd0aGlzJyByZXByZXNl
bnRzIGEgbmV3ZXIsIGFuZCBzbworICAgIC8vIG1vcmUgdXNlZnVsLCB0cnV0aC4gVGhpcyBtZXRo
b2QgY2FuIGJlIGNvbnNlcnZhdGl2ZTsgaXQgd2lsbCByZXR1cm4gZmFsc2Ugd2hlbiBpdCBkb3Vi
dC4KKyAgICBib29sIGNhblJlcGxhY2UoY29uc3QgQWNjZXNzQ2FzZSYgb3RoZXIpOworCisgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworICAgIAogcHJpdmF0ZToKICAgICBm
cmllbmQgY2xhc3MgQ29kZUJsb2NrOworICAgIGZyaWVuZCBjbGFzcyBQb2x5bW9ycGhpY0FjY2Vz
czsKKworICAgIEFjY2Vzc0Nhc2UoKTsKKworICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgY29uc3Q7
CisKKyAgICAvLyBGYWxsIHRocm91Z2ggb24gc3VjY2Vzcy4gVHdvIGtpbmRzIG9mIGZhaWx1cmVz
IGFyZSBzdXBwb3J0ZWQ6IGZhbGwtdGhyb3VnaCwgd2hpY2ggbWVhbnMgdGhhdCB3ZQorICAgIC8v
IHNob3VsZCB0cnkgYSBkaWZmZXJlbnQgY2FzZTsgYW5kIGZhaWx1cmUsIHdoaWNoIG1lYW5zIHRo
YXQgdGhpcyB3YXMgdGhlIHJpZ2h0IGNhc2UgYnV0IGl0IG5lZWRzCisgICAgLy8gaGVscCBmcm9t
IHRoZSBzbG93IHBhdGguCisgICAgdm9pZCBnZW5lcmF0ZVdpdGhHdWFyZChBY2Nlc3NHZW5lcmF0
aW9uU3RhdGUmLCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0JiBmYWxsVGhyb3VnaCk7CisKKyAgICAv
LyBGYWxsIHRocm91Z2ggb24gc3VjY2VzcywgYWRkIGEganVtcCB0byB0aGUgZmFpbHVyZSBsaXN0
IG9uIGZhaWx1cmUuCisgICAgdm9pZCBnZW5lcmF0ZShBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmKTsK
ICAgICAKICAgICBBY2Nlc3NUeXBlIG1fdHlwZTsKKyAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNl
dDsKKworICAgIC8vIFVzdWFsbHkgdGhpcyBpcyB0aGUgc3RydWN0dXJlIHRoYXQgd2UgZXhwZWN0
IHRoZSBiYXNlIG9iamVjdCB0byBoYXZlLiBCdXQsIHRoaXMgaXMgdGhlICpuZXcqCisgICAgLy8g
c3RydWN0dXJlIGZvciBhIHRyYW5zaXRpb24gYW5kIHdlIHJlbHkgb24gdGhlIGZhY3QgdGhhdCBp
dCBoYXMgYSBzdHJvbmcgcmVmZXJlbmNlIHRvIHRoZSBvbGQKKyAgICAvLyBzdHJ1Y3R1cmUuIEZv
ciBwcm94aWVzLCB0aGlzIGlzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIG9iamVjdCBiZWhpbmQgdGhl
IHByb3h5LgogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOworCiAgICAg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7Ci0gICAgUmVmUHRyPEpJ
VFN0dWJSb3V0aW5lPiBtX3N0dWJSb3V0aW5lOworCisgICAgY2xhc3MgUmFyZURhdGEgeworICAg
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6CisgICAgICAgIGJvb2wg
dmlhUHJveHk7CisgICAgICAgIFJlZlB0cjxXYXRjaHBvaW50U2V0PiBhZGRpdGlvbmFsU2V0Owor
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtJbmZvPiBjYWxsTGlua0luZm87CisgICAg
ICAgIHVuaW9uIHsKKyAgICAgICAgICAgIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jIGdldHRl
cjsKKyAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jIHNldHRlcjsKKyAg
ICAgICAgICAgIHZvaWQqIG9wYXF1ZTsKKyAgICAgICAgfSBjdXN0b21BY2Nlc3NvcjsKKyAgICB9
OworCisgICAgc3RkOjp1bmlxdWVfcHRyPFJhcmVEYXRhPiBtX3JhcmVEYXRhOwogfTsKIAotY2xh
c3MgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCB7CitjbGFzcyBQb2x5bW9ycGhpY0FjY2VzcyB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUG9seW1vcnBoaWNBY2Nlc3MpOwogICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIC8vIEVpdGhlciBjcmVhdGVzIGEgbmV3IHBv
bHltb3JwaGljIGdldCBsaXN0LCBvciByZXR1cm5zIHRoZSBvbmUgdGhhdCBpcyBhbHJlYWR5IGlu
Ci0gICAgLy8gcGxhY2UuCi0gICAgc3RhdGljIFBvbHltb3JwaGljR2V0QnlJZExpc3QqIGZyb20o
U3RydWN0dXJlU3R1YkluZm8mKTsKLSAgICAKLSAgICB+UG9seW1vcnBoaWNHZXRCeUlkTGlzdCgp
OwotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdXJyZW50U2xvd1BhdGhUYXJnZXQo
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKSBjb25zdDsKLSAgICAKLSAgICB2b2lkIGFkZEFj
Y2Vzcyhjb25zdCBHZXRCeUlkQWNjZXNzJik7CisgICAgUG9seW1vcnBoaWNBY2Nlc3MoKTsKKyAg
ICB+UG9seW1vcnBoaWNBY2Nlc3MoKTsKKworICAgIC8vIFRoaXMgbWF5IHJldHVybiBudWxsLCBp
biB3aGljaCBjYXNlIHRoZSBvbGQgc3R1YiByb3V0aW5lIGlzIGxlZnQgaW50YWN0LiBUaGlzIG1l
dGhvZCB3aWxsIGRvIHlvdQorICAgIC8vIGEgc29saWQgYW5kIG51bGwtY2hlY2sgdGhlIEFjY2Vz
c0Nhc2UsIHNvIHRoYXQgeW91IGNhbiBkbyB0aGluZ3MgbGlrZToKKyAgICAvLworICAgIC8vIGNv
ZGVQdHIgPSBhY2Nlc3MtPnJlZ2VuZXJhdGVXaXRoQ2FzZSguLi4sIEFjY2Vzc0Nhc2U6OmdldCgu
Li4pKQorICAgIC8vCisgICAgLy8gSWYgQWNjZXNzQ2FzZTo6Z2V0KCkgcmV0dXJucyBudWxscHRy
LCB0aGUgYWJvdmUgY2FsbCB3aWxsIHNpbXBseSByZXR1cm4gbnVsbC4KKyAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgcmVnZW5lcmF0ZVdpdGhDYXNlcygKKyAgICAgICAgVk0mLCBDb2RlQmxvY2sq
LCBTdHJ1Y3R1cmVTdHViSW5mbyYsIGNvbnN0IElkZW50aWZpZXImLCBWZWN0b3I8c3RkOjp1bmlx
dWVfcHRyPEFjY2Vzc0Nhc2U+Pik7CisKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVnZW5l
cmF0ZVdpdGhDYXNlKAorICAgICAgICBWTSYsIENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZv
JiwgY29uc3QgSWRlbnRpZmllciYsIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPik7CiAgICAg
CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9saXN0LmlzRW1wdHkoKTsgfQog
ICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2xpc3Quc2l6ZSgpOyB9CiAgICAg
Ym9vbCBpc0Z1bGwoKSBjb25zdDsKICAgICBib29sIGlzQWxtb3N0RnVsbCgpIGNvbnN0OyAvLyBU
cnVlIGlmIGFkZGluZyBhbiBlbGVtZW50IHdvdWxkIG1ha2UgaXNGdWxsKCkgdHJ1ZS4KLSAgICBj
b25zdCBHZXRCeUlkQWNjZXNzJiBhdCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2xpc3Rb
aV07IH0KLSAgICBjb25zdCBHZXRCeUlkQWNjZXNzJiBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNv
bnN0IHsgcmV0dXJuIG1fbGlzdFtpXTsgfQotICAgIAotICAgIGJvb2wgZGlkU2VsZlBhdGNoaW5n
KCkgY29uc3Q7IC8vIEFyZSBhbnkgb2YgdGhlIGFjY2Vzc2VzIFNpbXBsZUlubGluZT8KLSAgICAK
KyAgICBjb25zdCBBY2Nlc3NDYXNlJiBhdCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiAqbV9s
aXN0W2ldOyB9CisgICAgY29uc3QgQWNjZXNzQ2FzZSYgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBj
b25zdCB7IHJldHVybiAqbV9saXN0W2ldOyB9CisKKyAgICAvLyBJZiB0aGlzIHJldHVybnMgZmFs
c2UgdGhlbiB3ZSBhcmUgcmVxdWVzdGluZyBhIHJlc2V0IG9mIHRoZSBvd25pbmcgU3RydWN0dXJl
U3R1YkluZm8uCiAgICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25zdDsKIAorICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKwogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3Mg
QWNjZXNzQ2FzZTsKKyAgICBmcmllbmQgY2xhc3MgQWNjZXNzR2VuZXJhdGlvblN0YXRlOwogICAg
IGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7CiAgICAgCi0gICAgUG9seW1vcnBoaWNHZXRCeUlkTGlz
dChTdHJ1Y3R1cmVTdHViSW5mbyYpOworICAgIHZvaWQgYWRkQWNjZXNzQ2FzZSgKKyAgICAgICAg
c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHRvQWRkLCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRy
PEFjY2Vzc0Nhc2U+PiYgcmVwbGFjZWQpOworICAgIHZvaWQgdW5kb0FkZEFjY2Vzc0Nhc2UoCisg
ICAgICAgIGNvbnN0IFZlY3RvcjxBY2Nlc3NDYXNlKj4mIHRvUmVtb3ZlLCBWZWN0b3I8c3RkOjp1
bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+PiB0b0FkZCk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IHJlZ2VuZXJhdGUoVk0mLCBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIGNvbnN0IElk
ZW50aWZpZXImKTsKICAgICAKLSAgICBWZWN0b3I8R2V0QnlJZEFjY2VzcywgMj4gbV9saXN0Owor
ICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4sIDI+IG1fbGlzdDsKKyAgICBS
ZWZQdHI8SklUU3R1YlJvdXRpbmU+IG1fc3R1YlJvdXRpbmU7CisgICAgc3RkOjp1bmlxdWVfcHRy
PFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbz4gbV93YXRjaHBvaW50czsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwogCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFs
KFByaW50U3RyZWFtJiwgSlNDOjpBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBlKTsKKworfSAvLyBuYW1l
c3BhY2UgV1RGCisKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCi0jZW5kaWYgLy8gUG9seW1vcnBo
aWNHZXRCeUlkTGlzdF9oCisjZW5kaWYgLy8gUG9seW1vcnBoaWNBY2Nlc3NfaAogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGlj
R2V0QnlJZExpc3QuY3BwCShyZXZpc2lvbiAxODkzMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsMTU1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBvbHltb3JwaGljR2V0
QnlJZExpc3QuaCIKLQotI2lmIEVOQUJMRShKSVQpCi0KLSNpbmNsdWRlICJDb2RlQmxvY2suaCIK
LSNpbmNsdWRlICJIZWFwLmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIlN0
cnVjdHVyZVN0dWJJbmZvLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1HZXRCeUlkQWNjZXNzOjpH
ZXRCeUlkQWNjZXNzKAotICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBl
LCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSwKLSAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNl
dCkKLSAgICA6IG1fdHlwZSh0eXBlKQotICAgICwgbV9zdHJ1Y3R1cmUodm0sIG93bmVyLCBzdHJ1
Y3R1cmUpCi0gICAgLCBtX2NvbmRpdGlvblNldChjb25kaXRpb25TZXQpCi0gICAgLCBtX3N0dWJS
b3V0aW5lKHN0dWJSb3V0aW5lKQotewotfQotCi1HZXRCeUlkQWNjZXNzOjp+R2V0QnlJZEFjY2Vz
cygpCi17Ci19Ci0KLUdldEJ5SWRBY2Nlc3MgR2V0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0
dWJJbmZvKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgaW5pdGlhbFNsb3dQYXRoID0KLSAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSk7
Ci0gICAgCi0gICAgR2V0QnlJZEFjY2VzcyByZXN1bHQ7Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NF
UlQoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYpOwotICAgIAot
ICAgIHJlc3VsdC5tX3R5cGUgPSBTaW1wbGVJbmxpbmU7Ci0gICAgcmVzdWx0Lm1fc3RydWN0dXJl
LmNvcHlGcm9tKHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZSk7Ci0g
ICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBKSVRTdHViUm91dGluZTo6Y3JlYXRlU2VsZk1hbmFn
ZWRSb3V0aW5lKGluaXRpYWxTbG93UGF0aCk7Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotYm9vbCBHZXRCeUlkQWNjZXNzOjp2aXNpdFdlYWsoVk0mIHZtKSBjb25zdAotewotICAgIGlm
IChtX3N0cnVjdHVyZSAmJiAhSGVhcDo6aXNNYXJrZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFtX2NvbmRpdGlvblNldC5hcmVTdGlsbExpdmUo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghbV9zdHViUm91dGluZS0+dmlzaXRX
ZWFrKHZtKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1Q
b2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nl
c3NfdW5zZXQpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBtX2xpc3QuYXBwZW5kKEdldEJ5
SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1cmVTdHViSW5mbyhzdHViSW5mbykpOwotfQotCi1Qb2x5bW9y
cGhpY0dldEJ5SWRMaXN0KiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojpmcm9tKFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nl
c3NfZ2V0X2J5X2lkX2xpc3QpCi0gICAgICAgIHJldHVybiBzdHViSW5mby51LmdldEJ5SWRMaXN0
Lmxpc3Q7Ci0gICAgCi0gICAgQVNTRVJUKAotICAgICAgICBzdHViSW5mby5hY2Nlc3NUeXBlID09
IGFjY2Vzc19nZXRfYnlfaWRfc2VsZgotICAgICAgICB8fCBzdHViSW5mby5hY2Nlc3NUeXBlID09
IGFjY2Vzc191bnNldCk7Ci0gICAgCi0gICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogcmVzdWx0
ID0gbmV3IFBvbHltb3JwaGljR2V0QnlJZExpc3Qoc3R1YkluZm8pOwotICAgIAotICAgIHN0dWJJ
bmZvLmluaXRHZXRCeUlkTGlzdChyZXN1bHQpOwotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLVBvbHltb3JwaGljR2V0QnlJZExpc3Q6On5Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0KCkgeyB9
Ci0KLU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpjdXJyZW50
U2xvd1BhdGhUYXJnZXQoCi0gICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKSBjb25zdAot
ewotICAgIGlmIChpc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNl
KTsKLSAgICByZXR1cm4gbV9saXN0Lmxhc3QoKS5zdHViUm91dGluZSgpLT5jb2RlKCkuY29kZSgp
OwotfQotCi12b2lkIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmFkZEFjY2Vzcyhjb25zdCBHZXRC
eUlkQWNjZXNzJiBhY2Nlc3MpCi17Ci0gICAgQVNTRVJUKCFpc0Z1bGwoKSk7Ci0gICAgLy8gTWFr
ZSBzdXJlIHRoYXQgdGhlIHJlc2l6aW5nIG9wdGltaXplcyBmb3Igc3BhY2UsIG5vdCB0aW1lLgot
ICAgIG1fbGlzdC5yZXNpemVUb0ZpdChtX2xpc3Quc2l6ZSgpICsgMSk7Ci0gICAgbV9saXN0Lmxh
c3QoKSA9IGFjY2VzczsKLX0KLQotYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojppc0Z1bGwo
KSBjb25zdAotewotICAgIEFTU0VSVChzaXplKCkgPD0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9T
SVpFKTsKLSAgICByZXR1cm4gc2l6ZSgpID09IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRTsK
LX0KLQotYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojppc0FsbW9zdEZ1bGwoKSBjb25zdAot
ewotICAgIEFTU0VSVChzaXplKCkgPD0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKTsKLSAg
ICByZXR1cm4gc2l6ZSgpID49IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDE7Ci19Ci0K
LWJvb2wgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6ZGlkU2VsZlBhdGNoaW5nKCkgY29uc3QKLXsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXplKCk7IGktLTspIHsKLSAgICAgICAgaWYgKGF0KGkp
LnR5cGUoKSA9PSBHZXRCeUlkQWNjZXNzOjpTaW1wbGVJbmxpbmUpCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFBvbHltb3JwaGlj
R2V0QnlJZExpc3Q6OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0Ci17Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIGlmICghYXQoaSkudmlzaXRXZWFrKHZtKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQotCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0LmgJKHJldmlzaW9uIDE4OTMyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTMz
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2lmbmRlZiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0X2gKLSNkZWZpbmUgUG9seW1vcnBo
aWNHZXRCeUlkTGlzdF9oCi0KLSNpZiBFTkFCTEUoSklUKQotCi0jaW5jbHVkZSAiQ29kZU9yaWdp
bi5oIgotI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCi0jaW5jbHVkZSAiT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQuaCIKLSNpbmNsdWRlICJPcGNvZGUuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1
cmUuaCIKLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFz
cyBDb2RlQmxvY2s7Ci1zdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm87Ci0KLWNsYXNzIEdldEJ5SWRB
Y2Nlc3MgewotcHVibGljOgotICAgIGVudW0gQWNjZXNzVHlwZSB7Ci0gICAgICAgIEludmFsaWQs
Ci0gICAgICAgIFNpbXBsZUlubGluZSwgLy8gVGhpcyBpcyB0aGUgcGF0Y2hlZCBpbmxpbmUgYWNj
ZXNzLgotICAgICAgICBTaW1wbGVTdHViLCAvLyBUaGlzIGlzIGEgc3R1Yi4KLSAgICAgICAgV2F0
Y2hlZFN0dWIsCi0gICAgICAgIEdldHRlciwKLSAgICAgICAgQ3VzdG9tR2V0dGVyLAotICAgICAg
ICBTaW1wbGVNaXNzLAotICAgIH07Ci0gICAgCi0gICAgR2V0QnlJZEFjY2VzcygpCi0gICAgICAg
IDogbV90eXBlKEludmFsaWQpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBHZXRCeUlkQWNjZXNz
KAotICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUsIFBhc3NSZWZQdHI8SklU
U3R1YlJvdXRpbmU+LCBTdHJ1Y3R1cmUqLAotICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpKTsKLSAgICAKLSAgICB+
R2V0QnlJZEFjY2VzcygpOwotICAgIAotICAgIHN0YXRpYyBHZXRCeUlkQWNjZXNzIGZyb21TdHJ1
Y3R1cmVTdHViSW5mbyhTdHJ1Y3R1cmVTdHViSW5mbyYpOwotICAgIAotICAgIGJvb2wgaXNTZXQo
KSBjb25zdCB7IHJldHVybiBtX3R5cGUgIT0gSW52YWxpZDsgfQotICAgIGJvb2wgb3BlcmF0b3Ih
KCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KLSAgICAKLSAgICBBY2Nlc3NUeXBlIHR5cGUo
KSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlLmdldCgpOyB9Ci0gICAgCi0gICAgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJu
IG1fY29uZGl0aW9uU2V0OyB9Ci0gICAgCi0gICAgSklUU3R1YlJvdXRpbmUqIHN0dWJSb3V0aW5l
KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc1NldCgpKTsKLSAgICAgICAgcmV0dXJu
IG1fc3R1YlJvdXRpbmUuZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgZG9lc0NhbGxzKCkg
Y29uc3QgeyByZXR1cm4gdHlwZSgpID09IEdldHRlciB8fCB0eXBlKCkgPT0gQ3VzdG9tR2V0dGVy
OyB9Ci0gICAgCi0gICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25zdDsKLQotcHJpdmF0ZToKLSAg
ICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOwotICAgIAotICAgIEFjY2Vzc1R5cGUgbV90eXBlOwot
ICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOwotICAgIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OwotICAgIFJlZlB0cjxKSVRTdHViUm91dGlu
ZT4gbV9zdHViUm91dGluZTsKLX07Ci0KLWNsYXNzIFBvbHltb3JwaGljR2V0QnlJZExpc3Qgewot
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIC8vIEVpdGhlciBjcmVh
dGVzIGEgbmV3IHBvbHltb3JwaGljIGdldCBsaXN0LCBvciByZXR1cm5zIHRoZSBvbmUgdGhhdCBp
cyBhbHJlYWR5IGluCi0gICAgLy8gcGxhY2UuCi0gICAgc3RhdGljIFBvbHltb3JwaGljR2V0QnlJ
ZExpc3QqIGZyb20oU3RydWN0dXJlU3R1YkluZm8mKTsKLSAgICAKLSAgICB+UG9seW1vcnBoaWNH
ZXRCeUlkTGlzdCgpOwotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdXJyZW50U2xv
d1BhdGhUYXJnZXQoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKSBjb25zdDsKLSAgICAKLSAg
ICB2b2lkIGFkZEFjY2Vzcyhjb25zdCBHZXRCeUlkQWNjZXNzJik7Ci0gICAgCi0gICAgYm9vbCBp
c0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9saXN0LmlzRW1wdHkoKTsgfQotICAgIHVuc2lnbmVk
IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2xpc3Quc2l6ZSgpOyB9Ci0gICAgYm9vbCBpc0Z1bGwo
KSBjb25zdDsKLSAgICBib29sIGlzQWxtb3N0RnVsbCgpIGNvbnN0OyAvLyBUcnVlIGlmIGFkZGlu
ZyBhbiBlbGVtZW50IHdvdWxkIG1ha2UgaXNGdWxsKCkgdHJ1ZS4KLSAgICBjb25zdCBHZXRCeUlk
QWNjZXNzJiBhdCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2xpc3RbaV07IH0KLSAgICBj
b25zdCBHZXRCeUlkQWNjZXNzJiBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJu
IG1fbGlzdFtpXTsgfQotICAgIAotICAgIGJvb2wgZGlkU2VsZlBhdGNoaW5nKCkgY29uc3Q7IC8v
IEFyZSBhbnkgb2YgdGhlIGFjY2Vzc2VzIFNpbXBsZUlubGluZT8KLSAgICAKLSAgICBib29sIHZp
c2l0V2VhayhWTSYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxv
Y2s7Ci0gICAgCi0gICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyYp
OwotICAgIAotICAgIFZlY3RvcjxHZXRCeUlkQWNjZXNzLCAyPiBtX2xpc3Q7Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0KLSNlbmRpZiAvLyBQb2x5
bW9ycGhpY0dldEJ5SWRMaXN0X2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShyZXZpc2lvbiAxODkzMjQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNiwzNyArMzYsNTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWYgRU5B
QkxFKEpJVCkKIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmRlcmVmKCkKIHsKLSAgICBzd2l0Y2gg
KGFjY2Vzc1R5cGUpIHsKLSAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfbGlzdDogewotICAgICAg
ICBkZWxldGUgdS5nZXRCeUlkTGlzdC5saXN0OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9saXN0OgotICAgICAgICBkZWxldGUgdS5wdXRCeUlkTGlz
dC5saXN0OwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBhY2Nlc3NfaW5fbGlzdDogewotICAg
ICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJl
cyA9IHUuaW5MaXN0LnN0cnVjdHVyZUxpc3Q7Ci0gICAgICAgIGRlbGV0ZSBwb2x5bW9ycGhpY1N0
cnVjdHVyZXM7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5
X2lkX3RyYW5zaXRpb25fbm9ybWFsOgotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0
aW9uX2RpcmVjdDoKLSAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmFkb3B0UmF3
UG9pbnRlcih1LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0NvbmRpdGlvblNldCk7Ci0gICAgICAgIHUu
cHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0ID0gbnVsbHB0cjsKLSAgICAgICAgcmV0
dXJuOwotICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmOgotICAgIGNhc2UgYWNjZXNzX3B1
dF9ieV9pZF9yZXBsYWNlOgotICAgIGNhc2UgYWNjZXNzX3Vuc2V0OgotICAgICAgICAvLyBUaGVz
ZSBpbnN0cnVjdGlvbnMgZG9uJ3QgaGF2ZSB0byByZWxlYXNlIGFueSBhbGxvY2F0ZWQgbWVtb3J5
CisgICAgc3dpdGNoIChjYWNoZVR5cGUpIHsKKyAgICBjYXNlIENhY2hlVHlwZTo6U3R1YjoKKyAg
ICAgICAgZGVsZXRlIHUuc3R1YjsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2FjaGVUeXBl
OjpVbnNldDoKKyAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJZFNlbGY6CisgICAgY2FzZSBDYWNo
ZVR5cGU6OlB1dEJ5SWRSZXBsYWNlCiAgICAgICAgIHJldHVybjsKLSAgICBkZWZhdWx0OgotICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KKworICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVB0ciBTdHJ1Y3R1
cmVTdHViSW5mbzo6YWRkQWNjZXNzQ2FzZSgKKyAgICBWTSYgdm0sIENvZGVCbG9jayogY29kZUJs
b2NrLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+
IGFjY2Vzc0Nhc2UpCit7CisgICAgaWYgKCFhY2Nlc3NDYXNlKQorICAgICAgICByZXR1cm4gTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyKCk7CisgICAgCisgICAgaWYgKGNhY2hlVHlwZSA9PSBDYWNoZVR5
cGU6OlN0dWIpCisgICAgICAgIHJldHVybiB1LnN0dWItPnJlZ2VuZXJhdGVXaXRoQ2FzZSh2bSwg
Y29kZUJsb2NrLCAqdGhpcywgaWRlbnQsIGFjY2Vzc0Nhc2UpOworCisgICAgc3RkOjp1bmlxdWVf
cHRyPFBvbHltb3JwaGljQWNjZXNzPiBhY2Nlc3MgPSBzdGQ6Om1ha2VfdW5pcXVlPFBvbHltb3Jw
aGljQWNjZXNzPigpOworICAgIAorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2Fz
ZT4+IGFjY2Vzc0Nhc2VzOworICAgIAorICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBw
cmV2aW91c0Nhc2UgPQorICAgICAgICBBY2Nlc3NDYXNlOjpmcm9tU3RydWN0dXJlU3R1YkluZm8o
dm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksICp0aGlzKTsKKyAgICBpZiAocHJldmlv
dXNDYXNlKQorICAgICAgICBhY2Nlc3NDYXNlcy5hcHBlbmQoc3RkOjptb3ZlKHByZXZpb3VzQ2Fz
ZSkpOworCisgICAgYWNjZXNzQ2FzZXMuYXBwZW5kKHN0ZDo6bW92ZShhY2Nlc3NDYXNlKSk7CisK
KyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVzdWx0ID0KKyAgICAgICAgYWNjZXNzLT5yZWdl
bmVyYXRlV2l0aENhc2VzKHZtLCBjb2RlQmxvY2ssICp0aGlzLCBpZGVudCwgYWNjZXNzQ2FzZXMp
OworCisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIoKTsKKworICAgIGNhY2hlVHlwZSA9IENhY2hlVHlwZTo6U3R1YjsKKyAgICB1LnN0dWIgPSBh
Y2Nlc3MucmVsZWFzZSgpOwogfQogCiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpyZXNldChDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKIHsKLSAgICBpZiAoYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQp
CisgICAgaWYgKGNhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlVuc2V0KQogICAgICAgICByZXR1cm47
CiAgICAgCiAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgewpAQCAtNzQsMTggKzg5LDIx
IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnJlc2V0KENvZGVCbG9jayoKICAgICAgICAgLy8g
b2YgdGhlIENvZGVCbG9jay4KICAgICAgICAgZGF0YUxvZygiQ2xlYXJpbmcgc3RydWN0dXJlIGNh
Y2hlIChraW5kICIsIHN0YXRpY19jYXN0PGludD4oYWNjZXNzVHlwZSksICIpIGluICIsIFJhd1Bv
aW50ZXIoY29kZUJsb2NrKSwgIi5cbiIpOwogICAgIH0KLSAgICAKLSAgICBpZiAoaXNHZXRCeUlk
QWNjZXNzKHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KGFjY2Vzc1R5cGUpKSkKKworICAgIHN3aXRj
aCAoYWNjZXNzVHlwZSkgeworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0OgogICAgICAgICByZXNl
dEdldEJ5SUQoY29kZUJsb2NrLCAqdGhpcyk7Ci0gICAgZWxzZSBpZiAoaXNQdXRCeUlkQWNjZXNz
KHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KGFjY2Vzc1R5cGUpKSkKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXQ6CiAgICAgICAgIHJlc2V0UHV0QnlJRChjb2RlQmxvY2ss
ICp0aGlzKTsKLSAgICBlbHNlIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNJbkFjY2Vzcyhz
dGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihhY2Nlc3NUeXBlKSkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEFjY2Vzc1R5cGU6OkluOgogICAgICAgICByZXNldEluKGNvZGVCbG9jaywgKnRoaXMp
OworICAgICAgICBicmVhazsKICAgICB9CiAgICAgCiAgICAgZGVyZWYoKTsKLSAgICBhY2Nlc3NU
eXBlID0gYWNjZXNzX3Vuc2V0OworICAgIGNhY2hlVHlwZSA9IENhY2hlVHlwZTo6VW5zZXQ7CiAg
ICAgc3R1YlJvdXRpbmUgPSBudWxscHRyOwogICAgIHdhdGNocG9pbnRzID0gbnVsbHB0cjsKIH0K
QEAgLTkzLDQxICsxMTEsMTggQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoQ29kZUJs
b2NrKgogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbmNlcyhDb2RlQmxv
Y2sqIGNvZGVCbG9jaykKIHsKICAgICBWTSYgdm0gPSAqY29kZUJsb2NrLT52bSgpOwotICAgIAot
ICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgewotICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxm
OgotICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQodS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3Ry
dWN0dXJlLmdldCgpKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3Q6IHsKLSAgICAgICAgaWYgKHUuZ2V0QnlJZExpc3Qu
bGlzdC0+dmlzaXRXZWFrKHZtKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoKLSAg
ICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6Ci0gICAgICAgIGlmIChI
ZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgp
KQotICAgICAgICAgICAgJiYgSGVhcDo6aXNNYXJrZWQodS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1
Y3R1cmUuZ2V0KCkpCi0gICAgICAgICAgICAmJiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6
ZnJvbVJhd1BvaW50ZXIodS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQpLmFyZVN0
aWxsTGl2ZSgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFjZToKLSAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKHUu
cHV0QnlJZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSkpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9saXN0Ogot
ICAgICAgICBpZiAodS5wdXRCeUlkTGlzdC5saXN0LT52aXNpdFdlYWsodm0pKQorCisgICAgc3dp
dGNoIChjYWNoZVR5cGUpIHsKKyAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJZFNlbGY6CisgICAg
Y2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOgorICAgICAgICBpZiAoSGVhcDo6aXNNYXJr
ZWQodS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpKSkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBhY2Nlc3NfaW5fbGlzdDogewotICAgICAg
ICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlcyA9
IHUuaW5MaXN0LnN0cnVjdHVyZUxpc3Q7Ci0gICAgICAgIGlmIChwb2x5bW9ycGhpY1N0cnVjdHVy
ZXMtPnZpc2l0V2Vhayh1LmluTGlzdC5saXN0U2l6ZSkpCisgICAgY2FzZSBDYWNoZVR5cGU6OlN0
dWI6CisgICAgICAgIGlmICh1LnN0dWItPnZpc2l0V2Vhayh2bSkpCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIGJyZWFrOwotICAgIH0KICAgICBkZWZhdWx0OgotICAgICAgICAvLyBUaGUg
cmVzdCBvZiB0aGUgaW5zdHJ1Y3Rpb25zIGRvbid0IHJlcXVpcmUgcmVmZXJlbmNlcywgc28gdGhl
cmUgaXMgbm8gbmVlZCB0bwotICAgICAgICAvLyBkbyBhbnl0aGluZy4KICAgICAgICAgcmV0dXJu
OwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDE4OTMyNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Miw3ICszMiw3IEBACiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKICNpbmNsdWRlICJPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgotI2luY2x1ZGUg
IlBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdC5oIgorI2luY2x1ZGUgIlBvbHltb3JwaGlj
QWNjZXNzLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKICNpbmNsdWRlICJTcGlsbFJlZ2lz
dGVyc01vZGUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKQEAgLTQyLDU3ICs0MiwyNSBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogI2lmIEVOQUJMRShKSVQpCiAKLWNsYXNzIFBvbHltb3JwaGljR2V0
QnlJZExpc3Q7Ci1jbGFzcyBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0OworY2xhc3MgUG9seW1vcnBo
aWNBY2Nlc3M7CiAKLWVudW0gQWNjZXNzVHlwZSB7Ci0gICAgYWNjZXNzX2dldF9ieV9pZF9zZWxm
LAotICAgIGFjY2Vzc19nZXRfYnlfaWRfbGlzdCwKLSAgICBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5z
aXRpb25fbm9ybWFsLAotICAgIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3QsCi0g
ICAgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlLAotICAgIGFjY2Vzc19wdXRfYnlfaWRfbGlzdCwK
LSAgICBhY2Nlc3NfdW5zZXQsCi0gICAgYWNjZXNzX2luX2xpc3QKK2VudW0gY2xhc3MgQWNjZXNz
VHlwZSA6IGludDhfdCB7CisgICAgR2V0LAorICAgIFB1dCwKKyAgICBJbgogfTsKIAotaW5saW5l
IGJvb2wgaXNHZXRCeUlkQWNjZXNzKEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSkKLXsKLSAgICBzd2l0
Y2ggKGFjY2Vzc1R5cGUpIHsKLSAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZjoKLSAgICBj
YXNlIGFjY2Vzc19nZXRfYnlfaWRfbGlzdDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLSAgICAKLWlubGluZSBib29s
IGlzUHV0QnlJZEFjY2VzcyhBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUpCi17Ci0gICAgc3dpdGNoIChh
Y2Nlc3NUeXBlKSB7Ci0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFs
OgotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdDoKLSAgICBjYXNl
IGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFjZToKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfbGlz
dDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLX0KLQotaW5saW5lIGJvb2wgaXNJbkFjY2VzcyhBY2Nlc3NUeXBlIGFjY2Vz
c1R5cGUpCi17Ci0gICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7Ci0gICAgY2FzZSBhY2Nlc3NfaW5f
bGlzdDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLX0KK2VudW0gY2xhc3MgQ2FjaGVUeXBlIDogaW50OF90IHsKKyAgICBV
bnNldCwKKyAgICBHZXRCeUlkU2VsZiwKKyAgICBQdXRCeUlkUmVwbGFjZSwKKyAgICBTdHViCit9
OwogCiBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewotICAgIFN0cnVjdHVyZVN0dWJJbmZvKCkK
LSAgICAgICAgOiBhY2Nlc3NUeXBlKGFjY2Vzc191bnNldCkKKyAgICBTdHJ1Y3R1cmVTdHViSW5m
byhBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUpCisgICAgICAgIDogYWNjZXNzVHlwZShhY2Nlc3NUeXBl
KQorICAgICAgICAsIGNhY2hlVHlwZShDYWNoZVR5cGU6OlVuc2V0KQogICAgICAgICAsIHNlZW4o
ZmFsc2UpCiAgICAgICAgICwgcmVzZXRCeUdDKGZhbHNlKQogICAgICAgICAsIHRvb2tTbG93UGF0
aChmYWxzZSkKQEAgLTEwMCw1MyArNjgsMzEgQEAgc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsK
ICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBpbml0R2V0QnlJZFNlbGYoVk0mIHZtLCBKU0NlbGwq
IG93bmVyLCBTdHJ1Y3R1cmUqIGJhc2VPYmplY3RTdHJ1Y3R1cmUpCisgICAgdm9pZCBpbml0R2V0
QnlJZFNlbGYoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIGJhc2VPYmplY3RTdHJ1
Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKICAgICB7Ci0gICAgICAgIGFjY2Vzc1R5cGUg
PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGY7Ci0KLSAgICAgICAgdS5nZXRCeUlkU2VsZi5iYXNlT2Jq
ZWN0U3RydWN0dXJlLnNldCh2bSwgb3duZXIsIGJhc2VPYmplY3RTdHJ1Y3R1cmUpOwotICAgIH0K
KyAgICAgICAgY2FjaGVUeXBlID0gQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjsKIAotICAgIHZvaWQg
aW5pdEdldEJ5SWRMaXN0KFBvbHltb3JwaGljR2V0QnlJZExpc3QqIGxpc3QpCi0gICAgewotICAg
ICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX2dldF9ieV9pZF9saXN0OwotICAgICAgICB1LmdldEJ5
SWRMaXN0Lmxpc3QgPSBsaXN0OworICAgICAgICB1LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1
cmUuc2V0KHZtLCBvd25lciwgYmFzZU9iamVjdFN0cnVjdHVyZSk7CisgICAgICAgIHUuYnlJZFNl
bGYub2Zmc2V0ID0gb2Zmc2V0OwogICAgIH0KIAotICAgIC8vIFB1dEJ5SWQqCi0KLSAgICB2b2lk
IGluaXRQdXRCeUlkVHJhbnNpdGlvbihWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSog
cHJldmlvdXNTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCBjb25kaXRpb25TZXQsIGJvb2wgaXNEaXJlY3QpCisgICAgdm9pZCBpbml0UHV0
QnlJZFJlcGxhY2UoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIGJhc2VPYmplY3RT
dHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKICAgICB7Ci0gICAgICAgIGlmIChpc0Rp
cmVjdCkKLSAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRp
b25fZGlyZWN0OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNz
X3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDsKKyAgICAgICAgY2FjaGVUeXBlID0gQ2FjaGVU
eXBlOjpQdXRCeUlkUmVwbGFjZTsKIAotICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZp
b3VzU3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHByZXZpb3VzU3RydWN0dXJlKTsKLSAgICAgICAg
dS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsK
LSAgICAgICAgdS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQgPSBjb25kaXRpb25T
ZXQucmVsZWFzZVJhd1BvaW50ZXIoKTsKKyAgICAgICAgdS5ieUlkU2VsZi5iYXNlT2JqZWN0U3Ry
dWN0dXJlLnNldCh2bSwgb3duZXIsIGJhc2VPYmplY3RTdHJ1Y3R1cmUpOworICAgICAgICB1LmJ5
SWRTZWxmLm9mZnNldCA9IG9mZnNldDsKICAgICB9CiAKLSAgICB2b2lkIGluaXRQdXRCeUlkUmVw
bGFjZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVy
ZSkKKyAgICB2b2lkIGluaXRTdHViKHN0ZDo6dW5pcXVlX3B0cjxQb2x5bW9ycGhpY0FjY2Vzcz4g
c3R1YikKICAgICB7Ci0gICAgICAgIGFjY2Vzc1R5cGUgPSBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxh
Y2U7Ci0gICAgCi0gICAgICAgIHUucHV0QnlJZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZS5z
ZXQodm0sIG93bmVyLCBiYXNlT2JqZWN0U3RydWN0dXJlKTsKKyAgICAgICAgY2FjaGVUeXBlID0g
Q2FjaGVUeXBlOjpTdHViOworICAgICAgICB1LnN0dWIgPSBzdHViLnJlbGVhc2UoKTsKICAgICB9
Ci0gICAgICAgIAotICAgIHZvaWQgaW5pdFB1dEJ5SWRMaXN0KFBvbHltb3JwaGljUHV0QnlJZExp
c3QqIGxpc3QpCi0gICAgewotICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX3B1dF9ieV9pZF9s
aXN0OwotICAgICAgICB1LnB1dEJ5SWRMaXN0Lmxpc3QgPSBsaXN0OwotICAgIH0KLSAgICAKLSAg
ICB2b2lkIGluaXRJbkxpc3QoUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBsaXN0LCBp
bnQgbGlzdFNpemUpCi0gICAgewotICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX2luX2xpc3Q7
Ci0gICAgICAgIHUuaW5MaXN0LnN0cnVjdHVyZUxpc3QgPSBsaXN0OwotICAgICAgICB1LmluTGlz
dC5saXN0U2l6ZSA9IGxpc3RTaXplOwotICAgIH0KLSAgICAgICAgCisKKyAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgYWRkQWNjZXNzQ2FzZSgKKyAgICAgICAgVk0mLCBDb2RlQmxvY2sqLCBjb25z
dCBJZGVudGlmaWVyJiwgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGFjY2Vzc0Nhc2UpOwor
CiAgICAgdm9pZCByZXNldChDb2RlQmxvY2sqKTsKIAogICAgIHZvaWQgZGVyZWYoKTsKQEAgLTE3
Miw4ICsxMTgsOSBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewogICAgICAgICAgICAgd2F0
Y2hwb2ludHMsIGNvZGVCbG9jaywgdGhpcywgY29uZGl0aW9uKTsKICAgICB9CiAgICAgCi0gICAg
aW50OF90IGFjY2Vzc1R5cGU7Ci0gICAgYm9vbCBzZWVuIDogMTsKKyAgICBBY2Nlc3NUeXBlIGFj
Y2Vzc1R5cGU7CisgICAgQ2FjaGVUeXBlIGNhY2hlVHlwZTsKKyAgICBib29sIHNlZW47CiAgICAg
Ym9vbCByZXNldEJ5R0MgOiAxOwogICAgIGJvb2wgdG9va1Nsb3dQYXRoIDogMTsKIApAQCAtMjAz
LDM0ICsxNTAsMTMgQEAgc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKIAogICAgIHVuaW9uIHsK
ICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIC8vIEl0IHdvdWxkIGJlIHVud2lzZSB0byBw
dXQgYW55dGhpbmcgaGVyZSwgYXMgaXQgd2lsbCBzdXJlbHkgYmUgb3ZlcndyaXR0ZW4uCi0gICAg
ICAgIH0gdW5zZXQ7Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJC
YXNlPFN0cnVjdHVyZT4gYmFzZU9iamVjdFN0cnVjdHVyZTsKLSAgICAgICAgfSBnZXRCeUlkU2Vs
ZjsKLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIFBvbHltb3JwaGljR2V0QnlJZExpc3Qq
IGxpc3Q7Ci0gICAgICAgIH0gZ2V0QnlJZExpc3Q7Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAg
ICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4gcHJldmlvdXNTdHJ1Y3R1cmU7Ci0gICAg
ICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4gc3RydWN0dXJlOwotICAgICAgICAg
ICAgdm9pZCogcmF3Q29uZGl0aW9uU2V0OwotICAgICAgICB9IHB1dEJ5SWRUcmFuc2l0aW9uOwot
ICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+
IGJhc2VPYmplY3RTdHJ1Y3R1cmU7Ci0gICAgICAgIH0gcHV0QnlJZFJlcGxhY2U7Ci0gICAgICAg
IHN0cnVjdCB7Ci0gICAgICAgICAgICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiBsaXN0OwotICAg
ICAgICB9IHB1dEJ5SWRMaXN0OwotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgUG9seW1v
cnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBzdHJ1Y3R1cmVMaXN0OwotICAgICAgICAgICAgaW50
IGxpc3RTaXplOwotICAgICAgICB9IGluTGlzdDsKKyAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldDsKKyAgICAgICAgfSBieUlkU2VsZjsKKyAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3Mq
IHN0dWI7CiAgICAgfSB1OwogCi0gICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGlu
ZTsKICAgICBDb2RlTG9jYXRpb25DYWxsIGNhbGxSZXR1cm5Mb2NhdGlvbjsKLSAgICBSZWZQdHI8
V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvPiB3YXRjaHBvaW50czsKIH07CiAKIGlubGlu
ZSBDb2RlT3JpZ2luIGdldFN0cnVjdHVyZVN0dWJJbmZvQ29kZU9yaWdpbihTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3RydWN0dXJlU3R1YkluZm8pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDE4OTMyNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2Myw3ICs1
NjMsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBicmFuY2gzMihFcXVhbCwgcmVncy50YWdH
UFIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKTsKICNlbmRpZgogICAg
IH0KLSAgICAKKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgSnVtcCBicmFuY2hTdHJ1
Y3R1cmUoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIFQgbGVmdEhhbmRTaWRlLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7CkBAIC04MzIsNiArODMyLDE1IEBAIHB1YmxpYzoKICNl
bmRpZgogICAgIH0KIAorICAgIHZvaWQgYm94Qm9vbGVhblBheWxvYWQoYm9vbCB2YWx1ZSwgR1BS
UmVnIHBheWxvYWRHUFIpCisgICAgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIG1vdmUo
VHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UgKyB2YWx1ZSksIHBheWxvYWRHUFIpOworI2Vsc2UKKyAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIodmFsdWUpLCBwYXlsb2FkR1BSKTsKKyNlbmRpZgorICAg
IH0KKwogICAgIHZvaWQgYm94Qm9vbGVhbihHUFJSZWcgYm9vbEdQUiwgSlNWYWx1ZVJlZ3MgYm94
ZWRSZWdzKQogICAgIHsKICAgICAgICAgYm94Qm9vbGVhblBheWxvYWQoYm9vbEdQUiwgYm94ZWRS
ZWdzLnBheWxvYWRHUFIoKSk7CkBAIC04MzksNiArODQ4LDE3IEBAIHB1YmxpYzoKICAgICAgICAg
bW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZyksIGJveGVkUmVncy50YWdHUFIo
KSk7CiAjZW5kaWYKICAgICB9CisKKyAgICB2b2lkIGJveEludDMyKEdQUlJlZyBpbnRHUFIsIEpT
VmFsdWVSZWdzIGJveGVkUmVncykKKyAgICB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAg
aml0Lm1vdmUoaW50R1BSLCBib3hlZFJlZ3MuZ3ByKCkpOworICAgICAgICBqaXQub3I2NChUcnVz
dGVkSW1tNjQoVGFnVHlwZU51bWJlciksIGJveGVkUmVncy5ncHIoKSk7CisjZWxzZQorICAgICAg
ICBqaXQubW92ZShpbnRHUFIsIGJveGVkUmVncy5wYXlsb2FkR1BSKCkpOworICAgICAgICBqaXQu
bW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCBib3hlZFJlZ3MudGFnR1BSKCkp
OworI2VuZGlmCisgICAgfQogICAgIAogICAgIHZvaWQgY2FsbEV4Y2VwdGlvbkZ1enooKTsKICAg
ICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAko
cmV2aXNpb24gMTg5MzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRp
b25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg3LDcgKzE4Nyw2IEBAIEVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKICAgICAgICAgc3R1YkluZm8tPnNlZW4gPSB0cnVl
OwogICAgIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoaGFzUmVzdWx0PyBzbG90LmdldFZh
bHVlKGV4ZWMsIGlkZW50KSA6IGpzVW5kZWZpbmVkKCkpOwotCiB9CiAKIEVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW5PcHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbywgSlNDZWxsKiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCog
a2V5KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAx
ODkzMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjksMzUgKzEyOSw2IEBAIHN0YXRpYyB2b2lkIHJlcGF0Y2hCeUlkU2VsZkFj
Y2VzcygKICNlbmRpZgogfQogCi1zdGF0aWMgdm9pZCBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0
aW9uKAotICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24sIENvZGVC
bG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCi0gICAgQ0NhbGxI
ZWxwZXJzJiBqaXQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBHUFJS
ZWcgc2NyYXRjaEdQUikKLXsKLSAgICBpZiAoY29uZGl0aW9uLmlzV2F0Y2hhYmxlQXNzdW1pbmdJ
bXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkgewotICAgICAgICBjb25kaXRpb24ub2JqZWN0KCkt
PnN0cnVjdHVyZSgpLT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludCgKLSAgICAgICAgICAgIHN0dWJJ
bmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2NrLCBjb25kaXRpb24pKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY29uZGl0aW9uLm9iamVjdCgp
LT5zdHJ1Y3R1cmUoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChjb25kaXRpb24uc3RydWN0dXJlRW5z
dXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoc3RydWN0dXJlKSk7
Ci0gICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoY29uZGl0aW9uLm9i
amVjdCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgZmFpbHVyZUNhc2VzLmFwcGVuZCgKLSAgICAgICAg
aml0LmJyYW5jaFN0cnVjdHVyZSgKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHN0cnVjdHVyZSkpOwotfQotCi1zdGF0aWMgdm9pZCBj
aGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9ucygKLSAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYgc2V0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvLAotICAgIENDYWxsSGVscGVycyYgaml0LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QmIGZhaWx1cmVDYXNlcywgR1BSUmVnIHNjcmF0Y2hHUFIpCi17Ci0gICAgZm9yIChjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogc2V0KSB7Ci0gICAgICAgIGNoZWNr
T2JqZWN0UHJvcGVydHlDb25kaXRpb24oCi0gICAgICAgICAgICBjb25kaXRpb24sIGNvZGVCbG9j
aywgc3R1YkluZm8sIGppdCwgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSKTsKLSAgICB9Ci19Ci0K
IHN0YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
IGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB0YXJnZXQpCiB7CiAgICAgaWYgKE1hY3JvQXNz
ZW1ibGVyOjpjYW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKCkpIHsKQEAg
LTE3NSw1MiArMTQ2LDYgQEAgc3RhdGljIHZvaWQgcmVwbGFjZVdpdGhKdW1wKFN0cnVjdHVyZVN0
dQogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCh0YXJnZXQpKTsKIH0KIAotc3RhdGljIHZvaWQg
ZW1pdFJlc3RvcmVTY3JhdGNoKE1hY3JvQXNzZW1ibGVyJiBzdHViSml0LCBib29sIG5lZWRUb1Jl
c3RvcmVTY3JhdGNoLCBHUFJSZWcgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAmIHN1
Y2Nlc3MsIE1hY3JvQXNzZW1ibGVyOjpKdW1wJiBmYWlsLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QgZmFpbHVyZUNhc2VzKQotewotICAgIGlmIChuZWVkVG9SZXN0b3JlU2NyYXRjaCkgewotICAg
ICAgICBzdHViSml0LnBvcFRvUmVzdG9yZShzY3JhdGNoR1BSKTsKLSAgICAgICAgCi0gICAgICAg
IHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIGxpbmsgZmFp
bHVyZSBjYXNlcyBoZXJlLCBzbyB3ZSBjYW4gcG9wIHNjcmF0Y2hHUFIsIGFuZCB0aGVuIGp1bXAg
YmFjay4KLSAgICAgICAgZmFpbHVyZUNhc2VzLmxpbmsoJnN0dWJKaXQpOwotICAgICAgICAKLSAg
ICAgICAgc3R1YkppdC5wb3BUb1Jlc3RvcmUoc2NyYXRjaEdQUik7Ci0gICAgICAgIAotICAgICAg
ICBmYWlsID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0g
ICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOwotfQotCi1zdGF0aWMgdm9pZCBsaW5rUmVzdG9y
ZVNjcmF0Y2goTGlua0J1ZmZlciYgcGF0Y2hCdWZmZXIsIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0
Y2gsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3MsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZh
aWwsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXMsIENvZGVMb2NhdGlvbkxh
YmVsIHN1Y2Nlc3NMYWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VCZWdpbikKLXsKLSAg
ICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN1Y2Nlc3NMYWJlbCk7Ci0gICAgICAgIAotICAg
IGlmIChuZWVkVG9SZXN0b3JlU2NyYXRjaCkgewotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGZh
aWwsIHNsb3dDYXNlQmVnaW4pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIC8v
IGxpbmsgZmFpbHVyZSBjYXNlcyBkaXJlY3RseSBiYWNrIHRvIG5vcm1hbCBwYXRoCi0gICAgcGF0
Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMsIHNsb3dDYXNlQmVnaW4pOwotfQotCi1zdGF0aWMg
dm9pZCBsaW5rUmVzdG9yZVNjcmF0Y2goTGlua0J1ZmZlciYgcGF0Y2hCdWZmZXIsIGJvb2wgbmVl
ZFRvUmVzdG9yZVNjcmF0Y2gsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgc3VjY2VzcywgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbCwgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlcykKLXsKLSAgICBsaW5rUmVzdG9yZVNjcmF0Y2go
cGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJl
Q2FzZXMsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZv
LnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJl
bEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKLX0KLQotZW51
bSBCeUlkU3R1YktpbmQgewotICAgIEdldFZhbHVlLAotICAgIEdldFVuZGVmaW5lZCwKLSAgICBD
YWxsR2V0dGVyLAotICAgIENhbGxDdXN0b21HZXR0ZXIsCi0gICAgQ2FsbFNldHRlciwKLSAgICBD
YWxsQ3VzdG9tU2V0dGVyCi19OwotCiBzdGF0aWMgY29uc3QgY2hhciogdG9TdHJpbmcoQnlJZFN0
dWJLaW5kIGtpbmQpCiB7CiAgICAgc3dpdGNoIChraW5kKSB7CkBAIC0yNzcsMzEyICsyMDIsNiBA
QCBzdGF0aWMgRnVuY3Rpb25QdHIgY3VzdG9tRm9yKGNvbnN0IFB1dFByCiAgICAgcmV0dXJuIEZ1
bmN0aW9uUHRyKHNsb3QuY3VzdG9tU2V0dGVyKCkpOwogfQogCi1zdGF0aWMgYm9vbCBnZW5lcmF0
ZUJ5SWRTdHViKAotICAgIEV4ZWNTdGF0ZSogZXhlYywgQnlJZFN0dWJLaW5kIGtpbmQsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwKLSAgICBGdW5jdGlvblB0ciBjdXN0b20sIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbywgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQm
IGNvbmRpdGlvblNldCwKLSAgICBKU09iamVjdCogYWx0ZXJuYXRlQmFzZSwgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgYm9vbCBsb2FkVGFyZ2V0RnJvbVByb3h5
LAotICAgIFdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQsIENvZGVMb2NhdGlvbkxhYmVsIHN1
Y2Nlc3NMYWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VMYWJlbCwKLSAgICBSZWZQdHI8
SklUU3R1YlJvdXRpbmU+JiBzdHViUm91dGluZSkKLXsKLSAgICBBU1NFUlQoY29uZGl0aW9uU2V0
LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50
KCkpOwotICAgIAotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIEdQUlJlZyBiYXNlR1BS
ID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKTsKLSAgICBKU1Zh
bHVlUmVncyB2YWx1ZVJlZ3MgPSBKU1ZhbHVlUmVncygKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQot
ICAgICAgICBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVlVGFnR1BSKSwK
LSNlbmRpZgotICAgICAgICBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVl
R1BSKSk7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBUZW1wUmVnaXN0ZXJTZXQoc3R1YkluZm8u
cGF0Y2gudXNlZFJlZ2lzdGVycykuZ2V0RnJlZUdQUigpOwotICAgIGJvb2wgbmVlZFRvUmVzdG9y
ZVNjcmF0Y2ggPSBzY3JhdGNoR1BSID09IEludmFsaWRHUFJSZWc7Ci0gICAgUkVMRUFTRV9BU1NF
UlQoIW5lZWRUb1Jlc3RvcmVTY3JhdGNoIHx8IChraW5kID09IEdldFZhbHVlIHx8IGtpbmQgPT0g
R2V0VW5kZWZpbmVkKSk7Ci0gICAgCi0gICAgQ0NhbGxIZWxwZXJzIHN0dWJKaXQoJmV4ZWMtPnZt
KCksIGV4ZWMtPmNvZGVCbG9jaygpKTsKLSAgICBpZiAobmVlZFRvUmVzdG9yZVNjcmF0Y2gpIHsK
LSAgICAgICAgc2NyYXRjaEdQUiA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUigK
LSAgICAgICAgICAgIGJhc2VHUFIsIHZhbHVlUmVncy50YWdHUFIoKSwgdmFsdWVSZWdzLnBheWxv
YWRHUFIoKSk7Ci0gICAgICAgIHN0dWJKaXQucHVzaFRvU2F2ZShzY3JhdGNoR1BSKTsKLSAgICAg
ICAgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSB0cnVlOwotICAgIH0KLSAgICAKLSAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzOwotCi0gICAgR1BSUmVnIGJhc2VGb3JHZXRH
UFI7Ci0gICAgaWYgKGxvYWRUYXJnZXRGcm9tUHJveHkpIHsKLSAgICAgICAgYmFzZUZvckdldEdQ
UiA9IHZhbHVlUmVncy5wYXlsb2FkR1BSKCk7Ci0gICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQo
c3R1YkppdC5icmFuY2g4KAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCAK
LSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6dHlw
ZUluZm9UeXBlT2Zmc2V0KCkpLCAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoUHVyZUZvcndhcmRpbmdQcm94eVR5cGUpKSk7Ci0KLSAgICAgICAgc3R1YkppdC5sb2Fk
UHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTUHJveHk6OnRhcmdldE9mZnNl
dCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIAotICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5k
KHN0dWJKaXQuYnJhbmNoU3RydWN0dXJlKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIs
IEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCi0gICAgICAgICAgICBzdHJ1Y3R1cmUpKTsK
LSAgICB9IGVsc2UgewotICAgICAgICBiYXNlRm9yR2V0R1BSID0gYmFzZUdQUjsKLQotICAgICAg
ICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoU3RydWN0dXJlKAotICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VGb3JHZXRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIAot
ICAgICAgICAgICAgc3RydWN0dXJlKSk7Ci0gICAgfQotCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICBpZiAoc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJv
cGVydHlXYXRjaHBvaW50KCkgfHwgY29uZGl0aW9uU2V0Lm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNo
cG9pbnQoKSkKLSAgICAgICAgdm0tPnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5
KHByb3BlcnR5TmFtZSwgc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKLQotICAg
IGlmICh3YXRjaHBvaW50U2V0KQotICAgICAgICB3YXRjaHBvaW50U2V0LT5hZGQoc3R1YkluZm8u
YWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKLQotICAgIGNoZWNrT2JqZWN0UHJvcGVydHlDb25k
aXRpb25zKAotICAgICAgICBjb25kaXRpb25TZXQsIGNvZGVCbG9jaywgc3R1YkluZm8sIHN0dWJK
aXQsIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7Ci0KLSAgICBpZiAoaXNWYWxpZE9mZnNldChv
ZmZzZXQpKSB7Ci0gICAgICAgIFN0cnVjdHVyZSogY3VyclN0cnVjdHVyZTsKLSAgICAgICAgaWYg
KGNvbmRpdGlvblNldC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjdXJyU3RydWN0dXJlID0gc3Ry
dWN0dXJlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjdXJyU3RydWN0dXJlID0gY29uZGl0
aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2JqZWN0KCktPnN0cnVjdHVyZSgpOwotICAgICAg
ICBjdXJyU3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHMoKnZt
LCBvZmZzZXQpOwotICAgIH0KLSAgICAKLSAgICBHUFJSZWcgYmFzZUZvckFjY2Vzc0dQUiA9IElu
dmFsaWRHUFJSZWc7Ci0gICAgaWYgKGtpbmQgIT0gR2V0VW5kZWZpbmVkKSB7Ci0gICAgICAgIGlm
ICghY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgLy8gV2UgY291bGQgaGF2
ZSBjbG9iYmVyZWQgc2NyYXRjaEdQUiBlYXJsaWVyLCBzbyB3ZSBoYXZlIHRvIHJlbG9hZCBmcm9t
IGJhc2VHUFIgdG8gZ2V0IHRoZSB0YXJnZXQuCi0gICAgICAgICAgICBpZiAobG9hZFRhcmdldEZy
b21Qcm94eSkKLSAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZUdQUiwgSlNQcm94eTo6dGFyZ2V0T2Zmc2V0KCkpLCBiYXNlRm9yR2V0R1BS
KTsKLSAgICAgICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihhbHRlcm5hdGVCYXNlKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBiYXNlRm9yQWNjZXNz
R1BSID0gc2NyYXRjaEdQUjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIEZvciBw
cm94eSBvYmplY3RzLCB3ZSBuZWVkIHRvIGRvIGFsbCB0aGUgU3RydWN0dXJlIGNoZWNrcyBiZWZv
cmUgbW92aW5nIHRoZSBiYXNlR1BSIGludG8KLSAgICAgICAgICAgIC8vIGJhc2VGb3JHZXRHUFIg
YmVjYXVzZSBpZiB3ZSBmYWlsIGFueSBvZiB0aGUgY2hlY2tzIHRoZW4gd2Ugd291bGQgaGF2ZSB0
aGUgd3JvbmcgdmFsdWUgaW4gYmFzZUdQUgotICAgICAgICAgICAgLy8gb24gdGhlIHNsb3cgcGF0
aC4KLSAgICAgICAgICAgIGlmIChsb2FkVGFyZ2V0RnJvbVByb3h5KQotICAgICAgICAgICAgICAg
IHN0dWJKaXQubW92ZShzY3JhdGNoR1BSLCBiYXNlRm9yR2V0R1BSKTsKLSAgICAgICAgICAgIGJh
c2VGb3JBY2Nlc3NHUFIgPSBiYXNlRm9yR2V0R1BSOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
R1BSUmVnIGxvYWRlZFZhbHVlR1BSID0gSW52YWxpZEdQUlJlZzsKLSAgICBpZiAoa2luZCA9PSBH
ZXRVbmRlZmluZWQpCi0gICAgICAgIHN0dWJKaXQubW92ZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5l
ZCgpLCB2YWx1ZVJlZ3MpOwotICAgIGVsc2UgaWYgKGtpbmQgIT0gQ2FsbEN1c3RvbUdldHRlciAm
JiBraW5kICE9IENhbGxDdXN0b21TZXR0ZXIpIHsKLSAgICAgICAgaWYgKGtpbmQgPT0gR2V0VmFs
dWUpCi0gICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUiA9IHZhbHVlUmVncy5wYXlsb2FkR1BSKCk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSID0gc2NyYXRjaEdQUjsK
LSAgICAgICAgCi0gICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSOwotICAgICAgICBpZiAoaXNJbmxp
bmVPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgICAgIHN0b3JhZ2VHUFIgPSBiYXNlRm9yQWNjZXNz
R1BSOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlRm9yQWNjZXNzR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpLCBsb2FkZWRWYWx1ZUdQUik7Ci0gICAgICAgICAgICBzdG9yYWdlR1BSID0gbG9hZGVk
VmFsdWVHUFI7Ci0gICAgICAgIH0KLSAgICAgICAgCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAg
ICAgc3R1YkppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgb2Zm
c2V0UmVsYXRpdmVUb0Jhc2Uob2Zmc2V0KSksIGxvYWRlZFZhbHVlR1BSKTsKLSNlbHNlCi0gICAg
ICAgIGlmIChraW5kID09IEdldFZhbHVlKQotICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uob2Zm
c2V0KSArIFRhZ09mZnNldCksIHZhbHVlUmVncy50YWdHUFIoKSk7Ci0gICAgICAgIHN0dWJKaXQu
bG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9mZnNldFJlbGF0aXZl
VG9CYXNlKG9mZnNldCkgKyBQYXlsb2FkT2Zmc2V0KSwgbG9hZGVkVmFsdWVHUFIpOwotI2VuZGlm
Ci0gICAgfQotCi0gICAgLy8gU3R1ZmYgZm9yIGN1c3RvbSBnZXR0ZXJzLgotICAgIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIG9wZXJhdGlvbkNhbGw7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgaGFu
ZGxlckNhbGw7Ci0KLSAgICAvLyBTdHVmZiBmb3IgSlMgZ2V0dGVycy4KLSAgICBNYWNyb0Fzc2Vt
Ymxlcjo6RGF0YUxhYmVsUHRyIGFkZHJlc3NPZkxpbmtGdW5jdGlvbkNoZWNrOwotICAgIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIGZhc3RQYXRoQ2FsbDsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBz
bG93UGF0aENhbGw7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rSW5mbz4gY2FsbExpbmtJ
bmZvOwotCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzcywgZmFpbDsKLSAgICBpZiAo
a2luZCAhPSBHZXRWYWx1ZSAmJiBraW5kICE9IEdldFVuZGVmaW5lZCkgewotICAgICAgICAvLyBO
ZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdoZW5ldmVyIHRoaXMgY2FsbCBpcyBtYWRlIGluIHRoZSBm
dXR1cmUsIHdlIHJlbWVtYmVyIHRoZQotICAgICAgICAvLyBwbGFjZSB0aGF0IHdlIG1hZGUgaXQg
ZnJvbS4gSXQganVzdCBzbyBoYXBwZW5zIHRvIGJlIHRoZSBwbGFjZSB0aGF0IHdlIGFyZSBhdAot
ICAgICAgICAvLyByaWdodCBub3chCi0gICAgICAgIHN0dWJKaXQuc3RvcmUzMihNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKHN0dWJJbmZvLmNhbGxTaXRlSW5kZXguYml0cygpKSwKLSAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4o
SlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKLQotICAgICAgICBpZiAoa2luZCA9PSBDYWxsR2V0
dGVyIHx8IGtpbmQgPT0gQ2FsbFNldHRlcikgewotICAgICAgICAgICAgLy8gQ3JlYXRlIGEgSlMg
Y2FsbCB1c2luZyBhIEpTIGNhbGwgaW5saW5lIGNhY2hlLiBBc3N1bWUgdGhhdDoKLSAgICAgICAg
ICAgIC8vCi0gICAgICAgICAgICAvLyAtIFNQIGlzIGFsaWduZWQgYW5kIHJlcHJlc2VudHMgdGhl
IGV4dGVudCBvZiB0aGUgY2FsbGluZyBjb21waWxlcidzIHN0YWNrIHVzYWdlLgotICAgICAgICAg
ICAgLy8KLSAgICAgICAgICAgIC8vIC0gRlAgaXMgc2V0IGNvcnJlY3RseSAoaS5lLiBpdCBwb2lu
dHMgdG8gdGhlIGNhbGxlcidzIGNhbGwgZnJhbWUgaGVhZGVyKS4KLSAgICAgICAgICAgIC8vCi0g
ICAgICAgICAgICAvLyAtIFNQIC0gRlAgaXMgYW4gYWxpZ25lZCBkaWZmZXJlbmNlLgotICAgICAg
ICAgICAgLy8KLSAgICAgICAgICAgIC8vIC0gQW55IGJ5dGUgYmV0d2VlbiBGUCAoZXhjbHVzaXZl
KSBhbmQgU1AgKGluY2x1c2l2ZSkgY291bGQgYmUgbGl2ZSBpbiB0aGUgY2FsbGluZwotICAgICAg
ICAgICAgLy8gICBjb2RlLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIFRoZXJlZm9y
ZSwgd2UgdGVtcG9yYXJpbHkgZ3JvdyB0aGUgc3RhY2sgZm9yIHRoZSBwdXJwb3NlIG9mIHRoZSBj
YWxsIGFuZCB0aGVuCi0gICAgICAgICAgICAvLyBzaHJpbmsgaXQgYWZ0ZXIuCi0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGNhbGxMaW5rSW5mbyA9IHN0ZDo6bWFrZV91bmlxdWU8Q2FsbExpbmtJ
bmZvPigpOwotICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZv
OjpDYWxsLCBzdHViSW5mby5jb2RlT3JpZ2luLCBsb2FkZWRWYWx1ZUdQUik7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBkb25lOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICAvLyBUaGVyZSBpcyBhICd0aGlzJyBhcmd1bWVudCBidXQgbm90aGlu
ZyBlbHNlLgotICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZQYXJhbWV0ZXJzID0gMTsKLSAg
ICAgICAgICAgIC8vIC4uLiB1bmxlc3Mgd2UncmUgY2FsbGluZyBhIHNldHRlci4KLSAgICAgICAg
ICAgIGlmIChraW5kID09IENhbGxTZXR0ZXIpCi0gICAgICAgICAgICAgICAgbnVtYmVyT2ZQYXJh
bWV0ZXJzKys7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEdldCB0aGUgYWNjZXNzb3I7
IGlmIHRoZXJlIGFpbid0IG9uZSB0aGVuIHRoZSByZXN1bHQgaXMganNVbmRlZmluZWQoKS4KLSAg
ICAgICAgICAgIGlmIChraW5kID09IENhbGxTZXR0ZXIpIHsKLSAgICAgICAgICAgICAgICBzdHVi
Sml0LmxvYWRQdHIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGxvYWRlZFZhbHVlR1BSLCBHZXR0ZXJTZXR0ZXI6Om9mZnNldE9mU2V0dGVyKCkpLAotICAgICAg
ICAgICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MobG9hZGVkVmFsdWVHUFIsIEdldHRlclNldHRlcjo6b2Zmc2V0T2ZH
ZXR0ZXIoKSksCi0gICAgICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHJldHVyblVuZGVmaW5lZCA9
IHN0dWJKaXQuYnJhbmNoVGVzdFB0cigKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
WmVybywgbG9hZGVkVmFsdWVHUFIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICB1bnNpZ25l
ZCBudW1iZXJPZlJlZ3NGb3JDYWxsID0KLSAgICAgICAgICAgICAgICBKU1N0YWNrOjpDYWxsRnJh
bWVIZWFkZXJTaXplICsgbnVtYmVyT2ZQYXJhbWV0ZXJzOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICB1bnNpZ25lZCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCA9Ci0gICAgICAgICAgICAgICAgbnVt
YmVyT2ZSZWdzRm9yQ2FsbCAqIHNpemVvZihSZWdpc3RlcikgLSBzaXplb2YoQ2FsbGVyRnJhbWVB
bmRQQyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHVuc2lnbmVkIGFsaWduZWROdW1iZXJP
ZkJ5dGVzRm9yQ2FsbCA9Ci0gICAgICAgICAgICAgICAgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9m
KHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgbnVtYmVyT2ZCeXRlc0ZvckNhbGwpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBzdHViSml0LnN1YlB0cigKLSAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2FsbCksCi0gICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MgY2FsbGVlRnJhbWUg
PSBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcygKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsCi0gICAgICAgICAgICAgICAgLXN0YXRpY19jYXN0PHB0
cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIHN0dWJKaXQuc3RvcmUzMigKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKG51bWJlck9mUGFyYW1ldGVycyksCi0gICAgICAgICAgICAgICAgY2FsbGVl
RnJhbWUud2l0aE9mZnNldCgKLSAgICAgICAgICAgICAgICAgICAgSlNTdGFjazo6QXJndW1lbnRD
b3VudCAqIHNpemVvZihSZWdpc3RlcikgKyBQYXlsb2FkT2Zmc2V0KSk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIHN0dWJKaXQuc3RvcmVDZWxsKAotICAgICAgICAgICAgICAgIGxvYWRlZFZh
bHVlR1BSLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KEpTU3RhY2s6OkNhbGxlZSAqIHNpemVvZihS
ZWdpc3RlcikpKTsKLQotICAgICAgICAgICAgc3R1YkppdC5zdG9yZUNlbGwoCi0gICAgICAgICAg
ICAgICAgYmFzZUZvckdldEdQUiwKLSAgICAgICAgICAgICAgICBjYWxsZWVGcmFtZS53aXRoT2Zm
c2V0KAotICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwKS5v
ZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
aWYgKGtpbmQgPT0gQ2FsbFNldHRlcikgewotICAgICAgICAgICAgICAgIHN0dWJKaXQuc3RvcmVW
YWx1ZSgKLSAgICAgICAgICAgICAgICAgICAgdmFsdWVSZWdzLAotICAgICAgICAgICAgICAgICAg
ICBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KAotICAgICAgICAgICAgICAgICAgICAgICAgdmlydHVh
bFJlZ2lzdGVyRm9yQXJndW1lbnQoMSkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIHNsb3dDYXNlID0gc3R1YkppdC5icmFuY2hQdHJXaXRoUGF0Y2goCi0gICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBsb2FkZWRWYWx1ZUdQUiwgYWRkcmVzc09mTGlu
a0Z1bmN0aW9uQ2hlY2ssCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIoMCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBmYXN0UGF0aENhbGwgPSBzdHVi
Sml0Lm5lYXJDYWxsKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN0dWJKaXQuYWRkUHRy
KAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoYWxpZ25lZE51
bWJlck9mQnl0ZXNGb3JDYWxsKSwKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6c3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOwotICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ2FsbEdldHRlcikK
LSAgICAgICAgICAgICAgICBzdHViSml0LnNldHVwUmVzdWx0cyh2YWx1ZVJlZ3MpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBkb25lLmFwcGVuZChzdHViSml0Lmp1bXAoKSk7Ci0gICAgICAg
ICAgICBzbG93Q2FzZS5saW5rKCZzdHViSml0KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
c3R1YkppdC5tb3ZlKGxvYWRlZFZhbHVlR1BSLCBHUFJJbmZvOjpyZWdUMCk7Ci0jaWYgVVNFKEpT
VkFMVUUzMl82NCkKLSAgICAgICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBHUFJJbmZvOjpyZWdUMSk7Ci0jZW5kaWYKLSAg
ICAgICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihjYWxs
TGlua0luZm8uZ2V0KCkpLCBHUFJJbmZvOjpyZWdUMik7Ci0gICAgICAgICAgICBzbG93UGF0aENh
bGwgPSBzdHViSml0Lm5lYXJDYWxsKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN0dWJK
aXQuYWRkUHRyKAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
YWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxsKSwKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ2Fs
bEdldHRlcikKLSAgICAgICAgICAgICAgICBzdHViSml0LnNldHVwUmVzdWx0cyh2YWx1ZVJlZ3Mp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBkb25lLmFwcGVuZChzdHViSml0Lmp1bXAoKSk7
Ci0gICAgICAgICAgICByZXR1cm5VbmRlZmluZWQubGluaygmc3R1YkppdCk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmIChraW5kID09IENhbGxHZXR0ZXIpCi0gICAgICAgICAgICAgICAg
c3R1YkppdC5tb3ZlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIHZhbHVlUmVncyk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGRvbmUubGluaygmc3R1YkppdCk7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAvLyBnZXR0ZXI6IEVuY29kZWRKU1ZhbHVlICgqR2V0VmFsdWVGdW5j
KShFeGVjU3RhdGUqLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgIC8vIHNldHRlcjogdm9pZCAoKlB1dFZhbHVl
RnVuYykoRXhlY1N0YXRlKiwgSlNPYmplY3QqIGJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNPYmpl
Y3QsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAg
ICAgaWYgKGtpbmQgPT0gQ2FsbEN1c3RvbUdldHRlcikKLSAgICAgICAgICAgICAgICBzdHViSml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlRm9yQWNjZXNzR1BSLCBiYXNlRm9yR2V0
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihwcm9wZXJ0eU5hbWUuaW1wbCgpKSk7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoYmFzZUZvckFjY2Vzc0dQUiwgYmFzZUZvckdldEdQUiwgdmFsdWVSZWdz
LmdwcigpKTsKLSNlbHNlCi0gICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsQ3VzdG9tR2V0dGVy
KQotICAgICAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJh
c2VGb3JBY2Nlc3NHUFIsIGJhc2VGb3JHZXRHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6Q2VsbFRhZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHByb3Bl
cnR5TmFtZS5pbXBsKCkpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzdHVi
Sml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlRm9yQWNjZXNzR1BSLCBiYXNlRm9y
R2V0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCB2
YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB2YWx1ZVJlZ3MudGFnR1BSKCkpOwotI2VuZGlmCi0gICAg
ICAgICAgICBzdHViSml0LnN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAmdm0t
PnRvcENhbGxGcmFtZSk7Ci0KLSAgICAgICAgICAgIG9wZXJhdGlvbkNhbGwgPSBzdHViSml0LmNh
bGwoKTsKLSAgICAgICAgICAgIGlmIChraW5kID09IENhbGxDdXN0b21HZXR0ZXIpCi0gICAgICAg
ICAgICAgICAgc3R1YkppdC5zZXR1cFJlc3VsdHModmFsdWVSZWdzKTsKLSAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIG5vRXhjZXB0aW9uID0gc3R1YkppdC5lbWl0RXhjZXB0aW9uQ2hl
Y2soQ0NhbGxIZWxwZXJzOjpJbnZlcnRlZEV4Y2VwdGlvbkNoZWNrKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50cyhDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIodm0pLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgICAgICAgICBoYW5k
bGVyQ2FsbCA9IHN0dWJKaXQuY2FsbCgpOwotICAgICAgICAgICAgc3R1YkppdC5qdW1wVG9FeGNl
cHRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG5vRXhjZXB0aW9uLmxp
bmsoJnN0dWJKaXQpOwotICAgICAgICB9Ci0gICAgfQotICAgIGVtaXRSZXN0b3JlU2NyYXRjaChz
dHViSml0LCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc2NyYXRjaEdQUiwgc3VjY2VzcywgZmFpbCwg
ZmFpbHVyZUNhc2VzKTsKLSAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgc3R1
YkppdCwgZXhlYy0+Y29kZUJsb2NrKCksIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7Ci0gICAgaWYg
KHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAKLSAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVT
Y3JhdGNoLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMsIHN1Y2Nlc3NMYWJlbCwgc2xvd0Nh
c2VMYWJlbCk7Ci0gICAgaWYgKGtpbmQgPT0gQ2FsbEN1c3RvbUdldHRlciB8fCBraW5kID09IENh
bGxDdXN0b21TZXR0ZXIpIHsKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhvcGVyYXRpb25DYWxs
LCBjdXN0b20pOwotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGhhbmRsZXJDYWxsLCBsb29rdXBF
eGNlcHRpb25IYW5kbGVyKTsKLSAgICB9IGVsc2UgaWYgKGtpbmQgPT0gQ2FsbEdldHRlciB8fCBr
aW5kID09IENhbGxTZXR0ZXIpIHsKLSAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRp
b25zKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChzbG93UGF0aENhbGwpLAotICAgICAg
ICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZihhZGRyZXNzT2ZMaW5rRnVuY3Rpb25DaGVjayks
Ci0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoZmFzdFBhdGhDYWxs
KSk7Ci0KLSAgICAgICAgcGF0Y2hCdWZmZXIubGluaygKLSAgICAgICAgICAgIHNsb3dQYXRoQ2Fs
bCwgQ29kZUxvY2F0aW9uTGFiZWwodm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRv
cikuY29kZSgpKSk7Ci0gICAgfQotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2Rl
ID0gRklOQUxJWkVfQ09ERV9GT1IoCi0gICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLCBwYXRjaEJ1
ZmZlciwKLSAgICAgICAgKCIlcyBhY2Nlc3Mgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIs
Ci0gICAgICAgICAgICB0b1N0cmluZyhraW5kKSwgdG9DU3RyaW5nKCpleGVjLT5jb2RlQmxvY2so
KSkuZGF0YSgpLAotICAgICAgICAgICAgc3VjY2Vzc0xhYmVsLmV4ZWN1dGFibGVBZGRyZXNzKCkp
KTsKLSAgICAKLSAgICBpZiAoa2luZCA9PSBDYWxsR2V0dGVyIHx8IGtpbmQgPT0gQ2FsbFNldHRl
cikKLSAgICAgICAgc3R1YlJvdXRpbmUgPSBhZG9wdFJlZihuZXcgQWNjZXNzb3JDYWxsSklUU3R1
YlJvdXRpbmUoY29kZSwgKnZtLCBXVEY6Om1vdmUoY2FsbExpbmtJbmZvKSkpOwotICAgIGVsc2UK
LSAgICAgICAgc3R1YlJvdXRpbmUgPSBjcmVhdGVKSVRTdHViUm91dGluZShjb2RlLCAqdm0sIGNv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHRydWUpOwotICAgIAotICAgIHJldHVybiB0cnVl
OwotfQotCiBlbnVtIElubGluZUNhY2hlQWN0aW9uIHsKICAgICBHaXZlVXBPbkNhY2hlLAogICAg
IFJldHJ5Q2FjaGVMYXRlciwKQEAgLTYxNiwxMzIgKzIzNSw5NSBAQCBzdGF0aWMgSW5saW5lQ2Fj
aGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeUlECiAgICAgaWYgKE9wdGlvbnM6OmZvcmNlSUNGYWlsdXJl
KCkpCiAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogICAgIAotICAgIC8vIEZJWE1FOiBX
cml0ZSBhIHRlc3QgdGhhdCBwcm92ZXMgd2UgbmVlZCB0byBjaGVjayBmb3IgcmVjdXJzaW9uIGhl
cmUganVzdAotICAgIC8vIGxpa2UgdGhlIGludGVycHJldGVyIGRvZXMsIHRoZW4gYWRkIGEgY2hl
Y2sgZm9yIHJlY3Vyc2lvbi4KKyAgICAvLyBGSVhNRTogQ2FjaGUgcHJvcGVydHkgYWNjZXNzIGZv
ciBpbW1lZGlhdGVzLgorICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQorICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29k
ZUJsb2NrKCk7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0KLSAgICBpZiAoKGlzSlNBcnJh
eShiYXNlVmFsdWUpIHx8IGlzSlNTdHJpbmcoYmFzZVZhbHVlKSkgJiYgcHJvcGVydHlOYW1lID09
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKLSAgICAgICAgR1BSUmVnIGJhc2VHUFIg
PSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmJhc2VHUFIpOwotI2lmIFVTRShK
U1ZBTFVFMzJfNjQpCi0gICAgICAgIEdQUlJlZyByZXN1bHRUYWdHUFIgPSBzdGF0aWNfY2FzdDxH
UFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVlVGFnR1BSKTsKLSNlbmRpZgotICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZUdQ
Uik7Ci0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXIgc3R1YkppdDsKLQotICAgICAgICBpZiAoaXNK
U0FycmF5KGJhc2VWYWx1ZSkpIHsKLSAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gVGVt
cFJlZ2lzdGVyU2V0KHN0dWJJbmZvLnBhdGNoLnVzZWRSZWdpc3RlcnMpLmdldEZyZWVHUFIoKTsK
LSAgICAgICAgICAgIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSBmYWxzZTsKLQotICAgICAg
ICAgICAgaWYgKHNjcmF0Y2hHUFIgPT0gSW52YWxpZEdQUlJlZykgewotI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgICAgICAgICAgICAgc2NyYXRjaEdQUiA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0
U2NyYXRjaEdQUihiYXNlR1BSLCByZXN1bHRHUFIpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICBz
Y3JhdGNoR1BSID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHJl
c3VsdEdQUiwgcmVzdWx0VGFnR1BSKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIHN0dWJKaXQu
cHVzaFRvU2F2ZShzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBuZWVkVG9SZXN0b3JlU2Ny
YXRjaCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7Ci0KLSAgICAgICAgICAgIHN0dWJKaXQubG9hZDgoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQo
KSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0
LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMihJc0FycmF5KSkpOwotICAgICAgICAgICAgZmFpbHVyZUNhc2Vz
LmFwcGVuZChzdHViSml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRj
aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzaykpKTsK
LQotICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAg
ICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwg
QXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAg
ZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNz
VGhhbiwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSkpOwotCi0g
ICAgICAgICAgICBzdHViSml0Lm1vdmUoc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKLSNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgICAgICAgICAgc3R1YkppdC5vcjY0KEFzc2VtYmx5SGVscGVyczo6VHJ1
c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpLCByZXN1bHRHUFIpOwotI2VsaWYgVVNFKEpTVkFMVUUz
Ml82NCkKLSAgICAgICAgICAgIHN0dWJKaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHJlc3VsdFRhZ0dQUik7Ci0jZW5kaWYKLQotICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzcywgZmFpbDsKLQotICAgICAgICAgICAg
ZW1pdFJlc3RvcmVTY3JhdGNoKHN0dWJKaXQsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzY3JhdGNo
R1BSLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgc3R1YkppdCwgY29kZUJsb2NrLCBKSVRD
b21waWxhdGlvbkNhbkZhaWwpOwotICAgICAgICAgICAgaWYgKHBhdGNoQnVmZmVyLmRpZEZhaWxU
b0FsbG9jYXRlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAg
ICAgICAgICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVzdG9yZVNj
cmF0Y2gsIHN0dWJJbmZvLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMpOwotCi0gICAgICAg
ICAgICBzdHViSW5mby5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAg
ICAgICAgICAgICAgZXhlYy0+Y29kZUJsb2NrKCksIHBhdGNoQnVmZmVyLAotICAgICAgICAgICAg
ICAgICgiR2V0QnlJZCBhcnJheSBsZW5ndGggc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIs
Ci0gICAgICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEo
KSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAg
ICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpKTsKKyAgICBTY3JpcHRFeGVjdXRhYmxlKiBvd25lciA9IGNvZGVCbG9jay0+b3du
ZXJTY3JpcHRFeGVjdXRhYmxlKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKIAotICAgICAg
ICAgICAgcmVwbGFjZVdpdGhKdW1wKHN0dWJJbmZvLCBzdHViSW5mby5zdHViUm91dGluZS0+Y29k
ZSgpLmNvZGUoKSk7Ci0gICAgICAgICAgICByZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZCk7CisgICAgc3RkOjp1bmlxdWVf
cHRyPEFjY2Vzc0Nhc2U+IG5ld0Nhc2U7CiAKKyAgICBpZiAoaXNKU0FycmF5KGJhc2VWYWx1ZSkg
JiYgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpCisgICAgICAg
IG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpnZXRMZW5ndGgodm0sIG93bmVyLCBBY2Nlc3NUeXBlOjpB
cnJheUxlbmd0aCk7CisgICAgZWxzZSBpZiAoaXNKU1N0cmluZyhiYXNlVmFsdWUpICYmIHByb3Bl
cnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKQorICAgICAgICBuZXdDYXNl
ID0gQWNjZXNzQ2FzZTo6Z2V0TGVuZ3RoKHZtLCBvd25lciwgQWNjZXNzVHlwZTo6U3RyaW5nTGVu
Z3RoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKCFzbG93LmlzQ2FjaGVhYmxlKCkgJiYgIXNs
b3QuaXNVbnNldCgpKQorICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAg
IAorICAgICAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOworICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUodm0pOworICAgICAg
ICAKKyAgICAgICAgLy8gT3B0aW1pemUgc2VsZiBhY2Nlc3MuCisgICAgICAgIGlmIChzbG90Lmlz
Q2FjaGVhYmxlVmFsdWUoKQorICAgICAgICAgICAgJiYgc2xvdC5zbG90QmFzZSgpID09IGJhc2VW
YWx1ZQorICAgICAgICAgICAgJiYgIXNsb3Qud2F0Y2hwb2ludFNldCgpCisgICAgICAgICAgICAm
JiBNYWNyb0Fzc2VtYmxlcjo6aXNDb21wYWN0UHRyQWxpZ25lZEFkZHJlc3NPZmZzZXQobWF4T2Zm
c2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKQorICAgICAg
ICAgICAgJiYgYWN0aW9uRm9yQ2VsbCh2bSwgYmFzZUNlbGwpID09IEF0dGVtcHRUb0NhY2hlKSB7
CisgICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2Vt
ZW50cygqdm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICAgICAgcmVwYXRjaEJ5SWRT
ZWxmQWNjZXNzKCp2bSwgY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBwcm9wZXJ0eU5h
bWUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3QsIHRydWUp
OworICAgICAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRTZWxmKCp2bSwgY29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKICAgICAgICAgICAgIHJldHVybiBSZXRyeUNh
Y2hlTGF0ZXI7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBTdHJpbmcubGVuZ3RoIGNhc2UKLSAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbHVyZSA9IHN0dWJKaXQuYnJhbmNoOChNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpT
Q2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KFN0cmluZ1R5cGUpKTsKLQotICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlR1BSLCBKU1N0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSksIHJlc3VsdEdQUik7
Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBzdHViSml0Lm9yNjQoQXNzZW1ibHlIZWxw
ZXJzOjpUcnVzdGVkSW1tNjQoVGFnVHlwZU51bWJlciksIHJlc3VsdEdQUik7Ci0jZWxpZiBVU0Uo
SlNWQUxVRTMyXzY0KQotICAgICAgICBzdHViSml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCByZXN1bHRUYWdHUFIpOwotI2VuZGlmCisgICAg
ICAgIGJvb2wgbG9hZFRhcmdldEZyb21Qcm94eSA9IGZhbHNlOworICAgICAgICBpZiAoYmFzZUNl
bGwtPnR5cGUoKSA9PSBQdXJlRm9yd2FyZGluZ1Byb3h5VHlwZSkgeworICAgICAgICAgICAgYmFz
ZVZhbHVlID0ganNDYXN0PEpTUHJveHkqPihiYXNlQ2VsbCktPnRhcmdldCgpOworICAgICAgICAg
ICAgYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7CisgICAgICAgICAgICBzdHJ1Y3R1cmUg
PSBiYXNlQ2VsbC0+c3RydWN0dXJlKHZtKTsKKyAgICAgICAgICAgIGxvYWRUYXJnZXRGcm9tUHJv
eHkgPSB0cnVlOworICAgICAgICB9CiAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3Vj
Y2VzcyA9IHN0dWJKaXQuanVtcCgpOworICAgICAgICBJbmxpbmVDYWNoZUFjdGlvbiBhY3Rpb24g
PSBhY3Rpb25Gb3JDZWxsKHZtLCBiYXNlQ2VsbCk7CisgICAgICAgIGlmIChhY3Rpb24gIT0gQXR0
ZW1wdFRvQ2FjaGUpCisgICAgICAgICAgICByZXR1cm4gYWN0aW9uOwogCi0gICAgICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCBzdHViSml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9u
Q2FuRmFpbCk7Ci0gICAgICAgIGlmIChwYXRjaEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKQot
ICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCA9IHNsb3QuaXNVbnNldCgpID8gaW52YWxpZE9mZnNldCA6IHNsb3QuY2FjaGVkT2Zm
c2V0KCk7CiAgICAgICAgIAotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRh
Q2FsbFRvRG9uZSkpOwotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmUsIHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2Fs
bFRvU2xvd0Nhc2UpKTsKLQotICAgICAgICBzdHViSW5mby5zdHViUm91dGluZSA9IEZJTkFMSVpF
X0NPREVfRk9SX1NUVUIoCi0gICAgICAgICAgICBleGVjLT5jb2RlQmxvY2soKSwgcGF0Y2hCdWZm
ZXIsCi0gICAgICAgICAgICAoIkdldEJ5SWQgc3RyaW5nIGxlbmd0aCBzdHViIGZvciAlcywgcmV0
dXJuIHBvaW50ICVwIiwKLSAgICAgICAgICAgICAgICB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9j
aygpKS5kYXRhKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAot
ICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLmV4ZWN1
dGFibGVBZGRyZXNzKCkpKTsKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29u
ZGl0aW9uU2V0OworICAgICAgICBpZiAoc2xvdC5pc1Vuc2V0KCkgfHwgc2xvdC5zbG90QmFzZSgp
ICE9IGJhc2VWYWx1ZSkgeworICAgICAgICAgICAgaWYgKHR5cGVJbmZvLnByb2hpYml0c1Byb3Bl
cnR5Q2FjaGluZygpIHx8IHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChz
bG90LmlzVW5zZXQoKSkgeworICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRl
Q29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcygKKyAgICAgICAgICAgICAgICAgICAgKnZtLCBjb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdl
bmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAorICAgICAgICAgICAgICAg
ICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwg
c2xvdC5zbG90QmFzZSgpLCBpZGVudC5pbXBsKCkpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG9m
ZnNldCA9IHNsb3QuaXNVbnNldCgpID8gaW52YWxpZE9mZnNldCA6IGNvbmRpdGlvblNldC5zbG90
QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpOworICAgICAgICB9CiAKLSAgICAgICAgcmVwbGFjZVdp
dGhKdW1wKHN0dWJJbmZvLCBzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7Ci0g
ICAgICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LCBvcGVyYXRpb25HZXRCeUlkKTsKKyAgICAgICAgQWNjZXNzQ2FzZTo6QWNjZXNzVHlwZSB0eXBl
OworICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkpCisgICAgICAgICAgICB0eXBl
ID0gQWNjZXNzQ2FzZTo6TG9hZDsKKyAgICAgICAgZWxzZSBpZiAoc2xvdC51c1Vuc2V0KCkpCisg
ICAgICAgICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6TWlzczsKKyAgICAgICAgZWxzZSBpZiAoc2xv
dC5pc0NhY2hlYWJsZUdldHRlcigpKQorICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6Okdl
dHRlcjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6OkN1c3Rv
bUdldHRlcjsKIAotICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworICAgICAgICBuZXdD
YXNlID0gQWNjZXNzQ2FzZTo6Z2V0KAorICAgICAgICAgICAgdm0sIG93bmVyLCB0eXBlLCBvZmZz
ZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBsb2FkVGFyZ2V0RnJvbVByb3h5LAorICAgICAg
ICAgICAgc2xvdC53YXRjaHBvaW50U2V0KCksIHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSA/IHNs
b3QuY3VzdG9tR2V0dGVyKCkgOiBudWxscHRyKTsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogQ2Fj
aGUgcHJvcGVydHkgYWNjZXNzIGZvciBpbW1lZGlhdGVzLgotICAgIGlmICghYmFzZVZhbHVlLmlz
Q2VsbCgpKQotICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgIGlmICghc2xvdC5p
c0NhY2hlYWJsZSgpICYmICFzbG90LmlzVW5zZXQoKSkKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgY29kZVB0ciA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UoCisgICAgICAgIHZtLCBjb2RlQmxv
Y2ssIHByb3BlcnR5TmFtZSwgc3RkOjptb3ZlKG5ld0Nhc2UpKTsKKyAgICAKKyAgICBpZiAoIWNv
ZGVQdHIpCiAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgSlNDZWxsKiBiYXNl
Q2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJh
c2VDZWxsLT5zdHJ1Y3R1cmUoKnZtKTsKLQotICAgIElubGluZUNhY2hlQWN0aW9uIGFjdGlvbiA9
IGFjdGlvbkZvckNlbGwoKnZtLCBiYXNlQ2VsbCk7Ci0gICAgaWYgKGFjdGlvbiAhPSBBdHRlbXB0
VG9DYWNoZSkKLSAgICAgICAgcmV0dXJuIGFjdGlvbjsKLQotICAgIC8vIE9wdGltaXplIHNlbGYg
YWNjZXNzLgotICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKQotICAgICAgICAmJiBzbG90
LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlCi0gICAgICAgICYmICFzbG90LndhdGNocG9pbnRTZXQo
KQotICAgICAgICAmJiBNYWNyb0Fzc2VtYmxlcjo6aXNDb21wYWN0UHRyQWxpZ25lZEFkZHJlc3NP
ZmZzZXQobWF4T2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0
KCkpKSkgewotICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxh
Y2VtZW50cygqdm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwotICAgICAgICByZXBhdGNoQnlJZFNl
bGZBY2Nlc3MoKnZtLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFt
ZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgb3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlzdCwgdHJ1ZSk7
Ci0gICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZigqdm0sIGNvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7Ci0gICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7
Ci0gICAgfQotCi0gICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3QpOworICAgIAorICAgIC8vIEZJWE1F
IGRvIHNvbWUgcGF0Y2hpbmchIQorICAgIAogICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CiB9
CiAKQEAgLTc2Nyw5OCArMzQ5LDYgQEAgc3RhdGljIHZvaWQgcGF0Y2hKdW1wVG9HZXRCeUlkU3R1
YihTdHJ1YwogICAgIHJlcGxhY2VXaXRoSnVtcChzdHViSW5mbywgc3R1YlJvdXRpbmUtPmNvZGUo
KS5jb2RlKCkpOwogfQogCi1zdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVpbGRHZXRCeUlE
TGlzdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVy
JiBpZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8pCi17Ci0gICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkKLSAgICAgICAgfHwgKCFzbG90
LmlzQ2FjaGVhYmxlKCkgJiYgIXNsb3QuaXNVbnNldCgpKSkKLSAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7Ci0KLSAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwot
ICAgIGJvb2wgbG9hZFRhcmdldEZyb21Qcm94eSA9IGZhbHNlOwotICAgIGlmIChiYXNlQ2VsbC0+
dHlwZSgpID09IFB1cmVGb3J3YXJkaW5nUHJveHlUeXBlKSB7Ci0gICAgICAgIGJhc2VWYWx1ZSA9
IGpzQ2FzdDxKU1Byb3h5Kj4oYmFzZUNlbGwpLT50YXJnZXQoKTsKLSAgICAgICAgYmFzZUNlbGwg
PSBiYXNlVmFsdWUuYXNDZWxsKCk7Ci0gICAgICAgIGxvYWRUYXJnZXRGcm9tUHJveHkgPSB0cnVl
OwotICAgIH0KLQotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0KLSAgICBJbmxpbmVDYWNoZUFjdGlvbiBhY3Rp
b24gPSBhY3Rpb25Gb3JDZWxsKCp2bSwgYmFzZUNlbGwpOwotICAgIGlmIChhY3Rpb24gIT0gQXR0
ZW1wdFRvQ2FjaGUpCi0gICAgICAgIHJldHVybiBhY3Rpb247Ci0KLSAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKnZtKTsKLSAgICBUeXBlSW5mbyB0eXBlSW5m
byA9IHN0cnVjdHVyZS0+dHlwZUluZm8oKTsKLQotICAgIGlmIChzdHViSW5mby5wYXRjaC5zcGls
bE1vZGUgPT0gTmVlZFRvU3BpbGwpIHsKLSAgICAgICAgLy8gV2UgY2Fubm90IGRvIGFzIG11Y2gg
aW5saW5lIGNhY2hpbmcgaWYgdGhlIHJlZ2lzdGVycyB3ZXJlIG5vdCBmbHVzaGVkIHByaW9yIHRv
IHRoaXMgR2V0QnlJZC4gSW4gcGFydGljdWxhciwKLSAgICAgICAgLy8gbm9uLVZhbHVlIGNhY2hl
ZCBwcm9wZXJ0aWVzIHJlcXVpcmUgcGxhbnRpbmcgY2FsbHMsIHdoaWNoIHJlcXVpcmVzIHJlZ2lz
dGVycyB0byBoYXZlIGJlZW4gZmx1c2hlZC4gVGh1cywKLSAgICAgICAgLy8gaWYgcmVnaXN0ZXJz
IHdlcmUgbm90IGZsdXNoZWQsIGRvbid0IGRvIG5vbi1WYWx1ZSBjYWNoaW5nLgotICAgICAgICBp
ZiAoIXNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpICYmICFzbG90LmlzVW5zZXQoKSkKLSAgICAgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgIH0KLQotICAgIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCA9IHNsb3QuaXNVbnNldCgpID8gaW52YWxpZE9mZnNldCA6IHNsb3QuY2FjaGVkT2Zmc2V0
KCk7Ci0gICAgCi0gICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0Owot
ICAgIGlmIChzbG90LmlzVW5zZXQoKSB8fCBzbG90LnNsb3RCYXNlKCkgIT0gYmFzZVZhbHVlKSB7
Ci0gICAgICAgIGlmICh0eXBlSW5mby5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKSB8fCBzdHJ1
Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
Ci0KLSAgICAgICAgaWYgKHNsb3QuaXNVbnNldCgpKQotICAgICAgICAgICAgY29uZGl0aW9uU2V0
ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNzKCp2bSwgY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBpZGVudC5pbXBsKCkpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90
b3R5cGVQcm9wZXJ0eUhpdCgqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMs
IHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudC5pbXBsKCkpOwotCi0gICAgICAgIGlm
ICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOwotCi0gICAgICAgIG9mZnNldCA9IHNsb3QuaXNVbnNldCgpID8gaW52YWxpZE9mZnNldCA6
IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpOwotICAgIH0KLSAgICAK
LSAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0ID0gUG9seW1vcnBoaWNHZXRCeUlkTGlz
dDo6ZnJvbShzdHViSW5mbyk7Ci0gICAgaWYgKGxpc3QtPmlzRnVsbCgpKSB7Ci0gICAgICAgIC8v
IFdlIG5lZWQgdGhpcyBleHRyYSBjaGVjayBiZWNhdXNlIG9mIHJlY3Vyc2lvbi4KLSAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgfQotICAgIAotICAgIFJlZlB0cjxKSVRTdHViUm91
dGluZT4gc3R1YlJvdXRpbmU7Ci0gICAgYm9vbCByZXN1bHQgPSBnZW5lcmF0ZUJ5SWRTdHViKAot
ICAgICAgICBleGVjLCBraW5kRm9yKHNsb3QpLCBpZGVudCwgY3VzdG9tRm9yKHNsb3QpLCBzdHVi
SW5mbywgY29uZGl0aW9uU2V0LCBzbG90LnNsb3RCYXNlKCksIG9mZnNldCwgCi0gICAgICAgIHN0
cnVjdHVyZSwgbG9hZFRhcmdldEZyb21Qcm94eSwgc2xvdC53YXRjaHBvaW50U2V0KCksIAotICAg
ICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5w
YXRjaC5kZWx0YUNhbGxUb0RvbmUpLAotICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChsaXN0LT5j
dXJyZW50U2xvd1BhdGhUYXJnZXQoc3R1YkluZm8pKSwgc3R1YlJvdXRpbmUpOwotICAgIGlmICgh
cmVzdWx0KQotICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAKLSAgICBHZXRCeUlk
QWNjZXNzOjpBY2Nlc3NUeXBlIGFjY2Vzc1R5cGU7Ci0gICAgaWYgKHNsb3QuaXNDYWNoZWFibGVW
YWx1ZSgpKQotICAgICAgICBhY2Nlc3NUeXBlID0gc2xvdC53YXRjaHBvaW50U2V0KCkgPyBHZXRC
eUlkQWNjZXNzOjpXYXRjaGVkU3R1YiA6IEdldEJ5SWRBY2Nlc3M6OlNpbXBsZVN0dWI7Ci0gICAg
ZWxzZSBpZiAoc2xvdC5pc1Vuc2V0KCkpCi0gICAgICAgIGFjY2Vzc1R5cGUgPSBHZXRCeUlkQWNj
ZXNzOjpTaW1wbGVNaXNzOwotICAgIGVsc2UgaWYgKHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIoKSkK
LSAgICAgICAgYWNjZXNzVHlwZSA9IEdldEJ5SWRBY2Nlc3M6OkdldHRlcjsKLSAgICBlbHNlCi0g
ICAgICAgIGFjY2Vzc1R5cGUgPSBHZXRCeUlkQWNjZXNzOjpDdXN0b21HZXR0ZXI7Ci0gICAgCi0g
ICAgbGlzdC0+YWRkQWNjZXNzKEdldEJ5SWRBY2Nlc3MoCi0gICAgICAgICp2bSwgY29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKSwgYWNjZXNzVHlwZSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwK
LSAgICAgICAgY29uZGl0aW9uU2V0KSk7Ci0gICAgCi0gICAgcGF0Y2hKdW1wVG9HZXRCeUlkU3R1
YihzdHViSW5mbywgc3R1YlJvdXRpbmUuZ2V0KCkpOwotICAgIAotICAgIHJldHVybiBsaXN0LT5p
c0Z1bGwoKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7Ci19Ci0KLXZvaWQgYnVp
bGRHZXRCeUlETGlzdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXIg
bG9ja2VyKGV4ZWMtPmNvZGVCbG9jaygpLT5tX2xvY2ssIGV4ZWMtPnZtKCkuaGVhcCk7Ci0gICAg
Ci0gICAgaWYgKHRyeUJ1aWxkR2V0QnlJRExpc3QoZXhlYywgYmFzZVZhbHVlLCBwcm9wZXJ0eU5h
bWUsIHNsb3QsIHN0dWJJbmZvKSA9PSBHaXZlVXBPbkNhY2hlKQotICAgICAgICByZXBhdGNoQ2Fs
bChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRp
b25HZXRCeUlkKTsKLX0KLQogc3RhdGljIFZfSklUT3BlcmF0aW9uX0VTc2lKSkkgYXBwcm9wcmlh
dGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5U2xvdCAmc2xvdCwgUHV0
S2luZCBwdXRLaW5kKQogewogICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKSB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3IuY3BwCShyZXZpc2lvbiAxODkzMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0
LDggQEAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjp+U2NyYXRjaFJlZ2lzdAogCiB2b2lkIFNj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6bG9jayhHUFJSZWcgcmVnKQogeworICAgIGlmIChyZWcg
PT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuOwogICAgIHVuc2lnbmVkIGluZGV4ID0g
R1BSSW5mbzo6dG9JbmRleChyZWcpOwogICAgIGlmIChpbmRleCA9PSBHUFJJbmZvOjpJbnZhbGlk
SW5kZXgpCiAgICAgICAgIHJldHVybjsKQEAgLTUyLDEyICs1NCwyMCBAQCB2b2lkIFNjcmF0Y2hS
ZWdpc3RlckFsbG9jYXRvcjo6bG9jayhHUFJSCiAKIHZvaWQgU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yOjpsb2NrKEZQUlJlZyByZWcpCiB7CisgICAgaWYgKHJlZyA9PSBJbnZhbGlkRlBSUmVnKQor
ICAgICAgICByZXR1cm47CiAgICAgdW5zaWduZWQgaW5kZXggPSBGUFJJbmZvOjp0b0luZGV4KHJl
Zyk7CiAgICAgaWYgKGluZGV4ID09IEZQUkluZm86OkludmFsaWRJbmRleCkKICAgICAgICAgcmV0
dXJuOwogICAgIG1fbG9ja2VkUmVnaXN0ZXJzLnNldEZQUkJ5SW5kZXgoaW5kZXgpOwogfQogCit2
b2lkIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6bG9jayhKU1ZhbHVlUmVncyByZWdzKQorewor
ICAgIGxvY2socmVncy50YWdHUFIoKSk7CisgICAgbG9jayhyZWdzLnBheWxvYWRHUFIoKSk7Cit9
CisKIHRlbXBsYXRlPHR5cGVuYW1lIEJhbmtJbmZvPgogdHlwZW5hbWUgQmFua0luZm86OlJlZ2lz
dGVyVHlwZSBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OmFsbG9jYXRlU2NyYXRjaCgpCiB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yLmgJKHJldmlzaW9uIDE4OTMyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDExICs0
MCwxMyBAQCBzdHJ1Y3QgU2NyYXRjaEJ1ZmZlcjsKIAogY2xhc3MgU2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yIHsKIHB1YmxpYzoKKyAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IoKSB7IH0KICAg
ICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IoY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3Rl
cnMpOwogICAgIH5TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IoKTsKIAotICAgIHZvaWQgbG9jayhH
UFJSZWcgcmVnKTsKLSAgICB2b2lkIGxvY2soRlBSUmVnIHJlZyk7CisgICAgdm9pZCBsb2NrKEdQ
UlJlZyk7CisgICAgdm9pZCBsb2NrKEZQUlJlZyk7CisgICAgdm9pZCBsb2NrKEpTVmFsdWVSZWdz
KTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rSW5mbz4KICAgICB0eXBlbmFtZSBC
YW5rSW5mbzo6UmVnaXN0ZXJUeXBlIGFsbG9jYXRlU2NyYXRjaCgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260715</attachid>
            <date>2015-09-06 13:16:33 -0700</date>
            <delta_ts>2015-09-07 13:28:39 -0700</delta_ts>
            <desc>inching towards victory</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>164850</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODkzMjQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzI2LDggKzMyNiw2IEBACiAJCTBGNDg1MzJBMTg3REZE
RUMwMDgzQjY4NyAvKiBGVExSZWNvdmVyeU9wY29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0ODUzMjYxODdERkRFQzAwODNCNjg3IC8qIEZUTFJl
Y292ZXJ5T3Bjb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEY0OTNBRkExNkQwQ0FEMzAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDkzQUY4MTZE
MENBRDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi87IH07CiAJCTBGNEI5NERDMTdC
OUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0Qjk0REIxN0I5RjA3NTAwREQwM0E0IC8qIFR5
cGVkQXJyYXlJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKLQkJMEY0Q0VENUUxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJ
ZExpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY0Q0VENUMxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwICov
OyB9OwotCQkwRjRDRUQ1RjE4Q0VBN0FCMDA4MDJGRTAgLyogUG9seW1vcnBoaWNHZXRCeUlkTGlz
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0Q0VE
NUQxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJZExpc3QuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjRGMjlERjE4QjZBRDFD
MDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RjI5REQxOEI2
QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNw
cCAqLzsgfTsKIAkJMEY0RjI5RTAxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlv
bkNvdW50RXN0aW1hdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjRGMjlERTE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0
aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjUwQUYzQzE5M0U4QjM5MDA2NzRFRTggLyogREZHU3RydWN0
dXJlQ2xvYmJlclN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjUwQUYzQjE5M0U4QjM5MDA2NzRFRTggLyogREZHU3RydWN0dXJlQ2xvYmJlclN0
YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAg
LTQ3NSw4ICs0NzMsNiBAQAogCQkwRjlFMzI2NDFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVC
YXJyaWVySW5zZXJ0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGOUUzMjYyMUIwNUFCMDQwMDgwMUVENSAvKiBERkdTdG9yZUJhcnJpZXJJ
bnNlcnRpb25QaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGOUZCNEY0MTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUZC
NEYyMTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNlLmNwcCAqLzsgfTsKIAkJ
MEY5RkI0RjUxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUZCNEYzMTdGQ0I5MTcw
MENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEY5RkM4QzMxNEUxQjVGRTAwRDUyQUUwIC8qIFBv
bHltb3JwaGljUHV0QnlJZExpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY5RkM4QkYxNEUxQjVGQjAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0
QnlJZExpc3QuY3BwICovOyB9OwotCQkwRjlGQzhDNDE0RTFCNjAwMDBENTJBRTAgLyogUG9seW1v
cnBoaWNQdXRCeUlkTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY5RkM4QzAxNEUxQjVGQjAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExp
c3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjlGQzhDNTE0RTFCNjA0MDBENTJBRTAgLyogUHV0S2luZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RkM4QzExNEUxQjVGQjAwRDUyQUUwIC8qIFB1
dEtpbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRkEyQzE3QjE3RDdDRjg0MDA5RDAxNUYgLyogVGVzdFJ1bm5lclV0aWxzLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQTJDMTc5MTdEN0NGODQw
MDlEMDE1RiAvKiBUZXN0UnVubmVyVXRpbHMuY3BwICovOyB9OwogCQkwRkEyQzE3QzE3RDdDRjg0
MDA5RDAxNUYgLyogVGVzdFJ1bm5lclV0aWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkEyQzE3QTE3RDdDRjg0MDA5RDAxNUYgLyogVGVzdFJ1bm5l
clV0aWxzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
QEAgLTc0NCw2ICs3NDAsOCBAQAogCQkwRkY4QkRFQTFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJy
ZWRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkY4QkRFODFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5jcHAgKi87IH07CiAJ
CTBGRjhCREVCMUFENENGNzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY4QkRFOTFBRDRDRjcxMDBERkU4
ODQgLyogSW5mZXJyZWRWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGRjkyMkQ0MTRGNDZCNDEwMDQxQTI0RSAvKiBMTEludE9mZnNldHNF
eHRyYWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY0NjgwQTExNEJBN0Y4MjAwQkZFMjcyIC8qIExMSW50T2Zmc2V0c0V4dHJhY3Rvci5jcHAg
Ki87IH07CisJCTBGRjlDRTczMUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY5Q0U3
MTFCOUNENkQwMDA0RURDQTYgLyogUG9seW1vcnBoaWNBY2Nlc3MuY3BwICovOyB9OworCQkwRkY5
Q0U3NDFCOUNENkQwMDA0RURDQTYgLyogUG9seW1vcnBoaWNBY2Nlc3MuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjlDRTcyMUI5Q0Q2RDAwMDRFRENB
NiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGRkE1NDk3MTZCODgzNTAwMEIzQTk4MiAvKiBBNjRET3Bjb2Rl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MkEz
QTIyMTY1MUM2OTcwMEE4MEFGRSAvKiBBNjRET3Bjb2RlLmNwcCAqLzsgfTsKIAkJMEZGQTU0OTgx
NkI4ODM1MzAwQjNBOTgyIC8qIEE2NERPcGNvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MkEzQTIzMTY1MUM2OTcwMEE4MEFGRSAvKiBBNjRET3Bj
b2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEZGQjZDMzgxQUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5cGUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGQjZDMzYxQUY0OEREQzAwREIxQkY3
IC8qIFR5cGVvZlR5cGUuY3BwICovOyB9OwpAQCAtMjE1MSw4ICsyMTQ5LDYgQEAKIAkJMEY0ODUz
MjYxODdERkRFQzAwODNCNjg3IC8qIEZUTFJlY292ZXJ5T3Bjb2RlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEZUTFJlY292ZXJ5T3Bjb2RlLmg7IHBhdGggPSBmdGwvRlRMUmVj
b3ZlcnlPcGNvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0OTNBRjgxNkQw
Q0FEMTAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNvdXJjZVByb3ZpZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY0Qjk0REIxN0I5RjA3NTAwREQwM0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVkQXJyYXlJbmxpbmVzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNENFRDVDMThDRUE3QUIwMDgwMkZFMCAvKiBQ
b2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFBvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkwRjRDRUQ1RDE4Q0VBN0FCMDA4MDJGRTAgLyogUG9seW1vcnBoaWNHZXRCeUlkTGlz
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb2x5bW9ycGhpY0dldEJ5SWRM
aXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEYyOUREMThCNkFEMUMwMDU3
QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVz
dGltYXRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3Rp
bWF0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRGMjlERTE4
QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU3RhdGljRXhlY3V0aW9uQ291
bnRFc3RpbWF0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdTdGF0aWNFeGVjdXRpb25Db3VudEVz
dGltYXRpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjUwQUYzQjE5
M0U4QjM5MDA2NzRFRTggLyogREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oOyBwYXRoID0g
ZGZnL0RGR1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjI5OCw4ICsyMjk0LDYgQEAKIAkJMEY5RTMyNjIxQjA1QUIwNDAwODAxRUQ1IC8qIERG
R1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHU3Rv
cmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY5RkI0RjIxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RhY2tMYXlvdXRQaGFzZS5jcHA7
IHBhdGggPSBkZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGOUZCNEYzMTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1N0YWNrTGF5b3V0UGhhc2Uu
aDsgcGF0aCA9IGRmZy9ERkdTdGFja0xheW91dFBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTBGOUZDOEJGMTRFMUI1RkIwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRM
aXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBvbHltb3JwaGlj
UHV0QnlJZExpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjlGQzhDMDE0
RTFCNUZCMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGOUZDOEMxMTRFMUI1RkIwMEQ1MkFFMCAvKiBQdXRLaW5kLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1dEtpbmQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZBMkMxNzkxN0Q3Q0Y4NDAwOUQwMTVGIC8qIFRlc3RSdW5uZXJV
dGlscy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXN0UnVubmVy
VXRpbHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkEyQzE3QTE3RDdDRjg0
MDA5RDAxNUYgLyogVGVzdFJ1bm5lclV0aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFRlc3RSdW5uZXJVdGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MjU3NCw2ICsyNTY4LDggQEAKIAkJMEZGOEJERTgxQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVk
VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5mZXJyZWRW
YWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjhCREU5MUFENENGNzEw
MERGRTg4NCAvKiBJbmZlcnJlZFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEluZmVycmVkVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGOTIy
Q0YxNEY0NkIxMzAwNDFBMjRFIC8qIEpTQ0xMSW50T2Zmc2V0c0V4dHJhY3RvciAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5l
eGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gSlNDTExJbnRPZmZzZXRzRXh0
cmFjdG9yOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQkwRkY5Q0U3MTFC
OUNENkQwMDA0RURDQTYgLyogUG9seW1vcnBoaWNBY2Nlc3MuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUG9seW1vcnBoaWNBY2Nlc3MuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkY5Q0U3MjFCOUNENkQwMDA0RURDQTYgLyogUG9seW1vcnBoaWNB
Y2Nlc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9seW1vcnBoaWNBY2Nl
c3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQjZDMzYxQUY0OEREQzAwREIx
QkY3IC8qIFR5cGVvZlR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gVHlwZW9mVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRkI2QzM3
MUFGNDhEREMwMERCMUJGNyAvKiBUeXBlb2ZUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFR5cGVvZlR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZG
Qzk5RDAxODRFQzhBRDAwOUMxMEFCIC8qIENvbnN0YW50TW9kZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDb25zdGFudE1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTU1ODEsMTEgKzU1NzcsOSBAQAogCQkJCTk2OUEwNzk1MEVEMUQzQUUwMEYxRjY4MSAv
KiBPcGNvZGUuaCAqLywKIAkJCQkwRjJCREMyQjE1MUZERThCMDBDRDg5MTAgLyogT3BlcmFuZHMu
aCAqLywKIAkJCQlBNzA0NDdFOTE3QTBCRDQ2MDBGNTg5OEUgLyogT3BlcmFuZHNJbmxpbmVzLmgg
Ki8sCisJCQkJMEZGOUNFNzExQjlDRDZEMDAwNEVEQ0E2IC8qIFBvbHltb3JwaGljQWNjZXNzLmNw
cCAqLywKKwkJCQkwRkY5Q0U3MjFCOUNENkQwMDA0RURDQTYgLyogUG9seW1vcnBoaWNBY2Nlc3Mu
aCAqLywKIAkJCQkwRjM0QjE0QjE2RDQzRTBDMDAxQ0RBNUEgLyogUG9seW1vcnBoaWNBY2Nlc3NT
dHJ1Y3R1cmVMaXN0LmggKi8sCi0JCQkJMEY0Q0VENUMxOENFQTdBQjAwODAyRkUwIC8qIFBvbHlt
b3JwaGljR2V0QnlJZExpc3QuY3BwICovLAotCQkJCTBGNENFRDVEMThDRUE3QUIwMDgwMkZFMCAv
KiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmggKi8sCi0JCQkJMEY5RkM4QkYxNEUxQjVGQjAwRDUy
QUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwICovLAotCQkJCTBGOUZDOEMwMTRFMUI1
RkIwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmggKi8sCiAJCQkJMEY5ODIwNUQx
NkJGRTM3RjAwMjQwRDAyIC8qIFByZWNpc2VKdW1wVGFyZ2V0cy5jcHAgKi8sCiAJCQkJMEY5ODIw
NUUxNkJGRTM3RjAwMjQwRDAyIC8qIFByZWNpc2VKdW1wVGFyZ2V0cy5oICovLAogCQkJCTBGRDNF
NDA3MUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgKi8sCkBAIC01NjE2
LDggKzU2MTAsOCBAQAogCQkJCTBGMkQ0REU3MTk4MzJEQUMwMDdENEIxOSAvKiBUeXBlTG9jYXRp
b24uaCAqLywKIAkJCQlBNzlFNzgxRTE1RUVDQkE4MDA0N0M4NTUgLyogVW5saW5rZWRDb2RlQmxv
Y2suY3BwICovLAogCQkJCUE3OUU3ODFGMTVFRUNCQTgwMDQ3Qzg1NSAvKiBVbmxpbmtlZENvZGVC
bG9jay5oICovLAotCQkJCTE0MTQyRTUwMUI3OTZFQ0UwMEY0QkY0QiAvKiBVbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZS5oICovLAogCQkJCTE0MTQyRTU0MUI3OTczQzAwMEY0QkY0QiAvKiBVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAgKi8sCisJCQkJMTQxNDJFNTAxQjc5NkVDRTAwRjRC
RjRCIC8qIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmggKi8sCiAJCQkJQjU5Rjg5MzgxODkx
QURCNTAwRDVDQ0RDIC8qIFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0uY3BwICovLAogCQkJCUI1
OUY4OTM3MTg5MUFEMzMwMEQ1Q0NEQyAvKiBVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtLmggKi8s
CiAJCQkJMEY5NjNCMzYxM0ZDNkZERTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5oICovLApAQCAt
NjE3OCw3ICs2MTcyLDYgQEAKIAkJCQkwRkMwOTc3MTE0NjkzQUY1MDBDRjI0NDIgLyogREZHT1NS
RXhpdENvbXBpbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjcwMjVBQTE3MTRCMEZDMDAzODJD
MEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVG
QzlBQjE2ODFBM0I2MDA1NjdGNTMgLyogREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJMEY0Q0VENUYxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0
QnlJZExpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkVFMTcxNzhFNzMwMDY5MEM3RiAv
KiBERkdPU1JFeGl0UHJlcGFyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkZDOTVDMTRF
RjkwQUYwMEM3MjUzMiAvKiBERkdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVFQTcwRUUx
OUY1QjVDNDAwOThGNUVDIC8qIEpTQ29udGV4dFJlZkluc3BlY3RvclN1cHBvcnQuaCBpbiBIZWFk
ZXJzICovLApAQCAtNjIyNyw2ICs2MjIwLDcgQEAKIAkJCQk5OUU0NUEyNDE4QTFCMjU5MDAyNkQ4
OEYgLyogRW1wdHlJbnB1dEN1cnNvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQxNDJFNTMxQjc5
NkVERDAwRjRCRjRCIC8qIEV4ZWN1dGFibGVJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OUU0
NUEyNjE4QTFCMjU5MDAyNkQ4OEYgLyogRW5jb2RlZFZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRkY5Q0U3NDFCOUNENkQwMDA0RURDQTYgLyogUG9seW1vcnBoaWNBY2Nlc3MuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGNTg3NEVFMTk0RkVCMTIwMEFBQjJDMSAvKiBERkdNYXlFeGl0LmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzMwNDYwNzBFMUY0OTdGMDAzMjMyQ0YgLyogRXJyb3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDMDJFOTBEMEUxODM5REIwMDBGOTI5NyAvKiBFcnJvckNvbnN0cnVj
dG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTY2NjAsNyArNjY1NCw2IEBACiAJCQkJQTc3RjE4MjUx
NjQxOTJDNzAwNjQwQTQ3IC8qIFBhcnNlck1vZGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTMw
M0Q2NDE0NDdCOUUxMDBEM0Y5MDQgLyogUGFyc2VyVG9rZW5zLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjM0QjE0QzE2RDQzRTBEMDAxQ0RBNUEgLyogUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVM
aXN0LmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjlGQzhDNDE0RTFCNjAwMDBENTJBRTAgLyogUG9s
eW1vcnBoaWNQdXRCeUlkTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4RjE0MzQxQURGMDkw
MTAwRUQ3OTJDIC8qIERGR0Vwb2NoLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk4MjA2MTE2QkZF
MzgzMDAyNDBEMDIgLyogUHJlY2lzZUp1bXBUYXJnZXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjJERDgxNTFBQjNEOEJFMDBCQkI4RTggLyogREZHRm9yQWxsS2lsbHMuaCBpbiBIZWFkZXJzICov
LApAQCAtNzgxOCw3ICs3ODExLDYgQEAKIAkJCQkwRjBCODM5QzE0QkNGNDYzMDA4ODVCNEYgLyog
TExJbnRUaHVua3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDRUZBQ0QxODA1RTc1NTAwNDcy
Q0U0IC8qIExMVk1BUEkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdFNUFCMzcxNzk5RTRCMjAw
RDI4MzNEIC8qIExMVk1EaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEY0Q0VE
NUUxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTQ0NjlEREUxMDdFQzdFNzAwNjUwNDQ2IC8qIExvb2t1cC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjQ2ODBDQzE0QkJCMTdBMDBCRkUyNzIgLyogTG93TGV2ZWxJbnRlcnBy
ZXRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEI3MjNCMjEyRDdEQTQ2MDAzQkQ1RUQgLyog
TWFjaGluZVN0YWNrTWFya2VyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzg2MCw3ICs3ODUyLDYg
QEAKIAkJCQkwRkUyMjhFRTE0MzZBQjJDMDAxOTZDNDggLyogT3B0aW9ucy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNDhGMjFCQzEwN0VDNTREMDA0MkVDMkMgLyogUGFyc2VyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTkzMDUyQzM0MEZCNzkyMTkwMDQ4RkRDMyAvKiBQYXJzZXJBcmVuYS5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQkwRjlGQzhDMzE0RTFCNUZFMDBENTJBRTAgLyogUG9seW1vcnBo
aWNQdXRCeUlkTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjk4MjA2MDE2QkZFMzgxMDAy
NDBEMDIgLyogUHJlY2lzZUp1bXBUYXJnZXRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk1NzQy
RjY1MEREMTFGNUEwMDA5MTdGQiAvKiBQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
MkI5Q0Y4MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICov
LApAQCAtNzg3Nyw2ICs3ODY4LDcgQEAKIAkJCQkwRjE5MENBQzE4OUQ4MkY2MDAwQUU1RjAgLyog
UHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlCMzE2
NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJPcmlnaW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZGNzI5QjQxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2luU3RhY2suY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMEZGOUNFNzMxQjlDRDZEMDAwNEVEQ0E2IC8qIFBvbHltb3JwaGljQWNj
ZXNzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjEwNThCMTY3NTQ4MzEwMEY4QUI2RSAvKiBQ
cm9maWxlck9TUkV4aXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMTA1OEQxNjc1NDgzNzAw
RjhBQjZFIC8qIFByb2ZpbGVyT1NSRXhpdFNpdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYx
MzkxMkIxNjc3MUMzQTAwOUNDQjA3IC8qIFByb2ZpbGVyUHJvZmlsZWRCeXRlY29kZXMuY3BwIGlu
IFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJldmlzaW9uIDE4OTMyNCkJKGZyb20gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwOjE4OTMy
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlBvbHltb3JwaGljR2V0QnlJZExpc3QuaCIKKworI2lmIEVOQUJMRShKSVQpCisKKyNp
bmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCitHZXRCeUlkQWNjZXNzOjpHZXRCeUlkQWNjZXNzKAorICAgIFZNJiB2bSwgSlNDZWxsKiBv
d25lciwgQWNjZXNzVHlwZSB0eXBlLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91
dGluZSwKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQmIGNvbmRpdGlvblNldCkKKyAgICA6IG1fdHlwZSh0eXBlKQorICAgICwgbV9zdHJ1
Y3R1cmUodm0sIG93bmVyLCBzdHJ1Y3R1cmUpCisgICAgLCBtX2NvbmRpdGlvblNldChjb25kaXRp
b25TZXQpCisgICAgLCBtX3N0dWJSb3V0aW5lKHN0dWJSb3V0aW5lKQoreworfQorCitHZXRCeUlk
QWNjZXNzOjp+R2V0QnlJZEFjY2VzcygpCit7Cit9CisKK0dldEJ5SWRBY2Nlc3MgR2V0QnlJZEFj
Y2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykK
K3sKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgaW5pdGlhbFNsb3dQYXRoID0KKyAgICAgICAg
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGVsdGFDYWxsVG9TbG93Q2FzZSk7CisgICAgCisgICAgR2V0QnlJZEFjY2VzcyByZXN1bHQ7Cisg
ICAgCisgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0
X2J5X2lkX3NlbGYpOworICAgIAorICAgIHJlc3VsdC5tX3R5cGUgPSBTaW1wbGVJbmxpbmU7Cisg
ICAgcmVzdWx0Lm1fc3RydWN0dXJlLmNvcHlGcm9tKHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFz
ZU9iamVjdFN0cnVjdHVyZSk7CisgICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBKSVRTdHViUm91
dGluZTo6Y3JlYXRlU2VsZk1hbmFnZWRSb3V0aW5lKGluaXRpYWxTbG93UGF0aCk7CisgICAgCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBHZXRCeUlkQWNjZXNzOjp2aXNpdFdlYWsoVk0m
IHZtKSBjb25zdAoreworICAgIGlmIChtX3N0cnVjdHVyZSAmJiAhSGVhcDo6aXNNYXJrZWQobV9z
dHJ1Y3R1cmUuZ2V0KCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFtX2NvbmRp
dGlvblNldC5hcmVTdGlsbExpdmUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICgh
bV9zdHViUm91dGluZS0+dmlzaXRXZWFrKHZtKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHJldHVybiB0cnVlOworfQorCitQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpQb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0KFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBpZiAoc3R1Yklu
Zm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBtX2xpc3QuYXBwZW5kKEdldEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1cmVTdHViSW5mbyhzdHVi
SW5mbykpOworfQorCitQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBQb2x5bW9ycGhpY0dldEJ5SWRM
aXN0Ojpmcm9tKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBpZiAoc3R1Yklu
Zm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3QpCisgICAgICAgIHJldHVybiBz
dHViSW5mby51LmdldEJ5SWRMaXN0Lmxpc3Q7CisgICAgCisgICAgQVNTRVJUKAorICAgICAgICBz
dHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZgorICAgICAgICB8fCBz
dHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc191bnNldCk7CisgICAgCisgICAgUG9seW1vcnBo
aWNHZXRCeUlkTGlzdCogcmVzdWx0ID0gbmV3IFBvbHltb3JwaGljR2V0QnlJZExpc3Qoc3R1Yklu
Zm8pOworICAgIAorICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkTGlzdChyZXN1bHQpOworICAgIAor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1BvbHltb3JwaGljR2V0QnlJZExpc3Q6On5Qb2x5bW9y
cGhpY0dldEJ5SWRMaXN0KCkgeyB9CisKK01hY3JvQXNzZW1ibGVyQ29kZVB0ciBQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0OjpjdXJyZW50U2xvd1BhdGhUYXJnZXQoCisgICAgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvKSBjb25zdAoreworICAgIGlmIChpc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRj
aC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKKyAgICByZXR1cm4gbV9saXN0Lmxhc3QoKS5zdHViUm91
dGluZSgpLT5jb2RlKCkuY29kZSgpOworfQorCit2b2lkIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6
OmFkZEFjY2Vzcyhjb25zdCBHZXRCeUlkQWNjZXNzJiBhY2Nlc3MpCit7CisgICAgQVNTRVJUKCFp
c0Z1bGwoKSk7CisgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHJlc2l6aW5nIG9wdGltaXplcyBm
b3Igc3BhY2UsIG5vdCB0aW1lLgorICAgIG1fbGlzdC5yZXNpemVUb0ZpdChtX2xpc3Quc2l6ZSgp
ICsgMSk7CisgICAgbV9saXN0Lmxhc3QoKSA9IGFjY2VzczsKK30KKworYm9vbCBQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0Ojppc0Z1bGwoKSBjb25zdAoreworICAgIEFTU0VSVChzaXplKCkgPD0gUE9M
WU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKTsKKyAgICByZXR1cm4gc2l6ZSgpID09IFBPTFlNT1JQ
SElDX0xJU1RfQ0FDSEVfU0laRTsKK30KKworYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojpp
c0FsbW9zdEZ1bGwoKSBjb25zdAoreworICAgIEFTU0VSVChzaXplKCkgPD0gUE9MWU1PUlBISUNf
TElTVF9DQUNIRV9TSVpFKTsKKyAgICByZXR1cm4gc2l6ZSgpID49IFBPTFlNT1JQSElDX0xJU1Rf
Q0FDSEVfU0laRSAtIDE7Cit9CisKK2Jvb2wgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6ZGlkU2Vs
ZlBhdGNoaW5nKCkgY29uc3QKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXplKCk7IGktLTsp
IHsKKyAgICAgICAgaWYgKGF0KGkpLnR5cGUoKSA9PSBHZXRCeUlkQWNjZXNzOjpTaW1wbGVJbmxp
bmUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0
Cit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGlmICgh
YXQoaSkudmlzaXRXZWFrKHZtKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5B
QkxFKEpJVCkKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI0LDEzMiArMjQsMTA1NCBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nl
c3MuaCIKIAogI2lmIEVOQUJMRShKSVQpCiAKKyNpbmNsdWRlICJCaW5hcnlTd2l0Y2guaCIKICNp
bmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCisjaW5jbHVkZSA8d3RmL0Nv
bW1hUHJpbnRlci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotR2V0QnlJZEFjY2Vzczo6R2V0QnlJ
ZEFjY2VzcygKLSAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgUGFz
c1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUsCi0gICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCi0g
ICAgOiBtX3R5cGUodHlwZSkKLSAgICAsIG1fc3RydWN0dXJlKHZtLCBvd25lciwgc3RydWN0dXJl
KQotICAgICwgbV9jb25kaXRpb25TZXQoY29uZGl0aW9uU2V0KQotICAgICwgbV9zdHViUm91dGlu
ZShzdHViUm91dGluZSkKK3N0cnVjdCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUgeworICAgIENDYWxs
SGVscGVycyogaml0IHsgbnVsbHB0ciB9OworICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciog
YWxsb2NhdG9yOworICAgIHNpemVfdCBudW1iZXJPZlBhZGRpbmdCeXRlcyB7IDAgfTsKKyAgICBQ
b2x5bW9ycGhpY0FjY2VzcyogYWNjZXNzIHsgbnVsbHB0ciB9OworICAgIFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbyB7IG51bGxwdHIgfTsKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHN1
Y2Nlc3M7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBmYWlsQW5kUmVwYXRjaDsKKyAgICBD
Q2FsbEhlbHBlcnM6Okp1bXBMaXN0IGZhaWxBbmRJZ25vcmU7CisgICAgR1BSUmVnIGJhc2VHUFIg
eyBJbnZhbGlkR1BSUmVnIH07CisgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzOworICAgIEdQUlJl
ZyBzY3JhdGNoR1BSIHsgSW52YWxpZEdQUlJlZyB9OworICAgIGJvb2wgbmVlZFRvUmVzdG9yZVNj
cmF0Y2ggeyBmYWxzZSB9OworICAgIFZlY3RvcjxzdGQ6OmZ1bmN0aW9uPHZvaWQoTGlua0J1ZmZl
ciYpPiBjYWxsYmFja3M7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQ7CisgICAgc3RkOjp1
bmlxdWVfcHRyPFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbz4gd2F0Y2hwb2ludHM7CisK
KyAgICB2b2lkIGFkZFdhdGNocG9pbnQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNv
bmRpdGlvbiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCkpCisgICAgeworICAgICAgICByZXR1
cm4gV2F0Y2hwb2ludE9uU3RydWN0dXJlU3R1YkluZm86OmVuc3VyZVJlZmVyZW5jZUFuZEFkZFdh
dGNocG9pbnQoCisgICAgICAgICAgICB3YXRjaHBvaW50cywgaml0LT5jb2RlQmxvY2soKSwgc3R1
YkluZm8sIGNvbmRpdGlvbik7CisgICAgfQorCisgICAgdm9pZCByZXN0b3JlU2NyYXRjaCgpCisg
ICAgeworICAgICAgICBhbGxvY2F0b3ItPnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmco
KmppdCwgbnVtYmVyT2ZQYWRkaW5nQnl0ZXMpOworICAgIH0KKworICAgIHZvaWQgc3VjY2VlZCgp
CisgICAgeworICAgICAgICByZXN0b3JlU2NyYXRjaCgpOworICAgICAgICBzdWNjZXNzLmFwcGVu
ZChqaXQtPmp1bXAoKSk7CisgICAgfQorfTsKKworQWNjZXNzQ2FzZTo6QWNjZXNzQ2FzZSgpCiB7
CiB9CiAKLUdldEJ5SWRBY2Nlc3M6On5HZXRCeUlkQWNjZXNzKCkKK3N0ZDo6dW5pcXVlX3B0cjxB
Y2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpnZXQoCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBB
Y2Nlc3NUeXBlIHR5cGUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgYm9vbCB2aWFQcm94eSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQm
IGNvbmRpdGlvblNldCwgV2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCwKKyAgICBQcm9wZXJ0
eVNsb3Q6OkdldFZhbHVlRnVuYyBjdXN0b21HZXR0ZXIpCit7CisgICAgc3RkOjp1bmlxdWVfcHRy
PEFjY2Vzc0Nhc2U+IHJlc3VsdChuZXcgQWNjZXNzQ2FzZSgpKTsKKworICAgIHJlc3VsdC0+bV90
eXBlID0gdHlwZTsKKyAgICByZXN1bHQtPm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgIHJlc3VsdC0+
bV9zdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKKyAgICByZXN1bHQtPm1fY29u
ZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OworICAgIAorICAgIGlmICh2aWFQcm94eSB8fCBhZGRp
dGlvbmFsU2V0IHx8IGRvZXNDYWxscygpIHx8IGN1c3RvbUdldHRlcikgeworICAgICAgICByZXN1
bHQtPm1fcmFyZURhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPFJhcmVEYXRhPigpOworICAgICAgICBy
ZXN1bHQtPm1fcmFyZURhdGEtPnZpYVByb3h5ID0gdmlhUHJveHk7CisgICAgICAgIHJlc3VsdC0+
bV9yYXJlRGF0YS0+YWRkaXRpb25hbFNldCA9IGFkZGl0aW9uYWxTZXQ7CisgICAgICAgIHJlc3Vs
dC0+bV9yYXJlRGF0YS0+Y3VzdG9tQWNjZXNzb3IuZ2V0dGVyID0gY3VzdG9tR2V0dGVyOworICAg
IH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNl
PiBBY2Nlc3NDYXNlOjpyZXBsYWNlKAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8QWNjZXNzQ2FzZT4gcmVzdWx0KG5ldyBBY2Nlc3NDYXNlKCkpOworCisgICAgcmVzdWx0
LT5tX3R5cGUgPSBSZXBsYWNlOworICAgIHJlc3VsdC0+bV9vZmZzZXQgPSBvZmZzZXQ7CisgICAg
cmVzdWx0LT5tX3N0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOworCisgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotR2V0QnlJZEFjY2VzcyBHZXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0
dXJlU3R1YkluZm8oU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQorc3RkOjp1bmlxdWVfcHRy
PEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OnRyYW5zaXRpb24oCisgICAgVk0mIHZtLCBKU0NlbGwq
IG93bmVyLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUs
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCYgY29uZGl0aW9uU2V0KQogewotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBpbml0aWFs
U2xvd1BhdGggPQotICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9m
ZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKLSAgICAKLSAgICBHZXRC
eUlkQWNjZXNzIHJlc3VsdDsKLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5hY2Nl
c3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZik7Ci0gICAgCi0gICAgcmVzdWx0Lm1fdHlw
ZSA9IFNpbXBsZUlubGluZTsKLSAgICByZXN1bHQubV9zdHJ1Y3R1cmUuY29weUZyb20oc3R1Yklu
Zm8udS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlKTsKLSAgICByZXN1bHQubV9zdHVi
Um91dGluZSA9IEpJVFN0dWJSb3V0aW5lOjpjcmVhdGVTZWxmTWFuYWdlZFJvdXRpbmUoaW5pdGlh
bFNsb3dQYXRoKTsKKyAgICBSRUxFQVNFX0FTU0VSVChvbGRTdHJ1Y3R1cmUgPT0gbmV3U3RydWN0
dXJlLT5wcmV2aW91c0lEKCkpOwogICAgIAorICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNl
PiByZXN1bHQobmV3IEFjY2Vzc0Nhc2UoKSk7CisKKyAgICByZXN1bHQtPm1fdHlwZSA9IFRyYW5z
aXRpb247CisgICAgcmVzdWx0LT5tX29mZnNldCA9IG9mZnNldDsKKyAgICByZXN1bHQtPm1fc3Ry
dWN0dXJlLnNldCh2bSwgb3duZXIsIG5ld1N0cnVjdHVyZSk7CisgICAgcmVzdWx0LT5tX2NvbmRp
dGlvblNldCA9IGNvbmRpdGlvblNldDsKKwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWJvb2wg
R2V0QnlJZEFjY2Vzczo6dmlzaXRXZWFrKFZNJiB2bSkgY29uc3QKK3N0ZDo6dW5pcXVlX3B0cjxB
Y2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpzZXR0ZXIoCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVy
LCBBY2Nlc3NUeXBlIHR5cGUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQsCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNl
dCwgUHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmMgY3VzdG9tU2V0dGVyKQoreworICAgIHN0
ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nhc2UoKSk7CisKKyAg
ICByZXN1bHQtPm1fdHlwZSA9IHR5cGU7CisgICAgcmVzdWx0LT5tX29mZnNldCA9IG9mZnNldDsK
KyAgICByZXN1bHQtPm1fc3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7CisgICAg
cmVzdWx0LT5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKKworICAgIGlmIChjdXN0b21T
ZXR0ZXIpIHsKKyAgICAgICAgcmVzdWx0LT5tX3JhcmVEYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxS
YXJlRGF0YT4oKTsKKyAgICAgICAgcmVzdWx0LT5tX3JhcmVEYXRhLT5jdXN0b21BY2Nlc3Nvci5z
ZXR0ZXIgPSBjdXN0b21TZXR0ZXI7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OmluKAorICAgIFZNJiB2bSwg
SlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKKyAg
ICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KQoreworICAg
IHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nhc2UoKSk7CisK
KyAgICByZXN1bHQtPm1fdHlwZSA9IHR5cGU7CisgICAgcmVzdWx0LT5tX3N0cnVjdHVyZS5zZXQo
dm0sIG93bmVyLCBzdHJ1Y3R1cmUpOworICAgIHJlc3VsdC0+bV9jb25kaXRpb25TZXQgPSBjb25k
aXRpb25TZXQ7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGQ6OnVuaXF1ZV9wdHI8QWNj
ZXNzVHlwZT4gQWNjZXNzQ2FzZTo6Z2V0TGVuZ3RoKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNj
ZXNzVHlwZSB0eXBlKQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1bHQo
bmV3IEFjY2Vzc0Nhc2UoKSk7CisKKyAgICByZXN1bHQtPm1fdHlwZSA9IHR5cGU7CisKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitBY2Nlc3NDYXNlOjp+QWNjZXNzQ2FzZSgpCit7Cit9CisKK3N0
ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpmcm9tU3RydWN0dXJlU3R1Yklu
Zm8oCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8pCit7CisgICAgc3dpdGNoIChzdHViSW5mby5hY2Nlc3NUeXBlKSB7CisgICAgY2FzZSBhY2Nl
c3NfZ2V0X2J5X2lkX3NlbGY6CisgICAgICAgIHJldHVybiBnZXQoCisgICAgICAgICAgICB2bSwg
b3duZXIsIExvYWQsIHN0dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0LCBzdHViSW5mby51LmJ5SWRT
ZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUpOworCisgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3Jl
cGxhY2U6CisgICAgICAgIHJldHVybiByZXBsYWNlKHZtLCBvd25lciwgc3R1YkluZm8udS5ieUlk
U2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLCBzdHViSW5mby51LmJ5SWRTZWxmLm9mZnNldCk7CisK
KyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9Cit9CisKK2Jvb2wg
QWNjZXNzQ2FzZTo6Z3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2soKSBjb25zdAoreworICAgIGlmICh2
aWFQcm94eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKG1fdHlwZSkg
eworICAgIGNhc2UgQXJyYXlMZW5ndGg6CisgICAgY2FzZSBTdHJpbmdMZW5ndGg6CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
Cit9CisKK2Jvb2wgQWNjZXNzQ2FzZTo6Y2FuUmVwbGFjZShjb25zdCBBY2Nlc3NDYXNlJiBvdGhl
cikKK3sKKyAgICAvLyBXZSBjb3VsZCBkbyBhIGxvdCBiZXR0ZXIgaGVyZSwgYnV0IGZvciBub3cg
d2UganVzdCBkbyBzb21ldGhpbmcgb2J2aW91cy4KKworICAgIGlmICghZ3VhcmRlZEJ5U3RydWN0
dXJlQ2hlY2soKSB8fCAhb3RoZXIuZ3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2soKSkgeworICAgICAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMhCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICByZXR1cm4gc3RydWN0dXJlKCkgPT0gb3RoZXIuc3RydWN0dXJlKCk7Cit9CisKK3Zv
aWQgQWNjZXNzQ2FzZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5w
cmludCgKKyAgICAgICAgbV90eXBlLCAiOihzdHJ1Y3R1cmUgPSAiLCBwb2ludGVyRHVtcChtX3N0
cnVjdHVyZS5nZXQoKSksICIsIG9mZnNldCA9ICIsIG1fb2Zmc2V0LAorICAgICAgICAiLCBjb25k
aXRpb25zID0gIiwgbV9jb25kaXRpb25TZXQpOworCisgICAgaWYgKFJhcmVEYXRhKiByYXJlRGF0
YSA9IG1fcmFyZURhdGEuZ2V0KCkpIHsKKyAgICAgICAgb3V0LnByaW50KAorICAgICAgICAgICAg
IiwgdmlhUHJveHkgPSAiLCByYXJlRGF0YS0+dmlhUHJveHksCisgICAgICAgICAgICAiLCBhZGRp
dGlvbmFsU2V0ID0gIiwgUmF3UG9pbnRlcihyYXJlRGF0YS0+YWRkaXRpb25hbFNldC5nZXQoKSks
CisgICAgICAgICAgICAiLCBjYWxsTGlua0luZm8gPSAiLCBSYXdQb2ludGVyKHJhcmVEYXRhLT5j
YWxsTGlua0luZm8uZ2V0KCkpLAorICAgICAgICAgICAgIiwgY3VzdG9tQWNjZXNzb3IgPSAiLCBS
YXdQb2ludGVyKHJhcmVEYXRhLT5jdXN0b21BY2Nlc3Nvci5vcGFxdWUpKTsKKyAgICB9CisKKyAg
ICBvdXQucHJpbnQoIikiKTsKK30KKworYm9vbCBBY2Nlc3NDYXNlOjp2aXNpdFdlYWsoVk0mIHZt
KSBjb25zdAogewogICAgIGlmIChtX3N0cnVjdHVyZSAmJiAhSGVhcDo6aXNNYXJrZWQobV9zdHJ1
Y3R1cmUuZ2V0KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFtX2NvbmRpdGlv
blNldC5hcmVTdGlsbExpdmUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghbV9z
dHViUm91dGluZS0+dmlzaXRXZWFrKHZtKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
IChtX3JhcmVEYXRhICYmIG1fcmFyZURhdGEtPmNhbGxMaW5rSW5mbykKKyAgICAgICAgbV9yYXJl
RGF0YS0+Y2FsbExpbmtJbmZvLT52aXNpdFdlYWsodm0pOwogICAgIHJldHVybiB0cnVlOwogfQog
Ci1Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbykKK3ZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQo
CisgICAgQWNjZXNzR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlz
dCYgZmFsbFRocm91Z2gpCiB7Ci0gICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNz
X3Vuc2V0KQorICAgIENDYWxsSGVscGVycyYgaml0ID0gKnN0YXRlLmppdDsKKworICAgIHN3aXRj
aCAobV90eXBlKSB7CisgICAgY2FzZSBBcnJheUxlbmd0aDogeworICAgICAgICBBU1NFUlQoIXZp
YVByb3h5KCkpOworICAgICAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VH
UFIsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
ZmFsbFRocm91Z2guYXBwZW5kKAorICAgICAgICAgICAgaml0LmJyYW5jaFRlc3QzMihDQ2FsbEhl
bHBlcnM6Olplcm8sIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKElzQXJy
YXkpKSk7CisgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgKKyAgICAgICAgICAgIGppdC5icmFu
Y2hUZXN0MzIoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpaZXJvLCBzY3JhdGNoR1BS
LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihJbmRleGluU2hhcGVNYXNrKSkpOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIFN0cmluZ0xlbmd0aDogeworICAgICAgICBBU1NF
UlQoIXZpYVByb3h5KCkpOworICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCisgICAgICAgICAg
ICBqaXQuYnJhbmNoOCgKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAor
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnR5
cGVJbmZvVHlwZU9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMihTdHJpbmdUeXBlKSkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBkZWZh
dWx0OiB7CisgICAgICAgIGlmICh2aWFQcm94eSgpKSB7CisgICAgICAgICAgICBmYWxsVGhyb3Vn
aC5hcHBlbmQoCisgICAgICAgICAgICAgICAgaml0LmJyYW5jaDgoCisgICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6QWRkcmVzcyhzdGF0ZS5iYXNlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgp
KSwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoUHVyZUZv
cndhcmRpbmdQcm94eVR5cGUpKSk7CisKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKAorICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdGF0ZS5iYXNlR1BSLCBKU1Byb3h5Ojp0
YXJnZXRPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgc3RhdGUuc2NyYXRjaEdQUik7CisKKyAg
ICAgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgKKyAgICAgICAgICAgICAgICBqaXQuYnJhbmNo
U3RydWN0dXJlKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAor
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RhdGUuc2NyYXRjaEdQ
UiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICAgICAgc3Ry
dWN0dXJlKCkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZhbGxUaHJvdWdoLmFw
cGVuZCgKKyAgICAgICAgICAgICAgICBqaXQuYnJhbmNoU3RydWN0dXJlKAorICAgICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3Moc3RhdGUuYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlKCkpKTsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICB9IH07CisKKyAgICBnZW5lcmF0ZShzdGF0ZSk7Cit9CisKK3ZvaWQg
QWNjZXNzQ2FzZTo6Z2VuZXJhdGUoQWNjZXNzR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkKK3sKKyAg
ICBDQ2FsbEhlbHBlcnMmIGppdCA9ICpzdGF0ZS5qaXQ7CisgICAgVk0mIHZtID0gKmppdC52bSgp
OworICAgIFBvbHltb3JwaGljQWNjZXNzJiBhY2Nlc3MgPSAqc3RhdGUuYWNjZXNzOworICAgIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9ICpzdGF0ZS5zdHViSW5mbzsKKyAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IGppdC5jb2RlQmxvY2soKTsKKyAgICBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudCA9ICpzdGF0ZS5pZGVudDsKKyAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSBzdGF0ZS52
YWx1ZVJlZ3M7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0ZS5iYXNlR1BSOworICAgIEdQUlJl
ZyBzY3JhdGNoR1BSID0gc3RhdGUuc2NyYXRjaEdQUjsKKworICAgIEFTU0VSVChtX2NvbmRpdGlv
blNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hw
b2ludCgpKTsKKworICAgIGlmIChzdHJ1Y3R1cmUoKS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hw
b2ludCgpIHx8IG1fY29uZGl0aW9uU2V0Lm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkK
KyAgICAgICAgdm0ucmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVydHkoaWRlbnQsIHN0
YXRlLmFkZFdhdGNocG9pbnQoKSk7CisKKyAgICBpZiAoYWRkaXRpb25hbFNldCgpKQorICAgICAg
ICBhZGRpdGlvbmFsU2V0KCktPmFkZChzdGF0ZS5hZGRXYXRjaHBvaW50KCkpOworCisgICAgZm9y
IChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogbV9jb25kaXRpb25T
ZXQpIHsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjb25kaXRpb24ub2JqZWN0KCkt
PnN0cnVjdHVyZSgpOworCisgICAgICAgIGlmIChjb25kaXRpb24uaXNXYXRjaGFibGVBc3N1bWlu
Z0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKSB7CisgICAgICAgICAgICBzdHJ1Y3R1cmUtPmFk
ZFRyYW5zaXRpb25XYXRjaHBvaW50KHN0YXRlLmFkZFdhdGNocG9pbnQoY29uZGl0aW9uKSk7Cisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGNvbmRpdGlvbi5zdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5
V2F0Y2hwb2ludChzdHJ1Y3R1cmUpKTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKGNvbmRpdGlvbi5vYmplY3QoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBz
dGF0ZS5mYWlsQW5kUmVwYXRjaC5hcHBlbmQoCisgICAgICAgICAgICBqaXQuYnJhbmNoU3RydWN0
dXJlKAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsCisgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgc3RydWN0dXJlKSk7CisgICAgfQorCisgICAg
c3dpdGNoIChtX3R5cGUpIHsKKyAgICBjYXNlIEluSGl0OgorICAgIGNhc2UgSW5NaXNzOgorICAg
ICAgICBqaXQuYm94Qm9vbGVhblBheWxvYWQobV90eXBlID09IEluSGl0LCB2YWx1ZVJlZ3MucGF5
bG9hZEdQUigpKTsKKyAgICAgICAgc3RhdGUuc3VjY2VlZCgpOworICAgICAgICByZXR1cm47CisK
KyAgICBjYXNlIE1pc3M6CisgICAgICAgIGppdC5tb3ZlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVk
KCksIHZhbHVlUmVncyk7CisgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKKyAgICAgICAgcmV0dXJu
OworCisgICAgY2FzZSBMb2FkOgorICAgIGNhc2UgR2V0dGVyOgorICAgIGNhc2UgU2V0dGVyOgor
ICAgIGNhc2UgQ3VzdG9tR2V0dGVyOgorICAgIGNhc2UgQ3VzdG9tU2V0dGVyOiB7CisgICAgICAg
IGlmIChpc1ZhbGlkT2Zmc2V0KG1fb2Zmc2V0KSkgeworICAgICAgICAgICAgU3RydWN0dXJlKiBj
dXJyU3RydWN0dXJlOworICAgICAgICAgICAgaWYgKG1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkK
KyAgICAgICAgICAgICAgICBjdXJyU3RydWN0dXJlID0gc3RydWN0dXJlOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBtX2NvbmRpdGlvblNldC5zbG90
QmFzZUNvbmRpdGlvbigpLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgIGN1cnJT
dHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgb2Zmc2V0
KTsKKyAgICAgICAgfQorCisgICAgICAgIEdQUlJlZyBiYXNlRm9yR2V0R1BSOworICAgICAgICBp
ZiAodmlhUHJveHkoKSkgeworICAgICAgICAgICAgYmFzZUZvckdldEdQUiA9IHZhbHVlUmVncy5w
YXlsb2FkR1BSKCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cigKKyAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNQcm94eTo6dGFyZ2V0T2Zmc2V0KCkpLAor
ICAgICAgICAgICAgICAgIGJhc2VGb3JHZXRHUFIpOworICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIGJhc2VGb3JHZXRHUFIgPSBiYXNlR1BSOworCisgICAgICAgIEdQUlJlZyBiYXNlRm9yQWNj
ZXNzR1BSOworICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc0VtcHR5KCkpIHsKKyAgICAgICAg
ICAgIGppdC5tb3ZlKAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihjb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vYmplY3QoKSksCisgICAgICAgICAg
ICAgICAgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBiYXNlRm9yQWNjZXNzR1BSID0gc2NyYXRj
aEdQUjsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBiYXNlRm9yQWNjZXNzR1BSID0gYmFz
ZUZvckdldEdQUjsKKworICAgICAgICBHUFJSZWcgbG9hZGVkVmFsdWVHUFIgPSBJbnZhbGlkR1BS
UmVnOworICAgICAgICBpZiAobV90eXBlICE9IEN1c3RvbUdldHRlciAmJiBtX3R5cGUgIT0gQ3Vz
dG9tU2V0dGVyKSB7CisgICAgICAgICAgICBpZiAobV90eXBlID09IExvYWQpCisgICAgICAgICAg
ICAgICAgbG9hZGVkVmFsdWVHUFIgPSB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSID0gc2NyYXRjaEdQUjsKKwor
ICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFI7CisgICAgICAgICAgICBpZiAoaXNJbmxpbmVP
ZmZzZXQob2Zmc2V0KSkKKyAgICAgICAgICAgICAgICBzdG9yYWdlR1BSID0gYmFzZUZvckFjY2Vz
c0dQUjsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKAor
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUZvckFjY2Vzc0dQ
UiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICAgICAgbG9h
ZGVkVmFsdWVHUFIpOworICAgICAgICAgICAgICAgIHN0b3JhZ2VHUFIgPSBsb2FkZWRWYWx1ZUdQ
UjsKKyAgICAgICAgICAgIH0KKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICBqaXQu
bG9hZDY0KENDYWxsSGVscGVyczo6QWRkcmVzcyhzdG9yYWdlR1BSLCBvZmZzZXRSZWxhdGl2ZVRv
QmFzZShvZmZzZXQpKSwgbG9hZGVkVmFsdWVHUFIpOworI2Vsc2UKKyAgICAgICAgICAgIGlmICht
X3R5cGUgPT0gTG9hZCkgeworICAgICAgICAgICAgICAgIGppdC5sb2FkMzIoCisgICAgICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdG9yYWdlR1BSLCBvZmZzZXRSZWxhdGl2
ZVRvQmFzZShvZmZzZXQpICsgVGFnT2Zmc2V0KSwKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVS
ZWdzLnRhZ0dQUigpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGppdC5sb2FkMzIoCisg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9mZnNldFJl
bGF0aXZlVG9CYXNlKG9mZnNldCkgKyBQYXlsb2FkT2Zmc2V0KSwKKyAgICAgICAgICAgICAgICBs
b2FkZWRWYWx1ZUdQUik7CisjZW5kaWYKKyAgICAgICAgfQorCisgICAgICAgIC8vIFN0dWZmIGZv
ciBjdXN0b20gZ2V0dGVycy4KKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlvbkNh
bGw7CisgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBoYW5kbGVyQ2FsbDsKKworICAgICAgICAv
LyBTdHVmZiBmb3IgSlMgZ2V0dGVycy4KKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpEYXRhTGFiZWxQ
dHIgYWRkcmVzc09mTGlua0Z1bmN0aW9uQ2hlY2s7CisgICAgICAgIENDYWxsSGVscGVyczo6Q2Fs
bCBmYXN0UGF0aENhbGw7CisgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBzbG93UGF0aENhbGw7
CisKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHN1Y2Nlc3M7CisgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcCBmYWlsOworICAgICAgICBpZiAobV90eXBlICE9IExvYWQgJiYgbV90eXBlICE9
IE1pc3MpIHsKKyAgICAgICAgICAgIC8vIE5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2hlbmV2ZXIg
dGhpcyBjYWxsIGlzIG1hZGUgaW4gdGhlIGZ1dHVyZSwgd2UgcmVtZW1iZXIgdGhlCisgICAgICAg
ICAgICAvLyBwbGFjZSB0aGF0IHdlIG1hZGUgaXQgZnJvbS4KKyAgICAgICAgICAgIGppdC5zdG9y
ZTMyKAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHN0dWJJbmZv
LmNhbGxTaXRlSW5kZXguYml0cygpKSwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRh
Z0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQp
KSk7CisKKyAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gR2V0dGVyIHx8IG1fdHlwZSA9PSBTZXR0
ZXIpIHsKKyAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBKUyBjYWxsIHVzaW5nIGEgSlMgY2Fs
bCBpbmxpbmUgY2FjaGUuIEFzc3VtZSB0aGF0OgorICAgICAgICAgICAgICAgIC8vCisgICAgICAg
ICAgICAgICAgLy8gLSBTUCBpcyBhbGlnbmVkIGFuZCByZXByZXNlbnRzIHRoZSBleHRlbnQgb2Yg
dGhlIGNhbGxpbmcgY29tcGlsZXIncyBzdGFjayB1c2FnZS4KKyAgICAgICAgICAgICAgICAvLwor
ICAgICAgICAgICAgICAgIC8vIC0gRlAgaXMgc2V0IGNvcnJlY3RseSAoaS5lLiBpdCBwb2ludHMg
dG8gdGhlIGNhbGxlcidzIGNhbGwgZnJhbWUgaGVhZGVyKS4KKyAgICAgICAgICAgICAgICAvLwor
ICAgICAgICAgICAgICAgIC8vIC0gU1AgLSBGUCBpcyBhbiBhbGlnbmVkIGRpZmZlcmVuY2UuCisg
ICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAtIEFueSBieXRlIGJldHdlZW4g
RlAgKGV4Y2x1c2l2ZSkgYW5kIFNQIChpbmNsdXNpdmUpIGNvdWxkIGJlIGxpdmUgaW4gdGhlIGNh
bGxpbmcKKyAgICAgICAgICAgICAgICAvLyAgIGNvZGUuCisgICAgICAgICAgICAgICAgLy8KKyAg
ICAgICAgICAgICAgICAvLyBUaGVyZWZvcmUsIHdlIHRlbXBvcmFyaWx5IGdyb3cgdGhlIHN0YWNr
IGZvciB0aGUgcHVycG9zZSBvZiB0aGUgY2FsbCBhbmQgdGhlbgorICAgICAgICAgICAgICAgIC8v
IHNocmluayBpdCBhZnRlci4KKworICAgICAgICAgICAgICAgIG1fcmFyZURhdGEtPmNhbGxMaW5r
SW5mbyA9IHN0ZDo6bWFrZV91bmlxdWU8Q2FsbExpbmtJbmZvPigpOworICAgICAgICAgICAgICAg
IG1fcmFyZURhdGEtPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNhbGwsIHN0dWJJbmZvLmNvZGVP
cmlnaW4sIGxvYWRlZFZhbHVlR1BSKTsKKworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
SnVtcExpc3QgZG9uZTsKKworICAgICAgICAgICAgICAgIC8vIFRoZXJlIGlzIGEgInRoaXMiIGFy
Z3VtZW50LgorICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mUGFyYW1ldGVycyA9IDE7
CisgICAgICAgICAgICAgICAgLy8gLi4uIGFuZCBhIHZhbHVlIGFyZ3VtZW50IGlmIHdlJ3JlIGNh
bGxpbmcgYSBzZXR0ZXIuCisgICAgICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBTZXR0ZXIpCisg
ICAgICAgICAgICAgICAgICAgIG51bWJlck9mUGFyYW1ldGVycysrOworCisgICAgICAgICAgICAg
ICAgLy8gR2V0IHRoZSBhY2Nlc3NvcjsgaWYgdGhlcmUgYWluJ3Qgb25lIHRoZW4gdGhlIHJlc3Vs
dCBpcyBqc1VuZGVmaW5lZCgpLgorICAgICAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gU2V0dGVy
KSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKAorICAgICAgICAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGxvYWRlZFZhbHVlR1BSLCBHZXR0ZXJTZXR0ZXI6
Om9mZnNldE9mU2V0dGVyKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVH
UFIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5s
b2FkUHRyKAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGxv
YWRlZFZhbHVlR1BSLCBHZXR0ZXJTZXR0ZXI6Om9mZnNldE9mR2V0dGVyKCkpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIpOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCByZXR1cm5VbmRlZmluZWQgPSBqaXQuYnJh
bmNoVGVzdFB0cigKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpaZXJvLCBsb2Fk
ZWRWYWx1ZUdQUik7CisKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlJlZ3NGb3JD
YWxsID0gSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIG51bWJlck9mUGFyYW1ldGVyczsK
KworICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQnl0ZXNGb3JDYWxsID0KKyAgICAg
ICAgICAgICAgICAgICAgbnVtYmVyT2ZSZWdzRm9yQ2FsbCAqIHNpemVvZihSZWdpc3RlcikgKyBz
aXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7CisKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBhbGln
bmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwgPQorICAgICAgICAgICAgICAgICAgICBXVEY6OnJvdW5k
VXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXR3cygpLCBudW1iZXJPZkJ5dGVzRm9yQ2Fs
bCk7CisKKyAgICAgICAgICAgICAgICBqaXQuc3ViUHRyKAorICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwpLAor
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
KworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyBjYWxsZWVGcmFtZSA9IEND
YWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpz
dGFja1BvaW50ZXJSZWdpc3RlciwKKyAgICAgICAgICAgICAgICAgICAgLXN0YXRpY19jYXN0PHB0
cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7CisKKyAgICAgICAgICAgICAgICBq
aXQuc3RvcmUzMigKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIobnVtYmVyT2ZQYXJhbWV0ZXJzKSwKKyAgICAgICAgICAgICAgICAgICAgY2FsbGVlRnJhbWUu
d2l0aE9mZnNldChKU1N0YWNrOjpBcmd1bWVudENvdW50ICogc2l6ZW9mKFJlZ2lzdGVyKSArIFBh
eWxvYWRPZmZzZXQpKTsKKworICAgICAgICAgICAgICAgIGppdC5zdG9yZUNlbGwoCisgICAgICAg
ICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KEpTU3Rh
Y2s6OkNhbGxlZSAqIHNpemVvZihSZWdpc3RlcikpKTsKKworICAgICAgICAgICAgICAgIGppdC5z
dG9yZUNlbGwoCisgICAgICAgICAgICAgICAgICAgIGJhc2VGb3JHZXRHUFIsCisgICAgICAgICAg
ICAgICAgICAgIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnQoMCkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisKKyAgICAgICAgICAgICAgICBp
ZiAoa2luZCA9PSBDYWxsU2V0dGVyKSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZVZh
bHVlKAorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVSZWdzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgY2FsbGVlRnJhbWUud2l0aE9mZnNldCgKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxKS5vZmZzZXQoKSAqIHNpemVvZihSZWdp
c3RlcikpKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6Okp1bXAgc2xvd0Nhc2UgPSBqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKAorICAgICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBsb2FkZWRWYWx1ZUdQUiwgYWRkcmVzc09m
TGlua0Z1bmN0aW9uQ2hlY2ssCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cigwKSk7CisKKyAgICAgICAgICAgICAgICBmYXN0UGF0aENhbGwgPSBqaXQubmVh
ckNhbGwoKTsKKworICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoCisgICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2Fs
bCksCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0
ZXIpOworICAgICAgICAgICAgICAgIGlmIChraW5kID09IENhbGxHZXR0ZXIpCisgICAgICAgICAg
ICAgICAgICAgIGppdC5zZXR1cFJlc3VsdHModmFsdWVSZWdzKTsKKworICAgICAgICAgICAgICAg
IGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmxpbmso
JmppdCk7CisKKyAgICAgICAgICAgICAgICBqaXQubW92ZShsb2FkZWRWYWx1ZUdQUiwgR1BSSW5m
bzo6cmVnVDApOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgICAgICAgICAgLy8gV2Ug
KmFsd2F5cyoga25vdyB0aGF0IHRoZSBnZXR0ZXIvc2V0dGVyLCBpZiBub24tbnVsbCwgaXMgYSBj
ZWxsLgorICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkNlbGxUYWcpLCBHUFJJbmZvOjpyZWdUMSk7CisjZW5kaWYKKyAgICAgICAgICAg
ICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9yYXJlRGF0YS0+Y2Fs
bExpbmtJbmZvLmdldCgpKSwgR1BSSW5mbzo6cmVnVDIpOworICAgICAgICAgICAgICAgIHNsb3dQ
YXRoQ2FsbCA9IGppdC5uZWFyQ2FsbCgpOworCisgICAgICAgICAgICAgICAgaml0LmFkZFB0cigK
KyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYWxpZ25lZE51
bWJlck9mQnl0ZXNGb3JDYWxsKSwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ2FsbEdl
dHRlcikKKyAgICAgICAgICAgICAgICAgICAgaml0LnNldHVwUmVzdWx0cyh2YWx1ZVJlZ3MpOwor
CisgICAgICAgICAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuVW5kZWZpbmVkLmxpbmsoJmppdCk7CisKKyAgICAgICAgICAgICAgICBpZiAoa2lu
ZCA9PSBDYWxsR2V0dGVyKQorICAgICAgICAgICAgICAgICAgICBqaXQubW92ZVRydXN0ZWRWYWx1
ZShqc1VuZGVmaW5lZCgpLCB2YWx1ZVJlZ3MpOworCisgICAgICAgICAgICAgICAgZG9uZS5saW5r
KCZqaXQpOworCisgICAgICAgICAgICAgICAgc3RhdGUuY2FsbGJhY2tzLmFwcGVuZCgKKyAgICAg
ICAgICAgICAgICAgICAgWyZdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBtX3JhcmVEYXRhLT5jYWxsTGlua0luZm8tPnNldENhbGxMb2NhdGlvbnMo
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNh
bGwoc2xvd1BhdGhDYWxsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVy
LmxvY2F0aW9uT2YoYWRkcmVzc09mTGlua0Z1bmN0aW9uQ2hlY2spLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKGZhc3RQYXRoQ2FsbCkp
OworCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRv
cikuY29kZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAvLyBnZXR0ZXI6IEVuY29kZWRKU1ZhbHVlICgqR2V0VmFsdWVG
dW5jKShFeGVjU3RhdGUqLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgICAgICAvLyBzZXR0ZXI6IHZvaWQgKCpQ
dXRWYWx1ZUZ1bmMpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBiYXNlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAg
ICAgICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsQ3VzdG9tR2V0dGVyKSB7CisgICAgICAgICAg
ICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoCisgICAgICAgICAgICAg
ICAgICAgICAgICBiYXNlRm9yQWNjZXNzR1BSLCBiYXNlRm9yR2V0R1BSLAorICAgICAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHByb3BlcnR5TmFtZS5pbXBs
KCkpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgaml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlRm9yQWNjZXNzR1BSLCBiYXNlRm9yR2V0R1BS
LCB2YWx1ZVJlZ3MuZ3ByKCkpOworI2Vsc2UKKyAgICAgICAgICAgICAgICBpZiAoa2luZCA9PSBD
YWxsQ3VzdG9tR2V0dGVyKSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICBiYXNlRm9yQWNjZXNzR1BS
LCBiYXNlRm9yR2V0R1BSLAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksCisgICAgICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIocHJvcGVydHlOYW1lLmltcGwoKSkpOworICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICBiYXNlRm9yQWNjZXNzR1BS
LCBiYXNlRm9yR2V0R1BSLAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksCisgICAgICAgICAgICAgICAgICAgICAgICB2
YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB2YWx1ZVJlZ3MudGFnR1BSKCkpOworICAgICAgICAgICAg
ICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgJnZtLT50b3BDYWxsRnJhbWUpOworCisgICAgICAgICAgICAgICAgb3Bl
cmF0aW9uQ2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ2Fs
bEN1c3RvbUdldHRlcikKKyAgICAgICAgICAgICAgICAgICAgaml0LnNldHVwUmVzdWx0cyh2YWx1
ZVJlZ3MpOworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBub0V4Y2VwdGlvbiA9
CisgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0RXhjZXB0aW9uQ2hlY2soQ0NhbGxIZWxwZXJz
OjpJbnZlcnRlZEV4Y2VwdGlvbkNoZWNrKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGppdC5zZXR1cEFyZ3VtZW50cyhDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodm0pLCBHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgaGFuZGxlckNhbGwgPSBq
aXQuY2FsbCgpOworICAgICAgICAgICAgICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBub0V4Y2VwdGlvbi5saW5rKCZqaXQpOwor
CisgICAgICAgICAgICAgICAgc3RhdGUuY2FsbGJhY2tzLmFwcGVuZCgKKyAgICAgICAgICAgICAg
ICAgICAgWyZdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBsaW5rQnVmZmVyLmxpbmsob3BlcmF0aW9uQ2FsbCwgRnVuY3Rpb25QdHIobV9yYXJlRGF0
YS0+Y3VzdG9tQWNjZXNzb3Iub3BhcXVlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5r
QnVmZmVyLmxpbmsoaGFuZGxlckNhbGwsIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpOworICAgICAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBzdGF0
ZS5zdWNjZWVkKCk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYXNlIFJlcGxhY2U6
IHsKKyAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG1fb2Zmc2V0KSkgeworICAgICAgICAgICAg
aml0LnN0b3JlVmFsdWUoCisgICAgICAgICAgICAgICAgdmFsdWVSZWdzLAorICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICAgICAgYmFzZUdQUiwK
KyAgICAgICAgICAgICAgICAgICAgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsK
KyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKG1fb2Zmc2V0KSAqIHNp
emVvZihKU1ZhbHVlKSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUoCisgICAgICAg
ICAgICAgICAgdmFsdWVSZWdzLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVz
cygKKyAgICAgICAgICAgICAgICAgICAgc2NyYXRjaEdQUjEsIG9mZnNldEluQnV0dGVyZmx5KG1f
b2Zmc2V0KSAqIHNpemVvZihKU1ZhbHVlKSkpOworICAgICAgICB9CisgICAgICAgIHN0YXRlLnN1
Y2NlZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNhc2UgVHJhbnNpdGlvbjog
eworICAgICAgICAvLyBBY2Nlc3NDYXNlOjp0cmFuc2l0aW9uKCkgc2hvdWxkIGhhdmUgcmV0dXJu
ZWQgbnVsbC4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3Rl
cnMgPj0gNiB8fCAhc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgfHwgc3RydWN0dXJl
KCktPm91dE9mTGluZUNhcGFjaXR5KCkgPT0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCghb2xkU3RydWN0dXJlLT5jb3VsZEhhdmVJ
bmRleGluZ0hlYWRlcigpKTsKKworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQ
YXRoOworCisgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1Yklu
Zm8ucGF0Y2gudXNlZFJlZ2lzdGVycyk7CisgICAgICAgIGFsbG9jYXRvci5sb2NrKGJhc2VHUFIp
OworICAgICAgICBhbGxvY2F0b3IubG9jayh2YWx1ZVJlZ3MpOworICAgICAgICBhbGxvY2F0b3Iu
bG9jayhzY3JhdGNoR1BSKTsKKworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjIgPSBhbGxvY2F0
b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMzsKKyAg
ICAgICAgaWYgKG5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IHN0cnVjdHVy
ZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpCisgICAgICAgICAgICAmJiBzdHJ1Y3R1cmUoKS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSkKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIzID0gYWxsb2NhdG9yLmFs
bG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzY3JhdGNoR1BS
MyA9IEludmFsaWRHUFJSZWc7CisKKyAgICAgICAgc2l6ZV90IG51bWJlck9mUGFkZGluZ0J5dGVz
ID0gYWxsb2NhdGUucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0KTsKKworICAg
ICAgICBBU1NFUlQoc3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbklu
dmFsaWRhdGVkKCkpOworCisgICAgICAgIGJvb2wgc2NyYXRjaEdQUkhhc1N0b3JhZ2UgPSBmYWxz
ZTsKKworICAgICAgICBpZiAobmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgIT0g
c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgICAgIHNpemVfdCBu
ZXdTaXplID0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNW
YWx1ZSk7CisgICAgICAgICAgICBDb3BpZWRBbGxvY2F0b3IqIGNvcGllZEFsbG9jYXRvciA9ICZ2
bS0+aGVhcC5zdG9yYWdlQWxsb2NhdG9yKCk7CisKKyAgICAgICAgICAgIGlmICghc3RydWN0dXJl
KCktPm91dE9mTGluZUNhcGFjaXR5KSB7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoJmNv
cGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
ICAgICAgICBzbG93UGF0aC5hcHBlbmQoCisgICAgICAgICAgICAgICAgICAgIGppdC5icmFuY2hT
dWJQdHIoCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlNpZ25lZCwgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobmV3U2l6ZSksIHNjcmF0Y2hHUFIpKTsKKyAgICAgICAg
ICAgICAgICBqaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgJmNvcGllZEFsbG9jYXRvci0+bV9jdXJy
ZW50UmVtYWluaW5nKTsKKyAgICAgICAgICAgICAgICBqaXQubmVnUHRyKHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6QWJzb2x1dGVBZGRyZXNzKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFBheWxvYWRF
bmQpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG9sZFN0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOworICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIzKTsKKyAgICAgICAgICAgICAgICBqaXQubG9h
ZFB0cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgaml0
LmJyYW5jaFN1YlB0cigKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6U2ln
bmVkLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRjaEdQUikpOwor
ICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCAmY29waWVkQWxsb2NhdG9y
LT5tX2N1cnJlbnRSZW1haW5pbmcpOworICAgICAgICAgICAgICAgIGppdC5uZWdQdHIoc2NyYXRj
aEdQUik7CisgICAgICAgICAgICAgICAgaml0LmFkZFB0cigKKyAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50
UGF5bG9hZEVuZCksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEpTVmFsdWUpKSwgc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBzY3JhdGNoR1BSID0gbmV3IHN0b3JhZ2UsIHNjcmF0
Y2hHUFIzID0gb2xkIHN0b3JhZ2UsCisgICAgICAgICAgICAgICAgLy8gc2NyYXRjaEdQUjIgPSBh
dmFpbGFibGUKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBvZmZzZXQgPSAwOyBvZmZzZXQg
PCBvbGRTaXplOyBvZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKSkgeworICAgICAgICAgICAgICAgICAg
ICBqaXQubG9hZFB0cigKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRk
cmVzcygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoR1BSMywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PigKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZv
aWQqKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgc2NyYXRjaEdQUjIpOworICAgICAgICAg
ICAgICAgICAgICBqaXQuc3RvcmVQdHIoCisgICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNo
R1BSMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoR1BSLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9mZnNldCArIHNpemVvZihKU1ZhbHVl
KSArIHNpemVvZih2b2lkKikpKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBqaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKGJzYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsKKyAgICAgICAgICAg
IHNjcmF0Y2hHUFJIYXNTdG9yYWdlID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHVpbnQz
Ml90IHN0cnVjdHVyZUJpdHMgPSBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHN0cnVjdHVyZS0+aWQo
KSk7CisgICAgICAgIGppdC5zdG9yZTMyKAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKHN0cnVjdHVyZUJpdHMpLAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTQ2VsbDpzdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CisKKyAgICAgICAgaWYg
KGlzSW5saW5lT2Zmc2V0KG1fb2Zmc2V0KSkgeworICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUo
CisgICAgICAgICAgICAgICAgdmFsdWVSZWdzLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICAgICAgYmFzZUdQUiwKKyAgICAgICAgICAgICAg
ICAgICAgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsKKyAgICAgICAgICAgICAg
ICAgICAgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKG1fb2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWUpKSkp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKCFzY3JhdGNoR1BSSGFzU3RvcmFn
ZSkKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAg
ICAgICBqaXQuc3RvcmVWYWx1ZSgKKyAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MsCisgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldEluQnV0dGVy
Zmx5KG1fb2Zmc2V0KSAqIHNpemVvZihKU1ZhbHVlKSkpOworICAgICAgICB9CisKKyAgICAgICAg
U2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IG51bGxwdHI7CisgICAgICAgIGlmIChuZXdT
dHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSkKKyAgICAgICAgICAgIHNjcmF0Y2hCdWZmZXIgPSB2bS0+c2NyYXRjaEJ1ZmZl
ckZvclNpemUoYWxsb2NhdG9yLmRlc2lyZWRTY3JhdGNoQnVmZmVyU2l6ZUZvckNhbGwoKSk7CisK
KyNpZiBFTkFCTEUoR0dDKQorICAgICAgICBpZiAobmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNh
cGFjaXR5KCkgIT0gc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKKyAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXI7CisgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGpp
dC5qdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihiYXNlR1BSKTsKKyAgICAgICAgICAgIFdyaXRl
QmFycmllckJ1ZmZlciYgd3JpdGVCYXJyaWVyQnVmZmVyID0gaml0LnZtKCktPmhlYXAud3JpdGVC
YXJyaWVyQnVmZmVyKCk7CisgICAgICAgICAgICBqaXQubG9hZDMyKHdyaXRlQmFycmllckJ1ZmZl
ci5jdXJyZW50SW5kZXhBZGRyZXNzKCksIHNjcmF0Y2hHUFIyKTsKKyAgICAgICAgICAgIENDYWxs
SGVscGVyczo6SnVtcCBuZWVkVG9GbHVzaCA9CisgICAgICAgICAgICAgICAgaml0LmJyYW5jaDMy
KAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgc2NyYXRj
aEdQUjIsCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHdy
aXRlQmFycmllckJ1ZmZlci5jYXBhY2l0eSgpKSk7CisKKyAgICAgICAgICAgIGppdC5hZGQzMihD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaEdQUjIpOworICAgICAgICAgICAg
aml0LnN0b3JlMzIoc2NyYXRjaEdQUjIsIHdyaXRlQmFycmllckJ1ZmZlci5jdXJyZW50SW5kZXhB
ZGRyZXNzKCkpOworCisgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIod3JpdGVCYXJyaWVyQnVmZmVyLmJ1ZmZlcigpKSwgc2NyYXRjaEdQUjEpOworICAgICAg
ICAgICAgLy8gV2UgdXNlIGFuIG9mZnNldCBvZiAtc2l6ZW9mKHZvaWQqKSBiZWNhdXNlIHdlIGFs
cmVhZHkgYWRkZWQgMSB0byBzY3JhdGNoR1BSMi4KKyAgICAgICAgICAgIGppdC5zdG9yZVB0cigK
KyAgICAgICAgICAgICAgICBiYXNlR1BSLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
QmFzZUluZGV4KAorICAgICAgICAgICAgICAgICAgICBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIs
IENDYWxsSGVscGVyczo6U2NhbGVQdHIsCisgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0
PGludDMyX3Q+KC1zaXplb2Yodm9pZCopKSkpOworCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
Okp1bXAgZG9uZVdpdGhCYXJyaWVyID0gaml0Lmp1bXAoKTsKKyAgICAgICAgICAgIG5lZWRUb0Zs
dXNoLmxpbmsoJmppdCk7CisKKyAgICAgICAgICAgIGFsbG9jYXRvci5wcmVzZXJ2ZVVzZWRSZWdp
c3RlcnNUb1NjcmF0Y2hCdWZmZXJGb3JDYWxsKGppdCwgc2NyYXRjaEJ1ZmZlciwgc2NyYXRjaEdQ
UjIpOworICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlR1BS
KTsKKyAgICAgICAgICAgIGNhbGxGbHVzaFdyaXRlQmFycmllckJ1ZmZlciA9IGppdC5jYWxsKCk7
CisgICAgICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVVzZWRSZWdpc3RlcnNGcm9tU2NyYXRjaEJ1
ZmZlckZvckNhbGwoCisgICAgICAgICAgICAgICAgaml0LCBzY3JhdGNoQnVmZmVyLCBzY3JhdGNo
R1BSMik7CisKKyAgICAgICAgICAgIGRvbmVXaXRoQmFycmllci5saW5rKCZqaXQpOworICAgICAg
ICAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKCZqaXQpOworCisgICAgICAgICAg
ICBzdGF0ZS5jYWxsYmFja3MuYXBwZW5kKAorICAgICAgICAgICAgICAgIFsmXSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2Fs
bEZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyLCBvcGVyYXRpb25GbHVzaFdyaXRlQmFycmllckJ1ZmZl
cik7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoR0dD
KQorICAgICAgICAKKyAgICAgICAgc3RhdGUuc3VjY2VlZCgpOworCisgICAgICAgIGlmIChuZXdT
dHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSkgeworICAgICAgICAgICAgc2xvd1BhdGgubGluaygmaml0KTsKKyAgICAgICAg
ICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgbnVtYmVy
T2ZQYWRkaW5nQnl0ZXMpOworICAgICAgICAgICAgYWxsb2NhdG9yLnByZXNlcnZlVXNlZFJlZ2lz
dGVyc1RvU2NyYXRjaEJ1ZmZlckZvckNhbGwoaml0LCBzY3JhdGNoQnVmZmVyLCBzY3JhdGNoR1BS
KTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZSgKKyAgICAgICAgICAgICAgICBiYXNlR1BSLAorICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLAorICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNsb3QuY2FjaGVkT2Zmc2V0KCkpLAorICAgICAgICAg
ICAgICAgIHZhbHVlR1BSKTsKKyNlbHNlCisgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKAorICAgICAgICAgICAgICAgIGJhc2VHUFIsCisgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksCisgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2xvdC5jYWNoZWRPZmZzZXQoKSksCisgICAgICAg
ICAgICAgICAgdmFsdWVHUFIsIHZhbHVlVGFnR1BSKTsKKyNlbmRpZgorICAgICAgICAgICAgb3Bl
cmF0aW9uQ2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVVz
ZWRSZWdpc3RlcnNGcm9tU2NyYXRjaEJ1ZmZlckZvckNhbGwoamksIHNjcmF0Y2hCdWZmZXIsIHNj
cmF0Y2hHUFIpOworICAgICAgICAgICAgc3RhdGUuc3VjY2VlZCgpOworCisgICAgICAgICAgICBz
dGF0ZS5jYWxsYmFja3MuYXBwZW5kKAorICAgICAgICAgICAgICAgIFsmXSAoTGlua0J1ZmZlciYg
bGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsob3BlcmF0
aW9uQ2FsbCwgb3BlcmF0aW9uUmVhbGxvY2F0ZVN0b3JhZ2VBbmRGaW5pc2hQdXQpOworICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBj
YXNlIEFycmF5TGVuZ3RoOiB7CisgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRk
cmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJy
YXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBzdGF0ZS5m
YWlsQW5kSWdub3JlLmFwcGVuZCgKKyAgICAgICAgICAgIGppdC5icmFuY2gzMihDQ2FsbEhlbHBl
cnM6Okxlc3NUaGFuLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSkp
OworICAgICAgICBqaXQuYm94SW50MzIoc2NyYXRjaEdQUiwgdmFsdWVSZWdzKTsKKyAgICAgICAg
c3RhdGUuc3VjY2VlZCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2FzZSBTdHJp
bmdMZW5ndGg6IHsKKyAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNTdHJpbmc6Om9mZnNldE9mTGVuZ3RoKCkpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigp
KTsKKyAgICAgICAgaml0LmJveEludDMyKHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHZhbHVlUmVn
cyk7CisgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0gfQog
ICAgIAotICAgIG1fbGlzdC5hcHBlbmQoR2V0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJ
bmZvKHN0dWJJbmZvKSk7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAot
UG9seW1vcnBoaWNHZXRCeUlkTGlzdCogUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6ZnJvbShTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCitQb2x5bW9ycGhpY0FjY2Vzczo6UG9seW1vcnBoaWNB
Y2Nlc3MoKSB7IH0KK1BvbHltb3JwaGljQWNjZXNzOjp+UG9seW1vcnBoaWNBY2Nlc3MoKSB7IH0K
KworTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIFBvbHltb3JwaGljQWNjZXNzOjpyZWdlbmVyYXRlV2l0
aENhc2VzKAorICAgIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbywgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsCisgICAgVmVjdG9yPHN0ZDo6
dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPj4gbmV3QWNjZXNzZXMpCiB7Ci0gICAgaWYgKHN0dWJJbmZv
LmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9saXN0KQotICAgICAgICByZXR1cm4gc3R1
YkluZm8udS5nZXRCeUlkTGlzdC5saXN0OwotICAgIAotICAgIEFTU0VSVCgKLSAgICAgICAgc3R1
YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYKLSAgICAgICAgfHwgc3R1
YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpOwotICAgIAotICAgIFBvbHltb3JwaGlj
R2V0QnlJZExpc3QqIHJlc3VsdCA9IG5ldyBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KHN0dWJJbmZv
KTsKKyAgICBWZWN0b3I8QWNjZXNzQ2FzZSo+IG5ld0FjY2Vzc1B0cnMobmV3QWNjZXNzZXMuc2l6
ZSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdBY2Nlc3Nlcy5zaXplKCk7IGktLTspIHsK
KyAgICAgICAgQWNjZXNzQ2FzZSogYWNjZXNzQ2FzZSA9IG5ld0FjY2Vzc2VzW2ldLmdldCgpOwor
ICAgICAgICBpZiAoYWNjZXNzQ2FzZS0+ZG9lc0NhbGxzKCkgJiYgc3R1YkluZm8ucGF0Y2guc3Bp
bGxNb2RlID09IE5lZWRUb1NwaWxsKQorICAgICAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cigpOworICAgICAgICBuZXdBY2Nlc3NQdHJzW2ldID0gYWNjZXNzQ2FzZTsKKyAgICB9
CiAgICAgCi0gICAgc3R1YkluZm8uaW5pdEdldEJ5SWRMaXN0KHJlc3VsdCk7CisgICAgVmVjdG9y
PHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPj4gcmVwbGFjZWQ7CisgICAgZm9yIChhdXRvJiBl
bnRyeSA6IG5ld0FjY2Vzc2VzKQorICAgICAgICBhZGRBY2Nlc3NDYXNlKHN0ZDo6bW92ZShlbnRy
eSksIHJlcGxhY2VkKTsKICAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotfQorICAgIGlmIChtX2xp
c3Quc2l6ZSgpID4gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKSB7CisgICAgICAgIHVuZG9B
ZGRBY2Nlc3NDYXNlKG5ld0FjY2Vzc1B0cnMsIHN0ZDo6bW92ZShyZXBsYWNlZCkpOworICAgICAg
ICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7CisgICAgfQogCi1Qb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0Ojp+UG9seW1vcnBoaWNHZXRCeUlkTGlzdCgpIHsgfQorICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0ciByZXN1bHQgPSByZWdlbmVyYXRlKHZtLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBp
ZGVudCk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgdW5kb0FkZEFjY2Vzc0Nhc2UobmV3
QWNjZXNzUHRycywgc3RkOjptb3ZlKHJlcGxhY2VkKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIoKTsKKyAgICB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBQb2x5bW9y
cGhpY0dldEJ5SWRMaXN0OjpjdXJyZW50U2xvd1BhdGhUYXJnZXQoCi0gICAgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvKSBjb25zdAotewotICAgIGlmIChpc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybiBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5w
YXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKLSAgICByZXR1cm4gbV9saXN0Lmxhc3QoKS5zdHVi
Um91dGluZSgpLT5jb2RlKCkuY29kZSgpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQg
UG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6YWRkQWNjZXNzKGNvbnN0IEdldEJ5SWRBY2Nlc3MmIGFj
Y2VzcykKK01hY3JvQXNzZW1ibGVyQ29kZVB0ciBQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0
ZVdpdGhDYXNlKAorICAgIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbywgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsCisgICAgc3RkOjp1bmlx
dWVfcHRyPEFjY2Vzc0Nhc2U+IG5ld0FjY2VzcykKIHsKLSAgICBBU1NFUlQoIWlzRnVsbCgpKTsK
LSAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgcmVzaXppbmcgb3B0aW1pemVzIGZvciBzcGFjZSwg
bm90IHRpbWUuCi0gICAgbV9saXN0LnJlc2l6ZVRvRml0KG1fbGlzdC5zaXplKCkgKyAxKTsKLSAg
ICBtX2xpc3QubGFzdCgpID0gYWNjZXNzOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QWNj
ZXNzQ2FzZT4+IG5ld0FjY2Vzc2VzOworICAgIG5ld0FjY2Vzc2VzLmFwcGVuZChzdGQ6Om1vdmUo
bmV3QWNjZXNzKSk7CisgICAgcmV0dXJuIHJlZ2VuZXJhdGVXaXRoQ2FzZXModm0sIGNvZGVCbG9j
aywgc3R1YkluZm8sIGlkZW50LCBuZXdBY2Nlc3Nlcyk7CiB9CiAKLWJvb2wgUG9seW1vcnBoaWNH
ZXRCeUlkTGlzdDo6aXNGdWxsKCkgY29uc3QKK2Jvb2wgUG9seW1vcnBoaWNBY2Nlc3M6OmlzRnVs
bCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKHNpemUoKSA8PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hF
X1NJWkUpOwogICAgIHJldHVybiBzaXplKCkgPT0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpF
OwogfQogCi1ib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmlzQWxtb3N0RnVsbCgpIGNvbnN0
Citib29sIFBvbHltb3JwaGljQWNjZXNzOjppc0FsbW9zdEZ1bGwoKSBjb25zdAogewogICAgIEFT
U0VSVChzaXplKCkgPD0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKTsKICAgICByZXR1cm4g
c2l6ZSgpID49IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDE7CiB9CiAKLWJvb2wgUG9s
eW1vcnBoaWNHZXRCeUlkTGlzdDo6ZGlkU2VsZlBhdGNoaW5nKCkgY29uc3QKK2Jvb2wgUG9seW1v
cnBoaWNBY2Nlc3M6OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0CiB7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIGlmIChhdChpKS50eXBlKCkgPT0gR2V0QnlJ
ZEFjY2Vzczo6U2ltcGxlSW5saW5lKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICghYXQoaSku
dmlzaXRXZWFrKHZtKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgcmV0
dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFBvbHltb3JwaGljR2V0QnlJ
ZExpc3Q6OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0Cit2b2lkIFBvbHltb3JwaGljQWNjZXNzOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gc2l6
ZSgpOyBpLS07KSB7Ci0gICAgICAgIGlmICghYXQoaSkudmlzaXRXZWFrKHZtKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBvdXQucHJpbnQoUmF3UG9pbnRlcih0aGlzKSwgIjpbIik7
CisgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2xpc3Qp
CisgICAgICAgIG91dC5wcmludChjb21tYSwgKmVudHJ5KTsKKyAgICBvdXQucHJpbnQoIl0iKTsK
K30KKworVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPj4KK1BvbHltb3JwaGljQWNj
ZXNzOjphZGRBY2Nlc3NDYXNlKHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBhY2Nlc3MpCit7
CisgICAgQVNTRVJUKCFpc0Z1bGwoKSk7CisKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFj
Y2Vzc0Nhc2U+PiByZXBsYWNlZDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9saXN0
LnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChhY2Nlc3MuY2FuUmVwbGFjZSgqbV9saXN0W2ld
KSkgeworICAgICAgICAgICAgcmVwbGFjZWQuYXBwZW5kKHN0ZDo6bW92ZShtX2xpc3RbaV0pKTsK
KyAgICAgICAgICAgIG1fbGlzdFtpLS1dID0gc3RkOjptb3ZlKG1fbGlzdC5sYXN0KCkpOworICAg
ICAgICAgICAgbV9saXN0LnRha2VMYXN0KCk7CisgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJu
IHRydWU7CisgICAgCisgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHJlc2l6aW5nIG9wdGltaXpl
cyBmb3Igc3BhY2UsIG5vdCB0aW1lLgorICAgIG1fbGlzdC5yZXNpemVUb0ZpdChtX2xpc3Quc2l6
ZSgpICsgMSk7CisgICAgbV9saXN0Lmxhc3QoKSA9IGFjY2VzczsKKyAgICByZXR1cm4gcmVwbGFj
ZWQ7Cit9CisKK3ZvaWQgUG9seW1vcnBoaWNBY2Nlc3M6OnVuZG9BZGRBY2Nlc3NDYXNlKAorICAg
IGNvbnN0IFZlY3RvcjxBY2Nlc3NDYXNlKj4mIHRvUmVtb3ZlLCBWZWN0b3I8c3RkOjp1bmlxdWVf
cHRyPEFjY2Vzc0Nhc2U+PiByZXBsYWNlZCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9saXN0LnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICh0b1JlbW92ZS5jb250YWlucyht
X2xpc3RbaV0uZ2V0KCkpKSB7CisgICAgICAgICAgICBtX2xpc3RbaS0tXSA9IHN0ZDo6bW92ZSht
X2xpc3QubGFzdCgpKTsKKyAgICAgICAgICAgIG1fbGlzdC50YWtlTGFzdCgpOworICAgICAgICB9
CisgICAgfQorCisgICAgZm9yIChhdXRvJiBlbnRyeSA6IHJlcGxhY2VkKQorICAgICAgICBtX2xp
c3QuYXBwZW5kKHN0ZDo6bW92ZShlbnRyeSkpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVQdHIg
UG9seW1vcnBoaWNBY2Nlc3M6OnJlZ2VuZXJhdGUoCisgICAgVk0mIHZtLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudCkKK3sKKyAgICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUgc3RhdGU7CisKKyAgICBzdGF0ZS5h
Y2Nlc3MgPSB0aGlzOworICAgIHN0YXRlLnN0dWJJbmZvID0gJnN0dWJJbmZvOworICAgIHN0YXRl
LmlkZW50ID0gJmlkZW50OworICAgIAorICAgIHN0YXRlLmJhc2VHUFIgPSBzdGF0aWNfY2FzdDxH
UFJSZWc+KHN0dWJJbmZvLnBhdGNoLmJhc2VHUFIpOworICAgIHN0YXRlLnZhbHVlUmVncyA9IEpT
VmFsdWVSZWdzKAorI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIHN0YXRpY19jYXN0PEdQ
UlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVUYWdHUFIpLAorI2VuZGlmCisgICAgICAgIHN0YXRp
Y19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVHUFIpKTsKKworICAgIFNjcmF0Y2hS
ZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1YkluZm8ucGF0aGMudXNlZFJlZ2lzdGVycyk7
CisgICAgc3RhdGUuYWxsb2NhdG9yID0gJmFsbG9jYXRvcjsKKyAgICBhbGxvY2F0b3IubG9jayhz
dGF0ZS5iYXNlR1BSKTsKKyAgICBhbGxvY2F0b3IubG9jayhzdGF0ZS52YWx1ZVJlZ3MpOworCisg
ICAgc3RhdGUuc2NyYXRjaEdQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAg
ICAKKyAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSwgY29kZUJsb2NrKTsKKyAgICBzdGF0ZS5qaXQg
PSAmaml0OworCisgICAgc3RhdGUubnVtYmVyT2ZQYWRkaW5nQnl0ZXMgPSBhbGxvY2F0b3IucHJl
c2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0KTsKKworICAgIGJvb2wgYWxsR3VhcmRl
ZEJ5U3RydWN0dXJlQ2hlY2sgPSB0cnVlOworICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2xpc3Qp
CisgICAgICAgIGFsbEd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrICY9IGVudHJ5LT5ndWFyZGVkQnlT
dHJ1Y3R1cmVDaGVjaygpOworCisgICAgaWYgKCFzaXplKCkpIHsKKyAgICAgICAgLy8gVGhpcyBp
cyBzdXBlciB1bmxpa2VseSwgYnV0IHdlIG1ha2UgaXQgbGVnYWwgYW55d2F5LgorICAgICAgICBz
dGF0ZS5mYWlsQW5kUmVwYXRjaC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgfSBlbHNlIGlmICgh
YWxsR3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2sgfHwgc2l6ZSgpID09IDEpIHsKKyAgICAgICAgLy8g
SWYgdGhlcmUgYXJlIGFueSBwcm94aWVzIGluIHRoZSBsaXN0LCB3ZSBjYW5ub3QganVzdCB1c2Ug
YSBiaW5hcnkgc3dpdGNoIG92ZXIgdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgLy8gV2UgbmVlZCB0
byByZXNvcnQgdG8gYSBjYXNjYWRlLiBBIGNhc2NhZGUgYWxzbyBoYXBwZW5zIHRvIGJlIG9wdGlt
YWwgaWYgd2Ugb25seSBoYXZlIGp1c3QKKyAgICAgICAgLy8gb25lIGNhc2UuCisgICAgICAgIEND
YWxsSGVscGVyczo6SnVtcExpc3QgZmFsbFRocm91Z2g7CisKKyAgICAgICAgLy8gQ2FzY2FkZSB0
aHJvdWdoIHRoZSBsaXN0LCBwcmVmZXJyaW5nIG5ld2VyIGVudHJpZXMuCisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IG1fbGlzdC5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIGZhbGxUaHJv
dWdoLmxpbmsoJmppdCk7CisgICAgICAgICAgICBtX2xpc3RbaV0tPmdlbmVyYXRlV2l0aEd1YXJk
KHN0YXRlLCBmYWxsVGhyb3VnaCk7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGUuZmFpbEFuZFJl
cGF0Y2guYXBwZW5kKGZhbGxUaHJvdWdoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBqaXQubG9h
ZDMyKAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0YXRlLmJhc2VHUFIsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCisgICAgICAgICAgICBzdGF0ZS5zY3JhdGNoR1BS
KTsKKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxpbnQ2NF90PiBjYXNlVmFsdWVzKG1fbGlzdC5z
aXplKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9saXN0LnNpemUoKTsg
KytpKQorICAgICAgICAgICAgY2FzZVZhbHVlc1tpXSA9IGJpdHdpc2VfY2FzdDxpbnQzMl90Piht
X2xpc3RbaV0tPnN0cnVjdHVyZSgpKTsKKyAgICAgICAgCisgICAgICAgIEJpbmFyeVN3aXRjaCBi
aW5hcnlTd2l0Y2goc3RhdGUuc2NyYXRjaEdQUiwgY2FzZVZhbHVlcywgQmluYXJ5U3dpdGNoOjpJ
bnQzMik7CisgICAgICAgIHdoaWxlIChiaW5hcnlTd2l0Y2guYWR2YW5jZShqaXQpKSB7CisgICAg
ICAgICAgICBHZXRCeUlkQ2FzZSYgZ2V0Q2FzZSA9IGF0KGJpbmFyeVN3aXRjaC5jYXNlSW5kZXgo
KSk7CisgICAgICAgICAgICBnZXRDYXNlLmdlbmVyYXRlKHN0YXRlKTsKKyAgICAgICAgfQorICAg
ICAgICBzdGF0ZS5mYWlsQW5kUmVwYXRjaC5hcHBlbmQoYmluYXJ5U3dpdGNoLmZhbGxUaHJvdWdo
KCkpOworICAgIH0KKworICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUubGluaygmaml0KTsKKworICAg
IC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBpbmxpbmUgY2FjaGUgb3B0aW1pemF0aW9uIGNvZGUga25v
d3MgdGhhdCB3ZSBhcmUgdGFraW5nIHNsb3cgcGF0aCBiZWNhdXNlCisgICAgLy8gb2Ygc29tZXRo
aW5nIHRoYXQgaXNuJ3QgcGF0Y2hhYmxlLiAic2VlbiIgYmVpbmcgZmFsc2UgbWVhbnMgdGhhdCB3
ZSBieXBhc3MgcGF0Y2hpbmcuIFRoaXMgaXMKKyAgICAvLyBwcmV0dHkgZ3Jvc3MgYnV0IGl0IG1l
YW5zIHRoYXQgd2UgZG9uJ3QgbmVlZCB0byBoYXZlIHR3byBzbG93IHBhdGggZW50cnlwb2ludHMg
LSBvbmUgZm9yCisgICAgLy8gcGF0Y2hpbmcgYW5kIG9uZSBmb3Igbm9ybWFsIHNsb3cgc3R1ZmYu
CisgICAgaml0LnN0b3JlOChUcnVzdGVkSW1tMzIoZmFsc2UpLCAmc3R1YkluZm8uc2Vlbik7CisK
KyAgICBzdGF0ZS5mYWlsQW5kUmVwYXRjaC5saW5rKCZqaXQpOworICAgIAorICAgIHN0YXRlLnJl
c3RvcmVTY3JhdGNoKCk7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBmYWlsdXJlID0gaml0
Lmp1bXAoKTsKKworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcih2bSwgaml0LCBjb2RlQmxvY2ss
IEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgaWYgKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxs
b2NhdGUoKSkKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOworCisgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHN1Y2Nlc3NMYWJlbCA9CisgICAgICAgIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRv
RG9uZSk7CisgICAgICAgIAorICAgIGxpbmtCdWZmZXIubGluayhzdGF0ZS5zdWNjZXNzLCBzdWNj
ZXNzTGFiZWwpOworCisgICAgbGlua0J1ZmZlci5saW5rKAorICAgICAgICBmYWlsdXJlLAorICAg
ICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5w
YXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7CisgICAgCisgICAgZm9yIChhdXRvIGNhbGxiYWNr
IDogc3RhdGUuY2FsbGJhY2tzKQorICAgICAgICBjYWxsYmFjayhsaW5rQnVmZmVyKTsKKyAgICAK
KyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZSA9IEZJTkFMSVpFX0NPREVfRk9SKAorICAg
ICAgICBjb2RlQkxvY2ssIGxpbmtCdWZmZXIsCisgICAgICAgICgiJXMiLCB0b0NTdHJpbmcoIkdl
dCBhY2Nlc3Mgc3R1YiBmb3IgIiwgKmNvZGVCbG9jaywgIiAiLCBzdHViSW5mby5jb2RlT3JpZ2lu
LCAiIHdpdGggcmV0dXJuIHBvaW50ICIsIHN1Y2Nlc3NMYWJlbCwgIjogIiwgKnRoaXMpKSk7CisK
KyAgICBib29sIGRvZXNDYWxscyA9IGZhbHNlOworICAgIGZvciAoYXV0byBlbnRyeSA6IG1fbGlz
dCkKKyAgICAgICAgZG9lc0NhbGxzIHw9IGVudHJ5LT5kb2VzQ2FsbHMoKTsKKyAgICAKKyAgICBt
X3N0dWJSb3V0aW5lID0gY3JlYXRlSklUU3R1YlJvdXRpbmUoY29kZSwgdm0sIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksIGRvZXNDYWxscyk7CisgICAgbV93YXRjaHBvaW50cyA9IHN0ZDo6
bW92ZShzdGF0ZS53YXRjaHBvaW50cyk7CisgICAgcmV0dXJuIGNvZGUuY29kZSgpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKIAorbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBK
U0M7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBY2Nlc3NDYXNlOjpB
Y2Nlc3NUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBBY2Nlc3ND
YXNlOjpMb2FkOgorICAgICAgICBvdXQucHJpbnQoIkxvYWQiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgQWNjZXNzQ2FzZTo6VHJhbnNpdGlvbjoKKyAgICAgICAgb3V0LnByaW50KCJUcmFu
c2l0aW9uIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OlJlcGxhY2U6
CisgICAgICAgIG91dC5wcmludCgiUmVwbGFjZSIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBBY2Nlc3NDYXNlOjpNaXNzOgorICAgICAgICBvdXQucHJpbnQoIk1pc3MiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6R2V0dGVyOgorICAgICAgICBvdXQucHJpbnQo
IkdldHRlciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpTZXR0ZXI6
CisgICAgICAgIG91dC5wcmludCgiU2V0dGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEFjY2Vzc0Nhc2U6OkN1c3RvbUdldHRlcjoKKyAgICAgICAgb3V0LnByaW50KCJDdXN0b21HZXR0
ZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6Q3VzdG9tU2V0dGVy
OgorICAgICAgICBvdXQucHJpbnQoIkN1c3RvbVNldHRlciIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBBY2Nlc3NDYXNlOjpJbkhpdDoKKyAgICAgICAgb3V0LnByaW50KCJJbkhpdCIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbk1pc3M6CisgICAgICAgIG91
dC5wcmludCgiSW5NaXNzIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6
OkFycmF5TGVuZ3RoOgorICAgICAgICBvdXQucHJpbnQoIkFycmF5TGVuZ3RoIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OlN0cmluZ0xlbmd0aDoKKyAgICAgICAgb3V0
LnByaW50KCJTdHJpbmdMZW5ndGgiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCiAj
ZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAkocmV2aXNpb24gMTg5MzI0KQkoZnJv
bSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5o
OjE4OTMyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUG9seW1vcnBoaWNH
ZXRCeUlkTGlzdF9oCisjZGVmaW5lIFBvbHltb3JwaGljR2V0QnlJZExpc3RfaAorCisjaWYgRU5B
QkxFKEpJVCkKKworI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJNYWNyb0Fzc2Vt
Ymxlci5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiCisjaW5jbHVk
ZSAiT3Bjb2RlLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ29kZUJsb2NrOworc3RydWN0IFN0cnVj
dHVyZVN0dWJJbmZvOworCitjbGFzcyBHZXRCeUlkQWNjZXNzIHsKK3B1YmxpYzoKKyAgICBlbnVt
IEFjY2Vzc1R5cGUgeworICAgICAgICBJbnZhbGlkLAorICAgICAgICBTaW1wbGVJbmxpbmUsIC8v
IFRoaXMgaXMgdGhlIHBhdGNoZWQgaW5saW5lIGFjY2Vzcy4KKyAgICAgICAgU2ltcGxlU3R1Yiwg
Ly8gVGhpcyBpcyBhIHN0dWIuCisgICAgICAgIFdhdGNoZWRTdHViLAorICAgICAgICBHZXR0ZXIs
CisgICAgICAgIEN1c3RvbUdldHRlciwKKyAgICAgICAgU2ltcGxlTWlzcywKKyAgICB9OworICAg
IAorICAgIEdldEJ5SWRBY2Nlc3MoKQorICAgICAgICA6IG1fdHlwZShJbnZhbGlkKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgR2V0QnlJZEFjY2VzcygKKyAgICAgICAgVk0mLCBKU0NlbGwqIG93
bmVyLCBBY2Nlc3NUeXBlLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiwgU3RydWN0dXJlKiwK
KyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQoKSk7CisgICAgCisgICAgfkdldEJ5SWRBY2Nlc3MoKTsKKyAgICAKKyAg
ICBzdGF0aWMgR2V0QnlJZEFjY2VzcyBmcm9tU3RydWN0dXJlU3R1YkluZm8oU3RydWN0dXJlU3R1
YkluZm8mKTsKKyAgICAKKyAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV90eXBlICE9
IEludmFsaWQ7IH0KKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgp
OyB9CisgICAgCisgICAgQWNjZXNzVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9
CisgICAgCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVj
dHVyZS5nZXQoKTsgfQorICAgIAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
JiBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQorICAgIAor
ICAgIEpJVFN0dWJSb3V0aW5lKiBzdHViUm91dGluZSgpIGNvbnN0CisgICAgeworICAgICAgICBB
U1NFUlQoaXNTZXQoKSk7CisgICAgICAgIHJldHVybiBtX3N0dWJSb3V0aW5lLmdldCgpOworICAg
IH0KKyAgICAKKyAgICBib29sIGRvZXNDYWxscygpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBH
ZXR0ZXIgfHwgdHlwZSgpID09IEN1c3RvbUdldHRlcjsgfQorICAgIAorICAgIGJvb2wgdmlzaXRX
ZWFrKFZNJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsK
KyAgICAKKyAgICBBY2Nlc3NUeXBlIG1fdHlwZTsKKyAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJl
PiBtX3N0cnVjdHVyZTsKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlv
blNldDsKKyAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IG1fc3R1YlJvdXRpbmU7Cit9OworCitj
bGFzcyBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKK3B1YmxpYzoKKyAgICAvLyBFaXRoZXIgY3JlYXRlcyBhIG5ldyBwb2x5bW9ycGhpYyBnZXQg
bGlzdCwgb3IgcmV0dXJucyB0aGUgb25lIHRoYXQgaXMgYWxyZWFkeSBpbgorICAgIC8vIHBsYWNl
LgorICAgIHN0YXRpYyBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBmcm9tKFN0cnVjdHVyZVN0dWJJ
bmZvJik7CisgICAgCisgICAgflBvbHltb3JwaGljR2V0QnlJZExpc3QoKTsKKyAgICAKKyAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIgY3VycmVudFNsb3dQYXRoVGFyZ2V0KFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbykgY29uc3Q7CisgICAgCisgICAgdm9pZCBhZGRBY2Nlc3MoY29uc3QgR2V0
QnlJZEFjY2VzcyYpOworICAgIAorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1f
bGlzdC5pc0VtcHR5KCk7IH0KKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9s
aXN0LnNpemUoKTsgfQorICAgIGJvb2wgaXNGdWxsKCkgY29uc3Q7CisgICAgYm9vbCBpc0FsbW9z
dEZ1bGwoKSBjb25zdDsgLy8gVHJ1ZSBpZiBhZGRpbmcgYW4gZWxlbWVudCB3b3VsZCBtYWtlIGlz
RnVsbCgpIHRydWUuCisgICAgY29uc3QgR2V0QnlJZEFjY2VzcyYgYXQodW5zaWduZWQgaSkgY29u
c3QgeyByZXR1cm4gbV9saXN0W2ldOyB9CisgICAgY29uc3QgR2V0QnlJZEFjY2VzcyYgb3BlcmF0
b3JbXSh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2xpc3RbaV07IH0KKyAgICAKKyAgICBi
b29sIGRpZFNlbGZQYXRjaGluZygpIGNvbnN0OyAvLyBBcmUgYW55IG9mIHRoZSBhY2Nlc3NlcyBT
aW1wbGVJbmxpbmU/CisgICAgCisgICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25zdDsKKworcHJp
dmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOworICAgIAorICAgIFBvbHltb3JwaGlj
R2V0QnlJZExpc3QoU3RydWN0dXJlU3R1YkluZm8mKTsKKyAgICAKKyAgICBWZWN0b3I8R2V0QnlJ
ZEFjY2VzcywgMj4gbV9saXN0OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAv
LyBFTkFCTEUoSklUKQorCisjZW5kaWYgLy8gUG9seW1vcnBoaWNHZXRCeUlkTGlzdF9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5oCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seW1vcnBoaWNBY2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsOCArMjMsOCBAQAogICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0X2gKLSNk
ZWZpbmUgUG9seW1vcnBoaWNHZXRCeUlkTGlzdF9oCisjaWZuZGVmIFBvbHltb3JwaGljQWNjZXNz
X2gKKyNkZWZpbmUgUG9seW1vcnBoaWNBY2Nlc3NfaAogCiAjaWYgRU5BQkxFKEpJVCkKIApAQCAt
MzgsOTYgKzM4LDI0NyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENvZGVCbG9jazsKK2Ns
YXNzIFBvbHltb3JwaGljQWNjZXNzOwogc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvOwogCi1jbGFz
cyBHZXRCeUlkQWNjZXNzIHsKK3N0cnVjdCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU7CisKK2NsYXNz
IEFjY2Vzc0Nhc2UgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEFjY2Vzc0Nhc2UpOworICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIGVudW0gQWNjZXNzVHlwZSB7
Ci0gICAgICAgIEludmFsaWQsCi0gICAgICAgIFNpbXBsZUlubGluZSwgLy8gVGhpcyBpcyB0aGUg
cGF0Y2hlZCBpbmxpbmUgYWNjZXNzLgotICAgICAgICBTaW1wbGVTdHViLCAvLyBUaGlzIGlzIGEg
c3R1Yi4KLSAgICAgICAgV2F0Y2hlZFN0dWIsCisgICAgICAgIExvYWQsCisgICAgICAgIFRyYW5z
aXRpb24sCisgICAgICAgIFJlcGxhY2UsCisgICAgICAgIE1pc3MsCiAgICAgICAgIEdldHRlciwK
KyAgICAgICAgU2V0dGVyLAogICAgICAgICBDdXN0b21HZXR0ZXIsCi0gICAgICAgIFNpbXBsZU1p
c3MsCisgICAgICAgIEN1c3RvbVNldHRlciwKKyAgICAgICAgSW5IaXQsCisgICAgICAgIEluTWlz
cywKKyAgICAgICAgQXJyYXlMZW5ndGgsCisgICAgICAgIFN0cmluZ0xlbmd0aAogICAgIH07Ci0g
ICAgCi0gICAgR2V0QnlJZEFjY2VzcygpCi0gICAgICAgIDogbV90eXBlKEludmFsaWQpCisKKyAg
ICBzdGF0aWMgYm9vbCBpc0dldChBY2Nlc3NUeXBlIHR5cGUpCiAgICAgeworICAgICAgICBzd2l0
Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBJbnZhbGlkOgorICAgICAgICBjYXNlIFRyYW5zaXRp
b246CisgICAgICAgIGNhc2UgUmVwbGFjZToKKyAgICAgICAgY2FzZSBTZXR0ZXI6CisgICAgICAg
IGNhc2UgQ3VzdG9tU2V0dGVyOgorICAgICAgICBjYXNlIEluSGl0OgorICAgICAgICBjYXNlIElu
TWlzczoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBMb2FkOgorICAg
ICAgICBjYXNlIE1pc3M6CisgICAgICAgIGNhc2UgR2V0dGVyOgorICAgICAgICBjYXNlIEN1c3Rv
bUdldHRlcjoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CiAgICAgfQotICAg
IAotICAgIEdldEJ5SWRBY2Nlc3MoCi0gICAgICAgIFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNz
VHlwZSwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4sIFN0cnVjdHVyZSosCisKKyAgICBzdGF0
aWMgYm9vbCBpc1B1dChBY2Nlc3NUeXBlIHR5cGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5
cGUpIHsKKyAgICAgICAgY2FzZSBJbnZhbGlkOgorICAgICAgICBjYXNlIExvYWQ6CisgICAgICAg
IGNhc2UgTWlzczoKKyAgICAgICAgY2FzZSBHZXR0ZXI6CisgICAgICAgIGNhc2UgQ3VzdG9tR2V0
dGVyOgorICAgICAgICBjYXNlIEluSGl0OgorICAgICAgICBjYXNlIEluTWlzczoKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBUcmFuc2l0aW9uOgorICAgICAgICBjYXNl
IFJlcGxhY2U6CisgICAgICAgIGNhc2UgU2V0dGVyOgorICAgICAgICBjYXNlIEN1c3RvbVNldHRl
cjoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgc3Rh
dGljIGJvb2wgaXNJbihBY2Nlc3NUeXBlIHR5cGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5
cGUpIHsKKyAgICAgICAgY2FzZSBJbnZhbGlkOgorICAgICAgICBjYXNlIExvYWQ6CisgICAgICAg
IGNhc2UgTWlzczoKKyAgICAgICAgY2FzZSBHZXR0ZXI6CisgICAgICAgIGNhc2UgQ3VzdG9tR2V0
dGVyOgorICAgICAgICBjYXNlIFRyYW5zaXRpb246CisgICAgICAgIGNhc2UgUmVwbGFjZToKKyAg
ICAgICAgY2FzZSBTZXR0ZXI6CisgICAgICAgIGNhc2UgQ3VzdG9tU2V0dGVyOgorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIEluSGl0OgorICAgICAgICBjYXNlIEluTWlz
czoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGdldCgKKyAgICAgICAgVk0mLCBKU0NlbGwqIG93bmVy
LCBBY2Nlc3NUeXBlLCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJlKiwKKyAgICAgICAgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQo
KSwKKyAgICAgICAgYm9vbCB2aWFQcm94eSA9IGZhbHNlLAorICAgICAgICBXYXRjaHBvaW50U2V0
KiBhZGRpdGlvbmFsU2V0ID0gbnVsbHB0ciwKKyAgICAgICAgUHJvcGVydHlTbG90OjpHZXRWYWx1
ZUZ1bmMgPSBudWxscHRyKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXBs
YWNlKAorICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+
IHRyYW5zaXRpb24oCisgICAgICAgIFZNJiwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBvbGRT
dHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQs
CiAgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiA9IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0KCkpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHNl
dHRlcigKKyAgICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBTdHJ1Y3R1cmUq
LCBQcm9wZXJ0eU9mZnNldCwKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQmLCBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyk7CisKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8QWNjZXNzQ2FzZT4gaW4oCisgICAgICAgIFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlw
ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCkpOworCisgICAgc3RkOjp1
bmlxdWVfcHRyPEFjY2Vzc0NBc2U+IGdldExlbmd0aChWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vz
c1R5cGUpOwogICAgIAotICAgIH5HZXRCeUlkQWNjZXNzKCk7CisgICAgfkFjY2Vzc0Nhc2UoKTsK
ICAgICAKLSAgICBzdGF0aWMgR2V0QnlJZEFjY2VzcyBmcm9tU3RydWN0dXJlU3R1YkluZm8oU3Ry
dWN0dXJlU3R1YkluZm8mKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+
IGZyb21TdHJ1Y3R1cmVTdHViSW5mbyhWTSYsIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZVN0dWJJ
bmZvJik7CiAgICAgCiAgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSAhPSBJ
bnZhbGlkOyB9CiAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsg
fQogICAgIAogICAgIEFjY2Vzc1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQor
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9Cisg
ICAgYm9vbCB2aWFQcm94eSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRh
LT52aWFQcm94eSA6IGZhbHNlOyB9CiAgICAgCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBj
b25zdCB7IHJldHVybiBtX3N0cnVjdHVyZS5nZXQoKTsgfQotICAgIAotICAgIGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2Nv
bmRpdGlvblNldDsgfQotICAgIAotICAgIEpJVFN0dWJSb3V0aW5lKiBzdHViUm91dGluZSgpIGNv
bnN0CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdAogICAgIHsKLSAgICAgICAgQVNT
RVJUKGlzU2V0KCkpOwotICAgICAgICByZXR1cm4gbV9zdHViUm91dGluZS5nZXQoKTsKKyAgICAg
ICAgaWYgKG1fa2luZCA9PSBUcmFuc2l0aW9uKQorICAgICAgICAgICAgcmV0dXJuIG1fc3RydWN0
dXJlLT5wcmV2aW91c0lEKCk7CisgICAgICAgIHJldHVybiBtX3N0cnVjdHVyZS5nZXQoKTsKKyAg
ICB9CisgICAgYm9vbCBndWFyZGVkQnlTdHJ1Y3R1cmVDaGVjaygpIGNvbnN0IHsgcmV0dXJuICF2
aWFQcm94eSgpOyB9CisKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSgpIGNvbnN0CisgICAg
eworICAgICAgICBBU1NFUlQobV9raW5kID09IFRyYW5zaXRpb24pOworICAgICAgICByZXR1cm4g
bV9zdHJ1Y3R1cmUuZ2V0KCk7CiAgICAgfQogICAgIAotICAgIGJvb2wgZG9lc0NhbGxzKCkgY29u
c3QgeyByZXR1cm4gdHlwZSgpID09IEdldHRlciB8fCB0eXBlKCkgPT0gQ3VzdG9tR2V0dGVyOyB9
CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0KKworICAgIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxT
ZXQoKSBjb25zdCB7IG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5hZGRpdGlvbmFsU2V0LmdldCgp
IDogbnVsbHB0cjsgfQogICAgIAotICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgY29uc3Q7CisgICAg
Ym9vbCBkb2VzQ2FsbHMoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gR2V0dGVyIHx8IHR5cGUo
KSA9PSBDdXN0b21HZXR0ZXI7IH0KIAorICAgIC8vIElmIHRoaXMgbWV0aG9kIHJldHVybnMgdHJ1
ZSwgdGhlbiBpdCdzIGEgZ29vZCBpZGVhIHRvIHJlbW92ZSAnb3RoZXInIGZyb20gdGhlIGFjY2Vz
cyBvbmNlICd0aGlzJworICAgIC8vIGlzIGFkZGVkLiBUaGlzIG1ldGhvZCBhc3N1bWVzIHRoYXQg
aW4gY2FzZSBvZiBjb250cmFkaWN0aW9ucywgJ3RoaXMnIHJlcHJlc2VudHMgYSBuZXdlciwgYW5k
IHNvCisgICAgLy8gbW9yZSB1c2VmdWwsIHRydXRoLiBUaGlzIG1ldGhvZCBjYW4gYmUgY29uc2Vy
dmF0aXZlOyBpdCB3aWxsIHJldHVybiBmYWxzZSB3aGVuIGl0IGRvdWJ0LgorICAgIGJvb2wgY2Fu
UmVwbGFjZShjb25zdCBBY2Nlc3NDYXNlJiBvdGhlcik7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3Q7CisgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBDb2Rl
QmxvY2s7CisgICAgZnJpZW5kIGNsYXNzIFBvbHltb3JwaGljQWNjZXNzOworCisgICAgQWNjZXNz
Q2FzZSgpOworCisgICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25zdDsKKworICAgIC8vIEZhbGwg
dGhyb3VnaCBvbiBzdWNjZXNzLiBUd28ga2luZHMgb2YgZmFpbHVyZXMgYXJlIHN1cHBvcnRlZDog
ZmFsbC10aHJvdWdoLCB3aGljaCBtZWFucyB0aGF0IHdlCisgICAgLy8gc2hvdWxkIHRyeSBhIGRp
ZmZlcmVudCBjYXNlOyBhbmQgZmFpbHVyZSwgd2hpY2ggbWVhbnMgdGhhdCB0aGlzIHdhcyB0aGUg
cmlnaHQgY2FzZSBidXQgaXQgbmVlZHMKKyAgICAvLyBoZWxwIGZyb20gdGhlIHNsb3cgcGF0aC4K
KyAgICB2b2lkIGdlbmVyYXRlV2l0aEd1YXJkKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYsIENDYWxs
SGVscGVyczo6SnVtcExpc3QmIGZhbGxUaHJvdWdoKTsKKworICAgIC8vIEZhbGwgdGhyb3VnaCBv
biBzdWNjZXNzLCBhZGQgYSBqdW1wIHRvIHRoZSBmYWlsdXJlIGxpc3Qgb24gZmFpbHVyZS4KKyAg
ICB2b2lkIGdlbmVyYXRlKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYpOwogICAgIAogICAgIEFjY2Vz
c1R5cGUgbV90eXBlOworICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0OworCisgICAgLy8gVXN1
YWxseSB0aGlzIGlzIHRoZSBzdHJ1Y3R1cmUgdGhhdCB3ZSBleHBlY3QgdGhlIGJhc2Ugb2JqZWN0
IHRvIGhhdmUuIEJ1dCwgdGhpcyBpcyB0aGUgKm5ldyoKKyAgICAvLyBzdHJ1Y3R1cmUgZm9yIGEg
dHJhbnNpdGlvbiBhbmQgd2UgcmVseSBvbiB0aGUgZmFjdCB0aGF0IGl0IGhhcyBhIHN0cm9uZyBy
ZWZlcmVuY2UgdG8gdGhlIG9sZAorICAgIC8vIHN0cnVjdHVyZS4gRm9yIHByb3hpZXMsIHRoaXMg
aXMgdGhlIHN0cnVjdHVyZSBvZiB0aGUgb2JqZWN0IGJlaGluZCB0aGUgcHJveHkuCiAgICAgV3Jp
dGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7CisKICAgICBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKLSAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IG1f
c3R1YlJvdXRpbmU7CisKKyAgICBjbGFzcyBSYXJlRGF0YSB7CisgICAgICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworICAgIHB1YmxpYzoKKyAgICAgICAgYm9vbCB2aWFQcm94eTsKKyAgICAg
ICAgUmVmUHRyPFdhdGNocG9pbnRTZXQ+IGFkZGl0aW9uYWxTZXQ7CisgICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxDYWxsTGlua0luZm8+IGNhbGxMaW5rSW5mbzsKKyAgICAgICAgdW5pb24geworICAg
ICAgICAgICAgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgZ2V0dGVyOworICAgICAgICAgICAg
UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmMgc2V0dGVyOworICAgICAgICAgICAgdm9pZCog
b3BhcXVlOworICAgICAgICB9IGN1c3RvbUFjY2Vzc29yOworICAgIH07CisKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8UmFyZURhdGE+IG1fcmFyZURhdGE7CiB9OwogCi1jbGFzcyBQb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0IHsKK2NsYXNzIFBvbHltb3JwaGljQWNjZXNzIHsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShQb2x5bW9ycGhpY0FjY2Vzcyk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwdWJsaWM6Ci0gICAgLy8gRWl0aGVyIGNyZWF0ZXMgYSBuZXcgcG9seW1vcnBoaWMgZ2V0IGxp
c3QsIG9yIHJldHVybnMgdGhlIG9uZSB0aGF0IGlzIGFscmVhZHkgaW4KLSAgICAvLyBwbGFjZS4K
LSAgICBzdGF0aWMgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogZnJvbShTdHJ1Y3R1cmVTdHViSW5m
byYpOwotICAgIAotICAgIH5Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0KCk7Ci0gICAgCi0gICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyIGN1cnJlbnRTbG93UGF0aFRhcmdldChTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8pIGNvbnN0OwotICAgIAotICAgIHZvaWQgYWRkQWNjZXNzKGNvbnN0IEdldEJ5
SWRBY2Nlc3MmKTsKKyAgICBQb2x5bW9ycGhpY0FjY2VzcygpOworICAgIH5Qb2x5bW9ycGhpY0Fj
Y2VzcygpOworCisgICAgLy8gVGhpcyBtYXkgcmV0dXJuIG51bGwsIGluIHdoaWNoIGNhc2UgdGhl
IG9sZCBzdHViIHJvdXRpbmUgaXMgbGVmdCBpbnRhY3QuIFRoaXMgbWV0aG9kIHdpbGwgZG8geW91
CisgICAgLy8gYSBzb2xpZCBhbmQgbnVsbC1jaGVjayB0aGUgQWNjZXNzQ2FzZSwgc28gdGhhdCB5
b3UgY2FuIGRvIHRoaW5ncyBsaWtlOgorICAgIC8vCisgICAgLy8gY29kZVB0ciA9IGFjY2Vzcy0+
cmVnZW5lcmF0ZVdpdGhDYXNlKC4uLiwgQWNjZXNzQ2FzZTo6Z2V0KC4uLikpCisgICAgLy8KKyAg
ICAvLyBJZiBBY2Nlc3NDYXNlOjpnZXQoKSByZXR1cm5zIG51bGxwdHIsIHRoZSBhYm92ZSBjYWxs
IHdpbGwgc2ltcGx5IHJldHVybiBudWxsLgorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByZWdl
bmVyYXRlV2l0aENhc2VzKAorICAgICAgICBWTSYsIENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJ
bmZvJiwgY29uc3QgSWRlbnRpZmllciYsIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2Fz
ZT4+KTsKKworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByZWdlbmVyYXRlV2l0aENhc2UoCisg
ICAgICAgIFZNJiwgQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBjb25zdCBJZGVudGlm
aWVyJiwgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+KTsKICAgICAKICAgICBib29sIGlzRW1w
dHkoKSBjb25zdCB7IHJldHVybiBtX2xpc3QuaXNFbXB0eSgpOyB9CiAgICAgdW5zaWduZWQgc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5zaXplKCk7IH0KICAgICBib29sIGlzRnVsbCgpIGNv
bnN0OwogICAgIGJvb2wgaXNBbG1vc3RGdWxsKCkgY29uc3Q7IC8vIFRydWUgaWYgYWRkaW5nIGFu
IGVsZW1lbnQgd291bGQgbWFrZSBpc0Z1bGwoKSB0cnVlLgotICAgIGNvbnN0IEdldEJ5SWRBY2Nl
c3MmIGF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdFtpXTsgfQotICAgIGNvbnN0
IEdldEJ5SWRBY2Nlc3MmIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9s
aXN0W2ldOyB9Ci0gICAgCi0gICAgYm9vbCBkaWRTZWxmUGF0Y2hpbmcoKSBjb25zdDsgLy8gQXJl
IGFueSBvZiB0aGUgYWNjZXNzZXMgU2ltcGxlSW5saW5lPwotICAgIAorICAgIGNvbnN0IEFjY2Vz
c0Nhc2UmIGF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuICptX2xpc3RbaV07IH0KKyAgICBj
b25zdCBBY2Nlc3NDYXNlJiBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuICpt
X2xpc3RbaV07IH0KKworICAgIC8vIElmIHRoaXMgcmV0dXJucyBmYWxzZSB0aGVuIHdlIGFyZSBy
ZXF1ZXN0aW5nIGEgcmVzZXQgb2YgdGhlIG93bmluZyBTdHJ1Y3R1cmVTdHViSW5mby4KICAgICBi
b29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OwogCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0OworCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBBY2Nlc3NDYXNlOworICAg
IGZyaWVuZCBjbGFzcyBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU7CiAgICAgZnJpZW5kIGNsYXNzIENv
ZGVCbG9jazsKICAgICAKLSAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KFN0cnVjdHVyZVN0dWJJ
bmZvJik7CisgICAgdm9pZCBhZGRBY2Nlc3NDYXNlKAorICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8
QWNjZXNzQ2FzZT4gdG9BZGQsIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4+JiBy
ZXBsYWNlZCk7CisgICAgdm9pZCB1bmRvQWRkQWNjZXNzQ2FzZSgKKyAgICAgICAgY29uc3QgVmVj
dG9yPEFjY2Vzc0Nhc2UqPiYgdG9SZW1vdmUsIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNz
Q2FzZT4+IHRvQWRkKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVnZW5lcmF0ZShWTSYs
IENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgY29uc3QgSWRlbnRpZmllciYpOwogICAg
IAotICAgIFZlY3RvcjxHZXRCeUlkQWNjZXNzLCAyPiBtX2xpc3Q7CisgICAgVmVjdG9yPHN0ZDo6
dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiwgMj4gbV9saXN0OworICAgIFJlZlB0cjxKSVRTdHViUm91
dGluZT4gbV9zdHViUm91dGluZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2F0Y2hwb2ludHNPblN0
cnVjdHVyZVN0dWJJbmZvPiBtX3dhdGNocG9pbnRzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlND
CiAKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBK
U0M6OkFjY2Vzc0Nhc2U6OkFjY2Vzc1R5cGUpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwogI2Vu
ZGlmIC8vIEVOQUJMRShKSVQpCiAKLSNlbmRpZiAvLyBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0X2gK
KyNlbmRpZiAvLyBQb2x5bW9ycGhpY0FjY2Vzc19oCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAJ
KHJldmlzaW9uIDE4OTMyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY0dldEJ5SWRMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNTUgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oIgotCi0j
aWYgRU5BQkxFKEpJVCkKLQotI2luY2x1ZGUgIkNvZGVCbG9jay5oIgotI2luY2x1ZGUgIkhlYXAu
aCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8u
aCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLUdldEJ5SWRBY2Nlc3M6OkdldEJ5SWRBY2Nlc3MoCi0g
ICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5cGUsIFBhc3NSZWZQdHI8SklU
U3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lLAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KQotICAgIDogbV90eXBl
KHR5cGUpCi0gICAgLCBtX3N0cnVjdHVyZSh2bSwgb3duZXIsIHN0cnVjdHVyZSkKLSAgICAsIG1f
Y29uZGl0aW9uU2V0KGNvbmRpdGlvblNldCkKLSAgICAsIG1fc3R1YlJvdXRpbmUoc3R1YlJvdXRp
bmUpCi17Ci19Ci0KLUdldEJ5SWRBY2Nlc3M6On5HZXRCeUlkQWNjZXNzKCkKLXsKLX0KLQotR2V0
QnlJZEFjY2VzcyBHZXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0dXJlU3R1YkluZm8oU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBpbml0aWFs
U2xvd1BhdGggPQotICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9m
ZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKLSAgICAKLSAgICBHZXRC
eUlkQWNjZXNzIHJlc3VsdDsKLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5hY2Nl
c3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZik7Ci0gICAgCi0gICAgcmVzdWx0Lm1fdHlw
ZSA9IFNpbXBsZUlubGluZTsKLSAgICByZXN1bHQubV9zdHJ1Y3R1cmUuY29weUZyb20oc3R1Yklu
Zm8udS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlKTsKLSAgICByZXN1bHQubV9zdHVi
Um91dGluZSA9IEpJVFN0dWJSb3V0aW5lOjpjcmVhdGVTZWxmTWFuYWdlZFJvdXRpbmUoaW5pdGlh
bFNsb3dQYXRoKTsKLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1ib29sIEdldEJ5SWRB
Y2Nlc3M6OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0Ci17Ci0gICAgaWYgKG1fc3RydWN0dXJlICYm
ICFIZWFwOjppc01hcmtlZChtX3N0cnVjdHVyZS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBpZiAoIW1fY29uZGl0aW9uU2V0LmFyZVN0aWxsTGl2ZSgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgaWYgKCFtX3N0dWJSb3V0aW5lLT52aXNpdFdlYWsodm0pKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVBvbHltb3JwaGljR2V0QnlJ
ZExpc3Q6OlBvbHltb3JwaGljR2V0QnlJZExpc3QoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
KQotewotICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc191bnNldCkKLSAgICAg
ICAgcmV0dXJuOwotICAgIAotICAgIG1fbGlzdC5hcHBlbmQoR2V0QnlJZEFjY2Vzczo6ZnJvbVN0
cnVjdHVyZVN0dWJJbmZvKHN0dWJJbmZvKSk7Ci19Ci0KLVBvbHltb3JwaGljR2V0QnlJZExpc3Qq
IFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmZyb20oU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
KQotewotICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfbGlz
dCkKLSAgICAgICAgcmV0dXJuIHN0dWJJbmZvLnUuZ2V0QnlJZExpc3QubGlzdDsKLSAgICAKLSAg
ICBBU1NFUlQoCi0gICAgICAgIHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9p
ZF9zZWxmCi0gICAgICAgIHx8IHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0KTsK
LSAgICAKLSAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiByZXN1bHQgPSBuZXcgUG9seW1vcnBo
aWNHZXRCeUlkTGlzdChzdHViSW5mbyk7Ci0gICAgCi0gICAgc3R1YkluZm8uaW5pdEdldEJ5SWRM
aXN0KHJlc3VsdCk7Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotUG9seW1vcnBoaWNH
ZXRCeUlkTGlzdDo6flBvbHltb3JwaGljR2V0QnlJZExpc3QoKSB7IH0KLQotTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmN1cnJlbnRTbG93UGF0aFRhcmdldCgK
LSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pIGNvbnN0Ci17Ci0gICAgaWYgKGlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0
T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpOwotICAgIHJldHVybiBt
X2xpc3QubGFzdCgpLnN0dWJSb3V0aW5lKCktPmNvZGUoKS5jb2RlKCk7Ci19Ci0KLXZvaWQgUG9s
eW1vcnBoaWNHZXRCeUlkTGlzdDo6YWRkQWNjZXNzKGNvbnN0IEdldEJ5SWRBY2Nlc3MmIGFjY2Vz
cykKLXsKLSAgICBBU1NFUlQoIWlzRnVsbCgpKTsKLSAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUg
cmVzaXppbmcgb3B0aW1pemVzIGZvciBzcGFjZSwgbm90IHRpbWUuCi0gICAgbV9saXN0LnJlc2l6
ZVRvRml0KG1fbGlzdC5zaXplKCkgKyAxKTsKLSAgICBtX2xpc3QubGFzdCgpID0gYWNjZXNzOwot
fQotCi1ib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmlzRnVsbCgpIGNvbnN0Ci17Ci0gICAg
QVNTRVJUKHNpemUoKSA8PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpOwotICAgIHJldHVy
biBzaXplKCkgPT0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFOwotfQotCi1ib29sIFBvbHlt
b3JwaGljR2V0QnlJZExpc3Q6OmlzQWxtb3N0RnVsbCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHNp
emUoKSA8PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpOwotICAgIHJldHVybiBzaXplKCkg
Pj0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIC0gMTsKLX0KLQotYm9vbCBQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0OjpkaWRTZWxmUGF0Y2hpbmcoKSBjb25zdAotewotICAgIGZvciAodW5zaWdu
ZWQgaSA9IHNpemUoKTsgaS0tOykgewotICAgICAgICBpZiAoYXQoaSkudHlwZSgpID09IEdldEJ5
SWRBY2Nlc3M6OlNpbXBsZUlubGluZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6dmlz
aXRXZWFrKFZNJiB2bSkgY29uc3QKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXplKCk7IGkt
LTspIHsKLSAgICAgICAgaWYgKCFhdChpKS52aXNpdFdlYWsodm0pKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
SlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuaAkocmV2
aXNpb24gMTg5MzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3Jw
aGljR2V0QnlJZExpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMzMgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFBv
bHltb3JwaGljR2V0QnlJZExpc3RfaAotI2RlZmluZSBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0X2gK
LQotI2lmIEVOQUJMRShKSVQpCi0KLSNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCi0jaW5jbHVkZSAi
TWFjcm9Bc3NlbWJsZXIuaCIKLSNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5o
IgotI2luY2x1ZGUgIk9wY29kZS5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgotI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENvZGVCbG9jazsKLXN0
cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbzsKLQotY2xhc3MgR2V0QnlJZEFjY2VzcyB7Ci1wdWJsaWM6
Ci0gICAgZW51bSBBY2Nlc3NUeXBlIHsKLSAgICAgICAgSW52YWxpZCwKLSAgICAgICAgU2ltcGxl
SW5saW5lLCAvLyBUaGlzIGlzIHRoZSBwYXRjaGVkIGlubGluZSBhY2Nlc3MuCi0gICAgICAgIFNp
bXBsZVN0dWIsIC8vIFRoaXMgaXMgYSBzdHViLgotICAgICAgICBXYXRjaGVkU3R1YiwKLSAgICAg
ICAgR2V0dGVyLAotICAgICAgICBDdXN0b21HZXR0ZXIsCi0gICAgICAgIFNpbXBsZU1pc3MsCi0g
ICAgfTsKLSAgICAKLSAgICBHZXRCeUlkQWNjZXNzKCkKLSAgICAgICAgOiBtX3R5cGUoSW52YWxp
ZCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIEdldEJ5SWRBY2Nlc3MoCi0gICAgICAgIFZNJiwg
SlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4sIFN0
cnVjdHVyZSosCi0gICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiA9IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCkpOwotICAgIAotICAgIH5HZXRCeUlkQWNjZXNzKCk7
Ci0gICAgCi0gICAgc3RhdGljIEdldEJ5SWRBY2Nlc3MgZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFN0
cnVjdHVyZVN0dWJJbmZvJik7Ci0gICAgCi0gICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJu
IG1fdHlwZSAhPSBJbnZhbGlkOyB9Ci0gICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVy
biAhaXNTZXQoKTsgfQotICAgIAotICAgIEFjY2Vzc1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdHlwZTsgfQotICAgIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyByZXR1
cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7IH0KLSAgICAKLSAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7
IH0KLSAgICAKLSAgICBKSVRTdHViUm91dGluZSogc3R1YlJvdXRpbmUoKSBjb25zdAotICAgIHsK
LSAgICAgICAgQVNTRVJUKGlzU2V0KCkpOwotICAgICAgICByZXR1cm4gbV9zdHViUm91dGluZS5n
ZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBkb2VzQ2FsbHMoKSBjb25zdCB7IHJldHVybiB0
eXBlKCkgPT0gR2V0dGVyIHx8IHR5cGUoKSA9PSBDdXN0b21HZXR0ZXI7IH0KLSAgICAKLSAgICBi
b29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBD
b2RlQmxvY2s7Ci0gICAgCi0gICAgQWNjZXNzVHlwZSBtX3R5cGU7Ci0gICAgV3JpdGVCYXJyaWVy
PFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7Ci0gICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQg
bV9jb25kaXRpb25TZXQ7Ci0gICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBtX3N0dWJSb3V0aW5l
OwotfTsKLQotY2xhc3MgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCB7Ci0gICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgLy8gRWl0aGVyIGNyZWF0ZXMgYSBuZXcgcG9seW1v
cnBoaWMgZ2V0IGxpc3QsIG9yIHJldHVybnMgdGhlIG9uZSB0aGF0IGlzIGFscmVhZHkgaW4KLSAg
ICAvLyBwbGFjZS4KLSAgICBzdGF0aWMgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogZnJvbShTdHJ1
Y3R1cmVTdHViSW5mbyYpOwotICAgIAotICAgIH5Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0KCk7Ci0g
ICAgCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN1cnJlbnRTbG93UGF0aFRhcmdldChTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pIGNvbnN0OwotICAgIAotICAgIHZvaWQgYWRkQWNjZXNz
KGNvbnN0IEdldEJ5SWRBY2Nlc3MmKTsKLSAgICAKLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7
IHJldHVybiBtX2xpc3QuaXNFbXB0eSgpOyB9Ci0gICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbGlzdC5zaXplKCk7IH0KLSAgICBib29sIGlzRnVsbCgpIGNvbnN0OwotICAgIGJv
b2wgaXNBbG1vc3RGdWxsKCkgY29uc3Q7IC8vIFRydWUgaWYgYWRkaW5nIGFuIGVsZW1lbnQgd291
bGQgbWFrZSBpc0Z1bGwoKSB0cnVlLgotICAgIGNvbnN0IEdldEJ5SWRBY2Nlc3MmIGF0KHVuc2ln
bmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdFtpXTsgfQotICAgIGNvbnN0IEdldEJ5SWRBY2Nl
c3MmIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9saXN0W2ldOyB9Ci0g
ICAgCi0gICAgYm9vbCBkaWRTZWxmUGF0Y2hpbmcoKSBjb25zdDsgLy8gQXJlIGFueSBvZiB0aGUg
YWNjZXNzZXMgU2ltcGxlSW5saW5lPwotICAgIAotICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgY29u
c3Q7Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKLSAgICAKLSAgICBQ
b2x5bW9ycGhpY0dldEJ5SWRMaXN0KFN0cnVjdHVyZVN0dWJJbmZvJik7Ci0gICAgCi0gICAgVmVj
dG9yPEdldEJ5SWRBY2Nlc3MsIDI+IG1fbGlzdDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwot
Ci0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQotI2VuZGlmIC8vIFBvbHltb3JwaGljR2V0QnlJZExp
c3RfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQ
dXRCeUlkTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwCShyZXZpc2lvbiAxODkzMjQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTU2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIs
IDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlBvbHltb3JwaGljUHV0QnlJZExpc3QuaCIKLQotI2lmIEVOQUJMRShKSVQpCi0KLSNp
bmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotUHV0QnlJ
ZEFjY2VzcyBQdXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0dXJlU3R1YkluZm8oU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvKQotewotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBpbml0aWFsU2xv
d1BhdGggPQotICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNl
dChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKLSAgICAKLSAgICBQdXRCeUlk
QWNjZXNzIHJlc3VsdDsKLSAgICAKLSAgICBzd2l0Y2ggKHN0dWJJbmZvLmFjY2Vzc1R5cGUpIHsK
LSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFjZToKLSAgICAgICAgcmVzdWx0Lm1fdHlw
ZSA9IFJlcGxhY2U7Ci0gICAgICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZS5jb3B5RnJvbShzdHVi
SW5mby51LnB1dEJ5SWRSZXBsYWNlLmJhc2VPYmplY3RTdHJ1Y3R1cmUpOwotICAgICAgICByZXN1
bHQubV9zdHViUm91dGluZSA9IEpJVFN0dWJSb3V0aW5lOjpjcmVhdGVTZWxmTWFuYWdlZFJvdXRp
bmUoaW5pdGlhbFNsb3dQYXRoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgIGNhc2Ug
YWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdDoKLSAgICBjYXNlIGFjY2Vzc19wdXRf
YnlfaWRfdHJhbnNpdGlvbl9ub3JtYWw6Ci0gICAgICAgIHJlc3VsdC5tX3R5cGUgPSBUcmFuc2l0
aW9uOwotICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuY29weUZyb20oc3R1YkluZm8udS5w
dXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZSk7Ci0gICAgICAgIHJlc3VsdC5tX25l
d1N0cnVjdHVyZS5jb3B5RnJvbShzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVy
ZSk7Ci0gICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0OjphZG9wdFJhd1BvaW50ZXIoCi0gICAgICAgICAgICBzdHViSW5mby51LnB1dEJ5SWRU
cmFuc2l0aW9uLnJhd0NvbmRpdGlvblNldCk7Ci0gICAgICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5l
ID0gc3R1YkluZm8uc3R1YlJvdXRpbmU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAKLSAgICBk
ZWZhdWx0OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLSAg
ICAKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1ib29sIFB1dEJ5SWRBY2Nlc3M6OnZpc2l0V2Vh
ayhWTSYgdm0pIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2NvbmRpdGlvblNldC5hcmVTdGlsbExpdmUo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIHN3aXRjaCAobV90eXBlKSB7Ci0g
ICAgY2FzZSBSZXBsYWNlOgotICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fb2xkU3RydWN0
dXJlLmdldCgpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBUcmFuc2l0aW9uOgotICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fb2xkU3Ry
dWN0dXJlLmdldCgpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFI
ZWFwOjppc01hcmtlZChtX25ld1N0cnVjdHVyZS5nZXQoKSkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU2V0dGVyOgotICAgIGNhc2UgQ3VzdG9t
U2V0dGVyOgotICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fb2xkU3RydWN0dXJlLmdldCgp
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLSAgICBpZiAoIW1fc3R1YlJvdXRpbmUtPnZpc2l0V2Vhayh2bSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotUG9seW1vcnBoaWNQ
dXRCeUlkTGlzdDo6UG9seW1vcnBoaWNQdXRCeUlkTGlzdCgKLSAgICBQdXRLaW5kIHB1dEtpbmQs
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLSAgICA6IG1fa2luZChwdXRLaW5kKQotewot
ICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlICE9IGFjY2Vzc191bnNldCkKLSAgICAgICAgbV9s
aXN0LmFwcGVuZChQdXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0dXJlU3R1YkluZm8oc3R1YkluZm8p
KTsKLX0KLQotUG9seW1vcnBoaWNQdXRCeUlkTGlzdCogUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6
ZnJvbSgKLSAgICBQdXRLaW5kIHB1dEtpbmQsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykK
LXsKLSAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfcHV0X2J5X2lkX2xpc3Qp
Ci0gICAgICAgIHJldHVybiBzdHViSW5mby51LnB1dEJ5SWRMaXN0Lmxpc3Q7Ci0gICAgCi0gICAg
QVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlCi0g
ICAgICAgIHx8IHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0
aW9uX25vcm1hbAotICAgICAgICB8fCBzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19wdXRf
YnlfaWRfdHJhbnNpdGlvbl9kaXJlY3QKLSAgICAgICAgfHwgc3R1YkluZm8uYWNjZXNzVHlwZSA9
PSBhY2Nlc3NfdW5zZXQpOwotICAgIAotICAgIFBvbHltb3JwaGljUHV0QnlJZExpc3QqIHJlc3Vs
dCA9Ci0gICAgICAgIG5ldyBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KHB1dEtpbmQsIHN0dWJJbmZv
KTsKLSAgICAKLSAgICBzdHViSW5mby5pbml0UHV0QnlJZExpc3QocmVzdWx0KTsKLSAgICAKLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotCi1Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojp+UG9seW1vcnBo
aWNQdXRCeUlkTGlzdCgpIHsgfQotCi1ib29sIFBvbHltb3JwaGljUHV0QnlJZExpc3Q6OmlzRnVs
bCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHNpemUoKSA8PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hF
X1NJWkUpOwotICAgIHJldHVybiBzaXplKCkgPT0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpF
OwotfQotCi1ib29sIFBvbHltb3JwaGljUHV0QnlJZExpc3Q6OmlzQWxtb3N0RnVsbCgpIGNvbnN0
Ci17Ci0gICAgQVNTRVJUKHNpemUoKSA8PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpOwot
ICAgIHJldHVybiBzaXplKCkgPj0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIC0gMTsKLX0K
LQotdm9pZCBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0OjphZGRBY2Nlc3MoY29uc3QgUHV0QnlJZEFj
Y2VzcyYgcHV0QnlJZEFjY2VzcykKLXsKLSAgICBBU1NFUlQoIWlzRnVsbCgpKTsKLSAgICAvLyBN
YWtlIHN1cmUgdGhhdCB0aGUgcmVzaXppbmcgb3B0aW1pemVzIGZvciBzcGFjZSwgbm90IHRpbWUu
Ci0gICAgbV9saXN0LnJlc2l6ZVRvRml0KG1fbGlzdC5zaXplKCkgKyAxKTsKLSAgICBtX2xpc3Qu
bGFzdCgpID0gcHV0QnlJZEFjY2VzczsKLX0KLQotYm9vbCBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0
Ojp2aXNpdFdlYWsoVk0mIHZtKSBjb25zdAotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzaXplKCk7ICsraSkgewotICAgICAgICBpZiAoIWF0KGkpLnZpc2l0V2Vhayh2bSkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi19IC8v
IG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0
LmgJKHJldmlzaW9uIDE4OTMyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
b2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMjE2ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2lmbmRlZiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0X2gKLSNkZWZpbmUgUG9seW1vcnBoaWNQ
dXRCeUlkTGlzdF9oCi0KLSNpZiBFTkFCTEUoSklUKQotCi0jaW5jbHVkZSAiQ29kZU9yaWdpbi5o
IgotI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCi0jaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQuaCIKLSNpbmNsdWRlICJPcGNvZGUuaCIKLSNpbmNsdWRlICJQdXRLaW5kLmgi
Ci0jaW5jbHVkZSAiUHV0UHJvcGVydHlTbG90LmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlLmgiCi0j
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgQ29kZUJs
b2NrOwotc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvOwotCi1jbGFzcyBQdXRCeUlkQWNjZXNzIHsK
LXB1YmxpYzoKLSAgICBlbnVtIEFjY2Vzc1R5cGUgewotICAgICAgICBJbnZhbGlkLAotICAgICAg
ICBUcmFuc2l0aW9uLAotICAgICAgICBSZXBsYWNlLAotICAgICAgICBTZXR0ZXIsCi0gICAgICAg
IEN1c3RvbVNldHRlcgotICAgIH07Ci0gICAgCi0gICAgUHV0QnlJZEFjY2VzcygpCi0gICAgICAg
IDogbV90eXBlKEludmFsaWQpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgUHV0QnlJ
ZEFjY2VzcyB0cmFuc2l0aW9uKAotICAgICAgICBWTSYgdm0sCi0gICAgICAgIEpTQ2VsbCogb3du
ZXIsCi0gICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLAotICAgICAgICBTdHJ1Y3R1cmUq
IG5ld1N0cnVjdHVyZSwKLSAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQm
IGNvbmRpdGlvblNldCwKLSAgICAgICAgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJv
dXRpbmUpCi0gICAgewotICAgICAgICBQdXRCeUlkQWNjZXNzIHJlc3VsdDsKLSAgICAgICAgcmVz
dWx0Lm1fdHlwZSA9IFRyYW5zaXRpb247Ci0gICAgICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZS5z
ZXQodm0sIG93bmVyLCBvbGRTdHJ1Y3R1cmUpOwotICAgICAgICByZXN1bHQubV9uZXdTdHJ1Y3R1
cmUuc2V0KHZtLCBvd25lciwgbmV3U3RydWN0dXJlKTsKLSAgICAgICAgcmVzdWx0Lm1fY29uZGl0
aW9uU2V0ID0gY29uZGl0aW9uU2V0OwotICAgICAgICByZXN1bHQubV9jdXN0b21TZXR0ZXIgPSAw
OwotICAgICAgICByZXN1bHQubV9zdHViUm91dGluZSA9IHN0dWJSb3V0aW5lOwotICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHN0YXRpYyBQdXRCeUlkQWNjZXNzIHJlcGxhY2Uo
Ci0gICAgICAgIFZNJiB2bSwKLSAgICAgICAgSlNDZWxsKiBvd25lciwKLSAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsCi0gICAgICAgIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJS
b3V0aW5lKQotICAgIHsKLSAgICAgICAgUHV0QnlJZEFjY2VzcyByZXN1bHQ7Ci0gICAgICAgIHJl
c3VsdC5tX3R5cGUgPSBSZXBsYWNlOwotICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuc2V0
KHZtLCBvd25lciwgc3RydWN0dXJlKTsKLSAgICAgICAgcmVzdWx0Lm1fY3VzdG9tU2V0dGVyID0g
MDsKLSAgICAgICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBzdHViUm91dGluZTsKLSAgICAgICAg
cmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLQotICAgIHN0YXRpYyBQdXRCeUlkQWNjZXNzIHNldHRl
cigKLSAgICAgICAgVk0mIHZtLAotICAgICAgICBKU0NlbGwqIG93bmVyLAotICAgICAgICBBY2Nl
c3NUeXBlIGFjY2Vzc1R5cGUsCi0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLAotICAgICAg
ICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LAotICAgICAg
ICBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyBjdXN0b21TZXR0ZXIsCi0gICAgICAgIFBh
c3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lKQotICAgIHsKLSAgICAgICAgUkVM
RUFTRV9BU1NFUlQoYWNjZXNzVHlwZSA9PSBTZXR0ZXIgfHwgYWNjZXNzVHlwZSA9PSBDdXN0b21T
ZXR0ZXIpOwotICAgICAgICBQdXRCeUlkQWNjZXNzIHJlc3VsdDsKLSAgICAgICAgcmVzdWx0Lm1f
b2xkU3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHJlc3VsdC5t
X3R5cGUgPSBhY2Nlc3NUeXBlOwotICAgICAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25k
aXRpb25TZXQ7Ci0gICAgICAgIHJlc3VsdC5tX2N1c3RvbVNldHRlciA9IGN1c3RvbVNldHRlcjsK
LSAgICAgICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBzdHViUm91dGluZTsKLSAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIFB1dEJ5SWRBY2Nlc3MgZnJvbVN0
cnVjdHVyZVN0dWJJbmZvKFN0cnVjdHVyZVN0dWJJbmZvJik7Ci0gICAgCi0gICAgYm9vbCBpc1Nl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSAhPSBJbnZhbGlkOyB9Ci0gICAgYm9vbCBvcGVyYXRv
ciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQotICAgIAotICAgIEFjY2Vzc1R5cGUgdHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQotICAgIAotICAgIGJvb2wgaXNUcmFuc2l0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IFRyYW5zaXRpb247IH0KLSAgICBib29sIGlzUmVw
bGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBSZXBsYWNlOyB9Ci0gICAgYm9vbCBpc1Nl
dHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBTZXR0ZXI7IH0KLSAgICBib29sIGlzQ3Vz
dG9tKCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IEN1c3RvbVNldHRlcjsgfQotICAgIAotICAg
IFN0cnVjdHVyZSogb2xkU3RydWN0dXJlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIC8vIFVzaW5n
IHRoaXMgaW5zdGVhZCBvZiBpc1NldCgpIHRvIG1ha2UgdGhpcyBhc3NlcnRpb24gcm9idXN0IGFn
YWluc3QgdGhlIHBvc3NpYmlsaXR5Ci0gICAgICAgIC8vIG9mIGFkZGl0aW9uYWwgYWNjZXNzIHR5
cGVzIGJlaW5nIGFkZGVkLgotICAgICAgICBBU1NFUlQoaXNUcmFuc2l0aW9uKCkgfHwgaXNSZXBs
YWNlKCkgfHwgaXNTZXR0ZXIoKSB8fCBpc0N1c3RvbSgpKTsKLSAgICAgICAgCi0gICAgICAgIHJl
dHVybiBtX29sZFN0cnVjdHVyZS5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzUmVwbGFjZSgpIHx8IGlz
U2V0dGVyKCkgfHwgaXNDdXN0b20oKSk7Ci0gICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZS5n
ZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgQVNTRVJUKGlzVHJhbnNpdGlvbigpKTsKLSAgICAgICAgcmV0dXJuIG1f
bmV3U3RydWN0dXJlLmdldCgpOwotICAgIH0KLSAgICAKLSAgICBjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25T
ZXQ7IH0KLSAgICAKLSAgICBKSVRTdHViUm91dGluZSogc3R1YlJvdXRpbmUoKSBjb25zdAotICAg
IHsKLSAgICAgICAgQVNTRVJUKGlzVHJhbnNpdGlvbigpIHx8IGlzUmVwbGFjZSgpIHx8IGlzU2V0
dGVyKCkgfHwgaXNDdXN0b20oKSk7Ci0gICAgICAgIHJldHVybiBtX3N0dWJSb3V0aW5lLmdldCgp
OwotICAgIH0KLQotICAgIFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jIGN1c3RvbVNldHRl
cigpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaXNDdXN0b20oKSk7Ci0gICAgICAgIHJl
dHVybiBtX2N1c3RvbVNldHRlcjsKLSAgICB9Ci0KLSAgICBib29sIHZpc2l0V2VhayhWTSYpIGNv
bnN0OwotICAgIAotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOwotICAgIAot
ICAgIEFjY2Vzc1R5cGUgbV90eXBlOwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fb2xk
U3RydWN0dXJlOwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fbmV3U3RydWN0dXJlOwot
ICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OwotICAgIFB1dFBy
b3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jIG1fY3VzdG9tU2V0dGVyOwotICAgIFJlZlB0cjxKSVRT
dHViUm91dGluZT4gbV9zdHViUm91dGluZTsKLX07Ci0KLWNsYXNzIFBvbHltb3JwaGljUHV0QnlJ
ZExpc3QgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIC8vIEVp
dGhlciBjcmVhdGVzIGEgbmV3IHBvbHltb3JwaGljIHB1dCBsaXN0LCBvciByZXR1cm5zIHRoZSBv
bmUgdGhhdCBpcyBhbHJlYWR5Ci0gICAgLy8gaW4gcGxhY2UuCi0gICAgc3RhdGljIFBvbHltb3Jw
aGljUHV0QnlJZExpc3QqIGZyb20oUHV0S2luZCwgU3RydWN0dXJlU3R1YkluZm8mKTsKLSAgICAK
LSAgICB+UG9seW1vcnBoaWNQdXRCeUlkTGlzdCgpOwotICAgIAotICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBjdXJyZW50U2xvd1BhdGhUYXJnZXQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuIG1fbGlzdC5sYXN0KCkuc3R1YlJvdXRpbmUoKS0+Y29kZSgpLmNvZGUoKTsKLSAgICB9Ci0g
ICAgCi0gICAgdm9pZCBhZGRBY2Nlc3MoY29uc3QgUHV0QnlJZEFjY2VzcyYpOwotICAgIAotICAg
IGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5pc0VtcHR5KCk7IH0KLSAgICB1
bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9saXN0LnNpemUoKTsgfQotICAgIGJvb2wg
aXNGdWxsKCkgY29uc3Q7Ci0gICAgYm9vbCBpc0FsbW9zdEZ1bGwoKSBjb25zdDsgLy8gVHJ1ZSBp
ZiBhZGRpbmcgYW4gZWxlbWVudCB3b3VsZCBtYWtlIGlzRnVsbCgpIHRydWUuCi0gICAgY29uc3Qg
UHV0QnlJZEFjY2VzcyYgYXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9saXN0W2ldOyB9
Ci0gICAgY29uc3QgUHV0QnlJZEFjY2VzcyYgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBjb25zdCB7
IHJldHVybiBtX2xpc3RbaV07IH0KLSAgICAKLSAgICBQdXRLaW5kIGtpbmQoKSBjb25zdCB7IHJl
dHVybiBtX2tpbmQ7IH0KLSAgICAKLSAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OwotICAg
IAotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOwotICAgIAotICAgIC8vIElu
aXRpYWxpemUgZnJvbSBhIHN0dWIgaW5mbzsgdGhpcyB3aWxsIHBsYWNlIG9uZSBlbGVtZW50IGlu
IHRoZSBsaXN0IGFuZCBpdCB3aWxsCi0gICAgLy8gYmUgY3JlYXRlZCBieSBjb252ZXJ0aW5nIHRo
ZSBzdHViIGluZm8ncyBwdXQgYnkgaWQgYWNjZXNzIGluZm9ybWF0aW9uIGludG8gb3VyCi0gICAg
Ly8gUHV0QnlJZEFjY2Vzcy4KLSAgICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KFB1dEtpbmQsIFN0
cnVjdHVyZVN0dWJJbmZvJik7Ci0KLSAgICBWZWN0b3I8UHV0QnlJZEFjY2VzcywgMj4gbV9saXN0
OwotICAgIFB1dEtpbmQgbV9raW5kOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRp
ZiAvLyBFTkFCTEUoSklUKQotCi0jZW5kaWYgLy8gUG9seW1vcnBoaWNQdXRCeUlkTGlzdF9oCi0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmNwcAkocmV2aXNpb24gMTg5MzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMzcg
KzM2LDUyIEBAIG5hbWVzcGFjZSBKU0MgewogI2lmIEVOQUJMRShKSVQpCiB2b2lkIFN0cnVjdHVy
ZVN0dWJJbmZvOjpkZXJlZigpCiB7Ci0gICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7Ci0gICAgY2Fz
ZSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3Q6IHsKLSAgICAgICAgZGVsZXRlIHUuZ2V0QnlJZExpc3Qu
bGlzdDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRf
bGlzdDoKLSAgICAgICAgZGVsZXRlIHUucHV0QnlJZExpc3QubGlzdDsKLSAgICAgICAgcmV0dXJu
OwotICAgIGNhc2UgYWNjZXNzX2luX2xpc3Q6IHsKLSAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NT
dHJ1Y3R1cmVMaXN0KiBwb2x5bW9ycGhpY1N0cnVjdHVyZXMgPSB1LmluTGlzdC5zdHJ1Y3R1cmVM
aXN0OwotICAgICAgICBkZWxldGUgcG9seW1vcnBoaWNTdHJ1Y3R1cmVzOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoK
LSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6Ci0gICAgICAgIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjphZG9wdFJhd1BvaW50ZXIodS5wdXRCeUlkVHJhbnNp
dGlvbi5yYXdDb25kaXRpb25TZXQpOwotICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0Nv
bmRpdGlvblNldCA9IG51bGxwdHI7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIGFjY2Vzc19n
ZXRfYnlfaWRfc2VsZjoKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFjZToKLSAgICBj
YXNlIGFjY2Vzc191bnNldDoKLSAgICAgICAgLy8gVGhlc2UgaW5zdHJ1Y3Rpb25zIGRvbid0IGhh
dmUgdG8gcmVsZWFzZSBhbnkgYWxsb2NhdGVkIG1lbW9yeQorICAgIHN3aXRjaCAoY2FjaGVUeXBl
KSB7CisgICAgY2FzZSBDYWNoZVR5cGU6OlN0dWI6CisgICAgICAgIGRlbGV0ZSB1LnN0dWI7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIENhY2hlVHlwZTo6VW5zZXQ6CisgICAgY2FzZSBDYWNo
ZVR5cGU6OkdldEJ5SWRTZWxmOgorICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZQog
ICAgICAgICByZXR1cm47Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
fQorCitNYWNyb0Fzc2VtYmxlckNvZGVQdHIgU3RydWN0dXJlU3R1YkluZm86OmFkZEFjY2Vzc0Nh
c2UoCisgICAgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSWRlbnRpZmllciYg
aWRlbnQsIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBhY2Nlc3NDYXNlKQoreworICAgIGlm
ICghYWNjZXNzQ2FzZSkKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOwor
ICAgIAorICAgIGlmIChjYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpTdHViKQorICAgICAgICByZXR1
cm4gdS5zdHViLT5yZWdlbmVyYXRlV2l0aENhc2Uodm0sIGNvZGVCbG9jaywgKnRoaXMsIGlkZW50
LCBhY2Nlc3NDYXNlKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxQb2x5bW9ycGhpY0FjY2Vzcz4g
YWNjZXNzID0gc3RkOjptYWtlX3VuaXF1ZTxQb2x5bW9ycGhpY0FjY2Vzcz4oKTsKKyAgICAKKyAg
ICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+PiBhY2Nlc3NDYXNlczsKKyAgICAK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gcHJldmlvdXNDYXNlID0KKyAgICAgICAg
QWNjZXNzQ2FzZTo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKHZtLCBjb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpLCAqdGhpcyk7CisgICAgaWYgKHByZXZpb3VzQ2FzZSkKKyAgICAgICAgYWNjZXNz
Q2FzZXMuYXBwZW5kKHN0ZDo6bW92ZShwcmV2aW91c0Nhc2UpKTsKKworICAgIGFjY2Vzc0Nhc2Vz
LmFwcGVuZChzdGQ6Om1vdmUoYWNjZXNzQ2FzZSkpOworCisgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIHJlc3VsdCA9CisgICAgICAgIGFjY2Vzcy0+cmVnZW5lcmF0ZVdpdGhDYXNlcyh2bSwgY29k
ZUJsb2NrLCAqdGhpcywgaWRlbnQsIGFjY2Vzc0Nhc2VzKTsKKworICAgIGlmICghcmVzdWx0KQor
ICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7CisKKyAgICBjYWNoZVR5cGUg
PSBDYWNoZVR5cGU6OlN0dWI7CisgICAgdS5zdHViID0gYWNjZXNzLnJlbGVhc2UoKTsKIH0KIAog
dm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0g
ICAgaWYgKGFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0KQorICAgIGlmIChjYWNoZVR5cGUgPT0g
Q2FjaGVUeXBlOjpVbnNldCkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGlmIChPcHRpb25z
Ojp2ZXJib3NlT1NSKCkpIHsKQEAgLTc0LDE4ICs4OSwyMSBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJ
bmZvOjpyZXNldChDb2RlQmxvY2sqCiAgICAgICAgIC8vIG9mIHRoZSBDb2RlQmxvY2suCiAgICAg
ICAgIGRhdGFMb2coIkNsZWFyaW5nIHN0cnVjdHVyZSBjYWNoZSAoa2luZCAiLCBzdGF0aWNfY2Fz
dDxpbnQ+KGFjY2Vzc1R5cGUpLCAiKSBpbiAiLCBSYXdQb2ludGVyKGNvZGVCbG9jayksICIuXG4i
KTsKICAgICB9Ci0gICAgCi0gICAgaWYgKGlzR2V0QnlJZEFjY2VzcyhzdGF0aWNfY2FzdDxBY2Nl
c3NUeXBlPihhY2Nlc3NUeXBlKSkpCisKKyAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKKyAgICBj
YXNlIEFjY2Vzc1R5cGU6OkdldDoKICAgICAgICAgcmVzZXRHZXRCeUlEKGNvZGVCbG9jaywgKnRo
aXMpOwotICAgIGVsc2UgaWYgKGlzUHV0QnlJZEFjY2VzcyhzdGF0aWNfY2FzdDxBY2Nlc3NUeXBl
PihhY2Nlc3NUeXBlKSkpCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0
OgogICAgICAgICByZXNldFB1dEJ5SUQoY29kZUJsb2NrLCAqdGhpcyk7Ci0gICAgZWxzZSB7Ci0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzSW5BY2Nlc3Moc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4o
YWNjZXNzVHlwZSkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbjoK
ICAgICAgICAgcmVzZXRJbihjb2RlQmxvY2ssICp0aGlzKTsKKyAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgIAogICAgIGRlcmVmKCk7Ci0gICAgYWNjZXNzVHlwZSA9IGFjY2Vzc191bnNldDsKKyAg
ICBjYWNoZVR5cGUgPSBDYWNoZVR5cGU6OlVuc2V0OwogICAgIHN0dWJSb3V0aW5lID0gbnVsbHB0
cjsKICAgICB3YXRjaHBvaW50cyA9IG51bGxwdHI7CiB9CkBAIC05Myw0MSArMTExLDE4IEBAIHZv
aWQgU3RydWN0dXJlU3R1YkluZm86OnJlc2V0KENvZGVCbG9jayoKIHZvaWQgU3RydWN0dXJlU3R1
YkluZm86OnZpc2l0V2Vha1JlZmVyZW5jZXMoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAg
Vk0mIHZtID0gKmNvZGVCbG9jay0+dm0oKTsKLSAgICAKLSAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUp
IHsKLSAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZjoKLSAgICAgICAgaWYgKEhlYXA6Omlz
TWFya2VkKHUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSkpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9s
aXN0OiB7Ci0gICAgICAgIGlmICh1LmdldEJ5SWRMaXN0Lmxpc3QtPnZpc2l0V2Vhayh2bSkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIGFjY2Vz
c19wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWw6Ci0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lk
X3RyYW5zaXRpb25fZGlyZWN0OgotICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQodS5wdXRCeUlk
VHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZS5nZXQoKSkKLSAgICAgICAgICAgICYmIEhlYXA6
OmlzTWFya2VkKHUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLmdldCgpKQotICAgICAgICAg
ICAgJiYgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmZyb21SYXdQb2ludGVyKHUucHV0QnlJ
ZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0KS5hcmVTdGlsbExpdmUoKSkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxh
Y2U6Ci0gICAgICAgIGlmIChIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRSZXBsYWNlLmJhc2VPYmpl
Y3RTdHJ1Y3R1cmUuZ2V0KCkpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfbGlzdDoKLSAgICAgICAgaWYgKHUucHV0QnlJZExp
c3QubGlzdC0+dmlzaXRXZWFrKHZtKSkKKworICAgIHN3aXRjaCAoY2FjaGVUeXBlKSB7CisgICAg
Y2FzZSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxmOgorICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRCeUlk
UmVwbGFjZToKKyAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKHUuYnlJZFNlbGYuYmFzZU9iamVj
dFN0cnVjdHVyZS5nZXQoKSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgYWNjZXNzX2luX2xpc3Q6IHsKLSAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1
Y3R1cmVMaXN0KiBwb2x5bW9ycGhpY1N0cnVjdHVyZXMgPSB1LmluTGlzdC5zdHJ1Y3R1cmVMaXN0
OwotICAgICAgICBpZiAocG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT52aXNpdFdlYWsodS5pbkxpc3Qu
bGlzdFNpemUpKQorICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOgorICAgICAgICBpZiAodS5zdHVi
LT52aXNpdFdlYWsodm0pKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBicmVhazsKLSAg
ICB9CiAgICAgZGVmYXVsdDoKLSAgICAgICAgLy8gVGhlIHJlc3Qgb2YgdGhlIGluc3RydWN0aW9u
cyBkb24ndCByZXF1aXJlIHJlZmVyZW5jZXMsIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8KLSAgICAg
ICAgLy8gZG8gYW55dGhpbmcuCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShy
ZXZpc2lvbiAxODkzMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUg
Ik1hY3JvQXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQu
aCIKICNpbmNsdWRlICJPcGNvZGUuaCIKLSNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzc1N0cnVj
dHVyZUxpc3QuaCIKKyNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgogI2luY2x1ZGUgIlJl
Z2lzdGVyU2V0LmgiCiAjaW5jbHVkZSAiU3BpbGxSZWdpc3RlcnNNb2RlLmgiCiAjaW5jbHVkZSAi
U3RydWN0dXJlLmgiCkBAIC00Miw1NyArNDIsMjUgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBF
TkFCTEUoSklUKQogCi1jbGFzcyBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OwotY2xhc3MgUG9seW1v
cnBoaWNQdXRCeUlkTGlzdDsKK2NsYXNzIFBvbHltb3JwaGljQWNjZXNzOwogCi1lbnVtIEFjY2Vz
c1R5cGUgewotICAgIGFjY2Vzc19nZXRfYnlfaWRfc2VsZiwKLSAgICBhY2Nlc3NfZ2V0X2J5X2lk
X2xpc3QsCi0gICAgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbCwKLSAgICBhY2Nl
c3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0LAotICAgIGFjY2Vzc19wdXRfYnlfaWRfcmVw
bGFjZSwKLSAgICBhY2Nlc3NfcHV0X2J5X2lkX2xpc3QsCi0gICAgYWNjZXNzX3Vuc2V0LAotICAg
IGFjY2Vzc19pbl9saXN0CitlbnVtIGNsYXNzIEFjY2Vzc1R5cGUgOiBpbnQ4X3QgeworICAgIEdl
dCwKKyAgICBQdXQsCisgICAgSW4KIH07CiAKLWlubGluZSBib29sIGlzR2V0QnlJZEFjY2VzcyhB
Y2Nlc3NUeXBlIGFjY2Vzc1R5cGUpCi17Ci0gICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7Ci0gICAg
Y2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGY6Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2xp
c3Q6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci19Ci0gICAgCi1pbmxpbmUgYm9vbCBpc1B1dEJ5SWRBY2Nlc3MoQWNjZXNz
VHlwZSBhY2Nlc3NUeXBlKQotewotICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgewotICAgIGNhc2Ug
YWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoKLSAgICBjYXNlIGFjY2Vzc19wdXRf
YnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6Ci0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxh
Y2U6Ci0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX2xpc3Q6Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWlubGlu
ZSBib29sIGlzSW5BY2Nlc3MoQWNjZXNzVHlwZSBhY2Nlc3NUeXBlKQotewotICAgIHN3aXRjaCAo
YWNjZXNzVHlwZSkgewotICAgIGNhc2UgYWNjZXNzX2luX2xpc3Q6Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19CitlbnVt
IGNsYXNzIENhY2hlVHlwZSA6IGludDhfdCB7CisgICAgVW5zZXQsCisgICAgR2V0QnlJZFNlbGYs
CisgICAgUHV0QnlJZFJlcGxhY2UsCisgICAgU3R1YgorfTsKIAogc3RydWN0IFN0cnVjdHVyZVN0
dWJJbmZvIHsKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbygpCi0gICAgICAgIDogYWNjZXNzVHlwZShh
Y2Nlc3NfdW5zZXQpCisgICAgU3RydWN0dXJlU3R1YkluZm8oQWNjZXNzVHlwZSBhY2Nlc3NUeXBl
KQorICAgICAgICA6IGFjY2Vzc1R5cGUoYWNjZXNzVHlwZSkKKyAgICAgICAgLCBjYWNoZVR5cGUo
Q2FjaGVUeXBlOjpVbnNldCkKICAgICAgICAgLCBzZWVuKGZhbHNlKQogICAgICAgICAsIHJlc2V0
QnlHQyhmYWxzZSkKICAgICAgICAgLCB0b29rU2xvd1BhdGgoZmFsc2UpCkBAIC0xMDAsNTMgKzY4
LDMxIEBAIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAgICAgewogICAgIH0KIAotICAgIHZv
aWQgaW5pdEdldEJ5SWRTZWxmKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBiYXNl
T2JqZWN0U3RydWN0dXJlKQorICAgIHZvaWQgaW5pdEdldEJ5SWRTZWxmKFZNJiB2bSwgSlNDZWxs
KiBvd25lciwgU3RydWN0dXJlKiBiYXNlT2JqZWN0U3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQpCiAgICAgewotICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX2dldF9ieV9pZF9zZWxm
OwotCi0gICAgICAgIHUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5zZXQodm0sIG93
bmVyLCBiYXNlT2JqZWN0U3RydWN0dXJlKTsKLSAgICB9CisgICAgICAgIGNhY2hlVHlwZSA9IENh
Y2hlVHlwZTo6R2V0QnlJZFNlbGY7CiAKLSAgICB2b2lkIGluaXRHZXRCeUlkTGlzdChQb2x5bW9y
cGhpY0dldEJ5SWRMaXN0KiBsaXN0KQotICAgIHsKLSAgICAgICAgYWNjZXNzVHlwZSA9IGFjY2Vz
c19nZXRfYnlfaWRfbGlzdDsKLSAgICAgICAgdS5nZXRCeUlkTGlzdC5saXN0ID0gbGlzdDsKKyAg
ICAgICAgdS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLnNldCh2bSwgb3duZXIsIGJhc2VP
YmplY3RTdHJ1Y3R1cmUpOworICAgICAgICB1LmJ5SWRTZWxmLm9mZnNldCA9IG9mZnNldDsKICAg
ICB9CiAKLSAgICAvLyBQdXRCeUlkKgotCi0gICAgdm9pZCBpbml0UHV0QnlJZFRyYW5zaXRpb24o
Vk0mIHZtLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIHByZXZpb3VzU3RydWN0dXJlLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0
LCBib29sIGlzRGlyZWN0KQorICAgIHZvaWQgaW5pdFB1dEJ5SWRSZXBsYWNlKFZNJiB2bSwgSlND
ZWxsKiBvd25lciwgU3RydWN0dXJlKiBiYXNlT2JqZWN0U3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQpCiAgICAgewotICAgICAgICBpZiAoaXNEaXJlY3QpCi0gICAgICAgICAgICBhY2Nl
c3NUeXBlID0gYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdDsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgYWNjZXNzVHlwZSA9IGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9u
b3JtYWw7CisgICAgICAgIGNhY2hlVHlwZSA9IENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2U7CiAK
LSAgICAgICAgdS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZS5zZXQodm0sIG93
bmVyLCBwcmV2aW91c1N0cnVjdHVyZSk7Ci0gICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24uc3Ry
dWN0dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHUucHV0QnlJZFRyYW5z
aXRpb24ucmF3Q29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0LnJlbGVhc2VSYXdQb2ludGVyKCk7
CisgICAgICAgIHUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBi
YXNlT2JqZWN0U3RydWN0dXJlKTsKKyAgICAgICAgdS5ieUlkU2VsZi5vZmZzZXQgPSBvZmZzZXQ7
CiAgICAgfQogCi0gICAgdm9pZCBpbml0UHV0QnlJZFJlcGxhY2UoVk0mIHZtLCBKU0NlbGwqIG93
bmVyLCBTdHJ1Y3R1cmUqIGJhc2VPYmplY3RTdHJ1Y3R1cmUpCisgICAgdm9pZCBpbml0U3R1Yihz
dGQ6OnVuaXF1ZV9wdHI8UG9seW1vcnBoaWNBY2Nlc3M+IHN0dWIpCiAgICAgewotICAgICAgICBh
Y2Nlc3NUeXBlID0gYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlOwotICAgIAotICAgICAgICB1LnB1
dEJ5SWRSZXBsYWNlLmJhc2VPYmplY3RTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgYmFzZU9iamVj
dFN0cnVjdHVyZSk7CisgICAgICAgIGNhY2hlVHlwZSA9IENhY2hlVHlwZTo6U3R1YjsKKyAgICAg
ICAgdS5zdHViID0gc3R1Yi5yZWxlYXNlKCk7CiAgICAgfQotICAgICAgICAKLSAgICB2b2lkIGlu
aXRQdXRCeUlkTGlzdChQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiBsaXN0KQotICAgIHsKLSAgICAg
ICAgYWNjZXNzVHlwZSA9IGFjY2Vzc19wdXRfYnlfaWRfbGlzdDsKLSAgICAgICAgdS5wdXRCeUlk
TGlzdC5saXN0ID0gbGlzdDsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBpbml0SW5MaXN0KFBvbHlt
b3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogbGlzdCwgaW50IGxpc3RTaXplKQotICAgIHsKLSAg
ICAgICAgYWNjZXNzVHlwZSA9IGFjY2Vzc19pbl9saXN0OwotICAgICAgICB1LmluTGlzdC5zdHJ1
Y3R1cmVMaXN0ID0gbGlzdDsKLSAgICAgICAgdS5pbkxpc3QubGlzdFNpemUgPSBsaXN0U2l6ZTsK
LSAgICB9Ci0gICAgICAgIAorCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGFkZEFjY2Vzc0Nh
c2UoCisgICAgICAgIFZNJiwgQ29kZUJsb2NrKiwgY29uc3QgSWRlbnRpZmllciYsIHN0ZDo6dW5p
cXVlX3B0cjxBY2Nlc3NDYXNlPiBhY2Nlc3NDYXNlKTsKKwogICAgIHZvaWQgcmVzZXQoQ29kZUJs
b2NrKik7CiAKICAgICB2b2lkIGRlcmVmKCk7CkBAIC0xNzIsOCArMTE4LDkgQEAgc3RydWN0IFN0
cnVjdHVyZVN0dWJJbmZvIHsKICAgICAgICAgICAgIHdhdGNocG9pbnRzLCBjb2RlQmxvY2ssIHRo
aXMsIGNvbmRpdGlvbik7CiAgICAgfQogICAgIAotICAgIGludDhfdCBhY2Nlc3NUeXBlOwotICAg
IGJvb2wgc2VlbiA6IDE7CisgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlOworICAgIENhY2hlVHlw
ZSBjYWNoZVR5cGU7CisgICAgYm9vbCBzZWVuOwogICAgIGJvb2wgcmVzZXRCeUdDIDogMTsKICAg
ICBib29sIHRvb2tTbG93UGF0aCA6IDE7CiAKQEAgLTIwMywzNCArMTUwLDEzIEBAIHN0cnVjdCBT
dHJ1Y3R1cmVTdHViSW5mbyB7CiAKICAgICB1bmlvbiB7CiAgICAgICAgIHN0cnVjdCB7Ci0gICAg
ICAgICAgICAvLyBJdCB3b3VsZCBiZSB1bndpc2UgdG8gcHV0IGFueXRoaW5nIGhlcmUsIGFzIGl0
IHdpbGwgc3VyZWx5IGJlIG92ZXJ3cml0dGVuLgotICAgICAgICB9IHVuc2V0OwotICAgICAgICBz
dHJ1Y3QgewotICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IGJhc2VPYmpl
Y3RTdHJ1Y3R1cmU7Ci0gICAgICAgIH0gZ2V0QnlJZFNlbGY7Ci0gICAgICAgIHN0cnVjdCB7Ci0g
ICAgICAgICAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0OwotICAgICAgICB9IGdldEJ5
SWRMaXN0OwotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxT
dHJ1Y3R1cmU+IHByZXZpb3VzU3RydWN0dXJlOwotICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFz
ZTxTdHJ1Y3R1cmU+IHN0cnVjdHVyZTsKLSAgICAgICAgICAgIHZvaWQqIHJhd0NvbmRpdGlvblNl
dDsKLSAgICAgICAgfSBwdXRCeUlkVHJhbnNpdGlvbjsKLSAgICAgICAgc3RydWN0IHsKICAgICAg
ICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBiYXNlT2JqZWN0U3RydWN0dXJlOwot
ICAgICAgICB9IHB1dEJ5SWRSZXBsYWNlOwotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAg
UG9seW1vcnBoaWNQdXRCeUlkTGlzdCogbGlzdDsKLSAgICAgICAgfSBwdXRCeUlkTGlzdDsKLSAg
ICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlz
dCogc3RydWN0dXJlTGlzdDsKLSAgICAgICAgICAgIGludCBsaXN0U2l6ZTsKLSAgICAgICAgfSBp
bkxpc3Q7CisgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CisgICAgICAgIH0gYnlJ
ZFNlbGY7CisgICAgICAgIFBvbHltb3JwaGljQWNjZXNzKiBzdHViOwogICAgIH0gdTsKIAotICAg
IFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7CiAgICAgQ29kZUxvY2F0aW9uQ2Fs
bCBjYWxsUmV0dXJuTG9jYXRpb247Ci0gICAgUmVmUHRyPFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVT
dHViSW5mbz4gd2F0Y2hwb2ludHM7CiB9OwogCiBpbmxpbmUgQ29kZU9yaWdpbiBnZXRTdHJ1Y3R1
cmVTdHViSW5mb0NvZGVPcmlnaW4oU3RydWN0dXJlU3R1YkluZm8mIHN0cnVjdHVyZVN0dWJJbmZv
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShy
ZXZpc2lvbiAxODkzMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVs
cGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC01NjMsNyArNTYzLDcgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gYnJhbmNoMzIoRXF1YWwsIHJlZ3MudGFnR1BSKCksIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpFbXB0eVZhbHVlVGFnKSk7CiAjZW5kaWYKICAgICB9Ci0gICAgCisKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgogICAgIEp1bXAgYnJhbmNoU3RydWN0dXJlKFJlbGF0aW9uYWxDb25kaXRp
b24gY29uZGl0aW9uLCBUIGxlZnRIYW5kU2lkZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAg
ewpAQCAtODMyLDYgKzgzMiwxNSBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAKKyAgICB2b2lk
IGJveEJvb2xlYW5QYXlsb2FkKGJvb2wgdmFsdWUsIEdQUlJlZyBwYXlsb2FkR1BSKQorICAgIHsK
KyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNl
ICsgdmFsdWUpLCBwYXlsb2FkR1BSKTsKKyNlbHNlCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KHZhbHVlKSwgcGF5bG9hZEdQUik7CisjZW5kaWYKKyAgICB9CisKICAgICB2b2lkIGJveEJvb2xl
YW4oR1BSUmVnIGJvb2xHUFIsIEpTVmFsdWVSZWdzIGJveGVkUmVncykKICAgICB7CiAgICAgICAg
IGJveEJvb2xlYW5QYXlsb2FkKGJvb2xHUFIsIGJveGVkUmVncy5wYXlsb2FkR1BSKCkpOwpAQCAt
ODM5LDYgKzg0OCwxNyBAQCBwdWJsaWM6CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkJvb2xlYW5UYWcpLCBib3hlZFJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCiAgICAgfQorCisg
ICAgdm9pZCBib3hJbnQzMihHUFJSZWcgaW50R1BSLCBKU1ZhbHVlUmVncyBib3hlZFJlZ3MpCisg
ICAgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIGppdC5tb3ZlKGludEdQUiwgYm94ZWRS
ZWdzLmdwcigpKTsKKyAgICAgICAgaml0Lm9yNjQoVHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIp
LCBib3hlZFJlZ3MuZ3ByKCkpOworI2Vsc2UKKyAgICAgICAgaml0Lm1vdmUoaW50R1BSLCBib3hl
ZFJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgaml0Lm1vdmUoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkludDMyVGFnKSwgYm94ZWRSZWdzLnRhZ0dQUigpKTsKKyNlbmRpZgorICAgIH0KICAgICAK
ICAgICB2b2lkIGNhbGxFeGNlcHRpb25GdXp6KCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE4OTMyNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE4Nyw3ICsxODcsNiBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkdlCiAgICAgICAgIHN0dWJJbmZvLT5zZWVuID0gdHJ1ZTsKICAgICAKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGhhc1Jlc3VsdD8gc2xvdC5nZXRWYWx1ZShleGVjLCBpZGVudCkgOiBqc1Vu
ZGVmaW5lZCgpKTsKLQogfQogCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkluT3B0aW1pemUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8s
IEpTQ2VsbCogYmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIGtleSkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMTg5MzI0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI5LDM1ICsxMjks
NiBAQCBzdGF0aWMgdm9pZCByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoCiAjZW5kaWYKIH0KIAotc3Rh
dGljIHZvaWQgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigKLSAgICBjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvLAotICAgIENDYWxsSGVscGVycyYgaml0LCBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgR1BSUmVnIHNjcmF0Y2hHUFIpCi17Ci0gICAg
aWYgKGNvbmRpdGlvbi5pc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50
KCkpIHsKLSAgICAgICAgY29uZGl0aW9uLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKS0+YWRkVHJhbnNp
dGlvbldhdGNocG9pbnQoCi0gICAgICAgICAgICBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVC
bG9jaywgY29uZGl0aW9uKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IGNvbmRpdGlvbi5vYmplY3QoKS0+c3RydWN0dXJlKCk7Ci0gICAgUkVM
RUFTRV9BU1NFUlQoY29uZGl0aW9uLnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eUFzc3VtaW5nSW1w
dXJlUHJvcGVydHlXYXRjaHBvaW50KHN0cnVjdHVyZSkpOwotICAgIGppdC5tb3ZlKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGNvbmRpdGlvbi5vYmplY3QoKSksIHNjcmF0Y2hHUFIpOwot
ICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoCi0gICAgICAgIGppdC5icmFuY2hTdHJ1Y3R1cmUoCi0g
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCi0gICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCBzdHJ1Y3R1cmUpKTsKLX0KLQotc3RhdGljIHZvaWQgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbnMoCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIHNldCwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywKLSAgICBDQ2FsbEhl
bHBlcnMmIGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEdQUlJl
ZyBzY3JhdGNoR1BSKQotewotICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24m
IGNvbmRpdGlvbiA6IHNldCkgewotICAgICAgICBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9u
KAotICAgICAgICAgICAgY29uZGl0aW9uLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBqaXQsIGZhaWx1
cmVDYXNlcywgc2NyYXRjaEdQUik7Ci0gICAgfQotfQotCiBzdGF0aWMgdm9pZCByZXBsYWNlV2l0
aEp1bXAoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25zdCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgdGFyZ2V0KQogewogICAgIGlmIChNYWNyb0Fzc2VtYmxlcjo6Y2FuSnVtcFJlcGxhY2VQ
YXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaCgpKSB7CkBAIC0xNzUsNTIgKzE0Niw2IEBAIHN0YXRp
YyB2b2lkIHJlcGxhY2VXaXRoSnVtcChTdHJ1Y3R1cmVTdHUKICAgICAgICAgQ29kZUxvY2F0aW9u
TGFiZWwodGFyZ2V0KSk7CiB9CiAKLXN0YXRpYyB2b2lkIGVtaXRSZXN0b3JlU2NyYXRjaChNYWNy
b0Fzc2VtYmxlciYgc3R1YkppdCwgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgR1BSUmVnIHNj
cmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpKdW1wJiBzdWNjZXNzLCBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCYgZmFpbCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlcykKLXsKLSAg
ICBpZiAobmVlZFRvUmVzdG9yZVNjcmF0Y2gpIHsKLSAgICAgICAgc3R1YkppdC5wb3BUb1Jlc3Rv
cmUoc2NyYXRjaEdQUik7Ci0gICAgICAgIAotICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1w
KCk7Ci0gICAgICAgIAotICAgICAgICAvLyBsaW5rIGZhaWx1cmUgY2FzZXMgaGVyZSwgc28gd2Ug
Y2FuIHBvcCBzY3JhdGNoR1BSLCBhbmQgdGhlbiBqdW1wIGJhY2suCi0gICAgICAgIGZhaWx1cmVD
YXNlcy5saW5rKCZzdHViSml0KTsKLSAgICAgICAgCi0gICAgICAgIHN0dWJKaXQucG9wVG9SZXN0
b3JlKHNjcmF0Y2hHUFIpOwotICAgICAgICAKLSAgICAgICAgZmFpbCA9IHN0dWJKaXQuanVtcCgp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1
bXAoKTsKLX0KLQotc3RhdGljIHZvaWQgbGlua1Jlc3RvcmVTY3JhdGNoKExpbmtCdWZmZXImIHBh
dGNoQnVmZmVyLCBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBzdWNjZXNzLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsLCBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QgZmFpbHVyZUNhc2VzLCBDb2RlTG9jYXRpb25MYWJlbCBzdWNjZXNzTGFiZWwsIENvZGVM
b2NhdGlvbkxhYmVsIHNsb3dDYXNlQmVnaW4pCi17Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzdWNj
ZXNzLCBzdWNjZXNzTGFiZWwpOwotICAgICAgICAKLSAgICBpZiAobmVlZFRvUmVzdG9yZVNjcmF0
Y2gpIHsKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsLCBzbG93Q2FzZUJlZ2luKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICAvLyBsaW5rIGZhaWx1cmUgY2FzZXMgZGly
ZWN0bHkgYmFjayB0byBub3JtYWwgcGF0aAotICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNh
c2VzLCBzbG93Q2FzZUJlZ2luKTsKLX0KLQotc3RhdGljIHZvaWQgbGlua1Jlc3RvcmVTY3JhdGNo
KExpbmtCdWZmZXImIHBhdGNoQnVmZmVyLCBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3MsIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGZhaWwsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJl
Q2FzZXMpCi17Ci0gICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0
b3JlU2NyYXRjaCwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzLCBzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUp
LCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRj
aC5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7Ci19Ci0KLWVudW0gQnlJZFN0dWJLaW5kIHsKLSAgICBH
ZXRWYWx1ZSwKLSAgICBHZXRVbmRlZmluZWQsCi0gICAgQ2FsbEdldHRlciwKLSAgICBDYWxsQ3Vz
dG9tR2V0dGVyLAotICAgIENhbGxTZXR0ZXIsCi0gICAgQ2FsbEN1c3RvbVNldHRlcgotfTsKLQog
c3RhdGljIGNvbnN0IGNoYXIqIHRvU3RyaW5nKEJ5SWRTdHViS2luZCBraW5kKQogewogICAgIHN3
aXRjaCAoa2luZCkgewpAQCAtMjc3LDMxMiArMjAyLDYgQEAgc3RhdGljIEZ1bmN0aW9uUHRyIGN1
c3RvbUZvcihjb25zdCBQdXRQcgogICAgIHJldHVybiBGdW5jdGlvblB0cihzbG90LmN1c3RvbVNl
dHRlcigpKTsKIH0KIAotc3RhdGljIGJvb2wgZ2VuZXJhdGVCeUlkU3R1YigKLSAgICBFeGVjU3Rh
dGUqIGV4ZWMsIEJ5SWRTdHViS2luZCBraW5kLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsCi0gICAgRnVuY3Rpb25QdHIgY3VzdG9tLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
IGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCi0gICAgSlNP
YmplY3QqIGFsdGVybmF0ZUJhc2UsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIGJvb2wgbG9hZFRhcmdldEZyb21Qcm94eSwKLSAgICBXYXRjaHBvaW50U2V0KiB3
YXRjaHBvaW50U2V0LCBDb2RlTG9jYXRpb25MYWJlbCBzdWNjZXNzTGFiZWwsIENvZGVMb2NhdGlv
bkxhYmVsIHNsb3dDYXNlTGFiZWwsCi0gICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJv
dXRpbmUpCi17Ci0gICAgQVNTRVJUKGNvbmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRp
dHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKTsKLSAgICAKLSAgICBWTSogdm0g
PSAmZXhlYy0+dm0oKTsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4o
c3R1YkluZm8ucGF0Y2guYmFzZUdQUik7Ci0gICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzID0gSlNW
YWx1ZVJlZ3MoCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgc3RhdGljX2Nhc3Q8R1BS
UmVnPihzdHViSW5mby5wYXRjaC52YWx1ZVRhZ0dQUiksCi0jZW5kaWYKLSAgICAgICAgc3RhdGlj
X2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZUdQUikpOwotICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gVGVtcFJlZ2lzdGVyU2V0KHN0dWJJbmZvLnBhdGNoLnVzZWRSZWdpc3RlcnMpLmdl
dEZyZWVHUFIoKTsKLSAgICBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gc2NyYXRjaEdQUiA9
PSBJbnZhbGlkR1BSUmVnOwotICAgIFJFTEVBU0VfQVNTRVJUKCFuZWVkVG9SZXN0b3JlU2NyYXRj
aCB8fCAoa2luZCA9PSBHZXRWYWx1ZSB8fCBraW5kID09IEdldFVuZGVmaW5lZCkpOwotICAgIAot
ICAgIENDYWxsSGVscGVycyBzdHViSml0KCZleGVjLT52bSgpLCBleGVjLT5jb2RlQmxvY2soKSk7
Ci0gICAgaWYgKG5lZWRUb1Jlc3RvcmVTY3JhdGNoKSB7Ci0gICAgICAgIHNjcmF0Y2hHUFIgPSBB
c3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoCi0gICAgICAgICAgICBiYXNlR1BSLCB2
YWx1ZVJlZ3MudGFnR1BSKCksIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwotICAgICAgICBzdHVi
Sml0LnB1c2hUb1NhdmUoc2NyYXRjaEdQUik7Ci0gICAgICAgIG5lZWRUb1Jlc3RvcmVTY3JhdGNo
ID0gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1
cmVDYXNlczsKLQotICAgIEdQUlJlZyBiYXNlRm9yR2V0R1BSOwotICAgIGlmIChsb2FkVGFyZ2V0
RnJvbVByb3h5KSB7Ci0gICAgICAgIGJhc2VGb3JHZXRHUFIgPSB2YWx1ZVJlZ3MucGF5bG9hZEdQ
UigpOwotICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoOCgKLSAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgCi0gICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgCi0g
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKFB1cmVGb3J3YXJkaW5nUHJv
eHlUeXBlKSkpOwotCi0gICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBKU1Byb3h5Ojp0YXJnZXRPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAg
ICAgICAKLSAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFN0cnVjdHVy
ZSgKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgCi0gICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLAotICAgICAgICAgICAgc3RydWN0dXJlKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
YmFzZUZvckdldEdQUiA9IGJhc2VHUFI7Ci0KLSAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChz
dHViSml0LmJyYW5jaFN0cnVjdHVyZSgKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlRm9yR2V0R1BS
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCAKLSAgICAgICAgICAgIHN0cnVjdHVyZSkp
OwotICAgIH0KLQotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7
Ci0gICAgaWYgKHN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIHx8IGNv
bmRpdGlvblNldC5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpCi0gICAgICAgIHZtLT5y
ZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHN0dWJJbmZv
LmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7Ci0KLSAgICBpZiAod2F0Y2hwb2ludFNldCkKLSAg
ICAgICAgd2F0Y2hwb2ludFNldC0+YWRkKHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2Nr
KSk7Ci0KLSAgICBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9ucygKLSAgICAgICAgY29uZGl0
aW9uU2V0LCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHViSml0LCBmYWlsdXJlQ2FzZXMsIHNjcmF0
Y2hHUFIpOwotCi0gICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgewotICAgICAgICBTdHJ1
Y3R1cmUqIGN1cnJTdHJ1Y3R1cmU7Ci0gICAgICAgIGlmIChjb25kaXRpb25TZXQuaXNFbXB0eSgp
KQotICAgICAgICAgICAgY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgY3VyclN0cnVjdHVyZSA9IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlv
bigpLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgY3VyclN0cnVjdHVyZS0+c3RhcnRX
YXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKCp2bSwgb2Zmc2V0KTsKLSAgICB9Ci0gICAg
Ci0gICAgR1BSUmVnIGJhc2VGb3JBY2Nlc3NHUFIgPSBJbnZhbGlkR1BSUmVnOwotICAgIGlmIChr
aW5kICE9IEdldFVuZGVmaW5lZCkgewotICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc0VtcHR5
KCkpIHsKLSAgICAgICAgICAgIC8vIFdlIGNvdWxkIGhhdmUgY2xvYmJlcmVkIHNjcmF0Y2hHUFIg
ZWFybGllciwgc28gd2UgaGF2ZSB0byByZWxvYWQgZnJvbSBiYXNlR1BSIHRvIGdldCB0aGUgdGFy
Z2V0LgotICAgICAgICAgICAgaWYgKGxvYWRUYXJnZXRGcm9tUHJveHkpCi0gICAgICAgICAgICAg
ICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTUHJv
eHk6OnRhcmdldE9mZnNldCgpKSwgYmFzZUZvckdldEdQUik7Ci0gICAgICAgICAgICBzdHViSml0
Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoYWx0ZXJuYXRlQmFzZSksIHNjcmF0
Y2hHUFIpOwotICAgICAgICAgICAgYmFzZUZvckFjY2Vzc0dQUiA9IHNjcmF0Y2hHUFI7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBGb3IgcHJveHkgb2JqZWN0cywgd2UgbmVlZCB0
byBkbyBhbGwgdGhlIFN0cnVjdHVyZSBjaGVja3MgYmVmb3JlIG1vdmluZyB0aGUgYmFzZUdQUiBp
bnRvCi0gICAgICAgICAgICAvLyBiYXNlRm9yR2V0R1BSIGJlY2F1c2UgaWYgd2UgZmFpbCBhbnkg
b2YgdGhlIGNoZWNrcyB0aGVuIHdlIHdvdWxkIGhhdmUgdGhlIHdyb25nIHZhbHVlIGluIGJhc2VH
UFIKLSAgICAgICAgICAgIC8vIG9uIHRoZSBzbG93IHBhdGguCi0gICAgICAgICAgICBpZiAobG9h
ZFRhcmdldEZyb21Qcm94eSkKLSAgICAgICAgICAgICAgICBzdHViSml0Lm1vdmUoc2NyYXRjaEdQ
UiwgYmFzZUZvckdldEdQUik7Ci0gICAgICAgICAgICBiYXNlRm9yQWNjZXNzR1BSID0gYmFzZUZv
ckdldEdQUjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEdQUlJlZyBsb2FkZWRWYWx1ZUdQUiA9
IEludmFsaWRHUFJSZWc7Ci0gICAgaWYgKGtpbmQgPT0gR2V0VW5kZWZpbmVkKQotICAgICAgICBz
dHViSml0Lm1vdmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgdmFsdWVSZWdzKTsKLSAgICBl
bHNlIGlmIChraW5kICE9IENhbGxDdXN0b21HZXR0ZXIgJiYga2luZCAhPSBDYWxsQ3VzdG9tU2V0
dGVyKSB7Ci0gICAgICAgIGlmIChraW5kID09IEdldFZhbHVlKQotICAgICAgICAgICAgbG9hZGVk
VmFsdWVHUFIgPSB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBsb2FkZWRWYWx1ZUdQUiA9IHNjcmF0Y2hHUFI7Ci0gICAgICAgIAotICAgICAgICBHUFJS
ZWcgc3RvcmFnZUdQUjsKLSAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNldCkpCi0gICAg
ICAgICAgICBzdG9yYWdlR1BSID0gYmFzZUZvckFjY2Vzc0dQUjsKLSAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUZv
ckFjY2Vzc0dQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgbG9hZGVkVmFsdWVHUFIp
OwotICAgICAgICAgICAgc3RvcmFnZUdQUiA9IGxvYWRlZFZhbHVlR1BSOwotICAgICAgICB9Ci0g
ICAgICAgIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHN0dWJKaXQubG9hZDY0KE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKG9mZnNl
dCkpLCBsb2FkZWRWYWx1ZUdQUik7Ci0jZWxzZQotICAgICAgICBpZiAoa2luZCA9PSBHZXRWYWx1
ZSkKLSAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
b3JhZ2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKG9mZnNldCkgKyBUYWdPZmZzZXQpLCB2YWx1
ZVJlZ3MudGFnR1BSKCkpOwotICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShvZmZzZXQpICsgUGF5bG9h
ZE9mZnNldCksIGxvYWRlZFZhbHVlR1BSKTsKLSNlbmRpZgotICAgIH0KLQotICAgIC8vIFN0dWZm
IGZvciBjdXN0b20gZ2V0dGVycy4KLSAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBvcGVyYXRpb25D
YWxsOwotICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGhhbmRsZXJDYWxsOwotCi0gICAgLy8gU3R1
ZmYgZm9yIEpTIGdldHRlcnMuCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBhZGRy
ZXNzT2ZMaW5rRnVuY3Rpb25DaGVjazsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBmYXN0UGF0
aENhbGw7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgc2xvd1BhdGhDYWxsOwotICAgIHN0ZDo6
dW5pcXVlX3B0cjxDYWxsTGlua0luZm8+IGNhbGxMaW5rSW5mbzsKLQotICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIHN1Y2Nlc3MsIGZhaWw7Ci0gICAgaWYgKGtpbmQgIT0gR2V0VmFsdWUgJiYga2lu
ZCAhPSBHZXRVbmRlZmluZWQpIHsKLSAgICAgICAgLy8gTmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3
aGVuZXZlciB0aGlzIGNhbGwgaXMgbWFkZSBpbiB0aGUgZnV0dXJlLCB3ZSByZW1lbWJlciB0aGUK
LSAgICAgICAgLy8gcGxhY2UgdGhhdCB3ZSBtYWRlIGl0IGZyb20uIEl0IGp1c3Qgc28gaGFwcGVu
cyB0byBiZSB0aGUgcGxhY2UgdGhhdCB3ZSBhcmUgYXQKLSAgICAgICAgLy8gcmlnaHQgbm93IQot
ICAgICAgICBzdHViSml0LnN0b3JlMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzdHVi
SW5mby5jYWxsU2l0ZUluZGV4LmJpdHMoKSksCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRh
Z0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQp
KSk7Ci0KLSAgICAgICAgaWYgKGtpbmQgPT0gQ2FsbEdldHRlciB8fCBraW5kID09IENhbGxTZXR0
ZXIpIHsKLSAgICAgICAgICAgIC8vIENyZWF0ZSBhIEpTIGNhbGwgdXNpbmcgYSBKUyBjYWxsIGlu
bGluZSBjYWNoZS4gQXNzdW1lIHRoYXQ6Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8g
LSBTUCBpcyBhbGlnbmVkIGFuZCByZXByZXNlbnRzIHRoZSBleHRlbnQgb2YgdGhlIGNhbGxpbmcg
Y29tcGlsZXIncyBzdGFjayB1c2FnZS4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyAt
IEZQIGlzIHNldCBjb3JyZWN0bHkgKGkuZS4gaXQgcG9pbnRzIHRvIHRoZSBjYWxsZXIncyBjYWxs
IGZyYW1lIGhlYWRlcikuCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gLSBTUCAtIEZQ
IGlzIGFuIGFsaWduZWQgZGlmZmVyZW5jZS4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAv
LyAtIEFueSBieXRlIGJldHdlZW4gRlAgKGV4Y2x1c2l2ZSkgYW5kIFNQIChpbmNsdXNpdmUpIGNv
dWxkIGJlIGxpdmUgaW4gdGhlIGNhbGxpbmcKLSAgICAgICAgICAgIC8vICAgY29kZS4KLSAgICAg
ICAgICAgIC8vCi0gICAgICAgICAgICAvLyBUaGVyZWZvcmUsIHdlIHRlbXBvcmFyaWx5IGdyb3cg
dGhlIHN0YWNrIGZvciB0aGUgcHVycG9zZSBvZiB0aGUgY2FsbCBhbmQgdGhlbgotICAgICAgICAg
ICAgLy8gc2hyaW5rIGl0IGFmdGVyLgotICAgICAgICAgICAgCi0gICAgICAgICAgICBjYWxsTGlu
a0luZm8gPSBzdGQ6Om1ha2VfdW5pcXVlPENhbGxMaW5rSW5mbz4oKTsKLSAgICAgICAgICAgIGNh
bGxMaW5rSW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgc3R1YkluZm8uY29kZU9y
aWdpbiwgbG9hZGVkVmFsdWVHUFIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QgZG9uZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gVGhl
cmUgaXMgYSAndGhpcycgYXJndW1lbnQgYnV0IG5vdGhpbmcgZWxzZS4KLSAgICAgICAgICAgIHVu
c2lnbmVkIG51bWJlck9mUGFyYW1ldGVycyA9IDE7Ci0gICAgICAgICAgICAvLyAuLi4gdW5sZXNz
IHdlJ3JlIGNhbGxpbmcgYSBzZXR0ZXIuCi0gICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsU2V0
dGVyKQotICAgICAgICAgICAgICAgIG51bWJlck9mUGFyYW1ldGVycysrOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICAvLyBHZXQgdGhlIGFjY2Vzc29yOyBpZiB0aGVyZSBhaW4ndCBvbmUgdGhl
biB0aGUgcmVzdWx0IGlzIGpzVW5kZWZpbmVkKCkuCi0gICAgICAgICAgICBpZiAoa2luZCA9PSBD
YWxsU2V0dGVyKSB7Ci0gICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKAotICAgICAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhsb2FkZWRWYWx1ZUdQUiwgR2V0dGVy
U2V0dGVyOjpvZmZzZXRPZlNldHRlcigpKSwKLSAgICAgICAgICAgICAgICAgICAgbG9hZGVkVmFs
dWVHUFIpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzdHViSml0Lmxv
YWRQdHIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGxvYWRl
ZFZhbHVlR1BSLCBHZXR0ZXJTZXR0ZXI6Om9mZnNldE9mR2V0dGVyKCkpLAotICAgICAgICAgICAg
ICAgICAgICBsb2FkZWRWYWx1ZUdQUik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCByZXR1cm5VbmRlZmluZWQgPSBzdHViSml0LmJyYW5jaFRlc3RQdHIo
Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGxvYWRlZFZhbHVlR1BSKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZSZWdzRm9yQ2FsbCA9
Ci0gICAgICAgICAgICAgICAgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIG51bWJlck9m
UGFyYW1ldGVyczsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZC
eXRlc0ZvckNhbGwgPQotICAgICAgICAgICAgICAgIG51bWJlck9mUmVnc0ZvckNhbGwgKiBzaXpl
b2YoUmVnaXN0ZXIpIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICB1bnNpZ25lZCBhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwgPQotICAgICAg
ICAgICAgICAgIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCks
IG51bWJlck9mQnl0ZXNGb3JDYWxsKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3R1Ykpp
dC5zdWJQdHIoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihh
bGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwpLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzIGNhbGxlZUZyYW1lID0gTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVy
LAotICAgICAgICAgICAgICAgIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJG
cmFtZUFuZFBDKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzdHViSml0LnN0b3JlMzIo
Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihudW1iZXJPZlBh
cmFtZXRlcnMpLAotICAgICAgICAgICAgICAgIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoCi0gICAg
ICAgICAgICAgICAgICAgIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQgKiBzaXplb2YoUmVnaXN0ZXIp
ICsgUGF5bG9hZE9mZnNldCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzdHViSml0LnN0
b3JlQ2VsbCgKLSAgICAgICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUiwgY2FsbGVlRnJhbWUud2l0
aE9mZnNldChKU1N0YWNrOjpDYWxsZWUgKiBzaXplb2YoUmVnaXN0ZXIpKSk7Ci0KLSAgICAgICAg
ICAgIHN0dWJKaXQuc3RvcmVDZWxsKAotICAgICAgICAgICAgICAgIGJhc2VGb3JHZXRHUFIsCi0g
ICAgICAgICAgICAgICAgY2FsbGVlRnJhbWUud2l0aE9mZnNldCgKLSAgICAgICAgICAgICAgICAg
ICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0
ZXIpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChraW5kID09IENhbGxTZXR0ZXIp
IHsKLSAgICAgICAgICAgICAgICBzdHViSml0LnN0b3JlVmFsdWUoCi0gICAgICAgICAgICAgICAg
ICAgIHZhbHVlUmVncywKLSAgICAgICAgICAgICAgICAgICAgY2FsbGVlRnJhbWUud2l0aE9mZnNl
dCgKLSAgICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEp
Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93Q2FzZSA9IHN0dWJKaXQu
YnJhbmNoUHRyV2l0aFBhdGNoKAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgbG9hZGVkVmFsdWVHUFIsIGFkZHJlc3NPZkxpbmtGdW5jdGlvbkNoZWNrLAotICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgZmFzdFBhdGhDYWxsID0gc3R1YkppdC5uZWFyQ2FsbCgpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBzdHViSml0LmFkZFB0cigKLSAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2FsbCksCi0g
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAg
ICAgICAgICAgIGlmIChraW5kID09IENhbGxHZXR0ZXIpCi0gICAgICAgICAgICAgICAgc3R1Ykpp
dC5zZXR1cFJlc3VsdHModmFsdWVSZWdzKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZG9u
ZS5hcHBlbmQoc3R1YkppdC5qdW1wKCkpOwotICAgICAgICAgICAgc2xvd0Nhc2UubGluaygmc3R1
YkppdCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN0dWJKaXQubW92ZShsb2FkZWRWYWx1
ZUdQUiwgR1BSSW5mbzo6cmVnVDApOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgICAg
ICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxs
VGFnKSwgR1BSSW5mbzo6cmVnVDEpOwotI2VuZGlmCi0gICAgICAgICAgICBzdHViSml0Lm1vdmUo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvLmdldCgpKSwgR1BSSW5m
bzo6cmVnVDIpOwotICAgICAgICAgICAgc2xvd1BhdGhDYWxsID0gc3R1YkppdC5uZWFyQ2FsbCgp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzdHViSml0LmFkZFB0cigKLSAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGFsaWduZWROdW1iZXJPZkJ5dGVzRm9y
Q2FsbCksCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKLSAgICAgICAgICAgIGlmIChraW5kID09IENhbGxHZXR0ZXIpCi0gICAgICAgICAgICAg
ICAgc3R1YkppdC5zZXR1cFJlc3VsdHModmFsdWVSZWdzKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgZG9uZS5hcHBlbmQoc3R1YkppdC5qdW1wKCkpOwotICAgICAgICAgICAgcmV0dXJuVW5k
ZWZpbmVkLmxpbmsoJnN0dWJKaXQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoa2lu
ZCA9PSBDYWxsR2V0dGVyKQotICAgICAgICAgICAgICAgIHN0dWJKaXQubW92ZVRydXN0ZWRWYWx1
ZShqc1VuZGVmaW5lZCgpLCB2YWx1ZVJlZ3MpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBk
b25lLmxpbmsoJnN0dWJKaXQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gZ2V0
dGVyOiBFbmNvZGVkSlNWYWx1ZSAoKkdldFZhbHVlRnVuYykoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
IHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSk7Ci0gICAg
ICAgICAgICAvLyBzZXR0ZXI6IHZvaWQgKCpQdXRWYWx1ZUZ1bmMpKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiBiYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB2YWx1
ZSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIGlmIChraW5kID09IENhbGxDdXN0
b21HZXR0ZXIpCi0gICAgICAgICAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoYmFzZUZvckFjY2Vzc0dQUiwgYmFzZUZvckdldEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIocHJvcGVydHlOYW1lLmltcGwoKSkpOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VGb3JB
Y2Nlc3NHUFIsIGJhc2VGb3JHZXRHUFIsIHZhbHVlUmVncy5ncHIoKSk7Ci0jZWxzZQotICAgICAg
ICAgICAgaWYgKGtpbmQgPT0gQ2FsbEN1c3RvbUdldHRlcikKLSAgICAgICAgICAgICAgICBzdHVi
Sml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlRm9yQWNjZXNzR1BSLCBiYXNlRm9y
R2V0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihwcm9wZXJ0eU5hbWUuaW1wbCgpKSk7Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoYmFzZUZvckFjY2Vzc0dQUiwgYmFzZUZvckdldEdQUiwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwg
dmFsdWVSZWdzLnRhZ0dQUigpKTsKLSNlbmRpZgotICAgICAgICAgICAgc3R1YkppdC5zdG9yZVB0
cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgJnZtLT50b3BDYWxsRnJhbWUpOwotCi0gICAg
ICAgICAgICBvcGVyYXRpb25DYWxsID0gc3R1YkppdC5jYWxsKCk7Ci0gICAgICAgICAgICBpZiAo
a2luZCA9PSBDYWxsQ3VzdG9tR2V0dGVyKQotICAgICAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBS
ZXN1bHRzKHZhbHVlUmVncyk7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub0V4
Y2VwdGlvbiA9IHN0dWJKaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKENDYWxsSGVscGVyczo6SW52ZXJ0
ZWRFeGNlcHRpb25DaGVjayk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN0dWJKaXQuc2V0
dXBBcmd1bWVudHMoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHZtKSwgR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIpOwotICAgICAgICAgICAgaGFuZGxlckNhbGwgPSBzdHViSml0LmNhbGwo
KTsKLSAgICAgICAgICAgIHN0dWJKaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBub0V4Y2VwdGlvbi5saW5rKCZzdHViSml0KTsKLSAgICAgICAg
fQotICAgIH0KLSAgICBlbWl0UmVzdG9yZVNjcmF0Y2goc3R1YkppdCwgbmVlZFRvUmVzdG9yZVNj
cmF0Y2gsIHNjcmF0Y2hHUFIsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcyk7Ci0gICAgCi0g
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIHN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygp
LCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwotICAgIGlmIChwYXRjaEJ1ZmZlci5kaWRGYWlsVG9B
bGxvY2F0ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgbGlua1Jlc3RvcmVT
Y3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc3VjY2VzcywgZmFpbCwg
ZmFpbHVyZUNhc2VzLCBzdWNjZXNzTGFiZWwsIHNsb3dDYXNlTGFiZWwpOwotICAgIGlmIChraW5k
ID09IENhbGxDdXN0b21HZXR0ZXIgfHwga2luZCA9PSBDYWxsQ3VzdG9tU2V0dGVyKSB7Ci0gICAg
ICAgIHBhdGNoQnVmZmVyLmxpbmsob3BlcmF0aW9uQ2FsbCwgY3VzdG9tKTsKLSAgICAgICAgcGF0
Y2hCdWZmZXIubGluayhoYW5kbGVyQ2FsbCwgbG9va3VwRXhjZXB0aW9uSGFuZGxlcik7Ci0gICAg
fSBlbHNlIGlmIChraW5kID09IENhbGxHZXR0ZXIgfHwga2luZCA9PSBDYWxsU2V0dGVyKSB7Ci0g
ICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucyhwYXRjaEJ1ZmZlci5sb2NhdGlv
bk9mTmVhckNhbGwoc2xvd1BhdGhDYWxsKSwKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxvY2F0
aW9uT2YoYWRkcmVzc09mTGlua0Z1bmN0aW9uQ2hlY2spLAotICAgICAgICAgICAgcGF0Y2hCdWZm
ZXIubG9jYXRpb25PZk5lYXJDYWxsKGZhc3RQYXRoQ2FsbCkpOwotCi0gICAgICAgIHBhdGNoQnVm
ZmVyLmxpbmsoCi0gICAgICAgICAgICBzbG93UGF0aENhbGwsIENvZGVMb2NhdGlvbkxhYmVsKHZt
LT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwotICAgIH0KLSAg
ICAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZSA9IEZJTkFMSVpFX0NPREVfRk9SKAot
ICAgICAgICBleGVjLT5jb2RlQmxvY2soKSwgcGF0Y2hCdWZmZXIsCi0gICAgICAgICgiJXMgYWNj
ZXNzIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAgICAgdG9TdHJpbmco
a2luZCksIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwKLSAgICAgICAgICAg
IHN1Y2Nlc3NMYWJlbC5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgCi0gICAgaWYgKGtpbmQg
PT0gQ2FsbEdldHRlciB8fCBraW5kID09IENhbGxTZXR0ZXIpCi0gICAgICAgIHN0dWJSb3V0aW5l
ID0gYWRvcHRSZWYobmV3IEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lKGNvZGUsICp2bSwgV1RG
Ojptb3ZlKGNhbGxMaW5rSW5mbykpKTsKLSAgICBlbHNlCi0gICAgICAgIHN0dWJSb3V0aW5lID0g
Y3JlYXRlSklUU3R1YlJvdXRpbmUoY29kZSwgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpLCB0cnVlKTsKLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogZW51bSBJbmxpbmVDYWNo
ZUFjdGlvbiB7CiAgICAgR2l2ZVVwT25DYWNoZSwKICAgICBSZXRyeUNhY2hlTGF0ZXIsCkBAIC02
MTYsMTMyICsyMzUsOTYgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0QnlJ
RAogICAgIGlmIChPcHRpb25zOjpmb3JjZUlDRmFpbHVyZSgpKQogICAgICAgICByZXR1cm4gR2l2
ZVVwT25DYWNoZTsKICAgICAKLSAgICAvLyBGSVhNRTogV3JpdGUgYSB0ZXN0IHRoYXQgcHJvdmVz
IHdlIG5lZWQgdG8gY2hlY2sgZm9yIHJlY3Vyc2lvbiBoZXJlIGp1c3QKLSAgICAvLyBsaWtlIHRo
ZSBpbnRlcnByZXRlciBkb2VzLCB0aGVuIGFkZCBhIGNoZWNrIGZvciByZWN1cnNpb24uCisgICAg
Ly8gRklYTUU6IENhY2hlIHByb3BlcnR5IGFjY2VzcyBmb3IgaW1tZWRpYXRlcy4KKyAgICBpZiAo
IWJhc2VWYWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAKICAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOwotCi0gICAgaWYgKChpc0pTQXJyYXkoYmFzZVZhbHVlKSB8fCBpc0pTU3Ry
aW5nKGJhc2VWYWx1ZSkpICYmIHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
bGVuZ3RoKSB7Ci0gICAgICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihz
dHViSW5mby5wYXRjaC5iYXNlR1BSKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBH
UFJSZWcgcmVzdWx0VGFnR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52
YWx1ZVRhZ0dQUik7Ci0jZW5kaWYKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHN0YXRpY19j
YXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVHUFIpOwotCi0gICAgICAgIE1hY3JvQXNz
ZW1ibGVyIHN0dWJKaXQ7CisgICAgU2NyaXB0RXhlY3V0YWJsZSogb3duZXIgPSBjb2RlQmxvY2st
Pm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAKLSAg
ICAgICAgaWYgKGlzSlNBcnJheShiYXNlVmFsdWUpKSB7Ci0gICAgICAgICAgICBHUFJSZWcgc2Ny
YXRjaEdQUiA9IFRlbXBSZWdpc3RlclNldChzdHViSW5mby5wYXRjaC51c2VkUmVnaXN0ZXJzKS5n
ZXRGcmVlR1BSKCk7Ci0gICAgICAgICAgICBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gZmFs
c2U7Ci0KLSAgICAgICAgICAgIGlmIChzY3JhdGNoR1BSID09IEludmFsaWRHUFJSZWcpIHsKLSNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBBc3NlbWJseUhl
bHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgcmVzdWx0R1BSKTsKLSNlbHNlCi0gICAg
ICAgICAgICAgICAgc2NyYXRjaEdQUiA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQ
UihiYXNlR1BSLCByZXN1bHRHUFIsIHJlc3VsdFRhZ0dQUik7Ci0jZW5kaWYKLSAgICAgICAgICAg
ICAgICBzdHViSml0LnB1c2hUb1NhdmUoc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgbmVl
ZFRvUmVzdG9yZVNjcmF0Y2ggPSB0cnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzOwotCi0gICAgICAgICAgICBzdHVi
Sml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6aW5kZXhp
bmdUeXBlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIGZhaWx1cmVDYXNlcy5h
cHBlbmQoc3R1YkppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hH
UFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSXNBcnJheSkpKTsKLSAgICAgICAgICAg
IGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6
Olplcm8sIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSW5kZXhpbmdT
aGFwZU1hc2spKSk7Ci0KLSAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNo
R1BSKTsKLSAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsK
LSAgICAgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6TGVzc1RoYW4sIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoMCkpKTsKLQotICAgICAgICAgICAgc3R1YkppdC5tb3ZlKHNjcmF0Y2hHUFIsIHJlc3VsdEdQ
Uik7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIHN0dWJKaXQub3I2NChBc3NlbWJs
eUhlbHBlcnM6OlRydXN0ZWRJbW02NChUYWdUeXBlTnVtYmVyKSwgcmVzdWx0R1BSKTsKLSNlbGlm
IFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgICAgICBzdHViSml0Lm1vdmUoQXNzZW1ibHlIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCByZXN1bHRUYWdHUFIpOwotI2Vu
ZGlmCi0KLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3MsIGZhaWw7Ci0K
LSAgICAgICAgICAgIGVtaXRSZXN0b3JlU2NyYXRjaChzdHViSml0LCBuZWVkVG9SZXN0b3JlU2Ny
YXRjaCwgc2NyYXRjaEdQUiwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIHN0dWJKaXQsIGNv
ZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKLSAgICAgICAgICAgIGlmIChwYXRjaEJ1
ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBP
bkNhY2hlOwotCi0gICAgICAgICAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZmZXIsIG5l
ZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdHViSW5mbywgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2Vz
KTsKLQotICAgICAgICAgICAgc3R1YkluZm8uc3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZP
Ul9TVFVCKAotICAgICAgICAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLCBwYXRjaEJ1ZmZlciwK
LSAgICAgICAgICAgICAgICAoIkdldEJ5SWQgYXJyYXkgbGVuZ3RoIHN0dWIgZm9yICVzLCByZXR1
cm4gcG9pbnQgJXAiLAotICAgICAgICAgICAgICAgICAgICB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVC
bG9jaygpKS5kYXRhKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0
KAotICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25l
KS5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0KLSAgICAgICAgICAgIHJlcGxhY2VXaXRoSnVtcChz
dHViSW5mbywgc3R1YkluZm8uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwotICAgICAgICAg
ICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9w
ZXJhdGlvbkdldEJ5SWQpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBuZXdDYXNl
OwogCisgICAgaWYgKGlzSlNBcnJheShiYXNlVmFsdWUpICYmIHByb3BlcnR5TmFtZSA9PSBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKQorICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6
Z2V0TGVuZ3RoKHZtLCBvd25lciwgQWNjZXNzVHlwZTo6QXJyYXlMZW5ndGgpOworICAgIGVsc2Ug
aWYgKGlzSlNTdHJpbmcoYmFzZVZhbHVlKSAmJiBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmxlbmd0aCkKKyAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmdldExlbmd0
aCh2bSwgb3duZXIsIEFjY2Vzc1R5cGU6OlN0cmluZ0xlbmd0aCk7CisgICAgZWxzZSB7CisgICAg
ICAgIGlmICghc2xvdy5pc0NhY2hlYWJsZSgpICYmICFzbG90LmlzVW5zZXQoKSkKKyAgICAgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAKKyAgICAgICAgSlNDZWxsKiBiYXNl
Q2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBiYXNlQ2VsbC0+c3RydWN0dXJlKHZtKTsKKyAgICAgICAgCisgICAgICAgIC8vIE9wdGltaXpl
IHNlbGYgYWNjZXNzLgorICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlID09IENhY2hlVHlw
ZTo6VW5zZXQKKyAgICAgICAgICAgICYmIHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpCisgICAgICAg
ICAgICAmJiBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlCisgICAgICAgICAgICAmJiAhc2xv
dC53YXRjaHBvaW50U2V0KCkKKyAgICAgICAgICAgICYmIE1hY3JvQXNzZW1ibGVyOjppc0NvbXBh
Y3RQdHJBbGlnbmVkQWRkcmVzc09mZnNldChtYXhPZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3Jh
Z2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpCisgICAgICAgICAgICAmJiBhY3Rpb25Gb3JDZWxsKHZt
LCBiYXNlQ2VsbCkgPT0gQXR0ZW1wdFRvQ2FjaGUpIHsKKyAgICAgICAgICAgIHN0cnVjdHVyZS0+
c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKCp2bSwgc2xvdC5jYWNoZWRPZmZz
ZXQoKSk7CisgICAgICAgICAgICByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoKnZtLCBjb2RlQmxvY2ss
IHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwg
b3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlzdCwgdHJ1ZSk7CisgICAgICAgICAgICBzdHViSW5mby5p
bml0R2V0QnlJZFNlbGYoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1
cmUpOwogICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKICAgICAgICAgfQogCi0g
ICAgICAgIC8vIFN0cmluZy5sZW5ndGggY2FzZQotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBmYWlsdXJlID0gc3R1YkppdC5icmFuY2g4KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQo
KSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoU3RyaW5nVHlwZSkpOwotCi0gICAgICAg
IHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTU3RyaW5n
OjpvZmZzZXRPZkxlbmd0aCgpKSwgcmVzdWx0R1BSKTsKLQotI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgICAgIHN0dWJKaXQub3I2NChBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW02NChUYWdUeXBl
TnVtYmVyKSwgcmVzdWx0R1BSKTsKLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIHN0
dWJKaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRh
ZyksIHJlc3VsdFRhZ0dQUik7Ci0jZW5kaWYKKyAgICAgICAgYm9vbCBsb2FkVGFyZ2V0RnJvbVBy
b3h5ID0gZmFsc2U7CisgICAgICAgIGlmIChiYXNlQ2VsbC0+dHlwZSgpID09IFB1cmVGb3J3YXJk
aW5nUHJveHlUeXBlKSB7CisgICAgICAgICAgICBiYXNlVmFsdWUgPSBqc0Nhc3Q8SlNQcm94eSo+
KGJhc2VDZWxsKS0+dGFyZ2V0KCk7CisgICAgICAgICAgICBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5h
c0NlbGwoKTsKKyAgICAgICAgICAgIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUodm0p
OworICAgICAgICAgICAgbG9hZFRhcmdldEZyb21Qcm94eSA9IHRydWU7CisgICAgICAgIH0KIAot
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7Cisg
ICAgICAgIElubGluZUNhY2hlQWN0aW9uIGFjdGlvbiA9IGFjdGlvbkZvckNlbGwodm0sIGJhc2VD
ZWxsKTsKKyAgICAgICAgaWYgKGFjdGlvbiAhPSBBdHRlbXB0VG9DYWNoZSkKKyAgICAgICAgICAg
IHJldHVybiBhY3Rpb247CiAKLSAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIHN0
dWJKaXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKLSAgICAgICAgaWYgKHBh
dGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpCi0gICAgICAgICAgICByZXR1cm4gR2l2ZVVw
T25DYWNoZTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc2xvdC5pc1Vuc2V0KCkg
PyBpbnZhbGlkT2Zmc2V0IDogc2xvdC5jYWNoZWRPZmZzZXQoKTsKICAgICAgICAgCi0gICAgICAg
IHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxh
YmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSk7Ci0gICAgICAgIHBh
dGNoQnVmZmVyLmxpbmsoZmFpbHVyZSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVs
QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwotCi0gICAgICAg
IHN0dWJJbmZvLnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKLSAgICAgICAg
ICAgIGV4ZWMtPmNvZGVCbG9jaygpLCBwYXRjaEJ1ZmZlciwKLSAgICAgICAgICAgICgiR2V0QnlJ
ZCBzdHJpbmcgbGVuZ3RoIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAg
ICAgICAgIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwgc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAgICAgICAgICAgIHN0dWJJ
bmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgICAg
ICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CisgICAgICAgIGlmIChz
bG90LmlzVW5zZXQoKSB8fCBzbG90LnNsb3RCYXNlKCkgIT0gYmFzZVZhbHVlKSB7CisgICAgICAg
ICAgICBpZiAodHlwZUluZm8ucHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCkgfHwgc3RydWN0dXJl
LT5pc0RpY3Rpb25hcnkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHNsb3QuaXNVbnNldCgpKSB7CisgICAgICAg
ICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNz
KAorICAgICAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCks
IGV4ZWMsIHN0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90
eXBlUHJvcGVydHlIaXQoCisgICAgICAgICAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCksIGlkZW50Lmlt
cGwoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghY29u
ZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNo
ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgb2Zmc2V0ID0gc2xvdC5pc1Vuc2V0KCkgPyBp
bnZhbGlkT2Zmc2V0IDogY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCk7
CisgICAgICAgIH0KIAotICAgICAgICByZXBsYWNlV2l0aEp1bXAoc3R1YkluZm8sIHN0dWJJbmZv
LnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKLSAgICAgICAgcmVwYXRjaENhbGwoY29kZUJs
b2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWQpOworICAg
ICAgICBBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBlIHR5cGU7CisgICAgICAgIGlmIChzbG90LmlzQ2Fj
aGVhYmxlVmFsdWUoKSkKKyAgICAgICAgICAgIHR5cGUgPSBBY2Nlc3NDYXNlOjpMb2FkOworICAg
ICAgICBlbHNlIGlmIChzbG90LnVzVW5zZXQoKSkKKyAgICAgICAgICAgIHR5cGUgPSBBY2Nlc3ND
YXNlOjpNaXNzOworICAgICAgICBlbHNlIGlmIChzbG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkpCisg
ICAgICAgICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6R2V0dGVyOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6Q3VzdG9tR2V0dGVyOwogCi0gICAgICAgIHJldHVy
biBSZXRyeUNhY2hlTGF0ZXI7CisgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpnZXQoCisg
ICAgICAgICAgICB2bSwgb3duZXIsIHR5cGUsIG9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25T
ZXQsIGxvYWRUYXJnZXRGcm9tUHJveHksCisgICAgICAgICAgICBzbG90LndhdGNocG9pbnRTZXQo
KSwgc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpID8gc2xvdC5jdXN0b21HZXR0ZXIoKSA6IG51bGxw
dHIpOwogICAgIH0KIAotICAgIC8vIEZJWE1FOiBDYWNoZSBwcm9wZXJ0eSBhY2Nlc3MgZm9yIGlt
bWVkaWF0ZXMuCi0gICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCi0gICAgICAgIHJldHVybiBH
aXZlVXBPbkNhY2hlOwotCi0gICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkgJiYgIXNsb3QuaXNV
bnNldCgpKQorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyID0gc3R1YkluZm8uYWRk
QWNjZXNzQ2FzZSgKKyAgICAgICAgdm0sIGNvZGVCbG9jaywgcHJvcGVydHlOYW1lLCBzdGQ6Om1v
dmUobmV3Q2FzZSkpOworICAgIAorICAgIGlmICghY29kZVB0cikKICAgICAgICAgcmV0dXJuIEdp
dmVVcE9uQ2FjaGU7CiAKLSAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgp
OwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSgqdm0pOwot
Ci0gICAgSW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9uID0gYWN0aW9uRm9yQ2VsbCgqdm0sIGJhc2VD
ZWxsKTsKLSAgICBpZiAoYWN0aW9uICE9IEF0dGVtcHRUb0NhY2hlKQotICAgICAgICByZXR1cm4g
YWN0aW9uOwotCi0gICAgLy8gT3B0aW1pemUgc2VsZiBhY2Nlc3MuCi0gICAgaWYgKHNsb3QuaXND
YWNoZWFibGVWYWx1ZSgpCi0gICAgICAgICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUK
LSAgICAgICAgJiYgIXNsb3Qud2F0Y2hwb2ludFNldCgpCi0gICAgICAgICYmIE1hY3JvQXNzZW1i
bGVyOjppc0NvbXBhY3RQdHJBbGlnbmVkQWRkcmVzc09mZnNldChtYXhPZmZzZXRSZWxhdGl2ZVRv
UGF0Y2hlZFN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpKSB7Ci0gICAgICAgIHN0cnVjdHVy
ZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKCp2bSwgc2xvdC5jYWNoZWRP
ZmZzZXQoKSk7Ci0gICAgICAgIHJlcGF0Y2hCeUlkU2VsZkFjY2Vzcygqdm0sIGNvZGVCbG9jaywg
c3R1YkluZm8sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LmNhY2hlZE9mZnNldCgpLCBv
cGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0LCB0cnVlKTsKLSAgICAgICAgc3R1YkluZm8uaW5pdEdl
dEJ5SWRTZWxmKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsK
LSAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLSAgICB9Ci0KLSAgICByZXBhdGNoQ2Fs
bChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJ
ZEJ1aWxkTGlzdCk7CisgICAgcmVwbGFjZVdpdGhKdW1wKHN0dWJJbmZvLCBjb2RlUHRyKTsKKyAg
ICAKICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogfQogCkBAIC03NTMsMTEyICszMzYsNiBA
QCB2b2lkIHJlcGF0Y2hHZXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWCiAgICAgICAgIHJlcGF0
Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9w
ZXJhdGlvbkdldEJ5SWQpOwogfQogCi1zdGF0aWMgdm9pZCBwYXRjaEp1bXBUb0dldEJ5SWRTdHVi
KFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSklUU3R1YlJvdXRpbmUqIHN0dWJSb3V0aW5l
KQotewotICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dl
dF9ieV9pZF9saXN0KTsKLSAgICBpZiAoc3R1YkluZm8udS5nZXRCeUlkTGlzdC5saXN0LT5kaWRT
ZWxmUGF0Y2hpbmcoKSkgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoCi0g
ICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KAotICAg
ICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksCi0gICAgICAgICAg
ICBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIHJlcGxhY2VXaXRoSnVtcChzdHViSW5mbywgc3R1
YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwotfQotCi1zdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24g
dHJ5QnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBj
b25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkKLSAg
ICAgICAgfHwgKCFzbG90LmlzQ2FjaGVhYmxlKCkgJiYgIXNsb3QuaXNVbnNldCgpKSkKLSAgICAg
ICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZh
bHVlLmFzQ2VsbCgpOwotICAgIGJvb2wgbG9hZFRhcmdldEZyb21Qcm94eSA9IGZhbHNlOwotICAg
IGlmIChiYXNlQ2VsbC0+dHlwZSgpID09IFB1cmVGb3J3YXJkaW5nUHJveHlUeXBlKSB7Ci0gICAg
ICAgIGJhc2VWYWx1ZSA9IGpzQ2FzdDxKU1Byb3h5Kj4oYmFzZUNlbGwpLT50YXJnZXQoKTsKLSAg
ICAgICAgYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7Ci0gICAgICAgIGxvYWRUYXJnZXRG
cm9tUHJveHkgPSB0cnVlOwotICAgIH0KLQotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0KLSAgICBJbmxpbmVD
YWNoZUFjdGlvbiBhY3Rpb24gPSBhY3Rpb25Gb3JDZWxsKCp2bSwgYmFzZUNlbGwpOwotICAgIGlm
IChhY3Rpb24gIT0gQXR0ZW1wdFRvQ2FjaGUpCi0gICAgICAgIHJldHVybiBhY3Rpb247Ci0KLSAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKnZtKTsKLSAgICBU
eXBlSW5mbyB0eXBlSW5mbyA9IHN0cnVjdHVyZS0+dHlwZUluZm8oKTsKLQotICAgIGlmIChzdHVi
SW5mby5wYXRjaC5zcGlsbE1vZGUgPT0gTmVlZFRvU3BpbGwpIHsKLSAgICAgICAgLy8gV2UgY2Fu
bm90IGRvIGFzIG11Y2ggaW5saW5lIGNhY2hpbmcgaWYgdGhlIHJlZ2lzdGVycyB3ZXJlIG5vdCBm
bHVzaGVkIHByaW9yIHRvIHRoaXMgR2V0QnlJZC4gSW4gcGFydGljdWxhciwKLSAgICAgICAgLy8g
bm9uLVZhbHVlIGNhY2hlZCBwcm9wZXJ0aWVzIHJlcXVpcmUgcGxhbnRpbmcgY2FsbHMsIHdoaWNo
IHJlcXVpcmVzIHJlZ2lzdGVycyB0byBoYXZlIGJlZW4gZmx1c2hlZC4gVGh1cywKLSAgICAgICAg
Ly8gaWYgcmVnaXN0ZXJzIHdlcmUgbm90IGZsdXNoZWQsIGRvbid0IGRvIG5vbi1WYWx1ZSBjYWNo
aW5nLgotICAgICAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpICYmICFzbG90LmlzVW5z
ZXQoKSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgIH0KLQotICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuaXNVbnNldCgpID8gaW52YWxpZE9mZnNldCA6IHNs
b3QuY2FjaGVkT2Zmc2V0KCk7Ci0gICAgCi0gICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQg
Y29uZGl0aW9uU2V0OwotICAgIGlmIChzbG90LmlzVW5zZXQoKSB8fCBzbG90LnNsb3RCYXNlKCkg
IT0gYmFzZVZhbHVlKSB7Ci0gICAgICAgIGlmICh0eXBlSW5mby5wcm9oaWJpdHNQcm9wZXJ0eUNh
Y2hpbmcoKSB8fCBzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgaWYgKHNsb3QuaXNVbnNldCgpKQotICAgICAgICAg
ICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNzKCp2bSwg
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBpZGVudC5pbXBs
KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNv
bmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudC5pbXBsKCkp
OwotCi0gICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHJl
dHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgIG9mZnNldCA9IHNsb3QuaXNVbnNldCgpID8g
aW52YWxpZE9mZnNldCA6IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgp
OwotICAgIH0KLSAgICAKLSAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0ID0gUG9seW1v
cnBoaWNHZXRCeUlkTGlzdDo6ZnJvbShzdHViSW5mbyk7Ci0gICAgaWYgKGxpc3QtPmlzRnVsbCgp
KSB7Ci0gICAgICAgIC8vIFdlIG5lZWQgdGhpcyBleHRyYSBjaGVjayBiZWNhdXNlIG9mIHJlY3Vy
c2lvbi4KLSAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgfQotICAgIAotICAgIFJl
ZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7Ci0gICAgYm9vbCByZXN1bHQgPSBnZW5l
cmF0ZUJ5SWRTdHViKAotICAgICAgICBleGVjLCBraW5kRm9yKHNsb3QpLCBpZGVudCwgY3VzdG9t
Rm9yKHNsb3QpLCBzdHViSW5mbywgY29uZGl0aW9uU2V0LCBzbG90LnNsb3RCYXNlKCksIG9mZnNl
dCwgCi0gICAgICAgIHN0cnVjdHVyZSwgbG9hZFRhcmdldEZyb21Qcm94eSwgc2xvdC53YXRjaHBv
aW50U2V0KCksIAotICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9m
ZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLAotICAgICAgICBDb2RlTG9jYXRp
b25MYWJlbChsaXN0LT5jdXJyZW50U2xvd1BhdGhUYXJnZXQoc3R1YkluZm8pKSwgc3R1YlJvdXRp
bmUpOwotICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAg
ICAKLSAgICBHZXRCeUlkQWNjZXNzOjpBY2Nlc3NUeXBlIGFjY2Vzc1R5cGU7Ci0gICAgaWYgKHNs
b3QuaXNDYWNoZWFibGVWYWx1ZSgpKQotICAgICAgICBhY2Nlc3NUeXBlID0gc2xvdC53YXRjaHBv
aW50U2V0KCkgPyBHZXRCeUlkQWNjZXNzOjpXYXRjaGVkU3R1YiA6IEdldEJ5SWRBY2Nlc3M6OlNp
bXBsZVN0dWI7Ci0gICAgZWxzZSBpZiAoc2xvdC5pc1Vuc2V0KCkpCi0gICAgICAgIGFjY2Vzc1R5
cGUgPSBHZXRCeUlkQWNjZXNzOjpTaW1wbGVNaXNzOwotICAgIGVsc2UgaWYgKHNsb3QuaXNDYWNo
ZWFibGVHZXR0ZXIoKSkKLSAgICAgICAgYWNjZXNzVHlwZSA9IEdldEJ5SWRBY2Nlc3M6OkdldHRl
cjsKLSAgICBlbHNlCi0gICAgICAgIGFjY2Vzc1R5cGUgPSBHZXRCeUlkQWNjZXNzOjpDdXN0b21H
ZXR0ZXI7Ci0gICAgCi0gICAgbGlzdC0+YWRkQWNjZXNzKEdldEJ5SWRBY2Nlc3MoCi0gICAgICAg
ICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgYWNjZXNzVHlwZSwgc3R1YlJvdXRp
bmUsIHN0cnVjdHVyZSwKLSAgICAgICAgY29uZGl0aW9uU2V0KSk7Ci0gICAgCi0gICAgcGF0Y2hK
dW1wVG9HZXRCeUlkU3R1YihzdHViSW5mbywgc3R1YlJvdXRpbmUuZ2V0KCkpOwotICAgIAotICAg
IHJldHVybiBsaXN0LT5pc0Z1bGwoKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7
Ci19Ci0KLXZvaWQgYnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFz
ZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xv
dCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIEdDU2FmZUNvbmN1
cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGV4ZWMtPmNvZGVCbG9jaygpLT5tX2xvY2ssIGV4ZWMtPnZt
KCkuaGVhcCk7Ci0gICAgCi0gICAgaWYgKHRyeUJ1aWxkR2V0QnlJRExpc3QoZXhlYywgYmFzZVZh
bHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvKSA9PSBHaXZlVXBPbkNhY2hlKQotICAg
ICAgICByZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkKTsKLX0KLQogc3RhdGljIFZfSklUT3BlcmF0aW9uX0VT
c2lKSkkgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5
U2xvdCAmc2xvdCwgUHV0S2luZCBwdXRLaW5kKQogewogICAgIGlmIChzbG90LmlzU3RyaWN0TW9k
ZSgpKSB7CkBAIC04ODMsMzQ5ICszNjAsNiBAQCBzdGF0aWMgVl9KSVRPcGVyYXRpb25fRVNzaUpK
SSBhcHByb3ByaWF0CiAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExp
c3Q7CiB9CiAKLXN0YXRpYyBib29sIGVtaXRQdXRSZXBsYWNlU3R1YigKLSAgICBFeGVjU3RhdGUq
IGV4ZWMsCi0gICAgY29uc3QgSWRlbnRpZmllciYsCi0gICAgY29uc3QgUHV0UHJvcGVydHlTbG90
JiBzbG90LAotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywKLSAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBmYWlsdXJlTGFiZWwsCi0gICAgUmVm
UHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZv
LnBhdGNoLmJhc2VHUFIpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgR1BSUmVnIHZhbHVl
VGFnR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZVRhZ0dQUik7
Ci0jZW5kaWYKLSAgICBHUFJSZWcgdmFsdWVHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJ
bmZvLnBhdGNoLnZhbHVlR1BSKTsKLQotICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxv
Y2F0b3Ioc3R1YkluZm8ucGF0Y2gudXNlZFJlZ2lzdGVycyk7Ci0gICAgYWxsb2NhdG9yLmxvY2so
YmFzZUdQUik7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBhbGxvY2F0b3IubG9jayh2YWx1
ZVRhZ0dQUik7Ci0jZW5kaWYKLSAgICBhbGxvY2F0b3IubG9jayh2YWx1ZUdQUik7Ci0gICAgCi0g
ICAgR1BSUmVnIHNjcmF0Y2hHUFIxID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwot
Ci0gICAgQ0NhbGxIZWxwZXJzIHN0dWJKaXQodm0sIGV4ZWMtPmNvZGVCbG9jaygpKTsKLQotICAg
IHNpemVfdCBudW1iZXJPZlBhZGRpbmdCeXRlcyA9IGFsbG9jYXRvci5wcmVzZXJ2ZVJldXNlZFJl
Z2lzdGVyc0J5UHVzaGluZyhzdHViSml0KTsKLQotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGJh
ZFN0cnVjdHVyZSA9IHN0dWJKaXQuYnJhbmNoU3RydWN0dXJlKAotICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCi0gICAgICAgIHN0cnVjdHVyZSk7Ci0KLSNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNl
dCgpKSkKLSAgICAgICAgc3R1YkppdC5zdG9yZTY0KHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZz
ZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkp
KTsKLSAgICBlbHNlIHsKLSAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIx
KTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTY0KHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkg
KiBzaXplb2YoSlNWYWx1ZSkpKTsKLSAgICB9Ci0jZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAg
IGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkgewotICAgICAgICBzdHVi
Sml0LnN0b3JlMzIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpT
T2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShz
bG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihF
bmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKLSAgICAgICAgc3R1Ykpp
dC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uo
c2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
RW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKLSAgICB9IGVsc2UgewotICAg
ICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUjEpOwotICAgICAgICBzdHViSml0
LnN0b3JlMzIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBv
ZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSAr
IE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkp
KTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQo
KSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3Jp
cHRvciwgYXNCaXRzLnRhZykpKTsKLSAgICB9Ci0jZW5kaWYKLSAgICAKLSAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBzdWNjZXNzOwotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhaWx1cmU7Ci0g
ICAgCi0gICAgaWYgKGFsbG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygpKSB7Ci0gICAgICAgIGFs
bG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKHN0dWJKaXQsIG51bWJlck9m
UGFkZGluZ0J5dGVzKTsKLSAgICAgICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOwotICAgICAg
ICAKLSAgICAgICAgYmFkU3RydWN0dXJlLmxpbmsoJnN0dWJKaXQpOwotICAgICAgICBhbGxvY2F0
b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhzdHViSml0LCBudW1iZXJPZlBhZGRp
bmdCeXRlcyk7Ci0gICAgICAgIGZhaWx1cmUgPSBzdHViSml0Lmp1bXAoKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgICAgIGZhaWx1cmUgPSBi
YWRTdHJ1Y3R1cmU7Ci0gICAgfQotICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZt
LCBzdHViSml0LCBleGVjLT5jb2RlQmxvY2soKSwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKLSAg
ICBpZiAocGF0Y2hCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIAotICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25l
KSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlLCBmYWlsdXJlTGFiZWwpOwotICAgICAg
ICAgICAgCi0gICAgc3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAotICAgICAg
ICBleGVjLT5jb2RlQmxvY2soKSwgcGF0Y2hCdWZmZXIsCi0gICAgICAgICgiUHV0QnlJZCByZXBs
YWNlIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAgICAgdG9DU3RyaW5n
KCpleGVjLT5jb2RlQmxvY2soKSkuZGF0YSgpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
bGFiZWxBdE9mZnNldCgKLSAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxU
b0RvbmUpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotc3RhdGljIGJvb2wgZW1pdFB1dFRyYW5zaXRpb25TdHViKAotICAgIEV4ZWNTdGF0ZSogZXhl
YywgVk0qIHZtLCBTdHJ1Y3R1cmUqJiBzdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50
LCAKLSAgICBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbywgUHV0S2luZCBwdXRLaW5kLAotICAgIFN0cnVjdHVyZSomIG9sZFN0cnVjdHVyZSwg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkKLXsKLSAgICBQcm9wZXJ0
eU5hbWUgcG5hbWUoaWRlbnQpOwotICAgIG9sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICBp
ZiAoIW9sZFN0cnVjdHVyZS0+aXNPYmplY3QoKSB8fCBvbGRTdHJ1Y3R1cmUtPmlzRGljdGlvbmFy
eSgpIHx8IHBhcnNlSW5kZXgocG5hbWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBQ
cm9wZXJ0eU9mZnNldCBwcm9wZXJ0eU9mZnNldDsKLSAgICBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6
OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkob2xk
U3RydWN0dXJlLCBpZGVudC5pbXBsKCksIDAsIHByb3BlcnR5T2Zmc2V0KTsKLQotICAgIGlmICgh
c3RydWN0dXJlIHx8ICFzdHJ1Y3R1cmUtPmlzT2JqZWN0KCkgfHwgc3RydWN0dXJlLT5pc0RpY3Rp
b25hcnkoKSB8fCAhc3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3
aGVyZSB3ZSBuZWVkIGEgcmVhbGxvYywgaWYgd2UgZG9uJ3QgaGF2ZQotICAgIC8vIGVub3VnaCBy
ZWdpc3RlcnMgdG8gbWFrZSBpdCBoYXBwZW4uCi0gICAgaWYgKEdQUkluZm86Om51bWJlck9mUmVn
aXN0ZXJzIDwgNgotICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkg
IT0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpCi0gICAgICAgICYmIG9sZFN0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgLy8gU2tpcCBvcHRpbWl6aW5nIHRoZSBjYXNlIHdoZXJlIHdlIG5lZWQgcmVhbGxvYywg
YW5kIHRoZSBzdHJ1Y3R1cmUgaGFzCi0gICAgLy8gaW5kZXhpbmcgc3RvcmFnZS4KLSAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkbid0IHNraXAgdGhpcyEgSW1wbGVtZW50IGl0IQotICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzA5MTQKLSAgICBpZiAob2xkU3Ry
dWN0dXJlLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBpZiAocHV0S2luZCA9PSBOb3REaXJlY3QpIHsKLSAgICAgICAgY29uZGl0aW9uU2V0
ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzKAotICAgICAgICAgICAg
KnZtLCBleGVjLT5jb2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVy
ZSwgaWRlbnQuaW1wbCgpKTsKLSAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIENvZGVMb2NhdGlvbkxhYmVs
IGZhaWx1cmVMYWJlbCA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0
KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpOwotICAgIFJlZlB0cjxKSVRTdHVi
Um91dGluZT4mIHN0dWJSb3V0aW5lID0gc3R1YkluZm8uc3R1YlJvdXRpbmU7Ci0KLSAgICBHUFJS
ZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guYmFzZUdQUik7
Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBHUFJSZWcgdmFsdWVUYWdHUFIgPSBzdGF0aWNf
Y2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVlVGFnR1BSKTsKLSNlbmRpZgotICAgIEdQ
UlJlZyB2YWx1ZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVH
UFIpOwotICAgIAotICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1Yklu
Zm8ucGF0Y2gudXNlZFJlZ2lzdGVycyk7Ci0gICAgYWxsb2NhdG9yLmxvY2soYmFzZUdQUik7Ci0j
aWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBhbGxvY2F0b3IubG9jayh2YWx1ZVRhZ0dQUik7Ci0j
ZW5kaWYKLSAgICBhbGxvY2F0b3IubG9jayh2YWx1ZUdQUik7Ci0gICAgCi0gICAgQ0NhbGxIZWxw
ZXJzIHN0dWJKaXQodm0pOwotICAgIAotICAgIGJvb2wgbmVlZFRoaXJkU2NyYXRjaCA9IGZhbHNl
OwotICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gb2xkU3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpCi0gICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSkgewotICAgICAgICBuZWVkVGhpcmRTY3JhdGNoID0gdHJ1ZTsKLSAgICB9Ci0K
LSAgICBHUFJSZWcgc2NyYXRjaEdQUjEgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7
Ci0gICAgQVNTRVJUKHNjcmF0Y2hHUFIxICE9IGJhc2VHUFIpOwotICAgIEFTU0VSVChzY3JhdGNo
R1BSMSAhPSB2YWx1ZUdQUik7Ci0gICAgCi0gICAgR1BSUmVnIHNjcmF0Y2hHUFIyID0gYWxsb2Nh
dG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwotICAgIEFTU0VSVChzY3JhdGNoR1BSMiAhPSBiYXNl
R1BSKTsKLSAgICBBU1NFUlQoc2NyYXRjaEdQUjIgIT0gdmFsdWVHUFIpOwotICAgIEFTU0VSVChz
Y3JhdGNoR1BSMiAhPSBzY3JhdGNoR1BSMSk7Ci0KLSAgICBHUFJSZWcgc2NyYXRjaEdQUjM7Ci0g
ICAgaWYgKG5lZWRUaGlyZFNjcmF0Y2gpIHsKLSAgICAgICAgc2NyYXRjaEdQUjMgPSBhbGxvY2F0
b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7Ci0gICAgICAgIEFTU0VSVChzY3JhdGNoR1BSMyAhPSBi
YXNlR1BSKTsKLSAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIzICE9IHZhbHVlR1BSKTsKLSAgICAg
ICAgQVNTRVJUKHNjcmF0Y2hHUFIzICE9IHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgQVNTRVJUKHNj
cmF0Y2hHUFIzICE9IHNjcmF0Y2hHUFIyKTsKLSAgICB9IGVsc2UKLSAgICAgICAgc2NyYXRjaEdQ
UjMgPSBJbnZhbGlkR1BSUmVnOwotICAgIAotICAgIHNpemVfdCBudW1iZXJPZlBhZGRpbmdCeXRl
cyA9IGFsbG9jYXRvci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhzdHViSml0KTsK
LQotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7Ci0gICAgICAgICAg
ICAKLSAgICBBU1NFUlQob2xkU3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0Jl
ZW5JbnZhbGlkYXRlZCgpKTsKLSAgICAKLSAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQu
YnJhbmNoU3RydWN0dXJlKAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIAotICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCAKLSAgICAgICAgb2xkU3RydWN0dXJlKSk7Ci0gICAgCi0gICAgY2hlY2tPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbnMoCi0gICAgICAgIGNvbmRpdGlvblNldCwgZXhlYy0+Y29kZUJs
b2NrKCksIHN0dWJJbmZvLCBzdHViSml0LCBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIxKTsKLQot
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKLSAgICAKLSAgICBib29sIHNj
cmF0Y2hHUFIxSGFzU3RvcmFnZSA9IGZhbHNlOwotICAgIAotICAgIGlmIChzdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkgIT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7
Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
ICogc2l6ZW9mKEpTVmFsdWUpOwotICAgICAgICBDb3BpZWRBbGxvY2F0b3IqIGNvcGllZEFsbG9j
YXRvciA9ICZ2bS0+aGVhcC5zdG9yYWdlQWxsb2NhdG9yKCk7Ci0gICAgICAgIAotICAgICAgICBp
ZiAoIW9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICAgICAgc3R1
YkppdC5sb2FkUHRyKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZywgc2NyYXRj
aEdQUjEpOwotICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKHN0dWJKaXQuYnJhbmNoU3ViUHRy
KE1hY3JvQXNzZW1ibGVyOjpTaWduZWQsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobmV3
U2l6ZSksIHNjcmF0Y2hHUFIxKSk7Ci0gICAgICAgICAgICBzdHViSml0LnN0b3JlUHRyKHNjcmF0
Y2hHUFIxLCAmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcpOwotICAgICAgICAg
ICAgc3R1YkppdC5uZWdQdHIoc2NyYXRjaEdQUjEpOwotICAgICAgICAgICAgc3R1YkppdC5hZGRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcygmY29waWVkQWxsb2NhdG9yLT5tX2N1
cnJlbnRQYXlsb2FkRW5kKSwgc2NyYXRjaEdQUjEpOwotICAgICAgICAgICAgc3R1YkppdC5hZGRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoSlNWYWx1ZSkpLCBzY3JhdGNo
R1BSMSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG9s
ZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKLSAgICAg
ICAgICAgIEFTU0VSVChuZXdTaXplID4gb2xkU2l6ZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09i
amVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMyk7Ci0gICAgICAgICAgICBzdHVi
Sml0LmxvYWRQdHIoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nLCBzY3JhdGNo
R1BSMSk7Ci0gICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoc3R1YkppdC5icmFuY2hTdWJQdHIo
TWFjcm9Bc3NlbWJsZXI6OlNpZ25lZCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihuZXdT
aXplKSwgc2NyYXRjaEdQUjEpKTsKLSAgICAgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIoc2NyYXRj
aEdQUjEsICZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZyk7Ci0gICAgICAgICAg
ICBzdHViSml0Lm5lZ1B0cihzY3JhdGNoR1BSMSk7Ci0gICAgICAgICAgICBzdHViSml0LmFkZFB0
cihNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3Vy
cmVudFBheWxvYWRFbmQpLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgICAgICBzdHViSml0LmFkZFB0
cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1ZhbHVlKSksIHNjcmF0Y2hH
UFIxKTsKLSAgICAgICAgICAgIC8vIFdlIGhhdmUgc2NyYXRjaEdQUjEgPSBuZXcgc3RvcmFnZSwg
c2NyYXRjaEdQUjMgPSBvbGQgc3RvcmFnZSwgc2NyYXRjaEdQUjIgPSBhdmFpbGFibGUKLSAgICAg
ICAgICAgIGZvciAoc2l6ZV90IG9mZnNldCA9IDA7IG9mZnNldCA8IG9sZFNpemU7IG9mZnNldCAr
PSBzaXplb2Yodm9pZCopKSB7Ci0gICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIzLCAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90Pihv
ZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2Yodm9pZCopKSksIHNjcmF0Y2hHUFIyKTsK
LSAgICAgICAgICAgICAgICBzdHViSml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIyLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4ob2Zmc2V0
ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgc3R1YkppdC5zdG9yZVB0cihzY3JhdGNoR1BSMSwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSk7Ci0gICAgICAgIHNjcmF0Y2hHUFIxSGFzU3RvcmFnZSA9IHRydWU7Ci0gICAgfQotCi0g
ICAgQVNTRVJUKG9sZFN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCkgPT0gc3RydWN0dXJlLT50
eXBlSW5mbygpLnR5cGUoKSk7Ci0gICAgQVNTRVJUKG9sZFN0cnVjdHVyZS0+dHlwZUluZm8oKS5p
bmxpbmVUeXBlRmxhZ3MoKSA9PSBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdz
KCkpOwotICAgIEFTU0VSVChvbGRTdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpID09IHN0cnVjdHVy
ZS0+aW5kZXhpbmdUeXBlKCkpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgdWludDMyX3QgdmFs
ID0gc3RydWN0dXJlLT5pZCgpOwotI2Vsc2UKLSAgICB1aW50MzJfdCB2YWwgPSByZWludGVycHJl
dF9jYXN0PHVpbnQzMl90PihzdHJ1Y3R1cmUtPmlkKCkpOwotI2VuZGlmCi0gICAgc3R1YkppdC5z
dG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIodmFsKSwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSk7Ci0jaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkp
Ci0gICAgICAgIHN0dWJKaXQuc3RvcmU2NCh2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5J
bmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7Ci0g
ICAgZWxzZSB7Ci0gICAgICAgIGlmICghc2NyYXRjaEdQUjFIYXNTdG9yYWdlKQotICAgICAgICAg
ICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgc3R1YkppdC5z
dG9yZTY0KHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zm
c2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsK
LSAgICB9Ci0jZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIGlmIChpc0lubGluZU9mZnNldChz
bG90LmNhY2hlZE9mZnNldCgpKSkgewotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGlu
ZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAq
IHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9y
LCBhc0JpdHMucGF5bG9hZCkpKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxp
bmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkg
KiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRv
ciwgYXNCaXRzLnRhZykpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoIXNjcmF0Y2hHUFIx
SGFzU3RvcmFnZSkKLSAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BS
MSk7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkp
ICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IsIGFzQml0cy5wYXlsb2FkKSkpOwotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdH
UFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZs
eShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRP
RihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwotICAgIH0KLSNlbmRpZgot
ICAgIAotICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSBudWxscHRyOwotCi0jaWYg
RU5BQkxFKEdHQykKLSAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsRmx1c2hXcml0ZUJhcnJp
ZXJCdWZmZXI7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3duZXJJc1JlbWVtYmVyZWRPcklu
RWRlbiA9IHN0dWJKaXQuanVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4oYmFzZUdQUik7Ci0gICAg
ewotICAgICAgICBXcml0ZUJhcnJpZXJCdWZmZXImIHdyaXRlQmFycmllckJ1ZmZlciA9IHN0dWJK
aXQudm0oKS0+aGVhcC53cml0ZUJhcnJpZXJCdWZmZXIoKTsKLSAgICAgICAgc3R1YkppdC5sb2Fk
MzIod3JpdGVCYXJyaWVyQnVmZmVyLmN1cnJlbnRJbmRleEFkZHJlc3MoKSwgc2NyYXRjaEdQUjIp
OwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBuZWVkVG9GbHVzaCA9Ci0gICAgICAgICAg
ICBzdHViSml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHNjcmF0Y2hH
UFIyLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHdyaXRlQmFycmllckJ1ZmZlci5jYXBh
Y2l0eSgpKSk7Ci0KLSAgICAgICAgc3R1YkppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKDEpLCBzY3JhdGNoR1BSMik7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUzMihzY3JhdGNo
R1BSMiwgd3JpdGVCYXJyaWVyQnVmZmVyLmN1cnJlbnRJbmRleEFkZHJlc3MoKSk7Ci0KLSAgICAg
ICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHdyaXRlQmFycmll
ckJ1ZmZlci5idWZmZXIoKSksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgLy8gV2UgdXNlIGFuIG9m
ZnNldCBvZiAtc2l6ZW9mKHZvaWQqKSBiZWNhdXNlIHdlIGFscmVhZHkgYWRkZWQgMSB0byBzY3Jh
dGNoR1BSMi4KLSAgICAgICAgc3R1YkppdC5zdG9yZVB0cihiYXNlR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6QmFzZUluZGV4KHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgTWFjcm9Bc3NlbWJsZXI6OlNj
YWxlUHRyLCBzdGF0aWNfY2FzdDxpbnQzMl90Pigtc2l6ZW9mKHZvaWQqKSkpKTsKLQotICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lV2l0aEJhcnJpZXIgPSBzdHViSml0Lmp1bXAoKTsK
LSAgICAgICAgbmVlZFRvRmx1c2gubGluaygmc3R1YkppdCk7Ci0KLSAgICAgICAgc2NyYXRjaEJ1
ZmZlciA9IHZtLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShhbGxvY2F0b3IuZGVzaXJlZFNjcmF0Y2hC
dWZmZXJTaXplRm9yQ2FsbCgpKTsKLSAgICAgICAgYWxsb2NhdG9yLnByZXNlcnZlVXNlZFJlZ2lz
dGVyc1RvU2NyYXRjaEJ1ZmZlckZvckNhbGwoc3R1YkppdCwgc2NyYXRjaEJ1ZmZlciwgc2NyYXRj
aEdQUjIpOwotICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNl
R1BSKTsKLSAgICAgICAgY2FsbEZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyID0gc3R1YkppdC5jYWxs
KCk7Ci0gICAgICAgIGFsbG9jYXRvci5yZXN0b3JlVXNlZFJlZ2lzdGVyc0Zyb21TY3JhdGNoQnVm
ZmVyRm9yQ2FsbChzdHViSml0LCBzY3JhdGNoQnVmZmVyLCBzY3JhdGNoR1BSMik7Ci0KLSAgICAg
ICAgZG9uZVdpdGhCYXJyaWVyLmxpbmsoJnN0dWJKaXQpOwotICAgIH0KLSAgICBvd25lcklzUmVt
ZW1iZXJlZE9ySW5FZGVuLmxpbmsoJnN0dWJKaXQpOwotI2VuZGlmCi0KLSAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBzdWNjZXNzOwotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhaWx1cmU7Ci0g
ICAgICAgICAgICAKLSAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkpIHsKLSAg
ICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoc3R1YkppdCwg
bnVtYmVyT2ZQYWRkaW5nQnl0ZXMpOwotICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7
Ci0KLSAgICAgICAgZmFpbHVyZUNhc2VzLmxpbmsoJnN0dWJKaXQpOwotICAgICAgICBhbGxvY2F0
b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhzdHViSml0LCBudW1iZXJPZlBhZGRp
bmdCeXRlcyk7Ci0gICAgICAgIGZhaWx1cmUgPSBzdHViSml0Lmp1bXAoKTsKLSAgICB9IGVsc2UK
LSAgICAgICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOwotICAgIAotICAgIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIG9wZXJhdGlvbkNhbGw7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2Vz
c0luU2xvd1BhdGg7Ci0gICAgCi0gICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgc2xvd1Bh
dGgubGluaygmc3R1YkppdCk7Ci0gICAgICAgIAotICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJl
dXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhzdHViSml0LCBudW1iZXJPZlBhZGRpbmdCeXRlcyk7Ci0g
ICAgICAgIGlmICghc2NyYXRjaEJ1ZmZlcikKLSAgICAgICAgICAgIHNjcmF0Y2hCdWZmZXIgPSB2
bS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoYWxsb2NhdG9yLmRlc2lyZWRTY3JhdGNoQnVmZmVyU2l6
ZUZvckNhbGwoKSk7Ci0gICAgICAgIGFsbG9jYXRvci5wcmVzZXJ2ZVVzZWRSZWdpc3RlcnNUb1Nj
cmF0Y2hCdWZmZXJGb3JDYWxsKHN0dWJKaXQsIHNjcmF0Y2hCdWZmZXIsIHNjcmF0Y2hHUFIxKTsK
LSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShiYXNlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUp
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNsb3QuY2FjaGVkT2Zmc2V0KCkpLCB2YWx1
ZUdQUik7Ci0jZWxzZQotICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShiYXNlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNsb3QuY2FjaGVkT2Zmc2V0KCkpLCB2YWx1ZUdQUiwg
dmFsdWVUYWdHUFIpOwotI2VuZGlmCi0gICAgICAgIG9wZXJhdGlvbkNhbGwgPSBzdHViSml0LmNh
bGwoKTsKLSAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVVc2VkUmVnaXN0ZXJzRnJvbVNjcmF0Y2hC
dWZmZXJGb3JDYWxsKHN0dWJKaXQsIHNjcmF0Y2hCdWZmZXIsIHNjcmF0Y2hHUFIxKTsKLSAgICAg
ICAgc3VjY2Vzc0luU2xvd1BhdGggPSBzdHViSml0Lmp1bXAoKTsKLSAgICB9Ci0gICAgCi0gICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIHN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygpLCBK
SVRDb21waWxhdGlvbkNhbkZhaWwpOwotICAgIGlmIChwYXRjaEJ1ZmZlci5kaWRGYWlsVG9BbGxv
Y2F0ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgcGF0Y2hCdWZmZXIubGlu
ayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHVi
SW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpKTsKLSAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNl
UmVnaXN0ZXJzKCkpCi0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZSwgZmFpbHVyZUxh
YmVsKTsKLSAgICBlbHNlCi0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2VzLCBm
YWlsdXJlTGFiZWwpOwotI2lmIEVOQUJMRShHR0MpCi0gICAgcGF0Y2hCdWZmZXIubGluayhjYWxs
Rmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIsIG9wZXJhdGlvbkZsdXNoV3JpdGVCYXJyaWVyQnVmZmVy
KTsKLSNlbmRpZgotICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gb2xk
U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgIHBhdGNoQnVmZmVyLmxp
bmsob3BlcmF0aW9uQ2FsbCwgb3BlcmF0aW9uUmVhbGxvY2F0ZVN0b3JhZ2VBbmRGaW5pc2hQdXQp
OwotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3NJblNsb3dQYXRoLCBzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxU
b0RvbmUpKTsKLSAgICB9Ci0gICAgCi0gICAgc3R1YlJvdXRpbmUgPQotICAgICAgICBjcmVhdGVK
SVRTdHViUm91dGluZSgKLSAgICAgICAgICAgIEZJTkFMSVpFX0NPREVfRk9SKAotICAgICAgICAg
ICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLCBwYXRjaEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAo
IlB1dEJ5SWQgJXN0cmFuc2l0aW9uIHN0dWIgKCVwIC0+ICVwKSBmb3IgJXMsIHJldHVybiBwb2lu
dCAlcCIsCi0gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgPyAicmVhbGxvY2F0aW5nICIg
OiAiIiwKLSAgICAgICAgICAgICAgICAgICAgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsCi0gICAg
ICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwgc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAgICAgICAg
ICAgICAgICBzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLmV4ZWN1dGFibGVBZGRyZXNz
KCkpKSwKLSAgICAgICAgICAgICp2bSwKLSAgICAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLT5v
d25lckV4ZWN1dGFibGUoKSwKLSAgICAgICAgICAgIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksCi0gICAgICAgICAgICBz
dHJ1Y3R1cmUpOwotICAgIAotICAgIHJldHVybiB0cnVlOwotfQotCiBzdGF0aWMgSW5saW5lQ2Fj
aGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFs
dWUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3Qg
UHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtp
bmQgcHV0S2luZCkKIHsKICAgICBpZiAoT3B0aW9uczo6Zm9yY2VJQ0ZhaWx1cmUoKSkKQEAgLTEy
NDQsMjUgKzM3OCw4IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQK
ICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAKICAgICAvLyBPcHRpbWl6ZSBzZWxmIGFj
Y2Vzcy4KLSAgICBpZiAoc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlICYmIHNsb3QuaXNDYWNoZWFi
bGVQdXQoKSkgewotICAgICAgICBpZiAoc2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpO
ZXdQcm9wZXJ0eSkgewotCi0gICAgICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZTsKLSAg
ICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKLSAgICAg
ICAgICAgIGlmICghZW1pdFB1dFRyYW5zaXRpb25TdHViKGV4ZWMsIHZtLCBzdHJ1Y3R1cmUsIGlk
ZW50LCBzbG90LCBzdHViSW5mbywgcHV0S2luZCwgb2xkU3RydWN0dXJlLCBjb25kaXRpb25TZXQp
KQotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoCi0gICAgICAgICAgICAgICAgc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldCgKLSAgICAgICAgICAgICAgICAgICAgc3R1Yklu
Zm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwKLSAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25M
YWJlbChzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgICAgICAgICAg
cmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJv
cHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRUcmFuc2l0aW9uKCp2bSwg
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsIGNv
bmRpdGlvblNldCwgcHV0S2luZCA9PSBEaXJlY3QpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwotICAgICAgICB9Ci0KKyAgICBpZiAoc3R1YkluZm8u
Y2FjaGVUeXBlID09IENhY2hlVHlwZTo6VW5zZXQKKyAgICAgICAgJiYgc2xvdC5iYXNlKCkgPT0g
YmFzZVZhbHVlICYmIHNsb3QuaXNDYWNoZWFibGVQdXQoKSkgewogICAgICAgICBpZiAoIU1hY3Jv
QXNzZW1ibGVyOjppc1B0ckFsaWduZWRBZGRyZXNzT2Zmc2V0KG9mZnNldFJlbGF0aXZlVG9QYXRj
aGVkU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSkpCiAgICAgICAgICAgICByZXR1cm4gR2l2
ZVVwT25DYWNoZTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMTg5MzI0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NCw2ICs0NCw4IEBAIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6flNj
cmF0Y2hSZWdpc3QKIAogdm9pZCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OmxvY2soR1BSUmVn
IHJlZykKIHsKKyAgICBpZiAocmVnID09IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybjsK
ICAgICB1bnNpZ25lZCBpbmRleCA9IEdQUkluZm86OnRvSW5kZXgocmVnKTsKICAgICBpZiAoaW5k
ZXggPT0gR1BSSW5mbzo6SW52YWxpZEluZGV4KQogICAgICAgICByZXR1cm47CkBAIC01MiwxMiAr
NTQsMjAgQEAgdm9pZCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OmxvY2soR1BSUgogCiB2b2lk
IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6bG9jayhGUFJSZWcgcmVnKQogeworICAgIGlmIChy
ZWcgPT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJuOwogICAgIHVuc2lnbmVkIGluZGV4
ID0gRlBSSW5mbzo6dG9JbmRleChyZWcpOwogICAgIGlmIChpbmRleCA9PSBGUFJJbmZvOjpJbnZh
bGlkSW5kZXgpCiAgICAgICAgIHJldHVybjsKICAgICBtX2xvY2tlZFJlZ2lzdGVycy5zZXRGUFJC
eUluZGV4KGluZGV4KTsKIH0KIAordm9pZCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OmxvY2so
SlNWYWx1ZVJlZ3MgcmVncykKK3sKKyAgICBsb2NrKHJlZ3MudGFnR1BSKCkpOworICAgIGxvY2so
cmVncy5wYXlsb2FkR1BSKCkpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rSW5mbz4KIHR5
cGVuYW1lIEJhbmtJbmZvOjpSZWdpc3RlclR5cGUgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjph
bGxvY2F0ZVNjcmF0Y2goKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TY3Jh
dGNoUmVnaXN0ZXJBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oCShyZXZpc2lvbiAxODkzMjQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MCwxMSArNDAsMTMgQEAgc3RydWN0IFNjcmF0Y2hCdWZmZXI7CiAKIGNs
YXNzIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciB7CiBwdWJsaWM6CisgICAgU2NyYXRjaFJlZ2lz
dGVyQWxsb2NhdG9yKCkgeyB9CiAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yKGNvbnN0IFJl
Z2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzKTsKICAgICB+U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
KCk7CiAKLSAgICB2b2lkIGxvY2soR1BSUmVnIHJlZyk7Ci0gICAgdm9pZCBsb2NrKEZQUlJlZyBy
ZWcpOworICAgIHZvaWQgbG9jayhHUFJSZWcpOworICAgIHZvaWQgbG9jayhGUFJSZWcpOworICAg
IHZvaWQgbG9jayhKU1ZhbHVlUmVncyk7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmFu
a0luZm8+CiAgICAgdHlwZW5hbWUgQmFua0luZm86OlJlZ2lzdGVyVHlwZSBhbGxvY2F0ZVNjcmF0
Y2goKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260746</attachid>
            <date>2015-09-07 13:28:39 -0700</date>
            <delta_ts>2015-09-08 10:36:41 -0700</delta_ts>
            <desc>making this change a little less incremental</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>188348</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODkzMjQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzI2LDggKzMyNiw2IEBACiAJCTBGNDg1MzJBMTg3REZE
RUMwMDgzQjY4NyAvKiBGVExSZWNvdmVyeU9wY29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0ODUzMjYxODdERkRFQzAwODNCNjg3IC8qIEZUTFJl
Y292ZXJ5T3Bjb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEY0OTNBRkExNkQwQ0FEMzAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDkzQUY4MTZE
MENBRDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi87IH07CiAJCTBGNEI5NERDMTdC
OUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0Qjk0REIxN0I5RjA3NTAwREQwM0E0IC8qIFR5
cGVkQXJyYXlJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKLQkJMEY0Q0VENUUxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJ
ZExpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY0Q0VENUMxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwICov
OyB9OwotCQkwRjRDRUQ1RjE4Q0VBN0FCMDA4MDJGRTAgLyogUG9seW1vcnBoaWNHZXRCeUlkTGlz
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0Q0VE
NUQxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJZExpc3QuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjRGMjlERjE4QjZBRDFD
MDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RjI5REQxOEI2
QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNw
cCAqLzsgfTsKIAkJMEY0RjI5RTAxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlv
bkNvdW50RXN0aW1hdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjRGMjlERTE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0
aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjUwQUYzQzE5M0U4QjM5MDA2NzRFRTggLyogREZHU3RydWN0
dXJlQ2xvYmJlclN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjUwQUYzQjE5M0U4QjM5MDA2NzRFRTggLyogREZHU3RydWN0dXJlQ2xvYmJlclN0
YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAg
LTQ3NSw4ICs0NzMsNiBAQAogCQkwRjlFMzI2NDFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVC
YXJyaWVySW5zZXJ0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGOUUzMjYyMUIwNUFCMDQwMDgwMUVENSAvKiBERkdTdG9yZUJhcnJpZXJJ
bnNlcnRpb25QaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGOUZCNEY0MTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUZC
NEYyMTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNlLmNwcCAqLzsgfTsKIAkJ
MEY5RkI0RjUxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUZCNEYzMTdGQ0I5MTcw
MENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEY5RkM4QzMxNEUxQjVGRTAwRDUyQUUwIC8qIFBv
bHltb3JwaGljUHV0QnlJZExpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY5RkM4QkYxNEUxQjVGQjAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0
QnlJZExpc3QuY3BwICovOyB9OwotCQkwRjlGQzhDNDE0RTFCNjAwMDBENTJBRTAgLyogUG9seW1v
cnBoaWNQdXRCeUlkTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY5RkM4QzAxNEUxQjVGQjAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExp
c3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjlGQzhDNTE0RTFCNjA0MDBENTJBRTAgLyogUHV0S2luZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RkM4QzExNEUxQjVGQjAwRDUyQUUwIC8qIFB1
dEtpbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRkEyQzE3QjE3RDdDRjg0MDA5RDAxNUYgLyogVGVzdFJ1bm5lclV0aWxzLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQTJDMTc5MTdEN0NGODQw
MDlEMDE1RiAvKiBUZXN0UnVubmVyVXRpbHMuY3BwICovOyB9OwogCQkwRkEyQzE3QzE3RDdDRjg0
MDA5RDAxNUYgLyogVGVzdFJ1bm5lclV0aWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkEyQzE3QTE3RDdDRjg0MDA5RDAxNUYgLyogVGVzdFJ1bm5l
clV0aWxzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
QEAgLTc0NCw2ICs3NDAsOCBAQAogCQkwRkY4QkRFQTFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJy
ZWRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkY4QkRFODFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5jcHAgKi87IH07CiAJ
CTBGRjhCREVCMUFENENGNzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY4QkRFOTFBRDRDRjcxMDBERkU4
ODQgLyogSW5mZXJyZWRWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGRjkyMkQ0MTRGNDZCNDEwMDQxQTI0RSAvKiBMTEludE9mZnNldHNF
eHRyYWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY0NjgwQTExNEJBN0Y4MjAwQkZFMjcyIC8qIExMSW50T2Zmc2V0c0V4dHJhY3Rvci5jcHAg
Ki87IH07CisJCTBGRjlDRTczMUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY5Q0U3
MTFCOUNENkQwMDA0RURDQTYgLyogUG9seW1vcnBoaWNBY2Nlc3MuY3BwICovOyB9OworCQkwRkY5
Q0U3NDFCOUNENkQwMDA0RURDQTYgLyogUG9seW1vcnBoaWNBY2Nlc3MuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjlDRTcyMUI5Q0Q2RDAwMDRFRENB
NiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGRkE1NDk3MTZCODgzNTAwMEIzQTk4MiAvKiBBNjRET3Bjb2Rl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MkEz
QTIyMTY1MUM2OTcwMEE4MEFGRSAvKiBBNjRET3Bjb2RlLmNwcCAqLzsgfTsKIAkJMEZGQTU0OTgx
NkI4ODM1MzAwQjNBOTgyIC8qIEE2NERPcGNvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MkEzQTIzMTY1MUM2OTcwMEE4MEFGRSAvKiBBNjRET3Bj
b2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEZGQjZDMzgxQUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5cGUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGQjZDMzYxQUY0OEREQzAwREIxQkY3
IC8qIFR5cGVvZlR5cGUuY3BwICovOyB9OwpAQCAtMjE1MSw4ICsyMTQ5LDYgQEAKIAkJMEY0ODUz
MjYxODdERkRFQzAwODNCNjg3IC8qIEZUTFJlY292ZXJ5T3Bjb2RlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEZUTFJlY292ZXJ5T3Bjb2RlLmg7IHBhdGggPSBmdGwvRlRMUmVj
b3ZlcnlPcGNvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0OTNBRjgxNkQw
Q0FEMTAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNvdXJjZVByb3ZpZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY0Qjk0REIxN0I5RjA3NTAwREQwM0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVkQXJyYXlJbmxpbmVzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNENFRDVDMThDRUE3QUIwMDgwMkZFMCAvKiBQ
b2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFBvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkwRjRDRUQ1RDE4Q0VBN0FCMDA4MDJGRTAgLyogUG9seW1vcnBoaWNHZXRCeUlkTGlz
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb2x5bW9ycGhpY0dldEJ5SWRM
aXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEYyOUREMThCNkFEMUMwMDU3
QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVz
dGltYXRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3Rp
bWF0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRGMjlERTE4
QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU3RhdGljRXhlY3V0aW9uQ291
bnRFc3RpbWF0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdTdGF0aWNFeGVjdXRpb25Db3VudEVz
dGltYXRpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjUwQUYzQjE5
M0U4QjM5MDA2NzRFRTggLyogREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oOyBwYXRoID0g
ZGZnL0RGR1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjI5OCw4ICsyMjk0LDYgQEAKIAkJMEY5RTMyNjIxQjA1QUIwNDAwODAxRUQ1IC8qIERG
R1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHU3Rv
cmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY5RkI0RjIxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RhY2tMYXlvdXRQaGFzZS5jcHA7
IHBhdGggPSBkZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGOUZCNEYzMTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1N0YWNrTGF5b3V0UGhhc2Uu
aDsgcGF0aCA9IGRmZy9ERkdTdGFja0xheW91dFBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTBGOUZDOEJGMTRFMUI1RkIwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRM
aXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBvbHltb3JwaGlj
UHV0QnlJZExpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjlGQzhDMDE0
RTFCNUZCMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGOUZDOEMxMTRFMUI1RkIwMEQ1MkFFMCAvKiBQdXRLaW5kLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1dEtpbmQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZBMkMxNzkxN0Q3Q0Y4NDAwOUQwMTVGIC8qIFRlc3RSdW5uZXJV
dGlscy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXN0UnVubmVy
VXRpbHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkEyQzE3QTE3RDdDRjg0
MDA5RDAxNUYgLyogVGVzdFJ1bm5lclV0aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFRlc3RSdW5uZXJVdGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MjU3NCw2ICsyNTY4LDggQEAKIAkJMEZGOEJERTgxQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVk
VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5mZXJyZWRW
YWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjhCREU5MUFENENGNzEw
MERGRTg4NCAvKiBJbmZlcnJlZFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEluZmVycmVkVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGOTIy
Q0YxNEY0NkIxMzAwNDFBMjRFIC8qIEpTQ0xMSW50T2Zmc2V0c0V4dHJhY3RvciAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5l
eGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gSlNDTExJbnRPZmZzZXRzRXh0
cmFjdG9yOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQkwRkY5Q0U3MTFC
OUNENkQwMDA0RURDQTYgLyogUG9seW1vcnBoaWNBY2Nlc3MuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUG9seW1vcnBoaWNBY2Nlc3MuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkY5Q0U3MjFCOUNENkQwMDA0RURDQTYgLyogUG9seW1vcnBoaWNB
Y2Nlc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9seW1vcnBoaWNBY2Nl
c3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQjZDMzYxQUY0OEREQzAwREIx
QkY3IC8qIFR5cGVvZlR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gVHlwZW9mVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRkI2QzM3
MUFGNDhEREMwMERCMUJGNyAvKiBUeXBlb2ZUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFR5cGVvZlR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZG
Qzk5RDAxODRFQzhBRDAwOUMxMEFCIC8qIENvbnN0YW50TW9kZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDb25zdGFudE1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTU1ODEsMTEgKzU1NzcsOSBAQAogCQkJCTk2OUEwNzk1MEVEMUQzQUUwMEYxRjY4MSAv
KiBPcGNvZGUuaCAqLywKIAkJCQkwRjJCREMyQjE1MUZERThCMDBDRDg5MTAgLyogT3BlcmFuZHMu
aCAqLywKIAkJCQlBNzA0NDdFOTE3QTBCRDQ2MDBGNTg5OEUgLyogT3BlcmFuZHNJbmxpbmVzLmgg
Ki8sCisJCQkJMEZGOUNFNzExQjlDRDZEMDAwNEVEQ0E2IC8qIFBvbHltb3JwaGljQWNjZXNzLmNw
cCAqLywKKwkJCQkwRkY5Q0U3MjFCOUNENkQwMDA0RURDQTYgLyogUG9seW1vcnBoaWNBY2Nlc3Mu
aCAqLywKIAkJCQkwRjM0QjE0QjE2RDQzRTBDMDAxQ0RBNUEgLyogUG9seW1vcnBoaWNBY2Nlc3NT
dHJ1Y3R1cmVMaXN0LmggKi8sCi0JCQkJMEY0Q0VENUMxOENFQTdBQjAwODAyRkUwIC8qIFBvbHlt
b3JwaGljR2V0QnlJZExpc3QuY3BwICovLAotCQkJCTBGNENFRDVEMThDRUE3QUIwMDgwMkZFMCAv
KiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmggKi8sCi0JCQkJMEY5RkM4QkYxNEUxQjVGQjAwRDUy
QUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwICovLAotCQkJCTBGOUZDOEMwMTRFMUI1
RkIwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmggKi8sCiAJCQkJMEY5ODIwNUQx
NkJGRTM3RjAwMjQwRDAyIC8qIFByZWNpc2VKdW1wVGFyZ2V0cy5jcHAgKi8sCiAJCQkJMEY5ODIw
NUUxNkJGRTM3RjAwMjQwRDAyIC8qIFByZWNpc2VKdW1wVGFyZ2V0cy5oICovLAogCQkJCTBGRDNF
NDA3MUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgKi8sCkBAIC01NjE2
LDggKzU2MTAsOCBAQAogCQkJCTBGMkQ0REU3MTk4MzJEQUMwMDdENEIxOSAvKiBUeXBlTG9jYXRp
b24uaCAqLywKIAkJCQlBNzlFNzgxRTE1RUVDQkE4MDA0N0M4NTUgLyogVW5saW5rZWRDb2RlQmxv
Y2suY3BwICovLAogCQkJCUE3OUU3ODFGMTVFRUNCQTgwMDQ3Qzg1NSAvKiBVbmxpbmtlZENvZGVC
bG9jay5oICovLAotCQkJCTE0MTQyRTUwMUI3OTZFQ0UwMEY0QkY0QiAvKiBVbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZS5oICovLAogCQkJCTE0MTQyRTU0MUI3OTczQzAwMEY0QkY0QiAvKiBVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAgKi8sCisJCQkJMTQxNDJFNTAxQjc5NkVDRTAwRjRC
RjRCIC8qIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmggKi8sCiAJCQkJQjU5Rjg5MzgxODkx
QURCNTAwRDVDQ0RDIC8qIFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0uY3BwICovLAogCQkJCUI1
OUY4OTM3MTg5MUFEMzMwMEQ1Q0NEQyAvKiBVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtLmggKi8s
CiAJCQkJMEY5NjNCMzYxM0ZDNkZERTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5oICovLApAQCAt
NjE3OCw3ICs2MTcyLDYgQEAKIAkJCQkwRkMwOTc3MTE0NjkzQUY1MDBDRjI0NDIgLyogREZHT1NS
RXhpdENvbXBpbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjcwMjVBQTE3MTRCMEZDMDAzODJD
MEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVG
QzlBQjE2ODFBM0I2MDA1NjdGNTMgLyogREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJMEY0Q0VENUYxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0
QnlJZExpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkVFMTcxNzhFNzMwMDY5MEM3RiAv
KiBERkdPU1JFeGl0UHJlcGFyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkZDOTVDMTRF
RjkwQUYwMEM3MjUzMiAvKiBERkdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVFQTcwRUUx
OUY1QjVDNDAwOThGNUVDIC8qIEpTQ29udGV4dFJlZkluc3BlY3RvclN1cHBvcnQuaCBpbiBIZWFk
ZXJzICovLApAQCAtNjIyNyw2ICs2MjIwLDcgQEAKIAkJCQk5OUU0NUEyNDE4QTFCMjU5MDAyNkQ4
OEYgLyogRW1wdHlJbnB1dEN1cnNvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQxNDJFNTMxQjc5
NkVERDAwRjRCRjRCIC8qIEV4ZWN1dGFibGVJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OUU0
NUEyNjE4QTFCMjU5MDAyNkQ4OEYgLyogRW5jb2RlZFZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRkY5Q0U3NDFCOUNENkQwMDA0RURDQTYgLyogUG9seW1vcnBoaWNBY2Nlc3MuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGNTg3NEVFMTk0RkVCMTIwMEFBQjJDMSAvKiBERkdNYXlFeGl0LmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzMwNDYwNzBFMUY0OTdGMDAzMjMyQ0YgLyogRXJyb3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDMDJFOTBEMEUxODM5REIwMDBGOTI5NyAvKiBFcnJvckNvbnN0cnVj
dG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTY2NjAsNyArNjY1NCw2IEBACiAJCQkJQTc3RjE4MjUx
NjQxOTJDNzAwNjQwQTQ3IC8qIFBhcnNlck1vZGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTMw
M0Q2NDE0NDdCOUUxMDBEM0Y5MDQgLyogUGFyc2VyVG9rZW5zLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjM0QjE0QzE2RDQzRTBEMDAxQ0RBNUEgLyogUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVM
aXN0LmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjlGQzhDNDE0RTFCNjAwMDBENTJBRTAgLyogUG9s
eW1vcnBoaWNQdXRCeUlkTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4RjE0MzQxQURGMDkw
MTAwRUQ3OTJDIC8qIERGR0Vwb2NoLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk4MjA2MTE2QkZF
MzgzMDAyNDBEMDIgLyogUHJlY2lzZUp1bXBUYXJnZXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjJERDgxNTFBQjNEOEJFMDBCQkI4RTggLyogREZHRm9yQWxsS2lsbHMuaCBpbiBIZWFkZXJzICov
LApAQCAtNzgxOCw3ICs3ODExLDYgQEAKIAkJCQkwRjBCODM5QzE0QkNGNDYzMDA4ODVCNEYgLyog
TExJbnRUaHVua3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDRUZBQ0QxODA1RTc1NTAwNDcy
Q0U0IC8qIExMVk1BUEkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdFNUFCMzcxNzk5RTRCMjAw
RDI4MzNEIC8qIExMVk1EaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEY0Q0VE
NUUxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTQ0NjlEREUxMDdFQzdFNzAwNjUwNDQ2IC8qIExvb2t1cC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjQ2ODBDQzE0QkJCMTdBMDBCRkUyNzIgLyogTG93TGV2ZWxJbnRlcnBy
ZXRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEI3MjNCMjEyRDdEQTQ2MDAzQkQ1RUQgLyog
TWFjaGluZVN0YWNrTWFya2VyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzg2MCw3ICs3ODUyLDYg
QEAKIAkJCQkwRkUyMjhFRTE0MzZBQjJDMDAxOTZDNDggLyogT3B0aW9ucy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNDhGMjFCQzEwN0VDNTREMDA0MkVDMkMgLyogUGFyc2VyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTkzMDUyQzM0MEZCNzkyMTkwMDQ4RkRDMyAvKiBQYXJzZXJBcmVuYS5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQkwRjlGQzhDMzE0RTFCNUZFMDBENTJBRTAgLyogUG9seW1vcnBo
aWNQdXRCeUlkTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjk4MjA2MDE2QkZFMzgxMDAy
NDBEMDIgLyogUHJlY2lzZUp1bXBUYXJnZXRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk1NzQy
RjY1MEREMTFGNUEwMDA5MTdGQiAvKiBQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
MkI5Q0Y4MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICov
LApAQCAtNzg3Nyw2ICs3ODY4LDcgQEAKIAkJCQkwRjE5MENBQzE4OUQ4MkY2MDAwQUU1RjAgLyog
UHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlCMzE2
NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJPcmlnaW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZGNzI5QjQxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2luU3RhY2suY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMEZGOUNFNzMxQjlDRDZEMDAwNEVEQ0E2IC8qIFBvbHltb3JwaGljQWNj
ZXNzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjEwNThCMTY3NTQ4MzEwMEY4QUI2RSAvKiBQ
cm9maWxlck9TUkV4aXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMTA1OEQxNjc1NDgzNzAw
RjhBQjZFIC8qIFByb2ZpbGVyT1NSRXhpdFNpdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYx
MzkxMkIxNjc3MUMzQTAwOUNDQjA3IC8qIFByb2ZpbGVyUHJvZmlsZWRCeXRlY29kZXMuY3BwIGlu
IFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJldmlzaW9uIDE4OTMyNCkJKGZyb20gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwOjE4OTMy
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlBvbHltb3JwaGljR2V0QnlJZExpc3QuaCIKKworI2lmIEVOQUJMRShKSVQpCisKKyNp
bmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCitHZXRCeUlkQWNjZXNzOjpHZXRCeUlkQWNjZXNzKAorICAgIFZNJiB2bSwgSlNDZWxsKiBv
d25lciwgQWNjZXNzVHlwZSB0eXBlLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91
dGluZSwKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQmIGNvbmRpdGlvblNldCkKKyAgICA6IG1fdHlwZSh0eXBlKQorICAgICwgbV9zdHJ1
Y3R1cmUodm0sIG93bmVyLCBzdHJ1Y3R1cmUpCisgICAgLCBtX2NvbmRpdGlvblNldChjb25kaXRp
b25TZXQpCisgICAgLCBtX3N0dWJSb3V0aW5lKHN0dWJSb3V0aW5lKQoreworfQorCitHZXRCeUlk
QWNjZXNzOjp+R2V0QnlJZEFjY2VzcygpCit7Cit9CisKK0dldEJ5SWRBY2Nlc3MgR2V0QnlJZEFj
Y2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykK
K3sKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgaW5pdGlhbFNsb3dQYXRoID0KKyAgICAgICAg
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGVsdGFDYWxsVG9TbG93Q2FzZSk7CisgICAgCisgICAgR2V0QnlJZEFjY2VzcyByZXN1bHQ7Cisg
ICAgCisgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0
X2J5X2lkX3NlbGYpOworICAgIAorICAgIHJlc3VsdC5tX3R5cGUgPSBTaW1wbGVJbmxpbmU7Cisg
ICAgcmVzdWx0Lm1fc3RydWN0dXJlLmNvcHlGcm9tKHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFz
ZU9iamVjdFN0cnVjdHVyZSk7CisgICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBKSVRTdHViUm91
dGluZTo6Y3JlYXRlU2VsZk1hbmFnZWRSb3V0aW5lKGluaXRpYWxTbG93UGF0aCk7CisgICAgCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBHZXRCeUlkQWNjZXNzOjp2aXNpdFdlYWsoVk0m
IHZtKSBjb25zdAoreworICAgIGlmIChtX3N0cnVjdHVyZSAmJiAhSGVhcDo6aXNNYXJrZWQobV9z
dHJ1Y3R1cmUuZ2V0KCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFtX2NvbmRp
dGlvblNldC5hcmVTdGlsbExpdmUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICgh
bV9zdHViUm91dGluZS0+dmlzaXRXZWFrKHZtKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHJldHVybiB0cnVlOworfQorCitQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpQb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0KFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBpZiAoc3R1Yklu
Zm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBtX2xpc3QuYXBwZW5kKEdldEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1cmVTdHViSW5mbyhzdHVi
SW5mbykpOworfQorCitQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBQb2x5bW9ycGhpY0dldEJ5SWRM
aXN0Ojpmcm9tKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBpZiAoc3R1Yklu
Zm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3QpCisgICAgICAgIHJldHVybiBz
dHViSW5mby51LmdldEJ5SWRMaXN0Lmxpc3Q7CisgICAgCisgICAgQVNTRVJUKAorICAgICAgICBz
dHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZgorICAgICAgICB8fCBz
dHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc191bnNldCk7CisgICAgCisgICAgUG9seW1vcnBo
aWNHZXRCeUlkTGlzdCogcmVzdWx0ID0gbmV3IFBvbHltb3JwaGljR2V0QnlJZExpc3Qoc3R1Yklu
Zm8pOworICAgIAorICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkTGlzdChyZXN1bHQpOworICAgIAor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1BvbHltb3JwaGljR2V0QnlJZExpc3Q6On5Qb2x5bW9y
cGhpY0dldEJ5SWRMaXN0KCkgeyB9CisKK01hY3JvQXNzZW1ibGVyQ29kZVB0ciBQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0OjpjdXJyZW50U2xvd1BhdGhUYXJnZXQoCisgICAgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvKSBjb25zdAoreworICAgIGlmIChpc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRj
aC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKKyAgICByZXR1cm4gbV9saXN0Lmxhc3QoKS5zdHViUm91
dGluZSgpLT5jb2RlKCkuY29kZSgpOworfQorCit2b2lkIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6
OmFkZEFjY2Vzcyhjb25zdCBHZXRCeUlkQWNjZXNzJiBhY2Nlc3MpCit7CisgICAgQVNTRVJUKCFp
c0Z1bGwoKSk7CisgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHJlc2l6aW5nIG9wdGltaXplcyBm
b3Igc3BhY2UsIG5vdCB0aW1lLgorICAgIG1fbGlzdC5yZXNpemVUb0ZpdChtX2xpc3Quc2l6ZSgp
ICsgMSk7CisgICAgbV9saXN0Lmxhc3QoKSA9IGFjY2VzczsKK30KKworYm9vbCBQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0Ojppc0Z1bGwoKSBjb25zdAoreworICAgIEFTU0VSVChzaXplKCkgPD0gUE9M
WU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKTsKKyAgICByZXR1cm4gc2l6ZSgpID09IFBPTFlNT1JQ
SElDX0xJU1RfQ0FDSEVfU0laRTsKK30KKworYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojpp
c0FsbW9zdEZ1bGwoKSBjb25zdAoreworICAgIEFTU0VSVChzaXplKCkgPD0gUE9MWU1PUlBISUNf
TElTVF9DQUNIRV9TSVpFKTsKKyAgICByZXR1cm4gc2l6ZSgpID49IFBPTFlNT1JQSElDX0xJU1Rf
Q0FDSEVfU0laRSAtIDE7Cit9CisKK2Jvb2wgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6ZGlkU2Vs
ZlBhdGNoaW5nKCkgY29uc3QKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXplKCk7IGktLTsp
IHsKKyAgICAgICAgaWYgKGF0KGkpLnR5cGUoKSA9PSBHZXRCeUlkQWNjZXNzOjpTaW1wbGVJbmxp
bmUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0
Cit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGlmICgh
YXQoaSkudmlzaXRXZWFrKHZtKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5B
QkxFKEpJVCkKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI0LDEzMiArMjQsMTA3MSBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nl
c3MuaCIKIAogI2lmIEVOQUJMRShKSVQpCiAKKyNpbmNsdWRlICJCaW5hcnlTd2l0Y2guaCIKICNp
bmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCisjaW5jbHVkZSA8d3RmL0Nv
bW1hUHJpbnRlci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotR2V0QnlJZEFjY2Vzczo6R2V0QnlJ
ZEFjY2VzcygKLSAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgUGFz
c1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUsCi0gICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCi0g
ICAgOiBtX3R5cGUodHlwZSkKLSAgICAsIG1fc3RydWN0dXJlKHZtLCBvd25lciwgc3RydWN0dXJl
KQotICAgICwgbV9jb25kaXRpb25TZXQoY29uZGl0aW9uU2V0KQotICAgICwgbV9zdHViUm91dGlu
ZShzdHViUm91dGluZSkKK3N0cnVjdCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUgeworICAgIENDYWxs
SGVscGVycyogaml0IHsgbnVsbHB0ciB9OworICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciog
YWxsb2NhdG9yOworICAgIHNpemVfdCBudW1iZXJPZlBhZGRpbmdCeXRlcyB7IDAgfTsKKyAgICBQ
b2x5bW9ycGhpY0FjY2VzcyogYWNjZXNzIHsgbnVsbHB0ciB9OworICAgIFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbyB7IG51bGxwdHIgfTsKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHN1
Y2Nlc3M7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBmYWlsQW5kUmVwYXRjaDsKKyAgICBD
Q2FsbEhlbHBlcnM6Okp1bXBMaXN0IGZhaWxBbmRJZ25vcmU7CisgICAgR1BSUmVnIGJhc2VHUFIg
eyBJbnZhbGlkR1BSUmVnIH07CisgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzOworICAgIEdQUlJl
ZyBzY3JhdGNoR1BSIHsgSW52YWxpZEdQUlJlZyB9OworICAgIGJvb2wgbmVlZFRvUmVzdG9yZVNj
cmF0Y2ggeyBmYWxzZSB9OworICAgIFZlY3RvcjxzdGQ6OmZ1bmN0aW9uPHZvaWQoTGlua0J1ZmZl
ciYpPiBjYWxsYmFja3M7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQ7CisgICAgc3RkOjp1
bmlxdWVfcHRyPFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbz4gd2F0Y2hwb2ludHM7CisK
KyAgICB2b2lkIGFkZFdhdGNocG9pbnQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNv
bmRpdGlvbiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCkpCisgICAgeworICAgICAgICByZXR1
cm4gV2F0Y2hwb2ludE9uU3RydWN0dXJlU3R1YkluZm86OmVuc3VyZVJlZmVyZW5jZUFuZEFkZFdh
dGNocG9pbnQoCisgICAgICAgICAgICB3YXRjaHBvaW50cywgaml0LT5jb2RlQmxvY2soKSwgc3R1
YkluZm8sIGNvbmRpdGlvbik7CisgICAgfQorCisgICAgdm9pZCByZXN0b3JlU2NyYXRjaCgpCisg
ICAgeworICAgICAgICBhbGxvY2F0b3ItPnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmco
KmppdCwgbnVtYmVyT2ZQYWRkaW5nQnl0ZXMpOworICAgIH0KKworICAgIHZvaWQgc3VjY2VlZCgp
CisgICAgeworICAgICAgICByZXN0b3JlU2NyYXRjaCgpOworICAgICAgICBzdWNjZXNzLmFwcGVu
ZChqaXQtPmp1bXAoKSk7CisgICAgfQorfTsKKworQWNjZXNzQ2FzZTo6QWNjZXNzQ2FzZSgpCiB7
CiB9CiAKLUdldEJ5SWRBY2Nlc3M6On5HZXRCeUlkQWNjZXNzKCkKK3N0ZDo6dW5pcXVlX3B0cjxB
Y2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpnZXQoCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBB
Y2Nlc3NUeXBlIHR5cGUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgYm9vbCB2aWFQcm94eSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQm
IGNvbmRpdGlvblNldCwgV2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCwKKyAgICBQcm9wZXJ0
eVNsb3Q6OkdldFZhbHVlRnVuYyBjdXN0b21HZXR0ZXIpCit7CisgICAgc3RkOjp1bmlxdWVfcHRy
PEFjY2Vzc0Nhc2U+IHJlc3VsdChuZXcgQWNjZXNzQ2FzZSgpKTsKKworICAgIHJlc3VsdC0+bV90
eXBlID0gdHlwZTsKKyAgICByZXN1bHQtPm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgIHJlc3VsdC0+
bV9zdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKKyAgICByZXN1bHQtPm1fY29u
ZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OworICAgIAorICAgIGlmICh2aWFQcm94eSB8fCBhZGRp
dGlvbmFsU2V0IHx8IGRvZXNDYWxscygpIHx8IGN1c3RvbUdldHRlcikgeworICAgICAgICByZXN1
bHQtPm1fcmFyZURhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPFJhcmVEYXRhPigpOworICAgICAgICBy
ZXN1bHQtPm1fcmFyZURhdGEtPnZpYVByb3h5ID0gdmlhUHJveHk7CisgICAgICAgIHJlc3VsdC0+
bV9yYXJlRGF0YS0+YWRkaXRpb25hbFNldCA9IGFkZGl0aW9uYWxTZXQ7CisgICAgICAgIHJlc3Vs
dC0+bV9yYXJlRGF0YS0+Y3VzdG9tQWNjZXNzb3IuZ2V0dGVyID0gY3VzdG9tR2V0dGVyOworICAg
IH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNl
PiBBY2Nlc3NDYXNlOjpyZXBsYWNlKAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8QWNjZXNzQ2FzZT4gcmVzdWx0KG5ldyBBY2Nlc3NDYXNlKCkpOworCisgICAgcmVzdWx0
LT5tX3R5cGUgPSBSZXBsYWNlOworICAgIHJlc3VsdC0+bV9vZmZzZXQgPSBvZmZzZXQ7CisgICAg
cmVzdWx0LT5tX3N0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOworCisgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotR2V0QnlJZEFjY2VzcyBHZXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0
dXJlU3R1YkluZm8oU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQorc3RkOjp1bmlxdWVfcHRy
PEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OnRyYW5zaXRpb24oCisgICAgVk0mIHZtLCBKU0NlbGwq
IG93bmVyLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUs
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCYgY29uZGl0aW9uU2V0KQogewotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBpbml0aWFs
U2xvd1BhdGggPQotICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9m
ZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKLSAgICAKLSAgICBHZXRC
eUlkQWNjZXNzIHJlc3VsdDsKLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5hY2Nl
c3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZik7Ci0gICAgCi0gICAgcmVzdWx0Lm1fdHlw
ZSA9IFNpbXBsZUlubGluZTsKLSAgICByZXN1bHQubV9zdHJ1Y3R1cmUuY29weUZyb20oc3R1Yklu
Zm8udS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlKTsKLSAgICByZXN1bHQubV9zdHVi
Um91dGluZSA9IEpJVFN0dWJSb3V0aW5lOjpjcmVhdGVTZWxmTWFuYWdlZFJvdXRpbmUoaW5pdGlh
bFNsb3dQYXRoKTsKLSAgICAKKyAgICBSRUxFQVNFX0FTU0VSVChvbGRTdHJ1Y3R1cmUgPT0gbmV3
U3RydWN0dXJlLT5wcmV2aW91c0lEKCkpOworCisgICAgLy8gU2tpcCBvcHRpbWl6aW5nIHRoZSBj
YXNlIHdoZXJlIHdlIG5lZWQgYSByZWFsbG9jLCBpZiB3ZSBkb24ndCBoYXZlCisgICAgLy8gZW5v
dWdoIHJlZ2lzdGVycyB0byBtYWtlIGl0IGhhcHBlbi4KKyAgICBpZiAoR1BSSW5mbzo6bnVtYmVy
T2ZSZWdpc3RlcnMgPCA2CisgICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSAhPSBuZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkKKyAgICAgICAgJiYgb2xk
U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIH0KKworICAgIC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVk
IHJlYWxsb2MsIGFuZCB0aGUgc3RydWN0dXJlIGhhcworICAgIC8vIGluZGV4aW5nIHN0b3JhZ2Uu
CisgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBza2lwIHRoaXMhIEltcGxlbWVudCBpdCEKKyAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMwOTE0CisgICAg
aWYgKG9sZFN0cnVjdHVyZS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gcmVzdWx0KG5l
dyBBY2Nlc3NDYXNlKCkpOworCisgICAgcmVzdWx0LT5tX3R5cGUgPSBUcmFuc2l0aW9uOworICAg
IHJlc3VsdC0+bV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgcmVzdWx0LT5tX3N0cnVjdHVyZS5zZXQo
dm0sIG93bmVyLCBuZXdTdHJ1Y3R1cmUpOworICAgIHJlc3VsdC0+bV9jb25kaXRpb25TZXQgPSBj
b25kaXRpb25TZXQ7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGQ6OnVuaXF1ZV9wdHI8
QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6c2V0dGVyKAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25l
ciwgQWNjZXNzVHlwZSB0eXBlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0LAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25T
ZXQsIFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jIGN1c3RvbVNldHRlcikKK3sKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gcmVzdWx0KG5ldyBBY2Nlc3NDYXNlKCkpOworCisg
ICAgcmVzdWx0LT5tX3R5cGUgPSB0eXBlOworICAgIHJlc3VsdC0+bV9vZmZzZXQgPSBvZmZzZXQ7
CisgICAgcmVzdWx0LT5tX3N0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOworICAg
IHJlc3VsdC0+bV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7CisKKyAgICBpZiAoY3VzdG9t
U2V0dGVyKSB7CisgICAgICAgIHJlc3VsdC0+bV9yYXJlRGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8
UmFyZURhdGE+KCk7CisgICAgICAgIHJlc3VsdC0+bV9yYXJlRGF0YS0+Y3VzdG9tQWNjZXNzb3Iu
c2V0dGVyID0gY3VzdG9tU2V0dGVyOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3N0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjppbigKKyAgICBWTSYgdm0s
IEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCisg
ICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkKK3sKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gcmVzdWx0KG5ldyBBY2Nlc3NDYXNlKCkpOwor
CisgICAgcmVzdWx0LT5tX3R5cGUgPSB0eXBlOworICAgIHJlc3VsdC0+bV9zdHJ1Y3R1cmUuc2V0
KHZtLCBvd25lciwgc3RydWN0dXJlKTsKKyAgICByZXN1bHQtPm1fY29uZGl0aW9uU2V0ID0gY29u
ZGl0aW9uU2V0OworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RkOjp1bmlxdWVfcHRyPEFj
Y2Vzc1R5cGU+IEFjY2Vzc0Nhc2U6OmdldExlbmd0aChWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFj
Y2Vzc1R5cGUgdHlwZSkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gcmVzdWx0
KG5ldyBBY2Nlc3NDYXNlKCkpOworCisgICAgcmVzdWx0LT5tX3R5cGUgPSB0eXBlOworCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotYm9vbCBHZXRCeUlkQWNjZXNzOjp2aXNpdFdlYWsoVk0mIHZt
KSBjb25zdAorQWNjZXNzQ2FzZTo6fkFjY2Vzc0Nhc2UoKQoreworfQorCitzdGQ6OnVuaXF1ZV9w
dHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKAorICAgIFZN
JiB2bSwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAg
IHN3aXRjaCAoc3R1YkluZm8uYWNjZXNzVHlwZSkgeworICAgIGNhc2UgYWNjZXNzX2dldF9ieV9p
ZF9zZWxmOgorICAgICAgICByZXR1cm4gZ2V0KAorICAgICAgICAgICAgdm0sIG93bmVyLCBMb2Fk
LCBzdHViSW5mby51LmJ5SWRTZWxmLm9mZnNldCwgc3R1YkluZm8udS5ieUlkU2VsZi5iYXNlT2Jq
ZWN0U3RydWN0dXJlKTsKKworICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlOgorICAg
ICAgICByZXR1cm4gcmVwbGFjZSh2bSwgb3duZXIsIHN0dWJJbmZvLnUuYnlJZFNlbGYuYmFzZU9i
amVjdFN0cnVjdHVyZSwgc3R1YkluZm8udS5ieUlkU2VsZi5vZmZzZXQpOworCisgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorfQorCitib29sIEFjY2Vzc0Nhc2U6
Omd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrKCkgY29uc3QKK3sKKyAgICBpZiAodmlhUHJveHkoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICBjYXNl
IEFycmF5TGVuZ3RoOgorICAgIGNhc2UgU3RyaW5nTGVuZ3RoOgorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfQorCitib29s
IEFjY2Vzc0Nhc2U6OmNhblJlcGxhY2UoY29uc3QgQWNjZXNzQ2FzZSYgb3RoZXIpCit7CisgICAg
Ly8gV2UgY291bGQgZG8gYSBsb3QgYmV0dGVyIGhlcmUsIGJ1dCBmb3Igbm93IHdlIGp1c3QgZG8g
c29tZXRoaW5nIG9idmlvdXMuCisKKyAgICBpZiAoIWd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrKCkg
fHwgIW90aGVyLmd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrKCkpIHsKKyAgICAgICAgLy8gRklYTUU6
IEltcGxlbWVudCB0aGlzIQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0
dXJuIHN0cnVjdHVyZSgpID09IG90aGVyLnN0cnVjdHVyZSgpOworfQorCit2b2lkIEFjY2Vzc0Nh
c2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoCisgICAg
ICAgIG1fdHlwZSwgIjooc3RydWN0dXJlID0gIiwgcG9pbnRlckR1bXAobV9zdHJ1Y3R1cmUuZ2V0
KCkpLCAiLCBvZmZzZXQgPSAiLCBtX29mZnNldCwKKyAgICAgICAgIiwgY29uZGl0aW9ucyA9ICIs
IG1fY29uZGl0aW9uU2V0KTsKKworICAgIGlmIChSYXJlRGF0YSogcmFyZURhdGEgPSBtX3JhcmVE
YXRhLmdldCgpKSB7CisgICAgICAgIG91dC5wcmludCgKKyAgICAgICAgICAgICIsIHZpYVByb3h5
ID0gIiwgcmFyZURhdGEtPnZpYVByb3h5LAorICAgICAgICAgICAgIiwgYWRkaXRpb25hbFNldCA9
ICIsIFJhd1BvaW50ZXIocmFyZURhdGEtPmFkZGl0aW9uYWxTZXQuZ2V0KCkpLAorICAgICAgICAg
ICAgIiwgY2FsbExpbmtJbmZvID0gIiwgUmF3UG9pbnRlcihyYXJlRGF0YS0+Y2FsbExpbmtJbmZv
LmdldCgpKSwKKyAgICAgICAgICAgICIsIGN1c3RvbUFjY2Vzc29yID0gIiwgUmF3UG9pbnRlcihy
YXJlRGF0YS0+Y3VzdG9tQWNjZXNzb3Iub3BhcXVlKSk7CisgICAgfQorCisgICAgb3V0LnByaW50
KCIpIik7Cit9CisKK2Jvb2wgQWNjZXNzQ2FzZTo6dmlzaXRXZWFrKFZNJiB2bSkgY29uc3QKIHsK
ICAgICBpZiAobV9zdHJ1Y3R1cmUgJiYgIUhlYXA6OmlzTWFya2VkKG1fc3RydWN0dXJlLmdldCgp
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghbV9jb25kaXRpb25TZXQuYXJlU3Rp
bGxMaXZlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIW1fc3R1YlJvdXRpbmUt
PnZpc2l0V2Vhayh2bSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9yYXJlRGF0
YSAmJiBtX3JhcmVEYXRhLT5jYWxsTGlua0luZm8pCisgICAgICAgIG1fcmFyZURhdGEtPmNhbGxM
aW5rSW5mby0+dmlzaXRXZWFrKHZtKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotUG9seW1vcnBo
aWNHZXRCeUlkTGlzdDo6UG9seW1vcnBoaWNHZXRCeUlkTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8pCit2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAorICAgIEFjY2Vz
c0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUsIENDYWxsSGVscGVyczo6SnVtcExpc3QmIGZhbGxUaHJv
dWdoKQogewotICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc191bnNldCkKKyAg
ICBDQ2FsbEhlbHBlcnMmIGppdCA9ICpzdGF0ZS5qaXQ7CisKKyAgICBzd2l0Y2ggKG1fdHlwZSkg
eworICAgIGNhc2UgQXJyYXlMZW5ndGg6IHsKKyAgICAgICAgQVNTRVJUKCF2aWFQcm94eSgpKTsK
KyAgICAgICAgaml0LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6
OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGZhbGxUaHJvdWdo
LmFwcGVuZCgKKyAgICAgICAgICAgIGppdC5icmFuY2hUZXN0MzIoQ0NhbGxIZWxwZXJzOjpaZXJv
LCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihJc0FycmF5KSkpOworICAg
ICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCisgICAgICAgICAgICBqaXQuYnJhbmNoVGVzdDMyKAor
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6WmVybywgc2NyYXRjaEdQUiwgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoSW5kZXhpblNoYXBlTWFzaykpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgY2FzZSBTdHJpbmdMZW5ndGg6IHsKKyAgICAgICAgQVNTRVJUKCF2aWFQcm94
eSgpKTsKKyAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKAorICAgICAgICAgICAgaml0LmJyYW5j
aDgoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKKyAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVP
ZmZzZXQoKSksCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoU3Ry
aW5nVHlwZSkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZGVmYXVsdDogeworICAg
ICAgICBpZiAodmlhUHJveHkoKSkgeworICAgICAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKAor
ICAgICAgICAgICAgICAgIGppdC5icmFuY2g4KAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3Moc3RhdGUuYmFzZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksCisgICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKFB1cmVGb3J3YXJkaW5nUHJv
eHlUeXBlKSkpOworCisgICAgICAgICAgICBqaXQubG9hZFB0cigKKyAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RhdGUuYmFzZUdQUiwgSlNQcm94eTo6dGFyZ2V0T2Zmc2V0
KCkpLAorICAgICAgICAgICAgICAgIHN0YXRlLnNjcmF0Y2hHUFIpOworCisgICAgICAgICAgICBm
YWxsVGhyb3VnaC5hcHBlbmQoCisgICAgICAgICAgICAgICAgaml0LmJyYW5jaFN0cnVjdHVyZSgK
KyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKKyAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0YXRlLnNjcmF0Y2hHUFIsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSgpKSk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCisgICAg
ICAgICAgICAgICAgaml0LmJyYW5jaFN0cnVjdHVyZSgKKyAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpOb3RFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKHN0YXRlLmJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCisgICAg
ICAgICAgICAgICAgICAgIHN0cnVjdHVyZSgpKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgfSB9OworCisgICAgZ2VuZXJhdGUoc3RhdGUpOworfQorCit2b2lkIEFjY2Vzc0Nhc2U6
OmdlbmVyYXRlKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCit7CisgICAgQ0NhbGxIZWxw
ZXJzJiBqaXQgPSAqc3RhdGUuaml0OworICAgIFZNJiB2bSA9ICpqaXQudm0oKTsKKyAgICBQb2x5
bW9ycGhpY0FjY2VzcyYgYWNjZXNzID0gKnN0YXRlLmFjY2VzczsKKyAgICBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8gPSAqc3RhdGUuc3R1YkluZm87CisgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBqaXQuY29kZUJsb2NrKCk7CisgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSAqc3Rh
dGUuaWRlbnQ7CisgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzID0gc3RhdGUudmFsdWVSZWdzOwor
ICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGUuYmFzZUdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHN0YXRlLnNjcmF0Y2hHUFI7CisKKyAgICBBU1NFUlQobV9jb25kaXRpb25TZXQuc3RydWN0
dXJlc0Vuc3VyZVZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSk7CisK
KyAgICBpZiAoc3RydWN0dXJlKCktPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSB8fCBt
X2NvbmRpdGlvblNldC5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpCisgICAgICAgIHZt
LnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KGlkZW50LCBzdGF0ZS5hZGRXYXRj
aHBvaW50KCkpOworCisgICAgaWYgKGFkZGl0aW9uYWxTZXQoKSkKKyAgICAgICAgYWRkaXRpb25h
bFNldCgpLT5hZGQoc3RhdGUuYWRkV2F0Y2hwb2ludCgpKTsKKworICAgIGZvciAoY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6IG1fY29uZGl0aW9uU2V0KSB7CisgICAg
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY29uZGl0aW9uLm9iamVjdCgpLT5zdHJ1Y3R1cmUo
KTsKKworICAgICAgICBpZiAoY29uZGl0aW9uLmlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9w
ZXJ0eVdhdGNocG9pbnQoKSkgeworICAgICAgICAgICAgc3RydWN0dXJlLT5hZGRUcmFuc2l0aW9u
V2F0Y2hwb2ludChzdGF0ZS5hZGRXYXRjaHBvaW50KGNvbmRpdGlvbikpOworICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25kaXRpb24u
c3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQo
c3RydWN0dXJlKSk7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihjb25kaXRpb24ub2JqZWN0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3RhdGUuZmFpbEFu
ZFJlcGF0Y2guYXBwZW5kKAorICAgICAgICAgICAgaml0LmJyYW5jaFN0cnVjdHVyZSgKKyAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LAorICAgICAgICAgICAgICAgIHN0cnVjdHVyZSkpOworICAgIH0KKworICAgIHN3aXRjaCAobV90
eXBlKSB7CisgICAgY2FzZSBJbkhpdDoKKyAgICBjYXNlIEluTWlzczoKKyAgICAgICAgaml0LmJv
eEJvb2xlYW5QYXlsb2FkKG1fdHlwZSA9PSBJbkhpdCwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSk7
CisgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBN
aXNzOgorICAgICAgICBqaXQubW92ZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCB2YWx1ZVJl
Z3MpOworICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7CiAgICAgICAgIHJldHVybjsKKworICAgIGNh
c2UgTG9hZDoKKyAgICBjYXNlIEdldHRlcjoKKyAgICBjYXNlIFNldHRlcjoKKyAgICBjYXNlIEN1
c3RvbUdldHRlcjoKKyAgICBjYXNlIEN1c3RvbVNldHRlcjogeworICAgICAgICBpZiAoaXNWYWxp
ZE9mZnNldChtX29mZnNldCkpIHsKKyAgICAgICAgICAgIFN0cnVjdHVyZSogY3VyclN0cnVjdHVy
ZTsKKyAgICAgICAgICAgIGlmIChtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpCisgICAgICAgICAg
ICAgICAgY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBjdXJyU3RydWN0dXJlID0gbV9jb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRp
b24oKS5vYmplY3QoKS0+c3RydWN0dXJlKCk7CisgICAgICAgICAgICBjdXJyU3RydWN0dXJlLT5z
dGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHModm0sIG9mZnNldCk7CisgICAgICAg
IH0KKworICAgICAgICBHUFJSZWcgYmFzZUZvckdldEdQUjsKKyAgICAgICAgaWYgKHZpYVByb3h5
KCkpIHsKKyAgICAgICAgICAgIGJhc2VGb3JHZXRHUFIgPSB2YWx1ZVJlZ3MucGF5bG9hZEdQUigp
OworICAgICAgICAgICAgaml0LmxvYWRQdHIoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKGJhc2VHUFIsIEpTUHJveHk6OnRhcmdldE9mZnNldCgpKSwKKyAgICAgICAgICAg
ICAgICBiYXNlRm9yR2V0R1BSKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBiYXNlRm9y
R2V0R1BSID0gYmFzZUdQUjsKKworICAgICAgICBHUFJSZWcgYmFzZUZvckFjY2Vzc0dQUjsKKyAg
ICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBqaXQubW92
ZSgKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY29uZGl0aW9u
U2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2JqZWN0KCkpLAorICAgICAgICAgICAgICAgIHNjcmF0
Y2hHUFIpOworICAgICAgICAgICAgYmFzZUZvckFjY2Vzc0dQUiA9IHNjcmF0Y2hHUFI7CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgYmFzZUZvckFjY2Vzc0dQUiA9IGJhc2VGb3JHZXRHUFI7
CisKKyAgICAgICAgR1BSUmVnIGxvYWRlZFZhbHVlR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAg
ICAgaWYgKG1fdHlwZSAhPSBDdXN0b21HZXR0ZXIgJiYgbV90eXBlICE9IEN1c3RvbVNldHRlcikg
eworICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBMb2FkKQorICAgICAgICAgICAgICAgIGxvYWRl
ZFZhbHVlR1BSID0gdmFsdWVSZWdzLnBheWxvYWRHUFIoKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUiA9IHNjcmF0Y2hHUFI7CisKKyAgICAgICAgICAg
IEdQUlJlZyBzdG9yYWdlR1BSOworICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNl
dCkpCisgICAgICAgICAgICAgICAgc3RvcmFnZUdQUiA9IGJhc2VGb3JBY2Nlc3NHUFI7CisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cigKKyAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VGb3JBY2Nlc3NHUFIsIEpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BS
KTsKKyAgICAgICAgICAgICAgICBzdG9yYWdlR1BSID0gbG9hZGVkVmFsdWVHUFI7CisgICAgICAg
ICAgICB9CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgaml0LmxvYWQ2NChDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3Moc3RvcmFnZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uob2Zmc2V0
KSksIGxvYWRlZFZhbHVlR1BSKTsKKyNlbHNlCisgICAgICAgICAgICBpZiAobV90eXBlID09IExv
YWQpIHsKKyAgICAgICAgICAgICAgICBqaXQubG9hZDMyKAorICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RvcmFnZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uob2Zm
c2V0KSArIFRhZ09mZnNldCksCisgICAgICAgICAgICAgICAgICAgIHZhbHVlUmVncy50YWdHUFIo
KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBqaXQubG9hZDMyKAorICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdG9yYWdlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFz
ZShvZmZzZXQpICsgUGF5bG9hZE9mZnNldCksCisgICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVH
UFIpOworI2VuZGlmCisgICAgICAgIH0KKworICAgICAgICAvLyBTdHVmZiBmb3IgY3VzdG9tIGdl
dHRlcnMuCisgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBvcGVyYXRpb25DYWxsOworICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkNhbGwgaGFuZGxlckNhbGw7CisKKyAgICAgICAgLy8gU3R1ZmYgZm9y
IEpTIGdldHRlcnMuCisgICAgICAgIENDYWxsSGVscGVyczo6RGF0YUxhYmVsUHRyIGFkZHJlc3NP
ZkxpbmtGdW5jdGlvbkNoZWNrOworICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgZmFzdFBhdGhD
YWxsOworICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgc2xvd1BhdGhDYWxsOworCisgICAgICAg
IENDYWxsSGVscGVyczo6SnVtcCBzdWNjZXNzOworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAg
ZmFpbDsKKyAgICAgICAgaWYgKG1fdHlwZSAhPSBMb2FkICYmIG1fdHlwZSAhPSBNaXNzKSB7Cisg
ICAgICAgICAgICAvLyBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdoZW5ldmVyIHRoaXMgY2FsbCBp
cyBtYWRlIGluIHRoZSBmdXR1cmUsIHdlIHJlbWVtYmVyIHRoZQorICAgICAgICAgICAgLy8gcGxh
Y2UgdGhhdCB3ZSBtYWRlIGl0IGZyb20uCisgICAgICAgICAgICBqaXQuc3RvcmUzMigKKyAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdHViSW5mby5jYWxsU2l0ZUlu
ZGV4LmJpdHMoKSksCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3Ioc3RhdGlj
X2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihKU1N0YWNrOjpBcmd1bWVudENvdW50KSkpOworCisgICAg
ICAgICAgICBpZiAobV90eXBlID09IEdldHRlciB8fCBtX3R5cGUgPT0gU2V0dGVyKSB7CisgICAg
ICAgICAgICAgICAgLy8gQ3JlYXRlIGEgSlMgY2FsbCB1c2luZyBhIEpTIGNhbGwgaW5saW5lIGNh
Y2hlLiBBc3N1bWUgdGhhdDoKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8v
IC0gU1AgaXMgYWxpZ25lZCBhbmQgcmVwcmVzZW50cyB0aGUgZXh0ZW50IG9mIHRoZSBjYWxsaW5n
IGNvbXBpbGVyJ3Mgc3RhY2sgdXNhZ2UuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAg
ICAgICAvLyAtIEZQIGlzIHNldCBjb3JyZWN0bHkgKGkuZS4gaXQgcG9pbnRzIHRvIHRoZSBjYWxs
ZXIncyBjYWxsIGZyYW1lIGhlYWRlcikuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAg
ICAgICAvLyAtIFNQIC0gRlAgaXMgYW4gYWxpZ25lZCBkaWZmZXJlbmNlLgorICAgICAgICAgICAg
ICAgIC8vCisgICAgICAgICAgICAgICAgLy8gLSBBbnkgYnl0ZSBiZXR3ZWVuIEZQIChleGNsdXNp
dmUpIGFuZCBTUCAoaW5jbHVzaXZlKSBjb3VsZCBiZSBsaXZlIGluIHRoZSBjYWxsaW5nCisgICAg
ICAgICAgICAgICAgLy8gICBjb2RlLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAg
ICAgLy8gVGhlcmVmb3JlLCB3ZSB0ZW1wb3JhcmlseSBncm93IHRoZSBzdGFjayBmb3IgdGhlIHB1
cnBvc2Ugb2YgdGhlIGNhbGwgYW5kIHRoZW4KKyAgICAgICAgICAgICAgICAvLyBzaHJpbmsgaXQg
YWZ0ZXIuCisKKyAgICAgICAgICAgICAgICBtX3JhcmVEYXRhLT5jYWxsTGlua0luZm8gPSBzdGQ6
Om1ha2VfdW5pcXVlPENhbGxMaW5rSW5mbz4oKTsKKyAgICAgICAgICAgICAgICBtX3JhcmVEYXRh
LT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxsLCBzdHViSW5mby5jb2RlT3JpZ2luLCBsb2Fk
ZWRWYWx1ZUdQUik7CisKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRv
bmU7CisKKyAgICAgICAgICAgICAgICAvLyBUaGVyZSBpcyBhICJ0aGlzIiBhcmd1bWVudC4KKyAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlBhcmFtZXRlcnMgPSAxOworICAgICAgICAg
ICAgICAgIC8vIC4uLiBhbmQgYSB2YWx1ZSBhcmd1bWVudCBpZiB3ZSdyZSBjYWxsaW5nIGEgc2V0
dGVyLgorICAgICAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gU2V0dGVyKQorICAgICAgICAgICAg
ICAgICAgICBudW1iZXJPZlBhcmFtZXRlcnMrKzsKKworICAgICAgICAgICAgICAgIC8vIEdldCB0
aGUgYWNjZXNzb3I7IGlmIHRoZXJlIGFpbid0IG9uZSB0aGVuIHRoZSByZXN1bHQgaXMganNVbmRl
ZmluZWQoKS4KKyAgICAgICAgICAgICAgICBpZiAobV90eXBlID09IFNldHRlcikgeworICAgICAg
ICAgICAgICAgICAgICBqaXQubG9hZFB0cigKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6QWRkcmVzcyhsb2FkZWRWYWx1ZUdQUiwgR2V0dGVyU2V0dGVyOjpvZmZzZXRPZlNl
dHRlcigpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSKTsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFB0cigKKyAg
ICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhsb2FkZWRWYWx1ZUdQ
UiwgR2V0dGVyU2V0dGVyOjpvZmZzZXRPZkdldHRlcigpKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGxvYWRlZFZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXAgcmV0dXJuVW5kZWZpbmVkID0gaml0LmJyYW5jaFRlc3RQdHIo
CisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6WmVybywgbG9hZGVkVmFsdWVHUFIp
OworCisgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZSZWdzRm9yQ2FsbCA9IEpTU3Rh
Y2s6OkNhbGxGcmFtZUhlYWRlclNpemUgKyBudW1iZXJPZlBhcmFtZXRlcnM7CisKKyAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCA9CisgICAgICAgICAgICAgICAg
ICAgIG51bWJlck9mUmVnc0ZvckNhbGwgKiBzaXplb2YoUmVnaXN0ZXIpICsgc2l6ZW9mKENhbGxl
ckZyYW1lQW5kUEMpOworCisgICAgICAgICAgICAgICAgdW5zaWduZWQgYWxpZ25lZE51bWJlck9m
Qnl0ZXNGb3JDYWxsID0KKyAgICAgICAgICAgICAgICAgICAgV1RGOjpyb3VuZFVwVG9NdWx0aXBs
ZU9mKHN0YWNrQWxpZ25tZW50Qnl0d3MoKSwgbnVtYmVyT2ZCeXRlc0ZvckNhbGwpOworCisgICAg
ICAgICAgICAgICAgaml0LnN1YlB0cigKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxsKSwKKyAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKKyAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MgY2FsbGVlRnJhbWUgPSBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVy
UmVnaXN0ZXIsCisgICAgICAgICAgICAgICAgICAgIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNp
emVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOworCisgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIo
CisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG51bWJlck9m
UGFyYW1ldGVycyksCisgICAgICAgICAgICAgICAgICAgIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQo
SlNTdGFjazo6QXJndW1lbnRDb3VudCAqIHNpemVvZihSZWdpc3RlcikgKyBQYXlsb2FkT2Zmc2V0
KSk7CisKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmVDZWxsKAorICAgICAgICAgICAgICAgICAg
ICBsb2FkZWRWYWx1ZUdQUiwgY2FsbGVlRnJhbWUud2l0aE9mZnNldChKU1N0YWNrOjpDYWxsZWUg
KiBzaXplb2YoUmVnaXN0ZXIpKSk7CisKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmVDZWxsKAor
ICAgICAgICAgICAgICAgICAgICBiYXNlRm9yR2V0R1BSLAorICAgICAgICAgICAgICAgICAgICBj
YWxsZWVGcmFtZS53aXRoT2Zmc2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDApLm9mZnNl
dCgpICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworCisgICAgICAgICAgICAgICAgaWYgKGtpbmQgPT0g
Q2FsbFNldHRlcikgeworICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSgKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHZhbHVlUmVncywKKyAgICAgICAgICAgICAgICAgICAgICAgIGNh
bGxlZUZyYW1lLndpdGhPZmZzZXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlydHVh
bFJlZ2lzdGVyRm9yQXJndW1lbnQoMSkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHNs
b3dDYXNlID0gaml0LmJyYW5jaFB0cldpdGhQYXRjaCgKKyAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpOb3RFcXVhbCwgbG9hZGVkVmFsdWVHUFIsIGFkZHJlc3NPZkxpbmtGdW5jdGlv
bkNoZWNrLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
MCkpOworCisgICAgICAgICAgICAgICAgZmFzdFBhdGhDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisK
KyAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMihhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwpLAorICAgICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAg
ICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsR2V0dGVyKQorICAgICAgICAgICAgICAgICAgICBq
aXQuc2V0dXBSZXN1bHRzKHZhbHVlUmVncyk7CisKKyAgICAgICAgICAgICAgICBkb25lLmFwcGVu
ZChqaXQuanVtcCgpKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5saW5rKCZqaXQpOworCisg
ICAgICAgICAgICAgICAgaml0Lm1vdmUobG9hZGVkVmFsdWVHUFIsIEdQUkluZm86OnJlZ1QwKTsK
KyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICAgICAgICAgIC8vIFdlICphbHdheXMqIGtu
b3cgdGhhdCB0aGUgZ2V0dGVyL3NldHRlciwgaWYgbm9uLW51bGwsIGlzIGEgY2VsbC4KKyAgICAg
ICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpD
ZWxsVGFnKSwgR1BSSW5mbzo6cmVnVDEpOworI2VuZGlmCisgICAgICAgICAgICAgICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fcmFyZURhdGEtPmNhbGxMaW5rSW5mby5n
ZXQoKSksIEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwgPSBq
aXQubmVhckNhbGwoKTsKKworICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoCisgICAgICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFsaWduZWROdW1iZXJPZkJ5dGVz
Rm9yQ2FsbCksCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVy
UmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIGlmIChraW5kID09IENhbGxHZXR0ZXIpCisgICAg
ICAgICAgICAgICAgICAgIGppdC5zZXR1cFJlc3VsdHModmFsdWVSZWdzKTsKKworICAgICAgICAg
ICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICAgICAgICAgIHJldHVyblVu
ZGVmaW5lZC5saW5rKCZqaXQpOworCisgICAgICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ2FsbEdl
dHRlcikKKyAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmVUcnVzdGVkVmFsdWUoanNVbmRlZmlu
ZWQoKSwgdmFsdWVSZWdzKTsKKworICAgICAgICAgICAgICAgIGRvbmUubGluaygmaml0KTsKKwor
ICAgICAgICAgICAgICAgIHN0YXRlLmNhbGxiYWNrcy5hcHBlbmQoCisgICAgICAgICAgICAgICAg
ICAgIFsmXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICAg
ICAgbV9yYXJlRGF0YS0+Y2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKHNsb3dQYXRo
Q2FsbCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9m
KGFkZHJlc3NPZkxpbmtGdW5jdGlvbkNoZWNrKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChmYXN0UGF0aENhbGwpKTsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNsb3dQYXRoQ2FsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9j
YXRpb25MYWJlbCh2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkp
OworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgLy8gZ2V0dGVyOiBFbmNvZGVkSlNWYWx1ZSAoKkdldFZhbHVlRnVuYykoRXhlY1N0
YXRlKiwgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSk7CisgICAgICAgICAgICAgICAgLy8gc2V0dGVyOiB2b2lkICgqUHV0VmFsdWVGdW5j
KShFeGVjU3RhdGUqLCBKU09iamVjdCogYmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc09iamVjdCwg
RW5jb2RlZEpTVmFsdWUgdmFsdWUpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICAg
ICAgaWYgKGtpbmQgPT0gQ2FsbEN1c3RvbUdldHRlcikgeworICAgICAgICAgICAgICAgICAgICBq
aXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKAorICAgICAgICAgICAgICAgICAgICAgICAg
YmFzZUZvckFjY2Vzc0dQUiwgYmFzZUZvckdldEdQUiwKKyAgICAgICAgICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihwcm9wZXJ0eU5hbWUuaW1wbCgpKSk7CisgICAg
ICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoYmFzZUZvckFjY2Vzc0dQUiwgYmFzZUZvckdldEdQUiwgdmFsdWVSZWdz
LmdwcigpKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ2FsbEN1c3RvbUdl
dHRlcikgeworICAgICAgICAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgYmFzZUZvckFjY2Vzc0dQUiwgYmFzZUZvckdl
dEdQUiwKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkNlbGxUYWcpLAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKHByb3BlcnR5TmFtZS5pbXBsKCkpKTsKKyAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgYmFzZUZvckFjY2Vzc0dQUiwgYmFzZUZvckdl
dEdQUiwKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkNlbGxUYWcpLAorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVSZWdzLnBh
eWxvYWRHUFIoKSwgdmFsdWVSZWdzLnRhZ0dQUigpKTsKKyAgICAgICAgICAgICAgICB9CisjZW5k
aWYKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsICZ2bS0+dG9wQ2FsbEZyYW1lKTsKKworICAgICAgICAgICAgICAgIG9wZXJhdGlvbkNhbGwg
PSBqaXQuY2FsbCgpOworICAgICAgICAgICAgICAgIGlmIChraW5kID09IENhbGxDdXN0b21HZXR0
ZXIpCisgICAgICAgICAgICAgICAgICAgIGppdC5zZXR1cFJlc3VsdHModmFsdWVSZWdzKTsKKyAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgbm9FeGNlcHRpb24gPQorICAgICAgICAg
ICAgICAgICAgICBqaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKENDYWxsSGVscGVyczo6SW52ZXJ0ZWRF
eGNlcHRpb25DaGVjayk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBqaXQuc2V0dXBB
cmd1bWVudHMoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHZtKSwgR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIGhhbmRsZXJDYWxsID0gaml0LmNhbGwoKTsK
KyAgICAgICAgICAgICAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgbm9FeGNlcHRpb24ubGluaygmaml0KTsKKworICAgICAgICAg
ICAgICAgIHN0YXRlLmNhbGxiYWNrcy5hcHBlbmQoCisgICAgICAgICAgICAgICAgICAgIFsmXSAo
TGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1
ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIEZ1bmN0aW9uUHRyKG1fcmFyZURhdGEtPmN1c3RvbUFj
Y2Vzc29yLm9wYXF1ZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5r
KGhhbmRsZXJDYWxsLCBsb29rdXBFeGNlcHRpb25IYW5kbGVyKTsKKyAgICAgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc3RhdGUuc3VjY2VlZCgp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2FzZSBSZXBsYWNlOiB7CisgICAgICAg
IGlmIChpc0lubGluZU9mZnNldChtX29mZnNldCkpIHsKKyAgICAgICAgICAgIGppdC5zdG9yZVZh
bHVlKAorICAgICAgICAgICAgICAgIHZhbHVlUmVncywKKyAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICAgICAgICAgIGJhc2VHUFIsCisgICAgICAgICAg
ICAgICAgICAgIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArCisgICAgICAgICAg
ICAgICAgICAgIG9mZnNldEluSW5saW5lU3RvcmFnZShtX29mZnNldCkgKiBzaXplb2YoSlNWYWx1
ZSkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVZhbHVlKAorICAgICAgICAgICAgICAgIHZh
bHVlUmVncywKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAg
ICAgICAgICAgICAgIHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZseShtX29mZnNldCkgKiBz
aXplb2YoSlNWYWx1ZSkpKTsKKyAgICAgICAgfQorICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYXNlIFRyYW5zaXRpb246IHsKKyAgICAgICAg
Ly8gQWNjZXNzQ2FzZTo6dHJhbnNpdGlvbigpIHNob3VsZCBoYXZlIHJldHVybmVkIG51bGwuCisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzID49IDYgfHwg
IXN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpIHx8IHN0cnVjdHVyZSgpLT5vdXRPZkxp
bmVDYXBhY2l0eSgpID09IG5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoIW9sZFN0cnVjdHVyZS0+Y291bGRIYXZlSW5kZXhpbmdIZWFk
ZXIoKSk7CisKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKKworICAg
ICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHN0dWJJbmZvLnBhdGNoLnVz
ZWRSZWdpc3RlcnMpOworICAgICAgICBhbGxvY2F0b3IubG9jayhiYXNlR1BSKTsKKyAgICAgICAg
YWxsb2NhdG9yLmxvY2sodmFsdWVSZWdzKTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2soc2NyYXRj
aEdQUik7CisKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIyID0gYWxsb2NhdG9yLmFsbG9jYXRl
U2NyYXRjaEdQUigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjM7CisgICAgICAgIGlmIChu
ZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKQorICAgICAgICAgICAgJiYgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCkpCisgICAgICAgICAgICBzY3JhdGNoR1BSMyA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0
Y2hHUFIoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2NyYXRjaEdQUjMgPSBJbnZhbGlk
R1BSUmVnOworCisgICAgICAgIHNpemVfdCBudW1iZXJPZlBhZGRpbmdCeXRlcyA9IGFsbG9jYXRl
LnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKGppdCk7CisKKyAgICAgICAgQVNTRVJU
KHN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgp
KTsKKworICAgICAgICBib29sIHNjcmF0Y2hHUFJIYXNTdG9yYWdlID0gZmFsc2U7CisKKyAgICAg
ICAgaWYgKG5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IHN0cnVjdHVyZSgp
LT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CisgICAgICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG5l
d1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOworICAg
ICAgICAgICAgQ29waWVkQWxsb2NhdG9yKiBjb3BpZWRBbGxvY2F0b3IgPSAmdm0tPmhlYXAuc3Rv
cmFnZUFsbG9jYXRvcigpOworCisgICAgICAgICAgICBpZiAoIXN0cnVjdHVyZSgpLT5vdXRPZkxp
bmVDYXBhY2l0eSkgeworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKCZjb3BpZWRBbGxvY2F0
b3ItPm1fY3VycmVudFJlbWFpbmluZywgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgc2xv
d1BhdGguYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICBqaXQuYnJhbmNoU3ViUHRyKAorICAg
ICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpTaWduZWQsIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BSKSk7CisgICAgICAgICAgICAgICAgaml0
LnN0b3JlUHRyKHNjcmF0Y2hHUFIsICZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmlu
Zyk7CisgICAgICAgICAgICAgICAgaml0Lm5lZ1B0cihzY3JhdGNoR1BSKTsKKyAgICAgICAgICAg
ICAgICBqaXQuYWRkUHRyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFic29s
dXRlQWRkcmVzcygmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRQYXlsb2FkRW5kKSwgc2NyYXRj
aEdQUik7CisgICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihzaXplb2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKG5l
d1NpemUgPiBvbGRTaXplKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpLCBzY3JhdGNoR1BSMyk7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoJmNvcGll
ZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAg
ICAgICBzbG93UGF0aC5hcHBlbmQoCisgICAgICAgICAgICAgICAgICAgIGppdC5icmFuY2hTdWJQ
dHIoCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlNpZ25lZCwgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIobmV3U2l6ZSksIHNjcmF0Y2hHUFIpKTsKKyAgICAgICAgICAg
ICAgICBqaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50
UmVtYWluaW5nKTsKKyAgICAgICAgICAgICAgICBqaXQubmVnUHRyKHNjcmF0Y2hHUFIpOworICAg
ICAgICAgICAgICAgIGppdC5hZGRQdHIoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6QWJzb2x1dGVBZGRyZXNzKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQp
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKHNpemVvZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
ICAgIC8vIFdlIGhhdmUgc2NyYXRjaEdQUiA9IG5ldyBzdG9yYWdlLCBzY3JhdGNoR1BSMyA9IG9s
ZCBzdG9yYWdlLAorICAgICAgICAgICAgICAgIC8vIHNjcmF0Y2hHUFIyID0gYXZhaWxhYmxlCisg
ICAgICAgICAgICAgICAgZm9yIChzaXplX3Qgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgb2xkU2l6ZTsg
b2Zmc2V0ICs9IHNpemVvZih2b2lkKikpIHsKKyAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRQ
dHIoCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2NyYXRjaEdQUjMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZih2b2lkKikpKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIyKTsKKyAgICAgICAgICAgICAgICAgICAg
aml0LnN0b3JlUHRyKAorICAgICAgICAgICAgICAgICAgICAgICAgc2NyYXRjaEdQUjIsCisgICAg
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2NyYXRjaEdQUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAt
c3RhdGljX2Nhc3Q8cHRyZGlmZl90PihvZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2Yo
dm9pZCopKSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhic2FzZUdQ
UiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7CisgICAgICAgICAgICBzY3JhdGNoR1BS
SGFzU3RvcmFnZSA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICB1aW50MzJfdCBzdHJ1Y3R1
cmVCaXRzID0gYml0d2lzZV9jYXN0PHVpbnQzMl90PihzdHJ1Y3R1cmUtPmlkKCkpOworICAgICAg
ICBqaXQuc3RvcmUzMigKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihz
dHJ1Y3R1cmVCaXRzKSwKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BS
LCBKU0NlbGw6c3RydWN0dXJlSURPZmZzZXQoKSkpOworCisgICAgICAgIGlmIChpc0lubGluZU9m
ZnNldChtX29mZnNldCkpIHsKKyAgICAgICAgICAgIGppdC5zdG9yZVZhbHVlKAorICAgICAgICAg
ICAgICAgIHZhbHVlUmVncywKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
CisgICAgICAgICAgICAgICAgICAgIGJhc2VHUFIsCisgICAgICAgICAgICAgICAgICAgIEpTT2Jq
ZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArCisgICAgICAgICAgICAgICAgICAgIG9mZnNl
dEluSW5saW5lU3RvcmFnZShtX29mZnNldCAqIHNpemVvZihKU1ZhbHVlKSkpKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIGlmICghc2NyYXRjaEdQUkhhc1N0b3JhZ2UpCisgICAgICAg
ICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgaml0LnN0
b3JlVmFsdWUoCisgICAgICAgICAgICAgICAgdmFsdWVSZWdzLAorICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbkJ1dHRlcmZseShtX29mZnNl
dCkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKKyAgICAgICAgfQorCisgICAgICAgIFNjcmF0Y2hCdWZm
ZXIqIHNjcmF0Y2hCdWZmZXIgPSBudWxscHRyOworICAgICAgICBpZiAobmV3U3RydWN0dXJlKCkt
Pm91dE9mTGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkp
CisgICAgICAgICAgICBzY3JhdGNoQnVmZmVyID0gdm0tPnNjcmF0Y2hCdWZmZXJGb3JTaXplKGFs
bG9jYXRvci5kZXNpcmVkU2NyYXRjaEJ1ZmZlclNpemVGb3JDYWxsKCkpOworCisjaWYgRU5BQkxF
KEdHQykKKyAgICAgICAgaWYgKG5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9
IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CisgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OkNhbGwgY2FsbEZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyOworICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBqaXQuanVtcElmSXNS
ZW1lbWJlcmVkT3JJbkVkZW4oYmFzZUdQUik7CisgICAgICAgICAgICBXcml0ZUJhcnJpZXJCdWZm
ZXImIHdyaXRlQmFycmllckJ1ZmZlciA9IGppdC52bSgpLT5oZWFwLndyaXRlQmFycmllckJ1ZmZl
cigpOworICAgICAgICAgICAgaml0LmxvYWQzMih3cml0ZUJhcnJpZXJCdWZmZXIuY3VycmVudElu
ZGV4QWRkcmVzcygpLCBzY3JhdGNoR1BSMik7CisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1
bXAgbmVlZFRvRmx1c2ggPQorICAgICAgICAgICAgICAgIGppdC5icmFuY2gzMigKKyAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWwsIHNjcmF0Y2hHUFIyLAorICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMih3cml0ZUJhcnJpZXJC
dWZmZXIuY2FwYWNpdHkoKSkpOworCisgICAgICAgICAgICBqaXQuYWRkMzIoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2hHUFIyKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTMy
KHNjcmF0Y2hHUFIyLCB3cml0ZUJhcnJpZXJCdWZmZXIuY3VycmVudEluZGV4QWRkcmVzcygpKTsK
KworICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHdyaXRl
QmFycmllckJ1ZmZlci5idWZmZXIoKSksIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgICAgIC8vIFdl
IHVzZSBhbiBvZmZzZXQgb2YgLXNpemVvZih2b2lkKikgYmVjYXVzZSB3ZSBhbHJlYWR5IGFkZGVk
IDEgdG8gc2NyYXRjaEdQUjIuCisgICAgICAgICAgICBqaXQuc3RvcmVQdHIoCisgICAgICAgICAg
ICAgICAgYmFzZUdQUiwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleCgK
KyAgICAgICAgICAgICAgICAgICAgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBDQ2FsbEhlbHBl
cnM6OlNjYWxlUHRyLAorICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQzMl90Pigt
c2l6ZW9mKHZvaWQqKSkpKTsKKworICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmVX
aXRoQmFycmllciA9IGppdC5qdW1wKCk7CisgICAgICAgICAgICBuZWVkVG9GbHVzaC5saW5rKCZq
aXQpOworCisgICAgICAgICAgICBhbGxvY2F0b3IucHJlc2VydmVVc2VkUmVnaXN0ZXJzVG9TY3Jh
dGNoQnVmZmVyRm9yQ2FsbChqaXQsIHNjcmF0Y2hCdWZmZXIsIHNjcmF0Y2hHUFIyKTsKKyAgICAg
ICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUdQUik7CisgICAgICAg
ICAgICBjYWxsRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIgPSBqaXQuY2FsbCgpOworICAgICAgICAg
ICAgYWxsb2NhdG9yLnJlc3RvcmVVc2VkUmVnaXN0ZXJzRnJvbVNjcmF0Y2hCdWZmZXJGb3JDYWxs
KAorICAgICAgICAgICAgICAgIGppdCwgc2NyYXRjaEJ1ZmZlciwgc2NyYXRjaEdQUjIpOworCisg
ICAgICAgICAgICBkb25lV2l0aEJhcnJpZXIubGluaygmaml0KTsKKyAgICAgICAgICAgIG93bmVy
SXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluaygmaml0KTsKKworICAgICAgICAgICAgc3RhdGUuY2Fs
bGJhY2tzLmFwcGVuZCgKKyAgICAgICAgICAgICAgICBbJl0gKExpbmtCdWZmZXImIGxpbmtCdWZm
ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGxGbHVzaFdyaXRl
QmFycmllckJ1ZmZlciwgb3BlcmF0aW9uRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIpOworICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICB9CisjZW5kaWYgLy8gRU5BQkxFKEdHQykKKyAgICAgICAg
CisgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKKworICAgICAgICBpZiAobmV3U3RydWN0dXJlKCkt
Pm91dE9mTGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkp
IHsKKyAgICAgICAgICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7CisgICAgICAgICAgICBhbGxvY2F0
b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIG51bWJlck9mUGFkZGluZ0J5
dGVzKTsKKyAgICAgICAgICAgIGFsbG9jYXRvci5wcmVzZXJ2ZVVzZWRSZWdpc3RlcnNUb1NjcmF0
Y2hCdWZmZXJGb3JDYWxsKGppdCwgc2NyYXRjaEJ1ZmZlciwgc2NyYXRjaEdQUik7CisjaWYgVVNF
KEpTVkFMVUU2NCkKKyAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
CisgICAgICAgICAgICAgICAgYmFzZUdQUiwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihzbG90LmNhY2hlZE9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICB2YWx1
ZUdQUik7CisjZWxzZQorICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZSgKKyAgICAgICAgICAgICAgICBiYXNlR1BSLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKHNsb3QuY2FjaGVkT2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIHZh
bHVlR1BSLCB2YWx1ZVRhZ0dQUik7CisjZW5kaWYKKyAgICAgICAgICAgIG9wZXJhdGlvbkNhbGwg
PSBqaXQuY2FsbCgpOworICAgICAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVVc2VkUmVnaXN0ZXJz
RnJvbVNjcmF0Y2hCdWZmZXJGb3JDYWxsKGppLCBzY3JhdGNoQnVmZmVyLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKKworICAgICAgICAgICAgc3RhdGUuY2FsbGJh
Y2tzLmFwcGVuZCgKKyAgICAgICAgICAgICAgICBbJl0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
IHsKKyAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIG9w
ZXJhdGlvblJlYWxsb2NhdGVTdG9yYWdlQW5kRmluaXNoUHV0KTsKKyAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2FzZSBBcnJheUxl
bmd0aDogeworICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGpp
dC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6
bGVuZ3RoT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9y
ZS5hcHBlbmQoCisgICAgICAgICAgICBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpMZXNzVGhh
biwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAg
aml0LmJveEludDMyKHNjcmF0Y2hHUFIsIHZhbHVlUmVncyk7CisgICAgICAgIHN0YXRlLnN1Y2Nl
ZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNhc2UgU3RyaW5nTGVuZ3RoOiB7
CisgICAgICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTU3Ry
aW5nOjpvZmZzZXRPZkxlbmd0aCgpKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSk7CisgICAgICAg
IGppdC5ib3hJbnQzMih2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB2YWx1ZVJlZ3MpOworICAgICAg
ICBzdGF0ZS5zdWNjZWVkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9IH0KICAgICAKLSAgICBt
X2xpc3QuYXBwZW5kKEdldEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1cmVTdHViSW5mbyhzdHViSW5m
bykpOworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLVBvbHltb3JwaGlj
R2V0QnlJZExpc3QqIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmZyb20oU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvKQorUG9seW1vcnBoaWNBY2Nlc3M6OlBvbHltb3JwaGljQWNjZXNzKCkgeyB9
CitQb2x5bW9ycGhpY0FjY2Vzczo6flBvbHltb3JwaGljQWNjZXNzKCkgeyB9CisKK01hY3JvQXNz
ZW1ibGVyQ29kZVB0ciBQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZVdpdGhDYXNlcygKKyAg
ICBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8sIGNvbnN0IElkZW50aWZpZXImIGlkZW50LAorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8
QWNjZXNzQ2FzZT4+IG5ld0FjY2Vzc2VzKQogewotICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBl
ID09IGFjY2Vzc19nZXRfYnlfaWRfbGlzdCkKLSAgICAgICAgcmV0dXJuIHN0dWJJbmZvLnUuZ2V0
QnlJZExpc3QubGlzdDsKLSAgICAKLSAgICBBU1NFUlQoCi0gICAgICAgIHN0dWJJbmZvLmFjY2Vz
c1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmCi0gICAgICAgIHx8IHN0dWJJbmZvLmFjY2Vz
c1R5cGUgPT0gYWNjZXNzX3Vuc2V0KTsKLSAgICAKLSAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0
KiByZXN1bHQgPSBuZXcgUG9seW1vcnBoaWNHZXRCeUlkTGlzdChzdHViSW5mbyk7CisgICAgVmVj
dG9yPEFjY2Vzc0Nhc2UqPiBuZXdBY2Nlc3NQdHJzKG5ld0FjY2Vzc2VzLnNpemUoKSk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gbmV3QWNjZXNzZXMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIEFj
Y2Vzc0Nhc2UqIGFjY2Vzc0Nhc2UgPSBuZXdBY2Nlc3Nlc1tpXS5nZXQoKTsKKyAgICAgICAgCisg
ICAgICAgIGlmIChhY2Nlc3NDYXNlLT5kb2VzQ2FsbHMoKSAmJiBzdHViSW5mby5wYXRjaC5zcGls
bE1vZGUgPT0gTmVlZFRvU3BpbGwpCisgICAgICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyKCk7CisgICAgICAgIAorICAgICAgICBuZXdBY2Nlc3NQdHJzW2ldID0gYWNjZXNzQ2Fz
ZTsKKyAgICB9CiAgICAgCi0gICAgc3R1YkluZm8uaW5pdEdldEJ5SWRMaXN0KHJlc3VsdCk7Cisg
ICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPj4gcmVwbGFjZWQ7CisgICAgZm9y
IChhdXRvJiBlbnRyeSA6IG5ld0FjY2Vzc2VzKQorICAgICAgICBhZGRBY2Nlc3NDYXNlKHN0ZDo6
bW92ZShlbnRyeSksIHJlcGxhY2VkKTsKICAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotfQorICAg
IGlmIChtX2xpc3Quc2l6ZSgpID4gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKSB7CisgICAg
ICAgIHVuZG9BZGRBY2Nlc3NDYXNlKG5ld0FjY2Vzc1B0cnMsIHN0ZDo6bW92ZShyZXBsYWNlZCkp
OworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7CisgICAgfQogCi1Qb2x5
bW9ycGhpY0dldEJ5SWRMaXN0Ojp+UG9seW1vcnBoaWNHZXRCeUlkTGlzdCgpIHsgfQorICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciByZXN1bHQgPSByZWdlbmVyYXRlKHZtLCBjb2RlQmxvY2ssIHN0
dWJJbmZvLCBpZGVudCk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgdW5kb0FkZEFjY2Vz
c0Nhc2UobmV3QWNjZXNzUHRycywgc3RkOjptb3ZlKHJlcGxhY2VkKSk7CisgICAgICAgIHJldHVy
biBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKKyAgICB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0
ciBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpjdXJyZW50U2xvd1BhdGhUYXJnZXQoCi0gICAgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKSBjb25zdAotewotICAgIGlmIChpc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybiBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChz
dHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKLSAgICByZXR1cm4gbV9saXN0Lmxh
c3QoKS5zdHViUm91dGluZSgpLT5jb2RlKCkuY29kZSgpOworICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLXZvaWQgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6YWRkQWNjZXNzKGNvbnN0IEdldEJ5SWRB
Y2Nlc3MmIGFjY2VzcykKK01hY3JvQXNzZW1ibGVyQ29kZVB0ciBQb2x5bW9ycGhpY0FjY2Vzczo6
cmVnZW5lcmF0ZVdpdGhDYXNlKAorICAgIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsCisgICAg
c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IG5ld0FjY2VzcykKIHsKLSAgICBBU1NFUlQoIWlz
RnVsbCgpKTsKLSAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgcmVzaXppbmcgb3B0aW1pemVzIGZv
ciBzcGFjZSwgbm90IHRpbWUuCi0gICAgbV9saXN0LnJlc2l6ZVRvRml0KG1fbGlzdC5zaXplKCkg
KyAxKTsKLSAgICBtX2xpc3QubGFzdCgpID0gYWNjZXNzOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1
ZV9wdHI8QWNjZXNzQ2FzZT4+IG5ld0FjY2Vzc2VzOworICAgIG5ld0FjY2Vzc2VzLmFwcGVuZChz
dGQ6Om1vdmUobmV3QWNjZXNzKSk7CisgICAgcmV0dXJuIHJlZ2VuZXJhdGVXaXRoQ2FzZXModm0s
IGNvZGVCbG9jaywgc3R1YkluZm8sIGlkZW50LCBuZXdBY2Nlc3Nlcyk7CiB9CiAKLWJvb2wgUG9s
eW1vcnBoaWNHZXRCeUlkTGlzdDo6aXNGdWxsKCkgY29uc3QKK2Jvb2wgUG9seW1vcnBoaWNBY2Nl
c3M6OmlzRnVsbCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKHNpemUoKSA8PSBQT0xZTU9SUEhJQ19M
SVNUX0NBQ0hFX1NJWkUpOwogICAgIHJldHVybiBzaXplKCkgPT0gUE9MWU1PUlBISUNfTElTVF9D
QUNIRV9TSVpFOwogfQogCi1ib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmlzQWxtb3N0RnVs
bCgpIGNvbnN0Citib29sIFBvbHltb3JwaGljQWNjZXNzOjppc0FsbW9zdEZ1bGwoKSBjb25zdAog
ewogICAgIEFTU0VSVChzaXplKCkgPD0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKTsKICAg
ICByZXR1cm4gc2l6ZSgpID49IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDE7CiB9CiAK
LWJvb2wgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6ZGlkU2VsZlBhdGNoaW5nKCkgY29uc3QKK2Jv
b2wgUG9seW1vcnBoaWNBY2Nlc3M6OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0CiB7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIGlmIChhdChpKS50eXBlKCkg
PT0gR2V0QnlJZEFjY2Vzczo6U2ltcGxlSW5saW5lKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemUoKTsgKytpKSB7CisgICAgICAgIGlm
ICghYXQoaSkudmlzaXRXZWFrKHZtKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFBvbHltb3Jw
aGljR2V0QnlJZExpc3Q6OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0Cit2b2lkIFBvbHltb3JwaGlj
QWNjZXNzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIGlmICghYXQoaSkudmlzaXRXZWFrKHZtKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBvdXQucHJpbnQoUmF3UG9pbnRlcih0aGlz
KSwgIjpbIik7CisgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgIGZvciAoYXV0byYgZW50cnkg
OiBtX2xpc3QpCisgICAgICAgIG91dC5wcmludChjb21tYSwgKmVudHJ5KTsKKyAgICBvdXQucHJp
bnQoIl0iKTsKK30KKworVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPj4KK1BvbHlt
b3JwaGljQWNjZXNzOjphZGRBY2Nlc3NDYXNlKHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBh
Y2Nlc3MpCit7CisgICAgQVNTRVJUKCFpc0Z1bGwoKSk7CisKKyAgICBWZWN0b3I8c3RkOjp1bmlx
dWVfcHRyPEFjY2Vzc0Nhc2U+PiByZXBsYWNlZDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9saXN0LnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChhY2Nlc3MuY2FuUmVwbGFjZSgq
bV9saXN0W2ldKSkgeworICAgICAgICAgICAgcmVwbGFjZWQuYXBwZW5kKHN0ZDo6bW92ZShtX2xp
c3RbaV0pKTsKKyAgICAgICAgICAgIG1fbGlzdFtpLS1dID0gc3RkOjptb3ZlKG1fbGlzdC5sYXN0
KCkpOworICAgICAgICAgICAgbV9saXN0LnRha2VMYXN0KCk7CisgICAgICAgIH0KICAgICB9Ci0g
ICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHJlc2l6aW5n
IG9wdGltaXplcyBmb3Igc3BhY2UsIG5vdCB0aW1lLgorICAgIG1fbGlzdC5yZXNpemVUb0ZpdCht
X2xpc3Quc2l6ZSgpICsgMSk7CisgICAgbV9saXN0Lmxhc3QoKSA9IGFjY2VzczsKKyAgICByZXR1
cm4gcmVwbGFjZWQ7Cit9CisKK3ZvaWQgUG9seW1vcnBoaWNBY2Nlc3M6OnVuZG9BZGRBY2Nlc3ND
YXNlKAorICAgIGNvbnN0IFZlY3RvcjxBY2Nlc3NDYXNlKj4mIHRvUmVtb3ZlLCBWZWN0b3I8c3Rk
Ojp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+PiByZXBsYWNlZCkKK3sKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9saXN0LnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICh0b1JlbW92ZS5j
b250YWlucyhtX2xpc3RbaV0uZ2V0KCkpKSB7CisgICAgICAgICAgICBtX2xpc3RbaS0tXSA9IHN0
ZDo6bW92ZShtX2xpc3QubGFzdCgpKTsKKyAgICAgICAgICAgIG1fbGlzdC50YWtlTGFzdCgpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChhdXRvJiBlbnRyeSA6IHJlcGxhY2VkKQorICAg
ICAgICBtX2xpc3QuYXBwZW5kKHN0ZDo6bW92ZShlbnRyeSkpOworfQorCitNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgUG9seW1vcnBoaWNBY2Nlc3M6OnJlZ2VuZXJhdGUoCisgICAgVk0mIHZtLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCkKK3sKKyAgICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUgc3RhdGU7CisKKyAg
ICBzdGF0ZS5hY2Nlc3MgPSB0aGlzOworICAgIHN0YXRlLnN0dWJJbmZvID0gJnN0dWJJbmZvOwor
ICAgIHN0YXRlLmlkZW50ID0gJmlkZW50OworICAgIAorICAgIHN0YXRlLmJhc2VHUFIgPSBzdGF0
aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmJhc2VHUFIpOworICAgIHN0YXRlLnZhbHVl
UmVncyA9IEpTVmFsdWVSZWdzKAorI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIHN0YXRp
Y19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVUYWdHUFIpLAorI2VuZGlmCisgICAg
ICAgIHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVHUFIpKTsKKworICAg
IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1YkluZm8ucGF0aGMudXNlZFJl
Z2lzdGVycyk7CisgICAgc3RhdGUuYWxsb2NhdG9yID0gJmFsbG9jYXRvcjsKKyAgICBhbGxvY2F0
b3IubG9jayhzdGF0ZS5iYXNlR1BSKTsKKyAgICBhbGxvY2F0b3IubG9jayhzdGF0ZS52YWx1ZVJl
Z3MpOworCisgICAgc3RhdGUuc2NyYXRjaEdQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hH
UFIoKTsKKyAgICAKKyAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSwgY29kZUJsb2NrKTsKKyAgICBz
dGF0ZS5qaXQgPSAmaml0OworCisgICAgc3RhdGUubnVtYmVyT2ZQYWRkaW5nQnl0ZXMgPSBhbGxv
Y2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0KTsKKworICAgIGJvb2wg
YWxsR3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2sgPSB0cnVlOworICAgIGZvciAoYXV0byYgZW50cnkg
OiBtX2xpc3QpCisgICAgICAgIGFsbEd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrICY9IGVudHJ5LT5n
dWFyZGVkQnlTdHJ1Y3R1cmVDaGVjaygpOworCisgICAgaWYgKCFzaXplKCkpIHsKKyAgICAgICAg
Ly8gVGhpcyBpcyBzdXBlciB1bmxpa2VseSwgYnV0IHdlIG1ha2UgaXQgbGVnYWwgYW55d2F5Lgor
ICAgICAgICBzdGF0ZS5mYWlsQW5kUmVwYXRjaC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgfSBl
bHNlIGlmICghYWxsR3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2sgfHwgc2l6ZSgpID09IDEpIHsKKyAg
ICAgICAgLy8gSWYgdGhlcmUgYXJlIGFueSBwcm94aWVzIGluIHRoZSBsaXN0LCB3ZSBjYW5ub3Qg
anVzdCB1c2UgYSBiaW5hcnkgc3dpdGNoIG92ZXIgdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgLy8g
V2UgbmVlZCB0byByZXNvcnQgdG8gYSBjYXNjYWRlLiBBIGNhc2NhZGUgYWxzbyBoYXBwZW5zIHRv
IGJlIG9wdGltYWwgaWYgd2Ugb25seSBoYXZlIGp1c3QKKyAgICAgICAgLy8gb25lIGNhc2UuCisg
ICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZmFsbFRocm91Z2g7CisKKyAgICAgICAgLy8g
Q2FzY2FkZSB0aHJvdWdoIHRoZSBsaXN0LCBwcmVmZXJyaW5nIG5ld2VyIGVudHJpZXMuCisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IG1fbGlzdC5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAg
IGZhbGxUaHJvdWdoLmxpbmsoJmppdCk7CisgICAgICAgICAgICBtX2xpc3RbaV0tPmdlbmVyYXRl
V2l0aEd1YXJkKHN0YXRlLCBmYWxsVGhyb3VnaCk7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGUu
ZmFpbEFuZFJlcGF0Y2guYXBwZW5kKGZhbGxUaHJvdWdoKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBqaXQubG9hZDMyKAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0YXRlLmJh
c2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCisgICAgICAgICAgICBzdGF0ZS5z
Y3JhdGNoR1BSKTsKKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxpbnQ2NF90PiBjYXNlVmFsdWVz
KG1fbGlzdC5zaXplKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9saXN0
LnNpemUoKTsgKytpKQorICAgICAgICAgICAgY2FzZVZhbHVlc1tpXSA9IGJpdHdpc2VfY2FzdDxp
bnQzMl90PihtX2xpc3RbaV0tPnN0cnVjdHVyZSgpKTsKKyAgICAgICAgCisgICAgICAgIEJpbmFy
eVN3aXRjaCBiaW5hcnlTd2l0Y2goc3RhdGUuc2NyYXRjaEdQUiwgY2FzZVZhbHVlcywgQmluYXJ5
U3dpdGNoOjpJbnQzMik7CisgICAgICAgIHdoaWxlIChiaW5hcnlTd2l0Y2guYWR2YW5jZShqaXQp
KSB7CisgICAgICAgICAgICBHZXRCeUlkQ2FzZSYgZ2V0Q2FzZSA9IGF0KGJpbmFyeVN3aXRjaC5j
YXNlSW5kZXgoKSk7CisgICAgICAgICAgICBnZXRDYXNlLmdlbmVyYXRlKHN0YXRlKTsKKyAgICAg
ICAgfQorICAgICAgICBzdGF0ZS5mYWlsQW5kUmVwYXRjaC5hcHBlbmQoYmluYXJ5U3dpdGNoLmZh
bGxUaHJvdWdoKCkpOworICAgIH0KKworICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUubGluaygmaml0
KTsKKworICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBpbmxpbmUgY2FjaGUgb3B0aW1pemF0aW9u
IGNvZGUga25vd3MgdGhhdCB3ZSBhcmUgdGFraW5nIHNsb3cgcGF0aCBiZWNhdXNlCisgICAgLy8g
b2Ygc29tZXRoaW5nIHRoYXQgaXNuJ3QgcGF0Y2hhYmxlLiAic2VlbiIgYmVpbmcgZmFsc2UgbWVh
bnMgdGhhdCB3ZSBieXBhc3MgcGF0Y2hpbmcuIFRoaXMgaXMKKyAgICAvLyBwcmV0dHkgZ3Jvc3Mg
YnV0IGl0IG1lYW5zIHRoYXQgd2UgZG9uJ3QgbmVlZCB0byBoYXZlIHR3byBzbG93IHBhdGggZW50
cnlwb2ludHMgLSBvbmUgZm9yCisgICAgLy8gcGF0Y2hpbmcgYW5kIG9uZSBmb3Igbm9ybWFsIHNs
b3cgc3R1ZmYuCisgICAgaml0LnN0b3JlOChUcnVzdGVkSW1tMzIoZmFsc2UpLCAmc3R1YkluZm8u
c2Vlbik7CisKKyAgICBzdGF0ZS5mYWlsQW5kUmVwYXRjaC5saW5rKCZqaXQpOworICAgIAorICAg
IHN0YXRlLnJlc3RvcmVTY3JhdGNoKCk7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBmYWls
dXJlID0gaml0Lmp1bXAoKTsKKworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcih2bSwgaml0LCBj
b2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgaWYgKGxpbmtCdWZmZXIuZGlk
RmFpbFRvQWxsb2NhdGUoKSkKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigp
OworCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHN1Y2Nlc3NMYWJlbCA9CisgICAgICAgIHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRl
bHRhQ2FsbFRvRG9uZSk7CisgICAgICAgIAorICAgIGxpbmtCdWZmZXIubGluayhzdGF0ZS5zdWNj
ZXNzLCBzdWNjZXNzTGFiZWwpOworCisgICAgbGlua0J1ZmZlci5saW5rKAorICAgICAgICBmYWls
dXJlLAorICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChz
dHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7CisgICAgCisgICAgZm9yIChhdXRv
IGNhbGxiYWNrIDogc3RhdGUuY2FsbGJhY2tzKQorICAgICAgICBjYWxsYmFjayhsaW5rQnVmZmVy
KTsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZSA9IEZJTkFMSVpFX0NPREVf
Rk9SKAorICAgICAgICBjb2RlQkxvY2ssIGxpbmtCdWZmZXIsCisgICAgICAgICgiJXMiLCB0b0NT
dHJpbmcoIkdldCBhY2Nlc3Mgc3R1YiBmb3IgIiwgKmNvZGVCbG9jaywgIiAiLCBzdHViSW5mby5j
b2RlT3JpZ2luLCAiIHdpdGggcmV0dXJuIHBvaW50ICIsIHN1Y2Nlc3NMYWJlbCwgIjogIiwgKnRo
aXMpKSk7CisKKyAgICBib29sIGRvZXNDYWxscyA9IGZhbHNlOworICAgIGZvciAoYXV0byBlbnRy
eSA6IG1fbGlzdCkKKyAgICAgICAgZG9lc0NhbGxzIHw9IGVudHJ5LT5kb2VzQ2FsbHMoKTsKKyAg
ICAKKyAgICBtX3N0dWJSb3V0aW5lID0gY3JlYXRlSklUU3R1YlJvdXRpbmUoY29kZSwgdm0sIGNv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGRvZXNDYWxscyk7CisgICAgbV93YXRjaHBvaW50
cyA9IHN0ZDo6bW92ZShzdGF0ZS53YXRjaHBvaW50cyk7CisgICAgcmV0dXJuIGNvZGUuY29kZSgp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAorbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5h
bWVzcGFjZSBKU0M7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBY2Nl
c3NDYXNlOjpBY2Nlc3NUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2Fz
ZSBBY2Nlc3NDYXNlOjpMb2FkOgorICAgICAgICBvdXQucHJpbnQoIkxvYWQiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6VHJhbnNpdGlvbjoKKyAgICAgICAgb3V0LnBy
aW50KCJUcmFuc2l0aW9uIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6
OlJlcGxhY2U6CisgICAgICAgIG91dC5wcmludCgiUmVwbGFjZSIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpNaXNzOgorICAgICAgICBvdXQucHJpbnQoIk1pc3MiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6R2V0dGVyOgorICAgICAgICBv
dXQucHJpbnQoIkdldHRlciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNl
OjpTZXR0ZXI6CisgICAgICAgIG91dC5wcmludCgiU2V0dGVyIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkN1c3RvbUdldHRlcjoKKyAgICAgICAgb3V0LnByaW50KCJD
dXN0b21HZXR0ZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6Q3Vz
dG9tU2V0dGVyOgorICAgICAgICBvdXQucHJpbnQoIkN1c3RvbVNldHRlciIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbkhpdDoKKyAgICAgICAgb3V0LnByaW50KCJJ
bkhpdCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbk1pc3M6Cisg
ICAgICAgIG91dC5wcmludCgiSW5NaXNzIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFj
Y2Vzc0Nhc2U6OkFycmF5TGVuZ3RoOgorICAgICAgICBvdXQucHJpbnQoIkFycmF5TGVuZ3RoIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OlN0cmluZ0xlbmd0aDoKKyAg
ICAgICAgb3V0LnByaW50KCJTdHJpbmdMZW5ndGgiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdURgorCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAkocmV2aXNpb24gMTg5
MzI0KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRC
eUlkTGlzdC5oOjE4OTMyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY0FjY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUG9s
eW1vcnBoaWNHZXRCeUlkTGlzdF9oCisjZGVmaW5lIFBvbHltb3JwaGljR2V0QnlJZExpc3RfaAor
CisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJN
YWNyb0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Lmgi
CisjaW5jbHVkZSAiT3Bjb2RlLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlLmgiCisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ29kZUJsb2NrOworc3Ry
dWN0IFN0cnVjdHVyZVN0dWJJbmZvOworCitjbGFzcyBHZXRCeUlkQWNjZXNzIHsKK3B1YmxpYzoK
KyAgICBlbnVtIEFjY2Vzc1R5cGUgeworICAgICAgICBJbnZhbGlkLAorICAgICAgICBTaW1wbGVJ
bmxpbmUsIC8vIFRoaXMgaXMgdGhlIHBhdGNoZWQgaW5saW5lIGFjY2Vzcy4KKyAgICAgICAgU2lt
cGxlU3R1YiwgLy8gVGhpcyBpcyBhIHN0dWIuCisgICAgICAgIFdhdGNoZWRTdHViLAorICAgICAg
ICBHZXR0ZXIsCisgICAgICAgIEN1c3RvbUdldHRlciwKKyAgICAgICAgU2ltcGxlTWlzcywKKyAg
ICB9OworICAgIAorICAgIEdldEJ5SWRBY2Nlc3MoKQorICAgICAgICA6IG1fdHlwZShJbnZhbGlk
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgR2V0QnlJZEFjY2VzcygKKyAgICAgICAgVk0mLCBK
U0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiwgU3Ry
dWN0dXJlKiwKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmID0gT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSk7CisgICAgCisgICAgfkdldEJ5SWRBY2Nlc3MoKTsK
KyAgICAKKyAgICBzdGF0aWMgR2V0QnlJZEFjY2VzcyBmcm9tU3RydWN0dXJlU3R1YkluZm8oU3Ry
dWN0dXJlU3R1YkluZm8mKTsKKyAgICAKKyAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4g
bV90eXBlICE9IEludmFsaWQ7IH0KKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJu
ICFpc1NldCgpOyB9CisgICAgCisgICAgQWNjZXNzVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4g
bV90eXBlOyB9CisgICAgCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVy
biBtX3N0cnVjdHVyZS5nZXQoKTsgfQorICAgIAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsg
fQorICAgIAorICAgIEpJVFN0dWJSb3V0aW5lKiBzdHViUm91dGluZSgpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoaXNTZXQoKSk7CisgICAgICAgIHJldHVybiBtX3N0dWJSb3V0aW5lLmdl
dCgpOworICAgIH0KKyAgICAKKyAgICBib29sIGRvZXNDYWxscygpIGNvbnN0IHsgcmV0dXJuIHR5
cGUoKSA9PSBHZXR0ZXIgfHwgdHlwZSgpID09IEN1c3RvbUdldHRlcjsgfQorICAgIAorICAgIGJv
b2wgdmlzaXRXZWFrKFZNJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENv
ZGVCbG9jazsKKyAgICAKKyAgICBBY2Nlc3NUeXBlIG1fdHlwZTsKKyAgICBXcml0ZUJhcnJpZXI8
U3RydWN0dXJlPiBtX3N0cnVjdHVyZTsKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBt
X2NvbmRpdGlvblNldDsKKyAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IG1fc3R1YlJvdXRpbmU7
Cit9OworCitjbGFzcyBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0IHsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICAvLyBFaXRoZXIgY3JlYXRlcyBhIG5ldyBwb2x5bW9y
cGhpYyBnZXQgbGlzdCwgb3IgcmV0dXJucyB0aGUgb25lIHRoYXQgaXMgYWxyZWFkeSBpbgorICAg
IC8vIHBsYWNlLgorICAgIHN0YXRpYyBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBmcm9tKFN0cnVj
dHVyZVN0dWJJbmZvJik7CisgICAgCisgICAgflBvbHltb3JwaGljR2V0QnlJZExpc3QoKTsKKyAg
ICAKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY3VycmVudFNsb3dQYXRoVGFyZ2V0KFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbykgY29uc3Q7CisgICAgCisgICAgdm9pZCBhZGRBY2Nlc3Mo
Y29uc3QgR2V0QnlJZEFjY2VzcyYpOworICAgIAorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsg
cmV0dXJuIG1fbGlzdC5pc0VtcHR5KCk7IH0KKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9saXN0LnNpemUoKTsgfQorICAgIGJvb2wgaXNGdWxsKCkgY29uc3Q7CisgICAgYm9v
bCBpc0FsbW9zdEZ1bGwoKSBjb25zdDsgLy8gVHJ1ZSBpZiBhZGRpbmcgYW4gZWxlbWVudCB3b3Vs
ZCBtYWtlIGlzRnVsbCgpIHRydWUuCisgICAgY29uc3QgR2V0QnlJZEFjY2VzcyYgYXQodW5zaWdu
ZWQgaSkgY29uc3QgeyByZXR1cm4gbV9saXN0W2ldOyB9CisgICAgY29uc3QgR2V0QnlJZEFjY2Vz
cyYgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2xpc3RbaV07IH0KKyAg
ICAKKyAgICBib29sIGRpZFNlbGZQYXRjaGluZygpIGNvbnN0OyAvLyBBcmUgYW55IG9mIHRoZSBh
Y2Nlc3NlcyBTaW1wbGVJbmxpbmU/CisgICAgCisgICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25z
dDsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOworICAgIAorICAgIFBv
bHltb3JwaGljR2V0QnlJZExpc3QoU3RydWN0dXJlU3R1YkluZm8mKTsKKyAgICAKKyAgICBWZWN0
b3I8R2V0QnlJZEFjY2VzcywgMj4gbV9saXN0OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
KyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCisjZW5kaWYgLy8gUG9seW1vcnBoaWNHZXRCeUlkTGlz
dF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY0FjY2Vzcy5oCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsOCArMjMs
OCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBQb2x5bW9ycGhpY0dldEJ5SWRM
aXN0X2gKLSNkZWZpbmUgUG9seW1vcnBoaWNHZXRCeUlkTGlzdF9oCisjaWZuZGVmIFBvbHltb3Jw
aGljQWNjZXNzX2gKKyNkZWZpbmUgUG9seW1vcnBoaWNBY2Nlc3NfaAogCiAjaWYgRU5BQkxFKEpJ
VCkKIApAQCAtMzgsOTYgKzM4LDI0NyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENvZGVC
bG9jazsKK2NsYXNzIFBvbHltb3JwaGljQWNjZXNzOwogc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZv
OwogCi1jbGFzcyBHZXRCeUlkQWNjZXNzIHsKK3N0cnVjdCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU7
CisKK2NsYXNzIEFjY2Vzc0Nhc2UgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEFjY2Vzc0Nh
c2UpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIGVudW0gQWNj
ZXNzVHlwZSB7Ci0gICAgICAgIEludmFsaWQsCi0gICAgICAgIFNpbXBsZUlubGluZSwgLy8gVGhp
cyBpcyB0aGUgcGF0Y2hlZCBpbmxpbmUgYWNjZXNzLgotICAgICAgICBTaW1wbGVTdHViLCAvLyBU
aGlzIGlzIGEgc3R1Yi4KLSAgICAgICAgV2F0Y2hlZFN0dWIsCisgICAgICAgIExvYWQsCisgICAg
ICAgIFRyYW5zaXRpb24sCisgICAgICAgIFJlcGxhY2UsCisgICAgICAgIE1pc3MsCiAgICAgICAg
IEdldHRlciwKKyAgICAgICAgU2V0dGVyLAogICAgICAgICBDdXN0b21HZXR0ZXIsCi0gICAgICAg
IFNpbXBsZU1pc3MsCisgICAgICAgIEN1c3RvbVNldHRlciwKKyAgICAgICAgSW5IaXQsCisgICAg
ICAgIEluTWlzcywKKyAgICAgICAgQXJyYXlMZW5ndGgsCisgICAgICAgIFN0cmluZ0xlbmd0aAog
ICAgIH07Ci0gICAgCi0gICAgR2V0QnlJZEFjY2VzcygpCi0gICAgICAgIDogbV90eXBlKEludmFs
aWQpCisKKyAgICBzdGF0aWMgYm9vbCBpc0dldChBY2Nlc3NUeXBlIHR5cGUpCiAgICAgeworICAg
ICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBJbnZhbGlkOgorICAgICAgICBjYXNl
IFRyYW5zaXRpb246CisgICAgICAgIGNhc2UgUmVwbGFjZToKKyAgICAgICAgY2FzZSBTZXR0ZXI6
CisgICAgICAgIGNhc2UgQ3VzdG9tU2V0dGVyOgorICAgICAgICBjYXNlIEluSGl0OgorICAgICAg
ICBjYXNlIEluTWlzczoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBM
b2FkOgorICAgICAgICBjYXNlIE1pc3M6CisgICAgICAgIGNhc2UgR2V0dGVyOgorICAgICAgICBj
YXNlIEN1c3RvbUdldHRlcjoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CiAg
ICAgfQotICAgIAotICAgIEdldEJ5SWRBY2Nlc3MoCi0gICAgICAgIFZNJiwgSlNDZWxsKiBvd25l
ciwgQWNjZXNzVHlwZSwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4sIFN0cnVjdHVyZSosCisK
KyAgICBzdGF0aWMgYm9vbCBpc1B1dChBY2Nlc3NUeXBlIHR5cGUpCisgICAgeworICAgICAgICBz
d2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBJbnZhbGlkOgorICAgICAgICBjYXNlIExvYWQ6
CisgICAgICAgIGNhc2UgTWlzczoKKyAgICAgICAgY2FzZSBHZXR0ZXI6CisgICAgICAgIGNhc2Ug
Q3VzdG9tR2V0dGVyOgorICAgICAgICBjYXNlIEluSGl0OgorICAgICAgICBjYXNlIEluTWlzczoK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBUcmFuc2l0aW9uOgorICAg
ICAgICBjYXNlIFJlcGxhY2U6CisgICAgICAgIGNhc2UgU2V0dGVyOgorICAgICAgICBjYXNlIEN1
c3RvbVNldHRlcjoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQor
CisgICAgc3RhdGljIGJvb2wgaXNJbihBY2Nlc3NUeXBlIHR5cGUpCisgICAgeworICAgICAgICBz
d2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBJbnZhbGlkOgorICAgICAgICBjYXNlIExvYWQ6
CisgICAgICAgIGNhc2UgTWlzczoKKyAgICAgICAgY2FzZSBHZXR0ZXI6CisgICAgICAgIGNhc2Ug
Q3VzdG9tR2V0dGVyOgorICAgICAgICBjYXNlIFRyYW5zaXRpb246CisgICAgICAgIGNhc2UgUmVw
bGFjZToKKyAgICAgICAgY2FzZSBTZXR0ZXI6CisgICAgICAgIGNhc2UgQ3VzdG9tU2V0dGVyOgor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIEluSGl0OgorICAgICAgICBj
YXNlIEluTWlzczoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQor
CisgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGdldCgKKyAgICAgICAgVk0mLCBKU0Nl
bGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJlKiwKKyAgICAg
ICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQoKSwKKyAgICAgICAgYm9vbCB2aWFQcm94eSA9IGZhbHNlLAorICAgICAgICBXYXRj
aHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0ID0gbnVsbHB0ciwKKyAgICAgICAgUHJvcGVydHlTbG90
OjpHZXRWYWx1ZUZ1bmMgPSBudWxscHRyKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3ND
YXNlPiByZXBsYWNlKAorICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPEFj
Y2Vzc0Nhc2U+IHRyYW5zaXRpb24oCisgICAgICAgIFZNJiwgSlNDZWxsKiBvd25lciwgU3RydWN0
dXJlKiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQsCiAgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiA9IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCkpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vz
c0Nhc2U+IHNldHRlcigKKyAgICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBT
dHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCwKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQmLCBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyk7CisKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gaW4oCisgICAgICAgIFZNJiwgSlNDZWxsKiBvd25lciwg
QWNjZXNzVHlwZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCisgICAgICAgIGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCkpOworCisg
ICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0NBc2U+IGdldExlbmd0aChWTSYsIEpTQ2VsbCogb3du
ZXIsIEFjY2Vzc1R5cGUpOwogICAgIAotICAgIH5HZXRCeUlkQWNjZXNzKCk7CisgICAgfkFjY2Vz
c0Nhc2UoKTsKICAgICAKLSAgICBzdGF0aWMgR2V0QnlJZEFjY2VzcyBmcm9tU3RydWN0dXJlU3R1
YkluZm8oU3RydWN0dXJlU3R1YkluZm8mKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFj
Y2Vzc0Nhc2U+IGZyb21TdHJ1Y3R1cmVTdHViSW5mbyhWTSYsIEpTQ2VsbCogb3duZXIsIFN0cnVj
dHVyZVN0dWJJbmZvJik7CiAgICAgCiAgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1f
dHlwZSAhPSBJbnZhbGlkOyB9CiAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAh
aXNTZXQoKTsgfQogICAgIAogICAgIEFjY2Vzc1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dHlwZTsgfQorICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zm
c2V0OyB9CisgICAgYm9vbCB2aWFQcm94eSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBt
X3JhcmVEYXRhLT52aWFQcm94eSA6IGZhbHNlOyB9CiAgICAgCi0gICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZS5nZXQoKTsgfQotICAgIAotICAgIGNv
bnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJl
dHVybiBtX2NvbmRpdGlvblNldDsgfQotICAgIAotICAgIEpJVFN0dWJSb3V0aW5lKiBzdHViUm91
dGluZSgpIGNvbnN0CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdAogICAgIHsKLSAg
ICAgICAgQVNTRVJUKGlzU2V0KCkpOwotICAgICAgICByZXR1cm4gbV9zdHViUm91dGluZS5nZXQo
KTsKKyAgICAgICAgaWYgKG1fa2luZCA9PSBUcmFuc2l0aW9uKQorICAgICAgICAgICAgcmV0dXJu
IG1fc3RydWN0dXJlLT5wcmV2aW91c0lEKCk7CisgICAgICAgIHJldHVybiBtX3N0cnVjdHVyZS5n
ZXQoKTsKKyAgICB9CisgICAgYm9vbCBndWFyZGVkQnlTdHJ1Y3R1cmVDaGVjaygpIGNvbnN0IHsg
cmV0dXJuICF2aWFQcm94eSgpOyB9CisKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSgpIGNv
bnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9raW5kID09IFRyYW5zaXRpb24pOworICAgICAg
ICByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7CiAgICAgfQogICAgIAotICAgIGJvb2wgZG9lc0Nh
bGxzKCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09IEdldHRlciB8fCB0eXBlKCkgPT0gQ3VzdG9t
R2V0dGVyOyB9CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0KCkg
Y29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0KKworICAgIFdhdGNocG9pbnRTZXQqIGFk
ZGl0aW9uYWxTZXQoKSBjb25zdCB7IG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5hZGRpdGlvbmFs
U2V0LmdldCgpIDogbnVsbHB0cjsgfQogICAgIAotICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgY29u
c3Q7CisgICAgYm9vbCBkb2VzQ2FsbHMoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gR2V0dGVy
IHx8IHR5cGUoKSA9PSBDdXN0b21HZXR0ZXI7IH0KIAorICAgIC8vIElmIHRoaXMgbWV0aG9kIHJl
dHVybnMgdHJ1ZSwgdGhlbiBpdCdzIGEgZ29vZCBpZGVhIHRvIHJlbW92ZSAnb3RoZXInIGZyb20g
dGhlIGFjY2VzcyBvbmNlICd0aGlzJworICAgIC8vIGlzIGFkZGVkLiBUaGlzIG1ldGhvZCBhc3N1
bWVzIHRoYXQgaW4gY2FzZSBvZiBjb250cmFkaWN0aW9ucywgJ3RoaXMnIHJlcHJlc2VudHMgYSBu
ZXdlciwgYW5kIHNvCisgICAgLy8gbW9yZSB1c2VmdWwsIHRydXRoLiBUaGlzIG1ldGhvZCBjYW4g
YmUgY29uc2VydmF0aXZlOyBpdCB3aWxsIHJldHVybiBmYWxzZSB3aGVuIGl0IGRvdWJ0LgorICAg
IGJvb2wgY2FuUmVwbGFjZShjb25zdCBBY2Nlc3NDYXNlJiBvdGhlcik7CisKKyAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBj
bGFzcyBDb2RlQmxvY2s7CisgICAgZnJpZW5kIGNsYXNzIFBvbHltb3JwaGljQWNjZXNzOworCisg
ICAgQWNjZXNzQ2FzZSgpOworCisgICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25zdDsKKworICAg
IC8vIEZhbGwgdGhyb3VnaCBvbiBzdWNjZXNzLiBUd28ga2luZHMgb2YgZmFpbHVyZXMgYXJlIHN1
cHBvcnRlZDogZmFsbC10aHJvdWdoLCB3aGljaCBtZWFucyB0aGF0IHdlCisgICAgLy8gc2hvdWxk
IHRyeSBhIGRpZmZlcmVudCBjYXNlOyBhbmQgZmFpbHVyZSwgd2hpY2ggbWVhbnMgdGhhdCB0aGlz
IHdhcyB0aGUgcmlnaHQgY2FzZSBidXQgaXQgbmVlZHMKKyAgICAvLyBoZWxwIGZyb20gdGhlIHNs
b3cgcGF0aC4KKyAgICB2b2lkIGdlbmVyYXRlV2l0aEd1YXJkKEFjY2Vzc0dlbmVyYXRpb25TdGF0
ZSYsIENDYWxsSGVscGVyczo6SnVtcExpc3QmIGZhbGxUaHJvdWdoKTsKKworICAgIC8vIEZhbGwg
dGhyb3VnaCBvbiBzdWNjZXNzLCBhZGQgYSBqdW1wIHRvIHRoZSBmYWlsdXJlIGxpc3Qgb24gZmFp
bHVyZS4KKyAgICB2b2lkIGdlbmVyYXRlKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYpOwogICAgIAog
ICAgIEFjY2Vzc1R5cGUgbV90eXBlOworICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0OworCisg
ICAgLy8gVXN1YWxseSB0aGlzIGlzIHRoZSBzdHJ1Y3R1cmUgdGhhdCB3ZSBleHBlY3QgdGhlIGJh
c2Ugb2JqZWN0IHRvIGhhdmUuIEJ1dCwgdGhpcyBpcyB0aGUgKm5ldyoKKyAgICAvLyBzdHJ1Y3R1
cmUgZm9yIGEgdHJhbnNpdGlvbiBhbmQgd2UgcmVseSBvbiB0aGUgZmFjdCB0aGF0IGl0IGhhcyBh
IHN0cm9uZyByZWZlcmVuY2UgdG8gdGhlIG9sZAorICAgIC8vIHN0cnVjdHVyZS4gRm9yIHByb3hp
ZXMsIHRoaXMgaXMgdGhlIHN0cnVjdHVyZSBvZiB0aGUgb2JqZWN0IGJlaGluZCB0aGUgcHJveHku
CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7CisKICAgICBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKLSAgICBSZWZQdHI8SklUU3R1YlJv
dXRpbmU+IG1fc3R1YlJvdXRpbmU7CisKKyAgICBjbGFzcyBSYXJlRGF0YSB7CisgICAgICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIHB1YmxpYzoKKyAgICAgICAgYm9vbCB2aWFQcm94
eTsKKyAgICAgICAgUmVmUHRyPFdhdGNocG9pbnRTZXQ+IGFkZGl0aW9uYWxTZXQ7CisgICAgICAg
IHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua0luZm8+IGNhbGxMaW5rSW5mbzsKKyAgICAgICAgdW5p
b24geworICAgICAgICAgICAgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgZ2V0dGVyOworICAg
ICAgICAgICAgUHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmMgc2V0dGVyOworICAgICAgICAg
ICAgdm9pZCogb3BhcXVlOworICAgICAgICB9IGN1c3RvbUFjY2Vzc29yOworICAgIH07CisKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UmFyZURhdGE+IG1fcmFyZURhdGE7CiB9OwogCi1jbGFzcyBQb2x5
bW9ycGhpY0dldEJ5SWRMaXN0IHsKK2NsYXNzIFBvbHltb3JwaGljQWNjZXNzIHsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShQb2x5bW9ycGhpY0FjY2Vzcyk7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgLy8gRWl0aGVyIGNyZWF0ZXMgYSBuZXcgcG9seW1vcnBo
aWMgZ2V0IGxpc3QsIG9yIHJldHVybnMgdGhlIG9uZSB0aGF0IGlzIGFscmVhZHkgaW4KLSAgICAv
LyBwbGFjZS4KLSAgICBzdGF0aWMgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogZnJvbShTdHJ1Y3R1
cmVTdHViSW5mbyYpOwotICAgIAotICAgIH5Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0KCk7Ci0gICAg
Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN1cnJlbnRTbG93UGF0aFRhcmdldChTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8pIGNvbnN0OwotICAgIAotICAgIHZvaWQgYWRkQWNjZXNzKGNv
bnN0IEdldEJ5SWRBY2Nlc3MmKTsKKyAgICBQb2x5bW9ycGhpY0FjY2VzcygpOworICAgIH5Qb2x5
bW9ycGhpY0FjY2VzcygpOworCisgICAgLy8gVGhpcyBtYXkgcmV0dXJuIG51bGwsIGluIHdoaWNo
IGNhc2UgdGhlIG9sZCBzdHViIHJvdXRpbmUgaXMgbGVmdCBpbnRhY3QuIFRoaXMgbWV0aG9kIHdp
bGwgZG8geW91CisgICAgLy8gYSBzb2xpZCBhbmQgbnVsbC1jaGVjayB0aGUgQWNjZXNzQ2FzZSwg
c28gdGhhdCB5b3UgY2FuIGRvIHRoaW5ncyBsaWtlOgorICAgIC8vCisgICAgLy8gY29kZVB0ciA9
IGFjY2Vzcy0+cmVnZW5lcmF0ZVdpdGhDYXNlKC4uLiwgQWNjZXNzQ2FzZTo6Z2V0KC4uLikpCisg
ICAgLy8KKyAgICAvLyBJZiBBY2Nlc3NDYXNlOjpnZXQoKSByZXR1cm5zIG51bGxwdHIsIHRoZSBh
Ym92ZSBjYWxsIHdpbGwgc2ltcGx5IHJldHVybiBudWxsLgorICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciByZWdlbmVyYXRlV2l0aENhc2VzKAorICAgICAgICBWTSYsIENvZGVCbG9jayosIFN0cnVj
dHVyZVN0dWJJbmZvJiwgY29uc3QgSWRlbnRpZmllciYsIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8
QWNjZXNzQ2FzZT4+KTsKKworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByZWdlbmVyYXRlV2l0
aENhc2UoCisgICAgICAgIFZNJiwgQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBjb25z
dCBJZGVudGlmaWVyJiwgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+KTsKICAgICAKICAgICBi
b29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2xpc3QuaXNFbXB0eSgpOyB9CiAgICAgdW5z
aWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5zaXplKCk7IH0KICAgICBib29sIGlz
RnVsbCgpIGNvbnN0OwogICAgIGJvb2wgaXNBbG1vc3RGdWxsKCkgY29uc3Q7IC8vIFRydWUgaWYg
YWRkaW5nIGFuIGVsZW1lbnQgd291bGQgbWFrZSBpc0Z1bGwoKSB0cnVlLgotICAgIGNvbnN0IEdl
dEJ5SWRBY2Nlc3MmIGF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdFtpXTsgfQot
ICAgIGNvbnN0IEdldEJ5SWRBY2Nlc3MmIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QgeyBy
ZXR1cm4gbV9saXN0W2ldOyB9Ci0gICAgCi0gICAgYm9vbCBkaWRTZWxmUGF0Y2hpbmcoKSBjb25z
dDsgLy8gQXJlIGFueSBvZiB0aGUgYWNjZXNzZXMgU2ltcGxlSW5saW5lPwotICAgIAorICAgIGNv
bnN0IEFjY2Vzc0Nhc2UmIGF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuICptX2xpc3RbaV07
IH0KKyAgICBjb25zdCBBY2Nlc3NDYXNlJiBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0IHsg
cmV0dXJuICptX2xpc3RbaV07IH0KKworICAgIC8vIElmIHRoaXMgcmV0dXJucyBmYWxzZSB0aGVu
IHdlIGFyZSByZXF1ZXN0aW5nIGEgcmVzZXQgb2YgdGhlIG93bmluZyBTdHJ1Y3R1cmVTdHViSW5m
by4KICAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OwogCisgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0OworCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBBY2Nlc3ND
YXNlOworICAgIGZyaWVuZCBjbGFzcyBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU7CiAgICAgZnJpZW5k
IGNsYXNzIENvZGVCbG9jazsKICAgICAKLSAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KFN0cnVj
dHVyZVN0dWJJbmZvJik7CisgICAgdm9pZCBhZGRBY2Nlc3NDYXNlKAorICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8QWNjZXNzQ2FzZT4gdG9BZGQsIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNz
Q2FzZT4+JiByZXBsYWNlZCk7CisgICAgdm9pZCB1bmRvQWRkQWNjZXNzQ2FzZSgKKyAgICAgICAg
Y29uc3QgVmVjdG9yPEFjY2Vzc0Nhc2UqPiYgdG9SZW1vdmUsIFZlY3RvcjxzdGQ6OnVuaXF1ZV9w
dHI8QWNjZXNzQ2FzZT4+IHRvQWRkKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVnZW5l
cmF0ZShWTSYsIENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgY29uc3QgSWRlbnRpZmll
ciYpOwogICAgIAotICAgIFZlY3RvcjxHZXRCeUlkQWNjZXNzLCAyPiBtX2xpc3Q7CisgICAgVmVj
dG9yPHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiwgMj4gbV9saXN0OworICAgIFJlZlB0cjxK
SVRTdHViUm91dGluZT4gbV9zdHViUm91dGluZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2F0Y2hw
b2ludHNPblN0cnVjdHVyZVN0dWJJbmZvPiBtX3dhdGNocG9pbnRzOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRT
dHJlYW0mLCBKU0M6OkFjY2Vzc0Nhc2U6OkFjY2Vzc1R5cGUpOworCit9IC8vIG5hbWVzcGFjZSBX
VEYKKwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKLSNlbmRpZiAvLyBQb2x5bW9ycGhpY0dldEJ5
SWRMaXN0X2gKKyNlbmRpZiAvLyBQb2x5bW9ycGhpY0FjY2Vzc19oCiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlk
TGlzdC5jcHAJKHJldmlzaW9uIDE4OTMyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNTUg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUG9seW1vcnBoaWNHZXRCeUlkTGlz
dC5oIgotCi0jaWYgRU5BQkxFKEpJVCkKLQotI2luY2x1ZGUgIkNvZGVCbG9jay5oIgotI2luY2x1
ZGUgIkhlYXAuaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJl
U3R1YkluZm8uaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLUdldEJ5SWRBY2Nlc3M6OkdldEJ5SWRB
Y2Nlc3MoCi0gICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5cGUsIFBhc3NS
ZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lLAotICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KQotICAg
IDogbV90eXBlKHR5cGUpCi0gICAgLCBtX3N0cnVjdHVyZSh2bSwgb3duZXIsIHN0cnVjdHVyZSkK
LSAgICAsIG1fY29uZGl0aW9uU2V0KGNvbmRpdGlvblNldCkKLSAgICAsIG1fc3R1YlJvdXRpbmUo
c3R1YlJvdXRpbmUpCi17Ci19Ci0KLUdldEJ5SWRBY2Nlc3M6On5HZXRCeUlkQWNjZXNzKCkKLXsK
LX0KLQotR2V0QnlJZEFjY2VzcyBHZXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0dXJlU3R1YkluZm8o
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciBpbml0aWFsU2xvd1BhdGggPQotICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
bGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKLSAgICAK
LSAgICBHZXRCeUlkQWNjZXNzIHJlc3VsdDsKLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVChzdHVi
SW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZik7Ci0gICAgCi0gICAgcmVz
dWx0Lm1fdHlwZSA9IFNpbXBsZUlubGluZTsKLSAgICByZXN1bHQubV9zdHJ1Y3R1cmUuY29weUZy
b20oc3R1YkluZm8udS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlKTsKLSAgICByZXN1
bHQubV9zdHViUm91dGluZSA9IEpJVFN0dWJSb3V0aW5lOjpjcmVhdGVTZWxmTWFuYWdlZFJvdXRp
bmUoaW5pdGlhbFNsb3dQYXRoKTsKLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1ib29s
IEdldEJ5SWRBY2Nlc3M6OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0Ci17Ci0gICAgaWYgKG1fc3Ry
dWN0dXJlICYmICFIZWFwOjppc01hcmtlZChtX3N0cnVjdHVyZS5nZXQoKSkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBpZiAoIW1fY29uZGl0aW9uU2V0LmFyZVN0aWxsTGl2ZSgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFtX3N0dWJSb3V0aW5lLT52aXNpdFdlYWsodm0p
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVBvbHltb3Jw
aGljR2V0QnlJZExpc3Q6OlBvbHltb3JwaGljR2V0QnlJZExpc3QoU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvKQotewotICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc191bnNl
dCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIG1fbGlzdC5hcHBlbmQoR2V0QnlJZEFjY2Vz
czo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKHN0dWJJbmZvKSk7Ci19Ci0KLVBvbHltb3JwaGljR2V0
QnlJZExpc3QqIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmZyb20oU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvKQotewotICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRf
YnlfaWRfbGlzdCkKLSAgICAgICAgcmV0dXJuIHN0dWJJbmZvLnUuZ2V0QnlJZExpc3QubGlzdDsK
LSAgICAKLSAgICBBU1NFUlQoCi0gICAgICAgIHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNz
X2dldF9ieV9pZF9zZWxmCi0gICAgICAgIHx8IHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNz
X3Vuc2V0KTsKLSAgICAKLSAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiByZXN1bHQgPSBuZXcg
UG9seW1vcnBoaWNHZXRCeUlkTGlzdChzdHViSW5mbyk7Ci0gICAgCi0gICAgc3R1YkluZm8uaW5p
dEdldEJ5SWRMaXN0KHJlc3VsdCk7Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotUG9s
eW1vcnBoaWNHZXRCeUlkTGlzdDo6flBvbHltb3JwaGljR2V0QnlJZExpc3QoKSB7IH0KLQotTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmN1cnJlbnRTbG93UGF0
aFRhcmdldCgKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pIGNvbnN0Ci17Ci0gICAg
aWYgKGlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpOwotICAg
IHJldHVybiBtX2xpc3QubGFzdCgpLnN0dWJSb3V0aW5lKCktPmNvZGUoKS5jb2RlKCk7Ci19Ci0K
LXZvaWQgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6YWRkQWNjZXNzKGNvbnN0IEdldEJ5SWRBY2Nl
c3MmIGFjY2VzcykKLXsKLSAgICBBU1NFUlQoIWlzRnVsbCgpKTsKLSAgICAvLyBNYWtlIHN1cmUg
dGhhdCB0aGUgcmVzaXppbmcgb3B0aW1pemVzIGZvciBzcGFjZSwgbm90IHRpbWUuCi0gICAgbV9s
aXN0LnJlc2l6ZVRvRml0KG1fbGlzdC5zaXplKCkgKyAxKTsKLSAgICBtX2xpc3QubGFzdCgpID0g
YWNjZXNzOwotfQotCi1ib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmlzRnVsbCgpIGNvbnN0
Ci17Ci0gICAgQVNTRVJUKHNpemUoKSA8PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpOwot
ICAgIHJldHVybiBzaXplKCkgPT0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFOwotfQotCi1i
b29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmlzQWxtb3N0RnVsbCgpIGNvbnN0Ci17Ci0gICAg
QVNTRVJUKHNpemUoKSA8PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpOwotICAgIHJldHVy
biBzaXplKCkgPj0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIC0gMTsKLX0KLQotYm9vbCBQ
b2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpkaWRTZWxmUGF0Y2hpbmcoKSBjb25zdAotewotICAgIGZv
ciAodW5zaWduZWQgaSA9IHNpemUoKTsgaS0tOykgewotICAgICAgICBpZiAoYXQoaSkudHlwZSgp
ID09IEdldEJ5SWRBY2Nlc3M6OlNpbXBsZUlubGluZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUG9seW1vcnBoaWNHZXRCeUlk
TGlzdDo6dmlzaXRXZWFrKFZNJiB2bSkgY29uc3QKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBz
aXplKCk7IGktLTspIHsKLSAgICAgICAgaWYgKCFhdChpKS52aXNpdFdlYWsodm0pKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotCi0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExp
c3QuaAkocmV2aXNpb24gMTg5MzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1BvbHltb3JwaGljR2V0QnlJZExpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMzMgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
aWZuZGVmIFBvbHltb3JwaGljR2V0QnlJZExpc3RfaAotI2RlZmluZSBQb2x5bW9ycGhpY0dldEJ5
SWRMaXN0X2gKLQotI2lmIEVOQUJMRShKSVQpCi0KLSNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCi0j
aW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKLSNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldC5oIgotI2luY2x1ZGUgIk9wY29kZS5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgot
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENvZGVC
bG9jazsKLXN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbzsKLQotY2xhc3MgR2V0QnlJZEFjY2VzcyB7
Ci1wdWJsaWM6Ci0gICAgZW51bSBBY2Nlc3NUeXBlIHsKLSAgICAgICAgSW52YWxpZCwKLSAgICAg
ICAgU2ltcGxlSW5saW5lLCAvLyBUaGlzIGlzIHRoZSBwYXRjaGVkIGlubGluZSBhY2Nlc3MuCi0g
ICAgICAgIFNpbXBsZVN0dWIsIC8vIFRoaXMgaXMgYSBzdHViLgotICAgICAgICBXYXRjaGVkU3R1
YiwKLSAgICAgICAgR2V0dGVyLAotICAgICAgICBDdXN0b21HZXR0ZXIsCi0gICAgICAgIFNpbXBs
ZU1pc3MsCi0gICAgfTsKLSAgICAKLSAgICBHZXRCeUlkQWNjZXNzKCkKLSAgICAgICAgOiBtX3R5
cGUoSW52YWxpZCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIEdldEJ5SWRBY2Nlc3MoCi0gICAg
ICAgIFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgUGFzc1JlZlB0cjxKSVRTdHViUm91
dGluZT4sIFN0cnVjdHVyZSosCi0gICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCkpOwotICAgIAotICAgIH5HZXRCeUlk
QWNjZXNzKCk7Ci0gICAgCi0gICAgc3RhdGljIEdldEJ5SWRBY2Nlc3MgZnJvbVN0cnVjdHVyZVN0
dWJJbmZvKFN0cnVjdHVyZVN0dWJJbmZvJik7Ci0gICAgCi0gICAgYm9vbCBpc1NldCgpIGNvbnN0
IHsgcmV0dXJuIG1fdHlwZSAhPSBJbnZhbGlkOyB9Ci0gICAgYm9vbCBvcGVyYXRvciEoKSBjb25z
dCB7IHJldHVybiAhaXNTZXQoKTsgfQotICAgIAotICAgIEFjY2Vzc1R5cGUgdHlwZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdHlwZTsgfQotICAgIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29u
c3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7IH0KLSAgICAKLSAgICBjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25k
aXRpb25TZXQ7IH0KLSAgICAKLSAgICBKSVRTdHViUm91dGluZSogc3R1YlJvdXRpbmUoKSBjb25z
dAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzU2V0KCkpOwotICAgICAgICByZXR1cm4gbV9zdHVi
Um91dGluZS5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBkb2VzQ2FsbHMoKSBjb25zdCB7
IHJldHVybiB0eXBlKCkgPT0gR2V0dGVyIHx8IHR5cGUoKSA9PSBDdXN0b21HZXR0ZXI7IH0KLSAg
ICAKLSAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIGZyaWVu
ZCBjbGFzcyBDb2RlQmxvY2s7Ci0gICAgCi0gICAgQWNjZXNzVHlwZSBtX3R5cGU7Ci0gICAgV3Jp
dGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7Ci0gICAgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQgbV9jb25kaXRpb25TZXQ7Ci0gICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBtX3N0
dWJSb3V0aW5lOwotfTsKLQotY2xhc3MgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCB7Ci0gICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgLy8gRWl0aGVyIGNyZWF0ZXMgYSBu
ZXcgcG9seW1vcnBoaWMgZ2V0IGxpc3QsIG9yIHJldHVybnMgdGhlIG9uZSB0aGF0IGlzIGFscmVh
ZHkgaW4KLSAgICAvLyBwbGFjZS4KLSAgICBzdGF0aWMgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCog
ZnJvbShTdHJ1Y3R1cmVTdHViSW5mbyYpOwotICAgIAotICAgIH5Qb2x5bW9ycGhpY0dldEJ5SWRM
aXN0KCk7Ci0gICAgCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN1cnJlbnRTbG93UGF0aFRh
cmdldChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pIGNvbnN0OwotICAgIAotICAgIHZvaWQg
YWRkQWNjZXNzKGNvbnN0IEdldEJ5SWRBY2Nlc3MmKTsKLSAgICAKLSAgICBib29sIGlzRW1wdHko
KSBjb25zdCB7IHJldHVybiBtX2xpc3QuaXNFbXB0eSgpOyB9Ci0gICAgdW5zaWduZWQgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5zaXplKCk7IH0KLSAgICBib29sIGlzRnVsbCgpIGNvbnN0
OwotICAgIGJvb2wgaXNBbG1vc3RGdWxsKCkgY29uc3Q7IC8vIFRydWUgaWYgYWRkaW5nIGFuIGVs
ZW1lbnQgd291bGQgbWFrZSBpc0Z1bGwoKSB0cnVlLgotICAgIGNvbnN0IEdldEJ5SWRBY2Nlc3Mm
IGF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdFtpXTsgfQotICAgIGNvbnN0IEdl
dEJ5SWRBY2Nlc3MmIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9saXN0
W2ldOyB9Ci0gICAgCi0gICAgYm9vbCBkaWRTZWxmUGF0Y2hpbmcoKSBjb25zdDsgLy8gQXJlIGFu
eSBvZiB0aGUgYWNjZXNzZXMgU2ltcGxlSW5saW5lPwotICAgIAotICAgIGJvb2wgdmlzaXRXZWFr
KFZNJikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKLSAg
ICAKLSAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KFN0cnVjdHVyZVN0dWJJbmZvJik7Ci0gICAg
Ci0gICAgVmVjdG9yPEdldEJ5SWRBY2Nlc3MsIDI+IG1fbGlzdDsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIEpTQwotCi0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQotI2VuZGlmIC8vIFBvbHltb3JwaGlj
R2V0QnlJZExpc3RfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9s
eW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwCShyZXZpc2lvbiAxODkzMjQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlz
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTU2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIlBvbHltb3JwaGljUHV0QnlJZExpc3QuaCIKLQotI2lmIEVOQUJMRShK
SVQpCi0KLSNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgotCi1uYW1lc3BhY2UgSlNDIHsK
LQotUHV0QnlJZEFjY2VzcyBQdXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0dXJlU3R1YkluZm8oU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBp
bml0aWFsU2xvd1BhdGggPQotICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFi
ZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKLSAgICAKLSAg
ICBQdXRCeUlkQWNjZXNzIHJlc3VsdDsKLSAgICAKLSAgICBzd2l0Y2ggKHN0dWJJbmZvLmFjY2Vz
c1R5cGUpIHsKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFjZToKLSAgICAgICAgcmVz
dWx0Lm1fdHlwZSA9IFJlcGxhY2U7Ci0gICAgICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZS5jb3B5
RnJvbShzdHViSW5mby51LnB1dEJ5SWRSZXBsYWNlLmJhc2VPYmplY3RTdHJ1Y3R1cmUpOwotICAg
ICAgICByZXN1bHQubV9zdHViUm91dGluZSA9IEpJVFN0dWJSb3V0aW5lOjpjcmVhdGVTZWxmTWFu
YWdlZFJvdXRpbmUoaW5pdGlhbFNsb3dQYXRoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIAot
ICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdDoKLSAgICBjYXNlIGFj
Y2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWw6Ci0gICAgICAgIHJlc3VsdC5tX3R5cGUg
PSBUcmFuc2l0aW9uOwotICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuY29weUZyb20oc3R1
YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZSk7Ci0gICAgICAgIHJl
c3VsdC5tX25ld1N0cnVjdHVyZS5jb3B5RnJvbShzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9u
LnN0cnVjdHVyZSk7Ci0gICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0OjphZG9wdFJhd1BvaW50ZXIoCi0gICAgICAgICAgICBzdHViSW5mby51
LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0NvbmRpdGlvblNldCk7Ci0gICAgICAgIHJlc3VsdC5tX3N0
dWJSb3V0aW5lID0gc3R1YkluZm8uc3R1YlJvdXRpbmU7Ci0gICAgICAgIGJyZWFrOwotICAgICAg
ICAKLSAgICBkZWZhdWx0OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1ib29sIFB1dEJ5SWRBY2Nlc3M6
OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2NvbmRpdGlvblNldC5hcmVT
dGlsbExpdmUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIHN3aXRjaCAobV90
eXBlKSB7Ci0gICAgY2FzZSBSZXBsYWNlOgotICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKG1f
b2xkU3RydWN0dXJlLmdldCgpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBUcmFuc2l0aW9uOgotICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2Vk
KG1fb2xkU3RydWN0dXJlLmdldCgpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgaWYgKCFIZWFwOjppc01hcmtlZChtX25ld1N0cnVjdHVyZS5nZXQoKSkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU2V0dGVyOgotICAgIGNh
c2UgQ3VzdG9tU2V0dGVyOgotICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fb2xkU3RydWN0
dXJlLmdldCgpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoIW1fc3R1YlJvdXRpbmUtPnZpc2l0V2Vh
ayh2bSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotUG9s
eW1vcnBoaWNQdXRCeUlkTGlzdDo6UG9seW1vcnBoaWNQdXRCeUlkTGlzdCgKLSAgICBQdXRLaW5k
IHB1dEtpbmQsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLSAgICA6IG1fa2luZChwdXRL
aW5kKQotewotICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlICE9IGFjY2Vzc191bnNldCkKLSAg
ICAgICAgbV9saXN0LmFwcGVuZChQdXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0dXJlU3R1YkluZm8o
c3R1YkluZm8pKTsKLX0KLQotUG9seW1vcnBoaWNQdXRCeUlkTGlzdCogUG9seW1vcnBoaWNQdXRC
eUlkTGlzdDo6ZnJvbSgKLSAgICBQdXRLaW5kIHB1dEtpbmQsIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbykKLXsKLSAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfcHV0X2J5
X2lkX2xpc3QpCi0gICAgICAgIHJldHVybiBzdHViSW5mby51LnB1dEJ5SWRMaXN0Lmxpc3Q7Ci0g
ICAgCi0gICAgQVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3B1dF9ieV9pZF9y
ZXBsYWNlCi0gICAgICAgIHx8IHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3B1dF9ieV9p
ZF90cmFuc2l0aW9uX25vcm1hbAotICAgICAgICB8fCBzdHViSW5mby5hY2Nlc3NUeXBlID09IGFj
Y2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3QKLSAgICAgICAgfHwgc3R1YkluZm8uYWNj
ZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpOwotICAgIAotICAgIFBvbHltb3JwaGljUHV0QnlJZExp
c3QqIHJlc3VsdCA9Ci0gICAgICAgIG5ldyBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KHB1dEtpbmQs
IHN0dWJJbmZvKTsKLSAgICAKLSAgICBzdHViSW5mby5pbml0UHV0QnlJZExpc3QocmVzdWx0KTsK
LSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojp+
UG9seW1vcnBoaWNQdXRCeUlkTGlzdCgpIHsgfQotCi1ib29sIFBvbHltb3JwaGljUHV0QnlJZExp
c3Q6OmlzRnVsbCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHNpemUoKSA8PSBQT0xZTU9SUEhJQ19M
SVNUX0NBQ0hFX1NJWkUpOwotICAgIHJldHVybiBzaXplKCkgPT0gUE9MWU1PUlBISUNfTElTVF9D
QUNIRV9TSVpFOwotfQotCi1ib29sIFBvbHltb3JwaGljUHV0QnlJZExpc3Q6OmlzQWxtb3N0RnVs
bCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHNpemUoKSA8PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hF
X1NJWkUpOwotICAgIHJldHVybiBzaXplKCkgPj0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpF
IC0gMTsKLX0KLQotdm9pZCBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0OjphZGRBY2Nlc3MoY29uc3Qg
UHV0QnlJZEFjY2VzcyYgcHV0QnlJZEFjY2VzcykKLXsKLSAgICBBU1NFUlQoIWlzRnVsbCgpKTsK
LSAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgcmVzaXppbmcgb3B0aW1pemVzIGZvciBzcGFjZSwg
bm90IHRpbWUuCi0gICAgbV9saXN0LnJlc2l6ZVRvRml0KG1fbGlzdC5zaXplKCkgKyAxKTsKLSAg
ICBtX2xpc3QubGFzdCgpID0gcHV0QnlJZEFjY2VzczsKLX0KLQotYm9vbCBQb2x5bW9ycGhpY1B1
dEJ5SWRMaXN0Ojp2aXNpdFdlYWsoVk0mIHZtKSBjb25zdAotewotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzaXplKCk7ICsraSkgewotICAgICAgICBpZiAoIWF0KGkpLnZpc2l0V2Vhayh2
bSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwot
fQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1
dEJ5SWRMaXN0LmgJKHJldmlzaW9uIDE4OTMyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMjE2
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKi8KLQotI2lmbmRlZiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0X2gKLSNkZWZpbmUgUG9s
eW1vcnBoaWNQdXRCeUlkTGlzdF9oCi0KLSNpZiBFTkFCTEUoSklUKQotCi0jaW5jbHVkZSAiQ29k
ZU9yaWdpbi5oIgotI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCi0jaW5jbHVkZSAiT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQuaCIKLSNpbmNsdWRlICJPcGNvZGUuaCIKLSNpbmNsdWRlICJQ
dXRLaW5kLmgiCi0jaW5jbHVkZSAiUHV0UHJvcGVydHlTbG90LmgiCi0jaW5jbHVkZSAiU3RydWN0
dXJlLmgiCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xh
c3MgQ29kZUJsb2NrOwotc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvOwotCi1jbGFzcyBQdXRCeUlk
QWNjZXNzIHsKLXB1YmxpYzoKLSAgICBlbnVtIEFjY2Vzc1R5cGUgewotICAgICAgICBJbnZhbGlk
LAotICAgICAgICBUcmFuc2l0aW9uLAotICAgICAgICBSZXBsYWNlLAotICAgICAgICBTZXR0ZXIs
Ci0gICAgICAgIEN1c3RvbVNldHRlcgotICAgIH07Ci0gICAgCi0gICAgUHV0QnlJZEFjY2Vzcygp
Ci0gICAgICAgIDogbV90eXBlKEludmFsaWQpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBzdGF0
aWMgUHV0QnlJZEFjY2VzcyB0cmFuc2l0aW9uKAotICAgICAgICBWTSYgdm0sCi0gICAgICAgIEpT
Q2VsbCogb3duZXIsCi0gICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLAotICAgICAgICBT
dHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQmIGNvbmRpdGlvblNldCwKLSAgICAgICAgUGFzc1JlZlB0cjxKSVRTdHViUm91dGlu
ZT4gc3R1YlJvdXRpbmUpCi0gICAgewotICAgICAgICBQdXRCeUlkQWNjZXNzIHJlc3VsdDsKLSAg
ICAgICAgcmVzdWx0Lm1fdHlwZSA9IFRyYW5zaXRpb247Ci0gICAgICAgIHJlc3VsdC5tX29sZFN0
cnVjdHVyZS5zZXQodm0sIG93bmVyLCBvbGRTdHJ1Y3R1cmUpOwotICAgICAgICByZXN1bHQubV9u
ZXdTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgbmV3U3RydWN0dXJlKTsKLSAgICAgICAgcmVzdWx0
Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OwotICAgICAgICByZXN1bHQubV9jdXN0b21T
ZXR0ZXIgPSAwOwotICAgICAgICByZXN1bHQubV9zdHViUm91dGluZSA9IHN0dWJSb3V0aW5lOwot
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHN0YXRpYyBQdXRCeUlkQWNjZXNz
IHJlcGxhY2UoCi0gICAgICAgIFZNJiB2bSwKLSAgICAgICAgSlNDZWxsKiBvd25lciwKLSAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCi0gICAgICAgIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRp
bmU+IHN0dWJSb3V0aW5lKQotICAgIHsKLSAgICAgICAgUHV0QnlJZEFjY2VzcyByZXN1bHQ7Ci0g
ICAgICAgIHJlc3VsdC5tX3R5cGUgPSBSZXBsYWNlOwotICAgICAgICByZXN1bHQubV9vbGRTdHJ1
Y3R1cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKLSAgICAgICAgcmVzdWx0Lm1fY3VzdG9t
U2V0dGVyID0gMDsKLSAgICAgICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBzdHViUm91dGluZTsK
LSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLQotICAgIHN0YXRpYyBQdXRCeUlkQWNj
ZXNzIHNldHRlcigKLSAgICAgICAgVk0mIHZtLAotICAgICAgICBKU0NlbGwqIG93bmVyLAotICAg
ICAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCi0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
LAotICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0
LAotICAgICAgICBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyBjdXN0b21TZXR0ZXIsCi0g
ICAgICAgIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lKQotICAgIHsKLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoYWNjZXNzVHlwZSA9PSBTZXR0ZXIgfHwgYWNjZXNzVHlwZSA9
PSBDdXN0b21TZXR0ZXIpOwotICAgICAgICBQdXRCeUlkQWNjZXNzIHJlc3VsdDsKLSAgICAgICAg
cmVzdWx0Lm1fb2xkU3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7Ci0gICAgICAg
IHJlc3VsdC5tX3R5cGUgPSBhY2Nlc3NUeXBlOwotICAgICAgICByZXN1bHQubV9jb25kaXRpb25T
ZXQgPSBjb25kaXRpb25TZXQ7Ci0gICAgICAgIHJlc3VsdC5tX2N1c3RvbVNldHRlciA9IGN1c3Rv
bVNldHRlcjsKLSAgICAgICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBzdHViUm91dGluZTsKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIFB1dEJ5SWRBY2Nl
c3MgZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFN0cnVjdHVyZVN0dWJJbmZvJik7Ci0gICAgCi0gICAg
Ym9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSAhPSBJbnZhbGlkOyB9Ci0gICAgYm9v
bCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQotICAgIAotICAgIEFjY2Vz
c1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQotICAgIAotICAgIGJvb2wgaXNU
cmFuc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IFRyYW5zaXRpb247IH0KLSAgICBi
b29sIGlzUmVwbGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBSZXBsYWNlOyB9Ci0gICAg
Ym9vbCBpc1NldHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBTZXR0ZXI7IH0KLSAgICBi
b29sIGlzQ3VzdG9tKCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IEN1c3RvbVNldHRlcjsgfQot
ICAgIAotICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlKCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IC8vIFVzaW5nIHRoaXMgaW5zdGVhZCBvZiBpc1NldCgpIHRvIG1ha2UgdGhpcyBhc3NlcnRpb24g
cm9idXN0IGFnYWluc3QgdGhlIHBvc3NpYmlsaXR5Ci0gICAgICAgIC8vIG9mIGFkZGl0aW9uYWwg
YWNjZXNzIHR5cGVzIGJlaW5nIGFkZGVkLgotICAgICAgICBBU1NFUlQoaXNUcmFuc2l0aW9uKCkg
fHwgaXNSZXBsYWNlKCkgfHwgaXNTZXR0ZXIoKSB8fCBpc0N1c3RvbSgpKTsKLSAgICAgICAgCi0g
ICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZS5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzUmVwbGFj
ZSgpIHx8IGlzU2V0dGVyKCkgfHwgaXNDdXN0b20oKSk7Ci0gICAgICAgIHJldHVybiBtX29sZFN0
cnVjdHVyZS5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUo
KSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzVHJhbnNpdGlvbigpKTsKLSAgICAgICAg
cmV0dXJuIG1fbmV3U3RydWN0dXJlLmdldCgpOwotICAgIH0KLSAgICAKLSAgICBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9j
b25kaXRpb25TZXQ7IH0KLSAgICAKLSAgICBKSVRTdHViUm91dGluZSogc3R1YlJvdXRpbmUoKSBj
b25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzVHJhbnNpdGlvbigpIHx8IGlzUmVwbGFjZSgp
IHx8IGlzU2V0dGVyKCkgfHwgaXNDdXN0b20oKSk7Ci0gICAgICAgIHJldHVybiBtX3N0dWJSb3V0
aW5lLmdldCgpOwotICAgIH0KLQotICAgIFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jIGN1
c3RvbVNldHRlcigpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaXNDdXN0b20oKSk7Ci0g
ICAgICAgIHJldHVybiBtX2N1c3RvbVNldHRlcjsKLSAgICB9Ci0KLSAgICBib29sIHZpc2l0V2Vh
ayhWTSYpIGNvbnN0OwotICAgIAotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2Nr
OwotICAgIAotICAgIEFjY2Vzc1R5cGUgbV90eXBlOwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1
cmU+IG1fb2xkU3RydWN0dXJlOwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fbmV3U3Ry
dWN0dXJlOwotICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0Owot
ICAgIFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jIG1fY3VzdG9tU2V0dGVyOwotICAgIFJl
ZlB0cjxKSVRTdHViUm91dGluZT4gbV9zdHViUm91dGluZTsKLX07Ci0KLWNsYXNzIFBvbHltb3Jw
aGljUHV0QnlJZExpc3QgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgot
ICAgIC8vIEVpdGhlciBjcmVhdGVzIGEgbmV3IHBvbHltb3JwaGljIHB1dCBsaXN0LCBvciByZXR1
cm5zIHRoZSBvbmUgdGhhdCBpcyBhbHJlYWR5Ci0gICAgLy8gaW4gcGxhY2UuCi0gICAgc3RhdGlj
IFBvbHltb3JwaGljUHV0QnlJZExpc3QqIGZyb20oUHV0S2luZCwgU3RydWN0dXJlU3R1YkluZm8m
KTsKLSAgICAKLSAgICB+UG9seW1vcnBoaWNQdXRCeUlkTGlzdCgpOwotICAgIAotICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBjdXJyZW50U2xvd1BhdGhUYXJnZXQoKSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fbGlzdC5sYXN0KCkuc3R1YlJvdXRpbmUoKS0+Y29kZSgpLmNvZGUoKTsK
LSAgICB9Ci0gICAgCi0gICAgdm9pZCBhZGRBY2Nlc3MoY29uc3QgUHV0QnlJZEFjY2VzcyYpOwot
ICAgIAotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5pc0VtcHR5KCk7
IH0KLSAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9saXN0LnNpemUoKTsgfQot
ICAgIGJvb2wgaXNGdWxsKCkgY29uc3Q7Ci0gICAgYm9vbCBpc0FsbW9zdEZ1bGwoKSBjb25zdDsg
Ly8gVHJ1ZSBpZiBhZGRpbmcgYW4gZWxlbWVudCB3b3VsZCBtYWtlIGlzRnVsbCgpIHRydWUuCi0g
ICAgY29uc3QgUHV0QnlJZEFjY2VzcyYgYXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9s
aXN0W2ldOyB9Ci0gICAgY29uc3QgUHV0QnlJZEFjY2VzcyYgb3BlcmF0b3JbXSh1bnNpZ25lZCBp
KSBjb25zdCB7IHJldHVybiBtX2xpc3RbaV07IH0KLSAgICAKLSAgICBQdXRLaW5kIGtpbmQoKSBj
b25zdCB7IHJldHVybiBtX2tpbmQ7IH0KLSAgICAKLSAgICBib29sIHZpc2l0V2VhayhWTSYpIGNv
bnN0OwotICAgIAotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOwotICAgIAot
ICAgIC8vIEluaXRpYWxpemUgZnJvbSBhIHN0dWIgaW5mbzsgdGhpcyB3aWxsIHBsYWNlIG9uZSBl
bGVtZW50IGluIHRoZSBsaXN0IGFuZCBpdCB3aWxsCi0gICAgLy8gYmUgY3JlYXRlZCBieSBjb252
ZXJ0aW5nIHRoZSBzdHViIGluZm8ncyBwdXQgYnkgaWQgYWNjZXNzIGluZm9ybWF0aW9uIGludG8g
b3VyCi0gICAgLy8gUHV0QnlJZEFjY2Vzcy4KLSAgICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KFB1
dEtpbmQsIFN0cnVjdHVyZVN0dWJJbmZvJik7Ci0KLSAgICBWZWN0b3I8UHV0QnlJZEFjY2Vzcywg
Mj4gbV9saXN0OwotICAgIFB1dEtpbmQgbV9raW5kOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlND
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotCi0jZW5kaWYgLy8gUG9seW1vcnBoaWNQdXRCeUlk
TGlzdF9oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVT
dHViSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkocmV2aXNpb24gMTg5MzI0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzYsMzcgKzM2LDUyIEBAIG5hbWVzcGFjZSBKU0MgewogI2lmIEVOQUJMRShKSVQpCiB2b2lk
IFN0cnVjdHVyZVN0dWJJbmZvOjpkZXJlZigpCiB7Ci0gICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7
Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3Q6IHsKLSAgICAgICAgZGVsZXRlIHUuZ2V0
QnlJZExpc3QubGlzdDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjYXNlIGFjY2Vzc19w
dXRfYnlfaWRfbGlzdDoKLSAgICAgICAgZGVsZXRlIHUucHV0QnlJZExpc3QubGlzdDsKLSAgICAg
ICAgcmV0dXJuOwotICAgIGNhc2UgYWNjZXNzX2luX2xpc3Q6IHsKLSAgICAgICAgUG9seW1vcnBo
aWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwb2x5bW9ycGhpY1N0cnVjdHVyZXMgPSB1LmluTGlzdC5z
dHJ1Y3R1cmVMaXN0OwotICAgICAgICBkZWxldGUgcG9seW1vcnBoaWNTdHJ1Y3R1cmVzOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9u
X25vcm1hbDoKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6Ci0g
ICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjphZG9wdFJhd1BvaW50ZXIodS5wdXRC
eUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQpOwotICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0
aW9uLnJhd0NvbmRpdGlvblNldCA9IG51bGxwdHI7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNl
IGFjY2Vzc19nZXRfYnlfaWRfc2VsZjoKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFj
ZToKLSAgICBjYXNlIGFjY2Vzc191bnNldDoKLSAgICAgICAgLy8gVGhlc2UgaW5zdHJ1Y3Rpb25z
IGRvbid0IGhhdmUgdG8gcmVsZWFzZSBhbnkgYWxsb2NhdGVkIG1lbW9yeQorICAgIHN3aXRjaCAo
Y2FjaGVUeXBlKSB7CisgICAgY2FzZSBDYWNoZVR5cGU6OlN0dWI6CisgICAgICAgIGRlbGV0ZSB1
LnN0dWI7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENhY2hlVHlwZTo6VW5zZXQ6CisgICAg
Y2FzZSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxmOgorICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRCeUlk
UmVwbGFjZQogICAgICAgICByZXR1cm47Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVQdHIgU3RydWN0dXJlU3R1YkluZm86OmFk
ZEFjY2Vzc0Nhc2UoCisgICAgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSWRl
bnRpZmllciYgaWRlbnQsIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBhY2Nlc3NDYXNlKQor
eworICAgIGlmICghYWNjZXNzQ2FzZSkKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cigpOworICAgIAorICAgIGlmIChjYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpTdHViKQorICAg
ICAgICByZXR1cm4gdS5zdHViLT5yZWdlbmVyYXRlV2l0aENhc2Uodm0sIGNvZGVCbG9jaywgKnRo
aXMsIGlkZW50LCBhY2Nlc3NDYXNlKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxQb2x5bW9ycGhp
Y0FjY2Vzcz4gYWNjZXNzID0gc3RkOjptYWtlX3VuaXF1ZTxQb2x5bW9ycGhpY0FjY2Vzcz4oKTsK
KyAgICAKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+PiBhY2Nlc3NDYXNl
czsKKyAgICAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gcHJldmlvdXNDYXNlID0K
KyAgICAgICAgQWNjZXNzQ2FzZTo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKHZtLCBjb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLCAqdGhpcyk7CisgICAgaWYgKHByZXZpb3VzQ2FzZSkKKyAgICAg
ICAgYWNjZXNzQ2FzZXMuYXBwZW5kKHN0ZDo6bW92ZShwcmV2aW91c0Nhc2UpKTsKKworICAgIGFj
Y2Vzc0Nhc2VzLmFwcGVuZChzdGQ6Om1vdmUoYWNjZXNzQ2FzZSkpOworCisgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIHJlc3VsdCA9CisgICAgICAgIGFjY2Vzcy0+cmVnZW5lcmF0ZVdpdGhDYXNl
cyh2bSwgY29kZUJsb2NrLCAqdGhpcywgaWRlbnQsIGFjY2Vzc0Nhc2VzKTsKKworICAgIGlmICgh
cmVzdWx0KQorICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7CisKKyAgICBj
YWNoZVR5cGUgPSBDYWNoZVR5cGU6OlN0dWI7CisgICAgdS5zdHViID0gYWNjZXNzLnJlbGVhc2Uo
KTsKIH0KIAogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoQ29kZUJsb2NrKiBjb2RlQmxv
Y2spCiB7Ci0gICAgaWYgKGFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0KQorICAgIGlmIChjYWNo
ZVR5cGUgPT0gQ2FjaGVUeXBlOjpVbnNldCkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGlm
IChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKQEAgLTc0LDE4ICs4OSwyMSBAQCB2b2lkIFN0cnVj
dHVyZVN0dWJJbmZvOjpyZXNldChDb2RlQmxvY2sqCiAgICAgICAgIC8vIG9mIHRoZSBDb2RlQmxv
Y2suCiAgICAgICAgIGRhdGFMb2coIkNsZWFyaW5nIHN0cnVjdHVyZSBjYWNoZSAoa2luZCAiLCBz
dGF0aWNfY2FzdDxpbnQ+KGFjY2Vzc1R5cGUpLCAiKSBpbiAiLCBSYXdQb2ludGVyKGNvZGVCbG9j
ayksICIuXG4iKTsKICAgICB9Ci0gICAgCi0gICAgaWYgKGlzR2V0QnlJZEFjY2VzcyhzdGF0aWNf
Y2FzdDxBY2Nlc3NUeXBlPihhY2Nlc3NUeXBlKSkpCisKKyAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUp
IHsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldDoKICAgICAgICAgcmVzZXRHZXRCeUlEKGNvZGVC
bG9jaywgKnRoaXMpOwotICAgIGVsc2UgaWYgKGlzUHV0QnlJZEFjY2VzcyhzdGF0aWNfY2FzdDxB
Y2Nlc3NUeXBlPihhY2Nlc3NUeXBlKSkpCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNz
VHlwZTo6UHV0OgogICAgICAgICByZXNldFB1dEJ5SUQoY29kZUJsb2NrLCAqdGhpcyk7Ci0gICAg
ZWxzZSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzSW5BY2Nlc3Moc3RhdGljX2Nhc3Q8QWNj
ZXNzVHlwZT4oYWNjZXNzVHlwZSkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NU
eXBlOjpJbjoKICAgICAgICAgcmVzZXRJbihjb2RlQmxvY2ssICp0aGlzKTsKKyAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIAogICAgIGRlcmVmKCk7Ci0gICAgYWNjZXNzVHlwZSA9IGFjY2Vzc191
bnNldDsKKyAgICBjYWNoZVR5cGUgPSBDYWNoZVR5cGU6OlVuc2V0OwogICAgIHN0dWJSb3V0aW5l
ID0gbnVsbHB0cjsKICAgICB3YXRjaHBvaW50cyA9IG51bGxwdHI7CiB9CkBAIC05Myw0MSArMTEx
LDE4IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnJlc2V0KENvZGVCbG9jayoKIHZvaWQgU3Ry
dWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW5jZXMoQ29kZUJsb2NrKiBjb2RlQmxvY2sp
CiB7CiAgICAgVk0mIHZtID0gKmNvZGVCbG9jay0+dm0oKTsKLSAgICAKLSAgICBzd2l0Y2ggKGFj
Y2Vzc1R5cGUpIHsKLSAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZjoKLSAgICAgICAgaWYg
KEhlYXA6OmlzTWFya2VkKHUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSkp
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgYWNjZXNzX2dl
dF9ieV9pZF9saXN0OiB7Ci0gICAgICAgIGlmICh1LmdldEJ5SWRMaXN0Lmxpc3QtPnZpc2l0V2Vh
ayh2bSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBj
YXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWw6Ci0gICAgY2FzZSBhY2Nlc3Nf
cHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0OgotICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQo
dS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZS5nZXQoKSkKLSAgICAgICAgICAg
ICYmIEhlYXA6OmlzTWFya2VkKHUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLmdldCgpKQot
ICAgICAgICAgICAgJiYgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmZyb21SYXdQb2ludGVy
KHUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0KS5hcmVTdGlsbExpdmUoKSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5
X2lkX3JlcGxhY2U6Ci0gICAgICAgIGlmIChIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRSZXBsYWNl
LmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCkpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfbGlzdDoKLSAgICAgICAgaWYgKHUu
cHV0QnlJZExpc3QubGlzdC0+dmlzaXRXZWFrKHZtKSkKKworICAgIHN3aXRjaCAoY2FjaGVUeXBl
KSB7CisgICAgY2FzZSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxmOgorICAgIGNhc2UgQ2FjaGVUeXBl
OjpQdXRCeUlkUmVwbGFjZToKKyAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKHUuYnlJZFNlbGYu
YmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IGJyZWFrOwotICAgIGNhc2UgYWNjZXNzX2luX2xpc3Q6IHsKLSAgICAgICAgUG9seW1vcnBoaWNB
Y2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwb2x5bW9ycGhpY1N0cnVjdHVyZXMgPSB1LmluTGlzdC5zdHJ1
Y3R1cmVMaXN0OwotICAgICAgICBpZiAocG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT52aXNpdFdlYWso
dS5pbkxpc3QubGlzdFNpemUpKQorICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOgorICAgICAgICBp
ZiAodS5zdHViLT52aXNpdFdlYWsodm0pKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBi
cmVhazsKLSAgICB9CiAgICAgZGVmYXVsdDoKLSAgICAgICAgLy8gVGhlIHJlc3Qgb2YgdGhlIGlu
c3RydWN0aW9ucyBkb24ndCByZXF1aXJlIHJlZmVyZW5jZXMsIHNvIHRoZXJlIGlzIG5vIG5lZWQg
dG8KLSAgICAgICAgLy8gZG8gYW55dGhpbmcuCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHVi
SW5mby5oCShyZXZpc2lvbiAxODkzMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAog
I2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQuaCIKICNpbmNsdWRlICJPcGNvZGUuaCIKLSNpbmNsdWRlICJQb2x5bW9ycGhpY0Fj
Y2Vzc1N0cnVjdHVyZUxpc3QuaCIKKyNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgogI2lu
Y2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCiAjaW5jbHVkZSAiU3BpbGxSZWdpc3RlcnNNb2RlLmgiCiAj
aW5jbHVkZSAiU3RydWN0dXJlLmgiCkBAIC00Miw1NyArNDIsMjUgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICNpZiBFTkFCTEUoSklUKQogCi1jbGFzcyBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OwotY2xh
c3MgUG9seW1vcnBoaWNQdXRCeUlkTGlzdDsKK2NsYXNzIFBvbHltb3JwaGljQWNjZXNzOwogCi1l
bnVtIEFjY2Vzc1R5cGUgewotICAgIGFjY2Vzc19nZXRfYnlfaWRfc2VsZiwKLSAgICBhY2Nlc3Nf
Z2V0X2J5X2lkX2xpc3QsCi0gICAgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbCwK
LSAgICBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0LAotICAgIGFjY2Vzc19wdXRf
YnlfaWRfcmVwbGFjZSwKLSAgICBhY2Nlc3NfcHV0X2J5X2lkX2xpc3QsCi0gICAgYWNjZXNzX3Vu
c2V0LAotICAgIGFjY2Vzc19pbl9saXN0CitlbnVtIGNsYXNzIEFjY2Vzc1R5cGUgOiBpbnQ4X3Qg
eworICAgIEdldCwKKyAgICBQdXQsCisgICAgSW4KIH07CiAKLWlubGluZSBib29sIGlzR2V0QnlJ
ZEFjY2VzcyhBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUpCi17Ci0gICAgc3dpdGNoIChhY2Nlc3NUeXBl
KSB7Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGY6Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0
X2J5X2lkX2xpc3Q6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0gICAgCi1pbmxpbmUgYm9vbCBpc1B1dEJ5SWRBY2Nl
c3MoQWNjZXNzVHlwZSBhY2Nlc3NUeXBlKQotewotICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgewot
ICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoKLSAgICBjYXNlIGFj
Y2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6Ci0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5
X2lkX3JlcGxhY2U6Ci0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX2xpc3Q6Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19
Ci0KLWlubGluZSBib29sIGlzSW5BY2Nlc3MoQWNjZXNzVHlwZSBhY2Nlc3NUeXBlKQotewotICAg
IHN3aXRjaCAoYWNjZXNzVHlwZSkgewotICAgIGNhc2UgYWNjZXNzX2luX2xpc3Q6Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci19CitlbnVtIGNsYXNzIENhY2hlVHlwZSA6IGludDhfdCB7CisgICAgVW5zZXQsCisgICAgR2V0
QnlJZFNlbGYsCisgICAgUHV0QnlJZFJlcGxhY2UsCisgICAgU3R1YgorfTsKIAogc3RydWN0IFN0
cnVjdHVyZVN0dWJJbmZvIHsKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbygpCi0gICAgICAgIDogYWNj
ZXNzVHlwZShhY2Nlc3NfdW5zZXQpCisgICAgU3RydWN0dXJlU3R1YkluZm8oQWNjZXNzVHlwZSBh
Y2Nlc3NUeXBlKQorICAgICAgICA6IGFjY2Vzc1R5cGUoYWNjZXNzVHlwZSkKKyAgICAgICAgLCBj
YWNoZVR5cGUoQ2FjaGVUeXBlOjpVbnNldCkKICAgICAgICAgLCBzZWVuKGZhbHNlKQogICAgICAg
ICAsIHJlc2V0QnlHQyhmYWxzZSkKICAgICAgICAgLCB0b29rU2xvd1BhdGgoZmFsc2UpCkBAIC0x
MDAsNTMgKzY4LDMxIEBAIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAgICAgewogICAgIH0K
IAotICAgIHZvaWQgaW5pdEdldEJ5SWRTZWxmKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgU3RydWN0
dXJlKiBiYXNlT2JqZWN0U3RydWN0dXJlKQorICAgIHZvaWQgaW5pdEdldEJ5SWRTZWxmKFZNJiB2
bSwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBiYXNlT2JqZWN0U3RydWN0dXJlLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQpCiAgICAgewotICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX2dldF9i
eV9pZF9zZWxmOwotCi0gICAgICAgIHUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5z
ZXQodm0sIG93bmVyLCBiYXNlT2JqZWN0U3RydWN0dXJlKTsKLSAgICB9CisgICAgICAgIGNhY2hl
VHlwZSA9IENhY2hlVHlwZTo6R2V0QnlJZFNlbGY7CiAKLSAgICB2b2lkIGluaXRHZXRCeUlkTGlz
dChQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0KQotICAgIHsKLSAgICAgICAgYWNjZXNzVHlw
ZSA9IGFjY2Vzc19nZXRfYnlfaWRfbGlzdDsKLSAgICAgICAgdS5nZXRCeUlkTGlzdC5saXN0ID0g
bGlzdDsKKyAgICAgICAgdS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLnNldCh2bSwgb3du
ZXIsIGJhc2VPYmplY3RTdHJ1Y3R1cmUpOworICAgICAgICB1LmJ5SWRTZWxmLm9mZnNldCA9IG9m
ZnNldDsKICAgICB9CiAKLSAgICAvLyBQdXRCeUlkKgotCi0gICAgdm9pZCBpbml0UHV0QnlJZFRy
YW5zaXRpb24oVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIHByZXZpb3VzU3RydWN0
dXJlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29u
ZGl0aW9uU2V0LCBib29sIGlzRGlyZWN0KQorICAgIHZvaWQgaW5pdFB1dEJ5SWRSZXBsYWNlKFZN
JiB2bSwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBiYXNlT2JqZWN0U3RydWN0dXJlLCBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQpCiAgICAgewotICAgICAgICBpZiAoaXNEaXJlY3QpCi0gICAgICAg
ICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdDsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgYWNjZXNzVHlwZSA9IGFjY2Vzc19wdXRfYnlfaWRfdHJh
bnNpdGlvbl9ub3JtYWw7CisgICAgICAgIGNhY2hlVHlwZSA9IENhY2hlVHlwZTo6UHV0QnlJZFJl
cGxhY2U7CiAKLSAgICAgICAgdS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZS5z
ZXQodm0sIG93bmVyLCBwcmV2aW91c1N0cnVjdHVyZSk7Ci0gICAgICAgIHUucHV0QnlJZFRyYW5z
aXRpb24uc3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHUucHV0
QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0LnJlbGVhc2VSYXdQ
b2ludGVyKCk7CisgICAgICAgIHUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5zZXQodm0s
IG93bmVyLCBiYXNlT2JqZWN0U3RydWN0dXJlKTsKKyAgICAgICAgdS5ieUlkU2VsZi5vZmZzZXQg
PSBvZmZzZXQ7CiAgICAgfQogCi0gICAgdm9pZCBpbml0UHV0QnlJZFJlcGxhY2UoVk0mIHZtLCBK
U0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIGJhc2VPYmplY3RTdHJ1Y3R1cmUpCisgICAgdm9pZCBp
bml0U3R1YihzdGQ6OnVuaXF1ZV9wdHI8UG9seW1vcnBoaWNBY2Nlc3M+IHN0dWIpCiAgICAgewot
ICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlOwotICAgIAotICAg
ICAgICB1LnB1dEJ5SWRSZXBsYWNlLmJhc2VPYmplY3RTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwg
YmFzZU9iamVjdFN0cnVjdHVyZSk7CisgICAgICAgIGNhY2hlVHlwZSA9IENhY2hlVHlwZTo6U3R1
YjsKKyAgICAgICAgdS5zdHViID0gc3R1Yi5yZWxlYXNlKCk7CiAgICAgfQotICAgICAgICAKLSAg
ICB2b2lkIGluaXRQdXRCeUlkTGlzdChQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiBsaXN0KQotICAg
IHsKLSAgICAgICAgYWNjZXNzVHlwZSA9IGFjY2Vzc19wdXRfYnlfaWRfbGlzdDsKLSAgICAgICAg
dS5wdXRCeUlkTGlzdC5saXN0ID0gbGlzdDsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBpbml0SW5M
aXN0KFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogbGlzdCwgaW50IGxpc3RTaXplKQot
ICAgIHsKLSAgICAgICAgYWNjZXNzVHlwZSA9IGFjY2Vzc19pbl9saXN0OwotICAgICAgICB1Lmlu
TGlzdC5zdHJ1Y3R1cmVMaXN0ID0gbGlzdDsKLSAgICAgICAgdS5pbkxpc3QubGlzdFNpemUgPSBs
aXN0U2l6ZTsKLSAgICB9Ci0gICAgICAgIAorCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGFk
ZEFjY2Vzc0Nhc2UoCisgICAgICAgIFZNJiwgQ29kZUJsb2NrKiwgY29uc3QgSWRlbnRpZmllciYs
IHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBhY2Nlc3NDYXNlKTsKKwogICAgIHZvaWQgcmVz
ZXQoQ29kZUJsb2NrKik7CiAKICAgICB2b2lkIGRlcmVmKCk7CkBAIC0xNzIsOCArMTE4LDkgQEAg
c3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICAgICAgICAgIHdhdGNocG9pbnRzLCBjb2Rl
QmxvY2ssIHRoaXMsIGNvbmRpdGlvbik7CiAgICAgfQogICAgIAotICAgIGludDhfdCBhY2Nlc3NU
eXBlOwotICAgIGJvb2wgc2VlbiA6IDE7CisgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlOworICAg
IENhY2hlVHlwZSBjYWNoZVR5cGU7CisgICAgYm9vbCBzZWVuOwogICAgIGJvb2wgcmVzZXRCeUdD
IDogMTsKICAgICBib29sIHRvb2tTbG93UGF0aCA6IDE7CiAKQEAgLTIwMywzNCArMTUwLDEzIEBA
IHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAKICAgICB1bmlvbiB7CiAgICAgICAgIHN0cnVj
dCB7Ci0gICAgICAgICAgICAvLyBJdCB3b3VsZCBiZSB1bndpc2UgdG8gcHV0IGFueXRoaW5nIGhl
cmUsIGFzIGl0IHdpbGwgc3VyZWx5IGJlIG92ZXJ3cml0dGVuLgotICAgICAgICB9IHVuc2V0Owot
ICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+
IGJhc2VPYmplY3RTdHJ1Y3R1cmU7Ci0gICAgICAgIH0gZ2V0QnlJZFNlbGY7Ci0gICAgICAgIHN0
cnVjdCB7Ci0gICAgICAgICAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0OwotICAgICAg
ICB9IGdldEJ5SWRMaXN0OwotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgV3JpdGVCYXJy
aWVyQmFzZTxTdHJ1Y3R1cmU+IHByZXZpb3VzU3RydWN0dXJlOwotICAgICAgICAgICAgV3JpdGVC
YXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IHN0cnVjdHVyZTsKLSAgICAgICAgICAgIHZvaWQqIHJhd0Nv
bmRpdGlvblNldDsKLSAgICAgICAgfSBwdXRCeUlkVHJhbnNpdGlvbjsKLSAgICAgICAgc3RydWN0
IHsKICAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBiYXNlT2JqZWN0U3Ry
dWN0dXJlOwotICAgICAgICB9IHB1dEJ5SWRSZXBsYWNlOwotICAgICAgICBzdHJ1Y3QgewotICAg
ICAgICAgICAgUG9seW1vcnBoaWNQdXRCeUlkTGlzdCogbGlzdDsKLSAgICAgICAgfSBwdXRCeUlk
TGlzdDsKLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIFBvbHltb3JwaGljQWNjZXNzU3Ry
dWN0dXJlTGlzdCogc3RydWN0dXJlTGlzdDsKLSAgICAgICAgICAgIGludCBsaXN0U2l6ZTsKLSAg
ICAgICAgfSBpbkxpc3Q7CisgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CisgICAg
ICAgIH0gYnlJZFNlbGY7CisgICAgICAgIFBvbHltb3JwaGljQWNjZXNzKiBzdHViOwogICAgIH0g
dTsKIAotICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7CiAgICAgQ29kZUxv
Y2F0aW9uQ2FsbCBjYWxsUmV0dXJuTG9jYXRpb247Ci0gICAgUmVmUHRyPFdhdGNocG9pbnRzT25T
dHJ1Y3R1cmVTdHViSW5mbz4gd2F0Y2hwb2ludHM7CiB9OwogCiBpbmxpbmUgQ29kZU9yaWdpbiBn
ZXRTdHJ1Y3R1cmVTdHViSW5mb0NvZGVPcmlnaW4oU3RydWN0dXJlU3R1YkluZm8mIHN0cnVjdHVy
ZVN0dWJJbmZvKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBl
cnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVs
cGVycy5oCShyZXZpc2lvbiAxODkzMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fz
c2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC01NjMsNyArNTYzLDcgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gYnJhbmNoMzIoRXF1YWwsIHJlZ3MudGFnR1BSKCksIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7CiAjZW5kaWYKICAgICB9Ci0gICAgCisKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgIEp1bXAgYnJhbmNoU3RydWN0dXJlKFJlbGF0aW9u
YWxDb25kaXRpb24gY29uZGl0aW9uLCBUIGxlZnRIYW5kU2lkZSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCiAgICAgewpAQCAtODMyLDYgKzgzMiwxNSBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAK
KyAgICB2b2lkIGJveEJvb2xlYW5QYXlsb2FkKGJvb2wgdmFsdWUsIEdQUlJlZyBwYXlsb2FkR1BS
KQorICAgIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihW
YWx1ZUZhbHNlICsgdmFsdWUpLCBwYXlsb2FkR1BSKTsKKyNlbHNlCisgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKHZhbHVlKSwgcGF5bG9hZEdQUik7CisjZW5kaWYKKyAgICB9CisKICAgICB2b2lk
IGJveEJvb2xlYW4oR1BSUmVnIGJvb2xHUFIsIEpTVmFsdWVSZWdzIGJveGVkUmVncykKICAgICB7
CiAgICAgICAgIGJveEJvb2xlYW5QYXlsb2FkKGJvb2xHUFIsIGJveGVkUmVncy5wYXlsb2FkR1BS
KCkpOwpAQCAtODM5LDYgKzg0OCwxNyBAQCBwdWJsaWM6CiAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpLCBib3hlZFJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCiAg
ICAgfQorCisgICAgdm9pZCBib3hJbnQzMihHUFJSZWcgaW50R1BSLCBKU1ZhbHVlUmVncyBib3hl
ZFJlZ3MpCisgICAgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIGppdC5tb3ZlKGludEdQ
UiwgYm94ZWRSZWdzLmdwcigpKTsKKyAgICAgICAgaml0Lm9yNjQoVHJ1c3RlZEltbTY0KFRhZ1R5
cGVOdW1iZXIpLCBib3hlZFJlZ3MuZ3ByKCkpOworI2Vsc2UKKyAgICAgICAgaml0Lm1vdmUoaW50
R1BSLCBib3hlZFJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgaml0Lm1vdmUoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkludDMyVGFnKSwgYm94ZWRSZWdzLnRhZ0dQUigpKTsKKyNlbmRpZgorICAg
IH0KICAgICAKICAgICB2b2lkIGNhbGxFeGNlcHRpb25GdXp6KCk7CiAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE4OTMy
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE1MywyNCArMTUzLDYgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiBvcGVyYXRpb25HZQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYmFzZVZhbHVlLmdldChl
eGVjLCBpZGVudCwgc2xvdCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkdldEJ5SWRCdWlsZExpc3QoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8sIEVuY29kZWRKU1ZhbHVlIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQp
Ci17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7Ci0KLSAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6
ZnJvbVVpZCh2bSwgdWlkKTsKLSAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2Fz
dDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSk7Ci0KLSAgICBKU1ZhbHVlIGJhc2VW
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShiYXNlKTsKLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNl
VmFsdWUpOwotICAgIGJvb2wgaGFzUmVzdWx0ID0gYmFzZVZhbHVlLmdldFByb3BlcnR5U2xvdChl
eGVjLCBpZGVudCwgc2xvdCk7Ci0gICAgCi0gICAgaWYgKGFjY2Vzc1R5cGUgPT0gc3RhdGljX2Nh
c3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpKQotICAgICAgICBidWlsZEdldEJ5
SURMaXN0KGV4ZWMsIGJhc2VWYWx1ZSwgaWRlbnQsIHNsb3QsICpzdHViSW5mbyk7Ci0KLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGhhc1Jlc3VsdD8gc2xvdC5nZXRWYWx1ZShleGVjLCBpZGVu
dCkgOiBqc1VuZGVmaW5lZCgpKTsKLX0KLQogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBv
cGVyYXRpb25HZXRCeUlkT3B0aW1pemUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8sIEVuY29kZWRKU1ZhbHVlIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQp
CiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CkBAIC0xODcsNyArMTY5LDYgQEAgRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgICAgICBzdHViSW5mby0+c2Vl
biA9IHRydWU7CiAgICAgCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShoYXNSZXN1bHQ/IHNs
b3QuZ2V0VmFsdWUoZXhlYywgaWRlbnQpIDoganNVbmRlZmluZWQoKSk7Ci0KIH0KIAogRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Jbk9wdGltaXplKEV4ZWNTdGF0ZSogZXhl
YywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBKU0NlbGwqIGJhc2UsIFVuaXF1ZWRTdHJp
bmdJbXBsKiBrZXkpCkBAIC0zODQsOTAgKzM2NSw2IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25QdXRCeUlkRGlyZWMKICAgICAgICAgc3R1YkluZm8tPnNlZW4gPSB0cnVlOwogfQogCi12
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdEJ1aWxkTGlzdChFeGVjU3Rh
dGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCkKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRl
bnRpZmllcjo6ZnJvbVVpZCh2bSwgdWlkKTsKLSAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBz
dGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSk7Ci0KLSAgICBKU1Zh
bHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgSlNWYWx1ZSBi
YXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpOwotICAgIFB1dFByb3BlcnR5
U2xvdCBzbG90KGJhc2VWYWx1ZSwgdHJ1ZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250
ZXh0KCkpOwotICAgIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZVZhbHVlLmlzQ2Vs
bCgpID8gYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKnZtKSA6IG51bGxwdHI7IAotICAg
IGJhc2VWYWx1ZS5wdXQoZXhlYywgaWRlbnQsIHZhbHVlLCBzbG90KTsKLQotICAgIGlmIChhY2Nl
c3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgYnVpbGRQdXRCeUlkTGlzdChleGVjLCBiYXNlVmFsdWUs
IHN0cnVjdHVyZSwgaWRlbnQsIHNsb3QsICpzdHViSW5mbywgTm90RGlyZWN0KTsKLX0KLQotdm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3QoRXhlY1N0
YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBs
KiB1aWQpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCi0gICAgSWRlbnRpZmllciBpZGVudCA9IElk
ZW50aWZpZXI6OmZyb21VaWQodm0sIHVpZCk7Ci0gICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0g
c3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpOwotCi0gICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIEpTVmFsdWUg
YmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKTsKLSAgICBQdXRQcm9wZXJ0
eVNsb3Qgc2xvdChiYXNlVmFsdWUsIGZhbHNlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENv
bnRleHQoKSk7Ci0KLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VWYWx1ZS5pc0NlbGwo
KSA/IGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCp2bSkgOiBudWxscHRyOwotICAgIGJh
c2VWYWx1ZS5wdXQoZXhlYywgaWRlbnQsIHZhbHVlLCBzbG90KTsKLSAgICAKLSAgICBpZiAoYWNj
ZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSkp
Ci0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBidWlsZFB1dEJ5SWRMaXN0KGV4ZWMsIGJhc2VW
YWx1ZSwgc3RydWN0dXJlLCBpZGVudCwgc2xvdCwgKnN0dWJJbmZvLCBOb3REaXJlY3QpOwotfQot
Ci12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdEJ1aWxkTGlz
dChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgVW5pcXVlZFN0
cmluZ0ltcGwqIHVpZCkKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlk
ZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgdWlkKTsKLSAgICBBY2Nlc3NUeXBlIGFjY2Vz
c1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSk7Ci0g
ICAgCi0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwot
ICAgIEpTT2JqZWN0KiBiYXNlT2JqZWN0ID0gYXNPYmplY3QoSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRCYXNlKSk7Ci0gICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZU9iamVjdCwgdHJ1ZSwgZXhl
Yy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwotCi0gICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBiYXNlT2JqZWN0LT5zdHJ1Y3R1cmUoKnZtKTsgICAgCi0gICAgYmFzZU9iamVjdC0+
cHV0RGlyZWN0KCp2bSwgaWRlbnQsIHZhbHVlLCBzbG90KTsKLSAgICAKLSAgICBpZiAoYWNjZXNz
VHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSkpCi0g
ICAgICAgIHJldHVybjsKLSAgICAKLSAgICBidWlsZFB1dEJ5SWRMaXN0KGV4ZWMsIGJhc2VPYmpl
Y3QsIHN0cnVjdHVyZSwgaWRlbnQsIHNsb3QsICpzdHViSW5mbywgRGlyZWN0KTsKLX0KLQotdm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RCdWlsZExpc3Qo
RXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCi0gICAgSWRlbnRpZmllciBpZGVu
dCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHVpZCk7Ci0gICAgQWNjZXNzVHlwZSBhY2Nlc3NU
eXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpOwotCi0g
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIEpT
T2JqZWN0KiBiYXNlT2JqZWN0ID0gYXNPYmplY3QoSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNl
KSk7Ci0gICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZU9iamVjdCwgZmFsc2UsIGV4ZWMtPmNv
ZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKLQotICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gYmFzZU9iamVjdC0+c3RydWN0dXJlKCp2bSk7ICAgIAotICAgIGJhc2VPYmplY3QtPnB1dERp
cmVjdCgqdm0sIGlkZW50LCB2YWx1ZSwgc2xvdCk7Ci0KLSAgICBpZiAoYWNjZXNzVHlwZSAhPSBz
dGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSkpCi0gICAgICAgIHJl
dHVybjsKLSAgICAKLSAgICBidWlsZFB1dEJ5SWRMaXN0KGV4ZWMsIGJhc2VPYmplY3QsIHN0cnVj
dHVyZSwgaWRlbnQsIHNsb3QsICpzdHViSW5mbywgRGlyZWN0KTsKLX0KLQogdm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVTdG9yYWdlQW5kRmluaXNoUHV0KEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIGJhc2UsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDE4
OTMyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEyOSwzNSArMTI5LDYgQEAgc3RhdGljIHZvaWQgcmVwYXRjaEJ5SWRTZWxmQWNj
ZXNzKAogI2VuZGlmCiB9CiAKLXN0YXRpYyB2b2lkIGNoZWNrT2JqZWN0UHJvcGVydHlDb25kaXRp
b24oCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywKLSAgICBDQ2FsbEhl
bHBlcnMmIGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEdQUlJl
ZyBzY3JhdGNoR1BSKQotewotICAgIGlmIChjb25kaXRpb24uaXNXYXRjaGFibGVBc3N1bWluZ0lt
cHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKSB7Ci0gICAgICAgIGNvbmRpdGlvbi5vYmplY3QoKS0+
c3RydWN0dXJlKCktPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KAotICAgICAgICAgICAgc3R1Yklu
Zm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2ssIGNvbmRpdGlvbikpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjb25kaXRpb24ub2JqZWN0KCkt
PnN0cnVjdHVyZSgpOwotICAgIFJFTEVBU0VfQVNTRVJUKGNvbmRpdGlvbi5zdHJ1Y3R1cmVFbnN1
cmVzVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUpKTsK
LSAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihjb25kaXRpb24ub2Jq
ZWN0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKAotICAgICAgICBq
aXQuYnJhbmNoU3RydWN0dXJlKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc3RydWN0dXJlKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNo
ZWNrT2JqZWN0UHJvcGVydHlDb25kaXRpb25zKAotICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0JiBzZXQsIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8sCi0gICAgQ0NhbGxIZWxwZXJzJiBqaXQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCYgZmFpbHVyZUNhc2VzLCBHUFJSZWcgc2NyYXRjaEdQUikKLXsKLSAgICBmb3IgKGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiBzZXQpIHsKLSAgICAgICAgY2hlY2tP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbigKLSAgICAgICAgICAgIGNvbmRpdGlvbiwgY29kZUJsb2Nr
LCBzdHViSW5mbywgaml0LCBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOwotICAgIH0KLX0KLQog
c3RhdGljIHZvaWQgcmVwbGFjZVdpdGhKdW1wKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywg
Y29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHRhcmdldCkKIHsKICAgICBpZiAoTWFjcm9Bc3Nl
bWJsZXI6OmNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goKSkgewpAQCAt
MTY4LDYgKzEzOSw4IEBAIHN0YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChTdHJ1Y3R1cmVTdHUK
ICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHRhcmdldCkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQorCisgICAgcmVzZXRHZXRCeUlEQ2hlY2tBbmRMb2FkKHN0dWJJbmZvKTsKICAgICAK
ICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoCiAgICAgICAgIHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoCkBAIC0xNzUsNTIgKzE0OCw2IEBAIHN0YXRpYyB2
b2lkIHJlcGxhY2VXaXRoSnVtcChTdHJ1Y3R1cmVTdHUKICAgICAgICAgQ29kZUxvY2F0aW9uTGFi
ZWwodGFyZ2V0KSk7CiB9CiAKLXN0YXRpYyB2b2lkIGVtaXRSZXN0b3JlU2NyYXRjaChNYWNyb0Fz
c2VtYmxlciYgc3R1YkppdCwgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgR1BSUmVnIHNjcmF0
Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpKdW1wJiBzdWNjZXNzLCBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCYgZmFpbCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlcykKLXsKLSAgICBp
ZiAobmVlZFRvUmVzdG9yZVNjcmF0Y2gpIHsKLSAgICAgICAgc3R1YkppdC5wb3BUb1Jlc3RvcmUo
c2NyYXRjaEdQUik7Ci0gICAgICAgIAotICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7
Ci0gICAgICAgIAotICAgICAgICAvLyBsaW5rIGZhaWx1cmUgY2FzZXMgaGVyZSwgc28gd2UgY2Fu
IHBvcCBzY3JhdGNoR1BSLCBhbmQgdGhlbiBqdW1wIGJhY2suCi0gICAgICAgIGZhaWx1cmVDYXNl
cy5saW5rKCZzdHViSml0KTsKLSAgICAgICAgCi0gICAgICAgIHN0dWJKaXQucG9wVG9SZXN0b3Jl
KHNjcmF0Y2hHUFIpOwotICAgICAgICAKLSAgICAgICAgZmFpbCA9IHN0dWJKaXQuanVtcCgpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAo
KTsKLX0KLQotc3RhdGljIHZvaWQgbGlua1Jlc3RvcmVTY3JhdGNoKExpbmtCdWZmZXImIHBhdGNo
QnVmZmVyLCBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBz
dWNjZXNzLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QgZmFpbHVyZUNhc2VzLCBDb2RlTG9jYXRpb25MYWJlbCBzdWNjZXNzTGFiZWwsIENvZGVMb2Nh
dGlvbkxhYmVsIHNsb3dDYXNlQmVnaW4pCi17Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNz
LCBzdWNjZXNzTGFiZWwpOwotICAgICAgICAKLSAgICBpZiAobmVlZFRvUmVzdG9yZVNjcmF0Y2gp
IHsKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsLCBzbG93Q2FzZUJlZ2luKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICAvLyBsaW5rIGZhaWx1cmUgY2FzZXMgZGlyZWN0
bHkgYmFjayB0byBub3JtYWwgcGF0aAotICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2Vz
LCBzbG93Q2FzZUJlZ2luKTsKLX0KLQotc3RhdGljIHZvaWQgbGlua1Jlc3RvcmVTY3JhdGNoKExp
bmtCdWZmZXImIHBhdGNoQnVmZmVyLCBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8sIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3MsIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIGZhaWwsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2Fz
ZXMpCi17Ci0gICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0b3Jl
U2NyYXRjaCwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzLCBzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLCBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5k
ZWx0YUNhbGxUb1Nsb3dDYXNlKSk7Ci19Ci0KLWVudW0gQnlJZFN0dWJLaW5kIHsKLSAgICBHZXRW
YWx1ZSwKLSAgICBHZXRVbmRlZmluZWQsCi0gICAgQ2FsbEdldHRlciwKLSAgICBDYWxsQ3VzdG9t
R2V0dGVyLAotICAgIENhbGxTZXR0ZXIsCi0gICAgQ2FsbEN1c3RvbVNldHRlcgotfTsKLQogc3Rh
dGljIGNvbnN0IGNoYXIqIHRvU3RyaW5nKEJ5SWRTdHViS2luZCBraW5kKQogewogICAgIHN3aXRj
aCAoa2luZCkgewpAQCAtMjc3LDMxMiArMjA0LDYgQEAgc3RhdGljIEZ1bmN0aW9uUHRyIGN1c3Rv
bUZvcihjb25zdCBQdXRQcgogICAgIHJldHVybiBGdW5jdGlvblB0cihzbG90LmN1c3RvbVNldHRl
cigpKTsKIH0KIAotc3RhdGljIGJvb2wgZ2VuZXJhdGVCeUlkU3R1YigKLSAgICBFeGVjU3RhdGUq
IGV4ZWMsIEJ5SWRTdHViS2luZCBraW5kLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
Ci0gICAgRnVuY3Rpb25QdHIgY3VzdG9tLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIGNv
bnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCi0gICAgSlNPYmpl
Y3QqIGFsdGVybmF0ZUJhc2UsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIGJvb2wgbG9hZFRhcmdldEZyb21Qcm94eSwKLSAgICBXYXRjaHBvaW50U2V0KiB3YXRj
aHBvaW50U2V0LCBDb2RlTG9jYXRpb25MYWJlbCBzdWNjZXNzTGFiZWwsIENvZGVMb2NhdGlvbkxh
YmVsIHNsb3dDYXNlTGFiZWwsCi0gICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRp
bmUpCi17Ci0gICAgQVNTRVJUKGNvbmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHlB
c3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKTsKLSAgICAKLSAgICBWTSogdm0gPSAm
ZXhlYy0+dm0oKTsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1
YkluZm8ucGF0Y2guYmFzZUdQUik7Ci0gICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzID0gSlNWYWx1
ZVJlZ3MoCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgc3RhdGljX2Nhc3Q8R1BSUmVn
PihzdHViSW5mby5wYXRjaC52YWx1ZVRhZ0dQUiksCi0jZW5kaWYKLSAgICAgICAgc3RhdGljX2Nh
c3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZUdQUikpOwotICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gVGVtcFJlZ2lzdGVyU2V0KHN0dWJJbmZvLnBhdGNoLnVzZWRSZWdpc3RlcnMpLmdldEZy
ZWVHUFIoKTsKLSAgICBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gc2NyYXRjaEdQUiA9PSBJ
bnZhbGlkR1BSUmVnOwotICAgIFJFTEVBU0VfQVNTRVJUKCFuZWVkVG9SZXN0b3JlU2NyYXRjaCB8
fCAoa2luZCA9PSBHZXRWYWx1ZSB8fCBraW5kID09IEdldFVuZGVmaW5lZCkpOwotICAgIAotICAg
IENDYWxsSGVscGVycyBzdHViSml0KCZleGVjLT52bSgpLCBleGVjLT5jb2RlQmxvY2soKSk7Ci0g
ICAgaWYgKG5lZWRUb1Jlc3RvcmVTY3JhdGNoKSB7Ci0gICAgICAgIHNjcmF0Y2hHUFIgPSBBc3Nl
bWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoCi0gICAgICAgICAgICBiYXNlR1BSLCB2YWx1
ZVJlZ3MudGFnR1BSKCksIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwotICAgICAgICBzdHViSml0
LnB1c2hUb1NhdmUoc2NyYXRjaEdQUik7Ci0gICAgICAgIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0g
dHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVD
YXNlczsKLQotICAgIEdQUlJlZyBiYXNlRm9yR2V0R1BSOwotICAgIGlmIChsb2FkVGFyZ2V0RnJv
bVByb3h5KSB7Ci0gICAgICAgIGJhc2VGb3JHZXRHUFIgPSB2YWx1ZVJlZ3MucGF5bG9hZEdQUigp
OwotICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoOCgKLSAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgCi0gICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKFB1cmVGb3J3YXJkaW5nUHJveHlU
eXBlKSkpOwotCi0gICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlR1BSLCBKU1Byb3h5Ojp0YXJnZXRPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAg
ICAKLSAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFN0cnVjdHVyZSgK
LSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgCi0gICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLAotICAgICAgICAgICAgc3RydWN0dXJlKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYmFz
ZUZvckdldEdQUiA9IGJhc2VHUFI7Ci0KLSAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHVi
Sml0LmJyYW5jaFN0cnVjdHVyZSgKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlRm9yR2V0R1BSLCBK
U0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCAKLSAgICAgICAgICAgIHN0cnVjdHVyZSkpOwot
ICAgIH0KLQotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0g
ICAgaWYgKHN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIHx8IGNvbmRp
dGlvblNldC5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpCi0gICAgICAgIHZtLT5yZWdp
c3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHN0dWJJbmZvLmFk
ZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7Ci0KLSAgICBpZiAod2F0Y2hwb2ludFNldCkKLSAgICAg
ICAgd2F0Y2hwb2ludFNldC0+YWRkKHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7
Ci0KLSAgICBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9ucygKLSAgICAgICAgY29uZGl0aW9u
U2V0LCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHViSml0LCBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hH
UFIpOwotCi0gICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgewotICAgICAgICBTdHJ1Y3R1
cmUqIGN1cnJTdHJ1Y3R1cmU7Ci0gICAgICAgIGlmIChjb25kaXRpb25TZXQuaXNFbXB0eSgpKQot
ICAgICAgICAgICAgY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgY3VyclN0cnVjdHVyZSA9IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigp
Lm9iamVjdCgpLT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgY3VyclN0cnVjdHVyZS0+c3RhcnRXYXRj
aGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKCp2bSwgb2Zmc2V0KTsKLSAgICB9Ci0gICAgCi0g
ICAgR1BSUmVnIGJhc2VGb3JBY2Nlc3NHUFIgPSBJbnZhbGlkR1BSUmVnOwotICAgIGlmIChraW5k
ICE9IEdldFVuZGVmaW5lZCkgewotICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc0VtcHR5KCkp
IHsKLSAgICAgICAgICAgIC8vIFdlIGNvdWxkIGhhdmUgY2xvYmJlcmVkIHNjcmF0Y2hHUFIgZWFy
bGllciwgc28gd2UgaGF2ZSB0byByZWxvYWQgZnJvbSBiYXNlR1BSIHRvIGdldCB0aGUgdGFyZ2V0
LgotICAgICAgICAgICAgaWYgKGxvYWRUYXJnZXRGcm9tUHJveHkpCi0gICAgICAgICAgICAgICAg
c3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTUHJveHk6
OnRhcmdldE9mZnNldCgpKSwgYmFzZUZvckdldEdQUik7Ci0gICAgICAgICAgICBzdHViSml0Lm1v
dmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoYWx0ZXJuYXRlQmFzZSksIHNjcmF0Y2hH
UFIpOwotICAgICAgICAgICAgYmFzZUZvckFjY2Vzc0dQUiA9IHNjcmF0Y2hHUFI7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBGb3IgcHJveHkgb2JqZWN0cywgd2UgbmVlZCB0byBk
byBhbGwgdGhlIFN0cnVjdHVyZSBjaGVja3MgYmVmb3JlIG1vdmluZyB0aGUgYmFzZUdQUiBpbnRv
Ci0gICAgICAgICAgICAvLyBiYXNlRm9yR2V0R1BSIGJlY2F1c2UgaWYgd2UgZmFpbCBhbnkgb2Yg
dGhlIGNoZWNrcyB0aGVuIHdlIHdvdWxkIGhhdmUgdGhlIHdyb25nIHZhbHVlIGluIGJhc2VHUFIK
LSAgICAgICAgICAgIC8vIG9uIHRoZSBzbG93IHBhdGguCi0gICAgICAgICAgICBpZiAobG9hZFRh
cmdldEZyb21Qcm94eSkKLSAgICAgICAgICAgICAgICBzdHViSml0Lm1vdmUoc2NyYXRjaEdQUiwg
YmFzZUZvckdldEdQUik7Ci0gICAgICAgICAgICBiYXNlRm9yQWNjZXNzR1BSID0gYmFzZUZvckdl
dEdQUjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEdQUlJlZyBsb2FkZWRWYWx1ZUdQUiA9IElu
dmFsaWRHUFJSZWc7Ci0gICAgaWYgKGtpbmQgPT0gR2V0VW5kZWZpbmVkKQotICAgICAgICBzdHVi
Sml0Lm1vdmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgdmFsdWVSZWdzKTsKLSAgICBlbHNl
IGlmIChraW5kICE9IENhbGxDdXN0b21HZXR0ZXIgJiYga2luZCAhPSBDYWxsQ3VzdG9tU2V0dGVy
KSB7Ci0gICAgICAgIGlmIChraW5kID09IEdldFZhbHVlKQotICAgICAgICAgICAgbG9hZGVkVmFs
dWVHUFIgPSB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBsb2FkZWRWYWx1ZUdQUiA9IHNjcmF0Y2hHUFI7Ci0gICAgICAgIAotICAgICAgICBHUFJSZWcg
c3RvcmFnZUdQUjsKLSAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNldCkpCi0gICAgICAg
ICAgICBzdG9yYWdlR1BSID0gYmFzZUZvckFjY2Vzc0dQUjsKLSAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUZvckFj
Y2Vzc0dQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgbG9hZGVkVmFsdWVHUFIpOwot
ICAgICAgICAgICAgc3RvcmFnZUdQUiA9IGxvYWRlZFZhbHVlR1BSOwotICAgICAgICB9Ci0gICAg
ICAgIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHN0dWJKaXQubG9hZDY0KE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKG9mZnNldCkp
LCBsb2FkZWRWYWx1ZUdQUik7Ci0jZWxzZQotICAgICAgICBpZiAoa2luZCA9PSBHZXRWYWx1ZSkK
LSAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKG9mZnNldCkgKyBUYWdPZmZzZXQpLCB2YWx1ZVJl
Z3MudGFnR1BSKCkpOwotICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzdG9yYWdlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShvZmZzZXQpICsgUGF5bG9hZE9m
ZnNldCksIGxvYWRlZFZhbHVlR1BSKTsKLSNlbmRpZgotICAgIH0KLQotICAgIC8vIFN0dWZmIGZv
ciBjdXN0b20gZ2V0dGVycy4KLSAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBvcGVyYXRpb25DYWxs
OwotICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGhhbmRsZXJDYWxsOwotCi0gICAgLy8gU3R1ZmYg
Zm9yIEpTIGdldHRlcnMuCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBhZGRyZXNz
T2ZMaW5rRnVuY3Rpb25DaGVjazsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBmYXN0UGF0aENh
bGw7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgc2xvd1BhdGhDYWxsOwotICAgIHN0ZDo6dW5p
cXVlX3B0cjxDYWxsTGlua0luZm8+IGNhbGxMaW5rSW5mbzsKLQotICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIHN1Y2Nlc3MsIGZhaWw7Ci0gICAgaWYgKGtpbmQgIT0gR2V0VmFsdWUgJiYga2luZCAh
PSBHZXRVbmRlZmluZWQpIHsKLSAgICAgICAgLy8gTmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3aGVu
ZXZlciB0aGlzIGNhbGwgaXMgbWFkZSBpbiB0aGUgZnV0dXJlLCB3ZSByZW1lbWJlciB0aGUKLSAg
ICAgICAgLy8gcGxhY2UgdGhhdCB3ZSBtYWRlIGl0IGZyb20uIEl0IGp1c3Qgc28gaGFwcGVucyB0
byBiZSB0aGUgcGxhY2UgdGhhdCB3ZSBhcmUgYXQKLSAgICAgICAgLy8gcmlnaHQgbm93IQotICAg
ICAgICBzdHViSml0LnN0b3JlMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzdHViSW5m
by5jYWxsU2l0ZUluZGV4LmJpdHMoKSksCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0Zv
cihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7
Ci0KLSAgICAgICAgaWYgKGtpbmQgPT0gQ2FsbEdldHRlciB8fCBraW5kID09IENhbGxTZXR0ZXIp
IHsKLSAgICAgICAgICAgIC8vIENyZWF0ZSBhIEpTIGNhbGwgdXNpbmcgYSBKUyBjYWxsIGlubGlu
ZSBjYWNoZS4gQXNzdW1lIHRoYXQ6Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gLSBT
UCBpcyBhbGlnbmVkIGFuZCByZXByZXNlbnRzIHRoZSBleHRlbnQgb2YgdGhlIGNhbGxpbmcgY29t
cGlsZXIncyBzdGFjayB1c2FnZS4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyAtIEZQ
IGlzIHNldCBjb3JyZWN0bHkgKGkuZS4gaXQgcG9pbnRzIHRvIHRoZSBjYWxsZXIncyBjYWxsIGZy
YW1lIGhlYWRlcikuCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gLSBTUCAtIEZQIGlz
IGFuIGFsaWduZWQgZGlmZmVyZW5jZS4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyAt
IEFueSBieXRlIGJldHdlZW4gRlAgKGV4Y2x1c2l2ZSkgYW5kIFNQIChpbmNsdXNpdmUpIGNvdWxk
IGJlIGxpdmUgaW4gdGhlIGNhbGxpbmcKLSAgICAgICAgICAgIC8vICAgY29kZS4KLSAgICAgICAg
ICAgIC8vCi0gICAgICAgICAgICAvLyBUaGVyZWZvcmUsIHdlIHRlbXBvcmFyaWx5IGdyb3cgdGhl
IHN0YWNrIGZvciB0aGUgcHVycG9zZSBvZiB0aGUgY2FsbCBhbmQgdGhlbgotICAgICAgICAgICAg
Ly8gc2hyaW5rIGl0IGFmdGVyLgotICAgICAgICAgICAgCi0gICAgICAgICAgICBjYWxsTGlua0lu
Zm8gPSBzdGQ6Om1ha2VfdW5pcXVlPENhbGxMaW5rSW5mbz4oKTsKLSAgICAgICAgICAgIGNhbGxM
aW5rSW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgc3R1YkluZm8uY29kZU9yaWdp
biwgbG9hZGVkVmFsdWVHUFIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QgZG9uZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gVGhlcmUg
aXMgYSAndGhpcycgYXJndW1lbnQgYnV0IG5vdGhpbmcgZWxzZS4KLSAgICAgICAgICAgIHVuc2ln
bmVkIG51bWJlck9mUGFyYW1ldGVycyA9IDE7Ci0gICAgICAgICAgICAvLyAuLi4gdW5sZXNzIHdl
J3JlIGNhbGxpbmcgYSBzZXR0ZXIuCi0gICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsU2V0dGVy
KQotICAgICAgICAgICAgICAgIG51bWJlck9mUGFyYW1ldGVycysrOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICAvLyBHZXQgdGhlIGFjY2Vzc29yOyBpZiB0aGVyZSBhaW4ndCBvbmUgdGhlbiB0
aGUgcmVzdWx0IGlzIGpzVW5kZWZpbmVkKCkuCi0gICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxs
U2V0dGVyKSB7Ci0gICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKAotICAgICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhsb2FkZWRWYWx1ZUdQUiwgR2V0dGVyU2V0
dGVyOjpvZmZzZXRPZlNldHRlcigpKSwKLSAgICAgICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVH
UFIpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQ
dHIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGxvYWRlZFZh
bHVlR1BSLCBHZXR0ZXJTZXR0ZXI6Om9mZnNldE9mR2V0dGVyKCkpLAotICAgICAgICAgICAgICAg
ICAgICBsb2FkZWRWYWx1ZUdQUik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCByZXR1cm5VbmRlZmluZWQgPSBzdHViSml0LmJyYW5jaFRlc3RQdHIoCi0g
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGxvYWRlZFZhbHVlR1BSKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZSZWdzRm9yQ2FsbCA9Ci0g
ICAgICAgICAgICAgICAgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIG51bWJlck9mUGFy
YW1ldGVyczsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZCeXRl
c0ZvckNhbGwgPQotICAgICAgICAgICAgICAgIG51bWJlck9mUmVnc0ZvckNhbGwgKiBzaXplb2Yo
UmVnaXN0ZXIpIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICB1bnNpZ25lZCBhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwgPQotICAgICAgICAg
ICAgICAgIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIG51
bWJlck9mQnl0ZXNGb3JDYWxsKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3R1YkppdC5z
dWJQdHIoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihhbGln
bmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwpLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzIGNhbGxlZUZyYW1lID0gTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLAot
ICAgICAgICAgICAgICAgIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFt
ZUFuZFBDKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzdHViSml0LnN0b3JlMzIoCi0g
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihudW1iZXJPZlBhcmFt
ZXRlcnMpLAotICAgICAgICAgICAgICAgIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoCi0gICAgICAg
ICAgICAgICAgICAgIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQgKiBzaXplb2YoUmVnaXN0ZXIpICsg
UGF5bG9hZE9mZnNldCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzdHViSml0LnN0b3Jl
Q2VsbCgKLSAgICAgICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUiwgY2FsbGVlRnJhbWUud2l0aE9m
ZnNldChKU1N0YWNrOjpDYWxsZWUgKiBzaXplb2YoUmVnaXN0ZXIpKSk7Ci0KLSAgICAgICAgICAg
IHN0dWJKaXQuc3RvcmVDZWxsKAotICAgICAgICAgICAgICAgIGJhc2VGb3JHZXRHUFIsCi0gICAg
ICAgICAgICAgICAgY2FsbGVlRnJhbWUud2l0aE9mZnNldCgKLSAgICAgICAgICAgICAgICAgICAg
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIp
KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChraW5kID09IENhbGxTZXR0ZXIpIHsK
LSAgICAgICAgICAgICAgICBzdHViSml0LnN0b3JlVmFsdWUoCi0gICAgICAgICAgICAgICAgICAg
IHZhbHVlUmVncywKLSAgICAgICAgICAgICAgICAgICAgY2FsbGVlRnJhbWUud2l0aE9mZnNldCgK
LSAgICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEpLm9m
ZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93Q2FzZSA9IHN0dWJKaXQuYnJh
bmNoUHRyV2l0aFBhdGNoKAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgbG9hZGVkVmFsdWVHUFIsIGFkZHJlc3NPZkxpbmtGdW5jdGlvbkNoZWNrLAotICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgZmFzdFBhdGhDYWxsID0gc3R1YkppdC5uZWFyQ2FsbCgpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBzdHViSml0LmFkZFB0cigKLSAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2FsbCksCi0gICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAg
ICAgICAgIGlmIChraW5kID09IENhbGxHZXR0ZXIpCi0gICAgICAgICAgICAgICAgc3R1YkppdC5z
ZXR1cFJlc3VsdHModmFsdWVSZWdzKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZG9uZS5h
cHBlbmQoc3R1YkppdC5qdW1wKCkpOwotICAgICAgICAgICAgc2xvd0Nhc2UubGluaygmc3R1Ykpp
dCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN0dWJKaXQubW92ZShsb2FkZWRWYWx1ZUdQ
UiwgR1BSSW5mbzo6cmVnVDApOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgICAgICBz
dHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFn
KSwgR1BSSW5mbzo6cmVnVDEpOwotI2VuZGlmCi0gICAgICAgICAgICBzdHViSml0Lm1vdmUoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvLmdldCgpKSwgR1BSSW5mbzo6
cmVnVDIpOwotICAgICAgICAgICAgc2xvd1BhdGhDYWxsID0gc3R1YkppdC5uZWFyQ2FsbCgpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBzdHViSml0LmFkZFB0cigKLSAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2Fs
bCksCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKLSAgICAgICAgICAgIGlmIChraW5kID09IENhbGxHZXR0ZXIpCi0gICAgICAgICAgICAgICAg
c3R1YkppdC5zZXR1cFJlc3VsdHModmFsdWVSZWdzKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgZG9uZS5hcHBlbmQoc3R1YkppdC5qdW1wKCkpOwotICAgICAgICAgICAgcmV0dXJuVW5kZWZp
bmVkLmxpbmsoJnN0dWJKaXQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoa2luZCA9
PSBDYWxsR2V0dGVyKQotICAgICAgICAgICAgICAgIHN0dWJKaXQubW92ZVRydXN0ZWRWYWx1ZShq
c1VuZGVmaW5lZCgpLCB2YWx1ZVJlZ3MpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBkb25l
LmxpbmsoJnN0dWJKaXQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gZ2V0dGVy
OiBFbmNvZGVkSlNWYWx1ZSAoKkdldFZhbHVlRnVuYykoRXhlY1N0YXRlKiwgSlNPYmplY3QqIHNs
b3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSk7Ci0gICAgICAg
ICAgICAvLyBzZXR0ZXI6IHZvaWQgKCpQdXRWYWx1ZUZ1bmMpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiBiYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSk7
Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIGlmIChraW5kID09IENhbGxDdXN0b21H
ZXR0ZXIpCi0gICAgICAgICAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoYmFzZUZvckFjY2Vzc0dQUiwgYmFzZUZvckdldEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIocHJvcGVydHlOYW1lLmltcGwoKSkpOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VGb3JBY2Nl
c3NHUFIsIGJhc2VGb3JHZXRHUFIsIHZhbHVlUmVncy5ncHIoKSk7Ci0jZWxzZQotICAgICAgICAg
ICAgaWYgKGtpbmQgPT0gQ2FsbEN1c3RvbUdldHRlcikKLSAgICAgICAgICAgICAgICBzdHViSml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlRm9yQWNjZXNzR1BSLCBiYXNlRm9yR2V0
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihwcm9wZXJ0eU5hbWUuaW1wbCgpKSk7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoYmFzZUZvckFjY2Vzc0dQUiwgYmFzZUZvckdldEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgdmFs
dWVSZWdzLnRhZ0dQUigpKTsKLSNlbmRpZgotICAgICAgICAgICAgc3R1YkppdC5zdG9yZVB0cihH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgJnZtLT50b3BDYWxsRnJhbWUpOwotCi0gICAgICAg
ICAgICBvcGVyYXRpb25DYWxsID0gc3R1YkppdC5jYWxsKCk7Ci0gICAgICAgICAgICBpZiAoa2lu
ZCA9PSBDYWxsQ3VzdG9tR2V0dGVyKQotICAgICAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBSZXN1
bHRzKHZhbHVlUmVncyk7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub0V4Y2Vw
dGlvbiA9IHN0dWJKaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKENDYWxsSGVscGVyczo6SW52ZXJ0ZWRF
eGNlcHRpb25DaGVjayk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBB
cmd1bWVudHMoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHZtKSwgR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIpOwotICAgICAgICAgICAgaGFuZGxlckNhbGwgPSBzdHViSml0LmNhbGwoKTsK
LSAgICAgICAgICAgIHN0dWJKaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBub0V4Y2VwdGlvbi5saW5rKCZzdHViSml0KTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICBlbWl0UmVzdG9yZVNjcmF0Y2goc3R1YkppdCwgbmVlZFRvUmVzdG9yZVNjcmF0
Y2gsIHNjcmF0Y2hHUFIsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcyk7Ci0gICAgCi0gICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIHN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygpLCBK
SVRDb21waWxhdGlvbkNhbkZhaWwpOwotICAgIGlmIChwYXRjaEJ1ZmZlci5kaWRGYWlsVG9BbGxv
Y2F0ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgbGlua1Jlc3RvcmVTY3Jh
dGNoKHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc3VjY2VzcywgZmFpbCwgZmFp
bHVyZUNhc2VzLCBzdWNjZXNzTGFiZWwsIHNsb3dDYXNlTGFiZWwpOwotICAgIGlmIChraW5kID09
IENhbGxDdXN0b21HZXR0ZXIgfHwga2luZCA9PSBDYWxsQ3VzdG9tU2V0dGVyKSB7Ci0gICAgICAg
IHBhdGNoQnVmZmVyLmxpbmsob3BlcmF0aW9uQ2FsbCwgY3VzdG9tKTsKLSAgICAgICAgcGF0Y2hC
dWZmZXIubGluayhoYW5kbGVyQ2FsbCwgbG9va3VwRXhjZXB0aW9uSGFuZGxlcik7Ci0gICAgfSBl
bHNlIGlmIChraW5kID09IENhbGxHZXR0ZXIgfHwga2luZCA9PSBDYWxsU2V0dGVyKSB7Ci0gICAg
ICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucyhwYXRjaEJ1ZmZlci5sb2NhdGlvbk9m
TmVhckNhbGwoc2xvd1BhdGhDYWxsKSwKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxvY2F0aW9u
T2YoYWRkcmVzc09mTGlua0Z1bmN0aW9uQ2hlY2spLAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIu
bG9jYXRpb25PZk5lYXJDYWxsKGZhc3RQYXRoQ2FsbCkpOwotCi0gICAgICAgIHBhdGNoQnVmZmVy
LmxpbmsoCi0gICAgICAgICAgICBzbG93UGF0aENhbGwsIENvZGVMb2NhdGlvbkxhYmVsKHZtLT5n
ZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwotICAgIH0KLSAgICAK
LSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZSA9IEZJTkFMSVpFX0NPREVfRk9SKAotICAg
ICAgICBleGVjLT5jb2RlQmxvY2soKSwgcGF0Y2hCdWZmZXIsCi0gICAgICAgICgiJXMgYWNjZXNz
IHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAgICAgdG9TdHJpbmcoa2lu
ZCksIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwKLSAgICAgICAgICAgIHN1
Y2Nlc3NMYWJlbC5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgCi0gICAgaWYgKGtpbmQgPT0g
Q2FsbEdldHRlciB8fCBraW5kID09IENhbGxTZXR0ZXIpCi0gICAgICAgIHN0dWJSb3V0aW5lID0g
YWRvcHRSZWYobmV3IEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lKGNvZGUsICp2bSwgV1RGOjpt
b3ZlKGNhbGxMaW5rSW5mbykpKTsKLSAgICBlbHNlCi0gICAgICAgIHN0dWJSb3V0aW5lID0gY3Jl
YXRlSklUU3R1YlJvdXRpbmUoY29kZSwgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
LCB0cnVlKTsKLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogZW51bSBJbmxpbmVDYWNoZUFj
dGlvbiB7CiAgICAgR2l2ZVVwT25DYWNoZSwKICAgICBSZXRyeUNhY2hlTGF0ZXIsCkBAIC02MTYs
MTMyICsyMzcsOTYgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0QnlJRAog
ICAgIGlmIChPcHRpb25zOjpmb3JjZUlDRmFpbHVyZSgpKQogICAgICAgICByZXR1cm4gR2l2ZVVw
T25DYWNoZTsKICAgICAKLSAgICAvLyBGSVhNRTogV3JpdGUgYSB0ZXN0IHRoYXQgcHJvdmVzIHdl
IG5lZWQgdG8gY2hlY2sgZm9yIHJlY3Vyc2lvbiBoZXJlIGp1c3QKLSAgICAvLyBsaWtlIHRoZSBp
bnRlcnByZXRlciBkb2VzLCB0aGVuIGFkZCBhIGNoZWNrIGZvciByZWN1cnNpb24uCisgICAgLy8g
RklYTUU6IENhY2hlIHByb3BlcnR5IGFjY2VzcyBmb3IgaW1tZWRpYXRlcy4KKyAgICBpZiAoIWJh
c2VWYWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAKICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOwotCi0gICAgaWYgKChpc0pTQXJyYXkoYmFzZVZhbHVlKSB8fCBpc0pTU3RyaW5n
KGJhc2VWYWx1ZSkpICYmIHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVu
Z3RoKSB7Ci0gICAgICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHVi
SW5mby5wYXRjaC5iYXNlR1BSKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBHUFJS
ZWcgcmVzdWx0VGFnR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1
ZVRhZ0dQUik7Ci0jZW5kaWYKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHN0YXRpY19jYXN0
PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVHUFIpOwotCi0gICAgICAgIE1hY3JvQXNzZW1i
bGVyIHN0dWJKaXQ7Ci0KLSAgICAgICAgaWYgKGlzSlNBcnJheShiYXNlVmFsdWUpKSB7Ci0gICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IFRlbXBSZWdpc3RlclNldChzdHViSW5mby5wYXRj
aC51c2VkUmVnaXN0ZXJzKS5nZXRGcmVlR1BSKCk7Ci0gICAgICAgICAgICBib29sIG5lZWRUb1Jl
c3RvcmVTY3JhdGNoID0gZmFsc2U7Ci0KLSAgICAgICAgICAgIGlmIChzY3JhdGNoR1BSID09IElu
dmFsaWRHUFJSZWcpIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgICAgIHNjcmF0
Y2hHUFIgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgcmVzdWx0
R1BSKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgc2NyYXRjaEdQUiA9IEFzc2VtYmx5SGVscGVy
czo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCByZXN1bHRHUFIsIHJlc3VsdFRhZ0dQUik7Ci0j
ZW5kaWYKLSAgICAgICAgICAgICAgICBzdHViSml0LnB1c2hUb1NhdmUoc2NyYXRjaEdQUik7Ci0g
ICAgICAgICAgICAgICAgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSB0cnVlOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzOwot
Ci0gICAgICAgICAgICBzdHViSml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VH
UFIsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAg
ICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJs
ZXI6Olplcm8sIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSXNBcnJh
eSkpKTsKLSAgICAgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2hUZXN0
MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spKSk7Ci0KLSAgICAgICAgICAgIHN0dWJKaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0
KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1Ykpp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHNjcmF0Y2hHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCkpKTsKLQotICAgICAgICAgICAgc3R1YkppdC5tb3ZlKHNj
cmF0Y2hHUFIsIHJlc3VsdEdQUik7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIHN0
dWJKaXQub3I2NChBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW02NChUYWdUeXBlTnVtYmVyKSwg
cmVzdWx0R1BSKTsKLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgICAgICBzdHViSml0
Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCBy
ZXN1bHRUYWdHUFIpOwotI2VuZGlmCi0KLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IHN1Y2Nlc3MsIGZhaWw7Ci0KLSAgICAgICAgICAgIGVtaXRSZXN0b3JlU2NyYXRjaChzdHViSml0
LCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc2NyYXRjaEdQUiwgc3VjY2VzcywgZmFpbCwgZmFpbHVy
ZUNhc2VzKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cigqdm0sIHN0dWJKaXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKLSAgICAg
ICAgICAgIGlmIChwYXRjaEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgICAgICBsaW5rUmVzdG9yZVNjcmF0
Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdHViSW5mbywgc3VjY2Vzcywg
ZmFpbCwgZmFpbHVyZUNhc2VzKTsKLQotICAgICAgICAgICAgc3R1YkluZm8uc3R1YlJvdXRpbmUg
PSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAotICAgICAgICAgICAgICAgIGV4ZWMtPmNvZGVCbG9j
aygpLCBwYXRjaEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAoIkdldEJ5SWQgYXJyYXkgbGVuZ3Ro
IHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAgICAgICAgICAgICB0b0NT
dHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8ucGF0
Y2guZGVsdGFDYWxsVG9Eb25lKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgU2NyaXB0RXhl
Y3V0YWJsZSogb3duZXIgPSBjb2RlQmxvY2stPm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpOworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAKLSAgICAgICAgICAgIHJlcGxhY2VXaXRoSnVtcChzdHVi
SW5mbywgc3R1YkluZm8uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwotICAgICAgICAgICAg
cmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJh
dGlvbkdldEJ5SWQpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBuZXdDYXNlOwog
CisgICAgaWYgKGlzSlNBcnJheShiYXNlVmFsdWUpICYmIHByb3BlcnR5TmFtZSA9PSBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkubGVuZ3RoKQorICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Z2V0
TGVuZ3RoKHZtLCBvd25lciwgQWNjZXNzVHlwZTo6QXJyYXlMZW5ndGgpOworICAgIGVsc2UgaWYg
KGlzSlNTdHJpbmcoYmFzZVZhbHVlKSAmJiBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlO
YW1lcygpLmxlbmd0aCkKKyAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmdldExlbmd0aCh2
bSwgb3duZXIsIEFjY2Vzc1R5cGU6OlN0cmluZ0xlbmd0aCk7CisgICAgZWxzZSB7CisgICAgICAg
IGlmICghc2xvdy5pc0NhY2hlYWJsZSgpICYmICFzbG90LmlzVW5zZXQoKSkKKyAgICAgICAgICAg
IHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAKKyAgICAgICAgSlNDZWxsKiBiYXNlQ2Vs
bCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBi
YXNlQ2VsbC0+c3RydWN0dXJlKHZtKTsKKyAgICAgICAgCisgICAgICAgIC8vIE9wdGltaXplIHNl
bGYgYWNjZXNzLgorICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlID09IENhY2hlVHlwZTo6
VW5zZXQKKyAgICAgICAgICAgICYmIHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpCisgICAgICAgICAg
ICAmJiBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlCisgICAgICAgICAgICAmJiAhc2xvdC53
YXRjaHBvaW50U2V0KCkKKyAgICAgICAgICAgICYmIE1hY3JvQXNzZW1ibGVyOjppc0NvbXBhY3RQ
dHJBbGlnbmVkQWRkcmVzc09mZnNldChtYXhPZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uo
c2xvdC5jYWNoZWRPZmZzZXQoKSkpCisgICAgICAgICAgICAmJiBhY3Rpb25Gb3JDZWxsKHZtLCBi
YXNlQ2VsbCkgPT0gQXR0ZW1wdFRvQ2FjaGUpIHsKKyAgICAgICAgICAgIHN0cnVjdHVyZS0+c3Rh
cnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKCp2bSwgc2xvdC5jYWNoZWRPZmZzZXQo
KSk7CisgICAgICAgICAgICByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoKnZtLCBjb2RlQmxvY2ssIHN0
dWJJbmZvLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgb3Bl
cmF0aW9uR2V0QnlJZEJ1aWxkTGlzdCwgdHJ1ZSk7CisgICAgICAgICAgICBzdHViSW5mby5pbml0
R2V0QnlJZFNlbGYoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUp
OwogICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKICAgICAgICAgfQogCi0gICAg
ICAgIC8vIFN0cmluZy5sZW5ndGggY2FzZQotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBm
YWlsdXJlID0gc3R1YkppdC5icmFuY2g4KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSks
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoU3RyaW5nVHlwZSkpOwotCi0gICAgICAgIHN0
dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTU3RyaW5nOjpv
ZmZzZXRPZkxlbmd0aCgpKSwgcmVzdWx0R1BSKTsKLQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
ICAgIHN0dWJKaXQub3I2NChBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW02NChUYWdUeXBlTnVt
YmVyKSwgcmVzdWx0R1BSKTsKLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIHN0dWJK
aXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyks
IHJlc3VsdFRhZ0dQUik7Ci0jZW5kaWYKKyAgICAgICAgYm9vbCBsb2FkVGFyZ2V0RnJvbVByb3h5
ID0gZmFsc2U7CisgICAgICAgIGlmIChiYXNlQ2VsbC0+dHlwZSgpID09IFB1cmVGb3J3YXJkaW5n
UHJveHlUeXBlKSB7CisgICAgICAgICAgICBiYXNlVmFsdWUgPSBqc0Nhc3Q8SlNQcm94eSo+KGJh
c2VDZWxsKS0+dGFyZ2V0KCk7CisgICAgICAgICAgICBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0Nl
bGwoKTsKKyAgICAgICAgICAgIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUodm0pOwor
ICAgICAgICAgICAgbG9hZFRhcmdldEZyb21Qcm94eSA9IHRydWU7CisgICAgICAgIH0KIAotICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7CisgICAg
ICAgIElubGluZUNhY2hlQWN0aW9uIGFjdGlvbiA9IGFjdGlvbkZvckNlbGwodm0sIGJhc2VDZWxs
KTsKKyAgICAgICAgaWYgKGFjdGlvbiAhPSBBdHRlbXB0VG9DYWNoZSkKKyAgICAgICAgICAgIHJl
dHVybiBhY3Rpb247CiAKLSAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIHN0dWJK
aXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKLSAgICAgICAgaWYgKHBhdGNo
QnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpCi0gICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25D
YWNoZTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc2xvdC5pc1Vuc2V0KCkgPyBp
bnZhbGlkT2Zmc2V0IDogc2xvdC5jYWNoZWRPZmZzZXQoKTsKICAgICAgICAgCi0gICAgICAgIHBh
dGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVs
QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSk7Ci0gICAgICAgIHBhdGNo
QnVmZmVyLmxpbmsoZmFpbHVyZSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRP
ZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwotCi0gICAgICAgIHN0
dWJJbmZvLnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKLSAgICAgICAgICAg
IGV4ZWMtPmNvZGVCbG9jaygpLCBwYXRjaEJ1ZmZlciwKLSAgICAgICAgICAgICgiR2V0QnlJZCBz
dHJpbmcgbGVuZ3RoIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAgICAg
ICAgIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAgICAgICAgICAgIHN0dWJJbmZv
LnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgICAgICBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CisgICAgICAgIGlmIChzbG90
LmlzVW5zZXQoKSB8fCBzbG90LnNsb3RCYXNlKCkgIT0gYmFzZVZhbHVlKSB7CisgICAgICAgICAg
ICBpZiAodHlwZUluZm8ucHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCkgfHwgc3RydWN0dXJlLT5p
c0RpY3Rpb25hcnkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHNsb3QuaXNVbnNldCgpKSB7CisgICAgICAgICAg
ICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNzKAor
ICAgICAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4
ZWMsIHN0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBl
UHJvcGVydHlIaXQoCisgICAgICAgICAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCksIGlkZW50LmltcGwo
KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghY29uZGl0
aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgb2Zmc2V0ID0gc2xvdC5pc1Vuc2V0KCkgPyBpbnZh
bGlkT2Zmc2V0IDogY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCk7Cisg
ICAgICAgIH0KIAotICAgICAgICByZXBsYWNlV2l0aEp1bXAoc3R1YkluZm8sIHN0dWJJbmZvLnN0
dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKLSAgICAgICAgcmVwYXRjaENhbGwoY29kZUJsb2Nr
LCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWQpOworICAgICAg
ICBBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBlIHR5cGU7CisgICAgICAgIGlmIChzbG90LmlzQ2FjaGVh
YmxlVmFsdWUoKSkKKyAgICAgICAgICAgIHR5cGUgPSBBY2Nlc3NDYXNlOjpMb2FkOworICAgICAg
ICBlbHNlIGlmIChzbG90LnVzVW5zZXQoKSkKKyAgICAgICAgICAgIHR5cGUgPSBBY2Nlc3NDYXNl
OjpNaXNzOworICAgICAgICBlbHNlIGlmIChzbG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkpCisgICAg
ICAgICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6R2V0dGVyOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6Q3VzdG9tR2V0dGVyOwogCi0gICAgICAgIHJldHVybiBS
ZXRyeUNhY2hlTGF0ZXI7CisgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpnZXQoCisgICAg
ICAgICAgICB2bSwgb3duZXIsIHR5cGUsIG9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQs
IGxvYWRUYXJnZXRGcm9tUHJveHksCisgICAgICAgICAgICBzbG90LndhdGNocG9pbnRTZXQoKSwg
c2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpID8gc2xvdC5jdXN0b21HZXR0ZXIoKSA6IG51bGxwdHIp
OwogICAgIH0KIAotICAgIC8vIEZJWE1FOiBDYWNoZSBwcm9wZXJ0eSBhY2Nlc3MgZm9yIGltbWVk
aWF0ZXMuCi0gICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCi0gICAgICAgIHJldHVybiBHaXZl
VXBPbkNhY2hlOwotCi0gICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkgJiYgIXNsb3QuaXNVbnNl
dCgpKQorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyID0gc3R1YkluZm8uYWRkQWNj
ZXNzQ2FzZSgKKyAgICAgICAgdm0sIGNvZGVCbG9jaywgcHJvcGVydHlOYW1lLCBzdGQ6Om1vdmUo
bmV3Q2FzZSkpOworICAgIAorICAgIGlmICghY29kZVB0cikKICAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7CiAKLSAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwot
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSgqdm0pOwotCi0g
ICAgSW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9uID0gYWN0aW9uRm9yQ2VsbCgqdm0sIGJhc2VDZWxs
KTsKLSAgICBpZiAoYWN0aW9uICE9IEF0dGVtcHRUb0NhY2hlKQotICAgICAgICByZXR1cm4gYWN0
aW9uOwotCi0gICAgLy8gT3B0aW1pemUgc2VsZiBhY2Nlc3MuCi0gICAgaWYgKHNsb3QuaXNDYWNo
ZWFibGVWYWx1ZSgpCi0gICAgICAgICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUKLSAg
ICAgICAgJiYgIXNsb3Qud2F0Y2hwb2ludFNldCgpCi0gICAgICAgICYmIE1hY3JvQXNzZW1ibGVy
Ojppc0NvbXBhY3RQdHJBbGlnbmVkQWRkcmVzc09mZnNldChtYXhPZmZzZXRSZWxhdGl2ZVRvUGF0
Y2hlZFN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpKSB7Ci0gICAgICAgIHN0cnVjdHVyZS0+
c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKCp2bSwgc2xvdC5jYWNoZWRPZmZz
ZXQoKSk7Ci0gICAgICAgIHJlcGF0Y2hCeUlkU2VsZkFjY2Vzcygqdm0sIGNvZGVCbG9jaywgc3R1
YkluZm8sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LmNhY2hlZE9mZnNldCgpLCBvcGVy
YXRpb25HZXRCeUlkQnVpbGRMaXN0LCB0cnVlKTsKLSAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5
SWRTZWxmKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKLSAg
ICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLSAgICB9Ci0KLSAgICByZXBhdGNoQ2FsbChj
b2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZEJ1
aWxkTGlzdCk7CisgICAgcmVwbGFjZVdpdGhKdW1wKHN0dWJJbmZvLCBjb2RlUHRyKTsKKyAgICAK
ICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogfQogCkBAIC03NTMsMTEyICszMzgsNiBAQCB2
b2lkIHJlcGF0Y2hHZXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWCiAgICAgICAgIHJlcGF0Y2hD
YWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJh
dGlvbkdldEJ5SWQpOwogfQogCi1zdGF0aWMgdm9pZCBwYXRjaEp1bXBUb0dldEJ5SWRTdHViKFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSklUU3R1YlJvdXRpbmUqIHN0dWJSb3V0aW5lKQot
ewotICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9i
eV9pZF9saXN0KTsKLSAgICBpZiAoc3R1YkluZm8udS5nZXRCeUlkTGlzdC5saXN0LT5kaWRTZWxm
UGF0Y2hpbmcoKSkgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoCi0gICAg
ICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KAotICAgICAg
ICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksCi0gICAgICAgICAgICBD
b2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIAotICAgIHJlcGxhY2VXaXRoSnVtcChzdHViSW5mbywgc3R1YlJv
dXRpbmUtPmNvZGUoKS5jb2RlKCkpOwotfQotCi1zdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5
QnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25z
dCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkKLSAgICAg
ICAgfHwgKCFzbG90LmlzQ2FjaGVhYmxlKCkgJiYgIXNsb3QuaXNVbnNldCgpKSkKLSAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVl
LmFzQ2VsbCgpOwotICAgIGJvb2wgbG9hZFRhcmdldEZyb21Qcm94eSA9IGZhbHNlOwotICAgIGlm
IChiYXNlQ2VsbC0+dHlwZSgpID09IFB1cmVGb3J3YXJkaW5nUHJveHlUeXBlKSB7Ci0gICAgICAg
IGJhc2VWYWx1ZSA9IGpzQ2FzdDxKU1Byb3h5Kj4oYmFzZUNlbGwpLT50YXJnZXQoKTsKLSAgICAg
ICAgYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7Ci0gICAgICAgIGxvYWRUYXJnZXRGcm9t
UHJveHkgPSB0cnVlOwotICAgIH0KLQotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0KLSAgICBJbmxpbmVDYWNo
ZUFjdGlvbiBhY3Rpb24gPSBhY3Rpb25Gb3JDZWxsKCp2bSwgYmFzZUNlbGwpOwotICAgIGlmIChh
Y3Rpb24gIT0gQXR0ZW1wdFRvQ2FjaGUpCi0gICAgICAgIHJldHVybiBhY3Rpb247Ci0KLSAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKnZtKTsKLSAgICBUeXBl
SW5mbyB0eXBlSW5mbyA9IHN0cnVjdHVyZS0+dHlwZUluZm8oKTsKLQotICAgIGlmIChzdHViSW5m
by5wYXRjaC5zcGlsbE1vZGUgPT0gTmVlZFRvU3BpbGwpIHsKLSAgICAgICAgLy8gV2UgY2Fubm90
IGRvIGFzIG11Y2ggaW5saW5lIGNhY2hpbmcgaWYgdGhlIHJlZ2lzdGVycyB3ZXJlIG5vdCBmbHVz
aGVkIHByaW9yIHRvIHRoaXMgR2V0QnlJZC4gSW4gcGFydGljdWxhciwKLSAgICAgICAgLy8gbm9u
LVZhbHVlIGNhY2hlZCBwcm9wZXJ0aWVzIHJlcXVpcmUgcGxhbnRpbmcgY2FsbHMsIHdoaWNoIHJl
cXVpcmVzIHJlZ2lzdGVycyB0byBoYXZlIGJlZW4gZmx1c2hlZC4gVGh1cywKLSAgICAgICAgLy8g
aWYgcmVnaXN0ZXJzIHdlcmUgbm90IGZsdXNoZWQsIGRvbid0IGRvIG5vbi1WYWx1ZSBjYWNoaW5n
LgotICAgICAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpICYmICFzbG90LmlzVW5zZXQo
KSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgIH0KLQotICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuaXNVbnNldCgpID8gaW52YWxpZE9mZnNldCA6IHNsb3Qu
Y2FjaGVkT2Zmc2V0KCk7Ci0gICAgCi0gICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29u
ZGl0aW9uU2V0OwotICAgIGlmIChzbG90LmlzVW5zZXQoKSB8fCBzbG90LnNsb3RCYXNlKCkgIT0g
YmFzZVZhbHVlKSB7Ci0gICAgICAgIGlmICh0eXBlSW5mby5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hp
bmcoKSB8fCBzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgcmV0dXJuIEdp
dmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgaWYgKHNsb3QuaXNVbnNldCgpKQotICAgICAgICAgICAg
Y29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNzKCp2bSwgY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBpZGVudC5pbXBsKCkp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRp
dGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudC5pbXBsKCkpOwot
Ci0gICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgIG9mZnNldCA9IHNsb3QuaXNVbnNldCgpID8gaW52
YWxpZE9mZnNldCA6IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpOwot
ICAgIH0KLSAgICAKLSAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0ID0gUG9seW1vcnBo
aWNHZXRCeUlkTGlzdDo6ZnJvbShzdHViSW5mbyk7Ci0gICAgaWYgKGxpc3QtPmlzRnVsbCgpKSB7
Ci0gICAgICAgIC8vIFdlIG5lZWQgdGhpcyBleHRyYSBjaGVjayBiZWNhdXNlIG9mIHJlY3Vyc2lv
bi4KLSAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgfQotICAgIAotICAgIFJlZlB0
cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7Ci0gICAgYm9vbCByZXN1bHQgPSBnZW5lcmF0
ZUJ5SWRTdHViKAotICAgICAgICBleGVjLCBraW5kRm9yKHNsb3QpLCBpZGVudCwgY3VzdG9tRm9y
KHNsb3QpLCBzdHViSW5mbywgY29uZGl0aW9uU2V0LCBzbG90LnNsb3RCYXNlKCksIG9mZnNldCwg
Ci0gICAgICAgIHN0cnVjdHVyZSwgbG9hZFRhcmdldEZyb21Qcm94eSwgc2xvdC53YXRjaHBvaW50
U2V0KCksIAotICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNl
dChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLAotICAgICAgICBDb2RlTG9jYXRpb25M
YWJlbChsaXN0LT5jdXJyZW50U2xvd1BhdGhUYXJnZXQoc3R1YkluZm8pKSwgc3R1YlJvdXRpbmUp
OwotICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAK
LSAgICBHZXRCeUlkQWNjZXNzOjpBY2Nlc3NUeXBlIGFjY2Vzc1R5cGU7Ci0gICAgaWYgKHNsb3Qu
aXNDYWNoZWFibGVWYWx1ZSgpKQotICAgICAgICBhY2Nlc3NUeXBlID0gc2xvdC53YXRjaHBvaW50
U2V0KCkgPyBHZXRCeUlkQWNjZXNzOjpXYXRjaGVkU3R1YiA6IEdldEJ5SWRBY2Nlc3M6OlNpbXBs
ZVN0dWI7Ci0gICAgZWxzZSBpZiAoc2xvdC5pc1Vuc2V0KCkpCi0gICAgICAgIGFjY2Vzc1R5cGUg
PSBHZXRCeUlkQWNjZXNzOjpTaW1wbGVNaXNzOwotICAgIGVsc2UgaWYgKHNsb3QuaXNDYWNoZWFi
bGVHZXR0ZXIoKSkKLSAgICAgICAgYWNjZXNzVHlwZSA9IEdldEJ5SWRBY2Nlc3M6OkdldHRlcjsK
LSAgICBlbHNlCi0gICAgICAgIGFjY2Vzc1R5cGUgPSBHZXRCeUlkQWNjZXNzOjpDdXN0b21HZXR0
ZXI7Ci0gICAgCi0gICAgbGlzdC0+YWRkQWNjZXNzKEdldEJ5SWRBY2Nlc3MoCi0gICAgICAgICp2
bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgYWNjZXNzVHlwZSwgc3R1YlJvdXRpbmUs
IHN0cnVjdHVyZSwKLSAgICAgICAgY29uZGl0aW9uU2V0KSk7Ci0gICAgCi0gICAgcGF0Y2hKdW1w
VG9HZXRCeUlkU3R1YihzdHViSW5mbywgc3R1YlJvdXRpbmUuZ2V0KCkpOwotICAgIAotICAgIHJl
dHVybiBsaXN0LT5pc0Z1bGwoKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7Ci19
Ci0KLXZvaWQgYnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZh
bHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYg
c2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIEdDU2FmZUNvbmN1cnJl
bnRKSVRMb2NrZXIgbG9ja2VyKGV4ZWMtPmNvZGVCbG9jaygpLT5tX2xvY2ssIGV4ZWMtPnZtKCku
aGVhcCk7Ci0gICAgCi0gICAgaWYgKHRyeUJ1aWxkR2V0QnlJRExpc3QoZXhlYywgYmFzZVZhbHVl
LCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvKSA9PSBHaXZlVXBPbkNhY2hlKQotICAgICAg
ICByZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLCBvcGVyYXRpb25HZXRCeUlkKTsKLX0KLQogc3RhdGljIFZfSklUT3BlcmF0aW9uX0VTc2lK
SkkgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5U2xv
dCAmc2xvdCwgUHV0S2luZCBwdXRLaW5kKQogewogICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgp
KSB7CkBAIC04ODMsMzU2ICszNjIsMTQgQEAgc3RhdGljIFZfSklUT3BlcmF0aW9uX0VTc2lKSkkg
YXBwcm9wcmlhdAogICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0QnVpbGRMaXN0
OwogfQogCi1zdGF0aWMgYm9vbCBlbWl0UHV0UmVwbGFjZVN0dWIoCi0gICAgRXhlY1N0YXRlKiBl
eGVjLAotICAgIGNvbnN0IElkZW50aWZpZXImLAotICAgIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYg
c2xvdCwKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCi0gICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZmFpbHVyZUxhYmVsLAotICAgIFJlZlB0
cjxKSVRTdHViUm91dGluZT4mIHN0dWJSb3V0aW5lKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOwotICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5w
YXRjaC5iYXNlR1BSKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIEdQUlJlZyB2YWx1ZVRh
Z0dQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVUYWdHUFIpOwot
I2VuZGlmCi0gICAgR1BSUmVnIHZhbHVlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5m
by5wYXRjaC52YWx1ZUdQUik7Ci0KLSAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2Nh
dG9yKHN0dWJJbmZvLnBhdGNoLnVzZWRSZWdpc3RlcnMpOwotICAgIGFsbG9jYXRvci5sb2NrKGJh
c2VHUFIpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgYWxsb2NhdG9yLmxvY2sodmFsdWVU
YWdHUFIpOwotI2VuZGlmCi0gICAgYWxsb2NhdG9yLmxvY2sodmFsdWVHUFIpOwotICAgIAotICAg
IEdQUlJlZyBzY3JhdGNoR1BSMSA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKLQot
ICAgIENDYWxsSGVscGVycyBzdHViSml0KHZtLCBleGVjLT5jb2RlQmxvY2soKSk7Ci0KLSAgICBz
aXplX3QgbnVtYmVyT2ZQYWRkaW5nQnl0ZXMgPSBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdp
c3RlcnNCeVB1c2hpbmcoc3R1YkppdCk7Ci0KLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiYWRT
dHJ1Y3R1cmUgPSBzdHViSml0LmJyYW5jaFN0cnVjdHVyZSgKLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAotICAgICAgICBzdHJ1Y3R1cmUpOwotCi0jaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQo
KSkpCi0gICAgICAgIHN0dWJKaXQuc3RvcmU2NCh2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0
SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7
Ci0gICAgZWxzZSB7Ci0gICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMSk7
Ci0gICAgICAgIHN0dWJKaXQuc3RvcmU2NCh2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc2NyYXRjaEdQUjEsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICog
c2l6ZW9mKEpTVmFsdWUpKSk7Ci0gICAgfQotI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBp
ZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpIHsKLSAgICAgICAgc3R1Ykpp
dC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09i
amVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xv
dC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5j
b2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7Ci0gICAgICAgIHN0dWJKaXQu
c3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNP
YmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNs
b3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVu
Y29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgc3R1YkppdC5z
dG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zm
c2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBP
QkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7
Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkp
ICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IsIGFzQml0cy50YWcpKSk7Ci0gICAgfQotI2VuZGlmCi0gICAgCi0gICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgc3VjY2VzczsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsdXJlOwotICAg
IAotICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMoKSkgewotICAgICAgICBhbGxv
Y2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhzdHViSml0LCBudW1iZXJPZlBh
ZGRpbmdCeXRlcyk7Ci0gICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKLSAgICAgICAg
Ci0gICAgICAgIGJhZFN0cnVjdHVyZS5saW5rKCZzdHViSml0KTsKLSAgICAgICAgYWxsb2NhdG9y
LnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoc3R1YkppdCwgbnVtYmVyT2ZQYWRkaW5n
Qnl0ZXMpOwotICAgICAgICBmYWlsdXJlID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOwotICAgICAgICBmYWlsdXJlID0gYmFk
U3RydWN0dXJlOwotICAgIH0KLSAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwg
c3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCksIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7Ci0gICAg
aWYgKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSkp
OwotICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZSwgZmFpbHVyZUxhYmVsKTsKLSAgICAgICAg
ICAgIAotICAgIHN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKLSAgICAgICAg
ZXhlYy0+Y29kZUJsb2NrKCksIHBhdGNoQnVmZmVyLAotICAgICAgICAoIlB1dEJ5SWQgcmVwbGFj
ZSBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAgICAgICAgIHRvQ1N0cmluZygq
ZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxh
YmVsQXRPZmZzZXQoCi0gICAgICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9E
b25lKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LXN0YXRpYyBib29sIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKLSAgICBFeGVjU3RhdGUqIGV4ZWMs
IFZNKiB2bSwgU3RydWN0dXJlKiYgc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwg
Ci0gICAgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8sIFB1dEtpbmQgcHV0S2luZCwKLSAgICBTdHJ1Y3R1cmUqJiBvbGRTdHJ1Y3R1cmUsIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCi17Ci0gICAgUHJvcGVydHlO
YW1lIHBuYW1lKGlkZW50KTsKLSAgICBvbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAgaWYg
KCFvbGRTdHJ1Y3R1cmUtPmlzT2JqZWN0KCkgfHwgb2xkU3RydWN0dXJlLT5pc0RpY3Rpb25hcnko
KSB8fCBwYXJzZUluZGV4KHBuYW1lKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUHJv
cGVydHlPZmZzZXQgcHJvcGVydHlPZmZzZXQ7Ci0gICAgc3RydWN0dXJlID0gU3RydWN0dXJlOjph
ZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KG9sZFN0
cnVjdHVyZSwgaWRlbnQuaW1wbCgpLCAwLCBwcm9wZXJ0eU9mZnNldCk7Ci0KLSAgICBpZiAoIXN0
cnVjdHVyZSB8fCAhc3RydWN0dXJlLT5pc09iamVjdCgpIHx8IHN0cnVjdHVyZS0+aXNEaWN0aW9u
YXJ5KCkgfHwgIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBTa2lwIG9wdGltaXppbmcgdGhlIGNhc2Ugd2hl
cmUgd2UgbmVlZCBhIHJlYWxsb2MsIGlmIHdlIGRvbid0IGhhdmUKLSAgICAvLyBlbm91Z2ggcmVn
aXN0ZXJzIHRvIG1ha2UgaXQgaGFwcGVuLgotICAgIGlmIChHUFJJbmZvOjpudW1iZXJPZlJlZ2lz
dGVycyA8IDYKLSAgICAgICAgJiYgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9
IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKQotICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUt
Pm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIHJlYWxsb2MsIGFu
ZCB0aGUgc3RydWN0dXJlIGhhcwotICAgIC8vIGluZGV4aW5nIHN0b3JhZ2UuCi0gICAgLy8gRklY
TUU6IFdlIHNob3VsZG4ndCBza2lwIHRoaXMhIEltcGxlbWVudCBpdCEKLSAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMwOTE0Ci0gICAgaWYgKG9sZFN0cnVj
dHVyZS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgaWYgKHB1dEtpbmQgPT0gTm90RGlyZWN0KSB7Ci0gICAgICAgIGNvbmRpdGlvblNldCA9
IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzcygKLSAgICAgICAgICAgICp2
bSwgZXhlYy0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUs
IGlkZW50LmltcGwoKSk7Ci0gICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBm
YWlsdXJlTGFiZWwgPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChz
dHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKLSAgICBSZWZQdHI8SklUU3R1YlJv
dXRpbmU+JiBzdHViUm91dGluZSA9IHN0dWJJbmZvLnN0dWJSb3V0aW5lOwotCi0gICAgR1BSUmVn
IGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmJhc2VHUFIpOwot
I2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgR1BSUmVnIHZhbHVlVGFnR1BSID0gc3RhdGljX2Nh
c3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZVRhZ0dQUik7Ci0jZW5kaWYKLSAgICBHUFJS
ZWcgdmFsdWVHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVlR1BS
KTsKLSAgICAKLSAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHN0dWJJbmZv
LnBhdGNoLnVzZWRSZWdpc3RlcnMpOwotICAgIGFsbG9jYXRvci5sb2NrKGJhc2VHUFIpOwotI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgYWxsb2NhdG9yLmxvY2sodmFsdWVUYWdHUFIpOwotI2Vu
ZGlmCi0gICAgYWxsb2NhdG9yLmxvY2sodmFsdWVHUFIpOwotICAgIAotICAgIENDYWxsSGVscGVy
cyBzdHViSml0KHZtKTsKLSAgICAKLSAgICBib29sIG5lZWRUaGlyZFNjcmF0Y2ggPSBmYWxzZTsK
LSAgICBpZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKQotICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNh
cGFjaXR5KCkpIHsKLSAgICAgICAgbmVlZFRoaXJkU2NyYXRjaCA9IHRydWU7Ci0gICAgfQotCi0g
ICAgR1BSUmVnIHNjcmF0Y2hHUFIxID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwot
ICAgIEFTU0VSVChzY3JhdGNoR1BSMSAhPSBiYXNlR1BSKTsKLSAgICBBU1NFUlQoc2NyYXRjaEdQ
UjEgIT0gdmFsdWVHUFIpOwotICAgIAotICAgIEdQUlJlZyBzY3JhdGNoR1BSMiA9IGFsbG9jYXRv
ci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKLSAgICBBU1NFUlQoc2NyYXRjaEdQUjIgIT0gYmFzZUdQ
Uik7Ci0gICAgQVNTRVJUKHNjcmF0Y2hHUFIyICE9IHZhbHVlR1BSKTsKLSAgICBBU1NFUlQoc2Ny
YXRjaEdQUjIgIT0gc2NyYXRjaEdQUjEpOwotCi0gICAgR1BSUmVnIHNjcmF0Y2hHUFIzOwotICAg
IGlmIChuZWVkVGhpcmRTY3JhdGNoKSB7Ci0gICAgICAgIHNjcmF0Y2hHUFIzID0gYWxsb2NhdG9y
LmFsbG9jYXRlU2NyYXRjaEdQUigpOwotICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjMgIT0gYmFz
ZUdQUik7Ci0gICAgICAgIEFTU0VSVChzY3JhdGNoR1BSMyAhPSB2YWx1ZUdQUik7Ci0gICAgICAg
IEFTU0VSVChzY3JhdGNoR1BSMyAhPSBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIEFTU0VSVChzY3Jh
dGNoR1BSMyAhPSBzY3JhdGNoR1BSMik7Ci0gICAgfSBlbHNlCi0gICAgICAgIHNjcmF0Y2hHUFIz
ID0gSW52YWxpZEdQUlJlZzsKLSAgICAKLSAgICBzaXplX3QgbnVtYmVyT2ZQYWRkaW5nQnl0ZXMg
PSBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoc3R1YkppdCk7Ci0K
LSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzOwotICAgICAgICAgICAg
Ci0gICAgQVNTRVJUKG9sZFN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVu
SW52YWxpZGF0ZWQoKSk7Ci0gICAgCi0gICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJy
YW5jaFN0cnVjdHVyZSgKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCAKLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgCi0gICAgICAgIG9sZFN0cnVjdHVyZSkpOwotICAgIAotICAgIGNoZWNrT2JqZWN0
UHJvcGVydHlDb25kaXRpb25zKAotICAgICAgICBjb25kaXRpb25TZXQsIGV4ZWMtPmNvZGVCbG9j
aygpLCBzdHViSW5mbywgc3R1YkppdCwgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSMSk7Ci0KLSAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7Ci0gICAgCi0gICAgYm9vbCBzY3Jh
dGNoR1BSMUhhc1N0b3JhZ2UgPSBmYWxzZTsKLSAgICAKLSAgICBpZiAoc3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewot
ICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAq
IHNpemVvZihKU1ZhbHVlKTsKLSAgICAgICAgQ29waWVkQWxsb2NhdG9yKiBjb3BpZWRBbGxvY2F0
b3IgPSAmdm0tPmhlYXAuc3RvcmFnZUFsbG9jYXRvcigpOwotICAgICAgICAKLSAgICAgICAgaWYg
KCFvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgICAgIHN0dWJK
aXQubG9hZFB0cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hH
UFIxKTsKLSAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChzdHViSml0LmJyYW5jaFN1YlB0cihN
YWNyb0Fzc2VtYmxlcjo6U2lnbmVkLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG5ld1Np
emUpLCBzY3JhdGNoR1BSMSkpOwotICAgICAgICAgICAgc3R1YkppdC5zdG9yZVB0cihzY3JhdGNo
R1BSMSwgJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKLSAgICAgICAgICAg
IHN0dWJKaXQubmVnUHRyKHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAgIHN0dWJKaXQuYWRkUHRy
KE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJy
ZW50UGF5bG9hZEVuZCksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAgIHN0dWJKaXQuYWRkUHRy
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEpTVmFsdWUpKSwgc2NyYXRjaEdQ
UjEpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBvbGRT
dHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7Ci0gICAgICAg
ICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUjMpOwotICAgICAgICAgICAgc3R1Ykpp
dC5sb2FkUHRyKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZywgc2NyYXRjaEdQ
UjEpOwotICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKHN0dWJKaXQuYnJhbmNoU3ViUHRyKE1h
Y3JvQXNzZW1ibGVyOjpTaWduZWQsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobmV3U2l6
ZSksIHNjcmF0Y2hHUFIxKSk7Ci0gICAgICAgICAgICBzdHViSml0LnN0b3JlUHRyKHNjcmF0Y2hH
UFIxLCAmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcpOwotICAgICAgICAgICAg
c3R1YkppdC5uZWdQdHIoc2NyYXRjaEdQUjEpOwotICAgICAgICAgICAgc3R1YkppdC5hZGRQdHIo
TWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcygmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJl
bnRQYXlsb2FkRW5kKSwgc2NyYXRjaEdQUjEpOwotICAgICAgICAgICAgc3R1YkppdC5hZGRQdHIo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BS
MSk7Ci0gICAgICAgICAgICAvLyBXZSBoYXZlIHNjcmF0Y2hHUFIxID0gbmV3IHN0b3JhZ2UsIHNj
cmF0Y2hHUFIzID0gb2xkIHN0b3JhZ2UsIHNjcmF0Y2hHUFIyID0gYXZhaWxhYmxlCi0gICAgICAg
ICAgICBmb3IgKHNpemVfdCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBvbGRTaXplOyBvZmZzZXQgKz0g
c2l6ZW9mKHZvaWQqKSkgewotICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMywgLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4ob2Zm
c2V0ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpLCBzY3JhdGNoR1BSMik7Ci0g
ICAgICAgICAgICAgICAgc3R1YkppdC5zdG9yZVB0cihzY3JhdGNoR1BSMiwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9mZnNldCAr
IHNpemVvZihKU1ZhbHVlKSArIHNpemVvZih2b2lkKikpKSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIHN0dWJKaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjEsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSkpOwotICAgICAgICBzY3JhdGNoR1BSMUhhc1N0b3JhZ2UgPSB0cnVlOwotICAgIH0KLQotICAg
IEFTU0VSVChvbGRTdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpID09IHN0cnVjdHVyZS0+dHlw
ZUluZm8oKS50eXBlKCkpOwotICAgIEFTU0VSVChvbGRTdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaW5s
aW5lVHlwZUZsYWdzKCkgPT0gc3RydWN0dXJlLT50eXBlSW5mbygpLmlubGluZVR5cGVGbGFncygp
KTsKLSAgICBBU1NFUlQob2xkU3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSA9PSBzdHJ1Y3R1cmUt
PmluZGV4aW5nVHlwZSgpKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHVpbnQzMl90IHZhbCA9
IHN0cnVjdHVyZS0+aWQoKTsKLSNlbHNlCi0gICAgdWludDMyX3QgdmFsID0gcmVpbnRlcnByZXRf
Y2FzdDx1aW50MzJfdD4oc3RydWN0dXJlLT5pZCgpKTsKLSNlbmRpZgotICAgIHN0dWJKaXQuc3Rv
cmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHZhbCksIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSkpOwotI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKQot
ICAgICAgICBzdHViSml0LnN0b3JlNjQodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5s
aW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOwotICAg
IGVsc2UgewotICAgICAgICBpZiAoIXNjcmF0Y2hHUFIxSGFzU3RvcmFnZSkKLSAgICAgICAgICAg
IHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIHN0dWJKaXQuc3Rv
cmU2NCh2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNl
dEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7Ci0g
ICAgfQotI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xv
dC5jYWNoZWRPZmZzZXQoKSkpIHsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVT
dG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBz
aXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwg
YXNCaXRzLnBheWxvYWQpKSk7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5l
U3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICog
c2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3Is
IGFzQml0cy50YWcpKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFzY3JhdGNoR1BSMUhh
c1N0b3JhZ2UpCi0gICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUjEp
OwotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAq
IHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9y
LCBhc0JpdHMucGF5bG9hZCkpKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5CdXR0ZXJmbHko
c2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
RW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKLSAgICB9Ci0jZW5kaWYKLSAg
ICAKLSAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gbnVsbHB0cjsKLQotI2lmIEVO
QUJMRShHR0MpCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbEZsdXNoV3JpdGVCYXJyaWVy
QnVmZmVyOwotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVk
ZW4gPSBzdHViSml0Lmp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKGJhc2VHUFIpOwotICAgIHsK
LSAgICAgICAgV3JpdGVCYXJyaWVyQnVmZmVyJiB3cml0ZUJhcnJpZXJCdWZmZXIgPSBzdHViSml0
LnZtKCktPmhlYXAud3JpdGVCYXJyaWVyQnVmZmVyKCk7Ci0gICAgICAgIHN0dWJKaXQubG9hZDMy
KHdyaXRlQmFycmllckJ1ZmZlci5jdXJyZW50SW5kZXhBZGRyZXNzKCksIHNjcmF0Y2hHUFIyKTsK
LSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbmVlZFRvRmx1c2ggPQotICAgICAgICAgICAg
c3R1YkppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzY3JhdGNoR1BS
MiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih3cml0ZUJhcnJpZXJCdWZmZXIuY2FwYWNp
dHkoKSkpOwotCi0gICAgICAgIHN0dWJKaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMigxKSwgc2NyYXRjaEdQUjIpOwotICAgICAgICBzdHViSml0LnN0b3JlMzIoc2NyYXRjaEdQ
UjIsIHdyaXRlQmFycmllckJ1ZmZlci5jdXJyZW50SW5kZXhBZGRyZXNzKCkpOwotCi0gICAgICAg
IHN0dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih3cml0ZUJhcnJpZXJC
dWZmZXIuYnVmZmVyKCkpLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIC8vIFdlIHVzZSBhbiBvZmZz
ZXQgb2YgLXNpemVvZih2b2lkKikgYmVjYXVzZSB3ZSBhbHJlYWR5IGFkZGVkIDEgdG8gc2NyYXRj
aEdQUjIuCi0gICAgICAgIHN0dWJKaXQuc3RvcmVQdHIoYmFzZUdQUiwgTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIE1hY3JvQXNzZW1ibGVyOjpTY2Fs
ZVB0ciwgc3RhdGljX2Nhc3Q8aW50MzJfdD4oLXNpemVvZih2b2lkKikpKSk7Ci0KLSAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZVdpdGhCYXJyaWVyID0gc3R1YkppdC5qdW1wKCk7Ci0g
ICAgICAgIG5lZWRUb0ZsdXNoLmxpbmsoJnN0dWJKaXQpOwotCi0gICAgICAgIHNjcmF0Y2hCdWZm
ZXIgPSB2bS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoYWxsb2NhdG9yLmRlc2lyZWRTY3JhdGNoQnVm
ZmVyU2l6ZUZvckNhbGwoKSk7Ci0gICAgICAgIGFsbG9jYXRvci5wcmVzZXJ2ZVVzZWRSZWdpc3Rl
cnNUb1NjcmF0Y2hCdWZmZXJGb3JDYWxsKHN0dWJKaXQsIHNjcmF0Y2hCdWZmZXIsIHNjcmF0Y2hH
UFIyKTsKLSAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUdQ
Uik7Ci0gICAgICAgIGNhbGxGbHVzaFdyaXRlQmFycmllckJ1ZmZlciA9IHN0dWJKaXQuY2FsbCgp
OwotICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVVzZWRSZWdpc3RlcnNGcm9tU2NyYXRjaEJ1ZmZl
ckZvckNhbGwoc3R1YkppdCwgc2NyYXRjaEJ1ZmZlciwgc2NyYXRjaEdQUjIpOwotCi0gICAgICAg
IGRvbmVXaXRoQmFycmllci5saW5rKCZzdHViSml0KTsKLSAgICB9Ci0gICAgb3duZXJJc1JlbWVt
YmVyZWRPckluRWRlbi5saW5rKCZzdHViSml0KTsKLSNlbmRpZgotCi0gICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgc3VjY2VzczsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsdXJlOwotICAg
ICAgICAgICAgCi0gICAgaWYgKGFsbG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygpKSB7Ci0gICAg
ICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKHN0dWJKaXQsIG51
bWJlck9mUGFkZGluZ0J5dGVzKTsKLSAgICAgICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOwot
Ci0gICAgICAgIGZhaWx1cmVDYXNlcy5saW5rKCZzdHViSml0KTsKLSAgICAgICAgYWxsb2NhdG9y
LnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoc3R1YkppdCwgbnVtYmVyT2ZQYWRkaW5n
Qnl0ZXMpOwotICAgICAgICBmYWlsdXJlID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgfSBlbHNlCi0g
ICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBvcGVyYXRpb25DYWxsOwotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3NJ
blNsb3dQYXRoOwotICAgIAotICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkg
IT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgIHNsb3dQYXRo
LmxpbmsoJnN0dWJKaXQpOwotICAgICAgICAKLSAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVz
ZWRSZWdpc3RlcnNCeVBvcHBpbmcoc3R1YkppdCwgbnVtYmVyT2ZQYWRkaW5nQnl0ZXMpOwotICAg
ICAgICBpZiAoIXNjcmF0Y2hCdWZmZXIpCi0gICAgICAgICAgICBzY3JhdGNoQnVmZmVyID0gdm0t
PnNjcmF0Y2hCdWZmZXJGb3JTaXplKGFsbG9jYXRvci5kZXNpcmVkU2NyYXRjaEJ1ZmZlclNpemVG
b3JDYWxsKCkpOwotICAgICAgICBhbGxvY2F0b3IucHJlc2VydmVVc2VkUmVnaXN0ZXJzVG9TY3Jh
dGNoQnVmZmVyRm9yQ2FsbChzdHViSml0LCBzY3JhdGNoQnVmZmVyLCBzY3JhdGNoR1BSMSk7Ci0j
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoYmFzZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzbG90LmNhY2hlZE9mZnNldCgpKSwgdmFsdWVH
UFIpOwotI2Vsc2UKLSAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
YmFzZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzbG90LmNhY2hlZE9mZnNldCgpKSwgdmFsdWVHUFIsIHZh
bHVlVGFnR1BSKTsKLSNlbmRpZgotICAgICAgICBvcGVyYXRpb25DYWxsID0gc3R1YkppdC5jYWxs
KCk7Ci0gICAgICAgIGFsbG9jYXRvci5yZXN0b3JlVXNlZFJlZ2lzdGVyc0Zyb21TY3JhdGNoQnVm
ZmVyRm9yQ2FsbChzdHViSml0LCBzY3JhdGNoQnVmZmVyLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAg
IHN1Y2Nlc3NJblNsb3dQYXRoID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgfQotICAgIAotICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCBzdHViSml0LCBleGVjLT5jb2RlQmxvY2soKSwgSklU
Q29tcGlsYXRpb25DYW5GYWlsKTsKLSAgICBpZiAocGF0Y2hCdWZmZXIuZGlkRmFpbFRvQWxsb2Nh
dGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIHBhdGNoQnVmZmVyLmxpbmso
c3VjY2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1Yklu
Zm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSk7Ci0gICAgaWYgKGFsbG9jYXRvci5kaWRSZXVzZVJl
Z2lzdGVycygpKQotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmUsIGZhaWx1cmVMYWJl
bCk7Ci0gICAgZWxzZQotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlcywgZmFp
bHVyZUxhYmVsKTsKLSNpZiBFTkFCTEUoR0dDKQotICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbEZs
dXNoV3JpdGVCYXJyaWVyQnVmZmVyLCBvcGVyYXRpb25GbHVzaFdyaXRlQmFycmllckJ1ZmZlcik7
Ci0jZW5kaWYKLSAgICBpZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0
cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICBwYXRjaEJ1ZmZlci5saW5r
KG9wZXJhdGlvbkNhbGwsIG9wZXJhdGlvblJlYWxsb2NhdGVTdG9yYWdlQW5kRmluaXNoUHV0KTsK
LSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzSW5TbG93UGF0aCwgc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9E
b25lKSk7Ci0gICAgfQotICAgIAotICAgIHN0dWJSb3V0aW5lID0KLSAgICAgICAgY3JlYXRlSklU
U3R1YlJvdXRpbmUoCi0gICAgICAgICAgICBGSU5BTElaRV9DT0RFX0ZPUigKLSAgICAgICAgICAg
ICAgICBleGVjLT5jb2RlQmxvY2soKSwgcGF0Y2hCdWZmZXIsCi0gICAgICAgICAgICAgICAgKCJQ
dXRCeUlkICVzdHJhbnNpdGlvbiBzdHViICglcCAtPiAlcCkgZm9yICVzLCByZXR1cm4gcG9pbnQg
JXAiLAotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkg
IT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpID8gInJlYWxsb2NhdGluZyAiIDog
IiIsCi0gICAgICAgICAgICAgICAgICAgIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLAotICAgICAg
ICAgICAgICAgICAgICB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksIHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAgICAgICAg
ICAgICAgc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKS5leGVjdXRhYmxlQWRkcmVzcygp
KSksCi0gICAgICAgICAgICAqdm0sCi0gICAgICAgICAgICBleGVjLT5jb2RlQmxvY2soKS0+b3du
ZXJFeGVjdXRhYmxlKCksCi0gICAgICAgICAgICBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCkgIT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLAotICAgICAgICAgICAgc3Ry
dWN0dXJlKTsKLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogc3RhdGljIElubGluZUNhY2hl
QWN0aW9uIHRyeUNhY2hlUHV0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVl
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFB1
dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5k
IHB1dEtpbmQpCiB7CiAgICAgaWYgKE9wdGlvbnM6OmZvcmNlSUNGYWlsdXJlKCkpCiAgICAgICAg
IHJldHVybiBHaXZlVXBPbkNhY2hlOwogICAgIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
ZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgU2NyaXB0
RXhlY3V0YWJsZSogb3duZXIgPSBjb2RlQmxvY2stPm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpOwor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAKICAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkK
ICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CkBAIC0xMjQzLDIxMCArMzgwLDEwOSBAQCBz
dGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAgICAgaWYgKCFzdHJ1Y3R1
cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKICAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7CiAKLSAgICAvLyBPcHRpbWl6ZSBzZWxmIGFjY2Vzcy4KLSAgICBpZiAoc2xvdC5i
YXNlKCkgPT0gYmFzZVZhbHVlICYmIHNsb3QuaXNDYWNoZWFibGVQdXQoKSkgewotICAgICAgICBp
ZiAoc2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpOZXdQcm9wZXJ0eSkgeworICAgIHN0
ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBuZXdDYXNlOwogCi0gICAgICAgICAgICBTdHJ1Y3R1
cmUqIG9sZFN0cnVjdHVyZTsKLSAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
IGNvbmRpdGlvblNldDsKLSAgICAgICAgICAgIGlmICghZW1pdFB1dFRyYW5zaXRpb25TdHViKGV4
ZWMsIHZtLCBzdHJ1Y3R1cmUsIGlkZW50LCBzbG90LCBzdHViSW5mbywgcHV0S2luZCwgb2xkU3Ry
dWN0dXJlLCBjb25kaXRpb25TZXQpKQotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOwotCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoCi0gICAgICAg
ICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldCgKLSAgICAg
ICAgICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwKLSAgICAgICAg
ICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNv
ZGUoKSkpOwotICAgICAgICAgICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1bmN0aW9uKHNs
b3QsIHB1dEtpbmQpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3R1YkluZm8uaW5pdFB1
dEJ5SWRUcmFuc2l0aW9uKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgb2xkU3Ry
dWN0dXJlLCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgcHV0S2luZCA9PSBEaXJlY3QpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwotICAgICAgICB9
CisgICAgaWYgKHNsb3QuYmFzZSgpID09IEJhc2VWYWx1ZSAmJiBzbG90LmlzQ2FjaGVhYmxlUHV0
KCkpIHsKKyAgICAgICAgaWYgKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6RXhpc3Rp
bmdQcm9wZXJ0eSkgeworICAgICAgICAgICAgc3RydWN0dXJlLT5kaWRDYWNoZVByb3BlcnR5UmVw
bGFjZW1lbnQodm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICAKKyAgICAgICAgICAg
IHB0cmRpZmZfdCBvZmZzZXRUb1BhdGNoZWRTdG9yYWdlID0gb2Zmc2V0UmVsYXRpdmVUb1BhdGNo
ZWRTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICAgICAgaWYgKHN0dWJJbmZv
LmNhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlVuc2V0CisgICAgICAgICAgICAgICAgJiYgTWFjcm9B
c3NlbWJsZXI6OmlzUHRyQWxpZ25lZEFkZHJlc3NPZmZzZXQob2Zmc2V0VG9QYXRjaGVkU3RvcmFn
ZSkpIHsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICByZXBhdGNoQnlJZFNlbGZB
Y2Nlc3MoCisgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1
Y3R1cmUsIGlkZW50LCBzbG90LmNhY2hlZE9mZnNldCgpLAorICAgICAgICAgICAgICAgICAgICBh
cHByb3ByaWF0ZUxpc3RCdWlsZGluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSwgZmFs
c2UpOworICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlkUmVwbGFjZSh2bSwgY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworICAgICAgICAgICAgfQogCi0gICAgICAgIGlmICghTWFj
cm9Bc3NlbWJsZXI6OmlzUHRyQWxpZ25lZEFkZHJlc3NPZmZzZXQob2Zmc2V0UmVsYXRpdmVUb1Bh
dGNoZWRTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSkKLSAgICAgICAgICAgIHJldHVybiBH
aXZlVXBPbkNhY2hlOworICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OnJlcGxhY2Uo
dm0sIG93bmVyLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgQVNTRVJUKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6
TmV3UHJvcGVydHkpOwogCi0gICAgICAgIHN0cnVjdHVyZS0+ZGlkQ2FjaGVQcm9wZXJ0eVJlcGxh
Y2VtZW50KCp2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7Ci0gICAgICAgIHJlcGF0Y2hCeUlkU2Vs
ZkFjY2Vzcygqdm0sIGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwgaWRlbnQsIHNsb3Qu
Y2FjaGVkT2Zmc2V0KCksIGFwcHJvcHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1bmN0aW9uKHNs
b3QsIHB1dEtpbmQpLCBmYWxzZSk7Ci0gICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlkUmVwbGFj
ZSgqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7Ci0gICAgICAg
IHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0gICAgfQorICAgICAgICAgICAgaWYgKCFzdHJ1Y3R1
cmUtPmlzT2JqZWN0KCkgfHwgc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKIAotICAgIGlmICgoc2xvdC5pc0NhY2hlYWJsZUN1
c3RvbSgpIHx8IHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSkKLSAgICAgICAgJiYgc3R1YkluZm8u
cGF0Y2guc3BpbGxNb2RlID09IERvbnRTcGlsbCkgewotICAgICAgICBSZWZQdHI8SklUU3R1YlJv
dXRpbmU+IHN0dWJSb3V0aW5lOworICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0Owor
ICAgICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPQorICAgICAgICAgICAgICAgIFN0
cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJl
bnRseSgKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBpZGVudC5pbXBsKCksIDAsIHBy
b3BlcnR5T2Zmc2V0KTsKKyAgICAgICAgICAgIGlmICghbmV3U3RydWN0dXJlIHx8ICFuZXdTdHJ1
Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gR2l2ZVVwT25DYWNoZTsKIAotICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCBjb25kaXRpb25TZXQ7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKLSAgICAgICAg
aWYgKHNsb3QuYmFzZSgpICE9IGJhc2VWYWx1ZSkgewotICAgICAgICAgICAgaWYgKHNsb3QuaXND
YWNoZWFibGVDdXN0b20oKSkgewotICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9Ci0gICAg
ICAgICAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0
Q3VzdG9tKAotICAgICAgICAgICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgaWRlbnQuaW1wbCgpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBBU1NFUlQobmV3U3RydWN0dXJlLT5wcmV2aW91c0lEKCkgPT0gc3RydWN0dXJlKTsKKyAgICAg
ICAgICAgIEFTU0VSVCghbmV3U3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSk7CisgICAgICAgICAg
ICBBU1NFUlQobmV3U3RydWN0dXJlLT5pc09iamVjdCgpKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAgICAgICAg
ICAgaWYgKHB1dEtpbmQgPT0gTm90RGlyZWN0KSB7CiAgICAgICAgICAgICAgICAgY29uZGl0aW9u
U2V0ID0KLSAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBl
UHJvcGVydHlIaXQoCi0gICAgICAgICAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5iYXNlKCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICBpZGVudC5pbXBsKCkpOworICAgICAgICAgICAgICAgICAgICBnZW5lcmF0
ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3MoCisgICAgICAgICAgICAgICAgICAgICAg
ICB2bSwgb3duZXIsIGV4ZWMsIG5ld1N0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAg
ICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBHaXZlVXBPbkNhY2hlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFj
b25kaXRpb25TZXQuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOwotICAgICAgICAgICAgb2Zmc2V0ID0gc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpID8gaW52
YWxpZE9mZnNldCA6IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpOwot
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7
Ci0KLSAgICAgICAgUG9seW1vcnBoaWNQdXRCeUlkTGlzdCogbGlzdDsKLSAgICAgICAgbGlzdCA9
IFBvbHltb3JwaGljUHV0QnlJZExpc3Q6OmZyb20ocHV0S2luZCwgc3R1YkluZm8pOwotCi0gICAg
ICAgIGJvb2wgcmVzdWx0ID0gZ2VuZXJhdGVCeUlkU3R1YigKLSAgICAgICAgICAgIGV4ZWMsIGtp
bmRGb3Ioc2xvdCksIGlkZW50LCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBjb25kaXRpb25T
ZXQsIHNsb3QuYmFzZSgpLAotICAgICAgICAgICAgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGZhbHNlLCBu
dWxscHRyLAotICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRP
ZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSwKLSAgICAgICAgICAgIHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRh
Q2FsbFRvU2xvd0Nhc2UpLAotICAgICAgICAgICAgc3R1YlJvdXRpbmUpOwotICAgICAgICBpZiAo
IXJlc3VsdCkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAKLSAg
ICAgICAgbGlzdC0+YWRkQWNjZXNzKFB1dEJ5SWRBY2Nlc3M6OnNldHRlcigKLSAgICAgICAgICAg
ICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKLSAgICAgICAgICAgIHNsb3QuaXND
YWNoZWFibGVTZXR0ZXIoKSA/IFB1dEJ5SWRBY2Nlc3M6OlNldHRlciA6IFB1dEJ5SWRBY2Nlc3M6
OkN1c3RvbVNldHRlciwKLSAgICAgICAgICAgIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBzbG90
LmN1c3RvbVNldHRlcigpLCBzdHViUm91dGluZSkpOwotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpyZXBhdGNoSnVtcChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0
dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0
aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUxpc3RCdWlsZGluZ1B1dEJ5SWRG
dW5jdGlvbihzbG90LCBwdXRLaW5kKSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFsaXN0LT5p
c0Z1bGwoKSk7Ci0gICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0gICAgfQotCi0gICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci19Ci0KLXZvaWQgcmVwYXRjaFB1dEJ5SUQoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKLXsKLSAgICBHQ1NhZmVD
b25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihleGVjLT5jb2RlQmxvY2soKS0+bV9sb2NrLCBleGVj
LT52bSgpLmhlYXApOwotICAgIAotICAgIGlmICh0cnlDYWNoZVB1dEJ5SUQoZXhlYywgYmFzZVZh
bHVlLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQpID09
IEdpdmVVcE9uQ2FjaGUpCi0gICAgICAgIHJlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5j
dGlvbihzbG90LCBwdXRLaW5kKSk7Ci19Ci0KLXN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlC
dWlsZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1
dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5k
IHB1dEtpbmQpCi17Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2so
KTsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLQotICAgIGlmICghYmFzZVZhbHVlLmlzQ2Vs
bCgpKQotICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgIGlmICghc2xvdC5pc0Nh
Y2hlYWJsZVB1dCgpICYmICFzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgJiYgIXNsb3QuaXNDYWNo
ZWFibGVTZXR0ZXIoKSkKLSAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAKLSAgICBpZiAo
IXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQotICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgIC8vIE9wdGltaXplIHNlbGYgYWNjZXNzLgotICAgIGlm
IChzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUgJiYgc2xvdC5pc0NhY2hlYWJsZVB1dCgpKSB7Ci0g
ICAgICAgIFBvbHltb3JwaGljUHV0QnlJZExpc3QqIGxpc3Q7Ci0gICAgICAgIFJlZlB0cjxKSVRT
dHViUm91dGluZT4gc3R1YlJvdXRpbmU7Ci0gICAgICAgIAotICAgICAgICBpZiAoc2xvdC50eXBl
KCkgPT0gUHV0UHJvcGVydHlTbG90OjpOZXdQcm9wZXJ0eSkgewotICAgICAgICAgICAgbGlzdCA9
IFBvbHltb3JwaGljUHV0QnlJZExpc3Q6OmZyb20ocHV0S2luZCwgc3R1YkluZm8pOwotICAgICAg
ICAgICAgaWYgKGxpc3QtPmlzRnVsbCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBP
bkNhY2hlOyAvLyBXaWxsIGdldCBoZXJlIGR1ZSB0byByZWN1cnNpb24uCisgICAgICAgICAgICBu
ZXdDYXNlID0gQWNjZXNzQ2FzZTo6dHJhbnNpdGlvbih2bSwgb3duZXIsIHN0cnVjdHVyZSwgbmV3
U3RydWN0dXJlLCBvZmZzZXQsIGNvbmRpdGlvblNldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2Ug
aWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSB8fCBzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkp
IHsKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAg
ICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CiAKLSAgICAgICAgICAgIFN0cnVjdHVyZSogb2xk
U3RydWN0dXJlOworICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpKSB7CiAgICAg
ICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7Ci0gICAgICAg
ICAgICBpZiAoIWVtaXRQdXRUcmFuc2l0aW9uU3R1YihleGVjLCB2bSwgc3RydWN0dXJlLCBwcm9w
ZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kLCBvbGRTdHJ1Y3R1cmUsIGNvbmRpdGlv
blNldCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAKLSAgICAgICAg
ICAgIHN0dWJSb3V0aW5lID0gc3R1YkluZm8uc3R1YlJvdXRpbmU7Ci0gICAgICAgICAgICBsaXN0
LT5hZGRBY2Nlc3MoCi0gICAgICAgICAgICAgICAgUHV0QnlJZEFjY2Vzczo6dHJhbnNpdGlvbigK
LSAgICAgICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAot
ICAgICAgICAgICAgICAgICAgICBvbGRTdHJ1Y3R1cmUsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0
LAotICAgICAgICAgICAgICAgICAgICBzdHViUm91dGluZSkpOworICAgICAgICAgICAgaWYgKHNs
b3QuYmFzZSgpICE9IGJhc2VWYWx1ZSkgeworICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9
CisgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3Bl
cnR5SGl0Q3VzdG9tKAorICAgICAgICAgICAgICAgICAgICAgICAgdm0sIG93bmVyLCBleGVjLCBz
dHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLCBpZGVudC5pbXBsKCkpOworICAgICAgICAgICAgICAgIGlm
ICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdp
dmVVcE9uQ2FjaGU7CisgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nl
c3NDYXNlOjpzZXR0ZXIoCisgICAgICAgICAgICAgICAgdm0sIG93bmVyLCBBY2Nlc3NUeXBlOjpD
dXN0b21TZXR0ZXIsIHN0cnVjdHVyZSwgaW52YWxpZE9mZnNldCwgY29uZGl0aW9uU2V0LAorICAg
ICAgICAgICAgICAgIHNsb3QuY3VzdG9tU2V0dGVyKCkpOwogICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgbGlzdCA9IFBvbHltb3JwaGljUHV0QnlJZExpc3Q6OmZyb20ocHV0S2luZCwgc3R1
YkluZm8pOwotICAgICAgICAgICAgaWYgKGxpc3QtPmlzRnVsbCgpKQotICAgICAgICAgICAgICAg
IHJldHVybiBHaXZlVXBPbkNhY2hlOyAvLyBXaWxsIGdldCBoZXJlIGR1ZSB0byByZWN1cnNpb24u
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN0cnVjdHVyZS0+ZGlkQ2FjaGVQcm9wZXJ0eVJl
cGxhY2VtZW50KCp2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIC8vIFdlJ3JlIG5vdyBjb21taXR0ZWQgdG8gY3JlYXRpbmcgdGhlIHN0dWIuIE1vZ3Jp
ZnkgdGhlIG1ldGEtZGF0YSBhY2NvcmRpbmdseS4KLSAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0g
ZW1pdFB1dFJlcGxhY2VTdHViKAotICAgICAgICAgICAgICAgIGV4ZWMsIHByb3BlcnR5TmFtZSwg
c2xvdCwgc3R1YkluZm8sIAotICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgQ29kZUxvY2F0aW9u
TGFiZWwobGlzdC0+Y3VycmVudFNsb3dQYXRoVGFyZ2V0KCkpLCBzdHViUm91dGluZSk7Ci0gICAg
ICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNo
ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbGlzdC0+YWRkQWNjZXNzKAotICAgICAgICAg
ICAgICAgIFB1dEJ5SWRBY2Nlc3M6OnJlcGxhY2UoCi0gICAgICAgICAgICAgICAgICAgICp2bSwg
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0
dXJlLCBzdHViUm91dGluZSkpOwotICAgICAgICB9Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoSnVtcChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJ
bmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5l
LT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgICAgIGlmIChsaXN0LT5pc0Z1bGwoKSkKLSAgICAgICAg
ICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBh
cHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOwotCi0gICAg
ICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0gICAgfQorICAgICAgICAgICAgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAgICAgICAgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0OwogCi0gICAgaWYgKChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgfHwgc2xvdC5p
c0NhY2hlYWJsZVNldHRlcigpKQotICAgICAgICAmJiBzdHViSW5mby5wYXRjaC5zcGlsbE1vZGUg
PT0gRG9udFNwaWxsKSB7Ci0gICAgICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRp
bmU7Ci0gICAgICAgIAotICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRp
b25TZXQ7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKLSAgICAgICAgaWYgKHNsb3Qu
YmFzZSgpICE9IGJhc2VWYWx1ZSkgewotICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVD
dXN0b20oKSkgewotICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9Ci0gICAgICAgICAgICAg
ICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0Q3VzdG9tKAot
ICAgICAgICAgICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
LCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
cHJvcGVydHlOYW1lLmltcGwoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
aWYgKHNsb3QuYmFzZSgpICE9IGJhc2VWYWx1ZSkgewogICAgICAgICAgICAgICAgIGNvbmRpdGlv
blNldCA9CiAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlw
ZVByb3BlcnR5SGl0KAotICAgICAgICAgICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lLmltcGwoKSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICBvZmZzZXQgPSBzbG90LmlzQ2FjaGVhYmxl
Q3VzdG9tKCkgPyBpbnZhbGlkT2Zmc2V0IDogY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9u
KCkub2Zmc2V0KCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgb2Zmc2V0ID0gc2xvdC5j
YWNoZWRPZmZzZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBvd25lciwgZXhlYywg
c3RydWN0dXJlLCBzbG90LmJhc2UoKSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBH
aXZlVXBPbkNhY2hlOworICAgICAgICAgICAgICAgIG9mZnNldCA9IGNvbmRpdGlvblNldC5zbG90
QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICAgICAgb2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKIAotICAgICAgICBQb2x5bW9ycGhp
Y1B1dEJ5SWRMaXN0KiBsaXN0OwotICAgICAgICBsaXN0ID0gUG9seW1vcnBoaWNQdXRCeUlkTGlz
dDo6ZnJvbShwdXRLaW5kLCBzdHViSW5mbyk7CisgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNz
Q2FzZTo6c2V0dGVyKAorICAgICAgICAgICAgICAgIHZtLCBvd25lciwgQWNjZXNzVHlwZTo6U2V0
dGVyLCBzdHJ1Y3R1cmUsIG9mZnNldCwgY29uZGl0aW9uU2V0LCBudWxscHRyKTsKKyAgICAgICAg
fQorICAgIH0KIAotICAgICAgICBib29sIHJlc3VsdCA9IGdlbmVyYXRlQnlJZFN0dWIoCi0gICAg
ICAgICAgICBleGVjLCBraW5kRm9yKHNsb3QpLCBwcm9wZXJ0eU5hbWUsIGN1c3RvbUZvcihzbG90
KSwgc3R1YkluZm8sIGNvbmRpdGlvblNldCwgc2xvdC5iYXNlKCksCi0gICAgICAgICAgICBvZmZz
ZXQsIHN0cnVjdHVyZSwgZmFsc2UsIG51bGxwdHIsCi0gICAgICAgICAgICBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0Rv
bmUpLAotICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlzdC0+Y3VycmVudFNsb3dQYXRo
VGFyZ2V0KCkpLAotICAgICAgICAgICAgc3R1YlJvdXRpbmUpOwotICAgICAgICBpZiAoIXJlc3Vs
dCkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAKLSAgICAgICAg
bGlzdC0+YWRkQWNjZXNzKFB1dEJ5SWRBY2Nlc3M6OnNldHRlcigKLSAgICAgICAgICAgICp2bSwg
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKLSAgICAgICAgICAgIHNsb3QuaXNDYWNoZWFi
bGVTZXR0ZXIoKSA/IFB1dEJ5SWRBY2Nlc3M6OlNldHRlciA6IFB1dEJ5SWRBY2Nlc3M6OkN1c3Rv
bVNldHRlciwKLSAgICAgICAgICAgIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBzbG90LmN1c3Rv
bVNldHRlcigpLCBzdHViUm91dGluZSkpOwotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBh
dGNoSnVtcChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZv
LnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5j
b2RlKCkuY29kZSgpKSk7Ci0gICAgICAgIGlmIChsaXN0LT5pc0Z1bGwoKSkKLSAgICAgICAgICAg
IHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHBy
b3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOworICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZSgKKyAgICAg
ICAgdm0sIGNvZGVCbG9jaywgcHJvcGVydHlOYW1lLCBzdGQ6Om1vdmUobmV3Q2FzZSkpOworICAg
IAorICAgIGlmICghY29kZVB0cikKKyAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAKLSAg
ICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLSAgICB9Ci0gICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7CisgICAgcmVzZXRQdXRCeUlEQ2hlY2tBbmRMb2FkKHN0dWJJbmZvKTsKKyAgICBNYWNy
b0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoCisgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5qdW1wQXRPZmZzZXQoCisgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxU
b0p1bXApLAorICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby5zdHViUm91dGluZS0+
Y29kZSgpLmNvZGUoKSkpOworICAgIAorICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CiB9CiAK
LXZvaWQgYnVpbGRQdXRCeUlkTGlzdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVl
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBj
b25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywg
UHV0S2luZCBwdXRLaW5kKQordm9pZCByZXBhdGNoUHV0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQogewogICAgIEdDU2FmZUNvbmN1cnJlbnRK
SVRMb2NrZXIgbG9ja2VyKGV4ZWMtPmNvZGVCbG9jaygpLT5tX2xvY2ssIGV4ZWMtPnZtKCkuaGVh
cCk7CiAgICAgCi0gICAgaWYgKHRyeUJ1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZVZhbHVlLCBz
dHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQpID09IEdpdmVV
cE9uQ2FjaGUpCisgICAgaWYgKHRyeUNhY2hlUHV0QnlJRChleGVjLCBiYXNlVmFsdWUsIHN0cnVj
dHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0S2luZCkgPT0gR2l2ZVVwT25D
YWNoZSkKICAgICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3Qs
IHB1dEtpbmQpKTsKIH0KIApAQCAtMTkxMSw5ICs5NDcsOCBAQCB2b2lkIGxpbmtQb2x5bW9ycGhp
Y0NhbGwoCiAgICAgICAgIGNhbGxMaW5rSW5mby5yZW1vdmUoKTsKIH0KIAotdm9pZCByZXNldEdl
dEJ5SUQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykK
K3N0YXRpYyB2b2lkIHJlc2V0R2V0QnlJRENoZWNrQW5kTG9hZChTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8pCiB7Ci0gICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk7CiAgICAgQ29kZUxvY2F0aW9u
RGF0YUxhYmVsMzIgc3RydWN0dXJlTGFiZWwgPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
ZGF0YUxhYmVsMzJBdE9mZnNldCgtKGludHB0cl90KXN0dWJJbmZvLnBhdGNoLmRlbHRhQ2hlY2tJ
bW1Ub0NhbGwpOwogICAgIGlmIChNYWNyb0Fzc2VtYmxlcjo6Y2FuSnVtcFJlcGxhY2VQYXRjaGFi
bGVCcmFuY2gzMldpdGhQYXRjaCgpKSB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXZlcnRK
dW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKApAQCAtMTkzMCwyNCAr
OTY1LDE3IEBAIHZvaWQgcmVzZXRHZXRCeUlEKENvZGVCbG9jayogY29kZUJsb2NrLCAKICAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENvbXBhY3Qoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1RhZ0xv
YWRPclN0b3JlKSwgMCk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDb21wYWN0KHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8u
cGF0Y2guZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUpLCAwKTsKICNlbmRpZgorfQorCit2
b2lkIHJlc2V0R2V0QnlJRChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvKQoreworICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpOworICAgIHJlc2V0R2V0QnlJ
RENoZWNrQW5kTG9hZChzdHViSW5mbyk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1w
KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGVsdGFDYWxsVG9KdW1wKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZz
ZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwogfQogCi12b2lkIHJlc2V0
UHV0QnlJRChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
KQorc3RhdGljIHZvaWQgcmVzZXRQdXRCeUlEQ2hlY2tBbmRMb2FkKFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbykKIHsKLSAgICBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJIHVub3B0aW1pemVkRnVu
Y3Rpb24gPSBiaXR3aXNlX2Nhc3Q8Vl9KSVRPcGVyYXRpb25fRVNzaUpKST4ocmVhZENhbGxUYXJn
ZXQoY29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24pLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpOwotICAgIFZfSklUT3BlcmF0aW9uX0VTc2lKSkkgb3B0aW1pemVkRnVuY3Rpb247Ci0g
ICAgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdCB8fCB1
bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RCdWlsZExpc3QpCi0g
ICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXpl
OwotICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5v
blN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJp
Y3RCdWlsZExpc3QpCi0gICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJ
ZE5vblN0cmljdE9wdGltaXplOwotICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0g
b3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9w
ZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExpc3QpCi0gICAgICAgIG9wdGltaXplZEZ1
bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOwotICAgIGVsc2Ug
ewotICAgICAgICBBU1NFUlQodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0Tm9uU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJ
ZERpcmVjdE5vblN0cmljdEJ1aWxkTGlzdCk7Ci0gICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0g
b3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOwotICAgIH0KLSAgICByZXBh
dGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3B0aW1pemVk
RnVuY3Rpb24pOwogICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyIHN0cnVjdHVyZUxhYmVsID0g
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoLShpbnRwdHJf
dClzdHViSW5mby5wYXRjaC5kZWx0YUNoZWNrSW1tVG9DYWxsKTsKICAgICBpZiAoTWFjcm9Bc3Nl
bWJsZXI6OmNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goKSkgewogICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFu
Y2gzMldpdGhQYXRjaCgKQEAgLTE5NjQsNiArOTkyLDI0IEBAIHZvaWQgcmVzZXRQdXRCeUlEKENv
ZGVCbG9jayogY29kZUJsb2NrLCAKICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEludDMyKHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBh
dGNoLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUpLCAwKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6
cmVwYXRjaEludDMyKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zm
c2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKSwgMCk7CiAj
ZW5kaWYKK30KKwordm9pZCByZXNldFB1dEJ5SUQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJIHVu
b3B0aW1pemVkRnVuY3Rpb24gPSBiaXR3aXNlX2Nhc3Q8Vl9KSVRPcGVyYXRpb25fRVNzaUpKST4o
cmVhZENhbGxUYXJnZXQoY29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24pLmV4
ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIFZfSklUT3BlcmF0aW9uX0VTc2lKSkkgb3B0aW1pemVk
RnVuY3Rpb247CisgICAgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJ
ZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RC
dWlsZExpc3QpCisgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFN0
cmljdE9wdGltaXplOworICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0
aW9uUHV0QnlJZE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1
dEJ5SWROb25TdHJpY3RCdWlsZExpc3QpCisgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3Bl
cmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOworICAgIGVsc2UgaWYgKHVub3B0aW1pemVk
RnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdCB8fCB1bm9wdGltaXplZEZ1
bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExpc3QpCisgICAgICAg
IG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXpl
OworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVy
YXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3Bl
cmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1aWxkTGlzdCk7CisgICAgICAgIG9wdGltaXpl
ZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOworICAg
IH0KKyAgICByZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
biwgb3B0aW1pemVkRnVuY3Rpb24pOworICAgIHJlc2V0UHV0QnlJRENoZWNrQW5kTG9hZChzdHVi
SW5mbyk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwg
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAx
ODkzMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NjcmF0Y2hSZWdpc3RlckFsbG9j
YXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDggQEAgU2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yOjp+U2NyYXRjaFJlZ2lzdAogCiB2b2lkIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
cjo6bG9jayhHUFJSZWcgcmVnKQogeworICAgIGlmIChyZWcgPT0gSW52YWxpZEdQUlJlZykKKyAg
ICAgICAgcmV0dXJuOwogICAgIHVuc2lnbmVkIGluZGV4ID0gR1BSSW5mbzo6dG9JbmRleChyZWcp
OwogICAgIGlmIChpbmRleCA9PSBHUFJJbmZvOjpJbnZhbGlkSW5kZXgpCiAgICAgICAgIHJldHVy
bjsKQEAgLTUyLDEyICs1NCwyMCBAQCB2b2lkIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6bG9j
ayhHUFJSCiAKIHZvaWQgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpsb2NrKEZQUlJlZyByZWcp
CiB7CisgICAgaWYgKHJlZyA9PSBJbnZhbGlkRlBSUmVnKQorICAgICAgICByZXR1cm47CiAgICAg
dW5zaWduZWQgaW5kZXggPSBGUFJJbmZvOjp0b0luZGV4KHJlZyk7CiAgICAgaWYgKGluZGV4ID09
IEZQUkluZm86OkludmFsaWRJbmRleCkKICAgICAgICAgcmV0dXJuOwogICAgIG1fbG9ja2VkUmVn
aXN0ZXJzLnNldEZQUkJ5SW5kZXgoaW5kZXgpOwogfQogCit2b2lkIFNjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvcjo6bG9jayhKU1ZhbHVlUmVncyByZWdzKQoreworICAgIGxvY2socmVncy50YWdHUFIo
KSk7CisgICAgbG9jayhyZWdzLnBheWxvYWRHUFIoKSk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1l
IEJhbmtJbmZvPgogdHlwZW5hbWUgQmFua0luZm86OlJlZ2lzdGVyVHlwZSBTY3JhdGNoUmVnaXN0
ZXJBbGxvY2F0b3I6OmFsbG9jYXRlU2NyYXRjaCgpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgJKHJldmlzaW9u
IDE4OTMyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDExICs0MCwxMyBAQCBzdHJ1Y3QgU2NyYXRj
aEJ1ZmZlcjsKIAogY2xhc3MgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIHsKIHB1YmxpYzoKKyAg
ICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IoKSB7IH0KICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3IoY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpOwogICAgIH5TY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3IoKTsKIAotICAgIHZvaWQgbG9jayhHUFJSZWcgcmVnKTsKLSAgICB2b2lk
IGxvY2soRlBSUmVnIHJlZyk7CisgICAgdm9pZCBsb2NrKEdQUlJlZyk7CisgICAgdm9pZCBsb2Nr
KEZQUlJlZyk7CisgICAgdm9pZCBsb2NrKEpTVmFsdWVSZWdzKTsKICAgICAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBCYW5rSW5mbz4KICAgICB0eXBlbmFtZSBCYW5rSW5mbzo6UmVnaXN0ZXJUeXBl
IGFsbG9jYXRlU2NyYXRjaCgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260768</attachid>
            <date>2015-09-08 10:36:41 -0700</date>
            <delta_ts>2015-09-08 10:39:25 -0700</delta_ts>
            <desc>it is written</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>205866</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODkzMjQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzI2LDggKzMyNiw2IEBACiAJCTBGNDg1MzJBMTg3REZE
RUMwMDgzQjY4NyAvKiBGVExSZWNvdmVyeU9wY29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0ODUzMjYxODdERkRFQzAwODNCNjg3IC8qIEZUTFJl
Y292ZXJ5T3Bjb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEY0OTNBRkExNkQwQ0FEMzAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDkzQUY4MTZE
MENBRDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi87IH07CiAJCTBGNEI5NERDMTdC
OUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0Qjk0REIxN0I5RjA3NTAwREQwM0E0IC8qIFR5
cGVkQXJyYXlJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKLQkJMEY0Q0VENUUxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJ
ZExpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY0Q0VENUMxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwICov
OyB9OwotCQkwRjRDRUQ1RjE4Q0VBN0FCMDA4MDJGRTAgLyogUG9seW1vcnBoaWNHZXRCeUlkTGlz
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0Q0VE
NUQxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJZExpc3QuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjRGMjlERjE4QjZBRDFD
MDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RjI5REQxOEI2
QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNw
cCAqLzsgfTsKIAkJMEY0RjI5RTAxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlv
bkNvdW50RXN0aW1hdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjRGMjlERTE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0
aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjUwQUYzQzE5M0U4QjM5MDA2NzRFRTggLyogREZHU3RydWN0
dXJlQ2xvYmJlclN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjUwQUYzQjE5M0U4QjM5MDA2NzRFRTggLyogREZHU3RydWN0dXJlQ2xvYmJlclN0
YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAg
LTQ3NSw4ICs0NzMsNiBAQAogCQkwRjlFMzI2NDFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVC
YXJyaWVySW5zZXJ0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGOUUzMjYyMUIwNUFCMDQwMDgwMUVENSAvKiBERkdTdG9yZUJhcnJpZXJJ
bnNlcnRpb25QaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGOUZCNEY0MTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUZC
NEYyMTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNlLmNwcCAqLzsgfTsKIAkJ
MEY5RkI0RjUxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUZCNEYzMTdGQ0I5MTcw
MENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEY5RkM4QzMxNEUxQjVGRTAwRDUyQUUwIC8qIFBv
bHltb3JwaGljUHV0QnlJZExpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY5RkM4QkYxNEUxQjVGQjAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0
QnlJZExpc3QuY3BwICovOyB9OwotCQkwRjlGQzhDNDE0RTFCNjAwMDBENTJBRTAgLyogUG9seW1v
cnBoaWNQdXRCeUlkTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY5RkM4QzAxNEUxQjVGQjAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExp
c3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjlGQzhDNTE0RTFCNjA0MDBENTJBRTAgLyogUHV0S2luZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RkM4QzExNEUxQjVGQjAwRDUyQUUwIC8qIFB1
dEtpbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRkEyQzE3QjE3RDdDRjg0MDA5RDAxNUYgLyogVGVzdFJ1bm5lclV0aWxzLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQTJDMTc5MTdEN0NGODQw
MDlEMDE1RiAvKiBUZXN0UnVubmVyVXRpbHMuY3BwICovOyB9OwogCQkwRkEyQzE3QzE3RDdDRjg0
MDA5RDAxNUYgLyogVGVzdFJ1bm5lclV0aWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkEyQzE3QTE3RDdDRjg0MDA5RDAxNUYgLyogVGVzdFJ1bm5l
clV0aWxzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
QEAgLTc0NCw2ICs3NDAsOCBAQAogCQkwRkY4QkRFQTFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJy
ZWRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkY4QkRFODFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5jcHAgKi87IH07CiAJ
CTBGRjhCREVCMUFENENGNzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY4QkRFOTFBRDRDRjcxMDBERkU4
ODQgLyogSW5mZXJyZWRWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGRjkyMkQ0MTRGNDZCNDEwMDQxQTI0RSAvKiBMTEludE9mZnNldHNF
eHRyYWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY0NjgwQTExNEJBN0Y4MjAwQkZFMjcyIC8qIExMSW50T2Zmc2V0c0V4dHJhY3Rvci5jcHAg
Ki87IH07CisJCTBGRjlDRTczMUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY5Q0U3
MTFCOUNENkQwMDA0RURDQTYgLyogUG9seW1vcnBoaWNBY2Nlc3MuY3BwICovOyB9OworCQkwRkY5
Q0U3NDFCOUNENkQwMDA0RURDQTYgLyogUG9seW1vcnBoaWNBY2Nlc3MuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjlDRTcyMUI5Q0Q2RDAwMDRFRENB
NiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGRkE1NDk3MTZCODgzNTAwMEIzQTk4MiAvKiBBNjRET3Bjb2Rl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MkEz
QTIyMTY1MUM2OTcwMEE4MEFGRSAvKiBBNjRET3Bjb2RlLmNwcCAqLzsgfTsKIAkJMEZGQTU0OTgx
NkI4ODM1MzAwQjNBOTgyIC8qIEE2NERPcGNvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MkEzQTIzMTY1MUM2OTcwMEE4MEFGRSAvKiBBNjRET3Bj
b2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEZGQjZDMzgxQUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5cGUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGQjZDMzYxQUY0OEREQzAwREIxQkY3
IC8qIFR5cGVvZlR5cGUuY3BwICovOyB9OwpAQCAtMjE1MSw4ICsyMTQ5LDYgQEAKIAkJMEY0ODUz
MjYxODdERkRFQzAwODNCNjg3IC8qIEZUTFJlY292ZXJ5T3Bjb2RlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEZUTFJlY292ZXJ5T3Bjb2RlLmg7IHBhdGggPSBmdGwvRlRMUmVj
b3ZlcnlPcGNvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0OTNBRjgxNkQw
Q0FEMTAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNvdXJjZVByb3ZpZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY0Qjk0REIxN0I5RjA3NTAwREQwM0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVkQXJyYXlJbmxpbmVzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNENFRDVDMThDRUE3QUIwMDgwMkZFMCAvKiBQ
b2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFBvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkwRjRDRUQ1RDE4Q0VBN0FCMDA4MDJGRTAgLyogUG9seW1vcnBoaWNHZXRCeUlkTGlz
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb2x5bW9ycGhpY0dldEJ5SWRM
aXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEYyOUREMThCNkFEMUMwMDU3
QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVz
dGltYXRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3Rp
bWF0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRGMjlERTE4
QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU3RhdGljRXhlY3V0aW9uQ291
bnRFc3RpbWF0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdTdGF0aWNFeGVjdXRpb25Db3VudEVz
dGltYXRpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjUwQUYzQjE5
M0U4QjM5MDA2NzRFRTggLyogREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oOyBwYXRoID0g
ZGZnL0RGR1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjI5OCw4ICsyMjk0LDYgQEAKIAkJMEY5RTMyNjIxQjA1QUIwNDAwODAxRUQ1IC8qIERG
R1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHU3Rv
cmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY5RkI0RjIxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RhY2tMYXlvdXRQaGFzZS5jcHA7
IHBhdGggPSBkZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGOUZCNEYzMTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1N0YWNrTGF5b3V0UGhhc2Uu
aDsgcGF0aCA9IGRmZy9ERkdTdGFja0xheW91dFBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTBGOUZDOEJGMTRFMUI1RkIwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRM
aXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBvbHltb3JwaGlj
UHV0QnlJZExpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjlGQzhDMDE0
RTFCNUZCMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGOUZDOEMxMTRFMUI1RkIwMEQ1MkFFMCAvKiBQdXRLaW5kLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1dEtpbmQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZBMkMxNzkxN0Q3Q0Y4NDAwOUQwMTVGIC8qIFRlc3RSdW5uZXJV
dGlscy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXN0UnVubmVy
VXRpbHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkEyQzE3QTE3RDdDRjg0
MDA5RDAxNUYgLyogVGVzdFJ1bm5lclV0aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFRlc3RSdW5uZXJVdGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MjU3NCw2ICsyNTY4LDggQEAKIAkJMEZGOEJERTgxQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVk
VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5mZXJyZWRW
YWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjhCREU5MUFENENGNzEw
MERGRTg4NCAvKiBJbmZlcnJlZFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEluZmVycmVkVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGOTIy
Q0YxNEY0NkIxMzAwNDFBMjRFIC8qIEpTQ0xMSW50T2Zmc2V0c0V4dHJhY3RvciAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5l
eGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gSlNDTExJbnRPZmZzZXRzRXh0
cmFjdG9yOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQkwRkY5Q0U3MTFC
OUNENkQwMDA0RURDQTYgLyogUG9seW1vcnBoaWNBY2Nlc3MuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUG9seW1vcnBoaWNBY2Nlc3MuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkY5Q0U3MjFCOUNENkQwMDA0RURDQTYgLyogUG9seW1vcnBoaWNB
Y2Nlc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9seW1vcnBoaWNBY2Nl
c3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQjZDMzYxQUY0OEREQzAwREIx
QkY3IC8qIFR5cGVvZlR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gVHlwZW9mVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRkI2QzM3
MUFGNDhEREMwMERCMUJGNyAvKiBUeXBlb2ZUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFR5cGVvZlR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZG
Qzk5RDAxODRFQzhBRDAwOUMxMEFCIC8qIENvbnN0YW50TW9kZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDb25zdGFudE1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTU1ODEsMTEgKzU1NzcsOSBAQAogCQkJCTk2OUEwNzk1MEVEMUQzQUUwMEYxRjY4MSAv
KiBPcGNvZGUuaCAqLywKIAkJCQkwRjJCREMyQjE1MUZERThCMDBDRDg5MTAgLyogT3BlcmFuZHMu
aCAqLywKIAkJCQlBNzA0NDdFOTE3QTBCRDQ2MDBGNTg5OEUgLyogT3BlcmFuZHNJbmxpbmVzLmgg
Ki8sCisJCQkJMEZGOUNFNzExQjlDRDZEMDAwNEVEQ0E2IC8qIFBvbHltb3JwaGljQWNjZXNzLmNw
cCAqLywKKwkJCQkwRkY5Q0U3MjFCOUNENkQwMDA0RURDQTYgLyogUG9seW1vcnBoaWNBY2Nlc3Mu
aCAqLywKIAkJCQkwRjM0QjE0QjE2RDQzRTBDMDAxQ0RBNUEgLyogUG9seW1vcnBoaWNBY2Nlc3NT
dHJ1Y3R1cmVMaXN0LmggKi8sCi0JCQkJMEY0Q0VENUMxOENFQTdBQjAwODAyRkUwIC8qIFBvbHlt
b3JwaGljR2V0QnlJZExpc3QuY3BwICovLAotCQkJCTBGNENFRDVEMThDRUE3QUIwMDgwMkZFMCAv
KiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmggKi8sCi0JCQkJMEY5RkM4QkYxNEUxQjVGQjAwRDUy
QUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwICovLAotCQkJCTBGOUZDOEMwMTRFMUI1
RkIwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmggKi8sCiAJCQkJMEY5ODIwNUQx
NkJGRTM3RjAwMjQwRDAyIC8qIFByZWNpc2VKdW1wVGFyZ2V0cy5jcHAgKi8sCiAJCQkJMEY5ODIw
NUUxNkJGRTM3RjAwMjQwRDAyIC8qIFByZWNpc2VKdW1wVGFyZ2V0cy5oICovLAogCQkJCTBGRDNF
NDA3MUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgKi8sCkBAIC01NjE2
LDggKzU2MTAsOCBAQAogCQkJCTBGMkQ0REU3MTk4MzJEQUMwMDdENEIxOSAvKiBUeXBlTG9jYXRp
b24uaCAqLywKIAkJCQlBNzlFNzgxRTE1RUVDQkE4MDA0N0M4NTUgLyogVW5saW5rZWRDb2RlQmxv
Y2suY3BwICovLAogCQkJCUE3OUU3ODFGMTVFRUNCQTgwMDQ3Qzg1NSAvKiBVbmxpbmtlZENvZGVC
bG9jay5oICovLAotCQkJCTE0MTQyRTUwMUI3OTZFQ0UwMEY0QkY0QiAvKiBVbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZS5oICovLAogCQkJCTE0MTQyRTU0MUI3OTczQzAwMEY0QkY0QiAvKiBVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAgKi8sCisJCQkJMTQxNDJFNTAxQjc5NkVDRTAwRjRC
RjRCIC8qIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmggKi8sCiAJCQkJQjU5Rjg5MzgxODkx
QURCNTAwRDVDQ0RDIC8qIFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0uY3BwICovLAogCQkJCUI1
OUY4OTM3MTg5MUFEMzMwMEQ1Q0NEQyAvKiBVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtLmggKi8s
CiAJCQkJMEY5NjNCMzYxM0ZDNkZERTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5oICovLApAQCAt
NjE3OCw3ICs2MTcyLDYgQEAKIAkJCQkwRkMwOTc3MTE0NjkzQUY1MDBDRjI0NDIgLyogREZHT1NS
RXhpdENvbXBpbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjcwMjVBQTE3MTRCMEZDMDAzODJD
MEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVG
QzlBQjE2ODFBM0I2MDA1NjdGNTMgLyogREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJMEY0Q0VENUYxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0
QnlJZExpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkVFMTcxNzhFNzMwMDY5MEM3RiAv
KiBERkdPU1JFeGl0UHJlcGFyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkZDOTVDMTRF
RjkwQUYwMEM3MjUzMiAvKiBERkdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVFQTcwRUUx
OUY1QjVDNDAwOThGNUVDIC8qIEpTQ29udGV4dFJlZkluc3BlY3RvclN1cHBvcnQuaCBpbiBIZWFk
ZXJzICovLApAQCAtNjIyNyw2ICs2MjIwLDcgQEAKIAkJCQk5OUU0NUEyNDE4QTFCMjU5MDAyNkQ4
OEYgLyogRW1wdHlJbnB1dEN1cnNvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQxNDJFNTMxQjc5
NkVERDAwRjRCRjRCIC8qIEV4ZWN1dGFibGVJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OUU0
NUEyNjE4QTFCMjU5MDAyNkQ4OEYgLyogRW5jb2RlZFZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRkY5Q0U3NDFCOUNENkQwMDA0RURDQTYgLyogUG9seW1vcnBoaWNBY2Nlc3MuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGNTg3NEVFMTk0RkVCMTIwMEFBQjJDMSAvKiBERkdNYXlFeGl0LmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzMwNDYwNzBFMUY0OTdGMDAzMjMyQ0YgLyogRXJyb3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDMDJFOTBEMEUxODM5REIwMDBGOTI5NyAvKiBFcnJvckNvbnN0cnVj
dG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTY2NjAsNyArNjY1NCw2IEBACiAJCQkJQTc3RjE4MjUx
NjQxOTJDNzAwNjQwQTQ3IC8qIFBhcnNlck1vZGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTMw
M0Q2NDE0NDdCOUUxMDBEM0Y5MDQgLyogUGFyc2VyVG9rZW5zLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjM0QjE0QzE2RDQzRTBEMDAxQ0RBNUEgLyogUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVM
aXN0LmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjlGQzhDNDE0RTFCNjAwMDBENTJBRTAgLyogUG9s
eW1vcnBoaWNQdXRCeUlkTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4RjE0MzQxQURGMDkw
MTAwRUQ3OTJDIC8qIERGR0Vwb2NoLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk4MjA2MTE2QkZF
MzgzMDAyNDBEMDIgLyogUHJlY2lzZUp1bXBUYXJnZXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjJERDgxNTFBQjNEOEJFMDBCQkI4RTggLyogREZHRm9yQWxsS2lsbHMuaCBpbiBIZWFkZXJzICov
LApAQCAtNzgxOCw3ICs3ODExLDYgQEAKIAkJCQkwRjBCODM5QzE0QkNGNDYzMDA4ODVCNEYgLyog
TExJbnRUaHVua3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDRUZBQ0QxODA1RTc1NTAwNDcy
Q0U0IC8qIExMVk1BUEkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdFNUFCMzcxNzk5RTRCMjAw
RDI4MzNEIC8qIExMVk1EaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEY0Q0VE
NUUxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTQ0NjlEREUxMDdFQzdFNzAwNjUwNDQ2IC8qIExvb2t1cC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjQ2ODBDQzE0QkJCMTdBMDBCRkUyNzIgLyogTG93TGV2ZWxJbnRlcnBy
ZXRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEI3MjNCMjEyRDdEQTQ2MDAzQkQ1RUQgLyog
TWFjaGluZVN0YWNrTWFya2VyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzg2MCw3ICs3ODUyLDYg
QEAKIAkJCQkwRkUyMjhFRTE0MzZBQjJDMDAxOTZDNDggLyogT3B0aW9ucy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNDhGMjFCQzEwN0VDNTREMDA0MkVDMkMgLyogUGFyc2VyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTkzMDUyQzM0MEZCNzkyMTkwMDQ4RkRDMyAvKiBQYXJzZXJBcmVuYS5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQkwRjlGQzhDMzE0RTFCNUZFMDBENTJBRTAgLyogUG9seW1vcnBo
aWNQdXRCeUlkTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjk4MjA2MDE2QkZFMzgxMDAy
NDBEMDIgLyogUHJlY2lzZUp1bXBUYXJnZXRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk1NzQy
RjY1MEREMTFGNUEwMDA5MTdGQiAvKiBQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
MkI5Q0Y4MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICov
LApAQCAtNzg3Nyw2ICs3ODY4LDcgQEAKIAkJCQkwRjE5MENBQzE4OUQ4MkY2MDAwQUU1RjAgLyog
UHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlCMzE2
NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJPcmlnaW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZGNzI5QjQxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2luU3RhY2suY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMEZGOUNFNzMxQjlDRDZEMDAwNEVEQ0E2IC8qIFBvbHltb3JwaGljQWNj
ZXNzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjEwNThCMTY3NTQ4MzEwMEY4QUI2RSAvKiBQ
cm9maWxlck9TUkV4aXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMTA1OEQxNjc1NDgzNzAw
RjhBQjZFIC8qIFByb2ZpbGVyT1NSRXhpdFNpdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYx
MzkxMkIxNjc3MUMzQTAwOUNDQjA3IC8qIFByb2ZpbGVyUHJvZmlsZWRCeXRlY29kZXMuY3BwIGlu
IFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJ
ZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0dldEJ5SWRTdGF0dXMuY3BwCShyZXZpc2lvbiAxODkzMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcg
KzMzLDcgQEAKICNpbmNsdWRlICJKU1Njb3BlLmgiCiAjaW5jbHVkZSAiTExJbnREYXRhLmgiCiAj
aW5jbHVkZSAiTG93TGV2ZWxJbnRlcnByZXRlci5oIgotI2luY2x1ZGUgIlBvbHltb3JwaGljR2V0
QnlJZExpc3QuaCIKKyNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgogI2luY2x1ZGUgPHd0
Zi9MaXN0RHVtcC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTEzOSwxMiArMTM5LDEyIEBAIEdl
dEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICBpZiAoIXN0dWJJbmZv
LT5zZWVuKQogICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKICAg
ICAKLSAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0ID0gMDsKKyAgICBQb2x5bW9ycGhp
Y0FjY2VzcyogbGlzdCA9IDA7CiAgICAgU3RhdGUgc2xvd1BhdGhTdGF0ZSA9IFRha2VzU2xvd1Bh
dGg7Ci0gICAgaWYgKHN0dWJJbmZvLT5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfbGlz
dCkgewotICAgICAgICBsaXN0ID0gc3R1YkluZm8tPnUuZ2V0QnlJZExpc3QubGlzdDsKKyAgICBp
ZiAoc3R1YkluZm8tPmNhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlN0dWIpIHsKKyAgICAgICAgbGlz
dCA9IHN0dWJJbmZvLT51LnN0dWI7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
aXN0LT5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgY29uc3QgR2V0QnlJZEFjY2VzcyYgYWNj
ZXNzID0gbGlzdC0+YXQoaSk7CisgICAgICAgICAgICBjb25zdCBBY2Nlc3NDYXNlJiBhY2Nlc3Mg
PSBsaXN0LT5hdChpKTsKICAgICAgICAgICAgIGlmIChhY2Nlc3MuZG9lc0NhbGxzKCkpCiAgICAg
ICAgICAgICAgICAgc2xvd1BhdGhTdGF0ZSA9IE1ha2VzQ2FsbHM7CiAgICAgICAgIH0KQEAgLTE1
NywxMiArMTU3LDEyIEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMK
ICAgICBHZXRCeUlkU3RhdHVzIHJlc3VsdDsKICAgICByZXN1bHQubV9zdGF0ZSA9IFNpbXBsZTsK
ICAgICByZXN1bHQubV93YXNTZWVuSW5KSVQgPSB0cnVlOyAvLyBUaGlzIGlzIGludGVyZXN0aW5n
IGZvciBieXRlY29kZSBkdW1waW5nIG9ubHkuCi0gICAgc3dpdGNoIChzdHViSW5mby0+YWNjZXNz
VHlwZSkgewotICAgIGNhc2UgYWNjZXNzX3Vuc2V0OgorICAgIHN3aXRjaCAoc3R1YkluZm8tPmNh
Y2hlVHlwZSkgeworICAgIGNhc2UgQ2FjaGVUeXBlOjpVbnNldDoKICAgICAgICAgcmV0dXJuIEdl
dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7CiAgICAgICAgIAotICAgIGNhc2UgYWNjZXNzX2dl
dF9ieV9pZF9zZWxmOiB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1YkluZm8t
PnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKTsKKyAgICBjYXNlIENhY2hl
VHlwZTo6R2V0QnlJZFNlbGY6IHsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHVi
SW5mby0+dS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpOwogICAgICAgICBpZiAo
c3RydWN0dXJlLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQogICAgICAg
ICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSwgdHJ1ZSk7CiAgICAgICAg
IHVuc2lnbmVkIGF0dHJpYnV0ZXNJZ25vcmVkOwpAQCAtMTc3LDEyICsxNzcsMTMgQEAgR2V0QnlJ
ZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3Q6IHsKKyAg
ICBjYXNlIENhY2hlVHlwZTo6U3R1YjogewogICAgICAgICBmb3IgKHVuc2lnbmVkIGxpc3RJbmRl
eCA9IDA7IGxpc3RJbmRleCA8IGxpc3QtPnNpemUoKTsgKytsaXN0SW5kZXgpIHsKLSAgICAgICAg
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbGlzdC0+YXQobGlzdEluZGV4KS5zdHJ1Y3R1cmUo
KTsKKyAgICAgICAgICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIGFjY2VzcyA9IGxpc3QtPmF0KGxpc3RJ
bmRleCk7CisgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFjY2Vzcy5zdHJ1Y3R1
cmUoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgQ29tcGxleEdldFN0YXR1cyBjb21wbGV4
R2V0U3RhdHVzID0gQ29tcGxleEdldFN0YXR1czo6Y29tcHV0ZUZvcigKLSAgICAgICAgICAgICAg
ICBzdHJ1Y3R1cmUsIGxpc3QtPmF0KGxpc3RJbmRleCkuY29uZGl0aW9uU2V0KCksIHVpZCk7Cisg
ICAgICAgICAgICAgICAgc3RydWN0dXJlLCBhY2Nlc3MuY29uZGl0aW9uU2V0KCksIHVpZCk7CiAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICBzd2l0Y2ggKGNvbXBsZXhHZXRTdGF0dXMua2luZCgp
KSB7CiAgICAgICAgICAgICBjYXNlIENvbXBsZXhHZXRTdGF0dXM6OlNob3VsZFNraXA6CkBAIC0x
OTMsMjkgKzE5NCwyMyBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JT
CiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpJ
bmxpbmVhYmxlOiB7CiAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3Rh
dHVzPiBjYWxsTGlua1N0YXR1czsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGxpc3QtPmF0KGxp
c3RJbmRleCkudHlwZSgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBHZXRCeUlkQWNjZXNzOjpT
aW1wbGVJbmxpbmU6Ci0gICAgICAgICAgICAgICAgY2FzZSBHZXRCeUlkQWNjZXNzOjpTaW1wbGVT
dHViOiB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChhY2Nlc3MudHlwZSgpKSB7CisgICAgICAg
ICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpMb2FkOiB7CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXNlIEdldEJ5SWRBY2Nl
c3M6OkdldHRlcjogewotICAgICAgICAgICAgICAgICAgICBBY2Nlc3NvckNhbGxKSVRTdHViUm91
dGluZSogc3R1YiA9IHN0YXRpY19jYXN0PEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lKj4oCi0g
ICAgICAgICAgICAgICAgICAgICAgICBsaXN0LT5hdChsaXN0SW5kZXgpLnN0dWJSb3V0aW5lKCkp
OworICAgICAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6R2V0dGVyOiB7CisgICAgICAgICAg
ICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gYWNjZXNzLmNhbGxMaW5rSW5m
bygpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoY2FsbExpbmtJbmZvKTsKICAgICAgICAg
ICAgICAgICAgICAgY2FsbExpbmtTdGF0dXMgPSBzdGQ6Om1ha2VfdW5pcXVlPENhbGxMaW5rU3Rh
dHVzPigKICAgICAgICAgICAgICAgICAgICAgICAgIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9y
KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tlciwgcHJvZmlsZWRCbG9jaywgKnN0
dWItPm1fY2FsbExpbmtJbmZvLCBjYWxsRXhpdFNpdGVEYXRhKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJsb2NrLCAqY2FsbExpbmtJbmZvLCBjYWxsRXhp
dFNpdGVEYXRhKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBjYXNlIEdldEJ5SWRBY2Nlc3M6OlNpbXBsZU1pc3M6Ci0gICAg
ICAgICAgICAgICAgY2FzZSBHZXRCeUlkQWNjZXNzOjpDdXN0b21HZXR0ZXI6Ci0gICAgICAgICAg
ICAgICAgY2FzZSBHZXRCeUlkQWNjZXNzOjpXYXRjaGVkU3R1Yjp7Ci0gICAgICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSB0b3RhbGx5IHN3ZWV0IHRvIHN1cHBvcnQgdGhpcyBh
dCBzb21lIHBvaW50IGluIHRoZSBmdXR1cmUuCi0gICAgICAgICAgICAgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzMwNTIKKyAgICAgICAgICAgICAg
ICBkZWZhdWx0OiB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSB0
b3RhbGx5IHN3ZWV0IHRvIHN1cHBvcnQgbW9yZSBvZiB0aGVzZSBhdCBzb21lIHBvaW50IGluIHRo
ZQorICAgICAgICAgICAgICAgICAgICAvLyBmdXR1cmUuIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzMwNTIKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5
SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gfQogICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBHZXRCeUlkVmFyaWFudCB2YXJpYW50KAog
ICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSwgY29tcGxleEdldFN0
YXR1cy5vZmZzZXQoKSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNpb24gMTg5MzI0KQkoZnJvbSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHA6MTg5
MzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oIgorCisjaWYgRU5BQkxFKEpJVCkKKwor
I2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkhlYXAuaCIKKyNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK0dldEJ5SWRBY2Nlc3M6OkdldEJ5SWRBY2Nlc3MoCisgICAgVk0mIHZtLCBKU0NlbGwq
IG93bmVyLCBBY2Nlc3NUeXBlIHR5cGUsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJS
b3V0aW5lLAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYgY29uZGl0aW9uU2V0KQorICAgIDogbV90eXBlKHR5cGUpCisgICAgLCBtX3N0
cnVjdHVyZSh2bSwgb3duZXIsIHN0cnVjdHVyZSkKKyAgICAsIG1fY29uZGl0aW9uU2V0KGNvbmRp
dGlvblNldCkKKyAgICAsIG1fc3R1YlJvdXRpbmUoc3R1YlJvdXRpbmUpCit7Cit9CisKK0dldEJ5
SWRBY2Nlc3M6On5HZXRCeUlkQWNjZXNzKCkKK3sKK30KKworR2V0QnlJZEFjY2VzcyBHZXRCeUlk
QWNjZXNzOjpmcm9tU3RydWN0dXJlU3R1YkluZm8oU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
KQoreworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBpbml0aWFsU2xvd1BhdGggPQorICAgICAg
ICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRj
aC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKKyAgICAKKyAgICBHZXRCeUlkQWNjZXNzIHJlc3VsdDsK
KyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19n
ZXRfYnlfaWRfc2VsZik7CisgICAgCisgICAgcmVzdWx0Lm1fdHlwZSA9IFNpbXBsZUlubGluZTsK
KyAgICByZXN1bHQubV9zdHJ1Y3R1cmUuY29weUZyb20oc3R1YkluZm8udS5nZXRCeUlkU2VsZi5i
YXNlT2JqZWN0U3RydWN0dXJlKTsKKyAgICByZXN1bHQubV9zdHViUm91dGluZSA9IEpJVFN0dWJS
b3V0aW5lOjpjcmVhdGVTZWxmTWFuYWdlZFJvdXRpbmUoaW5pdGlhbFNsb3dQYXRoKTsKKyAgICAK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIEdldEJ5SWRBY2Nlc3M6OnZpc2l0V2VhayhW
TSYgdm0pIGNvbnN0Cit7CisgICAgaWYgKG1fc3RydWN0dXJlICYmICFIZWFwOjppc01hcmtlZCht
X3N0cnVjdHVyZS5nZXQoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW1fY29u
ZGl0aW9uU2V0LmFyZVN0aWxsTGl2ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KCFtX3N0dWJSb3V0aW5lLT52aXNpdFdlYWsodm0pKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK1BvbHltb3JwaGljR2V0QnlJZExpc3Q6OlBvbHltb3JwaGlj
R2V0QnlJZExpc3QoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIGlmIChzdHVi
SW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc191bnNldCkKKyAgICAgICAgcmV0dXJuOworICAgIAor
ICAgIG1fbGlzdC5hcHBlbmQoR2V0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKHN0
dWJJbmZvKSk7Cit9CisKK1BvbHltb3JwaGljR2V0QnlJZExpc3QqIFBvbHltb3JwaGljR2V0QnlJ
ZExpc3Q6OmZyb20oU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIGlmIChzdHVi
SW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfbGlzdCkKKyAgICAgICAgcmV0dXJu
IHN0dWJJbmZvLnUuZ2V0QnlJZExpc3QubGlzdDsKKyAgICAKKyAgICBBU1NFUlQoCisgICAgICAg
IHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmCisgICAgICAgIHx8
IHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0KTsKKyAgICAKKyAgICBQb2x5bW9y
cGhpY0dldEJ5SWRMaXN0KiByZXN1bHQgPSBuZXcgUG9seW1vcnBoaWNHZXRCeUlkTGlzdChzdHVi
SW5mbyk7CisgICAgCisgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRMaXN0KHJlc3VsdCk7CisgICAg
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6flBvbHlt
b3JwaGljR2V0QnlJZExpc3QoKSB7IH0KKworTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIFBvbHltb3Jw
aGljR2V0QnlJZExpc3Q6OmN1cnJlbnRTbG93UGF0aFRhcmdldCgKKyAgICBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8pIGNvbnN0Cit7CisgICAgaWYgKGlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBh
dGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpOworICAgIHJldHVybiBtX2xpc3QubGFzdCgpLnN0dWJS
b3V0aW5lKCktPmNvZGUoKS5jb2RlKCk7Cit9CisKK3ZvaWQgUG9seW1vcnBoaWNHZXRCeUlkTGlz
dDo6YWRkQWNjZXNzKGNvbnN0IEdldEJ5SWRBY2Nlc3MmIGFjY2VzcykKK3sKKyAgICBBU1NFUlQo
IWlzRnVsbCgpKTsKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgcmVzaXppbmcgb3B0aW1pemVz
IGZvciBzcGFjZSwgbm90IHRpbWUuCisgICAgbV9saXN0LnJlc2l6ZVRvRml0KG1fbGlzdC5zaXpl
KCkgKyAxKTsKKyAgICBtX2xpc3QubGFzdCgpID0gYWNjZXNzOworfQorCitib29sIFBvbHltb3Jw
aGljR2V0QnlJZExpc3Q6OmlzRnVsbCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKHNpemUoKSA8PSBQ
T0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpOworICAgIHJldHVybiBzaXplKCkgPT0gUE9MWU1P
UlBISUNfTElTVF9DQUNIRV9TSVpFOworfQorCitib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6
OmlzQWxtb3N0RnVsbCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKHNpemUoKSA8PSBQT0xZTU9SUEhJ
Q19MSVNUX0NBQ0hFX1NJWkUpOworICAgIHJldHVybiBzaXplKCkgPj0gUE9MWU1PUlBISUNfTElT
VF9DQUNIRV9TSVpFIC0gMTsKK30KKworYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpkaWRT
ZWxmUGF0Y2hpbmcoKSBjb25zdAoreworICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUoKTsgaS0t
OykgeworICAgICAgICBpZiAoYXQoaSkudHlwZSgpID09IEdldEJ5SWRBY2Nlc3M6OlNpbXBsZUlu
bGluZSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2Jvb2wgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6dmlzaXRXZWFrKFZNJiB2bSkgY29u
c3QKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXplKCk7IGktLTspIHsKKyAgICAgICAgaWYg
KCFhdChpKS52aXNpdFdlYWsodm0pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBF
TkFCTEUoSklUKQorCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjQsMTMxICsyNCwxMDc3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlBvbHltb3JwaGljR2V0QnlJZExpc3QuaCIKKyNpbmNsdWRlICJQb2x5bW9ycGhpY0Fj
Y2Vzcy5oIgogCiAjaWYgRU5BQkxFKEpJVCkKIAorI2luY2x1ZGUgIkJpbmFyeVN3aXRjaC5oIgog
I2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKKyNpbmNsdWRlIDx3dGYv
Q29tbWFQcmludGVyLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCi1HZXRCeUlkQWNjZXNzOjpHZXRC
eUlkQWNjZXNzKAotICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBQ
YXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSwKLSAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkK
LSAgICA6IG1fdHlwZSh0eXBlKQotICAgICwgbV9zdHJ1Y3R1cmUodm0sIG93bmVyLCBzdHJ1Y3R1
cmUpCi0gICAgLCBtX2NvbmRpdGlvblNldChjb25kaXRpb25TZXQpCi0gICAgLCBtX3N0dWJSb3V0
aW5lKHN0dWJSb3V0aW5lKQorc3RydWN0IEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSB7CisgICAgQ0Nh
bGxIZWxwZXJzKiBqaXQgeyBudWxscHRyIH07CisgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
KiBhbGxvY2F0b3I7CisgICAgc2l6ZV90IG51bWJlck9mUGFkZGluZ0J5dGVzIHsgMCB9OworICAg
IFBvbHltb3JwaGljQWNjZXNzKiBhY2Nlc3MgeyBudWxscHRyIH07CisgICAgU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvIHsgbnVsbHB0ciB9OworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
c3VjY2VzczsKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGZhaWxBbmRSZXBhdGNoOworICAg
IENDYWxsSGVscGVyczo6SnVtcExpc3QgZmFpbEFuZElnbm9yZTsKKyAgICBHUFJSZWcgYmFzZUdQ
UiB7IEludmFsaWRHUFJSZWcgfTsKKyAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3M7CisgICAgR1BS
UmVnIHNjcmF0Y2hHUFIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgYm9vbCBuZWVkVG9SZXN0b3Jl
U2NyYXRjaCB7IGZhbHNlIH07CisgICAgVmVjdG9yPHN0ZDo6ZnVuY3Rpb248dm9pZChMaW5rQnVm
ZmVyJik+IGNhbGxiYWNrczsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudDsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvPiB3YXRjaHBvaW50czsK
KworICAgIHZvaWQgYWRkV2F0Y2hwb2ludChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYg
Y29uZGl0aW9uID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb24oKSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBXYXRjaHBvaW50T25TdHJ1Y3R1cmVTdHViSW5mbzo6ZW5zdXJlUmVmZXJlbmNlQW5kQWRk
V2F0Y2hwb2ludCgKKyAgICAgICAgICAgIHdhdGNocG9pbnRzLCBqaXQtPmNvZGVCbG9jaygpLCBz
dHViSW5mbywgY29uZGl0aW9uKTsKKyAgICB9CisKKyAgICB2b2lkIHJlc3RvcmVTY3JhdGNoKCkK
KyAgICB7CisgICAgICAgIGFsbG9jYXRvci0+cmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGlu
Zygqaml0LCBudW1iZXJPZlBhZGRpbmdCeXRlcyk7CisgICAgfQorCisgICAgdm9pZCBzdWNjZWVk
KCkKKyAgICB7CisgICAgICAgIHJlc3RvcmVTY3JhdGNoKCk7CisgICAgICAgIHN1Y2Nlc3MuYXBw
ZW5kKGppdC0+anVtcCgpKTsKKyAgICB9Cit9OworCitBY2Nlc3NDYXNlOjpBY2Nlc3NDYXNlKCkK
IHsKIH0KIAotR2V0QnlJZEFjY2Vzczo6fkdldEJ5SWRBY2Nlc3MoKQorc3RkOjp1bmlxdWVfcHRy
PEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OmdldCgKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIs
IEFjY2Vzc1R5cGUgdHlwZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBib29sIHZpYVByb3h5LCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCYgY29uZGl0aW9uU2V0LCBXYXRjaHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0LAorICAgIFByb3Bl
cnR5U2xvdDo6R2V0VmFsdWVGdW5jIGN1c3RvbUdldHRlcikKIHsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8QWNjZXNzQ2FzZT4gcmVzdWx0KG5ldyBBY2Nlc3NDYXNlKCkpOworCisgICAgcmVzdWx0LT5t
X3R5cGUgPSB0eXBlOworICAgIHJlc3VsdC0+bV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgcmVzdWx0
LT5tX3N0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOworICAgIHJlc3VsdC0+bV9j
b25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7CisgICAgCisgICAgaWYgKHZpYVByb3h5IHx8IGFk
ZGl0aW9uYWxTZXQgfHwgZG9lc0NhbGxzKCkgfHwgY3VzdG9tR2V0dGVyKSB7CisgICAgICAgIHJl
c3VsdC0+bV9yYXJlRGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8UmFyZURhdGE+KCk7CisgICAgICAg
IHJlc3VsdC0+bV9yYXJlRGF0YS0+dmlhUHJveHkgPSB2aWFQcm94eTsKKyAgICAgICAgcmVzdWx0
LT5tX3JhcmVEYXRhLT5hZGRpdGlvbmFsU2V0ID0gYWRkaXRpb25hbFNldDsKKyAgICAgICAgcmVz
dWx0LT5tX3JhcmVEYXRhLT5jdXN0b21BY2Nlc3Nvci5nZXR0ZXIgPSBjdXN0b21HZXR0ZXI7Cisg
ICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotR2V0QnlJZEFjY2VzcyBHZXRCeUlkQWNj
ZXNzOjpmcm9tU3RydWN0dXJlU3R1YkluZm8oU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQor
c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OnJlcGxhY2UoCisgICAgVk0m
IHZtLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KQogewotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBpbml0aWFsU2xvd1BhdGggPQot
ICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5m
by5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKLSAgICAKLSAgICBHZXRCeUlkQWNjZXNzIHJl
c3VsdDsKLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFj
Y2Vzc19nZXRfYnlfaWRfc2VsZik7Ci0gICAgCi0gICAgcmVzdWx0Lm1fdHlwZSA9IFNpbXBsZUlu
bGluZTsKLSAgICByZXN1bHQubV9zdHJ1Y3R1cmUuY29weUZyb20oc3R1YkluZm8udS5nZXRCeUlk
U2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlKTsKLSAgICByZXN1bHQubV9zdHViUm91dGluZSA9IEpJ
VFN0dWJSb3V0aW5lOjpjcmVhdGVTZWxmTWFuYWdlZFJvdXRpbmUoaW5pdGlhbFNsb3dQYXRoKTsK
LSAgICAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gcmVzdWx0KG5ldyBBY2Nlc3ND
YXNlKCkpOworCisgICAgcmVzdWx0LT5tX3R5cGUgPSBSZXBsYWNlOworICAgIHJlc3VsdC0+bV9v
ZmZzZXQgPSBvZmZzZXQ7CisgICAgcmVzdWx0LT5tX3N0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBz
dHJ1Y3R1cmUpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RkOjp1bmlxdWVfcHRyPEFj
Y2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OnRyYW5zaXRpb24oCisgICAgVk0mIHZtLCBKU0NlbGwqIG93
bmVyLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCwKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCYgY29uZGl0aW9uU2V0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKG9sZFN0cnVjdHVyZSA9PSBu
ZXdTdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSk7CisKKyAgICAvLyBTa2lwIG9wdGltaXppbmcgdGhl
IGNhc2Ugd2hlcmUgd2UgbmVlZCBhIHJlYWxsb2MsIGlmIHdlIGRvbid0IGhhdmUKKyAgICAvLyBl
bm91Z2ggcmVnaXN0ZXJzIHRvIG1ha2UgaXQgaGFwcGVuLgorICAgIGlmIChHUFJJbmZvOjpudW1i
ZXJPZlJlZ2lzdGVycyA8IDYKKyAgICAgICAgJiYgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpICE9IG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKQorICAgICAgICAmJiBv
bGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorCisgICAgLy8gU2tpcCBvcHRpbWl6aW5nIHRoZSBjYXNlIHdoZXJlIHdlIG5l
ZWQgcmVhbGxvYywgYW5kIHRoZSBzdHJ1Y3R1cmUgaGFzCisgICAgLy8gaW5kZXhpbmcgc3RvcmFn
ZS4KKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IHNraXAgdGhpcyEgSW1wbGVtZW50IGl0IQor
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzA5MTQKKyAg
ICBpZiAob2xkU3RydWN0dXJlLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1bHQo
bmV3IEFjY2Vzc0Nhc2UoKSk7CisKKyAgICByZXN1bHQtPm1fdHlwZSA9IFRyYW5zaXRpb247Cisg
ICAgcmVzdWx0LT5tX29mZnNldCA9IG9mZnNldDsKKyAgICByZXN1bHQtPm1fc3RydWN0dXJlLnNl
dCh2bSwgb3duZXIsIG5ld1N0cnVjdHVyZSk7CisgICAgcmVzdWx0LT5tX2NvbmRpdGlvblNldCA9
IGNvbmRpdGlvblNldDsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0ZDo6dW5pcXVlX3B0
cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpzZXR0ZXIoCisgICAgVk0mIHZtLCBKU0NlbGwqIG93
bmVyLCBBY2Nlc3NUeXBlIHR5cGUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQsCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlv
blNldCwgUHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmMgY3VzdG9tU2V0dGVyKQoreworICAg
IHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nhc2UoKSk7CisK
KyAgICByZXN1bHQtPm1fdHlwZSA9IHR5cGU7CisgICAgcmVzdWx0LT5tX29mZnNldCA9IG9mZnNl
dDsKKyAgICByZXN1bHQtPm1fc3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7Cisg
ICAgcmVzdWx0LT5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKKworICAgIGlmIChjdXN0
b21TZXR0ZXIpIHsKKyAgICAgICAgcmVzdWx0LT5tX3JhcmVEYXRhID0gc3RkOjptYWtlX3VuaXF1
ZTxSYXJlRGF0YT4oKTsKKyAgICAgICAgcmVzdWx0LT5tX3JhcmVEYXRhLT5jdXN0b21BY2Nlc3Nv
ci5zZXR0ZXIgPSBjdXN0b21TZXR0ZXI7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kworc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OmluKAorICAgIFZNJiB2
bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwK
KyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KQorewor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nhc2UoKSk7
CisKKyAgICByZXN1bHQtPm1fdHlwZSA9IHR5cGU7CisgICAgcmVzdWx0LT5tX3N0cnVjdHVyZS5z
ZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOworICAgIHJlc3VsdC0+bV9jb25kaXRpb25TZXQgPSBj
b25kaXRpb25TZXQ7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGQ6OnVuaXF1ZV9wdHI8
QWNjZXNzVHlwZT4gQWNjZXNzQ2FzZTo6Z2V0TGVuZ3RoKFZNJiB2bSwgSlNDZWxsKiBvd25lciwg
QWNjZXNzVHlwZSB0eXBlKQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1
bHQobmV3IEFjY2Vzc0Nhc2UoKSk7CisKKyAgICByZXN1bHQtPm1fdHlwZSA9IHR5cGU7CisKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitBY2Nlc3NDYXNlOjp+QWNjZXNzQ2FzZSgpCit7Cit9CisK
K3N0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpmcm9tU3RydWN0dXJlU3R1
YkluZm8oCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8pCit7CisgICAgc3dpdGNoIChzdHViSW5mby5hY2Nlc3NUeXBlKSB7CisgICAgY2FzZSBh
Y2Nlc3NfZ2V0X2J5X2lkX3NlbGY6CisgICAgICAgIHJldHVybiBnZXQoCisgICAgICAgICAgICB2
bSwgb3duZXIsIExvYWQsIHN0dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0LCBzdHViSW5mby51LmJ5
SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUpOworCisgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lk
X3JlcGxhY2U6CisgICAgICAgIHJldHVybiByZXBsYWNlKHZtLCBvd25lciwgc3R1YkluZm8udS5i
eUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLCBzdHViSW5mby51LmJ5SWRTZWxmLm9mZnNldCk7
CisKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9Cit9CisKK3N0
ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpjbG9uZSgpCit7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHJlc3VsdChuZXcgQWNjZXNzQ2FzZSgpKTsKKyAgICBy
ZXN1bHQtPm1fdHlwZSA9IG1fdHlwZTsKKyAgICByZXN1bHQtPm1fb2Zmc2V0ID0gbV9vZmZzZXQ7
CisgICAgcmVzdWx0LT5tX3N0cnVjdHVyZSA9IG1fc3RydWN0dXJlOworICAgIHJlc3VsdC0+bV9j
b25kaXRpb25TZXQgPSBtX2NvbmRpdGlvblNldDsKKyAgICBpZiAoUmFyZURhdGEqIHJhcmVEYXRh
ID0gbV9yYXJlRGF0YS5nZXQoKSkgeworICAgICAgICByZXN1bHQtPm1fcmFyZURhdGEgPSBzdGQ6
Om1ha2VfdW5pcXVlPFJhcmVEYXRhPigpOworICAgICAgICByZXN1bHQtPm1fcmFyZURhdGEtPnZp
YVByb3h5ID0gcmFyZURhdGEtPnZpYVByb3h5OworICAgICAgICByZXN1bHQtPm1fcmFyZURhdGEt
PmFkZGl0aW9uYWxTZXQgPSByYXJlRGF0YS0+YWRkaXRpb25hbFNldDsKKyAgICAgICAgLy8gTk9U
RTogV2UgZG9uJ3QgY29weSB0aGUgY2FsbExpbmtJbmZvLCBzaW5jZSB0aGF0J3MgY3JlYXRlZCBk
dXJpbmcgY29kZSBnZW5lcmF0aW9uLgorICAgICAgICByZXN1bHQtPm1fcmFyZURhdGEtPmN1c3Rv
bUFjY2Vzc29yLm9wYXF1ZSA9IHJhcmVEYXRhLT5jdXN0b21BY2Nlc3Nvci5vcGFxdWU7CisgICAg
fQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWJvb2wgR2V0QnlJZEFjY2Vzczo6dmlzaXRXZWFr
KFZNJiB2bSkgY29uc3QKK2Jvb2wgQWNjZXNzQ2FzZTo6Z3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2so
KSBjb25zdAoreworICAgIGlmICh2aWFQcm94eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgQXJyYXlMZW5ndGg6CisgICAgY2FzZSBT
dHJpbmdMZW5ndGg6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkZWZhdWx0OgorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisKK2Jvb2wgQWNjZXNzQ2FzZTo6Y2FuUmVwbGFjZShj
b25zdCBBY2Nlc3NDYXNlJiBvdGhlcikKK3sKKyAgICAvLyBXZSBjb3VsZCBkbyBhIGxvdCBiZXR0
ZXIgaGVyZSwgYnV0IGZvciBub3cgd2UganVzdCBkbyBzb21ldGhpbmcgb2J2aW91cy4KKworICAg
IGlmICghZ3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2soKSB8fCAhb3RoZXIuZ3VhcmRlZEJ5U3RydWN0
dXJlQ2hlY2soKSkgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMhCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RydWN0dXJlKCkgPT0gb3RoZXIu
c3RydWN0dXJlKCk7Cit9CisKK3ZvaWQgQWNjZXNzQ2FzZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAoreworICAgIG91dC5wcmludCgKKyAgICAgICAgbV90eXBlLCAiOihzdHJ1Y3R1cmUg
PSAiLCBwb2ludGVyRHVtcChtX3N0cnVjdHVyZS5nZXQoKSksICIsIG9mZnNldCA9ICIsIG1fb2Zm
c2V0LAorICAgICAgICAiLCBjb25kaXRpb25zID0gIiwgbV9jb25kaXRpb25TZXQpOworCisgICAg
aWYgKFJhcmVEYXRhKiByYXJlRGF0YSA9IG1fcmFyZURhdGEuZ2V0KCkpIHsKKyAgICAgICAgb3V0
LnByaW50KAorICAgICAgICAgICAgIiwgdmlhUHJveHkgPSAiLCByYXJlRGF0YS0+dmlhUHJveHks
CisgICAgICAgICAgICAiLCBhZGRpdGlvbmFsU2V0ID0gIiwgUmF3UG9pbnRlcihyYXJlRGF0YS0+
YWRkaXRpb25hbFNldC5nZXQoKSksCisgICAgICAgICAgICAiLCBjYWxsTGlua0luZm8gPSAiLCBS
YXdQb2ludGVyKHJhcmVEYXRhLT5jYWxsTGlua0luZm8uZ2V0KCkpLAorICAgICAgICAgICAgIiwg
Y3VzdG9tQWNjZXNzb3IgPSAiLCBSYXdQb2ludGVyKHJhcmVEYXRhLT5jdXN0b21BY2Nlc3Nvci5v
cGFxdWUpKTsKKyAgICB9CisKKyAgICBvdXQucHJpbnQoIikiKTsKK30KKworYm9vbCBBY2Nlc3ND
YXNlOjp2aXNpdFdlYWsoVk0mIHZtKSBjb25zdAogewogICAgIGlmIChtX3N0cnVjdHVyZSAmJiAh
SGVhcDo6aXNNYXJrZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgaWYgKCFtX2NvbmRpdGlvblNldC5hcmVTdGlsbExpdmUoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGlmICghbV9zdHViUm91dGluZS0+dmlzaXRXZWFrKHZtKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmIChtX3JhcmVEYXRhICYmIG1fcmFyZURhdGEtPmNhbGxMaW5r
SW5mbykKKyAgICAgICAgbV9yYXJlRGF0YS0+Y2FsbExpbmtJbmZvLT52aXNpdFdlYWsodm0pOwog
ICAgIHJldHVybiB0cnVlOwogfQogCi1Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0KFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3ZvaWQgQWNjZXNzQ2Fz
ZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCisgICAgQWNjZXNzR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSwg
Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdCYgZmFsbFRocm91Z2gpCiB7Ci0gICAgaWYgKHN0dWJJbmZv
LmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0KQorICAgIENDYWxsSGVscGVycyYgaml0ID0gKnN0
YXRlLmppdDsKKworICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgY2FzZSBBcnJheUxlbmd0aDog
eworICAgICAgICBBU1NFUlQoIXZpYVByb3h5KCkpOworICAgICAgICBqaXQubG9hZDgoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKAorICAgICAgICAgICAgaml0
LmJyYW5jaFRlc3QzMihDQ2FsbEhlbHBlcnM6Olplcm8sIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKElzQXJyYXkpKSk7CisgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgK
KyAgICAgICAgICAgIGppdC5icmFuY2hUZXN0MzIoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpaZXJvLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihJbmRleGlu
U2hhcGVNYXNrKSkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIFN0cmluZ0xl
bmd0aDogeworICAgICAgICBBU1NFUlQoIXZpYVByb3h5KCkpOworICAgICAgICBmYWxsVGhyb3Vn
aC5hcHBlbmQoCisgICAgICAgICAgICBqaXQuYnJhbmNoOCgKKyAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVz
cyhiYXNlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwKKyAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihTdHJpbmdUeXBlKSkpOworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBkZWZhdWx0OiB7CisgICAgICAgIGlmICh2aWFQcm94eSgpKSB7Cisg
ICAgICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCisgICAgICAgICAgICAgICAgaml0LmJyYW5j
aDgoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsCisgICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdGF0ZS5iYXNlR1BSLCBKU0NlbGw6
OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoUHVyZUZvcndhcmRpbmdQcm94eVR5cGUpKSk7CisKKyAgICAgICAgICAg
IGppdC5sb2FkUHRyKAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdGF0
ZS5iYXNlR1BSLCBKU1Byb3h5Ojp0YXJnZXRPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgc3Rh
dGUuc2NyYXRjaEdQUik7CisKKyAgICAgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgKKyAgICAg
ICAgICAgICAgICBqaXQuYnJhbmNoU3RydWN0dXJlKAorICAgICAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3Moc3RhdGUuc2NyYXRjaEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAg
ICAgICAgICAgICAgICAgICAgc3RydWN0dXJlKCkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgKKyAgICAgICAgICAgICAgICBqaXQuYnJhbmNoU3Ry
dWN0dXJlKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAorICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RhdGUuYmFzZUdQUiwgSlND
ZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJl
KCkpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9IH07CisKKyAgICBnZW5lcmF0
ZShzdGF0ZSk7Cit9CisKK3ZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGUoQWNjZXNzR2VuZXJhdGlv
blN0YXRlJiBzdGF0ZSkKK3sKKyAgICBDQ2FsbEhlbHBlcnMmIGppdCA9ICpzdGF0ZS5qaXQ7Cisg
ICAgVk0mIHZtID0gKmppdC52bSgpOworICAgIFBvbHltb3JwaGljQWNjZXNzJiBhY2Nlc3MgPSAq
c3RhdGUuYWNjZXNzOworICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9ICpzdGF0ZS5z
dHViSW5mbzsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGppdC5jb2RlQmxvY2soKTsKKyAg
ICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9ICpzdGF0ZS5pZGVudDsKKyAgICBKU1ZhbHVlUmVn
cyB2YWx1ZVJlZ3MgPSBzdGF0ZS52YWx1ZVJlZ3M7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0
ZS5iYXNlR1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc3RhdGUuc2NyYXRjaEdQUjsKKwor
ICAgIEFTU0VSVChtX2NvbmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHlBc3N1bWlu
Z0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKTsKKworICAgIGlmIChzdHJ1Y3R1cmUoKS0+bmVl
ZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIHx8IG1fY29uZGl0aW9uU2V0Lm5lZWRJbXB1cmVQ
cm9wZXJ0eVdhdGNocG9pbnQoKSkKKyAgICAgICAgdm0ucmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1w
dXJlUHJvcGVydHkoaWRlbnQsIHN0YXRlLmFkZFdhdGNocG9pbnQoKSk7CisKKyAgICBpZiAoYWRk
aXRpb25hbFNldCgpKQorICAgICAgICBhZGRpdGlvbmFsU2V0KCktPmFkZChzdGF0ZS5hZGRXYXRj
aHBvaW50KCkpOworCisgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29u
ZGl0aW9uIDogbV9jb25kaXRpb25TZXQpIHsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBjb25kaXRpb24ub2JqZWN0KCktPnN0cnVjdHVyZSgpOworCisgICAgICAgIGlmIChjb25kaXRp
b24uaXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKSB7CisgICAg
ICAgICAgICBzdHJ1Y3R1cmUtPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KHN0YXRlLmFkZFdhdGNo
cG9pbnQoY29uZGl0aW9uKSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbmRpdGlvbi5zdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlB
c3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUpKTsKKyAgICAgICAgaml0
Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNvbmRpdGlvbi5vYmplY3QoKSksIHNj
cmF0Y2hHUFIpOworICAgICAgICBzdGF0ZS5mYWlsQW5kUmVwYXRjaC5hcHBlbmQoCisgICAgICAg
ICAgICBqaXQuYnJhbmNoU3RydWN0dXJlKAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
Tm90RXF1YWwsCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgc3RydWN0
dXJlKSk7CisgICAgfQorCisgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICBjYXNlIEluSGl0Ogor
ICAgIGNhc2UgSW5NaXNzOgorICAgICAgICBqaXQuYm94Qm9vbGVhblBheWxvYWQobV90eXBlID09
IEluSGl0LCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgc3RhdGUuc3VjY2VlZCgp
OworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIE1pc3M6CisgICAgICAgIGppdC5tb3ZlVHJ1
c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIHZhbHVlUmVncyk7CisgICAgICAgIHN0YXRlLnN1Y2Nl
ZWQoKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBMb2FkOgorICAgIGNhc2UgR2V0dGVy
OgorICAgIGNhc2UgU2V0dGVyOgorICAgIGNhc2UgQ3VzdG9tR2V0dGVyOgorICAgIGNhc2UgQ3Vz
dG9tU2V0dGVyOiB7CisgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG1fb2Zmc2V0KSkgeworICAg
ICAgICAgICAgU3RydWN0dXJlKiBjdXJyU3RydWN0dXJlOworICAgICAgICAgICAgaWYgKG1fY29u
ZGl0aW9uU2V0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBjdXJyU3RydWN0dXJlID0gc3Ry
dWN0dXJlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGN1cnJTdHJ1Y3R1cmUg
PSBtX2NvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9iamVjdCgpLT5zdHJ1Y3R1cmUo
KTsKKyAgICAgICAgICAgIGN1cnJTdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJl
cGxhY2VtZW50cyh2bSwgb2Zmc2V0KTsKKyAgICAgICAgfQorCisgICAgICAgIEdQUlJlZyBiYXNl
Rm9yR2V0R1BSOworICAgICAgICBpZiAodmlhUHJveHkoKSkgeworICAgICAgICAgICAgYmFzZUZv
ckdldEdQUiA9IHZhbHVlUmVncy5wYXlsb2FkR1BSKCk7CisgICAgICAgICAgICBqaXQubG9hZFB0
cigKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNQcm94
eTo6dGFyZ2V0T2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIGJhc2VGb3JHZXRHUFIpOworICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgIGJhc2VGb3JHZXRHUFIgPSBiYXNlR1BSOworCisgICAg
ICAgIEdQUlJlZyBiYXNlRm9yQWNjZXNzR1BSOworICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGppdC5tb3ZlKAorICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihjb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5v
YmplY3QoKSksCisgICAgICAgICAgICAgICAgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBiYXNl
Rm9yQWNjZXNzR1BSID0gc2NyYXRjaEdQUjsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBi
YXNlRm9yQWNjZXNzR1BSID0gYmFzZUZvckdldEdQUjsKKworICAgICAgICBHUFJSZWcgbG9hZGVk
VmFsdWVHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICBpZiAobV90eXBlICE9IEN1c3RvbUdl
dHRlciAmJiBtX3R5cGUgIT0gQ3VzdG9tU2V0dGVyKSB7CisgICAgICAgICAgICBpZiAobV90eXBl
ID09IExvYWQpCisgICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIgPSB2YWx1ZVJlZ3MucGF5
bG9hZEdQUigpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVl
R1BSID0gc2NyYXRjaEdQUjsKKworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFI7CisgICAg
ICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKKyAgICAgICAgICAgICAgICBzdG9y
YWdlR1BSID0gYmFzZUZvckFjY2Vzc0dQUjsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgIGppdC5sb2FkUHRyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoYmFzZUZvckFjY2Vzc0dQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwKKyAg
ICAgICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIpOworICAgICAgICAgICAgICAgIHN0b3Jh
Z2VHUFIgPSBsb2FkZWRWYWx1ZUdQUjsKKyAgICAgICAgICAgIH0KKworI2lmIFVTRShKU1ZBTFVF
NjQpCisgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6QWRkcmVzcyhzdG9yYWdl
R1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShvZmZzZXQpKSwgbG9hZGVkVmFsdWVHUFIpOworI2Vs
c2UKKyAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gTG9hZCkgeworICAgICAgICAgICAgICAgIGpp
dC5sb2FkMzIoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdG9y
YWdlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShvZmZzZXQpICsgVGFnT2Zmc2V0KSwKKyAgICAg
ICAgICAgICAgICAgICAgdmFsdWVSZWdzLnRhZ0dQUigpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGppdC5sb2FkMzIoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KHN0b3JhZ2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKG9mZnNldCkgKyBQYXlsb2FkT2Zmc2V0
KSwKKyAgICAgICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUik7CisjZW5kaWYKKyAgICAgICAgfQor
CisgICAgICAgIC8vIFN0dWZmIGZvciBjdXN0b20gZ2V0dGVycy4KKyAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpDYWxsIG9wZXJhdGlvbkNhbGw7CisgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBoYW5k
bGVyQ2FsbDsKKworICAgICAgICAvLyBTdHVmZiBmb3IgSlMgZ2V0dGVycy4KKyAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpEYXRhTGFiZWxQdHIgYWRkcmVzc09mTGlua0Z1bmN0aW9uQ2hlY2s7CisgICAg
ICAgIENDYWxsSGVscGVyczo6Q2FsbCBmYXN0UGF0aENhbGw7CisgICAgICAgIENDYWxsSGVscGVy
czo6Q2FsbCBzbG93UGF0aENhbGw7CisKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHN1Y2Nl
c3M7CisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBmYWlsOworICAgICAgICBpZiAobV90eXBl
ICE9IExvYWQgJiYgbV90eXBlICE9IE1pc3MpIHsKKyAgICAgICAgICAgIC8vIE5lZWQgdG8gbWFr
ZSBzdXJlIHRoYXQgd2hlbmV2ZXIgdGhpcyBjYWxsIGlzIG1hZGUgaW4gdGhlIGZ1dHVyZSwgd2Ug
cmVtZW1iZXIgdGhlCisgICAgICAgICAgICAvLyBwbGFjZSB0aGF0IHdlIG1hZGUgaXQgZnJvbS4K
KyAgICAgICAgICAgIGppdC5zdG9yZTMyKAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKHN0dWJJbmZvLmNhbGxTaXRlSW5kZXguYml0cygpKSwKKyAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KEpT
U3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7CisKKyAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gR2V0
dGVyIHx8IG1fdHlwZSA9PSBTZXR0ZXIpIHsKKyAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBK
UyBjYWxsIHVzaW5nIGEgSlMgY2FsbCBpbmxpbmUgY2FjaGUuIEFzc3VtZSB0aGF0OgorICAgICAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gLSBTUCBpcyBhbGlnbmVkIGFuZCByZXBy
ZXNlbnRzIHRoZSBleHRlbnQgb2YgdGhlIGNhbGxpbmcgY29tcGlsZXIncyBzdGFjayB1c2FnZS4K
KyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIC0gRlAgaXMgc2V0IGNvcnJl
Y3RseSAoaS5lLiBpdCBwb2ludHMgdG8gdGhlIGNhbGxlcidzIGNhbGwgZnJhbWUgaGVhZGVyKS4K
KyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIC0gU1AgLSBGUCBpcyBhbiBh
bGlnbmVkIGRpZmZlcmVuY2UuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAv
LyAtIEFueSBieXRlIGJldHdlZW4gRlAgKGV4Y2x1c2l2ZSkgYW5kIFNQIChpbmNsdXNpdmUpIGNv
dWxkIGJlIGxpdmUgaW4gdGhlIGNhbGxpbmcKKyAgICAgICAgICAgICAgICAvLyAgIGNvZGUuCisg
ICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBUaGVyZWZvcmUsIHdlIHRlbXBv
cmFyaWx5IGdyb3cgdGhlIHN0YWNrIGZvciB0aGUgcHVycG9zZSBvZiB0aGUgY2FsbCBhbmQgdGhl
bgorICAgICAgICAgICAgICAgIC8vIHNocmluayBpdCBhZnRlci4KKworICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKCFtX3JhcmVEYXRhLT5jYWxsTGlua0luZm8pOworICAgICAgICAgICAg
ICAgIG1fcmFyZURhdGEtPmNhbGxMaW5rSW5mbyA9IHN0ZDo6bWFrZV91bmlxdWU8Q2FsbExpbmtJ
bmZvPigpOworICAgICAgICAgICAgICAgIG1fcmFyZURhdGEtPnNldFVwQ2FsbChDYWxsTGlua0lu
Zm86OkNhbGwsIHN0dWJJbmZvLmNvZGVPcmlnaW4sIGxvYWRlZFZhbHVlR1BSKTsKKworICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKKworICAgICAgICAgICAgICAg
IC8vIFRoZXJlIGlzIGEgInRoaXMiIGFyZ3VtZW50LgorICAgICAgICAgICAgICAgIHVuc2lnbmVk
IG51bWJlck9mUGFyYW1ldGVycyA9IDE7CisgICAgICAgICAgICAgICAgLy8gLi4uIGFuZCBhIHZh
bHVlIGFyZ3VtZW50IGlmIHdlJ3JlIGNhbGxpbmcgYSBzZXR0ZXIuCisgICAgICAgICAgICAgICAg
aWYgKG1fdHlwZSA9PSBTZXR0ZXIpCisgICAgICAgICAgICAgICAgICAgIG51bWJlck9mUGFyYW1l
dGVycysrOworCisgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBhY2Nlc3NvcjsgaWYgdGhlcmUg
YWluJ3Qgb25lIHRoZW4gdGhlIHJlc3VsdCBpcyBqc1VuZGVmaW5lZCgpLgorICAgICAgICAgICAg
ICAgIGlmIChtX3R5cGUgPT0gU2V0dGVyKSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2Fk
UHRyKAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGxvYWRl
ZFZhbHVlR1BSLCBHZXR0ZXJTZXR0ZXI6Om9mZnNldE9mU2V0dGVyKCkpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKAorICAgICAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKGxvYWRlZFZhbHVlR1BSLCBHZXR0ZXJTZXR0ZXI6Om9mZnNl
dE9mR2V0dGVyKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIpOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBy
ZXR1cm5VbmRlZmluZWQgPSBqaXQuYnJhbmNoVGVzdFB0cigKKyAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpaZXJvLCBsb2FkZWRWYWx1ZUdQUik7CisKKyAgICAgICAgICAgICAgICB1
bnNpZ25lZCBudW1iZXJPZlJlZ3NGb3JDYWxsID0gSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6
ZSArIG51bWJlck9mUGFyYW1ldGVyczsKKworICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJl
ck9mQnl0ZXNGb3JDYWxsID0KKyAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZSZWdzRm9yQ2Fs
bCAqIHNpemVvZihSZWdpc3RlcikgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7CisKKyAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwgPQorICAgICAg
ICAgICAgICAgICAgICBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXR3
cygpLCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCk7CisKKyAgICAgICAgICAgICAgICBqaXQuc3ViUHRy
KAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihhbGlnbmVk
TnVtYmVyT2ZCeXRlc0ZvckNhbGwpLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
QWRkcmVzcyBjYWxsZWVGcmFtZSA9IENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwKKyAgICAgICAgICAg
ICAgICAgICAgLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMp
KSk7CisKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMigKKyAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobnVtYmVyT2ZQYXJhbWV0ZXJzKSwKKyAgICAgICAg
ICAgICAgICAgICAgY2FsbGVlRnJhbWUud2l0aE9mZnNldChKU1N0YWNrOjpBcmd1bWVudENvdW50
ICogc2l6ZW9mKFJlZ2lzdGVyKSArIFBheWxvYWRPZmZzZXQpKTsKKworICAgICAgICAgICAgICAg
IGppdC5zdG9yZUNlbGwoCisgICAgICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSLCBjYWxs
ZWVGcmFtZS53aXRoT2Zmc2V0KEpTU3RhY2s6OkNhbGxlZSAqIHNpemVvZihSZWdpc3RlcikpKTsK
KworICAgICAgICAgICAgICAgIGppdC5zdG9yZUNlbGwoCisgICAgICAgICAgICAgICAgICAgIGJh
c2VGb3JHZXRHUFIsCisgICAgICAgICAgICAgICAgICAgIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQo
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIp
KSk7CisKKyAgICAgICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsU2V0dGVyKSB7CisgICAgICAg
ICAgICAgICAgICAgIGppdC5zdG9yZVZhbHVlKAorICAgICAgICAgICAgICAgICAgICAgICAgdmFs
dWVSZWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGVlRnJhbWUud2l0aE9mZnNldCgK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgx
KS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpKTsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgc2xvd0Nhc2UgPSBqaXQuYnJhbmNoUHRy
V2l0aFBhdGNoKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBs
b2FkZWRWYWx1ZUdQUiwgYWRkcmVzc09mTGlua0Z1bmN0aW9uQ2hlY2ssCisgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigwKSk7CisKKyAgICAgICAgICAgICAg
ICBmYXN0UGF0aENhbGwgPSBqaXQubmVhckNhbGwoKTsKKworICAgICAgICAgICAgICAgIGppdC5h
ZGRQdHIoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFs
aWduZWROdW1iZXJPZkJ5dGVzRm9yQ2FsbCksCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIGlmIChraW5kID09
IENhbGxHZXR0ZXIpCisgICAgICAgICAgICAgICAgICAgIGppdC5zZXR1cFJlc3VsdHModmFsdWVS
ZWdzKTsKKworICAgICAgICAgICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAg
ICAgICAgICAgIHNsb3dDYXNlLmxpbmsoJmppdCk7CisKKyAgICAgICAgICAgICAgICBqaXQubW92
ZShsb2FkZWRWYWx1ZUdQUiwgR1BSSW5mbzo6cmVnVDApOworI2lmIFVTRShKU1ZBTFVFMzJfNjQp
CisgICAgICAgICAgICAgICAgLy8gV2UgKmFsd2F5cyoga25vdyB0aGF0IHRoZSBnZXR0ZXIvc2V0
dGVyLCBpZiBub24tbnVsbCwgaXMgYSBjZWxsLgorICAgICAgICAgICAgICAgIGppdC5tb3ZlKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBHUFJJbmZvOjpyZWdU
MSk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIobV9yYXJlRGF0YS0+Y2FsbExpbmtJbmZvLmdldCgpKSwgR1BSSW5mbzo6cmVnVDIp
OworICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCA9IGppdC5uZWFyQ2FsbCgpOworCisgICAg
ICAgICAgICAgICAgaml0LmFkZFB0cigKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxsKSwKKyAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgICAg
ICAgICAgaWYgKGtpbmQgPT0gQ2FsbEdldHRlcikKKyAgICAgICAgICAgICAgICAgICAgaml0LnNl
dHVwUmVzdWx0cyh2YWx1ZVJlZ3MpOworCisgICAgICAgICAgICAgICAgZG9uZS5hcHBlbmQoaml0
Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuVW5kZWZpbmVkLmxpbmsoJmppdCk7CisK
KyAgICAgICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsR2V0dGVyKQorICAgICAgICAgICAgICAg
ICAgICBqaXQubW92ZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCB2YWx1ZVJlZ3MpOworCisg
ICAgICAgICAgICAgICAgZG9uZS5saW5rKCZqaXQpOworCisgICAgICAgICAgICAgICAgc3RhdGUu
Y2FsbGJhY2tzLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgWyZdIChMaW5rQnVmZmVyJiBs
aW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3JhcmVEYXRhLT5jYWxsTGlu
a0luZm8tPnNldENhbGxMb2NhdGlvbnMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlu
a0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoc2xvd1BhdGhDYWxsKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoYWRkcmVzc09mTGlua0Z1bmN0aW9u
Q2hlY2spLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25P
Zk5lYXJDYWxsKGZhc3RQYXRoQ2FsbCkpOworCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5r
QnVmZmVyLmxpbmsoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdldENUSVN0
dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CisgICAgICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBnZXR0ZXI6IEVu
Y29kZWRKU1ZhbHVlICgqR2V0VmFsdWVGdW5jKShFeGVjU3RhdGUqLCBKU09iamVjdCogc2xvdEJh
c2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAg
ICAgICAvLyBzZXR0ZXI6IHZvaWQgKCpQdXRWYWx1ZUZ1bmMpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiBiYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSk7
CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsQ3Vz
dG9tR2V0dGVyKSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICBiYXNlRm9yQWNjZXNzR1BSLCBiYXNl
Rm9yR2V0R1BSLAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKHByb3BlcnR5TmFtZS5pbXBsKCkpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlRm9y
QWNjZXNzR1BSLCBiYXNlRm9yR2V0R1BSLCB2YWx1ZVJlZ3MuZ3ByKCkpOworI2Vsc2UKKyAgICAg
ICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsQ3VzdG9tR2V0dGVyKSB7CisgICAgICAgICAgICAg
ICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoCisgICAgICAgICAgICAgICAg
ICAgICAgICBiYXNlRm9yQWNjZXNzR1BSLCBiYXNlRm9yR2V0R1BSLAorICAgICAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksCisg
ICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIocHJvcGVy
dHlOYW1lLmltcGwoKSkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoCisgICAgICAgICAgICAgICAg
ICAgICAgICBiYXNlRm9yQWNjZXNzR1BSLCBiYXNlRm9yR2V0R1BSLAorICAgICAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksCisg
ICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB2YWx1ZVJlZ3Mu
dGFnR1BSKCkpOworICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgICAgIGpp
dC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgJnZtLT50b3BDYWxsRnJhbWUp
OworCisgICAgICAgICAgICAgICAgb3BlcmF0aW9uQ2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAg
ICAgICAgICAgaWYgKGtpbmQgPT0gQ2FsbEN1c3RvbUdldHRlcikKKyAgICAgICAgICAgICAgICAg
ICAgaml0LnNldHVwUmVzdWx0cyh2YWx1ZVJlZ3MpOworICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcCBub0V4Y2VwdGlvbiA9CisgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0RXhj
ZXB0aW9uQ2hlY2soQ0NhbGxIZWxwZXJzOjpJbnZlcnRlZEV4Y2VwdGlvbkNoZWNrKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50cyhDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIodm0pLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAg
ICAgICAgICAgaGFuZGxlckNhbGwgPSBqaXQuY2FsbCgpOworICAgICAgICAgICAgICAgIGppdC5q
dW1wVG9FeGNlcHRpb25IYW5kbGVyKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBu
b0V4Y2VwdGlvbi5saW5rKCZqaXQpOworCisgICAgICAgICAgICAgICAgc3RhdGUuY2FsbGJhY2tz
LmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgWyZdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsob3BlcmF0aW9uQ2Fs
bCwgRnVuY3Rpb25QdHIobV9yYXJlRGF0YS0+Y3VzdG9tQWNjZXNzb3Iub3BhcXVlKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoaGFuZGxlckNhbGwsIGxvb2t1cEV4
Y2VwdGlvbkhhbmRsZXIpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7CiAgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBjYXNlIFJlcGxhY2U6IHsKKyAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG1f
b2Zmc2V0KSkgeworICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUoCisgICAgICAgICAgICAgICAg
dmFsdWVSZWdzLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAg
ICAgICAgICAgICAgICAgYmFzZUdQUiwKKyAgICAgICAgICAgICAgICAgICAgSlNPYmplY3Q6Om9m
ZnNldE9mSW5saW5lU3RvcmFnZSgpICsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0SW5Jbmxp
bmVTdG9yYWdlKG1fb2Zmc2V0KSAqIHNpemVvZihKU1ZhbHVlKSkpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
aml0LnN0b3JlVmFsdWUoCisgICAgICAgICAgICAgICAgdmFsdWVSZWdzLAorICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICAgICAgc2NyYXRjaEdQ
UjEsIG9mZnNldEluQnV0dGVyZmx5KG1fb2Zmc2V0KSAqIHNpemVvZihKU1ZhbHVlKSkpOworICAg
ICAgICB9CisgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGNhc2UgVHJhbnNpdGlvbjogeworICAgICAgICAvLyBBY2Nlc3NDYXNlOjp0cmFuc2l0
aW9uKCkgc2hvdWxkIGhhdmUgcmV0dXJuZWQgbnVsbC4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
R1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgPj0gNiB8fCAhc3RydWN0dXJlKCktPm91dE9mTGlu
ZUNhcGFjaXR5KCkgfHwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgPT0gbmV3U3Ry
dWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCgh
b2xkU3RydWN0dXJlLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKTsKKworICAgICAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOworCisgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvciBhbGxvY2F0b3Ioc3R1YkluZm8ucGF0Y2gudXNlZFJlZ2lzdGVycyk7CisgICAgICAg
IGFsbG9jYXRvci5sb2NrKGJhc2VHUFIpOworICAgICAgICBhbGxvY2F0b3IubG9jayh2YWx1ZVJl
Z3MpOworICAgICAgICBhbGxvY2F0b3IubG9jayhzY3JhdGNoR1BSKTsKKworICAgICAgICBHUFJS
ZWcgc2NyYXRjaEdQUjIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgICAg
IEdQUlJlZyBzY3JhdGNoR1BSMzsKKyAgICAgICAgaWYgKG5ld1N0cnVjdHVyZSgpLT5vdXRPZkxp
bmVDYXBhY2l0eSgpICE9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpCisgICAgICAg
ICAgICAmJiBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkKKyAgICAgICAgICAgIHNj
cmF0Y2hHUFIzID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBzY3JhdGNoR1BSMyA9IEludmFsaWRHUFJSZWc7CisKKyAgICAgICAgc2l6
ZV90IG51bWJlck9mUGFkZGluZ0J5dGVzID0gYWxsb2NhdGUucHJlc2VydmVSZXVzZWRSZWdpc3Rl
cnNCeVB1c2hpbmcoaml0KTsKKworICAgICAgICBBU1NFUlQoc3RydWN0dXJlKCktPnRyYW5zaXRp
b25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOworCisgICAgICAgIGJvb2wgc2Ny
YXRjaEdQUkhhc1N0b3JhZ2UgPSBmYWxzZTsKKworICAgICAgICBpZiAobmV3U3RydWN0dXJlKCkt
Pm91dE9mTGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkp
IHsKKyAgICAgICAgICAgIHNpemVfdCBuZXdTaXplID0gbmV3U3RydWN0dXJlKCktPm91dE9mTGlu
ZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7CisgICAgICAgICAgICBDb3BpZWRBbGxvY2F0
b3IqIGNvcGllZEFsbG9jYXRvciA9ICZ2bS0+aGVhcC5zdG9yYWdlQWxsb2NhdG9yKCk7CisKKyAg
ICAgICAgICAgIGlmICghc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KSB7CisgICAgICAg
ICAgICAgICAgaml0LmxvYWRQdHIoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5n
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoCisgICAgICAg
ICAgICAgICAgICAgIGppdC5icmFuY2hTdWJQdHIoCisgICAgICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OlNpZ25lZCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobmV3U2l6ZSks
IHNjcmF0Y2hHUFIpKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwg
JmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKKyAgICAgICAgICAgICAgICBq
aXQubmVnUHRyKHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoCisgICAg
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKCZjb3BpZWRBbGxv
Y2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAg
ICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1ZhbHVlKSks
IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzaXpl
X3Qgb2xkU2l6ZSA9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihK
U1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIzKTsK
KyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRS
ZW1haW5pbmcsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZCgK
KyAgICAgICAgICAgICAgICAgICAgaml0LmJyYW5jaFN1YlB0cigKKyAgICAgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6U2lnbmVkLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihu
ZXdTaXplKSwgc2NyYXRjaEdQUikpOworICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cihzY3Jh
dGNoR1BSLCAmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcpOworICAgICAgICAg
ICAgICAgIGppdC5uZWdQdHIoc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgaml0LmFkZFB0
cigKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MoJmNv
cGllZEFsbG9jYXRvci0+bV9jdXJyZW50UGF5bG9hZEVuZCksIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEpT
VmFsdWUpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBzY3JhdGNo
R1BSID0gbmV3IHN0b3JhZ2UsIHNjcmF0Y2hHUFIzID0gb2xkIHN0b3JhZ2UsCisgICAgICAgICAg
ICAgICAgLy8gc2NyYXRjaEdQUjIgPSBhdmFpbGFibGUKKyAgICAgICAgICAgICAgICBmb3IgKHNp
emVfdCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBvbGRTaXplOyBvZmZzZXQgKz0gc2l6ZW9mKHZvaWQq
KSkgeworICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFB0cigKKyAgICAgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzY3JhdGNoR1BSMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAtc3RhdGljX2Nhc3Q8
cHRyZGlmZl90PigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICsgc2l6
ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAg
c2NyYXRjaEdQUjIpOworICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoCisgICAgICAg
ICAgICAgICAgICAgICAgICBzY3JhdGNoR1BSMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNo
R1BSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+
KG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZih2b2lkKikpKSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBqaXQuc3RvcmVQdHIoc2NyYXRj
aEdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJzYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFJIYXNTdG9yYWdlID0gdHJ1ZTsKKyAg
ICAgICAgfQorCisgICAgICAgIHVpbnQzMl90IHN0cnVjdHVyZUJpdHMgPSBiaXR3aXNlX2Nhc3Q8
dWludDMyX3Q+KHN0cnVjdHVyZS0+aWQoKSk7CisgICAgICAgIGppdC5zdG9yZTMyKAorICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZUJpdHMpLAorICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSk7CisKKyAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG1fb2Zmc2V0KSkgeworICAg
ICAgICAgICAgaml0LnN0b3JlVmFsdWUoCisgICAgICAgICAgICAgICAgdmFsdWVSZWdzLAorICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICAgICAg
YmFzZUdQUiwKKyAgICAgICAgICAgICAgICAgICAgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3Rv
cmFnZSgpICsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKG1fb2Zm
c2V0ICogc2l6ZW9mKEpTVmFsdWUpKSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
aWYgKCFzY3JhdGNoR1BSSGFzU3RvcmFnZSkKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgp
KSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSgKKyAgICAgICAgICAg
ICAgICB2YWx1ZVJlZ3MsCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNj
cmF0Y2hHUFIsIG9mZnNldEluQnV0dGVyZmx5KG1fb2Zmc2V0KSAqIHNpemVvZihKU1ZhbHVlKSkp
OworICAgICAgICB9CisKKyAgICAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IG51
bGxwdHI7CisgICAgICAgIGlmIChuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAh
PSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkKKyAgICAgICAgICAgIHNjcmF0Y2hC
dWZmZXIgPSB2bS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoYWxsb2NhdG9yLmRlc2lyZWRTY3JhdGNo
QnVmZmVyU2l6ZUZvckNhbGwoKSk7CisKKyNpZiBFTkFCTEUoR0dDKQorICAgICAgICBpZiAobmV3
U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlKCktPm91dE9mTGlu
ZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsRmx1c2hX
cml0ZUJhcnJpZXJCdWZmZXI7CisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgb3duZXJJ
c1JlbWVtYmVyZWRPckluRWRlbiA9IGppdC5qdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihiYXNl
R1BSKTsKKyAgICAgICAgICAgIFdyaXRlQmFycmllckJ1ZmZlciYgd3JpdGVCYXJyaWVyQnVmZmVy
ID0gaml0LnZtKCktPmhlYXAud3JpdGVCYXJyaWVyQnVmZmVyKCk7CisgICAgICAgICAgICBqaXQu
bG9hZDMyKHdyaXRlQmFycmllckJ1ZmZlci5jdXJyZW50SW5kZXhBZGRyZXNzKCksIHNjcmF0Y2hH
UFIyKTsKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBuZWVkVG9GbHVzaCA9CisgICAg
ICAgICAgICAgICAgaml0LmJyYW5jaDMyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OkFib3ZlT3JFcXVhbCwgc2NyYXRjaEdQUjIsCisgICAgICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKHdyaXRlQmFycmllckJ1ZmZlci5jYXBhY2l0eSgpKSk7CisK
KyAgICAgICAgICAgIGppdC5hZGQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgc2Ny
YXRjaEdQUjIpOworICAgICAgICAgICAgaml0LnN0b3JlMzIoc2NyYXRjaEdQUjIsIHdyaXRlQmFy
cmllckJ1ZmZlci5jdXJyZW50SW5kZXhBZGRyZXNzKCkpOworCisgICAgICAgICAgICBqaXQubW92
ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIod3JpdGVCYXJyaWVyQnVmZmVyLmJ1ZmZlcigp
KSwgc2NyYXRjaEdQUjEpOworICAgICAgICAgICAgLy8gV2UgdXNlIGFuIG9mZnNldCBvZiAtc2l6
ZW9mKHZvaWQqKSBiZWNhdXNlIHdlIGFscmVhZHkgYWRkZWQgMSB0byBzY3JhdGNoR1BSMi4KKyAg
ICAgICAgICAgIGppdC5zdG9yZVB0cigKKyAgICAgICAgICAgICAgICBiYXNlR1BSLAorICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6QmFzZUluZGV4KAorICAgICAgICAgICAgICAgICAgICBz
Y3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIENDYWxsSGVscGVyczo6U2NhbGVQdHIsCisgICAgICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KC1zaXplb2Yodm9pZCopKSkpOworCisg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZVdpdGhCYXJyaWVyID0gaml0Lmp1bXAo
KTsKKyAgICAgICAgICAgIG5lZWRUb0ZsdXNoLmxpbmsoJmppdCk7CisKKyAgICAgICAgICAgIGFs
bG9jYXRvci5wcmVzZXJ2ZVVzZWRSZWdpc3RlcnNUb1NjcmF0Y2hCdWZmZXJGb3JDYWxsKGppdCwg
c2NyYXRjaEJ1ZmZlciwgc2NyYXRjaEdQUjIpOworICAgICAgICAgICAgaml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShiYXNlR1BSKTsKKyAgICAgICAgICAgIGNhbGxGbHVzaFdyaXRlQmFy
cmllckJ1ZmZlciA9IGppdC5jYWxsKCk7CisgICAgICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVVz
ZWRSZWdpc3RlcnNGcm9tU2NyYXRjaEJ1ZmZlckZvckNhbGwoCisgICAgICAgICAgICAgICAgaml0
LCBzY3JhdGNoQnVmZmVyLCBzY3JhdGNoR1BSMik7CisKKyAgICAgICAgICAgIGRvbmVXaXRoQmFy
cmllci5saW5rKCZqaXQpOworICAgICAgICAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5s
aW5rKCZqaXQpOworCisgICAgICAgICAgICBzdGF0ZS5jYWxsYmFja3MuYXBwZW5kKAorICAgICAg
ICAgICAgICAgIFsmXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAg
ICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbEZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyLCBvcGVyYXRp
b25GbHVzaFdyaXRlQmFycmllckJ1ZmZlcik7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
IH0KKyNlbmRpZiAvLyBFTkFCTEUoR0dDKQorICAgICAgICAKKyAgICAgICAgc3RhdGUuc3VjY2Vl
ZCgpOworCisgICAgICAgIGlmIChuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAh
PSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgeworICAgICAgICAgICAgc2xvd1Bh
dGgubGluaygmaml0KTsKKyAgICAgICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0
ZXJzQnlQb3BwaW5nKGppdCwgbnVtYmVyT2ZQYWRkaW5nQnl0ZXMpOworICAgICAgICAgICAgYWxs
b2NhdG9yLnByZXNlcnZlVXNlZFJlZ2lzdGVyc1RvU2NyYXRjaEJ1ZmZlckZvckNhbGwoaml0LCBz
Y3JhdGNoQnVmZmVyLCBzY3JhdGNoR1BSKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAg
ICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKKyAgICAgICAgICAgICAgICBiYXNl
R1BSLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1
cmUpLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIHZhbHVlR1BSKTsKKyNlbHNlCisgICAgICAg
ICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKAorICAgICAgICAgICAgICAgIGJh
c2VHUFIsCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVj
dHVyZSksCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2xvdC5j
YWNoZWRPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgdmFsdWVHUFIsIHZhbHVlVGFnR1BSKTsK
KyNlbmRpZgorICAgICAgICAgICAgb3BlcmF0aW9uQ2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAg
ICAgICBhbGxvY2F0b3IucmVzdG9yZVVzZWRSZWdpc3RlcnNGcm9tU2NyYXRjaEJ1ZmZlckZvckNh
bGwoamksIHNjcmF0Y2hCdWZmZXIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgc3RhdGUuc3Vj
Y2VlZCgpOworCisgICAgICAgICAgICBzdGF0ZS5jYWxsYmFja3MuYXBwZW5kKAorICAgICAgICAg
ICAgICAgIFsmXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAg
ICBsaW5rQnVmZmVyLmxpbmsob3BlcmF0aW9uQ2FsbCwgb3BlcmF0aW9uUmVhbGxvY2F0ZVN0b3Jh
Z2VBbmRGaW5pc2hQdXQpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBjYXNlIEFycmF5TGVuZ3RoOiB7CisgICAgICAgIGppdC5s
b2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6
OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHNjcmF0
Y2hHUFIpOworICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZCgKKyAgICAgICAgICAg
IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Okxlc3NUaGFuLCBzY3JhdGNoR1BSLCBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMigwKSkpOworICAgICAgICBqaXQuYm94SW50MzIoc2NyYXRjaEdQ
UiwgdmFsdWVSZWdzKTsKKyAgICAgICAgc3RhdGUuc3VjY2VlZCgpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgY2FzZSBTdHJpbmdMZW5ndGg6IHsKKyAgICAgICAgaml0LmxvYWQzMihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNTdHJpbmc6Om9mZnNldE9mTGVuZ3RoKCkp
LCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgaml0LmJveEludDMyKHZhbHVlUmVn
cy5wYXlsb2FkR1BSKCksIHZhbHVlUmVncyk7CisgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0gfQogICAgIAotICAgIG1fbGlzdC5hcHBlbmQoR2V0QnlJZEFj
Y2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKHN0dWJJbmZvKSk7CisgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogUG9seW1vcnBo
aWNHZXRCeUlkTGlzdDo6ZnJvbShTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCitQb2x5bW9y
cGhpY0FjY2Vzczo6UG9seW1vcnBoaWNBY2Nlc3MoKSB7IH0KK1BvbHltb3JwaGljQWNjZXNzOjp+
UG9seW1vcnBoaWNBY2Nlc3MoKSB7IH0KKworTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIFBvbHltb3Jw
aGljQWNjZXNzOjpyZWdlbmVyYXRlV2l0aENhc2VzKAorICAgIFZNJiB2bSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgY29uc3QgSWRlbnRpZmllciYg
aWRlbnQsCisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPj4gb3JpZ2luYWxD
YXNlc1RvQWRkKQogewotICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRf
YnlfaWRfbGlzdCkKLSAgICAgICAgcmV0dXJuIHN0dWJJbmZvLnUuZ2V0QnlJZExpc3QubGlzdDsK
LSAgICAKLSAgICBBU1NFUlQoCi0gICAgICAgIHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNz
X2dldF9ieV9pZF9zZWxmCi0gICAgICAgIHx8IHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNz
X3Vuc2V0KTsKLSAgICAKLSAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiByZXN1bHQgPSBuZXcg
UG9seW1vcnBoaWNHZXRCeUlkTGlzdChzdHViSW5mbyk7CisgICAgLy8gVGhpcyBtZXRob2Qgd2ls
bCBhZGQgdGhlIG9yaWdpbmFsQ2FzZXNUb0FkZCB0byB0aGUgbGlzdCBvbmUgYXQgYSB0aW1lIHdo
aWxlIHByZXNlcnZpbmcgdGhlCisgICAgLy8gaW52YXJpYW50czoKKyAgICAvLyAtIElmIGEgbmV3
bHkgYWRkZWQgY2FzZSBjYW5SZXBsYWNlKCkgYW55IGV4aXN0aW5nIGNhc2UsIHRoZW4gdGhlIGV4
aXN0aW5nIGNhc2UgaXMgcmVtb3ZlZCBiZWZvcmUKKyAgICAvLyAgIHRoZSBuZXcgY2FzZSBpcyBh
ZGRlZC4gUmVtb3ZhbCBkb2Vzbid0IGNoYW5nZSBvcmRlciBvZiB0aGUgbGlzdC4gQW55IG51bWJl
ciBvZiBleGlzdGluZyBjYXNlcworICAgIC8vICAgY2FuIGJlIHJlbW92ZWQgdmlhIHRoZSBjYW5S
ZXBsYWNlKCkgcnVsZS4KKyAgICAvLyAtIENhc2VzIGluIHRoZSBsaXN0IGFsd2F5cyBhcHBlYXIg
aW4gYXNjZW5kaW5nIG9yZGVyIG9mIHRpbWUgb2YgYWRkaXRpb24uIFRoZXJlZm9yZSwgaWYgeW91
CisgICAgLy8gICBjYXNjYWRlIHRocm91Z2ggdGhlIGNhc2VzIGluIHJldmVyc2Ugb3JkZXIsIHlv
dSB3aWxsIGdldCB0aGUgbW9zdCByZWNlbnQgY2FzZXMgZmlyc3QuCisgICAgLy8gLSBJZiB0aGlz
IG1ldGhvZCBmYWlscyAocmV0dXJucyBudWxsLCBkb2Vzbid0IGFkZCB0aGUgY2FzZXMpLCB0aGVu
IGJvdGggdGhlIHByZXZpb3VzIGNhc2UgbGlzdAorICAgIC8vICAgYW5kIHRoZSBwcmV2aW91cyBz
dHViIGFyZSBrZXB0IGludGFjdCBhbmQgdGhlIG5ldyBjYXNlcyBhcmUgZGVzdHJveWVkLiBJdCdz
IE9LIHRvIGF0dGVtcHQgdG8KKyAgICAvLyAgIGFkZCBtb3JlIHRoaW5ncyBhZnRlciBmYWlsdXJl
LgogICAgIAotICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkTGlzdChyZXN1bHQpOworICAgIC8vIEZp
cnN0LCB2ZXJpZnkgdGhhdCB3ZSBjYW4gZ2VuZXJhdGUgY29kZSBmb3IgYWxsIG9mIHRoZSBuZXcg
Y2FzZXMgd2hpbGUgZWxpbWluYXRpbmcgYW55IG9mIHRoZQorICAgIC8vIG5ldyBjYXNlcyB0aGF0
IHJlcGxhY2UgZWFjaCBvdGhlci4KKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nh
c2U+PiBjYXNlc1RvQWRkOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvcmlnaW5hbENh
c2VzVG9BZGQuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nh
c2U+IG15Q2FzZSA9IHN0ZDo6bW92ZShvcmlnaW5hbENhc2VzVG9BZGRbaV0pOworCisgICAgICAg
IC8vIEFkZCBpdCBvbmx5IGlmIGl0IGlzIG5vdCByZXBsYWNlZCBieSB0aGUgc3Vic2VxdWVudCBj
YXNlcyBpbiB0aGUgbGlzdC4KKyAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGogPSBpICsgMTsgaiA8IG9yaWdpbmFsTmV3QWNjZXNzZXMuc2l6ZSgpOyAr
K2opIHsKKyAgICAgICAgICAgIGlmIChvcmlnaW5hbE5ld0FjY2Vzc2VzW2pdLT5jYW5SZXBsYWNl
KCpteUNhc2UpKSB7CisgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGZvdW5k
KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBpZiAobXlDYXNlLT5k
b2VzQ2FsbHMoKSAmJiBzdHViSW5mby5wYXRjaC5zcGlsbE1vZGUgPT0gTmVlZFRvU3BpbGwpCisg
ICAgICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7CisKKyAgICAgICAgY2Fz
ZXNUb0FkZC5hcHBlbmQoc3RkOjptb3ZlKG15Q2FzZSkpOworICAgIH0KKworICAgIC8vIE5vdyBj
b25zdHJ1Y3QgdGhlIGxpc3Qgb2YgY2FzZXMgYXMgdGhleSBzaG91bGQgYXBwZWFyIGlmIHdlIGFy
ZSBzdWNjZXNzZnVsLiBUaGlzIG1lYW5zIHB1dHRpbmcKKyAgICAvLyBhbGwgb2YgdGhlIHByZXZp
b3VzIGNhc2VzIGluIHRoaXMgbGlzdCBpbiBvcmRlciBidXQgZXhjbHVkaW5nIHRob3NlIHRoYXQg
Y2FuIGJlIHJlcGxhY2VkLCBhbmQKKyAgICAvLyB0aGVuIGFkZGluZyB0aGUgbmV3IGNhc2VzLgor
ICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4+IG5ld0Nhc2VzOworICAgIGZv
ciAoYXV0byYgb2xkQ2FzZSA6IG1fbGlzdCkgeworICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7
CisgICAgICAgIGZvciAoYXV0byYgY2FzZVRvQWRkIDogY2FzZXNUb0FkZCkgeworICAgICAgICAg
ICAgaWYgKGNhc2VUb0FkZC0+Y2FuUmVwbGFjZSgqb2xkQ2FzZSkpIHsKKyAgICAgICAgICAgICAg
ICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKCFmb3VuZCkKKyAgICAgICAgICAgIG5ld0Nhc2VzLmFwcGVu
ZChvbGRDYXNlLT5jbG9uZSgpKTsKKyAgICB9CisgICAgZm9yIChhdXRvJiBjYXNlVG9BZGQgOiBj
YXNlc1RvQWRkKQorICAgICAgICBuZXdDYXNlcy5hcHBlbmQoc3RkOjptb3ZlKGNhc2VUb0FkZCkp
OwogICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19CisgICAgaWYgKG5ld0Nhc2VzLnNpemUoKSA+
IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSkKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cigpOwogCi1Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojp+UG9seW1vcnBoaWNHZXRC
eUlkTGlzdCgpIHsgfQorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByZXN1bHQgPSByZWdlbmVy
YXRlKHZtLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBpZGVudCwgbmV3Q2FzZXMpOworICAgIGlmICgh
cmVzdWx0KQorICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7CiAKLU1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpjdXJyZW50U2xvd1BhdGhU
YXJnZXQoCi0gICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKSBjb25zdAotewotICAgIGlm
IChpc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
bGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKLSAgICBy
ZXR1cm4gbV9saXN0Lmxhc3QoKS5zdHViUm91dGluZSgpLT5jb2RlKCkuY29kZSgpOworICAgIG1f
bGlzdCA9IG5ld0Nhc2VzOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgUG9seW1vcnBo
aWNHZXRCeUlkTGlzdDo6YWRkQWNjZXNzKGNvbnN0IEdldEJ5SWRBY2Nlc3MmIGFjY2VzcykKK01h
Y3JvQXNzZW1ibGVyQ29kZVB0ciBQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZVdpdGhDYXNl
KAorICAgIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbywgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsCisgICAgc3RkOjp1bmlxdWVfcHRyPEFj
Y2Vzc0Nhc2U+IG5ld0FjY2VzcykKIHsKLSAgICBBU1NFUlQoIWlzRnVsbCgpKTsKLSAgICAvLyBN
YWtlIHN1cmUgdGhhdCB0aGUgcmVzaXppbmcgb3B0aW1pemVzIGZvciBzcGFjZSwgbm90IHRpbWUu
Ci0gICAgbV9saXN0LnJlc2l6ZVRvRml0KG1fbGlzdC5zaXplKCkgKyAxKTsKLSAgICBtX2xpc3Qu
bGFzdCgpID0gYWNjZXNzOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4+
IG5ld0FjY2Vzc2VzOworICAgIG5ld0FjY2Vzc2VzLmFwcGVuZChzdGQ6Om1vdmUobmV3QWNjZXNz
KSk7CisgICAgcmV0dXJuIHJlZ2VuZXJhdGVXaXRoQ2FzZXModm0sIGNvZGVCbG9jaywgc3R1Yklu
Zm8sIGlkZW50LCBuZXdBY2Nlc3Nlcyk7CiB9CiAKLWJvb2wgUG9seW1vcnBoaWNHZXRCeUlkTGlz
dDo6aXNGdWxsKCkgY29uc3QKK2Jvb2wgUG9seW1vcnBoaWNBY2Nlc3M6OnZpc2l0V2VhayhWTSYg
dm0pIGNvbnN0CiB7Ci0gICAgQVNTRVJUKHNpemUoKSA8PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hF
X1NJWkUpOwotICAgIHJldHVybiBzaXplKCkgPT0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpF
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkgeworICAgICAgICBp
ZiAoIWF0KGkpLnZpc2l0V2Vhayh2bSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6Omlz
QWxtb3N0RnVsbCgpIGNvbnN0Cit2b2lkIFBvbHltb3JwaGljQWNjZXNzOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKHNpemUoKSA8PSBQT0xZTU9SUEhJQ19MSVNU
X0NBQ0hFX1NJWkUpOwotICAgIHJldHVybiBzaXplKCkgPj0gUE9MWU1PUlBISUNfTElTVF9DQUNI
RV9TSVpFIC0gMTsKKyAgICBvdXQucHJpbnQoUmF3UG9pbnRlcih0aGlzKSwgIjpbIik7CisgICAg
Q29tbWFQcmludGVyIGNvbW1hOworICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2xpc3QpCisgICAg
ICAgIG91dC5wcmludChjb21tYSwgKmVudHJ5KTsKKyAgICBvdXQucHJpbnQoIl0iKTsKIH0KIAot
Ym9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpkaWRTZWxmUGF0Y2hpbmcoKSBjb25zdAorTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyIFBvbHltb3JwaGljQWNjZXNzOjpyZWdlbmVyYXRlKAorICAgIFZN
JiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywg
Y29uc3QgSWRlbnRpZmllciYgaWRlbnQsCisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBY2Nl
c3NDYXNlPj4mIGNhc2VzKQogewotICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUoKTsgaS0tOykg
ewotICAgICAgICBpZiAoYXQoaSkudHlwZSgpID09IEdldEJ5SWRBY2Nlc3M6OlNpbXBsZUlubGlu
ZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSBz
dGF0ZTsKKworICAgIHN0YXRlLmFjY2VzcyA9IHRoaXM7CisgICAgc3RhdGUuc3R1YkluZm8gPSAm
c3R1YkluZm87CisgICAgc3RhdGUuaWRlbnQgPSAmaWRlbnQ7CisgICAgCisgICAgc3RhdGUuYmFz
ZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guYmFzZUdQUik7CisgICAg
c3RhdGUudmFsdWVSZWdzID0gSlNWYWx1ZVJlZ3MoCisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAg
ICAgICAgc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZVRhZ0dQUiksCisj
ZW5kaWYKKyAgICAgICAgc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZUdQ
UikpOworCisgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcihzdHViSW5mby5w
YXRoYy51c2VkUmVnaXN0ZXJzKTsKKyAgICBzdGF0ZS5hbGxvY2F0b3IgPSAmYWxsb2NhdG9yOwor
ICAgIGFsbG9jYXRvci5sb2NrKHN0YXRlLmJhc2VHUFIpOworICAgIGFsbG9jYXRvci5sb2NrKHN0
YXRlLnZhbHVlUmVncyk7CisKKyAgICBzdGF0ZS5zY3JhdGNoR1BSID0gYWxsb2NhdG9yLmFsbG9j
YXRlU2NyYXRjaEdQUigpOworICAgIAorICAgIENDYWxsSGVscGVycyBqaXQoJnZtLCBjb2RlQmxv
Y2spOworICAgIHN0YXRlLmppdCA9ICZqaXQ7CisKKyAgICBzdGF0ZS5udW1iZXJPZlBhZGRpbmdC
eXRlcyA9IGFsbG9jYXRvci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhqaXQpOwor
CisgICAgYm9vbCBhbGxHdWFyZGVkQnlTdHJ1Y3R1cmVDaGVjayA9IHRydWU7CisgICAgZm9yIChh
dXRvJiBlbnRyeSA6IGNhc2VzKQorICAgICAgICBhbGxHdWFyZGVkQnlTdHJ1Y3R1cmVDaGVjayAm
PSBlbnRyeS0+Z3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2soKTsKKworICAgIGlmICghc2l6ZSgpKSB7
CisgICAgICAgIC8vIFRoaXMgaXMgc3VwZXIgdW5saWtlbHksIGJ1dCB3ZSBtYWtlIGl0IGxlZ2Fs
IGFueXdheS4KKyAgICAgICAgc3RhdGUuZmFpbEFuZFJlcGF0Y2guYXBwZW5kKGppdC5qdW1wKCkp
OworICAgIH0gZWxzZSBpZiAoIWFsbEd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrIHx8IHNpemUoKSA9
PSAxKSB7CisgICAgICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgcHJveGllcyBpbiB0aGUgbGlzdCwg
d2UgY2Fubm90IGp1c3QgdXNlIGEgYmluYXJ5IHN3aXRjaCBvdmVyIHRoZSBzdHJ1Y3R1cmUuCisg
ICAgICAgIC8vIFdlIG5lZWQgdG8gcmVzb3J0IHRvIGEgY2FzY2FkZS4gQSBjYXNjYWRlIGFsc28g
aGFwcGVucyB0byBiZSBvcHRpbWFsIGlmIHdlIG9ubHkgaGF2ZSBqdXN0CisgICAgICAgIC8vIG9u
ZSBjYXNlLgorICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGZhbGxUaHJvdWdoOworCisg
ICAgICAgIC8vIENhc2NhZGUgdGhyb3VnaCB0aGUgbGlzdCwgcHJlZmVycmluZyBuZXdlciBlbnRy
aWVzLgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjYXNlcy5zaXplKCk7IGktLTspIHsKKyAg
ICAgICAgICAgIGZhbGxUaHJvdWdoLmxpbmsoJmppdCk7CisgICAgICAgICAgICBjYXNlc1tpXS0+
Z2VuZXJhdGVXaXRoR3VhcmQoc3RhdGUsIGZhbGxUaHJvdWdoKTsKKyAgICAgICAgfQorICAgICAg
ICBzdGF0ZS5mYWlsQW5kUmVwYXRjaC5hcHBlbmQoZmFsbFRocm91Z2gpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGppdC5sb2FkMzIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
c3RhdGUuYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAgICAgICAg
IHN0YXRlLnNjcmF0Y2hHUFIpOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPGludDY0X3Q+IGNh
c2VWYWx1ZXMoY2FzZXMuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGNhc2VzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgY2FzZVZhbHVlc1tpXSA9IGJpdHdpc2Vf
Y2FzdDxpbnQzMl90PihjYXNlc1tpXS0+c3RydWN0dXJlKCkpOworICAgICAgICAKKyAgICAgICAg
QmluYXJ5U3dpdGNoIGJpbmFyeVN3aXRjaChzdGF0ZS5zY3JhdGNoR1BSLCBjYXNlVmFsdWVzLCBC
aW5hcnlTd2l0Y2g6OkludDMyKTsKKyAgICAgICAgd2hpbGUgKGJpbmFyeVN3aXRjaC5hZHZhbmNl
KGppdCkpCisgICAgICAgICAgICBjYXNlc1tiaW5hcnlTd2l0Y2guY2FzZUluZGV4KCldLT5nZW5l
cmF0ZShzdGF0ZSk7CisgICAgICAgIHN0YXRlLmZhaWxBbmRSZXBhdGNoLmFwcGVuZChiaW5hcnlT
d2l0Y2guZmFsbFRocm91Z2goKSk7CiAgICAgfQotICAgIHJldHVybiBmYWxzZTsKKworICAgIHN0
YXRlLmZhaWxBbmRJZ25vcmUubGluaygmaml0KTsKKworICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRo
ZSBpbmxpbmUgY2FjaGUgb3B0aW1pemF0aW9uIGNvZGUga25vd3MgdGhhdCB3ZSBhcmUgdGFraW5n
IHNsb3cgcGF0aCBiZWNhdXNlCisgICAgLy8gb2Ygc29tZXRoaW5nIHRoYXQgaXNuJ3QgcGF0Y2hh
YmxlLiAic2VlbiIgYmVpbmcgZmFsc2UgbWVhbnMgdGhhdCB3ZSBieXBhc3MgcGF0Y2hpbmcuIFRo
aXMgaXMKKyAgICAvLyBwcmV0dHkgZ3Jvc3MgYnV0IGl0IG1lYW5zIHRoYXQgd2UgZG9uJ3QgbmVl
ZCB0byBoYXZlIHR3byBzbG93IHBhdGggZW50cnlwb2ludHMgLSBvbmUgZm9yCisgICAgLy8gcGF0
Y2hpbmcgYW5kIG9uZSBmb3Igbm9ybWFsIHNsb3cgc3R1ZmYuCisgICAgaml0LnN0b3JlOChUcnVz
dGVkSW1tMzIoZmFsc2UpLCAmc3R1YkluZm8uc2Vlbik7CisKKyAgICBzdGF0ZS5mYWlsQW5kUmVw
YXRjaC5saW5rKCZqaXQpOworICAgIAorICAgIHN0YXRlLnJlc3RvcmVTY3JhdGNoKCk7CisgICAg
Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBmYWlsdXJlID0gaml0Lmp1bXAoKTsKKworICAgIExpbmtC
dWZmZXIgbGlua0J1ZmZlcih2bSwgaml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFp
bCk7CisgICAgaWYgKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkKKyAgICAgICAgcmV0
dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOworCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IHN1Y2Nlc3NMYWJlbCA9CisgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJl
bEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSk7CisgICAgICAgIAorICAg
IGxpbmtCdWZmZXIubGluayhzdGF0ZS5zdWNjZXNzLCBzdWNjZXNzTGFiZWwpOworCisgICAgbGlu
a0J1ZmZlci5saW5rKAorICAgICAgICBmYWlsdXJlLAorICAgICAgICBzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dD
YXNlKSk7CisgICAgCisgICAgZm9yIChhdXRvIGNhbGxiYWNrIDogc3RhdGUuY2FsbGJhY2tzKQor
ICAgICAgICBjYWxsYmFjayhsaW5rQnVmZmVyKTsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgY29kZSA9IEZJTkFMSVpFX0NPREVfRk9SKAorICAgICAgICBjb2RlQkxvY2ssIGxpbmtC
dWZmZXIsCisgICAgICAgICgiJXMiLCB0b0NTdHJpbmcoIkdldCBhY2Nlc3Mgc3R1YiBmb3IgIiwg
KmNvZGVCbG9jaywgIiAiLCBzdHViSW5mby5jb2RlT3JpZ2luLCAiIHdpdGggcmV0dXJuIHBvaW50
ICIsIHN1Y2Nlc3NMYWJlbCwgIjogIiwgKnRoaXMpKSk7CisKKyAgICBib29sIGRvZXNDYWxscyA9
IGZhbHNlOworICAgIGZvciAoYXV0byYgZW50cnkgOiBjYXNlcykKKyAgICAgICAgZG9lc0NhbGxz
IHw9IGVudHJ5LT5kb2VzQ2FsbHMoKTsKKyAgICAKKyAgICBtX3N0dWJSb3V0aW5lID0gY3JlYXRl
SklUU3R1YlJvdXRpbmUoY29kZSwgdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGRv
ZXNDYWxscyk7CisgICAgbV93YXRjaHBvaW50cyA9IHN0ZDo6bW92ZShzdGF0ZS53YXRjaHBvaW50
cyk7CisgICAgcmV0dXJuIGNvZGUuY29kZSgpOwogfQogCi1ib29sIFBvbHltb3JwaGljR2V0QnlJ
ZExpc3Q6OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFt
ZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK3ZvaWQgcHJpbnRJbnRlcm5h
bChQcmludFN0cmVhbSYgb3V0LCBBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBlIHR5cGUpCiB7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIGlmICghYXQoaSkudmlz
aXRXZWFrKHZtKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkxvYWQ6CisgICAgICAgIG91dC5wcmludCgiTG9hZCIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpUcmFuc2l0aW9uOgorICAg
ICAgICBvdXQucHJpbnQoIlRyYW5zaXRpb24iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
QWNjZXNzQ2FzZTo6UmVwbGFjZToKKyAgICAgICAgb3V0LnByaW50KCJSZXBsYWNlIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6Ok1pc3M6CisgICAgICAgIG91dC5wcmlu
dCgiTWlzcyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpHZXR0ZXI6
CisgICAgICAgIG91dC5wcmludCgiR2V0dGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEFjY2Vzc0Nhc2U6OlNldHRlcjoKKyAgICAgICAgb3V0LnByaW50KCJTZXR0ZXIiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6Q3VzdG9tR2V0dGVyOgorICAgICAgICBv
dXQucHJpbnQoIkN1c3RvbUdldHRlciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nl
c3NDYXNlOjpDdXN0b21TZXR0ZXI6CisgICAgICAgIG91dC5wcmludCgiQ3VzdG9tU2V0dGVyIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluSGl0OgorICAgICAgICBv
dXQucHJpbnQoIkluSGl0Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6
OkluTWlzczoKKyAgICAgICAgb3V0LnByaW50KCJJbk1pc3MiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgQWNjZXNzQ2FzZTo6QXJyYXlMZW5ndGg6CisgICAgICAgIG91dC5wcmludCgiQXJy
YXlMZW5ndGgiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6U3RyaW5n
TGVuZ3RoOgorICAgICAgICBvdXQucHJpbnQoIlN0cmluZ0xlbmd0aCIpOworICAgICAgICByZXR1
cm47CiAgICAgfQotICAgIHJldHVybiB0cnVlOworCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKIH0KIAotfSAvLyBuYW1lc3BhY2UgSlNDCit9IC8vIG5hbWVzcGFjZSBXVEYKIAog
I2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCShyZXZpc2lvbiAxODkzMjQpCShmcm9t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0Lmg6
MTg5MzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNj
ZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0X2gKKyNkZWZpbmUgUG9seW1vcnBoaWNHZXRCeUlkTGlzdF9oCisKKyNpZiBFTkFC
TEUoSklUKQorCisjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1i
bGVyLmgiCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIKKyNpbmNsdWRl
ICJPcGNvZGUuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb2RlQmxvY2s7CitzdHJ1Y3QgU3RydWN0
dXJlU3R1YkluZm87CisKK2NsYXNzIEdldEJ5SWRBY2Nlc3MgeworcHVibGljOgorICAgIGVudW0g
QWNjZXNzVHlwZSB7CisgICAgICAgIEludmFsaWQsCisgICAgICAgIFNpbXBsZUlubGluZSwgLy8g
VGhpcyBpcyB0aGUgcGF0Y2hlZCBpbmxpbmUgYWNjZXNzLgorICAgICAgICBTaW1wbGVTdHViLCAv
LyBUaGlzIGlzIGEgc3R1Yi4KKyAgICAgICAgV2F0Y2hlZFN0dWIsCisgICAgICAgIEdldHRlciwK
KyAgICAgICAgQ3VzdG9tR2V0dGVyLAorICAgICAgICBTaW1wbGVNaXNzLAorICAgIH07CisgICAg
CisgICAgR2V0QnlJZEFjY2VzcygpCisgICAgICAgIDogbV90eXBlKEludmFsaWQpCisgICAgewor
ICAgIH0KKyAgICAKKyAgICBHZXRCeUlkQWNjZXNzKAorICAgICAgICBWTSYsIEpTQ2VsbCogb3du
ZXIsIEFjY2Vzc1R5cGUsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+LCBTdHJ1Y3R1cmUqLAor
ICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCgpKTsKKyAgICAKKyAgICB+R2V0QnlJZEFjY2VzcygpOworICAgIAorICAg
IHN0YXRpYyBHZXRCeUlkQWNjZXNzIGZyb21TdHJ1Y3R1cmVTdHViSW5mbyhTdHJ1Y3R1cmVTdHVi
SW5mbyYpOworICAgIAorICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgIT0g
SW52YWxpZDsgfQorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7
IH0KKyAgICAKKyAgICBBY2Nlc3NUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0K
KyAgICAKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0
dXJlLmdldCgpOyB9CisgICAgCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQm
IGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9CisgICAgCisg
ICAgSklUU3R1YlJvdXRpbmUqIHN0dWJSb3V0aW5lKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVChpc1NldCgpKTsKKyAgICAgICAgcmV0dXJuIG1fc3R1YlJvdXRpbmUuZ2V0KCk7CisgICAg
fQorICAgIAorICAgIGJvb2wgZG9lc0NhbGxzKCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09IEdl
dHRlciB8fCB0eXBlKCkgPT0gQ3VzdG9tR2V0dGVyOyB9CisgICAgCisgICAgYm9vbCB2aXNpdFdl
YWsoVk0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOwor
ICAgIAorICAgIEFjY2Vzc1R5cGUgbV90eXBlOworICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+
IG1fc3RydWN0dXJlOworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9u
U2V0OworICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gbV9zdHViUm91dGluZTsKK307CisKK2Ns
YXNzIFBvbHltb3JwaGljR2V0QnlJZExpc3QgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworcHVibGljOgorICAgIC8vIEVpdGhlciBjcmVhdGVzIGEgbmV3IHBvbHltb3JwaGljIGdldCBs
aXN0LCBvciByZXR1cm5zIHRoZSBvbmUgdGhhdCBpcyBhbHJlYWR5IGluCisgICAgLy8gcGxhY2Uu
CisgICAgc3RhdGljIFBvbHltb3JwaGljR2V0QnlJZExpc3QqIGZyb20oU3RydWN0dXJlU3R1Yklu
Zm8mKTsKKyAgICAKKyAgICB+UG9seW1vcnBoaWNHZXRCeUlkTGlzdCgpOworICAgIAorICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciBjdXJyZW50U2xvd1BhdGhUYXJnZXQoU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIGFkZEFjY2Vzcyhjb25zdCBHZXRC
eUlkQWNjZXNzJik7CisgICAgCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9s
aXN0LmlzRW1wdHkoKTsgfQorICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2xp
c3Quc2l6ZSgpOyB9CisgICAgYm9vbCBpc0Z1bGwoKSBjb25zdDsKKyAgICBib29sIGlzQWxtb3N0
RnVsbCgpIGNvbnN0OyAvLyBUcnVlIGlmIGFkZGluZyBhbiBlbGVtZW50IHdvdWxkIG1ha2UgaXNG
dWxsKCkgdHJ1ZS4KKyAgICBjb25zdCBHZXRCeUlkQWNjZXNzJiBhdCh1bnNpZ25lZCBpKSBjb25z
dCB7IHJldHVybiBtX2xpc3RbaV07IH0KKyAgICBjb25zdCBHZXRCeUlkQWNjZXNzJiBvcGVyYXRv
cltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdFtpXTsgfQorICAgIAorICAgIGJv
b2wgZGlkU2VsZlBhdGNoaW5nKCkgY29uc3Q7IC8vIEFyZSBhbnkgb2YgdGhlIGFjY2Vzc2VzIFNp
bXBsZUlubGluZT8KKyAgICAKKyAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OworCitwcml2
YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7CisgICAgCisgICAgUG9seW1vcnBoaWNH
ZXRCeUlkTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyYpOworICAgIAorICAgIFZlY3RvcjxHZXRCeUlk
QWNjZXNzLCAyPiBtX2xpc3Q7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8v
IEVOQUJMRShKSVQpCisKKyNlbmRpZiAvLyBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0X2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNj
ZXNzLmgJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
b2x5bW9ycGhpY0FjY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw4IEBACiAgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIFBvbHltb3JwaGljR2V0QnlJZExpc3RfaAotI2Rl
ZmluZSBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0X2gKKyNpZm5kZWYgUG9seW1vcnBoaWNBY2Nlc3Nf
aAorI2RlZmluZSBQb2x5bW9ycGhpY0FjY2Vzc19oCiAKICNpZiBFTkFCTEUoSklUKQogCkBAIC0z
OCw5NiArMzgsMjYzIEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQ29kZUJsb2NrOworY2xh
c3MgUG9seW1vcnBoaWNBY2Nlc3M7CiBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm87CiAKLWNsYXNz
IEdldEJ5SWRBY2Nlc3Mgeworc3RydWN0IEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTsKKworY2xhc3Mg
QWNjZXNzQ2FzZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQWNjZXNzQ2FzZSk7CisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgZW51bSBBY2Nlc3NUeXBlIHsK
LSAgICAgICAgSW52YWxpZCwKLSAgICAgICAgU2ltcGxlSW5saW5lLCAvLyBUaGlzIGlzIHRoZSBw
YXRjaGVkIGlubGluZSBhY2Nlc3MuCi0gICAgICAgIFNpbXBsZVN0dWIsIC8vIFRoaXMgaXMgYSBz
dHViLgotICAgICAgICBXYXRjaGVkU3R1YiwKKyAgICAgICAgTG9hZCwKKyAgICAgICAgVHJhbnNp
dGlvbiwKKyAgICAgICAgUmVwbGFjZSwKKyAgICAgICAgTWlzcywKICAgICAgICAgR2V0dGVyLAor
ICAgICAgICBTZXR0ZXIsCiAgICAgICAgIEN1c3RvbUdldHRlciwKLSAgICAgICAgU2ltcGxlTWlz
cywKKyAgICAgICAgQ3VzdG9tU2V0dGVyLAorICAgICAgICBJbkhpdCwKKyAgICAgICAgSW5NaXNz
LAorICAgICAgICBBcnJheUxlbmd0aCwKKyAgICAgICAgU3RyaW5nTGVuZ3RoCiAgICAgfTsKLSAg
ICAKLSAgICBHZXRCeUlkQWNjZXNzKCkKLSAgICAgICAgOiBtX3R5cGUoSW52YWxpZCkKKworICAg
IHN0YXRpYyBib29sIGlzR2V0KEFjY2Vzc1R5cGUgdHlwZSkKICAgICB7CisgICAgICAgIHN3aXRj
aCAodHlwZSkgeworICAgICAgICBjYXNlIEludmFsaWQ6CisgICAgICAgIGNhc2UgVHJhbnNpdGlv
bjoKKyAgICAgICAgY2FzZSBSZXBsYWNlOgorICAgICAgICBjYXNlIFNldHRlcjoKKyAgICAgICAg
Y2FzZSBDdXN0b21TZXR0ZXI6CisgICAgICAgIGNhc2UgSW5IaXQ6CisgICAgICAgIGNhc2UgSW5N
aXNzOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIExvYWQ6CisgICAg
ICAgIGNhc2UgTWlzczoKKyAgICAgICAgY2FzZSBHZXR0ZXI6CisgICAgICAgIGNhc2UgQ3VzdG9t
R2V0dGVyOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KICAgICB9Ci0gICAg
Ci0gICAgR2V0QnlJZEFjY2VzcygKLSAgICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NU
eXBlLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiwgU3RydWN0dXJlKiwKKworICAgIHN0YXRp
YyBib29sIGlzUHV0KEFjY2Vzc1R5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlw
ZSkgeworICAgICAgICBjYXNlIEludmFsaWQ6CisgICAgICAgIGNhc2UgTG9hZDoKKyAgICAgICAg
Y2FzZSBNaXNzOgorICAgICAgICBjYXNlIEdldHRlcjoKKyAgICAgICAgY2FzZSBDdXN0b21HZXR0
ZXI6CisgICAgICAgIGNhc2UgSW5IaXQ6CisgICAgICAgIGNhc2UgSW5NaXNzOgorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIFRyYW5zaXRpb246CisgICAgICAgIGNhc2Ug
UmVwbGFjZToKKyAgICAgICAgY2FzZSBTZXR0ZXI6CisgICAgICAgIGNhc2UgQ3VzdG9tU2V0dGVy
OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0
aWMgYm9vbCBpc0luKEFjY2Vzc1R5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlw
ZSkgeworICAgICAgICBjYXNlIEludmFsaWQ6CisgICAgICAgIGNhc2UgTG9hZDoKKyAgICAgICAg
Y2FzZSBNaXNzOgorICAgICAgICBjYXNlIEdldHRlcjoKKyAgICAgICAgY2FzZSBDdXN0b21HZXR0
ZXI6CisgICAgICAgIGNhc2UgVHJhbnNpdGlvbjoKKyAgICAgICAgY2FzZSBSZXBsYWNlOgorICAg
ICAgICBjYXNlIFNldHRlcjoKKyAgICAgICAgY2FzZSBDdXN0b21TZXR0ZXI6CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgSW5IaXQ6CisgICAgICAgIGNhc2UgSW5NaXNz
OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gZ2V0KAorICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIs
IEFjY2Vzc1R5cGUsIFByb3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmUqLAorICAgICAgICBjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgp
LAorICAgICAgICBib29sIHZpYVByb3h5ID0gZmFsc2UsCisgICAgICAgIFdhdGNocG9pbnRTZXQq
IGFkZGl0aW9uYWxTZXQgPSBudWxscHRyLAorICAgICAgICBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVl
RnVuYyA9IG51bGxwdHIpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHJlcGxh
Y2UoCisgICAgICAgIFZNJiwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCk7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4g
dHJhbnNpdGlvbigKKyAgICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIG9sZFN0
cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwK
ICAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQoKSk7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gc2V0
dGVyKAorICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUsIFN0cnVjdHVyZSos
IFByb3BlcnR5T2Zmc2V0LAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCYsIFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0
cjxBY2Nlc3NDYXNlPiBpbigKKyAgICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBl
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQmID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSk7CisKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8QWNjZXNzQ0FzZT4gZ2V0TGVuZ3RoKFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNz
VHlwZSk7CiAgICAgCi0gICAgfkdldEJ5SWRBY2Nlc3MoKTsKKyAgICB+QWNjZXNzQ2FzZSgpOwog
ICAgIAotICAgIHN0YXRpYyBHZXRCeUlkQWNjZXNzIGZyb21TdHJ1Y3R1cmVTdHViSW5mbyhTdHJ1
Y3R1cmVTdHViSW5mbyYpOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4g
ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFZNJiwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlU3R1Yklu
Zm8mKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBjbG9uZSgpIGNvbnN0Owog
ICAgIAogICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgIT0gSW52YWxpZDsg
fQogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KICAgICAK
ICAgICBBY2Nlc3NUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQorICAgIGJvb2wg
dmlhUHJveHkoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+dmlhUHJv
eHkgOiBmYWxzZTsgfQogICAgIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7IH0KLSAgICAKLSAgICBjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25T
ZXQ7IH0KLSAgICAKLSAgICBKSVRTdHViUm91dGluZSogc3R1YlJvdXRpbmUoKSBjb25zdAorICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX2tpbmQg
PT0gVHJhbnNpdGlvbikKKyAgICAgICAgICAgIHJldHVybiBtX3N0cnVjdHVyZS0+cHJldmlvdXNJ
RCgpOworICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7CisgICAgfQorICAgIGJvb2wg
Z3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2soKSBjb25zdCB7IHJldHVybiAhdmlhUHJveHkoKTsgfQor
CisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUoKSBjb25zdAogICAgIHsKLSAgICAgICAgQVNT
RVJUKGlzU2V0KCkpOwotICAgICAgICByZXR1cm4gbV9zdHViUm91dGluZS5nZXQoKTsKKyAgICAg
ICAgQVNTRVJUKG1fa2luZCA9PSBUcmFuc2l0aW9uKTsKKyAgICAgICAgcmV0dXJuIG1fc3RydWN0
dXJlLmdldCgpOwogICAgIH0KICAgICAKLSAgICBib29sIGRvZXNDYWxscygpIGNvbnN0IHsgcmV0
dXJuIHR5cGUoKSA9PSBHZXR0ZXIgfHwgdHlwZSgpID09IEN1c3RvbUdldHRlcjsgfQorICAgIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y29uZGl0aW9uU2V0OyB9CisKKyAgICBXYXRjaHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0KCkgY29u
c3QgeyBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+YWRkaXRpb25hbFNldC5nZXQoKSA6IG51bGxw
dHI7IH0KICAgICAKLSAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OworICAgIGJvb2wgZG9l
c0NhbGxzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSgpKSB7CisgICAgICAg
IGNhc2UgR2V0dGVyOgorICAgICAgICBjYXNlIFNldHRlcjoKKyAgICAgICAgY2FzZSBDdXN0b21H
ZXR0ZXI6CisgICAgICAgIGNhc2UgQ3VzdG9tU2V0dGVyOgorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICB9CiAKKyAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbygpIGNvbnN0CisgICAg
eworICAgICAgICBpZiAoIW1fcmFyZURhdGEpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgcmV0dXJuIG1fcmFyZURhdGEtPmNhbGxMaW5rSW5mby5nZXQoKTsKKyAgICB9CisK
KyAgICAvLyBJZiB0aGlzIG1ldGhvZCByZXR1cm5zIHRydWUsIHRoZW4gaXQncyBhIGdvb2QgaWRl
YSB0byByZW1vdmUgJ290aGVyJyBmcm9tIHRoZSBhY2Nlc3Mgb25jZSAndGhpcycKKyAgICAvLyBp
cyBhZGRlZC4gVGhpcyBtZXRob2QgYXNzdW1lcyB0aGF0IGluIGNhc2Ugb2YgY29udHJhZGljdGlv
bnMsICd0aGlzJyByZXByZXNlbnRzIGEgbmV3ZXIsIGFuZCBzbworICAgIC8vIG1vcmUgdXNlZnVs
LCB0cnV0aC4gVGhpcyBtZXRob2QgY2FuIGJlIGNvbnNlcnZhdGl2ZTsgaXQgd2lsbCByZXR1cm4g
ZmFsc2Ugd2hlbiBpdCBkb3VidC4KKyAgICBib29sIGNhblJlcGxhY2UoY29uc3QgQWNjZXNzQ2Fz
ZSYgb3RoZXIpOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworICAg
IAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOworICAgIGZyaWVuZCBjbGFz
cyBQb2x5bW9ycGhpY0FjY2VzczsKKworICAgIEFjY2Vzc0Nhc2UoKTsKKworICAgIGJvb2wgdmlz
aXRXZWFrKFZNJikgY29uc3Q7CisKKyAgICAvLyBGYWxsIHRocm91Z2ggb24gc3VjY2Vzcy4gVHdv
IGtpbmRzIG9mIGZhaWx1cmVzIGFyZSBzdXBwb3J0ZWQ6IGZhbGwtdGhyb3VnaCwgd2hpY2ggbWVh
bnMgdGhhdCB3ZQorICAgIC8vIHNob3VsZCB0cnkgYSBkaWZmZXJlbnQgY2FzZTsgYW5kIGZhaWx1
cmUsIHdoaWNoIG1lYW5zIHRoYXQgdGhpcyB3YXMgdGhlIHJpZ2h0IGNhc2UgYnV0IGl0IG5lZWRz
CisgICAgLy8gaGVscCBmcm9tIHRoZSBzbG93IHBhdGguCisgICAgdm9pZCBnZW5lcmF0ZVdpdGhH
dWFyZChBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmLCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0JiBmYWxs
VGhyb3VnaCk7CisKKyAgICAvLyBGYWxsIHRocm91Z2ggb24gc3VjY2VzcywgYWRkIGEganVtcCB0
byB0aGUgZmFpbHVyZSBsaXN0IG9uIGZhaWx1cmUuCisgICAgdm9pZCBnZW5lcmF0ZShBY2Nlc3NH
ZW5lcmF0aW9uU3RhdGUmKTsKICAgICAKICAgICBBY2Nlc3NUeXBlIG1fdHlwZTsKKyAgICBQcm9w
ZXJ0eU9mZnNldCBtX29mZnNldDsKKworICAgIC8vIFVzdWFsbHkgdGhpcyBpcyB0aGUgc3RydWN0
dXJlIHRoYXQgd2UgZXhwZWN0IHRoZSBiYXNlIG9iamVjdCB0byBoYXZlLiBCdXQsIHRoaXMgaXMg
dGhlICpuZXcqCisgICAgLy8gc3RydWN0dXJlIGZvciBhIHRyYW5zaXRpb24gYW5kIHdlIHJlbHkg
b24gdGhlIGZhY3QgdGhhdCBpdCBoYXMgYSBzdHJvbmcgcmVmZXJlbmNlIHRvIHRoZSBvbGQKKyAg
ICAvLyBzdHJ1Y3R1cmUuIEZvciBwcm94aWVzLCB0aGlzIGlzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhl
IG9iamVjdCBiZWhpbmQgdGhlIHByb3h5LgogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1f
c3RydWN0dXJlOworCiAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25T
ZXQ7Ci0gICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBtX3N0dWJSb3V0aW5lOworCisgICAgY2xh
c3MgUmFyZURhdGEgeworICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBwdWJs
aWM6CisgICAgICAgIGJvb2wgdmlhUHJveHk7CisgICAgICAgIFJlZlB0cjxXYXRjaHBvaW50U2V0
PiBhZGRpdGlvbmFsU2V0OworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtJbmZvPiBj
YWxsTGlua0luZm87CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIFByb3BlcnR5U2xvdDo6
R2V0VmFsdWVGdW5jIGdldHRlcjsKKyAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdDo6UHV0VmFs
dWVGdW5jIHNldHRlcjsKKyAgICAgICAgICAgIHZvaWQqIG9wYXF1ZTsKKyAgICAgICAgfSBjdXN0
b21BY2Nlc3NvcjsKKyAgICB9OworCisgICAgc3RkOjp1bmlxdWVfcHRyPFJhcmVEYXRhPiBtX3Jh
cmVEYXRhOwogfTsKIAotY2xhc3MgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCB7CitjbGFzcyBQb2x5
bW9ycGhpY0FjY2VzcyB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUG9seW1vcnBoaWNBY2Nl
c3MpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIC8vIEVpdGhl
ciBjcmVhdGVzIGEgbmV3IHBvbHltb3JwaGljIGdldCBsaXN0LCBvciByZXR1cm5zIHRoZSBvbmUg
dGhhdCBpcyBhbHJlYWR5IGluCi0gICAgLy8gcGxhY2UuCi0gICAgc3RhdGljIFBvbHltb3JwaGlj
R2V0QnlJZExpc3QqIGZyb20oU3RydWN0dXJlU3R1YkluZm8mKTsKLSAgICAKLSAgICB+UG9seW1v
cnBoaWNHZXRCeUlkTGlzdCgpOwotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdXJy
ZW50U2xvd1BhdGhUYXJnZXQoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKSBjb25zdDsKLSAg
ICAKLSAgICB2b2lkIGFkZEFjY2Vzcyhjb25zdCBHZXRCeUlkQWNjZXNzJik7CisgICAgUG9seW1v
cnBoaWNBY2Nlc3MoKTsKKyAgICB+UG9seW1vcnBoaWNBY2Nlc3MoKTsKKworICAgIC8vIFRoaXMg
bWF5IHJldHVybiBudWxsLCBpbiB3aGljaCBjYXNlIHRoZSBvbGQgc3R1YiByb3V0aW5lIGlzIGxl
ZnQgaW50YWN0LiBUaGlzIG1ldGhvZCB3aWxsIGRvIHlvdQorICAgIC8vIGEgc29saWQgYW5kIG51
bGwtY2hlY2sgdGhlIEFjY2Vzc0Nhc2UsIHNvIHRoYXQgeW91IGNhbiBkbyB0aGluZ3MgbGlrZToK
KyAgICAvLworICAgIC8vIGNvZGVQdHIgPSBhY2Nlc3MtPnJlZ2VuZXJhdGVXaXRoQ2FzZSguLi4s
IEFjY2Vzc0Nhc2U6OmdldCguLi4pKQorICAgIC8vCisgICAgLy8gSWYgQWNjZXNzQ2FzZTo6Z2V0
KCkgcmV0dXJucyBudWxscHRyLCB0aGUgYWJvdmUgY2FsbCB3aWxsIHNpbXBseSByZXR1cm4gbnVs
bC4KKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVnZW5lcmF0ZVdpdGhDYXNlcygKKyAgICAg
ICAgVk0mLCBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIGNvbnN0IElkZW50aWZpZXIm
LCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+Pik7CisKKyAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgcmVnZW5lcmF0ZVdpdGhDYXNlKAorICAgICAgICBWTSYsIENvZGVCbG9jayos
IFN0cnVjdHVyZVN0dWJJbmZvJiwgY29uc3QgSWRlbnRpZmllciYsIHN0ZDo6dW5pcXVlX3B0cjxB
Y2Nlc3NDYXNlPik7CiAgICAgCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9s
aXN0LmlzRW1wdHkoKTsgfQogICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2xp
c3Quc2l6ZSgpOyB9Ci0gICAgYm9vbCBpc0Z1bGwoKSBjb25zdDsKLSAgICBib29sIGlzQWxtb3N0
RnVsbCgpIGNvbnN0OyAvLyBUcnVlIGlmIGFkZGluZyBhbiBlbGVtZW50IHdvdWxkIG1ha2UgaXNG
dWxsKCkgdHJ1ZS4KLSAgICBjb25zdCBHZXRCeUlkQWNjZXNzJiBhdCh1bnNpZ25lZCBpKSBjb25z
dCB7IHJldHVybiBtX2xpc3RbaV07IH0KLSAgICBjb25zdCBHZXRCeUlkQWNjZXNzJiBvcGVyYXRv
cltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdFtpXTsgfQotICAgIAotICAgIGJv
b2wgZGlkU2VsZlBhdGNoaW5nKCkgY29uc3Q7IC8vIEFyZSBhbnkgb2YgdGhlIGFjY2Vzc2VzIFNp
bXBsZUlubGluZT8KLSAgICAKKyAgICBjb25zdCBBY2Nlc3NDYXNlJiBhdCh1bnNpZ25lZCBpKSBj
b25zdCB7IHJldHVybiAqbV9saXN0W2ldOyB9CisgICAgY29uc3QgQWNjZXNzQ2FzZSYgb3BlcmF0
b3JbXSh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiAqbV9saXN0W2ldOyB9CisKKyAgICAvLyBJ
ZiB0aGlzIHJldHVybnMgZmFsc2UgdGhlbiB3ZSBhcmUgcmVxdWVzdGluZyBhIHJlc2V0IG9mIHRo
ZSBvd25pbmcgU3RydWN0dXJlU3R1YkluZm8uCiAgICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25z
dDsKIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKwogcHJpdmF0ZToK
KyAgICBmcmllbmQgY2xhc3MgQWNjZXNzQ2FzZTsKKyAgICBmcmllbmQgY2xhc3MgQWNjZXNzR2Vu
ZXJhdGlvblN0YXRlOwogICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7CiAgICAgCi0gICAgUG9s
eW1vcnBoaWNHZXRCeUlkTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyYpOworICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0ciByZWdlbmVyYXRlKAorICAgICAgICBWTSYsIENvZGVCbG9jayosIFN0cnVjdHVy
ZVN0dWJJbmZvJiwgY29uc3QgSWRlbnRpZmllciYsCisgICAgICAgIFZlY3RvcjxzdGQ6OnVuaXF1
ZV9wdHI8QWNjZXNzQ2FzZT4+JiBjYXNlcyk7CiAgICAgCi0gICAgVmVjdG9yPEdldEJ5SWRBY2Nl
c3MsIDI+IG1fbGlzdDsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+LCAy
PiBtX2xpc3Q7CisgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBtX3N0dWJSb3V0aW5lOworICAg
IHN0ZDo6dW5pcXVlX3B0cjxXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8+IG1fd2F0Y2hw
b2ludHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAorbmFtZXNwYWNlIFdURiB7CisKK3Zv
aWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QWNjZXNzQ2FzZTo6QWNjZXNzVHlw
ZSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAotI2Vu
ZGlmIC8vIFBvbHltb3JwaGljR2V0QnlJZExpc3RfaAorI2VuZGlmIC8vIFBvbHltb3JwaGljQWNj
ZXNzX2gKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGlj
R2V0QnlJZExpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcAkocmV2aXNpb24gMTg5MzI0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDE1NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0
LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgiCi0KLSNpZiBFTkFCTEUoSklUKQotCi0jaW5jbHVk
ZSAiQ29kZUJsb2NrLmgiCi0jaW5jbHVkZSAiSGVhcC5oIgotI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQot
R2V0QnlJZEFjY2Vzczo6R2V0QnlJZEFjY2VzcygKLSAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIs
IEFjY2Vzc1R5cGUgdHlwZSwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUs
Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0JiBjb25kaXRpb25TZXQpCi0gICAgOiBtX3R5cGUodHlwZSkKLSAgICAsIG1fc3RydWN0dXJl
KHZtLCBvd25lciwgc3RydWN0dXJlKQotICAgICwgbV9jb25kaXRpb25TZXQoY29uZGl0aW9uU2V0
KQotICAgICwgbV9zdHViUm91dGluZShzdHViUm91dGluZSkKLXsKLX0KLQotR2V0QnlJZEFjY2Vz
czo6fkdldEJ5SWRBY2Nlc3MoKQotewotfQotCi1HZXRCeUlkQWNjZXNzIEdldEJ5SWRBY2Nlc3M6
OmZyb21TdHJ1Y3R1cmVTdHViSW5mbyhTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0g
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGluaXRpYWxTbG93UGF0aCA9Ci0gICAgICAgIHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRh
Q2FsbFRvU2xvd0Nhc2UpOwotICAgIAotICAgIEdldEJ5SWRBY2Nlc3MgcmVzdWx0OwotICAgIAot
ICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9p
ZF9zZWxmKTsKLSAgICAKLSAgICByZXN1bHQubV90eXBlID0gU2ltcGxlSW5saW5lOwotICAgIHJl
c3VsdC5tX3N0cnVjdHVyZS5jb3B5RnJvbShzdHViSW5mby51LmdldEJ5SWRTZWxmLmJhc2VPYmpl
Y3RTdHJ1Y3R1cmUpOwotICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gSklUU3R1YlJvdXRpbmU6
OmNyZWF0ZVNlbGZNYW5hZ2VkUm91dGluZShpbml0aWFsU2xvd1BhdGgpOwotICAgIAotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgR2V0QnlJZEFjY2Vzczo6dmlzaXRXZWFrKFZNJiB2bSkg
Y29uc3QKLXsKLSAgICBpZiAobV9zdHJ1Y3R1cmUgJiYgIUhlYXA6OmlzTWFya2VkKG1fc3RydWN0
dXJlLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghbV9jb25kaXRpb25T
ZXQuYXJlU3RpbGxMaXZlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIW1fc3R1
YlJvdXRpbmUtPnZpc2l0V2Vhayh2bSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6UG9seW1vcnBoaWNHZXRCeUlk
TGlzdChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAgaWYgKHN0dWJJbmZvLmFj
Y2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgbV9s
aXN0LmFwcGVuZChHZXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0dXJlU3R1YkluZm8oc3R1YkluZm8p
KTsKLX0KLQotUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6
ZnJvbShTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAgaWYgKHN0dWJJbmZvLmFj
Y2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9saXN0KQotICAgICAgICByZXR1cm4gc3R1Yklu
Zm8udS5nZXRCeUlkTGlzdC5saXN0OwotICAgIAotICAgIEFTU0VSVCgKLSAgICAgICAgc3R1Yklu
Zm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYKLSAgICAgICAgfHwgc3R1Yklu
Zm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpOwotICAgIAotICAgIFBvbHltb3JwaGljR2V0
QnlJZExpc3QqIHJlc3VsdCA9IG5ldyBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KHN0dWJJbmZvKTsK
LSAgICAKLSAgICBzdHViSW5mby5pbml0R2V0QnlJZExpc3QocmVzdWx0KTsKLSAgICAKLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCi1Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojp+UG9seW1vcnBoaWNH
ZXRCeUlkTGlzdCgpIHsgfQotCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHIgUG9seW1vcnBoaWNHZXRC
eUlkTGlzdDo6Y3VycmVudFNsb3dQYXRoVGFyZ2V0KAotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbykgY29uc3QKLXsKLSAgICBpZiAoaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVs
dGFDYWxsVG9TbG93Q2FzZSk7Ci0gICAgcmV0dXJuIG1fbGlzdC5sYXN0KCkuc3R1YlJvdXRpbmUo
KS0+Y29kZSgpLmNvZGUoKTsKLX0KLQotdm9pZCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjphZGRB
Y2Nlc3MoY29uc3QgR2V0QnlJZEFjY2VzcyYgYWNjZXNzKQotewotICAgIEFTU0VSVCghaXNGdWxs
KCkpOwotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSByZXNpemluZyBvcHRpbWl6ZXMgZm9yIHNw
YWNlLCBub3QgdGltZS4KLSAgICBtX2xpc3QucmVzaXplVG9GaXQobV9saXN0LnNpemUoKSArIDEp
OwotICAgIG1fbGlzdC5sYXN0KCkgPSBhY2Nlc3M7Ci19Ci0KLWJvb2wgUG9seW1vcnBoaWNHZXRC
eUlkTGlzdDo6aXNGdWxsKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoc2l6ZSgpIDw9IFBPTFlNT1JQ
SElDX0xJU1RfQ0FDSEVfU0laRSk7Ci0gICAgcmV0dXJuIHNpemUoKSA9PSBQT0xZTU9SUEhJQ19M
SVNUX0NBQ0hFX1NJWkU7Ci19Ci0KLWJvb2wgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6aXNBbG1v
c3RGdWxsKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoc2l6ZSgpIDw9IFBPTFlNT1JQSElDX0xJU1Rf
Q0FDSEVfU0laRSk7Ci0gICAgcmV0dXJuIHNpemUoKSA+PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hF
X1NJWkUgLSAxOwotfQotCi1ib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmRpZFNlbGZQYXRj
aGluZygpIGNvbnN0Ci17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gc2l6ZSgpOyBpLS07KSB7Ci0g
ICAgICAgIGlmIChhdChpKS50eXBlKCkgPT0gR2V0QnlJZEFjY2Vzczo6U2ltcGxlSW5saW5lKQot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
Ym9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojp2aXNpdFdlYWsoVk0mIHZtKSBjb25zdAotewot
ICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUoKTsgaS0tOykgewotICAgICAgICBpZiAoIWF0KGkp
LnZpc2l0V2Vhayh2bSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJl
dHVybiB0cnVlOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEVOQUJMRShK
SVQpCi0KLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGlj
R2V0QnlJZExpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oCShyZXZpc2lvbiAxODkzMjQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDEzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgUG9seW1vcnBoaWNHZXRCeUlkTGlzdF9oCi0j
ZGVmaW5lIFBvbHltb3JwaGljR2V0QnlJZExpc3RfaAotCi0jaWYgRU5BQkxFKEpJVCkKLQotI2lu
Y2x1ZGUgIkNvZGVPcmlnaW4uaCIKLSNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgotI2luY2x1
ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiCi0jaW5jbHVkZSAiT3Bjb2RlLmgiCi0j
aW5jbHVkZSAiU3RydWN0dXJlLmgiCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3Bh
Y2UgSlNDIHsKLQotY2xhc3MgQ29kZUJsb2NrOwotc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvOwot
Ci1jbGFzcyBHZXRCeUlkQWNjZXNzIHsKLXB1YmxpYzoKLSAgICBlbnVtIEFjY2Vzc1R5cGUgewot
ICAgICAgICBJbnZhbGlkLAotICAgICAgICBTaW1wbGVJbmxpbmUsIC8vIFRoaXMgaXMgdGhlIHBh
dGNoZWQgaW5saW5lIGFjY2Vzcy4KLSAgICAgICAgU2ltcGxlU3R1YiwgLy8gVGhpcyBpcyBhIHN0
dWIuCi0gICAgICAgIFdhdGNoZWRTdHViLAotICAgICAgICBHZXR0ZXIsCi0gICAgICAgIEN1c3Rv
bUdldHRlciwKLSAgICAgICAgU2ltcGxlTWlzcywKLSAgICB9OwotICAgIAotICAgIEdldEJ5SWRB
Y2Nlc3MoKQotICAgICAgICA6IG1fdHlwZShJbnZhbGlkKQotICAgIHsKLSAgICB9Ci0gICAgCi0g
ICAgR2V0QnlJZEFjY2VzcygKLSAgICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBl
LCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiwgU3RydWN0dXJlKiwKLSAgICAgICAgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQo
KSk7Ci0gICAgCi0gICAgfkdldEJ5SWRBY2Nlc3MoKTsKLSAgICAKLSAgICBzdGF0aWMgR2V0QnlJ
ZEFjY2VzcyBmcm9tU3RydWN0dXJlU3R1YkluZm8oU3RydWN0dXJlU3R1YkluZm8mKTsKLSAgICAK
LSAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV90eXBlICE9IEludmFsaWQ7IH0KLSAg
ICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9Ci0gICAgCi0gICAg
QWNjZXNzVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAgCi0gICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZS5nZXQoKTsgfQot
ICAgIAotICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQo
KSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQotICAgIAotICAgIEpJVFN0dWJSb3V0
aW5lKiBzdHViUm91dGluZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaXNTZXQoKSk7
Ci0gICAgICAgIHJldHVybiBtX3N0dWJSb3V0aW5lLmdldCgpOwotICAgIH0KLSAgICAKLSAgICBi
b29sIGRvZXNDYWxscygpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBHZXR0ZXIgfHwgdHlwZSgp
ID09IEN1c3RvbUdldHRlcjsgfQotICAgIAotICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgY29uc3Q7
Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKLSAgICAKLSAgICBBY2Nl
c3NUeXBlIG1fdHlwZTsKLSAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cnVjdHVyZTsK
LSAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKLSAgICBSZWZQ
dHI8SklUU3R1YlJvdXRpbmU+IG1fc3R1YlJvdXRpbmU7Ci19OwotCi1jbGFzcyBQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAg
ICAvLyBFaXRoZXIgY3JlYXRlcyBhIG5ldyBwb2x5bW9ycGhpYyBnZXQgbGlzdCwgb3IgcmV0dXJu
cyB0aGUgb25lIHRoYXQgaXMgYWxyZWFkeSBpbgotICAgIC8vIHBsYWNlLgotICAgIHN0YXRpYyBQ
b2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBmcm9tKFN0cnVjdHVyZVN0dWJJbmZvJik7Ci0gICAgCi0g
ICAgflBvbHltb3JwaGljR2V0QnlJZExpc3QoKTsKLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgY3VycmVudFNsb3dQYXRoVGFyZ2V0KFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykg
Y29uc3Q7Ci0gICAgCi0gICAgdm9pZCBhZGRBY2Nlc3MoY29uc3QgR2V0QnlJZEFjY2VzcyYpOwot
ICAgIAotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5pc0VtcHR5KCk7
IH0KLSAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9saXN0LnNpemUoKTsgfQot
ICAgIGJvb2wgaXNGdWxsKCkgY29uc3Q7Ci0gICAgYm9vbCBpc0FsbW9zdEZ1bGwoKSBjb25zdDsg
Ly8gVHJ1ZSBpZiBhZGRpbmcgYW4gZWxlbWVudCB3b3VsZCBtYWtlIGlzRnVsbCgpIHRydWUuCi0g
ICAgY29uc3QgR2V0QnlJZEFjY2VzcyYgYXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9s
aXN0W2ldOyB9Ci0gICAgY29uc3QgR2V0QnlJZEFjY2VzcyYgb3BlcmF0b3JbXSh1bnNpZ25lZCBp
KSBjb25zdCB7IHJldHVybiBtX2xpc3RbaV07IH0KLSAgICAKLSAgICBib29sIGRpZFNlbGZQYXRj
aGluZygpIGNvbnN0OyAvLyBBcmUgYW55IG9mIHRoZSBhY2Nlc3NlcyBTaW1wbGVJbmxpbmU/Ci0g
ICAgCi0gICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBmcmll
bmQgY2xhc3MgQ29kZUJsb2NrOwotICAgIAotICAgIFBvbHltb3JwaGljR2V0QnlJZExpc3QoU3Ry
dWN0dXJlU3R1YkluZm8mKTsKLSAgICAKLSAgICBWZWN0b3I8R2V0QnlJZEFjY2VzcywgMj4gbV9s
aXN0OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoSklUKQot
Ci0jZW5kaWYgLy8gUG9seW1vcnBoaWNHZXRCeUlkTGlzdF9oCi0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlz
dC5jcHAJKHJldmlzaW9uIDE4OTMyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNTYgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUG9seW1vcnBoaWNQdXRCeUlk
TGlzdC5oIgotCi0jaWYgRU5BQkxFKEpJVCkKLQotI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZv
LmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1QdXRCeUlkQWNjZXNzIFB1dEJ5SWRBY2Nlc3M6OmZy
b21TdHJ1Y3R1cmVTdHViSW5mbyhTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGluaXRpYWxTbG93UGF0aCA9Ci0gICAgICAgIHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2Fs
bFRvU2xvd0Nhc2UpOwotICAgIAotICAgIFB1dEJ5SWRBY2Nlc3MgcmVzdWx0OwotICAgIAotICAg
IHN3aXRjaCAoc3R1YkluZm8uYWNjZXNzVHlwZSkgewotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9p
ZF9yZXBsYWNlOgotICAgICAgICByZXN1bHQubV90eXBlID0gUmVwbGFjZTsKLSAgICAgICAgcmVz
dWx0Lm1fb2xkU3RydWN0dXJlLmNvcHlGcm9tKHN0dWJJbmZvLnUucHV0QnlJZFJlcGxhY2UuYmFz
ZU9iamVjdFN0cnVjdHVyZSk7Ci0gICAgICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gSklUU3R1
YlJvdXRpbmU6OmNyZWF0ZVNlbGZNYW5hZ2VkUm91dGluZShpbml0aWFsU2xvd1BhdGgpOwotICAg
ICAgICBicmVhazsKLSAgICAgICAgCi0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRp
b25fZGlyZWN0OgotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoK
LSAgICAgICAgcmVzdWx0Lm1fdHlwZSA9IFRyYW5zaXRpb247Ci0gICAgICAgIHJlc3VsdC5tX29s
ZFN0cnVjdHVyZS5jb3B5RnJvbShzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3Vz
U3RydWN0dXJlKTsKLSAgICAgICAgcmVzdWx0Lm1fbmV3U3RydWN0dXJlLmNvcHlGcm9tKHN0dWJJ
bmZvLnUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlKTsKLSAgICAgICAgcmVzdWx0Lm1fY29u
ZGl0aW9uU2V0ID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmFkb3B0UmF3UG9pbnRlcigK
LSAgICAgICAgICAgIHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0
KTsKLSAgICAgICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBzdHViSW5mby5zdHViUm91dGluZTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLWJvb2wgUHV0QnlJZEFjY2Vzczo6dmlzaXRXZWFrKFZNJiB2bSkgY29uc3QKLXsKLSAgICBp
ZiAoIW1fY29uZGl0aW9uU2V0LmFyZVN0aWxsTGl2ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgCi0gICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICBjYXNlIFJlcGxhY2U6Ci0gICAgICAg
IGlmICghSGVhcDo6aXNNYXJrZWQobV9vbGRTdHJ1Y3R1cmUuZ2V0KCkpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFRyYW5zaXRpb246Ci0gICAg
ICAgIGlmICghSGVhcDo6aXNNYXJrZWQobV9vbGRTdHJ1Y3R1cmUuZ2V0KCkpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fbmV3U3RydWN0
dXJlLmdldCgpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBTZXR0ZXI6Ci0gICAgY2FzZSBDdXN0b21TZXR0ZXI6Ci0gICAgICAgIGlmICghSGVh
cDo6aXNNYXJrZWQobV9vbGRTdHJ1Y3R1cmUuZ2V0KCkpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmICgh
bV9zdHViUm91dGluZS0+dmlzaXRXZWFrKHZtKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IHJldHVybiB0cnVlOwotfQotCi1Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0OjpQb2x5bW9ycGhpY1B1
dEJ5SWRMaXN0KAotICAgIFB1dEtpbmQgcHV0S2luZCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvKQotICAgIDogbV9raW5kKHB1dEtpbmQpCi17Ci0gICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5
cGUgIT0gYWNjZXNzX3Vuc2V0KQotICAgICAgICBtX2xpc3QuYXBwZW5kKFB1dEJ5SWRBY2Nlc3M6
OmZyb21TdHJ1Y3R1cmVTdHViSW5mbyhzdHViSW5mbykpOwotfQotCi1Qb2x5bW9ycGhpY1B1dEJ5
SWRMaXN0KiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojpmcm9tKAotICAgIFB1dEtpbmQgcHV0S2lu
ZCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIGlmIChzdHViSW5mby5hY2Nl
c3NUeXBlID09IGFjY2Vzc19wdXRfYnlfaWRfbGlzdCkKLSAgICAgICAgcmV0dXJuIHN0dWJJbmZv
LnUucHV0QnlJZExpc3QubGlzdDsKLSAgICAKLSAgICBBU1NFUlQoc3R1YkluZm8uYWNjZXNzVHlw
ZSA9PSBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2UKLSAgICAgICAgfHwgc3R1YkluZm8uYWNjZXNz
VHlwZSA9PSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsCi0gICAgICAgIHx8IHN0
dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdAot
ICAgICAgICB8fCBzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc191bnNldCk7Ci0gICAgCi0g
ICAgUG9seW1vcnBoaWNQdXRCeUlkTGlzdCogcmVzdWx0ID0KLSAgICAgICAgbmV3IFBvbHltb3Jw
aGljUHV0QnlJZExpc3QocHV0S2luZCwgc3R1YkluZm8pOwotICAgIAotICAgIHN0dWJJbmZvLmlu
aXRQdXRCeUlkTGlzdChyZXN1bHQpOwotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVBv
bHltb3JwaGljUHV0QnlJZExpc3Q6On5Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KCkgeyB9Ci0KLWJv
b2wgUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6aXNGdWxsKCkgY29uc3QKLXsKLSAgICBBU1NFUlQo
c2l6ZSgpIDw9IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSk7Ci0gICAgcmV0dXJuIHNpemUo
KSA9PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkU7Ci19Ci0KLWJvb2wgUG9seW1vcnBoaWNQ
dXRCeUlkTGlzdDo6aXNBbG1vc3RGdWxsKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoc2l6ZSgpIDw9
IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSk7Ci0gICAgcmV0dXJuIHNpemUoKSA+PSBQT0xZ
TU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUgLSAxOwotfQotCi12b2lkIFBvbHltb3JwaGljUHV0QnlJ
ZExpc3Q6OmFkZEFjY2Vzcyhjb25zdCBQdXRCeUlkQWNjZXNzJiBwdXRCeUlkQWNjZXNzKQotewot
ICAgIEFTU0VSVCghaXNGdWxsKCkpOwotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSByZXNpemlu
ZyBvcHRpbWl6ZXMgZm9yIHNwYWNlLCBub3QgdGltZS4KLSAgICBtX2xpc3QucmVzaXplVG9GaXQo
bV9saXN0LnNpemUoKSArIDEpOwotICAgIG1fbGlzdC5sYXN0KCkgPSBwdXRCeUlkQWNjZXNzOwot
fQotCi1ib29sIFBvbHltb3JwaGljUHV0QnlJZExpc3Q6OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0
Ci17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemUoKTsgKytpKSB7Ci0gICAgICAg
IGlmICghYXQoaSkudmlzaXRXZWFrKHZtKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYg
Ly8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY1B1dEJ5SWRMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuaAkocmV2aXNpb24gMTg5MzI0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuaAko
d29ya2luZyBjb3B5KQpAQCAtMSwyMTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MiwgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFBvbHltb3JwaGljUHV0
QnlJZExpc3RfaAotI2RlZmluZSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0X2gKLQotI2lmIEVOQUJM
RShKSVQpCi0KLSNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCi0jaW5jbHVkZSAiTWFjcm9Bc3NlbWJs
ZXIuaCIKLSNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgotI2luY2x1ZGUg
Ik9wY29kZS5oIgotI2luY2x1ZGUgIlB1dEtpbmQuaCIKLSNpbmNsdWRlICJQdXRQcm9wZXJ0eVNs
b3QuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0K
LW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBDb2RlQmxvY2s7Ci1zdHJ1Y3QgU3RydWN0dXJlU3R1
YkluZm87Ci0KLWNsYXNzIFB1dEJ5SWRBY2Nlc3MgewotcHVibGljOgotICAgIGVudW0gQWNjZXNz
VHlwZSB7Ci0gICAgICAgIEludmFsaWQsCi0gICAgICAgIFRyYW5zaXRpb24sCi0gICAgICAgIFJl
cGxhY2UsCi0gICAgICAgIFNldHRlciwKLSAgICAgICAgQ3VzdG9tU2V0dGVyCi0gICAgfTsKLSAg
ICAKLSAgICBQdXRCeUlkQWNjZXNzKCkKLSAgICAgICAgOiBtX3R5cGUoSW52YWxpZCkKLSAgICB7
Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyBQdXRCeUlkQWNjZXNzIHRyYW5zaXRpb24oCi0gICAg
ICAgIFZNJiB2bSwKLSAgICAgICAgSlNDZWxsKiBvd25lciwKLSAgICAgICAgU3RydWN0dXJlKiBv
bGRTdHJ1Y3R1cmUsCi0gICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLAotICAgICAgICBj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LAotICAgICAgICBQ
YXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSkKLSAgICB7Ci0gICAgICAgIFB1
dEJ5SWRBY2Nlc3MgcmVzdWx0OwotICAgICAgICByZXN1bHQubV90eXBlID0gVHJhbnNpdGlvbjsK
LSAgICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlLnNldCh2bSwgb3duZXIsIG9sZFN0cnVjdHVy
ZSk7Ci0gICAgICAgIHJlc3VsdC5tX25ld1N0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBuZXdTdHJ1
Y3R1cmUpOwotICAgICAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7Ci0g
ICAgICAgIHJlc3VsdC5tX2N1c3RvbVNldHRlciA9IDA7Ci0gICAgICAgIHJlc3VsdC5tX3N0dWJS
b3V0aW5lID0gc3R1YlJvdXRpbmU7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0g
ICAgc3RhdGljIFB1dEJ5SWRBY2Nlc3MgcmVwbGFjZSgKLSAgICAgICAgVk0mIHZtLAotICAgICAg
ICBKU0NlbGwqIG93bmVyLAotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKLSAgICAgICAg
UGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUpCi0gICAgewotICAgICAgICBQ
dXRCeUlkQWNjZXNzIHJlc3VsdDsKLSAgICAgICAgcmVzdWx0Lm1fdHlwZSA9IFJlcGxhY2U7Ci0g
ICAgICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOwot
ICAgICAgICByZXN1bHQubV9jdXN0b21TZXR0ZXIgPSAwOwotICAgICAgICByZXN1bHQubV9zdHVi
Um91dGluZSA9IHN0dWJSb3V0aW5lOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQot
Ci0gICAgc3RhdGljIFB1dEJ5SWRBY2Nlc3Mgc2V0dGVyKAotICAgICAgICBWTSYgdm0sCi0gICAg
ICAgIEpTQ2VsbCogb3duZXIsCi0gICAgICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSwKLSAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCi0gICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCi0gICAgICAgIFB1dFByb3BlcnR5U2xvdDo6UHV0VmFs
dWVGdW5jIGN1c3RvbVNldHRlciwKLSAgICAgICAgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4g
c3R1YlJvdXRpbmUpCi0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChhY2Nlc3NUeXBlID09
IFNldHRlciB8fCBhY2Nlc3NUeXBlID09IEN1c3RvbVNldHRlcik7Ci0gICAgICAgIFB1dEJ5SWRB
Y2Nlc3MgcmVzdWx0OwotICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuc2V0KHZtLCBvd25l
ciwgc3RydWN0dXJlKTsKLSAgICAgICAgcmVzdWx0Lm1fdHlwZSA9IGFjY2Vzc1R5cGU7Ci0gICAg
ICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKLSAgICAgICAgcmVzdWx0
Lm1fY3VzdG9tU2V0dGVyID0gY3VzdG9tU2V0dGVyOwotICAgICAgICByZXN1bHQubV9zdHViUm91
dGluZSA9IHN0dWJSb3V0aW5lOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAK
LSAgICBzdGF0aWMgUHV0QnlJZEFjY2VzcyBmcm9tU3RydWN0dXJlU3R1YkluZm8oU3RydWN0dXJl
U3R1YkluZm8mKTsKLSAgICAKLSAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV90eXBl
ICE9IEludmFsaWQ7IH0KLSAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1Nl
dCgpOyB9Ci0gICAgCi0gICAgQWNjZXNzVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBl
OyB9Ci0gICAgCi0gICAgYm9vbCBpc1RyYW5zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3R5cGUg
PT0gVHJhbnNpdGlvbjsgfQotICAgIGJvb2wgaXNSZXBsYWNlKCkgY29uc3QgeyByZXR1cm4gbV90
eXBlID09IFJlcGxhY2U7IH0KLSAgICBib29sIGlzU2V0dGVyKCkgY29uc3QgeyByZXR1cm4gbV90
eXBlID09IFNldHRlcjsgfQotICAgIGJvb2wgaXNDdXN0b20oKSBjb25zdCB7IHJldHVybiBtX3R5
cGUgPT0gQ3VzdG9tU2V0dGVyOyB9Ci0gICAgCi0gICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUo
KSBjb25zdAotICAgIHsKLSAgICAgICAgLy8gVXNpbmcgdGhpcyBpbnN0ZWFkIG9mIGlzU2V0KCkg
dG8gbWFrZSB0aGlzIGFzc2VydGlvbiByb2J1c3QgYWdhaW5zdCB0aGUgcG9zc2liaWxpdHkKLSAg
ICAgICAgLy8gb2YgYWRkaXRpb25hbCBhY2Nlc3MgdHlwZXMgYmVpbmcgYWRkZWQuCi0gICAgICAg
IEFTU0VSVChpc1RyYW5zaXRpb24oKSB8fCBpc1JlcGxhY2UoKSB8fCBpc1NldHRlcigpIHx8IGlz
Q3VzdG9tKCkpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIG1fb2xkU3RydWN0dXJlLmdldCgp
OwotICAgIH0KLSAgICAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0Ci0gICAgewot
ICAgICAgICBBU1NFUlQoaXNSZXBsYWNlKCkgfHwgaXNTZXR0ZXIoKSB8fCBpc0N1c3RvbSgpKTsK
LSAgICAgICAgcmV0dXJuIG1fb2xkU3RydWN0dXJlLmdldCgpOwotICAgIH0KLSAgICAKLSAgICBT
dHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaXNU
cmFuc2l0aW9uKCkpOwotICAgICAgICByZXR1cm4gbV9uZXdTdHJ1Y3R1cmUuZ2V0KCk7Ci0gICAg
fQotICAgIAotICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25T
ZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQotICAgIAotICAgIEpJVFN0dWJS
b3V0aW5lKiBzdHViUm91dGluZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaXNUcmFu
c2l0aW9uKCkgfHwgaXNSZXBsYWNlKCkgfHwgaXNTZXR0ZXIoKSB8fCBpc0N1c3RvbSgpKTsKLSAg
ICAgICAgcmV0dXJuIG1fc3R1YlJvdXRpbmUuZ2V0KCk7Ci0gICAgfQotCi0gICAgUHV0UHJvcGVy
dHlTbG90OjpQdXRWYWx1ZUZ1bmMgY3VzdG9tU2V0dGVyKCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IEFTU0VSVChpc0N1c3RvbSgpKTsKLSAgICAgICAgcmV0dXJuIG1fY3VzdG9tU2V0dGVyOwotICAg
IH0KLQotICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgY29uc3Q7Ci0gICAgCi1wcml2YXRlOgotICAg
IGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7Ci0gICAgCi0gICAgQWNjZXNzVHlwZSBtX3R5cGU7Ci0g
ICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9vbGRTdHJ1Y3R1cmU7Ci0gICAgV3JpdGVCYXJy
aWVyPFN0cnVjdHVyZT4gbV9uZXdTdHJ1Y3R1cmU7Ci0gICAgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQgbV9jb25kaXRpb25TZXQ7Ci0gICAgUHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmMg
bV9jdXN0b21TZXR0ZXI7Ci0gICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBtX3N0dWJSb3V0aW5l
OwotfTsKLQotY2xhc3MgUG9seW1vcnBoaWNQdXRCeUlkTGlzdCB7Ci0gICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgLy8gRWl0aGVyIGNyZWF0ZXMgYSBuZXcgcG9seW1v
cnBoaWMgcHV0IGxpc3QsIG9yIHJldHVybnMgdGhlIG9uZSB0aGF0IGlzIGFscmVhZHkKLSAgICAv
LyBpbiBwbGFjZS4KLSAgICBzdGF0aWMgUG9seW1vcnBoaWNQdXRCeUlkTGlzdCogZnJvbShQdXRL
aW5kLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwotICAgIAotICAgIH5Qb2x5bW9ycGhpY1B1dEJ5SWRM
aXN0KCk7Ci0gICAgCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN1cnJlbnRTbG93UGF0aFRh
cmdldCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9saXN0Lmxhc3QoKS5zdHViUm91
dGluZSgpLT5jb2RlKCkuY29kZSgpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGFkZEFjY2Vzcyhj
b25zdCBQdXRCeUlkQWNjZXNzJik7Ci0gICAgCi0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9saXN0LmlzRW1wdHkoKTsgfQotICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX2xpc3Quc2l6ZSgpOyB9Ci0gICAgYm9vbCBpc0Z1bGwoKSBjb25zdDsKLSAgICBib29s
IGlzQWxtb3N0RnVsbCgpIGNvbnN0OyAvLyBUcnVlIGlmIGFkZGluZyBhbiBlbGVtZW50IHdvdWxk
IG1ha2UgaXNGdWxsKCkgdHJ1ZS4KLSAgICBjb25zdCBQdXRCeUlkQWNjZXNzJiBhdCh1bnNpZ25l
ZCBpKSBjb25zdCB7IHJldHVybiBtX2xpc3RbaV07IH0KLSAgICBjb25zdCBQdXRCeUlkQWNjZXNz
JiBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdFtpXTsgfQotICAg
IAotICAgIFB1dEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQotICAgIAotICAg
IGJvb2wgdmlzaXRXZWFrKFZNJikgY29uc3Q7Ci0gICAgCi1wcml2YXRlOgotICAgIGZyaWVuZCBj
bGFzcyBDb2RlQmxvY2s7Ci0gICAgCi0gICAgLy8gSW5pdGlhbGl6ZSBmcm9tIGEgc3R1YiBpbmZv
OyB0aGlzIHdpbGwgcGxhY2Ugb25lIGVsZW1lbnQgaW4gdGhlIGxpc3QgYW5kIGl0IHdpbGwKLSAg
ICAvLyBiZSBjcmVhdGVkIGJ5IGNvbnZlcnRpbmcgdGhlIHN0dWIgaW5mbydzIHB1dCBieSBpZCBh
Y2Nlc3MgaW5mb3JtYXRpb24gaW50byBvdXIKLSAgICAvLyBQdXRCeUlkQWNjZXNzLgotICAgIFBv
bHltb3JwaGljUHV0QnlJZExpc3QoUHV0S2luZCwgU3RydWN0dXJlU3R1YkluZm8mKTsKLQotICAg
IFZlY3RvcjxQdXRCeUlkQWNjZXNzLCAyPiBtX2xpc3Q7Ci0gICAgUHV0S2luZCBtX2tpbmQ7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0KLSNlbmRp
ZiAvLyBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0X2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMTg5MzI0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiTExJbnREYXRhLmgiCiAjaW5j
bHVkZSAiTG93TGV2ZWxJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNp
bmNsdWRlICJQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNB
Y2Nlc3MuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVDaGFp
bi5oIgogI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgpAQCAtMTU0LDE0ICsxNTQsMTQgQEAgUHV0
QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgIGlmICghc3R1YkluZm8t
PnNlZW4pCiAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKCk7CiAgICAgCi0gICAgc3dpdGNo
IChzdHViSW5mby0+YWNjZXNzVHlwZSkgewotICAgIGNhc2UgYWNjZXNzX3Vuc2V0OgorICAgIHN3
aXRjaCAoc3R1YkluZm8tPmNhY2hlVHlwZSkgeworICAgIGNhc2UgQ2FjaGVUeXBlOjpVbnNldDoK
ICAgICAgICAgLy8gSWYgdGhlIEpJVCBzYXcgaXQgYnV0IGRpZG4ndCBvcHRpbWl6ZSBpdCwgdGhl
biBhc3N1bWUgdGhhdCB0aGlzIHRha2VzIHNsb3cgcGF0aC4KICAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgICAgIAotICAgIGNhc2UgYWNjZXNzX3B1dF9i
eV9pZF9yZXBsYWNlOiB7CisgICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOiB7CiAg
ICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9Ci0gICAgICAgICAgICBzdHViSW5mby0+dS5w
dXRCeUlkUmVwbGFjZS5iYXNlT2JqZWN0U3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsK
KyAgICAgICAgICAgIHN0dWJJbmZvLT51LmJ5SWRSZXBsYWNlLmJhc2VPYmplY3RTdHJ1Y3R1cmUt
PmdldENvbmN1cnJlbnRseSh1aWQpOwogICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQp
KSB7CiAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoCiAgICAgICAg
ICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZS5n
ZXQoKSwgb2Zmc2V0KTsKQEAgLTE2OSw1MSArMTY5LDI2IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJ
ZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNT
bG93UGF0aCk7CiAgICAgfQogICAgICAgICAKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJh
bnNpdGlvbl9ub3JtYWw6Ci0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGly
ZWN0OiB7Ci0gICAgICAgIEFTU0VSVChzdHViSW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2
aW91c1N0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQo
KSk7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IAotICAgICAgICAgICAgc3R1Yklu
Zm8tPnUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsK
LSAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgewotICAgICAgICAgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0ID0gT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQ6OmZyb21SYXdQb2ludGVyKAotICAgICAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5
SWRUcmFuc2l0aW9uLnJhd0NvbmRpdGlvblNldCk7Ci0gICAgICAgICAgICBpZiAoIWNvbmRpdGlv
blNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
UHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlk
VmFyaWFudDo6dHJhbnNpdGlvbigKLSAgICAgICAgICAgICAgICBzdHViSW5mby0+dS5wdXRCeUlk
VHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZS5nZXQoKSwKLSAgICAgICAgICAgICAgICBzdHVi
SW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUuZ2V0KCksCi0gICAgICAgICAgICAg
ICAgY29uZGl0aW9uU2V0LCBvZmZzZXQpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgIH0KLSAgICAgICAgCi0gICAgY2FzZSBhY2Nl
c3NfcHV0X2J5X2lkX2xpc3Q6IHsKLSAgICAgICAgUG9seW1vcnBoaWNQdXRCeUlkTGlzdCogbGlz
dCA9IHN0dWJJbmZvLT51LnB1dEJ5SWRMaXN0Lmxpc3Q7CisgICAgY2FzZSBDYWNoZVR5cGU6OlN0
dWI6IHsKKyAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3MqIGxpc3QgPSBzdHViSW5mby0+dS5zdHVi
OwogICAgICAgICAKICAgICAgICAgUHV0QnlJZFN0YXR1cyByZXN1bHQ7CiAgICAgICAgIHJlc3Vs
dC5tX3N0YXRlID0gU2ltcGxlOwogICAgICAgICAKICAgICAgICAgU3RhdGUgc2xvd1BhdGhTdGF0
ZSA9IFRha2VzU2xvd1BhdGg7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0
LT5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgY29uc3QgUHV0QnlJZEFjY2VzcyYgYWNjZXNz
ID0gbGlzdC0+YXQoaSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN3aXRjaCAoYWNjZXNz
LnR5cGUoKSkgewotICAgICAgICAgICAgY2FzZSBQdXRCeUlkQWNjZXNzOjpTZXR0ZXI6Ci0gICAg
ICAgICAgICBjYXNlIFB1dEJ5SWRBY2Nlc3M6OkN1c3RvbVNldHRlcjoKKyAgICAgICAgICAgIGNv
bnN0IEFjY2Vzc0Nhc2UmIGFjY2VzcyA9IGxpc3QtPmF0KGkpOworICAgICAgICAgICAgaWYgKGFj
Y2Vzcy5kb2VzQ2FsbHMoKSkKICAgICAgICAgICAgICAgICBzbG93UGF0aFN0YXRlID0gTWFrZXND
YWxsczsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5zaXplKCk7ICsraSkgewotICAg
ICAgICAgICAgY29uc3QgUHV0QnlJZEFjY2VzcyYgYWNjZXNzID0gbGlzdC0+YXQoaSk7CisgICAg
ICAgICAgICBjb25zdCBBY2Nlc3NDYXNlJiBhY2Nlc3MgPSBsaXN0LT5hdChpKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQgdmFyaWFudDsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgc3dpdGNoIChhY2Nlc3MudHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIFB1
dEJ5SWRBY2Nlc3M6OlJlcGxhY2U6IHsKKyAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6UmVw
bGFjZTogewogICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYWNjZXNzLnN0
cnVjdHVyZSgpOwogICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVj
dHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CiAgICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlk
T2Zmc2V0KG9mZnNldCkpCkBAIC0yMjIsNyArMTk3LDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlk
U3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBQdXRCeUlkQWNjZXNzOjpUcmFu
c2l0aW9uOiB7CisgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OlRyYW5zaXRpb246IHsKICAg
ICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPQogICAgICAgICAgICAgICAgICAg
ICBhY2Nlc3MubmV3U3RydWN0dXJlKCktPmdldENvbmN1cnJlbnRseSh1aWQpOwogICAgICAgICAg
ICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQpAQCAtMjMxLDExICsyMDYsMTEgQEAg
UHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgICAg
IGlmICghY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eSgpKQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhzbG93UGF0aFN0YXRlKTsKICAgICAgICAg
ICAgICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCi0gICAgICAgICAg
ICAgICAgICAgIGFjY2Vzcy5vbGRTdHJ1Y3R1cmUoKSwgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLCBj
b25kaXRpb25TZXQsIG9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5zdHJ1Y3R1
cmUoKSwgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLCBjb25kaXRpb25TZXQsIG9mZnNldCk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICBjYXNlIFB1dEJ5SWRBY2Nlc3M6OlNldHRlcjogeworICAgICAgICAgICAgY2FzZSBB
Y2Nlc3NDYXNlOjpTZXR0ZXI6IHsKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IGFjY2Vzcy5zdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBDb21wbGV4R2V0U3RhdHVzIGNvbXBsZXhHZXRTdGF0dXMgPSBDb21wbGV4R2V0U3RhdHVzOjpj
b21wdXRlRm9yKApAQCAtMjQ5LDEyICsyMjQsMTIgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3Rh
dHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1
cyhzbG93UGF0aFN0YXRlKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
Y2FzZSBDb21wbGV4R2V0U3RhdHVzOjpJbmxpbmVhYmxlOiB7Ci0gICAgICAgICAgICAgICAgICAg
IEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lKiBzdHViID0gc3RhdGljX2Nhc3Q8QWNjZXNzb3JD
YWxsSklUU3R1YlJvdXRpbmUqPigKLSAgICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5zdHVi
Um91dGluZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0lu
Zm8gPSBhY2Nlc3MuY2FsbExpbmtJbmZvKCk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChj
YWxsTGlua0luZm8pOwogICAgICAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExp
bmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzID0KICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6
bWFrZV91bmlxdWU8Q2FsbExpbmtTdGF0dXM+KAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ssICpzdHViLT5tX2NhbGxMaW5rSW5mbywgY2FsbEV4
aXRTaXRlRGF0YSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIHBy
b2ZpbGVkQmxvY2ssICpjYWxsTGlua0luZm8sIGNhbGxFeGl0U2l0ZURhdGEpKTsKICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFu
dDo6c2V0dGVyKAogICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBjb21wbGV4R2V0
U3RhdHVzLm9mZnNldCgpLCBjb21wbGV4R2V0U3RhdHVzLmNvbmRpdGlvblNldCgpLApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1Yklu
Zm8uY3BwCShyZXZpc2lvbiAxODkzMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwzNyArMzYsNTIg
QEAgbmFtZXNwYWNlIEpTQyB7CiAjaWYgRU5BQkxFKEpJVCkKIHZvaWQgU3RydWN0dXJlU3R1Yklu
Zm86OmRlcmVmKCkKIHsKLSAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKLSAgICBjYXNlIGFjY2Vz
c19nZXRfYnlfaWRfbGlzdDogewotICAgICAgICBkZWxldGUgdS5nZXRCeUlkTGlzdC5saXN0Owot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9saXN0Ogot
ICAgICAgICBkZWxldGUgdS5wdXRCeUlkTGlzdC5saXN0OwotICAgICAgICByZXR1cm47Ci0gICAg
Y2FzZSBhY2Nlc3NfaW5fbGlzdDogewotICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVy
ZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlcyA9IHUuaW5MaXN0LnN0cnVjdHVyZUxpc3Q7Ci0g
ICAgICAgIGRlbGV0ZSBwb2x5bW9ycGhpY1N0cnVjdHVyZXM7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgotICAgIGNh
c2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdDoKLSAgICAgICAgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQ6OmFkb3B0UmF3UG9pbnRlcih1LnB1dEJ5SWRUcmFuc2l0aW9uLnJh
d0NvbmRpdGlvblNldCk7Ci0gICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9u
U2V0ID0gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgYWNjZXNzX2dldF9ieV9p
ZF9zZWxmOgotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlOgotICAgIGNhc2UgYWNj
ZXNzX3Vuc2V0OgotICAgICAgICAvLyBUaGVzZSBpbnN0cnVjdGlvbnMgZG9uJ3QgaGF2ZSB0byBy
ZWxlYXNlIGFueSBhbGxvY2F0ZWQgbWVtb3J5CisgICAgc3dpdGNoIChjYWNoZVR5cGUpIHsKKyAg
ICBjYXNlIENhY2hlVHlwZTo6U3R1YjoKKyAgICAgICAgZGVsZXRlIHUuc3R1YjsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgQ2FjaGVUeXBlOjpVbnNldDoKKyAgICBjYXNlIENhY2hlVHlwZTo6
R2V0QnlJZFNlbGY6CisgICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlCiAgICAgICAg
IHJldHVybjsKLSAgICBkZWZhdWx0OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK01h
Y3JvQXNzZW1ibGVyQ29kZVB0ciBTdHJ1Y3R1cmVTdHViSW5mbzo6YWRkQWNjZXNzQ2FzZSgKKyAg
ICBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwg
c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGFjY2Vzc0Nhc2UpCit7CisgICAgaWYgKCFhY2Nl
c3NDYXNlKQorICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7CisgICAgCisg
ICAgaWYgKGNhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlN0dWIpCisgICAgICAgIHJldHVybiB1LnN0
dWItPnJlZ2VuZXJhdGVXaXRoQ2FzZSh2bSwgY29kZUJsb2NrLCAqdGhpcywgaWRlbnQsIGFjY2Vz
c0Nhc2UpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFBvbHltb3JwaGljQWNjZXNzPiBhY2Nlc3Mg
PSBzdGQ6Om1ha2VfdW5pcXVlPFBvbHltb3JwaGljQWNjZXNzPigpOworICAgIAorICAgIFZlY3Rv
cjxzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4+IGFjY2Vzc0Nhc2VzOworICAgIAorICAgIHN0
ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBwcmV2aW91c0Nhc2UgPQorICAgICAgICBBY2Nlc3ND
YXNlOjpmcm9tU3RydWN0dXJlU3R1YkluZm8odm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCksICp0aGlzKTsKKyAgICBpZiAocHJldmlvdXNDYXNlKQorICAgICAgICBhY2Nlc3NDYXNlcy5h
cHBlbmQoc3RkOjptb3ZlKHByZXZpb3VzQ2FzZSkpOworCisgICAgYWNjZXNzQ2FzZXMuYXBwZW5k
KHN0ZDo6bW92ZShhY2Nlc3NDYXNlKSk7CisKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVz
dWx0ID0KKyAgICAgICAgYWNjZXNzLT5yZWdlbmVyYXRlV2l0aENhc2VzKHZtLCBjb2RlQmxvY2ss
ICp0aGlzLCBpZGVudCwgYWNjZXNzQ2FzZXMpOworCisgICAgaWYgKCFyZXN1bHQpCisgICAgICAg
IHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKKworICAgIGNhY2hlVHlwZSA9IENhY2hl
VHlwZTo6U3R1YjsKKyAgICB1LnN0dWIgPSBhY2Nlc3MucmVsZWFzZSgpOwogfQogCiB2b2lkIFN0
cnVjdHVyZVN0dWJJbmZvOjpyZXNldChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAgICBpZiAo
YWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpCisgICAgaWYgKGNhY2hlVHlwZSA9PSBDYWNoZVR5
cGU6OlVuc2V0KQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaWYgKE9wdGlvbnM6OnZlcmJv
c2VPU1IoKSkgewpAQCAtNzQsMTggKzg5LDIxIEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnJl
c2V0KENvZGVCbG9jayoKICAgICAgICAgLy8gb2YgdGhlIENvZGVCbG9jay4KICAgICAgICAgZGF0
YUxvZygiQ2xlYXJpbmcgc3RydWN0dXJlIGNhY2hlIChraW5kICIsIHN0YXRpY19jYXN0PGludD4o
YWNjZXNzVHlwZSksICIpIGluICIsIFJhd1BvaW50ZXIoY29kZUJsb2NrKSwgIi5cbiIpOwogICAg
IH0KLSAgICAKLSAgICBpZiAoaXNHZXRCeUlkQWNjZXNzKHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+
KGFjY2Vzc1R5cGUpKSkKKworICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgeworICAgIGNhc2UgQWNj
ZXNzVHlwZTo6R2V0OgogICAgICAgICByZXNldEdldEJ5SUQoY29kZUJsb2NrLCAqdGhpcyk7Ci0g
ICAgZWxzZSBpZiAoaXNQdXRCeUlkQWNjZXNzKHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KGFjY2Vz
c1R5cGUpKSkKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXQ6CiAgICAg
ICAgIHJlc2V0UHV0QnlJRChjb2RlQmxvY2ssICp0aGlzKTsKLSAgICBlbHNlIHsKLSAgICAgICAg
UkVMRUFTRV9BU1NFUlQoaXNJbkFjY2VzcyhzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihhY2Nlc3NU
eXBlKSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkluOgogICAgICAg
ICByZXNldEluKGNvZGVCbG9jaywgKnRoaXMpOworICAgICAgICBicmVhazsKICAgICB9CiAgICAg
CiAgICAgZGVyZWYoKTsKLSAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX3Vuc2V0OworICAgIGNhY2hl
VHlwZSA9IENhY2hlVHlwZTo6VW5zZXQ7CiAgICAgc3R1YlJvdXRpbmUgPSBudWxscHRyOwogICAg
IHdhdGNocG9pbnRzID0gbnVsbHB0cjsKIH0KQEAgLTkzLDQxICsxMTEsMTggQEAgdm9pZCBTdHJ1
Y3R1cmVTdHViSW5mbzo6cmVzZXQoQ29kZUJsb2NrKgogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6
dmlzaXRXZWFrUmVmZXJlbmNlcyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBWTSYgdm0g
PSAqY29kZUJsb2NrLT52bSgpOwotICAgIAotICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgewotICAg
IGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmOgotICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQo
dS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3Q6IHsK
LSAgICAgICAgaWYgKHUuZ2V0QnlJZExpc3QubGlzdC0+dmlzaXRXZWFrKHZtKSkKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgYWNjZXNzX3B1dF9i
eV9pZF90cmFuc2l0aW9uX25vcm1hbDoKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNp
dGlvbl9kaXJlY3Q6Ci0gICAgICAgIGlmIChIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0
aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgpKQotICAgICAgICAgICAgJiYgSGVhcDo6aXNNYXJr
ZWQodS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUuZ2V0KCkpCi0gICAgICAgICAgICAmJiBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6ZnJvbVJhd1BvaW50ZXIodS5wdXRCeUlkVHJhbnNp
dGlvbi5yYXdDb25kaXRpb25TZXQpLmFyZVN0aWxsTGl2ZSgpKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFjZToKLSAg
ICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKHUucHV0QnlJZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVj
dHVyZS5nZXQoKSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgYWNjZXNzX3B1dF9ieV9pZF9saXN0OgotICAgICAgICBpZiAodS5wdXRCeUlkTGlzdC5saXN0
LT52aXNpdFdlYWsodm0pKQorCisgICAgc3dpdGNoIChjYWNoZVR5cGUpIHsKKyAgICBjYXNlIENh
Y2hlVHlwZTo6R2V0QnlJZFNlbGY6CisgICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNl
OgorICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQodS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0
dXJlLmdldCgpKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBhY2Nlc3NfaW5fbGlzdDogewotICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxp
c3QqIHBvbHltb3JwaGljU3RydWN0dXJlcyA9IHUuaW5MaXN0LnN0cnVjdHVyZUxpc3Q7Ci0gICAg
ICAgIGlmIChwb2x5bW9ycGhpY1N0cnVjdHVyZXMtPnZpc2l0V2Vhayh1LmluTGlzdC5saXN0U2l6
ZSkpCisgICAgY2FzZSBDYWNoZVR5cGU6OlN0dWI6CisgICAgICAgIGlmICh1LnN0dWItPnZpc2l0
V2Vhayh2bSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGJyZWFrOwotICAgIH0KICAg
ICBkZWZhdWx0OgotICAgICAgICAvLyBUaGUgcmVzdCBvZiB0aGUgaW5zdHJ1Y3Rpb25zIGRvbid0
IHJlcXVpcmUgcmVmZXJlbmNlcywgc28gdGhlcmUgaXMgbm8gbmVlZCB0bwotICAgICAgICAvLyBk
byBhbnl0aGluZy4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9u
IDE4OTMyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHVi
SW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiTWFjcm9B
c3NlbWJsZXIuaCIKICNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgogI2lu
Y2x1ZGUgIk9wY29kZS5oIgotI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlz
dC5oIgorI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJT
ZXQuaCIKICNpbmNsdWRlICJTcGlsbFJlZ2lzdGVyc01vZGUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1
cmUuaCIKQEAgLTQyLDU3ICs0MiwyNSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIEVOQUJMRShK
SVQpCiAKLWNsYXNzIFBvbHltb3JwaGljR2V0QnlJZExpc3Q7Ci1jbGFzcyBQb2x5bW9ycGhpY1B1
dEJ5SWRMaXN0OworY2xhc3MgUG9seW1vcnBoaWNBY2Nlc3M7CiAKLWVudW0gQWNjZXNzVHlwZSB7
Ci0gICAgYWNjZXNzX2dldF9ieV9pZF9zZWxmLAotICAgIGFjY2Vzc19nZXRfYnlfaWRfbGlzdCwK
LSAgICBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsLAotICAgIGFjY2Vzc19wdXRf
YnlfaWRfdHJhbnNpdGlvbl9kaXJlY3QsCi0gICAgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlLAot
ICAgIGFjY2Vzc19wdXRfYnlfaWRfbGlzdCwKLSAgICBhY2Nlc3NfdW5zZXQsCi0gICAgYWNjZXNz
X2luX2xpc3QKK2VudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhfdCB7CisgICAgR2V0LAorICAg
IFB1dCwKKyAgICBJbgogfTsKIAotaW5saW5lIGJvb2wgaXNHZXRCeUlkQWNjZXNzKEFjY2Vzc1R5
cGUgYWNjZXNzVHlwZSkKLXsKLSAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKLSAgICBjYXNlIGFj
Y2Vzc19nZXRfYnlfaWRfc2VsZjoKLSAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfbGlzdDoKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLX0KLSAgICAKLWlubGluZSBib29sIGlzUHV0QnlJZEFjY2VzcyhBY2Nlc3NUeXBlIGFj
Y2Vzc1R5cGUpCi17Ci0gICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7Ci0gICAgY2FzZSBhY2Nlc3Nf
cHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90
cmFuc2l0aW9uX2RpcmVjdDoKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFjZToKLSAg
ICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfbGlzdDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotaW5saW5lIGJvb2wg
aXNJbkFjY2VzcyhBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUpCi17Ci0gICAgc3dpdGNoIChhY2Nlc3NU
eXBlKSB7Ci0gICAgY2FzZSBhY2Nlc3NfaW5fbGlzdDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KK2VudW0gY2xhc3Mg
Q2FjaGVUeXBlIDogaW50OF90IHsKKyAgICBVbnNldCwKKyAgICBHZXRCeUlkU2VsZiwKKyAgICBQ
dXRCeUlkUmVwbGFjZSwKKyAgICBTdHViCit9OwogCiBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8g
ewotICAgIFN0cnVjdHVyZVN0dWJJbmZvKCkKLSAgICAgICAgOiBhY2Nlc3NUeXBlKGFjY2Vzc191
bnNldCkKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyhBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUpCisgICAg
ICAgIDogYWNjZXNzVHlwZShhY2Nlc3NUeXBlKQorICAgICAgICAsIGNhY2hlVHlwZShDYWNoZVR5
cGU6OlVuc2V0KQogICAgICAgICAsIHNlZW4oZmFsc2UpCiAgICAgICAgICwgcmVzZXRCeUdDKGZh
bHNlKQogICAgICAgICAsIHRvb2tTbG93UGF0aChmYWxzZSkKQEAgLTEwMCw1MyArNjgsMzEgQEAg
c3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBpbml0
R2V0QnlJZFNlbGYoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIGJhc2VPYmplY3RT
dHJ1Y3R1cmUpCisgICAgdm9pZCBpbml0R2V0QnlJZFNlbGYoVk0mIHZtLCBKU0NlbGwqIG93bmVy
LCBTdHJ1Y3R1cmUqIGJhc2VPYmplY3RTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkK
ICAgICB7Ci0gICAgICAgIGFjY2Vzc1R5cGUgPSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGY7Ci0KLSAg
ICAgICAgdS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLnNldCh2bSwgb3duZXIsIGJh
c2VPYmplY3RTdHJ1Y3R1cmUpOwotICAgIH0KKyAgICAgICAgY2FjaGVUeXBlID0gQ2FjaGVUeXBl
OjpHZXRCeUlkU2VsZjsKIAotICAgIHZvaWQgaW5pdEdldEJ5SWRMaXN0KFBvbHltb3JwaGljR2V0
QnlJZExpc3QqIGxpc3QpCi0gICAgewotICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX2dldF9i
eV9pZF9saXN0OwotICAgICAgICB1LmdldEJ5SWRMaXN0Lmxpc3QgPSBsaXN0OworICAgICAgICB1
LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgYmFzZU9iamVjdFN0
cnVjdHVyZSk7CisgICAgICAgIHUuYnlJZFNlbGYub2Zmc2V0ID0gb2Zmc2V0OwogICAgIH0KIAot
ICAgIC8vIFB1dEJ5SWQqCi0KLSAgICB2b2lkIGluaXRQdXRCeUlkVHJhbnNpdGlvbihWTSYgdm0s
IEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogcHJldmlvdXNTdHJ1Y3R1cmUsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQsIGJvb2wg
aXNEaXJlY3QpCisgICAgdm9pZCBpbml0UHV0QnlJZFJlcGxhY2UoVk0mIHZtLCBKU0NlbGwqIG93
bmVyLCBTdHJ1Y3R1cmUqIGJhc2VPYmplY3RTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCkKICAgICB7Ci0gICAgICAgIGlmIChpc0RpcmVjdCkKLSAgICAgICAgICAgIGFjY2Vzc1R5cGUg
PSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0OwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDsK
KyAgICAgICAgY2FjaGVUeXBlID0gQ2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZTsKIAotICAgICAg
ICB1LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHBy
ZXZpb3VzU3RydWN0dXJlKTsKLSAgICAgICAgdS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUu
c2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKLSAgICAgICAgdS5wdXRCeUlkVHJhbnNpdGlvbi5y
YXdDb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQucmVsZWFzZVJhd1BvaW50ZXIoKTsKKyAgICAg
ICAgdS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLnNldCh2bSwgb3duZXIsIGJhc2VPYmpl
Y3RTdHJ1Y3R1cmUpOworICAgICAgICB1LmJ5SWRTZWxmLm9mZnNldCA9IG9mZnNldDsKICAgICB9
CiAKLSAgICB2b2lkIGluaXRQdXRCeUlkUmVwbGFjZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0
cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSkKKyAgICB2b2lkIGluaXRTdHViKHN0ZDo6dW5p
cXVlX3B0cjxQb2x5bW9ycGhpY0FjY2Vzcz4gc3R1YikKICAgICB7Ci0gICAgICAgIGFjY2Vzc1R5
cGUgPSBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2U7Ci0gICAgCi0gICAgICAgIHUucHV0QnlJZFJl
cGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBiYXNlT2JqZWN0U3RydWN0
dXJlKTsKKyAgICAgICAgY2FjaGVUeXBlID0gQ2FjaGVUeXBlOjpTdHViOworICAgICAgICB1LnN0
dWIgPSBzdHViLnJlbGVhc2UoKTsKICAgICB9Ci0gICAgICAgIAotICAgIHZvaWQgaW5pdFB1dEJ5
SWRMaXN0KFBvbHltb3JwaGljUHV0QnlJZExpc3QqIGxpc3QpCi0gICAgewotICAgICAgICBhY2Nl
c3NUeXBlID0gYWNjZXNzX3B1dF9ieV9pZF9saXN0OwotICAgICAgICB1LnB1dEJ5SWRMaXN0Lmxp
c3QgPSBsaXN0OwotICAgIH0KLSAgICAKLSAgICB2b2lkIGluaXRJbkxpc3QoUG9seW1vcnBoaWNB
Y2Nlc3NTdHJ1Y3R1cmVMaXN0KiBsaXN0LCBpbnQgbGlzdFNpemUpCi0gICAgewotICAgICAgICBh
Y2Nlc3NUeXBlID0gYWNjZXNzX2luX2xpc3Q7Ci0gICAgICAgIHUuaW5MaXN0LnN0cnVjdHVyZUxp
c3QgPSBsaXN0OwotICAgICAgICB1LmluTGlzdC5saXN0U2l6ZSA9IGxpc3RTaXplOwotICAgIH0K
LSAgICAgICAgCisKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgYWRkQWNjZXNzQ2FzZSgKKyAg
ICAgICAgVk0mLCBDb2RlQmxvY2sqLCBjb25zdCBJZGVudGlmaWVyJiwgc3RkOjp1bmlxdWVfcHRy
PEFjY2Vzc0Nhc2U+IGFjY2Vzc0Nhc2UpOworCiAgICAgdm9pZCByZXNldChDb2RlQmxvY2sqKTsK
IAogICAgIHZvaWQgZGVyZWYoKTsKQEAgLTE3Miw4ICsxMTgsOSBAQCBzdHJ1Y3QgU3RydWN0dXJl
U3R1YkluZm8gewogICAgICAgICAgICAgd2F0Y2hwb2ludHMsIGNvZGVCbG9jaywgdGhpcywgY29u
ZGl0aW9uKTsKICAgICB9CiAgICAgCi0gICAgaW50OF90IGFjY2Vzc1R5cGU7Ci0gICAgYm9vbCBz
ZWVuIDogMTsKKyAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGU7CisgICAgQ2FjaGVUeXBlIGNhY2hl
VHlwZTsKKyAgICBib29sIHNlZW47CiAgICAgYm9vbCByZXNldEJ5R0MgOiAxOwogICAgIGJvb2wg
dG9va1Nsb3dQYXRoIDogMTsKIApAQCAtMjAzLDM0ICsxNTAsMTMgQEAgc3RydWN0IFN0cnVjdHVy
ZVN0dWJJbmZvIHsKIAogICAgIHVuaW9uIHsKICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAg
IC8vIEl0IHdvdWxkIGJlIHVud2lzZSB0byBwdXQgYW55dGhpbmcgaGVyZSwgYXMgaXQgd2lsbCBz
dXJlbHkgYmUgb3ZlcndyaXR0ZW4uCi0gICAgICAgIH0gdW5zZXQ7Ci0gICAgICAgIHN0cnVjdCB7
Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4gYmFzZU9iamVjdFN0cnVj
dHVyZTsKLSAgICAgICAgfSBnZXRCeUlkU2VsZjsKLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAg
ICAgIFBvbHltb3JwaGljR2V0QnlJZExpc3QqIGxpc3Q7Ci0gICAgICAgIH0gZ2V0QnlJZExpc3Q7
Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVy
ZT4gcHJldmlvdXNTdHJ1Y3R1cmU7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVj
dHVyZT4gc3RydWN0dXJlOwotICAgICAgICAgICAgdm9pZCogcmF3Q29uZGl0aW9uU2V0OwotICAg
ICAgICB9IHB1dEJ5SWRUcmFuc2l0aW9uOwotICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAg
V3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IGJhc2VPYmplY3RTdHJ1Y3R1cmU7Ci0gICAgICAg
IH0gcHV0QnlJZFJlcGxhY2U7Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBQb2x5bW9y
cGhpY1B1dEJ5SWRMaXN0KiBsaXN0OwotICAgICAgICB9IHB1dEJ5SWRMaXN0OwotICAgICAgICBz
dHJ1Y3QgewotICAgICAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBzdHJ1
Y3R1cmVMaXN0OwotICAgICAgICAgICAgaW50IGxpc3RTaXplOwotICAgICAgICB9IGluTGlzdDsK
KyAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKKyAgICAgICAgfSBieUlkU2VsZjsK
KyAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3MqIHN0dWI7CiAgICAgfSB1OwogCi0gICAgUmVmUHRy
PEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKICAgICBDb2RlTG9jYXRpb25DYWxsIGNhbGxS
ZXR1cm5Mb2NhdGlvbjsKLSAgICBSZWZQdHI8V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZv
PiB3YXRjaHBvaW50czsKIH07CiAKIGlubGluZSBDb2RlT3JpZ2luIGdldFN0cnVjdHVyZVN0dWJJ
bmZvQ29kZU9yaWdpbihTdHJ1Y3R1cmVTdHViSW5mbyYgc3RydWN0dXJlU3R1YkluZm8pCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9u
IDE4OTMyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU2Myw3ICs1NjMsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBicmFuY2gzMihFcXVhbCwgcmVncy50YWdHUFIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVt
cHR5VmFsdWVUYWcpKTsKICNlbmRpZgogICAgIH0KLSAgICAKKwogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+CiAgICAgSnVtcCBicmFuY2hTdHJ1Y3R1cmUoUmVsYXRpb25hbENvbmRpdGlvbiBjb25k
aXRpb24sIFQgbGVmdEhhbmRTaWRlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7CkBAIC04
MzIsNiArODMyLDE1IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0KIAorICAgIHZvaWQgYm94Qm9v
bGVhblBheWxvYWQoYm9vbCB2YWx1ZSwgR1BSUmVnIHBheWxvYWRHUFIpCisgICAgeworI2lmIFVT
RShKU1ZBTFVFNjQpCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UgKyB2YWx1
ZSksIHBheWxvYWRHUFIpOworI2Vsc2UKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIodmFsdWUp
LCBwYXlsb2FkR1BSKTsKKyNlbmRpZgorICAgIH0KKwogICAgIHZvaWQgYm94Qm9vbGVhbihHUFJS
ZWcgYm9vbEdQUiwgSlNWYWx1ZVJlZ3MgYm94ZWRSZWdzKQogICAgIHsKICAgICAgICAgYm94Qm9v
bGVhblBheWxvYWQoYm9vbEdQUiwgYm94ZWRSZWdzLnBheWxvYWRHUFIoKSk7CkBAIC04MzksNiAr
ODQ4LDE3IEBAIHB1YmxpYzoKICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9v
bGVhblRhZyksIGJveGVkUmVncy50YWdHUFIoKSk7CiAjZW5kaWYKICAgICB9CisKKyAgICB2b2lk
IGJveEludDMyKEdQUlJlZyBpbnRHUFIsIEpTVmFsdWVSZWdzIGJveGVkUmVncykKKyAgICB7Cisj
aWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgaml0Lm1vdmUoaW50R1BSLCBib3hlZFJlZ3MuZ3By
KCkpOworICAgICAgICBqaXQub3I2NChUcnVzdGVkSW1tNjQoVGFnVHlwZU51bWJlciksIGJveGVk
UmVncy5ncHIoKSk7CisjZWxzZQorICAgICAgICBqaXQubW92ZShpbnRHUFIsIGJveGVkUmVncy5w
YXlsb2FkR1BSKCkpOworICAgICAgICBqaXQubW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50
MzJUYWcpLCBib3hlZFJlZ3MudGFnR1BSKCkpOworI2VuZGlmCisgICAgfQogICAgIAogICAgIHZv
aWQgY2FsbEV4Y2VwdGlvbkZ1enooKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTg5MzI0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUz
LDI0ICsxNTMsNiBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShiYXNlVmFsdWUuZ2V0KGV4ZWMsIGlkZW50LCBzbG90
KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJZEJ1
aWxkTGlzdChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgRW5j
b2RlZEpTVmFsdWUgYmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKLXsKLSAgICBWTSogdm0g
PSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKLQotICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCB1aWQp
OwotICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0
dWJJbmZvLT5hY2Nlc3NUeXBlKTsKLQotICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGJhc2UpOwotICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSk7Ci0gICAgYm9v
bCBoYXNSZXN1bHQgPSBiYXNlVmFsdWUuZ2V0UHJvcGVydHlTbG90KGV4ZWMsIGlkZW50LCBzbG90
KTsKLSAgICAKLSAgICBpZiAoYWNjZXNzVHlwZSA9PSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihz
dHViSW5mby0+YWNjZXNzVHlwZSkpCi0gICAgICAgIGJ1aWxkR2V0QnlJRExpc3QoZXhlYywgYmFz
ZVZhbHVlLCBpZGVudCwgc2xvdCwgKnN0dWJJbmZvKTsKLQotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoaGFzUmVzdWx0PyBzbG90LmdldFZhbHVlKGV4ZWMsIGlkZW50KSA6IGpzVW5kZWZpbmVk
KCkpOwotfQotCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWRP
cHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgRW5j
b2RlZEpTVmFsdWUgYmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKIHsKICAgICBWTSogdm0g
PSAmZXhlYy0+dm0oKTsKQEAgLTE4Nyw3ICsxNjksNiBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkdlCiAgICAgICAgIHN0dWJJbmZvLT5zZWVuID0gdHJ1ZTsKICAgICAK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGhhc1Jlc3VsdD8gc2xvdC5nZXRWYWx1ZShleGVj
LCBpZGVudCkgOiBqc1VuZGVmaW5lZCgpKTsKLQogfQogCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkluT3B0aW1pemUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8sIEpTQ2VsbCogYmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIGtleSkKQEAg
LTM4NCw5MCArMzY1LDYgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJl
YwogICAgICAgICBzdHViSW5mby0+c2VlbiA9IHRydWU7CiB9CiAKLXZvaWQgSklUX09QRVJBVElP
TiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0QnVpbGRMaXN0KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0
dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotewotICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOwotICAgIAotICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlk
KHZtLCB1aWQpOwotICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vz
c1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKTsKLQotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkQmFzZSk7Ci0gICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZVZh
bHVlLCB0cnVlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7Ci0gICAgCi0g
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlVmFsdWUuaXNDZWxsKCkgPyBiYXNlVmFsdWUu
YXNDZWxsKCktPnN0cnVjdHVyZSgqdm0pIDogbnVsbHB0cjsgCi0gICAgYmFzZVZhbHVlLnB1dChl
eGVjLCBpZGVudCwgdmFsdWUsIHNsb3QpOwotCi0gICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGlj
X2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBidWlsZFB1dEJ5SWRMaXN0KGV4ZWMsIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBpZGVu
dCwgc2xvdCwgKnN0dWJJbmZvLCBOb3REaXJlY3QpOwotfQotCi12b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKLXsKLSAgICBW
TSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVp
ZCh2bSwgdWlkKTsKLSAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nl
c3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSk7Ci0KLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpOwotICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VW
YWx1ZSwgZmFsc2UsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKLQotICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZVZhbHVlLmlzQ2VsbCgpID8gYmFzZVZhbHVlLmFz
Q2VsbCgpLT5zdHJ1Y3R1cmUoKnZtKSA6IG51bGxwdHI7Ci0gICAgYmFzZVZhbHVlLnB1dChleGVj
LCBpZGVudCwgdmFsdWUsIHNsb3QpOwotICAgIAotICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRp
Y19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIAotICAgIGJ1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUs
IGlkZW50LCBzbG90LCAqc3R1YkluZm8sIE5vdERpcmVjdCk7Ci19Ci0KLXZvaWQgSklUX09QRVJB
VElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0QnVpbGRMaXN0KEV4ZWNTdGF0ZSogZXhl
YywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQot
ewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOwotICAgIAotICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVy
Ojpmcm9tVWlkKHZtLCB1aWQpOwotICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19j
YXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKTsKLSAgICAKLSAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgSlNPYmplY3QqIGJh
c2VPYmplY3QgPSBhc09iamVjdChKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpKTsKLSAgICBQ
dXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlT2JqZWN0LCB0cnVlLCBleGVjLT5jb2RlQmxvY2soKS0+
cHV0QnlJZENvbnRleHQoKSk7Ci0KLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VPYmpl
Y3QtPnN0cnVjdHVyZSgqdm0pOyAgICAKLSAgICBiYXNlT2JqZWN0LT5wdXREaXJlY3QoKnZtLCBp
ZGVudCwgdmFsdWUsIHNsb3QpOwotICAgIAotICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19j
YXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIGJ1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZU9iamVjdCwgc3RydWN0dXJlLCBp
ZGVudCwgc2xvdCwgKnN0dWJJbmZvLCBEaXJlY3QpOwotfQotCi12b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUqIGV4ZWMs
IFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKLXsK
LSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6
ZnJvbVVpZCh2bSwgdWlkKTsKLSAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2Fz
dDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSk7Ci0KLSAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgSlNPYmplY3QqIGJhc2VPYmpl
Y3QgPSBhc09iamVjdChKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpKTsKLSAgICBQdXRQcm9w
ZXJ0eVNsb3Qgc2xvdChiYXNlT2JqZWN0LCBmYWxzZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5
SWRDb250ZXh0KCkpOwotCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlT2JqZWN0LT5z
dHJ1Y3R1cmUoKnZtKTsgICAgCi0gICAgYmFzZU9iamVjdC0+cHV0RGlyZWN0KCp2bSwgaWRlbnQs
IHZhbHVlLCBzbG90KTsKLQotICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vz
c1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAg
IGJ1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZU9iamVjdCwgc3RydWN0dXJlLCBpZGVudCwgc2xv
dCwgKnN0dWJJbmZvLCBEaXJlY3QpOwotfQotCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
UmVhbGxvY2F0ZVN0b3JhZ2VBbmRGaW5pc2hQdXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCog
YmFzZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgRW5jb2Rl
ZEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMTg5MzI0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI5LDM1
ICsxMjksNiBAQCBzdGF0aWMgdm9pZCByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoCiAjZW5kaWYKIH0K
IAotc3RhdGljIHZvaWQgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigKLSAgICBjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAotICAgIENDYWxsSGVscGVycyYgaml0LCBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgR1BSUmVnIHNjcmF0Y2hHUFIpCi17
Ci0gICAgaWYgKGNvbmRpdGlvbi5pc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRj
aHBvaW50KCkpIHsKLSAgICAgICAgY29uZGl0aW9uLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKS0+YWRk
VHJhbnNpdGlvbldhdGNocG9pbnQoCi0gICAgICAgICAgICBzdHViSW5mby5hZGRXYXRjaHBvaW50
KGNvZGVCbG9jaywgY29uZGl0aW9uKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNvbmRpdGlvbi5vYmplY3QoKS0+c3RydWN0dXJlKCk7Ci0g
ICAgUkVMRUFTRV9BU1NFUlQoY29uZGl0aW9uLnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eUFzc3Vt
aW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KHN0cnVjdHVyZSkpOwotICAgIGppdC5tb3ZlKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGNvbmRpdGlvbi5vYmplY3QoKSksIHNjcmF0Y2hH
UFIpOwotICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoCi0gICAgICAgIGppdC5icmFuY2hTdHJ1Y3R1
cmUoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCi0gICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLCBzdHJ1Y3R1cmUpKTsKLX0KLQotc3RhdGljIHZvaWQgY2hlY2tPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbnMoCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIHNldCwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywKLSAgICBD
Q2FsbEhlbHBlcnMmIGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMs
IEdQUlJlZyBzY3JhdGNoR1BSKQotewotICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24mIGNvbmRpdGlvbiA6IHNldCkgewotICAgICAgICBjaGVja09iamVjdFByb3BlcnR5Q29u
ZGl0aW9uKAotICAgICAgICAgICAgY29uZGl0aW9uLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBqaXQs
IGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7Ci0gICAgfQotfQotCiBzdGF0aWMgdm9pZCByZXBs
YWNlV2l0aEp1bXAoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25zdCBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgdGFyZ2V0KQogewogICAgIGlmIChNYWNyb0Fzc2VtYmxlcjo6Y2FuSnVtcFJl
cGxhY2VQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaCgpKSB7CkBAIC0xNjgsNiArMTM5LDggQEAg
c3RhdGljIHZvaWQgcmVwbGFjZVdpdGhKdW1wKFN0cnVjdHVyZVN0dQogICAgICAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWwodGFyZ2V0KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICBy
ZXNldEdldEJ5SURDaGVja0FuZExvYWQoc3R1YkluZm8pOwogICAgIAogICAgIE1hY3JvQXNzZW1i
bGVyOjpyZXBhdGNoSnVtcCgKICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1
bXBBdE9mZnNldCgKQEAgLTE3NSw1MiArMTQ4LDYgQEAgc3RhdGljIHZvaWQgcmVwbGFjZVdpdGhK
dW1wKFN0cnVjdHVyZVN0dQogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCh0YXJnZXQpKTsKIH0K
IAotc3RhdGljIHZvaWQgZW1pdFJlc3RvcmVTY3JhdGNoKE1hY3JvQXNzZW1ibGVyJiBzdHViSml0
LCBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBHUFJSZWcgc2NyYXRjaEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAmIHN1Y2Nlc3MsIE1hY3JvQXNzZW1ibGVyOjpKdW1wJiBmYWlsLCBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzKQotewotICAgIGlmIChuZWVkVG9SZXN0b3Jl
U2NyYXRjaCkgewotICAgICAgICBzdHViSml0LnBvcFRvUmVzdG9yZShzY3JhdGNoR1BSKTsKLSAg
ICAgICAgCi0gICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKLSAgICAgICAgCi0gICAg
ICAgIC8vIGxpbmsgZmFpbHVyZSBjYXNlcyBoZXJlLCBzbyB3ZSBjYW4gcG9wIHNjcmF0Y2hHUFIs
IGFuZCB0aGVuIGp1bXAgYmFjay4KLSAgICAgICAgZmFpbHVyZUNhc2VzLmxpbmsoJnN0dWJKaXQp
OwotICAgICAgICAKLSAgICAgICAgc3R1YkppdC5wb3BUb1Jlc3RvcmUoc2NyYXRjaEdQUik7Ci0g
ICAgICAgIAotICAgICAgICBmYWlsID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgCi0gICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOwotfQotCi1zdGF0aWMg
dm9pZCBsaW5rUmVzdG9yZVNjcmF0Y2goTGlua0J1ZmZlciYgcGF0Y2hCdWZmZXIsIGJvb2wgbmVl
ZFRvUmVzdG9yZVNjcmF0Y2gsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3MsIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGZhaWwsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXMs
IENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nh
c2VCZWdpbikKLXsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN1Y2Nlc3NMYWJlbCk7
Ci0gICAgICAgIAotICAgIGlmIChuZWVkVG9SZXN0b3JlU2NyYXRjaCkgewotICAgICAgICBwYXRj
aEJ1ZmZlci5saW5rKGZhaWwsIHNsb3dDYXNlQmVnaW4pOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIAotICAgIC8vIGxpbmsgZmFpbHVyZSBjYXNlcyBkaXJlY3RseSBiYWNrIHRvIG5vcm1h
bCBwYXRoCi0gICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMsIHNsb3dDYXNlQmVnaW4p
OwotfQotCi1zdGF0aWMgdm9pZCBsaW5rUmVzdG9yZVNjcmF0Y2goTGlua0J1ZmZlciYgcGF0Y2hC
dWZmZXIsIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbywgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzcywgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
ZmFpbCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlcykKLXsKLSAgICBsaW5r
UmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdWNjZXNz
LCBmYWlsLCBmYWlsdXJlQ2FzZXMsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0
T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSksIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nh
c2UpKTsKLX0KLQotZW51bSBCeUlkU3R1YktpbmQgewotICAgIEdldFZhbHVlLAotICAgIEdldFVu
ZGVmaW5lZCwKLSAgICBDYWxsR2V0dGVyLAotICAgIENhbGxDdXN0b21HZXR0ZXIsCi0gICAgQ2Fs
bFNldHRlciwKLSAgICBDYWxsQ3VzdG9tU2V0dGVyCi19OwotCiBzdGF0aWMgY29uc3QgY2hhciog
dG9TdHJpbmcoQnlJZFN0dWJLaW5kIGtpbmQpCiB7CiAgICAgc3dpdGNoIChraW5kKSB7CkBAIC0y
NzcsMzEyICsyMDQsNiBAQCBzdGF0aWMgRnVuY3Rpb25QdHIgY3VzdG9tRm9yKGNvbnN0IFB1dFBy
CiAgICAgcmV0dXJuIEZ1bmN0aW9uUHRyKHNsb3QuY3VzdG9tU2V0dGVyKCkpOwogfQogCi1zdGF0
aWMgYm9vbCBnZW5lcmF0ZUJ5SWRTdHViKAotICAgIEV4ZWNTdGF0ZSogZXhlYywgQnlJZFN0dWJL
aW5kIGtpbmQsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwKLSAgICBGdW5jdGlvblB0
ciBjdXN0b20sIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwKLSAgICBKU09iamVjdCogYWx0ZXJuYXRlQmFz
ZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgYm9vbCBsb2Fk
VGFyZ2V0RnJvbVByb3h5LAotICAgIFdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQsIENvZGVM
b2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VMYWJl
bCwKLSAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+JiBzdHViUm91dGluZSkKLXsKLSAgICBBU1NF
UlQoY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJv
cGVydHlXYXRjaHBvaW50KCkpOwotICAgIAotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAg
IEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNl
R1BSKTsKLSAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSBKU1ZhbHVlUmVncygKLSNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQotICAgICAgICBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNo
LnZhbHVlVGFnR1BSKSwKLSNlbmRpZgotICAgICAgICBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJ
bmZvLnBhdGNoLnZhbHVlR1BSKSk7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBUZW1wUmVnaXN0
ZXJTZXQoc3R1YkluZm8ucGF0Y2gudXNlZFJlZ2lzdGVycykuZ2V0RnJlZUdQUigpOwotICAgIGJv
b2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSBzY3JhdGNoR1BSID09IEludmFsaWRHUFJSZWc7Ci0g
ICAgUkVMRUFTRV9BU1NFUlQoIW5lZWRUb1Jlc3RvcmVTY3JhdGNoIHx8IChraW5kID09IEdldFZh
bHVlIHx8IGtpbmQgPT0gR2V0VW5kZWZpbmVkKSk7Ci0gICAgCi0gICAgQ0NhbGxIZWxwZXJzIHN0
dWJKaXQoJmV4ZWMtPnZtKCksIGV4ZWMtPmNvZGVCbG9jaygpKTsKLSAgICBpZiAobmVlZFRvUmVz
dG9yZVNjcmF0Y2gpIHsKLSAgICAgICAgc2NyYXRjaEdQUiA9IEFzc2VtYmx5SGVscGVyczo6c2Vs
ZWN0U2NyYXRjaEdQUigKLSAgICAgICAgICAgIGJhc2VHUFIsIHZhbHVlUmVncy50YWdHUFIoKSwg
dmFsdWVSZWdzLnBheWxvYWRHUFIoKSk7Ci0gICAgICAgIHN0dWJKaXQucHVzaFRvU2F2ZShzY3Jh
dGNoR1BSKTsKLSAgICAgICAgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSB0cnVlOwotICAgIH0KLSAg
ICAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzOwotCi0gICAgR1BS
UmVnIGJhc2VGb3JHZXRHUFI7Ci0gICAgaWYgKGxvYWRUYXJnZXRGcm9tUHJveHkpIHsKLSAgICAg
ICAgYmFzZUZvckdldEdQUiA9IHZhbHVlUmVncy5wYXlsb2FkR1BSKCk7Ci0gICAgICAgIGZhaWx1
cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2g4KAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLCAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VH
UFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCAKLSAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoUHVyZUZvcndhcmRpbmdQcm94eVR5cGUpKSk7Ci0KLSAgICAg
ICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTUHJv
eHk6OnRhcmdldE9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIAotICAgICAgICBmYWls
dXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoU3RydWN0dXJlKAotICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHNjcmF0Y2hHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCi0gICAgICAgICAg
ICBzdHJ1Y3R1cmUpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBiYXNlRm9yR2V0R1BSID0gYmFz
ZUdQUjsKLQotICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoU3RydWN0
dXJlKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCAKLSAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VGb3JHZXRHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSksIAotICAgICAgICAgICAgc3RydWN0dXJlKSk7Ci0gICAgfQotCi0gICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICBpZiAoc3RydWN0dXJl
LT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkgfHwgY29uZGl0aW9uU2V0Lm5lZWRJbXB1
cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkKLSAgICAgICAgdm0tPnJlZ2lzdGVyV2F0Y2hwb2ludEZv
ckltcHVyZVByb3BlcnR5KHByb3BlcnR5TmFtZSwgc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2Rl
QmxvY2spKTsKLQotICAgIGlmICh3YXRjaHBvaW50U2V0KQotICAgICAgICB3YXRjaHBvaW50U2V0
LT5hZGQoc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKLQotICAgIGNoZWNrT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25zKAotICAgICAgICBjb25kaXRpb25TZXQsIGNvZGVCbG9jaywg
c3R1YkluZm8sIHN0dWJKaXQsIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7Ci0KLSAgICBpZiAo
aXNWYWxpZE9mZnNldChvZmZzZXQpKSB7Ci0gICAgICAgIFN0cnVjdHVyZSogY3VyclN0cnVjdHVy
ZTsKLSAgICAgICAgaWYgKGNvbmRpdGlvblNldC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjdXJy
U3RydWN0dXJlID0gc3RydWN0dXJlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjdXJyU3Ry
dWN0dXJlID0gY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2JqZWN0KCktPnN0cnVj
dHVyZSgpOwotICAgICAgICBjdXJyU3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JS
ZXBsYWNlbWVudHMoKnZtLCBvZmZzZXQpOwotICAgIH0KLSAgICAKLSAgICBHUFJSZWcgYmFzZUZv
ckFjY2Vzc0dQUiA9IEludmFsaWRHUFJSZWc7Ci0gICAgaWYgKGtpbmQgIT0gR2V0VW5kZWZpbmVk
KSB7Ci0gICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
Ly8gV2UgY291bGQgaGF2ZSBjbG9iYmVyZWQgc2NyYXRjaEdQUiBlYXJsaWVyLCBzbyB3ZSBoYXZl
IHRvIHJlbG9hZCBmcm9tIGJhc2VHUFIgdG8gZ2V0IHRoZSB0YXJnZXQuCi0gICAgICAgICAgICBp
ZiAobG9hZFRhcmdldEZyb21Qcm94eSkKLSAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNQcm94eTo6dGFyZ2V0T2Zmc2V0KCkp
LCBiYXNlRm9yR2V0R1BSKTsKLSAgICAgICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihhbHRlcm5hdGVCYXNlKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAg
ICBiYXNlRm9yQWNjZXNzR1BSID0gc2NyYXRjaEdQUjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIC8vIEZvciBwcm94eSBvYmplY3RzLCB3ZSBuZWVkIHRvIGRvIGFsbCB0aGUgU3RydWN0
dXJlIGNoZWNrcyBiZWZvcmUgbW92aW5nIHRoZSBiYXNlR1BSIGludG8KLSAgICAgICAgICAgIC8v
IGJhc2VGb3JHZXRHUFIgYmVjYXVzZSBpZiB3ZSBmYWlsIGFueSBvZiB0aGUgY2hlY2tzIHRoZW4g
d2Ugd291bGQgaGF2ZSB0aGUgd3JvbmcgdmFsdWUgaW4gYmFzZUdQUgotICAgICAgICAgICAgLy8g
b24gdGhlIHNsb3cgcGF0aC4KLSAgICAgICAgICAgIGlmIChsb2FkVGFyZ2V0RnJvbVByb3h5KQot
ICAgICAgICAgICAgICAgIHN0dWJKaXQubW92ZShzY3JhdGNoR1BSLCBiYXNlRm9yR2V0R1BSKTsK
LSAgICAgICAgICAgIGJhc2VGb3JBY2Nlc3NHUFIgPSBiYXNlRm9yR2V0R1BSOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgR1BSUmVnIGxvYWRlZFZhbHVlR1BSID0gSW52YWxpZEdQUlJlZzsKLSAg
ICBpZiAoa2luZCA9PSBHZXRVbmRlZmluZWQpCi0gICAgICAgIHN0dWJKaXQubW92ZVRydXN0ZWRW
YWx1ZShqc1VuZGVmaW5lZCgpLCB2YWx1ZVJlZ3MpOwotICAgIGVsc2UgaWYgKGtpbmQgIT0gQ2Fs
bEN1c3RvbUdldHRlciAmJiBraW5kICE9IENhbGxDdXN0b21TZXR0ZXIpIHsKLSAgICAgICAgaWYg
KGtpbmQgPT0gR2V0VmFsdWUpCi0gICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUiA9IHZhbHVlUmVn
cy5wYXlsb2FkR1BSKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BS
ID0gc2NyYXRjaEdQUjsKLSAgICAgICAgCi0gICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSOwotICAg
ICAgICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgICAgIHN0b3JhZ2VHUFIg
PSBiYXNlRm9yQWNjZXNzR1BSOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHN0dWJKaXQu
bG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlRm9yQWNjZXNzR1BSLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBsb2FkZWRWYWx1ZUdQUik7Ci0gICAgICAgICAgICBzdG9y
YWdlR1BSID0gbG9hZGVkVmFsdWVHUFI7Ci0gICAgICAgIH0KLSAgICAgICAgCi0jaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICAgICAgc3R1YkppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uob2Zmc2V0KSksIGxvYWRlZFZhbHVlR1BS
KTsKLSNlbHNlCi0gICAgICAgIGlmIChraW5kID09IEdldFZhbHVlKQotICAgICAgICAgICAgc3R1
YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgb2Zmc2V0UmVs
YXRpdmVUb0Jhc2Uob2Zmc2V0KSArIFRhZ09mZnNldCksIHZhbHVlUmVncy50YWdHUFIoKSk7Ci0g
ICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIs
IG9mZnNldFJlbGF0aXZlVG9CYXNlKG9mZnNldCkgKyBQYXlsb2FkT2Zmc2V0KSwgbG9hZGVkVmFs
dWVHUFIpOwotI2VuZGlmCi0gICAgfQotCi0gICAgLy8gU3R1ZmYgZm9yIGN1c3RvbSBnZXR0ZXJz
LgotICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG9wZXJhdGlvbkNhbGw7Ci0gICAgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgaGFuZGxlckNhbGw7Ci0KLSAgICAvLyBTdHVmZiBmb3IgSlMgZ2V0dGVycy4K
LSAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIGFkZHJlc3NPZkxpbmtGdW5jdGlvbkNo
ZWNrOwotICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGZhc3RQYXRoQ2FsbDsKLSAgICBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBzbG93UGF0aENhbGw7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5r
SW5mbz4gY2FsbExpbmtJbmZvOwotCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2Vzcywg
ZmFpbDsKLSAgICBpZiAoa2luZCAhPSBHZXRWYWx1ZSAmJiBraW5kICE9IEdldFVuZGVmaW5lZCkg
ewotICAgICAgICAvLyBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdoZW5ldmVyIHRoaXMgY2FsbCBp
cyBtYWRlIGluIHRoZSBmdXR1cmUsIHdlIHJlbWVtYmVyIHRoZQotICAgICAgICAvLyBwbGFjZSB0
aGF0IHdlIG1hZGUgaXQgZnJvbS4gSXQganVzdCBzbyBoYXBwZW5zIHRvIGJlIHRoZSBwbGFjZSB0
aGF0IHdlIGFyZSBhdAotICAgICAgICAvLyByaWdodCBub3chCi0gICAgICAgIHN0dWJKaXQuc3Rv
cmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHN0dWJJbmZvLmNhbGxTaXRlSW5kZXgu
Yml0cygpKSwKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZp
cnR1YWxSZWdpc3Rlcj4oSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKLQotICAgICAgICBpZiAo
a2luZCA9PSBDYWxsR2V0dGVyIHx8IGtpbmQgPT0gQ2FsbFNldHRlcikgewotICAgICAgICAgICAg
Ly8gQ3JlYXRlIGEgSlMgY2FsbCB1c2luZyBhIEpTIGNhbGwgaW5saW5lIGNhY2hlLiBBc3N1bWUg
dGhhdDoKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyAtIFNQIGlzIGFsaWduZWQgYW5k
IHJlcHJlc2VudHMgdGhlIGV4dGVudCBvZiB0aGUgY2FsbGluZyBjb21waWxlcidzIHN0YWNrIHVz
YWdlLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIC0gRlAgaXMgc2V0IGNvcnJlY3Rs
eSAoaS5lLiBpdCBwb2ludHMgdG8gdGhlIGNhbGxlcidzIGNhbGwgZnJhbWUgaGVhZGVyKS4KLSAg
ICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyAtIFNQIC0gRlAgaXMgYW4gYWxpZ25lZCBkaWZm
ZXJlbmNlLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIC0gQW55IGJ5dGUgYmV0d2Vl
biBGUCAoZXhjbHVzaXZlKSBhbmQgU1AgKGluY2x1c2l2ZSkgY291bGQgYmUgbGl2ZSBpbiB0aGUg
Y2FsbGluZwotICAgICAgICAgICAgLy8gICBjb2RlLgotICAgICAgICAgICAgLy8KLSAgICAgICAg
ICAgIC8vIFRoZXJlZm9yZSwgd2UgdGVtcG9yYXJpbHkgZ3JvdyB0aGUgc3RhY2sgZm9yIHRoZSBw
dXJwb3NlIG9mIHRoZSBjYWxsIGFuZCB0aGVuCi0gICAgICAgICAgICAvLyBzaHJpbmsgaXQgYWZ0
ZXIuCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIGNhbGxMaW5rSW5mbyA9IHN0ZDo6bWFrZV91
bmlxdWU8Q2FsbExpbmtJbmZvPigpOwotICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENh
bGwoQ2FsbExpbmtJbmZvOjpDYWxsLCBzdHViSW5mby5jb2RlT3JpZ2luLCBsb2FkZWRWYWx1ZUdQ
Uik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBk
b25lOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBUaGVyZSBpcyBhICd0aGlzJyBhcmd1
bWVudCBidXQgbm90aGluZyBlbHNlLgotICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZQYXJh
bWV0ZXJzID0gMTsKLSAgICAgICAgICAgIC8vIC4uLiB1bmxlc3Mgd2UncmUgY2FsbGluZyBhIHNl
dHRlci4KLSAgICAgICAgICAgIGlmIChraW5kID09IENhbGxTZXR0ZXIpCi0gICAgICAgICAgICAg
ICAgbnVtYmVyT2ZQYXJhbWV0ZXJzKys7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEdl
dCB0aGUgYWNjZXNzb3I7IGlmIHRoZXJlIGFpbid0IG9uZSB0aGVuIHRoZSByZXN1bHQgaXMganNV
bmRlZmluZWQoKS4KLSAgICAgICAgICAgIGlmIChraW5kID09IENhbGxTZXR0ZXIpIHsKLSAgICAg
ICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGxvYWRlZFZhbHVlR1BSLCBHZXR0ZXJTZXR0ZXI6Om9mZnNldE9mU2V0
dGVyKCkpLAotICAgICAgICAgICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUik7Ci0gICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cigKLSAgICAgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobG9hZGVkVmFsdWVHUFIsIEdldHRlclNl
dHRlcjo6b2Zmc2V0T2ZHZXR0ZXIoKSksCi0gICAgICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVl
R1BSKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHJl
dHVyblVuZGVmaW5lZCA9IHN0dWJKaXQuYnJhbmNoVGVzdFB0cigKLSAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6WmVybywgbG9hZGVkVmFsdWVHUFIpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlJlZ3NGb3JDYWxsID0KLSAgICAgICAgICAgICAgICBK
U1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgbnVtYmVyT2ZQYXJhbWV0ZXJzOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCA9Ci0gICAg
ICAgICAgICAgICAgbnVtYmVyT2ZSZWdzRm9yQ2FsbCAqIHNpemVvZihSZWdpc3RlcikgLSBzaXpl
b2YoQ2FsbGVyRnJhbWVBbmRQQyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHVuc2lnbmVk
IGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2FsbCA9Ci0gICAgICAgICAgICAgICAgV1RGOjpyb3Vu
ZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgbnVtYmVyT2ZCeXRlc0ZvckNh
bGwpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzdHViSml0LnN1YlB0cigKLSAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGFsaWduZWROdW1iZXJPZkJ5dGVz
Rm9yQ2FsbCksCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MgY2FsbGVlRnJhbWUgPSBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcygKLSAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsCi0gICAgICAgICAgICAgICAg
LXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIHN0dWJKaXQuc3RvcmUzMigKLSAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG51bWJlck9mUGFyYW1ldGVycyksCi0gICAgICAg
ICAgICAgICAgY2FsbGVlRnJhbWUud2l0aE9mZnNldCgKLSAgICAgICAgICAgICAgICAgICAgSlNT
dGFjazo6QXJndW1lbnRDb3VudCAqIHNpemVvZihSZWdpc3RlcikgKyBQYXlsb2FkT2Zmc2V0KSk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN0dWJKaXQuc3RvcmVDZWxsKAotICAgICAgICAg
ICAgICAgIGxvYWRlZFZhbHVlR1BSLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KEpTU3RhY2s6OkNh
bGxlZSAqIHNpemVvZihSZWdpc3RlcikpKTsKLQotICAgICAgICAgICAgc3R1YkppdC5zdG9yZUNl
bGwoCi0gICAgICAgICAgICAgICAgYmFzZUZvckdldEdQUiwKLSAgICAgICAgICAgICAgICBjYWxs
ZWVGcmFtZS53aXRoT2Zmc2V0KAotICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudCgwKS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ2FsbFNldHRlcikgewotICAgICAgICAgICAgICAg
IHN0dWJKaXQuc3RvcmVWYWx1ZSgKLSAgICAgICAgICAgICAgICAgICAgdmFsdWVSZWdzLAotICAg
ICAgICAgICAgICAgICAgICBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KAotICAgICAgICAgICAgICAg
ICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSkub2Zmc2V0KCkgKiBzaXplb2Yo
UmVnaXN0ZXIpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dDYXNlID0gc3R1YkppdC5icmFuY2hQdHJXaXRoUGF0Y2go
Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBsb2FkZWRWYWx1ZUdQ
UiwgYWRkcmVzc09mTGlua0Z1bmN0aW9uQ2hlY2ssCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIoMCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBmYXN0
UGF0aENhbGwgPSBzdHViSml0Lm5lYXJDYWxsKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IHN0dWJKaXQuYWRkUHRyKAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxsKSwKLSAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgICAgICAgICAgaWYgKGtpbmQg
PT0gQ2FsbEdldHRlcikKLSAgICAgICAgICAgICAgICBzdHViSml0LnNldHVwUmVzdWx0cyh2YWx1
ZVJlZ3MpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBkb25lLmFwcGVuZChzdHViSml0Lmp1
bXAoKSk7Ci0gICAgICAgICAgICBzbG93Q2FzZS5saW5rKCZzdHViSml0KTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgc3R1YkppdC5tb3ZlKGxvYWRlZFZhbHVlR1BSLCBHUFJJbmZvOjpyZWdU
MCk7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgICAgIHN0dWJKaXQubW92ZShNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBHUFJJbmZvOjpyZWdU
MSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihjYWxsTGlua0luZm8uZ2V0KCkpLCBHUFJJbmZvOjpyZWdUMik7Ci0gICAgICAg
ICAgICBzbG93UGF0aENhbGwgPSBzdHViSml0Lm5lYXJDYWxsKCk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIHN0dWJKaXQuYWRkUHRyKAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxsKSwKLSAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgICAgICAgICAg
aWYgKGtpbmQgPT0gQ2FsbEdldHRlcikKLSAgICAgICAgICAgICAgICBzdHViSml0LnNldHVwUmVz
dWx0cyh2YWx1ZVJlZ3MpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBkb25lLmFwcGVuZChz
dHViSml0Lmp1bXAoKSk7Ci0gICAgICAgICAgICByZXR1cm5VbmRlZmluZWQubGluaygmc3R1Ykpp
dCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChraW5kID09IENhbGxHZXR0ZXIpCi0g
ICAgICAgICAgICAgICAgc3R1YkppdC5tb3ZlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIHZh
bHVlUmVncyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGRvbmUubGluaygmc3R1YkppdCk7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBnZXR0ZXI6IEVuY29kZWRKU1ZhbHVl
ICgqR2V0VmFsdWVGdW5jKShFeGVjU3RhdGUqLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgIC8vIHNldHRlcjog
dm9pZCAoKlB1dFZhbHVlRnVuYykoRXhlY1N0YXRlKiwgSlNPYmplY3QqIGJhc2UsIEVuY29kZWRK
U1ZhbHVlIHRoaXNPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKTsKLSNpZiBVU0UoSlNWQUxV
RTY0KQotICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ2FsbEN1c3RvbUdldHRlcikKLSAgICAgICAg
ICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlRm9yQWNjZXNz
R1BSLCBiYXNlRm9yR2V0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihwcm9wZXJ0
eU5hbWUuaW1wbCgpKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc3R1Ykpp
dC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUZvckFjY2Vzc0dQUiwgYmFzZUZvckdl
dEdQUiwgdmFsdWVSZWdzLmdwcigpKTsKLSNlbHNlCi0gICAgICAgICAgICBpZiAoa2luZCA9PSBD
YWxsQ3VzdG9tR2V0dGVyKQotICAgICAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKGJhc2VGb3JBY2Nlc3NHUFIsIGJhc2VGb3JHZXRHUFIsIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKHByb3BlcnR5TmFtZS5pbXBsKCkpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlRm9yQWNj
ZXNzR1BSLCBiYXNlRm9yR2V0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkNlbGxUYWcpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB2YWx1ZVJlZ3MudGFnR1BSKCkp
OwotI2VuZGlmCi0gICAgICAgICAgICBzdHViSml0LnN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCAmdm0tPnRvcENhbGxGcmFtZSk7Ci0KLSAgICAgICAgICAgIG9wZXJhdGlvbkNh
bGwgPSBzdHViSml0LmNhbGwoKTsKLSAgICAgICAgICAgIGlmIChraW5kID09IENhbGxDdXN0b21H
ZXR0ZXIpCi0gICAgICAgICAgICAgICAgc3R1YkppdC5zZXR1cFJlc3VsdHModmFsdWVSZWdzKTsK
LSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vRXhjZXB0aW9uID0gc3R1YkppdC5l
bWl0RXhjZXB0aW9uQ2hlY2soQ0NhbGxIZWxwZXJzOjpJbnZlcnRlZEV4Y2VwdGlvbkNoZWNrKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50cyhDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIodm0pLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0g
ICAgICAgICAgICBoYW5kbGVyQ2FsbCA9IHN0dWJKaXQuY2FsbCgpOwotICAgICAgICAgICAgc3R1
YkppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IG5vRXhjZXB0aW9uLmxpbmsoJnN0dWJKaXQpOwotICAgICAgICB9Ci0gICAgfQotICAgIGVtaXRS
ZXN0b3JlU2NyYXRjaChzdHViSml0LCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc2NyYXRjaEdQUiwg
c3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzKTsKLSAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNo
QnVmZmVyKCp2bSwgc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCksIEpJVENvbXBpbGF0aW9uQ2Fu
RmFpbCk7Ci0gICAgaWYgKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZmZXIs
IG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMsIHN1Y2Nl
c3NMYWJlbCwgc2xvd0Nhc2VMYWJlbCk7Ci0gICAgaWYgKGtpbmQgPT0gQ2FsbEN1c3RvbUdldHRl
ciB8fCBraW5kID09IENhbGxDdXN0b21TZXR0ZXIpIHsKLSAgICAgICAgcGF0Y2hCdWZmZXIubGlu
ayhvcGVyYXRpb25DYWxsLCBjdXN0b20pOwotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGhhbmRs
ZXJDYWxsLCBsb29rdXBFeGNlcHRpb25IYW5kbGVyKTsKLSAgICB9IGVsc2UgaWYgKGtpbmQgPT0g
Q2FsbEdldHRlciB8fCBraW5kID09IENhbGxTZXR0ZXIpIHsKLSAgICAgICAgY2FsbExpbmtJbmZv
LT5zZXRDYWxsTG9jYXRpb25zKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChzbG93UGF0
aENhbGwpLAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZihhZGRyZXNzT2ZMaW5r
RnVuY3Rpb25DaGVjayksCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNh
bGwoZmFzdFBhdGhDYWxsKSk7Ci0KLSAgICAgICAgcGF0Y2hCdWZmZXIubGluaygKLSAgICAgICAg
ICAgIHNsb3dQYXRoQ2FsbCwgQ29kZUxvY2F0aW9uTGFiZWwodm0tPmdldENUSVN0dWIobGlua0Nh
bGxUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7Ci0gICAgfQotICAgIAotICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBjb2RlID0gRklOQUxJWkVfQ09ERV9GT1IoCi0gICAgICAgIGV4ZWMtPmNvZGVC
bG9jaygpLCBwYXRjaEJ1ZmZlciwKLSAgICAgICAgKCIlcyBhY2Nlc3Mgc3R1YiBmb3IgJXMsIHJl
dHVybiBwb2ludCAlcCIsCi0gICAgICAgICAgICB0b1N0cmluZyhraW5kKSwgdG9DU3RyaW5nKCpl
eGVjLT5jb2RlQmxvY2soKSkuZGF0YSgpLAotICAgICAgICAgICAgc3VjY2Vzc0xhYmVsLmV4ZWN1
dGFibGVBZGRyZXNzKCkpKTsKLSAgICAKLSAgICBpZiAoa2luZCA9PSBDYWxsR2V0dGVyIHx8IGtp
bmQgPT0gQ2FsbFNldHRlcikKLSAgICAgICAgc3R1YlJvdXRpbmUgPSBhZG9wdFJlZihuZXcgQWNj
ZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUoY29kZSwgKnZtLCBXVEY6Om1vdmUoY2FsbExpbmtJbmZv
KSkpOwotICAgIGVsc2UKLSAgICAgICAgc3R1YlJvdXRpbmUgPSBjcmVhdGVKSVRTdHViUm91dGlu
ZShjb2RlLCAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHRydWUpOwotICAgIAot
ICAgIHJldHVybiB0cnVlOwotfQotCiBlbnVtIElubGluZUNhY2hlQWN0aW9uIHsKICAgICBHaXZl
VXBPbkNhY2hlLAogICAgIFJldHJ5Q2FjaGVMYXRlciwKQEAgLTYxNiwxMzIgKzIzNyw5NiBAQCBz
dGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeUlECiAgICAgaWYgKE9wdGlvbnM6
OmZvcmNlSUNGYWlsdXJlKCkpCiAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogICAgIAot
ICAgIC8vIEZJWE1FOiBXcml0ZSBhIHRlc3QgdGhhdCBwcm92ZXMgd2UgbmVlZCB0byBjaGVjayBm
b3IgcmVjdXJzaW9uIGhlcmUganVzdAotICAgIC8vIGxpa2UgdGhlIGludGVycHJldGVyIGRvZXMs
IHRoZW4gYWRkIGEgY2hlY2sgZm9yIHJlY3Vyc2lvbi4KKyAgICAvLyBGSVhNRTogQ2FjaGUgcHJv
cGVydHkgYWNjZXNzIGZvciBpbW1lZGlhdGVzLgorICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgp
KQorICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKIAogICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0KLSAg
ICBpZiAoKGlzSlNBcnJheShiYXNlVmFsdWUpIHx8IGlzSlNTdHJpbmcoYmFzZVZhbHVlKSkgJiYg
cHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKLSAgICAgICAg
R1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmJhc2VH
UFIpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIEdQUlJlZyByZXN1bHRUYWdHUFIg
PSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVlVGFnR1BSKTsKLSNlbmRp
ZgotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5m
by5wYXRjaC52YWx1ZUdQUik7Ci0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXIgc3R1YkppdDsKKyAg
ICBTY3JpcHRFeGVjdXRhYmxlKiBvd25lciA9IGNvZGVCbG9jay0+b3duZXJTY3JpcHRFeGVjdXRh
YmxlKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKIAotICAgICAgICBpZiAoaXNKU0FycmF5
KGJhc2VWYWx1ZSkpIHsKLSAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gVGVtcFJlZ2lz
dGVyU2V0KHN0dWJJbmZvLnBhdGNoLnVzZWRSZWdpc3RlcnMpLmdldEZyZWVHUFIoKTsKLSAgICAg
ICAgICAgIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSBmYWxzZTsKLQotICAgICAgICAgICAg
aWYgKHNjcmF0Y2hHUFIgPT0gSW52YWxpZEdQUlJlZykgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgICAgICAgICAgICAgc2NyYXRjaEdQUiA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRj
aEdQUihiYXNlR1BSLCByZXN1bHRHUFIpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICBzY3JhdGNo
R1BSID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHJlc3VsdEdQ
UiwgcmVzdWx0VGFnR1BSKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIHN0dWJKaXQucHVzaFRv
U2F2ZShzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9
IHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBmYWlsdXJlQ2FzZXM7Ci0KLSAgICAgICAgICAgIHN0dWJKaXQubG9hZDgoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHNj
cmF0Y2hHUFIpOwotICAgICAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5j
aFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMihJc0FycmF5KSkpOwotICAgICAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVu
ZChzdHViSml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaEdQUiwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzaykpKTsKLQotICAg
ICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAg
c3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlT
dG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgZmFpbHVy
ZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwg
c2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSkpOwotCi0gICAgICAg
ICAgICBzdHViSml0Lm1vdmUoc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKLSNpZiBVU0UoSlNWQUxV
RTY0KQotICAgICAgICAgICAgc3R1YkppdC5vcjY0KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZElt
bTY0KFRhZ1R5cGVOdW1iZXIpLCByZXN1bHRHUFIpOwotI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkK
LSAgICAgICAgICAgIHN0dWJKaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpJbnQzMlRhZyksIHJlc3VsdFRhZ0dQUik7Ci0jZW5kaWYKLQotICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzcywgZmFpbDsKLQotICAgICAgICAgICAgZW1pdFJl
c3RvcmVTY3JhdGNoKHN0dWJKaXQsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzY3JhdGNoR1BSLCBz
dWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgc3R1YkppdCwgY29kZUJsb2NrLCBKSVRDb21waWxh
dGlvbkNhbkZhaWwpOwotICAgICAgICAgICAgaWYgKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9j
YXRlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAg
ICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gs
IHN0dWJJbmZvLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMpOwotCi0gICAgICAgICAgICBz
dHViSW5mby5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAgICAg
ICAgICAgZXhlYy0+Y29kZUJsb2NrKCksIHBhdGNoQnVmZmVyLAotICAgICAgICAgICAgICAgICgi
R2V0QnlJZCBhcnJheSBsZW5ndGggc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCi0gICAg
ICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwgc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAgICAgICAg
ICAgICAgICBzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLmV4ZWN1dGFibGVBZGRyZXNz
KCkpKTsKLQotICAgICAgICAgICAgcmVwbGFjZVdpdGhKdW1wKHN0dWJJbmZvLCBzdHViSW5mby5z
dHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7Ci0gICAgICAgICAgICByZXBhdGNoQ2FsbChjb2Rl
QmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZCk7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IG5ld0Nhc2U7CiAKKyAgICBpZiAoaXNKU0Fy
cmF5KGJhc2VWYWx1ZSkgJiYgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5s
ZW5ndGgpCisgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpnZXRMZW5ndGgodm0sIG93bmVy
LCBBY2Nlc3NUeXBlOjpBcnJheUxlbmd0aCk7CisgICAgZWxzZSBpZiAoaXNKU1N0cmluZyhiYXNl
VmFsdWUpICYmIHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKQor
ICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Z2V0TGVuZ3RoKHZtLCBvd25lciwgQWNjZXNz
VHlwZTo6U3RyaW5nTGVuZ3RoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKCFzbG93LmlzQ2Fj
aGVhYmxlKCkgJiYgIXNsb3QuaXNVbnNldCgpKQorICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7CisgICAgICAgIAorICAgICAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFz
Q2VsbCgpOworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1
cmUodm0pOworICAgICAgICAKKyAgICAgICAgLy8gT3B0aW1pemUgc2VsZiBhY2Nlc3MuCisgICAg
ICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpVbnNldAorICAgICAgICAg
ICAgJiYgc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkKKyAgICAgICAgICAgICYmIHNsb3Quc2xvdEJh
c2UoKSA9PSBiYXNlVmFsdWUKKyAgICAgICAgICAgICYmICFzbG90LndhdGNocG9pbnRTZXQoKQor
ICAgICAgICAgICAgJiYgTWFjcm9Bc3NlbWJsZXI6OmlzQ29tcGFjdFB0ckFsaWduZWRBZGRyZXNz
T2Zmc2V0KG1heE9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShzbG90LmNhY2hlZE9mZnNl
dCgpKSkKKyAgICAgICAgICAgICYmIGFjdGlvbkZvckNlbGwodm0sIGJhc2VDZWxsKSA9PSBBdHRl
bXB0VG9DYWNoZSkgeworICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVy
dHlGb3JSZXBsYWNlbWVudHMoKnZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAgICAg
IHJlcGF0Y2hCeUlkU2VsZkFjY2Vzcygqdm0sIGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVy
ZSwgcHJvcGVydHlOYW1lLCBzbG90LmNhY2hlZE9mZnNldCgpLCBvcGVyYXRpb25HZXRCeUlkT3B0
aW1pemUsIHRydWUpOworICAgICAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRTZWxmKCp2bSwg
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKICAgICAgICAgICAgIHJl
dHVybiBSZXRyeUNhY2hlTGF0ZXI7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBTdHJpbmcubGVu
Z3RoIGNhc2UKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbHVyZSA9IHN0dWJKaXQu
YnJhbmNoOChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKFN0cmluZ1R5cGUpKTsKLQotICAgICAgICBzdHViSml0LmxvYWQzMihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU1N0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSks
IHJlc3VsdEdQUik7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBzdHViSml0Lm9yNjQo
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tNjQoVGFnVHlwZU51bWJlciksIHJlc3VsdEdQUik7
Ci0jZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBzdHViSml0Lm1vdmUoQXNzZW1ibHlI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCByZXN1bHRUYWdHUFIpOwot
I2VuZGlmCisgICAgICAgIGJvb2wgbG9hZFRhcmdldEZyb21Qcm94eSA9IGZhbHNlOworICAgICAg
ICBpZiAoYmFzZUNlbGwtPnR5cGUoKSA9PSBQdXJlRm9yd2FyZGluZ1Byb3h5VHlwZSkgeworICAg
ICAgICAgICAgYmFzZVZhbHVlID0ganNDYXN0PEpTUHJveHkqPihiYXNlQ2VsbCktPnRhcmdldCgp
OworICAgICAgICAgICAgYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7CisgICAgICAgICAg
ICBzdHJ1Y3R1cmUgPSBiYXNlQ2VsbC0+c3RydWN0dXJlKHZtKTsKKyAgICAgICAgICAgIGxvYWRU
YXJnZXRGcm9tUHJveHkgPSB0cnVlOworICAgICAgICB9CiAKLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOworICAgICAgICBJbmxpbmVDYWNoZUFj
dGlvbiBhY3Rpb24gPSBhY3Rpb25Gb3JDZWxsKHZtLCBiYXNlQ2VsbCk7CisgICAgICAgIGlmIChh
Y3Rpb24gIT0gQXR0ZW1wdFRvQ2FjaGUpCisgICAgICAgICAgICByZXR1cm4gYWN0aW9uOwogCi0g
ICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCBzdHViSml0LCBjb2RlQmxvY2ssIEpJ
VENvbXBpbGF0aW9uQ2FuRmFpbCk7Ci0gICAgICAgIGlmIChwYXRjaEJ1ZmZlci5kaWRGYWlsVG9B
bGxvY2F0ZSgpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuaXNVbnNldCgpID8gaW52YWxpZE9mZnNldCA6IHNs
b3QuY2FjaGVkT2Zmc2V0KCk7CiAgICAgICAgIAotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1
Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZv
LnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSkpOwotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1
cmUsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBh
dGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKLQotICAgICAgICBzdHViSW5mby5zdHViUm91dGlu
ZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAgICAgICBleGVjLT5jb2RlQmxvY2so
KSwgcGF0Y2hCdWZmZXIsCi0gICAgICAgICAgICAoIkdldEJ5SWQgc3RyaW5nIGxlbmd0aCBzdHVi
IGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAgICAgICAgICAgICB0b0NTdHJpbmcoKmV4
ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJl
bEF0T2Zmc2V0KAotICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxU
b0RvbmUpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQgY29uZGl0aW9uU2V0OworICAgICAgICBpZiAoc2xvdC5pc1Vuc2V0KCkgfHwgc2xv
dC5zbG90QmFzZSgpICE9IGJhc2VWYWx1ZSkgeworICAgICAgICAgICAgaWYgKHR5cGVJbmZvLnBy
b2hpYml0c1Byb3BlcnR5Q2FjaGluZygpIHx8IHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGlmIChzbG90LmlzVW5zZXQoKSkgeworICAgICAgICAgICAgICAgIGNvbmRpdGlvblNl
dCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcygKKyAgICAgICAgICAgICAgICAg
ICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIGlk
ZW50LmltcGwoKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNvbmRp
dGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAorICAg
ICAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMs
IHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudC5pbXBsKCkpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIG9mZnNldCA9IHNsb3QuaXNVbnNldCgpID8gaW52YWxpZE9mZnNldCA6IGNvbmRp
dGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpOworICAgICAgICB9CiAKLSAgICAg
ICAgcmVwbGFjZVdpdGhKdW1wKHN0dWJJbmZvLCBzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgp
LmNvZGUoKSk7Ci0gICAgICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkKTsKKyAgICAgICAgQWNjZXNzQ2FzZTo6QWNj
ZXNzVHlwZSB0eXBlOworICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkpCisgICAg
ICAgICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6TG9hZDsKKyAgICAgICAgZWxzZSBpZiAoc2xvdC51
c1Vuc2V0KCkpCisgICAgICAgICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6TWlzczsKKyAgICAgICAg
ZWxzZSBpZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpKQorICAgICAgICAgICAgdHlwZSA9IEFj
Y2Vzc0Nhc2U6OkdldHRlcjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdHlwZSA9IEFjY2Vz
c0Nhc2U6OkN1c3RvbUdldHRlcjsKIAotICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwor
ICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Z2V0KAorICAgICAgICAgICAgdm0sIG93bmVy
LCB0eXBlLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBsb2FkVGFyZ2V0RnJvbVBy
b3h5LAorICAgICAgICAgICAgc2xvdC53YXRjaHBvaW50U2V0KCksIHNsb3QuaXNDYWNoZWFibGVD
dXN0b20oKSA/IHNsb3QuY3VzdG9tR2V0dGVyKCkgOiBudWxscHRyKTsKICAgICB9CiAKLSAgICAv
LyBGSVhNRTogQ2FjaGUgcHJvcGVydHkgYWNjZXNzIGZvciBpbW1lZGlhdGVzLgotICAgIGlmICgh
YmFzZVZhbHVlLmlzQ2VsbCgpKQotICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAg
IGlmICghc2xvdC5pc0NhY2hlYWJsZSgpICYmICFzbG90LmlzVW5zZXQoKSkKKyAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIgY29kZVB0ciA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UoCisgICAgICAg
IHZtLCBjb2RlQmxvY2ssIHByb3BlcnR5TmFtZSwgc3RkOjptb3ZlKG5ld0Nhc2UpKTsKKyAgICAK
KyAgICBpZiAoIWNvZGVQdHIpCiAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogCi0gICAg
SlNDZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKLSAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKnZtKTsKLQotICAgIElubGluZUNhY2hlQWN0
aW9uIGFjdGlvbiA9IGFjdGlvbkZvckNlbGwoKnZtLCBiYXNlQ2VsbCk7Ci0gICAgaWYgKGFjdGlv
biAhPSBBdHRlbXB0VG9DYWNoZSkKLSAgICAgICAgcmV0dXJuIGFjdGlvbjsKLQotICAgIC8vIE9w
dGltaXplIHNlbGYgYWNjZXNzLgotICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKQotICAg
ICAgICAmJiBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlCi0gICAgICAgICYmICFzbG90Lndh
dGNocG9pbnRTZXQoKQotICAgICAgICAmJiBNYWNyb0Fzc2VtYmxlcjo6aXNDb21wYWN0UHRyQWxp
Z25lZEFkZHJlc3NPZmZzZXQobWF4T2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpKSkgewotICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9w
ZXJ0eUZvclJlcGxhY2VtZW50cygqdm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwotICAgICAgICBy
ZXBhdGNoQnlJZFNlbGZBY2Nlc3MoKnZtLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUs
IHByb3BlcnR5TmFtZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgb3BlcmF0aW9uR2V0QnlJZEJ1aWxk
TGlzdCwgdHJ1ZSk7Ci0gICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZigqdm0sIGNvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7Ci0gICAgICAgIHJldHVybiBSZXRy
eUNhY2hlTGF0ZXI7Ci0gICAgfQotCi0gICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3QpOworICAgIHJl
cGxhY2VXaXRoSnVtcChzdHViSW5mbywgY29kZVB0cik7CisgICAgCiAgICAgcmV0dXJuIFJldHJ5
Q2FjaGVMYXRlcjsKIH0KIApAQCAtNzUzLDExMiArMzM4LDYgQEAgdm9pZCByZXBhdGNoR2V0QnlJ
RChFeGVjU3RhdGUqIGV4ZWMsIEpTVgogICAgICAgICByZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxv
Y2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkKTsKIH0K
IAotc3RhdGljIHZvaWQgcGF0Y2hKdW1wVG9HZXRCeUlkU3R1YihTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8sIEpJVFN0dWJSb3V0aW5lKiBzdHViUm91dGluZSkKLXsKLSAgICBSRUxFQVNFX0FT
U0VSVChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfbGlzdCk7Ci0gICAg
aWYgKHN0dWJJbmZvLnUuZ2V0QnlJZExpc3QubGlzdC0+ZGlkU2VsZlBhdGNoaW5nKCkpIHsKLSAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKAotICAgICAgICAgICAgc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldCgKLSAgICAgICAgICAgICAgICBzdHViSW5m
by5wYXRjaC5kZWx0YUNhbGxUb0p1bXApLAotICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwo
c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICAKLSAgICByZXBsYWNlV2l0aEp1bXAoc3R1YkluZm8sIHN0dWJSb3V0aW5lLT5jb2RlKCkuY29k
ZSgpKTsKLX0KLQotc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUJ1aWxkR2V0QnlJRExpc3Qo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgaWRl
bnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
KQotewotICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpCi0gICAgICAgIHx8ICghc2xvdC5pc0Nh
Y2hlYWJsZSgpICYmICFzbG90LmlzVW5zZXQoKSkpCi0gICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOwotCi0gICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKLSAgICBi
b29sIGxvYWRUYXJnZXRGcm9tUHJveHkgPSBmYWxzZTsKLSAgICBpZiAoYmFzZUNlbGwtPnR5cGUo
KSA9PSBQdXJlRm9yd2FyZGluZ1Byb3h5VHlwZSkgewotICAgICAgICBiYXNlVmFsdWUgPSBqc0Nh
c3Q8SlNQcm94eSo+KGJhc2VDZWxsKS0+dGFyZ2V0KCk7Ci0gICAgICAgIGJhc2VDZWxsID0gYmFz
ZVZhbHVlLmFzQ2VsbCgpOwotICAgICAgICBsb2FkVGFyZ2V0RnJvbVByb3h5ID0gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotCi0gICAgSW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9uID0g
YWN0aW9uRm9yQ2VsbCgqdm0sIGJhc2VDZWxsKTsKLSAgICBpZiAoYWN0aW9uICE9IEF0dGVtcHRU
b0NhY2hlKQotICAgICAgICByZXR1cm4gYWN0aW9uOwotCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBiYXNlQ2VsbC0+c3RydWN0dXJlKCp2bSk7Ci0gICAgVHlwZUluZm8gdHlwZUluZm8gPSBz
dHJ1Y3R1cmUtPnR5cGVJbmZvKCk7Ci0KLSAgICBpZiAoc3R1YkluZm8ucGF0Y2guc3BpbGxNb2Rl
ID09IE5lZWRUb1NwaWxsKSB7Ci0gICAgICAgIC8vIFdlIGNhbm5vdCBkbyBhcyBtdWNoIGlubGlu
ZSBjYWNoaW5nIGlmIHRoZSByZWdpc3RlcnMgd2VyZSBub3QgZmx1c2hlZCBwcmlvciB0byB0aGlz
IEdldEJ5SWQuIEluIHBhcnRpY3VsYXIsCi0gICAgICAgIC8vIG5vbi1WYWx1ZSBjYWNoZWQgcHJv
cGVydGllcyByZXF1aXJlIHBsYW50aW5nIGNhbGxzLCB3aGljaCByZXF1aXJlcyByZWdpc3RlcnMg
dG8gaGF2ZSBiZWVuIGZsdXNoZWQuIFRodXMsCi0gICAgICAgIC8vIGlmIHJlZ2lzdGVycyB3ZXJl
IG5vdCBmbHVzaGVkLCBkb24ndCBkbyBub24tVmFsdWUgY2FjaGluZy4KLSAgICAgICAgaWYgKCFz
bG90LmlzQ2FjaGVhYmxlVmFsdWUoKSAmJiAhc2xvdC5pc1Vuc2V0KCkpCi0gICAgICAgICAgICBy
ZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICB9Ci0KLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQg
PSBzbG90LmlzVW5zZXQoKSA/IGludmFsaWRPZmZzZXQgOiBzbG90LmNhY2hlZE9mZnNldCgpOwot
ICAgIAotICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKLSAgICBp
ZiAoc2xvdC5pc1Vuc2V0KCkgfHwgc2xvdC5zbG90QmFzZSgpICE9IGJhc2VWYWx1ZSkgewotICAg
ICAgICBpZiAodHlwZUluZm8ucHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCkgfHwgc3RydWN0dXJl
LT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0g
ICAgICAgIGlmIChzbG90LmlzVW5zZXQoKSkKLSAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdl
bmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcygqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBl
UHJvcGVydHlIaXQoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1
Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwgaWRlbnQuaW1wbCgpKTsKLQotICAgICAgICBpZiAoIWNv
bmRpdGlvblNldC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsK
LQotICAgICAgICBvZmZzZXQgPSBzbG90LmlzVW5zZXQoKSA/IGludmFsaWRPZmZzZXQgOiBjb25k
aXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vZmZzZXQoKTsKLSAgICB9Ci0gICAgCi0gICAg
UG9seW1vcnBoaWNHZXRCeUlkTGlzdCogbGlzdCA9IFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmZy
b20oc3R1YkluZm8pOwotICAgIGlmIChsaXN0LT5pc0Z1bGwoKSkgewotICAgICAgICAvLyBXZSBu
ZWVkIHRoaXMgZXh0cmEgY2hlY2sgYmVjYXVzZSBvZiByZWN1cnNpb24uCi0gICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOwotICAgIH0KLSAgICAKLSAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+
IHN0dWJSb3V0aW5lOwotICAgIGJvb2wgcmVzdWx0ID0gZ2VuZXJhdGVCeUlkU3R1YigKLSAgICAg
ICAgZXhlYywga2luZEZvcihzbG90KSwgaWRlbnQsIGN1c3RvbUZvcihzbG90KSwgc3R1YkluZm8s
IGNvbmRpdGlvblNldCwgc2xvdC5zbG90QmFzZSgpLCBvZmZzZXQsIAotICAgICAgICBzdHJ1Y3R1
cmUsIGxvYWRUYXJnZXRGcm9tUHJveHksIHNsb3Qud2F0Y2hwb2ludFNldCgpLCAKLSAgICAgICAg
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGVsdGFDYWxsVG9Eb25lKSwKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlzdC0+Y3VycmVu
dFNsb3dQYXRoVGFyZ2V0KHN0dWJJbmZvKSksIHN0dWJSb3V0aW5lKTsKLSAgICBpZiAoIXJlc3Vs
dCkKLSAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgCi0gICAgR2V0QnlJZEFjY2Vz
czo6QWNjZXNzVHlwZSBhY2Nlc3NUeXBlOwotICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlVmFsdWUo
KSkKLSAgICAgICAgYWNjZXNzVHlwZSA9IHNsb3Qud2F0Y2hwb2ludFNldCgpID8gR2V0QnlJZEFj
Y2Vzczo6V2F0Y2hlZFN0dWIgOiBHZXRCeUlkQWNjZXNzOjpTaW1wbGVTdHViOwotICAgIGVsc2Ug
aWYgKHNsb3QuaXNVbnNldCgpKQotICAgICAgICBhY2Nlc3NUeXBlID0gR2V0QnlJZEFjY2Vzczo6
U2ltcGxlTWlzczsKLSAgICBlbHNlIGlmIChzbG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkpCi0gICAg
ICAgIGFjY2Vzc1R5cGUgPSBHZXRCeUlkQWNjZXNzOjpHZXR0ZXI7Ci0gICAgZWxzZQotICAgICAg
ICBhY2Nlc3NUeXBlID0gR2V0QnlJZEFjY2Vzczo6Q3VzdG9tR2V0dGVyOwotICAgIAotICAgIGxp
c3QtPmFkZEFjY2VzcyhHZXRCeUlkQWNjZXNzKAotICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCksIGFjY2Vzc1R5cGUsIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsCi0gICAg
ICAgIGNvbmRpdGlvblNldCkpOwotICAgIAotICAgIHBhdGNoSnVtcFRvR2V0QnlJZFN0dWIoc3R1
YkluZm8sIHN0dWJSb3V0aW5lLmdldCgpKTsKLSAgICAKLSAgICByZXR1cm4gbGlzdC0+aXNGdWxs
KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOwotfQotCi12b2lkIGJ1aWxkR2V0
QnlJRExpc3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyIGxvY2tl
cihleGVjLT5jb2RlQmxvY2soKS0+bV9sb2NrLCBleGVjLT52bSgpLmhlYXApOwotICAgIAotICAg
IGlmICh0cnlCdWlsZEdldEJ5SURMaXN0KGV4ZWMsIGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBz
bG90LCBzdHViSW5mbykgPT0gR2l2ZVVwT25DYWNoZSkKLSAgICAgICAgcmVwYXRjaENhbGwoZXhl
Yy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0
QnlJZCk7Ci19Ci0KIHN0YXRpYyBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJIGFwcHJvcHJpYXRlR2Vu
ZXJpY1B1dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEtpbmQg
cHV0S2luZCkKIHsKICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkgewpAQCAtODcxLDM1OSAr
MzUwLDE2IEBAIHN0YXRpYyBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJIGFwcHJvcHJpYXQKICAgICBy
ZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdDsKIH0KIAotc3RhdGljIFZfSklUT3BlcmF0
aW9uX0VTc2lKSkkgYXBwcm9wcmlhdGVMaXN0QnVpbGRpbmdQdXRCeUlkRnVuY3Rpb24oY29uc3Qg
UHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRLaW5kIHB1dEtpbmQpCitzdGF0aWMgVl9KSVRPcGVy
YXRpb25fRVNzaUpKSSBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUlkRnVuY3Rpb24oY29uc3Qg
UHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRLaW5kIHB1dEtpbmQpCiB7CiAgICAgaWYgKHNsb3Qu
aXNTdHJpY3RNb2RlKCkpIHsKICAgICAgICAgaWYgKHB1dEtpbmQgPT0gRGlyZWN0KQotICAgICAg
ICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExpc3Q7Ci0gICAg
ICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0QnVpbGRMaXN0OworICAgICAgICAgICAg
cmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgcmV0
dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKICAgICB9CiAgICAgaWYgKHB1dEtp
bmQgPT0gRGlyZWN0KQotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0
cmljdEJ1aWxkTGlzdDsKLSAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdEJ1aWxk
TGlzdDsKLX0KLQotc3RhdGljIGJvb2wgZW1pdFB1dFJlcGxhY2VTdHViKAotICAgIEV4ZWNTdGF0
ZSogZXhlYywKLSAgICBjb25zdCBJZGVudGlmaWVyJiwKLSAgICBjb25zdCBQdXRQcm9wZXJ0eVNs
b3QmIHNsb3QsCi0gICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAotICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlLAotICAgIENvZGVMb2NhdGlvbkxhYmVsIGZhaWx1cmVMYWJlbCwKLSAgICBS
ZWZQdHI8SklUU3R1YlJvdXRpbmU+JiBzdHViUm91dGluZSkKLXsKLSAgICBWTSogdm0gPSAmZXhl
Yy0+dm0oKTsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1Yklu
Zm8ucGF0Y2guYmFzZUdQUik7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBHUFJSZWcgdmFs
dWVUYWdHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVlVGFnR1BS
KTsKLSNlbmRpZgotICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1
YkluZm8ucGF0Y2gudmFsdWVHUFIpOwotCi0gICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFs
bG9jYXRvcihzdHViSW5mby5wYXRjaC51c2VkUmVnaXN0ZXJzKTsKLSAgICBhbGxvY2F0b3IubG9j
ayhiYXNlR1BSKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIGFsbG9jYXRvci5sb2NrKHZh
bHVlVGFnR1BSKTsKLSNlbmRpZgotICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlR1BSKTsKLSAgICAK
LSAgICBHUFJSZWcgc2NyYXRjaEdQUjEgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7
Ci0KLSAgICBDQ2FsbEhlbHBlcnMgc3R1YkppdCh2bSwgZXhlYy0+Y29kZUJsb2NrKCkpOwotCi0g
ICAgc2l6ZV90IG51bWJlck9mUGFkZGluZ0J5dGVzID0gYWxsb2NhdG9yLnByZXNlcnZlUmV1c2Vk
UmVnaXN0ZXJzQnlQdXNoaW5nKHN0dWJKaXQpOwotCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
YmFkU3RydWN0dXJlID0gc3R1YkppdC5icmFuY2hTdHJ1Y3R1cmUoCi0gICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKLSAgICAgICAgc3RydWN0dXJlKTsKLQot
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zm
c2V0KCkpKQotICAgICAgICBzdHViSml0LnN0b3JlNjQodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9m
ZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVl
KSkpOwotICAgIGVsc2UgewotICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQ
UjEpOwotICAgICAgICBzdHViSml0LnN0b3JlNjQodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgp
KSAqIHNpemVvZihKU1ZhbHVlKSkpOwotICAgIH0KLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0g
ICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSB7Ci0gICAgICAgIHN0
dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdl
KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9G
KEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwotICAgICAgICBzdHVi
Sml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFn
ZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRP
RihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIHN0dWJK
aXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEs
IG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUp
ICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2Fk
KSkpOwotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNl
dCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNj
cmlwdG9yLCBhc0JpdHMudGFnKSkpOwotICAgIH0KLSNlbmRpZgotICAgIAotICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIHN1Y2Nlc3M7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbHVyZTsK
LSAgICAKLSAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkpIHsKLSAgICAgICAg
YWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoc3R1YkppdCwgbnVtYmVy
T2ZQYWRkaW5nQnl0ZXMpOwotICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7Ci0gICAg
ICAgIAotICAgICAgICBiYWRTdHJ1Y3R1cmUubGluaygmc3R1YkppdCk7Ci0gICAgICAgIGFsbG9j
YXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKHN0dWJKaXQsIG51bWJlck9mUGFk
ZGluZ0J5dGVzKTsKLSAgICAgICAgZmFpbHVyZSA9IHN0dWJKaXQuanVtcCgpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKLSAgICAgICAgZmFpbHVyZSA9
IGJhZFN0cnVjdHVyZTsKLSAgICB9Ci0gICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigq
dm0sIHN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygpLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwot
ICAgIGlmIChwYXRjaEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgCi0gICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0Rv
bmUpKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmUsIGZhaWx1cmVMYWJlbCk7Ci0gICAg
ICAgICAgICAKLSAgICBzdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAg
ICAgIGV4ZWMtPmNvZGVCbG9jaygpLCBwYXRjaEJ1ZmZlciwKLSAgICAgICAgKCJQdXRCeUlkIHJl
cGxhY2Ugc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICAgICB0b0NTdHJp
bmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2Fs
bFRvRG9uZSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgIAotICAgIHJldHVybiB0cnVlOwot
fQotCi1zdGF0aWMgYm9vbCBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCi0gICAgRXhlY1N0YXRlKiBl
eGVjLCBWTSogdm0sIFN0cnVjdHVyZSomIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgaWRl
bnQsIAotICAgIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQsCi0gICAgU3RydWN0dXJlKiYgb2xkU3RydWN0dXJl
LCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KQotewotICAgIFByb3Bl
cnR5TmFtZSBwbmFtZShpZGVudCk7Ci0gICAgb2xkU3RydWN0dXJlID0gc3RydWN0dXJlOwotICAg
IGlmICghb2xkU3RydWN0dXJlLT5pc09iamVjdCgpIHx8IG9sZFN0cnVjdHVyZS0+aXNEaWN0aW9u
YXJ5KCkgfHwgcGFyc2VJbmRleChwbmFtZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IFByb3BlcnR5T2Zmc2V0IHByb3BlcnR5T2Zmc2V0OwotICAgIHN0cnVjdHVyZSA9IFN0cnVjdHVy
ZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShv
bGRTdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSwgMCwgcHJvcGVydHlPZmZzZXQpOwotCi0gICAgaWYg
KCFzdHJ1Y3R1cmUgfHwgIXN0cnVjdHVyZS0+aXNPYmplY3QoKSB8fCBzdHJ1Y3R1cmUtPmlzRGlj
dGlvbmFyeSgpIHx8ICFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gU2tpcCBvcHRpbWl6aW5nIHRoZSBjYXNl
IHdoZXJlIHdlIG5lZWQgYSByZWFsbG9jLCBpZiB3ZSBkb24ndCBoYXZlCi0gICAgLy8gZW5vdWdo
IHJlZ2lzdGVycyB0byBtYWtlIGl0IGhhcHBlbi4KLSAgICBpZiAoR1BSSW5mbzo6bnVtYmVyT2ZS
ZWdpc3RlcnMgPCA2Ci0gICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSAhPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkKLSAgICAgICAgJiYgb2xkU3RydWN0
dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICAvLyBTa2lwIG9wdGltaXppbmcgdGhlIGNhc2Ugd2hlcmUgd2UgbmVlZCByZWFsbG9j
LCBhbmQgdGhlIHN0cnVjdHVyZSBoYXMKLSAgICAvLyBpbmRleGluZyBzdG9yYWdlLgotICAgIC8v
IEZJWE1FOiBXZSBzaG91bGRuJ3Qgc2tpcCB0aGlzISBJbXBsZW1lbnQgaXQhCi0gICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMDkxNAotICAgIGlmIChvbGRT
dHJ1Y3R1cmUtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGlmIChwdXRLaW5kID09IE5vdERpcmVjdCkgewotICAgICAgICBjb25kaXRpb25T
ZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3MoCi0gICAgICAgICAg
ICAqdm0sIGV4ZWMtPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0
dXJlLCBpZGVudC5pbXBsKCkpOwotICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQ29kZUxvY2F0aW9uTGFi
ZWwgZmFpbHVyZUxhYmVsID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZz
ZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSk7Ci0gICAgUmVmUHRyPEpJVFN0
dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUgPSBzdHViSW5mby5zdHViUm91dGluZTsKLQotICAgIEdQ
UlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNlR1BS
KTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIEdQUlJlZyB2YWx1ZVRhZ0dQUiA9IHN0YXRp
Y19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVUYWdHUFIpOwotI2VuZGlmCi0gICAg
R1BSUmVnIHZhbHVlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1
ZUdQUik7Ci0gICAgCi0gICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcihzdHVi
SW5mby5wYXRjaC51c2VkUmVnaXN0ZXJzKTsKLSAgICBhbGxvY2F0b3IubG9jayhiYXNlR1BSKTsK
LSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlVGFnR1BSKTsK
LSNlbmRpZgotICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlR1BSKTsKLSAgICAKLSAgICBDQ2FsbEhl
bHBlcnMgc3R1YkppdCh2bSk7Ci0gICAgCi0gICAgYm9vbCBuZWVkVGhpcmRTY3JhdGNoID0gZmFs
c2U7Ci0gICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1
cmUtPm91dE9mTGluZUNhcGFjaXR5KCkKLSAgICAgICAgJiYgb2xkU3RydWN0dXJlLT5vdXRPZkxp
bmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgIG5lZWRUaGlyZFNjcmF0Y2ggPSB0cnVlOwotICAgIH0K
LQotICAgIEdQUlJlZyBzY3JhdGNoR1BSMSA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIo
KTsKLSAgICBBU1NFUlQoc2NyYXRjaEdQUjEgIT0gYmFzZUdQUik7Ci0gICAgQVNTRVJUKHNjcmF0
Y2hHUFIxICE9IHZhbHVlR1BSKTsKLSAgICAKLSAgICBHUFJSZWcgc2NyYXRjaEdQUjIgPSBhbGxv
Y2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7Ci0gICAgQVNTRVJUKHNjcmF0Y2hHUFIyICE9IGJh
c2VHUFIpOwotICAgIEFTU0VSVChzY3JhdGNoR1BSMiAhPSB2YWx1ZUdQUik7Ci0gICAgQVNTRVJU
KHNjcmF0Y2hHUFIyICE9IHNjcmF0Y2hHUFIxKTsKLQotICAgIEdQUlJlZyBzY3JhdGNoR1BSMzsK
LSAgICBpZiAobmVlZFRoaXJkU2NyYXRjaCkgewotICAgICAgICBzY3JhdGNoR1BSMyA9IGFsbG9j
YXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKLSAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIzICE9
IGJhc2VHUFIpOwotICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjMgIT0gdmFsdWVHUFIpOwotICAg
ICAgICBBU1NFUlQoc2NyYXRjaEdQUjMgIT0gc2NyYXRjaEdQUjEpOwotICAgICAgICBBU1NFUlQo
c2NyYXRjaEdQUjMgIT0gc2NyYXRjaEdQUjIpOwotICAgIH0gZWxzZQotICAgICAgICBzY3JhdGNo
R1BSMyA9IEludmFsaWRHUFJSZWc7Ci0gICAgCi0gICAgc2l6ZV90IG51bWJlck9mUGFkZGluZ0J5
dGVzID0gYWxsb2NhdG9yLnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKHN0dWJKaXQp
OwotCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsKLSAgICAgICAg
ICAgIAotICAgIEFTU0VSVChvbGRTdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFz
QmVlbkludmFsaWRhdGVkKCkpOwotICAgIAotICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1Ykpp
dC5icmFuY2hTdHJ1Y3R1cmUoCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgCi0g
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSksIAotICAgICAgICBvbGRTdHJ1Y3R1cmUpKTsKLSAgICAKLSAgICBjaGVja09i
amVjdFByb3BlcnR5Q29uZGl0aW9ucygKLSAgICAgICAgY29uZGl0aW9uU2V0LCBleGVjLT5jb2Rl
QmxvY2soKSwgc3R1YkluZm8sIHN0dWJKaXQsIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUjEpOwot
Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwotICAgIAotICAgIGJvb2wg
c2NyYXRjaEdQUjFIYXNTdG9yYWdlID0gZmFsc2U7Ci0gICAgCi0gICAgaWYgKHN0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkp
IHsKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCkgKiBzaXplb2YoSlNWYWx1ZSk7Ci0gICAgICAgIENvcGllZEFsbG9jYXRvciogY29waWVkQWxs
b2NhdG9yID0gJnZtLT5oZWFwLnN0b3JhZ2VBbGxvY2F0b3IoKTsKLSAgICAgICAgCi0gICAgICAg
IGlmICghb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgICAgICBz
dHViSml0LmxvYWRQdHIoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nLCBzY3Jh
dGNoR1BSMSk7Ci0gICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoc3R1YkppdC5icmFuY2hTdWJQ
dHIoTWFjcm9Bc3NlbWJsZXI6OlNpZ25lZCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihu
ZXdTaXplKSwgc2NyYXRjaEdQUjEpKTsKLSAgICAgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIoc2Ny
YXRjaEdQUjEsICZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZyk7Ci0gICAgICAg
ICAgICBzdHViSml0Lm5lZ1B0cihzY3JhdGNoR1BSMSk7Ci0gICAgICAgICAgICBzdHViSml0LmFk
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKCZjb3BpZWRBbGxvY2F0b3ItPm1f
Y3VycmVudFBheWxvYWRFbmQpLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgICAgICBzdHViSml0LmFk
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1ZhbHVlKSksIHNjcmF0
Y2hHUFIxKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNpemVfdCBvbGRTaXplID0g
b2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwotICAg
ICAgICAgICAgQVNTRVJUKG5ld1NpemUgPiBvbGRTaXplKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIzKTsKLSAgICAgICAgICAgIHN0
dWJKaXQubG9hZFB0cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0
Y2hHUFIxKTsKLSAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChzdHViSml0LmJyYW5jaFN1YlB0
cihNYWNyb0Fzc2VtYmxlcjo6U2lnbmVkLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG5l
d1NpemUpLCBzY3JhdGNoR1BSMSkpOwotICAgICAgICAgICAgc3R1YkppdC5zdG9yZVB0cihzY3Jh
dGNoR1BSMSwgJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKLSAgICAgICAg
ICAgIHN0dWJKaXQubmVnUHRyKHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAgIHN0dWJKaXQuYWRk
UHRyKE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9jYXRvci0+bV9j
dXJyZW50UGF5bG9hZEVuZCksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAgIHN0dWJKaXQuYWRk
UHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEpTVmFsdWUpKSwgc2NyYXRj
aEdQUjEpOwotICAgICAgICAgICAgLy8gV2UgaGF2ZSBzY3JhdGNoR1BSMSA9IG5ldyBzdG9yYWdl
LCBzY3JhdGNoR1BSMyA9IG9sZCBzdG9yYWdlLCBzY3JhdGNoR1BSMiA9IGF2YWlsYWJsZQotICAg
ICAgICAgICAgZm9yIChzaXplX3Qgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgb2xkU2l6ZTsgb2Zmc2V0
ICs9IHNpemVvZih2b2lkKikpIHsKLSAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjMsIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+
KG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZih2b2lkKikpKSwgc2NyYXRjaEdQUjIp
OwotICAgICAgICAgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjIsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihvZmZz
ZXQgKyBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2Yodm9pZCopKSkpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzdHViSml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIx
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpKTsKLSAgICAgICAgc2NyYXRjaEdQUjFIYXNTdG9yYWdlID0gdHJ1ZTsKLSAgICB9Ci0K
LSAgICBBU1NFUlQob2xkU3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKSA9PSBzdHJ1Y3R1cmUt
PnR5cGVJbmZvKCkudHlwZSgpKTsKLSAgICBBU1NFUlQob2xkU3RydWN0dXJlLT50eXBlSW5mbygp
LmlubGluZVR5cGVGbGFncygpID09IHN0cnVjdHVyZS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxh
Z3MoKSk7Ci0gICAgQVNTRVJUKG9sZFN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgPT0gc3RydWN0
dXJlLT5pbmRleGluZ1R5cGUoKSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICB1aW50MzJfdCB2
YWwgPSBzdHJ1Y3R1cmUtPmlkKCk7Ci0jZWxzZQotICAgIHVpbnQzMl90IHZhbCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDMyX3Q+KHN0cnVjdHVyZS0+aWQoKSk7Ci0jZW5kaWYKLSAgICBzdHViSml0
LnN0b3JlMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih2YWwpLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKLSNpZiBV
U0UoSlNWQUxVRTY0KQotICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgp
KSkKLSAgICAgICAgc3R1YkppdC5zdG9yZTY0KHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJ
bklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsK
LSAgICBlbHNlIHsKLSAgICAgICAgaWYgKCFzY3JhdGNoR1BSMUhhc1N0b3JhZ2UpCi0gICAgICAg
ICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUjEpOwotICAgICAgICBzdHViSml0
LnN0b3JlNjQodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBv
ZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkp
OwotICAgIH0KLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgaWYgKGlzSW5saW5lT2Zmc2V0
KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSB7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5s
aW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkp
ICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IsIGFzQml0cy5wYXlsb2FkKSkpOwotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdH
UFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklu
bGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgp
KSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yLCBhc0JpdHMudGFnKSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghc2NyYXRjaEdQ
UjFIYXNTdG9yYWdlKQotICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hH
UFIxKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQo
KSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3Jp
cHRvciwgYXNCaXRzLnBheWxvYWQpKSk7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRh
Z0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNldEluQnV0dGVy
Zmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNF
VE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7Ci0gICAgfQotI2VuZGlm
Ci0gICAgCi0gICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IG51bGxwdHI7Ci0KLSNp
ZiBFTkFCTEUoR0dDKQotICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxGbHVzaFdyaXRlQmFy
cmllckJ1ZmZlcjsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvd25lcklzUmVtZW1iZXJlZE9y
SW5FZGVuID0gc3R1YkppdC5qdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihiYXNlR1BSKTsKLSAg
ICB7Ci0gICAgICAgIFdyaXRlQmFycmllckJ1ZmZlciYgd3JpdGVCYXJyaWVyQnVmZmVyID0gc3R1
YkppdC52bSgpLT5oZWFwLndyaXRlQmFycmllckJ1ZmZlcigpOwotICAgICAgICBzdHViSml0Lmxv
YWQzMih3cml0ZUJhcnJpZXJCdWZmZXIuY3VycmVudEluZGV4QWRkcmVzcygpLCBzY3JhdGNoR1BS
Mik7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5lZWRUb0ZsdXNoID0KLSAgICAgICAg
ICAgIHN0dWJKaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc2NyYXRj
aEdQUjIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIod3JpdGVCYXJyaWVyQnVmZmVyLmNh
cGFjaXR5KCkpKTsKLQotICAgICAgICBzdHViSml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoMSksIHNjcmF0Y2hHUFIyKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHNjcmF0
Y2hHUFIyLCB3cml0ZUJhcnJpZXJCdWZmZXIuY3VycmVudEluZGV4QWRkcmVzcygpKTsKLQotICAg
ICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIod3JpdGVCYXJy
aWVyQnVmZmVyLmJ1ZmZlcigpKSwgc2NyYXRjaEdQUjEpOwotICAgICAgICAvLyBXZSB1c2UgYW4g
b2Zmc2V0IG9mIC1zaXplb2Yodm9pZCopIGJlY2F1c2Ugd2UgYWxyZWFkeSBhZGRlZCAxIHRvIHNj
cmF0Y2hHUFIyLgotICAgICAgICBzdHViSml0LnN0b3JlUHRyKGJhc2VHUFIsIE1hY3JvQXNzZW1i
bGVyOjpCYXNlSW5kZXgoc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBNYWNyb0Fzc2VtYmxlcjo6
U2NhbGVQdHIsIHN0YXRpY19jYXN0PGludDMyX3Q+KC1zaXplb2Yodm9pZCopKSkpOwotCi0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmVXaXRoQmFycmllciA9IHN0dWJKaXQuanVtcCgp
OwotICAgICAgICBuZWVkVG9GbHVzaC5saW5rKCZzdHViSml0KTsKLQotICAgICAgICBzY3JhdGNo
QnVmZmVyID0gdm0tPnNjcmF0Y2hCdWZmZXJGb3JTaXplKGFsbG9jYXRvci5kZXNpcmVkU2NyYXRj
aEJ1ZmZlclNpemVGb3JDYWxsKCkpOwotICAgICAgICBhbGxvY2F0b3IucHJlc2VydmVVc2VkUmVn
aXN0ZXJzVG9TY3JhdGNoQnVmZmVyRm9yQ2FsbChzdHViSml0LCBzY3JhdGNoQnVmZmVyLCBzY3Jh
dGNoR1BSMik7Ci0gICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJh
c2VHUFIpOwotICAgICAgICBjYWxsRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIgPSBzdHViSml0LmNh
bGwoKTsKLSAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVVc2VkUmVnaXN0ZXJzRnJvbVNjcmF0Y2hC
dWZmZXJGb3JDYWxsKHN0dWJKaXQsIHNjcmF0Y2hCdWZmZXIsIHNjcmF0Y2hHUFIyKTsKLQotICAg
ICAgICBkb25lV2l0aEJhcnJpZXIubGluaygmc3R1YkppdCk7Ci0gICAgfQotICAgIG93bmVySXNS
ZW1lbWJlcmVkT3JJbkVkZW4ubGluaygmc3R1YkppdCk7Ci0jZW5kaWYKLQotICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIHN1Y2Nlc3M7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbHVyZTsK
LSAgICAgICAgICAgIAotICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMoKSkgewot
ICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhzdHViSml0
LCBudW1iZXJPZlBhZGRpbmdCeXRlcyk7Ci0gICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAo
KTsKLQotICAgICAgICBmYWlsdXJlQ2FzZXMubGluaygmc3R1YkppdCk7Ci0gICAgICAgIGFsbG9j
YXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKHN0dWJKaXQsIG51bWJlck9mUGFk
ZGluZ0J5dGVzKTsKLSAgICAgICAgZmFpbHVyZSA9IHN0dWJKaXQuanVtcCgpOwotICAgIH0gZWxz
ZQotICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgCi0gICAgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgb3BlcmF0aW9uQ2FsbDsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNj
ZXNzSW5TbG93UGF0aDsKLSAgICAKLSAgICBpZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICBzbG93
UGF0aC5saW5rKCZzdHViSml0KTsKLSAgICAgICAgCi0gICAgICAgIGFsbG9jYXRvci5yZXN0b3Jl
UmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKHN0dWJKaXQsIG51bWJlck9mUGFkZGluZ0J5dGVzKTsK
LSAgICAgICAgaWYgKCFzY3JhdGNoQnVmZmVyKQotICAgICAgICAgICAgc2NyYXRjaEJ1ZmZlciA9
IHZtLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShhbGxvY2F0b3IuZGVzaXJlZFNjcmF0Y2hCdWZmZXJT
aXplRm9yQ2FsbCgpKTsKLSAgICAgICAgYWxsb2NhdG9yLnByZXNlcnZlVXNlZFJlZ2lzdGVyc1Rv
U2NyYXRjaEJ1ZmZlckZvckNhbGwoc3R1YkppdCwgc2NyYXRjaEJ1ZmZlciwgc2NyYXRjaEdQUjEp
OwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKGJhc2VHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVy
ZSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2xvdC5jYWNoZWRPZmZzZXQoKSksIHZh
bHVlR1BSKTsKLSNlbHNlCi0gICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKGJhc2VHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2xvdC5jYWNoZWRPZmZzZXQoKSksIHZhbHVlR1BS
LCB2YWx1ZVRhZ0dQUik7Ci0jZW5kaWYKLSAgICAgICAgb3BlcmF0aW9uQ2FsbCA9IHN0dWJKaXQu
Y2FsbCgpOwotICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVVzZWRSZWdpc3RlcnNGcm9tU2NyYXRj
aEJ1ZmZlckZvckNhbGwoc3R1YkppdCwgc2NyYXRjaEJ1ZmZlciwgc2NyYXRjaEdQUjEpOwotICAg
ICAgICBzdWNjZXNzSW5TbG93UGF0aCA9IHN0dWJKaXQuanVtcCgpOwotICAgIH0KLSAgICAKLSAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCks
IEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7Ci0gICAgaWYgKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0Fs
bG9jYXRlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBwYXRjaEJ1ZmZlci5s
aW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0
dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSkpOwotICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1
c2VSZWdpc3RlcnMoKSkKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlLCBmYWlsdXJl
TGFiZWwpOwotICAgIGVsc2UKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMs
IGZhaWx1cmVMYWJlbCk7Ci0jaWYgRU5BQkxFKEdHQykKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGNh
bGxGbHVzaFdyaXRlQmFycmllckJ1ZmZlciwgb3BlcmF0aW9uRmx1c2hXcml0ZUJhcnJpZXJCdWZm
ZXIpOwotI2VuZGlmCi0gICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBv
bGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgcGF0Y2hCdWZmZXIu
bGluayhvcGVyYXRpb25DYWxsLCBvcGVyYXRpb25SZWFsbG9jYXRlU3RvcmFnZUFuZEZpbmlzaFB1
dCk7Ci0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzc0luU2xvd1BhdGgsIHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2Fs
bFRvRG9uZSkpOwotICAgIH0KLSAgICAKLSAgICBzdHViUm91dGluZSA9Ci0gICAgICAgIGNyZWF0
ZUpJVFN0dWJSb3V0aW5lKAotICAgICAgICAgICAgRklOQUxJWkVfQ09ERV9GT1IoCi0gICAgICAg
ICAgICAgICAgZXhlYy0+Y29kZUJsb2NrKCksIHBhdGNoQnVmZmVyLAotICAgICAgICAgICAgICAg
ICgiUHV0QnlJZCAlc3RyYW5zaXRpb24gc3R1YiAoJXAgLT4gJXApIGZvciAlcywgcmV0dXJuIHBv
aW50ICVwIiwKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA/ICJyZWFsbG9jYXRpbmcg
IiA6ICIiLAotICAgICAgICAgICAgICAgICAgICBvbGRTdHJ1Y3R1cmUsIHN0cnVjdHVyZSwKLSAg
ICAgICAgICAgICAgICAgICAgdG9DU3RyaW5nKCpleGVjLT5jb2RlQmxvY2soKSkuZGF0YSgpLCBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSkuZXhlY3V0YWJsZUFkZHJl
c3MoKSkpLAotICAgICAgICAgICAgKnZtLAotICAgICAgICAgICAgZXhlYy0+Y29kZUJsb2NrKCkt
Pm93bmVyRXhlY3V0YWJsZSgpLAotICAgICAgICAgICAgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwKLSAgICAgICAgICAg
IHN0cnVjdHVyZSk7Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBvcGVy
YXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgcmV0dXJuIG9wZXJhdGlv
blB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKIH0KIAogc3RhdGljIElubGluZUNhY2hlQWN0aW9u
IHRyeUNhY2hlUHV0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFB1dFByb3Bl
cnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtp
bmQpCkBAIC0xMjMyLDcgKzM2OCw4IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNo
ZVB1dEJ5SUQKICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAgICAgCiAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKKyAgICBTY3JpcHRFeGVjdXRhYmxlKiBvd25lciA9IGNvZGVCbG9jay0+b3duZXJTY3Jp
cHRFeGVjdXRhYmxlKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKIAogICAgIGlmICghYmFz
ZVZhbHVlLmlzQ2VsbCgpKQogICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKQEAgLTEyNDMs
MjEwICszODAsMTA5IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQK
ICAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQogICAg
ICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKIAotICAgIC8vIE9wdGltaXplIHNlbGYgYWNjZXNz
LgotICAgIGlmIChzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUgJiYgc2xvdC5pc0NhY2hlYWJsZVB1
dCgpKSB7Ci0gICAgICAgIGlmIChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5ld1By
b3BlcnR5KSB7CisgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IG5ld0Nhc2U7CiAKLSAg
ICAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlOwotICAgICAgICAgICAgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OwotICAgICAgICAgICAgaWYgKCFlbWl0UHV0
VHJhbnNpdGlvblN0dWIoZXhlYywgdm0sIHN0cnVjdHVyZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZv
LCBwdXRLaW5kLCBvbGRTdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgaWYgKHNsb3QuYmFzZSgpID09IEJhc2VWYWx1ZSAm
JiBzbG90LmlzQ2FjaGVhYmxlUHV0KCkpIHsKKyAgICAgICAgaWYgKHNsb3QudHlwZSgpID09IFB1
dFByb3BlcnR5U2xvdDo6RXhpc3RpbmdQcm9wZXJ0eSkgeworICAgICAgICAgICAgc3RydWN0dXJl
LT5kaWRDYWNoZVByb3BlcnR5UmVwbGFjZW1lbnQodm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwor
ICAgICAgICAKKyAgICAgICAgICAgIHB0cmRpZmZfdCBvZmZzZXRUb1BhdGNoZWRTdG9yYWdlID0g
b2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAg
ICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlVuc2V0CisgICAg
ICAgICAgICAgICAgJiYgTWFjcm9Bc3NlbWJsZXI6OmlzUHRyQWxpZ25lZEFkZHJlc3NPZmZzZXQo
b2Zmc2V0VG9QYXRjaGVkU3RvcmFnZSkpIHsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoCisgICAgICAgICAgICAgICAgICAgIHZtLCBjb2Rl
QmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIGlkZW50LCBzbG90LmNhY2hlZE9mZnNldCgpLAor
ICAgICAgICAgICAgICAgICAgICBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUlkRnVuY3Rpb24o
c2xvdCwgcHV0S2luZCksIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0UHV0
QnlJZFJlcGxhY2Uodm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKyAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKAotICAgICAgICAgICAg
ICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoCi0gICAgICAgICAg
ICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksCi0gICAgICAgICAgICAg
ICAgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkp
KTsKLSAgICAgICAgICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLCBhcHByb3ByaWF0ZUxpc3RCdWlsZGluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBw
dXRLaW5kKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlk
VHJhbnNpdGlvbigqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIG9sZFN0cnVjdHVy
ZSwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIHB1dEtpbmQgPT0gRGlyZWN0KTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLSAgICAgICAgfQorICAg
ICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OnJlcGxhY2Uodm0sIG93bmVyLCBzdHJ1Y3R1
cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
QVNTRVJUKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6TmV3UHJvcGVydHkpOwogCi0g
ICAgICAgIGlmICghTWFjcm9Bc3NlbWJsZXI6OmlzUHRyQWxpZ25lZEFkZHJlc3NPZmZzZXQob2Zm
c2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSkKLSAgICAg
ICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUt
PmlzT2JqZWN0KCkgfHwgc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKIAotICAgICAgICBzdHJ1Y3R1cmUtPmRpZENhY2hlUHJv
cGVydHlSZXBsYWNlbWVudCgqdm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwotICAgICAgICByZXBh
dGNoQnlJZFNlbGZBY2Nlc3MoKnZtLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIGlk
ZW50LCBzbG90LmNhY2hlZE9mZnNldCgpLCBhcHByb3ByaWF0ZUxpc3RCdWlsZGluZ1B1dEJ5SWRG
dW5jdGlvbihzbG90LCBwdXRLaW5kKSwgZmFsc2UpOwotICAgICAgICBzdHViSW5mby5pbml0UHV0
QnlJZFJlcGxhY2UoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUp
OwotICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwotICAgIH0KKyAgICAgICAgICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldDsKKyAgICAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJl
ID0KKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhp
c3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkoCisgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVy
ZSwgaWRlbnQuaW1wbCgpLCAwLCBwcm9wZXJ0eU9mZnNldCk7CisgICAgICAgICAgICBpZiAoIW5l
d1N0cnVjdHVyZSB8fCAhbmV3U3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxl
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAKLSAgICBpZiAoKHNs
b3QuaXNDYWNoZWFibGVDdXN0b20oKSB8fCBzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkpCi0gICAg
ICAgICYmIHN0dWJJbmZvLnBhdGNoLnNwaWxsTW9kZSA9PSBEb250U3BpbGwpIHsKLSAgICAgICAg
UmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKKyAgICAgICAgICAgIEFTU0VSVChu
ZXdTdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSA9PSBzdHJ1Y3R1cmUpOworICAgICAgICAgICAgQVNT
RVJUKCFuZXdTdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChu
ZXdTdHJ1Y3R1cmUtPmlzT2JqZWN0KCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CisgICAgICAgICAgICBpZiAocHV0
S2luZCA9PSBOb3REaXJlY3QpIHsKKyAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPQorICAg
ICAgICAgICAgICAgICAgICBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3Mo
CisgICAgICAgICAgICAgICAgICAgICAgICB2bSwgb3duZXIsIGV4ZWMsIG5ld1N0cnVjdHVyZSwg
aWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlk
KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAg
ICAgfQogCisgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6dHJhbnNpdGlvbih2bSwg
b3duZXIsIHN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBvZmZzZXQsIGNvbmRpdGlvblNldCk7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSB8fCBzbG90
LmlzQ2FjaGVhYmxlU2V0dGVyKCkpIHsKICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgY29uZGl0aW9uU2V0OwogICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7Ci0gICAgICAg
IGlmIChzbG90LmJhc2UoKSAhPSBiYXNlVmFsdWUpIHsKLSAgICAgICAgICAgIGlmIChzbG90Lmlz
Q2FjaGVhYmxlQ3VzdG9tKCkpIHsKKworICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUN1c3Rv
bSgpKSB7CisgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25T
ZXQ7CisKKyAgICAgICAgICAgIGlmIChzbG90LmJhc2UoKSAhPSBiYXNlVmFsdWUpIHsKICAgICAg
ICAgICAgICAgICBjb25kaXRpb25TZXQgPQogICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUNv
bmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdEN1c3RvbSgKLSAgICAgICAgICAgICAgICAg
ICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJl
LCBzbG90LmJhc2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50LmltcGwoKSk7Ci0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9Ci0gICAg
ICAgICAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0
KAotICAgICAgICAgICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBvd25lciwgZXhl
Yywgc3RydWN0dXJlLCBzbG90LmJhc2UoKSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFjb25kaXRp
b25TZXQuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwot
ICAgICAgICAgICAgb2Zmc2V0ID0gc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpID8gaW52YWxpZE9m
ZnNldCA6IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpOwotICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0KLSAg
ICAgICAgUG9seW1vcnBoaWNQdXRCeUlkTGlzdCogbGlzdDsKLSAgICAgICAgbGlzdCA9IFBvbHlt
b3JwaGljUHV0QnlJZExpc3Q6OmZyb20ocHV0S2luZCwgc3R1YkluZm8pOwotCi0gICAgICAgIGJv
b2wgcmVzdWx0ID0gZ2VuZXJhdGVCeUlkU3R1YigKLSAgICAgICAgICAgIGV4ZWMsIGtpbmRGb3Io
c2xvdCksIGlkZW50LCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBjb25kaXRpb25TZXQsIHNs
b3QuYmFzZSgpLAotICAgICAgICAgICAgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGZhbHNlLCBudWxscHRy
LAotICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQo
c3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSwKLSAgICAgICAgICAgIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRv
U2xvd0Nhc2UpLAotICAgICAgICAgICAgc3R1YlJvdXRpbmUpOwotICAgICAgICBpZiAoIXJlc3Vs
dCkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAKLSAgICAgICAg
bGlzdC0+YWRkQWNjZXNzKFB1dEJ5SWRBY2Nlc3M6OnNldHRlcigKLSAgICAgICAgICAgICp2bSwg
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKLSAgICAgICAgICAgIHNsb3QuaXNDYWNoZWFi
bGVTZXR0ZXIoKSA/IFB1dEJ5SWRBY2Nlc3M6OlNldHRlciA6IFB1dEJ5SWRBY2Nlc3M6OkN1c3Rv
bVNldHRlciwKLSAgICAgICAgICAgIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBzbG90LmN1c3Rv
bVNldHRlcigpLCBzdHViUm91dGluZSkpOwotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBh
dGNoSnVtcChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZv
LnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5j
b2RlKCkuY29kZSgpKSk7Ci0gICAgICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUxpc3RCdWlsZGluZ1B1dEJ5SWRGdW5jdGlv
bihzbG90LCBwdXRLaW5kKSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFsaXN0LT5pc0Z1bGwo
KSk7Ci0gICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0gICAgfQotCi0gICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7Ci19CiAKLXZvaWQgcmVwYXRjaFB1dEJ5SUQoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKLXsKLSAgICBHQ1NhZmVDb25jdXJy
ZW50SklUTG9ja2VyIGxvY2tlcihleGVjLT5jb2RlQmxvY2soKS0+bV9sb2NrLCBleGVjLT52bSgp
LmhlYXApOwotICAgIAotICAgIGlmICh0cnlDYWNoZVB1dEJ5SUQoZXhlYywgYmFzZVZhbHVlLCBz
dHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQpID09IEdpdmVV
cE9uQ2FjaGUpCi0gICAgICAgIHJlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihz
bG90LCBwdXRLaW5kKSk7Ci19Ci0KLXN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWlsZFB1
dEJ5SWRMaXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3Bl
cnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtp
bmQpCi17Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAg
ICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLQotICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQot
ICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgIGlmICghc2xvdC5pc0NhY2hlYWJs
ZVB1dCgpICYmICFzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgJiYgIXNsb3QuaXNDYWNoZWFibGVT
ZXR0ZXIoKSkKLSAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICBpZiAoIXN0cnVj
dHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQotICAgICAgICByZXR1cm4gR2l2
ZVVwT25DYWNoZTsKLQotICAgIC8vIE9wdGltaXplIHNlbGYgYWNjZXNzLgotICAgIGlmIChzbG90
LmJhc2UoKSA9PSBiYXNlVmFsdWUgJiYgc2xvdC5pc0NhY2hlYWJsZVB1dCgpKSB7Ci0gICAgICAg
IFBvbHltb3JwaGljUHV0QnlJZExpc3QqIGxpc3Q7Ci0gICAgICAgIFJlZlB0cjxKSVRTdHViUm91
dGluZT4gc3R1YlJvdXRpbmU7Ci0gICAgICAgIAotICAgICAgICBpZiAoc2xvdC50eXBlKCkgPT0g
UHV0UHJvcGVydHlTbG90OjpOZXdQcm9wZXJ0eSkgewotICAgICAgICAgICAgbGlzdCA9IFBvbHlt
b3JwaGljUHV0QnlJZExpc3Q6OmZyb20ocHV0S2luZCwgc3R1YkluZm8pOwotICAgICAgICAgICAg
aWYgKGxpc3QtPmlzRnVsbCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hl
OyAvLyBXaWxsIGdldCBoZXJlIGR1ZSB0byByZWN1cnNpb24uCi0KLSAgICAgICAgICAgIFN0cnVj
dHVyZSogb2xkU3RydWN0dXJlOworICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OnNl
dHRlcigKKyAgICAgICAgICAgICAgICB2bSwgb3duZXIsIEFjY2Vzc1R5cGU6OkN1c3RvbVNldHRl
ciwgc3RydWN0dXJlLCBpbnZhbGlkT2Zmc2V0LCBjb25kaXRpb25TZXQsCisgICAgICAgICAgICAg
ICAgc2xvdC5jdXN0b21TZXR0ZXIoKSk7CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7Ci0gICAgICAgICAgICBpZiAo
IWVtaXRQdXRUcmFuc2l0aW9uU3R1YihleGVjLCB2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUs
IHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kLCBvbGRTdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQ7CiAKLSAgICAgICAgICAgIHN0dWJSb3V0aW5lID0gc3R1YkluZm8uc3R1
YlJvdXRpbmU7Ci0gICAgICAgICAgICBsaXN0LT5hZGRBY2Nlc3MoCi0gICAgICAgICAgICAgICAg
UHV0QnlJZEFjY2Vzczo6dHJhbnNpdGlvbigKLSAgICAgICAgICAgICAgICAgICAgKnZtLCBjb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAotICAgICAgICAgICAgICAgICAgICBvbGRTdHJ1Y3R1
cmUsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LAotICAgICAgICAgICAgICAgICAgICBzdHViUm91
dGluZSkpOworICAgICAgICAgICAgaWYgKHNsb3QuYmFzZSgpICE9IGJhc2VWYWx1ZSkgeworICAg
ICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9CisgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRl
Q29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAorICAgICAgICAgICAgICAgICAgICAg
ICAgdm0sIG93bmVyLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLCBpZGVudC5pbXBsKCkp
OworICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICAgICAgb2Zmc2V0
ID0gY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCk7CisgICAgICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOwog
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBsaXN0ID0gUG9seW1vcnBoaWNQdXRCeUlk
TGlzdDo6ZnJvbShwdXRLaW5kLCBzdHViSW5mbyk7Ci0gICAgICAgICAgICBpZiAobGlzdC0+aXNG
dWxsKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7IC8vIFdpbGwgZ2V0
IGhlcmUgZHVlIHRvIHJlY3Vyc2lvbi4KLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3RydWN0
dXJlLT5kaWRDYWNoZVByb3BlcnR5UmVwbGFjZW1lbnQoKnZtLCBzbG90LmNhY2hlZE9mZnNldCgp
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gV2UncmUgbm93IGNvbW1pdHRlZCB0byBj
cmVhdGluZyB0aGUgc3R1Yi4gTW9ncmlmeSB0aGUgbWV0YS1kYXRhIGFjY29yZGluZ2x5LgotICAg
ICAgICAgICAgYm9vbCByZXN1bHQgPSBlbWl0UHV0UmVwbGFjZVN0dWIoCi0gICAgICAgICAgICAg
ICAgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgCi0gICAgICAgICAgICAgICAg
c3RydWN0dXJlLCBDb2RlTG9jYXRpb25MYWJlbChsaXN0LT5jdXJyZW50U2xvd1BhdGhUYXJnZXQo
KSksIHN0dWJSb3V0aW5lKTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBsaXN0
LT5hZGRBY2Nlc3MoCi0gICAgICAgICAgICAgICAgUHV0QnlJZEFjY2Vzczo6cmVwbGFjZSgKLSAg
ICAgICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAotICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIHN0dWJSb3V0aW5lKSk7CisgICAgICAgICAgICBu
ZXdDYXNlID0gQWNjZXNzQ2FzZTo6c2V0dGVyKAorICAgICAgICAgICAgICAgIHZtLCBvd25lciwg
QWNjZXNzVHlwZTo6U2V0dGVyLCBzdHJ1Y3R1cmUsIG9mZnNldCwgY29uZGl0aW9uU2V0LCBudWxs
cHRyKTsKICAgICAgICAgfQotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0
YUNhbGxUb0p1bXApLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUo
KSkpOwotICAgICAgICBpZiAobGlzdC0+aXNGdWxsKCkpCi0gICAgICAgICAgICByZXBhdGNoQ2Fs
bChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVHZW5l
cmljUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKLQotICAgICAgICByZXR1cm4gUmV0
cnlDYWNoZUxhdGVyOwogICAgIH0KIAotICAgIGlmICgoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgp
IHx8IHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSkKLSAgICAgICAgJiYgc3R1YkluZm8ucGF0Y2gu
c3BpbGxNb2RlID09IERvbnRTcGlsbCkgewotICAgICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+
IHN0dWJSb3V0aW5lOwotICAgICAgICAKLSAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgY29uZGl0aW9uU2V0OwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7Ci0gICAgICAg
IGlmIChzbG90LmJhc2UoKSAhPSBiYXNlVmFsdWUpIHsKLSAgICAgICAgICAgIGlmIChzbG90Lmlz
Q2FjaGVhYmxlQ3VzdG9tKCkpIHsKLSAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPQotICAg
ICAgICAgICAgICAgICAgICBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhp
dEN1c3RvbSgKLSAgICAgICAgICAgICAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBzbG90LmJhc2UoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHByb3BlcnR5TmFtZS5pbXBsKCkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPQotICAgICAgICAgICAgICAgICAgICBnZW5lcmF0
ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKLSAgICAgICAgICAgICAgICAgICAg
ICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBz
bG90LmJhc2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZS5pbXBsKCkp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgp
KQotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgb2Zm
c2V0ID0gc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpID8gaW52YWxpZE9mZnNldCA6IGNvbmRpdGlv
blNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpOwotICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgIG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0KLSAgICAgICAgUG9seW1vcnBo
aWNQdXRCeUlkTGlzdCogbGlzdDsKLSAgICAgICAgbGlzdCA9IFBvbHltb3JwaGljUHV0QnlJZExp
c3Q6OmZyb20ocHV0S2luZCwgc3R1YkluZm8pOwotCi0gICAgICAgIGJvb2wgcmVzdWx0ID0gZ2Vu
ZXJhdGVCeUlkU3R1YigKLSAgICAgICAgICAgIGV4ZWMsIGtpbmRGb3Ioc2xvdCksIHByb3BlcnR5
TmFtZSwgY3VzdG9tRm9yKHNsb3QpLCBzdHViSW5mbywgY29uZGl0aW9uU2V0LCBzbG90LmJhc2Uo
KSwKLSAgICAgICAgICAgIG9mZnNldCwgc3RydWN0dXJlLCBmYWxzZSwgbnVsbHB0ciwKLSAgICAg
ICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZv
LnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSksCi0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChs
aXN0LT5jdXJyZW50U2xvd1BhdGhUYXJnZXQoKSksCi0gICAgICAgICAgICBzdHViUm91dGluZSk7
Ci0gICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
Ci0gICAgICAgIAotICAgICAgICBsaXN0LT5hZGRBY2Nlc3MoUHV0QnlJZEFjY2Vzczo6c2V0dGVy
KAotICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAotICAgICAg
ICAgICAgc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpID8gUHV0QnlJZEFjY2Vzczo6U2V0dGVyIDog
UHV0QnlJZEFjY2Vzczo6Q3VzdG9tU2V0dGVyLAotICAgICAgICAgICAgc3RydWN0dXJlLCBjb25k
aXRpb25TZXQsIHNsb3QuY3VzdG9tU2V0dGVyKCksIHN0dWJSb3V0aW5lKSk7Ci0KLSAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5q
dW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwgQ29kZUxvY2F0aW9u
TGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICAgICAgaWYgKGxpc3QtPmlz
RnVsbCgpKQotICAgICAgICAgICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihzbG90LCBw
dXRLaW5kKSk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIgPSBzdHViSW5mby5h
ZGRBY2Nlc3NDYXNlKAorICAgICAgICB2bSwgY29kZUJsb2NrLCBwcm9wZXJ0eU5hbWUsIHN0ZDo6
bW92ZShuZXdDYXNlKSk7CisgICAgCisgICAgaWYgKCFjb2RlUHRyKQorICAgICAgICByZXR1cm4g
R2l2ZVVwT25DYWNoZTsKIAotICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwotICAgIH0K
LSAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICByZXNldFB1dEJ5SURDaGVja0FuZExvYWQo
c3R1YkluZm8pOworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcCgKKyAgICAgICAgc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldCgKKyAgICAgICAgICAgIHN0dWJJ
bmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksCisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHN0
dWJJbmZvLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CisgICAgCisgICAgcmV0dXJuIFJl
dHJ5Q2FjaGVMYXRlcjsKIH0KIAotdm9pZCBidWlsZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCit2b2lkIHJlcGF0Y2hQdXRCeUlE
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYg
c2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCiB7CiAg
ICAgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoZXhlYy0+Y29kZUJsb2NrKCktPm1f
bG9jaywgZXhlYy0+dm0oKS5oZWFwKTsKICAgICAKLSAgICBpZiAodHJ5QnVpbGRQdXRCeUlkTGlz
dChleGVjLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5m
bywgcHV0S2luZCkgPT0gR2l2ZVVwT25DYWNoZSkKKyAgICBpZiAodHJ5Q2FjaGVQdXRCeUlEKGV4
ZWMsIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBw
dXRLaW5kKSA9PSBHaXZlVXBPbkNhY2hlKQogICAgICAgICByZXBhdGNoQ2FsbChleGVjLT5jb2Rl
QmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUdlbmVyaWNQ
dXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOwogfQogCkBAIC0xNDY2LDcgKzUwMiw4IEBA
IHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlSZXBhdGNoSW4oCiAgICAgfQogICAgIAogICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CisgICAgU2NyaXB0RXhlY3V0YWJsZSogb3duZXIgPSBjb2RlQmxvY2stPm93
bmVyU2NyaXB0RXhlY3V0YWJsZSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1cmUoKnZtKTsKICAgICAKICAgICBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CkBAIC0xNDgxLDkxICs1MTgsMTkg
QEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeVJlcGF0Y2hJbigKICAgICB9CiAgICAgaWYg
KCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsK
LSAgICAKLSAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3Ry
dWN0dXJlTGlzdDsKLSAgICBpbnQgbGlzdEluZGV4OwotICAgIAotICAgIENvZGVMb2NhdGlvbkxh
YmVsIHN1Y2Nlc3NMYWJlbCA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zm
c2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSk7Ci0gICAgQ29kZUxvY2F0aW9uTGFi
ZWwgc2xvd0Nhc2VMYWJlbDsKLSAgICAKLSAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBh
Y2Nlc3NfdW5zZXQpIHsKLSAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBv
bHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCgpOwotICAgICAgICBzdHViSW5mby5pbml0SW5M
aXN0KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgMCk7Ci0gICAgICAgIHNsb3dDYXNlTGFiZWwg
PSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgKLSAgICAgICAgICAg
IHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpOwotICAgICAgICBsaXN0SW5kZXgg
PSAwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmFjY2Vz
c1R5cGUgPT0gYWNjZXNzX2luX2xpc3QpOwotICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxp
c3QgPSBzdHViSW5mby51LmluTGlzdC5zdHJ1Y3R1cmVMaXN0OwotICAgICAgICBsaXN0SW5kZXgg
PSBzdHViSW5mby51LmluTGlzdC5saXN0U2l6ZTsKLSAgICAgICAgc2xvd0Nhc2VMYWJlbCA9IENv
ZGVMb2NhdGlvbkxhYmVsKHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXgg
LSAxXS5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAo
bGlzdEluZGV4ID09IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSkKLSAgICAgICAgICAgIHJl
dHVybiBHaXZlVXBPbkNhY2hlOwotICAgIH0KLSAgICAKLSAgICBSZWZQdHI8SklUU3R1YlJvdXRp
bmU+IHN0dWJSb3V0aW5lOwotICAgIAotICAgIHsKLSAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBz
dGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmJhc2VHUFIpOwotICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZUdQ
Uik7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gVGVtcFJlZ2lzdGVyU2V0KHN0dWJJbmZv
LnBhdGNoLnVzZWRSZWdpc3RlcnMpLmdldEZyZWVHUFIoKTsKLSAgICAgICAgCi0gICAgICAgIEND
YWxsSGVscGVycyBzdHViSml0KHZtKTsKLSAgICAgICAgCi0gICAgICAgIGJvb2wgbmVlZFRvUmVz
dG9yZVNjcmF0Y2g7Ci0gICAgICAgIGlmIChzY3JhdGNoR1BSID09IEludmFsaWRHUFJSZWcpIHsK
LSAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hH
UFIoYmFzZUdQUiwgcmVzdWx0R1BSKTsKLSAgICAgICAgICAgIHN0dWJKaXQucHVzaFRvU2F2ZShz
Y3JhdGNoR1BSKTsKLSAgICAgICAgICAgIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gdHJ1ZTsKLSAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IGZhbHNlOwot
ICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsK
LSAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFN0cnVjdHVyZSgKLSAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKLSAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCi0g
ICAgICAgICAgICBzdHJ1Y3R1cmUpKTsKLQotICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgICAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5mbygpLm5l
d0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygpKQotICAgICAgICAgICAgdm0tPnJlZ2lz
dGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KGlkZW50LCBzdHViSW5mby5hZGRXYXRjaHBv
aW50KGNvZGVCbG9jaykpOwogCi0gICAgICAgIGlmIChzbG90LndhdGNocG9pbnRTZXQoKSkKLSAg
ICAgICAgICAgIHNsb3Qud2F0Y2hwb2ludFNldCgpLT5hZGQoc3R1YkluZm8uYWRkV2F0Y2hwb2lu
dChjb2RlQmxvY2spKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gbmV3Q2FzZSA9
IEFjY2Vzc0Nhc2U6OmluKAorICAgICAgICB2bSwgb3duZXIsIHdhc0ZvdW5kID8gQWNjZXNzQ2Fz
ZTo6SW5IaXQgOiBBY2Nlc3NDYXNlOkluTWlzcywgc3RydWN0dXJlLCBjb25kaXRpb25TZXQpOwog
Ci0gICAgICAgIGNoZWNrT2JqZWN0UHJvcGVydHlDb25kaXRpb25zKAotICAgICAgICAgICAgY29u
ZGl0aW9uU2V0LCBleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8sIHN0dWJKaXQsIGZhaWx1cmVD
YXNlcywgc2NyYXRjaEdQUik7Ci0gICAgICAgIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAg
IHN0dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29k
ZShqc0Jvb2xlYW4od2FzRm91bmQpKSksIHJlc3VsdEdQUik7Ci0jZWxzZQotICAgICAgICBzdHVi
Sml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih3YXNGb3VuZCksIHJlc3VsdEdQ
Uik7Ci0jZW5kaWYKLSAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nl
c3MsIGZhaWw7Ci0gICAgICAgIAotICAgICAgICBlbWl0UmVzdG9yZVNjcmF0Y2goc3R1YkppdCwg
bmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHNjcmF0Y2hHUFIsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVD
YXNlcyk7Ci0gICAgICAgIAotICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgc3R1
YkppdCwgZXhlYy0+Y29kZUJsb2NrKCksIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7Ci0gICAgICAg
IGlmIChwYXRjaEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKQotICAgICAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgIAotICAgICAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0
Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2Fz
ZXMsIHN1Y2Nlc3NMYWJlbCwgc2xvd0Nhc2VMYWJlbCk7Ci0gICAgICAgIAotICAgICAgICBzdHVi
Um91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAgICAgICBleGVjLT5jb2Rl
QmxvY2soKSwgcGF0Y2hCdWZmZXIsCi0gICAgICAgICAgICAoIkluIChmb3VuZCA9ICVzKSBzdHVi
IGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAgICAgICAgICAgICB3YXNGb3VuZCA/ICJ5
ZXMiIDogIm5vIiwgdG9DU3RyaW5nKCpleGVjLT5jb2RlQmxvY2soKSkuZGF0YSgpLAotICAgICAg
ICAgICAgICAgIHN1Y2Nlc3NMYWJlbC5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgfQotICAg
IAotICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNldCgqdm0s
IGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIHRy
dWUpOwotICAgIHN0dWJJbmZvLnUuaW5MaXN0Lmxpc3RTaXplKys7Ci0gICAgCi0gICAgTWFjcm9B
c3NlbWJsZXI6OnJlcGF0Y2hKdW1wKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRP
ZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwgQ29kZUxvY2F0aW9uTGFiZWwo
c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIg
Y29kZVB0ciA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobmV3Q2FzZSk7CisgICAgaWYgKCFjb2Rl
UHRyKQorICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgIE1hY3JvQXNzZW1ibGVy
OjpyZXBhdGNoSnVtcCgKKyAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBB
dE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1bXApLAorICAgICAgICBDb2RlTG9j
YXRpb25MYWJlbChjb2RlUHRyKSk7CiAgICAgCi0gICAgcmV0dXJuIGxpc3RJbmRleCA8IChQT0xZ
TU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUgLSAxKSA/IFJldHJ5Q2FjaGVMYXRlciA6IEdpdmVVcE9u
Q2FjaGU7CisgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKIH0KIAogdm9pZCByZXBhdGNoSW4o
CkBAIC0xOTExLDkgKzg3Niw4IEBAIHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbCgKICAgICAgICAg
Y2FsbExpbmtJbmZvLnJlbW92ZSgpOwogfQogCi12b2lkIHJlc2V0R2V0QnlJRChDb2RlQmxvY2sq
IGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQorc3RhdGljIHZvaWQgcmVz
ZXRHZXRCeUlEQ2hlY2tBbmRMb2FkKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKIHsKLSAg
ICByZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3Bl
cmF0aW9uR2V0QnlJZE9wdGltaXplKTsKICAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWwzMiBzdHJ1
Y3R1cmVMYWJlbCA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zm
c2V0KC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0Y2guZGVsdGFDaGVja0ltbVRvQ2FsbCk7CiAgICAg
aWYgKE1hY3JvQXNzZW1ibGVyOjpjYW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJyYW5jaDMyV2l0aFBh
dGNoKCkpIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJldmVydEp1bXBSZXBsYWNlbWVudFRv
UGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goCkBAIC0xOTMwLDI0ICs4OTQsMTcgQEAgdm9pZCBy
ZXNldEdldEJ5SUQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIAogICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoQ29tcGFjdChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29tcGFj
dEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUpLCAwKTsK
ICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENvbXBhY3Qoc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxU
b1BheWxvYWRMb2FkT3JTdG9yZSksIDApOwogI2VuZGlmCit9CisKK3ZvaWQgcmVzZXRHZXRCeUlE
KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7Cisg
ICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9w
ZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk7CisgICAgcmVzZXRHZXRCeUlEQ2hlY2tBbmRMb2FkKHN0
dWJJbmZvKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1bXAp
LCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRj
aC5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7CiB9CiAKLXZvaWQgcmVzZXRQdXRCeUlEKENvZGVCbG9j
ayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCitzdGF0aWMgdm9pZCBy
ZXNldFB1dEJ5SURDaGVja0FuZExvYWQoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogewot
ICAgIFZfSklUT3BlcmF0aW9uX0VTc2lKSkkgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IGJpdHdpc2Vf
Y2FzdDxWX0pJVE9wZXJhdGlvbl9FU3NpSkpJPihyZWFkQ2FsbFRhcmdldChjb2RlQmxvY2ssIHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbikuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgVl9K
SVRPcGVyYXRpb25fRVNzaUpKSSBvcHRpbWl6ZWRGdW5jdGlvbjsKLSAgICBpZiAodW5vcHRpbWl6
ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rp
b24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdEJ1aWxkTGlzdCkKLSAgICAgICAgb3B0aW1pemVk
RnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7Ci0gICAgZWxzZSBpZiAo
dW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0IHx8IHVub3B0
aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdEJ1aWxkTGlzdCkKLSAg
ICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1p
emU7Ci0gICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0U3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERp
cmVjdFN0cmljdEJ1aWxkTGlzdCkKLSAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRp
b25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEFTU0VS
VCh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3Qg
fHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0
QnVpbGRMaXN0KTsKLSAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7Ci0gICAgfQotICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9j
aywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcHRpbWl6ZWRGdW5jdGlvbik7CiAgICAg
Q29kZUxvY2F0aW9uRGF0YUxhYmVsMzIgc3RydWN0dXJlTGFiZWwgPSBzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldCgtKGludHB0cl90KXN0dWJJbmZvLnBhdGNo
LmRlbHRhQ2hlY2tJbW1Ub0NhbGwpOwogICAgIGlmIChNYWNyb0Fzc2VtYmxlcjo6Y2FuSnVtcFJl
cGxhY2VQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaCgpKSB7CiAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpyZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKApA
QCAtMTk2NCw2ICs5MjEsMjQgQEAgdm9pZCByZXNldFB1dEJ5SUQoQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIAogICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIoc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9U
YWdMb2FkT3JTdG9yZSksIDApOwogICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIoc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0
Y2guZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUpLCAwKTsKICNlbmRpZgorfQorCit2b2lk
IHJlc2V0UHV0QnlJRChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvKQoreworICAgIFZfSklUT3BlcmF0aW9uX0VTc2lKSkkgdW5vcHRpbWl6ZWRGdW5jdGlv
biA9IGJpdHdpc2VfY2FzdDxWX0pJVE9wZXJhdGlvbl9FU3NpSkpJPihyZWFkQ2FsbFRhcmdldChj
b2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbikuZXhlY3V0YWJsZUFkZHJlc3Mo
KSk7CisgICAgVl9KSVRPcGVyYXRpb25fRVNzaUpKSSBvcHRpbWl6ZWRGdW5jdGlvbjsKKyAgICBp
ZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0KQorICAgICAg
ICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKKyAg
ICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJp
Y3QpCisgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmlj
dE9wdGltaXplOworICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9u
UHV0QnlJZERpcmVjdFN0cmljdCkKKyAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRp
b25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VS
VCh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3Qp
OworICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25T
dHJpY3RPcHRpbWl6ZTsKKyAgICB9CisgICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24sIG9wdGltaXplZEZ1bmN0aW9uKTsKKyAgICByZXNldFB1dEJ5
SURDaGVja0FuZExvYWQoc3R1YkluZm8pOwogICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVt
cChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNo
LmRlbHRhQ2FsbFRvSnVtcCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zm
c2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yLmNwcAkocmV2aXNpb24gMTg5MzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9T
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw4
IEBAIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6flNjcmF0Y2hSZWdpc3QKIAogdm9pZCBTY3Jh
dGNoUmVnaXN0ZXJBbGxvY2F0b3I6OmxvY2soR1BSUmVnIHJlZykKIHsKKyAgICBpZiAocmVnID09
IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybjsKICAgICB1bnNpZ25lZCBpbmRleCA9IEdQ
UkluZm86OnRvSW5kZXgocmVnKTsKICAgICBpZiAoaW5kZXggPT0gR1BSSW5mbzo6SW52YWxpZElu
ZGV4KQogICAgICAgICByZXR1cm47CkBAIC01MiwxMiArNTQsMjAgQEAgdm9pZCBTY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3I6OmxvY2soR1BSUgogCiB2b2lkIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
cjo6bG9jayhGUFJSZWcgcmVnKQogeworICAgIGlmIChyZWcgPT0gSW52YWxpZEZQUlJlZykKKyAg
ICAgICAgcmV0dXJuOwogICAgIHVuc2lnbmVkIGluZGV4ID0gRlBSSW5mbzo6dG9JbmRleChyZWcp
OwogICAgIGlmIChpbmRleCA9PSBGUFJJbmZvOjpJbnZhbGlkSW5kZXgpCiAgICAgICAgIHJldHVy
bjsKICAgICBtX2xvY2tlZFJlZ2lzdGVycy5zZXRGUFJCeUluZGV4KGluZGV4KTsKIH0KIAordm9p
ZCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OmxvY2soSlNWYWx1ZVJlZ3MgcmVncykKK3sKKyAg
ICBsb2NrKHJlZ3MudGFnR1BSKCkpOworICAgIGxvY2socmVncy5wYXlsb2FkR1BSKCkpOworfQor
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rSW5mbz4KIHR5cGVuYW1lIEJhbmtJbmZvOjpSZWdpc3Rl
clR5cGUgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjphbGxvY2F0ZVNjcmF0Y2goKQogewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvci5oCShyZXZpc2lvbiAxODkzMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMSArNDAs
MTMgQEAgc3RydWN0IFNjcmF0Y2hCdWZmZXI7CiAKIGNsYXNzIFNjcmF0Y2hSZWdpc3RlckFsbG9j
YXRvciB7CiBwdWJsaWM6CisgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yKCkgeyB9CiAgICAg
U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yKGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJz
KTsKICAgICB+U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yKCk7CiAKLSAgICB2b2lkIGxvY2soR1BS
UmVnIHJlZyk7Ci0gICAgdm9pZCBsb2NrKEZQUlJlZyByZWcpOworICAgIHZvaWQgbG9jayhHUFJS
ZWcpOworICAgIHZvaWQgbG9jayhGUFJSZWcpOworICAgIHZvaWQgbG9jayhKU1ZhbHVlUmVncyk7
CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmFua0luZm8+CiAgICAgdHlwZW5hbWUgQmFu
a0luZm86OlJlZ2lzdGVyVHlwZSBhbGxvY2F0ZVNjcmF0Y2goKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260769</attachid>
            <date>2015-09-08 10:39:25 -0700</date>
            <delta_ts>2015-09-08 11:32:52 -0700</delta_ts>
            <desc>rebased</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>206830</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODk0OTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzI0LDggKzMyNCw2IEBACiAJCTBGNDg1MzJBMTg3REZE
RUMwMDgzQjY4NyAvKiBGVExSZWNvdmVyeU9wY29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0ODUzMjYxODdERkRFQzAwODNCNjg3IC8qIEZUTFJl
Y292ZXJ5T3Bjb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEY0OTNBRkExNkQwQ0FEMzAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDkzQUY4MTZE
MENBRDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi87IH07CiAJCTBGNEI5NERDMTdC
OUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0Qjk0REIxN0I5RjA3NTAwREQwM0E0IC8qIFR5
cGVkQXJyYXlJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKLQkJMEY0Q0VENUUxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJ
ZExpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY0Q0VENUMxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwICov
OyB9OwotCQkwRjRDRUQ1RjE4Q0VBN0FCMDA4MDJGRTAgLyogUG9seW1vcnBoaWNHZXRCeUlkTGlz
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0Q0VE
NUQxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJZExpc3QuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjRGMjlERjE4QjZBRDFD
MDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RjI5REQxOEI2
QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNw
cCAqLzsgfTsKIAkJMEY0RjI5RTAxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlv
bkNvdW50RXN0aW1hdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjRGMjlERTE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0
aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjUwQUYzQzE5M0U4QjM5MDA2NzRFRTggLyogREZHU3RydWN0
dXJlQ2xvYmJlclN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjUwQUYzQjE5M0U4QjM5MDA2NzRFRTggLyogREZHU3RydWN0dXJlQ2xvYmJlclN0
YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAg
LTQ3Myw4ICs0NzEsNiBAQAogCQkwRjlFMzI2NDFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVC
YXJyaWVySW5zZXJ0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGOUUzMjYyMUIwNUFCMDQwMDgwMUVENSAvKiBERkdTdG9yZUJhcnJpZXJJ
bnNlcnRpb25QaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGOUZCNEY0MTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUZC
NEYyMTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNlLmNwcCAqLzsgfTsKIAkJ
MEY5RkI0RjUxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUZCNEYzMTdGQ0I5MTcw
MENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEY5RkM4QzMxNEUxQjVGRTAwRDUyQUUwIC8qIFBv
bHltb3JwaGljUHV0QnlJZExpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY5RkM4QkYxNEUxQjVGQjAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0
QnlJZExpc3QuY3BwICovOyB9OwotCQkwRjlGQzhDNDE0RTFCNjAwMDBENTJBRTAgLyogUG9seW1v
cnBoaWNQdXRCeUlkTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY5RkM4QzAxNEUxQjVGQjAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExp
c3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjlGQzhDNTE0RTFCNjA0MDBENTJBRTAgLyogUHV0S2luZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RkM4QzExNEUxQjVGQjAwRDUyQUUwIC8qIFB1
dEtpbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRkEyQzE3QjE3RDdDRjg0MDA5RDAxNUYgLyogVGVzdFJ1bm5lclV0aWxzLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQTJDMTc5MTdEN0NGODQw
MDlEMDE1RiAvKiBUZXN0UnVubmVyVXRpbHMuY3BwICovOyB9OwogCQkwRkEyQzE3QzE3RDdDRjg0
MDA5RDAxNUYgLyogVGVzdFJ1bm5lclV0aWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkEyQzE3QTE3RDdDRjg0MDA5RDAxNUYgLyogVGVzdFJ1bm5l
clV0aWxzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
QEAgLTc0Miw2ICs3MzgsOCBAQAogCQkwRkY4QkRFQTFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJy
ZWRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkY4QkRFODFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5jcHAgKi87IH07CiAJ
CTBGRjhCREVCMUFENENGNzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY4QkRFOTFBRDRDRjcxMDBERkU4
ODQgLyogSW5mZXJyZWRWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGRjkyMkQ0MTRGNDZCNDEwMDQxQTI0RSAvKiBMTEludE9mZnNldHNF
eHRyYWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY0NjgwQTExNEJBN0Y4MjAwQkZFMjcyIC8qIExMSW50T2Zmc2V0c0V4dHJhY3Rvci5jcHAg
Ki87IH07CisJCTBGRjlDRTczMUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY5Q0U3
MTFCOUNENkQwMDA0RURDQTYgLyogUG9seW1vcnBoaWNBY2Nlc3MuY3BwICovOyB9OworCQkwRkY5
Q0U3NDFCOUNENkQwMDA0RURDQTYgLyogUG9seW1vcnBoaWNBY2Nlc3MuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjlDRTcyMUI5Q0Q2RDAwMDRFRENB
NiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGRkE1NDk3MTZCODgzNTAwMEIzQTk4MiAvKiBBNjRET3Bjb2Rl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MkEz
QTIyMTY1MUM2OTcwMEE4MEFGRSAvKiBBNjRET3Bjb2RlLmNwcCAqLzsgfTsKIAkJMEZGQTU0OTgx
NkI4ODM1MzAwQjNBOTgyIC8qIEE2NERPcGNvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MkEzQTIzMTY1MUM2OTcwMEE4MEFGRSAvKiBBNjRET3Bj
b2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEZGQjZDMzgxQUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5cGUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGQjZDMzYxQUY0OEREQzAwREIxQkY3
IC8qIFR5cGVvZlR5cGUuY3BwICovOyB9OwpAQCAtMjE1Niw4ICsyMTU0LDYgQEAKIAkJMEY0ODUz
MjYxODdERkRFQzAwODNCNjg3IC8qIEZUTFJlY292ZXJ5T3Bjb2RlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEZUTFJlY292ZXJ5T3Bjb2RlLmg7IHBhdGggPSBmdGwvRlRMUmVj
b3ZlcnlPcGNvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0OTNBRjgxNkQw
Q0FEMTAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNvdXJjZVByb3ZpZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY0Qjk0REIxN0I5RjA3NTAwREQwM0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVkQXJyYXlJbmxpbmVzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNENFRDVDMThDRUE3QUIwMDgwMkZFMCAvKiBQ
b2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFBvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkwRjRDRUQ1RDE4Q0VBN0FCMDA4MDJGRTAgLyogUG9seW1vcnBoaWNHZXRCeUlkTGlz
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb2x5bW9ycGhpY0dldEJ5SWRM
aXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEYyOUREMThCNkFEMUMwMDU3
QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVz
dGltYXRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3Rp
bWF0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRGMjlERTE4
QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU3RhdGljRXhlY3V0aW9uQ291
bnRFc3RpbWF0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdTdGF0aWNFeGVjdXRpb25Db3VudEVz
dGltYXRpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjUwQUYzQjE5
M0U4QjM5MDA2NzRFRTggLyogREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oOyBwYXRoID0g
ZGZnL0RGR1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjMwMyw4ICsyMjk5LDYgQEAKIAkJMEY5RTMyNjIxQjA1QUIwNDAwODAxRUQ1IC8qIERG
R1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHU3Rv
cmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY5RkI0RjIxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RhY2tMYXlvdXRQaGFzZS5jcHA7
IHBhdGggPSBkZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGOUZCNEYzMTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1N0YWNrTGF5b3V0UGhhc2Uu
aDsgcGF0aCA9IGRmZy9ERkdTdGFja0xheW91dFBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTBGOUZDOEJGMTRFMUI1RkIwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRM
aXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBvbHltb3JwaGlj
UHV0QnlJZExpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjlGQzhDMDE0
RTFCNUZCMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGOUZDOEMxMTRFMUI1RkIwMEQ1MkFFMCAvKiBQdXRLaW5kLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1dEtpbmQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZBMkMxNzkxN0Q3Q0Y4NDAwOUQwMTVGIC8qIFRlc3RSdW5uZXJV
dGlscy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXN0UnVubmVy
VXRpbHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkEyQzE3QTE3RDdDRjg0
MDA5RDAxNUYgLyogVGVzdFJ1bm5lclV0aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFRlc3RSdW5uZXJVdGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MjU3OSw2ICsyNTczLDggQEAKIAkJMEZGOEJERTgxQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVk
VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5mZXJyZWRW
YWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjhCREU5MUFENENGNzEw
MERGRTg4NCAvKiBJbmZlcnJlZFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEluZmVycmVkVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGOTIy
Q0YxNEY0NkIxMzAwNDFBMjRFIC8qIEpTQ0xMSW50T2Zmc2V0c0V4dHJhY3RvciAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5l
eGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gSlNDTExJbnRPZmZzZXRzRXh0
cmFjdG9yOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQkwRkY5Q0U3MTFC
OUNENkQwMDA0RURDQTYgLyogUG9seW1vcnBoaWNBY2Nlc3MuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUG9seW1vcnBoaWNBY2Nlc3MuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkY5Q0U3MjFCOUNENkQwMDA0RURDQTYgLyogUG9seW1vcnBoaWNB
Y2Nlc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9seW1vcnBoaWNBY2Nl
c3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQjZDMzYxQUY0OEREQzAwREIx
QkY3IC8qIFR5cGVvZlR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gVHlwZW9mVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRkI2QzM3
MUFGNDhEREMwMERCMUJGNyAvKiBUeXBlb2ZUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFR5cGVvZlR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZG
Qzk5RDAxODRFQzhBRDAwOUMxMEFCIC8qIENvbnN0YW50TW9kZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDb25zdGFudE1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTU2MDIsMTEgKzU1OTgsOSBAQAogCQkJCTk2OUEwNzk1MEVEMUQzQUUwMEYxRjY4MSAv
KiBPcGNvZGUuaCAqLywKIAkJCQkwRjJCREMyQjE1MUZERThCMDBDRDg5MTAgLyogT3BlcmFuZHMu
aCAqLywKIAkJCQlBNzA0NDdFOTE3QTBCRDQ2MDBGNTg5OEUgLyogT3BlcmFuZHNJbmxpbmVzLmgg
Ki8sCisJCQkJMEZGOUNFNzExQjlDRDZEMDAwNEVEQ0E2IC8qIFBvbHltb3JwaGljQWNjZXNzLmNw
cCAqLywKKwkJCQkwRkY5Q0U3MjFCOUNENkQwMDA0RURDQTYgLyogUG9seW1vcnBoaWNBY2Nlc3Mu
aCAqLywKIAkJCQkwRjM0QjE0QjE2RDQzRTBDMDAxQ0RBNUEgLyogUG9seW1vcnBoaWNBY2Nlc3NT
dHJ1Y3R1cmVMaXN0LmggKi8sCi0JCQkJMEY0Q0VENUMxOENFQTdBQjAwODAyRkUwIC8qIFBvbHlt
b3JwaGljR2V0QnlJZExpc3QuY3BwICovLAotCQkJCTBGNENFRDVEMThDRUE3QUIwMDgwMkZFMCAv
KiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmggKi8sCi0JCQkJMEY5RkM4QkYxNEUxQjVGQjAwRDUy
QUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwICovLAotCQkJCTBGOUZDOEMwMTRFMUI1
RkIwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmggKi8sCiAJCQkJMEY5ODIwNUQx
NkJGRTM3RjAwMjQwRDAyIC8qIFByZWNpc2VKdW1wVGFyZ2V0cy5jcHAgKi8sCiAJCQkJMEY5ODIw
NUUxNkJGRTM3RjAwMjQwRDAyIC8qIFByZWNpc2VKdW1wVGFyZ2V0cy5oICovLAogCQkJCTBGRDNF
NDA3MUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgKi8sCkBAIC01NjM3
LDggKzU2MzEsOCBAQAogCQkJCTBGMkQ0REU3MTk4MzJEQUMwMDdENEIxOSAvKiBUeXBlTG9jYXRp
b24uaCAqLywKIAkJCQlBNzlFNzgxRTE1RUVDQkE4MDA0N0M4NTUgLyogVW5saW5rZWRDb2RlQmxv
Y2suY3BwICovLAogCQkJCUE3OUU3ODFGMTVFRUNCQTgwMDQ3Qzg1NSAvKiBVbmxpbmtlZENvZGVC
bG9jay5oICovLAotCQkJCTE0MTQyRTUwMUI3OTZFQ0UwMEY0QkY0QiAvKiBVbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZS5oICovLAogCQkJCTE0MTQyRTU0MUI3OTczQzAwMEY0QkY0QiAvKiBVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAgKi8sCisJCQkJMTQxNDJFNTAxQjc5NkVDRTAwRjRC
RjRCIC8qIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmggKi8sCiAJCQkJQjU5Rjg5MzgxODkx
QURCNTAwRDVDQ0RDIC8qIFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0uY3BwICovLAogCQkJCUI1
OUY4OTM3MTg5MUFEMzMwMEQ1Q0NEQyAvKiBVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtLmggKi8s
CiAJCQkJMEY5NjNCMzYxM0ZDNkZERTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5oICovLApAQCAt
NjIwMyw3ICs2MTk3LDYgQEAKIAkJCQkwRkMwOTc3MTE0NjkzQUY1MDBDRjI0NDIgLyogREZHT1NS
RXhpdENvbXBpbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjcwMjVBQTE3MTRCMEZDMDAzODJD
MEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVG
QzlBQjE2ODFBM0I2MDA1NjdGNTMgLyogREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJMEY0Q0VENUYxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0
QnlJZExpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkVFMTcxNzhFNzMwMDY5MEM3RiAv
KiBERkdPU1JFeGl0UHJlcGFyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkZDOTVDMTRF
RjkwQUYwMEM3MjUzMiAvKiBERkdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVFQTcwRUUx
OUY1QjVDNDAwOThGNUVDIC8qIEpTQ29udGV4dFJlZkluc3BlY3RvclN1cHBvcnQuaCBpbiBIZWFk
ZXJzICovLApAQCAtNjI1Miw2ICs2MjQ1LDcgQEAKIAkJCQk5OUU0NUEyNDE4QTFCMjU5MDAyNkQ4
OEYgLyogRW1wdHlJbnB1dEN1cnNvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQxNDJFNTMxQjc5
NkVERDAwRjRCRjRCIC8qIEV4ZWN1dGFibGVJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OUU0
NUEyNjE4QTFCMjU5MDAyNkQ4OEYgLyogRW5jb2RlZFZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRkY5Q0U3NDFCOUNENkQwMDA0RURDQTYgLyogUG9seW1vcnBoaWNBY2Nlc3MuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGNTg3NEVFMTk0RkVCMTIwMEFBQjJDMSAvKiBERkdNYXlFeGl0LmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzMwNDYwNzBFMUY0OTdGMDAzMjMyQ0YgLyogRXJyb3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDMDJFOTBEMEUxODM5REIwMDBGOTI5NyAvKiBFcnJvckNvbnN0cnVj
dG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTY2ODYsNyArNjY4MCw2IEBACiAJCQkJQTc3RjE4MjUx
NjQxOTJDNzAwNjQwQTQ3IC8qIFBhcnNlck1vZGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTMw
M0Q2NDE0NDdCOUUxMDBEM0Y5MDQgLyogUGFyc2VyVG9rZW5zLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjM0QjE0QzE2RDQzRTBEMDAxQ0RBNUEgLyogUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVM
aXN0LmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjlGQzhDNDE0RTFCNjAwMDBENTJBRTAgLyogUG9s
eW1vcnBoaWNQdXRCeUlkTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4RjE0MzQxQURGMDkw
MTAwRUQ3OTJDIC8qIERGR0Vwb2NoLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk4MjA2MTE2QkZF
MzgzMDAyNDBEMDIgLyogUHJlY2lzZUp1bXBUYXJnZXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjJERDgxNTFBQjNEOEJFMDBCQkI4RTggLyogREZHRm9yQWxsS2lsbHMuaCBpbiBIZWFkZXJzICov
LApAQCAtNzg0Nyw3ICs3ODQwLDYgQEAKIAkJCQkwRjBCODM5QzE0QkNGNDYzMDA4ODVCNEYgLyog
TExJbnRUaHVua3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDRUZBQ0QxODA1RTc1NTAwNDcy
Q0U0IC8qIExMVk1BUEkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdFNUFCMzcxNzk5RTRCMjAw
RDI4MzNEIC8qIExMVk1EaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEY0Q0VE
NUUxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTQ0NjlEREUxMDdFQzdFNzAwNjUwNDQ2IC8qIExvb2t1cC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjQ2ODBDQzE0QkJCMTdBMDBCRkUyNzIgLyogTG93TGV2ZWxJbnRlcnBy
ZXRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEI3MjNCMjEyRDdEQTQ2MDAzQkQ1RUQgLyog
TWFjaGluZVN0YWNrTWFya2VyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzg4OSw3ICs3ODgxLDYg
QEAKIAkJCQkwRkUyMjhFRTE0MzZBQjJDMDAxOTZDNDggLyogT3B0aW9ucy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNDhGMjFCQzEwN0VDNTREMDA0MkVDMkMgLyogUGFyc2VyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTkzMDUyQzM0MEZCNzkyMTkwMDQ4RkRDMyAvKiBQYXJzZXJBcmVuYS5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQkwRjlGQzhDMzE0RTFCNUZFMDBENTJBRTAgLyogUG9seW1vcnBo
aWNQdXRCeUlkTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjk4MjA2MDE2QkZFMzgxMDAy
NDBEMDIgLyogUHJlY2lzZUp1bXBUYXJnZXRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk1NzQy
RjY1MEREMTFGNUEwMDA5MTdGQiAvKiBQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
MkI5Q0Y4MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICov
LApAQCAtNzkwNiw2ICs3ODk3LDcgQEAKIAkJCQkwRjE5MENBQzE4OUQ4MkY2MDAwQUU1RjAgLyog
UHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlCMzE2
NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJPcmlnaW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZGNzI5QjQxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2luU3RhY2suY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMEZGOUNFNzMxQjlDRDZEMDAwNEVEQ0E2IC8qIFBvbHltb3JwaGljQWNj
ZXNzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjEwNThCMTY3NTQ4MzEwMEY4QUI2RSAvKiBQ
cm9maWxlck9TUkV4aXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMTA1OEQxNjc1NDgzNzAw
RjhBQjZFIC8qIFByb2ZpbGVyT1NSRXhpdFNpdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYx
MzkxMkIxNjc3MUMzQTAwOUNDQjA3IC8qIFByb2ZpbGVyUHJvZmlsZWRCeXRlY29kZXMuY3BwIGlu
IFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJ
ZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0dldEJ5SWRTdGF0dXMuY3BwCShyZXZpc2lvbiAxODk0OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcg
KzMzLDcgQEAKICNpbmNsdWRlICJKU1Njb3BlLmgiCiAjaW5jbHVkZSAiTExJbnREYXRhLmgiCiAj
aW5jbHVkZSAiTG93TGV2ZWxJbnRlcnByZXRlci5oIgotI2luY2x1ZGUgIlBvbHltb3JwaGljR2V0
QnlJZExpc3QuaCIKKyNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgogI2luY2x1ZGUgPHd0
Zi9MaXN0RHVtcC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTEzOSwxMiArMTM5LDEyIEBAIEdl
dEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICBpZiAoIXN0dWJJbmZv
LT5zZWVuKQogICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKICAg
ICAKLSAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0ID0gMDsKKyAgICBQb2x5bW9ycGhp
Y0FjY2VzcyogbGlzdCA9IDA7CiAgICAgU3RhdGUgc2xvd1BhdGhTdGF0ZSA9IFRha2VzU2xvd1Bh
dGg7Ci0gICAgaWYgKHN0dWJJbmZvLT5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfbGlz
dCkgewotICAgICAgICBsaXN0ID0gc3R1YkluZm8tPnUuZ2V0QnlJZExpc3QubGlzdDsKKyAgICBp
ZiAoc3R1YkluZm8tPmNhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlN0dWIpIHsKKyAgICAgICAgbGlz
dCA9IHN0dWJJbmZvLT51LnN0dWI7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
aXN0LT5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgY29uc3QgR2V0QnlJZEFjY2VzcyYgYWNj
ZXNzID0gbGlzdC0+YXQoaSk7CisgICAgICAgICAgICBjb25zdCBBY2Nlc3NDYXNlJiBhY2Nlc3Mg
PSBsaXN0LT5hdChpKTsKICAgICAgICAgICAgIGlmIChhY2Nlc3MuZG9lc0NhbGxzKCkpCiAgICAg
ICAgICAgICAgICAgc2xvd1BhdGhTdGF0ZSA9IE1ha2VzQ2FsbHM7CiAgICAgICAgIH0KQEAgLTE1
NywxMiArMTU3LDEyIEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMK
ICAgICBHZXRCeUlkU3RhdHVzIHJlc3VsdDsKICAgICByZXN1bHQubV9zdGF0ZSA9IFNpbXBsZTsK
ICAgICByZXN1bHQubV93YXNTZWVuSW5KSVQgPSB0cnVlOyAvLyBUaGlzIGlzIGludGVyZXN0aW5n
IGZvciBieXRlY29kZSBkdW1waW5nIG9ubHkuCi0gICAgc3dpdGNoIChzdHViSW5mby0+YWNjZXNz
VHlwZSkgewotICAgIGNhc2UgYWNjZXNzX3Vuc2V0OgorICAgIHN3aXRjaCAoc3R1YkluZm8tPmNh
Y2hlVHlwZSkgeworICAgIGNhc2UgQ2FjaGVUeXBlOjpVbnNldDoKICAgICAgICAgcmV0dXJuIEdl
dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7CiAgICAgICAgIAotICAgIGNhc2UgYWNjZXNzX2dl
dF9ieV9pZF9zZWxmOiB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1YkluZm8t
PnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKTsKKyAgICBjYXNlIENhY2hl
VHlwZTo6R2V0QnlJZFNlbGY6IHsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHVi
SW5mby0+dS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpOwogICAgICAgICBpZiAo
c3RydWN0dXJlLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQogICAgICAg
ICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSwgdHJ1ZSk7CiAgICAgICAg
IHVuc2lnbmVkIGF0dHJpYnV0ZXNJZ25vcmVkOwpAQCAtMTc3LDEyICsxNzcsMTMgQEAgR2V0QnlJ
ZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3Q6IHsKKyAg
ICBjYXNlIENhY2hlVHlwZTo6U3R1YjogewogICAgICAgICBmb3IgKHVuc2lnbmVkIGxpc3RJbmRl
eCA9IDA7IGxpc3RJbmRleCA8IGxpc3QtPnNpemUoKTsgKytsaXN0SW5kZXgpIHsKLSAgICAgICAg
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbGlzdC0+YXQobGlzdEluZGV4KS5zdHJ1Y3R1cmUo
KTsKKyAgICAgICAgICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIGFjY2VzcyA9IGxpc3QtPmF0KGxpc3RJ
bmRleCk7CisgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFjY2Vzcy5zdHJ1Y3R1
cmUoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgQ29tcGxleEdldFN0YXR1cyBjb21wbGV4
R2V0U3RhdHVzID0gQ29tcGxleEdldFN0YXR1czo6Y29tcHV0ZUZvcigKLSAgICAgICAgICAgICAg
ICBzdHJ1Y3R1cmUsIGxpc3QtPmF0KGxpc3RJbmRleCkuY29uZGl0aW9uU2V0KCksIHVpZCk7Cisg
ICAgICAgICAgICAgICAgc3RydWN0dXJlLCBhY2Nlc3MuY29uZGl0aW9uU2V0KCksIHVpZCk7CiAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICBzd2l0Y2ggKGNvbXBsZXhHZXRTdGF0dXMua2luZCgp
KSB7CiAgICAgICAgICAgICBjYXNlIENvbXBsZXhHZXRTdGF0dXM6OlNob3VsZFNraXA6CkBAIC0x
OTMsMjkgKzE5NCwyMyBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JT
CiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpJ
bmxpbmVhYmxlOiB7CiAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3Rh
dHVzPiBjYWxsTGlua1N0YXR1czsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGxpc3QtPmF0KGxp
c3RJbmRleCkudHlwZSgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBHZXRCeUlkQWNjZXNzOjpT
aW1wbGVJbmxpbmU6Ci0gICAgICAgICAgICAgICAgY2FzZSBHZXRCeUlkQWNjZXNzOjpTaW1wbGVT
dHViOiB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChhY2Nlc3MudHlwZSgpKSB7CisgICAgICAg
ICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpMb2FkOiB7CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXNlIEdldEJ5SWRBY2Nl
c3M6OkdldHRlcjogewotICAgICAgICAgICAgICAgICAgICBBY2Nlc3NvckNhbGxKSVRTdHViUm91
dGluZSogc3R1YiA9IHN0YXRpY19jYXN0PEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lKj4oCi0g
ICAgICAgICAgICAgICAgICAgICAgICBsaXN0LT5hdChsaXN0SW5kZXgpLnN0dWJSb3V0aW5lKCkp
OworICAgICAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6R2V0dGVyOiB7CisgICAgICAgICAg
ICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gYWNjZXNzLmNhbGxMaW5rSW5m
bygpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoY2FsbExpbmtJbmZvKTsKICAgICAgICAg
ICAgICAgICAgICAgY2FsbExpbmtTdGF0dXMgPSBzdGQ6Om1ha2VfdW5pcXVlPENhbGxMaW5rU3Rh
dHVzPigKICAgICAgICAgICAgICAgICAgICAgICAgIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9y
KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tlciwgcHJvZmlsZWRCbG9jaywgKnN0
dWItPm1fY2FsbExpbmtJbmZvLCBjYWxsRXhpdFNpdGVEYXRhKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJsb2NrLCAqY2FsbExpbmtJbmZvLCBjYWxsRXhp
dFNpdGVEYXRhKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBjYXNlIEdldEJ5SWRBY2Nlc3M6OlNpbXBsZU1pc3M6Ci0gICAg
ICAgICAgICAgICAgY2FzZSBHZXRCeUlkQWNjZXNzOjpDdXN0b21HZXR0ZXI6Ci0gICAgICAgICAg
ICAgICAgY2FzZSBHZXRCeUlkQWNjZXNzOjpXYXRjaGVkU3R1Yjp7Ci0gICAgICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSB0b3RhbGx5IHN3ZWV0IHRvIHN1cHBvcnQgdGhpcyBh
dCBzb21lIHBvaW50IGluIHRoZSBmdXR1cmUuCi0gICAgICAgICAgICAgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzMwNTIKKyAgICAgICAgICAgICAg
ICBkZWZhdWx0OiB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSB0
b3RhbGx5IHN3ZWV0IHRvIHN1cHBvcnQgbW9yZSBvZiB0aGVzZSBhdCBzb21lIHBvaW50IGluIHRo
ZQorICAgICAgICAgICAgICAgICAgICAvLyBmdXR1cmUuIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzMwNTIKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5
SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gfQogICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBHZXRCeUlkVmFyaWFudCB2YXJpYW50KAog
ICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSwgY29tcGxleEdldFN0
YXR1cy5vZmZzZXQoKSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNpb24gMTg5MzI0KQkoZnJvbSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHA6MTg5
MzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oIgorCisjaWYgRU5BQkxFKEpJVCkKKwor
I2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkhlYXAuaCIKKyNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK0dldEJ5SWRBY2Nlc3M6OkdldEJ5SWRBY2Nlc3MoCisgICAgVk0mIHZtLCBKU0NlbGwq
IG93bmVyLCBBY2Nlc3NUeXBlIHR5cGUsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJS
b3V0aW5lLAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYgY29uZGl0aW9uU2V0KQorICAgIDogbV90eXBlKHR5cGUpCisgICAgLCBtX3N0
cnVjdHVyZSh2bSwgb3duZXIsIHN0cnVjdHVyZSkKKyAgICAsIG1fY29uZGl0aW9uU2V0KGNvbmRp
dGlvblNldCkKKyAgICAsIG1fc3R1YlJvdXRpbmUoc3R1YlJvdXRpbmUpCit7Cit9CisKK0dldEJ5
SWRBY2Nlc3M6On5HZXRCeUlkQWNjZXNzKCkKK3sKK30KKworR2V0QnlJZEFjY2VzcyBHZXRCeUlk
QWNjZXNzOjpmcm9tU3RydWN0dXJlU3R1YkluZm8oU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
KQoreworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBpbml0aWFsU2xvd1BhdGggPQorICAgICAg
ICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRj
aC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKKyAgICAKKyAgICBHZXRCeUlkQWNjZXNzIHJlc3VsdDsK
KyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19n
ZXRfYnlfaWRfc2VsZik7CisgICAgCisgICAgcmVzdWx0Lm1fdHlwZSA9IFNpbXBsZUlubGluZTsK
KyAgICByZXN1bHQubV9zdHJ1Y3R1cmUuY29weUZyb20oc3R1YkluZm8udS5nZXRCeUlkU2VsZi5i
YXNlT2JqZWN0U3RydWN0dXJlKTsKKyAgICByZXN1bHQubV9zdHViUm91dGluZSA9IEpJVFN0dWJS
b3V0aW5lOjpjcmVhdGVTZWxmTWFuYWdlZFJvdXRpbmUoaW5pdGlhbFNsb3dQYXRoKTsKKyAgICAK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIEdldEJ5SWRBY2Nlc3M6OnZpc2l0V2VhayhW
TSYgdm0pIGNvbnN0Cit7CisgICAgaWYgKG1fc3RydWN0dXJlICYmICFIZWFwOjppc01hcmtlZCht
X3N0cnVjdHVyZS5nZXQoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW1fY29u
ZGl0aW9uU2V0LmFyZVN0aWxsTGl2ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KCFtX3N0dWJSb3V0aW5lLT52aXNpdFdlYWsodm0pKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK1BvbHltb3JwaGljR2V0QnlJZExpc3Q6OlBvbHltb3JwaGlj
R2V0QnlJZExpc3QoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIGlmIChzdHVi
SW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc191bnNldCkKKyAgICAgICAgcmV0dXJuOworICAgIAor
ICAgIG1fbGlzdC5hcHBlbmQoR2V0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKHN0
dWJJbmZvKSk7Cit9CisKK1BvbHltb3JwaGljR2V0QnlJZExpc3QqIFBvbHltb3JwaGljR2V0QnlJ
ZExpc3Q6OmZyb20oU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIGlmIChzdHVi
SW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfbGlzdCkKKyAgICAgICAgcmV0dXJu
IHN0dWJJbmZvLnUuZ2V0QnlJZExpc3QubGlzdDsKKyAgICAKKyAgICBBU1NFUlQoCisgICAgICAg
IHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmCisgICAgICAgIHx8
IHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0KTsKKyAgICAKKyAgICBQb2x5bW9y
cGhpY0dldEJ5SWRMaXN0KiByZXN1bHQgPSBuZXcgUG9seW1vcnBoaWNHZXRCeUlkTGlzdChzdHVi
SW5mbyk7CisgICAgCisgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRMaXN0KHJlc3VsdCk7CisgICAg
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6flBvbHlt
b3JwaGljR2V0QnlJZExpc3QoKSB7IH0KKworTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIFBvbHltb3Jw
aGljR2V0QnlJZExpc3Q6OmN1cnJlbnRTbG93UGF0aFRhcmdldCgKKyAgICBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8pIGNvbnN0Cit7CisgICAgaWYgKGlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBh
dGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpOworICAgIHJldHVybiBtX2xpc3QubGFzdCgpLnN0dWJS
b3V0aW5lKCktPmNvZGUoKS5jb2RlKCk7Cit9CisKK3ZvaWQgUG9seW1vcnBoaWNHZXRCeUlkTGlz
dDo6YWRkQWNjZXNzKGNvbnN0IEdldEJ5SWRBY2Nlc3MmIGFjY2VzcykKK3sKKyAgICBBU1NFUlQo
IWlzRnVsbCgpKTsKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgcmVzaXppbmcgb3B0aW1pemVz
IGZvciBzcGFjZSwgbm90IHRpbWUuCisgICAgbV9saXN0LnJlc2l6ZVRvRml0KG1fbGlzdC5zaXpl
KCkgKyAxKTsKKyAgICBtX2xpc3QubGFzdCgpID0gYWNjZXNzOworfQorCitib29sIFBvbHltb3Jw
aGljR2V0QnlJZExpc3Q6OmlzRnVsbCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKHNpemUoKSA8PSBQ
T0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpOworICAgIHJldHVybiBzaXplKCkgPT0gUE9MWU1P
UlBISUNfTElTVF9DQUNIRV9TSVpFOworfQorCitib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6
OmlzQWxtb3N0RnVsbCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKHNpemUoKSA8PSBQT0xZTU9SUEhJ
Q19MSVNUX0NBQ0hFX1NJWkUpOworICAgIHJldHVybiBzaXplKCkgPj0gUE9MWU1PUlBISUNfTElT
VF9DQUNIRV9TSVpFIC0gMTsKK30KKworYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpkaWRT
ZWxmUGF0Y2hpbmcoKSBjb25zdAoreworICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUoKTsgaS0t
OykgeworICAgICAgICBpZiAoYXQoaSkudHlwZSgpID09IEdldEJ5SWRBY2Nlc3M6OlNpbXBsZUlu
bGluZSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2Jvb2wgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6dmlzaXRXZWFrKFZNJiB2bSkgY29u
c3QKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXplKCk7IGktLTspIHsKKyAgICAgICAgaWYg
KCFhdChpKS52aXNpdFdlYWsodm0pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBF
TkFCTEUoSklUKQorCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjQsMTMxICsyNCwxMDc3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlBvbHltb3JwaGljR2V0QnlJZExpc3QuaCIKKyNpbmNsdWRlICJQb2x5bW9ycGhpY0Fj
Y2Vzcy5oIgogCiAjaWYgRU5BQkxFKEpJVCkKIAorI2luY2x1ZGUgIkJpbmFyeVN3aXRjaC5oIgog
I2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKKyNpbmNsdWRlIDx3dGYv
Q29tbWFQcmludGVyLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCi1HZXRCeUlkQWNjZXNzOjpHZXRC
eUlkQWNjZXNzKAotICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBQ
YXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSwKLSAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkK
LSAgICA6IG1fdHlwZSh0eXBlKQotICAgICwgbV9zdHJ1Y3R1cmUodm0sIG93bmVyLCBzdHJ1Y3R1
cmUpCi0gICAgLCBtX2NvbmRpdGlvblNldChjb25kaXRpb25TZXQpCi0gICAgLCBtX3N0dWJSb3V0
aW5lKHN0dWJSb3V0aW5lKQorc3RydWN0IEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSB7CisgICAgQ0Nh
bGxIZWxwZXJzKiBqaXQgeyBudWxscHRyIH07CisgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
KiBhbGxvY2F0b3I7CisgICAgc2l6ZV90IG51bWJlck9mUGFkZGluZ0J5dGVzIHsgMCB9OworICAg
IFBvbHltb3JwaGljQWNjZXNzKiBhY2Nlc3MgeyBudWxscHRyIH07CisgICAgU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvIHsgbnVsbHB0ciB9OworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
c3VjY2VzczsKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGZhaWxBbmRSZXBhdGNoOworICAg
IENDYWxsSGVscGVyczo6SnVtcExpc3QgZmFpbEFuZElnbm9yZTsKKyAgICBHUFJSZWcgYmFzZUdQ
UiB7IEludmFsaWRHUFJSZWcgfTsKKyAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3M7CisgICAgR1BS
UmVnIHNjcmF0Y2hHUFIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgYm9vbCBuZWVkVG9SZXN0b3Jl
U2NyYXRjaCB7IGZhbHNlIH07CisgICAgVmVjdG9yPHN0ZDo6ZnVuY3Rpb248dm9pZChMaW5rQnVm
ZmVyJik+IGNhbGxiYWNrczsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudDsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvPiB3YXRjaHBvaW50czsK
KworICAgIHZvaWQgYWRkV2F0Y2hwb2ludChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYg
Y29uZGl0aW9uID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb24oKSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBXYXRjaHBvaW50T25TdHJ1Y3R1cmVTdHViSW5mbzo6ZW5zdXJlUmVmZXJlbmNlQW5kQWRk
V2F0Y2hwb2ludCgKKyAgICAgICAgICAgIHdhdGNocG9pbnRzLCBqaXQtPmNvZGVCbG9jaygpLCBz
dHViSW5mbywgY29uZGl0aW9uKTsKKyAgICB9CisKKyAgICB2b2lkIHJlc3RvcmVTY3JhdGNoKCkK
KyAgICB7CisgICAgICAgIGFsbG9jYXRvci0+cmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGlu
Zygqaml0LCBudW1iZXJPZlBhZGRpbmdCeXRlcyk7CisgICAgfQorCisgICAgdm9pZCBzdWNjZWVk
KCkKKyAgICB7CisgICAgICAgIHJlc3RvcmVTY3JhdGNoKCk7CisgICAgICAgIHN1Y2Nlc3MuYXBw
ZW5kKGppdC0+anVtcCgpKTsKKyAgICB9Cit9OworCitBY2Nlc3NDYXNlOjpBY2Nlc3NDYXNlKCkK
IHsKIH0KIAotR2V0QnlJZEFjY2Vzczo6fkdldEJ5SWRBY2Nlc3MoKQorc3RkOjp1bmlxdWVfcHRy
PEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OmdldCgKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIs
IEFjY2Vzc1R5cGUgdHlwZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBib29sIHZpYVByb3h5LCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCYgY29uZGl0aW9uU2V0LCBXYXRjaHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0LAorICAgIFByb3Bl
cnR5U2xvdDo6R2V0VmFsdWVGdW5jIGN1c3RvbUdldHRlcikKIHsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8QWNjZXNzQ2FzZT4gcmVzdWx0KG5ldyBBY2Nlc3NDYXNlKCkpOworCisgICAgcmVzdWx0LT5t
X3R5cGUgPSB0eXBlOworICAgIHJlc3VsdC0+bV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgcmVzdWx0
LT5tX3N0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOworICAgIHJlc3VsdC0+bV9j
b25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7CisgICAgCisgICAgaWYgKHZpYVByb3h5IHx8IGFk
ZGl0aW9uYWxTZXQgfHwgZG9lc0NhbGxzKCkgfHwgY3VzdG9tR2V0dGVyKSB7CisgICAgICAgIHJl
c3VsdC0+bV9yYXJlRGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8UmFyZURhdGE+KCk7CisgICAgICAg
IHJlc3VsdC0+bV9yYXJlRGF0YS0+dmlhUHJveHkgPSB2aWFQcm94eTsKKyAgICAgICAgcmVzdWx0
LT5tX3JhcmVEYXRhLT5hZGRpdGlvbmFsU2V0ID0gYWRkaXRpb25hbFNldDsKKyAgICAgICAgcmVz
dWx0LT5tX3JhcmVEYXRhLT5jdXN0b21BY2Nlc3Nvci5nZXR0ZXIgPSBjdXN0b21HZXR0ZXI7Cisg
ICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotR2V0QnlJZEFjY2VzcyBHZXRCeUlkQWNj
ZXNzOjpmcm9tU3RydWN0dXJlU3R1YkluZm8oU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQor
c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OnJlcGxhY2UoCisgICAgVk0m
IHZtLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KQogewotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBpbml0aWFsU2xvd1BhdGggPQot
ICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5m
by5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKLSAgICAKLSAgICBHZXRCeUlkQWNjZXNzIHJl
c3VsdDsKLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFj
Y2Vzc19nZXRfYnlfaWRfc2VsZik7Ci0gICAgCi0gICAgcmVzdWx0Lm1fdHlwZSA9IFNpbXBsZUlu
bGluZTsKLSAgICByZXN1bHQubV9zdHJ1Y3R1cmUuY29weUZyb20oc3R1YkluZm8udS5nZXRCeUlk
U2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlKTsKLSAgICByZXN1bHQubV9zdHViUm91dGluZSA9IEpJ
VFN0dWJSb3V0aW5lOjpjcmVhdGVTZWxmTWFuYWdlZFJvdXRpbmUoaW5pdGlhbFNsb3dQYXRoKTsK
LSAgICAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gcmVzdWx0KG5ldyBBY2Nlc3ND
YXNlKCkpOworCisgICAgcmVzdWx0LT5tX3R5cGUgPSBSZXBsYWNlOworICAgIHJlc3VsdC0+bV9v
ZmZzZXQgPSBvZmZzZXQ7CisgICAgcmVzdWx0LT5tX3N0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBz
dHJ1Y3R1cmUpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RkOjp1bmlxdWVfcHRyPEFj
Y2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OnRyYW5zaXRpb24oCisgICAgVk0mIHZtLCBKU0NlbGwqIG93
bmVyLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCwKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCYgY29uZGl0aW9uU2V0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKG9sZFN0cnVjdHVyZSA9PSBu
ZXdTdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSk7CisKKyAgICAvLyBTa2lwIG9wdGltaXppbmcgdGhl
IGNhc2Ugd2hlcmUgd2UgbmVlZCBhIHJlYWxsb2MsIGlmIHdlIGRvbid0IGhhdmUKKyAgICAvLyBl
bm91Z2ggcmVnaXN0ZXJzIHRvIG1ha2UgaXQgaGFwcGVuLgorICAgIGlmIChHUFJJbmZvOjpudW1i
ZXJPZlJlZ2lzdGVycyA8IDYKKyAgICAgICAgJiYgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpICE9IG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKQorICAgICAgICAmJiBv
bGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorCisgICAgLy8gU2tpcCBvcHRpbWl6aW5nIHRoZSBjYXNlIHdoZXJlIHdlIG5l
ZWQgcmVhbGxvYywgYW5kIHRoZSBzdHJ1Y3R1cmUgaGFzCisgICAgLy8gaW5kZXhpbmcgc3RvcmFn
ZS4KKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IHNraXAgdGhpcyEgSW1wbGVtZW50IGl0IQor
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzA5MTQKKyAg
ICBpZiAob2xkU3RydWN0dXJlLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1bHQo
bmV3IEFjY2Vzc0Nhc2UoKSk7CisKKyAgICByZXN1bHQtPm1fdHlwZSA9IFRyYW5zaXRpb247Cisg
ICAgcmVzdWx0LT5tX29mZnNldCA9IG9mZnNldDsKKyAgICByZXN1bHQtPm1fc3RydWN0dXJlLnNl
dCh2bSwgb3duZXIsIG5ld1N0cnVjdHVyZSk7CisgICAgcmVzdWx0LT5tX2NvbmRpdGlvblNldCA9
IGNvbmRpdGlvblNldDsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0ZDo6dW5pcXVlX3B0
cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpzZXR0ZXIoCisgICAgVk0mIHZtLCBKU0NlbGwqIG93
bmVyLCBBY2Nlc3NUeXBlIHR5cGUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQsCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlv
blNldCwgUHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmMgY3VzdG9tU2V0dGVyKQoreworICAg
IHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nhc2UoKSk7CisK
KyAgICByZXN1bHQtPm1fdHlwZSA9IHR5cGU7CisgICAgcmVzdWx0LT5tX29mZnNldCA9IG9mZnNl
dDsKKyAgICByZXN1bHQtPm1fc3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7Cisg
ICAgcmVzdWx0LT5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKKworICAgIGlmIChjdXN0
b21TZXR0ZXIpIHsKKyAgICAgICAgcmVzdWx0LT5tX3JhcmVEYXRhID0gc3RkOjptYWtlX3VuaXF1
ZTxSYXJlRGF0YT4oKTsKKyAgICAgICAgcmVzdWx0LT5tX3JhcmVEYXRhLT5jdXN0b21BY2Nlc3Nv
ci5zZXR0ZXIgPSBjdXN0b21TZXR0ZXI7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kworc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OmluKAorICAgIFZNJiB2
bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwK
KyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KQorewor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nhc2UoKSk7
CisKKyAgICByZXN1bHQtPm1fdHlwZSA9IHR5cGU7CisgICAgcmVzdWx0LT5tX3N0cnVjdHVyZS5z
ZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOworICAgIHJlc3VsdC0+bV9jb25kaXRpb25TZXQgPSBj
b25kaXRpb25TZXQ7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGQ6OnVuaXF1ZV9wdHI8
QWNjZXNzVHlwZT4gQWNjZXNzQ2FzZTo6Z2V0TGVuZ3RoKFZNJiB2bSwgSlNDZWxsKiBvd25lciwg
QWNjZXNzVHlwZSB0eXBlKQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1
bHQobmV3IEFjY2Vzc0Nhc2UoKSk7CisKKyAgICByZXN1bHQtPm1fdHlwZSA9IHR5cGU7CisKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitBY2Nlc3NDYXNlOjp+QWNjZXNzQ2FzZSgpCit7Cit9CisK
K3N0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpmcm9tU3RydWN0dXJlU3R1
YkluZm8oCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8pCit7CisgICAgc3dpdGNoIChzdHViSW5mby5hY2Nlc3NUeXBlKSB7CisgICAgY2FzZSBh
Y2Nlc3NfZ2V0X2J5X2lkX3NlbGY6CisgICAgICAgIHJldHVybiBnZXQoCisgICAgICAgICAgICB2
bSwgb3duZXIsIExvYWQsIHN0dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0LCBzdHViSW5mby51LmJ5
SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUpOworCisgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lk
X3JlcGxhY2U6CisgICAgICAgIHJldHVybiByZXBsYWNlKHZtLCBvd25lciwgc3R1YkluZm8udS5i
eUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLCBzdHViSW5mby51LmJ5SWRTZWxmLm9mZnNldCk7
CisKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9Cit9CisKK3N0
ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpjbG9uZSgpCit7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHJlc3VsdChuZXcgQWNjZXNzQ2FzZSgpKTsKKyAgICBy
ZXN1bHQtPm1fdHlwZSA9IG1fdHlwZTsKKyAgICByZXN1bHQtPm1fb2Zmc2V0ID0gbV9vZmZzZXQ7
CisgICAgcmVzdWx0LT5tX3N0cnVjdHVyZSA9IG1fc3RydWN0dXJlOworICAgIHJlc3VsdC0+bV9j
b25kaXRpb25TZXQgPSBtX2NvbmRpdGlvblNldDsKKyAgICBpZiAoUmFyZURhdGEqIHJhcmVEYXRh
ID0gbV9yYXJlRGF0YS5nZXQoKSkgeworICAgICAgICByZXN1bHQtPm1fcmFyZURhdGEgPSBzdGQ6
Om1ha2VfdW5pcXVlPFJhcmVEYXRhPigpOworICAgICAgICByZXN1bHQtPm1fcmFyZURhdGEtPnZp
YVByb3h5ID0gcmFyZURhdGEtPnZpYVByb3h5OworICAgICAgICByZXN1bHQtPm1fcmFyZURhdGEt
PmFkZGl0aW9uYWxTZXQgPSByYXJlRGF0YS0+YWRkaXRpb25hbFNldDsKKyAgICAgICAgLy8gTk9U
RTogV2UgZG9uJ3QgY29weSB0aGUgY2FsbExpbmtJbmZvLCBzaW5jZSB0aGF0J3MgY3JlYXRlZCBk
dXJpbmcgY29kZSBnZW5lcmF0aW9uLgorICAgICAgICByZXN1bHQtPm1fcmFyZURhdGEtPmN1c3Rv
bUFjY2Vzc29yLm9wYXF1ZSA9IHJhcmVEYXRhLT5jdXN0b21BY2Nlc3Nvci5vcGFxdWU7CisgICAg
fQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWJvb2wgR2V0QnlJZEFjY2Vzczo6dmlzaXRXZWFr
KFZNJiB2bSkgY29uc3QKK2Jvb2wgQWNjZXNzQ2FzZTo6Z3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2so
KSBjb25zdAoreworICAgIGlmICh2aWFQcm94eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgQXJyYXlMZW5ndGg6CisgICAgY2FzZSBT
dHJpbmdMZW5ndGg6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkZWZhdWx0OgorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisKK2Jvb2wgQWNjZXNzQ2FzZTo6Y2FuUmVwbGFjZShj
b25zdCBBY2Nlc3NDYXNlJiBvdGhlcikKK3sKKyAgICAvLyBXZSBjb3VsZCBkbyBhIGxvdCBiZXR0
ZXIgaGVyZSwgYnV0IGZvciBub3cgd2UganVzdCBkbyBzb21ldGhpbmcgb2J2aW91cy4KKworICAg
IGlmICghZ3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2soKSB8fCAhb3RoZXIuZ3VhcmRlZEJ5U3RydWN0
dXJlQ2hlY2soKSkgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMhCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RydWN0dXJlKCkgPT0gb3RoZXIu
c3RydWN0dXJlKCk7Cit9CisKK3ZvaWQgQWNjZXNzQ2FzZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAoreworICAgIG91dC5wcmludCgKKyAgICAgICAgbV90eXBlLCAiOihzdHJ1Y3R1cmUg
PSAiLCBwb2ludGVyRHVtcChtX3N0cnVjdHVyZS5nZXQoKSksICIsIG9mZnNldCA9ICIsIG1fb2Zm
c2V0LAorICAgICAgICAiLCBjb25kaXRpb25zID0gIiwgbV9jb25kaXRpb25TZXQpOworCisgICAg
aWYgKFJhcmVEYXRhKiByYXJlRGF0YSA9IG1fcmFyZURhdGEuZ2V0KCkpIHsKKyAgICAgICAgb3V0
LnByaW50KAorICAgICAgICAgICAgIiwgdmlhUHJveHkgPSAiLCByYXJlRGF0YS0+dmlhUHJveHks
CisgICAgICAgICAgICAiLCBhZGRpdGlvbmFsU2V0ID0gIiwgUmF3UG9pbnRlcihyYXJlRGF0YS0+
YWRkaXRpb25hbFNldC5nZXQoKSksCisgICAgICAgICAgICAiLCBjYWxsTGlua0luZm8gPSAiLCBS
YXdQb2ludGVyKHJhcmVEYXRhLT5jYWxsTGlua0luZm8uZ2V0KCkpLAorICAgICAgICAgICAgIiwg
Y3VzdG9tQWNjZXNzb3IgPSAiLCBSYXdQb2ludGVyKHJhcmVEYXRhLT5jdXN0b21BY2Nlc3Nvci5v
cGFxdWUpKTsKKyAgICB9CisKKyAgICBvdXQucHJpbnQoIikiKTsKK30KKworYm9vbCBBY2Nlc3ND
YXNlOjp2aXNpdFdlYWsoVk0mIHZtKSBjb25zdAogewogICAgIGlmIChtX3N0cnVjdHVyZSAmJiAh
SGVhcDo6aXNNYXJrZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgaWYgKCFtX2NvbmRpdGlvblNldC5hcmVTdGlsbExpdmUoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGlmICghbV9zdHViUm91dGluZS0+dmlzaXRXZWFrKHZtKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmIChtX3JhcmVEYXRhICYmIG1fcmFyZURhdGEtPmNhbGxMaW5r
SW5mbykKKyAgICAgICAgbV9yYXJlRGF0YS0+Y2FsbExpbmtJbmZvLT52aXNpdFdlYWsodm0pOwog
ICAgIHJldHVybiB0cnVlOwogfQogCi1Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0KFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3ZvaWQgQWNjZXNzQ2Fz
ZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCisgICAgQWNjZXNzR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSwg
Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdCYgZmFsbFRocm91Z2gpCiB7Ci0gICAgaWYgKHN0dWJJbmZv
LmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0KQorICAgIENDYWxsSGVscGVycyYgaml0ID0gKnN0
YXRlLmppdDsKKworICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgY2FzZSBBcnJheUxlbmd0aDog
eworICAgICAgICBBU1NFUlQoIXZpYVByb3h5KCkpOworICAgICAgICBqaXQubG9hZDgoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKAorICAgICAgICAgICAgaml0
LmJyYW5jaFRlc3QzMihDQ2FsbEhlbHBlcnM6Olplcm8sIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKElzQXJyYXkpKSk7CisgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgK
KyAgICAgICAgICAgIGppdC5icmFuY2hUZXN0MzIoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpaZXJvLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihJbmRleGlu
U2hhcGVNYXNrKSkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIFN0cmluZ0xl
bmd0aDogeworICAgICAgICBBU1NFUlQoIXZpYVByb3h5KCkpOworICAgICAgICBmYWxsVGhyb3Vn
aC5hcHBlbmQoCisgICAgICAgICAgICBqaXQuYnJhbmNoOCgKKyAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVz
cyhiYXNlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwKKyAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihTdHJpbmdUeXBlKSkpOworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBkZWZhdWx0OiB7CisgICAgICAgIGlmICh2aWFQcm94eSgpKSB7Cisg
ICAgICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCisgICAgICAgICAgICAgICAgaml0LmJyYW5j
aDgoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsCisgICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdGF0ZS5iYXNlR1BSLCBKU0NlbGw6
OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoUHVyZUZvcndhcmRpbmdQcm94eVR5cGUpKSk7CisKKyAgICAgICAgICAg
IGppdC5sb2FkUHRyKAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdGF0
ZS5iYXNlR1BSLCBKU1Byb3h5Ojp0YXJnZXRPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgc3Rh
dGUuc2NyYXRjaEdQUik7CisKKyAgICAgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgKKyAgICAg
ICAgICAgICAgICBqaXQuYnJhbmNoU3RydWN0dXJlKAorICAgICAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3Moc3RhdGUuc2NyYXRjaEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAg
ICAgICAgICAgICAgICAgICAgc3RydWN0dXJlKCkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgKKyAgICAgICAgICAgICAgICBqaXQuYnJhbmNoU3Ry
dWN0dXJlKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAorICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RhdGUuYmFzZUdQUiwgSlND
ZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJl
KCkpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9IH07CisKKyAgICBnZW5lcmF0
ZShzdGF0ZSk7Cit9CisKK3ZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGUoQWNjZXNzR2VuZXJhdGlv
blN0YXRlJiBzdGF0ZSkKK3sKKyAgICBDQ2FsbEhlbHBlcnMmIGppdCA9ICpzdGF0ZS5qaXQ7Cisg
ICAgVk0mIHZtID0gKmppdC52bSgpOworICAgIFBvbHltb3JwaGljQWNjZXNzJiBhY2Nlc3MgPSAq
c3RhdGUuYWNjZXNzOworICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9ICpzdGF0ZS5z
dHViSW5mbzsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGppdC5jb2RlQmxvY2soKTsKKyAg
ICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9ICpzdGF0ZS5pZGVudDsKKyAgICBKU1ZhbHVlUmVn
cyB2YWx1ZVJlZ3MgPSBzdGF0ZS52YWx1ZVJlZ3M7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0
ZS5iYXNlR1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc3RhdGUuc2NyYXRjaEdQUjsKKwor
ICAgIEFTU0VSVChtX2NvbmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHlBc3N1bWlu
Z0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKTsKKworICAgIGlmIChzdHJ1Y3R1cmUoKS0+bmVl
ZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIHx8IG1fY29uZGl0aW9uU2V0Lm5lZWRJbXB1cmVQ
cm9wZXJ0eVdhdGNocG9pbnQoKSkKKyAgICAgICAgdm0ucmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1w
dXJlUHJvcGVydHkoaWRlbnQsIHN0YXRlLmFkZFdhdGNocG9pbnQoKSk7CisKKyAgICBpZiAoYWRk
aXRpb25hbFNldCgpKQorICAgICAgICBhZGRpdGlvbmFsU2V0KCktPmFkZChzdGF0ZS5hZGRXYXRj
aHBvaW50KCkpOworCisgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29u
ZGl0aW9uIDogbV9jb25kaXRpb25TZXQpIHsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBjb25kaXRpb24ub2JqZWN0KCktPnN0cnVjdHVyZSgpOworCisgICAgICAgIGlmIChjb25kaXRp
b24uaXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKSB7CisgICAg
ICAgICAgICBzdHJ1Y3R1cmUtPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KHN0YXRlLmFkZFdhdGNo
cG9pbnQoY29uZGl0aW9uKSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbmRpdGlvbi5zdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlB
c3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUpKTsKKyAgICAgICAgaml0
Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNvbmRpdGlvbi5vYmplY3QoKSksIHNj
cmF0Y2hHUFIpOworICAgICAgICBzdGF0ZS5mYWlsQW5kUmVwYXRjaC5hcHBlbmQoCisgICAgICAg
ICAgICBqaXQuYnJhbmNoU3RydWN0dXJlKAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
Tm90RXF1YWwsCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgc3RydWN0
dXJlKSk7CisgICAgfQorCisgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICBjYXNlIEluSGl0Ogor
ICAgIGNhc2UgSW5NaXNzOgorICAgICAgICBqaXQuYm94Qm9vbGVhblBheWxvYWQobV90eXBlID09
IEluSGl0LCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgc3RhdGUuc3VjY2VlZCgp
OworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIE1pc3M6CisgICAgICAgIGppdC5tb3ZlVHJ1
c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIHZhbHVlUmVncyk7CisgICAgICAgIHN0YXRlLnN1Y2Nl
ZWQoKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBMb2FkOgorICAgIGNhc2UgR2V0dGVy
OgorICAgIGNhc2UgU2V0dGVyOgorICAgIGNhc2UgQ3VzdG9tR2V0dGVyOgorICAgIGNhc2UgQ3Vz
dG9tU2V0dGVyOiB7CisgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG1fb2Zmc2V0KSkgeworICAg
ICAgICAgICAgU3RydWN0dXJlKiBjdXJyU3RydWN0dXJlOworICAgICAgICAgICAgaWYgKG1fY29u
ZGl0aW9uU2V0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBjdXJyU3RydWN0dXJlID0gc3Ry
dWN0dXJlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGN1cnJTdHJ1Y3R1cmUg
PSBtX2NvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9iamVjdCgpLT5zdHJ1Y3R1cmUo
KTsKKyAgICAgICAgICAgIGN1cnJTdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJl
cGxhY2VtZW50cyh2bSwgb2Zmc2V0KTsKKyAgICAgICAgfQorCisgICAgICAgIEdQUlJlZyBiYXNl
Rm9yR2V0R1BSOworICAgICAgICBpZiAodmlhUHJveHkoKSkgeworICAgICAgICAgICAgYmFzZUZv
ckdldEdQUiA9IHZhbHVlUmVncy5wYXlsb2FkR1BSKCk7CisgICAgICAgICAgICBqaXQubG9hZFB0
cigKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNQcm94
eTo6dGFyZ2V0T2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIGJhc2VGb3JHZXRHUFIpOworICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgIGJhc2VGb3JHZXRHUFIgPSBiYXNlR1BSOworCisgICAg
ICAgIEdQUlJlZyBiYXNlRm9yQWNjZXNzR1BSOworICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGppdC5tb3ZlKAorICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihjb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5v
YmplY3QoKSksCisgICAgICAgICAgICAgICAgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBiYXNl
Rm9yQWNjZXNzR1BSID0gc2NyYXRjaEdQUjsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBi
YXNlRm9yQWNjZXNzR1BSID0gYmFzZUZvckdldEdQUjsKKworICAgICAgICBHUFJSZWcgbG9hZGVk
VmFsdWVHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICBpZiAobV90eXBlICE9IEN1c3RvbUdl
dHRlciAmJiBtX3R5cGUgIT0gQ3VzdG9tU2V0dGVyKSB7CisgICAgICAgICAgICBpZiAobV90eXBl
ID09IExvYWQpCisgICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIgPSB2YWx1ZVJlZ3MucGF5
bG9hZEdQUigpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVl
R1BSID0gc2NyYXRjaEdQUjsKKworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFI7CisgICAg
ICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKKyAgICAgICAgICAgICAgICBzdG9y
YWdlR1BSID0gYmFzZUZvckFjY2Vzc0dQUjsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgIGppdC5sb2FkUHRyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoYmFzZUZvckFjY2Vzc0dQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwKKyAg
ICAgICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIpOworICAgICAgICAgICAgICAgIHN0b3Jh
Z2VHUFIgPSBsb2FkZWRWYWx1ZUdQUjsKKyAgICAgICAgICAgIH0KKworI2lmIFVTRShKU1ZBTFVF
NjQpCisgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6QWRkcmVzcyhzdG9yYWdl
R1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShvZmZzZXQpKSwgbG9hZGVkVmFsdWVHUFIpOworI2Vs
c2UKKyAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gTG9hZCkgeworICAgICAgICAgICAgICAgIGpp
dC5sb2FkMzIoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdG9y
YWdlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShvZmZzZXQpICsgVGFnT2Zmc2V0KSwKKyAgICAg
ICAgICAgICAgICAgICAgdmFsdWVSZWdzLnRhZ0dQUigpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGppdC5sb2FkMzIoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KHN0b3JhZ2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKG9mZnNldCkgKyBQYXlsb2FkT2Zmc2V0
KSwKKyAgICAgICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUik7CisjZW5kaWYKKyAgICAgICAgfQor
CisgICAgICAgIC8vIFN0dWZmIGZvciBjdXN0b20gZ2V0dGVycy4KKyAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpDYWxsIG9wZXJhdGlvbkNhbGw7CisgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBoYW5k
bGVyQ2FsbDsKKworICAgICAgICAvLyBTdHVmZiBmb3IgSlMgZ2V0dGVycy4KKyAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpEYXRhTGFiZWxQdHIgYWRkcmVzc09mTGlua0Z1bmN0aW9uQ2hlY2s7CisgICAg
ICAgIENDYWxsSGVscGVyczo6Q2FsbCBmYXN0UGF0aENhbGw7CisgICAgICAgIENDYWxsSGVscGVy
czo6Q2FsbCBzbG93UGF0aENhbGw7CisKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHN1Y2Nl
c3M7CisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBmYWlsOworICAgICAgICBpZiAobV90eXBl
ICE9IExvYWQgJiYgbV90eXBlICE9IE1pc3MpIHsKKyAgICAgICAgICAgIC8vIE5lZWQgdG8gbWFr
ZSBzdXJlIHRoYXQgd2hlbmV2ZXIgdGhpcyBjYWxsIGlzIG1hZGUgaW4gdGhlIGZ1dHVyZSwgd2Ug
cmVtZW1iZXIgdGhlCisgICAgICAgICAgICAvLyBwbGFjZSB0aGF0IHdlIG1hZGUgaXQgZnJvbS4K
KyAgICAgICAgICAgIGppdC5zdG9yZTMyKAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKHN0dWJJbmZvLmNhbGxTaXRlSW5kZXguYml0cygpKSwKKyAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KEpT
U3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7CisKKyAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gR2V0
dGVyIHx8IG1fdHlwZSA9PSBTZXR0ZXIpIHsKKyAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBK
UyBjYWxsIHVzaW5nIGEgSlMgY2FsbCBpbmxpbmUgY2FjaGUuIEFzc3VtZSB0aGF0OgorICAgICAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gLSBTUCBpcyBhbGlnbmVkIGFuZCByZXBy
ZXNlbnRzIHRoZSBleHRlbnQgb2YgdGhlIGNhbGxpbmcgY29tcGlsZXIncyBzdGFjayB1c2FnZS4K
KyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIC0gRlAgaXMgc2V0IGNvcnJl
Y3RseSAoaS5lLiBpdCBwb2ludHMgdG8gdGhlIGNhbGxlcidzIGNhbGwgZnJhbWUgaGVhZGVyKS4K
KyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIC0gU1AgLSBGUCBpcyBhbiBh
bGlnbmVkIGRpZmZlcmVuY2UuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAv
LyAtIEFueSBieXRlIGJldHdlZW4gRlAgKGV4Y2x1c2l2ZSkgYW5kIFNQIChpbmNsdXNpdmUpIGNv
dWxkIGJlIGxpdmUgaW4gdGhlIGNhbGxpbmcKKyAgICAgICAgICAgICAgICAvLyAgIGNvZGUuCisg
ICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBUaGVyZWZvcmUsIHdlIHRlbXBv
cmFyaWx5IGdyb3cgdGhlIHN0YWNrIGZvciB0aGUgcHVycG9zZSBvZiB0aGUgY2FsbCBhbmQgdGhl
bgorICAgICAgICAgICAgICAgIC8vIHNocmluayBpdCBhZnRlci4KKworICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKCFtX3JhcmVEYXRhLT5jYWxsTGlua0luZm8pOworICAgICAgICAgICAg
ICAgIG1fcmFyZURhdGEtPmNhbGxMaW5rSW5mbyA9IHN0ZDo6bWFrZV91bmlxdWU8Q2FsbExpbmtJ
bmZvPigpOworICAgICAgICAgICAgICAgIG1fcmFyZURhdGEtPnNldFVwQ2FsbChDYWxsTGlua0lu
Zm86OkNhbGwsIHN0dWJJbmZvLmNvZGVPcmlnaW4sIGxvYWRlZFZhbHVlR1BSKTsKKworICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKKworICAgICAgICAgICAgICAg
IC8vIFRoZXJlIGlzIGEgInRoaXMiIGFyZ3VtZW50LgorICAgICAgICAgICAgICAgIHVuc2lnbmVk
IG51bWJlck9mUGFyYW1ldGVycyA9IDE7CisgICAgICAgICAgICAgICAgLy8gLi4uIGFuZCBhIHZh
bHVlIGFyZ3VtZW50IGlmIHdlJ3JlIGNhbGxpbmcgYSBzZXR0ZXIuCisgICAgICAgICAgICAgICAg
aWYgKG1fdHlwZSA9PSBTZXR0ZXIpCisgICAgICAgICAgICAgICAgICAgIG51bWJlck9mUGFyYW1l
dGVycysrOworCisgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBhY2Nlc3NvcjsgaWYgdGhlcmUg
YWluJ3Qgb25lIHRoZW4gdGhlIHJlc3VsdCBpcyBqc1VuZGVmaW5lZCgpLgorICAgICAgICAgICAg
ICAgIGlmIChtX3R5cGUgPT0gU2V0dGVyKSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2Fk
UHRyKAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGxvYWRl
ZFZhbHVlR1BSLCBHZXR0ZXJTZXR0ZXI6Om9mZnNldE9mU2V0dGVyKCkpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKAorICAgICAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKGxvYWRlZFZhbHVlR1BSLCBHZXR0ZXJTZXR0ZXI6Om9mZnNl
dE9mR2V0dGVyKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIpOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBy
ZXR1cm5VbmRlZmluZWQgPSBqaXQuYnJhbmNoVGVzdFB0cigKKyAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpaZXJvLCBsb2FkZWRWYWx1ZUdQUik7CisKKyAgICAgICAgICAgICAgICB1
bnNpZ25lZCBudW1iZXJPZlJlZ3NGb3JDYWxsID0gSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6
ZSArIG51bWJlck9mUGFyYW1ldGVyczsKKworICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJl
ck9mQnl0ZXNGb3JDYWxsID0KKyAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZSZWdzRm9yQ2Fs
bCAqIHNpemVvZihSZWdpc3RlcikgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7CisKKyAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwgPQorICAgICAg
ICAgICAgICAgICAgICBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXR3
cygpLCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCk7CisKKyAgICAgICAgICAgICAgICBqaXQuc3ViUHRy
KAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihhbGlnbmVk
TnVtYmVyT2ZCeXRlc0ZvckNhbGwpLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
QWRkcmVzcyBjYWxsZWVGcmFtZSA9IENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwKKyAgICAgICAgICAg
ICAgICAgICAgLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMp
KSk7CisKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMigKKyAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobnVtYmVyT2ZQYXJhbWV0ZXJzKSwKKyAgICAgICAg
ICAgICAgICAgICAgY2FsbGVlRnJhbWUud2l0aE9mZnNldChKU1N0YWNrOjpBcmd1bWVudENvdW50
ICogc2l6ZW9mKFJlZ2lzdGVyKSArIFBheWxvYWRPZmZzZXQpKTsKKworICAgICAgICAgICAgICAg
IGppdC5zdG9yZUNlbGwoCisgICAgICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSLCBjYWxs
ZWVGcmFtZS53aXRoT2Zmc2V0KEpTU3RhY2s6OkNhbGxlZSAqIHNpemVvZihSZWdpc3RlcikpKTsK
KworICAgICAgICAgICAgICAgIGppdC5zdG9yZUNlbGwoCisgICAgICAgICAgICAgICAgICAgIGJh
c2VGb3JHZXRHUFIsCisgICAgICAgICAgICAgICAgICAgIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQo
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIp
KSk7CisKKyAgICAgICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsU2V0dGVyKSB7CisgICAgICAg
ICAgICAgICAgICAgIGppdC5zdG9yZVZhbHVlKAorICAgICAgICAgICAgICAgICAgICAgICAgdmFs
dWVSZWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGVlRnJhbWUud2l0aE9mZnNldCgK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgx
KS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpKTsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgc2xvd0Nhc2UgPSBqaXQuYnJhbmNoUHRy
V2l0aFBhdGNoKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBs
b2FkZWRWYWx1ZUdQUiwgYWRkcmVzc09mTGlua0Z1bmN0aW9uQ2hlY2ssCisgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigwKSk7CisKKyAgICAgICAgICAgICAg
ICBmYXN0UGF0aENhbGwgPSBqaXQubmVhckNhbGwoKTsKKworICAgICAgICAgICAgICAgIGppdC5h
ZGRQdHIoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFs
aWduZWROdW1iZXJPZkJ5dGVzRm9yQ2FsbCksCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIGlmIChraW5kID09
IENhbGxHZXR0ZXIpCisgICAgICAgICAgICAgICAgICAgIGppdC5zZXR1cFJlc3VsdHModmFsdWVS
ZWdzKTsKKworICAgICAgICAgICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAg
ICAgICAgICAgIHNsb3dDYXNlLmxpbmsoJmppdCk7CisKKyAgICAgICAgICAgICAgICBqaXQubW92
ZShsb2FkZWRWYWx1ZUdQUiwgR1BSSW5mbzo6cmVnVDApOworI2lmIFVTRShKU1ZBTFVFMzJfNjQp
CisgICAgICAgICAgICAgICAgLy8gV2UgKmFsd2F5cyoga25vdyB0aGF0IHRoZSBnZXR0ZXIvc2V0
dGVyLCBpZiBub24tbnVsbCwgaXMgYSBjZWxsLgorICAgICAgICAgICAgICAgIGppdC5tb3ZlKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBHUFJJbmZvOjpyZWdU
MSk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIobV9yYXJlRGF0YS0+Y2FsbExpbmtJbmZvLmdldCgpKSwgR1BSSW5mbzo6cmVnVDIp
OworICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCA9IGppdC5uZWFyQ2FsbCgpOworCisgICAg
ICAgICAgICAgICAgaml0LmFkZFB0cigKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxsKSwKKyAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgICAg
ICAgICAgaWYgKGtpbmQgPT0gQ2FsbEdldHRlcikKKyAgICAgICAgICAgICAgICAgICAgaml0LnNl
dHVwUmVzdWx0cyh2YWx1ZVJlZ3MpOworCisgICAgICAgICAgICAgICAgZG9uZS5hcHBlbmQoaml0
Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuVW5kZWZpbmVkLmxpbmsoJmppdCk7CisK
KyAgICAgICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsR2V0dGVyKQorICAgICAgICAgICAgICAg
ICAgICBqaXQubW92ZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCB2YWx1ZVJlZ3MpOworCisg
ICAgICAgICAgICAgICAgZG9uZS5saW5rKCZqaXQpOworCisgICAgICAgICAgICAgICAgc3RhdGUu
Y2FsbGJhY2tzLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgWyZdIChMaW5rQnVmZmVyJiBs
aW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3JhcmVEYXRhLT5jYWxsTGlu
a0luZm8tPnNldENhbGxMb2NhdGlvbnMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlu
a0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoc2xvd1BhdGhDYWxsKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoYWRkcmVzc09mTGlua0Z1bmN0aW9u
Q2hlY2spLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25P
Zk5lYXJDYWxsKGZhc3RQYXRoQ2FsbCkpOworCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5r
QnVmZmVyLmxpbmsoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdldENUSVN0
dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CisgICAgICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBnZXR0ZXI6IEVu
Y29kZWRKU1ZhbHVlICgqR2V0VmFsdWVGdW5jKShFeGVjU3RhdGUqLCBKU09iamVjdCogc2xvdEJh
c2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAg
ICAgICAvLyBzZXR0ZXI6IHZvaWQgKCpQdXRWYWx1ZUZ1bmMpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiBiYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSk7
CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsQ3Vz
dG9tR2V0dGVyKSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICBiYXNlRm9yQWNjZXNzR1BSLCBiYXNl
Rm9yR2V0R1BSLAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKHByb3BlcnR5TmFtZS5pbXBsKCkpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlRm9y
QWNjZXNzR1BSLCBiYXNlRm9yR2V0R1BSLCB2YWx1ZVJlZ3MuZ3ByKCkpOworI2Vsc2UKKyAgICAg
ICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsQ3VzdG9tR2V0dGVyKSB7CisgICAgICAgICAgICAg
ICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoCisgICAgICAgICAgICAgICAg
ICAgICAgICBiYXNlRm9yQWNjZXNzR1BSLCBiYXNlRm9yR2V0R1BSLAorICAgICAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksCisg
ICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIocHJvcGVy
dHlOYW1lLmltcGwoKSkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoCisgICAgICAgICAgICAgICAg
ICAgICAgICBiYXNlRm9yQWNjZXNzR1BSLCBiYXNlRm9yR2V0R1BSLAorICAgICAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksCisg
ICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB2YWx1ZVJlZ3Mu
dGFnR1BSKCkpOworICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgICAgIGpp
dC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgJnZtLT50b3BDYWxsRnJhbWUp
OworCisgICAgICAgICAgICAgICAgb3BlcmF0aW9uQ2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAg
ICAgICAgICAgaWYgKGtpbmQgPT0gQ2FsbEN1c3RvbUdldHRlcikKKyAgICAgICAgICAgICAgICAg
ICAgaml0LnNldHVwUmVzdWx0cyh2YWx1ZVJlZ3MpOworICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcCBub0V4Y2VwdGlvbiA9CisgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0RXhj
ZXB0aW9uQ2hlY2soQ0NhbGxIZWxwZXJzOjpJbnZlcnRlZEV4Y2VwdGlvbkNoZWNrKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50cyhDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIodm0pLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAg
ICAgICAgICAgaGFuZGxlckNhbGwgPSBqaXQuY2FsbCgpOworICAgICAgICAgICAgICAgIGppdC5q
dW1wVG9FeGNlcHRpb25IYW5kbGVyKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBu
b0V4Y2VwdGlvbi5saW5rKCZqaXQpOworCisgICAgICAgICAgICAgICAgc3RhdGUuY2FsbGJhY2tz
LmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgWyZdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsob3BlcmF0aW9uQ2Fs
bCwgRnVuY3Rpb25QdHIobV9yYXJlRGF0YS0+Y3VzdG9tQWNjZXNzb3Iub3BhcXVlKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoaGFuZGxlckNhbGwsIGxvb2t1cEV4
Y2VwdGlvbkhhbmRsZXIpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7CiAgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBjYXNlIFJlcGxhY2U6IHsKKyAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG1f
b2Zmc2V0KSkgeworICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUoCisgICAgICAgICAgICAgICAg
dmFsdWVSZWdzLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAg
ICAgICAgICAgICAgICAgYmFzZUdQUiwKKyAgICAgICAgICAgICAgICAgICAgSlNPYmplY3Q6Om9m
ZnNldE9mSW5saW5lU3RvcmFnZSgpICsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0SW5Jbmxp
bmVTdG9yYWdlKG1fb2Zmc2V0KSAqIHNpemVvZihKU1ZhbHVlKSkpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
aml0LnN0b3JlVmFsdWUoCisgICAgICAgICAgICAgICAgdmFsdWVSZWdzLAorICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICAgICAgc2NyYXRjaEdQ
UjEsIG9mZnNldEluQnV0dGVyZmx5KG1fb2Zmc2V0KSAqIHNpemVvZihKU1ZhbHVlKSkpOworICAg
ICAgICB9CisgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGNhc2UgVHJhbnNpdGlvbjogeworICAgICAgICAvLyBBY2Nlc3NDYXNlOjp0cmFuc2l0
aW9uKCkgc2hvdWxkIGhhdmUgcmV0dXJuZWQgbnVsbC4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
R1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgPj0gNiB8fCAhc3RydWN0dXJlKCktPm91dE9mTGlu
ZUNhcGFjaXR5KCkgfHwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgPT0gbmV3U3Ry
dWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCgh
b2xkU3RydWN0dXJlLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKTsKKworICAgICAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOworCisgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvciBhbGxvY2F0b3Ioc3R1YkluZm8ucGF0Y2gudXNlZFJlZ2lzdGVycyk7CisgICAgICAg
IGFsbG9jYXRvci5sb2NrKGJhc2VHUFIpOworICAgICAgICBhbGxvY2F0b3IubG9jayh2YWx1ZVJl
Z3MpOworICAgICAgICBhbGxvY2F0b3IubG9jayhzY3JhdGNoR1BSKTsKKworICAgICAgICBHUFJS
ZWcgc2NyYXRjaEdQUjIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgICAg
IEdQUlJlZyBzY3JhdGNoR1BSMzsKKyAgICAgICAgaWYgKG5ld1N0cnVjdHVyZSgpLT5vdXRPZkxp
bmVDYXBhY2l0eSgpICE9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpCisgICAgICAg
ICAgICAmJiBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkKKyAgICAgICAgICAgIHNj
cmF0Y2hHUFIzID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBzY3JhdGNoR1BSMyA9IEludmFsaWRHUFJSZWc7CisKKyAgICAgICAgc2l6
ZV90IG51bWJlck9mUGFkZGluZ0J5dGVzID0gYWxsb2NhdGUucHJlc2VydmVSZXVzZWRSZWdpc3Rl
cnNCeVB1c2hpbmcoaml0KTsKKworICAgICAgICBBU1NFUlQoc3RydWN0dXJlKCktPnRyYW5zaXRp
b25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOworCisgICAgICAgIGJvb2wgc2Ny
YXRjaEdQUkhhc1N0b3JhZ2UgPSBmYWxzZTsKKworICAgICAgICBpZiAobmV3U3RydWN0dXJlKCkt
Pm91dE9mTGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkp
IHsKKyAgICAgICAgICAgIHNpemVfdCBuZXdTaXplID0gbmV3U3RydWN0dXJlKCktPm91dE9mTGlu
ZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7CisgICAgICAgICAgICBDb3BpZWRBbGxvY2F0
b3IqIGNvcGllZEFsbG9jYXRvciA9ICZ2bS0+aGVhcC5zdG9yYWdlQWxsb2NhdG9yKCk7CisKKyAg
ICAgICAgICAgIGlmICghc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KSB7CisgICAgICAg
ICAgICAgICAgaml0LmxvYWRQdHIoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5n
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoCisgICAgICAg
ICAgICAgICAgICAgIGppdC5icmFuY2hTdWJQdHIoCisgICAgICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OlNpZ25lZCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobmV3U2l6ZSks
IHNjcmF0Y2hHUFIpKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwg
JmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKKyAgICAgICAgICAgICAgICBq
aXQubmVnUHRyKHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoCisgICAg
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKCZjb3BpZWRBbGxv
Y2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAg
ICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1ZhbHVlKSks
IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzaXpl
X3Qgb2xkU2l6ZSA9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihK
U1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIzKTsK
KyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRS
ZW1haW5pbmcsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZCgK
KyAgICAgICAgICAgICAgICAgICAgaml0LmJyYW5jaFN1YlB0cigKKyAgICAgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6U2lnbmVkLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihu
ZXdTaXplKSwgc2NyYXRjaEdQUikpOworICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cihzY3Jh
dGNoR1BSLCAmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcpOworICAgICAgICAg
ICAgICAgIGppdC5uZWdQdHIoc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgaml0LmFkZFB0
cigKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MoJmNv
cGllZEFsbG9jYXRvci0+bV9jdXJyZW50UGF5bG9hZEVuZCksIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEpT
VmFsdWUpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBzY3JhdGNo
R1BSID0gbmV3IHN0b3JhZ2UsIHNjcmF0Y2hHUFIzID0gb2xkIHN0b3JhZ2UsCisgICAgICAgICAg
ICAgICAgLy8gc2NyYXRjaEdQUjIgPSBhdmFpbGFibGUKKyAgICAgICAgICAgICAgICBmb3IgKHNp
emVfdCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBvbGRTaXplOyBvZmZzZXQgKz0gc2l6ZW9mKHZvaWQq
KSkgeworICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFB0cigKKyAgICAgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzY3JhdGNoR1BSMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAtc3RhdGljX2Nhc3Q8
cHRyZGlmZl90PigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICsgc2l6
ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAg
c2NyYXRjaEdQUjIpOworICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoCisgICAgICAg
ICAgICAgICAgICAgICAgICBzY3JhdGNoR1BSMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNo
R1BSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+
KG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZih2b2lkKikpKSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBqaXQuc3RvcmVQdHIoc2NyYXRj
aEdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJzYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFJIYXNTdG9yYWdlID0gdHJ1ZTsKKyAg
ICAgICAgfQorCisgICAgICAgIHVpbnQzMl90IHN0cnVjdHVyZUJpdHMgPSBiaXR3aXNlX2Nhc3Q8
dWludDMyX3Q+KHN0cnVjdHVyZS0+aWQoKSk7CisgICAgICAgIGppdC5zdG9yZTMyKAorICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZUJpdHMpLAorICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSk7CisKKyAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG1fb2Zmc2V0KSkgeworICAg
ICAgICAgICAgaml0LnN0b3JlVmFsdWUoCisgICAgICAgICAgICAgICAgdmFsdWVSZWdzLAorICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICAgICAg
YmFzZUdQUiwKKyAgICAgICAgICAgICAgICAgICAgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3Rv
cmFnZSgpICsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKG1fb2Zm
c2V0ICogc2l6ZW9mKEpTVmFsdWUpKSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
aWYgKCFzY3JhdGNoR1BSSGFzU3RvcmFnZSkKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgp
KSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSgKKyAgICAgICAgICAg
ICAgICB2YWx1ZVJlZ3MsCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNj
cmF0Y2hHUFIsIG9mZnNldEluQnV0dGVyZmx5KG1fb2Zmc2V0KSAqIHNpemVvZihKU1ZhbHVlKSkp
OworICAgICAgICB9CisKKyAgICAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IG51
bGxwdHI7CisgICAgICAgIGlmIChuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAh
PSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkKKyAgICAgICAgICAgIHNjcmF0Y2hC
dWZmZXIgPSB2bS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoYWxsb2NhdG9yLmRlc2lyZWRTY3JhdGNo
QnVmZmVyU2l6ZUZvckNhbGwoKSk7CisKKyNpZiBFTkFCTEUoR0dDKQorICAgICAgICBpZiAobmV3
U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlKCktPm91dE9mTGlu
ZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsRmx1c2hX
cml0ZUJhcnJpZXJCdWZmZXI7CisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgb3duZXJJ
c1JlbWVtYmVyZWRPckluRWRlbiA9IGppdC5qdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihiYXNl
R1BSKTsKKyAgICAgICAgICAgIFdyaXRlQmFycmllckJ1ZmZlciYgd3JpdGVCYXJyaWVyQnVmZmVy
ID0gaml0LnZtKCktPmhlYXAud3JpdGVCYXJyaWVyQnVmZmVyKCk7CisgICAgICAgICAgICBqaXQu
bG9hZDMyKHdyaXRlQmFycmllckJ1ZmZlci5jdXJyZW50SW5kZXhBZGRyZXNzKCksIHNjcmF0Y2hH
UFIyKTsKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBuZWVkVG9GbHVzaCA9CisgICAg
ICAgICAgICAgICAgaml0LmJyYW5jaDMyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OkFib3ZlT3JFcXVhbCwgc2NyYXRjaEdQUjIsCisgICAgICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKHdyaXRlQmFycmllckJ1ZmZlci5jYXBhY2l0eSgpKSk7CisK
KyAgICAgICAgICAgIGppdC5hZGQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgc2Ny
YXRjaEdQUjIpOworICAgICAgICAgICAgaml0LnN0b3JlMzIoc2NyYXRjaEdQUjIsIHdyaXRlQmFy
cmllckJ1ZmZlci5jdXJyZW50SW5kZXhBZGRyZXNzKCkpOworCisgICAgICAgICAgICBqaXQubW92
ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIod3JpdGVCYXJyaWVyQnVmZmVyLmJ1ZmZlcigp
KSwgc2NyYXRjaEdQUjEpOworICAgICAgICAgICAgLy8gV2UgdXNlIGFuIG9mZnNldCBvZiAtc2l6
ZW9mKHZvaWQqKSBiZWNhdXNlIHdlIGFscmVhZHkgYWRkZWQgMSB0byBzY3JhdGNoR1BSMi4KKyAg
ICAgICAgICAgIGppdC5zdG9yZVB0cigKKyAgICAgICAgICAgICAgICBiYXNlR1BSLAorICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6QmFzZUluZGV4KAorICAgICAgICAgICAgICAgICAgICBz
Y3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIENDYWxsSGVscGVyczo6U2NhbGVQdHIsCisgICAgICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KC1zaXplb2Yodm9pZCopKSkpOworCisg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZVdpdGhCYXJyaWVyID0gaml0Lmp1bXAo
KTsKKyAgICAgICAgICAgIG5lZWRUb0ZsdXNoLmxpbmsoJmppdCk7CisKKyAgICAgICAgICAgIGFs
bG9jYXRvci5wcmVzZXJ2ZVVzZWRSZWdpc3RlcnNUb1NjcmF0Y2hCdWZmZXJGb3JDYWxsKGppdCwg
c2NyYXRjaEJ1ZmZlciwgc2NyYXRjaEdQUjIpOworICAgICAgICAgICAgaml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShiYXNlR1BSKTsKKyAgICAgICAgICAgIGNhbGxGbHVzaFdyaXRlQmFy
cmllckJ1ZmZlciA9IGppdC5jYWxsKCk7CisgICAgICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVVz
ZWRSZWdpc3RlcnNGcm9tU2NyYXRjaEJ1ZmZlckZvckNhbGwoCisgICAgICAgICAgICAgICAgaml0
LCBzY3JhdGNoQnVmZmVyLCBzY3JhdGNoR1BSMik7CisKKyAgICAgICAgICAgIGRvbmVXaXRoQmFy
cmllci5saW5rKCZqaXQpOworICAgICAgICAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5s
aW5rKCZqaXQpOworCisgICAgICAgICAgICBzdGF0ZS5jYWxsYmFja3MuYXBwZW5kKAorICAgICAg
ICAgICAgICAgIFsmXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAg
ICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbEZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyLCBvcGVyYXRp
b25GbHVzaFdyaXRlQmFycmllckJ1ZmZlcik7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
IH0KKyNlbmRpZiAvLyBFTkFCTEUoR0dDKQorICAgICAgICAKKyAgICAgICAgc3RhdGUuc3VjY2Vl
ZCgpOworCisgICAgICAgIGlmIChuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAh
PSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgeworICAgICAgICAgICAgc2xvd1Bh
dGgubGluaygmaml0KTsKKyAgICAgICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0
ZXJzQnlQb3BwaW5nKGppdCwgbnVtYmVyT2ZQYWRkaW5nQnl0ZXMpOworICAgICAgICAgICAgYWxs
b2NhdG9yLnByZXNlcnZlVXNlZFJlZ2lzdGVyc1RvU2NyYXRjaEJ1ZmZlckZvckNhbGwoaml0LCBz
Y3JhdGNoQnVmZmVyLCBzY3JhdGNoR1BSKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAg
ICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKKyAgICAgICAgICAgICAgICBiYXNl
R1BSLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1
cmUpLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIHZhbHVlR1BSKTsKKyNlbHNlCisgICAgICAg
ICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKAorICAgICAgICAgICAgICAgIGJh
c2VHUFIsCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVj
dHVyZSksCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2xvdC5j
YWNoZWRPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgdmFsdWVHUFIsIHZhbHVlVGFnR1BSKTsK
KyNlbmRpZgorICAgICAgICAgICAgb3BlcmF0aW9uQ2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAg
ICAgICBhbGxvY2F0b3IucmVzdG9yZVVzZWRSZWdpc3RlcnNGcm9tU2NyYXRjaEJ1ZmZlckZvckNh
bGwoamksIHNjcmF0Y2hCdWZmZXIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgc3RhdGUuc3Vj
Y2VlZCgpOworCisgICAgICAgICAgICBzdGF0ZS5jYWxsYmFja3MuYXBwZW5kKAorICAgICAgICAg
ICAgICAgIFsmXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAg
ICBsaW5rQnVmZmVyLmxpbmsob3BlcmF0aW9uQ2FsbCwgb3BlcmF0aW9uUmVhbGxvY2F0ZVN0b3Jh
Z2VBbmRGaW5pc2hQdXQpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBjYXNlIEFycmF5TGVuZ3RoOiB7CisgICAgICAgIGppdC5s
b2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6
OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHNjcmF0
Y2hHUFIpOworICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZCgKKyAgICAgICAgICAg
IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Okxlc3NUaGFuLCBzY3JhdGNoR1BSLCBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMigwKSkpOworICAgICAgICBqaXQuYm94SW50MzIoc2NyYXRjaEdQ
UiwgdmFsdWVSZWdzKTsKKyAgICAgICAgc3RhdGUuc3VjY2VlZCgpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgY2FzZSBTdHJpbmdMZW5ndGg6IHsKKyAgICAgICAgaml0LmxvYWQzMihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNTdHJpbmc6Om9mZnNldE9mTGVuZ3RoKCkp
LCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgaml0LmJveEludDMyKHZhbHVlUmVn
cy5wYXlsb2FkR1BSKCksIHZhbHVlUmVncyk7CisgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0gfQogICAgIAotICAgIG1fbGlzdC5hcHBlbmQoR2V0QnlJZEFj
Y2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKHN0dWJJbmZvKSk7CisgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogUG9seW1vcnBo
aWNHZXRCeUlkTGlzdDo6ZnJvbShTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCitQb2x5bW9y
cGhpY0FjY2Vzczo6UG9seW1vcnBoaWNBY2Nlc3MoKSB7IH0KK1BvbHltb3JwaGljQWNjZXNzOjp+
UG9seW1vcnBoaWNBY2Nlc3MoKSB7IH0KKworTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIFBvbHltb3Jw
aGljQWNjZXNzOjpyZWdlbmVyYXRlV2l0aENhc2VzKAorICAgIFZNJiB2bSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgY29uc3QgSWRlbnRpZmllciYg
aWRlbnQsCisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPj4gb3JpZ2luYWxD
YXNlc1RvQWRkKQogewotICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRf
YnlfaWRfbGlzdCkKLSAgICAgICAgcmV0dXJuIHN0dWJJbmZvLnUuZ2V0QnlJZExpc3QubGlzdDsK
LSAgICAKLSAgICBBU1NFUlQoCi0gICAgICAgIHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNz
X2dldF9ieV9pZF9zZWxmCi0gICAgICAgIHx8IHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNz
X3Vuc2V0KTsKLSAgICAKLSAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiByZXN1bHQgPSBuZXcg
UG9seW1vcnBoaWNHZXRCeUlkTGlzdChzdHViSW5mbyk7CisgICAgLy8gVGhpcyBtZXRob2Qgd2ls
bCBhZGQgdGhlIG9yaWdpbmFsQ2FzZXNUb0FkZCB0byB0aGUgbGlzdCBvbmUgYXQgYSB0aW1lIHdo
aWxlIHByZXNlcnZpbmcgdGhlCisgICAgLy8gaW52YXJpYW50czoKKyAgICAvLyAtIElmIGEgbmV3
bHkgYWRkZWQgY2FzZSBjYW5SZXBsYWNlKCkgYW55IGV4aXN0aW5nIGNhc2UsIHRoZW4gdGhlIGV4
aXN0aW5nIGNhc2UgaXMgcmVtb3ZlZCBiZWZvcmUKKyAgICAvLyAgIHRoZSBuZXcgY2FzZSBpcyBh
ZGRlZC4gUmVtb3ZhbCBkb2Vzbid0IGNoYW5nZSBvcmRlciBvZiB0aGUgbGlzdC4gQW55IG51bWJl
ciBvZiBleGlzdGluZyBjYXNlcworICAgIC8vICAgY2FuIGJlIHJlbW92ZWQgdmlhIHRoZSBjYW5S
ZXBsYWNlKCkgcnVsZS4KKyAgICAvLyAtIENhc2VzIGluIHRoZSBsaXN0IGFsd2F5cyBhcHBlYXIg
aW4gYXNjZW5kaW5nIG9yZGVyIG9mIHRpbWUgb2YgYWRkaXRpb24uIFRoZXJlZm9yZSwgaWYgeW91
CisgICAgLy8gICBjYXNjYWRlIHRocm91Z2ggdGhlIGNhc2VzIGluIHJldmVyc2Ugb3JkZXIsIHlv
dSB3aWxsIGdldCB0aGUgbW9zdCByZWNlbnQgY2FzZXMgZmlyc3QuCisgICAgLy8gLSBJZiB0aGlz
IG1ldGhvZCBmYWlscyAocmV0dXJucyBudWxsLCBkb2Vzbid0IGFkZCB0aGUgY2FzZXMpLCB0aGVu
IGJvdGggdGhlIHByZXZpb3VzIGNhc2UgbGlzdAorICAgIC8vICAgYW5kIHRoZSBwcmV2aW91cyBz
dHViIGFyZSBrZXB0IGludGFjdCBhbmQgdGhlIG5ldyBjYXNlcyBhcmUgZGVzdHJveWVkLiBJdCdz
IE9LIHRvIGF0dGVtcHQgdG8KKyAgICAvLyAgIGFkZCBtb3JlIHRoaW5ncyBhZnRlciBmYWlsdXJl
LgogICAgIAotICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkTGlzdChyZXN1bHQpOworICAgIC8vIEZp
cnN0LCB2ZXJpZnkgdGhhdCB3ZSBjYW4gZ2VuZXJhdGUgY29kZSBmb3IgYWxsIG9mIHRoZSBuZXcg
Y2FzZXMgd2hpbGUgZWxpbWluYXRpbmcgYW55IG9mIHRoZQorICAgIC8vIG5ldyBjYXNlcyB0aGF0
IHJlcGxhY2UgZWFjaCBvdGhlci4KKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nh
c2U+PiBjYXNlc1RvQWRkOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvcmlnaW5hbENh
c2VzVG9BZGQuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nh
c2U+IG15Q2FzZSA9IHN0ZDo6bW92ZShvcmlnaW5hbENhc2VzVG9BZGRbaV0pOworCisgICAgICAg
IC8vIEFkZCBpdCBvbmx5IGlmIGl0IGlzIG5vdCByZXBsYWNlZCBieSB0aGUgc3Vic2VxdWVudCBj
YXNlcyBpbiB0aGUgbGlzdC4KKyAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGogPSBpICsgMTsgaiA8IG9yaWdpbmFsTmV3QWNjZXNzZXMuc2l6ZSgpOyAr
K2opIHsKKyAgICAgICAgICAgIGlmIChvcmlnaW5hbE5ld0FjY2Vzc2VzW2pdLT5jYW5SZXBsYWNl
KCpteUNhc2UpKSB7CisgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGZvdW5k
KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBpZiAobXlDYXNlLT5k
b2VzQ2FsbHMoKSAmJiBzdHViSW5mby5wYXRjaC5zcGlsbE1vZGUgPT0gTmVlZFRvU3BpbGwpCisg
ICAgICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7CisKKyAgICAgICAgY2Fz
ZXNUb0FkZC5hcHBlbmQoc3RkOjptb3ZlKG15Q2FzZSkpOworICAgIH0KKworICAgIC8vIE5vdyBj
b25zdHJ1Y3QgdGhlIGxpc3Qgb2YgY2FzZXMgYXMgdGhleSBzaG91bGQgYXBwZWFyIGlmIHdlIGFy
ZSBzdWNjZXNzZnVsLiBUaGlzIG1lYW5zIHB1dHRpbmcKKyAgICAvLyBhbGwgb2YgdGhlIHByZXZp
b3VzIGNhc2VzIGluIHRoaXMgbGlzdCBpbiBvcmRlciBidXQgZXhjbHVkaW5nIHRob3NlIHRoYXQg
Y2FuIGJlIHJlcGxhY2VkLCBhbmQKKyAgICAvLyB0aGVuIGFkZGluZyB0aGUgbmV3IGNhc2VzLgor
ICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4+IG5ld0Nhc2VzOworICAgIGZv
ciAoYXV0byYgb2xkQ2FzZSA6IG1fbGlzdCkgeworICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7
CisgICAgICAgIGZvciAoYXV0byYgY2FzZVRvQWRkIDogY2FzZXNUb0FkZCkgeworICAgICAgICAg
ICAgaWYgKGNhc2VUb0FkZC0+Y2FuUmVwbGFjZSgqb2xkQ2FzZSkpIHsKKyAgICAgICAgICAgICAg
ICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKCFmb3VuZCkKKyAgICAgICAgICAgIG5ld0Nhc2VzLmFwcGVu
ZChvbGRDYXNlLT5jbG9uZSgpKTsKKyAgICB9CisgICAgZm9yIChhdXRvJiBjYXNlVG9BZGQgOiBj
YXNlc1RvQWRkKQorICAgICAgICBuZXdDYXNlcy5hcHBlbmQoc3RkOjptb3ZlKGNhc2VUb0FkZCkp
OwogICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19CisgICAgaWYgKG5ld0Nhc2VzLnNpemUoKSA+
IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSkKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cigpOwogCi1Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojp+UG9seW1vcnBoaWNHZXRC
eUlkTGlzdCgpIHsgfQorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByZXN1bHQgPSByZWdlbmVy
YXRlKHZtLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBpZGVudCwgbmV3Q2FzZXMpOworICAgIGlmICgh
cmVzdWx0KQorICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7CiAKLU1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpjdXJyZW50U2xvd1BhdGhU
YXJnZXQoCi0gICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKSBjb25zdAotewotICAgIGlm
IChpc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
bGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKLSAgICBy
ZXR1cm4gbV9saXN0Lmxhc3QoKS5zdHViUm91dGluZSgpLT5jb2RlKCkuY29kZSgpOworICAgIG1f
bGlzdCA9IG5ld0Nhc2VzOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgUG9seW1vcnBo
aWNHZXRCeUlkTGlzdDo6YWRkQWNjZXNzKGNvbnN0IEdldEJ5SWRBY2Nlc3MmIGFjY2VzcykKK01h
Y3JvQXNzZW1ibGVyQ29kZVB0ciBQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZVdpdGhDYXNl
KAorICAgIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbywgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsCisgICAgc3RkOjp1bmlxdWVfcHRyPEFj
Y2Vzc0Nhc2U+IG5ld0FjY2VzcykKIHsKLSAgICBBU1NFUlQoIWlzRnVsbCgpKTsKLSAgICAvLyBN
YWtlIHN1cmUgdGhhdCB0aGUgcmVzaXppbmcgb3B0aW1pemVzIGZvciBzcGFjZSwgbm90IHRpbWUu
Ci0gICAgbV9saXN0LnJlc2l6ZVRvRml0KG1fbGlzdC5zaXplKCkgKyAxKTsKLSAgICBtX2xpc3Qu
bGFzdCgpID0gYWNjZXNzOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4+
IG5ld0FjY2Vzc2VzOworICAgIG5ld0FjY2Vzc2VzLmFwcGVuZChzdGQ6Om1vdmUobmV3QWNjZXNz
KSk7CisgICAgcmV0dXJuIHJlZ2VuZXJhdGVXaXRoQ2FzZXModm0sIGNvZGVCbG9jaywgc3R1Yklu
Zm8sIGlkZW50LCBuZXdBY2Nlc3Nlcyk7CiB9CiAKLWJvb2wgUG9seW1vcnBoaWNHZXRCeUlkTGlz
dDo6aXNGdWxsKCkgY29uc3QKK2Jvb2wgUG9seW1vcnBoaWNBY2Nlc3M6OnZpc2l0V2VhayhWTSYg
dm0pIGNvbnN0CiB7Ci0gICAgQVNTRVJUKHNpemUoKSA8PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hF
X1NJWkUpOwotICAgIHJldHVybiBzaXplKCkgPT0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpF
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkgeworICAgICAgICBp
ZiAoIWF0KGkpLnZpc2l0V2Vhayh2bSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6Omlz
QWxtb3N0RnVsbCgpIGNvbnN0Cit2b2lkIFBvbHltb3JwaGljQWNjZXNzOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKHNpemUoKSA8PSBQT0xZTU9SUEhJQ19MSVNU
X0NBQ0hFX1NJWkUpOwotICAgIHJldHVybiBzaXplKCkgPj0gUE9MWU1PUlBISUNfTElTVF9DQUNI
RV9TSVpFIC0gMTsKKyAgICBvdXQucHJpbnQoUmF3UG9pbnRlcih0aGlzKSwgIjpbIik7CisgICAg
Q29tbWFQcmludGVyIGNvbW1hOworICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2xpc3QpCisgICAg
ICAgIG91dC5wcmludChjb21tYSwgKmVudHJ5KTsKKyAgICBvdXQucHJpbnQoIl0iKTsKIH0KIAot
Ym9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpkaWRTZWxmUGF0Y2hpbmcoKSBjb25zdAorTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyIFBvbHltb3JwaGljQWNjZXNzOjpyZWdlbmVyYXRlKAorICAgIFZN
JiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywg
Y29uc3QgSWRlbnRpZmllciYgaWRlbnQsCisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBY2Nl
c3NDYXNlPj4mIGNhc2VzKQogewotICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUoKTsgaS0tOykg
ewotICAgICAgICBpZiAoYXQoaSkudHlwZSgpID09IEdldEJ5SWRBY2Nlc3M6OlNpbXBsZUlubGlu
ZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSBz
dGF0ZTsKKworICAgIHN0YXRlLmFjY2VzcyA9IHRoaXM7CisgICAgc3RhdGUuc3R1YkluZm8gPSAm
c3R1YkluZm87CisgICAgc3RhdGUuaWRlbnQgPSAmaWRlbnQ7CisgICAgCisgICAgc3RhdGUuYmFz
ZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guYmFzZUdQUik7CisgICAg
c3RhdGUudmFsdWVSZWdzID0gSlNWYWx1ZVJlZ3MoCisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAg
ICAgICAgc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZVRhZ0dQUiksCisj
ZW5kaWYKKyAgICAgICAgc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZUdQ
UikpOworCisgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcihzdHViSW5mby5w
YXRoYy51c2VkUmVnaXN0ZXJzKTsKKyAgICBzdGF0ZS5hbGxvY2F0b3IgPSAmYWxsb2NhdG9yOwor
ICAgIGFsbG9jYXRvci5sb2NrKHN0YXRlLmJhc2VHUFIpOworICAgIGFsbG9jYXRvci5sb2NrKHN0
YXRlLnZhbHVlUmVncyk7CisKKyAgICBzdGF0ZS5zY3JhdGNoR1BSID0gYWxsb2NhdG9yLmFsbG9j
YXRlU2NyYXRjaEdQUigpOworICAgIAorICAgIENDYWxsSGVscGVycyBqaXQoJnZtLCBjb2RlQmxv
Y2spOworICAgIHN0YXRlLmppdCA9ICZqaXQ7CisKKyAgICBzdGF0ZS5udW1iZXJPZlBhZGRpbmdC
eXRlcyA9IGFsbG9jYXRvci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhqaXQpOwor
CisgICAgYm9vbCBhbGxHdWFyZGVkQnlTdHJ1Y3R1cmVDaGVjayA9IHRydWU7CisgICAgZm9yIChh
dXRvJiBlbnRyeSA6IGNhc2VzKQorICAgICAgICBhbGxHdWFyZGVkQnlTdHJ1Y3R1cmVDaGVjayAm
PSBlbnRyeS0+Z3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2soKTsKKworICAgIGlmICghc2l6ZSgpKSB7
CisgICAgICAgIC8vIFRoaXMgaXMgc3VwZXIgdW5saWtlbHksIGJ1dCB3ZSBtYWtlIGl0IGxlZ2Fs
IGFueXdheS4KKyAgICAgICAgc3RhdGUuZmFpbEFuZFJlcGF0Y2guYXBwZW5kKGppdC5qdW1wKCkp
OworICAgIH0gZWxzZSBpZiAoIWFsbEd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrIHx8IHNpemUoKSA9
PSAxKSB7CisgICAgICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgcHJveGllcyBpbiB0aGUgbGlzdCwg
d2UgY2Fubm90IGp1c3QgdXNlIGEgYmluYXJ5IHN3aXRjaCBvdmVyIHRoZSBzdHJ1Y3R1cmUuCisg
ICAgICAgIC8vIFdlIG5lZWQgdG8gcmVzb3J0IHRvIGEgY2FzY2FkZS4gQSBjYXNjYWRlIGFsc28g
aGFwcGVucyB0byBiZSBvcHRpbWFsIGlmIHdlIG9ubHkgaGF2ZSBqdXN0CisgICAgICAgIC8vIG9u
ZSBjYXNlLgorICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGZhbGxUaHJvdWdoOworCisg
ICAgICAgIC8vIENhc2NhZGUgdGhyb3VnaCB0aGUgbGlzdCwgcHJlZmVycmluZyBuZXdlciBlbnRy
aWVzLgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjYXNlcy5zaXplKCk7IGktLTspIHsKKyAg
ICAgICAgICAgIGZhbGxUaHJvdWdoLmxpbmsoJmppdCk7CisgICAgICAgICAgICBjYXNlc1tpXS0+
Z2VuZXJhdGVXaXRoR3VhcmQoc3RhdGUsIGZhbGxUaHJvdWdoKTsKKyAgICAgICAgfQorICAgICAg
ICBzdGF0ZS5mYWlsQW5kUmVwYXRjaC5hcHBlbmQoZmFsbFRocm91Z2gpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGppdC5sb2FkMzIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
c3RhdGUuYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAgICAgICAg
IHN0YXRlLnNjcmF0Y2hHUFIpOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPGludDY0X3Q+IGNh
c2VWYWx1ZXMoY2FzZXMuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGNhc2VzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgY2FzZVZhbHVlc1tpXSA9IGJpdHdpc2Vf
Y2FzdDxpbnQzMl90PihjYXNlc1tpXS0+c3RydWN0dXJlKCkpOworICAgICAgICAKKyAgICAgICAg
QmluYXJ5U3dpdGNoIGJpbmFyeVN3aXRjaChzdGF0ZS5zY3JhdGNoR1BSLCBjYXNlVmFsdWVzLCBC
aW5hcnlTd2l0Y2g6OkludDMyKTsKKyAgICAgICAgd2hpbGUgKGJpbmFyeVN3aXRjaC5hZHZhbmNl
KGppdCkpCisgICAgICAgICAgICBjYXNlc1tiaW5hcnlTd2l0Y2guY2FzZUluZGV4KCldLT5nZW5l
cmF0ZShzdGF0ZSk7CisgICAgICAgIHN0YXRlLmZhaWxBbmRSZXBhdGNoLmFwcGVuZChiaW5hcnlT
d2l0Y2guZmFsbFRocm91Z2goKSk7CiAgICAgfQotICAgIHJldHVybiBmYWxzZTsKKworICAgIHN0
YXRlLmZhaWxBbmRJZ25vcmUubGluaygmaml0KTsKKworICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRo
ZSBpbmxpbmUgY2FjaGUgb3B0aW1pemF0aW9uIGNvZGUga25vd3MgdGhhdCB3ZSBhcmUgdGFraW5n
IHNsb3cgcGF0aCBiZWNhdXNlCisgICAgLy8gb2Ygc29tZXRoaW5nIHRoYXQgaXNuJ3QgcGF0Y2hh
YmxlLiAic2VlbiIgYmVpbmcgZmFsc2UgbWVhbnMgdGhhdCB3ZSBieXBhc3MgcGF0Y2hpbmcuIFRo
aXMgaXMKKyAgICAvLyBwcmV0dHkgZ3Jvc3MgYnV0IGl0IG1lYW5zIHRoYXQgd2UgZG9uJ3QgbmVl
ZCB0byBoYXZlIHR3byBzbG93IHBhdGggZW50cnlwb2ludHMgLSBvbmUgZm9yCisgICAgLy8gcGF0
Y2hpbmcgYW5kIG9uZSBmb3Igbm9ybWFsIHNsb3cgc3R1ZmYuCisgICAgaml0LnN0b3JlOChUcnVz
dGVkSW1tMzIoZmFsc2UpLCAmc3R1YkluZm8uc2Vlbik7CisKKyAgICBzdGF0ZS5mYWlsQW5kUmVw
YXRjaC5saW5rKCZqaXQpOworICAgIAorICAgIHN0YXRlLnJlc3RvcmVTY3JhdGNoKCk7CisgICAg
Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBmYWlsdXJlID0gaml0Lmp1bXAoKTsKKworICAgIExpbmtC
dWZmZXIgbGlua0J1ZmZlcih2bSwgaml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFp
bCk7CisgICAgaWYgKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkKKyAgICAgICAgcmV0
dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOworCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IHN1Y2Nlc3NMYWJlbCA9CisgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJl
bEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSk7CisgICAgICAgIAorICAg
IGxpbmtCdWZmZXIubGluayhzdGF0ZS5zdWNjZXNzLCBzdWNjZXNzTGFiZWwpOworCisgICAgbGlu
a0J1ZmZlci5saW5rKAorICAgICAgICBmYWlsdXJlLAorICAgICAgICBzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dD
YXNlKSk7CisgICAgCisgICAgZm9yIChhdXRvIGNhbGxiYWNrIDogc3RhdGUuY2FsbGJhY2tzKQor
ICAgICAgICBjYWxsYmFjayhsaW5rQnVmZmVyKTsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgY29kZSA9IEZJTkFMSVpFX0NPREVfRk9SKAorICAgICAgICBjb2RlQkxvY2ssIGxpbmtC
dWZmZXIsCisgICAgICAgICgiJXMiLCB0b0NTdHJpbmcoIkdldCBhY2Nlc3Mgc3R1YiBmb3IgIiwg
KmNvZGVCbG9jaywgIiAiLCBzdHViSW5mby5jb2RlT3JpZ2luLCAiIHdpdGggcmV0dXJuIHBvaW50
ICIsIHN1Y2Nlc3NMYWJlbCwgIjogIiwgKnRoaXMpKSk7CisKKyAgICBib29sIGRvZXNDYWxscyA9
IGZhbHNlOworICAgIGZvciAoYXV0byYgZW50cnkgOiBjYXNlcykKKyAgICAgICAgZG9lc0NhbGxz
IHw9IGVudHJ5LT5kb2VzQ2FsbHMoKTsKKyAgICAKKyAgICBtX3N0dWJSb3V0aW5lID0gY3JlYXRl
SklUU3R1YlJvdXRpbmUoY29kZSwgdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGRv
ZXNDYWxscyk7CisgICAgbV93YXRjaHBvaW50cyA9IHN0ZDo6bW92ZShzdGF0ZS53YXRjaHBvaW50
cyk7CisgICAgcmV0dXJuIGNvZGUuY29kZSgpOwogfQogCi1ib29sIFBvbHltb3JwaGljR2V0QnlJ
ZExpc3Q6OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFt
ZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK3ZvaWQgcHJpbnRJbnRlcm5h
bChQcmludFN0cmVhbSYgb3V0LCBBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBlIHR5cGUpCiB7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIGlmICghYXQoaSkudmlz
aXRXZWFrKHZtKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkxvYWQ6CisgICAgICAgIG91dC5wcmludCgiTG9hZCIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpUcmFuc2l0aW9uOgorICAg
ICAgICBvdXQucHJpbnQoIlRyYW5zaXRpb24iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
QWNjZXNzQ2FzZTo6UmVwbGFjZToKKyAgICAgICAgb3V0LnByaW50KCJSZXBsYWNlIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6Ok1pc3M6CisgICAgICAgIG91dC5wcmlu
dCgiTWlzcyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpHZXR0ZXI6
CisgICAgICAgIG91dC5wcmludCgiR2V0dGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEFjY2Vzc0Nhc2U6OlNldHRlcjoKKyAgICAgICAgb3V0LnByaW50KCJTZXR0ZXIiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6Q3VzdG9tR2V0dGVyOgorICAgICAgICBv
dXQucHJpbnQoIkN1c3RvbUdldHRlciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nl
c3NDYXNlOjpDdXN0b21TZXR0ZXI6CisgICAgICAgIG91dC5wcmludCgiQ3VzdG9tU2V0dGVyIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluSGl0OgorICAgICAgICBv
dXQucHJpbnQoIkluSGl0Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6
OkluTWlzczoKKyAgICAgICAgb3V0LnByaW50KCJJbk1pc3MiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgQWNjZXNzQ2FzZTo6QXJyYXlMZW5ndGg6CisgICAgICAgIG91dC5wcmludCgiQXJy
YXlMZW5ndGgiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6U3RyaW5n
TGVuZ3RoOgorICAgICAgICBvdXQucHJpbnQoIlN0cmluZ0xlbmd0aCIpOworICAgICAgICByZXR1
cm47CiAgICAgfQotICAgIHJldHVybiB0cnVlOworCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKIH0KIAotfSAvLyBuYW1lc3BhY2UgSlNDCit9IC8vIG5hbWVzcGFjZSBXVEYKIAog
I2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCShyZXZpc2lvbiAxODkzMjQpCShmcm9t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0Lmg6
MTg5MzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNj
ZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0X2gKKyNkZWZpbmUgUG9seW1vcnBoaWNHZXRCeUlkTGlzdF9oCisKKyNpZiBFTkFC
TEUoSklUKQorCisjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1i
bGVyLmgiCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIKKyNpbmNsdWRl
ICJPcGNvZGUuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb2RlQmxvY2s7CitzdHJ1Y3QgU3RydWN0
dXJlU3R1YkluZm87CisKK2NsYXNzIEdldEJ5SWRBY2Nlc3MgeworcHVibGljOgorICAgIGVudW0g
QWNjZXNzVHlwZSB7CisgICAgICAgIEludmFsaWQsCisgICAgICAgIFNpbXBsZUlubGluZSwgLy8g
VGhpcyBpcyB0aGUgcGF0Y2hlZCBpbmxpbmUgYWNjZXNzLgorICAgICAgICBTaW1wbGVTdHViLCAv
LyBUaGlzIGlzIGEgc3R1Yi4KKyAgICAgICAgV2F0Y2hlZFN0dWIsCisgICAgICAgIEdldHRlciwK
KyAgICAgICAgQ3VzdG9tR2V0dGVyLAorICAgICAgICBTaW1wbGVNaXNzLAorICAgIH07CisgICAg
CisgICAgR2V0QnlJZEFjY2VzcygpCisgICAgICAgIDogbV90eXBlKEludmFsaWQpCisgICAgewor
ICAgIH0KKyAgICAKKyAgICBHZXRCeUlkQWNjZXNzKAorICAgICAgICBWTSYsIEpTQ2VsbCogb3du
ZXIsIEFjY2Vzc1R5cGUsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+LCBTdHJ1Y3R1cmUqLAor
ICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCgpKTsKKyAgICAKKyAgICB+R2V0QnlJZEFjY2VzcygpOworICAgIAorICAg
IHN0YXRpYyBHZXRCeUlkQWNjZXNzIGZyb21TdHJ1Y3R1cmVTdHViSW5mbyhTdHJ1Y3R1cmVTdHVi
SW5mbyYpOworICAgIAorICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgIT0g
SW52YWxpZDsgfQorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7
IH0KKyAgICAKKyAgICBBY2Nlc3NUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0K
KyAgICAKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0
dXJlLmdldCgpOyB9CisgICAgCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQm
IGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9CisgICAgCisg
ICAgSklUU3R1YlJvdXRpbmUqIHN0dWJSb3V0aW5lKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVChpc1NldCgpKTsKKyAgICAgICAgcmV0dXJuIG1fc3R1YlJvdXRpbmUuZ2V0KCk7CisgICAg
fQorICAgIAorICAgIGJvb2wgZG9lc0NhbGxzKCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09IEdl
dHRlciB8fCB0eXBlKCkgPT0gQ3VzdG9tR2V0dGVyOyB9CisgICAgCisgICAgYm9vbCB2aXNpdFdl
YWsoVk0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOwor
ICAgIAorICAgIEFjY2Vzc1R5cGUgbV90eXBlOworICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+
IG1fc3RydWN0dXJlOworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9u
U2V0OworICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gbV9zdHViUm91dGluZTsKK307CisKK2Ns
YXNzIFBvbHltb3JwaGljR2V0QnlJZExpc3QgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworcHVibGljOgorICAgIC8vIEVpdGhlciBjcmVhdGVzIGEgbmV3IHBvbHltb3JwaGljIGdldCBs
aXN0LCBvciByZXR1cm5zIHRoZSBvbmUgdGhhdCBpcyBhbHJlYWR5IGluCisgICAgLy8gcGxhY2Uu
CisgICAgc3RhdGljIFBvbHltb3JwaGljR2V0QnlJZExpc3QqIGZyb20oU3RydWN0dXJlU3R1Yklu
Zm8mKTsKKyAgICAKKyAgICB+UG9seW1vcnBoaWNHZXRCeUlkTGlzdCgpOworICAgIAorICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciBjdXJyZW50U2xvd1BhdGhUYXJnZXQoU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIGFkZEFjY2Vzcyhjb25zdCBHZXRC
eUlkQWNjZXNzJik7CisgICAgCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9s
aXN0LmlzRW1wdHkoKTsgfQorICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2xp
c3Quc2l6ZSgpOyB9CisgICAgYm9vbCBpc0Z1bGwoKSBjb25zdDsKKyAgICBib29sIGlzQWxtb3N0
RnVsbCgpIGNvbnN0OyAvLyBUcnVlIGlmIGFkZGluZyBhbiBlbGVtZW50IHdvdWxkIG1ha2UgaXNG
dWxsKCkgdHJ1ZS4KKyAgICBjb25zdCBHZXRCeUlkQWNjZXNzJiBhdCh1bnNpZ25lZCBpKSBjb25z
dCB7IHJldHVybiBtX2xpc3RbaV07IH0KKyAgICBjb25zdCBHZXRCeUlkQWNjZXNzJiBvcGVyYXRv
cltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdFtpXTsgfQorICAgIAorICAgIGJv
b2wgZGlkU2VsZlBhdGNoaW5nKCkgY29uc3Q7IC8vIEFyZSBhbnkgb2YgdGhlIGFjY2Vzc2VzIFNp
bXBsZUlubGluZT8KKyAgICAKKyAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OworCitwcml2
YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7CisgICAgCisgICAgUG9seW1vcnBoaWNH
ZXRCeUlkTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyYpOworICAgIAorICAgIFZlY3RvcjxHZXRCeUlk
QWNjZXNzLCAyPiBtX2xpc3Q7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8v
IEVOQUJMRShKSVQpCisKKyNlbmRpZiAvLyBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0X2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNj
ZXNzLmgJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
b2x5bW9ycGhpY0FjY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw4IEBACiAgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIFBvbHltb3JwaGljR2V0QnlJZExpc3RfaAotI2Rl
ZmluZSBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0X2gKKyNpZm5kZWYgUG9seW1vcnBoaWNBY2Nlc3Nf
aAorI2RlZmluZSBQb2x5bW9ycGhpY0FjY2Vzc19oCiAKICNpZiBFTkFCTEUoSklUKQogCkBAIC0z
OCw5NiArMzgsMjYzIEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQ29kZUJsb2NrOworY2xh
c3MgUG9seW1vcnBoaWNBY2Nlc3M7CiBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm87CiAKLWNsYXNz
IEdldEJ5SWRBY2Nlc3Mgeworc3RydWN0IEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTsKKworY2xhc3Mg
QWNjZXNzQ2FzZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQWNjZXNzQ2FzZSk7CisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgZW51bSBBY2Nlc3NUeXBlIHsK
LSAgICAgICAgSW52YWxpZCwKLSAgICAgICAgU2ltcGxlSW5saW5lLCAvLyBUaGlzIGlzIHRoZSBw
YXRjaGVkIGlubGluZSBhY2Nlc3MuCi0gICAgICAgIFNpbXBsZVN0dWIsIC8vIFRoaXMgaXMgYSBz
dHViLgotICAgICAgICBXYXRjaGVkU3R1YiwKKyAgICAgICAgTG9hZCwKKyAgICAgICAgVHJhbnNp
dGlvbiwKKyAgICAgICAgUmVwbGFjZSwKKyAgICAgICAgTWlzcywKICAgICAgICAgR2V0dGVyLAor
ICAgICAgICBTZXR0ZXIsCiAgICAgICAgIEN1c3RvbUdldHRlciwKLSAgICAgICAgU2ltcGxlTWlz
cywKKyAgICAgICAgQ3VzdG9tU2V0dGVyLAorICAgICAgICBJbkhpdCwKKyAgICAgICAgSW5NaXNz
LAorICAgICAgICBBcnJheUxlbmd0aCwKKyAgICAgICAgU3RyaW5nTGVuZ3RoCiAgICAgfTsKLSAg
ICAKLSAgICBHZXRCeUlkQWNjZXNzKCkKLSAgICAgICAgOiBtX3R5cGUoSW52YWxpZCkKKworICAg
IHN0YXRpYyBib29sIGlzR2V0KEFjY2Vzc1R5cGUgdHlwZSkKICAgICB7CisgICAgICAgIHN3aXRj
aCAodHlwZSkgeworICAgICAgICBjYXNlIEludmFsaWQ6CisgICAgICAgIGNhc2UgVHJhbnNpdGlv
bjoKKyAgICAgICAgY2FzZSBSZXBsYWNlOgorICAgICAgICBjYXNlIFNldHRlcjoKKyAgICAgICAg
Y2FzZSBDdXN0b21TZXR0ZXI6CisgICAgICAgIGNhc2UgSW5IaXQ6CisgICAgICAgIGNhc2UgSW5N
aXNzOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIExvYWQ6CisgICAg
ICAgIGNhc2UgTWlzczoKKyAgICAgICAgY2FzZSBHZXR0ZXI6CisgICAgICAgIGNhc2UgQ3VzdG9t
R2V0dGVyOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KICAgICB9Ci0gICAg
Ci0gICAgR2V0QnlJZEFjY2VzcygKLSAgICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NU
eXBlLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiwgU3RydWN0dXJlKiwKKworICAgIHN0YXRp
YyBib29sIGlzUHV0KEFjY2Vzc1R5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlw
ZSkgeworICAgICAgICBjYXNlIEludmFsaWQ6CisgICAgICAgIGNhc2UgTG9hZDoKKyAgICAgICAg
Y2FzZSBNaXNzOgorICAgICAgICBjYXNlIEdldHRlcjoKKyAgICAgICAgY2FzZSBDdXN0b21HZXR0
ZXI6CisgICAgICAgIGNhc2UgSW5IaXQ6CisgICAgICAgIGNhc2UgSW5NaXNzOgorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIFRyYW5zaXRpb246CisgICAgICAgIGNhc2Ug
UmVwbGFjZToKKyAgICAgICAgY2FzZSBTZXR0ZXI6CisgICAgICAgIGNhc2UgQ3VzdG9tU2V0dGVy
OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0
aWMgYm9vbCBpc0luKEFjY2Vzc1R5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlw
ZSkgeworICAgICAgICBjYXNlIEludmFsaWQ6CisgICAgICAgIGNhc2UgTG9hZDoKKyAgICAgICAg
Y2FzZSBNaXNzOgorICAgICAgICBjYXNlIEdldHRlcjoKKyAgICAgICAgY2FzZSBDdXN0b21HZXR0
ZXI6CisgICAgICAgIGNhc2UgVHJhbnNpdGlvbjoKKyAgICAgICAgY2FzZSBSZXBsYWNlOgorICAg
ICAgICBjYXNlIFNldHRlcjoKKyAgICAgICAgY2FzZSBDdXN0b21TZXR0ZXI6CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgSW5IaXQ6CisgICAgICAgIGNhc2UgSW5NaXNz
OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gZ2V0KAorICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIs
IEFjY2Vzc1R5cGUsIFByb3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmUqLAorICAgICAgICBjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgp
LAorICAgICAgICBib29sIHZpYVByb3h5ID0gZmFsc2UsCisgICAgICAgIFdhdGNocG9pbnRTZXQq
IGFkZGl0aW9uYWxTZXQgPSBudWxscHRyLAorICAgICAgICBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVl
RnVuYyA9IG51bGxwdHIpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHJlcGxh
Y2UoCisgICAgICAgIFZNJiwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCk7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4g
dHJhbnNpdGlvbigKKyAgICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIG9sZFN0
cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwK
ICAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQoKSk7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gc2V0
dGVyKAorICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUsIFN0cnVjdHVyZSos
IFByb3BlcnR5T2Zmc2V0LAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCYsIFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0
cjxBY2Nlc3NDYXNlPiBpbigKKyAgICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBl
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQmID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSk7CisKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8QWNjZXNzQ0FzZT4gZ2V0TGVuZ3RoKFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNz
VHlwZSk7CiAgICAgCi0gICAgfkdldEJ5SWRBY2Nlc3MoKTsKKyAgICB+QWNjZXNzQ2FzZSgpOwog
ICAgIAotICAgIHN0YXRpYyBHZXRCeUlkQWNjZXNzIGZyb21TdHJ1Y3R1cmVTdHViSW5mbyhTdHJ1
Y3R1cmVTdHViSW5mbyYpOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4g
ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFZNJiwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlU3R1Yklu
Zm8mKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBjbG9uZSgpIGNvbnN0Owog
ICAgIAogICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgIT0gSW52YWxpZDsg
fQogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KICAgICAK
ICAgICBBY2Nlc3NUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQorICAgIGJvb2wg
dmlhUHJveHkoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+dmlhUHJv
eHkgOiBmYWxzZTsgfQogICAgIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7IH0KLSAgICAKLSAgICBjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25T
ZXQ7IH0KLSAgICAKLSAgICBKSVRTdHViUm91dGluZSogc3R1YlJvdXRpbmUoKSBjb25zdAorICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX2tpbmQg
PT0gVHJhbnNpdGlvbikKKyAgICAgICAgICAgIHJldHVybiBtX3N0cnVjdHVyZS0+cHJldmlvdXNJ
RCgpOworICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7CisgICAgfQorICAgIGJvb2wg
Z3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2soKSBjb25zdCB7IHJldHVybiAhdmlhUHJveHkoKTsgfQor
CisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUoKSBjb25zdAogICAgIHsKLSAgICAgICAgQVNT
RVJUKGlzU2V0KCkpOwotICAgICAgICByZXR1cm4gbV9zdHViUm91dGluZS5nZXQoKTsKKyAgICAg
ICAgQVNTRVJUKG1fa2luZCA9PSBUcmFuc2l0aW9uKTsKKyAgICAgICAgcmV0dXJuIG1fc3RydWN0
dXJlLmdldCgpOwogICAgIH0KICAgICAKLSAgICBib29sIGRvZXNDYWxscygpIGNvbnN0IHsgcmV0
dXJuIHR5cGUoKSA9PSBHZXR0ZXIgfHwgdHlwZSgpID09IEN1c3RvbUdldHRlcjsgfQorICAgIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y29uZGl0aW9uU2V0OyB9CisKKyAgICBXYXRjaHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0KCkgY29u
c3QgeyBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+YWRkaXRpb25hbFNldC5nZXQoKSA6IG51bGxw
dHI7IH0KICAgICAKLSAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OworICAgIGJvb2wgZG9l
c0NhbGxzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSgpKSB7CisgICAgICAg
IGNhc2UgR2V0dGVyOgorICAgICAgICBjYXNlIFNldHRlcjoKKyAgICAgICAgY2FzZSBDdXN0b21H
ZXR0ZXI6CisgICAgICAgIGNhc2UgQ3VzdG9tU2V0dGVyOgorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICB9CiAKKyAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbygpIGNvbnN0CisgICAg
eworICAgICAgICBpZiAoIW1fcmFyZURhdGEpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgcmV0dXJuIG1fcmFyZURhdGEtPmNhbGxMaW5rSW5mby5nZXQoKTsKKyAgICB9CisK
KyAgICAvLyBJZiB0aGlzIG1ldGhvZCByZXR1cm5zIHRydWUsIHRoZW4gaXQncyBhIGdvb2QgaWRl
YSB0byByZW1vdmUgJ290aGVyJyBmcm9tIHRoZSBhY2Nlc3Mgb25jZSAndGhpcycKKyAgICAvLyBp
cyBhZGRlZC4gVGhpcyBtZXRob2QgYXNzdW1lcyB0aGF0IGluIGNhc2Ugb2YgY29udHJhZGljdGlv
bnMsICd0aGlzJyByZXByZXNlbnRzIGEgbmV3ZXIsIGFuZCBzbworICAgIC8vIG1vcmUgdXNlZnVs
LCB0cnV0aC4gVGhpcyBtZXRob2QgY2FuIGJlIGNvbnNlcnZhdGl2ZTsgaXQgd2lsbCByZXR1cm4g
ZmFsc2Ugd2hlbiBpdCBkb3VidC4KKyAgICBib29sIGNhblJlcGxhY2UoY29uc3QgQWNjZXNzQ2Fz
ZSYgb3RoZXIpOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworICAg
IAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOworICAgIGZyaWVuZCBjbGFz
cyBQb2x5bW9ycGhpY0FjY2VzczsKKworICAgIEFjY2Vzc0Nhc2UoKTsKKworICAgIGJvb2wgdmlz
aXRXZWFrKFZNJikgY29uc3Q7CisKKyAgICAvLyBGYWxsIHRocm91Z2ggb24gc3VjY2Vzcy4gVHdv
IGtpbmRzIG9mIGZhaWx1cmVzIGFyZSBzdXBwb3J0ZWQ6IGZhbGwtdGhyb3VnaCwgd2hpY2ggbWVh
bnMgdGhhdCB3ZQorICAgIC8vIHNob3VsZCB0cnkgYSBkaWZmZXJlbnQgY2FzZTsgYW5kIGZhaWx1
cmUsIHdoaWNoIG1lYW5zIHRoYXQgdGhpcyB3YXMgdGhlIHJpZ2h0IGNhc2UgYnV0IGl0IG5lZWRz
CisgICAgLy8gaGVscCBmcm9tIHRoZSBzbG93IHBhdGguCisgICAgdm9pZCBnZW5lcmF0ZVdpdGhH
dWFyZChBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmLCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0JiBmYWxs
VGhyb3VnaCk7CisKKyAgICAvLyBGYWxsIHRocm91Z2ggb24gc3VjY2VzcywgYWRkIGEganVtcCB0
byB0aGUgZmFpbHVyZSBsaXN0IG9uIGZhaWx1cmUuCisgICAgdm9pZCBnZW5lcmF0ZShBY2Nlc3NH
ZW5lcmF0aW9uU3RhdGUmKTsKICAgICAKICAgICBBY2Nlc3NUeXBlIG1fdHlwZTsKKyAgICBQcm9w
ZXJ0eU9mZnNldCBtX29mZnNldDsKKworICAgIC8vIFVzdWFsbHkgdGhpcyBpcyB0aGUgc3RydWN0
dXJlIHRoYXQgd2UgZXhwZWN0IHRoZSBiYXNlIG9iamVjdCB0byBoYXZlLiBCdXQsIHRoaXMgaXMg
dGhlICpuZXcqCisgICAgLy8gc3RydWN0dXJlIGZvciBhIHRyYW5zaXRpb24gYW5kIHdlIHJlbHkg
b24gdGhlIGZhY3QgdGhhdCBpdCBoYXMgYSBzdHJvbmcgcmVmZXJlbmNlIHRvIHRoZSBvbGQKKyAg
ICAvLyBzdHJ1Y3R1cmUuIEZvciBwcm94aWVzLCB0aGlzIGlzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhl
IG9iamVjdCBiZWhpbmQgdGhlIHByb3h5LgogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1f
c3RydWN0dXJlOworCiAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25T
ZXQ7Ci0gICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBtX3N0dWJSb3V0aW5lOworCisgICAgY2xh
c3MgUmFyZURhdGEgeworICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBwdWJs
aWM6CisgICAgICAgIGJvb2wgdmlhUHJveHk7CisgICAgICAgIFJlZlB0cjxXYXRjaHBvaW50U2V0
PiBhZGRpdGlvbmFsU2V0OworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtJbmZvPiBj
YWxsTGlua0luZm87CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIFByb3BlcnR5U2xvdDo6
R2V0VmFsdWVGdW5jIGdldHRlcjsKKyAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdDo6UHV0VmFs
dWVGdW5jIHNldHRlcjsKKyAgICAgICAgICAgIHZvaWQqIG9wYXF1ZTsKKyAgICAgICAgfSBjdXN0
b21BY2Nlc3NvcjsKKyAgICB9OworCisgICAgc3RkOjp1bmlxdWVfcHRyPFJhcmVEYXRhPiBtX3Jh
cmVEYXRhOwogfTsKIAotY2xhc3MgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCB7CitjbGFzcyBQb2x5
bW9ycGhpY0FjY2VzcyB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUG9seW1vcnBoaWNBY2Nl
c3MpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIC8vIEVpdGhl
ciBjcmVhdGVzIGEgbmV3IHBvbHltb3JwaGljIGdldCBsaXN0LCBvciByZXR1cm5zIHRoZSBvbmUg
dGhhdCBpcyBhbHJlYWR5IGluCi0gICAgLy8gcGxhY2UuCi0gICAgc3RhdGljIFBvbHltb3JwaGlj
R2V0QnlJZExpc3QqIGZyb20oU3RydWN0dXJlU3R1YkluZm8mKTsKLSAgICAKLSAgICB+UG9seW1v
cnBoaWNHZXRCeUlkTGlzdCgpOwotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdXJy
ZW50U2xvd1BhdGhUYXJnZXQoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKSBjb25zdDsKLSAg
ICAKLSAgICB2b2lkIGFkZEFjY2Vzcyhjb25zdCBHZXRCeUlkQWNjZXNzJik7CisgICAgUG9seW1v
cnBoaWNBY2Nlc3MoKTsKKyAgICB+UG9seW1vcnBoaWNBY2Nlc3MoKTsKKworICAgIC8vIFRoaXMg
bWF5IHJldHVybiBudWxsLCBpbiB3aGljaCBjYXNlIHRoZSBvbGQgc3R1YiByb3V0aW5lIGlzIGxl
ZnQgaW50YWN0LiBUaGlzIG1ldGhvZCB3aWxsIGRvIHlvdQorICAgIC8vIGEgc29saWQgYW5kIG51
bGwtY2hlY2sgdGhlIEFjY2Vzc0Nhc2UsIHNvIHRoYXQgeW91IGNhbiBkbyB0aGluZ3MgbGlrZToK
KyAgICAvLworICAgIC8vIGNvZGVQdHIgPSBhY2Nlc3MtPnJlZ2VuZXJhdGVXaXRoQ2FzZSguLi4s
IEFjY2Vzc0Nhc2U6OmdldCguLi4pKQorICAgIC8vCisgICAgLy8gSWYgQWNjZXNzQ2FzZTo6Z2V0
KCkgcmV0dXJucyBudWxscHRyLCB0aGUgYWJvdmUgY2FsbCB3aWxsIHNpbXBseSByZXR1cm4gbnVs
bC4KKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVnZW5lcmF0ZVdpdGhDYXNlcygKKyAgICAg
ICAgVk0mLCBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIGNvbnN0IElkZW50aWZpZXIm
LCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+Pik7CisKKyAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgcmVnZW5lcmF0ZVdpdGhDYXNlKAorICAgICAgICBWTSYsIENvZGVCbG9jayos
IFN0cnVjdHVyZVN0dWJJbmZvJiwgY29uc3QgSWRlbnRpZmllciYsIHN0ZDo6dW5pcXVlX3B0cjxB
Y2Nlc3NDYXNlPik7CiAgICAgCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9s
aXN0LmlzRW1wdHkoKTsgfQogICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2xp
c3Quc2l6ZSgpOyB9Ci0gICAgYm9vbCBpc0Z1bGwoKSBjb25zdDsKLSAgICBib29sIGlzQWxtb3N0
RnVsbCgpIGNvbnN0OyAvLyBUcnVlIGlmIGFkZGluZyBhbiBlbGVtZW50IHdvdWxkIG1ha2UgaXNG
dWxsKCkgdHJ1ZS4KLSAgICBjb25zdCBHZXRCeUlkQWNjZXNzJiBhdCh1bnNpZ25lZCBpKSBjb25z
dCB7IHJldHVybiBtX2xpc3RbaV07IH0KLSAgICBjb25zdCBHZXRCeUlkQWNjZXNzJiBvcGVyYXRv
cltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdFtpXTsgfQotICAgIAotICAgIGJv
b2wgZGlkU2VsZlBhdGNoaW5nKCkgY29uc3Q7IC8vIEFyZSBhbnkgb2YgdGhlIGFjY2Vzc2VzIFNp
bXBsZUlubGluZT8KLSAgICAKKyAgICBjb25zdCBBY2Nlc3NDYXNlJiBhdCh1bnNpZ25lZCBpKSBj
b25zdCB7IHJldHVybiAqbV9saXN0W2ldOyB9CisgICAgY29uc3QgQWNjZXNzQ2FzZSYgb3BlcmF0
b3JbXSh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiAqbV9saXN0W2ldOyB9CisKKyAgICAvLyBJ
ZiB0aGlzIHJldHVybnMgZmFsc2UgdGhlbiB3ZSBhcmUgcmVxdWVzdGluZyBhIHJlc2V0IG9mIHRo
ZSBvd25pbmcgU3RydWN0dXJlU3R1YkluZm8uCiAgICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25z
dDsKIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKwogcHJpdmF0ZToK
KyAgICBmcmllbmQgY2xhc3MgQWNjZXNzQ2FzZTsKKyAgICBmcmllbmQgY2xhc3MgQWNjZXNzR2Vu
ZXJhdGlvblN0YXRlOwogICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7CiAgICAgCi0gICAgUG9s
eW1vcnBoaWNHZXRCeUlkTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyYpOworICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0ciByZWdlbmVyYXRlKAorICAgICAgICBWTSYsIENvZGVCbG9jayosIFN0cnVjdHVy
ZVN0dWJJbmZvJiwgY29uc3QgSWRlbnRpZmllciYsCisgICAgICAgIFZlY3RvcjxzdGQ6OnVuaXF1
ZV9wdHI8QWNjZXNzQ2FzZT4+JiBjYXNlcyk7CiAgICAgCi0gICAgVmVjdG9yPEdldEJ5SWRBY2Nl
c3MsIDI+IG1fbGlzdDsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+LCAy
PiBtX2xpc3Q7CisgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBtX3N0dWJSb3V0aW5lOworICAg
IHN0ZDo6dW5pcXVlX3B0cjxXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8+IG1fd2F0Y2hw
b2ludHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAorbmFtZXNwYWNlIFdURiB7CisKK3Zv
aWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QWNjZXNzQ2FzZTo6QWNjZXNzVHlw
ZSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAotI2Vu
ZGlmIC8vIFBvbHltb3JwaGljR2V0QnlJZExpc3RfaAorI2VuZGlmIC8vIFBvbHltb3JwaGljQWNj
ZXNzX2gKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGlj
R2V0QnlJZExpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcAkocmV2aXNpb24gMTg5NDkzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDE1NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0
LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgiCi0KLSNpZiBFTkFCTEUoSklUKQotCi0jaW5jbHVk
ZSAiQ29kZUJsb2NrLmgiCi0jaW5jbHVkZSAiSGVhcC5oIgotI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQot
R2V0QnlJZEFjY2Vzczo6R2V0QnlJZEFjY2VzcygKLSAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIs
IEFjY2Vzc1R5cGUgdHlwZSwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUs
Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0JiBjb25kaXRpb25TZXQpCi0gICAgOiBtX3R5cGUodHlwZSkKLSAgICAsIG1fc3RydWN0dXJl
KHZtLCBvd25lciwgc3RydWN0dXJlKQotICAgICwgbV9jb25kaXRpb25TZXQoY29uZGl0aW9uU2V0
KQotICAgICwgbV9zdHViUm91dGluZShzdHViUm91dGluZSkKLXsKLX0KLQotR2V0QnlJZEFjY2Vz
czo6fkdldEJ5SWRBY2Nlc3MoKQotewotfQotCi1HZXRCeUlkQWNjZXNzIEdldEJ5SWRBY2Nlc3M6
OmZyb21TdHJ1Y3R1cmVTdHViSW5mbyhTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0g
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGluaXRpYWxTbG93UGF0aCA9Ci0gICAgICAgIHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRh
Q2FsbFRvU2xvd0Nhc2UpOwotICAgIAotICAgIEdldEJ5SWRBY2Nlc3MgcmVzdWx0OwotICAgIAot
ICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9p
ZF9zZWxmKTsKLSAgICAKLSAgICByZXN1bHQubV90eXBlID0gU2ltcGxlSW5saW5lOwotICAgIHJl
c3VsdC5tX3N0cnVjdHVyZS5jb3B5RnJvbShzdHViSW5mby51LmdldEJ5SWRTZWxmLmJhc2VPYmpl
Y3RTdHJ1Y3R1cmUpOwotICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gSklUU3R1YlJvdXRpbmU6
OmNyZWF0ZVNlbGZNYW5hZ2VkUm91dGluZShpbml0aWFsU2xvd1BhdGgpOwotICAgIAotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgR2V0QnlJZEFjY2Vzczo6dmlzaXRXZWFrKFZNJiB2bSkg
Y29uc3QKLXsKLSAgICBpZiAobV9zdHJ1Y3R1cmUgJiYgIUhlYXA6OmlzTWFya2VkKG1fc3RydWN0
dXJlLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghbV9jb25kaXRpb25T
ZXQuYXJlU3RpbGxMaXZlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIW1fc3R1
YlJvdXRpbmUtPnZpc2l0V2Vhayh2bSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6UG9seW1vcnBoaWNHZXRCeUlk
TGlzdChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAgaWYgKHN0dWJJbmZvLmFj
Y2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgbV9s
aXN0LmFwcGVuZChHZXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0dXJlU3R1YkluZm8oc3R1YkluZm8p
KTsKLX0KLQotUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6
ZnJvbShTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAgaWYgKHN0dWJJbmZvLmFj
Y2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9saXN0KQotICAgICAgICByZXR1cm4gc3R1Yklu
Zm8udS5nZXRCeUlkTGlzdC5saXN0OwotICAgIAotICAgIEFTU0VSVCgKLSAgICAgICAgc3R1Yklu
Zm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYKLSAgICAgICAgfHwgc3R1Yklu
Zm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpOwotICAgIAotICAgIFBvbHltb3JwaGljR2V0
QnlJZExpc3QqIHJlc3VsdCA9IG5ldyBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KHN0dWJJbmZvKTsK
LSAgICAKLSAgICBzdHViSW5mby5pbml0R2V0QnlJZExpc3QocmVzdWx0KTsKLSAgICAKLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCi1Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojp+UG9seW1vcnBoaWNH
ZXRCeUlkTGlzdCgpIHsgfQotCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHIgUG9seW1vcnBoaWNHZXRC
eUlkTGlzdDo6Y3VycmVudFNsb3dQYXRoVGFyZ2V0KAotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbykgY29uc3QKLXsKLSAgICBpZiAoaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVs
dGFDYWxsVG9TbG93Q2FzZSk7Ci0gICAgcmV0dXJuIG1fbGlzdC5sYXN0KCkuc3R1YlJvdXRpbmUo
KS0+Y29kZSgpLmNvZGUoKTsKLX0KLQotdm9pZCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjphZGRB
Y2Nlc3MoY29uc3QgR2V0QnlJZEFjY2VzcyYgYWNjZXNzKQotewotICAgIEFTU0VSVCghaXNGdWxs
KCkpOwotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSByZXNpemluZyBvcHRpbWl6ZXMgZm9yIHNw
YWNlLCBub3QgdGltZS4KLSAgICBtX2xpc3QucmVzaXplVG9GaXQobV9saXN0LnNpemUoKSArIDEp
OwotICAgIG1fbGlzdC5sYXN0KCkgPSBhY2Nlc3M7Ci19Ci0KLWJvb2wgUG9seW1vcnBoaWNHZXRC
eUlkTGlzdDo6aXNGdWxsKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoc2l6ZSgpIDw9IFBPTFlNT1JQ
SElDX0xJU1RfQ0FDSEVfU0laRSk7Ci0gICAgcmV0dXJuIHNpemUoKSA9PSBQT0xZTU9SUEhJQ19M
SVNUX0NBQ0hFX1NJWkU7Ci19Ci0KLWJvb2wgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6aXNBbG1v
c3RGdWxsKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoc2l6ZSgpIDw9IFBPTFlNT1JQSElDX0xJU1Rf
Q0FDSEVfU0laRSk7Ci0gICAgcmV0dXJuIHNpemUoKSA+PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hF
X1NJWkUgLSAxOwotfQotCi1ib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmRpZFNlbGZQYXRj
aGluZygpIGNvbnN0Ci17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gc2l6ZSgpOyBpLS07KSB7Ci0g
ICAgICAgIGlmIChhdChpKS50eXBlKCkgPT0gR2V0QnlJZEFjY2Vzczo6U2ltcGxlSW5saW5lKQot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
Ym9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojp2aXNpdFdlYWsoVk0mIHZtKSBjb25zdAotewot
ICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUoKTsgaS0tOykgewotICAgICAgICBpZiAoIWF0KGkp
LnZpc2l0V2Vhayh2bSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJl
dHVybiB0cnVlOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEVOQUJMRShK
SVQpCi0KLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGlj
R2V0QnlJZExpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oCShyZXZpc2lvbiAxODk0OTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDEzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgUG9seW1vcnBoaWNHZXRCeUlkTGlzdF9oCi0j
ZGVmaW5lIFBvbHltb3JwaGljR2V0QnlJZExpc3RfaAotCi0jaWYgRU5BQkxFKEpJVCkKLQotI2lu
Y2x1ZGUgIkNvZGVPcmlnaW4uaCIKLSNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgotI2luY2x1
ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiCi0jaW5jbHVkZSAiT3Bjb2RlLmgiCi0j
aW5jbHVkZSAiU3RydWN0dXJlLmgiCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3Bh
Y2UgSlNDIHsKLQotY2xhc3MgQ29kZUJsb2NrOwotc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvOwot
Ci1jbGFzcyBHZXRCeUlkQWNjZXNzIHsKLXB1YmxpYzoKLSAgICBlbnVtIEFjY2Vzc1R5cGUgewot
ICAgICAgICBJbnZhbGlkLAotICAgICAgICBTaW1wbGVJbmxpbmUsIC8vIFRoaXMgaXMgdGhlIHBh
dGNoZWQgaW5saW5lIGFjY2Vzcy4KLSAgICAgICAgU2ltcGxlU3R1YiwgLy8gVGhpcyBpcyBhIHN0
dWIuCi0gICAgICAgIFdhdGNoZWRTdHViLAotICAgICAgICBHZXR0ZXIsCi0gICAgICAgIEN1c3Rv
bUdldHRlciwKLSAgICAgICAgU2ltcGxlTWlzcywKLSAgICB9OwotICAgIAotICAgIEdldEJ5SWRB
Y2Nlc3MoKQotICAgICAgICA6IG1fdHlwZShJbnZhbGlkKQotICAgIHsKLSAgICB9Ci0gICAgCi0g
ICAgR2V0QnlJZEFjY2VzcygKLSAgICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBl
LCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiwgU3RydWN0dXJlKiwKLSAgICAgICAgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQo
KSk7Ci0gICAgCi0gICAgfkdldEJ5SWRBY2Nlc3MoKTsKLSAgICAKLSAgICBzdGF0aWMgR2V0QnlJ
ZEFjY2VzcyBmcm9tU3RydWN0dXJlU3R1YkluZm8oU3RydWN0dXJlU3R1YkluZm8mKTsKLSAgICAK
LSAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV90eXBlICE9IEludmFsaWQ7IH0KLSAg
ICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9Ci0gICAgCi0gICAg
QWNjZXNzVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAgCi0gICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZS5nZXQoKTsgfQot
ICAgIAotICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQo
KSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQotICAgIAotICAgIEpJVFN0dWJSb3V0
aW5lKiBzdHViUm91dGluZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaXNTZXQoKSk7
Ci0gICAgICAgIHJldHVybiBtX3N0dWJSb3V0aW5lLmdldCgpOwotICAgIH0KLSAgICAKLSAgICBi
b29sIGRvZXNDYWxscygpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBHZXR0ZXIgfHwgdHlwZSgp
ID09IEN1c3RvbUdldHRlcjsgfQotICAgIAotICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgY29uc3Q7
Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKLSAgICAKLSAgICBBY2Nl
c3NUeXBlIG1fdHlwZTsKLSAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cnVjdHVyZTsK
LSAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKLSAgICBSZWZQ
dHI8SklUU3R1YlJvdXRpbmU+IG1fc3R1YlJvdXRpbmU7Ci19OwotCi1jbGFzcyBQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAg
ICAvLyBFaXRoZXIgY3JlYXRlcyBhIG5ldyBwb2x5bW9ycGhpYyBnZXQgbGlzdCwgb3IgcmV0dXJu
cyB0aGUgb25lIHRoYXQgaXMgYWxyZWFkeSBpbgotICAgIC8vIHBsYWNlLgotICAgIHN0YXRpYyBQ
b2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBmcm9tKFN0cnVjdHVyZVN0dWJJbmZvJik7Ci0gICAgCi0g
ICAgflBvbHltb3JwaGljR2V0QnlJZExpc3QoKTsKLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgY3VycmVudFNsb3dQYXRoVGFyZ2V0KFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykg
Y29uc3Q7Ci0gICAgCi0gICAgdm9pZCBhZGRBY2Nlc3MoY29uc3QgR2V0QnlJZEFjY2VzcyYpOwot
ICAgIAotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5pc0VtcHR5KCk7
IH0KLSAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9saXN0LnNpemUoKTsgfQot
ICAgIGJvb2wgaXNGdWxsKCkgY29uc3Q7Ci0gICAgYm9vbCBpc0FsbW9zdEZ1bGwoKSBjb25zdDsg
Ly8gVHJ1ZSBpZiBhZGRpbmcgYW4gZWxlbWVudCB3b3VsZCBtYWtlIGlzRnVsbCgpIHRydWUuCi0g
ICAgY29uc3QgR2V0QnlJZEFjY2VzcyYgYXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9s
aXN0W2ldOyB9Ci0gICAgY29uc3QgR2V0QnlJZEFjY2VzcyYgb3BlcmF0b3JbXSh1bnNpZ25lZCBp
KSBjb25zdCB7IHJldHVybiBtX2xpc3RbaV07IH0KLSAgICAKLSAgICBib29sIGRpZFNlbGZQYXRj
aGluZygpIGNvbnN0OyAvLyBBcmUgYW55IG9mIHRoZSBhY2Nlc3NlcyBTaW1wbGVJbmxpbmU/Ci0g
ICAgCi0gICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBmcmll
bmQgY2xhc3MgQ29kZUJsb2NrOwotICAgIAotICAgIFBvbHltb3JwaGljR2V0QnlJZExpc3QoU3Ry
dWN0dXJlU3R1YkluZm8mKTsKLSAgICAKLSAgICBWZWN0b3I8R2V0QnlJZEFjY2VzcywgMj4gbV9s
aXN0OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoSklUKQot
Ci0jZW5kaWYgLy8gUG9seW1vcnBoaWNHZXRCeUlkTGlzdF9oCi0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlz
dC5jcHAJKHJldmlzaW9uIDE4OTQ5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNTYgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUG9seW1vcnBoaWNQdXRCeUlk
TGlzdC5oIgotCi0jaWYgRU5BQkxFKEpJVCkKLQotI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZv
LmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1QdXRCeUlkQWNjZXNzIFB1dEJ5SWRBY2Nlc3M6OmZy
b21TdHJ1Y3R1cmVTdHViSW5mbyhTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGluaXRpYWxTbG93UGF0aCA9Ci0gICAgICAgIHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2Fs
bFRvU2xvd0Nhc2UpOwotICAgIAotICAgIFB1dEJ5SWRBY2Nlc3MgcmVzdWx0OwotICAgIAotICAg
IHN3aXRjaCAoc3R1YkluZm8uYWNjZXNzVHlwZSkgewotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9p
ZF9yZXBsYWNlOgotICAgICAgICByZXN1bHQubV90eXBlID0gUmVwbGFjZTsKLSAgICAgICAgcmVz
dWx0Lm1fb2xkU3RydWN0dXJlLmNvcHlGcm9tKHN0dWJJbmZvLnUucHV0QnlJZFJlcGxhY2UuYmFz
ZU9iamVjdFN0cnVjdHVyZSk7Ci0gICAgICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gSklUU3R1
YlJvdXRpbmU6OmNyZWF0ZVNlbGZNYW5hZ2VkUm91dGluZShpbml0aWFsU2xvd1BhdGgpOwotICAg
ICAgICBicmVhazsKLSAgICAgICAgCi0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRp
b25fZGlyZWN0OgotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoK
LSAgICAgICAgcmVzdWx0Lm1fdHlwZSA9IFRyYW5zaXRpb247Ci0gICAgICAgIHJlc3VsdC5tX29s
ZFN0cnVjdHVyZS5jb3B5RnJvbShzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3Vz
U3RydWN0dXJlKTsKLSAgICAgICAgcmVzdWx0Lm1fbmV3U3RydWN0dXJlLmNvcHlGcm9tKHN0dWJJ
bmZvLnUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlKTsKLSAgICAgICAgcmVzdWx0Lm1fY29u
ZGl0aW9uU2V0ID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmFkb3B0UmF3UG9pbnRlcigK
LSAgICAgICAgICAgIHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0
KTsKLSAgICAgICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBzdHViSW5mby5zdHViUm91dGluZTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLWJvb2wgUHV0QnlJZEFjY2Vzczo6dmlzaXRXZWFrKFZNJiB2bSkgY29uc3QKLXsKLSAgICBp
ZiAoIW1fY29uZGl0aW9uU2V0LmFyZVN0aWxsTGl2ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgCi0gICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICBjYXNlIFJlcGxhY2U6Ci0gICAgICAg
IGlmICghSGVhcDo6aXNNYXJrZWQobV9vbGRTdHJ1Y3R1cmUuZ2V0KCkpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFRyYW5zaXRpb246Ci0gICAg
ICAgIGlmICghSGVhcDo6aXNNYXJrZWQobV9vbGRTdHJ1Y3R1cmUuZ2V0KCkpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fbmV3U3RydWN0
dXJlLmdldCgpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBTZXR0ZXI6Ci0gICAgY2FzZSBDdXN0b21TZXR0ZXI6Ci0gICAgICAgIGlmICghSGVh
cDo6aXNNYXJrZWQobV9vbGRTdHJ1Y3R1cmUuZ2V0KCkpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmICgh
bV9zdHViUm91dGluZS0+dmlzaXRXZWFrKHZtKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IHJldHVybiB0cnVlOwotfQotCi1Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0OjpQb2x5bW9ycGhpY1B1
dEJ5SWRMaXN0KAotICAgIFB1dEtpbmQgcHV0S2luZCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvKQotICAgIDogbV9raW5kKHB1dEtpbmQpCi17Ci0gICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5
cGUgIT0gYWNjZXNzX3Vuc2V0KQotICAgICAgICBtX2xpc3QuYXBwZW5kKFB1dEJ5SWRBY2Nlc3M6
OmZyb21TdHJ1Y3R1cmVTdHViSW5mbyhzdHViSW5mbykpOwotfQotCi1Qb2x5bW9ycGhpY1B1dEJ5
SWRMaXN0KiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojpmcm9tKAotICAgIFB1dEtpbmQgcHV0S2lu
ZCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIGlmIChzdHViSW5mby5hY2Nl
c3NUeXBlID09IGFjY2Vzc19wdXRfYnlfaWRfbGlzdCkKLSAgICAgICAgcmV0dXJuIHN0dWJJbmZv
LnUucHV0QnlJZExpc3QubGlzdDsKLSAgICAKLSAgICBBU1NFUlQoc3R1YkluZm8uYWNjZXNzVHlw
ZSA9PSBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2UKLSAgICAgICAgfHwgc3R1YkluZm8uYWNjZXNz
VHlwZSA9PSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsCi0gICAgICAgIHx8IHN0
dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdAot
ICAgICAgICB8fCBzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc191bnNldCk7Ci0gICAgCi0g
ICAgUG9seW1vcnBoaWNQdXRCeUlkTGlzdCogcmVzdWx0ID0KLSAgICAgICAgbmV3IFBvbHltb3Jw
aGljUHV0QnlJZExpc3QocHV0S2luZCwgc3R1YkluZm8pOwotICAgIAotICAgIHN0dWJJbmZvLmlu
aXRQdXRCeUlkTGlzdChyZXN1bHQpOwotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVBv
bHltb3JwaGljUHV0QnlJZExpc3Q6On5Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KCkgeyB9Ci0KLWJv
b2wgUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6aXNGdWxsKCkgY29uc3QKLXsKLSAgICBBU1NFUlQo
c2l6ZSgpIDw9IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSk7Ci0gICAgcmV0dXJuIHNpemUo
KSA9PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkU7Ci19Ci0KLWJvb2wgUG9seW1vcnBoaWNQ
dXRCeUlkTGlzdDo6aXNBbG1vc3RGdWxsKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoc2l6ZSgpIDw9
IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSk7Ci0gICAgcmV0dXJuIHNpemUoKSA+PSBQT0xZ
TU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUgLSAxOwotfQotCi12b2lkIFBvbHltb3JwaGljUHV0QnlJ
ZExpc3Q6OmFkZEFjY2Vzcyhjb25zdCBQdXRCeUlkQWNjZXNzJiBwdXRCeUlkQWNjZXNzKQotewot
ICAgIEFTU0VSVCghaXNGdWxsKCkpOwotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSByZXNpemlu
ZyBvcHRpbWl6ZXMgZm9yIHNwYWNlLCBub3QgdGltZS4KLSAgICBtX2xpc3QucmVzaXplVG9GaXQo
bV9saXN0LnNpemUoKSArIDEpOwotICAgIG1fbGlzdC5sYXN0KCkgPSBwdXRCeUlkQWNjZXNzOwot
fQotCi1ib29sIFBvbHltb3JwaGljUHV0QnlJZExpc3Q6OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0
Ci17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemUoKTsgKytpKSB7Ci0gICAgICAg
IGlmICghYXQoaSkudmlzaXRXZWFrKHZtKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYg
Ly8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY1B1dEJ5SWRMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuaAkocmV2aXNpb24gMTg5NDkzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuaAko
d29ya2luZyBjb3B5KQpAQCAtMSwyMTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MiwgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFBvbHltb3JwaGljUHV0
QnlJZExpc3RfaAotI2RlZmluZSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0X2gKLQotI2lmIEVOQUJM
RShKSVQpCi0KLSNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCi0jaW5jbHVkZSAiTWFjcm9Bc3NlbWJs
ZXIuaCIKLSNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgotI2luY2x1ZGUg
Ik9wY29kZS5oIgotI2luY2x1ZGUgIlB1dEtpbmQuaCIKLSNpbmNsdWRlICJQdXRQcm9wZXJ0eVNs
b3QuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0K
LW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBDb2RlQmxvY2s7Ci1zdHJ1Y3QgU3RydWN0dXJlU3R1
YkluZm87Ci0KLWNsYXNzIFB1dEJ5SWRBY2Nlc3MgewotcHVibGljOgotICAgIGVudW0gQWNjZXNz
VHlwZSB7Ci0gICAgICAgIEludmFsaWQsCi0gICAgICAgIFRyYW5zaXRpb24sCi0gICAgICAgIFJl
cGxhY2UsCi0gICAgICAgIFNldHRlciwKLSAgICAgICAgQ3VzdG9tU2V0dGVyCi0gICAgfTsKLSAg
ICAKLSAgICBQdXRCeUlkQWNjZXNzKCkKLSAgICAgICAgOiBtX3R5cGUoSW52YWxpZCkKLSAgICB7
Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyBQdXRCeUlkQWNjZXNzIHRyYW5zaXRpb24oCi0gICAg
ICAgIFZNJiB2bSwKLSAgICAgICAgSlNDZWxsKiBvd25lciwKLSAgICAgICAgU3RydWN0dXJlKiBv
bGRTdHJ1Y3R1cmUsCi0gICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLAotICAgICAgICBj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LAotICAgICAgICBQ
YXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSkKLSAgICB7Ci0gICAgICAgIFB1
dEJ5SWRBY2Nlc3MgcmVzdWx0OwotICAgICAgICByZXN1bHQubV90eXBlID0gVHJhbnNpdGlvbjsK
LSAgICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlLnNldCh2bSwgb3duZXIsIG9sZFN0cnVjdHVy
ZSk7Ci0gICAgICAgIHJlc3VsdC5tX25ld1N0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBuZXdTdHJ1
Y3R1cmUpOwotICAgICAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7Ci0g
ICAgICAgIHJlc3VsdC5tX2N1c3RvbVNldHRlciA9IDA7Ci0gICAgICAgIHJlc3VsdC5tX3N0dWJS
b3V0aW5lID0gc3R1YlJvdXRpbmU7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0g
ICAgc3RhdGljIFB1dEJ5SWRBY2Nlc3MgcmVwbGFjZSgKLSAgICAgICAgVk0mIHZtLAotICAgICAg
ICBKU0NlbGwqIG93bmVyLAotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKLSAgICAgICAg
UGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUpCi0gICAgewotICAgICAgICBQ
dXRCeUlkQWNjZXNzIHJlc3VsdDsKLSAgICAgICAgcmVzdWx0Lm1fdHlwZSA9IFJlcGxhY2U7Ci0g
ICAgICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOwot
ICAgICAgICByZXN1bHQubV9jdXN0b21TZXR0ZXIgPSAwOwotICAgICAgICByZXN1bHQubV9zdHVi
Um91dGluZSA9IHN0dWJSb3V0aW5lOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQot
Ci0gICAgc3RhdGljIFB1dEJ5SWRBY2Nlc3Mgc2V0dGVyKAotICAgICAgICBWTSYgdm0sCi0gICAg
ICAgIEpTQ2VsbCogb3duZXIsCi0gICAgICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSwKLSAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCi0gICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCi0gICAgICAgIFB1dFByb3BlcnR5U2xvdDo6UHV0VmFs
dWVGdW5jIGN1c3RvbVNldHRlciwKLSAgICAgICAgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4g
c3R1YlJvdXRpbmUpCi0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChhY2Nlc3NUeXBlID09
IFNldHRlciB8fCBhY2Nlc3NUeXBlID09IEN1c3RvbVNldHRlcik7Ci0gICAgICAgIFB1dEJ5SWRB
Y2Nlc3MgcmVzdWx0OwotICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuc2V0KHZtLCBvd25l
ciwgc3RydWN0dXJlKTsKLSAgICAgICAgcmVzdWx0Lm1fdHlwZSA9IGFjY2Vzc1R5cGU7Ci0gICAg
ICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKLSAgICAgICAgcmVzdWx0
Lm1fY3VzdG9tU2V0dGVyID0gY3VzdG9tU2V0dGVyOwotICAgICAgICByZXN1bHQubV9zdHViUm91
dGluZSA9IHN0dWJSb3V0aW5lOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAK
LSAgICBzdGF0aWMgUHV0QnlJZEFjY2VzcyBmcm9tU3RydWN0dXJlU3R1YkluZm8oU3RydWN0dXJl
U3R1YkluZm8mKTsKLSAgICAKLSAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV90eXBl
ICE9IEludmFsaWQ7IH0KLSAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1Nl
dCgpOyB9Ci0gICAgCi0gICAgQWNjZXNzVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBl
OyB9Ci0gICAgCi0gICAgYm9vbCBpc1RyYW5zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3R5cGUg
PT0gVHJhbnNpdGlvbjsgfQotICAgIGJvb2wgaXNSZXBsYWNlKCkgY29uc3QgeyByZXR1cm4gbV90
eXBlID09IFJlcGxhY2U7IH0KLSAgICBib29sIGlzU2V0dGVyKCkgY29uc3QgeyByZXR1cm4gbV90
eXBlID09IFNldHRlcjsgfQotICAgIGJvb2wgaXNDdXN0b20oKSBjb25zdCB7IHJldHVybiBtX3R5
cGUgPT0gQ3VzdG9tU2V0dGVyOyB9Ci0gICAgCi0gICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUo
KSBjb25zdAotICAgIHsKLSAgICAgICAgLy8gVXNpbmcgdGhpcyBpbnN0ZWFkIG9mIGlzU2V0KCkg
dG8gbWFrZSB0aGlzIGFzc2VydGlvbiByb2J1c3QgYWdhaW5zdCB0aGUgcG9zc2liaWxpdHkKLSAg
ICAgICAgLy8gb2YgYWRkaXRpb25hbCBhY2Nlc3MgdHlwZXMgYmVpbmcgYWRkZWQuCi0gICAgICAg
IEFTU0VSVChpc1RyYW5zaXRpb24oKSB8fCBpc1JlcGxhY2UoKSB8fCBpc1NldHRlcigpIHx8IGlz
Q3VzdG9tKCkpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIG1fb2xkU3RydWN0dXJlLmdldCgp
OwotICAgIH0KLSAgICAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0Ci0gICAgewot
ICAgICAgICBBU1NFUlQoaXNSZXBsYWNlKCkgfHwgaXNTZXR0ZXIoKSB8fCBpc0N1c3RvbSgpKTsK
LSAgICAgICAgcmV0dXJuIG1fb2xkU3RydWN0dXJlLmdldCgpOwotICAgIH0KLSAgICAKLSAgICBT
dHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaXNU
cmFuc2l0aW9uKCkpOwotICAgICAgICByZXR1cm4gbV9uZXdTdHJ1Y3R1cmUuZ2V0KCk7Ci0gICAg
fQotICAgIAotICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25T
ZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQotICAgIAotICAgIEpJVFN0dWJS
b3V0aW5lKiBzdHViUm91dGluZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaXNUcmFu
c2l0aW9uKCkgfHwgaXNSZXBsYWNlKCkgfHwgaXNTZXR0ZXIoKSB8fCBpc0N1c3RvbSgpKTsKLSAg
ICAgICAgcmV0dXJuIG1fc3R1YlJvdXRpbmUuZ2V0KCk7Ci0gICAgfQotCi0gICAgUHV0UHJvcGVy
dHlTbG90OjpQdXRWYWx1ZUZ1bmMgY3VzdG9tU2V0dGVyKCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IEFTU0VSVChpc0N1c3RvbSgpKTsKLSAgICAgICAgcmV0dXJuIG1fY3VzdG9tU2V0dGVyOwotICAg
IH0KLQotICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgY29uc3Q7Ci0gICAgCi1wcml2YXRlOgotICAg
IGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7Ci0gICAgCi0gICAgQWNjZXNzVHlwZSBtX3R5cGU7Ci0g
ICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9vbGRTdHJ1Y3R1cmU7Ci0gICAgV3JpdGVCYXJy
aWVyPFN0cnVjdHVyZT4gbV9uZXdTdHJ1Y3R1cmU7Ci0gICAgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQgbV9jb25kaXRpb25TZXQ7Ci0gICAgUHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmMg
bV9jdXN0b21TZXR0ZXI7Ci0gICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBtX3N0dWJSb3V0aW5l
OwotfTsKLQotY2xhc3MgUG9seW1vcnBoaWNQdXRCeUlkTGlzdCB7Ci0gICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgLy8gRWl0aGVyIGNyZWF0ZXMgYSBuZXcgcG9seW1v
cnBoaWMgcHV0IGxpc3QsIG9yIHJldHVybnMgdGhlIG9uZSB0aGF0IGlzIGFscmVhZHkKLSAgICAv
LyBpbiBwbGFjZS4KLSAgICBzdGF0aWMgUG9seW1vcnBoaWNQdXRCeUlkTGlzdCogZnJvbShQdXRL
aW5kLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwotICAgIAotICAgIH5Qb2x5bW9ycGhpY1B1dEJ5SWRM
aXN0KCk7Ci0gICAgCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN1cnJlbnRTbG93UGF0aFRh
cmdldCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9saXN0Lmxhc3QoKS5zdHViUm91
dGluZSgpLT5jb2RlKCkuY29kZSgpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGFkZEFjY2Vzcyhj
b25zdCBQdXRCeUlkQWNjZXNzJik7Ci0gICAgCi0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9saXN0LmlzRW1wdHkoKTsgfQotICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX2xpc3Quc2l6ZSgpOyB9Ci0gICAgYm9vbCBpc0Z1bGwoKSBjb25zdDsKLSAgICBib29s
IGlzQWxtb3N0RnVsbCgpIGNvbnN0OyAvLyBUcnVlIGlmIGFkZGluZyBhbiBlbGVtZW50IHdvdWxk
IG1ha2UgaXNGdWxsKCkgdHJ1ZS4KLSAgICBjb25zdCBQdXRCeUlkQWNjZXNzJiBhdCh1bnNpZ25l
ZCBpKSBjb25zdCB7IHJldHVybiBtX2xpc3RbaV07IH0KLSAgICBjb25zdCBQdXRCeUlkQWNjZXNz
JiBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdFtpXTsgfQotICAg
IAotICAgIFB1dEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQotICAgIAotICAg
IGJvb2wgdmlzaXRXZWFrKFZNJikgY29uc3Q7Ci0gICAgCi1wcml2YXRlOgotICAgIGZyaWVuZCBj
bGFzcyBDb2RlQmxvY2s7Ci0gICAgCi0gICAgLy8gSW5pdGlhbGl6ZSBmcm9tIGEgc3R1YiBpbmZv
OyB0aGlzIHdpbGwgcGxhY2Ugb25lIGVsZW1lbnQgaW4gdGhlIGxpc3QgYW5kIGl0IHdpbGwKLSAg
ICAvLyBiZSBjcmVhdGVkIGJ5IGNvbnZlcnRpbmcgdGhlIHN0dWIgaW5mbydzIHB1dCBieSBpZCBh
Y2Nlc3MgaW5mb3JtYXRpb24gaW50byBvdXIKLSAgICAvLyBQdXRCeUlkQWNjZXNzLgotICAgIFBv
bHltb3JwaGljUHV0QnlJZExpc3QoUHV0S2luZCwgU3RydWN0dXJlU3R1YkluZm8mKTsKLQotICAg
IFZlY3RvcjxQdXRCeUlkQWNjZXNzLCAyPiBtX2xpc3Q7Ci0gICAgUHV0S2luZCBtX2tpbmQ7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0KLSNlbmRp
ZiAvLyBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0X2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMTg5NDkzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiTExJbnREYXRhLmgiCiAjaW5j
bHVkZSAiTG93TGV2ZWxJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNp
bmNsdWRlICJQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNB
Y2Nlc3MuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVDaGFp
bi5oIgogI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgpAQCAtMTU0LDE0ICsxNTQsMTQgQEAgUHV0
QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgIGlmICghc3R1YkluZm8t
PnNlZW4pCiAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKCk7CiAgICAgCi0gICAgc3dpdGNo
IChzdHViSW5mby0+YWNjZXNzVHlwZSkgewotICAgIGNhc2UgYWNjZXNzX3Vuc2V0OgorICAgIHN3
aXRjaCAoc3R1YkluZm8tPmNhY2hlVHlwZSkgeworICAgIGNhc2UgQ2FjaGVUeXBlOjpVbnNldDoK
ICAgICAgICAgLy8gSWYgdGhlIEpJVCBzYXcgaXQgYnV0IGRpZG4ndCBvcHRpbWl6ZSBpdCwgdGhl
biBhc3N1bWUgdGhhdCB0aGlzIHRha2VzIHNsb3cgcGF0aC4KICAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgICAgIAotICAgIGNhc2UgYWNjZXNzX3B1dF9i
eV9pZF9yZXBsYWNlOiB7CisgICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOiB7CiAg
ICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9Ci0gICAgICAgICAgICBzdHViSW5mby0+dS5w
dXRCeUlkUmVwbGFjZS5iYXNlT2JqZWN0U3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsK
KyAgICAgICAgICAgIHN0dWJJbmZvLT51LmJ5SWRSZXBsYWNlLmJhc2VPYmplY3RTdHJ1Y3R1cmUt
PmdldENvbmN1cnJlbnRseSh1aWQpOwogICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQp
KSB7CiAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoCiAgICAgICAg
ICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZS5n
ZXQoKSwgb2Zmc2V0KTsKQEAgLTE2OSw1MSArMTY5LDI2IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJ
ZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNT
bG93UGF0aCk7CiAgICAgfQogICAgICAgICAKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJh
bnNpdGlvbl9ub3JtYWw6Ci0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGly
ZWN0OiB7Ci0gICAgICAgIEFTU0VSVChzdHViSW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2
aW91c1N0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQo
KSk7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IAotICAgICAgICAgICAgc3R1Yklu
Zm8tPnUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsK
LSAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgewotICAgICAgICAgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0ID0gT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQ6OmZyb21SYXdQb2ludGVyKAotICAgICAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5
SWRUcmFuc2l0aW9uLnJhd0NvbmRpdGlvblNldCk7Ci0gICAgICAgICAgICBpZiAoIWNvbmRpdGlv
blNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
UHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlk
VmFyaWFudDo6dHJhbnNpdGlvbigKLSAgICAgICAgICAgICAgICBzdHViSW5mby0+dS5wdXRCeUlk
VHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZS5nZXQoKSwKLSAgICAgICAgICAgICAgICBzdHVi
SW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUuZ2V0KCksCi0gICAgICAgICAgICAg
ICAgY29uZGl0aW9uU2V0LCBvZmZzZXQpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgIH0KLSAgICAgICAgCi0gICAgY2FzZSBhY2Nl
c3NfcHV0X2J5X2lkX2xpc3Q6IHsKLSAgICAgICAgUG9seW1vcnBoaWNQdXRCeUlkTGlzdCogbGlz
dCA9IHN0dWJJbmZvLT51LnB1dEJ5SWRMaXN0Lmxpc3Q7CisgICAgY2FzZSBDYWNoZVR5cGU6OlN0
dWI6IHsKKyAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3MqIGxpc3QgPSBzdHViSW5mby0+dS5zdHVi
OwogICAgICAgICAKICAgICAgICAgUHV0QnlJZFN0YXR1cyByZXN1bHQ7CiAgICAgICAgIHJlc3Vs
dC5tX3N0YXRlID0gU2ltcGxlOwogICAgICAgICAKICAgICAgICAgU3RhdGUgc2xvd1BhdGhTdGF0
ZSA9IFRha2VzU2xvd1BhdGg7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0
LT5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgY29uc3QgUHV0QnlJZEFjY2VzcyYgYWNjZXNz
ID0gbGlzdC0+YXQoaSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN3aXRjaCAoYWNjZXNz
LnR5cGUoKSkgewotICAgICAgICAgICAgY2FzZSBQdXRCeUlkQWNjZXNzOjpTZXR0ZXI6Ci0gICAg
ICAgICAgICBjYXNlIFB1dEJ5SWRBY2Nlc3M6OkN1c3RvbVNldHRlcjoKKyAgICAgICAgICAgIGNv
bnN0IEFjY2Vzc0Nhc2UmIGFjY2VzcyA9IGxpc3QtPmF0KGkpOworICAgICAgICAgICAgaWYgKGFj
Y2Vzcy5kb2VzQ2FsbHMoKSkKICAgICAgICAgICAgICAgICBzbG93UGF0aFN0YXRlID0gTWFrZXND
YWxsczsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5zaXplKCk7ICsraSkgewotICAg
ICAgICAgICAgY29uc3QgUHV0QnlJZEFjY2VzcyYgYWNjZXNzID0gbGlzdC0+YXQoaSk7CisgICAg
ICAgICAgICBjb25zdCBBY2Nlc3NDYXNlJiBhY2Nlc3MgPSBsaXN0LT5hdChpKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQgdmFyaWFudDsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgc3dpdGNoIChhY2Nlc3MudHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIFB1
dEJ5SWRBY2Nlc3M6OlJlcGxhY2U6IHsKKyAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6UmVw
bGFjZTogewogICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYWNjZXNzLnN0
cnVjdHVyZSgpOwogICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVj
dHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CiAgICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlk
T2Zmc2V0KG9mZnNldCkpCkBAIC0yMjIsNyArMTk3LDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlk
U3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBQdXRCeUlkQWNjZXNzOjpUcmFu
c2l0aW9uOiB7CisgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OlRyYW5zaXRpb246IHsKICAg
ICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPQogICAgICAgICAgICAgICAgICAg
ICBhY2Nlc3MubmV3U3RydWN0dXJlKCktPmdldENvbmN1cnJlbnRseSh1aWQpOwogICAgICAgICAg
ICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQpAQCAtMjMxLDExICsyMDYsMTEgQEAg
UHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgICAg
IGlmICghY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eSgpKQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhzbG93UGF0aFN0YXRlKTsKICAgICAgICAg
ICAgICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCi0gICAgICAgICAg
ICAgICAgICAgIGFjY2Vzcy5vbGRTdHJ1Y3R1cmUoKSwgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLCBj
b25kaXRpb25TZXQsIG9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5zdHJ1Y3R1
cmUoKSwgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLCBjb25kaXRpb25TZXQsIG9mZnNldCk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICBjYXNlIFB1dEJ5SWRBY2Nlc3M6OlNldHRlcjogeworICAgICAgICAgICAgY2FzZSBB
Y2Nlc3NDYXNlOjpTZXR0ZXI6IHsKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IGFjY2Vzcy5zdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBDb21wbGV4R2V0U3RhdHVzIGNvbXBsZXhHZXRTdGF0dXMgPSBDb21wbGV4R2V0U3RhdHVzOjpj
b21wdXRlRm9yKApAQCAtMjQ5LDEyICsyMjQsMTIgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3Rh
dHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1
cyhzbG93UGF0aFN0YXRlKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
Y2FzZSBDb21wbGV4R2V0U3RhdHVzOjpJbmxpbmVhYmxlOiB7Ci0gICAgICAgICAgICAgICAgICAg
IEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lKiBzdHViID0gc3RhdGljX2Nhc3Q8QWNjZXNzb3JD
YWxsSklUU3R1YlJvdXRpbmUqPigKLSAgICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5zdHVi
Um91dGluZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0lu
Zm8gPSBhY2Nlc3MuY2FsbExpbmtJbmZvKCk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChj
YWxsTGlua0luZm8pOwogICAgICAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExp
bmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzID0KICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6
bWFrZV91bmlxdWU8Q2FsbExpbmtTdGF0dXM+KAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ssICpzdHViLT5tX2NhbGxMaW5rSW5mbywgY2FsbEV4
aXRTaXRlRGF0YSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIHBy
b2ZpbGVkQmxvY2ssICpjYWxsTGlua0luZm8sIGNhbGxFeGl0U2l0ZURhdGEpKTsKICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFu
dDo6c2V0dGVyKAogICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBjb21wbGV4R2V0
U3RhdHVzLm9mZnNldCgpLCBjb21wbGV4R2V0U3RhdHVzLmNvbmRpdGlvblNldCgpLApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1Yklu
Zm8uY3BwCShyZXZpc2lvbiAxODk0OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwzNyArMzYsNTIg
QEAgbmFtZXNwYWNlIEpTQyB7CiAjaWYgRU5BQkxFKEpJVCkKIHZvaWQgU3RydWN0dXJlU3R1Yklu
Zm86OmRlcmVmKCkKIHsKLSAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKLSAgICBjYXNlIGFjY2Vz
c19nZXRfYnlfaWRfbGlzdDogewotICAgICAgICBkZWxldGUgdS5nZXRCeUlkTGlzdC5saXN0Owot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9saXN0Ogot
ICAgICAgICBkZWxldGUgdS5wdXRCeUlkTGlzdC5saXN0OwotICAgICAgICByZXR1cm47Ci0gICAg
Y2FzZSBhY2Nlc3NfaW5fbGlzdDogewotICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVy
ZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlcyA9IHUuaW5MaXN0LnN0cnVjdHVyZUxpc3Q7Ci0g
ICAgICAgIGRlbGV0ZSBwb2x5bW9ycGhpY1N0cnVjdHVyZXM7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgotICAgIGNh
c2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdDoKLSAgICAgICAgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQ6OmFkb3B0UmF3UG9pbnRlcih1LnB1dEJ5SWRUcmFuc2l0aW9uLnJh
d0NvbmRpdGlvblNldCk7Ci0gICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9u
U2V0ID0gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgYWNjZXNzX2dldF9ieV9p
ZF9zZWxmOgotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlOgotICAgIGNhc2UgYWNj
ZXNzX3Vuc2V0OgotICAgICAgICAvLyBUaGVzZSBpbnN0cnVjdGlvbnMgZG9uJ3QgaGF2ZSB0byBy
ZWxlYXNlIGFueSBhbGxvY2F0ZWQgbWVtb3J5CisgICAgc3dpdGNoIChjYWNoZVR5cGUpIHsKKyAg
ICBjYXNlIENhY2hlVHlwZTo6U3R1YjoKKyAgICAgICAgZGVsZXRlIHUuc3R1YjsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgQ2FjaGVUeXBlOjpVbnNldDoKKyAgICBjYXNlIENhY2hlVHlwZTo6
R2V0QnlJZFNlbGY6CisgICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlCiAgICAgICAg
IHJldHVybjsKLSAgICBkZWZhdWx0OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK01h
Y3JvQXNzZW1ibGVyQ29kZVB0ciBTdHJ1Y3R1cmVTdHViSW5mbzo6YWRkQWNjZXNzQ2FzZSgKKyAg
ICBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwg
c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGFjY2Vzc0Nhc2UpCit7CisgICAgaWYgKCFhY2Nl
c3NDYXNlKQorICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7CisgICAgCisg
ICAgaWYgKGNhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlN0dWIpCisgICAgICAgIHJldHVybiB1LnN0
dWItPnJlZ2VuZXJhdGVXaXRoQ2FzZSh2bSwgY29kZUJsb2NrLCAqdGhpcywgaWRlbnQsIGFjY2Vz
c0Nhc2UpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFBvbHltb3JwaGljQWNjZXNzPiBhY2Nlc3Mg
PSBzdGQ6Om1ha2VfdW5pcXVlPFBvbHltb3JwaGljQWNjZXNzPigpOworICAgIAorICAgIFZlY3Rv
cjxzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4+IGFjY2Vzc0Nhc2VzOworICAgIAorICAgIHN0
ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBwcmV2aW91c0Nhc2UgPQorICAgICAgICBBY2Nlc3ND
YXNlOjpmcm9tU3RydWN0dXJlU3R1YkluZm8odm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCksICp0aGlzKTsKKyAgICBpZiAocHJldmlvdXNDYXNlKQorICAgICAgICBhY2Nlc3NDYXNlcy5h
cHBlbmQoc3RkOjptb3ZlKHByZXZpb3VzQ2FzZSkpOworCisgICAgYWNjZXNzQ2FzZXMuYXBwZW5k
KHN0ZDo6bW92ZShhY2Nlc3NDYXNlKSk7CisKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVz
dWx0ID0KKyAgICAgICAgYWNjZXNzLT5yZWdlbmVyYXRlV2l0aENhc2VzKHZtLCBjb2RlQmxvY2ss
ICp0aGlzLCBpZGVudCwgYWNjZXNzQ2FzZXMpOworCisgICAgaWYgKCFyZXN1bHQpCisgICAgICAg
IHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKKworICAgIGNhY2hlVHlwZSA9IENhY2hl
VHlwZTo6U3R1YjsKKyAgICB1LnN0dWIgPSBhY2Nlc3MucmVsZWFzZSgpOwogfQogCiB2b2lkIFN0
cnVjdHVyZVN0dWJJbmZvOjpyZXNldChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAgICBpZiAo
YWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpCisgICAgaWYgKGNhY2hlVHlwZSA9PSBDYWNoZVR5
cGU6OlVuc2V0KQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaWYgKE9wdGlvbnM6OnZlcmJv
c2VPU1IoKSkgewpAQCAtNzQsMTggKzg5LDIxIEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnJl
c2V0KENvZGVCbG9jayoKICAgICAgICAgLy8gb2YgdGhlIENvZGVCbG9jay4KICAgICAgICAgZGF0
YUxvZygiQ2xlYXJpbmcgc3RydWN0dXJlIGNhY2hlIChraW5kICIsIHN0YXRpY19jYXN0PGludD4o
YWNjZXNzVHlwZSksICIpIGluICIsIFJhd1BvaW50ZXIoY29kZUJsb2NrKSwgIi5cbiIpOwogICAg
IH0KLSAgICAKLSAgICBpZiAoaXNHZXRCeUlkQWNjZXNzKHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+
KGFjY2Vzc1R5cGUpKSkKKworICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgeworICAgIGNhc2UgQWNj
ZXNzVHlwZTo6R2V0OgogICAgICAgICByZXNldEdldEJ5SUQoY29kZUJsb2NrLCAqdGhpcyk7Ci0g
ICAgZWxzZSBpZiAoaXNQdXRCeUlkQWNjZXNzKHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KGFjY2Vz
c1R5cGUpKSkKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXQ6CiAgICAg
ICAgIHJlc2V0UHV0QnlJRChjb2RlQmxvY2ssICp0aGlzKTsKLSAgICBlbHNlIHsKLSAgICAgICAg
UkVMRUFTRV9BU1NFUlQoaXNJbkFjY2VzcyhzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihhY2Nlc3NU
eXBlKSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkluOgogICAgICAg
ICByZXNldEluKGNvZGVCbG9jaywgKnRoaXMpOworICAgICAgICBicmVhazsKICAgICB9CiAgICAg
CiAgICAgZGVyZWYoKTsKLSAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX3Vuc2V0OworICAgIGNhY2hl
VHlwZSA9IENhY2hlVHlwZTo6VW5zZXQ7CiAgICAgc3R1YlJvdXRpbmUgPSBudWxscHRyOwogICAg
IHdhdGNocG9pbnRzID0gbnVsbHB0cjsKIH0KQEAgLTkzLDQxICsxMTEsMTggQEAgdm9pZCBTdHJ1
Y3R1cmVTdHViSW5mbzo6cmVzZXQoQ29kZUJsb2NrKgogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6
dmlzaXRXZWFrUmVmZXJlbmNlcyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBWTSYgdm0g
PSAqY29kZUJsb2NrLT52bSgpOwotICAgIAotICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgewotICAg
IGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmOgotICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQo
dS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3Q6IHsK
LSAgICAgICAgaWYgKHUuZ2V0QnlJZExpc3QubGlzdC0+dmlzaXRXZWFrKHZtKSkKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgYWNjZXNzX3B1dF9i
eV9pZF90cmFuc2l0aW9uX25vcm1hbDoKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNp
dGlvbl9kaXJlY3Q6Ci0gICAgICAgIGlmIChIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0
aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgpKQotICAgICAgICAgICAgJiYgSGVhcDo6aXNNYXJr
ZWQodS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUuZ2V0KCkpCi0gICAgICAgICAgICAmJiBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6ZnJvbVJhd1BvaW50ZXIodS5wdXRCeUlkVHJhbnNp
dGlvbi5yYXdDb25kaXRpb25TZXQpLmFyZVN0aWxsTGl2ZSgpKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFjZToKLSAg
ICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKHUucHV0QnlJZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVj
dHVyZS5nZXQoKSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgYWNjZXNzX3B1dF9ieV9pZF9saXN0OgotICAgICAgICBpZiAodS5wdXRCeUlkTGlzdC5saXN0
LT52aXNpdFdlYWsodm0pKQorCisgICAgc3dpdGNoIChjYWNoZVR5cGUpIHsKKyAgICBjYXNlIENh
Y2hlVHlwZTo6R2V0QnlJZFNlbGY6CisgICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNl
OgorICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQodS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0
dXJlLmdldCgpKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBhY2Nlc3NfaW5fbGlzdDogewotICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxp
c3QqIHBvbHltb3JwaGljU3RydWN0dXJlcyA9IHUuaW5MaXN0LnN0cnVjdHVyZUxpc3Q7Ci0gICAg
ICAgIGlmIChwb2x5bW9ycGhpY1N0cnVjdHVyZXMtPnZpc2l0V2Vhayh1LmluTGlzdC5saXN0U2l6
ZSkpCisgICAgY2FzZSBDYWNoZVR5cGU6OlN0dWI6CisgICAgICAgIGlmICh1LnN0dWItPnZpc2l0
V2Vhayh2bSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGJyZWFrOwotICAgIH0KICAg
ICBkZWZhdWx0OgotICAgICAgICAvLyBUaGUgcmVzdCBvZiB0aGUgaW5zdHJ1Y3Rpb25zIGRvbid0
IHJlcXVpcmUgcmVmZXJlbmNlcywgc28gdGhlcmUgaXMgbm8gbmVlZCB0bwotICAgICAgICAvLyBk
byBhbnl0aGluZy4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9u
IDE4OTQ5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHVi
SW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiTWFjcm9B
c3NlbWJsZXIuaCIKICNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgogI2lu
Y2x1ZGUgIk9wY29kZS5oIgotI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlz
dC5oIgorI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJT
ZXQuaCIKICNpbmNsdWRlICJTcGlsbFJlZ2lzdGVyc01vZGUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1
cmUuaCIKQEAgLTQyLDU3ICs0MiwyNSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIEVOQUJMRShK
SVQpCiAKLWNsYXNzIFBvbHltb3JwaGljR2V0QnlJZExpc3Q7Ci1jbGFzcyBQb2x5bW9ycGhpY1B1
dEJ5SWRMaXN0OworY2xhc3MgUG9seW1vcnBoaWNBY2Nlc3M7CiAKLWVudW0gQWNjZXNzVHlwZSB7
Ci0gICAgYWNjZXNzX2dldF9ieV9pZF9zZWxmLAotICAgIGFjY2Vzc19nZXRfYnlfaWRfbGlzdCwK
LSAgICBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsLAotICAgIGFjY2Vzc19wdXRf
YnlfaWRfdHJhbnNpdGlvbl9kaXJlY3QsCi0gICAgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlLAot
ICAgIGFjY2Vzc19wdXRfYnlfaWRfbGlzdCwKLSAgICBhY2Nlc3NfdW5zZXQsCi0gICAgYWNjZXNz
X2luX2xpc3QKK2VudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhfdCB7CisgICAgR2V0LAorICAg
IFB1dCwKKyAgICBJbgogfTsKIAotaW5saW5lIGJvb2wgaXNHZXRCeUlkQWNjZXNzKEFjY2Vzc1R5
cGUgYWNjZXNzVHlwZSkKLXsKLSAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKLSAgICBjYXNlIGFj
Y2Vzc19nZXRfYnlfaWRfc2VsZjoKLSAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfbGlzdDoKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLX0KLSAgICAKLWlubGluZSBib29sIGlzUHV0QnlJZEFjY2VzcyhBY2Nlc3NUeXBlIGFj
Y2Vzc1R5cGUpCi17Ci0gICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7Ci0gICAgY2FzZSBhY2Nlc3Nf
cHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90
cmFuc2l0aW9uX2RpcmVjdDoKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFjZToKLSAg
ICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfbGlzdDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotaW5saW5lIGJvb2wg
aXNJbkFjY2VzcyhBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUpCi17Ci0gICAgc3dpdGNoIChhY2Nlc3NU
eXBlKSB7Ci0gICAgY2FzZSBhY2Nlc3NfaW5fbGlzdDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KK2VudW0gY2xhc3Mg
Q2FjaGVUeXBlIDogaW50OF90IHsKKyAgICBVbnNldCwKKyAgICBHZXRCeUlkU2VsZiwKKyAgICBQ
dXRCeUlkUmVwbGFjZSwKKyAgICBTdHViCit9OwogCiBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8g
ewotICAgIFN0cnVjdHVyZVN0dWJJbmZvKCkKLSAgICAgICAgOiBhY2Nlc3NUeXBlKGFjY2Vzc191
bnNldCkKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyhBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUpCisgICAg
ICAgIDogYWNjZXNzVHlwZShhY2Nlc3NUeXBlKQorICAgICAgICAsIGNhY2hlVHlwZShDYWNoZVR5
cGU6OlVuc2V0KQogICAgICAgICAsIHNlZW4oZmFsc2UpCiAgICAgICAgICwgcmVzZXRCeUdDKGZh
bHNlKQogICAgICAgICAsIHRvb2tTbG93UGF0aChmYWxzZSkKQEAgLTEwMCw1MyArNjgsMzEgQEAg
c3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBpbml0
R2V0QnlJZFNlbGYoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIGJhc2VPYmplY3RT
dHJ1Y3R1cmUpCisgICAgdm9pZCBpbml0R2V0QnlJZFNlbGYoVk0mIHZtLCBKU0NlbGwqIG93bmVy
LCBTdHJ1Y3R1cmUqIGJhc2VPYmplY3RTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkK
ICAgICB7Ci0gICAgICAgIGFjY2Vzc1R5cGUgPSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGY7Ci0KLSAg
ICAgICAgdS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLnNldCh2bSwgb3duZXIsIGJh
c2VPYmplY3RTdHJ1Y3R1cmUpOwotICAgIH0KKyAgICAgICAgY2FjaGVUeXBlID0gQ2FjaGVUeXBl
OjpHZXRCeUlkU2VsZjsKIAotICAgIHZvaWQgaW5pdEdldEJ5SWRMaXN0KFBvbHltb3JwaGljR2V0
QnlJZExpc3QqIGxpc3QpCi0gICAgewotICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX2dldF9i
eV9pZF9saXN0OwotICAgICAgICB1LmdldEJ5SWRMaXN0Lmxpc3QgPSBsaXN0OworICAgICAgICB1
LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgYmFzZU9iamVjdFN0
cnVjdHVyZSk7CisgICAgICAgIHUuYnlJZFNlbGYub2Zmc2V0ID0gb2Zmc2V0OwogICAgIH0KIAot
ICAgIC8vIFB1dEJ5SWQqCi0KLSAgICB2b2lkIGluaXRQdXRCeUlkVHJhbnNpdGlvbihWTSYgdm0s
IEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogcHJldmlvdXNTdHJ1Y3R1cmUsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQsIGJvb2wg
aXNEaXJlY3QpCisgICAgdm9pZCBpbml0UHV0QnlJZFJlcGxhY2UoVk0mIHZtLCBKU0NlbGwqIG93
bmVyLCBTdHJ1Y3R1cmUqIGJhc2VPYmplY3RTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCkKICAgICB7Ci0gICAgICAgIGlmIChpc0RpcmVjdCkKLSAgICAgICAgICAgIGFjY2Vzc1R5cGUg
PSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0OwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDsK
KyAgICAgICAgY2FjaGVUeXBlID0gQ2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZTsKIAotICAgICAg
ICB1LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHBy
ZXZpb3VzU3RydWN0dXJlKTsKLSAgICAgICAgdS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUu
c2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKLSAgICAgICAgdS5wdXRCeUlkVHJhbnNpdGlvbi5y
YXdDb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQucmVsZWFzZVJhd1BvaW50ZXIoKTsKKyAgICAg
ICAgdS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLnNldCh2bSwgb3duZXIsIGJhc2VPYmpl
Y3RTdHJ1Y3R1cmUpOworICAgICAgICB1LmJ5SWRTZWxmLm9mZnNldCA9IG9mZnNldDsKICAgICB9
CiAKLSAgICB2b2lkIGluaXRQdXRCeUlkUmVwbGFjZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0
cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSkKKyAgICB2b2lkIGluaXRTdHViKHN0ZDo6dW5p
cXVlX3B0cjxQb2x5bW9ycGhpY0FjY2Vzcz4gc3R1YikKICAgICB7Ci0gICAgICAgIGFjY2Vzc1R5
cGUgPSBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2U7Ci0gICAgCi0gICAgICAgIHUucHV0QnlJZFJl
cGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBiYXNlT2JqZWN0U3RydWN0
dXJlKTsKKyAgICAgICAgY2FjaGVUeXBlID0gQ2FjaGVUeXBlOjpTdHViOworICAgICAgICB1LnN0
dWIgPSBzdHViLnJlbGVhc2UoKTsKICAgICB9Ci0gICAgICAgIAotICAgIHZvaWQgaW5pdFB1dEJ5
SWRMaXN0KFBvbHltb3JwaGljUHV0QnlJZExpc3QqIGxpc3QpCi0gICAgewotICAgICAgICBhY2Nl
c3NUeXBlID0gYWNjZXNzX3B1dF9ieV9pZF9saXN0OwotICAgICAgICB1LnB1dEJ5SWRMaXN0Lmxp
c3QgPSBsaXN0OwotICAgIH0KLSAgICAKLSAgICB2b2lkIGluaXRJbkxpc3QoUG9seW1vcnBoaWNB
Y2Nlc3NTdHJ1Y3R1cmVMaXN0KiBsaXN0LCBpbnQgbGlzdFNpemUpCi0gICAgewotICAgICAgICBh
Y2Nlc3NUeXBlID0gYWNjZXNzX2luX2xpc3Q7Ci0gICAgICAgIHUuaW5MaXN0LnN0cnVjdHVyZUxp
c3QgPSBsaXN0OwotICAgICAgICB1LmluTGlzdC5saXN0U2l6ZSA9IGxpc3RTaXplOwotICAgIH0K
LSAgICAgICAgCisKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgYWRkQWNjZXNzQ2FzZSgKKyAg
ICAgICAgVk0mLCBDb2RlQmxvY2sqLCBjb25zdCBJZGVudGlmaWVyJiwgc3RkOjp1bmlxdWVfcHRy
PEFjY2Vzc0Nhc2U+IGFjY2Vzc0Nhc2UpOworCiAgICAgdm9pZCByZXNldChDb2RlQmxvY2sqKTsK
IAogICAgIHZvaWQgZGVyZWYoKTsKQEAgLTE3Miw4ICsxMTgsOSBAQCBzdHJ1Y3QgU3RydWN0dXJl
U3R1YkluZm8gewogICAgICAgICAgICAgd2F0Y2hwb2ludHMsIGNvZGVCbG9jaywgdGhpcywgY29u
ZGl0aW9uKTsKICAgICB9CiAgICAgCi0gICAgaW50OF90IGFjY2Vzc1R5cGU7Ci0gICAgYm9vbCBz
ZWVuIDogMTsKKyAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGU7CisgICAgQ2FjaGVUeXBlIGNhY2hl
VHlwZTsKKyAgICBib29sIHNlZW47CiAgICAgYm9vbCByZXNldEJ5R0MgOiAxOwogICAgIGJvb2wg
dG9va1Nsb3dQYXRoIDogMTsKIApAQCAtMjAzLDM0ICsxNTAsMTMgQEAgc3RydWN0IFN0cnVjdHVy
ZVN0dWJJbmZvIHsKIAogICAgIHVuaW9uIHsKICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAg
IC8vIEl0IHdvdWxkIGJlIHVud2lzZSB0byBwdXQgYW55dGhpbmcgaGVyZSwgYXMgaXQgd2lsbCBz
dXJlbHkgYmUgb3ZlcndyaXR0ZW4uCi0gICAgICAgIH0gdW5zZXQ7Ci0gICAgICAgIHN0cnVjdCB7
Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4gYmFzZU9iamVjdFN0cnVj
dHVyZTsKLSAgICAgICAgfSBnZXRCeUlkU2VsZjsKLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAg
ICAgIFBvbHltb3JwaGljR2V0QnlJZExpc3QqIGxpc3Q7Ci0gICAgICAgIH0gZ2V0QnlJZExpc3Q7
Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVy
ZT4gcHJldmlvdXNTdHJ1Y3R1cmU7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVj
dHVyZT4gc3RydWN0dXJlOwotICAgICAgICAgICAgdm9pZCogcmF3Q29uZGl0aW9uU2V0OwotICAg
ICAgICB9IHB1dEJ5SWRUcmFuc2l0aW9uOwotICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAg
V3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IGJhc2VPYmplY3RTdHJ1Y3R1cmU7Ci0gICAgICAg
IH0gcHV0QnlJZFJlcGxhY2U7Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBQb2x5bW9y
cGhpY1B1dEJ5SWRMaXN0KiBsaXN0OwotICAgICAgICB9IHB1dEJ5SWRMaXN0OwotICAgICAgICBz
dHJ1Y3QgewotICAgICAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBzdHJ1
Y3R1cmVMaXN0OwotICAgICAgICAgICAgaW50IGxpc3RTaXplOwotICAgICAgICB9IGluTGlzdDsK
KyAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKKyAgICAgICAgfSBieUlkU2VsZjsK
KyAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3MqIHN0dWI7CiAgICAgfSB1OwogCi0gICAgUmVmUHRy
PEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKICAgICBDb2RlTG9jYXRpb25DYWxsIGNhbGxS
ZXR1cm5Mb2NhdGlvbjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2F0Y2hwb2ludHNPblN0cnVjdHVy
ZVN0dWJJbmZvPiB3YXRjaHBvaW50czsKIH07CiAKIGlubGluZSBDb2RlT3JpZ2luIGdldFN0cnVj
dHVyZVN0dWJJbmZvQ29kZU9yaWdpbihTdHJ1Y3R1cmVTdHViSW5mbyYgc3RydWN0dXJlU3R1Yklu
Zm8pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJ
KHJldmlzaW9uIDE4OTQ5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2Myw3ICs1NjMsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBicmFuY2gzMihFcXVhbCwgcmVncy50YWdHUFIoKSwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkVtcHR5VmFsdWVUYWcpKTsKICNlbmRpZgogICAgIH0KLSAgICAKKwogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+CiAgICAgSnVtcCBicmFuY2hTdHJ1Y3R1cmUoUmVsYXRpb25hbENvbmRp
dGlvbiBjb25kaXRpb24sIFQgbGVmdEhhbmRTaWRlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAg
ICB7CkBAIC04MzIsNiArODMyLDE1IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0KIAorICAgIHZv
aWQgYm94Qm9vbGVhblBheWxvYWQoYm9vbCB2YWx1ZSwgR1BSUmVnIHBheWxvYWRHUFIpCisgICAg
eworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKFZhbHVlRmFs
c2UgKyB2YWx1ZSksIHBheWxvYWRHUFIpOworI2Vsc2UKKyAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIodmFsdWUpLCBwYXlsb2FkR1BSKTsKKyNlbmRpZgorICAgIH0KKwogICAgIHZvaWQgYm94Qm9v
bGVhbihHUFJSZWcgYm9vbEdQUiwgSlNWYWx1ZVJlZ3MgYm94ZWRSZWdzKQogICAgIHsKICAgICAg
ICAgYm94Qm9vbGVhblBheWxvYWQoYm9vbEdQUiwgYm94ZWRSZWdzLnBheWxvYWRHUFIoKSk7CkBA
IC04MzksNiArODQ4LDE3IEBAIHB1YmxpYzoKICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6Qm9vbGVhblRhZyksIGJveGVkUmVncy50YWdHUFIoKSk7CiAjZW5kaWYKICAgICB9CisK
KyAgICB2b2lkIGJveEludDMyKEdQUlJlZyBpbnRHUFIsIEpTVmFsdWVSZWdzIGJveGVkUmVncykK
KyAgICB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgaml0Lm1vdmUoaW50R1BSLCBib3hl
ZFJlZ3MuZ3ByKCkpOworICAgICAgICBqaXQub3I2NChUcnVzdGVkSW1tNjQoVGFnVHlwZU51bWJl
ciksIGJveGVkUmVncy5ncHIoKSk7CisjZWxzZQorICAgICAgICBqaXQubW92ZShpbnRHUFIsIGJv
eGVkUmVncy5wYXlsb2FkR1BSKCkpOworICAgICAgICBqaXQubW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6SW50MzJUYWcpLCBib3hlZFJlZ3MudGFnR1BSKCkpOworI2VuZGlmCisgICAgfQogICAg
IAogICAgIHZvaWQgY2FsbEV4Y2VwdGlvbkZ1enooKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTg5NDkzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTYzLDI0ICsxNjMsNiBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkdlCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShiYXNlVmFsdWUuZ2V0KGV4ZWMsIGlk
ZW50LCBzbG90KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
R2V0QnlJZEJ1aWxkTGlzdChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbywgRW5jb2RlZEpTVmFsdWUgYmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKLXsKLSAg
ICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKLQotICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlk
KHZtLCB1aWQpOwotICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vz
c1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKTsKLQotICAgIEpTVmFsdWUgYmFzZVZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGJhc2UpOwotICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSk7
Ci0gICAgYm9vbCBoYXNSZXN1bHQgPSBiYXNlVmFsdWUuZ2V0UHJvcGVydHlTbG90KGV4ZWMsIGlk
ZW50LCBzbG90KTsKLSAgICAKLSAgICBpZiAoYWNjZXNzVHlwZSA9PSBzdGF0aWNfY2FzdDxBY2Nl
c3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSkpCi0gICAgICAgIGJ1aWxkR2V0QnlJRExpc3Qo
ZXhlYywgYmFzZVZhbHVlLCBpZGVudCwgc2xvdCwgKnN0dWJJbmZvKTsKLQotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoaGFzUmVzdWx0PyBzbG90LmdldFZhbHVlKGV4ZWMsIGlkZW50KSA6IGpz
VW5kZWZpbmVkKCkpOwotfQotCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkdldEJ5SWRPcHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbywgRW5jb2RlZEpTVmFsdWUgYmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKIHsKICAg
ICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKQEAgLTE5Nyw3ICsxNzksNiBAQCBFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAgICAgICAgIHN0dWJJbmZvLT5zZWVuID0gdHJ1
ZTsKICAgICAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGhhc1Jlc3VsdD8gc2xvdC5nZXRW
YWx1ZShleGVjLCBpZGVudCkgOiBqc1VuZGVmaW5lZCgpKTsKLQogfQogCiBFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkluT3B0aW1pemUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEpTQ2VsbCogYmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwq
IGtleSkKQEAgLTM5NCw5MCArMzc1LDYgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5SWREaXJlYwogICAgICAgICBzdHViSW5mby0+c2VlbiA9IHRydWU7CiB9CiAKLXZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0QnVpbGRMaXN0KEV4ZWNTdGF0ZSogZXhl
YywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQot
ewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOwotICAgIAotICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVy
Ojpmcm9tVWlkKHZtLCB1aWQpOwotICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19j
YXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKTsKLQotICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBKU1ZhbHVlIGJhc2VWYWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSk7Ci0gICAgUHV0UHJvcGVydHlTbG90IHNs
b3QoYmFzZVZhbHVlLCB0cnVlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7
Ci0gICAgCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlVmFsdWUuaXNDZWxsKCkgPyBi
YXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgqdm0pIDogbnVsbHB0cjsgCi0gICAgYmFzZVZh
bHVlLnB1dChleGVjLCBpZGVudCwgdmFsdWUsIHNsb3QpOwotCi0gICAgaWYgKGFjY2Vzc1R5cGUg
IT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBidWlsZFB1dEJ5SWRMaXN0KGV4ZWMsIGJhc2VWYWx1ZSwgc3RydWN0
dXJlLCBpZGVudCwgc2xvdCwgKnN0dWJJbmZvLCBOb3REaXJlY3QpOwotfQotCi12b2lkIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUqIGV4
ZWMsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkK
LXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmll
cjo6ZnJvbVVpZCh2bSwgdWlkKTsKLSAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNf
Y2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSk7Ci0KLSAgICBKU1ZhbHVlIHZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgSlNWYWx1ZSBiYXNlVmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpOwotICAgIFB1dFByb3BlcnR5U2xvdCBz
bG90KGJhc2VWYWx1ZSwgZmFsc2UsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgp
KTsKLQotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZVZhbHVlLmlzQ2VsbCgpID8gYmFz
ZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKnZtKSA6IG51bGxwdHI7Ci0gICAgYmFzZVZhbHVl
LnB1dChleGVjLCBpZGVudCwgdmFsdWUsIHNsb3QpOwotICAgIAotICAgIGlmIChhY2Nlc3NUeXBl
ICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIAotICAgIGJ1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZVZhbHVlLCBz
dHJ1Y3R1cmUsIGlkZW50LCBzbG90LCAqc3R1YkluZm8sIE5vdERpcmVjdCk7Ci19Ci0KLXZvaWQg
SklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0QnVpbGRMaXN0KEV4ZWNT
dGF0ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBVbmlxdWVkU3RyaW5nSW1w
bCogdWlkKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIAotICAgIElkZW50aWZpZXIgaWRlbnQgPSBJ
ZGVudGlmaWVyOjpmcm9tVWlkKHZtLCB1aWQpOwotICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9
IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKTsKLSAgICAKLSAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgSlNP
YmplY3QqIGJhc2VPYmplY3QgPSBhc09iamVjdChKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2Up
KTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlT2JqZWN0LCB0cnVlLCBleGVjLT5jb2Rl
QmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7Ci0KLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IGJhc2VPYmplY3QtPnN0cnVjdHVyZSgqdm0pOyAgICAKLSAgICBiYXNlT2JqZWN0LT5wdXREaXJl
Y3QoKnZtLCBpZGVudCwgdmFsdWUsIHNsb3QpOwotICAgIAotICAgIGlmIChhY2Nlc3NUeXBlICE9
IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIAotICAgIGJ1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZU9iamVjdCwgc3Ry
dWN0dXJlLCBpZGVudCwgc2xvdCwgKnN0dWJJbmZvLCBEaXJlY3QpOwotfQotCi12b2lkIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1aWxkTGlzdChFeGVjU3Rh
dGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCkKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRl
bnRpZmllcjo6ZnJvbVVpZCh2bSwgdWlkKTsKLSAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBz
dGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSk7Ci0KLSAgICBKU1Zh
bHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgSlNPYmplY3Qq
IGJhc2VPYmplY3QgPSBhc09iamVjdChKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpKTsKLSAg
ICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlT2JqZWN0LCBmYWxzZSwgZXhlYy0+Y29kZUJsb2Nr
KCktPnB1dEJ5SWRDb250ZXh0KCkpOwotCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNl
T2JqZWN0LT5zdHJ1Y3R1cmUoKnZtKTsgICAgCi0gICAgYmFzZU9iamVjdC0+cHV0RGlyZWN0KCp2
bSwgaWRlbnQsIHZhbHVlLCBzbG90KTsKLQotICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19j
YXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIGJ1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZU9iamVjdCwgc3RydWN0dXJlLCBp
ZGVudCwgc2xvdCwgKnN0dWJJbmZvLCBEaXJlY3QpOwotfQotCiB2b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uUmVhbGxvY2F0ZVN0b3JhZ2VBbmRGaW5pc2hQdXQoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCogYmFzZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCwgRW5jb2RlZEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMTg5NDkzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTI5LDM1ICsxMjksNiBAQCBzdGF0aWMgdm9pZCByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoCiAj
ZW5kaWYKIH0KIAotc3RhdGljIHZvaWQgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigKLSAg
ICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAotICAgIENDYWxsSGVscGVycyYg
aml0LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgR1BSUmVnIHNjcmF0
Y2hHUFIpCi17Ci0gICAgaWYgKGNvbmRpdGlvbi5pc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJv
cGVydHlXYXRjaHBvaW50KCkpIHsKLSAgICAgICAgY29uZGl0aW9uLm9iamVjdCgpLT5zdHJ1Y3R1
cmUoKS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoCi0gICAgICAgICAgICBzdHViSW5mby5hZGRX
YXRjaHBvaW50KGNvZGVCbG9jaywgY29uZGl0aW9uKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNvbmRpdGlvbi5vYmplY3QoKS0+c3RydWN0
dXJlKCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoY29uZGl0aW9uLnN0cnVjdHVyZUVuc3VyZXNWYWxp
ZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KHN0cnVjdHVyZSkpOwotICAgIGpp
dC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGNvbmRpdGlvbi5vYmplY3QoKSks
IHNjcmF0Y2hHUFIpOwotICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoCi0gICAgICAgIGppdC5icmFu
Y2hTdHJ1Y3R1cmUoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCi0gICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVj
dHVyZUlET2Zmc2V0KCkpLCBzdHJ1Y3R1cmUpKTsKLX0KLQotc3RhdGljIHZvaWQgY2hlY2tPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbnMoCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQmIHNldCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bywKLSAgICBDQ2FsbEhlbHBlcnMmIGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWls
dXJlQ2FzZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQotewotICAgIGZvciAoY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6IHNldCkgewotICAgICAgICBjaGVja09iamVjdFBy
b3BlcnR5Q29uZGl0aW9uKAotICAgICAgICAgICAgY29uZGl0aW9uLCBjb2RlQmxvY2ssIHN0dWJJ
bmZvLCBqaXQsIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7Ci0gICAgfQotfQotCiBzdGF0aWMg
dm9pZCByZXBsYWNlV2l0aEp1bXAoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25zdCBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIgdGFyZ2V0KQogewogICAgIGlmIChNYWNyb0Fzc2VtYmxlcjo6
Y2FuSnVtcFJlcGxhY2VQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaCgpKSB7CkBAIC0xNjgsNiAr
MTM5LDggQEAgc3RhdGljIHZvaWQgcmVwbGFjZVdpdGhKdW1wKFN0cnVjdHVyZVN0dQogICAgICAg
ICAgICAgQ29kZUxvY2F0aW9uTGFiZWwodGFyZ2V0KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CisKKyAgICByZXNldEdldEJ5SURDaGVja0FuZExvYWQoc3R1YkluZm8pOwogICAgIAogICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcCgKICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmp1bXBBdE9mZnNldCgKQEAgLTE3NSw1MiArMTQ4LDYgQEAgc3RhdGljIHZvaWQgcmVw
bGFjZVdpdGhKdW1wKFN0cnVjdHVyZVN0dQogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCh0YXJn
ZXQpKTsKIH0KIAotc3RhdGljIHZvaWQgZW1pdFJlc3RvcmVTY3JhdGNoKE1hY3JvQXNzZW1ibGVy
JiBzdHViSml0LCBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBHUFJSZWcgc2NyYXRjaEdQUiwg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAmIHN1Y2Nlc3MsIE1hY3JvQXNzZW1ibGVyOjpKdW1wJiBmYWls
LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzKQotewotICAgIGlmIChuZWVk
VG9SZXN0b3JlU2NyYXRjaCkgewotICAgICAgICBzdHViSml0LnBvcFRvUmVzdG9yZShzY3JhdGNo
R1BSKTsKLSAgICAgICAgCi0gICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKLSAgICAg
ICAgCi0gICAgICAgIC8vIGxpbmsgZmFpbHVyZSBjYXNlcyBoZXJlLCBzbyB3ZSBjYW4gcG9wIHNj
cmF0Y2hHUFIsIGFuZCB0aGVuIGp1bXAgYmFjay4KLSAgICAgICAgZmFpbHVyZUNhc2VzLmxpbmso
JnN0dWJKaXQpOwotICAgICAgICAKLSAgICAgICAgc3R1YkppdC5wb3BUb1Jlc3RvcmUoc2NyYXRj
aEdQUik7Ci0gICAgICAgIAotICAgICAgICBmYWlsID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOwotfQot
Ci1zdGF0aWMgdm9pZCBsaW5rUmVzdG9yZVNjcmF0Y2goTGlua0J1ZmZlciYgcGF0Y2hCdWZmZXIs
IGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3Ms
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhaWwsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWls
dXJlQ2FzZXMsIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCwgQ29kZUxvY2F0aW9uTGFi
ZWwgc2xvd0Nhc2VCZWdpbikKLXsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN1Y2Nl
c3NMYWJlbCk7Ci0gICAgICAgIAotICAgIGlmIChuZWVkVG9SZXN0b3JlU2NyYXRjaCkgewotICAg
ICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWwsIHNsb3dDYXNlQmVnaW4pOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIAotICAgIC8vIGxpbmsgZmFpbHVyZSBjYXNlcyBkaXJlY3RseSBiYWNr
IHRvIG5vcm1hbCBwYXRoCi0gICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMsIHNsb3dD
YXNlQmVnaW4pOwotfQotCi1zdGF0aWMgdm9pZCBsaW5rUmVzdG9yZVNjcmF0Y2goTGlua0J1ZmZl
ciYgcGF0Y2hCdWZmZXIsIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbywgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzcywgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgZmFpbCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlcykKLXsK
LSAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNo
LCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSksIHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2Fs
bFRvU2xvd0Nhc2UpKTsKLX0KLQotZW51bSBCeUlkU3R1YktpbmQgewotICAgIEdldFZhbHVlLAot
ICAgIEdldFVuZGVmaW5lZCwKLSAgICBDYWxsR2V0dGVyLAotICAgIENhbGxDdXN0b21HZXR0ZXIs
Ci0gICAgQ2FsbFNldHRlciwKLSAgICBDYWxsQ3VzdG9tU2V0dGVyCi19OwotCiBzdGF0aWMgY29u
c3QgY2hhciogdG9TdHJpbmcoQnlJZFN0dWJLaW5kIGtpbmQpCiB7CiAgICAgc3dpdGNoIChraW5k
KSB7CkBAIC0yNzcsMzI1ICsyMDQsNiBAQCBzdGF0aWMgRnVuY3Rpb25QdHIgY3VzdG9tRm9yKGNv
bnN0IFB1dFByCiAgICAgcmV0dXJuIEZ1bmN0aW9uUHRyKHNsb3QuY3VzdG9tU2V0dGVyKCkpOwog
fQogCi1zdGF0aWMgYm9vbCBnZW5lcmF0ZUJ5SWRTdHViKAotICAgIEV4ZWNTdGF0ZSogZXhlYywg
QnlJZFN0dWJLaW5kIGtpbmQsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwKLSAgICBG
dW5jdGlvblB0ciBjdXN0b20sIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwKLSAgICBKU09iamVjdCogYWx0
ZXJuYXRlQmFzZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
Ym9vbCBsb2FkVGFyZ2V0RnJvbVByb3h5LAotICAgIFdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRT
ZXQsIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwgc2xv
d0Nhc2VMYWJlbCwKLSAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+JiBzdHViUm91dGluZSkKLXsK
LSAgICBBU1NFUlQoY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eUFzc3VtaW5n
SW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpOwotICAgIAotICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOwotICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5w
YXRjaC5iYXNlR1BSKTsKLSAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSBKU1ZhbHVlUmVncygK
LSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJ
bmZvLnBhdGNoLnZhbHVlVGFnR1BSKSwKLSNlbmRpZgotICAgICAgICBzdGF0aWNfY2FzdDxHUFJS
ZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVlR1BSKSk7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBU
ZW1wUmVnaXN0ZXJTZXQoc3R1YkluZm8ucGF0Y2gudXNlZFJlZ2lzdGVycykuZ2V0RnJlZUdQUigp
OwotICAgIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSBzY3JhdGNoR1BSID09IEludmFsaWRH
UFJSZWc7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIW5lZWRUb1Jlc3RvcmVTY3JhdGNoIHx8IChraW5k
ID09IEdldFZhbHVlIHx8IGtpbmQgPT0gR2V0VW5kZWZpbmVkKSk7Ci0gICAgCi0gICAgQ0NhbGxI
ZWxwZXJzIHN0dWJKaXQoJmV4ZWMtPnZtKCksIGV4ZWMtPmNvZGVCbG9jaygpKTsKLSAgICBpZiAo
bmVlZFRvUmVzdG9yZVNjcmF0Y2gpIHsKLSAgICAgICAgc2NyYXRjaEdQUiA9IEFzc2VtYmx5SGVs
cGVyczo6c2VsZWN0U2NyYXRjaEdQUigKLSAgICAgICAgICAgIGJhc2VHUFIsIHZhbHVlUmVncy50
YWdHUFIoKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSk7Ci0gICAgICAgIHN0dWJKaXQucHVzaFRv
U2F2ZShzY3JhdGNoR1BSKTsKLSAgICAgICAgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSB0cnVlOwot
ICAgIH0KLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzOwot
Ci0gICAgR1BSUmVnIGJhc2VGb3JHZXRHUFI7Ci0gICAgaWYgKGxvYWRUYXJnZXRGcm9tUHJveHkp
IHsKLSAgICAgICAgYmFzZUZvckdldEdQUiA9IHZhbHVlUmVncy5wYXlsb2FkR1BSKCk7Ci0gICAg
ICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2g4KAotICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCAKLSAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoUHVyZUZvcndhcmRpbmdQcm94eVR5cGUpKSk7
Ci0KLSAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VH
UFIsIEpTUHJveHk6OnRhcmdldE9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIAotICAg
ICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoU3RydWN0dXJlKAotICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCi0g
ICAgICAgICAgICBzdHJ1Y3R1cmUpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBiYXNlRm9yR2V0
R1BSID0gYmFzZUdQUjsKLQotICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJh
bmNoU3RydWN0dXJlKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCAKLSAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VGb3JHZXRHUFIsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSksIAotICAgICAgICAgICAgc3RydWN0dXJlKSk7Ci0gICAgfQot
Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICBpZiAo
c3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkgfHwgY29uZGl0aW9uU2V0
Lm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkKLSAgICAgICAgdm0tPnJlZ2lzdGVyV2F0
Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KHByb3BlcnR5TmFtZSwgc3R1YkluZm8uYWRkV2F0Y2hw
b2ludChjb2RlQmxvY2spKTsKLQotICAgIGlmICh3YXRjaHBvaW50U2V0KQotICAgICAgICB3YXRj
aHBvaW50U2V0LT5hZGQoc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKLQotICAg
IGNoZWNrT2JqZWN0UHJvcGVydHlDb25kaXRpb25zKAotICAgICAgICBjb25kaXRpb25TZXQsIGNv
ZGVCbG9jaywgc3R1YkluZm8sIHN0dWJKaXQsIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7Ci0K
LSAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7Ci0gICAgICAgIFN0cnVjdHVyZSogY3Vy
clN0cnVjdHVyZTsKLSAgICAgICAgaWYgKGNvbmRpdGlvblNldC5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICBjdXJyU3RydWN0dXJlID0gc3RydWN0dXJlOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBjdXJyU3RydWN0dXJlID0gY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2JqZWN0
KCktPnN0cnVjdHVyZSgpOwotICAgICAgICBjdXJyU3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJv
cGVydHlGb3JSZXBsYWNlbWVudHMoKnZtLCBvZmZzZXQpOwotICAgIH0KLSAgICAKLSAgICBHUFJS
ZWcgYmFzZUZvckFjY2Vzc0dQUiA9IEludmFsaWRHUFJSZWc7Ci0gICAgaWYgKGtpbmQgIT0gR2V0
VW5kZWZpbmVkKSB7Ci0gICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkgewotICAg
ICAgICAgICAgLy8gV2UgY291bGQgaGF2ZSBjbG9iYmVyZWQgc2NyYXRjaEdQUiBlYXJsaWVyLCBz
byB3ZSBoYXZlIHRvIHJlbG9hZCBmcm9tIGJhc2VHUFIgdG8gZ2V0IHRoZSB0YXJnZXQuCi0gICAg
ICAgICAgICBpZiAobG9hZFRhcmdldEZyb21Qcm94eSkKLSAgICAgICAgICAgICAgICBzdHViSml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNQcm94eTo6dGFyZ2V0
T2Zmc2V0KCkpLCBiYXNlRm9yR2V0R1BSKTsKLSAgICAgICAgICAgIHN0dWJKaXQubW92ZShNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihhbHRlcm5hdGVCYXNlKSwgc2NyYXRjaEdQUik7Ci0g
ICAgICAgICAgICBiYXNlRm9yQWNjZXNzR1BSID0gc2NyYXRjaEdQUjsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIC8vIEZvciBwcm94eSBvYmplY3RzLCB3ZSBuZWVkIHRvIGRvIGFsbCB0
aGUgU3RydWN0dXJlIGNoZWNrcyBiZWZvcmUgbW92aW5nIHRoZSBiYXNlR1BSIGludG8KLSAgICAg
ICAgICAgIC8vIGJhc2VGb3JHZXRHUFIgYmVjYXVzZSBpZiB3ZSBmYWlsIGFueSBvZiB0aGUgY2hl
Y2tzIHRoZW4gd2Ugd291bGQgaGF2ZSB0aGUgd3JvbmcgdmFsdWUgaW4gYmFzZUdQUgotICAgICAg
ICAgICAgLy8gb24gdGhlIHNsb3cgcGF0aC4KLSAgICAgICAgICAgIGlmIChsb2FkVGFyZ2V0RnJv
bVByb3h5KQotICAgICAgICAgICAgICAgIHN0dWJKaXQubW92ZShzY3JhdGNoR1BSLCBiYXNlRm9y
R2V0R1BSKTsKLSAgICAgICAgICAgIGJhc2VGb3JBY2Nlc3NHUFIgPSBiYXNlRm9yR2V0R1BSOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgR1BSUmVnIGxvYWRlZFZhbHVlR1BSID0gSW52YWxpZEdQ
UlJlZzsKLSAgICBpZiAoa2luZCA9PSBHZXRVbmRlZmluZWQpCi0gICAgICAgIHN0dWJKaXQubW92
ZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCB2YWx1ZVJlZ3MpOwotICAgIGVsc2UgaWYgKGtp
bmQgIT0gQ2FsbEN1c3RvbUdldHRlciAmJiBraW5kICE9IENhbGxDdXN0b21TZXR0ZXIpIHsKLSAg
ICAgICAgaWYgKGtpbmQgPT0gR2V0VmFsdWUpCi0gICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUiA9
IHZhbHVlUmVncy5wYXlsb2FkR1BSKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGxvYWRl
ZFZhbHVlR1BSID0gc2NyYXRjaEdQUjsKLSAgICAgICAgCi0gICAgICAgIEdQUlJlZyBzdG9yYWdl
R1BSOwotICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgICAgIHN0
b3JhZ2VHUFIgPSBiYXNlRm9yQWNjZXNzR1BSOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlRm9yQWNjZXNzR1BS
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBsb2FkZWRWYWx1ZUdQUik7Ci0gICAgICAg
ICAgICBzdG9yYWdlR1BSID0gbG9hZGVkVmFsdWVHUFI7Ci0gICAgICAgIH0KLSAgICAgICAgCi0j
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgc3R1YkppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc3RvcmFnZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uob2Zmc2V0KSksIGxvYWRl
ZFZhbHVlR1BSKTsKLSNlbHNlCi0gICAgICAgIGlmIChraW5kID09IEdldFZhbHVlKQotICAgICAg
ICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwg
b2Zmc2V0UmVsYXRpdmVUb0Jhc2Uob2Zmc2V0KSArIFRhZ09mZnNldCksIHZhbHVlUmVncy50YWdH
UFIoKSk7Ci0gICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
b3JhZ2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKG9mZnNldCkgKyBQYXlsb2FkT2Zmc2V0KSwg
bG9hZGVkVmFsdWVHUFIpOwotI2VuZGlmCi0gICAgfQotCi0gICAgLy8gU3R1ZmYgZm9yIGN1c3Rv
bSBnZXR0ZXJzLgotICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG9wZXJhdGlvbkNhbGw7Ci0gICAg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgaGFuZGxlckNhbGw7Ci0KLSAgICAvLyBTdHVmZiBmb3IgSlMg
Z2V0dGVycy4KLSAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIGFkZHJlc3NPZkxpbmtG
dW5jdGlvbkNoZWNrOwotICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGZhc3RQYXRoQ2FsbDsKLSAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBzbG93UGF0aENhbGw7Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PENhbGxMaW5rSW5mbz4gY2FsbExpbmtJbmZvOwotCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
c3VjY2VzcywgZmFpbDsKLSAgICBpZiAoa2luZCAhPSBHZXRWYWx1ZSAmJiBraW5kICE9IEdldFVu
ZGVmaW5lZCkgewotICAgICAgICAvLyBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdoZW5ldmVyIHRo
aXMgY2FsbCBpcyBtYWRlIGluIHRoZSBmdXR1cmUsIHdlIHJlbWVtYmVyIHRoZQotICAgICAgICAv
LyBwbGFjZSB0aGF0IHdlIG1hZGUgaXQgZnJvbS4gSXQganVzdCBzbyBoYXBwZW5zIHRvIGJlIHRo
ZSBwbGFjZSB0aGF0IHdlIGFyZSBhdAotICAgICAgICAvLyByaWdodCBub3chCi0gICAgICAgIHN0
dWJKaXQuc3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHN0dWJJbmZvLmNhbGxT
aXRlSW5kZXguYml0cygpKSwKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKHN0YXRp
Y19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKLQotICAg
ICAgICBpZiAoa2luZCA9PSBDYWxsR2V0dGVyIHx8IGtpbmQgPT0gQ2FsbFNldHRlcikgewotICAg
ICAgICAgICAgLy8gQ3JlYXRlIGEgSlMgY2FsbCB1c2luZyBhIEpTIGNhbGwgaW5saW5lIGNhY2hl
LiBBc3N1bWUgdGhhdDoKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyAtIFNQIGlzIGFs
aWduZWQgYW5kIHJlcHJlc2VudHMgdGhlIGV4dGVudCBvZiB0aGUgY2FsbGluZyBjb21waWxlcidz
IHN0YWNrIHVzYWdlLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIC0gRlAgaXMgc2V0
IGNvcnJlY3RseSAoaS5lLiBpdCBwb2ludHMgdG8gdGhlIGNhbGxlcidzIGNhbGwgZnJhbWUgaGVh
ZGVyKS4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyAtIFNQIC0gRlAgaXMgYW4gYWxp
Z25lZCBkaWZmZXJlbmNlLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIC0gQW55IGJ5
dGUgYmV0d2VlbiBGUCAoZXhjbHVzaXZlKSBhbmQgU1AgKGluY2x1c2l2ZSkgY291bGQgYmUgbGl2
ZSBpbiB0aGUgY2FsbGluZwotICAgICAgICAgICAgLy8gICBjb2RlLgotICAgICAgICAgICAgLy8K
LSAgICAgICAgICAgIC8vIFRoZXJlZm9yZSwgd2UgdGVtcG9yYXJpbHkgZ3JvdyB0aGUgc3RhY2sg
Zm9yIHRoZSBwdXJwb3NlIG9mIHRoZSBjYWxsIGFuZCB0aGVuCi0gICAgICAgICAgICAvLyBzaHJp
bmsgaXQgYWZ0ZXIuCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIGNhbGxMaW5rSW5mbyA9IHN0
ZDo6bWFrZV91bmlxdWU8Q2FsbExpbmtJbmZvPigpOwotCi0gICAgICAgICAgICAvLyBGSVhNRTog
SWYgd2UgZ2VuZXJhdGVkIGEgcG9seW1vcnBoaWMgY2FsbCBzdHViIHRoYXQganVtcGVkIGJhY2sg
dG8gdGhlIGdldHRlcgotICAgICAgICAgICAgLy8gc3R1Yiwgd2hpY2ggdGhlbiBqdW1wZWQgYmFj
ayB0byB0aGUgbWFpbiBjb2RlLCB0aGVuIHdlJ2QgaGF2ZSBhIHJlYWNoYWJpbGl0eQotICAgICAg
ICAgICAgLy8gc2l0dWF0aW9uIHRoYXQgdGhlIEdDIGRvZXNuJ3Qga25vdyBhYm91dC4gVGhlIEdD
IHdvdWxkIGVuc3VyZSB0aGF0IHRoZSBwb2x5bW9ycGhpYwotICAgICAgICAgICAgLy8gY2FsbCBz
dHViIHN0YXllZCBhbGl2ZSwgYW5kIGl0IHdvdWxkIGVuc3VyZSB0aGF0IHRoZSBtYWluIGNvZGUg
c3RheWVkIGFsaXZlLCBidXQKLSAgICAgICAgICAgIC8vIGl0IHdvdWxkbid0IGtub3cgdGhhdCB0
aGUgZ2V0dGVyIHN0dWIgd2FzIGFsaXZlLiBJZGVhbGx5IEpJVCBzdHViIHJvdXRpbmVzIHdvdWxk
Ci0gICAgICAgICAgICAvLyBiZSBHQyBvYmplY3RzLCBhbmQgdGhlbiB3ZSdkIGJlIGFibGUgdG8g
c2F5IHRoYXQgdGhlIHBvbHltb3JwaGljIGNhbGwgc3R1YiBoYXMgYQotICAgICAgICAgICAgLy8g
cmVmZXJlbmNlIHRvIHRoZSBnZXR0ZXIgc3R1Yi4KLSAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDg5MTQKLSAgICAgICAgICAgIGNhbGxMaW5r
SW5mby0+ZGlzYWxsb3dTdHVicygpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBjYWxsTGlu
a0luZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNhbGwsIHN0dWJJbmZvLmNvZGVPcmlnaW4s
IGxvYWRlZFZhbHVlR1BSKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0IGRvbmU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFRoZXJlIGlz
IGEgJ3RoaXMnIGFyZ3VtZW50IGJ1dCBub3RoaW5nIGVsc2UuCi0gICAgICAgICAgICB1bnNpZ25l
ZCBudW1iZXJPZlBhcmFtZXRlcnMgPSAxOwotICAgICAgICAgICAgLy8gLi4uIHVubGVzcyB3ZSdy
ZSBjYWxsaW5nIGEgc2V0dGVyLgotICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ2FsbFNldHRlcikK
LSAgICAgICAgICAgICAgICBudW1iZXJPZlBhcmFtZXRlcnMrKzsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgLy8gR2V0IHRoZSBhY2Nlc3NvcjsgaWYgdGhlcmUgYWluJ3Qgb25lIHRoZW4gdGhl
IHJlc3VsdCBpcyBqc1VuZGVmaW5lZCgpLgotICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ2FsbFNl
dHRlcikgewotICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cigKLSAgICAgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobG9hZGVkVmFsdWVHUFIsIEdldHRlclNldHRl
cjo6b2Zmc2V0T2ZTZXR0ZXIoKSksCi0gICAgICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BS
KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRy
KAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhsb2FkZWRWYWx1
ZUdQUiwgR2V0dGVyU2V0dGVyOjpvZmZzZXRPZkdldHRlcigpKSwKLSAgICAgICAgICAgICAgICAg
ICAgbG9hZGVkVmFsdWVHUFIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgcmV0dXJuVW5kZWZpbmVkID0gc3R1YkppdC5icmFuY2hUZXN0UHRyKAotICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBsb2FkZWRWYWx1ZUdQUik7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mUmVnc0ZvckNhbGwgPQotICAg
ICAgICAgICAgICAgIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUgKyBudW1iZXJPZlBhcmFt
ZXRlcnM7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQnl0ZXNG
b3JDYWxsID0KLSAgICAgICAgICAgICAgICBudW1iZXJPZlJlZ3NGb3JDYWxsICogc2l6ZW9mKFJl
Z2lzdGVyKSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgdW5zaWduZWQgYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxsID0KLSAgICAgICAgICAg
ICAgICBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBudW1i
ZXJPZkJ5dGVzRm9yQ2FsbCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN0dWJKaXQuc3Vi
UHRyKAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoYWxpZ25l
ZE51bWJlck9mQnl0ZXNGb3JDYWxsKSwKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyBjYWxsZWVGcmFtZSA9IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAot
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwKLSAg
ICAgICAgICAgICAgICAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVB
bmRQQykpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3R1YkppdC5zdG9yZTMyKAotICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobnVtYmVyT2ZQYXJhbWV0
ZXJzKSwKLSAgICAgICAgICAgICAgICBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KAotICAgICAgICAg
ICAgICAgICAgICBKU1N0YWNrOjpBcmd1bWVudENvdW50ICogc2l6ZW9mKFJlZ2lzdGVyKSArIFBh
eWxvYWRPZmZzZXQpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3R1YkppdC5zdG9yZUNl
bGwoCi0gICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIsIGNhbGxlZUZyYW1lLndpdGhPZmZz
ZXQoSlNTdGFjazo6Q2FsbGVlICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwotCi0gICAgICAgICAgICBz
dHViSml0LnN0b3JlQ2VsbCgKLSAgICAgICAgICAgICAgICBiYXNlRm9yR2V0R1BSLAotICAgICAg
ICAgICAgICAgIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoCi0gICAgICAgICAgICAgICAgICAgIHZp
cnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDApLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSkp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsU2V0dGVyKSB7Ci0g
ICAgICAgICAgICAgICAgc3R1YkppdC5zdG9yZVZhbHVlKAotICAgICAgICAgICAgICAgICAgICB2
YWx1ZVJlZ3MsCi0gICAgICAgICAgICAgICAgICAgIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoCi0g
ICAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxKS5vZmZz
ZXQoKSAqIHNpemVvZihSZWdpc3RlcikpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd0Nhc2UgPSBzdHViSml0LmJyYW5j
aFB0cldpdGhQYXRjaCgKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IGxvYWRlZFZhbHVlR1BSLCBhZGRyZXNzT2ZMaW5rRnVuY3Rpb25DaGVjaywKLSAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigwKSk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGZhc3RQYXRoQ2FsbCA9IHN0dWJKaXQubmVhckNhbGwoKTsKLQotICAgICAgICAg
ICAgc3R1YkppdC5hZGRQdHIoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMihjb2RlQmxvY2stPnN0YWNrUG9pbnRlck9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVy
KSksCi0gICAgICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCi0gICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAg
ICAgIGlmIChraW5kID09IENhbGxHZXR0ZXIpCi0gICAgICAgICAgICAgICAgc3R1YkppdC5zZXR1
cFJlc3VsdHModmFsdWVSZWdzKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZG9uZS5hcHBl
bmQoc3R1YkppdC5qdW1wKCkpOwotICAgICAgICAgICAgc2xvd0Nhc2UubGluaygmc3R1YkppdCk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN0dWJKaXQubW92ZShsb2FkZWRWYWx1ZUdQUiwg
R1BSSW5mbzo6cmVnVDApOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgICAgICBzdHVi
Sml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwg
R1BSSW5mbzo6cmVnVDEpOwotI2VuZGlmCi0gICAgICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvLmdldCgpKSwgR1BSSW5mbzo6cmVn
VDIpOwotICAgICAgICAgICAgc2xvd1BhdGhDYWxsID0gc3R1YkppdC5uZWFyQ2FsbCgpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBzdHViSml0LmFkZFB0cigKLSAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGNvZGVCbG9jay0+c3RhY2tQb2ludGVyT2Zmc2V0
KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwKLSAgICAgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVy
UmVnaXN0ZXIpOwotICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ2FsbEdldHRlcikKLSAgICAgICAg
ICAgICAgICBzdHViSml0LnNldHVwUmVzdWx0cyh2YWx1ZVJlZ3MpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBkb25lLmFwcGVuZChzdHViSml0Lmp1bXAoKSk7Ci0gICAgICAgICAgICByZXR1
cm5VbmRlZmluZWQubGluaygmc3R1YkppdCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
IChraW5kID09IENhbGxHZXR0ZXIpCi0gICAgICAgICAgICAgICAgc3R1YkppdC5tb3ZlVHJ1c3Rl
ZFZhbHVlKGpzVW5kZWZpbmVkKCksIHZhbHVlUmVncyk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIGRvbmUubGluaygmc3R1YkppdCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAv
LyBnZXR0ZXI6IEVuY29kZWRKU1ZhbHVlICgqR2V0VmFsdWVGdW5jKShFeGVjU3RhdGUqLCBKU09i
amVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKTsK
LSAgICAgICAgICAgIC8vIHNldHRlcjogdm9pZCAoKlB1dFZhbHVlRnVuYykoRXhlY1N0YXRlKiwg
SlNPYmplY3QqIGJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IHZhbHVlKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ2Fs
bEN1c3RvbUdldHRlcikKLSAgICAgICAgICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShiYXNlRm9yQWNjZXNzR1BSLCBiYXNlRm9yR2V0R1BSLCBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihwcm9wZXJ0eU5hbWUuaW1wbCgpKSk7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFz
ZUZvckFjY2Vzc0dQUiwgYmFzZUZvckdldEdQUiwgdmFsdWVSZWdzLmdwcigpKTsKLSNlbHNlCi0g
ICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsQ3VzdG9tR2V0dGVyKQotICAgICAgICAgICAgICAg
IHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VGb3JBY2Nlc3NHUFIsIGJh
c2VGb3JHZXRHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRh
ZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHByb3BlcnR5TmFtZS5pbXBsKCkpKTsK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShiYXNlRm9yQWNjZXNzR1BSLCBiYXNlRm9yR2V0R1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQ
UigpLCB2YWx1ZVJlZ3MudGFnR1BSKCkpOwotI2VuZGlmCi0gICAgICAgICAgICBzdHViSml0LnN0
b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAmdm0tPnRvcENhbGxGcmFtZSk7Ci0K
LSAgICAgICAgICAgIG9wZXJhdGlvbkNhbGwgPSBzdHViSml0LmNhbGwoKTsKLSAgICAgICAgICAg
IGlmIChraW5kID09IENhbGxDdXN0b21HZXR0ZXIpCi0gICAgICAgICAgICAgICAgc3R1YkppdC5z
ZXR1cFJlc3VsdHModmFsdWVSZWdzKTsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IG5vRXhjZXB0aW9uID0gc3R1YkppdC5lbWl0RXhjZXB0aW9uQ2hlY2soQ0NhbGxIZWxwZXJzOjpJ
bnZlcnRlZEV4Y2VwdGlvbkNoZWNrKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3R1Ykpp
dC5zZXR1cEFyZ3VtZW50cyhDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodm0pLCBHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgICAgICAgICBoYW5kbGVyQ2FsbCA9IHN0dWJKaXQu
Y2FsbCgpOwotICAgICAgICAgICAgc3R1YkppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIG5vRXhjZXB0aW9uLmxpbmsoJnN0dWJKaXQpOwotICAg
ICAgICB9Ci0gICAgfQotICAgIGVtaXRSZXN0b3JlU2NyYXRjaChzdHViSml0LCBuZWVkVG9SZXN0
b3JlU2NyYXRjaCwgc2NyYXRjaEdQUiwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzKTsKLSAg
ICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgc3R1YkppdCwgZXhlYy0+Y29kZUJs
b2NrKCksIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7Ci0gICAgaWYgKHBhdGNoQnVmZmVyLmRpZEZh
aWxUb0FsbG9jYXRlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBsaW5rUmVz
dG9yZVNjcmF0Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdWNjZXNzLCBm
YWlsLCBmYWlsdXJlQ2FzZXMsIHN1Y2Nlc3NMYWJlbCwgc2xvd0Nhc2VMYWJlbCk7Ci0gICAgaWYg
KGtpbmQgPT0gQ2FsbEN1c3RvbUdldHRlciB8fCBraW5kID09IENhbGxDdXN0b21TZXR0ZXIpIHsK
LSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhvcGVyYXRpb25DYWxsLCBjdXN0b20pOwotICAgICAg
ICBwYXRjaEJ1ZmZlci5saW5rKGhhbmRsZXJDYWxsLCBsb29rdXBFeGNlcHRpb25IYW5kbGVyKTsK
LSAgICB9IGVsc2UgaWYgKGtpbmQgPT0gQ2FsbEdldHRlciB8fCBraW5kID09IENhbGxTZXR0ZXIp
IHsKLSAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKHBhdGNoQnVmZmVyLmxv
Y2F0aW9uT2ZOZWFyQ2FsbChzbG93UGF0aENhbGwpLAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIu
bG9jYXRpb25PZihhZGRyZXNzT2ZMaW5rRnVuY3Rpb25DaGVjayksCi0gICAgICAgICAgICBwYXRj
aEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoZmFzdFBhdGhDYWxsKSk7Ci0KLSAgICAgICAgcGF0
Y2hCdWZmZXIubGluaygKLSAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCwgQ29kZUxvY2F0aW9uTGFi
ZWwodm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7Ci0gICAg
fQotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlID0gRklOQUxJWkVfQ09ERV9G
T1IoCi0gICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLCBwYXRjaEJ1ZmZlciwKLSAgICAgICAgKCIl
cyBhY2Nlc3Mgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICAgICB0b1N0
cmluZyhraW5kKSwgdG9DU3RyaW5nKCpleGVjLT5jb2RlQmxvY2soKSkuZGF0YSgpLAotICAgICAg
ICAgICAgc3VjY2Vzc0xhYmVsLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKLSAgICAKLSAgICBpZiAo
a2luZCA9PSBDYWxsR2V0dGVyIHx8IGtpbmQgPT0gQ2FsbFNldHRlcikKLSAgICAgICAgc3R1YlJv
dXRpbmUgPSBhZG9wdFJlZihuZXcgQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUoY29kZSwgKnZt
LCBXVEY6Om1vdmUoY2FsbExpbmtJbmZvKSkpOwotICAgIGVsc2UKLSAgICAgICAgc3R1YlJvdXRp
bmUgPSBjcmVhdGVKSVRTdHViUm91dGluZShjb2RlLCAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksIHRydWUpOwotICAgIAotICAgIHJldHVybiB0cnVlOwotfQotCiBlbnVtIElubGlu
ZUNhY2hlQWN0aW9uIHsKICAgICBHaXZlVXBPbkNhY2hlLAogICAgIFJldHJ5Q2FjaGVMYXRlciwK
QEAgLTYyOSwxMzIgKzIzNyw5NiBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVH
ZXRCeUlECiAgICAgaWYgKE9wdGlvbnM6OmZvcmNlSUNGYWlsdXJlKCkpCiAgICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOwogICAgIAotICAgIC8vIEZJWE1FOiBXcml0ZSBhIHRlc3QgdGhhdCBw
cm92ZXMgd2UgbmVlZCB0byBjaGVjayBmb3IgcmVjdXJzaW9uIGhlcmUganVzdAotICAgIC8vIGxp
a2UgdGhlIGludGVycHJldGVyIGRvZXMsIHRoZW4gYWRkIGEgY2hlY2sgZm9yIHJlY3Vyc2lvbi4K
KyAgICAvLyBGSVhNRTogQ2FjaGUgcHJvcGVydHkgYWNjZXNzIGZvciBpbW1lZGlhdGVzLgorICAg
IGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQorICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsK
IAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7Ci0KLSAgICBpZiAoKGlzSlNBcnJheShiYXNlVmFsdWUpIHx8IGlz
SlNTdHJpbmcoYmFzZVZhbHVlKSkgJiYgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5sZW5ndGgpIHsKLSAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJS
ZWc+KHN0dWJJbmZvLnBhdGNoLmJhc2VHUFIpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAg
ICAgIEdQUlJlZyByZXN1bHRUYWdHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBh
dGNoLnZhbHVlVGFnR1BSKTsKLSNlbmRpZgotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gc3Rh
dGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZUdQUik7CisgICAgU2NyaXB0RXhl
Y3V0YWJsZSogb3duZXIgPSBjb2RlQmxvY2stPm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpOworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXIgc3R1YkppdDsK
LQotICAgICAgICBpZiAoaXNKU0FycmF5KGJhc2VWYWx1ZSkpIHsKLSAgICAgICAgICAgIEdQUlJl
ZyBzY3JhdGNoR1BSID0gVGVtcFJlZ2lzdGVyU2V0KHN0dWJJbmZvLnBhdGNoLnVzZWRSZWdpc3Rl
cnMpLmdldEZyZWVHUFIoKTsKLSAgICAgICAgICAgIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2gg
PSBmYWxzZTsKLQotICAgICAgICAgICAgaWYgKHNjcmF0Y2hHUFIgPT0gSW52YWxpZEdQUlJlZykg
ewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICAgICAgc2NyYXRjaEdQUiA9IEFzc2Vt
Ymx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCByZXN1bHRHUFIpOwotI2Vsc2UK
LSAgICAgICAgICAgICAgICBzY3JhdGNoR1BSID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3Jh
dGNoR1BSKGJhc2VHUFIsIHJlc3VsdEdQUiwgcmVzdWx0VGFnR1BSKTsKLSNlbmRpZgotICAgICAg
ICAgICAgICAgIHN0dWJKaXQucHVzaFRvU2F2ZShzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAg
ICBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7Ci0KLSAgICAgICAgICAg
IHN0dWJKaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpp
bmRleGluZ1R5cGVPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgZmFpbHVyZUNh
c2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2Ny
YXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihJc0FycmF5KSkpOwotICAgICAg
ICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2Vt
Ymxlcjo6WmVybywgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihJbmRl
eGluZ1NoYXBlTWFzaykpKTsKLQotICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNj
cmF0Y2hHUFIpOwotICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHNjcmF0Y2hH
UFIpOwotICAgICAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMigwKSkpOwotCi0gICAgICAgICAgICBzdHViSml0Lm1vdmUoc2NyYXRjaEdQUiwgcmVz
dWx0R1BSKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgc3R1YkppdC5vcjY0KEFz
c2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpLCByZXN1bHRHUFIpOwot
I2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgICAgIHN0dWJKaXQubW92ZShBc3NlbWJs
eUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHJlc3VsdFRhZ0dQUik7
Ci0jZW5kaWYKLQotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzcywgZmFp
bDsKLQotICAgICAgICAgICAgZW1pdFJlc3RvcmVTY3JhdGNoKHN0dWJKaXQsIG5lZWRUb1Jlc3Rv
cmVTY3JhdGNoLCBzY3JhdGNoR1BSLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgc3R1Ykpp
dCwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwotICAgICAgICAgICAgaWYgKHBh
dGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdp
dmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZl
ciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHN0dWJJbmZvLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJl
Q2FzZXMpOwotCi0gICAgICAgICAgICBzdHViSW5mby5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NP
REVfRk9SX1NUVUIoCi0gICAgICAgICAgICAgICAgZXhlYy0+Y29kZUJsb2NrKCksIHBhdGNoQnVm
ZmVyLAotICAgICAgICAgICAgICAgICgiR2V0QnlJZCBhcnJheSBsZW5ndGggc3R1YiBmb3IgJXMs
IHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqZXhlYy0+
Y29kZUJsb2NrKCkpLmRhdGEoKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRP
ZmZzZXQoCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxU
b0RvbmUpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKLQotICAgICAgICAgICAgcmVwbGFjZVdpdGhK
dW1wKHN0dWJJbmZvLCBzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7Ci0gICAg
ICAgICAgICByZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
biwgb3BlcmF0aW9uR2V0QnlJZCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IG5l
d0Nhc2U7CiAKKyAgICBpZiAoaXNKU0FycmF5KGJhc2VWYWx1ZSkgJiYgcHJvcGVydHlOYW1lID09
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpCisgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3ND
YXNlOjpnZXRMZW5ndGgodm0sIG93bmVyLCBBY2Nlc3NUeXBlOjpBcnJheUxlbmd0aCk7CisgICAg
ZWxzZSBpZiAoaXNKU1N0cmluZyhiYXNlVmFsdWUpICYmIHByb3BlcnR5TmFtZSA9PSBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkubGVuZ3RoKQorICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Z2V0
TGVuZ3RoKHZtLCBvd25lciwgQWNjZXNzVHlwZTo6U3RyaW5nTGVuZ3RoKTsKKyAgICBlbHNlIHsK
KyAgICAgICAgaWYgKCFzbG93LmlzQ2FjaGVhYmxlKCkgJiYgIXNsb3QuaXNVbnNldCgpKQorICAg
ICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgIAorICAgICAgICBKU0NlbGwq
IGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUodm0pOworICAgICAgICAKKyAgICAgICAgLy8gT3B0
aW1pemUgc2VsZiBhY2Nlc3MuCisgICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUgPT0gQ2Fj
aGVUeXBlOjpVbnNldAorICAgICAgICAgICAgJiYgc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkKKyAg
ICAgICAgICAgICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUKKyAgICAgICAgICAgICYm
ICFzbG90LndhdGNocG9pbnRTZXQoKQorICAgICAgICAgICAgJiYgTWFjcm9Bc3NlbWJsZXI6Omlz
Q29tcGFjdFB0ckFsaWduZWRBZGRyZXNzT2Zmc2V0KG1heE9mZnNldFJlbGF0aXZlVG9QYXRjaGVk
U3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSkKKyAgICAgICAgICAgICYmIGFjdGlvbkZvckNl
bGwodm0sIGJhc2VDZWxsKSA9PSBBdHRlbXB0VG9DYWNoZSkgeworICAgICAgICAgICAgc3RydWN0
dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHMoKnZtLCBzbG90LmNhY2hl
ZE9mZnNldCgpKTsKKyAgICAgICAgICAgIHJlcGF0Y2hCeUlkU2VsZkFjY2Vzcygqdm0sIGNvZGVC
bG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LmNhY2hlZE9mZnNl
dCgpLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHRydWUpOworICAgICAgICAgICAgc3R1Yklu
Zm8uaW5pdEdldEJ5SWRTZWxmKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3Ry
dWN0dXJlKTsKICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CiAgICAgICAgIH0K
IAotICAgICAgICAvLyBTdHJpbmcubGVuZ3RoIGNhc2UKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgZmFpbHVyZSA9IHN0dWJKaXQuYnJhbmNoOChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zm
c2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKFN0cmluZ1R5cGUpKTsKLQotICAg
ICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU1N0
cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSksIHJlc3VsdEdQUik7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0
KQotICAgICAgICBzdHViSml0Lm9yNjQoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tNjQoVGFn
VHlwZU51bWJlciksIHJlc3VsdEdQUik7Ci0jZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAg
ICBzdHViSml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50
MzJUYWcpLCByZXN1bHRUYWdHUFIpOwotI2VuZGlmCisgICAgICAgIGJvb2wgbG9hZFRhcmdldEZy
b21Qcm94eSA9IGZhbHNlOworICAgICAgICBpZiAoYmFzZUNlbGwtPnR5cGUoKSA9PSBQdXJlRm9y
d2FyZGluZ1Byb3h5VHlwZSkgeworICAgICAgICAgICAgYmFzZVZhbHVlID0ganNDYXN0PEpTUHJv
eHkqPihiYXNlQ2VsbCktPnRhcmdldCgpOworICAgICAgICAgICAgYmFzZUNlbGwgPSBiYXNlVmFs
dWUuYXNDZWxsKCk7CisgICAgICAgICAgICBzdHJ1Y3R1cmUgPSBiYXNlQ2VsbC0+c3RydWN0dXJl
KHZtKTsKKyAgICAgICAgICAgIGxvYWRUYXJnZXRGcm9tUHJveHkgPSB0cnVlOworICAgICAgICB9
CiAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgp
OworICAgICAgICBJbmxpbmVDYWNoZUFjdGlvbiBhY3Rpb24gPSBhY3Rpb25Gb3JDZWxsKHZtLCBi
YXNlQ2VsbCk7CisgICAgICAgIGlmIChhY3Rpb24gIT0gQXR0ZW1wdFRvQ2FjaGUpCisgICAgICAg
ICAgICByZXR1cm4gYWN0aW9uOwogCi0gICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZt
LCBzdHViSml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7Ci0gICAgICAgIGlm
IChwYXRjaEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKQotICAgICAgICAgICAgcmV0dXJuIEdp
dmVVcE9uQ2FjaGU7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuaXNVbnNl
dCgpID8gaW52YWxpZE9mZnNldCA6IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CiAgICAgICAgIAotICAg
ICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSkpOwotICAgICAg
ICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmUsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5s
YWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKLQotICAg
ICAgICBzdHViSW5mby5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAg
ICAgICAgICBleGVjLT5jb2RlQmxvY2soKSwgcGF0Y2hCdWZmZXIsCi0gICAgICAgICAgICAoIkdl
dEJ5SWQgc3RyaW5nIGxlbmd0aCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAg
ICAgICAgICAgICB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksIHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAgICAgICAgICBz
dHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAg
ICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAgICAgICBp
ZiAoc2xvdC5pc1Vuc2V0KCkgfHwgc2xvdC5zbG90QmFzZSgpICE9IGJhc2VWYWx1ZSkgeworICAg
ICAgICAgICAgaWYgKHR5cGVJbmZvLnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygpIHx8IHN0cnVj
dHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChzbG90LmlzVW5zZXQoKSkgeworICAg
ICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5
TWlzcygKKyAgICAgICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclBy
b3RvdHlwZVByb3BlcnR5SGl0KAorICAgICAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVu
dC5pbXBsKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAo
IWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG9mZnNldCA9IHNsb3QuaXNVbnNldCgp
ID8gaW52YWxpZE9mZnNldCA6IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNl
dCgpOworICAgICAgICB9CiAKLSAgICAgICAgcmVwbGFjZVdpdGhKdW1wKHN0dWJJbmZvLCBzdHVi
SW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7Ci0gICAgICAgIHJlcGF0Y2hDYWxsKGNv
ZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkKTsK
KyAgICAgICAgQWNjZXNzQ2FzZTo6QWNjZXNzVHlwZSB0eXBlOworICAgICAgICBpZiAoc2xvdC5p
c0NhY2hlYWJsZVZhbHVlKCkpCisgICAgICAgICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6TG9hZDsK
KyAgICAgICAgZWxzZSBpZiAoc2xvdC51c1Vuc2V0KCkpCisgICAgICAgICAgICB0eXBlID0gQWNj
ZXNzQ2FzZTo6TWlzczsKKyAgICAgICAgZWxzZSBpZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigp
KQorICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6OkdldHRlcjsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6OkN1c3RvbUdldHRlcjsKIAotICAgICAgICBy
ZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Z2V0
KAorICAgICAgICAgICAgdm0sIG93bmVyLCB0eXBlLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0
aW9uU2V0LCBsb2FkVGFyZ2V0RnJvbVByb3h5LAorICAgICAgICAgICAgc2xvdC53YXRjaHBvaW50
U2V0KCksIHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSA/IHNsb3QuY3VzdG9tR2V0dGVyKCkgOiBu
dWxscHRyKTsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogQ2FjaGUgcHJvcGVydHkgYWNjZXNzIGZv
ciBpbW1lZGlhdGVzLgotICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQotICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZSgpICYmICFzbG90
LmlzVW5zZXQoKSkKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0ciA9IHN0dWJJbmZv
LmFkZEFjY2Vzc0Nhc2UoCisgICAgICAgIHZtLCBjb2RlQmxvY2ssIHByb3BlcnR5TmFtZSwgc3Rk
Ojptb3ZlKG5ld0Nhc2UpKTsKKyAgICAKKyAgICBpZiAoIWNvZGVQdHIpCiAgICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOwogCi0gICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0Nl
bGwoKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKnZt
KTsKLQotICAgIElubGluZUNhY2hlQWN0aW9uIGFjdGlvbiA9IGFjdGlvbkZvckNlbGwoKnZtLCBi
YXNlQ2VsbCk7Ci0gICAgaWYgKGFjdGlvbiAhPSBBdHRlbXB0VG9DYWNoZSkKLSAgICAgICAgcmV0
dXJuIGFjdGlvbjsKLQotICAgIC8vIE9wdGltaXplIHNlbGYgYWNjZXNzLgotICAgIGlmIChzbG90
LmlzQ2FjaGVhYmxlVmFsdWUoKQotICAgICAgICAmJiBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZh
bHVlCi0gICAgICAgICYmICFzbG90LndhdGNocG9pbnRTZXQoKQotICAgICAgICAmJiBNYWNyb0Fz
c2VtYmxlcjo6aXNDb21wYWN0UHRyQWxpZ25lZEFkZHJlc3NPZmZzZXQobWF4T2Zmc2V0UmVsYXRp
dmVUb1BhdGNoZWRTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSkgewotICAgICAgICBzdHJ1
Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cygqdm0sIHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpOwotICAgICAgICByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoKnZtLCBjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdC5jYWNoZWRPZmZzZXQo
KSwgb3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlzdCwgdHJ1ZSk7Ci0gICAgICAgIHN0dWJJbmZvLmlu
aXRHZXRCeUlkU2VsZigqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVy
ZSk7Ci0gICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0gICAgfQotCi0gICAgcmVwYXRj
aENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdl
dEJ5SWRCdWlsZExpc3QpOworICAgIHJlcGxhY2VXaXRoSnVtcChzdHViSW5mbywgY29kZVB0cik7
CisgICAgCiAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKIH0KIApAQCAtNzY2LDExMiArMzM4
LDYgQEAgdm9pZCByZXBhdGNoR2V0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVgogICAgICAgICBy
ZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LCBvcGVyYXRpb25HZXRCeUlkKTsKIH0KIAotc3RhdGljIHZvaWQgcGF0Y2hKdW1wVG9HZXRCeUlk
U3R1YihTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEpJVFN0dWJSb3V0aW5lKiBzdHViUm91
dGluZSkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vz
c19nZXRfYnlfaWRfbGlzdCk7Ci0gICAgaWYgKHN0dWJJbmZvLnUuZ2V0QnlJZExpc3QubGlzdC0+
ZGlkU2VsZlBhdGNoaW5nKCkpIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1w
KAotICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldCgK
LSAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1bXApLAotICAgICAg
ICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICByZXBsYWNlV2l0aEp1bXAoc3R1YkluZm8s
IHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKLX0KLQotc3RhdGljIElubGluZUNhY2hlQWN0
aW9uIHRyeUJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1
ZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgp
Ci0gICAgICAgIHx8ICghc2xvdC5pc0NhY2hlYWJsZSgpICYmICFzbG90LmlzVW5zZXQoKSkpCi0g
ICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJh
c2VWYWx1ZS5hc0NlbGwoKTsKLSAgICBib29sIGxvYWRUYXJnZXRGcm9tUHJveHkgPSBmYWxzZTsK
LSAgICBpZiAoYmFzZUNlbGwtPnR5cGUoKSA9PSBQdXJlRm9yd2FyZGluZ1Byb3h5VHlwZSkgewot
ICAgICAgICBiYXNlVmFsdWUgPSBqc0Nhc3Q8SlNQcm94eSo+KGJhc2VDZWxsKS0+dGFyZ2V0KCk7
Ci0gICAgICAgIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwotICAgICAgICBsb2FkVGFy
Z2V0RnJvbVByb3h5ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
LSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotCi0gICAgSW5s
aW5lQ2FjaGVBY3Rpb24gYWN0aW9uID0gYWN0aW9uRm9yQ2VsbCgqdm0sIGJhc2VDZWxsKTsKLSAg
ICBpZiAoYWN0aW9uICE9IEF0dGVtcHRUb0NhY2hlKQotICAgICAgICByZXR1cm4gYWN0aW9uOwot
Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlQ2VsbC0+c3RydWN0dXJlKCp2bSk7Ci0g
ICAgVHlwZUluZm8gdHlwZUluZm8gPSBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCk7Ci0KLSAgICBpZiAo
c3R1YkluZm8ucGF0Y2guc3BpbGxNb2RlID09IE5lZWRUb1NwaWxsKSB7Ci0gICAgICAgIC8vIFdl
IGNhbm5vdCBkbyBhcyBtdWNoIGlubGluZSBjYWNoaW5nIGlmIHRoZSByZWdpc3RlcnMgd2VyZSBu
b3QgZmx1c2hlZCBwcmlvciB0byB0aGlzIEdldEJ5SWQuIEluIHBhcnRpY3VsYXIsCi0gICAgICAg
IC8vIG5vbi1WYWx1ZSBjYWNoZWQgcHJvcGVydGllcyByZXF1aXJlIHBsYW50aW5nIGNhbGxzLCB3
aGljaCByZXF1aXJlcyByZWdpc3RlcnMgdG8gaGF2ZSBiZWVuIGZsdXNoZWQuIFRodXMsCi0gICAg
ICAgIC8vIGlmIHJlZ2lzdGVycyB3ZXJlIG5vdCBmbHVzaGVkLCBkb24ndCBkbyBub24tVmFsdWUg
Y2FjaGluZy4KLSAgICAgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSAmJiAhc2xvdC5p
c1Vuc2V0KCkpCi0gICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICB9Ci0KLSAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90LmlzVW5zZXQoKSA/IGludmFsaWRPZmZzZXQg
OiBzbG90LmNhY2hlZE9mZnNldCgpOwotICAgIAotICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0IGNvbmRpdGlvblNldDsKLSAgICBpZiAoc2xvdC5pc1Vuc2V0KCkgfHwgc2xvdC5zbG90QmFz
ZSgpICE9IGJhc2VWYWx1ZSkgewotICAgICAgICBpZiAodHlwZUluZm8ucHJvaGliaXRzUHJvcGVy
dHlDYWNoaW5nKCkgfHwgc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHJl
dHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgIGlmIChzbG90LmlzVW5zZXQoKSkKLSAgICAg
ICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcygq
dm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgaWRlbnQu
aW1wbCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJh
dGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoKnZtLCBjb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwgaWRlbnQuaW1w
bCgpKTsKLQotICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCi0gICAgICAgICAg
ICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICBvZmZzZXQgPSBzbG90LmlzVW5zZXQo
KSA/IGludmFsaWRPZmZzZXQgOiBjb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vZmZz
ZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogbGlzdCA9IFBv
bHltb3JwaGljR2V0QnlJZExpc3Q6OmZyb20oc3R1YkluZm8pOwotICAgIGlmIChsaXN0LT5pc0Z1
bGwoKSkgewotICAgICAgICAvLyBXZSBuZWVkIHRoaXMgZXh0cmEgY2hlY2sgYmVjYXVzZSBvZiBy
ZWN1cnNpb24uCi0gICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgIH0KLSAgICAKLSAg
ICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwotICAgIGJvb2wgcmVzdWx0ID0g
Z2VuZXJhdGVCeUlkU3R1YigKLSAgICAgICAgZXhlYywga2luZEZvcihzbG90KSwgaWRlbnQsIGN1
c3RvbUZvcihzbG90KSwgc3R1YkluZm8sIGNvbmRpdGlvblNldCwgc2xvdC5zbG90QmFzZSgpLCBv
ZmZzZXQsIAotICAgICAgICBzdHJ1Y3R1cmUsIGxvYWRUYXJnZXRGcm9tUHJveHksIHNsb3Qud2F0
Y2hwb2ludFNldCgpLCAKLSAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVs
QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSwKLSAgICAgICAgQ29kZUxv
Y2F0aW9uTGFiZWwobGlzdC0+Y3VycmVudFNsb3dQYXRoVGFyZ2V0KHN0dWJJbmZvKSksIHN0dWJS
b3V0aW5lKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
Ci0gICAgCi0gICAgR2V0QnlJZEFjY2Vzczo6QWNjZXNzVHlwZSBhY2Nlc3NUeXBlOwotICAgIGlm
IChzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSkKLSAgICAgICAgYWNjZXNzVHlwZSA9IHNsb3Qud2F0
Y2hwb2ludFNldCgpID8gR2V0QnlJZEFjY2Vzczo6V2F0Y2hlZFN0dWIgOiBHZXRCeUlkQWNjZXNz
OjpTaW1wbGVTdHViOwotICAgIGVsc2UgaWYgKHNsb3QuaXNVbnNldCgpKQotICAgICAgICBhY2Nl
c3NUeXBlID0gR2V0QnlJZEFjY2Vzczo6U2ltcGxlTWlzczsKLSAgICBlbHNlIGlmIChzbG90Lmlz
Q2FjaGVhYmxlR2V0dGVyKCkpCi0gICAgICAgIGFjY2Vzc1R5cGUgPSBHZXRCeUlkQWNjZXNzOjpH
ZXR0ZXI7Ci0gICAgZWxzZQotICAgICAgICBhY2Nlc3NUeXBlID0gR2V0QnlJZEFjY2Vzczo6Q3Vz
dG9tR2V0dGVyOwotICAgIAotICAgIGxpc3QtPmFkZEFjY2VzcyhHZXRCeUlkQWNjZXNzKAotICAg
ICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGFjY2Vzc1R5cGUsIHN0dWJS
b3V0aW5lLCBzdHJ1Y3R1cmUsCi0gICAgICAgIGNvbmRpdGlvblNldCkpOwotICAgIAotICAgIHBh
dGNoSnVtcFRvR2V0QnlJZFN0dWIoc3R1YkluZm8sIHN0dWJSb3V0aW5lLmdldCgpKTsKLSAgICAK
LSAgICByZXR1cm4gbGlzdC0+aXNGdWxsKCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxh
dGVyOwotfQotCi12b2lkIGJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0
eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBHQ1NhZmVD
b25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihleGVjLT5jb2RlQmxvY2soKS0+bV9sb2NrLCBleGVj
LT52bSgpLmhlYXApOwotICAgIAotICAgIGlmICh0cnlCdWlsZEdldEJ5SURMaXN0KGV4ZWMsIGJh
c2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbykgPT0gR2l2ZVVwT25DYWNoZSkK
LSAgICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZCk7Ci19Ci0KIHN0YXRpYyBWX0pJVE9wZXJhdGlv
bl9FU3NpSkpJIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQcm9w
ZXJ0eVNsb3QgJnNsb3QsIFB1dEtpbmQgcHV0S2luZCkKIHsKICAgICBpZiAoc2xvdC5pc1N0cmlj
dE1vZGUoKSkgewpAQCAtODg0LDM1OSArMzUwLDE2IEBAIHN0YXRpYyBWX0pJVE9wZXJhdGlvbl9F
U3NpSkpJIGFwcHJvcHJpYXQKICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdDsK
IH0KIAotc3RhdGljIFZfSklUT3BlcmF0aW9uX0VTc2lKSkkgYXBwcm9wcmlhdGVMaXN0QnVpbGRp
bmdQdXRCeUlkRnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRLaW5kIHB1
dEtpbmQpCitzdGF0aWMgVl9KSVRPcGVyYXRpb25fRVNzaUpKSSBhcHByb3ByaWF0ZU9wdGltaXpp
bmdQdXRCeUlkRnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRLaW5kIHB1
dEtpbmQpCiB7CiAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpIHsKICAgICAgICAgaWYgKHB1
dEtpbmQgPT0gRGlyZWN0KQotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJl
Y3RTdHJpY3RCdWlsZExpc3Q7Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0
QnVpbGRMaXN0OworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJp
Y3RPcHRpbWl6ZTsKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6
ZTsKICAgICB9CiAgICAgaWYgKHB1dEtpbmQgPT0gRGlyZWN0KQotICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1aWxkTGlzdDsKLSAgICByZXR1cm4gb3BlcmF0
aW9uUHV0QnlJZE5vblN0cmljdEJ1aWxkTGlzdDsKLX0KLQotc3RhdGljIGJvb2wgZW1pdFB1dFJl
cGxhY2VTdHViKAotICAgIEV4ZWNTdGF0ZSogZXhlYywKLSAgICBjb25zdCBJZGVudGlmaWVyJiwK
LSAgICBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsCi0gICAgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvLAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLAotICAgIENvZGVMb2NhdGlvbkxh
YmVsIGZhaWx1cmVMYWJlbCwKLSAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+JiBzdHViUm91dGlu
ZSkKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHN0
YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guYmFzZUdQUik7Ci0jaWYgVVNFKEpTVkFM
VUUzMl82NCkKLSAgICBHUFJSZWcgdmFsdWVUYWdHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0
dWJJbmZvLnBhdGNoLnZhbHVlVGFnR1BSKTsKLSNlbmRpZgotICAgIEdQUlJlZyB2YWx1ZUdQUiA9
IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVHUFIpOwotCi0gICAgU2Ny
YXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcihzdHViSW5mby5wYXRjaC51c2VkUmVnaXN0
ZXJzKTsKLSAgICBhbGxvY2F0b3IubG9jayhiYXNlR1BSKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0
KQotICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlVGFnR1BSKTsKLSNlbmRpZgotICAgIGFsbG9jYXRv
ci5sb2NrKHZhbHVlR1BSKTsKLSAgICAKLSAgICBHUFJSZWcgc2NyYXRjaEdQUjEgPSBhbGxvY2F0
b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7Ci0KLSAgICBDQ2FsbEhlbHBlcnMgc3R1YkppdCh2bSwg
ZXhlYy0+Y29kZUJsb2NrKCkpOwotCi0gICAgc2l6ZV90IG51bWJlck9mUGFkZGluZ0J5dGVzID0g
YWxsb2NhdG9yLnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKHN0dWJKaXQpOwotCi0g
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmFkU3RydWN0dXJlID0gc3R1YkppdC5icmFuY2hTdHJ1
Y3R1cmUoCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKLSAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwK
LSAgICAgICAgc3RydWN0dXJlKTsKLQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgaWYgKGlzSW5s
aW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKQotICAgICAgICBzdHViSml0LnN0b3JlNjQo
dmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZz
ZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9m
ZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOwotICAgIGVsc2UgewotICAgICAgICBzdHViSml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUjEpOwotICAgICAgICBzdHViSml0LnN0b3JlNjQodmFs
dWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRl
cmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOwotICAgIH0KLSNl
bGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVk
T2Zmc2V0KCkpKSB7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgp
ICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpT
VmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5w
YXlsb2FkKSkpOwotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2Uo
KSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihK
U1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMu
dGFnKSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3Jh
dGNoR1BSMSk7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zm
c2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURl
c2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFs
dWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1
dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9P
RkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwotICAgIH0KLSNl
bmRpZgotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3M7Ci0gICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgZmFpbHVyZTsKLSAgICAKLSAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNl
UmVnaXN0ZXJzKCkpIHsKLSAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNC
eVBvcHBpbmcoc3R1YkppdCwgbnVtYmVyT2ZQYWRkaW5nQnl0ZXMpOwotICAgICAgICBzdWNjZXNz
ID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgICAgIAotICAgICAgICBiYWRTdHJ1Y3R1cmUubGluaygm
c3R1YkppdCk7Ci0gICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3Bw
aW5nKHN0dWJKaXQsIG51bWJlck9mUGFkZGluZ0J5dGVzKTsKLSAgICAgICAgZmFpbHVyZSA9IHN0
dWJKaXQuanVtcCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1
bXAoKTsKLSAgICAgICAgZmFpbHVyZSA9IGJhZFN0cnVjdHVyZTsKLSAgICB9Ci0gICAgCi0gICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIHN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygpLCBK
SVRDb21waWxhdGlvbkNhbkZhaWwpOwotICAgIGlmIChwYXRjaEJ1ZmZlci5kaWRGYWlsVG9BbGxv
Y2F0ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgcGF0Y2hCdWZmZXIubGlu
ayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHVi
SW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1
cmUsIGZhaWx1cmVMYWJlbCk7Ci0gICAgICAgICAgICAKLSAgICBzdHViUm91dGluZSA9IEZJTkFM
SVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLCBwYXRjaEJ1ZmZl
ciwKLSAgICAgICAgKCJQdXRCeUlkIHJlcGxhY2Ugc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAl
cCIsCi0gICAgICAgICAgICB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksIHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAgICAg
IHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwot
ICAgIAotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCBlbWl0UHV0VHJhbnNpdGlv
blN0dWIoCi0gICAgRXhlY1N0YXRlKiBleGVjLCBWTSogdm0sIFN0cnVjdHVyZSomIHN0cnVjdHVy
ZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIAotICAgIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYg
c2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQsCi0gICAg
U3RydWN0dXJlKiYgb2xkU3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29u
ZGl0aW9uU2V0KQotewotICAgIFByb3BlcnR5TmFtZSBwbmFtZShpZGVudCk7Ci0gICAgb2xkU3Ry
dWN0dXJlID0gc3RydWN0dXJlOwotICAgIGlmICghb2xkU3RydWN0dXJlLT5pc09iamVjdCgpIHx8
IG9sZFN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkgfHwgcGFyc2VJbmRleChwbmFtZSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIFByb3BlcnR5T2Zmc2V0IHByb3BlcnR5T2Zmc2V0Owot
ICAgIHN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGlu
Z1N0cnVjdHVyZUNvbmN1cnJlbnRseShvbGRTdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSwgMCwgcHJv
cGVydHlPZmZzZXQpOwotCi0gICAgaWYgKCFzdHJ1Y3R1cmUgfHwgIXN0cnVjdHVyZS0+aXNPYmpl
Y3QoKSB8fCBzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpIHx8ICFzdHJ1Y3R1cmUtPnByb3BlcnR5
QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8g
U2tpcCBvcHRpbWl6aW5nIHRoZSBjYXNlIHdoZXJlIHdlIG5lZWQgYSByZWFsbG9jLCBpZiB3ZSBk
b24ndCBoYXZlCi0gICAgLy8gZW5vdWdoIHJlZ2lzdGVycyB0byBtYWtlIGl0IGhhcHBlbi4KLSAg
ICBpZiAoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgPCA2Ci0gICAgICAgICYmIG9sZFN0cnVj
dHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCkKLSAgICAgICAgJiYgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBTa2lwIG9wdGltaXppbmcgdGhlIGNh
c2Ugd2hlcmUgd2UgbmVlZCByZWFsbG9jLCBhbmQgdGhlIHN0cnVjdHVyZSBoYXMKLSAgICAvLyBp
bmRleGluZyBzdG9yYWdlLgotICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3Qgc2tpcCB0aGlzISBJ
bXBsZW1lbnQgaXQhCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEzMDkxNAotICAgIGlmIChvbGRTdHJ1Y3R1cmUtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVy
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChwdXRLaW5kID09IE5vdERpcmVj
dCkgewotICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0
eVNldHRlck1pc3MoCi0gICAgICAgICAgICAqdm0sIGV4ZWMtPmNvZGVCbG9jaygpLT5vd25lckV4
ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBpZGVudC5pbXBsKCkpOwotICAgICAgICBpZiAo
IWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZmFpbHVyZUxhYmVsID0gc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93
Q2FzZSk7Ci0gICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUgPSBzdHViSW5m
by5zdHViUm91dGluZTsKLQotICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVn
PihzdHViSW5mby5wYXRjaC5iYXNlR1BSKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIEdQ
UlJlZyB2YWx1ZVRhZ0dQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gudmFs
dWVUYWdHUFIpOwotI2VuZGlmCi0gICAgR1BSUmVnIHZhbHVlR1BSID0gc3RhdGljX2Nhc3Q8R1BS
UmVnPihzdHViSW5mby5wYXRjaC52YWx1ZUdQUik7Ci0gICAgCi0gICAgU2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yIGFsbG9jYXRvcihzdHViSW5mby5wYXRjaC51c2VkUmVnaXN0ZXJzKTsKLSAgICBh
bGxvY2F0b3IubG9jayhiYXNlR1BSKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIGFsbG9j
YXRvci5sb2NrKHZhbHVlVGFnR1BSKTsKLSNlbmRpZgotICAgIGFsbG9jYXRvci5sb2NrKHZhbHVl
R1BSKTsKLSAgICAKLSAgICBDQ2FsbEhlbHBlcnMgc3R1YkppdCh2bSk7Ci0gICAgCi0gICAgYm9v
bCBuZWVkVGhpcmRTY3JhdGNoID0gZmFsc2U7Ci0gICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkKLSAgICAgICAg
JiYgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgIG5lZWRUaGly
ZFNjcmF0Y2ggPSB0cnVlOwotICAgIH0KLQotICAgIEdQUlJlZyBzY3JhdGNoR1BSMSA9IGFsbG9j
YXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKLSAgICBBU1NFUlQoc2NyYXRjaEdQUjEgIT0gYmFz
ZUdQUik7Ci0gICAgQVNTRVJUKHNjcmF0Y2hHUFIxICE9IHZhbHVlR1BSKTsKLSAgICAKLSAgICBH
UFJSZWcgc2NyYXRjaEdQUjIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7Ci0gICAg
QVNTRVJUKHNjcmF0Y2hHUFIyICE9IGJhc2VHUFIpOwotICAgIEFTU0VSVChzY3JhdGNoR1BSMiAh
PSB2YWx1ZUdQUik7Ci0gICAgQVNTRVJUKHNjcmF0Y2hHUFIyICE9IHNjcmF0Y2hHUFIxKTsKLQot
ICAgIEdQUlJlZyBzY3JhdGNoR1BSMzsKLSAgICBpZiAobmVlZFRoaXJkU2NyYXRjaCkgewotICAg
ICAgICBzY3JhdGNoR1BSMyA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKLSAgICAg
ICAgQVNTRVJUKHNjcmF0Y2hHUFIzICE9IGJhc2VHUFIpOwotICAgICAgICBBU1NFUlQoc2NyYXRj
aEdQUjMgIT0gdmFsdWVHUFIpOwotICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjMgIT0gc2NyYXRj
aEdQUjEpOwotICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjMgIT0gc2NyYXRjaEdQUjIpOwotICAg
IH0gZWxzZQotICAgICAgICBzY3JhdGNoR1BSMyA9IEludmFsaWRHUFJSZWc7Ci0gICAgCi0gICAg
c2l6ZV90IG51bWJlck9mUGFkZGluZ0J5dGVzID0gYWxsb2NhdG9yLnByZXNlcnZlUmV1c2VkUmVn
aXN0ZXJzQnlQdXNoaW5nKHN0dWJKaXQpOwotCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IGZhaWx1cmVDYXNlczsKLSAgICAgICAgICAgIAotICAgIEFTU0VSVChvbGRTdHJ1Y3R1cmUtPnRy
YW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOwotICAgIAotICAgIGZh
aWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2hTdHJ1Y3R1cmUoCi0gICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIAotICAgICAgICBvbGRTdHJ1Y3R1
cmUpKTsKLSAgICAKLSAgICBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9ucygKLSAgICAgICAg
Y29uZGl0aW9uU2V0LCBleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8sIHN0dWJKaXQsIGZhaWx1
cmVDYXNlcywgc2NyYXRjaEdQUjEpOwotCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNs
b3dQYXRoOwotICAgIAotICAgIGJvb2wgc2NyYXRjaEdQUjFIYXNTdG9yYWdlID0gZmFsc2U7Ci0g
ICAgCi0gICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1
cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBzdHJ1
Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7Ci0gICAgICAgIENv
cGllZEFsbG9jYXRvciogY29waWVkQWxsb2NhdG9yID0gJnZtLT5oZWFwLnN0b3JhZ2VBbGxvY2F0
b3IoKTsKLSAgICAgICAgCi0gICAgICAgIGlmICghb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpKSB7Ci0gICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoJmNvcGllZEFsbG9jYXRvci0+
bV9jdXJyZW50UmVtYWluaW5nLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgICAgICBzbG93UGF0aC5h
cHBlbmQoc3R1YkppdC5icmFuY2hTdWJQdHIoTWFjcm9Bc3NlbWJsZXI6OlNpZ25lZCwgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRjaEdQUjEpKTsKLSAgICAgICAg
ICAgIHN0dWJKaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjEsICZjb3BpZWRBbGxvY2F0b3ItPm1fY3Vy
cmVudFJlbWFpbmluZyk7Ci0gICAgICAgICAgICBzdHViSml0Lm5lZ1B0cihzY3JhdGNoR1BSMSk7
Ci0gICAgICAgICAgICBzdHViSml0LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRy
ZXNzKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQpLCBzY3JhdGNoR1BSMSk7
Ci0gICAgICAgICAgICBzdHViSml0LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KHNpemVvZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIHNpemVfdCBvbGRTaXplID0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
ICogc2l6ZW9mKEpTVmFsdWUpOwotICAgICAgICAgICAgQVNTRVJUKG5ld1NpemUgPiBvbGRTaXpl
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0
Y2hHUFIzKTsKLSAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cigmY29waWVkQWxsb2NhdG9yLT5t
X2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAgIHNsb3dQYXRoLmFw
cGVuZChzdHViSml0LmJyYW5jaFN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6U2lnbmVkLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BSMSkpOwotICAgICAgICAg
ICAgc3R1YkppdC5zdG9yZVB0cihzY3JhdGNoR1BSMSwgJmNvcGllZEFsbG9jYXRvci0+bV9jdXJy
ZW50UmVtYWluaW5nKTsKLSAgICAgICAgICAgIHN0dWJKaXQubmVnUHRyKHNjcmF0Y2hHUFIxKTsK
LSAgICAgICAgICAgIHN0dWJKaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJl
c3MoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UGF5bG9hZEVuZCksIHNjcmF0Y2hHUFIxKTsK
LSAgICAgICAgICAgIHN0dWJKaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
c2l6ZW9mKEpTVmFsdWUpKSwgc2NyYXRjaEdQUjEpOwotICAgICAgICAgICAgLy8gV2UgaGF2ZSBz
Y3JhdGNoR1BSMSA9IG5ldyBzdG9yYWdlLCBzY3JhdGNoR1BSMyA9IG9sZCBzdG9yYWdlLCBzY3Jh
dGNoR1BSMiA9IGF2YWlsYWJsZQotICAgICAgICAgICAgZm9yIChzaXplX3Qgb2Zmc2V0ID0gMDsg
b2Zmc2V0IDwgb2xkU2l6ZTsgb2Zmc2V0ICs9IHNpemVvZih2b2lkKikpIHsKLSAgICAgICAgICAg
ICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjMs
IC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSArIHNpemVv
Zih2b2lkKikpKSwgc2NyYXRjaEdQUjIpOwotICAgICAgICAgICAgICAgIHN0dWJKaXQuc3RvcmVQ
dHIoc2NyYXRjaEdQUjIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCAtc3Rh
dGljX2Nhc3Q8cHRyZGlmZl90PihvZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2Yodm9p
ZCopKSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzdHVi
Sml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIxLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsKLSAgICAgICAgc2NyYXRjaEdQUjFIYXNT
dG9yYWdlID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBBU1NFUlQob2xkU3RydWN0dXJlLT50eXBlSW5m
bygpLnR5cGUoKSA9PSBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpKTsKLSAgICBBU1NFUlQo
b2xkU3RydWN0dXJlLT50eXBlSW5mbygpLmlubGluZVR5cGVGbGFncygpID09IHN0cnVjdHVyZS0+
dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKSk7Ci0gICAgQVNTRVJUKG9sZFN0cnVjdHVyZS0+
aW5kZXhpbmdUeXBlKCkgPT0gc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSk7Ci0jaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICB1aW50MzJfdCB2YWwgPSBzdHJ1Y3R1cmUtPmlkKCk7Ci0jZWxzZQotICAg
IHVpbnQzMl90IHZhbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KHN0cnVjdHVyZS0+aWQo
KSk7Ci0jZW5kaWYKLSAgICBzdHViSml0LnN0b3JlMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMih2YWwpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVj
dHVyZUlET2Zmc2V0KCkpKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGlmIChpc0lubGluZU9m
ZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkKLSAgICAgICAgc3R1YkppdC5zdG9yZTY0KHZhbHVl
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJ
bmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQo
KSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKCFzY3JhdGNo
R1BSMUhhc1N0b3JhZ2UpCi0gICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRj
aEdQUjEpOwotICAgICAgICBzdHViSml0LnN0b3JlNjQodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNl
dCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOwotICAgIH0KLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQp
Ci0gICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSB7Ci0gICAgICAg
IHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9y
YWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNF
VE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwotICAgICAgICBz
dHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VH
UFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3Rv
cmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZT
RVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIGlmICghc2NyYXRjaEdQUjFIYXNTdG9yYWdlKQotICAgICAgICAgICAgc3R1Ykpp
dC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZh
bHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5CdXR0
ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZG
U0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7Ci0gICAgICAg
IHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2Ny
YXRjaEdQUjEsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9m
KEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0
cy50YWcpKSk7Ci0gICAgfQotI2VuZGlmCi0gICAgCi0gICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRj
aEJ1ZmZlciA9IG51bGxwdHI7Ci0KLSNpZiBFTkFCTEUoR0dDKQotICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIGNhbGxGbHVzaFdyaXRlQmFycmllckJ1ZmZlcjsKLSAgICBpZiAoc3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkg
ewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVu
ID0gc3R1YkppdC5qdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihiYXNlR1BSKTsKLSAgICAgICAg
V3JpdGVCYXJyaWVyQnVmZmVyJiB3cml0ZUJhcnJpZXJCdWZmZXIgPSBzdHViSml0LnZtKCktPmhl
YXAud3JpdGVCYXJyaWVyQnVmZmVyKCk7Ci0gICAgICAgIHN0dWJKaXQubG9hZDMyKHdyaXRlQmFy
cmllckJ1ZmZlci5jdXJyZW50SW5kZXhBZGRyZXNzKCksIHNjcmF0Y2hHUFIyKTsKLSAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgbmVlZFRvRmx1c2ggPQotICAgICAgICAgICAgc3R1YkppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzY3JhdGNoR1BSMiwgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMih3cml0ZUJhcnJpZXJCdWZmZXIuY2FwYWNpdHkoKSkpOwot
Ci0gICAgICAgIHN0dWJKaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwg
c2NyYXRjaEdQUjIpOwotICAgICAgICBzdHViSml0LnN0b3JlMzIoc2NyYXRjaEdQUjIsIHdyaXRl
QmFycmllckJ1ZmZlci5jdXJyZW50SW5kZXhBZGRyZXNzKCkpOwotCi0gICAgICAgIHN0dWJKaXQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih3cml0ZUJhcnJpZXJCdWZmZXIuYnVm
ZmVyKCkpLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIC8vIFdlIHVzZSBhbiBvZmZzZXQgb2YgLXNp
emVvZih2b2lkKikgYmVjYXVzZSB3ZSBhbHJlYWR5IGFkZGVkIDEgdG8gc2NyYXRjaEdQUjIuCi0g
ICAgICAgIHN0dWJKaXQuc3RvcmVQdHIoYmFzZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eChzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgc3Rh
dGljX2Nhc3Q8aW50MzJfdD4oLXNpemVvZih2b2lkKikpKSk7Ci0KLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgZG9uZVdpdGhCYXJyaWVyID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgICAgIG5l
ZWRUb0ZsdXNoLmxpbmsoJnN0dWJKaXQpOwotCi0gICAgICAgIHNjcmF0Y2hCdWZmZXIgPSB2bS0+
c2NyYXRjaEJ1ZmZlckZvclNpemUoYWxsb2NhdG9yLmRlc2lyZWRTY3JhdGNoQnVmZmVyU2l6ZUZv
ckNhbGwoKSk7Ci0gICAgICAgIGFsbG9jYXRvci5wcmVzZXJ2ZVVzZWRSZWdpc3RlcnNUb1NjcmF0
Y2hCdWZmZXJGb3JDYWxsKHN0dWJKaXQsIHNjcmF0Y2hCdWZmZXIsIHNjcmF0Y2hHUFIyKTsKLSAg
ICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUdQUik7Ci0gICAg
ICAgIGNhbGxGbHVzaFdyaXRlQmFycmllckJ1ZmZlciA9IHN0dWJKaXQuY2FsbCgpOwotICAgICAg
ICBhbGxvY2F0b3IucmVzdG9yZVVzZWRSZWdpc3RlcnNGcm9tU2NyYXRjaEJ1ZmZlckZvckNhbGwo
c3R1YkppdCwgc2NyYXRjaEJ1ZmZlciwgc2NyYXRjaEdQUjIpOwotCi0gICAgICAgIGRvbmVXaXRo
QmFycmllci5saW5rKCZzdHViSml0KTsKLSAgICAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRl
bi5saW5rKCZzdHViSml0KTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIHN1Y2Nlc3M7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbHVyZTsKLSAgICAgICAg
ICAgIAotICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMoKSkgewotICAgICAgICBh
bGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhzdHViSml0LCBudW1iZXJP
ZlBhZGRpbmdCeXRlcyk7Ci0gICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKLQotICAg
ICAgICBmYWlsdXJlQ2FzZXMubGluaygmc3R1YkppdCk7Ci0gICAgICAgIGFsbG9jYXRvci5yZXN0
b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKHN0dWJKaXQsIG51bWJlck9mUGFkZGluZ0J5dGVz
KTsKLSAgICAgICAgZmFpbHVyZSA9IHN0dWJKaXQuanVtcCgpOwotICAgIH0gZWxzZQotICAgICAg
ICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgb3BlcmF0aW9uQ2FsbDsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzSW5TbG93
UGF0aDsKLSAgICAKLSAgICBpZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9s
ZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICBzbG93UGF0aC5saW5r
KCZzdHViSml0KTsKLSAgICAgICAgCi0gICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVn
aXN0ZXJzQnlQb3BwaW5nKHN0dWJKaXQsIG51bWJlck9mUGFkZGluZ0J5dGVzKTsKLSAgICAgICAg
aWYgKCFzY3JhdGNoQnVmZmVyKQotICAgICAgICAgICAgc2NyYXRjaEJ1ZmZlciA9IHZtLT5zY3Jh
dGNoQnVmZmVyRm9yU2l6ZShhbGxvY2F0b3IuZGVzaXJlZFNjcmF0Y2hCdWZmZXJTaXplRm9yQ2Fs
bCgpKTsKLSAgICAgICAgYWxsb2NhdG9yLnByZXNlcnZlVXNlZFJlZ2lzdGVyc1RvU2NyYXRjaEJ1
ZmZlckZvckNhbGwoc3R1YkppdCwgc2NyYXRjaEJ1ZmZlciwgc2NyYXRjaEdQUjEpOwotI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KGJhc2VHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2xvdC5jYWNoZWRPZmZzZXQoKSksIHZhbHVlR1BSKTsK
LSNlbHNlCi0gICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VH
UFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoc2xvdC5jYWNoZWRPZmZzZXQoKSksIHZhbHVlR1BSLCB2YWx1ZVRh
Z0dQUik7Ci0jZW5kaWYKLSAgICAgICAgb3BlcmF0aW9uQ2FsbCA9IHN0dWJKaXQuY2FsbCgpOwot
ICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVVzZWRSZWdpc3RlcnNGcm9tU2NyYXRjaEJ1ZmZlckZv
ckNhbGwoc3R1YkppdCwgc2NyYXRjaEJ1ZmZlciwgc2NyYXRjaEdQUjEpOwotICAgICAgICBzdWNj
ZXNzSW5TbG93UGF0aCA9IHN0dWJKaXQuanVtcCgpOwotICAgIH0KLSAgICAKLSAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKCp2bSwgc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCksIEpJVENvbXBp
bGF0aW9uQ2FuRmFpbCk7Ci0gICAgaWYgKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nl
c3MsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBh
dGNoLmRlbHRhQ2FsbFRvRG9uZSkpOwotICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdpc3Rl
cnMoKSkKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlLCBmYWlsdXJlTGFiZWwpOwot
ICAgIGVsc2UKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMsIGZhaWx1cmVM
YWJlbCk7Ci0gICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1
Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhv
cGVyYXRpb25DYWxsLCBvcGVyYXRpb25SZWFsbG9jYXRlU3RvcmFnZUFuZEZpbmlzaFB1dCk7Ci0g
ICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzc0luU2xvd1BhdGgsIHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9u
ZSkpOwotI2lmIEVOQUJMRShHR0MpCi0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbEZsdXNo
V3JpdGVCYXJyaWVyQnVmZmVyLCBvcGVyYXRpb25GbHVzaFdyaXRlQmFycmllckJ1ZmZlcik7Ci0j
ZW5kaWYKLSAgICB9Ci0gICAgCi0gICAgc3R1YlJvdXRpbmUgPQotICAgICAgICBjcmVhdGVKSVRT
dHViUm91dGluZSgKLSAgICAgICAgICAgIEZJTkFMSVpFX0NPREVfRk9SKAotICAgICAgICAgICAg
ICAgIGV4ZWMtPmNvZGVCbG9jaygpLCBwYXRjaEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAoIlB1
dEJ5SWQgJXN0cmFuc2l0aW9uIHN0dWIgKCVwIC0+ICVwKSBmb3IgJXMsIHJldHVybiBwb2ludCAl
cCIsCi0gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAh
PSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgPyAicmVhbGxvY2F0aW5nICIgOiAi
IiwKLSAgICAgICAgICAgICAgICAgICAgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsCi0gICAgICAg
ICAgICAgICAgICAgIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwgc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAgICAgICAgICAg
ICAgICBzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLmV4ZWN1dGFibGVBZGRyZXNzKCkp
KSwKLSAgICAgICAgICAgICp2bSwKLSAgICAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLT5vd25l
ckV4ZWN1dGFibGUoKSwKLSAgICAgICAgICAgIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksCi0gICAgICAgICAgICBzdHJ1
Y3R1cmUpOwotICAgIAotICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gb3BlcmF0aW9u
UHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOworICAgIHJldHVybiBvcGVyYXRpb25QdXRC
eUlkTm9uU3RyaWN0T3B0aW1pemU7CiB9CiAKIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlD
YWNoZVB1dEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQdXRQcm9wZXJ0eVNs
b3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQpA
QCAtMTI0NSw3ICszNjgsOCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRC
eUlECiAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogICAgIAogICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
CisgICAgU2NyaXB0RXhlY3V0YWJsZSogb3duZXIgPSBjb2RlQmxvY2stPm93bmVyU2NyaXB0RXhl
Y3V0YWJsZSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAKICAgICBpZiAoIWJhc2VWYWx1
ZS5pc0NlbGwoKSkKICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CkBAIC0xMjU2LDIxMCAr
MzgwLDEwOSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAgICAg
aWYgKCFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKICAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAKLSAgICAvLyBPcHRpbWl6ZSBzZWxmIGFjY2Vzcy4KLSAg
ICBpZiAoc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlICYmIHNsb3QuaXNDYWNoZWFibGVQdXQoKSkg
ewotICAgICAgICBpZiAoc2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpOZXdQcm9wZXJ0
eSkgeworICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBuZXdDYXNlOwogCi0gICAgICAg
ICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZTsKLSAgICAgICAgICAgIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKLSAgICAgICAgICAgIGlmICghZW1pdFB1dFRyYW5z
aXRpb25TdHViKGV4ZWMsIHZtLCBzdHJ1Y3R1cmUsIGlkZW50LCBzbG90LCBzdHViSW5mbywgcHV0
S2luZCwgb2xkU3RydWN0dXJlLCBjb25kaXRpb25TZXQpKQotICAgICAgICAgICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOworICAgIGlmIChzbG90LmJhc2UoKSA9PSBCYXNlVmFsdWUgJiYgc2xv
dC5pc0NhY2hlYWJsZVB1dCgpKSB7CisgICAgICAgIGlmIChzbG90LnR5cGUoKSA9PSBQdXRQcm9w
ZXJ0eVNsb3Q6OkV4aXN0aW5nUHJvcGVydHkpIHsKKyAgICAgICAgICAgIHN0cnVjdHVyZS0+ZGlk
Q2FjaGVQcm9wZXJ0eVJlcGxhY2VtZW50KHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAg
ICAgCisgICAgICAgICAgICBwdHJkaWZmX3Qgb2Zmc2V0VG9QYXRjaGVkU3RvcmFnZSA9IG9mZnNl
dFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAg
ICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpVbnNldAorICAgICAgICAg
ICAgICAgICYmIE1hY3JvQXNzZW1ibGVyOjppc1B0ckFsaWduZWRBZGRyZXNzT2Zmc2V0KG9mZnNl
dFRvUGF0Y2hlZFN0b3JhZ2UpKSB7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
cmVwYXRjaEJ5SWRTZWxmQWNjZXNzKAorICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2Nr
LCBzdHViSW5mbywgc3RydWN0dXJlLCBpZGVudCwgc2xvdC5jYWNoZWRPZmZzZXQoKSwKKyAgICAg
ICAgICAgICAgICAgICAgYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3Qs
IHB1dEtpbmQpLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRS
ZXBsYWNlKHZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUpOworICAg
ICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CisgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcCgKLSAgICAgICAgICAgICAgICBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KAotICAgICAgICAgICAgICAg
ICAgICBzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1bXApLAotICAgICAgICAgICAgICAgIENv
ZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0g
ICAgICAgICAgICByZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbiwgYXBwcm9wcmlhdGVMaXN0QnVpbGRpbmdQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2lu
ZCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzdHViSW5mby5pbml0UHV0QnlJZFRyYW5z
aXRpb24oKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBvbGRTdHJ1Y3R1cmUsIHN0
cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBwdXRLaW5kID09IERpcmVjdCk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0gICAgICAgIH0KKyAgICAgICAg
ICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpyZXBsYWNlKHZtLCBvd25lciwgc3RydWN0dXJlLCBz
bG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VS
VChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5KTsKIAotICAgICAg
ICBpZiAoIU1hY3JvQXNzZW1ibGVyOjppc1B0ckFsaWduZWRBZGRyZXNzT2Zmc2V0KG9mZnNldFJl
bGF0aXZlVG9QYXRjaGVkU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSkpCi0gICAgICAgICAg
ICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgIGlmICghc3RydWN0dXJlLT5pc09i
amVjdCgpIHx8IHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIEdpdmVVcE9uQ2FjaGU7CiAKLSAgICAgICAgc3RydWN0dXJlLT5kaWRDYWNoZVByb3BlcnR5
UmVwbGFjZW1lbnQoKnZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKLSAgICAgICAgcmVwYXRjaEJ5
SWRTZWxmQWNjZXNzKCp2bSwgY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBpZGVudCwg
c2xvdC5jYWNoZWRPZmZzZXQoKSwgYXBwcm9wcmlhdGVMaXN0QnVpbGRpbmdQdXRCeUlkRnVuY3Rp
b24oc2xvdCwgcHV0S2luZCksIGZhbHNlKTsKLSAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRS
ZXBsYWNlKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKLSAg
ICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLSAgICB9CisgICAgICAgICAgICBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQ7CisgICAgICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9Cisg
ICAgICAgICAgICAgICAgU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5n
U3RydWN0dXJlQ29uY3VycmVudGx5KAorICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGlk
ZW50LmltcGwoKSwgMCwgcHJvcGVydHlPZmZzZXQpOworICAgICAgICAgICAgaWYgKCFuZXdTdHJ1
Y3R1cmUgfHwgIW5ld1N0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogCi0gICAgaWYgKChzbG90Lmlz
Q2FjaGVhYmxlQ3VzdG9tKCkgfHwgc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpKQotICAgICAgICAm
JiBzdHViSW5mby5wYXRjaC5zcGlsbE1vZGUgPT0gRG9udFNwaWxsKSB7Ci0gICAgICAgIFJlZlB0
cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7CisgICAgICAgICAgICBBU1NFUlQobmV3U3Ry
dWN0dXJlLT5wcmV2aW91c0lEKCkgPT0gc3RydWN0dXJlKTsKKyAgICAgICAgICAgIEFTU0VSVCgh
bmV3U3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSk7CisgICAgICAgICAgICBBU1NFUlQobmV3U3Ry
dWN0dXJlLT5pc09iamVjdCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAgICAgICAgICAgaWYgKHB1dEtpbmQg
PT0gTm90RGlyZWN0KSB7CisgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0KKyAgICAgICAg
ICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzKAorICAg
ICAgICAgICAgICAgICAgICAgICAgdm0sIG93bmVyLCBleGVjLCBuZXdTdHJ1Y3R1cmUsIGlkZW50
LmltcGwoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgIH0K
IAorICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OnRyYW5zaXRpb24odm0sIG93bmVy
LCBzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgb2Zmc2V0LCBjb25kaXRpb25TZXQpOworICAgICAg
ICB9CisgICAgfSBlbHNlIGlmIChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgfHwgc2xvdC5pc0Nh
Y2hlYWJsZVNldHRlcigpKSB7CiAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNv
bmRpdGlvblNldDsKICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OwotICAgICAgICBpZiAo
c2xvdC5iYXNlKCkgIT0gYmFzZVZhbHVlKSB7Ci0gICAgICAgICAgICBpZiAoc2xvdC5pc0NhY2hl
YWJsZUN1c3RvbSgpKSB7CisKKyAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkg
eworICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0Owor
CisgICAgICAgICAgICBpZiAoc2xvdC5iYXNlKCkgIT0gYmFzZVZhbHVlKSB7CiAgICAgICAgICAg
ICAgICAgY29uZGl0aW9uU2V0ID0KICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRp
b25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXRDdXN0b20oCi0gICAgICAgICAgICAgICAgICAgICAg
ICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgc2xv
dC5iYXNlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBpZGVudC5pbXBsKCkpOwotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPQotICAgICAgICAg
ICAgICAgICAgICBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKLSAg
ICAgICAgICAgICAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwg
ZXhlYywgc3RydWN0dXJlLCBzbG90LmJhc2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGlk
ZW50LmltcGwoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB2bSwgb3duZXIsIGV4ZWMsIHN0
cnVjdHVyZSwgc2xvdC5iYXNlKCksIGlkZW50LmltcGwoKSk7CisgICAgICAgICAgICAgICAgaWYg
KCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2
ZVVwT25DYWNoZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0
LmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAg
ICAgICAgIG9mZnNldCA9IHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSA/IGludmFsaWRPZmZzZXQg
OiBjb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vZmZzZXQoKTsKLSAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOwotCi0gICAgICAg
IFBvbHltb3JwaGljUHV0QnlJZExpc3QqIGxpc3Q7Ci0gICAgICAgIGxpc3QgPSBQb2x5bW9ycGhp
Y1B1dEJ5SWRMaXN0Ojpmcm9tKHB1dEtpbmQsIHN0dWJJbmZvKTsKLQotICAgICAgICBib29sIHJl
c3VsdCA9IGdlbmVyYXRlQnlJZFN0dWIoCi0gICAgICAgICAgICBleGVjLCBraW5kRm9yKHNsb3Qp
LCBpZGVudCwgY3VzdG9tRm9yKHNsb3QpLCBzdHViSW5mbywgY29uZGl0aW9uU2V0LCBzbG90LmJh
c2UoKSwKLSAgICAgICAgICAgIG9mZnNldCwgc3RydWN0dXJlLCBmYWxzZSwgbnVsbHB0ciwKLSAg
ICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJ
bmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSksCi0gICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dD
YXNlKSwKLSAgICAgICAgICAgIHN0dWJSb3V0aW5lKTsKLSAgICAgICAgaWYgKCFyZXN1bHQpCi0g
ICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgCi0gICAgICAgIGxpc3Qt
PmFkZEFjY2VzcyhQdXRCeUlkQWNjZXNzOjpzZXR0ZXIoCi0gICAgICAgICAgICAqdm0sIGNvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCksCi0gICAgICAgICAgICBzbG90LmlzQ2FjaGVhYmxlU2V0
dGVyKCkgPyBQdXRCeUlkQWNjZXNzOjpTZXR0ZXIgOiBQdXRCeUlkQWNjZXNzOjpDdXN0b21TZXR0
ZXIsCi0gICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgc2xvdC5jdXN0b21TZXR0
ZXIoKSwgc3R1YlJvdXRpbmUpKTsKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1
bXAoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRj
aC5kZWx0YUNhbGxUb0p1bXApLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgp
LmNvZGUoKSkpOwotICAgICAgICByZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVMaXN0QnVpbGRpbmdQdXRCeUlkRnVuY3Rpb24oc2xv
dCwgcHV0S2luZCkpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVCghbGlzdC0+aXNGdWxsKCkpOwot
ICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwotICAgIH0KLQotICAgIHJldHVybiBHaXZl
VXBPbkNhY2hlOwotfQogCi12b2lkIHJlcGF0Y2hQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCi17Ci0gICAgR0NTYWZlQ29uY3VycmVudEpJ
VExvY2tlciBsb2NrZXIoZXhlYy0+Y29kZUJsb2NrKCktPm1fbG9jaywgZXhlYy0+dm0oKS5oZWFw
KTsKLSAgICAKLSAgICBpZiAodHJ5Q2FjaGVQdXRCeUlEKGV4ZWMsIGJhc2VWYWx1ZSwgc3RydWN0
dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kKSA9PSBHaXZlVXBPbkNh
Y2hlKQotICAgICAgICByZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwg
cHV0S2luZCkpOwotfQotCi1zdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVpbGRQdXRCeUlk
TGlzdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNs
b3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQot
ewotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7Ci0KLSAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKLSAgICAg
ICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGVQdXQo
KSAmJiAhc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpICYmICFzbG90LmlzQ2FjaGVhYmxlU2V0dGVy
KCkpCi0gICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgaWYgKCFzdHJ1Y3R1cmUt
PnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKLSAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7Ci0KLSAgICAvLyBPcHRpbWl6ZSBzZWxmIGFjY2Vzcy4KLSAgICBpZiAoc2xvdC5iYXNl
KCkgPT0gYmFzZVZhbHVlICYmIHNsb3QuaXNDYWNoZWFibGVQdXQoKSkgewotICAgICAgICBQb2x5
bW9ycGhpY1B1dEJ5SWRMaXN0KiBsaXN0OwotICAgICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+
IHN0dWJSb3V0aW5lOwotICAgICAgICAKLSAgICAgICAgaWYgKHNsb3QudHlwZSgpID09IFB1dFBy
b3BlcnR5U2xvdDo6TmV3UHJvcGVydHkpIHsKLSAgICAgICAgICAgIGxpc3QgPSBQb2x5bW9ycGhp
Y1B1dEJ5SWRMaXN0Ojpmcm9tKHB1dEtpbmQsIHN0dWJJbmZvKTsKLSAgICAgICAgICAgIGlmIChs
aXN0LT5pc0Z1bGwoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsgLy8g
V2lsbCBnZXQgaGVyZSBkdWUgdG8gcmVjdXJzaW9uLgotCi0gICAgICAgICAgICBTdHJ1Y3R1cmUq
IG9sZFN0cnVjdHVyZTsKKyAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpzZXR0ZXIo
CisgICAgICAgICAgICAgICAgdm0sIG93bmVyLCBBY2Nlc3NUeXBlOjpDdXN0b21TZXR0ZXIsIHN0
cnVjdHVyZSwgaW52YWxpZE9mZnNldCwgY29uZGl0aW9uU2V0LAorICAgICAgICAgICAgICAgIHNs
b3QuY3VzdG9tU2V0dGVyKCkpOworICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OwotICAgICAgICAgICAgaWYgKCFlbWl0
UHV0VHJhbnNpdGlvblN0dWIoZXhlYywgdm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90
LCBzdHViSW5mbywgcHV0S2luZCwgb2xkU3RydWN0dXJlLCBjb25kaXRpb25TZXQpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0OwogCi0gICAgICAgICAgICBzdHViUm91dGluZSA9IHN0dWJJbmZvLnN0dWJSb3V0
aW5lOwotICAgICAgICAgICAgbGlzdC0+YWRkQWNjZXNzKAotICAgICAgICAgICAgICAgIFB1dEJ5
SWRBY2Nlc3M6OnRyYW5zaXRpb24oCi0gICAgICAgICAgICAgICAgICAgICp2bSwgY29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKSwKLSAgICAgICAgICAgICAgICAgICAgb2xkU3RydWN0dXJlLCBz
dHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwKLSAgICAgICAgICAgICAgICAgICAgc3R1YlJvdXRpbmUp
KTsKKyAgICAgICAgICAgIGlmIChzbG90LmJhc2UoKSAhPSBiYXNlVmFsdWUpIHsKKyAgICAgICAg
ICAgICAgICBjb25kaXRpb25TZXQgPQorICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUNvbmRp
dGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHZt
LCBvd25lciwgZXhlYywgc3RydWN0dXJlLCBzbG90LmJhc2UoKSwgaWRlbnQuaW1wbCgpKTsKKyAg
ICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgICAgIG9mZnNldCA9IGNv
bmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpOworICAgICAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICAgICAgb2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKIAotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgbGlzdCA9IFBvbHltb3JwaGljUHV0QnlJZExpc3Q6
OmZyb20ocHV0S2luZCwgc3R1YkluZm8pOwotICAgICAgICAgICAgaWYgKGxpc3QtPmlzRnVsbCgp
KQotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOyAvLyBXaWxsIGdldCBoZXJl
IGR1ZSB0byByZWN1cnNpb24uCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN0cnVjdHVyZS0+
ZGlkQ2FjaGVQcm9wZXJ0eVJlcGxhY2VtZW50KCp2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFdlJ3JlIG5vdyBjb21taXR0ZWQgdG8gY3JlYXRp
bmcgdGhlIHN0dWIuIE1vZ3JpZnkgdGhlIG1ldGEtZGF0YSBhY2NvcmRpbmdseS4KLSAgICAgICAg
ICAgIGJvb2wgcmVzdWx0ID0gZW1pdFB1dFJlcGxhY2VTdHViKAotICAgICAgICAgICAgICAgIGV4
ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIAotICAgICAgICAgICAgICAgIHN0cnVj
dHVyZSwgQ29kZUxvY2F0aW9uTGFiZWwobGlzdC0+Y3VycmVudFNsb3dQYXRoVGFyZ2V0KCkpLCBz
dHViUm91dGluZSk7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbGlzdC0+YWRk
QWNjZXNzKAotICAgICAgICAgICAgICAgIFB1dEJ5SWRBY2Nlc3M6OnJlcGxhY2UoCi0gICAgICAg
ICAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKLSAgICAgICAg
ICAgICAgICAgICAgc3RydWN0dXJlLCBzdHViUm91dGluZSkpOworICAgICAgICAgICAgbmV3Q2Fz
ZSA9IEFjY2Vzc0Nhc2U6OnNldHRlcigKKyAgICAgICAgICAgICAgICB2bSwgb3duZXIsIEFjY2Vz
c1R5cGU6OlNldHRlciwgc3RydWN0dXJlLCBvZmZzZXQsIGNvbmRpdGlvblNldCwgbnVsbHB0cik7
CiAgICAgICAgIH0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxs
VG9KdW1wKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsK
LSAgICAgICAgaWYgKGxpc3QtPmlzRnVsbCgpKQotICAgICAgICAgICAgcmVwYXRjaENhbGwoY29k
ZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlR2VuZXJpY1B1
dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7Ci0KLSAgICAgICAgcmV0dXJuIFJldHJ5Q2Fj
aGVMYXRlcjsKICAgICB9CiAKLSAgICBpZiAoKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSB8fCBz
bG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkpCi0gICAgICAgICYmIHN0dWJJbmZvLnBhdGNoLnNwaWxs
TW9kZSA9PSBEb250U3BpbGwpIHsKLSAgICAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHVi
Um91dGluZTsKLSAgICAgICAgCi0gICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNv
bmRpdGlvblNldDsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OwotICAgICAgICBpZiAo
c2xvdC5iYXNlKCkgIT0gYmFzZVZhbHVlKSB7Ci0gICAgICAgICAgICBpZiAoc2xvdC5pc0NhY2hl
YWJsZUN1c3RvbSgpKSB7Ci0gICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0KLSAgICAgICAg
ICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXRDdXN0
b20oCi0gICAgICAgICAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5iYXNlKCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICBwcm9wZXJ0eU5hbWUuaW1wbCgpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgY29uZGl0aW9uU2V0ID0KLSAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVDb25k
aXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCi0gICAgICAgICAgICAgICAgICAgICAgICAq
dm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5i
YXNlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUuaW1wbCgpKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgIG9mZnNldCA9
IHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSA/IGludmFsaWRPZmZzZXQgOiBjb25kaXRpb25TZXQu
c2xvdEJhc2VDb25kaXRpb24oKS5vZmZzZXQoKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOwotCi0gICAgICAgIFBvbHltb3JwaGljUHV0
QnlJZExpc3QqIGxpc3Q7Ci0gICAgICAgIGxpc3QgPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojpm
cm9tKHB1dEtpbmQsIHN0dWJJbmZvKTsKLQotICAgICAgICBib29sIHJlc3VsdCA9IGdlbmVyYXRl
QnlJZFN0dWIoCi0gICAgICAgICAgICBleGVjLCBraW5kRm9yKHNsb3QpLCBwcm9wZXJ0eU5hbWUs
IGN1c3RvbUZvcihzbG90KSwgc3R1YkluZm8sIGNvbmRpdGlvblNldCwgc2xvdC5iYXNlKCksCi0g
ICAgICAgICAgICBvZmZzZXQsIHN0cnVjdHVyZSwgZmFsc2UsIG51bGxwdHIsCi0gICAgICAgICAg
ICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRj
aC5kZWx0YUNhbGxUb0RvbmUpLAotICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlzdC0+
Y3VycmVudFNsb3dQYXRoVGFyZ2V0KCkpLAotICAgICAgICAgICAgc3R1YlJvdXRpbmUpOwotICAg
ICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAg
ICAgICAKLSAgICAgICAgbGlzdC0+YWRkQWNjZXNzKFB1dEJ5SWRBY2Nlc3M6OnNldHRlcigKLSAg
ICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKLSAgICAgICAgICAg
IHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSA/IFB1dEJ5SWRBY2Nlc3M6OlNldHRlciA6IFB1dEJ5
SWRBY2Nlc3M6OkN1c3RvbVNldHRlciwKLSAgICAgICAgICAgIHN0cnVjdHVyZSwgY29uZGl0aW9u
U2V0LCBzbG90LmN1c3RvbVNldHRlcigpLCBzdHViUm91dGluZSkpOwotCi0gICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoSnVtcChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0
T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksIENvZGVMb2NhdGlvbkxhYmVs
KHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgICAgIGlmIChsaXN0LT5pc0Z1bGwo
KSkKLSAgICAgICAgICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2lu
ZCkpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyID0gc3R1YkluZm8uYWRkQWNj
ZXNzQ2FzZSgKKyAgICAgICAgdm0sIGNvZGVCbG9jaywgcHJvcGVydHlOYW1lLCBzdGQ6Om1vdmUo
bmV3Q2FzZSkpOworICAgIAorICAgIGlmICghY29kZVB0cikKKyAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7CiAKLSAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLSAgICB9Ci0gICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgcmVzZXRQdXRCeUlEQ2hlY2tBbmRMb2FkKHN0dWJJ
bmZvKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoCisgICAgICAgIHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoCisgICAgICAgICAgICBzdHViSW5mby5w
YXRjaC5kZWx0YUNhbGxUb0p1bXApLAorICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5m
by5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOworICAgIAorICAgIHJldHVybiBSZXRyeUNh
Y2hlTGF0ZXI7CiB9CiAKLXZvaWQgYnVpbGRQdXRCeUlkTGlzdChFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQordm9pZCByZXBhdGNoUHV0QnlJRChFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3Qs
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQogewogICAgIEdD
U2FmZUNvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGV4ZWMtPmNvZGVCbG9jaygpLT5tX2xvY2ss
IGV4ZWMtPnZtKCkuaGVhcCk7CiAgICAgCi0gICAgaWYgKHRyeUJ1aWxkUHV0QnlJZExpc3QoZXhl
YywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1
dEtpbmQpID09IEdpdmVVcE9uQ2FjaGUpCisgICAgaWYgKHRyeUNhY2hlUHV0QnlJRChleGVjLCBi
YXNlVmFsdWUsIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0S2lu
ZCkgPT0gR2l2ZVVwT25DYWNoZSkKICAgICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2Nr
KCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJ
ZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKIH0KIApAQCAtMTQ3OSw3ICs1MDIsOCBAQCBzdGF0
aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5UmVwYXRjaEluKAogICAgIH0KICAgICAKICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOworICAgIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyID0gY29kZUJsb2NrLT5vd25lclNj
cmlwdEV4ZWN1dGFibGUoKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gYmFzZS0+c3RydWN0dXJlKCp2bSk7CiAgICAgCiAgICAgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OwpAQCAtMTQ5NCw5MSArNTE4LDE5IEBAIHN0
YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlSZXBhdGNoSW4oCiAgICAgfQogICAgIGlmICghY29u
ZGl0aW9uU2V0LmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAg
Ci0gICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwb2x5bW9ycGhpY1N0cnVjdHVy
ZUxpc3Q7Ci0gICAgaW50IGxpc3RJbmRleDsKLSAgICAKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBz
dWNjZXNzTGFiZWwgPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChz
dHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpOwotICAgIENvZGVMb2NhdGlvbkxhYmVsIHNs
b3dDYXNlTGFiZWw7Ci0gICAgCi0gICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNz
X3Vuc2V0KSB7Ci0gICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9y
cGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoKTsKLSAgICAgICAgc3R1YkluZm8uaW5pdEluTGlzdChw
b2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIDApOwotICAgICAgICBzbG93Q2FzZUxhYmVsID0gc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAgICBzdHVi
SW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKLSAgICAgICAgbGlzdEluZGV4ID0gMDsK
LSAgICB9IGVsc2UgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5hY2Nlc3NUeXBl
ID09IGFjY2Vzc19pbl9saXN0KTsKLSAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0g
c3R1YkluZm8udS5pbkxpc3Quc3RydWN0dXJlTGlzdDsKLSAgICAgICAgbGlzdEluZGV4ID0gc3R1
YkluZm8udS5pbkxpc3QubGlzdFNpemU7Ci0gICAgICAgIHNsb3dDYXNlTGFiZWwgPSBDb2RlTG9j
YXRpb25MYWJlbChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4IC0gMV0u
c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKGxpc3RJ
bmRleCA9PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpCi0gICAgICAgICAgICByZXR1cm4g
R2l2ZVVwT25DYWNoZTsKLSAgICB9Ci0gICAgCi0gICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBz
dHViUm91dGluZTsKLSAgICAKLSAgICB7Ci0gICAgICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGlj
X2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKTsKLSAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVHUFIpOwot
ICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IFRlbXBSZWdpc3RlclNldChzdHViSW5mby5wYXRj
aC51c2VkUmVnaXN0ZXJzKS5nZXRGcmVlR1BSKCk7Ci0gICAgICAgIAotICAgICAgICBDQ2FsbEhl
bHBlcnMgc3R1YkppdCh2bSk7Ci0gICAgICAgIAotICAgICAgICBib29sIG5lZWRUb1Jlc3RvcmVT
Y3JhdGNoOwotICAgICAgICBpZiAoc2NyYXRjaEdQUiA9PSBJbnZhbGlkR1BSUmVnKSB7Ci0gICAg
ICAgICAgICBzY3JhdGNoR1BSID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGJh
c2VHUFIsIHJlc3VsdEdQUik7Ci0gICAgICAgICAgICBzdHViSml0LnB1c2hUb1NhdmUoc2NyYXRj
aEdQUik7Ci0gICAgICAgICAgICBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IHRydWU7Ci0gICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSBmYWxzZTsKLSAgICAg
ICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7Ci0gICAg
ICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2hTdHJ1Y3R1cmUoCi0gICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAotICAgICAg
ICAgICAgc3RydWN0dXJlKSk7Ci0KLSAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVj
LT5jb2RlQmxvY2soKTsKLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5uZXdJbXB1
cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKSkKLSAgICAgICAgICAgIHZtLT5yZWdpc3Rlcldh
dGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShpZGVudCwgc3R1YkluZm8uYWRkV2F0Y2hwb2ludChj
b2RlQmxvY2spKTsKIAotICAgICAgICBpZiAoc2xvdC53YXRjaHBvaW50U2V0KCkpCi0gICAgICAg
ICAgICBzbG90LndhdGNocG9pbnRTZXQoKS0+YWRkKHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29k
ZUJsb2NrKSk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IG5ld0Nhc2UgPSBBY2Nl
c3NDYXNlOjppbigKKyAgICAgICAgdm0sIG93bmVyLCB3YXNGb3VuZCA/IEFjY2Vzc0Nhc2U6Oklu
SGl0IDogQWNjZXNzQ2FzZTpJbk1pc3MsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0KTsKIAotICAg
ICAgICBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9ucygKLSAgICAgICAgICAgIGNvbmRpdGlv
blNldCwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLCBzdHViSml0LCBmYWlsdXJlQ2FzZXMs
IHNjcmF0Y2hHUFIpOwotICAgICAgICAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBzdHVi
Sml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNC
b29sZWFuKHdhc0ZvdW5kKSkpLCByZXN1bHRHUFIpOwotI2Vsc2UKLSAgICAgICAgc3R1YkppdC5t
b3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIod2FzRm91bmQpLCByZXN1bHRHUFIpOwot
I2VuZGlmCi0gICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzLCBm
YWlsOwotICAgICAgICAKLSAgICAgICAgZW1pdFJlc3RvcmVTY3JhdGNoKHN0dWJKaXQsIG5lZWRU
b1Jlc3RvcmVTY3JhdGNoLCBzY3JhdGNoR1BSLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMp
OwotICAgICAgICAKLSAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIHN0dWJKaXQs
IGV4ZWMtPmNvZGVCbG9jaygpLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwotICAgICAgICBpZiAo
cGF0Y2hCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkKLSAgICAgICAgICAgIHJldHVybiBHaXZl
VXBPbkNhY2hlOwotICAgICAgICAKLSAgICAgICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNoQnVm
ZmVyLCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzLCBz
dWNjZXNzTGFiZWwsIHNsb3dDYXNlTGFiZWwpOwotICAgICAgICAKLSAgICAgICAgc3R1YlJvdXRp
bmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAotICAgICAgICAgICAgZXhlYy0+Y29kZUJsb2Nr
KCksIHBhdGNoQnVmZmVyLAotICAgICAgICAgICAgKCJJbiAoZm91bmQgPSAlcykgc3R1YiBmb3Ig
JXMsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICAgICAgICAgd2FzRm91bmQgPyAieWVzIiA6
ICJubyIsIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwKLSAgICAgICAgICAg
ICAgICBzdWNjZXNzTGFiZWwuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgIH0KLSAgICAKLSAg
ICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4XS5zZXQoKnZtLCBjb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJlLCB0cnVlKTsK
LSAgICBzdHViSW5mby51LmluTGlzdC5saXN0U2l6ZSsrOwotICAgIAotICAgIE1hY3JvQXNzZW1i
bGVyOjpyZXBhdGNoSnVtcChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0
KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJS
b3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQ
dHIgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKG5ld0Nhc2UpOworICAgIGlmICghY29kZVB0cikK
KyAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVw
YXRjaEp1bXAoCisgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZz
ZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwKKyAgICAgICAgQ29kZUxvY2F0aW9u
TGFiZWwoY29kZVB0cikpOwogICAgIAotICAgIHJldHVybiBsaXN0SW5kZXggPCAoUE9MWU1PUlBI
SUNfTElTVF9DQUNIRV9TSVpFIC0gMSkgPyBSZXRyeUNhY2hlTGF0ZXIgOiBHaXZlVXBPbkNhY2hl
OworICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CiB9CiAKIHZvaWQgcmVwYXRjaEluKApAQCAt
MTkyNiw5ICs4NzgsOCBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoCiAgICAgICAgIGNhbGxM
aW5rSW5mby5yZW1vdmUoKTsKIH0KIAotdm9pZCByZXNldEdldEJ5SUQoQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3N0YXRpYyB2b2lkIHJlc2V0R2V0
QnlJRENoZWNrQW5kTG9hZChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7Ci0gICAgcmVw
YXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlv
bkdldEJ5SWRPcHRpbWl6ZSk7CiAgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzIgc3RydWN0dXJl
TGFiZWwgPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldCgt
KGludHB0cl90KXN0dWJJbmZvLnBhdGNoLmRlbHRhQ2hlY2tJbW1Ub0NhbGwpOwogICAgIGlmIChN
YWNyb0Fzc2VtYmxlcjo6Y2FuSnVtcFJlcGxhY2VQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaCgp
KSB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNo
YWJsZUJyYW5jaDMyV2l0aFBhdGNoKApAQCAtMTk0NSwyNCArODk2LDE3IEBAIHZvaWQgcmVzZXRH
ZXRCeUlEKENvZGVCbG9jayogY29kZUJsb2NrLCAKICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRj
aENvbXBhY3Qoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9m
ZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlKSwgMCk7CiAgICAg
TWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDb21wYWN0KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9QYXls
b2FkTG9hZE9yU3RvcmUpLCAwKTsKICNlbmRpZgorfQorCit2b2lkIHJlc2V0R2V0QnlJRChDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIHJl
cGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRp
b25HZXRCeUlkT3B0aW1pemUpOworICAgIHJlc2V0R2V0QnlJRENoZWNrQW5kTG9hZChzdHViSW5m
byk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwgc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVs
dGFDYWxsVG9TbG93Q2FzZSkpOwogfQogCi12b2lkIHJlc2V0UHV0QnlJRChDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQorc3RhdGljIHZvaWQgcmVzZXRQ
dXRCeUlEQ2hlY2tBbmRMb2FkKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKIHsKLSAgICBW
X0pJVE9wZXJhdGlvbl9FU3NpSkpJIHVub3B0aW1pemVkRnVuY3Rpb24gPSBiaXR3aXNlX2Nhc3Q8
Vl9KSVRPcGVyYXRpb25fRVNzaUpKST4ocmVhZENhbGxUYXJnZXQoY29kZUJsb2NrLCBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24pLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgIFZfSklUT3Bl
cmF0aW9uX0VTc2lKSkkgb3B0aW1pemVkRnVuY3Rpb247Ci0gICAgaWYgKHVub3B0aW1pemVkRnVu
Y3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09
IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RCdWlsZExpc3QpCi0gICAgICAgIG9wdGltaXplZEZ1bmN0
aW9uID0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOwotICAgIGVsc2UgaWYgKHVub3B0
aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdCB8fCB1bm9wdGltaXpl
ZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3QpCi0gICAgICAg
IG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOwot
ICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVj
dFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RT
dHJpY3RCdWlsZExpc3QpCi0gICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0
QnlJZERpcmVjdFN0cmljdE9wdGltaXplOwotICAgIGVsc2UgewotICAgICAgICBBU1NFUlQodW5v
cHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0IHx8IHVu
b3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1aWxk
TGlzdCk7Ci0gICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVj
dE5vblN0cmljdE9wdGltaXplOwotICAgIH0KLSAgICByZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3B0aW1pemVkRnVuY3Rpb24pOwogICAgIENvZGVM
b2NhdGlvbkRhdGFMYWJlbDMyIHN0cnVjdHVyZUxhYmVsID0gc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoLShpbnRwdHJfdClzdHViSW5mby5wYXRjaC5kZWx0
YUNoZWNrSW1tVG9DYWxsKTsKICAgICBpZiAoTWFjcm9Bc3NlbWJsZXI6OmNhbkp1bXBSZXBsYWNl
UGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goKSkgewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaCgKQEAgLTE5
NzksNiArOTIzLDI0IEBAIHZvaWQgcmVzZXRQdXRCeUlEKENvZGVCbG9jayogY29kZUJsb2NrLCAK
ICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEludDMyKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvVGFnTG9h
ZE9yU3RvcmUpLCAwKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEludDMyKHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRl
bHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKSwgMCk7CiAjZW5kaWYKK30KKwordm9pZCByZXNl
dFB1dEJ5SUQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bykKK3sKKyAgICBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJIHVub3B0aW1pemVkRnVuY3Rpb24gPSBi
aXR3aXNlX2Nhc3Q8Vl9KSVRPcGVyYXRpb25fRVNzaUpKST4ocmVhZENhbGxUYXJnZXQoY29kZUJs
b2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24pLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwor
ICAgIFZfSklUT3BlcmF0aW9uX0VTc2lKSkkgb3B0aW1pemVkRnVuY3Rpb247CisgICAgaWYgKHVu
b3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdCkKKyAgICAgICAgb3B0
aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CisgICAgZWxz
ZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0KQor
ICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRp
bWl6ZTsKKyAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5
SWREaXJlY3RTdHJpY3QpCisgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0
QnlJZERpcmVjdFN0cmljdE9wdGltaXplOworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQodW5v
cHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0KTsKKyAg
ICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0
T3B0aW1pemU7CisgICAgfQorICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLCBvcHRpbWl6ZWRGdW5jdGlvbik7CisgICAgcmVzZXRQdXRCeUlEQ2hl
Y2tBbmRMb2FkKHN0dWJJbmZvKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0
YUNhbGxUb0p1bXApLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChz
dHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5j
cHAJKHJldmlzaW9uIDE4OTQ5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2NyYXRj
aFJlZ2lzdGVyQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsOCBAQCBT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6On5TY3JhdGNoUmVnaXN0CiAKIHZvaWQgU2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yOjpsb2NrKEdQUlJlZyByZWcpCiB7CisgICAgaWYgKHJlZyA9PSBJbnZh
bGlkR1BSUmVnKQorICAgICAgICByZXR1cm47CiAgICAgdW5zaWduZWQgaW5kZXggPSBHUFJJbmZv
Ojp0b0luZGV4KHJlZyk7CiAgICAgaWYgKGluZGV4ID09IEdQUkluZm86OkludmFsaWRJbmRleCkK
ICAgICAgICAgcmV0dXJuOwpAQCAtNTIsMTIgKzU0LDIwIEBAIHZvaWQgU2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yOjpsb2NrKEdQUlIKIAogdm9pZCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6Omxv
Y2soRlBSUmVnIHJlZykKIHsKKyAgICBpZiAocmVnID09IEludmFsaWRGUFJSZWcpCisgICAgICAg
IHJldHVybjsKICAgICB1bnNpZ25lZCBpbmRleCA9IEZQUkluZm86OnRvSW5kZXgocmVnKTsKICAg
ICBpZiAoaW5kZXggPT0gRlBSSW5mbzo6SW52YWxpZEluZGV4KQogICAgICAgICByZXR1cm47CiAg
ICAgbV9sb2NrZWRSZWdpc3RlcnMuc2V0RlBSQnlJbmRleChpbmRleCk7CiB9CiAKK3ZvaWQgU2Ny
YXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpsb2NrKEpTVmFsdWVSZWdzIHJlZ3MpCit7CisgICAgbG9j
ayhyZWdzLnRhZ0dQUigpKTsKKyAgICBsb2NrKHJlZ3MucGF5bG9hZEdQUigpKTsKK30KKwogdGVt
cGxhdGU8dHlwZW5hbWUgQmFua0luZm8+CiB0eXBlbmFtZSBCYW5rSW5mbzo6UmVnaXN0ZXJUeXBl
IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6YWxsb2NhdGVTY3JhdGNoKCkKIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3IuaAkocmV2aXNpb24gMTg5NDkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TY3Jh
dGNoUmVnaXN0ZXJBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTEgKzQwLDEzIEBA
IHN0cnVjdCBTY3JhdGNoQnVmZmVyOwogCiBjbGFzcyBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3Ig
ewogcHVibGljOgorICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcigpIHsgfQogICAgIFNjcmF0
Y2hSZWdpc3RlckFsbG9jYXRvcihjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycyk7CiAg
ICAgflNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcigpOwogCi0gICAgdm9pZCBsb2NrKEdQUlJlZyBy
ZWcpOwotICAgIHZvaWQgbG9jayhGUFJSZWcgcmVnKTsKKyAgICB2b2lkIGxvY2soR1BSUmVnKTsK
KyAgICB2b2lkIGxvY2soRlBSUmVnKTsKKyAgICB2b2lkIGxvY2soSlNWYWx1ZVJlZ3MpOwogICAg
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJhbmtJbmZvPgogICAgIHR5cGVuYW1lIEJhbmtJbmZv
OjpSZWdpc3RlclR5cGUgYWxsb2NhdGVTY3JhdGNoKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260773</attachid>
            <date>2015-09-08 11:32:52 -0700</date>
            <delta_ts>2015-09-08 13:02:22 -0700</delta_ts>
            <desc>inching towards victory</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>235372</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODk0OTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzI0LDggKzMyNCw2IEBACiAJCTBGNDg1MzJBMTg3REZE
RUMwMDgzQjY4NyAvKiBGVExSZWNvdmVyeU9wY29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0ODUzMjYxODdERkRFQzAwODNCNjg3IC8qIEZUTFJl
Y292ZXJ5T3Bjb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEY0OTNBRkExNkQwQ0FEMzAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDkzQUY4MTZE
MENBRDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi87IH07CiAJCTBGNEI5NERDMTdC
OUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0Qjk0REIxN0I5RjA3NTAwREQwM0E0IC8qIFR5
cGVkQXJyYXlJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKLQkJMEY0Q0VENUUxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJ
ZExpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY0Q0VENUMxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwICov
OyB9OwotCQkwRjRDRUQ1RjE4Q0VBN0FCMDA4MDJGRTAgLyogUG9seW1vcnBoaWNHZXRCeUlkTGlz
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0Q0VE
NUQxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJZExpc3QuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjRGMjlERjE4QjZBRDFD
MDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RjI5REQxOEI2
QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNw
cCAqLzsgfTsKIAkJMEY0RjI5RTAxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlv
bkNvdW50RXN0aW1hdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjRGMjlERTE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0
aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjUwQUYzQzE5M0U4QjM5MDA2NzRFRTggLyogREZHU3RydWN0
dXJlQ2xvYmJlclN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjUwQUYzQjE5M0U4QjM5MDA2NzRFRTggLyogREZHU3RydWN0dXJlQ2xvYmJlclN0
YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAg
LTM5OCw4ICszOTYsNiBAQAogCQkwRjcxNENBNDE2RUE5MkYwMDBGM0VCRUIgLyogREZHQmFja3dh
cmRzUHJvcGFnYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjcxNENBMTE2RUE5MkVEMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJv
cGFnYXRpb25QaGFzZS5jcHAgKi87IH07CiAJCTBGNzE0Q0E1MTZFQTkyRjIwMEYzRUJFQiAvKiBE
RkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcxNENBMjE2RUE5MkVEMDBGM0VCRUIgLyogREZHQmFja3dh
cmRzUHJvcGFnYXRpb25QaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGNzQzQkFBMTZCODgyNDkwMDlGOTI3NyAvKiBBUk02NERpc2Fzc2Vt
Ymxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2
NTJBM0EyMDE2NTFDNjYxMDBBODBBRkUgLyogQVJNNjREaXNhc3NlbWJsZXIuY3BwICovOyB9Owot
CQkwRjc1NzZEMjE4RTFGRUU5MDAyRUY0Q0QgLyogQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NTc2
RDAxOEUxRkVFOTAwMkVGNENEIC8qIEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmNwcCAqLzsg
fTsKLQkJMEY3NTc2RDMxOEUxRkVFOTAwMkVGNENEIC8qIEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0
aW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc1
NzZEMTE4RTFGRUU5MDAyRUY0Q0QgLyogQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjc2NkQyODE1
QThDQzFFMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NjZEMjYxNUE4Q0MxQjAwOEYzNjNFIC8qIEpJ
VFN0dWJSb3V0aW5lLmNwcCAqLzsgfTsKIAkJMEY3NjZEMkIxNUE4Q0MzODAwOEYzNjNFIC8qIEpJ
VFN0dWJSb3V0aW5lU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNzY2RDI5MTVBOENDMzQwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZVNldC5j
cHAgKi87IH07CiAJCTBGNzY2RDJDMTVBOENDM0EwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZVNl
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NjZE
MkExNUE4Q0MzNDAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTQ3Myw4ICs0NjksNiBAQAogCQkw
RjlFMzI2NDFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUUzMjYy
MUIwNUFCMDQwMDgwMUVENSAvKiBERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOUZCNEY0MTdG
Q0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUZCNEYyMTdGQ0I5MTcwMENCNjdGOCAv
KiBERkdTdGFja0xheW91dFBoYXNlLmNwcCAqLzsgfTsKIAkJMEY5RkI0RjUxN0ZDQjkxNzAwQ0I2
N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUZCNEYzMTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xh
eW91dFBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKLQkJMEY5RkM4QzMxNEUxQjVGRTAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3Qu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RkM4
QkYxNEUxQjVGQjAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwICovOyB9Owot
CQkwRjlGQzhDNDE0RTFCNjAwMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RkM4QzAxNEUx
QjVGQjAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjlGQzhDNTE0RTFCNjA0MDBENTJB
RTAgLyogUHV0S2luZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY5RkM4QzExNEUxQjVGQjAwRDUyQUUwIC8qIFB1dEtpbmQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkEyQzE3QjE3RDdDRjg0MDA5
RDAxNUYgLyogVGVzdFJ1bm5lclV0aWxzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGQTJDMTc5MTdEN0NGODQwMDlEMDE1RiAvKiBUZXN0UnVubmVy
VXRpbHMuY3BwICovOyB9OwogCQkwRkEyQzE3QzE3RDdDRjg0MDA5RDAxNUYgLyogVGVzdFJ1bm5l
clV0aWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkEyQzE3QTE3RDdDRjg0MDA5RDAxNUYgLyogVGVzdFJ1bm5lclV0aWxzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTc0Miw2ICs3MzYsOCBAQAog
CQkwRkY4QkRFQTFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY4QkRFODFBRDRDRjcxMDBE
RkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5jcHAgKi87IH07CiAJCTBGRjhCREVCMUFENENGNzEwMERG
RTg4NCAvKiBJbmZlcnJlZFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkY4QkRFOTFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRjky
MkQ0MTRGNDZCNDEwMDQxQTI0RSAvKiBMTEludE9mZnNldHNFeHRyYWN0b3IuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NjgwQTExNEJBN0Y4MjAw
QkZFMjcyIC8qIExMSW50T2Zmc2V0c0V4dHJhY3Rvci5jcHAgKi87IH07CisJCTBGRjlDRTczMUI5
Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY5Q0U3MTFCOUNENkQwMDA0RURDQTYgLyog
UG9seW1vcnBoaWNBY2Nlc3MuY3BwICovOyB9OworCQkwRkY5Q0U3NDFCOUNENkQwMDA0RURDQTYg
LyogUG9seW1vcnBoaWNBY2Nlc3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRjlDRTcyMUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vz
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
RkE1NDk3MTZCODgzNTAwMEIzQTk4MiAvKiBBNjRET3Bjb2RlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MkEzQTIyMTY1MUM2OTcwMEE4MEFGRSAv
KiBBNjRET3Bjb2RlLmNwcCAqLzsgfTsKIAkJMEZGQTU0OTgxNkI4ODM1MzAwQjNBOTgyIC8qIEE2
NERPcGNvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDY1MkEzQTIzMTY1MUM2OTcwMEE4MEFGRSAvKiBBNjRET3Bjb2RlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGQjZDMzgxQUY0OEREQzAwREIx
QkY3IC8qIFR5cGVvZlR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZGQjZDMzYxQUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5cGUuY3BwICov
OyB9OwpAQCAtMjE1Niw4ICsyMTUyLDYgQEAKIAkJMEY0ODUzMjYxODdERkRFQzAwODNCNjg3IC8q
IEZUTFJlY292ZXJ5T3Bjb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZU
TFJlY292ZXJ5T3Bjb2RlLmg7IHBhdGggPSBmdGwvRlRMUmVjb3ZlcnlPcGNvZGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0OTNBRjgxNkQwQ0FEMTAwODQ1MDhCIC8qIFNvdXJj
ZVByb3ZpZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvdXJj
ZVByb3ZpZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0Qjk0REIxN0I5
RjA3NTAwREQwM0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFR5cGVkQXJyYXlJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTBGNENFRDVDMThDRUE3QUIwMDgwMkZFMCAvKiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBvbHltb3JwaGljR2V0
QnlJZExpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjRDRUQ1RDE4Q0VB
N0FCMDA4MDJGRTAgLyogUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNEYyOUREMThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVj
dXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHA7IHBh
dGggPSBkZmcvREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRGMjlERTE4QjZBRDFDMDA1N0JDMTUgLyogREZH
U3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaDsg
cGF0aCA9IGRmZy9ERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjUwQUYzQjE5M0U4QjM5MDA2NzRFRTggLyogREZH
U3RydWN0dXJlQ2xvYmJlclN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oOyBwYXRoID0gZGZnL0RGR1N0cnVjdHVyZUNsb2Ji
ZXJTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjIyOSw4ICsyMjIzLDYg
QEAKIAkJMEY3MDI1QTgxNzE0QjBGODAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1v
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdPU1JFeGl0Q29tcGlsZXJD
b21tb24uaDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3MTRDQTExNkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3
YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHQmFj
a3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGNzE0Q0EyMTZFQTkyRUQwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0JhY2t3YXJkc1Byb3BhZ2F0
aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNzU3NkQwMThFMUZFRTkwMDJFRjRDRCAvKiBB
Y2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTBGNzU3NkQxMThFMUZFRTkwMDJFRjRDRCAvKiBBY2Nlc3NvckNhbGxK
SVRTdHViUm91dGluZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBY2Nlc3Nv
ckNhbGxKSVRTdHViUm91dGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc2
NkQxQzE1QTUwMjhEMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSklUU3R1YlJvdXRpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY3NjZEMjYxNUE4Q0MxQjAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVFN0dWJSb3V0aW5lLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NjZEMjkxNUE4Q0MzNDAwOEYzNjNFIC8q
IEpJVFN0dWJSb3V0aW5lU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpJVFN0dWJSb3V0aW5lU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTIzMDMsOCArMjI5NSw2IEBACiAJCTBGOUUzMjYyMUIwNUFCMDQwMDgwMUVENSAvKiBERkdTdG9y
ZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR1N0b3JlQmFy
cmllckluc2VydGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUZC
NEYyMTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1N0YWNrTGF5b3V0UGhhc2UuY3BwOyBwYXRo
ID0gZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjlGQjRGMzE3RkNCOTE3MDBDQjY3RjggLyogREZHU3RhY2tMYXlvdXRQaGFzZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTdGFja0xheW91dFBoYXNlLmg7IHBh
dGggPSBkZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkwRjlGQzhCRjE0RTFCNUZCMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQb2x5bW9ycGhpY1B1dEJ5
SWRMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY5RkM4QzAxNEUxQjVG
QjAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjlGQzhDMTE0RTFCNUZCMDBENTJBRTAgLyogUHV0S2luZC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQdXRLaW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGQTJDMTc5MTdEN0NGODQwMDlEMDE1RiAvKiBUZXN0UnVubmVyVXRpbHMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGVzdFJ1bm5lclV0aWxz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZBMkMxN0ExN0Q3Q0Y4NDAwOUQw
MTVGIC8qIFRlc3RSdW5uZXJVdGlscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBUZXN0UnVubmVyVXRpbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1Nzks
NiArMjU2OSw4IEBACiAJCTBGRjhCREU4MUFENENGNzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluZmVycmVkVmFsdWUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkY4QkRFOTFBRDRDRjcxMDBERkU4
ODQgLyogSW5mZXJyZWRWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bmZlcnJlZFZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjkyMkNGMTRG
NDZCMTMwMDQxQTI0RSAvKiBKU0NMTEludE9mZnNldHNFeHRyYWN0b3IgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0
YWJsZSI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IEpTQ0xMSW50T2Zmc2V0c0V4dHJhY3Rv
cjsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKKwkJMEZGOUNFNzExQjlDRDZE
MDAwNEVEQ0E2IC8qIFBvbHltb3JwaGljQWNjZXNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFBvbHltb3JwaGljQWNjZXNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZGOUNFNzIxQjlDRDZEMDAwNEVEQ0E2IC8qIFBvbHltb3JwaGljQWNjZXNz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvbHltb3JwaGljQWNjZXNzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRkI2QzM2MUFGNDhEREMwMERCMUJGNyAv
KiBUeXBlb2ZUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFR5
cGVvZlR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkZCNkMzNzFBRjQ4
RERDMDBEQjFCRjcgLyogVHlwZW9mVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBUeXBlb2ZUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRkM5OUQw
MTg0RUM4QUQwMDlDMTBBQiAvKiBDb25zdGFudE1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ29uc3RhbnRNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC00MDk2LDEwICs0MDg4LDYgQEAKIAkJMTQyOUQ5MkMwRUQyMkQ3MDAwQjg5NjE5IC8qIGppdCAq
LyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJMEZGMDU0Rjcx
QUMzNUI0NDAwRTVCRTU3IC8qIEV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5jcHAgKi8sCi0JCQkJ
MEZGMDU0RjgxQUMzNUI0NDAwRTVCRTU3IC8qIEV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5oICov
LAotCQkJCTBGNzU3NkQwMThFMUZFRTkwMDJFRjRDRCAvKiBBY2Nlc3NvckNhbGxKSVRTdHViUm91
dGluZS5jcHAgKi8sCi0JCQkJMEY3NTc2RDExOEUxRkVFOTAwMkVGNENEIC8qIEFjY2Vzc29yQ2Fs
bEpJVFN0dWJSb3V0aW5lLmggKi8sCiAJCQkJMEY2QjFDQzcxODY0MURGODAwODQ1RDk3IC8qIEFy
aXR5Q2hlY2tGYWlsUmV0dXJuVGh1bmtzLmNwcCAqLywKIAkJCQkwRjZCMUNDODE4NjQxREY4MDA4
NDVEOTcgLyogQXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3MuaCAqLywKIAkJCQkwRjI0RTUzQjE3
RUE5RjU5MDBBQkIyMTcgLyogQXNzZW1ibHlIZWxwZXJzLmNwcCAqLywKQEAgLTQxMDgsNiArNDA5
Niw4IEBACiAJCQkJMEY2NEIyNzAxQTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5oICov
LAogCQkJCTBGMjRFNTNEMTdFQTlGNTkwMEFCQjIxNyAvKiBDQ2FsbEhlbHBlcnMuaCAqLywKIAkJ
CQkwRkQ4MkUzNzE0MUFCMTQyMDAxNzlDOTQgLyogQ29tcGFjdEpJVENvZGVNYXAuaCAqLywKKwkJ
CQkwRkYwNTRGNzFBQzM1QjQ0MDBFNUJFNTcgLyogRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6LmNw
cCAqLywKKwkJCQkwRkYwNTRGODFBQzM1QjQ0MDBFNUJFNTcgLyogRXhlY3V0YWJsZUFsbG9jYXRp
b25GdXp6LmggKi8sCiAJCQkJQTdCNDhEQjYwRUU3NENGQzAwRENCREI2IC8qIEV4ZWN1dGFibGVB
bGxvY2F0b3IuY3BwICovLAogCQkJCUE3QjQ4REI1MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVjdXRh
YmxlQWxsb2NhdG9yLmggKi8sCiAJCQkJODZEQjY0NjMwRjk1QzZGQzAwRDdEOTIxIC8qIEV4ZWN1
dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAgKi8sCkBAIC00MTU0LDggKzQxNDQsNiBAQAog
CQkJCTBGQzcxMkUxMTdDRDg3OEYwMDhDQzkzQyAvKiBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjay5oICovLAogCQkJCUE3NkY1NEEyMTNCMjhBQUIwMEVGMkJDRSAvKiBKSVRXcml0
ZUJhcnJpZXIuaCAqLywKIAkJCQlBNzZDNTE3NDExODI3NDhEMDA3MTVCMDUgLyogSlNJbnRlcmZh
Y2VKSVQuaCAqLywKLQkJCQkwRkVFOTg0MjFBODkyMjc1MDA3NTRFOTMgLyogU2V0dXBWYXJhcmdz
RnJhbWUuY3BwICovLAotCQkJCTBGRUU5ODQwMUE4ODY1QjYwMDc1NEU5MyAvKiBTZXR1cFZhcmFy
Z3NGcmFtZS5oICovLAogCQkJCTBGRTgzNDE1MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9ycGhp
Y0NhbGxTdHViUm91dGluZS5jcHAgKi8sCiAJCQkJMEZFODM0MTYxQTZFRjk3QjAwRDA0ODQ3IC8q
IFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmggKi8sCiAJCQkJMEZBN0E4RTkxOEI0MTNDODAw
NTIzNzFEIC8qIFJlZy5jcHAgKi8sCkBAIC00MTY5LDYgKzQxNTcsOCBAQAogCQkJCTBGMjRFNTRB
MTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmggKi8sCiAJCQkJMEZBN0E4RUQxOENFNEZEODAw
NTIzNzFEIC8qIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5jcHAgKi8sCiAJCQkJMEYyNEU1NEIx
N0VFMjc0OTAwQUJCMjE3IC8qIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oICovLAorCQkJCTBG
RUU5ODQyMUE4OTIyNzUwMDc1NEU5MyAvKiBTZXR1cFZhcmFyZ3NGcmFtZS5jcHAgKi8sCisJCQkJ
MEZFRTk4NDAxQTg4NjVCNjAwNzU0RTkzIC8qIFNldHVwVmFyYXJnc0ZyYW1lLmggKi8sCiAJCQkJ
QTcwOUYyRUYxN0EwQUMwNDAwNTEyRTk4IC8qIFNsb3dQYXRoQ2FsbC5oICovLAogCQkJCUE3Mzg2
NTUxMTE4Njk3QjQwMDU0MDI3OSAvKiBTcGVjaWFsaXplZFRodW5rSklULmggKi8sCiAJCQkJQTdG
RjY0N0ExOEM1MkU4NTAwQjU1MzA3IC8qIFNwaWxsUmVnaXN0ZXJzTW9kZS5oICovLApAQCAtNTYw
MiwxMSArNTU5Miw5IEBACiAJCQkJOTY5QTA3OTUwRUQxRDNBRTAwRjFGNjgxIC8qIE9wY29kZS5o
ICovLAogCQkJCTBGMkJEQzJCMTUxRkRFOEIwMENEODkxMCAvKiBPcGVyYW5kcy5oICovLAogCQkJ
CUE3MDQ0N0U5MTdBMEJENDYwMEY1ODk4RSAvKiBPcGVyYW5kc0lubGluZXMuaCAqLywKKwkJCQkw
RkY5Q0U3MTFCOUNENkQwMDA0RURDQTYgLyogUG9seW1vcnBoaWNBY2Nlc3MuY3BwICovLAorCQkJ
CTBGRjlDRTcyMUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5oICovLAogCQkJ
CTBGMzRCMTRCMTZENDNFMEMwMDFDREE1QSAvKiBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxp
c3QuaCAqLywKLQkJCQkwRjRDRUQ1QzE4Q0VBN0FCMDA4MDJGRTAgLyogUG9seW1vcnBoaWNHZXRC
eUlkTGlzdC5jcHAgKi8sCi0JCQkJMEY0Q0VENUQxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3Jw
aGljR2V0QnlJZExpc3QuaCAqLywKLQkJCQkwRjlGQzhCRjE0RTFCNUZCMDBENTJBRTAgLyogUG9s
eW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAgKi8sCi0JCQkJMEY5RkM4QzAxNEUxQjVGQjAwRDUyQUUw
IC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuaCAqLywKIAkJCQkwRjk4MjA1RDE2QkZFMzdGMDAy
NDBEMDIgLyogUHJlY2lzZUp1bXBUYXJnZXRzLmNwcCAqLywKIAkJCQkwRjk4MjA1RTE2QkZFMzdG
MDAyNDBEMDIgLyogUHJlY2lzZUp1bXBUYXJnZXRzLmggKi8sCiAJCQkJMEZEM0U0MDcxQjYxOEI2
NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmNwcCAqLywKQEAgLTU2MzcsOCArNTYyNSw4
IEBACiAJCQkJMEYyRDRERTcxOTgzMkRBQzAwN0Q0QjE5IC8qIFR5cGVMb2NhdGlvbi5oICovLAog
CQkJCUE3OUU3ODFFMTVFRUNCQTgwMDQ3Qzg1NSAvKiBVbmxpbmtlZENvZGVCbG9jay5jcHAgKi8s
CiAJCQkJQTc5RTc4MUYxNUVFQ0JBODAwNDdDODU1IC8qIFVubGlua2VkQ29kZUJsb2NrLmggKi8s
Ci0JCQkJMTQxNDJFNTAxQjc5NkVDRTAwRjRCRjRCIC8qIFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlLmggKi8sCiAJCQkJMTQxNDJFNTQxQjc5NzNDMDAwRjRCRjRCIC8qIFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlLmNwcCAqLywKKwkJCQkxNDE0MkU1MDFCNzk2RUNFMDBGNEJGNEIgLyogVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaCAqLywKIAkJCQlCNTlGODkzODE4OTFBREI1MDBENUND
REMgLyogVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbS5jcHAgKi8sCiAJCQkJQjU5Rjg5MzcxODkx
QUQzMzAwRDVDQ0RDIC8qIFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0uaCAqLywKIAkJCQkwRjk2
M0IzNjEzRkM2RkRFMDAwMkQ5QjIgLyogVmFsdWVQcm9maWxlLmggKi8sCkBAIC02MjAzLDcgKzYx
OTEsNiBAQAogCQkJCTBGQzA5NzcxMTQ2OTNBRjUwMENGMjQ0MiAvKiBERkdPU1JFeGl0Q29tcGls
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzAyNUFBMTcxNEIwRkMwMDM4MkMwRSAvKiBERkdP
U1JFeGl0Q29tcGlsZXJDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUZDOUFCMTY4MUEz
QjYwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmggaW4gSGVhZGVycyAqLywK
LQkJCQkwRjRDRUQ1RjE4Q0VBN0FCMDA4MDJGRTAgLyogUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRUUxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4
aXRQcmVwYXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGRkM5NUMxNEVGOTBBRjAwQzcy
NTMyIC8qIERGR1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUVBNzBFRTE5RjVCNUM0MDA5
OEY1RUMgLyogSlNDb250ZXh0UmVmSW5zcGVjdG9yU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8sCkBA
IC02MjUyLDYgKzYyMzksNyBAQAogCQkJCTk5RTQ1QTI0MThBMUIyNTkwMDI2RDg4RiAvKiBFbXB0
eUlucHV0Q3Vyc29yLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDE0MkU1MzFCNzk2RUREMDBGNEJG
NEIgLyogRXhlY3V0YWJsZUluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTk5RTQ1QTI2MThBMUIy
NTkwMDI2RDg4RiAvKiBFbmNvZGVkVmFsdWUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRjlDRTc0
MUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY1ODc0RUUxOTRGRUIxMjAwQUFCMkMxIC8qIERGR01heUV4aXQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDMzA0NjA3MEUxRjQ5N0YwMDMyMzJDRiAvKiBFcnJvci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkMwMkU5MEQwRTE4MzlEQjAwMEY5Mjk3IC8qIEVycm9yQ29uc3RydWN0b3IuaCBpbiBI
ZWFkZXJzICovLApAQCAtNjQ4NSw3ICs2NDczLDYgQEAKIAkJCQlCQzE4QzQxRTBFMTZGNUNEMDBC
MzQ0NjAgLyogSlNDb250ZXh0UmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDhDRDFEODEwOENG
OTAyMDA4MTYzQzYgLyogSlNDb250ZXh0UmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTcyMDI4QjgxNzk3NjAxRTAwOTgwMjhDIC8qIEpTQ1Rlc3RSdW5uZXJVdGlscy5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJMEY3NTc2RDMxOEUxRkVFOTAwMkVGNENEIC8qIEFjY2Vzc29yQ2FsbEpJVFN0
dWJSb3V0aW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZFQzE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNEYXRhVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RUUxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTRGF0YVZpZXdQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3ODgwMTQx
MTQ3MUFEOTIwMDQxQjAxNiAvKiBKU0RhdGVNYXRoLmggaW4gSGVhZGVycyAqLywKQEAgLTY2ODYs
NyArNjY3Myw2IEBACiAJCQkJQTc3RjE4MjUxNjQxOTJDNzAwNjQwQTQ3IC8qIFBhcnNlck1vZGVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTMwM0Q2NDE0NDdCOUUxMDBEM0Y5MDQgLyogUGFyc2Vy
VG9rZW5zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM0QjE0QzE2RDQzRTBEMDAxQ0RBNUEgLyog
UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0LmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjlG
QzhDNDE0RTFCNjAwMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY4RjE0MzQxQURGMDkwMTAwRUQ3OTJDIC8qIERGR0Vwb2NoLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjk4MjA2MTE2QkZFMzgzMDAyNDBEMDIgLyogUHJlY2lzZUp1bXBUYXJn
ZXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJERDgxNTFBQjNEOEJFMDBCQkI4RTggLyogREZH
Rm9yQWxsS2lsbHMuaCBpbiBIZWFkZXJzICovLApAQCAtNzg0Nyw3ICs3ODMzLDYgQEAKIAkJCQkw
RjBCODM5QzE0QkNGNDYzMDA4ODVCNEYgLyogTExJbnRUaHVua3MuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZDRUZBQ0QxODA1RTc1NTAwNDcyQ0U0IC8qIExMVk1BUEkuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTdFNUFCMzcxNzk5RTRCMjAwRDI4MzNEIC8qIExMVk1EaXNhc3NlbWJsZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCi0JCQkJMEY0Q0VENUUxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3Jw
aGljR2V0QnlJZExpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlEREUxMDdFQzdFNzAw
NjUwNDQ2IC8qIExvb2t1cC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQ2ODBDQzE0QkJCMTdB
MDBCRkUyNzIgLyogTG93TGV2ZWxJbnRlcnByZXRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NEI3MjNCMjEyRDdEQTQ2MDAzQkQ1RUQgLyogTWFjaGluZVN0YWNrTWFya2VyLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtNzg4OSw3ICs3ODc0LDYgQEAKIAkJCQkwRkUyMjhFRTE0MzZBQjJDMDAxOTZD
NDggLyogT3B0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDhGMjFCQzEwN0VDNTREMDA0
MkVDMkMgLyogUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMDUyQzM0MEZCNzkyMTkw
MDQ4RkRDMyAvKiBQYXJzZXJBcmVuYS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwRjlGQzhDMzE0
RTFCNUZFMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjk4MjA2MDE2QkZFMzgxMDAyNDBEMDIgLyogUHJlY2lzZUp1bXBUYXJnZXRzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTk1NzQyRjY1MEREMTFGNUEwMDA5MTdGQiAvKiBQcm9maWxl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI5Q0Y4MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExP
cGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzkwNiw2ICs3ODkwLDcgQEAKIAkJCQkw
RjE5MENBQzE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkY3MjlCMzE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJPcmln
aW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QjQxNjZBRDM1QzAwMEY1QkEzIC8qIFBy
b2ZpbGVyT3JpZ2luU3RhY2suY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZGOUNFNzMxQjlDRDZE
MDAwNEVEQ0E2IC8qIFBvbHltb3JwaGljQWNjZXNzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
QjEwNThCMTY3NTQ4MzEwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4aXQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZCMTA1OEQxNjc1NDgzNzAwRjhBQjZFIC8qIFByb2ZpbGVyT1NSRXhpdFNpdGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYxMzkxMkIxNjc3MUMzQTAwOUNDQjA3IC8qIFByb2Zp
bGVyUHJvZmlsZWRCeXRlY29kZXMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MDExLDcgKzc5OTYs
NiBAQAogCQkJCUE3NkYyNzk0MTVGMTNDOTYwMDUxN0Q2NyAvKiBVbmxpbmtlZENvZGVCbG9jay5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCNTlGODkzOTE4OTFGMjlGMDBENUNDREMgLyogVW5saW5r
ZWRJbnN0cnVjdGlvblN0cmVhbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzlEQTRBNjFCN0U4
QjdDMDA4NEYzM0EgLyogSlNNb2R1bGVSZWNvcmQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEY3
NTc2RDIxOEUxRkVFOTAwMkVGNENEIC8qIEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGMjRFNTU4MTdGNzRFREIwMEFCQjIxNyAvKiBWYWx1ZVJlY292
ZXJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxOEUzQTU5MERGOTI3OEMwMEQ5MEIzNCAvKiBW
TS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRTU5MzJBNzE4M0M1QTI2MDBBMUVDQ0MgLyogVk1F
bnRyeVNjb3BlLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE4OTQ5MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
Myw4ICs1Myw3IEBACiAjaW5jbHVkZSAiTExJbnRFbnRyeXBvaW50LmgiCiAjaW5jbHVkZSAiTG93
TGV2ZWxJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJQ
b2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgiCi0jaW5jbHVkZSAiUG9seW1vcnBoaWNQdXRCeUlkTGlz
dC5oIgorI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCiAjaW5jbHVkZSAiUHJvZmlsZXJE
YXRhYmFzZS5oIgogI2luY2x1ZGUgIlJlZHVjZVdoaXRlc3BhY2UuaCIKICNpbmNsdWRlICJSZXBh
dGNoLmgiCkBAIC0zNDMsMjAgKzM0MiwxOSBAQCB2b2lkIENvZGVCbG9jazo6cHJpbnRHZXRCeUlk
Q2FjaGVTdGF0dXMoCiAgICAgICAgIGlmIChzdHViSW5mby5zZWVuKSB7CiAgICAgICAgICAgICBv
dXQucHJpbnRmKCIgaml0KCIpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBTdHJ1Y3R1cmUq
IGJhc2VTdHJ1Y3R1cmUgPSAwOwotICAgICAgICAgICAgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1
Y3R1cmUgPSAwOwotICAgICAgICAgICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogbGlzdCA9IDA7
CisgICAgICAgICAgICBTdHJ1Y3R1cmUqIGJhc2VTdHJ1Y3R1cmUgPSBudWxscHRyOworICAgICAg
ICAgICAgUG9seW1vcnBoaWNBY2Nlc3MqIHN0dWIgPSBudWxscHRyOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBzd2l0Y2ggKHN0dWJJbmZvLmFjY2Vzc1R5cGUpIHsKLSAgICAgICAgICAgIGNh
c2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmOgorICAgICAgICAgICAgc3dpdGNoIChzdHViSW5mby5j
YWNoZVR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKICAg
ICAgICAgICAgICAgICBvdXQucHJpbnRmKCJzZWxmIik7Ci0gICAgICAgICAgICAgICAgYmFzZVN0
cnVjdHVyZSA9IHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQo
KTsKKyAgICAgICAgICAgICAgICBiYXNlU3RydWN0dXJlID0gc3R1YkluZm8udS5ieUlkU2VsZi5i
YXNlT2JqZWN0U3RydWN0dXJlLmdldCgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3Q6Ci0gICAgICAgICAgICAgICAgb3V0LnBy
aW50ZigibGlzdCIpOwotICAgICAgICAgICAgICAgIGxpc3QgPSBzdHViSW5mby51LmdldEJ5SWRM
aXN0Lmxpc3Q7CisgICAgICAgICAgICBjYXNlIENhY2hlVHlwZTo6U3R1YjoKKyAgICAgICAgICAg
ICAgICBvdXQucHJpbnRmKCJzdHViIik7CisgICAgICAgICAgICAgICAgc3R1YiA9IHN0dWJJbmZv
LnUuc3R1YjsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgYWNjZXNz
X3Vuc2V0OgorICAgICAgICAgICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0OgogICAgICAgICAgICAg
ICAgIG91dC5wcmludGYoInVuc2V0Iik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICBkZWZhdWx0OgpAQCAtMzY4LDI3ICszNjYsMTAgQEAgdm9pZCBDb2RlQmxvY2s6OnByaW50
R2V0QnlJZENhY2hlU3RhdHVzKAogICAgICAgICAgICAgICAgIG91dC5wcmludGYoIiwgIik7CiAg
ICAgICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJzdHJ1Y3QiLCBiYXNlU3RydWN0dXJl
LCBpZGVudCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChw
cm90b3R5cGVTdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIsICIpOwot
ICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAicHJvdG90eXBlU3RydWN0IiwgYmFz
ZVN0cnVjdHVyZSwgaWRlbnQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBpZiAobGlzdCkgewotICAgICAgICAgICAgICAgIG91dC5wcmludGYoIiwgbGlzdCA9ICVw
OiBbIiwgbGlzdCk7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxp
c3QtPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0LnByaW50ZigiLCAiKTsKLSAgICAgICAgICAgICAgICAgICAgb3V0
LnByaW50ZigiKCIpOwotICAgICAgICAgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgImJh
c2UiLCBsaXN0LT5hdChpKS5zdHJ1Y3R1cmUoKSwgaWRlbnQpOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoIWxpc3QtPmF0KGkpLmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0LnByaW50ZigiLCAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IG91dC5wcmludChsaXN0LT5hdChpKS5jb25kaXRpb25TZXQoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiKSIpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCJdIik7Ci0gICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmIChzdHViKQorICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCAiLCAq
c3R1Yik7CisKICAgICAgICAgICAgIG91dC5wcmludGYoIikiKTsKICAgICAgICAgfQogICAgIH0K
QEAgLTQ0NCw1MyArNDI1LDE2IEBAIHZvaWQgQ29kZUJsb2NrOjpwcmludFB1dEJ5SWRDYWNoZVN0
YXR1cygKICAgICAgICAgaWYgKHN0dWJJbmZvLnNlZW4pIHsKICAgICAgICAgICAgIG91dC5wcmlu
dGYoIiBqaXQoIik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHN3aXRjaCAoc3R1YkluZm8u
YWNjZXNzVHlwZSkgewotICAgICAgICAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2U6
CisgICAgICAgICAgICBzd2l0Y2ggKHN0dWJJbmZvLmNhY2hlVHlwZSkgeworICAgICAgICAgICAg
Y2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOgogICAgICAgICAgICAgICAgIG91dC5wcmlu
dCgicmVwbGFjZSwgIik7Ci0gICAgICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJzdHJ1
Y3QiLCBzdHViSW5mby51LnB1dEJ5SWRSZXBsYWNlLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCks
IGlkZW50KTsKKyAgICAgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgInN0cnVjdCIsIHN0
dWJJbmZvLnUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgaWRlbnQpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3Ry
YW5zaXRpb25fbm9ybWFsOgotICAgICAgICAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5z
aXRpb25fZGlyZWN0OgotICAgICAgICAgICAgICAgIG91dC5wcmludCgidHJhbnNpdGlvbiwgIik7
Ci0gICAgICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJwcmV2Iiwgc3R1YkluZm8udS5w
dXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZS5nZXQoKSwgaWRlbnQpOwotICAgICAg
ICAgICAgICAgIG91dC5wcmludCgiLCAiKTsKLSAgICAgICAgICAgICAgICBkdW1wU3RydWN0dXJl
KG91dCwgIm5leHQiLCBzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5nZXQo
KSwgaWRlbnQpOwotICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0
aW9uLnJhd0NvbmRpdGlvblNldCkKLSAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCIsICIs
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Ojpmcm9tUmF3UG9pbnRlcihzdHViSW5mby51LnB1
dEJ5SWRUcmFuc2l0aW9uLnJhd0NvbmRpdGlvblNldCkpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX2xpc3Q6IHsKLSAgICAgICAgICAg
ICAgICBvdXQucHJpbnRmKCJsaXN0ID0gWyIpOwotICAgICAgICAgICAgICAgIFBvbHltb3JwaGlj
UHV0QnlJZExpc3QqIGxpc3QgPSBzdHViSW5mby51LnB1dEJ5SWRMaXN0Lmxpc3Q7Ci0gICAgICAg
ICAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hOwotICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsaXN0LT5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgICAgICBv
dXQucHJpbnQoY29tbWEsICIoIik7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFB1dEJ5SWRB
Y2Nlc3MmIGFjY2VzcyA9IGxpc3QtPmF0KGkpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGFjY2Vzcy5pc1JlcGxhY2UoKSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0LnByaW50KCJyZXBsYWNlLCAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGR1bXBTdHJ1Y3R1cmUob3V0LCAic3RydWN0IiwgYWNjZXNzLm9sZFN0cnVjdHVyZSgpLCBpZGVu
dCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWNjZXNzLmlzU2V0dGVyKCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgic2V0dGVyLCAiKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAic3RydWN0IiwgYWNjZXNzLm9sZFN0
cnVjdHVyZSgpLCBpZGVudCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWNjZXNz
LmlzQ3VzdG9tKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgiY3VzdG9t
LCAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAic3RydWN0
IiwgYWNjZXNzLm9sZFN0cnVjdHVyZSgpLCBpZGVudCk7Ci0gICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoYWNjZXNzLmlzVHJhbnNpdGlvbigpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBvdXQucHJpbnQoInRyYW5zaXRpb24sICIpOwotICAgICAgICAgICAgICAgICAgICAgICAgZHVt
cFN0cnVjdHVyZShvdXQsICJwcmV2IiwgYWNjZXNzLm9sZFN0cnVjdHVyZSgpLCBpZGVudCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgIm5leHQiLCBhY2Nlc3MubmV3U3RydWN0dXJlKCks
IGlkZW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYWNjZXNzLmNvbmRpdGlvblNl
dCgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwg
IiwgYWNjZXNzLmNvbmRpdGlvblNldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoInVua25vd24iKTsKLSAgICAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgiKSIpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBvdXQucHJpbnQoIl0iKTsKKyAgICAgICAgICAgIGNh
c2UgQ2FjaGVUeXBlOjpTdHViOiB7CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCJzdHViLCAi
LCAqc3R1YkluZm8udS5zdHViKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGNhc2UgYWNjZXNzX3Vuc2V0OgorICAgICAgICAgICAgY2FzZSBDYWNo
ZVR5cGU6OlVuc2V0OgogICAgICAgICAgICAgICAgIG91dC5wcmludGYoInVuc2V0Iik7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMjQ0MywzOSArMjM4
NywyMiBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvCiAgICAgaWYg
KEpJVENvZGU6OmlzSklUKGppdFR5cGUoKSkpIHsKICAgICAgICAgZm9yIChCYWc8U3RydWN0dXJl
U3R1YkluZm8+OjppdGVyYXRvciBpdGVyID0gbV9zdHViSW5mb3MuYmVnaW4oKTsgISFpdGVyOyAr
K2l0ZXIpIHsKICAgICAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9ICoqaXRl
cjsKLSAgICAgICAgICAgIHN3aXRjaCAoc3R1YkluZm8uYWNjZXNzVHlwZSkgewotICAgICAgICAg
ICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgotICAgICAgICAgICAg
Y2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0OiB7Ci0gICAgICAgICAgICAg
ICAgSlNDZWxsKiBvcmlnaW4gPSBzdHViSW5mby5jb2RlT3JpZ2luLmNvZGVPcmlnaW5Pd25lcigp
OwotICAgICAgICAgICAgICAgIGlmICgoIW9yaWdpbiB8fCBIZWFwOjppc01hcmtlZChvcmlnaW4p
KQotICAgICAgICAgICAgICAgICAgICAmJiBIZWFwOjppc01hcmtlZChzdHViSW5mby51LnB1dEJ5
SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgpKSkKLSAgICAgICAgICAgICAgICAg
ICAgdmlzaXRvci5hcHBlbmQoJnN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJl
KTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGFsbEFyZU1hcmtl
ZFNvRmFyID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAo
c3R1YkluZm8uY2FjaGVUeXBlICE9IENhY2hlVHlwZTo6U3R1YikKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIFBvbHltb3JwaGljQWNjZXNzKiBsaXN0ID0gc3R1YkluZm8u
dS5zdHViOworICAgICAgICAgICAgSlNDZWxsKiBvcmlnaW4gPSBzdHViSW5mby5jb2RlT3JpZ2lu
LmNvZGVPcmlnaW5Pd25lcigpOworICAgICAgICAgICAgaWYgKG9yaWdpbiAmJiAhSGVhcDo6aXNN
YXJrZWQob3JpZ2luKSkgeworICAgICAgICAgICAgICAgIGFsbEFyZU1hcmtlZFNvRmFyID0gZmFs
c2U7CisgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9saXN0OiB7Ci0gICAgICAgICAgICAgICAgUG9seW1v
cnBoaWNQdXRCeUlkTGlzdCogbGlzdCA9IHN0dWJJbmZvLnUucHV0QnlJZExpc3QubGlzdDsKLSAg
ICAgICAgICAgICAgICBKU0NlbGwqIG9yaWdpbiA9IHN0dWJJbmZvLmNvZGVPcmlnaW4uY29kZU9y
aWdpbk93bmVyKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG9yaWdpbiAmJiAhSGVhcDo6aXNNYXJr
ZWQob3JpZ2luKSkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gbGlzdC0+c2l6ZSgp
OyBqLS07KSB7CisgICAgICAgICAgICAgICAgY29uc3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0gbGlz
dC0+YXQoaik7CisgICAgICAgICAgICAgICAgaWYgKGFjY2Vzcy50eXBlKCkgIT0gQWNjZXNzQ2Fz
ZTo6VHJhbnNpdGlvbikKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKGFjY2Vzcy5zdHJ1Y3R1cmUoKSkpCisgICAgICAgICAg
ICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIoYWNjZXNz
Lm5ld1N0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
ICAgIGFsbEFyZU1hcmtlZFNvRmFyID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBs
aXN0LT5zaXplKCk7IGotLTspIHsKLSAgICAgICAgICAgICAgICAgICAgUHV0QnlJZEFjY2VzcyYg
YWNjZXNzID0gbGlzdC0+bV9saXN0W2pdOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWFjY2Vz
cy5pc1RyYW5zaXRpb24oKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQoYWNjZXNzLm9sZFN0cnVjdHVyZSgp
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZhY2Nlc3MubV9uZXdT
dHJ1Y3R1cmUpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
ICAgICBhbGxBcmVNYXJrZWRTb0ZhciA9IGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgIH0KQEAgLTI3NjcsMTAgKzI2OTQsMTAgQEAgdm9pZCBDb2RlQmxvY2s6OmdldEJ5
VmFsSW5mb01hcChCeVZhbEluZgogfQogCiAjaWYgRU5BQkxFKEpJVCkKLVN0cnVjdHVyZVN0dWJJ
bmZvKiBDb2RlQmxvY2s6OmFkZFN0dWJJbmZvKCkKK1N0cnVjdHVyZVN0dWJJbmZvKiBDb2RlQmxv
Y2s6OmFkZFN0dWJJbmZvKEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSkKIHsKICAgICBDb25jdXJyZW50
SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJldHVybiBtX3N0dWJJbmZvcy5hZGQoKTsK
KyAgICByZXR1cm4gbV9zdHViSW5mb3MuYWRkKGFjY2Vzc1R5cGUpOwogfQogCiBTdHJ1Y3R1cmVT
dHViSW5mbyogQ29kZUJsb2NrOjpmaW5kU3R1YkluZm8oQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNp
b24gMTg5NDkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMDgsNyArMjA4LDcgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0
QnlWYWxJbmZvTWFwKEJ5VmFsSW5mb01hcCYgcmVzdWx0KTsKICAgICAKICNpZiBFTkFCTEUoSklU
KQotICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBhZGRTdHViSW5mbygpOworICAgIFN0cnVjdHVyZVN0
dWJJbmZvKiBhZGRTdHViSW5mbyhBY2Nlc3NUeXBlKTsKICAgICBCYWc8U3RydWN0dXJlU3R1Yklu
Zm8+OjppdGVyYXRvciBzdHViSW5mb0JlZ2luKCkgeyByZXR1cm4gbV9zdHViSW5mb3MuYmVnaW4o
KTsgfQogICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz46Oml0ZXJhdG9yIHN0dWJJbmZvRW5kKCkg
eyByZXR1cm4gbV9zdHViSW5mb3MuZW5kKCk7IH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDE4OTQ5
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjYsMTQgKzI2LDEzIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiR2V0QnlJZFN0YXR1cy5oIgogCi0jaW5jbHVkZSAiQWNjZXNzb3JDYWxsSklUU3R1
YlJvdXRpbmUuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJDb21wbGV4R2V0
U3RhdHVzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTU2NvcGUuaCIK
ICNpbmNsdWRlICJMTEludERhdGEuaCIKICNpbmNsdWRlICJMb3dMZXZlbEludGVycHJldGVyLmgi
Ci0jaW5jbHVkZSAiUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oIgorI2luY2x1ZGUgIlBvbHltb3Jw
aGljQWNjZXNzLmgiCiAjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CiAKIG5hbWVzcGFjZSBKU0Mg
ewpAQCAtMTM5LDEyICsxMzgsMTIgQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21w
dXRlRm9yUwogICAgIGlmICghc3R1YkluZm8tPnNlZW4pCiAgICAgICAgIHJldHVybiBHZXRCeUlk
U3RhdHVzKE5vSW5mb3JtYXRpb24pOwogICAgIAotICAgIFBvbHltb3JwaGljR2V0QnlJZExpc3Qq
IGxpc3QgPSAwOworICAgIFBvbHltb3JwaGljQWNjZXNzKiBsaXN0ID0gMDsKICAgICBTdGF0ZSBz
bG93UGF0aFN0YXRlID0gVGFrZXNTbG93UGF0aDsKLSAgICBpZiAoc3R1YkluZm8tPmFjY2Vzc1R5
cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9saXN0KSB7Ci0gICAgICAgIGxpc3QgPSBzdHViSW5mby0+
dS5nZXRCeUlkTGlzdC5saXN0OworICAgIGlmIChzdHViSW5mby0+Y2FjaGVUeXBlID09IENhY2hl
VHlwZTo6U3R1YikgeworICAgICAgICBsaXN0ID0gc3R1YkluZm8tPnUuc3R1YjsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAg
ICBjb25zdCBHZXRCeUlkQWNjZXNzJiBhY2Nlc3MgPSBsaXN0LT5hdChpKTsKKyAgICAgICAgICAg
IGNvbnN0IEFjY2Vzc0Nhc2UmIGFjY2VzcyA9IGxpc3QtPmF0KGkpOwogICAgICAgICAgICAgaWYg
KGFjY2Vzcy5kb2VzQ2FsbHMoKSkKICAgICAgICAgICAgICAgICBzbG93UGF0aFN0YXRlID0gTWFr
ZXNDYWxsczsKICAgICAgICAgfQpAQCAtMTU3LDEyICsxNTYsMTIgQEAgR2V0QnlJZFN0YXR1cyBH
ZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgIEdldEJ5SWRTdGF0dXMgcmVzdWx0OwogICAg
IHJlc3VsdC5tX3N0YXRlID0gU2ltcGxlOwogICAgIHJlc3VsdC5tX3dhc1NlZW5JbkpJVCA9IHRy
dWU7IC8vIFRoaXMgaXMgaW50ZXJlc3RpbmcgZm9yIGJ5dGVjb2RlIGR1bXBpbmcgb25seS4KLSAg
ICBzd2l0Y2ggKHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSB7Ci0gICAgY2FzZSBhY2Nlc3NfdW5zZXQ6
CisgICAgc3dpdGNoIChzdHViSW5mby0+Y2FjaGVUeXBlKSB7CisgICAgY2FzZSBDYWNoZVR5cGU6
OlVuc2V0OgogICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKICAg
ICAgICAgCi0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGY6IHsKLSAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+dS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0
dXJlLmdldCgpOworICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjogeworICAgICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0dWJJbmZvLT51LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1
Y3R1cmUuZ2V0KCk7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0Zv
ckltcHVyZVByb3BlcnR5KCkpCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhzbG93
UGF0aFN0YXRlLCB0cnVlKTsKICAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlc0lnbm9yZWQ7CkBA
IC0xNzcsMTIgKzE3NiwxMyBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVG
b3JTCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgICAgICAKLSAgICBjYXNlIGFj
Y2Vzc19nZXRfYnlfaWRfbGlzdDogeworICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOiB7CiAgICAg
ICAgIGZvciAodW5zaWduZWQgbGlzdEluZGV4ID0gMDsgbGlzdEluZGV4IDwgbGlzdC0+c2l6ZSgp
OyArK2xpc3RJbmRleCkgewotICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBsaXN0
LT5hdChsaXN0SW5kZXgpLnN0cnVjdHVyZSgpOworICAgICAgICAgICAgY29uc3QgQWNjZXNzQ2Fz
ZSYgYWNjZXNzID0gbGlzdC0+YXQobGlzdEluZGV4KTsKKyAgICAgICAgICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gYWNjZXNzLnN0cnVjdHVyZSgpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBDb21wbGV4R2V0U3RhdHVzIGNvbXBsZXhHZXRTdGF0dXMgPSBDb21wbGV4R2V0U3RhdHVzOjpj
b21wdXRlRm9yKAotICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgbGlzdC0+YXQobGlzdEluZGV4
KS5jb25kaXRpb25TZXQoKSwgdWlkKTsKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGFjY2Vz
cy5jb25kaXRpb25TZXQoKSwgdWlkKTsKICAgICAgICAgICAgICAKICAgICAgICAgICAgIHN3aXRj
aCAoY29tcGxleEdldFN0YXR1cy5raW5kKCkpIHsKICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdl
dFN0YXR1czo6U2hvdWxkU2tpcDoKQEAgLTE5MywyOSArMTkzLDIzIEBAIEdldEJ5SWRTdGF0dXMg
R2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICBjYXNlIENvbXBsZXhHZXRTdGF0dXM6OklubGluZWFibGU6IHsKICAgICAgICAgICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzOwotICAgICAgICAg
ICAgICAgIHN3aXRjaCAobGlzdC0+YXQobGlzdEluZGV4KS50eXBlKCkpIHsKLSAgICAgICAgICAg
ICAgICBjYXNlIEdldEJ5SWRBY2Nlc3M6OlNpbXBsZUlubGluZToKLSAgICAgICAgICAgICAgICBj
YXNlIEdldEJ5SWRBY2Nlc3M6OlNpbXBsZVN0dWI6IHsKKyAgICAgICAgICAgICAgICBzd2l0Y2gg
KGFjY2Vzcy50eXBlKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OkxvYWQ6
IHsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGNhc2UgR2V0QnlJZEFjY2Vzczo6R2V0dGVyOiB7Ci0gICAgICAgICAgICAgICAg
ICAgIEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lKiBzdHViID0gc3RhdGljX2Nhc3Q8QWNjZXNz
b3JDYWxsSklUU3R1YlJvdXRpbmUqPigKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QtPmF0
KGxpc3RJbmRleCkuc3R1YlJvdXRpbmUoKSk7CisgICAgICAgICAgICAgICAgY2FzZSBBY2Nlc3ND
YXNlOjpHZXR0ZXI6IHsKKyAgICAgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlu
a0luZm8gPSBhY2Nlc3MuY2FsbExpbmtJbmZvKCk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChjYWxsTGlua0luZm8pOwogICAgICAgICAgICAgICAgICAgICBjYWxsTGlua1N0YXR1cyA9IHN0
ZDo6bWFrZV91bmlxdWU8Q2FsbExpbmtTdGF0dXM+KAogICAgICAgICAgICAgICAgICAgICAgICAg
Q2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
bG9ja2VyLCBwcm9maWxlZEJsb2NrLCAqc3R1Yi0+bV9jYWxsTGlua0luZm8sIGNhbGxFeGl0U2l0
ZURhdGEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIHByb2ZpbGVkQmxv
Y2ssICpjYWxsTGlua0luZm8sIGNhbGxFeGl0U2l0ZURhdGEpKTsKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlJ
ZEFjY2Vzczo6U2ltcGxlTWlzczoKLSAgICAgICAgICAgICAgICBjYXNlIEdldEJ5SWRBY2Nlc3M6
OkN1c3RvbUdldHRlcjoKLSAgICAgICAgICAgICAgICBjYXNlIEdldEJ5SWRBY2Nlc3M6OldhdGNo
ZWRTdHViOnsKLSAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIHRvdGFs
bHkgc3dlZXQgdG8gc3VwcG9ydCB0aGlzIGF0IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZS4KLSAg
ICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEzMzA1MgorICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIHRvdGFsbHkgc3dlZXQgdG8gc3VwcG9ydCBtb3JlIG9m
IHRoZXNlIGF0IHNvbWUgcG9pbnQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIC8vIGZ1dHVy
ZS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzA1MgogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhzbG93UGF0aFN0YXRlLCB0cnVlKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfSB9CiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IEdldEJ5SWRWYXJpYW50IHZhcmlhbnQoCiAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZVNl
dChzdHJ1Y3R1cmUpLCBjb21wbGV4R2V0U3RhdHVzLm9mZnNldCgpLApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCShy
ZXZpc2lvbiAxODkzMjQpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY0dldEJ5SWRMaXN0LmNwcDoxODkzMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQb2x5bW9ycGhpY0dldEJ5SWRMaXN0
LmgiCisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVk
ZSAiSGVhcC5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVT
dHViSW5mby5oIgorCituYW1lc3BhY2UgSlNDIHsKKworR2V0QnlJZEFjY2Vzczo6R2V0QnlJZEFj
Y2VzcygKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgUGFzc1Jl
ZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUsCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCisgICAg
OiBtX3R5cGUodHlwZSkKKyAgICAsIG1fc3RydWN0dXJlKHZtLCBvd25lciwgc3RydWN0dXJlKQor
ICAgICwgbV9jb25kaXRpb25TZXQoY29uZGl0aW9uU2V0KQorICAgICwgbV9zdHViUm91dGluZShz
dHViUm91dGluZSkKK3sKK30KKworR2V0QnlJZEFjY2Vzczo6fkdldEJ5SWRBY2Nlc3MoKQorewor
fQorCitHZXRCeUlkQWNjZXNzIEdldEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1cmVTdHViSW5mbyhT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IGluaXRpYWxTbG93UGF0aCA9CisgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5s
YWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpOworICAgIAor
ICAgIEdldEJ5SWRBY2Nlc3MgcmVzdWx0OworICAgIAorICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJ
bmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmKTsKKyAgICAKKyAgICByZXN1
bHQubV90eXBlID0gU2ltcGxlSW5saW5lOworICAgIHJlc3VsdC5tX3N0cnVjdHVyZS5jb3B5RnJv
bShzdHViSW5mby51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUpOworICAgIHJlc3Vs
dC5tX3N0dWJSb3V0aW5lID0gSklUU3R1YlJvdXRpbmU6OmNyZWF0ZVNlbGZNYW5hZ2VkUm91dGlu
ZShpbml0aWFsU2xvd1BhdGgpOworICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wg
R2V0QnlJZEFjY2Vzczo6dmlzaXRXZWFrKFZNJiB2bSkgY29uc3QKK3sKKyAgICBpZiAobV9zdHJ1
Y3R1cmUgJiYgIUhlYXA6OmlzTWFya2VkKG1fc3RydWN0dXJlLmdldCgpKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmICghbV9jb25kaXRpb25TZXQuYXJlU3RpbGxMaXZlKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW1fc3R1YlJvdXRpbmUtPnZpc2l0V2Vhayh2bSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworUG9seW1vcnBo
aWNHZXRCeUlkTGlzdDo6UG9seW1vcnBoaWNHZXRCeUlkTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8pCit7CisgICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9saXN0LmFwcGVuZChHZXRCeUlkQWNjZXNz
Ojpmcm9tU3RydWN0dXJlU3R1YkluZm8oc3R1YkluZm8pKTsKK30KKworUG9seW1vcnBoaWNHZXRC
eUlkTGlzdCogUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6ZnJvbShTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8pCit7CisgICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9i
eV9pZF9saXN0KQorICAgICAgICByZXR1cm4gc3R1YkluZm8udS5nZXRCeUlkTGlzdC5saXN0Owor
ICAgIAorICAgIEFTU0VSVCgKKyAgICAgICAgc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3Nf
Z2V0X2J5X2lkX3NlbGYKKyAgICAgICAgfHwgc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3Nf
dW5zZXQpOworICAgIAorICAgIFBvbHltb3JwaGljR2V0QnlJZExpc3QqIHJlc3VsdCA9IG5ldyBQ
b2x5bW9ycGhpY0dldEJ5SWRMaXN0KHN0dWJJbmZvKTsKKyAgICAKKyAgICBzdHViSW5mby5pbml0
R2V0QnlJZExpc3QocmVzdWx0KTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitQb2x5
bW9ycGhpY0dldEJ5SWRMaXN0Ojp+UG9seW1vcnBoaWNHZXRCeUlkTGlzdCgpIHsgfQorCitNYWNy
b0Fzc2VtYmxlckNvZGVQdHIgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6Y3VycmVudFNsb3dQYXRo
VGFyZ2V0KAorICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykgY29uc3QKK3sKKyAgICBp
ZiAoaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSk7CisgICAg
cmV0dXJuIG1fbGlzdC5sYXN0KCkuc3R1YlJvdXRpbmUoKS0+Y29kZSgpLmNvZGUoKTsKK30KKwor
dm9pZCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjphZGRBY2Nlc3MoY29uc3QgR2V0QnlJZEFjY2Vz
cyYgYWNjZXNzKQoreworICAgIEFTU0VSVCghaXNGdWxsKCkpOworICAgIC8vIE1ha2Ugc3VyZSB0
aGF0IHRoZSByZXNpemluZyBvcHRpbWl6ZXMgZm9yIHNwYWNlLCBub3QgdGltZS4KKyAgICBtX2xp
c3QucmVzaXplVG9GaXQobV9saXN0LnNpemUoKSArIDEpOworICAgIG1fbGlzdC5sYXN0KCkgPSBh
Y2Nlc3M7Cit9CisKK2Jvb2wgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6aXNGdWxsKCkgY29uc3QK
K3sKKyAgICBBU1NFUlQoc2l6ZSgpIDw9IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSk7Cisg
ICAgcmV0dXJuIHNpemUoKSA9PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkU7Cit9CisKK2Jv
b2wgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6aXNBbG1vc3RGdWxsKCkgY29uc3QKK3sKKyAgICBB
U1NFUlQoc2l6ZSgpIDw9IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSk7CisgICAgcmV0dXJu
IHNpemUoKSA+PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUgLSAxOworfQorCitib29sIFBv
bHltb3JwaGljR2V0QnlJZExpc3Q6OmRpZFNlbGZQYXRjaGluZygpIGNvbnN0Cit7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGlmIChhdChpKS50eXBlKCkg
PT0gR2V0QnlJZEFjY2Vzczo6U2ltcGxlSW5saW5lKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRM
aXN0Ojp2aXNpdFdlYWsoVk0mIHZtKSBjb25zdAoreworICAgIGZvciAodW5zaWduZWQgaSA9IHNp
emUoKTsgaS0tOykgeworICAgICAgICBpZiAoIWF0KGkpLnZpc2l0V2Vhayh2bSkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3
b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBo
aWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxMzEgKzI0LDEwOTQgQEAKICAqLwog
CiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5o
IgorI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCiAKICNpZiBFTkFCTEUoSklUKQogCisj
aW5jbHVkZSAiQmluYXJ5U3dpdGNoLmgiCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCiAjaW5j
bHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKKyNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJT
dHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1
YkluZm8uaCIKKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CiAKIG5hbWVzcGFjZSBKU0Mg
ewogCi1HZXRCeUlkQWNjZXNzOjpHZXRCeUlkQWNjZXNzKAotICAgIFZNJiB2bSwgSlNDZWxsKiBv
d25lciwgQWNjZXNzVHlwZSB0eXBlLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91
dGluZSwKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQmIGNvbmRpdGlvblNldCkKLSAgICA6IG1fdHlwZSh0eXBlKQotICAgICwgbV9zdHJ1
Y3R1cmUodm0sIG93bmVyLCBzdHJ1Y3R1cmUpCi0gICAgLCBtX2NvbmRpdGlvblNldChjb25kaXRp
b25TZXQpCi0gICAgLCBtX3N0dWJSb3V0aW5lKHN0dWJSb3V0aW5lKQorc3RydWN0IEFjY2Vzc0dl
bmVyYXRpb25TdGF0ZSB7CisgICAgQ0NhbGxIZWxwZXJzKiBqaXQgeyBudWxscHRyIH07CisgICAg
U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yKiBhbGxvY2F0b3I7CisgICAgc2l6ZV90IG51bWJlck9m
UGFkZGluZ0J5dGVzIHsgMCB9OworICAgIFBvbHltb3JwaGljQWNjZXNzKiBhY2Nlc3MgeyBudWxs
cHRyIH07CisgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvIHsgbnVsbHB0ciB9OworICAg
IENDYWxsSGVscGVyczo6SnVtcExpc3Qgc3VjY2VzczsKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBM
aXN0IGZhaWxBbmRSZXBhdGNoOworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZmFpbEFuZEln
bm9yZTsKKyAgICBHUFJSZWcgYmFzZUdQUiB7IEludmFsaWRHUFJSZWcgfTsKKyAgICBKU1ZhbHVl
UmVncyB2YWx1ZVJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgeyBJbnZhbGlkR1BSUmVnIH07
CisgICAgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCB7IGZhbHNlIH07CisgICAgVmVjdG9yPHN0
ZDo6ZnVuY3Rpb248dm9pZChMaW5rQnVmZmVyJik+PiBjYWxsYmFja3M7CisgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdhdGNocG9pbnRzT25TdHJ1Y3R1
cmVTdHViSW5mbz4gd2F0Y2hwb2ludHM7CisKKyAgICBXYXRjaHBvaW50KiBhZGRXYXRjaHBvaW50
KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gPSBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbigpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdhdGNocG9pbnRzT25TdHJ1Y3R1
cmVTdHViSW5mbzo6ZW5zdXJlUmVmZXJlbmNlQW5kQWRkV2F0Y2hwb2ludCgKKyAgICAgICAgICAg
IHdhdGNocG9pbnRzLCBqaXQtPmNvZGVCbG9jaygpLCBzdHViSW5mbywgY29uZGl0aW9uKTsKKyAg
ICB9CisKKyAgICB2b2lkIHJlc3RvcmVTY3JhdGNoKCkKKyAgICB7CisgICAgICAgIGFsbG9jYXRv
ci0+cmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZygqaml0LCBudW1iZXJPZlBhZGRpbmdC
eXRlcyk7CisgICAgfQorCisgICAgdm9pZCBzdWNjZWVkKCkKKyAgICB7CisgICAgICAgIHJlc3Rv
cmVTY3JhdGNoKCk7CisgICAgICAgIHN1Y2Nlc3MuYXBwZW5kKGppdC0+anVtcCgpKTsKKyAgICB9
Cit9OworCitBY2Nlc3NDYXNlOjpBY2Nlc3NDYXNlKCkKIHsKIH0KIAotR2V0QnlJZEFjY2Vzczo6
fkdldEJ5SWRBY2Nlc3MoKQorc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6
OmdldCgKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKKyAgICBjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBib29sIHZpYVByb3h5LCBXYXRjaHBv
aW50U2V0KiBhZGRpdGlvbmFsU2V0LAorICAgIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jIGN1
c3RvbUdldHRlcikKIHsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gcmVzdWx0KG5l
dyBBY2Nlc3NDYXNlKCkpOworCisgICAgcmVzdWx0LT5tX3R5cGUgPSB0eXBlOworICAgIHJlc3Vs
dC0+bV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgcmVzdWx0LT5tX3N0cnVjdHVyZS5zZXQodm0sIG93
bmVyLCBzdHJ1Y3R1cmUpOworICAgIHJlc3VsdC0+bV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25T
ZXQ7CisgICAgCisgICAgaWYgKHZpYVByb3h5IHx8IGFkZGl0aW9uYWxTZXQgfHwgcmVzdWx0LT5k
b2VzQ2FsbHMoKSB8fCBjdXN0b21HZXR0ZXIpIHsKKyAgICAgICAgcmVzdWx0LT5tX3JhcmVEYXRh
ID0gc3RkOjptYWtlX3VuaXF1ZTxSYXJlRGF0YT4oKTsKKyAgICAgICAgcmVzdWx0LT5tX3JhcmVE
YXRhLT52aWFQcm94eSA9IHZpYVByb3h5OworICAgICAgICByZXN1bHQtPm1fcmFyZURhdGEtPmFk
ZGl0aW9uYWxTZXQgPSBhZGRpdGlvbmFsU2V0OworICAgICAgICByZXN1bHQtPm1fcmFyZURhdGEt
PmN1c3RvbUFjY2Vzc29yLmdldHRlciA9IGN1c3RvbUdldHRlcjsKKyAgICB9CisKKyAgICByZXR1
cm4gcmVzdWx0OwogfQogCi1HZXRCeUlkQWNjZXNzIEdldEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1
cmVTdHViSW5mbyhTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCitzdGQ6OnVuaXF1ZV9wdHI8
QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6cmVwbGFjZSgKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3du
ZXIsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7Ci0gICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGluaXRpYWxTbG93UGF0aCA9Ci0gICAgICAgIHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2Fs
bFRvU2xvd0Nhc2UpOwotICAgIAotICAgIEdldEJ5SWRBY2Nlc3MgcmVzdWx0OwotICAgIAotICAg
IFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9z
ZWxmKTsKLSAgICAKLSAgICByZXN1bHQubV90eXBlID0gU2ltcGxlSW5saW5lOwotICAgIHJlc3Vs
dC5tX3N0cnVjdHVyZS5jb3B5RnJvbShzdHViSW5mby51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RT
dHJ1Y3R1cmUpOwotICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gSklUU3R1YlJvdXRpbmU6OmNy
ZWF0ZVNlbGZNYW5hZ2VkUm91dGluZShpbml0aWFsU2xvd1BhdGgpOwotICAgIAorICAgIHN0ZDo6
dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nhc2UoKSk7CisKKyAgICBy
ZXN1bHQtPm1fdHlwZSA9IFJlcGxhY2U7CisgICAgcmVzdWx0LT5tX29mZnNldCA9IG9mZnNldDsK
KyAgICByZXN1bHQtPm1fc3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7CisKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1ib29sIEdldEJ5SWRBY2Nlc3M6OnZpc2l0V2VhayhWTSYg
dm0pIGNvbnN0CitzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6dHJhbnNp
dGlvbigKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJl
LCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAorICAgIGNv
bnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCit7CisgICAgUkVM
RUFTRV9BU1NFUlQob2xkU3RydWN0dXJlID09IG5ld1N0cnVjdHVyZS0+cHJldmlvdXNJRCgpKTsK
KworICAgIC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIGEgcmVhbGxv
YywgaWYgd2UgZG9uJ3QgaGF2ZQorICAgIC8vIGVub3VnaCByZWdpc3RlcnMgdG8gbWFrZSBpdCBo
YXBwZW4uCisgICAgaWYgKEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzIDwgNgorICAgICAgICAm
JiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gbmV3U3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpCisgICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSkgeworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICAvLyBTa2lwIG9w
dGltaXppbmcgdGhlIGNhc2Ugd2hlcmUgd2UgbmVlZCByZWFsbG9jLCBhbmQgdGhlIHN0cnVjdHVy
ZSBoYXMKKyAgICAvLyBpbmRleGluZyBzdG9yYWdlLgorICAgIC8vIEZJWE1FOiBXZSBzaG91bGRu
J3Qgc2tpcCB0aGlzISBJbXBsZW1lbnQgaXQhCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEzMDkxNAorICAgIGlmIChvbGRTdHJ1Y3R1cmUtPmNvdWxkSGF2
ZUluZGV4aW5nSGVhZGVyKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgc3RkOjp1
bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHJlc3VsdChuZXcgQWNjZXNzQ2FzZSgpKTsKKworICAgIHJl
c3VsdC0+bV90eXBlID0gVHJhbnNpdGlvbjsKKyAgICByZXN1bHQtPm1fb2Zmc2V0ID0gb2Zmc2V0
OworICAgIHJlc3VsdC0+bV9zdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgbmV3U3RydWN0dXJlKTsK
KyAgICByZXN1bHQtPm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OworCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OnNl
dHRlcigKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKKyAgICBjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZh
bHVlRnVuYyBjdXN0b21TZXR0ZXIpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+
IHJlc3VsdChuZXcgQWNjZXNzQ2FzZSgpKTsKKworICAgIHJlc3VsdC0+bV90eXBlID0gdHlwZTsK
KyAgICByZXN1bHQtPm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgIHJlc3VsdC0+bV9zdHJ1Y3R1cmUu
c2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKKyAgICByZXN1bHQtPm1fY29uZGl0aW9uU2V0ID0g
Y29uZGl0aW9uU2V0OworCisgICAgaWYgKGN1c3RvbVNldHRlcikgeworICAgICAgICByZXN1bHQt
Pm1fcmFyZURhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPFJhcmVEYXRhPigpOworICAgICAgICByZXN1
bHQtPm1fcmFyZURhdGEtPmN1c3RvbUFjY2Vzc29yLnNldHRlciA9IGN1c3RvbVNldHRlcjsKKyAg
ICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2Fz
ZT4gQWNjZXNzQ2FzZTo6aW4oCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBl
IHR5cGUsIFN0cnVjdHVyZSogc3RydWN0dXJlLAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nh
c2U+IHJlc3VsdChuZXcgQWNjZXNzQ2FzZSgpKTsKKworICAgIHJlc3VsdC0+bV90eXBlID0gdHlw
ZTsKKyAgICByZXN1bHQtPm1fc3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7Cisg
ICAgcmVzdWx0LT5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKKworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpnZXRM
ZW5ndGgoVk0mLCBKU0NlbGwqLCBBY2Nlc3NUeXBlIHR5cGUpCit7CisgICAgc3RkOjp1bmlxdWVf
cHRyPEFjY2Vzc0Nhc2U+IHJlc3VsdChuZXcgQWNjZXNzQ2FzZSgpKTsKKworICAgIHJlc3VsdC0+
bV90eXBlID0gdHlwZTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0FjY2Vzc0Nhc2U6On5B
Y2Nlc3NDYXNlKCkKK3sKK30KKworc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nh
c2U6OmZyb21TdHJ1Y3R1cmVTdHViSW5mbygKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBzd2l0Y2ggKHN0dWJJbmZvLmNhY2hl
VHlwZSkgeworICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKKyAgICAgICAgcmV0dXJu
IGdldCgKKyAgICAgICAgICAgIHZtLCBvd25lciwgTG9hZCwgc3R1YkluZm8udS5ieUlkU2VsZi5v
ZmZzZXQsCisgICAgICAgICAgICBzdHViSW5mby51LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1
cmUuZ2V0KCkpOworCisgICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOgorICAgICAg
ICByZXR1cm4gcmVwbGFjZSgKKyAgICAgICAgICAgIHZtLCBvd25lciwgc3R1YkluZm8udS5ieUlk
U2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBzdHViSW5mby51LmJ5SWRTZWxmLm9mZnNl
dCk7CisKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9Cit9CisK
K3N0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpjbG9uZSgpIGNvbnN0Cit7
CisgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHJlc3VsdChuZXcgQWNjZXNzQ2FzZSgp
KTsKKyAgICByZXN1bHQtPm1fdHlwZSA9IG1fdHlwZTsKKyAgICByZXN1bHQtPm1fb2Zmc2V0ID0g
bV9vZmZzZXQ7CisgICAgcmVzdWx0LT5tX3N0cnVjdHVyZSA9IG1fc3RydWN0dXJlOworICAgIHJl
c3VsdC0+bV9jb25kaXRpb25TZXQgPSBtX2NvbmRpdGlvblNldDsKKyAgICBpZiAoUmFyZURhdGEq
IHJhcmVEYXRhID0gbV9yYXJlRGF0YS5nZXQoKSkgeworICAgICAgICByZXN1bHQtPm1fcmFyZURh
dGEgPSBzdGQ6Om1ha2VfdW5pcXVlPFJhcmVEYXRhPigpOworICAgICAgICByZXN1bHQtPm1fcmFy
ZURhdGEtPnZpYVByb3h5ID0gcmFyZURhdGEtPnZpYVByb3h5OworICAgICAgICByZXN1bHQtPm1f
cmFyZURhdGEtPmFkZGl0aW9uYWxTZXQgPSByYXJlRGF0YS0+YWRkaXRpb25hbFNldDsKKyAgICAg
ICAgLy8gTk9URTogV2UgZG9uJ3QgY29weSB0aGUgY2FsbExpbmtJbmZvLCBzaW5jZSB0aGF0J3Mg
Y3JlYXRlZCBkdXJpbmcgY29kZSBnZW5lcmF0aW9uLgorICAgICAgICByZXN1bHQtPm1fcmFyZURh
dGEtPmN1c3RvbUFjY2Vzc29yLm9wYXF1ZSA9IHJhcmVEYXRhLT5jdXN0b21BY2Nlc3Nvci5vcGFx
dWU7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgQWNjZXNzQ2FzZTo6Z3Vh
cmRlZEJ5U3RydWN0dXJlQ2hlY2soKSBjb25zdAoreworICAgIGlmICh2aWFQcm94eSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgQXJy
YXlMZW5ndGg6CisgICAgY2FzZSBTdHJpbmdMZW5ndGg6CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisKK2Jvb2wgQWNj
ZXNzQ2FzZTo6Y2FuUmVwbGFjZShjb25zdCBBY2Nlc3NDYXNlJiBvdGhlcikKK3sKKyAgICAvLyBX
ZSBjb3VsZCBkbyBhIGxvdCBiZXR0ZXIgaGVyZSwgYnV0IGZvciBub3cgd2UganVzdCBkbyBzb21l
dGhpbmcgb2J2aW91cy4KKworICAgIGlmICghZ3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2soKSB8fCAh
b3RoZXIuZ3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2soKSkgeworICAgICAgICAvLyBGSVhNRTogSW1w
bGVtZW50IHRoaXMhCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4g
c3RydWN0dXJlKCkgPT0gb3RoZXIuc3RydWN0dXJlKCk7Cit9CisKK3ZvaWQgQWNjZXNzQ2FzZTo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgKKyAgICAgICAg
bV90eXBlLCAiOihzdHJ1Y3R1cmUgPSAiLCBwb2ludGVyRHVtcChtX3N0cnVjdHVyZS5nZXQoKSks
ICIsIG9mZnNldCA9ICIsIG1fb2Zmc2V0LAorICAgICAgICAiLCBjb25kaXRpb25zID0gIiwgbV9j
b25kaXRpb25TZXQpOworCisgICAgaWYgKFJhcmVEYXRhKiByYXJlRGF0YSA9IG1fcmFyZURhdGEu
Z2V0KCkpIHsKKyAgICAgICAgb3V0LnByaW50KAorICAgICAgICAgICAgIiwgdmlhUHJveHkgPSAi
LCByYXJlRGF0YS0+dmlhUHJveHksCisgICAgICAgICAgICAiLCBhZGRpdGlvbmFsU2V0ID0gIiwg
UmF3UG9pbnRlcihyYXJlRGF0YS0+YWRkaXRpb25hbFNldC5nZXQoKSksCisgICAgICAgICAgICAi
LCBjYWxsTGlua0luZm8gPSAiLCBSYXdQb2ludGVyKHJhcmVEYXRhLT5jYWxsTGlua0luZm8uZ2V0
KCkpLAorICAgICAgICAgICAgIiwgY3VzdG9tQWNjZXNzb3IgPSAiLCBSYXdQb2ludGVyKHJhcmVE
YXRhLT5jdXN0b21BY2Nlc3Nvci5vcGFxdWUpKTsKKyAgICB9CisKKyAgICBvdXQucHJpbnQoIiki
KTsKK30KKworYm9vbCBBY2Nlc3NDYXNlOjp2aXNpdFdlYWsoVk0mIHZtKSBjb25zdAogewogICAg
IGlmIChtX3N0cnVjdHVyZSAmJiAhSGVhcDo6aXNNYXJrZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFtX2NvbmRpdGlvblNldC5hcmVTdGlsbExp
dmUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghbV9zdHViUm91dGluZS0+dmlz
aXRXZWFrKHZtKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3JhcmVEYXRhICYm
IG1fcmFyZURhdGEtPmNhbGxMaW5rSW5mbykKKyAgICAgICAgbV9yYXJlRGF0YS0+Y2FsbExpbmtJ
bmZvLT52aXNpdFdlYWsodm0pOwogICAgIHJldHVybiB0cnVlOwogfQogCi1Qb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0OjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbykKK3ZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCisgICAgQWNjZXNzR2Vu
ZXJhdGlvblN0YXRlJiBzdGF0ZSwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCYgZmFsbFRocm91Z2gp
CiB7Ci0gICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0KQorICAgIEND
YWxsSGVscGVycyYgaml0ID0gKnN0YXRlLmppdDsKKworICAgIHN3aXRjaCAobV90eXBlKSB7Cisg
ICAgY2FzZSBBcnJheUxlbmd0aDogeworICAgICAgICBBU1NFUlQoIXZpYVByb3h5KCkpOworICAg
ICAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0YXRlLmJhc2VHUFIsIEpTQ2Vs
bDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBzdGF0ZS5zY3JhdGNoR1BSKTsKKyAgICAgICAgZmFs
bFRocm91Z2guYXBwZW5kKAorICAgICAgICAgICAgaml0LmJyYW5jaFRlc3QzMigKKyAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6Olplcm8sIHN0YXRlLnNjcmF0Y2hHUFIsIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKElzQXJyYXkpKSk7CisgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgK
KyAgICAgICAgICAgIGppdC5icmFuY2hUZXN0MzIoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpaZXJvLCBzdGF0ZS5zY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihJ
bmRleGluZ1NoYXBlTWFzaykpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBT
dHJpbmdMZW5ndGg6IHsKKyAgICAgICAgQVNTRVJUKCF2aWFQcm94eSgpKTsKKyAgICAgICAgZmFs
bFRocm91Z2guYXBwZW5kKAorICAgICAgICAgICAgaml0LmJyYW5jaDgoCisgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3Moc3RhdGUuYmFzZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksCisg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoU3RyaW5nVHlwZSkpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZGVmYXVsdDogeworICAgICAgICBpZiAodmlh
UHJveHkoKSkgeworICAgICAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKAorICAgICAgICAgICAg
ICAgIGppdC5icmFuY2g4KAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVx
dWFsLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RhdGUuYmFz
ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKFB1cmVGb3J3YXJkaW5nUHJveHlUeXBlKSkpOwor
CisgICAgICAgICAgICBqaXQubG9hZFB0cigKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3Moc3RhdGUuYmFzZUdQUiwgSlNQcm94eTo6dGFyZ2V0T2Zmc2V0KCkpLAorICAgICAg
ICAgICAgICAgIHN0YXRlLnNjcmF0Y2hHUFIpOworCisgICAgICAgICAgICBmYWxsVGhyb3VnaC5h
cHBlbmQoCisgICAgICAgICAgICAgICAgaml0LmJyYW5jaFN0cnVjdHVyZSgKKyAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKHN0YXRlLnNjcmF0Y2hHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURP
ZmZzZXQoKSksCisgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSgpKSk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCisgICAgICAgICAgICAgICAg
aml0LmJyYW5jaFN0cnVjdHVyZSgKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpO
b3RFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0YXRl
LmJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCisgICAgICAgICAgICAgICAg
ICAgIHN0cnVjdHVyZSgpKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfSB9Owor
CisgICAgZ2VuZXJhdGUoc3RhdGUpOworfQorCit2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlKEFj
Y2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCit7CisgICAgQ0NhbGxIZWxwZXJzJiBqaXQgPSAq
c3RhdGUuaml0OworICAgIFZNJiB2bSA9ICpqaXQudm0oKTsKKyAgICBQb2x5bW9ycGhpY0FjY2Vz
cyYgYWNjZXNzID0gKnN0YXRlLmFjY2VzczsKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8gPSAqc3RhdGUuc3R1YkluZm87CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBqaXQuY29k
ZUJsb2NrKCk7CisgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSAqc3RhdGUuaWRlbnQ7Cisg
ICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzID0gc3RhdGUudmFsdWVSZWdzOworICAgIEdQUlJlZyBi
YXNlR1BSID0gc3RhdGUuYmFzZUdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHN0YXRlLnNj
cmF0Y2hHUFI7CisKKyAgICBBU1NFUlQobV9jb25kaXRpb25TZXQuc3RydWN0dXJlc0Vuc3VyZVZh
bGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSk7CisKKyAgICBpZiAoc3Ry
dWN0dXJlKCktPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSB8fCBtX2NvbmRpdGlvblNl
dC5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpCisgICAgICAgIHZtLnJlZ2lzdGVyV2F0
Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KGlkZW50LCBzdGF0ZS5hZGRXYXRjaHBvaW50KCkpOwor
CisgICAgaWYgKGFkZGl0aW9uYWxTZXQoKSkKKyAgICAgICAgYWRkaXRpb25hbFNldCgpLT5hZGQo
c3RhdGUuYWRkV2F0Y2hwb2ludCgpKTsKKworICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24mIGNvbmRpdGlvbiA6IG1fY29uZGl0aW9uU2V0KSB7CisgICAgICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gY29uZGl0aW9uLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKTsKKworICAgICAg
ICBpZiAoY29uZGl0aW9uLmlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9p
bnQoKSkgeworICAgICAgICAgICAgc3RydWN0dXJlLT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludChz
dGF0ZS5hZGRXYXRjaHBvaW50KGNvbmRpdGlvbikpOworICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIH0KKworICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25kaXRpb24uc3RydWN0dXJlRW5z
dXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoc3RydWN0dXJlKSk7
CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjb25kaXRpb24u
b2JqZWN0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3RhdGUuZmFpbEFuZFJlcGF0Y2guYXBw
ZW5kKAorICAgICAgICAgICAgaml0LmJyYW5jaFN0cnVjdHVyZSgKKyAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRk
cmVzcyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAorICAgICAgICAg
ICAgICAgIHN0cnVjdHVyZSkpOworICAgIH0KKworICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAg
Y2FzZSBJbkhpdDoKKyAgICBjYXNlIEluTWlzczoKKyAgICAgICAgaml0LmJveEJvb2xlYW5QYXls
b2FkKG1fdHlwZSA9PSBJbkhpdCwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSk7CisgICAgICAgIHN0
YXRlLnN1Y2NlZWQoKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBNaXNzOgorICAgICAg
ICBqaXQubW92ZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCB2YWx1ZVJlZ3MpOworICAgICAg
ICBzdGF0ZS5zdWNjZWVkKCk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgTG9hZDoKKyAg
ICBjYXNlIEdldHRlcjoKKyAgICBjYXNlIFNldHRlcjoKKyAgICBjYXNlIEN1c3RvbUdldHRlcjoK
KyAgICBjYXNlIEN1c3RvbVNldHRlcjogeworICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChtX29m
ZnNldCkpIHsKKyAgICAgICAgICAgIFN0cnVjdHVyZSogY3VyclN0cnVjdHVyZTsKKyAgICAgICAg
ICAgIGlmIChtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgY3VyclN0
cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBj
dXJyU3RydWN0dXJlID0gbV9jb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vYmplY3Qo
KS0+c3RydWN0dXJlKCk7CisgICAgICAgICAgICBjdXJyU3RydWN0dXJlLT5zdGFydFdhdGNoaW5n
UHJvcGVydHlGb3JSZXBsYWNlbWVudHModm0sIG9mZnNldCk7CisgICAgICAgIH0KKworICAgICAg
ICBHUFJSZWcgYmFzZUZvckdldEdQUjsKKyAgICAgICAgaWYgKHZpYVByb3h5KCkpIHsKKyAgICAg
ICAgICAgIGJhc2VGb3JHZXRHUFIgPSB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpOworICAgICAgICAg
ICAgaml0LmxvYWRQdHIoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJh
c2VHUFIsIEpTUHJveHk6OnRhcmdldE9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBiYXNlRm9y
R2V0R1BSKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBiYXNlRm9yR2V0R1BSID0gYmFz
ZUdQUjsKKworICAgICAgICBHUFJSZWcgYmFzZUZvckFjY2Vzc0dQUjsKKyAgICAgICAgaWYgKCFj
b25kaXRpb25TZXQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBqaXQubW92ZSgKKyAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY29uZGl0aW9uU2V0LnNsb3RCYXNl
Q29uZGl0aW9uKCkub2JqZWN0KCkpLAorICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIpOworICAg
ICAgICAgICAgYmFzZUZvckFjY2Vzc0dQUiA9IHNjcmF0Y2hHUFI7CisgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgYmFzZUZvckFjY2Vzc0dQUiA9IGJhc2VGb3JHZXRHUFI7CisKKyAgICAgICAg
R1BSUmVnIGxvYWRlZFZhbHVlR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgaWYgKG1fdHlw
ZSAhPSBDdXN0b21HZXR0ZXIgJiYgbV90eXBlICE9IEN1c3RvbVNldHRlcikgeworICAgICAgICAg
ICAgaWYgKG1fdHlwZSA9PSBMb2FkKQorICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSID0g
dmFsdWVSZWdzLnBheWxvYWRHUFIoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBsb2FkZWRWYWx1ZUdQUiA9IHNjcmF0Y2hHUFI7CisKKyAgICAgICAgICAgIEdQUlJlZyBzdG9y
YWdlR1BSOworICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNldCkpCisgICAgICAg
ICAgICAgICAgc3RvcmFnZUdQUiA9IGJhc2VGb3JBY2Nlc3NHUFI7CisgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cigKKyAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VGb3JBY2Nlc3NHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlP
ZmZzZXQoKSksCisgICAgICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSKTsKKyAgICAgICAg
ICAgICAgICBzdG9yYWdlR1BSID0gbG9hZGVkVmFsdWVHUFI7CisgICAgICAgICAgICB9CisKKyNp
ZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3Moc3RvcmFnZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uob2Zmc2V0KSksIGxvYWRlZFZh
bHVlR1BSKTsKKyNlbHNlCisgICAgICAgICAgICBpZiAobV90eXBlID09IExvYWQpIHsKKyAgICAg
ICAgICAgICAgICBqaXQubG9hZDMyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3Moc3RvcmFnZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uob2Zmc2V0KSArIFRhZ09m
ZnNldCksCisgICAgICAgICAgICAgICAgICAgIHZhbHVlUmVncy50YWdHUFIoKSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBqaXQubG9hZDMyKAorICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6QWRkcmVzcyhzdG9yYWdlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShvZmZzZXQpICsg
UGF5bG9hZE9mZnNldCksCisgICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIpOworI2VuZGlm
CisgICAgICAgIH0KKworICAgICAgICAvLyBTdHVmZiBmb3IgY3VzdG9tIGdldHRlcnMuCisgICAg
ICAgIENDYWxsSGVscGVyczo6Q2FsbCBvcGVyYXRpb25DYWxsOworICAgICAgICBDQ2FsbEhlbHBl
cnM6OkNhbGwgaGFuZGxlckNhbGw7CisKKyAgICAgICAgLy8gU3R1ZmYgZm9yIEpTIGdldHRlcnMu
CisgICAgICAgIENDYWxsSGVscGVyczo6RGF0YUxhYmVsUHRyIGFkZHJlc3NPZkxpbmtGdW5jdGlv
bkNoZWNrOworICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgZmFzdFBhdGhDYWxsOworICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkNhbGwgc2xvd1BhdGhDYWxsOworCisgICAgICAgIENDYWxsSGVscGVy
czo6SnVtcCBzdWNjZXNzOworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZmFpbDsKKyAgICAg
ICAgaWYgKG1fdHlwZSAhPSBMb2FkICYmIG1fdHlwZSAhPSBNaXNzKSB7CisgICAgICAgICAgICAv
LyBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdoZW5ldmVyIHRoaXMgY2FsbCBpcyBtYWRlIGluIHRo
ZSBmdXR1cmUsIHdlIHJlbWVtYmVyIHRoZQorICAgICAgICAgICAgLy8gcGxhY2UgdGhhdCB3ZSBt
YWRlIGl0IGZyb20uCisgICAgICAgICAgICBqaXQuc3RvcmUzMigKKyAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdHViSW5mby5jYWxsU2l0ZUluZGV4LmJpdHMoKSks
CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVh
bFJlZ2lzdGVyPihKU1N0YWNrOjpBcmd1bWVudENvdW50KSkpOworCisgICAgICAgICAgICBpZiAo
bV90eXBlID09IEdldHRlciB8fCBtX3R5cGUgPT0gU2V0dGVyKSB7CisgICAgICAgICAgICAgICAg
Ly8gQ3JlYXRlIGEgSlMgY2FsbCB1c2luZyBhIEpTIGNhbGwgaW5saW5lIGNhY2hlLiBBc3N1bWUg
dGhhdDoKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIC0gU1AgaXMgYWxp
Z25lZCBhbmQgcmVwcmVzZW50cyB0aGUgZXh0ZW50IG9mIHRoZSBjYWxsaW5nIGNvbXBpbGVyJ3Mg
c3RhY2sgdXNhZ2UuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAtIEZQ
IGlzIHNldCBjb3JyZWN0bHkgKGkuZS4gaXQgcG9pbnRzIHRvIHRoZSBjYWxsZXIncyBjYWxsIGZy
YW1lIGhlYWRlcikuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAtIFNQ
IC0gRlAgaXMgYW4gYWxpZ25lZCBkaWZmZXJlbmNlLgorICAgICAgICAgICAgICAgIC8vCisgICAg
ICAgICAgICAgICAgLy8gLSBBbnkgYnl0ZSBiZXR3ZWVuIEZQIChleGNsdXNpdmUpIGFuZCBTUCAo
aW5jbHVzaXZlKSBjb3VsZCBiZSBsaXZlIGluIHRoZSBjYWxsaW5nCisgICAgICAgICAgICAgICAg
Ly8gICBjb2RlLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gVGhlcmVm
b3JlLCB3ZSB0ZW1wb3JhcmlseSBncm93IHRoZSBzdGFjayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhl
IGNhbGwgYW5kIHRoZW4KKyAgICAgICAgICAgICAgICAvLyBzaHJpbmsgaXQgYWZ0ZXIuCisKKyAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9yYXJlRGF0YS0+Y2FsbExpbmtJbmZvKTsK
KyAgICAgICAgICAgICAgICBtX3JhcmVEYXRhLT5jYWxsTGlua0luZm8gPSBzdGQ6Om1ha2VfdW5p
cXVlPENhbGxMaW5rSW5mbz4oKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAv
LyBGSVhNRTogSWYgd2UgZ2VuZXJhdGVkIGEgcG9seW1vcnBoaWMgY2FsbCBzdHViIHRoYXQganVt
cGVkIGJhY2sgdG8gdGhlIGdldHRlcgorICAgICAgICAgICAgICAgIC8vIHN0dWIsIHdoaWNoIHRo
ZW4ganVtcGVkIGJhY2sgdG8gdGhlIG1haW4gY29kZSwgdGhlbiB3ZSdkIGhhdmUgYSByZWFjaGFi
aWxpdHkKKyAgICAgICAgICAgICAgICAvLyBzaXR1YXRpb24gdGhhdCB0aGUgR0MgZG9lc24ndCBr
bm93IGFib3V0LiBUaGUgR0Mgd291bGQgZW5zdXJlIHRoYXQgdGhlIHBvbHltb3JwaGljCisgICAg
ICAgICAgICAgICAgLy8gY2FsbCBzdHViIHN0YXllZCBhbGl2ZSwgYW5kIGl0IHdvdWxkIGVuc3Vy
ZSB0aGF0IHRoZSBtYWluIGNvZGUgc3RheWVkIGFsaXZlLCBidXQKKyAgICAgICAgICAgICAgICAv
LyBpdCB3b3VsZG4ndCBrbm93IHRoYXQgdGhlIGdldHRlciBzdHViIHdhcyBhbGl2ZS4gSWRlYWxs
eSBKSVQgc3R1YiByb3V0aW5lcyB3b3VsZAorICAgICAgICAgICAgICAgIC8vIGJlIEdDIG9iamVj
dHMsIGFuZCB0aGVuIHdlJ2QgYmUgYWJsZSB0byBzYXkgdGhhdCB0aGUgcG9seW1vcnBoaWMgY2Fs
bCBzdHViIGhhcyBhCisgICAgICAgICAgICAgICAgLy8gcmVmZXJlbmNlIHRvIHRoZSBnZXR0ZXIg
c3R1Yi4KKyAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTQ4OTE0CisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5kaXNhbGxvd1N0
dWJzKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9yYXJlRGF0YS0+c2V0
VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgc3R1YkluZm8uY29kZU9yaWdpbiwgbG9hZGVkVmFs
dWVHUFIpOworCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOwor
CisgICAgICAgICAgICAgICAgLy8gVGhlcmUgaXMgYSAidGhpcyIgYXJndW1lbnQuCisgICAgICAg
ICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZQYXJhbWV0ZXJzID0gMTsKKyAgICAgICAgICAgICAg
ICAvLyAuLi4gYW5kIGEgdmFsdWUgYXJndW1lbnQgaWYgd2UncmUgY2FsbGluZyBhIHNldHRlci4K
KyAgICAgICAgICAgICAgICBpZiAobV90eXBlID09IFNldHRlcikKKyAgICAgICAgICAgICAgICAg
ICAgbnVtYmVyT2ZQYXJhbWV0ZXJzKys7CisKKyAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGFj
Y2Vzc29yOyBpZiB0aGVyZSBhaW4ndCBvbmUgdGhlbiB0aGUgcmVzdWx0IGlzIGpzVW5kZWZpbmVk
KCkuCisgICAgICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBTZXR0ZXIpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaml0LmxvYWRQdHIoCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MobG9hZGVkVmFsdWVHUFIsIEdldHRlclNldHRlcjo6b2Zmc2V0T2ZTZXR0ZXIo
KSksCisgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUik7CisgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoCisgICAgICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobG9hZGVkVmFsdWVHUFIsIEdl
dHRlclNldHRlcjo6b2Zmc2V0T2ZHZXR0ZXIoKSksCisgICAgICAgICAgICAgICAgICAgICAgICBs
b2FkZWRWYWx1ZUdQUik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIHJldHVyblVuZGVmaW5lZCA9IGppdC5icmFuY2hUZXN0UHRyKAorICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Olplcm8sIGxvYWRlZFZhbHVlR1BSKTsKKwor
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mUmVnc0ZvckNhbGwgPSBKU1N0YWNrOjpD
YWxsRnJhbWVIZWFkZXJTaXplICsgbnVtYmVyT2ZQYXJhbWV0ZXJzOworCisgICAgICAgICAgICAg
ICAgdW5zaWduZWQgbnVtYmVyT2ZCeXRlc0ZvckNhbGwgPQorICAgICAgICAgICAgICAgICAgICBu
dW1iZXJPZlJlZ3NGb3JDYWxsICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihDYWxsZXJGcmFt
ZUFuZFBDKTsKKworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFsaWduZWROdW1iZXJPZkJ5dGVz
Rm9yQ2FsbCA9CisgICAgICAgICAgICAgICAgICAgIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihz
dGFja0FsaWdubWVudEJ5dHdzKCksIG51bWJlck9mQnl0ZXNGb3JDYWxsKTsKKworICAgICAgICAg
ICAgICAgIGppdC5zdWJQdHIoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2FsbCksCisgICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzIGNhbGxlZUZyYW1lID0gQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lz
dGVyLAorICAgICAgICAgICAgICAgICAgICAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2Yo
Q2FsbGVyRnJhbWVBbmRQQykpKTsKKworICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKAorICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihudW1iZXJPZlBhcmFt
ZXRlcnMpLAorICAgICAgICAgICAgICAgICAgICBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KEpTU3Rh
Y2s6OkFyZ3VtZW50Q291bnQgKiBzaXplb2YoUmVnaXN0ZXIpICsgUGF5bG9hZE9mZnNldCkpOwor
CisgICAgICAgICAgICAgICAgaml0LnN0b3JlQ2VsbCgKKyAgICAgICAgICAgICAgICAgICAgbG9h
ZGVkVmFsdWVHUFIsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoSlNTdGFjazo6Q2FsbGVlICogc2l6
ZW9mKFJlZ2lzdGVyKSkpOworCisgICAgICAgICAgICAgICAgaml0LnN0b3JlQ2VsbCgKKyAgICAg
ICAgICAgICAgICAgICAgYmFzZUZvckdldEdQUiwKKyAgICAgICAgICAgICAgICAgICAgY2FsbGVl
RnJhbWUud2l0aE9mZnNldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwKS5vZmZzZXQoKSAq
IHNpemVvZihSZWdpc3RlcikpKTsKKworICAgICAgICAgICAgICAgIGlmIChraW5kID09IENhbGxT
ZXR0ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUoCisgICAgICAgICAg
ICAgICAgICAgICAgICB2YWx1ZVJlZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICBjYWxsZWVG
cmFtZS53aXRoT2Zmc2V0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdp
c3RlckZvckFyZ3VtZW50KDEpLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBzbG93Q2Fz
ZSA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2goCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6Tm90RXF1YWwsIGxvYWRlZFZhbHVlR1BSLCBhZGRyZXNzT2ZMaW5rRnVuY3Rpb25DaGVj
aywKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKDApKTsK
KworICAgICAgICAgICAgICAgIGZhc3RQYXRoQ2FsbCA9IGppdC5uZWFyQ2FsbCgpOworCisgICAg
ICAgICAgICAgICAgaml0LmFkZFB0cigKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxsKSwKKyAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgICAg
ICAgICAgaWYgKGtpbmQgPT0gQ2FsbEdldHRlcikKKyAgICAgICAgICAgICAgICAgICAgaml0LnNl
dHVwUmVzdWx0cyh2YWx1ZVJlZ3MpOworCisgICAgICAgICAgICAgICAgZG9uZS5hcHBlbmQoaml0
Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2UubGluaygmaml0KTsKKworICAgICAg
ICAgICAgICAgIGppdC5tb3ZlKGxvYWRlZFZhbHVlR1BSLCBHUFJJbmZvOjpyZWdUMCk7CisjaWYg
VVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgICAgICAgICAvLyBXZSAqYWx3YXlzKiBrbm93IHRo
YXQgdGhlIGdldHRlci9zZXR0ZXIsIGlmIG5vbi1udWxsLCBpcyBhIGNlbGwuCisgICAgICAgICAg
ICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRh
ZyksIEdQUkluZm86OnJlZ1QxKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGppdC5tb3ZlKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX3JhcmVEYXRhLT5jYWxsTGlua0luZm8uZ2V0KCkp
LCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsID0gaml0Lm5l
YXJDYWxsKCk7CisKKyAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAorICAgICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNh
bGwpLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKKyAgICAgICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsR2V0dGVyKQorICAgICAgICAg
ICAgICAgICAgICBqaXQuc2V0dXBSZXN1bHRzKHZhbHVlUmVncyk7CisKKyAgICAgICAgICAgICAg
ICBkb25lLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm5VbmRlZmlu
ZWQubGluaygmaml0KTsKKworICAgICAgICAgICAgICAgIGlmIChraW5kID09IENhbGxHZXR0ZXIp
CisgICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCks
IHZhbHVlUmVncyk7CisKKyAgICAgICAgICAgICAgICBkb25lLmxpbmsoJmppdCk7CisKKyAgICAg
ICAgICAgICAgICBzdGF0ZS5jYWxsYmFja3MuYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICBb
Jl0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1f
cmFyZURhdGEtPmNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucygKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChzbG93UGF0aENhbGwp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZihhZGRy
ZXNzT2ZMaW5rRnVuY3Rpb25DaGVjayksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlu
a0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoZmFzdFBhdGhDYWxsKSk7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluaygKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzbG93UGF0aENhbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9u
TGFiZWwodm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKKyAg
ICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIC8vIGdldHRlcjogRW5jb2RlZEpTVmFsdWUgKCpHZXRWYWx1ZUZ1bmMpKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpOworICAgICAgICAgICAgICAgIC8vIHNldHRlcjogdm9pZCAoKlB1dFZhbHVlRnVuYykoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqIGJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNPYmplY3QsIEVuY29k
ZWRKU1ZhbHVlIHZhbHVlKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgICAgIGlm
IChraW5kID09IENhbGxDdXN0b21HZXR0ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgaml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VG
b3JBY2Nlc3NHUFIsIGJhc2VGb3JHZXRHUFIsCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIocHJvcGVydHlOYW1lLmltcGwoKSkpOworICAgICAgICAg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKGJhc2VGb3JBY2Nlc3NHUFIsIGJhc2VGb3JHZXRHUFIsIHZhbHVlUmVncy5ncHIo
KSk7CisjZWxzZQorICAgICAgICAgICAgICAgIGlmIChraW5kID09IENhbGxDdXN0b21HZXR0ZXIp
IHsKKyAgICAgICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VGb3JBY2Nlc3NHUFIsIGJhc2VGb3JHZXRHUFIs
CisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpDZWxsVGFnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cihwcm9wZXJ0eU5hbWUuaW1wbCgpKSk7CisgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VGb3JBY2Nlc3NHUFIsIGJhc2VGb3JHZXRHUFIs
CisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpDZWxsVGFnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlUmVncy5wYXlsb2Fk
R1BSKCksIHZhbHVlUmVncy50YWdHUFIoKSk7CisgICAgICAgICAgICAgICAgfQorI2VuZGlmCisg
ICAgICAgICAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAm
dm0tPnRvcENhbGxGcmFtZSk7CisKKyAgICAgICAgICAgICAgICBvcGVyYXRpb25DYWxsID0gaml0
LmNhbGwoKTsKKyAgICAgICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsQ3VzdG9tR2V0dGVyKQor
ICAgICAgICAgICAgICAgICAgICBqaXQuc2V0dXBSZXN1bHRzKHZhbHVlUmVncyk7CisgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIG5vRXhjZXB0aW9uID0KKyAgICAgICAgICAgICAg
ICAgICAgaml0LmVtaXRFeGNlcHRpb25DaGVjayhDQ2FsbEhlbHBlcnM6OkludmVydGVkRXhjZXB0
aW9uQ2hlY2spOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1l
bnRzKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih2bSksIEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyKTsKKyAgICAgICAgICAgICAgICBoYW5kbGVyQ2FsbCA9IGppdC5jYWxsKCk7CisgICAg
ICAgICAgICAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIG5vRXhjZXB0aW9uLmxpbmsoJmppdCk7CisKKyAgICAgICAgICAgICAg
ICBzdGF0ZS5jYWxsYmFja3MuYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICBbJl0gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIu
bGluayhvcGVyYXRpb25DYWxsLCBGdW5jdGlvblB0cihtX3JhcmVEYXRhLT5jdXN0b21BY2Nlc3Nv
ci5vcGFxdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhoYW5k
bGVyQ2FsbCwgbG9va3VwRXhjZXB0aW9uSGFuZGxlcik7CisgICAgICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKICAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNhc2UgUmVwbGFjZTogeworICAgICAgICBpZiAo
aXNJbmxpbmVPZmZzZXQobV9vZmZzZXQpKSB7CisgICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSgK
KyAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MsCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKAorICAgICAgICAgICAgICAgICAgICBiYXNlR1BSLAorICAgICAgICAgICAgICAg
ICAgICBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKworICAgICAgICAgICAgICAg
ICAgICBvZmZzZXRJbklubGluZVN0b3JhZ2UobV9vZmZzZXQpICogc2l6ZW9mKEpTVmFsdWUpKSk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQ
Uik7CisgICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSgKKyAgICAgICAgICAgICAgICB2YWx1ZVJl
Z3MsCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAg
ICAgICAgICBzY3JhdGNoR1BSMSwgb2Zmc2V0SW5CdXR0ZXJmbHkobV9vZmZzZXQpICogc2l6ZW9m
KEpTVmFsdWUpKSk7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGUuc3VjY2VlZCgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgY2FzZSBUcmFuc2l0aW9uOiB7CisgICAgICAgIC8vIEFj
Y2Vzc0Nhc2U6OnRyYW5zaXRpb24oKSBzaG91bGQgaGF2ZSByZXR1cm5lZCBudWxsLgorICAgICAg
ICBSRUxFQVNFX0FTU0VSVChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyA+PSA2IHx8ICFzdHJ1
Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSB8fCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSA9PSBuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKCFvbGRTdHJ1Y3R1cmUtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkp
OworCisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CisKKyAgICAgICAg
U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcihzdHViSW5mby5wYXRjaC51c2VkUmVn
aXN0ZXJzKTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2soYmFzZUdQUik7CisgICAgICAgIGFsbG9j
YXRvci5sb2NrKHZhbHVlUmVncyk7CisgICAgICAgIGFsbG9jYXRvci5sb2NrKHNjcmF0Y2hHUFIp
OworCisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0
Y2hHUFIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIzOworICAgICAgICBpZiAobmV3U3Ry
dWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlKCktPm91dE9mTGluZUNh
cGFjaXR5KCkKKyAgICAgICAgICAgICYmIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgp
KQorICAgICAgICAgICAgc2NyYXRjaEdQUjMgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BS
KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIzID0gSW52YWxpZEdQUlJl
ZzsKKworICAgICAgICBzaXplX3QgbnVtYmVyT2ZQYWRkaW5nQnl0ZXMgPSBhbGxvY2F0ZS5wcmVz
ZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhqaXQpOworCisgICAgICAgIEFTU0VSVChzdHJ1
Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7CisK
KyAgICAgICAgYm9vbCBzY3JhdGNoR1BSSGFzU3RvcmFnZSA9IGZhbHNlOworCisgICAgICAgIGlm
IChuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBzdHJ1Y3R1cmUoKS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSkgeworICAgICAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBuZXdTdHJ1
Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKKyAgICAgICAg
ICAgIENvcGllZEFsbG9jYXRvciogY29waWVkQWxsb2NhdG9yID0gJnZtLT5oZWFwLnN0b3JhZ2VB
bGxvY2F0b3IoKTsKKworICAgICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkpIHsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cigmY29waWVkQWxsb2NhdG9yLT5t
X2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIHNsb3dQYXRo
LmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgaml0LmJyYW5jaFN1YlB0cigKKyAgICAgICAg
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6U2lnbmVkLCBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRjaEdQUikpOworICAgICAgICAgICAgICAgIGppdC5zdG9y
ZVB0cihzY3JhdGNoR1BSLCAmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcpOwor
ICAgICAgICAgICAgICAgIGppdC5uZWdQdHIoc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAg
aml0LmFkZFB0cigKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBYnNvbHV0ZUFk
ZHJlc3MoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UGF5bG9hZEVuZCksIHNjcmF0Y2hHUFIp
OworICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
c2l6ZW9mKEpTVmFsdWUpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIHNpemVfdCBvbGRTaXplID0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOworICAgICAgICAgICAgICAgIEFTU0VSVChuZXdTaXpl
ID4gb2xkU2l6ZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgp
KSwgc2NyYXRjaEdQUjMpOworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKCZjb3BpZWRBbGxv
Y2F0b3ItPm1fY3VycmVudFJlbWFpbmluZywgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAg
c2xvd1BhdGguYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICBqaXQuYnJhbmNoU3ViUHRyKAor
ICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpTaWduZWQsIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BSKSk7CisgICAgICAgICAgICAgICAg
aml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIsICZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFp
bmluZyk7CisgICAgICAgICAgICAgICAgaml0Lm5lZ1B0cihzY3JhdGNoR1BSKTsKKyAgICAgICAg
ICAgICAgICBqaXQuYWRkUHRyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFi
c29sdXRlQWRkcmVzcygmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRQYXlsb2FkRW5kKSwgc2Ny
YXRjaEdQUik7CisgICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMihzaXplb2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICAv
LyBXZSBoYXZlIHNjcmF0Y2hHUFIgPSBuZXcgc3RvcmFnZSwgc2NyYXRjaEdQUjMgPSBvbGQgc3Rv
cmFnZSwKKyAgICAgICAgICAgICAgICAvLyBzY3JhdGNoR1BSMiA9IGF2YWlsYWJsZQorICAgICAg
ICAgICAgICAgIGZvciAoc2l6ZV90IG9mZnNldCA9IDA7IG9mZnNldCA8IG9sZFNpemU7IG9mZnNl
dCArPSBzaXplb2Yodm9pZCopKSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKAor
ICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2Yodm9pZCopKSksCisgICAgICAg
ICAgICAgICAgICAgICAgICBzY3JhdGNoR1BSMik7CisgICAgICAgICAgICAgICAgICAgIGppdC5z
dG9yZVB0cigKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNjcmF0Y2hHUFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLXN0YXRp
Y19jYXN0PHB0cmRpZmZfdD4ob2Zmc2V0ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQq
KSkpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGpp
dC5zdG9yZVB0cihzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYnNhc2VHUFIsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOworICAgICAgICAgICAgc2NyYXRjaEdQUkhhc1N0
b3JhZ2UgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgdWludDMyX3Qgc3RydWN0dXJlQml0
cyA9IGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oc3RydWN0dXJlLT5pZCgpKTsKKyAgICAgICAgaml0
LnN0b3JlMzIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3RydWN0
dXJlQml0cyksCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlND
ZWxsOnN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKKworICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQo
bV9vZmZzZXQpKSB7CisgICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSgKKyAgICAgICAgICAgICAg
ICB2YWx1ZVJlZ3MsCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAg
ICAgICAgICAgICAgICAgICBiYXNlR1BSLAorICAgICAgICAgICAgICAgICAgICBKU09iamVjdDo6
b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKworICAgICAgICAgICAgICAgICAgICBvZmZzZXRJbklu
bGluZVN0b3JhZ2UobV9vZmZzZXQgKiBzaXplb2YoSlNWYWx1ZSkpKSk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBpZiAoIXNjcmF0Y2hHUFJIYXNTdG9yYWdlKQorICAgICAgICAgICAg
ICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVZh
bHVlKAorICAgICAgICAgICAgICAgIHZhbHVlUmVncywKKyAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkobV9vZmZzZXQpICog
c2l6ZW9mKEpTVmFsdWUpKSk7CisgICAgICAgIH0KKworICAgICAgICBTY3JhdGNoQnVmZmVyKiBz
Y3JhdGNoQnVmZmVyID0gbnVsbHB0cjsKKyAgICAgICAgaWYgKG5ld1N0cnVjdHVyZSgpLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpICE9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKQorICAg
ICAgICAgICAgc2NyYXRjaEJ1ZmZlciA9IHZtLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShhbGxvY2F0
b3IuZGVzaXJlZFNjcmF0Y2hCdWZmZXJTaXplRm9yQ2FsbCgpKTsKKworI2lmIEVOQUJMRShHR0Mp
CisgICAgICAgIGlmIChuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBzdHJ1
Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgeworICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpDYWxsIGNhbGxGbHVzaFdyaXRlQmFycmllckJ1ZmZlcjsKKyAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gaml0Lmp1bXBJZklzUmVtZW1i
ZXJlZE9ySW5FZGVuKGJhc2VHUFIpOworICAgICAgICAgICAgV3JpdGVCYXJyaWVyQnVmZmVyJiB3
cml0ZUJhcnJpZXJCdWZmZXIgPSBqaXQudm0oKS0+aGVhcC53cml0ZUJhcnJpZXJCdWZmZXIoKTsK
KyAgICAgICAgICAgIGppdC5sb2FkMzIod3JpdGVCYXJyaWVyQnVmZmVyLmN1cnJlbnRJbmRleEFk
ZHJlc3MoKSwgc2NyYXRjaEdQUjIpOworICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIG5l
ZWRUb0ZsdXNoID0KKyAgICAgICAgICAgICAgICBqaXQuYnJhbmNoMzIoCisgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBzY3JhdGNoR1BSMiwKKyAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIod3JpdGVCYXJyaWVyQnVmZmVy
LmNhcGFjaXR5KCkpKTsKKworICAgICAgICAgICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKDEpLCBzY3JhdGNoR1BSMik7CisgICAgICAgICAgICBqaXQuc3RvcmUzMihzY3Jh
dGNoR1BSMiwgd3JpdGVCYXJyaWVyQnVmZmVyLmN1cnJlbnRJbmRleEFkZHJlc3MoKSk7CisKKyAg
ICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih3cml0ZUJhcnJp
ZXJCdWZmZXIuYnVmZmVyKCkpLCBzY3JhdGNoR1BSMSk7CisgICAgICAgICAgICAvLyBXZSB1c2Ug
YW4gb2Zmc2V0IG9mIC1zaXplb2Yodm9pZCopIGJlY2F1c2Ugd2UgYWxyZWFkeSBhZGRlZCAxIHRv
IHNjcmF0Y2hHUFIyLgorICAgICAgICAgICAgaml0LnN0b3JlUHRyKAorICAgICAgICAgICAgICAg
IGJhc2VHUFIsCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoCisgICAg
ICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgQ0NhbGxIZWxwZXJzOjpT
Y2FsZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4oLXNpemVv
Zih2b2lkKikpKSk7CisKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lV2l0aEJh
cnJpZXIgPSBqaXQuanVtcCgpOworICAgICAgICAgICAgbmVlZFRvRmx1c2gubGluaygmaml0KTsK
KworICAgICAgICAgICAgYWxsb2NhdG9yLnByZXNlcnZlVXNlZFJlZ2lzdGVyc1RvU2NyYXRjaEJ1
ZmZlckZvckNhbGwoaml0LCBzY3JhdGNoQnVmZmVyLCBzY3JhdGNoR1BSMik7CisgICAgICAgICAg
ICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VHUFIpOworICAgICAgICAgICAg
Y2FsbEZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyID0gaml0LmNhbGwoKTsKKyAgICAgICAgICAgIGFs
bG9jYXRvci5yZXN0b3JlVXNlZFJlZ2lzdGVyc0Zyb21TY3JhdGNoQnVmZmVyRm9yQ2FsbCgKKyAg
ICAgICAgICAgICAgICBqaXQsIHNjcmF0Y2hCdWZmZXIsIHNjcmF0Y2hHUFIyKTsKKworICAgICAg
ICAgICAgZG9uZVdpdGhCYXJyaWVyLmxpbmsoJmppdCk7CisgICAgICAgICAgICBvd25lcklzUmVt
ZW1iZXJlZE9ySW5FZGVuLmxpbmsoJmppdCk7CisKKyAgICAgICAgICAgIHN0YXRlLmNhbGxiYWNr
cy5hcHBlbmQoCisgICAgICAgICAgICAgICAgWyZdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7
CisgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsRmx1c2hXcml0ZUJhcnJp
ZXJCdWZmZXIsIG9wZXJhdGlvbkZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKTsKKyAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgfQorI2VuZGlmIC8vIEVOQUJMRShHR0MpCisgICAgICAgIAorICAg
ICAgICBzdGF0ZS5zdWNjZWVkKCk7CisKKyAgICAgICAgaWYgKG5ld1N0cnVjdHVyZSgpLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpICE9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Cisg
ICAgICAgICAgICBzbG93UGF0aC5saW5rKCZqaXQpOworICAgICAgICAgICAgYWxsb2NhdG9yLnJl
c3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBudW1iZXJPZlBhZGRpbmdCeXRlcyk7
CisgICAgICAgICAgICBhbGxvY2F0b3IucHJlc2VydmVVc2VkUmVnaXN0ZXJzVG9TY3JhdGNoQnVm
ZmVyRm9yQ2FsbChqaXQsIHNjcmF0Y2hCdWZmZXIsIHNjcmF0Y2hHUFIpOworI2lmIFVTRShKU1ZB
TFVFNjQpCisgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKAorICAg
ICAgICAgICAgICAgIGJhc2VHUFIsCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKHN0cnVjdHVyZSksCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoc2xvdC5jYWNoZWRPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgdmFsdWVHUFIp
OworI2Vsc2UKKyAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoCisg
ICAgICAgICAgICAgICAgYmFzZUdQUiwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihzbG90LmNhY2hlZE9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICB2YWx1ZUdQ
UiwgdmFsdWVUYWdHUFIpOworI2VuZGlmCisgICAgICAgICAgICBvcGVyYXRpb25DYWxsID0gaml0
LmNhbGwoKTsKKyAgICAgICAgICAgIGFsbG9jYXRvci5yZXN0b3JlVXNlZFJlZ2lzdGVyc0Zyb21T
Y3JhdGNoQnVmZmVyRm9yQ2FsbChqaSwgc2NyYXRjaEJ1ZmZlciwgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7CisKKyAgICAgICAgICAgIHN0YXRlLmNhbGxiYWNrcy5h
cHBlbmQoCisgICAgICAgICAgICAgICAgWyZdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhvcGVyYXRpb25DYWxsLCBvcGVyYXRp
b25SZWFsbG9jYXRlU3RvcmFnZUFuZEZpbmlzaFB1dCk7CisgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNhc2UgQXJyYXlMZW5ndGg6
IHsKKyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBqaXQubG9h
ZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0
aE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUuYXBw
ZW5kKAorICAgICAgICAgICAgaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6TGVzc1RoYW4sIHNj
cmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgIGppdC5i
b3hJbnQzMihzY3JhdGNoR1BSLCB2YWx1ZVJlZ3MpOworICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYXNlIFN0cmluZ0xlbmd0aDogeworICAg
ICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU1N0cmluZzo6
b2Zmc2V0T2ZMZW5ndGgoKSksIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOworICAgICAgICBqaXQu
Ym94SW50MzIodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgdmFsdWVSZWdzKTsKKyAgICAgICAgc3Rh
dGUuc3VjY2VlZCgpOworICAgICAgICByZXR1cm47CisgICAgfSB9CiAgICAgCi0gICAgbV9saXN0
LmFwcGVuZChHZXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0dXJlU3R1YkluZm8oc3R1YkluZm8pKTsK
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1Qb2x5bW9ycGhpY0dldEJ5
SWRMaXN0KiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojpmcm9tKFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbykKK1BvbHltb3JwaGljQWNjZXNzOjpQb2x5bW9ycGhpY0FjY2VzcygpIHsgfQorUG9s
eW1vcnBoaWNBY2Nlc3M6On5Qb2x5bW9ycGhpY0FjY2VzcygpIHsgfQorCitNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgUG9seW1vcnBoaWNBY2Nlc3M6OnJlZ2VuZXJhdGVXaXRoQ2FzZXMoCisgICAgVk0m
IHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBj
b25zdCBJZGVudGlmaWVyJiBpZGVudCwKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFjY2Vz
c0Nhc2U+PiBvcmlnaW5hbENhc2VzVG9BZGQpCiB7Ci0gICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5
cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9saXN0KQotICAgICAgICByZXR1cm4gc3R1YkluZm8udS5n
ZXRCeUlkTGlzdC5saXN0OwotICAgIAotICAgIEFTU0VSVCgKLSAgICAgICAgc3R1YkluZm8uYWNj
ZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYKLSAgICAgICAgfHwgc3R1YkluZm8uYWNj
ZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpOwotICAgIAotICAgIFBvbHltb3JwaGljR2V0QnlJZExp
c3QqIHJlc3VsdCA9IG5ldyBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KHN0dWJJbmZvKTsKKyAgICAv
LyBUaGlzIG1ldGhvZCB3aWxsIGFkZCB0aGUgb3JpZ2luYWxDYXNlc1RvQWRkIHRvIHRoZSBsaXN0
IG9uZSBhdCBhIHRpbWUgd2hpbGUgcHJlc2VydmluZyB0aGUKKyAgICAvLyBpbnZhcmlhbnRzOgor
ICAgIC8vIC0gSWYgYSBuZXdseSBhZGRlZCBjYXNlIGNhblJlcGxhY2UoKSBhbnkgZXhpc3Rpbmcg
Y2FzZSwgdGhlbiB0aGUgZXhpc3RpbmcgY2FzZSBpcyByZW1vdmVkIGJlZm9yZQorICAgIC8vICAg
dGhlIG5ldyBjYXNlIGlzIGFkZGVkLiBSZW1vdmFsIGRvZXNuJ3QgY2hhbmdlIG9yZGVyIG9mIHRo
ZSBsaXN0LiBBbnkgbnVtYmVyIG9mIGV4aXN0aW5nIGNhc2VzCisgICAgLy8gICBjYW4gYmUgcmVt
b3ZlZCB2aWEgdGhlIGNhblJlcGxhY2UoKSBydWxlLgorICAgIC8vIC0gQ2FzZXMgaW4gdGhlIGxp
c3QgYWx3YXlzIGFwcGVhciBpbiBhc2NlbmRpbmcgb3JkZXIgb2YgdGltZSBvZiBhZGRpdGlvbi4g
VGhlcmVmb3JlLCBpZiB5b3UKKyAgICAvLyAgIGNhc2NhZGUgdGhyb3VnaCB0aGUgY2FzZXMgaW4g
cmV2ZXJzZSBvcmRlciwgeW91IHdpbGwgZ2V0IHRoZSBtb3N0IHJlY2VudCBjYXNlcyBmaXJzdC4K
KyAgICAvLyAtIElmIHRoaXMgbWV0aG9kIGZhaWxzIChyZXR1cm5zIG51bGwsIGRvZXNuJ3QgYWRk
IHRoZSBjYXNlcyksIHRoZW4gYm90aCB0aGUgcHJldmlvdXMgY2FzZSBsaXN0CisgICAgLy8gICBh
bmQgdGhlIHByZXZpb3VzIHN0dWIgYXJlIGtlcHQgaW50YWN0IGFuZCB0aGUgbmV3IGNhc2VzIGFy
ZSBkZXN0cm95ZWQuIEl0J3MgT0sgdG8gYXR0ZW1wdCB0bworICAgIC8vICAgYWRkIG1vcmUgdGhp
bmdzIGFmdGVyIGZhaWx1cmUuCiAgICAgCi0gICAgc3R1YkluZm8uaW5pdEdldEJ5SWRMaXN0KHJl
c3VsdCk7CisgICAgLy8gRmlyc3QsIHZlcmlmeSB0aGF0IHdlIGNhbiBnZW5lcmF0ZSBjb2RlIGZv
ciBhbGwgb2YgdGhlIG5ldyBjYXNlcyB3aGlsZSBlbGltaW5hdGluZyBhbnkgb2YgdGhlCisgICAg
Ly8gbmV3IGNhc2VzIHRoYXQgcmVwbGFjZSBlYWNoIG90aGVyLgorICAgIFZlY3RvcjxzdGQ6OnVu
aXF1ZV9wdHI8QWNjZXNzQ2FzZT4+IGNhc2VzVG9BZGQ7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG9yaWdpbmFsQ2FzZXNUb0FkZC5zaXplKCk7ICsraSkgeworICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8QWNjZXNzQ2FzZT4gbXlDYXNlID0gc3RkOjptb3ZlKG9yaWdpbmFsQ2FzZXNUb0Fk
ZFtpXSk7CisKKyAgICAgICAgLy8gQWRkIGl0IG9ubHkgaWYgaXQgaXMgbm90IHJlcGxhY2VkIGJ5
IHRoZSBzdWJzZXF1ZW50IGNhc2VzIGluIHRoZSBsaXN0LgorICAgICAgICBib29sIGZvdW5kID0g
ZmFsc2U7CisgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGkgKyAxOyBqIDwgb3JpZ2luYWxOZXdB
Y2Nlc3Nlcy5zaXplKCk7ICsraikgeworICAgICAgICAgICAgaWYgKG9yaWdpbmFsTmV3QWNjZXNz
ZXNbal0tPmNhblJlcGxhY2UoKm15Q2FzZSkpIHsKKyAgICAgICAgICAgICAgICBmb3VuZCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoZm91bmQpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAg
ICAgIGlmIChteUNhc2UtPmRvZXNDYWxscygpICYmIHN0dWJJbmZvLnBhdGNoLnNwaWxsTW9kZSA9
PSBOZWVkVG9TcGlsbCkKKyAgICAgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIo
KTsKKworICAgICAgICBjYXNlc1RvQWRkLmFwcGVuZChzdGQ6Om1vdmUobXlDYXNlKSk7CisgICAg
fQorCisgICAgLy8gTm93IGNvbnN0cnVjdCB0aGUgbGlzdCBvZiBjYXNlcyBhcyB0aGV5IHNob3Vs
ZCBhcHBlYXIgaWYgd2UgYXJlIHN1Y2Nlc3NmdWwuIFRoaXMgbWVhbnMgcHV0dGluZworICAgIC8v
IGFsbCBvZiB0aGUgcHJldmlvdXMgY2FzZXMgaW4gdGhpcyBsaXN0IGluIG9yZGVyIGJ1dCBleGNs
dWRpbmcgdGhvc2UgdGhhdCBjYW4gYmUgcmVwbGFjZWQsIGFuZAorICAgIC8vIHRoZW4gYWRkaW5n
IHRoZSBuZXcgY2FzZXMuCisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPj4g
bmV3Q2FzZXM7CisgICAgZm9yIChhdXRvJiBvbGRDYXNlIDogbV9saXN0KSB7CisgICAgICAgIGJv
b2wgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgZm9yIChhdXRvJiBjYXNlVG9BZGQgOiBjYXNlc1Rv
QWRkKSB7CisgICAgICAgICAgICBpZiAoY2FzZVRvQWRkLT5jYW5SZXBsYWNlKCpvbGRDYXNlKSkg
eworICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIWZvdW5kKQorICAgICAgICAg
ICAgbmV3Q2FzZXMuYXBwZW5kKG9sZENhc2UtPmNsb25lKCkpOworICAgIH0KKyAgICBmb3IgKGF1
dG8mIGNhc2VUb0FkZCA6IGNhc2VzVG9BZGQpCisgICAgICAgIG5ld0Nhc2VzLmFwcGVuZChzdGQ6
Om1vdmUoY2FzZVRvQWRkKSk7CiAgICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KKyAgICBpZiAo
bmV3Q2FzZXMuc2l6ZSgpID4gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKQorICAgICAgICBy
ZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7CiAKLVBvbHltb3JwaGljR2V0QnlJZExpc3Q6
On5Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0KCkgeyB9CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IHJlc3VsdCA9IHJlZ2VuZXJhdGUodm0sIGNvZGVCbG9jaywgc3R1YkluZm8sIGlkZW50LCBuZXdD
YXNlcyk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIoKTsKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6
OmN1cnJlbnRTbG93UGF0aFRhcmdldCgKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8p
IGNvbnN0Ci17Ci0gICAgaWYgKGlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRv
U2xvd0Nhc2UpOwotICAgIHJldHVybiBtX2xpc3QubGFzdCgpLnN0dWJSb3V0aW5lKCktPmNvZGUo
KS5jb2RlKCk7CisgICAgbV9saXN0ID0gbmV3Q2FzZXM7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotdm9pZCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjphZGRBY2Nlc3MoY29uc3QgR2V0QnlJZEFj
Y2VzcyYgYWNjZXNzKQorTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIFBvbHltb3JwaGljQWNjZXNzOjpy
ZWdlbmVyYXRlV2l0aENhc2UoCisgICAgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gbmV3QWNjZXNzKQogewotICAgIEFTU0VSVCghaXNG
dWxsKCkpOwotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSByZXNpemluZyBvcHRpbWl6ZXMgZm9y
IHNwYWNlLCBub3QgdGltZS4KLSAgICBtX2xpc3QucmVzaXplVG9GaXQobV9saXN0LnNpemUoKSAr
IDEpOwotICAgIG1fbGlzdC5sYXN0KCkgPSBhY2Nlc3M7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVl
X3B0cjxBY2Nlc3NDYXNlPj4gbmV3QWNjZXNzZXM7CisgICAgbmV3QWNjZXNzZXMuYXBwZW5kKHN0
ZDo6bW92ZShuZXdBY2Nlc3MpKTsKKyAgICByZXR1cm4gcmVnZW5lcmF0ZVdpdGhDYXNlcyh2bSwg
Y29kZUJsb2NrLCBzdHViSW5mbywgaWRlbnQsIG5ld0FjY2Vzc2VzKTsKIH0KIAotYm9vbCBQb2x5
bW9ycGhpY0dldEJ5SWRMaXN0Ojppc0Z1bGwoKSBjb25zdAorYm9vbCBQb2x5bW9ycGhpY0FjY2Vz
czo6dmlzaXRXZWFrKFZNJiB2bSkgY29uc3QKIHsKLSAgICBBU1NFUlQoc2l6ZSgpIDw9IFBPTFlN
T1JQSElDX0xJU1RfQ0FDSEVfU0laRSk7Ci0gICAgcmV0dXJuIHNpemUoKSA9PSBQT0xZTU9SUEhJ
Q19MSVNUX0NBQ0hFX1NJWkU7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemUoKTsg
KytpKSB7CisgICAgICAgIGlmICghYXQoaSkudmlzaXRXZWFrKHZtKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgUG9seW1vcnBo
aWNHZXRCeUlkTGlzdDo6aXNBbG1vc3RGdWxsKCkgY29uc3QKK3ZvaWQgUG9seW1vcnBoaWNBY2Nl
c3M6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKLSAgICBBU1NFUlQoc2l6ZSgpIDw9
IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSk7Ci0gICAgcmV0dXJuIHNpemUoKSA+PSBQT0xZ
TU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUgLSAxOworICAgIG91dC5wcmludChSYXdQb2ludGVyKHRo
aXMpLCAiOlsiKTsKKyAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgZm9yIChhdXRvJiBlbnRy
eSA6IG1fbGlzdCkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAqZW50cnkpOworICAgIG91dC5w
cmludCgiXSIpOwogfQogCi1ib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmRpZFNlbGZQYXRj
aGluZygpIGNvbnN0CitNYWNyb0Fzc2VtYmxlckNvZGVQdHIgUG9seW1vcnBoaWNBY2Nlc3M6OnJl
Z2VuZXJhdGUoCisgICAgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwKKyAgICBWZWN0b3I8c3Rk
Ojp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+PiYgY2FzZXMpCiB7Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIGlmIChhdChpKS50eXBlKCkgPT0gR2V0QnlJZEFj
Y2Vzczo6U2ltcGxlSW5saW5lKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgQWNjZXNz
R2VuZXJhdGlvblN0YXRlIHN0YXRlOworCisgICAgc3RhdGUuYWNjZXNzID0gdGhpczsKKyAgICBz
dGF0ZS5zdHViSW5mbyA9ICZzdHViSW5mbzsKKyAgICBzdGF0ZS5pZGVudCA9ICZpZGVudDsKKyAg
ICAKKyAgICBzdGF0ZS5iYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRj
aC5iYXNlR1BSKTsKKyAgICBzdGF0ZS52YWx1ZVJlZ3MgPSBKU1ZhbHVlUmVncygKKyNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQorICAgICAgICBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNo
LnZhbHVlVGFnR1BSKSwKKyNlbmRpZgorICAgICAgICBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJ
bmZvLnBhdGNoLnZhbHVlR1BSKSk7CisKKyAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxs
b2NhdG9yKHN0dWJJbmZvLnBhdGhjLnVzZWRSZWdpc3RlcnMpOworICAgIHN0YXRlLmFsbG9jYXRv
ciA9ICZhbGxvY2F0b3I7CisgICAgYWxsb2NhdG9yLmxvY2soc3RhdGUuYmFzZUdQUik7CisgICAg
YWxsb2NhdG9yLmxvY2soc3RhdGUudmFsdWVSZWdzKTsKKworICAgIHN0YXRlLnNjcmF0Y2hHUFIg
PSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgCisgICAgQ0NhbGxIZWxwZXJz
IGppdCgmdm0sIGNvZGVCbG9jayk7CisgICAgc3RhdGUuaml0ID0gJmppdDsKKworICAgIHN0YXRl
Lm51bWJlck9mUGFkZGluZ0J5dGVzID0gYWxsb2NhdG9yLnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJz
QnlQdXNoaW5nKGppdCk7CisKKyAgICBib29sIGFsbEd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrID0g
dHJ1ZTsKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogY2FzZXMpCisgICAgICAgIGFsbEd1YXJkZWRC
eVN0cnVjdHVyZUNoZWNrICY9IGVudHJ5LT5ndWFyZGVkQnlTdHJ1Y3R1cmVDaGVjaygpOworCisg
ICAgaWYgKCFzaXplKCkpIHsKKyAgICAgICAgLy8gVGhpcyBpcyBzdXBlciB1bmxpa2VseSwgYnV0
IHdlIG1ha2UgaXQgbGVnYWwgYW55d2F5LgorICAgICAgICBzdGF0ZS5mYWlsQW5kUmVwYXRjaC5h
cHBlbmQoaml0Lmp1bXAoKSk7CisgICAgfSBlbHNlIGlmICghYWxsR3VhcmRlZEJ5U3RydWN0dXJl
Q2hlY2sgfHwgc2l6ZSgpID09IDEpIHsKKyAgICAgICAgLy8gSWYgdGhlcmUgYXJlIGFueSBwcm94
aWVzIGluIHRoZSBsaXN0LCB3ZSBjYW5ub3QganVzdCB1c2UgYSBiaW5hcnkgc3dpdGNoIG92ZXIg
dGhlIHN0cnVjdHVyZS4KKyAgICAgICAgLy8gV2UgbmVlZCB0byByZXNvcnQgdG8gYSBjYXNjYWRl
LiBBIGNhc2NhZGUgYWxzbyBoYXBwZW5zIHRvIGJlIG9wdGltYWwgaWYgd2Ugb25seSBoYXZlIGp1
c3QKKyAgICAgICAgLy8gb25lIGNhc2UuCisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
ZmFsbFRocm91Z2g7CisKKyAgICAgICAgLy8gQ2FzY2FkZSB0aHJvdWdoIHRoZSBsaXN0LCBwcmVm
ZXJyaW5nIG5ld2VyIGVudHJpZXMuCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNhc2VzLnNp
emUoKTsgaS0tOykgeworICAgICAgICAgICAgZmFsbFRocm91Z2gubGluaygmaml0KTsKKyAgICAg
ICAgICAgIGNhc2VzW2ldLT5nZW5lcmF0ZVdpdGhHdWFyZChzdGF0ZSwgZmFsbFRocm91Z2gpOwor
ICAgICAgICB9CisgICAgICAgIHN0YXRlLmZhaWxBbmRSZXBhdGNoLmFwcGVuZChmYWxsVGhyb3Vn
aCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaml0LmxvYWQzMigKKyAgICAgICAgICAgIENDYWxs
SGVscGVyczo6QWRkcmVzcyhzdGF0ZS5iYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLAorICAgICAgICAgICAgc3RhdGUuc2NyYXRjaEdQUik7CisgICAgICAgIAorICAgICAgICBW
ZWN0b3I8aW50NjRfdD4gY2FzZVZhbHVlcyhjYXNlcy5zaXplKCkpOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgY2FzZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBjYXNlVmFs
dWVzW2ldID0gYml0d2lzZV9jYXN0PGludDMyX3Q+KGNhc2VzW2ldLT5zdHJ1Y3R1cmUoKSk7Cisg
ICAgICAgIAorICAgICAgICBCaW5hcnlTd2l0Y2ggYmluYXJ5U3dpdGNoKHN0YXRlLnNjcmF0Y2hH
UFIsIGNhc2VWYWx1ZXMsIEJpbmFyeVN3aXRjaDo6SW50MzIpOworICAgICAgICB3aGlsZSAoYmlu
YXJ5U3dpdGNoLmFkdmFuY2Uoaml0KSkKKyAgICAgICAgICAgIGNhc2VzW2JpbmFyeVN3aXRjaC5j
YXNlSW5kZXgoKV0tPmdlbmVyYXRlKHN0YXRlKTsKKyAgICAgICAgc3RhdGUuZmFpbEFuZFJlcGF0
Y2guYXBwZW5kKGJpbmFyeVN3aXRjaC5mYWxsVGhyb3VnaCgpKTsKICAgICB9Ci0gICAgcmV0dXJu
IGZhbHNlOworCisgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5saW5rKCZqaXQpOworCisgICAgLy8g
TWFrZSBzdXJlIHRoYXQgdGhlIGlubGluZSBjYWNoZSBvcHRpbWl6YXRpb24gY29kZSBrbm93cyB0
aGF0IHdlIGFyZSB0YWtpbmcgc2xvdyBwYXRoIGJlY2F1c2UKKyAgICAvLyBvZiBzb21ldGhpbmcg
dGhhdCBpc24ndCBwYXRjaGFibGUuICJzZWVuIiBiZWluZyBmYWxzZSBtZWFucyB0aGF0IHdlIGJ5
cGFzcyBwYXRjaGluZy4gVGhpcyBpcworICAgIC8vIHByZXR0eSBncm9zcyBidXQgaXQgbWVhbnMg
dGhhdCB3ZSBkb24ndCBuZWVkIHRvIGhhdmUgdHdvIHNsb3cgcGF0aCBlbnRyeXBvaW50cyAtIG9u
ZSBmb3IKKyAgICAvLyBwYXRjaGluZyBhbmQgb25lIGZvciBub3JtYWwgc2xvdyBzdHVmZi4KKyAg
ICBqaXQuc3RvcmU4KFRydXN0ZWRJbW0zMihmYWxzZSksICZzdHViSW5mby5zZWVuKTsKKworICAg
IHN0YXRlLmZhaWxBbmRSZXBhdGNoLmxpbmsoJmppdCk7CisgICAgCisgICAgc3RhdGUucmVzdG9y
ZVNjcmF0Y2goKTsKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGZhaWx1cmUgPSBqaXQuanVt
cCgpOworCisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKHZtLCBqaXQsIGNvZGVCbG9jaywgSklU
Q29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICBpZiAobGlua0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0
ZSgpKQorICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7CisKKyAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHIgc3VjY2Vzc0xhYmVsID0KKyAgICAgICAgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25l
KTsKKyAgICAgICAgCisgICAgbGlua0J1ZmZlci5saW5rKHN0YXRlLnN1Y2Nlc3MsIHN1Y2Nlc3NM
YWJlbCk7CisKKyAgICBsaW5rQnVmZmVyLmxpbmsoCisgICAgICAgIGZhaWx1cmUsCisgICAgICAg
IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNo
LmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKKyAgICAKKyAgICBmb3IgKGF1dG8gY2FsbGJhY2sgOiBz
dGF0ZS5jYWxsYmFja3MpCisgICAgICAgIGNhbGxiYWNrKGxpbmtCdWZmZXIpOworICAgIAorICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlID0gRklOQUxJWkVfQ09ERV9GT1IoCisgICAgICAg
IGNvZGVCTG9jaywgbGlua0J1ZmZlciwKKyAgICAgICAgKCIlcyIsIHRvQ1N0cmluZygiR2V0IGFj
Y2VzcyBzdHViIGZvciAiLCAqY29kZUJsb2NrLCAiICIsIHN0dWJJbmZvLmNvZGVPcmlnaW4sICIg
d2l0aCByZXR1cm4gcG9pbnQgIiwgc3VjY2Vzc0xhYmVsLCAiOiAiLCAqdGhpcykpKTsKKworICAg
IGJvb2wgZG9lc0NhbGxzID0gZmFsc2U7CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IGNhc2VzKQor
ICAgICAgICBkb2VzQ2FsbHMgfD0gZW50cnktPmRvZXNDYWxscygpOworICAgIAorICAgIG1fc3R1
YlJvdXRpbmUgPSBjcmVhdGVKSVRTdHViUm91dGluZShjb2RlLCB2bSwgY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwgZG9lc0NhbGxzKTsKKyAgICBtX3dhdGNocG9pbnRzID0gc3RkOjptb3Zl
KHN0YXRlLndhdGNocG9pbnRzKTsKKyAgICByZXR1cm4gY29kZS5jb2RlKCk7CiB9CiAKLWJvb2wg
UG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6dmlzaXRXZWFrKFZNJiB2bSkgY29uc3QKK30gLy8gbmFt
ZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKwor
dm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEFjY2Vzc0Nhc2U6OkFjY2Vzc1R5
cGUgdHlwZSkKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXplKCk7IGktLTspIHsKLSAgICAg
ICAgaWYgKCFhdChpKS52aXNpdFdlYWsodm0pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgQWNjZXNzQ2FzZTo6TG9hZDoKKyAgICAgICAg
b3V0LnByaW50KCJMb2FkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6
OlRyYW5zaXRpb246CisgICAgICAgIG91dC5wcmludCgiVHJhbnNpdGlvbiIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpSZXBsYWNlOgorICAgICAgICBvdXQucHJpbnQo
IlJlcGxhY2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6TWlzczoK
KyAgICAgICAgb3V0LnByaW50KCJNaXNzIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFj
Y2Vzc0Nhc2U6OkdldHRlcjoKKyAgICAgICAgb3V0LnByaW50KCJHZXR0ZXIiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6U2V0dGVyOgorICAgICAgICBvdXQucHJpbnQo
IlNldHRlciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpDdXN0b21H
ZXR0ZXI6CisgICAgICAgIG91dC5wcmludCgiQ3VzdG9tR2V0dGVyIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkN1c3RvbVNldHRlcjoKKyAgICAgICAgb3V0LnByaW50
KCJDdXN0b21TZXR0ZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6
SW5IaXQ6CisgICAgICAgIG91dC5wcmludCgiSW5IaXQiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgQWNjZXNzQ2FzZTo6SW5NaXNzOgorICAgICAgICBvdXQucHJpbnQoIkluTWlzcyIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpBcnJheUxlbmd0aDoKKyAgICAg
ICAgb3V0LnByaW50KCJBcnJheUxlbmd0aCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBB
Y2Nlc3NDYXNlOjpTdHJpbmdMZW5ndGg6CisgICAgICAgIG91dC5wcmludCgiU3RyaW5nTGVuZ3Ro
Iik7CisgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgcmV0dXJuIHRydWU7CisKKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi19IC8vIG5hbWVzcGFjZSBKU0MKK30gLy8g
bmFtZXNwYWNlIFdURgogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgJKHJldmlz
aW9uIDE4OTMyNCkJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3Jw
aGljR2V0QnlJZExpc3QuaDoxODkzMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIFBvbHltb3JwaGljR2V0QnlJZExpc3RfaAorI2RlZmluZSBQb2x5bW9ycGhpY0dldEJ5SWRM
aXN0X2gKKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCisjaW5j
bHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldC5oIgorI2luY2x1ZGUgIk9wY29kZS5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVCbG9j
azsKK3N0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbzsKKworY2xhc3MgR2V0QnlJZEFjY2VzcyB7Citw
dWJsaWM6CisgICAgZW51bSBBY2Nlc3NUeXBlIHsKKyAgICAgICAgSW52YWxpZCwKKyAgICAgICAg
U2ltcGxlSW5saW5lLCAvLyBUaGlzIGlzIHRoZSBwYXRjaGVkIGlubGluZSBhY2Nlc3MuCisgICAg
ICAgIFNpbXBsZVN0dWIsIC8vIFRoaXMgaXMgYSBzdHViLgorICAgICAgICBXYXRjaGVkU3R1YiwK
KyAgICAgICAgR2V0dGVyLAorICAgICAgICBDdXN0b21HZXR0ZXIsCisgICAgICAgIFNpbXBsZU1p
c3MsCisgICAgfTsKKyAgICAKKyAgICBHZXRCeUlkQWNjZXNzKCkKKyAgICAgICAgOiBtX3R5cGUo
SW52YWxpZCkKKyAgICB7CisgICAgfQorICAgIAorICAgIEdldEJ5SWRBY2Nlc3MoCisgICAgICAg
IFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGlu
ZT4sIFN0cnVjdHVyZSosCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCkpOworICAgIAorICAgIH5HZXRCeUlkQWNj
ZXNzKCk7CisgICAgCisgICAgc3RhdGljIEdldEJ5SWRBY2Nlc3MgZnJvbVN0cnVjdHVyZVN0dWJJ
bmZvKFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAgCisgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsg
cmV0dXJuIG1fdHlwZSAhPSBJbnZhbGlkOyB9CisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7
IHJldHVybiAhaXNTZXQoKTsgfQorICAgIAorICAgIEFjY2Vzc1R5cGUgdHlwZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdHlwZTsgfQorICAgIAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3Qg
eyByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7IH0KKyAgICAKKyAgICBjb25zdCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRp
b25TZXQ7IH0KKyAgICAKKyAgICBKSVRTdHViUm91dGluZSogc3R1YlJvdXRpbmUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGlzU2V0KCkpOworICAgICAgICByZXR1cm4gbV9zdHViUm91
dGluZS5nZXQoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBkb2VzQ2FsbHMoKSBjb25zdCB7IHJl
dHVybiB0eXBlKCkgPT0gR2V0dGVyIHx8IHR5cGUoKSA9PSBDdXN0b21HZXR0ZXI7IH0KKyAgICAK
KyAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIGZyaWVuZCBj
bGFzcyBDb2RlQmxvY2s7CisgICAgCisgICAgQWNjZXNzVHlwZSBtX3R5cGU7CisgICAgV3JpdGVC
YXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQgbV9jb25kaXRpb25TZXQ7CisgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBtX3N0dWJS
b3V0aW5lOworfTsKKworY2xhc3MgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCB7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgLy8gRWl0aGVyIGNyZWF0ZXMgYSBuZXcg
cG9seW1vcnBoaWMgZ2V0IGxpc3QsIG9yIHJldHVybnMgdGhlIG9uZSB0aGF0IGlzIGFscmVhZHkg
aW4KKyAgICAvLyBwbGFjZS4KKyAgICBzdGF0aWMgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogZnJv
bShTdHJ1Y3R1cmVTdHViSW5mbyYpOworICAgIAorICAgIH5Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0
KCk7CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN1cnJlbnRTbG93UGF0aFRhcmdl
dChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pIGNvbnN0OworICAgIAorICAgIHZvaWQgYWRk
QWNjZXNzKGNvbnN0IEdldEJ5SWRBY2Nlc3MmKTsKKyAgICAKKyAgICBib29sIGlzRW1wdHkoKSBj
b25zdCB7IHJldHVybiBtX2xpc3QuaXNFbXB0eSgpOyB9CisgICAgdW5zaWduZWQgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbGlzdC5zaXplKCk7IH0KKyAgICBib29sIGlzRnVsbCgpIGNvbnN0Owor
ICAgIGJvb2wgaXNBbG1vc3RGdWxsKCkgY29uc3Q7IC8vIFRydWUgaWYgYWRkaW5nIGFuIGVsZW1l
bnQgd291bGQgbWFrZSBpc0Z1bGwoKSB0cnVlLgorICAgIGNvbnN0IEdldEJ5SWRBY2Nlc3MmIGF0
KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdFtpXTsgfQorICAgIGNvbnN0IEdldEJ5
SWRBY2Nlc3MmIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9saXN0W2ld
OyB9CisgICAgCisgICAgYm9vbCBkaWRTZWxmUGF0Y2hpbmcoKSBjb25zdDsgLy8gQXJlIGFueSBv
ZiB0aGUgYWNjZXNzZXMgU2ltcGxlSW5saW5lPworICAgIAorICAgIGJvb2wgdmlzaXRXZWFrKFZN
JikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKKyAgICAK
KyAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAgCisg
ICAgVmVjdG9yPEdldEJ5SWRBY2Nlc3MsIDI+IG1fbGlzdDsKK307CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKworI2VuZGlmIC8vIFBvbHltb3JwaGljR2V0
QnlJZExpc3RfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNBY2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAkod29ya2luZyBjb3B5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIz
LDggKzIzLDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgUG9seW1vcnBoaWNH
ZXRCeUlkTGlzdF9oCi0jZGVmaW5lIFBvbHltb3JwaGljR2V0QnlJZExpc3RfaAorI2lmbmRlZiBQ
b2x5bW9ycGhpY0FjY2Vzc19oCisjZGVmaW5lIFBvbHltb3JwaGljQWNjZXNzX2gKIAogI2lmIEVO
QUJMRShKSVQpCiAKQEAgLTM4LDk2ICszOCwyNjcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFz
cyBDb2RlQmxvY2s7CitjbGFzcyBQb2x5bW9ycGhpY0FjY2VzczsKK2NsYXNzIFdhdGNocG9pbnRz
T25TdHJ1Y3R1cmVTdHViSW5mbzsKIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbzsKIAotY2xhc3Mg
R2V0QnlJZEFjY2VzcyB7CitzdHJ1Y3QgQWNjZXNzR2VuZXJhdGlvblN0YXRlOworCitjbGFzcyBB
Y2Nlc3NDYXNlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBY2Nlc3NDYXNlKTsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBlbnVtIEFjY2Vzc1R5cGUgewot
ICAgICAgICBJbnZhbGlkLAotICAgICAgICBTaW1wbGVJbmxpbmUsIC8vIFRoaXMgaXMgdGhlIHBh
dGNoZWQgaW5saW5lIGFjY2Vzcy4KLSAgICAgICAgU2ltcGxlU3R1YiwgLy8gVGhpcyBpcyBhIHN0
dWIuCi0gICAgICAgIFdhdGNoZWRTdHViLAorICAgICAgICBMb2FkLAorICAgICAgICBUcmFuc2l0
aW9uLAorICAgICAgICBSZXBsYWNlLAorICAgICAgICBNaXNzLAogICAgICAgICBHZXR0ZXIsCisg
ICAgICAgIFNldHRlciwKICAgICAgICAgQ3VzdG9tR2V0dGVyLAotICAgICAgICBTaW1wbGVNaXNz
LAorICAgICAgICBDdXN0b21TZXR0ZXIsCisgICAgICAgIEluSGl0LAorICAgICAgICBJbk1pc3Ms
CisgICAgICAgIEFycmF5TGVuZ3RoLAorICAgICAgICBTdHJpbmdMZW5ndGgKICAgICB9OwotICAg
IAotICAgIEdldEJ5SWRBY2Nlc3MoKQotICAgICAgICA6IG1fdHlwZShJbnZhbGlkKQorCisgICAg
c3RhdGljIGJvb2wgaXNHZXQoQWNjZXNzVHlwZSB0eXBlKQogICAgIHsKKyAgICAgICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgICAgIGNhc2UgVHJhbnNpdGlvbjoKKyAgICAgICAgY2FzZSBSZXBsYWNl
OgorICAgICAgICBjYXNlIFNldHRlcjoKKyAgICAgICAgY2FzZSBDdXN0b21TZXR0ZXI6CisgICAg
ICAgIGNhc2UgSW5IaXQ6CisgICAgICAgIGNhc2UgSW5NaXNzOgorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBjYXNlIExvYWQ6CisgICAgICAgIGNhc2UgTWlzczoKKyAgICAgICAg
Y2FzZSBHZXR0ZXI6CisgICAgICAgIGNhc2UgQ3VzdG9tR2V0dGVyOgorICAgICAgICBjYXNlIEFy
cmF5TGVuZ3RoOgorICAgICAgICBjYXNlIFN0cmluZ0xlbmd0aDoKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CiAgICAgfQotICAgIAotICAgIEdldEJ5SWRBY2Nlc3MoCi0gICAg
ICAgIFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgUGFzc1JlZlB0cjxKSVRTdHViUm91
dGluZT4sIFN0cnVjdHVyZSosCisKKyAgICBzdGF0aWMgYm9vbCBpc1B1dChBY2Nlc3NUeXBlIHR5
cGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBMb2FkOgor
ICAgICAgICBjYXNlIE1pc3M6CisgICAgICAgIGNhc2UgR2V0dGVyOgorICAgICAgICBjYXNlIEN1
c3RvbUdldHRlcjoKKyAgICAgICAgY2FzZSBJbkhpdDoKKyAgICAgICAgY2FzZSBJbk1pc3M6Cisg
ICAgICAgIGNhc2UgQXJyYXlMZW5ndGg6CisgICAgICAgIGNhc2UgU3RyaW5nTGVuZ3RoOgorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIFRyYW5zaXRpb246CisgICAgICAg
IGNhc2UgUmVwbGFjZToKKyAgICAgICAgY2FzZSBTZXR0ZXI6CisgICAgICAgIGNhc2UgQ3VzdG9t
U2V0dGVyOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBzdGF0aWMgYm9vbCBpc0luKEFjY2Vzc1R5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRj
aCAodHlwZSkgeworICAgICAgICBjYXNlIExvYWQ6CisgICAgICAgIGNhc2UgTWlzczoKKyAgICAg
ICAgY2FzZSBHZXR0ZXI6CisgICAgICAgIGNhc2UgQ3VzdG9tR2V0dGVyOgorICAgICAgICBjYXNl
IFRyYW5zaXRpb246CisgICAgICAgIGNhc2UgUmVwbGFjZToKKyAgICAgICAgY2FzZSBTZXR0ZXI6
CisgICAgICAgIGNhc2UgQ3VzdG9tU2V0dGVyOgorICAgICAgICBjYXNlIEFycmF5TGVuZ3RoOgor
ICAgICAgICBjYXNlIFN0cmluZ0xlbmd0aDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgY2FzZSBJbkhpdDoKKyAgICAgICAgY2FzZSBJbk1pc3M6CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8
QWNjZXNzQ2FzZT4gZ2V0KAorICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUs
IFByb3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmUqLAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpLAorICAgICAgICBi
b29sIHZpYVByb3h5ID0gZmFsc2UsCisgICAgICAgIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxT
ZXQgPSBudWxscHRyLAorICAgICAgICBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYyA9IG51bGxw
dHIpOworCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXBsYWNlKAor
ICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQpOworCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNl
PiB0cmFuc2l0aW9uKAorICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogb2xk
U3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
LAogICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCgpKTsKKworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNz
Q2FzZT4gc2V0dGVyKAorICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUsIFN0
cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0LAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYsIFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jKTsKKworICAgIHN0YXRp
YyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gaW4oCisgICAgICAgIFZNJiwgSlNDZWxsKiBv
d25lciwgQWNjZXNzVHlwZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCisgICAgICAgIGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCkp
OworCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBnZXRMZW5ndGgoVk0m
LCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlKTsKICAgICAKLSAgICB+R2V0QnlJZEFjY2Vzcygp
OwotICAgIAotICAgIHN0YXRpYyBHZXRCeUlkQWNjZXNzIGZyb21TdHJ1Y3R1cmVTdHViSW5mbyhT
dHJ1Y3R1cmVTdHViSW5mbyYpOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2Fz
ZT4gZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFZNJiwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlU3R1
YkluZm8mKTsKKworICAgIH5BY2Nlc3NDYXNlKCk7CiAgICAgCi0gICAgYm9vbCBpc1NldCgpIGNv
bnN0IHsgcmV0dXJuIG1fdHlwZSAhPSBJbnZhbGlkOyB9Ci0gICAgYm9vbCBvcGVyYXRvciEoKSBj
b25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQorICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNl
PiBjbG9uZSgpIGNvbnN0OwogICAgIAogICAgIEFjY2Vzc1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdHlwZTsgfQorICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJu
IG1fb2Zmc2V0OyB9CisgICAgYm9vbCB2aWFQcm94eSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURh
dGEgPyBtX3JhcmVEYXRhLT52aWFQcm94eSA6IGZhbHNlOyB9CiAgICAgCi0gICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZS5nZXQoKTsgfQotICAgIAot
ICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBjb25z
dCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQotICAgIAotICAgIEpJVFN0dWJSb3V0aW5lKiBz
dHViUm91dGluZSgpIGNvbnN0CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdAogICAg
IHsKLSAgICAgICAgQVNTRVJUKGlzU2V0KCkpOwotICAgICAgICByZXR1cm4gbV9zdHViUm91dGlu
ZS5nZXQoKTsKKyAgICAgICAgaWYgKG1fdHlwZSA9PSBUcmFuc2l0aW9uKQorICAgICAgICAgICAg
cmV0dXJuIG1fc3RydWN0dXJlLT5wcmV2aW91c0lEKCk7CisgICAgICAgIHJldHVybiBtX3N0cnVj
dHVyZS5nZXQoKTsKKyAgICB9CisgICAgYm9vbCBndWFyZGVkQnlTdHJ1Y3R1cmVDaGVjaygpIGNv
bnN0OworCisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKG1fdHlwZSA9PSBUcmFuc2l0aW9uKTsKKyAgICAgICAgcmV0dXJuIG1fc3RydWN0
dXJlLmdldCgpOwogICAgIH0KICAgICAKLSAgICBib29sIGRvZXNDYWxscygpIGNvbnN0IHsgcmV0
dXJuIHR5cGUoKSA9PSBHZXR0ZXIgfHwgdHlwZSgpID09IEN1c3RvbUdldHRlcjsgfQorICAgIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y29uZGl0aW9uU2V0OyB9CisKKyAgICBXYXRjaHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0KCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+YWRkaXRp
b25hbFNldC5nZXQoKSA6IG51bGxwdHI7CisgICAgfQogICAgIAotICAgIGJvb2wgdmlzaXRXZWFr
KFZNJikgY29uc3Q7CisgICAgYm9vbCBkb2VzQ2FsbHMoKSBjb25zdAorICAgIHsKKyAgICAgICAg
c3dpdGNoICh0eXBlKCkpIHsKKyAgICAgICAgY2FzZSBHZXR0ZXI6CisgICAgICAgIGNhc2UgU2V0
dGVyOgorICAgICAgICBjYXNlIEN1c3RvbUdldHRlcjoKKyAgICAgICAgY2FzZSBDdXN0b21TZXR0
ZXI6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIENhbGxMaW5rSW5mbyog
Y2FsbExpbmtJbmZvKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghbV9yYXJlRGF0YSkKKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gbV9yYXJlRGF0YS0+Y2Fs
bExpbmtJbmZvLmdldCgpOworICAgIH0KIAorICAgIC8vIElmIHRoaXMgbWV0aG9kIHJldHVybnMg
dHJ1ZSwgdGhlbiBpdCdzIGEgZ29vZCBpZGVhIHRvIHJlbW92ZSAnb3RoZXInIGZyb20gdGhlIGFj
Y2VzcyBvbmNlICd0aGlzJworICAgIC8vIGlzIGFkZGVkLiBUaGlzIG1ldGhvZCBhc3N1bWVzIHRo
YXQgaW4gY2FzZSBvZiBjb250cmFkaWN0aW9ucywgJ3RoaXMnIHJlcHJlc2VudHMgYSBuZXdlciwg
YW5kIHNvCisgICAgLy8gbW9yZSB1c2VmdWwsIHRydXRoLiBUaGlzIG1ldGhvZCBjYW4gYmUgY29u
c2VydmF0aXZlOyBpdCB3aWxsIHJldHVybiBmYWxzZSB3aGVuIGl0IGRvdWJ0LgorICAgIGJvb2wg
Y2FuUmVwbGFjZShjb25zdCBBY2Nlc3NDYXNlJiBvdGhlcik7CisKKyAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBD
b2RlQmxvY2s7CisgICAgZnJpZW5kIGNsYXNzIFBvbHltb3JwaGljQWNjZXNzOworCisgICAgQWNj
ZXNzQ2FzZSgpOworCisgICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25zdDsKKworICAgIC8vIEZh
bGwgdGhyb3VnaCBvbiBzdWNjZXNzLiBUd28ga2luZHMgb2YgZmFpbHVyZXMgYXJlIHN1cHBvcnRl
ZDogZmFsbC10aHJvdWdoLCB3aGljaCBtZWFucyB0aGF0IHdlCisgICAgLy8gc2hvdWxkIHRyeSBh
IGRpZmZlcmVudCBjYXNlOyBhbmQgZmFpbHVyZSwgd2hpY2ggbWVhbnMgdGhhdCB0aGlzIHdhcyB0
aGUgcmlnaHQgY2FzZSBidXQgaXQgbmVlZHMKKyAgICAvLyBoZWxwIGZyb20gdGhlIHNsb3cgcGF0
aC4KKyAgICB2b2lkIGdlbmVyYXRlV2l0aEd1YXJkKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYsIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFsbFRocm91Z2gpOworCisgICAgLy8gRmFsbCB0aHJv
dWdoIG9uIHN1Y2Nlc3MsIGFkZCBhIGp1bXAgdG8gdGhlIGZhaWx1cmUgbGlzdCBvbiBmYWlsdXJl
LgorICAgIHZvaWQgZ2VuZXJhdGUoQWNjZXNzR2VuZXJhdGlvblN0YXRlJik7CiAgICAgCiAgICAg
QWNjZXNzVHlwZSBtX3R5cGU7CisgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7CisKKyAgICAv
LyBVc3VhbGx5IHRoaXMgaXMgdGhlIHN0cnVjdHVyZSB0aGF0IHdlIGV4cGVjdCB0aGUgYmFzZSBv
YmplY3QgdG8gaGF2ZS4gQnV0LCB0aGlzIGlzIHRoZSAqbmV3KgorICAgIC8vIHN0cnVjdHVyZSBm
b3IgYSB0cmFuc2l0aW9uIGFuZCB3ZSByZWx5IG9uIHRoZSBmYWN0IHRoYXQgaXQgaGFzIGEgc3Ry
b25nIHJlZmVyZW5jZSB0byB0aGUgb2xkCisgICAgLy8gc3RydWN0dXJlLiBGb3IgcHJveGllcywg
dGhpcyBpcyB0aGUgc3RydWN0dXJlIG9mIHRoZSBvYmplY3QgYmVoaW5kIHRoZSBwcm94eS4KICAg
ICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cnVjdHVyZTsKKwogICAgIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OwotICAgIFJlZlB0cjxKSVRTdHViUm91dGlu
ZT4gbV9zdHViUm91dGluZTsKKworICAgIGNsYXNzIFJhcmVEYXRhIHsKKyAgICAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CisgICAgcHVibGljOgorICAgICAgICBib29sIHZpYVByb3h5Owor
ICAgICAgICBSZWZQdHI8V2F0Y2hwb2ludFNldD4gYWRkaXRpb25hbFNldDsKKyAgICAgICAgc3Rk
Ojp1bmlxdWVfcHRyPENhbGxMaW5rSW5mbz4gY2FsbExpbmtJbmZvOworICAgICAgICB1bmlvbiB7
CisgICAgICAgICAgICBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYyBnZXR0ZXI7CisgICAgICAg
ICAgICBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyBzZXR0ZXI7CisgICAgICAgICAgICB2
b2lkKiBvcGFxdWU7CisgICAgICAgIH0gY3VzdG9tQWNjZXNzb3I7CisgICAgfTsKKworICAgIHN0
ZDo6dW5pcXVlX3B0cjxSYXJlRGF0YT4gbV9yYXJlRGF0YTsKIH07CiAKLWNsYXNzIFBvbHltb3Jw
aGljR2V0QnlJZExpc3QgeworY2xhc3MgUG9seW1vcnBoaWNBY2Nlc3MgeworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKFBvbHltb3JwaGljQWNjZXNzKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKIHB1YmxpYzoKLSAgICAvLyBFaXRoZXIgY3JlYXRlcyBhIG5ldyBwb2x5bW9ycGhpYyBn
ZXQgbGlzdCwgb3IgcmV0dXJucyB0aGUgb25lIHRoYXQgaXMgYWxyZWFkeSBpbgotICAgIC8vIHBs
YWNlLgotICAgIHN0YXRpYyBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBmcm9tKFN0cnVjdHVyZVN0
dWJJbmZvJik7Ci0gICAgCi0gICAgflBvbHltb3JwaGljR2V0QnlJZExpc3QoKTsKLSAgICAKLSAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY3VycmVudFNsb3dQYXRoVGFyZ2V0KFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbykgY29uc3Q7Ci0gICAgCi0gICAgdm9pZCBhZGRBY2Nlc3MoY29uc3Qg
R2V0QnlJZEFjY2VzcyYpOworICAgIFBvbHltb3JwaGljQWNjZXNzKCk7CisgICAgflBvbHltb3Jw
aGljQWNjZXNzKCk7CisKKyAgICAvLyBUaGlzIG1heSByZXR1cm4gbnVsbCwgaW4gd2hpY2ggY2Fz
ZSB0aGUgb2xkIHN0dWIgcm91dGluZSBpcyBsZWZ0IGludGFjdC4gVGhpcyBtZXRob2Qgd2lsbCBk
byB5b3UKKyAgICAvLyBhIHNvbGlkIGFuZCBudWxsLWNoZWNrIHRoZSBBY2Nlc3NDYXNlLCBzbyB0
aGF0IHlvdSBjYW4gZG8gdGhpbmdzIGxpa2U6CisgICAgLy8KKyAgICAvLyBjb2RlUHRyID0gYWNj
ZXNzLT5yZWdlbmVyYXRlV2l0aENhc2UoLi4uLCBBY2Nlc3NDYXNlOjpnZXQoLi4uKSkKKyAgICAv
LworICAgIC8vIElmIEFjY2Vzc0Nhc2U6OmdldCgpIHJldHVybnMgbnVsbHB0ciwgdGhlIGFib3Zl
IGNhbGwgd2lsbCBzaW1wbHkgcmV0dXJuIG51bGwuCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IHJlZ2VuZXJhdGVXaXRoQ2FzZXMoCisgICAgICAgIFZNJiwgQ29kZUJsb2NrKiwgU3RydWN0dXJl
U3R1YkluZm8mLCBjb25zdCBJZGVudGlmaWVyJiwgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBY2Nl
c3NDYXNlPj4pOworCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJlZ2VuZXJhdGVXaXRoQ2Fz
ZSgKKyAgICAgICAgVk0mLCBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIGNvbnN0IElk
ZW50aWZpZXImLCBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4pOwogICAgIAogICAgIGJvb2wg
aXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5pc0VtcHR5KCk7IH0KICAgICB1bnNpZ25l
ZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9saXN0LnNpemUoKTsgfQotICAgIGJvb2wgaXNGdWxs
KCkgY29uc3Q7Ci0gICAgYm9vbCBpc0FsbW9zdEZ1bGwoKSBjb25zdDsgLy8gVHJ1ZSBpZiBhZGRp
bmcgYW4gZWxlbWVudCB3b3VsZCBtYWtlIGlzRnVsbCgpIHRydWUuCi0gICAgY29uc3QgR2V0QnlJ
ZEFjY2VzcyYgYXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9saXN0W2ldOyB9Ci0gICAg
Y29uc3QgR2V0QnlJZEFjY2VzcyYgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVy
biBtX2xpc3RbaV07IH0KLSAgICAKLSAgICBib29sIGRpZFNlbGZQYXRjaGluZygpIGNvbnN0OyAv
LyBBcmUgYW55IG9mIHRoZSBhY2Nlc3NlcyBTaW1wbGVJbmxpbmU/Ci0gICAgCisgICAgY29uc3Qg
QWNjZXNzQ2FzZSYgYXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gKm1fbGlzdFtpXTsgfQor
ICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QgeyByZXR1
cm4gKm1fbGlzdFtpXTsgfQorCisgICAgLy8gSWYgdGhpcyByZXR1cm5zIGZhbHNlIHRoZW4gd2Ug
YXJlIHJlcXVlc3RpbmcgYSByZXNldCBvZiB0aGUgb3duaW5nIFN0cnVjdHVyZVN0dWJJbmZvLgog
ICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgY29uc3Q7CiAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3Q7CisKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEFjY2Vzc0Nhc2U7
CiAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKKyAgICBmcmllbmQgc3RydWN0IEFjY2Vzc0dl
bmVyYXRpb25TdGF0ZTsKICAgICAKLSAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KFN0cnVjdHVy
ZVN0dWJJbmZvJik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJlZ2VuZXJhdGUoCisgICAg
ICAgIFZNJiwgQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBjb25zdCBJZGVudGlmaWVy
JiwKKyAgICAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPj4mIGNhc2VzKTsK
ICAgICAKLSAgICBWZWN0b3I8R2V0QnlJZEFjY2VzcywgMj4gbV9saXN0OworICAgIFZlY3Rvcjxz
dGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4sIDI+IG1fbGlzdDsKKyAgICBSZWZQdHI8SklUU3R1
YlJvdXRpbmU+IG1fc3R1YlJvdXRpbmU7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdhdGNocG9pbnRz
T25TdHJ1Y3R1cmVTdHViSW5mbz4gbV93YXRjaHBvaW50czsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwogCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFt
JiwgSlNDOjpBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBlKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisK
ICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCi0jZW5kaWYgLy8gUG9seW1vcnBoaWNHZXRCeUlkTGlz
dF9oCisjZW5kaWYgLy8gUG9seW1vcnBoaWNBY2Nlc3NfaAogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3Qu
Y3BwCShyZXZpc2lvbiAxODk0OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTU1ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBvbHltb3JwaGljR2V0QnlJZExpc3QuaCIK
LQotI2lmIEVOQUJMRShKSVQpCi0KLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRlICJI
ZWFwLmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJ
bmZvLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1HZXRCeUlkQWNjZXNzOjpHZXRCeUlkQWNjZXNz
KAotICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBQYXNzUmVmUHRy
PEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSwKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkKLSAgICA6IG1f
dHlwZSh0eXBlKQotICAgICwgbV9zdHJ1Y3R1cmUodm0sIG93bmVyLCBzdHJ1Y3R1cmUpCi0gICAg
LCBtX2NvbmRpdGlvblNldChjb25kaXRpb25TZXQpCi0gICAgLCBtX3N0dWJSb3V0aW5lKHN0dWJS
b3V0aW5lKQotewotfQotCi1HZXRCeUlkQWNjZXNzOjp+R2V0QnlJZEFjY2VzcygpCi17Ci19Ci0K
LUdldEJ5SWRBY2Nlc3MgR2V0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgaW5p
dGlhbFNsb3dQYXRoID0KLSAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVs
QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSk7Ci0gICAgCi0gICAg
R2V0QnlJZEFjY2VzcyByZXN1bHQ7Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8u
YWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYpOwotICAgIAotICAgIHJlc3VsdC5t
X3R5cGUgPSBTaW1wbGVJbmxpbmU7Ci0gICAgcmVzdWx0Lm1fc3RydWN0dXJlLmNvcHlGcm9tKHN0
dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZSk7Ci0gICAgcmVzdWx0Lm1f
c3R1YlJvdXRpbmUgPSBKSVRTdHViUm91dGluZTo6Y3JlYXRlU2VsZk1hbmFnZWRSb3V0aW5lKGlu
aXRpYWxTbG93UGF0aCk7Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBHZXRC
eUlkQWNjZXNzOjp2aXNpdFdlYWsoVk0mIHZtKSBjb25zdAotewotICAgIGlmIChtX3N0cnVjdHVy
ZSAmJiAhSGVhcDo6aXNNYXJrZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaWYgKCFtX2NvbmRpdGlvblNldC5hcmVTdGlsbExpdmUoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGlmICghbV9zdHViUm91dGluZS0+dmlzaXRXZWFrKHZtKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1Qb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0OjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbykKLXsKLSAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpCi0g
ICAgICAgIHJldHVybjsKLSAgICAKLSAgICBtX2xpc3QuYXBwZW5kKEdldEJ5SWRBY2Nlc3M6OmZy
b21TdHJ1Y3R1cmVTdHViSW5mbyhzdHViSW5mbykpOwotfQotCi1Qb2x5bW9ycGhpY0dldEJ5SWRM
aXN0KiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojpmcm9tKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbykKLXsKLSAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lk
X2xpc3QpCi0gICAgICAgIHJldHVybiBzdHViSW5mby51LmdldEJ5SWRMaXN0Lmxpc3Q7Ci0gICAg
Ci0gICAgQVNTRVJUKAotICAgICAgICBzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRf
YnlfaWRfc2VsZgotICAgICAgICB8fCBzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc191bnNl
dCk7Ci0gICAgCi0gICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogcmVzdWx0ID0gbmV3IFBvbHlt
b3JwaGljR2V0QnlJZExpc3Qoc3R1YkluZm8pOwotICAgIAotICAgIHN0dWJJbmZvLmluaXRHZXRC
eUlkTGlzdChyZXN1bHQpOwotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVBvbHltb3Jw
aGljR2V0QnlJZExpc3Q6On5Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0KCkgeyB9Ci0KLU1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpjdXJyZW50U2xvd1BhdGhUYXJn
ZXQoCi0gICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKSBjb25zdAotewotICAgIGlmIChp
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFi
ZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKLSAgICByZXR1
cm4gbV9saXN0Lmxhc3QoKS5zdHViUm91dGluZSgpLT5jb2RlKCkuY29kZSgpOwotfQotCi12b2lk
IFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmFkZEFjY2Vzcyhjb25zdCBHZXRCeUlkQWNjZXNzJiBh
Y2Nlc3MpCi17Ci0gICAgQVNTRVJUKCFpc0Z1bGwoKSk7Ci0gICAgLy8gTWFrZSBzdXJlIHRoYXQg
dGhlIHJlc2l6aW5nIG9wdGltaXplcyBmb3Igc3BhY2UsIG5vdCB0aW1lLgotICAgIG1fbGlzdC5y
ZXNpemVUb0ZpdChtX2xpc3Quc2l6ZSgpICsgMSk7Ci0gICAgbV9saXN0Lmxhc3QoKSA9IGFjY2Vz
czsKLX0KLQotYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojppc0Z1bGwoKSBjb25zdAotewot
ICAgIEFTU0VSVChzaXplKCkgPD0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKTsKLSAgICBy
ZXR1cm4gc2l6ZSgpID09IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRTsKLX0KLQotYm9vbCBQ
b2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojppc0FsbW9zdEZ1bGwoKSBjb25zdAotewotICAgIEFTU0VS
VChzaXplKCkgPD0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKTsKLSAgICByZXR1cm4gc2l6
ZSgpID49IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDE7Ci19Ci0KLWJvb2wgUG9seW1v
cnBoaWNHZXRCeUlkTGlzdDo6ZGlkU2VsZlBhdGNoaW5nKCkgY29uc3QKLXsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSBzaXplKCk7IGktLTspIHsKLSAgICAgICAgaWYgKGF0KGkpLnR5cGUoKSA9PSBH
ZXRCeUlkQWNjZXNzOjpTaW1wbGVJbmxpbmUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6
OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0Ci17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gc2l6ZSgp
OyBpLS07KSB7Ci0gICAgICAgIGlmICghYXQoaSkudmlzaXRXZWFrKHZtKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIEpTQwotCi0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQotCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgJ
KHJldmlzaW9uIDE4OTQ5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY0dldEJ5SWRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTMzICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRl
ZiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0X2gKLSNkZWZpbmUgUG9seW1vcnBoaWNHZXRCeUlkTGlz
dF9oCi0KLSNpZiBFTkFCTEUoSklUKQotCi0jaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgotI2luY2x1
ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCi0jaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQuaCIKLSNpbmNsdWRlICJPcGNvZGUuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKLSNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBDb2RlQmxvY2s7
Ci1zdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm87Ci0KLWNsYXNzIEdldEJ5SWRBY2Nlc3MgewotcHVi
bGljOgotICAgIGVudW0gQWNjZXNzVHlwZSB7Ci0gICAgICAgIEludmFsaWQsCi0gICAgICAgIFNp
bXBsZUlubGluZSwgLy8gVGhpcyBpcyB0aGUgcGF0Y2hlZCBpbmxpbmUgYWNjZXNzLgotICAgICAg
ICBTaW1wbGVTdHViLCAvLyBUaGlzIGlzIGEgc3R1Yi4KLSAgICAgICAgV2F0Y2hlZFN0dWIsCi0g
ICAgICAgIEdldHRlciwKLSAgICAgICAgQ3VzdG9tR2V0dGVyLAotICAgICAgICBTaW1wbGVNaXNz
LAotICAgIH07Ci0gICAgCi0gICAgR2V0QnlJZEFjY2VzcygpCi0gICAgICAgIDogbV90eXBlKElu
dmFsaWQpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBHZXRCeUlkQWNjZXNzKAotICAgICAgICBW
TSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+
LCBTdHJ1Y3R1cmUqLAotICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYg
PSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpKTsKLSAgICAKLSAgICB+R2V0QnlJZEFjY2Vz
cygpOwotICAgIAotICAgIHN0YXRpYyBHZXRCeUlkQWNjZXNzIGZyb21TdHJ1Y3R1cmVTdHViSW5m
byhTdHJ1Y3R1cmVTdHViSW5mbyYpOwotICAgIAotICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJl
dHVybiBtX3R5cGUgIT0gSW52YWxpZDsgfQotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyBy
ZXR1cm4gIWlzU2V0KCk7IH0KLSAgICAKLSAgICBBY2Nlc3NUeXBlIHR5cGUoKSBjb25zdCB7IHJl
dHVybiBtX3R5cGU7IH0KLSAgICAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RydWN0dXJlLmdldCgpOyB9Ci0gICAgCi0gICAgY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9u
U2V0OyB9Ci0gICAgCi0gICAgSklUU3R1YlJvdXRpbmUqIHN0dWJSb3V0aW5lKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVChpc1NldCgpKTsKLSAgICAgICAgcmV0dXJuIG1fc3R1YlJvdXRp
bmUuZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgZG9lc0NhbGxzKCkgY29uc3QgeyByZXR1
cm4gdHlwZSgpID09IEdldHRlciB8fCB0eXBlKCkgPT0gQ3VzdG9tR2V0dGVyOyB9Ci0gICAgCi0g
ICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xh
c3MgQ29kZUJsb2NrOwotICAgIAotICAgIEFjY2Vzc1R5cGUgbV90eXBlOwotICAgIFdyaXRlQmFy
cmllcjxTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOwotICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0IG1fY29uZGl0aW9uU2V0OwotICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gbV9zdHViUm91
dGluZTsKLX07Ci0KLWNsYXNzIFBvbHltb3JwaGljR2V0QnlJZExpc3QgewotICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIC8vIEVpdGhlciBjcmVhdGVzIGEgbmV3IHBv
bHltb3JwaGljIGdldCBsaXN0LCBvciByZXR1cm5zIHRoZSBvbmUgdGhhdCBpcyBhbHJlYWR5IGlu
Ci0gICAgLy8gcGxhY2UuCi0gICAgc3RhdGljIFBvbHltb3JwaGljR2V0QnlJZExpc3QqIGZyb20o
U3RydWN0dXJlU3R1YkluZm8mKTsKLSAgICAKLSAgICB+UG9seW1vcnBoaWNHZXRCeUlkTGlzdCgp
OwotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdXJyZW50U2xvd1BhdGhUYXJnZXQo
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKSBjb25zdDsKLSAgICAKLSAgICB2b2lkIGFkZEFj
Y2Vzcyhjb25zdCBHZXRCeUlkQWNjZXNzJik7Ci0gICAgCi0gICAgYm9vbCBpc0VtcHR5KCkgY29u
c3QgeyByZXR1cm4gbV9saXN0LmlzRW1wdHkoKTsgfQotICAgIHVuc2lnbmVkIHNpemUoKSBjb25z
dCB7IHJldHVybiBtX2xpc3Quc2l6ZSgpOyB9Ci0gICAgYm9vbCBpc0Z1bGwoKSBjb25zdDsKLSAg
ICBib29sIGlzQWxtb3N0RnVsbCgpIGNvbnN0OyAvLyBUcnVlIGlmIGFkZGluZyBhbiBlbGVtZW50
IHdvdWxkIG1ha2UgaXNGdWxsKCkgdHJ1ZS4KLSAgICBjb25zdCBHZXRCeUlkQWNjZXNzJiBhdCh1
bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2xpc3RbaV07IH0KLSAgICBjb25zdCBHZXRCeUlk
QWNjZXNzJiBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdFtpXTsg
fQotICAgIAotICAgIGJvb2wgZGlkU2VsZlBhdGNoaW5nKCkgY29uc3Q7IC8vIEFyZSBhbnkgb2Yg
dGhlIGFjY2Vzc2VzIFNpbXBsZUlubGluZT8KLSAgICAKLSAgICBib29sIHZpc2l0V2VhayhWTSYp
IGNvbnN0OwotCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7Ci0gICAgCi0g
ICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyYpOwotICAgIAotICAg
IFZlY3RvcjxHZXRCeUlkQWNjZXNzLCAyPiBtX2xpc3Q7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBK
U0MKLQotI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0KLSNlbmRpZiAvLyBQb2x5bW9ycGhpY0dldEJ5
SWRMaXN0X2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3Jw
aGljUHV0QnlJZExpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcAkocmV2aXNpb24gMTg5NDkzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDE1NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEyLCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgiCi0KLSNpZiBFTkFCTEUoSklUKQot
Ci0jaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLVB1
dEJ5SWRBY2Nlc3MgUHV0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgaW5pdGlh
bFNsb3dQYXRoID0KLSAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRP
ZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSk7Ci0gICAgCi0gICAgUHV0
QnlJZEFjY2VzcyByZXN1bHQ7Ci0gICAgCi0gICAgc3dpdGNoIChzdHViSW5mby5hY2Nlc3NUeXBl
KSB7Ci0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2U6Ci0gICAgICAgIHJlc3VsdC5t
X3R5cGUgPSBSZXBsYWNlOwotICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuY29weUZyb20o
c3R1YkluZm8udS5wdXRCeUlkUmVwbGFjZS5iYXNlT2JqZWN0U3RydWN0dXJlKTsKLSAgICAgICAg
cmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBKSVRTdHViUm91dGluZTo6Y3JlYXRlU2VsZk1hbmFnZWRS
b3V0aW5lKGluaXRpYWxTbG93UGF0aCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAKLSAgICBj
YXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6Ci0gICAgY2FzZSBhY2Nlc3Nf
cHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgotICAgICAgICByZXN1bHQubV90eXBlID0gVHJh
bnNpdGlvbjsKLSAgICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlLmNvcHlGcm9tKHN0dWJJbmZv
LnUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUpOwotICAgICAgICByZXN1bHQu
bV9uZXdTdHJ1Y3R1cmUuY29weUZyb20oc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1
Y3R1cmUpOwotICAgICAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldDo6YWRvcHRSYXdQb2ludGVyKAotICAgICAgICAgICAgc3R1YkluZm8udS5wdXRC
eUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQpOwotICAgICAgICByZXN1bHQubV9zdHViUm91
dGluZSA9IHN0dWJJbmZvLnN0dWJSb3V0aW5lOwotICAgICAgICBicmVhazsKLSAgICAgICAgCi0g
ICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9
Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBQdXRCeUlkQWNjZXNzOjp2aXNp
dFdlYWsoVk0mIHZtKSBjb25zdAotewotICAgIGlmICghbV9jb25kaXRpb25TZXQuYXJlU3RpbGxM
aXZlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBzd2l0Y2ggKG1fdHlwZSkg
ewotICAgIGNhc2UgUmVwbGFjZToKLSAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX29sZFN0
cnVjdHVyZS5nZXQoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgVHJhbnNpdGlvbjoKLSAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX29s
ZFN0cnVjdHVyZS5nZXQoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlm
ICghSGVhcDo6aXNNYXJrZWQobV9uZXdTdHJ1Y3R1cmUuZ2V0KCkpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNldHRlcjoKLSAgICBjYXNlIEN1
c3RvbVNldHRlcjoKLSAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX29sZFN0cnVjdHVyZS5n
ZXQoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKCFtX3N0dWJSb3V0aW5lLT52aXNpdFdlYWsodm0p
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVBvbHltb3Jw
aGljUHV0QnlJZExpc3Q6OlBvbHltb3JwaGljUHV0QnlJZExpc3QoCi0gICAgUHV0S2luZCBwdXRL
aW5kLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi0gICAgOiBtX2tpbmQocHV0S2luZCkK
LXsKLSAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSAhPSBhY2Nlc3NfdW5zZXQpCi0gICAgICAg
IG1fbGlzdC5hcHBlbmQoUHV0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKHN0dWJJ
bmZvKSk7Ci19Ci0KLVBvbHltb3JwaGljUHV0QnlJZExpc3QqIFBvbHltb3JwaGljUHV0QnlJZExp
c3Q6OmZyb20oCi0gICAgUHV0S2luZCBwdXRLaW5kLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8pCi17Ci0gICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3B1dF9ieV9pZF9s
aXN0KQotICAgICAgICByZXR1cm4gc3R1YkluZm8udS5wdXRCeUlkTGlzdC5saXN0OwotICAgIAot
ICAgIEFTU0VSVChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFj
ZQotICAgICAgICB8fCBzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19wdXRfYnlfaWRfdHJh
bnNpdGlvbl9ub3JtYWwKLSAgICAgICAgfHwgc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3Nf
cHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0Ci0gICAgICAgIHx8IHN0dWJJbmZvLmFjY2Vzc1R5
cGUgPT0gYWNjZXNzX3Vuc2V0KTsKLSAgICAKLSAgICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiBy
ZXN1bHQgPQotICAgICAgICBuZXcgUG9seW1vcnBoaWNQdXRCeUlkTGlzdChwdXRLaW5kLCBzdHVi
SW5mbyk7Ci0gICAgCi0gICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRMaXN0KHJlc3VsdCk7Ci0gICAg
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6flBvbHlt
b3JwaGljUHV0QnlJZExpc3QoKSB7IH0KLQotYm9vbCBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojpp
c0Z1bGwoKSBjb25zdAotewotICAgIEFTU0VSVChzaXplKCkgPD0gUE9MWU1PUlBISUNfTElTVF9D
QUNIRV9TSVpFKTsKLSAgICByZXR1cm4gc2l6ZSgpID09IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVf
U0laRTsKLX0KLQotYm9vbCBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojppc0FsbW9zdEZ1bGwoKSBj
b25zdAotewotICAgIEFTU0VSVChzaXplKCkgPD0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpF
KTsKLSAgICByZXR1cm4gc2l6ZSgpID49IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDE7
Ci19Ci0KLXZvaWQgUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6YWRkQWNjZXNzKGNvbnN0IFB1dEJ5
SWRBY2Nlc3MmIHB1dEJ5SWRBY2Nlc3MpCi17Ci0gICAgQVNTRVJUKCFpc0Z1bGwoKSk7Ci0gICAg
Ly8gTWFrZSBzdXJlIHRoYXQgdGhlIHJlc2l6aW5nIG9wdGltaXplcyBmb3Igc3BhY2UsIG5vdCB0
aW1lLgotICAgIG1fbGlzdC5yZXNpemVUb0ZpdChtX2xpc3Quc2l6ZSgpICsgMSk7Ci0gICAgbV9s
aXN0Lmxhc3QoKSA9IHB1dEJ5SWRBY2Nlc3M7Ci19Ci0KLWJvb2wgUG9seW1vcnBoaWNQdXRCeUlk
TGlzdDo6dmlzaXRXZWFrKFZNJiB2bSkgY29uc3QKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKCFhdChpKS52aXNpdFdlYWsodm0pKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlk
TGlzdC5oCShyZXZpc2lvbiAxODk0OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIxNiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNpZm5kZWYgUG9seW1vcnBoaWNQdXRCeUlkTGlzdF9oCi0jZGVmaW5lIFBvbHltb3Jw
aGljUHV0QnlJZExpc3RfaAotCi0jaWYgRU5BQkxFKEpJVCkKLQotI2luY2x1ZGUgIkNvZGVPcmln
aW4uaCIKLSNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgotI2luY2x1ZGUgIk9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0LmgiCi0jaW5jbHVkZSAiT3Bjb2RlLmgiCi0jaW5jbHVkZSAiUHV0S2lu
ZC5oIgotI2luY2x1ZGUgIlB1dFByb3BlcnR5U2xvdC5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZS5o
IgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENv
ZGVCbG9jazsKLXN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbzsKLQotY2xhc3MgUHV0QnlJZEFjY2Vz
cyB7Ci1wdWJsaWM6Ci0gICAgZW51bSBBY2Nlc3NUeXBlIHsKLSAgICAgICAgSW52YWxpZCwKLSAg
ICAgICAgVHJhbnNpdGlvbiwKLSAgICAgICAgUmVwbGFjZSwKLSAgICAgICAgU2V0dGVyLAotICAg
ICAgICBDdXN0b21TZXR0ZXIKLSAgICB9OwotICAgIAotICAgIFB1dEJ5SWRBY2Nlc3MoKQotICAg
ICAgICA6IG1fdHlwZShJbnZhbGlkKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIFB1
dEJ5SWRBY2Nlc3MgdHJhbnNpdGlvbigKLSAgICAgICAgVk0mIHZtLAotICAgICAgICBKU0NlbGwq
IG93bmVyLAotICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwKLSAgICAgICAgU3RydWN0
dXJlKiBuZXdTdHJ1Y3R1cmUsCi0gICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0JiBjb25kaXRpb25TZXQsCi0gICAgICAgIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0
dWJSb3V0aW5lKQotICAgIHsKLSAgICAgICAgUHV0QnlJZEFjY2VzcyByZXN1bHQ7Ci0gICAgICAg
IHJlc3VsdC5tX3R5cGUgPSBUcmFuc2l0aW9uOwotICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1
cmUuc2V0KHZtLCBvd25lciwgb2xkU3RydWN0dXJlKTsKLSAgICAgICAgcmVzdWx0Lm1fbmV3U3Ry
dWN0dXJlLnNldCh2bSwgb3duZXIsIG5ld1N0cnVjdHVyZSk7Ci0gICAgICAgIHJlc3VsdC5tX2Nv
bmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKLSAgICAgICAgcmVzdWx0Lm1fY3VzdG9tU2V0dGVy
ID0gMDsKLSAgICAgICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBzdHViUm91dGluZTsKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBzdGF0aWMgUHV0QnlJZEFjY2VzcyByZXBs
YWNlKAotICAgICAgICBWTSYgdm0sCi0gICAgICAgIEpTQ2VsbCogb3duZXIsCi0gICAgICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlLAotICAgICAgICBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBz
dHViUm91dGluZSkKLSAgICB7Ci0gICAgICAgIFB1dEJ5SWRBY2Nlc3MgcmVzdWx0OwotICAgICAg
ICByZXN1bHQubV90eXBlID0gUmVwbGFjZTsKLSAgICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJl
LnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHJlc3VsdC5tX2N1c3RvbVNldHRl
ciA9IDA7Ci0gICAgICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gc3R1YlJvdXRpbmU7Ci0gICAg
ICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0KLSAgICBzdGF0aWMgUHV0QnlJZEFjY2VzcyBz
ZXR0ZXIoCi0gICAgICAgIFZNJiB2bSwKLSAgICAgICAgSlNDZWxsKiBvd25lciwKLSAgICAgICAg
QWNjZXNzVHlwZSBhY2Nlc3NUeXBlLAotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKLSAg
ICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwKLSAg
ICAgICAgUHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmMgY3VzdG9tU2V0dGVyLAotICAgICAg
ICBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSkKLSAgICB7Ci0gICAgICAg
IFJFTEVBU0VfQVNTRVJUKGFjY2Vzc1R5cGUgPT0gU2V0dGVyIHx8IGFjY2Vzc1R5cGUgPT0gQ3Vz
dG9tU2V0dGVyKTsKLSAgICAgICAgUHV0QnlJZEFjY2VzcyByZXN1bHQ7Ci0gICAgICAgIHJlc3Vs
dC5tX29sZFN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOwotICAgICAgICByZXN1
bHQubV90eXBlID0gYWNjZXNzVHlwZTsKLSAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0g
Y29uZGl0aW9uU2V0OwotICAgICAgICByZXN1bHQubV9jdXN0b21TZXR0ZXIgPSBjdXN0b21TZXR0
ZXI7Ci0gICAgICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gc3R1YlJvdXRpbmU7Ci0gICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyBQdXRCeUlkQWNjZXNzIGZy
b21TdHJ1Y3R1cmVTdHViSW5mbyhTdHJ1Y3R1cmVTdHViSW5mbyYpOwotICAgIAotICAgIGJvb2wg
aXNTZXQoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgIT0gSW52YWxpZDsgfQotICAgIGJvb2wgb3Bl
cmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KLSAgICAKLSAgICBBY2Nlc3NUeXBl
IHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICAKLSAgICBib29sIGlzVHJhbnNp
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBUcmFuc2l0aW9uOyB9Ci0gICAgYm9vbCBp
c1JlcGxhY2UoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gUmVwbGFjZTsgfQotICAgIGJvb2wg
aXNTZXR0ZXIoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gU2V0dGVyOyB9Ci0gICAgYm9vbCBp
c0N1c3RvbSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBDdXN0b21TZXR0ZXI7IH0KLSAgICAK
LSAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSgpIGNvbnN0Ci0gICAgewotICAgICAgICAvLyBV
c2luZyB0aGlzIGluc3RlYWQgb2YgaXNTZXQoKSB0byBtYWtlIHRoaXMgYXNzZXJ0aW9uIHJvYnVz
dCBhZ2FpbnN0IHRoZSBwb3NzaWJpbGl0eQotICAgICAgICAvLyBvZiBhZGRpdGlvbmFsIGFjY2Vz
cyB0eXBlcyBiZWluZyBhZGRlZC4KLSAgICAgICAgQVNTRVJUKGlzVHJhbnNpdGlvbigpIHx8IGlz
UmVwbGFjZSgpIHx8IGlzU2V0dGVyKCkgfHwgaXNDdXN0b20oKSk7Ci0gICAgICAgIAotICAgICAg
ICByZXR1cm4gbV9vbGRTdHJ1Y3R1cmUuZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc1JlcGxhY2UoKSB8
fCBpc1NldHRlcigpIHx8IGlzQ3VzdG9tKCkpOwotICAgICAgICByZXR1cm4gbV9vbGRTdHJ1Y3R1
cmUuZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc1RyYW5zaXRpb24oKSk7Ci0gICAgICAgIHJldHVy
biBtX25ld1N0cnVjdHVyZS5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0
aW9uU2V0OyB9Ci0gICAgCi0gICAgSklUU3R1YlJvdXRpbmUqIHN0dWJSb3V0aW5lKCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChpc1RyYW5zaXRpb24oKSB8fCBpc1JlcGxhY2UoKSB8fCBp
c1NldHRlcigpIHx8IGlzQ3VzdG9tKCkpOwotICAgICAgICByZXR1cm4gbV9zdHViUm91dGluZS5n
ZXQoKTsKLSAgICB9Ci0KLSAgICBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyBjdXN0b21T
ZXR0ZXIoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzQ3VzdG9tKCkpOwotICAgICAg
ICByZXR1cm4gbV9jdXN0b21TZXR0ZXI7Ci0gICAgfQotCi0gICAgYm9vbCB2aXNpdFdlYWsoVk0m
KSBjb25zdDsKLSAgICAKLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKLSAg
ICAKLSAgICBBY2Nlc3NUeXBlIG1fdHlwZTsKLSAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBt
X29sZFN0cnVjdHVyZTsKLSAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX25ld1N0cnVjdHVy
ZTsKLSAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKLSAgICBQ
dXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyBtX2N1c3RvbVNldHRlcjsKLSAgICBSZWZQdHI8
SklUU3R1YlJvdXRpbmU+IG1fc3R1YlJvdXRpbmU7Ci19OwotCi1jbGFzcyBQb2x5bW9ycGhpY1B1
dEJ5SWRMaXN0IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICAv
LyBFaXRoZXIgY3JlYXRlcyBhIG5ldyBwb2x5bW9ycGhpYyBwdXQgbGlzdCwgb3IgcmV0dXJucyB0
aGUgb25lIHRoYXQgaXMgYWxyZWFkeQotICAgIC8vIGluIHBsYWNlLgotICAgIHN0YXRpYyBQb2x5
bW9ycGhpY1B1dEJ5SWRMaXN0KiBmcm9tKFB1dEtpbmQsIFN0cnVjdHVyZVN0dWJJbmZvJik7Ci0g
ICAgCi0gICAgflBvbHltb3JwaGljUHV0QnlJZExpc3QoKTsKLSAgICAKLSAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgY3VycmVudFNsb3dQYXRoVGFyZ2V0KCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiBtX2xpc3QubGFzdCgpLnN0dWJSb3V0aW5lKCktPmNvZGUoKS5jb2RlKCk7Ci0gICAg
fQotICAgIAotICAgIHZvaWQgYWRkQWNjZXNzKGNvbnN0IFB1dEJ5SWRBY2Nlc3MmKTsKLSAgICAK
LSAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2xpc3QuaXNFbXB0eSgpOyB9Ci0g
ICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5zaXplKCk7IH0KLSAgICBi
b29sIGlzRnVsbCgpIGNvbnN0OwotICAgIGJvb2wgaXNBbG1vc3RGdWxsKCkgY29uc3Q7IC8vIFRy
dWUgaWYgYWRkaW5nIGFuIGVsZW1lbnQgd291bGQgbWFrZSBpc0Z1bGwoKSB0cnVlLgotICAgIGNv
bnN0IFB1dEJ5SWRBY2Nlc3MmIGF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdFtp
XTsgfQotICAgIGNvbnN0IFB1dEJ5SWRBY2Nlc3MmIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29u
c3QgeyByZXR1cm4gbV9saXN0W2ldOyB9Ci0gICAgCi0gICAgUHV0S2luZCBraW5kKCkgY29uc3Qg
eyByZXR1cm4gbV9raW5kOyB9Ci0gICAgCi0gICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25zdDsK
LSAgICAKLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKLSAgICAKLSAgICAv
LyBJbml0aWFsaXplIGZyb20gYSBzdHViIGluZm87IHRoaXMgd2lsbCBwbGFjZSBvbmUgZWxlbWVu
dCBpbiB0aGUgbGlzdCBhbmQgaXQgd2lsbAotICAgIC8vIGJlIGNyZWF0ZWQgYnkgY29udmVydGlu
ZyB0aGUgc3R1YiBpbmZvJ3MgcHV0IGJ5IGlkIGFjY2VzcyBpbmZvcm1hdGlvbiBpbnRvIG91cgot
ICAgIC8vIFB1dEJ5SWRBY2Nlc3MuCi0gICAgUG9seW1vcnBoaWNQdXRCeUlkTGlzdChQdXRLaW5k
LCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwotCi0gICAgVmVjdG9yPFB1dEJ5SWRBY2Nlc3MsIDI+IG1f
bGlzdDsKLSAgICBQdXRLaW5kIG1fa2luZDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0j
ZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQotI2VuZGlmIC8vIFBvbHltb3JwaGljUHV0QnlJZExpc3Rf
aAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRT
dGF0dXMuY3BwCShyZXZpc2lvbiAxODk0OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEzICsyNiwxMiBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKIAotI2lu
Y2x1ZGUgIkFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2Nr
LmgiCiAjaW5jbHVkZSAiQ29tcGxleEdldFN0YXR1cy5oIgogI2luY2x1ZGUgIkxMSW50RGF0YS5o
IgogI2luY2x1ZGUgIkxvd0xldmVsSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCi0jaW5jbHVkZSAiUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oIgorI2luY2x1ZGUgIlBvbHlt
b3JwaGljQWNjZXNzLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiU3RydWN0
dXJlQ2hhaW4uaCIKICNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KQEAgLTE1NCwxNCArMTUzLDE0
IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICBpZiAoIXN0
dWJJbmZvLT5zZWVuKQogICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cygpOwogICAgIAotICAg
IHN3aXRjaCAoc3R1YkluZm8tPmFjY2Vzc1R5cGUpIHsKLSAgICBjYXNlIGFjY2Vzc191bnNldDoK
KyAgICBzd2l0Y2ggKHN0dWJJbmZvLT5jYWNoZVR5cGUpIHsKKyAgICBjYXNlIENhY2hlVHlwZTo6
VW5zZXQ6CiAgICAgICAgIC8vIElmIHRoZSBKSVQgc2F3IGl0IGJ1dCBkaWRuJ3Qgb3B0aW1pemUg
aXQsIHRoZW4gYXNzdW1lIHRoYXQgdGhpcyB0YWtlcyBzbG93IHBhdGguCiAgICAgICAgIHJldHVy
biBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgICAgICAKLSAgICBjYXNlIGFjY2Vz
c19wdXRfYnlfaWRfcmVwbGFjZTogeworICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFj
ZTogewogICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPQotICAgICAgICAgICAgc3R1Yklu
Zm8tPnUucHV0QnlJZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5
KHVpZCk7CisgICAgICAgICAgICBzdHViSW5mby0+dS5ieUlkUmVwbGFjZS5iYXNlT2JqZWN0U3Ry
dWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKICAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQo
b2Zmc2V0KSkgewogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAog
ICAgICAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRSZXBsYWNlLmJhc2VPYmplY3RTdHJ1
Y3R1cmUuZ2V0KCksIG9mZnNldCk7CkBAIC0xNjksNTEgKzE2OCwyNiBAQCBQdXRCeUlkU3RhdHVz
IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVz
KFRha2VzU2xvd1BhdGgpOwogICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5
X2lkX3RyYW5zaXRpb25fbm9ybWFsOgotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0
aW9uX2RpcmVjdDogewotICAgICAgICBBU1NFUlQoc3R1YkluZm8tPnUucHV0QnlJZFRyYW5zaXRp
b24ucHJldmlvdXNTdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFs
aWRhdGVkKCkpOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSAKLSAgICAgICAgICAg
IHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5
KHVpZCk7Ci0gICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKLSAgICAgICAgICAg
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldCA9IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0Ojpmcm9tUmF3UG9pbnRlcigKLSAgICAgICAgICAgICAgICBzdHViSW5mby0+
dS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQpOwotICAgICAgICAgICAgaWYgKCFj
b25kaXRpb25TZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgICAgICAgICByZXR1cm4g
UHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCi0gICAgICAgICAgICAgICAgc3R1YkluZm8tPnUu
cHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUuZ2V0KCksCi0gICAgICAgICAgICAg
ICAgc3R1YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLmdldCgpLAotICAgICAg
ICAgICAgICAgIGNvbmRpdGlvblNldCwgb2Zmc2V0KTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICB9Ci0gICAgICAgIAotICAgIGNh
c2UgYWNjZXNzX3B1dF9ieV9pZF9saXN0OiB7Ci0gICAgICAgIFBvbHltb3JwaGljUHV0QnlJZExp
c3QqIGxpc3QgPSBzdHViSW5mby0+dS5wdXRCeUlkTGlzdC5saXN0OworICAgIGNhc2UgQ2FjaGVU
eXBlOjpTdHViOiB7CisgICAgICAgIFBvbHltb3JwaGljQWNjZXNzKiBsaXN0ID0gc3R1YkluZm8t
PnUuc3R1YjsKICAgICAgICAgCiAgICAgICAgIFB1dEJ5SWRTdGF0dXMgcmVzdWx0OwogICAgICAg
ICByZXN1bHQubV9zdGF0ZSA9IFNpbXBsZTsKICAgICAgICAgCiAgICAgICAgIFN0YXRlIHNsb3dQ
YXRoU3RhdGUgPSBUYWtlc1Nsb3dQYXRoOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGlzdC0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGNvbnN0IFB1dEJ5SWRBY2Nlc3Mm
IGFjY2VzcyA9IGxpc3QtPmF0KGkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzd2l0Y2gg
KGFjY2Vzcy50eXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgUHV0QnlJZEFjY2Vzczo6U2V0dGVy
OgotICAgICAgICAgICAgY2FzZSBQdXRCeUlkQWNjZXNzOjpDdXN0b21TZXR0ZXI6CisgICAgICAg
ICAgICBjb25zdCBBY2Nlc3NDYXNlJiBhY2Nlc3MgPSBsaXN0LT5hdChpKTsKKyAgICAgICAgICAg
IGlmIChhY2Nlc3MuZG9lc0NhbGxzKCkpCiAgICAgICAgICAgICAgICAgc2xvd1BhdGhTdGF0ZSA9
IE1ha2VzQ2FsbHM7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+c2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgICAgIGNvbnN0IFB1dEJ5SWRBY2Nlc3MmIGFjY2VzcyA9IGxpc3QtPmF0KGkp
OworICAgICAgICAgICAgY29uc3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0gbGlzdC0+YXQoaSk7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50IHZhcmlhbnQ7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIHN3aXRjaCAoYWNjZXNzLnR5cGUoKSkgewotICAgICAgICAgICAg
Y2FzZSBQdXRCeUlkQWNjZXNzOjpSZXBsYWNlOiB7CisgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nh
c2U6OlJlcGxhY2U6IHsKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFj
Y2Vzcy5zdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQg
PSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOwogICAgICAgICAgICAgICAgIGlmICgh
aXNWYWxpZE9mZnNldChvZmZzZXQpKQpAQCAtMjIyLDcgKzE5Niw3IEBAIFB1dEJ5SWRTdGF0dXMg
UHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgUHV0QnlJZEFjY2Vz
czo6VHJhbnNpdGlvbjogeworICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpUcmFuc2l0aW9u
OiB7CiAgICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0KICAgICAgICAgICAg
ICAgICAgICAgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLT5nZXRDb25jdXJyZW50bHkodWlkKTsKICAg
ICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKQEAgLTIzMSwxMSArMjA1
LDExIEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAg
ICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSkKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSk7CiAg
ICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAotICAg
ICAgICAgICAgICAgICAgICBhY2Nlc3Mub2xkU3RydWN0dXJlKCksIGFjY2Vzcy5uZXdTdHJ1Y3R1
cmUoKSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOworICAgICAgICAgICAgICAgICAgICBhY2Nlc3Mu
c3RydWN0dXJlKCksIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgY29uZGl0aW9uU2V0LCBvZmZzZXQp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgY2FzZSBQdXRCeUlkQWNjZXNzOjpTZXR0ZXI6IHsKKyAgICAgICAgICAg
IGNhc2UgQWNjZXNzQ2FzZTo6U2V0dGVyOiB7CiAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBhY2Nlc3Muc3RydWN0dXJlKCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgQ29tcGxleEdldFN0YXR1cyBjb21wbGV4R2V0U3RhdHVzID0gQ29tcGxleEdldFN0
YXR1czo6Y29tcHV0ZUZvcigKQEAgLTI0OSwxMiArMjIzLDEyIEBAIFB1dEJ5SWRTdGF0dXMgUHV0
QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6SW5saW5lYWJsZTogewotICAgICAgICAgICAg
ICAgICAgICBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZSogc3R1YiA9IHN0YXRpY19jYXN0PEFj
Y2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lKj4oCi0gICAgICAgICAgICAgICAgICAgICAgICBhY2Nl
c3Muc3R1YlJvdXRpbmUoKSk7CisgICAgICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2Fs
bExpbmtJbmZvID0gYWNjZXNzLmNhbGxMaW5rSW5mbygpOworICAgICAgICAgICAgICAgICAgICBB
U1NFUlQoY2FsbExpbmtJbmZvKTsKICAgICAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cyA9CiAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGQ6Om1ha2VfdW5pcXVlPENhbGxMaW5rU3RhdHVzPigKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcigKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJsb2NrLCAqc3R1Yi0+bV9jYWxsTGlua0luZm8s
IGNhbGxFeGl0U2l0ZURhdGEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9j
a2VyLCBwcm9maWxlZEJsb2NrLCAqY2FsbExpbmtJbmZvLCBjYWxsRXhpdFNpdGVEYXRhKSk7CiAg
ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlJ
ZFZhcmlhbnQ6OnNldHRlcigKICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgY29t
cGxleEdldFN0YXR1cy5vZmZzZXQoKSwgY29tcGxleEdldFN0YXR1cy5jb25kaXRpb25TZXQoKSwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmNwcAkocmV2aXNpb24gMTg5NDkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMzcg
KzM2LDUyIEBAIG5hbWVzcGFjZSBKU0MgewogI2lmIEVOQUJMRShKSVQpCiB2b2lkIFN0cnVjdHVy
ZVN0dWJJbmZvOjpkZXJlZigpCiB7Ci0gICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7Ci0gICAgY2Fz
ZSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3Q6IHsKLSAgICAgICAgZGVsZXRlIHUuZ2V0QnlJZExpc3Qu
bGlzdDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRf
bGlzdDoKLSAgICAgICAgZGVsZXRlIHUucHV0QnlJZExpc3QubGlzdDsKLSAgICAgICAgcmV0dXJu
OwotICAgIGNhc2UgYWNjZXNzX2luX2xpc3Q6IHsKLSAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NT
dHJ1Y3R1cmVMaXN0KiBwb2x5bW9ycGhpY1N0cnVjdHVyZXMgPSB1LmluTGlzdC5zdHJ1Y3R1cmVM
aXN0OwotICAgICAgICBkZWxldGUgcG9seW1vcnBoaWNTdHJ1Y3R1cmVzOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoK
LSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6Ci0gICAgICAgIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjphZG9wdFJhd1BvaW50ZXIodS5wdXRCeUlkVHJhbnNp
dGlvbi5yYXdDb25kaXRpb25TZXQpOwotICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0Nv
bmRpdGlvblNldCA9IG51bGxwdHI7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIGFjY2Vzc19n
ZXRfYnlfaWRfc2VsZjoKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFjZToKLSAgICBj
YXNlIGFjY2Vzc191bnNldDoKLSAgICAgICAgLy8gVGhlc2UgaW5zdHJ1Y3Rpb25zIGRvbid0IGhh
dmUgdG8gcmVsZWFzZSBhbnkgYWxsb2NhdGVkIG1lbW9yeQorICAgIHN3aXRjaCAoY2FjaGVUeXBl
KSB7CisgICAgY2FzZSBDYWNoZVR5cGU6OlN0dWI6CisgICAgICAgIGRlbGV0ZSB1LnN0dWI7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIENhY2hlVHlwZTo6VW5zZXQ6CisgICAgY2FzZSBDYWNo
ZVR5cGU6OkdldEJ5SWRTZWxmOgorICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZQog
ICAgICAgICByZXR1cm47Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
fQorCitNYWNyb0Fzc2VtYmxlckNvZGVQdHIgU3RydWN0dXJlU3R1YkluZm86OmFkZEFjY2Vzc0Nh
c2UoCisgICAgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSWRlbnRpZmllciYg
aWRlbnQsIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBhY2Nlc3NDYXNlKQoreworICAgIGlm
ICghYWNjZXNzQ2FzZSkKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOwor
ICAgIAorICAgIGlmIChjYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpTdHViKQorICAgICAgICByZXR1
cm4gdS5zdHViLT5yZWdlbmVyYXRlV2l0aENhc2Uodm0sIGNvZGVCbG9jaywgKnRoaXMsIGlkZW50
LCBhY2Nlc3NDYXNlKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxQb2x5bW9ycGhpY0FjY2Vzcz4g
YWNjZXNzID0gc3RkOjptYWtlX3VuaXF1ZTxQb2x5bW9ycGhpY0FjY2Vzcz4oKTsKKyAgICAKKyAg
ICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+PiBhY2Nlc3NDYXNlczsKKyAgICAK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gcHJldmlvdXNDYXNlID0KKyAgICAgICAg
QWNjZXNzQ2FzZTo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKHZtLCBjb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpLCAqdGhpcyk7CisgICAgaWYgKHByZXZpb3VzQ2FzZSkKKyAgICAgICAgYWNjZXNz
Q2FzZXMuYXBwZW5kKHN0ZDo6bW92ZShwcmV2aW91c0Nhc2UpKTsKKworICAgIGFjY2Vzc0Nhc2Vz
LmFwcGVuZChzdGQ6Om1vdmUoYWNjZXNzQ2FzZSkpOworCisgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIHJlc3VsdCA9CisgICAgICAgIGFjY2Vzcy0+cmVnZW5lcmF0ZVdpdGhDYXNlcyh2bSwgY29k
ZUJsb2NrLCAqdGhpcywgaWRlbnQsIGFjY2Vzc0Nhc2VzKTsKKworICAgIGlmICghcmVzdWx0KQor
ICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7CisKKyAgICBjYWNoZVR5cGUg
PSBDYWNoZVR5cGU6OlN0dWI7CisgICAgdS5zdHViID0gYWNjZXNzLnJlbGVhc2UoKTsKIH0KIAog
dm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0g
ICAgaWYgKGFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0KQorICAgIGlmIChjYWNoZVR5cGUgPT0g
Q2FjaGVUeXBlOjpVbnNldCkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGlmIChPcHRpb25z
Ojp2ZXJib3NlT1NSKCkpIHsKQEAgLTc0LDE4ICs4OSwyMSBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJ
bmZvOjpyZXNldChDb2RlQmxvY2sqCiAgICAgICAgIC8vIG9mIHRoZSBDb2RlQmxvY2suCiAgICAg
ICAgIGRhdGFMb2coIkNsZWFyaW5nIHN0cnVjdHVyZSBjYWNoZSAoa2luZCAiLCBzdGF0aWNfY2Fz
dDxpbnQ+KGFjY2Vzc1R5cGUpLCAiKSBpbiAiLCBSYXdQb2ludGVyKGNvZGVCbG9jayksICIuXG4i
KTsKICAgICB9Ci0gICAgCi0gICAgaWYgKGlzR2V0QnlJZEFjY2VzcyhzdGF0aWNfY2FzdDxBY2Nl
c3NUeXBlPihhY2Nlc3NUeXBlKSkpCisKKyAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKKyAgICBj
YXNlIEFjY2Vzc1R5cGU6OkdldDoKICAgICAgICAgcmVzZXRHZXRCeUlEKGNvZGVCbG9jaywgKnRo
aXMpOwotICAgIGVsc2UgaWYgKGlzUHV0QnlJZEFjY2VzcyhzdGF0aWNfY2FzdDxBY2Nlc3NUeXBl
PihhY2Nlc3NUeXBlKSkpCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0
OgogICAgICAgICByZXNldFB1dEJ5SUQoY29kZUJsb2NrLCAqdGhpcyk7Ci0gICAgZWxzZSB7Ci0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzSW5BY2Nlc3Moc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4o
YWNjZXNzVHlwZSkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbjoK
ICAgICAgICAgcmVzZXRJbihjb2RlQmxvY2ssICp0aGlzKTsKKyAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgIAogICAgIGRlcmVmKCk7Ci0gICAgYWNjZXNzVHlwZSA9IGFjY2Vzc191bnNldDsKKyAg
ICBjYWNoZVR5cGUgPSBDYWNoZVR5cGU6OlVuc2V0OwogICAgIHN0dWJSb3V0aW5lID0gbnVsbHB0
cjsKICAgICB3YXRjaHBvaW50cyA9IG51bGxwdHI7CiB9CkBAIC05Myw0MSArMTExLDE4IEBAIHZv
aWQgU3RydWN0dXJlU3R1YkluZm86OnJlc2V0KENvZGVCbG9jayoKIHZvaWQgU3RydWN0dXJlU3R1
YkluZm86OnZpc2l0V2Vha1JlZmVyZW5jZXMoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAg
Vk0mIHZtID0gKmNvZGVCbG9jay0+dm0oKTsKLSAgICAKLSAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUp
IHsKLSAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZjoKLSAgICAgICAgaWYgKEhlYXA6Omlz
TWFya2VkKHUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSkpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9s
aXN0OiB7Ci0gICAgICAgIGlmICh1LmdldEJ5SWRMaXN0Lmxpc3QtPnZpc2l0V2Vhayh2bSkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIGFjY2Vz
c19wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWw6Ci0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lk
X3RyYW5zaXRpb25fZGlyZWN0OgotICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQodS5wdXRCeUlk
VHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZS5nZXQoKSkKLSAgICAgICAgICAgICYmIEhlYXA6
OmlzTWFya2VkKHUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLmdldCgpKQotICAgICAgICAg
ICAgJiYgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmZyb21SYXdQb2ludGVyKHUucHV0QnlJ
ZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0KS5hcmVTdGlsbExpdmUoKSkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxh
Y2U6Ci0gICAgICAgIGlmIChIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRSZXBsYWNlLmJhc2VPYmpl
Y3RTdHJ1Y3R1cmUuZ2V0KCkpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfbGlzdDoKLSAgICAgICAgaWYgKHUucHV0QnlJZExp
c3QubGlzdC0+dmlzaXRXZWFrKHZtKSkKKworICAgIHN3aXRjaCAoY2FjaGVUeXBlKSB7CisgICAg
Y2FzZSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxmOgorICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRCeUlk
UmVwbGFjZToKKyAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKHUuYnlJZFNlbGYuYmFzZU9iamVj
dFN0cnVjdHVyZS5nZXQoKSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgYWNjZXNzX2luX2xpc3Q6IHsKLSAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1
Y3R1cmVMaXN0KiBwb2x5bW9ycGhpY1N0cnVjdHVyZXMgPSB1LmluTGlzdC5zdHJ1Y3R1cmVMaXN0
OwotICAgICAgICBpZiAocG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT52aXNpdFdlYWsodS5pbkxpc3Qu
bGlzdFNpemUpKQorICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOgorICAgICAgICBpZiAodS5zdHVi
LT52aXNpdFdlYWsodm0pKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBicmVhazsKLSAg
ICB9CiAgICAgZGVmYXVsdDoKLSAgICAgICAgLy8gVGhlIHJlc3Qgb2YgdGhlIGluc3RydWN0aW9u
cyBkb24ndCByZXF1aXJlIHJlZmVyZW5jZXMsIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8KLSAgICAg
ICAgLy8gZG8gYW55dGhpbmcuCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShy
ZXZpc2lvbiAxODk0OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUg
Ik1hY3JvQXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQu
aCIKICNpbmNsdWRlICJPcGNvZGUuaCIKLSNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzc1N0cnVj
dHVyZUxpc3QuaCIKKyNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgogI2luY2x1ZGUgIlJl
Z2lzdGVyU2V0LmgiCiAjaW5jbHVkZSAiU3BpbGxSZWdpc3RlcnNNb2RlLmgiCiAjaW5jbHVkZSAi
U3RydWN0dXJlLmgiCkBAIC00Miw1NyArNDIsMjUgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBF
TkFCTEUoSklUKQogCi1jbGFzcyBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OwotY2xhc3MgUG9seW1v
cnBoaWNQdXRCeUlkTGlzdDsKK2NsYXNzIFBvbHltb3JwaGljQWNjZXNzOwogCi1lbnVtIEFjY2Vz
c1R5cGUgewotICAgIGFjY2Vzc19nZXRfYnlfaWRfc2VsZiwKLSAgICBhY2Nlc3NfZ2V0X2J5X2lk
X2xpc3QsCi0gICAgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbCwKLSAgICBhY2Nl
c3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0LAotICAgIGFjY2Vzc19wdXRfYnlfaWRfcmVw
bGFjZSwKLSAgICBhY2Nlc3NfcHV0X2J5X2lkX2xpc3QsCi0gICAgYWNjZXNzX3Vuc2V0LAotICAg
IGFjY2Vzc19pbl9saXN0CitlbnVtIGNsYXNzIEFjY2Vzc1R5cGUgOiBpbnQ4X3QgeworICAgIEdl
dCwKKyAgICBQdXQsCisgICAgSW4KIH07CiAKLWlubGluZSBib29sIGlzR2V0QnlJZEFjY2VzcyhB
Y2Nlc3NUeXBlIGFjY2Vzc1R5cGUpCi17Ci0gICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7Ci0gICAg
Y2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGY6Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2xp
c3Q6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci19Ci0gICAgCi1pbmxpbmUgYm9vbCBpc1B1dEJ5SWRBY2Nlc3MoQWNjZXNz
VHlwZSBhY2Nlc3NUeXBlKQotewotICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgewotICAgIGNhc2Ug
YWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoKLSAgICBjYXNlIGFjY2Vzc19wdXRf
YnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6Ci0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxh
Y2U6Ci0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX2xpc3Q6Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWlubGlu
ZSBib29sIGlzSW5BY2Nlc3MoQWNjZXNzVHlwZSBhY2Nlc3NUeXBlKQotewotICAgIHN3aXRjaCAo
YWNjZXNzVHlwZSkgewotICAgIGNhc2UgYWNjZXNzX2luX2xpc3Q6Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19CitlbnVt
IGNsYXNzIENhY2hlVHlwZSA6IGludDhfdCB7CisgICAgVW5zZXQsCisgICAgR2V0QnlJZFNlbGYs
CisgICAgUHV0QnlJZFJlcGxhY2UsCisgICAgU3R1YgorfTsKIAogc3RydWN0IFN0cnVjdHVyZVN0
dWJJbmZvIHsKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbygpCi0gICAgICAgIDogYWNjZXNzVHlwZShh
Y2Nlc3NfdW5zZXQpCisgICAgU3RydWN0dXJlU3R1YkluZm8oQWNjZXNzVHlwZSBhY2Nlc3NUeXBl
KQorICAgICAgICA6IGFjY2Vzc1R5cGUoYWNjZXNzVHlwZSkKKyAgICAgICAgLCBjYWNoZVR5cGUo
Q2FjaGVUeXBlOjpVbnNldCkKICAgICAgICAgLCBzZWVuKGZhbHNlKQogICAgICAgICAsIHJlc2V0
QnlHQyhmYWxzZSkKICAgICAgICAgLCB0b29rU2xvd1BhdGgoZmFsc2UpCkBAIC0xMDAsNTMgKzY4
LDMxIEBAIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAgICAgewogICAgIH0KIAotICAgIHZv
aWQgaW5pdEdldEJ5SWRTZWxmKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBiYXNl
T2JqZWN0U3RydWN0dXJlKQorICAgIHZvaWQgaW5pdEdldEJ5SWRTZWxmKFZNJiB2bSwgSlNDZWxs
KiBvd25lciwgU3RydWN0dXJlKiBiYXNlT2JqZWN0U3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQpCiAgICAgewotICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX2dldF9ieV9pZF9zZWxm
OwotCi0gICAgICAgIHUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5zZXQodm0sIG93
bmVyLCBiYXNlT2JqZWN0U3RydWN0dXJlKTsKLSAgICB9CisgICAgICAgIGNhY2hlVHlwZSA9IENh
Y2hlVHlwZTo6R2V0QnlJZFNlbGY7CiAKLSAgICB2b2lkIGluaXRHZXRCeUlkTGlzdChQb2x5bW9y
cGhpY0dldEJ5SWRMaXN0KiBsaXN0KQotICAgIHsKLSAgICAgICAgYWNjZXNzVHlwZSA9IGFjY2Vz
c19nZXRfYnlfaWRfbGlzdDsKLSAgICAgICAgdS5nZXRCeUlkTGlzdC5saXN0ID0gbGlzdDsKKyAg
ICAgICAgdS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLnNldCh2bSwgb3duZXIsIGJhc2VP
YmplY3RTdHJ1Y3R1cmUpOworICAgICAgICB1LmJ5SWRTZWxmLm9mZnNldCA9IG9mZnNldDsKICAg
ICB9CiAKLSAgICAvLyBQdXRCeUlkKgotCi0gICAgdm9pZCBpbml0UHV0QnlJZFRyYW5zaXRpb24o
Vk0mIHZtLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIHByZXZpb3VzU3RydWN0dXJlLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0
LCBib29sIGlzRGlyZWN0KQorICAgIHZvaWQgaW5pdFB1dEJ5SWRSZXBsYWNlKFZNJiB2bSwgSlND
ZWxsKiBvd25lciwgU3RydWN0dXJlKiBiYXNlT2JqZWN0U3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQpCiAgICAgewotICAgICAgICBpZiAoaXNEaXJlY3QpCi0gICAgICAgICAgICBhY2Nl
c3NUeXBlID0gYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdDsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgYWNjZXNzVHlwZSA9IGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9u
b3JtYWw7CisgICAgICAgIGNhY2hlVHlwZSA9IENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2U7CiAK
LSAgICAgICAgdS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZS5zZXQodm0sIG93
bmVyLCBwcmV2aW91c1N0cnVjdHVyZSk7Ci0gICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24uc3Ry
dWN0dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHUucHV0QnlJZFRyYW5z
aXRpb24ucmF3Q29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0LnJlbGVhc2VSYXdQb2ludGVyKCk7
CisgICAgICAgIHUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBi
YXNlT2JqZWN0U3RydWN0dXJlKTsKKyAgICAgICAgdS5ieUlkU2VsZi5vZmZzZXQgPSBvZmZzZXQ7
CiAgICAgfQogCi0gICAgdm9pZCBpbml0UHV0QnlJZFJlcGxhY2UoVk0mIHZtLCBKU0NlbGwqIG93
bmVyLCBTdHJ1Y3R1cmUqIGJhc2VPYmplY3RTdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBhY2Nl
c3NUeXBlID0gYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlOwotICAgIAotICAgICAgICB1LnB1dEJ5
SWRSZXBsYWNlLmJhc2VPYmplY3RTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgYmFzZU9iamVjdFN0
cnVjdHVyZSk7Ci0gICAgfQotICAgICAgICAKLSAgICB2b2lkIGluaXRQdXRCeUlkTGlzdChQb2x5
bW9ycGhpY1B1dEJ5SWRMaXN0KiBsaXN0KQotICAgIHsKLSAgICAgICAgYWNjZXNzVHlwZSA9IGFj
Y2Vzc19wdXRfYnlfaWRfbGlzdDsKLSAgICAgICAgdS5wdXRCeUlkTGlzdC5saXN0ID0gbGlzdDsK
LSAgICB9Ci0gICAgCi0gICAgdm9pZCBpbml0SW5MaXN0KFBvbHltb3JwaGljQWNjZXNzU3RydWN0
dXJlTGlzdCogbGlzdCwgaW50IGxpc3RTaXplKQorICAgIHZvaWQgaW5pdFN0dWIoc3RkOjp1bmlx
dWVfcHRyPFBvbHltb3JwaGljQWNjZXNzPiBzdHViKQogICAgIHsKLSAgICAgICAgYWNjZXNzVHlw
ZSA9IGFjY2Vzc19pbl9saXN0OwotICAgICAgICB1LmluTGlzdC5zdHJ1Y3R1cmVMaXN0ID0gbGlz
dDsKLSAgICAgICAgdS5pbkxpc3QubGlzdFNpemUgPSBsaXN0U2l6ZTsKKyAgICAgICAgY2FjaGVU
eXBlID0gQ2FjaGVUeXBlOjpTdHViOworICAgICAgICB1LnN0dWIgPSBzdHViLnJlbGVhc2UoKTsK
ICAgICB9Ci0gICAgICAgIAorCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGFkZEFjY2Vzc0Nh
c2UoCisgICAgICAgIFZNJiwgQ29kZUJsb2NrKiwgY29uc3QgSWRlbnRpZmllciYsIHN0ZDo6dW5p
cXVlX3B0cjxBY2Nlc3NDYXNlPiBhY2Nlc3NDYXNlKTsKKwogICAgIHZvaWQgcmVzZXQoQ29kZUJs
b2NrKik7CiAKICAgICB2b2lkIGRlcmVmKCk7CkBAIC0xNjUsMTUgKzExMSw5IEBAIHN0cnVjdCBT
dHJ1Y3R1cmVTdHViSW5mbyB7CiAgICAgICAgIHNlZW4gPSB0cnVlOwogICAgIH0KICAgICAgICAg
Ci0gICAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogYWRkV2F0Y2hwb2ludCgKLSAg
ICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
JiBjb25kaXRpb24gPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigpKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6ZW5zdXJlUmVmZXJlbmNlQW5k
QWRkV2F0Y2hwb2ludCgKLSAgICAgICAgICAgIHdhdGNocG9pbnRzLCBjb2RlQmxvY2ssIHRoaXMs
IGNvbmRpdGlvbik7Ci0gICAgfQotICAgIAotICAgIGludDhfdCBhY2Nlc3NUeXBlOwotICAgIGJv
b2wgc2VlbiA6IDE7CisgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlOworICAgIENhY2hlVHlwZSBj
YWNoZVR5cGU7CisgICAgYm9vbCBzZWVuOwogICAgIGJvb2wgcmVzZXRCeUdDIDogMTsKICAgICBi
b29sIHRvb2tTbG93UGF0aCA6IDE7CiAKQEAgLTIwMywzNCArMTQzLDEzIEBAIHN0cnVjdCBTdHJ1
Y3R1cmVTdHViSW5mbyB7CiAKICAgICB1bmlvbiB7CiAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAg
ICAgICAvLyBJdCB3b3VsZCBiZSB1bndpc2UgdG8gcHV0IGFueXRoaW5nIGhlcmUsIGFzIGl0IHdp
bGwgc3VyZWx5IGJlIG92ZXJ3cml0dGVuLgotICAgICAgICB9IHVuc2V0OwotICAgICAgICBzdHJ1
Y3QgewotICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IGJhc2VPYmplY3RT
dHJ1Y3R1cmU7Ci0gICAgICAgIH0gZ2V0QnlJZFNlbGY7Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAg
ICAgICAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0OwotICAgICAgICB9IGdldEJ5SWRM
aXN0OwotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1
Y3R1cmU+IHByZXZpb3VzU3RydWN0dXJlOwotICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxT
dHJ1Y3R1cmU+IHN0cnVjdHVyZTsKLSAgICAgICAgICAgIHZvaWQqIHJhd0NvbmRpdGlvblNldDsK
LSAgICAgICAgfSBwdXRCeUlkVHJhbnNpdGlvbjsKLSAgICAgICAgc3RydWN0IHsKICAgICAgICAg
ICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBiYXNlT2JqZWN0U3RydWN0dXJlOwotICAg
ICAgICB9IHB1dEJ5SWRSZXBsYWNlOwotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgUG9s
eW1vcnBoaWNQdXRCeUlkTGlzdCogbGlzdDsKLSAgICAgICAgfSBwdXRCeUlkTGlzdDsKLSAgICAg
ICAgc3RydWN0IHsKLSAgICAgICAgICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCog
c3RydWN0dXJlTGlzdDsKLSAgICAgICAgICAgIGludCBsaXN0U2l6ZTsKLSAgICAgICAgfSBpbkxp
c3Q7CisgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CisgICAgICAgIH0gYnlJZFNl
bGY7CisgICAgICAgIFBvbHltb3JwaGljQWNjZXNzKiBzdHViOwogICAgIH0gdTsKIAotICAgIFJl
ZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7CiAgICAgQ29kZUxvY2F0aW9uQ2FsbCBj
YWxsUmV0dXJuTG9jYXRpb247Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdhdGNocG9pbnRzT25TdHJ1
Y3R1cmVTdHViSW5mbz4gd2F0Y2hwb2ludHM7CiB9OwogCiBpbmxpbmUgQ29kZU9yaWdpbiBnZXRT
dHJ1Y3R1cmVTdHViSW5mb0NvZGVPcmlnaW4oU3RydWN0dXJlU3R1YkluZm8mIHN0cnVjdHVyZVN0
dWJJbmZvKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE4OTQ5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MzUsNyArOTM1LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluKE5vZGUqIG5vZAogICAgIAogICAgIGlm
IChKU1N0cmluZyogc3RyaW5nID0gbm9kZS0+Y2hpbGQxKCktPmR5bmFtaWNDYXN0Q29uc3RhbnQ8
SlNTdHJpbmcqPigpKSB7CiAgICAgICAgIGlmIChzdHJpbmctPnRyeUdldFZhbHVlSW1wbCgpICYm
IHN0cmluZy0+dHJ5R2V0VmFsdWVJbXBsKCktPmlzQXRvbWljKCkpIHsKLSAgICAgICAgICAgIFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRTdHViSW5m
bygpOworICAgICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV9qaXQuY29k
ZUJsb2NrKCktPmFkZFN0dWJJbmZvKEFjY2Vzc1R5cGU6OkluKTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTENvbXBpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMQ29tcGlsZS5jcHAJKHJldmlzaW9uIDE4OTQ5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzOCw3ICs1MzgsNyBAQCBz
dGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgICAgICAgICAgICAg
UmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHVzZWRSZWdpc3RlcnNGb3IocmVjb3JkKTsKICAg
ICAgICAgICAgICAgICBHUFJSZWcgcmVzdWx0ID0gcmVjb3JkLmxvY2F0aW9uc1swXS5kaXJlY3RH
UFIoKTsKICAgICAgICAgICAgICAgICBHUFJSZWcgb2JqID0gcmVjb3JkLmxvY2F0aW9uc1sxXS5k
aXJlY3RHUFIoKTsKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8g
PSBjb2RlQmxvY2stPmFkZFN0dWJJbmZvKCk7IAorICAgICAgICAgICAgICAgIFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbyA9IGNvZGVCbG9jay0+YWRkU3R1YkluZm8oQWNjZXNzVHlwZTo6SW4p
OyAKICAgICAgICAgICAgICAgICBzdHViSW5mby0+Y29kZU9yaWdpbiA9IGNvZGVPcmlnaW47CiAg
ICAgICAgICAgICAgICAgc3R1YkluZm8tPmNhbGxTaXRlSW5kZXggPSBjaGVja0luLmNhbGxTaXRl
SW5kZXgoKTsKICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFzZUdQUiA9IHN0YXRp
Y19jYXN0PGludDhfdD4ob2JqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQWNj
ZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuY3BwCShyZXZpc2lvbiAxODk0
OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0FjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0
aW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5oIgotCi0jaWYgRU5BQkxFKEpJ
VCkKLQotI2luY2x1ZGUgIkNhbGxMaW5rSW5mby5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotQWNj
ZXNzb3JDYWxsSklUU3R1YlJvdXRpbmU6OkFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lKAotICAg
IGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgY29kZSwgVk0mIHZtLCBzdGQ6OnVuaXF1ZV9w
dHI8Q2FsbExpbmtJbmZvPiBpbmZvKQotICAgIDogR0NBd2FyZUpJVFN0dWJSb3V0aW5lKGNvZGUs
IHZtKQotICAgICwgbV9jYWxsTGlua0luZm8oV1RGOjptb3ZlKGluZm8pKQotewotfQotCi1BY2Nl
c3NvckNhbGxKSVRTdHViUm91dGluZTo6fkFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lKCkKLXsK
LX0KLQotYm9vbCBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZTo6dmlzaXRXZWFrKFZNJiB2bSkK
LXsKLSAgICBtX2NhbGxMaW5rSW5mby0+dmlzaXRXZWFrKHZtKTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0FjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9BY2Nlc3NvckNhbGxKSVRT
dHViUm91dGluZS5oCShyZXZpc2lvbiAxODk0OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0FjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTcg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jaWZuZGVmIEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lX2gKLSNkZWZpbmUgQWNjZXNz
b3JDYWxsSklUU3R1YlJvdXRpbmVfaAotCi0jaWYgRU5BQkxFKEpJVCkKLQotI2luY2x1ZGUgIkdD
QXdhcmVKSVRTdHViUm91dGluZS5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgQ2FsbExp
bmtJbmZvOwotCi0vLyBKSVQgc3R1YiByb3V0aW5lIGZvciB1c2UgYnkgSmF2YVNjcmlwdCBhY2Nl
c3NvcnMuIFRoZXNlIHdpbGwgYmUgbWFraW5nIGEgSlMKLS8vIGNhbGwgdGhhdCByZXF1aXJlcyBp
bmxpbmUgY2FjaGluZy4gCi0KLWNsYXNzIEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lIDogcHVi
bGljIEdDQXdhcmVKSVRTdHViUm91dGluZSB7Ci1wdWJsaWM6Ci0gICAgQWNjZXNzb3JDYWxsSklU
U3R1YlJvdXRpbmUoCi0gICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYsIFZNJiwg
c3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rSW5mbz4pOwotICAgIAotICAgIHZpcnR1YWwgfkFjY2Vz
c29yQ2FsbEpJVFN0dWJSb3V0aW5lKCk7Ci0gICAgCi0gICAgdmlydHVhbCBib29sIHZpc2l0V2Vh
ayhWTSYpIG92ZXJyaWRlOwotICAgIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua0luZm8+
IG1fY2FsbExpbmtJbmZvOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBF
TkFCTEUoSklUKQotCi0jZW5kaWYgLy8gQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmVfaAotCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlz
aW9uIDE4OTQ5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU2Myw3ICs1NjMsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBicmFuY2gzMihFcXVhbCwgcmVncy50YWdHUFIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkVtcHR5VmFsdWVUYWcpKTsKICNlbmRpZgogICAgIH0KLSAgICAKKwogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CiAgICAgSnVtcCBicmFuY2hTdHJ1Y3R1cmUoUmVsYXRpb25hbENvbmRpdGlvbiBj
b25kaXRpb24sIFQgbGVmdEhhbmRTaWRlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7CkBA
IC04MzIsNiArODMyLDE1IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0KIAorICAgIHZvaWQgYm94
Qm9vbGVhblBheWxvYWQoYm9vbCB2YWx1ZSwgR1BSUmVnIHBheWxvYWRHUFIpCisgICAgeworI2lm
IFVTRShKU1ZBTFVFNjQpCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UgKyB2
YWx1ZSksIHBheWxvYWRHUFIpOworI2Vsc2UKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIodmFs
dWUpLCBwYXlsb2FkR1BSKTsKKyNlbmRpZgorICAgIH0KKwogICAgIHZvaWQgYm94Qm9vbGVhbihH
UFJSZWcgYm9vbEdQUiwgSlNWYWx1ZVJlZ3MgYm94ZWRSZWdzKQogICAgIHsKICAgICAgICAgYm94
Qm9vbGVhblBheWxvYWQoYm9vbEdQUiwgYm94ZWRSZWdzLnBheWxvYWRHUFIoKSk7CkBAIC04Mzks
NiArODQ4LDE3IEBAIHB1YmxpYzoKICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
Qm9vbGVhblRhZyksIGJveGVkUmVncy50YWdHUFIoKSk7CiAjZW5kaWYKICAgICB9CisKKyAgICB2
b2lkIGJveEludDMyKEdQUlJlZyBpbnRHUFIsIEpTVmFsdWVSZWdzIGJveGVkUmVncykKKyAgICB7
CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgbW92ZShpbnRHUFIsIGJveGVkUmVncy5ncHIo
KSk7CisgICAgICAgIG9yNjQoVHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpLCBib3hlZFJlZ3Mu
Z3ByKCkpOworI2Vsc2UKKyAgICAgICAgbW92ZShpbnRHUFIsIGJveGVkUmVncy5wYXlsb2FkR1BS
KCkpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIGJveGVk
UmVncy50YWdHUFIoKSk7CisjZW5kaWYKKyAgICB9CiAgICAgCiAgICAgdm9pZCBjYWxsRXhjZXB0
aW9uRnV6eigpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxp
bmVDYWNoZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDE4OTQ5MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zNiwyMiArMzYsMjQgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIHN0YXRpYyBTdHJ1
Y3R1cmVTdHViSW5mbyogZ2FyYmFnZVN0dWJJbmZvKCkKIHsKLSAgICBzdGF0aWMgU3RydWN0dXJl
U3R1YkluZm8qIHN0dWJJbmZvID0gbmV3IFN0cnVjdHVyZVN0dWJJbmZvKCk7CisgICAgc3RhdGlj
IFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG5ldyBTdHJ1Y3R1cmVTdHViSW5mbyhBY2Nl
c3NUeXBlOjpHZXQpOwogICAgIHJldHVybiBzdHViSW5mbzsKIH0KIAotSklUSW5saW5lQ2FjaGVH
ZW5lcmF0b3I6OkpJVElubGluZUNhY2hlR2VuZXJhdG9yKENvZGVCbG9jayogY29kZUJsb2NrLCBD
b2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUpCitKSVRJbmxpbmVD
YWNoZUdlbmVyYXRvcjo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoCisgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwg
QWNjZXNzVHlwZSBhY2Nlc3NUeXBlKQogICAgIDogbV9jb2RlQmxvY2soY29kZUJsb2NrKQogewot
ICAgIG1fc3R1YkluZm8gPSBtX2NvZGVCbG9jayA/IG1fY29kZUJsb2NrLT5hZGRTdHViSW5mbygp
IDogZ2FyYmFnZVN0dWJJbmZvKCk7CisgICAgbV9zdHViSW5mbyA9IG1fY29kZUJsb2NrID8gbV9j
b2RlQmxvY2stPmFkZFN0dWJJbmZvKGFjY2Vzc1R5cGUpIDogZ2FyYmFnZVN0dWJJbmZvKCk7CiAg
ICAgbV9zdHViSW5mby0+Y29kZU9yaWdpbiA9IGNvZGVPcmlnaW47CiAgICAgbV9zdHViSW5mby0+
Y2FsbFNpdGVJbmRleCA9IGNhbGxTaXRlOwogfQogCiBKSVRCeUlkR2VuZXJhdG9yOjpKSVRCeUlk
R2VuZXJhdG9yKAotICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlT3JpZ2luIGNvZGVPcmln
aW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0
ZXJzLAotICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBTcGlsbFJlZ2lz
dGVyc01vZGUgc3BpbGxNb2RlKQotICAgIDogSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoY29kZUJs
b2NrLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSkKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NUeXBlIGFj
Y2Vzc1R5cGUsCisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIEpTVmFsdWVS
ZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLAorICAgIFNwaWxsUmVnaXN0ZXJzTW9kZSBzcGls
bE1vZGUpCisgICAgOiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcihjb2RlQmxvY2ssIGNvZGVPcmln
aW4sIGNhbGxTaXRlLCBhY2Nlc3NUeXBlKQogICAgICwgbV9iYXNlKGJhc2UpCiAgICAgLCBtX3Zh
bHVlKHZhbHVlKQogewpAQCAtMTE0LDcgKzExNiw4IEBAIHZvaWQgSklUQnlJZEdlbmVyYXRvcjo6
Z2VuZXJhdGVGYXN0UGF0aEMKIEpJVEdldEJ5SWRHZW5lcmF0b3I6OkpJVEdldEJ5SWRHZW5lcmF0
b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2Fs
bFNpdGVJbmRleCBjYWxsU2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsCiAg
ICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIFNwaWxsUmVnaXN0ZXJzTW9k
ZSBzcGlsbE1vZGUpCi0gICAgOiBKSVRCeUlkR2VuZXJhdG9yKGNvZGVCbG9jaywgY29kZU9yaWdp
biwgY2FsbFNpdGUsIHVzZWRSZWdpc3RlcnMsIGJhc2UsIHZhbHVlLCBzcGlsbE1vZGUpCisgICAg
OiBKSVRCeUlkR2VuZXJhdG9yKAorICAgICAgICBjb2RlQmxvY2ssIGNvZGVPcmlnaW4sIGNhbGxT
aXRlLCBBY2Nlc3NUeXBlOjpHZXQsIHVzZWRSZWdpc3RlcnMsIGJhc2UsIHZhbHVlLCBzcGlsbE1v
ZGUpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoYmFzZS5wYXlsb2FkR1BSKCkgIT0gdmFsdWUudGFn
R1BSKCkpOwogfQpAQCAtMTQwLDcgKzE0Myw4IEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3I6OkpJVFB1
dEJ5SWRHZW5lcmF0b3IKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJl
Z2lzdGVycywKICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVn
IHNjcmF0Y2gsIFNwaWxsUmVnaXN0ZXJzTW9kZSBzcGlsbE1vZGUsCiAgICAgRUNNQU1vZGUgZWNt
YU1vZGUsIFB1dEtpbmQgcHV0S2luZCkKLSAgICA6IEpJVEJ5SWRHZW5lcmF0b3IoY29kZUJsb2Nr
LCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgdXNlZFJlZ2lzdGVycywgYmFzZSwgdmFsdWUsIHNwaWxs
TW9kZSkKKyAgICA6IEpJVEJ5SWRHZW5lcmF0b3IoCisgICAgICAgIGNvZGVCbG9jaywgY29kZU9y
aWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OlB1dCwgdXNlZFJlZ2lzdGVycywgYmFzZSwgdmFs
dWUsIHNwaWxsTW9kZSkKICAgICAsIG1fc2NyYXRjaChzY3JhdGNoKQogICAgICwgbV9lY21hTW9k
ZShlY21hTW9kZSkKICAgICAsIG1fcHV0S2luZChwdXRLaW5kKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAkocmV2aXNp
b24gMTg5NDkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdl
bmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiSlNDSlNW
YWx1ZS5oIgogI2luY2x1ZGUgIlB1dEtpbmQuaCIKICNpbmNsdWRlICJSZWdpc3RlclNldC5oIgor
I2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00
MSw3ICs0Miw3IEBAIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIEpJVElubGluZUNhY2hlR2VuZXJh
dG9yIHsKIHByb3RlY3RlZDoKICAgICBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcigpIHsgfQotICAg
IEpJVElubGluZUNhY2hlR2VuZXJhdG9yKENvZGVCbG9jayosIENvZGVPcmlnaW4sIENhbGxTaXRl
SW5kZXgpOworICAgIEpJVElubGluZUNhY2hlR2VuZXJhdG9yKENvZGVCbG9jayosIENvZGVPcmln
aW4sIENhbGxTaXRlSW5kZXgsIEFjY2Vzc1R5cGUpOwogICAgIAogcHVibGljOgogICAgIFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fc3R1YkluZm87IH0KQEAg
LTU2LDggKzU3LDggQEAgcHJvdGVjdGVkOgogICAgIEpJVEJ5SWRHZW5lcmF0b3IoKSB7IH0KIAog
ICAgIEpJVEJ5SWRHZW5lcmF0b3IoCi0gICAgICAgIENvZGVCbG9jayosIENvZGVPcmlnaW4sIENh
bGxTaXRlSW5kZXgsIGNvbnN0IFJlZ2lzdGVyU2V0JiwgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1
ZVJlZ3MgdmFsdWUsCi0gICAgICAgIFNwaWxsUmVnaXN0ZXJzTW9kZSBzcGlsbE1vZGUpOworICAg
ICAgICBDb2RlQmxvY2sqLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlLCBj
b25zdCBSZWdpc3RlclNldCYsIEpTVmFsdWVSZWdzIGJhc2UsCisgICAgICAgIEpTVmFsdWVSZWdz
IHZhbHVlLCBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlKTsKICAgICAKIHB1YmxpYzoKICAg
ICB2b2lkIHJlcG9ydFNsb3dQYXRoQ2FsbChNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgc2xvd1BhdGhC
ZWdpbiwgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTg5NDkzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTYzLDI0ICsxNjMsNiBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdl
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShiYXNlVmFsdWUuZ2V0KGV4ZWMsIGlkZW50LCBz
bG90KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJ
ZEJ1aWxkTGlzdChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywg
RW5jb2RlZEpTVmFsdWUgYmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKLXsKLSAgICBWTSog
dm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKLQotICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCB1
aWQpOwotICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+
KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKTsKLQotICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGJhc2UpOwotICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSk7Ci0gICAg
Ym9vbCBoYXNSZXN1bHQgPSBiYXNlVmFsdWUuZ2V0UHJvcGVydHlTbG90KGV4ZWMsIGlkZW50LCBz
bG90KTsKLSAgICAKLSAgICBpZiAoYWNjZXNzVHlwZSA9PSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBl
PihzdHViSW5mby0+YWNjZXNzVHlwZSkpCi0gICAgICAgIGJ1aWxkR2V0QnlJRExpc3QoZXhlYywg
YmFzZVZhbHVlLCBpZGVudCwgc2xvdCwgKnN0dWJJbmZvKTsKLQotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoaGFzUmVzdWx0PyBzbG90LmdldFZhbHVlKGV4ZWMsIGlkZW50KSA6IGpzVW5kZWZp
bmVkKCkpOwotfQotCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5
SWRPcHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywg
RW5jb2RlZEpTVmFsdWUgYmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKIHsKICAgICBWTSog
dm0gPSAmZXhlYy0+dm0oKTsKQEAgLTE5Nyw3ICsxNzksNiBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAgICAgICAgIHN0dWJJbmZvLT5zZWVuID0gdHJ1ZTsKICAg
ICAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGhhc1Jlc3VsdD8gc2xvdC5nZXRWYWx1ZShl
eGVjLCBpZGVudCkgOiBqc1VuZGVmaW5lZCgpKTsKLQogfQogCiBFbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkluT3B0aW1pemUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8sIEpTQ2VsbCogYmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIGtleSkK
QEAgLTM5NCw5MCArMzc1LDYgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRE
aXJlYwogICAgICAgICBzdHViSW5mby0+c2VlbiA9IHRydWU7CiB9CiAKLXZvaWQgSklUX09QRVJB
VElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0QnVpbGRMaXN0KEV4ZWNTdGF0ZSogZXhlYywgU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotewotICAg
IFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOwotICAgIAotICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9t
VWlkKHZtLCB1aWQpOwotICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFj
Y2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKTsKLQotICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSk7Ci0gICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFz
ZVZhbHVlLCB0cnVlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7Ci0gICAg
Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlVmFsdWUuaXNDZWxsKCkgPyBiYXNlVmFs
dWUuYXNDZWxsKCktPnN0cnVjdHVyZSgqdm0pIDogbnVsbHB0cjsgCi0gICAgYmFzZVZhbHVlLnB1
dChleGVjLCBpZGVudCwgdmFsdWUsIHNsb3QpOwotCi0gICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3Rh
dGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBidWlsZFB1dEJ5SWRMaXN0KGV4ZWMsIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBp
ZGVudCwgc2xvdCwgKnN0dWJJbmZvLCBOb3REaXJlY3QpOwotfQotCi12b2lkIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUqIGV4ZWMsIFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKLXsKLSAg
ICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJv
bVVpZCh2bSwgdWlkKTsKLSAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxB
Y2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSk7Ci0KLSAgICBKU1ZhbHVlIHZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpOwotICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJh
c2VWYWx1ZSwgZmFsc2UsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKLQot
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZVZhbHVlLmlzQ2VsbCgpID8gYmFzZVZhbHVl
LmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKnZtKSA6IG51bGxwdHI7Ci0gICAgYmFzZVZhbHVlLnB1dChl
eGVjLCBpZGVudCwgdmFsdWUsIHNsb3QpOwotICAgIAotICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0
YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIAotICAgIGJ1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZVZhbHVlLCBzdHJ1Y3R1
cmUsIGlkZW50LCBzbG90LCAqc3R1YkluZm8sIE5vdERpcmVjdCk7Ci19Ci0KLXZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0QnVpbGRMaXN0KEV4ZWNTdGF0ZSog
ZXhlYywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlk
KQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIAotICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlm
aWVyOjpmcm9tVWlkKHZtLCB1aWQpOwotICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRp
Y19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKTsKLSAgICAKLSAgICBKU1Zh
bHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgSlNPYmplY3Qq
IGJhc2VPYmplY3QgPSBhc09iamVjdChKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpKTsKLSAg
ICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlT2JqZWN0LCB0cnVlLCBleGVjLT5jb2RlQmxvY2so
KS0+cHV0QnlJZENvbnRleHQoKSk7Ci0KLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VP
YmplY3QtPnN0cnVjdHVyZSgqdm0pOyAgICAKLSAgICBiYXNlT2JqZWN0LT5wdXREaXJlY3QoKnZt
LCBpZGVudCwgdmFsdWUsIHNsb3QpOwotICAgIAotICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRp
Y19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIAotICAgIGJ1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZU9iamVjdCwgc3RydWN0dXJl
LCBpZGVudCwgc2xvdCwgKnN0dWJJbmZvLCBEaXJlY3QpOwotfQotCi12b2lkIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUqIGV4
ZWMsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkK
LXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmll
cjo6ZnJvbVVpZCh2bSwgdWlkKTsKLSAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNf
Y2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSk7Ci0KLSAgICBKU1ZhbHVlIHZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgSlNPYmplY3QqIGJhc2VP
YmplY3QgPSBhc09iamVjdChKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpKTsKLSAgICBQdXRQ
cm9wZXJ0eVNsb3Qgc2xvdChiYXNlT2JqZWN0LCBmYWxzZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1
dEJ5SWRDb250ZXh0KCkpOwotCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlT2JqZWN0
LT5zdHJ1Y3R1cmUoKnZtKTsgICAgCi0gICAgYmFzZU9iamVjdC0+cHV0RGlyZWN0KCp2bSwgaWRl
bnQsIHZhbHVlLCBzbG90KTsKLQotICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFj
Y2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAot
ICAgIGJ1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZU9iamVjdCwgc3RydWN0dXJlLCBpZGVudCwg
c2xvdCwgKnN0dWJJbmZvLCBEaXJlY3QpOwotfQotCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUmVhbGxvY2F0ZVN0b3JhZ2VBbmRGaW5pc2hQdXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogYmFzZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgRW5j
b2RlZEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMTg5NDkzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgs
NyArMjgsNiBAQAogCiAjaWYgRU5BQkxFKEpJVCkKIAotI2luY2x1ZGUgIkFjY2Vzc29yQ2FsbEpJ
VFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiQmluYXJ5U3dpdGNoLmgiCiAjaW5jbHVkZSAiQ0Nh
bGxIZWxwZXJzLmgiCiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgpAQCAtMTI5LDM1ICsxMjgs
NiBAQCBzdGF0aWMgdm9pZCByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoCiAjZW5kaWYKIH0KIAotc3Rh
dGljIHZvaWQgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigKLSAgICBjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvLAotICAgIENDYWxsSGVscGVycyYgaml0LCBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgR1BSUmVnIHNjcmF0Y2hHUFIpCi17Ci0gICAg
aWYgKGNvbmRpdGlvbi5pc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50
KCkpIHsKLSAgICAgICAgY29uZGl0aW9uLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKS0+YWRkVHJhbnNp
dGlvbldhdGNocG9pbnQoCi0gICAgICAgICAgICBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVC
bG9jaywgY29uZGl0aW9uKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IGNvbmRpdGlvbi5vYmplY3QoKS0+c3RydWN0dXJlKCk7Ci0gICAgUkVM
RUFTRV9BU1NFUlQoY29uZGl0aW9uLnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eUFzc3VtaW5nSW1w
dXJlUHJvcGVydHlXYXRjaHBvaW50KHN0cnVjdHVyZSkpOwotICAgIGppdC5tb3ZlKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGNvbmRpdGlvbi5vYmplY3QoKSksIHNjcmF0Y2hHUFIpOwot
ICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoCi0gICAgICAgIGppdC5icmFuY2hTdHJ1Y3R1cmUoCi0g
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCi0gICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCBzdHJ1Y3R1cmUpKTsKLX0KLQotc3RhdGljIHZvaWQgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbnMoCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIHNldCwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywKLSAgICBDQ2FsbEhl
bHBlcnMmIGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEdQUlJl
ZyBzY3JhdGNoR1BSKQotewotICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24m
IGNvbmRpdGlvbiA6IHNldCkgewotICAgICAgICBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9u
KAotICAgICAgICAgICAgY29uZGl0aW9uLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBqaXQsIGZhaWx1
cmVDYXNlcywgc2NyYXRjaEdQUik7Ci0gICAgfQotfQotCiBzdGF0aWMgdm9pZCByZXBsYWNlV2l0
aEp1bXAoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25zdCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgdGFyZ2V0KQogewogICAgIGlmIChNYWNyb0Fzc2VtYmxlcjo6Y2FuSnVtcFJlcGxhY2VQ
YXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaCgpKSB7CkBAIC0xNjgsNiArMTM4LDggQEAgc3RhdGlj
IHZvaWQgcmVwbGFjZVdpdGhKdW1wKFN0cnVjdHVyZVN0dQogICAgICAgICAgICAgQ29kZUxvY2F0
aW9uTGFiZWwodGFyZ2V0KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICByZXNldEdl
dEJ5SURDaGVja0FuZExvYWQoc3R1YkluZm8pOwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoSnVtcCgKICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9m
ZnNldCgKQEAgLTE3NSw1MiArMTQ3LDYgQEAgc3RhdGljIHZvaWQgcmVwbGFjZVdpdGhKdW1wKFN0
cnVjdHVyZVN0dQogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCh0YXJnZXQpKTsKIH0KIAotc3Rh
dGljIHZvaWQgZW1pdFJlc3RvcmVTY3JhdGNoKE1hY3JvQXNzZW1ibGVyJiBzdHViSml0LCBib29s
IG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBHUFJSZWcgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAmIHN1Y2Nlc3MsIE1hY3JvQXNzZW1ibGVyOjpKdW1wJiBmYWlsLCBNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzKQotewotICAgIGlmIChuZWVkVG9SZXN0b3JlU2NyYXRj
aCkgewotICAgICAgICBzdHViSml0LnBvcFRvUmVzdG9yZShzY3JhdGNoR1BSKTsKLSAgICAgICAg
Ci0gICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKLSAgICAgICAgCi0gICAgICAgIC8v
IGxpbmsgZmFpbHVyZSBjYXNlcyBoZXJlLCBzbyB3ZSBjYW4gcG9wIHNjcmF0Y2hHUFIsIGFuZCB0
aGVuIGp1bXAgYmFjay4KLSAgICAgICAgZmFpbHVyZUNhc2VzLmxpbmsoJnN0dWJKaXQpOwotICAg
ICAgICAKLSAgICAgICAgc3R1YkppdC5wb3BUb1Jlc3RvcmUoc2NyYXRjaEdQUik7Ci0gICAgICAg
IAotICAgICAgICBmYWlsID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgCi0gICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOwotfQotCi1zdGF0aWMgdm9pZCBs
aW5rUmVzdG9yZVNjcmF0Y2goTGlua0J1ZmZlciYgcGF0Y2hCdWZmZXIsIGJvb2wgbmVlZFRvUmVz
dG9yZVNjcmF0Y2gsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3MsIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGZhaWwsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXMsIENvZGVM
b2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VCZWdp
bikKLXsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN1Y2Nlc3NMYWJlbCk7Ci0gICAg
ICAgIAotICAgIGlmIChuZWVkVG9SZXN0b3JlU2NyYXRjaCkgewotICAgICAgICBwYXRjaEJ1ZmZl
ci5saW5rKGZhaWwsIHNsb3dDYXNlQmVnaW4pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IAotICAgIC8vIGxpbmsgZmFpbHVyZSBjYXNlcyBkaXJlY3RseSBiYWNrIHRvIG5vcm1hbCBwYXRo
Ci0gICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMsIHNsb3dDYXNlQmVnaW4pOwotfQot
Ci1zdGF0aWMgdm9pZCBsaW5rUmVzdG9yZVNjcmF0Y2goTGlua0J1ZmZlciYgcGF0Y2hCdWZmZXIs
IGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzcywgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbCwg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlcykKLXsKLSAgICBsaW5rUmVzdG9y
ZVNjcmF0Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdWNjZXNzLCBmYWls
LCBmYWlsdXJlQ2FzZXMsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0
KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsK
LX0KLQotZW51bSBCeUlkU3R1YktpbmQgewotICAgIEdldFZhbHVlLAotICAgIEdldFVuZGVmaW5l
ZCwKLSAgICBDYWxsR2V0dGVyLAotICAgIENhbGxDdXN0b21HZXR0ZXIsCi0gICAgQ2FsbFNldHRl
ciwKLSAgICBDYWxsQ3VzdG9tU2V0dGVyCi19OwotCiBzdGF0aWMgY29uc3QgY2hhciogdG9TdHJp
bmcoQnlJZFN0dWJLaW5kIGtpbmQpCiB7CiAgICAgc3dpdGNoIChraW5kKSB7CkBAIC0yNzcsMzI1
ICsyMDMsNiBAQCBzdGF0aWMgRnVuY3Rpb25QdHIgY3VzdG9tRm9yKGNvbnN0IFB1dFByCiAgICAg
cmV0dXJuIEZ1bmN0aW9uUHRyKHNsb3QuY3VzdG9tU2V0dGVyKCkpOwogfQogCi1zdGF0aWMgYm9v
bCBnZW5lcmF0ZUJ5SWRTdHViKAotICAgIEV4ZWNTdGF0ZSogZXhlYywgQnlJZFN0dWJLaW5kIGtp
bmQsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwKLSAgICBGdW5jdGlvblB0ciBjdXN0
b20sIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQmIGNvbmRpdGlvblNldCwKLSAgICBKU09iamVjdCogYWx0ZXJuYXRlQmFzZSwgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgYm9vbCBsb2FkVGFyZ2V0
RnJvbVByb3h5LAotICAgIFdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQsIENvZGVMb2NhdGlv
bkxhYmVsIHN1Y2Nlc3NMYWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VMYWJlbCwKLSAg
ICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+JiBzdHViUm91dGluZSkKLXsKLSAgICBBU1NFUlQoY29u
ZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlX
YXRjaHBvaW50KCkpOwotICAgIAotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIEdQUlJl
ZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKTsK
LSAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSBKU1ZhbHVlUmVncygKLSNpZiBVU0UoSlNWQUxV
RTMyXzY0KQotICAgICAgICBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVl
VGFnR1BSKSwKLSNlbmRpZgotICAgICAgICBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBh
dGNoLnZhbHVlR1BSKSk7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBUZW1wUmVnaXN0ZXJTZXQo
c3R1YkluZm8ucGF0Y2gudXNlZFJlZ2lzdGVycykuZ2V0RnJlZUdQUigpOwotICAgIGJvb2wgbmVl
ZFRvUmVzdG9yZVNjcmF0Y2ggPSBzY3JhdGNoR1BSID09IEludmFsaWRHUFJSZWc7Ci0gICAgUkVM
RUFTRV9BU1NFUlQoIW5lZWRUb1Jlc3RvcmVTY3JhdGNoIHx8IChraW5kID09IEdldFZhbHVlIHx8
IGtpbmQgPT0gR2V0VW5kZWZpbmVkKSk7Ci0gICAgCi0gICAgQ0NhbGxIZWxwZXJzIHN0dWJKaXQo
JmV4ZWMtPnZtKCksIGV4ZWMtPmNvZGVCbG9jaygpKTsKLSAgICBpZiAobmVlZFRvUmVzdG9yZVNj
cmF0Y2gpIHsKLSAgICAgICAgc2NyYXRjaEdQUiA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2Ny
YXRjaEdQUigKLSAgICAgICAgICAgIGJhc2VHUFIsIHZhbHVlUmVncy50YWdHUFIoKSwgdmFsdWVS
ZWdzLnBheWxvYWRHUFIoKSk7Ci0gICAgICAgIHN0dWJKaXQucHVzaFRvU2F2ZShzY3JhdGNoR1BS
KTsKLSAgICAgICAgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSB0cnVlOwotICAgIH0KLSAgICAKLSAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzOwotCi0gICAgR1BSUmVnIGJh
c2VGb3JHZXRHUFI7Ci0gICAgaWYgKGxvYWRUYXJnZXRGcm9tUHJveHkpIHsKLSAgICAgICAgYmFz
ZUZvckdldEdQUiA9IHZhbHVlUmVncy5wYXlsb2FkR1BSKCk7Ci0gICAgICAgIGZhaWx1cmVDYXNl
cy5hcHBlbmQoc3R1YkppdC5icmFuY2g4KAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpT
Q2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoUHVyZUZvcndhcmRpbmdQcm94eVR5cGUpKSk7Ci0KLSAgICAgICAgc3R1
YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTUHJveHk6OnRh
cmdldE9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIAotICAgICAgICBmYWlsdXJlQ2Fz
ZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoU3RydWN0dXJlKAotICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNj
cmF0Y2hHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCi0gICAgICAgICAgICBzdHJ1
Y3R1cmUpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBiYXNlRm9yR2V0R1BSID0gYmFzZUdQUjsK
LQotICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoU3RydWN0dXJlKAot
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCAKLSAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VGb3JHZXRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIAotICAgICAgICAgICAgc3RydWN0dXJlKSk7Ci0gICAgfQotCi0gICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICBpZiAoc3RydWN0dXJlLT5uZWVk
SW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkgfHwgY29uZGl0aW9uU2V0Lm5lZWRJbXB1cmVQcm9w
ZXJ0eVdhdGNocG9pbnQoKSkKLSAgICAgICAgdm0tPnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVy
ZVByb3BlcnR5KHByb3BlcnR5TmFtZSwgc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2sp
KTsKLQotICAgIGlmICh3YXRjaHBvaW50U2V0KQotICAgICAgICB3YXRjaHBvaW50U2V0LT5hZGQo
c3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKLQotICAgIGNoZWNrT2JqZWN0UHJv
cGVydHlDb25kaXRpb25zKAotICAgICAgICBjb25kaXRpb25TZXQsIGNvZGVCbG9jaywgc3R1Yklu
Zm8sIHN0dWJKaXQsIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7Ci0KLSAgICBpZiAoaXNWYWxp
ZE9mZnNldChvZmZzZXQpKSB7Ci0gICAgICAgIFN0cnVjdHVyZSogY3VyclN0cnVjdHVyZTsKLSAg
ICAgICAgaWYgKGNvbmRpdGlvblNldC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjdXJyU3RydWN0
dXJlID0gc3RydWN0dXJlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjdXJyU3RydWN0dXJl
ID0gY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2JqZWN0KCktPnN0cnVjdHVyZSgp
OwotICAgICAgICBjdXJyU3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNl
bWVudHMoKnZtLCBvZmZzZXQpOwotICAgIH0KLSAgICAKLSAgICBHUFJSZWcgYmFzZUZvckFjY2Vz
c0dQUiA9IEludmFsaWRHUFJSZWc7Ci0gICAgaWYgKGtpbmQgIT0gR2V0VW5kZWZpbmVkKSB7Ci0g
ICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgLy8gV2Ug
Y291bGQgaGF2ZSBjbG9iYmVyZWQgc2NyYXRjaEdQUiBlYXJsaWVyLCBzbyB3ZSBoYXZlIHRvIHJl
bG9hZCBmcm9tIGJhc2VHUFIgdG8gZ2V0IHRoZSB0YXJnZXQuCi0gICAgICAgICAgICBpZiAobG9h
ZFRhcmdldEZyb21Qcm94eSkKLSAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNQcm94eTo6dGFyZ2V0T2Zmc2V0KCkpLCBiYXNl
Rm9yR2V0R1BSKTsKLSAgICAgICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihhbHRlcm5hdGVCYXNlKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBiYXNl
Rm9yQWNjZXNzR1BSID0gc2NyYXRjaEdQUjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IC8vIEZvciBwcm94eSBvYmplY3RzLCB3ZSBuZWVkIHRvIGRvIGFsbCB0aGUgU3RydWN0dXJlIGNo
ZWNrcyBiZWZvcmUgbW92aW5nIHRoZSBiYXNlR1BSIGludG8KLSAgICAgICAgICAgIC8vIGJhc2VG
b3JHZXRHUFIgYmVjYXVzZSBpZiB3ZSBmYWlsIGFueSBvZiB0aGUgY2hlY2tzIHRoZW4gd2Ugd291
bGQgaGF2ZSB0aGUgd3JvbmcgdmFsdWUgaW4gYmFzZUdQUgotICAgICAgICAgICAgLy8gb24gdGhl
IHNsb3cgcGF0aC4KLSAgICAgICAgICAgIGlmIChsb2FkVGFyZ2V0RnJvbVByb3h5KQotICAgICAg
ICAgICAgICAgIHN0dWJKaXQubW92ZShzY3JhdGNoR1BSLCBiYXNlRm9yR2V0R1BSKTsKLSAgICAg
ICAgICAgIGJhc2VGb3JBY2Nlc3NHUFIgPSBiYXNlRm9yR2V0R1BSOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgR1BSUmVnIGxvYWRlZFZhbHVlR1BSID0gSW52YWxpZEdQUlJlZzsKLSAgICBpZiAo
a2luZCA9PSBHZXRVbmRlZmluZWQpCi0gICAgICAgIHN0dWJKaXQubW92ZVRydXN0ZWRWYWx1ZShq
c1VuZGVmaW5lZCgpLCB2YWx1ZVJlZ3MpOwotICAgIGVsc2UgaWYgKGtpbmQgIT0gQ2FsbEN1c3Rv
bUdldHRlciAmJiBraW5kICE9IENhbGxDdXN0b21TZXR0ZXIpIHsKLSAgICAgICAgaWYgKGtpbmQg
PT0gR2V0VmFsdWUpCi0gICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUiA9IHZhbHVlUmVncy5wYXls
b2FkR1BSKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSID0gc2Ny
YXRjaEdQUjsKLSAgICAgICAgCi0gICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSOwotICAgICAgICBp
ZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgICAgIHN0b3JhZ2VHUFIgPSBiYXNl
Rm9yQWNjZXNzR1BSOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0
cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlRm9yQWNjZXNzR1BSLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpLCBsb2FkZWRWYWx1ZUdQUik7Ci0gICAgICAgICAgICBzdG9yYWdlR1BS
ID0gbG9hZGVkVmFsdWVHUFI7Ci0gICAgICAgIH0KLSAgICAgICAgCi0jaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICAgICAgc3R1YkppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFn
ZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uob2Zmc2V0KSksIGxvYWRlZFZhbHVlR1BSKTsKLSNl
bHNlCi0gICAgICAgIGlmIChraW5kID09IEdldFZhbHVlKQotICAgICAgICAgICAgc3R1YkppdC5s
b2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgb2Zmc2V0UmVsYXRpdmVU
b0Jhc2Uob2Zmc2V0KSArIFRhZ09mZnNldCksIHZhbHVlUmVncy50YWdHUFIoKSk7Ci0gICAgICAg
IHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9mZnNl
dFJlbGF0aXZlVG9CYXNlKG9mZnNldCkgKyBQYXlsb2FkT2Zmc2V0KSwgbG9hZGVkVmFsdWVHUFIp
OwotI2VuZGlmCi0gICAgfQotCi0gICAgLy8gU3R1ZmYgZm9yIGN1c3RvbSBnZXR0ZXJzLgotICAg
IE1hY3JvQXNzZW1ibGVyOjpDYWxsIG9wZXJhdGlvbkNhbGw7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgaGFuZGxlckNhbGw7Ci0KLSAgICAvLyBTdHVmZiBmb3IgSlMgZ2V0dGVycy4KLSAgICBN
YWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIGFkZHJlc3NPZkxpbmtGdW5jdGlvbkNoZWNrOwot
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGZhc3RQYXRoQ2FsbDsKLSAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBzbG93UGF0aENhbGw7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rSW5mbz4g
Y2FsbExpbmtJbmZvOwotCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzcywgZmFpbDsK
LSAgICBpZiAoa2luZCAhPSBHZXRWYWx1ZSAmJiBraW5kICE9IEdldFVuZGVmaW5lZCkgewotICAg
ICAgICAvLyBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdoZW5ldmVyIHRoaXMgY2FsbCBpcyBtYWRl
IGluIHRoZSBmdXR1cmUsIHdlIHJlbWVtYmVyIHRoZQotICAgICAgICAvLyBwbGFjZSB0aGF0IHdl
IG1hZGUgaXQgZnJvbS4gSXQganVzdCBzbyBoYXBwZW5zIHRvIGJlIHRoZSBwbGFjZSB0aGF0IHdl
IGFyZSBhdAotICAgICAgICAvLyByaWdodCBub3chCi0gICAgICAgIHN0dWJKaXQuc3RvcmUzMihN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHN0dWJJbmZvLmNhbGxTaXRlSW5kZXguYml0cygp
KSwKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxS
ZWdpc3Rlcj4oSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKLQotICAgICAgICBpZiAoa2luZCA9
PSBDYWxsR2V0dGVyIHx8IGtpbmQgPT0gQ2FsbFNldHRlcikgewotICAgICAgICAgICAgLy8gQ3Jl
YXRlIGEgSlMgY2FsbCB1c2luZyBhIEpTIGNhbGwgaW5saW5lIGNhY2hlLiBBc3N1bWUgdGhhdDoK
LSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyAtIFNQIGlzIGFsaWduZWQgYW5kIHJlcHJl
c2VudHMgdGhlIGV4dGVudCBvZiB0aGUgY2FsbGluZyBjb21waWxlcidzIHN0YWNrIHVzYWdlLgot
ICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIC0gRlAgaXMgc2V0IGNvcnJlY3RseSAoaS5l
LiBpdCBwb2ludHMgdG8gdGhlIGNhbGxlcidzIGNhbGwgZnJhbWUgaGVhZGVyKS4KLSAgICAgICAg
ICAgIC8vCi0gICAgICAgICAgICAvLyAtIFNQIC0gRlAgaXMgYW4gYWxpZ25lZCBkaWZmZXJlbmNl
LgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIC0gQW55IGJ5dGUgYmV0d2VlbiBGUCAo
ZXhjbHVzaXZlKSBhbmQgU1AgKGluY2x1c2l2ZSkgY291bGQgYmUgbGl2ZSBpbiB0aGUgY2FsbGlu
ZwotICAgICAgICAgICAgLy8gICBjb2RlLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8v
IFRoZXJlZm9yZSwgd2UgdGVtcG9yYXJpbHkgZ3JvdyB0aGUgc3RhY2sgZm9yIHRoZSBwdXJwb3Nl
IG9mIHRoZSBjYWxsIGFuZCB0aGVuCi0gICAgICAgICAgICAvLyBzaHJpbmsgaXQgYWZ0ZXIuCi0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGNhbGxMaW5rSW5mbyA9IHN0ZDo6bWFrZV91bmlxdWU8
Q2FsbExpbmtJbmZvPigpOwotCi0gICAgICAgICAgICAvLyBGSVhNRTogSWYgd2UgZ2VuZXJhdGVk
IGEgcG9seW1vcnBoaWMgY2FsbCBzdHViIHRoYXQganVtcGVkIGJhY2sgdG8gdGhlIGdldHRlcgot
ICAgICAgICAgICAgLy8gc3R1Yiwgd2hpY2ggdGhlbiBqdW1wZWQgYmFjayB0byB0aGUgbWFpbiBj
b2RlLCB0aGVuIHdlJ2QgaGF2ZSBhIHJlYWNoYWJpbGl0eQotICAgICAgICAgICAgLy8gc2l0dWF0
aW9uIHRoYXQgdGhlIEdDIGRvZXNuJ3Qga25vdyBhYm91dC4gVGhlIEdDIHdvdWxkIGVuc3VyZSB0
aGF0IHRoZSBwb2x5bW9ycGhpYwotICAgICAgICAgICAgLy8gY2FsbCBzdHViIHN0YXllZCBhbGl2
ZSwgYW5kIGl0IHdvdWxkIGVuc3VyZSB0aGF0IHRoZSBtYWluIGNvZGUgc3RheWVkIGFsaXZlLCBi
dXQKLSAgICAgICAgICAgIC8vIGl0IHdvdWxkbid0IGtub3cgdGhhdCB0aGUgZ2V0dGVyIHN0dWIg
d2FzIGFsaXZlLiBJZGVhbGx5IEpJVCBzdHViIHJvdXRpbmVzIHdvdWxkCi0gICAgICAgICAgICAv
LyBiZSBHQyBvYmplY3RzLCBhbmQgdGhlbiB3ZSdkIGJlIGFibGUgdG8gc2F5IHRoYXQgdGhlIHBv
bHltb3JwaGljIGNhbGwgc3R1YiBoYXMgYQotICAgICAgICAgICAgLy8gcmVmZXJlbmNlIHRvIHRo
ZSBnZXR0ZXIgc3R1Yi4KLSAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDg5MTQKLSAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+ZGlzYWxsb3dT
dHVicygpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2Fs
bChDYWxsTGlua0luZm86OkNhbGwsIHN0dWJJbmZvLmNvZGVPcmlnaW4sIGxvYWRlZFZhbHVlR1BS
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGRv
bmU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFRoZXJlIGlzIGEgJ3RoaXMnIGFyZ3Vt
ZW50IGJ1dCBub3RoaW5nIGVsc2UuCi0gICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlBhcmFt
ZXRlcnMgPSAxOwotICAgICAgICAgICAgLy8gLi4uIHVubGVzcyB3ZSdyZSBjYWxsaW5nIGEgc2V0
dGVyLgotICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ2FsbFNldHRlcikKLSAgICAgICAgICAgICAg
ICBudW1iZXJPZlBhcmFtZXRlcnMrKzsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gR2V0
IHRoZSBhY2Nlc3NvcjsgaWYgdGhlcmUgYWluJ3Qgb25lIHRoZW4gdGhlIHJlc3VsdCBpcyBqc1Vu
ZGVmaW5lZCgpLgotICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ2FsbFNldHRlcikgewotICAgICAg
ICAgICAgICAgIHN0dWJKaXQubG9hZFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MobG9hZGVkVmFsdWVHUFIsIEdldHRlclNldHRlcjo6b2Zmc2V0T2ZTZXR0
ZXIoKSksCi0gICAgICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSKTsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKAotICAgICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhsb2FkZWRWYWx1ZUdQUiwgR2V0dGVyU2V0
dGVyOjpvZmZzZXRPZkdldHRlcigpKSwKLSAgICAgICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVH
UFIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgcmV0
dXJuVW5kZWZpbmVkID0gc3R1YkppdC5icmFuY2hUZXN0UHRyKAotICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpaZXJvLCBsb2FkZWRWYWx1ZUdQUik7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIHVuc2lnbmVkIG51bWJlck9mUmVnc0ZvckNhbGwgPQotICAgICAgICAgICAgICAgIEpT
U3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUgKyBudW1iZXJPZlBhcmFtZXRlcnM7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQnl0ZXNGb3JDYWxsID0KLSAgICAg
ICAgICAgICAgICBudW1iZXJPZlJlZ3NGb3JDYWxsICogc2l6ZW9mKFJlZ2lzdGVyKSAtIHNpemVv
ZihDYWxsZXJGcmFtZUFuZFBDKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgdW5zaWduZWQg
YWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxsID0KLSAgICAgICAgICAgICAgICBXVEY6OnJvdW5k
VXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBudW1iZXJPZkJ5dGVzRm9yQ2Fs
bCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN0dWJKaXQuc3ViUHRyKAotICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoYWxpZ25lZE51bWJlck9mQnl0ZXNG
b3JDYWxsKSwKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVn
aXN0ZXIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyBjYWxsZWVGcmFtZSA9IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAotICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwKLSAgICAgICAgICAgICAgICAt
c3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgc3R1YkppdC5zdG9yZTMyKAotICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobnVtYmVyT2ZQYXJhbWV0ZXJzKSwKLSAgICAgICAg
ICAgICAgICBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KAotICAgICAgICAgICAgICAgICAgICBKU1N0
YWNrOjpBcmd1bWVudENvdW50ICogc2l6ZW9mKFJlZ2lzdGVyKSArIFBheWxvYWRPZmZzZXQpKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgc3R1YkppdC5zdG9yZUNlbGwoCi0gICAgICAgICAg
ICAgICAgbG9hZGVkVmFsdWVHUFIsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoSlNTdGFjazo6Q2Fs
bGVlICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwotCi0gICAgICAgICAgICBzdHViSml0LnN0b3JlQ2Vs
bCgKLSAgICAgICAgICAgICAgICBiYXNlRm9yR2V0R1BSLAotICAgICAgICAgICAgICAgIGNhbGxl
ZUZyYW1lLndpdGhPZmZzZXQoCi0gICAgICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KDApLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsU2V0dGVyKSB7Ci0gICAgICAgICAgICAgICAg
c3R1YkppdC5zdG9yZVZhbHVlKAotICAgICAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MsCi0gICAg
ICAgICAgICAgICAgICAgIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoCi0gICAgICAgICAgICAgICAg
ICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxKS5vZmZzZXQoKSAqIHNpemVvZihS
ZWdpc3RlcikpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgc2xvd0Nhc2UgPSBzdHViSml0LmJyYW5jaFB0cldpdGhQYXRjaCgK
LSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGxvYWRlZFZhbHVlR1BS
LCBhZGRyZXNzT2ZMaW5rRnVuY3Rpb25DaGVjaywKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cigwKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZhc3RQ
YXRoQ2FsbCA9IHN0dWJKaXQubmVhckNhbGwoKTsKLQotICAgICAgICAgICAgc3R1YkppdC5hZGRQ
dHIoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihjb2RlQmxv
Y2stPnN0YWNrUG9pbnRlck9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksCi0gICAgICAgICAg
ICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCi0gICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAgICAgIGlmIChraW5kID09
IENhbGxHZXR0ZXIpCi0gICAgICAgICAgICAgICAgc3R1YkppdC5zZXR1cFJlc3VsdHModmFsdWVS
ZWdzKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZG9uZS5hcHBlbmQoc3R1YkppdC5qdW1w
KCkpOwotICAgICAgICAgICAgc2xvd0Nhc2UubGluaygmc3R1YkppdCk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIHN0dWJKaXQubW92ZShsb2FkZWRWYWx1ZUdQUiwgR1BSSW5mbzo6cmVnVDAp
OwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgR1BSSW5mbzo6cmVnVDEp
OwotI2VuZGlmCi0gICAgICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIoY2FsbExpbmtJbmZvLmdldCgpKSwgR1BSSW5mbzo6cmVnVDIpOwotICAgICAgICAg
ICAgc2xvd1BhdGhDYWxsID0gc3R1YkppdC5uZWFyQ2FsbCgpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBzdHViSml0LmFkZFB0cigKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKGNvZGVCbG9jay0+c3RhY2tQb2ludGVyT2Zmc2V0KCkgKiBzaXplb2YoUmVn
aXN0ZXIpKSwKLSAgICAgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKLSAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAg
ICAgICAgICAgaWYgKGtpbmQgPT0gQ2FsbEdldHRlcikKLSAgICAgICAgICAgICAgICBzdHViSml0
LnNldHVwUmVzdWx0cyh2YWx1ZVJlZ3MpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBkb25l
LmFwcGVuZChzdHViSml0Lmp1bXAoKSk7Ci0gICAgICAgICAgICByZXR1cm5VbmRlZmluZWQubGlu
aygmc3R1YkppdCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChraW5kID09IENhbGxH
ZXR0ZXIpCi0gICAgICAgICAgICAgICAgc3R1YkppdC5tb3ZlVHJ1c3RlZFZhbHVlKGpzVW5kZWZp
bmVkKCksIHZhbHVlUmVncyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGRvbmUubGluaygm
c3R1YkppdCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBnZXR0ZXI6IEVuY29k
ZWRKU1ZhbHVlICgqR2V0VmFsdWVGdW5jKShFeGVjU3RhdGUqLCBKU09iamVjdCogc2xvdEJhc2Us
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgIC8v
IHNldHRlcjogdm9pZCAoKlB1dFZhbHVlRnVuYykoRXhlY1N0YXRlKiwgSlNPYmplY3QqIGJhc2Us
IEVuY29kZWRKU1ZhbHVlIHRoaXNPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKTsKLSNpZiBV
U0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ2FsbEN1c3RvbUdldHRlcikK
LSAgICAgICAgICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNl
Rm9yQWNjZXNzR1BSLCBiYXNlRm9yR2V0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihwcm9wZXJ0eU5hbWUuaW1wbCgpKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUZvckFjY2Vzc0dQUiwg
YmFzZUZvckdldEdQUiwgdmFsdWVSZWdzLmdwcigpKTsKLSNlbHNlCi0gICAgICAgICAgICBpZiAo
a2luZCA9PSBDYWxsQ3VzdG9tR2V0dGVyKQotICAgICAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VGb3JBY2Nlc3NHUFIsIGJhc2VGb3JHZXRHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKHByb3BlcnR5TmFtZS5pbXBsKCkpKTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShi
YXNlRm9yQWNjZXNzR1BSLCBiYXNlRm9yR2V0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkNlbGxUYWcpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB2YWx1ZVJlZ3Mu
dGFnR1BSKCkpOwotI2VuZGlmCi0gICAgICAgICAgICBzdHViSml0LnN0b3JlUHRyKEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCAmdm0tPnRvcENhbGxGcmFtZSk7Ci0KLSAgICAgICAgICAgIG9w
ZXJhdGlvbkNhbGwgPSBzdHViSml0LmNhbGwoKTsKLSAgICAgICAgICAgIGlmIChraW5kID09IENh
bGxDdXN0b21HZXR0ZXIpCi0gICAgICAgICAgICAgICAgc3R1YkppdC5zZXR1cFJlc3VsdHModmFs
dWVSZWdzKTsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vRXhjZXB0aW9uID0g
c3R1YkppdC5lbWl0RXhjZXB0aW9uQ2hlY2soQ0NhbGxIZWxwZXJzOjpJbnZlcnRlZEV4Y2VwdGlv
bkNoZWNrKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50
cyhDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodm0pLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3Rlcik7Ci0gICAgICAgICAgICBoYW5kbGVyQ2FsbCA9IHN0dWJKaXQuY2FsbCgpOwotICAgICAg
ICAgICAgc3R1YkppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIG5vRXhjZXB0aW9uLmxpbmsoJnN0dWJKaXQpOwotICAgICAgICB9Ci0gICAgfQot
ICAgIGVtaXRSZXN0b3JlU2NyYXRjaChzdHViSml0LCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc2Ny
YXRjaEdQUiwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzKTsKLSAgICAKLSAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKCp2bSwgc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCksIEpJVENvbXBp
bGF0aW9uQ2FuRmFpbCk7Ci0gICAgaWYgKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0
Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2Fz
ZXMsIHN1Y2Nlc3NMYWJlbCwgc2xvd0Nhc2VMYWJlbCk7Ci0gICAgaWYgKGtpbmQgPT0gQ2FsbEN1
c3RvbUdldHRlciB8fCBraW5kID09IENhbGxDdXN0b21TZXR0ZXIpIHsKLSAgICAgICAgcGF0Y2hC
dWZmZXIubGluayhvcGVyYXRpb25DYWxsLCBjdXN0b20pOwotICAgICAgICBwYXRjaEJ1ZmZlci5s
aW5rKGhhbmRsZXJDYWxsLCBsb29rdXBFeGNlcHRpb25IYW5kbGVyKTsKLSAgICB9IGVsc2UgaWYg
KGtpbmQgPT0gQ2FsbEdldHRlciB8fCBraW5kID09IENhbGxTZXR0ZXIpIHsKLSAgICAgICAgY2Fs
bExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2Fs
bChzbG93UGF0aENhbGwpLAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZihhZGRy
ZXNzT2ZMaW5rRnVuY3Rpb25DaGVjayksCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlv
bk9mTmVhckNhbGwoZmFzdFBhdGhDYWxsKSk7Ci0KLSAgICAgICAgcGF0Y2hCdWZmZXIubGluaygK
LSAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCwgQ29kZUxvY2F0aW9uTGFiZWwodm0tPmdldENUSVN0
dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7Ci0gICAgfQotICAgIAotICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlID0gRklOQUxJWkVfQ09ERV9GT1IoCi0gICAgICAgIGV4
ZWMtPmNvZGVCbG9jaygpLCBwYXRjaEJ1ZmZlciwKLSAgICAgICAgKCIlcyBhY2Nlc3Mgc3R1YiBm
b3IgJXMsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICAgICB0b1N0cmluZyhraW5kKSwgdG9D
U3RyaW5nKCpleGVjLT5jb2RlQmxvY2soKSkuZGF0YSgpLAotICAgICAgICAgICAgc3VjY2Vzc0xh
YmVsLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKLSAgICAKLSAgICBpZiAoa2luZCA9PSBDYWxsR2V0
dGVyIHx8IGtpbmQgPT0gQ2FsbFNldHRlcikKLSAgICAgICAgc3R1YlJvdXRpbmUgPSBhZG9wdFJl
ZihuZXcgQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUoY29kZSwgKnZtLCBXVEY6Om1vdmUoY2Fs
bExpbmtJbmZvKSkpOwotICAgIGVsc2UKLSAgICAgICAgc3R1YlJvdXRpbmUgPSBjcmVhdGVKSVRT
dHViUm91dGluZShjb2RlLCAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHRydWUp
OwotICAgIAotICAgIHJldHVybiB0cnVlOwotfQotCiBlbnVtIElubGluZUNhY2hlQWN0aW9uIHsK
ICAgICBHaXZlVXBPbkNhY2hlLAogICAgIFJldHJ5Q2FjaGVMYXRlciwKQEAgLTYyOSwxMzIgKzIz
Niw5NiBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeUlECiAgICAgaWYg
KE9wdGlvbnM6OmZvcmNlSUNGYWlsdXJlKCkpCiAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hl
OwogICAgIAotICAgIC8vIEZJWE1FOiBXcml0ZSBhIHRlc3QgdGhhdCBwcm92ZXMgd2UgbmVlZCB0
byBjaGVjayBmb3IgcmVjdXJzaW9uIGhlcmUganVzdAotICAgIC8vIGxpa2UgdGhlIGludGVycHJl
dGVyIGRvZXMsIHRoZW4gYWRkIGEgY2hlY2sgZm9yIHJlY3Vyc2lvbi4KKyAgICAvLyBGSVhNRTog
Q2FjaGUgcHJvcGVydHkgYWNjZXNzIGZvciBpbW1lZGlhdGVzLgorICAgIGlmICghYmFzZVZhbHVl
LmlzQ2VsbCgpKQorICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKIAogICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZt
KCk7Ci0KLSAgICBpZiAoKGlzSlNBcnJheShiYXNlVmFsdWUpIHx8IGlzSlNTdHJpbmcoYmFzZVZh
bHVlKSkgJiYgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsK
LSAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBh
dGNoLmJhc2VHUFIpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIEdQUlJlZyByZXN1
bHRUYWdHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVlVGFnR1BS
KTsKLSNlbmRpZgotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVn
PihzdHViSW5mby5wYXRjaC52YWx1ZUdQUik7Ci0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXIgc3R1
YkppdDsKKyAgICBTY3JpcHRFeGVjdXRhYmxlKiBvd25lciA9IGNvZGVCbG9jay0+b3duZXJTY3Jp
cHRFeGVjdXRhYmxlKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKIAotICAgICAgICBpZiAo
aXNKU0FycmF5KGJhc2VWYWx1ZSkpIHsKLSAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0g
VGVtcFJlZ2lzdGVyU2V0KHN0dWJJbmZvLnBhdGNoLnVzZWRSZWdpc3RlcnMpLmdldEZyZWVHUFIo
KTsKLSAgICAgICAgICAgIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSBmYWxzZTsKLQotICAg
ICAgICAgICAgaWYgKHNjcmF0Y2hHUFIgPT0gSW52YWxpZEdQUlJlZykgewotI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgICAgICAgICAgICAgc2NyYXRjaEdQUiA9IEFzc2VtYmx5SGVscGVyczo6c2Vs
ZWN0U2NyYXRjaEdQUihiYXNlR1BSLCByZXN1bHRHUFIpOwotI2Vsc2UKLSAgICAgICAgICAgICAg
ICBzY3JhdGNoR1BSID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIs
IHJlc3VsdEdQUiwgcmVzdWx0VGFnR1BSKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIHN0dWJK
aXQucHVzaFRvU2F2ZShzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBuZWVkVG9SZXN0b3Jl
U2NyYXRjaCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7Ci0KLSAgICAgICAgICAgIHN0dWJKaXQubG9hZDgo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZz
ZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHVi
Sml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaEdQUiwgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMihJc0FycmF5KSkpOwotICAgICAgICAgICAgZmFpbHVyZUNh
c2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2Ny
YXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzaykp
KTsKLQotICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAg
ICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQ
UiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAg
ICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpM
ZXNzVGhhbiwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSkpOwot
Ci0gICAgICAgICAgICBzdHViSml0Lm1vdmUoc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKLSNpZiBV
U0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgc3R1YkppdC5vcjY0KEFzc2VtYmx5SGVscGVyczo6
VHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpLCByZXN1bHRHUFIpOwotI2VsaWYgVVNFKEpTVkFM
VUUzMl82NCkKLSAgICAgICAgICAgIHN0dWJKaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHJlc3VsdFRhZ0dQUik7Ci0jZW5kaWYKLQotICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzcywgZmFpbDsKLQotICAgICAgICAg
ICAgZW1pdFJlc3RvcmVTY3JhdGNoKHN0dWJKaXQsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzY3Jh
dGNoR1BSLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgc3R1YkppdCwgY29kZUJsb2NrLCBK
SVRDb21waWxhdGlvbkNhbkZhaWwpOwotICAgICAgICAgICAgaWYgKHBhdGNoQnVmZmVyLmRpZEZh
aWxUb0FsbG9jYXRlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0K
LSAgICAgICAgICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVzdG9y
ZVNjcmF0Y2gsIHN0dWJJbmZvLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMpOwotCi0gICAg
ICAgICAgICBzdHViSW5mby5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0g
ICAgICAgICAgICAgICAgZXhlYy0+Y29kZUJsb2NrKCksIHBhdGNoQnVmZmVyLAotICAgICAgICAg
ICAgICAgICgiR2V0QnlJZCBhcnJheSBsZW5ndGggc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAl
cCIsCi0gICAgICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRh
dGEoKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCi0gICAgICAg
ICAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpKTsKLQotICAgICAgICAgICAgcmVwbGFjZVdpdGhKdW1wKHN0dWJJbmZvLCBz
dHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7Ci0gICAgICAgICAgICByZXBhdGNo
Q2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0
QnlJZCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IG5ld0Nhc2U7CiAKKyAgICBp
ZiAoaXNKU0FycmF5KGJhc2VWYWx1ZSkgJiYgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5sZW5ndGgpCisgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpnZXRMZW5ndGgo
dm0sIG93bmVyLCBBY2Nlc3NUeXBlOjpBcnJheUxlbmd0aCk7CisgICAgZWxzZSBpZiAoaXNKU1N0
cmluZyhiYXNlVmFsdWUpICYmIHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
bGVuZ3RoKQorICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Z2V0TGVuZ3RoKHZtLCBvd25l
ciwgQWNjZXNzVHlwZTo6U3RyaW5nTGVuZ3RoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKCFz
bG93LmlzQ2FjaGVhYmxlKCkgJiYgIXNsb3QuaXNVbnNldCgpKQorICAgICAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7CisgICAgICAgIAorICAgICAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFz
ZVZhbHVlLmFzQ2VsbCgpOworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxs
LT5zdHJ1Y3R1cmUodm0pOworICAgICAgICAKKyAgICAgICAgLy8gT3B0aW1pemUgc2VsZiBhY2Nl
c3MuCisgICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpVbnNldAor
ICAgICAgICAgICAgJiYgc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkKKyAgICAgICAgICAgICYmIHNs
b3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUKKyAgICAgICAgICAgICYmICFzbG90LndhdGNocG9p
bnRTZXQoKQorICAgICAgICAgICAgJiYgTWFjcm9Bc3NlbWJsZXI6OmlzQ29tcGFjdFB0ckFsaWdu
ZWRBZGRyZXNzT2Zmc2V0KG1heE9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShzbG90LmNh
Y2hlZE9mZnNldCgpKSkKKyAgICAgICAgICAgICYmIGFjdGlvbkZvckNlbGwodm0sIGJhc2VDZWxs
KSA9PSBBdHRlbXB0VG9DYWNoZSkgeworICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNo
aW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHMoKnZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAg
ICAgICAgICAgIHJlcGF0Y2hCeUlkU2VsZkFjY2Vzcygqdm0sIGNvZGVCbG9jaywgc3R1YkluZm8s
IHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LmNhY2hlZE9mZnNldCgpLCBvcGVyYXRpb25H
ZXRCeUlkT3B0aW1pemUsIHRydWUpOworICAgICAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRT
ZWxmKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKICAgICAg
ICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBT
dHJpbmcubGVuZ3RoIGNhc2UKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbHVyZSA9
IHN0dWJKaXQuYnJhbmNoOChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKFN0cmluZ1R5cGUpKTsKLQotICAgICAgICBzdHViSml0Lmxv
YWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU1N0cmluZzo6b2Zmc2V0T2ZM
ZW5ndGgoKSksIHJlc3VsdEdQUik7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBzdHVi
Sml0Lm9yNjQoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tNjQoVGFnVHlwZU51bWJlciksIHJl
c3VsdEdQUik7Ci0jZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBzdHViSml0Lm1vdmUo
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCByZXN1bHRU
YWdHUFIpOwotI2VuZGlmCisgICAgICAgIGJvb2wgbG9hZFRhcmdldEZyb21Qcm94eSA9IGZhbHNl
OworICAgICAgICBpZiAoYmFzZUNlbGwtPnR5cGUoKSA9PSBQdXJlRm9yd2FyZGluZ1Byb3h5VHlw
ZSkgeworICAgICAgICAgICAgYmFzZVZhbHVlID0ganNDYXN0PEpTUHJveHkqPihiYXNlQ2VsbCkt
PnRhcmdldCgpOworICAgICAgICAgICAgYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7Cisg
ICAgICAgICAgICBzdHJ1Y3R1cmUgPSBiYXNlQ2VsbC0+c3RydWN0dXJlKHZtKTsKKyAgICAgICAg
ICAgIGxvYWRUYXJnZXRGcm9tUHJveHkgPSB0cnVlOworICAgICAgICB9CiAKLSAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOworICAgICAgICBJbmxp
bmVDYWNoZUFjdGlvbiBhY3Rpb24gPSBhY3Rpb25Gb3JDZWxsKHZtLCBiYXNlQ2VsbCk7CisgICAg
ICAgIGlmIChhY3Rpb24gIT0gQXR0ZW1wdFRvQ2FjaGUpCisgICAgICAgICAgICByZXR1cm4gYWN0
aW9uOwogCi0gICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCBzdHViSml0LCBjb2Rl
QmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7Ci0gICAgICAgIGlmIChwYXRjaEJ1ZmZlci5k
aWRGYWlsVG9BbGxvY2F0ZSgpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Cisg
ICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuaXNVbnNldCgpID8gaW52YWxpZE9m
ZnNldCA6IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CiAgICAgICAgIAotICAgICAgICBwYXRjaEJ1ZmZl
ci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0
KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSkpOwotICAgICAgICBwYXRjaEJ1ZmZlci5s
aW5rKGZhaWx1cmUsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0
dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKLQotICAgICAgICBzdHViSW5mby5z
dHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAgICAgICBleGVjLT5j
b2RlQmxvY2soKSwgcGF0Y2hCdWZmZXIsCi0gICAgICAgICAgICAoIkdldEJ5SWQgc3RyaW5nIGxl
bmd0aCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAgICAgICAgICAgICB0b0NT
dHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5k
ZWx0YUNhbGxUb0RvbmUpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICAgICAgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAgICAgICBpZiAoc2xvdC5pc1Vuc2V0
KCkgfHwgc2xvdC5zbG90QmFzZSgpICE9IGJhc2VWYWx1ZSkgeworICAgICAgICAgICAgaWYgKHR5
cGVJbmZvLnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygpIHx8IHN0cnVjdHVyZS0+aXNEaWN0aW9u
YXJ5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGlmIChzbG90LmlzVW5zZXQoKSkgeworICAgICAgICAgICAgICAgIGNv
bmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcygKKyAgICAgICAg
ICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1
Y3R1cmUsIGlkZW50LmltcGwoKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5
SGl0KAorICAgICAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCksIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudC5pbXBsKCkpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5p
c1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIG9mZnNldCA9IHNsb3QuaXNVbnNldCgpID8gaW52YWxpZE9mZnNl
dCA6IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpOworICAgICAgICB9
CiAKLSAgICAgICAgcmVwbGFjZVdpdGhKdW1wKHN0dWJJbmZvLCBzdHViSW5mby5zdHViUm91dGlu
ZS0+Y29kZSgpLmNvZGUoKSk7Ci0gICAgICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkKTsKKyAgICAgICAgQWNjZXNz
Q2FzZTo6QWNjZXNzVHlwZSB0eXBlOworICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZVZhbHVl
KCkpCisgICAgICAgICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6TG9hZDsKKyAgICAgICAgZWxzZSBp
ZiAoc2xvdC51c1Vuc2V0KCkpCisgICAgICAgICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6TWlzczsK
KyAgICAgICAgZWxzZSBpZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpKQorICAgICAgICAgICAg
dHlwZSA9IEFjY2Vzc0Nhc2U6OkdldHRlcjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdHlw
ZSA9IEFjY2Vzc0Nhc2U6OkN1c3RvbUdldHRlcjsKIAotICAgICAgICByZXR1cm4gUmV0cnlDYWNo
ZUxhdGVyOworICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Z2V0KAorICAgICAgICAgICAg
dm0sIG93bmVyLCB0eXBlLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBsb2FkVGFy
Z2V0RnJvbVByb3h5LAorICAgICAgICAgICAgc2xvdC53YXRjaHBvaW50U2V0KCksIHNsb3QuaXND
YWNoZWFibGVDdXN0b20oKSA/IHNsb3QuY3VzdG9tR2V0dGVyKCkgOiBudWxscHRyKTsKICAgICB9
CiAKLSAgICAvLyBGSVhNRTogQ2FjaGUgcHJvcGVydHkgYWNjZXNzIGZvciBpbW1lZGlhdGVzLgot
ICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQotICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNo
ZTsKLQotICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZSgpICYmICFzbG90LmlzVW5zZXQoKSkKKyAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0ciA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2Uo
CisgICAgICAgIHZtLCBjb2RlQmxvY2ssIHByb3BlcnR5TmFtZSwgc3RkOjptb3ZlKG5ld0Nhc2Up
KTsKKyAgICAKKyAgICBpZiAoIWNvZGVQdHIpCiAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hl
OwogCi0gICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKLSAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKnZtKTsKLQotICAgIElubGlu
ZUNhY2hlQWN0aW9uIGFjdGlvbiA9IGFjdGlvbkZvckNlbGwoKnZtLCBiYXNlQ2VsbCk7Ci0gICAg
aWYgKGFjdGlvbiAhPSBBdHRlbXB0VG9DYWNoZSkKLSAgICAgICAgcmV0dXJuIGFjdGlvbjsKLQot
ICAgIC8vIE9wdGltaXplIHNlbGYgYWNjZXNzLgotICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlVmFs
dWUoKQotICAgICAgICAmJiBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlCi0gICAgICAgICYm
ICFzbG90LndhdGNocG9pbnRTZXQoKQotICAgICAgICAmJiBNYWNyb0Fzc2VtYmxlcjo6aXNDb21w
YWN0UHRyQWxpZ25lZEFkZHJlc3NPZmZzZXQobWF4T2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9y
YWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSkgewotICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0
Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cygqdm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwot
ICAgICAgICByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoKnZtLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBz
dHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgb3BlcmF0aW9uR2V0
QnlJZEJ1aWxkTGlzdCwgdHJ1ZSk7Ci0gICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZigq
dm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7Ci0gICAgICAgIHJl
dHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0gICAgfQotCi0gICAgcmVwYXRjaENhbGwoY29kZUJsb2Nr
LCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3Qp
OworICAgIHJlcGxhY2VXaXRoSnVtcChzdHViSW5mbywgY29kZVB0cik7CisgICAgCiAgICAgcmV0
dXJuIFJldHJ5Q2FjaGVMYXRlcjsKIH0KIApAQCAtNzY2LDExMiArMzM3LDYgQEAgdm9pZCByZXBh
dGNoR2V0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVgogICAgICAgICByZXBhdGNoQ2FsbChleGVj
LT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRC
eUlkKTsKIH0KIAotc3RhdGljIHZvaWQgcGF0Y2hKdW1wVG9HZXRCeUlkU3R1YihTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8sIEpJVFN0dWJSb3V0aW5lKiBzdHViUm91dGluZSkKLXsKLSAgICBS
RUxFQVNFX0FTU0VSVChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfbGlz
dCk7Ci0gICAgaWYgKHN0dWJJbmZvLnUuZ2V0QnlJZExpc3QubGlzdC0+ZGlkU2VsZlBhdGNoaW5n
KCkpIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKAotICAgICAgICAgICAg
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldCgKLSAgICAgICAgICAgICAg
ICBzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1bXApLAotICAgICAgICAgICAgQ29kZUxvY2F0
aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICAKLSAgICByZXBsYWNlV2l0aEp1bXAoc3R1YkluZm8sIHN0dWJSb3V0aW5lLT5j
b2RlKCkuY29kZSgpKTsKLX0KLQotc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUJ1aWxkR2V0
QnlJRExpc3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvKQotewotICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpCi0gICAgICAgIHx8ICgh
c2xvdC5pc0NhY2hlYWJsZSgpICYmICFzbG90LmlzVW5zZXQoKSkpCi0gICAgICAgIHJldHVybiBH
aXZlVXBPbkNhY2hlOwotCi0gICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwo
KTsKLSAgICBib29sIGxvYWRUYXJnZXRGcm9tUHJveHkgPSBmYWxzZTsKLSAgICBpZiAoYmFzZUNl
bGwtPnR5cGUoKSA9PSBQdXJlRm9yd2FyZGluZ1Byb3h5VHlwZSkgewotICAgICAgICBiYXNlVmFs
dWUgPSBqc0Nhc3Q8SlNQcm94eSo+KGJhc2VDZWxsKS0+dGFyZ2V0KCk7Ci0gICAgICAgIGJhc2VD
ZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwotICAgICAgICBsb2FkVGFyZ2V0RnJvbVByb3h5ID0g
dHJ1ZTsKLSAgICB9Ci0KLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotCi0gICAgSW5saW5lQ2FjaGVBY3Rpb24g
YWN0aW9uID0gYWN0aW9uRm9yQ2VsbCgqdm0sIGJhc2VDZWxsKTsKLSAgICBpZiAoYWN0aW9uICE9
IEF0dGVtcHRUb0NhY2hlKQotICAgICAgICByZXR1cm4gYWN0aW9uOwotCi0gICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBiYXNlQ2VsbC0+c3RydWN0dXJlKCp2bSk7Ci0gICAgVHlwZUluZm8gdHlw
ZUluZm8gPSBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCk7Ci0KLSAgICBpZiAoc3R1YkluZm8ucGF0Y2gu
c3BpbGxNb2RlID09IE5lZWRUb1NwaWxsKSB7Ci0gICAgICAgIC8vIFdlIGNhbm5vdCBkbyBhcyBt
dWNoIGlubGluZSBjYWNoaW5nIGlmIHRoZSByZWdpc3RlcnMgd2VyZSBub3QgZmx1c2hlZCBwcmlv
ciB0byB0aGlzIEdldEJ5SWQuIEluIHBhcnRpY3VsYXIsCi0gICAgICAgIC8vIG5vbi1WYWx1ZSBj
YWNoZWQgcHJvcGVydGllcyByZXF1aXJlIHBsYW50aW5nIGNhbGxzLCB3aGljaCByZXF1aXJlcyBy
ZWdpc3RlcnMgdG8gaGF2ZSBiZWVuIGZsdXNoZWQuIFRodXMsCi0gICAgICAgIC8vIGlmIHJlZ2lz
dGVycyB3ZXJlIG5vdCBmbHVzaGVkLCBkb24ndCBkbyBub24tVmFsdWUgY2FjaGluZy4KLSAgICAg
ICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSAmJiAhc2xvdC5pc1Vuc2V0KCkpCi0gICAg
ICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICB9Ci0KLSAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQgPSBzbG90LmlzVW5zZXQoKSA/IGludmFsaWRPZmZzZXQgOiBzbG90LmNhY2hlZE9m
ZnNldCgpOwotICAgIAotICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNl
dDsKLSAgICBpZiAoc2xvdC5pc1Vuc2V0KCkgfHwgc2xvdC5zbG90QmFzZSgpICE9IGJhc2VWYWx1
ZSkgewotICAgICAgICBpZiAodHlwZUluZm8ucHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCkgfHwg
c3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOwotCi0gICAgICAgIGlmIChzbG90LmlzVW5zZXQoKSkKLSAgICAgICAgICAgIGNvbmRpdGlv
blNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcygqdm0sIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9y
UHJvdG90eXBlUHJvcGVydHlIaXQoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBl
eGVjLCBzdHJ1Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwgaWRlbnQuaW1wbCgpKTsKLQotICAgICAg
ICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gR2l2ZVVw
T25DYWNoZTsKLQotICAgICAgICBvZmZzZXQgPSBzbG90LmlzVW5zZXQoKSA/IGludmFsaWRPZmZz
ZXQgOiBjb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vZmZzZXQoKTsKLSAgICB9Ci0g
ICAgCi0gICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogbGlzdCA9IFBvbHltb3JwaGljR2V0QnlJ
ZExpc3Q6OmZyb20oc3R1YkluZm8pOwotICAgIGlmIChsaXN0LT5pc0Z1bGwoKSkgewotICAgICAg
ICAvLyBXZSBuZWVkIHRoaXMgZXh0cmEgY2hlY2sgYmVjYXVzZSBvZiByZWN1cnNpb24uCi0gICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgIH0KLSAgICAKLSAgICBSZWZQdHI8SklUU3R1
YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwotICAgIGJvb2wgcmVzdWx0ID0gZ2VuZXJhdGVCeUlkU3R1
YigKLSAgICAgICAgZXhlYywga2luZEZvcihzbG90KSwgaWRlbnQsIGN1c3RvbUZvcihzbG90KSwg
c3R1YkluZm8sIGNvbmRpdGlvblNldCwgc2xvdC5zbG90QmFzZSgpLCBvZmZzZXQsIAotICAgICAg
ICBzdHJ1Y3R1cmUsIGxvYWRUYXJnZXRGcm9tUHJveHksIHNsb3Qud2F0Y2hwb2ludFNldCgpLCAK
LSAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1Yklu
Zm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSwKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlz
dC0+Y3VycmVudFNsb3dQYXRoVGFyZ2V0KHN0dWJJbmZvKSksIHN0dWJSb3V0aW5lKTsKLSAgICBp
ZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgCi0gICAgR2V0
QnlJZEFjY2Vzczo6QWNjZXNzVHlwZSBhY2Nlc3NUeXBlOwotICAgIGlmIChzbG90LmlzQ2FjaGVh
YmxlVmFsdWUoKSkKLSAgICAgICAgYWNjZXNzVHlwZSA9IHNsb3Qud2F0Y2hwb2ludFNldCgpID8g
R2V0QnlJZEFjY2Vzczo6V2F0Y2hlZFN0dWIgOiBHZXRCeUlkQWNjZXNzOjpTaW1wbGVTdHViOwot
ICAgIGVsc2UgaWYgKHNsb3QuaXNVbnNldCgpKQotICAgICAgICBhY2Nlc3NUeXBlID0gR2V0QnlJ
ZEFjY2Vzczo6U2ltcGxlTWlzczsKLSAgICBlbHNlIGlmIChzbG90LmlzQ2FjaGVhYmxlR2V0dGVy
KCkpCi0gICAgICAgIGFjY2Vzc1R5cGUgPSBHZXRCeUlkQWNjZXNzOjpHZXR0ZXI7Ci0gICAgZWxz
ZQotICAgICAgICBhY2Nlc3NUeXBlID0gR2V0QnlJZEFjY2Vzczo6Q3VzdG9tR2V0dGVyOwotICAg
IAotICAgIGxpc3QtPmFkZEFjY2VzcyhHZXRCeUlkQWNjZXNzKAotICAgICAgICAqdm0sIGNvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGFjY2Vzc1R5cGUsIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1
cmUsCi0gICAgICAgIGNvbmRpdGlvblNldCkpOwotICAgIAotICAgIHBhdGNoSnVtcFRvR2V0QnlJ
ZFN0dWIoc3R1YkluZm8sIHN0dWJSb3V0aW5lLmdldCgpKTsKLSAgICAKLSAgICByZXR1cm4gbGlz
dC0+aXNGdWxsKCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOwotfQotCi12b2lk
IGJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBHQ1NhZmVDb25jdXJyZW50SklUTG9j
a2VyIGxvY2tlcihleGVjLT5jb2RlQmxvY2soKS0+bV9sb2NrLCBleGVjLT52bSgpLmhlYXApOwot
ICAgIAotICAgIGlmICh0cnlCdWlsZEdldEJ5SURMaXN0KGV4ZWMsIGJhc2VWYWx1ZSwgcHJvcGVy
dHlOYW1lLCBzbG90LCBzdHViSW5mbykgPT0gR2l2ZVVwT25DYWNoZSkKLSAgICAgICAgcmVwYXRj
aENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3Bl
cmF0aW9uR2V0QnlJZCk7Ci19Ci0KIHN0YXRpYyBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJIGFwcHJv
cHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3Qs
IFB1dEtpbmQgcHV0S2luZCkKIHsKICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkgewpAQCAt
ODg0LDM1OSArMzQ5LDE2IEBAIHN0YXRpYyBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJIGFwcHJvcHJp
YXQKICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdDsKIH0KIAotc3RhdGljIFZf
SklUT3BlcmF0aW9uX0VTc2lKSkkgYXBwcm9wcmlhdGVMaXN0QnVpbGRpbmdQdXRCeUlkRnVuY3Rp
b24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRLaW5kIHB1dEtpbmQpCitzdGF0aWMg
Vl9KSVRPcGVyYXRpb25fRVNzaUpKSSBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUlkRnVuY3Rp
b24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRLaW5kIHB1dEtpbmQpCiB7CiAgICAg
aWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpIHsKICAgICAgICAgaWYgKHB1dEtpbmQgPT0gRGlyZWN0
KQotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExp
c3Q7Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0QnVpbGRMaXN0OworICAg
ICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKKyAg
ICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKICAgICB9CiAgICAg
aWYgKHB1dEtpbmQgPT0gRGlyZWN0KQotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERp
cmVjdE5vblN0cmljdEJ1aWxkTGlzdDsKLSAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0
cmljdEJ1aWxkTGlzdDsKLX0KLQotc3RhdGljIGJvb2wgZW1pdFB1dFJlcGxhY2VTdHViKAotICAg
IEV4ZWNTdGF0ZSogZXhlYywKLSAgICBjb25zdCBJZGVudGlmaWVyJiwKLSAgICBjb25zdCBQdXRQ
cm9wZXJ0eVNsb3QmIHNsb3QsCi0gICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAotICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlLAotICAgIENvZGVMb2NhdGlvbkxhYmVsIGZhaWx1cmVMYWJl
bCwKLSAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+JiBzdHViUm91dGluZSkKLXsKLSAgICBWTSog
dm0gPSAmZXhlYy0+dm0oKTsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJl
Zz4oc3R1YkluZm8ucGF0Y2guYmFzZUdQUik7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBH
UFJSZWcgdmFsdWVUYWdHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZh
bHVlVGFnR1BSKTsKLSNlbmRpZgotICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHN0YXRpY19jYXN0PEdQ
UlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVHUFIpOwotCi0gICAgU2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yIGFsbG9jYXRvcihzdHViSW5mby5wYXRjaC51c2VkUmVnaXN0ZXJzKTsKLSAgICBhbGxv
Y2F0b3IubG9jayhiYXNlR1BSKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIGFsbG9jYXRv
ci5sb2NrKHZhbHVlVGFnR1BSKTsKLSNlbmRpZgotICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlR1BS
KTsKLSAgICAKLSAgICBHUFJSZWcgc2NyYXRjaEdQUjEgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3Jh
dGNoR1BSKCk7Ci0KLSAgICBDQ2FsbEhlbHBlcnMgc3R1YkppdCh2bSwgZXhlYy0+Y29kZUJsb2Nr
KCkpOwotCi0gICAgc2l6ZV90IG51bWJlck9mUGFkZGluZ0J5dGVzID0gYWxsb2NhdG9yLnByZXNl
cnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKHN0dWJKaXQpOwotCi0gICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgYmFkU3RydWN0dXJlID0gc3R1YkppdC5icmFuY2hTdHJ1Y3R1cmUoCi0gICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKLSAgICAgICAgc3RydWN0
dXJlKTsKLQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpKQotICAgICAgICBzdHViSml0LnN0b3JlNjQodmFsdWVHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3Jh
Z2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVv
ZihKU1ZhbHVlKSkpOwotICAgIGVsc2UgewotICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
c2NyYXRjaEdQUjEpOwotICAgICAgICBzdHViSml0LnN0b3JlNjQodmFsdWVHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hl
ZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOwotICAgIH0KLSNlbGlmIFVTRShKU1ZBTFVF
MzJfNjQpCi0gICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSB7Ci0g
ICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5Jbmxp
bmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNU
X09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwotICAg
ICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5s
aW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVD
VF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMSk7Ci0gICAg
ICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2Ny
YXRjaEdQUjEsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9m
KEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0
cy5wYXlsb2FkKSkpOwotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNh
Y2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVk
VmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwotICAgIH0KLSNlbmRpZgotICAgIAotICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3M7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
ZmFpbHVyZTsKLSAgICAKLSAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkpIHsK
LSAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoc3R1Ykpp
dCwgbnVtYmVyT2ZQYWRkaW5nQnl0ZXMpOwotICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1w
KCk7Ci0gICAgICAgIAotICAgICAgICBiYWRTdHJ1Y3R1cmUubGluaygmc3R1YkppdCk7Ci0gICAg
ICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKHN0dWJKaXQsIG51
bWJlck9mUGFkZGluZ0J5dGVzKTsKLSAgICAgICAgZmFpbHVyZSA9IHN0dWJKaXQuanVtcCgpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKLSAgICAgICAg
ZmFpbHVyZSA9IGJhZFN0cnVjdHVyZTsKLSAgICB9Ci0gICAgCi0gICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcigqdm0sIHN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygpLCBKSVRDb21waWxhdGlvbkNh
bkZhaWwpOwotICAgIGlmIChwYXRjaEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0
YUNhbGxUb0RvbmUpKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmUsIGZhaWx1cmVMYWJl
bCk7Ci0gICAgICAgICAgICAKLSAgICBzdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NU
VUIoCi0gICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLCBwYXRjaEJ1ZmZlciwKLSAgICAgICAgKCJQ
dXRCeUlkIHJlcGxhY2Ugc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICAg
ICB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNo
LmRlbHRhQ2FsbFRvRG9uZSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgIAotICAgIHJldHVy
biB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCi0gICAgRXhl
Y1N0YXRlKiBleGVjLCBWTSogdm0sIFN0cnVjdHVyZSomIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQsIAotICAgIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQsCi0gICAgU3RydWN0dXJlKiYgb2xk
U3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KQotewot
ICAgIFByb3BlcnR5TmFtZSBwbmFtZShpZGVudCk7Ci0gICAgb2xkU3RydWN0dXJlID0gc3RydWN0
dXJlOwotICAgIGlmICghb2xkU3RydWN0dXJlLT5pc09iamVjdCgpIHx8IG9sZFN0cnVjdHVyZS0+
aXNEaWN0aW9uYXJ5KCkgfHwgcGFyc2VJbmRleChwbmFtZSkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIFByb3BlcnR5T2Zmc2V0IHByb3BlcnR5T2Zmc2V0OwotICAgIHN0cnVjdHVyZSA9
IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1
cnJlbnRseShvbGRTdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSwgMCwgcHJvcGVydHlPZmZzZXQpOwot
Ci0gICAgaWYgKCFzdHJ1Y3R1cmUgfHwgIXN0cnVjdHVyZS0+aXNPYmplY3QoKSB8fCBzdHJ1Y3R1
cmUtPmlzRGljdGlvbmFyeSgpIHx8ICFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNo
ZWFibGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gU2tpcCBvcHRpbWl6aW5n
IHRoZSBjYXNlIHdoZXJlIHdlIG5lZWQgYSByZWFsbG9jLCBpZiB3ZSBkb24ndCBoYXZlCi0gICAg
Ly8gZW5vdWdoIHJlZ2lzdGVycyB0byBtYWtlIGl0IGhhcHBlbi4KLSAgICBpZiAoR1BSSW5mbzo6
bnVtYmVyT2ZSZWdpc3RlcnMgPCA2Ci0gICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSAhPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkKLSAgICAgICAgJiYg
b2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICAvLyBTa2lwIG9wdGltaXppbmcgdGhlIGNhc2Ugd2hlcmUgd2UgbmVl
ZCByZWFsbG9jLCBhbmQgdGhlIHN0cnVjdHVyZSBoYXMKLSAgICAvLyBpbmRleGluZyBzdG9yYWdl
LgotICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3Qgc2tpcCB0aGlzISBJbXBsZW1lbnQgaXQhCi0g
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMDkxNAotICAg
IGlmIChvbGRTdHJ1Y3R1cmUtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGlmIChwdXRLaW5kID09IE5vdERpcmVjdCkgewotICAgICAgICBj
b25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3MoCi0g
ICAgICAgICAgICAqdm0sIGV4ZWMtPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKSwgZXhl
Yywgc3RydWN0dXJlLCBpZGVudC5pbXBsKCkpOwotICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5p
c1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQ29kZUxv
Y2F0aW9uTGFiZWwgZmFpbHVyZUxhYmVsID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxh
YmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSk7Ci0gICAgUmVm
UHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUgPSBzdHViSW5mby5zdHViUm91dGluZTsK
LQotICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRj
aC5iYXNlR1BSKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIEdQUlJlZyB2YWx1ZVRhZ0dQ
UiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVUYWdHUFIpOwotI2Vu
ZGlmCi0gICAgR1BSUmVnIHZhbHVlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5w
YXRjaC52YWx1ZUdQUik7Ci0gICAgCi0gICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9j
YXRvcihzdHViSW5mby5wYXRjaC51c2VkUmVnaXN0ZXJzKTsKLSAgICBhbGxvY2F0b3IubG9jayhi
YXNlR1BSKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIGFsbG9jYXRvci5sb2NrKHZhbHVl
VGFnR1BSKTsKLSNlbmRpZgotICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlR1BSKTsKLSAgICAKLSAg
ICBDQ2FsbEhlbHBlcnMgc3R1YkppdCh2bSk7Ci0gICAgCi0gICAgYm9vbCBuZWVkVGhpcmRTY3Jh
dGNoID0gZmFsc2U7Ci0gICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBv
bGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkKLSAgICAgICAgJiYgb2xkU3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgIG5lZWRUaGlyZFNjcmF0Y2ggPSB0cnVl
OwotICAgIH0KLQotICAgIEdQUlJlZyBzY3JhdGNoR1BSMSA9IGFsbG9jYXRvci5hbGxvY2F0ZVNj
cmF0Y2hHUFIoKTsKLSAgICBBU1NFUlQoc2NyYXRjaEdQUjEgIT0gYmFzZUdQUik7Ci0gICAgQVNT
RVJUKHNjcmF0Y2hHUFIxICE9IHZhbHVlR1BSKTsKLSAgICAKLSAgICBHUFJSZWcgc2NyYXRjaEdQ
UjIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7Ci0gICAgQVNTRVJUKHNjcmF0Y2hH
UFIyICE9IGJhc2VHUFIpOwotICAgIEFTU0VSVChzY3JhdGNoR1BSMiAhPSB2YWx1ZUdQUik7Ci0g
ICAgQVNTRVJUKHNjcmF0Y2hHUFIyICE9IHNjcmF0Y2hHUFIxKTsKLQotICAgIEdQUlJlZyBzY3Jh
dGNoR1BSMzsKLSAgICBpZiAobmVlZFRoaXJkU2NyYXRjaCkgewotICAgICAgICBzY3JhdGNoR1BS
MyA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKLSAgICAgICAgQVNTRVJUKHNjcmF0
Y2hHUFIzICE9IGJhc2VHUFIpOwotICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjMgIT0gdmFsdWVH
UFIpOwotICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjMgIT0gc2NyYXRjaEdQUjEpOwotICAgICAg
ICBBU1NFUlQoc2NyYXRjaEdQUjMgIT0gc2NyYXRjaEdQUjIpOwotICAgIH0gZWxzZQotICAgICAg
ICBzY3JhdGNoR1BSMyA9IEludmFsaWRHUFJSZWc7Ci0gICAgCi0gICAgc2l6ZV90IG51bWJlck9m
UGFkZGluZ0J5dGVzID0gYWxsb2NhdG9yLnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5n
KHN0dWJKaXQpOwotCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsK
LSAgICAgICAgICAgIAotICAgIEFTU0VSVChvbGRTdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBv
aW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOwotICAgIAotICAgIGZhaWx1cmVDYXNlcy5hcHBl
bmQoc3R1YkppdC5icmFuY2hTdHJ1Y3R1cmUoCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSksIAotICAgICAgICBvbGRTdHJ1Y3R1cmUpKTsKLSAgICAKLSAg
ICBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9ucygKLSAgICAgICAgY29uZGl0aW9uU2V0LCBl
eGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8sIHN0dWJKaXQsIGZhaWx1cmVDYXNlcywgc2NyYXRj
aEdQUjEpOwotCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwotICAgIAot
ICAgIGJvb2wgc2NyYXRjaEdQUjFIYXNTdG9yYWdlID0gZmFsc2U7Ci0gICAgCi0gICAgaWYgKHN0
cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNh
cGFjaXR5KCkpIHsKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBzdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7Ci0gICAgICAgIENvcGllZEFsbG9jYXRvciog
Y29waWVkQWxsb2NhdG9yID0gJnZtLT5oZWFwLnN0b3JhZ2VBbGxvY2F0b3IoKTsKLSAgICAgICAg
Ci0gICAgICAgIGlmICghb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAg
ICAgICAgICBzdHViSml0LmxvYWRQdHIoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWlu
aW5nLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoc3R1YkppdC5i
cmFuY2hTdWJQdHIoTWFjcm9Bc3NlbWJsZXI6OlNpZ25lZCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRjaEdQUjEpKTsKLSAgICAgICAgICAgIHN0dWJKaXQuc3Rv
cmVQdHIoc2NyYXRjaEdQUjEsICZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZyk7
Ci0gICAgICAgICAgICBzdHViSml0Lm5lZ1B0cihzY3JhdGNoR1BSMSk7Ci0gICAgICAgICAgICBz
dHViSml0LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKCZjb3BpZWRBbGxv
Y2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQpLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgICAgICBz
dHViSml0LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1ZhbHVl
KSksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNpemVfdCBv
bGRTaXplID0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFs
dWUpOwotICAgICAgICAgICAgQVNTRVJUKG5ld1NpemUgPiBvbGRTaXplKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIzKTsKLSAgICAg
ICAgICAgIHN0dWJKaXQubG9hZFB0cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5p
bmcsIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChzdHViSml0LmJy
YW5jaFN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6U2lnbmVkLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BSMSkpOwotICAgICAgICAgICAgc3R1YkppdC5zdG9y
ZVB0cihzY3JhdGNoR1BSMSwgJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsK
LSAgICAgICAgICAgIHN0dWJKaXQubmVnUHRyKHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAgIHN0
dWJKaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9j
YXRvci0+bV9jdXJyZW50UGF5bG9hZEVuZCksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAgIHN0
dWJKaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEpTVmFsdWUp
KSwgc2NyYXRjaEdQUjEpOwotICAgICAgICAgICAgLy8gV2UgaGF2ZSBzY3JhdGNoR1BSMSA9IG5l
dyBzdG9yYWdlLCBzY3JhdGNoR1BSMyA9IG9sZCBzdG9yYWdlLCBzY3JhdGNoR1BSMiA9IGF2YWls
YWJsZQotICAgICAgICAgICAgZm9yIChzaXplX3Qgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgb2xkU2l6
ZTsgb2Zmc2V0ICs9IHNpemVvZih2b2lkKikpIHsKLSAgICAgICAgICAgICAgICBzdHViSml0Lmxv
YWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjMsIC1zdGF0aWNfY2FzdDxw
dHJkaWZmX3Q+KG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZih2b2lkKikpKSwgc2Ny
YXRjaEdQUjIpOwotICAgICAgICAgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCAtc3RhdGljX2Nhc3Q8cHRyZGlm
Zl90PihvZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2Yodm9pZCopKSkpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzdHViSml0LnN0b3JlUHRyKHNj
cmF0Y2hHUFIxLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpKTsKLSAgICAgICAgc2NyYXRjaEdQUjFIYXNTdG9yYWdlID0gdHJ1ZTsK
LSAgICB9Ci0KLSAgICBBU1NFUlQob2xkU3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKSA9PSBz
dHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpKTsKLSAgICBBU1NFUlQob2xkU3RydWN0dXJlLT50
eXBlSW5mbygpLmlubGluZVR5cGVGbGFncygpID09IHN0cnVjdHVyZS0+dHlwZUluZm8oKS5pbmxp
bmVUeXBlRmxhZ3MoKSk7Ci0gICAgQVNTRVJUKG9sZFN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkg
PT0gc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICB1
aW50MzJfdCB2YWwgPSBzdHJ1Y3R1cmUtPmlkKCk7Ci0jZWxzZQotICAgIHVpbnQzMl90IHZhbCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KHN0cnVjdHVyZS0+aWQoKSk7Ci0jZW5kaWYKLSAg
ICBzdHViSml0LnN0b3JlMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih2YWwpLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
KTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hl
ZE9mZnNldCgpKSkKLSAgICAgICAgc3R1YkppdC5zdG9yZTY0KHZhbHVlR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkg
KyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNW
YWx1ZSkpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKCFzY3JhdGNoR1BSMUhhc1N0b3JhZ2Up
Ci0gICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUjEpOwotICAgICAg
ICBzdHViSml0LnN0b3JlNjQodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0
Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihK
U1ZhbHVlKSkpOwotICAgIH0KLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgaWYgKGlzSW5s
aW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSB7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUz
Mih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9m
ZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVk
T2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1
ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwotICAgICAgICBzdHViSml0LnN0b3JlMzIo
dmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0Ojpv
ZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hl
ZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFs
dWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICgh
c2NyYXRjaEdQUjFIYXNTdG9yYWdlKQotICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSks
IHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNo
ZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZh
bHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUz
Mih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNl
dEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JK
RUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7Ci0gICAg
fQotI2VuZGlmCi0gICAgCi0gICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IG51bGxw
dHI7Ci0KLSNpZiBFTkFCTEUoR0dDKQotICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxGbHVz
aFdyaXRlQmFycmllckJ1ZmZlcjsKLSAgICBpZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gc3R1YkppdC5qdW1w
SWZJc1JlbWVtYmVyZWRPckluRWRlbihiYXNlR1BSKTsKLSAgICAgICAgV3JpdGVCYXJyaWVyQnVm
ZmVyJiB3cml0ZUJhcnJpZXJCdWZmZXIgPSBzdHViSml0LnZtKCktPmhlYXAud3JpdGVCYXJyaWVy
QnVmZmVyKCk7Ci0gICAgICAgIHN0dWJKaXQubG9hZDMyKHdyaXRlQmFycmllckJ1ZmZlci5jdXJy
ZW50SW5kZXhBZGRyZXNzKCksIHNjcmF0Y2hHUFIyKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgbmVlZFRvRmx1c2ggPQotICAgICAgICAgICAgc3R1YkppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzY3JhdGNoR1BSMiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMih3cml0ZUJhcnJpZXJCdWZmZXIuY2FwYWNpdHkoKSkpOwotCi0gICAgICAgIHN0dWJK
aXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaEdQUjIpOwot
ICAgICAgICBzdHViSml0LnN0b3JlMzIoc2NyYXRjaEdQUjIsIHdyaXRlQmFycmllckJ1ZmZlci5j
dXJyZW50SW5kZXhBZGRyZXNzKCkpOwotCi0gICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cih3cml0ZUJhcnJpZXJCdWZmZXIuYnVmZmVyKCkpLCBzY3JhdGNo
R1BSMSk7Ci0gICAgICAgIC8vIFdlIHVzZSBhbiBvZmZzZXQgb2YgLXNpemVvZih2b2lkKikgYmVj
YXVzZSB3ZSBhbHJlYWR5IGFkZGVkIDEgdG8gc2NyYXRjaEdQUjIuCi0gICAgICAgIHN0dWJKaXQu
c3RvcmVQdHIoYmFzZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzY3JhdGNoR1BSMSwg
c2NyYXRjaEdQUjIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgc3RhdGljX2Nhc3Q8aW50MzJf
dD4oLXNpemVvZih2b2lkKikpKSk7Ci0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9u
ZVdpdGhCYXJyaWVyID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgICAgIG5lZWRUb0ZsdXNoLmxpbmso
JnN0dWJKaXQpOwotCi0gICAgICAgIHNjcmF0Y2hCdWZmZXIgPSB2bS0+c2NyYXRjaEJ1ZmZlckZv
clNpemUoYWxsb2NhdG9yLmRlc2lyZWRTY3JhdGNoQnVmZmVyU2l6ZUZvckNhbGwoKSk7Ci0gICAg
ICAgIGFsbG9jYXRvci5wcmVzZXJ2ZVVzZWRSZWdpc3RlcnNUb1NjcmF0Y2hCdWZmZXJGb3JDYWxs
KHN0dWJKaXQsIHNjcmF0Y2hCdWZmZXIsIHNjcmF0Y2hHUFIyKTsKLSAgICAgICAgc3R1YkppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUdQUik7Ci0gICAgICAgIGNhbGxGbHVzaFdy
aXRlQmFycmllckJ1ZmZlciA9IHN0dWJKaXQuY2FsbCgpOwotICAgICAgICBhbGxvY2F0b3IucmVz
dG9yZVVzZWRSZWdpc3RlcnNGcm9tU2NyYXRjaEJ1ZmZlckZvckNhbGwoc3R1YkppdCwgc2NyYXRj
aEJ1ZmZlciwgc2NyYXRjaEdQUjIpOwotCi0gICAgICAgIGRvbmVXaXRoQmFycmllci5saW5rKCZz
dHViSml0KTsKLSAgICAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKCZzdHViSml0
KTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3M7Ci0g
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbHVyZTsKLSAgICAgICAgICAgIAotICAgIGlmIChh
bGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMoKSkgewotICAgICAgICBhbGxvY2F0b3IucmVzdG9y
ZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhzdHViSml0LCBudW1iZXJPZlBhZGRpbmdCeXRlcyk7
Ci0gICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKLQotICAgICAgICBmYWlsdXJlQ2Fz
ZXMubGluaygmc3R1YkppdCk7Ci0gICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0
ZXJzQnlQb3BwaW5nKHN0dWJKaXQsIG51bWJlck9mUGFkZGluZ0J5dGVzKTsKLSAgICAgICAgZmFp
bHVyZSA9IHN0dWJKaXQuanVtcCgpOwotICAgIH0gZWxzZQotICAgICAgICBzdWNjZXNzID0gc3R1
YkppdC5qdW1wKCk7Ci0gICAgCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgb3BlcmF0aW9uQ2Fs
bDsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzSW5TbG93UGF0aDsKLSAgICAKLSAg
ICBpZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICBzbG93UGF0aC5saW5rKCZzdHViSml0KTsKLSAg
ICAgICAgCi0gICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5n
KHN0dWJKaXQsIG51bWJlck9mUGFkZGluZ0J5dGVzKTsKLSAgICAgICAgaWYgKCFzY3JhdGNoQnVm
ZmVyKQotICAgICAgICAgICAgc2NyYXRjaEJ1ZmZlciA9IHZtLT5zY3JhdGNoQnVmZmVyRm9yU2l6
ZShhbGxvY2F0b3IuZGVzaXJlZFNjcmF0Y2hCdWZmZXJTaXplRm9yQ2FsbCgpKTsKLSAgICAgICAg
YWxsb2NhdG9yLnByZXNlcnZlVXNlZFJlZ2lzdGVyc1RvU2NyYXRjaEJ1ZmZlckZvckNhbGwoc3R1
YkppdCwgc2NyYXRjaEJ1ZmZlciwgc2NyYXRjaEdQUjEpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoc2xvdC5jYWNoZWRPZmZzZXQoKSksIHZhbHVlR1BSKTsKLSNlbHNlCi0gICAgICAg
IHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VHUFIsIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoc2xvdC5jYWNoZWRPZmZzZXQoKSksIHZhbHVlR1BSLCB2YWx1ZVRhZ0dQUik7Ci0jZW5kaWYK
LSAgICAgICAgb3BlcmF0aW9uQ2FsbCA9IHN0dWJKaXQuY2FsbCgpOwotICAgICAgICBhbGxvY2F0
b3IucmVzdG9yZVVzZWRSZWdpc3RlcnNGcm9tU2NyYXRjaEJ1ZmZlckZvckNhbGwoc3R1YkppdCwg
c2NyYXRjaEJ1ZmZlciwgc2NyYXRjaEdQUjEpOwotICAgICAgICBzdWNjZXNzSW5TbG93UGF0aCA9
IHN0dWJKaXQuanVtcCgpOwotICAgIH0KLSAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVy
KCp2bSwgc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCksIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7
Ci0gICAgaWYgKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRv
RG9uZSkpOwotICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMoKSkKLSAgICAgICAg
cGF0Y2hCdWZmZXIubGluayhmYWlsdXJlLCBmYWlsdXJlTGFiZWwpOwotICAgIGVsc2UKLSAgICAg
ICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMsIGZhaWx1cmVMYWJlbCk7Ci0gICAgaWYg
KHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhvcGVyYXRpb25DYWxsLCBv
cGVyYXRpb25SZWFsbG9jYXRlU3RvcmFnZUFuZEZpbmlzaFB1dCk7Ci0gICAgICAgIHBhdGNoQnVm
ZmVyLmxpbmsoc3VjY2Vzc0luU2xvd1BhdGgsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5s
YWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSkpOwotI2lmIEVOQUJM
RShHR0MpCi0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbEZsdXNoV3JpdGVCYXJyaWVyQnVm
ZmVyLCBvcGVyYXRpb25GbHVzaFdyaXRlQmFycmllckJ1ZmZlcik7Ci0jZW5kaWYKLSAgICB9Ci0g
ICAgCi0gICAgc3R1YlJvdXRpbmUgPQotICAgICAgICBjcmVhdGVKSVRTdHViUm91dGluZSgKLSAg
ICAgICAgICAgIEZJTkFMSVpFX0NPREVfRk9SKAotICAgICAgICAgICAgICAgIGV4ZWMtPmNvZGVC
bG9jaygpLCBwYXRjaEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAoIlB1dEJ5SWQgJXN0cmFuc2l0
aW9uIHN0dWIgKCVwIC0+ICVwKSBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICAg
ICAgICAgICAgIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUt
Pm91dE9mTGluZUNhcGFjaXR5KCkgPyAicmVhbGxvY2F0aW5nICIgOiAiIiwKLSAgICAgICAgICAg
ICAgICAgICAgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsCi0gICAgICAgICAgICAgICAgICAgIHRv
Q1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwgc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5w
YXRjaC5kZWx0YUNhbGxUb0RvbmUpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKSwKLSAgICAgICAgICAg
ICp2bSwKLSAgICAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKSwK
LSAgICAgICAgICAgIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1
cmUtPm91dE9mTGluZUNhcGFjaXR5KCksCi0gICAgICAgICAgICBzdHJ1Y3R1cmUpOwotICAgIAot
ICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5v
blN0cmljdE9wdGltaXplOworICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0
aW1pemU7CiB9CiAKIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNv
bnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQpAQCAtMTI0NSw3ICszNjcs
OCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAgICAgICAgIHJl
dHVybiBHaXZlVXBPbkNhY2hlOwogICAgIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhl
Yy0+Y29kZUJsb2NrKCk7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgU2NyaXB0RXhl
Y3V0YWJsZSogb3duZXIgPSBjb2RlQmxvY2stPm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpOworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAKICAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKICAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CkBAIC0xMjU2LDIxMCArMzc5LDEwOSBAQCBzdGF0
aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAgICAgaWYgKCFzdHJ1Y3R1cmUt
PnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKICAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7CiAKLSAgICAvLyBPcHRpbWl6ZSBzZWxmIGFjY2Vzcy4KLSAgICBpZiAoc2xvdC5iYXNl
KCkgPT0gYmFzZVZhbHVlICYmIHNsb3QuaXNDYWNoZWFibGVQdXQoKSkgewotICAgICAgICBpZiAo
c2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpOZXdQcm9wZXJ0eSkgeworICAgIHN0ZDo6
dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBuZXdDYXNlOwogCi0gICAgICAgICAgICBTdHJ1Y3R1cmUq
IG9sZFN0cnVjdHVyZTsKLSAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNv
bmRpdGlvblNldDsKLSAgICAgICAgICAgIGlmICghZW1pdFB1dFRyYW5zaXRpb25TdHViKGV4ZWMs
IHZtLCBzdHJ1Y3R1cmUsIGlkZW50LCBzbG90LCBzdHViSW5mbywgcHV0S2luZCwgb2xkU3RydWN0
dXJlLCBjb25kaXRpb25TZXQpKQotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hl
OworICAgIGlmIChzbG90LmJhc2UoKSA9PSBCYXNlVmFsdWUgJiYgc2xvdC5pc0NhY2hlYWJsZVB1
dCgpKSB7CisgICAgICAgIGlmIChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6OkV4aXN0
aW5nUHJvcGVydHkpIHsKKyAgICAgICAgICAgIHN0cnVjdHVyZS0+ZGlkQ2FjaGVQcm9wZXJ0eVJl
cGxhY2VtZW50KHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAgCisgICAgICAgICAg
ICBwdHJkaWZmX3Qgb2Zmc2V0VG9QYXRjaGVkU3RvcmFnZSA9IG9mZnNldFJlbGF0aXZlVG9QYXRj
aGVkU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAgICAgIGlmIChzdHViSW5m
by5jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpVbnNldAorICAgICAgICAgICAgICAgICYmIE1hY3Jv
QXNzZW1ibGVyOjppc1B0ckFsaWduZWRBZGRyZXNzT2Zmc2V0KG9mZnNldFRvUGF0Y2hlZFN0b3Jh
Z2UpKSB7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcmVwYXRjaEJ5SWRTZWxm
QWNjZXNzKAorICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBzdHViSW5mbywgc3Ry
dWN0dXJlLCBpZGVudCwgc2xvdC5jYWNoZWRPZmZzZXQoKSwKKyAgICAgICAgICAgICAgICAgICAg
YXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpLCBmYWxz
ZSk7CisgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRSZXBsYWNlKHZtLCBjb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIHJl
dHVybiBSZXRyeUNhY2hlTGF0ZXI7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoSnVtcCgKLSAgICAgICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KAotICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5w
YXRjaC5kZWx0YUNhbGxUb0p1bXApLAotICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVs
KHN0dWJJbmZvLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgICAgICAgICByZXBh
dGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlh
dGVMaXN0QnVpbGRpbmdQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBzdHViSW5mby5pbml0UHV0QnlJZFRyYW5zaXRpb24oKnZtLCBjb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBvbGRTdHJ1Y3R1cmUsIHN0cnVjdHVyZSwgY29uZGl0
aW9uU2V0LCBwdXRLaW5kID09IERpcmVjdCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHJl
dHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIG5ld0Nhc2UgPSBB
Y2Nlc3NDYXNlOjpyZXBsYWNlKHZtLCBvd25lciwgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNl
dCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChzbG90LnR5cGUoKSA9
PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5KTsKIAotICAgICAgICBpZiAoIU1hY3JvQXNz
ZW1ibGVyOjppc1B0ckFsaWduZWRBZGRyZXNzT2Zmc2V0KG9mZnNldFJlbGF0aXZlVG9QYXRjaGVk
U3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSkpCi0gICAgICAgICAgICByZXR1cm4gR2l2ZVVw
T25DYWNoZTsKKyAgICAgICAgICAgIGlmICghc3RydWN0dXJlLT5pc09iamVjdCgpIHx8IHN0cnVj
dHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7CiAKLSAgICAgICAgc3RydWN0dXJlLT5kaWRDYWNoZVByb3BlcnR5UmVwbGFjZW1lbnQoKnZt
LCBzbG90LmNhY2hlZE9mZnNldCgpKTsKLSAgICAgICAgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKCp2
bSwgY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBpZGVudCwgc2xvdC5jYWNoZWRPZmZz
ZXQoKSwgYXBwcm9wcmlhdGVMaXN0QnVpbGRpbmdQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2lu
ZCksIGZhbHNlKTsKLSAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRSZXBsYWNlKCp2bSwgY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKLSAgICAgICAgcmV0dXJuIFJl
dHJ5Q2FjaGVMYXRlcjsKLSAgICB9CisgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7
CisgICAgICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9CisgICAgICAgICAgICAgICAg
U3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3Vy
cmVudGx5KAorICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSwgMCwg
cHJvcGVydHlPZmZzZXQpOworICAgICAgICAgICAgaWYgKCFuZXdTdHJ1Y3R1cmUgfHwgIW5ld1N0
cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQorICAgICAgICAgICAgICAg
IHJldHVybiBHaXZlVXBPbkNhY2hlOwogCi0gICAgaWYgKChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9t
KCkgfHwgc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpKQotICAgICAgICAmJiBzdHViSW5mby5wYXRj
aC5zcGlsbE1vZGUgPT0gRG9udFNwaWxsKSB7Ci0gICAgICAgIFJlZlB0cjxKSVRTdHViUm91dGlu
ZT4gc3R1YlJvdXRpbmU7CisgICAgICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJlLT5wcmV2aW91
c0lEKCkgPT0gc3RydWN0dXJlKTsKKyAgICAgICAgICAgIEFTU0VSVCghbmV3U3RydWN0dXJlLT5p
c0RpY3Rpb25hcnkoKSk7CisgICAgICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJlLT5pc09iamVj
dCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgY29uZGl0aW9uU2V0OworICAgICAgICAgICAgaWYgKHB1dEtpbmQgPT0gTm90RGlyZWN0KSB7
CisgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0KKyAgICAgICAgICAgICAgICAgICAgZ2Vu
ZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzKAorICAgICAgICAgICAgICAgICAg
ICAgICAgdm0sIG93bmVyLCBleGVjLCBuZXdTdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7CisgICAg
ICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgIH0KIAorICAgICAgICAgICAg
bmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OnRyYW5zaXRpb24odm0sIG93bmVyLCBzdHJ1Y3R1cmUsIG5l
d1N0cnVjdHVyZSwgb2Zmc2V0LCBjb25kaXRpb25TZXQpOworICAgICAgICB9CisgICAgfSBlbHNl
IGlmIChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgfHwgc2xvdC5pc0NhY2hlYWJsZVNldHRlcigp
KSB7CiAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKICAg
ICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OwotICAgICAgICBpZiAoc2xvdC5iYXNlKCkgIT0g
YmFzZVZhbHVlKSB7Ci0gICAgICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpKSB7
CisKKyAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkgeworICAgICAgICAgICAg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworCisgICAgICAgICAgICBp
ZiAoc2xvdC5iYXNlKCkgIT0gYmFzZVZhbHVlKSB7CiAgICAgICAgICAgICAgICAgY29uZGl0aW9u
U2V0ID0KICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBl
UHJvcGVydHlIaXRDdXN0b20oCi0gICAgICAgICAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5iYXNlKCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICBpZGVudC5pbXBsKCkpOwotICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPQotICAgICAgICAgICAgICAgICAgICBnZW5l
cmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKLSAgICAgICAgICAgICAgICAg
ICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJl
LCBzbG90LmJhc2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50LmltcGwoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB2bSwgb3duZXIsIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5i
YXNlKCksIGlkZW50LmltcGwoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQu
aXNWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgIG9mZnNldCA9
IHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSA/IGludmFsaWRPZmZzZXQgOiBjb25kaXRpb25TZXQu
c2xvdEJhc2VDb25kaXRpb24oKS5vZmZzZXQoKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOwotCi0gICAgICAgIFBvbHltb3JwaGljUHV0
QnlJZExpc3QqIGxpc3Q7Ci0gICAgICAgIGxpc3QgPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojpm
cm9tKHB1dEtpbmQsIHN0dWJJbmZvKTsKLQotICAgICAgICBib29sIHJlc3VsdCA9IGdlbmVyYXRl
QnlJZFN0dWIoCi0gICAgICAgICAgICBleGVjLCBraW5kRm9yKHNsb3QpLCBpZGVudCwgY3VzdG9t
Rm9yKHNsb3QpLCBzdHViSW5mbywgY29uZGl0aW9uU2V0LCBzbG90LmJhc2UoKSwKLSAgICAgICAg
ICAgIG9mZnNldCwgc3RydWN0dXJlLCBmYWxzZSwgbnVsbHB0ciwKLSAgICAgICAgICAgIHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRh
Q2FsbFRvRG9uZSksCi0gICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFi
ZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKSwKLSAgICAgICAg
ICAgIHN0dWJSb3V0aW5lKTsKLSAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgCi0gICAgICAgIGxpc3QtPmFkZEFjY2VzcyhQdXRC
eUlkQWNjZXNzOjpzZXR0ZXIoCi0gICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksCi0gICAgICAgICAgICBzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkgPyBQdXRCeUlk
QWNjZXNzOjpTZXR0ZXIgOiBQdXRCeUlkQWNjZXNzOjpDdXN0b21TZXR0ZXIsCi0gICAgICAgICAg
ICBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgc2xvdC5jdXN0b21TZXR0ZXIoKSwgc3R1YlJvdXRp
bmUpKTsKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1
bXApLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAg
ICAgICByZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwg
YXBwcm9wcmlhdGVMaXN0QnVpbGRpbmdQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOwot
ICAgICAgICBSRUxFQVNFX0FTU0VSVCghbGlzdC0+aXNGdWxsKCkpOwotICAgICAgICByZXR1cm4g
UmV0cnlDYWNoZUxhdGVyOwotICAgIH0KIAotICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotfQot
Ci12b2lkIHJlcGF0Y2hQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNv
bnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQ
dXRLaW5kIHB1dEtpbmQpCi17Ci0gICAgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIo
ZXhlYy0+Y29kZUJsb2NrKCktPm1fbG9jaywgZXhlYy0+dm0oKS5oZWFwKTsKLSAgICAKLSAgICBp
ZiAodHJ5Q2FjaGVQdXRCeUlEKGV4ZWMsIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5h
bWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kKSA9PSBHaXZlVXBPbkNhY2hlKQotICAgICAgICBy
ZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOwotfQot
Ci1zdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVpbGRQdXRCeUlkTGlzdChFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQotewotICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZt
KCk7Ci0KLSAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKLSAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7Ci0KLSAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGVQdXQoKSAmJiAhc2xvdC5pc0Nh
Y2hlYWJsZUN1c3RvbSgpICYmICFzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkpCi0gICAgICAgIHJl
dHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgaWYgKCFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNz
ZXNBcmVDYWNoZWFibGUoKSkKLSAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAv
LyBPcHRpbWl6ZSBzZWxmIGFjY2Vzcy4KLSAgICBpZiAoc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVl
ICYmIHNsb3QuaXNDYWNoZWFibGVQdXQoKSkgewotICAgICAgICBQb2x5bW9ycGhpY1B1dEJ5SWRM
aXN0KiBsaXN0OwotICAgICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwot
ICAgICAgICAKLSAgICAgICAgaWYgKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6TmV3
UHJvcGVydHkpIHsKLSAgICAgICAgICAgIGxpc3QgPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojpm
cm9tKHB1dEtpbmQsIHN0dWJJbmZvKTsKLSAgICAgICAgICAgIGlmIChsaXN0LT5pc0Z1bGwoKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsgLy8gV2lsbCBnZXQgaGVyZSBk
dWUgdG8gcmVjdXJzaW9uLgotCi0gICAgICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZTsK
KyAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpzZXR0ZXIoCisgICAgICAgICAgICAg
ICAgdm0sIG93bmVyLCBBY2Nlc3NUeXBlOjpDdXN0b21TZXR0ZXIsIHN0cnVjdHVyZSwgaW52YWxp
ZE9mZnNldCwgY29uZGl0aW9uU2V0LAorICAgICAgICAgICAgICAgIHNsb3QuY3VzdG9tU2V0dGVy
KCkpOworICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQgY29uZGl0aW9uU2V0OwotICAgICAgICAgICAgaWYgKCFlbWl0UHV0VHJhbnNpdGlvblN0
dWIoZXhlYywgdm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0
S2luZCwgb2xkU3RydWN0dXJlLCBjb25kaXRpb25TZXQpKQotICAgICAgICAgICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OwogCi0g
ICAgICAgICAgICBzdHViUm91dGluZSA9IHN0dWJJbmZvLnN0dWJSb3V0aW5lOwotICAgICAgICAg
ICAgbGlzdC0+YWRkQWNjZXNzKAotICAgICAgICAgICAgICAgIFB1dEJ5SWRBY2Nlc3M6OnRyYW5z
aXRpb24oCi0gICAgICAgICAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFi
bGUoKSwKLSAgICAgICAgICAgICAgICAgICAgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsIGNvbmRp
dGlvblNldCwKLSAgICAgICAgICAgICAgICAgICAgc3R1YlJvdXRpbmUpKTsKKyAgICAgICAgICAg
IGlmIChzbG90LmJhc2UoKSAhPSBiYXNlVmFsdWUpIHsKKyAgICAgICAgICAgICAgICBjb25kaXRp
b25TZXQgPQorICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5
cGVQcm9wZXJ0eUhpdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBvd25lciwgZXhlYywg
c3RydWN0dXJlLCBzbG90LmJhc2UoKSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBH
aXZlVXBPbkNhY2hlOworICAgICAgICAgICAgICAgIG9mZnNldCA9IGNvbmRpdGlvblNldC5zbG90
QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICAgICAgb2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKIAotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgbGlzdCA9IFBvbHltb3JwaGljUHV0QnlJZExpc3Q6OmZyb20ocHV0S2luZCwg
c3R1YkluZm8pOwotICAgICAgICAgICAgaWYgKGxpc3QtPmlzRnVsbCgpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOyAvLyBXaWxsIGdldCBoZXJlIGR1ZSB0byByZWN1cnNp
b24uCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN0cnVjdHVyZS0+ZGlkQ2FjaGVQcm9wZXJ0
eVJlcGxhY2VtZW50KCp2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIC8vIFdlJ3JlIG5vdyBjb21taXR0ZWQgdG8gY3JlYXRpbmcgdGhlIHN0dWIuIE1v
Z3JpZnkgdGhlIG1ldGEtZGF0YSBhY2NvcmRpbmdseS4KLSAgICAgICAgICAgIGJvb2wgcmVzdWx0
ID0gZW1pdFB1dFJlcGxhY2VTdHViKAotICAgICAgICAgICAgICAgIGV4ZWMsIHByb3BlcnR5TmFt
ZSwgc2xvdCwgc3R1YkluZm8sIAotICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgQ29kZUxvY2F0
aW9uTGFiZWwobGlzdC0+Y3VycmVudFNsb3dQYXRoVGFyZ2V0KCkpLCBzdHViUm91dGluZSk7Ci0g
ICAgICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25D
YWNoZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbGlzdC0+YWRkQWNjZXNzKAotICAgICAg
ICAgICAgICAgIFB1dEJ5SWRBY2Nlc3M6OnJlcGxhY2UoCi0gICAgICAgICAgICAgICAgICAgICp2
bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKLSAgICAgICAgICAgICAgICAgICAgc3Ry
dWN0dXJlLCBzdHViUm91dGluZSkpOworICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6
OnNldHRlcigKKyAgICAgICAgICAgICAgICB2bSwgb3duZXIsIEFjY2Vzc1R5cGU6OlNldHRlciwg
c3RydWN0dXJlLCBvZmZzZXQsIGNvbmRpdGlvblNldCwgbnVsbHB0cik7CiAgICAgICAgIH0KLSAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwgQ29kZUxv
Y2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICAgICAgaWYgKGxp
c3QtPmlzRnVsbCgpKQotICAgICAgICAgICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihz
bG90LCBwdXRLaW5kKSk7Ci0KLSAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKICAgICB9
CiAKLSAgICBpZiAoKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSB8fCBzbG90LmlzQ2FjaGVhYmxl
U2V0dGVyKCkpCi0gICAgICAgICYmIHN0dWJJbmZvLnBhdGNoLnNwaWxsTW9kZSA9PSBEb250U3Bp
bGwpIHsKLSAgICAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKLSAgICAg
ICAgCi0gICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKLSAg
ICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OwotICAgICAgICBpZiAoc2xvdC5iYXNlKCkgIT0g
YmFzZVZhbHVlKSB7Ci0gICAgICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpKSB7
Ci0gICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0KLSAgICAgICAgICAgICAgICAgICAgZ2Vu
ZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXRDdXN0b20oCi0gICAgICAgICAg
ICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0
cnVjdHVyZSwgc2xvdC5iYXNlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5h
bWUuaW1wbCgpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY29uZGl0
aW9uU2V0ID0KLSAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90
eXBlUHJvcGVydHlIaXQoCi0gICAgICAgICAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5iYXNlKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUuaW1wbCgpKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgIG9mZnNldCA9IHNsb3QuaXNDYWNoZWFi
bGVDdXN0b20oKSA/IGludmFsaWRPZmZzZXQgOiBjb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRp
b24oKS5vZmZzZXQoKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBvZmZzZXQgPSBzbG90
LmNhY2hlZE9mZnNldCgpOwotCi0gICAgICAgIFBvbHltb3JwaGljUHV0QnlJZExpc3QqIGxpc3Q7
Ci0gICAgICAgIGxpc3QgPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojpmcm9tKHB1dEtpbmQsIHN0
dWJJbmZvKTsKLQotICAgICAgICBib29sIHJlc3VsdCA9IGdlbmVyYXRlQnlJZFN0dWIoCi0gICAg
ICAgICAgICBleGVjLCBraW5kRm9yKHNsb3QpLCBwcm9wZXJ0eU5hbWUsIGN1c3RvbUZvcihzbG90
KSwgc3R1YkluZm8sIGNvbmRpdGlvblNldCwgc2xvdC5iYXNlKCksCi0gICAgICAgICAgICBvZmZz
ZXQsIHN0cnVjdHVyZSwgZmFsc2UsIG51bGxwdHIsCi0gICAgICAgICAgICBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0Rv
bmUpLAotICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlzdC0+Y3VycmVudFNsb3dQYXRo
VGFyZ2V0KCkpLAotICAgICAgICAgICAgc3R1YlJvdXRpbmUpOwotICAgICAgICBpZiAoIXJlc3Vs
dCkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAKLSAgICAgICAg
bGlzdC0+YWRkQWNjZXNzKFB1dEJ5SWRBY2Nlc3M6OnNldHRlcigKLSAgICAgICAgICAgICp2bSwg
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKLSAgICAgICAgICAgIHNsb3QuaXNDYWNoZWFi
bGVTZXR0ZXIoKSA/IFB1dEJ5SWRBY2Nlc3M6OlNldHRlciA6IFB1dEJ5SWRBY2Nlc3M6OkN1c3Rv
bVNldHRlciwKLSAgICAgICAgICAgIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBzbG90LmN1c3Rv
bVNldHRlcigpLCBzdHViUm91dGluZSkpOwotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBh
dGNoSnVtcChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZv
LnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5j
b2RlKCkuY29kZSgpKSk7Ci0gICAgICAgIGlmIChsaXN0LT5pc0Z1bGwoKSkKLSAgICAgICAgICAg
IHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHBy
b3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOworICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZSgKKyAgICAg
ICAgdm0sIGNvZGVCbG9jaywgcHJvcGVydHlOYW1lLCBzdGQ6Om1vdmUobmV3Q2FzZSkpOworICAg
IAorICAgIGlmICghY29kZVB0cikKKyAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAKLSAg
ICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLSAgICB9Ci0gICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7CisgICAgcmVzZXRQdXRCeUlEQ2hlY2tBbmRMb2FkKHN0dWJJbmZvKTsKKyAgICBNYWNy
b0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoCisgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5qdW1wQXRPZmZzZXQoCisgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxU
b0p1bXApLAorICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby5zdHViUm91dGluZS0+
Y29kZSgpLmNvZGUoKSkpOworICAgIAorICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CiB9CiAK
LXZvaWQgYnVpbGRQdXRCeUlkTGlzdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVl
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBj
b25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywg
UHV0S2luZCBwdXRLaW5kKQordm9pZCByZXBhdGNoUHV0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQogewogICAgIEdDU2FmZUNvbmN1cnJlbnRK
SVRMb2NrZXIgbG9ja2VyKGV4ZWMtPmNvZGVCbG9jaygpLT5tX2xvY2ssIGV4ZWMtPnZtKCkuaGVh
cCk7CiAgICAgCi0gICAgaWYgKHRyeUJ1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZVZhbHVlLCBz
dHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQpID09IEdpdmVV
cE9uQ2FjaGUpCisgICAgaWYgKHRyeUNhY2hlUHV0QnlJRChleGVjLCBiYXNlVmFsdWUsIHN0cnVj
dHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0S2luZCkgPT0gR2l2ZVVwT25D
YWNoZSkKICAgICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3Qs
IHB1dEtpbmQpKTsKIH0KIApAQCAtMTQ3OSw3ICs1MDEsOCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVB
Y3Rpb24gdHJ5UmVwYXRjaEluKAogICAgIH0KICAgICAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFNj
cmlwdEV4ZWN1dGFibGUqIG93bmVyID0gY29kZUJsb2NrLT5vd25lclNjcmlwdEV4ZWN1dGFibGUo
KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
YmFzZS0+c3RydWN0dXJlKCp2bSk7CiAgICAgCiAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgY29uZGl0aW9uU2V0OwpAQCAtMTQ5NCw5MSArNTE3LDE5IEBAIHN0YXRpYyBJbmxpbmVDYWNo
ZUFjdGlvbiB0cnlSZXBhdGNoSW4oCiAgICAgfQogICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFs
aWQoKSkKICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgCi0gICAgUG9seW1vcnBo
aWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Q7Ci0gICAgaW50
IGxpc3RJbmRleDsKLSAgICAKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBzdWNjZXNzTGFiZWwgPSBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5k
ZWx0YUNhbGxUb0RvbmUpOwotICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlTGFiZWw7Ci0g
ICAgCi0gICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0KSB7Ci0gICAg
ICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVj
dHVyZUxpc3QoKTsKLSAgICAgICAgc3R1YkluZm8uaW5pdEluTGlzdChwb2x5bW9ycGhpY1N0cnVj
dHVyZUxpc3QsIDApOwotICAgICAgICBzbG93Q2FzZUxhYmVsID0gc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZWx0
YUNhbGxUb1Nsb3dDYXNlKTsKLSAgICAgICAgbGlzdEluZGV4ID0gMDsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19pbl9s
aXN0KTsKLSAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gc3R1YkluZm8udS5pbkxp
c3Quc3RydWN0dXJlTGlzdDsKLSAgICAgICAgbGlzdEluZGV4ID0gc3R1YkluZm8udS5pbkxpc3Qu
bGlzdFNpemU7Ci0gICAgICAgIHNsb3dDYXNlTGFiZWwgPSBDb2RlTG9jYXRpb25MYWJlbChwb2x5
bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4IC0gMV0uc3R1YlJvdXRpbmUtPmNv
ZGUoKS5jb2RlKCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKGxpc3RJbmRleCA9PSBQT0xZTU9S
UEhJQ19MSVNUX0NBQ0hFX1NJWkUpCi0gICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsK
LSAgICB9Ci0gICAgCi0gICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKLSAg
ICAKLSAgICB7Ci0gICAgICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihz
dHViSW5mby5wYXRjaC5iYXNlR1BSKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHN0YXRp
Y19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVHUFIpOwotICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IFRlbXBSZWdpc3RlclNldChzdHViSW5mby5wYXRjaC51c2VkUmVnaXN0ZXJz
KS5nZXRGcmVlR1BSKCk7Ci0gICAgICAgIAotICAgICAgICBDQ2FsbEhlbHBlcnMgc3R1YkppdCh2
bSk7Ci0gICAgICAgIAotICAgICAgICBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoOwotICAgICAg
ICBpZiAoc2NyYXRjaEdQUiA9PSBJbnZhbGlkR1BSUmVnKSB7Ci0gICAgICAgICAgICBzY3JhdGNo
R1BSID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHJlc3VsdEdQ
Uik7Ci0gICAgICAgICAgICBzdHViSml0LnB1c2hUb1NhdmUoc2NyYXRjaEdQUik7Ci0gICAgICAg
ICAgICBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IHRydWU7Ci0gICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7Ci0gICAgICAgIGZhaWx1cmVDYXNl
cy5hcHBlbmQoc3R1YkppdC5icmFuY2hTdHJ1Y3R1cmUoCi0gICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAotICAgICAgICAgICAgc3RydWN0dXJl
KSk7Ci0KLSAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsK
LSAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVz
V2F0Y2hwb2ludHMoKSkKLSAgICAgICAgICAgIHZtLT5yZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1
cmVQcm9wZXJ0eShpZGVudCwgc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKIAot
ICAgICAgICBpZiAoc2xvdC53YXRjaHBvaW50U2V0KCkpCi0gICAgICAgICAgICBzbG90LndhdGNo
cG9pbnRTZXQoKS0+YWRkKHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7CisgICAg
c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjppbigKKyAg
ICAgICAgdm0sIG93bmVyLCB3YXNGb3VuZCA/IEFjY2Vzc0Nhc2U6OkluSGl0IDogQWNjZXNzQ2Fz
ZTpJbk1pc3MsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0KTsKIAotICAgICAgICBjaGVja09iamVj
dFByb3BlcnR5Q29uZGl0aW9ucygKLSAgICAgICAgICAgIGNvbmRpdGlvblNldCwgZXhlYy0+Y29k
ZUJsb2NrKCksIHN0dWJJbmZvLCBzdHViSml0LCBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOwot
ICAgICAgICAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHdhc0ZvdW5k
KSkpLCByZXN1bHRHUFIpOwotI2Vsc2UKLSAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIod2FzRm91bmQpLCByZXN1bHRHUFIpOwotI2VuZGlmCi0gICAgICAg
IAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzLCBmYWlsOwotICAgICAgICAK
LSAgICAgICAgZW1pdFJlc3RvcmVTY3JhdGNoKHN0dWJKaXQsIG5lZWRUb1Jlc3RvcmVTY3JhdGNo
LCBzY3JhdGNoR1BSLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMpOwotICAgICAgICAKLSAg
ICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIHN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9j
aygpLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwotICAgICAgICBpZiAocGF0Y2hCdWZmZXIuZGlk
RmFpbFRvQWxsb2NhdGUoKSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAg
ICAgICAKLSAgICAgICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0
b3JlU2NyYXRjaCwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzLCBzdWNjZXNzTGFiZWwsIHNs
b3dDYXNlTGFiZWwpOwotICAgICAgICAKLSAgICAgICAgc3R1YlJvdXRpbmUgPSBGSU5BTElaRV9D
T0RFX0ZPUl9TVFVCKAotICAgICAgICAgICAgZXhlYy0+Y29kZUJsb2NrKCksIHBhdGNoQnVmZmVy
LAotICAgICAgICAgICAgKCJJbiAoZm91bmQgPSAlcykgc3R1YiBmb3IgJXMsIHJldHVybiBwb2lu
dCAlcCIsCi0gICAgICAgICAgICAgICAgd2FzRm91bmQgPyAieWVzIiA6ICJubyIsIHRvQ1N0cmlu
ZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwKLSAgICAgICAgICAgICAgICBzdWNjZXNzTGFi
ZWwuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgIH0KLSAgICAKLSAgICBwb2x5bW9ycGhpY1N0
cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4XS5zZXQoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJlLCB0cnVlKTsKLSAgICBzdHViSW5mby51
LmluTGlzdC5saXN0U2l6ZSsrOwotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVt
cChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNo
LmRlbHRhQ2FsbFRvSnVtcCksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCku
Y29kZSgpKSk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIgPSBzdHViSW5mby5h
ZGRBY2Nlc3NDYXNlKG5ld0Nhc2UpOworICAgIGlmICghY29kZVB0cikKKyAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoCisgICAg
ICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0
Y2guZGVsdGFDYWxsVG9KdW1wKSwKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoY29kZVB0cikp
OwogICAgIAotICAgIHJldHVybiBsaXN0SW5kZXggPCAoUE9MWU1PUlBISUNfTElTVF9DQUNIRV9T
SVpFIC0gMSkgPyBSZXRyeUNhY2hlTGF0ZXIgOiBHaXZlVXBPbkNhY2hlOworICAgIHJldHVybiBS
ZXRyeUNhY2hlTGF0ZXI7CiB9CiAKIHZvaWQgcmVwYXRjaEluKApAQCAtMTkyNiw5ICs4NzcsOCBA
QCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoCiAgICAgICAgIGNhbGxMaW5rSW5mby5yZW1vdmUo
KTsKIH0KIAotdm9pZCByZXNldEdldEJ5SUQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbykKK3N0YXRpYyB2b2lkIHJlc2V0R2V0QnlJRENoZWNrQW5kTG9h
ZChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7Ci0gICAgcmVwYXRjaENhbGwoY29kZUJs
b2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6
ZSk7CiAgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzIgc3RydWN0dXJlTGFiZWwgPSBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldCgtKGludHB0cl90KXN0dWJJ
bmZvLnBhdGNoLmRlbHRhQ2hlY2tJbW1Ub0NhbGwpOwogICAgIGlmIChNYWNyb0Fzc2VtYmxlcjo6
Y2FuSnVtcFJlcGxhY2VQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaCgpKSB7CiAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaDMyV2l0
aFBhdGNoKApAQCAtMTk0NSwyNCArODk1LDE3IEBAIHZvaWQgcmVzZXRHZXRCeUlEKENvZGVCbG9j
ayogY29kZUJsb2NrLCAKICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENvbXBhY3Qoc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5w
YXRjaC5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlKSwgMCk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGF0Y2hDb21wYWN0KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21w
YWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUp
LCAwKTsKICNlbmRpZgorfQorCit2b2lkIHJlc2V0R2V0QnlJRChDb2RlQmxvY2sqIGNvZGVCbG9j
aywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIHJlcGF0Y2hDYWxsKGNvZGVC
bG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1p
emUpOworICAgIHJlc2V0R2V0QnlJRENoZWNrQW5kTG9hZChzdHViSW5mbyk7CiAgICAgTWFjcm9B
c3NlbWJsZXI6OnJlcGF0Y2hKdW1wKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRP
ZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwgc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2Fz
ZSkpOwogfQogCi12b2lkIHJlc2V0UHV0QnlJRChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvKQorc3RhdGljIHZvaWQgcmVzZXRQdXRCeUlEQ2hlY2tBbmRM
b2FkKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKIHsKLSAgICBWX0pJVE9wZXJhdGlvbl9F
U3NpSkpJIHVub3B0aW1pemVkRnVuY3Rpb24gPSBiaXR3aXNlX2Nhc3Q8Vl9KSVRPcGVyYXRpb25f
RVNzaUpKST4ocmVhZENhbGxUYXJnZXQoY29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24pLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgIFZfSklUT3BlcmF0aW9uX0VTc2lKSkkg
b3B0aW1pemVkRnVuY3Rpb247Ci0gICAgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0
aW9uUHV0QnlJZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5
SWRTdHJpY3RCdWlsZExpc3QpCi0gICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9u
UHV0QnlJZFN0cmljdE9wdGltaXplOwotICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24g
PT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9w
ZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3QpCi0gICAgICAgIG9wdGltaXplZEZ1bmN0
aW9uID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOwotICAgIGVsc2UgaWYgKHVu
b3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdCB8fCB1bm9w
dGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExpc3Qp
Ci0gICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmlj
dE9wdGltaXplOwotICAgIGVsc2UgewotICAgICAgICBBU1NFUlQodW5vcHRpbWl6ZWRGdW5jdGlv
biA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rp
b24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1aWxkTGlzdCk7Ci0gICAgICAg
IG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGlt
aXplOwotICAgIH0KLSAgICByZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbiwgb3B0aW1pemVkRnVuY3Rpb24pOwogICAgIENvZGVMb2NhdGlvbkRhdGFMYWJl
bDMyIHN0cnVjdHVyZUxhYmVsID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJl
bDMyQXRPZmZzZXQoLShpbnRwdHJfdClzdHViSW5mby5wYXRjaC5kZWx0YUNoZWNrSW1tVG9DYWxs
KTsKICAgICBpZiAoTWFjcm9Bc3NlbWJsZXI6OmNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNo
MzJXaXRoUGF0Y2goKSkgewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmV2ZXJ0SnVtcFJlcGxh
Y2VtZW50VG9QYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaCgKQEAgLTE5NzksNiArOTIyLDI0IEBA
IHZvaWQgcmVzZXRQdXRCeUlEKENvZGVCbG9jayogY29kZUJsb2NrLCAKICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6cmVwYXRjaEludDMyKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwz
MkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUpLCAwKTsK
ICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEludDMyKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvUGF5bG9h
ZExvYWRPclN0b3JlKSwgMCk7CiAjZW5kaWYKK30KKwordm9pZCByZXNldFB1dEJ5SUQoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBWX0pJ
VE9wZXJhdGlvbl9FU3NpSkpJIHVub3B0aW1pemVkRnVuY3Rpb24gPSBiaXR3aXNlX2Nhc3Q8Vl9K
SVRPcGVyYXRpb25fRVNzaUpKST4ocmVhZENhbGxUYXJnZXQoY29kZUJsb2NrLCBzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24pLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIFZfSklUT3BlcmF0
aW9uX0VTc2lKSkkgb3B0aW1pemVkRnVuY3Rpb247CisgICAgaWYgKHVub3B0aW1pemVkRnVuY3Rp
b24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdCkKKyAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24g
PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CisgICAgZWxzZSBpZiAodW5vcHRpbWl6
ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0KQorICAgICAgICBvcHRpbWl6
ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICBlbHNl
IGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3Qp
CisgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmlj
dE9wdGltaXplOworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQodW5vcHRpbWl6ZWRGdW5jdGlv
biA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0KTsKKyAgICAgICAgb3B0aW1pemVk
RnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAg
fQorICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LCBvcHRpbWl6ZWRGdW5jdGlvbik7CisgICAgcmVzZXRQdXRCeUlEQ2hlY2tBbmRMb2FkKHN0dWJJ
bmZvKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1bXApLCBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5k
ZWx0YUNhbGxUb1Nsb3dDYXNlKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDE4
OTQ5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsOCBAQCBTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3I6On5TY3JhdGNoUmVnaXN0CiAKIHZvaWQgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
Ojpsb2NrKEdQUlJlZyByZWcpCiB7CisgICAgaWYgKHJlZyA9PSBJbnZhbGlkR1BSUmVnKQorICAg
ICAgICByZXR1cm47CiAgICAgdW5zaWduZWQgaW5kZXggPSBHUFJJbmZvOjp0b0luZGV4KHJlZyk7
CiAgICAgaWYgKGluZGV4ID09IEdQUkluZm86OkludmFsaWRJbmRleCkKICAgICAgICAgcmV0dXJu
OwpAQCAtNTIsMTIgKzU0LDIwIEBAIHZvaWQgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpsb2Nr
KEdQUlIKIAogdm9pZCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OmxvY2soRlBSUmVnIHJlZykK
IHsKKyAgICBpZiAocmVnID09IEludmFsaWRGUFJSZWcpCisgICAgICAgIHJldHVybjsKICAgICB1
bnNpZ25lZCBpbmRleCA9IEZQUkluZm86OnRvSW5kZXgocmVnKTsKICAgICBpZiAoaW5kZXggPT0g
RlBSSW5mbzo6SW52YWxpZEluZGV4KQogICAgICAgICByZXR1cm47CiAgICAgbV9sb2NrZWRSZWdp
c3RlcnMuc2V0RlBSQnlJbmRleChpbmRleCk7CiB9CiAKK3ZvaWQgU2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yOjpsb2NrKEpTVmFsdWVSZWdzIHJlZ3MpCit7CisgICAgbG9jayhyZWdzLnRhZ0dQUigp
KTsKKyAgICBsb2NrKHJlZ3MucGF5bG9hZEdQUigpKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUg
QmFua0luZm8+CiB0eXBlbmFtZSBCYW5rSW5mbzo6UmVnaXN0ZXJUeXBlIFNjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvcjo6YWxsb2NhdGVTY3JhdGNoKCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaAkocmV2aXNpb24g
MTg5NDkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTEgKzQwLDEzIEBAIHN0cnVjdCBTY3JhdGNo
QnVmZmVyOwogCiBjbGFzcyBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgewogcHVibGljOgorICAg
IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcigpIHsgfQogICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9j
YXRvcihjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycyk7CiAgICAgflNjcmF0Y2hSZWdp
c3RlckFsbG9jYXRvcigpOwogCi0gICAgdm9pZCBsb2NrKEdQUlJlZyByZWcpOwotICAgIHZvaWQg
bG9jayhGUFJSZWcgcmVnKTsKKyAgICB2b2lkIGxvY2soR1BSUmVnKTsKKyAgICB2b2lkIGxvY2so
RlBSUmVnKTsKKyAgICB2b2lkIGxvY2soSlNWYWx1ZVJlZ3MpOwogICAgIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEJhbmtJbmZvPgogICAgIHR5cGVuYW1lIEJhbmtJbmZvOjpSZWdpc3RlclR5cGUg
YWxsb2NhdGVTY3JhdGNoKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260784</attachid>
            <date>2015-09-08 13:02:22 -0700</date>
            <delta_ts>2015-09-08 14:46:59 -0700</delta_ts>
            <desc>it compiles!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>242127</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODk0OTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzI0LDggKzMyNCw2IEBACiAJCTBGNDg1MzJBMTg3REZE
RUMwMDgzQjY4NyAvKiBGVExSZWNvdmVyeU9wY29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0ODUzMjYxODdERkRFQzAwODNCNjg3IC8qIEZUTFJl
Y292ZXJ5T3Bjb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEY0OTNBRkExNkQwQ0FEMzAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDkzQUY4MTZE
MENBRDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi87IH07CiAJCTBGNEI5NERDMTdC
OUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0Qjk0REIxN0I5RjA3NTAwREQwM0E0IC8qIFR5
cGVkQXJyYXlJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKLQkJMEY0Q0VENUUxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJ
ZExpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY0Q0VENUMxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwICov
OyB9OwotCQkwRjRDRUQ1RjE4Q0VBN0FCMDA4MDJGRTAgLyogUG9seW1vcnBoaWNHZXRCeUlkTGlz
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0Q0VE
NUQxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJZExpc3QuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjRGMjlERjE4QjZBRDFD
MDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RjI5REQxOEI2
QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNw
cCAqLzsgfTsKIAkJMEY0RjI5RTAxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlv
bkNvdW50RXN0aW1hdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjRGMjlERTE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0
aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjUwQUYzQzE5M0U4QjM5MDA2NzRFRTggLyogREZHU3RydWN0
dXJlQ2xvYmJlclN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjUwQUYzQjE5M0U4QjM5MDA2NzRFRTggLyogREZHU3RydWN0dXJlQ2xvYmJlclN0
YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAg
LTM5OCw4ICszOTYsNiBAQAogCQkwRjcxNENBNDE2RUE5MkYwMDBGM0VCRUIgLyogREZHQmFja3dh
cmRzUHJvcGFnYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjcxNENBMTE2RUE5MkVEMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJv
cGFnYXRpb25QaGFzZS5jcHAgKi87IH07CiAJCTBGNzE0Q0E1MTZFQTkyRjIwMEYzRUJFQiAvKiBE
RkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcxNENBMjE2RUE5MkVEMDBGM0VCRUIgLyogREZHQmFja3dh
cmRzUHJvcGFnYXRpb25QaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGNzQzQkFBMTZCODgyNDkwMDlGOTI3NyAvKiBBUk02NERpc2Fzc2Vt
Ymxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2
NTJBM0EyMDE2NTFDNjYxMDBBODBBRkUgLyogQVJNNjREaXNhc3NlbWJsZXIuY3BwICovOyB9Owot
CQkwRjc1NzZEMjE4RTFGRUU5MDAyRUY0Q0QgLyogQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NTc2
RDAxOEUxRkVFOTAwMkVGNENEIC8qIEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmNwcCAqLzsg
fTsKLQkJMEY3NTc2RDMxOEUxRkVFOTAwMkVGNENEIC8qIEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0
aW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc1
NzZEMTE4RTFGRUU5MDAyRUY0Q0QgLyogQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjc2NkQyODE1
QThDQzFFMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NjZEMjYxNUE4Q0MxQjAwOEYzNjNFIC8qIEpJ
VFN0dWJSb3V0aW5lLmNwcCAqLzsgfTsKIAkJMEY3NjZEMkIxNUE4Q0MzODAwOEYzNjNFIC8qIEpJ
VFN0dWJSb3V0aW5lU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNzY2RDI5MTVBOENDMzQwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZVNldC5j
cHAgKi87IH07CiAJCTBGNzY2RDJDMTVBOENDM0EwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZVNl
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NjZE
MkExNUE4Q0MzNDAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTQ3Myw4ICs0NjksNiBAQAogCQkw
RjlFMzI2NDFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUUzMjYy
MUIwNUFCMDQwMDgwMUVENSAvKiBERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOUZCNEY0MTdG
Q0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUZCNEYyMTdGQ0I5MTcwMENCNjdGOCAv
KiBERkdTdGFja0xheW91dFBoYXNlLmNwcCAqLzsgfTsKIAkJMEY5RkI0RjUxN0ZDQjkxNzAwQ0I2
N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUZCNEYzMTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xh
eW91dFBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKLQkJMEY5RkM4QzMxNEUxQjVGRTAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3Qu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RkM4
QkYxNEUxQjVGQjAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwICovOyB9Owot
CQkwRjlGQzhDNDE0RTFCNjAwMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RkM4QzAxNEUx
QjVGQjAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjlGQzhDNTE0RTFCNjA0MDBENTJB
RTAgLyogUHV0S2luZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY5RkM4QzExNEUxQjVGQjAwRDUyQUUwIC8qIFB1dEtpbmQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkEyQzE3QjE3RDdDRjg0MDA5
RDAxNUYgLyogVGVzdFJ1bm5lclV0aWxzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGQTJDMTc5MTdEN0NGODQwMDlEMDE1RiAvKiBUZXN0UnVubmVy
VXRpbHMuY3BwICovOyB9OwogCQkwRkEyQzE3QzE3RDdDRjg0MDA5RDAxNUYgLyogVGVzdFJ1bm5l
clV0aWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkEyQzE3QTE3RDdDRjg0MDA5RDAxNUYgLyogVGVzdFJ1bm5lclV0aWxzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTc0Miw2ICs3MzYsOCBAQAog
CQkwRkY4QkRFQTFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY4QkRFODFBRDRDRjcxMDBE
RkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5jcHAgKi87IH07CiAJCTBGRjhCREVCMUFENENGNzEwMERG
RTg4NCAvKiBJbmZlcnJlZFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkY4QkRFOTFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRjky
MkQ0MTRGNDZCNDEwMDQxQTI0RSAvKiBMTEludE9mZnNldHNFeHRyYWN0b3IuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NjgwQTExNEJBN0Y4MjAw
QkZFMjcyIC8qIExMSW50T2Zmc2V0c0V4dHJhY3Rvci5jcHAgKi87IH07CisJCTBGRjlDRTczMUI5
Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY5Q0U3MTFCOUNENkQwMDA0RURDQTYgLyog
UG9seW1vcnBoaWNBY2Nlc3MuY3BwICovOyB9OworCQkwRkY5Q0U3NDFCOUNENkQwMDA0RURDQTYg
LyogUG9seW1vcnBoaWNBY2Nlc3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRjlDRTcyMUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vz
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
RkE1NDk3MTZCODgzNTAwMEIzQTk4MiAvKiBBNjRET3Bjb2RlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MkEzQTIyMTY1MUM2OTcwMEE4MEFGRSAv
KiBBNjRET3Bjb2RlLmNwcCAqLzsgfTsKIAkJMEZGQTU0OTgxNkI4ODM1MzAwQjNBOTgyIC8qIEE2
NERPcGNvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDY1MkEzQTIzMTY1MUM2OTcwMEE4MEFGRSAvKiBBNjRET3Bjb2RlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGQjZDMzgxQUY0OEREQzAwREIx
QkY3IC8qIFR5cGVvZlR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZGQjZDMzYxQUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5cGUuY3BwICov
OyB9OwpAQCAtMjE1Niw4ICsyMTUyLDYgQEAKIAkJMEY0ODUzMjYxODdERkRFQzAwODNCNjg3IC8q
IEZUTFJlY292ZXJ5T3Bjb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZU
TFJlY292ZXJ5T3Bjb2RlLmg7IHBhdGggPSBmdGwvRlRMUmVjb3ZlcnlPcGNvZGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0OTNBRjgxNkQwQ0FEMTAwODQ1MDhCIC8qIFNvdXJj
ZVByb3ZpZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvdXJj
ZVByb3ZpZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0Qjk0REIxN0I5
RjA3NTAwREQwM0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFR5cGVkQXJyYXlJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTBGNENFRDVDMThDRUE3QUIwMDgwMkZFMCAvKiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBvbHltb3JwaGljR2V0
QnlJZExpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjRDRUQ1RDE4Q0VB
N0FCMDA4MDJGRTAgLyogUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNEYyOUREMThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVj
dXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHA7IHBh
dGggPSBkZmcvREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRGMjlERTE4QjZBRDFDMDA1N0JDMTUgLyogREZH
U3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaDsg
cGF0aCA9IGRmZy9ERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjUwQUYzQjE5M0U4QjM5MDA2NzRFRTggLyogREZH
U3RydWN0dXJlQ2xvYmJlclN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oOyBwYXRoID0gZGZnL0RGR1N0cnVjdHVyZUNsb2Ji
ZXJTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjIyOSw4ICsyMjIzLDYg
QEAKIAkJMEY3MDI1QTgxNzE0QjBGODAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1v
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdPU1JFeGl0Q29tcGlsZXJD
b21tb24uaDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3MTRDQTExNkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3
YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHQmFj
a3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGNzE0Q0EyMTZFQTkyRUQwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0JhY2t3YXJkc1Byb3BhZ2F0
aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNzU3NkQwMThFMUZFRTkwMDJFRjRDRCAvKiBB
Y2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTBGNzU3NkQxMThFMUZFRTkwMDJFRjRDRCAvKiBBY2Nlc3NvckNhbGxK
SVRTdHViUm91dGluZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBY2Nlc3Nv
ckNhbGxKSVRTdHViUm91dGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc2
NkQxQzE1QTUwMjhEMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSklUU3R1YlJvdXRpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY3NjZEMjYxNUE4Q0MxQjAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVFN0dWJSb3V0aW5lLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NjZEMjkxNUE4Q0MzNDAwOEYzNjNFIC8q
IEpJVFN0dWJSb3V0aW5lU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpJVFN0dWJSb3V0aW5lU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTIzMDMsOCArMjI5NSw2IEBACiAJCTBGOUUzMjYyMUIwNUFCMDQwMDgwMUVENSAvKiBERkdTdG9y
ZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR1N0b3JlQmFy
cmllckluc2VydGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUZC
NEYyMTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1N0YWNrTGF5b3V0UGhhc2UuY3BwOyBwYXRo
ID0gZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjlGQjRGMzE3RkNCOTE3MDBDQjY3RjggLyogREZHU3RhY2tMYXlvdXRQaGFzZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTdGFja0xheW91dFBoYXNlLmg7IHBh
dGggPSBkZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkwRjlGQzhCRjE0RTFCNUZCMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQb2x5bW9ycGhpY1B1dEJ5
SWRMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY5RkM4QzAxNEUxQjVG
QjAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjlGQzhDMTE0RTFCNUZCMDBENTJBRTAgLyogUHV0S2luZC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQdXRLaW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGQTJDMTc5MTdEN0NGODQwMDlEMDE1RiAvKiBUZXN0UnVubmVyVXRpbHMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGVzdFJ1bm5lclV0aWxz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZBMkMxN0ExN0Q3Q0Y4NDAwOUQw
MTVGIC8qIFRlc3RSdW5uZXJVdGlscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBUZXN0UnVubmVyVXRpbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1Nzks
NiArMjU2OSw4IEBACiAJCTBGRjhCREU4MUFENENGNzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluZmVycmVkVmFsdWUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkY4QkRFOTFBRDRDRjcxMDBERkU4
ODQgLyogSW5mZXJyZWRWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bmZlcnJlZFZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjkyMkNGMTRG
NDZCMTMwMDQxQTI0RSAvKiBKU0NMTEludE9mZnNldHNFeHRyYWN0b3IgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0
YWJsZSI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IEpTQ0xMSW50T2Zmc2V0c0V4dHJhY3Rv
cjsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKKwkJMEZGOUNFNzExQjlDRDZE
MDAwNEVEQ0E2IC8qIFBvbHltb3JwaGljQWNjZXNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFBvbHltb3JwaGljQWNjZXNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZGOUNFNzIxQjlDRDZEMDAwNEVEQ0E2IC8qIFBvbHltb3JwaGljQWNjZXNz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvbHltb3JwaGljQWNjZXNzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRkI2QzM2MUFGNDhEREMwMERCMUJGNyAv
KiBUeXBlb2ZUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFR5
cGVvZlR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkZCNkMzNzFBRjQ4
RERDMDBEQjFCRjcgLyogVHlwZW9mVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBUeXBlb2ZUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRkM5OUQw
MTg0RUM4QUQwMDlDMTBBQiAvKiBDb25zdGFudE1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ29uc3RhbnRNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC00MDk2LDEwICs0MDg4LDYgQEAKIAkJMTQyOUQ5MkMwRUQyMkQ3MDAwQjg5NjE5IC8qIGppdCAq
LyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJMEZGMDU0Rjcx
QUMzNUI0NDAwRTVCRTU3IC8qIEV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5jcHAgKi8sCi0JCQkJ
MEZGMDU0RjgxQUMzNUI0NDAwRTVCRTU3IC8qIEV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5oICov
LAotCQkJCTBGNzU3NkQwMThFMUZFRTkwMDJFRjRDRCAvKiBBY2Nlc3NvckNhbGxKSVRTdHViUm91
dGluZS5jcHAgKi8sCi0JCQkJMEY3NTc2RDExOEUxRkVFOTAwMkVGNENEIC8qIEFjY2Vzc29yQ2Fs
bEpJVFN0dWJSb3V0aW5lLmggKi8sCiAJCQkJMEY2QjFDQzcxODY0MURGODAwODQ1RDk3IC8qIEFy
aXR5Q2hlY2tGYWlsUmV0dXJuVGh1bmtzLmNwcCAqLywKIAkJCQkwRjZCMUNDODE4NjQxREY4MDA4
NDVEOTcgLyogQXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3MuaCAqLywKIAkJCQkwRjI0RTUzQjE3
RUE5RjU5MDBBQkIyMTcgLyogQXNzZW1ibHlIZWxwZXJzLmNwcCAqLywKQEAgLTQxMDgsNiArNDA5
Niw4IEBACiAJCQkJMEY2NEIyNzAxQTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5oICov
LAogCQkJCTBGMjRFNTNEMTdFQTlGNTkwMEFCQjIxNyAvKiBDQ2FsbEhlbHBlcnMuaCAqLywKIAkJ
CQkwRkQ4MkUzNzE0MUFCMTQyMDAxNzlDOTQgLyogQ29tcGFjdEpJVENvZGVNYXAuaCAqLywKKwkJ
CQkwRkYwNTRGNzFBQzM1QjQ0MDBFNUJFNTcgLyogRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6LmNw
cCAqLywKKwkJCQkwRkYwNTRGODFBQzM1QjQ0MDBFNUJFNTcgLyogRXhlY3V0YWJsZUFsbG9jYXRp
b25GdXp6LmggKi8sCiAJCQkJQTdCNDhEQjYwRUU3NENGQzAwRENCREI2IC8qIEV4ZWN1dGFibGVB
bGxvY2F0b3IuY3BwICovLAogCQkJCUE3QjQ4REI1MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVjdXRh
YmxlQWxsb2NhdG9yLmggKi8sCiAJCQkJODZEQjY0NjMwRjk1QzZGQzAwRDdEOTIxIC8qIEV4ZWN1
dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAgKi8sCkBAIC00MTU0LDggKzQxNDQsNiBAQAog
CQkJCTBGQzcxMkUxMTdDRDg3OEYwMDhDQzkzQyAvKiBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjay5oICovLAogCQkJCUE3NkY1NEEyMTNCMjhBQUIwMEVGMkJDRSAvKiBKSVRXcml0
ZUJhcnJpZXIuaCAqLywKIAkJCQlBNzZDNTE3NDExODI3NDhEMDA3MTVCMDUgLyogSlNJbnRlcmZh
Y2VKSVQuaCAqLywKLQkJCQkwRkVFOTg0MjFBODkyMjc1MDA3NTRFOTMgLyogU2V0dXBWYXJhcmdz
RnJhbWUuY3BwICovLAotCQkJCTBGRUU5ODQwMUE4ODY1QjYwMDc1NEU5MyAvKiBTZXR1cFZhcmFy
Z3NGcmFtZS5oICovLAogCQkJCTBGRTgzNDE1MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9ycGhp
Y0NhbGxTdHViUm91dGluZS5jcHAgKi8sCiAJCQkJMEZFODM0MTYxQTZFRjk3QjAwRDA0ODQ3IC8q
IFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmggKi8sCiAJCQkJMEZBN0E4RTkxOEI0MTNDODAw
NTIzNzFEIC8qIFJlZy5jcHAgKi8sCkBAIC00MTY5LDYgKzQxNTcsOCBAQAogCQkJCTBGMjRFNTRB
MTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmggKi8sCiAJCQkJMEZBN0E4RUQxOENFNEZEODAw
NTIzNzFEIC8qIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5jcHAgKi8sCiAJCQkJMEYyNEU1NEIx
N0VFMjc0OTAwQUJCMjE3IC8qIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oICovLAorCQkJCTBG
RUU5ODQyMUE4OTIyNzUwMDc1NEU5MyAvKiBTZXR1cFZhcmFyZ3NGcmFtZS5jcHAgKi8sCisJCQkJ
MEZFRTk4NDAxQTg4NjVCNjAwNzU0RTkzIC8qIFNldHVwVmFyYXJnc0ZyYW1lLmggKi8sCiAJCQkJ
QTcwOUYyRUYxN0EwQUMwNDAwNTEyRTk4IC8qIFNsb3dQYXRoQ2FsbC5oICovLAogCQkJCUE3Mzg2
NTUxMTE4Njk3QjQwMDU0MDI3OSAvKiBTcGVjaWFsaXplZFRodW5rSklULmggKi8sCiAJCQkJQTdG
RjY0N0ExOEM1MkU4NTAwQjU1MzA3IC8qIFNwaWxsUmVnaXN0ZXJzTW9kZS5oICovLApAQCAtNTYw
MiwxMSArNTU5Miw5IEBACiAJCQkJOTY5QTA3OTUwRUQxRDNBRTAwRjFGNjgxIC8qIE9wY29kZS5o
ICovLAogCQkJCTBGMkJEQzJCMTUxRkRFOEIwMENEODkxMCAvKiBPcGVyYW5kcy5oICovLAogCQkJ
CUE3MDQ0N0U5MTdBMEJENDYwMEY1ODk4RSAvKiBPcGVyYW5kc0lubGluZXMuaCAqLywKKwkJCQkw
RkY5Q0U3MTFCOUNENkQwMDA0RURDQTYgLyogUG9seW1vcnBoaWNBY2Nlc3MuY3BwICovLAorCQkJ
CTBGRjlDRTcyMUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5oICovLAogCQkJ
CTBGMzRCMTRCMTZENDNFMEMwMDFDREE1QSAvKiBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxp
c3QuaCAqLywKLQkJCQkwRjRDRUQ1QzE4Q0VBN0FCMDA4MDJGRTAgLyogUG9seW1vcnBoaWNHZXRC
eUlkTGlzdC5jcHAgKi8sCi0JCQkJMEY0Q0VENUQxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3Jw
aGljR2V0QnlJZExpc3QuaCAqLywKLQkJCQkwRjlGQzhCRjE0RTFCNUZCMDBENTJBRTAgLyogUG9s
eW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAgKi8sCi0JCQkJMEY5RkM4QzAxNEUxQjVGQjAwRDUyQUUw
IC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuaCAqLywKIAkJCQkwRjk4MjA1RDE2QkZFMzdGMDAy
NDBEMDIgLyogUHJlY2lzZUp1bXBUYXJnZXRzLmNwcCAqLywKIAkJCQkwRjk4MjA1RTE2QkZFMzdG
MDAyNDBEMDIgLyogUHJlY2lzZUp1bXBUYXJnZXRzLmggKi8sCiAJCQkJMEZEM0U0MDcxQjYxOEI2
NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmNwcCAqLywKQEAgLTU2MzcsOCArNTYyNSw4
IEBACiAJCQkJMEYyRDRERTcxOTgzMkRBQzAwN0Q0QjE5IC8qIFR5cGVMb2NhdGlvbi5oICovLAog
CQkJCUE3OUU3ODFFMTVFRUNCQTgwMDQ3Qzg1NSAvKiBVbmxpbmtlZENvZGVCbG9jay5jcHAgKi8s
CiAJCQkJQTc5RTc4MUYxNUVFQ0JBODAwNDdDODU1IC8qIFVubGlua2VkQ29kZUJsb2NrLmggKi8s
Ci0JCQkJMTQxNDJFNTAxQjc5NkVDRTAwRjRCRjRCIC8qIFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlLmggKi8sCiAJCQkJMTQxNDJFNTQxQjc5NzNDMDAwRjRCRjRCIC8qIFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlLmNwcCAqLywKKwkJCQkxNDE0MkU1MDFCNzk2RUNFMDBGNEJGNEIgLyogVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaCAqLywKIAkJCQlCNTlGODkzODE4OTFBREI1MDBENUND
REMgLyogVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbS5jcHAgKi8sCiAJCQkJQjU5Rjg5MzcxODkx
QUQzMzAwRDVDQ0RDIC8qIFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0uaCAqLywKIAkJCQkwRjk2
M0IzNjEzRkM2RkRFMDAwMkQ5QjIgLyogVmFsdWVQcm9maWxlLmggKi8sCkBAIC02MjAzLDcgKzYx
OTEsNiBAQAogCQkJCTBGQzA5NzcxMTQ2OTNBRjUwMENGMjQ0MiAvKiBERkdPU1JFeGl0Q29tcGls
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzAyNUFBMTcxNEIwRkMwMDM4MkMwRSAvKiBERkdP
U1JFeGl0Q29tcGlsZXJDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUZDOUFCMTY4MUEz
QjYwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmggaW4gSGVhZGVycyAqLywK
LQkJCQkwRjRDRUQ1RjE4Q0VBN0FCMDA4MDJGRTAgLyogUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRUUxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4
aXRQcmVwYXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGRkM5NUMxNEVGOTBBRjAwQzcy
NTMyIC8qIERGR1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUVBNzBFRTE5RjVCNUM0MDA5
OEY1RUMgLyogSlNDb250ZXh0UmVmSW5zcGVjdG9yU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8sCkBA
IC02MjUyLDYgKzYyMzksNyBAQAogCQkJCTk5RTQ1QTI0MThBMUIyNTkwMDI2RDg4RiAvKiBFbXB0
eUlucHV0Q3Vyc29yLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDE0MkU1MzFCNzk2RUREMDBGNEJG
NEIgLyogRXhlY3V0YWJsZUluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTk5RTQ1QTI2MThBMUIy
NTkwMDI2RDg4RiAvKiBFbmNvZGVkVmFsdWUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRjlDRTc0
MUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY1ODc0RUUxOTRGRUIxMjAwQUFCMkMxIC8qIERGR01heUV4aXQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDMzA0NjA3MEUxRjQ5N0YwMDMyMzJDRiAvKiBFcnJvci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkMwMkU5MEQwRTE4MzlEQjAwMEY5Mjk3IC8qIEVycm9yQ29uc3RydWN0b3IuaCBpbiBI
ZWFkZXJzICovLApAQCAtNjQ4NSw3ICs2NDczLDYgQEAKIAkJCQlCQzE4QzQxRTBFMTZGNUNEMDBC
MzQ0NjAgLyogSlNDb250ZXh0UmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDhDRDFEODEwOENG
OTAyMDA4MTYzQzYgLyogSlNDb250ZXh0UmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTcyMDI4QjgxNzk3NjAxRTAwOTgwMjhDIC8qIEpTQ1Rlc3RSdW5uZXJVdGlscy5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJMEY3NTc2RDMxOEUxRkVFOTAwMkVGNENEIC8qIEFjY2Vzc29yQ2FsbEpJVFN0
dWJSb3V0aW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZFQzE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNEYXRhVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RUUxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTRGF0YVZpZXdQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3ODgwMTQx
MTQ3MUFEOTIwMDQxQjAxNiAvKiBKU0RhdGVNYXRoLmggaW4gSGVhZGVycyAqLywKQEAgLTY2ODYs
NyArNjY3Myw2IEBACiAJCQkJQTc3RjE4MjUxNjQxOTJDNzAwNjQwQTQ3IC8qIFBhcnNlck1vZGVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTMwM0Q2NDE0NDdCOUUxMDBEM0Y5MDQgLyogUGFyc2Vy
VG9rZW5zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM0QjE0QzE2RDQzRTBEMDAxQ0RBNUEgLyog
UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0LmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjlG
QzhDNDE0RTFCNjAwMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY4RjE0MzQxQURGMDkwMTAwRUQ3OTJDIC8qIERGR0Vwb2NoLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjk4MjA2MTE2QkZFMzgzMDAyNDBEMDIgLyogUHJlY2lzZUp1bXBUYXJn
ZXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJERDgxNTFBQjNEOEJFMDBCQkI4RTggLyogREZH
Rm9yQWxsS2lsbHMuaCBpbiBIZWFkZXJzICovLApAQCAtNzg0Nyw3ICs3ODMzLDYgQEAKIAkJCQkw
RjBCODM5QzE0QkNGNDYzMDA4ODVCNEYgLyogTExJbnRUaHVua3MuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZDRUZBQ0QxODA1RTc1NTAwNDcyQ0U0IC8qIExMVk1BUEkuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTdFNUFCMzcxNzk5RTRCMjAwRDI4MzNEIC8qIExMVk1EaXNhc3NlbWJsZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCi0JCQkJMEY0Q0VENUUxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3Jw
aGljR2V0QnlJZExpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlEREUxMDdFQzdFNzAw
NjUwNDQ2IC8qIExvb2t1cC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQ2ODBDQzE0QkJCMTdB
MDBCRkUyNzIgLyogTG93TGV2ZWxJbnRlcnByZXRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NEI3MjNCMjEyRDdEQTQ2MDAzQkQ1RUQgLyogTWFjaGluZVN0YWNrTWFya2VyLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtNzg4OSw3ICs3ODc0LDYgQEAKIAkJCQkwRkUyMjhFRTE0MzZBQjJDMDAxOTZD
NDggLyogT3B0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDhGMjFCQzEwN0VDNTREMDA0
MkVDMkMgLyogUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMDUyQzM0MEZCNzkyMTkw
MDQ4RkRDMyAvKiBQYXJzZXJBcmVuYS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwRjlGQzhDMzE0
RTFCNUZFMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjk4MjA2MDE2QkZFMzgxMDAyNDBEMDIgLyogUHJlY2lzZUp1bXBUYXJnZXRzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTk1NzQyRjY1MEREMTFGNUEwMDA5MTdGQiAvKiBQcm9maWxl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI5Q0Y4MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExP
cGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzkwNiw2ICs3ODkwLDcgQEAKIAkJCQkw
RjE5MENBQzE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkY3MjlCMzE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJPcmln
aW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QjQxNjZBRDM1QzAwMEY1QkEzIC8qIFBy
b2ZpbGVyT3JpZ2luU3RhY2suY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZGOUNFNzMxQjlDRDZE
MDAwNEVEQ0E2IC8qIFBvbHltb3JwaGljQWNjZXNzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
QjEwNThCMTY3NTQ4MzEwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4aXQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZCMTA1OEQxNjc1NDgzNzAwRjhBQjZFIC8qIFByb2ZpbGVyT1NSRXhpdFNpdGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYxMzkxMkIxNjc3MUMzQTAwOUNDQjA3IC8qIFByb2Zp
bGVyUHJvZmlsZWRCeXRlY29kZXMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MDExLDcgKzc5OTYs
NiBAQAogCQkJCUE3NkYyNzk0MTVGMTNDOTYwMDUxN0Q2NyAvKiBVbmxpbmtlZENvZGVCbG9jay5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCNTlGODkzOTE4OTFGMjlGMDBENUNDREMgLyogVW5saW5r
ZWRJbnN0cnVjdGlvblN0cmVhbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzlEQTRBNjFCN0U4
QjdDMDA4NEYzM0EgLyogSlNNb2R1bGVSZWNvcmQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEY3
NTc2RDIxOEUxRkVFOTAwMkVGNENEIC8qIEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGMjRFNTU4MTdGNzRFREIwMEFCQjIxNyAvKiBWYWx1ZVJlY292
ZXJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxOEUzQTU5MERGOTI3OEMwMEQ5MEIzNCAvKiBW
TS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRTU5MzJBNzE4M0M1QTI2MDBBMUVDQ0MgLyogVk1F
bnRyeVNjb3BlLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE4OTQ5MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
Myw4ICs1Myw3IEBACiAjaW5jbHVkZSAiTExJbnRFbnRyeXBvaW50LmgiCiAjaW5jbHVkZSAiTG93
TGV2ZWxJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJQ
b2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgiCi0jaW5jbHVkZSAiUG9seW1vcnBoaWNQdXRCeUlkTGlz
dC5oIgorI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCiAjaW5jbHVkZSAiUHJvZmlsZXJE
YXRhYmFzZS5oIgogI2luY2x1ZGUgIlJlZHVjZVdoaXRlc3BhY2UuaCIKICNpbmNsdWRlICJSZXBh
dGNoLmgiCkBAIC0zNDMsMjAgKzM0MiwxOSBAQCB2b2lkIENvZGVCbG9jazo6cHJpbnRHZXRCeUlk
Q2FjaGVTdGF0dXMoCiAgICAgICAgIGlmIChzdHViSW5mby5zZWVuKSB7CiAgICAgICAgICAgICBv
dXQucHJpbnRmKCIgaml0KCIpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBTdHJ1Y3R1cmUq
IGJhc2VTdHJ1Y3R1cmUgPSAwOwotICAgICAgICAgICAgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1
Y3R1cmUgPSAwOwotICAgICAgICAgICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogbGlzdCA9IDA7
CisgICAgICAgICAgICBTdHJ1Y3R1cmUqIGJhc2VTdHJ1Y3R1cmUgPSBudWxscHRyOworICAgICAg
ICAgICAgUG9seW1vcnBoaWNBY2Nlc3MqIHN0dWIgPSBudWxscHRyOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBzd2l0Y2ggKHN0dWJJbmZvLmFjY2Vzc1R5cGUpIHsKLSAgICAgICAgICAgIGNh
c2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmOgorICAgICAgICAgICAgc3dpdGNoIChzdHViSW5mby5j
YWNoZVR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKICAg
ICAgICAgICAgICAgICBvdXQucHJpbnRmKCJzZWxmIik7Ci0gICAgICAgICAgICAgICAgYmFzZVN0
cnVjdHVyZSA9IHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQo
KTsKKyAgICAgICAgICAgICAgICBiYXNlU3RydWN0dXJlID0gc3R1YkluZm8udS5ieUlkU2VsZi5i
YXNlT2JqZWN0U3RydWN0dXJlLmdldCgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3Q6Ci0gICAgICAgICAgICAgICAgb3V0LnBy
aW50ZigibGlzdCIpOwotICAgICAgICAgICAgICAgIGxpc3QgPSBzdHViSW5mby51LmdldEJ5SWRM
aXN0Lmxpc3Q7CisgICAgICAgICAgICBjYXNlIENhY2hlVHlwZTo6U3R1YjoKKyAgICAgICAgICAg
ICAgICBvdXQucHJpbnRmKCJzdHViIik7CisgICAgICAgICAgICAgICAgc3R1YiA9IHN0dWJJbmZv
LnUuc3R1YjsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgYWNjZXNz
X3Vuc2V0OgorICAgICAgICAgICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0OgogICAgICAgICAgICAg
ICAgIG91dC5wcmludGYoInVuc2V0Iik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICBkZWZhdWx0OgpAQCAtMzY4LDI3ICszNjYsMTAgQEAgdm9pZCBDb2RlQmxvY2s6OnByaW50
R2V0QnlJZENhY2hlU3RhdHVzKAogICAgICAgICAgICAgICAgIG91dC5wcmludGYoIiwgIik7CiAg
ICAgICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJzdHJ1Y3QiLCBiYXNlU3RydWN0dXJl
LCBpZGVudCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChw
cm90b3R5cGVTdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIsICIpOwot
ICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAicHJvdG90eXBlU3RydWN0IiwgYmFz
ZVN0cnVjdHVyZSwgaWRlbnQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBpZiAobGlzdCkgewotICAgICAgICAgICAgICAgIG91dC5wcmludGYoIiwgbGlzdCA9ICVw
OiBbIiwgbGlzdCk7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxp
c3QtPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0LnByaW50ZigiLCAiKTsKLSAgICAgICAgICAgICAgICAgICAgb3V0
LnByaW50ZigiKCIpOwotICAgICAgICAgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgImJh
c2UiLCBsaXN0LT5hdChpKS5zdHJ1Y3R1cmUoKSwgaWRlbnQpOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoIWxpc3QtPmF0KGkpLmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0LnByaW50ZigiLCAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IG91dC5wcmludChsaXN0LT5hdChpKS5jb25kaXRpb25TZXQoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiKSIpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCJdIik7Ci0gICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmIChzdHViKQorICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCAiLCAq
c3R1Yik7CisKICAgICAgICAgICAgIG91dC5wcmludGYoIikiKTsKICAgICAgICAgfQogICAgIH0K
QEAgLTQ0NCw1MyArNDI1LDE2IEBAIHZvaWQgQ29kZUJsb2NrOjpwcmludFB1dEJ5SWRDYWNoZVN0
YXR1cygKICAgICAgICAgaWYgKHN0dWJJbmZvLnNlZW4pIHsKICAgICAgICAgICAgIG91dC5wcmlu
dGYoIiBqaXQoIik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHN3aXRjaCAoc3R1YkluZm8u
YWNjZXNzVHlwZSkgewotICAgICAgICAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2U6
CisgICAgICAgICAgICBzd2l0Y2ggKHN0dWJJbmZvLmNhY2hlVHlwZSkgeworICAgICAgICAgICAg
Y2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOgogICAgICAgICAgICAgICAgIG91dC5wcmlu
dCgicmVwbGFjZSwgIik7Ci0gICAgICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJzdHJ1
Y3QiLCBzdHViSW5mby51LnB1dEJ5SWRSZXBsYWNlLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCks
IGlkZW50KTsKKyAgICAgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgInN0cnVjdCIsIHN0
dWJJbmZvLnUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgaWRlbnQpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3Ry
YW5zaXRpb25fbm9ybWFsOgotICAgICAgICAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5z
aXRpb25fZGlyZWN0OgotICAgICAgICAgICAgICAgIG91dC5wcmludCgidHJhbnNpdGlvbiwgIik7
Ci0gICAgICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJwcmV2Iiwgc3R1YkluZm8udS5w
dXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZS5nZXQoKSwgaWRlbnQpOwotICAgICAg
ICAgICAgICAgIG91dC5wcmludCgiLCAiKTsKLSAgICAgICAgICAgICAgICBkdW1wU3RydWN0dXJl
KG91dCwgIm5leHQiLCBzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5nZXQo
KSwgaWRlbnQpOwotICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0
aW9uLnJhd0NvbmRpdGlvblNldCkKLSAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCIsICIs
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Ojpmcm9tUmF3UG9pbnRlcihzdHViSW5mby51LnB1
dEJ5SWRUcmFuc2l0aW9uLnJhd0NvbmRpdGlvblNldCkpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX2xpc3Q6IHsKLSAgICAgICAgICAg
ICAgICBvdXQucHJpbnRmKCJsaXN0ID0gWyIpOwotICAgICAgICAgICAgICAgIFBvbHltb3JwaGlj
UHV0QnlJZExpc3QqIGxpc3QgPSBzdHViSW5mby51LnB1dEJ5SWRMaXN0Lmxpc3Q7Ci0gICAgICAg
ICAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hOwotICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsaXN0LT5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgICAgICBv
dXQucHJpbnQoY29tbWEsICIoIik7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFB1dEJ5SWRB
Y2Nlc3MmIGFjY2VzcyA9IGxpc3QtPmF0KGkpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGFjY2Vzcy5pc1JlcGxhY2UoKSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0LnByaW50KCJyZXBsYWNlLCAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGR1bXBTdHJ1Y3R1cmUob3V0LCAic3RydWN0IiwgYWNjZXNzLm9sZFN0cnVjdHVyZSgpLCBpZGVu
dCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWNjZXNzLmlzU2V0dGVyKCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgic2V0dGVyLCAiKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAic3RydWN0IiwgYWNjZXNzLm9sZFN0
cnVjdHVyZSgpLCBpZGVudCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWNjZXNz
LmlzQ3VzdG9tKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgiY3VzdG9t
LCAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAic3RydWN0
IiwgYWNjZXNzLm9sZFN0cnVjdHVyZSgpLCBpZGVudCk7Ci0gICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoYWNjZXNzLmlzVHJhbnNpdGlvbigpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBvdXQucHJpbnQoInRyYW5zaXRpb24sICIpOwotICAgICAgICAgICAgICAgICAgICAgICAgZHVt
cFN0cnVjdHVyZShvdXQsICJwcmV2IiwgYWNjZXNzLm9sZFN0cnVjdHVyZSgpLCBpZGVudCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgIm5leHQiLCBhY2Nlc3MubmV3U3RydWN0dXJlKCks
IGlkZW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYWNjZXNzLmNvbmRpdGlvblNl
dCgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwg
IiwgYWNjZXNzLmNvbmRpdGlvblNldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoInVua25vd24iKTsKLSAgICAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgiKSIpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBvdXQucHJpbnQoIl0iKTsKKyAgICAgICAgICAgIGNh
c2UgQ2FjaGVUeXBlOjpTdHViOiB7CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCJzdHViLCAi
LCAqc3R1YkluZm8udS5zdHViKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGNhc2UgYWNjZXNzX3Vuc2V0OgorICAgICAgICAgICAgY2FzZSBDYWNo
ZVR5cGU6OlVuc2V0OgogICAgICAgICAgICAgICAgIG91dC5wcmludGYoInVuc2V0Iik7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMjQ0MywzOSArMjM4
NywyMiBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvCiAgICAgaWYg
KEpJVENvZGU6OmlzSklUKGppdFR5cGUoKSkpIHsKICAgICAgICAgZm9yIChCYWc8U3RydWN0dXJl
U3R1YkluZm8+OjppdGVyYXRvciBpdGVyID0gbV9zdHViSW5mb3MuYmVnaW4oKTsgISFpdGVyOyAr
K2l0ZXIpIHsKICAgICAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9ICoqaXRl
cjsKLSAgICAgICAgICAgIHN3aXRjaCAoc3R1YkluZm8uYWNjZXNzVHlwZSkgewotICAgICAgICAg
ICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgotICAgICAgICAgICAg
Y2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0OiB7Ci0gICAgICAgICAgICAg
ICAgSlNDZWxsKiBvcmlnaW4gPSBzdHViSW5mby5jb2RlT3JpZ2luLmNvZGVPcmlnaW5Pd25lcigp
OwotICAgICAgICAgICAgICAgIGlmICgoIW9yaWdpbiB8fCBIZWFwOjppc01hcmtlZChvcmlnaW4p
KQotICAgICAgICAgICAgICAgICAgICAmJiBIZWFwOjppc01hcmtlZChzdHViSW5mby51LnB1dEJ5
SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgpKSkKLSAgICAgICAgICAgICAgICAg
ICAgdmlzaXRvci5hcHBlbmQoJnN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJl
KTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGFsbEFyZU1hcmtl
ZFNvRmFyID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAo
c3R1YkluZm8uY2FjaGVUeXBlICE9IENhY2hlVHlwZTo6U3R1YikKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIFBvbHltb3JwaGljQWNjZXNzKiBsaXN0ID0gc3R1YkluZm8u
dS5zdHViOworICAgICAgICAgICAgSlNDZWxsKiBvcmlnaW4gPSBzdHViSW5mby5jb2RlT3JpZ2lu
LmNvZGVPcmlnaW5Pd25lcigpOworICAgICAgICAgICAgaWYgKG9yaWdpbiAmJiAhSGVhcDo6aXNN
YXJrZWQob3JpZ2luKSkgeworICAgICAgICAgICAgICAgIGFsbEFyZU1hcmtlZFNvRmFyID0gZmFs
c2U7CisgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9saXN0OiB7Ci0gICAgICAgICAgICAgICAgUG9seW1v
cnBoaWNQdXRCeUlkTGlzdCogbGlzdCA9IHN0dWJJbmZvLnUucHV0QnlJZExpc3QubGlzdDsKLSAg
ICAgICAgICAgICAgICBKU0NlbGwqIG9yaWdpbiA9IHN0dWJJbmZvLmNvZGVPcmlnaW4uY29kZU9y
aWdpbk93bmVyKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG9yaWdpbiAmJiAhSGVhcDo6aXNNYXJr
ZWQob3JpZ2luKSkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gbGlzdC0+c2l6ZSgp
OyBqLS07KSB7CisgICAgICAgICAgICAgICAgY29uc3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0gbGlz
dC0+YXQoaik7CisgICAgICAgICAgICAgICAgaWYgKGFjY2Vzcy50eXBlKCkgIT0gQWNjZXNzQ2Fz
ZTo6VHJhbnNpdGlvbikKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKGFjY2Vzcy5zdHJ1Y3R1cmUoKSkpCisgICAgICAgICAg
ICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIoYWNjZXNz
Lm5ld1N0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
ICAgIGFsbEFyZU1hcmtlZFNvRmFyID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBs
aXN0LT5zaXplKCk7IGotLTspIHsKLSAgICAgICAgICAgICAgICAgICAgUHV0QnlJZEFjY2VzcyYg
YWNjZXNzID0gbGlzdC0+bV9saXN0W2pdOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWFjY2Vz
cy5pc1RyYW5zaXRpb24oKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQoYWNjZXNzLm9sZFN0cnVjdHVyZSgp
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZhY2Nlc3MubV9uZXdT
dHJ1Y3R1cmUpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
ICAgICBhbGxBcmVNYXJrZWRTb0ZhciA9IGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgIH0KQEAgLTI3NjcsMTAgKzI2OTQsMTAgQEAgdm9pZCBDb2RlQmxvY2s6OmdldEJ5
VmFsSW5mb01hcChCeVZhbEluZgogfQogCiAjaWYgRU5BQkxFKEpJVCkKLVN0cnVjdHVyZVN0dWJJ
bmZvKiBDb2RlQmxvY2s6OmFkZFN0dWJJbmZvKCkKK1N0cnVjdHVyZVN0dWJJbmZvKiBDb2RlQmxv
Y2s6OmFkZFN0dWJJbmZvKEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSkKIHsKICAgICBDb25jdXJyZW50
SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJldHVybiBtX3N0dWJJbmZvcy5hZGQoKTsK
KyAgICByZXR1cm4gbV9zdHViSW5mb3MuYWRkKGFjY2Vzc1R5cGUpOwogfQogCiBTdHJ1Y3R1cmVT
dHViSW5mbyogQ29kZUJsb2NrOjpmaW5kU3R1YkluZm8oQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNp
b24gMTg5NDkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMDgsNyArMjA4LDcgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0
QnlWYWxJbmZvTWFwKEJ5VmFsSW5mb01hcCYgcmVzdWx0KTsKICAgICAKICNpZiBFTkFCTEUoSklU
KQotICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBhZGRTdHViSW5mbygpOworICAgIFN0cnVjdHVyZVN0
dWJJbmZvKiBhZGRTdHViSW5mbyhBY2Nlc3NUeXBlKTsKICAgICBCYWc8U3RydWN0dXJlU3R1Yklu
Zm8+OjppdGVyYXRvciBzdHViSW5mb0JlZ2luKCkgeyByZXR1cm4gbV9zdHViSW5mb3MuYmVnaW4o
KTsgfQogICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz46Oml0ZXJhdG9yIHN0dWJJbmZvRW5kKCkg
eyByZXR1cm4gbV9zdHViSW5mb3MuZW5kKCk7IH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDE4OTQ5
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjYsMTQgKzI2LDEzIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiR2V0QnlJZFN0YXR1cy5oIgogCi0jaW5jbHVkZSAiQWNjZXNzb3JDYWxsSklUU3R1
YlJvdXRpbmUuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJDb21wbGV4R2V0
U3RhdHVzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTU2NvcGUuaCIK
ICNpbmNsdWRlICJMTEludERhdGEuaCIKICNpbmNsdWRlICJMb3dMZXZlbEludGVycHJldGVyLmgi
Ci0jaW5jbHVkZSAiUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oIgorI2luY2x1ZGUgIlBvbHltb3Jw
aGljQWNjZXNzLmgiCiAjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CiAKIG5hbWVzcGFjZSBKU0Mg
ewpAQCAtMTM5LDEyICsxMzgsMTIgQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21w
dXRlRm9yUwogICAgIGlmICghc3R1YkluZm8tPnNlZW4pCiAgICAgICAgIHJldHVybiBHZXRCeUlk
U3RhdHVzKE5vSW5mb3JtYXRpb24pOwogICAgIAotICAgIFBvbHltb3JwaGljR2V0QnlJZExpc3Qq
IGxpc3QgPSAwOworICAgIFBvbHltb3JwaGljQWNjZXNzKiBsaXN0ID0gMDsKICAgICBTdGF0ZSBz
bG93UGF0aFN0YXRlID0gVGFrZXNTbG93UGF0aDsKLSAgICBpZiAoc3R1YkluZm8tPmFjY2Vzc1R5
cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9saXN0KSB7Ci0gICAgICAgIGxpc3QgPSBzdHViSW5mby0+
dS5nZXRCeUlkTGlzdC5saXN0OworICAgIGlmIChzdHViSW5mby0+Y2FjaGVUeXBlID09IENhY2hl
VHlwZTo6U3R1YikgeworICAgICAgICBsaXN0ID0gc3R1YkluZm8tPnUuc3R1YjsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAg
ICBjb25zdCBHZXRCeUlkQWNjZXNzJiBhY2Nlc3MgPSBsaXN0LT5hdChpKTsKKyAgICAgICAgICAg
IGNvbnN0IEFjY2Vzc0Nhc2UmIGFjY2VzcyA9IGxpc3QtPmF0KGkpOwogICAgICAgICAgICAgaWYg
KGFjY2Vzcy5kb2VzQ2FsbHMoKSkKICAgICAgICAgICAgICAgICBzbG93UGF0aFN0YXRlID0gTWFr
ZXNDYWxsczsKICAgICAgICAgfQpAQCAtMTU3LDEyICsxNTYsMTIgQEAgR2V0QnlJZFN0YXR1cyBH
ZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgIEdldEJ5SWRTdGF0dXMgcmVzdWx0OwogICAg
IHJlc3VsdC5tX3N0YXRlID0gU2ltcGxlOwogICAgIHJlc3VsdC5tX3dhc1NlZW5JbkpJVCA9IHRy
dWU7IC8vIFRoaXMgaXMgaW50ZXJlc3RpbmcgZm9yIGJ5dGVjb2RlIGR1bXBpbmcgb25seS4KLSAg
ICBzd2l0Y2ggKHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSB7Ci0gICAgY2FzZSBhY2Nlc3NfdW5zZXQ6
CisgICAgc3dpdGNoIChzdHViSW5mby0+Y2FjaGVUeXBlKSB7CisgICAgY2FzZSBDYWNoZVR5cGU6
OlVuc2V0OgogICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKICAg
ICAgICAgCi0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGY6IHsKLSAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+dS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0
dXJlLmdldCgpOworICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjogeworICAgICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0dWJJbmZvLT51LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1
Y3R1cmUuZ2V0KCk7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0Zv
ckltcHVyZVByb3BlcnR5KCkpCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhzbG93
UGF0aFN0YXRlLCB0cnVlKTsKICAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlc0lnbm9yZWQ7CkBA
IC0xNzcsMTIgKzE3NiwxNiBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVG
b3JTCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgICAgICAKLSAgICBjYXNlIGFj
Y2Vzc19nZXRfYnlfaWRfbGlzdDogeworICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOiB7CiAgICAg
ICAgIGZvciAodW5zaWduZWQgbGlzdEluZGV4ID0gMDsgbGlzdEluZGV4IDwgbGlzdC0+c2l6ZSgp
OyArK2xpc3RJbmRleCkgewotICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBsaXN0
LT5hdChsaXN0SW5kZXgpLnN0cnVjdHVyZSgpOworICAgICAgICAgICAgY29uc3QgQWNjZXNzQ2Fz
ZSYgYWNjZXNzID0gbGlzdC0+YXQobGlzdEluZGV4KTsKKyAgICAgICAgICAgIGlmIChhY2Nlc3Mu
dmlhUHJveHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhzbG93UGF0
aFN0YXRlLCB0cnVlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBhY2Nlc3Muc3RydWN0dXJlKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIENv
bXBsZXhHZXRTdGF0dXMgY29tcGxleEdldFN0YXR1cyA9IENvbXBsZXhHZXRTdGF0dXM6OmNvbXB1
dGVGb3IoCi0gICAgICAgICAgICAgICAgc3RydWN0dXJlLCBsaXN0LT5hdChsaXN0SW5kZXgpLmNv
bmRpdGlvblNldCgpLCB1aWQpOworICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgYWNjZXNzLmNv
bmRpdGlvblNldCgpLCB1aWQpOwogICAgICAgICAgICAgIAogICAgICAgICAgICAgc3dpdGNoIChj
b21wbGV4R2V0U3RhdHVzLmtpbmQoKSkgewogICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3Rh
dHVzOjpTaG91bGRTa2lwOgpAQCAtMTkzLDI5ICsxOTYsMjMgQEAgR2V0QnlJZFN0YXR1cyBHZXRC
eUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNh
c2UgQ29tcGxleEdldFN0YXR1czo6SW5saW5lYWJsZTogewogICAgICAgICAgICAgICAgIHN0ZDo6
dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXM7Ci0gICAgICAgICAgICAg
ICAgc3dpdGNoIChsaXN0LT5hdChsaXN0SW5kZXgpLnR5cGUoKSkgewotICAgICAgICAgICAgICAg
IGNhc2UgR2V0QnlJZEFjY2Vzczo6U2ltcGxlSW5saW5lOgotICAgICAgICAgICAgICAgIGNhc2Ug
R2V0QnlJZEFjY2Vzczo6U2ltcGxlU3R1YjogeworICAgICAgICAgICAgICAgIHN3aXRjaCAoYWNj
ZXNzLnR5cGUoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6TG9hZDogewog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgY2FzZSBHZXRCeUlkQWNjZXNzOjpHZXR0ZXI6IHsKLSAgICAgICAgICAgICAgICAgICAg
QWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUqIHN0dWIgPSBzdGF0aWNfY2FzdDxBY2Nlc3NvckNh
bGxKSVRTdHViUm91dGluZSo+KAotICAgICAgICAgICAgICAgICAgICAgICAgbGlzdC0+YXQobGlz
dEluZGV4KS5zdHViUm91dGluZSgpKTsKKyAgICAgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6
OkdldHRlcjogeworICAgICAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5m
byA9IGFjY2Vzcy5jYWxsTGlua0luZm8oKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGNh
bGxMaW5rSW5mbyk7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rU3RhdHVzID0gc3RkOjpt
YWtlX3VuaXF1ZTxDYWxsTGlua1N0YXR1cz4oCiAgICAgICAgICAgICAgICAgICAgICAgICBDYWxs
TGlua1N0YXR1czo6Y29tcHV0ZUZvcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2Nr
ZXIsIHByb2ZpbGVkQmxvY2ssICpzdHViLT5tX2NhbGxMaW5rSW5mbywgY2FsbEV4aXRTaXRlRGF0
YSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tlciwgcHJvZmlsZWRCbG9jaywg
KmNhbGxMaW5rSW5mbywgY2FsbEV4aXRTaXRlRGF0YSkpOwogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2FzZSBHZXRCeUlkQWNj
ZXNzOjpTaW1wbGVNaXNzOgotICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlJZEFjY2Vzczo6Q3Vz
dG9tR2V0dGVyOgotICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlJZEFjY2Vzczo6V2F0Y2hlZFN0
dWI6ewotICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgdG90YWxseSBz
d2VldCB0byBzdXBwb3J0IHRoaXMgYXQgc29tZSBwb2ludCBpbiB0aGUgZnV0dXJlLgotICAgICAg
ICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTMzMDUyCisgICAgICAgICAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgICAgICAgICAv
LyBGSVhNRTogSXQgd291bGQgYmUgdG90YWxseSBzd2VldCB0byBzdXBwb3J0IG1vcmUgb2YgdGhl
c2UgYXQgc29tZSBwb2ludCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gZnV0dXJlLiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMDUyCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUsIHRydWUpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9IH0KICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgR2V0
QnlJZFZhcmlhbnQgdmFyaWFudCgKICAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlU2V0KHN0
cnVjdHVyZSksIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJldmlz
aW9uIDE4OTMyNCkJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3Jw
aGljR2V0QnlJZExpc3QuY3BwOjE4OTMyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBvbHltb3JwaGljR2V0QnlJZExpc3QuaCIK
KworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJI
ZWFwLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJ
bmZvLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitHZXRCeUlkQWNjZXNzOjpHZXRCeUlkQWNjZXNz
KAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBQYXNzUmVmUHRy
PEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSwKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkKKyAgICA6IG1f
dHlwZSh0eXBlKQorICAgICwgbV9zdHJ1Y3R1cmUodm0sIG93bmVyLCBzdHJ1Y3R1cmUpCisgICAg
LCBtX2NvbmRpdGlvblNldChjb25kaXRpb25TZXQpCisgICAgLCBtX3N0dWJSb3V0aW5lKHN0dWJS
b3V0aW5lKQoreworfQorCitHZXRCeUlkQWNjZXNzOjp+R2V0QnlJZEFjY2VzcygpCit7Cit9CisK
K0dldEJ5SWRBY2Nlc3MgR2V0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgaW5p
dGlhbFNsb3dQYXRoID0KKyAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVs
QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSk7CisgICAgCisgICAg
R2V0QnlJZEFjY2VzcyByZXN1bHQ7CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8u
YWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYpOworICAgIAorICAgIHJlc3VsdC5t
X3R5cGUgPSBTaW1wbGVJbmxpbmU7CisgICAgcmVzdWx0Lm1fc3RydWN0dXJlLmNvcHlGcm9tKHN0
dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZSk7CisgICAgcmVzdWx0Lm1f
c3R1YlJvdXRpbmUgPSBKSVRTdHViUm91dGluZTo6Y3JlYXRlU2VsZk1hbmFnZWRSb3V0aW5lKGlu
aXRpYWxTbG93UGF0aCk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBHZXRC
eUlkQWNjZXNzOjp2aXNpdFdlYWsoVk0mIHZtKSBjb25zdAoreworICAgIGlmIChtX3N0cnVjdHVy
ZSAmJiAhSGVhcDo6aXNNYXJrZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKCFtX2NvbmRpdGlvblNldC5hcmVTdGlsbExpdmUoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmICghbV9zdHViUm91dGluZS0+dmlzaXRXZWFrKHZtKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCitQb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0OjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbykKK3sKKyAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX2xpc3QuYXBwZW5kKEdldEJ5SWRBY2Nlc3M6OmZy
b21TdHJ1Y3R1cmVTdHViSW5mbyhzdHViSW5mbykpOworfQorCitQb2x5bW9ycGhpY0dldEJ5SWRM
aXN0KiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojpmcm9tKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbykKK3sKKyAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lk
X2xpc3QpCisgICAgICAgIHJldHVybiBzdHViSW5mby51LmdldEJ5SWRMaXN0Lmxpc3Q7CisgICAg
CisgICAgQVNTRVJUKAorICAgICAgICBzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRf
YnlfaWRfc2VsZgorICAgICAgICB8fCBzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc191bnNl
dCk7CisgICAgCisgICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogcmVzdWx0ID0gbmV3IFBvbHlt
b3JwaGljR2V0QnlJZExpc3Qoc3R1YkluZm8pOworICAgIAorICAgIHN0dWJJbmZvLmluaXRHZXRC
eUlkTGlzdChyZXN1bHQpOworICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1BvbHltb3Jw
aGljR2V0QnlJZExpc3Q6On5Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0KCkgeyB9CisKK01hY3JvQXNz
ZW1ibGVyQ29kZVB0ciBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpjdXJyZW50U2xvd1BhdGhUYXJn
ZXQoCisgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKSBjb25zdAoreworICAgIGlmIChp
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFi
ZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKKyAgICByZXR1
cm4gbV9saXN0Lmxhc3QoKS5zdHViUm91dGluZSgpLT5jb2RlKCkuY29kZSgpOworfQorCit2b2lk
IFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmFkZEFjY2Vzcyhjb25zdCBHZXRCeUlkQWNjZXNzJiBh
Y2Nlc3MpCit7CisgICAgQVNTRVJUKCFpc0Z1bGwoKSk7CisgICAgLy8gTWFrZSBzdXJlIHRoYXQg
dGhlIHJlc2l6aW5nIG9wdGltaXplcyBmb3Igc3BhY2UsIG5vdCB0aW1lLgorICAgIG1fbGlzdC5y
ZXNpemVUb0ZpdChtX2xpc3Quc2l6ZSgpICsgMSk7CisgICAgbV9saXN0Lmxhc3QoKSA9IGFjY2Vz
czsKK30KKworYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojppc0Z1bGwoKSBjb25zdAorewor
ICAgIEFTU0VSVChzaXplKCkgPD0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKTsKKyAgICBy
ZXR1cm4gc2l6ZSgpID09IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRTsKK30KKworYm9vbCBQ
b2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojppc0FsbW9zdEZ1bGwoKSBjb25zdAoreworICAgIEFTU0VS
VChzaXplKCkgPD0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKTsKKyAgICByZXR1cm4gc2l6
ZSgpID49IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDE7Cit9CisKK2Jvb2wgUG9seW1v
cnBoaWNHZXRCeUlkTGlzdDo6ZGlkU2VsZlBhdGNoaW5nKCkgY29uc3QKK3sKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSBzaXplKCk7IGktLTspIHsKKyAgICAgICAgaWYgKGF0KGkpLnR5cGUoKSA9PSBH
ZXRCeUlkQWNjZXNzOjpTaW1wbGVJbmxpbmUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6
OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0Cit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gc2l6ZSgp
OyBpLS07KSB7CisgICAgICAgIGlmICghYXQoaSkudmlzaXRXZWFrKHZtKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKworCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtp
bmcgY29weSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDEzMSArMjQsMTA5NyBAQAogICovCiAKICNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgiCisj
aW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKIAogI2lmIEVOQUJMRShKSVQpCiAKKyNpbmNs
dWRlICJCaW5hcnlTd2l0Y2guaCIKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKICNpbmNsdWRl
ICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJIZWFw
LmgiCisjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
KyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oIgogI2lu
Y2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5o
PgogCiBuYW1lc3BhY2UgSlNDIHsKIAotR2V0QnlJZEFjY2Vzczo6R2V0QnlJZEFjY2VzcygKLSAg
ICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgUGFzc1JlZlB0cjxKSVRT
dHViUm91dGluZT4gc3R1YlJvdXRpbmUsCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCi0gICAgOiBtX3R5cGUo
dHlwZSkKLSAgICAsIG1fc3RydWN0dXJlKHZtLCBvd25lciwgc3RydWN0dXJlKQotICAgICwgbV9j
b25kaXRpb25TZXQoY29uZGl0aW9uU2V0KQotICAgICwgbV9zdHViUm91dGluZShzdHViUm91dGlu
ZSkKK3N0cnVjdCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUgeworICAgIENDYWxsSGVscGVycyogaml0
IHsgbnVsbHB0ciB9OworICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciogYWxsb2NhdG9yOwor
ICAgIHNpemVfdCBudW1iZXJPZlBhZGRpbmdCeXRlcyB7IDAgfTsKKyAgICBQb2x5bW9ycGhpY0Fj
Y2VzcyogYWNjZXNzIHsgbnVsbHB0ciB9OworICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
byB7IG51bGxwdHIgfTsKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHN1Y2Nlc3M7CisgICAg
Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBmYWlsQW5kUmVwYXRjaDsKKyAgICBDQ2FsbEhlbHBlcnM6
Okp1bXBMaXN0IGZhaWxBbmRJZ25vcmU7CisgICAgR1BSUmVnIGJhc2VHUFIgeyBJbnZhbGlkR1BS
UmVnIH07CisgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BS
IHsgSW52YWxpZEdQUlJlZyB9OworICAgIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggeyBmYWxz
ZSB9OworICAgIFZlY3RvcjxzdGQ6OmZ1bmN0aW9uPHZvaWQoTGlua0J1ZmZlciYpPj4gY2FsbGJh
Y2tzOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50OworICAgIHN0ZDo6dW5pcXVlX3B0cjxX
YXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8+IHdhdGNocG9pbnRzOworCisgICAgV2F0Y2hw
b2ludCogYWRkV2F0Y2hwb2ludChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0
aW9uID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb24oKSkKKyAgICB7CisgICAgICAgIHJldHVybiBX
YXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86OmVuc3VyZVJlZmVyZW5jZUFuZEFkZFdhdGNo
cG9pbnQoCisgICAgICAgICAgICB3YXRjaHBvaW50cywgaml0LT5jb2RlQmxvY2soKSwgc3R1Yklu
Zm8sIGNvbmRpdGlvbik7CisgICAgfQorCisgICAgdm9pZCByZXN0b3JlU2NyYXRjaCgpCisgICAg
eworICAgICAgICBhbGxvY2F0b3ItPnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoKmpp
dCwgbnVtYmVyT2ZQYWRkaW5nQnl0ZXMpOworICAgIH0KKworICAgIHZvaWQgc3VjY2VlZCgpCisg
ICAgeworICAgICAgICByZXN0b3JlU2NyYXRjaCgpOworICAgICAgICBzdWNjZXNzLmFwcGVuZChq
aXQtPmp1bXAoKSk7CisgICAgfQorfTsKKworQWNjZXNzQ2FzZTo6QWNjZXNzQ2FzZSgpCiB7CiB9
CiAKLUdldEJ5SWRBY2Nlc3M6On5HZXRCeUlkQWNjZXNzKCkKK3N0ZDo6dW5pcXVlX3B0cjxBY2Nl
c3NDYXNlPiBBY2Nlc3NDYXNlOjpnZXQoCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nl
c3NUeXBlIHR5cGUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
CisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgYm9v
bCB2aWFQcm94eSwgV2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCwKKyAgICBQcm9wZXJ0eVNs
b3Q6OkdldFZhbHVlRnVuYyBjdXN0b21HZXR0ZXIpCiB7CisgICAgc3RkOjp1bmlxdWVfcHRyPEFj
Y2Vzc0Nhc2U+IHJlc3VsdChuZXcgQWNjZXNzQ2FzZSgpKTsKKworICAgIHJlc3VsdC0+bV90eXBl
ID0gdHlwZTsKKyAgICByZXN1bHQtPm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgIHJlc3VsdC0+bV9z
dHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKKyAgICByZXN1bHQtPm1fY29uZGl0
aW9uU2V0ID0gY29uZGl0aW9uU2V0OworICAgIAorICAgIGlmICh2aWFQcm94eSB8fCBhZGRpdGlv
bmFsU2V0IHx8IHJlc3VsdC0+ZG9lc0NhbGxzKCkgfHwgY3VzdG9tR2V0dGVyKSB7CisgICAgICAg
IHJlc3VsdC0+bV9yYXJlRGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8UmFyZURhdGE+KCk7CisgICAg
ICAgIHJlc3VsdC0+bV9yYXJlRGF0YS0+dmlhUHJveHkgPSB2aWFQcm94eTsKKyAgICAgICAgcmVz
dWx0LT5tX3JhcmVEYXRhLT5hZGRpdGlvbmFsU2V0ID0gYWRkaXRpb25hbFNldDsKKyAgICAgICAg
cmVzdWx0LT5tX3JhcmVEYXRhLT5jdXN0b21BY2Nlc3Nvci5nZXR0ZXIgPSBjdXN0b21HZXR0ZXI7
CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotR2V0QnlJZEFjY2VzcyBHZXRCeUlk
QWNjZXNzOjpmcm9tU3RydWN0dXJlU3R1YkluZm8oU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
KQorc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OnJlcGxhY2UoCisgICAg
Vk0mIHZtLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0KQogewotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBpbml0aWFsU2xvd1BhdGgg
PQotICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHVi
SW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKLSAgICAKLSAgICBHZXRCeUlkQWNjZXNz
IHJlc3VsdDsKLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5hY2Nlc3NUeXBlID09
IGFjY2Vzc19nZXRfYnlfaWRfc2VsZik7Ci0gICAgCi0gICAgcmVzdWx0Lm1fdHlwZSA9IFNpbXBs
ZUlubGluZTsKLSAgICByZXN1bHQubV9zdHJ1Y3R1cmUuY29weUZyb20oc3R1YkluZm8udS5nZXRC
eUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlKTsKLSAgICByZXN1bHQubV9zdHViUm91dGluZSA9
IEpJVFN0dWJSb3V0aW5lOjpjcmVhdGVTZWxmTWFuYWdlZFJvdXRpbmUoaW5pdGlhbFNsb3dQYXRo
KTsKLSAgICAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gcmVzdWx0KG5ldyBBY2Nl
c3NDYXNlKCkpOworCisgICAgcmVzdWx0LT5tX3R5cGUgPSBSZXBsYWNlOworICAgIHJlc3VsdC0+
bV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgcmVzdWx0LT5tX3N0cnVjdHVyZS5zZXQodm0sIG93bmVy
LCBzdHJ1Y3R1cmUpOworCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotYm9vbCBHZXRCeUlkQWNj
ZXNzOjp2aXNpdFdlYWsoVk0mIHZtKSBjb25zdAorc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+
IEFjY2Vzc0Nhc2U6OnRyYW5zaXRpb24oCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBTdHJ1
Y3R1cmUqIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCwKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0
aW9uU2V0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKG9sZFN0cnVjdHVyZSA9PSBuZXdTdHJ1Y3R1
cmUtPnByZXZpb3VzSUQoKSk7CisKKyAgICAvLyBTa2lwIG9wdGltaXppbmcgdGhlIGNhc2Ugd2hl
cmUgd2UgbmVlZCBhIHJlYWxsb2MsIGlmIHdlIGRvbid0IGhhdmUKKyAgICAvLyBlbm91Z2ggcmVn
aXN0ZXJzIHRvIG1ha2UgaXQgaGFwcGVuLgorICAgIGlmIChHUFJJbmZvOjpudW1iZXJPZlJlZ2lz
dGVycyA8IDYKKyAgICAgICAgJiYgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9
IG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKQorICAgICAgICAmJiBvbGRTdHJ1Y3R1
cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
fQorCisgICAgLy8gU2tpcCBvcHRpbWl6aW5nIHRoZSBjYXNlIHdoZXJlIHdlIG5lZWQgcmVhbGxv
YywgYW5kIHRoZSBzdHJ1Y3R1cmUgaGFzCisgICAgLy8gaW5kZXhpbmcgc3RvcmFnZS4KKyAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkbid0IHNraXAgdGhpcyEgSW1wbGVtZW50IGl0IQorICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzA5MTQKKyAgICBpZiAob2xk
U3RydWN0dXJlLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEFjY2Vz
c0Nhc2UoKSk7CisKKyAgICByZXN1bHQtPm1fdHlwZSA9IFRyYW5zaXRpb247CisgICAgcmVzdWx0
LT5tX29mZnNldCA9IG9mZnNldDsKKyAgICByZXN1bHQtPm1fc3RydWN0dXJlLnNldCh2bSwgb3du
ZXIsIG5ld1N0cnVjdHVyZSk7CisgICAgcmVzdWx0LT5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlv
blNldDsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxBY2Nlc3ND
YXNlPiBBY2Nlc3NDYXNlOjpzZXR0ZXIoCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nl
c3NUeXBlIHR5cGUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQs
CisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgUHV0
UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmMgY3VzdG9tU2V0dGVyKQoreworICAgIHN0ZDo6dW5p
cXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nhc2UoKSk7CisKKyAgICByZXN1
bHQtPm1fdHlwZSA9IHR5cGU7CisgICAgcmVzdWx0LT5tX29mZnNldCA9IG9mZnNldDsKKyAgICBy
ZXN1bHQtPm1fc3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7CisgICAgcmVzdWx0
LT5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKKworICAgIGlmIChjdXN0b21TZXR0ZXIp
IHsKKyAgICAgICAgcmVzdWx0LT5tX3JhcmVEYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxSYXJlRGF0
YT4oKTsKKyAgICAgICAgcmVzdWx0LT5tX3JhcmVEYXRhLT5jdXN0b21BY2Nlc3Nvci5zZXR0ZXIg
PSBjdXN0b21TZXR0ZXI7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RkOjp1
bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OmluKAorICAgIFZNJiB2bSwgSlNDZWxs
KiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKKyAgICBjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KQoreworICAgIHN0ZDo6
dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nhc2UoKSk7CisKKyAgICBy
ZXN1bHQtPm1fdHlwZSA9IHR5cGU7CisgICAgcmVzdWx0LT5tX3N0cnVjdHVyZS5zZXQodm0sIG93
bmVyLCBzdHJ1Y3R1cmUpOworICAgIHJlc3VsdC0+bV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25T
ZXQ7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2Fz
ZT4gQWNjZXNzQ2FzZTo6Z2V0TGVuZ3RoKFZNJiwgSlNDZWxsKiwgQWNjZXNzVHlwZSB0eXBlKQor
eworICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nhc2Uo
KSk7CisKKyAgICByZXN1bHQtPm1fdHlwZSA9IHR5cGU7CisKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitBY2Nlc3NDYXNlOjp+QWNjZXNzQ2FzZSgpCit7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxB
Y2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpmcm9tU3RydWN0dXJlU3R1YkluZm8oCisgICAgVk0mIHZt
LCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgc3dp
dGNoIChzdHViSW5mby5jYWNoZVR5cGUpIHsKKyAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJZFNl
bGY6CisgICAgICAgIHJldHVybiBnZXQoCisgICAgICAgICAgICB2bSwgb3duZXIsIExvYWQsIHN0
dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0LAorICAgICAgICAgICAgc3R1YkluZm8udS5ieUlkU2Vs
Zi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpKTsKKworICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRC
eUlkUmVwbGFjZToKKyAgICAgICAgcmV0dXJuIHJlcGxhY2UoCisgICAgICAgICAgICB2bSwgb3du
ZXIsIHN0dWJJbmZvLnUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgc3R1Yklu
Zm8udS5ieUlkU2VsZi5vZmZzZXQpOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgfQorfQorCitzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2Fz
ZTo6Y2xvbmUoKSBjb25zdAoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1
bHQobmV3IEFjY2Vzc0Nhc2UoKSk7CisgICAgcmVzdWx0LT5tX3R5cGUgPSBtX3R5cGU7CisgICAg
cmVzdWx0LT5tX29mZnNldCA9IG1fb2Zmc2V0OworICAgIHJlc3VsdC0+bV9zdHJ1Y3R1cmUgPSBt
X3N0cnVjdHVyZTsKKyAgICByZXN1bHQtPm1fY29uZGl0aW9uU2V0ID0gbV9jb25kaXRpb25TZXQ7
CisgICAgaWYgKFJhcmVEYXRhKiByYXJlRGF0YSA9IG1fcmFyZURhdGEuZ2V0KCkpIHsKKyAgICAg
ICAgcmVzdWx0LT5tX3JhcmVEYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxSYXJlRGF0YT4oKTsKKyAg
ICAgICAgcmVzdWx0LT5tX3JhcmVEYXRhLT52aWFQcm94eSA9IHJhcmVEYXRhLT52aWFQcm94eTsK
KyAgICAgICAgcmVzdWx0LT5tX3JhcmVEYXRhLT5hZGRpdGlvbmFsU2V0ID0gcmFyZURhdGEtPmFk
ZGl0aW9uYWxTZXQ7CisgICAgICAgIC8vIE5PVEU6IFdlIGRvbid0IGNvcHkgdGhlIGNhbGxMaW5r
SW5mbywgc2luY2UgdGhhdCdzIGNyZWF0ZWQgZHVyaW5nIGNvZGUgZ2VuZXJhdGlvbi4KKyAgICAg
ICAgcmVzdWx0LT5tX3JhcmVEYXRhLT5jdXN0b21BY2Nlc3Nvci5vcGFxdWUgPSByYXJlRGF0YS0+
Y3VzdG9tQWNjZXNzb3Iub3BhcXVlOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCiti
b29sIEFjY2Vzc0Nhc2U6Omd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrKCkgY29uc3QKK3sKKyAgICBp
ZiAodmlhUHJveHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNoIChtX3R5
cGUpIHsKKyAgICBjYXNlIEFycmF5TGVuZ3RoOgorICAgIGNhc2UgU3RyaW5nTGVuZ3RoOgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorfQorCitib29sIEFjY2Vzc0Nhc2U6OmNhblJlcGxhY2UoY29uc3QgQWNjZXNzQ2FzZSYg
b3RoZXIpCit7CisgICAgLy8gV2UgY291bGQgZG8gYSBsb3QgYmV0dGVyIGhlcmUsIGJ1dCBmb3Ig
bm93IHdlIGp1c3QgZG8gc29tZXRoaW5nIG9idmlvdXMuCisKKyAgICBpZiAoIWd1YXJkZWRCeVN0
cnVjdHVyZUNoZWNrKCkgfHwgIW90aGVyLmd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrKCkpIHsKKyAg
ICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgcmV0dXJuIHN0cnVjdHVyZSgpID09IG90aGVyLnN0cnVjdHVyZSgpOworfQor
Cit2b2lkIEFjY2Vzc0Nhc2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBv
dXQucHJpbnQoCisgICAgICAgIG1fdHlwZSwgIjooc3RydWN0dXJlID0gIiwgcG9pbnRlckR1bXAo
bV9zdHJ1Y3R1cmUuZ2V0KCkpLCAiLCBvZmZzZXQgPSAiLCBtX29mZnNldCwKKyAgICAgICAgIiwg
Y29uZGl0aW9ucyA9ICIsIG1fY29uZGl0aW9uU2V0KTsKKworICAgIGlmIChSYXJlRGF0YSogcmFy
ZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7CisgICAgICAgIG91dC5wcmludCgKKyAgICAgICAg
ICAgICIsIHZpYVByb3h5ID0gIiwgcmFyZURhdGEtPnZpYVByb3h5LAorICAgICAgICAgICAgIiwg
YWRkaXRpb25hbFNldCA9ICIsIFJhd1BvaW50ZXIocmFyZURhdGEtPmFkZGl0aW9uYWxTZXQuZ2V0
KCkpLAorICAgICAgICAgICAgIiwgY2FsbExpbmtJbmZvID0gIiwgUmF3UG9pbnRlcihyYXJlRGF0
YS0+Y2FsbExpbmtJbmZvLmdldCgpKSwKKyAgICAgICAgICAgICIsIGN1c3RvbUFjY2Vzc29yID0g
IiwgUmF3UG9pbnRlcihyYXJlRGF0YS0+Y3VzdG9tQWNjZXNzb3Iub3BhcXVlKSk7CisgICAgfQor
CisgICAgb3V0LnByaW50KCIpIik7Cit9CisKK2Jvb2wgQWNjZXNzQ2FzZTo6dmlzaXRXZWFrKFZN
JiB2bSkgY29uc3QKIHsKICAgICBpZiAobV9zdHJ1Y3R1cmUgJiYgIUhlYXA6OmlzTWFya2VkKG1f
c3RydWN0dXJlLmdldCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghbV9jb25k
aXRpb25TZXQuYXJlU3RpbGxMaXZlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAo
IW1fc3R1YlJvdXRpbmUtPnZpc2l0V2Vhayh2bSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAobV9yYXJlRGF0YSAmJiBtX3JhcmVEYXRhLT5jYWxsTGlua0luZm8pCisgICAgICAgIG1f
cmFyZURhdGEtPmNhbGxMaW5rSW5mby0+dmlzaXRXZWFrKHZtKTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6UG9seW1vcnBoaWNHZXRCeUlkTGlzdChTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1
YXJkKAorICAgIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUsIENDYWxsSGVscGVyczo6SnVt
cExpc3QmIGZhbGxUaHJvdWdoKQogewotICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFj
Y2Vzc191bnNldCkKKyAgICBDQ2FsbEhlbHBlcnMmIGppdCA9ICpzdGF0ZS5qaXQ7CisKKyAgICBz
d2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgQXJyYXlMZW5ndGg6IHsKKyAgICAgICAgQVNTRVJU
KCF2aWFQcm94eSgpKTsKKyAgICAgICAgaml0LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVzcyhz
dGF0ZS5iYXNlR1BSLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgc3RhdGUuc2NyYXRj
aEdQUik7CisgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgKKyAgICAgICAgICAgIGppdC5icmFu
Y2hUZXN0MzIoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpaZXJvLCBzdGF0ZS5zY3Jh
dGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihJc0FycmF5KSkpOworICAgICAgICBm
YWxsVGhyb3VnaC5hcHBlbmQoCisgICAgICAgICAgICBqaXQuYnJhbmNoVGVzdDMyKAorICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6WmVybywgc3RhdGUuc2NyYXRjaEdQUiwgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2UgU3RyaW5nTGVuZ3RoOiB7CisgICAgICAgIEFTU0VSVCghdmlhUHJv
eHkoKSk7CisgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgKKyAgICAgICAgICAgIGppdC5icmFu
Y2g4KAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsCisgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0YXRlLmJhc2VHUFIsIEpTQ2VsbDo6dHlwZUlu
Zm9UeXBlT2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKFN0cmluZ1R5cGUpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGRlZmF1bHQ6
IHsKKyAgICAgICAgaWYgKHZpYVByb3h5KCkpIHsKKyAgICAgICAgICAgIGZhbGxUaHJvdWdoLmFw
cGVuZCgKKyAgICAgICAgICAgICAgICBqaXQuYnJhbmNoOCgKKyAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKHN0YXRlLmJhc2VHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLAor
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihQdXJlRm9yd2Fy
ZGluZ1Byb3h5VHlwZSkpKTsKKworICAgICAgICAgICAgaml0LmxvYWRQdHIoCisgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0YXRlLmJhc2VHUFIsIEpTUHJveHk6OnRhcmdl
dE9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBzdGF0ZS5zY3JhdGNoR1BSKTsKKworICAgICAg
ICAgICAgZmFsbFRocm91Z2guYXBwZW5kKAorICAgICAgICAgICAgICAgIGppdC5icmFuY2hTdHJ1
Y3R1cmUoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsCisgICAg
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdGF0ZS5zY3JhdGNoR1BSLCBK
U0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1
cmUoKSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZmFsbFRocm91Z2guYXBwZW5k
KAorICAgICAgICAgICAgICAgIGppdC5icmFuY2hTdHJ1Y3R1cmUoCisgICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6QWRkcmVzcyhzdGF0ZS5iYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LAorICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUoKSkpOworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworICAgIH0gfTsKKworICAgIGdlbmVyYXRlKHN0YXRlKTsKK30KKwordm9pZCBBY2Nl
c3NDYXNlOjpnZW5lcmF0ZShBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQoreworICAgIEND
YWxsSGVscGVycyYgaml0ID0gKnN0YXRlLmppdDsKKyAgICBWTSYgdm0gPSAqaml0LnZtKCk7Cisg
ICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gKnN0YXRlLnN0dWJJbmZvOworICAgIGNv
bnN0IElkZW50aWZpZXImIGlkZW50ID0gKnN0YXRlLmlkZW50OworICAgIEpTVmFsdWVSZWdzIHZh
bHVlUmVncyA9IHN0YXRlLnZhbHVlUmVnczsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRlLmJh
c2VHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzdGF0ZS5zY3JhdGNoR1BSOworCisgICAg
QVNTRVJUKG1fY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eUFzc3VtaW5nSW1w
dXJlUHJvcGVydHlXYXRjaHBvaW50KCkpOworCisgICAgaWYgKHN0cnVjdHVyZSgpLT5uZWVkSW1w
dXJlUHJvcGVydHlXYXRjaHBvaW50KCkgfHwgbV9jb25kaXRpb25TZXQubmVlZEltcHVyZVByb3Bl
cnR5V2F0Y2hwb2ludCgpKQorICAgICAgICB2bS5yZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQ
cm9wZXJ0eShpZGVudCwgc3RhdGUuYWRkV2F0Y2hwb2ludCgpKTsKKworICAgIGlmIChhZGRpdGlv
bmFsU2V0KCkpCisgICAgICAgIGFkZGl0aW9uYWxTZXQoKS0+YWRkKHN0YXRlLmFkZFdhdGNocG9p
bnQoKSk7CisKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRp
b24gOiBtX2NvbmRpdGlvblNldCkgeworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNv
bmRpdGlvbi5vYmplY3QoKS0+c3RydWN0dXJlKCk7CisKKyAgICAgICAgaWYgKGNvbmRpdGlvbi5p
c1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKKyAgICAgICAg
ICAgIHN0cnVjdHVyZS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoc3RhdGUuYWRkV2F0Y2hwb2lu
dChjb25kaXRpb24pKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoY29uZGl0aW9uLnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eUFzc3Vt
aW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KHN0cnVjdHVyZSkpOworICAgICAgICBqaXQubW92
ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY29uZGl0aW9uLm9iamVjdCgpKSwgc2NyYXRj
aEdQUik7CisgICAgICAgIHN0YXRlLmZhaWxBbmRSZXBhdGNoLmFwcGVuZCgKKyAgICAgICAgICAg
IGppdC5icmFuY2hTdHJ1Y3R1cmUoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RF
cXVhbCwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUp
KTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgSW5IaXQ6CisgICAg
Y2FzZSBJbk1pc3M6CisgICAgICAgIGppdC5ib3hCb29sZWFuUGF5bG9hZChtX3R5cGUgPT0gSW5I
aXQsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOworICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7Cisg
ICAgICAgIHJldHVybjsKKworICAgIGNhc2UgTWlzczoKKyAgICAgICAgaml0Lm1vdmVUcnVzdGVk
VmFsdWUoanNVbmRlZmluZWQoKSwgdmFsdWVSZWdzKTsKKyAgICAgICAgc3RhdGUuc3VjY2VlZCgp
OworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIExvYWQ6CisgICAgY2FzZSBHZXR0ZXI6Cisg
ICAgY2FzZSBTZXR0ZXI6CisgICAgY2FzZSBDdXN0b21HZXR0ZXI6CisgICAgY2FzZSBDdXN0b21T
ZXR0ZXI6IHsKKyAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQobV9vZmZzZXQpKSB7CisgICAgICAg
ICAgICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmU7CisgICAgICAgICAgICBpZiAobV9jb25kaXRp
b25TZXQuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBzdHJ1Y3R1
cmUoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjdXJyU3RydWN0dXJlID0g
bV9jb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vYmplY3QoKS0+c3RydWN0dXJlKCk7
CisgICAgICAgICAgICBjdXJyU3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBs
YWNlbWVudHModm0sIG9mZnNldCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIEdQUlJlZyBiYXNl
Rm9yR2V0R1BSOworICAgICAgICBpZiAodmlhUHJveHkoKSkgeworICAgICAgICAgICAgYmFzZUZv
ckdldEdQUiA9IHZhbHVlUmVncy5wYXlsb2FkR1BSKCk7CisgICAgICAgICAgICBqaXQubG9hZFB0
cigKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNQcm94
eTo6dGFyZ2V0T2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIGJhc2VGb3JHZXRHUFIpOworICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgIGJhc2VGb3JHZXRHUFIgPSBiYXNlR1BSOworCisgICAg
ICAgIEdQUlJlZyBiYXNlRm9yQWNjZXNzR1BSOworICAgICAgICBpZiAoIW1fY29uZGl0aW9uU2V0
LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgaml0Lm1vdmUoCisgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9u
KCkub2JqZWN0KCkpLAorICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
YmFzZUZvckFjY2Vzc0dQUiA9IHNjcmF0Y2hHUFI7CisgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgYmFzZUZvckFjY2Vzc0dQUiA9IGJhc2VGb3JHZXRHUFI7CisKKyAgICAgICAgR1BSUmVnIGxv
YWRlZFZhbHVlR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgaWYgKG1fdHlwZSAhPSBDdXN0
b21HZXR0ZXIgJiYgbV90eXBlICE9IEN1c3RvbVNldHRlcikgeworICAgICAgICAgICAgaWYgKG1f
dHlwZSA9PSBMb2FkKQorICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSID0gdmFsdWVSZWdz
LnBheWxvYWRHUFIoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBsb2FkZWRW
YWx1ZUdQUiA9IHNjcmF0Y2hHUFI7CisKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSOwor
ICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG1fb2Zmc2V0KSkKKyAgICAgICAgICAgICAg
ICBzdG9yYWdlR1BSID0gYmFzZUZvckFjY2Vzc0dQUjsKKyAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgIGppdC5sb2FkUHRyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoYmFzZUZvckFjY2Vzc0dQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgp
KSwKKyAgICAgICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIpOworICAgICAgICAgICAgICAg
IHN0b3JhZ2VHUFIgPSBsb2FkZWRWYWx1ZUdQUjsKKyAgICAgICAgICAgIH0KKworI2lmIFVTRShK
U1ZBTFVFNjQpCisgICAgICAgICAgICBqaXQubG9hZDY0KAorICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6QWRkcmVzcyhzdG9yYWdlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShtX29mZnNl
dCkpLCBsb2FkZWRWYWx1ZUdQUik7CisjZWxzZQorICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBM
b2FkKSB7CisgICAgICAgICAgICAgICAgaml0LmxvYWQzMigKKyAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKG1f
b2Zmc2V0KSArIFRhZ09mZnNldCksCisgICAgICAgICAgICAgICAgICAgIHZhbHVlUmVncy50YWdH
UFIoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBqaXQubG9hZDMyKAorICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdG9yYWdlR1BSLCBvZmZzZXRSZWxhdGl2ZVRv
QmFzZShtX29mZnNldCkgKyBQYXlsb2FkT2Zmc2V0KSwKKyAgICAgICAgICAgICAgICBsb2FkZWRW
YWx1ZUdQUik7CisjZW5kaWYKKyAgICAgICAgfQorCisgICAgICAgIC8vIFN0dWZmIGZvciBjdXN0
b20gZ2V0dGVycy4KKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlvbkNhbGw7Cisg
ICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBoYW5kbGVyQ2FsbDsKKworICAgICAgICAvLyBTdHVm
ZiBmb3IgSlMgZ2V0dGVycy4KKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpEYXRhTGFiZWxQdHIgYWRk
cmVzc09mTGlua0Z1bmN0aW9uQ2hlY2s7CisgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBmYXN0
UGF0aENhbGw7CisgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBzbG93UGF0aENhbGw7CisKKyAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHN1Y2Nlc3M7CisgICAgICAgIENDYWxsSGVscGVyczo6
SnVtcCBmYWlsOworICAgICAgICBpZiAobV90eXBlICE9IExvYWQgJiYgbV90eXBlICE9IE1pc3Mp
IHsKKyAgICAgICAgICAgIC8vIE5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2hlbmV2ZXIgdGhpcyBj
YWxsIGlzIG1hZGUgaW4gdGhlIGZ1dHVyZSwgd2UgcmVtZW1iZXIgdGhlCisgICAgICAgICAgICAv
LyBwbGFjZSB0aGF0IHdlIG1hZGUgaXQgZnJvbS4KKyAgICAgICAgICAgIGppdC5zdG9yZTMyKAor
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHN0dWJJbmZvLmNhbGxT
aXRlSW5kZXguYml0cygpKSwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0Zvcihz
dGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7CisK
KyAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gR2V0dGVyIHx8IG1fdHlwZSA9PSBTZXR0ZXIpIHsK
KyAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBKUyBjYWxsIHVzaW5nIGEgSlMgY2FsbCBpbmxp
bmUgY2FjaGUuIEFzc3VtZSB0aGF0OgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAg
ICAgLy8gLSBTUCBpcyBhbGlnbmVkIGFuZCByZXByZXNlbnRzIHRoZSBleHRlbnQgb2YgdGhlIGNh
bGxpbmcgY29tcGlsZXIncyBzdGFjayB1c2FnZS4KKyAgICAgICAgICAgICAgICAvLworICAgICAg
ICAgICAgICAgIC8vIC0gRlAgaXMgc2V0IGNvcnJlY3RseSAoaS5lLiBpdCBwb2ludHMgdG8gdGhl
IGNhbGxlcidzIGNhbGwgZnJhbWUgaGVhZGVyKS4KKyAgICAgICAgICAgICAgICAvLworICAgICAg
ICAgICAgICAgIC8vIC0gU1AgLSBGUCBpcyBhbiBhbGlnbmVkIGRpZmZlcmVuY2UuCisgICAgICAg
ICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAtIEFueSBieXRlIGJldHdlZW4gRlAgKGV4
Y2x1c2l2ZSkgYW5kIFNQIChpbmNsdXNpdmUpIGNvdWxkIGJlIGxpdmUgaW4gdGhlIGNhbGxpbmcK
KyAgICAgICAgICAgICAgICAvLyAgIGNvZGUuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAg
ICAgICAgICAvLyBUaGVyZWZvcmUsIHdlIHRlbXBvcmFyaWx5IGdyb3cgdGhlIHN0YWNrIGZvciB0
aGUgcHVycG9zZSBvZiB0aGUgY2FsbCBhbmQgdGhlbgorICAgICAgICAgICAgICAgIC8vIHNocmlu
ayBpdCBhZnRlci4KKworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3JhcmVEYXRh
LT5jYWxsTGlua0luZm8pOworICAgICAgICAgICAgICAgIG1fcmFyZURhdGEtPmNhbGxMaW5rSW5m
byA9IHN0ZDo6bWFrZV91bmlxdWU8Q2FsbExpbmtJbmZvPigpOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJZiB3ZSBnZW5lcmF0ZWQgYSBwb2x5bW9ycGhpYyBj
YWxsIHN0dWIgdGhhdCBqdW1wZWQgYmFjayB0byB0aGUgZ2V0dGVyCisgICAgICAgICAgICAgICAg
Ly8gc3R1Yiwgd2hpY2ggdGhlbiBqdW1wZWQgYmFjayB0byB0aGUgbWFpbiBjb2RlLCB0aGVuIHdl
J2QgaGF2ZSBhIHJlYWNoYWJpbGl0eQorICAgICAgICAgICAgICAgIC8vIHNpdHVhdGlvbiB0aGF0
IHRoZSBHQyBkb2Vzbid0IGtub3cgYWJvdXQuIFRoZSBHQyB3b3VsZCBlbnN1cmUgdGhhdCB0aGUg
cG9seW1vcnBoaWMKKyAgICAgICAgICAgICAgICAvLyBjYWxsIHN0dWIgc3RheWVkIGFsaXZlLCBh
bmQgaXQgd291bGQgZW5zdXJlIHRoYXQgdGhlIG1haW4gY29kZSBzdGF5ZWQgYWxpdmUsIGJ1dAor
ICAgICAgICAgICAgICAgIC8vIGl0IHdvdWxkbid0IGtub3cgdGhhdCB0aGUgZ2V0dGVyIHN0dWIg
d2FzIGFsaXZlLiBJZGVhbGx5IEpJVCBzdHViIHJvdXRpbmVzIHdvdWxkCisgICAgICAgICAgICAg
ICAgLy8gYmUgR0Mgb2JqZWN0cywgYW5kIHRoZW4gd2UnZCBiZSBhYmxlIHRvIHNheSB0aGF0IHRo
ZSBwb2x5bW9ycGhpYyBjYWxsIHN0dWIgaGFzIGEKKyAgICAgICAgICAgICAgICAvLyByZWZlcmVu
Y2UgdG8gdGhlIGdldHRlciBzdHViLgorICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDg5MTQKKyAgICAgICAgICAgICAgICBtX3JhcmVE
YXRhLT5jYWxsTGlua0luZm8tPmRpc2FsbG93U3R1YnMoKTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBtX3JhcmVEYXRhLT5jYWxsTGlua0luZm8tPnNldFVwQ2FsbCgKKyAgICAg
ICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvOjpDYWxsLCBzdHViSW5mby5jb2RlT3JpZ2luLCBs
b2FkZWRWYWx1ZUdQUik7CisKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0
IGRvbmU7CisKKyAgICAgICAgICAgICAgICAvLyBUaGVyZSBpcyBhICJ0aGlzIiBhcmd1bWVudC4K
KyAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlBhcmFtZXRlcnMgPSAxOworICAgICAg
ICAgICAgICAgIC8vIC4uLiBhbmQgYSB2YWx1ZSBhcmd1bWVudCBpZiB3ZSdyZSBjYWxsaW5nIGEg
c2V0dGVyLgorICAgICAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gU2V0dGVyKQorICAgICAgICAg
ICAgICAgICAgICBudW1iZXJPZlBhcmFtZXRlcnMrKzsKKworICAgICAgICAgICAgICAgIC8vIEdl
dCB0aGUgYWNjZXNzb3I7IGlmIHRoZXJlIGFpbid0IG9uZSB0aGVuIHRoZSByZXN1bHQgaXMganNV
bmRlZmluZWQoKS4KKyAgICAgICAgICAgICAgICBpZiAobV90eXBlID09IFNldHRlcikgeworICAg
ICAgICAgICAgICAgICAgICBqaXQubG9hZFB0cigKKyAgICAgICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6QWRkcmVzcyhsb2FkZWRWYWx1ZUdQUiwgR2V0dGVyU2V0dGVyOjpvZmZzZXRP
ZlNldHRlcigpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSKTsKKyAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFB0cigK
KyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhsb2FkZWRWYWx1
ZUdQUiwgR2V0dGVyU2V0dGVyOjpvZmZzZXRPZkdldHRlcigpKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGxvYWRlZFZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgcmV0dXJuVW5kZWZpbmVkID0gaml0LmJyYW5jaFRlc3RQ
dHIoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6WmVybywgbG9hZGVkVmFsdWVH
UFIpOworCisgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZSZWdzRm9yQ2FsbCA9IEpT
U3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUgKyBudW1iZXJPZlBhcmFtZXRlcnM7CisKKyAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCA9CisgICAgICAgICAgICAg
ICAgICAgIG51bWJlck9mUmVnc0ZvckNhbGwgKiBzaXplb2YoUmVnaXN0ZXIpICsgc2l6ZW9mKENh
bGxlckZyYW1lQW5kUEMpOworCisgICAgICAgICAgICAgICAgdW5zaWduZWQgYWxpZ25lZE51bWJl
ck9mQnl0ZXNGb3JDYWxsID0KKyAgICAgICAgICAgICAgICAgICAgV1RGOjpyb3VuZFVwVG9NdWx0
aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgbnVtYmVyT2ZCeXRlc0ZvckNhbGwpOworCisg
ICAgICAgICAgICAgICAgaml0LnN1YlB0cigKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxsKSwKKyAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKKyAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MgY2FsbGVlRnJhbWUgPSBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6c3RhY2tQb2lu
dGVyUmVnaXN0ZXIsCisgICAgICAgICAgICAgICAgICAgIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+
KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOworCisgICAgICAgICAgICAgICAgaml0LnN0b3Jl
MzIoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG51bWJl
ck9mUGFyYW1ldGVycyksCisgICAgICAgICAgICAgICAgICAgIGNhbGxlZUZyYW1lLndpdGhPZmZz
ZXQoSlNTdGFjazo6QXJndW1lbnRDb3VudCAqIHNpemVvZihSZWdpc3RlcikgKyBQYXlsb2FkT2Zm
c2V0KSk7CisKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmVDZWxsKAorICAgICAgICAgICAgICAg
ICAgICBsb2FkZWRWYWx1ZUdQUiwgY2FsbGVlRnJhbWUud2l0aE9mZnNldChKU1N0YWNrOjpDYWxs
ZWUgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmVDZWxs
KAorICAgICAgICAgICAgICAgICAgICBiYXNlRm9yR2V0R1BSLAorICAgICAgICAgICAgICAgICAg
ICBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDApLm9m
ZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworCisgICAgICAgICAgICAgICAgaWYgKG1fdHlw
ZSA9PSBTZXR0ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUoCisgICAg
ICAgICAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICBj
YWxsZWVGcmFtZS53aXRoT2Zmc2V0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KDEpLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBz
bG93Q2FzZSA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2goCisgICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6Tm90RXF1YWwsIGxvYWRlZFZhbHVlR1BSLCBhZGRyZXNzT2ZMaW5rRnVuY3Rp
b25DaGVjaywKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KDApKTsKKworICAgICAgICAgICAgICAgIGZhc3RQYXRoQ2FsbCA9IGppdC5uZWFyQ2FsbCgpOwor
CisgICAgICAgICAgICAgICAgaml0LmFkZFB0cigKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxsKSwKKyAgICAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAg
ICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBHZXR0ZXIpCisgICAgICAgICAgICAgICAgICAgIGpp
dC5zZXR1cFJlc3VsdHModmFsdWVSZWdzKTsKKworICAgICAgICAgICAgICAgIGRvbmUuYXBwZW5k
KGppdC5qdW1wKCkpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmxpbmsoJmppdCk7CisKKyAg
ICAgICAgICAgICAgICBqaXQubW92ZShsb2FkZWRWYWx1ZUdQUiwgR1BSSW5mbzo6cmVnVDApOwor
I2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgICAgICAgICAgLy8gV2UgKmFsd2F5cyoga25v
dyB0aGF0IHRoZSBnZXR0ZXIvc2V0dGVyLCBpZiBub24tbnVsbCwgaXMgYSBjZWxsLgorICAgICAg
ICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNl
bGxUYWcpLCBHUFJJbmZvOjpyZWdUMSk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBqaXQubW92
ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9yYXJlRGF0YS0+Y2FsbExpbmtJbmZvLmdl
dCgpKSwgR1BSSW5mbzo6cmVnVDIpOworICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCA9IGpp
dC5uZWFyQ2FsbCgpOworCisgICAgICAgICAgICAgICAgaml0LmFkZFB0cigKKyAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYWxpZ25lZE51bWJlck9mQnl0ZXNG
b3JDYWxsKSwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBHZXR0ZXIpCisgICAgICAg
ICAgICAgICAgICAgIGppdC5zZXR1cFJlc3VsdHModmFsdWVSZWdzKTsKKworICAgICAgICAgICAg
ICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICAgICAgICAgIHJldHVyblVuZGVm
aW5lZC5saW5rKCZqaXQpOworCisgICAgICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBHZXR0ZXIp
CisgICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCks
IHZhbHVlUmVncyk7CisKKyAgICAgICAgICAgICAgICBkb25lLmxpbmsoJmppdCk7CisKKyAgICAg
ICAgICAgICAgICBzdGF0ZS5jYWxsYmFja3MuYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICBb
Jl0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1f
cmFyZURhdGEtPmNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucygKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChzbG93UGF0aENhbGwp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZihhZGRy
ZXNzT2ZMaW5rRnVuY3Rpb25DaGVjayksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlu
a0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoZmFzdFBhdGhDYWxsKSk7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluaygKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzbG93UGF0aENhbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9u
TGFiZWwodm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKKyAg
ICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIC8vIGdldHRlcjogRW5jb2RlZEpTVmFsdWUgKCpHZXRWYWx1ZUZ1bmMpKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpOworICAgICAgICAgICAgICAgIC8vIHNldHRlcjogdm9pZCAoKlB1dFZhbHVlRnVuYykoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqIGJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNPYmplY3QsIEVuY29k
ZWRKU1ZhbHVlIHZhbHVlKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgICAgIGlm
IChtX3R5cGUgPT0gQ3VzdG9tR2V0dGVyKSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICBiYXNlRm9y
QWNjZXNzR1BSLCBiYXNlRm9yR2V0R1BSLAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGlkZW50LmltcGwoKSkpOworICAgICAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KGJhc2VGb3JBY2Nlc3NHUFIsIGJhc2VGb3JHZXRHUFIsIHZhbHVlUmVncy5ncHIoKSk7CisjZWxz
ZQorICAgICAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gQ3VzdG9tR2V0dGVyKSB7CisgICAgICAg
ICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoCisgICAgICAgICAg
ICAgICAgICAgICAgICBiYXNlRm9yQWNjZXNzR1BSLCBiYXNlRm9yR2V0R1BSLAorICAgICAgICAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRh
ZyksCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
aWRlbnQuaW1wbCgpKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJhc2VGb3JBY2Nlc3NHUFIsIGJhc2VGb3JHZXRHUFIsCisgICAgICAgICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHZhbHVlUmVncy50
YWdHUFIoKSk7CisgICAgICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgICAgICAgICAgaml0
LnN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAmdm0udG9wQ2FsbEZyYW1lKTsK
KworICAgICAgICAgICAgICAgIG9wZXJhdGlvbkNhbGwgPSBqaXQuY2FsbCgpOworICAgICAgICAg
ICAgICAgIGlmIChtX3R5cGUgPT0gQ3VzdG9tR2V0dGVyKQorICAgICAgICAgICAgICAgICAgICBq
aXQuc2V0dXBSZXN1bHRzKHZhbHVlUmVncyk7CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpKdW1wIG5vRXhjZXB0aW9uID0KKyAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRFeGNlcHRp
b25DaGVjayhDQ2FsbEhlbHBlcnM6OkludmVydGVkRXhjZXB0aW9uQ2hlY2spOworICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cigmdm0pLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgICAg
ICAgICAgaGFuZGxlckNhbGwgPSBqaXQuY2FsbCgpOworICAgICAgICAgICAgICAgIGppdC5qdW1w
VG9FeGNlcHRpb25IYW5kbGVyKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBub0V4
Y2VwdGlvbi5saW5rKCZqaXQpOworCisgICAgICAgICAgICAgICAgc3RhdGUuY2FsbGJhY2tzLmFw
cGVuZCgKKyAgICAgICAgICAgICAgICAgICAgWyZdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsob3BlcmF0aW9uQ2FsbCwg
RnVuY3Rpb25QdHIobV9yYXJlRGF0YS0+Y3VzdG9tQWNjZXNzb3Iub3BhcXVlKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoaGFuZGxlckNhbGwsIGxvb2t1cEV4Y2Vw
dGlvbkhhbmRsZXIpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7CiAgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBjYXNlIFJlcGxhY2U6IHsKKyAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG1fb2Zm
c2V0KSkgeworICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUoCisgICAgICAgICAgICAgICAgdmFs
dWVSZWdzLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAg
ICAgICAgICAgICAgYmFzZUdQUiwKKyAgICAgICAgICAgICAgICAgICAgSlNPYmplY3Q6Om9mZnNl
dE9mSW5saW5lU3RvcmFnZSgpICsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0SW5JbmxpbmVT
dG9yYWdlKG1fb2Zmc2V0KSAqIHNpemVvZihKU1ZhbHVlKSkpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgaml0
LnN0b3JlVmFsdWUoCisgICAgICAgICAgICAgICAgdmFsdWVSZWdzLAorICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICAgICAgc2NyYXRjaEdQUiwg
b2Zmc2V0SW5CdXR0ZXJmbHkobV9vZmZzZXQpICogc2l6ZW9mKEpTVmFsdWUpKSk7CisgICAgICAg
IH0KKyAgICAgICAgc3RhdGUuc3VjY2VlZCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgY2FzZSBUcmFuc2l0aW9uOiB7CisgICAgICAgIC8vIEFjY2Vzc0Nhc2U6OnRyYW5zaXRpb24o
KSBzaG91bGQgaGF2ZSByZXR1cm5lZCBudWxsLgorICAgICAgICBSRUxFQVNFX0FTU0VSVChHUFJJ
bmZvOjpudW1iZXJPZlJlZ2lzdGVycyA+PSA2IHx8ICFzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSB8fCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA9PSBuZXdTdHJ1Y3R1
cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFzdHJ1
Y3R1cmUoKS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSk7CisKKyAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKKworICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3IgYWxsb2NhdG9yKHN0dWJJbmZvLnBhdGNoLnVzZWRSZWdpc3RlcnMpOworICAgICAgICBhbGxv
Y2F0b3IubG9jayhiYXNlR1BSKTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2sodmFsdWVSZWdzKTsK
KyAgICAgICAgYWxsb2NhdG9yLmxvY2soc2NyYXRjaEdQUik7CisKKyAgICAgICAgR1BSUmVnIHNj
cmF0Y2hHUFIyID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICBHUFJS
ZWcgc2NyYXRjaEdQUjM7CisgICAgICAgIGlmIChuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSAhPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKQorICAgICAgICAgICAg
JiYgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpCisgICAgICAgICAgICBzY3JhdGNo
R1BSMyA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgc2NyYXRjaEdQUjMgPSBJbnZhbGlkR1BSUmVnOworCisgICAgICAgIHNpemVfdCBu
dW1iZXJPZlBhZGRpbmdCeXRlcyA9IGFsbG9jYXRvci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5
UHVzaGluZyhqaXQpOworCisgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbldh
dGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7CisKKyAgICAgICAgYm9vbCBzY3JhdGNo
R1BSSGFzU3RvcmFnZSA9IGZhbHNlOworCisgICAgICAgIGlmIChuZXdTdHJ1Y3R1cmUoKS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSAhPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewor
ICAgICAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKKyAgICAgICAgICAgIENvcGllZEFsbG9jYXRvciog
Y29waWVkQWxsb2NhdG9yID0gJnZtLmhlYXAuc3RvcmFnZUFsbG9jYXRvcigpOworCisgICAgICAg
ICAgICBpZiAoIXN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CisgICAgICAgICAg
ICAgICAgaml0LmxvYWRQdHIoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoCisgICAgICAgICAg
ICAgICAgICAgIGppdC5icmFuY2hTdWJQdHIoCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OlNpZ25lZCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobmV3U2l6ZSksIHNj
cmF0Y2hHUFIpKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgJmNv
cGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKKyAgICAgICAgICAgICAgICBqaXQu
bmVnUHRyKHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoCisgICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKCZjb3BpZWRBbGxvY2F0
b3ItPm1fY3VycmVudFBheWxvYWRFbmQpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBq
aXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1ZhbHVlKSksIHNj
cmF0Y2hHUFIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzaXplX3Qg
b2xkU2l6ZSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFs
dWUpOworICAgICAgICAgICAgICAgIEFTU0VSVChuZXdTaXplID4gb2xkU2l6ZSk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUjMpOworICAg
ICAgICAgICAgICAgIGppdC5sb2FkUHRyKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFp
bmluZywgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKAorICAg
ICAgICAgICAgICAgICAgICBqaXQuYnJhbmNoU3ViUHRyKAorICAgICAgICAgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpTaWduZWQsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG5ld1Np
emUpLCBzY3JhdGNoR1BSKSk7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlUHRyKHNjcmF0Y2hH
UFIsICZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZyk7CisgICAgICAgICAgICAg
ICAgaml0Lm5lZ1B0cihzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAor
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFic29sdXRlQWRkcmVzcygmY29waWVk
QWxsb2NhdG9yLT5tX2N1cnJlbnRQYXlsb2FkRW5kKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAg
ICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzaXplb2YoSlNWYWx1
ZSkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHNjcmF0Y2hHUFIg
PSBuZXcgc3RvcmFnZSwgc2NyYXRjaEdQUjMgPSBvbGQgc3RvcmFnZSwKKyAgICAgICAgICAgICAg
ICAvLyBzY3JhdGNoR1BSMiA9IGF2YWlsYWJsZQorICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90
IG9mZnNldCA9IDA7IG9mZnNldCA8IG9sZFNpemU7IG9mZnNldCArPSBzaXplb2Yodm9pZCopKSB7
CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKAorICAgICAgICAgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNj
cmF0Y2hHUFIzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1zdGF0aWNfY2FzdDxwdHJk
aWZmX3Q+KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKyBzaXplb2Yo
SlNWYWx1ZSkgKyBzaXplb2Yodm9pZCopKSksCisgICAgICAgICAgICAgICAgICAgICAgICBzY3Jh
dGNoR1BSMik7CisgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cigKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHNjcmF0Y2hHUFIyLAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4ob2Zm
c2V0ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGppdC5zdG9yZVB0cihzY3JhdGNoR1BS
LCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSk7CisgICAgICAgICAgICBzY3JhdGNoR1BSSGFzU3RvcmFnZSA9IHRydWU7CisgICAgICAg
IH0KKworICAgICAgICB1aW50MzJfdCBzdHJ1Y3R1cmVCaXRzID0gYml0d2lzZV9jYXN0PHVpbnQz
Ml90PihuZXdTdHJ1Y3R1cmUoKS0+aWQoKSk7CisgICAgICAgIGppdC5zdG9yZTMyKAorICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RydWN0dXJlQml0cyksCisgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSk7CisKKyAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG1fb2Zmc2V0KSkgeworICAg
ICAgICAgICAgaml0LnN0b3JlVmFsdWUoCisgICAgICAgICAgICAgICAgdmFsdWVSZWdzLAorICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICAgICAg
YmFzZUdQUiwKKyAgICAgICAgICAgICAgICAgICAgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3Rv
cmFnZSgpICsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKG1fb2Zm
c2V0ICogc2l6ZW9mKEpTVmFsdWUpKSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
aWYgKCFzY3JhdGNoR1BSSGFzU3RvcmFnZSkKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgp
KSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSgKKyAgICAgICAgICAg
ICAgICB2YWx1ZVJlZ3MsCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNj
cmF0Y2hHUFIsIG9mZnNldEluQnV0dGVyZmx5KG1fb2Zmc2V0KSAqIHNpemVvZihKU1ZhbHVlKSkp
OworICAgICAgICB9CisKKyAgICAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IG51
bGxwdHI7CisgICAgICAgIGlmIChuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAh
PSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkKKyAgICAgICAgICAgIHNjcmF0Y2hC
dWZmZXIgPSB2bS5zY3JhdGNoQnVmZmVyRm9yU2l6ZShhbGxvY2F0b3IuZGVzaXJlZFNjcmF0Y2hC
dWZmZXJTaXplRm9yQ2FsbCgpKTsKKworI2lmIEVOQUJMRShHR0MpCisgICAgICAgIGlmIChuZXdT
dHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSkgeworICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxGbHVzaFdy
aXRlQmFycmllckJ1ZmZlcjsKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBvd25lcklz
UmVtZW1iZXJlZE9ySW5FZGVuID0gaml0Lmp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKGJhc2VH
UFIpOworICAgICAgICAgICAgV3JpdGVCYXJyaWVyQnVmZmVyJiB3cml0ZUJhcnJpZXJCdWZmZXIg
PSBqaXQudm0oKS0+aGVhcC53cml0ZUJhcnJpZXJCdWZmZXIoKTsKKyAgICAgICAgICAgIGppdC5s
b2FkMzIod3JpdGVCYXJyaWVyQnVmZmVyLmN1cnJlbnRJbmRleEFkZHJlc3MoKSwgc2NyYXRjaEdQ
UjIpOworICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIG5lZWRUb0ZsdXNoID0KKyAgICAg
ICAgICAgICAgICBqaXQuYnJhbmNoMzIoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6QWJvdmVPckVxdWFsLCBzY3JhdGNoR1BSMiwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIod3JpdGVCYXJyaWVyQnVmZmVyLmNhcGFjaXR5KCkpKTsKKwor
ICAgICAgICAgICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBzY3Jh
dGNoR1BSMik7CisgICAgICAgICAgICBqaXQuc3RvcmUzMihzY3JhdGNoR1BSMiwgd3JpdGVCYXJy
aWVyQnVmZmVyLmN1cnJlbnRJbmRleEFkZHJlc3MoKSk7CisKKyAgICAgICAgICAgIGppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih3cml0ZUJhcnJpZXJCdWZmZXIuYnVmZmVyKCkp
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIC8vIFdlIHVzZSBhbiBvZmZzZXQgb2YgLXNpemVv
Zih2b2lkKikgYmVjYXVzZSB3ZSBhbHJlYWR5IGFkZGVkIDEgdG8gc2NyYXRjaEdQUjIuCisgICAg
ICAgICAgICBqaXQuc3RvcmVQdHIoCisgICAgICAgICAgICAgICAgYmFzZUdQUiwKKyAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleCgKKyAgICAgICAgICAgICAgICAgICAgc2Ny
YXRjaEdQUiwgc2NyYXRjaEdQUjIsIENDYWxsSGVscGVyczo6U2NhbGVQdHIsCisgICAgICAgICAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KC1zaXplb2Yodm9pZCopKSkpOworCisgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZVdpdGhCYXJyaWVyID0gaml0Lmp1bXAoKTsK
KyAgICAgICAgICAgIG5lZWRUb0ZsdXNoLmxpbmsoJmppdCk7CisKKyAgICAgICAgICAgIGFsbG9j
YXRvci5wcmVzZXJ2ZVVzZWRSZWdpc3RlcnNUb1NjcmF0Y2hCdWZmZXJGb3JDYWxsKGppdCwgc2Ny
YXRjaEJ1ZmZlciwgc2NyYXRjaEdQUjIpOworICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShiYXNlR1BSKTsKKyAgICAgICAgICAgIGNhbGxGbHVzaFdyaXRlQmFycmll
ckJ1ZmZlciA9IGppdC5jYWxsKCk7CisgICAgICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVVzZWRS
ZWdpc3RlcnNGcm9tU2NyYXRjaEJ1ZmZlckZvckNhbGwoCisgICAgICAgICAgICAgICAgaml0LCBz
Y3JhdGNoQnVmZmVyLCBzY3JhdGNoR1BSMik7CisKKyAgICAgICAgICAgIGRvbmVXaXRoQmFycmll
ci5saW5rKCZqaXQpOworICAgICAgICAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5r
KCZqaXQpOworCisgICAgICAgICAgICBzdGF0ZS5jYWxsYmFja3MuYXBwZW5kKAorICAgICAgICAg
ICAgICAgIFsmXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAg
ICBsaW5rQnVmZmVyLmxpbmsoY2FsbEZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyLCBvcGVyYXRpb25G
bHVzaFdyaXRlQmFycmllckJ1ZmZlcik7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0K
KyNlbmRpZiAvLyBFTkFCTEUoR0dDKQorICAgICAgICAKKyAgICAgICAgc3RhdGUuc3VjY2VlZCgp
OworCisgICAgICAgIGlmIChuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBz
dHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgeworICAgICAgICAgICAgc2xvd1BhdGgu
bGluaygmaml0KTsKKyAgICAgICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJz
QnlQb3BwaW5nKGppdCwgbnVtYmVyT2ZQYWRkaW5nQnl0ZXMpOworICAgICAgICAgICAgYWxsb2Nh
dG9yLnByZXNlcnZlVXNlZFJlZ2lzdGVyc1RvU2NyYXRjaEJ1ZmZlckZvckNhbGwoaml0LCBzY3Jh
dGNoQnVmZmVyLCBzY3JhdGNoR1BSKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAg
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKKyAgICAgICAgICAgICAgICBiYXNlR1BS
LAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihuZXdTdHJ1Y3R1
cmUoKSksCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobV9vZmZz
ZXQpLAorICAgICAgICAgICAgICAgIHZhbHVlUmVncy5ncHIoKSk7CisjZWxzZQorICAgICAgICAg
ICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKKyAgICAgICAgICAgICAgICBiYXNl
R1BSLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihuZXdTdHJ1
Y3R1cmUoKSksCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobV9v
ZmZzZXQpLAorICAgICAgICAgICAgICAgIHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHZhbHVlUmVn
cy50YWdHUFIoKSk7CisjZW5kaWYKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBvcGVy
YXRpb25DYWxsID0gaml0LmNhbGwoKTsKKyAgICAgICAgICAgIGFsbG9jYXRvci5yZXN0b3JlVXNl
ZFJlZ2lzdGVyc0Zyb21TY3JhdGNoQnVmZmVyRm9yQ2FsbChqaXQsIHNjcmF0Y2hCdWZmZXIsIHNj
cmF0Y2hHUFIpOworICAgICAgICAgICAgc3RhdGUuc3VjY2VlZCgpOworCisgICAgICAgICAgICBz
dGF0ZS5jYWxsYmFja3MuYXBwZW5kKAorICAgICAgICAgICAgICAgIFsmXSAoTGlua0J1ZmZlciYg
bGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsob3BlcmF0
aW9uQ2FsbCwgb3BlcmF0aW9uUmVhbGxvY2F0ZVN0b3JhZ2VBbmRGaW5pc2hQdXQpOworICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBj
YXNlIEFycmF5TGVuZ3RoOiB7CisgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRk
cmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJy
YXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBzdGF0ZS5m
YWlsQW5kSWdub3JlLmFwcGVuZCgKKyAgICAgICAgICAgIGppdC5icmFuY2gzMihDQ2FsbEhlbHBl
cnM6Okxlc3NUaGFuLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSkp
OworICAgICAgICBqaXQuYm94SW50MzIoc2NyYXRjaEdQUiwgdmFsdWVSZWdzKTsKKyAgICAgICAg
c3RhdGUuc3VjY2VlZCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2FzZSBTdHJp
bmdMZW5ndGg6IHsKKyAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNTdHJpbmc6Om9mZnNldE9mTGVuZ3RoKCkpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigp
KTsKKyAgICAgICAgaml0LmJveEludDMyKHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHZhbHVlUmVn
cyk7CisgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0gfQog
ICAgIAotICAgIG1fbGlzdC5hcHBlbmQoR2V0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJ
bmZvKHN0dWJJbmZvKSk7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAot
UG9seW1vcnBoaWNHZXRCeUlkTGlzdCogUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6ZnJvbShTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCitQb2x5bW9ycGhpY0FjY2Vzczo6UG9seW1vcnBoaWNB
Y2Nlc3MoKSB7IH0KK1BvbHltb3JwaGljQWNjZXNzOjp+UG9seW1vcnBoaWNBY2Nlc3MoKSB7IH0K
KworTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIFBvbHltb3JwaGljQWNjZXNzOjpyZWdlbmVyYXRlV2l0
aENhc2VzKAorICAgIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbywgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsCisgICAgVmVjdG9yPHN0ZDo6
dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPj4gb3JpZ2luYWxDYXNlc1RvQWRkKQogewotICAgIGlmIChz
dHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfbGlzdCkKLSAgICAgICAgcmV0
dXJuIHN0dWJJbmZvLnUuZ2V0QnlJZExpc3QubGlzdDsKLSAgICAKLSAgICBBU1NFUlQoCi0gICAg
ICAgIHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmCi0gICAgICAg
IHx8IHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0KTsKLSAgICAKLSAgICBQb2x5
bW9ycGhpY0dldEJ5SWRMaXN0KiByZXN1bHQgPSBuZXcgUG9seW1vcnBoaWNHZXRCeUlkTGlzdChz
dHViSW5mbyk7CisgICAgLy8gVGhpcyBtZXRob2Qgd2lsbCBhZGQgdGhlIG9yaWdpbmFsQ2FzZXNU
b0FkZCB0byB0aGUgbGlzdCBvbmUgYXQgYSB0aW1lIHdoaWxlIHByZXNlcnZpbmcgdGhlCisgICAg
Ly8gaW52YXJpYW50czoKKyAgICAvLyAtIElmIGEgbmV3bHkgYWRkZWQgY2FzZSBjYW5SZXBsYWNl
KCkgYW55IGV4aXN0aW5nIGNhc2UsIHRoZW4gdGhlIGV4aXN0aW5nIGNhc2UgaXMgcmVtb3ZlZCBi
ZWZvcmUKKyAgICAvLyAgIHRoZSBuZXcgY2FzZSBpcyBhZGRlZC4gUmVtb3ZhbCBkb2Vzbid0IGNo
YW5nZSBvcmRlciBvZiB0aGUgbGlzdC4gQW55IG51bWJlciBvZiBleGlzdGluZyBjYXNlcworICAg
IC8vICAgY2FuIGJlIHJlbW92ZWQgdmlhIHRoZSBjYW5SZXBsYWNlKCkgcnVsZS4KKyAgICAvLyAt
IENhc2VzIGluIHRoZSBsaXN0IGFsd2F5cyBhcHBlYXIgaW4gYXNjZW5kaW5nIG9yZGVyIG9mIHRp
bWUgb2YgYWRkaXRpb24uIFRoZXJlZm9yZSwgaWYgeW91CisgICAgLy8gICBjYXNjYWRlIHRocm91
Z2ggdGhlIGNhc2VzIGluIHJldmVyc2Ugb3JkZXIsIHlvdSB3aWxsIGdldCB0aGUgbW9zdCByZWNl
bnQgY2FzZXMgZmlyc3QuCisgICAgLy8gLSBJZiB0aGlzIG1ldGhvZCBmYWlscyAocmV0dXJucyBu
dWxsLCBkb2Vzbid0IGFkZCB0aGUgY2FzZXMpLCB0aGVuIGJvdGggdGhlIHByZXZpb3VzIGNhc2Ug
bGlzdAorICAgIC8vICAgYW5kIHRoZSBwcmV2aW91cyBzdHViIGFyZSBrZXB0IGludGFjdCBhbmQg
dGhlIG5ldyBjYXNlcyBhcmUgZGVzdHJveWVkLiBJdCdzIE9LIHRvIGF0dGVtcHQgdG8KKyAgICAv
LyAgIGFkZCBtb3JlIHRoaW5ncyBhZnRlciBmYWlsdXJlLgogICAgIAotICAgIHN0dWJJbmZvLmlu
aXRHZXRCeUlkTGlzdChyZXN1bHQpOworICAgIC8vIEZpcnN0LCB2ZXJpZnkgdGhhdCB3ZSBjYW4g
Z2VuZXJhdGUgY29kZSBmb3IgYWxsIG9mIHRoZSBuZXcgY2FzZXMgd2hpbGUgZWxpbWluYXRpbmcg
YW55IG9mIHRoZQorICAgIC8vIG5ldyBjYXNlcyB0aGF0IHJlcGxhY2UgZWFjaCBvdGhlci4KKyAg
ICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+PiBjYXNlc1RvQWRkOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBvcmlnaW5hbENhc2VzVG9BZGQuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IG15Q2FzZSA9IHN0ZDo6bW92ZShv
cmlnaW5hbENhc2VzVG9BZGRbaV0pOworCisgICAgICAgIC8vIEFkZCBpdCBvbmx5IGlmIGl0IGlz
IG5vdCByZXBsYWNlZCBieSB0aGUgc3Vic2VxdWVudCBjYXNlcyBpbiB0aGUgbGlzdC4KKyAgICAg
ICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBpICsgMTsg
aiA8IG9yaWdpbmFsQ2FzZXNUb0FkZC5zaXplKCk7ICsraikgeworICAgICAgICAgICAgaWYgKG9y
aWdpbmFsQ2FzZXNUb0FkZFtqXS0+Y2FuUmVwbGFjZSgqbXlDYXNlKSkgeworICAgICAgICAgICAg
ICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIGlmIChmb3VuZCkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAKKyAgICAgICAgaWYgKG15Q2FzZS0+ZG9lc0NhbGxzKCkgJiYgc3R1YkluZm8ucGF0
Y2guc3BpbGxNb2RlID09IE5lZWRUb1NwaWxsKQorICAgICAgICAgICAgcmV0dXJuIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cigpOworCisgICAgICAgIGNhc2VzVG9BZGQuYXBwZW5kKHN0ZDo6bW92ZSht
eUNhc2UpKTsKKyAgICB9CisKKyAgICAvLyBOb3cgY29uc3RydWN0IHRoZSBsaXN0IG9mIGNhc2Vz
IGFzIHRoZXkgc2hvdWxkIGFwcGVhciBpZiB3ZSBhcmUgc3VjY2Vzc2Z1bC4gVGhpcyBtZWFucyBw
dXR0aW5nCisgICAgLy8gYWxsIG9mIHRoZSBwcmV2aW91cyBjYXNlcyBpbiB0aGlzIGxpc3QgaW4g
b3JkZXIgYnV0IGV4Y2x1ZGluZyB0aG9zZSB0aGF0IGNhbiBiZSByZXBsYWNlZCwgYW5kCisgICAg
Ly8gdGhlbiBhZGRpbmcgdGhlIG5ldyBjYXNlcy4KKyAgICBMaXN0VHlwZSBuZXdDYXNlczsKKyAg
ICBmb3IgKGF1dG8mIG9sZENhc2UgOiBtX2xpc3QpIHsKKyAgICAgICAgYm9vbCBmb3VuZCA9IGZh
bHNlOworICAgICAgICBmb3IgKGF1dG8mIGNhc2VUb0FkZCA6IGNhc2VzVG9BZGQpIHsKKyAgICAg
ICAgICAgIGlmIChjYXNlVG9BZGQtPmNhblJlcGxhY2UoKm9sZENhc2UpKSB7CisgICAgICAgICAg
ICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIGlmICghZm91bmQpCisgICAgICAgICAgICBuZXdDYXNlcy5h
cHBlbmQob2xkQ2FzZS0+Y2xvbmUoKSk7CisgICAgfQorICAgIGZvciAoYXV0byYgY2FzZVRvQWRk
IDogY2FzZXNUb0FkZCkKKyAgICAgICAgbmV3Q2FzZXMuYXBwZW5kKHN0ZDo6bW92ZShjYXNlVG9B
ZGQpKTsKICAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotfQorICAgIGlmIChuZXdDYXNlcy5zaXpl
KCkgPiBPcHRpb25zOjptYXhBY2Nlc3NWYXJpYW50TGlzdFNpemUoKSkKKyAgICAgICAgcmV0dXJu
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOwogCi1Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojp+UG9s
eW1vcnBoaWNHZXRCeUlkTGlzdCgpIHsgfQorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByZXN1
bHQgPSByZWdlbmVyYXRlKHZtLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBpZGVudCwgbmV3Q2FzZXMp
OworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
KCk7CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpjdXJy
ZW50U2xvd1BhdGhUYXJnZXQoCi0gICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKSBjb25z
dAotewotICAgIGlmIChpc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dD
YXNlKTsKLSAgICByZXR1cm4gbV9saXN0Lmxhc3QoKS5zdHViUm91dGluZSgpLT5jb2RlKCkuY29k
ZSgpOworICAgIG1fbGlzdCA9IHN0ZDo6bW92ZShuZXdDYXNlcyk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotdm9pZCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjphZGRBY2Nlc3MoY29uc3QgR2V0
QnlJZEFjY2VzcyYgYWNjZXNzKQorTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIFBvbHltb3JwaGljQWNj
ZXNzOjpyZWdlbmVyYXRlV2l0aENhc2UoCisgICAgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gbmV3QWNjZXNzKQogewotICAgIEFTU0VS
VCghaXNGdWxsKCkpOwotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSByZXNpemluZyBvcHRpbWl6
ZXMgZm9yIHNwYWNlLCBub3QgdGltZS4KLSAgICBtX2xpc3QucmVzaXplVG9GaXQobV9saXN0LnNp
emUoKSArIDEpOwotICAgIG1fbGlzdC5sYXN0KCkgPSBhY2Nlc3M7CisgICAgVmVjdG9yPHN0ZDo6
dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPj4gbmV3QWNjZXNzZXM7CisgICAgbmV3QWNjZXNzZXMuYXBw
ZW5kKHN0ZDo6bW92ZShuZXdBY2Nlc3MpKTsKKyAgICByZXR1cm4gcmVnZW5lcmF0ZVdpdGhDYXNl
cyh2bSwgY29kZUJsb2NrLCBzdHViSW5mbywgaWRlbnQsIHN0ZDo6bW92ZShuZXdBY2Nlc3Nlcykp
OwogfQogCi1ib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmlzRnVsbCgpIGNvbnN0Citib29s
IFBvbHltb3JwaGljQWNjZXNzOjp2aXNpdFdlYWsoVk0mIHZtKSBjb25zdAogewotICAgIEFTU0VS
VChzaXplKCkgPD0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKTsKLSAgICByZXR1cm4gc2l6
ZSgpID09IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFhdChpKS52aXNpdFdlYWsodm0p
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojppc0FsbW9zdEZ1bGwoKSBjb25zdAordm9p
ZCBQb2x5bW9ycGhpY0FjY2Vzczo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewotICAg
IEFTU0VSVChzaXplKCkgPD0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKTsKLSAgICByZXR1
cm4gc2l6ZSgpID49IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDE7CisgICAgb3V0LnBy
aW50KFJhd1BvaW50ZXIodGhpcyksICI6WyIpOworICAgIENvbW1hUHJpbnRlciBjb21tYTsKKyAg
ICBmb3IgKGF1dG8mIGVudHJ5IDogbV9saXN0KQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICpl
bnRyeSk7CisgICAgb3V0LnByaW50KCJdIik7CiB9CiAKLWJvb2wgUG9seW1vcnBoaWNHZXRCeUlk
TGlzdDo6ZGlkU2VsZlBhdGNoaW5nKCkgY29uc3QKK01hY3JvQXNzZW1ibGVyQ29kZVB0ciBQb2x5
bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZSgKKyAgICBWTSYgdm0sIENvZGVCbG9jayogY29kZUJs
b2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIGNvbnN0IElkZW50aWZpZXImIGlkZW50
LAorICAgIFBvbHltb3JwaGljQWNjZXNzOjpMaXN0VHlwZSYgY2FzZXMpCiB7Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIGlmIChhdChpKS50eXBlKCkgPT0g
R2V0QnlJZEFjY2Vzczo6U2ltcGxlSW5saW5lKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgQWNjZXNzR2VuZXJhdGlvblN0YXRlIHN0YXRlOworCisgICAgc3RhdGUuYWNjZXNzID0gdGhp
czsKKyAgICBzdGF0ZS5zdHViSW5mbyA9ICZzdHViSW5mbzsKKyAgICBzdGF0ZS5pZGVudCA9ICZp
ZGVudDsKKyAgICAKKyAgICBzdGF0ZS5iYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHVi
SW5mby5wYXRjaC5iYXNlR1BSKTsKKyAgICBzdGF0ZS52YWx1ZVJlZ3MgPSBKU1ZhbHVlUmVncygK
KyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJ
bmZvLnBhdGNoLnZhbHVlVGFnR1BSKSwKKyNlbmRpZgorICAgICAgICBzdGF0aWNfY2FzdDxHUFJS
ZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVlR1BSKSk7CisKKyAgICBTY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3IgYWxsb2NhdG9yKHN0dWJJbmZvLnBhdGNoLnVzZWRSZWdpc3RlcnMpOworICAgIHN0YXRl
LmFsbG9jYXRvciA9ICZhbGxvY2F0b3I7CisgICAgYWxsb2NhdG9yLmxvY2soc3RhdGUuYmFzZUdQ
Uik7CisgICAgYWxsb2NhdG9yLmxvY2soc3RhdGUudmFsdWVSZWdzKTsKKworICAgIHN0YXRlLnNj
cmF0Y2hHUFIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgCisgICAgQ0Nh
bGxIZWxwZXJzIGppdCgmdm0sIGNvZGVCbG9jayk7CisgICAgc3RhdGUuaml0ID0gJmppdDsKKwor
ICAgIHN0YXRlLm51bWJlck9mUGFkZGluZ0J5dGVzID0gYWxsb2NhdG9yLnByZXNlcnZlUmV1c2Vk
UmVnaXN0ZXJzQnlQdXNoaW5nKGppdCk7CisKKyAgICBib29sIGFsbEd1YXJkZWRCeVN0cnVjdHVy
ZUNoZWNrID0gdHJ1ZTsKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogY2FzZXMpCisgICAgICAgIGFs
bEd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrICY9IGVudHJ5LT5ndWFyZGVkQnlTdHJ1Y3R1cmVDaGVj
aygpOworCisgICAgaWYgKCFzaXplKCkpIHsKKyAgICAgICAgLy8gVGhpcyBpcyBzdXBlciB1bmxp
a2VseSwgYnV0IHdlIG1ha2UgaXQgbGVnYWwgYW55d2F5LgorICAgICAgICBzdGF0ZS5mYWlsQW5k
UmVwYXRjaC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgfSBlbHNlIGlmICghYWxsR3VhcmRlZEJ5
U3RydWN0dXJlQ2hlY2sgfHwgc2l6ZSgpID09IDEpIHsKKyAgICAgICAgLy8gSWYgdGhlcmUgYXJl
IGFueSBwcm94aWVzIGluIHRoZSBsaXN0LCB3ZSBjYW5ub3QganVzdCB1c2UgYSBiaW5hcnkgc3dp
dGNoIG92ZXIgdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgLy8gV2UgbmVlZCB0byByZXNvcnQgdG8g
YSBjYXNjYWRlLiBBIGNhc2NhZGUgYWxzbyBoYXBwZW5zIHRvIGJlIG9wdGltYWwgaWYgd2Ugb25s
eSBoYXZlIGp1c3QKKyAgICAgICAgLy8gb25lIGNhc2UuCisgICAgICAgIENDYWxsSGVscGVyczo6
SnVtcExpc3QgZmFsbFRocm91Z2g7CisKKyAgICAgICAgLy8gQ2FzY2FkZSB0aHJvdWdoIHRoZSBs
aXN0LCBwcmVmZXJyaW5nIG5ld2VyIGVudHJpZXMuCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IGNhc2VzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgZmFsbFRocm91Z2gubGluaygmaml0
KTsKKyAgICAgICAgICAgIGNhc2VzW2ldLT5nZW5lcmF0ZVdpdGhHdWFyZChzdGF0ZSwgZmFsbFRo
cm91Z2gpOworICAgICAgICB9CisgICAgICAgIHN0YXRlLmZhaWxBbmRSZXBhdGNoLmFwcGVuZChm
YWxsVGhyb3VnaCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaml0LmxvYWQzMigKKyAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdGF0ZS5iYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLAorICAgICAgICAgICAgc3RhdGUuc2NyYXRjaEdQUik7CisgICAgICAgIAor
ICAgICAgICBWZWN0b3I8aW50NjRfdD4gY2FzZVZhbHVlcyhjYXNlcy5zaXplKCkpOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2FzZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAg
ICBjYXNlVmFsdWVzW2ldID0gYml0d2lzZV9jYXN0PGludDMyX3Q+KGNhc2VzW2ldLT5zdHJ1Y3R1
cmUoKS0+aWQoKSk7CisgICAgICAgIAorICAgICAgICBCaW5hcnlTd2l0Y2ggYmluYXJ5U3dpdGNo
KHN0YXRlLnNjcmF0Y2hHUFIsIGNhc2VWYWx1ZXMsIEJpbmFyeVN3aXRjaDo6SW50MzIpOworICAg
ICAgICB3aGlsZSAoYmluYXJ5U3dpdGNoLmFkdmFuY2Uoaml0KSkKKyAgICAgICAgICAgIGNhc2Vz
W2JpbmFyeVN3aXRjaC5jYXNlSW5kZXgoKV0tPmdlbmVyYXRlKHN0YXRlKTsKKyAgICAgICAgc3Rh
dGUuZmFpbEFuZFJlcGF0Y2guYXBwZW5kKGJpbmFyeVN3aXRjaC5mYWxsVGhyb3VnaCgpKTsKICAg
ICB9Ci0gICAgcmV0dXJuIGZhbHNlOworCisgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5saW5rKCZq
aXQpOworCisgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGlubGluZSBjYWNoZSBvcHRpbWl6YXRp
b24gY29kZSBrbm93cyB0aGF0IHdlIGFyZSB0YWtpbmcgc2xvdyBwYXRoIGJlY2F1c2UKKyAgICAv
LyBvZiBzb21ldGhpbmcgdGhhdCBpc24ndCBwYXRjaGFibGUuICJzZWVuIiBiZWluZyBmYWxzZSBt
ZWFucyB0aGF0IHdlIGJ5cGFzcyBwYXRjaGluZy4gVGhpcyBpcworICAgIC8vIHByZXR0eSBncm9z
cyBidXQgaXQgbWVhbnMgdGhhdCB3ZSBkb24ndCBuZWVkIHRvIGhhdmUgdHdvIHNsb3cgcGF0aCBl
bnRyeXBvaW50cyAtIG9uZSBmb3IKKyAgICAvLyBwYXRjaGluZyBhbmQgb25lIGZvciBub3JtYWwg
c2xvdyBzdHVmZi4KKyAgICBqaXQuc3RvcmU4KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGZh
bHNlKSwgJnN0dWJJbmZvLnNlZW4pOworCisgICAgc3RhdGUuZmFpbEFuZFJlcGF0Y2gubGluaygm
aml0KTsKKyAgICAKKyAgICBzdGF0ZS5yZXN0b3JlU2NyYXRjaCgpOworICAgIENDYWxsSGVscGVy
czo6SnVtcExpc3QgZmFpbHVyZSA9IGppdC5qdW1wKCk7CisKKyAgICBMaW5rQnVmZmVyIGxpbmtC
dWZmZXIodm0sIGppdCwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgIGlm
IChsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpCisgICAgICAgIHJldHVybiBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIoKTsKKworICAgIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCA9
CisgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJ
bmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSk7CisgICAgICAgIAorICAgIGxpbmtCdWZmZXIubGlu
ayhzdGF0ZS5zdWNjZXNzLCBzdWNjZXNzTGFiZWwpOworCisgICAgbGlua0J1ZmZlci5saW5rKAor
ICAgICAgICBmYWlsdXJlLAorICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFi
ZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7CisgICAgCisg
ICAgZm9yIChhdXRvIGNhbGxiYWNrIDogc3RhdGUuY2FsbGJhY2tzKQorICAgICAgICBjYWxsYmFj
ayhsaW5rQnVmZmVyKTsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZSA9IEZJ
TkFMSVpFX0NPREVfRk9SKAorICAgICAgICBjb2RlQmxvY2ssIGxpbmtCdWZmZXIsCisgICAgICAg
ICgiJXMiLCB0b0NTdHJpbmcoIkdldCBhY2Nlc3Mgc3R1YiBmb3IgIiwgKmNvZGVCbG9jaywgIiAi
LCBzdHViSW5mby5jb2RlT3JpZ2luLCAiIHdpdGggcmV0dXJuIHBvaW50ICIsIHN1Y2Nlc3NMYWJl
bCwgIjogIiwgKnRoaXMpLmRhdGEoKSkpOworCisgICAgYm9vbCBkb2VzQ2FsbHMgPSBmYWxzZTsK
KyAgICBmb3IgKGF1dG8mIGVudHJ5IDogY2FzZXMpCisgICAgICAgIGRvZXNDYWxscyB8PSBlbnRy
eS0+ZG9lc0NhbGxzKCk7CisgICAgCisgICAgbV9zdHViUm91dGluZSA9IGNyZWF0ZUpJVFN0dWJS
b3V0aW5lKGNvZGUsIHZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBkb2VzQ2FsbHMp
OworICAgIG1fd2F0Y2hwb2ludHMgPSBzdGQ6Om1vdmUoc3RhdGUud2F0Y2hwb2ludHMpOworICAg
IHJldHVybiBjb2RlLmNvZGUoKTsKIH0KIAotYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojp2
aXNpdFdlYWsoVk0mIHZtKSBjb25zdAorfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBX
VEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRT
dHJlYW0mIG91dCwgQWNjZXNzQ2FzZTo6QWNjZXNzVHlwZSB0eXBlKQogewotICAgIGZvciAodW5z
aWduZWQgaSA9IHNpemUoKTsgaS0tOykgewotICAgICAgICBpZiAoIWF0KGkpLnZpc2l0V2Vhayh2
bSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
Y2FzZSBBY2Nlc3NDYXNlOjpMb2FkOgorICAgICAgICBvdXQucHJpbnQoIkxvYWQiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6VHJhbnNpdGlvbjoKKyAgICAgICAgb3V0
LnByaW50KCJUcmFuc2l0aW9uIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nh
c2U6OlJlcGxhY2U6CisgICAgICAgIG91dC5wcmludCgiUmVwbGFjZSIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpNaXNzOgorICAgICAgICBvdXQucHJpbnQoIk1pc3Mi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6R2V0dGVyOgorICAgICAg
ICBvdXQucHJpbnQoIkdldHRlciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3ND
YXNlOjpTZXR0ZXI6CisgICAgICAgIG91dC5wcmludCgiU2V0dGVyIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkN1c3RvbUdldHRlcjoKKyAgICAgICAgb3V0LnByaW50
KCJDdXN0b21HZXR0ZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6
Q3VzdG9tU2V0dGVyOgorICAgICAgICBvdXQucHJpbnQoIkN1c3RvbVNldHRlciIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbkhpdDoKKyAgICAgICAgb3V0LnByaW50
KCJJbkhpdCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbk1pc3M6
CisgICAgICAgIG91dC5wcmludCgiSW5NaXNzIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEFjY2Vzc0Nhc2U6OkFycmF5TGVuZ3RoOgorICAgICAgICBvdXQucHJpbnQoIkFycmF5TGVuZ3Ro
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OlN0cmluZ0xlbmd0aDoK
KyAgICAgICAgb3V0LnByaW50KCJTdHJpbmdMZW5ndGgiKTsKKyAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICByZXR1cm4gdHJ1ZTsKKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiB9CiAKLX0gLy8gbmFtZXNwYWNlIEpTQworfSAvLyBuYW1lc3BhY2UgV1RGCiAKICNlbmRpZiAv
LyBFTkFCTEUoSklUKQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9s
eW1vcnBoaWNBY2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAkocmV2aXNpb24gMTg5MzI0KQkoZnJvbSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oOjE4OTMyNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0
LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUG9seW1vcnBoaWNHZXRCeUlkTGlz
dF9oCisjZGVmaW5lIFBvbHltb3JwaGljR2V0QnlJZExpc3RfaAorCisjaWYgRU5BQkxFKEpJVCkK
KworI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgor
I2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiCisjaW5jbHVkZSAiT3Bjb2Rl
LmgiCisjaW5jbHVkZSAiU3RydWN0dXJlLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitu
YW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ29kZUJsb2NrOworc3RydWN0IFN0cnVjdHVyZVN0dWJJ
bmZvOworCitjbGFzcyBHZXRCeUlkQWNjZXNzIHsKK3B1YmxpYzoKKyAgICBlbnVtIEFjY2Vzc1R5
cGUgeworICAgICAgICBJbnZhbGlkLAorICAgICAgICBTaW1wbGVJbmxpbmUsIC8vIFRoaXMgaXMg
dGhlIHBhdGNoZWQgaW5saW5lIGFjY2Vzcy4KKyAgICAgICAgU2ltcGxlU3R1YiwgLy8gVGhpcyBp
cyBhIHN0dWIuCisgICAgICAgIFdhdGNoZWRTdHViLAorICAgICAgICBHZXR0ZXIsCisgICAgICAg
IEN1c3RvbUdldHRlciwKKyAgICAgICAgU2ltcGxlTWlzcywKKyAgICB9OworICAgIAorICAgIEdl
dEJ5SWRBY2Nlc3MoKQorICAgICAgICA6IG1fdHlwZShJbnZhbGlkKQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgR2V0QnlJZEFjY2VzcygKKyAgICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nl
c3NUeXBlLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiwgU3RydWN0dXJlKiwKKyAgICAgICAg
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQoKSk7CisgICAgCisgICAgfkdldEJ5SWRBY2Nlc3MoKTsKKyAgICAKKyAgICBzdGF0aWMg
R2V0QnlJZEFjY2VzcyBmcm9tU3RydWN0dXJlU3R1YkluZm8oU3RydWN0dXJlU3R1YkluZm8mKTsK
KyAgICAKKyAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV90eXBlICE9IEludmFsaWQ7
IH0KKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9CisgICAg
CisgICAgQWNjZXNzVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgCisg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZS5nZXQo
KTsgfQorICAgIAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRp
b25TZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQorICAgIAorICAgIEpJVFN0
dWJSb3V0aW5lKiBzdHViUm91dGluZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNT
ZXQoKSk7CisgICAgICAgIHJldHVybiBtX3N0dWJSb3V0aW5lLmdldCgpOworICAgIH0KKyAgICAK
KyAgICBib29sIGRvZXNDYWxscygpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBHZXR0ZXIgfHwg
dHlwZSgpID09IEN1c3RvbUdldHRlcjsgfQorICAgIAorICAgIGJvb2wgdmlzaXRXZWFrKFZNJikg
Y29uc3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKKyAgICAKKyAg
ICBBY2Nlc3NUeXBlIG1fdHlwZTsKKyAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cnVj
dHVyZTsKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKKyAg
ICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IG1fc3R1YlJvdXRpbmU7Cit9OworCitjbGFzcyBQb2x5
bW9ycGhpY0dldEJ5SWRMaXN0IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1Ymxp
YzoKKyAgICAvLyBFaXRoZXIgY3JlYXRlcyBhIG5ldyBwb2x5bW9ycGhpYyBnZXQgbGlzdCwgb3Ig
cmV0dXJucyB0aGUgb25lIHRoYXQgaXMgYWxyZWFkeSBpbgorICAgIC8vIHBsYWNlLgorICAgIHN0
YXRpYyBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBmcm9tKFN0cnVjdHVyZVN0dWJJbmZvJik7Cisg
ICAgCisgICAgflBvbHltb3JwaGljR2V0QnlJZExpc3QoKTsKKyAgICAKKyAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgY3VycmVudFNsb3dQYXRoVGFyZ2V0KFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbykgY29uc3Q7CisgICAgCisgICAgdm9pZCBhZGRBY2Nlc3MoY29uc3QgR2V0QnlJZEFjY2Vz
cyYpOworICAgIAorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5pc0Vt
cHR5KCk7IH0KKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9saXN0LnNpemUo
KTsgfQorICAgIGJvb2wgaXNGdWxsKCkgY29uc3Q7CisgICAgYm9vbCBpc0FsbW9zdEZ1bGwoKSBj
b25zdDsgLy8gVHJ1ZSBpZiBhZGRpbmcgYW4gZWxlbWVudCB3b3VsZCBtYWtlIGlzRnVsbCgpIHRy
dWUuCisgICAgY29uc3QgR2V0QnlJZEFjY2VzcyYgYXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1
cm4gbV9saXN0W2ldOyB9CisgICAgY29uc3QgR2V0QnlJZEFjY2VzcyYgb3BlcmF0b3JbXSh1bnNp
Z25lZCBpKSBjb25zdCB7IHJldHVybiBtX2xpc3RbaV07IH0KKyAgICAKKyAgICBib29sIGRpZFNl
bGZQYXRjaGluZygpIGNvbnN0OyAvLyBBcmUgYW55IG9mIHRoZSBhY2Nlc3NlcyBTaW1wbGVJbmxp
bmU/CisgICAgCisgICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAg
ICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOworICAgIAorICAgIFBvbHltb3JwaGljR2V0QnlJZExp
c3QoU3RydWN0dXJlU3R1YkluZm8mKTsKKyAgICAKKyAgICBWZWN0b3I8R2V0QnlJZEFjY2Vzcywg
Mj4gbV9saXN0OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUo
SklUKQorCisjZW5kaWYgLy8gUG9seW1vcnBoaWNHZXRCeUlkTGlzdF9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCSh3
b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBo
aWNBY2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsOCArMjMsOCBAQAogICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCiAgKi8KIAotI2lmbmRlZiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0X2gKLSNkZWZpbmUgUG9s
eW1vcnBoaWNHZXRCeUlkTGlzdF9oCisjaWZuZGVmIFBvbHltb3JwaGljQWNjZXNzX2gKKyNkZWZp
bmUgUG9seW1vcnBoaWNBY2Nlc3NfaAogCiAjaWYgRU5BQkxFKEpJVCkKIApAQCAtMzgsOTYgKzM4
LDI2OCBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENvZGVCbG9jazsKK2NsYXNzIFBvbHlt
b3JwaGljQWNjZXNzOworY2xhc3MgV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOwogc3Ry
dWN0IFN0cnVjdHVyZVN0dWJJbmZvOwogCi1jbGFzcyBHZXRCeUlkQWNjZXNzIHsKK3N0cnVjdCBB
Y2Nlc3NHZW5lcmF0aW9uU3RhdGU7CisKK2NsYXNzIEFjY2Vzc0Nhc2UgeworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKEFjY2Vzc0Nhc2UpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
cHVibGljOgogICAgIGVudW0gQWNjZXNzVHlwZSB7Ci0gICAgICAgIEludmFsaWQsCi0gICAgICAg
IFNpbXBsZUlubGluZSwgLy8gVGhpcyBpcyB0aGUgcGF0Y2hlZCBpbmxpbmUgYWNjZXNzLgotICAg
ICAgICBTaW1wbGVTdHViLCAvLyBUaGlzIGlzIGEgc3R1Yi4KLSAgICAgICAgV2F0Y2hlZFN0dWIs
CisgICAgICAgIExvYWQsCisgICAgICAgIFRyYW5zaXRpb24sCisgICAgICAgIFJlcGxhY2UsCisg
ICAgICAgIE1pc3MsCiAgICAgICAgIEdldHRlciwKKyAgICAgICAgU2V0dGVyLAogICAgICAgICBD
dXN0b21HZXR0ZXIsCi0gICAgICAgIFNpbXBsZU1pc3MsCisgICAgICAgIEN1c3RvbVNldHRlciwK
KyAgICAgICAgSW5IaXQsCisgICAgICAgIEluTWlzcywKKyAgICAgICAgQXJyYXlMZW5ndGgsCisg
ICAgICAgIFN0cmluZ0xlbmd0aAogICAgIH07Ci0gICAgCi0gICAgR2V0QnlJZEFjY2VzcygpCi0g
ICAgICAgIDogbV90eXBlKEludmFsaWQpCisKKyAgICBzdGF0aWMgYm9vbCBpc0dldChBY2Nlc3NU
eXBlIHR5cGUpCiAgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBU
cmFuc2l0aW9uOgorICAgICAgICBjYXNlIFJlcGxhY2U6CisgICAgICAgIGNhc2UgU2V0dGVyOgor
ICAgICAgICBjYXNlIEN1c3RvbVNldHRlcjoKKyAgICAgICAgY2FzZSBJbkhpdDoKKyAgICAgICAg
Y2FzZSBJbk1pc3M6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgTG9h
ZDoKKyAgICAgICAgY2FzZSBNaXNzOgorICAgICAgICBjYXNlIEdldHRlcjoKKyAgICAgICAgY2Fz
ZSBDdXN0b21HZXR0ZXI6CisgICAgICAgIGNhc2UgQXJyYXlMZW5ndGg6CisgICAgICAgIGNhc2Ug
U3RyaW5nTGVuZ3RoOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KICAgICB9
Ci0gICAgCi0gICAgR2V0QnlJZEFjY2VzcygKLSAgICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBB
Y2Nlc3NUeXBlLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiwgU3RydWN0dXJlKiwKKworICAg
IHN0YXRpYyBib29sIGlzUHV0KEFjY2Vzc1R5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRj
aCAodHlwZSkgeworICAgICAgICBjYXNlIExvYWQ6CisgICAgICAgIGNhc2UgTWlzczoKKyAgICAg
ICAgY2FzZSBHZXR0ZXI6CisgICAgICAgIGNhc2UgQ3VzdG9tR2V0dGVyOgorICAgICAgICBjYXNl
IEluSGl0OgorICAgICAgICBjYXNlIEluTWlzczoKKyAgICAgICAgY2FzZSBBcnJheUxlbmd0aDoK
KyAgICAgICAgY2FzZSBTdHJpbmdMZW5ndGg6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIGNhc2UgVHJhbnNpdGlvbjoKKyAgICAgICAgY2FzZSBSZXBsYWNlOgorICAgICAgICBj
YXNlIFNldHRlcjoKKyAgICAgICAgY2FzZSBDdXN0b21TZXR0ZXI6CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzSW4oQWNjZXNz
VHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2Ug
TG9hZDoKKyAgICAgICAgY2FzZSBNaXNzOgorICAgICAgICBjYXNlIEdldHRlcjoKKyAgICAgICAg
Y2FzZSBDdXN0b21HZXR0ZXI6CisgICAgICAgIGNhc2UgVHJhbnNpdGlvbjoKKyAgICAgICAgY2Fz
ZSBSZXBsYWNlOgorICAgICAgICBjYXNlIFNldHRlcjoKKyAgICAgICAgY2FzZSBDdXN0b21TZXR0
ZXI6CisgICAgICAgIGNhc2UgQXJyYXlMZW5ndGg6CisgICAgICAgIGNhc2UgU3RyaW5nTGVuZ3Ro
OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIEluSGl0OgorICAgICAg
ICBjYXNlIEluTWlzczoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAg
fQorCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBnZXQoCisgICAgICAg
IFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgUHJvcGVydHlPZmZzZXQsIFN0cnVjdHVy
ZSosCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiA9IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0KCksCisgICAgICAgIGJvb2wgdmlhUHJveHkgPSBmYWxzZSwKKyAg
ICAgICAgV2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCA9IG51bGxwdHIsCisgICAgICAgIFBy
b3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jID0gbnVsbHB0cik7CisKKyAgICBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHJlcGxhY2UoCisgICAgICAgIFZNJiwgSlNDZWxsKiBvd25l
ciwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCk7CisKKyAgICBz
dGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHRyYW5zaXRpb24oCisgICAgICAgIFZN
JiwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3
U3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCiAgICAgICAgIGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCkpOworCisg
ICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBzZXR0ZXIoCisgICAgICAgIFZN
JiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQs
CisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgUHV0UHJvcGVydHlT
bG90OjpQdXRWYWx1ZUZ1bmMpOworCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3ND
YXNlPiBpbigKKyAgICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQm
ID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSk7CisKKyAgICBzdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPEFjY2Vzc0Nhc2U+IGdldExlbmd0aChWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5
cGUpOwogICAgIAotICAgIH5HZXRCeUlkQWNjZXNzKCk7Ci0gICAgCi0gICAgc3RhdGljIEdldEJ5
SWRBY2Nlc3MgZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBmcm9tU3RydWN0dXJlU3R1YkluZm8o
Vk0mLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOworCisgICAgfkFjY2Vzc0Nh
c2UoKTsKICAgICAKLSAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV90eXBlICE9IElu
dmFsaWQ7IH0KLSAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9
CisgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGNsb25lKCkgY29uc3Q7CiAgICAgCiAg
ICAgQWNjZXNzVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKyAgICBib29sIHZp
YVByb3h5KCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPnZpYVByb3h5
IDogZmFsc2U7IH0KICAgICAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RydWN0dXJlLmdldCgpOyB9Ci0gICAgCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0
OyB9Ci0gICAgCi0gICAgSklUU3R1YlJvdXRpbmUqIHN0dWJSb3V0aW5lKCkgY29uc3QKKyAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV90eXBlID09
IFRyYW5zaXRpb24pCisgICAgICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUtPnByZXZpb3VzSUQo
KTsKKyAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlLmdldCgpOworICAgIH0KKyAgICBib29sIGd1
YXJkZWRCeVN0cnVjdHVyZUNoZWNrKCkgY29uc3Q7CisKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVj
dHVyZSgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQoaXNTZXQoKSk7Ci0gICAgICAgIHJl
dHVybiBtX3N0dWJSb3V0aW5lLmdldCgpOworICAgICAgICBBU1NFUlQobV90eXBlID09IFRyYW5z
aXRpb24pOworICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7CiAgICAgfQogICAgIAot
ICAgIGJvb2wgZG9lc0NhbGxzKCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09IEdldHRlciB8fCB0
eXBlKCkgPT0gQ3VzdG9tR2V0dGVyOyB9CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQg
Y29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0KKworICAgIFdh
dGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5hZGRpdGlvbmFsU2V0LmdldCgpIDogbnVsbHB0cjsK
KyAgICB9CiAgICAgCi0gICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25zdDsKKyAgICBib29sIGRv
ZXNDYWxscygpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUoKSkgeworICAgICAg
ICBjYXNlIEdldHRlcjoKKyAgICAgICAgY2FzZSBTZXR0ZXI6CisgICAgICAgIGNhc2UgQ3VzdG9t
R2V0dGVyOgorICAgICAgICBjYXNlIEN1c3RvbVNldHRlcjoKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgfQogCisgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8oKSBjb25zdAorICAg
IHsKKyAgICAgICAgaWYgKCFtX3JhcmVEYXRhKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgIHJldHVybiBtX3JhcmVEYXRhLT5jYWxsTGlua0luZm8uZ2V0KCk7CisgICAgfQor
CisgICAgLy8gSWYgdGhpcyBtZXRob2QgcmV0dXJucyB0cnVlLCB0aGVuIGl0J3MgYSBnb29kIGlk
ZWEgdG8gcmVtb3ZlICdvdGhlcicgZnJvbSB0aGUgYWNjZXNzIG9uY2UgJ3RoaXMnCisgICAgLy8g
aXMgYWRkZWQuIFRoaXMgbWV0aG9kIGFzc3VtZXMgdGhhdCBpbiBjYXNlIG9mIGNvbnRyYWRpY3Rp
b25zLCAndGhpcycgcmVwcmVzZW50cyBhIG5ld2VyLCBhbmQgc28KKyAgICAvLyBtb3JlIHVzZWZ1
bCwgdHJ1dGguIFRoaXMgbWV0aG9kIGNhbiBiZSBjb25zZXJ2YXRpdmU7IGl0IHdpbGwgcmV0dXJu
IGZhbHNlIHdoZW4gaXQgZG91YnQuCisgICAgYm9vbCBjYW5SZXBsYWNlKGNvbnN0IEFjY2Vzc0Nh
c2UmIG90aGVyKTsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKyAg
ICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKKyAgICBmcmllbmQgY2xh
c3MgUG9seW1vcnBoaWNBY2Nlc3M7CisKKyAgICBBY2Nlc3NDYXNlKCk7CisKKyAgICBib29sIHZp
c2l0V2VhayhWTSYpIGNvbnN0OworCisgICAgLy8gRmFsbCB0aHJvdWdoIG9uIHN1Y2Nlc3MuIFR3
byBraW5kcyBvZiBmYWlsdXJlcyBhcmUgc3VwcG9ydGVkOiBmYWxsLXRocm91Z2gsIHdoaWNoIG1l
YW5zIHRoYXQgd2UKKyAgICAvLyBzaG91bGQgdHJ5IGEgZGlmZmVyZW50IGNhc2U7IGFuZCBmYWls
dXJlLCB3aGljaCBtZWFucyB0aGF0IHRoaXMgd2FzIHRoZSByaWdodCBjYXNlIGJ1dCBpdCBuZWVk
cworICAgIC8vIGhlbHAgZnJvbSB0aGUgc2xvdyBwYXRoLgorICAgIHZvaWQgZ2VuZXJhdGVXaXRo
R3VhcmQoQWNjZXNzR2VuZXJhdGlvblN0YXRlJiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBm
YWxsVGhyb3VnaCk7CisKKyAgICAvLyBGYWxsIHRocm91Z2ggb24gc3VjY2VzcywgYWRkIGEganVt
cCB0byB0aGUgZmFpbHVyZSBsaXN0IG9uIGZhaWx1cmUuCisgICAgdm9pZCBnZW5lcmF0ZShBY2Nl
c3NHZW5lcmF0aW9uU3RhdGUmKTsKICAgICAKICAgICBBY2Nlc3NUeXBlIG1fdHlwZTsKKyAgICBQ
cm9wZXJ0eU9mZnNldCBtX29mZnNldDsKKworICAgIC8vIFVzdWFsbHkgdGhpcyBpcyB0aGUgc3Ry
dWN0dXJlIHRoYXQgd2UgZXhwZWN0IHRoZSBiYXNlIG9iamVjdCB0byBoYXZlLiBCdXQsIHRoaXMg
aXMgdGhlICpuZXcqCisgICAgLy8gc3RydWN0dXJlIGZvciBhIHRyYW5zaXRpb24gYW5kIHdlIHJl
bHkgb24gdGhlIGZhY3QgdGhhdCBpdCBoYXMgYSBzdHJvbmcgcmVmZXJlbmNlIHRvIHRoZSBvbGQK
KyAgICAvLyBzdHJ1Y3R1cmUuIEZvciBwcm94aWVzLCB0aGlzIGlzIHRoZSBzdHJ1Y3R1cmUgb2Yg
dGhlIG9iamVjdCBiZWhpbmQgdGhlIHByb3h5LgogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+
IG1fc3RydWN0dXJlOworCiAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRp
b25TZXQ7Ci0gICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBtX3N0dWJSb3V0aW5lOworCisgICAg
Y2xhc3MgUmFyZURhdGEgeworICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBw
dWJsaWM6CisgICAgICAgIGJvb2wgdmlhUHJveHk7CisgICAgICAgIFJlZlB0cjxXYXRjaHBvaW50
U2V0PiBhZGRpdGlvbmFsU2V0OworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtJbmZv
PiBjYWxsTGlua0luZm87CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIFByb3BlcnR5U2xv
dDo6R2V0VmFsdWVGdW5jIGdldHRlcjsKKyAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdDo6UHV0
VmFsdWVGdW5jIHNldHRlcjsKKyAgICAgICAgICAgIHZvaWQqIG9wYXF1ZTsKKyAgICAgICAgfSBj
dXN0b21BY2Nlc3NvcjsKKyAgICB9OworCisgICAgc3RkOjp1bmlxdWVfcHRyPFJhcmVEYXRhPiBt
X3JhcmVEYXRhOwogfTsKIAotY2xhc3MgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCB7CitjbGFzcyBQ
b2x5bW9ycGhpY0FjY2VzcyB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUG9seW1vcnBoaWNB
Y2Nlc3MpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIC8vIEVp
dGhlciBjcmVhdGVzIGEgbmV3IHBvbHltb3JwaGljIGdldCBsaXN0LCBvciByZXR1cm5zIHRoZSBv
bmUgdGhhdCBpcyBhbHJlYWR5IGluCi0gICAgLy8gcGxhY2UuCi0gICAgc3RhdGljIFBvbHltb3Jw
aGljR2V0QnlJZExpc3QqIGZyb20oU3RydWN0dXJlU3R1YkluZm8mKTsKLSAgICAKLSAgICB+UG9s
eW1vcnBoaWNHZXRCeUlkTGlzdCgpOwotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBj
dXJyZW50U2xvd1BhdGhUYXJnZXQoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKSBjb25zdDsK
LSAgICAKLSAgICB2b2lkIGFkZEFjY2Vzcyhjb25zdCBHZXRCeUlkQWNjZXNzJik7CisgICAgUG9s
eW1vcnBoaWNBY2Nlc3MoKTsKKyAgICB+UG9seW1vcnBoaWNBY2Nlc3MoKTsKKworICAgIC8vIFRo
aXMgbWF5IHJldHVybiBudWxsLCBpbiB3aGljaCBjYXNlIHRoZSBvbGQgc3R1YiByb3V0aW5lIGlz
IGxlZnQgaW50YWN0LiBUaGlzIG1ldGhvZCB3aWxsIGRvIHlvdQorICAgIC8vIGEgc29saWQgYW5k
IG51bGwtY2hlY2sgdGhlIEFjY2Vzc0Nhc2UsIHNvIHRoYXQgeW91IGNhbiBkbyB0aGluZ3MgbGlr
ZToKKyAgICAvLworICAgIC8vIGNvZGVQdHIgPSBhY2Nlc3MtPnJlZ2VuZXJhdGVXaXRoQ2FzZSgu
Li4sIEFjY2Vzc0Nhc2U6OmdldCguLi4pKQorICAgIC8vCisgICAgLy8gSWYgQWNjZXNzQ2FzZTo6
Z2V0KCkgcmV0dXJucyBudWxscHRyLCB0aGUgYWJvdmUgY2FsbCB3aWxsIHNpbXBseSByZXR1cm4g
bnVsbC4KKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVnZW5lcmF0ZVdpdGhDYXNlcygKKyAg
ICAgICAgVk0mLCBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIGNvbnN0IElkZW50aWZp
ZXImLCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+Pik7CisKKyAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIgcmVnZW5lcmF0ZVdpdGhDYXNlKAorICAgICAgICBWTSYsIENvZGVCbG9j
ayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgY29uc3QgSWRlbnRpZmllciYsIHN0ZDo6dW5pcXVlX3B0
cjxBY2Nlc3NDYXNlPik7CiAgICAgCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4g
bV9saXN0LmlzRW1wdHkoKTsgfQogICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBt
X2xpc3Quc2l6ZSgpOyB9Ci0gICAgYm9vbCBpc0Z1bGwoKSBjb25zdDsKLSAgICBib29sIGlzQWxt
b3N0RnVsbCgpIGNvbnN0OyAvLyBUcnVlIGlmIGFkZGluZyBhbiBlbGVtZW50IHdvdWxkIG1ha2Ug
aXNGdWxsKCkgdHJ1ZS4KLSAgICBjb25zdCBHZXRCeUlkQWNjZXNzJiBhdCh1bnNpZ25lZCBpKSBj
b25zdCB7IHJldHVybiBtX2xpc3RbaV07IH0KLSAgICBjb25zdCBHZXRCeUlkQWNjZXNzJiBvcGVy
YXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdFtpXTsgfQotICAgIAotICAg
IGJvb2wgZGlkU2VsZlBhdGNoaW5nKCkgY29uc3Q7IC8vIEFyZSBhbnkgb2YgdGhlIGFjY2Vzc2Vz
IFNpbXBsZUlubGluZT8KLSAgICAKKyAgICBjb25zdCBBY2Nlc3NDYXNlJiBhdCh1bnNpZ25lZCBp
KSBjb25zdCB7IHJldHVybiAqbV9saXN0W2ldOyB9CisgICAgY29uc3QgQWNjZXNzQ2FzZSYgb3Bl
cmF0b3JbXSh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiAqbV9saXN0W2ldOyB9CisKKyAgICAv
LyBJZiB0aGlzIHJldHVybnMgZmFsc2UgdGhlbiB3ZSBhcmUgcmVxdWVzdGluZyBhIHJlc2V0IG9m
IHRoZSBvd25pbmcgU3RydWN0dXJlU3R1YkluZm8uCiAgICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBj
b25zdDsKIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKwogcHJpdmF0
ZToKKyAgICBmcmllbmQgY2xhc3MgQWNjZXNzQ2FzZTsKICAgICBmcmllbmQgY2xhc3MgQ29kZUJs
b2NrOworICAgIGZyaWVuZCBzdHJ1Y3QgQWNjZXNzR2VuZXJhdGlvblN0YXRlOwogICAgIAotICAg
IFBvbHltb3JwaGljR2V0QnlJZExpc3QoU3RydWN0dXJlU3R1YkluZm8mKTsKLSAgICAKLSAgICBW
ZWN0b3I8R2V0QnlJZEFjY2VzcywgMj4gbV9saXN0OworICAgIHR5cGVkZWYgVmVjdG9yPHN0ZDo6
dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiwgMj4gTGlzdFR5cGU7CisKKyAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgcmVnZW5lcmF0ZSgKKyAgICAgICAgVk0mLCBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVT
dHViSW5mbyYsIGNvbnN0IElkZW50aWZpZXImLCBMaXN0VHlwZSYgY2FzZXMpOworCisgICAgTGlz
dFR5cGUgbV9saXN0OworICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gbV9zdHViUm91dGluZTsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvPiBtX3dh
dGNocG9pbnRzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKK25hbWVzcGFjZSBXVEYgewor
Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkFjY2Vzc0Nhc2U6OkFjY2Vz
c1R5cGUpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAK
LSNlbmRpZiAvLyBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0X2gKKyNlbmRpZiAvLyBQb2x5bW9ycGhp
Y0FjY2Vzc19oCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9y
cGhpY0dldEJ5SWRMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAJKHJldmlzaW9uIDE4OTQ5MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSwxNTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oIgotCi0jaWYgRU5BQkxFKEpJVCkKLQotI2lu
Y2x1ZGUgIkNvZGVCbG9jay5oIgotI2luY2x1ZGUgIkhlYXAuaCIKLSNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKLQotbmFtZXNwYWNlIEpTQyB7
Ci0KLUdldEJ5SWRBY2Nlc3M6OkdldEJ5SWRBY2Nlc3MoCi0gICAgVk0mIHZtLCBKU0NlbGwqIG93
bmVyLCBBY2Nlc3NUeXBlIHR5cGUsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0
aW5lLAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCYgY29uZGl0aW9uU2V0KQotICAgIDogbV90eXBlKHR5cGUpCi0gICAgLCBtX3N0cnVj
dHVyZSh2bSwgb3duZXIsIHN0cnVjdHVyZSkKLSAgICAsIG1fY29uZGl0aW9uU2V0KGNvbmRpdGlv
blNldCkKLSAgICAsIG1fc3R1YlJvdXRpbmUoc3R1YlJvdXRpbmUpCi17Ci19Ci0KLUdldEJ5SWRB
Y2Nlc3M6On5HZXRCeUlkQWNjZXNzKCkKLXsKLX0KLQotR2V0QnlJZEFjY2VzcyBHZXRCeUlkQWNj
ZXNzOjpmcm9tU3RydWN0dXJlU3R1YkluZm8oU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQot
ewotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBpbml0aWFsU2xvd1BhdGggPQotICAgICAgICBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5k
ZWx0YUNhbGxUb1Nsb3dDYXNlKTsKLSAgICAKLSAgICBHZXRCeUlkQWNjZXNzIHJlc3VsdDsKLSAg
ICAKLSAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRf
YnlfaWRfc2VsZik7Ci0gICAgCi0gICAgcmVzdWx0Lm1fdHlwZSA9IFNpbXBsZUlubGluZTsKLSAg
ICByZXN1bHQubV9zdHJ1Y3R1cmUuY29weUZyb20oc3R1YkluZm8udS5nZXRCeUlkU2VsZi5iYXNl
T2JqZWN0U3RydWN0dXJlKTsKLSAgICByZXN1bHQubV9zdHViUm91dGluZSA9IEpJVFN0dWJSb3V0
aW5lOjpjcmVhdGVTZWxmTWFuYWdlZFJvdXRpbmUoaW5pdGlhbFNsb3dQYXRoKTsKLSAgICAKLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotCi1ib29sIEdldEJ5SWRBY2Nlc3M6OnZpc2l0V2VhayhWTSYg
dm0pIGNvbnN0Ci17Ci0gICAgaWYgKG1fc3RydWN0dXJlICYmICFIZWFwOjppc01hcmtlZChtX3N0
cnVjdHVyZS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIW1fY29uZGl0
aW9uU2V0LmFyZVN0aWxsTGl2ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFt
X3N0dWJSb3V0aW5lLT52aXNpdFdlYWsodm0pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLVBvbHltb3JwaGljR2V0QnlJZExpc3Q6OlBvbHltb3JwaGljR2V0
QnlJZExpc3QoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIGlmIChzdHViSW5m
by5hY2Nlc3NUeXBlID09IGFjY2Vzc191bnNldCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAg
IG1fbGlzdC5hcHBlbmQoR2V0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKHN0dWJJ
bmZvKSk7Ci19Ci0KLVBvbHltb3JwaGljR2V0QnlJZExpc3QqIFBvbHltb3JwaGljR2V0QnlJZExp
c3Q6OmZyb20oU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIGlmIChzdHViSW5m
by5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfbGlzdCkKLSAgICAgICAgcmV0dXJuIHN0
dWJJbmZvLnUuZ2V0QnlJZExpc3QubGlzdDsKLSAgICAKLSAgICBBU1NFUlQoCi0gICAgICAgIHN0
dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmCi0gICAgICAgIHx8IHN0
dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0KTsKLSAgICAKLSAgICBQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0KiByZXN1bHQgPSBuZXcgUG9seW1vcnBoaWNHZXRCeUlkTGlzdChzdHViSW5m
byk7Ci0gICAgCi0gICAgc3R1YkluZm8uaW5pdEdldEJ5SWRMaXN0KHJlc3VsdCk7Ci0gICAgCi0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6flBvbHltb3Jw
aGljR2V0QnlJZExpc3QoKSB7IH0KLQotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIFBvbHltb3JwaGlj
R2V0QnlJZExpc3Q6OmN1cnJlbnRTbG93UGF0aFRhcmdldCgKLSAgICBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8pIGNvbnN0Ci17Ci0gICAgaWYgKGlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNo
LmRlbHRhQ2FsbFRvU2xvd0Nhc2UpOwotICAgIHJldHVybiBtX2xpc3QubGFzdCgpLnN0dWJSb3V0
aW5lKCktPmNvZGUoKS5jb2RlKCk7Ci19Ci0KLXZvaWQgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6
YWRkQWNjZXNzKGNvbnN0IEdldEJ5SWRBY2Nlc3MmIGFjY2VzcykKLXsKLSAgICBBU1NFUlQoIWlz
RnVsbCgpKTsKLSAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgcmVzaXppbmcgb3B0aW1pemVzIGZv
ciBzcGFjZSwgbm90IHRpbWUuCi0gICAgbV9saXN0LnJlc2l6ZVRvRml0KG1fbGlzdC5zaXplKCkg
KyAxKTsKLSAgICBtX2xpc3QubGFzdCgpID0gYWNjZXNzOwotfQotCi1ib29sIFBvbHltb3JwaGlj
R2V0QnlJZExpc3Q6OmlzRnVsbCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHNpemUoKSA8PSBQT0xZ
TU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpOwotICAgIHJldHVybiBzaXplKCkgPT0gUE9MWU1PUlBI
SUNfTElTVF9DQUNIRV9TSVpFOwotfQotCi1ib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6Omlz
QWxtb3N0RnVsbCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHNpemUoKSA8PSBQT0xZTU9SUEhJQ19M
SVNUX0NBQ0hFX1NJWkUpOwotICAgIHJldHVybiBzaXplKCkgPj0gUE9MWU1PUlBISUNfTElTVF9D
QUNIRV9TSVpFIC0gMTsKLX0KLQotYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpkaWRTZWxm
UGF0Y2hpbmcoKSBjb25zdAotewotICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUoKTsgaS0tOykg
ewotICAgICAgICBpZiAoYXQoaSkudHlwZSgpID09IEdldEJ5SWRBY2Nlc3M6OlNpbXBsZUlubGlu
ZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLWJvb2wgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6dmlzaXRXZWFrKFZNJiB2bSkgY29uc3QK
LXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXplKCk7IGktLTspIHsKLSAgICAgICAgaWYgKCFh
dChpKS52aXNpdFdlYWsodm0pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFC
TEUoSklUKQotCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9y
cGhpY0dldEJ5SWRMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuaAkocmV2aXNpb24gMTg5NDkzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMSwxMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFBvbHltb3JwaGljR2V0QnlJZExpc3Rf
aAotI2RlZmluZSBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0X2gKLQotI2lmIEVOQUJMRShKSVQpCi0K
LSNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCi0jaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKLSNp
bmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgotI2luY2x1ZGUgIk9wY29kZS5o
IgotI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFt
ZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENvZGVCbG9jazsKLXN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5m
bzsKLQotY2xhc3MgR2V0QnlJZEFjY2VzcyB7Ci1wdWJsaWM6Ci0gICAgZW51bSBBY2Nlc3NUeXBl
IHsKLSAgICAgICAgSW52YWxpZCwKLSAgICAgICAgU2ltcGxlSW5saW5lLCAvLyBUaGlzIGlzIHRo
ZSBwYXRjaGVkIGlubGluZSBhY2Nlc3MuCi0gICAgICAgIFNpbXBsZVN0dWIsIC8vIFRoaXMgaXMg
YSBzdHViLgotICAgICAgICBXYXRjaGVkU3R1YiwKLSAgICAgICAgR2V0dGVyLAotICAgICAgICBD
dXN0b21HZXR0ZXIsCi0gICAgICAgIFNpbXBsZU1pc3MsCi0gICAgfTsKLSAgICAKLSAgICBHZXRC
eUlkQWNjZXNzKCkKLSAgICAgICAgOiBtX3R5cGUoSW52YWxpZCkKLSAgICB7Ci0gICAgfQotICAg
IAotICAgIEdldEJ5SWRBY2Nlc3MoCi0gICAgICAgIFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNz
VHlwZSwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4sIFN0cnVjdHVyZSosCi0gICAgICAgIGNv
bnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0KCkpOwotICAgIAotICAgIH5HZXRCeUlkQWNjZXNzKCk7Ci0gICAgCi0gICAgc3RhdGljIEdl
dEJ5SWRBY2Nlc3MgZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFN0cnVjdHVyZVN0dWJJbmZvJik7Ci0g
ICAgCi0gICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSAhPSBJbnZhbGlkOyB9
Ci0gICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQotICAgIAot
ICAgIEFjY2Vzc1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQotICAgIAotICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7
IH0KLSAgICAKLSAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9u
U2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0KLSAgICAKLSAgICBKSVRTdHVi
Um91dGluZSogc3R1YlJvdXRpbmUoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzU2V0
KCkpOwotICAgICAgICByZXR1cm4gbV9zdHViUm91dGluZS5nZXQoKTsKLSAgICB9Ci0gICAgCi0g
ICAgYm9vbCBkb2VzQ2FsbHMoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gR2V0dGVyIHx8IHR5
cGUoKSA9PSBDdXN0b21HZXR0ZXI7IH0KLSAgICAKLSAgICBib29sIHZpc2l0V2VhayhWTSYpIGNv
bnN0OwotCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7Ci0gICAgCi0gICAg
QWNjZXNzVHlwZSBtX3R5cGU7Ci0gICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJ1Y3R1
cmU7Ci0gICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7Ci0gICAg
UmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBtX3N0dWJSb3V0aW5lOwotfTsKLQotY2xhc3MgUG9seW1v
cnBoaWNHZXRCeUlkTGlzdCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6
Ci0gICAgLy8gRWl0aGVyIGNyZWF0ZXMgYSBuZXcgcG9seW1vcnBoaWMgZ2V0IGxpc3QsIG9yIHJl
dHVybnMgdGhlIG9uZSB0aGF0IGlzIGFscmVhZHkgaW4KLSAgICAvLyBwbGFjZS4KLSAgICBzdGF0
aWMgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogZnJvbShTdHJ1Y3R1cmVTdHViSW5mbyYpOwotICAg
IAotICAgIH5Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0KCk7Ci0gICAgCi0gICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIGN1cnJlbnRTbG93UGF0aFRhcmdldChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8pIGNvbnN0OwotICAgIAotICAgIHZvaWQgYWRkQWNjZXNzKGNvbnN0IEdldEJ5SWRBY2Nlc3Mm
KTsKLSAgICAKLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2xpc3QuaXNFbXB0
eSgpOyB9Ci0gICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5zaXplKCk7
IH0KLSAgICBib29sIGlzRnVsbCgpIGNvbnN0OwotICAgIGJvb2wgaXNBbG1vc3RGdWxsKCkgY29u
c3Q7IC8vIFRydWUgaWYgYWRkaW5nIGFuIGVsZW1lbnQgd291bGQgbWFrZSBpc0Z1bGwoKSB0cnVl
LgotICAgIGNvbnN0IEdldEJ5SWRBY2Nlc3MmIGF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJu
IG1fbGlzdFtpXTsgfQotICAgIGNvbnN0IEdldEJ5SWRBY2Nlc3MmIG9wZXJhdG9yW10odW5zaWdu
ZWQgaSkgY29uc3QgeyByZXR1cm4gbV9saXN0W2ldOyB9Ci0gICAgCi0gICAgYm9vbCBkaWRTZWxm
UGF0Y2hpbmcoKSBjb25zdDsgLy8gQXJlIGFueSBvZiB0aGUgYWNjZXNzZXMgU2ltcGxlSW5saW5l
PwotICAgIAotICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAg
ZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKLSAgICAKLSAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0
KFN0cnVjdHVyZVN0dWJJbmZvJik7Ci0gICAgCi0gICAgVmVjdG9yPEdldEJ5SWRBY2Nlc3MsIDI+
IG1fbGlzdDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gRU5BQkxFKEpJ
VCkKLQotI2VuZGlmIC8vIFBvbHltb3JwaGljR2V0QnlJZExpc3RfaAotCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJ
ZExpc3QuY3BwCShyZXZpc2lvbiAxODk0OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTU2
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBvbHltb3JwaGljUHV0
QnlJZExpc3QuaCIKLQotI2lmIEVOQUJMRShKSVQpCi0KLSNpbmNsdWRlICJTdHJ1Y3R1cmVTdHVi
SW5mby5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotUHV0QnlJZEFjY2VzcyBQdXRCeUlkQWNjZXNz
Ojpmcm9tU3RydWN0dXJlU3R1YkluZm8oU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewot
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBpbml0aWFsU2xvd1BhdGggPQotICAgICAgICBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0
YUNhbGxUb1Nsb3dDYXNlKTsKLSAgICAKLSAgICBQdXRCeUlkQWNjZXNzIHJlc3VsdDsKLSAgICAK
LSAgICBzd2l0Y2ggKHN0dWJJbmZvLmFjY2Vzc1R5cGUpIHsKLSAgICBjYXNlIGFjY2Vzc19wdXRf
YnlfaWRfcmVwbGFjZToKLSAgICAgICAgcmVzdWx0Lm1fdHlwZSA9IFJlcGxhY2U7Ci0gICAgICAg
IHJlc3VsdC5tX29sZFN0cnVjdHVyZS5jb3B5RnJvbShzdHViSW5mby51LnB1dEJ5SWRSZXBsYWNl
LmJhc2VPYmplY3RTdHJ1Y3R1cmUpOwotICAgICAgICByZXN1bHQubV9zdHViUm91dGluZSA9IEpJ
VFN0dWJSb3V0aW5lOjpjcmVhdGVTZWxmTWFuYWdlZFJvdXRpbmUoaW5pdGlhbFNsb3dQYXRoKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFu
c2l0aW9uX2RpcmVjdDoKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3Jt
YWw6Ci0gICAgICAgIHJlc3VsdC5tX3R5cGUgPSBUcmFuc2l0aW9uOwotICAgICAgICByZXN1bHQu
bV9vbGRTdHJ1Y3R1cmUuY29weUZyb20oc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2
aW91c1N0cnVjdHVyZSk7Ci0gICAgICAgIHJlc3VsdC5tX25ld1N0cnVjdHVyZS5jb3B5RnJvbShz
dHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZSk7Ci0gICAgICAgIHJlc3VsdC5t
X2NvbmRpdGlvblNldCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjphZG9wdFJhd1BvaW50
ZXIoCi0gICAgICAgICAgICBzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0NvbmRpdGlv
blNldCk7Ci0gICAgICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gc3R1YkluZm8uc3R1YlJvdXRp
bmU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAKLSAgICBkZWZhdWx0OgotICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi1ib29sIFB1dEJ5SWRBY2Nlc3M6OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0Ci17Ci0g
ICAgaWYgKCFtX2NvbmRpdGlvblNldC5hcmVTdGlsbExpdmUoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIAotICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgY2FzZSBSZXBsYWNlOgotICAg
ICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fb2xkU3RydWN0dXJlLmdldCgpKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBUcmFuc2l0aW9uOgot
ICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fb2xkU3RydWN0dXJlLmdldCgpKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX25ld1N0
cnVjdHVyZS5nZXQoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgU2V0dGVyOgotICAgIGNhc2UgQ3VzdG9tU2V0dGVyOgotICAgICAgICBpZiAo
IUhlYXA6OmlzTWFya2VkKG1fb2xkU3RydWN0dXJlLmdldCgpKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBp
ZiAoIW1fc3R1YlJvdXRpbmUtPnZpc2l0V2Vhayh2bSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6UG9seW1vcnBo
aWNQdXRCeUlkTGlzdCgKLSAgICBQdXRLaW5kIHB1dEtpbmQsIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbykKLSAgICA6IG1fa2luZChwdXRLaW5kKQotewotICAgIGlmIChzdHViSW5mby5hY2Nl
c3NUeXBlICE9IGFjY2Vzc191bnNldCkKLSAgICAgICAgbV9saXN0LmFwcGVuZChQdXRCeUlkQWNj
ZXNzOjpmcm9tU3RydWN0dXJlU3R1YkluZm8oc3R1YkluZm8pKTsKLX0KLQotUG9seW1vcnBoaWNQ
dXRCeUlkTGlzdCogUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6ZnJvbSgKLSAgICBQdXRLaW5kIHB1
dEtpbmQsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBpZiAoc3R1YkluZm8u
YWNjZXNzVHlwZSA9PSBhY2Nlc3NfcHV0X2J5X2lkX2xpc3QpCi0gICAgICAgIHJldHVybiBzdHVi
SW5mby51LnB1dEJ5SWRMaXN0Lmxpc3Q7Ci0gICAgCi0gICAgQVNTRVJUKHN0dWJJbmZvLmFjY2Vz
c1R5cGUgPT0gYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlCi0gICAgICAgIHx8IHN0dWJJbmZvLmFj
Y2Vzc1R5cGUgPT0gYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbAotICAgICAgICB8
fCBzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJl
Y3QKLSAgICAgICAgfHwgc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpOwotICAg
IAotICAgIFBvbHltb3JwaGljUHV0QnlJZExpc3QqIHJlc3VsdCA9Ci0gICAgICAgIG5ldyBQb2x5
bW9ycGhpY1B1dEJ5SWRMaXN0KHB1dEtpbmQsIHN0dWJJbmZvKTsKLSAgICAKLSAgICBzdHViSW5m
by5pbml0UHV0QnlJZExpc3QocmVzdWx0KTsKLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci1Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojp+UG9seW1vcnBoaWNQdXRCeUlkTGlzdCgpIHsgfQot
Ci1ib29sIFBvbHltb3JwaGljUHV0QnlJZExpc3Q6OmlzRnVsbCgpIGNvbnN0Ci17Ci0gICAgQVNT
RVJUKHNpemUoKSA8PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpOwotICAgIHJldHVybiBz
aXplKCkgPT0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFOwotfQotCi1ib29sIFBvbHltb3Jw
aGljUHV0QnlJZExpc3Q6OmlzQWxtb3N0RnVsbCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHNpemUo
KSA8PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpOwotICAgIHJldHVybiBzaXplKCkgPj0g
UE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIC0gMTsKLX0KLQotdm9pZCBQb2x5bW9ycGhpY1B1
dEJ5SWRMaXN0OjphZGRBY2Nlc3MoY29uc3QgUHV0QnlJZEFjY2VzcyYgcHV0QnlJZEFjY2VzcykK
LXsKLSAgICBBU1NFUlQoIWlzRnVsbCgpKTsKLSAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgcmVz
aXppbmcgb3B0aW1pemVzIGZvciBzcGFjZSwgbm90IHRpbWUuCi0gICAgbV9saXN0LnJlc2l6ZVRv
Rml0KG1fbGlzdC5zaXplKCkgKyAxKTsKLSAgICBtX2xpc3QubGFzdCgpID0gcHV0QnlJZEFjY2Vz
czsKLX0KLQotYm9vbCBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojp2aXNpdFdlYWsoVk0mIHZtKSBj
b25zdAotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkgewotICAg
ICAgICBpZiAoIWF0KGkpLnZpc2l0V2Vhayh2bSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2Vu
ZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgJKHJldmlzaW9uIDE4OTQ5MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMjE2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBQb2x5bW9ycGhp
Y1B1dEJ5SWRMaXN0X2gKLSNkZWZpbmUgUG9seW1vcnBoaWNQdXRCeUlkTGlzdF9oCi0KLSNpZiBF
TkFCTEUoSklUKQotCi0jaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgotI2luY2x1ZGUgIk1hY3JvQXNz
ZW1ibGVyLmgiCi0jaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIKLSNpbmNs
dWRlICJPcGNvZGUuaCIKLSNpbmNsdWRlICJQdXRLaW5kLmgiCi0jaW5jbHVkZSAiUHV0UHJvcGVy
dHlTbG90LmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlLmgiCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgQ29kZUJsb2NrOwotc3RydWN0IFN0cnVjdHVy
ZVN0dWJJbmZvOwotCi1jbGFzcyBQdXRCeUlkQWNjZXNzIHsKLXB1YmxpYzoKLSAgICBlbnVtIEFj
Y2Vzc1R5cGUgewotICAgICAgICBJbnZhbGlkLAotICAgICAgICBUcmFuc2l0aW9uLAotICAgICAg
ICBSZXBsYWNlLAotICAgICAgICBTZXR0ZXIsCi0gICAgICAgIEN1c3RvbVNldHRlcgotICAgIH07
Ci0gICAgCi0gICAgUHV0QnlJZEFjY2VzcygpCi0gICAgICAgIDogbV90eXBlKEludmFsaWQpCi0g
ICAgewotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgUHV0QnlJZEFjY2VzcyB0cmFuc2l0aW9uKAot
ICAgICAgICBWTSYgdm0sCi0gICAgICAgIEpTQ2VsbCogb3duZXIsCi0gICAgICAgIFN0cnVjdHVy
ZSogb2xkU3RydWN0dXJlLAotICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICAg
ICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwKLSAgICAg
ICAgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUpCi0gICAgewotICAgICAg
ICBQdXRCeUlkQWNjZXNzIHJlc3VsdDsKLSAgICAgICAgcmVzdWx0Lm1fdHlwZSA9IFRyYW5zaXRp
b247Ci0gICAgICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBvbGRTdHJ1
Y3R1cmUpOwotICAgICAgICByZXN1bHQubV9uZXdTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgbmV3
U3RydWN0dXJlKTsKLSAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0
OwotICAgICAgICByZXN1bHQubV9jdXN0b21TZXR0ZXIgPSAwOwotICAgICAgICByZXN1bHQubV9z
dHViUm91dGluZSA9IHN0dWJSb3V0aW5lOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0K
LQotICAgIHN0YXRpYyBQdXRCeUlkQWNjZXNzIHJlcGxhY2UoCi0gICAgICAgIFZNJiB2bSwKLSAg
ICAgICAgSlNDZWxsKiBvd25lciwKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCi0gICAg
ICAgIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lKQotICAgIHsKLSAgICAg
ICAgUHV0QnlJZEFjY2VzcyByZXN1bHQ7Ci0gICAgICAgIHJlc3VsdC5tX3R5cGUgPSBSZXBsYWNl
OwotICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJl
KTsKLSAgICAgICAgcmVzdWx0Lm1fY3VzdG9tU2V0dGVyID0gMDsKLSAgICAgICAgcmVzdWx0Lm1f
c3R1YlJvdXRpbmUgPSBzdHViUm91dGluZTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9
Ci0KLQotICAgIHN0YXRpYyBQdXRCeUlkQWNjZXNzIHNldHRlcigKLSAgICAgICAgVk0mIHZtLAot
ICAgICAgICBKU0NlbGwqIG93bmVyLAotICAgICAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCi0g
ICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLAotICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LAotICAgICAgICBQdXRQcm9wZXJ0eVNsb3Q6OlB1
dFZhbHVlRnVuYyBjdXN0b21TZXR0ZXIsCi0gICAgICAgIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRp
bmU+IHN0dWJSb3V0aW5lKQotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoYWNjZXNzVHlw
ZSA9PSBTZXR0ZXIgfHwgYWNjZXNzVHlwZSA9PSBDdXN0b21TZXR0ZXIpOwotICAgICAgICBQdXRC
eUlkQWNjZXNzIHJlc3VsdDsKLSAgICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlLnNldCh2bSwg
b3duZXIsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHJlc3VsdC5tX3R5cGUgPSBhY2Nlc3NUeXBlOwot
ICAgICAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7Ci0gICAgICAgIHJl
c3VsdC5tX2N1c3RvbVNldHRlciA9IGN1c3RvbVNldHRlcjsKLSAgICAgICAgcmVzdWx0Lm1fc3R1
YlJvdXRpbmUgPSBzdHViUm91dGluZTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0g
ICAgCi0gICAgc3RhdGljIFB1dEJ5SWRBY2Nlc3MgZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFN0cnVj
dHVyZVN0dWJJbmZvJik7Ci0gICAgCi0gICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1f
dHlwZSAhPSBJbnZhbGlkOyB9Ci0gICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAh
aXNTZXQoKTsgfQotICAgIAotICAgIEFjY2Vzc1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dHlwZTsgfQotICAgIAotICAgIGJvb2wgaXNUcmFuc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90
eXBlID09IFRyYW5zaXRpb247IH0KLSAgICBib29sIGlzUmVwbGFjZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdHlwZSA9PSBSZXBsYWNlOyB9Ci0gICAgYm9vbCBpc1NldHRlcigpIGNvbnN0IHsgcmV0dXJu
IG1fdHlwZSA9PSBTZXR0ZXI7IH0KLSAgICBib29sIGlzQ3VzdG9tKCkgY29uc3QgeyByZXR1cm4g
bV90eXBlID09IEN1c3RvbVNldHRlcjsgfQotICAgIAotICAgIFN0cnVjdHVyZSogb2xkU3RydWN0
dXJlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIC8vIFVzaW5nIHRoaXMgaW5zdGVhZCBvZiBpc1Nl
dCgpIHRvIG1ha2UgdGhpcyBhc3NlcnRpb24gcm9idXN0IGFnYWluc3QgdGhlIHBvc3NpYmlsaXR5
Ci0gICAgICAgIC8vIG9mIGFkZGl0aW9uYWwgYWNjZXNzIHR5cGVzIGJlaW5nIGFkZGVkLgotICAg
ICAgICBBU1NFUlQoaXNUcmFuc2l0aW9uKCkgfHwgaXNSZXBsYWNlKCkgfHwgaXNTZXR0ZXIoKSB8
fCBpc0N1c3RvbSgpKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZS5n
ZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdAotICAg
IHsKLSAgICAgICAgQVNTRVJUKGlzUmVwbGFjZSgpIHx8IGlzU2V0dGVyKCkgfHwgaXNDdXN0b20o
KSk7Ci0gICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZS5nZXQoKTsKLSAgICB9Ci0gICAgCi0g
ICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJU
KGlzVHJhbnNpdGlvbigpKTsKLSAgICAgICAgcmV0dXJuIG1fbmV3U3RydWN0dXJlLmdldCgpOwot
ICAgIH0KLSAgICAKLSAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0
aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0KLSAgICAKLSAgICBKSVRT
dHViUm91dGluZSogc3R1YlJvdXRpbmUoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlz
VHJhbnNpdGlvbigpIHx8IGlzUmVwbGFjZSgpIHx8IGlzU2V0dGVyKCkgfHwgaXNDdXN0b20oKSk7
Ci0gICAgICAgIHJldHVybiBtX3N0dWJSb3V0aW5lLmdldCgpOwotICAgIH0KLQotICAgIFB1dFBy
b3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jIGN1c3RvbVNldHRlcigpIGNvbnN0Ci0gICAgewotICAg
ICAgICBBU1NFUlQoaXNDdXN0b20oKSk7Ci0gICAgICAgIHJldHVybiBtX2N1c3RvbVNldHRlcjsK
LSAgICB9Ci0KLSAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OwotICAgIAotcHJpdmF0ZToK
LSAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOwotICAgIAotICAgIEFjY2Vzc1R5cGUgbV90eXBl
OwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fb2xkU3RydWN0dXJlOwotICAgIFdyaXRl
QmFycmllcjxTdHJ1Y3R1cmU+IG1fbmV3U3RydWN0dXJlOwotICAgIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OwotICAgIFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVG
dW5jIG1fY3VzdG9tU2V0dGVyOwotICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gbV9zdHViUm91
dGluZTsKLX07Ci0KLWNsYXNzIFBvbHltb3JwaGljUHV0QnlJZExpc3QgewotICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIC8vIEVpdGhlciBjcmVhdGVzIGEgbmV3IHBv
bHltb3JwaGljIHB1dCBsaXN0LCBvciByZXR1cm5zIHRoZSBvbmUgdGhhdCBpcyBhbHJlYWR5Ci0g
ICAgLy8gaW4gcGxhY2UuCi0gICAgc3RhdGljIFBvbHltb3JwaGljUHV0QnlJZExpc3QqIGZyb20o
UHV0S2luZCwgU3RydWN0dXJlU3R1YkluZm8mKTsKLSAgICAKLSAgICB+UG9seW1vcnBoaWNQdXRC
eUlkTGlzdCgpOwotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdXJyZW50U2xvd1Bh
dGhUYXJnZXQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbGlzdC5sYXN0KCkuc3R1
YlJvdXRpbmUoKS0+Y29kZSgpLmNvZGUoKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBhZGRBY2Nl
c3MoY29uc3QgUHV0QnlJZEFjY2VzcyYpOwotICAgIAotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0
IHsgcmV0dXJuIG1fbGlzdC5pc0VtcHR5KCk7IH0KLSAgICB1bnNpZ25lZCBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9saXN0LnNpemUoKTsgfQotICAgIGJvb2wgaXNGdWxsKCkgY29uc3Q7Ci0gICAg
Ym9vbCBpc0FsbW9zdEZ1bGwoKSBjb25zdDsgLy8gVHJ1ZSBpZiBhZGRpbmcgYW4gZWxlbWVudCB3
b3VsZCBtYWtlIGlzRnVsbCgpIHRydWUuCi0gICAgY29uc3QgUHV0QnlJZEFjY2VzcyYgYXQodW5z
aWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9saXN0W2ldOyB9Ci0gICAgY29uc3QgUHV0QnlJZEFj
Y2VzcyYgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2xpc3RbaV07IH0K
LSAgICAKLSAgICBQdXRLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KLSAgICAK
LSAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OwotICAgIAotcHJpdmF0ZToKLSAgICBmcmll
bmQgY2xhc3MgQ29kZUJsb2NrOwotICAgIAotICAgIC8vIEluaXRpYWxpemUgZnJvbSBhIHN0dWIg
aW5mbzsgdGhpcyB3aWxsIHBsYWNlIG9uZSBlbGVtZW50IGluIHRoZSBsaXN0IGFuZCBpdCB3aWxs
Ci0gICAgLy8gYmUgY3JlYXRlZCBieSBjb252ZXJ0aW5nIHRoZSBzdHViIGluZm8ncyBwdXQgYnkg
aWQgYWNjZXNzIGluZm9ybWF0aW9uIGludG8gb3VyCi0gICAgLy8gUHV0QnlJZEFjY2Vzcy4KLSAg
ICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KFB1dEtpbmQsIFN0cnVjdHVyZVN0dWJJbmZvJik7Ci0K
LSAgICBWZWN0b3I8UHV0QnlJZEFjY2VzcywgMj4gbV9saXN0OwotICAgIFB1dEtpbmQgbV9raW5k
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotCi0j
ZW5kaWYgLy8gUG9seW1vcnBoaWNQdXRCeUlkTGlzdF9oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDE4OTQ5
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjYsMTMgKzI2LDEyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiUHV0QnlJZFN0YXR1cy5oIgogCi0jaW5jbHVkZSAiQWNjZXNzb3JDYWxsSklUU3R1
YlJvdXRpbmUuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJDb21wbGV4R2V0
U3RhdHVzLmgiCiAjaW5jbHVkZSAiTExJbnREYXRhLmgiCiAjaW5jbHVkZSAiTG93TGV2ZWxJbnRl
cnByZXRlci5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJQb2x5bW9ycGhp
Y1B1dEJ5SWRMaXN0LmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKICNpbmNsdWRl
ICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVDaGFpbi5oIgogI2luY2x1ZGUgPHd0
Zi9MaXN0RHVtcC5oPgpAQCAtMTU0LDY2ICsxNTMsNDMgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlk
U3RhdHVzOjpjb21wdXRlRm9yUwogICAgIGlmICghc3R1YkluZm8tPnNlZW4pCiAgICAgICAgIHJl
dHVybiBQdXRCeUlkU3RhdHVzKCk7CiAgICAgCi0gICAgc3dpdGNoIChzdHViSW5mby0+YWNjZXNz
VHlwZSkgewotICAgIGNhc2UgYWNjZXNzX3Vuc2V0OgorICAgIHN3aXRjaCAoc3R1YkluZm8tPmNh
Y2hlVHlwZSkgeworICAgIGNhc2UgQ2FjaGVUeXBlOjpVbnNldDoKICAgICAgICAgLy8gSWYgdGhl
IEpJVCBzYXcgaXQgYnV0IGRpZG4ndCBvcHRpbWl6ZSBpdCwgdGhlbiBhc3N1bWUgdGhhdCB0aGlz
IHRha2VzIHNsb3cgcGF0aC4KICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93
UGF0aCk7CiAgICAgICAgIAotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlOiB7Cisg
ICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOiB7CiAgICAgICAgIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCA9Ci0gICAgICAgICAgICBzdHViSW5mby0+dS5wdXRCeUlkUmVwbGFjZS5iYXNl
T2JqZWN0U3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKKyAgICAgICAgICAgIHN0dWJJ
bmZvLT51LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQp
OwogICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7CiAgICAgICAgICAgICByZXR1
cm4gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoCi0gICAgICAgICAgICAgICAgc3R1YkluZm8tPnUu
cHV0QnlJZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgb2Zmc2V0KTsKKyAgICAg
ICAgICAgICAgICBzdHViSW5mby0+dS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgp
LCBvZmZzZXQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2Vz
U2xvd1BhdGgpOwogICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3Ry
YW5zaXRpb25fbm9ybWFsOgotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2Rp
cmVjdDogewotICAgICAgICBBU1NFUlQoc3R1YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24ucHJl
dmlvdXNTdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVk
KCkpOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSAKLSAgICAgICAgICAgIHN0dWJJ
bmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7
Ci0gICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKLSAgICAgICAgICAgIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldCA9IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0Ojpmcm9tUmF3UG9pbnRlcigKLSAgICAgICAgICAgICAgICBzdHViSW5mby0+dS5wdXRC
eUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQpOwotICAgICAgICAgICAgaWYgKCFjb25kaXRp
b25TZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgICAgICAgICByZXR1cm4gUHV0QnlJ
ZFZhcmlhbnQ6OnRyYW5zaXRpb24oCi0gICAgICAgICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJ
ZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUuZ2V0KCksCi0gICAgICAgICAgICAgICAgc3R1
YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLmdldCgpLAotICAgICAgICAgICAg
ICAgIGNvbmRpdGlvblNldCwgb2Zmc2V0KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICB9Ci0gICAgICAgIAotICAgIGNhc2UgYWNj
ZXNzX3B1dF9ieV9pZF9saXN0OiB7Ci0gICAgICAgIFBvbHltb3JwaGljUHV0QnlJZExpc3QqIGxp
c3QgPSBzdHViSW5mby0+dS5wdXRCeUlkTGlzdC5saXN0OworICAgIGNhc2UgQ2FjaGVUeXBlOjpT
dHViOiB7CisgICAgICAgIFBvbHltb3JwaGljQWNjZXNzKiBsaXN0ID0gc3R1YkluZm8tPnUuc3R1
YjsKICAgICAgICAgCiAgICAgICAgIFB1dEJ5SWRTdGF0dXMgcmVzdWx0OwogICAgICAgICByZXN1
bHQubV9zdGF0ZSA9IFNpbXBsZTsKICAgICAgICAgCiAgICAgICAgIFN0YXRlIHNsb3dQYXRoU3Rh
dGUgPSBUYWtlc1Nsb3dQYXRoOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlz
dC0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGNvbnN0IFB1dEJ5SWRBY2Nlc3MmIGFjY2Vz
cyA9IGxpc3QtPmF0KGkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzd2l0Y2ggKGFjY2Vz
cy50eXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgUHV0QnlJZEFjY2Vzczo6U2V0dGVyOgotICAg
ICAgICAgICAgY2FzZSBQdXRCeUlkQWNjZXNzOjpDdXN0b21TZXR0ZXI6CisgICAgICAgICAgICBj
b25zdCBBY2Nlc3NDYXNlJiBhY2Nlc3MgPSBsaXN0LT5hdChpKTsKKyAgICAgICAgICAgIGlmIChh
Y2Nlc3MuZG9lc0NhbGxzKCkpCiAgICAgICAgICAgICAgICAgc2xvd1BhdGhTdGF0ZSA9IE1ha2Vz
Q2FsbHM7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+c2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgICAgIGNvbnN0IFB1dEJ5SWRBY2Nlc3MmIGFjY2VzcyA9IGxpc3QtPmF0KGkpOworICAg
ICAgICAgICAgY29uc3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0gbGlzdC0+YXQoaSk7CisgICAgICAg
ICAgICBpZiAoYWNjZXNzLnZpYVByb3h5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFB1dEJ5
SWRWYXJpYW50IHZhcmlhbnQ7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHN3aXRjaCAoYWNj
ZXNzLnR5cGUoKSkgewotICAgICAgICAgICAgY2FzZSBQdXRCeUlkQWNjZXNzOjpSZXBsYWNlOiB7
CisgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OlJlcGxhY2U6IHsKICAgICAgICAgICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFjY2Vzcy5zdHJ1Y3R1cmUoKTsKICAgICAgICAgICAg
ICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1
aWQpOwogICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQpAQCAtMjIy
LDcgKzE5OCw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIGNhc2UgUHV0QnlJZEFjY2Vzczo6VHJhbnNpdGlvbjogeworICAgICAgICAgICAg
Y2FzZSBBY2Nlc3NDYXNlOjpUcmFuc2l0aW9uOiB7CiAgICAgICAgICAgICAgICAgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0ID0KICAgICAgICAgICAgICAgICAgICAgYWNjZXNzLm5ld1N0cnVjdHVyZSgp
LT5nZXRDb25jdXJyZW50bHkodWlkKTsKICAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRPZmZz
ZXQob2Zmc2V0KSkKQEAgLTIzMSwxMSArMjA3LDExIEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0
YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5zdHJ1
Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSk7CiAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5
SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAotICAgICAgICAgICAgICAgICAgICBhY2Nlc3Mub2xkU3Ry
dWN0dXJlKCksIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOwor
ICAgICAgICAgICAgICAgICAgICBhY2Nlc3Muc3RydWN0dXJlKCksIGFjY2Vzcy5uZXdTdHJ1Y3R1
cmUoKSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBQdXRCeUlkQWNj
ZXNzOjpTZXR0ZXI6IHsKKyAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6U2V0dGVyOiB7CiAg
ICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBhY2Nlc3Muc3RydWN0dXJlKCk7
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgQ29tcGxleEdldFN0YXR1cyBjb21w
bGV4R2V0U3RhdHVzID0gQ29tcGxleEdldFN0YXR1czo6Y29tcHV0ZUZvcigKQEAgLTI0OSwxMiAr
MjI1LDEyIEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSk7CiAgICAg
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6
SW5saW5lYWJsZTogewotICAgICAgICAgICAgICAgICAgICBBY2Nlc3NvckNhbGxKSVRTdHViUm91
dGluZSogc3R1YiA9IHN0YXRpY19jYXN0PEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lKj4oCi0g
ICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3Muc3R1YlJvdXRpbmUoKSk7CisgICAgICAgICAg
ICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gYWNjZXNzLmNhbGxMaW5rSW5m
bygpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoY2FsbExpbmtJbmZvKTsKICAgICAgICAg
ICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1
cyA9CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfdW5pcXVlPENhbGxMaW5rU3Rh
dHVzPigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYWxsTGlua1N0YXR1czo6Y29tcHV0
ZUZvcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJs
b2NrLCAqc3R1Yi0+bV9jYWxsTGlua0luZm8sIGNhbGxFeGl0U2l0ZURhdGEpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJsb2NrLCAqY2FsbExpbmtJ
bmZvLCBjYWxsRXhpdFNpdGVEYXRhKSk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6OnNldHRlcigKICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdHVyZSwgY29tcGxleEdldFN0YXR1cy5vZmZzZXQoKSwgY29tcGxl
eEdldFN0YXR1cy5jb25kaXRpb25TZXQoKSwKQEAgLTI2Myw3ICsyMzksNyBAQCBQdXRCeUlkU3Rh
dHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFB1dEJ5SWRB
Y2Nlc3M6OkN1c3RvbVNldHRlcjoKKyAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6Q3VzdG9t
U2V0dGVyOgogICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE1ha2VzQ2FsbHMp
OwogCiAgICAgICAgICAgICBkZWZhdWx0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShyZXZpc2lvbiAxODk0OTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw4ICsyNyw3IEBACiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1
YkluZm8uaCIKIAogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCi0jaW5jbHVkZSAiUG9seW1vcnBoaWNH
ZXRCeUlkTGlzdC5oIgotI2luY2x1ZGUgIlBvbHltb3JwaGljUHV0QnlJZExpc3QuaCIKKyNpbmNs
dWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgogI2luY2x1ZGUgIlJlcGF0Y2guaCIKIAogbmFtZXNw
YWNlIEpTQyB7CkBAIC0zNiwzNyArMzUsNTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWYgRU5BQkxF
KEpJVCkKIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmRlcmVmKCkKIHsKLSAgICBzd2l0Y2ggKGFj
Y2Vzc1R5cGUpIHsKLSAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfbGlzdDogewotICAgICAgICBk
ZWxldGUgdS5nZXRCeUlkTGlzdC5saXN0OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNh
c2UgYWNjZXNzX3B1dF9ieV9pZF9saXN0OgotICAgICAgICBkZWxldGUgdS5wdXRCeUlkTGlzdC5s
aXN0OworICAgIHN3aXRjaCAoY2FjaGVUeXBlKSB7CisgICAgY2FzZSBDYWNoZVR5cGU6OlN0dWI6
CisgICAgICAgIGRlbGV0ZSB1LnN0dWI7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIGFjY2Vz
c19pbl9saXN0OiB7Ci0gICAgICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcG9s
eW1vcnBoaWNTdHJ1Y3R1cmVzID0gdS5pbkxpc3Quc3RydWN0dXJlTGlzdDsKLSAgICAgICAgZGVs
ZXRlIHBvbHltb3JwaGljU3RydWN0dXJlczsKKyAgICBjYXNlIENhY2hlVHlwZTo6VW5zZXQ6Cisg
ICAgY2FzZSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxmOgorICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRC
eUlkUmVwbGFjZToKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBjYXNlIGFjY2Vzc19wdXRf
YnlfaWRfdHJhbnNpdGlvbl9ub3JtYWw6Ci0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5z
aXRpb25fZGlyZWN0OgotICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6YWRvcHRS
YXdQb2ludGVyKHUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0KTsKLSAgICAgICAg
dS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQgPSBudWxscHRyOwotICAgICAgICBy
ZXR1cm47Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGY6Ci0gICAgY2FzZSBhY2Nlc3Nf
cHV0X2J5X2lkX3JlcGxhY2U6Ci0gICAgY2FzZSBhY2Nlc3NfdW5zZXQ6Ci0gICAgICAgIC8vIFRo
ZXNlIGluc3RydWN0aW9ucyBkb24ndCBoYXZlIHRvIHJlbGVhc2UgYW55IGFsbG9jYXRlZCBtZW1v
cnkKLSAgICAgICAgcmV0dXJuOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIFN0cnVjdHVyZVN0dWJJbmZvOjphZGRBY2Nl
c3NDYXNlKAorICAgIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IElkZW50aWZp
ZXImIGlkZW50LCBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gYWNjZXNzQ2FzZSkKK3sKKyAg
ICBpZiAoIWFjY2Vzc0Nhc2UpCisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIo
KTsKKyAgICAKKyAgICBpZiAoY2FjaGVUeXBlID09IENhY2hlVHlwZTo6U3R1YikKKyAgICAgICAg
cmV0dXJuIHUuc3R1Yi0+cmVnZW5lcmF0ZVdpdGhDYXNlKHZtLCBjb2RlQmxvY2ssICp0aGlzLCBp
ZGVudCwgc3RkOjptb3ZlKGFjY2Vzc0Nhc2UpKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxQb2x5
bW9ycGhpY0FjY2Vzcz4gYWNjZXNzID0gc3RkOjptYWtlX3VuaXF1ZTxQb2x5bW9ycGhpY0FjY2Vz
cz4oKTsKKyAgICAKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+PiBhY2Nl
c3NDYXNlczsKKyAgICAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gcHJldmlvdXND
YXNlID0KKyAgICAgICAgQWNjZXNzQ2FzZTo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKHZtLCBjb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCAqdGhpcyk7CisgICAgaWYgKHByZXZpb3VzQ2FzZSkK
KyAgICAgICAgYWNjZXNzQ2FzZXMuYXBwZW5kKHN0ZDo6bW92ZShwcmV2aW91c0Nhc2UpKTsKKwor
ICAgIGFjY2Vzc0Nhc2VzLmFwcGVuZChzdGQ6Om1vdmUoYWNjZXNzQ2FzZSkpOworCisgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyIHJlc3VsdCA9CisgICAgICAgIGFjY2Vzcy0+cmVnZW5lcmF0ZVdp
dGhDYXNlcyh2bSwgY29kZUJsb2NrLCAqdGhpcywgaWRlbnQsIHN0ZDo6bW92ZShhY2Nlc3NDYXNl
cykpOworCisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIoKTsKKworICAgIGNhY2hlVHlwZSA9IENhY2hlVHlwZTo6U3R1YjsKKyAgICB1LnN0dWIg
PSBhY2Nlc3MucmVsZWFzZSgpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHZvaWQgU3RydWN0
dXJlU3R1YkluZm86OnJlc2V0KENvZGVCbG9jayogY29kZUJsb2NrKQogewotICAgIGlmIChhY2Nl
c3NUeXBlID09IGFjY2Vzc191bnNldCkKKyAgICBpZiAoY2FjaGVUeXBlID09IENhY2hlVHlwZTo6
VW5zZXQpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9T
UigpKSB7CkBAIC03NCw2MCArODksMzggQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQo
Q29kZUJsb2NrKgogICAgICAgICAvLyBvZiB0aGUgQ29kZUJsb2NrLgogICAgICAgICBkYXRhTG9n
KCJDbGVhcmluZyBzdHJ1Y3R1cmUgY2FjaGUgKGtpbmQgIiwgc3RhdGljX2Nhc3Q8aW50PihhY2Nl
c3NUeXBlKSwgIikgaW4gIiwgUmF3UG9pbnRlcihjb2RlQmxvY2spLCAiLlxuIik7CiAgICAgfQot
ICAgIAotICAgIGlmIChpc0dldEJ5SWRBY2Nlc3Moc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oYWNj
ZXNzVHlwZSkpKQorCisgICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7CisgICAgY2FzZSBBY2Nlc3NU
eXBlOjpHZXQ6CiAgICAgICAgIHJlc2V0R2V0QnlJRChjb2RlQmxvY2ssICp0aGlzKTsKLSAgICBl
bHNlIGlmIChpc1B1dEJ5SWRBY2Nlc3Moc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oYWNjZXNzVHlw
ZSkpKQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dDoKICAgICAgICAg
cmVzZXRQdXRCeUlEKGNvZGVCbG9jaywgKnRoaXMpOwotICAgIGVsc2UgewotICAgICAgICBSRUxF
QVNFX0FTU0VSVChpc0luQWNjZXNzKHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KGFjY2Vzc1R5cGUp
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW46CiAgICAgICAgIHJl
c2V0SW4oY29kZUJsb2NrLCAqdGhpcyk7CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAKICAg
ICBkZXJlZigpOwotICAgIGFjY2Vzc1R5cGUgPSBhY2Nlc3NfdW5zZXQ7Ci0gICAgc3R1YlJvdXRp
bmUgPSBudWxscHRyOwotICAgIHdhdGNocG9pbnRzID0gbnVsbHB0cjsKKyAgICBjYWNoZVR5cGUg
PSBDYWNoZVR5cGU6OlVuc2V0OwogfQogCiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdl
YWtSZWZlcmVuY2VzKENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIFZNJiB2bSA9ICpjb2Rl
QmxvY2stPnZtKCk7Ci0gICAgCi0gICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7Ci0gICAgY2FzZSBh
Y2Nlc3NfZ2V0X2J5X2lkX3NlbGY6Ci0gICAgICAgIGlmIChIZWFwOjppc01hcmtlZCh1LmdldEJ5
SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCkpKQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfbGlzdDogewotICAgICAg
ICBpZiAodS5nZXRCeUlkTGlzdC5saXN0LT52aXNpdFdlYWsodm0pKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3Ry
YW5zaXRpb25fbm9ybWFsOgotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2Rp
cmVjdDoKLSAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKHUucHV0QnlJZFRyYW5zaXRpb24ucHJl
dmlvdXNTdHJ1Y3R1cmUuZ2V0KCkpCi0gICAgICAgICAgICAmJiBIZWFwOjppc01hcmtlZCh1LnB1
dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5nZXQoKSkKLSAgICAgICAgICAgICYmIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0Ojpmcm9tUmF3UG9pbnRlcih1LnB1dEJ5SWRUcmFuc2l0aW9uLnJh
d0NvbmRpdGlvblNldCkuYXJlU3RpbGxMaXZlKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlOgotICAgICAgICBp
ZiAoSGVhcDo6aXNNYXJrZWQodS5wdXRCeUlkUmVwbGFjZS5iYXNlT2JqZWN0U3RydWN0dXJlLmdl
dCgpKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBhY2Nl
c3NfcHV0X2J5X2lkX2xpc3Q6Ci0gICAgICAgIGlmICh1LnB1dEJ5SWRMaXN0Lmxpc3QtPnZpc2l0
V2Vhayh2bSkpCisKKyAgICBzd2l0Y2ggKGNhY2hlVHlwZSkgeworICAgIGNhc2UgQ2FjaGVUeXBl
OjpHZXRCeUlkU2VsZjoKKyAgICBjYXNlIENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2U6CisgICAg
ICAgIGlmIChIZWFwOjppc01hcmtlZCh1LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0
KCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIGFjY2Vz
c19pbl9saXN0OiB7Ci0gICAgICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcG9s
eW1vcnBoaWNTdHJ1Y3R1cmVzID0gdS5pbkxpc3Quc3RydWN0dXJlTGlzdDsKLSAgICAgICAgaWYg
KHBvbHltb3JwaGljU3RydWN0dXJlcy0+dmlzaXRXZWFrKHUuaW5MaXN0Lmxpc3RTaXplKSkKKyAg
ICBjYXNlIENhY2hlVHlwZTo6U3R1YjoKKyAgICAgICAgaWYgKHUuc3R1Yi0+dmlzaXRXZWFrKHZt
KSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgYnJlYWs7Ci0gICAgfQogICAgIGRlZmF1
bHQ6Ci0gICAgICAgIC8vIFRoZSByZXN0IG9mIHRoZSBpbnN0cnVjdGlvbnMgZG9uJ3QgcmVxdWly
ZSByZWZlcmVuY2VzLCBzbyB0aGVyZSBpcyBubyBuZWVkIHRvCi0gICAgICAgIC8vIGRvIGFueXRo
aW5nLgogICAgICAgICByZXR1cm47CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2aXNpb24gMTg5NDkz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxl
ci5oIgogI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiCiAjaW5jbHVkZSAi
T3Bjb2RlLmgiCi0jaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0LmgiCisj
aW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKICNpbmNsdWRlICJSZWdpc3RlclNldC5oIgog
I2luY2x1ZGUgIlNwaWxsUmVnaXN0ZXJzTW9kZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgpA
QCAtNDIsNTcgKzQyLDI1IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKEpJVCkKIAot
Y2xhc3MgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDsKLWNsYXNzIFBvbHltb3JwaGljUHV0QnlJZExp
c3Q7CitjbGFzcyBQb2x5bW9ycGhpY0FjY2VzczsKIAotZW51bSBBY2Nlc3NUeXBlIHsKLSAgICBh
Y2Nlc3NfZ2V0X2J5X2lkX3NlbGYsCi0gICAgYWNjZXNzX2dldF9ieV9pZF9saXN0LAotICAgIGFj
Y2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWwsCi0gICAgYWNjZXNzX3B1dF9ieV9pZF90
cmFuc2l0aW9uX2RpcmVjdCwKLSAgICBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2UsCi0gICAgYWNj
ZXNzX3B1dF9ieV9pZF9saXN0LAotICAgIGFjY2Vzc191bnNldCwKLSAgICBhY2Nlc3NfaW5fbGlz
dAorZW51bSBjbGFzcyBBY2Nlc3NUeXBlIDogaW50OF90IHsKKyAgICBHZXQsCisgICAgUHV0LAor
ICAgIEluCiB9OwogCi1pbmxpbmUgYm9vbCBpc0dldEJ5SWRBY2Nlc3MoQWNjZXNzVHlwZSBhY2Nl
c3NUeXBlKQotewotICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgewotICAgIGNhc2UgYWNjZXNzX2dl
dF9ieV9pZF9zZWxmOgotICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9saXN0OgotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
fQotICAgIAotaW5saW5lIGJvb2wgaXNQdXRCeUlkQWNjZXNzKEFjY2Vzc1R5cGUgYWNjZXNzVHlw
ZSkKLXsKLSAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlf
aWRfdHJhbnNpdGlvbl9ub3JtYWw6Ci0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRp
b25fZGlyZWN0OgotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlOgotICAgIGNhc2Ug
YWNjZXNzX3B1dF9ieV9pZF9saXN0OgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0
OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1pbmxpbmUgYm9vbCBpc0luQWNj
ZXNzKEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSkKLXsKLSAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsK
LSAgICBjYXNlIGFjY2Vzc19pbl9saXN0OgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZh
dWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQorZW51bSBjbGFzcyBDYWNoZVR5
cGUgOiBpbnQ4X3QgeworICAgIFVuc2V0LAorICAgIEdldEJ5SWRTZWxmLAorICAgIFB1dEJ5SWRS
ZXBsYWNlLAorICAgIFN0dWIKK307CiAKIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbyB7Ci0gICAg
U3RydWN0dXJlU3R1YkluZm8oKQotICAgICAgICA6IGFjY2Vzc1R5cGUoYWNjZXNzX3Vuc2V0KQor
ICAgIFN0cnVjdHVyZVN0dWJJbmZvKEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSkKKyAgICAgICAgOiBh
Y2Nlc3NUeXBlKGFjY2Vzc1R5cGUpCisgICAgICAgICwgY2FjaGVUeXBlKENhY2hlVHlwZTo6VW5z
ZXQpCiAgICAgICAgICwgc2VlbihmYWxzZSkKICAgICAgICAgLCByZXNldEJ5R0MoZmFsc2UpCiAg
ICAgICAgICwgdG9va1Nsb3dQYXRoKGZhbHNlKQpAQCAtMTAwLDUzICs2OCwzMSBAQCBzdHJ1Y3Qg
U3RydWN0dXJlU3R1YkluZm8gewogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIGluaXRHZXRCeUlk
U2VsZihWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVy
ZSkKKyAgICB2b2lkIGluaXRHZXRCeUlkU2VsZihWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVj
dHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogICAgIHsK
LSAgICAgICAgYWNjZXNzVHlwZSA9IGFjY2Vzc19nZXRfYnlfaWRfc2VsZjsKLQotICAgICAgICB1
LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgYmFzZU9iamVj
dFN0cnVjdHVyZSk7Ci0gICAgfQorICAgICAgICBjYWNoZVR5cGUgPSBDYWNoZVR5cGU6OkdldEJ5
SWRTZWxmOwogCi0gICAgdm9pZCBpbml0R2V0QnlJZExpc3QoUG9seW1vcnBoaWNHZXRCeUlkTGlz
dCogbGlzdCkKLSAgICB7Ci0gICAgICAgIGFjY2Vzc1R5cGUgPSBhY2Nlc3NfZ2V0X2J5X2lkX2xp
c3Q7Ci0gICAgICAgIHUuZ2V0QnlJZExpc3QubGlzdCA9IGxpc3Q7CisgICAgICAgIHUuYnlJZFNl
bGYuYmFzZU9iamVjdFN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBiYXNlT2JqZWN0U3RydWN0dXJl
KTsKKyAgICAgICAgdS5ieUlkU2VsZi5vZmZzZXQgPSBvZmZzZXQ7CiAgICAgfQogCi0gICAgLy8g
UHV0QnlJZCoKLQotICAgIHZvaWQgaW5pdFB1dEJ5SWRUcmFuc2l0aW9uKFZNJiB2bSwgSlNDZWxs
KiBvd25lciwgU3RydWN0dXJlKiBwcmV2aW91c1N0cnVjdHVyZSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldCwgYm9vbCBpc0RpcmVj
dCkKKyAgICB2b2lkIGluaXRQdXRCeUlkUmVwbGFjZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0
cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogICAg
IHsKLSAgICAgICAgaWYgKGlzRGlyZWN0KQotICAgICAgICAgICAgYWNjZXNzVHlwZSA9IGFjY2Vz
c19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IGFjY2Vzc1R5cGUgPSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOworICAgICAg
ICBjYWNoZVR5cGUgPSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOwogCi0gICAgICAgIHUucHV0
QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgcHJldmlvdXNT
dHJ1Y3R1cmUpOwotICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5zZXQodm0s
IG93bmVyLCBzdHJ1Y3R1cmUpOwotICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0NvbmRp
dGlvblNldCA9IGNvbmRpdGlvblNldC5yZWxlYXNlUmF3UG9pbnRlcigpOworICAgICAgICB1LmJ5
SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgYmFzZU9iamVjdFN0cnVj
dHVyZSk7CisgICAgICAgIHUuYnlJZFNlbGYub2Zmc2V0ID0gb2Zmc2V0OwogICAgIH0KIAotICAg
IHZvaWQgaW5pdFB1dEJ5SWRSZXBsYWNlKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJl
KiBiYXNlT2JqZWN0U3RydWN0dXJlKQotICAgIHsKLSAgICAgICAgYWNjZXNzVHlwZSA9IGFjY2Vz
c19wdXRfYnlfaWRfcmVwbGFjZTsKLSAgICAKLSAgICAgICAgdS5wdXRCeUlkUmVwbGFjZS5iYXNl
T2JqZWN0U3RydWN0dXJlLnNldCh2bSwgb3duZXIsIGJhc2VPYmplY3RTdHJ1Y3R1cmUpOwotICAg
IH0KLSAgICAgICAgCi0gICAgdm9pZCBpbml0UHV0QnlJZExpc3QoUG9seW1vcnBoaWNQdXRCeUlk
TGlzdCogbGlzdCkKLSAgICB7Ci0gICAgICAgIGFjY2Vzc1R5cGUgPSBhY2Nlc3NfcHV0X2J5X2lk
X2xpc3Q7Ci0gICAgICAgIHUucHV0QnlJZExpc3QubGlzdCA9IGxpc3Q7Ci0gICAgfQotICAgIAot
ICAgIHZvaWQgaW5pdEluTGlzdChQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIGxpc3Qs
IGludCBsaXN0U2l6ZSkKKyAgICB2b2lkIGluaXRTdHViKHN0ZDo6dW5pcXVlX3B0cjxQb2x5bW9y
cGhpY0FjY2Vzcz4gc3R1YikKICAgICB7Ci0gICAgICAgIGFjY2Vzc1R5cGUgPSBhY2Nlc3NfaW5f
bGlzdDsKLSAgICAgICAgdS5pbkxpc3Quc3RydWN0dXJlTGlzdCA9IGxpc3Q7Ci0gICAgICAgIHUu
aW5MaXN0Lmxpc3RTaXplID0gbGlzdFNpemU7CisgICAgICAgIGNhY2hlVHlwZSA9IENhY2hlVHlw
ZTo6U3R1YjsKKyAgICAgICAgdS5zdHViID0gc3R1Yi5yZWxlYXNlKCk7CiAgICAgfQotICAgICAg
ICAKKworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBhZGRBY2Nlc3NDYXNlKAorICAgICAgICBW
TSYsIENvZGVCbG9jayosIGNvbnN0IElkZW50aWZpZXImLCBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNz
Q2FzZT4gYWNjZXNzQ2FzZSk7CisKICAgICB2b2lkIHJlc2V0KENvZGVCbG9jayopOwogCiAgICAg
dm9pZCBkZXJlZigpOwpAQCAtMTY1LDE1ICsxMTEsOSBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1Yklu
Zm8gewogICAgICAgICBzZWVuID0gdHJ1ZTsKICAgICB9CiAgICAgICAgIAotICAgIFN0cnVjdHVy
ZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIGFkZFdhdGNocG9pbnQoCi0gICAgICAgIENvZGVCbG9j
ayogY29kZUJsb2NrLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uID0g
T2JqZWN0UHJvcGVydHlDb25kaXRpb24oKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBXYXRjaHBv
aW50c09uU3RydWN0dXJlU3R1YkluZm86OmVuc3VyZVJlZmVyZW5jZUFuZEFkZFdhdGNocG9pbnQo
Ci0gICAgICAgICAgICB3YXRjaHBvaW50cywgY29kZUJsb2NrLCB0aGlzLCBjb25kaXRpb24pOwot
ICAgIH0KLSAgICAKLSAgICBpbnQ4X3QgYWNjZXNzVHlwZTsKLSAgICBib29sIHNlZW4gOiAxOwor
ICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZTsKKyAgICBDYWNoZVR5cGUgY2FjaGVUeXBlOworICAg
IGJvb2wgc2VlbjsKICAgICBib29sIHJlc2V0QnlHQyA6IDE7CiAgICAgYm9vbCB0b29rU2xvd1Bh
dGggOiAxOwogCkBAIC0yMDMsMzQgKzE0MywxMyBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8g
ewogCiAgICAgdW5pb24gewogICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgLy8gSXQgd291
bGQgYmUgdW53aXNlIHRvIHB1dCBhbnl0aGluZyBoZXJlLCBhcyBpdCB3aWxsIHN1cmVseSBiZSBv
dmVyd3JpdHRlbi4KLSAgICAgICAgfSB1bnNldDsKLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAg
ICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBiYXNlT2JqZWN0U3RydWN0dXJlOwotICAg
ICAgICB9IGdldEJ5SWRTZWxmOwotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgUG9seW1v
cnBoaWNHZXRCeUlkTGlzdCogbGlzdDsKLSAgICAgICAgfSBnZXRCeUlkTGlzdDsKLSAgICAgICAg
c3RydWN0IHsKLSAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBwcmV2aW91
c1N0cnVjdHVyZTsKLSAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBzdHJ1
Y3R1cmU7Ci0gICAgICAgICAgICB2b2lkKiByYXdDb25kaXRpb25TZXQ7Ci0gICAgICAgIH0gcHV0
QnlJZFRyYW5zaXRpb247Ci0gICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICBXcml0ZUJhcnJp
ZXJCYXNlPFN0cnVjdHVyZT4gYmFzZU9iamVjdFN0cnVjdHVyZTsKLSAgICAgICAgfSBwdXRCeUlk
UmVwbGFjZTsKLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIFBvbHltb3JwaGljUHV0QnlJ
ZExpc3QqIGxpc3Q7Ci0gICAgICAgIH0gcHV0QnlJZExpc3Q7Ci0gICAgICAgIHN0cnVjdCB7Ci0g
ICAgICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHN0cnVjdHVyZUxpc3Q7
Ci0gICAgICAgICAgICBpbnQgbGlzdFNpemU7Ci0gICAgICAgIH0gaW5MaXN0OworICAgICAgICAg
ICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OworICAgICAgICB9IGJ5SWRTZWxmOworICAgICAgICBQ
b2x5bW9ycGhpY0FjY2Vzcyogc3R1YjsKICAgICB9IHU7CiAKLSAgICBSZWZQdHI8SklUU3R1YlJv
dXRpbmU+IHN0dWJSb3V0aW5lOwogICAgIENvZGVMb2NhdGlvbkNhbGwgY2FsbFJldHVybkxvY2F0
aW9uOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8+
IHdhdGNocG9pbnRzOwogfTsKIAogaW5saW5lIENvZGVPcmlnaW4gZ2V0U3RydWN0dXJlU3R1Yklu
Zm9Db2RlT3JpZ2luKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHJ1Y3R1cmVTdHViSW5mbykKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShy
ZXZpc2lvbiAxODk0OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTM1LDcgKzkzNSw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVJbihOb2RlKiBub2QKICAgICAKICAgICBpZiAoSlNTdHJpbmcqIHN0
cmluZyA9IG5vZGUtPmNoaWxkMSgpLT5keW5hbWljQ2FzdENvbnN0YW50PEpTU3RyaW5nKj4oKSkg
ewogICAgICAgICBpZiAoc3RyaW5nLT50cnlHZXRWYWx1ZUltcGwoKSAmJiBzdHJpbmctPnRyeUdl
dFZhbHVlSW1wbCgpLT5pc0F0b21pYygpKSB7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8gPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkU3R1YkluZm8oKTsKKyAgICAgICAg
ICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRT
dHViSW5mbyhBY2Nlc3NUeXBlOjpJbik7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3Bw
CShyZXZpc2lvbiAxODk0OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBp
bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzgsNyArNTM4LDcgQEAgc3RhdGljIHZvaWQgZml4
RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHVz
ZWRSZWdpc3RlcnMgPSB1c2VkUmVnaXN0ZXJzRm9yKHJlY29yZCk7CiAgICAgICAgICAgICAgICAg
R1BSUmVnIHJlc3VsdCA9IHJlY29yZC5sb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCk7CiAgICAgICAg
ICAgICAgICAgR1BSUmVnIG9iaiA9IHJlY29yZC5sb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCk7Ci0g
ICAgICAgICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gY29kZUJsb2NrLT5h
ZGRTdHViSW5mbygpOyAKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8gPSBjb2RlQmxvY2stPmFkZFN0dWJJbmZvKEFjY2Vzc1R5cGU6OkluKTsgCiAgICAgICAgICAg
ICAgICAgc3R1YkluZm8tPmNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luOwogICAgICAgICAgICAgICAg
IHN0dWJJbmZvLT5jYWxsU2l0ZUluZGV4ID0gY2hlY2tJbi5jYWxsU2l0ZUluZGV4KCk7CiAgICAg
ICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmJhc2VHUFIgPSBzdGF0aWNfY2FzdDxpbnQ4X3Q+
KG9iaik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0FjY2Vzc29yQ2FsbEpJVFN0
dWJSb3V0aW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fj
Y2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmNwcAkocmV2aXNpb24gMTg5NDkzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9BY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQWNj
ZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaCIKLQotI2lmIEVOQUJMRShKSVQpCi0KLSNpbmNsdWRl
ICJDYWxsTGlua0luZm8uaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLUFjY2Vzc29yQ2FsbEpJVFN0
dWJSb3V0aW5lOjpBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZSgKLSAgICBjb25zdCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYmIGNvZGUsIFZNJiB2bSwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rSW5m
bz4gaW5mbykKLSAgICA6IEdDQXdhcmVKSVRTdHViUm91dGluZShjb2RlLCB2bSkKLSAgICAsIG1f
Y2FsbExpbmtJbmZvKFdURjo6bW92ZShpbmZvKSkKLXsKLX0KLQotQWNjZXNzb3JDYWxsSklUU3R1
YlJvdXRpbmU6On5BY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZSgpCi17Ci19Ci0KLWJvb2wgQWNj
ZXNzb3JDYWxsSklUU3R1YlJvdXRpbmU6OnZpc2l0V2VhayhWTSYgdm0pCi17Ci0gICAgbV9jYWxs
TGlua0luZm8tPnZpc2l0V2Vhayh2bSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9BY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaAko
cmV2aXNpb24gMTg5NDkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9BY2Nlc3NvckNh
bGxKSVRTdHViUm91dGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU3ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBB
Y2Nlc3NvckNhbGxKSVRTdHViUm91dGluZV9oCi0jZGVmaW5lIEFjY2Vzc29yQ2FsbEpJVFN0dWJS
b3V0aW5lX2gKLQotI2lmIEVOQUJMRShKSVQpCi0KLSNpbmNsdWRlICJHQ0F3YXJlSklUU3R1YlJv
dXRpbmUuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENhbGxMaW5rSW5mbzsKLQotLy8g
SklUIHN0dWIgcm91dGluZSBmb3IgdXNlIGJ5IEphdmFTY3JpcHQgYWNjZXNzb3JzLiBUaGVzZSB3
aWxsIGJlIG1ha2luZyBhIEpTCi0vLyBjYWxsIHRoYXQgcmVxdWlyZXMgaW5saW5lIGNhY2hpbmcu
IAotCi1jbGFzcyBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZSA6IHB1YmxpYyBHQ0F3YXJlSklU
U3R1YlJvdXRpbmUgewotcHVibGljOgotICAgIEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lKAot
ICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmLCBWTSYsIHN0ZDo6dW5pcXVlX3B0
cjxDYWxsTGlua0luZm8+KTsKLSAgICAKLSAgICB2aXJ0dWFsIH5BY2Nlc3NvckNhbGxKSVRTdHVi
Um91dGluZSgpOwotICAgIAotICAgIHZpcnR1YWwgYm9vbCB2aXNpdFdlYWsoVk0mKSBvdmVycmlk
ZTsKLSAgICAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5rSW5m
bzsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQot
I2VuZGlmIC8vIEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lX2gKLQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAxODk0OTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNv
cHkpCkBAIC01NjMsNyArNTYzLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYnJhbmNoMzIo
RXF1YWwsIHJlZ3MudGFnR1BSKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFn
KSk7CiAjZW5kaWYKICAgICB9Ci0gICAgCisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAg
IEp1bXAgYnJhbmNoU3RydWN0dXJlKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBUIGxl
ZnRIYW5kU2lkZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewpAQCAtODMyLDYgKzgzMiwx
NSBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAKKyAgICB2b2lkIGJveEJvb2xlYW5QYXlsb2Fk
KGJvb2wgdmFsdWUsIEdQUlJlZyBwYXlsb2FkR1BSKQorICAgIHsKKyNpZiBVU0UoSlNWQUxVRTY0
KQorICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlICsgdmFsdWUpLCBwYXlsb2Fk
R1BSKTsKKyNlbHNlCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKHZhbHVlKSwgcGF5bG9hZEdQ
Uik7CisjZW5kaWYKKyAgICB9CisKICAgICB2b2lkIGJveEJvb2xlYW4oR1BSUmVnIGJvb2xHUFIs
IEpTVmFsdWVSZWdzIGJveGVkUmVncykKICAgICB7CiAgICAgICAgIGJveEJvb2xlYW5QYXlsb2Fk
KGJvb2xHUFIsIGJveGVkUmVncy5wYXlsb2FkR1BSKCkpOwpAQCAtODM5LDYgKzg0OCwxNyBAQCBw
dWJsaWM6CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpLCBi
b3hlZFJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCiAgICAgfQorCisgICAgdm9pZCBib3hJbnQzMihH
UFJSZWcgaW50R1BSLCBKU1ZhbHVlUmVncyBib3hlZFJlZ3MpCisgICAgeworI2lmIFVTRShKU1ZB
TFVFNjQpCisgICAgICAgIG1vdmUoaW50R1BSLCBib3hlZFJlZ3MuZ3ByKCkpOworICAgICAgICBv
cjY0KFRydXN0ZWRJbW02NChUYWdUeXBlTnVtYmVyKSwgYm94ZWRSZWdzLmdwcigpKTsKKyNlbHNl
CisgICAgICAgIG1vdmUoaW50R1BSLCBib3hlZFJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAg
bW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCBib3hlZFJlZ3MudGFnR1BSKCkp
OworI2VuZGlmCisgICAgfQogICAgIAogICAgIHZvaWQgY2FsbEV4Y2VwdGlvbkZ1enooKTsKICAg
ICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5l
Q2FjaGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxODk0OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYs
MjIgKzM2LDI0IEBAIG5hbWVzcGFjZSBKU0MgewogCiBzdGF0aWMgU3RydWN0dXJlU3R1YkluZm8q
IGdhcmJhZ2VTdHViSW5mbygpCiB7Ci0gICAgc3RhdGljIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbyA9IG5ldyBTdHJ1Y3R1cmVTdHViSW5mbygpOworICAgIHN0YXRpYyBTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8gPSBuZXcgU3RydWN0dXJlU3R1YkluZm8oQWNjZXNzVHlwZTo6R2V0KTsK
ICAgICByZXR1cm4gc3R1YkluZm87CiB9CiAKLUpJVElubGluZUNhY2hlR2VuZXJhdG9yOjpKSVRJ
bmxpbmVDYWNoZUdlbmVyYXRvcihDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlKQorSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6
OkpJVElubGluZUNhY2hlR2VuZXJhdG9yKAorICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIEFjY2Vzc1R5cGUgYWNj
ZXNzVHlwZSkKICAgICA6IG1fY29kZUJsb2NrKGNvZGVCbG9jaykKIHsKLSAgICBtX3N0dWJJbmZv
ID0gbV9jb2RlQmxvY2sgPyBtX2NvZGVCbG9jay0+YWRkU3R1YkluZm8oKSA6IGdhcmJhZ2VTdHVi
SW5mbygpOworICAgIG1fc3R1YkluZm8gPSBtX2NvZGVCbG9jayA/IG1fY29kZUJsb2NrLT5hZGRT
dHViSW5mbyhhY2Nlc3NUeXBlKSA6IGdhcmJhZ2VTdHViSW5mbygpOwogICAgIG1fc3R1YkluZm8t
PmNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luOwogICAgIG1fc3R1YkluZm8tPmNhbGxTaXRlSW5kZXgg
PSBjYWxsU2l0ZTsKIH0KIAogSklUQnlJZEdlbmVyYXRvcjo6SklUQnlJZEdlbmVyYXRvcigKLSAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUlu
ZGV4IGNhbGxTaXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywKLSAgICBKU1Zh
bHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxs
TW9kZSkKLSAgICA6IEpJVElubGluZUNhY2hlR2VuZXJhdG9yKGNvZGVCbG9jaywgY29kZU9yaWdp
biwgY2FsbFNpdGUpCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVPcmlnaW4gY29kZU9y
aWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlLAorICAg
IGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1Zh
bHVlUmVncyB2YWx1ZSwKKyAgICBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlKQorICAgIDog
SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoY29kZUJsb2NrLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwg
YWNjZXNzVHlwZSkKICAgICAsIG1fYmFzZShiYXNlKQogICAgICwgbV92YWx1ZSh2YWx1ZSkKIHsK
QEAgLTExNCw3ICsxMTYsOCBAQCB2b2lkIEpJVEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBh
dGhDCiBKSVRHZXRCeUlkR2VuZXJhdG9yOjpKSVRHZXRCeUlkR2VuZXJhdG9yKAogICAgIENvZGVC
bG9jayogY29kZUJsb2NrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2Fs
bFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLAogICAgIEpTVmFsdWVSZWdz
IGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlKQot
ICAgIDogSklUQnlJZEdlbmVyYXRvcihjb2RlQmxvY2ssIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCB1
c2VkUmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSwgc3BpbGxNb2RlKQorICAgIDogSklUQnlJZEdlbmVy
YXRvcigKKyAgICAgICAgY29kZUJsb2NrLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlw
ZTo6R2V0LCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSwgc3BpbGxNb2RlKQogewogICAgIFJF
TEVBU0VfQVNTRVJUKGJhc2UucGF5bG9hZEdQUigpICE9IHZhbHVlLnRhZ0dQUigpKTsKIH0KQEAg
LTE0MCw3ICsxNDMsOCBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yOjpKSVRQdXRCeUlkR2VuZXJhdG9y
CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNp
dGVJbmRleCBjYWxsU2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsCiAgICAg
SlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzY3JhdGNoLCBTcGls
bFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlLAogICAgIEVDTUFNb2RlIGVjbWFNb2RlLCBQdXRLaW5k
IHB1dEtpbmQpCi0gICAgOiBKSVRCeUlkR2VuZXJhdG9yKGNvZGVCbG9jaywgY29kZU9yaWdpbiwg
Y2FsbFNpdGUsIHVzZWRSZWdpc3RlcnMsIGJhc2UsIHZhbHVlLCBzcGlsbE1vZGUpCisgICAgOiBK
SVRCeUlkR2VuZXJhdG9yKAorICAgICAgICBjb2RlQmxvY2ssIGNvZGVPcmlnaW4sIGNhbGxTaXRl
LCBBY2Nlc3NUeXBlOjpQdXQsIHVzZWRSZWdpc3RlcnMsIGJhc2UsIHZhbHVlLCBzcGlsbE1vZGUp
CiAgICAgLCBtX3NjcmF0Y2goc2NyYXRjaCkKICAgICAsIG1fZWNtYU1vZGUoZWNtYU1vZGUpCiAg
ICAgLCBtX3B1dEtpbmQocHV0S2luZCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDE4OTQ5MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNs
dWRlICJQdXRLaW5kLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKKyNpbmNsdWRlICJTdHJ1
Y3R1cmVTdHViSW5mby5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNDEsNyArNDIsNyBAQCBj
bGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvciB7CiBwcm90ZWN0
ZWQ6CiAgICAgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoKSB7IH0KLSAgICBKSVRJbmxpbmVDYWNo
ZUdlbmVyYXRvcihDb2RlQmxvY2sqLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4KTsKKyAgICBK
SVRJbmxpbmVDYWNoZUdlbmVyYXRvcihDb2RlQmxvY2sqLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUlu
ZGV4LCBBY2Nlc3NUeXBlKTsKICAgICAKIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8oKSBjb25zdCB7IHJldHVybiBtX3N0dWJJbmZvOyB9CkBAIC01Niw4ICs1Nyw4IEBA
IHByb3RlY3RlZDoKICAgICBKSVRCeUlkR2VuZXJhdG9yKCkgeyB9CiAKICAgICBKSVRCeUlkR2Vu
ZXJhdG9yKAotICAgICAgICBDb2RlQmxvY2sqLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBj
b25zdCBSZWdpc3RlclNldCYsIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLAot
ICAgICAgICBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlKTsKKyAgICAgICAgQ29kZUJsb2Nr
KiwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgQWNjZXNzVHlwZSwgY29uc3QgUmVnaXN0ZXJT
ZXQmLCBKU1ZhbHVlUmVncyBiYXNlLAorICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZSwgU3BpbGxS
ZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSk7CiAgICAgCiBwdWJsaWM6CiAgICAgdm9pZCByZXBvcnRT
bG93UGF0aENhbGwoTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHNsb3dQYXRoQmVnaW4sIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIGNhbGwpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
ZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE4OTQ5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MywyNCArMTYzLDYg
QEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoYmFzZVZhbHVlLmdldChleGVjLCBpZGVudCwgc2xvdCkpOwogfQogCi1F
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3QoRXhl
Y1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1ZhbHVl
IGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZt
KCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0KLSAgICBJ
ZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgdWlkKTsKLSAgICBBY2Nl
c3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNj
ZXNzVHlwZSk7Ci0KLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShiYXNl
KTsKLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUpOwotICAgIGJvb2wgaGFzUmVzdWx0
ID0gYmFzZVZhbHVlLmdldFByb3BlcnR5U2xvdChleGVjLCBpZGVudCwgc2xvdCk7Ci0gICAgCi0g
ICAgaWYgKGFjY2Vzc1R5cGUgPT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFj
Y2Vzc1R5cGUpKQotICAgICAgICBidWlsZEdldEJ5SURMaXN0KGV4ZWMsIGJhc2VWYWx1ZSwgaWRl
bnQsIHNsb3QsICpzdHViSW5mbyk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGhhc1Jl
c3VsdD8gc2xvdC5nZXRWYWx1ZShleGVjLCBpZGVudCkgOiBqc1VuZGVmaW5lZCgpKTsKLX0KLQog
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUoRXhl
Y1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1ZhbHVl
IGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZt
KCk7CkBAIC0xOTcsNyArMTc5LDYgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25HZQogICAgICAgICBzdHViSW5mby0+c2VlbiA9IHRydWU7CiAgICAgCiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShoYXNSZXN1bHQ/IHNsb3QuZ2V0VmFsdWUoZXhlYywgaWRlbnQpIDog
anNVbmRlZmluZWQoKSk7Ci0KIH0KIAogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25Jbk9wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvLCBKU0NlbGwqIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiBrZXkpCkBAIC0zOTQsOTAgKzM3
NSw2IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWMKICAgICAgICAg
c3R1YkluZm8tPnNlZW4gPSB0cnVlOwogfQogCi12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlJZFN0cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZv
KiBzdHViSW5mbywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKLXsKLSAgICBWTSogdm0gPSAmZXhl
Yy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAg
ICAKLSAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgdWlkKTsK
LSAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHVi
SW5mby0+YWNjZXNzVHlwZSk7Ci0KLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSk7Ci0gICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZEJhc2UpOwotICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgdHJ1ZSwg
ZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwotICAgIAotICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gYmFzZVZhbHVlLmlzQ2VsbCgpID8gYmFzZVZhbHVlLmFzQ2VsbCgpLT5z
dHJ1Y3R1cmUoKnZtKSA6IG51bGxwdHI7IAotICAgIGJhc2VWYWx1ZS5wdXQoZXhlYywgaWRlbnQs
IHZhbHVlLCBzbG90KTsKLQotICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vz
c1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYnVp
bGRQdXRCeUlkTGlzdChleGVjLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgaWRlbnQsIHNsb3QsICpz
dHViSW5mbywgTm90RGlyZWN0KTsKLX0KLQotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5SWROb25TdHJpY3RCdWlsZExpc3QoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8sIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZEJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgVk0qIHZtID0gJmV4
ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0g
ICAgCi0gICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHVpZCk7
Ci0gICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1
YkluZm8tPmFjY2Vzc1R5cGUpOwotCi0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOwotICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRCYXNlKTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIGZhbHNl
LCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7Ci0KLSAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IGJhc2VWYWx1ZS5pc0NlbGwoKSA/IGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3Ry
dWN0dXJlKCp2bSkgOiBudWxscHRyOwotICAgIGJhc2VWYWx1ZS5wdXQoZXhlYywgaWRlbnQsIHZh
bHVlLCBzbG90KTsKLSAgICAKLSAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nl
c3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAg
ICBidWlsZFB1dEJ5SWRMaXN0KGV4ZWMsIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBpZGVudCwgc2xv
dCwgKnN0dWJJbmZvLCBOb3REaXJlY3QpOwotfQotCi12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlJZERpcmVjdFN0cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKLXsKLSAgICBWTSog
dm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2
bSwgdWlkKTsKLSAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NU
eXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSk7Ci0gICAgCi0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIEpTT2JqZWN0KiBiYXNlT2JqZWN0ID0g
YXNPYmplY3QoSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKSk7Ci0gICAgUHV0UHJvcGVydHlT
bG90IHNsb3QoYmFzZU9iamVjdCwgdHJ1ZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250
ZXh0KCkpOwotCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlT2JqZWN0LT5zdHJ1Y3R1
cmUoKnZtKTsgICAgCi0gICAgYmFzZU9iamVjdC0+cHV0RGlyZWN0KCp2bSwgaWRlbnQsIHZhbHVl
LCBzbG90KTsKLSAgICAKLSAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NU
eXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBi
dWlsZFB1dEJ5SWRMaXN0KGV4ZWMsIGJhc2VPYmplY3QsIHN0cnVjdHVyZSwgaWRlbnQsIHNsb3Qs
ICpzdHViSW5mbywgRGlyZWN0KTsKLX0KLQotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5SWREaXJlY3ROb25TdHJpY3RCdWlsZExpc3QoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZEJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7Ci0gICAgCi0gICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0s
IHVpZCk7Ci0gICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlw
ZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpOwotCi0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIEpTT2JqZWN0KiBiYXNlT2JqZWN0ID0gYXNPYmpl
Y3QoSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKSk7Ci0gICAgUHV0UHJvcGVydHlTbG90IHNs
b3QoYmFzZU9iamVjdCwgZmFsc2UsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgp
KTsKLQotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZU9iamVjdC0+c3RydWN0dXJlKCp2
bSk7ICAgIAotICAgIGJhc2VPYmplY3QtPnB1dERpcmVjdCgqdm0sIGlkZW50LCB2YWx1ZSwgc2xv
dCk7Ci0KLSAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHVi
SW5mby0+YWNjZXNzVHlwZSkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBidWlsZFB1dEJ5
SWRMaXN0KGV4ZWMsIGJhc2VPYmplY3QsIHN0cnVjdHVyZSwgaWRlbnQsIHNsb3QsICpzdHViSW5m
bywgRGlyZWN0KTsKLX0KLQogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVT
dG9yYWdlQW5kRmluaXNoUHV0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2UsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIEVuY29kZWRKU1ZhbHVlIHZh
bHVlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDE4OTQ5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKIAog
I2lmIEVOQUJMRShKSVQpCiAKLSNpbmNsdWRlICJBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5o
IgogI2luY2x1ZGUgIkJpbmFyeVN3aXRjaC5oIgogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgog
I2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKQEAgLTQwLDggKzM5LDcgQEAKICNpbmNsdWRlICJK
SVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKLSNpbmNsdWRlICJQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgiCi0jaW5jbHVkZSAiUG9s
eW1vcnBoaWNQdXRCeUlkTGlzdC5oIgorI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCiAj
aW5jbHVkZSAiUmVnRXhwTWF0Y2hlc0FycmF5LmgiCiAjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiU3RhY2tBbGlnbm1lbnQuaCIKQEAgLTk0LDEzICs5Miwx
MCBAQCBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlQmxvY2sqIGNvZGVCCiB9CiAKIHN0YXRp
YyB2b2lkIHJlcGF0Y2hCeUlkU2VsZkFjY2VzcygKLSAgICBWTSYgdm0sIENvZGVCbG9jayogY29k
ZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJl
LAotICAgIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0LCBjb25zdCBGdW5jdGlvblB0ciAmc2xvd1BhdGhGdW5jdGlvbiwKKyAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIGNvbnN0IEZ1bmN0aW9uUHRyICZzbG93
UGF0aEZ1bmN0aW9uLAogICAgIGJvb2wgY29tcGFjdCkKIHsKLSAgICBpZiAoc3RydWN0dXJlLT5u
ZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpCi0gICAgICAgIHZtLnJlZ2lzdGVyV2F0Y2hw
b2ludEZvckltcHVyZVByb3BlcnR5KHByb3BlcnR5TmFtZSwgc3R1YkluZm8uYWRkV2F0Y2hwb2lu
dChjb2RlQmxvY2spKTsKLSAgICAKICAgICAvLyBPbmx5IG9wdGltaXplIG9uY2UhCiAgICAgcmVw
YXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIHNsb3dQYXRo
RnVuY3Rpb24pOwogCkBAIC0xMjksMzMgKzEyNCw0NCBAQCBzdGF0aWMgdm9pZCByZXBhdGNoQnlJ
ZFNlbGZBY2Nlc3MoCiAjZW5kaWYKIH0KIAotc3RhdGljIHZvaWQgY2hlY2tPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbigKLSAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9u
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAotICAg
IENDYWxsSGVscGVycyYgaml0LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNl
cywgR1BSUmVnIHNjcmF0Y2hHUFIpCi17Ci0gICAgaWYgKGNvbmRpdGlvbi5pc1dhdGNoYWJsZUFz
c3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKLSAgICAgICAgY29uZGl0aW9uLm9i
amVjdCgpLT5zdHJ1Y3R1cmUoKS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoCi0gICAgICAgICAg
ICBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaywgY29uZGl0aW9uKSk7Ci0gICAgICAg
IHJldHVybjsKK3N0YXRpYyB2b2lkIHJlc2V0R2V0QnlJRENoZWNrQW5kTG9hZChTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzIgc3RydWN0
dXJlTGFiZWwgPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNl
dCgtKGludHB0cl90KXN0dWJJbmZvLnBhdGNoLmRlbHRhQ2hlY2tJbW1Ub0NhbGwpOworICAgIGlm
IChNYWNyb0Fzc2VtYmxlcjo6Y2FuSnVtcFJlcGxhY2VQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRj
aCgpKSB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1Bh
dGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0
YXJ0T2ZQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaE9uQWRkcmVzcyhzdHJ1Y3R1cmVMYWJlbCks
CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICBz
dGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRD4oc3R1YkluZm8ucGF0Y2guYmFz
ZUdQUiksCisgICAgICAgICAgICAgICAgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KHVudXNlZFBvaW50ZXIpKTsKICAgICB9Cisg
ICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hJbnQzMihzdHJ1Y3R1cmVMYWJlbCwgc3RhdGljX2Nh
c3Q8aW50MzJfdD4odW51c2VkUG9pbnRlcikpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgTWFj
cm9Bc3NlbWJsZXI6OnJlcGF0Y2hDb21wYWN0KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5k
YXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Mb2FkT3JT
dG9yZSksIDApOworI2Vsc2UKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENvbXBhY3Qoc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5m
by5wYXRjaC5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlKSwgMCk7CisgICAgTWFjcm9Bc3NlbWJs
ZXI6OnJlcGF0Y2hDb21wYWN0KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxD
b21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3Rv
cmUpLCAwKTsKKyNlbmRpZgorfQogCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjb25kaXRp
b24ub2JqZWN0KCktPnN0cnVjdHVyZSgpOwotICAgIFJFTEVBU0VfQVNTRVJUKGNvbmRpdGlvbi5z
dHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChz
dHJ1Y3R1cmUpKTsKLSAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihj
b25kaXRpb24ub2JqZWN0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICBmYWlsdXJlQ2FzZXMuYXBwZW5k
KAotICAgICAgICBqaXQuYnJhbmNoU3RydWN0dXJlKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRj
aEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc3RydWN0dXJlKSk7Ci19Ci0KLXN0
YXRpYyB2b2lkIGNoZWNrT2JqZWN0UHJvcGVydHlDb25kaXRpb25zKAotICAgIGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0JiBzZXQsIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8sCi0gICAgQ0NhbGxIZWxwZXJzJiBqaXQsIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBHUFJSZWcgc2NyYXRjaEdQUikKLXsKLSAgICBm
b3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiBzZXQpIHsKLSAg
ICAgICAgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigKLSAgICAgICAgICAgIGNvbmRpdGlv
biwgY29kZUJsb2NrLCBzdHViSW5mbywgaml0LCBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOwor
c3RhdGljIHZvaWQgcmVzZXRQdXRCeUlEQ2hlY2tBbmRMb2FkKFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbykKK3sKKyAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWwzMiBzdHJ1Y3R1cmVMYWJlbCA9
IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KC0oaW50cHRy
X3Qpc3R1YkluZm8ucGF0Y2guZGVsdGFDaGVja0ltbVRvQ2FsbCk7CisgICAgaWYgKE1hY3JvQXNz
ZW1ibGVyOjpjYW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKCkpIHsKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJh
bmNoMzJXaXRoUGF0Y2goCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6c3RhcnRPZlBhdGNo
YWJsZUJyYW5jaDMyV2l0aFBhdGNoT25BZGRyZXNzKHN0cnVjdHVyZUxhYmVsKSwKKyAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0
PE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKSwKKyAg
ICAgICAgICAgICAgICBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAorICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8aW50MzJfdD4odW51c2VkUG9pbnRlcikpOwogICAgIH0KKyAgICBNYWNyb0Fz
c2VtYmxlcjo6cmVwYXRjaEludDMyKHN0cnVjdHVyZUxhYmVsLCBzdGF0aWNfY2FzdDxpbnQzMl90
Pih1bnVzZWRQb2ludGVyKSk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBNYWNyb0Fzc2VtYmxl
cjo6cmVwYXRjaEludDMyKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0
T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCAwKTsKKyNlbHNl
CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hJbnQzMihzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1RhZ0xv
YWRPclN0b3JlKSwgMCk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hJbnQzMihzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5k
ZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSksIDApOworI2VuZGlmCiB9CiAKIHN0YXRpYyB2
b2lkIHJlcGxhY2VXaXRoSnVtcChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIGNvbnN0IE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciB0YXJnZXQpCkBAIC0xNjgsNiArMTc0LDggQEAgc3RhdGljIHZv
aWQgcmVwbGFjZVdpdGhKdW1wKFN0cnVjdHVyZVN0dQogICAgICAgICAgICAgQ29kZUxvY2F0aW9u
TGFiZWwodGFyZ2V0KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICByZXNldEdldEJ5
SURDaGVja0FuZExvYWQoc3R1YkluZm8pOwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBh
dGNoSnVtcCgKICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNl
dCgKQEAgLTE3NSw0MjcgKzE4Myw2IEBAIHN0YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChTdHJ1
Y3R1cmVTdHUKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwodGFyZ2V0KSk7CiB9CiAKLXN0YXRp
YyB2b2lkIGVtaXRSZXN0b3JlU2NyYXRjaChNYWNyb0Fzc2VtYmxlciYgc3R1YkppdCwgYm9vbCBu
ZWVkVG9SZXN0b3JlU2NyYXRjaCwgR1BSUmVnIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpK
dW1wJiBzdWNjZXNzLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCYgZmFpbCwgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IGZhaWx1cmVDYXNlcykKLXsKLSAgICBpZiAobmVlZFRvUmVzdG9yZVNjcmF0Y2gp
IHsKLSAgICAgICAgc3R1YkppdC5wb3BUb1Jlc3RvcmUoc2NyYXRjaEdQUik7Ci0gICAgICAgIAot
ICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBs
aW5rIGZhaWx1cmUgY2FzZXMgaGVyZSwgc28gd2UgY2FuIHBvcCBzY3JhdGNoR1BSLCBhbmQgdGhl
biBqdW1wIGJhY2suCi0gICAgICAgIGZhaWx1cmVDYXNlcy5saW5rKCZzdHViSml0KTsKLSAgICAg
ICAgCi0gICAgICAgIHN0dWJKaXQucG9wVG9SZXN0b3JlKHNjcmF0Y2hHUFIpOwotICAgICAgICAK
LSAgICAgICAgZmFpbCA9IHN0dWJKaXQuanVtcCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIAotICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKLX0KLQotc3RhdGljIHZvaWQgbGlu
a1Jlc3RvcmVTY3JhdGNoKExpbmtCdWZmZXImIHBhdGNoQnVmZmVyLCBib29sIG5lZWRUb1Jlc3Rv
cmVTY3JhdGNoLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzLCBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBmYWlsLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzLCBDb2RlTG9j
YXRpb25MYWJlbCBzdWNjZXNzTGFiZWwsIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlQmVnaW4p
Ci17Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdWNjZXNzTGFiZWwpOwotICAgICAg
ICAKLSAgICBpZiAobmVlZFRvUmVzdG9yZVNjcmF0Y2gpIHsKLSAgICAgICAgcGF0Y2hCdWZmZXIu
bGluayhmYWlsLCBzbG93Q2FzZUJlZ2luKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAK
LSAgICAvLyBsaW5rIGZhaWx1cmUgY2FzZXMgZGlyZWN0bHkgYmFjayB0byBub3JtYWwgcGF0aAot
ICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2VzLCBzbG93Q2FzZUJlZ2luKTsKLX0KLQot
c3RhdGljIHZvaWQgbGlua1Jlc3RvcmVTY3JhdGNoKExpbmtCdWZmZXImIHBhdGNoQnVmZmVyLCBi
b29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3MsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhaWwsIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXMpCi17Ci0gICAgbGlua1Jlc3RvcmVT
Y3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc3VjY2VzcywgZmFpbCwg
ZmFpbHVyZUNhc2VzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChz
dHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7Ci19
Ci0KLWVudW0gQnlJZFN0dWJLaW5kIHsKLSAgICBHZXRWYWx1ZSwKLSAgICBHZXRVbmRlZmluZWQs
Ci0gICAgQ2FsbEdldHRlciwKLSAgICBDYWxsQ3VzdG9tR2V0dGVyLAotICAgIENhbGxTZXR0ZXIs
Ci0gICAgQ2FsbEN1c3RvbVNldHRlcgotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIqIHRvU3RyaW5n
KEJ5SWRTdHViS2luZCBraW5kKQotewotICAgIHN3aXRjaCAoa2luZCkgewotICAgIGNhc2UgR2V0
VmFsdWU6Ci0gICAgICAgIHJldHVybiAiR2V0VmFsdWUiOwotICAgIGNhc2UgR2V0VW5kZWZpbmVk
OgotICAgICAgICByZXR1cm4gIkdldFVuZGVmaW5lZCI7Ci0gICAgY2FzZSBDYWxsR2V0dGVyOgot
ICAgICAgICByZXR1cm4gIkNhbGxHZXR0ZXIiOwotICAgIGNhc2UgQ2FsbEN1c3RvbUdldHRlcjoK
LSAgICAgICAgcmV0dXJuICJDYWxsQ3VzdG9tR2V0dGVyIjsKLSAgICBjYXNlIENhbGxTZXR0ZXI6
Ci0gICAgICAgIHJldHVybiAiQ2FsbFNldHRlciI7Ci0gICAgY2FzZSBDYWxsQ3VzdG9tU2V0dGVy
OgotICAgICAgICByZXR1cm4gIkNhbGxDdXN0b21TZXR0ZXIiOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIH0KLX0KLQotc3RhdGljIEJ5SWRTdHViS2luZCBraW5kRm9yKGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCkKLXsKLSAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkpCi0gICAgICAg
IHJldHVybiBHZXRWYWx1ZTsKLSAgICBpZiAoc2xvdC5pc1Vuc2V0KCkpCi0gICAgICAgIHJldHVy
biBHZXRVbmRlZmluZWQ7Ci0gICAgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkKLSAgICAg
ICAgcmV0dXJuIENhbGxDdXN0b21HZXR0ZXI7Ci0gICAgUkVMRUFTRV9BU1NFUlQoc2xvdC5pc0Nh
Y2hlYWJsZUdldHRlcigpKTsKLSAgICByZXR1cm4gQ2FsbEdldHRlcjsKLX0KLQotc3RhdGljIEZ1
bmN0aW9uUHRyIGN1c3RvbUZvcihjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0gICAgaWYg
KCFzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkpCi0gICAgICAgIHJldHVybiBGdW5jdGlvblB0cigp
OwotICAgIHJldHVybiBGdW5jdGlvblB0cihzbG90LmN1c3RvbUdldHRlcigpKTsKLX0KLQotc3Rh
dGljIEJ5SWRTdHViS2luZCBraW5kRm9yKGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKLXsK
LSAgICBSRUxFQVNFX0FTU0VSVCghc2xvdC5pc0NhY2hlYWJsZVB1dCgpKTsKLSAgICBpZiAoc2xv
dC5pc0NhY2hlYWJsZVNldHRlcigpKQotICAgICAgICByZXR1cm4gQ2FsbFNldHRlcjsKLSAgICBS
RUxFQVNFX0FTU0VSVChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkpOwotICAgIHJldHVybiBDYWxs
Q3VzdG9tU2V0dGVyOwotfQotCi1zdGF0aWMgRnVuY3Rpb25QdHIgY3VzdG9tRm9yKGNvbnN0IFB1
dFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGVDdXN0b20o
KSkKLSAgICAgICAgcmV0dXJuIEZ1bmN0aW9uUHRyKCk7Ci0gICAgcmV0dXJuIEZ1bmN0aW9uUHRy
KHNsb3QuY3VzdG9tU2V0dGVyKCkpOwotfQotCi1zdGF0aWMgYm9vbCBnZW5lcmF0ZUJ5SWRTdHVi
KAotICAgIEV4ZWNTdGF0ZSogZXhlYywgQnlJZFN0dWJLaW5kIGtpbmQsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwKLSAgICBGdW5jdGlvblB0ciBjdXN0b20sIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbywgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlv
blNldCwKLSAgICBKU09iamVjdCogYWx0ZXJuYXRlQmFzZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgYm9vbCBsb2FkVGFyZ2V0RnJvbVByb3h5LAotICAgIFdh
dGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQsIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJl
bCwgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VMYWJlbCwKLSAgICBSZWZQdHI8SklUU3R1YlJv
dXRpbmU+JiBzdHViUm91dGluZSkKLXsKLSAgICBBU1NFUlQoY29uZGl0aW9uU2V0LnN0cnVjdHVy
ZXNFbnN1cmVWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpOwotICAg
IAotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGlj
X2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKTsKLSAgICBKU1ZhbHVlUmVncyB2
YWx1ZVJlZ3MgPSBKU1ZhbHVlUmVncygKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBz
dGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVlVGFnR1BSKSwKLSNlbmRpZgot
ICAgICAgICBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVlR1BSKSk7Ci0g
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBUZW1wUmVnaXN0ZXJTZXQoc3R1YkluZm8ucGF0Y2gudXNl
ZFJlZ2lzdGVycykuZ2V0RnJlZUdQUigpOwotICAgIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2gg
PSBzY3JhdGNoR1BSID09IEludmFsaWRHUFJSZWc7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIW5lZWRU
b1Jlc3RvcmVTY3JhdGNoIHx8IChraW5kID09IEdldFZhbHVlIHx8IGtpbmQgPT0gR2V0VW5kZWZp
bmVkKSk7Ci0gICAgCi0gICAgQ0NhbGxIZWxwZXJzIHN0dWJKaXQoJmV4ZWMtPnZtKCksIGV4ZWMt
PmNvZGVCbG9jaygpKTsKLSAgICBpZiAobmVlZFRvUmVzdG9yZVNjcmF0Y2gpIHsKLSAgICAgICAg
c2NyYXRjaEdQUiA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUigKLSAgICAgICAg
ICAgIGJhc2VHUFIsIHZhbHVlUmVncy50YWdHUFIoKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSk7
Ci0gICAgICAgIHN0dWJKaXQucHVzaFRvU2F2ZShzY3JhdGNoR1BSKTsKLSAgICAgICAgbmVlZFRv
UmVzdG9yZVNjcmF0Y2ggPSB0cnVlOwotICAgIH0KLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgZmFpbHVyZUNhc2VzOwotCi0gICAgR1BSUmVnIGJhc2VGb3JHZXRHUFI7Ci0gICAg
aWYgKGxvYWRUYXJnZXRGcm9tUHJveHkpIHsKLSAgICAgICAgYmFzZUZvckdldEdQUiA9IHZhbHVl
UmVncy5wYXlsb2FkR1BSKCk7Ci0gICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5i
cmFuY2g4KAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCAKLSAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBl
T2Zmc2V0KCkpLCAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoUHVy
ZUZvcndhcmRpbmdQcm94eVR5cGUpKSk7Ci0KLSAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTUHJveHk6OnRhcmdldE9mZnNldCgpKSwgc2Ny
YXRjaEdQUik7Ci0gICAgICAgIAotICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQu
YnJhbmNoU3RydWN0dXJlKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCAK
LSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSksCi0gICAgICAgICAgICBzdHJ1Y3R1cmUpKTsKLSAgICB9IGVs
c2UgewotICAgICAgICBiYXNlRm9yR2V0R1BSID0gYmFzZUdQUjsKLQotICAgICAgICBmYWlsdXJl
Q2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoU3RydWN0dXJlKAotICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VGb3JHZXRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIAotICAgICAgICAg
ICAgc3RydWN0dXJlKSk7Ci0gICAgfQotCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVj
LT5jb2RlQmxvY2soKTsKLSAgICBpZiAoc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRj
aHBvaW50KCkgfHwgY29uZGl0aW9uU2V0Lm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkK
LSAgICAgICAgdm0tPnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KHByb3BlcnR5
TmFtZSwgc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKLQotICAgIGlmICh3YXRj
aHBvaW50U2V0KQotICAgICAgICB3YXRjaHBvaW50U2V0LT5hZGQoc3R1YkluZm8uYWRkV2F0Y2hw
b2ludChjb2RlQmxvY2spKTsKLQotICAgIGNoZWNrT2JqZWN0UHJvcGVydHlDb25kaXRpb25zKAot
ICAgICAgICBjb25kaXRpb25TZXQsIGNvZGVCbG9jaywgc3R1YkluZm8sIHN0dWJKaXQsIGZhaWx1
cmVDYXNlcywgc2NyYXRjaEdQUik7Ci0KLSAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7
Ci0gICAgICAgIFN0cnVjdHVyZSogY3VyclN0cnVjdHVyZTsKLSAgICAgICAgaWYgKGNvbmRpdGlv
blNldC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjdXJyU3RydWN0dXJlID0gc3RydWN0dXJlOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBjdXJyU3RydWN0dXJlID0gY29uZGl0aW9uU2V0LnNs
b3RCYXNlQ29uZGl0aW9uKCkub2JqZWN0KCktPnN0cnVjdHVyZSgpOwotICAgICAgICBjdXJyU3Ry
dWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHMoKnZtLCBvZmZzZXQp
OwotICAgIH0KLSAgICAKLSAgICBHUFJSZWcgYmFzZUZvckFjY2Vzc0dQUiA9IEludmFsaWRHUFJS
ZWc7Ci0gICAgaWYgKGtpbmQgIT0gR2V0VW5kZWZpbmVkKSB7Ci0gICAgICAgIGlmICghY29uZGl0
aW9uU2V0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgLy8gV2UgY291bGQgaGF2ZSBjbG9iYmVy
ZWQgc2NyYXRjaEdQUiBlYXJsaWVyLCBzbyB3ZSBoYXZlIHRvIHJlbG9hZCBmcm9tIGJhc2VHUFIg
dG8gZ2V0IHRoZSB0YXJnZXQuCi0gICAgICAgICAgICBpZiAobG9hZFRhcmdldEZyb21Qcm94eSkK
LSAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNQcm94eTo6dGFyZ2V0T2Zmc2V0KCkpLCBiYXNlRm9yR2V0R1BSKTsKLSAgICAg
ICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihhbHRlcm5h
dGVCYXNlKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBiYXNlRm9yQWNjZXNzR1BSID0gc2Ny
YXRjaEdQUjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIEZvciBwcm94eSBvYmpl
Y3RzLCB3ZSBuZWVkIHRvIGRvIGFsbCB0aGUgU3RydWN0dXJlIGNoZWNrcyBiZWZvcmUgbW92aW5n
IHRoZSBiYXNlR1BSIGludG8KLSAgICAgICAgICAgIC8vIGJhc2VGb3JHZXRHUFIgYmVjYXVzZSBp
ZiB3ZSBmYWlsIGFueSBvZiB0aGUgY2hlY2tzIHRoZW4gd2Ugd291bGQgaGF2ZSB0aGUgd3Jvbmcg
dmFsdWUgaW4gYmFzZUdQUgotICAgICAgICAgICAgLy8gb24gdGhlIHNsb3cgcGF0aC4KLSAgICAg
ICAgICAgIGlmIChsb2FkVGFyZ2V0RnJvbVByb3h5KQotICAgICAgICAgICAgICAgIHN0dWJKaXQu
bW92ZShzY3JhdGNoR1BSLCBiYXNlRm9yR2V0R1BSKTsKLSAgICAgICAgICAgIGJhc2VGb3JBY2Nl
c3NHUFIgPSBiYXNlRm9yR2V0R1BSOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgR1BSUmVnIGxv
YWRlZFZhbHVlR1BSID0gSW52YWxpZEdQUlJlZzsKLSAgICBpZiAoa2luZCA9PSBHZXRVbmRlZmlu
ZWQpCi0gICAgICAgIHN0dWJKaXQubW92ZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCB2YWx1
ZVJlZ3MpOwotICAgIGVsc2UgaWYgKGtpbmQgIT0gQ2FsbEN1c3RvbUdldHRlciAmJiBraW5kICE9
IENhbGxDdXN0b21TZXR0ZXIpIHsKLSAgICAgICAgaWYgKGtpbmQgPT0gR2V0VmFsdWUpCi0gICAg
ICAgICAgICBsb2FkZWRWYWx1ZUdQUiA9IHZhbHVlUmVncy5wYXlsb2FkR1BSKCk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSID0gc2NyYXRjaEdQUjsKLSAgICAgICAg
Ci0gICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSOwotICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQo
b2Zmc2V0KSkKLSAgICAgICAgICAgIHN0b3JhZ2VHUFIgPSBiYXNlRm9yQWNjZXNzR1BSOwotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlRm9yQWNjZXNzR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBs
b2FkZWRWYWx1ZUdQUik7Ci0gICAgICAgICAgICBzdG9yYWdlR1BSID0gbG9hZGVkVmFsdWVHUFI7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgc3R1Ykpp
dC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgb2Zmc2V0UmVsYXRp
dmVUb0Jhc2Uob2Zmc2V0KSksIGxvYWRlZFZhbHVlR1BSKTsKLSNlbHNlCi0gICAgICAgIGlmIChr
aW5kID09IEdldFZhbHVlKQotICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uob2Zmc2V0KSArIFRh
Z09mZnNldCksIHZhbHVlUmVncy50YWdHUFIoKSk7Ci0gICAgICAgIHN0dWJKaXQubG9hZDMyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKG9m
ZnNldCkgKyBQYXlsb2FkT2Zmc2V0KSwgbG9hZGVkVmFsdWVHUFIpOwotI2VuZGlmCi0gICAgfQot
Ci0gICAgLy8gU3R1ZmYgZm9yIGN1c3RvbSBnZXR0ZXJzLgotICAgIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIG9wZXJhdGlvbkNhbGw7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgaGFuZGxlckNhbGw7
Ci0KLSAgICAvLyBTdHVmZiBmb3IgSlMgZ2V0dGVycy4KLSAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0
YUxhYmVsUHRyIGFkZHJlc3NPZkxpbmtGdW5jdGlvbkNoZWNrOwotICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIGZhc3RQYXRoQ2FsbDsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBzbG93UGF0aENh
bGw7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rSW5mbz4gY2FsbExpbmtJbmZvOwotCi0g
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzcywgZmFpbDsKLSAgICBpZiAoa2luZCAhPSBH
ZXRWYWx1ZSAmJiBraW5kICE9IEdldFVuZGVmaW5lZCkgewotICAgICAgICAvLyBOZWVkIHRvIG1h
a2Ugc3VyZSB0aGF0IHdoZW5ldmVyIHRoaXMgY2FsbCBpcyBtYWRlIGluIHRoZSBmdXR1cmUsIHdl
IHJlbWVtYmVyIHRoZQotICAgICAgICAvLyBwbGFjZSB0aGF0IHdlIG1hZGUgaXQgZnJvbS4gSXQg
anVzdCBzbyBoYXBwZW5zIHRvIGJlIHRoZSBwbGFjZSB0aGF0IHdlIGFyZSBhdAotICAgICAgICAv
LyByaWdodCBub3chCi0gICAgICAgIHN0dWJKaXQuc3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKHN0dWJJbmZvLmNhbGxTaXRlSW5kZXguYml0cygpKSwKLSAgICAgICAgICAgIEND
YWxsSGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oSlNTdGFjazo6
QXJndW1lbnRDb3VudCkpKTsKLQotICAgICAgICBpZiAoa2luZCA9PSBDYWxsR2V0dGVyIHx8IGtp
bmQgPT0gQ2FsbFNldHRlcikgewotICAgICAgICAgICAgLy8gQ3JlYXRlIGEgSlMgY2FsbCB1c2lu
ZyBhIEpTIGNhbGwgaW5saW5lIGNhY2hlLiBBc3N1bWUgdGhhdDoKLSAgICAgICAgICAgIC8vCi0g
ICAgICAgICAgICAvLyAtIFNQIGlzIGFsaWduZWQgYW5kIHJlcHJlc2VudHMgdGhlIGV4dGVudCBv
ZiB0aGUgY2FsbGluZyBjb21waWxlcidzIHN0YWNrIHVzYWdlLgotICAgICAgICAgICAgLy8KLSAg
ICAgICAgICAgIC8vIC0gRlAgaXMgc2V0IGNvcnJlY3RseSAoaS5lLiBpdCBwb2ludHMgdG8gdGhl
IGNhbGxlcidzIGNhbGwgZnJhbWUgaGVhZGVyKS4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAg
ICAvLyAtIFNQIC0gRlAgaXMgYW4gYWxpZ25lZCBkaWZmZXJlbmNlLgotICAgICAgICAgICAgLy8K
LSAgICAgICAgICAgIC8vIC0gQW55IGJ5dGUgYmV0d2VlbiBGUCAoZXhjbHVzaXZlKSBhbmQgU1Ag
KGluY2x1c2l2ZSkgY291bGQgYmUgbGl2ZSBpbiB0aGUgY2FsbGluZwotICAgICAgICAgICAgLy8g
ICBjb2RlLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIFRoZXJlZm9yZSwgd2UgdGVt
cG9yYXJpbHkgZ3JvdyB0aGUgc3RhY2sgZm9yIHRoZSBwdXJwb3NlIG9mIHRoZSBjYWxsIGFuZCB0
aGVuCi0gICAgICAgICAgICAvLyBzaHJpbmsgaXQgYWZ0ZXIuCi0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIGNhbGxMaW5rSW5mbyA9IHN0ZDo6bWFrZV91bmlxdWU8Q2FsbExpbmtJbmZvPigpOwot
Ci0gICAgICAgICAgICAvLyBGSVhNRTogSWYgd2UgZ2VuZXJhdGVkIGEgcG9seW1vcnBoaWMgY2Fs
bCBzdHViIHRoYXQganVtcGVkIGJhY2sgdG8gdGhlIGdldHRlcgotICAgICAgICAgICAgLy8gc3R1
Yiwgd2hpY2ggdGhlbiBqdW1wZWQgYmFjayB0byB0aGUgbWFpbiBjb2RlLCB0aGVuIHdlJ2QgaGF2
ZSBhIHJlYWNoYWJpbGl0eQotICAgICAgICAgICAgLy8gc2l0dWF0aW9uIHRoYXQgdGhlIEdDIGRv
ZXNuJ3Qga25vdyBhYm91dC4gVGhlIEdDIHdvdWxkIGVuc3VyZSB0aGF0IHRoZSBwb2x5bW9ycGhp
YwotICAgICAgICAgICAgLy8gY2FsbCBzdHViIHN0YXllZCBhbGl2ZSwgYW5kIGl0IHdvdWxkIGVu
c3VyZSB0aGF0IHRoZSBtYWluIGNvZGUgc3RheWVkIGFsaXZlLCBidXQKLSAgICAgICAgICAgIC8v
IGl0IHdvdWxkbid0IGtub3cgdGhhdCB0aGUgZ2V0dGVyIHN0dWIgd2FzIGFsaXZlLiBJZGVhbGx5
IEpJVCBzdHViIHJvdXRpbmVzIHdvdWxkCi0gICAgICAgICAgICAvLyBiZSBHQyBvYmplY3RzLCBh
bmQgdGhlbiB3ZSdkIGJlIGFibGUgdG8gc2F5IHRoYXQgdGhlIHBvbHltb3JwaGljIGNhbGwgc3R1
YiBoYXMgYQotICAgICAgICAgICAgLy8gcmVmZXJlbmNlIHRvIHRoZSBnZXR0ZXIgc3R1Yi4KLSAg
ICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDg5
MTQKLSAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+ZGlzYWxsb3dTdHVicygpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNh
bGwsIHN0dWJJbmZvLmNvZGVPcmlnaW4sIGxvYWRlZFZhbHVlR1BSKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGRvbmU7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIC8vIFRoZXJlIGlzIGEgJ3RoaXMnIGFyZ3VtZW50IGJ1dCBub3RoaW5nIGVs
c2UuCi0gICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlBhcmFtZXRlcnMgPSAxOwotICAgICAg
ICAgICAgLy8gLi4uIHVubGVzcyB3ZSdyZSBjYWxsaW5nIGEgc2V0dGVyLgotICAgICAgICAgICAg
aWYgKGtpbmQgPT0gQ2FsbFNldHRlcikKLSAgICAgICAgICAgICAgICBudW1iZXJPZlBhcmFtZXRl
cnMrKzsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gR2V0IHRoZSBhY2Nlc3NvcjsgaWYg
dGhlcmUgYWluJ3Qgb25lIHRoZW4gdGhlIHJlc3VsdCBpcyBqc1VuZGVmaW5lZCgpLgotICAgICAg
ICAgICAgaWYgKGtpbmQgPT0gQ2FsbFNldHRlcikgewotICAgICAgICAgICAgICAgIHN0dWJKaXQu
bG9hZFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobG9h
ZGVkVmFsdWVHUFIsIEdldHRlclNldHRlcjo6b2Zmc2V0T2ZTZXR0ZXIoKSksCi0gICAgICAgICAg
ICAgICAgICAgIGxvYWRlZFZhbHVlR1BSKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgc3R1YkppdC5sb2FkUHRyKAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhsb2FkZWRWYWx1ZUdQUiwgR2V0dGVyU2V0dGVyOjpvZmZzZXRPZkdldHRl
cigpKSwKLSAgICAgICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgcmV0dXJuVW5kZWZpbmVkID0gc3R1
YkppdC5icmFuY2hUZXN0UHRyKAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJv
LCBsb2FkZWRWYWx1ZUdQUik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHVuc2lnbmVkIG51
bWJlck9mUmVnc0ZvckNhbGwgPQotICAgICAgICAgICAgICAgIEpTU3RhY2s6OkNhbGxGcmFtZUhl
YWRlclNpemUgKyBudW1iZXJPZlBhcmFtZXRlcnM7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IHVuc2lnbmVkIG51bWJlck9mQnl0ZXNGb3JDYWxsID0KLSAgICAgICAgICAgICAgICBudW1iZXJP
ZlJlZ3NGb3JDYWxsICogc2l6ZW9mKFJlZ2lzdGVyKSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBD
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgdW5zaWduZWQgYWxpZ25lZE51bWJlck9mQnl0
ZXNGb3JDYWxsID0KLSAgICAgICAgICAgICAgICBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3Rh
Y2tBbGlnbm1lbnRCeXRlcygpLCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIHN0dWJKaXQuc3ViUHRyKAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxsKSwKLSAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyBjYWxsZWVGcmFtZSA9IE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpz
dGFja1BvaW50ZXJSZWdpc3RlciwKLSAgICAgICAgICAgICAgICAtc3RhdGljX2Nhc3Q8cHRyZGlm
Zl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgc3R1YkppdC5zdG9yZTMyKAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIobnVtYmVyT2ZQYXJhbWV0ZXJzKSwKLSAgICAgICAgICAgICAgICBjYWxsZWVGcmFt
ZS53aXRoT2Zmc2V0KAotICAgICAgICAgICAgICAgICAgICBKU1N0YWNrOjpBcmd1bWVudENvdW50
ICogc2l6ZW9mKFJlZ2lzdGVyKSArIFBheWxvYWRPZmZzZXQpKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgc3R1YkppdC5zdG9yZUNlbGwoCi0gICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVH
UFIsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoSlNTdGFjazo6Q2FsbGVlICogc2l6ZW9mKFJlZ2lz
dGVyKSkpOwotCi0gICAgICAgICAgICBzdHViSml0LnN0b3JlQ2VsbCgKLSAgICAgICAgICAgICAg
ICBiYXNlRm9yR2V0R1BSLAotICAgICAgICAgICAgICAgIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQo
Ci0gICAgICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDApLm9mZnNl
dCgpICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
a2luZCA9PSBDYWxsU2V0dGVyKSB7Ci0gICAgICAgICAgICAgICAgc3R1YkppdC5zdG9yZVZhbHVl
KAotICAgICAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MsCi0gICAgICAgICAgICAgICAgICAgIGNh
bGxlZUZyYW1lLndpdGhPZmZzZXQoCi0gICAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudCgxKS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
c2xvd0Nhc2UgPSBzdHViSml0LmJyYW5jaFB0cldpdGhQYXRjaCgKLSAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGxvYWRlZFZhbHVlR1BSLCBhZGRyZXNzT2ZMaW5rRnVu
Y3Rpb25DaGVjaywKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cigwKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZhc3RQYXRoQ2FsbCA9IHN0dWJKaXQu
bmVhckNhbGwoKTsKLQotICAgICAgICAgICAgc3R1YkppdC5hZGRQdHIoCi0gICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihjb2RlQmxvY2stPnN0YWNrUG9pbnRlck9m
ZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksCi0gICAgICAgICAgICAgICAgR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKLSAgICAgICAgICAgIGlmIChraW5kID09IENhbGxHZXR0ZXIpCi0gICAg
ICAgICAgICAgICAgc3R1YkppdC5zZXR1cFJlc3VsdHModmFsdWVSZWdzKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgZG9uZS5hcHBlbmQoc3R1YkppdC5qdW1wKCkpOwotICAgICAgICAgICAg
c2xvd0Nhc2UubGluaygmc3R1YkppdCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN0dWJK
aXQubW92ZShsb2FkZWRWYWx1ZUdQUiwgR1BSSW5mbzo6cmVnVDApOwotI2lmIFVTRShKU1ZBTFVF
MzJfNjQpCi0gICAgICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgR1BSSW5mbzo6cmVnVDEpOwotI2VuZGlmCi0gICAgICAg
ICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJ
bmZvLmdldCgpKSwgR1BSSW5mbzo6cmVnVDIpOwotICAgICAgICAgICAgc2xvd1BhdGhDYWxsID0g
c3R1YkppdC5uZWFyQ2FsbCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzdHViSml0LmFk
ZFB0cigKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGNvZGVC
bG9jay0+c3RhY2tQb2ludGVyT2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwKLSAgICAgICAg
ICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKLSAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgICAgICAgICAgaWYgKGtpbmQg
PT0gQ2FsbEdldHRlcikKLSAgICAgICAgICAgICAgICBzdHViSml0LnNldHVwUmVzdWx0cyh2YWx1
ZVJlZ3MpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBkb25lLmFwcGVuZChzdHViSml0Lmp1
bXAoKSk7Ci0gICAgICAgICAgICByZXR1cm5VbmRlZmluZWQubGluaygmc3R1YkppdCk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmIChraW5kID09IENhbGxHZXR0ZXIpCi0gICAgICAgICAg
ICAgICAgc3R1YkppdC5tb3ZlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIHZhbHVlUmVncyk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGRvbmUubGluaygmc3R1YkppdCk7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBnZXR0ZXI6IEVuY29kZWRKU1ZhbHVlICgqR2V0VmFs
dWVGdW5jKShFeGVjU3RhdGUqLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgIC8vIHNldHRlcjogdm9pZCAoKlB1
dFZhbHVlRnVuYykoRXhlY1N0YXRlKiwgSlNPYmplY3QqIGJhc2UsIEVuY29kZWRKU1ZhbHVlIHRo
aXNPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAg
ICAgICAgICAgaWYgKGtpbmQgPT0gQ2FsbEN1c3RvbUdldHRlcikKLSAgICAgICAgICAgICAgICBz
dHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlRm9yQWNjZXNzR1BSLCBiYXNl
Rm9yR2V0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihwcm9wZXJ0eU5hbWUuaW1w
bCgpKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc3R1YkppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUZvckFjY2Vzc0dQUiwgYmFzZUZvckdldEdQUiwgdmFs
dWVSZWdzLmdwcigpKTsKLSNlbHNlCi0gICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsQ3VzdG9t
R2V0dGVyKQotICAgICAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKGJhc2VGb3JBY2Nlc3NHUFIsIGJhc2VGb3JHZXRHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KHByb3BlcnR5TmFtZS5pbXBsKCkpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlRm9yQWNjZXNzR1BSLCBi
YXNlRm9yR2V0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxU
YWcpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB2YWx1ZVJlZ3MudGFnR1BSKCkpOwotI2VuZGlm
Ci0gICAgICAgICAgICBzdHViSml0LnN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCAmdm0tPnRvcENhbGxGcmFtZSk7Ci0KLSAgICAgICAgICAgIG9wZXJhdGlvbkNhbGwgPSBzdHVi
Sml0LmNhbGwoKTsKLSAgICAgICAgICAgIGlmIChraW5kID09IENhbGxDdXN0b21HZXR0ZXIpCi0g
ICAgICAgICAgICAgICAgc3R1YkppdC5zZXR1cFJlc3VsdHModmFsdWVSZWdzKTsKLSAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vRXhjZXB0aW9uID0gc3R1YkppdC5lbWl0RXhjZXB0
aW9uQ2hlY2soQ0NhbGxIZWxwZXJzOjpJbnZlcnRlZEV4Y2VwdGlvbkNoZWNrKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50cyhDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIodm0pLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgICAgICAg
ICBoYW5kbGVyQ2FsbCA9IHN0dWJKaXQuY2FsbCgpOwotICAgICAgICAgICAgc3R1YkppdC5qdW1w
VG9FeGNlcHRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG5vRXhjZXB0
aW9uLmxpbmsoJnN0dWJKaXQpOwotICAgICAgICB9Ci0gICAgfQotICAgIGVtaXRSZXN0b3JlU2Ny
YXRjaChzdHViSml0LCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc2NyYXRjaEdQUiwgc3VjY2Vzcywg
ZmFpbCwgZmFpbHVyZUNhc2VzKTsKLSAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2
bSwgc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCksIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7Ci0g
ICAgaWYgKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAKLSAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jl
c3RvcmVTY3JhdGNoLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMsIHN1Y2Nlc3NMYWJlbCwg
c2xvd0Nhc2VMYWJlbCk7Ci0gICAgaWYgKGtpbmQgPT0gQ2FsbEN1c3RvbUdldHRlciB8fCBraW5k
ID09IENhbGxDdXN0b21TZXR0ZXIpIHsKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhvcGVyYXRp
b25DYWxsLCBjdXN0b20pOwotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGhhbmRsZXJDYWxsLCBs
b29rdXBFeGNlcHRpb25IYW5kbGVyKTsKLSAgICB9IGVsc2UgaWYgKGtpbmQgPT0gQ2FsbEdldHRl
ciB8fCBraW5kID09IENhbGxTZXR0ZXIpIHsKLSAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDYWxs
TG9jYXRpb25zKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChzbG93UGF0aENhbGwpLAot
ICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZihhZGRyZXNzT2ZMaW5rRnVuY3Rpb25D
aGVjayksCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoZmFzdFBh
dGhDYWxsKSk7Ci0KLSAgICAgICAgcGF0Y2hCdWZmZXIubGluaygKLSAgICAgICAgICAgIHNsb3dQ
YXRoQ2FsbCwgQ29kZUxvY2F0aW9uTGFiZWwodm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dl
bmVyYXRvcikuY29kZSgpKSk7Ci0gICAgfQotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBjb2RlID0gRklOQUxJWkVfQ09ERV9GT1IoCi0gICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLCBw
YXRjaEJ1ZmZlciwKLSAgICAgICAgKCIlcyBhY2Nlc3Mgc3R1YiBmb3IgJXMsIHJldHVybiBwb2lu
dCAlcCIsCi0gICAgICAgICAgICB0b1N0cmluZyhraW5kKSwgdG9DU3RyaW5nKCpleGVjLT5jb2Rl
QmxvY2soKSkuZGF0YSgpLAotICAgICAgICAgICAgc3VjY2Vzc0xhYmVsLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpKTsKLSAgICAKLSAgICBpZiAoa2luZCA9PSBDYWxsR2V0dGVyIHx8IGtpbmQgPT0gQ2Fs
bFNldHRlcikKLSAgICAgICAgc3R1YlJvdXRpbmUgPSBhZG9wdFJlZihuZXcgQWNjZXNzb3JDYWxs
SklUU3R1YlJvdXRpbmUoY29kZSwgKnZtLCBXVEY6Om1vdmUoY2FsbExpbmtJbmZvKSkpOwotICAg
IGVsc2UKLSAgICAgICAgc3R1YlJvdXRpbmUgPSBjcmVhdGVKSVRTdHViUm91dGluZShjb2RlLCAq
dm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHRydWUpOwotICAgIAotICAgIHJldHVy
biB0cnVlOwotfQotCiBlbnVtIElubGluZUNhY2hlQWN0aW9uIHsKICAgICBHaXZlVXBPbkNhY2hl
LAogICAgIFJldHJ5Q2FjaGVMYXRlciwKQEAgLTYyOSwxMzIgKzIxNiw5OCBAQCBzdGF0aWMgSW5s
aW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeUlECiAgICAgaWYgKE9wdGlvbnM6OmZvcmNlSUNG
YWlsdXJlKCkpCiAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogICAgIAotICAgIC8vIEZJ
WE1FOiBXcml0ZSBhIHRlc3QgdGhhdCBwcm92ZXMgd2UgbmVlZCB0byBjaGVjayBmb3IgcmVjdXJz
aW9uIGhlcmUganVzdAotICAgIC8vIGxpa2UgdGhlIGludGVycHJldGVyIGRvZXMsIHRoZW4gYWRk
IGEgY2hlY2sgZm9yIHJlY3Vyc2lvbi4KKyAgICAvLyBGSVhNRTogQ2FjaGUgcHJvcGVydHkgYWNj
ZXNzIGZvciBpbW1lZGlhdGVzLgorICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQorICAgICAg
ICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhl
Yy0+Y29kZUJsb2NrKCk7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0KLSAgICBpZiAoKGlz
SlNBcnJheShiYXNlVmFsdWUpIHx8IGlzSlNTdHJpbmcoYmFzZVZhbHVlKSkgJiYgcHJvcGVydHlO
YW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKLSAgICAgICAgR1BSUmVnIGJh
c2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmJhc2VHUFIpOwotI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIEdQUlJlZyByZXN1bHRUYWdHUFIgPSBzdGF0aWNf
Y2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVlVGFnR1BSKTsKLSNlbmRpZgotICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52
YWx1ZUdQUik7Ci0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXIgc3R1YkppdDsKLQotICAgICAgICBp
ZiAoaXNKU0FycmF5KGJhc2VWYWx1ZSkpIHsKLSAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BS
ID0gVGVtcFJlZ2lzdGVyU2V0KHN0dWJJbmZvLnBhdGNoLnVzZWRSZWdpc3RlcnMpLmdldEZyZWVH
UFIoKTsKLSAgICAgICAgICAgIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSBmYWxzZTsKLQot
ICAgICAgICAgICAgaWYgKHNjcmF0Y2hHUFIgPT0gSW52YWxpZEdQUlJlZykgewotI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgICAgICAgICAgICAgc2NyYXRjaEdQUiA9IEFzc2VtYmx5SGVscGVyczo6
c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCByZXN1bHRHUFIpOwotI2Vsc2UKLSAgICAgICAgICAg
ICAgICBzY3JhdGNoR1BSID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VH
UFIsIHJlc3VsdEdQUiwgcmVzdWx0VGFnR1BSKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIHN0
dWJKaXQucHVzaFRvU2F2ZShzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBuZWVkVG9SZXN0
b3JlU2NyYXRjaCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7Ci0KLSAgICAgICAgICAgIHN0dWJKaXQubG9h
ZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjppbmRleGluZ1R5cGVP
ZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChz
dHViSml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaEdQUiwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihJc0FycmF5KSkpOwotICAgICAgICAgICAgZmFpbHVy
ZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywg
c2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFz
aykpKTsKLQotICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwot
ICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRj
aEdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAg
ICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpMZXNzVGhhbiwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSkp
OwotCi0gICAgICAgICAgICBzdHViSml0Lm1vdmUoc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKLSNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgc3R1YkppdC5vcjY0KEFzc2VtYmx5SGVscGVy
czo6VHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpLCByZXN1bHRHUFIpOwotI2VsaWYgVVNFKEpT
VkFMVUUzMl82NCkKLSAgICAgICAgICAgIHN0dWJKaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHJlc3VsdFRhZ0dQUik7Ci0jZW5kaWYKKyAg
ICBTY3JpcHRFeGVjdXRhYmxlKiBvd25lciA9IGNvZGVCbG9jay0+b3duZXJTY3JpcHRFeGVjdXRh
YmxlKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKIAotICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgc3VjY2VzcywgZmFpbDsKLQotICAgICAgICAgICAgZW1pdFJlc3RvcmVTY3Jh
dGNoKHN0dWJKaXQsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzY3JhdGNoR1BSLCBzdWNjZXNzLCBm
YWlsLCBmYWlsdXJlQ2FzZXMpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKCp2bSwgc3R1YkppdCwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkNhbkZh
aWwpOwotICAgICAgICAgICAgaWYgKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgICAgIGxpbmtS
ZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHN0dWJJbmZv
LCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMpOwotCi0gICAgICAgICAgICBzdHViSW5mby5z
dHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAgICAgICAgICAgZXhl
Yy0+Y29kZUJsb2NrKCksIHBhdGNoQnVmZmVyLAotICAgICAgICAgICAgICAgICgiR2V0QnlJZCBh
cnJheSBsZW5ndGggc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICAgICAg
ICAgICAgIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwgc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAgICAgICAgICAgICAgICBz
dHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKLQot
ICAgICAgICAgICAgcmVwbGFjZVdpdGhKdW1wKHN0dWJJbmZvLCBzdHViSW5mby5zdHViUm91dGlu
ZS0+Y29kZSgpLmNvZGUoKSk7Ci0gICAgICAgICAgICByZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZCk7CisgICAgc3RkOjp1
bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IG5ld0Nhc2U7CiAKKyAgICBpZiAoaXNKU0FycmF5KGJhc2VW
YWx1ZSkgJiYgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpCisg
ICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpnZXRMZW5ndGgodm0sIG93bmVyLCBBY2Nlc3ND
YXNlOjpBcnJheUxlbmd0aCk7CisgICAgZWxzZSBpZiAoaXNKU1N0cmluZyhiYXNlVmFsdWUpICYm
IHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKQorICAgICAgICBu
ZXdDYXNlID0gQWNjZXNzQ2FzZTo6Z2V0TGVuZ3RoKHZtLCBvd25lciwgQWNjZXNzQ2FzZTo6U3Ry
aW5nTGVuZ3RoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkg
JiYgIXNsb3QuaXNVbnNldCgpKQorICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Cisg
ICAgICAgIAorICAgICAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwor
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUodm0pOwor
ICAgICAgICAKKyAgICAgICAgLy8gT3B0aW1pemUgc2VsZiBhY2Nlc3MuCisgICAgICAgIGlmIChz
dHViSW5mby5jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpVbnNldAorICAgICAgICAgICAgJiYgc2xv
dC5pc0NhY2hlYWJsZVZhbHVlKCkKKyAgICAgICAgICAgICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBi
YXNlVmFsdWUKKyAgICAgICAgICAgICYmICFzbG90LndhdGNocG9pbnRTZXQoKQorICAgICAgICAg
ICAgJiYgTWFjcm9Bc3NlbWJsZXI6OmlzQ29tcGFjdFB0ckFsaWduZWRBZGRyZXNzT2Zmc2V0KG1h
eE9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSkKKyAg
ICAgICAgICAgICYmIGFjdGlvbkZvckNlbGwodm0sIGJhc2VDZWxsKSA9PSBBdHRlbXB0VG9DYWNo
ZQorICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2lu
dCgpKSB7CisgICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJl
cGxhY2VtZW50cyh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgICAgICByZXBhdGNo
QnlJZFNlbGZBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBzbG90LmNhY2hl
ZE9mZnNldCgpLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHRydWUpOworICAgICAgICAgICAg
c3R1YkluZm8uaW5pdEdldEJ5SWRTZWxmKHZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
LCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgcmV0dXJuIFJl
dHJ5Q2FjaGVMYXRlcjsKICAgICAgICAgfQogCi0gICAgICAgIC8vIFN0cmluZy5sZW5ndGggY2Fz
ZQotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsdXJlID0gc3R1YkppdC5icmFuY2g4
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoU3RyaW5nVHlwZSkpOwotCi0gICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTU3RyaW5nOjpvZmZzZXRPZkxlbmd0aCgpKSwgcmVzdWx0
R1BSKTsKLQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHN0dWJKaXQub3I2NChBc3NlbWJs
eUhlbHBlcnM6OlRydXN0ZWRJbW02NChUYWdUeXBlTnVtYmVyKSwgcmVzdWx0R1BSKTsKLSNlbGlm
IFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIHN0dWJKaXQubW92ZShBc3NlbWJseUhlbHBlcnM6
OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHJlc3VsdFRhZ0dQUik7Ci0jZW5kaWYK
KyAgICAgICAgYm9vbCBsb2FkVGFyZ2V0RnJvbVByb3h5ID0gZmFsc2U7CisgICAgICAgIGlmIChi
YXNlQ2VsbC0+dHlwZSgpID09IFB1cmVGb3J3YXJkaW5nUHJveHlUeXBlKSB7CisgICAgICAgICAg
ICBiYXNlVmFsdWUgPSBqc0Nhc3Q8SlNQcm94eSo+KGJhc2VDZWxsKS0+dGFyZ2V0KCk7CisgICAg
ICAgICAgICBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKKyAgICAgICAgICAgIHN0cnVj
dHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUodm0pOworICAgICAgICAgICAgbG9hZFRhcmdldEZy
b21Qcm94eSA9IHRydWU7CisgICAgICAgIH0KIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7CisgICAgICAgIElubGluZUNhY2hlQWN0aW9uIGFj
dGlvbiA9IGFjdGlvbkZvckNlbGwodm0sIGJhc2VDZWxsKTsKKyAgICAgICAgaWYgKGFjdGlvbiAh
PSBBdHRlbXB0VG9DYWNoZSkKKyAgICAgICAgICAgIHJldHVybiBhY3Rpb247CiAKLSAgICAgICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIHN0dWJKaXQsIGNvZGVCbG9jaywgSklUQ29tcGls
YXRpb25DYW5GYWlsKTsKLSAgICAgICAgaWYgKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRl
KCkpCi0gICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0ID0gc2xvdC5pc1Vuc2V0KCkgPyBpbnZhbGlkT2Zmc2V0IDogc2xvdC5jYWNo
ZWRPZmZzZXQoKTsKICAgICAgICAgCi0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywg
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGVsdGFDYWxsVG9Eb25lKSk7Ci0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZSwgc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVs
dGFDYWxsVG9TbG93Q2FzZSkpOwotCi0gICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5lID0gRklO
QUxJWkVfQ09ERV9GT1JfU1RVQigKLSAgICAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLCBwYXRj
aEJ1ZmZlciwKLSAgICAgICAgICAgICgiR2V0QnlJZCBzdHJpbmcgbGVuZ3RoIHN0dWIgZm9yICVz
LCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqZXhlYy0+Y29k
ZUJsb2NrKCkpLmRhdGEoKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZz
ZXQoCi0gICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSku
ZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCBjb25kaXRpb25TZXQ7CisgICAgICAgIGlmIChzbG90LmlzVW5zZXQoKSB8fCBzbG90LnNsb3RC
YXNlKCkgIT0gYmFzZVZhbHVlKSB7CisgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5m
bygpLnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygpIHx8IHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGlmIChzbG90LmlzVW5zZXQoKSkgeworICAgICAgICAgICAgICAgIGNvbmRp
dGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcygKKyAgICAgICAgICAg
ICAgICAgICAgdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVy
ZSwgcHJvcGVydHlOYW1lLmltcGwoKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3Bl
cnR5SGl0KAorICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFi
bGUoKSwgZXhlYywgc3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCksCisgICAgICAgICAgICAgICAg
ICAgIHByb3BlcnR5TmFtZS5pbXBsKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG9mZnNldCA9
IHNsb3QuaXNVbnNldCgpID8gaW52YWxpZE9mZnNldCA6IGNvbmRpdGlvblNldC5zbG90QmFzZUNv
bmRpdGlvbigpLm9mZnNldCgpOworICAgICAgICB9CiAKLSAgICAgICAgcmVwbGFjZVdpdGhKdW1w
KHN0dWJJbmZvLCBzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7Ci0gICAgICAg
IHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVy
YXRpb25HZXRCeUlkKTsKKyAgICAgICAgQWNjZXNzQ2FzZTo6QWNjZXNzVHlwZSB0eXBlOworICAg
ICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkpCisgICAgICAgICAgICB0eXBlID0gQWNj
ZXNzQ2FzZTo6TG9hZDsKKyAgICAgICAgZWxzZSBpZiAoc2xvdC5pc1Vuc2V0KCkpCisgICAgICAg
ICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6TWlzczsKKyAgICAgICAgZWxzZSBpZiAoc2xvdC5pc0Nh
Y2hlYWJsZUdldHRlcigpKQorICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6OkdldHRlcjsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6OkN1c3RvbUdldHRl
cjsKIAotICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworICAgICAgICBuZXdDYXNlID0g
QWNjZXNzQ2FzZTo6Z2V0KAorICAgICAgICAgICAgdm0sIG93bmVyLCB0eXBlLCBvZmZzZXQsIHN0
cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBsb2FkVGFyZ2V0RnJvbVByb3h5LAorICAgICAgICAgICAg
c2xvdC53YXRjaHBvaW50U2V0KCksIHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSA/IHNsb3QuY3Vz
dG9tR2V0dGVyKCkgOiBudWxscHRyKTsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogQ2FjaGUgcHJv
cGVydHkgYWNjZXNzIGZvciBpbW1lZGlhdGVzLgotICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgp
KQotICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgIGlmICghc2xvdC5pc0NhY2hl
YWJsZSgpICYmICFzbG90LmlzVW5zZXQoKSkKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29k
ZVB0ciA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UoCisgICAgICAgIHZtLCBjb2RlQmxvY2ssIHBy
b3BlcnR5TmFtZSwgc3RkOjptb3ZlKG5ld0Nhc2UpKTsKKyAgICAKKyAgICBpZiAoIWNvZGVQdHIp
CiAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogCi0gICAgSlNDZWxsKiBiYXNlQ2VsbCA9
IGJhc2VWYWx1ZS5hc0NlbGwoKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxs
LT5zdHJ1Y3R1cmUoKnZtKTsKLQotICAgIElubGluZUNhY2hlQWN0aW9uIGFjdGlvbiA9IGFjdGlv
bkZvckNlbGwoKnZtLCBiYXNlQ2VsbCk7Ci0gICAgaWYgKGFjdGlvbiAhPSBBdHRlbXB0VG9DYWNo
ZSkKLSAgICAgICAgcmV0dXJuIGFjdGlvbjsKLQotICAgIC8vIE9wdGltaXplIHNlbGYgYWNjZXNz
LgotICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKQotICAgICAgICAmJiBzbG90LnNsb3RC
YXNlKCkgPT0gYmFzZVZhbHVlCi0gICAgICAgICYmICFzbG90LndhdGNocG9pbnRTZXQoKQotICAg
ICAgICAmJiBNYWNyb0Fzc2VtYmxlcjo6aXNDb21wYWN0UHRyQWxpZ25lZEFkZHJlc3NPZmZzZXQo
bWF4T2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSkg
ewotICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50
cygqdm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwotICAgICAgICByZXBhdGNoQnlJZFNlbGZBY2Nl
c3MoKnZtLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xv
dC5jYWNoZWRPZmZzZXQoKSwgb3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlzdCwgdHJ1ZSk7Ci0gICAg
ICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZigqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIHN0cnVjdHVyZSk7Ci0gICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0gICAg
fQotCi0gICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24sIG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3QpOworICAgIHJlcGxhY2VXaXRoSnVtcChzdHVi
SW5mbywgY29kZVB0cik7CisgICAgCiAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKIH0KIApA
QCAtNzY2LDExMiArMzE5LDYgQEAgdm9pZCByZXBhdGNoR2V0QnlJRChFeGVjU3RhdGUqIGV4ZWMs
IEpTVgogICAgICAgICByZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkKTsKIH0KIAotc3RhdGljIHZvaWQgcGF0
Y2hKdW1wVG9HZXRCeUlkU3R1YihTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEpJVFN0dWJS
b3V0aW5lKiBzdHViUm91dGluZSkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5hY2Nl
c3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfbGlzdCk7Ci0gICAgaWYgKHN0dWJJbmZvLnUuZ2V0
QnlJZExpc3QubGlzdC0+ZGlkU2VsZlBhdGNoaW5nKCkpIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OnJlcGF0Y2hKdW1wKAotICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
Lmp1bXBBdE9mZnNldCgKLSAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxU
b0p1bXApLAotICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUo
KS5jb2RlKCkpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICByZXBsYWNlV2l0
aEp1bXAoc3R1YkluZm8sIHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKLX0KLQotc3RhdGlj
IElubGluZUNhY2hlQWN0aW9uIHRyeUJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIGlmICghYmFz
ZVZhbHVlLmlzQ2VsbCgpCi0gICAgICAgIHx8ICghc2xvdC5pc0NhY2hlYWJsZSgpICYmICFzbG90
LmlzVW5zZXQoKSkpCi0gICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgSlNDZWxs
KiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKLSAgICBib29sIGxvYWRUYXJnZXRGcm9t
UHJveHkgPSBmYWxzZTsKLSAgICBpZiAoYmFzZUNlbGwtPnR5cGUoKSA9PSBQdXJlRm9yd2FyZGlu
Z1Byb3h5VHlwZSkgewotICAgICAgICBiYXNlVmFsdWUgPSBqc0Nhc3Q8SlNQcm94eSo+KGJhc2VD
ZWxsKS0+dGFyZ2V0KCk7Ci0gICAgICAgIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwot
ICAgICAgICBsb2FkVGFyZ2V0RnJvbVByb3h5ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBWTSogdm0g
PSAmZXhlYy0+dm0oKTsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9j
aygpOwotCi0gICAgSW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9uID0gYWN0aW9uRm9yQ2VsbCgqdm0s
IGJhc2VDZWxsKTsKLSAgICBpZiAoYWN0aW9uICE9IEF0dGVtcHRUb0NhY2hlKQotICAgICAgICBy
ZXR1cm4gYWN0aW9uOwotCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlQ2VsbC0+c3Ry
dWN0dXJlKCp2bSk7Ci0gICAgVHlwZUluZm8gdHlwZUluZm8gPSBzdHJ1Y3R1cmUtPnR5cGVJbmZv
KCk7Ci0KLSAgICBpZiAoc3R1YkluZm8ucGF0Y2guc3BpbGxNb2RlID09IE5lZWRUb1NwaWxsKSB7
Ci0gICAgICAgIC8vIFdlIGNhbm5vdCBkbyBhcyBtdWNoIGlubGluZSBjYWNoaW5nIGlmIHRoZSBy
ZWdpc3RlcnMgd2VyZSBub3QgZmx1c2hlZCBwcmlvciB0byB0aGlzIEdldEJ5SWQuIEluIHBhcnRp
Y3VsYXIsCi0gICAgICAgIC8vIG5vbi1WYWx1ZSBjYWNoZWQgcHJvcGVydGllcyByZXF1aXJlIHBs
YW50aW5nIGNhbGxzLCB3aGljaCByZXF1aXJlcyByZWdpc3RlcnMgdG8gaGF2ZSBiZWVuIGZsdXNo
ZWQuIFRodXMsCi0gICAgICAgIC8vIGlmIHJlZ2lzdGVycyB3ZXJlIG5vdCBmbHVzaGVkLCBkb24n
dCBkbyBub24tVmFsdWUgY2FjaGluZy4KLSAgICAgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlVmFs
dWUoKSAmJiAhc2xvdC5pc1Vuc2V0KCkpCi0gICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNo
ZTsKLSAgICB9Ci0KLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90LmlzVW5zZXQoKSA/
IGludmFsaWRPZmZzZXQgOiBzbG90LmNhY2hlZE9mZnNldCgpOwotICAgIAotICAgIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKLSAgICBpZiAoc2xvdC5pc1Vuc2V0KCkg
fHwgc2xvdC5zbG90QmFzZSgpICE9IGJhc2VWYWx1ZSkgewotICAgICAgICBpZiAodHlwZUluZm8u
cHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCkgfHwgc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkK
LSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgIGlmIChzbG90Lmlz
VW5zZXQoKSkKLSAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0Zv
clByb3BlcnR5TWlzcygqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0
cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY29uZGl0
aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoKnZtLCBj
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3Quc2xvdEJh
c2UoKSwgaWRlbnQuaW1wbCgpKTsKLQotICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlk
KCkpCi0gICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICBvZmZzZXQg
PSBzbG90LmlzVW5zZXQoKSA/IGludmFsaWRPZmZzZXQgOiBjb25kaXRpb25TZXQuc2xvdEJhc2VD
b25kaXRpb24oKS5vZmZzZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgUG9seW1vcnBoaWNHZXRCeUlk
TGlzdCogbGlzdCA9IFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmZyb20oc3R1YkluZm8pOwotICAg
IGlmIChsaXN0LT5pc0Z1bGwoKSkgewotICAgICAgICAvLyBXZSBuZWVkIHRoaXMgZXh0cmEgY2hl
Y2sgYmVjYXVzZSBvZiByZWN1cnNpb24uCi0gICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwot
ICAgIH0KLSAgICAKLSAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwotICAg
IGJvb2wgcmVzdWx0ID0gZ2VuZXJhdGVCeUlkU3R1YigKLSAgICAgICAgZXhlYywga2luZEZvcihz
bG90KSwgaWRlbnQsIGN1c3RvbUZvcihzbG90KSwgc3R1YkluZm8sIGNvbmRpdGlvblNldCwgc2xv
dC5zbG90QmFzZSgpLCBvZmZzZXQsIAotICAgICAgICBzdHJ1Y3R1cmUsIGxvYWRUYXJnZXRGcm9t
UHJveHksIHNsb3Qud2F0Y2hwb2ludFNldCgpLCAKLSAgICAgICAgc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSwK
LSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlzdC0+Y3VycmVudFNsb3dQYXRoVGFyZ2V0KHN0
dWJJbmZvKSksIHN0dWJSb3V0aW5lKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7Ci0gICAgCi0gICAgR2V0QnlJZEFjY2Vzczo6QWNjZXNzVHlwZSBhY2Nl
c3NUeXBlOwotICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSkKLSAgICAgICAgYWNjZXNz
VHlwZSA9IHNsb3Qud2F0Y2hwb2ludFNldCgpID8gR2V0QnlJZEFjY2Vzczo6V2F0Y2hlZFN0dWIg
OiBHZXRCeUlkQWNjZXNzOjpTaW1wbGVTdHViOwotICAgIGVsc2UgaWYgKHNsb3QuaXNVbnNldCgp
KQotICAgICAgICBhY2Nlc3NUeXBlID0gR2V0QnlJZEFjY2Vzczo6U2ltcGxlTWlzczsKLSAgICBl
bHNlIGlmIChzbG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkpCi0gICAgICAgIGFjY2Vzc1R5cGUgPSBH
ZXRCeUlkQWNjZXNzOjpHZXR0ZXI7Ci0gICAgZWxzZQotICAgICAgICBhY2Nlc3NUeXBlID0gR2V0
QnlJZEFjY2Vzczo6Q3VzdG9tR2V0dGVyOwotICAgIAotICAgIGxpc3QtPmFkZEFjY2VzcyhHZXRC
eUlkQWNjZXNzKAotICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGFj
Y2Vzc1R5cGUsIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsCi0gICAgICAgIGNvbmRpdGlvblNldCkp
OwotICAgIAotICAgIHBhdGNoSnVtcFRvR2V0QnlJZFN0dWIoc3R1YkluZm8sIHN0dWJSb3V0aW5l
LmdldCgpKTsKLSAgICAKLSAgICByZXR1cm4gbGlzdC0+aXNGdWxsKCkgPyBHaXZlVXBPbkNhY2hl
IDogUmV0cnlDYWNoZUxhdGVyOwotfQotCi12b2lkIGJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykK
LXsKLSAgICBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihleGVjLT5jb2RlQmxvY2so
KS0+bV9sb2NrLCBleGVjLT52bSgpLmhlYXApOwotICAgIAotICAgIGlmICh0cnlCdWlsZEdldEJ5
SURMaXN0KGV4ZWMsIGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbykgPT0g
R2l2ZVVwT25DYWNoZSkKLSAgICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZCk7Ci19Ci0KIHN0YXRp
YyBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlv
bihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEtpbmQgcHV0S2luZCkKIHsKICAgICBp
ZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkgewpAQCAtODg0LDM1OSArMzMxLDE2IEBAIHN0YXRpYyBW
X0pJVE9wZXJhdGlvbl9FU3NpSkpJIGFwcHJvcHJpYXQKICAgICByZXR1cm4gb3BlcmF0aW9uUHV0
QnlJZE5vblN0cmljdDsKIH0KIAotc3RhdGljIFZfSklUT3BlcmF0aW9uX0VTc2lKSkkgYXBwcm9w
cmlhdGVMaXN0QnVpbGRpbmdQdXRCeUlkRnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZz
bG90LCBQdXRLaW5kIHB1dEtpbmQpCitzdGF0aWMgVl9KSVRPcGVyYXRpb25fRVNzaUpKSSBhcHBy
b3ByaWF0ZU9wdGltaXppbmdQdXRCeUlkRnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZz
bG90LCBQdXRLaW5kIHB1dEtpbmQpCiB7CiAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpIHsK
ICAgICAgICAgaWYgKHB1dEtpbmQgPT0gRGlyZWN0KQotICAgICAgICAgICAgcmV0dXJuIG9wZXJh
dGlvblB1dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExpc3Q7Ci0gICAgICAgIHJldHVybiBvcGVyYXRp
b25QdXRCeUlkU3RyaWN0QnVpbGRMaXN0OworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1
dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5
SWRTdHJpY3RPcHRpbWl6ZTsKICAgICB9CiAgICAgaWYgKHB1dEtpbmQgPT0gRGlyZWN0KQotICAg
ICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1aWxkTGlzdDsKLSAg
ICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdEJ1aWxkTGlzdDsKLX0KLQotc3RhdGlj
IGJvb2wgZW1pdFB1dFJlcGxhY2VTdHViKAotICAgIEV4ZWNTdGF0ZSogZXhlYywKLSAgICBjb25z
dCBJZGVudGlmaWVyJiwKLSAgICBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsCi0gICAgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLAotICAg
IENvZGVMb2NhdGlvbkxhYmVsIGZhaWx1cmVMYWJlbCwKLSAgICBSZWZQdHI8SklUU3R1YlJvdXRp
bmU+JiBzdHViUm91dGluZSkKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBHUFJS
ZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guYmFzZUdQUik7
Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBHUFJSZWcgdmFsdWVUYWdHUFIgPSBzdGF0aWNf
Y2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVlVGFnR1BSKTsKLSNlbmRpZgotICAgIEdQ
UlJlZyB2YWx1ZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVH
UFIpOwotCi0gICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcihzdHViSW5mby5w
YXRjaC51c2VkUmVnaXN0ZXJzKTsKLSAgICBhbGxvY2F0b3IubG9jayhiYXNlR1BSKTsKLSNpZiBV
U0UoSlNWQUxVRTMyXzY0KQotICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlVGFnR1BSKTsKLSNlbmRp
ZgotICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlR1BSKTsKLSAgICAKLSAgICBHUFJSZWcgc2NyYXRj
aEdQUjEgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7Ci0KLSAgICBDQ2FsbEhlbHBl
cnMgc3R1YkppdCh2bSwgZXhlYy0+Y29kZUJsb2NrKCkpOwotCi0gICAgc2l6ZV90IG51bWJlck9m
UGFkZGluZ0J5dGVzID0gYWxsb2NhdG9yLnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5n
KHN0dWJKaXQpOwotCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmFkU3RydWN0dXJlID0gc3R1
YkppdC5icmFuY2hTdHJ1Y3R1cmUoCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwK
LSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwKLSAgICAgICAgc3RydWN0dXJlKTsKLQotI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKQotICAgICAgICBz
dHViSml0LnN0b3JlNjQodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFn
ZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOwotICAgIGVsc2Ugewot
ICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUjEpOwotICAgICAgICBzdHVi
Sml0LnN0b3JlNjQodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIx
LCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVl
KSkpOwotICAgIH0KLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgaWYgKGlzSW5saW5lT2Zm
c2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSB7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1
ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9m
SW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0
KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2Ny
aXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVU
YWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRP
ZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNl
dCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNj
cmlwdG9yLCBhc0JpdHMudGFnKSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0dWJKaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNldEluQnV0dGVyZmx5
KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9G
KEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwotICAgICAgICBzdHVi
Sml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hH
UFIxLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1Zh
bHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFn
KSkpOwotICAgIH0KLSNlbmRpZgotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nl
c3M7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbHVyZTsKLSAgICAKLSAgICBpZiAoYWxs
b2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkpIHsKLSAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVS
ZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoc3R1YkppdCwgbnVtYmVyT2ZQYWRkaW5nQnl0ZXMpOwot
ICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgICAgIAotICAgICAgICBiYWRT
dHJ1Y3R1cmUubGluaygmc3R1YkppdCk7Ci0gICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2Vk
UmVnaXN0ZXJzQnlQb3BwaW5nKHN0dWJKaXQsIG51bWJlck9mUGFkZGluZ0J5dGVzKTsKLSAgICAg
ICAgZmFpbHVyZSA9IHN0dWJKaXQuanVtcCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN1Y2Nl
c3MgPSBzdHViSml0Lmp1bXAoKTsKLSAgICAgICAgZmFpbHVyZSA9IGJhZFN0cnVjdHVyZTsKLSAg
ICB9Ci0gICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIHN0dWJKaXQsIGV4ZWMt
PmNvZGVCbG9jaygpLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwotICAgIGlmIChwYXRjaEJ1ZmZl
ci5kaWRGYWlsVG9BbGxvY2F0ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAg
cGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFi
ZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpKTsKLSAgICBwYXRjaEJ1
ZmZlci5saW5rKGZhaWx1cmUsIGZhaWx1cmVMYWJlbCk7Ci0gICAgICAgICAgICAKLSAgICBzdHVi
Um91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAgIGV4ZWMtPmNvZGVCbG9j
aygpLCBwYXRjaEJ1ZmZlciwKLSAgICAgICAgKCJQdXRCeUlkIHJlcGxhY2Ugc3R1YiBmb3IgJXMs
IHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICAgICB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9j
aygpKS5kYXRhKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAot
ICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSkuZXhlY3V0YWJs
ZUFkZHJlc3MoKSkpOwotICAgIAotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCBl
bWl0UHV0VHJhbnNpdGlvblN0dWIoCi0gICAgRXhlY1N0YXRlKiBleGVjLCBWTSogdm0sIFN0cnVj
dHVyZSomIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIAotICAgIGNvbnN0IFB1
dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5k
IHB1dEtpbmQsCi0gICAgU3RydWN0dXJlKiYgb2xkU3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYgY29uZGl0aW9uU2V0KQotewotICAgIFByb3BlcnR5TmFtZSBwbmFtZShpZGVu
dCk7Ci0gICAgb2xkU3RydWN0dXJlID0gc3RydWN0dXJlOwotICAgIGlmICghb2xkU3RydWN0dXJl
LT5pc09iamVjdCgpIHx8IG9sZFN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkgfHwgcGFyc2VJbmRl
eChwbmFtZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFByb3BlcnR5T2Zmc2V0IHBy
b3BlcnR5T2Zmc2V0OwotICAgIHN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFu
c2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShvbGRTdHJ1Y3R1cmUsIGlkZW50
LmltcGwoKSwgMCwgcHJvcGVydHlPZmZzZXQpOwotCi0gICAgaWYgKCFzdHJ1Y3R1cmUgfHwgIXN0
cnVjdHVyZS0+aXNPYmplY3QoKSB8fCBzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpIHx8ICFzdHJ1
Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgLy8gU2tpcCBvcHRpbWl6aW5nIHRoZSBjYXNlIHdoZXJlIHdlIG5lZWQgYSBy
ZWFsbG9jLCBpZiB3ZSBkb24ndCBoYXZlCi0gICAgLy8gZW5vdWdoIHJlZ2lzdGVycyB0byBtYWtl
IGl0IGhhcHBlbi4KLSAgICBpZiAoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgPCA2Ci0gICAg
ICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBzdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkKLSAgICAgICAgJiYgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBTa2lwIG9w
dGltaXppbmcgdGhlIGNhc2Ugd2hlcmUgd2UgbmVlZCByZWFsbG9jLCBhbmQgdGhlIHN0cnVjdHVy
ZSBoYXMKLSAgICAvLyBpbmRleGluZyBzdG9yYWdlLgotICAgIC8vIEZJWE1FOiBXZSBzaG91bGRu
J3Qgc2tpcCB0aGlzISBJbXBsZW1lbnQgaXQhCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEzMDkxNAotICAgIGlmIChvbGRTdHJ1Y3R1cmUtPmNvdWxkSGF2
ZUluZGV4aW5nSGVhZGVyKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChwdXRL
aW5kID09IE5vdERpcmVjdCkgewotICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRp
dGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3MoCi0gICAgICAgICAgICAqdm0sIGV4ZWMtPmNvZGVC
bG9jaygpLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBpZGVudC5pbXBsKCkp
OwotICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZmFpbHVyZUxhYmVsID0g
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGVsdGFDYWxsVG9TbG93Q2FzZSk7Ci0gICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJv
dXRpbmUgPSBzdHViSW5mby5zdHViUm91dGluZTsKLQotICAgIEdQUlJlZyBiYXNlR1BSID0gc3Rh
dGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKTsKLSNpZiBVU0UoSlNWQUxV
RTMyXzY0KQotICAgIEdQUlJlZyB2YWx1ZVRhZ0dQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1
YkluZm8ucGF0Y2gudmFsdWVUYWdHUFIpOwotI2VuZGlmCi0gICAgR1BSUmVnIHZhbHVlR1BSID0g
c3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZUdQUik7Ci0gICAgCi0gICAg
U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcihzdHViSW5mby5wYXRjaC51c2VkUmVn
aXN0ZXJzKTsKLSAgICBhbGxvY2F0b3IubG9jayhiYXNlR1BSKTsKLSNpZiBVU0UoSlNWQUxVRTMy
XzY0KQotICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlVGFnR1BSKTsKLSNlbmRpZgotICAgIGFsbG9j
YXRvci5sb2NrKHZhbHVlR1BSKTsKLSAgICAKLSAgICBDQ2FsbEhlbHBlcnMgc3R1YkppdCh2bSk7
Ci0gICAgCi0gICAgYm9vbCBuZWVkVGhpcmRTY3JhdGNoID0gZmFsc2U7Ci0gICAgaWYgKHN0cnVj
dHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFj
aXR5KCkKLSAgICAgICAgJiYgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0g
ICAgICAgIG5lZWRUaGlyZFNjcmF0Y2ggPSB0cnVlOwotICAgIH0KLQotICAgIEdQUlJlZyBzY3Jh
dGNoR1BSMSA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKLSAgICBBU1NFUlQoc2Ny
YXRjaEdQUjEgIT0gYmFzZUdQUik7Ci0gICAgQVNTRVJUKHNjcmF0Y2hHUFIxICE9IHZhbHVlR1BS
KTsKLSAgICAKLSAgICBHUFJSZWcgc2NyYXRjaEdQUjIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3Jh
dGNoR1BSKCk7Ci0gICAgQVNTRVJUKHNjcmF0Y2hHUFIyICE9IGJhc2VHUFIpOwotICAgIEFTU0VS
VChzY3JhdGNoR1BSMiAhPSB2YWx1ZUdQUik7Ci0gICAgQVNTRVJUKHNjcmF0Y2hHUFIyICE9IHNj
cmF0Y2hHUFIxKTsKLQotICAgIEdQUlJlZyBzY3JhdGNoR1BSMzsKLSAgICBpZiAobmVlZFRoaXJk
U2NyYXRjaCkgewotICAgICAgICBzY3JhdGNoR1BSMyA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0
Y2hHUFIoKTsKLSAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIzICE9IGJhc2VHUFIpOwotICAgICAg
ICBBU1NFUlQoc2NyYXRjaEdQUjMgIT0gdmFsdWVHUFIpOwotICAgICAgICBBU1NFUlQoc2NyYXRj
aEdQUjMgIT0gc2NyYXRjaEdQUjEpOwotICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjMgIT0gc2Ny
YXRjaEdQUjIpOwotICAgIH0gZWxzZQotICAgICAgICBzY3JhdGNoR1BSMyA9IEludmFsaWRHUFJS
ZWc7Ci0gICAgCi0gICAgc2l6ZV90IG51bWJlck9mUGFkZGluZ0J5dGVzID0gYWxsb2NhdG9yLnBy
ZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKHN0dWJKaXQpOwotCi0gICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsKLSAgICAgICAgICAgIAotICAgIEFTU0VSVChv
bGRTdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkp
OwotICAgIAotICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2hTdHJ1Y3R1cmUo
Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgCi0gICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIAotICAg
ICAgICBvbGRTdHJ1Y3R1cmUpKTsKLSAgICAKLSAgICBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0
aW9ucygKLSAgICAgICAgY29uZGl0aW9uU2V0LCBleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8s
IHN0dWJKaXQsIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUjEpOwotCi0gICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwotICAgIAotICAgIGJvb2wgc2NyYXRjaEdQUjFIYXNTdG9y
YWdlID0gZmFsc2U7Ci0gICAgCi0gICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgc2l6ZV90
IG5ld1NpemUgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1
ZSk7Ci0gICAgICAgIENvcGllZEFsbG9jYXRvciogY29waWVkQWxsb2NhdG9yID0gJnZtLT5oZWFw
LnN0b3JhZ2VBbGxvY2F0b3IoKTsKLSAgICAgICAgCi0gICAgICAgIGlmICghb2xkU3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoJmNv
cGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAg
ICAgICBzbG93UGF0aC5hcHBlbmQoc3R1YkppdC5icmFuY2hTdWJQdHIoTWFjcm9Bc3NlbWJsZXI6
OlNpZ25lZCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRjaEdQ
UjEpKTsKLSAgICAgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjEsICZjb3BpZWRB
bGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZyk7Ci0gICAgICAgICAgICBzdHViSml0Lm5lZ1B0
cihzY3JhdGNoR1BSMSk7Ci0gICAgICAgICAgICBzdHViSml0LmFkZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWJzb2x1dGVBZGRyZXNzKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQp
LCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgICAgICBzdHViSml0LmFkZFB0cihNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIHNpemVfdCBvbGRTaXplID0gb2xkU3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwotICAgICAgICAgICAgQVNTRVJUKG5l
d1NpemUgPiBvbGRTaXplKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3R1YkppdC5sb2Fk
UHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlP
ZmZzZXQoKSksIHNjcmF0Y2hHUFIzKTsKLSAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cigmY29w
aWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAg
ICAgIHNsb3dQYXRoLmFwcGVuZChzdHViSml0LmJyYW5jaFN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6
U2lnbmVkLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BS
MSkpOwotICAgICAgICAgICAgc3R1YkppdC5zdG9yZVB0cihzY3JhdGNoR1BSMSwgJmNvcGllZEFs
bG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKLSAgICAgICAgICAgIHN0dWJKaXQubmVnUHRy
KHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAgIHN0dWJKaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UGF5bG9hZEVuZCks
IHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAgIHN0dWJKaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEpTVmFsdWUpKSwgc2NyYXRjaEdQUjEpOwotICAgICAgICAg
ICAgLy8gV2UgaGF2ZSBzY3JhdGNoR1BSMSA9IG5ldyBzdG9yYWdlLCBzY3JhdGNoR1BSMyA9IG9s
ZCBzdG9yYWdlLCBzY3JhdGNoR1BSMiA9IGF2YWlsYWJsZQotICAgICAgICAgICAgZm9yIChzaXpl
X3Qgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgb2xkU2l6ZTsgb2Zmc2V0ICs9IHNpemVvZih2b2lkKikp
IHsKLSAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc2NyYXRjaEdQUjMsIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9mZnNldCArIHNpemVvZihK
U1ZhbHVlKSArIHNpemVvZih2b2lkKikpKSwgc2NyYXRjaEdQUjIpOwotICAgICAgICAgICAgICAg
IHN0dWJKaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNj
cmF0Y2hHUFIxLCAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihvZmZzZXQgKyBzaXplb2YoSlNWYWx1
ZSkgKyBzaXplb2Yodm9pZCopKSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICBzdHViSml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIxLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsKLSAgICAgICAg
c2NyYXRjaEdQUjFIYXNTdG9yYWdlID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBBU1NFUlQob2xkU3Ry
dWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKSA9PSBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgp
KTsKLSAgICBBU1NFUlQob2xkU3RydWN0dXJlLT50eXBlSW5mbygpLmlubGluZVR5cGVGbGFncygp
ID09IHN0cnVjdHVyZS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKSk7Ci0gICAgQVNTRVJU
KG9sZFN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgPT0gc3RydWN0dXJlLT5pbmRleGluZ1R5cGUo
KSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICB1aW50MzJfdCB2YWwgPSBzdHJ1Y3R1cmUtPmlk
KCk7Ci0jZWxzZQotICAgIHVpbnQzMl90IHZhbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+
KHN0cnVjdHVyZS0+aWQoKSk7Ci0jZW5kaWYKLSAgICBzdHViSml0LnN0b3JlMzIoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMih2YWwpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAg
IGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkKLSAgICAgICAgc3R1Ykpp
dC5zdG9yZTY0KHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09i
amVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xv
dC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKLSAgICBlbHNlIHsKLSAgICAg
ICAgaWYgKCFzY3JhdGNoR1BSMUhhc1N0b3JhZ2UpCi0gICAgICAgICAgICBzdHViSml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgc2NyYXRjaEdQUjEpOwotICAgICAgICBzdHViSml0LnN0b3JlNjQodmFsdWVHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZseShz
bG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOwotICAgIH0KLSNlbGlmIFVT
RShKU1ZBTFVFMzJfNjQpCi0gICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0
KCkpKSB7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zm
c2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUp
ICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2Fk
KSkpOwotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9m
ZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVl
KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghc2NyYXRjaEdQUjFIYXNTdG9yYWdlKQotICAg
ICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgc3R1
YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BS
MSwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1
ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxv
YWQpKSk7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zm
c2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURl
c2NyaXB0b3IsIGFzQml0cy50YWcpKSk7Ci0gICAgfQotI2VuZGlmCi0gICAgCi0gICAgU2NyYXRj
aEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IG51bGxwdHI7Ci0KLSNpZiBFTkFCTEUoR0dDKQotICAg
IE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxGbHVzaFdyaXRlQmFycmllckJ1ZmZlcjsKLSAgICBp
ZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSkgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvd25lcklzUmVt
ZW1iZXJlZE9ySW5FZGVuID0gc3R1YkppdC5qdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihiYXNl
R1BSKTsKLSAgICAgICAgV3JpdGVCYXJyaWVyQnVmZmVyJiB3cml0ZUJhcnJpZXJCdWZmZXIgPSBz
dHViSml0LnZtKCktPmhlYXAud3JpdGVCYXJyaWVyQnVmZmVyKCk7Ci0gICAgICAgIHN0dWJKaXQu
bG9hZDMyKHdyaXRlQmFycmllckJ1ZmZlci5jdXJyZW50SW5kZXhBZGRyZXNzKCksIHNjcmF0Y2hH
UFIyKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbmVlZFRvRmx1c2ggPQotICAgICAg
ICAgICAgc3R1YkppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzY3Jh
dGNoR1BSMiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih3cml0ZUJhcnJpZXJCdWZmZXIu
Y2FwYWNpdHkoKSkpOwotCi0gICAgICAgIHN0dWJKaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMigxKSwgc2NyYXRjaEdQUjIpOwotICAgICAgICBzdHViSml0LnN0b3JlMzIoc2Ny
YXRjaEdQUjIsIHdyaXRlQmFycmllckJ1ZmZlci5jdXJyZW50SW5kZXhBZGRyZXNzKCkpOwotCi0g
ICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih3cml0ZUJh
cnJpZXJCdWZmZXIuYnVmZmVyKCkpLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIC8vIFdlIHVzZSBh
biBvZmZzZXQgb2YgLXNpemVvZih2b2lkKikgYmVjYXVzZSB3ZSBhbHJlYWR5IGFkZGVkIDEgdG8g
c2NyYXRjaEdQUjIuCi0gICAgICAgIHN0dWJKaXQuc3RvcmVQdHIoYmFzZUdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OkJhc2VJbmRleChzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIE1hY3JvQXNzZW1ibGVy
OjpTY2FsZVB0ciwgc3RhdGljX2Nhc3Q8aW50MzJfdD4oLXNpemVvZih2b2lkKikpKSk7Ci0KLSAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZVdpdGhCYXJyaWVyID0gc3R1YkppdC5qdW1w
KCk7Ci0gICAgICAgIG5lZWRUb0ZsdXNoLmxpbmsoJnN0dWJKaXQpOwotCi0gICAgICAgIHNjcmF0
Y2hCdWZmZXIgPSB2bS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoYWxsb2NhdG9yLmRlc2lyZWRTY3Jh
dGNoQnVmZmVyU2l6ZUZvckNhbGwoKSk7Ci0gICAgICAgIGFsbG9jYXRvci5wcmVzZXJ2ZVVzZWRS
ZWdpc3RlcnNUb1NjcmF0Y2hCdWZmZXJGb3JDYWxsKHN0dWJKaXQsIHNjcmF0Y2hCdWZmZXIsIHNj
cmF0Y2hHUFIyKTsKLSAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
YmFzZUdQUik7Ci0gICAgICAgIGNhbGxGbHVzaFdyaXRlQmFycmllckJ1ZmZlciA9IHN0dWJKaXQu
Y2FsbCgpOwotICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVVzZWRSZWdpc3RlcnNGcm9tU2NyYXRj
aEJ1ZmZlckZvckNhbGwoc3R1YkppdCwgc2NyYXRjaEJ1ZmZlciwgc2NyYXRjaEdQUjIpOwotCi0g
ICAgICAgIGRvbmVXaXRoQmFycmllci5saW5rKCZzdHViSml0KTsKLSAgICAgICAgb3duZXJJc1Jl
bWVtYmVyZWRPckluRWRlbi5saW5rKCZzdHViSml0KTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3M7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFp
bHVyZTsKLSAgICAgICAgICAgIAotICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMo
KSkgewotICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhz
dHViSml0LCBudW1iZXJPZlBhZGRpbmdCeXRlcyk7Ci0gICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0
Lmp1bXAoKTsKLQotICAgICAgICBmYWlsdXJlQ2FzZXMubGluaygmc3R1YkppdCk7Ci0gICAgICAg
IGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKHN0dWJKaXQsIG51bWJl
ck9mUGFkZGluZ0J5dGVzKTsKLSAgICAgICAgZmFpbHVyZSA9IHN0dWJKaXQuanVtcCgpOwotICAg
IH0gZWxzZQotICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgCi0gICAgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgb3BlcmF0aW9uQ2FsbDsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBzdWNjZXNzSW5TbG93UGF0aDsKLSAgICAKLSAgICBpZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAg
ICBzbG93UGF0aC5saW5rKCZzdHViSml0KTsKLSAgICAgICAgCi0gICAgICAgIGFsbG9jYXRvci5y
ZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKHN0dWJKaXQsIG51bWJlck9mUGFkZGluZ0J5
dGVzKTsKLSAgICAgICAgaWYgKCFzY3JhdGNoQnVmZmVyKQotICAgICAgICAgICAgc2NyYXRjaEJ1
ZmZlciA9IHZtLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShhbGxvY2F0b3IuZGVzaXJlZFNjcmF0Y2hC
dWZmZXJTaXplRm9yQ2FsbCgpKTsKLSAgICAgICAgYWxsb2NhdG9yLnByZXNlcnZlVXNlZFJlZ2lz
dGVyc1RvU2NyYXRjaEJ1ZmZlckZvckNhbGwoc3R1YkppdCwgc2NyYXRjaEJ1ZmZlciwgc2NyYXRj
aEdQUjEpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKGJhc2VHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0
cnVjdHVyZSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2xvdC5jYWNoZWRPZmZzZXQo
KSksIHZhbHVlR1BSKTsKLSNlbHNlCi0gICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKGJhc2VHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVy
ZSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2xvdC5jYWNoZWRPZmZzZXQoKSksIHZh
bHVlR1BSLCB2YWx1ZVRhZ0dQUik7Ci0jZW5kaWYKLSAgICAgICAgb3BlcmF0aW9uQ2FsbCA9IHN0
dWJKaXQuY2FsbCgpOwotICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVVzZWRSZWdpc3RlcnNGcm9t
U2NyYXRjaEJ1ZmZlckZvckNhbGwoc3R1YkppdCwgc2NyYXRjaEJ1ZmZlciwgc2NyYXRjaEdQUjEp
OwotICAgICAgICBzdWNjZXNzSW5TbG93UGF0aCA9IHN0dWJKaXQuanVtcCgpOwotICAgIH0KLSAg
ICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgc3R1YkppdCwgZXhlYy0+Y29kZUJs
b2NrKCksIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7Ci0gICAgaWYgKHBhdGNoQnVmZmVyLmRpZEZh
aWxUb0FsbG9jYXRlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBwYXRjaEJ1
ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zm
c2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSkpOwotICAgIGlmIChhbGxvY2F0b3Iu
ZGlkUmV1c2VSZWdpc3RlcnMoKSkKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlLCBm
YWlsdXJlTGFiZWwpOwotICAgIGVsc2UKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJl
Q2FzZXMsIGZhaWx1cmVMYWJlbCk7Ci0gICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgcGF0
Y2hCdWZmZXIubGluayhvcGVyYXRpb25DYWxsLCBvcGVyYXRpb25SZWFsbG9jYXRlU3RvcmFnZUFu
ZEZpbmlzaFB1dCk7Ci0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzc0luU2xvd1BhdGgs
IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNo
LmRlbHRhQ2FsbFRvRG9uZSkpOwotI2lmIEVOQUJMRShHR0MpCi0gICAgICAgIHBhdGNoQnVmZmVy
LmxpbmsoY2FsbEZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyLCBvcGVyYXRpb25GbHVzaFdyaXRlQmFy
cmllckJ1ZmZlcik7Ci0jZW5kaWYKLSAgICB9Ci0gICAgCi0gICAgc3R1YlJvdXRpbmUgPQotICAg
ICAgICBjcmVhdGVKSVRTdHViUm91dGluZSgKLSAgICAgICAgICAgIEZJTkFMSVpFX0NPREVfRk9S
KAotICAgICAgICAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLCBwYXRjaEJ1ZmZlciwKLSAgICAg
ICAgICAgICAgICAoIlB1dEJ5SWQgJXN0cmFuc2l0aW9uIHN0dWIgKCVwIC0+ICVwKSBmb3IgJXMs
IHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgPyAicmVh
bGxvY2F0aW5nICIgOiAiIiwKLSAgICAgICAgICAgICAgICAgICAgb2xkU3RydWN0dXJlLCBzdHJ1
Y3R1cmUsCi0gICAgICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkp
LmRhdGEoKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCi0gICAg
ICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLmV4ZWN1
dGFibGVBZGRyZXNzKCkpKSwKLSAgICAgICAgICAgICp2bSwKLSAgICAgICAgICAgIGV4ZWMtPmNv
ZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKSwKLSAgICAgICAgICAgIHN0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksCi0g
ICAgICAgICAgICBzdHJ1Y3R1cmUpOwotICAgIAotICAgIHJldHVybiB0cnVlOworICAgICAgICBy
ZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOworICAgIHJldHVy
biBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7CiB9CiAKIHN0YXRpYyBJbmxpbmVD
YWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VW
YWx1ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25z
dCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0
S2luZCBwdXRLaW5kKQpAQCAtMTI0NSw3ICszNDksOCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rp
b24gdHJ5Q2FjaGVQdXRCeUlECiAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogICAgIAog
ICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7CisgICAgU2NyaXB0RXhlY3V0YWJsZSogb3duZXIgPSBjb2RlQmxvY2st
Pm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAKICAg
ICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
CkBAIC0xMjU2LDIxMCArMzYxLDEwOCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2Fj
aGVQdXRCeUlECiAgICAgaWYgKCFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFi
bGUoKSkKICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAKLSAgICAvLyBPcHRpbWl6ZSBz
ZWxmIGFjY2Vzcy4KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gbmV3Q2FzZTsKKwog
ICAgIGlmIChzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUgJiYgc2xvdC5pc0NhY2hlYWJsZVB1dCgp
KSB7Ci0gICAgICAgIGlmIChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5ld1Byb3Bl
cnR5KSB7CisgICAgICAgIGlmIChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6OkV4aXN0
aW5nUHJvcGVydHkpIHsKKyAgICAgICAgICAgIHN0cnVjdHVyZS0+ZGlkQ2FjaGVQcm9wZXJ0eVJl
cGxhY2VtZW50KHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAgCisgICAgICAgICAg
ICBwdHJkaWZmX3Qgb2Zmc2V0VG9QYXRjaGVkU3RvcmFnZSA9IG9mZnNldFJlbGF0aXZlVG9QYXRj
aGVkU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAgICAgIGlmIChzdHViSW5m
by5jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpVbnNldAorICAgICAgICAgICAgICAgICYmIE1hY3Jv
QXNzZW1ibGVyOjppc1B0ckFsaWduZWRBZGRyZXNzT2Zmc2V0KG9mZnNldFRvUGF0Y2hlZFN0b3Jh
Z2UpCisgICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0
Y2hwb2ludCgpKSB7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcmVwYXRjaEJ5
SWRTZWxmQWNjZXNzKAorICAgICAgICAgICAgICAgICAgICBjb2RlQmxvY2ssIHN0dWJJbmZvLCBz
dHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksCisgICAgICAgICAgICAgICAgICAgIGFwcHJv
cHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSwgZmFsc2UpOwor
ICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlkUmVwbGFjZSgKKyAgICAgICAgICAg
ICAgICAgICAgdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSwgc2xv
dC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRl
cjsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmU7
Ci0gICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7Ci0g
ICAgICAgICAgICBpZiAoIWVtaXRQdXRUcmFuc2l0aW9uU3R1YihleGVjLCB2bSwgc3RydWN0dXJl
LCBpZGVudCwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQsIG9sZFN0cnVjdHVyZSwgY29uZGl0aW9u
U2V0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAg
IG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpyZXBsYWNlKHZtLCBvd25lciwgc3RydWN0dXJlLCBzbG90
LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChz
bG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5KTsKIAotICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKAotICAgICAgICAgICAgICAgIHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoCi0gICAgICAgICAgICAgICAgICAgIHN0
dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksCi0gICAgICAgICAgICAgICAgQ29kZUxvY2F0
aW9uTGFiZWwoc3R1YkluZm8uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICAgICAg
ICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBh
cHByb3ByaWF0ZUxpc3RCdWlsZGluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlkVHJhbnNpdGlvbigq
dm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJl
LCBjb25kaXRpb25TZXQsIHB1dEtpbmQgPT0gRGlyZWN0KTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLSAgICAgICAgfQorICAgICAgICAgICAgaWYg
KCFzdHJ1Y3R1cmUtPmlzT2JqZWN0KCkgfHwgc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKIAotICAgICAgICBpZiAoIU1hY3Jv
QXNzZW1ibGVyOjppc1B0ckFsaWduZWRBZGRyZXNzT2Zmc2V0KG9mZnNldFJlbGF0aXZlVG9QYXRj
aGVkU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSkpCi0gICAgICAgICAgICByZXR1cm4gR2l2
ZVVwT25DYWNoZTsKKyAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKKyAgICAgICAg
ICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0KKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmU6
OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkoCisg
ICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgaWRlbnQuaW1wbCgpLCAwLCBvZmZzZXQpOwor
ICAgICAgICAgICAgaWYgKCFuZXdTdHJ1Y3R1cmUgfHwgIW5ld1N0cnVjdHVyZS0+cHJvcGVydHlB
Y2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOwogCi0gICAgICAgIHN0cnVjdHVyZS0+ZGlkQ2FjaGVQcm9wZXJ0eVJlcGxhY2VtZW50KCp2
bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7Ci0gICAgICAgIHJlcGF0Y2hCeUlkU2VsZkFjY2Vzcygq
dm0sIGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwgaWRlbnQsIHNsb3QuY2FjaGVkT2Zm
c2V0KCksIGFwcHJvcHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtp
bmQpLCBmYWxzZSk7Ci0gICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlkUmVwbGFjZSgqdm0sIGNv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7Ci0gICAgICAgIHJldHVybiBS
ZXRyeUNhY2hlTGF0ZXI7Ci0gICAgfQorICAgICAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+
cHJldmlvdXNJRCgpID09IHN0cnVjdHVyZSk7CisgICAgICAgICAgICBBU1NFUlQoIW5ld1N0cnVj
dHVyZS0+aXNEaWN0aW9uYXJ5KCkpOworICAgICAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+
aXNPYmplY3QoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAgICAgICAgICAgIGlmIChwdXRLaW5kID09IE5vdERp
cmVjdCkgeworICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9CisgICAgICAgICAgICAgICAg
ICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzcygKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHZtLCBvd25lciwgZXhlYywgbmV3U3RydWN0dXJlLCBpZGVudC5pbXBsKCkp
OworICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICB9CiAKLSAgICBp
ZiAoKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSB8fCBzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkp
Ci0gICAgICAgICYmIHN0dWJJbmZvLnBhdGNoLnNwaWxsTW9kZSA9PSBEb250U3BpbGwpIHsKLSAg
ICAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKKyAgICAgICAgICAgIG5l
d0Nhc2UgPSBBY2Nlc3NDYXNlOjp0cmFuc2l0aW9uKHZtLCBvd25lciwgc3RydWN0dXJlLCBuZXdT
dHJ1Y3R1cmUsIG9mZnNldCwgY29uZGl0aW9uU2V0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBp
ZiAoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpIHx8IHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSkg
eworICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpKSB7CisgICAgICAgICAgICBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CiAKLSAgICAgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OwotICAgICAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQ7Ci0gICAgICAgIGlmIChzbG90LmJhc2UoKSAhPSBiYXNlVmFsdWUpIHsKLSAgICAg
ICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkpIHsKKyAgICAgICAgICAgIGlmIChz
bG90LmJhc2UoKSAhPSBiYXNlVmFsdWUpIHsKICAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQg
PQogICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9w
ZXJ0eUhpdEN1c3RvbSgKLSAgICAgICAgICAgICAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBzbG90LmJhc2UoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlkZW50LmltcGwoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9Ci0gICAgICAgICAgICAgICAgICAgIGdlbmVyYXRl
Q29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAotICAgICAgICAgICAgICAgICAgICAg
ICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIHNs
b3QuYmFzZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnQuaW1wbCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHZtLCBvd25lciwgZXhlYywgc3RydWN0dXJlLCBzbG90LmJhc2Uo
KSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1Zh
bGlkKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgb2Zmc2V0ID0gc2xv
dC5pc0NhY2hlYWJsZUN1c3RvbSgpID8gaW52YWxpZE9mZnNldCA6IGNvbmRpdGlvblNldC5zbG90
QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG9m
ZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0KLSAgICAgICAgUG9seW1vcnBoaWNQdXRCeUlk
TGlzdCogbGlzdDsKLSAgICAgICAgbGlzdCA9IFBvbHltb3JwaGljUHV0QnlJZExpc3Q6OmZyb20o
cHV0S2luZCwgc3R1YkluZm8pOwotCi0gICAgICAgIGJvb2wgcmVzdWx0ID0gZ2VuZXJhdGVCeUlk
U3R1YigKLSAgICAgICAgICAgIGV4ZWMsIGtpbmRGb3Ioc2xvdCksIGlkZW50LCBjdXN0b21Gb3Io
c2xvdCksIHN0dWJJbmZvLCBjb25kaXRpb25TZXQsIHNsb3QuYmFzZSgpLAotICAgICAgICAgICAg
b2Zmc2V0LCBzdHJ1Y3R1cmUsIGZhbHNlLCBudWxscHRyLAotICAgICAgICAgICAgc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxs
VG9Eb25lKSwKLSAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0
T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpLAotICAgICAgICAgICAg
c3R1YlJvdXRpbmUpOwotICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgICAgIHJldHVybiBH
aXZlVXBPbkNhY2hlOwotICAgICAgICAKLSAgICAgICAgbGlzdC0+YWRkQWNjZXNzKFB1dEJ5SWRB
Y2Nlc3M6OnNldHRlcigKLSAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFi
bGUoKSwKLSAgICAgICAgICAgIHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSA/IFB1dEJ5SWRBY2Nl
c3M6OlNldHRlciA6IFB1dEJ5SWRBY2Nlc3M6OkN1c3RvbVNldHRlciwKLSAgICAgICAgICAgIHN0
cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBzbG90LmN1c3RvbVNldHRlcigpLCBzdHViUm91dGluZSkp
OwotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCks
IENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgICAg
IHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHBy
b3ByaWF0ZUxpc3RCdWlsZGluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7Ci0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUKCFsaXN0LT5pc0Z1bGwoKSk7Ci0gICAgICAgIHJldHVybiBSZXRy
eUNhY2hlTGF0ZXI7Ci0gICAgfQotCi0gICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci19Ci0KLXZv
aWQgcmVwYXRjaFB1dEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3Qg
UHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtp
bmQgcHV0S2luZCkKLXsKLSAgICBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihleGVj
LT5jb2RlQmxvY2soKS0+bV9sb2NrLCBleGVjLT52bSgpLmhlYXApOwotICAgIAotICAgIGlmICh0
cnlDYWNoZVB1dEJ5SUQoZXhlYywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwg
c2xvdCwgc3R1YkluZm8sIHB1dEtpbmQpID09IEdpdmVVcE9uQ2FjaGUpCi0gICAgICAgIHJlcGF0
Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFw
cHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7Ci19Ci0KLXN0
YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWlsZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCi17Ci0gICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
LQotICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQotICAgICAgICByZXR1cm4gR2l2ZVVwT25D
YWNoZTsKLQotICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZVB1dCgpICYmICFzbG90LmlzQ2FjaGVh
YmxlQ3VzdG9tKCkgJiYgIXNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSkKLSAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0Fy
ZUNhY2hlYWJsZSgpKQotICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgIC8vIE9w
dGltaXplIHNlbGYgYWNjZXNzLgotICAgIGlmIChzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUgJiYg
c2xvdC5pc0NhY2hlYWJsZVB1dCgpKSB7Ci0gICAgICAgIFBvbHltb3JwaGljUHV0QnlJZExpc3Qq
IGxpc3Q7Ci0gICAgICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7Ci0gICAg
ICAgIAotICAgICAgICBpZiAoc2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpOZXdQcm9w
ZXJ0eSkgewotICAgICAgICAgICAgbGlzdCA9IFBvbHltb3JwaGljUHV0QnlJZExpc3Q6OmZyb20o
cHV0S2luZCwgc3R1YkluZm8pOwotICAgICAgICAgICAgaWYgKGxpc3QtPmlzRnVsbCgpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOyAvLyBXaWxsIGdldCBoZXJlIGR1ZSB0
byByZWN1cnNpb24uCiAKLSAgICAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlOworICAg
ICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OnNldHRlcigKKyAgICAgICAgICAgICAgICB2
bSwgb3duZXIsIEFjY2Vzc0Nhc2U6OkN1c3RvbVNldHRlciwgc3RydWN0dXJlLCBpbnZhbGlkT2Zm
c2V0LCBjb25kaXRpb25TZXQsCisgICAgICAgICAgICAgICAgc2xvdC5jdXN0b21TZXR0ZXIoKSk7
CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCBjb25kaXRpb25TZXQ7Ci0gICAgICAgICAgICBpZiAoIWVtaXRQdXRUcmFuc2l0aW9uU3R1Yihl
eGVjLCB2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5k
LCBvbGRTdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdp
dmVVcE9uQ2FjaGU7CisgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CiAKLSAgICAg
ICAgICAgIHN0dWJSb3V0aW5lID0gc3R1YkluZm8uc3R1YlJvdXRpbmU7Ci0gICAgICAgICAgICBs
aXN0LT5hZGRBY2Nlc3MoCi0gICAgICAgICAgICAgICAgUHV0QnlJZEFjY2Vzczo6dHJhbnNpdGlv
bigKLSAgICAgICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
LAotICAgICAgICAgICAgICAgICAgICBvbGRTdHJ1Y3R1cmUsIHN0cnVjdHVyZSwgY29uZGl0aW9u
U2V0LAotICAgICAgICAgICAgICAgICAgICBzdHViUm91dGluZSkpOworICAgICAgICAgICAgaWYg
KHNsb3QuYmFzZSgpICE9IGJhc2VWYWx1ZSkgeworICAgICAgICAgICAgICAgIGNvbmRpdGlvblNl
dCA9CisgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVBy
b3BlcnR5SGl0KAorICAgICAgICAgICAgICAgICAgICAgICAgdm0sIG93bmVyLCBleGVjLCBzdHJ1
Y3R1cmUsIHNsb3QuYmFzZSgpLCBpZGVudC5pbXBsKCkpOworICAgICAgICAgICAgICAgIGlmICgh
Y29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7CisgICAgICAgICAgICAgICAgb2Zmc2V0ID0gY29uZGl0aW9uU2V0LnNsb3RCYXNl
Q29uZGl0aW9uKCkub2Zmc2V0KCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAg
ICBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOwogCi0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBsaXN0ID0gUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6ZnJvbShwdXRLaW5kLCBzdHVi
SW5mbyk7Ci0gICAgICAgICAgICBpZiAobGlzdC0+aXNGdWxsKCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7IC8vIFdpbGwgZ2V0IGhlcmUgZHVlIHRvIHJlY3Vyc2lvbi4K
LSAgICAgICAgICAgIAotICAgICAgICAgICAgc3RydWN0dXJlLT5kaWRDYWNoZVByb3BlcnR5UmVw
bGFjZW1lbnQoKnZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgLy8gV2UncmUgbm93IGNvbW1pdHRlZCB0byBjcmVhdGluZyB0aGUgc3R1Yi4gTW9ncmlm
eSB0aGUgbWV0YS1kYXRhIGFjY29yZGluZ2x5LgotICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBl
bWl0UHV0UmVwbGFjZVN0dWIoCi0gICAgICAgICAgICAgICAgZXhlYywgcHJvcGVydHlOYW1lLCBz
bG90LCBzdHViSW5mbywgCi0gICAgICAgICAgICAgICAgc3RydWN0dXJlLCBDb2RlTG9jYXRpb25M
YWJlbChsaXN0LT5jdXJyZW50U2xvd1BhdGhUYXJnZXQoKSksIHN0dWJSb3V0aW5lKTsKLSAgICAg
ICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hl
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBsaXN0LT5hZGRBY2Nlc3MoCi0gICAgICAgICAg
ICAgICAgUHV0QnlJZEFjY2Vzczo6cmVwbGFjZSgKLSAgICAgICAgICAgICAgICAgICAgKnZtLCBj
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1
cmUsIHN0dWJSb3V0aW5lKSk7CisgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6c2V0
dGVyKAorICAgICAgICAgICAgICAgIHZtLCBvd25lciwgQWNjZXNzQ2FzZTo6U2V0dGVyLCBzdHJ1
Y3R1cmUsIG9mZnNldCwgY29uZGl0aW9uU2V0LCBudWxscHRyKTsKICAgICAgICAgfQotICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
Lmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1bXApLCBDb2RlTG9jYXRp
b25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgICAgICBpZiAobGlzdC0+
aXNGdWxsKCkpCi0gICAgICAgICAgICByZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3Qs
IHB1dEtpbmQpKTsKLQotICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogICAgIH0KIAot
ICAgIGlmICgoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpIHx8IHNsb3QuaXNDYWNoZWFibGVTZXR0
ZXIoKSkKLSAgICAgICAgJiYgc3R1YkluZm8ucGF0Y2guc3BpbGxNb2RlID09IERvbnRTcGlsbCkg
ewotICAgICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwotICAgICAgICAK
LSAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OwotICAgICAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7Ci0gICAgICAgIGlmIChzbG90LmJhc2UoKSAhPSBiYXNl
VmFsdWUpIHsKLSAgICAgICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkpIHsKLSAg
ICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPQotICAgICAgICAgICAgICAgICAgICBnZW5lcmF0
ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdEN1c3RvbSgKLSAgICAgICAgICAgICAg
ICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0
dXJlLCBzbG90LmJhc2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZS5p
bXBsKCkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjb25kaXRpb25T
ZXQgPQotICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQ
cm9wZXJ0eUhpdCgKLSAgICAgICAgICAgICAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBzbG90LmJhc2UoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHByb3BlcnR5TmFtZS5pbXBsKCkpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgb2Zmc2V0ID0gc2xvdC5pc0NhY2hlYWJsZUN1
c3RvbSgpID8gaW52YWxpZE9mZnNldCA6IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigp
Lm9mZnNldCgpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG9mZnNldCA9IHNsb3QuY2Fj
aGVkT2Zmc2V0KCk7Ci0KLSAgICAgICAgUG9seW1vcnBoaWNQdXRCeUlkTGlzdCogbGlzdDsKLSAg
ICAgICAgbGlzdCA9IFBvbHltb3JwaGljUHV0QnlJZExpc3Q6OmZyb20ocHV0S2luZCwgc3R1Yklu
Zm8pOwotCi0gICAgICAgIGJvb2wgcmVzdWx0ID0gZ2VuZXJhdGVCeUlkU3R1YigKLSAgICAgICAg
ICAgIGV4ZWMsIGtpbmRGb3Ioc2xvdCksIHByb3BlcnR5TmFtZSwgY3VzdG9tRm9yKHNsb3QpLCBz
dHViSW5mbywgY29uZGl0aW9uU2V0LCBzbG90LmJhc2UoKSwKLSAgICAgICAgICAgIG9mZnNldCwg
c3RydWN0dXJlLCBmYWxzZSwgbnVsbHB0ciwKLSAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSks
Ci0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChsaXN0LT5jdXJyZW50U2xvd1BhdGhUYXJn
ZXQoKSksCi0gICAgICAgICAgICBzdHViUm91dGluZSk7Ci0gICAgICAgIGlmICghcmVzdWx0KQot
ICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgIAotICAgICAgICBsaXN0
LT5hZGRBY2Nlc3MoUHV0QnlJZEFjY2Vzczo6c2V0dGVyKAotICAgICAgICAgICAgKnZtLCBjb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAotICAgICAgICAgICAgc2xvdC5pc0NhY2hlYWJsZVNl
dHRlcigpID8gUHV0QnlJZEFjY2Vzczo6U2V0dGVyIDogUHV0QnlJZEFjY2Vzczo6Q3VzdG9tU2V0
dGVyLAotICAgICAgICAgICAgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIHNsb3QuY3VzdG9tU2V0
dGVyKCksIHN0dWJSb3V0aW5lKSk7Ci0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hK
dW1wKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0
Y2guZGVsdGFDYWxsVG9KdW1wKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUo
KS5jb2RlKCkpKTsKLSAgICAgICAgaWYgKGxpc3QtPmlzRnVsbCgpKQotICAgICAgICAgICAgcmVw
YXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJp
YXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CisgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIGNvZGVQdHIgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKAorICAgICAgICB2
bSwgY29kZUJsb2NrLCBpZGVudCwgc3RkOjptb3ZlKG5ld0Nhc2UpKTsKKyAgICAKKyAgICBpZiAo
IWNvZGVQdHIpCisgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogCi0gICAgICAgIHJldHVy
biBSZXRyeUNhY2hlTGF0ZXI7Ci0gICAgfQotICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAg
IHJlc2V0UHV0QnlJRENoZWNrQW5kTG9hZChzdHViSW5mbyk7CisgICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGF0Y2hKdW1wKAorICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0
T2Zmc2V0KAorICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwKKyAg
ICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoY29kZVB0cikpOworICAgIAorICAgIHJldHVybiBSZXRy
eUNhY2hlTGF0ZXI7CiB9CiAKLXZvaWQgYnVpbGRQdXRCeUlkTGlzdChFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQordm9pZCByZXBhdGNoUHV0QnlJRChF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNs
b3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQogewogICAg
IEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGV4ZWMtPmNvZGVCbG9jaygpLT5tX2xv
Y2ssIGV4ZWMtPnZtKCkuaGVhcCk7CiAgICAgCi0gICAgaWYgKHRyeUJ1aWxkUHV0QnlJZExpc3Qo
ZXhlYywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8s
IHB1dEtpbmQpID09IEdpdmVVcE9uQ2FjaGUpCisgICAgaWYgKHRyeUNhY2hlUHV0QnlJRChleGVj
LCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0
S2luZCkgPT0gR2l2ZVVwT25DYWNoZSkKICAgICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJs
b2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVHZW5lcmljUHV0
QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKIH0KIApAQCAtMTQ3OSwxMDYgKzQ4MiwzNSBA
QCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5UmVwYXRjaEluKAogICAgIH0KICAgICAKICAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZS0+c3RydWN0dXJl
KCp2bSk7CisgICAgU2NyaXB0RXhlY3V0YWJsZSogb3duZXIgPSBjb2RlQmxvY2stPm93bmVyU2Ny
aXB0RXhlY3V0YWJsZSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1cmUodm0pOwogICAgIAogICAgIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKICAgICBpZiAod2FzRm91bmQpIHsKICAgICAg
ICAgaWYgKHNsb3Quc2xvdEJhc2UoKSAhPSBiYXNlKSB7CiAgICAgICAgICAgICBjb25kaXRpb25T
ZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKLSAgICAgICAg
ICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVy
ZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudC5pbXBsKCkpOworICAgICAgICAgICAgICAgIHZtLCBj
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3Quc2xvdEJh
c2UoKSwgaWRlbnQuaW1wbCgpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIGNv
bmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcygKLSAgICAgICAg
ICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBp
ZGVudC5pbXBsKCkpOworICAgICAgICAgICAgdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCksIGV4ZWMsIHN0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKICAgICB9CiAgICAgaWYgKCFjb25k
aXRpb25TZXQuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAK
LSAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJl
TGlzdDsKLSAgICBpbnQgbGlzdEluZGV4OwotICAgIAotICAgIENvZGVMb2NhdGlvbkxhYmVsIHN1
Y2Nlc3NMYWJlbCA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0
dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSk7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xv
d0Nhc2VMYWJlbDsKLSAgICAKLSAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3Nf
dW5zZXQpIHsKLSAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3Jw
aGljQWNjZXNzU3RydWN0dXJlTGlzdCgpOwotICAgICAgICBzdHViSW5mby5pbml0SW5MaXN0KHBv
bHltb3JwaGljU3RydWN0dXJlTGlzdCwgMCk7Ci0gICAgICAgIHNsb3dDYXNlTGFiZWwgPSBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgKLSAgICAgICAgICAgIHN0dWJJ
bmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpOwotICAgICAgICBsaXN0SW5kZXggPSAwOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUg
PT0gYWNjZXNzX2luX2xpc3QpOwotICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBz
dHViSW5mby51LmluTGlzdC5zdHJ1Y3R1cmVMaXN0OwotICAgICAgICBsaXN0SW5kZXggPSBzdHVi
SW5mby51LmluTGlzdC5saXN0U2l6ZTsKLSAgICAgICAgc2xvd0Nhc2VMYWJlbCA9IENvZGVMb2Nh
dGlvbkxhYmVsKHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXggLSAxXS5z
dHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAobGlzdElu
ZGV4ID09IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSkKLSAgICAgICAgICAgIHJldHVybiBH
aXZlVXBPbkNhY2hlOwotICAgIH0KLSAgICAKLSAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0
dWJSb3V0aW5lOwotICAgIAotICAgIHsKLSAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNf
Y2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmJhc2VHUFIpOwotICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZUdQUik7Ci0g
ICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gVGVtcFJlZ2lzdGVyU2V0KHN0dWJJbmZvLnBhdGNo
LnVzZWRSZWdpc3RlcnMpLmdldEZyZWVHUFIoKTsKLSAgICAgICAgCi0gICAgICAgIENDYWxsSGVs
cGVycyBzdHViSml0KHZtKTsKLSAgICAgICAgCi0gICAgICAgIGJvb2wgbmVlZFRvUmVzdG9yZVNj
cmF0Y2g7Ci0gICAgICAgIGlmIChzY3JhdGNoR1BSID09IEludmFsaWRHUFJSZWcpIHsKLSAgICAg
ICAgICAgIHNjcmF0Y2hHUFIgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoYmFz
ZUdQUiwgcmVzdWx0R1BSKTsKLSAgICAgICAgICAgIHN0dWJKaXQucHVzaFRvU2F2ZShzY3JhdGNo
R1BSKTsKLSAgICAgICAgICAgIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gdHJ1ZTsKLSAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IGZhbHNlOwotICAgICAg
ICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsKLSAgICAg
ICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFN0cnVjdHVyZSgKLSAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCi0gICAgICAg
ICAgICBzdHJ1Y3R1cmUpKTsKLQotICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMt
PmNvZGVCbG9jaygpOwotICAgICAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5mbygpLm5ld0ltcHVy
ZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygpKQotICAgICAgICAgICAgdm0tPnJlZ2lzdGVyV2F0
Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KGlkZW50LCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNv
ZGVCbG9jaykpOwogCi0gICAgICAgIGlmIChzbG90LndhdGNocG9pbnRTZXQoKSkKLSAgICAgICAg
ICAgIHNsb3Qud2F0Y2hwb2ludFNldCgpLT5hZGQoc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2Rl
QmxvY2spKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gbmV3Q2FzZSA9IEFjY2Vz
c0Nhc2U6OmluKAorICAgICAgICB2bSwgb3duZXIsIHdhc0ZvdW5kID8gQWNjZXNzQ2FzZTo6SW5I
aXQgOiBBY2Nlc3NDYXNlOjpJbk1pc3MsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0KTsKIAotICAg
ICAgICBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9ucygKLSAgICAgICAgICAgIGNvbmRpdGlv
blNldCwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLCBzdHViSml0LCBmYWlsdXJlQ2FzZXMs
IHNjcmF0Y2hHUFIpOwotICAgICAgICAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBzdHVi
Sml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNC
b29sZWFuKHdhc0ZvdW5kKSkpLCByZXN1bHRHUFIpOwotI2Vsc2UKLSAgICAgICAgc3R1YkppdC5t
b3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIod2FzRm91bmQpLCByZXN1bHRHUFIpOwot
I2VuZGlmCi0gICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzLCBm
YWlsOwotICAgICAgICAKLSAgICAgICAgZW1pdFJlc3RvcmVTY3JhdGNoKHN0dWJKaXQsIG5lZWRU
b1Jlc3RvcmVTY3JhdGNoLCBzY3JhdGNoR1BSLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMp
OwotICAgICAgICAKLSAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIHN0dWJKaXQs
IGV4ZWMtPmNvZGVCbG9jaygpLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwotICAgICAgICBpZiAo
cGF0Y2hCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkKLSAgICAgICAgICAgIHJldHVybiBHaXZl
VXBPbkNhY2hlOwotICAgICAgICAKLSAgICAgICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNoQnVm
ZmVyLCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzLCBz
dWNjZXNzTGFiZWwsIHNsb3dDYXNlTGFiZWwpOwotICAgICAgICAKLSAgICAgICAgc3R1YlJvdXRp
bmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAotICAgICAgICAgICAgZXhlYy0+Y29kZUJsb2Nr
KCksIHBhdGNoQnVmZmVyLAotICAgICAgICAgICAgKCJJbiAoZm91bmQgPSAlcykgc3R1YiBmb3Ig
JXMsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICAgICAgICAgd2FzRm91bmQgPyAieWVzIiA6
ICJubyIsIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwKLSAgICAgICAgICAg
ICAgICBzdWNjZXNzTGFiZWwuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgIH0KLSAgICAKLSAg
ICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4XS5zZXQoKnZtLCBjb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJlLCB0cnVlKTsK
LSAgICBzdHViSW5mby51LmluTGlzdC5saXN0U2l6ZSsrOwotICAgIAotICAgIE1hY3JvQXNzZW1i
bGVyOjpyZXBhdGNoSnVtcChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0
KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJS
b3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQ
dHIgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKHZtLCBjb2RlQmxvY2ssIGlkZW50LCBzdGQ6Om1v
dmUobmV3Q2FzZSkpOworICAgIGlmICghY29kZVB0cikKKyAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoCisgICAgICAgIHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFD
YWxsVG9KdW1wKSwKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoY29kZVB0cikpOwogICAgIAot
ICAgIHJldHVybiBsaXN0SW5kZXggPCAoUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIC0gMSkg
PyBSZXRyeUNhY2hlTGF0ZXIgOiBHaXZlVXBPbkNhY2hlOworICAgIHJldHVybiBSZXRyeUNhY2hl
TGF0ZXI7CiB9CiAKIHZvaWQgcmVwYXRjaEluKApAQCAtMTkyOSwyMiArODYxLDcgQEAgdm9pZCBs
aW5rUG9seW1vcnBoaWNDYWxsKAogdm9pZCByZXNldEdldEJ5SUQoQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKIHsKICAgICByZXBhdGNoQ2FsbChjb2Rl
QmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZE9wdGlt
aXplKTsKLSAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWwzMiBzdHJ1Y3R1cmVMYWJlbCA9IHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KC0oaW50cHRyX3Qpc3R1
YkluZm8ucGF0Y2guZGVsdGFDaGVja0ltbVRvQ2FsbCk7Ci0gICAgaWYgKE1hY3JvQXNzZW1ibGVy
OjpjYW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKCkpIHsKLSAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OnJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoMzJX
aXRoUGF0Y2goCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6c3RhcnRPZlBhdGNoYWJsZUJy
YW5jaDMyV2l0aFBhdGNoT25BZGRyZXNzKHN0cnVjdHVyZUxhYmVsKSwKLSAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKAotICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PE1hY3Jv
QXNzZW1ibGVyOjpSZWdpc3RlcklEPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKSwKLSAgICAgICAg
ICAgICAgICBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAotICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8aW50MzJfdD4odW51c2VkUG9pbnRlcikpOwotICAgIH0KLSAgICBNYWNyb0Fzc2VtYmxl
cjo6cmVwYXRjaEludDMyKHN0cnVjdHVyZUxhYmVsLCBzdGF0aWNfY2FzdDxpbnQzMl90Pih1bnVz
ZWRQb2ludGVyKSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVw
YXRjaENvbXBhY3Qoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RB
dE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0xvYWRPclN0b3JlKSwgMCk7Ci0jZWxz
ZQotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ29tcGFjdChzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2Fs
bFRvVGFnTG9hZE9yU3RvcmUpLCAwKTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENvbXBh
Y3Qoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChz
dHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSksIDApOwotI2VuZGlm
CisgICAgcmVzZXRHZXRCeUlEQ2hlY2tBbmRMb2FkKHN0dWJJbmZvKTsKICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6cmVwYXRjaEp1bXAoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNl
dChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1bXApLCBzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7
CiB9CiAKQEAgLTE5NTIsMzMgKzg2OSwxOCBAQCB2b2lkIHJlc2V0UHV0QnlJRChDb2RlQmxvY2sq
IGNvZGVCbG9jaywgCiB7CiAgICAgVl9KSVRPcGVyYXRpb25fRVNzaUpKSSB1bm9wdGltaXplZEZ1
bmN0aW9uID0gYml0d2lzZV9jYXN0PFZfSklUT3BlcmF0aW9uX0VTc2lKSkk+KHJlYWRDYWxsVGFy
Z2V0KGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uKS5leGVjdXRhYmxlQWRk
cmVzcygpKTsKICAgICBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJIG9wdGltaXplZEZ1bmN0aW9uOwot
ICAgIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3QgfHwg
dW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0QnVpbGRMaXN0KQor
ICAgIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3QpCiAg
ICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXpl
OwotICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5v
blN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJp
Y3RCdWlsZExpc3QpCisgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRp
b25QdXRCeUlkTm9uU3RyaWN0KQogICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlv
blB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKLSAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0
aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlv
biA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0QnVpbGRMaXN0KQorICAgIGVsc2UgaWYg
KHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdCkKICAg
ICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0
aW1pemU7CiAgICAgZWxzZSB7Ci0gICAgICAgIEFTU0VSVCh1bm9wdGltaXplZEZ1bmN0aW9uID09
IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9
PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0QnVpbGRMaXN0KTsKKyAgICAgICAgQVNT
RVJUKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmlj
dCk7CiAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5v
blN0cmljdE9wdGltaXplOwogICAgIH0KICAgICByZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3B0aW1pemVkRnVuY3Rpb24pOwotICAgIENvZGVMb2Nh
dGlvbkRhdGFMYWJlbDMyIHN0cnVjdHVyZUxhYmVsID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoLShpbnRwdHJfdClzdHViSW5mby5wYXRjaC5kZWx0YUNo
ZWNrSW1tVG9DYWxsKTsKLSAgICBpZiAoTWFjcm9Bc3NlbWJsZXI6OmNhbkp1bXBSZXBsYWNlUGF0
Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goKSkgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmV2
ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaCgKLSAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpzdGFydE9mUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2hPbkFk
ZHJlc3Moc3RydWN0dXJlTGFiZWwpLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoCi0gICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVy
SUQ+KHN0dWJJbmZvLnBhdGNoLmJhc2VHUFIpLAotICAgICAgICAgICAgICAgIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQzMl90Pih1bnVz
ZWRQb2ludGVyKSk7Ci0gICAgfQotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIoc3Ry
dWN0dXJlTGFiZWwsIHN0YXRpY19jYXN0PGludDMyX3Q+KHVudXNlZFBvaW50ZXIpKTsKLSNpZiBV
U0UoSlNWQUxVRTY0KQotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIoc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVs
dGFDYWxsVG9Mb2FkT3JTdG9yZSksIDApOwotI2Vsc2UKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVw
YXRjaEludDMyKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0
KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUpLCAwKTsKLSAgICBNYWNy
b0Fzc2VtYmxlcjo6cmVwYXRjaEludDMyKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRh
TGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0
b3JlKSwgMCk7Ci0jZW5kaWYKKyAgICByZXNldFB1dEJ5SURDaGVja0FuZExvYWQoc3R1YkluZm8p
OwogICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksIHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRh
Q2FsbFRvU2xvd0Nhc2UpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9T
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMTg5NDkz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw4IEBAIFNjcmF0Y2hSZWdpc3RlckFsbG9j
YXRvcjo6flNjcmF0Y2hSZWdpc3QKIAogdm9pZCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6Omxv
Y2soR1BSUmVnIHJlZykKIHsKKyAgICBpZiAocmVnID09IEludmFsaWRHUFJSZWcpCisgICAgICAg
IHJldHVybjsKICAgICB1bnNpZ25lZCBpbmRleCA9IEdQUkluZm86OnRvSW5kZXgocmVnKTsKICAg
ICBpZiAoaW5kZXggPT0gR1BSSW5mbzo6SW52YWxpZEluZGV4KQogICAgICAgICByZXR1cm47CkBA
IC01MiwxMiArNTQsMjAgQEAgdm9pZCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OmxvY2soR1BS
UgogCiB2b2lkIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6bG9jayhGUFJSZWcgcmVnKQogewor
ICAgIGlmIChyZWcgPT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJuOwogICAgIHVuc2ln
bmVkIGluZGV4ID0gRlBSSW5mbzo6dG9JbmRleChyZWcpOwogICAgIGlmIChpbmRleCA9PSBGUFJJ
bmZvOjpJbnZhbGlkSW5kZXgpCiAgICAgICAgIHJldHVybjsKICAgICBtX2xvY2tlZFJlZ2lzdGVy
cy5zZXRGUFJCeUluZGV4KGluZGV4KTsKIH0KIAordm9pZCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3I6OmxvY2soSlNWYWx1ZVJlZ3MgcmVncykKK3sKKyAgICBsb2NrKHJlZ3MudGFnR1BSKCkpOwor
ICAgIGxvY2socmVncy5wYXlsb2FkR1BSKCkpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5r
SW5mbz4KIHR5cGVuYW1lIEJhbmtJbmZvOjpSZWdpc3RlclR5cGUgU2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yOjphbGxvY2F0ZVNjcmF0Y2goKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oCShyZXZpc2lvbiAxODk0
OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMSArNDAsMTMgQEAgc3RydWN0IFNjcmF0Y2hCdWZm
ZXI7CiAKIGNsYXNzIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciB7CiBwdWJsaWM6CisgICAgU2Ny
YXRjaFJlZ2lzdGVyQWxsb2NhdG9yKCkgeyB9CiAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
KGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzKTsKICAgICB+U2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yKCk7CiAKLSAgICB2b2lkIGxvY2soR1BSUmVnIHJlZyk7Ci0gICAgdm9pZCBsb2Nr
KEZQUlJlZyByZWcpOworICAgIHZvaWQgbG9jayhHUFJSZWcpOworICAgIHZvaWQgbG9jayhGUFJS
ZWcpOworICAgIHZvaWQgbG9jayhKU1ZhbHVlUmVncyk7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQmFua0luZm8+CiAgICAgdHlwZW5hbWUgQmFua0luZm86OlJlZ2lzdGVyVHlwZSBhbGxv
Y2F0ZVNjcmF0Y2goKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
LmgJKHJldmlzaW9uIDE4OTQ5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTg4LDYgKzE4OCw3IEBAIHR5cGVkZWYgY29uc3Qg
Y2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYoYm9vbCwgY2xvYmJlckFsbFJlZ3NJbkZUTElDU2xv
d1BhdGgsICFBU1NFUlRfRElTQUJMRUQsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGFzc3VtZUFs
bFJlZ3NJbkZUTElDQXJlTGl2ZSwgZmFsc2UsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGVuYWJs
ZUFjY2Vzc0lubGluaW5nLCB0cnVlLCBudWxscHRyKSBcCisgICAgdihib29sLCBtYXhBY2Nlc3NW
YXJpYW50TGlzdFNpemUsIDgsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGVuYWJsZVBvbHl2YXJp
YW50RGV2aXJ0dWFsaXphdGlvbiwgdHJ1ZSwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgZW5hYmxl
UG9seW1vcnBoaWNBY2Nlc3NJbmxpbmluZywgdHJ1ZSwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwg
ZW5hYmxlUG9seW1vcnBoaWNDYWxsSW5saW5pbmcsIHRydWUsIG51bGxwdHIpIFwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260797</attachid>
            <date>2015-09-08 14:46:59 -0700</date>
            <delta_ts>2015-09-08 16:06:25 -0700</delta_ts>
            <desc>it does simple things</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>251735</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODk0OTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjcyLDcgKzI3Miw2IEBACiAJCTBGMzAwQjdDMThBQjFC
MTQwMEE2RDcyRSAvKiBERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMDBCN0ExOEFCMUIxNDAwQTZE
NzJFIC8qIERGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYzNEIxNDkxNkQ0MjAxMDAwMUNEQTVB
IC8qIERGR1VzZUtpbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYzNEIxNDcxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuY3BwICovOyB9
OwogCQkwRjM0QjE0QTE2RDQyMDEzMDAxQ0RBNUEgLyogREZHVXNlS2luZC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzNEIxNDgxNkQ0MjAwRTAwMUNE
QTVBIC8qIERGR1VzZUtpbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQkwRjM0QjE0QzE2RDQzRTBEMDAxQ0RBNUEgLyogUG9seW1vcnBoaWNBY2Nl
c3NTdHJ1Y3R1cmVMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjM0QjE0QjE2RDQzRTBDMDAxQ0RBNUEgLyogUG9seW1vcnBoaWNBY2Nlc3NTdHJ1
Y3R1cmVMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEYzOEIwMTExN0NGMDc4MDAwQjE0NEQzIC8qIExMSW50RW50cnlwb2ludC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM4QjAwRjE3Q0Yw
NzdGMDBCMTQ0RDMgLyogTExJbnRFbnRyeXBvaW50LmNwcCAqLzsgfTsKIAkJMEYzOEIwMTIxN0NG
MDc4MzAwQjE0NEQzIC8qIExMSW50RW50cnlwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzOEIwMTAxN0NGMDc3RjAwQjE0NEQzIC8qIExMSW50
RW50cnlwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGMzhCMDE3MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktleS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM4QjAxMzE3
Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25LZXkuY3BwICovOyB9OwpAQCAtMzI0LDgg
KzMyMyw2IEBACiAJCTBGNDg1MzJBMTg3REZERUMwMDgzQjY4NyAvKiBGVExSZWNvdmVyeU9wY29k
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0ODUz
MjYxODdERkRFQzAwODNCNjg3IC8qIEZUTFJlY292ZXJ5T3Bjb2RlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0OTNBRkExNkQwQ0FEMzAwODQ1
MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNDkzQUY4MTZEMENBRDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRl
ci5jcHAgKi87IH07CiAJCTBGNEI5NERDMTdCOUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0
Qjk0REIxN0I5RjA3NTAwREQwM0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEY0Q0VENUUxOENFQTdBQjAw
ODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0Q0VENUMxOENFQTdBQjAwODAyRkUwIC8qIFBv
bHltb3JwaGljR2V0QnlJZExpc3QuY3BwICovOyB9OwotCQkwRjRDRUQ1RjE4Q0VBN0FCMDA4MDJG
RTAgLyogUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0Q0VENUQxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3Jw
aGljR2V0QnlJZExpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjRGMjlERjE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9u
Q291bnRFc3RpbWF0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0RjI5REQxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1
dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcCAqLzsgfTsKIAkJMEY0RjI5RTAxOEI2QUQxQzAw
NTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRGMjlERTE4QjZBRDFD
MDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjUwQUYzQzE5
M0U4QjM5MDA2NzRFRTggLyogREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjUwQUYzQjE5M0U4QjM5MDA2NzRF
RTggLyogREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM5OCw4ICszOTUsNiBAQAogCQkwRjcxNENBNDE2
RUE5MkYwMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcxNENBMTE2RUE5MkVE
MDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAgKi87IH07CiAJCTBG
NzE0Q0E1MTZFQTkyRjIwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcxNENBMjE2
RUE5MkVEMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNzQzQkFBMTZCODgy
NDkwMDlGOTI3NyAvKiBBUk02NERpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTJBM0EyMDE2NTFDNjYxMDBBODBBRkUgLyogQVJN
NjREaXNhc3NlbWJsZXIuY3BwICovOyB9OwotCQkwRjc1NzZEMjE4RTFGRUU5MDAyRUY0Q0QgLyog
QWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NTc2RDAxOEUxRkVFOTAwMkVGNENEIC8qIEFjY2Vzc29y
Q2FsbEpJVFN0dWJSb3V0aW5lLmNwcCAqLzsgfTsKLQkJMEY3NTc2RDMxOEUxRkVFOTAwMkVGNENE
IC8qIEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc1NzZEMTE4RTFGRUU5MDAyRUY0Q0QgLyogQWNjZXNz
b3JDYWxsSklUU3R1YlJvdXRpbmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjc2NkQyODE1QThDQzFFMDA4RjM2M0UgLyogSklUU3R1YlJvdXRp
bmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3
NjZEMjYxNUE4Q0MxQjAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmNwcCAqLzsgfTsKIAkJMEY3
NjZEMkIxNUE4Q0MzODAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzY2RDI5MTVBOENDMzQwMDhG
MzYzRSAvKiBKSVRTdHViUm91dGluZVNldC5jcHAgKi87IH07CiAJCTBGNzY2RDJDMTVBOENDM0Ew
MDhGMzYzRSAvKiBKSVRTdHViUm91dGluZVNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NjZEMkExNUE4Q0MzNDAwOEYzNjNFIC8qIEpJVFN0dWJS
b3V0aW5lU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKQEAgLTQ3Myw4ICs0NjgsNiBAQAogCQkwRjlFMzI2NDFCMDVBQjA0MDA4MDFFRDUgLyogREZH
U3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUUzMjYyMUIwNUFCMDQwMDgwMUVENSAvKiBERkdTdG9yZUJh
cnJpZXJJbnNlcnRpb25QaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGOUZCNEY0MTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91
dFBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGOUZCNEYyMTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNlLmNwcCAqLzsg
fTsKIAkJMEY5RkI0RjUxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUZCNEYzMTdG
Q0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEY5RkM4QzMxNEUxQjVGRTAwRDUyQUUw
IC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RkM4QkYxNEUxQjVGQjAwRDUyQUUwIC8qIFBvbHltb3Jw
aGljUHV0QnlJZExpc3QuY3BwICovOyB9OwotCQkwRjlGQzhDNDE0RTFCNjAwMDBENTJBRTAgLyog
UG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY5RkM4QzAxNEUxQjVGQjAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0
QnlJZExpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjlGQzhDNTE0RTFCNjA0MDBENTJBRTAgLyogUHV0S2luZC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RkM4QzExNEUxQjVGQjAwRDUyQUUw
IC8qIFB1dEtpbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRkEyQzE3QjE3RDdDRjg0MDA5RDAxNUYgLyogVGVzdFJ1bm5lclV0aWxzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQTJDMTc5MTdE
N0NGODQwMDlEMDE1RiAvKiBUZXN0UnVubmVyVXRpbHMuY3BwICovOyB9OwogCQkwRkEyQzE3QzE3
RDdDRjg0MDA5RDAxNUYgLyogVGVzdFJ1bm5lclV0aWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkEyQzE3QTE3RDdDRjg0MDA5RDAxNUYgLyogVGVz
dFJ1bm5lclV0aWxzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTc0Miw2ICs3MzUsOCBAQAogCQkwRkY4QkRFQTFBRDRDRjcxMDBERkU4ODQgLyog
SW5mZXJyZWRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkY4QkRFODFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5jcHAgKi87
IH07CiAJCTBGRjhCREVCMUFENENGNzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY4QkRFOTFBRDRDRjcx
MDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGRjkyMkQ0MTRGNDZCNDEwMDQxQTI0RSAvKiBMTEludE9m
ZnNldHNFeHRyYWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY0NjgwQTExNEJBN0Y4MjAwQkZFMjcyIC8qIExMSW50T2Zmc2V0c0V4dHJhY3Rv
ci5jcHAgKi87IH07CisJCTBGRjlDRTczMUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0Fj
Y2Vzcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkY5Q0U3MTFCOUNENkQwMDA0RURDQTYgLyogUG9seW1vcnBoaWNBY2Nlc3MuY3BwICovOyB9Owor
CQkwRkY5Q0U3NDFCOUNENkQwMDA0RURDQTYgLyogUG9seW1vcnBoaWNBY2Nlc3MuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjlDRTcyMUI5Q0Q2RDAw
MDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRkE1NDk3MTZCODgzNTAwMEIzQTk4MiAvKiBBNjRE
T3Bjb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDY1MkEzQTIyMTY1MUM2OTcwMEE4MEFGRSAvKiBBNjRET3Bjb2RlLmNwcCAqLzsgfTsKIAkJMEZG
QTU0OTgxNkI4ODM1MzAwQjNBOTgyIC8qIEE2NERPcGNvZGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MkEzQTIzMTY1MUM2OTcwMEE4MEFGRSAvKiBB
NjRET3Bjb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEZGQjZDMzgxQUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5cGUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGQjZDMzYxQUY0OEREQzAw
REIxQkY3IC8qIFR5cGVvZlR5cGUuY3BwICovOyB9OwpAQCAtMjEwMyw3ICsyMDk4LDYgQEAKIAkJ
MEYzMDBCN0ExOEFCMUIxNDAwQTZENzJFIC8qIERGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0ludGVnZXJDaGVja0NvbWJp
bmluZ1BoYXNlLmg7IHBhdGggPSBkZmcvREZHSW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzNEIxNDcxNkQ0MjAwRTAwMUNEQTVBIC8q
IERGR1VzZUtpbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZH
VXNlS2luZC5jcHA7IHBhdGggPSBkZmcvREZHVXNlS2luZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMzRCMTQ4MTZENDIwMEUwMDFDREE1QSAvKiBERkdVc2VLaW5kLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1VzZUtpbmQuaDsgcGF0aCA9IGRmZy9E
RkdVc2VLaW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGMzRCMTRCMTZENDNF
MEMwMDFDREE1QSAvKiBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzhCMDBGMTdDRjA3N0YwMEIxNDREMyAv
KiBMTEludEVudHJ5cG9pbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTExJbnRFbnRyeXBvaW50
LmNwcDsgcGF0aCA9IGxsaW50L0xMSW50RW50cnlwb2ludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMzhCMDEwMTdDRjA3N0YwMEIxNDREMyAvKiBMTEludEVudHJ5cG9pbnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gTExJbnRFbnRyeXBvaW50Lmg7IHBhdGggPSBsbGludC9MTEludEVu
dHJ5cG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzOEIwMTMxN0NGRTc1
NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uS2V5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IERGR0NvbXBpbGF0aW9uS2V5LmNwcDsgcGF0aCA9IGRmZy9ERkdDb21w
aWxhdGlvbktleS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMTU2LDggKzIx
NTAsNiBAQAogCQkwRjQ4NTMyNjE4N0RGREVDMDA4M0I2ODcgLyogRlRMUmVjb3ZlcnlPcGNvZGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMUmVjb3ZlcnlPcGNvZGUuaDsg
cGF0aCA9IGZ0bC9GVExSZWNvdmVyeU9wY29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjQ5M0FGODE2RDBDQUQxMDA4NDUwOEIgLyogU291cmNlUHJvdmlkZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU291cmNlUHJvdmlkZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRCOTREQjE3QjlGMDc1MDBERDAzQTQgLyogVHlw
ZWRBcnJheUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRB
cnJheUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY0Q0VENUMxOENF
QTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNENFRDVEMThDRUE3QUIwMDgwMkZFMCAvKiBQb2x5
bW9ycGhpY0dldEJ5SWRMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBv
bHltb3JwaGljR2V0QnlJZExpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0
RjI5REQxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlv
blBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1N0YXRp
Y0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdTdGF0aWNF
eGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGNEYyOURFMThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3Vu
dEVzdGltYXRpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdT
dGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR1N0YXRp
Y0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGNTBBRjNCMTkzRThCMzkwMDY3NEVFOCAvKiBERkdTdHJ1Y3R1cmVDbG9iYmVyU3Rh
dGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU3RydWN0dXJlQ2xvYmJl
clN0YXRlLmg7IHBhdGggPSBkZmcvREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjI5LDggKzIyMjEsNiBAQAogCQkwRjcwMjVBODE3MTRC
MEY4MDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRDb21waWxlckNvbW1vbi5oOyBwYXRoID0gZGZn
L0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjcxNENBMTE2RUE5MkVEMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFz
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdCYWNrd2FyZHNQ
cm9wYWdhdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBo
YXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3MTRDQTIxNkVBOTJFRDAw
RjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5oOyBwYXRoID0g
ZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMEY3NTc2RDAxOEUxRkVFOTAwMkVGNENEIC8qIEFjY2Vzc29yQ2FsbEpJVFN0dWJS
b3V0aW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFjY2Vzc29y
Q2FsbEpJVFN0dWJSb3V0aW5lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY3
NTc2RDExOEUxRkVFOTAwMkVGNENEIC8qIEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5l
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzY2RDFDMTVBNTAyOEQwMDhGMzYz
RSAvKiBKSVRTdHViUm91dGluZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
SVRTdHViUm91dGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc2NkQyNjE1
QThDQzFCMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSklUU3R1YlJvdXRpbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjc2NkQyOTE1QThDQzM0MDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVTZXQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUU3R1YlJvdXRpbmVT
ZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjMwMyw4ICsyMjkzLDYgQEAK
IAkJMEY5RTMyNjIxQjA1QUIwNDAwODAxRUQ1IC8qIERGR1N0b3JlQmFycmllckluc2VydGlvblBo
YXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1N0b3JlQmFycmllcklu
c2VydGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RkI0RjIxN0ZDQjkxNzAwQ0I2N0Y4
IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gREZHU3RhY2tMYXlvdXRQaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHU3RhY2tMYXlv
dXRQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUZCNEYzMTdGQ0I5
MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR1N0YWNrTGF5b3V0UGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdTdGFja0xh
eW91dFBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGOUZDOEJGMTRFMUI1
RkIwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkwRjlGQzhDMDE0RTFCNUZCMDBENTJBRTAgLyogUG9seW1v
cnBoaWNQdXRCeUlkTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb2x5
bW9ycGhpY1B1dEJ5SWRMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUZD
OEMxMTRFMUI1RkIwMEQ1MkFFMCAvKiBQdXRLaW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFB1dEtpbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZBMkMx
NzkxN0Q3Q0Y4NDAwOUQwMTVGIC8qIFRlc3RSdW5uZXJVdGlscy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXN0UnVubmVyVXRpbHMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkEyQzE3QTE3RDdDRjg0MDA5RDAxNUYgLyogVGVzdFJ1bm5lclV0
aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRlc3RSdW5uZXJVdGlscy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjU3OSw2ICsyNTY3LDggQEAKIAkJMEZG
OEJERTgxQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVkVmFsdWUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5mZXJyZWRWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGRjhCREU5MUFENENGNzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZmVycmVkVmFsdWUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGOTIyQ0YxNEY0NkIxMzAwNDFBMjRFIC8qIEpT
Q0xMSW50T2Zmc2V0c0V4dHJhY3RvciAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5k
ZXggPSAwOyBwYXRoID0gSlNDTExJbnRPZmZzZXRzRXh0cmFjdG9yOyBzb3VyY2VUcmVlID0gQlVJ
TFRfUFJPRFVDVFNfRElSOyB9OworCQkwRkY5Q0U3MTFCOUNENkQwMDA0RURDQTYgLyogUG9seW1v
cnBoaWNBY2Nlc3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUG9s
eW1vcnBoaWNBY2Nlc3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkY5Q0U3
MjFCOUNENkQwMDA0RURDQTYgLyogUG9seW1vcnBoaWNBY2Nlc3MuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUG9seW1vcnBoaWNBY2Nlc3MuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZGQjZDMzYxQUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5cGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHlwZW9mVHlwZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRkI2QzM3MUFGNDhEREMwMERCMUJGNyAvKiBUeXBl
b2ZUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVvZlR5cGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQzk5RDAxODRFQzhBRDAwOUMxMEFCIC8q
IENvbnN0YW50TW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25zdGFu
dE1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQwOTYsMTAgKzQwODYsNiBA
QAogCQkxNDI5RDkyQzBFRDIyRDcwMDBCODk2MTkgLyogaml0ICovID0gewogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkwRkYwNTRGNzFBQzM1QjQ0MDBFNUJFNTcgLyog
RXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6LmNwcCAqLywKLQkJCQkwRkYwNTRGODFBQzM1QjQ0MDBF
NUJFNTcgLyogRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6LmggKi8sCi0JCQkJMEY3NTc2RDAxOEUx
RkVFOTAwMkVGNENEIC8qIEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmNwcCAqLywKLQkJCQkw
Rjc1NzZEMTE4RTFGRUU5MDAyRUY0Q0QgLyogQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaCAq
LywKIAkJCQkwRjZCMUNDNzE4NjQxREY4MDA4NDVEOTcgLyogQXJpdHlDaGVja0ZhaWxSZXR1cm5U
aHVua3MuY3BwICovLAogCQkJCTBGNkIxQ0M4MTg2NDFERjgwMDg0NUQ5NyAvKiBBcml0eUNoZWNr
RmFpbFJldHVyblRodW5rcy5oICovLAogCQkJCTBGMjRFNTNCMTdFQTlGNTkwMEFCQjIxNyAvKiBB
c3NlbWJseUhlbHBlcnMuY3BwICovLApAQCAtNDEwOCw2ICs0MDk0LDggQEAKIAkJCQkwRjY0QjI3
MDFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmggKi8sCiAJCQkJMEYyNEU1M0QxN0VB
OUY1OTAwQUJCMjE3IC8qIENDYWxsSGVscGVycy5oICovLAogCQkJCTBGRDgyRTM3MTQxQUIxNDIw
MDE3OUM5NCAvKiBDb21wYWN0SklUQ29kZU1hcC5oICovLAorCQkJCTBGRjA1NEY3MUFDMzVCNDQw
MEU1QkU1NyAvKiBFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouY3BwICovLAorCQkJCTBGRjA1NEY4
MUFDMzVCNDQwMEU1QkU1NyAvKiBFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouaCAqLywKIAkJCQlB
N0I0OERCNjBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAgKi8sCiAJ
CQkJQTdCNDhEQjUwRUU3NENGQzAwRENCREI2IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuaCAqLywK
IAkJCQk4NkRCNjQ2MzBGOTVDNkZDMDBEN0Q5MjEgLyogRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVk
Vk1Qb29sLmNwcCAqLywKQEAgLTQxNTQsOCArNDE0Miw2IEBACiAJCQkJMEZDNzEyRTExN0NEODc4
RjAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggKi8sCiAJ
CQkJQTc2RjU0QTIxM0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5oICovLAogCQkJ
CUE3NkM1MTc0MTE4Mjc0OEQwMDcxNUIwNSAvKiBKU0ludGVyZmFjZUpJVC5oICovLAotCQkJCTBG
RUU5ODQyMUE4OTIyNzUwMDc1NEU5MyAvKiBTZXR1cFZhcmFyZ3NGcmFtZS5jcHAgKi8sCi0JCQkJ
MEZFRTk4NDAxQTg4NjVCNjAwNzU0RTkzIC8qIFNldHVwVmFyYXJnc0ZyYW1lLmggKi8sCiAJCQkJ
MEZFODM0MTUxQTZFRjk3QjAwRDA0ODQ3IC8qIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNw
cCAqLywKIAkJCQkwRkU4MzQxNjFBNkVGOTdCMDBEMDQ4NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1
YlJvdXRpbmUuaCAqLywKIAkJCQkwRkE3QThFOTE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmNwcCAq
LywKQEAgLTQxNjksNiArNDE1NSw4IEBACiAJCQkJMEYyNEU1NEExN0VFMjc0OTAwQUJCMjE3IC8q
IFJlcGF0Y2guaCAqLywKIAkJCQkwRkE3QThFRDE4Q0U0RkQ4MDA1MjM3MUQgLyogU2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yLmNwcCAqLywKIAkJCQkwRjI0RTU0QjE3RUUyNzQ5MDBBQkIyMTcgLyog
U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmggKi8sCisJCQkJMEZFRTk4NDIxQTg5MjI3NTAwNzU0
RTkzIC8qIFNldHVwVmFyYXJnc0ZyYW1lLmNwcCAqLywKKwkJCQkwRkVFOTg0MDFBODg2NUI2MDA3
NTRFOTMgLyogU2V0dXBWYXJhcmdzRnJhbWUuaCAqLywKIAkJCQlBNzA5RjJFRjE3QTBBQzA0MDA1
MTJFOTggLyogU2xvd1BhdGhDYWxsLmggKi8sCiAJCQkJQTczODY1NTExMTg2OTdCNDAwNTQwMjc5
IC8qIFNwZWNpYWxpemVkVGh1bmtKSVQuaCAqLywKIAkJCQlBN0ZGNjQ3QTE4QzUyRTg1MDBCNTUz
MDcgLyogU3BpbGxSZWdpc3RlcnNNb2RlLmggKi8sCkBAIC01NjAyLDExICs1NTkwLDggQEAKIAkJ
CQk5NjlBMDc5NTBFRDFEM0FFMDBGMUY2ODEgLyogT3Bjb2RlLmggKi8sCiAJCQkJMEYyQkRDMkIx
NTFGREU4QjAwQ0Q4OTEwIC8qIE9wZXJhbmRzLmggKi8sCiAJCQkJQTcwNDQ3RTkxN0EwQkQ0NjAw
RjU4OThFIC8qIE9wZXJhbmRzSW5saW5lcy5oICovLAotCQkJCTBGMzRCMTRCMTZENDNFMEMwMDFD
REE1QSAvKiBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QuaCAqLywKLQkJCQkwRjRDRUQ1
QzE4Q0VBN0FCMDA4MDJGRTAgLyogUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAgKi8sCi0JCQkJ
MEY0Q0VENUQxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJZExpc3QuaCAqLywK
LQkJCQkwRjlGQzhCRjE0RTFCNUZCMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5j
cHAgKi8sCi0JCQkJMEY5RkM4QzAxNEUxQjVGQjAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJ
ZExpc3QuaCAqLywKKwkJCQkwRkY5Q0U3MTFCOUNENkQwMDA0RURDQTYgLyogUG9seW1vcnBoaWNB
Y2Nlc3MuY3BwICovLAorCQkJCTBGRjlDRTcyMUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhp
Y0FjY2Vzcy5oICovLAogCQkJCTBGOTgyMDVEMTZCRkUzN0YwMDI0MEQwMiAvKiBQcmVjaXNlSnVt
cFRhcmdldHMuY3BwICovLAogCQkJCTBGOTgyMDVFMTZCRkUzN0YwMDI0MEQwMiAvKiBQcmVjaXNl
SnVtcFRhcmdldHMuaCAqLywKIAkJCQkwRkQzRTQwNzFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVy
dHlDb25kaXRpb24uY3BwICovLApAQCAtNTYzNyw4ICs1NjIyLDggQEAKIAkJCQkwRjJENERFNzE5
ODMyREFDMDA3RDRCMTkgLyogVHlwZUxvY2F0aW9uLmggKi8sCiAJCQkJQTc5RTc4MUUxNUVFQ0JB
ODAwNDdDODU1IC8qIFVubGlua2VkQ29kZUJsb2NrLmNwcCAqLywKIAkJCQlBNzlFNzgxRjE1RUVD
QkE4MDA0N0M4NTUgLyogVW5saW5rZWRDb2RlQmxvY2suaCAqLywKLQkJCQkxNDE0MkU1MDFCNzk2
RUNFMDBGNEJGNEIgLyogVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaCAqLywKIAkJCQkxNDE0
MkU1NDFCNzk3M0MwMDBGNEJGNEIgLyogVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwICov
LAorCQkJCTE0MTQyRTUwMUI3OTZFQ0UwMEY0QkY0QiAvKiBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZS5oICovLAogCQkJCUI1OUY4OTM4MTg5MUFEQjUwMEQ1Q0NEQyAvKiBVbmxpbmtlZEluc3Ry
dWN0aW9uU3RyZWFtLmNwcCAqLywKIAkJCQlCNTlGODkzNzE4OTFBRDMzMDBENUNDREMgLyogVW5s
aW5rZWRJbnN0cnVjdGlvblN0cmVhbS5oICovLAogCQkJCTBGOTYzQjM2MTNGQzZGREUwMDAyRDlC
MiAvKiBWYWx1ZVByb2ZpbGUuaCAqLywKQEAgLTYyMDMsNyArNjE4OCw2IEBACiAJCQkJMEZDMDk3
NzExNDY5M0FGNTAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY3MDI1QUExNzE0QjBGQzAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1v
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFRkM5QUIxNjgxQTNCNjAwNTY3RjUzIC8qIERGR09T
UkV4aXRKdW1wUGxhY2Vob2xkZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGNENFRDVGMThDRUE3
QUIwMDgwMkZFMCAvKiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjIzNUJFRTE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkZGQzk1QzE0RUY5MEFGMDBDNzI1MzIgLyogREZHUGhhc2UuaCBp
biBIZWFkZXJzICovLAogCQkJCUE1RUE3MEVFMTlGNUI1QzQwMDk4RjVFQyAvKiBKU0NvbnRleHRS
ZWZJbnNwZWN0b3JTdXBwb3J0LmggaW4gSGVhZGVycyAqLywKQEAgLTYyNTIsNiArNjIzNiw3IEBA
CiAJCQkJOTlFNDVBMjQxOEExQjI1OTAwMjZEODhGIC8qIEVtcHR5SW5wdXRDdXJzb3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0MTQyRTUzMUI3OTZFREQwMEY0QkY0QiAvKiBFeGVjdXRhYmxlSW5m
by5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTlFNDVBMjYxOEExQjI1OTAwMjZEODhGIC8qIEVuY29k
ZWRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZGOUNFNzQxQjlDRDZEMDAwNEVEQ0E2IC8q
IFBvbHltb3JwaGljQWNjZXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU4NzRFRTE5NEZFQjEy
MDBBQUIyQzEgLyogREZHTWF5RXhpdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMzMDQ2MDcwRTFG
NDk3RjAwMzIzMkNGIC8qIEVycm9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzAyRTkwRDBFMTgz
OURCMDAwRjkyOTcgLyogRXJyb3JDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCkBAIC02NDg1
LDcgKzY0NzAsNiBAQAogCQkJCUJDMThDNDFFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NvbnRleHRS
ZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0OENEMUQ4MTA4Q0Y5MDIwMDgxNjNDNiAvKiBKU0Nv
bnRleHRSZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzIwMjhCODE3OTc2MDFFMDA5
ODAyOEMgLyogSlNDVGVzdFJ1bm5lclV0aWxzLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjc1NzZE
MzE4RTFGRUU5MDAyRUY0Q0QgLyogQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMkI2NkVDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3LmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjJCNjZFRTE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlld1By
b3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc4ODAxNDExNDcxQUQ5MjAwNDFCMDE2IC8q
IEpTRGF0ZU1hdGguaCBpbiBIZWFkZXJzICovLApAQCAtNjY4NSw4ICs2NjY5LDYgQEAKIAkJCQkw
RkNDQUU0NTE2RDBDRjc0MDBEMEM2NUIgLyogUGFyc2VyRXJyb3IuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3N0YxODI1MTY0MTkyQzcwMDY0MEE0NyAvKiBQYXJzZXJNb2Rlcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNjUzMDNENjQxNDQ3QjlFMTAwRDNGOTA0IC8qIFBhcnNlclRva2Vucy5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJMEYzNEIxNEMxNkQ0M0UwRDAwMUNEQTVBIC8qIFBvbHltb3JwaGljQWNj
ZXNzU3RydWN0dXJlTGlzdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEY5RkM4QzQxNEUxQjYwMDAw
RDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
OEYxNDM0MUFERjA5MDEwMEVENzkyQyAvKiBERkdFcG9jaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY5ODIwNjExNkJGRTM4MzAwMjQwRDAyIC8qIFByZWNpc2VKdW1wVGFyZ2V0cy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyREQ4MTUxQUIzRDhCRTAwQkJCOEU4IC8qIERGR0ZvckFsbEtpbGxzLmgg
aW4gSGVhZGVycyAqLywKQEAgLTc4NDcsNyArNzgyOSw2IEBACiAJCQkJMEYwQjgzOUMxNEJDRjQ2
MzAwODg1QjRGIC8qIExMSW50VGh1bmtzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQ0VGQUNE
MTgwNUU3NTUwMDQ3MkNFNCAvKiBMTFZNQVBJLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RTVB
QjM3MTc5OUU0QjIwMEQyODMzRCAvKiBMTFZNRGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCTBGNENFRDVFMThDRUE3QUIwMDgwMkZFMCAvKiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5RERFMTA3RUM3RTcwMDY1MDQ0NiAvKiBMb29r
dXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0NjgwQ0MxNEJCQjE3QTAwQkZFMjcyIC8qIExv
d0xldmVsSW50ZXJwcmV0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRCNzIzQjIxMkQ3REE0
NjAwM0JENUVEIC8qIE1hY2hpbmVTdGFja01hcmtlci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc4
ODksNyArNzg3MCw2IEBACiAJCQkJMEZFMjI4RUUxNDM2QUIyQzAwMTk2QzQ4IC8qIE9wdGlvbnMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ4RjIxQkMxMDdFQzU0RDAwNDJFQzJDIC8qIFBhcnNl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzA1MkMzNDBGQjc5MjE5MDA0OEZEQzMgLyogUGFy
c2VyQXJlbmEuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEY5RkM4QzMxNEUxQjVGRTAwRDUyQUUw
IC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5ODIw
NjAxNkJGRTM4MTAwMjQwRDAyIC8qIFByZWNpc2VKdW1wVGFyZ2V0cy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk5NTc0MkY2NTBERDExRjVBMDAwOTE3RkIgLyogUHJvZmlsZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjJCOUNGODE5RDBCQUMxMDBCMUQxQjUgLyogRlRMT3BlcmF0aW9ucy5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTc5MDYsNiArNzg4Niw3IEBACiAJCQkJMEYxOTBDQUMxODlEODJG
NjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZGNzI5QjMxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2luLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGRjcyOUI0MTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlck9yaWdpblN0
YWNrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRjlDRTczMUI5Q0Q2RDAwMDRFRENBNiAvKiBQ
b2x5bW9ycGhpY0FjY2Vzcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxMDU4QjE2NzU0ODMx
MDBGOEFCNkUgLyogUHJvZmlsZXJPU1JFeGl0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjEw
NThEMTY3NTQ4MzcwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4aXRTaXRlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMTM5MTJCMTY3NzFDM0EwMDlDQ0IwNyAvKiBQcm9maWxlclByb2ZpbGVkQnl0
ZWNvZGVzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtODAxMSw3ICs3OTkyLDYgQEAKIAkJCQlBNzZG
Mjc5NDE1RjEzQzk2MDA1MTdENjcgLyogVW5saW5rZWRDb2RlQmxvY2suY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQjU5Rjg5MzkxODkxRjI5RjAwRDVDQ0RDIC8qIFVubGlua2VkSW5zdHJ1Y3Rpb25T
dHJlYW0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTM5REE0QTYxQjdFOEI3QzAwODRGMzNBIC8q
IEpTTW9kdWxlUmVjb3JkLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGNzU3NkQyMThFMUZFRTkw
MDJFRjRDRCAvKiBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjI0RTU1ODE3Rjc0RURCMDBBQkIyMTcgLyogVmFsdWVSZWNvdmVyeS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlFMThFM0E1OTBERjkyNzhDMDBEOTBCMzQgLyogVk0uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRkU1OTMyQTcxODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50cnlTY29wZS5jcHAg
aW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAkocmV2aXNpb24gMTg5NDkzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAko
d29ya2luZyBjb3B5KQpAQCAtMzI3LDYgKzMyNywxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGR1
bXBXaXRoTmFtZShjb25zdCBjaGFyKiBuYW1lLCBQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAg
IHsKKyAgICAgICAgaWYgKCFtX3ZhbHVlKSB7CisgICAgICAgICAgICBvdXQucHJpbnQobmFtZSwg
IihudWxsKSIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgICAgIGlmIChl
eGVjdXRhYmxlQWRkcmVzcygpID09IGRhdGFMb2NhdGlvbigpKSB7CiAgICAgICAgICAgICBvdXQu
cHJpbnQobmFtZSwgIigiLCBSYXdQb2ludGVyKGV4ZWN1dGFibGVBZGRyZXNzKCkpLCAiKSIpOwog
ICAgICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE4OTQ5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw4ICs1Myw3
IEBACiAjaW5jbHVkZSAiTExJbnRFbnRyeXBvaW50LmgiCiAjaW5jbHVkZSAiTG93TGV2ZWxJbnRl
cnByZXRlci5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0LmgiCi0jaW5jbHVkZSAiUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oIgorI2lu
Y2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCiAjaW5jbHVkZSAiUHJvZmlsZXJEYXRhYmFzZS5o
IgogI2luY2x1ZGUgIlJlZHVjZVdoaXRlc3BhY2UuaCIKICNpbmNsdWRlICJSZXBhdGNoLmgiCkBA
IC0zNDMsMjAgKzM0MiwxOSBAQCB2b2lkIENvZGVCbG9jazo6cHJpbnRHZXRCeUlkQ2FjaGVTdGF0
dXMoCiAgICAgICAgIGlmIChzdHViSW5mby5zZWVuKSB7CiAgICAgICAgICAgICBvdXQucHJpbnRm
KCIgaml0KCIpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBTdHJ1Y3R1cmUqIGJhc2VTdHJ1
Y3R1cmUgPSAwOwotICAgICAgICAgICAgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUgPSAw
OwotICAgICAgICAgICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogbGlzdCA9IDA7CisgICAgICAg
ICAgICBTdHJ1Y3R1cmUqIGJhc2VTdHJ1Y3R1cmUgPSBudWxscHRyOworICAgICAgICAgICAgUG9s
eW1vcnBoaWNBY2Nlc3MqIHN0dWIgPSBudWxscHRyOwogICAgICAgICAgICAgCi0gICAgICAgICAg
ICBzd2l0Y2ggKHN0dWJJbmZvLmFjY2Vzc1R5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgYWNjZXNz
X2dldF9ieV9pZF9zZWxmOgorICAgICAgICAgICAgc3dpdGNoIChzdHViSW5mby5jYWNoZVR5cGUp
IHsKKyAgICAgICAgICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKICAgICAgICAgICAg
ICAgICBvdXQucHJpbnRmKCJzZWxmIik7Ci0gICAgICAgICAgICAgICAgYmFzZVN0cnVjdHVyZSA9
IHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKTsKKyAgICAg
ICAgICAgICAgICBiYXNlU3RydWN0dXJlID0gc3R1YkluZm8udS5ieUlkU2VsZi5iYXNlT2JqZWN0
U3RydWN0dXJlLmdldCgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2Fz
ZSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3Q6Ci0gICAgICAgICAgICAgICAgb3V0LnByaW50ZigibGlz
dCIpOwotICAgICAgICAgICAgICAgIGxpc3QgPSBzdHViSW5mby51LmdldEJ5SWRMaXN0Lmxpc3Q7
CisgICAgICAgICAgICBjYXNlIENhY2hlVHlwZTo6U3R1YjoKKyAgICAgICAgICAgICAgICBvdXQu
cHJpbnRmKCJzdHViIik7CisgICAgICAgICAgICAgICAgc3R1YiA9IHN0dWJJbmZvLnUuc3R1YjsK
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgYWNjZXNzX3Vuc2V0Ogor
ICAgICAgICAgICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0OgogICAgICAgICAgICAgICAgIG91dC5w
cmludGYoInVuc2V0Iik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZh
dWx0OgpAQCAtMzY4LDI3ICszNjYsMTAgQEAgdm9pZCBDb2RlQmxvY2s6OnByaW50R2V0QnlJZENh
Y2hlU3RhdHVzKAogICAgICAgICAgICAgICAgIG91dC5wcmludGYoIiwgIik7CiAgICAgICAgICAg
ICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJzdHJ1Y3QiLCBiYXNlU3RydWN0dXJlLCBpZGVudCk7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChwcm90b3R5cGVT
dHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIsICIpOwotICAgICAgICAg
ICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAicHJvdG90eXBlU3RydWN0IiwgYmFzZVN0cnVjdHVy
ZSwgaWRlbnQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
bGlzdCkgewotICAgICAgICAgICAgICAgIG91dC5wcmludGYoIiwgbGlzdCA9ICVwOiBbIiwgbGlz
dCk7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPnNpemUo
KTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0LnByaW50ZigiLCAiKTsKLSAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50Zigi
KCIpOwotICAgICAgICAgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgImJhc2UiLCBsaXN0
LT5hdChpKS5zdHJ1Y3R1cmUoKSwgaWRlbnQpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWxp
c3QtPmF0KGkpLmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0LnByaW50ZigiLCAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmlu
dChsaXN0LT5hdChpKS5jb25kaXRpb25TZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiKSIpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBvdXQucHJpbnRmKCJdIik7Ci0gICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmIChzdHViKQorICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCAiLCAqc3R1Yik7CisK
ICAgICAgICAgICAgIG91dC5wcmludGYoIikiKTsKICAgICAgICAgfQogICAgIH0KQEAgLTQ0NCw1
MyArNDI1LDE2IEBAIHZvaWQgQ29kZUJsb2NrOjpwcmludFB1dEJ5SWRDYWNoZVN0YXR1cygKICAg
ICAgICAgaWYgKHN0dWJJbmZvLnNlZW4pIHsKICAgICAgICAgICAgIG91dC5wcmludGYoIiBqaXQo
Iik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHN3aXRjaCAoc3R1YkluZm8uYWNjZXNzVHlw
ZSkgewotICAgICAgICAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2U6CisgICAgICAg
ICAgICBzd2l0Y2ggKHN0dWJJbmZvLmNhY2hlVHlwZSkgeworICAgICAgICAgICAgY2FzZSBDYWNo
ZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOgogICAgICAgICAgICAgICAgIG91dC5wcmludCgicmVwbGFj
ZSwgIik7Ci0gICAgICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJzdHJ1Y3QiLCBzdHVi
SW5mby51LnB1dEJ5SWRSZXBsYWNlLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIGlkZW50KTsK
KyAgICAgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgInN0cnVjdCIsIHN0dWJJbmZvLnUu
YnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgaWRlbnQpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25f
bm9ybWFsOgotICAgICAgICAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGly
ZWN0OgotICAgICAgICAgICAgICAgIG91dC5wcmludCgidHJhbnNpdGlvbiwgIik7Ci0gICAgICAg
ICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJwcmV2Iiwgc3R1YkluZm8udS5wdXRCeUlkVHJh
bnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZS5nZXQoKSwgaWRlbnQpOwotICAgICAgICAgICAgICAg
IG91dC5wcmludCgiLCAiKTsKLSAgICAgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgIm5l
eHQiLCBzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5nZXQoKSwgaWRlbnQp
OwotICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0Nv
bmRpdGlvblNldCkKLSAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCIsICIsIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0Ojpmcm9tUmF3UG9pbnRlcihzdHViSW5mby51LnB1dEJ5SWRUcmFu
c2l0aW9uLnJhd0NvbmRpdGlvblNldCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX2xpc3Q6IHsKLSAgICAgICAgICAgICAgICBvdXQu
cHJpbnRmKCJsaXN0ID0gWyIpOwotICAgICAgICAgICAgICAgIFBvbHltb3JwaGljUHV0QnlJZExp
c3QqIGxpc3QgPSBzdHViSW5mby51LnB1dEJ5SWRMaXN0Lmxpc3Q7Ci0gICAgICAgICAgICAgICAg
Q29tbWFQcmludGVyIGNvbW1hOwotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsaXN0LT5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQo
Y29tbWEsICIoIik7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFB1dEJ5SWRBY2Nlc3MmIGFj
Y2VzcyA9IGxpc3QtPmF0KGkpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGFjY2Vzcy5pc1JlcGxhY2UoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
b3V0LnByaW50KCJyZXBsYWNlLCAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBTdHJ1
Y3R1cmUob3V0LCAic3RydWN0IiwgYWNjZXNzLm9sZFN0cnVjdHVyZSgpLCBpZGVudCk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWNjZXNzLmlzU2V0dGVyKCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG91dC5wcmludCgic2V0dGVyLCAiKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAic3RydWN0IiwgYWNjZXNzLm9sZFN0cnVjdHVyZSgp
LCBpZGVudCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWNjZXNzLmlzQ3VzdG9t
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgiY3VzdG9tLCAiKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAic3RydWN0IiwgYWNjZXNz
Lm9sZFN0cnVjdHVyZSgpLCBpZGVudCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
YWNjZXNzLmlzVHJhbnNpdGlvbigpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJp
bnQoInRyYW5zaXRpb24sICIpOwotICAgICAgICAgICAgICAgICAgICAgICAgZHVtcFN0cnVjdHVy
ZShvdXQsICJwcmV2IiwgYWNjZXNzLm9sZFN0cnVjdHVyZSgpLCBpZGVudCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBk
dW1wU3RydWN0dXJlKG91dCwgIm5leHQiLCBhY2Nlc3MubmV3U3RydWN0dXJlKCksIGlkZW50KTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYWNjZXNzLmNvbmRpdGlvblNldCgpLmlzRW1w
dHkoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIiwgYWNjZXNz
LmNvbmRpdGlvblNldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgICAgICBvdXQucHJpbnQoInVua25vd24iKTsKLSAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgiKSIpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBvdXQucHJpbnQoIl0iKTsKKyAgICAgICAgICAgIGNhc2UgQ2FjaGVU
eXBlOjpTdHViOiB7CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCJzdHViLCAiLCAqc3R1Yklu
Zm8udS5zdHViKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGNhc2UgYWNjZXNzX3Vuc2V0OgorICAgICAgICAgICAgY2FzZSBDYWNoZVR5cGU6OlVu
c2V0OgogICAgICAgICAgICAgICAgIG91dC5wcmludGYoInVuc2V0Iik7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMjQ0MywzOSArMjM4NywyMiBAQCB2
b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvCiAgICAgaWYgKEpJVENvZGU6
OmlzSklUKGppdFR5cGUoKSkpIHsKICAgICAgICAgZm9yIChCYWc8U3RydWN0dXJlU3R1YkluZm8+
OjppdGVyYXRvciBpdGVyID0gbV9zdHViSW5mb3MuYmVnaW4oKTsgISFpdGVyOyArK2l0ZXIpIHsK
ICAgICAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9ICoqaXRlcjsKLSAgICAg
ICAgICAgIHN3aXRjaCAoc3R1YkluZm8uYWNjZXNzVHlwZSkgewotICAgICAgICAgICAgY2FzZSBh
Y2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgotICAgICAgICAgICAgY2FzZSBhY2Nl
c3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0OiB7Ci0gICAgICAgICAgICAgICAgSlNDZWxs
KiBvcmlnaW4gPSBzdHViSW5mby5jb2RlT3JpZ2luLmNvZGVPcmlnaW5Pd25lcigpOwotICAgICAg
ICAgICAgICAgIGlmICgoIW9yaWdpbiB8fCBIZWFwOjppc01hcmtlZChvcmlnaW4pKQotICAgICAg
ICAgICAgICAgICAgICAmJiBIZWFwOjppc01hcmtlZChzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0
aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgpKSkKLSAgICAgICAgICAgICAgICAgICAgdmlzaXRv
ci5hcHBlbmQoJnN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlKTsKLSAgICAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGFsbEFyZU1hcmtlZFNvRmFyID0g
ZmFsc2U7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoc3R1YkluZm8u
Y2FjaGVUeXBlICE9IENhY2hlVHlwZTo6U3R1YikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIFBvbHltb3JwaGljQWNjZXNzKiBsaXN0ID0gc3R1YkluZm8udS5zdHViOwor
ICAgICAgICAgICAgSlNDZWxsKiBvcmlnaW4gPSBzdHViSW5mby5jb2RlT3JpZ2luLmNvZGVPcmln
aW5Pd25lcigpOworICAgICAgICAgICAgaWYgKG9yaWdpbiAmJiAhSGVhcDo6aXNNYXJrZWQob3Jp
Z2luKSkgeworICAgICAgICAgICAgICAgIGFsbEFyZU1hcmtlZFNvRmFyID0gZmFsc2U7CisgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNhc2Ug
YWNjZXNzX3B1dF9ieV9pZF9saXN0OiB7Ci0gICAgICAgICAgICAgICAgUG9seW1vcnBoaWNQdXRC
eUlkTGlzdCogbGlzdCA9IHN0dWJJbmZvLnUucHV0QnlJZExpc3QubGlzdDsKLSAgICAgICAgICAg
ICAgICBKU0NlbGwqIG9yaWdpbiA9IHN0dWJJbmZvLmNvZGVPcmlnaW4uY29kZU9yaWdpbk93bmVy
KCk7Ci0gICAgICAgICAgICAgICAgaWYgKG9yaWdpbiAmJiAhSGVhcDo6aXNNYXJrZWQob3JpZ2lu
KSkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gbGlzdC0+c2l6ZSgpOyBqLS07KSB7
CisgICAgICAgICAgICAgICAgY29uc3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0gbGlzdC0+YXQoaik7
CisgICAgICAgICAgICAgICAgaWYgKGFjY2Vzcy50eXBlKCkgIT0gQWNjZXNzQ2FzZTo6VHJhbnNp
dGlvbikKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgaWYg
KEhlYXA6OmlzTWFya2VkKGFjY2Vzcy5zdHJ1Y3R1cmUoKSkpCisgICAgICAgICAgICAgICAgICAg
IHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIoYWNjZXNzLm5ld1N0cnVj
dHVyZSgpKTsKKyAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGFsbEFy
ZU1hcmtlZFNvRmFyID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBsaXN0LT5zaXpl
KCk7IGotLTspIHsKLSAgICAgICAgICAgICAgICAgICAgUHV0QnlJZEFjY2VzcyYgYWNjZXNzID0g
bGlzdC0+bV9saXN0W2pdOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWFjY2Vzcy5pc1RyYW5z
aXRpb24oKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
ICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQoYWNjZXNzLm9sZFN0cnVjdHVyZSgpKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZhY2Nlc3MubV9uZXdTdHJ1Y3R1cmUp
OwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBhbGxB
cmVNYXJrZWRTb0ZhciA9IGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
IH0KQEAgLTI3NjcsMTAgKzI2OTQsMTAgQEAgdm9pZCBDb2RlQmxvY2s6OmdldEJ5VmFsSW5mb01h
cChCeVZhbEluZgogfQogCiAjaWYgRU5BQkxFKEpJVCkKLVN0cnVjdHVyZVN0dWJJbmZvKiBDb2Rl
QmxvY2s6OmFkZFN0dWJJbmZvKCkKK1N0cnVjdHVyZVN0dWJJbmZvKiBDb2RlQmxvY2s6OmFkZFN0
dWJJbmZvKEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSkKIHsKICAgICBDb25jdXJyZW50SklUTG9ja2Vy
IGxvY2tlcihtX2xvY2spOwotICAgIHJldHVybiBtX3N0dWJJbmZvcy5hZGQoKTsKKyAgICByZXR1
cm4gbV9zdHViSW5mb3MuYWRkKGFjY2Vzc1R5cGUpOwogfQogCiBTdHJ1Y3R1cmVTdHViSW5mbyog
Q29kZUJsb2NrOjpmaW5kU3R1YkluZm8oQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTg5NDkz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMDgsNyArMjA4LDcgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0QnlWYWxJbmZv
TWFwKEJ5VmFsSW5mb01hcCYgcmVzdWx0KTsKICAgICAKICNpZiBFTkFCTEUoSklUKQotICAgIFN0
cnVjdHVyZVN0dWJJbmZvKiBhZGRTdHViSW5mbygpOworICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBh
ZGRTdHViSW5mbyhBY2Nlc3NUeXBlKTsKICAgICBCYWc8U3RydWN0dXJlU3R1YkluZm8+OjppdGVy
YXRvciBzdHViSW5mb0JlZ2luKCkgeyByZXR1cm4gbV9zdHViSW5mb3MuYmVnaW4oKTsgfQogICAg
IEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz46Oml0ZXJhdG9yIHN0dWJJbmZvRW5kKCkgeyByZXR1cm4g
bV9zdHViSW5mb3MuZW5kKCk7IH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDE4OTQ5MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjYsMTQgKzI2LDEzIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
R2V0QnlJZFN0YXR1cy5oIgogCi0jaW5jbHVkZSAiQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUu
aCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJDb21wbGV4R2V0U3RhdHVzLmgi
CiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTU2NvcGUuaCIKICNpbmNsdWRl
ICJMTEludERhdGEuaCIKICNpbmNsdWRlICJMb3dMZXZlbEludGVycHJldGVyLmgiCi0jaW5jbHVk
ZSAiUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oIgorI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNz
LmgiCiAjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMTM5
LDEyICsxMzgsMTIgQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwog
ICAgIGlmICghc3R1YkluZm8tPnNlZW4pCiAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKE5v
SW5mb3JtYXRpb24pOwogICAgIAotICAgIFBvbHltb3JwaGljR2V0QnlJZExpc3QqIGxpc3QgPSAw
OworICAgIFBvbHltb3JwaGljQWNjZXNzKiBsaXN0ID0gMDsKICAgICBTdGF0ZSBzbG93UGF0aFN0
YXRlID0gVGFrZXNTbG93UGF0aDsKLSAgICBpZiAoc3R1YkluZm8tPmFjY2Vzc1R5cGUgPT0gYWNj
ZXNzX2dldF9ieV9pZF9saXN0KSB7Ci0gICAgICAgIGxpc3QgPSBzdHViSW5mby0+dS5nZXRCeUlk
TGlzdC5saXN0OworICAgIGlmIChzdHViSW5mby0+Y2FjaGVUeXBlID09IENhY2hlVHlwZTo6U3R1
YikgeworICAgICAgICBsaXN0ID0gc3R1YkluZm8tPnUuc3R1YjsKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBjb25zdCBH
ZXRCeUlkQWNjZXNzJiBhY2Nlc3MgPSBsaXN0LT5hdChpKTsKKyAgICAgICAgICAgIGNvbnN0IEFj
Y2Vzc0Nhc2UmIGFjY2VzcyA9IGxpc3QtPmF0KGkpOwogICAgICAgICAgICAgaWYgKGFjY2Vzcy5k
b2VzQ2FsbHMoKSkKICAgICAgICAgICAgICAgICBzbG93UGF0aFN0YXRlID0gTWFrZXNDYWxsczsK
ICAgICAgICAgfQpAQCAtMTU3LDEyICsxNTYsMTIgQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3Rh
dHVzOjpjb21wdXRlRm9yUwogICAgIEdldEJ5SWRTdGF0dXMgcmVzdWx0OwogICAgIHJlc3VsdC5t
X3N0YXRlID0gU2ltcGxlOwogICAgIHJlc3VsdC5tX3dhc1NlZW5JbkpJVCA9IHRydWU7IC8vIFRo
aXMgaXMgaW50ZXJlc3RpbmcgZm9yIGJ5dGVjb2RlIGR1bXBpbmcgb25seS4KLSAgICBzd2l0Y2gg
KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSB7Ci0gICAgY2FzZSBhY2Nlc3NfdW5zZXQ6CisgICAgc3dp
dGNoIChzdHViSW5mby0+Y2FjaGVUeXBlKSB7CisgICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0Ogog
ICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKICAgICAgICAgCi0g
ICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGY6IHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBzdHViSW5mby0+dS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgp
OworICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjogeworICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IHN0dWJJbmZvLT51LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0
KCk7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVBy
b3BlcnR5KCkpCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhzbG93UGF0aFN0YXRl
LCB0cnVlKTsKICAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlc0lnbm9yZWQ7CkBAIC0xNzcsMTIg
KzE3NiwxNiBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgICAgICAKLSAgICBjYXNlIGFjY2Vzc19nZXRf
YnlfaWRfbGlzdDogeworICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOiB7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgbGlzdEluZGV4ID0gMDsgbGlzdEluZGV4IDwgbGlzdC0+c2l6ZSgpOyArK2xpc3RJ
bmRleCkgewotICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBsaXN0LT5hdChsaXN0
SW5kZXgpLnN0cnVjdHVyZSgpOworICAgICAgICAgICAgY29uc3QgQWNjZXNzQ2FzZSYgYWNjZXNz
ID0gbGlzdC0+YXQobGlzdEluZGV4KTsKKyAgICAgICAgICAgIGlmIChhY2Nlc3MudmlhUHJveHko
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhzbG93UGF0aFN0YXRlLCB0
cnVlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBh
Y2Nlc3Muc3RydWN0dXJlKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIENvbXBsZXhHZXRT
dGF0dXMgY29tcGxleEdldFN0YXR1cyA9IENvbXBsZXhHZXRTdGF0dXM6OmNvbXB1dGVGb3IoCi0g
ICAgICAgICAgICAgICAgc3RydWN0dXJlLCBsaXN0LT5hdChsaXN0SW5kZXgpLmNvbmRpdGlvblNl
dCgpLCB1aWQpOworICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgYWNjZXNzLmNvbmRpdGlvblNl
dCgpLCB1aWQpOwogICAgICAgICAgICAgIAogICAgICAgICAgICAgc3dpdGNoIChjb21wbGV4R2V0
U3RhdHVzLmtpbmQoKSkgewogICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpTaG91
bGRTa2lwOgpAQCAtMTkzLDI5ICsxOTYsMjMgQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVz
Ojpjb21wdXRlRm9yUwogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgQ29tcGxl
eEdldFN0YXR1czo6SW5saW5lYWJsZTogewogICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXM7Ci0gICAgICAgICAgICAgICAgc3dpdGNo
IChsaXN0LT5hdChsaXN0SW5kZXgpLnR5cGUoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgR2V0
QnlJZEFjY2Vzczo6U2ltcGxlSW5saW5lOgotICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlJZEFj
Y2Vzczo6U2ltcGxlU3R1YjogeworICAgICAgICAgICAgICAgIHN3aXRjaCAoYWNjZXNzLnR5cGUo
KSkgeworICAgICAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6TG9hZDogewogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBHZXRCeUlkQWNjZXNzOjpHZXR0ZXI6IHsKLSAgICAgICAgICAgICAgICAgICAgQWNjZXNzb3JD
YWxsSklUU3R1YlJvdXRpbmUqIHN0dWIgPSBzdGF0aWNfY2FzdDxBY2Nlc3NvckNhbGxKSVRTdHVi
Um91dGluZSo+KAotICAgICAgICAgICAgICAgICAgICAgICAgbGlzdC0+YXQobGlzdEluZGV4KS5z
dHViUm91dGluZSgpKTsKKyAgICAgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OkdldHRlcjog
eworICAgICAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGFjY2Vz
cy5jYWxsTGlua0luZm8oKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGNhbGxMaW5rSW5m
byk7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rU3RhdHVzID0gc3RkOjptYWtlX3VuaXF1
ZTxDYWxsTGlua1N0YXR1cz4oCiAgICAgICAgICAgICAgICAgICAgICAgICBDYWxsTGlua1N0YXR1
czo6Y29tcHV0ZUZvcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIHByb2Zp
bGVkQmxvY2ssICpzdHViLT5tX2NhbGxMaW5rSW5mbywgY2FsbEV4aXRTaXRlRGF0YSkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tlciwgcHJvZmlsZWRCbG9jaywgKmNhbGxMaW5r
SW5mbywgY2FsbEV4aXRTaXRlRGF0YSkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2FzZSBHZXRCeUlkQWNjZXNzOjpTaW1w
bGVNaXNzOgotICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlJZEFjY2Vzczo6Q3VzdG9tR2V0dGVy
OgotICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlJZEFjY2Vzczo6V2F0Y2hlZFN0dWI6ewotICAg
ICAgICAgICAgICAgICAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgdG90YWxseSBzd2VldCB0byBz
dXBwb3J0IHRoaXMgYXQgc29tZSBwb2ludCBpbiB0aGUgZnV0dXJlLgotICAgICAgICAgICAgICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMDUyCisg
ICAgICAgICAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTog
SXQgd291bGQgYmUgdG90YWxseSBzd2VldCB0byBzdXBwb3J0IG1vcmUgb2YgdGhlc2UgYXQgc29t
ZSBwb2ludCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gZnV0dXJlLiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMDUyCiAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBHZXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUsIHRydWUpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9IH0KICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgR2V0QnlJZFZhcmlh
bnQgdmFyaWFudCgKICAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlU2V0KHN0cnVjdHVyZSks
IGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJldmlzaW9uIDE4OTMy
NCkJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJ
ZExpc3QuY3BwOjE4OTMyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlBvbHltb3JwaGljR2V0QnlJZExpc3QuaCIKKworI2lmIEVO
QUJMRShKSVQpCisKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJIZWFwLmgiCisj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCisK
K25hbWVzcGFjZSBKU0MgeworCitHZXRCeUlkQWNjZXNzOjpHZXRCeUlkQWNjZXNzKAorICAgIFZN
JiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBQYXNzUmVmUHRyPEpJVFN0dWJS
b3V0aW5lPiBzdHViUm91dGluZSwKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkKKyAgICA6IG1fdHlwZSh0eXBl
KQorICAgICwgbV9zdHJ1Y3R1cmUodm0sIG93bmVyLCBzdHJ1Y3R1cmUpCisgICAgLCBtX2NvbmRp
dGlvblNldChjb25kaXRpb25TZXQpCisgICAgLCBtX3N0dWJSb3V0aW5lKHN0dWJSb3V0aW5lKQor
eworfQorCitHZXRCeUlkQWNjZXNzOjp+R2V0QnlJZEFjY2VzcygpCit7Cit9CisKK0dldEJ5SWRB
Y2Nlc3MgR2V0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbykKK3sKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgaW5pdGlhbFNsb3dQ
YXRoID0KKyAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQo
c3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSk7CisgICAgCisgICAgR2V0QnlJZEFj
Y2VzcyByZXN1bHQ7CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8uYWNjZXNzVHlw
ZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYpOworICAgIAorICAgIHJlc3VsdC5tX3R5cGUgPSBT
aW1wbGVJbmxpbmU7CisgICAgcmVzdWx0Lm1fc3RydWN0dXJlLmNvcHlGcm9tKHN0dWJJbmZvLnUu
Z2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZSk7CisgICAgcmVzdWx0Lm1fc3R1YlJvdXRp
bmUgPSBKSVRTdHViUm91dGluZTo6Y3JlYXRlU2VsZk1hbmFnZWRSb3V0aW5lKGluaXRpYWxTbG93
UGF0aCk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBHZXRCeUlkQWNjZXNz
Ojp2aXNpdFdlYWsoVk0mIHZtKSBjb25zdAoreworICAgIGlmIChtX3N0cnVjdHVyZSAmJiAhSGVh
cDo6aXNNYXJrZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKCFtX2NvbmRpdGlvblNldC5hcmVTdGlsbExpdmUoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmICghbV9zdHViUm91dGluZS0+dmlzaXRXZWFrKHZtKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCitQb2x5bW9ycGhpY0dldEJ5SWRMaXN0
OjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sK
KyAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBtX2xpc3QuYXBwZW5kKEdldEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1
cmVTdHViSW5mbyhzdHViSW5mbykpOworfQorCitQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBQb2x5
bW9ycGhpY0dldEJ5SWRMaXN0Ojpmcm9tKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sK
KyAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3QpCisg
ICAgICAgIHJldHVybiBzdHViSW5mby51LmdldEJ5SWRMaXN0Lmxpc3Q7CisgICAgCisgICAgQVNT
RVJUKAorICAgICAgICBzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2Vs
ZgorICAgICAgICB8fCBzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc191bnNldCk7CisgICAg
CisgICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogcmVzdWx0ID0gbmV3IFBvbHltb3JwaGljR2V0
QnlJZExpc3Qoc3R1YkluZm8pOworICAgIAorICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkTGlzdChy
ZXN1bHQpOworICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1BvbHltb3JwaGljR2V0QnlJ
ZExpc3Q6On5Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0KCkgeyB9CisKK01hY3JvQXNzZW1ibGVyQ29k
ZVB0ciBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpjdXJyZW50U2xvd1BhdGhUYXJnZXQoCisgICAg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKSBjb25zdAoreworICAgIGlmIChpc0VtcHR5KCkp
CisgICAgICAgIHJldHVybiBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNl
dChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKKyAgICByZXR1cm4gbV9saXN0
Lmxhc3QoKS5zdHViUm91dGluZSgpLT5jb2RlKCkuY29kZSgpOworfQorCit2b2lkIFBvbHltb3Jw
aGljR2V0QnlJZExpc3Q6OmFkZEFjY2Vzcyhjb25zdCBHZXRCeUlkQWNjZXNzJiBhY2Nlc3MpCit7
CisgICAgQVNTRVJUKCFpc0Z1bGwoKSk7CisgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHJlc2l6
aW5nIG9wdGltaXplcyBmb3Igc3BhY2UsIG5vdCB0aW1lLgorICAgIG1fbGlzdC5yZXNpemVUb0Zp
dChtX2xpc3Quc2l6ZSgpICsgMSk7CisgICAgbV9saXN0Lmxhc3QoKSA9IGFjY2VzczsKK30KKwor
Ym9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojppc0Z1bGwoKSBjb25zdAoreworICAgIEFTU0VS
VChzaXplKCkgPD0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKTsKKyAgICByZXR1cm4gc2l6
ZSgpID09IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRTsKK30KKworYm9vbCBQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0Ojppc0FsbW9zdEZ1bGwoKSBjb25zdAoreworICAgIEFTU0VSVChzaXplKCkg
PD0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKTsKKyAgICByZXR1cm4gc2l6ZSgpID49IFBP
TFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDE7Cit9CisKK2Jvb2wgUG9seW1vcnBoaWNHZXRC
eUlkTGlzdDo6ZGlkU2VsZlBhdGNoaW5nKCkgY29uc3QKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSBzaXplKCk7IGktLTspIHsKKyAgICAgICAgaWYgKGF0KGkpLnR5cGUoKSA9PSBHZXRCeUlkQWNj
ZXNzOjpTaW1wbGVJbmxpbmUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OnZpc2l0V2Vh
ayhWTSYgdm0pIGNvbnN0Cit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gc2l6ZSgpOyBpLS07KSB7
CisgICAgICAgIGlmICghYXQoaSkudmlzaXRXZWFrKHZtKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI0LDEzMSArMjQsMTEyNCBAQAogICovCiAKICNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgiCisjaW5jbHVkZSAi
UG9seW1vcnBoaWNBY2Nlc3MuaCIKIAogI2lmIEVOQUJMRShKSVQpCiAKKyNpbmNsdWRlICJCaW5h
cnlTd2l0Y2guaCIKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKICNpbmNsdWRlICJDb2RlQmxv
Y2suaCIKKyNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJIZWFwLmgiCisjaW5j
bHVkZSAiSklUT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRl
ICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCisj
aW5jbHVkZSAiU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgIlN0
cnVjdHVyZVN0dWJJbmZvLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CiAKIG5hbWVzcGFj
ZSBKU0MgewogCi1HZXRCeUlkQWNjZXNzOjpHZXRCeUlkQWNjZXNzKAotICAgIFZNJiB2bSwgSlND
ZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBz
dHViUm91dGluZSwKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkKLSAgICA6IG1fdHlwZSh0eXBlKQotICAgICwg
bV9zdHJ1Y3R1cmUodm0sIG93bmVyLCBzdHJ1Y3R1cmUpCi0gICAgLCBtX2NvbmRpdGlvblNldChj
b25kaXRpb25TZXQpCi0gICAgLCBtX3N0dWJSb3V0aW5lKHN0dWJSb3V0aW5lKQorc3RhdGljIGNv
bnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCitzdHJ1Y3QgQWNjZXNzR2VuZXJhdGlvblN0YXRl
IHsKKyAgICBDQ2FsbEhlbHBlcnMqIGppdCB7IG51bGxwdHIgfTsKKyAgICBTY3JhdGNoUmVnaXN0
ZXJBbGxvY2F0b3IqIGFsbG9jYXRvcjsKKyAgICBzaXplX3QgbnVtYmVyT2ZQYWRkaW5nQnl0ZXMg
eyAwIH07CisgICAgUG9seW1vcnBoaWNBY2Nlc3MqIGFjY2VzcyB7IG51bGxwdHIgfTsKKyAgICBT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8geyBudWxscHRyIH07CisgICAgQ0NhbGxIZWxwZXJz
OjpKdW1wTGlzdCBzdWNjZXNzOworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZmFpbEFuZFJl
cGF0Y2g7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBmYWlsQW5kSWdub3JlOworICAgIEdQ
UlJlZyBiYXNlR1BSIHsgSW52YWxpZEdQUlJlZyB9OworICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVn
czsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUiB7IEludmFsaWRHUFJSZWcgfTsKKyAgICBWZWN0b3I8
c3RkOjpmdW5jdGlvbjx2b2lkKExpbmtCdWZmZXImKT4+IGNhbGxiYWNrczsKKyAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2F0Y2hwb2ludHNPblN0cnVj
dHVyZVN0dWJJbmZvPiB3YXRjaHBvaW50czsKKworICAgIFdhdGNocG9pbnQqIGFkZFdhdGNocG9p
bnQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA9IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uKCkpCisgICAgeworICAgICAgICByZXR1cm4gV2F0Y2hwb2ludHNPblN0cnVj
dHVyZVN0dWJJbmZvOjplbnN1cmVSZWZlcmVuY2VBbmRBZGRXYXRjaHBvaW50KAorICAgICAgICAg
ICAgd2F0Y2hwb2ludHMsIGppdC0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLCBjb25kaXRpb24pOwor
ICAgIH0KKworICAgIHZvaWQgcmVzdG9yZVNjcmF0Y2goKQorICAgIHsKKyAgICAgICAgYWxsb2Nh
dG9yLT5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKCpqaXQsIG51bWJlck9mUGFkZGlu
Z0J5dGVzKTsKKyAgICB9CisKKyAgICB2b2lkIHN1Y2NlZWQoKQorICAgIHsKKyAgICAgICAgcmVz
dG9yZVNjcmF0Y2goKTsKKyAgICAgICAgc3VjY2Vzcy5hcHBlbmQoaml0LT5qdW1wKCkpOworICAg
IH0KK307CisKK0FjY2Vzc0Nhc2U6OkFjY2Vzc0Nhc2UoKQogewogfQogCi1HZXRCeUlkQWNjZXNz
Ojp+R2V0QnlJZEFjY2VzcygpCitzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2Fz
ZTo6Z2V0KAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQsIFN0cnVjdHVyZSogc3RydWN0dXJlLAorICAgIGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIGJvb2wgdmlhUHJveHksIFdhdGNo
cG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQsCisgICAgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMg
Y3VzdG9tR2V0dGVyKQogeworICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1bHQo
bmV3IEFjY2Vzc0Nhc2UoKSk7CisKKyAgICByZXN1bHQtPm1fdHlwZSA9IHR5cGU7CisgICAgcmVz
dWx0LT5tX29mZnNldCA9IG9mZnNldDsKKyAgICByZXN1bHQtPm1fc3RydWN0dXJlLnNldCh2bSwg
b3duZXIsIHN0cnVjdHVyZSk7CisgICAgcmVzdWx0LT5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlv
blNldDsKKyAgICAKKyAgICBpZiAodmlhUHJveHkgfHwgYWRkaXRpb25hbFNldCB8fCByZXN1bHQt
PmRvZXNDYWxscygpIHx8IGN1c3RvbUdldHRlcikgeworICAgICAgICByZXN1bHQtPm1fcmFyZURh
dGEgPSBzdGQ6Om1ha2VfdW5pcXVlPFJhcmVEYXRhPigpOworICAgICAgICByZXN1bHQtPm1fcmFy
ZURhdGEtPnZpYVByb3h5ID0gdmlhUHJveHk7CisgICAgICAgIHJlc3VsdC0+bV9yYXJlRGF0YS0+
YWRkaXRpb25hbFNldCA9IGFkZGl0aW9uYWxTZXQ7CisgICAgICAgIHJlc3VsdC0+bV9yYXJlRGF0
YS0+Y3VzdG9tQWNjZXNzb3IuZ2V0dGVyID0gY3VzdG9tR2V0dGVyOworICAgIH0KKworICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLUdldEJ5SWRBY2Nlc3MgR2V0QnlJZEFjY2Vzczo6ZnJvbVN0cnVj
dHVyZVN0dWJJbmZvKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3N0ZDo6dW5pcXVlX3B0
cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpyZXBsYWNlKAorICAgIFZNJiB2bSwgSlNDZWxsKiBv
d25lciwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKLSAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgaW5pdGlhbFNsb3dQYXRoID0KLSAgICAgICAgc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFD
YWxsVG9TbG93Q2FzZSk7Ci0gICAgCi0gICAgR2V0QnlJZEFjY2VzcyByZXN1bHQ7Ci0gICAgCi0g
ICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lk
X3NlbGYpOwotICAgIAotICAgIHJlc3VsdC5tX3R5cGUgPSBTaW1wbGVJbmxpbmU7Ci0gICAgcmVz
dWx0Lm1fc3RydWN0dXJlLmNvcHlGcm9tKHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVj
dFN0cnVjdHVyZSk7Ci0gICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBKSVRTdHViUm91dGluZTo6
Y3JlYXRlU2VsZk1hbmFnZWRSb3V0aW5lKGluaXRpYWxTbG93UGF0aCk7Ci0gICAgCisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHJlc3VsdChuZXcgQWNjZXNzQ2FzZSgpKTsKKworICAg
IHJlc3VsdC0+bV90eXBlID0gUmVwbGFjZTsKKyAgICByZXN1bHQtPm1fb2Zmc2V0ID0gb2Zmc2V0
OworICAgIHJlc3VsdC0+bV9zdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKKwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nl
c3NDYXNlOjp0cmFuc2l0aW9uKAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJl
KiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQsCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNl
dCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChvbGRTdHJ1Y3R1cmUgPT0gbmV3U3RydWN0dXJlLT5w
cmV2aW91c0lEKCkpOworCisgICAgLy8gU2tpcCBvcHRpbWl6aW5nIHRoZSBjYXNlIHdoZXJlIHdl
IG5lZWQgYSByZWFsbG9jLCBpZiB3ZSBkb24ndCBoYXZlCisgICAgLy8gZW5vdWdoIHJlZ2lzdGVy
cyB0byBtYWtlIGl0IGhhcHBlbi4KKyAgICBpZiAoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMg
PCA2CisgICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBuZXdT
dHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkKKyAgICAgICAgJiYgb2xkU3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpKSB7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKwor
ICAgIC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIHJlYWxsb2MsIGFu
ZCB0aGUgc3RydWN0dXJlIGhhcworICAgIC8vIGluZGV4aW5nIHN0b3JhZ2UuCisgICAgLy8gRklY
TUU6IFdlIHNob3VsZG4ndCBza2lwIHRoaXMhIEltcGxlbWVudCBpdCEKKyAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMwOTE0CisgICAgaWYgKG9sZFN0cnVj
dHVyZS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gcmVzdWx0KG5ldyBBY2Nlc3NDYXNl
KCkpOworCisgICAgcmVzdWx0LT5tX3R5cGUgPSBUcmFuc2l0aW9uOworICAgIHJlc3VsdC0+bV9v
ZmZzZXQgPSBvZmZzZXQ7CisgICAgcmVzdWx0LT5tX3N0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBu
ZXdTdHJ1Y3R1cmUpOworICAgIHJlc3VsdC0+bV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7
CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4g
QWNjZXNzQ2FzZTo6c2V0dGVyKAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlw
ZSB0eXBlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAorICAg
IGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIFB1dFByb3Bl
cnR5U2xvdDo6UHV0VmFsdWVGdW5jIGN1c3RvbVNldHRlcikKK3sKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8QWNjZXNzQ2FzZT4gcmVzdWx0KG5ldyBBY2Nlc3NDYXNlKCkpOworCisgICAgcmVzdWx0LT5t
X3R5cGUgPSB0eXBlOworICAgIHJlc3VsdC0+bV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgcmVzdWx0
LT5tX3N0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOworICAgIHJlc3VsdC0+bV9j
b25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7CisKKyAgICBpZiAoY3VzdG9tU2V0dGVyKSB7Cisg
ICAgICAgIHJlc3VsdC0+bV9yYXJlRGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8UmFyZURhdGE+KCk7
CisgICAgICAgIHJlc3VsdC0+bV9yYXJlRGF0YS0+Y3VzdG9tQWNjZXNzb3Iuc2V0dGVyID0gY3Vz
dG9tU2V0dGVyOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0ZDo6dW5pcXVl
X3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjppbigKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3du
ZXIsIEFjY2Vzc1R5cGUgdHlwZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCisgICAgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkKK3sKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8QWNjZXNzQ2FzZT4gcmVzdWx0KG5ldyBBY2Nlc3NDYXNlKCkpOworCisgICAgcmVzdWx0
LT5tX3R5cGUgPSB0eXBlOworICAgIHJlc3VsdC0+bV9zdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwg
c3RydWN0dXJlKTsKKyAgICByZXN1bHQtPm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0Owor
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFj
Y2Vzc0Nhc2U6OmdldExlbmd0aChWTSYsIEpTQ2VsbCosIEFjY2Vzc1R5cGUgdHlwZSkKK3sKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gcmVzdWx0KG5ldyBBY2Nlc3NDYXNlKCkpOwor
CisgICAgcmVzdWx0LT5tX3R5cGUgPSB0eXBlOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
QWNjZXNzQ2FzZTo6fkFjY2Vzc0Nhc2UoKQoreworfQorCitzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNz
Q2FzZT4gQWNjZXNzQ2FzZTo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKAorICAgIFZNJiB2bSwgSlND
ZWxsKiBvd25lciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIHN3aXRjaCAo
c3R1YkluZm8uY2FjaGVUeXBlKSB7CisgICAgY2FzZSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxmOgor
ICAgICAgICByZXR1cm4gZ2V0KAorICAgICAgICAgICAgdm0sIG93bmVyLCBMb2FkLCBzdHViSW5m
by51LmJ5SWRTZWxmLm9mZnNldCwKKyAgICAgICAgICAgIHN0dWJJbmZvLnUuYnlJZFNlbGYuYmFz
ZU9iamVjdFN0cnVjdHVyZS5nZXQoKSk7CisKKyAgICBjYXNlIENhY2hlVHlwZTo6UHV0QnlJZFJl
cGxhY2U6CisgICAgICAgIHJldHVybiByZXBsYWNlKAorICAgICAgICAgICAgdm0sIG93bmVyLCBz
dHViSW5mby51LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHN0dWJJbmZvLnUu
YnlJZFNlbGYub2Zmc2V0KTsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIH0KK30KKworc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OmNs
b25lKCkgY29uc3QKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gcmVzdWx0KG5l
dyBBY2Nlc3NDYXNlKCkpOworICAgIHJlc3VsdC0+bV90eXBlID0gbV90eXBlOworICAgIHJlc3Vs
dC0+bV9vZmZzZXQgPSBtX29mZnNldDsKKyAgICByZXN1bHQtPm1fc3RydWN0dXJlID0gbV9zdHJ1
Y3R1cmU7CisgICAgcmVzdWx0LT5tX2NvbmRpdGlvblNldCA9IG1fY29uZGl0aW9uU2V0OworICAg
IGlmIChSYXJlRGF0YSogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7CisgICAgICAgIHJl
c3VsdC0+bV9yYXJlRGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8UmFyZURhdGE+KCk7CisgICAgICAg
IHJlc3VsdC0+bV9yYXJlRGF0YS0+dmlhUHJveHkgPSByYXJlRGF0YS0+dmlhUHJveHk7CisgICAg
ICAgIHJlc3VsdC0+bV9yYXJlRGF0YS0+YWRkaXRpb25hbFNldCA9IHJhcmVEYXRhLT5hZGRpdGlv
bmFsU2V0OworICAgICAgICAvLyBOT1RFOiBXZSBkb24ndCBjb3B5IHRoZSBjYWxsTGlua0luZm8s
IHNpbmNlIHRoYXQncyBjcmVhdGVkIGR1cmluZyBjb2RlIGdlbmVyYXRpb24uCisgICAgICAgIHJl
c3VsdC0+bV9yYXJlRGF0YS0+Y3VzdG9tQWNjZXNzb3Iub3BhcXVlID0gcmFyZURhdGEtPmN1c3Rv
bUFjY2Vzc29yLm9wYXF1ZTsKKyAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotYm9vbCBH
ZXRCeUlkQWNjZXNzOjp2aXNpdFdlYWsoVk0mIHZtKSBjb25zdAorYm9vbCBBY2Nlc3NDYXNlOjpn
dWFyZGVkQnlTdHJ1Y3R1cmVDaGVjaygpIGNvbnN0Cit7CisgICAgaWYgKHZpYVByb3h5KCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgY2FzZSBB
cnJheUxlbmd0aDoKKyAgICBjYXNlIFN0cmluZ0xlbmd0aDoKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKworYm9vbCBB
Y2Nlc3NDYXNlOjpjYW5SZXBsYWNlKGNvbnN0IEFjY2Vzc0Nhc2UmIG90aGVyKQoreworICAgIC8v
IFdlIGNvdWxkIGRvIGEgbG90IGJldHRlciBoZXJlLCBidXQgZm9yIG5vdyB3ZSBqdXN0IGRvIHNv
bWV0aGluZyBvYnZpb3VzLgorCisgICAgaWYgKCFndWFyZGVkQnlTdHJ1Y3R1cmVDaGVjaygpIHx8
ICFvdGhlci5ndWFyZGVkQnlTdHJ1Y3R1cmVDaGVjaygpKSB7CisgICAgICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgdGhpcyEKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVy
biBzdHJ1Y3R1cmUoKSA9PSBvdGhlci5zdHJ1Y3R1cmUoKTsKK30KKwordm9pZCBBY2Nlc3NDYXNl
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KAorICAgICAg
ICBtX3R5cGUsICI6KHN0cnVjdHVyZSA9ICIsIHBvaW50ZXJEdW1wKG1fc3RydWN0dXJlLmdldCgp
KSwgIiwgb2Zmc2V0ID0gIiwgbV9vZmZzZXQsCisgICAgICAgICIsIGNvbmRpdGlvbnMgPSAiLCBt
X2NvbmRpdGlvblNldCk7CisKKyAgICBpZiAoUmFyZURhdGEqIHJhcmVEYXRhID0gbV9yYXJlRGF0
YS5nZXQoKSkgeworICAgICAgICBvdXQucHJpbnQoCisgICAgICAgICAgICAiLCB2aWFQcm94eSA9
ICIsIHJhcmVEYXRhLT52aWFQcm94eSwKKyAgICAgICAgICAgICIsIGFkZGl0aW9uYWxTZXQgPSAi
LCBSYXdQb2ludGVyKHJhcmVEYXRhLT5hZGRpdGlvbmFsU2V0LmdldCgpKSwKKyAgICAgICAgICAg
ICIsIGNhbGxMaW5rSW5mbyA9ICIsIFJhd1BvaW50ZXIocmFyZURhdGEtPmNhbGxMaW5rSW5mby5n
ZXQoKSksCisgICAgICAgICAgICAiLCBjdXN0b21BY2Nlc3NvciA9ICIsIFJhd1BvaW50ZXIocmFy
ZURhdGEtPmN1c3RvbUFjY2Vzc29yLm9wYXF1ZSkpOworICAgIH0KKworICAgIG91dC5wcmludCgi
KSIpOworfQorCitib29sIEFjY2Vzc0Nhc2U6OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0CiB7CiAg
ICAgaWYgKG1fc3RydWN0dXJlICYmICFIZWFwOjppc01hcmtlZChtX3N0cnVjdHVyZS5nZXQoKSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIW1fY29uZGl0aW9uU2V0LmFyZVN0aWxs
TGl2ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFtX3N0dWJSb3V0aW5lLT52
aXNpdFdlYWsodm0pKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fcmFyZURhdGEg
JiYgbV9yYXJlRGF0YS0+Y2FsbExpbmtJbmZvKQorICAgICAgICBtX3JhcmVEYXRhLT5jYWxsTGlu
a0luZm8tPnZpc2l0V2Vhayh2bSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVBvbHltb3JwaGlj
R2V0QnlJZExpc3Q6OlBvbHltb3JwaGljR2V0QnlJZExpc3QoU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvKQordm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKKyAgICBBY2Nlc3NH
ZW5lcmF0aW9uU3RhdGUmIHN0YXRlLCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0JiBmYWxsVGhyb3Vn
aCkKIHsKLSAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpCi0gICAg
ICAgIHJldHVybjsKLSAgICAKLSAgICBtX2xpc3QuYXBwZW5kKEdldEJ5SWRBY2Nlc3M6OmZyb21T
dHJ1Y3R1cmVTdHViSW5mbyhzdHViSW5mbykpOworICAgIENDYWxsSGVscGVycyYgaml0ID0gKnN0
YXRlLmppdDsKKworICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgY2FzZSBBcnJheUxlbmd0aDog
eworICAgICAgICBBU1NFUlQoIXZpYVByb3h5KCkpOworICAgICAgICBqaXQubG9hZDgoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKHN0YXRlLmJhc2VHUFIsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0
KCkpLCBzdGF0ZS5zY3JhdGNoR1BSKTsKKyAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKAorICAg
ICAgICAgICAgaml0LmJyYW5jaFRlc3QzMigKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
Olplcm8sIHN0YXRlLnNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKElzQXJy
YXkpKSk7CisgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgKKyAgICAgICAgICAgIGppdC5icmFu
Y2hUZXN0MzIoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpaZXJvLCBzdGF0ZS5zY3Jh
dGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzaykpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBTdHJpbmdMZW5ndGg6IHsKKyAgICAg
ICAgQVNTRVJUKCF2aWFQcm94eSgpKTsKKyAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKAorICAg
ICAgICAgICAgaml0LmJyYW5jaDgoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RF
cXVhbCwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RhdGUuYmFzZUdQ
UiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoU3RyaW5nVHlwZSkpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgZGVmYXVsdDogeworICAgICAgICBpZiAodmlhUHJveHkoKSkgeworICAgICAgICAg
ICAgZmFsbFRocm91Z2guYXBwZW5kKAorICAgICAgICAgICAgICAgIGppdC5icmFuY2g4KAorICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RhdGUuYmFzZUdQUiwgSlNDZWxsOjp0eXBlSW5m
b1R5cGVPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKFB1cmVGb3J3YXJkaW5nUHJveHlUeXBlKSkpOworCisgICAgICAgICAgICBqaXQubG9h
ZFB0cigKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RhdGUuYmFzZUdQ
UiwgSlNQcm94eTo6dGFyZ2V0T2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIHN0YXRlLnNjcmF0
Y2hHUFIpOworCisgICAgICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCisgICAgICAgICAgICAg
ICAgaml0LmJyYW5jaFN0cnVjdHVyZSgKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpOb3RFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0
YXRlLnNjcmF0Y2hHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCisgICAgICAgICAg
ICAgICAgICAgIHN0cnVjdHVyZSgpKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBm
YWxsVGhyb3VnaC5hcHBlbmQoCisgICAgICAgICAgICAgICAgaml0LmJyYW5jaFN0cnVjdHVyZSgK
KyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKKyAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0YXRlLmJhc2VHUFIsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSgpKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfSB9OworCisgICAgZ2VuZXJhdGUoc3RhdGUp
OwogfQogCi1Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojpm
cm9tKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3ZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJh
dGUoQWNjZXNzR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAoc3R1YkluZm8uYWNj
ZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3QpCi0gICAgICAgIHJldHVybiBzdHViSW5m
by51LmdldEJ5SWRMaXN0Lmxpc3Q7Ci0gICAgCi0gICAgQVNTRVJUKAotICAgICAgICBzdHViSW5m
by5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZgotICAgICAgICB8fCBzdHViSW5m
by5hY2Nlc3NUeXBlID09IGFjY2Vzc191bnNldCk7Ci0gICAgCi0gICAgUG9seW1vcnBoaWNHZXRC
eUlkTGlzdCogcmVzdWx0ID0gbmV3IFBvbHltb3JwaGljR2V0QnlJZExpc3Qoc3R1YkluZm8pOwot
ICAgIAotICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkTGlzdChyZXN1bHQpOworICAgIENDYWxsSGVs
cGVycyYgaml0ID0gKnN0YXRlLmppdDsKKyAgICBWTSYgdm0gPSAqaml0LnZtKCk7CisgICAgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gKnN0YXRlLnN0dWJJbmZvOworICAgIGNvbnN0IElk
ZW50aWZpZXImIGlkZW50ID0gKnN0YXRlLmlkZW50OworICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVn
cyA9IHN0YXRlLnZhbHVlUmVnczsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRlLmJhc2VHUFI7
CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzdGF0ZS5zY3JhdGNoR1BSOworCisgICAgQVNTRVJU
KG1fY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJv
cGVydHlXYXRjaHBvaW50KCkpOworCisgICAgaWYgKHN0cnVjdHVyZSgpLT5uZWVkSW1wdXJlUHJv
cGVydHlXYXRjaHBvaW50KCkgfHwgbV9jb25kaXRpb25TZXQubmVlZEltcHVyZVByb3BlcnR5V2F0
Y2hwb2ludCgpKQorICAgICAgICB2bS5yZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0
eShpZGVudCwgc3RhdGUuYWRkV2F0Y2hwb2ludCgpKTsKKworICAgIGlmIChhZGRpdGlvbmFsU2V0
KCkpCisgICAgICAgIGFkZGl0aW9uYWxTZXQoKS0+YWRkKHN0YXRlLmFkZFdhdGNocG9pbnQoKSk7
CisKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiBt
X2NvbmRpdGlvblNldCkgeworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNvbmRpdGlv
bi5vYmplY3QoKS0+c3RydWN0dXJlKCk7CisKKyAgICAgICAgaWYgKGNvbmRpdGlvbi5pc1dhdGNo
YWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKKyAgICAgICAgICAgIHN0
cnVjdHVyZS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoc3RhdGUuYWRkV2F0Y2hwb2ludChjb25k
aXRpb24pKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoY29uZGl0aW9uLnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eUFzc3VtaW5nSW1w
dXJlUHJvcGVydHlXYXRjaHBvaW50KHN0cnVjdHVyZSkpOworICAgICAgICBqaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY29uZGl0aW9uLm9iamVjdCgpKSwgc2NyYXRjaEdQUik7
CisgICAgICAgIHN0YXRlLmZhaWxBbmRSZXBhdGNoLmFwcGVuZCgKKyAgICAgICAgICAgIGppdC5i
cmFuY2hTdHJ1Y3R1cmUoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwK
KyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUpKTsKKyAg
ICB9CisKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgSW5IaXQ6CisgICAgY2FzZSBJ
bk1pc3M6CisgICAgICAgIGppdC5ib3hCb29sZWFuUGF5bG9hZChtX3R5cGUgPT0gSW5IaXQsIHZh
bHVlUmVncy5wYXlsb2FkR1BSKCkpOworICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7CisgICAgICAg
IHJldHVybjsKKworICAgIGNhc2UgTWlzczoKKyAgICAgICAgaml0Lm1vdmVUcnVzdGVkVmFsdWUo
anNVbmRlZmluZWQoKSwgdmFsdWVSZWdzKTsKKyAgICAgICAgc3RhdGUuc3VjY2VlZCgpOworICAg
ICAgICByZXR1cm47CisKKyAgICBjYXNlIExvYWQ6CisgICAgY2FzZSBHZXR0ZXI6CisgICAgY2Fz
ZSBTZXR0ZXI6CisgICAgY2FzZSBDdXN0b21HZXR0ZXI6CisgICAgY2FzZSBDdXN0b21TZXR0ZXI6
IHsKKyAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQobV9vZmZzZXQpKSB7CisgICAgICAgICAgICBT
dHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmU7CisgICAgICAgICAgICBpZiAobV9jb25kaXRpb25TZXQu
aXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmUoKTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjdXJyU3RydWN0dXJlID0gbV9jb25k
aXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vYmplY3QoKS0+c3RydWN0dXJlKCk7CisgICAg
ICAgICAgICBjdXJyU3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVu
dHModm0sIG9mZnNldCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIEdQUlJlZyBiYXNlRm9yR2V0
R1BSOworICAgICAgICBpZiAodmlhUHJveHkoKSkgeworICAgICAgICAgICAgYmFzZUZvckdldEdQ
UiA9IHZhbHVlUmVncy5wYXlsb2FkR1BSKCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cigKKyAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNQcm94eTo6dGFy
Z2V0T2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIGJhc2VGb3JHZXRHUFIpOworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIGJhc2VGb3JHZXRHUFIgPSBiYXNlR1BSOworCisgICAgICAgIEdQ
UlJlZyBiYXNlRm9yQWNjZXNzR1BSOworICAgICAgICBpZiAoIW1fY29uZGl0aW9uU2V0LmlzRW1w
dHkoKSkgeworICAgICAgICAgICAgaml0Lm1vdmUoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKG1fY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Jq
ZWN0KCkpLAorICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYmFzZUZv
ckFjY2Vzc0dQUiA9IHNjcmF0Y2hHUFI7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgYmFz
ZUZvckFjY2Vzc0dQUiA9IGJhc2VGb3JHZXRHUFI7CisKKyAgICAgICAgR1BSUmVnIGxvYWRlZFZh
bHVlR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgaWYgKG1fdHlwZSAhPSBDdXN0b21HZXR0
ZXIgJiYgbV90eXBlICE9IEN1c3RvbVNldHRlcikgeworICAgICAgICAgICAgaWYgKG1fdHlwZSA9
PSBMb2FkKQorICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSID0gdmFsdWVSZWdzLnBheWxv
YWRHUFIoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBsb2FkZWRWYWx1ZUdQ
UiA9IHNjcmF0Y2hHUFI7CisKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSOworICAgICAg
ICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG1fb2Zmc2V0KSkKKyAgICAgICAgICAgICAgICBzdG9y
YWdlR1BSID0gYmFzZUZvckFjY2Vzc0dQUjsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgIGppdC5sb2FkUHRyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoYmFzZUZvckFjY2Vzc0dQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwKKyAg
ICAgICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIpOworICAgICAgICAgICAgICAgIHN0b3Jh
Z2VHUFIgPSBsb2FkZWRWYWx1ZUdQUjsKKyAgICAgICAgICAgIH0KKworI2lmIFVTRShKU1ZBTFVF
NjQpCisgICAgICAgICAgICBqaXQubG9hZDY0KAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6QWRkcmVzcyhzdG9yYWdlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShtX29mZnNldCkpLCBs
b2FkZWRWYWx1ZUdQUik7CisjZWxzZQorICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBMb2FkKSB7
CisgICAgICAgICAgICAgICAgaml0LmxvYWQzMigKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKG1fb2Zmc2V0
KSArIFRhZ09mZnNldCksCisgICAgICAgICAgICAgICAgICAgIHZhbHVlUmVncy50YWdHUFIoKSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBqaXQubG9hZDMyKAorICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6QWRkcmVzcyhzdG9yYWdlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZSht
X29mZnNldCkgKyBQYXlsb2FkT2Zmc2V0KSwKKyAgICAgICAgICAgICAgICBsb2FkZWRWYWx1ZUdQ
Uik7CisjZW5kaWYKKyAgICAgICAgfQorCisgICAgICAgIC8vIFN0dWZmIGZvciBjdXN0b20gZ2V0
dGVycy4KKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlvbkNhbGw7CisgICAgICAg
IENDYWxsSGVscGVyczo6Q2FsbCBoYW5kbGVyQ2FsbDsKKworICAgICAgICAvLyBTdHVmZiBmb3Ig
SlMgZ2V0dGVycy4KKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpEYXRhTGFiZWxQdHIgYWRkcmVzc09m
TGlua0Z1bmN0aW9uQ2hlY2s7CisgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBmYXN0UGF0aENh
bGw7CisgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBzbG93UGF0aENhbGw7CisKKyAgICAgICAg
Q0NhbGxIZWxwZXJzOjpKdW1wIHN1Y2Nlc3M7CisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBm
YWlsOworICAgICAgICBpZiAobV90eXBlICE9IExvYWQgJiYgbV90eXBlICE9IE1pc3MpIHsKKyAg
ICAgICAgICAgIC8vIE5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2hlbmV2ZXIgdGhpcyBjYWxsIGlz
IG1hZGUgaW4gdGhlIGZ1dHVyZSwgd2UgcmVtZW1iZXIgdGhlCisgICAgICAgICAgICAvLyBwbGFj
ZSB0aGF0IHdlIG1hZGUgaXQgZnJvbS4KKyAgICAgICAgICAgIGppdC5zdG9yZTMyKAorICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHN0dWJJbmZvLmNhbGxTaXRlSW5k
ZXguYml0cygpKSwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNf
Y2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7CisKKyAgICAg
ICAgICAgIGlmIChtX3R5cGUgPT0gR2V0dGVyIHx8IG1fdHlwZSA9PSBTZXR0ZXIpIHsKKyAgICAg
ICAgICAgICAgICAvLyBDcmVhdGUgYSBKUyBjYWxsIHVzaW5nIGEgSlMgY2FsbCBpbmxpbmUgY2Fj
aGUuIEFzc3VtZSB0aGF0OgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8g
LSBTUCBpcyBhbGlnbmVkIGFuZCByZXByZXNlbnRzIHRoZSBleHRlbnQgb2YgdGhlIGNhbGxpbmcg
Y29tcGlsZXIncyBzdGFjayB1c2FnZS4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAg
ICAgIC8vIC0gRlAgaXMgc2V0IGNvcnJlY3RseSAoaS5lLiBpdCBwb2ludHMgdG8gdGhlIGNhbGxl
cidzIGNhbGwgZnJhbWUgaGVhZGVyKS4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAg
ICAgIC8vIC0gU1AgLSBGUCBpcyBhbiBhbGlnbmVkIGRpZmZlcmVuY2UuCisgICAgICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgICAgICAvLyAtIEFueSBieXRlIGJldHdlZW4gRlAgKGV4Y2x1c2l2
ZSkgYW5kIFNQIChpbmNsdXNpdmUpIGNvdWxkIGJlIGxpdmUgaW4gdGhlIGNhbGxpbmcKKyAgICAg
ICAgICAgICAgICAvLyAgIGNvZGUuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAg
ICAvLyBUaGVyZWZvcmUsIHdlIHRlbXBvcmFyaWx5IGdyb3cgdGhlIHN0YWNrIGZvciB0aGUgcHVy
cG9zZSBvZiB0aGUgY2FsbCBhbmQgdGhlbgorICAgICAgICAgICAgICAgIC8vIHNocmluayBpdCBh
ZnRlci4KKworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3JhcmVEYXRhLT5jYWxs
TGlua0luZm8pOworICAgICAgICAgICAgICAgIG1fcmFyZURhdGEtPmNhbGxMaW5rSW5mbyA9IHN0
ZDo6bWFrZV91bmlxdWU8Q2FsbExpbmtJbmZvPigpOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBJZiB3ZSBnZW5lcmF0ZWQgYSBwb2x5bW9ycGhpYyBjYWxsIHN0
dWIgdGhhdCBqdW1wZWQgYmFjayB0byB0aGUgZ2V0dGVyCisgICAgICAgICAgICAgICAgLy8gc3R1
Yiwgd2hpY2ggdGhlbiBqdW1wZWQgYmFjayB0byB0aGUgbWFpbiBjb2RlLCB0aGVuIHdlJ2QgaGF2
ZSBhIHJlYWNoYWJpbGl0eQorICAgICAgICAgICAgICAgIC8vIHNpdHVhdGlvbiB0aGF0IHRoZSBH
QyBkb2Vzbid0IGtub3cgYWJvdXQuIFRoZSBHQyB3b3VsZCBlbnN1cmUgdGhhdCB0aGUgcG9seW1v
cnBoaWMKKyAgICAgICAgICAgICAgICAvLyBjYWxsIHN0dWIgc3RheWVkIGFsaXZlLCBhbmQgaXQg
d291bGQgZW5zdXJlIHRoYXQgdGhlIG1haW4gY29kZSBzdGF5ZWQgYWxpdmUsIGJ1dAorICAgICAg
ICAgICAgICAgIC8vIGl0IHdvdWxkbid0IGtub3cgdGhhdCB0aGUgZ2V0dGVyIHN0dWIgd2FzIGFs
aXZlLiBJZGVhbGx5IEpJVCBzdHViIHJvdXRpbmVzIHdvdWxkCisgICAgICAgICAgICAgICAgLy8g
YmUgR0Mgb2JqZWN0cywgYW5kIHRoZW4gd2UnZCBiZSBhYmxlIHRvIHNheSB0aGF0IHRoZSBwb2x5
bW9ycGhpYyBjYWxsIHN0dWIgaGFzIGEKKyAgICAgICAgICAgICAgICAvLyByZWZlcmVuY2UgdG8g
dGhlIGdldHRlciBzdHViLgorICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDg5MTQKKyAgICAgICAgICAgICAgICBtX3JhcmVEYXRhLT5j
YWxsTGlua0luZm8tPmRpc2FsbG93U3R1YnMoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBtX3JhcmVEYXRhLT5jYWxsTGlua0luZm8tPnNldFVwQ2FsbCgKKyAgICAgICAgICAg
ICAgICAgICAgQ2FsbExpbmtJbmZvOjpDYWxsLCBzdHViSW5mby5jb2RlT3JpZ2luLCBsb2FkZWRW
YWx1ZUdQUik7CisKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7
CisKKyAgICAgICAgICAgICAgICAvLyBUaGVyZSBpcyBhICJ0aGlzIiBhcmd1bWVudC4KKyAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlBhcmFtZXRlcnMgPSAxOworICAgICAgICAgICAg
ICAgIC8vIC4uLiBhbmQgYSB2YWx1ZSBhcmd1bWVudCBpZiB3ZSdyZSBjYWxsaW5nIGEgc2V0dGVy
LgorICAgICAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gU2V0dGVyKQorICAgICAgICAgICAgICAg
ICAgICBudW1iZXJPZlBhcmFtZXRlcnMrKzsKKworICAgICAgICAgICAgICAgIC8vIEdldCB0aGUg
YWNjZXNzb3I7IGlmIHRoZXJlIGFpbid0IG9uZSB0aGVuIHRoZSByZXN1bHQgaXMganNVbmRlZmlu
ZWQoKS4KKyAgICAgICAgICAgICAgICBpZiAobV90eXBlID09IFNldHRlcikgeworICAgICAgICAg
ICAgICAgICAgICBqaXQubG9hZFB0cigKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6QWRkcmVzcyhsb2FkZWRWYWx1ZUdQUiwgR2V0dGVyU2V0dGVyOjpvZmZzZXRPZlNldHRl
cigpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSKTsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFB0cigKKyAgICAg
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhsb2FkZWRWYWx1ZUdQUiwg
R2V0dGVyU2V0dGVyOjpvZmZzZXRPZkdldHRlcigpKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGxvYWRlZFZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6Okp1bXAgcmV0dXJuVW5kZWZpbmVkID0gaml0LmJyYW5jaFRlc3RQdHIoCisg
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6WmVybywgbG9hZGVkVmFsdWVHUFIpOwor
CisgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZSZWdzRm9yQ2FsbCA9IEpTU3RhY2s6
OkNhbGxGcmFtZUhlYWRlclNpemUgKyBudW1iZXJPZlBhcmFtZXRlcnM7CisKKyAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCA9CisgICAgICAgICAgICAgICAgICAg
IG51bWJlck9mUmVnc0ZvckNhbGwgKiBzaXplb2YoUmVnaXN0ZXIpICsgc2l6ZW9mKENhbGxlckZy
YW1lQW5kUEMpOworCisgICAgICAgICAgICAgICAgdW5zaWduZWQgYWxpZ25lZE51bWJlck9mQnl0
ZXNGb3JDYWxsID0KKyAgICAgICAgICAgICAgICAgICAgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9m
KHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgbnVtYmVyT2ZCeXRlc0ZvckNhbGwpOworCisgICAgICAg
ICAgICAgICAgaml0LnN1YlB0cigKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxsKSwKKyAgICAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKKyAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MgY2FsbGVlRnJhbWUgPSBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVn
aXN0ZXIsCisgICAgICAgICAgICAgICAgICAgIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVv
ZihDYWxsZXJGcmFtZUFuZFBDKSkpOworCisgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoCisg
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG51bWJlck9mUGFy
YW1ldGVycyksCisgICAgICAgICAgICAgICAgICAgIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoSlNT
dGFjazo6QXJndW1lbnRDb3VudCAqIHNpemVvZihSZWdpc3RlcikgKyBQYXlsb2FkT2Zmc2V0KSk7
CisKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmVDZWxsKAorICAgICAgICAgICAgICAgICAgICBs
b2FkZWRWYWx1ZUdQUiwgY2FsbGVlRnJhbWUud2l0aE9mZnNldChKU1N0YWNrOjpDYWxsZWUgKiBz
aXplb2YoUmVnaXN0ZXIpKSk7CisKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmVDZWxsKAorICAg
ICAgICAgICAgICAgICAgICBiYXNlRm9yR2V0R1BSLAorICAgICAgICAgICAgICAgICAgICBjYWxs
ZWVGcmFtZS53aXRoT2Zmc2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDApLm9mZnNldCgp
ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworCisgICAgICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBT
ZXR0ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUoCisgICAgICAgICAg
ICAgICAgICAgICAgICB2YWx1ZVJlZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICBjYWxsZWVG
cmFtZS53aXRoT2Zmc2V0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdp
c3RlckZvckFyZ3VtZW50KDEpLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBzbG93Q2Fz
ZSA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2goCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6Tm90RXF1YWwsIGxvYWRlZFZhbHVlR1BSLCBhZGRyZXNzT2ZMaW5rRnVuY3Rpb25DaGVj
aywKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKDApKTsK
KworICAgICAgICAgICAgICAgIGZhc3RQYXRoQ2FsbCA9IGppdC5uZWFyQ2FsbCgpOworCisgICAg
ICAgICAgICAgICAgaml0LmFkZFB0cigKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxsKSwKKyAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgICAg
ICAgICAgaWYgKG1fdHlwZSA9PSBHZXR0ZXIpCisgICAgICAgICAgICAgICAgICAgIGppdC5zZXR1
cFJlc3VsdHModmFsdWVSZWdzKTsKKworICAgICAgICAgICAgICAgIGRvbmUuYXBwZW5kKGppdC5q
dW1wKCkpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmxpbmsoJmppdCk7CisKKyAgICAgICAg
ICAgICAgICBqaXQubW92ZShsb2FkZWRWYWx1ZUdQUiwgR1BSSW5mbzo6cmVnVDApOworI2lmIFVT
RShKU1ZBTFVFMzJfNjQpCisgICAgICAgICAgICAgICAgLy8gV2UgKmFsd2F5cyoga25vdyB0aGF0
IHRoZSBnZXR0ZXIvc2V0dGVyLCBpZiBub24tbnVsbCwgaXMgYSBjZWxsLgorICAgICAgICAgICAg
ICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcp
LCBHUFJJbmZvOjpyZWdUMSk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9yYXJlRGF0YS0+Y2FsbExpbmtJbmZvLmdldCgpKSwg
R1BSSW5mbzo6cmVnVDIpOworICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCA9IGppdC5uZWFy
Q2FsbCgpOworCisgICAgICAgICAgICAgICAgaml0LmFkZFB0cigKKyAgICAgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxs
KSwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CisgICAgICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBHZXR0ZXIpCisgICAgICAgICAgICAg
ICAgICAgIGppdC5zZXR1cFJlc3VsdHModmFsdWVSZWdzKTsKKworICAgICAgICAgICAgICAgIGRv
bmUuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICAgICAgICAgIHJldHVyblVuZGVmaW5lZC5s
aW5rKCZqaXQpOworCisgICAgICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBHZXR0ZXIpCisgICAg
ICAgICAgICAgICAgICAgIGppdC5tb3ZlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIHZhbHVl
UmVncyk7CisKKyAgICAgICAgICAgICAgICBkb25lLmxpbmsoJmppdCk7CisKKyAgICAgICAgICAg
ICAgICBzdGF0ZS5jYWxsYmFja3MuYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICBbJl0gKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fcmFyZURh
dGEtPmNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucygKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChzbG93UGF0aENhbGwpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZihhZGRyZXNzT2ZM
aW5rRnVuY3Rpb25DaGVjayksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mTmVhckNhbGwoZmFzdFBhdGhDYWxsKSk7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGxpbmtCdWZmZXIubGluaygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG93
UGF0aENhbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwo
dm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8v
IGdldHRlcjogRW5jb2RlZEpTVmFsdWUgKCpHZXRWYWx1ZUZ1bmMpKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOwor
ICAgICAgICAgICAgICAgIC8vIHNldHRlcjogdm9pZCAoKlB1dFZhbHVlRnVuYykoRXhlY1N0YXRl
KiwgSlNPYmplY3QqIGJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNPYmplY3QsIEVuY29kZWRKU1Zh
bHVlIHZhbHVlKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgICAgIGlmIChtX3R5
cGUgPT0gQ3VzdG9tR2V0dGVyKSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICBiYXNlRm9yQWNjZXNz
R1BSLCBiYXNlRm9yR2V0R1BSLAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKGlkZW50LmltcGwoKSkpOworICAgICAgICAgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VG
b3JBY2Nlc3NHUFIsIGJhc2VGb3JHZXRHUFIsIHZhbHVlUmVncy5ncHIoKSk7CisjZWxzZQorICAg
ICAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gQ3VzdG9tR2V0dGVyKSB7CisgICAgICAgICAgICAg
ICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoCisgICAgICAgICAgICAgICAg
ICAgICAgICBiYXNlRm9yQWNjZXNzR1BSLCBiYXNlRm9yR2V0R1BSLAorICAgICAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksCisg
ICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaWRlbnQu
aW1wbCgpKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJhc2VGb3JBY2Nlc3NHUFIsIGJhc2VGb3JHZXRHUFIsCisgICAgICAgICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHZhbHVlUmVncy50YWdHUFIo
KSk7CisgICAgICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgICAgICAgICAgaml0LnN0b3Jl
UHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAmdm0udG9wQ2FsbEZyYW1lKTsKKworICAg
ICAgICAgICAgICAgIG9wZXJhdGlvbkNhbGwgPSBqaXQuY2FsbCgpOworICAgICAgICAgICAgICAg
IGlmIChtX3R5cGUgPT0gQ3VzdG9tR2V0dGVyKQorICAgICAgICAgICAgICAgICAgICBqaXQuc2V0
dXBSZXN1bHRzKHZhbHVlUmVncyk7CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
IG5vRXhjZXB0aW9uID0KKyAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRFeGNlcHRpb25DaGVj
ayhDQ2FsbEhlbHBlcnM6OkludmVydGVkRXhjZXB0aW9uQ2hlY2spOworICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cigmdm0pLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAg
aGFuZGxlckNhbGwgPSBqaXQuY2FsbCgpOworICAgICAgICAgICAgICAgIGppdC5qdW1wVG9FeGNl
cHRpb25IYW5kbGVyKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBub0V4Y2VwdGlv
bi5saW5rKCZqaXQpOworCisgICAgICAgICAgICAgICAgc3RhdGUuY2FsbGJhY2tzLmFwcGVuZCgK
KyAgICAgICAgICAgICAgICAgICAgWyZdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsob3BlcmF0aW9uQ2FsbCwgRnVuY3Rp
b25QdHIobV9yYXJlRGF0YS0+Y3VzdG9tQWNjZXNzb3Iub3BhcXVlKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoaGFuZGxlckNhbGwsIGxvb2t1cEV4Y2VwdGlvbkhh
bmRsZXIpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBjYXNlIFJlcGxhY2U6IHsKKyAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG1fb2Zmc2V0KSkg
eworICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUoCisgICAgICAgICAgICAgICAgdmFsdWVSZWdz
LAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgICAg
ICAgICAgYmFzZUdQUiwKKyAgICAgICAgICAgICAgICAgICAgSlNPYmplY3Q6Om9mZnNldE9mSW5s
aW5lU3RvcmFnZSgpICsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0SW5JbmxpbmVTdG9yYWdl
KG1fb2Zmc2V0KSAqIHNpemVvZihKU1ZhbHVlKSkpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgaml0LnN0b3Jl
VmFsdWUoCisgICAgICAgICAgICAgICAgdmFsdWVSZWdzLAorICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICAgICAgc2NyYXRjaEdQUiwgb2Zmc2V0
SW5CdXR0ZXJmbHkobV9vZmZzZXQpICogc2l6ZW9mKEpTVmFsdWUpKSk7CisgICAgICAgIH0KKyAg
ICAgICAgc3RhdGUuc3VjY2VlZCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2Fz
ZSBUcmFuc2l0aW9uOiB7CisgICAgICAgIC8vIEFjY2Vzc0Nhc2U6OnRyYW5zaXRpb24oKSBzaG91
bGQgaGF2ZSByZXR1cm5lZCBudWxsLgorICAgICAgICBSRUxFQVNFX0FTU0VSVChHUFJJbmZvOjpu
dW1iZXJPZlJlZ2lzdGVycyA+PSA2IHx8ICFzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSB8fCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA9PSBuZXdTdHJ1Y3R1cmUoKS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFzdHJ1Y3R1cmUo
KS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSk7CisKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpK
dW1wTGlzdCBzbG93UGF0aDsKKworICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxs
b2NhdG9yKHN0dWJJbmZvLnBhdGNoLnVzZWRSZWdpc3RlcnMpOworICAgICAgICBhbGxvY2F0b3Iu
bG9jayhiYXNlR1BSKTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2sodmFsdWVSZWdzKTsKKyAgICAg
ICAgYWxsb2NhdG9yLmxvY2soc2NyYXRjaEdQUik7CisKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hH
UFIyID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICBHUFJSZWcgc2Ny
YXRjaEdQUjM7CisgICAgICAgIGlmIChuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSAhPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKQorICAgICAgICAgICAgJiYgc3Ry
dWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpCisgICAgICAgICAgICBzY3JhdGNoR1BSMyA9
IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgc2NyYXRjaEdQUjMgPSBJbnZhbGlkR1BSUmVnOworCisgICAgICAgIHNpemVfdCBudW1iZXJP
ZlBhZGRpbmdCeXRlcyA9IGFsbG9jYXRvci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGlu
ZyhqaXQpOworCisgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNocG9p
bnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7CisKKyAgICAgICAgYm9vbCBzY3JhdGNoR1BSSGFz
U3RvcmFnZSA9IGZhbHNlOworCisgICAgICAgIGlmIChuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSAhPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgeworICAgICAg
ICAgICAgc2l6ZV90IG5ld1NpemUgPSBuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSAqIHNpemVvZihKU1ZhbHVlKTsKKyAgICAgICAgICAgIENvcGllZEFsbG9jYXRvciogY29waWVk
QWxsb2NhdG9yID0gJnZtLmhlYXAuc3RvcmFnZUFsbG9jYXRvcigpOworCisgICAgICAgICAgICBp
ZiAoIXN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CisgICAgICAgICAgICAgICAg
aml0LmxvYWRQdHIoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoCisgICAgICAgICAgICAgICAg
ICAgIGppdC5icmFuY2hTdWJQdHIoCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OlNpZ25lZCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobmV3U2l6ZSksIHNjcmF0Y2hH
UFIpKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgJmNvcGllZEFs
bG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKKyAgICAgICAgICAgICAgICBqaXQubmVnUHRy
KHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoCisgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKCZjb3BpZWRBbGxvY2F0b3ItPm1f
Y3VycmVudFBheWxvYWRFbmQpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBqaXQuYWRk
UHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1ZhbHVlKSksIHNjcmF0Y2hH
UFIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzaXplX3Qgb2xkU2l6
ZSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwor
ICAgICAgICAgICAgICAgIEFTU0VSVChuZXdTaXplID4gb2xkU2l6ZSk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUjMpOworICAgICAgICAg
ICAgICAgIGppdC5sb2FkUHRyKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZywg
c2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKAorICAgICAgICAg
ICAgICAgICAgICBqaXQuYnJhbmNoU3ViUHRyKAorICAgICAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpTaWduZWQsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG5ld1NpemUpLCBz
Y3JhdGNoR1BSKSk7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIsICZj
b3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZyk7CisgICAgICAgICAgICAgICAgaml0
Lm5lZ1B0cihzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAorICAgICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFic29sdXRlQWRkcmVzcygmY29waWVkQWxsb2Nh
dG9yLT5tX2N1cnJlbnRQYXlsb2FkRW5kKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAg
aml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzaXplb2YoSlNWYWx1ZSkpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHNjcmF0Y2hHUFIgPSBuZXcg
c3RvcmFnZSwgc2NyYXRjaEdQUjMgPSBvbGQgc3RvcmFnZSwKKyAgICAgICAgICAgICAgICAvLyBz
Y3JhdGNoR1BSMiA9IGF2YWlsYWJsZQorICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IG9mZnNl
dCA9IDA7IG9mZnNldCA8IG9sZFNpemU7IG9mZnNldCArPSBzaXplb2Yodm9pZCopKSB7CisgICAg
ICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKAorICAgICAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hH
UFIzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKyBzaXplb2YoSlNWYWx1
ZSkgKyBzaXplb2Yodm9pZCopKSksCisgICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoR1BS
Mik7CisgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cigKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHNjcmF0Y2hHUFIyLAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4ob2Zmc2V0ICsg
c2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCBDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7
CisgICAgICAgICAgICBzY3JhdGNoR1BSSGFzU3RvcmFnZSA9IHRydWU7CisgICAgICAgIH0KKwor
ICAgICAgICB1aW50MzJfdCBzdHJ1Y3R1cmVCaXRzID0gYml0d2lzZV9jYXN0PHVpbnQzMl90Pihu
ZXdTdHJ1Y3R1cmUoKS0+aWQoKSk7CisgICAgICAgIGppdC5zdG9yZTMyKAorICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RydWN0dXJlQml0cyksCisgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSk7CisKKyAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG1fb2Zmc2V0KSkgeworICAgICAgICAg
ICAgaml0LnN0b3JlVmFsdWUoCisgICAgICAgICAgICAgICAgdmFsdWVSZWdzLAorICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICAgICAgYmFzZUdQ
UiwKKyAgICAgICAgICAgICAgICAgICAgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgp
ICsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKG1fb2Zmc2V0ICog
c2l6ZW9mKEpTVmFsdWUpKSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKCFz
Y3JhdGNoR1BSSGFzU3RvcmFnZSkKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2Ny
YXRjaEdQUik7CisgICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSgKKyAgICAgICAgICAgICAgICB2
YWx1ZVJlZ3MsCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hH
UFIsIG9mZnNldEluQnV0dGVyZmx5KG1fb2Zmc2V0KSAqIHNpemVvZihKU1ZhbHVlKSkpOworICAg
ICAgICB9CisKKyAgICAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IG51bGxwdHI7
CisgICAgICAgIGlmIChuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBzdHJ1
Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkKKyAgICAgICAgICAgIHNjcmF0Y2hCdWZmZXIg
PSB2bS5zY3JhdGNoQnVmZmVyRm9yU2l6ZShhbGxvY2F0b3IuZGVzaXJlZFNjcmF0Y2hCdWZmZXJT
aXplRm9yQ2FsbCgpKTsKKworI2lmIEVOQUJMRShHR0MpCisgICAgICAgIGlmIChuZXdTdHJ1Y3R1
cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSkgeworICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxGbHVzaFdyaXRlQmFy
cmllckJ1ZmZlcjsKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBvd25lcklzUmVtZW1i
ZXJlZE9ySW5FZGVuID0gaml0Lmp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKGJhc2VHUFIpOwor
ICAgICAgICAgICAgV3JpdGVCYXJyaWVyQnVmZmVyJiB3cml0ZUJhcnJpZXJCdWZmZXIgPSBqaXQu
dm0oKS0+aGVhcC53cml0ZUJhcnJpZXJCdWZmZXIoKTsKKyAgICAgICAgICAgIGppdC5sb2FkMzIo
d3JpdGVCYXJyaWVyQnVmZmVyLmN1cnJlbnRJbmRleEFkZHJlc3MoKSwgc2NyYXRjaEdQUjIpOwor
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIG5lZWRUb0ZsdXNoID0KKyAgICAgICAgICAg
ICAgICBqaXQuYnJhbmNoMzIoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWJv
dmVPckVxdWFsLCBzY3JhdGNoR1BSMiwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIod3JpdGVCYXJyaWVyQnVmZmVyLmNhcGFjaXR5KCkpKTsKKworICAgICAg
ICAgICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoR1BS
Mik7CisgICAgICAgICAgICBqaXQuc3RvcmUzMihzY3JhdGNoR1BSMiwgd3JpdGVCYXJyaWVyQnVm
ZmVyLmN1cnJlbnRJbmRleEFkZHJlc3MoKSk7CisKKyAgICAgICAgICAgIGppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cih3cml0ZUJhcnJpZXJCdWZmZXIuYnVmZmVyKCkpLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgICAgIC8vIFdlIHVzZSBhbiBvZmZzZXQgb2YgLXNpemVvZih2b2lk
KikgYmVjYXVzZSB3ZSBhbHJlYWR5IGFkZGVkIDEgdG8gc2NyYXRjaEdQUjIuCisgICAgICAgICAg
ICBqaXQuc3RvcmVQdHIoCisgICAgICAgICAgICAgICAgYmFzZUdQUiwKKyAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleCgKKyAgICAgICAgICAgICAgICAgICAgc2NyYXRjaEdQ
Uiwgc2NyYXRjaEdQUjIsIENDYWxsSGVscGVyczo6U2NhbGVQdHIsCisgICAgICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KC1zaXplb2Yodm9pZCopKSkpOworCisgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZVdpdGhCYXJyaWVyID0gaml0Lmp1bXAoKTsKKyAgICAg
ICAgICAgIG5lZWRUb0ZsdXNoLmxpbmsoJmppdCk7CisKKyAgICAgICAgICAgIGFsbG9jYXRvci5w
cmVzZXJ2ZVVzZWRSZWdpc3RlcnNUb1NjcmF0Y2hCdWZmZXJGb3JDYWxsKGppdCwgc2NyYXRjaEJ1
ZmZlciwgc2NyYXRjaEdQUjIpOworICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShiYXNlR1BSKTsKKyAgICAgICAgICAgIGNhbGxGbHVzaFdyaXRlQmFycmllckJ1ZmZl
ciA9IGppdC5jYWxsKCk7CisgICAgICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVVzZWRSZWdpc3Rl
cnNGcm9tU2NyYXRjaEJ1ZmZlckZvckNhbGwoCisgICAgICAgICAgICAgICAgaml0LCBzY3JhdGNo
QnVmZmVyLCBzY3JhdGNoR1BSMik7CisKKyAgICAgICAgICAgIGRvbmVXaXRoQmFycmllci5saW5r
KCZqaXQpOworICAgICAgICAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKCZqaXQp
OworCisgICAgICAgICAgICBzdGF0ZS5jYWxsYmFja3MuYXBwZW5kKAorICAgICAgICAgICAgICAg
IFsmXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICBsaW5r
QnVmZmVyLmxpbmsoY2FsbEZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyLCBvcGVyYXRpb25GbHVzaFdy
aXRlQmFycmllckJ1ZmZlcik7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyNlbmRp
ZiAvLyBFTkFCTEUoR0dDKQorICAgICAgICAKKyAgICAgICAgc3RhdGUuc3VjY2VlZCgpOworCisg
ICAgICAgIGlmIChuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBzdHJ1Y3R1
cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgeworICAgICAgICAgICAgc2xvd1BhdGgubGluaygm
aml0KTsKKyAgICAgICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3Bw
aW5nKGppdCwgbnVtYmVyT2ZQYWRkaW5nQnl0ZXMpOworICAgICAgICAgICAgYWxsb2NhdG9yLnBy
ZXNlcnZlVXNlZFJlZ2lzdGVyc1RvU2NyYXRjaEJ1ZmZlckZvckNhbGwoaml0LCBzY3JhdGNoQnVm
ZmVyLCBzY3JhdGNoR1BSKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgaml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKKyAgICAgICAgICAgICAgICBiYXNlR1BSLAorICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihuZXdTdHJ1Y3R1cmUoKSks
CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobV9vZmZzZXQpLAor
ICAgICAgICAgICAgICAgIHZhbHVlUmVncy5ncHIoKSk7CisjZWxzZQorICAgICAgICAgICAgaml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKKyAgICAgICAgICAgICAgICBiYXNlR1BSLAor
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihuZXdTdHJ1Y3R1cmUo
KSksCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobV9vZmZzZXQp
LAorICAgICAgICAgICAgICAgIHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHZhbHVlUmVncy50YWdH
UFIoKSk7CisjZW5kaWYKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBvcGVyYXRpb25D
YWxsID0gaml0LmNhbGwoKTsKKyAgICAgICAgICAgIGFsbG9jYXRvci5yZXN0b3JlVXNlZFJlZ2lz
dGVyc0Zyb21TY3JhdGNoQnVmZmVyRm9yQ2FsbChqaXQsIHNjcmF0Y2hCdWZmZXIsIHNjcmF0Y2hH
UFIpOworICAgICAgICAgICAgc3RhdGUuc3VjY2VlZCgpOworCisgICAgICAgICAgICBzdGF0ZS5j
YWxsYmFja3MuYXBwZW5kKAorICAgICAgICAgICAgICAgIFsmXSAoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikgeworICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsob3BlcmF0aW9uQ2Fs
bCwgb3BlcmF0aW9uUmVhbGxvY2F0ZVN0b3JhZ2VBbmRGaW5pc2hQdXQpOworICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYXNlIEFy
cmF5TGVuZ3RoOiB7CisgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhi
YXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlTdG9y
YWdlOjpsZW5ndGhPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBzdGF0ZS5mYWlsQW5k
SWdub3JlLmFwcGVuZCgKKyAgICAgICAgICAgIGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Okxl
c3NUaGFuLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSkpOworICAg
ICAgICBqaXQuYm94SW50MzIoc2NyYXRjaEdQUiwgdmFsdWVSZWdzKTsKKyAgICAgICAgc3RhdGUu
c3VjY2VlZCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2FzZSBTdHJpbmdMZW5n
dGg6IHsKKyAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwg
SlNTdHJpbmc6Om9mZnNldE9mTGVuZ3RoKCkpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKKyAg
ICAgICAgaml0LmJveEludDMyKHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHZhbHVlUmVncyk7Cisg
ICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0gfQogICAgIAot
ICAgIHJldHVybiByZXN1bHQ7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0K
IAotUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6flBvbHltb3JwaGljR2V0QnlJZExpc3QoKSB7IH0K
K1BvbHltb3JwaGljQWNjZXNzOjpQb2x5bW9ycGhpY0FjY2VzcygpIHsgfQorUG9seW1vcnBoaWNB
Y2Nlc3M6On5Qb2x5bW9ycGhpY0FjY2VzcygpIHsgfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHIg
UG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6Y3VycmVudFNsb3dQYXRoVGFyZ2V0KAotICAgIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbykgY29uc3QKK01hY3JvQXNzZW1ibGVyQ29kZVB0ciBQb2x5
bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZVdpdGhDYXNlcygKKyAgICBWTSYgdm0sIENvZGVCbG9j
ayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIGNvbnN0IElkZW50aWZp
ZXImIGlkZW50LAorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4+IG9yaWdp
bmFsQ2FzZXNUb0FkZCkKIHsKLSAgICBpZiAoaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVs
dGFDYWxsVG9TbG93Q2FzZSk7Ci0gICAgcmV0dXJuIG1fbGlzdC5sYXN0KCkuc3R1YlJvdXRpbmUo
KS0+Y29kZSgpLmNvZGUoKTsKKyAgICAvLyBUaGlzIG1ldGhvZCB3aWxsIGFkZCB0aGUgb3JpZ2lu
YWxDYXNlc1RvQWRkIHRvIHRoZSBsaXN0IG9uZSBhdCBhIHRpbWUgd2hpbGUgcHJlc2VydmluZyB0
aGUKKyAgICAvLyBpbnZhcmlhbnRzOgorICAgIC8vIC0gSWYgYSBuZXdseSBhZGRlZCBjYXNlIGNh
blJlcGxhY2UoKSBhbnkgZXhpc3RpbmcgY2FzZSwgdGhlbiB0aGUgZXhpc3RpbmcgY2FzZSBpcyBy
ZW1vdmVkIGJlZm9yZQorICAgIC8vICAgdGhlIG5ldyBjYXNlIGlzIGFkZGVkLiBSZW1vdmFsIGRv
ZXNuJ3QgY2hhbmdlIG9yZGVyIG9mIHRoZSBsaXN0LiBBbnkgbnVtYmVyIG9mIGV4aXN0aW5nIGNh
c2VzCisgICAgLy8gICBjYW4gYmUgcmVtb3ZlZCB2aWEgdGhlIGNhblJlcGxhY2UoKSBydWxlLgor
ICAgIC8vIC0gQ2FzZXMgaW4gdGhlIGxpc3QgYWx3YXlzIGFwcGVhciBpbiBhc2NlbmRpbmcgb3Jk
ZXIgb2YgdGltZSBvZiBhZGRpdGlvbi4gVGhlcmVmb3JlLCBpZiB5b3UKKyAgICAvLyAgIGNhc2Nh
ZGUgdGhyb3VnaCB0aGUgY2FzZXMgaW4gcmV2ZXJzZSBvcmRlciwgeW91IHdpbGwgZ2V0IHRoZSBt
b3N0IHJlY2VudCBjYXNlcyBmaXJzdC4KKyAgICAvLyAtIElmIHRoaXMgbWV0aG9kIGZhaWxzIChy
ZXR1cm5zIG51bGwsIGRvZXNuJ3QgYWRkIHRoZSBjYXNlcyksIHRoZW4gYm90aCB0aGUgcHJldmlv
dXMgY2FzZSBsaXN0CisgICAgLy8gICBhbmQgdGhlIHByZXZpb3VzIHN0dWIgYXJlIGtlcHQgaW50
YWN0IGFuZCB0aGUgbmV3IGNhc2VzIGFyZSBkZXN0cm95ZWQuIEl0J3MgT0sgdG8gYXR0ZW1wdCB0
bworICAgIC8vICAgYWRkIG1vcmUgdGhpbmdzIGFmdGVyIGZhaWx1cmUuCisgICAgCisgICAgLy8g
Rmlyc3QsIHZlcmlmeSB0aGF0IHdlIGNhbiBnZW5lcmF0ZSBjb2RlIGZvciBhbGwgb2YgdGhlIG5l
dyBjYXNlcyB3aGlsZSBlbGltaW5hdGluZyBhbnkgb2YgdGhlCisgICAgLy8gbmV3IGNhc2VzIHRo
YXQgcmVwbGFjZSBlYWNoIG90aGVyLgorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNz
Q2FzZT4+IGNhc2VzVG9BZGQ7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9yaWdpbmFs
Q2FzZXNUb0FkZC5zaXplKCk7ICsraSkgeworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNz
Q2FzZT4gbXlDYXNlID0gc3RkOjptb3ZlKG9yaWdpbmFsQ2FzZXNUb0FkZFtpXSk7CisKKyAgICAg
ICAgLy8gQWRkIGl0IG9ubHkgaWYgaXQgaXMgbm90IHJlcGxhY2VkIGJ5IHRoZSBzdWJzZXF1ZW50
IGNhc2VzIGluIHRoZSBsaXN0LgorICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgICAg
IGZvciAodW5zaWduZWQgaiA9IGkgKyAxOyBqIDwgb3JpZ2luYWxDYXNlc1RvQWRkLnNpemUoKTsg
KytqKSB7CisgICAgICAgICAgICBpZiAob3JpZ2luYWxDYXNlc1RvQWRkW2pdLT5jYW5SZXBsYWNl
KCpteUNhc2UpKSB7CisgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGZvdW5k
KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBpZiAobXlDYXNlLT5k
b2VzQ2FsbHMoKSAmJiBzdHViSW5mby5wYXRjaC5zcGlsbE1vZGUgPT0gTmVlZFRvU3BpbGwpCisg
ICAgICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7CisKKyAgICAgICAgY2Fz
ZXNUb0FkZC5hcHBlbmQoc3RkOjptb3ZlKG15Q2FzZSkpOworICAgIH0KKworICAgIGlmICh2ZXJi
b3NlKQorICAgICAgICBkYXRhTG9nKCJjYXNlc1RvQWRkOiAiLCBsaXN0RHVtcChjYXNlc1RvQWRk
KSwgIlxuIik7CisKKyAgICAvLyBJZiB0aGVyZSBhcmVuJ3QgYW55IGNhc2VzIHRvIGFkZCwgdGhl
biBmYWlsIG9uIHRoZSBncm91bmRzIHRoYXQgdGhlcmUncyBubyBwb2ludCB0byBnZW5lcmF0aW5n
IGEKKyAgICAvLyBuZXcgc3R1YiB0aGF0IHdpbGwgYmUgaWRlbnRpY2FsIHRvIHRoZSBvbGQgb25l
LiBSZXR1cm5pbmcgbnVsbCBzaG91bGQgdGVsbCB0aGUgY2FsbGVyIHRvIGp1c3QKKyAgICAvLyBr
ZWVwIGRvaW5nIHdoYXQgdGhleSB3ZXJlIGRvaW5nIGJlZm9yZS4KKyAgICBpZiAoY2FzZXNUb0Fk
ZC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKKwor
ICAgIC8vIE5vdyBjb25zdHJ1Y3QgdGhlIGxpc3Qgb2YgY2FzZXMgYXMgdGhleSBzaG91bGQgYXBw
ZWFyIGlmIHdlIGFyZSBzdWNjZXNzZnVsLiBUaGlzIG1lYW5zIHB1dHRpbmcKKyAgICAvLyBhbGwg
b2YgdGhlIHByZXZpb3VzIGNhc2VzIGluIHRoaXMgbGlzdCBpbiBvcmRlciBidXQgZXhjbHVkaW5n
IHRob3NlIHRoYXQgY2FuIGJlIHJlcGxhY2VkLCBhbmQKKyAgICAvLyB0aGVuIGFkZGluZyB0aGUg
bmV3IGNhc2VzLgorICAgIExpc3RUeXBlIG5ld0Nhc2VzOworICAgIGZvciAoYXV0byYgb2xkQ2Fz
ZSA6IG1fbGlzdCkgeworICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgICAgIGZvciAo
YXV0byYgY2FzZVRvQWRkIDogY2FzZXNUb0FkZCkgeworICAgICAgICAgICAgaWYgKGNhc2VUb0Fk
ZC0+Y2FuUmVwbGFjZSgqb2xkQ2FzZSkpIHsKKyAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKCFmb3VuZCkKKyAgICAgICAgICAgIG5ld0Nhc2VzLmFwcGVuZChvbGRDYXNlLT5jbG9u
ZSgpKTsKKyAgICB9CisgICAgZm9yIChhdXRvJiBjYXNlVG9BZGQgOiBjYXNlc1RvQWRkKQorICAg
ICAgICBuZXdDYXNlcy5hcHBlbmQoc3RkOjptb3ZlKGNhc2VUb0FkZCkpOworCisgICAgaWYgKHZl
cmJvc2UpCisgICAgICAgIGRhdGFMb2coIm5ld0Nhc2VzOiAiLCBsaXN0RHVtcChuZXdDYXNlcyks
ICJcbiIpOworCisgICAgaWYgKG5ld0Nhc2VzLnNpemUoKSA+IE9wdGlvbnM6Om1heEFjY2Vzc1Zh
cmlhbnRMaXN0U2l6ZSgpKSB7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0
YUxvZygiVG9vIG1hbnkgY2FzZXMuXG4iKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cigpOworICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByZXN1bHQgPSBy
ZWdlbmVyYXRlKHZtLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBpZGVudCwgbmV3Q2FzZXMpOworICAg
IGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7CisK
KyAgICBtX2xpc3QgPSBzdGQ6Om1vdmUobmV3Q2FzZXMpOworICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLXZvaWQgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6YWRkQWNjZXNzKGNvbnN0IEdldEJ5SWRB
Y2Nlc3MmIGFjY2VzcykKK01hY3JvQXNzZW1ibGVyQ29kZVB0ciBQb2x5bW9ycGhpY0FjY2Vzczo6
cmVnZW5lcmF0ZVdpdGhDYXNlKAorICAgIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsCisgICAg
c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IG5ld0FjY2VzcykKIHsKLSAgICBBU1NFUlQoIWlz
RnVsbCgpKTsKLSAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgcmVzaXppbmcgb3B0aW1pemVzIGZv
ciBzcGFjZSwgbm90IHRpbWUuCi0gICAgbV9saXN0LnJlc2l6ZVRvRml0KG1fbGlzdC5zaXplKCkg
KyAxKTsKLSAgICBtX2xpc3QubGFzdCgpID0gYWNjZXNzOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1
ZV9wdHI8QWNjZXNzQ2FzZT4+IG5ld0FjY2Vzc2VzOworICAgIG5ld0FjY2Vzc2VzLmFwcGVuZChz
dGQ6Om1vdmUobmV3QWNjZXNzKSk7CisgICAgcmV0dXJuIHJlZ2VuZXJhdGVXaXRoQ2FzZXModm0s
IGNvZGVCbG9jaywgc3R1YkluZm8sIGlkZW50LCBzdGQ6Om1vdmUobmV3QWNjZXNzZXMpKTsKIH0K
IAotYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojppc0Z1bGwoKSBjb25zdAorYm9vbCBQb2x5
bW9ycGhpY0FjY2Vzczo6dmlzaXRXZWFrKFZNJiB2bSkgY29uc3QKIHsKLSAgICBBU1NFUlQoc2l6
ZSgpIDw9IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSk7Ci0gICAgcmV0dXJuIHNpemUoKSA9
PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkU7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICghYXQoaSkudmlzaXRXZWFrKHZtKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJv
b2wgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6aXNBbG1vc3RGdWxsKCkgY29uc3QKK3ZvaWQgUG9s
eW1vcnBoaWNBY2Nlc3M6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKLSAgICBBU1NF
UlQoc2l6ZSgpIDw9IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSk7Ci0gICAgcmV0dXJuIHNp
emUoKSA+PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUgLSAxOworICAgIG91dC5wcmludChS
YXdQb2ludGVyKHRoaXMpLCAiOlsiKTsKKyAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgZm9y
IChhdXRvJiBlbnRyeSA6IG1fbGlzdCkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAqZW50cnkp
OworICAgIG91dC5wcmludCgiXSIpOwogfQogCi1ib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6
OmRpZFNlbGZQYXRjaGluZygpIGNvbnN0CitNYWNyb0Fzc2VtYmxlckNvZGVQdHIgUG9seW1vcnBo
aWNBY2Nlc3M6OnJlZ2VuZXJhdGUoCisgICAgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwKKyAg
ICBQb2x5bW9ycGhpY0FjY2Vzczo6TGlzdFR5cGUmIGNhc2VzKQogewotICAgIGZvciAodW5zaWdu
ZWQgaSA9IHNpemUoKTsgaS0tOykgewotICAgICAgICBpZiAoYXQoaSkudHlwZSgpID09IEdldEJ5
SWRBY2Nlc3M6OlNpbXBsZUlubGluZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJHZW5lcmF0aW5nIGNvZGUgZm9yIGNhc2VzOiAi
LCBsaXN0RHVtcChjYXNlcyksICJcbiIpOworICAgIAorICAgIEFjY2Vzc0dlbmVyYXRpb25TdGF0
ZSBzdGF0ZTsKKworICAgIHN0YXRlLmFjY2VzcyA9IHRoaXM7CisgICAgc3RhdGUuc3R1YkluZm8g
PSAmc3R1YkluZm87CisgICAgc3RhdGUuaWRlbnQgPSAmaWRlbnQ7CisgICAgCisgICAgc3RhdGUu
YmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guYmFzZUdQUik7Cisg
ICAgc3RhdGUudmFsdWVSZWdzID0gSlNWYWx1ZVJlZ3MoCisjaWYgVVNFKEpTVkFMVUUzMl82NCkK
KyAgICAgICAgc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZVRhZ0dQUiks
CisjZW5kaWYKKyAgICAgICAgc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1
ZUdQUikpOworCisgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcihzdHViSW5m
by5wYXRjaC51c2VkUmVnaXN0ZXJzKTsKKyAgICBzdGF0ZS5hbGxvY2F0b3IgPSAmYWxsb2NhdG9y
OworICAgIGFsbG9jYXRvci5sb2NrKHN0YXRlLmJhc2VHUFIpOworICAgIGFsbG9jYXRvci5sb2Nr
KHN0YXRlLnZhbHVlUmVncyk7CisKKyAgICBzdGF0ZS5zY3JhdGNoR1BSID0gYWxsb2NhdG9yLmFs
bG9jYXRlU2NyYXRjaEdQUigpOworICAgIAorICAgIENDYWxsSGVscGVycyBqaXQoJnZtLCBjb2Rl
QmxvY2spOworICAgIHN0YXRlLmppdCA9ICZqaXQ7CisKKyAgICBzdGF0ZS5udW1iZXJPZlBhZGRp
bmdCeXRlcyA9IGFsbG9jYXRvci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhqaXQp
OworCisgICAgYm9vbCBhbGxHdWFyZGVkQnlTdHJ1Y3R1cmVDaGVjayA9IHRydWU7CisgICAgZm9y
IChhdXRvJiBlbnRyeSA6IGNhc2VzKQorICAgICAgICBhbGxHdWFyZGVkQnlTdHJ1Y3R1cmVDaGVj
ayAmPSBlbnRyeS0+Z3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2soKTsKKworICAgIGlmIChjYXNlcy5p
c0VtcHR5KCkpIHsKKyAgICAgICAgLy8gVGhpcyBpcyBzdXBlciB1bmxpa2VseSwgYnV0IHdlIG1h
a2UgaXQgbGVnYWwgYW55d2F5LgorICAgICAgICBzdGF0ZS5mYWlsQW5kUmVwYXRjaC5hcHBlbmQo
aml0Lmp1bXAoKSk7CisgICAgfSBlbHNlIGlmICghYWxsR3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2sg
fHwgY2FzZXMuc2l6ZSgpID09IDEpIHsKKyAgICAgICAgLy8gSWYgdGhlcmUgYXJlIGFueSBwcm94
aWVzIGluIHRoZSBsaXN0LCB3ZSBjYW5ub3QganVzdCB1c2UgYSBiaW5hcnkgc3dpdGNoIG92ZXIg
dGhlIHN0cnVjdHVyZS4KKyAgICAgICAgLy8gV2UgbmVlZCB0byByZXNvcnQgdG8gYSBjYXNjYWRl
LiBBIGNhc2NhZGUgYWxzbyBoYXBwZW5zIHRvIGJlIG9wdGltYWwgaWYgd2Ugb25seSBoYXZlIGp1
c3QKKyAgICAgICAgLy8gb25lIGNhc2UuCisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
ZmFsbFRocm91Z2g7CisKKyAgICAgICAgLy8gQ2FzY2FkZSB0aHJvdWdoIHRoZSBsaXN0LCBwcmVm
ZXJyaW5nIG5ld2VyIGVudHJpZXMuCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNhc2VzLnNp
emUoKTsgaS0tOykgeworICAgICAgICAgICAgZmFsbFRocm91Z2gubGluaygmaml0KTsKKyAgICAg
ICAgICAgIGNhc2VzW2ldLT5nZW5lcmF0ZVdpdGhHdWFyZChzdGF0ZSwgZmFsbFRocm91Z2gpOwor
ICAgICAgICB9CisgICAgICAgIHN0YXRlLmZhaWxBbmRSZXBhdGNoLmFwcGVuZChmYWxsVGhyb3Vn
aCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaml0LmxvYWQzMigKKyAgICAgICAgICAgIENDYWxs
SGVscGVyczo6QWRkcmVzcyhzdGF0ZS5iYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLAorICAgICAgICAgICAgc3RhdGUuc2NyYXRjaEdQUik7CisgICAgICAgIAorICAgICAgICBW
ZWN0b3I8aW50NjRfdD4gY2FzZVZhbHVlcyhjYXNlcy5zaXplKCkpOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgY2FzZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBjYXNlVmFs
dWVzW2ldID0gYml0d2lzZV9jYXN0PGludDMyX3Q+KGNhc2VzW2ldLT5zdHJ1Y3R1cmUoKS0+aWQo
KSk7CisgICAgICAgIAorICAgICAgICBCaW5hcnlTd2l0Y2ggYmluYXJ5U3dpdGNoKHN0YXRlLnNj
cmF0Y2hHUFIsIGNhc2VWYWx1ZXMsIEJpbmFyeVN3aXRjaDo6SW50MzIpOworICAgICAgICB3aGls
ZSAoYmluYXJ5U3dpdGNoLmFkdmFuY2Uoaml0KSkKKyAgICAgICAgICAgIGNhc2VzW2JpbmFyeVN3
aXRjaC5jYXNlSW5kZXgoKV0tPmdlbmVyYXRlKHN0YXRlKTsKKyAgICAgICAgc3RhdGUuZmFpbEFu
ZFJlcGF0Y2guYXBwZW5kKGJpbmFyeVN3aXRjaC5mYWxsVGhyb3VnaCgpKTsKKyAgICB9CisKKyAg
ICBzdGF0ZS5mYWlsQW5kSWdub3JlLmxpbmsoJmppdCk7CisKKyAgICAvLyBNYWtlIHN1cmUgdGhh
dCB0aGUgaW5saW5lIGNhY2hlIG9wdGltaXphdGlvbiBjb2RlIGtub3dzIHRoYXQgd2UgYXJlIHRh
a2luZyBzbG93IHBhdGggYmVjYXVzZQorICAgIC8vIG9mIHNvbWV0aGluZyB0aGF0IGlzbid0IHBh
dGNoYWJsZS4gInNlZW4iIGJlaW5nIGZhbHNlIG1lYW5zIHRoYXQgd2UgYnlwYXNzIHBhdGNoaW5n
LiBUaGlzIGlzCisgICAgLy8gcHJldHR5IGdyb3NzIGJ1dCBpdCBtZWFucyB0aGF0IHdlIGRvbid0
IG5lZWQgdG8gaGF2ZSB0d28gc2xvdyBwYXRoIGVudHJ5cG9pbnRzIC0gb25lIGZvcgorICAgIC8v
IHBhdGNoaW5nIGFuZCBvbmUgZm9yIG5vcm1hbCBzbG93IHN0dWZmLgorICAgIGppdC5zdG9yZTgo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoZmFsc2UpLCAmc3R1YkluZm8uc2Vlbik7CisKKyAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGZhaWx1cmU7CisgICAgaWYgKGFsbG9jYXRvci5kaWRS
ZXVzZVJlZ2lzdGVycygpKSB7CisgICAgICAgIHN0YXRlLmZhaWxBbmRSZXBhdGNoLmxpbmsoJmpp
dCk7CisgICAgICAgIHN0YXRlLnJlc3RvcmVTY3JhdGNoKCk7CisgICAgfSBlbHNlCisgICAgICAg
IGZhaWx1cmUgPSBzdGF0ZS5mYWlsQW5kUmVwYXRjaDsKKyAgICBmYWlsdXJlLmFwcGVuZChqaXQu
anVtcCgpKTsKKworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcih2bSwgaml0LCBjb2RlQmxvY2ss
IEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgaWYgKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxs
b2NhdGUoKSkgeworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIkRp
ZCBmYWlsIHRvIGFsbG9jYXRlLlxuIik7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIoKTsKICAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOworCisgICAgQ29kZUxvY2F0aW9uTGFi
ZWwgc3VjY2Vzc0xhYmVsID0KKyAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxh
YmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKTsKKyAgICAgICAgCisg
ICAgbGlua0J1ZmZlci5saW5rKHN0YXRlLnN1Y2Nlc3MsIHN1Y2Nlc3NMYWJlbCk7CisKKyAgICBs
aW5rQnVmZmVyLmxpbmsoCisgICAgICAgIGZhaWx1cmUsCisgICAgICAgIHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xv
d0Nhc2UpKTsKKyAgICAKKyAgICBmb3IgKGF1dG8gY2FsbGJhY2sgOiBzdGF0ZS5jYWxsYmFja3Mp
CisgICAgICAgIGNhbGxiYWNrKGxpbmtCdWZmZXIpOworICAgIAorICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBjb2RlID0gRklOQUxJWkVfQ09ERV9GT1IoCisgICAgICAgIGNvZGVCbG9jaywgbGlu
a0J1ZmZlciwKKyAgICAgICAgKCIlcyIsIHRvQ1N0cmluZygiQWNjZXNzIHN0dWIgZm9yICIsICpj
b2RlQmxvY2ssICIgIiwgc3R1YkluZm8uY29kZU9yaWdpbiwgIiB3aXRoIHJldHVybiBwb2ludCAi
LCBzdWNjZXNzTGFiZWwsICI6ICIsIGxpc3REdW1wKGNhc2VzKSkuZGF0YSgpKSk7CisKKyAgICBi
b29sIGRvZXNDYWxscyA9IGZhbHNlOworICAgIGZvciAoYXV0byYgZW50cnkgOiBjYXNlcykKKyAg
ICAgICAgZG9lc0NhbGxzIHw9IGVudHJ5LT5kb2VzQ2FsbHMoKTsKKyAgICAKKyAgICBtX3N0dWJS
b3V0aW5lID0gY3JlYXRlSklUU3R1YlJvdXRpbmUoY29kZSwgdm0sIGNvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksIGRvZXNDYWxscyk7CisgICAgbV93YXRjaHBvaW50cyA9IHN0ZDo6bW92ZShz
dGF0ZS53YXRjaHBvaW50cyk7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIlJl
dHVybmluZzogIiwgY29kZS5jb2RlKCksICJcbiIpOworICAgIHJldHVybiBjb2RlLmNvZGUoKTsK
IH0KIAotYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojp2aXNpdFdlYWsoVk0mIHZtKSBjb25z
dAorfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3Bh
Y2UgSlNDOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQWNjZXNzQ2Fz
ZTo6QWNjZXNzVHlwZSB0eXBlKQogewotICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUoKTsgaS0t
OykgewotICAgICAgICBpZiAoIWF0KGkpLnZpc2l0V2Vhayh2bSkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpMb2Fk
OgorICAgICAgICBvdXQucHJpbnQoIkxvYWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
QWNjZXNzQ2FzZTo6VHJhbnNpdGlvbjoKKyAgICAgICAgb3V0LnByaW50KCJUcmFuc2l0aW9uIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OlJlcGxhY2U6CisgICAgICAg
IG91dC5wcmludCgiUmVwbGFjZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3ND
YXNlOjpNaXNzOgorICAgICAgICBvdXQucHJpbnQoIk1pc3MiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgQWNjZXNzQ2FzZTo6R2V0dGVyOgorICAgICAgICBvdXQucHJpbnQoIkdldHRlciIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpTZXR0ZXI6CisgICAgICAg
IG91dC5wcmludCgiU2V0dGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nh
c2U6OkN1c3RvbUdldHRlcjoKKyAgICAgICAgb3V0LnByaW50KCJDdXN0b21HZXR0ZXIiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6Q3VzdG9tU2V0dGVyOgorICAgICAg
ICBvdXQucHJpbnQoIkN1c3RvbVNldHRlciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBB
Y2Nlc3NDYXNlOjpJbkhpdDoKKyAgICAgICAgb3V0LnByaW50KCJJbkhpdCIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbk1pc3M6CisgICAgICAgIG91dC5wcmludCgi
SW5NaXNzIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkFycmF5TGVu
Z3RoOgorICAgICAgICBvdXQucHJpbnQoIkFycmF5TGVuZ3RoIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEFjY2Vzc0Nhc2U6OlN0cmluZ0xlbmd0aDoKKyAgICAgICAgb3V0LnByaW50KCJT
dHJpbmdMZW5ndGgiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsK
KworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLX0gLy8gbmFtZXNwYWNl
IEpTQworfSAvLyBuYW1lc3BhY2UgV1RGCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nl
c3MuaAkocmV2aXNpb24gMTg5MzI0KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oOjE4OTMyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgUG9seW1vcnBoaWNHZXRCeUlkTGlzdF9oCisjZGVmaW5lIFBvbHltb3Jw
aGljR2V0QnlJZExpc3RfaAorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkNvZGVPcmln
aW4uaCIKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIk9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0LmgiCisjaW5jbHVkZSAiT3Bjb2RlLmgiCisjaW5jbHVkZSAiU3RydWN0
dXJlLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xh
c3MgQ29kZUJsb2NrOworc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvOworCitjbGFzcyBHZXRCeUlk
QWNjZXNzIHsKK3B1YmxpYzoKKyAgICBlbnVtIEFjY2Vzc1R5cGUgeworICAgICAgICBJbnZhbGlk
LAorICAgICAgICBTaW1wbGVJbmxpbmUsIC8vIFRoaXMgaXMgdGhlIHBhdGNoZWQgaW5saW5lIGFj
Y2Vzcy4KKyAgICAgICAgU2ltcGxlU3R1YiwgLy8gVGhpcyBpcyBhIHN0dWIuCisgICAgICAgIFdh
dGNoZWRTdHViLAorICAgICAgICBHZXR0ZXIsCisgICAgICAgIEN1c3RvbUdldHRlciwKKyAgICAg
ICAgU2ltcGxlTWlzcywKKyAgICB9OworICAgIAorICAgIEdldEJ5SWRBY2Nlc3MoKQorICAgICAg
ICA6IG1fdHlwZShJbnZhbGlkKQorICAgIHsKKyAgICB9CisgICAgCisgICAgR2V0QnlJZEFjY2Vz
cygKKyAgICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBQYXNzUmVmUHRyPEpJ
VFN0dWJSb3V0aW5lPiwgU3RydWN0dXJlKiwKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSk7CisgICAgCisgICAg
fkdldEJ5SWRBY2Nlc3MoKTsKKyAgICAKKyAgICBzdGF0aWMgR2V0QnlJZEFjY2VzcyBmcm9tU3Ry
dWN0dXJlU3R1YkluZm8oU3RydWN0dXJlU3R1YkluZm8mKTsKKyAgICAKKyAgICBib29sIGlzU2V0
KCkgY29uc3QgeyByZXR1cm4gbV90eXBlICE9IEludmFsaWQ7IH0KKyAgICBib29sIG9wZXJhdG9y
ISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9CisgICAgCisgICAgQWNjZXNzVHlwZSB0eXBl
KCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZS5nZXQoKTsgfQorICAgIAorICAgIGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVy
biBtX2NvbmRpdGlvblNldDsgfQorICAgIAorICAgIEpJVFN0dWJSb3V0aW5lKiBzdHViUm91dGlu
ZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNTZXQoKSk7CisgICAgICAgIHJldHVy
biBtX3N0dWJSb3V0aW5lLmdldCgpOworICAgIH0KKyAgICAKKyAgICBib29sIGRvZXNDYWxscygp
IGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBHZXR0ZXIgfHwgdHlwZSgpID09IEN1c3RvbUdldHRl
cjsgfQorICAgIAorICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgY29uc3Q7CisKK3ByaXZhdGU6Cisg
ICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKKyAgICAKKyAgICBBY2Nlc3NUeXBlIG1fdHlwZTsK
KyAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cnVjdHVyZTsKKyAgICBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKKyAgICBSZWZQdHI8SklUU3R1YlJvdXRp
bmU+IG1fc3R1YlJvdXRpbmU7Cit9OworCitjbGFzcyBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0IHsK
KyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICAvLyBFaXRoZXIgY3Jl
YXRlcyBhIG5ldyBwb2x5bW9ycGhpYyBnZXQgbGlzdCwgb3IgcmV0dXJucyB0aGUgb25lIHRoYXQg
aXMgYWxyZWFkeSBpbgorICAgIC8vIHBsYWNlLgorICAgIHN0YXRpYyBQb2x5bW9ycGhpY0dldEJ5
SWRMaXN0KiBmcm9tKFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAgCisgICAgflBvbHltb3JwaGlj
R2V0QnlJZExpc3QoKTsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY3VycmVudFNs
b3dQYXRoVGFyZ2V0KFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykgY29uc3Q7CisgICAgCisg
ICAgdm9pZCBhZGRBY2Nlc3MoY29uc3QgR2V0QnlJZEFjY2VzcyYpOworICAgIAorICAgIGJvb2wg
aXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5pc0VtcHR5KCk7IH0KKyAgICB1bnNpZ25l
ZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9saXN0LnNpemUoKTsgfQorICAgIGJvb2wgaXNGdWxs
KCkgY29uc3Q7CisgICAgYm9vbCBpc0FsbW9zdEZ1bGwoKSBjb25zdDsgLy8gVHJ1ZSBpZiBhZGRp
bmcgYW4gZWxlbWVudCB3b3VsZCBtYWtlIGlzRnVsbCgpIHRydWUuCisgICAgY29uc3QgR2V0QnlJ
ZEFjY2VzcyYgYXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9saXN0W2ldOyB9CisgICAg
Y29uc3QgR2V0QnlJZEFjY2VzcyYgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVy
biBtX2xpc3RbaV07IH0KKyAgICAKKyAgICBib29sIGRpZFNlbGZQYXRjaGluZygpIGNvbnN0OyAv
LyBBcmUgYW55IG9mIHRoZSBhY2Nlc3NlcyBTaW1wbGVJbmxpbmU/CisgICAgCisgICAgYm9vbCB2
aXNpdFdlYWsoVk0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQ29kZUJs
b2NrOworICAgIAorICAgIFBvbHltb3JwaGljR2V0QnlJZExpc3QoU3RydWN0dXJlU3R1YkluZm8m
KTsKKyAgICAKKyAgICBWZWN0b3I8R2V0QnlJZEFjY2VzcywgMj4gbV9saXN0OworfTsKKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCisjZW5kaWYgLy8gUG9s
eW1vcnBoaWNHZXRCeUlkTGlzdF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCSh3b3JraW5nIGNvcHkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAkod29ya2luZyBj
b3B5KQpAQCAtMjMsOCArMjMsOCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBQ
b2x5bW9ycGhpY0dldEJ5SWRMaXN0X2gKLSNkZWZpbmUgUG9seW1vcnBoaWNHZXRCeUlkTGlzdF9o
CisjaWZuZGVmIFBvbHltb3JwaGljQWNjZXNzX2gKKyNkZWZpbmUgUG9seW1vcnBoaWNBY2Nlc3Nf
aAogCiAjaWYgRU5BQkxFKEpJVCkKIApAQCAtMzgsOTYgKzM4LDI2OCBAQAogbmFtZXNwYWNlIEpT
QyB7CiAKIGNsYXNzIENvZGVCbG9jazsKK2NsYXNzIFBvbHltb3JwaGljQWNjZXNzOworY2xhc3Mg
V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOwogc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZv
OwogCi1jbGFzcyBHZXRCeUlkQWNjZXNzIHsKK3N0cnVjdCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU7
CisKK2NsYXNzIEFjY2Vzc0Nhc2UgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEFjY2Vzc0Nh
c2UpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIGVudW0gQWNj
ZXNzVHlwZSB7Ci0gICAgICAgIEludmFsaWQsCi0gICAgICAgIFNpbXBsZUlubGluZSwgLy8gVGhp
cyBpcyB0aGUgcGF0Y2hlZCBpbmxpbmUgYWNjZXNzLgotICAgICAgICBTaW1wbGVTdHViLCAvLyBU
aGlzIGlzIGEgc3R1Yi4KLSAgICAgICAgV2F0Y2hlZFN0dWIsCisgICAgICAgIExvYWQsCisgICAg
ICAgIFRyYW5zaXRpb24sCisgICAgICAgIFJlcGxhY2UsCisgICAgICAgIE1pc3MsCiAgICAgICAg
IEdldHRlciwKKyAgICAgICAgU2V0dGVyLAogICAgICAgICBDdXN0b21HZXR0ZXIsCi0gICAgICAg
IFNpbXBsZU1pc3MsCisgICAgICAgIEN1c3RvbVNldHRlciwKKyAgICAgICAgSW5IaXQsCisgICAg
ICAgIEluTWlzcywKKyAgICAgICAgQXJyYXlMZW5ndGgsCisgICAgICAgIFN0cmluZ0xlbmd0aAog
ICAgIH07Ci0gICAgCi0gICAgR2V0QnlJZEFjY2VzcygpCi0gICAgICAgIDogbV90eXBlKEludmFs
aWQpCisKKyAgICBzdGF0aWMgYm9vbCBpc0dldChBY2Nlc3NUeXBlIHR5cGUpCiAgICAgeworICAg
ICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBUcmFuc2l0aW9uOgorICAgICAgICBj
YXNlIFJlcGxhY2U6CisgICAgICAgIGNhc2UgU2V0dGVyOgorICAgICAgICBjYXNlIEN1c3RvbVNl
dHRlcjoKKyAgICAgICAgY2FzZSBJbkhpdDoKKyAgICAgICAgY2FzZSBJbk1pc3M6CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgTG9hZDoKKyAgICAgICAgY2FzZSBNaXNz
OgorICAgICAgICBjYXNlIEdldHRlcjoKKyAgICAgICAgY2FzZSBDdXN0b21HZXR0ZXI6CisgICAg
ICAgIGNhc2UgQXJyYXlMZW5ndGg6CisgICAgICAgIGNhc2UgU3RyaW5nTGVuZ3RoOgorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgR2V0QnlJZEFj
Y2VzcygKLSAgICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBQYXNzUmVmUHRy
PEpJVFN0dWJSb3V0aW5lPiwgU3RydWN0dXJlKiwKKworICAgIHN0YXRpYyBib29sIGlzUHV0KEFj
Y2Vzc1R5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBj
YXNlIExvYWQ6CisgICAgICAgIGNhc2UgTWlzczoKKyAgICAgICAgY2FzZSBHZXR0ZXI6CisgICAg
ICAgIGNhc2UgQ3VzdG9tR2V0dGVyOgorICAgICAgICBjYXNlIEluSGl0OgorICAgICAgICBjYXNl
IEluTWlzczoKKyAgICAgICAgY2FzZSBBcnJheUxlbmd0aDoKKyAgICAgICAgY2FzZSBTdHJpbmdM
ZW5ndGg6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgVHJhbnNpdGlv
bjoKKyAgICAgICAgY2FzZSBSZXBsYWNlOgorICAgICAgICBjYXNlIFNldHRlcjoKKyAgICAgICAg
Y2FzZSBDdXN0b21TZXR0ZXI6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzSW4oQWNjZXNzVHlwZSB0eXBlKQorICAgIHsKKyAg
ICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgTG9hZDoKKyAgICAgICAgY2FzZSBN
aXNzOgorICAgICAgICBjYXNlIEdldHRlcjoKKyAgICAgICAgY2FzZSBDdXN0b21HZXR0ZXI6Cisg
ICAgICAgIGNhc2UgVHJhbnNpdGlvbjoKKyAgICAgICAgY2FzZSBSZXBsYWNlOgorICAgICAgICBj
YXNlIFNldHRlcjoKKyAgICAgICAgY2FzZSBDdXN0b21TZXR0ZXI6CisgICAgICAgIGNhc2UgQXJy
YXlMZW5ndGg6CisgICAgICAgIGNhc2UgU3RyaW5nTGVuZ3RoOgorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBjYXNlIEluSGl0OgorICAgICAgICBjYXNlIEluTWlzczoKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIHN0ZDo6
dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBnZXQoCisgICAgICAgIFZNJiwgSlNDZWxsKiBvd25lciwg
QWNjZXNzVHlwZSwgUHJvcGVydHlPZmZzZXQsIFN0cnVjdHVyZSosCisgICAgICAgIGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCks
CisgICAgICAgIGJvb2wgdmlhUHJveHkgPSBmYWxzZSwKKyAgICAgICAgV2F0Y2hwb2ludFNldCog
YWRkaXRpb25hbFNldCA9IG51bGxwdHIsCisgICAgICAgIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVG
dW5jID0gbnVsbHB0cik7CisKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+
IHJlcGxhY2UoCisgICAgICAgIFZNJiwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCk7CisKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PEFjY2Vzc0Nhc2U+IHRyYW5zaXRpb24oCisgICAgICAgIFZNJiwgSlNDZWxsKiBvd25lciwgU3Ry
dWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLCBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQsCiAgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiA9
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCkpOworCisgICAgc3RhdGljIHN0ZDo6dW5pcXVl
X3B0cjxBY2Nlc3NDYXNlPiBzZXR0ZXIoCisgICAgICAgIFZNJiwgSlNDZWxsKiBvd25lciwgQWNj
ZXNzVHlwZSwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQsCisgICAgICAgIGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgUHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmMpOwor
CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBpbigKKyAgICAgICAgVk0m
LCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKKyAgICAg
ICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQoKSk7CisKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGdl
dExlbmd0aChWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUpOwogICAgIAotICAgIH5HZXRC
eUlkQWNjZXNzKCk7Ci0gICAgCi0gICAgc3RhdGljIEdldEJ5SWRBY2Nlc3MgZnJvbVN0cnVjdHVy
ZVN0dWJJbmZvKFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0
cjxBY2Nlc3NDYXNlPiBmcm9tU3RydWN0dXJlU3R1YkluZm8oVk0mLCBKU0NlbGwqIG93bmVyLCBT
dHJ1Y3R1cmVTdHViSW5mbyYpOworCisgICAgfkFjY2Vzc0Nhc2UoKTsKICAgICAKLSAgICBib29s
IGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV90eXBlICE9IEludmFsaWQ7IH0KLSAgICBib29sIG9w
ZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9CisgICAgc3RkOjp1bmlxdWVfcHRy
PEFjY2Vzc0Nhc2U+IGNsb25lKCkgY29uc3Q7CiAgICAgCiAgICAgQWNjZXNzVHlwZSB0eXBlKCkg
Y29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29u
c3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKyAgICBib29sIHZpYVByb3h5KCkgY29uc3QgeyByZXR1
cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPnZpYVByb3h5IDogZmFsc2U7IH0KICAgICAKLSAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlLmdldCgp
OyB9Ci0gICAgCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlv
blNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9Ci0gICAgCi0gICAgSklUU3R1
YlJvdXRpbmUqIHN0dWJSb3V0aW5lKCkgY29uc3QKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgp
IGNvbnN0CisgICAgeworICAgICAgICBpZiAobV90eXBlID09IFRyYW5zaXRpb24pCisgICAgICAg
ICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKTsKKyAgICAgICAgcmV0dXJuIG1f
c3RydWN0dXJlLmdldCgpOworICAgIH0KKyAgICBib29sIGd1YXJkZWRCeVN0cnVjdHVyZUNoZWNr
KCkgY29uc3Q7CisKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSgpIGNvbnN0CiAgICAgewot
ICAgICAgICBBU1NFUlQoaXNTZXQoKSk7Ci0gICAgICAgIHJldHVybiBtX3N0dWJSb3V0aW5lLmdl
dCgpOworICAgICAgICBBU1NFUlQobV90eXBlID09IFRyYW5zaXRpb24pOworICAgICAgICByZXR1
cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7CiAgICAgfQogICAgIAotICAgIGJvb2wgZG9lc0NhbGxzKCkg
Y29uc3QgeyByZXR1cm4gdHlwZSgpID09IEdldHRlciB8fCB0eXBlKCkgPT0gQ3VzdG9tR2V0dGVy
OyB9CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0KCkgY29uc3Qg
eyByZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0KKworICAgIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9u
YWxTZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVE
YXRhLT5hZGRpdGlvbmFsU2V0LmdldCgpIDogbnVsbHB0cjsKKyAgICB9CiAgICAgCi0gICAgYm9v
bCB2aXNpdFdlYWsoVk0mKSBjb25zdDsKKyAgICBib29sIGRvZXNDYWxscygpIGNvbnN0CisgICAg
eworICAgICAgICBzd2l0Y2ggKHR5cGUoKSkgeworICAgICAgICBjYXNlIEdldHRlcjoKKyAgICAg
ICAgY2FzZSBTZXR0ZXI6CisgICAgICAgIGNhc2UgQ3VzdG9tR2V0dGVyOgorICAgICAgICBjYXNl
IEN1c3RvbVNldHRlcjoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQogCisgICAgQ2Fs
bExpbmtJbmZvKiBjYWxsTGlua0luZm8oKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFtX3Jh
cmVEYXRhKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBtX3Jh
cmVEYXRhLT5jYWxsTGlua0luZm8uZ2V0KCk7CisgICAgfQorCisgICAgLy8gSWYgdGhpcyBtZXRo
b2QgcmV0dXJucyB0cnVlLCB0aGVuIGl0J3MgYSBnb29kIGlkZWEgdG8gcmVtb3ZlICdvdGhlcicg
ZnJvbSB0aGUgYWNjZXNzIG9uY2UgJ3RoaXMnCisgICAgLy8gaXMgYWRkZWQuIFRoaXMgbWV0aG9k
IGFzc3VtZXMgdGhhdCBpbiBjYXNlIG9mIGNvbnRyYWRpY3Rpb25zLCAndGhpcycgcmVwcmVzZW50
cyBhIG5ld2VyLCBhbmQgc28KKyAgICAvLyBtb3JlIHVzZWZ1bCwgdHJ1dGguIFRoaXMgbWV0aG9k
IGNhbiBiZSBjb25zZXJ2YXRpdmU7IGl0IHdpbGwgcmV0dXJuIGZhbHNlIHdoZW4gaXQgZG91YnQu
CisgICAgYm9vbCBjYW5SZXBsYWNlKGNvbnN0IEFjY2Vzc0Nhc2UmIG90aGVyKTsKKworICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKyAgICAKIHByaXZhdGU6CiAgICAgZnJp
ZW5kIGNsYXNzIENvZGVCbG9jazsKKyAgICBmcmllbmQgY2xhc3MgUG9seW1vcnBoaWNBY2Nlc3M7
CisKKyAgICBBY2Nlc3NDYXNlKCk7CisKKyAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0Owor
CisgICAgLy8gRmFsbCB0aHJvdWdoIG9uIHN1Y2Nlc3MuIFR3byBraW5kcyBvZiBmYWlsdXJlcyBh
cmUgc3VwcG9ydGVkOiBmYWxsLXRocm91Z2gsIHdoaWNoIG1lYW5zIHRoYXQgd2UKKyAgICAvLyBz
aG91bGQgdHJ5IGEgZGlmZmVyZW50IGNhc2U7IGFuZCBmYWlsdXJlLCB3aGljaCBtZWFucyB0aGF0
IHRoaXMgd2FzIHRoZSByaWdodCBjYXNlIGJ1dCBpdCBuZWVkcworICAgIC8vIGhlbHAgZnJvbSB0
aGUgc2xvdyBwYXRoLgorICAgIHZvaWQgZ2VuZXJhdGVXaXRoR3VhcmQoQWNjZXNzR2VuZXJhdGlv
blN0YXRlJiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWxsVGhyb3VnaCk7CisKKyAgICAv
LyBGYWxsIHRocm91Z2ggb24gc3VjY2VzcywgYWRkIGEganVtcCB0byB0aGUgZmFpbHVyZSBsaXN0
IG9uIGZhaWx1cmUuCisgICAgdm9pZCBnZW5lcmF0ZShBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmKTsK
ICAgICAKICAgICBBY2Nlc3NUeXBlIG1fdHlwZTsKKyAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNl
dDsKKworICAgIC8vIFVzdWFsbHkgdGhpcyBpcyB0aGUgc3RydWN0dXJlIHRoYXQgd2UgZXhwZWN0
IHRoZSBiYXNlIG9iamVjdCB0byBoYXZlLiBCdXQsIHRoaXMgaXMgdGhlICpuZXcqCisgICAgLy8g
c3RydWN0dXJlIGZvciBhIHRyYW5zaXRpb24gYW5kIHdlIHJlbHkgb24gdGhlIGZhY3QgdGhhdCBp
dCBoYXMgYSBzdHJvbmcgcmVmZXJlbmNlIHRvIHRoZSBvbGQKKyAgICAvLyBzdHJ1Y3R1cmUuIEZv
ciBwcm94aWVzLCB0aGlzIGlzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIG9iamVjdCBiZWhpbmQgdGhl
IHByb3h5LgogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOworCiAgICAg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7Ci0gICAgUmVmUHRyPEpJ
VFN0dWJSb3V0aW5lPiBtX3N0dWJSb3V0aW5lOworCisgICAgY2xhc3MgUmFyZURhdGEgeworICAg
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6CisgICAgICAgIGJvb2wg
dmlhUHJveHk7CisgICAgICAgIFJlZlB0cjxXYXRjaHBvaW50U2V0PiBhZGRpdGlvbmFsU2V0Owor
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtJbmZvPiBjYWxsTGlua0luZm87CisgICAg
ICAgIHVuaW9uIHsKKyAgICAgICAgICAgIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jIGdldHRl
cjsKKyAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jIHNldHRlcjsKKyAg
ICAgICAgICAgIHZvaWQqIG9wYXF1ZTsKKyAgICAgICAgfSBjdXN0b21BY2Nlc3NvcjsKKyAgICB9
OworCisgICAgc3RkOjp1bmlxdWVfcHRyPFJhcmVEYXRhPiBtX3JhcmVEYXRhOwogfTsKIAotY2xh
c3MgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCB7CitjbGFzcyBQb2x5bW9ycGhpY0FjY2VzcyB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUG9seW1vcnBoaWNBY2Nlc3MpOwogICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIC8vIEVpdGhlciBjcmVhdGVzIGEgbmV3IHBv
bHltb3JwaGljIGdldCBsaXN0LCBvciByZXR1cm5zIHRoZSBvbmUgdGhhdCBpcyBhbHJlYWR5IGlu
Ci0gICAgLy8gcGxhY2UuCi0gICAgc3RhdGljIFBvbHltb3JwaGljR2V0QnlJZExpc3QqIGZyb20o
U3RydWN0dXJlU3R1YkluZm8mKTsKLSAgICAKLSAgICB+UG9seW1vcnBoaWNHZXRCeUlkTGlzdCgp
OwotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdXJyZW50U2xvd1BhdGhUYXJnZXQo
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKSBjb25zdDsKLSAgICAKLSAgICB2b2lkIGFkZEFj
Y2Vzcyhjb25zdCBHZXRCeUlkQWNjZXNzJik7CisgICAgUG9seW1vcnBoaWNBY2Nlc3MoKTsKKyAg
ICB+UG9seW1vcnBoaWNBY2Nlc3MoKTsKKworICAgIC8vIFRoaXMgbWF5IHJldHVybiBudWxsLCBp
biB3aGljaCBjYXNlIHRoZSBvbGQgc3R1YiByb3V0aW5lIGlzIGxlZnQgaW50YWN0LiBUaGlzIG1l
dGhvZCB3aWxsIGRvIHlvdQorICAgIC8vIGEgc29saWQgYW5kIG51bGwtY2hlY2sgdGhlIEFjY2Vz
c0Nhc2UsIHNvIHRoYXQgeW91IGNhbiBkbyB0aGluZ3MgbGlrZToKKyAgICAvLworICAgIC8vIGNv
ZGVQdHIgPSBhY2Nlc3MtPnJlZ2VuZXJhdGVXaXRoQ2FzZSguLi4sIEFjY2Vzc0Nhc2U6OmdldCgu
Li4pKQorICAgIC8vCisgICAgLy8gSWYgQWNjZXNzQ2FzZTo6Z2V0KCkgcmV0dXJucyBudWxscHRy
LCB0aGUgYWJvdmUgY2FsbCB3aWxsIHNpbXBseSByZXR1cm4gbnVsbC4KKyAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgcmVnZW5lcmF0ZVdpdGhDYXNlcygKKyAgICAgICAgVk0mLCBDb2RlQmxvY2sq
LCBTdHJ1Y3R1cmVTdHViSW5mbyYsIGNvbnN0IElkZW50aWZpZXImLCBWZWN0b3I8c3RkOjp1bmlx
dWVfcHRyPEFjY2Vzc0Nhc2U+Pik7CisKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVnZW5l
cmF0ZVdpdGhDYXNlKAorICAgICAgICBWTSYsIENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZv
JiwgY29uc3QgSWRlbnRpZmllciYsIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPik7CiAgICAg
CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9saXN0LmlzRW1wdHkoKTsgfQog
ICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2xpc3Quc2l6ZSgpOyB9Ci0gICAg
Ym9vbCBpc0Z1bGwoKSBjb25zdDsKLSAgICBib29sIGlzQWxtb3N0RnVsbCgpIGNvbnN0OyAvLyBU
cnVlIGlmIGFkZGluZyBhbiBlbGVtZW50IHdvdWxkIG1ha2UgaXNGdWxsKCkgdHJ1ZS4KLSAgICBj
b25zdCBHZXRCeUlkQWNjZXNzJiBhdCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2xpc3Rb
aV07IH0KLSAgICBjb25zdCBHZXRCeUlkQWNjZXNzJiBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNv
bnN0IHsgcmV0dXJuIG1fbGlzdFtpXTsgfQotICAgIAotICAgIGJvb2wgZGlkU2VsZlBhdGNoaW5n
KCkgY29uc3Q7IC8vIEFyZSBhbnkgb2YgdGhlIGFjY2Vzc2VzIFNpbXBsZUlubGluZT8KLSAgICAK
KyAgICBjb25zdCBBY2Nlc3NDYXNlJiBhdCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiAqbV9s
aXN0W2ldOyB9CisgICAgY29uc3QgQWNjZXNzQ2FzZSYgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBj
b25zdCB7IHJldHVybiAqbV9saXN0W2ldOyB9CisKKyAgICAvLyBJZiB0aGlzIHJldHVybnMgZmFs
c2UgdGhlbiB3ZSBhcmUgcmVxdWVzdGluZyBhIHJlc2V0IG9mIHRoZSBvd25pbmcgU3RydWN0dXJl
U3R1YkluZm8uCiAgICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25zdDsKIAorICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKwogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3Mg
QWNjZXNzQ2FzZTsKICAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOworICAgIGZyaWVuZCBzdHJ1
Y3QgQWNjZXNzR2VuZXJhdGlvblN0YXRlOwogICAgIAotICAgIFBvbHltb3JwaGljR2V0QnlJZExp
c3QoU3RydWN0dXJlU3R1YkluZm8mKTsKLSAgICAKLSAgICBWZWN0b3I8R2V0QnlJZEFjY2Vzcywg
Mj4gbV9saXN0OworICAgIHR5cGVkZWYgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNl
PiwgMj4gTGlzdFR5cGU7CisKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVnZW5lcmF0ZSgK
KyAgICAgICAgVk0mLCBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIGNvbnN0IElkZW50
aWZpZXImLCBMaXN0VHlwZSYgY2FzZXMpOworCisgICAgTGlzdFR5cGUgbV9saXN0OworICAgIFJl
ZlB0cjxKSVRTdHViUm91dGluZT4gbV9zdHViUm91dGluZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvPiBtX3dhdGNocG9pbnRzOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCiAKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwo
UHJpbnRTdHJlYW0mLCBKU0M6OkFjY2Vzc0Nhc2U6OkFjY2Vzc1R5cGUpOworCit9IC8vIG5hbWVz
cGFjZSBXVEYKKwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKLSNlbmRpZiAvLyBQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0X2gKKyNlbmRpZiAvLyBQb2x5bW9ycGhpY0FjY2Vzc19oCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxp
c3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0LmgJKHJldmlzaW9uIDE4OTQ5MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QuaAko
d29ya2luZyBjb3B5KQpAQCAtMSwxMTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJl
TGlzdF9oCi0jZGVmaW5lIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdF9oCi0KLSNpbmNs
dWRlICJKSVRTdHViUm91dGluZS5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgotI2luY2x1ZGUg
IlN0cnVjdHVyZUNoYWluLmgiCi0KLSNkZWZpbmUgUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpF
IDgKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLS8vICpTaWdoKiwgSWYgdGhlIEpJVCBpcyBlbmFibGVk
IHdlIG5lZWQgdG8gdHJhY2sgdGhlIHN0dWJSb3VudGluZSAob2YgdHlwZSBDb2RlTG9jYXRpb25M
YWJlbCksCi0vLyBJZiB0aGUgSklUIGlzIG5vdCBpbiB1c2Ugd2UgZG9uJ3QgYWN0dWFsbHkgbmVl
ZCB0aGUgdmFyaWFibGUgKHRoYXQgc2FpZCwgaWYgdGhlIEpJVCBpcyBub3QgaW4gdXNlIHdlIGRv
bid0Ci0vLyBjdXJlbnRseSBhY3R1YWxseSB1c2UgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVM
aXN0cywgd2hpY2ggd2Ugc2hvdWxkKS4gIEFueXdheSwgdGhpcyBzZWVtcyBsaWtlIHRoZSBiZXN0
Ci0vLyBzb2x1dGlvbiBmb3Igbm93IC0gd2lsbCBuZWVkIHRvIHNvbWV0aGluZyBzbWFydGVyIGlm
L3doZW4gd2UgYWN0dWFsbHkgd2FudCBtaXhlZC1tb2RlIG9wZXJhdGlvbi4KLQotI2lmIEVOQUJM
RShKSVQpCi0vLyBTdHJ1Y3R1cmUgdXNlZCBieSBvcF9nZXRfYnlfaWRfc2VsZl9saXN0IGFuZCBv
cF9nZXRfYnlfaWRfcHJvdG9fbGlzdCBpbnN0cnVjdGlvbiB0byBob2xkIGRhdGEgb2ZmIHRoZSBt
YWluIG9wY29kZSBzdHJlYW0uCi1zdHJ1Y3QgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0
IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBzdHJ1Y3QgUG9s
eW1vcnBoaWNTdHViSW5mbyB7Ci0gICAgICAgIGJvb2wgaXNEaXJlY3QgOiAxOwotICAgICAgICB1
bnNpZ25lZCBjb3VudCA6IDMxOwotICAgICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJS
b3V0aW5lOwotICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBiYXNlOwotICAgICAgICBX
cml0ZUJhcnJpZXI8U3RydWN0dXJlQ2hhaW4+IGNoYWluOwotCi0gICAgICAgIFBvbHltb3JwaGlj
U3R1YkluZm8oKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNldChWTSYg
dm0sIEpTQ2VsbCogb3duZXIsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IF9zdHViUm91dGlu
ZSwgU3RydWN0dXJlKiBfYmFzZSwgYm9vbCBfaXNEaXJlY3QpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHN0dWJSb3V0aW5lID0gX3N0dWJSb3V0aW5lOwotICAgICAgICAgICAgYmFzZS5zZXQodm0s
IG93bmVyLCBfYmFzZSk7Ci0gICAgICAgICAgICBpc0RpcmVjdCA9IF9pc0RpcmVjdDsKLSAgICAg
ICAgICAgIGNvdW50ID0gMDsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdm9pZCBzZXQo
Vk0mIHZtLCBKU0NlbGwqIG93bmVyLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBfc3R1YlJv
dXRpbmUsIFN0cnVjdHVyZSogX2Jhc2UsIFN0cnVjdHVyZUNoYWluKiBfY2hhaW4sIGJvb2wgX2lz
RGlyZWN0LCB1bnNpZ25lZCBfY291bnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0dWJSb3V0
aW5lID0gX3N0dWJSb3V0aW5lOwotICAgICAgICAgICAgYmFzZS5zZXQodm0sIG93bmVyLCBfYmFz
ZSk7Ci0gICAgICAgICAgICBjaGFpbi5zZXQodm0sIG93bmVyLCBfY2hhaW4pOwotICAgICAgICAg
ICAgaXNEaXJlY3QgPSBfaXNEaXJlY3Q7Ci0gICAgICAgICAgICBjb3VudCA9IF9jb3VudDsKLSAg
ICAgICAgfQotICAgIH0gbGlzdFtQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkVdOwotICAgIAot
ICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCgpCi0gICAgewotICAgIH0KLSAgICAK
LSAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoVk0mIHZtLCBKU0NlbGwqIG93bmVy
LCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSwgU3RydWN0dXJlKiBmaXJz
dEJhc2UsIGJvb2wgaXNEaXJlY3QpCi0gICAgewotICAgICAgICBsaXN0WzBdLnNldCh2bSwgb3du
ZXIsIHN0dWJSb3V0aW5lLCBmaXJzdEJhc2UsIGlzRGlyZWN0KTsKLSAgICB9Ci0KLSAgICBQb2x5
bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBQYXNzUmVm
UHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSwgU3RydWN0dXJlKiBmaXJzdEJhc2UsIFN0
cnVjdHVyZUNoYWluKiBmaXJzdENoYWluLCBib29sIGlzRGlyZWN0LCB1bnNpZ25lZCBjb3VudCkK
LSAgICB7Ci0gICAgICAgIGxpc3RbMF0uc2V0KHZtLCBvd25lciwgc3R1YlJvdXRpbmUsIGZpcnN0
QmFzZSwgZmlyc3RDaGFpbiwgaXNEaXJlY3QsIGNvdW50KTsKLSAgICB9Ci0KLSAgICBib29sIHZp
c2l0V2VhayhpbnQgY291bnQpCi0gICAgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNv
dW50OyArK2kpIHsKLSAgICAgICAgICAgIFBvbHltb3JwaGljU3R1YkluZm8mIGluZm8gPSBsaXN0
W2ldOwotICAgICAgICAgICAgaWYgKCFpbmZvLmJhc2UpCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKGlu
Zm8uYmFzZS5nZXQoKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgaWYgKGluZm8uY2hhaW4gJiYgIUhlYXA6OmlzTWFya2VkKGluZm8uY2hhaW4uZ2V0KCkpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLX07Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSklUKQot
Ci19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIFBvbHltb3JwaGljQWNjZXNzU3RydWN0
dXJlTGlzdF9oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9y
cGhpY0dldEJ5SWRMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAJKHJldmlzaW9uIDE4OTQ5MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSwxNTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oIgotCi0jaWYgRU5BQkxFKEpJVCkKLQotI2lu
Y2x1ZGUgIkNvZGVCbG9jay5oIgotI2luY2x1ZGUgIkhlYXAuaCIKLSNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKLQotbmFtZXNwYWNlIEpTQyB7
Ci0KLUdldEJ5SWRBY2Nlc3M6OkdldEJ5SWRBY2Nlc3MoCi0gICAgVk0mIHZtLCBKU0NlbGwqIG93
bmVyLCBBY2Nlc3NUeXBlIHR5cGUsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0
aW5lLAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCYgY29uZGl0aW9uU2V0KQotICAgIDogbV90eXBlKHR5cGUpCi0gICAgLCBtX3N0cnVj
dHVyZSh2bSwgb3duZXIsIHN0cnVjdHVyZSkKLSAgICAsIG1fY29uZGl0aW9uU2V0KGNvbmRpdGlv
blNldCkKLSAgICAsIG1fc3R1YlJvdXRpbmUoc3R1YlJvdXRpbmUpCi17Ci19Ci0KLUdldEJ5SWRB
Y2Nlc3M6On5HZXRCeUlkQWNjZXNzKCkKLXsKLX0KLQotR2V0QnlJZEFjY2VzcyBHZXRCeUlkQWNj
ZXNzOjpmcm9tU3RydWN0dXJlU3R1YkluZm8oU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQot
ewotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBpbml0aWFsU2xvd1BhdGggPQotICAgICAgICBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5k
ZWx0YUNhbGxUb1Nsb3dDYXNlKTsKLSAgICAKLSAgICBHZXRCeUlkQWNjZXNzIHJlc3VsdDsKLSAg
ICAKLSAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRf
YnlfaWRfc2VsZik7Ci0gICAgCi0gICAgcmVzdWx0Lm1fdHlwZSA9IFNpbXBsZUlubGluZTsKLSAg
ICByZXN1bHQubV9zdHJ1Y3R1cmUuY29weUZyb20oc3R1YkluZm8udS5nZXRCeUlkU2VsZi5iYXNl
T2JqZWN0U3RydWN0dXJlKTsKLSAgICByZXN1bHQubV9zdHViUm91dGluZSA9IEpJVFN0dWJSb3V0
aW5lOjpjcmVhdGVTZWxmTWFuYWdlZFJvdXRpbmUoaW5pdGlhbFNsb3dQYXRoKTsKLSAgICAKLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotCi1ib29sIEdldEJ5SWRBY2Nlc3M6OnZpc2l0V2VhayhWTSYg
dm0pIGNvbnN0Ci17Ci0gICAgaWYgKG1fc3RydWN0dXJlICYmICFIZWFwOjppc01hcmtlZChtX3N0
cnVjdHVyZS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIW1fY29uZGl0
aW9uU2V0LmFyZVN0aWxsTGl2ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFt
X3N0dWJSb3V0aW5lLT52aXNpdFdlYWsodm0pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLVBvbHltb3JwaGljR2V0QnlJZExpc3Q6OlBvbHltb3JwaGljR2V0
QnlJZExpc3QoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIGlmIChzdHViSW5m
by5hY2Nlc3NUeXBlID09IGFjY2Vzc191bnNldCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAg
IG1fbGlzdC5hcHBlbmQoR2V0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKHN0dWJJ
bmZvKSk7Ci19Ci0KLVBvbHltb3JwaGljR2V0QnlJZExpc3QqIFBvbHltb3JwaGljR2V0QnlJZExp
c3Q6OmZyb20oU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIGlmIChzdHViSW5m
by5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfbGlzdCkKLSAgICAgICAgcmV0dXJuIHN0
dWJJbmZvLnUuZ2V0QnlJZExpc3QubGlzdDsKLSAgICAKLSAgICBBU1NFUlQoCi0gICAgICAgIHN0
dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmCi0gICAgICAgIHx8IHN0
dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0KTsKLSAgICAKLSAgICBQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0KiByZXN1bHQgPSBuZXcgUG9seW1vcnBoaWNHZXRCeUlkTGlzdChzdHViSW5m
byk7Ci0gICAgCi0gICAgc3R1YkluZm8uaW5pdEdldEJ5SWRMaXN0KHJlc3VsdCk7Ci0gICAgCi0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6flBvbHltb3Jw
aGljR2V0QnlJZExpc3QoKSB7IH0KLQotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIFBvbHltb3JwaGlj
R2V0QnlJZExpc3Q6OmN1cnJlbnRTbG93UGF0aFRhcmdldCgKLSAgICBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8pIGNvbnN0Ci17Ci0gICAgaWYgKGlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNo
LmRlbHRhQ2FsbFRvU2xvd0Nhc2UpOwotICAgIHJldHVybiBtX2xpc3QubGFzdCgpLnN0dWJSb3V0
aW5lKCktPmNvZGUoKS5jb2RlKCk7Ci19Ci0KLXZvaWQgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6
YWRkQWNjZXNzKGNvbnN0IEdldEJ5SWRBY2Nlc3MmIGFjY2VzcykKLXsKLSAgICBBU1NFUlQoIWlz
RnVsbCgpKTsKLSAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgcmVzaXppbmcgb3B0aW1pemVzIGZv
ciBzcGFjZSwgbm90IHRpbWUuCi0gICAgbV9saXN0LnJlc2l6ZVRvRml0KG1fbGlzdC5zaXplKCkg
KyAxKTsKLSAgICBtX2xpc3QubGFzdCgpID0gYWNjZXNzOwotfQotCi1ib29sIFBvbHltb3JwaGlj
R2V0QnlJZExpc3Q6OmlzRnVsbCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHNpemUoKSA8PSBQT0xZ
TU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpOwotICAgIHJldHVybiBzaXplKCkgPT0gUE9MWU1PUlBI
SUNfTElTVF9DQUNIRV9TSVpFOwotfQotCi1ib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6Omlz
QWxtb3N0RnVsbCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHNpemUoKSA8PSBQT0xZTU9SUEhJQ19M
SVNUX0NBQ0hFX1NJWkUpOwotICAgIHJldHVybiBzaXplKCkgPj0gUE9MWU1PUlBISUNfTElTVF9D
QUNIRV9TSVpFIC0gMTsKLX0KLQotYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpkaWRTZWxm
UGF0Y2hpbmcoKSBjb25zdAotewotICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUoKTsgaS0tOykg
ewotICAgICAgICBpZiAoYXQoaSkudHlwZSgpID09IEdldEJ5SWRBY2Nlc3M6OlNpbXBsZUlubGlu
ZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLWJvb2wgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6dmlzaXRXZWFrKFZNJiB2bSkgY29uc3QK
LXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXplKCk7IGktLTspIHsKLSAgICAgICAgaWYgKCFh
dChpKS52aXNpdFdlYWsodm0pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFC
TEUoSklUKQotCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9y
cGhpY0dldEJ5SWRMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuaAkocmV2aXNpb24gMTg5NDkzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMSwxMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFBvbHltb3JwaGljR2V0QnlJZExpc3Rf
aAotI2RlZmluZSBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0X2gKLQotI2lmIEVOQUJMRShKSVQpCi0K
LSNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCi0jaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKLSNp
bmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgotI2luY2x1ZGUgIk9wY29kZS5o
IgotI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFt
ZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENvZGVCbG9jazsKLXN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5m
bzsKLQotY2xhc3MgR2V0QnlJZEFjY2VzcyB7Ci1wdWJsaWM6Ci0gICAgZW51bSBBY2Nlc3NUeXBl
IHsKLSAgICAgICAgSW52YWxpZCwKLSAgICAgICAgU2ltcGxlSW5saW5lLCAvLyBUaGlzIGlzIHRo
ZSBwYXRjaGVkIGlubGluZSBhY2Nlc3MuCi0gICAgICAgIFNpbXBsZVN0dWIsIC8vIFRoaXMgaXMg
YSBzdHViLgotICAgICAgICBXYXRjaGVkU3R1YiwKLSAgICAgICAgR2V0dGVyLAotICAgICAgICBD
dXN0b21HZXR0ZXIsCi0gICAgICAgIFNpbXBsZU1pc3MsCi0gICAgfTsKLSAgICAKLSAgICBHZXRC
eUlkQWNjZXNzKCkKLSAgICAgICAgOiBtX3R5cGUoSW52YWxpZCkKLSAgICB7Ci0gICAgfQotICAg
IAotICAgIEdldEJ5SWRBY2Nlc3MoCi0gICAgICAgIFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNz
VHlwZSwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4sIFN0cnVjdHVyZSosCi0gICAgICAgIGNv
bnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0KCkpOwotICAgIAotICAgIH5HZXRCeUlkQWNjZXNzKCk7Ci0gICAgCi0gICAgc3RhdGljIEdl
dEJ5SWRBY2Nlc3MgZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFN0cnVjdHVyZVN0dWJJbmZvJik7Ci0g
ICAgCi0gICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSAhPSBJbnZhbGlkOyB9
Ci0gICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQotICAgIAot
ICAgIEFjY2Vzc1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQotICAgIAotICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7
IH0KLSAgICAKLSAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9u
U2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0KLSAgICAKLSAgICBKSVRTdHVi
Um91dGluZSogc3R1YlJvdXRpbmUoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzU2V0
KCkpOwotICAgICAgICByZXR1cm4gbV9zdHViUm91dGluZS5nZXQoKTsKLSAgICB9Ci0gICAgCi0g
ICAgYm9vbCBkb2VzQ2FsbHMoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gR2V0dGVyIHx8IHR5
cGUoKSA9PSBDdXN0b21HZXR0ZXI7IH0KLSAgICAKLSAgICBib29sIHZpc2l0V2VhayhWTSYpIGNv
bnN0OwotCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7Ci0gICAgCi0gICAg
QWNjZXNzVHlwZSBtX3R5cGU7Ci0gICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJ1Y3R1
cmU7Ci0gICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7Ci0gICAg
UmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBtX3N0dWJSb3V0aW5lOwotfTsKLQotY2xhc3MgUG9seW1v
cnBoaWNHZXRCeUlkTGlzdCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6
Ci0gICAgLy8gRWl0aGVyIGNyZWF0ZXMgYSBuZXcgcG9seW1vcnBoaWMgZ2V0IGxpc3QsIG9yIHJl
dHVybnMgdGhlIG9uZSB0aGF0IGlzIGFscmVhZHkgaW4KLSAgICAvLyBwbGFjZS4KLSAgICBzdGF0
aWMgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogZnJvbShTdHJ1Y3R1cmVTdHViSW5mbyYpOwotICAg
IAotICAgIH5Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0KCk7Ci0gICAgCi0gICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIGN1cnJlbnRTbG93UGF0aFRhcmdldChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8pIGNvbnN0OwotICAgIAotICAgIHZvaWQgYWRkQWNjZXNzKGNvbnN0IEdldEJ5SWRBY2Nlc3Mm
KTsKLSAgICAKLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2xpc3QuaXNFbXB0
eSgpOyB9Ci0gICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5zaXplKCk7
IH0KLSAgICBib29sIGlzRnVsbCgpIGNvbnN0OwotICAgIGJvb2wgaXNBbG1vc3RGdWxsKCkgY29u
c3Q7IC8vIFRydWUgaWYgYWRkaW5nIGFuIGVsZW1lbnQgd291bGQgbWFrZSBpc0Z1bGwoKSB0cnVl
LgotICAgIGNvbnN0IEdldEJ5SWRBY2Nlc3MmIGF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJu
IG1fbGlzdFtpXTsgfQotICAgIGNvbnN0IEdldEJ5SWRBY2Nlc3MmIG9wZXJhdG9yW10odW5zaWdu
ZWQgaSkgY29uc3QgeyByZXR1cm4gbV9saXN0W2ldOyB9Ci0gICAgCi0gICAgYm9vbCBkaWRTZWxm
UGF0Y2hpbmcoKSBjb25zdDsgLy8gQXJlIGFueSBvZiB0aGUgYWNjZXNzZXMgU2ltcGxlSW5saW5l
PwotICAgIAotICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAg
ZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKLSAgICAKLSAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0
KFN0cnVjdHVyZVN0dWJJbmZvJik7Ci0gICAgCi0gICAgVmVjdG9yPEdldEJ5SWRBY2Nlc3MsIDI+
IG1fbGlzdDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gRU5BQkxFKEpJ
VCkKLQotI2VuZGlmIC8vIFBvbHltb3JwaGljR2V0QnlJZExpc3RfaAotCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJ
ZExpc3QuY3BwCShyZXZpc2lvbiAxODk0OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTU2
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBvbHltb3JwaGljUHV0
QnlJZExpc3QuaCIKLQotI2lmIEVOQUJMRShKSVQpCi0KLSNpbmNsdWRlICJTdHJ1Y3R1cmVTdHVi
SW5mby5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotUHV0QnlJZEFjY2VzcyBQdXRCeUlkQWNjZXNz
Ojpmcm9tU3RydWN0dXJlU3R1YkluZm8oU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewot
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBpbml0aWFsU2xvd1BhdGggPQotICAgICAgICBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0
YUNhbGxUb1Nsb3dDYXNlKTsKLSAgICAKLSAgICBQdXRCeUlkQWNjZXNzIHJlc3VsdDsKLSAgICAK
LSAgICBzd2l0Y2ggKHN0dWJJbmZvLmFjY2Vzc1R5cGUpIHsKLSAgICBjYXNlIGFjY2Vzc19wdXRf
YnlfaWRfcmVwbGFjZToKLSAgICAgICAgcmVzdWx0Lm1fdHlwZSA9IFJlcGxhY2U7Ci0gICAgICAg
IHJlc3VsdC5tX29sZFN0cnVjdHVyZS5jb3B5RnJvbShzdHViSW5mby51LnB1dEJ5SWRSZXBsYWNl
LmJhc2VPYmplY3RTdHJ1Y3R1cmUpOwotICAgICAgICByZXN1bHQubV9zdHViUm91dGluZSA9IEpJ
VFN0dWJSb3V0aW5lOjpjcmVhdGVTZWxmTWFuYWdlZFJvdXRpbmUoaW5pdGlhbFNsb3dQYXRoKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFu
c2l0aW9uX2RpcmVjdDoKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3Jt
YWw6Ci0gICAgICAgIHJlc3VsdC5tX3R5cGUgPSBUcmFuc2l0aW9uOwotICAgICAgICByZXN1bHQu
bV9vbGRTdHJ1Y3R1cmUuY29weUZyb20oc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2
aW91c1N0cnVjdHVyZSk7Ci0gICAgICAgIHJlc3VsdC5tX25ld1N0cnVjdHVyZS5jb3B5RnJvbShz
dHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZSk7Ci0gICAgICAgIHJlc3VsdC5t
X2NvbmRpdGlvblNldCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjphZG9wdFJhd1BvaW50
ZXIoCi0gICAgICAgICAgICBzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0NvbmRpdGlv
blNldCk7Ci0gICAgICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gc3R1YkluZm8uc3R1YlJvdXRp
bmU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAKLSAgICBkZWZhdWx0OgotICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi1ib29sIFB1dEJ5SWRBY2Nlc3M6OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0Ci17Ci0g
ICAgaWYgKCFtX2NvbmRpdGlvblNldC5hcmVTdGlsbExpdmUoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIAotICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgY2FzZSBSZXBsYWNlOgotICAg
ICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fb2xkU3RydWN0dXJlLmdldCgpKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBUcmFuc2l0aW9uOgot
ICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fb2xkU3RydWN0dXJlLmdldCgpKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX25ld1N0
cnVjdHVyZS5nZXQoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgU2V0dGVyOgotICAgIGNhc2UgQ3VzdG9tU2V0dGVyOgotICAgICAgICBpZiAo
IUhlYXA6OmlzTWFya2VkKG1fb2xkU3RydWN0dXJlLmdldCgpKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBp
ZiAoIW1fc3R1YlJvdXRpbmUtPnZpc2l0V2Vhayh2bSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6UG9seW1vcnBo
aWNQdXRCeUlkTGlzdCgKLSAgICBQdXRLaW5kIHB1dEtpbmQsIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbykKLSAgICA6IG1fa2luZChwdXRLaW5kKQotewotICAgIGlmIChzdHViSW5mby5hY2Nl
c3NUeXBlICE9IGFjY2Vzc191bnNldCkKLSAgICAgICAgbV9saXN0LmFwcGVuZChQdXRCeUlkQWNj
ZXNzOjpmcm9tU3RydWN0dXJlU3R1YkluZm8oc3R1YkluZm8pKTsKLX0KLQotUG9seW1vcnBoaWNQ
dXRCeUlkTGlzdCogUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6ZnJvbSgKLSAgICBQdXRLaW5kIHB1
dEtpbmQsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBpZiAoc3R1YkluZm8u
YWNjZXNzVHlwZSA9PSBhY2Nlc3NfcHV0X2J5X2lkX2xpc3QpCi0gICAgICAgIHJldHVybiBzdHVi
SW5mby51LnB1dEJ5SWRMaXN0Lmxpc3Q7Ci0gICAgCi0gICAgQVNTRVJUKHN0dWJJbmZvLmFjY2Vz
c1R5cGUgPT0gYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlCi0gICAgICAgIHx8IHN0dWJJbmZvLmFj
Y2Vzc1R5cGUgPT0gYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbAotICAgICAgICB8
fCBzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJl
Y3QKLSAgICAgICAgfHwgc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpOwotICAg
IAotICAgIFBvbHltb3JwaGljUHV0QnlJZExpc3QqIHJlc3VsdCA9Ci0gICAgICAgIG5ldyBQb2x5
bW9ycGhpY1B1dEJ5SWRMaXN0KHB1dEtpbmQsIHN0dWJJbmZvKTsKLSAgICAKLSAgICBzdHViSW5m
by5pbml0UHV0QnlJZExpc3QocmVzdWx0KTsKLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci1Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojp+UG9seW1vcnBoaWNQdXRCeUlkTGlzdCgpIHsgfQot
Ci1ib29sIFBvbHltb3JwaGljUHV0QnlJZExpc3Q6OmlzRnVsbCgpIGNvbnN0Ci17Ci0gICAgQVNT
RVJUKHNpemUoKSA8PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpOwotICAgIHJldHVybiBz
aXplKCkgPT0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFOwotfQotCi1ib29sIFBvbHltb3Jw
aGljUHV0QnlJZExpc3Q6OmlzQWxtb3N0RnVsbCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHNpemUo
KSA8PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpOwotICAgIHJldHVybiBzaXplKCkgPj0g
UE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIC0gMTsKLX0KLQotdm9pZCBQb2x5bW9ycGhpY1B1
dEJ5SWRMaXN0OjphZGRBY2Nlc3MoY29uc3QgUHV0QnlJZEFjY2VzcyYgcHV0QnlJZEFjY2VzcykK
LXsKLSAgICBBU1NFUlQoIWlzRnVsbCgpKTsKLSAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgcmVz
aXppbmcgb3B0aW1pemVzIGZvciBzcGFjZSwgbm90IHRpbWUuCi0gICAgbV9saXN0LnJlc2l6ZVRv
Rml0KG1fbGlzdC5zaXplKCkgKyAxKTsKLSAgICBtX2xpc3QubGFzdCgpID0gcHV0QnlJZEFjY2Vz
czsKLX0KLQotYm9vbCBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojp2aXNpdFdlYWsoVk0mIHZtKSBj
b25zdAotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkgewotICAg
ICAgICBpZiAoIWF0KGkpLnZpc2l0V2Vhayh2bSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2Vu
ZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgJKHJldmlzaW9uIDE4OTQ5MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMjE2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBQb2x5bW9ycGhp
Y1B1dEJ5SWRMaXN0X2gKLSNkZWZpbmUgUG9seW1vcnBoaWNQdXRCeUlkTGlzdF9oCi0KLSNpZiBF
TkFCTEUoSklUKQotCi0jaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgotI2luY2x1ZGUgIk1hY3JvQXNz
ZW1ibGVyLmgiCi0jaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIKLSNpbmNs
dWRlICJPcGNvZGUuaCIKLSNpbmNsdWRlICJQdXRLaW5kLmgiCi0jaW5jbHVkZSAiUHV0UHJvcGVy
dHlTbG90LmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlLmgiCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgQ29kZUJsb2NrOwotc3RydWN0IFN0cnVjdHVy
ZVN0dWJJbmZvOwotCi1jbGFzcyBQdXRCeUlkQWNjZXNzIHsKLXB1YmxpYzoKLSAgICBlbnVtIEFj
Y2Vzc1R5cGUgewotICAgICAgICBJbnZhbGlkLAotICAgICAgICBUcmFuc2l0aW9uLAotICAgICAg
ICBSZXBsYWNlLAotICAgICAgICBTZXR0ZXIsCi0gICAgICAgIEN1c3RvbVNldHRlcgotICAgIH07
Ci0gICAgCi0gICAgUHV0QnlJZEFjY2VzcygpCi0gICAgICAgIDogbV90eXBlKEludmFsaWQpCi0g
ICAgewotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgUHV0QnlJZEFjY2VzcyB0cmFuc2l0aW9uKAot
ICAgICAgICBWTSYgdm0sCi0gICAgICAgIEpTQ2VsbCogb3duZXIsCi0gICAgICAgIFN0cnVjdHVy
ZSogb2xkU3RydWN0dXJlLAotICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICAg
ICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwKLSAgICAg
ICAgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUpCi0gICAgewotICAgICAg
ICBQdXRCeUlkQWNjZXNzIHJlc3VsdDsKLSAgICAgICAgcmVzdWx0Lm1fdHlwZSA9IFRyYW5zaXRp
b247Ci0gICAgICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBvbGRTdHJ1
Y3R1cmUpOwotICAgICAgICByZXN1bHQubV9uZXdTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgbmV3
U3RydWN0dXJlKTsKLSAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0
OwotICAgICAgICByZXN1bHQubV9jdXN0b21TZXR0ZXIgPSAwOwotICAgICAgICByZXN1bHQubV9z
dHViUm91dGluZSA9IHN0dWJSb3V0aW5lOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0K
LQotICAgIHN0YXRpYyBQdXRCeUlkQWNjZXNzIHJlcGxhY2UoCi0gICAgICAgIFZNJiB2bSwKLSAg
ICAgICAgSlNDZWxsKiBvd25lciwKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCi0gICAg
ICAgIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lKQotICAgIHsKLSAgICAg
ICAgUHV0QnlJZEFjY2VzcyByZXN1bHQ7Ci0gICAgICAgIHJlc3VsdC5tX3R5cGUgPSBSZXBsYWNl
OwotICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJl
KTsKLSAgICAgICAgcmVzdWx0Lm1fY3VzdG9tU2V0dGVyID0gMDsKLSAgICAgICAgcmVzdWx0Lm1f
c3R1YlJvdXRpbmUgPSBzdHViUm91dGluZTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9
Ci0KLQotICAgIHN0YXRpYyBQdXRCeUlkQWNjZXNzIHNldHRlcigKLSAgICAgICAgVk0mIHZtLAot
ICAgICAgICBKU0NlbGwqIG93bmVyLAotICAgICAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCi0g
ICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLAotICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LAotICAgICAgICBQdXRQcm9wZXJ0eVNsb3Q6OlB1
dFZhbHVlRnVuYyBjdXN0b21TZXR0ZXIsCi0gICAgICAgIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRp
bmU+IHN0dWJSb3V0aW5lKQotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoYWNjZXNzVHlw
ZSA9PSBTZXR0ZXIgfHwgYWNjZXNzVHlwZSA9PSBDdXN0b21TZXR0ZXIpOwotICAgICAgICBQdXRC
eUlkQWNjZXNzIHJlc3VsdDsKLSAgICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlLnNldCh2bSwg
b3duZXIsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHJlc3VsdC5tX3R5cGUgPSBhY2Nlc3NUeXBlOwot
ICAgICAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7Ci0gICAgICAgIHJl
c3VsdC5tX2N1c3RvbVNldHRlciA9IGN1c3RvbVNldHRlcjsKLSAgICAgICAgcmVzdWx0Lm1fc3R1
YlJvdXRpbmUgPSBzdHViUm91dGluZTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0g
ICAgCi0gICAgc3RhdGljIFB1dEJ5SWRBY2Nlc3MgZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFN0cnVj
dHVyZVN0dWJJbmZvJik7Ci0gICAgCi0gICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1f
dHlwZSAhPSBJbnZhbGlkOyB9Ci0gICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAh
aXNTZXQoKTsgfQotICAgIAotICAgIEFjY2Vzc1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dHlwZTsgfQotICAgIAotICAgIGJvb2wgaXNUcmFuc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90
eXBlID09IFRyYW5zaXRpb247IH0KLSAgICBib29sIGlzUmVwbGFjZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdHlwZSA9PSBSZXBsYWNlOyB9Ci0gICAgYm9vbCBpc1NldHRlcigpIGNvbnN0IHsgcmV0dXJu
IG1fdHlwZSA9PSBTZXR0ZXI7IH0KLSAgICBib29sIGlzQ3VzdG9tKCkgY29uc3QgeyByZXR1cm4g
bV90eXBlID09IEN1c3RvbVNldHRlcjsgfQotICAgIAotICAgIFN0cnVjdHVyZSogb2xkU3RydWN0
dXJlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIC8vIFVzaW5nIHRoaXMgaW5zdGVhZCBvZiBpc1Nl
dCgpIHRvIG1ha2UgdGhpcyBhc3NlcnRpb24gcm9idXN0IGFnYWluc3QgdGhlIHBvc3NpYmlsaXR5
Ci0gICAgICAgIC8vIG9mIGFkZGl0aW9uYWwgYWNjZXNzIHR5cGVzIGJlaW5nIGFkZGVkLgotICAg
ICAgICBBU1NFUlQoaXNUcmFuc2l0aW9uKCkgfHwgaXNSZXBsYWNlKCkgfHwgaXNTZXR0ZXIoKSB8
fCBpc0N1c3RvbSgpKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZS5n
ZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdAotICAg
IHsKLSAgICAgICAgQVNTRVJUKGlzUmVwbGFjZSgpIHx8IGlzU2V0dGVyKCkgfHwgaXNDdXN0b20o
KSk7Ci0gICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZS5nZXQoKTsKLSAgICB9Ci0gICAgCi0g
ICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJU
KGlzVHJhbnNpdGlvbigpKTsKLSAgICAgICAgcmV0dXJuIG1fbmV3U3RydWN0dXJlLmdldCgpOwot
ICAgIH0KLSAgICAKLSAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0
aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0KLSAgICAKLSAgICBKSVRT
dHViUm91dGluZSogc3R1YlJvdXRpbmUoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlz
VHJhbnNpdGlvbigpIHx8IGlzUmVwbGFjZSgpIHx8IGlzU2V0dGVyKCkgfHwgaXNDdXN0b20oKSk7
Ci0gICAgICAgIHJldHVybiBtX3N0dWJSb3V0aW5lLmdldCgpOwotICAgIH0KLQotICAgIFB1dFBy
b3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jIGN1c3RvbVNldHRlcigpIGNvbnN0Ci0gICAgewotICAg
ICAgICBBU1NFUlQoaXNDdXN0b20oKSk7Ci0gICAgICAgIHJldHVybiBtX2N1c3RvbVNldHRlcjsK
LSAgICB9Ci0KLSAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OwotICAgIAotcHJpdmF0ZToK
LSAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOwotICAgIAotICAgIEFjY2Vzc1R5cGUgbV90eXBl
OwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fb2xkU3RydWN0dXJlOwotICAgIFdyaXRl
QmFycmllcjxTdHJ1Y3R1cmU+IG1fbmV3U3RydWN0dXJlOwotICAgIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OwotICAgIFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVG
dW5jIG1fY3VzdG9tU2V0dGVyOwotICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gbV9zdHViUm91
dGluZTsKLX07Ci0KLWNsYXNzIFBvbHltb3JwaGljUHV0QnlJZExpc3QgewotICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIC8vIEVpdGhlciBjcmVhdGVzIGEgbmV3IHBv
bHltb3JwaGljIHB1dCBsaXN0LCBvciByZXR1cm5zIHRoZSBvbmUgdGhhdCBpcyBhbHJlYWR5Ci0g
ICAgLy8gaW4gcGxhY2UuCi0gICAgc3RhdGljIFBvbHltb3JwaGljUHV0QnlJZExpc3QqIGZyb20o
UHV0S2luZCwgU3RydWN0dXJlU3R1YkluZm8mKTsKLSAgICAKLSAgICB+UG9seW1vcnBoaWNQdXRC
eUlkTGlzdCgpOwotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdXJyZW50U2xvd1Bh
dGhUYXJnZXQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbGlzdC5sYXN0KCkuc3R1
YlJvdXRpbmUoKS0+Y29kZSgpLmNvZGUoKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBhZGRBY2Nl
c3MoY29uc3QgUHV0QnlJZEFjY2VzcyYpOwotICAgIAotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0
IHsgcmV0dXJuIG1fbGlzdC5pc0VtcHR5KCk7IH0KLSAgICB1bnNpZ25lZCBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9saXN0LnNpemUoKTsgfQotICAgIGJvb2wgaXNGdWxsKCkgY29uc3Q7Ci0gICAg
Ym9vbCBpc0FsbW9zdEZ1bGwoKSBjb25zdDsgLy8gVHJ1ZSBpZiBhZGRpbmcgYW4gZWxlbWVudCB3
b3VsZCBtYWtlIGlzRnVsbCgpIHRydWUuCi0gICAgY29uc3QgUHV0QnlJZEFjY2VzcyYgYXQodW5z
aWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9saXN0W2ldOyB9Ci0gICAgY29uc3QgUHV0QnlJZEFj
Y2VzcyYgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2xpc3RbaV07IH0K
LSAgICAKLSAgICBQdXRLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KLSAgICAK
LSAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OwotICAgIAotcHJpdmF0ZToKLSAgICBmcmll
bmQgY2xhc3MgQ29kZUJsb2NrOwotICAgIAotICAgIC8vIEluaXRpYWxpemUgZnJvbSBhIHN0dWIg
aW5mbzsgdGhpcyB3aWxsIHBsYWNlIG9uZSBlbGVtZW50IGluIHRoZSBsaXN0IGFuZCBpdCB3aWxs
Ci0gICAgLy8gYmUgY3JlYXRlZCBieSBjb252ZXJ0aW5nIHRoZSBzdHViIGluZm8ncyBwdXQgYnkg
aWQgYWNjZXNzIGluZm9ybWF0aW9uIGludG8gb3VyCi0gICAgLy8gUHV0QnlJZEFjY2Vzcy4KLSAg
ICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KFB1dEtpbmQsIFN0cnVjdHVyZVN0dWJJbmZvJik7Ci0K
LSAgICBWZWN0b3I8UHV0QnlJZEFjY2VzcywgMj4gbV9saXN0OwotICAgIFB1dEtpbmQgbV9raW5k
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotCi0j
ZW5kaWYgLy8gUG9seW1vcnBoaWNQdXRCeUlkTGlzdF9oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDE4OTQ5
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjYsMTMgKzI2LDEyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiUHV0QnlJZFN0YXR1cy5oIgogCi0jaW5jbHVkZSAiQWNjZXNzb3JDYWxsSklUU3R1
YlJvdXRpbmUuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJDb21wbGV4R2V0
U3RhdHVzLmgiCiAjaW5jbHVkZSAiTExJbnREYXRhLmgiCiAjaW5jbHVkZSAiTG93TGV2ZWxJbnRl
cnByZXRlci5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJQb2x5bW9ycGhp
Y1B1dEJ5SWRMaXN0LmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKICNpbmNsdWRl
ICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVDaGFpbi5oIgogI2luY2x1ZGUgPHd0
Zi9MaXN0RHVtcC5oPgpAQCAtMTU0LDY2ICsxNTMsNDMgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlk
U3RhdHVzOjpjb21wdXRlRm9yUwogICAgIGlmICghc3R1YkluZm8tPnNlZW4pCiAgICAgICAgIHJl
dHVybiBQdXRCeUlkU3RhdHVzKCk7CiAgICAgCi0gICAgc3dpdGNoIChzdHViSW5mby0+YWNjZXNz
VHlwZSkgewotICAgIGNhc2UgYWNjZXNzX3Vuc2V0OgorICAgIHN3aXRjaCAoc3R1YkluZm8tPmNh
Y2hlVHlwZSkgeworICAgIGNhc2UgQ2FjaGVUeXBlOjpVbnNldDoKICAgICAgICAgLy8gSWYgdGhl
IEpJVCBzYXcgaXQgYnV0IGRpZG4ndCBvcHRpbWl6ZSBpdCwgdGhlbiBhc3N1bWUgdGhhdCB0aGlz
IHRha2VzIHNsb3cgcGF0aC4KICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93
UGF0aCk7CiAgICAgICAgIAotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlOiB7Cisg
ICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOiB7CiAgICAgICAgIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCA9Ci0gICAgICAgICAgICBzdHViSW5mby0+dS5wdXRCeUlkUmVwbGFjZS5iYXNl
T2JqZWN0U3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKKyAgICAgICAgICAgIHN0dWJJ
bmZvLT51LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQp
OwogICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7CiAgICAgICAgICAgICByZXR1
cm4gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoCi0gICAgICAgICAgICAgICAgc3R1YkluZm8tPnUu
cHV0QnlJZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgb2Zmc2V0KTsKKyAgICAg
ICAgICAgICAgICBzdHViSW5mby0+dS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgp
LCBvZmZzZXQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2Vz
U2xvd1BhdGgpOwogICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3Ry
YW5zaXRpb25fbm9ybWFsOgotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2Rp
cmVjdDogewotICAgICAgICBBU1NFUlQoc3R1YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24ucHJl
dmlvdXNTdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVk
KCkpOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSAKLSAgICAgICAgICAgIHN0dWJJ
bmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7
Ci0gICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKLSAgICAgICAgICAgIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldCA9IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0Ojpmcm9tUmF3UG9pbnRlcigKLSAgICAgICAgICAgICAgICBzdHViSW5mby0+dS5wdXRC
eUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQpOwotICAgICAgICAgICAgaWYgKCFjb25kaXRp
b25TZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgICAgICAgICByZXR1cm4gUHV0QnlJ
ZFZhcmlhbnQ6OnRyYW5zaXRpb24oCi0gICAgICAgICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJ
ZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUuZ2V0KCksCi0gICAgICAgICAgICAgICAgc3R1
YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLmdldCgpLAotICAgICAgICAgICAg
ICAgIGNvbmRpdGlvblNldCwgb2Zmc2V0KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICB9Ci0gICAgICAgIAotICAgIGNhc2UgYWNj
ZXNzX3B1dF9ieV9pZF9saXN0OiB7Ci0gICAgICAgIFBvbHltb3JwaGljUHV0QnlJZExpc3QqIGxp
c3QgPSBzdHViSW5mby0+dS5wdXRCeUlkTGlzdC5saXN0OworICAgIGNhc2UgQ2FjaGVUeXBlOjpT
dHViOiB7CisgICAgICAgIFBvbHltb3JwaGljQWNjZXNzKiBsaXN0ID0gc3R1YkluZm8tPnUuc3R1
YjsKICAgICAgICAgCiAgICAgICAgIFB1dEJ5SWRTdGF0dXMgcmVzdWx0OwogICAgICAgICByZXN1
bHQubV9zdGF0ZSA9IFNpbXBsZTsKICAgICAgICAgCiAgICAgICAgIFN0YXRlIHNsb3dQYXRoU3Rh
dGUgPSBUYWtlc1Nsb3dQYXRoOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlz
dC0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGNvbnN0IFB1dEJ5SWRBY2Nlc3MmIGFjY2Vz
cyA9IGxpc3QtPmF0KGkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzd2l0Y2ggKGFjY2Vz
cy50eXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgUHV0QnlJZEFjY2Vzczo6U2V0dGVyOgotICAg
ICAgICAgICAgY2FzZSBQdXRCeUlkQWNjZXNzOjpDdXN0b21TZXR0ZXI6CisgICAgICAgICAgICBj
b25zdCBBY2Nlc3NDYXNlJiBhY2Nlc3MgPSBsaXN0LT5hdChpKTsKKyAgICAgICAgICAgIGlmIChh
Y2Nlc3MuZG9lc0NhbGxzKCkpCiAgICAgICAgICAgICAgICAgc2xvd1BhdGhTdGF0ZSA9IE1ha2Vz
Q2FsbHM7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+c2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgICAgIGNvbnN0IFB1dEJ5SWRBY2Nlc3MmIGFjY2VzcyA9IGxpc3QtPmF0KGkpOworICAg
ICAgICAgICAgY29uc3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0gbGlzdC0+YXQoaSk7CisgICAgICAg
ICAgICBpZiAoYWNjZXNzLnZpYVByb3h5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFB1dEJ5
SWRWYXJpYW50IHZhcmlhbnQ7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHN3aXRjaCAoYWNj
ZXNzLnR5cGUoKSkgewotICAgICAgICAgICAgY2FzZSBQdXRCeUlkQWNjZXNzOjpSZXBsYWNlOiB7
CisgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OlJlcGxhY2U6IHsKICAgICAgICAgICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFjY2Vzcy5zdHJ1Y3R1cmUoKTsKICAgICAgICAgICAg
ICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1
aWQpOwogICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQpAQCAtMjIy
LDcgKzE5OCw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIGNhc2UgUHV0QnlJZEFjY2Vzczo6VHJhbnNpdGlvbjogeworICAgICAgICAgICAg
Y2FzZSBBY2Nlc3NDYXNlOjpUcmFuc2l0aW9uOiB7CiAgICAgICAgICAgICAgICAgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0ID0KICAgICAgICAgICAgICAgICAgICAgYWNjZXNzLm5ld1N0cnVjdHVyZSgp
LT5nZXRDb25jdXJyZW50bHkodWlkKTsKICAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRPZmZz
ZXQob2Zmc2V0KSkKQEAgLTIzMSwxMSArMjA3LDExIEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0
YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5zdHJ1
Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSk7CiAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5
SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAotICAgICAgICAgICAgICAgICAgICBhY2Nlc3Mub2xkU3Ry
dWN0dXJlKCksIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOwor
ICAgICAgICAgICAgICAgICAgICBhY2Nlc3Muc3RydWN0dXJlKCksIGFjY2Vzcy5uZXdTdHJ1Y3R1
cmUoKSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBQdXRCeUlkQWNj
ZXNzOjpTZXR0ZXI6IHsKKyAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6U2V0dGVyOiB7CiAg
ICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBhY2Nlc3Muc3RydWN0dXJlKCk7
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgQ29tcGxleEdldFN0YXR1cyBjb21w
bGV4R2V0U3RhdHVzID0gQ29tcGxleEdldFN0YXR1czo6Y29tcHV0ZUZvcigKQEAgLTI0OSwxMiAr
MjI1LDEyIEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSk7CiAgICAg
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6
SW5saW5lYWJsZTogewotICAgICAgICAgICAgICAgICAgICBBY2Nlc3NvckNhbGxKSVRTdHViUm91
dGluZSogc3R1YiA9IHN0YXRpY19jYXN0PEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lKj4oCi0g
ICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3Muc3R1YlJvdXRpbmUoKSk7CisgICAgICAgICAg
ICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gYWNjZXNzLmNhbGxMaW5rSW5m
bygpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoY2FsbExpbmtJbmZvKTsKICAgICAgICAg
ICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1
cyA9CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfdW5pcXVlPENhbGxMaW5rU3Rh
dHVzPigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYWxsTGlua1N0YXR1czo6Y29tcHV0
ZUZvcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJs
b2NrLCAqc3R1Yi0+bV9jYWxsTGlua0luZm8sIGNhbGxFeGl0U2l0ZURhdGEpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJsb2NrLCAqY2FsbExpbmtJ
bmZvLCBjYWxsRXhpdFNpdGVEYXRhKSk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6OnNldHRlcigKICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdHVyZSwgY29tcGxleEdldFN0YXR1cy5vZmZzZXQoKSwgY29tcGxl
eEdldFN0YXR1cy5jb25kaXRpb25TZXQoKSwKQEAgLTI2Myw3ICsyMzksNyBAQCBQdXRCeUlkU3Rh
dHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFB1dEJ5SWRB
Y2Nlc3M6OkN1c3RvbVNldHRlcjoKKyAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6Q3VzdG9t
U2V0dGVyOgogICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE1ha2VzQ2FsbHMp
OwogCiAgICAgICAgICAgICBkZWZhdWx0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShyZXZpc2lvbiAxODk0OTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw4ICsyNyw3IEBACiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1
YkluZm8uaCIKIAogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCi0jaW5jbHVkZSAiUG9seW1vcnBoaWNH
ZXRCeUlkTGlzdC5oIgotI2luY2x1ZGUgIlBvbHltb3JwaGljUHV0QnlJZExpc3QuaCIKKyNpbmNs
dWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgogI2luY2x1ZGUgIlJlcGF0Y2guaCIKIAogbmFtZXNw
YWNlIEpTQyB7CkBAIC0zNiwzNyArMzUsNTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWYgRU5BQkxF
KEpJVCkKIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmRlcmVmKCkKIHsKLSAgICBzd2l0Y2ggKGFj
Y2Vzc1R5cGUpIHsKLSAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfbGlzdDogewotICAgICAgICBk
ZWxldGUgdS5nZXRCeUlkTGlzdC5saXN0OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNh
c2UgYWNjZXNzX3B1dF9ieV9pZF9saXN0OgotICAgICAgICBkZWxldGUgdS5wdXRCeUlkTGlzdC5s
aXN0OworICAgIHN3aXRjaCAoY2FjaGVUeXBlKSB7CisgICAgY2FzZSBDYWNoZVR5cGU6OlN0dWI6
CisgICAgICAgIGRlbGV0ZSB1LnN0dWI7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIGFjY2Vz
c19pbl9saXN0OiB7Ci0gICAgICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcG9s
eW1vcnBoaWNTdHJ1Y3R1cmVzID0gdS5pbkxpc3Quc3RydWN0dXJlTGlzdDsKLSAgICAgICAgZGVs
ZXRlIHBvbHltb3JwaGljU3RydWN0dXJlczsKKyAgICBjYXNlIENhY2hlVHlwZTo6VW5zZXQ6Cisg
ICAgY2FzZSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxmOgorICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRC
eUlkUmVwbGFjZToKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBjYXNlIGFjY2Vzc19wdXRf
YnlfaWRfdHJhbnNpdGlvbl9ub3JtYWw6Ci0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5z
aXRpb25fZGlyZWN0OgotICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6YWRvcHRS
YXdQb2ludGVyKHUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0KTsKLSAgICAgICAg
dS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQgPSBudWxscHRyOwotICAgICAgICBy
ZXR1cm47Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGY6Ci0gICAgY2FzZSBhY2Nlc3Nf
cHV0X2J5X2lkX3JlcGxhY2U6Ci0gICAgY2FzZSBhY2Nlc3NfdW5zZXQ6Ci0gICAgICAgIC8vIFRo
ZXNlIGluc3RydWN0aW9ucyBkb24ndCBoYXZlIHRvIHJlbGVhc2UgYW55IGFsbG9jYXRlZCBtZW1v
cnkKLSAgICAgICAgcmV0dXJuOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIFN0cnVjdHVyZVN0dWJJbmZvOjphZGRBY2Nl
c3NDYXNlKAorICAgIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IElkZW50aWZp
ZXImIGlkZW50LCBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gYWNjZXNzQ2FzZSkKK3sKKyAg
ICBpZiAoIWFjY2Vzc0Nhc2UpCisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIo
KTsKKyAgICAKKyAgICBpZiAoY2FjaGVUeXBlID09IENhY2hlVHlwZTo6U3R1YikKKyAgICAgICAg
cmV0dXJuIHUuc3R1Yi0+cmVnZW5lcmF0ZVdpdGhDYXNlKHZtLCBjb2RlQmxvY2ssICp0aGlzLCBp
ZGVudCwgc3RkOjptb3ZlKGFjY2Vzc0Nhc2UpKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxQb2x5
bW9ycGhpY0FjY2Vzcz4gYWNjZXNzID0gc3RkOjptYWtlX3VuaXF1ZTxQb2x5bW9ycGhpY0FjY2Vz
cz4oKTsKKyAgICAKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+PiBhY2Nl
c3NDYXNlczsKKyAgICAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gcHJldmlvdXND
YXNlID0KKyAgICAgICAgQWNjZXNzQ2FzZTo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKHZtLCBjb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCAqdGhpcyk7CisgICAgaWYgKHByZXZpb3VzQ2FzZSkK
KyAgICAgICAgYWNjZXNzQ2FzZXMuYXBwZW5kKHN0ZDo6bW92ZShwcmV2aW91c0Nhc2UpKTsKKwor
ICAgIGFjY2Vzc0Nhc2VzLmFwcGVuZChzdGQ6Om1vdmUoYWNjZXNzQ2FzZSkpOworCisgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyIHJlc3VsdCA9CisgICAgICAgIGFjY2Vzcy0+cmVnZW5lcmF0ZVdp
dGhDYXNlcyh2bSwgY29kZUJsb2NrLCAqdGhpcywgaWRlbnQsIHN0ZDo6bW92ZShhY2Nlc3NDYXNl
cykpOworCisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIoKTsKKworICAgIGNhY2hlVHlwZSA9IENhY2hlVHlwZTo6U3R1YjsKKyAgICB1LnN0dWIg
PSBhY2Nlc3MucmVsZWFzZSgpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHZvaWQgU3RydWN0
dXJlU3R1YkluZm86OnJlc2V0KENvZGVCbG9jayogY29kZUJsb2NrKQogewotICAgIGlmIChhY2Nl
c3NUeXBlID09IGFjY2Vzc191bnNldCkKKyAgICBpZiAoY2FjaGVUeXBlID09IENhY2hlVHlwZTo6
VW5zZXQpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9T
UigpKSB7CkBAIC03NCw2MCArODksMzggQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQo
Q29kZUJsb2NrKgogICAgICAgICAvLyBvZiB0aGUgQ29kZUJsb2NrLgogICAgICAgICBkYXRhTG9n
KCJDbGVhcmluZyBzdHJ1Y3R1cmUgY2FjaGUgKGtpbmQgIiwgc3RhdGljX2Nhc3Q8aW50PihhY2Nl
c3NUeXBlKSwgIikgaW4gIiwgUmF3UG9pbnRlcihjb2RlQmxvY2spLCAiLlxuIik7CiAgICAgfQot
ICAgIAotICAgIGlmIChpc0dldEJ5SWRBY2Nlc3Moc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oYWNj
ZXNzVHlwZSkpKQorCisgICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7CisgICAgY2FzZSBBY2Nlc3NU
eXBlOjpHZXQ6CiAgICAgICAgIHJlc2V0R2V0QnlJRChjb2RlQmxvY2ssICp0aGlzKTsKLSAgICBl
bHNlIGlmIChpc1B1dEJ5SWRBY2Nlc3Moc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oYWNjZXNzVHlw
ZSkpKQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dDoKICAgICAgICAg
cmVzZXRQdXRCeUlEKGNvZGVCbG9jaywgKnRoaXMpOwotICAgIGVsc2UgewotICAgICAgICBSRUxF
QVNFX0FTU0VSVChpc0luQWNjZXNzKHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KGFjY2Vzc1R5cGUp
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW46CiAgICAgICAgIHJl
c2V0SW4oY29kZUJsb2NrLCAqdGhpcyk7CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAKICAg
ICBkZXJlZigpOwotICAgIGFjY2Vzc1R5cGUgPSBhY2Nlc3NfdW5zZXQ7Ci0gICAgc3R1YlJvdXRp
bmUgPSBudWxscHRyOwotICAgIHdhdGNocG9pbnRzID0gbnVsbHB0cjsKKyAgICBjYWNoZVR5cGUg
PSBDYWNoZVR5cGU6OlVuc2V0OwogfQogCiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdl
YWtSZWZlcmVuY2VzKENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIFZNJiB2bSA9ICpjb2Rl
QmxvY2stPnZtKCk7Ci0gICAgCi0gICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7Ci0gICAgY2FzZSBh
Y2Nlc3NfZ2V0X2J5X2lkX3NlbGY6Ci0gICAgICAgIGlmIChIZWFwOjppc01hcmtlZCh1LmdldEJ5
SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCkpKQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfbGlzdDogewotICAgICAg
ICBpZiAodS5nZXRCeUlkTGlzdC5saXN0LT52aXNpdFdlYWsodm0pKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3Ry
YW5zaXRpb25fbm9ybWFsOgotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2Rp
cmVjdDoKLSAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKHUucHV0QnlJZFRyYW5zaXRpb24ucHJl
dmlvdXNTdHJ1Y3R1cmUuZ2V0KCkpCi0gICAgICAgICAgICAmJiBIZWFwOjppc01hcmtlZCh1LnB1
dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5nZXQoKSkKLSAgICAgICAgICAgICYmIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0Ojpmcm9tUmF3UG9pbnRlcih1LnB1dEJ5SWRUcmFuc2l0aW9uLnJh
d0NvbmRpdGlvblNldCkuYXJlU3RpbGxMaXZlKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlOgotICAgICAgICBp
ZiAoSGVhcDo6aXNNYXJrZWQodS5wdXRCeUlkUmVwbGFjZS5iYXNlT2JqZWN0U3RydWN0dXJlLmdl
dCgpKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBhY2Nl
c3NfcHV0X2J5X2lkX2xpc3Q6Ci0gICAgICAgIGlmICh1LnB1dEJ5SWRMaXN0Lmxpc3QtPnZpc2l0
V2Vhayh2bSkpCisKKyAgICBzd2l0Y2ggKGNhY2hlVHlwZSkgeworICAgIGNhc2UgQ2FjaGVUeXBl
OjpHZXRCeUlkU2VsZjoKKyAgICBjYXNlIENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2U6CisgICAg
ICAgIGlmIChIZWFwOjppc01hcmtlZCh1LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0
KCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIGFjY2Vz
c19pbl9saXN0OiB7Ci0gICAgICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcG9s
eW1vcnBoaWNTdHJ1Y3R1cmVzID0gdS5pbkxpc3Quc3RydWN0dXJlTGlzdDsKLSAgICAgICAgaWYg
KHBvbHltb3JwaGljU3RydWN0dXJlcy0+dmlzaXRXZWFrKHUuaW5MaXN0Lmxpc3RTaXplKSkKKyAg
ICBjYXNlIENhY2hlVHlwZTo6U3R1YjoKKyAgICAgICAgaWYgKHUuc3R1Yi0+dmlzaXRXZWFrKHZt
KSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgYnJlYWs7Ci0gICAgfQogICAgIGRlZmF1
bHQ6Ci0gICAgICAgIC8vIFRoZSByZXN0IG9mIHRoZSBpbnN0cnVjdGlvbnMgZG9uJ3QgcmVxdWly
ZSByZWZlcmVuY2VzLCBzbyB0aGVyZSBpcyBubyBuZWVkIHRvCi0gICAgICAgIC8vIGRvIGFueXRo
aW5nLgogICAgICAgICByZXR1cm47CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2aXNpb24gMTg5NDkz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxl
ci5oIgogI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiCiAjaW5jbHVkZSAi
T3Bjb2RlLmgiCi0jaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0LmgiCisj
aW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKICNpbmNsdWRlICJSZWdpc3RlclNldC5oIgog
I2luY2x1ZGUgIlNwaWxsUmVnaXN0ZXJzTW9kZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgpA
QCAtNDIsNTcgKzQyLDI1IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKEpJVCkKIAot
Y2xhc3MgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDsKLWNsYXNzIFBvbHltb3JwaGljUHV0QnlJZExp
c3Q7CitjbGFzcyBQb2x5bW9ycGhpY0FjY2VzczsKIAotZW51bSBBY2Nlc3NUeXBlIHsKLSAgICBh
Y2Nlc3NfZ2V0X2J5X2lkX3NlbGYsCi0gICAgYWNjZXNzX2dldF9ieV9pZF9saXN0LAotICAgIGFj
Y2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWwsCi0gICAgYWNjZXNzX3B1dF9ieV9pZF90
cmFuc2l0aW9uX2RpcmVjdCwKLSAgICBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2UsCi0gICAgYWNj
ZXNzX3B1dF9ieV9pZF9saXN0LAotICAgIGFjY2Vzc191bnNldCwKLSAgICBhY2Nlc3NfaW5fbGlz
dAorZW51bSBjbGFzcyBBY2Nlc3NUeXBlIDogaW50OF90IHsKKyAgICBHZXQsCisgICAgUHV0LAor
ICAgIEluCiB9OwogCi1pbmxpbmUgYm9vbCBpc0dldEJ5SWRBY2Nlc3MoQWNjZXNzVHlwZSBhY2Nl
c3NUeXBlKQotewotICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgewotICAgIGNhc2UgYWNjZXNzX2dl
dF9ieV9pZF9zZWxmOgotICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9saXN0OgotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
fQotICAgIAotaW5saW5lIGJvb2wgaXNQdXRCeUlkQWNjZXNzKEFjY2Vzc1R5cGUgYWNjZXNzVHlw
ZSkKLXsKLSAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlf
aWRfdHJhbnNpdGlvbl9ub3JtYWw6Ci0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRp
b25fZGlyZWN0OgotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlOgotICAgIGNhc2Ug
YWNjZXNzX3B1dF9ieV9pZF9saXN0OgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0
OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1pbmxpbmUgYm9vbCBpc0luQWNj
ZXNzKEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSkKLXsKLSAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsK
LSAgICBjYXNlIGFjY2Vzc19pbl9saXN0OgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZh
dWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQorZW51bSBjbGFzcyBDYWNoZVR5
cGUgOiBpbnQ4X3QgeworICAgIFVuc2V0LAorICAgIEdldEJ5SWRTZWxmLAorICAgIFB1dEJ5SWRS
ZXBsYWNlLAorICAgIFN0dWIKK307CiAKIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbyB7Ci0gICAg
U3RydWN0dXJlU3R1YkluZm8oKQotICAgICAgICA6IGFjY2Vzc1R5cGUoYWNjZXNzX3Vuc2V0KQor
ICAgIFN0cnVjdHVyZVN0dWJJbmZvKEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSkKKyAgICAgICAgOiBh
Y2Nlc3NUeXBlKGFjY2Vzc1R5cGUpCisgICAgICAgICwgY2FjaGVUeXBlKENhY2hlVHlwZTo6VW5z
ZXQpCiAgICAgICAgICwgc2VlbihmYWxzZSkKICAgICAgICAgLCByZXNldEJ5R0MoZmFsc2UpCiAg
ICAgICAgICwgdG9va1Nsb3dQYXRoKGZhbHNlKQpAQCAtMTAwLDUzICs2OCwzMSBAQCBzdHJ1Y3Qg
U3RydWN0dXJlU3R1YkluZm8gewogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIGluaXRHZXRCeUlk
U2VsZihWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVy
ZSkKKyAgICB2b2lkIGluaXRHZXRCeUlkU2VsZihWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVj
dHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogICAgIHsK
LSAgICAgICAgYWNjZXNzVHlwZSA9IGFjY2Vzc19nZXRfYnlfaWRfc2VsZjsKLQotICAgICAgICB1
LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgYmFzZU9iamVj
dFN0cnVjdHVyZSk7Ci0gICAgfQorICAgICAgICBjYWNoZVR5cGUgPSBDYWNoZVR5cGU6OkdldEJ5
SWRTZWxmOwogCi0gICAgdm9pZCBpbml0R2V0QnlJZExpc3QoUG9seW1vcnBoaWNHZXRCeUlkTGlz
dCogbGlzdCkKLSAgICB7Ci0gICAgICAgIGFjY2Vzc1R5cGUgPSBhY2Nlc3NfZ2V0X2J5X2lkX2xp
c3Q7Ci0gICAgICAgIHUuZ2V0QnlJZExpc3QubGlzdCA9IGxpc3Q7CisgICAgICAgIHUuYnlJZFNl
bGYuYmFzZU9iamVjdFN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBiYXNlT2JqZWN0U3RydWN0dXJl
KTsKKyAgICAgICAgdS5ieUlkU2VsZi5vZmZzZXQgPSBvZmZzZXQ7CiAgICAgfQogCi0gICAgLy8g
UHV0QnlJZCoKLQotICAgIHZvaWQgaW5pdFB1dEJ5SWRUcmFuc2l0aW9uKFZNJiB2bSwgSlNDZWxs
KiBvd25lciwgU3RydWN0dXJlKiBwcmV2aW91c1N0cnVjdHVyZSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldCwgYm9vbCBpc0RpcmVj
dCkKKyAgICB2b2lkIGluaXRQdXRCeUlkUmVwbGFjZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0
cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogICAg
IHsKLSAgICAgICAgaWYgKGlzRGlyZWN0KQotICAgICAgICAgICAgYWNjZXNzVHlwZSA9IGFjY2Vz
c19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IGFjY2Vzc1R5cGUgPSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOworICAgICAg
ICBjYWNoZVR5cGUgPSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOwogCi0gICAgICAgIHUucHV0
QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgcHJldmlvdXNT
dHJ1Y3R1cmUpOwotICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5zZXQodm0s
IG93bmVyLCBzdHJ1Y3R1cmUpOwotICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0NvbmRp
dGlvblNldCA9IGNvbmRpdGlvblNldC5yZWxlYXNlUmF3UG9pbnRlcigpOworICAgICAgICB1LmJ5
SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgYmFzZU9iamVjdFN0cnVj
dHVyZSk7CisgICAgICAgIHUuYnlJZFNlbGYub2Zmc2V0ID0gb2Zmc2V0OwogICAgIH0KIAotICAg
IHZvaWQgaW5pdFB1dEJ5SWRSZXBsYWNlKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJl
KiBiYXNlT2JqZWN0U3RydWN0dXJlKQotICAgIHsKLSAgICAgICAgYWNjZXNzVHlwZSA9IGFjY2Vz
c19wdXRfYnlfaWRfcmVwbGFjZTsKLSAgICAKLSAgICAgICAgdS5wdXRCeUlkUmVwbGFjZS5iYXNl
T2JqZWN0U3RydWN0dXJlLnNldCh2bSwgb3duZXIsIGJhc2VPYmplY3RTdHJ1Y3R1cmUpOwotICAg
IH0KLSAgICAgICAgCi0gICAgdm9pZCBpbml0UHV0QnlJZExpc3QoUG9seW1vcnBoaWNQdXRCeUlk
TGlzdCogbGlzdCkKLSAgICB7Ci0gICAgICAgIGFjY2Vzc1R5cGUgPSBhY2Nlc3NfcHV0X2J5X2lk
X2xpc3Q7Ci0gICAgICAgIHUucHV0QnlJZExpc3QubGlzdCA9IGxpc3Q7Ci0gICAgfQotICAgIAot
ICAgIHZvaWQgaW5pdEluTGlzdChQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIGxpc3Qs
IGludCBsaXN0U2l6ZSkKKyAgICB2b2lkIGluaXRTdHViKHN0ZDo6dW5pcXVlX3B0cjxQb2x5bW9y
cGhpY0FjY2Vzcz4gc3R1YikKICAgICB7Ci0gICAgICAgIGFjY2Vzc1R5cGUgPSBhY2Nlc3NfaW5f
bGlzdDsKLSAgICAgICAgdS5pbkxpc3Quc3RydWN0dXJlTGlzdCA9IGxpc3Q7Ci0gICAgICAgIHUu
aW5MaXN0Lmxpc3RTaXplID0gbGlzdFNpemU7CisgICAgICAgIGNhY2hlVHlwZSA9IENhY2hlVHlw
ZTo6U3R1YjsKKyAgICAgICAgdS5zdHViID0gc3R1Yi5yZWxlYXNlKCk7CiAgICAgfQotICAgICAg
ICAKKworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBhZGRBY2Nlc3NDYXNlKAorICAgICAgICBW
TSYsIENvZGVCbG9jayosIGNvbnN0IElkZW50aWZpZXImLCBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNz
Q2FzZT4gYWNjZXNzQ2FzZSk7CisKICAgICB2b2lkIHJlc2V0KENvZGVCbG9jayopOwogCiAgICAg
dm9pZCBkZXJlZigpOwpAQCAtMTY1LDE1ICsxMTEsOSBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1Yklu
Zm8gewogICAgICAgICBzZWVuID0gdHJ1ZTsKICAgICB9CiAgICAgICAgIAotICAgIFN0cnVjdHVy
ZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIGFkZFdhdGNocG9pbnQoCi0gICAgICAgIENvZGVCbG9j
ayogY29kZUJsb2NrLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uID0g
T2JqZWN0UHJvcGVydHlDb25kaXRpb24oKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBXYXRjaHBv
aW50c09uU3RydWN0dXJlU3R1YkluZm86OmVuc3VyZVJlZmVyZW5jZUFuZEFkZFdhdGNocG9pbnQo
Ci0gICAgICAgICAgICB3YXRjaHBvaW50cywgY29kZUJsb2NrLCB0aGlzLCBjb25kaXRpb24pOwot
ICAgIH0KLSAgICAKLSAgICBpbnQ4X3QgYWNjZXNzVHlwZTsKLSAgICBib29sIHNlZW4gOiAxOwor
ICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZTsKKyAgICBDYWNoZVR5cGUgY2FjaGVUeXBlOworICAg
IGJvb2wgc2VlbjsKICAgICBib29sIHJlc2V0QnlHQyA6IDE7CiAgICAgYm9vbCB0b29rU2xvd1Bh
dGggOiAxOwogCkBAIC0yMDMsMzQgKzE0MywxMyBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8g
ewogCiAgICAgdW5pb24gewogICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgLy8gSXQgd291
bGQgYmUgdW53aXNlIHRvIHB1dCBhbnl0aGluZyBoZXJlLCBhcyBpdCB3aWxsIHN1cmVseSBiZSBv
dmVyd3JpdHRlbi4KLSAgICAgICAgfSB1bnNldDsKLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAg
ICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBiYXNlT2JqZWN0U3RydWN0dXJlOwotICAg
ICAgICB9IGdldEJ5SWRTZWxmOwotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgUG9seW1v
cnBoaWNHZXRCeUlkTGlzdCogbGlzdDsKLSAgICAgICAgfSBnZXRCeUlkTGlzdDsKLSAgICAgICAg
c3RydWN0IHsKLSAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBwcmV2aW91
c1N0cnVjdHVyZTsKLSAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBzdHJ1
Y3R1cmU7Ci0gICAgICAgICAgICB2b2lkKiByYXdDb25kaXRpb25TZXQ7Ci0gICAgICAgIH0gcHV0
QnlJZFRyYW5zaXRpb247Ci0gICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICBXcml0ZUJhcnJp
ZXJCYXNlPFN0cnVjdHVyZT4gYmFzZU9iamVjdFN0cnVjdHVyZTsKLSAgICAgICAgfSBwdXRCeUlk
UmVwbGFjZTsKLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIFBvbHltb3JwaGljUHV0QnlJ
ZExpc3QqIGxpc3Q7Ci0gICAgICAgIH0gcHV0QnlJZExpc3Q7Ci0gICAgICAgIHN0cnVjdCB7Ci0g
ICAgICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHN0cnVjdHVyZUxpc3Q7
Ci0gICAgICAgICAgICBpbnQgbGlzdFNpemU7Ci0gICAgICAgIH0gaW5MaXN0OworICAgICAgICAg
ICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OworICAgICAgICB9IGJ5SWRTZWxmOworICAgICAgICBQ
b2x5bW9ycGhpY0FjY2Vzcyogc3R1YjsKICAgICB9IHU7CiAKLSAgICBSZWZQdHI8SklUU3R1YlJv
dXRpbmU+IHN0dWJSb3V0aW5lOwogICAgIENvZGVMb2NhdGlvbkNhbGwgY2FsbFJldHVybkxvY2F0
aW9uOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8+
IHdhdGNocG9pbnRzOwogfTsKIAogaW5saW5lIENvZGVPcmlnaW4gZ2V0U3RydWN0dXJlU3R1Yklu
Zm9Db2RlT3JpZ2luKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHJ1Y3R1cmVTdHViSW5mbykKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShy
ZXZpc2lvbiAxODk0OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTM1LDcgKzkzNSw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVJbihOb2RlKiBub2QKICAgICAKICAgICBpZiAoSlNTdHJpbmcqIHN0
cmluZyA9IG5vZGUtPmNoaWxkMSgpLT5keW5hbWljQ2FzdENvbnN0YW50PEpTU3RyaW5nKj4oKSkg
ewogICAgICAgICBpZiAoc3RyaW5nLT50cnlHZXRWYWx1ZUltcGwoKSAmJiBzdHJpbmctPnRyeUdl
dFZhbHVlSW1wbCgpLT5pc0F0b21pYygpKSB7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8gPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkU3R1YkluZm8oKTsKKyAgICAgICAg
ICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRT
dHViSW5mbyhBY2Nlc3NUeXBlOjpJbik7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3Bw
CShyZXZpc2lvbiAxODk0OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBp
bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzgsNyArNTM4LDcgQEAgc3RhdGljIHZvaWQgZml4
RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHVz
ZWRSZWdpc3RlcnMgPSB1c2VkUmVnaXN0ZXJzRm9yKHJlY29yZCk7CiAgICAgICAgICAgICAgICAg
R1BSUmVnIHJlc3VsdCA9IHJlY29yZC5sb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCk7CiAgICAgICAg
ICAgICAgICAgR1BSUmVnIG9iaiA9IHJlY29yZC5sb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCk7Ci0g
ICAgICAgICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gY29kZUJsb2NrLT5h
ZGRTdHViSW5mbygpOyAKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8gPSBjb2RlQmxvY2stPmFkZFN0dWJJbmZvKEFjY2Vzc1R5cGU6OkluKTsgCiAgICAgICAgICAg
ICAgICAgc3R1YkluZm8tPmNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luOwogICAgICAgICAgICAgICAg
IHN0dWJJbmZvLT5jYWxsU2l0ZUluZGV4ID0gY2hlY2tJbi5jYWxsU2l0ZUluZGV4KCk7CiAgICAg
ICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmJhc2VHUFIgPSBzdGF0aWNfY2FzdDxpbnQ4X3Q+
KG9iaik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0FjY2Vzc29yQ2FsbEpJVFN0
dWJSb3V0aW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fj
Y2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmNwcAkocmV2aXNpb24gMTg5NDkzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9BY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQWNj
ZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaCIKLQotI2lmIEVOQUJMRShKSVQpCi0KLSNpbmNsdWRl
ICJDYWxsTGlua0luZm8uaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLUFjY2Vzc29yQ2FsbEpJVFN0
dWJSb3V0aW5lOjpBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZSgKLSAgICBjb25zdCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYmIGNvZGUsIFZNJiB2bSwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rSW5m
bz4gaW5mbykKLSAgICA6IEdDQXdhcmVKSVRTdHViUm91dGluZShjb2RlLCB2bSkKLSAgICAsIG1f
Y2FsbExpbmtJbmZvKFdURjo6bW92ZShpbmZvKSkKLXsKLX0KLQotQWNjZXNzb3JDYWxsSklUU3R1
YlJvdXRpbmU6On5BY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZSgpCi17Ci19Ci0KLWJvb2wgQWNj
ZXNzb3JDYWxsSklUU3R1YlJvdXRpbmU6OnZpc2l0V2VhayhWTSYgdm0pCi17Ci0gICAgbV9jYWxs
TGlua0luZm8tPnZpc2l0V2Vhayh2bSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9BY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaAko
cmV2aXNpb24gMTg5NDkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9BY2Nlc3NvckNh
bGxKSVRTdHViUm91dGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU3ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBB
Y2Nlc3NvckNhbGxKSVRTdHViUm91dGluZV9oCi0jZGVmaW5lIEFjY2Vzc29yQ2FsbEpJVFN0dWJS
b3V0aW5lX2gKLQotI2lmIEVOQUJMRShKSVQpCi0KLSNpbmNsdWRlICJHQ0F3YXJlSklUU3R1YlJv
dXRpbmUuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENhbGxMaW5rSW5mbzsKLQotLy8g
SklUIHN0dWIgcm91dGluZSBmb3IgdXNlIGJ5IEphdmFTY3JpcHQgYWNjZXNzb3JzLiBUaGVzZSB3
aWxsIGJlIG1ha2luZyBhIEpTCi0vLyBjYWxsIHRoYXQgcmVxdWlyZXMgaW5saW5lIGNhY2hpbmcu
IAotCi1jbGFzcyBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZSA6IHB1YmxpYyBHQ0F3YXJlSklU
U3R1YlJvdXRpbmUgewotcHVibGljOgotICAgIEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lKAot
ICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmLCBWTSYsIHN0ZDo6dW5pcXVlX3B0
cjxDYWxsTGlua0luZm8+KTsKLSAgICAKLSAgICB2aXJ0dWFsIH5BY2Nlc3NvckNhbGxKSVRTdHVi
Um91dGluZSgpOwotICAgIAotICAgIHZpcnR1YWwgYm9vbCB2aXNpdFdlYWsoVk0mKSBvdmVycmlk
ZTsKLSAgICAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5rSW5m
bzsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQot
I2VuZGlmIC8vIEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lX2gKLQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAxODk0OTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNv
cHkpCkBAIC01NjMsNyArNTYzLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYnJhbmNoMzIo
RXF1YWwsIHJlZ3MudGFnR1BSKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFn
KSk7CiAjZW5kaWYKICAgICB9Ci0gICAgCisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAg
IEp1bXAgYnJhbmNoU3RydWN0dXJlKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBUIGxl
ZnRIYW5kU2lkZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewpAQCAtODMyLDYgKzgzMiwx
NSBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAKKyAgICB2b2lkIGJveEJvb2xlYW5QYXlsb2Fk
KGJvb2wgdmFsdWUsIEdQUlJlZyBwYXlsb2FkR1BSKQorICAgIHsKKyNpZiBVU0UoSlNWQUxVRTY0
KQorICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlICsgdmFsdWUpLCBwYXlsb2Fk
R1BSKTsKKyNlbHNlCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKHZhbHVlKSwgcGF5bG9hZEdQ
Uik7CisjZW5kaWYKKyAgICB9CisKICAgICB2b2lkIGJveEJvb2xlYW4oR1BSUmVnIGJvb2xHUFIs
IEpTVmFsdWVSZWdzIGJveGVkUmVncykKICAgICB7CiAgICAgICAgIGJveEJvb2xlYW5QYXlsb2Fk
KGJvb2xHUFIsIGJveGVkUmVncy5wYXlsb2FkR1BSKCkpOwpAQCAtODM5LDYgKzg0OCwxNyBAQCBw
dWJsaWM6CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpLCBi
b3hlZFJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCiAgICAgfQorCisgICAgdm9pZCBib3hJbnQzMihH
UFJSZWcgaW50R1BSLCBKU1ZhbHVlUmVncyBib3hlZFJlZ3MpCisgICAgeworI2lmIFVTRShKU1ZB
TFVFNjQpCisgICAgICAgIG1vdmUoaW50R1BSLCBib3hlZFJlZ3MuZ3ByKCkpOworICAgICAgICBv
cjY0KFRydXN0ZWRJbW02NChUYWdUeXBlTnVtYmVyKSwgYm94ZWRSZWdzLmdwcigpKTsKKyNlbHNl
CisgICAgICAgIG1vdmUoaW50R1BSLCBib3hlZFJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAg
bW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCBib3hlZFJlZ3MudGFnR1BSKCkp
OworI2VuZGlmCisgICAgfQogICAgIAogICAgIHZvaWQgY2FsbEV4Y2VwdGlvbkZ1enooKTsKICAg
ICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMTg5NDkzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYs
NiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHN0cnVjdCBJbnN0cnVjdGlvbjsKICAgICBzdHJ1
Y3QgT3BlcmFuZFR5cGVzOwotICAgIHN0cnVjdCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxp
c3Q7CiAgICAgc3RydWN0IFNpbXBsZUp1bXBUYWJsZTsKICAgICBzdHJ1Y3QgU3RyaW5nSnVtcFRh
YmxlOwogICAgIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbzsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCShyZXZp
c2lvbiAxODk0OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hl
R2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsMjIgKzM2LDI0IEBAIG5hbWVzcGFjZSBK
U0MgewogCiBzdGF0aWMgU3RydWN0dXJlU3R1YkluZm8qIGdhcmJhZ2VTdHViSW5mbygpCiB7Ci0g
ICAgc3RhdGljIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG5ldyBTdHJ1Y3R1cmVTdHVi
SW5mbygpOworICAgIHN0YXRpYyBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBuZXcgU3Ry
dWN0dXJlU3R1YkluZm8oQWNjZXNzVHlwZTo6R2V0KTsKICAgICByZXR1cm4gc3R1YkluZm87CiB9
CiAKLUpJVElubGluZUNhY2hlR2VuZXJhdG9yOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcihDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNh
bGxTaXRlKQorSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OkpJVElubGluZUNhY2hlR2VuZXJhdG9y
KAorICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxT
aXRlSW5kZXggY2FsbFNpdGUsIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSkKICAgICA6IG1fY29kZUJs
b2NrKGNvZGVCbG9jaykKIHsKLSAgICBtX3N0dWJJbmZvID0gbV9jb2RlQmxvY2sgPyBtX2NvZGVC
bG9jay0+YWRkU3R1YkluZm8oKSA6IGdhcmJhZ2VTdHViSW5mbygpOworICAgIG1fc3R1YkluZm8g
PSBtX2NvZGVCbG9jayA/IG1fY29kZUJsb2NrLT5hZGRTdHViSW5mbyhhY2Nlc3NUeXBlKSA6IGdh
cmJhZ2VTdHViSW5mbygpOwogICAgIG1fc3R1YkluZm8tPmNvZGVPcmlnaW4gPSBjb2RlT3JpZ2lu
OwogICAgIG1fc3R1YkluZm8tPmNhbGxTaXRlSW5kZXggPSBjYWxsU2l0ZTsKIH0KIAogSklUQnlJ
ZEdlbmVyYXRvcjo6SklUQnlJZEdlbmVyYXRvcigKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBjb25zdCBSZWdp
c3RlclNldCYgdXNlZFJlZ2lzdGVycywKLSAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVn
cyB2YWx1ZSwgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSkKLSAgICA6IEpJVElubGluZUNh
Y2hlR2VuZXJhdG9yKGNvZGVCbG9jaywgY29kZU9yaWdpbiwgY2FsbFNpdGUpCisgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxs
U2l0ZSwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlLAorICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2Vk
UmVnaXN0ZXJzLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwKKyAgICBTcGls
bFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlKQorICAgIDogSklUSW5saW5lQ2FjaGVHZW5lcmF0b3Io
Y29kZUJsb2NrLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgYWNjZXNzVHlwZSkKICAgICAsIG1fYmFz
ZShiYXNlKQogICAgICwgbV92YWx1ZSh2YWx1ZSkKIHsKQEAgLTExNCw3ICsxMTYsOCBAQCB2b2lk
IEpJVEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGhDCiBKSVRHZXRCeUlkR2VuZXJhdG9y
OjpKSVRHZXRCeUlkR2VuZXJhdG9yKAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0
JiB1c2VkUmVnaXN0ZXJzLAogICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVl
LCBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlKQotICAgIDogSklUQnlJZEdlbmVyYXRvcihj
b2RlQmxvY2ssIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2YWx1
ZSwgc3BpbGxNb2RlKQorICAgIDogSklUQnlJZEdlbmVyYXRvcigKKyAgICAgICAgY29kZUJsb2Nr
LCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6R2V0LCB1c2VkUmVnaXN0ZXJzLCBi
YXNlLCB2YWx1ZSwgc3BpbGxNb2RlKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGJhc2UucGF5bG9h
ZEdQUigpICE9IHZhbHVlLnRhZ0dQUigpKTsKIH0KQEAgLTE0MCw3ICsxNDMsOCBAQCBKSVRQdXRC
eUlkR2VuZXJhdG9yOjpKSVRQdXRCeUlkR2VuZXJhdG9yCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgY29uc3Qg
UmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsCiAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1
ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzY3JhdGNoLCBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2Rl
LAogICAgIEVDTUFNb2RlIGVjbWFNb2RlLCBQdXRLaW5kIHB1dEtpbmQpCi0gICAgOiBKSVRCeUlk
R2VuZXJhdG9yKGNvZGVCbG9jaywgY29kZU9yaWdpbiwgY2FsbFNpdGUsIHVzZWRSZWdpc3RlcnMs
IGJhc2UsIHZhbHVlLCBzcGlsbE1vZGUpCisgICAgOiBKSVRCeUlkR2VuZXJhdG9yKAorICAgICAg
ICBjb2RlQmxvY2ssIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXQsIHVzZWRS
ZWdpc3RlcnMsIGJhc2UsIHZhbHVlLCBzcGlsbE1vZGUpCiAgICAgLCBtX3NjcmF0Y2goc2NyYXRj
aCkKICAgICAsIG1fZWNtYU1vZGUoZWNtYU1vZGUpCiAgICAgLCBtX3B1dEtpbmQocHV0S2luZCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hl
R2VuZXJhdG9yLmgJKHJldmlzaW9uIDE4OTQ5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsNiArMzMsNyBA
QAogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJQdXRLaW5kLmgiCiAjaW5jbHVk
ZSAiUmVnaXN0ZXJTZXQuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogCiBuYW1l
c3BhY2UgSlNDIHsKIApAQCAtNDEsNyArNDIsNyBAQCBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBK
SVRJbmxpbmVDYWNoZUdlbmVyYXRvciB7CiBwcm90ZWN0ZWQ6CiAgICAgSklUSW5saW5lQ2FjaGVH
ZW5lcmF0b3IoKSB7IH0KLSAgICBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcihDb2RlQmxvY2sqLCBD
b2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4KTsKKyAgICBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcihD
b2RlQmxvY2sqLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlKTsKICAgICAK
IHB1YmxpYzoKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8oKSBjb25zdCB7IHJldHVy
biBtX3N0dWJJbmZvOyB9CkBAIC01Niw4ICs1Nyw4IEBAIHByb3RlY3RlZDoKICAgICBKSVRCeUlk
R2VuZXJhdG9yKCkgeyB9CiAKICAgICBKSVRCeUlkR2VuZXJhdG9yKAotICAgICAgICBDb2RlQmxv
Y2sqLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3RlclNldCYsIEpTVmFs
dWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLAotICAgICAgICBTcGlsbFJlZ2lzdGVyc01v
ZGUgc3BpbGxNb2RlKTsKKyAgICAgICAgQ29kZUJsb2NrKiwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJ
bmRleCwgQWNjZXNzVHlwZSwgY29uc3QgUmVnaXN0ZXJTZXQmLCBKU1ZhbHVlUmVncyBiYXNlLAor
ICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZSwgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSk7
CiAgICAgCiBwdWJsaWM6CiAgICAgdm9pZCByZXBvcnRTbG93UGF0aENhbGwoTWFjcm9Bc3NlbWJs
ZXI6OkxhYmVsIHNsb3dQYXRoQmVnaW4sIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9u
IDE4OTQ5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE2MywyNCArMTYzLDYgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25HZQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYmFzZVZhbHVl
LmdldChleGVjLCBpZGVudCwgc2xvdCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3QoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1ZhbHVlIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBs
KiB1aWQpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0KLSAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRp
Zmllcjo6ZnJvbVVpZCh2bSwgdWlkKTsKLSAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0
aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSk7Ci0KLSAgICBKU1ZhbHVl
IGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShiYXNlKTsKLSAgICBQcm9wZXJ0eVNsb3Qgc2xv
dChiYXNlVmFsdWUpOwotICAgIGJvb2wgaGFzUmVzdWx0ID0gYmFzZVZhbHVlLmdldFByb3BlcnR5
U2xvdChleGVjLCBpZGVudCwgc2xvdCk7Ci0gICAgCi0gICAgaWYgKGFjY2Vzc1R5cGUgPT0gc3Rh
dGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpKQotICAgICAgICBidWls
ZEdldEJ5SURMaXN0KGV4ZWMsIGJhc2VWYWx1ZSwgaWRlbnQsIHNsb3QsICpzdHViSW5mbyk7Ci0K
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGhhc1Jlc3VsdD8gc2xvdC5nZXRWYWx1ZShleGVj
LCBpZGVudCkgOiBqc1VuZGVmaW5lZCgpKTsKLX0KLQogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1ZhbHVlIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBs
KiB1aWQpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CkBAIC0xOTcsNyArMTc5LDYgQEAg
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgICAgICBzdHViSW5m
by0+c2VlbiA9IHRydWU7CiAgICAgCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShoYXNSZXN1
bHQ/IHNsb3QuZ2V0VmFsdWUoZXhlYywgaWRlbnQpIDoganNVbmRlZmluZWQoKSk7Ci0KIH0KIAog
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Jbk9wdGltaXplKEV4ZWNTdGF0
ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBKU0NlbGwqIGJhc2UsIFVuaXF1
ZWRTdHJpbmdJbXBsKiBrZXkpCkBAIC0zOTQsOTAgKzM3NSw2IEBAIHZvaWQgSklUX09QRVJBVElP
TiBvcGVyYXRpb25QdXRCeUlkRGlyZWMKICAgICAgICAgc3R1YkluZm8tPnNlZW4gPSB0cnVlOwog
fQogCi12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdEJ1aWxkTGlzdChF
eGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCkKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlkZW50
ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgdWlkKTsKLSAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5
cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSk7Ci0KLSAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgSlNW
YWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpOwotICAgIFB1dFBy
b3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgdHJ1ZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5
SWRDb250ZXh0KCkpOwotICAgIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZVZhbHVl
LmlzQ2VsbCgpID8gYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKnZtKSA6IG51bGxwdHI7
IAotICAgIGJhc2VWYWx1ZS5wdXQoZXhlYywgaWRlbnQsIHZhbHVlLCBzbG90KTsKLQotICAgIGlm
IChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NU
eXBlKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYnVpbGRQdXRCeUlkTGlzdChleGVjLCBiYXNl
VmFsdWUsIHN0cnVjdHVyZSwgaWRlbnQsIHNsb3QsICpzdHViSW5mbywgTm90RGlyZWN0KTsKLX0K
LQotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3Qo
RXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCi0gICAgSWRlbnRpZmllciBpZGVu
dCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHVpZCk7Ci0gICAgQWNjZXNzVHlwZSBhY2Nlc3NU
eXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpOwotCi0g
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIEpT
VmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKTsKLSAgICBQdXRQ
cm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIGZhbHNlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0
QnlJZENvbnRleHQoKSk7Ci0KLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VWYWx1ZS5p
c0NlbGwoKSA/IGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCp2bSkgOiBudWxscHRyOwot
ICAgIGJhc2VWYWx1ZS5wdXQoZXhlYywgaWRlbnQsIHZhbHVlLCBzbG90KTsKLSAgICAKLSAgICBp
ZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNz
VHlwZSkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBidWlsZFB1dEJ5SWRMaXN0KGV4ZWMs
IGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBpZGVudCwgc2xvdCwgKnN0dWJJbmZvLCBOb3REaXJlY3Qp
OwotfQotCi12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdEJ1
aWxkTGlzdChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCkKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlm
aWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgdWlkKTsKLSAgICBBY2Nlc3NUeXBl
IGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlw
ZSk7Ci0gICAgCi0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpOwotICAgIEpTT2JqZWN0KiBiYXNlT2JqZWN0ID0gYXNPYmplY3QoSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRCYXNlKSk7Ci0gICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZU9iamVjdCwgdHJ1
ZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwotCi0gICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBiYXNlT2JqZWN0LT5zdHJ1Y3R1cmUoKnZtKTsgICAgCi0gICAgYmFzZU9i
amVjdC0+cHV0RGlyZWN0KCp2bSwgaWRlbnQsIHZhbHVlLCBzbG90KTsKLSAgICAKLSAgICBpZiAo
YWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlw
ZSkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBidWlsZFB1dEJ5SWRMaXN0KGV4ZWMsIGJh
c2VPYmplY3QsIHN0cnVjdHVyZSwgaWRlbnQsIHNsb3QsICpzdHViSW5mbywgRGlyZWN0KTsKLX0K
LQotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RCdWls
ZExpc3QoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIFVuaXF1
ZWRTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCi0gICAgSWRlbnRpZmll
ciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHVpZCk7Ci0gICAgQWNjZXNzVHlwZSBh
Y2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUp
OwotCi0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwot
ICAgIEpTT2JqZWN0KiBiYXNlT2JqZWN0ID0gYXNPYmplY3QoSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRCYXNlKSk7Ci0gICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZU9iamVjdCwgZmFsc2UsIGV4
ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKLQotICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gYmFzZU9iamVjdC0+c3RydWN0dXJlKCp2bSk7ICAgIAotICAgIGJhc2VPYmplY3Qt
PnB1dERpcmVjdCgqdm0sIGlkZW50LCB2YWx1ZSwgc2xvdCk7Ci0KLSAgICBpZiAoYWNjZXNzVHlw
ZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSkpCi0gICAg
ICAgIHJldHVybjsKLSAgICAKLSAgICBidWlsZFB1dEJ5SWRMaXN0KGV4ZWMsIGJhc2VPYmplY3Qs
IHN0cnVjdHVyZSwgaWRlbnQsIHNsb3QsICpzdHViSW5mbywgRGlyZWN0KTsKLX0KLQogdm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVTdG9yYWdlQW5kRmluaXNoUHV0KEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2UsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKQogewogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlz
aW9uIDE4OTQ5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2lmIEVOQUJMRShKSVQpCiAKLSNpbmNs
dWRlICJBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5oIgogI2luY2x1ZGUgIkJpbmFyeVN3aXRj
aC5oIgogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgogI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMu
aCIKQEAgLTQwLDggKzM5LDcgQEAKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
TGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJQb2x5bW9y
cGhpY0dldEJ5SWRMaXN0LmgiCi0jaW5jbHVkZSAiUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oIgor
I2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCiAjaW5jbHVkZSAiUmVnRXhwTWF0Y2hlc0Fy
cmF5LmgiCiAjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAi
U3RhY2tBbGlnbm1lbnQuaCIKQEAgLTk0LDEzICs5MiwxMCBAQCBzdGF0aWMgdm9pZCByZXBhdGNo
Q2FsbChDb2RlQmxvY2sqIGNvZGVCCiB9CiAKIHN0YXRpYyB2b2lkIHJlcGF0Y2hCeUlkU2VsZkFj
Y2VzcygKLSAgICBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLAotICAgIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBjb25zdCBGdW5jdGlvblB0ciAm
c2xvd1BhdGhGdW5jdGlvbiwKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKKyAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQsIGNvbnN0IEZ1bmN0aW9uUHRyICZzbG93UGF0aEZ1bmN0aW9uLAogICAgIGJvb2wg
Y29tcGFjdCkKIHsKLSAgICBpZiAoc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBv
aW50KCkpCi0gICAgICAgIHZtLnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KHBy
b3BlcnR5TmFtZSwgc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKLSAgICAKICAg
ICAvLyBPbmx5IG9wdGltaXplIG9uY2UhCiAgICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIHNsb3dQYXRoRnVuY3Rpb24pOwogCkBAIC0xMjksMzMg
KzEyNCw0NCBAQCBzdGF0aWMgdm9pZCByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoCiAjZW5kaWYKIH0K
IAotc3RhdGljIHZvaWQgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigKLSAgICBjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAotICAgIENDYWxsSGVscGVycyYgaml0LCBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgR1BSUmVnIHNjcmF0Y2hHUFIpCi17
Ci0gICAgaWYgKGNvbmRpdGlvbi5pc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRj
aHBvaW50KCkpIHsKLSAgICAgICAgY29uZGl0aW9uLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKS0+YWRk
VHJhbnNpdGlvbldhdGNocG9pbnQoCi0gICAgICAgICAgICBzdHViSW5mby5hZGRXYXRjaHBvaW50
KGNvZGVCbG9jaywgY29uZGl0aW9uKSk7Ci0gICAgICAgIHJldHVybjsKK3N0YXRpYyB2b2lkIHJl
c2V0R2V0QnlJRENoZWNrQW5kTG9hZChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7Cisg
ICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzIgc3RydWN0dXJlTGFiZWwgPSBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldCgtKGludHB0cl90KXN0dWJJbmZvLnBh
dGNoLmRlbHRhQ2hlY2tJbW1Ub0NhbGwpOworICAgIGlmIChNYWNyb0Fzc2VtYmxlcjo6Y2FuSnVt
cFJlcGxhY2VQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaCgpKSB7CisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNo
KAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0YXJ0T2ZQYXRjaGFibGVCcmFuY2gzMldp
dGhQYXRjaE9uQWRkcmVzcyhzdHJ1Y3R1cmVMYWJlbCksCisgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxl
cjo6UmVnaXN0ZXJJRD4oc3R1YkluZm8ucGF0Y2guYmFzZUdQUiksCisgICAgICAgICAgICAgICAg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGlu
dDMyX3Q+KHVudXNlZFBvaW50ZXIpKTsKICAgICB9CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0
Y2hJbnQzMihzdHJ1Y3R1cmVMYWJlbCwgc3RhdGljX2Nhc3Q8aW50MzJfdD4odW51c2VkUG9pbnRl
cikpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDb21w
YWN0KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQo
c3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSksIDApOworI2Vsc2UKKyAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENvbXBhY3Qoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1RhZ0xv
YWRPclN0b3JlKSwgMCk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDb21wYWN0KHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8u
cGF0Y2guZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUpLCAwKTsKKyNlbmRpZgorfQogCi0g
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjb25kaXRpb24ub2JqZWN0KCktPnN0cnVjdHVyZSgp
OwotICAgIFJFTEVBU0VfQVNTRVJUKGNvbmRpdGlvbi5zdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlB
c3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUpKTsKLSAgICBqaXQubW92
ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihjb25kaXRpb24ub2JqZWN0KCkpLCBzY3Jh
dGNoR1BSKTsKLSAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKAotICAgICAgICBqaXQuYnJhbmNoU3Ry
dWN0dXJlKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAotICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgc3RydWN0dXJlKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNoZWNrT2JqZWN0UHJv
cGVydHlDb25kaXRpb25zKAotICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBz
ZXQsIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCi0g
ICAgQ0NhbGxIZWxwZXJzJiBqaXQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNh
c2VzLCBHUFJSZWcgc2NyYXRjaEdQUikKLXsKLSAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uJiBjb25kaXRpb24gOiBzZXQpIHsKLSAgICAgICAgY2hlY2tPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbigKLSAgICAgICAgICAgIGNvbmRpdGlvbiwgY29kZUJsb2NrLCBzdHViSW5mbywg
aml0LCBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOworc3RhdGljIHZvaWQgcmVzZXRQdXRCeUlE
Q2hlY2tBbmRMb2FkKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBDb2RlTG9j
YXRpb25EYXRhTGFiZWwzMiBzdHJ1Y3R1cmVMYWJlbCA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0Y2guZGVsdGFD
aGVja0ltbVRvQ2FsbCk7CisgICAgaWYgKE1hY3JvQXNzZW1ibGVyOjpjYW5KdW1wUmVwbGFjZVBh
dGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKCkpIHsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJl
dmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goCisgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6c3RhcnRPZlBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoT25B
ZGRyZXNzKHN0cnVjdHVyZUxhYmVsKSwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKAorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWdpc3Rl
cklEPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKSwKKyAgICAgICAgICAgICAgICBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4odW51
c2VkUG9pbnRlcikpOwogICAgIH0KKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEludDMyKHN0
cnVjdHVyZUxhYmVsLCBzdGF0aWNfY2FzdDxpbnQzMl90Pih1bnVzZWRQb2ludGVyKSk7CisjaWYg
VVNFKEpTVkFMVUU2NCkKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEludDMyKHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRl
bHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCAwKTsKKyNlbHNlCisgICAgTWFjcm9Bc3NlbWJsZXI6OnJl
cGF0Y2hJbnQzMihzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNl
dChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlKSwgMCk7CisgICAgTWFj
cm9Bc3NlbWJsZXI6OnJlcGF0Y2hJbnQzMihzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0
YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JT
dG9yZSksIDApOworI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB0YXJn
ZXQpCkBAIC0xNjgsNiArMTc0LDggQEAgc3RhdGljIHZvaWQgcmVwbGFjZVdpdGhKdW1wKFN0cnVj
dHVyZVN0dQogICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwodGFyZ2V0KSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CisKKyAgICByZXNldEdldEJ5SURDaGVja0FuZExvYWQoc3R1YkluZm8p
OwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcCgKICAgICAgICAgc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldCgKQEAgLTE3NSw0MjcgKzE4Myw2IEBA
IHN0YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChTdHJ1Y3R1cmVTdHUKICAgICAgICAgQ29kZUxv
Y2F0aW9uTGFiZWwodGFyZ2V0KSk7CiB9CiAKLXN0YXRpYyB2b2lkIGVtaXRSZXN0b3JlU2NyYXRj
aChNYWNyb0Fzc2VtYmxlciYgc3R1YkppdCwgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgR1BS
UmVnIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpKdW1wJiBzdWNjZXNzLCBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCYgZmFpbCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlcykK
LXsKLSAgICBpZiAobmVlZFRvUmVzdG9yZVNjcmF0Y2gpIHsKLSAgICAgICAgc3R1YkppdC5wb3BU
b1Jlc3RvcmUoc2NyYXRjaEdQUik7Ci0gICAgICAgIAotICAgICAgICBzdWNjZXNzID0gc3R1Ykpp
dC5qdW1wKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBsaW5rIGZhaWx1cmUgY2FzZXMgaGVyZSwg
c28gd2UgY2FuIHBvcCBzY3JhdGNoR1BSLCBhbmQgdGhlbiBqdW1wIGJhY2suCi0gICAgICAgIGZh
aWx1cmVDYXNlcy5saW5rKCZzdHViSml0KTsKLSAgICAgICAgCi0gICAgICAgIHN0dWJKaXQucG9w
VG9SZXN0b3JlKHNjcmF0Y2hHUFIpOwotICAgICAgICAKLSAgICAgICAgZmFpbCA9IHN0dWJKaXQu
anVtcCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIHN1Y2Nlc3MgPSBzdHVi
Sml0Lmp1bXAoKTsKLX0KLQotc3RhdGljIHZvaWQgbGlua1Jlc3RvcmVTY3JhdGNoKExpbmtCdWZm
ZXImIHBhdGNoQnVmZmVyLCBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBzdWNjZXNzLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsLCBNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzLCBDb2RlTG9jYXRpb25MYWJlbCBzdWNjZXNzTGFiZWws
IENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlQmVnaW4pCi17Ci0gICAgcGF0Y2hCdWZmZXIubGlu
ayhzdWNjZXNzLCBzdWNjZXNzTGFiZWwpOwotICAgICAgICAKLSAgICBpZiAobmVlZFRvUmVzdG9y
ZVNjcmF0Y2gpIHsKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsLCBzbG93Q2FzZUJlZ2lu
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICAvLyBsaW5rIGZhaWx1cmUgY2Fz
ZXMgZGlyZWN0bHkgYmFjayB0byBub3JtYWwgcGF0aAotICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFp
bHVyZUNhc2VzLCBzbG93Q2FzZUJlZ2luKTsKLX0KLQotc3RhdGljIHZvaWQgbGlua1Jlc3RvcmVT
Y3JhdGNoKExpbmtCdWZmZXImIHBhdGNoQnVmZmVyLCBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNo
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nl
c3MsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhaWwsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBm
YWlsdXJlQ2FzZXMpCi17Ci0gICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVk
VG9SZXN0b3JlU2NyYXRjaCwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzLCBzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxU
b0RvbmUpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5m
by5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7Ci19Ci0KLWVudW0gQnlJZFN0dWJLaW5kIHsK
LSAgICBHZXRWYWx1ZSwKLSAgICBHZXRVbmRlZmluZWQsCi0gICAgQ2FsbEdldHRlciwKLSAgICBD
YWxsQ3VzdG9tR2V0dGVyLAotICAgIENhbGxTZXR0ZXIsCi0gICAgQ2FsbEN1c3RvbVNldHRlcgot
fTsKLQotc3RhdGljIGNvbnN0IGNoYXIqIHRvU3RyaW5nKEJ5SWRTdHViS2luZCBraW5kKQotewot
ICAgIHN3aXRjaCAoa2luZCkgewotICAgIGNhc2UgR2V0VmFsdWU6Ci0gICAgICAgIHJldHVybiAi
R2V0VmFsdWUiOwotICAgIGNhc2UgR2V0VW5kZWZpbmVkOgotICAgICAgICByZXR1cm4gIkdldFVu
ZGVmaW5lZCI7Ci0gICAgY2FzZSBDYWxsR2V0dGVyOgotICAgICAgICByZXR1cm4gIkNhbGxHZXR0
ZXIiOwotICAgIGNhc2UgQ2FsbEN1c3RvbUdldHRlcjoKLSAgICAgICAgcmV0dXJuICJDYWxsQ3Vz
dG9tR2V0dGVyIjsKLSAgICBjYXNlIENhbGxTZXR0ZXI6Ci0gICAgICAgIHJldHVybiAiQ2FsbFNl
dHRlciI7Ci0gICAgY2FzZSBDYWxsQ3VzdG9tU2V0dGVyOgotICAgICAgICByZXR1cm4gIkNhbGxD
dXN0b21TZXR0ZXIiOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLX0KLQotc3RhdGljIEJ5
SWRTdHViS2luZCBraW5kRm9yKGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgICBpZiAo
c2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkpCi0gICAgICAgIHJldHVybiBHZXRWYWx1ZTsKLSAgICBp
ZiAoc2xvdC5pc1Vuc2V0KCkpCi0gICAgICAgIHJldHVybiBHZXRVbmRlZmluZWQ7Ci0gICAgaWYg
KHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkKLSAgICAgICAgcmV0dXJuIENhbGxDdXN0b21HZXR0
ZXI7Ci0gICAgUkVMRUFTRV9BU1NFUlQoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpKTsKLSAgICBy
ZXR1cm4gQ2FsbEdldHRlcjsKLX0KLQotc3RhdGljIEZ1bmN0aW9uUHRyIGN1c3RvbUZvcihjb25z
dCBQcm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0gICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlQ3VzdG9t
KCkpCi0gICAgICAgIHJldHVybiBGdW5jdGlvblB0cigpOwotICAgIHJldHVybiBGdW5jdGlvblB0
cihzbG90LmN1c3RvbUdldHRlcigpKTsKLX0KLQotc3RhdGljIEJ5SWRTdHViS2luZCBraW5kRm9y
KGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVCghc2xv
dC5pc0NhY2hlYWJsZVB1dCgpKTsKLSAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpKQot
ICAgICAgICByZXR1cm4gQ2FsbFNldHRlcjsKLSAgICBSRUxFQVNFX0FTU0VSVChzbG90LmlzQ2Fj
aGVhYmxlQ3VzdG9tKCkpOwotICAgIHJldHVybiBDYWxsQ3VzdG9tU2V0dGVyOwotfQotCi1zdGF0
aWMgRnVuY3Rpb25QdHIgY3VzdG9tRm9yKGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKLXsK
LSAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkKLSAgICAgICAgcmV0dXJuIEZ1bmN0
aW9uUHRyKCk7Ci0gICAgcmV0dXJuIEZ1bmN0aW9uUHRyKHNsb3QuY3VzdG9tU2V0dGVyKCkpOwot
fQotCi1zdGF0aWMgYm9vbCBnZW5lcmF0ZUJ5SWRTdHViKAotICAgIEV4ZWNTdGF0ZSogZXhlYywg
QnlJZFN0dWJLaW5kIGtpbmQsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwKLSAgICBG
dW5jdGlvblB0ciBjdXN0b20sIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwKLSAgICBKU09iamVjdCogYWx0
ZXJuYXRlQmFzZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
Ym9vbCBsb2FkVGFyZ2V0RnJvbVByb3h5LAotICAgIFdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRT
ZXQsIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwgc2xv
d0Nhc2VMYWJlbCwKLSAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+JiBzdHViUm91dGluZSkKLXsK
LSAgICBBU1NFUlQoY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eUFzc3VtaW5n
SW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpOwotICAgIAotICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOwotICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5w
YXRjaC5iYXNlR1BSKTsKLSAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSBKU1ZhbHVlUmVncygK
LSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJ
bmZvLnBhdGNoLnZhbHVlVGFnR1BSKSwKLSNlbmRpZgotICAgICAgICBzdGF0aWNfY2FzdDxHUFJS
ZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVlR1BSKSk7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBU
ZW1wUmVnaXN0ZXJTZXQoc3R1YkluZm8ucGF0Y2gudXNlZFJlZ2lzdGVycykuZ2V0RnJlZUdQUigp
OwotICAgIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSBzY3JhdGNoR1BSID09IEludmFsaWRH
UFJSZWc7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIW5lZWRUb1Jlc3RvcmVTY3JhdGNoIHx8IChraW5k
ID09IEdldFZhbHVlIHx8IGtpbmQgPT0gR2V0VW5kZWZpbmVkKSk7Ci0gICAgCi0gICAgQ0NhbGxI
ZWxwZXJzIHN0dWJKaXQoJmV4ZWMtPnZtKCksIGV4ZWMtPmNvZGVCbG9jaygpKTsKLSAgICBpZiAo
bmVlZFRvUmVzdG9yZVNjcmF0Y2gpIHsKLSAgICAgICAgc2NyYXRjaEdQUiA9IEFzc2VtYmx5SGVs
cGVyczo6c2VsZWN0U2NyYXRjaEdQUigKLSAgICAgICAgICAgIGJhc2VHUFIsIHZhbHVlUmVncy50
YWdHUFIoKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSk7Ci0gICAgICAgIHN0dWJKaXQucHVzaFRv
U2F2ZShzY3JhdGNoR1BSKTsKLSAgICAgICAgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSB0cnVlOwot
ICAgIH0KLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzOwot
Ci0gICAgR1BSUmVnIGJhc2VGb3JHZXRHUFI7Ci0gICAgaWYgKGxvYWRUYXJnZXRGcm9tUHJveHkp
IHsKLSAgICAgICAgYmFzZUZvckdldEdQUiA9IHZhbHVlUmVncy5wYXlsb2FkR1BSKCk7Ci0gICAg
ICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2g4KAotICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCAKLSAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoUHVyZUZvcndhcmRpbmdQcm94eVR5cGUpKSk7
Ci0KLSAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VH
UFIsIEpTUHJveHk6OnRhcmdldE9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIAotICAg
ICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoU3RydWN0dXJlKAotICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCi0g
ICAgICAgICAgICBzdHJ1Y3R1cmUpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBiYXNlRm9yR2V0
R1BSID0gYmFzZUdQUjsKLQotICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJh
bmNoU3RydWN0dXJlKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCAKLSAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VGb3JHZXRHUFIsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSksIAotICAgICAgICAgICAgc3RydWN0dXJlKSk7Ci0gICAgfQot
Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICBpZiAo
c3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkgfHwgY29uZGl0aW9uU2V0
Lm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkKLSAgICAgICAgdm0tPnJlZ2lzdGVyV2F0
Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KHByb3BlcnR5TmFtZSwgc3R1YkluZm8uYWRkV2F0Y2hw
b2ludChjb2RlQmxvY2spKTsKLQotICAgIGlmICh3YXRjaHBvaW50U2V0KQotICAgICAgICB3YXRj
aHBvaW50U2V0LT5hZGQoc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKLQotICAg
IGNoZWNrT2JqZWN0UHJvcGVydHlDb25kaXRpb25zKAotICAgICAgICBjb25kaXRpb25TZXQsIGNv
ZGVCbG9jaywgc3R1YkluZm8sIHN0dWJKaXQsIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7Ci0K
LSAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7Ci0gICAgICAgIFN0cnVjdHVyZSogY3Vy
clN0cnVjdHVyZTsKLSAgICAgICAgaWYgKGNvbmRpdGlvblNldC5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICBjdXJyU3RydWN0dXJlID0gc3RydWN0dXJlOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBjdXJyU3RydWN0dXJlID0gY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2JqZWN0
KCktPnN0cnVjdHVyZSgpOwotICAgICAgICBjdXJyU3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJv
cGVydHlGb3JSZXBsYWNlbWVudHMoKnZtLCBvZmZzZXQpOwotICAgIH0KLSAgICAKLSAgICBHUFJS
ZWcgYmFzZUZvckFjY2Vzc0dQUiA9IEludmFsaWRHUFJSZWc7Ci0gICAgaWYgKGtpbmQgIT0gR2V0
VW5kZWZpbmVkKSB7Ci0gICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkgewotICAg
ICAgICAgICAgLy8gV2UgY291bGQgaGF2ZSBjbG9iYmVyZWQgc2NyYXRjaEdQUiBlYXJsaWVyLCBz
byB3ZSBoYXZlIHRvIHJlbG9hZCBmcm9tIGJhc2VHUFIgdG8gZ2V0IHRoZSB0YXJnZXQuCi0gICAg
ICAgICAgICBpZiAobG9hZFRhcmdldEZyb21Qcm94eSkKLSAgICAgICAgICAgICAgICBzdHViSml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNQcm94eTo6dGFyZ2V0
T2Zmc2V0KCkpLCBiYXNlRm9yR2V0R1BSKTsKLSAgICAgICAgICAgIHN0dWJKaXQubW92ZShNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihhbHRlcm5hdGVCYXNlKSwgc2NyYXRjaEdQUik7Ci0g
ICAgICAgICAgICBiYXNlRm9yQWNjZXNzR1BSID0gc2NyYXRjaEdQUjsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIC8vIEZvciBwcm94eSBvYmplY3RzLCB3ZSBuZWVkIHRvIGRvIGFsbCB0
aGUgU3RydWN0dXJlIGNoZWNrcyBiZWZvcmUgbW92aW5nIHRoZSBiYXNlR1BSIGludG8KLSAgICAg
ICAgICAgIC8vIGJhc2VGb3JHZXRHUFIgYmVjYXVzZSBpZiB3ZSBmYWlsIGFueSBvZiB0aGUgY2hl
Y2tzIHRoZW4gd2Ugd291bGQgaGF2ZSB0aGUgd3JvbmcgdmFsdWUgaW4gYmFzZUdQUgotICAgICAg
ICAgICAgLy8gb24gdGhlIHNsb3cgcGF0aC4KLSAgICAgICAgICAgIGlmIChsb2FkVGFyZ2V0RnJv
bVByb3h5KQotICAgICAgICAgICAgICAgIHN0dWJKaXQubW92ZShzY3JhdGNoR1BSLCBiYXNlRm9y
R2V0R1BSKTsKLSAgICAgICAgICAgIGJhc2VGb3JBY2Nlc3NHUFIgPSBiYXNlRm9yR2V0R1BSOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgR1BSUmVnIGxvYWRlZFZhbHVlR1BSID0gSW52YWxpZEdQ
UlJlZzsKLSAgICBpZiAoa2luZCA9PSBHZXRVbmRlZmluZWQpCi0gICAgICAgIHN0dWJKaXQubW92
ZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCB2YWx1ZVJlZ3MpOwotICAgIGVsc2UgaWYgKGtp
bmQgIT0gQ2FsbEN1c3RvbUdldHRlciAmJiBraW5kICE9IENhbGxDdXN0b21TZXR0ZXIpIHsKLSAg
ICAgICAgaWYgKGtpbmQgPT0gR2V0VmFsdWUpCi0gICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUiA9
IHZhbHVlUmVncy5wYXlsb2FkR1BSKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGxvYWRl
ZFZhbHVlR1BSID0gc2NyYXRjaEdQUjsKLSAgICAgICAgCi0gICAgICAgIEdQUlJlZyBzdG9yYWdl
R1BSOwotICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgICAgIHN0
b3JhZ2VHUFIgPSBiYXNlRm9yQWNjZXNzR1BSOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlRm9yQWNjZXNzR1BS
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBsb2FkZWRWYWx1ZUdQUik7Ci0gICAgICAg
ICAgICBzdG9yYWdlR1BSID0gbG9hZGVkVmFsdWVHUFI7Ci0gICAgICAgIH0KLSAgICAgICAgCi0j
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgc3R1YkppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc3RvcmFnZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uob2Zmc2V0KSksIGxvYWRl
ZFZhbHVlR1BSKTsKLSNlbHNlCi0gICAgICAgIGlmIChraW5kID09IEdldFZhbHVlKQotICAgICAg
ICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwg
b2Zmc2V0UmVsYXRpdmVUb0Jhc2Uob2Zmc2V0KSArIFRhZ09mZnNldCksIHZhbHVlUmVncy50YWdH
UFIoKSk7Ci0gICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
b3JhZ2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKG9mZnNldCkgKyBQYXlsb2FkT2Zmc2V0KSwg
bG9hZGVkVmFsdWVHUFIpOwotI2VuZGlmCi0gICAgfQotCi0gICAgLy8gU3R1ZmYgZm9yIGN1c3Rv
bSBnZXR0ZXJzLgotICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG9wZXJhdGlvbkNhbGw7Ci0gICAg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgaGFuZGxlckNhbGw7Ci0KLSAgICAvLyBTdHVmZiBmb3IgSlMg
Z2V0dGVycy4KLSAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIGFkZHJlc3NPZkxpbmtG
dW5jdGlvbkNoZWNrOwotICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGZhc3RQYXRoQ2FsbDsKLSAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBzbG93UGF0aENhbGw7Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PENhbGxMaW5rSW5mbz4gY2FsbExpbmtJbmZvOwotCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
c3VjY2VzcywgZmFpbDsKLSAgICBpZiAoa2luZCAhPSBHZXRWYWx1ZSAmJiBraW5kICE9IEdldFVu
ZGVmaW5lZCkgewotICAgICAgICAvLyBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdoZW5ldmVyIHRo
aXMgY2FsbCBpcyBtYWRlIGluIHRoZSBmdXR1cmUsIHdlIHJlbWVtYmVyIHRoZQotICAgICAgICAv
LyBwbGFjZSB0aGF0IHdlIG1hZGUgaXQgZnJvbS4gSXQganVzdCBzbyBoYXBwZW5zIHRvIGJlIHRo
ZSBwbGFjZSB0aGF0IHdlIGFyZSBhdAotICAgICAgICAvLyByaWdodCBub3chCi0gICAgICAgIHN0
dWJKaXQuc3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHN0dWJJbmZvLmNhbGxT
aXRlSW5kZXguYml0cygpKSwKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKHN0YXRp
Y19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKLQotICAg
ICAgICBpZiAoa2luZCA9PSBDYWxsR2V0dGVyIHx8IGtpbmQgPT0gQ2FsbFNldHRlcikgewotICAg
ICAgICAgICAgLy8gQ3JlYXRlIGEgSlMgY2FsbCB1c2luZyBhIEpTIGNhbGwgaW5saW5lIGNhY2hl
LiBBc3N1bWUgdGhhdDoKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyAtIFNQIGlzIGFs
aWduZWQgYW5kIHJlcHJlc2VudHMgdGhlIGV4dGVudCBvZiB0aGUgY2FsbGluZyBjb21waWxlcidz
IHN0YWNrIHVzYWdlLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIC0gRlAgaXMgc2V0
IGNvcnJlY3RseSAoaS5lLiBpdCBwb2ludHMgdG8gdGhlIGNhbGxlcidzIGNhbGwgZnJhbWUgaGVh
ZGVyKS4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyAtIFNQIC0gRlAgaXMgYW4gYWxp
Z25lZCBkaWZmZXJlbmNlLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIC0gQW55IGJ5
dGUgYmV0d2VlbiBGUCAoZXhjbHVzaXZlKSBhbmQgU1AgKGluY2x1c2l2ZSkgY291bGQgYmUgbGl2
ZSBpbiB0aGUgY2FsbGluZwotICAgICAgICAgICAgLy8gICBjb2RlLgotICAgICAgICAgICAgLy8K
LSAgICAgICAgICAgIC8vIFRoZXJlZm9yZSwgd2UgdGVtcG9yYXJpbHkgZ3JvdyB0aGUgc3RhY2sg
Zm9yIHRoZSBwdXJwb3NlIG9mIHRoZSBjYWxsIGFuZCB0aGVuCi0gICAgICAgICAgICAvLyBzaHJp
bmsgaXQgYWZ0ZXIuCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIGNhbGxMaW5rSW5mbyA9IHN0
ZDo6bWFrZV91bmlxdWU8Q2FsbExpbmtJbmZvPigpOwotCi0gICAgICAgICAgICAvLyBGSVhNRTog
SWYgd2UgZ2VuZXJhdGVkIGEgcG9seW1vcnBoaWMgY2FsbCBzdHViIHRoYXQganVtcGVkIGJhY2sg
dG8gdGhlIGdldHRlcgotICAgICAgICAgICAgLy8gc3R1Yiwgd2hpY2ggdGhlbiBqdW1wZWQgYmFj
ayB0byB0aGUgbWFpbiBjb2RlLCB0aGVuIHdlJ2QgaGF2ZSBhIHJlYWNoYWJpbGl0eQotICAgICAg
ICAgICAgLy8gc2l0dWF0aW9uIHRoYXQgdGhlIEdDIGRvZXNuJ3Qga25vdyBhYm91dC4gVGhlIEdD
IHdvdWxkIGVuc3VyZSB0aGF0IHRoZSBwb2x5bW9ycGhpYwotICAgICAgICAgICAgLy8gY2FsbCBz
dHViIHN0YXllZCBhbGl2ZSwgYW5kIGl0IHdvdWxkIGVuc3VyZSB0aGF0IHRoZSBtYWluIGNvZGUg
c3RheWVkIGFsaXZlLCBidXQKLSAgICAgICAgICAgIC8vIGl0IHdvdWxkbid0IGtub3cgdGhhdCB0
aGUgZ2V0dGVyIHN0dWIgd2FzIGFsaXZlLiBJZGVhbGx5IEpJVCBzdHViIHJvdXRpbmVzIHdvdWxk
Ci0gICAgICAgICAgICAvLyBiZSBHQyBvYmplY3RzLCBhbmQgdGhlbiB3ZSdkIGJlIGFibGUgdG8g
c2F5IHRoYXQgdGhlIHBvbHltb3JwaGljIGNhbGwgc3R1YiBoYXMgYQotICAgICAgICAgICAgLy8g
cmVmZXJlbmNlIHRvIHRoZSBnZXR0ZXIgc3R1Yi4KLSAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDg5MTQKLSAgICAgICAgICAgIGNhbGxMaW5r
SW5mby0+ZGlzYWxsb3dTdHVicygpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBjYWxsTGlu
a0luZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNhbGwsIHN0dWJJbmZvLmNvZGVPcmlnaW4s
IGxvYWRlZFZhbHVlR1BSKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0IGRvbmU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFRoZXJlIGlz
IGEgJ3RoaXMnIGFyZ3VtZW50IGJ1dCBub3RoaW5nIGVsc2UuCi0gICAgICAgICAgICB1bnNpZ25l
ZCBudW1iZXJPZlBhcmFtZXRlcnMgPSAxOwotICAgICAgICAgICAgLy8gLi4uIHVubGVzcyB3ZSdy
ZSBjYWxsaW5nIGEgc2V0dGVyLgotICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ2FsbFNldHRlcikK
LSAgICAgICAgICAgICAgICBudW1iZXJPZlBhcmFtZXRlcnMrKzsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgLy8gR2V0IHRoZSBhY2Nlc3NvcjsgaWYgdGhlcmUgYWluJ3Qgb25lIHRoZW4gdGhl
IHJlc3VsdCBpcyBqc1VuZGVmaW5lZCgpLgotICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ2FsbFNl
dHRlcikgewotICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cigKLSAgICAgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobG9hZGVkVmFsdWVHUFIsIEdldHRlclNldHRl
cjo6b2Zmc2V0T2ZTZXR0ZXIoKSksCi0gICAgICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BS
KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRy
KAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhsb2FkZWRWYWx1
ZUdQUiwgR2V0dGVyU2V0dGVyOjpvZmZzZXRPZkdldHRlcigpKSwKLSAgICAgICAgICAgICAgICAg
ICAgbG9hZGVkVmFsdWVHUFIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgcmV0dXJuVW5kZWZpbmVkID0gc3R1YkppdC5icmFuY2hUZXN0UHRyKAotICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBsb2FkZWRWYWx1ZUdQUik7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mUmVnc0ZvckNhbGwgPQotICAg
ICAgICAgICAgICAgIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUgKyBudW1iZXJPZlBhcmFt
ZXRlcnM7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQnl0ZXNG
b3JDYWxsID0KLSAgICAgICAgICAgICAgICBudW1iZXJPZlJlZ3NGb3JDYWxsICogc2l6ZW9mKFJl
Z2lzdGVyKSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgdW5zaWduZWQgYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxsID0KLSAgICAgICAgICAg
ICAgICBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBudW1i
ZXJPZkJ5dGVzRm9yQ2FsbCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN0dWJKaXQuc3Vi
UHRyKAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoYWxpZ25l
ZE51bWJlck9mQnl0ZXNGb3JDYWxsKSwKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyBjYWxsZWVGcmFtZSA9IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAot
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwKLSAg
ICAgICAgICAgICAgICAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVB
bmRQQykpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3R1YkppdC5zdG9yZTMyKAotICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobnVtYmVyT2ZQYXJhbWV0
ZXJzKSwKLSAgICAgICAgICAgICAgICBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KAotICAgICAgICAg
ICAgICAgICAgICBKU1N0YWNrOjpBcmd1bWVudENvdW50ICogc2l6ZW9mKFJlZ2lzdGVyKSArIFBh
eWxvYWRPZmZzZXQpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3R1YkppdC5zdG9yZUNl
bGwoCi0gICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIsIGNhbGxlZUZyYW1lLndpdGhPZmZz
ZXQoSlNTdGFjazo6Q2FsbGVlICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwotCi0gICAgICAgICAgICBz
dHViSml0LnN0b3JlQ2VsbCgKLSAgICAgICAgICAgICAgICBiYXNlRm9yR2V0R1BSLAotICAgICAg
ICAgICAgICAgIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoCi0gICAgICAgICAgICAgICAgICAgIHZp
cnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDApLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSkp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsU2V0dGVyKSB7Ci0g
ICAgICAgICAgICAgICAgc3R1YkppdC5zdG9yZVZhbHVlKAotICAgICAgICAgICAgICAgICAgICB2
YWx1ZVJlZ3MsCi0gICAgICAgICAgICAgICAgICAgIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoCi0g
ICAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxKS5vZmZz
ZXQoKSAqIHNpemVvZihSZWdpc3RlcikpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd0Nhc2UgPSBzdHViSml0LmJyYW5j
aFB0cldpdGhQYXRjaCgKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IGxvYWRlZFZhbHVlR1BSLCBhZGRyZXNzT2ZMaW5rRnVuY3Rpb25DaGVjaywKLSAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigwKSk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGZhc3RQYXRoQ2FsbCA9IHN0dWJKaXQubmVhckNhbGwoKTsKLQotICAgICAgICAg
ICAgc3R1YkppdC5hZGRQdHIoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMihjb2RlQmxvY2stPnN0YWNrUG9pbnRlck9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVy
KSksCi0gICAgICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCi0gICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAg
ICAgIGlmIChraW5kID09IENhbGxHZXR0ZXIpCi0gICAgICAgICAgICAgICAgc3R1YkppdC5zZXR1
cFJlc3VsdHModmFsdWVSZWdzKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZG9uZS5hcHBl
bmQoc3R1YkppdC5qdW1wKCkpOwotICAgICAgICAgICAgc2xvd0Nhc2UubGluaygmc3R1YkppdCk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN0dWJKaXQubW92ZShsb2FkZWRWYWx1ZUdQUiwg
R1BSSW5mbzo6cmVnVDApOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgICAgICBzdHVi
Sml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwg
R1BSSW5mbzo6cmVnVDEpOwotI2VuZGlmCi0gICAgICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvLmdldCgpKSwgR1BSSW5mbzo6cmVn
VDIpOwotICAgICAgICAgICAgc2xvd1BhdGhDYWxsID0gc3R1YkppdC5uZWFyQ2FsbCgpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBzdHViSml0LmFkZFB0cigKLSAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGNvZGVCbG9jay0+c3RhY2tQb2ludGVyT2Zmc2V0
KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwKLSAgICAgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVy
UmVnaXN0ZXIpOwotICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ2FsbEdldHRlcikKLSAgICAgICAg
ICAgICAgICBzdHViSml0LnNldHVwUmVzdWx0cyh2YWx1ZVJlZ3MpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBkb25lLmFwcGVuZChzdHViSml0Lmp1bXAoKSk7Ci0gICAgICAgICAgICByZXR1
cm5VbmRlZmluZWQubGluaygmc3R1YkppdCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
IChraW5kID09IENhbGxHZXR0ZXIpCi0gICAgICAgICAgICAgICAgc3R1YkppdC5tb3ZlVHJ1c3Rl
ZFZhbHVlKGpzVW5kZWZpbmVkKCksIHZhbHVlUmVncyk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIGRvbmUubGluaygmc3R1YkppdCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAv
LyBnZXR0ZXI6IEVuY29kZWRKU1ZhbHVlICgqR2V0VmFsdWVGdW5jKShFeGVjU3RhdGUqLCBKU09i
amVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKTsK
LSAgICAgICAgICAgIC8vIHNldHRlcjogdm9pZCAoKlB1dFZhbHVlRnVuYykoRXhlY1N0YXRlKiwg
SlNPYmplY3QqIGJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IHZhbHVlKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ2Fs
bEN1c3RvbUdldHRlcikKLSAgICAgICAgICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShiYXNlRm9yQWNjZXNzR1BSLCBiYXNlRm9yR2V0R1BSLCBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihwcm9wZXJ0eU5hbWUuaW1wbCgpKSk7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFz
ZUZvckFjY2Vzc0dQUiwgYmFzZUZvckdldEdQUiwgdmFsdWVSZWdzLmdwcigpKTsKLSNlbHNlCi0g
ICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsQ3VzdG9tR2V0dGVyKQotICAgICAgICAgICAgICAg
IHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VGb3JBY2Nlc3NHUFIsIGJh
c2VGb3JHZXRHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRh
ZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHByb3BlcnR5TmFtZS5pbXBsKCkpKTsK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShiYXNlRm9yQWNjZXNzR1BSLCBiYXNlRm9yR2V0R1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQ
UigpLCB2YWx1ZVJlZ3MudGFnR1BSKCkpOwotI2VuZGlmCi0gICAgICAgICAgICBzdHViSml0LnN0
b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAmdm0tPnRvcENhbGxGcmFtZSk7Ci0K
LSAgICAgICAgICAgIG9wZXJhdGlvbkNhbGwgPSBzdHViSml0LmNhbGwoKTsKLSAgICAgICAgICAg
IGlmIChraW5kID09IENhbGxDdXN0b21HZXR0ZXIpCi0gICAgICAgICAgICAgICAgc3R1YkppdC5z
ZXR1cFJlc3VsdHModmFsdWVSZWdzKTsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IG5vRXhjZXB0aW9uID0gc3R1YkppdC5lbWl0RXhjZXB0aW9uQ2hlY2soQ0NhbGxIZWxwZXJzOjpJ
bnZlcnRlZEV4Y2VwdGlvbkNoZWNrKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3R1Ykpp
dC5zZXR1cEFyZ3VtZW50cyhDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodm0pLCBHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgICAgICAgICBoYW5kbGVyQ2FsbCA9IHN0dWJKaXQu
Y2FsbCgpOwotICAgICAgICAgICAgc3R1YkppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIG5vRXhjZXB0aW9uLmxpbmsoJnN0dWJKaXQpOwotICAg
ICAgICB9Ci0gICAgfQotICAgIGVtaXRSZXN0b3JlU2NyYXRjaChzdHViSml0LCBuZWVkVG9SZXN0
b3JlU2NyYXRjaCwgc2NyYXRjaEdQUiwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzKTsKLSAg
ICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgc3R1YkppdCwgZXhlYy0+Y29kZUJs
b2NrKCksIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7Ci0gICAgaWYgKHBhdGNoQnVmZmVyLmRpZEZh
aWxUb0FsbG9jYXRlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBsaW5rUmVz
dG9yZVNjcmF0Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdWNjZXNzLCBm
YWlsLCBmYWlsdXJlQ2FzZXMsIHN1Y2Nlc3NMYWJlbCwgc2xvd0Nhc2VMYWJlbCk7Ci0gICAgaWYg
KGtpbmQgPT0gQ2FsbEN1c3RvbUdldHRlciB8fCBraW5kID09IENhbGxDdXN0b21TZXR0ZXIpIHsK
LSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhvcGVyYXRpb25DYWxsLCBjdXN0b20pOwotICAgICAg
ICBwYXRjaEJ1ZmZlci5saW5rKGhhbmRsZXJDYWxsLCBsb29rdXBFeGNlcHRpb25IYW5kbGVyKTsK
LSAgICB9IGVsc2UgaWYgKGtpbmQgPT0gQ2FsbEdldHRlciB8fCBraW5kID09IENhbGxTZXR0ZXIp
IHsKLSAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKHBhdGNoQnVmZmVyLmxv
Y2F0aW9uT2ZOZWFyQ2FsbChzbG93UGF0aENhbGwpLAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIu
bG9jYXRpb25PZihhZGRyZXNzT2ZMaW5rRnVuY3Rpb25DaGVjayksCi0gICAgICAgICAgICBwYXRj
aEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoZmFzdFBhdGhDYWxsKSk7Ci0KLSAgICAgICAgcGF0
Y2hCdWZmZXIubGluaygKLSAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCwgQ29kZUxvY2F0aW9uTGFi
ZWwodm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7Ci0gICAg
fQotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlID0gRklOQUxJWkVfQ09ERV9G
T1IoCi0gICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLCBwYXRjaEJ1ZmZlciwKLSAgICAgICAgKCIl
cyBhY2Nlc3Mgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICAgICB0b1N0
cmluZyhraW5kKSwgdG9DU3RyaW5nKCpleGVjLT5jb2RlQmxvY2soKSkuZGF0YSgpLAotICAgICAg
ICAgICAgc3VjY2Vzc0xhYmVsLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKLSAgICAKLSAgICBpZiAo
a2luZCA9PSBDYWxsR2V0dGVyIHx8IGtpbmQgPT0gQ2FsbFNldHRlcikKLSAgICAgICAgc3R1YlJv
dXRpbmUgPSBhZG9wdFJlZihuZXcgQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUoY29kZSwgKnZt
LCBXVEY6Om1vdmUoY2FsbExpbmtJbmZvKSkpOwotICAgIGVsc2UKLSAgICAgICAgc3R1YlJvdXRp
bmUgPSBjcmVhdGVKSVRTdHViUm91dGluZShjb2RlLCAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksIHRydWUpOwotICAgIAotICAgIHJldHVybiB0cnVlOwotfQotCiBlbnVtIElubGlu
ZUNhY2hlQWN0aW9uIHsKICAgICBHaXZlVXBPbkNhY2hlLAogICAgIFJldHJ5Q2FjaGVMYXRlciwK
QEAgLTYyOSwxMzIgKzIxNiw5OCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVH
ZXRCeUlECiAgICAgaWYgKE9wdGlvbnM6OmZvcmNlSUNGYWlsdXJlKCkpCiAgICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOwogICAgIAotICAgIC8vIEZJWE1FOiBXcml0ZSBhIHRlc3QgdGhhdCBw
cm92ZXMgd2UgbmVlZCB0byBjaGVjayBmb3IgcmVjdXJzaW9uIGhlcmUganVzdAotICAgIC8vIGxp
a2UgdGhlIGludGVycHJldGVyIGRvZXMsIHRoZW4gYWRkIGEgY2hlY2sgZm9yIHJlY3Vyc2lvbi4K
KyAgICAvLyBGSVhNRTogQ2FjaGUgcHJvcGVydHkgYWNjZXNzIGZvciBpbW1lZGlhdGVzLgorICAg
IGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQorICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsK
IAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7CisgICAgU2NyaXB0RXhlY3V0YWJsZSogb3duZXIgPSBjb2RlQmxv
Y2stPm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAK
LSAgICBpZiAoKGlzSlNBcnJheShiYXNlVmFsdWUpIHx8IGlzSlNTdHJpbmcoYmFzZVZhbHVlKSkg
JiYgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKLSAgICAg
ICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmJh
c2VHUFIpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIEdQUlJlZyByZXN1bHRUYWdH
UFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVlVGFnR1BSKTsKLSNl
bmRpZgotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHVi
SW5mby5wYXRjaC52YWx1ZUdQUik7Ci0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXIgc3R1YkppdDsK
LQotICAgICAgICBpZiAoaXNKU0FycmF5KGJhc2VWYWx1ZSkpIHsKLSAgICAgICAgICAgIEdQUlJl
ZyBzY3JhdGNoR1BSID0gVGVtcFJlZ2lzdGVyU2V0KHN0dWJJbmZvLnBhdGNoLnVzZWRSZWdpc3Rl
cnMpLmdldEZyZWVHUFIoKTsKLSAgICAgICAgICAgIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2gg
PSBmYWxzZTsKLQotICAgICAgICAgICAgaWYgKHNjcmF0Y2hHUFIgPT0gSW52YWxpZEdQUlJlZykg
ewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICAgICAgc2NyYXRjaEdQUiA9IEFzc2Vt
Ymx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCByZXN1bHRHUFIpOwotI2Vsc2UK
LSAgICAgICAgICAgICAgICBzY3JhdGNoR1BSID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3Jh
dGNoR1BSKGJhc2VHUFIsIHJlc3VsdEdQUiwgcmVzdWx0VGFnR1BSKTsKLSNlbmRpZgotICAgICAg
ICAgICAgICAgIHN0dWJKaXQucHVzaFRvU2F2ZShzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAg
ICBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7Ci0KLSAgICAgICAgICAg
IHN0dWJKaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpp
bmRleGluZ1R5cGVPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgZmFpbHVyZUNh
c2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2Ny
YXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihJc0FycmF5KSkpOwotICAgICAg
ICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2Vt
Ymxlcjo6WmVybywgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihJbmRl
eGluZ1NoYXBlTWFzaykpKTsKLQotICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNj
cmF0Y2hHUFIpOwotICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHNjcmF0Y2hH
UFIpOwotICAgICAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMigwKSkpOwotCi0gICAgICAgICAgICBzdHViSml0Lm1vdmUoc2NyYXRjaEdQUiwgcmVz
dWx0R1BSKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgc3R1YkppdC5vcjY0KEFz
c2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpLCByZXN1bHRHUFIpOwot
I2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgICAgIHN0dWJKaXQubW92ZShBc3NlbWJs
eUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHJlc3VsdFRhZ0dQUik7
Ci0jZW5kaWYKLQotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzcywgZmFp
bDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gbmV3Q2FzZTsKIAotICAgICAgICAg
ICAgZW1pdFJlc3RvcmVTY3JhdGNoKHN0dWJKaXQsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzY3Jh
dGNoR1BSLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgc3R1YkppdCwgY29kZUJsb2NrLCBK
SVRDb21waWxhdGlvbkNhbkZhaWwpOwotICAgICAgICAgICAgaWYgKHBhdGNoQnVmZmVyLmRpZEZh
aWxUb0FsbG9jYXRlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0K
LSAgICAgICAgICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVzdG9y
ZVNjcmF0Y2gsIHN0dWJJbmZvLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMpOwotCi0gICAg
ICAgICAgICBzdHViSW5mby5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0g
ICAgICAgICAgICAgICAgZXhlYy0+Y29kZUJsb2NrKCksIHBhdGNoQnVmZmVyLAotICAgICAgICAg
ICAgICAgICgiR2V0QnlJZCBhcnJheSBsZW5ndGggc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAl
cCIsCi0gICAgICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRh
dGEoKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCi0gICAgICAg
ICAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpKTsKLQotICAgICAgICAgICAgcmVwbGFjZVdpdGhKdW1wKHN0dWJJbmZvLCBz
dHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7Ci0gICAgICAgICAgICByZXBhdGNo
Q2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0
QnlJZCk7CisgICAgaWYgKGlzSlNBcnJheShiYXNlVmFsdWUpICYmIHByb3BlcnR5TmFtZSA9PSBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKQorICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2Fz
ZTo6Z2V0TGVuZ3RoKHZtLCBvd25lciwgQWNjZXNzQ2FzZTo6QXJyYXlMZW5ndGgpOworICAgIGVs
c2UgaWYgKGlzSlNTdHJpbmcoYmFzZVZhbHVlKSAmJiBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJv
cGVydHlOYW1lcygpLmxlbmd0aCkKKyAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmdldExl
bmd0aCh2bSwgb3duZXIsIEFjY2Vzc0Nhc2U6OlN0cmluZ0xlbmd0aCk7CisgICAgZWxzZSB7Cisg
ICAgICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZSgpICYmICFzbG90LmlzVW5zZXQoKSkKKyAgICAg
ICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogCisgICAgICAgIEpTQ2VsbCogYmFzZUNlbGwg
PSBiYXNlVmFsdWUuYXNDZWxsKCk7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFz
ZUNlbGwtPnN0cnVjdHVyZSh2bSk7CisgICAgICAgIAorICAgICAgICAvLyBPcHRpbWl6ZSBzZWxm
IGFjY2Vzcy4KKyAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlVu
c2V0CisgICAgICAgICAgICAmJiBzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKQorICAgICAgICAgICAg
JiYgc2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZQorICAgICAgICAgICAgJiYgIXNsb3Qud2F0
Y2hwb2ludFNldCgpCisgICAgICAgICAgICAmJiBNYWNyb0Fzc2VtYmxlcjo6aXNDb21wYWN0UHRy
QWxpZ25lZEFkZHJlc3NPZmZzZXQobWF4T2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKHNs
b3QuY2FjaGVkT2Zmc2V0KCkpKQorICAgICAgICAgICAgJiYgYWN0aW9uRm9yQ2VsbCh2bSwgYmFz
ZUNlbGwpID09IEF0dGVtcHRUb0NhY2hlCisgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5uZWVk
SW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKKyAgICAgICAgICAgIHN0cnVjdHVyZS0+c3Rh
cnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgp
KTsKKyAgICAgICAgICAgIHJlcGF0Y2hCeUlkU2VsZkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZv
LCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6
ZSwgdHJ1ZSk7CisgICAgICAgICAgICBzdHViSW5mby5pbml0R2V0QnlJZFNlbGYodm0sIGNvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7
CiAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogICAgICAgICB9CiAKLSAgICAg
ICAgLy8gU3RyaW5nLmxlbmd0aCBjYXNlCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZh
aWx1cmUgPSBzdHViSml0LmJyYW5jaDgoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihTdHJpbmdUeXBlKSk7Ci0KLSAgICAgICAgc3R1
YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNTdHJpbmc6Om9m
ZnNldE9mTGVuZ3RoKCkpLCByZXN1bHRHUFIpOwotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAg
ICAgc3R1YkppdC5vcjY0KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1i
ZXIpLCByZXN1bHRHUFIpOwotI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgc3R1Ykpp
dC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwg
cmVzdWx0VGFnR1BSKTsKLSNlbmRpZgorICAgICAgICBib29sIGxvYWRUYXJnZXRGcm9tUHJveHkg
PSBmYWxzZTsKKyAgICAgICAgaWYgKGJhc2VDZWxsLT50eXBlKCkgPT0gUHVyZUZvcndhcmRpbmdQ
cm94eVR5cGUpIHsKKyAgICAgICAgICAgIGJhc2VWYWx1ZSA9IGpzQ2FzdDxKU1Byb3h5Kj4oYmFz
ZUNlbGwpLT50YXJnZXQoKTsKKyAgICAgICAgICAgIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2Vs
bCgpOworICAgICAgICAgICAgc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSh2bSk7Cisg
ICAgICAgICAgICBsb2FkVGFyZ2V0RnJvbVByb3h5ID0gdHJ1ZTsKKyAgICAgICAgfQogCi0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKKyAgICAg
ICAgSW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9uID0gYWN0aW9uRm9yQ2VsbCh2bSwgYmFzZUNlbGwp
OworICAgICAgICBpZiAoYWN0aW9uICE9IEF0dGVtcHRUb0NhY2hlKQorICAgICAgICAgICAgcmV0
dXJuIGFjdGlvbjsKIAotICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgc3R1Ykpp
dCwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwotICAgICAgICBpZiAocGF0Y2hC
dWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90LmlzVW5zZXQoKSA/IGlu
dmFsaWRPZmZzZXQgOiBzbG90LmNhY2hlZE9mZnNldCgpOwogICAgICAgICAKLSAgICAgICAgcGF0
Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxB
dE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpKTsKLSAgICAgICAgcGF0Y2hC
dWZmZXIubGluayhmYWlsdXJlLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9m
ZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7Ci0KLSAgICAgICAgc3R1
YkluZm8uc3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAotICAgICAgICAgICAg
ZXhlYy0+Y29kZUJsb2NrKCksIHBhdGNoQnVmZmVyLAotICAgICAgICAgICAgKCJHZXRCeUlkIHN0
cmluZyBsZW5ndGggc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICAgICAg
ICAgdG9DU3RyaW5nKCpleGVjLT5jb2RlQmxvY2soKSkuZGF0YSgpLCBzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgKLSAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8u
cGF0Y2guZGVsdGFDYWxsVG9Eb25lKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgICAgIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAgICAgICAgaWYgKHNsb3Qu
aXNVbnNldCgpIHx8IHNsb3Quc2xvdEJhc2UoKSAhPSBiYXNlVmFsdWUpIHsKKyAgICAgICAgICAg
IGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkucHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCkgfHwg
c3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVw
T25DYWNoZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHNsb3QuaXNVbnNldCgpKSB7
CisgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJv
cGVydHlNaXNzKAorICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUuaW1wbCgpKTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25k
aXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCisgICAgICAgICAgICAgICAgICAgIHZtLCBj
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3Quc2xvdEJh
c2UoKSwKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lLmltcGwoKSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFs
aWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgb2Zmc2V0ID0gc2xvdC5pc1Vuc2V0KCkgPyBpbnZhbGlkT2Zmc2V0IDog
Y29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCk7CisgICAgICAgIH0KIAot
ICAgICAgICByZXBsYWNlV2l0aEp1bXAoc3R1YkluZm8sIHN0dWJJbmZvLnN0dWJSb3V0aW5lLT5j
b2RlKCkuY29kZSgpKTsKLSAgICAgICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWQpOworICAgICAgICBBY2Nlc3NDYXNl
OjpBY2Nlc3NUeXBlIHR5cGU7CisgICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSkK
KyAgICAgICAgICAgIHR5cGUgPSBBY2Nlc3NDYXNlOjpMb2FkOworICAgICAgICBlbHNlIGlmIChz
bG90LmlzVW5zZXQoKSkKKyAgICAgICAgICAgIHR5cGUgPSBBY2Nlc3NDYXNlOjpNaXNzOworICAg
ICAgICBlbHNlIGlmIChzbG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkpCisgICAgICAgICAgICB0eXBl
ID0gQWNjZXNzQ2FzZTo6R2V0dGVyOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0eXBlID0g
QWNjZXNzQ2FzZTo6Q3VzdG9tR2V0dGVyOwogCi0gICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0
ZXI7CisgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpnZXQoCisgICAgICAgICAgICB2bSwg
b3duZXIsIHR5cGUsIG9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIGxvYWRUYXJnZXRG
cm9tUHJveHksCisgICAgICAgICAgICBzbG90LndhdGNocG9pbnRTZXQoKSwgc2xvdC5pc0NhY2hl
YWJsZUN1c3RvbSgpID8gc2xvdC5jdXN0b21HZXR0ZXIoKSA6IG51bGxwdHIpOwogICAgIH0KIAot
ICAgIC8vIEZJWE1FOiBDYWNoZSBwcm9wZXJ0eSBhY2Nlc3MgZm9yIGltbWVkaWF0ZXMuCi0gICAg
aWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCi0gICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwor
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyID0gc3R1YkluZm8uYWRkQWNjZXNzQ2Fz
ZSgKKyAgICAgICAgdm0sIGNvZGVCbG9jaywgcHJvcGVydHlOYW1lLCBzdGQ6Om1vdmUobmV3Q2Fz
ZSkpOwogCi0gICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkgJiYgIXNsb3QuaXNVbnNldCgpKQor
ICAgIGlmICghY29kZVB0cikKICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAKLSAgICBK
U0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwotICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSgqdm0pOwotCi0gICAgSW5saW5lQ2FjaGVBY3Rp
b24gYWN0aW9uID0gYWN0aW9uRm9yQ2VsbCgqdm0sIGJhc2VDZWxsKTsKLSAgICBpZiAoYWN0aW9u
ICE9IEF0dGVtcHRUb0NhY2hlKQotICAgICAgICByZXR1cm4gYWN0aW9uOwotCi0gICAgLy8gT3B0
aW1pemUgc2VsZiBhY2Nlc3MuCi0gICAgaWYgKHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpCi0gICAg
ICAgICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUKLSAgICAgICAgJiYgIXNsb3Qud2F0
Y2hwb2ludFNldCgpCi0gICAgICAgICYmIE1hY3JvQXNzZW1ibGVyOjppc0NvbXBhY3RQdHJBbGln
bmVkQWRkcmVzc09mZnNldChtYXhPZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uoc2xvdC5j
YWNoZWRPZmZzZXQoKSkpKSB7Ci0gICAgICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3Bl
cnR5Rm9yUmVwbGFjZW1lbnRzKCp2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7Ci0gICAgICAgIHJl
cGF0Y2hCeUlkU2VsZkFjY2Vzcygqdm0sIGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwg
cHJvcGVydHlOYW1lLCBzbG90LmNhY2hlZE9mZnNldCgpLCBvcGVyYXRpb25HZXRCeUlkQnVpbGRM
aXN0LCB0cnVlKTsKLSAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRTZWxmKCp2bSwgY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKLSAgICAgICAgcmV0dXJuIFJldHJ5
Q2FjaGVMYXRlcjsKLSAgICB9Ci0KLSAgICByZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlzdCk7CisgICAgcmVw
bGFjZVdpdGhKdW1wKHN0dWJJbmZvLCBjb2RlUHRyKTsKKyAgICAKICAgICByZXR1cm4gUmV0cnlD
YWNoZUxhdGVyOwogfQogCkBAIC03NjYsMTEyICszMTksNiBAQCB2b2lkIHJlcGF0Y2hHZXRCeUlE
KEV4ZWNTdGF0ZSogZXhlYywgSlNWCiAgICAgICAgIHJlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9j
aygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWQpOwogfQog
Ci1zdGF0aWMgdm9pZCBwYXRjaEp1bXBUb0dldEJ5SWRTdHViKFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbywgSklUU3R1YlJvdXRpbmUqIHN0dWJSb3V0aW5lKQotewotICAgIFJFTEVBU0VfQVNT
RVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9saXN0KTsKLSAgICBp
ZiAoc3R1YkluZm8udS5nZXRCeUlkTGlzdC5saXN0LT5kaWRTZWxmUGF0Y2hpbmcoKSkgewotICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoCi0gICAgICAgICAgICBzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KAotICAgICAgICAgICAgICAgIHN0dWJJbmZv
LnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksCi0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChz
dHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IAotICAgIHJlcGxhY2VXaXRoSnVtcChzdHViSW5mbywgc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2Rl
KCkpOwotfQotCi1zdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVpbGRHZXRCeUlETGlzdChF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVu
dCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8p
Ci17Ci0gICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkKLSAgICAgICAgfHwgKCFzbG90LmlzQ2Fj
aGVhYmxlKCkgJiYgIXNsb3QuaXNVbnNldCgpKSkKLSAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7Ci0KLSAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwotICAgIGJv
b2wgbG9hZFRhcmdldEZyb21Qcm94eSA9IGZhbHNlOwotICAgIGlmIChiYXNlQ2VsbC0+dHlwZSgp
ID09IFB1cmVGb3J3YXJkaW5nUHJveHlUeXBlKSB7Ci0gICAgICAgIGJhc2VWYWx1ZSA9IGpzQ2Fz
dDxKU1Byb3h5Kj4oYmFzZUNlbGwpLT50YXJnZXQoKTsKLSAgICAgICAgYmFzZUNlbGwgPSBiYXNl
VmFsdWUuYXNDZWxsKCk7Ci0gICAgICAgIGxvYWRUYXJnZXRGcm9tUHJveHkgPSB0cnVlOwotICAg
IH0KLQotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0KLSAgICBJbmxpbmVDYWNoZUFjdGlvbiBhY3Rpb24gPSBh
Y3Rpb25Gb3JDZWxsKCp2bSwgYmFzZUNlbGwpOwotICAgIGlmIChhY3Rpb24gIT0gQXR0ZW1wdFRv
Q2FjaGUpCi0gICAgICAgIHJldHVybiBhY3Rpb247Ci0KLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKnZtKTsKLSAgICBUeXBlSW5mbyB0eXBlSW5mbyA9IHN0
cnVjdHVyZS0+dHlwZUluZm8oKTsKLQotICAgIGlmIChzdHViSW5mby5wYXRjaC5zcGlsbE1vZGUg
PT0gTmVlZFRvU3BpbGwpIHsKLSAgICAgICAgLy8gV2UgY2Fubm90IGRvIGFzIG11Y2ggaW5saW5l
IGNhY2hpbmcgaWYgdGhlIHJlZ2lzdGVycyB3ZXJlIG5vdCBmbHVzaGVkIHByaW9yIHRvIHRoaXMg
R2V0QnlJZC4gSW4gcGFydGljdWxhciwKLSAgICAgICAgLy8gbm9uLVZhbHVlIGNhY2hlZCBwcm9w
ZXJ0aWVzIHJlcXVpcmUgcGxhbnRpbmcgY2FsbHMsIHdoaWNoIHJlcXVpcmVzIHJlZ2lzdGVycyB0
byBoYXZlIGJlZW4gZmx1c2hlZC4gVGh1cywKLSAgICAgICAgLy8gaWYgcmVnaXN0ZXJzIHdlcmUg
bm90IGZsdXNoZWQsIGRvbid0IGRvIG5vbi1WYWx1ZSBjYWNoaW5nLgotICAgICAgICBpZiAoIXNs
b3QuaXNDYWNoZWFibGVWYWx1ZSgpICYmICFzbG90LmlzVW5zZXQoKSkKLSAgICAgICAgICAgIHJl
dHVybiBHaXZlVXBPbkNhY2hlOwotICAgIH0KLQotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9
IHNsb3QuaXNVbnNldCgpID8gaW52YWxpZE9mZnNldCA6IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0g
ICAgCi0gICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OwotICAgIGlm
IChzbG90LmlzVW5zZXQoKSB8fCBzbG90LnNsb3RCYXNlKCkgIT0gYmFzZVZhbHVlKSB7Ci0gICAg
ICAgIGlmICh0eXBlSW5mby5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKSB8fCBzdHJ1Y3R1cmUt
PmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAg
ICAgICAgaWYgKHNsb3QuaXNVbnNldCgpKQotICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2Vu
ZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNzKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBpZGVudC5pbXBsKCkpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQ
cm9wZXJ0eUhpdCgqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVj
dHVyZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudC5pbXBsKCkpOwotCi0gICAgICAgIGlmICghY29u
ZGl0aW9uU2V0LmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwot
Ci0gICAgICAgIG9mZnNldCA9IHNsb3QuaXNVbnNldCgpID8gaW52YWxpZE9mZnNldCA6IGNvbmRp
dGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpOwotICAgIH0KLSAgICAKLSAgICBQ
b2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0ID0gUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6ZnJv
bShzdHViSW5mbyk7Ci0gICAgaWYgKGxpc3QtPmlzRnVsbCgpKSB7Ci0gICAgICAgIC8vIFdlIG5l
ZWQgdGhpcyBleHRyYSBjaGVjayBiZWNhdXNlIG9mIHJlY3Vyc2lvbi4KLSAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7Ci0gICAgfQotICAgIAotICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4g
c3R1YlJvdXRpbmU7Ci0gICAgYm9vbCByZXN1bHQgPSBnZW5lcmF0ZUJ5SWRTdHViKAotICAgICAg
ICBleGVjLCBraW5kRm9yKHNsb3QpLCBpZGVudCwgY3VzdG9tRm9yKHNsb3QpLCBzdHViSW5mbywg
Y29uZGl0aW9uU2V0LCBzbG90LnNsb3RCYXNlKCksIG9mZnNldCwgCi0gICAgICAgIHN0cnVjdHVy
ZSwgbG9hZFRhcmdldEZyb21Qcm94eSwgc2xvdC53YXRjaHBvaW50U2V0KCksIAotICAgICAgICBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5k
ZWx0YUNhbGxUb0RvbmUpLAotICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChsaXN0LT5jdXJyZW50
U2xvd1BhdGhUYXJnZXQoc3R1YkluZm8pKSwgc3R1YlJvdXRpbmUpOwotICAgIGlmICghcmVzdWx0
KQotICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAKLSAgICBHZXRCeUlkQWNjZXNz
OjpBY2Nlc3NUeXBlIGFjY2Vzc1R5cGU7Ci0gICAgaWYgKHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgp
KQotICAgICAgICBhY2Nlc3NUeXBlID0gc2xvdC53YXRjaHBvaW50U2V0KCkgPyBHZXRCeUlkQWNj
ZXNzOjpXYXRjaGVkU3R1YiA6IEdldEJ5SWRBY2Nlc3M6OlNpbXBsZVN0dWI7Ci0gICAgZWxzZSBp
ZiAoc2xvdC5pc1Vuc2V0KCkpCi0gICAgICAgIGFjY2Vzc1R5cGUgPSBHZXRCeUlkQWNjZXNzOjpT
aW1wbGVNaXNzOwotICAgIGVsc2UgaWYgKHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIoKSkKLSAgICAg
ICAgYWNjZXNzVHlwZSA9IEdldEJ5SWRBY2Nlc3M6OkdldHRlcjsKLSAgICBlbHNlCi0gICAgICAg
IGFjY2Vzc1R5cGUgPSBHZXRCeUlkQWNjZXNzOjpDdXN0b21HZXR0ZXI7Ci0gICAgCi0gICAgbGlz
dC0+YWRkQWNjZXNzKEdldEJ5SWRBY2Nlc3MoCi0gICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwgYWNjZXNzVHlwZSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwKLSAgICAg
ICAgY29uZGl0aW9uU2V0KSk7Ci0gICAgCi0gICAgcGF0Y2hKdW1wVG9HZXRCeUlkU3R1YihzdHVi
SW5mbywgc3R1YlJvdXRpbmUuZ2V0KCkpOwotICAgIAotICAgIHJldHVybiBsaXN0LT5pc0Z1bGwo
KSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7Ci19Ci0KLXZvaWQgYnVpbGRHZXRC
eUlETGlzdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvKQotewotICAgIEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2Vy
KGV4ZWMtPmNvZGVCbG9jaygpLT5tX2xvY2ssIGV4ZWMtPnZtKCkuaGVhcCk7Ci0gICAgCi0gICAg
aWYgKHRyeUJ1aWxkR2V0QnlJRExpc3QoZXhlYywgYmFzZVZhbHVlLCBwcm9wZXJ0eU5hbWUsIHNs
b3QsIHN0dWJJbmZvKSA9PSBHaXZlVXBPbkNhY2hlKQotICAgICAgICByZXBhdGNoQ2FsbChleGVj
LT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRC
eUlkKTsKLX0KLQogc3RhdGljIFZfSklUT3BlcmF0aW9uX0VTc2lKSkkgYXBwcm9wcmlhdGVHZW5l
cmljUHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5U2xvdCAmc2xvdCwgUHV0S2luZCBw
dXRLaW5kKQogewogICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKSB7CkBAIC04ODQsMzU5ICsz
MzEsMTYgQEAgc3RhdGljIFZfSklUT3BlcmF0aW9uX0VTc2lKSkkgYXBwcm9wcmlhdAogICAgIHJl
dHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0OwogfQogCi1zdGF0aWMgVl9KSVRPcGVyYXRp
b25fRVNzaUpKSSBhcHByb3ByaWF0ZUxpc3RCdWlsZGluZ1B1dEJ5SWRGdW5jdGlvbihjb25zdCBQ
dXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEtpbmQgcHV0S2luZCkKK3N0YXRpYyBWX0pJVE9wZXJh
dGlvbl9FU3NpSkpJIGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbihjb25zdCBQ
dXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEtpbmQgcHV0S2luZCkKIHsKICAgICBpZiAoc2xvdC5p
c1N0cmljdE1vZGUoKSkgewogICAgICAgICBpZiAocHV0S2luZCA9PSBEaXJlY3QpCi0gICAgICAg
ICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdEJ1aWxkTGlzdDsKLSAgICAg
ICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RCdWlsZExpc3Q7CisgICAgICAgICAgICBy
ZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOworICAgICAgICByZXR1
cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOwogICAgIH0KICAgICBpZiAocHV0S2lu
ZCA9PSBEaXJlY3QpCi0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3Ry
aWN0QnVpbGRMaXN0OwotICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0QnVpbGRM
aXN0OwotfQotCi1zdGF0aWMgYm9vbCBlbWl0UHV0UmVwbGFjZVN0dWIoCi0gICAgRXhlY1N0YXRl
KiBleGVjLAotICAgIGNvbnN0IElkZW50aWZpZXImLAotICAgIGNvbnN0IFB1dFByb3BlcnR5U2xv
dCYgc2xvdCwKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCi0gICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZmFpbHVyZUxhYmVsLAotICAgIFJl
ZlB0cjxKSVRTdHViUm91dGluZT4mIHN0dWJSb3V0aW5lKQotewotICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOwotICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5m
by5wYXRjaC5iYXNlR1BSKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIEdQUlJlZyB2YWx1
ZVRhZ0dQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVUYWdHUFIp
OwotI2VuZGlmCi0gICAgR1BSUmVnIHZhbHVlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHVi
SW5mby5wYXRjaC52YWx1ZUdQUik7Ci0KLSAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxs
b2NhdG9yKHN0dWJJbmZvLnBhdGNoLnVzZWRSZWdpc3RlcnMpOwotICAgIGFsbG9jYXRvci5sb2Nr
KGJhc2VHUFIpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgYWxsb2NhdG9yLmxvY2sodmFs
dWVUYWdHUFIpOwotI2VuZGlmCi0gICAgYWxsb2NhdG9yLmxvY2sodmFsdWVHUFIpOwotICAgIAot
ICAgIEdQUlJlZyBzY3JhdGNoR1BSMSA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsK
LQotICAgIENDYWxsSGVscGVycyBzdHViSml0KHZtLCBleGVjLT5jb2RlQmxvY2soKSk7Ci0KLSAg
ICBzaXplX3QgbnVtYmVyT2ZQYWRkaW5nQnl0ZXMgPSBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRS
ZWdpc3RlcnNCeVB1c2hpbmcoc3R1YkppdCk7Ci0KLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBi
YWRTdHJ1Y3R1cmUgPSBzdHViSml0LmJyYW5jaFN0cnVjdHVyZSgKLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAotICAgICAgICBzdHJ1Y3R1cmUpOwotCi0j
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZz
ZXQoKSkpCi0gICAgICAgIHN0dWJKaXQuc3RvcmU2NCh2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zm
c2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUp
KSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BS
MSk7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmU2NCh2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkp
ICogc2l6ZW9mKEpTVmFsdWUpKSk7Ci0gICAgfQotI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAg
ICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpIHsKLSAgICAgICAgc3R1
YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uo
c2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
RW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7Ci0gICAgICAgIHN0dWJK
aXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdl
KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9G
KEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgc3R1Ykpp
dC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwg
b2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkg
KyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQp
KSk7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0
KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2Ny
aXB0b3IsIGFzQml0cy50YWcpKSk7Ci0gICAgfQotI2VuZGlmCi0gICAgCi0gICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgc3VjY2VzczsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsdXJlOwot
ICAgIAotICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMoKSkgewotICAgICAgICBh
bGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhzdHViSml0LCBudW1iZXJP
ZlBhZGRpbmdCeXRlcyk7Ci0gICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKLSAgICAg
ICAgCi0gICAgICAgIGJhZFN0cnVjdHVyZS5saW5rKCZzdHViSml0KTsKLSAgICAgICAgYWxsb2Nh
dG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoc3R1YkppdCwgbnVtYmVyT2ZQYWRk
aW5nQnl0ZXMpOwotICAgICAgICBmYWlsdXJlID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOwotICAgICAgICBmYWlsdXJlID0g
YmFkU3RydWN0dXJlOwotICAgIH0KLSAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2
bSwgc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCksIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7Ci0g
ICAgaWYgKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9u
ZSkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZSwgZmFpbHVyZUxhYmVsKTsKLSAgICAg
ICAgICAgIAotICAgIHN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKLSAgICAg
ICAgZXhlYy0+Y29kZUJsb2NrKCksIHBhdGNoQnVmZmVyLAotICAgICAgICAoIlB1dEJ5SWQgcmVw
bGFjZSBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAgICAgICAgIHRvQ1N0cmlu
ZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxs
VG9Eb25lKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLXN0YXRpYyBib29sIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKLSAgICBFeGVjU3RhdGUqIGV4
ZWMsIFZNKiB2bSwgU3RydWN0dXJlKiYgc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVu
dCwgCi0gICAgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCwKLSAgICBTdHJ1Y3R1cmUqJiBvbGRTdHJ1Y3R1cmUs
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCi17Ci0gICAgUHJvcGVy
dHlOYW1lIHBuYW1lKGlkZW50KTsKLSAgICBvbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAg
aWYgKCFvbGRTdHJ1Y3R1cmUtPmlzT2JqZWN0KCkgfHwgb2xkU3RydWN0dXJlLT5pc0RpY3Rpb25h
cnkoKSB8fCBwYXJzZUluZGV4KHBuYW1lKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
UHJvcGVydHlPZmZzZXQgcHJvcGVydHlPZmZzZXQ7Ci0gICAgc3RydWN0dXJlID0gU3RydWN0dXJl
OjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KG9s
ZFN0cnVjdHVyZSwgaWRlbnQuaW1wbCgpLCAwLCBwcm9wZXJ0eU9mZnNldCk7Ci0KLSAgICBpZiAo
IXN0cnVjdHVyZSB8fCAhc3RydWN0dXJlLT5pc09iamVjdCgpIHx8IHN0cnVjdHVyZS0+aXNEaWN0
aW9uYXJ5KCkgfHwgIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBTa2lwIG9wdGltaXppbmcgdGhlIGNhc2Ug
d2hlcmUgd2UgbmVlZCBhIHJlYWxsb2MsIGlmIHdlIGRvbid0IGhhdmUKLSAgICAvLyBlbm91Z2gg
cmVnaXN0ZXJzIHRvIG1ha2UgaXQgaGFwcGVuLgotICAgIGlmIChHUFJJbmZvOjpudW1iZXJPZlJl
Z2lzdGVycyA8IDYKLSAgICAgICAgJiYgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
ICE9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKQotICAgICAgICAmJiBvbGRTdHJ1Y3R1
cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIHJlYWxsb2Ms
IGFuZCB0aGUgc3RydWN0dXJlIGhhcwotICAgIC8vIGluZGV4aW5nIHN0b3JhZ2UuCi0gICAgLy8g
RklYTUU6IFdlIHNob3VsZG4ndCBza2lwIHRoaXMhIEltcGxlbWVudCBpdCEKLSAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMwOTE0Ci0gICAgaWYgKG9sZFN0
cnVjdHVyZS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgaWYgKHB1dEtpbmQgPT0gTm90RGlyZWN0KSB7Ci0gICAgICAgIGNvbmRpdGlvblNl
dCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzcygKLSAgICAgICAgICAg
ICp2bSwgZXhlYy0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1
cmUsIGlkZW50LmltcGwoKSk7Ci0gICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBDb2RlTG9jYXRpb25MYWJl
bCBmYWlsdXJlTGFiZWwgPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNl
dChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKLSAgICBSZWZQdHI8SklUU3R1
YlJvdXRpbmU+JiBzdHViUm91dGluZSA9IHN0dWJJbmZvLnN0dWJSb3V0aW5lOwotCi0gICAgR1BS
UmVnIGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmJhc2VHUFIp
OwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgR1BSUmVnIHZhbHVlVGFnR1BSID0gc3RhdGlj
X2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZVRhZ0dQUik7Ci0jZW5kaWYKLSAgICBH
UFJSZWcgdmFsdWVHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVl
R1BSKTsKLSAgICAKLSAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHN0dWJJ
bmZvLnBhdGNoLnVzZWRSZWdpc3RlcnMpOwotICAgIGFsbG9jYXRvci5sb2NrKGJhc2VHUFIpOwot
I2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgYWxsb2NhdG9yLmxvY2sodmFsdWVUYWdHUFIpOwot
I2VuZGlmCi0gICAgYWxsb2NhdG9yLmxvY2sodmFsdWVHUFIpOwotICAgIAotICAgIENDYWxsSGVs
cGVycyBzdHViSml0KHZtKTsKLSAgICAKLSAgICBib29sIG5lZWRUaGlyZFNjcmF0Y2ggPSBmYWxz
ZTsKLSAgICBpZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKQotICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgbmVlZFRoaXJkU2NyYXRjaCA9IHRydWU7Ci0gICAgfQot
Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIxID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigp
OwotICAgIEFTU0VSVChzY3JhdGNoR1BSMSAhPSBiYXNlR1BSKTsKLSAgICBBU1NFUlQoc2NyYXRj
aEdQUjEgIT0gdmFsdWVHUFIpOwotICAgIAotICAgIEdQUlJlZyBzY3JhdGNoR1BSMiA9IGFsbG9j
YXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKLSAgICBBU1NFUlQoc2NyYXRjaEdQUjIgIT0gYmFz
ZUdQUik7Ci0gICAgQVNTRVJUKHNjcmF0Y2hHUFIyICE9IHZhbHVlR1BSKTsKLSAgICBBU1NFUlQo
c2NyYXRjaEdQUjIgIT0gc2NyYXRjaEdQUjEpOwotCi0gICAgR1BSUmVnIHNjcmF0Y2hHUFIzOwot
ICAgIGlmIChuZWVkVGhpcmRTY3JhdGNoKSB7Ci0gICAgICAgIHNjcmF0Y2hHUFIzID0gYWxsb2Nh
dG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwotICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjMgIT0g
YmFzZUdQUik7Ci0gICAgICAgIEFTU0VSVChzY3JhdGNoR1BSMyAhPSB2YWx1ZUdQUik7Ci0gICAg
ICAgIEFTU0VSVChzY3JhdGNoR1BSMyAhPSBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIEFTU0VSVChz
Y3JhdGNoR1BSMyAhPSBzY3JhdGNoR1BSMik7Ci0gICAgfSBlbHNlCi0gICAgICAgIHNjcmF0Y2hH
UFIzID0gSW52YWxpZEdQUlJlZzsKLSAgICAKLSAgICBzaXplX3QgbnVtYmVyT2ZQYWRkaW5nQnl0
ZXMgPSBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoc3R1YkppdCk7
Ci0KLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzOwotICAgICAgICAg
ICAgCi0gICAgQVNTRVJUKG9sZFN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNC
ZWVuSW52YWxpZGF0ZWQoKSk7Ci0gICAgCi0gICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0
LmJyYW5jaFN0cnVjdHVyZSgKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCAKLSAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgCi0gICAgICAgIG9sZFN0cnVjdHVyZSkpOwotICAgIAotICAgIGNoZWNrT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25zKAotICAgICAgICBjb25kaXRpb25TZXQsIGV4ZWMtPmNvZGVC
bG9jaygpLCBzdHViSW5mbywgc3R1YkppdCwgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSMSk7Ci0K
LSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7Ci0gICAgCi0gICAgYm9vbCBz
Y3JhdGNoR1BSMUhhc1N0b3JhZ2UgPSBmYWxzZTsKLSAgICAKLSAgICBpZiAoc3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkg
ewotICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSAqIHNpemVvZihKU1ZhbHVlKTsKLSAgICAgICAgQ29waWVkQWxsb2NhdG9yKiBjb3BpZWRBbGxv
Y2F0b3IgPSAmdm0tPmhlYXAuc3RvcmFnZUFsbG9jYXRvcigpOwotICAgICAgICAKLSAgICAgICAg
aWYgKCFvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgICAgIHN0
dWJKaXQubG9hZFB0cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0
Y2hHUFIxKTsKLSAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChzdHViSml0LmJyYW5jaFN1YlB0
cihNYWNyb0Fzc2VtYmxlcjo6U2lnbmVkLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG5l
d1NpemUpLCBzY3JhdGNoR1BSMSkpOwotICAgICAgICAgICAgc3R1YkppdC5zdG9yZVB0cihzY3Jh
dGNoR1BSMSwgJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKLSAgICAgICAg
ICAgIHN0dWJKaXQubmVnUHRyKHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAgIHN0dWJKaXQuYWRk
UHRyKE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9jYXRvci0+bV9j
dXJyZW50UGF5bG9hZEVuZCksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAgIHN0dWJKaXQuYWRk
UHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEpTVmFsdWUpKSwgc2NyYXRj
aEdQUjEpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBv
bGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7Ci0gICAg
ICAgICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUjMpOwotICAgICAgICAgICAgc3R1
YkppdC5sb2FkUHRyKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZywgc2NyYXRj
aEdQUjEpOwotICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKHN0dWJKaXQuYnJhbmNoU3ViUHRy
KE1hY3JvQXNzZW1ibGVyOjpTaWduZWQsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobmV3
U2l6ZSksIHNjcmF0Y2hHUFIxKSk7Ci0gICAgICAgICAgICBzdHViSml0LnN0b3JlUHRyKHNjcmF0
Y2hHUFIxLCAmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcpOwotICAgICAgICAg
ICAgc3R1YkppdC5uZWdQdHIoc2NyYXRjaEdQUjEpOwotICAgICAgICAgICAgc3R1YkppdC5hZGRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcygmY29waWVkQWxsb2NhdG9yLT5tX2N1
cnJlbnRQYXlsb2FkRW5kKSwgc2NyYXRjaEdQUjEpOwotICAgICAgICAgICAgc3R1YkppdC5hZGRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoSlNWYWx1ZSkpLCBzY3JhdGNo
R1BSMSk7Ci0gICAgICAgICAgICAvLyBXZSBoYXZlIHNjcmF0Y2hHUFIxID0gbmV3IHN0b3JhZ2Us
IHNjcmF0Y2hHUFIzID0gb2xkIHN0b3JhZ2UsIHNjcmF0Y2hHUFIyID0gYXZhaWxhYmxlCi0gICAg
ICAgICAgICBmb3IgKHNpemVfdCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBvbGRTaXplOyBvZmZzZXQg
Kz0gc2l6ZW9mKHZvaWQqKSkgewotICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMywgLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4o
b2Zmc2V0ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpLCBzY3JhdGNoR1BSMik7
Ci0gICAgICAgICAgICAgICAgc3R1YkppdC5zdG9yZVB0cihzY3JhdGNoR1BSMiwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9mZnNl
dCArIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZih2b2lkKikpKSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHN0dWJKaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjEs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSkpOwotICAgICAgICBzY3JhdGNoR1BSMUhhc1N0b3JhZ2UgPSB0cnVlOwotICAgIH0KLQot
ICAgIEFTU0VSVChvbGRTdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpID09IHN0cnVjdHVyZS0+
dHlwZUluZm8oKS50eXBlKCkpOwotICAgIEFTU0VSVChvbGRTdHJ1Y3R1cmUtPnR5cGVJbmZvKCku
aW5saW5lVHlwZUZsYWdzKCkgPT0gc3RydWN0dXJlLT50eXBlSW5mbygpLmlubGluZVR5cGVGbGFn
cygpKTsKLSAgICBBU1NFUlQob2xkU3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSA9PSBzdHJ1Y3R1
cmUtPmluZGV4aW5nVHlwZSgpKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHVpbnQzMl90IHZh
bCA9IHN0cnVjdHVyZS0+aWQoKTsKLSNlbHNlCi0gICAgdWludDMyX3QgdmFsID0gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50MzJfdD4oc3RydWN0dXJlLT5pZCgpKTsKLSNlbmRpZgotICAgIHN0dWJKaXQu
c3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHZhbCksIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSkpOwotI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkp
KQotICAgICAgICBzdHViSml0LnN0b3JlNjQodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldElu
SW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOwot
ICAgIGVsc2UgewotICAgICAgICBpZiAoIXNjcmF0Y2hHUFIxSGFzU3RvcmFnZSkKLSAgICAgICAg
ICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09i
amVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIHN0dWJKaXQu
c3RvcmU2NCh2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9m
ZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7
Ci0gICAgfQotI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBpZiAoaXNJbmxpbmVPZmZzZXQo
c2xvdC5jYWNoZWRPZmZzZXQoKSkpIHsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxp
bmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkg
KiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRv
ciwgYXNCaXRzLnBheWxvYWQpKSk7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQ
UiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5s
aW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkp
ICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IsIGFzQml0cy50YWcpKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFzY3JhdGNoR1BS
MUhhc1N0b3JhZ2UpCi0gICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQ
UjEpOwotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgp
KSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlVGFn
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5CdXR0ZXJm
bHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VU
T0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKLSAgICB9Ci0jZW5kaWYK
LSAgICAKLSAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gbnVsbHB0cjsKLQotI2lm
IEVOQUJMRShHR0MpCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbEZsdXNoV3JpdGVCYXJy
aWVyQnVmZmVyOwotICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gb2xk
U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBzdHViSml0Lmp1bXBJZklzUmVtZW1i
ZXJlZE9ySW5FZGVuKGJhc2VHUFIpOwotICAgICAgICBXcml0ZUJhcnJpZXJCdWZmZXImIHdyaXRl
QmFycmllckJ1ZmZlciA9IHN0dWJKaXQudm0oKS0+aGVhcC53cml0ZUJhcnJpZXJCdWZmZXIoKTsK
LSAgICAgICAgc3R1YkppdC5sb2FkMzIod3JpdGVCYXJyaWVyQnVmZmVyLmN1cnJlbnRJbmRleEFk
ZHJlc3MoKSwgc2NyYXRjaEdQUjIpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBuZWVk
VG9GbHVzaCA9Ci0gICAgICAgICAgICBzdHViSml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsIHNjcmF0Y2hHUFIyLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHdy
aXRlQmFycmllckJ1ZmZlci5jYXBhY2l0eSgpKSk7Ci0KLSAgICAgICAgc3R1YkppdC5hZGQzMihN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoR1BSMik7Ci0gICAgICAgIHN0
dWJKaXQuc3RvcmUzMihzY3JhdGNoR1BSMiwgd3JpdGVCYXJyaWVyQnVmZmVyLmN1cnJlbnRJbmRl
eEFkZHJlc3MoKSk7Ci0KLSAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKHdyaXRlQmFycmllckJ1ZmZlci5idWZmZXIoKSksIHNjcmF0Y2hHUFIxKTsKLSAg
ICAgICAgLy8gV2UgdXNlIGFuIG9mZnNldCBvZiAtc2l6ZW9mKHZvaWQqKSBiZWNhdXNlIHdlIGFs
cmVhZHkgYWRkZWQgMSB0byBzY3JhdGNoR1BSMi4KLSAgICAgICAgc3R1YkppdC5zdG9yZVB0cihi
YXNlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BS
MiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBzdGF0aWNfY2FzdDxpbnQzMl90Pigtc2l6ZW9m
KHZvaWQqKSkpKTsKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lV2l0aEJhcnJp
ZXIgPSBzdHViSml0Lmp1bXAoKTsKLSAgICAgICAgbmVlZFRvRmx1c2gubGluaygmc3R1YkppdCk7
Ci0KLSAgICAgICAgc2NyYXRjaEJ1ZmZlciA9IHZtLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShhbGxv
Y2F0b3IuZGVzaXJlZFNjcmF0Y2hCdWZmZXJTaXplRm9yQ2FsbCgpKTsKLSAgICAgICAgYWxsb2Nh
dG9yLnByZXNlcnZlVXNlZFJlZ2lzdGVyc1RvU2NyYXRjaEJ1ZmZlckZvckNhbGwoc3R1YkppdCwg
c2NyYXRjaEJ1ZmZlciwgc2NyYXRjaEdQUjIpOwotICAgICAgICBzdHViSml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShiYXNlR1BSKTsKLSAgICAgICAgY2FsbEZsdXNoV3JpdGVCYXJyaWVy
QnVmZmVyID0gc3R1YkppdC5jYWxsKCk7Ci0gICAgICAgIGFsbG9jYXRvci5yZXN0b3JlVXNlZFJl
Z2lzdGVyc0Zyb21TY3JhdGNoQnVmZmVyRm9yQ2FsbChzdHViSml0LCBzY3JhdGNoQnVmZmVyLCBz
Y3JhdGNoR1BSMik7Ci0KLSAgICAgICAgZG9uZVdpdGhCYXJyaWVyLmxpbmsoJnN0dWJKaXQpOwot
ICAgICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsoJnN0dWJKaXQpOwotICAgIH0K
LSNlbmRpZgotCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzczsKLSAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBmYWlsdXJlOwotICAgICAgICAgICAgCi0gICAgaWYgKGFsbG9jYXRvci5k
aWRSZXVzZVJlZ2lzdGVycygpKSB7Ci0gICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVn
aXN0ZXJzQnlQb3BwaW5nKHN0dWJKaXQsIG51bWJlck9mUGFkZGluZ0J5dGVzKTsKLSAgICAgICAg
c3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOwotCi0gICAgICAgIGZhaWx1cmVDYXNlcy5saW5rKCZz
dHViSml0KTsKLSAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBp
bmcoc3R1YkppdCwgbnVtYmVyT2ZQYWRkaW5nQnl0ZXMpOwotICAgICAgICBmYWlsdXJlID0gc3R1
YkppdC5qdW1wKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAo
KTsKLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBvcGVyYXRpb25DYWxsOwotICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3NJblNsb3dQYXRoOwotICAgIAotICAgIGlmIChzdHJ1
Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpKSB7Ci0gICAgICAgIHNsb3dQYXRoLmxpbmsoJnN0dWJKaXQpOwotICAgICAgICAKLSAg
ICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoc3R1YkppdCwg
bnVtYmVyT2ZQYWRkaW5nQnl0ZXMpOwotICAgICAgICBpZiAoIXNjcmF0Y2hCdWZmZXIpCi0gICAg
ICAgICAgICBzY3JhdGNoQnVmZmVyID0gdm0tPnNjcmF0Y2hCdWZmZXJGb3JTaXplKGFsbG9jYXRv
ci5kZXNpcmVkU2NyYXRjaEJ1ZmZlclNpemVGb3JDYWxsKCkpOwotICAgICAgICBhbGxvY2F0b3Iu
cHJlc2VydmVVc2VkUmVnaXN0ZXJzVG9TY3JhdGNoQnVmZmVyRm9yQ2FsbChzdHViSml0LCBzY3Jh
dGNoQnVmZmVyLCBzY3JhdGNoR1BSMSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgc3R1
YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUdQUiwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihz
bG90LmNhY2hlZE9mZnNldCgpKSwgdmFsdWVHUFIpOwotI2Vsc2UKLSAgICAgICAgc3R1YkppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIoc3RydWN0dXJlKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzbG90LmNh
Y2hlZE9mZnNldCgpKSwgdmFsdWVHUFIsIHZhbHVlVGFnR1BSKTsKLSNlbmRpZgotICAgICAgICBv
cGVyYXRpb25DYWxsID0gc3R1YkppdC5jYWxsKCk7Ci0gICAgICAgIGFsbG9jYXRvci5yZXN0b3Jl
VXNlZFJlZ2lzdGVyc0Zyb21TY3JhdGNoQnVmZmVyRm9yQ2FsbChzdHViSml0LCBzY3JhdGNoQnVm
ZmVyLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIHN1Y2Nlc3NJblNsb3dQYXRoID0gc3R1YkppdC5q
dW1wKCk7Ci0gICAgfQotICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCBzdHVi
Sml0LCBleGVjLT5jb2RlQmxvY2soKSwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKLSAgICBpZiAo
cGF0Y2hCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIAotICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSk7Ci0g
ICAgaWYgKGFsbG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygpKQotICAgICAgICBwYXRjaEJ1ZmZl
ci5saW5rKGZhaWx1cmUsIGZhaWx1cmVMYWJlbCk7Ci0gICAgZWxzZQotICAgICAgICBwYXRjaEJ1
ZmZlci5saW5rKGZhaWx1cmVDYXNlcywgZmFpbHVyZUxhYmVsKTsKLSAgICBpZiAoc3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSkgewotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIG9wZXJhdGlvblJl
YWxsb2NhdGVTdG9yYWdlQW5kRmluaXNoUHV0KTsKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhz
dWNjZXNzSW5TbG93UGF0aCwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZz
ZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSk7Ci0jaWYgRU5BQkxFKEdHQykKLSAg
ICAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIsIG9wZXJh
dGlvbkZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKTsKLSNlbmRpZgotICAgIH0KLSAgICAKLSAgICBz
dHViUm91dGluZSA9Ci0gICAgICAgIGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAotICAgICAgICAgICAg
RklOQUxJWkVfQ09ERV9GT1IoCi0gICAgICAgICAgICAgICAgZXhlYy0+Y29kZUJsb2NrKCksIHBh
dGNoQnVmZmVyLAotICAgICAgICAgICAgICAgICgiUHV0QnlJZCAlc3RyYW5zaXRpb24gc3R1YiAo
JXAgLT4gJXApIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAgICAgICAgICAgICAgICAg
c3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSA/ICJyZWFsbG9jYXRpbmcgIiA6ICIiLAotICAgICAgICAgICAgICAgICAgICBv
bGRTdHJ1Y3R1cmUsIHN0cnVjdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgdG9DU3RyaW5nKCpl
eGVjLT5jb2RlQmxvY2soKSkuZGF0YSgpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFi
ZWxBdE9mZnNldCgKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRlbHRh
Q2FsbFRvRG9uZSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpLAotICAgICAgICAgICAgKnZtLAotICAg
ICAgICAgICAgZXhlYy0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgpLAotICAgICAgICAg
ICAgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSwKLSAgICAgICAgICAgIHN0cnVjdHVyZSk7Ci0gICAgCi0gICAgcmV0dXJu
IHRydWU7CisgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0
aW1pemU7CisgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKIH0K
IAogc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRChFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCkBAIC0xMjQ1LDcgKzM0OSw4IEBAIHN0YXRp
YyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7CiAgICAgCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxv
Y2soKTsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBTY3JpcHRFeGVjdXRhYmxlKiBv
d25lciA9IGNvZGVCbG9jay0+b3duZXJTY3JpcHRFeGVjdXRhYmxlKCk7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKIAogICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQogICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKQEAgLTEyNTYsMjEwICszNjEsMTEwIEBAIHN0YXRpYyBJbmxpbmVD
YWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlB
Y2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQogICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKIAot
ICAgIC8vIE9wdGltaXplIHNlbGYgYWNjZXNzLgorICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3ND
YXNlPiBuZXdDYXNlOworCiAgICAgaWYgKHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSAmJiBzbG90
LmlzQ2FjaGVhYmxlUHV0KCkpIHsKLSAgICAgICAgaWYgKHNsb3QudHlwZSgpID09IFB1dFByb3Bl
cnR5U2xvdDo6TmV3UHJvcGVydHkpIHsKKyAgICAgICAgaWYgKHNsb3QudHlwZSgpID09IFB1dFBy
b3BlcnR5U2xvdDo6RXhpc3RpbmdQcm9wZXJ0eSkgeworICAgICAgICAgICAgc3RydWN0dXJlLT5k
aWRDYWNoZVByb3BlcnR5UmVwbGFjZW1lbnQodm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAg
ICAgICAKKyAgICAgICAgICAgIHB0cmRpZmZfdCBvZmZzZXRUb1BhdGNoZWRTdG9yYWdlID0gb2Zm
c2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAg
ICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlVuc2V0CisgICAgICAg
ICAgICAgICAgJiYgTWFjcm9Bc3NlbWJsZXI6OmlzUHRyQWxpZ25lZEFkZHJlc3NPZmZzZXQob2Zm
c2V0VG9QYXRjaGVkU3RvcmFnZSkKKyAgICAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5uZWVk
SW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoCisgICAgICAgICAgICAgICAgICAgIGNvZGVC
bG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwKKyAgICAgICAg
ICAgICAgICAgICAgYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1
dEtpbmQpLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRSZXBs
YWNlKAorICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSwgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gUmV0cnlDYWNoZUxhdGVyOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBTdHJ1Y3R1
cmUqIG9sZFN0cnVjdHVyZTsKLSAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
IGNvbmRpdGlvblNldDsKLSAgICAgICAgICAgIGlmICghZW1pdFB1dFRyYW5zaXRpb25TdHViKGV4
ZWMsIHZtLCBzdHJ1Y3R1cmUsIGlkZW50LCBzbG90LCBzdHViSW5mbywgcHV0S2luZCwgb2xkU3Ry
dWN0dXJlLCBjb25kaXRpb25TZXQpKQotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOworICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OnJlcGxhY2Uodm0sIG93bmVy
LCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgQVNTRVJUKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6TmV3UHJvcGVy
dHkpOwogCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoCi0gICAgICAg
ICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldCgKLSAgICAg
ICAgICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwKLSAgICAgICAg
ICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNv
ZGUoKSkpOwotICAgICAgICAgICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1bmN0aW9uKHNs
b3QsIHB1dEtpbmQpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3R1YkluZm8uaW5pdFB1
dEJ5SWRUcmFuc2l0aW9uKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgb2xkU3Ry
dWN0dXJlLCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgcHV0S2luZCA9PSBEaXJlY3QpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwotICAgICAgICB9
CisgICAgICAgICAgICBpZiAoIXN0cnVjdHVyZS0+aXNPYmplY3QoKSB8fCBzdHJ1Y3R1cmUtPmlz
RGljdGlvbmFyeSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogCi0g
ICAgICAgIGlmICghTWFjcm9Bc3NlbWJsZXI6OmlzUHRyQWxpZ25lZEFkZHJlc3NPZmZzZXQob2Zm
c2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSkKLSAgICAg
ICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0OworICAgICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPQorICAgICAgICAg
ICAgICAgIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVy
ZUNvbmN1cnJlbnRseSgKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBpZGVudC5pbXBs
KCksIDAsIG9mZnNldCk7CisgICAgICAgICAgICBpZiAoIW5ld1N0cnVjdHVyZSB8fCAhbmV3U3Ry
dWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAKLSAgICAgICAgc3RydWN0dXJlLT5kaWRDYWNoZVByb3Bl
cnR5UmVwbGFjZW1lbnQoKnZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKLSAgICAgICAgcmVwYXRj
aEJ5SWRTZWxmQWNjZXNzKCp2bSwgY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBpZGVu
dCwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgYXBwcm9wcmlhdGVMaXN0QnVpbGRpbmdQdXRCeUlkRnVu
Y3Rpb24oc2xvdCwgcHV0S2luZCksIGZhbHNlKTsKLSAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5
SWRSZXBsYWNlKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsK
LSAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLSAgICB9CisgICAgICAgICAgICBBU1NF
UlQobmV3U3RydWN0dXJlLT5wcmV2aW91c0lEKCkgPT0gc3RydWN0dXJlKTsKKyAgICAgICAgICAg
IEFTU0VSVCghbmV3U3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSk7CisgICAgICAgICAgICBBU1NF
UlQobmV3U3RydWN0dXJlLT5pc09iamVjdCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAgICAgICAgICAgaWYg
KHB1dEtpbmQgPT0gTm90RGlyZWN0KSB7CisgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0K
KyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJN
aXNzKAorICAgICAgICAgICAgICAgICAgICAgICAgdm0sIG93bmVyLCBleGVjLCBuZXdTdHJ1Y3R1
cmUsIGlkZW50LmltcGwoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNW
YWxpZCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAg
ICAgICAgIH0KIAotICAgIGlmICgoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpIHx8IHNsb3QuaXND
YWNoZWFibGVTZXR0ZXIoKSkKLSAgICAgICAgJiYgc3R1YkluZm8ucGF0Y2guc3BpbGxNb2RlID09
IERvbnRTcGlsbCkgewotICAgICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5l
OworICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OnRyYW5zaXRpb24odm0sIG93bmVy
LCBzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgb2Zmc2V0LCBjb25kaXRpb25TZXQpOworICAgICAg
ICB9CisgICAgfSBlbHNlIGlmIChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgfHwgc2xvdC5pc0Nh
Y2hlYWJsZVNldHRlcigpKSB7CisgICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkp
IHsKKyAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsK
IAotICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7Ci0gICAg
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKLSAgICAgICAgaWYgKHNsb3QuYmFzZSgpICE9IGJh
c2VWYWx1ZSkgewotICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkgewor
ICAgICAgICAgICAgaWYgKHNsb3QuYmFzZSgpICE9IGJhc2VWYWx1ZSkgewogICAgICAgICAgICAg
ICAgIGNvbmRpdGlvblNldCA9CiAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9u
c0ZvclByb3RvdHlwZVByb3BlcnR5SGl0Q3VzdG9tKAotICAgICAgICAgICAgICAgICAgICAgICAg
KnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3Qu
YmFzZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnQuaW1wbCgpKTsKLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0KLSAgICAgICAgICAg
ICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCi0gICAg
ICAgICAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4
ZWMsIHN0cnVjdHVyZSwgc2xvdC5iYXNlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBpZGVu
dC5pbXBsKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgdm0sIG93bmVyLCBleGVjLCBzdHJ1
Y3R1cmUsIHNsb3QuYmFzZSgpLCBpZGVudC5pbXBsKCkpOworICAgICAgICAgICAgICAgIGlmICgh
Y29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5p
c1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAg
ICAgICBvZmZzZXQgPSBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgPyBpbnZhbGlkT2Zmc2V0IDog
Y29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCk7Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgb2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKLQotICAgICAgICBQ
b2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiBsaXN0OwotICAgICAgICBsaXN0ID0gUG9seW1vcnBoaWNQ
dXRCeUlkTGlzdDo6ZnJvbShwdXRLaW5kLCBzdHViSW5mbyk7Ci0KLSAgICAgICAgYm9vbCByZXN1
bHQgPSBnZW5lcmF0ZUJ5SWRTdHViKAotICAgICAgICAgICAgZXhlYywga2luZEZvcihzbG90KSwg
aWRlbnQsIGN1c3RvbUZvcihzbG90KSwgc3R1YkluZm8sIGNvbmRpdGlvblNldCwgc2xvdC5iYXNl
KCksCi0gICAgICAgICAgICBvZmZzZXQsIHN0cnVjdHVyZSwgZmFsc2UsIG51bGxwdHIsCi0gICAg
ICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5m
by5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLAotICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2Fz
ZSksCi0gICAgICAgICAgICBzdHViUm91dGluZSk7Ci0gICAgICAgIGlmICghcmVzdWx0KQotICAg
ICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgIAotICAgICAgICBsaXN0LT5h
ZGRBY2Nlc3MoUHV0QnlJZEFjY2Vzczo6c2V0dGVyKAotICAgICAgICAgICAgKnZtLCBjb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpLAotICAgICAgICAgICAgc2xvdC5pc0NhY2hlYWJsZVNldHRl
cigpID8gUHV0QnlJZEFjY2Vzczo6U2V0dGVyIDogUHV0QnlJZEFjY2Vzczo6Q3VzdG9tU2V0dGVy
LAotICAgICAgICAgICAgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIHNsb3QuY3VzdG9tU2V0dGVy
KCksIHN0dWJSb3V0aW5lKSk7Ci0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1w
KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGVsdGFDYWxsVG9KdW1wKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5j
b2RlKCkpKTsKLSAgICAgICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3Qs
IHB1dEtpbmQpKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWxpc3QtPmlzRnVsbCgpKTsKLSAg
ICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLSAgICB9Ci0KLSAgICByZXR1cm4gR2l2ZVVw
T25DYWNoZTsKLX0KLQotdm9pZCByZXBhdGNoUHV0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQotewotICAgIEdDU2FmZUNvbmN1cnJlbnRKSVRM
b2NrZXIgbG9ja2VyKGV4ZWMtPmNvZGVCbG9jaygpLT5tX2xvY2ssIGV4ZWMtPnZtKCkuaGVhcCk7
Ci0gICAgCi0gICAgaWYgKHRyeUNhY2hlUHV0QnlJRChleGVjLCBiYXNlVmFsdWUsIHN0cnVjdHVy
ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0S2luZCkgPT0gR2l2ZVVwT25DYWNo
ZSkKLSAgICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1
dEtpbmQpKTsKLX0KLQotc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUJ1aWxkUHV0QnlJZExp
c3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90
JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKLXsK
LSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOwotCi0gICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCi0gICAgICAg
IHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlUHV0KCkg
JiYgIXNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSAmJiAhc2xvdC5pc0NhY2hlYWJsZVNldHRlcigp
KQotICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKIAotICAgIGlmICghc3RydWN0dXJlLT5w
cm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCi0gICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOwotCi0gICAgLy8gT3B0aW1pemUgc2VsZiBhY2Nlc3MuCi0gICAgaWYgKHNsb3QuYmFzZSgp
ID09IGJhc2VWYWx1ZSAmJiBzbG90LmlzQ2FjaGVhYmxlUHV0KCkpIHsKLSAgICAgICAgUG9seW1v
cnBoaWNQdXRCeUlkTGlzdCogbGlzdDsKLSAgICAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBz
dHViUm91dGluZTsKLSAgICAgICAgCi0gICAgICAgIGlmIChzbG90LnR5cGUoKSA9PSBQdXRQcm9w
ZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5KSB7Ci0gICAgICAgICAgICBsaXN0ID0gUG9seW1vcnBoaWNQ
dXRCeUlkTGlzdDo6ZnJvbShwdXRLaW5kLCBzdHViSW5mbyk7Ci0gICAgICAgICAgICBpZiAobGlz
dC0+aXNGdWxsKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7IC8vIFdp
bGwgZ2V0IGhlcmUgZHVlIHRvIHJlY3Vyc2lvbi4KLQotICAgICAgICAgICAgU3RydWN0dXJlKiBv
bGRTdHJ1Y3R1cmU7CisgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6c2V0dGVyKAor
ICAgICAgICAgICAgICAgIHZtLCBvd25lciwgQWNjZXNzQ2FzZTo6Q3VzdG9tU2V0dGVyLCBzdHJ1
Y3R1cmUsIGludmFsaWRPZmZzZXQsIGNvbmRpdGlvblNldCwKKyAgICAgICAgICAgICAgICBzbG90
LmN1c3RvbVNldHRlcigpKTsKKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKLSAgICAgICAgICAgIGlmICghZW1pdFB1
dFRyYW5zaXRpb25TdHViKGV4ZWMsIHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdCwg
c3R1YkluZm8sIHB1dEtpbmQsIG9sZFN0cnVjdHVyZSwgY29uZGl0aW9uU2V0KSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldDsKIAotICAgICAgICAgICAgc3R1YlJvdXRpbmUgPSBzdHViSW5mby5zdHViUm91dGlu
ZTsKLSAgICAgICAgICAgIGxpc3QtPmFkZEFjY2VzcygKLSAgICAgICAgICAgICAgICBQdXRCeUlk
QWNjZXNzOjp0cmFuc2l0aW9uKAotICAgICAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksCi0gICAgICAgICAgICAgICAgICAgIG9sZFN0cnVjdHVyZSwgc3Ry
dWN0dXJlLCBjb25kaXRpb25TZXQsCi0gICAgICAgICAgICAgICAgICAgIHN0dWJSb3V0aW5lKSk7
CisgICAgICAgICAgICBpZiAoc2xvdC5iYXNlKCkgIT0gYmFzZVZhbHVlKSB7CisgICAgICAgICAg
ICAgICAgY29uZGl0aW9uU2V0ID0KKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRp
b25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCisgICAgICAgICAgICAgICAgICAgICAgICB2bSwg
b3duZXIsIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5iYXNlKCksIGlkZW50LmltcGwoKSk7CisgICAg
ICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSBjb25k
aXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vZmZzZXQoKTsKKyAgICAgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgICAgIG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CiAKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGxpc3QgPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojpm
cm9tKHB1dEtpbmQsIHN0dWJJbmZvKTsKLSAgICAgICAgICAgIGlmIChsaXN0LT5pc0Z1bGwoKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsgLy8gV2lsbCBnZXQgaGVyZSBk
dWUgdG8gcmVjdXJzaW9uLgotICAgICAgICAgICAgCi0gICAgICAgICAgICBzdHJ1Y3R1cmUtPmRp
ZENhY2hlUHJvcGVydHlSZXBsYWNlbWVudCgqdm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICAvLyBXZSdyZSBub3cgY29tbWl0dGVkIHRvIGNyZWF0aW5n
IHRoZSBzdHViLiBNb2dyaWZ5IHRoZSBtZXRhLWRhdGEgYWNjb3JkaW5nbHkuCi0gICAgICAgICAg
ICBib29sIHJlc3VsdCA9IGVtaXRQdXRSZXBsYWNlU3R1YigKLSAgICAgICAgICAgICAgICBleGVj
LCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCAKLSAgICAgICAgICAgICAgICBzdHJ1Y3R1
cmUsIENvZGVMb2NhdGlvbkxhYmVsKGxpc3QtPmN1cnJlbnRTbG93UGF0aFRhcmdldCgpKSwgc3R1
YlJvdXRpbmUpOwotICAgICAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGxpc3QtPmFkZEFj
Y2VzcygKLSAgICAgICAgICAgICAgICBQdXRCeUlkQWNjZXNzOjpyZXBsYWNlKAotICAgICAgICAg
ICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCi0gICAgICAgICAg
ICAgICAgICAgIHN0cnVjdHVyZSwgc3R1YlJvdXRpbmUpKTsKKyAgICAgICAgICAgIG5ld0Nhc2Ug
PSBBY2Nlc3NDYXNlOjpzZXR0ZXIoCisgICAgICAgICAgICAgICAgdm0sIG93bmVyLCBBY2Nlc3ND
YXNlOjpTZXR0ZXIsIHN0cnVjdHVyZSwgb2Zmc2V0LCBjb25kaXRpb25TZXQsIG51bGxwdHIpOwog
ICAgICAgICB9Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRv
SnVtcCksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0g
ICAgICAgIGlmIChsaXN0LT5pc0Z1bGwoKSkKLSAgICAgICAgICAgIHJlcGF0Y2hDYWxsKGNvZGVC
bG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRC
eUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOwotCi0gICAgICAgIHJldHVybiBSZXRyeUNhY2hl
TGF0ZXI7CiAgICAgfQogCi0gICAgaWYgKChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgfHwgc2xv
dC5pc0NhY2hlYWJsZVNldHRlcigpKQotICAgICAgICAmJiBzdHViSW5mby5wYXRjaC5zcGlsbE1v
ZGUgPT0gRG9udFNwaWxsKSB7Ci0gICAgICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJv
dXRpbmU7Ci0gICAgICAgIAotICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25k
aXRpb25TZXQ7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKLSAgICAgICAgaWYgKHNs
b3QuYmFzZSgpICE9IGJhc2VWYWx1ZSkgewotICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFi
bGVDdXN0b20oKSkgewotICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9Ci0gICAgICAgICAg
ICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0Q3VzdG9t
KAotICAgICAgICAgICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgcHJvcGVydHlOYW1lLmltcGwoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIGNvbmRpdGlvblNldCA9Ci0gICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0
aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAotICAgICAgICAgICAgICAgICAgICAgICAgKnZt
LCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFz
ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lLmltcGwoKSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICBvZmZzZXQgPSBz
bG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgPyBpbnZhbGlkT2Zmc2V0IDogY29uZGl0aW9uU2V0LnNs
b3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
b2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKLQotICAgICAgICBQb2x5bW9ycGhpY1B1dEJ5
SWRMaXN0KiBsaXN0OwotICAgICAgICBsaXN0ID0gUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6ZnJv
bShwdXRLaW5kLCBzdHViSW5mbyk7Ci0KLSAgICAgICAgYm9vbCByZXN1bHQgPSBnZW5lcmF0ZUJ5
SWRTdHViKAotICAgICAgICAgICAgZXhlYywga2luZEZvcihzbG90KSwgcHJvcGVydHlOYW1lLCBj
dXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBjb25kaXRpb25TZXQsIHNsb3QuYmFzZSgpLAotICAg
ICAgICAgICAgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGZhbHNlLCBudWxscHRyLAotICAgICAgICAgICAg
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGVsdGFDYWxsVG9Eb25lKSwKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKGxpc3QtPmN1
cnJlbnRTbG93UGF0aFRhcmdldCgpKSwKLSAgICAgICAgICAgIHN0dWJSb3V0aW5lKTsKLSAgICAg
ICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAg
ICAgCi0gICAgICAgIGxpc3QtPmFkZEFjY2VzcyhQdXRCeUlkQWNjZXNzOjpzZXR0ZXIoCi0gICAg
ICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCi0gICAgICAgICAgICBz
bG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkgPyBQdXRCeUlkQWNjZXNzOjpTZXR0ZXIgOiBQdXRCeUlk
QWNjZXNzOjpDdXN0b21TZXR0ZXIsCi0gICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNl
dCwgc2xvdC5jdXN0b21TZXR0ZXIoKSwgc3R1YlJvdXRpbmUpKTsKLQotICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6cmVwYXRjaEp1bXAoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9m
ZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1bXApLCBDb2RlTG9jYXRpb25MYWJlbChz
dHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgICAgICBpZiAobGlzdC0+aXNGdWxsKCkp
Ci0gICAgICAgICAgICByZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbiwgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQp
KTsKKyAgICBkYXRhTG9nKCJuZXdDYXNlID0gIiwgcG9pbnRlckR1bXAobmV3Q2FzZS5nZXQoKSks
ICJcbiIpOworICAgIAorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyID0gc3R1Yklu
Zm8uYWRkQWNjZXNzQ2FzZSgKKyAgICAgICAgdm0sIGNvZGVCbG9jaywgaWRlbnQsIHN0ZDo6bW92
ZShuZXdDYXNlKSk7CisgICAgCisgICAgaWYgKCFjb2RlUHRyKQorICAgICAgICByZXR1cm4gR2l2
ZVVwT25DYWNoZTsKIAotICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwotICAgIH0KLSAg
ICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICByZXNldFB1dEJ5SURDaGVja0FuZExvYWQoc3R1
YkluZm8pOworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcCgKKyAgICAgICAgc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldCgKKyAgICAgICAgICAgIHN0dWJJbmZv
LnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksCisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKGNvZGVQ
dHIpKTsKKyAgICAKKyAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogfQogCi12b2lkIGJ1aWxk
UHV0QnlJZExpc3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJv
cGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0
S2luZCkKK3ZvaWQgcmVwYXRjaFB1dEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VW
YWx1ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8sIFB1dEtpbmQgcHV0S2luZCkKIHsKICAgICBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyIGxv
Y2tlcihleGVjLT5jb2RlQmxvY2soKS0+bV9sb2NrLCBleGVjLT52bSgpLmhlYXApOwogICAgIAot
ICAgIGlmICh0cnlCdWlsZFB1dEJ5SWRMaXN0KGV4ZWMsIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBw
cm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kKSA9PSBHaXZlVXBPbkNhY2hlKQor
ICAgIGlmICh0cnlDYWNoZVB1dEJ5SUQoZXhlYywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIHByb3Bl
cnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQpID09IEdpdmVVcE9uQ2FjaGUpCiAgICAg
ICAgIHJlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24sIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7
CiB9CiAKQEAgLTE0NzksMTA2ICs0ODQsMzUgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRy
eVJlcGF0Y2hJbigKICAgICB9CiAgICAgCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVj
LT5jb2RlQmxvY2soKTsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IGJhc2UtPnN0cnVjdHVyZSgqdm0pOworICAgIFNjcmlwdEV4ZWN1dGFibGUq
IG93bmVyID0gY29kZUJsb2NrLT5vd25lclNjcmlwdEV4ZWN1dGFibGUoKTsKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZS0+c3RydWN0dXJl
KHZtKTsKICAgICAKICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7
CiAgICAgaWYgKHdhc0ZvdW5kKSB7CiAgICAgICAgIGlmIChzbG90LnNsb3RCYXNlKCkgIT0gYmFz
ZSkgewogICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJv
dG90eXBlUHJvcGVydHlIaXQoCi0gICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwgaWRlbnQuaW1w
bCgpKTsKKyAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwg
ZXhlYywgc3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCksIGlkZW50LmltcGwoKSk7CiAgICAgICAg
IH0KICAgICB9IGVsc2UgewogICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlv
bnNGb3JQcm9wZXJ0eU1pc3MoCi0gICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgIHZt
LCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIGlkZW50Lmlt
cGwoKSk7CiAgICAgfQogICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKICAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgCi0gICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1
cmVMaXN0KiBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Q7Ci0gICAgaW50IGxpc3RJbmRleDsKLSAg
ICAKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBzdWNjZXNzTGFiZWwgPSBzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUp
OwotICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlTGFiZWw7Ci0gICAgCi0gICAgaWYgKHN0
dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0KSB7Ci0gICAgICAgIHBvbHltb3JwaGlj
U3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoKTsKLSAg
ICAgICAgc3R1YkluZm8uaW5pdEluTGlzdChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIDApOwot
ICAgICAgICBzbG93Q2FzZUxhYmVsID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVs
QXRPZmZzZXQoCi0gICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNl
KTsKLSAgICAgICAgbGlzdEluZGV4ID0gMDsKLSAgICB9IGVsc2UgewotICAgICAgICBSRUxFQVNF
X0FTU0VSVChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19pbl9saXN0KTsKLSAgICAgICAg
cG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gc3R1YkluZm8udS5pbkxpc3Quc3RydWN0dXJlTGlz
dDsKLSAgICAgICAgbGlzdEluZGV4ID0gc3R1YkluZm8udS5pbkxpc3QubGlzdFNpemU7Ci0gICAg
ICAgIHNsb3dDYXNlTGFiZWwgPSBDb2RlTG9jYXRpb25MYWJlbChwb2x5bW9ycGhpY1N0cnVjdHVy
ZUxpc3QtPmxpc3RbbGlzdEluZGV4IC0gMV0uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwot
ICAgICAgICAKLSAgICAgICAgaWYgKGxpc3RJbmRleCA9PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hF
X1NJWkUpCi0gICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICB9Ci0gICAgCi0g
ICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKLSAgICAKLSAgICB7Ci0gICAg
ICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5i
YXNlR1BSKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4o
c3R1YkluZm8ucGF0Y2gudmFsdWVHUFIpOwotICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IFRl
bXBSZWdpc3RlclNldChzdHViSW5mby5wYXRjaC51c2VkUmVnaXN0ZXJzKS5nZXRGcmVlR1BSKCk7
Ci0gICAgICAgIAotICAgICAgICBDQ2FsbEhlbHBlcnMgc3R1YkppdCh2bSk7Ci0gICAgICAgIAot
ICAgICAgICBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoOwotICAgICAgICBpZiAoc2NyYXRjaEdQ
UiA9PSBJbnZhbGlkR1BSUmVnKSB7Ci0gICAgICAgICAgICBzY3JhdGNoR1BSID0gQXNzZW1ibHlI
ZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHJlc3VsdEdQUik7Ci0gICAgICAgICAg
ICBzdHViSml0LnB1c2hUb1NhdmUoc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBuZWVkVG9SZXN0
b3JlU2NyYXRjaCA9IHRydWU7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbmVlZFRvUmVz
dG9yZVNjcmF0Y2ggPSBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBmYWlsdXJlQ2FzZXM7Ci0gICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1Ykpp
dC5icmFuY2hTdHJ1Y3R1cmUoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLAotICAgICAgICAgICAgc3RydWN0dXJlKSk7Ci0KLSAgICAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICAgICAgaWYgKHN0
cnVjdHVyZS0+dHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKSkK
LSAgICAgICAgICAgIHZtLT5yZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShpZGVu
dCwgc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKIAotICAgICAgICBpZiAoc2xv
dC53YXRjaHBvaW50U2V0KCkpCi0gICAgICAgICAgICBzbG90LndhdGNocG9pbnRTZXQoKS0+YWRk
KHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7CisgICAgc3RkOjp1bmlxdWVfcHRy
PEFjY2Vzc0Nhc2U+IG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjppbigKKyAgICAgICAgdm0sIG93bmVy
LCB3YXNGb3VuZCA/IEFjY2Vzc0Nhc2U6OkluSGl0IDogQWNjZXNzQ2FzZTo6SW5NaXNzLCBzdHJ1
Y3R1cmUsIGNvbmRpdGlvblNldCk7CiAKLSAgICAgICAgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbnMoCi0gICAgICAgICAgICBjb25kaXRpb25TZXQsIGV4ZWMtPmNvZGVCbG9jaygpLCBzdHVi
SW5mbywgc3R1YkppdCwgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgCi0jaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih3YXNGb3VuZCkpKSwgcmVzdWx0R1BS
KTsKLSNlbHNlCi0gICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKHdhc0ZvdW5kKSwgcmVzdWx0R1BSKTsKLSNlbmRpZgotICAgICAgICAKLSAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzcywgZmFpbDsKLSAgICAgICAgCi0gICAgICAgIGVtaXRS
ZXN0b3JlU2NyYXRjaChzdHViSml0LCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc2NyYXRjaEdQUiwg
c3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzKTsKLSAgICAgICAgCi0gICAgICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKnZtLCBzdHViSml0LCBleGVjLT5jb2RlQmxvY2soKSwgSklUQ29tcGls
YXRpb25DYW5GYWlsKTsKLSAgICAgICAgaWYgKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRl
KCkpCi0gICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgCi0gICAgICAg
IGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHN1
Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcywgc3VjY2Vzc0xhYmVsLCBzbG93Q2FzZUxhYmVsKTsK
LSAgICAgICAgCi0gICAgICAgIHN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigK
LSAgICAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLCBwYXRjaEJ1ZmZlciwKLSAgICAgICAgICAg
ICgiSW4gKGZvdW5kID0gJXMpIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAg
ICAgICAgICAgIHdhc0ZvdW5kID8gInllcyIgOiAibm8iLCB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVC
bG9jaygpKS5kYXRhKCksCi0gICAgICAgICAgICAgICAgc3VjY2Vzc0xhYmVsLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpKTsKLSAgICB9Ci0gICAgCi0gICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5s
aXN0W2xpc3RJbmRleF0uc2V0KCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1
YlJvdXRpbmUsIHN0cnVjdHVyZSwgdHJ1ZSk7Ci0gICAgc3R1YkluZm8udS5pbkxpc3QubGlzdFNp
emUrKzsKLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1
bXApLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOworICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZSh2
bSwgY29kZUJsb2NrLCBpZGVudCwgc3RkOjptb3ZlKG5ld0Nhc2UpKTsKKyAgICBpZiAoIWNvZGVQ
dHIpCisgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGF0Y2hKdW1wKAorICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0
T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksCisgICAgICAgIENvZGVMb2Nh
dGlvbkxhYmVsKGNvZGVQdHIpKTsKICAgICAKLSAgICByZXR1cm4gbGlzdEluZGV4IDwgKFBPTFlN
T1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDEpID8gUmV0cnlDYWNoZUxhdGVyIDogR2l2ZVVwT25D
YWNoZTsKKyAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogfQogCiB2b2lkIHJlcGF0Y2hJbigK
QEAgLTE5MjksMjIgKzg2Myw3IEBAIHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbCgKIHZvaWQgcmVz
ZXRHZXRCeUlEKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8pCiB7CiAgICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24sIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk7Ci0gICAgQ29kZUxvY2F0aW9uRGF0YUxh
YmVsMzIgc3RydWN0dXJlTGFiZWwgPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxh
YmVsMzJBdE9mZnNldCgtKGludHB0cl90KXN0dWJJbmZvLnBhdGNoLmRlbHRhQ2hlY2tJbW1Ub0Nh
bGwpOwotICAgIGlmIChNYWNyb0Fzc2VtYmxlcjo6Y2FuSnVtcFJlcGxhY2VQYXRjaGFibGVCcmFu
Y2gzMldpdGhQYXRjaCgpKSB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXZlcnRKdW1wUmVw
bGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKAotICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OnN0YXJ0T2ZQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaE9uQWRkcmVzcyhzdHJ1
Y3R1cmVMYWJlbCksCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcygKLSAgICAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRD4oc3R1Yklu
Zm8ucGF0Y2guYmFzZUdQUiksCi0gICAgICAgICAgICAgICAgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KHVudXNlZFBvaW50ZXIp
KTsKLSAgICB9Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hJbnQzMihzdHJ1Y3R1cmVMYWJl
bCwgc3RhdGljX2Nhc3Q8aW50MzJfdD4odW51c2VkUG9pbnRlcikpOwotI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDb21wYWN0KHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFD
YWxsVG9Mb2FkT3JTdG9yZSksIDApOwotI2Vsc2UKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRj
aENvbXBhY3Qoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9m
ZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlKSwgMCk7Ci0gICAg
TWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDb21wYWN0KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9QYXls
b2FkTG9hZE9yU3RvcmUpLCAwKTsKLSNlbmRpZgorICAgIHJlc2V0R2V0QnlJRENoZWNrQW5kTG9h
ZChzdHViSW5mbyk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9K
dW1wKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8u
cGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwogfQogCkBAIC0xOTUyLDMzICs4NzEsMTggQEAg
dm9pZCByZXNldFB1dEJ5SUQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIAogewogICAgIFZfSklUT3Bl
cmF0aW9uX0VTc2lKSkkgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IGJpdHdpc2VfY2FzdDxWX0pJVE9w
ZXJhdGlvbl9FU3NpSkpJPihyZWFkQ2FsbFRhcmdldChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbikuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgVl9KSVRPcGVyYXRpb25f
RVNzaUpKSSBvcHRpbWl6ZWRGdW5jdGlvbjsKLSAgICBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9
PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0
aW9uUHV0QnlJZFN0cmljdEJ1aWxkTGlzdCkKKyAgICBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9
PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0KQogICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9w
ZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKLSAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1
bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlv
biA9PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0QnVpbGRMaXN0KQorICAgIGVsc2UgaWYgKHVu
b3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdCkKICAgICAgICAg
b3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7Ci0g
ICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0
U3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0
cmljdEJ1aWxkTGlzdCkKKyAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJh
dGlvblB1dEJ5SWREaXJlY3RTdHJpY3QpCiAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3Bl
cmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOwogICAgIGVsc2UgewotICAgICAgICBB
U1NFUlQodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3Ry
aWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0
cmljdEJ1aWxkTGlzdCk7CisgICAgICAgIEFTU0VSVCh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9w
ZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3QpOwogICAgICAgICBvcHRpbWl6ZWRGdW5jdGlv
biA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKICAgICB9CiAgICAg
cmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wdGlt
aXplZEZ1bmN0aW9uKTsKLSAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWwzMiBzdHJ1Y3R1cmVMYWJl
bCA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KC0oaW50
cHRyX3Qpc3R1YkluZm8ucGF0Y2guZGVsdGFDaGVja0ltbVRvQ2FsbCk7Ci0gICAgaWYgKE1hY3Jv
QXNzZW1ibGVyOjpjYW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKCkpIHsK
LSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxl
QnJhbmNoMzJXaXRoUGF0Y2goCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6c3RhcnRPZlBh
dGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoT25BZGRyZXNzKHN0cnVjdHVyZUxhYmVsKSwKLSAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAotICAgICAgICAgICAgICAgIHN0YXRpY19j
YXN0PE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKSwK
LSAgICAgICAgICAgICAgICBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAotICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4odW51c2VkUG9pbnRlcikpOwotICAgIH0KLSAgICBNYWNy
b0Fzc2VtYmxlcjo6cmVwYXRjaEludDMyKHN0cnVjdHVyZUxhYmVsLCBzdGF0aWNfY2FzdDxpbnQz
Ml90Pih1bnVzZWRQb2ludGVyKSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBNYWNyb0Fzc2Vt
Ymxlcjo6cmVwYXRjaEludDMyKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwz
MkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCAwKTsKLSNl
bHNlCi0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hJbnQzMihzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Rh
Z0xvYWRPclN0b3JlKSwgMCk7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hJbnQzMihzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRj
aC5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSksIDApOwotI2VuZGlmCisgICAgcmVzZXRQ
dXRCeUlEQ2hlY2tBbmRMb2FkKHN0dWJJbmZvKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRj
aEp1bXAoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5w
YXRjaC5kZWx0YUNhbGxUb0p1bXApLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxB
dE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7CiB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvci5jcHAJKHJldmlzaW9uIDE4OTQ5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiAr
NDQsOCBAQCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6On5TY3JhdGNoUmVnaXN0CiAKIHZvaWQg
U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpsb2NrKEdQUlJlZyByZWcpCiB7CisgICAgaWYgKHJl
ZyA9PSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm47CiAgICAgdW5zaWduZWQgaW5kZXgg
PSBHUFJJbmZvOjp0b0luZGV4KHJlZyk7CiAgICAgaWYgKGluZGV4ID09IEdQUkluZm86OkludmFs
aWRJbmRleCkKICAgICAgICAgcmV0dXJuOwpAQCAtNTIsMTIgKzU0LDIwIEBAIHZvaWQgU2NyYXRj
aFJlZ2lzdGVyQWxsb2NhdG9yOjpsb2NrKEdQUlIKIAogdm9pZCBTY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3I6OmxvY2soRlBSUmVnIHJlZykKIHsKKyAgICBpZiAocmVnID09IEludmFsaWRGUFJSZWcp
CisgICAgICAgIHJldHVybjsKICAgICB1bnNpZ25lZCBpbmRleCA9IEZQUkluZm86OnRvSW5kZXgo
cmVnKTsKICAgICBpZiAoaW5kZXggPT0gRlBSSW5mbzo6SW52YWxpZEluZGV4KQogICAgICAgICBy
ZXR1cm47CiAgICAgbV9sb2NrZWRSZWdpc3RlcnMuc2V0RlBSQnlJbmRleChpbmRleCk7CiB9CiAK
K3ZvaWQgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpsb2NrKEpTVmFsdWVSZWdzIHJlZ3MpCit7
CisgICAgbG9jayhyZWdzLnRhZ0dQUigpKTsKKyAgICBsb2NrKHJlZ3MucGF5bG9hZEdQUigpKTsK
K30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQmFua0luZm8+CiB0eXBlbmFtZSBCYW5rSW5mbzo6UmVn
aXN0ZXJUeXBlIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6YWxsb2NhdGVTY3JhdGNoKCkKIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNoUmVnaXN0
ZXJBbGxvY2F0b3IuaAkocmV2aXNpb24gMTg5NDkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTEg
KzQwLDEzIEBAIHN0cnVjdCBTY3JhdGNoQnVmZmVyOwogCiBjbGFzcyBTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3IgewogcHVibGljOgorICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcigpIHsgfQog
ICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcihjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lz
dGVycyk7CiAgICAgflNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcigpOwogCi0gICAgdm9pZCBsb2Nr
KEdQUlJlZyByZWcpOwotICAgIHZvaWQgbG9jayhGUFJSZWcgcmVnKTsKKyAgICB2b2lkIGxvY2so
R1BSUmVnKTsKKyAgICB2b2lkIGxvY2soRlBSUmVnKTsKKyAgICB2b2lkIGxvY2soSlNWYWx1ZVJl
Z3MpOwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJhbmtJbmZvPgogICAgIHR5cGVuYW1l
IEJhbmtJbmZvOjpSZWdpc3RlclR5cGUgYWxsb2NhdGVTY3JhdGNoKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAxODk0OTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4
OCw2ICsxODgsNyBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2KGJv
b2wsIGNsb2JiZXJBbGxSZWdzSW5GVExJQ1Nsb3dQYXRoLCAhQVNTRVJUX0RJU0FCTEVELCBudWxs
cHRyKSBcCiAgICAgdihib29sLCBhc3N1bWVBbGxSZWdzSW5GVExJQ0FyZUxpdmUsIGZhbHNlLCBu
dWxscHRyKSBcCiAgICAgdihib29sLCBlbmFibGVBY2Nlc3NJbmxpbmluZywgdHJ1ZSwgbnVsbHB0
cikgXAorICAgIHYodW5zaWduZWQsIG1heEFjY2Vzc1ZhcmlhbnRMaXN0U2l6ZSwgOCwgbnVsbHB0
cikgXAogICAgIHYoYm9vbCwgZW5hYmxlUG9seXZhcmlhbnREZXZpcnR1YWxpemF0aW9uLCB0cnVl
LCBudWxscHRyKSBcCiAgICAgdihib29sLCBlbmFibGVQb2x5bW9ycGhpY0FjY2Vzc0lubGluaW5n
LCB0cnVlLCBudWxscHRyKSBcCiAgICAgdihib29sLCBlbmFibGVQb2x5bW9ycGhpY0NhbGxJbmxp
bmluZywgdHJ1ZSwgbnVsbHB0cikgXAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260801</attachid>
            <date>2015-09-08 16:06:25 -0700</date>
            <delta_ts>2015-09-08 16:31:09 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>272037</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg5NTA3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0NCBA
QAorMjAxNS0wOS0wOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFRoZXJlIHNob3VsZCBiZSBvbmUgc3R1YiBoYW5naW5nIG9mZiBhbiBpbmxpbmUgY2FjaGUgdGhh
dCBjb250YWlucyBjb2RlIGZvciBhbGwgb2YgdGhlIGNhc2VzLCByYXRoZXIgdGhhbiBmb3JtaW5n
IGEgbGlua2VkIGxpc3QgY29uc2lzdGluZyBvZiBvbmUgc3R1YiBwZXIgY2FzZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4NzE3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBhIG1ham9yIHJl
d3JpdGUgb2YgdGhlIEpTQyBnZXQvcHV0L2luIGlubGluZSBjYWNoZXMgKElDcyksIG1vdGl2YXRl
ZCBieSB0aGUgbmVlZCB0byBhZGQKKyAgICAgICAgZmFuY3kgbmV3IGtpbmRzIG9mIGlubGluZSBj
YWNoZXMgZm9yIHByb3BlcnR5IHR5cGUgaW5mZXJlbmNlIChodHRwczovL3dlYmtpdC5vcmcvYi8x
NDg2MTApLgorCisgICAgICAgIFByZXZpb3VzbHksIG91ciBpbmxpbmUgY2FjaGVzIGhhZCBmb3Vy
IHByb2JsZW1zIHRoYXQgbWFkZSB0aGVtIGRpZmZpY3VsdCB0byB3b3JrIHdpdGg6CisKKyAgICAg
ICAgSW1wb3NzaWJsZSB0byByZWdlbmVyYXRlIGEgcHJldmlvdXNseSBnZW5lcmF0ZWQgc3R1Yjog
U2F5IHRoYXQgc29tZSBhY2Nlc3MgKG8uZiA9IHYpIGNhdXNlcyBvdXIKKyAgICAgICAgSUMgY29k
ZSB0byBlbWl0IHNvbWUgc3R1YjsgbGV0J3MgY2FsbCBpdCBzdHViMS4gVGhlbiBsYXRlciB3ZSBm
aW5kIHRoYXQgd2UgbmVlZCB0byBlbWl0IGEKKyAgICAgICAgZGlmZmVyZW50IHN0dWIsIHN0dWIy
LCB3aGVyZSB3ZSB0aGluayB0aGF0IHN0dWIyIG1pZ2h0IHN1YnN1bWUgc3R1YjEuIFdlIHNheSB0
aGF0IHN0dWIyCisgICAgICAgIHN1YnN1bWVzIHN0dWIxIGlmIGZhaWxpbmcgdG8gZXhlY3V0ZSBz
dHViMiB0byBjb21wbGV0aW9uIG1lYW5zIHRoYXQgd2UgYXJlIGd1YXJhbnRlZWQgdG8gZmFpbAor
ICAgICAgICB0byBleGVjdXRlIHN0dWIxIHRvIGNvbXBsZXRpb24uIFRoaXMgY291bGQgaGFwcGVu
IGluIHRydW5rIGlmIHN0dWIyIGhhcyB0aGUgc2FtZSBiYXNlIHN0cnVjdHVyZQorICAgICAgICBh
cyBzdHViMSBidXQgZGlmZmVyZW50IHByb3RvdHlwZSBjb25kaXRpb25zLiBJdCBjb3VsZCBoYXBw
ZW4gd2l0aCBwcm9wZXJ0eSB0eXBlIGluZmVyZW5jZSBpZgorICAgICAgICBzdHViMiBoYXMgYSBs
b29zZXIgdHlwZSBjaGVjayBvbiB2IHRoYW4gc3R1YjEgZGlkLiBDdXJyZW50bHksIGlmIHRoaXMg
aGFwcGVuZWQsIHdlIHdvdWxkIGVtaXQKKyAgICAgICAgc3R1YjIgYW5kIGhhdmUgaXRzIHNsb3cg
cGF0aCBqdW1wIHRvIHN0dWIxLiBIZW5jZSwgd2Ugd291bGQgc3RpbGwgZW5kIHVwIGV4ZWN1dGlu
ZyB0aGUgY2hlY2tzCisgICAgICAgIG9mIHN0dWIxIGJlZm9yZSBmYWxsaW5nIHRocm91Z2ggdG8g
dGhlIHNsb3cgcGF0aC4gVGhpcyBnZXRzIGJhZCB3aGVuIHRoZXJlIGFyZSBtYW55IHN0dWJzLgor
ICAgICAgICBTdHViMSBtaWdodCBiZSBpbiBmcm9udCBvZiBhIGJ1bmNoIG9mIG90aGVyIHN0dWJz
LCBzbyB3aGVuIHdlIGFkZCBzdHViMiwgd2Ugd2lsbCBlbmQgdXAKKyAgICAgICAgZXhlY3V0aW5n
IGJvdGggc3R1YjIncyBhbmQgc3R1YjEncyBjaGVja3MgYmVmb3JlIGZhbGxpbmcgdGhyb3VnaCB0
byB0aGUgb3RoZXIgc3R1YnMuIEl0IHdvdWxkCisgICAgICAgIGJlIGJldHRlciBpZiB3ZSBjb3Vs
ZCByZW1vdmUgc3R1YjEgZnJvbSB0aGUgbGlzdCBhdCB0aGlzIHBvaW50LiBCdXQgc2luY2Ugc3R1
YjEgY291bGQgYmUgbGlua2VkCisgICAgICAgIHRvIGZyb20gYSBkaWZmZXJlbnQgc3R1YiB0aGF0
IHdlIGhhZCBhbHJlYWR5IGdlbmVyYXRlZCwgd2UnZCBoYXZlIHRvIGhhdmUgYSB3YXkgb2YgcGF0
Y2hpbmcKKyAgICAgICAgc3R1YnMgb3IgcmVnZW5lcmF0aW5nIHRoZW0gZnJvbSBzY3JhdGNoLiBU
aGlzIGlzIGN1cnJlbnR5IGltcG9zc2libGUgYmVjYXVzZSB3ZSBqdXN0IGRvbid0IGtlZXAKKyAg
ICAgICAgYXJvdW5kIGVub3VnaCBtZXRhLWRhdGEgdG8gbWVzcyB3aXRoIGEgc3R1YiBhZnRlciBp
dCdzIGdlbmVyYXRlZC4gQWZ0ZXIgdGhpcyBjaGFuZ2UsIHdlIG5ldmVyCisgICAgICAgIGxpbmsg
bmV3IHN0dWJzIG9udG8gYSBsaW5rZWQgbGlzdCBvZiBwcmUtZXhpc3Rpbmcgc3R1YnM7IGluc3Rl
YWQgZWFjaCBJQyB3aWxsIGhhdmUgb25lIHN0dWIKKyAgICAgICAgaGFuZ2luZyBvZmYgb2YgaXQg
YW5kIHdlIGFsd2F5cyByZWdlbmVyYXRlIHRoYXQgb25lIHN0dWIgZnJvbSBzY3JhdGNoLiBUaGF0
IG9uZSBzdHViIGNvbnRhaW5zCisgICAgICAgIGVpdGhlciBhIEJpbmFyeVN3aXRjaCBvciBhIGJy
YW5jaCBjYXNjYWRlIHRvIHNlbGVjdCBvbmUgb2YgdGhlIEFjY2Vzc0Nhc2VzLiBFYWNoIEFjY2Vz
c0Nhc2UgaXMKKyAgICAgICAgYW4gb2JqZWN0IHRoYXQgZGVzY3JpYmVzIGV2ZXJ5dGhpbmcgd2Ug
bmVlZCB0byByZWdlbmVyYXRlIGl0IGluIHRoZSBmdXR1cmUuIFRoaXMgbWVhbnMgdGhhdAorICAg
ICAgICB3aGVuIHdlIGFkZCBhIG5ldyBjYXNlIHRvIGFuIElDIHN0dWIsIHdlIGNhbiBmaWd1cmUg
b3V0IHdoaWNoIHByZXZpb3VzIGNhc2VzIHRoaXMgb25lIHN1YnN1bWVzLgorCisgICAgICAgIFBv
b3Igc2NhbGFiaWxpdHkgd2hlbiB0aGVyZSBhcmUgbWFueSBjYXNlczogUHJldmlvdXNseSwgdGhl
IGNhc2VzIG9mIGEgcG9seW1vcnBoaWMgaW5saW5lIGNhY2hlCisgICAgICAgIGZvcm1lZCBhIGxp
bmtlZCBsaXN0IG9mIGJyYW5jaGVzLiBUaGlzIG1lYW50IHRoYXQgdGhlIGNvbXBsZXhpdHkgb2Yg
YW4gaW5saW5lIGNhY2hlIGdyZXcKKyAgICAgICAgbGluZWFybHkgd2l0aCB0aGUgbnVtYmVyIG9m
IGNhc2VzLiBUaGlzIGNoYW5nZSB0dXJucyB0aGlzIGludG8gYSBCaW5hcnlTd2l0Y2ggaW4gbW9z
dCBjYXNlcywKKyAgICAgICAgbGVhZGluZyB0byBsb2dhcml0aG1pYyBzY2FsaW5nLgorCisgICAg
ICAgIER1cGxpY2F0ZSBjb2RlIGJldHdlZW4gZ2V0LCBwdXQsIGFuZCBpbjogVGhlIGNvZGUgZm9y
IG9wX2dldF9ieV9pZCwgb3BfcHV0X2J5X2lkLCBhbmQgb3BfaW4KKyAgICAgICAgaW5saW5lIGNh
Y2hlcyBncmV3IGluZGVwZW5kZW50bHkgYW5kIGVuZGVkIHVwIGhhdmluZyBhIGxvdCBvZiBkdXBs
aWNhdGUgY29kZS4gV2UgaGFkIHRoZSB3b3JzdAorICAgICAgICBraW5kcyBvZiBkdXBsaWNhdGUg
Y29kZS4gSW4gc29tZSBjYXNlcywgdGhlIGNvZGUgd2FzIGNvcHktcGFzdGVkLiBJbiBvdGhlciBj
YXNlcywgd2Ugd3JvdGUgY29kZQorICAgICAgICB0aGF0IGZlbHQgbGlrZSBpdCB3YXMgbmV3IGRl
c3BpdGUgdGhlIGZhY3QgdGhhdCBpdCB3YXMgbG9naWNhbGx5IGlkZW50aWNhbCB0byBjb2RlIHRo
YXQgd2FzCisgICAgICAgIGFscmVhZHkgd3JpdHRlbiBlbHNld2hlcmUuIFRoZSBtYWluIHNvdXJj
ZXMgb2YgZHVwbGljYXRpb24gd2VyZSBpbiBzZWxlY3RpbmcgYSBzY3JhdGNoCisgICAgICAgIHJl
Z2lzdGVyLCBjaGVja2luZyBhbGwgb2YgdGhlIE9iamVjdFByb3BlcnR5Q29uZGl0aW9ucyBhbmQg
dGhlIGJhc2Ugc3RydWN0dXJlLCB0aGUgcHJvIGZvcm1hCisgICAgICAgIGludm9sdmVkIGluIGdl
bmVyYXRpbmcgYSBzdHViLCBhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyBuZWVkZWQgdG8gZGVzY3Jp
YmUgYWxsIG9mIHRoZSBhY2Nlc3MKKyAgICAgICAgY2FzZXMuIFRoaXMgY2hhbmdlIGRlZHVwbGlj
YXRlcyBhbGwgb2YgdGhhdCBjb2RlLiBOb3csIGFsbCBvZiB0aG9zZSBJQ3MgdXNlIHRoZSBzYW1l
IGNsYXNzZXM6CisgICAgICAgIHRoZSBQb2x5bW9ycGhpY0FjY2VzcyBhbmQgQWNjZXNzQ2FzZS4g
VGhlcmUgaXMgY29kZSBpbiB0aG9zZSBjbGFzc2VzIHRoYXQgaGFuZGxlcyBhbGwgb2YgdGhlCisg
ICAgICAgIGNvbW1vbiB0aGluZ3MsIGFuZCBmb3IgdGhlIG1vc3QgcGFydCB0aGUgb25seSBjb2Rl
IHRoYXQgYWN0dWFsbHkgc3BlY2lhbGl6ZXMgZm9yIHRoZSBraW5kIG9mCisgICAgICAgIGFjY2Vz
cyBpcyBpbiBzb21lIHN3aXRjaCBzdGF0ZW1lbnQgaW4gQWNjZXNzQ2FzZTo6Z2VuZXJhdGUoKS4K
KworICAgICAgICBTcGVjaWFsLWNhc2luZyBvZiBhcnJheSBsZW5ndGggYW5kIHN0cmluZyBsZW5n
dGg6IFByZXZpb3VzbHksIGFycmF5Lmxlbmd0aCBhbmQgc3RyaW5nLmxlbmd0aAorICAgICAgICB3
ZXJlIGhhbmRsZWQgaW4gYW4gYWQgaG9jIG1hbm5lciBpbiB0aGUgZ2V0X2J5X2lkIHJlcGF0Y2hp
bmcgY29kZS4gVGhlIGhhbmRsaW5nIHdhcyBzZXBhcmF0ZQorICAgICAgICBmcm9tIHRoZSBwb2x5
bW9ycGhpYyBnZXRfYnlfaWQgaGFuZGxpbmcsIHdoaWNoIG1lYW50IHRoYXQgd2UgY291bGQgbm90
IGhhbmRsZSBwb2x5bW9ycGhpYworICAgICAgICBsZW5ndGggYWNjZXNzZXMgaWYgb25lIG9mIHRo
ZSBsZW5ndGggY2FzZXMgd2FzIGVpdGhlciBhcnJheSBvciBzdHJpbmcgbGVuZ3RoLiBGb3IgZXhh
bXBsZSwgaWYKKyAgICAgICAgeW91IGhhZCAiby5sZW5ndGgiIHdoZXJlIHRoZSBsZW5ndGggd2Fz
IGVpdGhlciBhcnJheSBsZW5ndGggb3IgYSB2YW5pbGxhIGxlbmd0aCBwcm9wZXJ0eSwgdGhlbgor
ICAgICAgICB0aGUgZ2V0X2J5X2lkIGlubGluZSBjYWNoZSB3b3VsZCBlaXRoZXIgZW1pdCBhIG1v
bm9tb3JwaGljIHN0dWIgZm9yIGFycmF5IGxlbmd0aCwgb3IgaXQgYQorICAgICAgICBtb25vbW9y
cGhpYyBzdHViIGZvciB0aGUgdmFuaWxsYSBsZW5ndGggcHJvcGVydHksIGJ1dCBuZXZlciBhIHBv
bHltb3JwaGljIHN0dWIgKG9yIGxpc3QpIHRoYXQKKyAgICAgICAgY291bGQgZG8gYm90aC4gVGhp
cyBjaGFuZ2UgYWRkcmVzc2VzIHRoaXMgcHJvYmxlbSBieSBmb2xkaW5nIGFycmF5IGxlbmd0aCBh
bmQgc3RyaW5nIGxlbmd0aAorICAgICAgICBpbnRvIHRoZSBwb2x5bW9ycGhpYyBnZXRfYnlfaWQg
Y29kZS4KKworICAgICAgICBUaGlzIGlzIHN0aWxsIGEgd29yayBpbiBwcm9ncmVzcyBhbmQgaGFz
bid0IGJlZW4gdGVzdGVkIGNvbXBsZXRlbHkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoK
KyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2o6
CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9q
LmZpbHRlcnM6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmg6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6ZHVtcFdpdGhOYW1lKToKKyAgICAgICAg
KiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnByaW50
R2V0QnlJZENhY2hlU3RhdHVzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcmludFB1dEJ5
SWRDYWNoZVN0YXR1cyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNp
dGlvbnMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmdldEJ5VmFsSW5mb01hcCk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6YWRkU3R1YkluZm8pOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmZpbmRTdHViSW5mbyk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6c3R1YkluZm9CZWdpbik6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6c3R1YkluZm9FbmQpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3Bw
OgorICAgICAgICAoSlNDOjpHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm9XaXRob3V0
RXhpdFNpdGVGZWVkYmFjayk6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3Mu
Y3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBo
aWNHZXRCeUlkTGlzdC5jcHAuCisgICAgICAgIChKU0M6OkFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6
YWRkV2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6cmVz
dG9yZVNjcmF0Y2gpOgorICAgICAgICAoSlNDOjpBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnN1Y2Nl
ZWQpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpBY2Nlc3NDYXNlKToKKyAgICAgICAgKEpT
Qzo6QWNjZXNzQ2FzZTo6Z2V0KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6cmVwbGFjZSk6
CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OnRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpB
Y2Nlc3NDYXNlOjpzZXR0ZXIpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjppbik6CisgICAg
ICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdldExlbmd0aCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nh
c2U6On5BY2Nlc3NDYXNlKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6ZnJvbVN0cnVjdHVy
ZVN0dWJJbmZvKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Y2xvbmUpOgorICAgICAgICAo
SlNDOjpBY2Nlc3NDYXNlOjpndWFyZGVkQnlTdHJ1Y3R1cmVDaGVjayk6CisgICAgICAgIChKU0M6
OkFjY2Vzc0Nhc2U6OmNhblJlcGxhY2UpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpkdW1w
KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6dmlzaXRXZWFrKToKKyAgICAgICAgKEpTQzo6
QWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNl
OjpnZW5lcmF0ZSk6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQWNjZXNzOjpQb2x5bW9ycGhp
Y0FjY2Vzcyk6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQWNjZXNzOjp+UG9seW1vcnBoaWNB
Y2Nlc3MpOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZVdpdGhD
YXNlcyk6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQWNjZXNzOjpyZWdlbmVyYXRlV2l0aENh
c2UpOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzczo6dmlzaXRXZWFrKToKKyAgICAg
ICAgKEpTQzo6UG9seW1vcnBoaWNBY2Nlc3M6OmR1bXApOgorICAgICAgICAoSlNDOjpQb2x5bW9y
cGhpY0FjY2Vzczo6cmVnZW5lcmF0ZSk6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgor
ICAgICAgICAoSlNDOjpHZXRCeUlkQWNjZXNzOjpHZXRCeUlkQWNjZXNzKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6fkdldEJ5SWRBY2Nlc3MpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpHZXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0dXJlU3R1YkluZm8pOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpHZXRCeUlkQWNjZXNzOjp2aXNpdFdlYWspOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6ZnJvbSk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlBvbHltb3JwaGljR2V0QnlJZExpc3Q6On5Qb2x5bW9y
cGhpY0dldEJ5SWRMaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNHZXRC
eUlkTGlzdDo6Y3VycmVudFNsb3dQYXRoVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
UG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6YWRkQWNjZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6UG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6aXNGdWxsKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6UG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6aXNBbG1vc3RGdWxsKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6UG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6ZGlkU2VsZlBhdGNoaW5nKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6dmlzaXRXZWFrKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oOiBDb3BpZWQgZnJv
bSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5o
LgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjppc0dldCk6CisgICAgICAgIChKU0M6OkFjY2Vz
c0Nhc2U6OmlzUHV0KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6aXNJbik6CisgICAgICAg
IChKU0M6OkFjY2Vzc0Nhc2U6OnR5cGUpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpvZmZz
ZXQpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjp2aWFQcm94eSk6CisgICAgICAgIChKU0M6
OkFjY2Vzc0Nhc2U6OnN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6Om5ld1N0
cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmNvbmRpdGlvblNldCk6CisgICAg
ICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmFkZGl0aW9uYWxTZXQpOgorICAgICAgICAoSlNDOjpBY2Nl
c3NDYXNlOjpkb2VzQ2FsbHMpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpjYWxsTGlua0lu
Zm8pOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzczo6aXNFbXB0eSk6CisgICAgICAg
IChKU0M6OlBvbHltb3JwaGljQWNjZXNzOjpzaXplKToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBo
aWNBY2Nlc3M6OmF0KToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNBY2Nlc3M6Om9wZXJhdG9y
W10pOgorICAgICAgICAoSlNDOjpHZXRCeUlkQWNjZXNzOjpHZXRCeUlkQWNjZXNzKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6aXNTZXQpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpHZXRCeUlkQWNjZXNzOjpvcGVyYXRvciEpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpHZXRCeUlkQWNjZXNzOjp0eXBlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6R2V0QnlJZEFj
Y2Vzczo6c3RydWN0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6
Y29uZGl0aW9uU2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6c3R1
YlJvdXRpbmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpHZXRCeUlkQWNjZXNzOjpkb2VzQ2Fs
bHMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojppc0Vt
cHR5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6c2l6
ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmF0KTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6b3BlcmF0b3Jb
XSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1
cmVMaXN0Lmg6IFJlbW92ZWQuCisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlk
TGlzdC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlk
TGlzdC5oOiBSZW1vdmVkLgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExp
c3QuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExp
c3QuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcDoKKyAg
ICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKToKKyAgICAgICAg
KiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZVN0dWJJbmZvOjpkZXJlZik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjphZGRB
Y2Nlc3NDYXNlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnJlc2V0KToKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW5jZXMpOgorICAg
ICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmg6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZVN0dWJJbmZvOjpTdHJ1Y3R1cmVTdHViSW5mbyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZVN0dWJJbmZvOjppbml0R2V0QnlJZFNlbGYpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHVi
SW5mbzo6aW5pdFB1dEJ5SWRSZXBsYWNlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1Yklu
Zm86OmluaXRTdHViKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnNldFNlZW4p
OgorICAgICAgICAoSlNDOjpnZXRTdHJ1Y3R1cmVTdHViSW5mb0NvZGVPcmlnaW4pOgorICAgICAg
ICAoSlNDOjppc0dldEJ5SWRBY2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjppc1B1dEJ5
SWRBY2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjppc0luQWNjZXNzKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmluaXRHZXRCeUlkTGlzdCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjppbml0UHV0QnlJZFRyYW5zaXRp
b24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdFB1dEJ5
SWRMaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmluaXRJ
bkxpc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6YWRkV2F0
Y2hwb2ludCk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluKToKKyAgICAgICAg
KiBmdGwvRlRMQ29tcGlsZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6bW1BbGxvY2F0ZURhdGFT
ZWN0aW9uKToKKyAgICAgICAgKiBqaXQvQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIGppdC9BY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5oOiBSZW1v
dmVkLgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6QXNz
ZW1ibHlIZWxwZXJzOjpicmFuY2hJZkVtcHR5KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxw
ZXJzOjpicmFuY2hTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmJv
eEJvb2xlYW5QYXlsb2FkKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpib3hCb29s
ZWFuKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpib3hJbnQzMik6CisgICAgICAg
ICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHA6
CisgICAgICAgIChKU0M6OmdhcmJhZ2VTdHViSW5mbyk6CisgICAgICAgIChKU0M6OkpJVElubGlu
ZUNhY2hlR2VuZXJhdG9yOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6
OkpJVEJ5SWRHZW5lcmF0b3I6OkpJVEJ5SWRHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVRH
ZXRCeUlkR2VuZXJhdG9yOjpKSVRHZXRCeUlkR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklU
UHV0QnlJZEdlbmVyYXRvcjo6SklUUHV0QnlJZEdlbmVyYXRvcik6CisgICAgICAgICogaml0L0pJ
VElubGluZUNhY2hlR2VuZXJhdG9yLmg6CisgICAgICAgIChKU0M6OkpJVElubGluZUNhY2hlR2Vu
ZXJhdG9yOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVElubGlu
ZUNhY2hlR2VuZXJhdG9yOjpzdHViSW5mbyk6CisgICAgICAgIChKU0M6OkpJVEJ5SWRHZW5lcmF0
b3I6OkpJVEJ5SWRHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVRCeUlkR2VuZXJhdG9yOjpy
ZXBvcnRTbG93UGF0aENhbGwpOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAg
ICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OnJlcGF0Y2hDYWxsKToKKyAg
ICAgICAgKEpTQzo6cmVwYXRjaEJ5SWRTZWxmQWNjZXNzKToKKyAgICAgICAgKEpTQzo6cmVzZXRH
ZXRCeUlEQ2hlY2tBbmRMb2FkKToKKyAgICAgICAgKEpTQzo6cmVzZXRQdXRCeUlEQ2hlY2tBbmRM
b2FkKToKKyAgICAgICAgKEpTQzo6cmVwbGFjZVdpdGhKdW1wKToKKyAgICAgICAgKEpTQzo6dHJ5
Q2FjaGVHZXRCeUlEKToKKyAgICAgICAgKEpTQzo6cmVwYXRjaEdldEJ5SUQpOgorICAgICAgICAo
SlNDOjphcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjph
cHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUlkRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjp0cnlD
YWNoZVB1dEJ5SUQpOgorICAgICAgICAoSlNDOjpyZXBhdGNoUHV0QnlJRCk6CisgICAgICAgIChK
U0M6OnRyeVJlcGF0Y2hJbik6CisgICAgICAgIChKU0M6OnJlcGF0Y2hJbik6CisgICAgICAgIChK
U0M6OnJlc2V0R2V0QnlJRCk6CisgICAgICAgIChKU0M6OnJlc2V0UHV0QnlJRCk6CisgICAgICAg
IChKU0M6OmNoZWNrT2JqZWN0UHJvcGVydHlDb25kaXRpb24pOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OmVtaXRSZXN0b3JlU2NyYXRjaCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmxpbmtSZXN0
b3JlU2NyYXRjaCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OnRvU3RyaW5nKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6a2luZEZvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmN1c3RvbUZv
cik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmdlbmVyYXRlQnlJZFN0dWIpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpwYXRjaEp1bXBUb0dldEJ5SWRTdHViKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6dHJ5QnVpbGRHZXRCeUlETGlzdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmJ1aWxk
R2V0QnlJRExpc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjphcHByb3ByaWF0ZUxpc3RCdWls
ZGluZ1B1dEJ5SWRGdW5jdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmVtaXRQdXRSZXBs
YWNlU3R1Yik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmVtaXRQdXRUcmFuc2l0aW9uU3R1Yik6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OnRyeUJ1aWxkUHV0QnlJZExpc3QpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpidWlsZFB1dEJ5SWRMaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQv
U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6U2NyYXRjaFJlZ2lz
dGVyQWxsb2NhdG9yOjpsb2NrKToKKyAgICAgICAgKEpTQzo6U2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yOjphbGxvY2F0ZVNjcmF0Y2gpOgorICAgICAgICAqIGppdC9TY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3IuaDoKKyAgICAgICAgKEpTQzo6U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpTY3JhdGNo
UmVnaXN0ZXJBbGxvY2F0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgorCiAyMDE1
LTA5LTA4ICBQZXIgQXJuZSBWb2xsYW4gIDxwZWF2b0BvdXRsb29rLmNvbT4KIAogICAgICAgICBb
V2luXSBDb21waWxlIGVycm9ycyBpbiBpbnNwZWN0b3IgY29kZS4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE4OTQ5MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDggKzEwNCw3IEBA
IHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlD
b25kaXRpb24uY3BwCiAgICAgYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3Bw
CiAgICAgYnl0ZWNvZGUvT3Bjb2RlLmNwcAotICAgIGJ5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJ
ZExpc3QuY3BwCi0gICAgYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAKKyAgICBi
eXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKICAgICBieXRlY29kZS9QcmVjaXNlSnVtcFRh
cmdldHMuY3BwCiAgICAgYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uY3BwCiAgICAgYnl0ZWNv
ZGUvUHV0QnlJZFN0YXR1cy5jcHAKQEAgLTM1Niw3ICszNTUsNiBAQCBzZXQoSmF2YVNjcmlwdENv
cmVfU09VUkNFUwogICAgIGludGVycHJldGVyL1Byb3RvQ2FsbEZyYW1lLmNwcAogICAgIGludGVy
cHJldGVyL1N0YWNrVmlzaXRvci5jcHAKIAotICAgIGppdC9BY2Nlc3NvckNhbGxKSVRTdHViUm91
dGluZS5jcHAKICAgICBqaXQvQXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3MuY3BwCiAgICAgaml0
L0Fzc2VtYmx5SGVscGVycy5jcHAKICAgICBqaXQvQmluYXJ5U3dpdGNoLmNwcApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUu
dmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxODk0OTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNDMsOCArMzQzLDcgQEAKICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcCIgLz4K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE9wY29k
ZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2Rl
XFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cYnl0ZWNvZGVcUG9seW1vcnBoaWNBY2Nlc3MuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cYnl0ZWNvZGVcUHJlY2lzZUp1bXBUYXJnZXRzLmNwcCIgLz4KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFByb3BlcnR5Q29uZGl0aW9uLmNwcCIgLz4KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFB1dEJ5SWRTdGF0dXMuY3BwIiAvPgpAQCAt
NjE3LDcgKzYxNiw2IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRlclxK
U1N0YWNrLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGludGVycHJldGVyXFBy
b3RvQ2FsbEZyYW1lLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGludGVycHJl
dGVyXFN0YWNrVmlzaXRvci5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRc
QWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5caml0XEFyaXR5Q2hlY2tGYWlsUmV0dXJuVGh1bmtzLmNwcCIgLz4KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGppdFxBc3NlbWJseUhlbHBlcnMuY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5caml0XEJpbmFyeVN3aXRjaC5jcHAiIC8+CkBAIC0xMDQ0LDggKzEwNDIs
NyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE9w
Y29kZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcT3BlcmFuZHMu
aCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFBvbHltb3JwaGljR2V0
QnlJZExpc3QuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFBvbHlt
b3JwaGljUHV0QnlJZExpc3QuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVj
b2RlXFBvbHltb3JwaGljQWNjZXNzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxi
eXRlY29kZVxQcmVjaXNlSnVtcFRhcmdldHMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGJ5dGVjb2RlXFByb3BlcnR5Q29uZGl0aW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxieXRlY29kZVxQdXRCeUlkU3RhdHVzLmgiIC8+CkBAIC0xNDE2LDcgKzE0MTMsNiBA
QAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW50ZXJwcmV0ZXJcUHJvdG9DYWxsRnJhbWUu
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGludGVycHJldGVyXFJlZ2lzdGVyLmgi
IC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRlclxTdGFja1Zpc2l0b3Iu
aCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxBY2Nlc3NvckNhbGxKSVRTdHVi
Um91dGluZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEFyaXR5Q2hlY2tG
YWlsUmV0dXJuVGh1bmtzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcQXNz
ZW1ibHlIZWxwZXJzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcQmluYXJ5
U3dpdGNoLmgiIC8+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUu
dmN4cHJvai5maWx0ZXJzCShyZXZpc2lvbiAxODk0OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMJ
KHdvcmtpbmcgY29weSkKQEAgLTE5OCw3ICsxOTgsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cYnl0ZWNvZGVcT3Bjb2RlLmNwcCI+CiAgICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9GaWx0
ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29k
ZVxQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxieXRlY29kZVxQb2x5bW9ycGhpY0FjY2Vzcy5jcHAiPgogICAgICAgPEZpbHRlcj5ieXRlY29k
ZTwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
Ynl0ZWNvZGVcUHV0QnlJZFN0YXR1cy5jcHAiPgpAQCAtMTYyNiw5ICsxNjI2LDYgQEAKICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGxsdm1cTExWTUFQSS5jcHAiPgogICAgICAgPEZpbHRlcj5s
bHZtPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxqaXRcQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuY3BwIj4KLSAgICAgIDxGaWx0ZXI+aml0
PC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxp
bnNwZWN0b3JcQ29uc29sZU1lc3NhZ2UuY3BwIj4KICAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yPC9G
aWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CkBAIC0xNjk1LDkgKzE2OTIsNiBAQAogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXEpTSmF2YVNjcmlwdENhbGxGcmFtZVByb3RvdHlw
ZS5jcHAiPgogICAgICAgPEZpbHRlcj5pbnNwZWN0b3I8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGls
ZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFBvbHltb3JwaGljR2V0QnlJ
ZExpc3QuY3BwIj4KLSAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4KLSAgICA8L0NsQ29t
cGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHByb2ZpbGVyXFByb2ZpbGVySmV0dGlz
b25SZWFzb24uY3BwIj4KICAgICAgIDxGaWx0ZXI+cHJvZmlsZXI8L0ZpbHRlcj4KICAgICA8L0Ns
Q29tcGlsZT4KQEAgLTIwOTcsNyArMjA5MSw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxieXRlY29kZVxPcGVyYW5kcy5oIj4KICAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4K
ICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFBv
bHltb3JwaGljUHV0QnlJZExpc3QuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRl
Y29kZVxQb2x5bW9ycGhpY0FjY2Vzcy5oIj4KICAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRl
cj4KICAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2Rl
XFB1dEJ5SWRTdGF0dXMuaCI+CkBAIC00MjA1LDkgKzQxOTksNiBAQAogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cbGx2bVxMTFZNSGVhZGVycy5oIj4KICAgICAgIDxGaWx0ZXI+bGx2bTwvRmls
dGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEFj
Y2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmgiPgotICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4K
LSAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGFzc2VtYmxlclxB
Ym9ydFJlYXNvbi5oIj4KICAgICAgIDxGaWx0ZXI+YXNzZW1ibGVyPC9GaWx0ZXI+CiAgICAgPC9D
bEluY2x1ZGU+CkBAIC00Mjg2LDkgKzQyNzcsNiBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccnVudGltZVxKU0NJbmxpbmVzLmgiPgogICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+
CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQ
b2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgiPgotICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVy
PgotICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccHJvZmlsZXJc
UHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oIj4KICAgICAgIDxGaWx0ZXI+cHJvZmlsZXI8L0ZpbHRl
cj4KICAgICA8L0NsSW5jbHVkZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiAxODk0OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjcyLDcgKzI3Miw2
IEBACiAJCTBGMzAwQjdDMThBQjFCMTQwMEE2RDcyRSAvKiBERkdJbnRlZ2VyQ2hlY2tDb21iaW5p
bmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYzMDBCN0ExOEFCMUIxNDAwQTZENzJFIC8qIERGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYz
NEIxNDkxNkQ0MjAxMDAwMUNEQTVBIC8qIERGR1VzZUtpbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzNEIxNDcxNkQ0MjAwRTAwMUNEQTVBIC8q
IERGR1VzZUtpbmQuY3BwICovOyB9OwogCQkwRjM0QjE0QTE2RDQyMDEzMDAxQ0RBNUEgLyogREZH
VXNlS2luZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYzNEIxNDgxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjM0QjE0QzE2RDQzRTBEMDAxQ0RB
NUEgLyogUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM0QjE0QjE2RDQzRTBDMDAxQ0RBNUEgLyog
UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYzOEIwMTExN0NGMDc4MDAwQjE0NEQzIC8qIExM
SW50RW50cnlwb2ludC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjM4QjAwRjE3Q0YwNzdGMDBCMTQ0RDMgLyogTExJbnRFbnRyeXBvaW50LmNwcCAq
LzsgfTsKIAkJMEYzOEIwMTIxN0NGMDc4MzAwQjE0NEQzIC8qIExMSW50RW50cnlwb2ludC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzOEIwMTAxN0NG
MDc3RjAwQjE0NEQzIC8qIExMSW50RW50cnlwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMzhCMDE3MTdDRkU3NTUwMEIxNDREMyAvKiBE
RkdDb21waWxhdGlvbktleS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjM4QjAxMzE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25LZXku
Y3BwICovOyB9OwpAQCAtMzI0LDggKzMyMyw2IEBACiAJCTBGNDg1MzJBMTg3REZERUMwMDgzQjY4
NyAvKiBGVExSZWNvdmVyeU9wY29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0ODUzMjYxODdERkRFQzAwODNCNjg3IC8qIEZUTFJlY292ZXJ5T3Bj
b2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEY0OTNBRkExNkQwQ0FEMzAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDkzQUY4MTZEMENBRDEwMDg0
NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi87IH07CiAJCTBGNEI5NERDMTdCOUYwNzUwMERE
MDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY0Qjk0REIxN0I5RjA3NTAwREQwM0E0IC8qIFR5cGVkQXJyYXlJ
bmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
LQkJMEY0Q0VENUUxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJZExpc3QuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0Q0VENUMx
OENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwICovOyB9OwotCQkw
RjRDRUQ1RjE4Q0VBN0FCMDA4MDJGRTAgLyogUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0Q0VENUQxOENFQTdB
QjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJZExpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjRGMjlERjE4QjZBRDFDMDA1N0JDMTUg
LyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RjI5REQxOEI2QUQxQzAwNTdC
QzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcCAqLzsgfTsK
IAkJMEY0RjI5RTAxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0
aW1hdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjRGMjlERTE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRF
c3RpbWF0aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjUwQUYzQzE5M0U4QjM5MDA2NzRFRTggLyogREZHU3RydWN0dXJlQ2xvYmJl
clN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjUwQUYzQjE5M0U4QjM5MDA2NzRFRTggLyogREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM5OCw4ICsz
OTUsNiBAQAogCQkwRjcxNENBNDE2RUE5MkYwMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFn
YXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjcxNENBMTE2RUE5MkVEMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25Q
aGFzZS5jcHAgKi87IH07CiAJCTBGNzE0Q0E1MTZFQTkyRjIwMEYzRUJFQiAvKiBERkdCYWNrd2Fy
ZHNQcm9wYWdhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjcxNENBMjE2RUE5MkVEMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFn
YXRpb25QaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGNzQzQkFBMTZCODgyNDkwMDlGOTI3NyAvKiBBUk02NERpc2Fzc2VtYmxlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTJBM0EyMDE2
NTFDNjYxMDBBODBBRkUgLyogQVJNNjREaXNhc3NlbWJsZXIuY3BwICovOyB9OwotCQkwRjc1NzZE
MjE4RTFGRUU5MDAyRUY0Q0QgLyogQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NTc2RDAxOEUxRkVF
OTAwMkVGNENEIC8qIEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmNwcCAqLzsgfTsKLQkJMEY3
NTc2RDMxOEUxRkVFOTAwMkVGNENEIC8qIEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc1NzZEMTE4RTFG
RUU5MDAyRUY0Q0QgLyogQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjc2NkQyODE1QThDQzFFMDA4
RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY3NjZEMjYxNUE4Q0MxQjAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0
aW5lLmNwcCAqLzsgfTsKIAkJMEY3NjZEMkIxNUE4Q0MzODAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0
aW5lU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNzY2RDI5MTVBOENDMzQwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZVNldC5jcHAgKi87IH07
CiAJCTBGNzY2RDJDMTVBOENDM0EwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZVNldC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NjZEMkExNUE4Q0Mz
NDAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTQ3Myw4ICs0NjgsNiBAQAogCQkwRjlFMzI2NDFC
MDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUUzMjYyMUIwNUFCMDQw
MDgwMUVENSAvKiBERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOUZCNEY0MTdGQ0I5MTcwMENC
NjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUZCNEYyMTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFj
a0xheW91dFBoYXNlLmNwcCAqLzsgfTsKIAkJMEY5RkI0RjUxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERG
R1N0YWNrTGF5b3V0UGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGOUZCNEYzMTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEY5
RkM4QzMxNEUxQjVGRTAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RkM4QkYxNEUxQjVG
QjAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwICovOyB9OwotCQkwRjlGQzhD
NDE0RTFCNjAwMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RkM4QzAxNEUxQjVGQjAwRDUy
QUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjlGQzhDNTE0RTFCNjA0MDBENTJBRTAgLyogUHV0
S2luZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5
RkM4QzExNEUxQjVGQjAwRDUyQUUwIC8qIFB1dEtpbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkEyQzE3QjE3RDdDRjg0MDA5RDAxNUYgLyog
VGVzdFJ1bm5lclV0aWxzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGQTJDMTc5MTdEN0NGODQwMDlEMDE1RiAvKiBUZXN0UnVubmVyVXRpbHMuY3Bw
ICovOyB9OwogCQkwRkEyQzE3QzE3RDdDRjg0MDA5RDAxNUYgLyogVGVzdFJ1bm5lclV0aWxzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkEyQzE3QTE3
RDdDRjg0MDA5RDAxNUYgLyogVGVzdFJ1bm5lclV0aWxzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTc0Miw2ICs3MzUsOCBAQAogCQkwRkY4QkRF
QTFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY4QkRFODFBRDRDRjcxMDBERkU4ODQgLyog
SW5mZXJyZWRWYWx1ZS5jcHAgKi87IH07CiAJCTBGRjhCREVCMUFENENGNzEwMERGRTg4NCAvKiBJ
bmZlcnJlZFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkY4QkRFOTFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRjkyMkQ0MTRGNDZC
NDEwMDQxQTI0RSAvKiBMTEludE9mZnNldHNFeHRyYWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NjgwQTExNEJBN0Y4MjAwQkZFMjcyIC8q
IExMSW50T2Zmc2V0c0V4dHJhY3Rvci5jcHAgKi87IH07CisJCTBGRjlDRTczMUI5Q0Q2RDAwMDRF
RENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY5Q0U3MTFCOUNENkQwMDA0RURDQTYgLyogUG9seW1vcnBo
aWNBY2Nlc3MuY3BwICovOyB9OworCQkwRkY5Q0U3NDFCOUNENkQwMDA0RURDQTYgLyogUG9seW1v
cnBoaWNBY2Nlc3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRjlDRTcyMUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRkE1NDk3MTZC
ODgzNTAwMEIzQTk4MiAvKiBBNjRET3Bjb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MkEzQTIyMTY1MUM2OTcwMEE4MEFGRSAvKiBBNjRET3Bj
b2RlLmNwcCAqLzsgfTsKIAkJMEZGQTU0OTgxNkI4ODM1MzAwQjNBOTgyIC8qIEE2NERPcGNvZGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MkEzQTIz
MTY1MUM2OTcwMEE4MEFGRSAvKiBBNjRET3Bjb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGQjZDMzgxQUY0OEREQzAwREIxQkY3IC8qIFR5
cGVvZlR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZGQjZDMzYxQUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5cGUuY3BwICovOyB9OwpAQCAt
MjEwMyw3ICsyMDk4LDYgQEAKIAkJMEYzMDBCN0ExOEFCMUIxNDAwQTZENzJFIC8qIERGR0ludGVn
ZXJDaGVja0NvbWJpbmluZ1BoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmg7IHBhdGggPSBkZmcvREZHSW50ZWdlckNo
ZWNrQ29tYmluaW5nUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzNEIx
NDcxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gREZHVXNlS2luZC5jcHA7IHBhdGggPSBkZmcvREZHVXNlS2luZC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzRCMTQ4MTZENDIwMEUwMDFDREE1
QSAvKiBERkdVc2VLaW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Vz
ZUtpbmQuaDsgcGF0aCA9IGRmZy9ERkdVc2VLaW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTBGMzRCMTRCMTZENDNFMEMwMDFDREE1QSAvKiBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVj
dHVyZUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9seW1vcnBoaWNB
Y2Nlc3NTdHJ1Y3R1cmVMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzhC
MDBGMTdDRjA3N0YwMEIxNDREMyAvKiBMTEludEVudHJ5cG9pbnQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gTExJbnRFbnRyeXBvaW50LmNwcDsgcGF0aCA9IGxsaW50L0xMSW50RW50cnlwb2ludC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzhCMDEwMTdDRjA3N0YwMEIxNDRE
MyAvKiBMTEludEVudHJ5cG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExJbnRFbnRyeXBvaW50Lmg7
IHBhdGggPSBsbGludC9MTEludEVudHJ5cG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYzOEIwMTMxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uS2V5LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NvbXBpbGF0aW9uS2V5LmNw
cDsgcGF0aCA9IGRmZy9ERkdDb21waWxhdGlvbktleS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0yMTU2LDggKzIxNTAsNiBAQAogCQkwRjQ4NTMyNjE4N0RGREVDMDA4M0I2ODcg
LyogRlRMUmVjb3ZlcnlPcGNvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
RlRMUmVjb3ZlcnlPcGNvZGUuaDsgcGF0aCA9IGZ0bC9GVExSZWNvdmVyeU9wY29kZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ5M0FGODE2RDBDQUQxMDA4NDUwOEIgLyogU291
cmNlUHJvdmlkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU291
cmNlUHJvdmlkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRCOTREQjE3
QjlGMDc1MDBERDAzQTQgLyogVHlwZWRBcnJheUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVHlwZWRBcnJheUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMEY0Q0VENUMxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJZExp
c3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUG9seW1vcnBoaWNH
ZXRCeUlkTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNENFRDVEMThD
RUE3QUIwMDgwMkZFMCAvKiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFBvbHltb3JwaGljR2V0QnlJZExpc3QuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY0RjI5REQxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4
ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcDsg
cGF0aCA9IGRmZy9ERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEYyOURFMThCNkFEMUMwMDU3QkMxNSAvKiBE
RkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5o
OyBwYXRoID0gZGZnL0RGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTBBRjNCMTkzRThCMzkwMDY3NEVFOCAvKiBE
RkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmg7IHBhdGggPSBkZmcvREZHU3RydWN0dXJlQ2xv
YmJlclN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjI5LDggKzIyMjEs
NiBAQAogCQkwRjcwMjVBODE3MTRCMEY4MDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29t
bW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRDb21waWxl
ckNvbW1vbi5oOyBwYXRoID0gZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjcxNENBMTE2RUE5MkVEMDBGM0VCRUIgLyogREZHQmFj
a3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdC
YWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY3MTRDQTIxNkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhh
c2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmFja3dhcmRzUHJvcGFn
YXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY3NTc2RDAxOEUxRkVFOTAwMkVGNENEIC8q
IEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMEY3NTc2RDExOEUxRkVFOTAwMkVGNENEIC8qIEFjY2Vzc29yQ2Fs
bEpJVFN0dWJSb3V0aW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjY2Vz
c29yQ2FsbEpJVFN0dWJSb3V0aW5lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NzY2RDFDMTVBNTAyOEQwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKSVRTdHViUm91dGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjc2NkQyNjE1QThDQzFCMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUU3R1YlJvdXRpbmUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc2NkQyOTE1QThDQzM0MDA4RjM2M0Ug
LyogSklUU3R1YlJvdXRpbmVTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSklUU3R1YlJvdXRpbmVTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMjMwMyw4ICsyMjkzLDYgQEAKIAkJMEY5RTMyNjIxQjA1QUIwNDAwODAxRUQ1IC8qIERGR1N0
b3JlQmFycmllckluc2VydGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHU3RvcmVC
YXJyaWVySW5zZXJ0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5
RkI0RjIxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RhY2tMYXlvdXRQaGFzZS5jcHA7IHBh
dGggPSBkZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGOUZCNEYzMTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1N0YWNrTGF5b3V0UGhhc2UuaDsg
cGF0aCA9IGRmZy9ERkdTdGFja0xheW91dFBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTBGOUZDOEJGMTRFMUI1RkIwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBvbHltb3JwaGljUHV0
QnlJZExpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjlGQzhDMDE0RTFC
NUZCMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGOUZDOEMxMTRFMUI1RkIwMEQ1MkFFMCAvKiBQdXRLaW5kLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1dEtpbmQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZBMkMxNzkxN0Q3Q0Y4NDAwOUQwMTVGIC8qIFRlc3RSdW5uZXJVdGls
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXN0UnVubmVyVXRp
bHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkEyQzE3QTE3RDdDRjg0MDA5
RDAxNUYgLyogVGVzdFJ1bm5lclV0aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFRlc3RSdW5uZXJVdGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjU3
OSw2ICsyNTY3LDggQEAKIAkJMEZGOEJERTgxQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVkVmFs
dWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5mZXJyZWRWYWx1
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjhCREU5MUFENENGNzEwMERG
RTg4NCAvKiBJbmZlcnJlZFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEluZmVycmVkVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGOTIyQ0Yx
NEY0NkIxMzAwNDFBMjRFIC8qIEpTQ0xMSW50T2Zmc2V0c0V4dHJhY3RvciAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVj
dXRhYmxlIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gSlNDTExJbnRPZmZzZXRzRXh0cmFj
dG9yOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQkwRkY5Q0U3MTFCOUNE
NkQwMDA0RURDQTYgLyogUG9seW1vcnBoaWNBY2Nlc3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUG9seW1vcnBoaWNBY2Nlc3MuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkY5Q0U3MjFCOUNENkQwMDA0RURDQTYgLyogUG9seW1vcnBoaWNBY2Nl
c3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9seW1vcnBoaWNBY2Nlc3Mu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQjZDMzYxQUY0OEREQzAwREIxQkY3
IC8qIFR5cGVvZlR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
VHlwZW9mVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRkI2QzM3MUFG
NDhEREMwMERCMUJGNyAvKiBUeXBlb2ZUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFR5cGVvZlR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQzk5
RDAxODRFQzhBRDAwOUMxMEFCIC8qIENvbnN0YW50TW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDb25zdGFudE1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTQwOTYsMTAgKzQwODYsNiBAQAogCQkxNDI5RDkyQzBFRDIyRDcwMDBCODk2MTkgLyogaml0
ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkwRkYwNTRG
NzFBQzM1QjQ0MDBFNUJFNTcgLyogRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6LmNwcCAqLywKLQkJ
CQkwRkYwNTRGODFBQzM1QjQ0MDBFNUJFNTcgLyogRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6Lmgg
Ki8sCi0JCQkJMEY3NTc2RDAxOEUxRkVFOTAwMkVGNENEIC8qIEFjY2Vzc29yQ2FsbEpJVFN0dWJS
b3V0aW5lLmNwcCAqLywKLQkJCQkwRjc1NzZEMTE4RTFGRUU5MDAyRUY0Q0QgLyogQWNjZXNzb3JD
YWxsSklUU3R1YlJvdXRpbmUuaCAqLywKIAkJCQkwRjZCMUNDNzE4NjQxREY4MDA4NDVEOTcgLyog
QXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3MuY3BwICovLAogCQkJCTBGNkIxQ0M4MTg2NDFERjgw
MDg0NUQ5NyAvKiBBcml0eUNoZWNrRmFpbFJldHVyblRodW5rcy5oICovLAogCQkJCTBGMjRFNTNC
MTdFQTlGNTkwMEFCQjIxNyAvKiBBc3NlbWJseUhlbHBlcnMuY3BwICovLApAQCAtNDEwOCw2ICs0
MDk0LDggQEAKIAkJCQkwRjY0QjI3MDFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmgg
Ki8sCiAJCQkJMEYyNEU1M0QxN0VBOUY1OTAwQUJCMjE3IC8qIENDYWxsSGVscGVycy5oICovLAog
CQkJCTBGRDgyRTM3MTQxQUIxNDIwMDE3OUM5NCAvKiBDb21wYWN0SklUQ29kZU1hcC5oICovLAor
CQkJCTBGRjA1NEY3MUFDMzVCNDQwMEU1QkU1NyAvKiBFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enou
Y3BwICovLAorCQkJCTBGRjA1NEY4MUFDMzVCNDQwMEU1QkU1NyAvKiBFeGVjdXRhYmxlQWxsb2Nh
dGlvbkZ1enouaCAqLywKIAkJCQlBN0I0OERCNjBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJs
ZUFsbG9jYXRvci5jcHAgKi8sCiAJCQkJQTdCNDhEQjUwRUU3NENGQzAwRENCREI2IC8qIEV4ZWN1
dGFibGVBbGxvY2F0b3IuaCAqLywKIAkJCQk4NkRCNjQ2MzBGOTVDNkZDMDBEN0Q5MjEgLyogRXhl
Y3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcCAqLywKQEAgLTQxNTQsOCArNDE0Miw2IEBA
CiAJCQkJMEZDNzEyRTExN0NEODc4RjAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxh
dGlvbkNhbGxiYWNrLmggKi8sCiAJCQkJQTc2RjU0QTIxM0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdy
aXRlQmFycmllci5oICovLAogCQkJCUE3NkM1MTc0MTE4Mjc0OEQwMDcxNUIwNSAvKiBKU0ludGVy
ZmFjZUpJVC5oICovLAotCQkJCTBGRUU5ODQyMUE4OTIyNzUwMDc1NEU5MyAvKiBTZXR1cFZhcmFy
Z3NGcmFtZS5jcHAgKi8sCi0JCQkJMEZFRTk4NDAxQTg4NjVCNjAwNzU0RTkzIC8qIFNldHVwVmFy
YXJnc0ZyYW1lLmggKi8sCiAJCQkJMEZFODM0MTUxQTZFRjk3QjAwRDA0ODQ3IC8qIFBvbHltb3Jw
aGljQ2FsbFN0dWJSb3V0aW5lLmNwcCAqLywKIAkJCQkwRkU4MzQxNjFBNkVGOTdCMDBEMDQ4NDcg
LyogUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaCAqLywKIAkJCQkwRkE3QThFOTE4QjQxM0M4
MDA1MjM3MUQgLyogUmVnLmNwcCAqLywKQEAgLTQxNjksNiArNDE1NSw4IEBACiAJCQkJMEYyNEU1
NEExN0VFMjc0OTAwQUJCMjE3IC8qIFJlcGF0Y2guaCAqLywKIAkJCQkwRkE3QThFRDE4Q0U0RkQ4
MDA1MjM3MUQgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcCAqLywKIAkJCQkwRjI0RTU0
QjE3RUUyNzQ5MDBBQkIyMTcgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmggKi8sCisJCQkJ
MEZFRTk4NDIxQTg5MjI3NTAwNzU0RTkzIC8qIFNldHVwVmFyYXJnc0ZyYW1lLmNwcCAqLywKKwkJ
CQkwRkVFOTg0MDFBODg2NUI2MDA3NTRFOTMgLyogU2V0dXBWYXJhcmdzRnJhbWUuaCAqLywKIAkJ
CQlBNzA5RjJFRjE3QTBBQzA0MDA1MTJFOTggLyogU2xvd1BhdGhDYWxsLmggKi8sCiAJCQkJQTcz
ODY1NTExMTg2OTdCNDAwNTQwMjc5IC8qIFNwZWNpYWxpemVkVGh1bmtKSVQuaCAqLywKIAkJCQlB
N0ZGNjQ3QTE4QzUyRTg1MDBCNTUzMDcgLyogU3BpbGxSZWdpc3RlcnNNb2RlLmggKi8sCkBAIC01
NjAyLDExICs1NTkwLDggQEAKIAkJCQk5NjlBMDc5NTBFRDFEM0FFMDBGMUY2ODEgLyogT3Bjb2Rl
LmggKi8sCiAJCQkJMEYyQkRDMkIxNTFGREU4QjAwQ0Q4OTEwIC8qIE9wZXJhbmRzLmggKi8sCiAJ
CQkJQTcwNDQ3RTkxN0EwQkQ0NjAwRjU4OThFIC8qIE9wZXJhbmRzSW5saW5lcy5oICovLAotCQkJ
CTBGMzRCMTRCMTZENDNFMEMwMDFDREE1QSAvKiBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxp
c3QuaCAqLywKLQkJCQkwRjRDRUQ1QzE4Q0VBN0FCMDA4MDJGRTAgLyogUG9seW1vcnBoaWNHZXRC
eUlkTGlzdC5jcHAgKi8sCi0JCQkJMEY0Q0VENUQxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3Jw
aGljR2V0QnlJZExpc3QuaCAqLywKLQkJCQkwRjlGQzhCRjE0RTFCNUZCMDBENTJBRTAgLyogUG9s
eW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAgKi8sCi0JCQkJMEY5RkM4QzAxNEUxQjVGQjAwRDUyQUUw
IC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuaCAqLywKKwkJCQkwRkY5Q0U3MTFCOUNENkQwMDA0
RURDQTYgLyogUG9seW1vcnBoaWNBY2Nlc3MuY3BwICovLAorCQkJCTBGRjlDRTcyMUI5Q0Q2RDAw
MDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5oICovLAogCQkJCTBGOTgyMDVEMTZCRkUzN0Yw
MDI0MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuY3BwICovLAogCQkJCTBGOTgyMDVFMTZCRkUz
N0YwMDI0MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuaCAqLywKIAkJCQkwRkQzRTQwNzFCNjE4
QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uY3BwICovLApAQCAtNTYzNyw4ICs1NjIy
LDggQEAKIAkJCQkwRjJENERFNzE5ODMyREFDMDA3RDRCMTkgLyogVHlwZUxvY2F0aW9uLmggKi8s
CiAJCQkJQTc5RTc4MUUxNUVFQ0JBODAwNDdDODU1IC8qIFVubGlua2VkQ29kZUJsb2NrLmNwcCAq
LywKIAkJCQlBNzlFNzgxRjE1RUVDQkE4MDA0N0M4NTUgLyogVW5saW5rZWRDb2RlQmxvY2suaCAq
LywKLQkJCQkxNDE0MkU1MDFCNzk2RUNFMDBGNEJGNEIgLyogVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGUuaCAqLywKIAkJCQkxNDE0MkU1NDFCNzk3M0MwMDBGNEJGNEIgLyogVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGUuY3BwICovLAorCQkJCTE0MTQyRTUwMUI3OTZFQ0UwMEY0QkY0QiAvKiBV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oICovLAogCQkJCUI1OUY4OTM4MTg5MUFEQjUwMEQ1
Q0NEQyAvKiBVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtLmNwcCAqLywKIAkJCQlCNTlGODkzNzE4
OTFBRDMzMDBENUNDREMgLyogVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbS5oICovLAogCQkJCTBG
OTYzQjM2MTNGQzZGREUwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCAqLywKQEAgLTYyMDMsNyAr
NjE4OCw2IEBACiAJCQkJMEZDMDk3NzExNDY5M0FGNTAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21w
aWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3MDI1QUExNzE0QjBGQzAwMzgyQzBFIC8qIERG
R09TUkV4aXRDb21waWxlckNvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFRkM5QUIxNjgx
QTNCNjAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuaCBpbiBIZWFkZXJzICov
LAotCQkJCTBGNENFRDVGMThDRUE3QUIwMDgwMkZFMCAvKiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJFRTE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NS
RXhpdFByZXBhcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZGQzk1QzE0RUY5MEFGMDBD
NzI1MzIgLyogREZHUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RUE3MEVFMTlGNUI1QzQw
MDk4RjVFQyAvKiBKU0NvbnRleHRSZWZJbnNwZWN0b3JTdXBwb3J0LmggaW4gSGVhZGVycyAqLywK
QEAgLTYyNTIsNiArNjIzNiw3IEBACiAJCQkJOTlFNDVBMjQxOEExQjI1OTAwMjZEODhGIC8qIEVt
cHR5SW5wdXRDdXJzb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MTQyRTUzMUI3OTZFREQwMEY0
QkY0QiAvKiBFeGVjdXRhYmxlSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTlFNDVBMjYxOEEx
QjI1OTAwMjZEODhGIC8qIEVuY29kZWRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZGOUNF
NzQxQjlDRDZEMDAwNEVEQ0E2IC8qIFBvbHltb3JwaGljQWNjZXNzLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjU4NzRFRTE5NEZFQjEyMDBBQUIyQzEgLyogREZHTWF5RXhpdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkMzMDQ2MDcwRTFGNDk3RjAwMzIzMkNGIC8qIEVycm9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzAyRTkwRDBFMTgzOURCMDAwRjkyOTcgLyogRXJyb3JDb25zdHJ1Y3Rvci5oIGlu
IEhlYWRlcnMgKi8sCkBAIC02NDg1LDcgKzY0NzAsNiBAQAogCQkJCUJDMThDNDFFMEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBKU0NvbnRleHRSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0OENEMUQ4MTA4
Q0Y5MDIwMDgxNjNDNiAvKiBKU0NvbnRleHRSZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzIwMjhCODE3OTc2MDFFMDA5ODAyOEMgLyogSlNDVGVzdFJ1bm5lclV0aWxzLmggaW4gSGVh
ZGVycyAqLywKLQkJCQkwRjc1NzZEMzE4RTFGRUU5MDAyRUY0Q0QgLyogQWNjZXNzb3JDYWxsSklU
U3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkVDMTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0RhdGFWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZFRTE3QjZCNUFCMDBB
N0FFM0YgLyogSlNEYXRhVmlld1Byb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc4ODAx
NDExNDcxQUQ5MjAwNDFCMDE2IC8qIEpTRGF0ZU1hdGguaCBpbiBIZWFkZXJzICovLApAQCAtNjY4
NSw4ICs2NjY5LDYgQEAKIAkJCQkwRkNDQUU0NTE2RDBDRjc0MDBEMEM2NUIgLyogUGFyc2VyRXJy
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3N0YxODI1MTY0MTkyQzcwMDY0MEE0NyAvKiBQYXJz
ZXJNb2Rlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjUzMDNENjQxNDQ3QjlFMTAwRDNGOTA0IC8q
IFBhcnNlclRva2Vucy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEYzNEIxNEMxNkQ0M0UwRDAwMUNE
QTVBIC8qIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdC5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJMEY5RkM4QzQxNEUxQjYwMDAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGOEYxNDM0MUFERjA5MDEwMEVENzkyQyAvKiBERkdFcG9jaC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5ODIwNjExNkJGRTM4MzAwMjQwRDAyIC8qIFByZWNpc2VK
dW1wVGFyZ2V0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyREQ4MTUxQUIzRDhCRTAwQkJCOEU4
IC8qIERGR0ZvckFsbEtpbGxzLmggaW4gSGVhZGVycyAqLywKQEAgLTc4NDcsNyArNzgyOSw2IEBA
CiAJCQkJMEYwQjgzOUMxNEJDRjQ2MzAwODg1QjRGIC8qIExMSW50VGh1bmtzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGQ0VGQUNEMTgwNUU3NTUwMDQ3MkNFNCAvKiBMTFZNQVBJLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE3RTVBQjM3MTc5OUU0QjIwMEQyODMzRCAvKiBMTFZNRGlzYXNzZW1i
bGVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGNENFRDVFMThDRUE3QUIwMDgwMkZFMCAvKiBQ
b2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5RERFMTA3
RUM3RTcwMDY1MDQ0NiAvKiBMb29rdXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0NjgwQ0Mx
NEJCQjE3QTAwQkZFMjcyIC8qIExvd0xldmVsSW50ZXJwcmV0ZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMTRCNzIzQjIxMkQ3REE0NjAwM0JENUVEIC8qIE1hY2hpbmVTdGFja01hcmtlci5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTc4ODksNyArNzg3MCw2IEBACiAJCQkJMEZFMjI4RUUxNDM2QUIy
QzAwMTk2QzQ4IC8qIE9wdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ4RjIxQkMxMDdF
QzU0RDAwNDJFQzJDIC8qIFBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzA1MkMzNDBG
Qjc5MjE5MDA0OEZEQzMgLyogUGFyc2VyQXJlbmEuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEY5
RkM4QzMxNEUxQjVGRTAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEY5ODIwNjAxNkJGRTM4MTAwMjQwRDAyIC8qIFByZWNpc2VKdW1wVGFy
Z2V0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NTc0MkY2NTBERDExRjVBMDAwOTE3RkIgLyog
UHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCOUNGODE5RDBCQUMxMDBCMUQxQjUg
LyogRlRMT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc5MDYsNiArNzg4Niw3IEBA
CiAJCQkJMEYxOTBDQUMxODlEODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QjMxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2Zp
bGVyT3JpZ2luLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUI0MTY2QUQzNUMwMDBGNUJB
MyAvKiBQcm9maWxlck9yaWdpblN0YWNrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRjlDRTcz
MUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRkIxMDU4QjE2NzU0ODMxMDBGOEFCNkUgLyogUHJvZmlsZXJPU1JFeGl0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGQjEwNThEMTY3NTQ4MzcwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4
aXRTaXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMTM5MTJCMTY3NzFDM0EwMDlDQ0IwNyAv
KiBQcm9maWxlclByb2ZpbGVkQnl0ZWNvZGVzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtODAxMSw3
ICs3OTkyLDYgQEAKIAkJCQlBNzZGMjc5NDE1RjEzQzk2MDA1MTdENjcgLyogVW5saW5rZWRDb2Rl
QmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjU5Rjg5MzkxODkxRjI5RjAwRDVDQ0RDIC8q
IFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTM5REE0
QTYxQjdFOEI3QzAwODRGMzNBIC8qIEpTTW9kdWxlUmVjb3JkLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCTBGNzU3NkQyMThFMUZFRTkwMDJFRjRDRCAvKiBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGlu
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjI0RTU1ODE3Rjc0RURCMDBBQkIyMTcgLyogVmFs
dWVSZWNvdmVyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMThFM0E1OTBERjkyNzhDMDBEOTBC
MzQgLyogVk0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkU1OTMyQTcxODNDNUEyNjAwQTFFQ0ND
IC8qIFZNRW50cnlTY29wZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAko
cmV2aXNpb24gMTg5NDkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlckNvZGVSZWYuaAkod29ya2luZyBjb3B5KQpAQCAtMzI3LDYgKzMyNywxMCBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIGR1bXBXaXRoTmFtZShjb25zdCBjaGFyKiBuYW1lLCBQcmludFN0
cmVhbSYgb3V0KSBjb25zdAogICAgIHsKKyAgICAgICAgaWYgKCFtX3ZhbHVlKSB7CisgICAgICAg
ICAgICBvdXQucHJpbnQobmFtZSwgIihudWxsKSIpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CiAgICAgICAgIGlmIChleGVjdXRhYmxlQWRkcmVzcygpID09IGRhdGFMb2NhdGlvbigp
KSB7CiAgICAgICAgICAgICBvdXQucHJpbnQobmFtZSwgIigiLCBSYXdQb2ludGVyKGV4ZWN1dGFi
bGVBZGRyZXNzKCkpLCAiKSIpOwogICAgICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE4OTQ5MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01Myw4ICs1Myw3IEBACiAjaW5jbHVkZSAiTExJbnRFbnRyeXBvaW50LmgiCiAj
aW5jbHVkZSAiTG93TGV2ZWxJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
LSNpbmNsdWRlICJQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgiCi0jaW5jbHVkZSAiUG9seW1vcnBo
aWNQdXRCeUlkTGlzdC5oIgorI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCiAjaW5jbHVk
ZSAiUHJvZmlsZXJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIlJlZHVjZVdoaXRlc3BhY2UuaCIKICNp
bmNsdWRlICJSZXBhdGNoLmgiCkBAIC0zNDMsMjAgKzM0MiwxOSBAQCB2b2lkIENvZGVCbG9jazo6
cHJpbnRHZXRCeUlkQ2FjaGVTdGF0dXMoCiAgICAgICAgIGlmIChzdHViSW5mby5zZWVuKSB7CiAg
ICAgICAgICAgICBvdXQucHJpbnRmKCIgaml0KCIpOwogICAgICAgICAgICAgCi0gICAgICAgICAg
ICBTdHJ1Y3R1cmUqIGJhc2VTdHJ1Y3R1cmUgPSAwOwotICAgICAgICAgICAgU3RydWN0dXJlKiBw
cm90b3R5cGVTdHJ1Y3R1cmUgPSAwOwotICAgICAgICAgICAgUG9seW1vcnBoaWNHZXRCeUlkTGlz
dCogbGlzdCA9IDA7CisgICAgICAgICAgICBTdHJ1Y3R1cmUqIGJhc2VTdHJ1Y3R1cmUgPSBudWxs
cHRyOworICAgICAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3MqIHN0dWIgPSBudWxscHRyOwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBzd2l0Y2ggKHN0dWJJbmZvLmFjY2Vzc1R5cGUpIHsKLSAg
ICAgICAgICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmOgorICAgICAgICAgICAgc3dpdGNo
IChzdHViSW5mby5jYWNoZVR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRC
eUlkU2VsZjoKICAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCJzZWxmIik7Ci0gICAgICAgICAg
ICAgICAgYmFzZVN0cnVjdHVyZSA9IHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0
cnVjdHVyZS5nZXQoKTsKKyAgICAgICAgICAgICAgICBiYXNlU3RydWN0dXJlID0gc3R1YkluZm8u
dS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3Q6Ci0gICAgICAgICAg
ICAgICAgb3V0LnByaW50ZigibGlzdCIpOwotICAgICAgICAgICAgICAgIGxpc3QgPSBzdHViSW5m
by51LmdldEJ5SWRMaXN0Lmxpc3Q7CisgICAgICAgICAgICBjYXNlIENhY2hlVHlwZTo6U3R1YjoK
KyAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCJzdHViIik7CisgICAgICAgICAgICAgICAgc3R1
YiA9IHN0dWJJbmZvLnUuc3R1YjsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGNhc2UgYWNjZXNzX3Vuc2V0OgorICAgICAgICAgICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0Ogog
ICAgICAgICAgICAgICAgIG91dC5wcmludGYoInVuc2V0Iik7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMzY4LDI3ICszNjYsMTAgQEAgdm9pZCBDb2Rl
QmxvY2s6OnByaW50R2V0QnlJZENhY2hlU3RhdHVzKAogICAgICAgICAgICAgICAgIG91dC5wcmlu
dGYoIiwgIik7CiAgICAgICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJzdHJ1Y3QiLCBi
YXNlU3RydWN0dXJlLCBpZGVudCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIGlmIChwcm90b3R5cGVTdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgICAgICBvdXQucHJp
bnRmKCIsICIpOwotICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAicHJvdG90eXBl
U3RydWN0IiwgYmFzZVN0cnVjdHVyZSwgaWRlbnQpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBpZiAobGlzdCkgewotICAgICAgICAgICAgICAgIG91dC5wcmludGYo
IiwgbGlzdCA9ICVwOiBbIiwgbGlzdCk7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChp
KQotICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiLCAiKTsKLSAgICAgICAgICAg
ICAgICAgICAgb3V0LnByaW50ZigiKCIpOwotICAgICAgICAgICAgICAgICAgICBkdW1wU3RydWN0
dXJlKG91dCwgImJhc2UiLCBsaXN0LT5hdChpKS5zdHJ1Y3R1cmUoKSwgaWRlbnQpOwotICAgICAg
ICAgICAgICAgICAgICBpZiAoIWxpc3QtPmF0KGkpLmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiLCAiKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG91dC5wcmludChsaXN0LT5hdChpKS5jb25kaXRpb25TZXQoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiKSIpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCJdIik7Ci0gICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChzdHViKQorICAgICAgICAgICAgICAgIG91dC5w
cmludCgiLCAiLCAqc3R1Yik7CisKICAgICAgICAgICAgIG91dC5wcmludGYoIikiKTsKICAgICAg
ICAgfQogICAgIH0KQEAgLTQ0NCw1MyArNDI1LDE2IEBAIHZvaWQgQ29kZUJsb2NrOjpwcmludFB1
dEJ5SWRDYWNoZVN0YXR1cygKICAgICAgICAgaWYgKHN0dWJJbmZvLnNlZW4pIHsKICAgICAgICAg
ICAgIG91dC5wcmludGYoIiBqaXQoIik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHN3aXRj
aCAoc3R1YkluZm8uYWNjZXNzVHlwZSkgewotICAgICAgICAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5
X2lkX3JlcGxhY2U6CisgICAgICAgICAgICBzd2l0Y2ggKHN0dWJJbmZvLmNhY2hlVHlwZSkgewor
ICAgICAgICAgICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOgogICAgICAgICAgICAg
ICAgIG91dC5wcmludCgicmVwbGFjZSwgIik7Ci0gICAgICAgICAgICAgICAgZHVtcFN0cnVjdHVy
ZShvdXQsICJzdHJ1Y3QiLCBzdHViSW5mby51LnB1dEJ5SWRSZXBsYWNlLmJhc2VPYmplY3RTdHJ1
Y3R1cmUuZ2V0KCksIGlkZW50KTsKKyAgICAgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwg
InN0cnVjdCIsIHN0dWJJbmZvLnUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwg
aWRlbnQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBhY2Nlc3Nf
cHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgotICAgICAgICAgICAgY2FzZSBhY2Nlc3NfcHV0
X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0OgotICAgICAgICAgICAgICAgIG91dC5wcmludCgidHJh
bnNpdGlvbiwgIik7Ci0gICAgICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJwcmV2Iiwg
c3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZS5nZXQoKSwgaWRl
bnQpOwotICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCAiKTsKLSAgICAgICAgICAgICAgICBk
dW1wU3RydWN0dXJlKG91dCwgIm5leHQiLCBzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnN0
cnVjdHVyZS5nZXQoKSwgaWRlbnQpOwotICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby51LnB1
dEJ5SWRUcmFuc2l0aW9uLnJhd0NvbmRpdGlvblNldCkKLSAgICAgICAgICAgICAgICAgICAgb3V0
LnByaW50KCIsICIsIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Ojpmcm9tUmF3UG9pbnRlcihz
dHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0NvbmRpdGlvblNldCkpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX2xpc3Q6IHsK
LSAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCJsaXN0ID0gWyIpOwotICAgICAgICAgICAgICAg
IFBvbHltb3JwaGljUHV0QnlJZExpc3QqIGxpc3QgPSBzdHViSW5mby51LnB1dEJ5SWRMaXN0Lmxp
c3Q7Ci0gICAgICAgICAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hOwotICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5zaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICIoIik7Ci0gICAgICAgICAgICAgICAgICAgIGNv
bnN0IFB1dEJ5SWRBY2Nlc3MmIGFjY2VzcyA9IGxpc3QtPmF0KGkpOwotICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFjY2Vzcy5pc1JlcGxhY2UoKSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCJyZXBsYWNlLCAiKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAic3RydWN0IiwgYWNjZXNzLm9sZFN0cnVj
dHVyZSgpLCBpZGVudCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWNjZXNzLmlz
U2V0dGVyKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgic2V0dGVyLCAi
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAic3RydWN0Iiwg
YWNjZXNzLm9sZFN0cnVjdHVyZSgpLCBpZGVudCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoYWNjZXNzLmlzQ3VzdG9tKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dC5w
cmludCgiY3VzdG9tLCAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUo
b3V0LCAic3RydWN0IiwgYWNjZXNzLm9sZFN0cnVjdHVyZSgpLCBpZGVudCk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoYWNjZXNzLmlzVHJhbnNpdGlvbigpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBvdXQucHJpbnQoInRyYW5zaXRpb24sICIpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJwcmV2IiwgYWNjZXNzLm9sZFN0cnVjdHVyZSgp
LCBpZGVudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgIm5leHQiLCBhY2Nlc3MubmV3
U3RydWN0dXJlKCksIGlkZW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYWNjZXNz
LmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
dXQucHJpbnQoIiwgIiwgYWNjZXNzLmNvbmRpdGlvblNldCgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoInVua25vd24iKTsK
LSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgiKSIp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBvdXQucHJpbnQoIl0iKTsKKyAg
ICAgICAgICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOiB7CisgICAgICAgICAgICAgICAgb3V0LnBy
aW50KCJzdHViLCAiLCAqc3R1YkluZm8udS5zdHViKTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgYWNjZXNzX3Vuc2V0OgorICAgICAgICAg
ICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0OgogICAgICAgICAgICAgICAgIG91dC5wcmludGYoInVu
c2V0Iik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAt
MjQ0MywzOSArMjM4NywyMiBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMo
U2xvCiAgICAgaWYgKEpJVENvZGU6OmlzSklUKGppdFR5cGUoKSkpIHsKICAgICAgICAgZm9yIChC
YWc8U3RydWN0dXJlU3R1YkluZm8+OjppdGVyYXRvciBpdGVyID0gbV9zdHViSW5mb3MuYmVnaW4o
KTsgISFpdGVyOyArK2l0ZXIpIHsKICAgICAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbyA9ICoqaXRlcjsKLSAgICAgICAgICAgIHN3aXRjaCAoc3R1YkluZm8uYWNjZXNzVHlwZSkg
ewotICAgICAgICAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgot
ICAgICAgICAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0OiB7Ci0g
ICAgICAgICAgICAgICAgSlNDZWxsKiBvcmlnaW4gPSBzdHViSW5mby5jb2RlT3JpZ2luLmNvZGVP
cmlnaW5Pd25lcigpOwotICAgICAgICAgICAgICAgIGlmICgoIW9yaWdpbiB8fCBIZWFwOjppc01h
cmtlZChvcmlnaW4pKQotICAgICAgICAgICAgICAgICAgICAmJiBIZWFwOjppc01hcmtlZChzdHVi
SW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgpKSkKLSAgICAg
ICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJnN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRp
b24uc3RydWN0dXJlKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IGFsbEFyZU1hcmtlZFNvRmFyID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlICE9IENhY2hlVHlwZTo6U3R1YikKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIFBvbHltb3JwaGljQWNjZXNzKiBsaXN0
ID0gc3R1YkluZm8udS5zdHViOworICAgICAgICAgICAgSlNDZWxsKiBvcmlnaW4gPSBzdHViSW5m
by5jb2RlT3JpZ2luLmNvZGVPcmlnaW5Pd25lcigpOworICAgICAgICAgICAgaWYgKG9yaWdpbiAm
JiAhSGVhcDo6aXNNYXJrZWQob3JpZ2luKSkgeworICAgICAgICAgICAgICAgIGFsbEFyZU1hcmtl
ZFNvRmFyID0gZmFsc2U7CisgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9saXN0OiB7Ci0gICAgICAgICAg
ICAgICAgUG9seW1vcnBoaWNQdXRCeUlkTGlzdCogbGlzdCA9IHN0dWJJbmZvLnUucHV0QnlJZExp
c3QubGlzdDsKLSAgICAgICAgICAgICAgICBKU0NlbGwqIG9yaWdpbiA9IHN0dWJJbmZvLmNvZGVP
cmlnaW4uY29kZU9yaWdpbk93bmVyKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG9yaWdpbiAmJiAh
SGVhcDo6aXNNYXJrZWQob3JpZ2luKSkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0g
bGlzdC0+c2l6ZSgpOyBqLS07KSB7CisgICAgICAgICAgICAgICAgY29uc3QgQWNjZXNzQ2FzZSYg
YWNjZXNzID0gbGlzdC0+YXQoaik7CisgICAgICAgICAgICAgICAgaWYgKGFjY2Vzcy50eXBlKCkg
IT0gQWNjZXNzQ2FzZTo6VHJhbnNpdGlvbikKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKGFjY2Vzcy5zdHJ1Y3R1cmUoKSkp
CisgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBv
aW50ZXIoYWNjZXNzLm5ld1N0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgICAgIGFsbEFyZU1hcmtlZFNvRmFyID0gZmFsc2U7Ci0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGogPSBsaXN0LT5zaXplKCk7IGotLTspIHsKLSAgICAgICAgICAgICAgICAgICAgUHV0
QnlJZEFjY2VzcyYgYWNjZXNzID0gbGlzdC0+bV9saXN0W2pdOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoIWFjY2Vzcy5pc1RyYW5zaXRpb24oKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQoYWNjZXNzLm9s
ZFN0cnVjdHVyZSgpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZh
Y2Nlc3MubV9uZXdTdHJ1Y3R1cmUpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgICAgICBhbGxBcmVNYXJrZWRTb0ZhciA9IGZhbHNlOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IAotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTI3NjcsMTAgKzI2OTQsMTAgQEAgdm9pZCBDb2Rl
QmxvY2s6OmdldEJ5VmFsSW5mb01hcChCeVZhbEluZgogfQogCiAjaWYgRU5BQkxFKEpJVCkKLVN0
cnVjdHVyZVN0dWJJbmZvKiBDb2RlQmxvY2s6OmFkZFN0dWJJbmZvKCkKK1N0cnVjdHVyZVN0dWJJ
bmZvKiBDb2RlQmxvY2s6OmFkZFN0dWJJbmZvKEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSkKIHsKICAg
ICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJldHVybiBtX3N0dWJJ
bmZvcy5hZGQoKTsKKyAgICByZXR1cm4gbV9zdHViSW5mb3MuYWRkKGFjY2Vzc1R5cGUpOwogfQog
CiBTdHJ1Y3R1cmVTdHViSW5mbyogQ29kZUJsb2NrOjpmaW5kU3R1YkluZm8oQ29kZU9yaWdpbiBj
b2RlT3JpZ2luKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaAkocmV2aXNpb24gMTg5NDkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDgsNyArMjA4LDcgQEAgcHVibGljOgog
ICAgIHZvaWQgZ2V0QnlWYWxJbmZvTWFwKEJ5VmFsSW5mb01hcCYgcmVzdWx0KTsKICAgICAKICNp
ZiBFTkFCTEUoSklUKQotICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBhZGRTdHViSW5mbygpOworICAg
IFN0cnVjdHVyZVN0dWJJbmZvKiBhZGRTdHViSW5mbyhBY2Nlc3NUeXBlKTsKICAgICBCYWc8U3Ry
dWN0dXJlU3R1YkluZm8+OjppdGVyYXRvciBzdHViSW5mb0JlZ2luKCkgeyByZXR1cm4gbV9zdHVi
SW5mb3MuYmVnaW4oKTsgfQogICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz46Oml0ZXJhdG9yIHN0
dWJJbmZvRW5kKCkgeyByZXR1cm4gbV9zdHViSW5mb3MuZW5kKCk7IH0KICAgICAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAJKHJl
dmlzaW9uIDE4OTQ5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlk
U3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTQgKzI2LDEzIEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiR2V0QnlJZFN0YXR1cy5oIgogCi0jaW5jbHVkZSAiQWNjZXNz
b3JDYWxsSklUU3R1YlJvdXRpbmUuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRl
ICJDb21wbGV4R2V0U3RhdHVzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUg
IkpTU2NvcGUuaCIKICNpbmNsdWRlICJMTEludERhdGEuaCIKICNpbmNsdWRlICJMb3dMZXZlbElu
dGVycHJldGVyLmgiCi0jaW5jbHVkZSAiUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oIgorI2luY2x1
ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCiAjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CiAKIG5h
bWVzcGFjZSBKU0MgewpAQCAtMTM5LDEyICsxMzgsMTIgQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlk
U3RhdHVzOjpjb21wdXRlRm9yUwogICAgIGlmICghc3R1YkluZm8tPnNlZW4pCiAgICAgICAgIHJl
dHVybiBHZXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwogICAgIAotICAgIFBvbHltb3JwaGlj
R2V0QnlJZExpc3QqIGxpc3QgPSAwOworICAgIFBvbHltb3JwaGljQWNjZXNzKiBsaXN0ID0gMDsK
ICAgICBTdGF0ZSBzbG93UGF0aFN0YXRlID0gVGFrZXNTbG93UGF0aDsKLSAgICBpZiAoc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9saXN0KSB7Ci0gICAgICAgIGxpc3Qg
PSBzdHViSW5mby0+dS5nZXRCeUlkTGlzdC5saXN0OworICAgIGlmIChzdHViSW5mby0+Y2FjaGVU
eXBlID09IENhY2hlVHlwZTo6U3R1YikgeworICAgICAgICBsaXN0ID0gc3R1YkluZm8tPnUuc3R1
YjsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSB7
Ci0gICAgICAgICAgICBjb25zdCBHZXRCeUlkQWNjZXNzJiBhY2Nlc3MgPSBsaXN0LT5hdChpKTsK
KyAgICAgICAgICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIGFjY2VzcyA9IGxpc3QtPmF0KGkpOwogICAg
ICAgICAgICAgaWYgKGFjY2Vzcy5kb2VzQ2FsbHMoKSkKICAgICAgICAgICAgICAgICBzbG93UGF0
aFN0YXRlID0gTWFrZXNDYWxsczsKICAgICAgICAgfQpAQCAtMTU3LDEyICsxNTYsMTIgQEAgR2V0
QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgIEdldEJ5SWRTdGF0dXMg
cmVzdWx0OwogICAgIHJlc3VsdC5tX3N0YXRlID0gU2ltcGxlOwogICAgIHJlc3VsdC5tX3dhc1Nl
ZW5JbkpJVCA9IHRydWU7IC8vIFRoaXMgaXMgaW50ZXJlc3RpbmcgZm9yIGJ5dGVjb2RlIGR1bXBp
bmcgb25seS4KLSAgICBzd2l0Y2ggKHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSB7Ci0gICAgY2FzZSBh
Y2Nlc3NfdW5zZXQ6CisgICAgc3dpdGNoIChzdHViSW5mby0+Y2FjaGVUeXBlKSB7CisgICAgY2Fz
ZSBDYWNoZVR5cGU6OlVuc2V0OgogICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhOb0luZm9y
bWF0aW9uKTsKICAgICAgICAgCi0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGY6IHsKLSAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+dS5nZXRCeUlkU2VsZi5iYXNl
T2JqZWN0U3RydWN0dXJlLmdldCgpOworICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjog
eworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0dWJJbmZvLT51LmJ5SWRTZWxmLmJh
c2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCk7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xv
d1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkpCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlJ
ZFN0YXR1cyhzbG93UGF0aFN0YXRlLCB0cnVlKTsKICAgICAgICAgdW5zaWduZWQgYXR0cmlidXRl
c0lnbm9yZWQ7CkBAIC0xNzcsMTIgKzE3NiwyNSBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0
dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgICAgICAK
LSAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfbGlzdDogeworICAgIGNhc2UgQ2FjaGVUeXBlOjpT
dHViOiB7CiAgICAgICAgIGZvciAodW5zaWduZWQgbGlzdEluZGV4ID0gMDsgbGlzdEluZGV4IDwg
bGlzdC0+c2l6ZSgpOyArK2xpc3RJbmRleCkgewotICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBsaXN0LT5hdChsaXN0SW5kZXgpLnN0cnVjdHVyZSgpOworICAgICAgICAgICAgY29u
c3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0gbGlzdC0+YXQobGlzdEluZGV4KTsKKyAgICAgICAgICAg
IGlmIChhY2Nlc3MudmlhUHJveHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0
YXR1cyhzbG93UGF0aFN0YXRlLCB0cnVlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBhY2Nlc3Muc3RydWN0dXJlKCk7CisgICAgICAgICAgICBpZiAo
IXN0cnVjdHVyZSkgeworICAgICAgICAgICAgICAgIC8vIFRoZSBudWxsIHN0cnVjdHVyZSBjYXNl
cyBhcmlzZSBkdWUgdG8gYXJyYXkubGVuZ3RoIGFuZCBzdHJpbmcubGVuZ3RoLiBXZSBoYXZlIG5v
IHdheQorICAgICAgICAgICAgICAgIC8vIG9mIGNyZWF0aW5nIGEgR2V0QnlJZFZhcmlhbnQgZm9y
IHRob3NlLCBhbmQgd2UgZG9uJ3QgcmVhbGx5IGhhdmUgdG8gc2luY2UgdGhlIERGRworICAgICAg
ICAgICAgICAgIC8vIGhhbmRsZXMgdGhvc2UgY2FzZXMgaW4gRml4dXBQaGFzZSB1c2luZyB2YWx1
ZSBwcm9maWxpbmcuIFRoYXQncyBhIGJpdCBhd2t3YXJkIC0gd2UKKyAgICAgICAgICAgICAgICAv
LyBzaG91bGRuJ3QgaGF2ZSB0byB1c2UgdmFsdWUgcHJvZmlsaW5nIHRvIGRpc2NvdmVyIHNvbWV0
aGluZyB0aGF0IHRoZSBBY2Nlc3NDYXNlCisgICAgICAgICAgICAgICAgLy8gY291bGQgaGF2ZSB0
b2xkIHVzLiBCdXQsIGl0IHdvcmtzIHdlbGwgZW5vdWdoLiBTbywgb3VyIG9ubHkgY29uY2VybiBo
ZXJlIGlzIHRvIG5vdAorICAgICAgICAgICAgICAgIC8vIGNyYXNoIG9uIG51bGwgc3RydWN0dXJl
LgorICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUsIHRy
dWUpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBDb21wbGV4R2V0
U3RhdHVzIGNvbXBsZXhHZXRTdGF0dXMgPSBDb21wbGV4R2V0U3RhdHVzOjpjb21wdXRlRm9yKAot
ICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgbGlzdC0+YXQobGlzdEluZGV4KS5jb25kaXRpb25T
ZXQoKSwgdWlkKTsKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGFjY2Vzcy5jb25kaXRpb25T
ZXQoKSwgdWlkKTsKICAgICAgICAgICAgICAKICAgICAgICAgICAgIHN3aXRjaCAoY29tcGxleEdl
dFN0YXR1cy5raW5kKCkpIHsKICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6U2hv
dWxkU2tpcDoKQEAgLTE5MywyOSArMjA1LDIzIEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1
czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIENvbXBs
ZXhHZXRTdGF0dXM6OklubGluZWFibGU6IHsKICAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9w
dHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzOwotICAgICAgICAgICAgICAgIHN3aXRj
aCAobGlzdC0+YXQobGlzdEluZGV4KS50eXBlKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIEdl
dEJ5SWRBY2Nlc3M6OlNpbXBsZUlubGluZToKLSAgICAgICAgICAgICAgICBjYXNlIEdldEJ5SWRB
Y2Nlc3M6OlNpbXBsZVN0dWI6IHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGFjY2Vzcy50eXBl
KCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OkxvYWQ6IHsKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNh
c2UgR2V0QnlJZEFjY2Vzczo6R2V0dGVyOiB7Ci0gICAgICAgICAgICAgICAgICAgIEFjY2Vzc29y
Q2FsbEpJVFN0dWJSb3V0aW5lKiBzdHViID0gc3RhdGljX2Nhc3Q8QWNjZXNzb3JDYWxsSklUU3R1
YlJvdXRpbmUqPigKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QtPmF0KGxpc3RJbmRleCku
c3R1YlJvdXRpbmUoKSk7CisgICAgICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpHZXR0ZXI6
IHsKKyAgICAgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBhY2Nl
c3MuY2FsbExpbmtJbmZvKCk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChjYWxsTGlua0lu
Zm8pOwogICAgICAgICAgICAgICAgICAgICBjYWxsTGlua1N0YXR1cyA9IHN0ZDo6bWFrZV91bmlx
dWU8Q2FsbExpbmtTdGF0dXM+KAogICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbExpbmtTdGF0
dXM6OmNvbXB1dGVGb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9ja2VyLCBwcm9m
aWxlZEJsb2NrLCAqc3R1Yi0+bV9jYWxsTGlua0luZm8sIGNhbGxFeGl0U2l0ZURhdGEpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ssICpjYWxsTGlu
a0luZm8sIGNhbGxFeGl0U2l0ZURhdGEpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlJZEFjY2Vzczo6U2lt
cGxlTWlzczoKLSAgICAgICAgICAgICAgICBjYXNlIEdldEJ5SWRBY2Nlc3M6OkN1c3RvbUdldHRl
cjoKLSAgICAgICAgICAgICAgICBjYXNlIEdldEJ5SWRBY2Nlc3M6OldhdGNoZWRTdHViOnsKLSAg
ICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIHRvdGFsbHkgc3dlZXQgdG8g
c3VwcG9ydCB0aGlzIGF0IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZS4KLSAgICAgICAgICAgICAg
ICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzA1Mgor
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6
IEl0IHdvdWxkIGJlIHRvdGFsbHkgc3dlZXQgdG8gc3VwcG9ydCBtb3JlIG9mIHRoZXNlIGF0IHNv
bWUgcG9pbnQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIC8vIGZ1dHVyZS4gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzA1MgogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gR2V0QnlJZFN0YXR1cyhzbG93UGF0aFN0YXRlLCB0cnVlKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfSB9CiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIEdldEJ5SWRWYXJp
YW50IHZhcmlhbnQoCiAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUp
LCBjb21wbGV4R2V0U3RhdHVzLm9mZnNldCgpLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAxODkz
MjQpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5
SWRMaXN0LmNwcDoxODkzMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9s
eW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgiCisKKyNpZiBF
TkFCTEUoSklUKQorCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiSGVhcC5oIgor
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworR2V0QnlJZEFjY2Vzczo6R2V0QnlJZEFjY2VzcygKKyAgICBW
TSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgUGFzc1JlZlB0cjxKSVRTdHVi
Um91dGluZT4gc3R1YlJvdXRpbmUsCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCisgICAgOiBtX3R5cGUodHlw
ZSkKKyAgICAsIG1fc3RydWN0dXJlKHZtLCBvd25lciwgc3RydWN0dXJlKQorICAgICwgbV9jb25k
aXRpb25TZXQoY29uZGl0aW9uU2V0KQorICAgICwgbV9zdHViUm91dGluZShzdHViUm91dGluZSkK
K3sKK30KKworR2V0QnlJZEFjY2Vzczo6fkdldEJ5SWRBY2Nlc3MoKQoreworfQorCitHZXRCeUlk
QWNjZXNzIEdldEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1cmVTdHViSW5mbyhTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8pCit7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGluaXRpYWxTbG93
UGF0aCA9CisgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0
KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpOworICAgIAorICAgIEdldEJ5SWRB
Y2Nlc3MgcmVzdWx0OworICAgIAorICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5
cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmKTsKKyAgICAKKyAgICByZXN1bHQubV90eXBlID0g
U2ltcGxlSW5saW5lOworICAgIHJlc3VsdC5tX3N0cnVjdHVyZS5jb3B5RnJvbShzdHViSW5mby51
LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUpOworICAgIHJlc3VsdC5tX3N0dWJSb3V0
aW5lID0gSklUU3R1YlJvdXRpbmU6OmNyZWF0ZVNlbGZNYW5hZ2VkUm91dGluZShpbml0aWFsU2xv
d1BhdGgpOworICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgR2V0QnlJZEFjY2Vz
czo6dmlzaXRXZWFrKFZNJiB2bSkgY29uc3QKK3sKKyAgICBpZiAobV9zdHJ1Y3R1cmUgJiYgIUhl
YXA6OmlzTWFya2VkKG1fc3RydWN0dXJlLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGlmICghbV9jb25kaXRpb25TZXQuYXJlU3RpbGxMaXZlKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAoIW1fc3R1YlJvdXRpbmUtPnZpc2l0V2Vhayh2bSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworUG9seW1vcnBoaWNHZXRCeUlkTGlz
dDo6UG9seW1vcnBoaWNHZXRCeUlkTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7
CisgICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0KQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgbV9saXN0LmFwcGVuZChHZXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0
dXJlU3R1YkluZm8oc3R1YkluZm8pKTsKK30KKworUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogUG9s
eW1vcnBoaWNHZXRCeUlkTGlzdDo6ZnJvbShTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7
CisgICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9saXN0KQor
ICAgICAgICByZXR1cm4gc3R1YkluZm8udS5nZXRCeUlkTGlzdC5saXN0OworICAgIAorICAgIEFT
U0VSVCgKKyAgICAgICAgc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3Nl
bGYKKyAgICAgICAgfHwgc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpOworICAg
IAorICAgIFBvbHltb3JwaGljR2V0QnlJZExpc3QqIHJlc3VsdCA9IG5ldyBQb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0KHN0dWJJbmZvKTsKKyAgICAKKyAgICBzdHViSW5mby5pbml0R2V0QnlJZExpc3Qo
cmVzdWx0KTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitQb2x5bW9ycGhpY0dldEJ5
SWRMaXN0Ojp+UG9seW1vcnBoaWNHZXRCeUlkTGlzdCgpIHsgfQorCitNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6Y3VycmVudFNsb3dQYXRoVGFyZ2V0KAorICAg
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykgY29uc3QKK3sKKyAgICBpZiAoaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZz
ZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSk7CisgICAgcmV0dXJuIG1fbGlz
dC5sYXN0KCkuc3R1YlJvdXRpbmUoKS0+Y29kZSgpLmNvZGUoKTsKK30KKwordm9pZCBQb2x5bW9y
cGhpY0dldEJ5SWRMaXN0OjphZGRBY2Nlc3MoY29uc3QgR2V0QnlJZEFjY2VzcyYgYWNjZXNzKQor
eworICAgIEFTU0VSVCghaXNGdWxsKCkpOworICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSByZXNp
emluZyBvcHRpbWl6ZXMgZm9yIHNwYWNlLCBub3QgdGltZS4KKyAgICBtX2xpc3QucmVzaXplVG9G
aXQobV9saXN0LnNpemUoKSArIDEpOworICAgIG1fbGlzdC5sYXN0KCkgPSBhY2Nlc3M7Cit9CisK
K2Jvb2wgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6aXNGdWxsKCkgY29uc3QKK3sKKyAgICBBU1NF
UlQoc2l6ZSgpIDw9IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSk7CisgICAgcmV0dXJuIHNp
emUoKSA9PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkU7Cit9CisKK2Jvb2wgUG9seW1vcnBo
aWNHZXRCeUlkTGlzdDo6aXNBbG1vc3RGdWxsKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoc2l6ZSgp
IDw9IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSk7CisgICAgcmV0dXJuIHNpemUoKSA+PSBQ
T0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUgLSAxOworfQorCitib29sIFBvbHltb3JwaGljR2V0
QnlJZExpc3Q6OmRpZFNlbGZQYXRjaGluZygpIGNvbnN0Cit7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGlmIChhdChpKS50eXBlKCkgPT0gR2V0QnlJZEFj
Y2Vzczo6U2ltcGxlSW5saW5lKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojp2aXNpdFdl
YWsoVk0mIHZtKSBjb25zdAoreworICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUoKTsgaS0tOykg
eworICAgICAgICBpZiAoIWF0KGkpLnZpc2l0V2Vhayh2bSkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
KworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxMzEgKzI0LDExMzAgQEAKICAqLwogCiAjaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oIgorI2luY2x1ZGUg
IlBvbHltb3JwaGljQWNjZXNzLmgiCiAKICNpZiBFTkFCTEUoSklUKQogCisjaW5jbHVkZSAiQmlu
YXJ5U3dpdGNoLmgiCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCiAjaW5jbHVkZSAiQ29kZUJs
b2NrLmgiCisjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgorI2lu
Y2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgor
I2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaCIKICNpbmNsdWRlICJT
dHJ1Y3R1cmVTdHViSW5mby5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotR2V0QnlJZEFjY2Vzczo6R2V0QnlJZEFjY2VzcygKLSAgICBWTSYgdm0sIEpT
Q2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4g
c3R1YlJvdXRpbmUsCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCi0gICAgOiBtX3R5cGUodHlwZSkKLSAgICAs
IG1fc3RydWN0dXJlKHZtLCBvd25lciwgc3RydWN0dXJlKQotICAgICwgbV9jb25kaXRpb25TZXQo
Y29uZGl0aW9uU2V0KQotICAgICwgbV9zdHViUm91dGluZShzdHViUm91dGluZSkKK3N0YXRpYyBj
b25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKKworc3RydWN0IEFjY2Vzc0dlbmVyYXRpb25TdGF0
ZSB7CisgICAgQ0NhbGxIZWxwZXJzKiBqaXQgeyBudWxscHRyIH07CisgICAgU2NyYXRjaFJlZ2lz
dGVyQWxsb2NhdG9yKiBhbGxvY2F0b3I7CisgICAgc2l6ZV90IG51bWJlck9mUGFkZGluZ0J5dGVz
IHsgMCB9OworICAgIFBvbHltb3JwaGljQWNjZXNzKiBhY2Nlc3MgeyBudWxscHRyIH07CisgICAg
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvIHsgbnVsbHB0ciB9OworICAgIENDYWxsSGVscGVy
czo6SnVtcExpc3Qgc3VjY2VzczsKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGZhaWxBbmRS
ZXBhdGNoOworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZmFpbEFuZElnbm9yZTsKKyAgICBH
UFJSZWcgYmFzZUdQUiB7IEludmFsaWRHUFJSZWcgfTsKKyAgICBKU1ZhbHVlUmVncyB2YWx1ZVJl
Z3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgVmVjdG9y
PHN0ZDo6ZnVuY3Rpb248dm9pZChMaW5rQnVmZmVyJik+PiBjYWxsYmFja3M7CisgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdhdGNocG9pbnRzT25TdHJ1
Y3R1cmVTdHViSW5mbz4gd2F0Y2hwb2ludHM7CisKKyAgICBXYXRjaHBvaW50KiBhZGRXYXRjaHBv
aW50KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gPSBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbigpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdhdGNocG9pbnRzT25TdHJ1
Y3R1cmVTdHViSW5mbzo6ZW5zdXJlUmVmZXJlbmNlQW5kQWRkV2F0Y2hwb2ludCgKKyAgICAgICAg
ICAgIHdhdGNocG9pbnRzLCBqaXQtPmNvZGVCbG9jaygpLCBzdHViSW5mbywgY29uZGl0aW9uKTsK
KyAgICB9CisKKyAgICB2b2lkIHJlc3RvcmVTY3JhdGNoKCkKKyAgICB7CisgICAgICAgIGFsbG9j
YXRvci0+cmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZygqaml0LCBudW1iZXJPZlBhZGRp
bmdCeXRlcyk7CisgICAgfQorCisgICAgdm9pZCBzdWNjZWVkKCkKKyAgICB7CisgICAgICAgIHJl
c3RvcmVTY3JhdGNoKCk7CisgICAgICAgIHN1Y2Nlc3MuYXBwZW5kKGppdC0+anVtcCgpKTsKKyAg
ICB9Cit9OworCitBY2Nlc3NDYXNlOjpBY2Nlc3NDYXNlKCkKIHsKIH0KIAotR2V0QnlJZEFjY2Vz
czo6fkdldEJ5SWRBY2Nlc3MoKQorc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nh
c2U6OmdldCgKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKKyAgICBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBib29sIHZpYVByb3h5LCBXYXRj
aHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0LAorICAgIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5j
IGN1c3RvbUdldHRlcikKIHsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gcmVzdWx0
KG5ldyBBY2Nlc3NDYXNlKCkpOworCisgICAgcmVzdWx0LT5tX3R5cGUgPSB0eXBlOworICAgIHJl
c3VsdC0+bV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgcmVzdWx0LT5tX3N0cnVjdHVyZS5zZXQodm0s
IG93bmVyLCBzdHJ1Y3R1cmUpOworICAgIHJlc3VsdC0+bV9jb25kaXRpb25TZXQgPSBjb25kaXRp
b25TZXQ7CisgICAgCisgICAgaWYgKHZpYVByb3h5IHx8IGFkZGl0aW9uYWxTZXQgfHwgcmVzdWx0
LT5kb2VzQ2FsbHMoKSB8fCBjdXN0b21HZXR0ZXIpIHsKKyAgICAgICAgcmVzdWx0LT5tX3JhcmVE
YXRhID0gc3RkOjptYWtlX3VuaXF1ZTxSYXJlRGF0YT4oKTsKKyAgICAgICAgcmVzdWx0LT5tX3Jh
cmVEYXRhLT52aWFQcm94eSA9IHZpYVByb3h5OworICAgICAgICByZXN1bHQtPm1fcmFyZURhdGEt
PmFkZGl0aW9uYWxTZXQgPSBhZGRpdGlvbmFsU2V0OworICAgICAgICByZXN1bHQtPm1fcmFyZURh
dGEtPmN1c3RvbUFjY2Vzc29yLmdldHRlciA9IGN1c3RvbUdldHRlcjsKKyAgICB9CisKKyAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi1HZXRCeUlkQWNjZXNzIEdldEJ5SWRBY2Nlc3M6OmZyb21TdHJ1
Y3R1cmVTdHViSW5mbyhTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCitzdGQ6OnVuaXF1ZV9w
dHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6cmVwbGFjZSgKKyAgICBWTSYgdm0sIEpTQ2VsbCog
b3duZXIsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7Ci0g
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGluaXRpYWxTbG93UGF0aCA9Ci0gICAgICAgIHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRh
Q2FsbFRvU2xvd0Nhc2UpOwotICAgIAotICAgIEdldEJ5SWRBY2Nlc3MgcmVzdWx0OwotICAgIAot
ICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9p
ZF9zZWxmKTsKLSAgICAKLSAgICByZXN1bHQubV90eXBlID0gU2ltcGxlSW5saW5lOwotICAgIHJl
c3VsdC5tX3N0cnVjdHVyZS5jb3B5RnJvbShzdHViSW5mby51LmdldEJ5SWRTZWxmLmJhc2VPYmpl
Y3RTdHJ1Y3R1cmUpOwotICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gSklUU3R1YlJvdXRpbmU6
OmNyZWF0ZVNlbGZNYW5hZ2VkUm91dGluZShpbml0aWFsU2xvd1BhdGgpOwotICAgIAorICAgIHN0
ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nhc2UoKSk7CisKKyAg
ICByZXN1bHQtPm1fdHlwZSA9IFJlcGxhY2U7CisgICAgcmVzdWx0LT5tX29mZnNldCA9IG9mZnNl
dDsKKyAgICByZXN1bHQtPm1fc3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7CisK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1ib29sIEdldEJ5SWRBY2Nlc3M6OnZpc2l0V2VhayhW
TSYgdm0pIGNvbnN0CitzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6dHJh
bnNpdGlvbigKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogb2xkU3RydWN0
dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAorICAg
IGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCit7CisgICAg
UkVMRUFTRV9BU1NFUlQob2xkU3RydWN0dXJlID09IG5ld1N0cnVjdHVyZS0+cHJldmlvdXNJRCgp
KTsKKworICAgIC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIGEgcmVh
bGxvYywgaWYgd2UgZG9uJ3QgaGF2ZQorICAgIC8vIGVub3VnaCByZWdpc3RlcnMgdG8gbWFrZSBp
dCBoYXBwZW4uCisgICAgaWYgKEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzIDwgNgorICAgICAg
ICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gbmV3U3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpCisgICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSkgeworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICAvLyBTa2lw
IG9wdGltaXppbmcgdGhlIGNhc2Ugd2hlcmUgd2UgbmVlZCByZWFsbG9jLCBhbmQgdGhlIHN0cnVj
dHVyZSBoYXMKKyAgICAvLyBpbmRleGluZyBzdG9yYWdlLgorICAgIC8vIEZJWE1FOiBXZSBzaG91
bGRuJ3Qgc2tpcCB0aGlzISBJbXBsZW1lbnQgaXQhCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMDkxNAorICAgIGlmIChvbGRTdHJ1Y3R1cmUtPmNvdWxk
SGF2ZUluZGV4aW5nSGVhZGVyKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHJlc3VsdChuZXcgQWNjZXNzQ2FzZSgpKTsKKworICAg
IHJlc3VsdC0+bV90eXBlID0gVHJhbnNpdGlvbjsKKyAgICByZXN1bHQtPm1fb2Zmc2V0ID0gb2Zm
c2V0OworICAgIHJlc3VsdC0+bV9zdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgbmV3U3RydWN0dXJl
KTsKKyAgICByZXN1bHQtPm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OworCisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6
OnNldHRlcigKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKKyAgICBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBQdXRQcm9wZXJ0eVNsb3Q6OlB1
dFZhbHVlRnVuYyBjdXN0b21TZXR0ZXIpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nh
c2U+IHJlc3VsdChuZXcgQWNjZXNzQ2FzZSgpKTsKKworICAgIHJlc3VsdC0+bV90eXBlID0gdHlw
ZTsKKyAgICByZXN1bHQtPm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgIHJlc3VsdC0+bV9zdHJ1Y3R1
cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKKyAgICByZXN1bHQtPm1fY29uZGl0aW9uU2V0
ID0gY29uZGl0aW9uU2V0OworCisgICAgaWYgKGN1c3RvbVNldHRlcikgeworICAgICAgICByZXN1
bHQtPm1fcmFyZURhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPFJhcmVEYXRhPigpOworICAgICAgICBy
ZXN1bHQtPm1fcmFyZURhdGEtPmN1c3RvbUFjY2Vzc29yLnNldHRlciA9IGN1c3RvbVNldHRlcjsK
KyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNz
Q2FzZT4gQWNjZXNzQ2FzZTo6aW4oCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NU
eXBlIHR5cGUsIFN0cnVjdHVyZSogc3RydWN0dXJlLAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vz
c0Nhc2U+IHJlc3VsdChuZXcgQWNjZXNzQ2FzZSgpKTsKKworICAgIHJlc3VsdC0+bV90eXBlID0g
dHlwZTsKKyAgICByZXN1bHQtPm1fc3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7
CisgICAgcmVzdWx0LT5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKKworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpn
ZXRMZW5ndGgoVk0mLCBKU0NlbGwqLCBBY2Nlc3NUeXBlIHR5cGUpCit7CisgICAgc3RkOjp1bmlx
dWVfcHRyPEFjY2Vzc0Nhc2U+IHJlc3VsdChuZXcgQWNjZXNzQ2FzZSgpKTsKKworICAgIHJlc3Vs
dC0+bV90eXBlID0gdHlwZTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0FjY2Vzc0Nhc2U6
On5BY2Nlc3NDYXNlKCkKK3sKK30KKworc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vz
c0Nhc2U6OmZyb21TdHJ1Y3R1cmVTdHViSW5mbygKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIs
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBzd2l0Y2ggKHN0dWJJbmZvLmNh
Y2hlVHlwZSkgeworICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKKyAgICAgICAgcmV0
dXJuIGdldCgKKyAgICAgICAgICAgIHZtLCBvd25lciwgTG9hZCwgc3R1YkluZm8udS5ieUlkU2Vs
Zi5vZmZzZXQsCisgICAgICAgICAgICBzdHViSW5mby51LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1
Y3R1cmUuZ2V0KCkpOworCisgICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOgorICAg
ICAgICByZXR1cm4gcmVwbGFjZSgKKyAgICAgICAgICAgIHZtLCBvd25lciwgc3R1YkluZm8udS5i
eUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBzdHViSW5mby51LmJ5SWRTZWxmLm9m
ZnNldCk7CisKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9Cit9
CisKK3N0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpjbG9uZSgpIGNvbnN0
Cit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHJlc3VsdChuZXcgQWNjZXNzQ2Fz
ZSgpKTsKKyAgICByZXN1bHQtPm1fdHlwZSA9IG1fdHlwZTsKKyAgICByZXN1bHQtPm1fb2Zmc2V0
ID0gbV9vZmZzZXQ7CisgICAgcmVzdWx0LT5tX3N0cnVjdHVyZSA9IG1fc3RydWN0dXJlOworICAg
IHJlc3VsdC0+bV9jb25kaXRpb25TZXQgPSBtX2NvbmRpdGlvblNldDsKKyAgICBpZiAoUmFyZURh
dGEqIHJhcmVEYXRhID0gbV9yYXJlRGF0YS5nZXQoKSkgeworICAgICAgICByZXN1bHQtPm1fcmFy
ZURhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPFJhcmVEYXRhPigpOworICAgICAgICByZXN1bHQtPm1f
cmFyZURhdGEtPnZpYVByb3h5ID0gcmFyZURhdGEtPnZpYVByb3h5OworICAgICAgICByZXN1bHQt
Pm1fcmFyZURhdGEtPmFkZGl0aW9uYWxTZXQgPSByYXJlRGF0YS0+YWRkaXRpb25hbFNldDsKKyAg
ICAgICAgLy8gTk9URTogV2UgZG9uJ3QgY29weSB0aGUgY2FsbExpbmtJbmZvLCBzaW5jZSB0aGF0
J3MgY3JlYXRlZCBkdXJpbmcgY29kZSBnZW5lcmF0aW9uLgorICAgICAgICByZXN1bHQtPm1fcmFy
ZURhdGEtPmN1c3RvbUFjY2Vzc29yLm9wYXF1ZSA9IHJhcmVEYXRhLT5jdXN0b21BY2Nlc3Nvci5v
cGFxdWU7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgQWNjZXNzQ2FzZTo6
Z3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2soKSBjb25zdAoreworICAgIGlmICh2aWFQcm94eSgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2Ug
QXJyYXlMZW5ndGg6CisgICAgY2FzZSBTdHJpbmdMZW5ndGg6CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisKK2Jvb2wg
QWNjZXNzQ2FzZTo6Y2FuUmVwbGFjZShjb25zdCBBY2Nlc3NDYXNlJiBvdGhlcikKK3sKKyAgICAv
LyBXZSBjb3VsZCBkbyBhIGxvdCBiZXR0ZXIgaGVyZSwgYnV0IGZvciBub3cgd2UganVzdCBkbyBz
b21ldGhpbmcgb2J2aW91cy4KKworICAgIGlmICghZ3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2soKSB8
fCAhb3RoZXIuZ3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2soKSkgeworICAgICAgICAvLyBGSVhNRTog
SW1wbGVtZW50IHRoaXMhCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1
cm4gc3RydWN0dXJlKCkgPT0gb3RoZXIuc3RydWN0dXJlKCk7Cit9CisKK3ZvaWQgQWNjZXNzQ2Fz
ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX3R5cGUs
ICI6KCIpOworCisgICAgaWYgKG1fdHlwZSA9PSBUcmFuc2l0aW9uKQorICAgICAgICBvdXQucHJp
bnQoInN0cnVjdHVyZSA9ICIsIHBvaW50ZXJEdW1wKHN0cnVjdHVyZSgpKSwgIiAtPiAiLCBwb2lu
dGVyRHVtcChuZXdTdHJ1Y3R1cmUoKSkpOworICAgIGVsc2UKKyAgICAgICAgb3V0LnByaW50KCJz
dHJ1Y3R1cmUgPSAiLCBwb2ludGVyRHVtcChtX3N0cnVjdHVyZS5nZXQoKSkpOworCisgICAgb3V0
LnByaW50KCIsIG9mZnNldCA9ICIsIG1fb2Zmc2V0LCAiLCBjb25kaXRpb25zID0gIiwgbV9jb25k
aXRpb25TZXQpOworCisgICAgaWYgKFJhcmVEYXRhKiByYXJlRGF0YSA9IG1fcmFyZURhdGEuZ2V0
KCkpIHsKKyAgICAgICAgb3V0LnByaW50KAorICAgICAgICAgICAgIiwgdmlhUHJveHkgPSAiLCBy
YXJlRGF0YS0+dmlhUHJveHksCisgICAgICAgICAgICAiLCBhZGRpdGlvbmFsU2V0ID0gIiwgUmF3
UG9pbnRlcihyYXJlRGF0YS0+YWRkaXRpb25hbFNldC5nZXQoKSksCisgICAgICAgICAgICAiLCBj
YWxsTGlua0luZm8gPSAiLCBSYXdQb2ludGVyKHJhcmVEYXRhLT5jYWxsTGlua0luZm8uZ2V0KCkp
LAorICAgICAgICAgICAgIiwgY3VzdG9tQWNjZXNzb3IgPSAiLCBSYXdQb2ludGVyKHJhcmVEYXRh
LT5jdXN0b21BY2Nlc3Nvci5vcGFxdWUpKTsKKyAgICB9CisKKyAgICBvdXQucHJpbnQoIikiKTsK
K30KKworYm9vbCBBY2Nlc3NDYXNlOjp2aXNpdFdlYWsoVk0mIHZtKSBjb25zdAogewogICAgIGlm
IChtX3N0cnVjdHVyZSAmJiAhSGVhcDo6aXNNYXJrZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFtX2NvbmRpdGlvblNldC5hcmVTdGlsbExpdmUo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghbV9zdHViUm91dGluZS0+dmlzaXRX
ZWFrKHZtKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3JhcmVEYXRhICYmIG1f
cmFyZURhdGEtPmNhbGxMaW5rSW5mbykKKyAgICAgICAgbV9yYXJlRGF0YS0+Y2FsbExpbmtJbmZv
LT52aXNpdFdlYWsodm0pOwogICAgIHJldHVybiB0cnVlOwogfQogCi1Qb2x5bW9ycGhpY0dldEJ5
SWRMaXN0OjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bykKK3ZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCisgICAgQWNjZXNzR2VuZXJh
dGlvblN0YXRlJiBzdGF0ZSwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCYgZmFsbFRocm91Z2gpCiB7
Ci0gICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0KQotICAgICAgICBy
ZXR1cm47Ci0gICAgCi0gICAgbV9saXN0LmFwcGVuZChHZXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0
dXJlU3R1YkluZm8oc3R1YkluZm8pKTsKKyAgICBDQ2FsbEhlbHBlcnMmIGppdCA9ICpzdGF0ZS5q
aXQ7CisKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgQXJyYXlMZW5ndGg6IHsKKyAg
ICAgICAgQVNTRVJUKCF2aWFQcm94eSgpKTsKKyAgICAgICAgaml0LmxvYWQ4KENDYWxsSGVscGVy
czo6QWRkcmVzcyhzdGF0ZS5iYXNlR1BSLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwg
c3RhdGUuc2NyYXRjaEdQUik7CisgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgKKyAgICAgICAg
ICAgIGppdC5icmFuY2hUZXN0MzIoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpaZXJv
LCBzdGF0ZS5zY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihJc0FycmF5KSkp
OworICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCisgICAgICAgICAgICBqaXQuYnJhbmNoVGVz
dDMyKAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6WmVybywgc3RhdGUuc2NyYXRjaEdQ
UiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spKSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgU3RyaW5nTGVuZ3RoOiB7CisgICAgICAgIEFT
U0VSVCghdmlhUHJveHkoKSk7CisgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgKKyAgICAgICAg
ICAgIGppdC5icmFuY2g4KAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWws
CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0YXRlLmJhc2VHUFIsIEpT
Q2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKFN0cmluZ1R5cGUpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgaWYgKHZpYVByb3h5KCkpIHsKKyAgICAgICAgICAgIGZh
bGxUaHJvdWdoLmFwcGVuZCgKKyAgICAgICAgICAgICAgICBqaXQuYnJhbmNoOCgKKyAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0YXRlLmJhc2VHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBl
T2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihQdXJlRm9yd2FyZGluZ1Byb3h5VHlwZSkpKTsKKworICAgICAgICAgICAgaml0LmxvYWRQdHIo
CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0YXRlLmJhc2VHUFIsIEpT
UHJveHk6OnRhcmdldE9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBzdGF0ZS5zY3JhdGNoR1BS
KTsKKworICAgICAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKAorICAgICAgICAgICAgICAgIGpp
dC5icmFuY2hTdHJ1Y3R1cmUoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90
RXF1YWwsCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdGF0ZS5z
Y3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAorICAgICAgICAgICAgICAg
ICAgICBzdHJ1Y3R1cmUoKSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZmFsbFRo
cm91Z2guYXBwZW5kKAorICAgICAgICAgICAgICAgIGppdC5icmFuY2hTdHJ1Y3R1cmUoCisgICAg
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsCisgICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdGF0ZS5iYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUoKSkpOworICAgICAg
ICB9CisgICAgICAgIGJyZWFrOworICAgIH0gfTsKKworICAgIGdlbmVyYXRlKHN0YXRlKTsKIH0K
IAotUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6ZnJvbShT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlKEFj
Y2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCiB7Ci0gICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5
cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9saXN0KQotICAgICAgICByZXR1cm4gc3R1YkluZm8udS5n
ZXRCeUlkTGlzdC5saXN0OwotICAgIAotICAgIEFTU0VSVCgKLSAgICAgICAgc3R1YkluZm8uYWNj
ZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYKLSAgICAgICAgfHwgc3R1YkluZm8uYWNj
ZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpOwotICAgIAotICAgIFBvbHltb3JwaGljR2V0QnlJZExp
c3QqIHJlc3VsdCA9IG5ldyBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KHN0dWJJbmZvKTsKLSAgICAK
LSAgICBzdHViSW5mby5pbml0R2V0QnlJZExpc3QocmVzdWx0KTsKKyAgICBDQ2FsbEhlbHBlcnMm
IGppdCA9ICpzdGF0ZS5qaXQ7CisgICAgVk0mIHZtID0gKmppdC52bSgpOworICAgIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbyA9ICpzdGF0ZS5zdHViSW5mbzsKKyAgICBjb25zdCBJZGVudGlm
aWVyJiBpZGVudCA9ICpzdGF0ZS5pZGVudDsKKyAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSBz
dGF0ZS52YWx1ZVJlZ3M7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0ZS5iYXNlR1BSOworICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gc3RhdGUuc2NyYXRjaEdQUjsKKworICAgIEFTU0VSVChtX2Nv
bmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5
V2F0Y2hwb2ludCgpKTsKKworICAgIGlmICgoc3RydWN0dXJlKCkgJiYgc3RydWN0dXJlKCktPm5l
ZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkKKyAgICAgICAgfHwgbV9jb25kaXRpb25TZXQu
bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKQorICAgICAgICB2bS5yZWdpc3RlcldhdGNo
cG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShpZGVudCwgc3RhdGUuYWRkV2F0Y2hwb2ludCgpKTsKKwor
ICAgIGlmIChhZGRpdGlvbmFsU2V0KCkpCisgICAgICAgIGFkZGl0aW9uYWxTZXQoKS0+YWRkKHN0
YXRlLmFkZFdhdGNocG9pbnQoKSk7CisKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uJiBjb25kaXRpb24gOiBtX2NvbmRpdGlvblNldCkgeworICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IGNvbmRpdGlvbi5vYmplY3QoKS0+c3RydWN0dXJlKCk7CisKKyAgICAgICAg
aWYgKGNvbmRpdGlvbi5pc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50
KCkpIHsKKyAgICAgICAgICAgIHN0cnVjdHVyZS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoc3Rh
dGUuYWRkV2F0Y2hwb2ludChjb25kaXRpb24pKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICB9CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uZGl0aW9uLnN0cnVjdHVyZUVuc3Vy
ZXNWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KHN0cnVjdHVyZSkpOwor
ICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY29uZGl0aW9uLm9i
amVjdCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0YXRlLmZhaWxBbmRSZXBhdGNoLmFwcGVu
ZCgKKyAgICAgICAgICAgIGppdC5icmFuY2hTdHJ1Y3R1cmUoCisgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpOb3RFcXVhbCwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3Moc2NyYXRjaEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAgICAgICAg
ICAgICBzdHJ1Y3R1cmUpKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNh
c2UgSW5IaXQ6CisgICAgY2FzZSBJbk1pc3M6CisgICAgICAgIGppdC5ib3hCb29sZWFuUGF5bG9h
ZChtX3R5cGUgPT0gSW5IaXQsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOworICAgICAgICBzdGF0
ZS5zdWNjZWVkKCk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgTWlzczoKKyAgICAgICAg
aml0Lm1vdmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgdmFsdWVSZWdzKTsKKyAgICAgICAg
c3RhdGUuc3VjY2VlZCgpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIExvYWQ6CisgICAg
Y2FzZSBHZXR0ZXI6CisgICAgY2FzZSBTZXR0ZXI6CisgICAgY2FzZSBDdXN0b21HZXR0ZXI6Cisg
ICAgY2FzZSBDdXN0b21TZXR0ZXI6IHsKKyAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQobV9vZmZz
ZXQpKSB7CisgICAgICAgICAgICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmU7CisgICAgICAgICAg
ICBpZiAobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGN1cnJTdHJ1
Y3R1cmUgPSBzdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBj
dXJyU3RydWN0dXJlID0gbV9jb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vYmplY3Qo
KS0+c3RydWN0dXJlKCk7CisgICAgICAgICAgICBjdXJyU3RydWN0dXJlLT5zdGFydFdhdGNoaW5n
UHJvcGVydHlGb3JSZXBsYWNlbWVudHModm0sIG9mZnNldCgpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIEdQUlJlZyBiYXNlRm9yR2V0R1BSOworICAgICAgICBpZiAodmlhUHJveHkoKSkgeworICAg
ICAgICAgICAgYmFzZUZvckdldEdQUiA9IHZhbHVlUmVncy5wYXlsb2FkR1BSKCk7CisgICAgICAg
ICAgICBqaXQubG9hZFB0cigKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNQcm94eTo6dGFyZ2V0T2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIGJhc2VG
b3JHZXRHUFIpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGJhc2VGb3JHZXRHUFIgPSBi
YXNlR1BSOworCisgICAgICAgIEdQUlJlZyBiYXNlRm9yQWNjZXNzR1BSOworICAgICAgICBpZiAo
IW1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgaml0Lm1vdmUoCisgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fY29uZGl0aW9uU2V0LnNs
b3RCYXNlQ29uZGl0aW9uKCkub2JqZWN0KCkpLAorICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIp
OworICAgICAgICAgICAgYmFzZUZvckFjY2Vzc0dQUiA9IHNjcmF0Y2hHUFI7CisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgYmFzZUZvckFjY2Vzc0dQUiA9IGJhc2VGb3JHZXRHUFI7CisKKyAg
ICAgICAgR1BSUmVnIGxvYWRlZFZhbHVlR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgaWYg
KG1fdHlwZSAhPSBDdXN0b21HZXR0ZXIgJiYgbV90eXBlICE9IEN1c3RvbVNldHRlcikgeworICAg
ICAgICAgICAgaWYgKG1fdHlwZSA9PSBMb2FkKQorICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVl
R1BSID0gdmFsdWVSZWdzLnBheWxvYWRHUFIoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBsb2FkZWRWYWx1ZUdQUiA9IHNjcmF0Y2hHUFI7CisKKyAgICAgICAgICAgIEdQUlJl
ZyBzdG9yYWdlR1BSOworICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG1fb2Zmc2V0KSkK
KyAgICAgICAgICAgICAgICBzdG9yYWdlR1BSID0gYmFzZUZvckFjY2Vzc0dQUjsKKyAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKAorICAgICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUZvckFjY2Vzc0dQUiwgSlNPYmplY3Q6OmJ1
dHRlcmZseU9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIpOwor
ICAgICAgICAgICAgICAgIHN0b3JhZ2VHUFIgPSBsb2FkZWRWYWx1ZUdQUjsKKyAgICAgICAgICAg
IH0KKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICBqaXQubG9hZDY0KAorICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdG9yYWdlR1BSLCBvZmZzZXRSZWxhdGl2
ZVRvQmFzZShtX29mZnNldCkpLCBsb2FkZWRWYWx1ZUdQUik7CisjZWxzZQorICAgICAgICAgICAg
aWYgKG1fdHlwZSA9PSBMb2FkKSB7CisgICAgICAgICAgICAgICAgaml0LmxvYWQzMigKKyAgICAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9mZnNldFJl
bGF0aXZlVG9CYXNlKG1fb2Zmc2V0KSArIFRhZ09mZnNldCksCisgICAgICAgICAgICAgICAgICAg
IHZhbHVlUmVncy50YWdHUFIoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBqaXQubG9h
ZDMyKAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdG9yYWdlR1BSLCBv
ZmZzZXRSZWxhdGl2ZVRvQmFzZShtX29mZnNldCkgKyBQYXlsb2FkT2Zmc2V0KSwKKyAgICAgICAg
ICAgICAgICBsb2FkZWRWYWx1ZUdQUik7CisjZW5kaWYKKyAgICAgICAgfQorCisgICAgICAgIC8v
IFN0dWZmIGZvciBjdXN0b20gZ2V0dGVycy4KKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9w
ZXJhdGlvbkNhbGw7CisgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBoYW5kbGVyQ2FsbDsKKwor
ICAgICAgICAvLyBTdHVmZiBmb3IgSlMgZ2V0dGVycy4KKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpE
YXRhTGFiZWxQdHIgYWRkcmVzc09mTGlua0Z1bmN0aW9uQ2hlY2s7CisgICAgICAgIENDYWxsSGVs
cGVyczo6Q2FsbCBmYXN0UGF0aENhbGw7CisgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBzbG93
UGF0aENhbGw7CisKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHN1Y2Nlc3M7CisgICAgICAg
IENDYWxsSGVscGVyczo6SnVtcCBmYWlsOworICAgICAgICBpZiAobV90eXBlICE9IExvYWQgJiYg
bV90eXBlICE9IE1pc3MpIHsKKyAgICAgICAgICAgIC8vIE5lZWQgdG8gbWFrZSBzdXJlIHRoYXQg
d2hlbmV2ZXIgdGhpcyBjYWxsIGlzIG1hZGUgaW4gdGhlIGZ1dHVyZSwgd2UgcmVtZW1iZXIgdGhl
CisgICAgICAgICAgICAvLyBwbGFjZSB0aGF0IHdlIG1hZGUgaXQgZnJvbS4KKyAgICAgICAgICAg
IGppdC5zdG9yZTMyKAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KHN0dWJJbmZvLmNhbGxTaXRlSW5kZXguYml0cygpKSwKKyAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KEpTU3RhY2s6OkFyZ3Vt
ZW50Q291bnQpKSk7CisKKyAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gR2V0dGVyIHx8IG1fdHlw
ZSA9PSBTZXR0ZXIpIHsKKyAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBKUyBjYWxsIHVzaW5n
IGEgSlMgY2FsbCBpbmxpbmUgY2FjaGUuIEFzc3VtZSB0aGF0OgorICAgICAgICAgICAgICAgIC8v
CisgICAgICAgICAgICAgICAgLy8gLSBTUCBpcyBhbGlnbmVkIGFuZCByZXByZXNlbnRzIHRoZSBl
eHRlbnQgb2YgdGhlIGNhbGxpbmcgY29tcGlsZXIncyBzdGFjayB1c2FnZS4KKyAgICAgICAgICAg
ICAgICAvLworICAgICAgICAgICAgICAgIC8vIC0gRlAgaXMgc2V0IGNvcnJlY3RseSAoaS5lLiBp
dCBwb2ludHMgdG8gdGhlIGNhbGxlcidzIGNhbGwgZnJhbWUgaGVhZGVyKS4KKyAgICAgICAgICAg
ICAgICAvLworICAgICAgICAgICAgICAgIC8vIC0gU1AgLSBGUCBpcyBhbiBhbGlnbmVkIGRpZmZl
cmVuY2UuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAtIEFueSBieXRl
IGJldHdlZW4gRlAgKGV4Y2x1c2l2ZSkgYW5kIFNQIChpbmNsdXNpdmUpIGNvdWxkIGJlIGxpdmUg
aW4gdGhlIGNhbGxpbmcKKyAgICAgICAgICAgICAgICAvLyAgIGNvZGUuCisgICAgICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgICAgICAvLyBUaGVyZWZvcmUsIHdlIHRlbXBvcmFyaWx5IGdyb3cg
dGhlIHN0YWNrIGZvciB0aGUgcHVycG9zZSBvZiB0aGUgY2FsbCBhbmQgdGhlbgorICAgICAgICAg
ICAgICAgIC8vIHNocmluayBpdCBhZnRlci4KKworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKCFtX3JhcmVEYXRhLT5jYWxsTGlua0luZm8pOworICAgICAgICAgICAgICAgIG1fcmFyZURh
dGEtPmNhbGxMaW5rSW5mbyA9IHN0ZDo6bWFrZV91bmlxdWU8Q2FsbExpbmtJbmZvPigpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJZiB3ZSBnZW5lcmF0ZWQg
YSBwb2x5bW9ycGhpYyBjYWxsIHN0dWIgdGhhdCBqdW1wZWQgYmFjayB0byB0aGUgZ2V0dGVyCisg
ICAgICAgICAgICAgICAgLy8gc3R1Yiwgd2hpY2ggdGhlbiBqdW1wZWQgYmFjayB0byB0aGUgbWFp
biBjb2RlLCB0aGVuIHdlJ2QgaGF2ZSBhIHJlYWNoYWJpbGl0eQorICAgICAgICAgICAgICAgIC8v
IHNpdHVhdGlvbiB0aGF0IHRoZSBHQyBkb2Vzbid0IGtub3cgYWJvdXQuIFRoZSBHQyB3b3VsZCBl
bnN1cmUgdGhhdCB0aGUgcG9seW1vcnBoaWMKKyAgICAgICAgICAgICAgICAvLyBjYWxsIHN0dWIg
c3RheWVkIGFsaXZlLCBhbmQgaXQgd291bGQgZW5zdXJlIHRoYXQgdGhlIG1haW4gY29kZSBzdGF5
ZWQgYWxpdmUsIGJ1dAorICAgICAgICAgICAgICAgIC8vIGl0IHdvdWxkbid0IGtub3cgdGhhdCB0
aGUgZ2V0dGVyIHN0dWIgd2FzIGFsaXZlLiBJZGVhbGx5IEpJVCBzdHViIHJvdXRpbmVzIHdvdWxk
CisgICAgICAgICAgICAgICAgLy8gYmUgR0Mgb2JqZWN0cywgYW5kIHRoZW4gd2UnZCBiZSBhYmxl
IHRvIHNheSB0aGF0IHRoZSBwb2x5bW9ycGhpYyBjYWxsIHN0dWIgaGFzIGEKKyAgICAgICAgICAg
ICAgICAvLyByZWZlcmVuY2UgdG8gdGhlIGdldHRlciBzdHViLgorICAgICAgICAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDg5MTQKKyAgICAgICAg
ICAgICAgICBtX3JhcmVEYXRhLT5jYWxsTGlua0luZm8tPmRpc2FsbG93U3R1YnMoKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX3JhcmVEYXRhLT5jYWxsTGlua0luZm8tPnNl
dFVwQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvOjpDYWxsLCBzdHViSW5m
by5jb2RlT3JpZ2luLCBsb2FkZWRWYWx1ZUdQUik7CisKKyAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6Okp1bXBMaXN0IGRvbmU7CisKKyAgICAgICAgICAgICAgICAvLyBUaGVyZSBpcyBhICJ0
aGlzIiBhcmd1bWVudC4KKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlBhcmFtZXRl
cnMgPSAxOworICAgICAgICAgICAgICAgIC8vIC4uLiBhbmQgYSB2YWx1ZSBhcmd1bWVudCBpZiB3
ZSdyZSBjYWxsaW5nIGEgc2V0dGVyLgorICAgICAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gU2V0
dGVyKQorICAgICAgICAgICAgICAgICAgICBudW1iZXJPZlBhcmFtZXRlcnMrKzsKKworICAgICAg
ICAgICAgICAgIC8vIEdldCB0aGUgYWNjZXNzb3I7IGlmIHRoZXJlIGFpbid0IG9uZSB0aGVuIHRo
ZSByZXN1bHQgaXMganNVbmRlZmluZWQoKS4KKyAgICAgICAgICAgICAgICBpZiAobV90eXBlID09
IFNldHRlcikgeworICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFB0cigKKyAgICAgICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhsb2FkZWRWYWx1ZUdQUiwgR2V0dGVy
U2V0dGVyOjpvZmZzZXRPZlNldHRlcigpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRl
ZFZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICBqaXQubG9hZFB0cigKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRk
cmVzcyhsb2FkZWRWYWx1ZUdQUiwgR2V0dGVyU2V0dGVyOjpvZmZzZXRPZkdldHRlcigpKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgcmV0dXJuVW5kZWZpbmVkID0g
aml0LmJyYW5jaFRlc3RQdHIoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6WmVy
bywgbG9hZGVkVmFsdWVHUFIpOworCisgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZS
ZWdzRm9yQ2FsbCA9IEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUgKyBudW1iZXJPZlBhcmFt
ZXRlcnM7CisKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCA9
CisgICAgICAgICAgICAgICAgICAgIG51bWJlck9mUmVnc0ZvckNhbGwgKiBzaXplb2YoUmVnaXN0
ZXIpICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpOworCisgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxsID0KKyAgICAgICAgICAgICAgICAgICAgV1RG
Ojpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgbnVtYmVyT2ZCeXRl
c0ZvckNhbGwpOworCisgICAgICAgICAgICAgICAgaml0LnN1YlB0cigKKyAgICAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JD
YWxsKSwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CisKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MgY2FsbGVlRnJh
bWUgPSBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsCisgICAgICAgICAgICAgICAgICAgIC1zdGF0aWNf
Y2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOworCisgICAgICAgICAg
ICAgICAgaml0LnN0b3JlMzIoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKG51bWJlck9mUGFyYW1ldGVycyksCisgICAgICAgICAgICAgICAgICAgIGNhbGxl
ZUZyYW1lLndpdGhPZmZzZXQoSlNTdGFjazo6QXJndW1lbnRDb3VudCAqIHNpemVvZihSZWdpc3Rl
cikgKyBQYXlsb2FkT2Zmc2V0KSk7CisKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmVDZWxsKAor
ICAgICAgICAgICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUiwgY2FsbGVlRnJhbWUud2l0aE9mZnNl
dChKU1N0YWNrOjpDYWxsZWUgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisKKyAgICAgICAgICAgICAg
ICBqaXQuc3RvcmVDZWxsKAorICAgICAgICAgICAgICAgICAgICBiYXNlRm9yR2V0R1BSLAorICAg
ICAgICAgICAgICAgICAgICBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KDApLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworCisgICAgICAgICAg
ICAgICAgaWYgKG1fdHlwZSA9PSBTZXR0ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgaml0LnN0
b3JlVmFsdWUoCisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MsCisgICAgICAgICAg
ICAgICAgICAgICAgICBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEpLm9mZnNldCgpICogc2l6ZW9m
KFJlZ2lzdGVyKSkpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6SnVtcCBzbG93Q2FzZSA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2goCisgICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIGxvYWRlZFZhbHVlR1BSLCBhZGRy
ZXNzT2ZMaW5rRnVuY3Rpb25DaGVjaywKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKDApKTsKKworICAgICAgICAgICAgICAgIGZhc3RQYXRoQ2FsbCA9IGpp
dC5uZWFyQ2FsbCgpOworCisgICAgICAgICAgICAgICAgaml0LmFkZFB0cigKKyAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYWxpZ25lZE51bWJlck9mQnl0ZXNG
b3JDYWxsKSwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBHZXR0ZXIpCisgICAgICAg
ICAgICAgICAgICAgIGppdC5zZXR1cFJlc3VsdHModmFsdWVSZWdzKTsKKworICAgICAgICAgICAg
ICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmxp
bmsoJmppdCk7CisKKyAgICAgICAgICAgICAgICBqaXQubW92ZShsb2FkZWRWYWx1ZUdQUiwgR1BS
SW5mbzo6cmVnVDApOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgICAgICAgICAgLy8g
V2UgKmFsd2F5cyoga25vdyB0aGF0IHRoZSBnZXR0ZXIvc2V0dGVyLCBpZiBub24tbnVsbCwgaXMg
YSBjZWxsLgorICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBHUFJJbmZvOjpyZWdUMSk7CisjZW5kaWYKKyAgICAgICAg
ICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9yYXJlRGF0YS0+
Y2FsbExpbmtJbmZvLmdldCgpKSwgR1BSSW5mbzo6cmVnVDIpOworICAgICAgICAgICAgICAgIHNs
b3dQYXRoQ2FsbCA9IGppdC5uZWFyQ2FsbCgpOworCisgICAgICAgICAgICAgICAgaml0LmFkZFB0
cigKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYWxpZ25l
ZE51bWJlck9mQnl0ZXNGb3JDYWxsKSwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBH
ZXR0ZXIpCisgICAgICAgICAgICAgICAgICAgIGppdC5zZXR1cFJlc3VsdHModmFsdWVSZWdzKTsK
KworICAgICAgICAgICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICAgICAg
ICAgIHJldHVyblVuZGVmaW5lZC5saW5rKCZqaXQpOworCisgICAgICAgICAgICAgICAgaWYgKG1f
dHlwZSA9PSBHZXR0ZXIpCisgICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlVHJ1c3RlZFZhbHVl
KGpzVW5kZWZpbmVkKCksIHZhbHVlUmVncyk7CisKKyAgICAgICAgICAgICAgICBkb25lLmxpbmso
JmppdCk7CisKKyAgICAgICAgICAgICAgICBzdGF0ZS5jYWxsYmFja3MuYXBwZW5kKAorICAgICAg
ICAgICAgICAgICAgICBbJl0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1fcmFyZURhdGEtPmNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucygK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2Fs
bChzbG93UGF0aENhbGwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIu
bG9jYXRpb25PZihhZGRyZXNzT2ZMaW5rRnVuY3Rpb25DaGVjayksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoZmFzdFBhdGhDYWxsKSk7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluaygKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9y
KS5jb2RlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIC8vIGdldHRlcjogRW5jb2RlZEpTVmFsdWUgKCpHZXRWYWx1ZUZ1
bmMpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgICAgIC8vIHNldHRlcjogdm9pZCAoKlB1
dFZhbHVlRnVuYykoRXhlY1N0YXRlKiwgSlNPYmplY3QqIGJhc2UsIEVuY29kZWRKU1ZhbHVlIHRo
aXNPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAg
ICAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gQ3VzdG9tR2V0dGVyKSB7CisgICAgICAgICAgICAg
ICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoCisgICAgICAgICAgICAgICAg
ICAgICAgICBiYXNlRm9yQWNjZXNzR1BSLCBiYXNlRm9yR2V0R1BSLAorICAgICAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGlkZW50LmltcGwoKSkpOworICAg
ICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKGJhc2VGb3JBY2Nlc3NHUFIsIGJhc2VGb3JHZXRHUFIsIHZhbHVlUmVn
cy5ncHIoKSk7CisjZWxzZQorICAgICAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gQ3VzdG9tR2V0
dGVyKSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoCisgICAgICAgICAgICAgICAgICAgICAgICBiYXNlRm9yQWNjZXNzR1BSLCBiYXNlRm9yR2V0
R1BSLAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6Q2VsbFRhZyksCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoaWRlbnQuaW1wbCgpKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJhc2VGb3JBY2Nlc3NHUFIsIGJhc2VGb3JHZXRHUFIsCisg
ICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpDZWxsVGFnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlUmVncy5wYXlsb2FkR1BS
KCksIHZhbHVlUmVncy50YWdHUFIoKSk7CisgICAgICAgICAgICAgICAgfQorI2VuZGlmCisgICAg
ICAgICAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAmdm0u
dG9wQ2FsbEZyYW1lKTsKKworICAgICAgICAgICAgICAgIG9wZXJhdGlvbkNhbGwgPSBqaXQuY2Fs
bCgpOworICAgICAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gQ3VzdG9tR2V0dGVyKQorICAgICAg
ICAgICAgICAgICAgICBqaXQuc2V0dXBSZXN1bHRzKHZhbHVlUmVncyk7CisgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wIG5vRXhjZXB0aW9uID0KKyAgICAgICAgICAgICAgICAgICAg
aml0LmVtaXRFeGNlcHRpb25DaGVjayhDQ2FsbEhlbHBlcnM6OkludmVydGVkRXhjZXB0aW9uQ2hl
Y2spOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmdm0pLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
cik7CisgICAgICAgICAgICAgICAgaGFuZGxlckNhbGwgPSBqaXQuY2FsbCgpOworICAgICAgICAg
ICAgICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBub0V4Y2VwdGlvbi5saW5rKCZqaXQpOworCisgICAgICAgICAgICAgICAgc3Rh
dGUuY2FsbGJhY2tzLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgWyZdIChMaW5rQnVmZmVy
JiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmso
b3BlcmF0aW9uQ2FsbCwgRnVuY3Rpb25QdHIobV9yYXJlRGF0YS0+Y3VzdG9tQWNjZXNzb3Iub3Bh
cXVlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoaGFuZGxlckNh
bGwsIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBjYXNlIFJlcGxhY2U6IHsKKyAgICAgICAgaWYgKGlzSW5s
aW5lT2Zmc2V0KG1fb2Zmc2V0KSkgeworICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUoCisgICAg
ICAgICAgICAgICAgdmFsdWVSZWdzLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRk
cmVzcygKKyAgICAgICAgICAgICAgICAgICAgYmFzZUdQUiwKKyAgICAgICAgICAgICAgICAgICAg
SlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsKKyAgICAgICAgICAgICAgICAgICAg
b2Zmc2V0SW5JbmxpbmVTdG9yYWdlKG1fb2Zmc2V0KSAqIHNpemVvZihKU1ZhbHVlKSkpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUoCisgICAgICAgICAgICAgICAgdmFsdWVSZWdzLAor
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICAg
ICAgc2NyYXRjaEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkobV9vZmZzZXQpICogc2l6ZW9mKEpTVmFs
dWUpKSk7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGUuc3VjY2VlZCgpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgY2FzZSBUcmFuc2l0aW9uOiB7CisgICAgICAgIC8vIEFjY2Vzc0Nh
c2U6OnRyYW5zaXRpb24oKSBzaG91bGQgaGF2ZSByZXR1cm5lZCBudWxsLgorICAgICAgICBSRUxF
QVNFX0FTU0VSVChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyA+PSA2IHx8ICFzdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSB8fCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSA9PSBuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKCFzdHJ1Y3R1cmUoKS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSk7CisKKyAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKKworICAgICAgICBTY3JhdGNo
UmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHN0dWJJbmZvLnBhdGNoLnVzZWRSZWdpc3RlcnMp
OworICAgICAgICBhbGxvY2F0b3IubG9jayhiYXNlR1BSKTsKKyAgICAgICAgYWxsb2NhdG9yLmxv
Y2sodmFsdWVSZWdzKTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2soc2NyYXRjaEdQUik7CisKKyAg
ICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIyID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigp
OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjM7CisgICAgICAgIGlmIChuZXdTdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KQorICAgICAgICAgICAgJiYgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpCisgICAg
ICAgICAgICBzY3JhdGNoR1BSMyA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgc2NyYXRjaEdQUjMgPSBJbnZhbGlkR1BSUmVnOworCisg
ICAgICAgIHNpemVfdCBudW1iZXJPZlBhZGRpbmdCeXRlcyA9IGFsbG9jYXRvci5wcmVzZXJ2ZVJl
dXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhqaXQpOworCisgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUo
KS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7CisKKyAgICAg
ICAgYm9vbCBzY3JhdGNoR1BSSGFzU3RvcmFnZSA9IGZhbHNlOworCisgICAgICAgIGlmIChuZXdT
dHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSkgeworICAgICAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBuZXdTdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKKyAgICAgICAgICAgIENv
cGllZEFsbG9jYXRvciogY29waWVkQWxsb2NhdG9yID0gJnZtLmhlYXAuc3RvcmFnZUFsbG9jYXRv
cigpOworCisgICAgICAgICAgICBpZiAoIXN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgp
KSB7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJy
ZW50UmVtYWluaW5nLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBzbG93UGF0aC5hcHBl
bmQoCisgICAgICAgICAgICAgICAgICAgIGppdC5icmFuY2hTdWJQdHIoCisgICAgICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlNpZ25lZCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIobmV3U2l6ZSksIHNjcmF0Y2hHUFIpKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIo
c2NyYXRjaEdQUiwgJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKKyAgICAg
ICAgICAgICAgICBqaXQubmVnUHRyKHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGppdC5h
ZGRQdHIoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRyZXNz
KCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNpemVv
ZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgp
ICogc2l6ZW9mKEpTVmFsdWUpOworICAgICAgICAgICAgICAgIEFTU0VSVChuZXdTaXplID4gb2xk
U2l6ZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2Ny
YXRjaEdQUjMpOworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKCZjb3BpZWRBbGxvY2F0b3It
Pm1fY3VycmVudFJlbWFpbmluZywgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgc2xvd1Bh
dGguYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICBqaXQuYnJhbmNoU3ViUHRyKAorICAgICAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpTaWduZWQsIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BSKSk7CisgICAgICAgICAgICAgICAgaml0LnN0
b3JlUHRyKHNjcmF0Y2hHUFIsICZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZyk7
CisgICAgICAgICAgICAgICAgaml0Lm5lZ1B0cihzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAg
ICBqaXQuYWRkUHRyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFic29sdXRl
QWRkcmVzcygmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRQYXlsb2FkRW5kKSwgc2NyYXRjaEdQ
Uik7CisgICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihzaXplb2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICAvLyBXZSBo
YXZlIHNjcmF0Y2hHUFIgPSBuZXcgc3RvcmFnZSwgc2NyYXRjaEdQUjMgPSBvbGQgc3RvcmFnZSwK
KyAgICAgICAgICAgICAgICAvLyBzY3JhdGNoR1BSMiA9IGF2YWlsYWJsZQorICAgICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IG9mZnNldCA9IDA7IG9mZnNldCA8IG9sZFNpemU7IG9mZnNldCArPSBz
aXplb2Yodm9pZCopKSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKAorICAgICAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNjcmF0Y2hHUFIzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1z
dGF0aWNfY2FzdDxwdHJkaWZmX3Q+KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
ZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2Yodm9pZCopKSksCisgICAgICAgICAgICAg
ICAgICAgICAgICBzY3JhdGNoR1BSMik7CisgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0
cigKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNjcmF0Y2hHUFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLXN0YXRpY19jYXN0
PHB0cmRpZmZfdD4ob2Zmc2V0ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGppdC5zdG9y
ZVB0cihzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6
OmJ1dHRlcmZseU9mZnNldCgpKSk7CisgICAgICAgICAgICBzY3JhdGNoR1BSSGFzU3RvcmFnZSA9
IHRydWU7CisgICAgICAgIH0KKworICAgICAgICB1aW50MzJfdCBzdHJ1Y3R1cmVCaXRzID0gYml0
d2lzZV9jYXN0PHVpbnQzMl90PihuZXdTdHJ1Y3R1cmUoKS0+aWQoKSk7CisgICAgICAgIGppdC5z
dG9yZTMyKAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RydWN0dXJl
Qml0cyksCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CisKKyAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG1f
b2Zmc2V0KSkgeworICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUoCisgICAgICAgICAgICAgICAg
dmFsdWVSZWdzLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAg
ICAgICAgICAgICAgICAgYmFzZUdQUiwKKyAgICAgICAgICAgICAgICAgICAgSlNPYmplY3Q6Om9m
ZnNldE9mSW5saW5lU3RvcmFnZSgpICsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0SW5Jbmxp
bmVTdG9yYWdlKG1fb2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWUpKSkpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgaWYgKCFzY3JhdGNoR1BSSGFzU3RvcmFnZSkKKyAgICAgICAgICAgICAg
ICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1
dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBqaXQuc3RvcmVWYWx1
ZSgKKyAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MsCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldEluQnV0dGVyZmx5KG1fb2Zmc2V0KSAqIHNp
emVvZihKU1ZhbHVlKSkpOworICAgICAgICB9CisKKyAgICAgICAgU2NyYXRjaEJ1ZmZlciogc2Ny
YXRjaEJ1ZmZlciA9IG51bGxwdHI7CisgICAgICAgIGlmIChuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSAhPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkKKyAgICAg
ICAgICAgIHNjcmF0Y2hCdWZmZXIgPSB2bS5zY3JhdGNoQnVmZmVyRm9yU2l6ZShhbGxvY2F0b3Iu
ZGVzaXJlZFNjcmF0Y2hCdWZmZXJTaXplRm9yQ2FsbCgpKTsKKworI2lmIEVOQUJMRShHR0MpCisg
ICAgICAgIGlmIChuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBzdHJ1Y3R1
cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgeworICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpD
YWxsIGNhbGxGbHVzaFdyaXRlQmFycmllckJ1ZmZlcjsKKyAgICAgICAgICAgIENDYWxsSGVscGVy
czo6SnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gaml0Lmp1bXBJZklzUmVtZW1iZXJl
ZE9ySW5FZGVuKGJhc2VHUFIpOworICAgICAgICAgICAgV3JpdGVCYXJyaWVyQnVmZmVyJiB3cml0
ZUJhcnJpZXJCdWZmZXIgPSBqaXQudm0oKS0+aGVhcC53cml0ZUJhcnJpZXJCdWZmZXIoKTsKKyAg
ICAgICAgICAgIGppdC5sb2FkMzIod3JpdGVCYXJyaWVyQnVmZmVyLmN1cnJlbnRJbmRleEFkZHJl
c3MoKSwgc2NyYXRjaEdQUjIpOworICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIG5lZWRU
b0ZsdXNoID0KKyAgICAgICAgICAgICAgICBqaXQuYnJhbmNoMzIoCisgICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBzY3JhdGNoR1BSMiwKKyAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIod3JpdGVCYXJyaWVyQnVmZmVyLmNh
cGFjaXR5KCkpKTsKKworICAgICAgICAgICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKDEpLCBzY3JhdGNoR1BSMik7CisgICAgICAgICAgICBqaXQuc3RvcmUzMihzY3JhdGNo
R1BSMiwgd3JpdGVCYXJyaWVyQnVmZmVyLmN1cnJlbnRJbmRleEFkZHJlc3MoKSk7CisKKyAgICAg
ICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih3cml0ZUJhcnJpZXJC
dWZmZXIuYnVmZmVyKCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIC8vIFdlIHVzZSBhbiBv
ZmZzZXQgb2YgLXNpemVvZih2b2lkKikgYmVjYXVzZSB3ZSBhbHJlYWR5IGFkZGVkIDEgdG8gc2Ny
YXRjaEdQUjIuCisgICAgICAgICAgICBqaXQuc3RvcmVQdHIoCisgICAgICAgICAgICAgICAgYmFz
ZUdQUiwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleCgKKyAgICAgICAg
ICAgICAgICAgICAgc2NyYXRjaEdQUiwgc2NyYXRjaEdQUjIsIENDYWxsSGVscGVyczo6U2NhbGVQ
dHIsCisgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KC1zaXplb2Yodm9p
ZCopKSkpOworCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZVdpdGhCYXJyaWVy
ID0gaml0Lmp1bXAoKTsKKyAgICAgICAgICAgIG5lZWRUb0ZsdXNoLmxpbmsoJmppdCk7CisKKyAg
ICAgICAgICAgIGFsbG9jYXRvci5wcmVzZXJ2ZVVzZWRSZWdpc3RlcnNUb1NjcmF0Y2hCdWZmZXJG
b3JDYWxsKGppdCwgc2NyYXRjaEJ1ZmZlciwgc2NyYXRjaEdQUjIpOworICAgICAgICAgICAgaml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlR1BSKTsKKyAgICAgICAgICAgIGNhbGxG
bHVzaFdyaXRlQmFycmllckJ1ZmZlciA9IGppdC5jYWxsKCk7CisgICAgICAgICAgICBhbGxvY2F0
b3IucmVzdG9yZVVzZWRSZWdpc3RlcnNGcm9tU2NyYXRjaEJ1ZmZlckZvckNhbGwoCisgICAgICAg
ICAgICAgICAgaml0LCBzY3JhdGNoQnVmZmVyLCBzY3JhdGNoR1BSMik7CisKKyAgICAgICAgICAg
IGRvbmVXaXRoQmFycmllci5saW5rKCZqaXQpOworICAgICAgICAgICAgb3duZXJJc1JlbWVtYmVy
ZWRPckluRWRlbi5saW5rKCZqaXQpOworCisgICAgICAgICAgICBzdGF0ZS5jYWxsYmFja3MuYXBw
ZW5kKAorICAgICAgICAgICAgICAgIFsmXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAg
ICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbEZsdXNoV3JpdGVCYXJyaWVyQnVm
ZmVyLCBvcGVyYXRpb25GbHVzaFdyaXRlQmFycmllckJ1ZmZlcik7CisgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoR0dDKQorICAgICAgICAKKyAgICAgICAg
c3RhdGUuc3VjY2VlZCgpOworCisgICAgICAgIGlmIChuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSAhPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgeworICAgICAg
ICAgICAgc2xvd1BhdGgubGluaygmaml0KTsKKyAgICAgICAgICAgIGFsbG9jYXRvci5yZXN0b3Jl
UmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgbnVtYmVyT2ZQYWRkaW5nQnl0ZXMpOworICAg
ICAgICAgICAgYWxsb2NhdG9yLnByZXNlcnZlVXNlZFJlZ2lzdGVyc1RvU2NyYXRjaEJ1ZmZlckZv
ckNhbGwoaml0LCBzY3JhdGNoQnVmZmVyLCBzY3JhdGNoR1BSKTsKKyNpZiBVU0UoSlNWQUxVRTY0
KQorICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKKyAgICAgICAg
ICAgICAgICBiYXNlR1BSLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cihuZXdTdHJ1Y3R1cmUoKSksCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIobV9vZmZzZXQpLAorICAgICAgICAgICAgICAgIHZhbHVlUmVncy5ncHIoKSk7Cisj
ZWxzZQorICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKKyAgICAg
ICAgICAgICAgICBiYXNlR1BSLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihuZXdTdHJ1Y3R1cmUoKSksCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIobV9vZmZzZXQpLAorICAgICAgICAgICAgICAgIHZhbHVlUmVncy5wYXlsb2Fk
R1BSKCksIHZhbHVlUmVncy50YWdHUFIoKSk7CisjZW5kaWYKKyAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6Q2FsbCBvcGVyYXRpb25DYWxsID0gaml0LmNhbGwoKTsKKyAgICAgICAgICAgIGFsbG9j
YXRvci5yZXN0b3JlVXNlZFJlZ2lzdGVyc0Zyb21TY3JhdGNoQnVmZmVyRm9yQ2FsbChqaXQsIHNj
cmF0Y2hCdWZmZXIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgc3RhdGUuc3VjY2VlZCgpOwor
CisgICAgICAgICAgICBzdGF0ZS5jYWxsYmFja3MuYXBwZW5kKAorICAgICAgICAgICAgICAgIFsm
XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICBsaW5rQnVm
ZmVyLmxpbmsob3BlcmF0aW9uQ2FsbCwgb3BlcmF0aW9uUmVhbGxvY2F0ZVN0b3JhZ2VBbmRGaW5p
c2hQdXQpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBjYXNlIEFycmF5TGVuZ3RoOiB7CisgICAgICAgIGppdC5sb2FkUHRyKEND
YWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
c2NyYXRjaEdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZCgKKyAgICAgICAgICAgIGppdC5icmFu
Y2gzMihDQ2FsbEhlbHBlcnM6Okxlc3NUaGFuLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMigwKSkpOworICAgICAgICBqaXQuYm94SW50MzIoc2NyYXRjaEdQUiwgdmFsdWVS
ZWdzKTsKKyAgICAgICAgc3RhdGUuc3VjY2VlZCgpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgY2FzZSBTdHJpbmdMZW5ndGg6IHsKKyAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNTdHJpbmc6Om9mZnNldE9mTGVuZ3RoKCkpLCB2YWx1ZVJl
Z3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgaml0LmJveEludDMyKHZhbHVlUmVncy5wYXlsb2Fk
R1BSKCksIHZhbHVlUmVncyk7CisgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0gfQogICAgIAotICAgIHJldHVybiByZXN1bHQ7CisgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6flBvbHltb3Jw
aGljR2V0QnlJZExpc3QoKSB7IH0KK1BvbHltb3JwaGljQWNjZXNzOjpQb2x5bW9ycGhpY0FjY2Vz
cygpIHsgfQorUG9seW1vcnBoaWNBY2Nlc3M6On5Qb2x5bW9ycGhpY0FjY2VzcygpIHsgfQogCi1N
YWNyb0Fzc2VtYmxlckNvZGVQdHIgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6Y3VycmVudFNsb3dQ
YXRoVGFyZ2V0KAotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykgY29uc3QKK01hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZVdpdGhDYXNlcygK
KyAgICBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8sIGNvbnN0IElkZW50aWZpZXImIGlkZW50LAorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9w
dHI8QWNjZXNzQ2FzZT4+IG9yaWdpbmFsQ2FzZXNUb0FkZCkKIHsKLSAgICBpZiAoaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm4gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZz
ZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSk7Ci0gICAgcmV0dXJuIG1fbGlz
dC5sYXN0KCkuc3R1YlJvdXRpbmUoKS0+Y29kZSgpLmNvZGUoKTsKKyAgICAvLyBUaGlzIG1ldGhv
ZCB3aWxsIGFkZCB0aGUgb3JpZ2luYWxDYXNlc1RvQWRkIHRvIHRoZSBsaXN0IG9uZSBhdCBhIHRp
bWUgd2hpbGUgcHJlc2VydmluZyB0aGUKKyAgICAvLyBpbnZhcmlhbnRzOgorICAgIC8vIC0gSWYg
YSBuZXdseSBhZGRlZCBjYXNlIGNhblJlcGxhY2UoKSBhbnkgZXhpc3RpbmcgY2FzZSwgdGhlbiB0
aGUgZXhpc3RpbmcgY2FzZSBpcyByZW1vdmVkIGJlZm9yZQorICAgIC8vICAgdGhlIG5ldyBjYXNl
IGlzIGFkZGVkLiBSZW1vdmFsIGRvZXNuJ3QgY2hhbmdlIG9yZGVyIG9mIHRoZSBsaXN0LiBBbnkg
bnVtYmVyIG9mIGV4aXN0aW5nIGNhc2VzCisgICAgLy8gICBjYW4gYmUgcmVtb3ZlZCB2aWEgdGhl
IGNhblJlcGxhY2UoKSBydWxlLgorICAgIC8vIC0gQ2FzZXMgaW4gdGhlIGxpc3QgYWx3YXlzIGFw
cGVhciBpbiBhc2NlbmRpbmcgb3JkZXIgb2YgdGltZSBvZiBhZGRpdGlvbi4gVGhlcmVmb3JlLCBp
ZiB5b3UKKyAgICAvLyAgIGNhc2NhZGUgdGhyb3VnaCB0aGUgY2FzZXMgaW4gcmV2ZXJzZSBvcmRl
ciwgeW91IHdpbGwgZ2V0IHRoZSBtb3N0IHJlY2VudCBjYXNlcyBmaXJzdC4KKyAgICAvLyAtIElm
IHRoaXMgbWV0aG9kIGZhaWxzIChyZXR1cm5zIG51bGwsIGRvZXNuJ3QgYWRkIHRoZSBjYXNlcyks
IHRoZW4gYm90aCB0aGUgcHJldmlvdXMgY2FzZSBsaXN0CisgICAgLy8gICBhbmQgdGhlIHByZXZp
b3VzIHN0dWIgYXJlIGtlcHQgaW50YWN0IGFuZCB0aGUgbmV3IGNhc2VzIGFyZSBkZXN0cm95ZWQu
IEl0J3MgT0sgdG8gYXR0ZW1wdCB0bworICAgIC8vICAgYWRkIG1vcmUgdGhpbmdzIGFmdGVyIGZh
aWx1cmUuCisgICAgCisgICAgLy8gRmlyc3QsIHZlcmlmeSB0aGF0IHdlIGNhbiBnZW5lcmF0ZSBj
b2RlIGZvciBhbGwgb2YgdGhlIG5ldyBjYXNlcyB3aGlsZSBlbGltaW5hdGluZyBhbnkgb2YgdGhl
CisgICAgLy8gbmV3IGNhc2VzIHRoYXQgcmVwbGFjZSBlYWNoIG90aGVyLgorICAgIFZlY3Rvcjxz
dGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4+IGNhc2VzVG9BZGQ7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG9yaWdpbmFsQ2FzZXNUb0FkZC5zaXplKCk7ICsraSkgeworICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gbXlDYXNlID0gc3RkOjptb3ZlKG9yaWdpbmFsQ2Fz
ZXNUb0FkZFtpXSk7CisKKyAgICAgICAgLy8gQWRkIGl0IG9ubHkgaWYgaXQgaXMgbm90IHJlcGxh
Y2VkIGJ5IHRoZSBzdWJzZXF1ZW50IGNhc2VzIGluIHRoZSBsaXN0LgorICAgICAgICBib29sIGZv
dW5kID0gZmFsc2U7CisgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGkgKyAxOyBqIDwgb3JpZ2lu
YWxDYXNlc1RvQWRkLnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICBpZiAob3JpZ2luYWxDYXNl
c1RvQWRkW2pdLT5jYW5SZXBsYWNlKCpteUNhc2UpKSB7CisgICAgICAgICAgICAgICAgZm91bmQg
PSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgaWYgKGZvdW5kKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAor
ICAgICAgICBpZiAobXlDYXNlLT5kb2VzQ2FsbHMoKSAmJiBzdHViSW5mby5wYXRjaC5zcGlsbE1v
ZGUgPT0gTmVlZFRvU3BpbGwpCisgICAgICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyKCk7CisKKyAgICAgICAgY2FzZXNUb0FkZC5hcHBlbmQoc3RkOjptb3ZlKG15Q2FzZSkpOwor
ICAgIH0KKworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJjYXNlc1RvQWRkOiAi
LCBsaXN0RHVtcChjYXNlc1RvQWRkKSwgIlxuIik7CisKKyAgICAvLyBJZiB0aGVyZSBhcmVuJ3Qg
YW55IGNhc2VzIHRvIGFkZCwgdGhlbiBmYWlsIG9uIHRoZSBncm91bmRzIHRoYXQgdGhlcmUncyBu
byBwb2ludCB0byBnZW5lcmF0aW5nIGEKKyAgICAvLyBuZXcgc3R1YiB0aGF0IHdpbGwgYmUgaWRl
bnRpY2FsIHRvIHRoZSBvbGQgb25lLiBSZXR1cm5pbmcgbnVsbCBzaG91bGQgdGVsbCB0aGUgY2Fs
bGVyIHRvIGp1c3QKKyAgICAvLyBrZWVwIGRvaW5nIHdoYXQgdGhleSB3ZXJlIGRvaW5nIGJlZm9y
ZS4KKyAgICBpZiAoY2FzZXNUb0FkZC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIoKTsKKworICAgIC8vIE5vdyBjb25zdHJ1Y3QgdGhlIGxpc3Qgb2YgY2Fz
ZXMgYXMgdGhleSBzaG91bGQgYXBwZWFyIGlmIHdlIGFyZSBzdWNjZXNzZnVsLiBUaGlzIG1lYW5z
IHB1dHRpbmcKKyAgICAvLyBhbGwgb2YgdGhlIHByZXZpb3VzIGNhc2VzIGluIHRoaXMgbGlzdCBp
biBvcmRlciBidXQgZXhjbHVkaW5nIHRob3NlIHRoYXQgY2FuIGJlIHJlcGxhY2VkLCBhbmQKKyAg
ICAvLyB0aGVuIGFkZGluZyB0aGUgbmV3IGNhc2VzLgorICAgIExpc3RUeXBlIG5ld0Nhc2VzOwor
ICAgIGZvciAoYXV0byYgb2xkQ2FzZSA6IG1fbGlzdCkgeworICAgICAgICBib29sIGZvdW5kID0g
ZmFsc2U7CisgICAgICAgIGZvciAoYXV0byYgY2FzZVRvQWRkIDogY2FzZXNUb0FkZCkgeworICAg
ICAgICAgICAgaWYgKGNhc2VUb0FkZC0+Y2FuUmVwbGFjZSgqb2xkQ2FzZSkpIHsKKyAgICAgICAg
ICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFmb3VuZCkKKyAgICAgICAgICAgIG5ld0Nhc2Vz
LmFwcGVuZChvbGRDYXNlLT5jbG9uZSgpKTsKKyAgICB9CisgICAgZm9yIChhdXRvJiBjYXNlVG9B
ZGQgOiBjYXNlc1RvQWRkKQorICAgICAgICBuZXdDYXNlcy5hcHBlbmQoc3RkOjptb3ZlKGNhc2VU
b0FkZCkpOworCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIm5ld0Nhc2VzOiAi
LCBsaXN0RHVtcChuZXdDYXNlcyksICJcbiIpOworCisgICAgaWYgKG5ld0Nhc2VzLnNpemUoKSA+
IE9wdGlvbnM6Om1heEFjY2Vzc1ZhcmlhbnRMaXN0U2l6ZSgpKSB7CisgICAgICAgIGlmICh2ZXJi
b3NlKQorICAgICAgICAgICAgZGF0YUxvZygiVG9vIG1hbnkgY2FzZXMuXG4iKTsKKyAgICAgICAg
cmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOworICAgIH0KKworICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0ciByZXN1bHQgPSByZWdlbmVyYXRlKHZtLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBp
ZGVudCwgbmV3Q2FzZXMpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gTWFjcm9B
c3NlbWJsZXJDb2RlUHRyKCk7CisKKyAgICBtX2xpc3QgPSBzdGQ6Om1vdmUobmV3Q2FzZXMpOwor
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6YWRk
QWNjZXNzKGNvbnN0IEdldEJ5SWRBY2Nlc3MmIGFjY2VzcykKK01hY3JvQXNzZW1ibGVyQ29kZVB0
ciBQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZVdpdGhDYXNlKAorICAgIFZNJiB2bSwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgY29uc3QgSWRl
bnRpZmllciYgaWRlbnQsCisgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IG5ld0FjY2Vz
cykKIHsKLSAgICBBU1NFUlQoIWlzRnVsbCgpKTsKLSAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUg
cmVzaXppbmcgb3B0aW1pemVzIGZvciBzcGFjZSwgbm90IHRpbWUuCi0gICAgbV9saXN0LnJlc2l6
ZVRvRml0KG1fbGlzdC5zaXplKCkgKyAxKTsKLSAgICBtX2xpc3QubGFzdCgpID0gYWNjZXNzOwor
ICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4+IG5ld0FjY2Vzc2VzOworICAg
IG5ld0FjY2Vzc2VzLmFwcGVuZChzdGQ6Om1vdmUobmV3QWNjZXNzKSk7CisgICAgcmV0dXJuIHJl
Z2VuZXJhdGVXaXRoQ2FzZXModm0sIGNvZGVCbG9jaywgc3R1YkluZm8sIGlkZW50LCBzdGQ6Om1v
dmUobmV3QWNjZXNzZXMpKTsKIH0KIAotYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojppc0Z1
bGwoKSBjb25zdAorYm9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6dmlzaXRXZWFrKFZNJiB2bSkgY29u
c3QKIHsKLSAgICBBU1NFUlQoc2l6ZSgpIDw9IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSk7
Ci0gICAgcmV0dXJuIHNpemUoKSA9PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkU7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICghYXQo
aSkudmlzaXRXZWFrKHZtKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
cmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6aXNBbG1vc3RG
dWxsKCkgY29uc3QKK3ZvaWQgUG9seW1vcnBoaWNBY2Nlc3M6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKIHsKLSAgICBBU1NFUlQoc2l6ZSgpIDw9IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVf
U0laRSk7Ci0gICAgcmV0dXJuIHNpemUoKSA+PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUg
LSAxOworICAgIG91dC5wcmludChSYXdQb2ludGVyKHRoaXMpLCAiOlsiKTsKKyAgICBDb21tYVBy
aW50ZXIgY29tbWE7CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fbGlzdCkKKyAgICAgICAgb3V0
LnByaW50KGNvbW1hLCAqZW50cnkpOworICAgIG91dC5wcmludCgiXSIpOwogfQogCi1ib29sIFBv
bHltb3JwaGljR2V0QnlJZExpc3Q6OmRpZFNlbGZQYXRjaGluZygpIGNvbnN0CitNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgUG9seW1vcnBoaWNBY2Nlc3M6OnJlZ2VuZXJhdGUoCisgICAgVk0mIHZtLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25zdCBJ
ZGVudGlmaWVyJiBpZGVudCwKKyAgICBQb2x5bW9ycGhpY0FjY2Vzczo6TGlzdFR5cGUmIGNhc2Vz
KQogewotICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUoKTsgaS0tOykgewotICAgICAgICBpZiAo
YXQoaSkudHlwZSgpID09IEdldEJ5SWRBY2Nlc3M6OlNpbXBsZUlubGluZSkKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJHZW5lcmF0
aW5nIGNvZGUgZm9yIGNhc2VzOiAiLCBsaXN0RHVtcChjYXNlcyksICJcbiIpOworICAgIAorICAg
IEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSBzdGF0ZTsKKworICAgIHN0YXRlLmFjY2VzcyA9IHRoaXM7
CisgICAgc3RhdGUuc3R1YkluZm8gPSAmc3R1YkluZm87CisgICAgc3RhdGUuaWRlbnQgPSAmaWRl
bnQ7CisgICAgCisgICAgc3RhdGUuYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1Yklu
Zm8ucGF0Y2guYmFzZUdQUik7CisgICAgc3RhdGUudmFsdWVSZWdzID0gSlNWYWx1ZVJlZ3MoCisj
aWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5m
by5wYXRjaC52YWx1ZVRhZ0dQUiksCisjZW5kaWYKKyAgICAgICAgc3RhdGljX2Nhc3Q8R1BSUmVn
PihzdHViSW5mby5wYXRjaC52YWx1ZUdQUikpOworCisgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yIGFsbG9jYXRvcihzdHViSW5mby5wYXRjaC51c2VkUmVnaXN0ZXJzKTsKKyAgICBzdGF0ZS5h
bGxvY2F0b3IgPSAmYWxsb2NhdG9yOworICAgIGFsbG9jYXRvci5sb2NrKHN0YXRlLmJhc2VHUFIp
OworICAgIGFsbG9jYXRvci5sb2NrKHN0YXRlLnZhbHVlUmVncyk7CisKKyAgICBzdGF0ZS5zY3Jh
dGNoR1BSID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgIAorICAgIENDYWxs
SGVscGVycyBqaXQoJnZtLCBjb2RlQmxvY2spOworICAgIHN0YXRlLmppdCA9ICZqaXQ7CisKKyAg
ICBzdGF0ZS5udW1iZXJPZlBhZGRpbmdCeXRlcyA9IGFsbG9jYXRvci5wcmVzZXJ2ZVJldXNlZFJl
Z2lzdGVyc0J5UHVzaGluZyhqaXQpOworCisgICAgYm9vbCBhbGxHdWFyZGVkQnlTdHJ1Y3R1cmVD
aGVjayA9IHRydWU7CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IGNhc2VzKQorICAgICAgICBhbGxH
dWFyZGVkQnlTdHJ1Y3R1cmVDaGVjayAmPSBlbnRyeS0+Z3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2so
KTsKKworICAgIGlmIChjYXNlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gVGhpcyBpcyBzdXBl
ciB1bmxpa2VseSwgYnV0IHdlIG1ha2UgaXQgbGVnYWwgYW55d2F5LgorICAgICAgICBzdGF0ZS5m
YWlsQW5kUmVwYXRjaC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgfSBlbHNlIGlmICghYWxsR3Vh
cmRlZEJ5U3RydWN0dXJlQ2hlY2sgfHwgY2FzZXMuc2l6ZSgpID09IDEpIHsKKyAgICAgICAgLy8g
SWYgdGhlcmUgYXJlIGFueSBwcm94aWVzIGluIHRoZSBsaXN0LCB3ZSBjYW5ub3QganVzdCB1c2Ug
YSBiaW5hcnkgc3dpdGNoIG92ZXIgdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgLy8gV2UgbmVlZCB0
byByZXNvcnQgdG8gYSBjYXNjYWRlLiBBIGNhc2NhZGUgYWxzbyBoYXBwZW5zIHRvIGJlIG9wdGlt
YWwgaWYgd2Ugb25seSBoYXZlIGp1c3QKKyAgICAgICAgLy8gb25lIGNhc2UuCisgICAgICAgIEND
YWxsSGVscGVyczo6SnVtcExpc3QgZmFsbFRocm91Z2g7CisKKyAgICAgICAgLy8gQ2FzY2FkZSB0
aHJvdWdoIHRoZSBsaXN0LCBwcmVmZXJyaW5nIG5ld2VyIGVudHJpZXMuCisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGNhc2VzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgZmFsbFRocm91
Z2gubGluaygmaml0KTsKKyAgICAgICAgICAgIGNhc2VzW2ldLT5nZW5lcmF0ZVdpdGhHdWFyZChz
dGF0ZSwgZmFsbFRocm91Z2gpOworICAgICAgICB9CisgICAgICAgIHN0YXRlLmZhaWxBbmRSZXBh
dGNoLmFwcGVuZChmYWxsVGhyb3VnaCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaml0LmxvYWQz
MigKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdGF0ZS5iYXNlR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAorICAgICAgICAgICAgc3RhdGUuc2NyYXRjaEdQUik7
CisgICAgICAgIAorICAgICAgICBWZWN0b3I8aW50NjRfdD4gY2FzZVZhbHVlcyhjYXNlcy5zaXpl
KCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2FzZXMuc2l6ZSgpOyArK2kp
CisgICAgICAgICAgICBjYXNlVmFsdWVzW2ldID0gYml0d2lzZV9jYXN0PGludDMyX3Q+KGNhc2Vz
W2ldLT5zdHJ1Y3R1cmUoKS0+aWQoKSk7CisgICAgICAgIAorICAgICAgICBCaW5hcnlTd2l0Y2gg
YmluYXJ5U3dpdGNoKHN0YXRlLnNjcmF0Y2hHUFIsIGNhc2VWYWx1ZXMsIEJpbmFyeVN3aXRjaDo6
SW50MzIpOworICAgICAgICB3aGlsZSAoYmluYXJ5U3dpdGNoLmFkdmFuY2Uoaml0KSkKKyAgICAg
ICAgICAgIGNhc2VzW2JpbmFyeVN3aXRjaC5jYXNlSW5kZXgoKV0tPmdlbmVyYXRlKHN0YXRlKTsK
KyAgICAgICAgc3RhdGUuZmFpbEFuZFJlcGF0Y2guYXBwZW5kKGJpbmFyeVN3aXRjaC5mYWxsVGhy
b3VnaCgpKTsKKyAgICB9CisKKyAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmxpbmsoJmppdCk7CisK
KyAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgaW5saW5lIGNhY2hlIG9wdGltaXphdGlvbiBjb2Rl
IGtub3dzIHRoYXQgd2UgYXJlIHRha2luZyBzbG93IHBhdGggYmVjYXVzZQorICAgIC8vIG9mIHNv
bWV0aGluZyB0aGF0IGlzbid0IHBhdGNoYWJsZS4gInNlZW4iIGJlaW5nIGZhbHNlIG1lYW5zIHRo
YXQgd2UgYnlwYXNzIHBhdGNoaW5nLiBUaGlzIGlzCisgICAgLy8gcHJldHR5IGdyb3NzIGJ1dCBp
dCBtZWFucyB0aGF0IHdlIGRvbid0IG5lZWQgdG8gaGF2ZSB0d28gc2xvdyBwYXRoIGVudHJ5cG9p
bnRzIC0gb25lIGZvcgorICAgIC8vIHBhdGNoaW5nIGFuZCBvbmUgZm9yIG5vcm1hbCBzbG93IHN0
dWZmLgorICAgIGppdC5zdG9yZTgoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoZmFsc2UpLCAm
c3R1YkluZm8uc2Vlbik7CisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGZhaWx1cmU7Cisg
ICAgaWYgKGFsbG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygpKSB7CisgICAgICAgIHN0YXRlLmZh
aWxBbmRSZXBhdGNoLmxpbmsoJmppdCk7CisgICAgICAgIHN0YXRlLnJlc3RvcmVTY3JhdGNoKCk7
CisgICAgfSBlbHNlCisgICAgICAgIGZhaWx1cmUgPSBzdGF0ZS5mYWlsQW5kUmVwYXRjaDsKKyAg
ICBmYWlsdXJlLmFwcGVuZChqaXQuanVtcCgpKTsKKworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZl
cih2bSwgaml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgaWYgKGxp
bmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkgeworICAgICAgICBpZiAodmVyYm9zZSkKKyAg
ICAgICAgICAgIGRhdGFMb2coIkRpZCBmYWlsIHRvIGFsbG9jYXRlLlxuIik7CisgICAgICAgIHJl
dHVybiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKICAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwor
CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgc3VjY2Vzc0xhYmVsID0KKyAgICAgICAgc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxs
VG9Eb25lKTsKKyAgICAgICAgCisgICAgbGlua0J1ZmZlci5saW5rKHN0YXRlLnN1Y2Nlc3MsIHN1
Y2Nlc3NMYWJlbCk7CisKKyAgICBsaW5rQnVmZmVyLmxpbmsoCisgICAgICAgIGZhaWx1cmUsCisg
ICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZv
LnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKKyAgICAKKyAgICBmb3IgKGF1dG8gY2FsbGJh
Y2sgOiBzdGF0ZS5jYWxsYmFja3MpCisgICAgICAgIGNhbGxiYWNrKGxpbmtCdWZmZXIpOworICAg
IAorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlID0gRklOQUxJWkVfQ09ERV9GT1IoCisg
ICAgICAgIGNvZGVCbG9jaywgbGlua0J1ZmZlciwKKyAgICAgICAgKCIlcyIsIHRvQ1N0cmluZygi
QWNjZXNzIHN0dWIgZm9yICIsICpjb2RlQmxvY2ssICIgIiwgc3R1YkluZm8uY29kZU9yaWdpbiwg
IiB3aXRoIHJldHVybiBwb2ludCAiLCBzdWNjZXNzTGFiZWwsICI6ICIsIGxpc3REdW1wKGNhc2Vz
KSkuZGF0YSgpKSk7CisKKyAgICBib29sIGRvZXNDYWxscyA9IGZhbHNlOworICAgIGZvciAoYXV0
byYgZW50cnkgOiBjYXNlcykKKyAgICAgICAgZG9lc0NhbGxzIHw9IGVudHJ5LT5kb2VzQ2FsbHMo
KTsKKyAgICAKKyAgICBtX3N0dWJSb3V0aW5lID0gY3JlYXRlSklUU3R1YlJvdXRpbmUoY29kZSwg
dm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGRvZXNDYWxscyk7CisgICAgbV93YXRj
aHBvaW50cyA9IHN0ZDo6bW92ZShzdGF0ZS53YXRjaHBvaW50cyk7CisgICAgaWYgKHZlcmJvc2Up
CisgICAgICAgIGRhdGFMb2coIlJldHVybmluZzogIiwgY29kZS5jb2RlKCksICJcbiIpOworICAg
IHJldHVybiBjb2RlLmNvZGUoKTsKIH0KIAotYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojp2
aXNpdFdlYWsoVk0mIHZtKSBjb25zdAorfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBX
VEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRT
dHJlYW0mIG91dCwgQWNjZXNzQ2FzZTo6QWNjZXNzVHlwZSB0eXBlKQogewotICAgIGZvciAodW5z
aWduZWQgaSA9IHNpemUoKTsgaS0tOykgewotICAgICAgICBpZiAoIWF0KGkpLnZpc2l0V2Vhayh2
bSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
Y2FzZSBBY2Nlc3NDYXNlOjpMb2FkOgorICAgICAgICBvdXQucHJpbnQoIkxvYWQiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6VHJhbnNpdGlvbjoKKyAgICAgICAgb3V0
LnByaW50KCJUcmFuc2l0aW9uIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nh
c2U6OlJlcGxhY2U6CisgICAgICAgIG91dC5wcmludCgiUmVwbGFjZSIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpNaXNzOgorICAgICAgICBvdXQucHJpbnQoIk1pc3Mi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6R2V0dGVyOgorICAgICAg
ICBvdXQucHJpbnQoIkdldHRlciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3ND
YXNlOjpTZXR0ZXI6CisgICAgICAgIG91dC5wcmludCgiU2V0dGVyIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkN1c3RvbUdldHRlcjoKKyAgICAgICAgb3V0LnByaW50
KCJDdXN0b21HZXR0ZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6
Q3VzdG9tU2V0dGVyOgorICAgICAgICBvdXQucHJpbnQoIkN1c3RvbVNldHRlciIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbkhpdDoKKyAgICAgICAgb3V0LnByaW50
KCJJbkhpdCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbk1pc3M6
CisgICAgICAgIG91dC5wcmludCgiSW5NaXNzIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEFjY2Vzc0Nhc2U6OkFycmF5TGVuZ3RoOgorICAgICAgICBvdXQucHJpbnQoIkFycmF5TGVuZ3Ro
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OlN0cmluZ0xlbmd0aDoK
KyAgICAgICAgb3V0LnByaW50KCJTdHJpbmdMZW5ndGgiKTsKKyAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICByZXR1cm4gdHJ1ZTsKKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiB9CiAKLX0gLy8gbmFtZXNwYWNlIEpTQworfSAvLyBuYW1lc3BhY2UgV1RGCiAKICNlbmRpZiAv
LyBFTkFCTEUoSklUKQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9s
eW1vcnBoaWNBY2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAkocmV2aXNpb24gMTg5MzI0KQkoZnJvbSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oOjE4OTMyNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0
LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUG9seW1vcnBoaWNHZXRCeUlkTGlz
dF9oCisjZGVmaW5lIFBvbHltb3JwaGljR2V0QnlJZExpc3RfaAorCisjaWYgRU5BQkxFKEpJVCkK
KworI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgor
I2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiCisjaW5jbHVkZSAiT3Bjb2Rl
LmgiCisjaW5jbHVkZSAiU3RydWN0dXJlLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitu
YW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ29kZUJsb2NrOworc3RydWN0IFN0cnVjdHVyZVN0dWJJ
bmZvOworCitjbGFzcyBHZXRCeUlkQWNjZXNzIHsKK3B1YmxpYzoKKyAgICBlbnVtIEFjY2Vzc1R5
cGUgeworICAgICAgICBJbnZhbGlkLAorICAgICAgICBTaW1wbGVJbmxpbmUsIC8vIFRoaXMgaXMg
dGhlIHBhdGNoZWQgaW5saW5lIGFjY2Vzcy4KKyAgICAgICAgU2ltcGxlU3R1YiwgLy8gVGhpcyBp
cyBhIHN0dWIuCisgICAgICAgIFdhdGNoZWRTdHViLAorICAgICAgICBHZXR0ZXIsCisgICAgICAg
IEN1c3RvbUdldHRlciwKKyAgICAgICAgU2ltcGxlTWlzcywKKyAgICB9OworICAgIAorICAgIEdl
dEJ5SWRBY2Nlc3MoKQorICAgICAgICA6IG1fdHlwZShJbnZhbGlkKQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgR2V0QnlJZEFjY2VzcygKKyAgICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nl
c3NUeXBlLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiwgU3RydWN0dXJlKiwKKyAgICAgICAg
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQoKSk7CisgICAgCisgICAgfkdldEJ5SWRBY2Nlc3MoKTsKKyAgICAKKyAgICBzdGF0aWMg
R2V0QnlJZEFjY2VzcyBmcm9tU3RydWN0dXJlU3R1YkluZm8oU3RydWN0dXJlU3R1YkluZm8mKTsK
KyAgICAKKyAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV90eXBlICE9IEludmFsaWQ7
IH0KKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9CisgICAg
CisgICAgQWNjZXNzVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgCisg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZS5nZXQo
KTsgfQorICAgIAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRp
b25TZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQorICAgIAorICAgIEpJVFN0
dWJSb3V0aW5lKiBzdHViUm91dGluZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNT
ZXQoKSk7CisgICAgICAgIHJldHVybiBtX3N0dWJSb3V0aW5lLmdldCgpOworICAgIH0KKyAgICAK
KyAgICBib29sIGRvZXNDYWxscygpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBHZXR0ZXIgfHwg
dHlwZSgpID09IEN1c3RvbUdldHRlcjsgfQorICAgIAorICAgIGJvb2wgdmlzaXRXZWFrKFZNJikg
Y29uc3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKKyAgICAKKyAg
ICBBY2Nlc3NUeXBlIG1fdHlwZTsKKyAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cnVj
dHVyZTsKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKKyAg
ICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IG1fc3R1YlJvdXRpbmU7Cit9OworCitjbGFzcyBQb2x5
bW9ycGhpY0dldEJ5SWRMaXN0IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1Ymxp
YzoKKyAgICAvLyBFaXRoZXIgY3JlYXRlcyBhIG5ldyBwb2x5bW9ycGhpYyBnZXQgbGlzdCwgb3Ig
cmV0dXJucyB0aGUgb25lIHRoYXQgaXMgYWxyZWFkeSBpbgorICAgIC8vIHBsYWNlLgorICAgIHN0
YXRpYyBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBmcm9tKFN0cnVjdHVyZVN0dWJJbmZvJik7Cisg
ICAgCisgICAgflBvbHltb3JwaGljR2V0QnlJZExpc3QoKTsKKyAgICAKKyAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgY3VycmVudFNsb3dQYXRoVGFyZ2V0KFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbykgY29uc3Q7CisgICAgCisgICAgdm9pZCBhZGRBY2Nlc3MoY29uc3QgR2V0QnlJZEFjY2Vz
cyYpOworICAgIAorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5pc0Vt
cHR5KCk7IH0KKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9saXN0LnNpemUo
KTsgfQorICAgIGJvb2wgaXNGdWxsKCkgY29uc3Q7CisgICAgYm9vbCBpc0FsbW9zdEZ1bGwoKSBj
b25zdDsgLy8gVHJ1ZSBpZiBhZGRpbmcgYW4gZWxlbWVudCB3b3VsZCBtYWtlIGlzRnVsbCgpIHRy
dWUuCisgICAgY29uc3QgR2V0QnlJZEFjY2VzcyYgYXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1
cm4gbV9saXN0W2ldOyB9CisgICAgY29uc3QgR2V0QnlJZEFjY2VzcyYgb3BlcmF0b3JbXSh1bnNp
Z25lZCBpKSBjb25zdCB7IHJldHVybiBtX2xpc3RbaV07IH0KKyAgICAKKyAgICBib29sIGRpZFNl
bGZQYXRjaGluZygpIGNvbnN0OyAvLyBBcmUgYW55IG9mIHRoZSBhY2Nlc3NlcyBTaW1wbGVJbmxp
bmU/CisgICAgCisgICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAg
ICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOworICAgIAorICAgIFBvbHltb3JwaGljR2V0QnlJZExp
c3QoU3RydWN0dXJlU3R1YkluZm8mKTsKKyAgICAKKyAgICBWZWN0b3I8R2V0QnlJZEFjY2Vzcywg
Mj4gbV9saXN0OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUo
SklUKQorCisjZW5kaWYgLy8gUG9seW1vcnBoaWNHZXRCeUlkTGlzdF9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCSh3
b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBo
aWNBY2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsOCArMjMsOCBAQAogICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCiAgKi8KIAotI2lmbmRlZiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0X2gKLSNkZWZpbmUgUG9s
eW1vcnBoaWNHZXRCeUlkTGlzdF9oCisjaWZuZGVmIFBvbHltb3JwaGljQWNjZXNzX2gKKyNkZWZp
bmUgUG9seW1vcnBoaWNBY2Nlc3NfaAogCiAjaWYgRU5BQkxFKEpJVCkKIApAQCAtMzgsOTYgKzM4
LDI2OCBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENvZGVCbG9jazsKK2NsYXNzIFBvbHlt
b3JwaGljQWNjZXNzOworY2xhc3MgV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOwogc3Ry
dWN0IFN0cnVjdHVyZVN0dWJJbmZvOwogCi1jbGFzcyBHZXRCeUlkQWNjZXNzIHsKK3N0cnVjdCBB
Y2Nlc3NHZW5lcmF0aW9uU3RhdGU7CisKK2NsYXNzIEFjY2Vzc0Nhc2UgeworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKEFjY2Vzc0Nhc2UpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
cHVibGljOgogICAgIGVudW0gQWNjZXNzVHlwZSB7Ci0gICAgICAgIEludmFsaWQsCi0gICAgICAg
IFNpbXBsZUlubGluZSwgLy8gVGhpcyBpcyB0aGUgcGF0Y2hlZCBpbmxpbmUgYWNjZXNzLgotICAg
ICAgICBTaW1wbGVTdHViLCAvLyBUaGlzIGlzIGEgc3R1Yi4KLSAgICAgICAgV2F0Y2hlZFN0dWIs
CisgICAgICAgIExvYWQsCisgICAgICAgIFRyYW5zaXRpb24sCisgICAgICAgIFJlcGxhY2UsCisg
ICAgICAgIE1pc3MsCiAgICAgICAgIEdldHRlciwKKyAgICAgICAgU2V0dGVyLAogICAgICAgICBD
dXN0b21HZXR0ZXIsCi0gICAgICAgIFNpbXBsZU1pc3MsCisgICAgICAgIEN1c3RvbVNldHRlciwK
KyAgICAgICAgSW5IaXQsCisgICAgICAgIEluTWlzcywKKyAgICAgICAgQXJyYXlMZW5ndGgsCisg
ICAgICAgIFN0cmluZ0xlbmd0aAogICAgIH07Ci0gICAgCi0gICAgR2V0QnlJZEFjY2VzcygpCi0g
ICAgICAgIDogbV90eXBlKEludmFsaWQpCisKKyAgICBzdGF0aWMgYm9vbCBpc0dldChBY2Nlc3NU
eXBlIHR5cGUpCiAgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBU
cmFuc2l0aW9uOgorICAgICAgICBjYXNlIFJlcGxhY2U6CisgICAgICAgIGNhc2UgU2V0dGVyOgor
ICAgICAgICBjYXNlIEN1c3RvbVNldHRlcjoKKyAgICAgICAgY2FzZSBJbkhpdDoKKyAgICAgICAg
Y2FzZSBJbk1pc3M6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgTG9h
ZDoKKyAgICAgICAgY2FzZSBNaXNzOgorICAgICAgICBjYXNlIEdldHRlcjoKKyAgICAgICAgY2Fz
ZSBDdXN0b21HZXR0ZXI6CisgICAgICAgIGNhc2UgQXJyYXlMZW5ndGg6CisgICAgICAgIGNhc2Ug
U3RyaW5nTGVuZ3RoOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KICAgICB9
Ci0gICAgCi0gICAgR2V0QnlJZEFjY2VzcygKLSAgICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBB
Y2Nlc3NUeXBlLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiwgU3RydWN0dXJlKiwKKworICAg
IHN0YXRpYyBib29sIGlzUHV0KEFjY2Vzc1R5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRj
aCAodHlwZSkgeworICAgICAgICBjYXNlIExvYWQ6CisgICAgICAgIGNhc2UgTWlzczoKKyAgICAg
ICAgY2FzZSBHZXR0ZXI6CisgICAgICAgIGNhc2UgQ3VzdG9tR2V0dGVyOgorICAgICAgICBjYXNl
IEluSGl0OgorICAgICAgICBjYXNlIEluTWlzczoKKyAgICAgICAgY2FzZSBBcnJheUxlbmd0aDoK
KyAgICAgICAgY2FzZSBTdHJpbmdMZW5ndGg6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIGNhc2UgVHJhbnNpdGlvbjoKKyAgICAgICAgY2FzZSBSZXBsYWNlOgorICAgICAgICBj
YXNlIFNldHRlcjoKKyAgICAgICAgY2FzZSBDdXN0b21TZXR0ZXI6CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzSW4oQWNjZXNz
VHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2Ug
TG9hZDoKKyAgICAgICAgY2FzZSBNaXNzOgorICAgICAgICBjYXNlIEdldHRlcjoKKyAgICAgICAg
Y2FzZSBDdXN0b21HZXR0ZXI6CisgICAgICAgIGNhc2UgVHJhbnNpdGlvbjoKKyAgICAgICAgY2Fz
ZSBSZXBsYWNlOgorICAgICAgICBjYXNlIFNldHRlcjoKKyAgICAgICAgY2FzZSBDdXN0b21TZXR0
ZXI6CisgICAgICAgIGNhc2UgQXJyYXlMZW5ndGg6CisgICAgICAgIGNhc2UgU3RyaW5nTGVuZ3Ro
OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIEluSGl0OgorICAgICAg
ICBjYXNlIEluTWlzczoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAg
fQorCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBnZXQoCisgICAgICAg
IFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgUHJvcGVydHlPZmZzZXQsIFN0cnVjdHVy
ZSosCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiA9IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0KCksCisgICAgICAgIGJvb2wgdmlhUHJveHkgPSBmYWxzZSwKKyAg
ICAgICAgV2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCA9IG51bGxwdHIsCisgICAgICAgIFBy
b3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jID0gbnVsbHB0cik7CisKKyAgICBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHJlcGxhY2UoCisgICAgICAgIFZNJiwgSlNDZWxsKiBvd25l
ciwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCk7CisKKyAgICBz
dGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHRyYW5zaXRpb24oCisgICAgICAgIFZN
JiwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3
U3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCiAgICAgICAgIGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCkpOworCisg
ICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBzZXR0ZXIoCisgICAgICAgIFZN
JiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQs
CisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgUHV0UHJvcGVydHlT
bG90OjpQdXRWYWx1ZUZ1bmMpOworCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3ND
YXNlPiBpbigKKyAgICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQm
ID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSk7CisKKyAgICBzdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPEFjY2Vzc0Nhc2U+IGdldExlbmd0aChWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5
cGUpOwogICAgIAotICAgIH5HZXRCeUlkQWNjZXNzKCk7Ci0gICAgCi0gICAgc3RhdGljIEdldEJ5
SWRBY2Nlc3MgZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBmcm9tU3RydWN0dXJlU3R1YkluZm8o
Vk0mLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOworCisgICAgfkFjY2Vzc0Nh
c2UoKTsKICAgICAKLSAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV90eXBlICE9IElu
dmFsaWQ7IH0KLSAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9
CisgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGNsb25lKCkgY29uc3Q7CiAgICAgCiAg
ICAgQWNjZXNzVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKyAgICBib29sIHZp
YVByb3h5KCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPnZpYVByb3h5
IDogZmFsc2U7IH0KICAgICAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RydWN0dXJlLmdldCgpOyB9Ci0gICAgCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0
OyB9Ci0gICAgCi0gICAgSklUU3R1YlJvdXRpbmUqIHN0dWJSb3V0aW5lKCkgY29uc3QKKyAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV90eXBlID09
IFRyYW5zaXRpb24pCisgICAgICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUtPnByZXZpb3VzSUQo
KTsKKyAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlLmdldCgpOworICAgIH0KKyAgICBib29sIGd1
YXJkZWRCeVN0cnVjdHVyZUNoZWNrKCkgY29uc3Q7CisKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVj
dHVyZSgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQoaXNTZXQoKSk7Ci0gICAgICAgIHJl
dHVybiBtX3N0dWJSb3V0aW5lLmdldCgpOworICAgICAgICBBU1NFUlQobV90eXBlID09IFRyYW5z
aXRpb24pOworICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7CiAgICAgfQogICAgIAot
ICAgIGJvb2wgZG9lc0NhbGxzKCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09IEdldHRlciB8fCB0
eXBlKCkgPT0gQ3VzdG9tR2V0dGVyOyB9CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQg
Y29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0KKworICAgIFdh
dGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5hZGRpdGlvbmFsU2V0LmdldCgpIDogbnVsbHB0cjsK
KyAgICB9CiAgICAgCi0gICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25zdDsKKyAgICBib29sIGRv
ZXNDYWxscygpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUoKSkgeworICAgICAg
ICBjYXNlIEdldHRlcjoKKyAgICAgICAgY2FzZSBTZXR0ZXI6CisgICAgICAgIGNhc2UgQ3VzdG9t
R2V0dGVyOgorICAgICAgICBjYXNlIEN1c3RvbVNldHRlcjoKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgfQogCisgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8oKSBjb25zdAorICAg
IHsKKyAgICAgICAgaWYgKCFtX3JhcmVEYXRhKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgIHJldHVybiBtX3JhcmVEYXRhLT5jYWxsTGlua0luZm8uZ2V0KCk7CisgICAgfQor
CisgICAgLy8gSWYgdGhpcyBtZXRob2QgcmV0dXJucyB0cnVlLCB0aGVuIGl0J3MgYSBnb29kIGlk
ZWEgdG8gcmVtb3ZlICdvdGhlcicgZnJvbSB0aGUgYWNjZXNzIG9uY2UgJ3RoaXMnCisgICAgLy8g
aXMgYWRkZWQuIFRoaXMgbWV0aG9kIGFzc3VtZXMgdGhhdCBpbiBjYXNlIG9mIGNvbnRyYWRpY3Rp
b25zLCAndGhpcycgcmVwcmVzZW50cyBhIG5ld2VyLCBhbmQgc28KKyAgICAvLyBtb3JlIHVzZWZ1
bCwgdHJ1dGguIFRoaXMgbWV0aG9kIGNhbiBiZSBjb25zZXJ2YXRpdmU7IGl0IHdpbGwgcmV0dXJu
IGZhbHNlIHdoZW4gaXQgZG91YnQuCisgICAgYm9vbCBjYW5SZXBsYWNlKGNvbnN0IEFjY2Vzc0Nh
c2UmIG90aGVyKTsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKyAg
ICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKKyAgICBmcmllbmQgY2xh
c3MgUG9seW1vcnBoaWNBY2Nlc3M7CisKKyAgICBBY2Nlc3NDYXNlKCk7CisKKyAgICBib29sIHZp
c2l0V2VhayhWTSYpIGNvbnN0OworCisgICAgLy8gRmFsbCB0aHJvdWdoIG9uIHN1Y2Nlc3MuIFR3
byBraW5kcyBvZiBmYWlsdXJlcyBhcmUgc3VwcG9ydGVkOiBmYWxsLXRocm91Z2gsIHdoaWNoIG1l
YW5zIHRoYXQgd2UKKyAgICAvLyBzaG91bGQgdHJ5IGEgZGlmZmVyZW50IGNhc2U7IGFuZCBmYWls
dXJlLCB3aGljaCBtZWFucyB0aGF0IHRoaXMgd2FzIHRoZSByaWdodCBjYXNlIGJ1dCBpdCBuZWVk
cworICAgIC8vIGhlbHAgZnJvbSB0aGUgc2xvdyBwYXRoLgorICAgIHZvaWQgZ2VuZXJhdGVXaXRo
R3VhcmQoQWNjZXNzR2VuZXJhdGlvblN0YXRlJiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBm
YWxsVGhyb3VnaCk7CisKKyAgICAvLyBGYWxsIHRocm91Z2ggb24gc3VjY2VzcywgYWRkIGEganVt
cCB0byB0aGUgZmFpbHVyZSBsaXN0IG9uIGZhaWx1cmUuCisgICAgdm9pZCBnZW5lcmF0ZShBY2Nl
c3NHZW5lcmF0aW9uU3RhdGUmKTsKICAgICAKICAgICBBY2Nlc3NUeXBlIG1fdHlwZTsKKyAgICBQ
cm9wZXJ0eU9mZnNldCBtX29mZnNldDsKKworICAgIC8vIFVzdWFsbHkgdGhpcyBpcyB0aGUgc3Ry
dWN0dXJlIHRoYXQgd2UgZXhwZWN0IHRoZSBiYXNlIG9iamVjdCB0byBoYXZlLiBCdXQsIHRoaXMg
aXMgdGhlICpuZXcqCisgICAgLy8gc3RydWN0dXJlIGZvciBhIHRyYW5zaXRpb24gYW5kIHdlIHJl
bHkgb24gdGhlIGZhY3QgdGhhdCBpdCBoYXMgYSBzdHJvbmcgcmVmZXJlbmNlIHRvIHRoZSBvbGQK
KyAgICAvLyBzdHJ1Y3R1cmUuIEZvciBwcm94aWVzLCB0aGlzIGlzIHRoZSBzdHJ1Y3R1cmUgb2Yg
dGhlIG9iamVjdCBiZWhpbmQgdGhlIHByb3h5LgogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+
IG1fc3RydWN0dXJlOworCiAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRp
b25TZXQ7Ci0gICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBtX3N0dWJSb3V0aW5lOworCisgICAg
Y2xhc3MgUmFyZURhdGEgeworICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBw
dWJsaWM6CisgICAgICAgIGJvb2wgdmlhUHJveHk7CisgICAgICAgIFJlZlB0cjxXYXRjaHBvaW50
U2V0PiBhZGRpdGlvbmFsU2V0OworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtJbmZv
PiBjYWxsTGlua0luZm87CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIFByb3BlcnR5U2xv
dDo6R2V0VmFsdWVGdW5jIGdldHRlcjsKKyAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdDo6UHV0
VmFsdWVGdW5jIHNldHRlcjsKKyAgICAgICAgICAgIHZvaWQqIG9wYXF1ZTsKKyAgICAgICAgfSBj
dXN0b21BY2Nlc3NvcjsKKyAgICB9OworCisgICAgc3RkOjp1bmlxdWVfcHRyPFJhcmVEYXRhPiBt
X3JhcmVEYXRhOwogfTsKIAotY2xhc3MgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCB7CitjbGFzcyBQ
b2x5bW9ycGhpY0FjY2VzcyB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUG9seW1vcnBoaWNB
Y2Nlc3MpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIC8vIEVp
dGhlciBjcmVhdGVzIGEgbmV3IHBvbHltb3JwaGljIGdldCBsaXN0LCBvciByZXR1cm5zIHRoZSBv
bmUgdGhhdCBpcyBhbHJlYWR5IGluCi0gICAgLy8gcGxhY2UuCi0gICAgc3RhdGljIFBvbHltb3Jw
aGljR2V0QnlJZExpc3QqIGZyb20oU3RydWN0dXJlU3R1YkluZm8mKTsKLSAgICAKLSAgICB+UG9s
eW1vcnBoaWNHZXRCeUlkTGlzdCgpOwotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBj
dXJyZW50U2xvd1BhdGhUYXJnZXQoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKSBjb25zdDsK
LSAgICAKLSAgICB2b2lkIGFkZEFjY2Vzcyhjb25zdCBHZXRCeUlkQWNjZXNzJik7CisgICAgUG9s
eW1vcnBoaWNBY2Nlc3MoKTsKKyAgICB+UG9seW1vcnBoaWNBY2Nlc3MoKTsKKworICAgIC8vIFRo
aXMgbWF5IHJldHVybiBudWxsLCBpbiB3aGljaCBjYXNlIHRoZSBvbGQgc3R1YiByb3V0aW5lIGlz
IGxlZnQgaW50YWN0LiBUaGlzIG1ldGhvZCB3aWxsIGRvIHlvdQorICAgIC8vIGEgc29saWQgYW5k
IG51bGwtY2hlY2sgdGhlIEFjY2Vzc0Nhc2UsIHNvIHRoYXQgeW91IGNhbiBkbyB0aGluZ3MgbGlr
ZToKKyAgICAvLworICAgIC8vIGNvZGVQdHIgPSBhY2Nlc3MtPnJlZ2VuZXJhdGVXaXRoQ2FzZSgu
Li4sIEFjY2Vzc0Nhc2U6OmdldCguLi4pKQorICAgIC8vCisgICAgLy8gSWYgQWNjZXNzQ2FzZTo6
Z2V0KCkgcmV0dXJucyBudWxscHRyLCB0aGUgYWJvdmUgY2FsbCB3aWxsIHNpbXBseSByZXR1cm4g
bnVsbC4KKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVnZW5lcmF0ZVdpdGhDYXNlcygKKyAg
ICAgICAgVk0mLCBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIGNvbnN0IElkZW50aWZp
ZXImLCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+Pik7CisKKyAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIgcmVnZW5lcmF0ZVdpdGhDYXNlKAorICAgICAgICBWTSYsIENvZGVCbG9j
ayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgY29uc3QgSWRlbnRpZmllciYsIHN0ZDo6dW5pcXVlX3B0
cjxBY2Nlc3NDYXNlPik7CiAgICAgCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4g
bV9saXN0LmlzRW1wdHkoKTsgfQogICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBt
X2xpc3Quc2l6ZSgpOyB9Ci0gICAgYm9vbCBpc0Z1bGwoKSBjb25zdDsKLSAgICBib29sIGlzQWxt
b3N0RnVsbCgpIGNvbnN0OyAvLyBUcnVlIGlmIGFkZGluZyBhbiBlbGVtZW50IHdvdWxkIG1ha2Ug
aXNGdWxsKCkgdHJ1ZS4KLSAgICBjb25zdCBHZXRCeUlkQWNjZXNzJiBhdCh1bnNpZ25lZCBpKSBj
b25zdCB7IHJldHVybiBtX2xpc3RbaV07IH0KLSAgICBjb25zdCBHZXRCeUlkQWNjZXNzJiBvcGVy
YXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdFtpXTsgfQotICAgIAotICAg
IGJvb2wgZGlkU2VsZlBhdGNoaW5nKCkgY29uc3Q7IC8vIEFyZSBhbnkgb2YgdGhlIGFjY2Vzc2Vz
IFNpbXBsZUlubGluZT8KLSAgICAKKyAgICBjb25zdCBBY2Nlc3NDYXNlJiBhdCh1bnNpZ25lZCBp
KSBjb25zdCB7IHJldHVybiAqbV9saXN0W2ldOyB9CisgICAgY29uc3QgQWNjZXNzQ2FzZSYgb3Bl
cmF0b3JbXSh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiAqbV9saXN0W2ldOyB9CisKKyAgICAv
LyBJZiB0aGlzIHJldHVybnMgZmFsc2UgdGhlbiB3ZSBhcmUgcmVxdWVzdGluZyBhIHJlc2V0IG9m
IHRoZSBvd25pbmcgU3RydWN0dXJlU3R1YkluZm8uCiAgICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBj
b25zdDsKIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKwogcHJpdmF0
ZToKKyAgICBmcmllbmQgY2xhc3MgQWNjZXNzQ2FzZTsKICAgICBmcmllbmQgY2xhc3MgQ29kZUJs
b2NrOworICAgIGZyaWVuZCBzdHJ1Y3QgQWNjZXNzR2VuZXJhdGlvblN0YXRlOwogICAgIAotICAg
IFBvbHltb3JwaGljR2V0QnlJZExpc3QoU3RydWN0dXJlU3R1YkluZm8mKTsKLSAgICAKLSAgICBW
ZWN0b3I8R2V0QnlJZEFjY2VzcywgMj4gbV9saXN0OworICAgIHR5cGVkZWYgVmVjdG9yPHN0ZDo6
dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiwgMj4gTGlzdFR5cGU7CisKKyAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgcmVnZW5lcmF0ZSgKKyAgICAgICAgVk0mLCBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVT
dHViSW5mbyYsIGNvbnN0IElkZW50aWZpZXImLCBMaXN0VHlwZSYgY2FzZXMpOworCisgICAgTGlz
dFR5cGUgbV9saXN0OworICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gbV9zdHViUm91dGluZTsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvPiBtX3dh
dGNocG9pbnRzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKK25hbWVzcGFjZSBXVEYgewor
Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkFjY2Vzc0Nhc2U6OkFjY2Vz
c1R5cGUpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAK
LSNlbmRpZiAvLyBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0X2gKKyNlbmRpZiAvLyBQb2x5bW9ycGhp
Y0FjY2Vzc19oCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9y
cGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0LmgJKHJldmlzaW9u
IDE4OTQ5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzc1N0cnVjdHVyZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMTIgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFBvbHlt
b3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdF9oCi0jZGVmaW5lIFBvbHltb3JwaGljQWNjZXNzU3Ry
dWN0dXJlTGlzdF9oCi0KLSNpbmNsdWRlICJKSVRTdHViUm91dGluZS5oIgotI2luY2x1ZGUgIlN0
cnVjdHVyZS5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUNoYWluLmgiCi0KLSNkZWZpbmUgUE9MWU1P
UlBISUNfTElTVF9DQUNIRV9TSVpFIDgKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLS8vICpTaWdoKiwg
SWYgdGhlIEpJVCBpcyBlbmFibGVkIHdlIG5lZWQgdG8gdHJhY2sgdGhlIHN0dWJSb3VudGluZSAo
b2YgdHlwZSBDb2RlTG9jYXRpb25MYWJlbCksCi0vLyBJZiB0aGUgSklUIGlzIG5vdCBpbiB1c2Ug
d2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0aGUgdmFyaWFibGUgKHRoYXQgc2FpZCwgaWYgdGhlIEpJ
VCBpcyBub3QgaW4gdXNlIHdlIGRvbid0Ci0vLyBjdXJlbnRseSBhY3R1YWxseSB1c2UgUG9seW1v
cnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0cywgd2hpY2ggd2Ugc2hvdWxkKS4gIEFueXdheSwgdGhp
cyBzZWVtcyBsaWtlIHRoZSBiZXN0Ci0vLyBzb2x1dGlvbiBmb3Igbm93IC0gd2lsbCBuZWVkIHRv
IHNvbWV0aGluZyBzbWFydGVyIGlmL3doZW4gd2UgYWN0dWFsbHkgd2FudCBtaXhlZC1tb2RlIG9w
ZXJhdGlvbi4KLQotI2lmIEVOQUJMRShKSVQpCi0vLyBTdHJ1Y3R1cmUgdXNlZCBieSBvcF9nZXRf
YnlfaWRfc2VsZl9saXN0IGFuZCBvcF9nZXRfYnlfaWRfcHJvdG9fbGlzdCBpbnN0cnVjdGlvbiB0
byBob2xkIGRhdGEgb2ZmIHRoZSBtYWluIG9wY29kZSBzdHJlYW0uCi1zdHJ1Y3QgUG9seW1vcnBo
aWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1
YmxpYzoKLSAgICBzdHJ1Y3QgUG9seW1vcnBoaWNTdHViSW5mbyB7Ci0gICAgICAgIGJvb2wgaXNE
aXJlY3QgOiAxOwotICAgICAgICB1bnNpZ25lZCBjb3VudCA6IDMxOwotICAgICAgICBSZWZQdHI8
SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwotICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0
dXJlPiBiYXNlOwotICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlQ2hhaW4+IGNoYWluOwot
Ci0gICAgICAgIFBvbHltb3JwaGljU3R1YkluZm8oKQotICAgICAgICB7Ci0gICAgICAgIH0KLQot
ICAgICAgICB2b2lkIHNldChWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFBhc3NSZWZQdHI8SklUU3R1
YlJvdXRpbmU+IF9zdHViUm91dGluZSwgU3RydWN0dXJlKiBfYmFzZSwgYm9vbCBfaXNEaXJlY3Qp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHN0dWJSb3V0aW5lID0gX3N0dWJSb3V0aW5lOwotICAg
ICAgICAgICAgYmFzZS5zZXQodm0sIG93bmVyLCBfYmFzZSk7Ci0gICAgICAgICAgICBpc0RpcmVj
dCA9IF9pc0RpcmVjdDsKLSAgICAgICAgICAgIGNvdW50ID0gMDsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgdm9pZCBzZXQoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBQYXNzUmVmUHRyPEpJ
VFN0dWJSb3V0aW5lPiBfc3R1YlJvdXRpbmUsIFN0cnVjdHVyZSogX2Jhc2UsIFN0cnVjdHVyZUNo
YWluKiBfY2hhaW4sIGJvb2wgX2lzRGlyZWN0LCB1bnNpZ25lZCBfY291bnQpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHN0dWJSb3V0aW5lID0gX3N0dWJSb3V0aW5lOwotICAgICAgICAgICAgYmFz
ZS5zZXQodm0sIG93bmVyLCBfYmFzZSk7Ci0gICAgICAgICAgICBjaGFpbi5zZXQodm0sIG93bmVy
LCBfY2hhaW4pOwotICAgICAgICAgICAgaXNEaXJlY3QgPSBfaXNEaXJlY3Q7Ci0gICAgICAgICAg
ICBjb3VudCA9IF9jb3VudDsKLSAgICAgICAgfQotICAgIH0gbGlzdFtQT0xZTU9SUEhJQ19MSVNU
X0NBQ0hFX1NJWkVdOwotICAgIAotICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCgp
Ci0gICAgewotICAgIH0KLSAgICAKLSAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3Qo
Vk0mIHZtLCBKU0NlbGwqIG93bmVyLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91
dGluZSwgU3RydWN0dXJlKiBmaXJzdEJhc2UsIGJvb2wgaXNEaXJlY3QpCi0gICAgewotICAgICAg
ICBsaXN0WzBdLnNldCh2bSwgb3duZXIsIHN0dWJSb3V0aW5lLCBmaXJzdEJhc2UsIGlzRGlyZWN0
KTsKLSAgICB9Ci0KLSAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoVk0mIHZtLCBK
U0NlbGwqIG93bmVyLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSwgU3Ry
dWN0dXJlKiBmaXJzdEJhc2UsIFN0cnVjdHVyZUNoYWluKiBmaXJzdENoYWluLCBib29sIGlzRGly
ZWN0LCB1bnNpZ25lZCBjb3VudCkKLSAgICB7Ci0gICAgICAgIGxpc3RbMF0uc2V0KHZtLCBvd25l
ciwgc3R1YlJvdXRpbmUsIGZpcnN0QmFzZSwgZmlyc3RDaGFpbiwgaXNEaXJlY3QsIGNvdW50KTsK
LSAgICB9Ci0KLSAgICBib29sIHZpc2l0V2VhayhpbnQgY291bnQpCi0gICAgewotICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgICAgIFBvbHltb3JwaGlj
U3R1YkluZm8mIGluZm8gPSBsaXN0W2ldOwotICAgICAgICAgICAgaWYgKCFpbmZvLmJhc2UpCi0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBp
ZiAoIUhlYXA6OmlzTWFya2VkKGluZm8uYmFzZS5nZXQoKSkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKGluZm8uY2hhaW4gJiYgIUhlYXA6OmlzTWFya2Vk
KGluZm8uY2hhaW4uZ2V0KCkpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQotICAgICAgICAgICAgCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLX07Ci0KLSNl
bmRpZiAvLyBFTkFCTEUoSklUKQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIFBv
bHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdF9oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAJ
KHJldmlzaW9uIDE4OTQ5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY0dldEJ5SWRMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNTUgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oIgotCi0j
aWYgRU5BQkxFKEpJVCkKLQotI2luY2x1ZGUgIkNvZGVCbG9jay5oIgotI2luY2x1ZGUgIkhlYXAu
aCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8u
aCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLUdldEJ5SWRBY2Nlc3M6OkdldEJ5SWRBY2Nlc3MoCi0g
ICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5cGUsIFBhc3NSZWZQdHI8SklU
U3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lLAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KQotICAgIDogbV90eXBl
KHR5cGUpCi0gICAgLCBtX3N0cnVjdHVyZSh2bSwgb3duZXIsIHN0cnVjdHVyZSkKLSAgICAsIG1f
Y29uZGl0aW9uU2V0KGNvbmRpdGlvblNldCkKLSAgICAsIG1fc3R1YlJvdXRpbmUoc3R1YlJvdXRp
bmUpCi17Ci19Ci0KLUdldEJ5SWRBY2Nlc3M6On5HZXRCeUlkQWNjZXNzKCkKLXsKLX0KLQotR2V0
QnlJZEFjY2VzcyBHZXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0dXJlU3R1YkluZm8oU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBpbml0aWFs
U2xvd1BhdGggPQotICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9m
ZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKLSAgICAKLSAgICBHZXRC
eUlkQWNjZXNzIHJlc3VsdDsKLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5hY2Nl
c3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZik7Ci0gICAgCi0gICAgcmVzdWx0Lm1fdHlw
ZSA9IFNpbXBsZUlubGluZTsKLSAgICByZXN1bHQubV9zdHJ1Y3R1cmUuY29weUZyb20oc3R1Yklu
Zm8udS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlKTsKLSAgICByZXN1bHQubV9zdHVi
Um91dGluZSA9IEpJVFN0dWJSb3V0aW5lOjpjcmVhdGVTZWxmTWFuYWdlZFJvdXRpbmUoaW5pdGlh
bFNsb3dQYXRoKTsKLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1ib29sIEdldEJ5SWRB
Y2Nlc3M6OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0Ci17Ci0gICAgaWYgKG1fc3RydWN0dXJlICYm
ICFIZWFwOjppc01hcmtlZChtX3N0cnVjdHVyZS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBpZiAoIW1fY29uZGl0aW9uU2V0LmFyZVN0aWxsTGl2ZSgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgaWYgKCFtX3N0dWJSb3V0aW5lLT52aXNpdFdlYWsodm0pKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVBvbHltb3JwaGljR2V0QnlJ
ZExpc3Q6OlBvbHltb3JwaGljR2V0QnlJZExpc3QoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
KQotewotICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc191bnNldCkKLSAgICAg
ICAgcmV0dXJuOwotICAgIAotICAgIG1fbGlzdC5hcHBlbmQoR2V0QnlJZEFjY2Vzczo6ZnJvbVN0
cnVjdHVyZVN0dWJJbmZvKHN0dWJJbmZvKSk7Ci19Ci0KLVBvbHltb3JwaGljR2V0QnlJZExpc3Qq
IFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmZyb20oU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
KQotewotICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfbGlz
dCkKLSAgICAgICAgcmV0dXJuIHN0dWJJbmZvLnUuZ2V0QnlJZExpc3QubGlzdDsKLSAgICAKLSAg
ICBBU1NFUlQoCi0gICAgICAgIHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9p
ZF9zZWxmCi0gICAgICAgIHx8IHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0KTsK
LSAgICAKLSAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiByZXN1bHQgPSBuZXcgUG9seW1vcnBo
aWNHZXRCeUlkTGlzdChzdHViSW5mbyk7Ci0gICAgCi0gICAgc3R1YkluZm8uaW5pdEdldEJ5SWRM
aXN0KHJlc3VsdCk7Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotUG9seW1vcnBoaWNH
ZXRCeUlkTGlzdDo6flBvbHltb3JwaGljR2V0QnlJZExpc3QoKSB7IH0KLQotTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmN1cnJlbnRTbG93UGF0aFRhcmdldCgK
LSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pIGNvbnN0Ci17Ci0gICAgaWYgKGlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0
T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpOwotICAgIHJldHVybiBt
X2xpc3QubGFzdCgpLnN0dWJSb3V0aW5lKCktPmNvZGUoKS5jb2RlKCk7Ci19Ci0KLXZvaWQgUG9s
eW1vcnBoaWNHZXRCeUlkTGlzdDo6YWRkQWNjZXNzKGNvbnN0IEdldEJ5SWRBY2Nlc3MmIGFjY2Vz
cykKLXsKLSAgICBBU1NFUlQoIWlzRnVsbCgpKTsKLSAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUg
cmVzaXppbmcgb3B0aW1pemVzIGZvciBzcGFjZSwgbm90IHRpbWUuCi0gICAgbV9saXN0LnJlc2l6
ZVRvRml0KG1fbGlzdC5zaXplKCkgKyAxKTsKLSAgICBtX2xpc3QubGFzdCgpID0gYWNjZXNzOwot
fQotCi1ib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmlzRnVsbCgpIGNvbnN0Ci17Ci0gICAg
QVNTRVJUKHNpemUoKSA8PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpOwotICAgIHJldHVy
biBzaXplKCkgPT0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFOwotfQotCi1ib29sIFBvbHlt
b3JwaGljR2V0QnlJZExpc3Q6OmlzQWxtb3N0RnVsbCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHNp
emUoKSA8PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpOwotICAgIHJldHVybiBzaXplKCkg
Pj0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIC0gMTsKLX0KLQotYm9vbCBQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0OjpkaWRTZWxmUGF0Y2hpbmcoKSBjb25zdAotewotICAgIGZvciAodW5zaWdu
ZWQgaSA9IHNpemUoKTsgaS0tOykgewotICAgICAgICBpZiAoYXQoaSkudHlwZSgpID09IEdldEJ5
SWRBY2Nlc3M6OlNpbXBsZUlubGluZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6dmlz
aXRXZWFrKFZNJiB2bSkgY29uc3QKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXplKCk7IGkt
LTspIHsKLSAgICAgICAgaWYgKCFhdChpKS52aXNpdFdlYWsodm0pKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
SlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuaAkocmV2
aXNpb24gMTg5NDkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3Jw
aGljR2V0QnlJZExpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMzMgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFBv
bHltb3JwaGljR2V0QnlJZExpc3RfaAotI2RlZmluZSBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0X2gK
LQotI2lmIEVOQUJMRShKSVQpCi0KLSNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCi0jaW5jbHVkZSAi
TWFjcm9Bc3NlbWJsZXIuaCIKLSNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5o
IgotI2luY2x1ZGUgIk9wY29kZS5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgotI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENvZGVCbG9jazsKLXN0
cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbzsKLQotY2xhc3MgR2V0QnlJZEFjY2VzcyB7Ci1wdWJsaWM6
Ci0gICAgZW51bSBBY2Nlc3NUeXBlIHsKLSAgICAgICAgSW52YWxpZCwKLSAgICAgICAgU2ltcGxl
SW5saW5lLCAvLyBUaGlzIGlzIHRoZSBwYXRjaGVkIGlubGluZSBhY2Nlc3MuCi0gICAgICAgIFNp
bXBsZVN0dWIsIC8vIFRoaXMgaXMgYSBzdHViLgotICAgICAgICBXYXRjaGVkU3R1YiwKLSAgICAg
ICAgR2V0dGVyLAotICAgICAgICBDdXN0b21HZXR0ZXIsCi0gICAgICAgIFNpbXBsZU1pc3MsCi0g
ICAgfTsKLSAgICAKLSAgICBHZXRCeUlkQWNjZXNzKCkKLSAgICAgICAgOiBtX3R5cGUoSW52YWxp
ZCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIEdldEJ5SWRBY2Nlc3MoCi0gICAgICAgIFZNJiwg
SlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4sIFN0
cnVjdHVyZSosCi0gICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiA9IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCkpOwotICAgIAotICAgIH5HZXRCeUlkQWNjZXNzKCk7
Ci0gICAgCi0gICAgc3RhdGljIEdldEJ5SWRBY2Nlc3MgZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFN0
cnVjdHVyZVN0dWJJbmZvJik7Ci0gICAgCi0gICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJu
IG1fdHlwZSAhPSBJbnZhbGlkOyB9Ci0gICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVy
biAhaXNTZXQoKTsgfQotICAgIAotICAgIEFjY2Vzc1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdHlwZTsgfQotICAgIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyByZXR1
cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7IH0KLSAgICAKLSAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7
IH0KLSAgICAKLSAgICBKSVRTdHViUm91dGluZSogc3R1YlJvdXRpbmUoKSBjb25zdAotICAgIHsK
LSAgICAgICAgQVNTRVJUKGlzU2V0KCkpOwotICAgICAgICByZXR1cm4gbV9zdHViUm91dGluZS5n
ZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBkb2VzQ2FsbHMoKSBjb25zdCB7IHJldHVybiB0
eXBlKCkgPT0gR2V0dGVyIHx8IHR5cGUoKSA9PSBDdXN0b21HZXR0ZXI7IH0KLSAgICAKLSAgICBi
b29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBD
b2RlQmxvY2s7Ci0gICAgCi0gICAgQWNjZXNzVHlwZSBtX3R5cGU7Ci0gICAgV3JpdGVCYXJyaWVy
PFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7Ci0gICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQg
bV9jb25kaXRpb25TZXQ7Ci0gICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBtX3N0dWJSb3V0aW5l
OwotfTsKLQotY2xhc3MgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCB7Ci0gICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgLy8gRWl0aGVyIGNyZWF0ZXMgYSBuZXcgcG9seW1v
cnBoaWMgZ2V0IGxpc3QsIG9yIHJldHVybnMgdGhlIG9uZSB0aGF0IGlzIGFscmVhZHkgaW4KLSAg
ICAvLyBwbGFjZS4KLSAgICBzdGF0aWMgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogZnJvbShTdHJ1
Y3R1cmVTdHViSW5mbyYpOwotICAgIAotICAgIH5Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0KCk7Ci0g
ICAgCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN1cnJlbnRTbG93UGF0aFRhcmdldChTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pIGNvbnN0OwotICAgIAotICAgIHZvaWQgYWRkQWNjZXNz
KGNvbnN0IEdldEJ5SWRBY2Nlc3MmKTsKLSAgICAKLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7
IHJldHVybiBtX2xpc3QuaXNFbXB0eSgpOyB9Ci0gICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbGlzdC5zaXplKCk7IH0KLSAgICBib29sIGlzRnVsbCgpIGNvbnN0OwotICAgIGJv
b2wgaXNBbG1vc3RGdWxsKCkgY29uc3Q7IC8vIFRydWUgaWYgYWRkaW5nIGFuIGVsZW1lbnQgd291
bGQgbWFrZSBpc0Z1bGwoKSB0cnVlLgotICAgIGNvbnN0IEdldEJ5SWRBY2Nlc3MmIGF0KHVuc2ln
bmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdFtpXTsgfQotICAgIGNvbnN0IEdldEJ5SWRBY2Nl
c3MmIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9saXN0W2ldOyB9Ci0g
ICAgCi0gICAgYm9vbCBkaWRTZWxmUGF0Y2hpbmcoKSBjb25zdDsgLy8gQXJlIGFueSBvZiB0aGUg
YWNjZXNzZXMgU2ltcGxlSW5saW5lPwotICAgIAotICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgY29u
c3Q7Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKLSAgICAKLSAgICBQ
b2x5bW9ycGhpY0dldEJ5SWRMaXN0KFN0cnVjdHVyZVN0dWJJbmZvJik7Ci0gICAgCi0gICAgVmVj
dG9yPEdldEJ5SWRBY2Nlc3MsIDI+IG1fbGlzdDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwot
Ci0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQotI2VuZGlmIC8vIFBvbHltb3JwaGljR2V0QnlJZExp
c3RfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQ
dXRCeUlkTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwCShyZXZpc2lvbiAxODk0OTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTU2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIs
IDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlBvbHltb3JwaGljUHV0QnlJZExpc3QuaCIKLQotI2lmIEVOQUJMRShKSVQpCi0KLSNp
bmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotUHV0QnlJ
ZEFjY2VzcyBQdXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0dXJlU3R1YkluZm8oU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvKQotewotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBpbml0aWFsU2xv
d1BhdGggPQotICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNl
dChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKLSAgICAKLSAgICBQdXRCeUlk
QWNjZXNzIHJlc3VsdDsKLSAgICAKLSAgICBzd2l0Y2ggKHN0dWJJbmZvLmFjY2Vzc1R5cGUpIHsK
LSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFjZToKLSAgICAgICAgcmVzdWx0Lm1fdHlw
ZSA9IFJlcGxhY2U7Ci0gICAgICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZS5jb3B5RnJvbShzdHVi
SW5mby51LnB1dEJ5SWRSZXBsYWNlLmJhc2VPYmplY3RTdHJ1Y3R1cmUpOwotICAgICAgICByZXN1
bHQubV9zdHViUm91dGluZSA9IEpJVFN0dWJSb3V0aW5lOjpjcmVhdGVTZWxmTWFuYWdlZFJvdXRp
bmUoaW5pdGlhbFNsb3dQYXRoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgIGNhc2Ug
YWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdDoKLSAgICBjYXNlIGFjY2Vzc19wdXRf
YnlfaWRfdHJhbnNpdGlvbl9ub3JtYWw6Ci0gICAgICAgIHJlc3VsdC5tX3R5cGUgPSBUcmFuc2l0
aW9uOwotICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuY29weUZyb20oc3R1YkluZm8udS5w
dXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZSk7Ci0gICAgICAgIHJlc3VsdC5tX25l
d1N0cnVjdHVyZS5jb3B5RnJvbShzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVy
ZSk7Ci0gICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0OjphZG9wdFJhd1BvaW50ZXIoCi0gICAgICAgICAgICBzdHViSW5mby51LnB1dEJ5SWRU
cmFuc2l0aW9uLnJhd0NvbmRpdGlvblNldCk7Ci0gICAgICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5l
ID0gc3R1YkluZm8uc3R1YlJvdXRpbmU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAKLSAgICBk
ZWZhdWx0OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLSAg
ICAKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1ib29sIFB1dEJ5SWRBY2Nlc3M6OnZpc2l0V2Vh
ayhWTSYgdm0pIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2NvbmRpdGlvblNldC5hcmVTdGlsbExpdmUo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIHN3aXRjaCAobV90eXBlKSB7Ci0g
ICAgY2FzZSBSZXBsYWNlOgotICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fb2xkU3RydWN0
dXJlLmdldCgpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBUcmFuc2l0aW9uOgotICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fb2xkU3Ry
dWN0dXJlLmdldCgpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFI
ZWFwOjppc01hcmtlZChtX25ld1N0cnVjdHVyZS5nZXQoKSkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU2V0dGVyOgotICAgIGNhc2UgQ3VzdG9t
U2V0dGVyOgotICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fb2xkU3RydWN0dXJlLmdldCgp
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLSAgICBpZiAoIW1fc3R1YlJvdXRpbmUtPnZpc2l0V2Vhayh2bSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotUG9seW1vcnBoaWNQ
dXRCeUlkTGlzdDo6UG9seW1vcnBoaWNQdXRCeUlkTGlzdCgKLSAgICBQdXRLaW5kIHB1dEtpbmQs
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLSAgICA6IG1fa2luZChwdXRLaW5kKQotewot
ICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlICE9IGFjY2Vzc191bnNldCkKLSAgICAgICAgbV9s
aXN0LmFwcGVuZChQdXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0dXJlU3R1YkluZm8oc3R1YkluZm8p
KTsKLX0KLQotUG9seW1vcnBoaWNQdXRCeUlkTGlzdCogUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6
ZnJvbSgKLSAgICBQdXRLaW5kIHB1dEtpbmQsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykK
LXsKLSAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfcHV0X2J5X2lkX2xpc3Qp
Ci0gICAgICAgIHJldHVybiBzdHViSW5mby51LnB1dEJ5SWRMaXN0Lmxpc3Q7Ci0gICAgCi0gICAg
QVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlCi0g
ICAgICAgIHx8IHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0
aW9uX25vcm1hbAotICAgICAgICB8fCBzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19wdXRf
YnlfaWRfdHJhbnNpdGlvbl9kaXJlY3QKLSAgICAgICAgfHwgc3R1YkluZm8uYWNjZXNzVHlwZSA9
PSBhY2Nlc3NfdW5zZXQpOwotICAgIAotICAgIFBvbHltb3JwaGljUHV0QnlJZExpc3QqIHJlc3Vs
dCA9Ci0gICAgICAgIG5ldyBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KHB1dEtpbmQsIHN0dWJJbmZv
KTsKLSAgICAKLSAgICBzdHViSW5mby5pbml0UHV0QnlJZExpc3QocmVzdWx0KTsKLSAgICAKLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotCi1Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojp+UG9seW1vcnBo
aWNQdXRCeUlkTGlzdCgpIHsgfQotCi1ib29sIFBvbHltb3JwaGljUHV0QnlJZExpc3Q6OmlzRnVs
bCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHNpemUoKSA8PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hF
X1NJWkUpOwotICAgIHJldHVybiBzaXplKCkgPT0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpF
OwotfQotCi1ib29sIFBvbHltb3JwaGljUHV0QnlJZExpc3Q6OmlzQWxtb3N0RnVsbCgpIGNvbnN0
Ci17Ci0gICAgQVNTRVJUKHNpemUoKSA8PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpOwot
ICAgIHJldHVybiBzaXplKCkgPj0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIC0gMTsKLX0K
LQotdm9pZCBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0OjphZGRBY2Nlc3MoY29uc3QgUHV0QnlJZEFj
Y2VzcyYgcHV0QnlJZEFjY2VzcykKLXsKLSAgICBBU1NFUlQoIWlzRnVsbCgpKTsKLSAgICAvLyBN
YWtlIHN1cmUgdGhhdCB0aGUgcmVzaXppbmcgb3B0aW1pemVzIGZvciBzcGFjZSwgbm90IHRpbWUu
Ci0gICAgbV9saXN0LnJlc2l6ZVRvRml0KG1fbGlzdC5zaXplKCkgKyAxKTsKLSAgICBtX2xpc3Qu
bGFzdCgpID0gcHV0QnlJZEFjY2VzczsKLX0KLQotYm9vbCBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0
Ojp2aXNpdFdlYWsoVk0mIHZtKSBjb25zdAotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzaXplKCk7ICsraSkgewotICAgICAgICBpZiAoIWF0KGkpLnZpc2l0V2Vhayh2bSkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi19IC8v
IG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0
LmgJKHJldmlzaW9uIDE4OTQ5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
b2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMjE2ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2lmbmRlZiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0X2gKLSNkZWZpbmUgUG9seW1vcnBoaWNQ
dXRCeUlkTGlzdF9oCi0KLSNpZiBFTkFCTEUoSklUKQotCi0jaW5jbHVkZSAiQ29kZU9yaWdpbi5o
IgotI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCi0jaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQuaCIKLSNpbmNsdWRlICJPcGNvZGUuaCIKLSNpbmNsdWRlICJQdXRLaW5kLmgi
Ci0jaW5jbHVkZSAiUHV0UHJvcGVydHlTbG90LmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlLmgiCi0j
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgQ29kZUJs
b2NrOwotc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvOwotCi1jbGFzcyBQdXRCeUlkQWNjZXNzIHsK
LXB1YmxpYzoKLSAgICBlbnVtIEFjY2Vzc1R5cGUgewotICAgICAgICBJbnZhbGlkLAotICAgICAg
ICBUcmFuc2l0aW9uLAotICAgICAgICBSZXBsYWNlLAotICAgICAgICBTZXR0ZXIsCi0gICAgICAg
IEN1c3RvbVNldHRlcgotICAgIH07Ci0gICAgCi0gICAgUHV0QnlJZEFjY2VzcygpCi0gICAgICAg
IDogbV90eXBlKEludmFsaWQpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgUHV0QnlJ
ZEFjY2VzcyB0cmFuc2l0aW9uKAotICAgICAgICBWTSYgdm0sCi0gICAgICAgIEpTQ2VsbCogb3du
ZXIsCi0gICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLAotICAgICAgICBTdHJ1Y3R1cmUq
IG5ld1N0cnVjdHVyZSwKLSAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQm
IGNvbmRpdGlvblNldCwKLSAgICAgICAgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJv
dXRpbmUpCi0gICAgewotICAgICAgICBQdXRCeUlkQWNjZXNzIHJlc3VsdDsKLSAgICAgICAgcmVz
dWx0Lm1fdHlwZSA9IFRyYW5zaXRpb247Ci0gICAgICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZS5z
ZXQodm0sIG93bmVyLCBvbGRTdHJ1Y3R1cmUpOwotICAgICAgICByZXN1bHQubV9uZXdTdHJ1Y3R1
cmUuc2V0KHZtLCBvd25lciwgbmV3U3RydWN0dXJlKTsKLSAgICAgICAgcmVzdWx0Lm1fY29uZGl0
aW9uU2V0ID0gY29uZGl0aW9uU2V0OwotICAgICAgICByZXN1bHQubV9jdXN0b21TZXR0ZXIgPSAw
OwotICAgICAgICByZXN1bHQubV9zdHViUm91dGluZSA9IHN0dWJSb3V0aW5lOwotICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHN0YXRpYyBQdXRCeUlkQWNjZXNzIHJlcGxhY2Uo
Ci0gICAgICAgIFZNJiB2bSwKLSAgICAgICAgSlNDZWxsKiBvd25lciwKLSAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsCi0gICAgICAgIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJS
b3V0aW5lKQotICAgIHsKLSAgICAgICAgUHV0QnlJZEFjY2VzcyByZXN1bHQ7Ci0gICAgICAgIHJl
c3VsdC5tX3R5cGUgPSBSZXBsYWNlOwotICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuc2V0
KHZtLCBvd25lciwgc3RydWN0dXJlKTsKLSAgICAgICAgcmVzdWx0Lm1fY3VzdG9tU2V0dGVyID0g
MDsKLSAgICAgICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBzdHViUm91dGluZTsKLSAgICAgICAg
cmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLQotICAgIHN0YXRpYyBQdXRCeUlkQWNjZXNzIHNldHRl
cigKLSAgICAgICAgVk0mIHZtLAotICAgICAgICBKU0NlbGwqIG93bmVyLAotICAgICAgICBBY2Nl
c3NUeXBlIGFjY2Vzc1R5cGUsCi0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLAotICAgICAg
ICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LAotICAgICAg
ICBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyBjdXN0b21TZXR0ZXIsCi0gICAgICAgIFBh
c3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lKQotICAgIHsKLSAgICAgICAgUkVM
RUFTRV9BU1NFUlQoYWNjZXNzVHlwZSA9PSBTZXR0ZXIgfHwgYWNjZXNzVHlwZSA9PSBDdXN0b21T
ZXR0ZXIpOwotICAgICAgICBQdXRCeUlkQWNjZXNzIHJlc3VsdDsKLSAgICAgICAgcmVzdWx0Lm1f
b2xkU3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHJlc3VsdC5t
X3R5cGUgPSBhY2Nlc3NUeXBlOwotICAgICAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25k
aXRpb25TZXQ7Ci0gICAgICAgIHJlc3VsdC5tX2N1c3RvbVNldHRlciA9IGN1c3RvbVNldHRlcjsK
LSAgICAgICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBzdHViUm91dGluZTsKLSAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIFB1dEJ5SWRBY2Nlc3MgZnJvbVN0
cnVjdHVyZVN0dWJJbmZvKFN0cnVjdHVyZVN0dWJJbmZvJik7Ci0gICAgCi0gICAgYm9vbCBpc1Nl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSAhPSBJbnZhbGlkOyB9Ci0gICAgYm9vbCBvcGVyYXRv
ciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQotICAgIAotICAgIEFjY2Vzc1R5cGUgdHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQotICAgIAotICAgIGJvb2wgaXNUcmFuc2l0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IFRyYW5zaXRpb247IH0KLSAgICBib29sIGlzUmVw
bGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBSZXBsYWNlOyB9Ci0gICAgYm9vbCBpc1Nl
dHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBTZXR0ZXI7IH0KLSAgICBib29sIGlzQ3Vz
dG9tKCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IEN1c3RvbVNldHRlcjsgfQotICAgIAotICAg
IFN0cnVjdHVyZSogb2xkU3RydWN0dXJlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIC8vIFVzaW5n
IHRoaXMgaW5zdGVhZCBvZiBpc1NldCgpIHRvIG1ha2UgdGhpcyBhc3NlcnRpb24gcm9idXN0IGFn
YWluc3QgdGhlIHBvc3NpYmlsaXR5Ci0gICAgICAgIC8vIG9mIGFkZGl0aW9uYWwgYWNjZXNzIHR5
cGVzIGJlaW5nIGFkZGVkLgotICAgICAgICBBU1NFUlQoaXNUcmFuc2l0aW9uKCkgfHwgaXNSZXBs
YWNlKCkgfHwgaXNTZXR0ZXIoKSB8fCBpc0N1c3RvbSgpKTsKLSAgICAgICAgCi0gICAgICAgIHJl
dHVybiBtX29sZFN0cnVjdHVyZS5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzUmVwbGFjZSgpIHx8IGlz
U2V0dGVyKCkgfHwgaXNDdXN0b20oKSk7Ci0gICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZS5n
ZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgQVNTRVJUKGlzVHJhbnNpdGlvbigpKTsKLSAgICAgICAgcmV0dXJuIG1f
bmV3U3RydWN0dXJlLmdldCgpOwotICAgIH0KLSAgICAKLSAgICBjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25T
ZXQ7IH0KLSAgICAKLSAgICBKSVRTdHViUm91dGluZSogc3R1YlJvdXRpbmUoKSBjb25zdAotICAg
IHsKLSAgICAgICAgQVNTRVJUKGlzVHJhbnNpdGlvbigpIHx8IGlzUmVwbGFjZSgpIHx8IGlzU2V0
dGVyKCkgfHwgaXNDdXN0b20oKSk7Ci0gICAgICAgIHJldHVybiBtX3N0dWJSb3V0aW5lLmdldCgp
OwotICAgIH0KLQotICAgIFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jIGN1c3RvbVNldHRl
cigpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaXNDdXN0b20oKSk7Ci0gICAgICAgIHJl
dHVybiBtX2N1c3RvbVNldHRlcjsKLSAgICB9Ci0KLSAgICBib29sIHZpc2l0V2VhayhWTSYpIGNv
bnN0OwotICAgIAotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOwotICAgIAot
ICAgIEFjY2Vzc1R5cGUgbV90eXBlOwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fb2xk
U3RydWN0dXJlOwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fbmV3U3RydWN0dXJlOwot
ICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OwotICAgIFB1dFBy
b3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jIG1fY3VzdG9tU2V0dGVyOwotICAgIFJlZlB0cjxKSVRT
dHViUm91dGluZT4gbV9zdHViUm91dGluZTsKLX07Ci0KLWNsYXNzIFBvbHltb3JwaGljUHV0QnlJ
ZExpc3QgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIC8vIEVp
dGhlciBjcmVhdGVzIGEgbmV3IHBvbHltb3JwaGljIHB1dCBsaXN0LCBvciByZXR1cm5zIHRoZSBv
bmUgdGhhdCBpcyBhbHJlYWR5Ci0gICAgLy8gaW4gcGxhY2UuCi0gICAgc3RhdGljIFBvbHltb3Jw
aGljUHV0QnlJZExpc3QqIGZyb20oUHV0S2luZCwgU3RydWN0dXJlU3R1YkluZm8mKTsKLSAgICAK
LSAgICB+UG9seW1vcnBoaWNQdXRCeUlkTGlzdCgpOwotICAgIAotICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBjdXJyZW50U2xvd1BhdGhUYXJnZXQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuIG1fbGlzdC5sYXN0KCkuc3R1YlJvdXRpbmUoKS0+Y29kZSgpLmNvZGUoKTsKLSAgICB9Ci0g
ICAgCi0gICAgdm9pZCBhZGRBY2Nlc3MoY29uc3QgUHV0QnlJZEFjY2VzcyYpOwotICAgIAotICAg
IGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5pc0VtcHR5KCk7IH0KLSAgICB1
bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9saXN0LnNpemUoKTsgfQotICAgIGJvb2wg
aXNGdWxsKCkgY29uc3Q7Ci0gICAgYm9vbCBpc0FsbW9zdEZ1bGwoKSBjb25zdDsgLy8gVHJ1ZSBp
ZiBhZGRpbmcgYW4gZWxlbWVudCB3b3VsZCBtYWtlIGlzRnVsbCgpIHRydWUuCi0gICAgY29uc3Qg
UHV0QnlJZEFjY2VzcyYgYXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9saXN0W2ldOyB9
Ci0gICAgY29uc3QgUHV0QnlJZEFjY2VzcyYgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBjb25zdCB7
IHJldHVybiBtX2xpc3RbaV07IH0KLSAgICAKLSAgICBQdXRLaW5kIGtpbmQoKSBjb25zdCB7IHJl
dHVybiBtX2tpbmQ7IH0KLSAgICAKLSAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OwotICAg
IAotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOwotICAgIAotICAgIC8vIElu
aXRpYWxpemUgZnJvbSBhIHN0dWIgaW5mbzsgdGhpcyB3aWxsIHBsYWNlIG9uZSBlbGVtZW50IGlu
IHRoZSBsaXN0IGFuZCBpdCB3aWxsCi0gICAgLy8gYmUgY3JlYXRlZCBieSBjb252ZXJ0aW5nIHRo
ZSBzdHViIGluZm8ncyBwdXQgYnkgaWQgYWNjZXNzIGluZm9ybWF0aW9uIGludG8gb3VyCi0gICAg
Ly8gUHV0QnlJZEFjY2Vzcy4KLSAgICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KFB1dEtpbmQsIFN0
cnVjdHVyZVN0dWJJbmZvJik7Ci0KLSAgICBWZWN0b3I8UHV0QnlJZEFjY2VzcywgMj4gbV9saXN0
OwotICAgIFB1dEtpbmQgbV9raW5kOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRp
ZiAvLyBFTkFCTEUoSklUKQotCi0jZW5kaWYgLy8gUG9seW1vcnBoaWNQdXRCeUlkTGlzdF9oCi0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1
cy5jcHAJKHJldmlzaW9uIDE4OTQ5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9QdXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTMgKzI2LDEyIEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUHV0QnlJZFN0YXR1cy5oIgogCi0jaW5jbHVk
ZSAiQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIK
ICNpbmNsdWRlICJDb21wbGV4R2V0U3RhdHVzLmgiCiAjaW5jbHVkZSAiTExJbnREYXRhLmgiCiAj
aW5jbHVkZSAiTG93TGV2ZWxJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
LSNpbmNsdWRlICJQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgiCisjaW5jbHVkZSAiUG9seW1vcnBo
aWNBY2Nlc3MuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVD
aGFpbi5oIgogI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgpAQCAtMTU0LDY2ICsxNTMsNDMgQEAg
UHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgIGlmICghc3R1Yklu
Zm8tPnNlZW4pCiAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKCk7CiAgICAgCi0gICAgc3dp
dGNoIChzdHViSW5mby0+YWNjZXNzVHlwZSkgewotICAgIGNhc2UgYWNjZXNzX3Vuc2V0OgorICAg
IHN3aXRjaCAoc3R1YkluZm8tPmNhY2hlVHlwZSkgeworICAgIGNhc2UgQ2FjaGVUeXBlOjpVbnNl
dDoKICAgICAgICAgLy8gSWYgdGhlIEpJVCBzYXcgaXQgYnV0IGRpZG4ndCBvcHRpbWl6ZSBpdCwg
dGhlbiBhc3N1bWUgdGhhdCB0aGlzIHRha2VzIHNsb3cgcGF0aC4KICAgICAgICAgcmV0dXJuIFB1
dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgICAgIAotICAgIGNhc2UgYWNjZXNzX3B1
dF9ieV9pZF9yZXBsYWNlOiB7CisgICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOiB7
CiAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9Ci0gICAgICAgICAgICBzdHViSW5mby0+
dS5wdXRCeUlkUmVwbGFjZS5iYXNlT2JqZWN0U3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlk
KTsKKyAgICAgICAgICAgIHN0dWJJbmZvLT51LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUt
PmdldENvbmN1cnJlbnRseSh1aWQpOwogICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQp
KSB7CiAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoCi0gICAgICAg
ICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZS5n
ZXQoKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBzdHViSW5mby0+dS5ieUlkU2VsZi5iYXNl
T2JqZWN0U3RydWN0dXJlLmdldCgpLCBvZmZzZXQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVy
biBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgIH0KICAgICAgICAgCi0gICAgY2Fz
ZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgotICAgIGNhc2UgYWNjZXNzX3B1
dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdDogewotICAgICAgICBBU1NFUlQoc3R1YkluZm8tPnUu
cHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50
U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQg
PSAKLSAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS0+
Z2V0Q29uY3VycmVudGx5KHVpZCk7Ci0gICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkp
IHsKLSAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldCA9
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Ojpmcm9tUmF3UG9pbnRlcigKLSAgICAgICAgICAg
ICAgICBzdHViSW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQpOwotICAg
ICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAg
ICAgICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCi0gICAgICAgICAgICAg
ICAgc3R1YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUuZ2V0KCks
Ci0gICAgICAgICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJl
LmdldCgpLAotICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCwgb2Zmc2V0KTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICB9Ci0g
ICAgICAgIAotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9saXN0OiB7Ci0gICAgICAgIFBvbHlt
b3JwaGljUHV0QnlJZExpc3QqIGxpc3QgPSBzdHViSW5mby0+dS5wdXRCeUlkTGlzdC5saXN0Owor
ICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOiB7CisgICAgICAgIFBvbHltb3JwaGljQWNjZXNzKiBs
aXN0ID0gc3R1YkluZm8tPnUuc3R1YjsKICAgICAgICAgCiAgICAgICAgIFB1dEJ5SWRTdGF0dXMg
cmVzdWx0OwogICAgICAgICByZXN1bHQubV9zdGF0ZSA9IFNpbXBsZTsKICAgICAgICAgCiAgICAg
ICAgIFN0YXRlIHNsb3dQYXRoU3RhdGUgPSBUYWtlc1Nsb3dQYXRoOwogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGNvbnN0
IFB1dEJ5SWRBY2Nlc3MmIGFjY2VzcyA9IGxpc3QtPmF0KGkpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBzd2l0Y2ggKGFjY2Vzcy50eXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgUHV0QnlJ
ZEFjY2Vzczo6U2V0dGVyOgotICAgICAgICAgICAgY2FzZSBQdXRCeUlkQWNjZXNzOjpDdXN0b21T
ZXR0ZXI6CisgICAgICAgICAgICBjb25zdCBBY2Nlc3NDYXNlJiBhY2Nlc3MgPSBsaXN0LT5hdChp
KTsKKyAgICAgICAgICAgIGlmIChhY2Nlc3MuZG9lc0NhbGxzKCkpCiAgICAgICAgICAgICAgICAg
c2xvd1BhdGhTdGF0ZSA9IE1ha2VzQ2FsbHM7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlz
dC0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGNvbnN0IFB1dEJ5SWRBY2Nlc3MmIGFjY2Vz
cyA9IGxpc3QtPmF0KGkpOworICAgICAgICAgICAgY29uc3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0g
bGlzdC0+YXQoaSk7CisgICAgICAgICAgICBpZiAoYWNjZXNzLnZpYVByb3h5KCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSk7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50IHZhcmlhbnQ7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIHN3aXRjaCAoYWNjZXNzLnR5cGUoKSkgewotICAgICAgICAgICAgY2FzZSBQdXRC
eUlkQWNjZXNzOjpSZXBsYWNlOiB7CisgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OlJlcGxh
Y2U6IHsKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFjY2Vzcy5zdHJ1
Y3R1cmUoKTsKICAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1
cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOwogICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZE9m
ZnNldChvZmZzZXQpKQpAQCAtMjIyLDcgKzE5OCw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0
YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgUHV0QnlJZEFjY2Vzczo6VHJhbnNp
dGlvbjogeworICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpUcmFuc2l0aW9uOiB7CiAgICAg
ICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0KICAgICAgICAgICAgICAgICAgICAg
YWNjZXNzLm5ld1N0cnVjdHVyZSgpLT5nZXRDb25jdXJyZW50bHkodWlkKTsKICAgICAgICAgICAg
ICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKQEAgLTIzMSwxMSArMjA3LDExIEBAIFB1
dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAgICAgICBp
ZiAoIWNvbmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSk7CiAgICAgICAgICAg
ICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAotICAgICAgICAgICAg
ICAgICAgICBhY2Nlc3Mub2xkU3RydWN0dXJlKCksIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgY29u
ZGl0aW9uU2V0LCBvZmZzZXQpOworICAgICAgICAgICAgICAgICAgICBhY2Nlc3Muc3RydWN0dXJl
KCksIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgY2FzZSBQdXRCeUlkQWNjZXNzOjpTZXR0ZXI6IHsKKyAgICAgICAgICAgIGNhc2UgQWNj
ZXNzQ2FzZTo6U2V0dGVyOiB7CiAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBhY2Nlc3Muc3RydWN0dXJlKCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
Q29tcGxleEdldFN0YXR1cyBjb21wbGV4R2V0U3RhdHVzID0gQ29tcGxleEdldFN0YXR1czo6Y29t
cHV0ZUZvcigKQEAgLTI0OSwxMiArMjI1LDEyIEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1
czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMo
c2xvd1BhdGhTdGF0ZSk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNh
c2UgQ29tcGxleEdldFN0YXR1czo6SW5saW5lYWJsZTogewotICAgICAgICAgICAgICAgICAgICBB
Y2Nlc3NvckNhbGxKSVRTdHViUm91dGluZSogc3R1YiA9IHN0YXRpY19jYXN0PEFjY2Vzc29yQ2Fs
bEpJVFN0dWJSb3V0aW5lKj4oCi0gICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3Muc3R1YlJv
dXRpbmUoKSk7CisgICAgICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZv
ID0gYWNjZXNzLmNhbGxMaW5rSW5mbygpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoY2Fs
bExpbmtJbmZvKTsKICAgICAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5r
U3RhdHVzPiBjYWxsTGlua1N0YXR1cyA9CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1h
a2VfdW5pcXVlPENhbGxMaW5rU3RhdHVzPigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
YWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbG9ja2VyLCBwcm9maWxlZEJsb2NrLCAqc3R1Yi0+bV9jYWxsTGlua0luZm8sIGNhbGxFeGl0
U2l0ZURhdGEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9ja2VyLCBwcm9m
aWxlZEJsb2NrLCAqY2FsbExpbmtJbmZvLCBjYWxsRXhpdFNpdGVEYXRhKSk7CiAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6
OnNldHRlcigKICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgY29tcGxleEdldFN0
YXR1cy5vZmZzZXQoKSwgY29tcGxleEdldFN0YXR1cy5jb25kaXRpb25TZXQoKSwKQEAgLTI2Myw3
ICsyMzksNyBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICBjYXNlIFB1dEJ5SWRBY2Nlc3M6OkN1c3RvbVNldHRlcjoKKyAgICAgICAgICAgIGNh
c2UgQWNjZXNzQ2FzZTo6Q3VzdG9tU2V0dGVyOgogICAgICAgICAgICAgICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKE1ha2VzQ2FsbHMpOwogCiAgICAgICAgICAgICBkZWZhdWx0OgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8u
Y3BwCShyZXZpc2lvbiAxODk0OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U3RydWN0dXJlU3R1YkluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw4ICsyNyw3IEBACiAj
aW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKIAogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCi0j
aW5jbHVkZSAiUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oIgotI2luY2x1ZGUgIlBvbHltb3JwaGlj
UHV0QnlJZExpc3QuaCIKKyNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgogI2luY2x1ZGUg
IlJlcGF0Y2guaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0zNiwzNyArMzUsNTMgQEAgbmFtZXNw
YWNlIEpTQyB7CiAjaWYgRU5BQkxFKEpJVCkKIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmRlcmVm
KCkKIHsKLSAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKLSAgICBjYXNlIGFjY2Vzc19nZXRfYnlf
aWRfbGlzdDogewotICAgICAgICBkZWxldGUgdS5nZXRCeUlkTGlzdC5saXN0OwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9saXN0OgotICAgICAgICBk
ZWxldGUgdS5wdXRCeUlkTGlzdC5saXN0OworICAgIHN3aXRjaCAoY2FjaGVUeXBlKSB7CisgICAg
Y2FzZSBDYWNoZVR5cGU6OlN0dWI6CisgICAgICAgIGRlbGV0ZSB1LnN0dWI7CiAgICAgICAgIHJl
dHVybjsKLSAgICBjYXNlIGFjY2Vzc19pbl9saXN0OiB7Ci0gICAgICAgIFBvbHltb3JwaGljQWNj
ZXNzU3RydWN0dXJlTGlzdCogcG9seW1vcnBoaWNTdHJ1Y3R1cmVzID0gdS5pbkxpc3Quc3RydWN0
dXJlTGlzdDsKLSAgICAgICAgZGVsZXRlIHBvbHltb3JwaGljU3RydWN0dXJlczsKKyAgICBjYXNl
IENhY2hlVHlwZTo6VW5zZXQ6CisgICAgY2FzZSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxmOgorICAg
IGNhc2UgQ2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZToKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWw6Ci0gICAgY2FzZSBh
Y2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0OgotICAgICAgICBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldDo6YWRvcHRSYXdQb2ludGVyKHUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29u
ZGl0aW9uU2V0KTsKLSAgICAgICAgdS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQg
PSBudWxscHRyOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3Nl
bGY6Ci0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2U6Ci0gICAgY2FzZSBhY2Nlc3Nf
dW5zZXQ6Ci0gICAgICAgIC8vIFRoZXNlIGluc3RydWN0aW9ucyBkb24ndCBoYXZlIHRvIHJlbGVh
c2UgYW55IGFsbG9jYXRlZCBtZW1vcnkKLSAgICAgICAgcmV0dXJuOwotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQorCisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIFN0cnVj
dHVyZVN0dWJJbmZvOjphZGRBY2Nlc3NDYXNlKAorICAgIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2Fz
ZT4gYWNjZXNzQ2FzZSkKK3sKKyAgICBpZiAoIWFjY2Vzc0Nhc2UpCisgICAgICAgIHJldHVybiBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKKyAgICAKKyAgICBpZiAoY2FjaGVUeXBlID09IENhY2hl
VHlwZTo6U3R1YikKKyAgICAgICAgcmV0dXJuIHUuc3R1Yi0+cmVnZW5lcmF0ZVdpdGhDYXNlKHZt
LCBjb2RlQmxvY2ssICp0aGlzLCBpZGVudCwgc3RkOjptb3ZlKGFjY2Vzc0Nhc2UpKTsKKworICAg
IHN0ZDo6dW5pcXVlX3B0cjxQb2x5bW9ycGhpY0FjY2Vzcz4gYWNjZXNzID0gc3RkOjptYWtlX3Vu
aXF1ZTxQb2x5bW9ycGhpY0FjY2Vzcz4oKTsKKyAgICAKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVf
cHRyPEFjY2Vzc0Nhc2U+PiBhY2Nlc3NDYXNlczsKKyAgICAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
QWNjZXNzQ2FzZT4gcHJldmlvdXNDYXNlID0KKyAgICAgICAgQWNjZXNzQ2FzZTo6ZnJvbVN0cnVj
dHVyZVN0dWJJbmZvKHZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCAqdGhpcyk7Cisg
ICAgaWYgKHByZXZpb3VzQ2FzZSkKKyAgICAgICAgYWNjZXNzQ2FzZXMuYXBwZW5kKHN0ZDo6bW92
ZShwcmV2aW91c0Nhc2UpKTsKKworICAgIGFjY2Vzc0Nhc2VzLmFwcGVuZChzdGQ6Om1vdmUoYWNj
ZXNzQ2FzZSkpOworCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJlc3VsdCA9CisgICAgICAg
IGFjY2Vzcy0+cmVnZW5lcmF0ZVdpdGhDYXNlcyh2bSwgY29kZUJsb2NrLCAqdGhpcywgaWRlbnQs
IHN0ZDo6bW92ZShhY2Nlc3NDYXNlcykpOworCisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJl
dHVybiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKKworICAgIGNhY2hlVHlwZSA9IENhY2hlVHlw
ZTo6U3R1YjsKKyAgICB1LnN0dWIgPSBhY2Nlc3MucmVsZWFzZSgpOworICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnJlc2V0KENvZGVCbG9jayogY29kZUJs
b2NrKQogewotICAgIGlmIChhY2Nlc3NUeXBlID09IGFjY2Vzc191bnNldCkKKyAgICBpZiAoY2Fj
aGVUeXBlID09IENhY2hlVHlwZTo6VW5zZXQpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBp
ZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CkBAIC03NCw2MCArODksMzggQEAgdm9pZCBTdHJ1
Y3R1cmVTdHViSW5mbzo6cmVzZXQoQ29kZUJsb2NrKgogICAgICAgICAvLyBvZiB0aGUgQ29kZUJs
b2NrLgogICAgICAgICBkYXRhTG9nKCJDbGVhcmluZyBzdHJ1Y3R1cmUgY2FjaGUgKGtpbmQgIiwg
c3RhdGljX2Nhc3Q8aW50PihhY2Nlc3NUeXBlKSwgIikgaW4gIiwgUmF3UG9pbnRlcihjb2RlQmxv
Y2spLCAiLlxuIik7CiAgICAgfQotICAgIAotICAgIGlmIChpc0dldEJ5SWRBY2Nlc3Moc3RhdGlj
X2Nhc3Q8QWNjZXNzVHlwZT4oYWNjZXNzVHlwZSkpKQorCisgICAgc3dpdGNoIChhY2Nlc3NUeXBl
KSB7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXQ6CiAgICAgICAgIHJlc2V0R2V0QnlJRChjb2Rl
QmxvY2ssICp0aGlzKTsKLSAgICBlbHNlIGlmIChpc1B1dEJ5SWRBY2Nlc3Moc3RhdGljX2Nhc3Q8
QWNjZXNzVHlwZT4oYWNjZXNzVHlwZSkpKQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vz
c1R5cGU6OlB1dDoKICAgICAgICAgcmVzZXRQdXRCeUlEKGNvZGVCbG9jaywgKnRoaXMpOwotICAg
IGVsc2UgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0luQWNjZXNzKHN0YXRpY19jYXN0PEFj
Y2Vzc1R5cGU+KGFjY2Vzc1R5cGUpKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNz
VHlwZTo6SW46CiAgICAgICAgIHJlc2V0SW4oY29kZUJsb2NrLCAqdGhpcyk7CisgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICAKICAgICBkZXJlZigpOwotICAgIGFjY2Vzc1R5cGUgPSBhY2Nlc3Nf
dW5zZXQ7Ci0gICAgc3R1YlJvdXRpbmUgPSBudWxscHRyOwotICAgIHdhdGNocG9pbnRzID0gbnVs
bHB0cjsKKyAgICBjYWNoZVR5cGUgPSBDYWNoZVR5cGU6OlVuc2V0OwogfQogCiB2b2lkIFN0cnVj
dHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuY2VzKENvZGVCbG9jayogY29kZUJsb2NrKQog
ewogICAgIFZNJiB2bSA9ICpjb2RlQmxvY2stPnZtKCk7Ci0gICAgCi0gICAgc3dpdGNoIChhY2Nl
c3NUeXBlKSB7Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGY6Ci0gICAgICAgIGlmIChI
ZWFwOjppc01hcmtlZCh1LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCkpKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIGFjY2Vzc19nZXRf
YnlfaWRfbGlzdDogewotICAgICAgICBpZiAodS5nZXRCeUlkTGlzdC5saXN0LT52aXNpdFdlYWso
dm0pKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2Fz
ZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgotICAgIGNhc2UgYWNjZXNzX3B1
dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdDoKLSAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKHUu
cHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUuZ2V0KCkpCi0gICAgICAgICAgICAm
JiBIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5nZXQoKSkKLSAg
ICAgICAgICAgICYmIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Ojpmcm9tUmF3UG9pbnRlcih1
LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0NvbmRpdGlvblNldCkuYXJlU3RpbGxMaXZlKCkpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9p
ZF9yZXBsYWNlOgotICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQodS5wdXRCeUlkUmVwbGFjZS5i
YXNlT2JqZWN0U3RydWN0dXJlLmdldCgpKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX2xpc3Q6Ci0gICAgICAgIGlmICh1LnB1
dEJ5SWRMaXN0Lmxpc3QtPnZpc2l0V2Vhayh2bSkpCisKKyAgICBzd2l0Y2ggKGNhY2hlVHlwZSkg
eworICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKKyAgICBjYXNlIENhY2hlVHlwZTo6
UHV0QnlJZFJlcGxhY2U6CisgICAgICAgIGlmIChIZWFwOjppc01hcmtlZCh1LmJ5SWRTZWxmLmJh
c2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBi
cmVhazsKLSAgICBjYXNlIGFjY2Vzc19pbl9saXN0OiB7Ci0gICAgICAgIFBvbHltb3JwaGljQWNj
ZXNzU3RydWN0dXJlTGlzdCogcG9seW1vcnBoaWNTdHJ1Y3R1cmVzID0gdS5pbkxpc3Quc3RydWN0
dXJlTGlzdDsKLSAgICAgICAgaWYgKHBvbHltb3JwaGljU3RydWN0dXJlcy0+dmlzaXRXZWFrKHUu
aW5MaXN0Lmxpc3RTaXplKSkKKyAgICBjYXNlIENhY2hlVHlwZTo6U3R1YjoKKyAgICAgICAgaWYg
KHUuc3R1Yi0+dmlzaXRXZWFrKHZtKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgYnJl
YWs7Ci0gICAgfQogICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8vIFRoZSByZXN0IG9mIHRoZSBpbnN0
cnVjdGlvbnMgZG9uJ3QgcmVxdWlyZSByZWZlcmVuY2VzLCBzbyB0aGVyZSBpcyBubyBuZWVkIHRv
Ci0gICAgICAgIC8vIGRvIGFueXRoaW5nLgogICAgICAgICByZXR1cm47CiAgICAgfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1Yklu
Zm8uaAkocmV2aXNpb24gMTg5NDkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1N0cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICNp
bmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgogI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0LmgiCiAjaW5jbHVkZSAiT3Bjb2RlLmgiCi0jaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nl
c3NTdHJ1Y3R1cmVMaXN0LmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKICNpbmNs
dWRlICJSZWdpc3RlclNldC5oIgogI2luY2x1ZGUgIlNwaWxsUmVnaXN0ZXJzTW9kZS5oIgogI2lu
Y2x1ZGUgIlN0cnVjdHVyZS5oIgpAQCAtNDIsNTcgKzQyLDI1IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAjaWYgRU5BQkxFKEpJVCkKIAotY2xhc3MgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDsKLWNsYXNz
IFBvbHltb3JwaGljUHV0QnlJZExpc3Q7CitjbGFzcyBQb2x5bW9ycGhpY0FjY2VzczsKIAotZW51
bSBBY2Nlc3NUeXBlIHsKLSAgICBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYsCi0gICAgYWNjZXNzX2dl
dF9ieV9pZF9saXN0LAotICAgIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWwsCi0g
ICAgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdCwKLSAgICBhY2Nlc3NfcHV0X2J5
X2lkX3JlcGxhY2UsCi0gICAgYWNjZXNzX3B1dF9ieV9pZF9saXN0LAotICAgIGFjY2Vzc191bnNl
dCwKLSAgICBhY2Nlc3NfaW5fbGlzdAorZW51bSBjbGFzcyBBY2Nlc3NUeXBlIDogaW50OF90IHsK
KyAgICBHZXQsCisgICAgUHV0LAorICAgIEluCiB9OwogCi1pbmxpbmUgYm9vbCBpc0dldEJ5SWRB
Y2Nlc3MoQWNjZXNzVHlwZSBhY2Nlc3NUeXBlKQotewotICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkg
ewotICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmOgotICAgIGNhc2UgYWNjZXNzX2dldF9i
eV9pZF9saXN0OgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotICAgIAotaW5saW5lIGJvb2wgaXNQdXRCeUlkQWNjZXNz
KEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSkKLXsKLSAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKLSAg
ICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWw6Ci0gICAgY2FzZSBhY2Nl
c3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0OgotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9p
ZF9yZXBsYWNlOgotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9saXN0OgotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQot
Ci1pbmxpbmUgYm9vbCBpc0luQWNjZXNzKEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSkKLXsKLSAgICBz
d2l0Y2ggKGFjY2Vzc1R5cGUpIHsKLSAgICBjYXNlIGFjY2Vzc19pbl9saXN0OgotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
fQorZW51bSBjbGFzcyBDYWNoZVR5cGUgOiBpbnQ4X3QgeworICAgIFVuc2V0LAorICAgIEdldEJ5
SWRTZWxmLAorICAgIFB1dEJ5SWRSZXBsYWNlLAorICAgIFN0dWIKK307CiAKIHN0cnVjdCBTdHJ1
Y3R1cmVTdHViSW5mbyB7Ci0gICAgU3RydWN0dXJlU3R1YkluZm8oKQotICAgICAgICA6IGFjY2Vz
c1R5cGUoYWNjZXNzX3Vuc2V0KQorICAgIFN0cnVjdHVyZVN0dWJJbmZvKEFjY2Vzc1R5cGUgYWNj
ZXNzVHlwZSkKKyAgICAgICAgOiBhY2Nlc3NUeXBlKGFjY2Vzc1R5cGUpCisgICAgICAgICwgY2Fj
aGVUeXBlKENhY2hlVHlwZTo6VW5zZXQpCiAgICAgICAgICwgc2VlbihmYWxzZSkKICAgICAgICAg
LCByZXNldEJ5R0MoZmFsc2UpCiAgICAgICAgICwgdG9va1Nsb3dQYXRoKGZhbHNlKQpAQCAtMTAw
LDUzICs2OCwzMSBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewogICAgIHsKICAgICB9CiAK
LSAgICB2b2lkIGluaXRHZXRCeUlkU2VsZihWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVy
ZSogYmFzZU9iamVjdFN0cnVjdHVyZSkKKyAgICB2b2lkIGluaXRHZXRCeUlkU2VsZihWTSYgdm0s
IEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSwgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0KQogICAgIHsKLSAgICAgICAgYWNjZXNzVHlwZSA9IGFjY2Vzc19nZXRfYnlf
aWRfc2VsZjsKLQotICAgICAgICB1LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuc2V0
KHZtLCBvd25lciwgYmFzZU9iamVjdFN0cnVjdHVyZSk7Ci0gICAgfQorICAgICAgICBjYWNoZVR5
cGUgPSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxmOwogCi0gICAgdm9pZCBpbml0R2V0QnlJZExpc3Qo
UG9seW1vcnBoaWNHZXRCeUlkTGlzdCogbGlzdCkKLSAgICB7Ci0gICAgICAgIGFjY2Vzc1R5cGUg
PSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3Q7Ci0gICAgICAgIHUuZ2V0QnlJZExpc3QubGlzdCA9IGxp
c3Q7CisgICAgICAgIHUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5zZXQodm0sIG93bmVy
LCBiYXNlT2JqZWN0U3RydWN0dXJlKTsKKyAgICAgICAgdS5ieUlkU2VsZi5vZmZzZXQgPSBvZmZz
ZXQ7CiAgICAgfQogCi0gICAgLy8gUHV0QnlJZCoKLQotICAgIHZvaWQgaW5pdFB1dEJ5SWRUcmFu
c2l0aW9uKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBwcmV2aW91c1N0cnVjdHVy
ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRp
dGlvblNldCwgYm9vbCBpc0RpcmVjdCkKKyAgICB2b2lkIGluaXRQdXRCeUlkUmVwbGFjZShWTSYg
dm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSwgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0KQogICAgIHsKLSAgICAgICAgaWYgKGlzRGlyZWN0KQotICAgICAgICAg
ICAgYWNjZXNzVHlwZSA9IGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5z
aXRpb25fbm9ybWFsOworICAgICAgICBjYWNoZVR5cGUgPSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBs
YWNlOwogCi0gICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUuc2V0
KHZtLCBvd25lciwgcHJldmlvdXNTdHJ1Y3R1cmUpOwotICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0
aW9uLnN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOwotICAgICAgICB1LnB1dEJ5
SWRUcmFuc2l0aW9uLnJhd0NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldC5yZWxlYXNlUmF3UG9p
bnRlcigpOworICAgICAgICB1LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuc2V0KHZtLCBv
d25lciwgYmFzZU9iamVjdFN0cnVjdHVyZSk7CisgICAgICAgIHUuYnlJZFNlbGYub2Zmc2V0ID0g
b2Zmc2V0OwogICAgIH0KIAotICAgIHZvaWQgaW5pdFB1dEJ5SWRSZXBsYWNlKFZNJiB2bSwgSlND
ZWxsKiBvd25lciwgU3RydWN0dXJlKiBiYXNlT2JqZWN0U3RydWN0dXJlKQotICAgIHsKLSAgICAg
ICAgYWNjZXNzVHlwZSA9IGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFjZTsKLSAgICAKLSAgICAgICAg
dS5wdXRCeUlkUmVwbGFjZS5iYXNlT2JqZWN0U3RydWN0dXJlLnNldCh2bSwgb3duZXIsIGJhc2VP
YmplY3RTdHJ1Y3R1cmUpOwotICAgIH0KLSAgICAgICAgCi0gICAgdm9pZCBpbml0UHV0QnlJZExp
c3QoUG9seW1vcnBoaWNQdXRCeUlkTGlzdCogbGlzdCkKLSAgICB7Ci0gICAgICAgIGFjY2Vzc1R5
cGUgPSBhY2Nlc3NfcHV0X2J5X2lkX2xpc3Q7Ci0gICAgICAgIHUucHV0QnlJZExpc3QubGlzdCA9
IGxpc3Q7Ci0gICAgfQotICAgIAotICAgIHZvaWQgaW5pdEluTGlzdChQb2x5bW9ycGhpY0FjY2Vz
c1N0cnVjdHVyZUxpc3QqIGxpc3QsIGludCBsaXN0U2l6ZSkKKyAgICB2b2lkIGluaXRTdHViKHN0
ZDo6dW5pcXVlX3B0cjxQb2x5bW9ycGhpY0FjY2Vzcz4gc3R1YikKICAgICB7Ci0gICAgICAgIGFj
Y2Vzc1R5cGUgPSBhY2Nlc3NfaW5fbGlzdDsKLSAgICAgICAgdS5pbkxpc3Quc3RydWN0dXJlTGlz
dCA9IGxpc3Q7Ci0gICAgICAgIHUuaW5MaXN0Lmxpc3RTaXplID0gbGlzdFNpemU7CisgICAgICAg
IGNhY2hlVHlwZSA9IENhY2hlVHlwZTo6U3R1YjsKKyAgICAgICAgdS5zdHViID0gc3R1Yi5yZWxl
YXNlKCk7CiAgICAgfQotICAgICAgICAKKworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBhZGRB
Y2Nlc3NDYXNlKAorICAgICAgICBWTSYsIENvZGVCbG9jayosIGNvbnN0IElkZW50aWZpZXImLCBz
dGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gYWNjZXNzQ2FzZSk7CisKICAgICB2b2lkIHJlc2V0
KENvZGVCbG9jayopOwogCiAgICAgdm9pZCBkZXJlZigpOwpAQCAtMTY1LDE1ICsxMTEsOSBAQCBz
dHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewogICAgICAgICBzZWVuID0gdHJ1ZTsKICAgICB9CiAg
ICAgICAgIAotICAgIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIGFkZFdhdGNocG9p
bnQoCi0gICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiYgY29uZGl0aW9uID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb24oKSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86OmVuc3VyZVJlZmVy
ZW5jZUFuZEFkZFdhdGNocG9pbnQoCi0gICAgICAgICAgICB3YXRjaHBvaW50cywgY29kZUJsb2Nr
LCB0aGlzLCBjb25kaXRpb24pOwotICAgIH0KLSAgICAKLSAgICBpbnQ4X3QgYWNjZXNzVHlwZTsK
LSAgICBib29sIHNlZW4gOiAxOworICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZTsKKyAgICBDYWNo
ZVR5cGUgY2FjaGVUeXBlOworICAgIGJvb2wgc2VlbjsKICAgICBib29sIHJlc2V0QnlHQyA6IDE7
CiAgICAgYm9vbCB0b29rU2xvd1BhdGggOiAxOwogCkBAIC0yMDMsMzQgKzE0MywxMyBAQCBzdHJ1
Y3QgU3RydWN0dXJlU3R1YkluZm8gewogCiAgICAgdW5pb24gewogICAgICAgICBzdHJ1Y3Qgewot
ICAgICAgICAgICAgLy8gSXQgd291bGQgYmUgdW53aXNlIHRvIHB1dCBhbnl0aGluZyBoZXJlLCBh
cyBpdCB3aWxsIHN1cmVseSBiZSBvdmVyd3JpdHRlbi4KLSAgICAgICAgfSB1bnNldDsKLSAgICAg
ICAgc3RydWN0IHsKLSAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBiYXNl
T2JqZWN0U3RydWN0dXJlOwotICAgICAgICB9IGdldEJ5SWRTZWxmOwotICAgICAgICBzdHJ1Y3Qg
ewotICAgICAgICAgICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogbGlzdDsKLSAgICAgICAgfSBn
ZXRCeUlkTGlzdDsKLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIFdyaXRlQmFycmllckJh
c2U8U3RydWN0dXJlPiBwcmV2aW91c1N0cnVjdHVyZTsKLSAgICAgICAgICAgIFdyaXRlQmFycmll
ckJhc2U8U3RydWN0dXJlPiBzdHJ1Y3R1cmU7Ci0gICAgICAgICAgICB2b2lkKiByYXdDb25kaXRp
b25TZXQ7Ci0gICAgICAgIH0gcHV0QnlJZFRyYW5zaXRpb247Ci0gICAgICAgIHN0cnVjdCB7CiAg
ICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4gYmFzZU9iamVjdFN0cnVjdHVy
ZTsKLSAgICAgICAgfSBwdXRCeUlkUmVwbGFjZTsKLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAg
ICAgIFBvbHltb3JwaGljUHV0QnlJZExpc3QqIGxpc3Q7Ci0gICAgICAgIH0gcHV0QnlJZExpc3Q7
Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVy
ZUxpc3QqIHN0cnVjdHVyZUxpc3Q7Ci0gICAgICAgICAgICBpbnQgbGlzdFNpemU7Ci0gICAgICAg
IH0gaW5MaXN0OworICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OworICAgICAgICB9
IGJ5SWRTZWxmOworICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzcyogc3R1YjsKICAgICB9IHU7CiAK
LSAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwogICAgIENvZGVMb2NhdGlv
bkNhbGwgY2FsbFJldHVybkxvY2F0aW9uOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXRjaHBvaW50
c09uU3RydWN0dXJlU3R1YkluZm8+IHdhdGNocG9pbnRzOwogfTsKIAogaW5saW5lIENvZGVPcmln
aW4gZ2V0U3RydWN0dXJlU3R1YkluZm9Db2RlT3JpZ2luKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHJ1
Y3R1cmVTdHViSW5mbykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxODk0OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTM1LDcg
KzkzNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbihOb2RlKiBub2QKICAgICAK
ICAgICBpZiAoSlNTdHJpbmcqIHN0cmluZyA9IG5vZGUtPmNoaWxkMSgpLT5keW5hbWljQ2FzdENv
bnN0YW50PEpTU3RyaW5nKj4oKSkgewogICAgICAgICBpZiAoc3RyaW5nLT50cnlHZXRWYWx1ZUlt
cGwoKSAmJiBzdHJpbmctPnRyeUdldFZhbHVlSW1wbCgpLT5pc0F0b21pYygpKSB7Ci0gICAgICAg
ICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRk
U3R1YkluZm8oKTsKKyAgICAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1f
aml0LmNvZGVCbG9jaygpLT5hZGRTdHViSW5mbyhBY2Nlc3NUeXBlOjpJbik7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExDb21waWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTENvbXBpbGUuY3BwCShyZXZpc2lvbiAxODk0OTMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzgsNyArNTM4
LDcgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgICAgICAg
ICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB1c2VkUmVnaXN0ZXJzRm9yKHJlY29y
ZCk7CiAgICAgICAgICAgICAgICAgR1BSUmVnIHJlc3VsdCA9IHJlY29yZC5sb2NhdGlvbnNbMF0u
ZGlyZWN0R1BSKCk7CiAgICAgICAgICAgICAgICAgR1BSUmVnIG9iaiA9IHJlY29yZC5sb2NhdGlv
bnNbMV0uZGlyZWN0R1BSKCk7Ci0gICAgICAgICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvID0gY29kZUJsb2NrLT5hZGRTdHViSW5mbygpOyAKKyAgICAgICAgICAgICAgICBTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBjb2RlQmxvY2stPmFkZFN0dWJJbmZvKEFjY2Vzc1R5
cGU6OkluKTsgCiAgICAgICAgICAgICAgICAgc3R1YkluZm8tPmNvZGVPcmlnaW4gPSBjb2RlT3Jp
Z2luOwogICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5jYWxsU2l0ZUluZGV4ID0gY2hlY2tJbi5j
YWxsU2l0ZUluZGV4KCk7CiAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmJhc2VHUFIg
PSBzdGF0aWNfY2FzdDxpbnQ4X3Q+KG9iaik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0FjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0FjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmNwcAkocmV2aXNp
b24gMTg5NDkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9BY2Nlc3NvckNhbGxKSVRT
dHViUm91dGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNTUgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaCIKLQotI2lmIEVO
QUJMRShKSVQpCi0KLSNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKLQotbmFtZXNwYWNlIEpTQyB7
Ci0KLUFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lOjpBY2Nlc3NvckNhbGxKSVRTdHViUm91dGlu
ZSgKLSAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIGNvZGUsIFZNJiB2bSwgc3RkOjp1
bmlxdWVfcHRyPENhbGxMaW5rSW5mbz4gaW5mbykKLSAgICA6IEdDQXdhcmVKSVRTdHViUm91dGlu
ZShjb2RlLCB2bSkKLSAgICAsIG1fY2FsbExpbmtJbmZvKFdURjo6bW92ZShpbmZvKSkKLXsKLX0K
LQotQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmU6On5BY2Nlc3NvckNhbGxKSVRTdHViUm91dGlu
ZSgpCi17Ci19Ci0KLWJvb2wgQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmU6OnZpc2l0V2VhayhW
TSYgdm0pCi17Ci0gICAgbV9jYWxsTGlua0luZm8tPnZpc2l0V2Vhayh2bSk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gRU5BQkxFKEpJVCkK
LQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9BY2Nlc3NvckNhbGxKSVRTdHViUm91
dGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQWNjZXNzb3JD
YWxsSklUU3R1YlJvdXRpbmUuaAkocmV2aXNpb24gMTg5NDkzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9BY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKi8KLQotI2lmbmRlZiBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZV9oCi0jZGVmaW5l
IEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lX2gKLQotI2lmIEVOQUJMRShKSVQpCi0KLSNpbmNs
dWRlICJHQ0F3YXJlSklUU3R1YlJvdXRpbmUuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNz
IENhbGxMaW5rSW5mbzsKLQotLy8gSklUIHN0dWIgcm91dGluZSBmb3IgdXNlIGJ5IEphdmFTY3Jp
cHQgYWNjZXNzb3JzLiBUaGVzZSB3aWxsIGJlIG1ha2luZyBhIEpTCi0vLyBjYWxsIHRoYXQgcmVx
dWlyZXMgaW5saW5lIGNhY2hpbmcuIAotCi1jbGFzcyBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGlu
ZSA6IHB1YmxpYyBHQ0F3YXJlSklUU3R1YlJvdXRpbmUgewotcHVibGljOgotICAgIEFjY2Vzc29y
Q2FsbEpJVFN0dWJSb3V0aW5lKAotICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYm
LCBWTSYsIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua0luZm8+KTsKLSAgICAKLSAgICB2aXJ0dWFs
IH5BY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZSgpOwotICAgIAotICAgIHZpcnR1YWwgYm9vbCB2
aXNpdFdlYWsoVk0mKSBvdmVycmlkZTsKLSAgICAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExp
bmtJbmZvPiBtX2NhbGxMaW5rSW5mbzsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5k
aWYgLy8gRU5BQkxFKEpJVCkKLQotI2VuZGlmIC8vIEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5l
X2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5o
CShyZXZpc2lvbiAxODk0OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC01NjMsNyArNTYzLDcgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gYnJhbmNoMzIoRXF1YWwsIHJlZ3MudGFnR1BSKCksIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7CiAjZW5kaWYKICAgICB9Ci0gICAgCisKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgogICAgIEp1bXAgYnJhbmNoU3RydWN0dXJlKFJlbGF0aW9uYWxDb25k
aXRpb24gY29uZGl0aW9uLCBUIGxlZnRIYW5kU2lkZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAg
ICAgewpAQCAtODMyLDYgKzgzMiwxNSBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAKKyAgICB2
b2lkIGJveEJvb2xlYW5QYXlsb2FkKGJvb2wgdmFsdWUsIEdQUlJlZyBwYXlsb2FkR1BSKQorICAg
IHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihWYWx1ZUZh
bHNlICsgdmFsdWUpLCBwYXlsb2FkR1BSKTsKKyNlbHNlCisgICAgICAgIG1vdmUoVHJ1c3RlZElt
bTMyKHZhbHVlKSwgcGF5bG9hZEdQUik7CisjZW5kaWYKKyAgICB9CisKICAgICB2b2lkIGJveEJv
b2xlYW4oR1BSUmVnIGJvb2xHUFIsIEpTVmFsdWVSZWdzIGJveGVkUmVncykKICAgICB7CiAgICAg
ICAgIGJveEJvb2xlYW5QYXlsb2FkKGJvb2xHUFIsIGJveGVkUmVncy5wYXlsb2FkR1BSKCkpOwpA
QCAtODM5LDYgKzg0OCwxNyBAQCBwdWJsaWM6CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkJvb2xlYW5UYWcpLCBib3hlZFJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCiAgICAgfQor
CisgICAgdm9pZCBib3hJbnQzMihHUFJSZWcgaW50R1BSLCBKU1ZhbHVlUmVncyBib3hlZFJlZ3Mp
CisgICAgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIG1vdmUoaW50R1BSLCBib3hlZFJl
Z3MuZ3ByKCkpOworICAgICAgICBvcjY0KFRydXN0ZWRJbW02NChUYWdUeXBlTnVtYmVyKSwgYm94
ZWRSZWdzLmdwcigpKTsKKyNlbHNlCisgICAgICAgIG1vdmUoaW50R1BSLCBib3hlZFJlZ3MucGF5
bG9hZEdQUigpKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcp
LCBib3hlZFJlZ3MudGFnR1BSKCkpOworI2VuZGlmCisgICAgfQogICAgIAogICAgIHZvaWQgY2Fs
bEV4Y2VwdGlvbkZ1enooKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2
aXNpb24gMTg5NDkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjYsNyArNjYsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHN0cnVjdCBJ
bnN0cnVjdGlvbjsKICAgICBzdHJ1Y3QgT3BlcmFuZFR5cGVzOwotICAgIHN0cnVjdCBQb2x5bW9y
cGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3Q7CiAgICAgc3RydWN0IFNpbXBsZUp1bXBUYWJsZTsKICAg
ICBzdHJ1Y3QgU3RyaW5nSnVtcFRhYmxlOwogICAgIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbzsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2Fj
aGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxODk0OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsMjIg
KzM2LDI0IEBAIG5hbWVzcGFjZSBKU0MgewogCiBzdGF0aWMgU3RydWN0dXJlU3R1YkluZm8qIGdh
cmJhZ2VTdHViSW5mbygpCiB7Ci0gICAgc3RhdGljIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
byA9IG5ldyBTdHJ1Y3R1cmVTdHViSW5mbygpOworICAgIHN0YXRpYyBTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8gPSBuZXcgU3RydWN0dXJlU3R1YkluZm8oQWNjZXNzVHlwZTo6R2V0KTsKICAg
ICByZXR1cm4gc3R1YkluZm87CiB9CiAKLUpJVElubGluZUNhY2hlR2VuZXJhdG9yOjpKSVRJbmxp
bmVDYWNoZUdlbmVyYXRvcihDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlKQorSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OkpJ
VElubGluZUNhY2hlR2VuZXJhdG9yKAorICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIEFjY2Vzc1R5cGUgYWNjZXNz
VHlwZSkKICAgICA6IG1fY29kZUJsb2NrKGNvZGVCbG9jaykKIHsKLSAgICBtX3N0dWJJbmZvID0g
bV9jb2RlQmxvY2sgPyBtX2NvZGVCbG9jay0+YWRkU3R1YkluZm8oKSA6IGdhcmJhZ2VTdHViSW5m
bygpOworICAgIG1fc3R1YkluZm8gPSBtX2NvZGVCbG9jayA/IG1fY29kZUJsb2NrLT5hZGRTdHVi
SW5mbyhhY2Nlc3NUeXBlKSA6IGdhcmJhZ2VTdHViSW5mbygpOwogICAgIG1fc3R1YkluZm8tPmNv
ZGVPcmlnaW4gPSBjb2RlT3JpZ2luOwogICAgIG1fc3R1YkluZm8tPmNhbGxTaXRlSW5kZXggPSBj
YWxsU2l0ZTsKIH0KIAogSklUQnlJZEdlbmVyYXRvcjo6SklUQnlJZEdlbmVyYXRvcigKLSAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4
IGNhbGxTaXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywKLSAgICBKU1ZhbHVl
UmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9k
ZSkKLSAgICA6IEpJVElubGluZUNhY2hlR2VuZXJhdG9yKGNvZGVCbG9jaywgY29kZU9yaWdpbiwg
Y2FsbFNpdGUpCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdp
biwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlLAorICAgIGNv
bnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVl
UmVncyB2YWx1ZSwKKyAgICBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlKQorICAgIDogSklU
SW5saW5lQ2FjaGVHZW5lcmF0b3IoY29kZUJsb2NrLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgYWNj
ZXNzVHlwZSkKICAgICAsIG1fYmFzZShiYXNlKQogICAgICwgbV92YWx1ZSh2YWx1ZSkKIHsKQEAg
LTExNCw3ICsxMTYsOCBAQCB2b2lkIEpJVEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGhD
CiBKSVRHZXRCeUlkR2VuZXJhdG9yOjpKSVRHZXRCeUlkR2VuZXJhdG9yKAogICAgIENvZGVCbG9j
ayogY29kZUJsb2NrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNp
dGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLAogICAgIEpTVmFsdWVSZWdzIGJh
c2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlKQotICAg
IDogSklUQnlJZEdlbmVyYXRvcihjb2RlQmxvY2ssIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCB1c2Vk
UmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSwgc3BpbGxNb2RlKQorICAgIDogSklUQnlJZEdlbmVyYXRv
cigKKyAgICAgICAgY29kZUJsb2NrLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6
R2V0LCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSwgc3BpbGxNb2RlKQogewogICAgIFJFTEVB
U0VfQVNTRVJUKGJhc2UucGF5bG9hZEdQUigpICE9IHZhbHVlLnRhZ0dQUigpKTsKIH0KQEAgLTE0
MCw3ICsxNDMsOCBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yOjpKSVRQdXRCeUlkR2VuZXJhdG9yCiAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJ
bmRleCBjYWxsU2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsCiAgICAgSlNW
YWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzY3JhdGNoLCBTcGlsbFJl
Z2lzdGVyc01vZGUgc3BpbGxNb2RlLAogICAgIEVDTUFNb2RlIGVjbWFNb2RlLCBQdXRLaW5kIHB1
dEtpbmQpCi0gICAgOiBKSVRCeUlkR2VuZXJhdG9yKGNvZGVCbG9jaywgY29kZU9yaWdpbiwgY2Fs
bFNpdGUsIHVzZWRSZWdpc3RlcnMsIGJhc2UsIHZhbHVlLCBzcGlsbE1vZGUpCisgICAgOiBKSVRC
eUlkR2VuZXJhdG9yKAorICAgICAgICBjb2RlQmxvY2ssIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBB
Y2Nlc3NUeXBlOjpQdXQsIHVzZWRSZWdpc3RlcnMsIGJhc2UsIHZhbHVlLCBzcGlsbE1vZGUpCiAg
ICAgLCBtX3NjcmF0Y2goc2NyYXRjaCkKICAgICAsIG1fZWNtYU1vZGUoZWNtYU1vZGUpCiAgICAg
LCBtX3B1dEtpbmQocHV0S2luZCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
SW5saW5lQ2FjaGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDE4OTQ5MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRl
ICJQdXRLaW5kLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1
cmVTdHViSW5mby5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNDEsNyArNDIsNyBAQCBjbGFz
cyBDb2RlQmxvY2s7CiBjbGFzcyBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvciB7CiBwcm90ZWN0ZWQ6
CiAgICAgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoKSB7IH0KLSAgICBKSVRJbmxpbmVDYWNoZUdl
bmVyYXRvcihDb2RlQmxvY2sqLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4KTsKKyAgICBKSVRJ
bmxpbmVDYWNoZUdlbmVyYXRvcihDb2RlQmxvY2sqLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4
LCBBY2Nlc3NUeXBlKTsKICAgICAKIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8oKSBjb25zdCB7IHJldHVybiBtX3N0dWJJbmZvOyB9CkBAIC01Niw4ICs1Nyw4IEBAIHBy
b3RlY3RlZDoKICAgICBKSVRCeUlkR2VuZXJhdG9yKCkgeyB9CiAKICAgICBKSVRCeUlkR2VuZXJh
dG9yKAotICAgICAgICBDb2RlQmxvY2sqLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBjb25z
dCBSZWdpc3RlclNldCYsIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLAotICAg
ICAgICBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlKTsKKyAgICAgICAgQ29kZUJsb2NrKiwg
Q29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgQWNjZXNzVHlwZSwgY29uc3QgUmVnaXN0ZXJTZXQm
LCBKU1ZhbHVlUmVncyBiYXNlLAorICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZSwgU3BpbGxSZWdp
c3RlcnNNb2RlIHNwaWxsTW9kZSk7CiAgICAgCiBwdWJsaWM6CiAgICAgdm9pZCByZXBvcnRTbG93
UGF0aENhbGwoTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHNsb3dQYXRoQmVnaW4sIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIGNhbGwpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9ucy5jcHAJKHJldmlzaW9uIDE4OTQ5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MywyNCArMTYzLDYgQEAg
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoYmFzZVZhbHVlLmdldChleGVjLCBpZGVudCwgc2xvdCkpOwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3QoRXhlY1N0
YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1ZhbHVlIGJh
c2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0KLSAgICBJZGVu
dGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgdWlkKTsKLSAgICBBY2Nlc3NU
eXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNz
VHlwZSk7Ci0KLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShiYXNlKTsK
LSAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUpOwotICAgIGJvb2wgaGFzUmVzdWx0ID0g
YmFzZVZhbHVlLmdldFByb3BlcnR5U2xvdChleGVjLCBpZGVudCwgc2xvdCk7Ci0gICAgCi0gICAg
aWYgKGFjY2Vzc1R5cGUgPT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vz
c1R5cGUpKQotICAgICAgICBidWlsZEdldEJ5SURMaXN0KGV4ZWMsIGJhc2VWYWx1ZSwgaWRlbnQs
IHNsb3QsICpzdHViSW5mbyk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGhhc1Jlc3Vs
dD8gc2xvdC5nZXRWYWx1ZShleGVjLCBpZGVudCkgOiBqc1VuZGVmaW5lZCgpKTsKLX0KLQogRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUoRXhlY1N0
YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1ZhbHVlIGJh
c2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
CkBAIC0xOTcsNyArMTc5LDYgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25HZQogICAgICAgICBzdHViSW5mby0+c2VlbiA9IHRydWU7CiAgICAgCiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShoYXNSZXN1bHQ/IHNsb3QuZ2V0VmFsdWUoZXhlYywgaWRlbnQpIDoganNV
bmRlZmluZWQoKSk7Ci0KIH0KIAogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25Jbk9wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
LCBKU0NlbGwqIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiBrZXkpCkBAIC0zOTQsOTAgKzM3NSw2
IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWMKICAgICAgICAgc3R1
YkluZm8tPnNlZW4gPSB0cnVlOwogfQogCi12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlJZFN0cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAK
LSAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgdWlkKTsKLSAg
ICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5m
by0+YWNjZXNzVHlwZSk7Ci0KLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7Ci0gICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZEJhc2UpOwotICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgdHJ1ZSwgZXhl
Yy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwotICAgIAotICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gYmFzZVZhbHVlLmlzQ2VsbCgpID8gYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1
Y3R1cmUoKnZtKSA6IG51bGxwdHI7IAotICAgIGJhc2VWYWx1ZS5wdXQoZXhlYywgaWRlbnQsIHZh
bHVlLCBzbG90KTsKLQotICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5
cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYnVpbGRQ
dXRCeUlkTGlzdChleGVjLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgaWRlbnQsIHNsb3QsICpzdHVi
SW5mbywgTm90RGlyZWN0KTsKLX0KLQotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5
SWROb25TdHJpY3RCdWlsZExpc3QoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8sIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZEJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAg
Ci0gICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHVpZCk7Ci0g
ICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUpOwotCi0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpOwotICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRCYXNlKTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIGZhbHNlLCBl
eGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7Ci0KLSAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IGJhc2VWYWx1ZS5pc0NlbGwoKSA/IGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0
dXJlKCp2bSkgOiBudWxscHRyOwotICAgIGJhc2VWYWx1ZS5wdXQoZXhlYywgaWRlbnQsIHZhbHVl
LCBzbG90KTsKLSAgICAKLSAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NU
eXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBi
dWlsZFB1dEJ5SWRMaXN0KGV4ZWMsIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBpZGVudCwgc2xvdCwg
KnN0dWJJbmZvLCBOb3REaXJlY3QpOwotfQotCi12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlJZERpcmVjdFN0cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKLXsKLSAgICBWTSogdm0g
PSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwg
dWlkKTsKLSAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBl
PihzdHViSW5mby0+YWNjZXNzVHlwZSk7Ci0gICAgCi0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIEpTT2JqZWN0KiBiYXNlT2JqZWN0ID0gYXNP
YmplY3QoSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKSk7Ci0gICAgUHV0UHJvcGVydHlTbG90
IHNsb3QoYmFzZU9iamVjdCwgdHJ1ZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0
KCkpOwotCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlT2JqZWN0LT5zdHJ1Y3R1cmUo
KnZtKTsgICAgCi0gICAgYmFzZU9iamVjdC0+cHV0RGlyZWN0KCp2bSwgaWRlbnQsIHZhbHVlLCBz
bG90KTsKLSAgICAKLSAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBl
PihzdHViSW5mby0+YWNjZXNzVHlwZSkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBidWls
ZFB1dEJ5SWRMaXN0KGV4ZWMsIGJhc2VPYmplY3QsIHN0cnVjdHVyZSwgaWRlbnQsIHNsb3QsICpz
dHViSW5mbywgRGlyZWN0KTsKLX0KLQotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5
SWREaXJlY3ROb25TdHJpY3RCdWlsZExpc3QoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZEJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
Ci0gICAgCi0gICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHVp
ZCk7Ci0gICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4o
c3R1YkluZm8tPmFjY2Vzc1R5cGUpOwotCi0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpOwotICAgIEpTT2JqZWN0KiBiYXNlT2JqZWN0ID0gYXNPYmplY3Qo
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKSk7Ci0gICAgUHV0UHJvcGVydHlTbG90IHNsb3Qo
YmFzZU9iamVjdCwgZmFsc2UsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsK
LQotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZU9iamVjdC0+c3RydWN0dXJlKCp2bSk7
ICAgIAotICAgIGJhc2VPYmplY3QtPnB1dERpcmVjdCgqdm0sIGlkZW50LCB2YWx1ZSwgc2xvdCk7
Ci0KLSAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5m
by0+YWNjZXNzVHlwZSkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBidWlsZFB1dEJ5SWRM
aXN0KGV4ZWMsIGJhc2VPYmplY3QsIHN0cnVjdHVyZSwgaWRlbnQsIHNsb3QsICpzdHViSW5mbywg
RGlyZWN0KTsKLX0KLQogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVTdG9y
YWdlQW5kRmluaXNoUHV0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2UsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIEVuY29kZWRKU1ZhbHVlIHZhbHVl
KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDE4OTQ5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2lm
IEVOQUJMRShKSVQpCiAKLSNpbmNsdWRlICJBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5oIgog
I2luY2x1ZGUgIkJpbmFyeVN3aXRjaC5oIgogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgogI2lu
Y2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKQEAgLTQwLDggKzM5LDcgQEAKICNpbmNsdWRlICJKSVRJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKLSNpbmNsdWRlICJQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgiCi0jaW5jbHVkZSAiUG9seW1v
cnBoaWNQdXRCeUlkTGlzdC5oIgorI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCiAjaW5j
bHVkZSAiUmVnRXhwTWF0Y2hlc0FycmF5LmgiCiAjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yLmgiCiAjaW5jbHVkZSAiU3RhY2tBbGlnbm1lbnQuaCIKQEAgLTk0LDEzICs5MiwxMCBA
QCBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlQmxvY2sqIGNvZGVCCiB9CiAKIHN0YXRpYyB2
b2lkIHJlcGF0Y2hCeUlkU2VsZkFjY2VzcygKLSAgICBWTSYgdm0sIENvZGVCbG9jayogY29kZUJs
b2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLAot
ICAgIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
LCBjb25zdCBGdW5jdGlvblB0ciAmc2xvd1BhdGhGdW5jdGlvbiwKKyAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIGNvbnN0IEZ1bmN0aW9uUHRyICZzbG93UGF0
aEZ1bmN0aW9uLAogICAgIGJvb2wgY29tcGFjdCkKIHsKLSAgICBpZiAoc3RydWN0dXJlLT5uZWVk
SW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpCi0gICAgICAgIHZtLnJlZ2lzdGVyV2F0Y2hwb2lu
dEZvckltcHVyZVByb3BlcnR5KHByb3BlcnR5TmFtZSwgc3R1YkluZm8uYWRkV2F0Y2hwb2ludChj
b2RlQmxvY2spKTsKLSAgICAKICAgICAvLyBPbmx5IG9wdGltaXplIG9uY2UhCiAgICAgcmVwYXRj
aENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIHNsb3dQYXRoRnVu
Y3Rpb24pOwogCkBAIC0xMjksMzMgKzEyNCw0NCBAQCBzdGF0aWMgdm9pZCByZXBhdGNoQnlJZFNl
bGZBY2Nlc3MoCiAjZW5kaWYKIH0KIAotc3RhdGljIHZvaWQgY2hlY2tPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbigKLSAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAotICAgIEND
YWxsSGVscGVycyYgaml0LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywg
R1BSUmVnIHNjcmF0Y2hHUFIpCi17Ci0gICAgaWYgKGNvbmRpdGlvbi5pc1dhdGNoYWJsZUFzc3Vt
aW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKLSAgICAgICAgY29uZGl0aW9uLm9iamVj
dCgpLT5zdHJ1Y3R1cmUoKS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoCi0gICAgICAgICAgICBz
dHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaywgY29uZGl0aW9uKSk7Ci0gICAgICAgIHJl
dHVybjsKK3N0YXRpYyB2b2lkIHJlc2V0R2V0QnlJRENoZWNrQW5kTG9hZChTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8pCit7CisgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzIgc3RydWN0dXJl
TGFiZWwgPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldCgt
KGludHB0cl90KXN0dWJJbmZvLnBhdGNoLmRlbHRhQ2hlY2tJbW1Ub0NhbGwpOworICAgIGlmIChN
YWNyb0Fzc2VtYmxlcjo6Y2FuSnVtcFJlcGxhY2VQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaCgp
KSB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNo
YWJsZUJyYW5jaDMyV2l0aFBhdGNoKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0YXJ0
T2ZQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaE9uQWRkcmVzcyhzdHJ1Y3R1cmVMYWJlbCksCisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICBzdGF0
aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRD4oc3R1YkluZm8ucGF0Y2guYmFzZUdQ
UiksCisgICAgICAgICAgICAgICAgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAg
ICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KHVudXNlZFBvaW50ZXIpKTsKICAgICB9CisgICAg
TWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hJbnQzMihzdHJ1Y3R1cmVMYWJlbCwgc3RhdGljX2Nhc3Q8
aW50MzJfdD4odW51c2VkUG9pbnRlcikpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgTWFjcm9B
c3NlbWJsZXI6OnJlcGF0Y2hDb21wYWN0KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRh
TGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Mb2FkT3JTdG9y
ZSksIDApOworI2Vsc2UKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENvbXBhY3Qoc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5w
YXRjaC5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlKSwgMCk7CisgICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGF0Y2hDb21wYWN0KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21w
YWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUp
LCAwKTsKKyNlbmRpZgorfQogCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjb25kaXRpb24u
b2JqZWN0KCktPnN0cnVjdHVyZSgpOwotICAgIFJFTEVBU0VfQVNTRVJUKGNvbmRpdGlvbi5zdHJ1
Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1
Y3R1cmUpKTsKLSAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihjb25k
aXRpb24ub2JqZWN0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKAot
ICAgICAgICBqaXQuYnJhbmNoU3RydWN0dXJlKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQ
UiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc3RydWN0dXJlKSk7Ci19Ci0KLXN0YXRp
YyB2b2lkIGNoZWNrT2JqZWN0UHJvcGVydHlDb25kaXRpb25zKAotICAgIGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0JiBzZXQsIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8sCi0gICAgQ0NhbGxIZWxwZXJzJiBqaXQsIE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBHUFJSZWcgc2NyYXRjaEdQUikKLXsKLSAgICBmb3Ig
KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiBzZXQpIHsKLSAgICAg
ICAgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigKLSAgICAgICAgICAgIGNvbmRpdGlvbiwg
Y29kZUJsb2NrLCBzdHViSW5mbywgaml0LCBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOworc3Rh
dGljIHZvaWQgcmVzZXRQdXRCeUlEQ2hlY2tBbmRMb2FkKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbykKK3sKKyAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWwzMiBzdHJ1Y3R1cmVMYWJlbCA9IHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KC0oaW50cHRyX3Qp
c3R1YkluZm8ucGF0Y2guZGVsdGFDaGVja0ltbVRvQ2FsbCk7CisgICAgaWYgKE1hY3JvQXNzZW1i
bGVyOjpjYW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKCkpIHsKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OnJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNo
MzJXaXRoUGF0Y2goCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6c3RhcnRPZlBhdGNoYWJs
ZUJyYW5jaDMyV2l0aFBhdGNoT25BZGRyZXNzKHN0cnVjdHVyZUxhYmVsKSwKKyAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PE1h
Y3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKSwKKyAgICAg
ICAgICAgICAgICBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAorICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8aW50MzJfdD4odW51c2VkUG9pbnRlcikpOwogICAgIH0KKyAgICBNYWNyb0Fzc2Vt
Ymxlcjo6cmVwYXRjaEludDMyKHN0cnVjdHVyZUxhYmVsLCBzdGF0aWNfY2FzdDxpbnQzMl90Pih1
bnVzZWRQb2ludGVyKSk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
cmVwYXRjaEludDMyKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zm
c2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCAwKTsKKyNlbHNlCisg
ICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hJbnQzMihzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1RhZ0xvYWRP
clN0b3JlKSwgMCk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hJbnQzMihzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0
YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSksIDApOworI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lk
IHJlcGxhY2VXaXRoSnVtcChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIGNvbnN0IE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciB0YXJnZXQpCkBAIC0xNjgsNiArMTc0LDggQEAgc3RhdGljIHZvaWQg
cmVwbGFjZVdpdGhKdW1wKFN0cnVjdHVyZVN0dQogICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFi
ZWwodGFyZ2V0KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICByZXNldEdldEJ5SURD
aGVja0FuZExvYWQoc3R1YkluZm8pOwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNo
SnVtcCgKICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldCgK
QEAgLTE3NSw0MjcgKzE4Myw2IEBAIHN0YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChTdHJ1Y3R1
cmVTdHUKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwodGFyZ2V0KSk7CiB9CiAKLXN0YXRpYyB2
b2lkIGVtaXRSZXN0b3JlU2NyYXRjaChNYWNyb0Fzc2VtYmxlciYgc3R1YkppdCwgYm9vbCBuZWVk
VG9SZXN0b3JlU2NyYXRjaCwgR1BSUmVnIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpKdW1w
JiBzdWNjZXNzLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCYgZmFpbCwgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IGZhaWx1cmVDYXNlcykKLXsKLSAgICBpZiAobmVlZFRvUmVzdG9yZVNjcmF0Y2gpIHsK
LSAgICAgICAgc3R1YkppdC5wb3BUb1Jlc3RvcmUoc2NyYXRjaEdQUik7Ci0gICAgICAgIAotICAg
ICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBsaW5r
IGZhaWx1cmUgY2FzZXMgaGVyZSwgc28gd2UgY2FuIHBvcCBzY3JhdGNoR1BSLCBhbmQgdGhlbiBq
dW1wIGJhY2suCi0gICAgICAgIGZhaWx1cmVDYXNlcy5saW5rKCZzdHViSml0KTsKLSAgICAgICAg
Ci0gICAgICAgIHN0dWJKaXQucG9wVG9SZXN0b3JlKHNjcmF0Y2hHUFIpOwotICAgICAgICAKLSAg
ICAgICAgZmFpbCA9IHN0dWJKaXQuanVtcCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IAotICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKLX0KLQotc3RhdGljIHZvaWQgbGlua1Jl
c3RvcmVTY3JhdGNoKExpbmtCdWZmZXImIHBhdGNoQnVmZmVyLCBib29sIG5lZWRUb1Jlc3RvcmVT
Y3JhdGNoLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzLCBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBmYWlsLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzLCBDb2RlTG9jYXRp
b25MYWJlbCBzdWNjZXNzTGFiZWwsIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlQmVnaW4pCi17
Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdWNjZXNzTGFiZWwpOwotICAgICAgICAK
LSAgICBpZiAobmVlZFRvUmVzdG9yZVNjcmF0Y2gpIHsKLSAgICAgICAgcGF0Y2hCdWZmZXIubGlu
ayhmYWlsLCBzbG93Q2FzZUJlZ2luKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAg
ICAvLyBsaW5rIGZhaWx1cmUgY2FzZXMgZGlyZWN0bHkgYmFjayB0byBub3JtYWwgcGF0aAotICAg
IHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2VzLCBzbG93Q2FzZUJlZ2luKTsKLX0KLQotc3Rh
dGljIHZvaWQgbGlua1Jlc3RvcmVTY3JhdGNoKExpbmtCdWZmZXImIHBhdGNoQnVmZmVyLCBib29s
IG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3MsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhaWwsIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXMpCi17Ci0gICAgbGlua1Jlc3RvcmVTY3Jh
dGNoKHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc3VjY2VzcywgZmFpbCwgZmFp
bHVyZUNhc2VzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHVi
SW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
bGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7Ci19Ci0K
LWVudW0gQnlJZFN0dWJLaW5kIHsKLSAgICBHZXRWYWx1ZSwKLSAgICBHZXRVbmRlZmluZWQsCi0g
ICAgQ2FsbEdldHRlciwKLSAgICBDYWxsQ3VzdG9tR2V0dGVyLAotICAgIENhbGxTZXR0ZXIsCi0g
ICAgQ2FsbEN1c3RvbVNldHRlcgotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIqIHRvU3RyaW5nKEJ5
SWRTdHViS2luZCBraW5kKQotewotICAgIHN3aXRjaCAoa2luZCkgewotICAgIGNhc2UgR2V0VmFs
dWU6Ci0gICAgICAgIHJldHVybiAiR2V0VmFsdWUiOwotICAgIGNhc2UgR2V0VW5kZWZpbmVkOgot
ICAgICAgICByZXR1cm4gIkdldFVuZGVmaW5lZCI7Ci0gICAgY2FzZSBDYWxsR2V0dGVyOgotICAg
ICAgICByZXR1cm4gIkNhbGxHZXR0ZXIiOwotICAgIGNhc2UgQ2FsbEN1c3RvbUdldHRlcjoKLSAg
ICAgICAgcmV0dXJuICJDYWxsQ3VzdG9tR2V0dGVyIjsKLSAgICBjYXNlIENhbGxTZXR0ZXI6Ci0g
ICAgICAgIHJldHVybiAiQ2FsbFNldHRlciI7Ci0gICAgY2FzZSBDYWxsQ3VzdG9tU2V0dGVyOgot
ICAgICAgICByZXR1cm4gIkNhbGxDdXN0b21TZXR0ZXIiOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIH0KLX0KLQotc3RhdGljIEJ5SWRTdHViS2luZCBraW5kRm9yKGNvbnN0IFByb3BlcnR5U2xv
dCYgc2xvdCkKLXsKLSAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkpCi0gICAgICAgIHJl
dHVybiBHZXRWYWx1ZTsKLSAgICBpZiAoc2xvdC5pc1Vuc2V0KCkpCi0gICAgICAgIHJldHVybiBH
ZXRVbmRlZmluZWQ7Ci0gICAgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkKLSAgICAgICAg
cmV0dXJuIENhbGxDdXN0b21HZXR0ZXI7Ci0gICAgUkVMRUFTRV9BU1NFUlQoc2xvdC5pc0NhY2hl
YWJsZUdldHRlcigpKTsKLSAgICByZXR1cm4gQ2FsbEdldHRlcjsKLX0KLQotc3RhdGljIEZ1bmN0
aW9uUHRyIGN1c3RvbUZvcihjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0gICAgaWYgKCFz
bG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkpCi0gICAgICAgIHJldHVybiBGdW5jdGlvblB0cigpOwot
ICAgIHJldHVybiBGdW5jdGlvblB0cihzbG90LmN1c3RvbUdldHRlcigpKTsKLX0KLQotc3RhdGlj
IEJ5SWRTdHViS2luZCBraW5kRm9yKGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAg
ICBSRUxFQVNFX0FTU0VSVCghc2xvdC5pc0NhY2hlYWJsZVB1dCgpKTsKLSAgICBpZiAoc2xvdC5p
c0NhY2hlYWJsZVNldHRlcigpKQotICAgICAgICByZXR1cm4gQ2FsbFNldHRlcjsKLSAgICBSRUxF
QVNFX0FTU0VSVChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkpOwotICAgIHJldHVybiBDYWxsQ3Vz
dG9tU2V0dGVyOwotfQotCi1zdGF0aWMgRnVuY3Rpb25QdHIgY3VzdG9tRm9yKGNvbnN0IFB1dFBy
b3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkK
LSAgICAgICAgcmV0dXJuIEZ1bmN0aW9uUHRyKCk7Ci0gICAgcmV0dXJuIEZ1bmN0aW9uUHRyKHNs
b3QuY3VzdG9tU2V0dGVyKCkpOwotfQotCi1zdGF0aWMgYm9vbCBnZW5lcmF0ZUJ5SWRTdHViKAot
ICAgIEV4ZWNTdGF0ZSogZXhlYywgQnlJZFN0dWJLaW5kIGtpbmQsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwKLSAgICBGdW5jdGlvblB0ciBjdXN0b20sIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbywgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNl
dCwKLSAgICBKU09iamVjdCogYWx0ZXJuYXRlQmFzZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgYm9vbCBsb2FkVGFyZ2V0RnJvbVByb3h5LAotICAgIFdhdGNo
cG9pbnRTZXQqIHdhdGNocG9pbnRTZXQsIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCwg
Q29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VMYWJlbCwKLSAgICBSZWZQdHI8SklUU3R1YlJvdXRp
bmU+JiBzdHViUm91dGluZSkKLXsKLSAgICBBU1NFUlQoY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNF
bnN1cmVWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpOwotICAgIAot
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nh
c3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKTsKLSAgICBKU1ZhbHVlUmVncyB2YWx1
ZVJlZ3MgPSBKU1ZhbHVlUmVncygKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBzdGF0
aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVlVGFnR1BSKSwKLSNlbmRpZgotICAg
ICAgICBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVlR1BSKSk7Ci0gICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSBUZW1wUmVnaXN0ZXJTZXQoc3R1YkluZm8ucGF0Y2gudXNlZFJl
Z2lzdGVycykuZ2V0RnJlZUdQUigpOwotICAgIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSBz
Y3JhdGNoR1BSID09IEludmFsaWRHUFJSZWc7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIW5lZWRUb1Jl
c3RvcmVTY3JhdGNoIHx8IChraW5kID09IEdldFZhbHVlIHx8IGtpbmQgPT0gR2V0VW5kZWZpbmVk
KSk7Ci0gICAgCi0gICAgQ0NhbGxIZWxwZXJzIHN0dWJKaXQoJmV4ZWMtPnZtKCksIGV4ZWMtPmNv
ZGVCbG9jaygpKTsKLSAgICBpZiAobmVlZFRvUmVzdG9yZVNjcmF0Y2gpIHsKLSAgICAgICAgc2Ny
YXRjaEdQUiA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUigKLSAgICAgICAgICAg
IGJhc2VHUFIsIHZhbHVlUmVncy50YWdHUFIoKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSk7Ci0g
ICAgICAgIHN0dWJKaXQucHVzaFRvU2F2ZShzY3JhdGNoR1BSKTsKLSAgICAgICAgbmVlZFRvUmVz
dG9yZVNjcmF0Y2ggPSB0cnVlOwotICAgIH0KLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QgZmFpbHVyZUNhc2VzOwotCi0gICAgR1BSUmVnIGJhc2VGb3JHZXRHUFI7Ci0gICAgaWYg
KGxvYWRUYXJnZXRGcm9tUHJveHkpIHsKLSAgICAgICAgYmFzZUZvckdldEdQUiA9IHZhbHVlUmVn
cy5wYXlsb2FkR1BSKCk7Ci0gICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFu
Y2g4KAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCAKLSAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zm
c2V0KCkpLCAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoUHVyZUZv
cndhcmRpbmdQcm94eVR5cGUpKSk7Ci0KLSAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTUHJveHk6OnRhcmdldE9mZnNldCgpKSwgc2NyYXRj
aEdQUik7Ci0gICAgICAgIAotICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJh
bmNoU3RydWN0dXJlKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCAKLSAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksCi0gICAgICAgICAgICBzdHJ1Y3R1cmUpKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBiYXNlRm9yR2V0R1BSID0gYmFzZUdQUjsKLQotICAgICAgICBmYWlsdXJlQ2Fz
ZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoU3RydWN0dXJlKAotICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VGb3JHZXRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIAotICAgICAgICAgICAg
c3RydWN0dXJlKSk7Ci0gICAgfQotCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5j
b2RlQmxvY2soKTsKLSAgICBpZiAoc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBv
aW50KCkgfHwgY29uZGl0aW9uU2V0Lm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkKLSAg
ICAgICAgdm0tPnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KHByb3BlcnR5TmFt
ZSwgc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKLQotICAgIGlmICh3YXRjaHBv
aW50U2V0KQotICAgICAgICB3YXRjaHBvaW50U2V0LT5hZGQoc3R1YkluZm8uYWRkV2F0Y2hwb2lu
dChjb2RlQmxvY2spKTsKLQotICAgIGNoZWNrT2JqZWN0UHJvcGVydHlDb25kaXRpb25zKAotICAg
ICAgICBjb25kaXRpb25TZXQsIGNvZGVCbG9jaywgc3R1YkluZm8sIHN0dWJKaXQsIGZhaWx1cmVD
YXNlcywgc2NyYXRjaEdQUik7Ci0KLSAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7Ci0g
ICAgICAgIFN0cnVjdHVyZSogY3VyclN0cnVjdHVyZTsKLSAgICAgICAgaWYgKGNvbmRpdGlvblNl
dC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjdXJyU3RydWN0dXJlID0gc3RydWN0dXJlOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBjdXJyU3RydWN0dXJlID0gY29uZGl0aW9uU2V0LnNsb3RC
YXNlQ29uZGl0aW9uKCkub2JqZWN0KCktPnN0cnVjdHVyZSgpOwotICAgICAgICBjdXJyU3RydWN0
dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHMoKnZtLCBvZmZzZXQpOwot
ICAgIH0KLSAgICAKLSAgICBHUFJSZWcgYmFzZUZvckFjY2Vzc0dQUiA9IEludmFsaWRHUFJSZWc7
Ci0gICAgaWYgKGtpbmQgIT0gR2V0VW5kZWZpbmVkKSB7Ci0gICAgICAgIGlmICghY29uZGl0aW9u
U2V0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgLy8gV2UgY291bGQgaGF2ZSBjbG9iYmVyZWQg
c2NyYXRjaEdQUiBlYXJsaWVyLCBzbyB3ZSBoYXZlIHRvIHJlbG9hZCBmcm9tIGJhc2VHUFIgdG8g
Z2V0IHRoZSB0YXJnZXQuCi0gICAgICAgICAgICBpZiAobG9hZFRhcmdldEZyb21Qcm94eSkKLSAg
ICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNQcm94eTo6dGFyZ2V0T2Zmc2V0KCkpLCBiYXNlRm9yR2V0R1BSKTsKLSAgICAgICAg
ICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihhbHRlcm5hdGVC
YXNlKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBiYXNlRm9yQWNjZXNzR1BSID0gc2NyYXRj
aEdQUjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIEZvciBwcm94eSBvYmplY3Rz
LCB3ZSBuZWVkIHRvIGRvIGFsbCB0aGUgU3RydWN0dXJlIGNoZWNrcyBiZWZvcmUgbW92aW5nIHRo
ZSBiYXNlR1BSIGludG8KLSAgICAgICAgICAgIC8vIGJhc2VGb3JHZXRHUFIgYmVjYXVzZSBpZiB3
ZSBmYWlsIGFueSBvZiB0aGUgY2hlY2tzIHRoZW4gd2Ugd291bGQgaGF2ZSB0aGUgd3JvbmcgdmFs
dWUgaW4gYmFzZUdQUgotICAgICAgICAgICAgLy8gb24gdGhlIHNsb3cgcGF0aC4KLSAgICAgICAg
ICAgIGlmIChsb2FkVGFyZ2V0RnJvbVByb3h5KQotICAgICAgICAgICAgICAgIHN0dWJKaXQubW92
ZShzY3JhdGNoR1BSLCBiYXNlRm9yR2V0R1BSKTsKLSAgICAgICAgICAgIGJhc2VGb3JBY2Nlc3NH
UFIgPSBiYXNlRm9yR2V0R1BSOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgR1BSUmVnIGxvYWRl
ZFZhbHVlR1BSID0gSW52YWxpZEdQUlJlZzsKLSAgICBpZiAoa2luZCA9PSBHZXRVbmRlZmluZWQp
Ci0gICAgICAgIHN0dWJKaXQubW92ZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCB2YWx1ZVJl
Z3MpOwotICAgIGVsc2UgaWYgKGtpbmQgIT0gQ2FsbEN1c3RvbUdldHRlciAmJiBraW5kICE9IENh
bGxDdXN0b21TZXR0ZXIpIHsKLSAgICAgICAgaWYgKGtpbmQgPT0gR2V0VmFsdWUpCi0gICAgICAg
ICAgICBsb2FkZWRWYWx1ZUdQUiA9IHZhbHVlUmVncy5wYXlsb2FkR1BSKCk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSID0gc2NyYXRjaEdQUjsKLSAgICAgICAgCi0g
ICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSOwotICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zm
c2V0KSkKLSAgICAgICAgICAgIHN0b3JhZ2VHUFIgPSBiYXNlRm9yQWNjZXNzR1BSOwotICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlRm9yQWNjZXNzR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBsb2Fk
ZWRWYWx1ZUdQUik7Ci0gICAgICAgICAgICBzdG9yYWdlR1BSID0gbG9hZGVkVmFsdWVHUFI7Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgc3R1YkppdC5s
b2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgb2Zmc2V0UmVsYXRpdmVU
b0Jhc2Uob2Zmc2V0KSksIGxvYWRlZFZhbHVlR1BSKTsKLSNlbHNlCi0gICAgICAgIGlmIChraW5k
ID09IEdldFZhbHVlKQotICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc3RvcmFnZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uob2Zmc2V0KSArIFRhZ09m
ZnNldCksIHZhbHVlUmVncy50YWdHUFIoKSk7Ci0gICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKG9mZnNl
dCkgKyBQYXlsb2FkT2Zmc2V0KSwgbG9hZGVkVmFsdWVHUFIpOwotI2VuZGlmCi0gICAgfQotCi0g
ICAgLy8gU3R1ZmYgZm9yIGN1c3RvbSBnZXR0ZXJzLgotICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IG9wZXJhdGlvbkNhbGw7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgaGFuZGxlckNhbGw7Ci0K
LSAgICAvLyBTdHVmZiBmb3IgSlMgZ2V0dGVycy4KLSAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxh
YmVsUHRyIGFkZHJlc3NPZkxpbmtGdW5jdGlvbkNoZWNrOwotICAgIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIGZhc3RQYXRoQ2FsbDsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBzbG93UGF0aENhbGw7
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rSW5mbz4gY2FsbExpbmtJbmZvOwotCi0gICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzcywgZmFpbDsKLSAgICBpZiAoa2luZCAhPSBHZXRW
YWx1ZSAmJiBraW5kICE9IEdldFVuZGVmaW5lZCkgewotICAgICAgICAvLyBOZWVkIHRvIG1ha2Ug
c3VyZSB0aGF0IHdoZW5ldmVyIHRoaXMgY2FsbCBpcyBtYWRlIGluIHRoZSBmdXR1cmUsIHdlIHJl
bWVtYmVyIHRoZQotICAgICAgICAvLyBwbGFjZSB0aGF0IHdlIG1hZGUgaXQgZnJvbS4gSXQganVz
dCBzbyBoYXBwZW5zIHRvIGJlIHRoZSBwbGFjZSB0aGF0IHdlIGFyZSBhdAotICAgICAgICAvLyBy
aWdodCBub3chCi0gICAgICAgIHN0dWJKaXQuc3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKHN0dWJJbmZvLmNhbGxTaXRlSW5kZXguYml0cygpKSwKLSAgICAgICAgICAgIENDYWxs
SGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oSlNTdGFjazo6QXJn
dW1lbnRDb3VudCkpKTsKLQotICAgICAgICBpZiAoa2luZCA9PSBDYWxsR2V0dGVyIHx8IGtpbmQg
PT0gQ2FsbFNldHRlcikgewotICAgICAgICAgICAgLy8gQ3JlYXRlIGEgSlMgY2FsbCB1c2luZyBh
IEpTIGNhbGwgaW5saW5lIGNhY2hlLiBBc3N1bWUgdGhhdDoKLSAgICAgICAgICAgIC8vCi0gICAg
ICAgICAgICAvLyAtIFNQIGlzIGFsaWduZWQgYW5kIHJlcHJlc2VudHMgdGhlIGV4dGVudCBvZiB0
aGUgY2FsbGluZyBjb21waWxlcidzIHN0YWNrIHVzYWdlLgotICAgICAgICAgICAgLy8KLSAgICAg
ICAgICAgIC8vIC0gRlAgaXMgc2V0IGNvcnJlY3RseSAoaS5lLiBpdCBwb2ludHMgdG8gdGhlIGNh
bGxlcidzIGNhbGwgZnJhbWUgaGVhZGVyKS4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAv
LyAtIFNQIC0gRlAgaXMgYW4gYWxpZ25lZCBkaWZmZXJlbmNlLgotICAgICAgICAgICAgLy8KLSAg
ICAgICAgICAgIC8vIC0gQW55IGJ5dGUgYmV0d2VlbiBGUCAoZXhjbHVzaXZlKSBhbmQgU1AgKGlu
Y2x1c2l2ZSkgY291bGQgYmUgbGl2ZSBpbiB0aGUgY2FsbGluZwotICAgICAgICAgICAgLy8gICBj
b2RlLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIFRoZXJlZm9yZSwgd2UgdGVtcG9y
YXJpbHkgZ3JvdyB0aGUgc3RhY2sgZm9yIHRoZSBwdXJwb3NlIG9mIHRoZSBjYWxsIGFuZCB0aGVu
Ci0gICAgICAgICAgICAvLyBzaHJpbmsgaXQgYWZ0ZXIuCi0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIGNhbGxMaW5rSW5mbyA9IHN0ZDo6bWFrZV91bmlxdWU8Q2FsbExpbmtJbmZvPigpOwotCi0g
ICAgICAgICAgICAvLyBGSVhNRTogSWYgd2UgZ2VuZXJhdGVkIGEgcG9seW1vcnBoaWMgY2FsbCBz
dHViIHRoYXQganVtcGVkIGJhY2sgdG8gdGhlIGdldHRlcgotICAgICAgICAgICAgLy8gc3R1Yiwg
d2hpY2ggdGhlbiBqdW1wZWQgYmFjayB0byB0aGUgbWFpbiBjb2RlLCB0aGVuIHdlJ2QgaGF2ZSBh
IHJlYWNoYWJpbGl0eQotICAgICAgICAgICAgLy8gc2l0dWF0aW9uIHRoYXQgdGhlIEdDIGRvZXNu
J3Qga25vdyBhYm91dC4gVGhlIEdDIHdvdWxkIGVuc3VyZSB0aGF0IHRoZSBwb2x5bW9ycGhpYwot
ICAgICAgICAgICAgLy8gY2FsbCBzdHViIHN0YXllZCBhbGl2ZSwgYW5kIGl0IHdvdWxkIGVuc3Vy
ZSB0aGF0IHRoZSBtYWluIGNvZGUgc3RheWVkIGFsaXZlLCBidXQKLSAgICAgICAgICAgIC8vIGl0
IHdvdWxkbid0IGtub3cgdGhhdCB0aGUgZ2V0dGVyIHN0dWIgd2FzIGFsaXZlLiBJZGVhbGx5IEpJ
VCBzdHViIHJvdXRpbmVzIHdvdWxkCi0gICAgICAgICAgICAvLyBiZSBHQyBvYmplY3RzLCBhbmQg
dGhlbiB3ZSdkIGJlIGFibGUgdG8gc2F5IHRoYXQgdGhlIHBvbHltb3JwaGljIGNhbGwgc3R1YiBo
YXMgYQotICAgICAgICAgICAgLy8gcmVmZXJlbmNlIHRvIHRoZSBnZXR0ZXIgc3R1Yi4KLSAgICAg
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDg5MTQK
LSAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+ZGlzYWxsb3dTdHVicygpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNhbGws
IHN0dWJJbmZvLmNvZGVPcmlnaW4sIGxvYWRlZFZhbHVlR1BSKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGRvbmU7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIC8vIFRoZXJlIGlzIGEgJ3RoaXMnIGFyZ3VtZW50IGJ1dCBub3RoaW5nIGVsc2Uu
Ci0gICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlBhcmFtZXRlcnMgPSAxOwotICAgICAgICAg
ICAgLy8gLi4uIHVubGVzcyB3ZSdyZSBjYWxsaW5nIGEgc2V0dGVyLgotICAgICAgICAgICAgaWYg
KGtpbmQgPT0gQ2FsbFNldHRlcikKLSAgICAgICAgICAgICAgICBudW1iZXJPZlBhcmFtZXRlcnMr
KzsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gR2V0IHRoZSBhY2Nlc3NvcjsgaWYgdGhl
cmUgYWluJ3Qgb25lIHRoZW4gdGhlIHJlc3VsdCBpcyBqc1VuZGVmaW5lZCgpLgotICAgICAgICAg
ICAgaWYgKGtpbmQgPT0gQ2FsbFNldHRlcikgewotICAgICAgICAgICAgICAgIHN0dWJKaXQubG9h
ZFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobG9hZGVk
VmFsdWVHUFIsIEdldHRlclNldHRlcjo6b2Zmc2V0T2ZTZXR0ZXIoKSksCi0gICAgICAgICAgICAg
ICAgICAgIGxvYWRlZFZhbHVlR1BSKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgc3R1YkppdC5sb2FkUHRyKAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhsb2FkZWRWYWx1ZUdQUiwgR2V0dGVyU2V0dGVyOjpvZmZzZXRPZkdldHRlcigp
KSwKLSAgICAgICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgcmV0dXJuVW5kZWZpbmVkID0gc3R1Ykpp
dC5icmFuY2hUZXN0UHRyKAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBs
b2FkZWRWYWx1ZUdQUik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHVuc2lnbmVkIG51bWJl
ck9mUmVnc0ZvckNhbGwgPQotICAgICAgICAgICAgICAgIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRl
clNpemUgKyBudW1iZXJPZlBhcmFtZXRlcnM7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHVu
c2lnbmVkIG51bWJlck9mQnl0ZXNGb3JDYWxsID0KLSAgICAgICAgICAgICAgICBudW1iZXJPZlJl
Z3NGb3JDYWxsICogc2l6ZW9mKFJlZ2lzdGVyKSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgdW5zaWduZWQgYWxpZ25lZE51bWJlck9mQnl0ZXNG
b3JDYWxsID0KLSAgICAgICAgICAgICAgICBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tB
bGlnbm1lbnRCeXRlcygpLCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIHN0dWJKaXQuc3ViUHRyKAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxsKSwKLSAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyBjYWxsZWVGcmFtZSA9IE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpzdGFj
a1BvaW50ZXJSZWdpc3RlciwKLSAgICAgICAgICAgICAgICAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90
PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
c3R1YkppdC5zdG9yZTMyKAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIobnVtYmVyT2ZQYXJhbWV0ZXJzKSwKLSAgICAgICAgICAgICAgICBjYWxsZWVGcmFtZS53
aXRoT2Zmc2V0KAotICAgICAgICAgICAgICAgICAgICBKU1N0YWNrOjpBcmd1bWVudENvdW50ICog
c2l6ZW9mKFJlZ2lzdGVyKSArIFBheWxvYWRPZmZzZXQpKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgc3R1YkppdC5zdG9yZUNlbGwoCi0gICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIs
IGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoSlNTdGFjazo6Q2FsbGVlICogc2l6ZW9mKFJlZ2lzdGVy
KSkpOwotCi0gICAgICAgICAgICBzdHViSml0LnN0b3JlQ2VsbCgKLSAgICAgICAgICAgICAgICBi
YXNlRm9yR2V0R1BSLAotICAgICAgICAgICAgICAgIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoCi0g
ICAgICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDApLm9mZnNldCgp
ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoa2lu
ZCA9PSBDYWxsU2V0dGVyKSB7Ci0gICAgICAgICAgICAgICAgc3R1YkppdC5zdG9yZVZhbHVlKAot
ICAgICAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MsCi0gICAgICAgICAgICAgICAgICAgIGNhbGxl
ZUZyYW1lLndpdGhPZmZzZXQoCi0gICAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudCgxKS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xv
d0Nhc2UgPSBzdHViSml0LmJyYW5jaFB0cldpdGhQYXRjaCgKLSAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGxvYWRlZFZhbHVlR1BSLCBhZGRyZXNzT2ZMaW5rRnVuY3Rp
b25DaGVjaywKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigw
KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZhc3RQYXRoQ2FsbCA9IHN0dWJKaXQubmVh
ckNhbGwoKTsKLQotICAgICAgICAgICAgc3R1YkppdC5hZGRQdHIoCi0gICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihjb2RlQmxvY2stPnN0YWNrUG9pbnRlck9mZnNl
dCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksCi0gICAgICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKLSAgICAgICAgICAgIGlmIChraW5kID09IENhbGxHZXR0ZXIpCi0gICAgICAg
ICAgICAgICAgc3R1YkppdC5zZXR1cFJlc3VsdHModmFsdWVSZWdzKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgZG9uZS5hcHBlbmQoc3R1YkppdC5qdW1wKCkpOwotICAgICAgICAgICAgc2xv
d0Nhc2UubGluaygmc3R1YkppdCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN0dWJKaXQu
bW92ZShsb2FkZWRWYWx1ZUdQUiwgR1BSSW5mbzo6cmVnVDApOwotI2lmIFVTRShKU1ZBTFVFMzJf
NjQpCi0gICAgICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpDZWxsVGFnKSwgR1BSSW5mbzo6cmVnVDEpOwotI2VuZGlmCi0gICAgICAgICAg
ICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZv
LmdldCgpKSwgR1BSSW5mbzo6cmVnVDIpOwotICAgICAgICAgICAgc2xvd1BhdGhDYWxsID0gc3R1
YkppdC5uZWFyQ2FsbCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzdHViSml0LmFkZFB0
cigKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGNvZGVCbG9j
ay0+c3RhY2tQb2ludGVyT2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwKLSAgICAgICAgICAg
ICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKLSAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgICAgICAgICAgaWYgKGtpbmQgPT0g
Q2FsbEdldHRlcikKLSAgICAgICAgICAgICAgICBzdHViSml0LnNldHVwUmVzdWx0cyh2YWx1ZVJl
Z3MpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBkb25lLmFwcGVuZChzdHViSml0Lmp1bXAo
KSk7Ci0gICAgICAgICAgICByZXR1cm5VbmRlZmluZWQubGluaygmc3R1YkppdCk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIGlmIChraW5kID09IENhbGxHZXR0ZXIpCi0gICAgICAgICAgICAg
ICAgc3R1YkppdC5tb3ZlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIHZhbHVlUmVncyk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGRvbmUubGluaygmc3R1YkppdCk7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAvLyBnZXR0ZXI6IEVuY29kZWRKU1ZhbHVlICgqR2V0VmFsdWVG
dW5jKShFeGVjU3RhdGUqLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgIC8vIHNldHRlcjogdm9pZCAoKlB1dFZh
bHVlRnVuYykoRXhlY1N0YXRlKiwgSlNPYmplY3QqIGJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAg
ICAgICAgaWYgKGtpbmQgPT0gQ2FsbEN1c3RvbUdldHRlcikKLSAgICAgICAgICAgICAgICBzdHVi
Sml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlRm9yQWNjZXNzR1BSLCBiYXNlRm9y
R2V0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihwcm9wZXJ0eU5hbWUuaW1wbCgp
KSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoYmFzZUZvckFjY2Vzc0dQUiwgYmFzZUZvckdldEdQUiwgdmFsdWVS
ZWdzLmdwcigpKTsKLSNlbHNlCi0gICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsQ3VzdG9tR2V0
dGVyKQotICAgICAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KGJhc2VGb3JBY2Nlc3NHUFIsIGJhc2VGb3JHZXRHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHBy
b3BlcnR5TmFtZS5pbXBsKCkpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBz
dHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlRm9yQWNjZXNzR1BSLCBiYXNl
Rm9yR2V0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcp
LCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB2YWx1ZVJlZ3MudGFnR1BSKCkpOwotI2VuZGlmCi0g
ICAgICAgICAgICBzdHViSml0LnN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAm
dm0tPnRvcENhbGxGcmFtZSk7Ci0KLSAgICAgICAgICAgIG9wZXJhdGlvbkNhbGwgPSBzdHViSml0
LmNhbGwoKTsKLSAgICAgICAgICAgIGlmIChraW5kID09IENhbGxDdXN0b21HZXR0ZXIpCi0gICAg
ICAgICAgICAgICAgc3R1YkppdC5zZXR1cFJlc3VsdHModmFsdWVSZWdzKTsKLSAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vRXhjZXB0aW9uID0gc3R1YkppdC5lbWl0RXhjZXB0aW9u
Q2hlY2soQ0NhbGxIZWxwZXJzOjpJbnZlcnRlZEV4Y2VwdGlvbkNoZWNrKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50cyhDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIodm0pLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgICAgICAgICBo
YW5kbGVyQ2FsbCA9IHN0dWJKaXQuY2FsbCgpOwotICAgICAgICAgICAgc3R1YkppdC5qdW1wVG9F
eGNlcHRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG5vRXhjZXB0aW9u
LmxpbmsoJnN0dWJKaXQpOwotICAgICAgICB9Ci0gICAgfQotICAgIGVtaXRSZXN0b3JlU2NyYXRj
aChzdHViSml0LCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc2NyYXRjaEdQUiwgc3VjY2VzcywgZmFp
bCwgZmFpbHVyZUNhc2VzKTsKLSAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwg
c3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCksIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7Ci0gICAg
aWYgKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAKLSAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3Rv
cmVTY3JhdGNoLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMsIHN1Y2Nlc3NMYWJlbCwgc2xv
d0Nhc2VMYWJlbCk7Ci0gICAgaWYgKGtpbmQgPT0gQ2FsbEN1c3RvbUdldHRlciB8fCBraW5kID09
IENhbGxDdXN0b21TZXR0ZXIpIHsKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhvcGVyYXRpb25D
YWxsLCBjdXN0b20pOwotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGhhbmRsZXJDYWxsLCBsb29r
dXBFeGNlcHRpb25IYW5kbGVyKTsKLSAgICB9IGVsc2UgaWYgKGtpbmQgPT0gQ2FsbEdldHRlciB8
fCBraW5kID09IENhbGxTZXR0ZXIpIHsKLSAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9j
YXRpb25zKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChzbG93UGF0aENhbGwpLAotICAg
ICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZihhZGRyZXNzT2ZMaW5rRnVuY3Rpb25DaGVj
ayksCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoZmFzdFBhdGhD
YWxsKSk7Ci0KLSAgICAgICAgcGF0Y2hCdWZmZXIubGluaygKLSAgICAgICAgICAgIHNsb3dQYXRo
Q2FsbCwgQ29kZUxvY2F0aW9uTGFiZWwodm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVy
YXRvcikuY29kZSgpKSk7Ci0gICAgfQotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBj
b2RlID0gRklOQUxJWkVfQ09ERV9GT1IoCi0gICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLCBwYXRj
aEJ1ZmZlciwKLSAgICAgICAgKCIlcyBhY2Nlc3Mgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAl
cCIsCi0gICAgICAgICAgICB0b1N0cmluZyhraW5kKSwgdG9DU3RyaW5nKCpleGVjLT5jb2RlQmxv
Y2soKSkuZGF0YSgpLAotICAgICAgICAgICAgc3VjY2Vzc0xhYmVsLmV4ZWN1dGFibGVBZGRyZXNz
KCkpKTsKLSAgICAKLSAgICBpZiAoa2luZCA9PSBDYWxsR2V0dGVyIHx8IGtpbmQgPT0gQ2FsbFNl
dHRlcikKLSAgICAgICAgc3R1YlJvdXRpbmUgPSBhZG9wdFJlZihuZXcgQWNjZXNzb3JDYWxsSklU
U3R1YlJvdXRpbmUoY29kZSwgKnZtLCBXVEY6Om1vdmUoY2FsbExpbmtJbmZvKSkpOwotICAgIGVs
c2UKLSAgICAgICAgc3R1YlJvdXRpbmUgPSBjcmVhdGVKSVRTdHViUm91dGluZShjb2RlLCAqdm0s
IGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHRydWUpOwotICAgIAotICAgIHJldHVybiB0
cnVlOwotfQotCiBlbnVtIElubGluZUNhY2hlQWN0aW9uIHsKICAgICBHaXZlVXBPbkNhY2hlLAog
ICAgIFJldHJ5Q2FjaGVMYXRlciwKQEAgLTYyOSwxMzIgKzIxNiw5OCBAQCBzdGF0aWMgSW5saW5l
Q2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeUlECiAgICAgaWYgKE9wdGlvbnM6OmZvcmNlSUNGYWls
dXJlKCkpCiAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogICAgIAotICAgIC8vIEZJWE1F
OiBXcml0ZSBhIHRlc3QgdGhhdCBwcm92ZXMgd2UgbmVlZCB0byBjaGVjayBmb3IgcmVjdXJzaW9u
IGhlcmUganVzdAotICAgIC8vIGxpa2UgdGhlIGludGVycHJldGVyIGRvZXMsIHRoZW4gYWRkIGEg
Y2hlY2sgZm9yIHJlY3Vyc2lvbi4KKyAgICAvLyBGSVhNRTogQ2FjaGUgcHJvcGVydHkgYWNjZXNz
IGZvciBpbW1lZGlhdGVzLgorICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQorICAgICAgICBy
ZXR1cm4gR2l2ZVVwT25DYWNoZTsKIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+
Y29kZUJsb2NrKCk7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgU2NyaXB0RXhlY3V0
YWJsZSogb3duZXIgPSBjb2RlQmxvY2stPm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpOworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAKLSAgICBpZiAoKGlzSlNBcnJheShiYXNlVmFsdWUpIHx8IGlz
SlNTdHJpbmcoYmFzZVZhbHVlKSkgJiYgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5sZW5ndGgpIHsKLSAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJS
ZWc+KHN0dWJJbmZvLnBhdGNoLmJhc2VHUFIpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAg
ICAgIEdQUlJlZyByZXN1bHRUYWdHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBh
dGNoLnZhbHVlVGFnR1BSKTsKLSNlbmRpZgotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gc3Rh
dGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZUdQUik7Ci0KLSAgICAgICAgTWFj
cm9Bc3NlbWJsZXIgc3R1YkppdDsKLQotICAgICAgICBpZiAoaXNKU0FycmF5KGJhc2VWYWx1ZSkp
IHsKLSAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gVGVtcFJlZ2lzdGVyU2V0KHN0dWJJ
bmZvLnBhdGNoLnVzZWRSZWdpc3RlcnMpLmdldEZyZWVHUFIoKTsKLSAgICAgICAgICAgIGJvb2wg
bmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSBmYWxzZTsKLQotICAgICAgICAgICAgaWYgKHNjcmF0Y2hH
UFIgPT0gSW52YWxpZEdQUlJlZykgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICAg
ICAgc2NyYXRjaEdQUiA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BS
LCByZXN1bHRHUFIpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICBzY3JhdGNoR1BSID0gQXNzZW1i
bHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHJlc3VsdEdQUiwgcmVzdWx0VGFn
R1BSKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIHN0dWJKaXQucHVzaFRvU2F2ZShzY3JhdGNo
R1BSKTsKLSAgICAgICAgICAgICAgICBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IHRydWU7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJl
Q2FzZXM7Ci0KLSAgICAgICAgICAgIHN0dWJKaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZUdQUiwgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwot
ICAgICAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFRlc3QzMihNYWNy
b0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MihJc0FycmF5KSkpOwotICAgICAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJy
YW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzaykpKTsKLQotICAgICAgICAgICAgc3R1
YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgc3R1YkppdC5sb2Fk
MzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlTdG9yYWdlOjpsZW5n
dGhPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVu
ZChzdHViSml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgc2NyYXRjaEdQUiwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSkpOwotCi0gICAgICAgICAgICBzdHViSml0
Lm1vdmUoc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAg
ICAgICAgc3R1YkppdC5vcjY0KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTY0KFRhZ1R5cGVO
dW1iZXIpLCByZXN1bHRHUFIpOwotI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgICAg
IHN0dWJKaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQz
MlRhZyksIHJlc3VsdFRhZ0dQUik7Ci0jZW5kaWYKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNz
Q2FzZT4gbmV3Q2FzZTsKIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2Vz
cywgZmFpbDsKLQotICAgICAgICAgICAgZW1pdFJlc3RvcmVTY3JhdGNoKHN0dWJKaXQsIG5lZWRU
b1Jlc3RvcmVTY3JhdGNoLCBzY3JhdGNoR1BSLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwg
c3R1YkppdCwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwotICAgICAgICAgICAg
aWYgKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRj
aEJ1ZmZlciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHN0dWJJbmZvLCBzdWNjZXNzLCBmYWlsLCBm
YWlsdXJlQ2FzZXMpOwotCi0gICAgICAgICAgICBzdHViSW5mby5zdHViUm91dGluZSA9IEZJTkFM
SVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAgICAgICAgICAgZXhlYy0+Y29kZUJsb2NrKCksIHBh
dGNoQnVmZmVyLAotICAgICAgICAgICAgICAgICgiR2V0QnlJZCBhcnJheSBsZW5ndGggc3R1YiBm
b3IgJXMsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICAgICAgICAgICAgIHRvQ1N0cmluZygq
ZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxh
YmVsQXRPZmZzZXQoCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZWx0
YUNhbGxUb0RvbmUpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKLQotICAgICAgICAgICAgcmVwbGFj
ZVdpdGhKdW1wKHN0dWJJbmZvLCBzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7
Ci0gICAgICAgICAgICByZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZCk7CisgICAgaWYgKGlzSlNBcnJheShiYXNlVmFsdWUp
ICYmIHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKQorICAgICAg
ICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Z2V0TGVuZ3RoKHZtLCBvd25lciwgQWNjZXNzQ2FzZTo6
QXJyYXlMZW5ndGgpOworICAgIGVsc2UgaWYgKGlzSlNTdHJpbmcoYmFzZVZhbHVlKSAmJiBwcm9w
ZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkKKyAgICAgICAgbmV3Q2Fz
ZSA9IEFjY2Vzc0Nhc2U6OmdldExlbmd0aCh2bSwgb3duZXIsIEFjY2Vzc0Nhc2U6OlN0cmluZ0xl
bmd0aCk7CisgICAgZWxzZSB7CisgICAgICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZSgpICYmICFz
bG90LmlzVW5zZXQoKSkKKyAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogCisgICAg
ICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7CisgICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSh2bSk7CisgICAgICAgIAorICAg
ICAgICAvLyBPcHRpbWl6ZSBzZWxmIGFjY2Vzcy4KKyAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hl
VHlwZSA9PSBDYWNoZVR5cGU6OlVuc2V0CisgICAgICAgICAgICAmJiBzbG90LmlzQ2FjaGVhYmxl
VmFsdWUoKQorICAgICAgICAgICAgJiYgc2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZQorICAg
ICAgICAgICAgJiYgIXNsb3Qud2F0Y2hwb2ludFNldCgpCisgICAgICAgICAgICAmJiBNYWNyb0Fz
c2VtYmxlcjo6aXNDb21wYWN0UHRyQWxpZ25lZEFkZHJlc3NPZmZzZXQobWF4T2Zmc2V0UmVsYXRp
dmVUb1BhdGNoZWRTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKQorICAgICAgICAgICAgJiYg
YWN0aW9uRm9yQ2VsbCh2bSwgYmFzZUNlbGwpID09IEF0dGVtcHRUb0NhY2hlCisgICAgICAgICAg
ICAmJiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKKyAgICAg
ICAgICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZt
LCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAgICAgIHJlcGF0Y2hCeUlkU2VsZkFjY2Vz
cyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIG9w
ZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgdHJ1ZSk7CisgICAgICAgICAgICBzdHViSW5mby5pbml0
R2V0QnlJZFNlbGYodm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSwg
c2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVy
OwogICAgICAgICB9CiAKLSAgICAgICAgLy8gU3RyaW5nLmxlbmd0aCBjYXNlCi0gICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGZhaWx1cmUgPSBzdHViSml0LmJyYW5jaDgoTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnR5
cGVJbmZvVHlwZU9mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihTdHJpbmdU
eXBlKSk7Ci0KLSAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNTdHJpbmc6Om9mZnNldE9mTGVuZ3RoKCkpLCByZXN1bHRHUFIpOwotCi0jaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICAgICAgc3R1YkppdC5vcjY0KEFzc2VtYmx5SGVscGVyczo6VHJ1
c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpLCByZXN1bHRHUFIpOwotI2VsaWYgVVNFKEpTVkFMVUUz
Ml82NCkKLSAgICAgICAgc3R1YkppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkludDMyVGFnKSwgcmVzdWx0VGFnR1BSKTsKLSNlbmRpZgorICAgICAgICBib29s
IGxvYWRUYXJnZXRGcm9tUHJveHkgPSBmYWxzZTsKKyAgICAgICAgaWYgKGJhc2VDZWxsLT50eXBl
KCkgPT0gUHVyZUZvcndhcmRpbmdQcm94eVR5cGUpIHsKKyAgICAgICAgICAgIGJhc2VWYWx1ZSA9
IGpzQ2FzdDxKU1Byb3h5Kj4oYmFzZUNlbGwpLT50YXJnZXQoKTsKKyAgICAgICAgICAgIGJhc2VD
ZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOworICAgICAgICAgICAgc3RydWN0dXJlID0gYmFzZUNl
bGwtPnN0cnVjdHVyZSh2bSk7CisgICAgICAgICAgICBsb2FkVGFyZ2V0RnJvbVByb3h5ID0gdHJ1
ZTsKKyAgICAgICAgfQogCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3MgPSBz
dHViSml0Lmp1bXAoKTsKKyAgICAgICAgSW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9uID0gYWN0aW9u
Rm9yQ2VsbCh2bSwgYmFzZUNlbGwpOworICAgICAgICBpZiAoYWN0aW9uICE9IEF0dGVtcHRUb0Nh
Y2hlKQorICAgICAgICAgICAgcmV0dXJuIGFjdGlvbjsKIAotICAgICAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKCp2bSwgc3R1YkppdCwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkNhbkZhaWwp
OwotICAgICAgICBpZiAocGF0Y2hCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkKLSAgICAgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQg
PSBzbG90LmlzVW5zZXQoKSA/IGludmFsaWRPZmZzZXQgOiBzbG90LmNhY2hlZE9mZnNldCgpOwog
ICAgICAgICAKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0Rv
bmUpKTsKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlLCBzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dD
YXNlKSk7Ci0KLSAgICAgICAgc3R1YkluZm8uc3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZP
Ul9TVFVCKAotICAgICAgICAgICAgZXhlYy0+Y29kZUJsb2NrKCksIHBhdGNoQnVmZmVyLAotICAg
ICAgICAgICAgKCJHZXRCeUlkIHN0cmluZyBsZW5ndGggc3R1YiBmb3IgJXMsIHJldHVybiBwb2lu
dCAlcCIsCi0gICAgICAgICAgICAgICAgdG9DU3RyaW5nKCpleGVjLT5jb2RlQmxvY2soKSkuZGF0
YSgpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgKLSAgICAgICAg
ICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKS5leGVjdXRhYmxlQWRk
cmVzcygpKSk7CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNl
dDsKKyAgICAgICAgaWYgKHNsb3QuaXNVbnNldCgpIHx8IHNsb3Quc2xvdEJhc2UoKSAhPSBiYXNl
VmFsdWUpIHsKKyAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkucHJvaGliaXRz
UHJvcGVydHlDYWNoaW5nKCkgfHwgc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
aWYgKHNsb3QuaXNVbnNldCgpKSB7CisgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2Vu
ZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNzKAorICAgICAgICAgICAgICAgICAgICB2bSwg
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBwcm9wZXJ0eU5h
bWUuaW1wbCgpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY29uZGl0
aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCisgICAg
ICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBz
dHJ1Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlO
YW1lLmltcGwoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlm
ICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVw
T25DYWNoZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgb2Zmc2V0ID0gc2xvdC5pc1Vuc2V0
KCkgPyBpbnZhbGlkT2Zmc2V0IDogY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zm
c2V0KCk7CisgICAgICAgIH0KIAotICAgICAgICByZXBsYWNlV2l0aEp1bXAoc3R1YkluZm8sIHN0
dWJJbmZvLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKLSAgICAgICAgcmVwYXRjaENhbGwo
Y29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWQp
OworICAgICAgICBBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBlIHR5cGU7CisgICAgICAgIGlmIChzbG90
LmlzQ2FjaGVhYmxlVmFsdWUoKSkKKyAgICAgICAgICAgIHR5cGUgPSBBY2Nlc3NDYXNlOjpMb2Fk
OworICAgICAgICBlbHNlIGlmIChzbG90LmlzVW5zZXQoKSkKKyAgICAgICAgICAgIHR5cGUgPSBB
Y2Nlc3NDYXNlOjpNaXNzOworICAgICAgICBlbHNlIGlmIChzbG90LmlzQ2FjaGVhYmxlR2V0dGVy
KCkpCisgICAgICAgICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6R2V0dGVyOworICAgICAgICBlbHNl
CisgICAgICAgICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6Q3VzdG9tR2V0dGVyOwogCi0gICAgICAg
IHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CisgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpn
ZXQoCisgICAgICAgICAgICB2bSwgb3duZXIsIHR5cGUsIG9mZnNldCwgc3RydWN0dXJlLCBjb25k
aXRpb25TZXQsIGxvYWRUYXJnZXRGcm9tUHJveHksCisgICAgICAgICAgICBzbG90LndhdGNocG9p
bnRTZXQoKSwgc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpID8gc2xvdC5jdXN0b21HZXR0ZXIoKSA6
IG51bGxwdHIpOwogICAgIH0KIAotICAgIC8vIEZJWE1FOiBDYWNoZSBwcm9wZXJ0eSBhY2Nlc3Mg
Zm9yIGltbWVkaWF0ZXMuCi0gICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCi0gICAgICAgIHJl
dHVybiBHaXZlVXBPbkNhY2hlOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyID0g
c3R1YkluZm8uYWRkQWNjZXNzQ2FzZSgKKyAgICAgICAgdm0sIGNvZGVCbG9jaywgcHJvcGVydHlO
YW1lLCBzdGQ6Om1vdmUobmV3Q2FzZSkpOwogCi0gICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkg
JiYgIXNsb3QuaXNVbnNldCgpKQorICAgIGlmICghY29kZVB0cikKICAgICAgICAgcmV0dXJuIEdp
dmVVcE9uQ2FjaGU7CiAKLSAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgp
OwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSgqdm0pOwot
Ci0gICAgSW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9uID0gYWN0aW9uRm9yQ2VsbCgqdm0sIGJhc2VD
ZWxsKTsKLSAgICBpZiAoYWN0aW9uICE9IEF0dGVtcHRUb0NhY2hlKQotICAgICAgICByZXR1cm4g
YWN0aW9uOwotCi0gICAgLy8gT3B0aW1pemUgc2VsZiBhY2Nlc3MuCi0gICAgaWYgKHNsb3QuaXND
YWNoZWFibGVWYWx1ZSgpCi0gICAgICAgICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUK
LSAgICAgICAgJiYgIXNsb3Qud2F0Y2hwb2ludFNldCgpCi0gICAgICAgICYmIE1hY3JvQXNzZW1i
bGVyOjppc0NvbXBhY3RQdHJBbGlnbmVkQWRkcmVzc09mZnNldChtYXhPZmZzZXRSZWxhdGl2ZVRv
UGF0Y2hlZFN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpKSB7Ci0gICAgICAgIHN0cnVjdHVy
ZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKCp2bSwgc2xvdC5jYWNoZWRP
ZmZzZXQoKSk7Ci0gICAgICAgIHJlcGF0Y2hCeUlkU2VsZkFjY2Vzcygqdm0sIGNvZGVCbG9jaywg
c3R1YkluZm8sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LmNhY2hlZE9mZnNldCgpLCBv
cGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0LCB0cnVlKTsKLSAgICAgICAgc3R1YkluZm8uaW5pdEdl
dEJ5SWRTZWxmKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsK
LSAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLSAgICB9Ci0KLSAgICByZXBhdGNoQ2Fs
bChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJ
ZEJ1aWxkTGlzdCk7CisgICAgcmVwbGFjZVdpdGhKdW1wKHN0dWJJbmZvLCBjb2RlUHRyKTsKKyAg
ICAKICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogfQogCkBAIC03NjYsMTEyICszMTksNiBA
QCB2b2lkIHJlcGF0Y2hHZXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWCiAgICAgICAgIHJlcGF0
Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9w
ZXJhdGlvbkdldEJ5SWQpOwogfQogCi1zdGF0aWMgdm9pZCBwYXRjaEp1bXBUb0dldEJ5SWRTdHVi
KFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSklUU3R1YlJvdXRpbmUqIHN0dWJSb3V0aW5l
KQotewotICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dl
dF9ieV9pZF9saXN0KTsKLSAgICBpZiAoc3R1YkluZm8udS5nZXRCeUlkTGlzdC5saXN0LT5kaWRT
ZWxmUGF0Y2hpbmcoKSkgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoCi0g
ICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KAotICAg
ICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksCi0gICAgICAgICAg
ICBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIHJlcGxhY2VXaXRoSnVtcChzdHViSW5mbywgc3R1
YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwotfQotCi1zdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24g
dHJ5QnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBj
b25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkKLSAg
ICAgICAgfHwgKCFzbG90LmlzQ2FjaGVhYmxlKCkgJiYgIXNsb3QuaXNVbnNldCgpKSkKLSAgICAg
ICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZh
bHVlLmFzQ2VsbCgpOwotICAgIGJvb2wgbG9hZFRhcmdldEZyb21Qcm94eSA9IGZhbHNlOwotICAg
IGlmIChiYXNlQ2VsbC0+dHlwZSgpID09IFB1cmVGb3J3YXJkaW5nUHJveHlUeXBlKSB7Ci0gICAg
ICAgIGJhc2VWYWx1ZSA9IGpzQ2FzdDxKU1Byb3h5Kj4oYmFzZUNlbGwpLT50YXJnZXQoKTsKLSAg
ICAgICAgYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7Ci0gICAgICAgIGxvYWRUYXJnZXRG
cm9tUHJveHkgPSB0cnVlOwotICAgIH0KLQotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0KLSAgICBJbmxpbmVD
YWNoZUFjdGlvbiBhY3Rpb24gPSBhY3Rpb25Gb3JDZWxsKCp2bSwgYmFzZUNlbGwpOwotICAgIGlm
IChhY3Rpb24gIT0gQXR0ZW1wdFRvQ2FjaGUpCi0gICAgICAgIHJldHVybiBhY3Rpb247Ci0KLSAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKnZtKTsKLSAgICBU
eXBlSW5mbyB0eXBlSW5mbyA9IHN0cnVjdHVyZS0+dHlwZUluZm8oKTsKLQotICAgIGlmIChzdHVi
SW5mby5wYXRjaC5zcGlsbE1vZGUgPT0gTmVlZFRvU3BpbGwpIHsKLSAgICAgICAgLy8gV2UgY2Fu
bm90IGRvIGFzIG11Y2ggaW5saW5lIGNhY2hpbmcgaWYgdGhlIHJlZ2lzdGVycyB3ZXJlIG5vdCBm
bHVzaGVkIHByaW9yIHRvIHRoaXMgR2V0QnlJZC4gSW4gcGFydGljdWxhciwKLSAgICAgICAgLy8g
bm9uLVZhbHVlIGNhY2hlZCBwcm9wZXJ0aWVzIHJlcXVpcmUgcGxhbnRpbmcgY2FsbHMsIHdoaWNo
IHJlcXVpcmVzIHJlZ2lzdGVycyB0byBoYXZlIGJlZW4gZmx1c2hlZC4gVGh1cywKLSAgICAgICAg
Ly8gaWYgcmVnaXN0ZXJzIHdlcmUgbm90IGZsdXNoZWQsIGRvbid0IGRvIG5vbi1WYWx1ZSBjYWNo
aW5nLgotICAgICAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpICYmICFzbG90LmlzVW5z
ZXQoKSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgIH0KLQotICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuaXNVbnNldCgpID8gaW52YWxpZE9mZnNldCA6IHNs
b3QuY2FjaGVkT2Zmc2V0KCk7Ci0gICAgCi0gICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQg
Y29uZGl0aW9uU2V0OwotICAgIGlmIChzbG90LmlzVW5zZXQoKSB8fCBzbG90LnNsb3RCYXNlKCkg
IT0gYmFzZVZhbHVlKSB7Ci0gICAgICAgIGlmICh0eXBlSW5mby5wcm9oaWJpdHNQcm9wZXJ0eUNh
Y2hpbmcoKSB8fCBzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgaWYgKHNsb3QuaXNVbnNldCgpKQotICAgICAgICAg
ICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNzKCp2bSwg
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBpZGVudC5pbXBs
KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNv
bmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudC5pbXBsKCkp
OwotCi0gICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHJl
dHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgIG9mZnNldCA9IHNsb3QuaXNVbnNldCgpID8g
aW52YWxpZE9mZnNldCA6IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgp
OwotICAgIH0KLSAgICAKLSAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0ID0gUG9seW1v
cnBoaWNHZXRCeUlkTGlzdDo6ZnJvbShzdHViSW5mbyk7Ci0gICAgaWYgKGxpc3QtPmlzRnVsbCgp
KSB7Ci0gICAgICAgIC8vIFdlIG5lZWQgdGhpcyBleHRyYSBjaGVjayBiZWNhdXNlIG9mIHJlY3Vy
c2lvbi4KLSAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgfQotICAgIAotICAgIFJl
ZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7Ci0gICAgYm9vbCByZXN1bHQgPSBnZW5l
cmF0ZUJ5SWRTdHViKAotICAgICAgICBleGVjLCBraW5kRm9yKHNsb3QpLCBpZGVudCwgY3VzdG9t
Rm9yKHNsb3QpLCBzdHViSW5mbywgY29uZGl0aW9uU2V0LCBzbG90LnNsb3RCYXNlKCksIG9mZnNl
dCwgCi0gICAgICAgIHN0cnVjdHVyZSwgbG9hZFRhcmdldEZyb21Qcm94eSwgc2xvdC53YXRjaHBv
aW50U2V0KCksIAotICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9m
ZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLAotICAgICAgICBDb2RlTG9jYXRp
b25MYWJlbChsaXN0LT5jdXJyZW50U2xvd1BhdGhUYXJnZXQoc3R1YkluZm8pKSwgc3R1YlJvdXRp
bmUpOwotICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAg
ICAKLSAgICBHZXRCeUlkQWNjZXNzOjpBY2Nlc3NUeXBlIGFjY2Vzc1R5cGU7Ci0gICAgaWYgKHNs
b3QuaXNDYWNoZWFibGVWYWx1ZSgpKQotICAgICAgICBhY2Nlc3NUeXBlID0gc2xvdC53YXRjaHBv
aW50U2V0KCkgPyBHZXRCeUlkQWNjZXNzOjpXYXRjaGVkU3R1YiA6IEdldEJ5SWRBY2Nlc3M6OlNp
bXBsZVN0dWI7Ci0gICAgZWxzZSBpZiAoc2xvdC5pc1Vuc2V0KCkpCi0gICAgICAgIGFjY2Vzc1R5
cGUgPSBHZXRCeUlkQWNjZXNzOjpTaW1wbGVNaXNzOwotICAgIGVsc2UgaWYgKHNsb3QuaXNDYWNo
ZWFibGVHZXR0ZXIoKSkKLSAgICAgICAgYWNjZXNzVHlwZSA9IEdldEJ5SWRBY2Nlc3M6OkdldHRl
cjsKLSAgICBlbHNlCi0gICAgICAgIGFjY2Vzc1R5cGUgPSBHZXRCeUlkQWNjZXNzOjpDdXN0b21H
ZXR0ZXI7Ci0gICAgCi0gICAgbGlzdC0+YWRkQWNjZXNzKEdldEJ5SWRBY2Nlc3MoCi0gICAgICAg
ICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgYWNjZXNzVHlwZSwgc3R1YlJvdXRp
bmUsIHN0cnVjdHVyZSwKLSAgICAgICAgY29uZGl0aW9uU2V0KSk7Ci0gICAgCi0gICAgcGF0Y2hK
dW1wVG9HZXRCeUlkU3R1YihzdHViSW5mbywgc3R1YlJvdXRpbmUuZ2V0KCkpOwotICAgIAotICAg
IHJldHVybiBsaXN0LT5pc0Z1bGwoKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7
Ci19Ci0KLXZvaWQgYnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFz
ZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xv
dCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIEdDU2FmZUNvbmN1
cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGV4ZWMtPmNvZGVCbG9jaygpLT5tX2xvY2ssIGV4ZWMtPnZt
KCkuaGVhcCk7Ci0gICAgCi0gICAgaWYgKHRyeUJ1aWxkR2V0QnlJRExpc3QoZXhlYywgYmFzZVZh
bHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvKSA9PSBHaXZlVXBPbkNhY2hlKQotICAg
ICAgICByZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkKTsKLX0KLQogc3RhdGljIFZfSklUT3BlcmF0aW9uX0VT
c2lKSkkgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5
U2xvdCAmc2xvdCwgUHV0S2luZCBwdXRLaW5kKQogewogICAgIGlmIChzbG90LmlzU3RyaWN0TW9k
ZSgpKSB7CkBAIC04ODQsMzU5ICszMzEsMTYgQEAgc3RhdGljIFZfSklUT3BlcmF0aW9uX0VTc2lK
SkkgYXBwcm9wcmlhdAogICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0OwogfQog
Ci1zdGF0aWMgVl9KSVRPcGVyYXRpb25fRVNzaUpKSSBhcHByb3ByaWF0ZUxpc3RCdWlsZGluZ1B1
dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEtpbmQgcHV0S2lu
ZCkKK3N0YXRpYyBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJIGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1
dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEtpbmQgcHV0S2lu
ZCkKIHsKICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkgewogICAgICAgICBpZiAocHV0S2lu
ZCA9PSBEaXJlY3QpCi0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0
cmljdEJ1aWxkTGlzdDsKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RCdWls
ZExpc3Q7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9w
dGltaXplOworICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOwog
ICAgIH0KICAgICBpZiAocHV0S2luZCA9PSBEaXJlY3QpCi0gICAgICAgIHJldHVybiBvcGVyYXRp
b25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0QnVpbGRMaXN0OwotICAgIHJldHVybiBvcGVyYXRpb25Q
dXRCeUlkTm9uU3RyaWN0QnVpbGRMaXN0OwotfQotCi1zdGF0aWMgYm9vbCBlbWl0UHV0UmVwbGFj
ZVN0dWIoCi0gICAgRXhlY1N0YXRlKiBleGVjLAotICAgIGNvbnN0IElkZW50aWZpZXImLAotICAg
IGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8sCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwg
ZmFpbHVyZUxhYmVsLAotICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4mIHN0dWJSb3V0aW5lKQot
ewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGlj
X2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKTsKLSNpZiBVU0UoSlNWQUxVRTMy
XzY0KQotICAgIEdQUlJlZyB2YWx1ZVRhZ0dQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1Yklu
Zm8ucGF0Y2gudmFsdWVUYWdHUFIpOwotI2VuZGlmCi0gICAgR1BSUmVnIHZhbHVlR1BSID0gc3Rh
dGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZUdQUik7Ci0KLSAgICBTY3JhdGNo
UmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHN0dWJJbmZvLnBhdGNoLnVzZWRSZWdpc3RlcnMp
OwotICAgIGFsbG9jYXRvci5sb2NrKGJhc2VHUFIpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0g
ICAgYWxsb2NhdG9yLmxvY2sodmFsdWVUYWdHUFIpOwotI2VuZGlmCi0gICAgYWxsb2NhdG9yLmxv
Y2sodmFsdWVHUFIpOwotICAgIAotICAgIEdQUlJlZyBzY3JhdGNoR1BSMSA9IGFsbG9jYXRvci5h
bGxvY2F0ZVNjcmF0Y2hHUFIoKTsKLQotICAgIENDYWxsSGVscGVycyBzdHViSml0KHZtLCBleGVj
LT5jb2RlQmxvY2soKSk7Ci0KLSAgICBzaXplX3QgbnVtYmVyT2ZQYWRkaW5nQnl0ZXMgPSBhbGxv
Y2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoc3R1YkppdCk7Ci0KLSAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBiYWRTdHJ1Y3R1cmUgPSBzdHViSml0LmJyYW5jaFN0cnVjdHVy
ZSgKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAotICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAotICAg
ICAgICBzdHJ1Y3R1cmUpOwotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBpZiAoaXNJbmxpbmVP
ZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpCi0gICAgICAgIHN0dWJKaXQuc3RvcmU2NCh2YWx1
ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9m
SW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0
KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHN0dWJKaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmU2NCh2YWx1ZUdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNldEluQnV0dGVyZmx5
KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7Ci0gICAgfQotI2VsaWYg
VVNFKEpTVkFMVUUzMl82NCkKLSAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZz
ZXQoKSkpIHsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBv
ZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1
ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxv
YWQpKSk7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsg
b2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFs
dWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcp
KSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hH
UFIxKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQo
KSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3Jp
cHRvciwgYXNCaXRzLnBheWxvYWQpKSk7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRh
Z0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNldEluQnV0dGVy
Zmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNF
VE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7Ci0gICAgfQotI2VuZGlm
Ci0gICAgCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzczsKLSAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBmYWlsdXJlOwotICAgIAotICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdp
c3RlcnMoKSkgewotICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9w
cGluZyhzdHViSml0LCBudW1iZXJPZlBhZGRpbmdCeXRlcyk7Ci0gICAgICAgIHN1Y2Nlc3MgPSBz
dHViSml0Lmp1bXAoKTsKLSAgICAgICAgCi0gICAgICAgIGJhZFN0cnVjdHVyZS5saW5rKCZzdHVi
Sml0KTsKLSAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmco
c3R1YkppdCwgbnVtYmVyT2ZQYWRkaW5nQnl0ZXMpOwotICAgICAgICBmYWlsdXJlID0gc3R1Ykpp
dC5qdW1wKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgp
OwotICAgICAgICBmYWlsdXJlID0gYmFkU3RydWN0dXJlOwotICAgIH0KLSAgICAKLSAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCksIEpJVENv
bXBpbGF0aW9uQ2FuRmFpbCk7Ci0gICAgaWYgKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRl
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHN1
Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZv
LnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZSwg
ZmFpbHVyZUxhYmVsKTsKLSAgICAgICAgICAgIAotICAgIHN0dWJSb3V0aW5lID0gRklOQUxJWkVf
Q09ERV9GT1JfU1RVQigKLSAgICAgICAgZXhlYy0+Y29kZUJsb2NrKCksIHBhdGNoQnVmZmVyLAot
ICAgICAgICAoIlB1dEJ5SWQgcmVwbGFjZSBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwK
LSAgICAgICAgICAgIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwgc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAgICAgICAgc3R1
YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAg
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIGVtaXRQdXRUcmFuc2l0aW9uU3R1
YigKLSAgICBFeGVjU3RhdGUqIGV4ZWMsIFZNKiB2bSwgU3RydWN0dXJlKiYgc3RydWN0dXJlLCBj
b25zdCBJZGVudGlmaWVyJiBpZGVudCwgCi0gICAgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCwKLSAgICBTdHJ1
Y3R1cmUqJiBvbGRTdHJ1Y3R1cmUsIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRp
b25TZXQpCi17Ci0gICAgUHJvcGVydHlOYW1lIHBuYW1lKGlkZW50KTsKLSAgICBvbGRTdHJ1Y3R1
cmUgPSBzdHJ1Y3R1cmU7Ci0gICAgaWYgKCFvbGRTdHJ1Y3R1cmUtPmlzT2JqZWN0KCkgfHwgb2xk
U3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSB8fCBwYXJzZUluZGV4KHBuYW1lKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgUHJvcGVydHlPZmZzZXQgcHJvcGVydHlPZmZzZXQ7Ci0gICAg
c3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3Ry
dWN0dXJlQ29uY3VycmVudGx5KG9sZFN0cnVjdHVyZSwgaWRlbnQuaW1wbCgpLCAwLCBwcm9wZXJ0
eU9mZnNldCk7Ci0KLSAgICBpZiAoIXN0cnVjdHVyZSB8fCAhc3RydWN0dXJlLT5pc09iamVjdCgp
IHx8IHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkgfHwgIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nl
c3Nlc0FyZUNhY2hlYWJsZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBTa2lw
IG9wdGltaXppbmcgdGhlIGNhc2Ugd2hlcmUgd2UgbmVlZCBhIHJlYWxsb2MsIGlmIHdlIGRvbid0
IGhhdmUKLSAgICAvLyBlbm91Z2ggcmVnaXN0ZXJzIHRvIG1ha2UgaXQgaGFwcGVuLgotICAgIGlm
IChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyA8IDYKLSAgICAgICAgJiYgb2xkU3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKQot
ICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3
aGVyZSB3ZSBuZWVkIHJlYWxsb2MsIGFuZCB0aGUgc3RydWN0dXJlIGhhcwotICAgIC8vIGluZGV4
aW5nIHN0b3JhZ2UuCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBza2lwIHRoaXMhIEltcGxl
bWVudCBpdCEKLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTMwOTE0Ci0gICAgaWYgKG9sZFN0cnVjdHVyZS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHB1dEtpbmQgPT0gTm90RGlyZWN0KSB7
Ci0gICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0
dGVyTWlzcygKLSAgICAgICAgICAgICp2bSwgZXhlYy0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0
YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7Ci0gICAgICAgIGlmICghY29u
ZGl0aW9uU2V0LmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICBDb2RlTG9jYXRpb25MYWJlbCBmYWlsdXJlTGFiZWwgPSBzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNl
KTsKLSAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+JiBzdHViUm91dGluZSA9IHN0dWJJbmZvLnN0
dWJSb3V0aW5lOwotCi0gICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0
dWJJbmZvLnBhdGNoLmJhc2VHUFIpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgR1BSUmVn
IHZhbHVlVGFnR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZVRh
Z0dQUik7Ci0jZW5kaWYKLSAgICBHUFJSZWcgdmFsdWVHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+
KHN0dWJJbmZvLnBhdGNoLnZhbHVlR1BSKTsKLSAgICAKLSAgICBTY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3IgYWxsb2NhdG9yKHN0dWJJbmZvLnBhdGNoLnVzZWRSZWdpc3RlcnMpOwotICAgIGFsbG9j
YXRvci5sb2NrKGJhc2VHUFIpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgYWxsb2NhdG9y
LmxvY2sodmFsdWVUYWdHUFIpOwotI2VuZGlmCi0gICAgYWxsb2NhdG9yLmxvY2sodmFsdWVHUFIp
OwotICAgIAotICAgIENDYWxsSGVscGVycyBzdHViSml0KHZtKTsKLSAgICAKLSAgICBib29sIG5l
ZWRUaGlyZFNjcmF0Y2ggPSBmYWxzZTsKLSAgICBpZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKQotICAgICAgICAmJiBv
bGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgbmVlZFRoaXJkU2Ny
YXRjaCA9IHRydWU7Ci0gICAgfQotCi0gICAgR1BSUmVnIHNjcmF0Y2hHUFIxID0gYWxsb2NhdG9y
LmFsbG9jYXRlU2NyYXRjaEdQUigpOwotICAgIEFTU0VSVChzY3JhdGNoR1BSMSAhPSBiYXNlR1BS
KTsKLSAgICBBU1NFUlQoc2NyYXRjaEdQUjEgIT0gdmFsdWVHUFIpOwotICAgIAotICAgIEdQUlJl
ZyBzY3JhdGNoR1BSMiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKLSAgICBBU1NF
UlQoc2NyYXRjaEdQUjIgIT0gYmFzZUdQUik7Ci0gICAgQVNTRVJUKHNjcmF0Y2hHUFIyICE9IHZh
bHVlR1BSKTsKLSAgICBBU1NFUlQoc2NyYXRjaEdQUjIgIT0gc2NyYXRjaEdQUjEpOwotCi0gICAg
R1BSUmVnIHNjcmF0Y2hHUFIzOwotICAgIGlmIChuZWVkVGhpcmRTY3JhdGNoKSB7Ci0gICAgICAg
IHNjcmF0Y2hHUFIzID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwotICAgICAgICBB
U1NFUlQoc2NyYXRjaEdQUjMgIT0gYmFzZUdQUik7Ci0gICAgICAgIEFTU0VSVChzY3JhdGNoR1BS
MyAhPSB2YWx1ZUdQUik7Ci0gICAgICAgIEFTU0VSVChzY3JhdGNoR1BSMyAhPSBzY3JhdGNoR1BS
MSk7Ci0gICAgICAgIEFTU0VSVChzY3JhdGNoR1BSMyAhPSBzY3JhdGNoR1BSMik7Ci0gICAgfSBl
bHNlCi0gICAgICAgIHNjcmF0Y2hHUFIzID0gSW52YWxpZEdQUlJlZzsKLSAgICAKLSAgICBzaXpl
X3QgbnVtYmVyT2ZQYWRkaW5nQnl0ZXMgPSBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3Rl
cnNCeVB1c2hpbmcoc3R1YkppdCk7Ci0KLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFp
bHVyZUNhc2VzOwotICAgICAgICAgICAgCi0gICAgQVNTRVJUKG9sZFN0cnVjdHVyZS0+dHJhbnNp
dGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7Ci0gICAgCi0gICAgZmFpbHVy
ZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFN0cnVjdHVyZSgKLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgCi0gICAgICAgIG9sZFN0cnVjdHVyZSkp
OwotICAgIAotICAgIGNoZWNrT2JqZWN0UHJvcGVydHlDb25kaXRpb25zKAotICAgICAgICBjb25k
aXRpb25TZXQsIGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mbywgc3R1YkppdCwgZmFpbHVyZUNh
c2VzLCBzY3JhdGNoR1BSMSk7Ci0KLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1Bh
dGg7Ci0gICAgCi0gICAgYm9vbCBzY3JhdGNoR1BSMUhhc1N0b3JhZ2UgPSBmYWxzZTsKLSAgICAK
LSAgICBpZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IHN0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKLSAgICAgICAgQ29waWVk
QWxsb2NhdG9yKiBjb3BpZWRBbGxvY2F0b3IgPSAmdm0tPmhlYXAuc3RvcmFnZUFsbG9jYXRvcigp
OwotICAgICAgICAKLSAgICAgICAgaWYgKCFvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCkpIHsKLSAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cigmY29waWVkQWxsb2NhdG9yLT5tX2N1
cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVu
ZChzdHViSml0LmJyYW5jaFN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6U2lnbmVkLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BSMSkpOwotICAgICAgICAgICAg
c3R1YkppdC5zdG9yZVB0cihzY3JhdGNoR1BSMSwgJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50
UmVtYWluaW5nKTsKLSAgICAgICAgICAgIHN0dWJKaXQubmVnUHRyKHNjcmF0Y2hHUFIxKTsKLSAg
ICAgICAgICAgIHN0dWJKaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3Mo
JmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UGF5bG9hZEVuZCksIHNjcmF0Y2hHUFIxKTsKLSAg
ICAgICAgICAgIHN0dWJKaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2l6
ZW9mKEpTVmFsdWUpKSwgc2NyYXRjaEdQUjEpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgc2l6ZV90IG9sZFNpemUgPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBz
aXplb2YoSlNWYWx1ZSk7Ci0gICAgICAgICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQ
UjMpOwotICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3Vy
cmVudFJlbWFpbmluZywgc2NyYXRjaEdQUjEpOwotICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5k
KHN0dWJKaXQuYnJhbmNoU3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpTaWduZWQsIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIobmV3U2l6ZSksIHNjcmF0Y2hHUFIxKSk7Ci0gICAgICAgICAgICBz
dHViSml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIxLCAmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRS
ZW1haW5pbmcpOwotICAgICAgICAgICAgc3R1YkppdC5uZWdQdHIoc2NyYXRjaEdQUjEpOwotICAg
ICAgICAgICAgc3R1YkppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcygm
Y29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRQYXlsb2FkRW5kKSwgc2NyYXRjaEdQUjEpOwotICAg
ICAgICAgICAgc3R1YkppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzaXpl
b2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgICAgICAvLyBXZSBoYXZlIHNjcmF0
Y2hHUFIxID0gbmV3IHN0b3JhZ2UsIHNjcmF0Y2hHUFIzID0gb2xkIHN0b3JhZ2UsIHNjcmF0Y2hH
UFIyID0gYXZhaWxhYmxlCi0gICAgICAgICAgICBmb3IgKHNpemVfdCBvZmZzZXQgPSAwOyBvZmZz
ZXQgPCBvbGRTaXplOyBvZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKSkgewotICAgICAgICAgICAgICAg
IHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMywgLXN0
YXRpY19jYXN0PHB0cmRpZmZfdD4ob2Zmc2V0ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZv
aWQqKSkpLCBzY3JhdGNoR1BSMik7Ci0gICAgICAgICAgICAgICAgc3R1YkppdC5zdG9yZVB0cihz
Y3JhdGNoR1BSMiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIC1zdGF0aWNf
Y2FzdDxwdHJkaWZmX3Q+KG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZih2b2lkKikp
KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHN0dWJKaXQu
c3RvcmVQdHIoc2NyYXRjaEdQUjEsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOwotICAgICAgICBzY3JhdGNoR1BSMUhhc1N0b3Jh
Z2UgPSB0cnVlOwotICAgIH0KLQotICAgIEFTU0VSVChvbGRTdHJ1Y3R1cmUtPnR5cGVJbmZvKCku
dHlwZSgpID09IHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCkpOwotICAgIEFTU0VSVChvbGRT
dHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdzKCkgPT0gc3RydWN0dXJlLT50eXBl
SW5mbygpLmlubGluZVR5cGVGbGFncygpKTsKLSAgICBBU1NFUlQob2xkU3RydWN0dXJlLT5pbmRl
eGluZ1R5cGUoKSA9PSBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKTsKLSNpZiBVU0UoSlNWQUxV
RTY0KQotICAgIHVpbnQzMl90IHZhbCA9IHN0cnVjdHVyZS0+aWQoKTsKLSNlbHNlCi0gICAgdWlu
dDMyX3QgdmFsID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4oc3RydWN0dXJlLT5pZCgpKTsK
LSNlbmRpZgotICAgIHN0dWJKaXQuc3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KHZhbCksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSkpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgaWYgKGlzSW5saW5lT2Zmc2V0
KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKQotICAgICAgICBzdHViSml0LnN0b3JlNjQodmFsdWVHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGlu
ZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAq
IHNpemVvZihKU1ZhbHVlKSkpOwotICAgIGVsc2UgewotICAgICAgICBpZiAoIXNjcmF0Y2hHUFIx
SGFzU3RvcmFnZSkKLSAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BS
MSk7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmU2NCh2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkp
ICogc2l6ZW9mKEpTVmFsdWUpKSk7Ci0gICAgfQotI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAg
ICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpIHsKLSAgICAgICAgc3R1
YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uo
c2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
RW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7Ci0gICAgICAgIHN0dWJK
aXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdl
KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9G
KEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgaWYgKCFzY3JhdGNoR1BSMUhhc1N0b3JhZ2UpCi0gICAgICAgICAgICBzdHViSml0Lmxv
YWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgc2NyYXRjaEdQUjEpOwotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVH
UFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZs
eShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRP
RihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKLSAgICAgICAgc3R1
YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNo
R1BSMSwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNW
YWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRh
ZykpKTsKLSAgICB9Ci0jZW5kaWYKLSAgICAKLSAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVm
ZmVyID0gbnVsbHB0cjsKLQotI2lmIEVOQUJMRShHR0MpCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgY2FsbEZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyOwotICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9m
TGluZUNhcGFjaXR5KCkgIT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0g
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBz
dHViSml0Lmp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKGJhc2VHUFIpOwotICAgICAgICBXcml0
ZUJhcnJpZXJCdWZmZXImIHdyaXRlQmFycmllckJ1ZmZlciA9IHN0dWJKaXQudm0oKS0+aGVhcC53
cml0ZUJhcnJpZXJCdWZmZXIoKTsKLSAgICAgICAgc3R1YkppdC5sb2FkMzIod3JpdGVCYXJyaWVy
QnVmZmVyLmN1cnJlbnRJbmRleEFkZHJlc3MoKSwgc2NyYXRjaEdQUjIpOwotICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBuZWVkVG9GbHVzaCA9Ci0gICAgICAgICAgICBzdHViSml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHNjcmF0Y2hHUFIyLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKHdyaXRlQmFycmllckJ1ZmZlci5jYXBhY2l0eSgpKSk7Ci0KLSAg
ICAgICAgc3R1YkppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBzY3Jh
dGNoR1BSMik7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUzMihzY3JhdGNoR1BSMiwgd3JpdGVCYXJy
aWVyQnVmZmVyLmN1cnJlbnRJbmRleEFkZHJlc3MoKSk7Ci0KLSAgICAgICAgc3R1YkppdC5tb3Zl
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHdyaXRlQmFycmllckJ1ZmZlci5idWZmZXIo
KSksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgLy8gV2UgdXNlIGFuIG9mZnNldCBvZiAtc2l6ZW9m
KHZvaWQqKSBiZWNhdXNlIHdlIGFscmVhZHkgYWRkZWQgMSB0byBzY3JhdGNoR1BSMi4KLSAgICAg
ICAgc3R1YkppdC5zdG9yZVB0cihiYXNlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHNj
cmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBzdGF0aWNf
Y2FzdDxpbnQzMl90Pigtc2l6ZW9mKHZvaWQqKSkpKTsKLQotICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBkb25lV2l0aEJhcnJpZXIgPSBzdHViSml0Lmp1bXAoKTsKLSAgICAgICAgbmVlZFRv
Rmx1c2gubGluaygmc3R1YkppdCk7Ci0KLSAgICAgICAgc2NyYXRjaEJ1ZmZlciA9IHZtLT5zY3Jh
dGNoQnVmZmVyRm9yU2l6ZShhbGxvY2F0b3IuZGVzaXJlZFNjcmF0Y2hCdWZmZXJTaXplRm9yQ2Fs
bCgpKTsKLSAgICAgICAgYWxsb2NhdG9yLnByZXNlcnZlVXNlZFJlZ2lzdGVyc1RvU2NyYXRjaEJ1
ZmZlckZvckNhbGwoc3R1YkppdCwgc2NyYXRjaEJ1ZmZlciwgc2NyYXRjaEdQUjIpOwotICAgICAg
ICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlR1BSKTsKLSAgICAgICAg
Y2FsbEZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyID0gc3R1YkppdC5jYWxsKCk7Ci0gICAgICAgIGFs
bG9jYXRvci5yZXN0b3JlVXNlZFJlZ2lzdGVyc0Zyb21TY3JhdGNoQnVmZmVyRm9yQ2FsbChzdHVi
Sml0LCBzY3JhdGNoQnVmZmVyLCBzY3JhdGNoR1BSMik7Ci0KLSAgICAgICAgZG9uZVdpdGhCYXJy
aWVyLmxpbmsoJnN0dWJKaXQpOwotICAgICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxp
bmsoJnN0dWJKaXQpOwotICAgIH0KLSNlbmRpZgotCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
c3VjY2VzczsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsdXJlOwotICAgICAgICAgICAg
Ci0gICAgaWYgKGFsbG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygpKSB7Ci0gICAgICAgIGFsbG9j
YXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKHN0dWJKaXQsIG51bWJlck9mUGFk
ZGluZ0J5dGVzKTsKLSAgICAgICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOwotCi0gICAgICAg
IGZhaWx1cmVDYXNlcy5saW5rKCZzdHViSml0KTsKLSAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVS
ZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoc3R1YkppdCwgbnVtYmVyT2ZQYWRkaW5nQnl0ZXMpOwot
ICAgICAgICBmYWlsdXJlID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHN1
Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBv
cGVyYXRpb25DYWxsOwotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3NJblNsb3dQYXRo
OwotICAgIAotICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gb2xkU3Ry
dWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgIHNsb3dQYXRoLmxpbmsoJnN0
dWJKaXQpOwotICAgICAgICAKLSAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3Rl
cnNCeVBvcHBpbmcoc3R1YkppdCwgbnVtYmVyT2ZQYWRkaW5nQnl0ZXMpOwotICAgICAgICBpZiAo
IXNjcmF0Y2hCdWZmZXIpCi0gICAgICAgICAgICBzY3JhdGNoQnVmZmVyID0gdm0tPnNjcmF0Y2hC
dWZmZXJGb3JTaXplKGFsbG9jYXRvci5kZXNpcmVkU2NyYXRjaEJ1ZmZlclNpemVGb3JDYWxsKCkp
OwotICAgICAgICBhbGxvY2F0b3IucHJlc2VydmVVc2VkUmVnaXN0ZXJzVG9TY3JhdGNoQnVmZmVy
Rm9yQ2FsbChzdHViSml0LCBzY3JhdGNoQnVmZmVyLCBzY3JhdGNoR1BSMSk7Ci0jaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFz
ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMihzbG90LmNhY2hlZE9mZnNldCgpKSwgdmFsdWVHUFIpOwotI2Vs
c2UKLSAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUdQUiwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMihzbG90LmNhY2hlZE9mZnNldCgpKSwgdmFsdWVHUFIsIHZhbHVlVGFnR1BS
KTsKLSNlbmRpZgotICAgICAgICBvcGVyYXRpb25DYWxsID0gc3R1YkppdC5jYWxsKCk7Ci0gICAg
ICAgIGFsbG9jYXRvci5yZXN0b3JlVXNlZFJlZ2lzdGVyc0Zyb21TY3JhdGNoQnVmZmVyRm9yQ2Fs
bChzdHViSml0LCBzY3JhdGNoQnVmZmVyLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIHN1Y2Nlc3NJ
blNsb3dQYXRoID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgfQotICAgIAotICAgIExpbmtCdWZmZXIg
cGF0Y2hCdWZmZXIoKnZtLCBzdHViSml0LCBleGVjLT5jb2RlQmxvY2soKSwgSklUQ29tcGlsYXRp
b25DYW5GYWlsKTsKLSAgICBpZiAocGF0Y2hCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywg
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGVsdGFDYWxsVG9Eb25lKSk7Ci0gICAgaWYgKGFsbG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygp
KQotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmUsIGZhaWx1cmVMYWJlbCk7Ci0gICAg
ZWxzZQotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlcywgZmFpbHVyZUxhYmVs
KTsKLSAgICBpZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG9wZXJh
dGlvbkNhbGwsIG9wZXJhdGlvblJlYWxsb2NhdGVTdG9yYWdlQW5kRmluaXNoUHV0KTsKLSAgICAg
ICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzSW5TbG93UGF0aCwgc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSk7
Ci0jaWYgRU5BQkxFKEdHQykKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsRmx1c2hXcml0
ZUJhcnJpZXJCdWZmZXIsIG9wZXJhdGlvbkZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKTsKLSNlbmRp
ZgotICAgIH0KLSAgICAKLSAgICBzdHViUm91dGluZSA9Ci0gICAgICAgIGNyZWF0ZUpJVFN0dWJS
b3V0aW5lKAotICAgICAgICAgICAgRklOQUxJWkVfQ09ERV9GT1IoCi0gICAgICAgICAgICAgICAg
ZXhlYy0+Y29kZUJsb2NrKCksIHBhdGNoQnVmZmVyLAotICAgICAgICAgICAgICAgICgiUHV0QnlJ
ZCAlc3RyYW5zaXRpb24gc3R1YiAoJXAgLT4gJXApIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwK
LSAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9s
ZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA/ICJyZWFsbG9jYXRpbmcgIiA6ICIiLAot
ICAgICAgICAgICAgICAgICAgICBvbGRTdHJ1Y3R1cmUsIHN0cnVjdHVyZSwKLSAgICAgICAgICAg
ICAgICAgICAgdG9DU3RyaW5nKCpleGVjLT5jb2RlQmxvY2soKSkuZGF0YSgpLCBzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgKLSAgICAgICAgICAgICAgICAgICAgICAg
IHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpLAot
ICAgICAgICAgICAgKnZtLAotICAgICAgICAgICAgZXhlYy0+Y29kZUJsb2NrKCktPm93bmVyRXhl
Y3V0YWJsZSgpLAotICAgICAgICAgICAgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9
IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwKLSAgICAgICAgICAgIHN0cnVjdHVy
ZSk7Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRC
eUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRO
b25TdHJpY3RPcHRpbWl6ZTsKIH0KIAogc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hl
UHV0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYg
c2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCkBAIC0x
MjQ1LDcgKzM0OSw4IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQK
ICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAgICAgCiAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAg
ICBTY3JpcHRFeGVjdXRhYmxlKiBvd25lciA9IGNvZGVCbG9jay0+b3duZXJTY3JpcHRFeGVjdXRh
YmxlKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKIAogICAgIGlmICghYmFzZVZhbHVlLmlz
Q2VsbCgpKQogICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKQEAgLTEyNTYsMjEwICszNjEs
MTA4IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAgICBpZiAo
IXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQogICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKIAotICAgIC8vIE9wdGltaXplIHNlbGYgYWNjZXNzLgorICAgIHN0
ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBuZXdDYXNlOworCiAgICAgaWYgKHNsb3QuYmFzZSgp
ID09IGJhc2VWYWx1ZSAmJiBzbG90LmlzQ2FjaGVhYmxlUHV0KCkpIHsKLSAgICAgICAgaWYgKHNs
b3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6TmV3UHJvcGVydHkpIHsKKyAgICAgICAgaWYg
KHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6RXhpc3RpbmdQcm9wZXJ0eSkgeworICAg
ICAgICAgICAgc3RydWN0dXJlLT5kaWRDYWNoZVByb3BlcnR5UmVwbGFjZW1lbnQodm0sIHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpOworICAgICAgICAKKyAgICAgICAgICAgIHB0cmRpZmZfdCBvZmZzZXRU
b1BhdGNoZWRTdG9yYWdlID0gb2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpOworICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSA9PSBDYWNo
ZVR5cGU6OlVuc2V0CisgICAgICAgICAgICAgICAgJiYgTWFjcm9Bc3NlbWJsZXI6OmlzUHRyQWxp
Z25lZEFkZHJlc3NPZmZzZXQob2Zmc2V0VG9QYXRjaGVkU3RvcmFnZSkKKyAgICAgICAgICAgICAg
ICAmJiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoCisgICAg
ICAgICAgICAgICAgICAgIGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNo
ZWRPZmZzZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0
QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgc3R1
YkluZm8uaW5pdFB1dEJ5SWRSZXBsYWNlKAorICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZTsKLSAgICAgICAgICAgIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKLSAgICAgICAgICAgIGlmICghZW1p
dFB1dFRyYW5zaXRpb25TdHViKGV4ZWMsIHZtLCBzdHJ1Y3R1cmUsIGlkZW50LCBzbG90LCBzdHVi
SW5mbywgcHV0S2luZCwgb2xkU3RydWN0dXJlLCBjb25kaXRpb25TZXQpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nh
c2U6OnJlcGxhY2Uodm0sIG93bmVyLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHNsb3QudHlwZSgpID09IFB1dFBy
b3BlcnR5U2xvdDo6TmV3UHJvcGVydHkpOwogCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
cmVwYXRjaEp1bXAoCi0gICAgICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
Lmp1bXBBdE9mZnNldCgKLSAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGVsdGFD
YWxsVG9KdW1wKSwKLSAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby5z
dHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgICAgICAgICAgcmVwYXRjaENhbGwoY29k
ZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlTGlzdEJ1aWxk
aW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRUcmFuc2l0aW9uKCp2bSwgY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgcHV0
S2luZCA9PSBEaXJlY3QpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICByZXR1cm4gUmV0cnlD
YWNoZUxhdGVyOwotICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXN0cnVjdHVyZS0+aXNPYmpl
Y3QoKSB8fCBzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQorICAgICAgICAgICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOwogCi0gICAgICAgIGlmICghTWFjcm9Bc3NlbWJsZXI6OmlzUHRyQWxp
Z25lZEFkZHJlc3NPZmZzZXQob2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpKSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAg
ICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OworICAgICAgICAgICAgU3RydWN0dXJlKiBuZXdT
dHJ1Y3R1cmUgPQorICAgICAgICAgICAgICAgIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0
aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseSgKKyAgICAgICAgICAgICAgICAgICAg
c3RydWN0dXJlLCBpZGVudC5pbXBsKCksIDAsIG9mZnNldCk7CisgICAgICAgICAgICBpZiAoIW5l
d1N0cnVjdHVyZSB8fCAhbmV3U3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxl
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAKLSAgICAgICAgc3Ry
dWN0dXJlLT5kaWRDYWNoZVByb3BlcnR5UmVwbGFjZW1lbnQoKnZtLCBzbG90LmNhY2hlZE9mZnNl
dCgpKTsKLSAgICAgICAgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKCp2bSwgY29kZUJsb2NrLCBzdHVi
SW5mbywgc3RydWN0dXJlLCBpZGVudCwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgYXBwcm9wcmlhdGVM
aXN0QnVpbGRpbmdQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCksIGZhbHNlKTsKLSAgICAg
ICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRSZXBsYWNlKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKSwgc3RydWN0dXJlKTsKLSAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLSAg
ICB9CisgICAgICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJlLT5wcmV2aW91c0lEKCkgPT0gc3Ry
dWN0dXJlKTsKKyAgICAgICAgICAgIEFTU0VSVCghbmV3U3RydWN0dXJlLT5pc0RpY3Rpb25hcnko
KSk7CisgICAgICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJlLT5pc09iamVjdCgpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9u
U2V0OworICAgICAgICAgICAgaWYgKHB1dEtpbmQgPT0gTm90RGlyZWN0KSB7CisgICAgICAgICAg
ICAgICAgY29uZGl0aW9uU2V0ID0KKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRp
b25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzKAorICAgICAgICAgICAgICAgICAgICAgICAgdm0sIG93
bmVyLCBleGVjLCBuZXdTdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7CisgICAgICAgICAgICAgICAg
aWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
R2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgIH0KIAotICAgIGlmICgoc2xvdC5pc0NhY2hlYWJs
ZUN1c3RvbSgpIHx8IHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSkKLSAgICAgICAgJiYgc3R1Yklu
Zm8ucGF0Y2guc3BpbGxNb2RlID09IERvbnRTcGlsbCkgewotICAgICAgICBSZWZQdHI8SklUU3R1
YlJvdXRpbmU+IHN0dWJSb3V0aW5lOworICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6
OnRyYW5zaXRpb24odm0sIG93bmVyLCBzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgb2Zmc2V0LCBj
b25kaXRpb25TZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChzbG90LmlzQ2FjaGVhYmxl
Q3VzdG9tKCkgfHwgc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpKSB7CisgICAgICAgIGlmIChzbG90
LmlzQ2FjaGVhYmxlQ3VzdG9tKCkpIHsKKyAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0IGNvbmRpdGlvblNldDsKIAotICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCBjb25kaXRpb25TZXQ7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKLSAgICAgICAg
aWYgKHNsb3QuYmFzZSgpICE9IGJhc2VWYWx1ZSkgewotICAgICAgICAgICAgaWYgKHNsb3QuaXND
YWNoZWFibGVDdXN0b20oKSkgeworICAgICAgICAgICAgaWYgKHNsb3QuYmFzZSgpICE9IGJhc2VW
YWx1ZSkgewogICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9CiAgICAgICAgICAgICAgICAg
ICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0Q3VzdG9tKAotICAg
ICAgICAgICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBl
eGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgaWRl
bnQuaW1wbCgpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY29uZGl0
aW9uU2V0ID0KLSAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90
eXBlUHJvcGVydHlIaXQoCi0gICAgICAgICAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5iYXNlKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICBpZGVudC5pbXBsKCkpOworICAgICAgICAgICAgICAgICAgICAgICAg
dm0sIG93bmVyLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLCBpZGVudC5pbXBsKCkpOwor
ICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdp
dmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICBvZmZzZXQgPSBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9t
KCkgPyBpbnZhbGlkT2Zmc2V0IDogY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zm
c2V0KCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgb2Zmc2V0ID0gc2xvdC5jYWNoZWRP
ZmZzZXQoKTsKLQotICAgICAgICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiBsaXN0OwotICAgICAg
ICBsaXN0ID0gUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6ZnJvbShwdXRLaW5kLCBzdHViSW5mbyk7
Ci0KLSAgICAgICAgYm9vbCByZXN1bHQgPSBnZW5lcmF0ZUJ5SWRTdHViKAotICAgICAgICAgICAg
ZXhlYywga2luZEZvcihzbG90KSwgaWRlbnQsIGN1c3RvbUZvcihzbG90KSwgc3R1YkluZm8sIGNv
bmRpdGlvblNldCwgc2xvdC5iYXNlKCksCi0gICAgICAgICAgICBvZmZzZXQsIHN0cnVjdHVyZSwg
ZmFsc2UsIG51bGxwdHIsCi0gICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
bGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLAotICAgICAgICAg
ICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0
Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSksCi0gICAgICAgICAgICBzdHViUm91dGluZSk7Ci0gICAg
ICAgIGlmICghcmVzdWx0KQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAg
ICAgIAotICAgICAgICBsaXN0LT5hZGRBY2Nlc3MoUHV0QnlJZEFjY2Vzczo6c2V0dGVyKAotICAg
ICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAotICAgICAgICAgICAg
c2xvdC5pc0NhY2hlYWJsZVNldHRlcigpID8gUHV0QnlJZEFjY2Vzczo6U2V0dGVyIDogUHV0QnlJ
ZEFjY2Vzczo6Q3VzdG9tU2V0dGVyLAotICAgICAgICAgICAgc3RydWN0dXJlLCBjb25kaXRpb25T
ZXQsIHNsb3QuY3VzdG9tU2V0dGVyKCksIHN0dWJSb3V0aW5lKSk7Ci0KLSAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OnJlcGF0Y2hKdW1wKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRP
ZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwgQ29kZUxvY2F0aW9uTGFiZWwo
c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICAgICAgcmVwYXRjaENhbGwoY29kZUJs
b2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlTGlzdEJ1aWxkaW5n
UHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQo
IWxpc3QtPmlzRnVsbCgpKTsKLSAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLSAgICB9
Ci0KLSAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLX0KLQotdm9pZCByZXBhdGNoUHV0QnlJRChF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNs
b3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQotewotICAg
IEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGV4ZWMtPmNvZGVCbG9jaygpLT5tX2xv
Y2ssIGV4ZWMtPnZtKCkuaGVhcCk7Ci0gICAgCi0gICAgaWYgKHRyeUNhY2hlUHV0QnlJRChleGVj
LCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0
S2luZCkgPT0gR2l2ZVVwT25DYWNoZSkKLSAgICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJs
b2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVHZW5lcmljUHV0
QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKLX0KIAotc3RhdGljIElubGluZUNhY2hlQWN0
aW9uIHRyeUJ1aWxkUHV0QnlJZExpc3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1
ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
Y29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
IFB1dEtpbmQgcHV0S2luZCkKLXsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNv
ZGVCbG9jaygpOwotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotCi0gICAgaWYgKCFiYXNlVmFs
dWUuaXNDZWxsKCkpCi0gICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgaWYgKCFz
bG90LmlzQ2FjaGVhYmxlUHV0KCkgJiYgIXNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSAmJiAhc2xv
dC5pc0NhY2hlYWJsZVNldHRlcigpKQotICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQot
ICAgIGlmICghc3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCi0gICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgLy8gT3B0aW1pemUgc2VsZiBhY2Nlc3Mu
Ci0gICAgaWYgKHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSAmJiBzbG90LmlzQ2FjaGVhYmxlUHV0
KCkpIHsKLSAgICAgICAgUG9seW1vcnBoaWNQdXRCeUlkTGlzdCogbGlzdDsKLSAgICAgICAgUmVm
UHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKLSAgICAgICAgCi0gICAgICAgIGlmIChz
bG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5KSB7Ci0gICAgICAgICAg
ICBsaXN0ID0gUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6ZnJvbShwdXRLaW5kLCBzdHViSW5mbyk7
Ci0gICAgICAgICAgICBpZiAobGlzdC0+aXNGdWxsKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7IC8vIFdpbGwgZ2V0IGhlcmUgZHVlIHRvIHJlY3Vyc2lvbi4KLQotICAg
ICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmU7CisgICAgICAgICAgICBuZXdDYXNlID0g
QWNjZXNzQ2FzZTo6c2V0dGVyKAorICAgICAgICAgICAgICAgIHZtLCBvd25lciwgQWNjZXNzQ2Fz
ZTo6Q3VzdG9tU2V0dGVyLCBzdHJ1Y3R1cmUsIGludmFsaWRPZmZzZXQsIGNvbmRpdGlvblNldCwK
KyAgICAgICAgICAgICAgICBzbG90LmN1c3RvbVNldHRlcigpKTsKKyAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKLSAg
ICAgICAgICAgIGlmICghZW1pdFB1dFRyYW5zaXRpb25TdHViKGV4ZWMsIHZtLCBzdHJ1Y3R1cmUs
IHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQsIG9sZFN0cnVjdHVyZSwgY29u
ZGl0aW9uU2V0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAg
ICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKIAotICAgICAgICAgICAgc3R1YlJvdXRpbmUg
PSBzdHViSW5mby5zdHViUm91dGluZTsKLSAgICAgICAgICAgIGxpc3QtPmFkZEFjY2VzcygKLSAg
ICAgICAgICAgICAgICBQdXRCeUlkQWNjZXNzOjp0cmFuc2l0aW9uKAotICAgICAgICAgICAgICAg
ICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCi0gICAgICAgICAgICAgICAg
ICAgIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsCi0gICAgICAgICAgICAg
ICAgICAgIHN0dWJSb3V0aW5lKSk7CisgICAgICAgICAgICBpZiAoc2xvdC5iYXNlKCkgIT0gYmFz
ZVZhbHVlKSB7CisgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0KKyAgICAgICAgICAgICAg
ICAgICAgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCisgICAgICAg
ICAgICAgICAgICAgICAgICB2bSwgb3duZXIsIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5iYXNlKCks
IGlkZW50LmltcGwoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxp
ZCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAg
ICAgICAgICBvZmZzZXQgPSBjb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vZmZzZXQo
KTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG9mZnNldCA9IHNsb3QuY2Fj
aGVkT2Zmc2V0KCk7CiAKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGxpc3QgPSBQb2x5
bW9ycGhpY1B1dEJ5SWRMaXN0Ojpmcm9tKHB1dEtpbmQsIHN0dWJJbmZvKTsKLSAgICAgICAgICAg
IGlmIChsaXN0LT5pc0Z1bGwoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNo
ZTsgLy8gV2lsbCBnZXQgaGVyZSBkdWUgdG8gcmVjdXJzaW9uLgotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBzdHJ1Y3R1cmUtPmRpZENhY2hlUHJvcGVydHlSZXBsYWNlbWVudCgqdm0sIHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBXZSdyZSBub3cg
Y29tbWl0dGVkIHRvIGNyZWF0aW5nIHRoZSBzdHViLiBNb2dyaWZ5IHRoZSBtZXRhLWRhdGEgYWNj
b3JkaW5nbHkuCi0gICAgICAgICAgICBib29sIHJlc3VsdCA9IGVtaXRQdXRSZXBsYWNlU3R1YigK
LSAgICAgICAgICAgICAgICBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCAKLSAg
ICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIENvZGVMb2NhdGlvbkxhYmVsKGxpc3QtPmN1cnJlbnRT
bG93UGF0aFRhcmdldCgpKSwgc3R1YlJvdXRpbmUpOwotICAgICAgICAgICAgaWYgKCFyZXN1bHQp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGxpc3QtPmFkZEFjY2VzcygKLSAgICAgICAgICAgICAgICBQdXRCeUlkQWNjZXNz
OjpyZXBsYWNlKAotICAgICAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksCi0gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgc3R1YlJvdXRpbmUpKTsK
KyAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpzZXR0ZXIoCisgICAgICAgICAgICAg
ICAgdm0sIG93bmVyLCBBY2Nlc3NDYXNlOjpTZXR0ZXIsIHN0cnVjdHVyZSwgb2Zmc2V0LCBjb25k
aXRpb25TZXQsIG51bGxwdHIpOwogICAgICAgICB9Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoSnVtcChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJ
bmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5l
LT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgICAgIGlmIChsaXN0LT5pc0Z1bGwoKSkKLSAgICAgICAg
ICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBh
cHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOwotCi0gICAg
ICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CiAgICAgfQogCi0gICAgaWYgKChzbG90LmlzQ2Fj
aGVhYmxlQ3VzdG9tKCkgfHwgc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpKQotICAgICAgICAmJiBz
dHViSW5mby5wYXRjaC5zcGlsbE1vZGUgPT0gRG9udFNwaWxsKSB7Ci0gICAgICAgIFJlZlB0cjxK
SVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7Ci0gICAgICAgIAotICAgICAgICBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldDsKLSAgICAgICAgaWYgKHNsb3QuYmFzZSgpICE9IGJhc2VWYWx1ZSkgewotICAgICAgICAg
ICAgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkgewotICAgICAgICAgICAgICAgIGNvbmRp
dGlvblNldCA9Ci0gICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3Rv
dHlwZVByb3BlcnR5SGl0Q3VzdG9tKAotICAgICAgICAgICAgICAgICAgICAgICAgKnZtLCBjb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lLmltcGwoKSk7Ci0gICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9Ci0gICAgICAgICAgICAg
ICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAotICAgICAg
ICAgICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVj
LCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVy
dHlOYW1lLmltcGwoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIWNvbmRpdGlv
blNldC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0g
ICAgICAgICAgICBvZmZzZXQgPSBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgPyBpbnZhbGlkT2Zm
c2V0IDogY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCk7Ci0gICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgb2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKLQotICAg
ICAgICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiBsaXN0OwotICAgICAgICBsaXN0ID0gUG9seW1v
cnBoaWNQdXRCeUlkTGlzdDo6ZnJvbShwdXRLaW5kLCBzdHViSW5mbyk7Ci0KLSAgICAgICAgYm9v
bCByZXN1bHQgPSBnZW5lcmF0ZUJ5SWRTdHViKAotICAgICAgICAgICAgZXhlYywga2luZEZvcihz
bG90KSwgcHJvcGVydHlOYW1lLCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBjb25kaXRpb25T
ZXQsIHNsb3QuYmFzZSgpLAotICAgICAgICAgICAgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGZhbHNlLCBu
dWxscHRyLAotICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRP
ZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSwKLSAgICAgICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsKGxpc3QtPmN1cnJlbnRTbG93UGF0aFRhcmdldCgpKSwKLSAgICAgICAgICAg
IHN0dWJSb3V0aW5lKTsKLSAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAgICByZXR1cm4g
R2l2ZVVwT25DYWNoZTsKLSAgICAgICAgCi0gICAgICAgIGxpc3QtPmFkZEFjY2VzcyhQdXRCeUlk
QWNjZXNzOjpzZXR0ZXIoCi0gICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksCi0gICAgICAgICAgICBzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkgPyBQdXRCeUlkQWNj
ZXNzOjpTZXR0ZXIgOiBQdXRCeUlkQWNjZXNzOjpDdXN0b21TZXR0ZXIsCi0gICAgICAgICAgICBz
dHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgc2xvdC5jdXN0b21TZXR0ZXIoKSwgc3R1YlJvdXRpbmUp
KTsKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1bXAp
LCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgICAg
ICBpZiAobGlzdC0+aXNGdWxsKCkpCi0gICAgICAgICAgICByZXBhdGNoQ2FsbChjb2RlQmxvY2ss
IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1
bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0
ciA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UoCisgICAgICAgIHZtLCBjb2RlQmxvY2ssIGlkZW50
LCBzdGQ6Om1vdmUobmV3Q2FzZSkpOworICAgIAorICAgIGlmICghY29kZVB0cikKKyAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAKLSAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsK
LSAgICB9Ci0gICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgcmVzZXRQdXRCeUlEQ2hlY2tB
bmRMb2FkKHN0dWJJbmZvKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoCisgICAg
ICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoCisgICAgICAgICAg
ICBzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1bXApLAorICAgICAgICBDb2RlTG9jYXRpb25M
YWJlbChjb2RlUHRyKSk7CisgICAgCisgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKIH0KIAot
dm9pZCBidWlsZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNv
bnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQ
dXRLaW5kIHB1dEtpbmQpCit2b2lkIHJlcGF0Y2hQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCiB7CiAgICAgR0NTYWZlQ29uY3VycmVudEpJ
VExvY2tlciBsb2NrZXIoZXhlYy0+Y29kZUJsb2NrKCktPm1fbG9jaywgZXhlYy0+dm0oKS5oZWFw
KTsKICAgICAKLSAgICBpZiAodHJ5QnVpbGRQdXRCeUlkTGlzdChleGVjLCBiYXNlVmFsdWUsIHN0
cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0S2luZCkgPT0gR2l2ZVVw
T25DYWNoZSkKKyAgICBpZiAodHJ5Q2FjaGVQdXRCeUlEKGV4ZWMsIGJhc2VWYWx1ZSwgc3RydWN0
dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kKSA9PSBHaXZlVXBPbkNh
Y2hlKQogICAgICAgICByZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwg
cHV0S2luZCkpOwogfQogCkBAIC0xNDc5LDEwNiArNDgyLDM1IEBAIHN0YXRpYyBJbmxpbmVDYWNo
ZUFjdGlvbiB0cnlSZXBhdGNoSW4oCiAgICAgfQogICAgIAogICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1cmUoKnZtKTsKKyAgICBTY3JpcHRF
eGVjdXRhYmxlKiBvd25lciA9IGNvZGVCbG9jay0+b3duZXJTY3JpcHRFeGVjdXRhYmxlKCk7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2Ut
PnN0cnVjdHVyZSh2bSk7CiAgICAgCiAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29u
ZGl0aW9uU2V0OwogICAgIGlmICh3YXNGb3VuZCkgewogICAgICAgICBpZiAoc2xvdC5zbG90QmFz
ZSgpICE9IGJhc2UpIHsKICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0
aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAotICAgICAgICAgICAgICAgICp2bSwgY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCks
IGlkZW50LmltcGwoKSk7CisgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudC5pbXBsKCkp
OwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJh
dGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNzKAotICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7CisgICAg
ICAgICAgICB2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJl
LCBpZGVudC5pbXBsKCkpOwogICAgIH0KICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkp
CiAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgIAotICAgIFBvbHltb3JwaGljQWNj
ZXNzU3RydWN0dXJlTGlzdCogcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0OwotICAgIGludCBsaXN0
SW5kZXg7Ci0gICAgCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgc3VjY2Vzc0xhYmVsID0gc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFD
YWxsVG9Eb25lKTsKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZUxhYmVsOwotICAgIAot
ICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc191bnNldCkgewotICAgICAgICBw
b2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVM
aXN0KCk7Ci0gICAgICAgIHN0dWJJbmZvLmluaXRJbkxpc3QocG9seW1vcnBoaWNTdHJ1Y3R1cmVM
aXN0LCAwKTsKLSAgICAgICAgc2xvd0Nhc2VMYWJlbCA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxs
VG9TbG93Q2FzZSk7Ci0gICAgICAgIGxpc3RJbmRleCA9IDA7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfaW5fbGlzdCk7
Ci0gICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IHN0dWJJbmZvLnUuaW5MaXN0LnN0
cnVjdHVyZUxpc3Q7Ci0gICAgICAgIGxpc3RJbmRleCA9IHN0dWJJbmZvLnUuaW5MaXN0Lmxpc3RT
aXplOwotICAgICAgICBzbG93Q2FzZUxhYmVsID0gQ29kZUxvY2F0aW9uTGFiZWwocG9seW1vcnBo
aWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleCAtIDFdLnN0dWJSb3V0aW5lLT5jb2RlKCku
Y29kZSgpKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChsaXN0SW5kZXggPT0gUE9MWU1PUlBISUNf
TElTVF9DQUNIRV9TSVpFKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAg
fQotICAgIAotICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7Ci0gICAgCi0g
ICAgewotICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1Yklu
Zm8ucGF0Y2guYmFzZUdQUik7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBzdGF0aWNfY2Fz
dDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVlR1BSKTsKLSAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBUZW1wUmVnaXN0ZXJTZXQoc3R1YkluZm8ucGF0Y2gudXNlZFJlZ2lzdGVycykuZ2V0
RnJlZUdQUigpOwotICAgICAgICAKLSAgICAgICAgQ0NhbGxIZWxwZXJzIHN0dWJKaXQodm0pOwot
ICAgICAgICAKLSAgICAgICAgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaDsKLSAgICAgICAgaWYg
KHNjcmF0Y2hHUFIgPT0gSW52YWxpZEdQUlJlZykgewotICAgICAgICAgICAgc2NyYXRjaEdQUiA9
IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCByZXN1bHRHUFIpOwot
ICAgICAgICAgICAgc3R1YkppdC5wdXNoVG9TYXZlKHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAg
bmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSB0cnVlOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
IG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzOwotICAgICAgICBmYWlsdXJlQ2FzZXMuYXBw
ZW5kKHN0dWJKaXQuYnJhbmNoU3RydWN0dXJlKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKLSAgICAgICAgICAgIHN0cnVjdHVyZSkpOwot
Ci0gICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAg
ICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNo
cG9pbnRzKCkpCi0gICAgICAgICAgICB2bS0+cmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJv
cGVydHkoaWRlbnQsIHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7CiAKLSAgICAg
ICAgaWYgKHNsb3Qud2F0Y2hwb2ludFNldCgpKQotICAgICAgICAgICAgc2xvdC53YXRjaHBvaW50
U2V0KCktPmFkZChzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6aW4oCisgICAgICAg
IHZtLCBvd25lciwgd2FzRm91bmQgPyBBY2Nlc3NDYXNlOjpJbkhpdCA6IEFjY2Vzc0Nhc2U6Oklu
TWlzcywgc3RydWN0dXJlLCBjb25kaXRpb25TZXQpOwogCi0gICAgICAgIGNoZWNrT2JqZWN0UHJv
cGVydHlDb25kaXRpb25zKAotICAgICAgICAgICAgY29uZGl0aW9uU2V0LCBleGVjLT5jb2RlQmxv
Y2soKSwgc3R1YkluZm8sIHN0dWJKaXQsIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7Ci0gICAg
ICAgIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4od2FzRm91bmQpKSks
IHJlc3VsdEdQUik7Ci0jZWxzZQotICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMih3YXNGb3VuZCksIHJlc3VsdEdQUik7Ci0jZW5kaWYKLSAgICAgICAgCi0g
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3MsIGZhaWw7Ci0gICAgICAgIAotICAg
ICAgICBlbWl0UmVzdG9yZVNjcmF0Y2goc3R1YkppdCwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHNj
cmF0Y2hHUFIsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcyk7Ci0gICAgICAgIAotICAgICAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCks
IEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7Ci0gICAgICAgIGlmIChwYXRjaEJ1ZmZlci5kaWRGYWls
VG9BbGxvY2F0ZSgpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAg
IAotICAgICAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVT
Y3JhdGNoLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMsIHN1Y2Nlc3NMYWJlbCwgc2xvd0Nh
c2VMYWJlbCk7Ci0gICAgICAgIAotICAgICAgICBzdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVf
Rk9SX1NUVUIoCi0gICAgICAgICAgICBleGVjLT5jb2RlQmxvY2soKSwgcGF0Y2hCdWZmZXIsCi0g
ICAgICAgICAgICAoIkluIChmb3VuZCA9ICVzKSBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVw
IiwKLSAgICAgICAgICAgICAgICB3YXNGb3VuZCA/ICJ5ZXMiIDogIm5vIiwgdG9DU3RyaW5nKCpl
eGVjLT5jb2RlQmxvY2soKSkuZGF0YSgpLAotICAgICAgICAgICAgICAgIHN1Y2Nlc3NMYWJlbC5l
eGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgfQotICAgIAotICAgIHBvbHltb3JwaGljU3RydWN0
dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNldCgqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIHRydWUpOwotICAgIHN0dWJJbmZvLnUuaW5M
aXN0Lmxpc3RTaXplKys7Ci0gICAgCi0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVs
dGFDYWxsVG9KdW1wKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2Rl
KCkpKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0ciA9IHN0dWJJbmZvLmFkZEFj
Y2Vzc0Nhc2Uodm0sIGNvZGVCbG9jaywgaWRlbnQsIHN0ZDo6bW92ZShuZXdDYXNlKSk7CisgICAg
aWYgKCFjb2RlUHRyKQorICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoSnVtcCgKKyAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1bXApLAorICAgICAg
ICBDb2RlTG9jYXRpb25MYWJlbChjb2RlUHRyKSk7CiAgICAgCi0gICAgcmV0dXJuIGxpc3RJbmRl
eCA8IChQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUgLSAxKSA/IFJldHJ5Q2FjaGVMYXRlciA6
IEdpdmVVcE9uQ2FjaGU7CisgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKIH0KIAogdm9pZCBy
ZXBhdGNoSW4oCkBAIC0xOTI5LDIyICs4NjEsNyBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwo
CiB2b2lkIHJlc2V0R2V0QnlJRChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvKQogewogICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpOwotICAgIENvZGVMb2Nh
dGlvbkRhdGFMYWJlbDMyIHN0cnVjdHVyZUxhYmVsID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoLShpbnRwdHJfdClzdHViSW5mby5wYXRjaC5kZWx0YUNo
ZWNrSW1tVG9DYWxsKTsKLSAgICBpZiAoTWFjcm9Bc3NlbWJsZXI6OmNhbkp1bXBSZXBsYWNlUGF0
Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goKSkgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmV2
ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaCgKLSAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpzdGFydE9mUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2hPbkFk
ZHJlc3Moc3RydWN0dXJlTGFiZWwpLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoCi0gICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVy
SUQ+KHN0dWJJbmZvLnBhdGNoLmJhc2VHUFIpLAotICAgICAgICAgICAgICAgIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQzMl90Pih1bnVz
ZWRQb2ludGVyKSk7Ci0gICAgfQotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIoc3Ry
dWN0dXJlTGFiZWwsIHN0YXRpY19jYXN0PGludDMyX3Q+KHVudXNlZFBvaW50ZXIpKTsKLSNpZiBV
U0UoSlNWQUxVRTY0KQotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ29tcGFjdChzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBh
dGNoLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCAwKTsKLSNlbHNlCi0gICAgTWFjcm9Bc3NlbWJs
ZXI6OnJlcGF0Y2hDb21wYWN0KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxD
b21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSks
IDApOwotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ29tcGFjdChzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRh
Q2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKSwgMCk7Ci0jZW5kaWYKKyAgICByZXNldEdldEJ5SURD
aGVja0FuZExvYWQoc3R1YkluZm8pOwogICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRl
bHRhQ2FsbFRvSnVtcCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0
KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKIH0KIApAQCAtMTk1MiwzMyAr
ODY5LDE4IEBAIHZvaWQgcmVzZXRQdXRCeUlEKENvZGVCbG9jayogY29kZUJsb2NrLCAKIHsKICAg
ICBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJIHVub3B0aW1pemVkRnVuY3Rpb24gPSBiaXR3aXNlX2Nh
c3Q8Vl9KSVRPcGVyYXRpb25fRVNzaUpKST4ocmVhZENhbGxUYXJnZXQoY29kZUJsb2NrLCBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24pLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgIFZfSklU
T3BlcmF0aW9uX0VTc2lKSkkgb3B0aW1pemVkRnVuY3Rpb247Ci0gICAgaWYgKHVub3B0aW1pemVk
RnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9u
ID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RCdWlsZExpc3QpCisgICAgaWYgKHVub3B0aW1pemVk
RnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdCkKICAgICAgICAgb3B0aW1pemVkRnVu
Y3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7Ci0gICAgZWxzZSBpZiAodW5v
cHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0IHx8IHVub3B0aW1p
emVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdEJ1aWxkTGlzdCkKKyAgICBl
bHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3Qp
CiAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9w
dGltaXplOwotICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0
QnlJZERpcmVjdFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5
SWREaXJlY3RTdHJpY3RCdWlsZExpc3QpCisgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlv
biA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0KQogICAgICAgICBvcHRpbWl6ZWRGdW5j
dGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKICAgICBlbHNlIHsK
LSAgICAgICAgQVNTRVJUKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERp
cmVjdE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRE
aXJlY3ROb25TdHJpY3RCdWlsZExpc3QpOworICAgICAgICBBU1NFUlQodW5vcHRpbWl6ZWRGdW5j
dGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0KTsKICAgICAgICAgb3B0aW1p
emVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CiAg
ICAgfQogICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLCBvcHRpbWl6ZWRGdW5jdGlvbik7Ci0gICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzIgc3Ry
dWN0dXJlTGFiZWwgPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9m
ZnNldCgtKGludHB0cl90KXN0dWJJbmZvLnBhdGNoLmRlbHRhQ2hlY2tJbW1Ub0NhbGwpOwotICAg
IGlmIChNYWNyb0Fzc2VtYmxlcjo6Y2FuSnVtcFJlcGxhY2VQYXRjaGFibGVCcmFuY2gzMldpdGhQ
YXRjaCgpKSB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXZlcnRKdW1wUmVwbGFjZW1lbnRU
b1BhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OnN0YXJ0T2ZQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaE9uQWRkcmVzcyhzdHJ1Y3R1cmVMYWJl
bCksCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcygKLSAgICAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRD4oc3R1YkluZm8ucGF0Y2gu
YmFzZUdQUiksCi0gICAgICAgICAgICAgICAgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwK
LSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KHVudXNlZFBvaW50ZXIpKTsKLSAgICB9
Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hJbnQzMihzdHJ1Y3R1cmVMYWJlbCwgc3RhdGlj
X2Nhc3Q8aW50MzJfdD4odW51c2VkUG9pbnRlcikpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
TWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hJbnQzMihzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
ZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0xvYWRPclN0b3Jl
KSwgMCk7Ci0jZWxzZQotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIoc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVs
dGFDYWxsVG9UYWdMb2FkT3JTdG9yZSksIDApOwotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNo
SW50MzIoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1
YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUpLCAwKTsKLSNlbmRpZgor
ICAgIHJlc2V0UHV0QnlJRENoZWNrQW5kTG9hZChzdHViSW5mbyk7CiAgICAgTWFjcm9Bc3NlbWJs
ZXI6OnJlcGF0Y2hKdW1wKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQo
c3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NjcmF0Y2hSZWdpc3RlckFsbG9j
YXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNo
UmVnaXN0ZXJBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAxODk0OTMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ0LDYgKzQ0LDggQEAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjp+U2NyYXRjaFJlZ2lz
dAogCiB2b2lkIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6bG9jayhHUFJSZWcgcmVnKQogewor
ICAgIGlmIChyZWcgPT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuOwogICAgIHVuc2ln
bmVkIGluZGV4ID0gR1BSSW5mbzo6dG9JbmRleChyZWcpOwogICAgIGlmIChpbmRleCA9PSBHUFJJ
bmZvOjpJbnZhbGlkSW5kZXgpCiAgICAgICAgIHJldHVybjsKQEAgLTUyLDEyICs1NCwyMCBAQCB2
b2lkIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6bG9jayhHUFJSCiAKIHZvaWQgU2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yOjpsb2NrKEZQUlJlZyByZWcpCiB7CisgICAgaWYgKHJlZyA9PSBJbnZh
bGlkRlBSUmVnKQorICAgICAgICByZXR1cm47CiAgICAgdW5zaWduZWQgaW5kZXggPSBGUFJJbmZv
Ojp0b0luZGV4KHJlZyk7CiAgICAgaWYgKGluZGV4ID09IEZQUkluZm86OkludmFsaWRJbmRleCkK
ICAgICAgICAgcmV0dXJuOwogICAgIG1fbG9ja2VkUmVnaXN0ZXJzLnNldEZQUkJ5SW5kZXgoaW5k
ZXgpOwogfQogCit2b2lkIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6bG9jayhKU1ZhbHVlUmVn
cyByZWdzKQoreworICAgIGxvY2socmVncy50YWdHUFIoKSk7CisgICAgbG9jayhyZWdzLnBheWxv
YWRHUFIoKSk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIEJhbmtJbmZvPgogdHlwZW5hbWUgQmFu
a0luZm86OlJlZ2lzdGVyVHlwZSBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OmFsbG9jYXRlU2Ny
YXRjaCgpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2Ny
YXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgJKHJldmlzaW9uIDE4OTQ5MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQwLDExICs0MCwxMyBAQCBzdHJ1Y3QgU2NyYXRjaEJ1ZmZlcjsKIAogY2xhc3MgU2NyYXRj
aFJlZ2lzdGVyQWxsb2NhdG9yIHsKIHB1YmxpYzoKKyAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3IoKSB7IH0KICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IoY29uc3QgUmVnaXN0ZXJTZXQm
IHVzZWRSZWdpc3RlcnMpOwogICAgIH5TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IoKTsKIAotICAg
IHZvaWQgbG9jayhHUFJSZWcgcmVnKTsKLSAgICB2b2lkIGxvY2soRlBSUmVnIHJlZyk7CisgICAg
dm9pZCBsb2NrKEdQUlJlZyk7CisgICAgdm9pZCBsb2NrKEZQUlJlZyk7CisgICAgdm9pZCBsb2Nr
KEpTVmFsdWVSZWdzKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rSW5mbz4KICAg
ICB0eXBlbmFtZSBCYW5rSW5mbzo6UmVnaXN0ZXJUeXBlIGFsbG9jYXRlU2NyYXRjaCgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMTg5NDkz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xODgsNiArMTg4LDcgQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7
CiAgICAgdihib29sLCBjbG9iYmVyQWxsUmVnc0luRlRMSUNTbG93UGF0aCwgIUFTU0VSVF9ESVNB
QkxFRCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgYXNzdW1lQWxsUmVnc0luRlRMSUNBcmVMaXZl
LCBmYWxzZSwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgZW5hYmxlQWNjZXNzSW5saW5pbmcsIHRy
dWUsIG51bGxwdHIpIFwKKyAgICB2KHVuc2lnbmVkLCBtYXhBY2Nlc3NWYXJpYW50TGlzdFNpemUs
IDgsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGVuYWJsZVBvbHl2YXJpYW50RGV2aXJ0dWFsaXph
dGlvbiwgdHJ1ZSwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgZW5hYmxlUG9seW1vcnBoaWNBY2Nl
c3NJbmxpbmluZywgdHJ1ZSwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgZW5hYmxlUG9seW1vcnBo
aWNDYWxsSW5saW5pbmcsIHRydWUsIG51bGxwdHIpIFwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260807</attachid>
            <date>2015-09-08 16:31:09 -0700</date>
            <delta_ts>2015-09-08 16:53:30 -0700</delta_ts>
            <desc>rebased again</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>272500</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg5NTE1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0NyBA
QAorMjAxNS0wOS0wOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFRoZXJlIHNob3VsZCBiZSBvbmUgc3R1YiBoYW5naW5nIG9mZiBhbiBpbmxpbmUgY2FjaGUgdGhh
dCBjb250YWlucyBjb2RlIGZvciBhbGwgb2YgdGhlIGNhc2VzLCByYXRoZXIgdGhhbiBmb3JtaW5n
IGEgbGlua2VkIGxpc3QgY29uc2lzdGluZyBvZiBvbmUgc3R1YiBwZXIgY2FzZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4NzE3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBhIG1ham9yIHJl
d3JpdGUgb2YgdGhlIEpTQyBnZXQvcHV0L2luIGlubGluZSBjYWNoZXMgKElDcyksIG1vdGl2YXRl
ZCBieSB0aGUgbmVlZCB0byBhZGQKKyAgICAgICAgZmFuY3kgbmV3IGtpbmRzIG9mIGlubGluZSBj
YWNoZXMgZm9yIHByb3BlcnR5IHR5cGUgaW5mZXJlbmNlIChodHRwczovL3dlYmtpdC5vcmcvYi8x
NDg2MTApLgorCisgICAgICAgIFByZXZpb3VzbHksIG91ciBpbmxpbmUgY2FjaGVzIGhhZCBzb21l
IHByb2JsZW1zIHRoYXQgbWFkZSB0aGVtIGRpZmZpY3VsdCB0byB3b3JrIHdpdGguIEl0IHdhcwor
ICAgICAgICBpbXBvc3NpYmxlIHRvIGNoYW5nZSBhbnkgY29kZSB0aGF0IHdhcyBwcmV2aW91c2x5
IGdlbmVyYXRlZCBieSB0aGUgSUMgZXhjZXB0IGJ5IGJsb3dpbmcgdGhlCisgICAgICAgIHdob2xl
IElDIGF3YXksIHRoZSBJQ3Mgc2NhbGVkIHBvb3JseSBpZiB0aGVyZSB3ZXJlIG1hbnkgY2FzZXMs
IGFuZCB0aGVyZSB3YXMgYSBsb3Qgb2YgZHVwbGljYXRlCisgICAgICAgIGFuZCBhZCBob2MgY29k
ZS4KKworICAgICAgICBJbXBvc3NpYmxlIHRvIHJlZ2VuZXJhdGUgYSBwcmV2aW91c2x5IGdlbmVy
YXRlZCBzdHViOiBTYXkgdGhhdCBzb21lIGFjY2VzcyAoby5mID0gdikgY2F1c2VzIG91cgorICAg
ICAgICBJQyBjb2RlIHRvIGVtaXQgc29tZSBzdHViOyBsZXQncyBjYWxsIGl0IHN0dWIxLiBUaGVu
IGxhdGVyIHdlIGZpbmQgdGhhdCB3ZSBuZWVkIHRvIGVtaXQgYQorICAgICAgICBkaWZmZXJlbnQg
c3R1Yiwgc3R1YjIsIHdoZXJlIHdlIHRoaW5rIHRoYXQgc3R1YjIgbWlnaHQgc3Vic3VtZSBzdHVi
MS4gV2Ugc2F5IHRoYXQgc3R1YjIKKyAgICAgICAgc3Vic3VtZXMgc3R1YjEgaWYgZmFpbGluZyB0
byBleGVjdXRlIHN0dWIyIHRvIGNvbXBsZXRpb24gbWVhbnMgdGhhdCB3ZSBhcmUgZ3VhcmFudGVl
ZCB0byBmYWlsCisgICAgICAgIHRvIGV4ZWN1dGUgc3R1YjEgdG8gY29tcGxldGlvbi4gVGhpcyBj
b3VsZCBoYXBwZW4gaW4gdHJ1bmsgaWYgc3R1YjIgaGFzIHRoZSBzYW1lIGJhc2Ugc3RydWN0dXJl
CisgICAgICAgIGFzIHN0dWIxIGJ1dCBkaWZmZXJlbnQgcHJvdG90eXBlIGNvbmRpdGlvbnMuIEl0
IGNvdWxkIGhhcHBlbiB3aXRoIHByb3BlcnR5IHR5cGUgaW5mZXJlbmNlIGlmCisgICAgICAgIHN0
dWIyIGhhcyBhIGxvb3NlciB0eXBlIGNoZWNrIG9uIHYgdGhhbiBzdHViMSBkaWQuIEN1cnJlbnRs
eSwgaWYgdGhpcyBoYXBwZW5lZCwgd2Ugd291bGQgZW1pdAorICAgICAgICBzdHViMiBhbmQgaGF2
ZSBpdHMgc2xvdyBwYXRoIGp1bXAgdG8gc3R1YjEuIEhlbmNlLCB3ZSB3b3VsZCBzdGlsbCBlbmQg
dXAgZXhlY3V0aW5nIHRoZSBjaGVja3MKKyAgICAgICAgb2Ygc3R1YjEgYmVmb3JlIGZhbGxpbmcg
dGhyb3VnaCB0byB0aGUgc2xvdyBwYXRoLiBUaGlzIGdldHMgYmFkIHdoZW4gdGhlcmUgYXJlIG1h
bnkgc3R1YnMuCisgICAgICAgIFN0dWIxIG1pZ2h0IGJlIGluIGZyb250IG9mIGEgYnVuY2ggb2Yg
b3RoZXIgc3R1YnMsIHNvIHdoZW4gd2UgYWRkIHN0dWIyLCB3ZSB3aWxsIGVuZCB1cAorICAgICAg
ICBleGVjdXRpbmcgYm90aCBzdHViMidzIGFuZCBzdHViMSdzIGNoZWNrcyBiZWZvcmUgZmFsbGlu
ZyB0aHJvdWdoIHRvIHRoZSBvdGhlciBzdHVicy4gSXQgd291bGQKKyAgICAgICAgYmUgYmV0dGVy
IGlmIHdlIGNvdWxkIHJlbW92ZSBzdHViMSBmcm9tIHRoZSBsaXN0IGF0IHRoaXMgcG9pbnQuIEJ1
dCBzaW5jZSBzdHViMSBjb3VsZCBiZSBsaW5rZWQKKyAgICAgICAgdG8gZnJvbSBhIGRpZmZlcmVu
dCBzdHViIHRoYXQgd2UgaGFkIGFscmVhZHkgZ2VuZXJhdGVkLCB3ZSdkIGhhdmUgdG8gaGF2ZSBh
IHdheSBvZiBwYXRjaGluZworICAgICAgICBzdHVicyBvciByZWdlbmVyYXRpbmcgdGhlbSBmcm9t
IHNjcmF0Y2guIFRoaXMgaXMgY3VycmVudHkgaW1wb3NzaWJsZSBiZWNhdXNlIHdlIGp1c3QgZG9u
J3Qga2VlcAorICAgICAgICBhcm91bmQgZW5vdWdoIG1ldGEtZGF0YSB0byBtZXNzIHdpdGggYSBz
dHViIGFmdGVyIGl0J3MgZ2VuZXJhdGVkLiBBZnRlciB0aGlzIGNoYW5nZSwgd2UgbmV2ZXIKKyAg
ICAgICAgbGluayBuZXcgc3R1YnMgb250byBhIGxpbmtlZCBsaXN0IG9mIHByZS1leGlzdGluZyBz
dHViczsgaW5zdGVhZCBlYWNoIElDIHdpbGwgaGF2ZSBvbmUgc3R1YgorICAgICAgICBoYW5naW5n
IG9mZiBvZiBpdCBhbmQgd2UgYWx3YXlzIHJlZ2VuZXJhdGUgdGhhdCBvbmUgc3R1YiBmcm9tIHNj
cmF0Y2guIFRoYXQgb25lIHN0dWIgY29udGFpbnMKKyAgICAgICAgZWl0aGVyIGEgQmluYXJ5U3dp
dGNoIG9yIGEgYnJhbmNoIGNhc2NhZGUgdG8gc2VsZWN0IG9uZSBvZiB0aGUgQWNjZXNzQ2FzZXMu
IEVhY2ggQWNjZXNzQ2FzZSBpcworICAgICAgICBhbiBvYmplY3QgdGhhdCBkZXNjcmliZXMgZXZl
cnl0aGluZyB3ZSBuZWVkIHRvIHJlZ2VuZXJhdGUgaXQgaW4gdGhlIGZ1dHVyZS4gVGhpcyBtZWFu
cyB0aGF0CisgICAgICAgIHdoZW4gd2UgYWRkIGEgbmV3IGNhc2UgdG8gYW4gSUMgc3R1Yiwgd2Ug
Y2FuIGZpZ3VyZSBvdXQgd2hpY2ggcHJldmlvdXMgY2FzZXMgdGhpcyBvbmUgc3Vic3VtZXMuCisK
KyAgICAgICAgUG9vciBzY2FsYWJpbGl0eSB3aGVuIHRoZXJlIGFyZSBtYW55IGNhc2VzOiBQcmV2
aW91c2x5LCB0aGUgY2FzZXMgb2YgYSBwb2x5bW9ycGhpYyBpbmxpbmUgY2FjaGUKKyAgICAgICAg
Zm9ybWVkIGEgbGlua2VkIGxpc3Qgb2YgYnJhbmNoZXMuIFRoaXMgbWVhbnQgdGhhdCB0aGUgY29t
cGxleGl0eSBvZiBhbiBpbmxpbmUgY2FjaGUgZ3JldworICAgICAgICBsaW5lYXJseSB3aXRoIHRo
ZSBudW1iZXIgb2YgY2FzZXMuIFRoaXMgY2hhbmdlIHR1cm5zIHRoaXMgaW50byBhIEJpbmFyeVN3
aXRjaCBpbiBtb3N0IGNhc2VzLAorICAgICAgICBsZWFkaW5nIHRvIGxvZ2FyaXRobWljIHNjYWxp
bmcuCisKKyAgICAgICAgRHVwbGljYXRlIGNvZGUgYmV0d2VlbiBnZXQsIHB1dCwgYW5kIGluOiBU
aGUgY29kZSBmb3Igb3BfZ2V0X2J5X2lkLCBvcF9wdXRfYnlfaWQsIGFuZCBvcF9pbgorICAgICAg
ICBpbmxpbmUgY2FjaGVzIGdyZXcgaW5kZXBlbmRlbnRseSBhbmQgZW5kZWQgdXAgaGF2aW5nIGEg
bG90IG9mIGR1cGxpY2F0ZSBjb2RlLiBXZSBoYWQgdGhlIHdvcnN0CisgICAgICAgIGtpbmRzIG9m
IGR1cGxpY2F0ZSBjb2RlLiBJbiBzb21lIGNhc2VzLCB0aGUgY29kZSB3YXMgY29weS1wYXN0ZWQu
IEluIG90aGVyIGNhc2VzLCB3ZSB3cm90ZSBjb2RlCisgICAgICAgIHRoYXQgZmVsdCBsaWtlIGl0
IHdhcyBuZXcgZGVzcGl0ZSB0aGUgZmFjdCB0aGF0IGl0IHdhcyBsb2dpY2FsbHkgaWRlbnRpY2Fs
IHRvIGNvZGUgdGhhdCB3YXMKKyAgICAgICAgYWxyZWFkeSB3cml0dGVuIGVsc2V3aGVyZS4gVGhl
IG1haW4gc291cmNlcyBvZiBkdXBsaWNhdGlvbiB3ZXJlIGluIHNlbGVjdGluZyBhIHNjcmF0Y2gK
KyAgICAgICAgcmVnaXN0ZXIsIGNoZWNraW5nIGFsbCBvZiB0aGUgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25zIGFuZCB0aGUgYmFzZSBzdHJ1Y3R1cmUsIHRoZSBwcm8gZm9ybWEKKyAgICAgICAgaW52
b2x2ZWQgaW4gZ2VuZXJhdGluZyBhIHN0dWIsIGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIG5lZWRl
ZCB0byBkZXNjcmliZSBhbGwgb2YgdGhlIGFjY2VzcworICAgICAgICBjYXNlcy4gVGhpcyBjaGFu
Z2UgZGVkdXBsaWNhdGVzIGFsbCBvZiB0aGF0IGNvZGUuIE5vdywgYWxsIG9mIHRob3NlIElDcyB1
c2UgdGhlIHNhbWUgY2xhc3NlczoKKyAgICAgICAgdGhlIFBvbHltb3JwaGljQWNjZXNzIGFuZCBB
Y2Nlc3NDYXNlLiBUaGVyZSBpcyBjb2RlIGluIHRob3NlIGNsYXNzZXMgdGhhdCBoYW5kbGVzIGFs
bCBvZiB0aGUKKyAgICAgICAgY29tbW9uIHRoaW5ncywgYW5kIGZvciB0aGUgbW9zdCBwYXJ0IHRo
ZSBvbmx5IGNvZGUgdGhhdCBhY3R1YWxseSBzcGVjaWFsaXplcyBmb3IgdGhlIGtpbmQgb2YKKyAg
ICAgICAgYWNjZXNzIGlzIGluIHNvbWUgc3dpdGNoIHN0YXRlbWVudCBpbiBBY2Nlc3NDYXNlOjpn
ZW5lcmF0ZSgpLgorCisgICAgICAgIFNwZWNpYWwtY2FzaW5nIG9mIGFycmF5IGxlbmd0aCBhbmQg
c3RyaW5nIGxlbmd0aDogUHJldmlvdXNseSwgYXJyYXkubGVuZ3RoIGFuZCBzdHJpbmcubGVuZ3Ro
CisgICAgICAgIHdlcmUgaGFuZGxlZCBpbiBhbiBhZCBob2MgbWFubmVyIGluIHRoZSBnZXRfYnlf
aWQgcmVwYXRjaGluZyBjb2RlLiBUaGUgaGFuZGxpbmcgd2FzIHNlcGFyYXRlCisgICAgICAgIGZy
b20gdGhlIHBvbHltb3JwaGljIGdldF9ieV9pZCBoYW5kbGluZywgd2hpY2ggbWVhbnQgdGhhdCB3
ZSBjb3VsZCBub3QgaGFuZGxlIHBvbHltb3JwaGljCisgICAgICAgIGxlbmd0aCBhY2Nlc3NlcyBp
ZiBvbmUgb2YgdGhlIGxlbmd0aCBjYXNlcyB3YXMgZWl0aGVyIGFycmF5IG9yIHN0cmluZyBsZW5n
dGguIEZvciBleGFtcGxlLCBpZgorICAgICAgICB5b3UgaGFkICJvLmxlbmd0aCIgd2hlcmUgdGhl
IGxlbmd0aCB3YXMgZWl0aGVyIGFycmF5IGxlbmd0aCBvciBhIHZhbmlsbGEgbGVuZ3RoIHByb3Bl
cnR5LCB0aGVuCisgICAgICAgIHRoZSBnZXRfYnlfaWQgaW5saW5lIGNhY2hlIHdvdWxkIGVpdGhl
ciBlbWl0IGEgbW9ub21vcnBoaWMgc3R1YiBmb3IgYXJyYXkgbGVuZ3RoLCBvciBpdCBhCisgICAg
ICAgIG1vbm9tb3JwaGljIHN0dWIgZm9yIHRoZSB2YW5pbGxhIGxlbmd0aCBwcm9wZXJ0eSwgYnV0
IG5ldmVyIGEgcG9seW1vcnBoaWMgc3R1YiAob3IgbGlzdCkgdGhhdAorICAgICAgICBjb3VsZCBk
byBib3RoLiBUaGlzIGNoYW5nZSBhZGRyZXNzZXMgdGhpcyBwcm9ibGVtIGJ5IGZvbGRpbmcgYXJy
YXkgbGVuZ3RoIGFuZCBzdHJpbmcgbGVuZ3RoCisgICAgICAgIGludG8gdGhlIHBvbHltb3JwaGlj
IGdldF9ieV9pZCBjb2RlLgorCisgICAgICAgIFRoaXMgaXMgc3RpbGwgYSB3b3JrIGluIHByb2dy
ZXNzIGFuZCBoYXNuJ3QgYmVlbiB0ZXN0ZWQgY29tcGxldGVseS4KKworICAgICAgICAqIENNYWtl
TGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENv
cmUudmN4cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRD
b3JlLnZjeHByb2ouZmlsdGVyczoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVS
ZWYuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpkdW1wV2l0aE5hbWUp
OgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6cHJpbnRHZXRCeUlkQ2FjaGVTdGF0dXMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OnByaW50UHV0QnlJZENhY2hlU3RhdHVzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcm9w
YWdhdGVUcmFuc2l0aW9ucyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Z2V0QnlWYWxJbmZv
TWFwKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRTdHViSW5mbyk6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6ZmluZFN0dWJJbmZvKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxv
Y2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzdHViSW5mb0JlZ2luKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpzdHViSW5mb0VuZCk6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJ
ZFN0YXR1cy5jcHA6CisgICAgICAgIChKU0M6OkdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHVi
SW5mb1dpdGhvdXRFeGl0U2l0ZUZlZWRiYWNrKToKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9y
cGhpY0FjY2Vzcy5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcC4KKyAgICAgICAgKEpTQzo6QWNjZXNzR2VuZXJh
dGlvblN0YXRlOjphZGRXYXRjaHBvaW50KToKKyAgICAgICAgKEpTQzo6QWNjZXNzR2VuZXJhdGlv
blN0YXRlOjpyZXN0b3JlU2NyYXRjaCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0dlbmVyYXRpb25T
dGF0ZTo6c3VjY2VlZCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OkFjY2Vzc0Nhc2UpOgor
ICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZXQpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNl
OjpyZXBsYWNlKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6dHJhbnNpdGlvbik6CisgICAg
ICAgIChKU0M6OkFjY2Vzc0Nhc2U6OnNldHRlcik6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6
OmluKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2V0TGVuZ3RoKToKKyAgICAgICAgKEpT
Qzo6QWNjZXNzQ2FzZTo6fkFjY2Vzc0Nhc2UpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpm
cm9tU3RydWN0dXJlU3R1YkluZm8pOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpjbG9uZSk6
CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6Omd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrKToKKyAg
ICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Y2FuUmVwbGFjZSk6CisgICAgICAgIChKU0M6OkFjY2Vz
c0Nhc2U6OmR1bXApOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjp2aXNpdFdlYWspOgorICAg
ICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCk6CisgICAgICAgIChKU0M6
OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlKToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNBY2Nlc3M6
OlBvbHltb3JwaGljQWNjZXNzKToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNBY2Nlc3M6On5Q
b2x5bW9ycGhpY0FjY2Vzcyk6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQWNjZXNzOjpyZWdl
bmVyYXRlV2l0aENhc2VzKToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNBY2Nlc3M6OnJlZ2Vu
ZXJhdGVXaXRoQ2FzZSk6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQWNjZXNzOjp2aXNpdFdl
YWspOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzczo6ZHVtcCk6CisgICAgICAgIChK
U0M6OlBvbHltb3JwaGljQWNjZXNzOjpyZWdlbmVyYXRlKToKKyAgICAgICAgKFdURjo6cHJpbnRJ
bnRlcm5hbCk6CisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nlc3M6OkdldEJ5SWRBY2Nlc3MpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpHZXRCeUlkQWNjZXNzOjp+R2V0QnlJZEFjY2Vzcyk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1cmVTdHViSW5m
byk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nlc3M6OnZpc2l0V2Vhayk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OlBvbHltb3JwaGljR2V0QnlJZExpc3Q6OlBvbHltb3JwaGlj
R2V0QnlJZExpc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0dldEJ5SWRM
aXN0Ojpmcm9tKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNHZXRCeUlkTGlz
dDo6flBvbHltb3JwaGljR2V0QnlJZExpc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpQb2x5
bW9ycGhpY0dldEJ5SWRMaXN0OjpjdXJyZW50U2xvd1BhdGhUYXJnZXQpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjphZGRBY2Nlc3MpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojppc0Z1bGwpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojppc0FsbW9zdEZ1bGwpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpkaWRTZWxmUGF0Y2hp
bmcpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojp2aXNp
dFdlYWspOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmg6
IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0LmguCisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmlzR2V0KToKKyAgICAgICAg
KEpTQzo6QWNjZXNzQ2FzZTo6aXNQdXQpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjppc0lu
KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6dHlwZSk6CisgICAgICAgIChKU0M6OkFjY2Vz
c0Nhc2U6Om9mZnNldCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OnZpYVByb3h5KToKKyAg
ICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6c3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6QWNjZXNz
Q2FzZTo6bmV3U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Y29uZGl0aW9u
U2V0KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6YWRkaXRpb25hbFNldCk6CisgICAgICAg
IChKU0M6OkFjY2Vzc0Nhc2U6OmRvZXNDYWxscyk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6
OmNhbGxMaW5rSW5mbyk6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQWNjZXNzOjppc0VtcHR5
KToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNBY2Nlc3M6OnNpemUpOgorICAgICAgICAoSlND
OjpQb2x5bW9ycGhpY0FjY2Vzczo6YXQpOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vz
czo6b3BlcmF0b3JbXSk6CisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nlc3M6OkdldEJ5SWRBY2Nl
c3MpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpHZXRCeUlkQWNjZXNzOjppc1NldCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nlc3M6Om9wZXJhdG9yISk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkdldEJ5SWRBY2Nlc3M6OnR5cGUpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpHZXRCeUlkQWNjZXNzOjpzdHJ1Y3R1cmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpHZXRC
eUlkQWNjZXNzOjpjb25kaXRpb25TZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpHZXRCeUlk
QWNjZXNzOjpzdHViUm91dGluZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nl
c3M6OmRvZXNDYWxscyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlBvbHltb3JwaGljR2V0QnlJ
ZExpc3Q6OmlzRW1wdHkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0dldEJ5
SWRMaXN0OjpzaXplKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNHZXRCeUlk
TGlzdDo6YXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0
OjpvcGVyYXRvcltdKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzc1N0cnVjdHVyZUxpc3QuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9y
cGhpY0dldEJ5SWRMaXN0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9y
cGhpY0dldEJ5SWRMaXN0Lmg6IFJlbW92ZWQuCisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBo
aWNQdXRCeUlkTGlzdC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBo
aWNQdXRCeUlkTGlzdC5oOiBSZW1vdmVkLgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRTdGF0
dXMuY3BwOgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8p
OgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcDoKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlU3R1YkluZm86OmRlcmVmKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1
YkluZm86OmFkZEFjY2Vzc0Nhc2UpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6
cmVzZXQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJl
bmNlcyk6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaDoKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlU3R1YkluZm86OlN0cnVjdHVyZVN0dWJJbmZvKToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlU3R1YkluZm86OmluaXRHZXRCeUlkU2VsZik6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZVN0dWJJbmZvOjppbml0UHV0QnlJZFJlcGxhY2UpOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmVTdHViSW5mbzo6aW5pdFN0dWIpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5m
bzo6c2V0U2Vlbik6CisgICAgICAgIChKU0M6OmdldFN0cnVjdHVyZVN0dWJJbmZvQ29kZU9yaWdp
bik6CisgICAgICAgIChKU0M6OmlzR2V0QnlJZEFjY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OmlzUHV0QnlJZEFjY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmlzSW5BY2Nlc3Mp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdEdldEJ5SWRM
aXN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmluaXRQdXRC
eUlkVHJhbnNpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZv
Ojppbml0UHV0QnlJZExpc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHVi
SW5mbzo6aW5pdEluTGlzdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJ
bmZvOjphZGRXYXRjaHBvaW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlSW4p
OgorICAgICAgICAqIGZ0bC9GVExDb21waWxlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjptbUFs
bG9jYXRlRGF0YVNlY3Rpb24pOgorICAgICAgICAqIGppdC9BY2Nlc3NvckNhbGxKSVRTdHViUm91
dGluZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogaml0L0FjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0
aW5lLmg6IFJlbW92ZWQuCisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAg
ICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmJyYW5jaElmRW1wdHkpOgorICAgICAgICAoSlNDOjpB
c3NlbWJseUhlbHBlcnM6OmJyYW5jaFN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5
SGVscGVyczo6Ym94Qm9vbGVhblBheWxvYWQpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBl
cnM6OmJveEJvb2xlYW4pOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmJveEludDMy
KToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVElubGluZUNhY2hlR2Vu
ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Z2FyYmFnZVN0dWJJbmZvKToKKyAgICAgICAgKEpT
Qzo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OkpJVElubGluZUNhY2hlR2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6SklUQnlJZEdlbmVyYXRvcjo6SklUQnlJZEdlbmVyYXRvcik6CisgICAgICAg
IChKU0M6OkpJVEdldEJ5SWRHZW5lcmF0b3I6OkpJVEdldEJ5SWRHZW5lcmF0b3IpOgorICAgICAg
ICAoSlNDOjpKSVRQdXRCeUlkR2VuZXJhdG9yOjpKSVRQdXRCeUlkR2VuZXJhdG9yKToKKyAgICAg
ICAgKiBqaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6SklUSW5s
aW5lQ2FjaGVHZW5lcmF0b3I6OkpJVElubGluZUNhY2hlR2VuZXJhdG9yKToKKyAgICAgICAgKEpT
Qzo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OnN0dWJJbmZvKToKKyAgICAgICAgKEpTQzo6SklU
QnlJZEdlbmVyYXRvcjo6SklUQnlJZEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVEJ5SWRH
ZW5lcmF0b3I6OnJlcG9ydFNsb3dQYXRoQ2FsbCk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlv
bnMuY3BwOgorICAgICAgICAqIGppdC9SZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6cmVwYXRj
aENhbGwpOgorICAgICAgICAoSlNDOjpyZXBhdGNoQnlJZFNlbGZBY2Nlc3MpOgorICAgICAgICAo
SlNDOjpyZXNldEdldEJ5SURDaGVja0FuZExvYWQpOgorICAgICAgICAoSlNDOjpyZXNldFB1dEJ5
SURDaGVja0FuZExvYWQpOgorICAgICAgICAoSlNDOjpyZXBsYWNlV2l0aEp1bXApOgorICAgICAg
ICAoSlNDOjp0cnlDYWNoZUdldEJ5SUQpOgorICAgICAgICAoSlNDOjpyZXBhdGNoR2V0QnlJRCk6
CisgICAgICAgIChKU0M6OmFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbik6CisgICAg
ICAgIChKU0M6OmFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbik6CisgICAgICAg
IChKU0M6OnRyeUNhY2hlUHV0QnlJRCk6CisgICAgICAgIChKU0M6OnJlcGF0Y2hQdXRCeUlEKToK
KyAgICAgICAgKEpTQzo6dHJ5UmVwYXRjaEluKToKKyAgICAgICAgKEpTQzo6cmVwYXRjaEluKToK
KyAgICAgICAgKEpTQzo6cmVzZXRHZXRCeUlEKToKKyAgICAgICAgKEpTQzo6cmVzZXRQdXRCeUlE
KToKKyAgICAgICAgKEpTQzo6Y2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbik6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OmNoZWNrT2JqZWN0UHJvcGVydHlDb25kaXRpb25zKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6ZW1pdFJlc3RvcmVTY3JhdGNoKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6bGlua1Jlc3RvcmVTY3JhdGNoKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6dG9TdHJpbmcp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpraW5kRm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6Y3VzdG9tRm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Z2VuZXJhdGVCeUlkU3R1Yik6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OnBhdGNoSnVtcFRvR2V0QnlJZFN0dWIpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjp0cnlCdWlsZEdldEJ5SURMaXN0KTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6YnVpbGRHZXRCeUlETGlzdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmFwcHJvcHJp
YXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
ZW1pdFB1dFJlcGxhY2VTdHViKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6ZW1pdFB1dFRyYW5z
aXRpb25TdHViKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6dHJ5QnVpbGRQdXRCeUlkTGlzdCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmJ1aWxkUHV0QnlJZExpc3QpOiBEZWxldGVkLgorICAg
ICAgICAqIGppdC9TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwOgorICAgICAgICAoSlNDOjpT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OmxvY2spOgorICAgICAgICAoSlNDOjpTY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3I6OmFsbG9jYXRlU2NyYXRjaCk6CisgICAgICAgICogaml0L1NjcmF0Y2hS
ZWdpc3RlckFsbG9jYXRvci5oOgorICAgICAgICAoSlNDOjpTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3I6OlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcik6CisgICAgICAgICogcnVudGltZS9PcHRpb25z
Lmg6CisKIDIwMTUtMDktMDggIEFuZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgogCiAg
ICAgICAgIFtKU0NdIFJlbW92ZSB1bnVzZWQgSGVhcDo6Z2V0Q29uc2VydmF0aXZlUmVnaXN0ZXJS
b290cygpLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24g
MTg5NTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0xMDQsOCArMTA0LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAg
ICBieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAKICAgICBieXRlY29kZS9PYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHAKICAgICBieXRlY29kZS9PcGNvZGUuY3BwCi0gICAg
Ynl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAKLSAgICBieXRlY29kZS9Qb2x5bW9y
cGhpY1B1dEJ5SWRMaXN0LmNwcAorICAgIGJ5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAog
ICAgIGJ5dGVjb2RlL1ByZWNpc2VKdW1wVGFyZ2V0cy5jcHAKICAgICBieXRlY29kZS9Qcm9wZXJ0
eUNvbmRpdGlvbi5jcHAKICAgICBieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcApAQCAtMzU2LDcg
KzM1NSw2IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgaW50ZXJwcmV0ZXIvUHJv
dG9DYWxsRnJhbWUuY3BwCiAgICAgaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAogCi0gICAg
aml0L0FjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmNwcAogICAgIGppdC9Bcml0eUNoZWNrRmFp
bFJldHVyblRodW5rcy5jcHAKICAgICBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAogICAgIGppdC9C
aW5hcnlTd2l0Y2guY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2oJKHJldmlzaW9uIDE4OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM0
Myw4ICszNDMsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcT2JqZWN0
UHJvcGVydHlDb25kaXRpb24uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0
ZWNvZGVcT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cYnl0ZWNvZGVcT3Bjb2RlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGJ5dGVjb2RlXFBvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwIiAvPgotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAiIC8+
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQb2x5bW9ycGhpY0FjY2Vzcy5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQcmVjaXNlSnVtcFRh
cmdldHMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUHJvcGVy
dHlDb25kaXRpb24uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVc
UHV0QnlJZFN0YXR1cy5jcHAiIC8+CkBAIC02MTcsNyArNjE2LDYgQEAKICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGludGVycHJldGVyXEpTU3RhY2suY3BwIiAvPgogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5caW50ZXJwcmV0ZXJcUHJvdG9DYWxsRnJhbWUuY3BwIiAvPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5caW50ZXJwcmV0ZXJcU3RhY2tWaXNpdG9yLmNwcCIgLz4KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5jcHAi
IC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcQXJpdHlDaGVja0ZhaWxSZXR1cm5U
aHVua3MuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEFzc2VtYmx5SGVs
cGVycy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcQmluYXJ5U3dpdGNo
LmNwcCIgLz4KQEAgLTEwNDQsOCArMTA0Miw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxieXRlY29kZVxPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcT3Bjb2RlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxieXRlY29kZVxPcGVyYW5kcy5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cYnl0ZWNvZGVcUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oIiAvPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cYnl0ZWNvZGVcUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oIiAvPgorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUG9seW1vcnBoaWNBY2Nlc3MuaCIgLz4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFByZWNpc2VKdW1wVGFyZ2V0cy5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUHJvcGVydHlDb25kaXRpb24u
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFB1dEJ5SWRTdGF0dXMu
aCIgLz4KQEAgLTE0MTYsNyArMTQxMyw2IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxp
bnRlcnByZXRlclxQcm90b0NhbGxGcmFtZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5caW50ZXJwcmV0ZXJcUmVnaXN0ZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGludGVycHJldGVyXFN0YWNrVmlzaXRvci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5caml0XEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxqaXRcQXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3MuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxBc3NlbWJseUhlbHBlcnMuaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGppdFxCaW5hcnlTd2l0Y2guaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ou
ZmlsdGVycwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMJKHJldmlzaW9uIDE4OTUx
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwkod29ya2luZyBjb3B5KQpAQCAtMTk4LDcgKzE5OCw3
IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxPcGNvZGUuY3BwIj4KICAg
ICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwIj4K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFBvbHltb3JwaGljQWNjZXNzLmNw
cCI+CiAgICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQdXRCeUlkU3RhdHVzLmNwcCI+CkBA
IC0xNjI2LDkgKzE2MjYsNiBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cbGx2bVxMTFZN
QVBJLmNwcCI+CiAgICAgICA8RmlsdGVyPmxsdm08L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxBY2Nlc3NvckNhbGxKSVRTdHViUm91dGlu
ZS5jcHAiPgotICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxDb25zb2xlTWVzc2FnZS5jcHAiPgog
ICAgICAgPEZpbHRlcj5pbnNwZWN0b3I8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KQEAgLTE2
OTUsOSArMTY5Miw2IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcSlNK
YXZhU2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBlLmNwcCI+CiAgICAgICA8RmlsdGVyPmluc3BlY3Rv
cjwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
Ynl0ZWNvZGVcUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAiPgotICAgICAgPEZpbHRlcj5ieXRl
Y29kZTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccHJvZmlsZXJcUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAiPgogICAgICAgPEZpbHRlcj5w
cm9maWxlcjwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgpAQCAtMjA5Nyw3ICsyMDkxLDcgQEAK
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE9wZXJhbmRzLmgiPgogICAgICAg
PEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oIj4KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFBvbHltb3JwaGljQWNjZXNzLmgiPgogICAg
ICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUHV0QnlJZFN0YXR1cy5oIj4KQEAgLTQyMDUsOSAr
NDE5OSw2IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxsbHZtXExMVk1IZWFkZXJzLmgi
PgogICAgICAgPEZpbHRlcj5sbHZtPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaCI+Ci0g
ICAgICA8RmlsdGVyPmppdDwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cYXNzZW1ibGVyXEFib3J0UmVhc29uLmgiPgogICAgICAgPEZpbHRlcj5h
c3NlbWJsZXI8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KQEAgLTQyODYsOSArNDI3Nyw2IEBA
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQ0lubGluZXMuaCI+CiAgICAg
ICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFBvbHltb3JwaGljR2V0QnlJZExpc3QuaCI+Ci0gICAg
ICA8RmlsdGVyPmJ5dGVjb2RlPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxwcm9maWxlclxQcm9maWxlckpldHRpc29uUmVhc29uLmgiPgogICAg
ICAgPEZpbHRlcj5wcm9maWxlcjwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE4OTUxNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNzIsNyArMjcyLDYgQEAKIAkJMEYzMDBCN0MxOEFCMUIxNDAwQTZENzJF
IC8qIERGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMwMEI3QTE4QUIxQjE0MDBBNkQ3MkUgLyogREZH
SW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjM0QjE0OTE2RDQyMDEwMDAxQ0RBNUEgLyogREZHVXNl
S2luZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjM0QjE0NzE2RDQyMDBFMDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAgKi87IH07CiAJCTBGMzRC
MTRBMTZENDIwMTMwMDFDREE1QSAvKiBERkdVc2VLaW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM0QjE0ODE2RDQyMDBFMDAxQ0RBNUEgLyogREZH
VXNlS2luZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
Ci0JCTBGMzRCMTRDMTZENDNFMEQwMDFDREE1QSAvKiBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVy
ZUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MzRCMTRCMTZENDNFMEMwMDFDREE1QSAvKiBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3Qu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjM4
QjAxMTE3Q0YwNzgwMDBCMTQ0RDMgLyogTExJbnRFbnRyeXBvaW50LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhCMDBGMTdDRjA3N0YwMEIxNDRE
MyAvKiBMTEludEVudHJ5cG9pbnQuY3BwICovOyB9OwogCQkwRjM4QjAxMjE3Q0YwNzgzMDBCMTQ0
RDMgLyogTExJbnRFbnRyeXBvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjM4QjAxMDE3Q0YwNzdGMDBCMTQ0RDMgLyogTExJbnRFbnRyeXBvaW50
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYz
OEIwMTcxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uS2V5LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhCMDEzMTdDRkU3NTUwMEIx
NDREMyAvKiBERkdDb21waWxhdGlvbktleS5jcHAgKi87IH07CkBAIC0zMjQsOCArMzIzLDYgQEAK
IAkJMEY0ODUzMkExODdERkRFQzAwODNCNjg3IC8qIEZUTFJlY292ZXJ5T3Bjb2RlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ4NTMyNjE4N0RGREVD
MDA4M0I2ODcgLyogRlRMUmVjb3ZlcnlPcGNvZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQ5M0FGQTE2RDBDQUQzMDA4NDUwOEIgLyogU291
cmNlUHJvdmlkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY0OTNBRjgxNkQwQ0FEMTAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCAqLzsg
fTsKIAkJMEY0Qjk0REMxN0I5RjA3NTAwREQwM0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRCOTREQjE3QjlG
MDc1MDBERDAzQTQgLyogVHlwZWRBcnJheUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjRDRUQ1RTE4Q0VBN0FCMDA4MDJGRTAgLyog
UG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjRDRUQ1QzE4Q0VBN0FCMDA4MDJGRTAgLyogUG9seW1vcnBoaWNH
ZXRCeUlkTGlzdC5jcHAgKi87IH07Ci0JCTBGNENFRDVGMThDRUE3QUIwMDgwMkZFMCAvKiBQb2x5
bW9ycGhpY0dldEJ5SWRMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjRDRUQ1RDE4Q0VBN0FCMDA4MDJGRTAgLyogUG9seW1vcnBoaWNHZXRCeUlk
TGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGNEYyOURGMThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGlt
YXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjRGMjlERDE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRF
c3RpbWF0aW9uUGhhc2UuY3BwICovOyB9OwogCQkwRjRGMjlFMDE4QjZBRDFDMDA1N0JDMTUgLyog
REZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEYyOURFMThCNkFEMUMwMDU3QkMxNSAv
KiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNTBBRjNDMTkzRThCMzkwMDY3
NEVFOCAvKiBERkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTBBRjNCMTkzRThCMzkwMDY3NEVFOCAvKiBERkdT
dHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtMzk4LDggKzM5NSw2IEBACiAJCTBGNzE0Q0E0MTZFQTkyRjAwMEYz
RUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzE0Q0ExMTZFQTkyRUQwMEYzRUJFQiAv
KiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCAqLzsgfTsKIAkJMEY3MTRDQTUxNkVB
OTJGMjAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzE0Q0EyMTZFQTkyRUQwMEYz
RUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3NDNCQUExNkI4ODI0OTAwOUY5Mjc3
IC8qIEFSTTY0RGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDY1MkEzQTIwMTY1MUM2NjEwMEE4MEFGRSAvKiBBUk02NERpc2Fzc2Vt
Ymxlci5jcHAgKi87IH07Ci0JCTBGNzU3NkQyMThFMUZFRTkwMDJFRjRDRCAvKiBBY2Nlc3NvckNh
bGxKSVRTdHViUm91dGluZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjc1NzZEMDE4RTFGRUU5MDAyRUY0Q0QgLyogQWNjZXNzb3JDYWxsSklUU3R1
YlJvdXRpbmUuY3BwICovOyB9OwotCQkwRjc1NzZEMzE4RTFGRUU5MDAyRUY0Q0QgLyogQWNjZXNz
b3JDYWxsSklUU3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNzU3NkQxMThFMUZFRTkwMDJFRjRDRCAvKiBBY2Nlc3NvckNhbGxKSVRT
dHViUm91dGluZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGNzY2RDI4MTVBOENDMUUwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2NkQyNjE1QThD
QzFCMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuY3BwICovOyB9OwogCQkwRjc2NkQyQjE1QThD
QzM4MDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NjZEMjkxNUE4Q0MzNDAwOEYzNjNFIC8qIEpJ
VFN0dWJSb3V0aW5lU2V0LmNwcCAqLzsgfTsKIAkJMEY3NjZEMkMxNUE4Q0MzQTAwOEYzNjNFIC8q
IEpJVFN0dWJSb3V0aW5lU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjc2NkQyQTE1QThDQzM0MDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVTZXQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNDcz
LDggKzQ2OCw2IEBACiAJCTBGOUUzMjY0MUIwNUFCMDQwMDgwMUVENSAvKiBERkdTdG9yZUJhcnJp
ZXJJbnNlcnRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY5RTMyNjIxQjA1QUIwNDAwODAxRUQ1IC8qIERGR1N0b3JlQmFycmllckluc2Vy
dGlvblBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEY5RkI0RjQxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RkI0RjIx
N0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuY3BwICovOyB9OwogCQkwRjlG
QjRGNTE3RkNCOTE3MDBDQjY3RjggLyogREZHU3RhY2tMYXlvdXRQaGFzZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RkI0RjMxN0ZDQjkxNzAwQ0I2
N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjlGQzhDMzE0RTFCNUZFMDBENTJBRTAgLyogUG9seW1v
cnBoaWNQdXRCeUlkTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjlGQzhCRjE0RTFCNUZCMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlk
TGlzdC5jcHAgKi87IH07Ci0JCTBGOUZDOEM0MTRFMUI2MDAwMEQ1MkFFMCAvKiBQb2x5bW9ycGhp
Y1B1dEJ5SWRMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjlGQzhDMDE0RTFCNUZCMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOUZD
OEM1MTRFMUI2MDQwMEQ1MkFFMCAvKiBQdXRLaW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlGQzhDMTE0RTFCNUZCMDBENTJBRTAgLyogUHV0S2lu
ZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
QTJDMTdCMTdEN0NGODQwMDlEMDE1RiAvKiBUZXN0UnVubmVyVXRpbHMuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBMkMxNzkxN0Q3Q0Y4NDAwOUQw
MTVGIC8qIFRlc3RSdW5uZXJVdGlscy5jcHAgKi87IH07CiAJCTBGQTJDMTdDMTdEN0NGODQwMDlE
MDE1RiAvKiBUZXN0UnVubmVyVXRpbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQTJDMTdBMTdEN0NGODQwMDlEMDE1RiAvKiBUZXN0UnVubmVyVXRp
bHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
NzQyLDYgKzczNSw4IEBACiAJCTBGRjhCREVBMUFENENGNzEwMERGRTg4NCAvKiBJbmZlcnJlZFZh
bHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RjhCREU4MUFENENGNzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVlLmNwcCAqLzsgfTsKIAkJMEZG
OEJERUIxQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVkVmFsdWUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjhCREU5MUFENENGNzEwMERGRTg4NCAv
KiBJbmZlcnJlZFZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEZGOTIyRDQxNEY0NkI0MTAwNDFBMjRFIC8qIExMSW50T2Zmc2V0c0V4dHJh
Y3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjQ2ODBBMTE0QkE3RjgyMDBCRkUyNzIgLyogTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcCAqLzsg
fTsKKwkJMEZGOUNFNzMxQjlDRDZEMDAwNEVEQ0E2IC8qIFBvbHltb3JwaGljQWNjZXNzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjlDRTcxMUI5
Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5jcHAgKi87IH07CisJCTBGRjlDRTc0
MUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGOUNFNzIxQjlDRDZEMDAwNEVEQ0E2IC8q
IFBvbHltb3JwaGljQWNjZXNzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEZGQTU0OTcxNkI4ODM1MDAwQjNBOTgyIC8qIEE2NERPcGNvZGUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjUyQTNBMjIx
NjUxQzY5NzAwQTgwQUZFIC8qIEE2NERPcGNvZGUuY3BwICovOyB9OwogCQkwRkZBNTQ5ODE2Qjg4
MzUzMDBCM0E5ODIgLyogQTY0RE9wY29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNjUyQTNBMjMxNjUxQzY5NzAwQTgwQUZFIC8qIEE2NERPcGNvZGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkZC
NkMzODFBRjQ4RERDMDBEQjFCRjcgLyogVHlwZW9mVHlwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZCNkMzNjFBRjQ4RERDMDBEQjFCRjcgLyog
VHlwZW9mVHlwZS5jcHAgKi87IH07CkBAIC0yMTAzLDcgKzIwOTgsNiBAQAogCQkwRjMwMEI3QTE4
QUIxQjE0MDBBNkQ3MkUgLyogREZHSW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2UuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHSW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2Uu
aDsgcGF0aCA9IGRmZy9ERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjM0QjE0NzE2RDQyMDBFMDAxQ0RBNUEgLyogREZHVXNlS2lu
ZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdVc2VLaW5kLmNw
cDsgcGF0aCA9IGRmZy9ERkdVc2VLaW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYzNEIxNDgxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVXNlS2luZC5oOyBwYXRoID0gZGZnL0RGR1VzZUtpbmQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYzNEIxNEIxNkQ0M0UwQzAwMUNEQTVB
IC8qIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzOEIwMEYxN0NGMDc3RjAwQjE0NEQzIC8qIExMSW50RW50
cnlwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBMTEludEVudHJ5cG9pbnQuY3BwOyBwYXRo
ID0gbGxpbnQvTExJbnRFbnRyeXBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYzOEIwMTAxN0NGMDc3RjAwQjE0NEQzIC8qIExMSW50RW50cnlwb2ludC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBMTEludEVudHJ5cG9pbnQuaDsgcGF0aCA9IGxsaW50L0xMSW50RW50cnlwb2ludC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM4QjAxMzE3Q0ZFNzU1MDBCMTQ0RDMg
LyogREZHQ29tcGlsYXRpb25LZXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gREZHQ29tcGlsYXRpb25LZXkuY3BwOyBwYXRoID0gZGZnL0RGR0NvbXBpbGF0aW9uS2V5
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxNTYsOCArMjE1MCw2IEBACiAJ
CTBGNDg1MzI2MTg3REZERUMwMDgzQjY4NyAvKiBGVExSZWNvdmVyeU9wY29kZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExSZWNvdmVyeU9wY29kZS5oOyBwYXRoID0gZnRs
L0ZUTFJlY292ZXJ5T3Bjb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDkz
QUY4MTZEMENBRDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTb3VyY2VQcm92aWRlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNEI5NERCMTdCOUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5s
aW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlZEFycmF5SW5saW5l
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjRDRUQ1QzE4Q0VBN0FCMDA4MDJG
RTAgLyogUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMEY0Q0VENUQxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0
QnlJZExpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9seW1vcnBoaWNH
ZXRCeUlkTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRGMjlERDE4QjZB
RDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RhdGljRXhlY3V0aW9u
Q291bnRFc3RpbWF0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR1N0YXRpY0V4ZWN1dGlvbkNv
dW50RXN0aW1hdGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0
RjI5REUxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlv
blBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1N0YXRpY0V4ZWN1
dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHU3RhdGljRXhlY3V0aW9u
Q291bnRFc3RpbWF0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1
MEFGM0IxOTNFOEIzOTAwNjc0RUU4IC8qIERGR1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaDsg
cGF0aCA9IGRmZy9ERkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTIyMjksOCArMjIyMSw2IEBACiAJCTBGNzAyNUE4MTcxNEIwRjgwMDM4MkMw
RSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmg7IHBhdGggPSBkZmcvREZHT1NSRXhp
dENvbXBpbGVyQ29tbW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzE0Q0Ex
MTZFQTkyRUQwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9u
UGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjcxNENBMjE2RUE5MkVEMDBGM0VCRUIgLyog
REZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHQmFj
a3dhcmRzUHJvcGFnYXRpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkw
Rjc1NzZEMDE4RTFGRUU5MDAyRUY0Q0QgLyogQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWNjZXNzb3JDYWxsSklUU3R1
YlJvdXRpbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjc1NzZEMTE4RTFG
RUU5MDAyRUY0Q0QgLyogQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NjZEMUMxNUE1MDI4RDAwOEYzNjNFIC8qIEpJVFN0
dWJSb3V0aW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFN0dWJSb3V0
aW5lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzY2RDI2MTVBOENDMUIwMDhG
MzYzRSAvKiBKSVRTdHViUm91dGluZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKSVRTdHViUm91dGluZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGNzY2RDI5MTVBOENDMzQwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZVNldC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRTdHViUm91dGluZVNldC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMzAzLDggKzIyOTMsNiBAQAogCQkwRjlFMzI2
MjFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhh
c2UuaDsgcGF0aCA9IGRmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlGQjRGMjE3RkNCOTE3MDBDQjY3RjggLyogREZHU3Rh
Y2tMYXlvdXRQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBE
RkdTdGFja0xheW91dFBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdTdGFja0xheW91dFBoYXNlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RkI0RjMxN0ZDQjkxNzAwQ0I2N0Y4
IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHU3RhY2tMYXlvdXRQaGFzZS5oOyBwYXRoID0gZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY5RkM4QkYxNEUxQjVGQjAwRDUyQUUw
IC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTBGOUZDOEMwMTRFMUI1RkIwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5
SWRMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvbHltb3JwaGljUHV0
QnlJZExpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RkM4QzExNEUxQjVG
QjAwRDUyQUUwIC8qIFB1dEtpbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UHV0S2luZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkEyQzE3OTE3RDdDRjg0
MDA5RDAxNUYgLyogVGVzdFJ1bm5lclV0aWxzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFRlc3RSdW5uZXJVdGlscy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGQTJDMTdBMTdEN0NGODQwMDlEMDE1RiAvKiBUZXN0UnVubmVyVXRpbHMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGVzdFJ1bm5lclV0aWxzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTc5LDYgKzI1NjcsOCBAQAogCQkwRkY4QkRFODFBRDRD
RjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBJbmZlcnJlZFZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZGOEJERTkxQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVkVmFsdWUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5mZXJyZWRWYWx1ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkY5MjJDRjE0RjQ2QjEzMDA0MUEyNEUgLyogSlNDTExJbnRPZmZz
ZXRzRXh0cmFjdG9yICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5
cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBh
dGggPSBKU0NMTEludE9mZnNldHNFeHRyYWN0b3I7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNU
U19ESVI7IH07CisJCTBGRjlDRTcxMUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vz
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQb2x5bW9ycGhpY0Fj
Y2Vzcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRjlDRTcyMUI5Q0Q2RDAw
MDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQb2x5bW9ycGhpY0FjY2Vzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkZCNkMzNjFBRjQ4RERDMDBEQjFCRjcgLyogVHlwZW9mVHlwZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlb2ZUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZGQjZDMzcxQUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5cGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZW9mVHlwZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkZDOTlEMDE4NEVDOEFEMDA5QzEwQUIgLyogQ29uc3RhbnRN
b2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnN0YW50TW9kZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDA5NiwxMCArNDA4Niw2IEBACiAJCTE0MjlE
OTJDMEVEMjJENzAwMEI4OTYxOSAvKiBqaXQgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKAotCQkJCTBGRjA1NEY3MUFDMzVCNDQwMEU1QkU1NyAvKiBFeGVjdXRhYmxl
QWxsb2NhdGlvbkZ1enouY3BwICovLAotCQkJCTBGRjA1NEY4MUFDMzVCNDQwMEU1QkU1NyAvKiBF
eGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouaCAqLywKLQkJCQkwRjc1NzZEMDE4RTFGRUU5MDAyRUY0
Q0QgLyogQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuY3BwICovLAotCQkJCTBGNzU3NkQxMThF
MUZFRTkwMDJFRjRDRCAvKiBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5oICovLAogCQkJCTBG
NkIxQ0M3MTg2NDFERjgwMDg0NUQ5NyAvKiBBcml0eUNoZWNrRmFpbFJldHVyblRodW5rcy5jcHAg
Ki8sCiAJCQkJMEY2QjFDQzgxODY0MURGODAwODQ1RDk3IC8qIEFyaXR5Q2hlY2tGYWlsUmV0dXJu
VGh1bmtzLmggKi8sCiAJCQkJMEYyNEU1M0IxN0VBOUY1OTAwQUJCMjE3IC8qIEFzc2VtYmx5SGVs
cGVycy5jcHAgKi8sCkBAIC00MTA4LDYgKzQwOTQsOCBAQAogCQkJCTBGNjRCMjcwMUE3ODRCQUYw
MDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guaCAqLywKIAkJCQkwRjI0RTUzRDE3RUE5RjU5MDBBQkIy
MTcgLyogQ0NhbGxIZWxwZXJzLmggKi8sCiAJCQkJMEZEODJFMzcxNDFBQjE0MjAwMTc5Qzk0IC8q
IENvbXBhY3RKSVRDb2RlTWFwLmggKi8sCisJCQkJMEZGMDU0RjcxQUMzNUI0NDAwRTVCRTU3IC8q
IEV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5jcHAgKi8sCisJCQkJMEZGMDU0RjgxQUMzNUI0NDAw
RTVCRTU3IC8qIEV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5oICovLAogCQkJCUE3QjQ4REI2MEVF
NzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCAqLywKIAkJCQlBN0I0OERC
NTBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5oICovLAogCQkJCTg2REI2
NDYzMEY5NUM2RkMwMEQ3RDkyMSAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3Bw
ICovLApAQCAtNDE1NCw4ICs0MTQyLDYgQEAKIAkJCQkwRkM3MTJFMTE3Q0Q4NzhGMDA4Q0M5M0Mg
LyogSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLywKIAkJCQlBNzZGNTRB
MjEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVCYXJyaWVyLmggKi8sCiAJCQkJQTc2QzUxNzQx
MTgyNzQ4RDAwNzE1QjA1IC8qIEpTSW50ZXJmYWNlSklULmggKi8sCi0JCQkJMEZFRTk4NDIxQTg5
MjI3NTAwNzU0RTkzIC8qIFNldHVwVmFyYXJnc0ZyYW1lLmNwcCAqLywKLQkJCQkwRkVFOTg0MDFB
ODg2NUI2MDA3NTRFOTMgLyogU2V0dXBWYXJhcmdzRnJhbWUuaCAqLywKIAkJCQkwRkU4MzQxNTFB
NkVGOTdCMDBEMDQ4NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwICovLAogCQkJ
CTBGRTgzNDE2MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5o
ICovLAogCQkJCTBGQTdBOEU5MThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuY3BwICovLApAQCAtNDE2
OSw2ICs0MTU1LDggQEAKIAkJCQkwRjI0RTU0QTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5o
ICovLAogCQkJCTBGQTdBOEVEMThDRTRGRDgwMDUyMzcxRCAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3IuY3BwICovLAogCQkJCTBGMjRFNTRCMTdFRTI3NDkwMEFCQjIxNyAvKiBTY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3IuaCAqLywKKwkJCQkwRkVFOTg0MjFBODkyMjc1MDA3NTRFOTMgLyogU2V0
dXBWYXJhcmdzRnJhbWUuY3BwICovLAorCQkJCTBGRUU5ODQwMUE4ODY1QjYwMDc1NEU5MyAvKiBT
ZXR1cFZhcmFyZ3NGcmFtZS5oICovLAogCQkJCUE3MDlGMkVGMTdBMEFDMDQwMDUxMkU5OCAvKiBT
bG93UGF0aENhbGwuaCAqLywKIAkJCQlBNzM4NjU1MTExODY5N0I0MDA1NDAyNzkgLyogU3BlY2lh
bGl6ZWRUaHVua0pJVC5oICovLAogCQkJCUE3RkY2NDdBMThDNTJFODUwMEI1NTMwNyAvKiBTcGls
bFJlZ2lzdGVyc01vZGUuaCAqLywKQEAgLTU2MDIsMTEgKzU1OTAsOCBAQAogCQkJCTk2OUEwNzk1
MEVEMUQzQUUwMEYxRjY4MSAvKiBPcGNvZGUuaCAqLywKIAkJCQkwRjJCREMyQjE1MUZERThCMDBD
RDg5MTAgLyogT3BlcmFuZHMuaCAqLywKIAkJCQlBNzA0NDdFOTE3QTBCRDQ2MDBGNTg5OEUgLyog
T3BlcmFuZHNJbmxpbmVzLmggKi8sCi0JCQkJMEYzNEIxNEIxNkQ0M0UwQzAwMUNEQTVBIC8qIFBv
bHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdC5oICovLAotCQkJCTBGNENFRDVDMThDRUE3QUIw
MDgwMkZFMCAvKiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcCAqLywKLQkJCQkwRjRDRUQ1RDE4
Q0VBN0FCMDA4MDJGRTAgLyogUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oICovLAotCQkJCTBGOUZD
OEJGMTRFMUI1RkIwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcCAqLywKLQkJ
CQkwRjlGQzhDMDE0RTFCNUZCMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oICov
LAorCQkJCTBGRjlDRTcxMUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5jcHAg
Ki8sCisJCQkJMEZGOUNFNzIxQjlDRDZEMDAwNEVEQ0E2IC8qIFBvbHltb3JwaGljQWNjZXNzLmgg
Ki8sCiAJCQkJMEY5ODIwNUQxNkJGRTM3RjAwMjQwRDAyIC8qIFByZWNpc2VKdW1wVGFyZ2V0cy5j
cHAgKi8sCiAJCQkJMEY5ODIwNUUxNkJGRTM3RjAwMjQwRDAyIC8qIFByZWNpc2VKdW1wVGFyZ2V0
cy5oICovLAogCQkJCTBGRDNFNDA3MUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlv
bi5jcHAgKi8sCkBAIC01NjM3LDggKzU2MjIsOCBAQAogCQkJCTBGMkQ0REU3MTk4MzJEQUMwMDdE
NEIxOSAvKiBUeXBlTG9jYXRpb24uaCAqLywKIAkJCQlBNzlFNzgxRTE1RUVDQkE4MDA0N0M4NTUg
LyogVW5saW5rZWRDb2RlQmxvY2suY3BwICovLAogCQkJCUE3OUU3ODFGMTVFRUNCQTgwMDQ3Qzg1
NSAvKiBVbmxpbmtlZENvZGVCbG9jay5oICovLAotCQkJCTE0MTQyRTUwMUI3OTZFQ0UwMEY0QkY0
QiAvKiBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oICovLAogCQkJCTE0MTQyRTU0MUI3OTcz
QzAwMEY0QkY0QiAvKiBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAgKi8sCisJCQkJMTQx
NDJFNTAxQjc5NkVDRTAwRjRCRjRCIC8qIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmggKi8s
CiAJCQkJQjU5Rjg5MzgxODkxQURCNTAwRDVDQ0RDIC8qIFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJl
YW0uY3BwICovLAogCQkJCUI1OUY4OTM3MTg5MUFEMzMwMEQ1Q0NEQyAvKiBVbmxpbmtlZEluc3Ry
dWN0aW9uU3RyZWFtLmggKi8sCiAJCQkJMEY5NjNCMzYxM0ZDNkZERTAwMDJEOUIyIC8qIFZhbHVl
UHJvZmlsZS5oICovLApAQCAtNjIwMyw3ICs2MTg4LDYgQEAKIAkJCQkwRkMwOTc3MTE0NjkzQUY1
MDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjcw
MjVBQTE3MTRCMEZDMDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkVGQzlBQjE2ODFBM0I2MDA1NjdGNTMgLyogREZHT1NSRXhpdEp1bXBQ
bGFjZWhvbGRlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEY0Q0VENUYxOENFQTdBQjAwODAyRkUw
IC8qIFBvbHltb3JwaGljR2V0QnlJZExpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkVF
MTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRpb24uaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGRkZDOTVDMTRFRjkwQUYwMEM3MjUzMiAvKiBERkdQaGFzZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTVFQTcwRUUxOUY1QjVDNDAwOThGNUVDIC8qIEpTQ29udGV4dFJlZkluc3BlY3Rv
clN1cHBvcnQuaCBpbiBIZWFkZXJzICovLApAQCAtNjI1Miw2ICs2MjM2LDcgQEAKIAkJCQk5OUU0
NUEyNDE4QTFCMjU5MDAyNkQ4OEYgLyogRW1wdHlJbnB1dEN1cnNvci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTQxNDJFNTMxQjc5NkVERDAwRjRCRjRCIC8qIEV4ZWN1dGFibGVJbmZvLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5OUU0NUEyNjE4QTFCMjU5MDAyNkQ4OEYgLyogRW5jb2RlZFZhbHVlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkY5Q0U3NDFCOUNENkQwMDA0RURDQTYgLyogUG9seW1vcnBo
aWNBY2Nlc3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTg3NEVFMTk0RkVCMTIwMEFBQjJDMSAv
KiBERkdNYXlFeGl0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzMwNDYwNzBFMUY0OTdGMDAzMjMy
Q0YgLyogRXJyb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDJFOTBEMEUxODM5REIwMDBGOTI5
NyAvKiBFcnJvckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTY0ODUsNyArNjQ3MCw2
IEBACiAJCQkJQkMxOEM0MUUwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQ29udGV4dFJlZi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTQ4Q0QxRDgxMDhDRjkwMjAwODE2M0M2IC8qIEpTQ29udGV4dFJlZlBy
aXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MjAyOEI4MTc5NzYwMUUwMDk4MDI4QyAvKiBK
U0NUZXN0UnVubmVyVXRpbHMuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGNzU3NkQzMThFMUZFRTkw
MDJFRjRDRCAvKiBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYyQjY2RUMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMkI2NkVFMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3UHJvdG90eXBlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5Nzg4MDE0MTE0NzFBRDkyMDA0MUIwMTYgLyogSlNEYXRlTWF0
aC5oIGluIEhlYWRlcnMgKi8sCkBAIC02Njg1LDggKzY2NjksNiBAQAogCQkJCTBGQ0NBRTQ1MTZE
MENGNzQwMEQwQzY1QiAvKiBQYXJzZXJFcnJvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc3RjE4
MjUxNjQxOTJDNzAwNjQwQTQ3IC8qIFBhcnNlck1vZGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk2
NTMwM0Q2NDE0NDdCOUUxMDBEM0Y5MDQgLyogUGFyc2VyVG9rZW5zLmggaW4gSGVhZGVycyAqLywK
LQkJCQkwRjM0QjE0QzE2RDQzRTBEMDAxQ0RBNUEgLyogUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1
cmVMaXN0LmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjlGQzhDNDE0RTFCNjAwMDBENTJBRTAgLyog
UG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4RjE0MzQxQURG
MDkwMTAwRUQ3OTJDIC8qIERGR0Vwb2NoLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk4MjA2MTE2
QkZFMzgzMDAyNDBEMDIgLyogUHJlY2lzZUp1bXBUYXJnZXRzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjJERDgxNTFBQjNEOEJFMDBCQkI4RTggLyogREZHRm9yQWxsS2lsbHMuaCBpbiBIZWFkZXJz
ICovLApAQCAtNzg0Nyw3ICs3ODI5LDYgQEAKIAkJCQkwRjBCODM5QzE0QkNGNDYzMDA4ODVCNEYg
LyogTExJbnRUaHVua3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDRUZBQ0QxODA1RTc1NTAw
NDcyQ0U0IC8qIExMVk1BUEkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdFNUFCMzcxNzk5RTRC
MjAwRDI4MzNEIC8qIExMVk1EaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEY0
Q0VENUUxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTQ0NjlEREUxMDdFQzdFNzAwNjUwNDQ2IC8qIExvb2t1cC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjQ2ODBDQzE0QkJCMTdBMDBCRkUyNzIgLyogTG93TGV2ZWxJbnRl
cnByZXRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEI3MjNCMjEyRDdEQTQ2MDAzQkQ1RUQg
LyogTWFjaGluZVN0YWNrTWFya2VyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzg4OSw3ICs3ODcw
LDYgQEAKIAkJCQkwRkUyMjhFRTE0MzZBQjJDMDAxOTZDNDggLyogT3B0aW9ucy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDhGMjFCQzEwN0VDNTREMDA0MkVDMkMgLyogUGFyc2VyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTkzMDUyQzM0MEZCNzkyMTkwMDQ4RkRDMyAvKiBQYXJzZXJBcmVuYS5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQkwRjlGQzhDMzE0RTFCNUZFMDBENTJBRTAgLyogUG9seW1v
cnBoaWNQdXRCeUlkTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjk4MjA2MDE2QkZFMzgx
MDAyNDBEMDIgLyogUHJlY2lzZUp1bXBUYXJnZXRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk1
NzQyRjY1MEREMTFGNUEwMDA5MTdGQiAvKiBQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGMkI5Q0Y4MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtNzkwNiw2ICs3ODg2LDcgQEAKIAkJCQkwRjE5MENBQzE4OUQ4MkY2MDAwQUU1RjAg
LyogUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlC
MzE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJPcmlnaW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZGNzI5QjQxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2luU3RhY2suY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEZGOUNFNzMxQjlDRDZEMDAwNEVEQ0E2IC8qIFBvbHltb3JwaGlj
QWNjZXNzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjEwNThCMTY3NTQ4MzEwMEY4QUI2RSAv
KiBQcm9maWxlck9TUkV4aXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMTA1OEQxNjc1NDgz
NzAwRjhBQjZFIC8qIFByb2ZpbGVyT1NSRXhpdFNpdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEYxMzkxMkIxNjc3MUMzQTAwOUNDQjA3IC8qIFByb2ZpbGVyUHJvZmlsZWRCeXRlY29kZXMuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC04MDExLDcgKzc5OTIsNiBAQAogCQkJCUE3NkYyNzk0MTVGMTND
OTYwMDUxN0Q2NyAvKiBVbmxpbmtlZENvZGVCbG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
NTlGODkzOTE4OTFGMjlGMDBENUNDREMgLyogVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlFMzlEQTRBNjFCN0U4QjdDMDA4NEYzM0EgLyogSlNNb2R1bGVS
ZWNvcmQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEY3NTc2RDIxOEUxRkVFOTAwMkVGNENEIC8q
IEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjRF
NTU4MTdGNzRFREIwMEFCQjIxNyAvKiBWYWx1ZVJlY292ZXJ5LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUUxOEUzQTU5MERGOTI3OEMwMEQ5MEIzNCAvKiBWTS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlGRTU5MzJBNzE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmNwcCBpbiBTb3VyY2Vz
ICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ckNvZGVSZWYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCShyZXZpc2lvbiAxODk1MTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMjcsNiArMzI3LDEwIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZHVtcFdpdGhOYW1l
KGNvbnN0IGNoYXIqIG5hbWUsIFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgeworICAgICAg
ICBpZiAoIW1fdmFsdWUpIHsKKyAgICAgICAgICAgIG91dC5wcmludChuYW1lLCAiKG51bGwpIik7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAgaWYgKGV4ZWN1dGFibGVB
ZGRyZXNzKCkgPT0gZGF0YUxvY2F0aW9uKCkpIHsKICAgICAgICAgICAgIG91dC5wcmludChuYW1l
LCAiKCIsIFJhd1BvaW50ZXIoZXhlY3V0YWJsZUFkZHJlc3MoKSksICIpIik7CiAgICAgICAgICAg
ICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkocmV2aXNpb24gMTg5NTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDggKzUzLDcgQEAKICNpbmNs
dWRlICJMTEludEVudHJ5cG9pbnQuaCIKICNpbmNsdWRlICJMb3dMZXZlbEludGVycHJldGVyLmgi
CiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIlBvbHltb3JwaGljR2V0QnlJZExp
c3QuaCIKLSNpbmNsdWRlICJQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgiCisjaW5jbHVkZSAiUG9s
eW1vcnBoaWNBY2Nlc3MuaCIKICNpbmNsdWRlICJQcm9maWxlckRhdGFiYXNlLmgiCiAjaW5jbHVk
ZSAiUmVkdWNlV2hpdGVzcGFjZS5oIgogI2luY2x1ZGUgIlJlcGF0Y2guaCIKQEAgLTM0MywyMCAr
MzQyLDE5IEBAIHZvaWQgQ29kZUJsb2NrOjpwcmludEdldEJ5SWRDYWNoZVN0YXR1cygKICAgICAg
ICAgaWYgKHN0dWJJbmZvLnNlZW4pIHsKICAgICAgICAgICAgIG91dC5wcmludGYoIiBqaXQoIik7
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIFN0cnVjdHVyZSogYmFzZVN0cnVjdHVyZSA9IDA7
Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSA9IDA7Ci0gICAgICAg
ICAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0ID0gMDsKKyAgICAgICAgICAgIFN0cnVj
dHVyZSogYmFzZVN0cnVjdHVyZSA9IG51bGxwdHI7CisgICAgICAgICAgICBQb2x5bW9ycGhpY0Fj
Y2Vzcyogc3R1YiA9IG51bGxwdHI7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHN3aXRjaCAo
c3R1YkluZm8uYWNjZXNzVHlwZSkgewotICAgICAgICAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lk
X3NlbGY6CisgICAgICAgICAgICBzd2l0Y2ggKHN0dWJJbmZvLmNhY2hlVHlwZSkgeworICAgICAg
ICAgICAgY2FzZSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxmOgogICAgICAgICAgICAgICAgIG91dC5w
cmludGYoInNlbGYiKTsKLSAgICAgICAgICAgICAgICBiYXNlU3RydWN0dXJlID0gc3R1YkluZm8u
dS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpOworICAgICAgICAgICAgICAg
IGJhc2VTdHJ1Y3R1cmUgPSBzdHViSW5mby51LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUu
Z2V0KCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIGFjY2Vzc19n
ZXRfYnlfaWRfbGlzdDoKLSAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCJsaXN0Iik7Ci0gICAg
ICAgICAgICAgICAgbGlzdCA9IHN0dWJJbmZvLnUuZ2V0QnlJZExpc3QubGlzdDsKKyAgICAgICAg
ICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOgorICAgICAgICAgICAgICAgIG91dC5wcmludGYoInN0
dWIiKTsKKyAgICAgICAgICAgICAgICBzdHViID0gc3R1YkluZm8udS5zdHViOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBhY2Nlc3NfdW5zZXQ6CisgICAgICAgICAg
ICBjYXNlIENhY2hlVHlwZTo6VW5zZXQ6CiAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigidW5z
ZXQiKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0z
NjgsMjcgKzM2NiwxMCBAQCB2b2lkIENvZGVCbG9jazo6cHJpbnRHZXRCeUlkQ2FjaGVTdGF0dXMo
CiAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiLCAiKTsKICAgICAgICAgICAgICAgICBkdW1w
U3RydWN0dXJlKG91dCwgInN0cnVjdCIsIGJhc2VTdHJ1Y3R1cmUsIGlkZW50KTsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHByb3RvdHlwZVN0cnVjdHVyZSkg
ewotICAgICAgICAgICAgICAgIG91dC5wcmludGYoIiwgIik7Ci0gICAgICAgICAgICAgICAgZHVt
cFN0cnVjdHVyZShvdXQsICJwcm90b3R5cGVTdHJ1Y3QiLCBiYXNlU3RydWN0dXJlLCBpZGVudCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChsaXN0KSB7Ci0g
ICAgICAgICAgICAgICAgb3V0LnByaW50ZigiLCBsaXN0ID0gJXA6IFsiLCBsaXN0KTsKLSAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+c2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGkpCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQu
cHJpbnRmKCIsICIpOwotICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIoIik7Ci0gICAg
ICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAiYmFzZSIsIGxpc3QtPmF0KGkpLnN0
cnVjdHVyZSgpLCBpZGVudCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbGlzdC0+YXQoaSku
Y29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXQu
cHJpbnRmKCIsICIpOwotICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KGxpc3QtPmF0
KGkpLmNvbmRpdGlvblNldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICBvdXQucHJpbnRmKCIpIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIG91dC5wcmludGYoIl0iKTsKLSAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHN0
dWIpCisgICAgICAgICAgICAgICAgb3V0LnByaW50KCIsICIsICpzdHViKTsKKwogICAgICAgICAg
ICAgb3V0LnByaW50ZigiKSIpOwogICAgICAgICB9CiAgICAgfQpAQCAtNDQ0LDUzICs0MjUsMTYg
QEAgdm9pZCBDb2RlQmxvY2s6OnByaW50UHV0QnlJZENhY2hlU3RhdHVzKAogICAgICAgICBpZiAo
c3R1YkluZm8uc2VlbikgewogICAgICAgICAgICAgb3V0LnByaW50ZigiIGppdCgiKTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgc3dpdGNoIChzdHViSW5mby5hY2Nlc3NUeXBlKSB7Ci0gICAg
ICAgICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFjZToKKyAgICAgICAgICAgIHN3aXRj
aCAoc3R1YkluZm8uY2FjaGVUeXBlKSB7CisgICAgICAgICAgICBjYXNlIENhY2hlVHlwZTo6UHV0
QnlJZFJlcGxhY2U6CiAgICAgICAgICAgICAgICAgb3V0LnByaW50KCJyZXBsYWNlLCAiKTsKLSAg
ICAgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgInN0cnVjdCIsIHN0dWJJbmZvLnUucHV0
QnlJZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgaWRlbnQpOworICAgICAgICAg
ICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAic3RydWN0Iiwgc3R1YkluZm8udS5ieUlkU2VsZi5i
YXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBpZGVudCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWw6Ci0g
ICAgICAgICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6Ci0gICAg
ICAgICAgICAgICAgb3V0LnByaW50KCJ0cmFuc2l0aW9uLCAiKTsKLSAgICAgICAgICAgICAgICBk
dW1wU3RydWN0dXJlKG91dCwgInByZXYiLCBzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnBy
ZXZpb3VzU3RydWN0dXJlLmdldCgpLCBpZGVudCk7Ci0gICAgICAgICAgICAgICAgb3V0LnByaW50
KCIsICIpOwotICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAibmV4dCIsIHN0dWJJ
bmZvLnUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLmdldCgpLCBpZGVudCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0
KQotICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIiwgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQ6OmZyb21SYXdQb2ludGVyKHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24ucmF3
Q29uZGl0aW9uU2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IGFjY2Vzc19wdXRfYnlfaWRfbGlzdDogewotICAgICAgICAgICAgICAgIG91dC5wcmludGYoImxp
c3QgPSBbIik7Ci0gICAgICAgICAgICAgICAgUG9seW1vcnBoaWNQdXRCeUlkTGlzdCogbGlzdCA9
IHN0dWJJbmZvLnUucHV0QnlJZExpc3QubGlzdDsKLSAgICAgICAgICAgICAgICBDb21tYVByaW50
ZXIgY29tbWE7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3Qt
PnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgIigi
KTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgUHV0QnlJZEFjY2VzcyYgYWNjZXNzID0gbGlz
dC0+YXQoaSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAo
YWNjZXNzLmlzUmVwbGFjZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQo
InJlcGxhY2UsICIpOwotICAgICAgICAgICAgICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQs
ICJzdHJ1Y3QiLCBhY2Nlc3Mub2xkU3RydWN0dXJlKCksIGlkZW50KTsKLSAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIGlmIChhY2Nlc3MuaXNTZXR0ZXIoKSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0LnByaW50KCJzZXR0ZXIsICIpOwotICAgICAgICAgICAgICAgICAgICAgICAgZHVt
cFN0cnVjdHVyZShvdXQsICJzdHJ1Y3QiLCBhY2Nlc3Mub2xkU3RydWN0dXJlKCksIGlkZW50KTsK
LSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhY2Nlc3MuaXNDdXN0b20oKSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCJjdXN0b20sICIpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJzdHJ1Y3QiLCBhY2Nlc3Mub2xkU3RydWN0
dXJlKCksIGlkZW50KTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhY2Nlc3MuaXNU
cmFuc2l0aW9uKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgidHJhbnNp
dGlvbiwgIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgInBy
ZXYiLCBhY2Nlc3Mub2xkU3RydWN0dXJlKCksIGlkZW50KTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG91dC5wcmludCgiLCAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1
cmUob3V0LCAibmV4dCIsIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgaWRlbnQpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFhY2Nlc3MuY29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCAiLCBhY2Nlc3MuY29uZGl0aW9u
U2V0KCkpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG91dC5wcmludCgidW5rbm93biIpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAgICAgb3V0LnByaW50KCIpIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIG91dC5wcmludCgiXSIpOworICAgICAgICAgICAgY2FzZSBDYWNoZVR5cGU6OlN0dWI6
IHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoInN0dWIsICIsICpzdHViSW5mby51LnN0dWIp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgY2Fz
ZSBhY2Nlc3NfdW5zZXQ6CisgICAgICAgICAgICBjYXNlIENhY2hlVHlwZTo6VW5zZXQ6CiAgICAg
ICAgICAgICAgICAgb3V0LnByaW50ZigidW5zZXQiKTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0yNDYxLDM5ICsyNDA1LDIyIEBAIHZvaWQgQ29kZUJs
b2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG8KICAgICBpZiAoSklUQ29kZTo6aXNKSVQoaml0
VHlwZSgpKSkgewogICAgICAgICBmb3IgKEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz46Oml0ZXJhdG9y
IGl0ZXIgPSBtX3N0dWJJbmZvcy5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikgewogICAgICAgICAg
ICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gKippdGVyOwotICAgICAgICAgICAgc3dp
dGNoIChzdHViSW5mby5hY2Nlc3NUeXBlKSB7Ci0gICAgICAgICAgICBjYXNlIGFjY2Vzc19wdXRf
YnlfaWRfdHJhbnNpdGlvbl9ub3JtYWw6Ci0gICAgICAgICAgICBjYXNlIGFjY2Vzc19wdXRfYnlf
aWRfdHJhbnNpdGlvbl9kaXJlY3Q6IHsKLSAgICAgICAgICAgICAgICBKU0NlbGwqIG9yaWdpbiA9
IHN0dWJJbmZvLmNvZGVPcmlnaW4uY29kZU9yaWdpbk93bmVyKCk7Ci0gICAgICAgICAgICAgICAg
aWYgKCghb3JpZ2luIHx8IEhlYXA6OmlzTWFya2VkKG9yaWdpbikpCi0gICAgICAgICAgICAgICAg
ICAgICYmIEhlYXA6OmlzTWFya2VkKHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlv
dXNTdHJ1Y3R1cmUuZ2V0KCkpKQotICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgm
c3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUpOwotICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYWxsQXJlTWFya2VkU29GYXIgPSBmYWxzZTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUg
IT0gQ2FjaGVUeXBlOjpTdHViKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgUG9seW1vcnBoaWNBY2Nlc3MqIGxpc3QgPSBzdHViSW5mby51LnN0dWI7CisgICAgICAgICAg
ICBKU0NlbGwqIG9yaWdpbiA9IHN0dWJJbmZvLmNvZGVPcmlnaW4uY29kZU9yaWdpbk93bmVyKCk7
CisgICAgICAgICAgICBpZiAob3JpZ2luICYmICFIZWFwOjppc01hcmtlZChvcmlnaW4pKSB7Cisg
ICAgICAgICAgICAgICAgYWxsQXJlTWFya2VkU29GYXIgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY2FzZSBhY2Nlc3NfcHV0
X2J5X2lkX2xpc3Q6IHsKLSAgICAgICAgICAgICAgICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiBs
aXN0ID0gc3R1YkluZm8udS5wdXRCeUlkTGlzdC5saXN0OwotICAgICAgICAgICAgICAgIEpTQ2Vs
bCogb3JpZ2luID0gc3R1YkluZm8uY29kZU9yaWdpbi5jb2RlT3JpZ2luT3duZXIoKTsKLSAgICAg
ICAgICAgICAgICBpZiAob3JpZ2luICYmICFIZWFwOjppc01hcmtlZChvcmlnaW4pKSB7CisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBsaXN0LT5zaXplKCk7IGotLTspIHsKKyAgICAgICAg
ICAgICAgICBjb25zdCBBY2Nlc3NDYXNlJiBhY2Nlc3MgPSBsaXN0LT5hdChqKTsKKyAgICAgICAg
ICAgICAgICBpZiAoYWNjZXNzLnR5cGUoKSAhPSBBY2Nlc3NDYXNlOjpUcmFuc2l0aW9uKQorICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZiAoSGVhcDo6aXNN
YXJrZWQoYWNjZXNzLnN0cnVjdHVyZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5h
cHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRlcihhY2Nlc3MubmV3U3RydWN0dXJlKCkpOwor
ICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgYWxsQXJlTWFya2VkU29G
YXIgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGxpc3QtPnNpemUoKTsgai0tOykg
ewotICAgICAgICAgICAgICAgICAgICBQdXRCeUlkQWNjZXNzJiBhY2Nlc3MgPSBsaXN0LT5tX2xp
c3Rbal07Ci0gICAgICAgICAgICAgICAgICAgIGlmICghYWNjZXNzLmlzVHJhbnNpdGlvbigpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChIZWFwOjppc01hcmtlZChhY2Nlc3Mub2xkU3RydWN0dXJlKCkpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgdmlzaXRvci5hcHBlbmQoJmFjY2Vzcy5tX25ld1N0cnVjdHVyZSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGFsbEFyZU1hcmtlZFNv
RmFyID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMjc4
NSwxMCArMjcxMiwxMCBAQCB2b2lkIENvZGVCbG9jazo6Z2V0QnlWYWxJbmZvTWFwKEJ5VmFsSW5m
CiB9CiAKICNpZiBFTkFCTEUoSklUKQotU3RydWN0dXJlU3R1YkluZm8qIENvZGVCbG9jazo6YWRk
U3R1YkluZm8oKQorU3RydWN0dXJlU3R1YkluZm8qIENvZGVCbG9jazo6YWRkU3R1YkluZm8oQWNj
ZXNzVHlwZSBhY2Nlc3NUeXBlKQogewogICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1f
bG9jayk7Ci0gICAgcmV0dXJuIG1fc3R1YkluZm9zLmFkZCgpOworICAgIHJldHVybiBtX3N0dWJJ
bmZvcy5hZGQoYWNjZXNzVHlwZSk7CiB9CiAKIFN0cnVjdHVyZVN0dWJJbmZvKiBDb2RlQmxvY2s6
OmZpbmRTdHViSW5mbyhDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxODk1MTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAg
LTIwOCw3ICsyMDgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBnZXRCeVZhbEluZm9NYXAoQnlWYWxJ
bmZvTWFwJiByZXN1bHQpOwogICAgIAogI2lmIEVOQUJMRShKSVQpCi0gICAgU3RydWN0dXJlU3R1
YkluZm8qIGFkZFN0dWJJbmZvKCk7CisgICAgU3RydWN0dXJlU3R1YkluZm8qIGFkZFN0dWJJbmZv
KEFjY2Vzc1R5cGUpOwogICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz46Oml0ZXJhdG9yIHN0dWJJ
bmZvQmVnaW4oKSB7IHJldHVybiBtX3N0dWJJbmZvcy5iZWdpbigpOyB9CiAgICAgQmFnPFN0cnVj
dHVyZVN0dWJJbmZvPjo6aXRlcmF0b3Igc3R1YkluZm9FbmQoKSB7IHJldHVybiBtX3N0dWJJbmZv
cy5lbmQoKTsgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dl
dEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9HZXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMTg5NTE1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NiwxNCArMjYsMTMgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJHZXRCeUlkU3Rh
dHVzLmgiCiAKLSNpbmNsdWRlICJBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5oIgogI2luY2x1
ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvbXBsZXhHZXRTdGF0dXMuaCIKICNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNTY29wZS5oIgogI2luY2x1ZGUgIkxMSW50RGF0
YS5oIgogI2luY2x1ZGUgIkxvd0xldmVsSW50ZXJwcmV0ZXIuaCIKLSNpbmNsdWRlICJQb2x5bW9y
cGhpY0dldEJ5SWRMaXN0LmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKICNpbmNs
dWRlIDx3dGYvTGlzdER1bXAuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0xMzksMTIgKzEzOCwx
MiBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgaWYgKCFz
dHViSW5mby0+c2VlbikKICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlv
bik7CiAgICAgCi0gICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogbGlzdCA9IDA7CisgICAgUG9s
eW1vcnBoaWNBY2Nlc3MqIGxpc3QgPSAwOwogICAgIFN0YXRlIHNsb3dQYXRoU3RhdGUgPSBUYWtl
c1Nsb3dQYXRoOwotICAgIGlmIChzdHViSW5mby0+YWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5
X2lkX2xpc3QpIHsKLSAgICAgICAgbGlzdCA9IHN0dWJJbmZvLT51LmdldEJ5SWRMaXN0Lmxpc3Q7
CisgICAgaWYgKHN0dWJJbmZvLT5jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpTdHViKSB7CisgICAg
ICAgIGxpc3QgPSBzdHViSW5mby0+dS5zdHViOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGlzdC0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGNvbnN0IEdldEJ5SWRBY2Nl
c3MmIGFjY2VzcyA9IGxpc3QtPmF0KGkpOworICAgICAgICAgICAgY29uc3QgQWNjZXNzQ2FzZSYg
YWNjZXNzID0gbGlzdC0+YXQoaSk7CiAgICAgICAgICAgICBpZiAoYWNjZXNzLmRvZXNDYWxscygp
KQogICAgICAgICAgICAgICAgIHNsb3dQYXRoU3RhdGUgPSBNYWtlc0NhbGxzOwogICAgICAgICB9
CkBAIC0xNTcsMTIgKzE1NiwxMiBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1
dGVGb3JTCiAgICAgR2V0QnlJZFN0YXR1cyByZXN1bHQ7CiAgICAgcmVzdWx0Lm1fc3RhdGUgPSBT
aW1wbGU7CiAgICAgcmVzdWx0Lm1fd2FzU2VlbkluSklUID0gdHJ1ZTsgLy8gVGhpcyBpcyBpbnRl
cmVzdGluZyBmb3IgYnl0ZWNvZGUgZHVtcGluZyBvbmx5LgotICAgIHN3aXRjaCAoc3R1YkluZm8t
PmFjY2Vzc1R5cGUpIHsKLSAgICBjYXNlIGFjY2Vzc191bnNldDoKKyAgICBzd2l0Y2ggKHN0dWJJ
bmZvLT5jYWNoZVR5cGUpIHsKKyAgICBjYXNlIENhY2hlVHlwZTo6VW5zZXQ6CiAgICAgICAgIHJl
dHVybiBHZXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwogICAgICAgICAKLSAgICBjYXNlIGFj
Y2Vzc19nZXRfYnlfaWRfc2VsZjogewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0
dWJJbmZvLT51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCk7CisgICAgY2Fz
ZSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxmOiB7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gc3R1YkluZm8tPnUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKTsKICAgICAg
ICAgaWYgKHN0cnVjdHVyZS0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKSkK
ICAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUsIHRydWUpOwog
ICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzSWdub3JlZDsKQEAgLTE3NywxMiArMTc2LDI1IEBA
IEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICB9CiAgICAgICAgIAotICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9saXN0
OiB7CisgICAgY2FzZSBDYWNoZVR5cGU6OlN0dWI6IHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBs
aXN0SW5kZXggPSAwOyBsaXN0SW5kZXggPCBsaXN0LT5zaXplKCk7ICsrbGlzdEluZGV4KSB7Ci0g
ICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGxpc3QtPmF0KGxpc3RJbmRleCkuc3Ry
dWN0dXJlKCk7CisgICAgICAgICAgICBjb25zdCBBY2Nlc3NDYXNlJiBhY2Nlc3MgPSBsaXN0LT5h
dChsaXN0SW5kZXgpOworICAgICAgICAgICAgaWYgKGFjY2Vzcy52aWFQcm94eSgpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUsIHRydWUpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFjY2Vzcy5zdHJ1
Y3R1cmUoKTsKKyAgICAgICAgICAgIGlmICghc3RydWN0dXJlKSB7CisgICAgICAgICAgICAgICAg
Ly8gVGhlIG51bGwgc3RydWN0dXJlIGNhc2VzIGFyaXNlIGR1ZSB0byBhcnJheS5sZW5ndGggYW5k
IHN0cmluZy5sZW5ndGguIFdlIGhhdmUgbm8gd2F5CisgICAgICAgICAgICAgICAgLy8gb2YgY3Jl
YXRpbmcgYSBHZXRCeUlkVmFyaWFudCBmb3IgdGhvc2UsIGFuZCB3ZSBkb24ndCByZWFsbHkgaGF2
ZSB0byBzaW5jZSB0aGUgREZHCisgICAgICAgICAgICAgICAgLy8gaGFuZGxlcyB0aG9zZSBjYXNl
cyBpbiBGaXh1cFBoYXNlIHVzaW5nIHZhbHVlIHByb2ZpbGluZy4gVGhhdCdzIGEgYml0IGF3a3dh
cmQgLSB3ZQorICAgICAgICAgICAgICAgIC8vIHNob3VsZG4ndCBoYXZlIHRvIHVzZSB2YWx1ZSBw
cm9maWxpbmcgdG8gZGlzY292ZXIgc29tZXRoaW5nIHRoYXQgdGhlIEFjY2Vzc0Nhc2UKKyAgICAg
ICAgICAgICAgICAvLyBjb3VsZCBoYXZlIHRvbGQgdXMuIEJ1dCwgaXQgd29ya3Mgd2VsbCBlbm91
Z2guIFNvLCBvdXIgb25seSBjb25jZXJuIGhlcmUgaXMgdG8gbm90CisgICAgICAgICAgICAgICAg
Ly8gY3Jhc2ggb24gbnVsbCBzdHJ1Y3R1cmUuCisgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5
SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSwgdHJ1ZSk7CisgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIENvbXBsZXhHZXRTdGF0dXMgY29tcGxleEdldFN0YXR1cyA9IENvbXBs
ZXhHZXRTdGF0dXM6OmNvbXB1dGVGb3IoCi0gICAgICAgICAgICAgICAgc3RydWN0dXJlLCBsaXN0
LT5hdChsaXN0SW5kZXgpLmNvbmRpdGlvblNldCgpLCB1aWQpOworICAgICAgICAgICAgICAgIHN0
cnVjdHVyZSwgYWNjZXNzLmNvbmRpdGlvblNldCgpLCB1aWQpOwogICAgICAgICAgICAgIAogICAg
ICAgICAgICAgc3dpdGNoIChjb21wbGV4R2V0U3RhdHVzLmtpbmQoKSkgewogICAgICAgICAgICAg
Y2FzZSBDb21wbGV4R2V0U3RhdHVzOjpTaG91bGRTa2lwOgpAQCAtMTkzLDI5ICsyMDUsMjMgQEAg
R2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6SW5saW5lYWJsZTogewogICAg
ICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0
dXM7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChsaXN0LT5hdChsaXN0SW5kZXgpLnR5cGUoKSkg
ewotICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlJZEFjY2Vzczo6U2ltcGxlSW5saW5lOgotICAg
ICAgICAgICAgICAgIGNhc2UgR2V0QnlJZEFjY2Vzczo6U2ltcGxlU3R1YjogeworICAgICAgICAg
ICAgICAgIHN3aXRjaCAoYWNjZXNzLnR5cGUoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgQWNj
ZXNzQ2FzZTo6TG9hZDogewogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgY2FzZSBHZXRCeUlkQWNjZXNzOjpHZXR0ZXI6IHsKLSAg
ICAgICAgICAgICAgICAgICAgQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUqIHN0dWIgPSBzdGF0
aWNfY2FzdDxBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZSo+KAotICAgICAgICAgICAgICAgICAg
ICAgICAgbGlzdC0+YXQobGlzdEluZGV4KS5zdHViUm91dGluZSgpKTsKKyAgICAgICAgICAgICAg
ICBjYXNlIEFjY2Vzc0Nhc2U6OkdldHRlcjogeworICAgICAgICAgICAgICAgICAgICBDYWxsTGlu
a0luZm8qIGNhbGxMaW5rSW5mbyA9IGFjY2Vzcy5jYWxsTGlua0luZm8oKTsKKyAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKGNhbGxMaW5rSW5mbyk7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxM
aW5rU3RhdHVzID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxsTGlua1N0YXR1cz4oCiAgICAgICAgICAg
ICAgICAgICAgICAgICBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcigKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ssICpzdHViLT5tX2NhbGxMaW5rSW5m
bywgY2FsbEV4aXRTaXRlRGF0YSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tl
ciwgcHJvZmlsZWRCbG9jaywgKmNhbGxMaW5rSW5mbywgY2FsbEV4aXRTaXRlRGF0YSkpOwogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgY2FzZSBHZXRCeUlkQWNjZXNzOjpTaW1wbGVNaXNzOgotICAgICAgICAgICAgICAgIGNhc2Ug
R2V0QnlJZEFjY2Vzczo6Q3VzdG9tR2V0dGVyOgotICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlJ
ZEFjY2Vzczo6V2F0Y2hlZFN0dWI6ewotICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogSXQg
d291bGQgYmUgdG90YWxseSBzd2VldCB0byBzdXBwb3J0IHRoaXMgYXQgc29tZSBwb2ludCBpbiB0
aGUgZnV0dXJlLgotICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMDUyCisgICAgICAgICAgICAgICAgZGVmYXVsdDogeworICAg
ICAgICAgICAgICAgICAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgdG90YWxseSBzd2VldCB0byBz
dXBwb3J0IG1vcmUgb2YgdGhlc2UgYXQgc29tZSBwb2ludCBpbiB0aGUKKyAgICAgICAgICAgICAg
ICAgICAgLy8gZnV0dXJlLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTMzMDUyCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKHNsb3dQYXRo
U3RhdGUsIHRydWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IH0KICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgR2V0QnlJZFZhcmlhbnQgdmFyaWFudCgKICAgICAgICAgICAgICAgICAg
ICAgU3RydWN0dXJlU2V0KHN0cnVjdHVyZSksIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhp
Y0FjY2Vzcy5jcHAJKHJldmlzaW9uIDE4OTMyNCkJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwOjE4OTMyNCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBvbHltb3Jw
aGljR2V0QnlJZExpc3QuaCIKKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJDb2RlQmxv
Y2suaCIKKyNpbmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1
ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitHZXRCeUlkQWNj
ZXNzOjpHZXRCeUlkQWNjZXNzKAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlw
ZSB0eXBlLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSwKKyAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRp
dGlvblNldCkKKyAgICA6IG1fdHlwZSh0eXBlKQorICAgICwgbV9zdHJ1Y3R1cmUodm0sIG93bmVy
LCBzdHJ1Y3R1cmUpCisgICAgLCBtX2NvbmRpdGlvblNldChjb25kaXRpb25TZXQpCisgICAgLCBt
X3N0dWJSb3V0aW5lKHN0dWJSb3V0aW5lKQoreworfQorCitHZXRCeUlkQWNjZXNzOjp+R2V0QnlJ
ZEFjY2VzcygpCit7Cit9CisKK0dldEJ5SWRBY2Nlc3MgR2V0QnlJZEFjY2Vzczo6ZnJvbVN0cnVj
dHVyZVN0dWJJbmZvKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIgaW5pdGlhbFNsb3dQYXRoID0KKyAgICAgICAgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93
Q2FzZSk7CisgICAgCisgICAgR2V0QnlJZEFjY2VzcyByZXN1bHQ7CisgICAgCisgICAgUkVMRUFT
RV9BU1NFUlQoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYpOwor
ICAgIAorICAgIHJlc3VsdC5tX3R5cGUgPSBTaW1wbGVJbmxpbmU7CisgICAgcmVzdWx0Lm1fc3Ry
dWN0dXJlLmNvcHlGcm9tKHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVy
ZSk7CisgICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBKSVRTdHViUm91dGluZTo6Y3JlYXRlU2Vs
Zk1hbmFnZWRSb3V0aW5lKGluaXRpYWxTbG93UGF0aCk7CisgICAgCisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworYm9vbCBHZXRCeUlkQWNjZXNzOjp2aXNpdFdlYWsoVk0mIHZtKSBjb25zdAorewor
ICAgIGlmIChtX3N0cnVjdHVyZSAmJiAhSGVhcDo6aXNNYXJrZWQobV9zdHJ1Y3R1cmUuZ2V0KCkp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFtX2NvbmRpdGlvblNldC5hcmVTdGls
bExpdmUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghbV9zdHViUm91dGluZS0+
dmlzaXRXZWFrKHZtKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOwor
fQorCitQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9
PSBhY2Nlc3NfdW5zZXQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX2xpc3QuYXBwZW5k
KEdldEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1cmVTdHViSW5mbyhzdHViSW5mbykpOworfQorCitQ
b2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojpmcm9tKFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9
PSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3QpCisgICAgICAgIHJldHVybiBzdHViSW5mby51LmdldEJ5
SWRMaXN0Lmxpc3Q7CisgICAgCisgICAgQVNTRVJUKAorICAgICAgICBzdHViSW5mby5hY2Nlc3NU
eXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZgorICAgICAgICB8fCBzdHViSW5mby5hY2Nlc3NU
eXBlID09IGFjY2Vzc191bnNldCk7CisgICAgCisgICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCog
cmVzdWx0ID0gbmV3IFBvbHltb3JwaGljR2V0QnlJZExpc3Qoc3R1YkluZm8pOworICAgIAorICAg
IHN0dWJJbmZvLmluaXRHZXRCeUlkTGlzdChyZXN1bHQpOworICAgIAorICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK1BvbHltb3JwaGljR2V0QnlJZExpc3Q6On5Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0
KCkgeyB9CisKK01hY3JvQXNzZW1ibGVyQ29kZVB0ciBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojpj
dXJyZW50U2xvd1BhdGhUYXJnZXQoCisgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKSBj
b25zdAoreworICAgIGlmIChpc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Ns
b3dDYXNlKTsKKyAgICByZXR1cm4gbV9saXN0Lmxhc3QoKS5zdHViUm91dGluZSgpLT5jb2RlKCku
Y29kZSgpOworfQorCit2b2lkIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmFkZEFjY2Vzcyhjb25z
dCBHZXRCeUlkQWNjZXNzJiBhY2Nlc3MpCit7CisgICAgQVNTRVJUKCFpc0Z1bGwoKSk7CisgICAg
Ly8gTWFrZSBzdXJlIHRoYXQgdGhlIHJlc2l6aW5nIG9wdGltaXplcyBmb3Igc3BhY2UsIG5vdCB0
aW1lLgorICAgIG1fbGlzdC5yZXNpemVUb0ZpdChtX2xpc3Quc2l6ZSgpICsgMSk7CisgICAgbV9s
aXN0Lmxhc3QoKSA9IGFjY2VzczsKK30KKworYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojpp
c0Z1bGwoKSBjb25zdAoreworICAgIEFTU0VSVChzaXplKCkgPD0gUE9MWU1PUlBISUNfTElTVF9D
QUNIRV9TSVpFKTsKKyAgICByZXR1cm4gc2l6ZSgpID09IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVf
U0laRTsKK30KKworYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojppc0FsbW9zdEZ1bGwoKSBj
b25zdAoreworICAgIEFTU0VSVChzaXplKCkgPD0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpF
KTsKKyAgICByZXR1cm4gc2l6ZSgpID49IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDE7
Cit9CisKK2Jvb2wgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6ZGlkU2VsZlBhdGNoaW5nKCkgY29u
c3QKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXplKCk7IGktLTspIHsKKyAgICAgICAgaWYg
KGF0KGkpLnR5cGUoKSA9PSBHZXRCeUlkQWNjZXNzOjpTaW1wbGVJbmxpbmUpCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFBvbHlt
b3JwaGljR2V0QnlJZExpc3Q6OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0Cit7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGlmICghYXQoaSkudmlzaXRXZWFr
KHZtKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhp
Y0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDEzMSArMjQs
MTEyNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0LmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKIAogI2lmIEVO
QUJMRShKSVQpCiAKKyNpbmNsdWRlICJCaW5hcnlTd2l0Y2guaCIKKyNpbmNsdWRlICJDQ2FsbEhl
bHBlcnMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIu
aCIKICNpbmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgogI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiU2Ny
YXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkNsZWFyaW5n
V2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCisjaW5jbHVkZSA8
d3RmL0xpc3REdW1wLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCi1HZXRCeUlkQWNjZXNzOjpHZXRC
eUlkQWNjZXNzKAotICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBQ
YXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSwKLSAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkK
LSAgICA6IG1fdHlwZSh0eXBlKQotICAgICwgbV9zdHJ1Y3R1cmUodm0sIG93bmVyLCBzdHJ1Y3R1
cmUpCi0gICAgLCBtX2NvbmRpdGlvblNldChjb25kaXRpb25TZXQpCi0gICAgLCBtX3N0dWJSb3V0
aW5lKHN0dWJSb3V0aW5lKQorc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCitz
dHJ1Y3QgQWNjZXNzR2VuZXJhdGlvblN0YXRlIHsKKyAgICBDQ2FsbEhlbHBlcnMqIGppdCB7IG51
bGxwdHIgfTsKKyAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IqIGFsbG9jYXRvcjsKKyAgICBz
aXplX3QgbnVtYmVyT2ZQYWRkaW5nQnl0ZXMgeyAwIH07CisgICAgUG9seW1vcnBoaWNBY2Nlc3Mq
IGFjY2VzcyB7IG51bGxwdHIgfTsKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8geyBu
dWxscHRyIH07CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzdWNjZXNzOworICAgIENDYWxs
SGVscGVyczo6SnVtcExpc3QgZmFpbEFuZFJlcGF0Y2g7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
TGlzdCBmYWlsQW5kSWdub3JlOworICAgIEdQUlJlZyBiYXNlR1BSIHsgSW52YWxpZEdQUlJlZyB9
OworICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUiB7IElu
dmFsaWRHUFJSZWcgfTsKKyAgICBWZWN0b3I8c3RkOjpmdW5jdGlvbjx2b2lkKExpbmtCdWZmZXIm
KT4+IGNhbGxiYWNrczsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudDsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvPiB3YXRjaHBvaW50czsKKwor
ICAgIFdhdGNocG9pbnQqIGFkZFdhdGNocG9pbnQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b24mIGNvbmRpdGlvbiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCkpCisgICAgeworICAgICAg
ICByZXR1cm4gV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjplbnN1cmVSZWZlcmVuY2VB
bmRBZGRXYXRjaHBvaW50KAorICAgICAgICAgICAgd2F0Y2hwb2ludHMsIGppdC0+Y29kZUJsb2Nr
KCksIHN0dWJJbmZvLCBjb25kaXRpb24pOworICAgIH0KKworICAgIHZvaWQgcmVzdG9yZVNjcmF0
Y2goKQorICAgIHsKKyAgICAgICAgYWxsb2NhdG9yLT5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQ
b3BwaW5nKCpqaXQsIG51bWJlck9mUGFkZGluZ0J5dGVzKTsKKyAgICB9CisKKyAgICB2b2lkIHN1
Y2NlZWQoKQorICAgIHsKKyAgICAgICAgcmVzdG9yZVNjcmF0Y2goKTsKKyAgICAgICAgc3VjY2Vz
cy5hcHBlbmQoaml0LT5qdW1wKCkpOworICAgIH0KK307CisKK0FjY2Vzc0Nhc2U6OkFjY2Vzc0Nh
c2UoKQogewogfQogCi1HZXRCeUlkQWNjZXNzOjp+R2V0QnlJZEFjY2VzcygpCitzdGQ6OnVuaXF1
ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6Z2V0KAorICAgIFZNJiB2bSwgSlNDZWxsKiBv
d25lciwgQWNjZXNzVHlwZSB0eXBlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFN0cnVjdHVyZSog
c3RydWN0dXJlLAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRp
b25TZXQsIGJvb2wgdmlhUHJveHksIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQsCisgICAg
UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgY3VzdG9tR2V0dGVyKQogeworICAgIHN0ZDo6dW5p
cXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nhc2UoKSk7CisKKyAgICByZXN1
bHQtPm1fdHlwZSA9IHR5cGU7CisgICAgcmVzdWx0LT5tX29mZnNldCA9IG9mZnNldDsKKyAgICBy
ZXN1bHQtPm1fc3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7CisgICAgcmVzdWx0
LT5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKKyAgICAKKyAgICBpZiAodmlhUHJveHkg
fHwgYWRkaXRpb25hbFNldCB8fCByZXN1bHQtPmRvZXNDYWxscygpIHx8IGN1c3RvbUdldHRlcikg
eworICAgICAgICByZXN1bHQtPm1fcmFyZURhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPFJhcmVEYXRh
PigpOworICAgICAgICByZXN1bHQtPm1fcmFyZURhdGEtPnZpYVByb3h5ID0gdmlhUHJveHk7Cisg
ICAgICAgIHJlc3VsdC0+bV9yYXJlRGF0YS0+YWRkaXRpb25hbFNldCA9IGFkZGl0aW9uYWxTZXQ7
CisgICAgICAgIHJlc3VsdC0+bV9yYXJlRGF0YS0+Y3VzdG9tQWNjZXNzb3IuZ2V0dGVyID0gY3Vz
dG9tR2V0dGVyOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUdldEJ5SWRBY2Nl
c3MgR2V0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbykKK3N0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpyZXBs
YWNlKAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgaW5pdGlh
bFNsb3dQYXRoID0KLSAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRP
ZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSk7Ci0gICAgCi0gICAgR2V0
QnlJZEFjY2VzcyByZXN1bHQ7Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8uYWNj
ZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYpOwotICAgIAotICAgIHJlc3VsdC5tX3R5
cGUgPSBTaW1wbGVJbmxpbmU7Ci0gICAgcmVzdWx0Lm1fc3RydWN0dXJlLmNvcHlGcm9tKHN0dWJJ
bmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZSk7Ci0gICAgcmVzdWx0Lm1fc3R1
YlJvdXRpbmUgPSBKSVRTdHViUm91dGluZTo6Y3JlYXRlU2VsZk1hbmFnZWRSb3V0aW5lKGluaXRp
YWxTbG93UGF0aCk7Ci0gICAgCisgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHJlc3Vs
dChuZXcgQWNjZXNzQ2FzZSgpKTsKKworICAgIHJlc3VsdC0+bV90eXBlID0gUmVwbGFjZTsKKyAg
ICByZXN1bHQtPm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgIHJlc3VsdC0+bV9zdHJ1Y3R1cmUuc2V0
KHZtLCBvd25lciwgc3RydWN0dXJlKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0ZDo6
dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjp0cmFuc2l0aW9uKAorICAgIFZNJiB2
bSwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3
U3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCisgICAgY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChvbGRT
dHJ1Y3R1cmUgPT0gbmV3U3RydWN0dXJlLT5wcmV2aW91c0lEKCkpOworCisgICAgLy8gU2tpcCBv
cHRpbWl6aW5nIHRoZSBjYXNlIHdoZXJlIHdlIG5lZWQgYSByZWFsbG9jLCBpZiB3ZSBkb24ndCBo
YXZlCisgICAgLy8gZW5vdWdoIHJlZ2lzdGVycyB0byBtYWtlIGl0IGhhcHBlbi4KKyAgICBpZiAo
R1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgPCA2CisgICAgICAgICYmIG9sZFN0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBuZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkK
KyAgICAgICAgJiYgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2Fz
ZSB3aGVyZSB3ZSBuZWVkIHJlYWxsb2MsIGFuZCB0aGUgc3RydWN0dXJlIGhhcworICAgIC8vIGlu
ZGV4aW5nIHN0b3JhZ2UuCisgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBza2lwIHRoaXMhIElt
cGxlbWVudCBpdCEKKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTMwOTE0CisgICAgaWYgKG9sZFN0cnVjdHVyZS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIo
KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNz
Q2FzZT4gcmVzdWx0KG5ldyBBY2Nlc3NDYXNlKCkpOworCisgICAgcmVzdWx0LT5tX3R5cGUgPSBU
cmFuc2l0aW9uOworICAgIHJlc3VsdC0+bV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgcmVzdWx0LT5t
X3N0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBuZXdTdHJ1Y3R1cmUpOworICAgIHJlc3VsdC0+bV9j
b25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitz
dGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6c2V0dGVyKAorICAgIFZNJiB2
bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0LAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0JiBjb25kaXRpb25TZXQsIFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jIGN1c3RvbVNl
dHRlcikKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gcmVzdWx0KG5ldyBBY2Nl
c3NDYXNlKCkpOworCisgICAgcmVzdWx0LT5tX3R5cGUgPSB0eXBlOworICAgIHJlc3VsdC0+bV9v
ZmZzZXQgPSBvZmZzZXQ7CisgICAgcmVzdWx0LT5tX3N0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBz
dHJ1Y3R1cmUpOworICAgIHJlc3VsdC0+bV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7Cisg
ICAgcmVzdWx0LT5tX3JhcmVEYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxSYXJlRGF0YT4oKTsKKyAg
ICByZXN1bHQtPm1fcmFyZURhdGEtPmN1c3RvbUFjY2Vzc29yLnNldHRlciA9IGN1c3RvbVNldHRl
cjsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNl
PiBBY2Nlc3NDYXNlOjppbigKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUg
dHlwZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQmIGNvbmRpdGlvblNldCkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2Fz
ZT4gcmVzdWx0KG5ldyBBY2Nlc3NDYXNlKCkpOworCisgICAgcmVzdWx0LT5tX3R5cGUgPSB0eXBl
OworICAgIHJlc3VsdC0+bV9zdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKKyAg
ICByZXN1bHQtPm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OworCisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OmdldExl
bmd0aChWTSYsIEpTQ2VsbCosIEFjY2Vzc1R5cGUgdHlwZSkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8QWNjZXNzQ2FzZT4gcmVzdWx0KG5ldyBBY2Nlc3NDYXNlKCkpOworCisgICAgcmVzdWx0LT5t
X3R5cGUgPSB0eXBlOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQWNjZXNzQ2FzZTo6fkFj
Y2Vzc0Nhc2UoKQoreworfQorCitzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2Fz
ZTo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIHN3aXRjaCAoc3R1YkluZm8uY2FjaGVU
eXBlKSB7CisgICAgY2FzZSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxmOgorICAgICAgICByZXR1cm4g
Z2V0KAorICAgICAgICAgICAgdm0sIG93bmVyLCBMb2FkLCBzdHViSW5mby51LmJ5SWRTZWxmLm9m
ZnNldCwKKyAgICAgICAgICAgIHN0dWJJbmZvLnUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVy
ZS5nZXQoKSk7CisKKyAgICBjYXNlIENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2U6CisgICAgICAg
IHJldHVybiByZXBsYWNlKAorICAgICAgICAgICAgdm0sIG93bmVyLCBzdHViSW5mby51LmJ5SWRT
ZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHN0dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0
KTsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KK30KKwor
c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OmNsb25lKCkgY29uc3QKK3sK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gcmVzdWx0KG5ldyBBY2Nlc3NDYXNlKCkp
OworICAgIHJlc3VsdC0+bV90eXBlID0gbV90eXBlOworICAgIHJlc3VsdC0+bV9vZmZzZXQgPSBt
X29mZnNldDsKKyAgICByZXN1bHQtPm1fc3RydWN0dXJlID0gbV9zdHJ1Y3R1cmU7CisgICAgcmVz
dWx0LT5tX2NvbmRpdGlvblNldCA9IG1fY29uZGl0aW9uU2V0OworICAgIGlmIChSYXJlRGF0YSog
cmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7CisgICAgICAgIHJlc3VsdC0+bV9yYXJlRGF0
YSA9IHN0ZDo6bWFrZV91bmlxdWU8UmFyZURhdGE+KCk7CisgICAgICAgIHJlc3VsdC0+bV9yYXJl
RGF0YS0+dmlhUHJveHkgPSByYXJlRGF0YS0+dmlhUHJveHk7CisgICAgICAgIHJlc3VsdC0+bV9y
YXJlRGF0YS0+YWRkaXRpb25hbFNldCA9IHJhcmVEYXRhLT5hZGRpdGlvbmFsU2V0OworICAgICAg
ICAvLyBOT1RFOiBXZSBkb24ndCBjb3B5IHRoZSBjYWxsTGlua0luZm8sIHNpbmNlIHRoYXQncyBj
cmVhdGVkIGR1cmluZyBjb2RlIGdlbmVyYXRpb24uCisgICAgICAgIHJlc3VsdC0+bV9yYXJlRGF0
YS0+Y3VzdG9tQWNjZXNzb3Iub3BhcXVlID0gcmFyZURhdGEtPmN1c3RvbUFjY2Vzc29yLm9wYXF1
ZTsKKyAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotYm9vbCBHZXRCeUlkQWNjZXNzOjp2
aXNpdFdlYWsoVk0mIHZtKSBjb25zdAorYm9vbCBBY2Nlc3NDYXNlOjpndWFyZGVkQnlTdHJ1Y3R1
cmVDaGVjaygpIGNvbnN0Cit7CisgICAgaWYgKHZpYVByb3h5KCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgY2FzZSBBcnJheUxlbmd0aDoKKyAg
ICBjYXNlIFN0cmluZ0xlbmd0aDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRlZmF1bHQ6
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKworYm9vbCBBY2Nlc3NDYXNlOjpjYW5S
ZXBsYWNlKGNvbnN0IEFjY2Vzc0Nhc2UmIG90aGVyKQoreworICAgIC8vIFdlIGNvdWxkIGRvIGEg
bG90IGJldHRlciBoZXJlLCBidXQgZm9yIG5vdyB3ZSBqdXN0IGRvIHNvbWV0aGluZyBvYnZpb3Vz
LgorCisgICAgaWYgKCFndWFyZGVkQnlTdHJ1Y3R1cmVDaGVjaygpIHx8ICFvdGhlci5ndWFyZGVk
QnlTdHJ1Y3R1cmVDaGVjaygpKSB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyEK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiBzdHJ1Y3R1cmUoKSA9
PSBvdGhlci5zdHJ1Y3R1cmUoKTsKK30KKwordm9pZCBBY2Nlc3NDYXNlOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fdHlwZSwgIjooIik7CisKKyAgICBp
ZiAobV90eXBlID09IFRyYW5zaXRpb24pCisgICAgICAgIG91dC5wcmludCgic3RydWN0dXJlID0g
IiwgcG9pbnRlckR1bXAoc3RydWN0dXJlKCkpLCAiIC0+ICIsIHBvaW50ZXJEdW1wKG5ld1N0cnVj
dHVyZSgpKSk7CisgICAgZWxzZQorICAgICAgICBvdXQucHJpbnQoInN0cnVjdHVyZSA9ICIsIHBv
aW50ZXJEdW1wKG1fc3RydWN0dXJlLmdldCgpKSk7CisKKyAgICBvdXQucHJpbnQoIiwgb2Zmc2V0
ID0gIiwgbV9vZmZzZXQsICIsIGNvbmRpdGlvbnMgPSAiLCBtX2NvbmRpdGlvblNldCk7CisKKyAg
ICBpZiAoUmFyZURhdGEqIHJhcmVEYXRhID0gbV9yYXJlRGF0YS5nZXQoKSkgeworICAgICAgICBv
dXQucHJpbnQoCisgICAgICAgICAgICAiLCB2aWFQcm94eSA9ICIsIHJhcmVEYXRhLT52aWFQcm94
eSwKKyAgICAgICAgICAgICIsIGFkZGl0aW9uYWxTZXQgPSAiLCBSYXdQb2ludGVyKHJhcmVEYXRh
LT5hZGRpdGlvbmFsU2V0LmdldCgpKSwKKyAgICAgICAgICAgICIsIGNhbGxMaW5rSW5mbyA9ICIs
IFJhd1BvaW50ZXIocmFyZURhdGEtPmNhbGxMaW5rSW5mby5nZXQoKSksCisgICAgICAgICAgICAi
LCBjdXN0b21BY2Nlc3NvciA9ICIsIFJhd1BvaW50ZXIocmFyZURhdGEtPmN1c3RvbUFjY2Vzc29y
Lm9wYXF1ZSkpOworICAgIH0KKworICAgIG91dC5wcmludCgiKSIpOworfQorCitib29sIEFjY2Vz
c0Nhc2U6OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0CiB7CiAgICAgaWYgKG1fc3RydWN0dXJlICYm
ICFIZWFwOjppc01hcmtlZChtX3N0cnVjdHVyZS5nZXQoKSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBpZiAoIW1fY29uZGl0aW9uU2V0LmFyZVN0aWxsTGl2ZSgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgaWYgKCFtX3N0dWJSb3V0aW5lLT52aXNpdFdlYWsodm0pKQotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fcmFyZURhdGEgJiYgbV9yYXJlRGF0YS0+Y2FsbExp
bmtJbmZvKQorICAgICAgICBtX3JhcmVEYXRhLT5jYWxsTGlua0luZm8tPnZpc2l0V2Vhayh2bSk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVBvbHltb3JwaGljR2V0QnlJZExpc3Q6OlBvbHltb3Jw
aGljR2V0QnlJZExpc3QoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQordm9pZCBBY2Nlc3ND
YXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKKyAgICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRl
LCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0JiBmYWxsVGhyb3VnaCkKIHsKLSAgICBpZiAoc3R1Yklu
Zm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAg
ICBtX2xpc3QuYXBwZW5kKEdldEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1cmVTdHViSW5mbyhzdHVi
SW5mbykpOworICAgIENDYWxsSGVscGVycyYgaml0ID0gKnN0YXRlLmppdDsKKworICAgIHN3aXRj
aCAobV90eXBlKSB7CisgICAgY2FzZSBBcnJheUxlbmd0aDogeworICAgICAgICBBU1NFUlQoIXZp
YVByb3h5KCkpOworICAgICAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0YXRl
LmJhc2VHUFIsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBzdGF0ZS5zY3JhdGNoR1BS
KTsKKyAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKAorICAgICAgICAgICAgaml0LmJyYW5jaFRl
c3QzMigKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Olplcm8sIHN0YXRlLnNjcmF0Y2hH
UFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKElzQXJyYXkpKSk7CisgICAgICAgIGZhbGxU
aHJvdWdoLmFwcGVuZCgKKyAgICAgICAgICAgIGppdC5icmFuY2hUZXN0MzIoCisgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpaZXJvLCBzdGF0ZS5zY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzaykpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgY2FzZSBTdHJpbmdMZW5ndGg6IHsKKyAgICAgICAgQVNTRVJUKCF2aWFQcm94eSgp
KTsKKyAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKAorICAgICAgICAgICAgaml0LmJyYW5jaDgo
CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKKyAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RhdGUuYmFzZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5
cGVPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
U3RyaW5nVHlwZSkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZGVmYXVsdDogewor
ICAgICAgICBpZiAodmlhUHJveHkoKSkgeworICAgICAgICAgICAgZmFsbFRocm91Z2guYXBwZW5k
KAorICAgICAgICAgICAgICAgIGppdC5icmFuY2g4KAorICAgICAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3Moc3RhdGUuYmFzZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksCisgICAg
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKFB1cmVGb3J3YXJkaW5n
UHJveHlUeXBlKSkpOworCisgICAgICAgICAgICBqaXQubG9hZFB0cigKKyAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RhdGUuYmFzZUdQUiwgSlNQcm94eTo6dGFyZ2V0T2Zm
c2V0KCkpLAorICAgICAgICAgICAgICAgIHN0YXRlLnNjcmF0Y2hHUFIpOworCisgICAgICAgICAg
ICBmYWxsVGhyb3VnaC5hcHBlbmQoCisgICAgICAgICAgICAgICAgaml0LmJyYW5jaFN0cnVjdHVy
ZSgKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKKyAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0YXRlLnNjcmF0Y2hHUFIsIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSgp
KSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCisg
ICAgICAgICAgICAgICAgaml0LmJyYW5jaFN0cnVjdHVyZSgKKyAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKHN0YXRlLmJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCisg
ICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSgpKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisgICAgfSB9OworCisgICAgZ2VuZXJhdGUoc3RhdGUpOwogfQogCi1Qb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0KiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojpmcm9tKFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbykKK3ZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGUoQWNjZXNzR2VuZXJhdGlvblN0
YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0
X2J5X2lkX2xpc3QpCi0gICAgICAgIHJldHVybiBzdHViSW5mby51LmdldEJ5SWRMaXN0Lmxpc3Q7
Ci0gICAgCi0gICAgQVNTRVJUKAotICAgICAgICBzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vz
c19nZXRfYnlfaWRfc2VsZgotICAgICAgICB8fCBzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vz
c191bnNldCk7Ci0gICAgCi0gICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogcmVzdWx0ID0gbmV3
IFBvbHltb3JwaGljR2V0QnlJZExpc3Qoc3R1YkluZm8pOwotICAgIAotICAgIHN0dWJJbmZvLmlu
aXRHZXRCeUlkTGlzdChyZXN1bHQpOworICAgIENDYWxsSGVscGVycyYgaml0ID0gKnN0YXRlLmpp
dDsKKyAgICBWTSYgdm0gPSAqaml0LnZtKCk7CisgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvID0gKnN0YXRlLnN0dWJJbmZvOworICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gKnN0
YXRlLmlkZW50OworICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyA9IHN0YXRlLnZhbHVlUmVnczsK
KyAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRlLmJhc2VHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hH
UFIgPSBzdGF0ZS5zY3JhdGNoR1BSOworCisgICAgQVNTRVJUKG1fY29uZGl0aW9uU2V0LnN0cnVj
dHVyZXNFbnN1cmVWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpOwor
CisgICAgaWYgKChzdHJ1Y3R1cmUoKSAmJiBzdHJ1Y3R1cmUoKS0+bmVlZEltcHVyZVByb3BlcnR5
V2F0Y2hwb2ludCgpKQorICAgICAgICB8fCBtX2NvbmRpdGlvblNldC5uZWVkSW1wdXJlUHJvcGVy
dHlXYXRjaHBvaW50KCkpCisgICAgICAgIHZtLnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVBy
b3BlcnR5KGlkZW50LCBzdGF0ZS5hZGRXYXRjaHBvaW50KCkpOworCisgICAgaWYgKGFkZGl0aW9u
YWxTZXQoKSkKKyAgICAgICAgYWRkaXRpb25hbFNldCgpLT5hZGQoc3RhdGUuYWRkV2F0Y2hwb2lu
dCgpKTsKKworICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlv
biA6IG1fY29uZGl0aW9uU2V0KSB7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY29u
ZGl0aW9uLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKTsKKworICAgICAgICBpZiAoY29uZGl0aW9uLmlz
V2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkgeworICAgICAgICAg
ICAgc3RydWN0dXJlLT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludChzdGF0ZS5hZGRXYXRjaHBvaW50
KGNvbmRpdGlvbikpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChjb25kaXRpb24uc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1p
bmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoc3RydWN0dXJlKSk7CisgICAgICAgIGppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjb25kaXRpb24ub2JqZWN0KCkpLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgc3RhdGUuZmFpbEFuZFJlcGF0Y2guYXBwZW5kKAorICAgICAgICAgICAg
aml0LmJyYW5jaFN0cnVjdHVyZSgKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVx
dWFsLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBK
U0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIHN0cnVjdHVyZSkp
OworICAgIH0KKworICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgY2FzZSBJbkhpdDoKKyAgICBj
YXNlIEluTWlzczoKKyAgICAgICAgaml0LmJveEJvb2xlYW5QYXlsb2FkKG1fdHlwZSA9PSBJbkhp
dCwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSk7CisgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKKyAg
ICAgICAgcmV0dXJuOworCisgICAgY2FzZSBNaXNzOgorICAgICAgICBqaXQubW92ZVRydXN0ZWRW
YWx1ZShqc1VuZGVmaW5lZCgpLCB2YWx1ZVJlZ3MpOworICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7
CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgTG9hZDoKKyAgICBjYXNlIEdldHRlcjoKKyAg
ICBjYXNlIFNldHRlcjoKKyAgICBjYXNlIEN1c3RvbUdldHRlcjoKKyAgICBjYXNlIEN1c3RvbVNl
dHRlcjogeworICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChtX29mZnNldCkpIHsKKyAgICAgICAg
ICAgIFN0cnVjdHVyZSogY3VyclN0cnVjdHVyZTsKKyAgICAgICAgICAgIGlmIChtX2NvbmRpdGlv
blNldC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVy
ZSgpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBt
X2NvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKTsK
KyAgICAgICAgICAgIGN1cnJTdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxh
Y2VtZW50cyh2bSwgb2Zmc2V0KCkpOworICAgICAgICB9CisKKyAgICAgICAgR1BSUmVnIGJhc2VG
b3JHZXRHUFI7CisgICAgICAgIGlmICh2aWFQcm94eSgpKSB7CisgICAgICAgICAgICBiYXNlRm9y
R2V0R1BSID0gdmFsdWVSZWdzLnBheWxvYWRHUFIoKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRy
KAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU1Byb3h5
Ojp0YXJnZXRPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgYmFzZUZvckdldEdQUik7CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgYmFzZUZvckdldEdQUiA9IGJhc2VHUFI7CisKKyAgICAg
ICAgR1BSUmVnIGJhc2VGb3JBY2Nlc3NHUFI7CisgICAgICAgIGlmICghbV9jb25kaXRpb25TZXQu
aXNFbXB0eSgpKSB7CisgICAgICAgICAgICBqaXQubW92ZSgKKyAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9jb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24o
KS5vYmplY3QoKSksCisgICAgICAgICAgICAgICAgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBi
YXNlRm9yQWNjZXNzR1BSID0gc2NyYXRjaEdQUjsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICBiYXNlRm9yQWNjZXNzR1BSID0gYmFzZUZvckdldEdQUjsKKworICAgICAgICBHUFJSZWcgbG9h
ZGVkVmFsdWVHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICBpZiAobV90eXBlICE9IEN1c3Rv
bUdldHRlciAmJiBtX3R5cGUgIT0gQ3VzdG9tU2V0dGVyKSB7CisgICAgICAgICAgICBpZiAobV90
eXBlID09IExvYWQpCisgICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIgPSB2YWx1ZVJlZ3Mu
cGF5bG9hZEdQUigpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxvYWRlZFZh
bHVlR1BSID0gc2NyYXRjaEdQUjsKKworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFI7Cisg
ICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQobV9vZmZzZXQpKQorICAgICAgICAgICAgICAg
IHN0b3JhZ2VHUFIgPSBiYXNlRm9yQWNjZXNzR1BSOworICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgaml0LmxvYWRQdHIoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6QWRkcmVzcyhiYXNlRm9yQWNjZXNzR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LAorICAgICAgICAgICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUik7CisgICAgICAgICAgICAgICAg
c3RvcmFnZUdQUiA9IGxvYWRlZFZhbHVlR1BSOworICAgICAgICAgICAgfQorCisjaWYgVVNFKEpT
VkFMVUU2NCkKKyAgICAgICAgICAgIGppdC5sb2FkNjQoCisgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKG1fb2Zmc2V0
KSksIGxvYWRlZFZhbHVlR1BSKTsKKyNlbHNlCisgICAgICAgICAgICBpZiAobV90eXBlID09IExv
YWQpIHsKKyAgICAgICAgICAgICAgICBqaXQubG9hZDMyKAorICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RvcmFnZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2UobV9v
ZmZzZXQpICsgVGFnT2Zmc2V0KSwKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVSZWdzLnRhZ0dQ
UigpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGppdC5sb2FkMzIoCisgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9mZnNldFJlbGF0aXZlVG9C
YXNlKG1fb2Zmc2V0KSArIFBheWxvYWRPZmZzZXQpLAorICAgICAgICAgICAgICAgIGxvYWRlZFZh
bHVlR1BSKTsKKyNlbmRpZgorICAgICAgICB9CisKKyAgICAgICAgLy8gU3R1ZmYgZm9yIGN1c3Rv
bSBnZXR0ZXJzLgorICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9uQ2FsbDsKKyAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGhhbmRsZXJDYWxsOworCisgICAgICAgIC8vIFN0dWZm
IGZvciBKUyBnZXR0ZXJzLgorICAgICAgICBDQ2FsbEhlbHBlcnM6OkRhdGFMYWJlbFB0ciBhZGRy
ZXNzT2ZMaW5rRnVuY3Rpb25DaGVjazsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGZhc3RQ
YXRoQ2FsbDsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHNsb3dQYXRoQ2FsbDsKKworICAg
ICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgc3VjY2VzczsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpK
dW1wIGZhaWw7CisgICAgICAgIGlmIChtX3R5cGUgIT0gTG9hZCAmJiBtX3R5cGUgIT0gTWlzcykg
eworICAgICAgICAgICAgLy8gTmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3aGVuZXZlciB0aGlzIGNh
bGwgaXMgbWFkZSBpbiB0aGUgZnV0dXJlLCB3ZSByZW1lbWJlciB0aGUKKyAgICAgICAgICAgIC8v
IHBsYWNlIHRoYXQgd2UgbWFkZSBpdCBmcm9tLgorICAgICAgICAgICAgaml0LnN0b3JlMzIoCisg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3R1YkluZm8uY2FsbFNp
dGVJbmRleC5iaXRzKCkpLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKHN0
YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKKwor
ICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBHZXR0ZXIgfHwgbV90eXBlID09IFNldHRlcikgewor
ICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIEpTIGNhbGwgdXNpbmcgYSBKUyBjYWxsIGlubGlu
ZSBjYWNoZS4gQXNzdW1lIHRoYXQ6CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAg
ICAvLyAtIFNQIGlzIGFsaWduZWQgYW5kIHJlcHJlc2VudHMgdGhlIGV4dGVudCBvZiB0aGUgY2Fs
bGluZyBjb21waWxlcidzIHN0YWNrIHVzYWdlLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAg
ICAgICAgICAgLy8gLSBGUCBpcyBzZXQgY29ycmVjdGx5IChpLmUuIGl0IHBvaW50cyB0byB0aGUg
Y2FsbGVyJ3MgY2FsbCBmcmFtZSBoZWFkZXIpLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAg
ICAgICAgICAgLy8gLSBTUCAtIEZQIGlzIGFuIGFsaWduZWQgZGlmZmVyZW5jZS4KKyAgICAgICAg
ICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIC0gQW55IGJ5dGUgYmV0d2VlbiBGUCAoZXhj
bHVzaXZlKSBhbmQgU1AgKGluY2x1c2l2ZSkgY291bGQgYmUgbGl2ZSBpbiB0aGUgY2FsbGluZwor
ICAgICAgICAgICAgICAgIC8vICAgY29kZS4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAg
ICAgICAgIC8vIFRoZXJlZm9yZSwgd2UgdGVtcG9yYXJpbHkgZ3JvdyB0aGUgc3RhY2sgZm9yIHRo
ZSBwdXJwb3NlIG9mIHRoZSBjYWxsIGFuZCB0aGVuCisgICAgICAgICAgICAgICAgLy8gc2hyaW5r
IGl0IGFmdGVyLgorCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fcmFyZURhdGEt
PmNhbGxMaW5rSW5mbyk7CisgICAgICAgICAgICAgICAgbV9yYXJlRGF0YS0+Y2FsbExpbmtJbmZv
ID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxsTGlua0luZm8+KCk7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IElmIHdlIGdlbmVyYXRlZCBhIHBvbHltb3JwaGljIGNh
bGwgc3R1YiB0aGF0IGp1bXBlZCBiYWNrIHRvIHRoZSBnZXR0ZXIKKyAgICAgICAgICAgICAgICAv
LyBzdHViLCB3aGljaCB0aGVuIGp1bXBlZCBiYWNrIHRvIHRoZSBtYWluIGNvZGUsIHRoZW4gd2Un
ZCBoYXZlIGEgcmVhY2hhYmlsaXR5CisgICAgICAgICAgICAgICAgLy8gc2l0dWF0aW9uIHRoYXQg
dGhlIEdDIGRvZXNuJ3Qga25vdyBhYm91dC4gVGhlIEdDIHdvdWxkIGVuc3VyZSB0aGF0IHRoZSBw
b2x5bW9ycGhpYworICAgICAgICAgICAgICAgIC8vIGNhbGwgc3R1YiBzdGF5ZWQgYWxpdmUsIGFu
ZCBpdCB3b3VsZCBlbnN1cmUgdGhhdCB0aGUgbWFpbiBjb2RlIHN0YXllZCBhbGl2ZSwgYnV0Cisg
ICAgICAgICAgICAgICAgLy8gaXQgd291bGRuJ3Qga25vdyB0aGF0IHRoZSBnZXR0ZXIgc3R1YiB3
YXMgYWxpdmUuIElkZWFsbHkgSklUIHN0dWIgcm91dGluZXMgd291bGQKKyAgICAgICAgICAgICAg
ICAvLyBiZSBHQyBvYmplY3RzLCBhbmQgdGhlbiB3ZSdkIGJlIGFibGUgdG8gc2F5IHRoYXQgdGhl
IHBvbHltb3JwaGljIGNhbGwgc3R1YiBoYXMgYQorICAgICAgICAgICAgICAgIC8vIHJlZmVyZW5j
ZSB0byB0aGUgZ2V0dGVyIHN0dWIuCisgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODkxNAorICAgICAgICAgICAgICAgIG1fcmFyZURh
dGEtPmNhbGxMaW5rSW5mby0+ZGlzYWxsb3dTdHVicygpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIG1fcmFyZURhdGEtPmNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKAorICAgICAg
ICAgICAgICAgICAgICBDYWxsTGlua0luZm86OkNhbGwsIHN0dWJJbmZvLmNvZGVPcmlnaW4sIGxv
YWRlZFZhbHVlR1BSKTsKKworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
ZG9uZTsKKworICAgICAgICAgICAgICAgIC8vIFRoZXJlIGlzIGEgInRoaXMiIGFyZ3VtZW50Lgor
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mUGFyYW1ldGVycyA9IDE7CisgICAgICAg
ICAgICAgICAgLy8gLi4uIGFuZCBhIHZhbHVlIGFyZ3VtZW50IGlmIHdlJ3JlIGNhbGxpbmcgYSBz
ZXR0ZXIuCisgICAgICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBTZXR0ZXIpCisgICAgICAgICAg
ICAgICAgICAgIG51bWJlck9mUGFyYW1ldGVycysrOworCisgICAgICAgICAgICAgICAgLy8gR2V0
IHRoZSBhY2Nlc3NvcjsgaWYgdGhlcmUgYWluJ3Qgb25lIHRoZW4gdGhlIHJlc3VsdCBpcyBqc1Vu
ZGVmaW5lZCgpLgorICAgICAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gU2V0dGVyKSB7CisgICAg
ICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKAorICAgICAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKGxvYWRlZFZhbHVlR1BSLCBHZXR0ZXJTZXR0ZXI6Om9mZnNldE9m
U2V0dGVyKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIpOworICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKAor
ICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGxvYWRlZFZhbHVl
R1BSLCBHZXR0ZXJTZXR0ZXI6Om9mZnNldE9mR2V0dGVyKCkpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgbG9hZGVkVmFsdWVHUFIpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6SnVtcCByZXR1cm5VbmRlZmluZWQgPSBqaXQuYnJhbmNoVGVzdFB0
cigKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpaZXJvLCBsb2FkZWRWYWx1ZUdQ
Uik7CisKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlJlZ3NGb3JDYWxsID0gSlNT
dGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIG51bWJlck9mUGFyYW1ldGVyczsKKworICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQnl0ZXNGb3JDYWxsID0KKyAgICAgICAgICAgICAg
ICAgICAgbnVtYmVyT2ZSZWdzRm9yQ2FsbCAqIHNpemVvZihSZWdpc3RlcikgKyBzaXplb2YoQ2Fs
bGVyRnJhbWVBbmRQQyk7CisKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBhbGlnbmVkTnVtYmVy
T2ZCeXRlc0ZvckNhbGwgPQorICAgICAgICAgICAgICAgICAgICBXVEY6OnJvdW5kVXBUb011bHRp
cGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCk7CisKKyAg
ICAgICAgICAgICAgICBqaXQuc3ViUHRyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwpLAorICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyBjYWxsZWVGcmFtZSA9IENDYWxsSGVscGVy
czo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50
ZXJSZWdpc3RlciwKKyAgICAgICAgICAgICAgICAgICAgLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4o
c2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7CisKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmUz
MigKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobnVtYmVy
T2ZQYXJhbWV0ZXJzKSwKKyAgICAgICAgICAgICAgICAgICAgY2FsbGVlRnJhbWUud2l0aE9mZnNl
dChKU1N0YWNrOjpBcmd1bWVudENvdW50ICogc2l6ZW9mKFJlZ2lzdGVyKSArIFBheWxvYWRPZmZz
ZXQpKTsKKworICAgICAgICAgICAgICAgIGppdC5zdG9yZUNlbGwoCisgICAgICAgICAgICAgICAg
ICAgIGxvYWRlZFZhbHVlR1BSLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KEpTU3RhY2s6OkNhbGxl
ZSAqIHNpemVvZihSZWdpc3RlcikpKTsKKworICAgICAgICAgICAgICAgIGppdC5zdG9yZUNlbGwo
CisgICAgICAgICAgICAgICAgICAgIGJhc2VGb3JHZXRHUFIsCisgICAgICAgICAgICAgICAgICAg
IGNhbGxlZUZyYW1lLndpdGhPZmZzZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCkub2Zm
c2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisKKyAgICAgICAgICAgICAgICBpZiAobV90eXBl
ID09IFNldHRlcikgeworICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSgKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHZhbHVlUmVncywKKyAgICAgICAgICAgICAgICAgICAgICAgIGNh
bGxlZUZyYW1lLndpdGhPZmZzZXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlydHVh
bFJlZ2lzdGVyRm9yQXJndW1lbnQoMSkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHNs
b3dDYXNlID0gaml0LmJyYW5jaFB0cldpdGhQYXRjaCgKKyAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpOb3RFcXVhbCwgbG9hZGVkVmFsdWVHUFIsIGFkZHJlc3NPZkxpbmtGdW5jdGlv
bkNoZWNrLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
MCkpOworCisgICAgICAgICAgICAgICAgZmFzdFBhdGhDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisK
KyAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMihhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwpLAorICAgICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAg
ICAgICAgICAgICBpZiAobV90eXBlID09IEdldHRlcikKKyAgICAgICAgICAgICAgICAgICAgaml0
LnNldHVwUmVzdWx0cyh2YWx1ZVJlZ3MpOworCisgICAgICAgICAgICAgICAgZG9uZS5hcHBlbmQo
aml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2UubGluaygmaml0KTsKKworICAg
ICAgICAgICAgICAgIGppdC5tb3ZlKGxvYWRlZFZhbHVlR1BSLCBHUFJJbmZvOjpyZWdUMCk7Cisj
aWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgICAgICAgICAvLyBXZSAqYWx3YXlzKiBrbm93
IHRoYXQgdGhlIGdldHRlci9zZXR0ZXIsIGlmIG5vbi1udWxsLCBpcyBhIGNlbGwuCisgICAgICAg
ICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2Vs
bFRhZyksIEdQUkluZm86OnJlZ1QxKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX3JhcmVEYXRhLT5jYWxsTGlua0luZm8uZ2V0
KCkpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsID0gaml0
Lm5lYXJDYWxsKCk7CisKKyAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAorICAgICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihhbGlnbmVkTnVtYmVyT2ZCeXRlc0Zv
ckNhbGwpLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKKyAgICAgICAgICAgICAgICBpZiAobV90eXBlID09IEdldHRlcikKKyAgICAgICAg
ICAgICAgICAgICAgaml0LnNldHVwUmVzdWx0cyh2YWx1ZVJlZ3MpOworCisgICAgICAgICAgICAg
ICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuVW5kZWZp
bmVkLmxpbmsoJmppdCk7CisKKyAgICAgICAgICAgICAgICBpZiAobV90eXBlID09IEdldHRlcikK
KyAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwg
dmFsdWVSZWdzKTsKKworICAgICAgICAgICAgICAgIGRvbmUubGluaygmaml0KTsKKworICAgICAg
ICAgICAgICAgIHN0YXRlLmNhbGxiYWNrcy5hcHBlbmQoCisgICAgICAgICAgICAgICAgICAgIFs9
LCAmdm1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBtX3JhcmVEYXRhLT5jYWxsTGlua0luZm8tPnNldENhbGxMb2NhdGlvbnMoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoc2xvd1BhdGhD
YWxsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yo
YWRkcmVzc09mTGlua0Z1bmN0aW9uQ2hlY2spLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKGZhc3RQYXRoQ2FsbCkpOworCisgICAgICAg
ICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2xvd1BhdGhDYWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2Nh
dGlvbkxhYmVsKHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7
CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAvLyBnZXR0ZXI6IEVuY29kZWRKU1ZhbHVlICgqR2V0VmFsdWVGdW5jKShFeGVjU3Rh
dGUqLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKTsKKyAgICAgICAgICAgICAgICAvLyBzZXR0ZXI6IHZvaWQgKCpQdXRWYWx1ZUZ1bmMp
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBiYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzT2JqZWN0LCBF
bmNvZGVkSlNWYWx1ZSB2YWx1ZSk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgICAg
ICBpZiAobV90eXBlID09IEN1c3RvbUdldHRlcikgeworICAgICAgICAgICAgICAgICAgICBqaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgYmFz
ZUZvckFjY2Vzc0dQUiwgYmFzZUZvckdldEdQUiwKKyAgICAgICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihpZGVudC5pbXBsKCkpKTsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShiYXNlRm9yQWNjZXNzR1BSLCBiYXNlRm9yR2V0R1BSLCB2YWx1ZVJlZ3MuZ3ByKCkpOwor
I2Vsc2UKKyAgICAgICAgICAgICAgICBpZiAobV90eXBlID09IEN1c3RvbUdldHRlcikgeworICAg
ICAgICAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKAorICAgICAg
ICAgICAgICAgICAgICAgICAgYmFzZUZvckFjY2Vzc0dQUiwgYmFzZUZvckdldEdQUiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNl
bGxUYWcpLAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKGlkZW50LmltcGwoKSkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoCisgICAgICAgICAgICAg
ICAgICAgICAgICBiYXNlRm9yQWNjZXNzR1BSLCBiYXNlRm9yR2V0R1BSLAorICAgICAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyks
CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB2YWx1ZVJl
Z3MudGFnR1BSKCkpOworICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgICAg
IGppdC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgJnZtLnRvcENhbGxGcmFt
ZSk7CisKKyAgICAgICAgICAgICAgICBvcGVyYXRpb25DYWxsID0gaml0LmNhbGwoKTsKKyAgICAg
ICAgICAgICAgICBpZiAobV90eXBlID09IEN1c3RvbUdldHRlcikKKyAgICAgICAgICAgICAgICAg
ICAgaml0LnNldHVwUmVzdWx0cyh2YWx1ZVJlZ3MpOworICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcCBub0V4Y2VwdGlvbiA9CisgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0RXhj
ZXB0aW9uQ2hlY2soQ0NhbGxIZWxwZXJzOjpJbnZlcnRlZEV4Y2VwdGlvbkNoZWNrKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50cyhDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoJnZtKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAg
ICAgICAgICAgIGhhbmRsZXJDYWxsID0gaml0LmNhbGwoKTsKKyAgICAgICAgICAgICAgICBqaXQu
anVtcFRvRXhjZXB0aW9uSGFuZGxlcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
bm9FeGNlcHRpb24ubGluaygmaml0KTsKKworICAgICAgICAgICAgICAgIHN0YXRlLmNhbGxiYWNr
cy5hcHBlbmQoCisgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgeworICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKG9wZXJhdGlvbkNh
bGwsIEZ1bmN0aW9uUHRyKG1fcmFyZURhdGEtPmN1c3RvbUFjY2Vzc29yLm9wYXF1ZSkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGhhbmRsZXJDYWxsLCBsb29rdXBF
eGNlcHRpb25IYW5kbGVyKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgc3RhdGUuc3VjY2VlZCgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgY2FzZSBSZXBsYWNlOiB7CisgICAgICAgIGlmIChpc0lubGluZU9mZnNldCht
X29mZnNldCkpIHsKKyAgICAgICAgICAgIGppdC5zdG9yZVZhbHVlKAorICAgICAgICAgICAgICAg
IHZhbHVlUmVncywKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAg
ICAgICAgICAgICAgICAgIGJhc2VHUFIsCisgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0Ojpv
ZmZzZXRPZklubGluZVN0b3JhZ2UoKSArCisgICAgICAgICAgICAgICAgICAgIG9mZnNldEluSW5s
aW5lU3RvcmFnZShtX29mZnNldCkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BS
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAg
IGppdC5zdG9yZVZhbHVlKAorICAgICAgICAgICAgICAgIHZhbHVlUmVncywKKyAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hH
UFIsIG9mZnNldEluQnV0dGVyZmx5KG1fb2Zmc2V0KSAqIHNpemVvZihKU1ZhbHVlKSkpOworICAg
ICAgICB9CisgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGNhc2UgVHJhbnNpdGlvbjogeworICAgICAgICAvLyBBY2Nlc3NDYXNlOjp0cmFuc2l0
aW9uKCkgc2hvdWxkIGhhdmUgcmV0dXJuZWQgbnVsbC4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
R1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgPj0gNiB8fCAhc3RydWN0dXJlKCktPm91dE9mTGlu
ZUNhcGFjaXR5KCkgfHwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgPT0gbmV3U3Ry
dWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCgh
c3RydWN0dXJlKCktPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpOworCisgICAgICAgIENDYWxs
SGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CisKKyAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yIGFsbG9jYXRvcihzdHViSW5mby5wYXRjaC51c2VkUmVnaXN0ZXJzKTsKKyAgICAgICAg
YWxsb2NhdG9yLmxvY2soYmFzZUdQUik7CisgICAgICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlUmVn
cyk7CisgICAgICAgIGFsbG9jYXRvci5sb2NrKHNjcmF0Y2hHUFIpOworCisgICAgICAgIEdQUlJl
ZyBzY3JhdGNoR1BSMiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAg
R1BSUmVnIHNjcmF0Y2hHUFIzOworICAgICAgICBpZiAobmV3U3RydWN0dXJlKCktPm91dE9mTGlu
ZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkKKyAgICAgICAg
ICAgICYmIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKQorICAgICAgICAgICAgc2Ny
YXRjaEdQUjMgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHNjcmF0Y2hHUFIzID0gSW52YWxpZEdQUlJlZzsKKworICAgICAgICBzaXpl
X3QgbnVtYmVyT2ZQYWRkaW5nQnl0ZXMgPSBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3Rl
cnNCeVB1c2hpbmcoaml0KTsKKworICAgICAgICBBU1NFUlQoc3RydWN0dXJlKCktPnRyYW5zaXRp
b25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOworCisgICAgICAgIGJvb2wgc2Ny
YXRjaEdQUkhhc1N0b3JhZ2UgPSBmYWxzZTsKKworICAgICAgICBpZiAobmV3U3RydWN0dXJlKCkt
Pm91dE9mTGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkp
IHsKKyAgICAgICAgICAgIHNpemVfdCBuZXdTaXplID0gbmV3U3RydWN0dXJlKCktPm91dE9mTGlu
ZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7CisgICAgICAgICAgICBDb3BpZWRBbGxvY2F0
b3IqIGNvcGllZEFsbG9jYXRvciA9ICZ2bS5oZWFwLnN0b3JhZ2VBbGxvY2F0b3IoKTsKKworICAg
ICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgeworICAgICAg
ICAgICAgICAgIGppdC5sb2FkUHRyKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmlu
Zywgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKAorICAgICAg
ICAgICAgICAgICAgICBqaXQuYnJhbmNoU3ViUHRyKAorICAgICAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpTaWduZWQsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG5ld1NpemUp
LCBzY3JhdGNoR1BSKSk7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIs
ICZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZyk7CisgICAgICAgICAgICAgICAg
aml0Lm5lZ1B0cihzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAorICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFic29sdXRlQWRkcmVzcygmY29waWVkQWxs
b2NhdG9yLT5tX2N1cnJlbnRQYXlsb2FkRW5kKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAg
ICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzaXplb2YoSlNWYWx1ZSkp
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2l6
ZV90IG9sZFNpemUgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihK
U1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIzKTsK
KyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRS
ZW1haW5pbmcsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZCgK
KyAgICAgICAgICAgICAgICAgICAgaml0LmJyYW5jaFN1YlB0cigKKyAgICAgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6U2lnbmVkLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihu
ZXdTaXplKSwgc2NyYXRjaEdQUikpOworICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cihzY3Jh
dGNoR1BSLCAmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcpOworICAgICAgICAg
ICAgICAgIGppdC5uZWdQdHIoc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgaml0LmFkZFB0
cigKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MoJmNv
cGllZEFsbG9jYXRvci0+bV9jdXJyZW50UGF5bG9hZEVuZCksIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEpT
VmFsdWUpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBzY3JhdGNo
R1BSID0gbmV3IHN0b3JhZ2UsIHNjcmF0Y2hHUFIzID0gb2xkIHN0b3JhZ2UsCisgICAgICAgICAg
ICAgICAgLy8gc2NyYXRjaEdQUjIgPSBhdmFpbGFibGUKKyAgICAgICAgICAgICAgICBmb3IgKHNp
emVfdCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBvbGRTaXplOyBvZmZzZXQgKz0gc2l6ZW9mKHZvaWQq
KSkgeworICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFB0cigKKyAgICAgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzY3JhdGNoR1BSMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAtc3RhdGljX2Nhc3Q8
cHRyZGlmZl90PigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICsgc2l6
ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAg
c2NyYXRjaEdQUjIpOworICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoCisgICAgICAg
ICAgICAgICAgICAgICAgICBzY3JhdGNoR1BSMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNo
R1BSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+
KG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZih2b2lkKikpKSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBqaXQuc3RvcmVQdHIoc2NyYXRj
aEdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlP
ZmZzZXQoKSkpOworICAgICAgICAgICAgc2NyYXRjaEdQUkhhc1N0b3JhZ2UgPSB0cnVlOworICAg
ICAgICB9CisKKyAgICAgICAgdWludDMyX3Qgc3RydWN0dXJlQml0cyA9IGJpdHdpc2VfY2FzdDx1
aW50MzJfdD4obmV3U3RydWN0dXJlKCktPmlkKCkpOworICAgICAgICBqaXQuc3RvcmUzMigKKyAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHN0cnVjdHVyZUJpdHMpLAorICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSkpOworCisgICAgICAgIGlmIChpc0lubGluZU9mZnNldChtX29mZnNldCkpIHsK
KyAgICAgICAgICAgIGppdC5zdG9yZVZhbHVlKAorICAgICAgICAgICAgICAgIHZhbHVlUmVncywK
KyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICAgICAg
ICAgIGJhc2VHUFIsCisgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0OjpvZmZzZXRPZklubGlu
ZVN0b3JhZ2UoKSArCisgICAgICAgICAgICAgICAgICAgIG9mZnNldEluSW5saW5lU3RvcmFnZSht
X29mZnNldCkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGlmICghc2NyYXRjaEdQUkhhc1N0b3JhZ2UpCisgICAgICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUoCisgICAgICAg
ICAgICAgICAgdmFsdWVSZWdzLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVz
cyhzY3JhdGNoR1BSLCBvZmZzZXRJbkJ1dHRlcmZseShtX29mZnNldCkgKiBzaXplb2YoSlNWYWx1
ZSkpKTsKKyAgICAgICAgfQorCisgICAgICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIg
PSBudWxscHRyOworICAgICAgICBpZiAobmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5
KCkgIT0gc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpCisgICAgICAgICAgICBzY3Jh
dGNoQnVmZmVyID0gdm0uc2NyYXRjaEJ1ZmZlckZvclNpemUoYWxsb2NhdG9yLmRlc2lyZWRTY3Jh
dGNoQnVmZmVyU2l6ZUZvckNhbGwoKSk7CisKKyNpZiBFTkFCTEUoR0dDKQorICAgICAgICBpZiAo
bmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlKCktPm91dE9m
TGluZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsRmx1
c2hXcml0ZUJhcnJpZXJCdWZmZXI7CisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgb3du
ZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGppdC5qdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihi
YXNlR1BSKTsKKyAgICAgICAgICAgIFdyaXRlQmFycmllckJ1ZmZlciYgd3JpdGVCYXJyaWVyQnVm
ZmVyID0gaml0LnZtKCktPmhlYXAud3JpdGVCYXJyaWVyQnVmZmVyKCk7CisgICAgICAgICAgICBq
aXQubG9hZDMyKHdyaXRlQmFycmllckJ1ZmZlci5jdXJyZW50SW5kZXhBZGRyZXNzKCksIHNjcmF0
Y2hHUFIyKTsKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBuZWVkVG9GbHVzaCA9Cisg
ICAgICAgICAgICAgICAgaml0LmJyYW5jaDMyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OkFib3ZlT3JFcXVhbCwgc2NyYXRjaEdQUjIsCisgICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHdyaXRlQmFycmllckJ1ZmZlci5jYXBhY2l0eSgpKSk7
CisKKyAgICAgICAgICAgIGppdC5hZGQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwg
c2NyYXRjaEdQUjIpOworICAgICAgICAgICAgaml0LnN0b3JlMzIoc2NyYXRjaEdQUjIsIHdyaXRl
QmFycmllckJ1ZmZlci5jdXJyZW50SW5kZXhBZGRyZXNzKCkpOworCisgICAgICAgICAgICBqaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIod3JpdGVCYXJyaWVyQnVmZmVyLmJ1ZmZl
cigpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAvLyBXZSB1c2UgYW4gb2Zmc2V0IG9mIC1z
aXplb2Yodm9pZCopIGJlY2F1c2Ugd2UgYWxyZWFkeSBhZGRlZCAxIHRvIHNjcmF0Y2hHUFIyLgor
ICAgICAgICAgICAgaml0LnN0b3JlUHRyKAorICAgICAgICAgICAgICAgIGJhc2VHUFIsCisgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoCisgICAgICAgICAgICAgICAgICAg
IHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIyLCBDQ2FsbEhlbHBlcnM6OlNjYWxlUHRyLAorICAgICAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQzMl90Pigtc2l6ZW9mKHZvaWQqKSkpKTsKKwor
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmVXaXRoQmFycmllciA9IGppdC5qdW1w
KCk7CisgICAgICAgICAgICBuZWVkVG9GbHVzaC5saW5rKCZqaXQpOworCisgICAgICAgICAgICBh
bGxvY2F0b3IucHJlc2VydmVVc2VkUmVnaXN0ZXJzVG9TY3JhdGNoQnVmZmVyRm9yQ2FsbChqaXQs
IHNjcmF0Y2hCdWZmZXIsIHNjcmF0Y2hHUFIyKTsKKyAgICAgICAgICAgIGppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoYmFzZUdQUik7CisgICAgICAgICAgICBjYWxsRmx1c2hXcml0ZUJh
cnJpZXJCdWZmZXIgPSBqaXQuY2FsbCgpOworICAgICAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVV
c2VkUmVnaXN0ZXJzRnJvbVNjcmF0Y2hCdWZmZXJGb3JDYWxsKAorICAgICAgICAgICAgICAgIGpp
dCwgc2NyYXRjaEJ1ZmZlciwgc2NyYXRjaEdQUjIpOworCisgICAgICAgICAgICBkb25lV2l0aEJh
cnJpZXIubGluaygmaml0KTsKKyAgICAgICAgICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4u
bGluaygmaml0KTsKKworICAgICAgICAgICAgc3RhdGUuY2FsbGJhY2tzLmFwcGVuZCgKKyAgICAg
ICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAg
ICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGxGbHVzaFdyaXRlQmFycmllckJ1ZmZlciwgb3BlcmF0
aW9uRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIpOworICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICB9CisjZW5kaWYgLy8gRU5BQkxFKEdHQykKKyAgICAgICAgCisgICAgICAgIHN0YXRlLnN1Y2Nl
ZWQoKTsKKworICAgICAgICBpZiAobmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkg
IT0gc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgICAgIHNsb3dQ
YXRoLmxpbmsoJmppdCk7CisgICAgICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lz
dGVyc0J5UG9wcGluZyhqaXQsIG51bWJlck9mUGFkZGluZ0J5dGVzKTsKKyAgICAgICAgICAgIGFs
bG9jYXRvci5wcmVzZXJ2ZVVzZWRSZWdpc3RlcnNUb1NjcmF0Y2hCdWZmZXJGb3JDYWxsKGppdCwg
c2NyYXRjaEJ1ZmZlciwgc2NyYXRjaEdQUik7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAg
ICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoCisgICAgICAgICAgICAgICAgYmFz
ZUdQUiwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobmV3U3Ry
dWN0dXJlKCkpLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG1f
b2Zmc2V0KSwKKyAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MuZ3ByKCkpOworI2Vsc2UKKyAgICAg
ICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoCisgICAgICAgICAgICAgICAg
YmFzZUdQUiwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobmV3
U3RydWN0dXJlKCkpLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KG1fb2Zmc2V0KSwKKyAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB2YWx1
ZVJlZ3MudGFnR1BSKCkpOworI2VuZGlmCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwg
b3BlcmF0aW9uQ2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgICAgICBhbGxvY2F0b3IucmVzdG9y
ZVVzZWRSZWdpc3RlcnNGcm9tU2NyYXRjaEJ1ZmZlckZvckNhbGwoaml0LCBzY3JhdGNoQnVmZmVy
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKKworICAgICAgICAg
ICAgc3RhdGUuY2FsbGJhY2tzLmFwcGVuZCgKKyAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZm
ZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKG9w
ZXJhdGlvbkNhbGwsIG9wZXJhdGlvblJlYWxsb2NhdGVTdG9yYWdlQW5kRmluaXNoUHV0KTsKKyAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgY2FzZSBBcnJheUxlbmd0aDogeworICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQ
Uik7CisgICAgICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIs
IEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3Rh
dGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoCisgICAgICAgICAgICBqaXQuYnJhbmNoMzIoQ0NhbGxI
ZWxwZXJzOjpMZXNzVGhhbiwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
MCkpKTsKKyAgICAgICAgaml0LmJveEludDMyKHNjcmF0Y2hHUFIsIHZhbHVlUmVncyk7CisgICAg
ICAgIHN0YXRlLnN1Y2NlZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNhc2Ug
U3RyaW5nTGVuZ3RoOiB7CisgICAgICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KGJhc2VHUFIsIEpTU3RyaW5nOjpvZmZzZXRPZkxlbmd0aCgpKSwgdmFsdWVSZWdzLnBheWxvYWRH
UFIoKSk7CisgICAgICAgIGppdC5ib3hJbnQzMih2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB2YWx1
ZVJlZ3MpOworICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
IH0KICAgICAKLSAgICByZXR1cm4gcmVzdWx0OworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiB9CiAKLVBvbHltb3JwaGljR2V0QnlJZExpc3Q6On5Qb2x5bW9ycGhpY0dldEJ5SWRM
aXN0KCkgeyB9CitQb2x5bW9ycGhpY0FjY2Vzczo6UG9seW1vcnBoaWNBY2Nlc3MoKSB7IH0KK1Bv
bHltb3JwaGljQWNjZXNzOjp+UG9seW1vcnBoaWNBY2Nlc3MoKSB7IH0KIAotTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmN1cnJlbnRTbG93UGF0aFRhcmdldCgK
LSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pIGNvbnN0CitNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgUG9seW1vcnBoaWNBY2Nlc3M6OnJlZ2VuZXJhdGVXaXRoQ2FzZXMoCisgICAgVk0mIHZt
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25z
dCBJZGVudGlmaWVyJiBpZGVudCwKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nh
c2U+PiBvcmlnaW5hbENhc2VzVG9BZGQpCiB7Ci0gICAgaWYgKGlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZv
LnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpOwotICAgIHJldHVybiBtX2xpc3QubGFzdCgpLnN0
dWJSb3V0aW5lKCktPmNvZGUoKS5jb2RlKCk7CisgICAgLy8gVGhpcyBtZXRob2Qgd2lsbCBhZGQg
dGhlIG9yaWdpbmFsQ2FzZXNUb0FkZCB0byB0aGUgbGlzdCBvbmUgYXQgYSB0aW1lIHdoaWxlIHBy
ZXNlcnZpbmcgdGhlCisgICAgLy8gaW52YXJpYW50czoKKyAgICAvLyAtIElmIGEgbmV3bHkgYWRk
ZWQgY2FzZSBjYW5SZXBsYWNlKCkgYW55IGV4aXN0aW5nIGNhc2UsIHRoZW4gdGhlIGV4aXN0aW5n
IGNhc2UgaXMgcmVtb3ZlZCBiZWZvcmUKKyAgICAvLyAgIHRoZSBuZXcgY2FzZSBpcyBhZGRlZC4g
UmVtb3ZhbCBkb2Vzbid0IGNoYW5nZSBvcmRlciBvZiB0aGUgbGlzdC4gQW55IG51bWJlciBvZiBl
eGlzdGluZyBjYXNlcworICAgIC8vICAgY2FuIGJlIHJlbW92ZWQgdmlhIHRoZSBjYW5SZXBsYWNl
KCkgcnVsZS4KKyAgICAvLyAtIENhc2VzIGluIHRoZSBsaXN0IGFsd2F5cyBhcHBlYXIgaW4gYXNj
ZW5kaW5nIG9yZGVyIG9mIHRpbWUgb2YgYWRkaXRpb24uIFRoZXJlZm9yZSwgaWYgeW91CisgICAg
Ly8gICBjYXNjYWRlIHRocm91Z2ggdGhlIGNhc2VzIGluIHJldmVyc2Ugb3JkZXIsIHlvdSB3aWxs
IGdldCB0aGUgbW9zdCByZWNlbnQgY2FzZXMgZmlyc3QuCisgICAgLy8gLSBJZiB0aGlzIG1ldGhv
ZCBmYWlscyAocmV0dXJucyBudWxsLCBkb2Vzbid0IGFkZCB0aGUgY2FzZXMpLCB0aGVuIGJvdGgg
dGhlIHByZXZpb3VzIGNhc2UgbGlzdAorICAgIC8vICAgYW5kIHRoZSBwcmV2aW91cyBzdHViIGFy
ZSBrZXB0IGludGFjdCBhbmQgdGhlIG5ldyBjYXNlcyBhcmUgZGVzdHJveWVkLiBJdCdzIE9LIHRv
IGF0dGVtcHQgdG8KKyAgICAvLyAgIGFkZCBtb3JlIHRoaW5ncyBhZnRlciBmYWlsdXJlLgorICAg
IAorICAgIC8vIEZpcnN0LCB2ZXJpZnkgdGhhdCB3ZSBjYW4gZ2VuZXJhdGUgY29kZSBmb3IgYWxs
IG9mIHRoZSBuZXcgY2FzZXMgd2hpbGUgZWxpbWluYXRpbmcgYW55IG9mIHRoZQorICAgIC8vIG5l
dyBjYXNlcyB0aGF0IHJlcGxhY2UgZWFjaCBvdGhlci4KKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVf
cHRyPEFjY2Vzc0Nhc2U+PiBjYXNlc1RvQWRkOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBvcmlnaW5hbENhc2VzVG9BZGQuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgc3RkOjp1bmlxdWVf
cHRyPEFjY2Vzc0Nhc2U+IG15Q2FzZSA9IHN0ZDo6bW92ZShvcmlnaW5hbENhc2VzVG9BZGRbaV0p
OworCisgICAgICAgIC8vIEFkZCBpdCBvbmx5IGlmIGl0IGlzIG5vdCByZXBsYWNlZCBieSB0aGUg
c3Vic2VxdWVudCBjYXNlcyBpbiB0aGUgbGlzdC4KKyAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNl
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBpICsgMTsgaiA8IG9yaWdpbmFsQ2FzZXNUb0Fk
ZC5zaXplKCk7ICsraikgeworICAgICAgICAgICAgaWYgKG9yaWdpbmFsQ2FzZXNUb0FkZFtqXS0+
Y2FuUmVwbGFjZSgqbXlDYXNlKSkgeworICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IGlmIChmb3VuZCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgaWYg
KG15Q2FzZS0+ZG9lc0NhbGxzKCkgJiYgc3R1YkluZm8ucGF0Y2guc3BpbGxNb2RlID09IE5lZWRU
b1NwaWxsKQorICAgICAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOworCisg
ICAgICAgIGNhc2VzVG9BZGQuYXBwZW5kKHN0ZDo6bW92ZShteUNhc2UpKTsKKyAgICB9CisKKyAg
ICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiY2FzZXNUb0FkZDogIiwgbGlzdER1bXAo
Y2FzZXNUb0FkZCksICJcbiIpOworCisgICAgLy8gSWYgdGhlcmUgYXJlbid0IGFueSBjYXNlcyB0
byBhZGQsIHRoZW4gZmFpbCBvbiB0aGUgZ3JvdW5kcyB0aGF0IHRoZXJlJ3Mgbm8gcG9pbnQgdG8g
Z2VuZXJhdGluZyBhCisgICAgLy8gbmV3IHN0dWIgdGhhdCB3aWxsIGJlIGlkZW50aWNhbCB0byB0
aGUgb2xkIG9uZS4gUmV0dXJuaW5nIG51bGwgc2hvdWxkIHRlbGwgdGhlIGNhbGxlciB0byBqdXN0
CisgICAgLy8ga2VlcCBkb2luZyB3aGF0IHRoZXkgd2VyZSBkb2luZyBiZWZvcmUuCisgICAgaWYg
KGNhc2VzVG9BZGQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyKCk7CisKKyAgICAvLyBOb3cgY29uc3RydWN0IHRoZSBsaXN0IG9mIGNhc2VzIGFzIHRoZXkg
c2hvdWxkIGFwcGVhciBpZiB3ZSBhcmUgc3VjY2Vzc2Z1bC4gVGhpcyBtZWFucyBwdXR0aW5nCisg
ICAgLy8gYWxsIG9mIHRoZSBwcmV2aW91cyBjYXNlcyBpbiB0aGlzIGxpc3QgaW4gb3JkZXIgYnV0
IGV4Y2x1ZGluZyB0aG9zZSB0aGF0IGNhbiBiZSByZXBsYWNlZCwgYW5kCisgICAgLy8gdGhlbiBh
ZGRpbmcgdGhlIG5ldyBjYXNlcy4KKyAgICBMaXN0VHlwZSBuZXdDYXNlczsKKyAgICBmb3IgKGF1
dG8mIG9sZENhc2UgOiBtX2xpc3QpIHsKKyAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAg
ICAgICBmb3IgKGF1dG8mIGNhc2VUb0FkZCA6IGNhc2VzVG9BZGQpIHsKKyAgICAgICAgICAgIGlm
IChjYXNlVG9BZGQtPmNhblJlcGxhY2UoKm9sZENhc2UpKSB7CisgICAgICAgICAgICAgICAgZm91
bmQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGlmICghZm91bmQpCisgICAgICAgICAgICBuZXdDYXNlcy5hcHBlbmQob2xk
Q2FzZS0+Y2xvbmUoKSk7CisgICAgfQorICAgIGZvciAoYXV0byYgY2FzZVRvQWRkIDogY2FzZXNU
b0FkZCkKKyAgICAgICAgbmV3Q2FzZXMuYXBwZW5kKHN0ZDo6bW92ZShjYXNlVG9BZGQpKTsKKwor
ICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJuZXdDYXNlczogIiwgbGlzdER1bXAo
bmV3Q2FzZXMpLCAiXG4iKTsKKworICAgIGlmIChuZXdDYXNlcy5zaXplKCkgPiBPcHRpb25zOjpt
YXhBY2Nlc3NWYXJpYW50TGlzdFNpemUoKSkgeworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAg
ICAgICAgIGRhdGFMb2coIlRvbyBtYW55IGNhc2VzLlxuIik7CisgICAgICAgIHJldHVybiBNYWNy
b0Fzc2VtYmxlckNvZGVQdHIoKTsKKyAgICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIg
cmVzdWx0ID0gcmVnZW5lcmF0ZSh2bSwgY29kZUJsb2NrLCBzdHViSW5mbywgaWRlbnQsIG5ld0Nh
c2VzKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cigpOworCisgICAgbV9saXN0ID0gc3RkOjptb3ZlKG5ld0Nhc2VzKTsKKyAgICByZXR1cm4g
cmVzdWx0OwogfQogCi12b2lkIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmFkZEFjY2Vzcyhjb25z
dCBHZXRCeUlkQWNjZXNzJiBhY2Nlc3MpCitNYWNyb0Fzc2VtYmxlckNvZGVQdHIgUG9seW1vcnBo
aWNBY2Nlc3M6OnJlZ2VuZXJhdGVXaXRoQ2FzZSgKKyAgICBWTSYgdm0sIENvZGVCbG9jayogY29k
ZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIGNvbnN0IElkZW50aWZpZXImIGlk
ZW50LAorICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBuZXdBY2Nlc3MpCiB7Ci0gICAg
QVNTRVJUKCFpc0Z1bGwoKSk7Ci0gICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHJlc2l6aW5nIG9w
dGltaXplcyBmb3Igc3BhY2UsIG5vdCB0aW1lLgotICAgIG1fbGlzdC5yZXNpemVUb0ZpdChtX2xp
c3Quc2l6ZSgpICsgMSk7Ci0gICAgbV9saXN0Lmxhc3QoKSA9IGFjY2VzczsKKyAgICBWZWN0b3I8
c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+PiBuZXdBY2Nlc3NlczsKKyAgICBuZXdBY2Nlc3Nl
cy5hcHBlbmQoc3RkOjptb3ZlKG5ld0FjY2VzcykpOworICAgIHJldHVybiByZWdlbmVyYXRlV2l0
aENhc2VzKHZtLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBpZGVudCwgc3RkOjptb3ZlKG5ld0FjY2Vz
c2VzKSk7CiB9CiAKLWJvb2wgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6aXNGdWxsKCkgY29uc3QK
K2Jvb2wgUG9seW1vcnBoaWNBY2Nlc3M6OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0CiB7Ci0gICAg
QVNTRVJUKHNpemUoKSA8PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpOwotICAgIHJldHVy
biBzaXplKCkgPT0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkgeworICAgICAgICBpZiAoIWF0KGkpLnZpc2l0V2Vh
ayh2bSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVl
OwogfQogCi1ib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmlzQWxtb3N0RnVsbCgpIGNvbnN0
Cit2b2lkIFBvbHltb3JwaGljQWNjZXNzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7
Ci0gICAgQVNTRVJUKHNpemUoKSA8PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpOwotICAg
IHJldHVybiBzaXplKCkgPj0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIC0gMTsKKyAgICBv
dXQucHJpbnQoUmF3UG9pbnRlcih0aGlzKSwgIjpbIik7CisgICAgQ29tbWFQcmludGVyIGNvbW1h
OworICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2xpc3QpCisgICAgICAgIG91dC5wcmludChjb21t
YSwgKmVudHJ5KTsKKyAgICBvdXQucHJpbnQoIl0iKTsKIH0KIAotYm9vbCBQb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0OjpkaWRTZWxmUGF0Y2hpbmcoKSBjb25zdAorTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IFBvbHltb3JwaGljQWNjZXNzOjpyZWdlbmVyYXRlKAorICAgIFZNJiB2bSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgY29uc3QgSWRlbnRpZmllciYg
aWRlbnQsCisgICAgUG9seW1vcnBoaWNBY2Nlc3M6Okxpc3RUeXBlJiBjYXNlcykKIHsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSBzaXplKCk7IGktLTspIHsKLSAgICAgICAgaWYgKGF0KGkpLnR5cGUo
KSA9PSBHZXRCeUlkQWNjZXNzOjpTaW1wbGVJbmxpbmUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiR2VuZXJhdGluZyBjb2RlIGZv
ciBjYXNlczogIiwgbGlzdER1bXAoY2FzZXMpLCAiXG4iKTsKKyAgICAKKyAgICBBY2Nlc3NHZW5l
cmF0aW9uU3RhdGUgc3RhdGU7CisKKyAgICBzdGF0ZS5hY2Nlc3MgPSB0aGlzOworICAgIHN0YXRl
LnN0dWJJbmZvID0gJnN0dWJJbmZvOworICAgIHN0YXRlLmlkZW50ID0gJmlkZW50OworICAgIAor
ICAgIHN0YXRlLmJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmJh
c2VHUFIpOworICAgIHN0YXRlLnZhbHVlUmVncyA9IEpTVmFsdWVSZWdzKAorI2lmIFVTRShKU1ZB
TFVFMzJfNjQpCisgICAgICAgIHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gudmFs
dWVUYWdHUFIpLAorI2VuZGlmCisgICAgICAgIHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8u
cGF0Y2gudmFsdWVHUFIpKTsKKworICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0
b3Ioc3R1YkluZm8ucGF0Y2gudXNlZFJlZ2lzdGVycyk7CisgICAgc3RhdGUuYWxsb2NhdG9yID0g
JmFsbG9jYXRvcjsKKyAgICBhbGxvY2F0b3IubG9jayhzdGF0ZS5iYXNlR1BSKTsKKyAgICBhbGxv
Y2F0b3IubG9jayhzdGF0ZS52YWx1ZVJlZ3MpOworCisgICAgc3RhdGUuc2NyYXRjaEdQUiA9IGFs
bG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAKKyAgICBDQ2FsbEhlbHBlcnMgaml0
KCZ2bSwgY29kZUJsb2NrKTsKKyAgICBzdGF0ZS5qaXQgPSAmaml0OworCisgICAgc3RhdGUubnVt
YmVyT2ZQYWRkaW5nQnl0ZXMgPSBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1
c2hpbmcoaml0KTsKKworICAgIGJvb2wgYWxsR3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2sgPSB0cnVl
OworICAgIGZvciAoYXV0byYgZW50cnkgOiBjYXNlcykKKyAgICAgICAgYWxsR3VhcmRlZEJ5U3Ry
dWN0dXJlQ2hlY2sgJj0gZW50cnktPmd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrKCk7CisKKyAgICBp
ZiAoY2FzZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIFRoaXMgaXMgc3VwZXIgdW5saWtlbHks
IGJ1dCB3ZSBtYWtlIGl0IGxlZ2FsIGFueXdheS4KKyAgICAgICAgc3RhdGUuZmFpbEFuZFJlcGF0
Y2guYXBwZW5kKGppdC5qdW1wKCkpOworICAgIH0gZWxzZSBpZiAoIWFsbEd1YXJkZWRCeVN0cnVj
dHVyZUNoZWNrIHx8IGNhc2VzLnNpemUoKSA9PSAxKSB7CisgICAgICAgIC8vIElmIHRoZXJlIGFy
ZSBhbnkgcHJveGllcyBpbiB0aGUgbGlzdCwgd2UgY2Fubm90IGp1c3QgdXNlIGEgYmluYXJ5IHN3
aXRjaCBvdmVyIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgIC8vIFdlIG5lZWQgdG8gcmVzb3J0IHRv
IGEgY2FzY2FkZS4gQSBjYXNjYWRlIGFsc28gaGFwcGVucyB0byBiZSBvcHRpbWFsIGlmIHdlIG9u
bHkgaGF2ZSBqdXN0CisgICAgICAgIC8vIG9uZSBjYXNlLgorICAgICAgICBDQ2FsbEhlbHBlcnM6
Okp1bXBMaXN0IGZhbGxUaHJvdWdoOworCisgICAgICAgIC8vIENhc2NhZGUgdGhyb3VnaCB0aGUg
bGlzdCwgcHJlZmVycmluZyBuZXdlciBlbnRyaWVzLgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBjYXNlcy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIGZhbGxUaHJvdWdoLmxpbmsoJmpp
dCk7CisgICAgICAgICAgICBjYXNlc1tpXS0+Z2VuZXJhdGVXaXRoR3VhcmQoc3RhdGUsIGZhbGxU
aHJvdWdoKTsKKyAgICAgICAgfQorICAgICAgICBzdGF0ZS5mYWlsQW5kUmVwYXRjaC5hcHBlbmQo
ZmFsbFRocm91Z2gpOworICAgIH0gZWxzZSB7CisgICAgICAgIGppdC5sb2FkMzIoCisgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RhdGUuYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwKKyAgICAgICAgICAgIHN0YXRlLnNjcmF0Y2hHUFIpOworICAgICAgICAK
KyAgICAgICAgVmVjdG9yPGludDY0X3Q+IGNhc2VWYWx1ZXMoY2FzZXMuc2l6ZSgpKTsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNhc2VzLnNpemUoKTsgKytpKQorICAgICAgICAg
ICAgY2FzZVZhbHVlc1tpXSA9IGJpdHdpc2VfY2FzdDxpbnQzMl90PihjYXNlc1tpXS0+c3RydWN0
dXJlKCktPmlkKCkpOworICAgICAgICAKKyAgICAgICAgQmluYXJ5U3dpdGNoIGJpbmFyeVN3aXRj
aChzdGF0ZS5zY3JhdGNoR1BSLCBjYXNlVmFsdWVzLCBCaW5hcnlTd2l0Y2g6OkludDMyKTsKKyAg
ICAgICAgd2hpbGUgKGJpbmFyeVN3aXRjaC5hZHZhbmNlKGppdCkpCisgICAgICAgICAgICBjYXNl
c1tiaW5hcnlTd2l0Y2guY2FzZUluZGV4KCldLT5nZW5lcmF0ZShzdGF0ZSk7CisgICAgICAgIHN0
YXRlLmZhaWxBbmRSZXBhdGNoLmFwcGVuZChiaW5hcnlTd2l0Y2guZmFsbFRocm91Z2goKSk7Cisg
ICAgfQorCisgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5saW5rKCZqaXQpOworCisgICAgLy8gTWFr
ZSBzdXJlIHRoYXQgdGhlIGlubGluZSBjYWNoZSBvcHRpbWl6YXRpb24gY29kZSBrbm93cyB0aGF0
IHdlIGFyZSB0YWtpbmcgc2xvdyBwYXRoIGJlY2F1c2UKKyAgICAvLyBvZiBzb21ldGhpbmcgdGhh
dCBpc24ndCBwYXRjaGFibGUuICJzZWVuIiBiZWluZyBmYWxzZSBtZWFucyB0aGF0IHdlIGJ5cGFz
cyBwYXRjaGluZy4gVGhpcyBpcworICAgIC8vIHByZXR0eSBncm9zcyBidXQgaXQgbWVhbnMgdGhh
dCB3ZSBkb24ndCBuZWVkIHRvIGhhdmUgdHdvIHNsb3cgcGF0aCBlbnRyeXBvaW50cyAtIG9uZSBm
b3IKKyAgICAvLyBwYXRjaGluZyBhbmQgb25lIGZvciBub3JtYWwgc2xvdyBzdHVmZi4KKyAgICBq
aXQuc3RvcmU4KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGZhbHNlKSwgJnN0dWJJbmZvLnNl
ZW4pOworCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBmYWlsdXJlOworICAgIGlmIChhbGxv
Y2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMoKSkgeworICAgICAgICBzdGF0ZS5mYWlsQW5kUmVwYXRj
aC5saW5rKCZqaXQpOworICAgICAgICBzdGF0ZS5yZXN0b3JlU2NyYXRjaCgpOworICAgIH0gZWxz
ZQorICAgICAgICBmYWlsdXJlID0gc3RhdGUuZmFpbEFuZFJlcGF0Y2g7CisgICAgZmFpbHVyZS5h
cHBlbmQoaml0Lmp1bXAoKSk7CisKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIodm0sIGppdCwg
Y29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgIGlmIChsaW5rQnVmZmVyLmRp
ZEZhaWxUb0FsbG9jYXRlKCkpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBk
YXRhTG9nKCJEaWQgZmFpbCB0byBhbGxvY2F0ZS5cbiIpOworICAgICAgICByZXR1cm4gTWFjcm9B
c3NlbWJsZXJDb2RlUHRyKCk7CiAgICAgfQotICAgIHJldHVybiBmYWxzZTsKKworICAgIENvZGVM
b2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCA9CisgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSk7Cisg
ICAgICAgIAorICAgIGxpbmtCdWZmZXIubGluayhzdGF0ZS5zdWNjZXNzLCBzdWNjZXNzTGFiZWwp
OworCisgICAgbGlua0J1ZmZlci5saW5rKAorICAgICAgICBmYWlsdXJlLAorICAgICAgICBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0
YUNhbGxUb1Nsb3dDYXNlKSk7CisgICAgCisgICAgZm9yIChhdXRvIGNhbGxiYWNrIDogc3RhdGUu
Y2FsbGJhY2tzKQorICAgICAgICBjYWxsYmFjayhsaW5rQnVmZmVyKTsKKyAgICAKKyAgICBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgY29kZSA9IEZJTkFMSVpFX0NPREVfRk9SKAorICAgICAgICBjb2Rl
QmxvY2ssIGxpbmtCdWZmZXIsCisgICAgICAgICgiJXMiLCB0b0NTdHJpbmcoIkFjY2VzcyBzdHVi
IGZvciAiLCAqY29kZUJsb2NrLCAiICIsIHN0dWJJbmZvLmNvZGVPcmlnaW4sICIgd2l0aCByZXR1
cm4gcG9pbnQgIiwgc3VjY2Vzc0xhYmVsLCAiOiAiLCBsaXN0RHVtcChjYXNlcykpLmRhdGEoKSkp
OworCisgICAgYm9vbCBkb2VzQ2FsbHMgPSBmYWxzZTsKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDog
Y2FzZXMpCisgICAgICAgIGRvZXNDYWxscyB8PSBlbnRyeS0+ZG9lc0NhbGxzKCk7CisgICAgCisg
ICAgbV9zdHViUm91dGluZSA9IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKGNvZGUsIHZtLCBjb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpLCBkb2VzQ2FsbHMpOworICAgIG1fd2F0Y2hwb2ludHMgPSBz
dGQ6Om1vdmUoc3RhdGUud2F0Y2hwb2ludHMpOworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBk
YXRhTG9nKCJSZXR1cm5pbmc6ICIsIGNvZGUuY29kZSgpLCAiXG4iKTsKKyAgICByZXR1cm4gY29k
ZS5jb2RlKCk7CiB9CiAKLWJvb2wgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6dmlzaXRXZWFrKFZN
JiB2bSkgY29uc3QKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordXNp
bmcgbmFtZXNwYWNlIEpTQzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQs
IEFjY2Vzc0Nhc2U6OkFjY2Vzc1R5cGUgdHlwZSkKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBz
aXplKCk7IGktLTspIHsKLSAgICAgICAgaWYgKCFhdChpKS52aXNpdFdlYWsodm0pKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgQWNjZXNz
Q2FzZTo6TG9hZDoKKyAgICAgICAgb3V0LnByaW50KCJMb2FkIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEFjY2Vzc0Nhc2U6OlRyYW5zaXRpb246CisgICAgICAgIG91dC5wcmludCgiVHJh
bnNpdGlvbiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpSZXBsYWNl
OgorICAgICAgICBvdXQucHJpbnQoIlJlcGxhY2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgQWNjZXNzQ2FzZTo6TWlzczoKKyAgICAgICAgb3V0LnByaW50KCJNaXNzIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkdldHRlcjoKKyAgICAgICAgb3V0LnByaW50
KCJHZXR0ZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6U2V0dGVy
OgorICAgICAgICBvdXQucHJpbnQoIlNldHRlciIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBBY2Nlc3NDYXNlOjpDdXN0b21HZXR0ZXI6CisgICAgICAgIG91dC5wcmludCgiQ3VzdG9tR2V0
dGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkN1c3RvbVNldHRl
cjoKKyAgICAgICAgb3V0LnByaW50KCJDdXN0b21TZXR0ZXIiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5IaXQ6CisgICAgICAgIG91dC5wcmludCgiSW5IaXQiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5NaXNzOgorICAgICAgICBv
dXQucHJpbnQoIkluTWlzcyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNl
OjpBcnJheUxlbmd0aDoKKyAgICAgICAgb3V0LnByaW50KCJBcnJheUxlbmd0aCIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpTdHJpbmdMZW5ndGg6CisgICAgICAgIG91
dC5wcmludCgiU3RyaW5nTGVuZ3RoIik7CisgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgcmV0
dXJuIHRydWU7CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi19IC8v
IG5hbWVzcGFjZSBKU0MKK30gLy8gbmFtZXNwYWNlIFdURgogCiAjZW5kaWYgLy8gRU5BQkxFKEpJ
VCkKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNj
ZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHlt
b3JwaGljQWNjZXNzLmgJKHJldmlzaW9uIDE4OTMyNCkJKGZyb20gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuaDoxODkzMjQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBvbHltb3JwaGljR2V0QnlJZExpc3RfaAorI2RlZmlu
ZSBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0X2gKKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRl
ICJDb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKyNpbmNsdWRlICJP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgorI2luY2x1ZGUgIk9wY29kZS5oIgorI2luY2x1
ZGUgIlN0cnVjdHVyZS5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIENvZGVCbG9jazsKK3N0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbzsKKworY2xh
c3MgR2V0QnlJZEFjY2VzcyB7CitwdWJsaWM6CisgICAgZW51bSBBY2Nlc3NUeXBlIHsKKyAgICAg
ICAgSW52YWxpZCwKKyAgICAgICAgU2ltcGxlSW5saW5lLCAvLyBUaGlzIGlzIHRoZSBwYXRjaGVk
IGlubGluZSBhY2Nlc3MuCisgICAgICAgIFNpbXBsZVN0dWIsIC8vIFRoaXMgaXMgYSBzdHViLgor
ICAgICAgICBXYXRjaGVkU3R1YiwKKyAgICAgICAgR2V0dGVyLAorICAgICAgICBDdXN0b21HZXR0
ZXIsCisgICAgICAgIFNpbXBsZU1pc3MsCisgICAgfTsKKyAgICAKKyAgICBHZXRCeUlkQWNjZXNz
KCkKKyAgICAgICAgOiBtX3R5cGUoSW52YWxpZCkKKyAgICB7CisgICAgfQorICAgIAorICAgIEdl
dEJ5SWRBY2Nlc3MoCisgICAgICAgIFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgUGFz
c1JlZlB0cjxKSVRTdHViUm91dGluZT4sIFN0cnVjdHVyZSosCisgICAgICAgIGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCkpOwor
ICAgIAorICAgIH5HZXRCeUlkQWNjZXNzKCk7CisgICAgCisgICAgc3RhdGljIEdldEJ5SWRBY2Nl
c3MgZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAgCisgICAg
Ym9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSAhPSBJbnZhbGlkOyB9CisgICAgYm9v
bCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQorICAgIAorICAgIEFjY2Vz
c1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIAorICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7IH0KKyAgICAK
KyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29u
c3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0KKyAgICAKKyAgICBKSVRTdHViUm91dGluZSog
c3R1YlJvdXRpbmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzU2V0KCkpOworICAg
ICAgICByZXR1cm4gbV9zdHViUm91dGluZS5nZXQoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBk
b2VzQ2FsbHMoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gR2V0dGVyIHx8IHR5cGUoKSA9PSBD
dXN0b21HZXR0ZXI7IH0KKyAgICAKKyAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OworCitw
cml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7CisgICAgCisgICAgQWNjZXNzVHlw
ZSBtX3R5cGU7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7CisgICAg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7CisgICAgUmVmUHRyPEpJ
VFN0dWJSb3V0aW5lPiBtX3N0dWJSb3V0aW5lOworfTsKKworY2xhc3MgUG9seW1vcnBoaWNHZXRC
eUlkTGlzdCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgLy8g
RWl0aGVyIGNyZWF0ZXMgYSBuZXcgcG9seW1vcnBoaWMgZ2V0IGxpc3QsIG9yIHJldHVybnMgdGhl
IG9uZSB0aGF0IGlzIGFscmVhZHkgaW4KKyAgICAvLyBwbGFjZS4KKyAgICBzdGF0aWMgUG9seW1v
cnBoaWNHZXRCeUlkTGlzdCogZnJvbShTdHJ1Y3R1cmVTdHViSW5mbyYpOworICAgIAorICAgIH5Q
b2x5bW9ycGhpY0dldEJ5SWRMaXN0KCk7CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IGN1cnJlbnRTbG93UGF0aFRhcmdldChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pIGNvbnN0
OworICAgIAorICAgIHZvaWQgYWRkQWNjZXNzKGNvbnN0IEdldEJ5SWRBY2Nlc3MmKTsKKyAgICAK
KyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2xpc3QuaXNFbXB0eSgpOyB9Cisg
ICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5zaXplKCk7IH0KKyAgICBi
b29sIGlzRnVsbCgpIGNvbnN0OworICAgIGJvb2wgaXNBbG1vc3RGdWxsKCkgY29uc3Q7IC8vIFRy
dWUgaWYgYWRkaW5nIGFuIGVsZW1lbnQgd291bGQgbWFrZSBpc0Z1bGwoKSB0cnVlLgorICAgIGNv
bnN0IEdldEJ5SWRBY2Nlc3MmIGF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdFtp
XTsgfQorICAgIGNvbnN0IEdldEJ5SWRBY2Nlc3MmIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29u
c3QgeyByZXR1cm4gbV9saXN0W2ldOyB9CisgICAgCisgICAgYm9vbCBkaWRTZWxmUGF0Y2hpbmco
KSBjb25zdDsgLy8gQXJlIGFueSBvZiB0aGUgYWNjZXNzZXMgU2ltcGxlSW5saW5lPworICAgIAor
ICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNs
YXNzIENvZGVCbG9jazsKKyAgICAKKyAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KFN0cnVjdHVy
ZVN0dWJJbmZvJik7CisgICAgCisgICAgVmVjdG9yPEdldEJ5SWRBY2Nlc3MsIDI+IG1fbGlzdDsK
K307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKworI2Vu
ZGlmIC8vIFBvbHltb3JwaGljR2V0QnlJZExpc3RfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAkod29ya2luZyBjb3B5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAK
LSNpZm5kZWYgUG9seW1vcnBoaWNHZXRCeUlkTGlzdF9oCi0jZGVmaW5lIFBvbHltb3JwaGljR2V0
QnlJZExpc3RfaAorI2lmbmRlZiBQb2x5bW9ycGhpY0FjY2Vzc19oCisjZGVmaW5lIFBvbHltb3Jw
aGljQWNjZXNzX2gKIAogI2lmIEVOQUJMRShKSVQpCiAKQEAgLTM4LDk2ICszOCwyNjggQEAKIG5h
bWVzcGFjZSBKU0MgewogCiBjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBQb2x5bW9ycGhpY0FjY2Vz
czsKK2NsYXNzIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzsKIHN0cnVjdCBTdHJ1Y3R1
cmVTdHViSW5mbzsKIAotY2xhc3MgR2V0QnlJZEFjY2VzcyB7CitzdHJ1Y3QgQWNjZXNzR2VuZXJh
dGlvblN0YXRlOworCitjbGFzcyBBY2Nlc3NDYXNlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShBY2Nlc3NDYXNlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAg
ICBlbnVtIEFjY2Vzc1R5cGUgewotICAgICAgICBJbnZhbGlkLAotICAgICAgICBTaW1wbGVJbmxp
bmUsIC8vIFRoaXMgaXMgdGhlIHBhdGNoZWQgaW5saW5lIGFjY2Vzcy4KLSAgICAgICAgU2ltcGxl
U3R1YiwgLy8gVGhpcyBpcyBhIHN0dWIuCi0gICAgICAgIFdhdGNoZWRTdHViLAorICAgICAgICBM
b2FkLAorICAgICAgICBUcmFuc2l0aW9uLAorICAgICAgICBSZXBsYWNlLAorICAgICAgICBNaXNz
LAogICAgICAgICBHZXR0ZXIsCisgICAgICAgIFNldHRlciwKICAgICAgICAgQ3VzdG9tR2V0dGVy
LAotICAgICAgICBTaW1wbGVNaXNzLAorICAgICAgICBDdXN0b21TZXR0ZXIsCisgICAgICAgIElu
SGl0LAorICAgICAgICBJbk1pc3MsCisgICAgICAgIEFycmF5TGVuZ3RoLAorICAgICAgICBTdHJp
bmdMZW5ndGgKICAgICB9OwotICAgIAotICAgIEdldEJ5SWRBY2Nlc3MoKQotICAgICAgICA6IG1f
dHlwZShJbnZhbGlkKQorCisgICAgc3RhdGljIGJvb2wgaXNHZXQoQWNjZXNzVHlwZSB0eXBlKQog
ICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgVHJhbnNpdGlvbjoK
KyAgICAgICAgY2FzZSBSZXBsYWNlOgorICAgICAgICBjYXNlIFNldHRlcjoKKyAgICAgICAgY2Fz
ZSBDdXN0b21TZXR0ZXI6CisgICAgICAgIGNhc2UgSW5IaXQ6CisgICAgICAgIGNhc2UgSW5NaXNz
OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIExvYWQ6CisgICAgICAg
IGNhc2UgTWlzczoKKyAgICAgICAgY2FzZSBHZXR0ZXI6CisgICAgICAgIGNhc2UgQ3VzdG9tR2V0
dGVyOgorICAgICAgICBjYXNlIEFycmF5TGVuZ3RoOgorICAgICAgICBjYXNlIFN0cmluZ0xlbmd0
aDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CiAgICAgfQotICAgIAotICAg
IEdldEJ5SWRBY2Nlc3MoCi0gICAgICAgIFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwg
UGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4sIFN0cnVjdHVyZSosCisKKyAgICBzdGF0aWMgYm9v
bCBpc1B1dChBY2Nlc3NUeXBlIHR5cGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsK
KyAgICAgICAgY2FzZSBMb2FkOgorICAgICAgICBjYXNlIE1pc3M6CisgICAgICAgIGNhc2UgR2V0
dGVyOgorICAgICAgICBjYXNlIEN1c3RvbUdldHRlcjoKKyAgICAgICAgY2FzZSBJbkhpdDoKKyAg
ICAgICAgY2FzZSBJbk1pc3M6CisgICAgICAgIGNhc2UgQXJyYXlMZW5ndGg6CisgICAgICAgIGNh
c2UgU3RyaW5nTGVuZ3RoOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNl
IFRyYW5zaXRpb246CisgICAgICAgIGNhc2UgUmVwbGFjZToKKyAgICAgICAgY2FzZSBTZXR0ZXI6
CisgICAgICAgIGNhc2UgQ3VzdG9tU2V0dGVyOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0luKEFjY2Vzc1R5cGUgdHlwZSkK
KyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIExvYWQ6CisgICAg
ICAgIGNhc2UgTWlzczoKKyAgICAgICAgY2FzZSBHZXR0ZXI6CisgICAgICAgIGNhc2UgQ3VzdG9t
R2V0dGVyOgorICAgICAgICBjYXNlIFRyYW5zaXRpb246CisgICAgICAgIGNhc2UgUmVwbGFjZToK
KyAgICAgICAgY2FzZSBTZXR0ZXI6CisgICAgICAgIGNhc2UgQ3VzdG9tU2V0dGVyOgorICAgICAg
ICBjYXNlIEFycmF5TGVuZ3RoOgorICAgICAgICBjYXNlIFN0cmluZ0xlbmd0aDoKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBJbkhpdDoKKyAgICAgICAgY2FzZSBJbk1p
c3M6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0
YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gZ2V0KAorICAgICAgICBWTSYsIEpTQ2Vs
bCogb3duZXIsIEFjY2Vzc1R5cGUsIFByb3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmUqLAorICAgICAg
ICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCgpLAorICAgICAgICBib29sIHZpYVByb3h5ID0gZmFsc2UsCisgICAgICAgIFdhdGNo
cG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQgPSBudWxscHRyLAorICAgICAgICBQcm9wZXJ0eVNsb3Q6
OkdldFZhbHVlRnVuYyA9IG51bGxwdHIpOworCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxB
Y2Nlc3NDYXNlPiByZXBsYWNlKAorICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpOworCisgICAgc3RhdGljIHN0ZDo6
dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiB0cmFuc2l0aW9uKAorICAgICAgICBWTSYsIEpTQ2VsbCog
b3duZXIsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0LAogICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpKTsKKworICAgIHN0YXRpYyBz
dGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gc2V0dGVyKAorICAgICAgICBWTSYsIEpTQ2VsbCog
b3duZXIsIEFjY2Vzc1R5cGUsIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0LAorICAgICAgICBj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIFB1dFByb3BlcnR5U2xvdDo6UHV0VmFs
dWVGdW5jKTsKKworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gaW4oCisg
ICAgICAgIFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiA9IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0KCkpOworCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nl
c3NDYXNlPiBnZXRMZW5ndGgoVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlKTsKICAgICAK
LSAgICB+R2V0QnlJZEFjY2VzcygpOwotICAgIAotICAgIHN0YXRpYyBHZXRCeUlkQWNjZXNzIGZy
b21TdHJ1Y3R1cmVTdHViSW5mbyhTdHJ1Y3R1cmVTdHViSW5mbyYpOworICAgIHN0YXRpYyBzdGQ6
OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFZNJiwgSlNDZWxs
KiBvd25lciwgU3RydWN0dXJlU3R1YkluZm8mKTsKKworICAgIH5BY2Nlc3NDYXNlKCk7CiAgICAg
Ci0gICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSAhPSBJbnZhbGlkOyB9Ci0g
ICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQorICAgIHN0ZDo6
dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBjbG9uZSgpIGNvbnN0OwogICAgIAogICAgIEFjY2Vzc1R5
cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisgICAgYm9vbCB2aWFQcm94eSgpIGNv
bnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT52aWFQcm94eSA6IGZhbHNlOyB9
CiAgICAgCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVj
dHVyZS5nZXQoKTsgfQotICAgIAotICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
JiBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQotICAgIAot
ICAgIEpJVFN0dWJSb3V0aW5lKiBzdHViUm91dGluZSgpIGNvbnN0CisgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fdHlwZSA9PSBUcmFuc2l0aW9u
KQorICAgICAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlLT5wcmV2aW91c0lEKCk7CisgICAgICAg
IHJldHVybiBtX3N0cnVjdHVyZS5nZXQoKTsKKyAgICB9CisgICAgYm9vbCBndWFyZGVkQnlTdHJ1
Y3R1cmVDaGVjaygpIGNvbnN0OworCisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUoKSBjb25z
dAogICAgIHsKLSAgICAgICAgQVNTRVJUKGlzU2V0KCkpOwotICAgICAgICByZXR1cm4gbV9zdHVi
Um91dGluZS5nZXQoKTsKKyAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBUcmFuc2l0aW9uKTsKKyAg
ICAgICAgcmV0dXJuIG1fc3RydWN0dXJlLmdldCgpOwogICAgIH0KICAgICAKLSAgICBib29sIGRv
ZXNDYWxscygpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBHZXR0ZXIgfHwgdHlwZSgpID09IEN1
c3RvbUdldHRlcjsgfQorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9CisKKyAgICBXYXRjaHBvaW50U2V0
KiBhZGRpdGlvbmFsU2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3JhcmVEYXRh
ID8gbV9yYXJlRGF0YS0+YWRkaXRpb25hbFNldC5nZXQoKSA6IG51bGxwdHI7CisgICAgfQogICAg
IAotICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgY29uc3Q7CisgICAgYm9vbCBkb2VzQ2FsbHMoKSBj
b25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKCkpIHsKKyAgICAgICAgY2FzZSBHZXR0
ZXI6CisgICAgICAgIGNhc2UgU2V0dGVyOgorICAgICAgICBjYXNlIEN1c3RvbUdldHRlcjoKKyAg
ICAgICAgY2FzZSBDdXN0b21TZXR0ZXI6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
IAorICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKCkgY29uc3QKKyAgICB7CisgICAgICAg
IGlmICghbV9yYXJlRGF0YSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBy
ZXR1cm4gbV9yYXJlRGF0YS0+Y2FsbExpbmtJbmZvLmdldCgpOworICAgIH0KKworICAgIC8vIElm
IHRoaXMgbWV0aG9kIHJldHVybnMgdHJ1ZSwgdGhlbiBpdCdzIGEgZ29vZCBpZGVhIHRvIHJlbW92
ZSAnb3RoZXInIGZyb20gdGhlIGFjY2VzcyBvbmNlICd0aGlzJworICAgIC8vIGlzIGFkZGVkLiBU
aGlzIG1ldGhvZCBhc3N1bWVzIHRoYXQgaW4gY2FzZSBvZiBjb250cmFkaWN0aW9ucywgJ3RoaXMn
IHJlcHJlc2VudHMgYSBuZXdlciwgYW5kIHNvCisgICAgLy8gbW9yZSB1c2VmdWwsIHRydXRoLiBU
aGlzIG1ldGhvZCBjYW4gYmUgY29uc2VydmF0aXZlOyBpdCB3aWxsIHJldHVybiBmYWxzZSB3aGVu
IGl0IGRvdWJ0LgorICAgIGJvb2wgY2FuUmVwbGFjZShjb25zdCBBY2Nlc3NDYXNlJiBvdGhlcik7
CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAgCiBwcml2YXRl
OgogICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7CisgICAgZnJpZW5kIGNsYXNzIFBvbHltb3Jw
aGljQWNjZXNzOworCisgICAgQWNjZXNzQ2FzZSgpOworCisgICAgYm9vbCB2aXNpdFdlYWsoVk0m
KSBjb25zdDsKKworICAgIC8vIEZhbGwgdGhyb3VnaCBvbiBzdWNjZXNzLiBUd28ga2luZHMgb2Yg
ZmFpbHVyZXMgYXJlIHN1cHBvcnRlZDogZmFsbC10aHJvdWdoLCB3aGljaCBtZWFucyB0aGF0IHdl
CisgICAgLy8gc2hvdWxkIHRyeSBhIGRpZmZlcmVudCBjYXNlOyBhbmQgZmFpbHVyZSwgd2hpY2gg
bWVhbnMgdGhhdCB0aGlzIHdhcyB0aGUgcmlnaHQgY2FzZSBidXQgaXQgbmVlZHMKKyAgICAvLyBo
ZWxwIGZyb20gdGhlIHNsb3cgcGF0aC4KKyAgICB2b2lkIGdlbmVyYXRlV2l0aEd1YXJkKEFjY2Vz
c0dlbmVyYXRpb25TdGF0ZSYsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFsbFRocm91Z2gp
OworCisgICAgLy8gRmFsbCB0aHJvdWdoIG9uIHN1Y2Nlc3MsIGFkZCBhIGp1bXAgdG8gdGhlIGZh
aWx1cmUgbGlzdCBvbiBmYWlsdXJlLgorICAgIHZvaWQgZ2VuZXJhdGUoQWNjZXNzR2VuZXJhdGlv
blN0YXRlJik7CiAgICAgCiAgICAgQWNjZXNzVHlwZSBtX3R5cGU7CisgICAgUHJvcGVydHlPZmZz
ZXQgbV9vZmZzZXQ7CisKKyAgICAvLyBVc3VhbGx5IHRoaXMgaXMgdGhlIHN0cnVjdHVyZSB0aGF0
IHdlIGV4cGVjdCB0aGUgYmFzZSBvYmplY3QgdG8gaGF2ZS4gQnV0LCB0aGlzIGlzIHRoZSAqbmV3
KgorICAgIC8vIHN0cnVjdHVyZSBmb3IgYSB0cmFuc2l0aW9uIGFuZCB3ZSByZWx5IG9uIHRoZSBm
YWN0IHRoYXQgaXQgaGFzIGEgc3Ryb25nIHJlZmVyZW5jZSB0byB0aGUgb2xkCisgICAgLy8gc3Ry
dWN0dXJlLiBGb3IgcHJveGllcywgdGhpcyBpcyB0aGUgc3RydWN0dXJlIG9mIHRoZSBvYmplY3Qg
YmVoaW5kIHRoZSBwcm94eS4KICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cnVjdHVy
ZTsKKwogICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OwotICAg
IFJlZlB0cjxKSVRTdHViUm91dGluZT4gbV9zdHViUm91dGluZTsKKworICAgIGNsYXNzIFJhcmVE
YXRhIHsKKyAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgcHVibGljOgorICAg
ICAgICBib29sIHZpYVByb3h5OworICAgICAgICBSZWZQdHI8V2F0Y2hwb2ludFNldD4gYWRkaXRp
b25hbFNldDsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rSW5mbz4gY2FsbExpbmtJ
bmZvOworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVl
RnVuYyBnZXR0ZXI7CisgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyBz
ZXR0ZXI7CisgICAgICAgICAgICB2b2lkKiBvcGFxdWU7CisgICAgICAgIH0gY3VzdG9tQWNjZXNz
b3I7CisgICAgfTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxSYXJlRGF0YT4gbV9yYXJlRGF0YTsK
IH07CiAKLWNsYXNzIFBvbHltb3JwaGljR2V0QnlJZExpc3QgeworY2xhc3MgUG9seW1vcnBoaWNB
Y2Nlc3MgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBvbHltb3JwaGljQWNjZXNzKTsKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICAvLyBFaXRoZXIgY3JlYXRl
cyBhIG5ldyBwb2x5bW9ycGhpYyBnZXQgbGlzdCwgb3IgcmV0dXJucyB0aGUgb25lIHRoYXQgaXMg
YWxyZWFkeSBpbgotICAgIC8vIHBsYWNlLgotICAgIHN0YXRpYyBQb2x5bW9ycGhpY0dldEJ5SWRM
aXN0KiBmcm9tKFN0cnVjdHVyZVN0dWJJbmZvJik7Ci0gICAgCi0gICAgflBvbHltb3JwaGljR2V0
QnlJZExpc3QoKTsKLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY3VycmVudFNsb3dQ
YXRoVGFyZ2V0KFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykgY29uc3Q7Ci0gICAgCi0gICAg
dm9pZCBhZGRBY2Nlc3MoY29uc3QgR2V0QnlJZEFjY2VzcyYpOworICAgIFBvbHltb3JwaGljQWNj
ZXNzKCk7CisgICAgflBvbHltb3JwaGljQWNjZXNzKCk7CisKKyAgICAvLyBUaGlzIG1heSByZXR1
cm4gbnVsbCwgaW4gd2hpY2ggY2FzZSB0aGUgb2xkIHN0dWIgcm91dGluZSBpcyBsZWZ0IGludGFj
dC4gVGhpcyBtZXRob2Qgd2lsbCBkbyB5b3UKKyAgICAvLyBhIHNvbGlkIGFuZCBudWxsLWNoZWNr
IHRoZSBBY2Nlc3NDYXNlLCBzbyB0aGF0IHlvdSBjYW4gZG8gdGhpbmdzIGxpa2U6CisgICAgLy8K
KyAgICAvLyBjb2RlUHRyID0gYWNjZXNzLT5yZWdlbmVyYXRlV2l0aENhc2UoLi4uLCBBY2Nlc3ND
YXNlOjpnZXQoLi4uKSkKKyAgICAvLworICAgIC8vIElmIEFjY2Vzc0Nhc2U6OmdldCgpIHJldHVy
bnMgbnVsbHB0ciwgdGhlIGFib3ZlIGNhbGwgd2lsbCBzaW1wbHkgcmV0dXJuIG51bGwuCisgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJlZ2VuZXJhdGVXaXRoQ2FzZXMoCisgICAgICAgIFZNJiwg
Q29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBjb25zdCBJZGVudGlmaWVyJiwgVmVjdG9y
PHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPj4pOworCisgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIHJlZ2VuZXJhdGVXaXRoQ2FzZSgKKyAgICAgICAgVk0mLCBDb2RlQmxvY2sqLCBTdHJ1Y3R1
cmVTdHViSW5mbyYsIGNvbnN0IElkZW50aWZpZXImLCBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2Fz
ZT4pOwogICAgIAogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5pc0Vt
cHR5KCk7IH0KICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9saXN0LnNpemUo
KTsgfQotICAgIGJvb2wgaXNGdWxsKCkgY29uc3Q7Ci0gICAgYm9vbCBpc0FsbW9zdEZ1bGwoKSBj
b25zdDsgLy8gVHJ1ZSBpZiBhZGRpbmcgYW4gZWxlbWVudCB3b3VsZCBtYWtlIGlzRnVsbCgpIHRy
dWUuCi0gICAgY29uc3QgR2V0QnlJZEFjY2VzcyYgYXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1
cm4gbV9saXN0W2ldOyB9Ci0gICAgY29uc3QgR2V0QnlJZEFjY2VzcyYgb3BlcmF0b3JbXSh1bnNp
Z25lZCBpKSBjb25zdCB7IHJldHVybiBtX2xpc3RbaV07IH0KLSAgICAKLSAgICBib29sIGRpZFNl
bGZQYXRjaGluZygpIGNvbnN0OyAvLyBBcmUgYW55IG9mIHRoZSBhY2Nlc3NlcyBTaW1wbGVJbmxp
bmU/Ci0gICAgCisgICAgY29uc3QgQWNjZXNzQ2FzZSYgYXQodW5zaWduZWQgaSkgY29uc3QgeyBy
ZXR1cm4gKm1fbGlzdFtpXTsgfQorICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIG9wZXJhdG9yW10odW5z
aWduZWQgaSkgY29uc3QgeyByZXR1cm4gKm1fbGlzdFtpXTsgfQorCisgICAgLy8gSWYgdGhpcyBy
ZXR1cm5zIGZhbHNlIHRoZW4gd2UgYXJlIHJlcXVlc3RpbmcgYSByZXNldCBvZiB0aGUgb3duaW5n
IFN0cnVjdHVyZVN0dWJJbmZvLgogICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgY29uc3Q7CiAKKyAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisKIHByaXZhdGU6CisgICAgZnJp
ZW5kIGNsYXNzIEFjY2Vzc0Nhc2U7CiAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKKyAgICBm
cmllbmQgc3RydWN0IEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTsKICAgICAKLSAgICBQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0KFN0cnVjdHVyZVN0dWJJbmZvJik7Ci0gICAgCi0gICAgVmVjdG9yPEdldEJ5
SWRBY2Nlc3MsIDI+IG1fbGlzdDsKKyAgICB0eXBlZGVmIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8
QWNjZXNzQ2FzZT4sIDI+IExpc3RUeXBlOworCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJl
Z2VuZXJhdGUoCisgICAgICAgIFZNJiwgQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBj
b25zdCBJZGVudGlmaWVyJiwgTGlzdFR5cGUmIGNhc2VzKTsKKworICAgIExpc3RUeXBlIG1fbGlz
dDsKKyAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IG1fc3R1YlJvdXRpbmU7CisgICAgc3RkOjp1
bmlxdWVfcHRyPFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbz4gbV93YXRjaHBvaW50czsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBlKTsKKwor
fSAvLyBuYW1lc3BhY2UgV1RGCisKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCi0jZW5kaWYgLy8g
UG9seW1vcnBoaWNHZXRCeUlkTGlzdF9oCisjZW5kaWYgLy8gUG9seW1vcnBoaWNBY2Nlc3NfaAog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3NT
dHJ1Y3R1cmVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdC5oCShyZXZpc2lvbiAxODk1MTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1
cmVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTEyICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBQb2x5bW9ycGhpY0FjY2Vz
c1N0cnVjdHVyZUxpc3RfaAotI2RlZmluZSBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3Rf
aAotCi0jaW5jbHVkZSAiSklUU3R1YlJvdXRpbmUuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIK
LSNpbmNsdWRlICJTdHJ1Y3R1cmVDaGFpbi5oIgotCi0jZGVmaW5lIFBPTFlNT1JQSElDX0xJU1Rf
Q0FDSEVfU0laRSA4Ci0KLW5hbWVzcGFjZSBKU0MgewotCi0vLyAqU2lnaCosIElmIHRoZSBKSVQg
aXMgZW5hYmxlZCB3ZSBuZWVkIHRvIHRyYWNrIHRoZSBzdHViUm91bnRpbmUgKG9mIHR5cGUgQ29k
ZUxvY2F0aW9uTGFiZWwpLAotLy8gSWYgdGhlIEpJVCBpcyBub3QgaW4gdXNlIHdlIGRvbid0IGFj
dHVhbGx5IG5lZWQgdGhlIHZhcmlhYmxlICh0aGF0IHNhaWQsIGlmIHRoZSBKSVQgaXMgbm90IGlu
IHVzZSB3ZSBkb24ndAotLy8gY3VyZW50bHkgYWN0dWFsbHkgdXNlIFBvbHltb3JwaGljQWNjZXNz
U3RydWN0dXJlTGlzdHMsIHdoaWNoIHdlIHNob3VsZCkuICBBbnl3YXksIHRoaXMgc2VlbXMgbGlr
ZSB0aGUgYmVzdAotLy8gc29sdXRpb24gZm9yIG5vdyAtIHdpbGwgbmVlZCB0byBzb21ldGhpbmcg
c21hcnRlciBpZi93aGVuIHdlIGFjdHVhbGx5IHdhbnQgbWl4ZWQtbW9kZSBvcGVyYXRpb24uCi0K
LSNpZiBFTkFCTEUoSklUKQotLy8gU3RydWN0dXJlIHVzZWQgYnkgb3BfZ2V0X2J5X2lkX3NlbGZf
bGlzdCBhbmQgb3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3QgaW5zdHJ1Y3Rpb24gdG8gaG9sZCBkYXRh
IG9mZiB0aGUgbWFpbiBvcGNvZGUgc3RyZWFtLgotc3RydWN0IFBvbHltb3JwaGljQWNjZXNzU3Ry
dWN0dXJlTGlzdCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAg
c3RydWN0IFBvbHltb3JwaGljU3R1YkluZm8gewotICAgICAgICBib29sIGlzRGlyZWN0IDogMTsK
LSAgICAgICAgdW5zaWduZWQgY291bnQgOiAzMTsKLSAgICAgICAgUmVmUHRyPEpJVFN0dWJSb3V0
aW5lPiBzdHViUm91dGluZTsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gYmFzZTsK
LSAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZUNoYWluPiBjaGFpbjsKLQotICAgICAgICBQ
b2x5bW9ycGhpY1N0dWJJbmZvKCkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgdm9p
ZCBzZXQoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBf
c3R1YlJvdXRpbmUsIFN0cnVjdHVyZSogX2Jhc2UsIGJvb2wgX2lzRGlyZWN0KQotICAgICAgICB7
Ci0gICAgICAgICAgICBzdHViUm91dGluZSA9IF9zdHViUm91dGluZTsKLSAgICAgICAgICAgIGJh
c2Uuc2V0KHZtLCBvd25lciwgX2Jhc2UpOwotICAgICAgICAgICAgaXNEaXJlY3QgPSBfaXNEaXJl
Y3Q7Ci0gICAgICAgICAgICBjb3VudCA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IHZvaWQgc2V0KFZNJiB2bSwgSlNDZWxsKiBvd25lciwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGlu
ZT4gX3N0dWJSb3V0aW5lLCBTdHJ1Y3R1cmUqIF9iYXNlLCBTdHJ1Y3R1cmVDaGFpbiogX2NoYWlu
LCBib29sIF9pc0RpcmVjdCwgdW5zaWduZWQgX2NvdW50KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBzdHViUm91dGluZSA9IF9zdHViUm91dGluZTsKLSAgICAgICAgICAgIGJhc2Uuc2V0KHZtLCBv
d25lciwgX2Jhc2UpOwotICAgICAgICAgICAgY2hhaW4uc2V0KHZtLCBvd25lciwgX2NoYWluKTsK
LSAgICAgICAgICAgIGlzRGlyZWN0ID0gX2lzRGlyZWN0OwotICAgICAgICAgICAgY291bnQgPSBf
Y291bnQ7Ci0gICAgICAgIH0KLSAgICB9IGxpc3RbUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpF
XTsKLSAgICAKLSAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoKQotICAgIHsKLSAg
ICB9Ci0gICAgCi0gICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KFZNJiB2bSwgSlND
ZWxsKiBvd25lciwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUsIFN0cnVj
dHVyZSogZmlyc3RCYXNlLCBib29sIGlzRGlyZWN0KQotICAgIHsKLSAgICAgICAgbGlzdFswXS5z
ZXQodm0sIG93bmVyLCBzdHViUm91dGluZSwgZmlyc3RCYXNlLCBpc0RpcmVjdCk7Ci0gICAgfQot
Ci0gICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KFZNJiB2bSwgSlNDZWxsKiBvd25l
ciwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUsIFN0cnVjdHVyZSogZmly
c3RCYXNlLCBTdHJ1Y3R1cmVDaGFpbiogZmlyc3RDaGFpbiwgYm9vbCBpc0RpcmVjdCwgdW5zaWdu
ZWQgY291bnQpCi0gICAgewotICAgICAgICBsaXN0WzBdLnNldCh2bSwgb3duZXIsIHN0dWJSb3V0
aW5lLCBmaXJzdEJhc2UsIGZpcnN0Q2hhaW4sIGlzRGlyZWN0LCBjb3VudCk7Ci0gICAgfQotCi0g
ICAgYm9vbCB2aXNpdFdlYWsoaW50IGNvdW50KQotICAgIHsKLSAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBQb2x5bW9ycGhpY1N0dWJJbmZvJiBp
bmZvID0gbGlzdFtpXTsKLSAgICAgICAgICAgIGlmICghaW5mby5iYXNlKQotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFIZWFwOjpp
c01hcmtlZChpbmZvLmJhc2UuZ2V0KCkpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIGlmIChpbmZvLmNoYWluICYmICFIZWFwOjppc01hcmtlZChpbmZvLmNoYWlu
LmdldCgpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAg
ICAgICAgIAotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci19OwotCi0jZW5kaWYgLy8gRU5B
QkxFKEpJVCkKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBQb2x5bW9ycGhpY0Fj
Y2Vzc1N0cnVjdHVyZUxpc3RfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwCShyZXZpc2lvbiAx
ODk1MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRC
eUlkTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTU1ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIlBvbHltb3JwaGljR2V0QnlJZExpc3QuaCIKLQotI2lmIEVOQUJMRShK
SVQpCi0KLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRlICJIZWFwLmgiCi0jaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCi0KLW5hbWVz
cGFjZSBKU0MgewotCi1HZXRCeUlkQWNjZXNzOjpHZXRCeUlkQWNjZXNzKAotICAgIFZNJiB2bSwg
SlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5l
PiBzdHViUm91dGluZSwKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkKLSAgICA6IG1fdHlwZSh0eXBlKQotICAg
ICwgbV9zdHJ1Y3R1cmUodm0sIG93bmVyLCBzdHJ1Y3R1cmUpCi0gICAgLCBtX2NvbmRpdGlvblNl
dChjb25kaXRpb25TZXQpCi0gICAgLCBtX3N0dWJSb3V0aW5lKHN0dWJSb3V0aW5lKQotewotfQot
Ci1HZXRCeUlkQWNjZXNzOjp+R2V0QnlJZEFjY2VzcygpCi17Ci19Ci0KLUdldEJ5SWRBY2Nlc3Mg
R2V0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbykKLXsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgaW5pdGlhbFNsb3dQYXRoID0K
LSAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1Yklu
Zm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSk7Ci0gICAgCi0gICAgR2V0QnlJZEFjY2VzcyBy
ZXN1bHQ7Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBh
Y2Nlc3NfZ2V0X2J5X2lkX3NlbGYpOwotICAgIAotICAgIHJlc3VsdC5tX3R5cGUgPSBTaW1wbGVJ
bmxpbmU7Ci0gICAgcmVzdWx0Lm1fc3RydWN0dXJlLmNvcHlGcm9tKHN0dWJJbmZvLnUuZ2V0QnlJ
ZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZSk7Ci0gICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBK
SVRTdHViUm91dGluZTo6Y3JlYXRlU2VsZk1hbmFnZWRSb3V0aW5lKGluaXRpYWxTbG93UGF0aCk7
Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBHZXRCeUlkQWNjZXNzOjp2aXNp
dFdlYWsoVk0mIHZtKSBjb25zdAotewotICAgIGlmIChtX3N0cnVjdHVyZSAmJiAhSGVhcDo6aXNN
YXJrZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYg
KCFtX2NvbmRpdGlvblNldC5hcmVTdGlsbExpdmUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGlmICghbV9zdHViUm91dGluZS0+dmlzaXRXZWFrKHZtKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpQb2x5
bW9ycGhpY0dldEJ5SWRMaXN0KFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBp
ZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpCi0gICAgICAgIHJldHVybjsK
LSAgICAKLSAgICBtX2xpc3QuYXBwZW5kKEdldEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1cmVTdHVi
SW5mbyhzdHViSW5mbykpOwotfQotCi1Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0Ojpmcm9tKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBp
ZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3QpCi0gICAgICAg
IHJldHVybiBzdHViSW5mby51LmdldEJ5SWRMaXN0Lmxpc3Q7Ci0gICAgCi0gICAgQVNTRVJUKAot
ICAgICAgICBzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZgotICAg
ICAgICB8fCBzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc191bnNldCk7Ci0gICAgCi0gICAg
UG9seW1vcnBoaWNHZXRCeUlkTGlzdCogcmVzdWx0ID0gbmV3IFBvbHltb3JwaGljR2V0QnlJZExp
c3Qoc3R1YkluZm8pOwotICAgIAotICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkTGlzdChyZXN1bHQp
OwotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVBvbHltb3JwaGljR2V0QnlJZExpc3Q6
On5Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0KCkgeyB9Ci0KLU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBQ
b2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpjdXJyZW50U2xvd1BhdGhUYXJnZXQoCi0gICAgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvKSBjb25zdAotewotICAgIGlmIChpc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybiBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHVi
SW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKLSAgICByZXR1cm4gbV9saXN0Lmxhc3Qo
KS5zdHViUm91dGluZSgpLT5jb2RlKCkuY29kZSgpOwotfQotCi12b2lkIFBvbHltb3JwaGljR2V0
QnlJZExpc3Q6OmFkZEFjY2Vzcyhjb25zdCBHZXRCeUlkQWNjZXNzJiBhY2Nlc3MpCi17Ci0gICAg
QVNTRVJUKCFpc0Z1bGwoKSk7Ci0gICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHJlc2l6aW5nIG9w
dGltaXplcyBmb3Igc3BhY2UsIG5vdCB0aW1lLgotICAgIG1fbGlzdC5yZXNpemVUb0ZpdChtX2xp
c3Quc2l6ZSgpICsgMSk7Ci0gICAgbV9saXN0Lmxhc3QoKSA9IGFjY2VzczsKLX0KLQotYm9vbCBQ
b2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojppc0Z1bGwoKSBjb25zdAotewotICAgIEFTU0VSVChzaXpl
KCkgPD0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKTsKLSAgICByZXR1cm4gc2l6ZSgpID09
IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRTsKLX0KLQotYm9vbCBQb2x5bW9ycGhpY0dldEJ5
SWRMaXN0Ojppc0FsbW9zdEZ1bGwoKSBjb25zdAotewotICAgIEFTU0VSVChzaXplKCkgPD0gUE9M
WU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKTsKLSAgICByZXR1cm4gc2l6ZSgpID49IFBPTFlNT1JQ
SElDX0xJU1RfQ0FDSEVfU0laRSAtIDE7Ci19Ci0KLWJvb2wgUG9seW1vcnBoaWNHZXRCeUlkTGlz
dDo6ZGlkU2VsZlBhdGNoaW5nKCkgY29uc3QKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXpl
KCk7IGktLTspIHsKLSAgICAgICAgaWYgKGF0KGkpLnR5cGUoKSA9PSBHZXRCeUlkQWNjZXNzOjpT
aW1wbGVJbmxpbmUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1ib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OnZpc2l0V2VhayhWTSYg
dm0pIGNvbnN0Ci17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gc2l6ZSgpOyBpLS07KSB7Ci0gICAg
ICAgIGlmICghYXQoaSkudmlzaXRXZWFrKHZtKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5k
aWYgLy8gRU5BQkxFKEpJVCkKLQotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgJKHJldmlzaW9uIDE4OTUx
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRM
aXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBQb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0X2gKLSNkZWZpbmUgUG9seW1vcnBoaWNHZXRCeUlkTGlzdF9oCi0KLSNpZiBFTkFC
TEUoSklUKQotCi0jaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgotI2luY2x1ZGUgIk1hY3JvQXNzZW1i
bGVyLmgiCi0jaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIKLSNpbmNsdWRl
ICJPcGNvZGUuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKLSNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBDb2RlQmxvY2s7Ci1zdHJ1Y3QgU3RydWN0
dXJlU3R1YkluZm87Ci0KLWNsYXNzIEdldEJ5SWRBY2Nlc3MgewotcHVibGljOgotICAgIGVudW0g
QWNjZXNzVHlwZSB7Ci0gICAgICAgIEludmFsaWQsCi0gICAgICAgIFNpbXBsZUlubGluZSwgLy8g
VGhpcyBpcyB0aGUgcGF0Y2hlZCBpbmxpbmUgYWNjZXNzLgotICAgICAgICBTaW1wbGVTdHViLCAv
LyBUaGlzIGlzIGEgc3R1Yi4KLSAgICAgICAgV2F0Y2hlZFN0dWIsCi0gICAgICAgIEdldHRlciwK
LSAgICAgICAgQ3VzdG9tR2V0dGVyLAotICAgICAgICBTaW1wbGVNaXNzLAotICAgIH07Ci0gICAg
Ci0gICAgR2V0QnlJZEFjY2VzcygpCi0gICAgICAgIDogbV90eXBlKEludmFsaWQpCi0gICAgewot
ICAgIH0KLSAgICAKLSAgICBHZXRCeUlkQWNjZXNzKAotICAgICAgICBWTSYsIEpTQ2VsbCogb3du
ZXIsIEFjY2Vzc1R5cGUsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+LCBTdHJ1Y3R1cmUqLAot
ICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCgpKTsKLSAgICAKLSAgICB+R2V0QnlJZEFjY2VzcygpOwotICAgIAotICAg
IHN0YXRpYyBHZXRCeUlkQWNjZXNzIGZyb21TdHJ1Y3R1cmVTdHViSW5mbyhTdHJ1Y3R1cmVTdHVi
SW5mbyYpOwotICAgIAotICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgIT0g
SW52YWxpZDsgfQotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7
IH0KLSAgICAKLSAgICBBY2Nlc3NUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0K
LSAgICAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0
dXJlLmdldCgpOyB9Ci0gICAgCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQm
IGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9Ci0gICAgCi0g
ICAgSklUU3R1YlJvdXRpbmUqIHN0dWJSb3V0aW5lKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFT
U0VSVChpc1NldCgpKTsKLSAgICAgICAgcmV0dXJuIG1fc3R1YlJvdXRpbmUuZ2V0KCk7Ci0gICAg
fQotICAgIAotICAgIGJvb2wgZG9lc0NhbGxzKCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09IEdl
dHRlciB8fCB0eXBlKCkgPT0gQ3VzdG9tR2V0dGVyOyB9Ci0gICAgCi0gICAgYm9vbCB2aXNpdFdl
YWsoVk0mKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOwot
ICAgIAotICAgIEFjY2Vzc1R5cGUgbV90eXBlOwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+
IG1fc3RydWN0dXJlOwotICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9u
U2V0OwotICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gbV9zdHViUm91dGluZTsKLX07Ci0KLWNs
YXNzIFBvbHltb3JwaGljR2V0QnlJZExpc3QgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwotcHVibGljOgotICAgIC8vIEVpdGhlciBjcmVhdGVzIGEgbmV3IHBvbHltb3JwaGljIGdldCBs
aXN0LCBvciByZXR1cm5zIHRoZSBvbmUgdGhhdCBpcyBhbHJlYWR5IGluCi0gICAgLy8gcGxhY2Uu
Ci0gICAgc3RhdGljIFBvbHltb3JwaGljR2V0QnlJZExpc3QqIGZyb20oU3RydWN0dXJlU3R1Yklu
Zm8mKTsKLSAgICAKLSAgICB+UG9seW1vcnBoaWNHZXRCeUlkTGlzdCgpOwotICAgIAotICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciBjdXJyZW50U2xvd1BhdGhUYXJnZXQoU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvKSBjb25zdDsKLSAgICAKLSAgICB2b2lkIGFkZEFjY2Vzcyhjb25zdCBHZXRC
eUlkQWNjZXNzJik7Ci0gICAgCi0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9s
aXN0LmlzRW1wdHkoKTsgfQotICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2xp
c3Quc2l6ZSgpOyB9Ci0gICAgYm9vbCBpc0Z1bGwoKSBjb25zdDsKLSAgICBib29sIGlzQWxtb3N0
RnVsbCgpIGNvbnN0OyAvLyBUcnVlIGlmIGFkZGluZyBhbiBlbGVtZW50IHdvdWxkIG1ha2UgaXNG
dWxsKCkgdHJ1ZS4KLSAgICBjb25zdCBHZXRCeUlkQWNjZXNzJiBhdCh1bnNpZ25lZCBpKSBjb25z
dCB7IHJldHVybiBtX2xpc3RbaV07IH0KLSAgICBjb25zdCBHZXRCeUlkQWNjZXNzJiBvcGVyYXRv
cltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdFtpXTsgfQotICAgIAotICAgIGJv
b2wgZGlkU2VsZlBhdGNoaW5nKCkgY29uc3Q7IC8vIEFyZSBhbnkgb2YgdGhlIGFjY2Vzc2VzIFNp
bXBsZUlubGluZT8KLSAgICAKLSAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OwotCi1wcml2
YXRlOgotICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7Ci0gICAgCi0gICAgUG9seW1vcnBoaWNH
ZXRCeUlkTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyYpOwotICAgIAotICAgIFZlY3RvcjxHZXRCeUlk
QWNjZXNzLCAyPiBtX2xpc3Q7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8v
IEVOQUJMRShKSVQpCi0KLSNlbmRpZiAvLyBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0X2gKLQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9y
cGhpY1B1dEJ5SWRMaXN0LmNwcAkocmV2aXNpb24gMTg5NTE1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDE1NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0LCAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQb2x5
bW9ycGhpY1B1dEJ5SWRMaXN0LmgiCi0KLSNpZiBFTkFCTEUoSklUKQotCi0jaW5jbHVkZSAiU3Ry
dWN0dXJlU3R1YkluZm8uaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLVB1dEJ5SWRBY2Nlc3MgUHV0
QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbykKLXsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgaW5pdGlhbFNsb3dQYXRoID0KLSAg
ICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8u
cGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSk7Ci0gICAgCi0gICAgUHV0QnlJZEFjY2VzcyByZXN1
bHQ7Ci0gICAgCi0gICAgc3dpdGNoIChzdHViSW5mby5hY2Nlc3NUeXBlKSB7Ci0gICAgY2FzZSBh
Y2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2U6Ci0gICAgICAgIHJlc3VsdC5tX3R5cGUgPSBSZXBsYWNl
OwotICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuY29weUZyb20oc3R1YkluZm8udS5wdXRC
eUlkUmVwbGFjZS5iYXNlT2JqZWN0U3RydWN0dXJlKTsKLSAgICAgICAgcmVzdWx0Lm1fc3R1YlJv
dXRpbmUgPSBKSVRTdHViUm91dGluZTo6Y3JlYXRlU2VsZk1hbmFnZWRSb3V0aW5lKGluaXRpYWxT
bG93UGF0aCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAKLSAgICBjYXNlIGFjY2Vzc19wdXRf
YnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6Ci0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5z
aXRpb25fbm9ybWFsOgotICAgICAgICByZXN1bHQubV90eXBlID0gVHJhbnNpdGlvbjsKLSAgICAg
ICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlLmNvcHlGcm9tKHN0dWJJbmZvLnUucHV0QnlJZFRyYW5z
aXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUpOwotICAgICAgICByZXN1bHQubV9uZXdTdHJ1Y3R1cmUu
Y29weUZyb20oc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUpOwotICAgICAg
ICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6YWRv
cHRSYXdQb2ludGVyKAotICAgICAgICAgICAgc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5y
YXdDb25kaXRpb25TZXQpOwotICAgICAgICByZXN1bHQubV9zdHViUm91dGluZSA9IHN0dWJJbmZv
LnN0dWJSb3V0aW5lOwotICAgICAgICBicmVhazsKLSAgICAgICAgCi0gICAgZGVmYXVsdDoKLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBQdXRCeUlkQWNjZXNzOjp2aXNpdFdlYWsoVk0mIHZtKSBj
b25zdAotewotICAgIGlmICghbV9jb25kaXRpb25TZXQuYXJlU3RpbGxMaXZlKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgIGNhc2UgUmVw
bGFjZToKLSAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX29sZFN0cnVjdHVyZS5nZXQoKSkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVHJh
bnNpdGlvbjoKLSAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX29sZFN0cnVjdHVyZS5nZXQo
KSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghSGVhcDo6aXNNYXJr
ZWQobV9uZXdTdHJ1Y3R1cmUuZ2V0KCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIFNldHRlcjoKLSAgICBjYXNlIEN1c3RvbVNldHRlcjoKLSAg
ICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX29sZFN0cnVjdHVyZS5nZXQoKSkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gICAgaWYgKCFtX3N0dWJSb3V0aW5lLT52aXNpdFdlYWsodm0pKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVBvbHltb3JwaGljUHV0QnlJZExpc3Q6
OlBvbHltb3JwaGljUHV0QnlJZExpc3QoCi0gICAgUHV0S2luZCBwdXRLaW5kLCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8pCi0gICAgOiBtX2tpbmQocHV0S2luZCkKLXsKLSAgICBpZiAoc3R1
YkluZm8uYWNjZXNzVHlwZSAhPSBhY2Nlc3NfdW5zZXQpCi0gICAgICAgIG1fbGlzdC5hcHBlbmQo
UHV0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKHN0dWJJbmZvKSk7Ci19Ci0KLVBv
bHltb3JwaGljUHV0QnlJZExpc3QqIFBvbHltb3JwaGljUHV0QnlJZExpc3Q6OmZyb20oCi0gICAg
UHV0S2luZCBwdXRLaW5kLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAgaWYg
KHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3B1dF9ieV9pZF9saXN0KQotICAgICAgICBy
ZXR1cm4gc3R1YkluZm8udS5wdXRCeUlkTGlzdC5saXN0OwotICAgIAotICAgIEFTU0VSVChzdHVi
SW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFjZQotICAgICAgICB8fCBz
dHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWwK
LSAgICAgICAgfHwgc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5z
aXRpb25fZGlyZWN0Ci0gICAgICAgIHx8IHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vu
c2V0KTsKLSAgICAKLSAgICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiByZXN1bHQgPQotICAgICAg
ICBuZXcgUG9seW1vcnBoaWNQdXRCeUlkTGlzdChwdXRLaW5kLCBzdHViSW5mbyk7Ci0gICAgCi0g
ICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRMaXN0KHJlc3VsdCk7Ci0gICAgCi0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6flBvbHltb3JwaGljUHV0QnlJZExp
c3QoKSB7IH0KLQotYm9vbCBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojppc0Z1bGwoKSBjb25zdAot
ewotICAgIEFTU0VSVChzaXplKCkgPD0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKTsKLSAg
ICByZXR1cm4gc2l6ZSgpID09IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRTsKLX0KLQotYm9v
bCBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojppc0FsbW9zdEZ1bGwoKSBjb25zdAotewotICAgIEFT
U0VSVChzaXplKCkgPD0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKTsKLSAgICByZXR1cm4g
c2l6ZSgpID49IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDE7Ci19Ci0KLXZvaWQgUG9s
eW1vcnBoaWNQdXRCeUlkTGlzdDo6YWRkQWNjZXNzKGNvbnN0IFB1dEJ5SWRBY2Nlc3MmIHB1dEJ5
SWRBY2Nlc3MpCi17Ci0gICAgQVNTRVJUKCFpc0Z1bGwoKSk7Ci0gICAgLy8gTWFrZSBzdXJlIHRo
YXQgdGhlIHJlc2l6aW5nIG9wdGltaXplcyBmb3Igc3BhY2UsIG5vdCB0aW1lLgotICAgIG1fbGlz
dC5yZXNpemVUb0ZpdChtX2xpc3Quc2l6ZSgpICsgMSk7Ci0gICAgbV9saXN0Lmxhc3QoKSA9IHB1
dEJ5SWRBY2Nlc3M7Ci19Ci0KLWJvb2wgUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6dmlzaXRXZWFr
KFZNJiB2bSkgY29uc3QKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgaWYgKCFhdChpKS52aXNpdFdlYWsodm0pKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
SlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oCShyZXZpc2lv
biAxODk1MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQ
dXRCeUlkTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIxNiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyLCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYg
UG9seW1vcnBoaWNQdXRCeUlkTGlzdF9oCi0jZGVmaW5lIFBvbHltb3JwaGljUHV0QnlJZExpc3Rf
aAotCi0jaWYgRU5BQkxFKEpJVCkKLQotI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKLSNpbmNsdWRl
ICJNYWNyb0Fzc2VtYmxlci5oIgotI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
LmgiCi0jaW5jbHVkZSAiT3Bjb2RlLmgiCi0jaW5jbHVkZSAiUHV0S2luZC5oIgotI2luY2x1ZGUg
IlB1dFByb3BlcnR5U2xvdC5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgotI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENvZGVCbG9jazsKLXN0cnVj
dCBTdHJ1Y3R1cmVTdHViSW5mbzsKLQotY2xhc3MgUHV0QnlJZEFjY2VzcyB7Ci1wdWJsaWM6Ci0g
ICAgZW51bSBBY2Nlc3NUeXBlIHsKLSAgICAgICAgSW52YWxpZCwKLSAgICAgICAgVHJhbnNpdGlv
biwKLSAgICAgICAgUmVwbGFjZSwKLSAgICAgICAgU2V0dGVyLAotICAgICAgICBDdXN0b21TZXR0
ZXIKLSAgICB9OwotICAgIAotICAgIFB1dEJ5SWRBY2Nlc3MoKQotICAgICAgICA6IG1fdHlwZShJ
bnZhbGlkKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIFB1dEJ5SWRBY2Nlc3MgdHJh
bnNpdGlvbigKLSAgICAgICAgVk0mIHZtLAotICAgICAgICBKU0NlbGwqIG93bmVyLAotICAgICAg
ICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwKLSAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1
cmUsCi0gICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25T
ZXQsCi0gICAgICAgIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lKQotICAg
IHsKLSAgICAgICAgUHV0QnlJZEFjY2VzcyByZXN1bHQ7Ci0gICAgICAgIHJlc3VsdC5tX3R5cGUg
PSBUcmFuc2l0aW9uOwotICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuc2V0KHZtLCBvd25l
ciwgb2xkU3RydWN0dXJlKTsKLSAgICAgICAgcmVzdWx0Lm1fbmV3U3RydWN0dXJlLnNldCh2bSwg
b3duZXIsIG5ld1N0cnVjdHVyZSk7Ci0gICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNv
bmRpdGlvblNldDsKLSAgICAgICAgcmVzdWx0Lm1fY3VzdG9tU2V0dGVyID0gMDsKLSAgICAgICAg
cmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBzdHViUm91dGluZTsKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICB9Ci0KLSAgICBzdGF0aWMgUHV0QnlJZEFjY2VzcyByZXBsYWNlKAotICAgICAgICBW
TSYgdm0sCi0gICAgICAgIEpTQ2VsbCogb3duZXIsCi0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlLAotICAgICAgICBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSkKLSAg
ICB7Ci0gICAgICAgIFB1dEJ5SWRBY2Nlc3MgcmVzdWx0OwotICAgICAgICByZXN1bHQubV90eXBl
ID0gUmVwbGFjZTsKLSAgICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlLnNldCh2bSwgb3duZXIs
IHN0cnVjdHVyZSk7Ci0gICAgICAgIHJlc3VsdC5tX2N1c3RvbVNldHRlciA9IDA7Ci0gICAgICAg
IHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gc3R1YlJvdXRpbmU7Ci0gICAgICAgIHJldHVybiByZXN1
bHQ7Ci0gICAgfQotCi0KLSAgICBzdGF0aWMgUHV0QnlJZEFjY2VzcyBzZXR0ZXIoCi0gICAgICAg
IFZNJiB2bSwKLSAgICAgICAgSlNDZWxsKiBvd25lciwKLSAgICAgICAgQWNjZXNzVHlwZSBhY2Nl
c3NUeXBlLAotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKLSAgICAgICAgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwKLSAgICAgICAgUHV0UHJvcGVy
dHlTbG90OjpQdXRWYWx1ZUZ1bmMgY3VzdG9tU2V0dGVyLAotICAgICAgICBQYXNzUmVmUHRyPEpJ
VFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSkKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJU
KGFjY2Vzc1R5cGUgPT0gU2V0dGVyIHx8IGFjY2Vzc1R5cGUgPT0gQ3VzdG9tU2V0dGVyKTsKLSAg
ICAgICAgUHV0QnlJZEFjY2VzcyByZXN1bHQ7Ci0gICAgICAgIHJlc3VsdC5tX29sZFN0cnVjdHVy
ZS5zZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOwotICAgICAgICByZXN1bHQubV90eXBlID0gYWNj
ZXNzVHlwZTsKLSAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0Owot
ICAgICAgICByZXN1bHQubV9jdXN0b21TZXR0ZXIgPSBjdXN0b21TZXR0ZXI7Ci0gICAgICAgIHJl
c3VsdC5tX3N0dWJSb3V0aW5lID0gc3R1YlJvdXRpbmU7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7
Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyBQdXRCeUlkQWNjZXNzIGZyb21TdHJ1Y3R1cmVTdHVi
SW5mbyhTdHJ1Y3R1cmVTdHViSW5mbyYpOwotICAgIAotICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7
IHJldHVybiBtX3R5cGUgIT0gSW52YWxpZDsgfQotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3Qg
eyByZXR1cm4gIWlzU2V0KCk7IH0KLSAgICAKLSAgICBBY2Nlc3NUeXBlIHR5cGUoKSBjb25zdCB7
IHJldHVybiBtX3R5cGU7IH0KLSAgICAKLSAgICBib29sIGlzVHJhbnNpdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fdHlwZSA9PSBUcmFuc2l0aW9uOyB9Ci0gICAgYm9vbCBpc1JlcGxhY2UoKSBjb25z
dCB7IHJldHVybiBtX3R5cGUgPT0gUmVwbGFjZTsgfQotICAgIGJvb2wgaXNTZXR0ZXIoKSBjb25z
dCB7IHJldHVybiBtX3R5cGUgPT0gU2V0dGVyOyB9Ci0gICAgYm9vbCBpc0N1c3RvbSgpIGNvbnN0
IHsgcmV0dXJuIG1fdHlwZSA9PSBDdXN0b21TZXR0ZXI7IH0KLSAgICAKLSAgICBTdHJ1Y3R1cmUq
IG9sZFN0cnVjdHVyZSgpIGNvbnN0Ci0gICAgewotICAgICAgICAvLyBVc2luZyB0aGlzIGluc3Rl
YWQgb2YgaXNTZXQoKSB0byBtYWtlIHRoaXMgYXNzZXJ0aW9uIHJvYnVzdCBhZ2FpbnN0IHRoZSBw
b3NzaWJpbGl0eQotICAgICAgICAvLyBvZiBhZGRpdGlvbmFsIGFjY2VzcyB0eXBlcyBiZWluZyBh
ZGRlZC4KLSAgICAgICAgQVNTRVJUKGlzVHJhbnNpdGlvbigpIHx8IGlzUmVwbGFjZSgpIHx8IGlz
U2V0dGVyKCkgfHwgaXNDdXN0b20oKSk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gbV9vbGRT
dHJ1Y3R1cmUuZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc1JlcGxhY2UoKSB8fCBpc1NldHRlcigpIHx8
IGlzQ3VzdG9tKCkpOwotICAgICAgICByZXR1cm4gbV9vbGRTdHJ1Y3R1cmUuZ2V0KCk7Ci0gICAg
fQotICAgIAotICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVChpc1RyYW5zaXRpb24oKSk7Ci0gICAgICAgIHJldHVybiBtX25ld1N0cnVjdHVy
ZS5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9Ci0gICAg
Ci0gICAgSklUU3R1YlJvdXRpbmUqIHN0dWJSb3V0aW5lKCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IEFTU0VSVChpc1RyYW5zaXRpb24oKSB8fCBpc1JlcGxhY2UoKSB8fCBpc1NldHRlcigpIHx8IGlz
Q3VzdG9tKCkpOwotICAgICAgICByZXR1cm4gbV9zdHViUm91dGluZS5nZXQoKTsKLSAgICB9Ci0K
LSAgICBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyBjdXN0b21TZXR0ZXIoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgQVNTRVJUKGlzQ3VzdG9tKCkpOwotICAgICAgICByZXR1cm4gbV9jdXN0
b21TZXR0ZXI7Ci0gICAgfQotCi0gICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25zdDsKLSAgICAK
LXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKLSAgICAKLSAgICBBY2Nlc3NU
eXBlIG1fdHlwZTsKLSAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX29sZFN0cnVjdHVyZTsK
LSAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX25ld1N0cnVjdHVyZTsKLSAgICBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKLSAgICBQdXRQcm9wZXJ0eVNsb3Q6
OlB1dFZhbHVlRnVuYyBtX2N1c3RvbVNldHRlcjsKLSAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+
IG1fc3R1YlJvdXRpbmU7Ci19OwotCi1jbGFzcyBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0IHsKLSAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICAvLyBFaXRoZXIgY3JlYXRl
cyBhIG5ldyBwb2x5bW9ycGhpYyBwdXQgbGlzdCwgb3IgcmV0dXJucyB0aGUgb25lIHRoYXQgaXMg
YWxyZWFkeQotICAgIC8vIGluIHBsYWNlLgotICAgIHN0YXRpYyBQb2x5bW9ycGhpY1B1dEJ5SWRM
aXN0KiBmcm9tKFB1dEtpbmQsIFN0cnVjdHVyZVN0dWJJbmZvJik7Ci0gICAgCi0gICAgflBvbHlt
b3JwaGljUHV0QnlJZExpc3QoKTsKLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY3Vy
cmVudFNsb3dQYXRoVGFyZ2V0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2xpc3Qu
bGFzdCgpLnN0dWJSb3V0aW5lKCktPmNvZGUoKS5jb2RlKCk7Ci0gICAgfQotICAgIAotICAgIHZv
aWQgYWRkQWNjZXNzKGNvbnN0IFB1dEJ5SWRBY2Nlc3MmKTsKLSAgICAKLSAgICBib29sIGlzRW1w
dHkoKSBjb25zdCB7IHJldHVybiBtX2xpc3QuaXNFbXB0eSgpOyB9Ci0gICAgdW5zaWduZWQgc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5zaXplKCk7IH0KLSAgICBib29sIGlzRnVsbCgpIGNv
bnN0OwotICAgIGJvb2wgaXNBbG1vc3RGdWxsKCkgY29uc3Q7IC8vIFRydWUgaWYgYWRkaW5nIGFu
IGVsZW1lbnQgd291bGQgbWFrZSBpc0Z1bGwoKSB0cnVlLgotICAgIGNvbnN0IFB1dEJ5SWRBY2Nl
c3MmIGF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdFtpXTsgfQotICAgIGNvbnN0
IFB1dEJ5SWRBY2Nlc3MmIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9s
aXN0W2ldOyB9Ci0gICAgCi0gICAgUHV0S2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5k
OyB9Ci0gICAgCi0gICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25zdDsKLSAgICAKLXByaXZhdGU6
Ci0gICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKLSAgICAKLSAgICAvLyBJbml0aWFsaXplIGZy
b20gYSBzdHViIGluZm87IHRoaXMgd2lsbCBwbGFjZSBvbmUgZWxlbWVudCBpbiB0aGUgbGlzdCBh
bmQgaXQgd2lsbAotICAgIC8vIGJlIGNyZWF0ZWQgYnkgY29udmVydGluZyB0aGUgc3R1YiBpbmZv
J3MgcHV0IGJ5IGlkIGFjY2VzcyBpbmZvcm1hdGlvbiBpbnRvIG91cgotICAgIC8vIFB1dEJ5SWRB
Y2Nlc3MuCi0gICAgUG9seW1vcnBoaWNQdXRCeUlkTGlzdChQdXRLaW5kLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYpOwotCi0gICAgVmVjdG9yPFB1dEJ5SWRBY2Nlc3MsIDI+IG1fbGlzdDsKLSAgICBQdXRL
aW5kIG1fa2luZDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gRU5BQkxF
KEpJVCkKLQotI2VuZGlmIC8vIFBvbHltb3JwaGljUHV0QnlJZExpc3RfaAotCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCShyZXZp
c2lvbiAxODk1MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0
YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEzICsyNiwxMiBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKIAotI2luY2x1ZGUgIkFjY2Vzc29y
Q2FsbEpJVFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAi
Q29tcGxleEdldFN0YXR1cy5oIgogI2luY2x1ZGUgIkxMSW50RGF0YS5oIgogI2luY2x1ZGUgIkxv
d0xldmVsSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAi
UG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oIgorI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgi
CiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlQ2hhaW4uaCIKICNp
bmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KQEAgLTE1NCw2NiArMTUzLDQzIEBAIFB1dEJ5SWRTdGF0
dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICBpZiAoIXN0dWJJbmZvLT5zZWVuKQog
ICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cygpOwogICAgIAotICAgIHN3aXRjaCAoc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUpIHsKLSAgICBjYXNlIGFjY2Vzc191bnNldDoKKyAgICBzd2l0Y2ggKHN0
dWJJbmZvLT5jYWNoZVR5cGUpIHsKKyAgICBjYXNlIENhY2hlVHlwZTo6VW5zZXQ6CiAgICAgICAg
IC8vIElmIHRoZSBKSVQgc2F3IGl0IGJ1dCBkaWRuJ3Qgb3B0aW1pemUgaXQsIHRoZW4gYXNzdW1l
IHRoYXQgdGhpcyB0YWtlcyBzbG93IHBhdGguCiAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVz
KFRha2VzU2xvd1BhdGgpOwogICAgICAgICAKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfcmVw
bGFjZTogeworICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZTogewogICAgICAgICBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQgPQotICAgICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJZFJl
cGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CisgICAgICAg
ICAgICBzdHViSW5mby0+dS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLT5nZXRDb25jdXJy
ZW50bHkodWlkKTsKICAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgewogICAgICAg
ICAgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAotICAgICAgICAgICAgICAgIHN0
dWJJbmZvLT51LnB1dEJ5SWRSZXBsYWNlLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIG9mZnNl
dCk7CisgICAgICAgICAgICAgICAgc3R1YkluZm8tPnUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVj
dHVyZS5nZXQoKSwgb2Zmc2V0KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gUHV0QnlJZFN0
YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICB9CiAgICAgICAgIAotICAgIGNhc2UgYWNjZXNzX3B1
dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJh
bnNpdGlvbl9kaXJlY3Q6IHsKLSAgICAgICAgQVNTRVJUKHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFu
c2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5J
bnZhbGlkYXRlZCgpKTsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gCi0gICAgICAg
ICAgICBzdHViSW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUtPmdldENvbmN1cnJl
bnRseSh1aWQpOwotICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7Ci0gICAgICAg
ICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQgPSBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldDo6ZnJvbVJhd1BvaW50ZXIoCi0gICAgICAgICAgICAgICAgc3R1Yklu
Zm8tPnUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0KTsKLSAgICAgICAgICAgIGlm
ICghY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eSgpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgICAgICAgICAgcmV0
dXJuIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAotICAgICAgICAgICAgICAgIHN0dWJJbmZv
LT51LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgpLAotICAgICAgICAg
ICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5nZXQoKSwKLSAg
ICAgICAgICAgICAgICBjb25kaXRpb25TZXQsIG9mZnNldCk7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgfQotICAgICAgICAKLSAg
ICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfbGlzdDogewotICAgICAgICBQb2x5bW9ycGhpY1B1dEJ5
SWRMaXN0KiBsaXN0ID0gc3R1YkluZm8tPnUucHV0QnlJZExpc3QubGlzdDsKKyAgICBjYXNlIENh
Y2hlVHlwZTo6U3R1YjogeworICAgICAgICBQb2x5bW9ycGhpY0FjY2VzcyogbGlzdCA9IHN0dWJJ
bmZvLT51LnN0dWI7CiAgICAgICAgIAogICAgICAgICBQdXRCeUlkU3RhdHVzIHJlc3VsdDsKICAg
ICAgICAgcmVzdWx0Lm1fc3RhdGUgPSBTaW1wbGU7CiAgICAgICAgIAogICAgICAgICBTdGF0ZSBz
bG93UGF0aFN0YXRlID0gVGFrZXNTbG93UGF0aDsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBjb25zdCBQdXRCeUlkQWNj
ZXNzJiBhY2Nlc3MgPSBsaXN0LT5hdChpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3dp
dGNoIChhY2Nlc3MudHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIFB1dEJ5SWRBY2Nlc3M6OlNl
dHRlcjoKLSAgICAgICAgICAgIGNhc2UgUHV0QnlJZEFjY2Vzczo6Q3VzdG9tU2V0dGVyOgorICAg
ICAgICAgICAgY29uc3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0gbGlzdC0+YXQoaSk7CisgICAgICAg
ICAgICBpZiAoYWNjZXNzLmRvZXNDYWxscygpKQogICAgICAgICAgICAgICAgIHNsb3dQYXRoU3Rh
dGUgPSBNYWtlc0NhbGxzOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsg
KytpKSB7Ci0gICAgICAgICAgICBjb25zdCBQdXRCeUlkQWNjZXNzJiBhY2Nlc3MgPSBsaXN0LT5h
dChpKTsKKyAgICAgICAgICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIGFjY2VzcyA9IGxpc3QtPmF0KGkp
OworICAgICAgICAgICAgaWYgKGFjY2Vzcy52aWFQcm94eSgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBQdXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUpOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBQdXRCeUlkVmFyaWFudCB2YXJpYW50OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBz
d2l0Y2ggKGFjY2Vzcy50eXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgUHV0QnlJZEFjY2Vzczo6
UmVwbGFjZTogeworICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpSZXBsYWNlOiB7CiAgICAg
ICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBhY2Nlc3Muc3RydWN0dXJlKCk7CiAg
ICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25j
dXJyZW50bHkodWlkKTsKICAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0
KSkKQEAgLTIyMiw3ICsxOTgsNyBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1
dGVGb3JTCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICBjYXNlIFB1dEJ5SWRBY2Nlc3M6OlRyYW5zaXRpb246IHsKKyAg
ICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6VHJhbnNpdGlvbjogewogICAgICAgICAgICAgICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9CiAgICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5uZXdT
dHJ1Y3R1cmUoKS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CiAgICAgICAgICAgICAgICAgaWYgKCFp
c1ZhbGlkT2Zmc2V0KG9mZnNldCkpCkBAIC0yMzEsMTEgKzIwNywxMSBAQCBQdXRCeUlkU3RhdHVz
IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRp
b25TZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkpCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBQdXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUpOwogICAgICAgICAgICAgICAgIHZhcmlh
bnQgPSBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKLSAgICAgICAgICAgICAgICAgICAgYWNj
ZXNzLm9sZFN0cnVjdHVyZSgpLCBhY2Nlc3MubmV3U3RydWN0dXJlKCksIGNvbmRpdGlvblNldCwg
b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgYWNjZXNzLnN0cnVjdHVyZSgpLCBhY2Nlc3Mu
bmV3U3RydWN0dXJlKCksIGNvbmRpdGlvblNldCwgb2Zmc2V0KTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2Ug
UHV0QnlJZEFjY2Vzczo6U2V0dGVyOiB7CisgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OlNl
dHRlcjogewogICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYWNjZXNzLnN0
cnVjdHVyZSgpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIENvbXBsZXhHZXRT
dGF0dXMgY29tcGxleEdldFN0YXR1cyA9IENvbXBsZXhHZXRTdGF0dXM6OmNvbXB1dGVGb3IoCkBA
IC0yNDksMTIgKzIyNSwxMiBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVG
b3JTCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKHNsb3dQYXRoU3Rh
dGUpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIENvbXBsZXhH
ZXRTdGF0dXM6OklubGluZWFibGU6IHsKLSAgICAgICAgICAgICAgICAgICAgQWNjZXNzb3JDYWxs
SklUU3R1YlJvdXRpbmUqIHN0dWIgPSBzdGF0aWNfY2FzdDxBY2Nlc3NvckNhbGxKSVRTdHViUm91
dGluZSo+KAotICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzLnN0dWJSb3V0aW5lKCkpOwor
ICAgICAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGFjY2Vzcy5j
YWxsTGlua0luZm8oKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGNhbGxMaW5rSW5mbyk7
CiAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2Fs
bExpbmtTdGF0dXMgPQogICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxD
YWxsTGlua1N0YXR1cz4oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbExpbmtTdGF0
dXM6OmNvbXB1dGVGb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tlciwg
cHJvZmlsZWRCbG9jaywgKnN0dWItPm1fY2FsbExpbmtJbmZvLCBjYWxsRXhpdFNpdGVEYXRhKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tlciwgcHJvZmlsZWRCbG9jaywg
KmNhbGxMaW5rSW5mbywgY2FsbEV4aXRTaXRlRGF0YSkpOwogICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50OjpzZXR0ZXIoCiAg
ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0
KCksIGNvbXBsZXhHZXRTdGF0dXMuY29uZGl0aW9uU2V0KCksCkBAIC0yNjMsNyArMjM5LDcgQEAg
UHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2Fz
ZSBQdXRCeUlkQWNjZXNzOjpDdXN0b21TZXR0ZXI6CisgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nh
c2U6OkN1c3RvbVNldHRlcjoKICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhN
YWtlc0NhbGxzKTsKIAogICAgICAgICAgICAgZGVmYXVsdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkocmV2aXNp
b24gMTg5NTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0
dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCArMjcsNyBAQAogI2luY2x1ZGUgIlN0
cnVjdHVyZVN0dWJJbmZvLmgiCiAKICNpbmNsdWRlICJKU09iamVjdC5oIgotI2luY2x1ZGUgIlBv
bHltb3JwaGljR2V0QnlJZExpc3QuaCIKLSNpbmNsdWRlICJQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0
LmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKICNpbmNsdWRlICJSZXBhdGNoLmgi
CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMzYsMzcgKzM1LDUzIEBAIG5hbWVzcGFjZSBKU0Mgewog
I2lmIEVOQUJMRShKSVQpCiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpkZXJlZigpCiB7Ci0gICAg
c3dpdGNoIChhY2Nlc3NUeXBlKSB7Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3Q6IHsK
LSAgICAgICAgZGVsZXRlIHUuZ2V0QnlJZExpc3QubGlzdDsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfbGlzdDoKLSAgICAgICAgZGVsZXRlIHUucHV0
QnlJZExpc3QubGlzdDsKKyAgICBzd2l0Y2ggKGNhY2hlVHlwZSkgeworICAgIGNhc2UgQ2FjaGVU
eXBlOjpTdHViOgorICAgICAgICBkZWxldGUgdS5zdHViOwogICAgICAgICByZXR1cm47Ci0gICAg
Y2FzZSBhY2Nlc3NfaW5fbGlzdDogewotICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVy
ZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlcyA9IHUuaW5MaXN0LnN0cnVjdHVyZUxpc3Q7Ci0g
ICAgICAgIGRlbGV0ZSBwb2x5bW9ycGhpY1N0cnVjdHVyZXM7CisgICAgY2FzZSBDYWNoZVR5cGU6
OlVuc2V0OgorICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKKyAgICBjYXNlIENhY2hl
VHlwZTo6UHV0QnlJZFJlcGxhY2U6CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgY2FzZSBh
Y2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgotICAgIGNhc2UgYWNjZXNzX3B1dF9i
eV9pZF90cmFuc2l0aW9uX2RpcmVjdDoKLSAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQ6OmFkb3B0UmF3UG9pbnRlcih1LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0NvbmRpdGlvblNldCk7
Ci0gICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0ID0gbnVsbHB0cjsK
LSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmOgotICAgIGNh
c2UgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlOgotICAgIGNhc2UgYWNjZXNzX3Vuc2V0OgotICAg
ICAgICAvLyBUaGVzZSBpbnN0cnVjdGlvbnMgZG9uJ3QgaGF2ZSB0byByZWxlYXNlIGFueSBhbGxv
Y2F0ZWQgbWVtb3J5Ci0gICAgICAgIHJldHVybjsKLSAgICBkZWZhdWx0OgotICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVB0ciBTdHJ1Y3R1cmVTdHViSW5m
bzo6YWRkQWNjZXNzQ2FzZSgKKyAgICBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25z
dCBJZGVudGlmaWVyJiBpZGVudCwgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGFjY2Vzc0Nh
c2UpCit7CisgICAgaWYgKCFhY2Nlc3NDYXNlKQorICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyKCk7CisgICAgCisgICAgaWYgKGNhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlN0dWIp
CisgICAgICAgIHJldHVybiB1LnN0dWItPnJlZ2VuZXJhdGVXaXRoQ2FzZSh2bSwgY29kZUJsb2Nr
LCAqdGhpcywgaWRlbnQsIHN0ZDo6bW92ZShhY2Nlc3NDYXNlKSk7CisKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8UG9seW1vcnBoaWNBY2Nlc3M+IGFjY2VzcyA9IHN0ZDo6bWFrZV91bmlxdWU8UG9seW1v
cnBoaWNBY2Nlc3M+KCk7CisgICAgCisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3ND
YXNlPj4gYWNjZXNzQ2FzZXM7CisgICAgCisgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+
IHByZXZpb3VzQ2FzZSA9CisgICAgICAgIEFjY2Vzc0Nhc2U6OmZyb21TdHJ1Y3R1cmVTdHViSW5m
byh2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgKnRoaXMpOworICAgIGlmIChwcmV2
aW91c0Nhc2UpCisgICAgICAgIGFjY2Vzc0Nhc2VzLmFwcGVuZChzdGQ6Om1vdmUocHJldmlvdXND
YXNlKSk7CisKKyAgICBhY2Nlc3NDYXNlcy5hcHBlbmQoc3RkOjptb3ZlKGFjY2Vzc0Nhc2UpKTsK
KworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByZXN1bHQgPQorICAgICAgICBhY2Nlc3MtPnJl
Z2VuZXJhdGVXaXRoQ2FzZXModm0sIGNvZGVCbG9jaywgKnRoaXMsIGlkZW50LCBzdGQ6Om1vdmUo
YWNjZXNzQ2FzZXMpKTsKKworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gTWFjcm9B
c3NlbWJsZXJDb2RlUHRyKCk7CisKKyAgICBjYWNoZVR5cGUgPSBDYWNoZVR5cGU6OlN0dWI7Cisg
ICAgdS5zdHViID0gYWNjZXNzLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB2
b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpyZXNldChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAg
ICBpZiAoYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpCisgICAgaWYgKGNhY2hlVHlwZSA9PSBD
YWNoZVR5cGU6OlVuc2V0KQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaWYgKE9wdGlvbnM6
OnZlcmJvc2VPU1IoKSkgewpAQCAtNzQsNjAgKzg5LDM4IEBAIHZvaWQgU3RydWN0dXJlU3R1Yklu
Zm86OnJlc2V0KENvZGVCbG9jayoKICAgICAgICAgLy8gb2YgdGhlIENvZGVCbG9jay4KICAgICAg
ICAgZGF0YUxvZygiQ2xlYXJpbmcgc3RydWN0dXJlIGNhY2hlIChraW5kICIsIHN0YXRpY19jYXN0
PGludD4oYWNjZXNzVHlwZSksICIpIGluICIsIFJhd1BvaW50ZXIoY29kZUJsb2NrKSwgIi5cbiIp
OwogICAgIH0KLSAgICAKLSAgICBpZiAoaXNHZXRCeUlkQWNjZXNzKHN0YXRpY19jYXN0PEFjY2Vz
c1R5cGU+KGFjY2Vzc1R5cGUpKSkKKworICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgeworICAgIGNh
c2UgQWNjZXNzVHlwZTo6R2V0OgogICAgICAgICByZXNldEdldEJ5SUQoY29kZUJsb2NrLCAqdGhp
cyk7Ci0gICAgZWxzZSBpZiAoaXNQdXRCeUlkQWNjZXNzKHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+
KGFjY2Vzc1R5cGUpKSkKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXQ6
CiAgICAgICAgIHJlc2V0UHV0QnlJRChjb2RlQmxvY2ssICp0aGlzKTsKLSAgICBlbHNlIHsKLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoaXNJbkFjY2VzcyhzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihh
Y2Nlc3NUeXBlKSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkluOgog
ICAgICAgICByZXNldEluKGNvZGVCbG9jaywgKnRoaXMpOworICAgICAgICBicmVhazsKICAgICB9
CiAgICAgCiAgICAgZGVyZWYoKTsKLSAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX3Vuc2V0OwotICAg
IHN0dWJSb3V0aW5lID0gbnVsbHB0cjsKLSAgICB3YXRjaHBvaW50cyA9IG51bGxwdHI7CisgICAg
Y2FjaGVUeXBlID0gQ2FjaGVUeXBlOjpVbnNldDsKIH0KIAogdm9pZCBTdHJ1Y3R1cmVTdHViSW5m
bzo6dmlzaXRXZWFrUmVmZXJlbmNlcyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBWTSYg
dm0gPSAqY29kZUJsb2NrLT52bSgpOwotICAgIAotICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgewot
ICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmOgotICAgICAgICBpZiAoSGVhcDo6aXNNYXJr
ZWQodS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpKSkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3Q6
IHsKLSAgICAgICAgaWYgKHUuZ2V0QnlJZExpc3QubGlzdC0+dmlzaXRXZWFrKHZtKSkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgYWNjZXNzX3B1
dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJh
bnNpdGlvbl9kaXJlY3Q6Ci0gICAgICAgIGlmIChIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRUcmFu
c2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgpKQotICAgICAgICAgICAgJiYgSGVhcDo6aXNN
YXJrZWQodS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUuZ2V0KCkpCi0gICAgICAgICAgICAm
JiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6ZnJvbVJhd1BvaW50ZXIodS5wdXRCeUlkVHJh
bnNpdGlvbi5yYXdDb25kaXRpb25TZXQpLmFyZVN0aWxsTGl2ZSgpKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFjZToK
LSAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKHUucHV0QnlJZFJlcGxhY2UuYmFzZU9iamVjdFN0
cnVjdHVyZS5nZXQoKSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9saXN0OgotICAgICAgICBpZiAodS5wdXRCeUlkTGlzdC5s
aXN0LT52aXNpdFdlYWsodm0pKQorCisgICAgc3dpdGNoIChjYWNoZVR5cGUpIHsKKyAgICBjYXNl
IENhY2hlVHlwZTo6R2V0QnlJZFNlbGY6CisgICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBs
YWNlOgorICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQodS5ieUlkU2VsZi5iYXNlT2JqZWN0U3Ry
dWN0dXJlLmdldCgpKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBhY2Nlc3NfaW5fbGlzdDogewotICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVy
ZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlcyA9IHUuaW5MaXN0LnN0cnVjdHVyZUxpc3Q7Ci0g
ICAgICAgIGlmIChwb2x5bW9ycGhpY1N0cnVjdHVyZXMtPnZpc2l0V2Vhayh1LmluTGlzdC5saXN0
U2l6ZSkpCisgICAgY2FzZSBDYWNoZVR5cGU6OlN0dWI6CisgICAgICAgIGlmICh1LnN0dWItPnZp
c2l0V2Vhayh2bSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGJyZWFrOwotICAgIH0K
ICAgICBkZWZhdWx0OgotICAgICAgICAvLyBUaGUgcmVzdCBvZiB0aGUgaW5zdHJ1Y3Rpb25zIGRv
bid0IHJlcXVpcmUgcmVmZXJlbmNlcywgc28gdGhlcmUgaXMgbm8gbmVlZCB0bwotICAgICAgICAv
LyBkbyBhbnl0aGluZy4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlz
aW9uIDE4OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVT
dHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiTWFj
cm9Bc3NlbWJsZXIuaCIKICNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgog
I2luY2x1ZGUgIk9wY29kZS5oIgotI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJl
TGlzdC5oIgorI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCiAjaW5jbHVkZSAiUmVnaXN0
ZXJTZXQuaCIKICNpbmNsdWRlICJTcGlsbFJlZ2lzdGVyc01vZGUuaCIKICNpbmNsdWRlICJTdHJ1
Y3R1cmUuaCIKQEAgLTQyLDU3ICs0MiwyNSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIEVOQUJM
RShKSVQpCiAKLWNsYXNzIFBvbHltb3JwaGljR2V0QnlJZExpc3Q7Ci1jbGFzcyBQb2x5bW9ycGhp
Y1B1dEJ5SWRMaXN0OworY2xhc3MgUG9seW1vcnBoaWNBY2Nlc3M7CiAKLWVudW0gQWNjZXNzVHlw
ZSB7Ci0gICAgYWNjZXNzX2dldF9ieV9pZF9zZWxmLAotICAgIGFjY2Vzc19nZXRfYnlfaWRfbGlz
dCwKLSAgICBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsLAotICAgIGFjY2Vzc19w
dXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3QsCi0gICAgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNl
LAotICAgIGFjY2Vzc19wdXRfYnlfaWRfbGlzdCwKLSAgICBhY2Nlc3NfdW5zZXQsCi0gICAgYWNj
ZXNzX2luX2xpc3QKK2VudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhfdCB7CisgICAgR2V0LAor
ICAgIFB1dCwKKyAgICBJbgogfTsKIAotaW5saW5lIGJvb2wgaXNHZXRCeUlkQWNjZXNzKEFjY2Vz
c1R5cGUgYWNjZXNzVHlwZSkKLXsKLSAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKLSAgICBjYXNl
IGFjY2Vzc19nZXRfYnlfaWRfc2VsZjoKLSAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfbGlzdDoK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLX0KLSAgICAKLWlubGluZSBib29sIGlzUHV0QnlJZEFjY2VzcyhBY2Nlc3NUeXBl
IGFjY2Vzc1R5cGUpCi17Ci0gICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7Ci0gICAgY2FzZSBhY2Nl
c3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9p
ZF90cmFuc2l0aW9uX2RpcmVjdDoKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFjZToK
LSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfbGlzdDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotaW5saW5lIGJv
b2wgaXNJbkFjY2VzcyhBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUpCi17Ci0gICAgc3dpdGNoIChhY2Nl
c3NUeXBlKSB7Ci0gICAgY2FzZSBhY2Nlc3NfaW5fbGlzdDoKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KK2VudW0gY2xh
c3MgQ2FjaGVUeXBlIDogaW50OF90IHsKKyAgICBVbnNldCwKKyAgICBHZXRCeUlkU2VsZiwKKyAg
ICBQdXRCeUlkUmVwbGFjZSwKKyAgICBTdHViCit9OwogCiBzdHJ1Y3QgU3RydWN0dXJlU3R1Yklu
Zm8gewotICAgIFN0cnVjdHVyZVN0dWJJbmZvKCkKLSAgICAgICAgOiBhY2Nlc3NUeXBlKGFjY2Vz
c191bnNldCkKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyhBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUpCisg
ICAgICAgIDogYWNjZXNzVHlwZShhY2Nlc3NUeXBlKQorICAgICAgICAsIGNhY2hlVHlwZShDYWNo
ZVR5cGU6OlVuc2V0KQogICAgICAgICAsIHNlZW4oZmFsc2UpCiAgICAgICAgICwgcmVzZXRCeUdD
KGZhbHNlKQogICAgICAgICAsIHRvb2tTbG93UGF0aChmYWxzZSkKQEAgLTEwMCw1MyArNjgsMzEg
QEAgc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBp
bml0R2V0QnlJZFNlbGYoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIGJhc2VPYmpl
Y3RTdHJ1Y3R1cmUpCisgICAgdm9pZCBpbml0R2V0QnlJZFNlbGYoVk0mIHZtLCBKU0NlbGwqIG93
bmVyLCBTdHJ1Y3R1cmUqIGJhc2VPYmplY3RTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCkKICAgICB7Ci0gICAgICAgIGFjY2Vzc1R5cGUgPSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGY7Ci0K
LSAgICAgICAgdS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLnNldCh2bSwgb3duZXIs
IGJhc2VPYmplY3RTdHJ1Y3R1cmUpOwotICAgIH0KKyAgICAgICAgY2FjaGVUeXBlID0gQ2FjaGVU
eXBlOjpHZXRCeUlkU2VsZjsKIAotICAgIHZvaWQgaW5pdEdldEJ5SWRMaXN0KFBvbHltb3JwaGlj
R2V0QnlJZExpc3QqIGxpc3QpCi0gICAgewotICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX2dl
dF9ieV9pZF9saXN0OwotICAgICAgICB1LmdldEJ5SWRMaXN0Lmxpc3QgPSBsaXN0OworICAgICAg
ICB1LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgYmFzZU9iamVj
dFN0cnVjdHVyZSk7CisgICAgICAgIHUuYnlJZFNlbGYub2Zmc2V0ID0gb2Zmc2V0OwogICAgIH0K
IAotICAgIC8vIFB1dEJ5SWQqCi0KLSAgICB2b2lkIGluaXRQdXRCeUlkVHJhbnNpdGlvbihWTSYg
dm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogcHJldmlvdXNTdHJ1Y3R1cmUsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQsIGJv
b2wgaXNEaXJlY3QpCisgICAgdm9pZCBpbml0UHV0QnlJZFJlcGxhY2UoVk0mIHZtLCBKU0NlbGwq
IG93bmVyLCBTdHJ1Y3R1cmUqIGJhc2VPYmplY3RTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCkKICAgICB7Ci0gICAgICAgIGlmIChpc0RpcmVjdCkKLSAgICAgICAgICAgIGFjY2Vzc1R5
cGUgPSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0OwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1h
bDsKKyAgICAgICAgY2FjaGVUeXBlID0gQ2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZTsKIAotICAg
ICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLnNldCh2bSwgb3duZXIs
IHByZXZpb3VzU3RydWN0dXJlKTsKLSAgICAgICAgdS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1
cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKLSAgICAgICAgdS5wdXRCeUlkVHJhbnNpdGlv
bi5yYXdDb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQucmVsZWFzZVJhd1BvaW50ZXIoKTsKKyAg
ICAgICAgdS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLnNldCh2bSwgb3duZXIsIGJhc2VP
YmplY3RTdHJ1Y3R1cmUpOworICAgICAgICB1LmJ5SWRTZWxmLm9mZnNldCA9IG9mZnNldDsKICAg
ICB9CiAKLSAgICB2b2lkIGluaXRQdXRCeUlkUmVwbGFjZShWTSYgdm0sIEpTQ2VsbCogb3duZXIs
IFN0cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIGFjY2Vzc1R5
cGUgPSBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2U7Ci0gICAgCi0gICAgICAgIHUucHV0QnlJZFJl
cGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBiYXNlT2JqZWN0U3RydWN0
dXJlKTsKLSAgICB9Ci0gICAgICAgIAotICAgIHZvaWQgaW5pdFB1dEJ5SWRMaXN0KFBvbHltb3Jw
aGljUHV0QnlJZExpc3QqIGxpc3QpCi0gICAgewotICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNz
X3B1dF9ieV9pZF9saXN0OwotICAgICAgICB1LnB1dEJ5SWRMaXN0Lmxpc3QgPSBsaXN0OwotICAg
IH0KLSAgICAKLSAgICB2b2lkIGluaXRJbkxpc3QoUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVM
aXN0KiBsaXN0LCBpbnQgbGlzdFNpemUpCisgICAgdm9pZCBpbml0U3R1YihzdGQ6OnVuaXF1ZV9w
dHI8UG9seW1vcnBoaWNBY2Nlc3M+IHN0dWIpCiAgICAgewotICAgICAgICBhY2Nlc3NUeXBlID0g
YWNjZXNzX2luX2xpc3Q7Ci0gICAgICAgIHUuaW5MaXN0LnN0cnVjdHVyZUxpc3QgPSBsaXN0Owot
ICAgICAgICB1LmluTGlzdC5saXN0U2l6ZSA9IGxpc3RTaXplOworICAgICAgICBjYWNoZVR5cGUg
PSBDYWNoZVR5cGU6OlN0dWI7CisgICAgICAgIHUuc3R1YiA9IHN0dWIucmVsZWFzZSgpOwogICAg
IH0KLSAgICAgICAgCisKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgYWRkQWNjZXNzQ2FzZSgK
KyAgICAgICAgVk0mLCBDb2RlQmxvY2sqLCBjb25zdCBJZGVudGlmaWVyJiwgc3RkOjp1bmlxdWVf
cHRyPEFjY2Vzc0Nhc2U+IGFjY2Vzc0Nhc2UpOworCiAgICAgdm9pZCByZXNldChDb2RlQmxvY2sq
KTsKIAogICAgIHZvaWQgZGVyZWYoKTsKQEAgLTE2NSwxNSArMTExLDkgQEAgc3RydWN0IFN0cnVj
dHVyZVN0dWJJbmZvIHsKICAgICAgICAgc2VlbiA9IHRydWU7CiAgICAgfQogICAgICAgICAKLSAg
ICBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBhZGRXYXRjaHBvaW50KAotICAgICAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNv
bmRpdGlvbiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCkpCi0gICAgewotICAgICAgICByZXR1
cm4gV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjplbnN1cmVSZWZlcmVuY2VBbmRBZGRX
YXRjaHBvaW50KAotICAgICAgICAgICAgd2F0Y2hwb2ludHMsIGNvZGVCbG9jaywgdGhpcywgY29u
ZGl0aW9uKTsKLSAgICB9Ci0gICAgCi0gICAgaW50OF90IGFjY2Vzc1R5cGU7Ci0gICAgYm9vbCBz
ZWVuIDogMTsKKyAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGU7CisgICAgQ2FjaGVUeXBlIGNhY2hl
VHlwZTsKKyAgICBib29sIHNlZW47CiAgICAgYm9vbCByZXNldEJ5R0MgOiAxOwogICAgIGJvb2wg
dG9va1Nsb3dQYXRoIDogMTsKIApAQCAtMjAzLDM0ICsxNDMsMTMgQEAgc3RydWN0IFN0cnVjdHVy
ZVN0dWJJbmZvIHsKIAogICAgIHVuaW9uIHsKICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAg
IC8vIEl0IHdvdWxkIGJlIHVud2lzZSB0byBwdXQgYW55dGhpbmcgaGVyZSwgYXMgaXQgd2lsbCBz
dXJlbHkgYmUgb3ZlcndyaXR0ZW4uCi0gICAgICAgIH0gdW5zZXQ7Ci0gICAgICAgIHN0cnVjdCB7
Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4gYmFzZU9iamVjdFN0cnVj
dHVyZTsKLSAgICAgICAgfSBnZXRCeUlkU2VsZjsKLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAg
ICAgIFBvbHltb3JwaGljR2V0QnlJZExpc3QqIGxpc3Q7Ci0gICAgICAgIH0gZ2V0QnlJZExpc3Q7
Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVy
ZT4gcHJldmlvdXNTdHJ1Y3R1cmU7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVj
dHVyZT4gc3RydWN0dXJlOwotICAgICAgICAgICAgdm9pZCogcmF3Q29uZGl0aW9uU2V0OwotICAg
ICAgICB9IHB1dEJ5SWRUcmFuc2l0aW9uOwotICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAg
V3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IGJhc2VPYmplY3RTdHJ1Y3R1cmU7Ci0gICAgICAg
IH0gcHV0QnlJZFJlcGxhY2U7Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBQb2x5bW9y
cGhpY1B1dEJ5SWRMaXN0KiBsaXN0OwotICAgICAgICB9IHB1dEJ5SWRMaXN0OwotICAgICAgICBz
dHJ1Y3QgewotICAgICAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBzdHJ1
Y3R1cmVMaXN0OwotICAgICAgICAgICAgaW50IGxpc3RTaXplOwotICAgICAgICB9IGluTGlzdDsK
KyAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKKyAgICAgICAgfSBieUlkU2VsZjsK
KyAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3MqIHN0dWI7CiAgICAgfSB1OwogCi0gICAgUmVmUHRy
PEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKICAgICBDb2RlTG9jYXRpb25DYWxsIGNhbGxS
ZXR1cm5Mb2NhdGlvbjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2F0Y2hwb2ludHNPblN0cnVjdHVy
ZVN0dWJJbmZvPiB3YXRjaHBvaW50czsKIH07CiAKIGlubGluZSBDb2RlT3JpZ2luIGdldFN0cnVj
dHVyZVN0dWJJbmZvQ29kZU9yaWdpbihTdHJ1Y3R1cmVTdHViSW5mbyYgc3RydWN0dXJlU3R1Yklu
Zm8pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcAkocmV2aXNpb24gMTg5NTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzNSw3ICs5MzUsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSW4oTm9kZSogbm9kCiAgICAgCiAgICAgaWYgKEpT
U3RyaW5nKiBzdHJpbmcgPSBub2RlLT5jaGlsZDEoKS0+ZHluYW1pY0Nhc3RDb25zdGFudDxKU1N0
cmluZyo+KCkpIHsKICAgICAgICAgaWYgKHN0cmluZy0+dHJ5R2V0VmFsdWVJbXBsKCkgJiYgc3Ry
aW5nLT50cnlHZXRWYWx1ZUltcGwoKS0+aXNBdG9taWMoKSkgewotICAgICAgICAgICAgU3RydWN0
dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZFN0dWJJbmZvKCk7
CisgICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX2ppdC5jb2RlQmxv
Y2soKS0+YWRkU3R1YkluZm8oQWNjZXNzVHlwZTo6SW4pOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
Q29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExD
b21waWxlLmNwcAkocmV2aXNpb24gMTg5NTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTM4LDcgKzUzOCw3IEBAIHN0YXRp
YyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAgICAgICAgICAgICBSZWdp
c3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdXNlZFJlZ2lzdGVyc0ZvcihyZWNvcmQpOwogICAgICAg
ICAgICAgICAgIEdQUlJlZyByZXN1bHQgPSByZWNvcmQubG9jYXRpb25zWzBdLmRpcmVjdEdQUigp
OwogICAgICAgICAgICAgICAgIEdQUlJlZyBvYmogPSByZWNvcmQubG9jYXRpb25zWzFdLmRpcmVj
dEdQUigpOwotICAgICAgICAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IGNv
ZGVCbG9jay0+YWRkU3R1YkluZm8oKTsgCisgICAgICAgICAgICAgICAgU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvID0gY29kZUJsb2NrLT5hZGRTdHViSW5mbyhBY2Nlc3NUeXBlOjpJbik7IAog
ICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5jb2RlT3JpZ2luID0gY29kZU9yaWdpbjsKICAgICAg
ICAgICAgICAgICBzdHViSW5mby0+Y2FsbFNpdGVJbmRleCA9IGNoZWNrSW4uY2FsbFNpdGVJbmRl
eCgpOwogICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5iYXNlR1BSID0gc3RhdGljX2Nh
c3Q8aW50OF90PihvYmopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9BY2Nlc3Nv
ckNhbGxKSVRTdHViUm91dGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9BY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5jcHAJKHJldmlzaW9uIDE4OTUxNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmgiCi0KLSNpZiBFTkFCTEUoSklUKQot
Ci0jaW5jbHVkZSAiQ2FsbExpbmtJbmZvLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1BY2Nlc3Nv
ckNhbGxKSVRTdHViUm91dGluZTo6QWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUoCi0gICAgY29u
c3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBjb2RlLCBWTSYgdm0sIHN0ZDo6dW5pcXVlX3B0cjxD
YWxsTGlua0luZm8+IGluZm8pCi0gICAgOiBHQ0F3YXJlSklUU3R1YlJvdXRpbmUoY29kZSwgdm0p
Ci0gICAgLCBtX2NhbGxMaW5rSW5mbyhXVEY6Om1vdmUoaW5mbykpCi17Ci19Ci0KLUFjY2Vzc29y
Q2FsbEpJVFN0dWJSb3V0aW5lOjp+QWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUoKQotewotfQot
Ci1ib29sIEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lOjp2aXNpdFdlYWsoVk0mIHZtKQotewot
ICAgIG1fY2FsbExpbmtJbmZvLT52aXNpdFdlYWsodm0pOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0FjY2Vzc29yQ2FsbEpJVFN0dWJS
b3V0aW5lLmgJKHJldmlzaW9uIDE4OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1NyArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNpZm5kZWYgQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmVfaAotI2RlZmluZSBBY2Nlc3NvckNh
bGxKSVRTdHViUm91dGluZV9oCi0KLSNpZiBFTkFCTEUoSklUKQotCi0jaW5jbHVkZSAiR0NBd2Fy
ZUpJVFN0dWJSb3V0aW5lLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBDYWxsTGlua0lu
Zm87Ci0KLS8vIEpJVCBzdHViIHJvdXRpbmUgZm9yIHVzZSBieSBKYXZhU2NyaXB0IGFjY2Vzc29y
cy4gVGhlc2Ugd2lsbCBiZSBtYWtpbmcgYSBKUwotLy8gY2FsbCB0aGF0IHJlcXVpcmVzIGlubGlu
ZSBjYWNoaW5nLiAKLQotY2xhc3MgQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUgOiBwdWJsaWMg
R0NBd2FyZUpJVFN0dWJSb3V0aW5lIHsKLXB1YmxpYzoKLSAgICBBY2Nlc3NvckNhbGxKSVRTdHVi
Um91dGluZSgKLSAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiwgVk0mLCBzdGQ6
OnVuaXF1ZV9wdHI8Q2FsbExpbmtJbmZvPik7Ci0gICAgCi0gICAgdmlydHVhbCB+QWNjZXNzb3JD
YWxsSklUU3R1YlJvdXRpbmUoKTsKLSAgICAKLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRXZWFrKFZN
Jikgb3ZlcnJpZGU7Ci0gICAgCi0gICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rSW5mbz4gbV9j
YWxsTGlua0luZm87Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEVOQUJM
RShKSVQpCi0KLSNlbmRpZiAvLyBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZV9oCi0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24g
MTg5NTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAko
d29ya2luZyBjb3B5KQpAQCAtNTYzLDcgKzU2Myw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IGJyYW5jaDMyKEVxdWFsLCByZWdzLnRhZ0dQUigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1w
dHlWYWx1ZVRhZykpOwogI2VuZGlmCiAgICAgfQotICAgIAorCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KICAgICBKdW1wIGJyYW5jaFN0cnVjdHVyZShSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRp
dGlvbiwgVCBsZWZ0SGFuZFNpZGUsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKQEAgLTgz
Miw2ICs4MzIsMTUgQEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogCisgICAgdm9pZCBib3hCb29s
ZWFuUGF5bG9hZChib29sIHZhbHVlLCBHUFJSZWcgcGF5bG9hZEdQUikKKyAgICB7CisjaWYgVVNF
KEpTVkFMVUU2NCkKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSArIHZhbHVl
KSwgcGF5bG9hZEdQUik7CisjZWxzZQorICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMih2YWx1ZSks
IHBheWxvYWRHUFIpOworI2VuZGlmCisgICAgfQorCiAgICAgdm9pZCBib3hCb29sZWFuKEdQUlJl
ZyBib29sR1BSLCBKU1ZhbHVlUmVncyBib3hlZFJlZ3MpCiAgICAgewogICAgICAgICBib3hCb29s
ZWFuUGF5bG9hZChib29sR1BSLCBib3hlZFJlZ3MucGF5bG9hZEdQUigpKTsKQEAgLTgzOSw2ICs4
NDgsMTcgQEAgcHVibGljOgogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29s
ZWFuVGFnKSwgYm94ZWRSZWdzLnRhZ0dQUigpKTsKICNlbmRpZgogICAgIH0KKworICAgIHZvaWQg
Ym94SW50MzIoR1BSUmVnIGludEdQUiwgSlNWYWx1ZVJlZ3MgYm94ZWRSZWdzKQorICAgIHsKKyNp
ZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBtb3ZlKGludEdQUiwgYm94ZWRSZWdzLmdwcigpKTsK
KyAgICAgICAgb3I2NChUcnVzdGVkSW1tNjQoVGFnVHlwZU51bWJlciksIGJveGVkUmVncy5ncHIo
KSk7CisjZWxzZQorICAgICAgICBtb3ZlKGludEdQUiwgYm94ZWRSZWdzLnBheWxvYWRHUFIoKSk7
CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgYm94ZWRSZWdz
LnRhZ0dQUigpKTsKKyNlbmRpZgorICAgIH0KICAgICAKICAgICB2b2lkIGNhbGxFeGNlcHRpb25G
dXp6KCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDE4OTUx
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAg
LTY2LDcgKzY2LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBzdHJ1Y3QgSW5zdHJ1Y3Rpb247
CiAgICAgc3RydWN0IE9wZXJhbmRUeXBlczsKLSAgICBzdHJ1Y3QgUG9seW1vcnBoaWNBY2Nlc3NT
dHJ1Y3R1cmVMaXN0OwogICAgIHN0cnVjdCBTaW1wbGVKdW1wVGFibGU7CiAgICAgc3RydWN0IFN0
cmluZ0p1bXBUYWJsZTsKICAgICBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm87CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9y
LmNwcAkocmV2aXNpb24gMTg5NTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJ
bmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDIyICszNiwyNCBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogc3RhdGljIFN0cnVjdHVyZVN0dWJJbmZvKiBnYXJiYWdlU3R1Yklu
Zm8oKQogewotICAgIHN0YXRpYyBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBuZXcgU3Ry
dWN0dXJlU3R1YkluZm8oKTsKKyAgICBzdGF0aWMgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
ID0gbmV3IFN0cnVjdHVyZVN0dWJJbmZvKEFjY2Vzc1R5cGU6OkdldCk7CiAgICAgcmV0dXJuIHN0
dWJJbmZvOwogfQogCi1KSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6SklUSW5saW5lQ2FjaGVHZW5l
cmF0b3IoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNp
dGVJbmRleCBjYWxsU2l0ZSkKK0pJVElubGluZUNhY2hlR2VuZXJhdG9yOjpKSVRJbmxpbmVDYWNo
ZUdlbmVyYXRvcigKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUpCiAgICAg
OiBtX2NvZGVCbG9jayhjb2RlQmxvY2spCiB7Ci0gICAgbV9zdHViSW5mbyA9IG1fY29kZUJsb2Nr
ID8gbV9jb2RlQmxvY2stPmFkZFN0dWJJbmZvKCkgOiBnYXJiYWdlU3R1YkluZm8oKTsKKyAgICBt
X3N0dWJJbmZvID0gbV9jb2RlQmxvY2sgPyBtX2NvZGVCbG9jay0+YWRkU3R1YkluZm8oYWNjZXNz
VHlwZSkgOiBnYXJiYWdlU3R1YkluZm8oKTsKICAgICBtX3N0dWJJbmZvLT5jb2RlT3JpZ2luID0g
Y29kZU9yaWdpbjsKICAgICBtX3N0dWJJbmZvLT5jYWxsU2l0ZUluZGV4ID0gY2FsbFNpdGU7CiB9
CiAKIEpJVEJ5SWRHZW5lcmF0b3I6OkpJVEJ5SWRHZW5lcmF0b3IoCi0gICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwg
Y29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsCi0gICAgSlNWYWx1ZVJlZ3MgYmFzZSwg
SlNWYWx1ZVJlZ3MgdmFsdWUsIFNwaWxsUmVnaXN0ZXJzTW9kZSBzcGlsbE1vZGUpCi0gICAgOiBK
SVRJbmxpbmVDYWNoZUdlbmVyYXRvcihjb2RlQmxvY2ssIGNvZGVPcmlnaW4sIGNhbGxTaXRlKQor
ICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRl
SW5kZXggY2FsbFNpdGUsIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSwKKyAgICBjb25zdCBSZWdpc3Rl
clNldCYgdXNlZFJlZ2lzdGVycywgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUs
CisgICAgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSkKKyAgICA6IEpJVElubGluZUNhY2hl
R2VuZXJhdG9yKGNvZGVCbG9jaywgY29kZU9yaWdpbiwgY2FsbFNpdGUsIGFjY2Vzc1R5cGUpCiAg
ICAgLCBtX2Jhc2UoYmFzZSkKICAgICAsIG1fdmFsdWUodmFsdWUpCiB7CkBAIC0xMTQsNyArMTE2
LDggQEAgdm9pZCBKSVRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoQwogSklUR2V0QnlJ
ZEdlbmVyYXRvcjo6SklUR2V0QnlJZEdlbmVyYXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBjb25zdCBS
ZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywKICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVl
UmVncyB2YWx1ZSwgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSkKLSAgICA6IEpJVEJ5SWRH
ZW5lcmF0b3IoY29kZUJsb2NrLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgdXNlZFJlZ2lzdGVycywg
YmFzZSwgdmFsdWUsIHNwaWxsTW9kZSkKKyAgICA6IEpJVEJ5SWRHZW5lcmF0b3IoCisgICAgICAg
IGNvZGVCbG9jaywgY29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OkdldCwgdXNlZFJl
Z2lzdGVycywgYmFzZSwgdmFsdWUsIHNwaWxsTW9kZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChi
YXNlLnBheWxvYWRHUFIoKSAhPSB2YWx1ZS50YWdHUFIoKSk7CiB9CkBAIC0xNDAsNyArMTQzLDgg
QEAgSklUUHV0QnlJZEdlbmVyYXRvcjo6SklUUHV0QnlJZEdlbmVyYXRvcgogICAgIENvZGVCbG9j
ayogY29kZUJsb2NrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNp
dGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLAogICAgIEpTVmFsdWVSZWdzIGJh
c2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc2NyYXRjaCwgU3BpbGxSZWdpc3RlcnNNb2Rl
IHNwaWxsTW9kZSwKICAgICBFQ01BTW9kZSBlY21hTW9kZSwgUHV0S2luZCBwdXRLaW5kKQotICAg
IDogSklUQnlJZEdlbmVyYXRvcihjb2RlQmxvY2ssIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCB1c2Vk
UmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSwgc3BpbGxNb2RlKQorICAgIDogSklUQnlJZEdlbmVyYXRv
cigKKyAgICAgICAgY29kZUJsb2NrLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6
UHV0LCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSwgc3BpbGxNb2RlKQogICAgICwgbV9zY3Jh
dGNoKHNjcmF0Y2gpCiAgICAgLCBtX2VjbWFNb2RlKGVjbWFNb2RlKQogICAgICwgbV9wdXRLaW5k
KHB1dEtpbmQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hl
R2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJ
bmxpbmVDYWNoZUdlbmVyYXRvci5oCShyZXZpc2lvbiAxODk1MTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMz
LDYgKzMzLDcgQEAKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiUHV0S2luZC5o
IgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCisjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8u
aCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTQxLDcgKzQyLDcgQEAgY2xhc3MgQ29kZUJsb2Nr
OwogY2xhc3MgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IgewogcHJvdGVjdGVkOgogICAgIEpJVElu
bGluZUNhY2hlR2VuZXJhdG9yKCkgeyB9Ci0gICAgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoQ29k
ZUJsb2NrKiwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCk7CisgICAgSklUSW5saW5lQ2FjaGVH
ZW5lcmF0b3IoQ29kZUJsb2NrKiwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgQWNjZXNzVHlw
ZSk7CiAgICAgCiBwdWJsaWM6CiAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvKCkgY29u
c3QgeyByZXR1cm4gbV9zdHViSW5mbzsgfQpAQCAtNTYsOCArNTcsOCBAQCBwcm90ZWN0ZWQ6CiAg
ICAgSklUQnlJZEdlbmVyYXRvcigpIHsgfQogCiAgICAgSklUQnlJZEdlbmVyYXRvcigKLSAgICAg
ICAgQ29kZUJsb2NrKiwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVnaXN0ZXJT
ZXQmLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwKLSAgICAgICAgU3BpbGxS
ZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSk7CisgICAgICAgIENvZGVCbG9jayosIENvZGVPcmlnaW4s
IENhbGxTaXRlSW5kZXgsIEFjY2Vzc1R5cGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiwgSlNWYWx1ZVJl
Z3MgYmFzZSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWUsIFNwaWxsUmVnaXN0ZXJzTW9kZSBz
cGlsbE1vZGUpOwogICAgIAogcHVibGljOgogICAgIHZvaWQgcmVwb3J0U2xvd1BhdGhDYWxsKE1h
Y3JvQXNzZW1ibGVyOjpMYWJlbCBzbG93UGF0aEJlZ2luLCBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBj
YWxsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3Bw
CShyZXZpc2lvbiAxODk1MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMsMjQgKzE2Myw2IEBAIEVuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGJhc2VWYWx1ZS5nZXQoZXhlYywgaWRlbnQsIHNsb3QpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0KEV4ZWNTdGF0ZSogZXhlYywg
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotCi0gICAgSWRlbnRpZmllciBpZGVu
dCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHVpZCk7Ci0gICAgQWNjZXNzVHlwZSBhY2Nlc3NU
eXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpOwotCi0g
ICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoYmFzZSk7Ci0gICAgUHJvcGVy
dHlTbG90IHNsb3QoYmFzZVZhbHVlKTsKLSAgICBib29sIGhhc1Jlc3VsdCA9IGJhc2VWYWx1ZS5n
ZXRQcm9wZXJ0eVNsb3QoZXhlYywgaWRlbnQsIHNsb3QpOwotICAgIAotICAgIGlmIChhY2Nlc3NU
eXBlID09IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSkKLSAg
ICAgICAgYnVpbGRHZXRCeUlETGlzdChleGVjLCBiYXNlVmFsdWUsIGlkZW50LCBzbG90LCAqc3R1
YkluZm8pOwotCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShoYXNSZXN1bHQ/IHNsb3QuZ2V0
VmFsdWUoZXhlYywgaWRlbnQpIDoganNVbmRlZmluZWQoKSk7Ci19Ci0KIEVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywg
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwpAQCAtMTk3LDcg
KzE3OSw2IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKICAgICAg
ICAgc3R1YkluZm8tPnNlZW4gPSB0cnVlOwogICAgIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoaGFzUmVzdWx0PyBzbG90LmdldFZhbHVlKGV4ZWMsIGlkZW50KSA6IGpzVW5kZWZpbmVkKCkp
OwotCiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW5PcHRpbWl6
ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgSlNDZWxsKiBi
YXNlLCBVbmlxdWVkU3RyaW5nSW1wbCoga2V5KQpAQCAtMzk0LDkwICszNzUsNiBAQCB2b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjCiAgICAgICAgIHN0dWJJbmZvLT5zZWVu
ID0gdHJ1ZTsKIH0KIAotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RC
dWlsZExpc3QoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIFVu
aXF1ZWRTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCi0gICAgSWRlbnRp
ZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHVpZCk7Ci0gICAgQWNjZXNzVHlw
ZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5
cGUpOwotCi0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OwotICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKTsK
LSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIHRydWUsIGV4ZWMtPmNvZGVCbG9j
aygpLT5wdXRCeUlkQ29udGV4dCgpKTsKLSAgICAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IGJhc2VWYWx1ZS5pc0NlbGwoKSA/IGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCp2bSkg
OiBudWxscHRyOyAKLSAgICBiYXNlVmFsdWUucHV0KGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7
Ci0KLSAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5m
by0+YWNjZXNzVHlwZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJ1aWxkUHV0QnlJZExpc3Qo
ZXhlYywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIGlkZW50LCBzbG90LCAqc3R1YkluZm8sIE5vdERp
cmVjdCk7Ci19Ci0KLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0
QnVpbGRMaXN0KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBV
bmlxdWVkU3RyaW5nSW1wbCogdWlkKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIAotICAgIElkZW50
aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCB1aWQpOwotICAgIEFjY2Vzc1R5
cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NU
eXBlKTsKLQotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSk7
Ci0gICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlLCBmYWxzZSwgZXhlYy0+Y29kZUJs
b2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwotCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBi
YXNlVmFsdWUuaXNDZWxsKCkgPyBiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgqdm0pIDog
bnVsbHB0cjsKLSAgICBiYXNlVmFsdWUucHV0KGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7Ci0g
ICAgCi0gICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYnVpbGRQdXRCeUlk
TGlzdChleGVjLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgaWRlbnQsIHNsb3QsICpzdHViSW5mbywg
Tm90RGlyZWN0KTsKLX0KLQotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJl
Y3RTdHJpY3RCdWlsZExpc3QoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8sIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZEJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZt
KCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCi0g
ICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHVpZCk7Ci0gICAg
QWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8t
PmFjY2Vzc1R5cGUpOwotICAgIAotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKLSAgICBKU09iamVjdCogYmFzZU9iamVjdCA9IGFzT2JqZWN0KEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkQmFzZSkpOwotICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VP
YmplY3QsIHRydWUsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKLQotICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZU9iamVjdC0+c3RydWN0dXJlKCp2bSk7ICAgIAot
ICAgIGJhc2VPYmplY3QtPnB1dERpcmVjdCgqdm0sIGlkZW50LCB2YWx1ZSwgc2xvdCk7Ci0gICAg
Ci0gICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8t
PmFjY2Vzc1R5cGUpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYnVpbGRQdXRCeUlkTGlz
dChleGVjLCBiYXNlT2JqZWN0LCBzdHJ1Y3R1cmUsIGlkZW50LCBzbG90LCAqc3R1YkluZm8sIERp
cmVjdCk7Ci19Ci0KLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9u
U3RyaWN0QnVpbGRMaXN0KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRC
YXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIAotICAg
IElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCB1aWQpOwotICAgIEFj
Y2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5h
Y2Nlc3NUeXBlKTsKLQotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKTsKLSAgICBKU09iamVjdCogYmFzZU9iamVjdCA9IGFzT2JqZWN0KEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkQmFzZSkpOwotICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VPYmplY3Qs
IGZhbHNlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7Ci0KLSAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VPYmplY3QtPnN0cnVjdHVyZSgqdm0pOyAgICAKLSAgICBi
YXNlT2JqZWN0LT5wdXREaXJlY3QoKnZtLCBpZGVudCwgdmFsdWUsIHNsb3QpOwotCi0gICAgaWYg
KGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5
cGUpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYnVpbGRQdXRCeUlkTGlzdChleGVjLCBi
YXNlT2JqZWN0LCBzdHJ1Y3R1cmUsIGlkZW50LCBzbG90LCAqc3R1YkluZm8sIERpcmVjdCk7Ci19
Ci0KIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlU3RvcmFnZUFuZEZpbmlz
aFB1dChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBh
dGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2gu
Y3BwCShyZXZpc2lvbiAxODk1MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0
Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpZiBFTkFCTEUoSklU
KQogCi0jaW5jbHVkZSAiQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaCIKICNpbmNsdWRlICJC
aW5hcnlTd2l0Y2guaCIKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKICNpbmNsdWRlICJERkdP
cGVyYXRpb25zLmgiCkBAIC00MCw4ICszOSw3IEBACiAjaW5jbHVkZSAiSklUSW5saW5lcy5oIgog
I2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVk
ZSAiUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oIgotI2luY2x1ZGUgIlBvbHltb3JwaGljUHV0QnlJ
ZExpc3QuaCIKKyNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgogI2luY2x1ZGUgIlJlZ0V4
cE1hdGNoZXNBcnJheS5oIgogI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgog
I2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCkBAIC05NCwxMyArOTIsMTAgQEAgc3RhdGljIHZv
aWQgcmVwYXRjaENhbGwoQ29kZUJsb2NrKiBjb2RlQgogfQogCiBzdGF0aWMgdm9pZCByZXBhdGNo
QnlJZFNlbGZBY2Nlc3MoCi0gICAgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKLSAgICBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgY29uc3QgRnVu
Y3Rpb25QdHIgJnNsb3dQYXRoRnVuY3Rpb24sCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCisgICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0LCBjb25zdCBGdW5jdGlvblB0ciAmc2xvd1BhdGhGdW5jdGlvbiwK
ICAgICBib29sIGNvbXBhY3QpCiB7Ci0gICAgaWYgKHN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3Bl
cnR5V2F0Y2hwb2ludCgpKQotICAgICAgICB2bS5yZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQ
cm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7
Ci0gICAgCiAgICAgLy8gT25seSBvcHRpbWl6ZSBvbmNlIQogICAgIHJlcGF0Y2hDYWxsKGNvZGVC
bG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBzbG93UGF0aEZ1bmN0aW9uKTsKIApA
QCAtMTI5LDMzICsxMjQsNDQgQEAgc3RhdGljIHZvaWQgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKAog
I2VuZGlmCiB9CiAKLXN0YXRpYyB2b2lkIGNoZWNrT2JqZWN0UHJvcGVydHlDb25kaXRpb24oCi0g
ICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywKLSAgICBDQ2FsbEhlbHBlcnMm
IGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEdQUlJlZyBzY3Jh
dGNoR1BSKQotewotICAgIGlmIChjb25kaXRpb24uaXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVBy
b3BlcnR5V2F0Y2hwb2ludCgpKSB7Ci0gICAgICAgIGNvbmRpdGlvbi5vYmplY3QoKS0+c3RydWN0
dXJlKCktPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KAotICAgICAgICAgICAgc3R1YkluZm8uYWRk
V2F0Y2hwb2ludChjb2RlQmxvY2ssIGNvbmRpdGlvbikpOwotICAgICAgICByZXR1cm47CitzdGF0
aWMgdm9pZCByZXNldEdldEJ5SURDaGVja0FuZExvYWQoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvKQoreworICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyIHN0cnVjdHVyZUxhYmVsID0gc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoLShpbnRwdHJfdClz
dHViSW5mby5wYXRjaC5kZWx0YUNoZWNrSW1tVG9DYWxsKTsKKyAgICBpZiAoTWFjcm9Bc3NlbWJs
ZXI6OmNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goKSkgeworICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2gz
MldpdGhQYXRjaCgKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpzdGFydE9mUGF0Y2hhYmxl
QnJhbmNoMzJXaXRoUGF0Y2hPbkFkZHJlc3Moc3RydWN0dXJlTGFiZWwpLAorICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoCisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8TWFj
cm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+KHN0dWJJbmZvLnBhdGNoLmJhc2VHUFIpLAorICAgICAg
ICAgICAgICAgIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCisgICAgICAgICAgICBzdGF0
aWNfY2FzdDxpbnQzMl90Pih1bnVzZWRQb2ludGVyKSk7CiAgICAgfQorICAgIE1hY3JvQXNzZW1i
bGVyOjpyZXBhdGNoSW50MzIoc3RydWN0dXJlTGFiZWwsIHN0YXRpY19jYXN0PGludDMyX3Q+KHVu
dXNlZFBvaW50ZXIpKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoQ29tcGFjdChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29tcGFj
dEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCAwKTsKKyNl
bHNlCisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDb21wYWN0KHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFD
YWxsVG9UYWdMb2FkT3JTdG9yZSksIDApOworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ29t
cGFjdChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0
KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKSwgMCk7CisjZW5k
aWYKK30KIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY29uZGl0aW9uLm9iamVjdCgpLT5z
dHJ1Y3R1cmUoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChjb25kaXRpb24uc3RydWN0dXJlRW5zdXJl
c1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoc3RydWN0dXJlKSk7Ci0g
ICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoY29uZGl0aW9uLm9iamVj
dCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgZmFpbHVyZUNhc2VzLmFwcGVuZCgKLSAgICAgICAgaml0
LmJyYW5jaFN0cnVjdHVyZSgKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwK
LSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSksIHN0cnVjdHVyZSkpOwotfQotCi1zdGF0aWMgdm9pZCBjaGVj
a09iamVjdFByb3BlcnR5Q29uZGl0aW9ucygKLSAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCYgc2V0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvLAotICAgIENDYWxsSGVscGVycyYgaml0LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qm
IGZhaWx1cmVDYXNlcywgR1BSUmVnIHNjcmF0Y2hHUFIpCi17Ci0gICAgZm9yIChjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogc2V0KSB7Ci0gICAgICAgIGNoZWNrT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24oCi0gICAgICAgICAgICBjb25kaXRpb24sIGNvZGVCbG9jaywg
c3R1YkluZm8sIGppdCwgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSKTsKK3N0YXRpYyB2b2lkIHJl
c2V0UHV0QnlJRENoZWNrQW5kTG9hZChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7Cisg
ICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzIgc3RydWN0dXJlTGFiZWwgPSBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldCgtKGludHB0cl90KXN0dWJJbmZvLnBh
dGNoLmRlbHRhQ2hlY2tJbW1Ub0NhbGwpOworICAgIGlmIChNYWNyb0Fzc2VtYmxlcjo6Y2FuSnVt
cFJlcGxhY2VQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaCgpKSB7CisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNo
KAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0YXJ0T2ZQYXRjaGFibGVCcmFuY2gzMldp
dGhQYXRjaE9uQWRkcmVzcyhzdHJ1Y3R1cmVMYWJlbCksCisgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxl
cjo6UmVnaXN0ZXJJRD4oc3R1YkluZm8ucGF0Y2guYmFzZUdQUiksCisgICAgICAgICAgICAgICAg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGlu
dDMyX3Q+KHVudXNlZFBvaW50ZXIpKTsKICAgICB9CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0
Y2hJbnQzMihzdHJ1Y3R1cmVMYWJlbCwgc3RhdGljX2Nhc3Q8aW50MzJfdD4odW51c2VkUG9pbnRl
cikpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hJbnQz
MihzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5m
by5wYXRjaC5kZWx0YUNhbGxUb0xvYWRPclN0b3JlKSwgMCk7CisjZWxzZQorICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoSW50MzIoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJl
bDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSksIDAp
OworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIoc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9QYXls
b2FkTG9hZE9yU3RvcmUpLCAwKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCByZXBsYWNlV2l0
aEp1bXAoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25zdCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgdGFyZ2V0KQpAQCAtMTY4LDYgKzE3NCw4IEBAIHN0YXRpYyB2b2lkIHJlcGxhY2VXaXRo
SnVtcChTdHJ1Y3R1cmVTdHUKICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHRhcmdldCkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgcmVzZXRHZXRCeUlEQ2hlY2tBbmRMb2Fk
KHN0dWJJbmZvKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoCiAgICAg
ICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoCkBAIC0xNzUsNDI3
ICsxODMsNiBAQCBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoU3RydWN0dXJlU3R1CiAgICAg
ICAgIENvZGVMb2NhdGlvbkxhYmVsKHRhcmdldCkpOwogfQogCi1zdGF0aWMgdm9pZCBlbWl0UmVz
dG9yZVNjcmF0Y2goTWFjcm9Bc3NlbWJsZXImIHN0dWJKaXQsIGJvb2wgbmVlZFRvUmVzdG9yZVNj
cmF0Y2gsIEdQUlJlZyBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCYgc3VjY2Vzcywg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAmIGZhaWwsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWls
dXJlQ2FzZXMpCi17Ci0gICAgaWYgKG5lZWRUb1Jlc3RvcmVTY3JhdGNoKSB7Ci0gICAgICAgIHN0
dWJKaXQucG9wVG9SZXN0b3JlKHNjcmF0Y2hHUFIpOwotICAgICAgICAKLSAgICAgICAgc3VjY2Vz
cyA9IHN0dWJKaXQuanVtcCgpOwotICAgICAgICAKLSAgICAgICAgLy8gbGluayBmYWlsdXJlIGNh
c2VzIGhlcmUsIHNvIHdlIGNhbiBwb3Agc2NyYXRjaEdQUiwgYW5kIHRoZW4ganVtcCBiYWNrLgot
ICAgICAgICBmYWlsdXJlQ2FzZXMubGluaygmc3R1YkppdCk7Ci0gICAgICAgIAotICAgICAgICBz
dHViSml0LnBvcFRvUmVzdG9yZShzY3JhdGNoR1BSKTsKLSAgICAgICAgCi0gICAgICAgIGZhaWwg
PSBzdHViSml0Lmp1bXAoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBzdWNj
ZXNzID0gc3R1YkppdC5qdW1wKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGxpbmtSZXN0b3JlU2NyYXRj
aChMaW5rQnVmZmVyJiBwYXRjaEJ1ZmZlciwgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzcywgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbCwgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlcywgQ29kZUxvY2F0aW9uTGFiZWwgc3Vj
Y2Vzc0xhYmVsLCBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZUJlZ2luKQotewotICAgIHBhdGNo
QnVmZmVyLmxpbmsoc3VjY2Vzcywgc3VjY2Vzc0xhYmVsKTsKLSAgICAgICAgCi0gICAgaWYgKG5l
ZWRUb1Jlc3RvcmVTY3JhdGNoKSB7Ci0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbCwgc2xv
d0Nhc2VCZWdpbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgLy8gbGluayBm
YWlsdXJlIGNhc2VzIGRpcmVjdGx5IGJhY2sgdG8gbm9ybWFsIHBhdGgKLSAgICBwYXRjaEJ1ZmZl
ci5saW5rKGZhaWx1cmVDYXNlcywgc2xvd0Nhc2VCZWdpbik7Ci19Ci0KLXN0YXRpYyB2b2lkIGxp
bmtSZXN0b3JlU2NyYXRjaChMaW5rQnVmZmVyJiBwYXRjaEJ1ZmZlciwgYm9vbCBuZWVkVG9SZXN0
b3JlU2NyYXRjaCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBzdWNjZXNzLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsLCBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgZmFpbHVyZUNhc2VzKQotewotICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1
ZmZlciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcywg
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGVsdGFDYWxsVG9Eb25lKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZz
ZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwotfQotCi1lbnVtIEJ5SWRT
dHViS2luZCB7Ci0gICAgR2V0VmFsdWUsCi0gICAgR2V0VW5kZWZpbmVkLAotICAgIENhbGxHZXR0
ZXIsCi0gICAgQ2FsbEN1c3RvbUdldHRlciwKLSAgICBDYWxsU2V0dGVyLAotICAgIENhbGxDdXN0
b21TZXR0ZXIKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiB0b1N0cmluZyhCeUlkU3R1YktpbmQg
a2luZCkKLXsKLSAgICBzd2l0Y2ggKGtpbmQpIHsKLSAgICBjYXNlIEdldFZhbHVlOgotICAgICAg
ICByZXR1cm4gIkdldFZhbHVlIjsKLSAgICBjYXNlIEdldFVuZGVmaW5lZDoKLSAgICAgICAgcmV0
dXJuICJHZXRVbmRlZmluZWQiOwotICAgIGNhc2UgQ2FsbEdldHRlcjoKLSAgICAgICAgcmV0dXJu
ICJDYWxsR2V0dGVyIjsKLSAgICBjYXNlIENhbGxDdXN0b21HZXR0ZXI6Ci0gICAgICAgIHJldHVy
biAiQ2FsbEN1c3RvbUdldHRlciI7Ci0gICAgY2FzZSBDYWxsU2V0dGVyOgotICAgICAgICByZXR1
cm4gIkNhbGxTZXR0ZXIiOwotICAgIGNhc2UgQ2FsbEN1c3RvbVNldHRlcjoKLSAgICAgICAgcmV0
dXJuICJDYWxsQ3VzdG9tU2V0dGVyIjsKLSAgICBkZWZhdWx0OgotICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci19Ci0K
LXN0YXRpYyBCeUlkU3R1YktpbmQga2luZEZvcihjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCi17
Ci0gICAgaWYgKHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpKQotICAgICAgICByZXR1cm4gR2V0VmFs
dWU7Ci0gICAgaWYgKHNsb3QuaXNVbnNldCgpKQotICAgICAgICByZXR1cm4gR2V0VW5kZWZpbmVk
OwotICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkpCi0gICAgICAgIHJldHVybiBDYWxs
Q3VzdG9tR2V0dGVyOwotICAgIFJFTEVBU0VfQVNTRVJUKHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIo
KSk7Ci0gICAgcmV0dXJuIENhbGxHZXR0ZXI7Ci19Ci0KLXN0YXRpYyBGdW5jdGlvblB0ciBjdXN0
b21Gb3IoY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQotewotICAgIGlmICghc2xvdC5pc0NhY2hl
YWJsZUN1c3RvbSgpKQotICAgICAgICByZXR1cm4gRnVuY3Rpb25QdHIoKTsKLSAgICByZXR1cm4g
RnVuY3Rpb25QdHIoc2xvdC5jdXN0b21HZXR0ZXIoKSk7Ci19Ci0KLXN0YXRpYyBCeUlkU3R1Yktp
bmQga2luZEZvcihjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0gICAgUkVMRUFTRV9B
U1NFUlQoIXNsb3QuaXNDYWNoZWFibGVQdXQoKSk7Ci0gICAgaWYgKHNsb3QuaXNDYWNoZWFibGVT
ZXR0ZXIoKSkKLSAgICAgICAgcmV0dXJuIENhbGxTZXR0ZXI7Ci0gICAgUkVMRUFTRV9BU1NFUlQo
c2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpKTsKLSAgICByZXR1cm4gQ2FsbEN1c3RvbVNldHRlcjsK
LX0KLQotc3RhdGljIEZ1bmN0aW9uUHRyIGN1c3RvbUZvcihjb25zdCBQdXRQcm9wZXJ0eVNsb3Qm
IHNsb3QpCi17Ci0gICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkpCi0gICAgICAgIHJl
dHVybiBGdW5jdGlvblB0cigpOwotICAgIHJldHVybiBGdW5jdGlvblB0cihzbG90LmN1c3RvbVNl
dHRlcigpKTsKLX0KLQotc3RhdGljIGJvb2wgZ2VuZXJhdGVCeUlkU3R1YigKLSAgICBFeGVjU3Rh
dGUqIGV4ZWMsIEJ5SWRTdHViS2luZCBraW5kLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsCi0gICAgRnVuY3Rpb25QdHIgY3VzdG9tLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
IGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCi0gICAgSlNP
YmplY3QqIGFsdGVybmF0ZUJhc2UsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIGJvb2wgbG9hZFRhcmdldEZyb21Qcm94eSwKLSAgICBXYXRjaHBvaW50U2V0KiB3
YXRjaHBvaW50U2V0LCBDb2RlTG9jYXRpb25MYWJlbCBzdWNjZXNzTGFiZWwsIENvZGVMb2NhdGlv
bkxhYmVsIHNsb3dDYXNlTGFiZWwsCi0gICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJv
dXRpbmUpCi17Ci0gICAgQVNTRVJUKGNvbmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRp
dHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKTsKLSAgICAKLSAgICBWTSogdm0g
PSAmZXhlYy0+dm0oKTsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4o
c3R1YkluZm8ucGF0Y2guYmFzZUdQUik7Ci0gICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzID0gSlNW
YWx1ZVJlZ3MoCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgc3RhdGljX2Nhc3Q8R1BS
UmVnPihzdHViSW5mby5wYXRjaC52YWx1ZVRhZ0dQUiksCi0jZW5kaWYKLSAgICAgICAgc3RhdGlj
X2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZUdQUikpOwotICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gVGVtcFJlZ2lzdGVyU2V0KHN0dWJJbmZvLnBhdGNoLnVzZWRSZWdpc3RlcnMpLmdl
dEZyZWVHUFIoKTsKLSAgICBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gc2NyYXRjaEdQUiA9
PSBJbnZhbGlkR1BSUmVnOwotICAgIFJFTEVBU0VfQVNTRVJUKCFuZWVkVG9SZXN0b3JlU2NyYXRj
aCB8fCAoa2luZCA9PSBHZXRWYWx1ZSB8fCBraW5kID09IEdldFVuZGVmaW5lZCkpOwotICAgIAot
ICAgIENDYWxsSGVscGVycyBzdHViSml0KCZleGVjLT52bSgpLCBleGVjLT5jb2RlQmxvY2soKSk7
Ci0gICAgaWYgKG5lZWRUb1Jlc3RvcmVTY3JhdGNoKSB7Ci0gICAgICAgIHNjcmF0Y2hHUFIgPSBB
c3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoCi0gICAgICAgICAgICBiYXNlR1BSLCB2
YWx1ZVJlZ3MudGFnR1BSKCksIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwotICAgICAgICBzdHVi
Sml0LnB1c2hUb1NhdmUoc2NyYXRjaEdQUik7Ci0gICAgICAgIG5lZWRUb1Jlc3RvcmVTY3JhdGNo
ID0gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1
cmVDYXNlczsKLQotICAgIEdQUlJlZyBiYXNlRm9yR2V0R1BSOwotICAgIGlmIChsb2FkVGFyZ2V0
RnJvbVByb3h5KSB7Ci0gICAgICAgIGJhc2VGb3JHZXRHUFIgPSB2YWx1ZVJlZ3MucGF5bG9hZEdQ
UigpOwotICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoOCgKLSAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgCi0gICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgCi0g
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKFB1cmVGb3J3YXJkaW5nUHJv
eHlUeXBlKSkpOwotCi0gICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBKU1Byb3h5Ojp0YXJnZXRPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAg
ICAgICAKLSAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFN0cnVjdHVy
ZSgKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgCi0gICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLAotICAgICAgICAgICAgc3RydWN0dXJlKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
YmFzZUZvckdldEdQUiA9IGJhc2VHUFI7Ci0KLSAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChz
dHViSml0LmJyYW5jaFN0cnVjdHVyZSgKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlRm9yR2V0R1BS
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCAKLSAgICAgICAgICAgIHN0cnVjdHVyZSkp
OwotICAgIH0KLQotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7
Ci0gICAgaWYgKHN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIHx8IGNv
bmRpdGlvblNldC5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpCi0gICAgICAgIHZtLT5y
ZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHN0dWJJbmZv
LmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7Ci0KLSAgICBpZiAod2F0Y2hwb2ludFNldCkKLSAg
ICAgICAgd2F0Y2hwb2ludFNldC0+YWRkKHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2Nr
KSk7Ci0KLSAgICBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9ucygKLSAgICAgICAgY29uZGl0
aW9uU2V0LCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHViSml0LCBmYWlsdXJlQ2FzZXMsIHNjcmF0
Y2hHUFIpOwotCi0gICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgewotICAgICAgICBTdHJ1
Y3R1cmUqIGN1cnJTdHJ1Y3R1cmU7Ci0gICAgICAgIGlmIChjb25kaXRpb25TZXQuaXNFbXB0eSgp
KQotICAgICAgICAgICAgY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgY3VyclN0cnVjdHVyZSA9IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlv
bigpLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgY3VyclN0cnVjdHVyZS0+c3RhcnRX
YXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKCp2bSwgb2Zmc2V0KTsKLSAgICB9Ci0gICAg
Ci0gICAgR1BSUmVnIGJhc2VGb3JBY2Nlc3NHUFIgPSBJbnZhbGlkR1BSUmVnOwotICAgIGlmIChr
aW5kICE9IEdldFVuZGVmaW5lZCkgewotICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc0VtcHR5
KCkpIHsKLSAgICAgICAgICAgIC8vIFdlIGNvdWxkIGhhdmUgY2xvYmJlcmVkIHNjcmF0Y2hHUFIg
ZWFybGllciwgc28gd2UgaGF2ZSB0byByZWxvYWQgZnJvbSBiYXNlR1BSIHRvIGdldCB0aGUgdGFy
Z2V0LgotICAgICAgICAgICAgaWYgKGxvYWRUYXJnZXRGcm9tUHJveHkpCi0gICAgICAgICAgICAg
ICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTUHJv
eHk6OnRhcmdldE9mZnNldCgpKSwgYmFzZUZvckdldEdQUik7Ci0gICAgICAgICAgICBzdHViSml0
Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoYWx0ZXJuYXRlQmFzZSksIHNjcmF0
Y2hHUFIpOwotICAgICAgICAgICAgYmFzZUZvckFjY2Vzc0dQUiA9IHNjcmF0Y2hHUFI7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBGb3IgcHJveHkgb2JqZWN0cywgd2UgbmVlZCB0
byBkbyBhbGwgdGhlIFN0cnVjdHVyZSBjaGVja3MgYmVmb3JlIG1vdmluZyB0aGUgYmFzZUdQUiBp
bnRvCi0gICAgICAgICAgICAvLyBiYXNlRm9yR2V0R1BSIGJlY2F1c2UgaWYgd2UgZmFpbCBhbnkg
b2YgdGhlIGNoZWNrcyB0aGVuIHdlIHdvdWxkIGhhdmUgdGhlIHdyb25nIHZhbHVlIGluIGJhc2VH
UFIKLSAgICAgICAgICAgIC8vIG9uIHRoZSBzbG93IHBhdGguCi0gICAgICAgICAgICBpZiAobG9h
ZFRhcmdldEZyb21Qcm94eSkKLSAgICAgICAgICAgICAgICBzdHViSml0Lm1vdmUoc2NyYXRjaEdQ
UiwgYmFzZUZvckdldEdQUik7Ci0gICAgICAgICAgICBiYXNlRm9yQWNjZXNzR1BSID0gYmFzZUZv
ckdldEdQUjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEdQUlJlZyBsb2FkZWRWYWx1ZUdQUiA9
IEludmFsaWRHUFJSZWc7Ci0gICAgaWYgKGtpbmQgPT0gR2V0VW5kZWZpbmVkKQotICAgICAgICBz
dHViSml0Lm1vdmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgdmFsdWVSZWdzKTsKLSAgICBl
bHNlIGlmIChraW5kICE9IENhbGxDdXN0b21HZXR0ZXIgJiYga2luZCAhPSBDYWxsQ3VzdG9tU2V0
dGVyKSB7Ci0gICAgICAgIGlmIChraW5kID09IEdldFZhbHVlKQotICAgICAgICAgICAgbG9hZGVk
VmFsdWVHUFIgPSB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBsb2FkZWRWYWx1ZUdQUiA9IHNjcmF0Y2hHUFI7Ci0gICAgICAgIAotICAgICAgICBHUFJS
ZWcgc3RvcmFnZUdQUjsKLSAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNldCkpCi0gICAg
ICAgICAgICBzdG9yYWdlR1BSID0gYmFzZUZvckFjY2Vzc0dQUjsKLSAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUZv
ckFjY2Vzc0dQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgbG9hZGVkVmFsdWVHUFIp
OwotICAgICAgICAgICAgc3RvcmFnZUdQUiA9IGxvYWRlZFZhbHVlR1BSOwotICAgICAgICB9Ci0g
ICAgICAgIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHN0dWJKaXQubG9hZDY0KE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKG9mZnNl
dCkpLCBsb2FkZWRWYWx1ZUdQUik7Ci0jZWxzZQotICAgICAgICBpZiAoa2luZCA9PSBHZXRWYWx1
ZSkKLSAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
b3JhZ2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKG9mZnNldCkgKyBUYWdPZmZzZXQpLCB2YWx1
ZVJlZ3MudGFnR1BSKCkpOwotICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShvZmZzZXQpICsgUGF5bG9h
ZE9mZnNldCksIGxvYWRlZFZhbHVlR1BSKTsKLSNlbmRpZgotICAgIH0KLQotICAgIC8vIFN0dWZm
IGZvciBjdXN0b20gZ2V0dGVycy4KLSAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBvcGVyYXRpb25D
YWxsOwotICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGhhbmRsZXJDYWxsOwotCi0gICAgLy8gU3R1
ZmYgZm9yIEpTIGdldHRlcnMuCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBhZGRy
ZXNzT2ZMaW5rRnVuY3Rpb25DaGVjazsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBmYXN0UGF0
aENhbGw7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgc2xvd1BhdGhDYWxsOwotICAgIHN0ZDo6
dW5pcXVlX3B0cjxDYWxsTGlua0luZm8+IGNhbGxMaW5rSW5mbzsKLQotICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIHN1Y2Nlc3MsIGZhaWw7Ci0gICAgaWYgKGtpbmQgIT0gR2V0VmFsdWUgJiYga2lu
ZCAhPSBHZXRVbmRlZmluZWQpIHsKLSAgICAgICAgLy8gTmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3
aGVuZXZlciB0aGlzIGNhbGwgaXMgbWFkZSBpbiB0aGUgZnV0dXJlLCB3ZSByZW1lbWJlciB0aGUK
LSAgICAgICAgLy8gcGxhY2UgdGhhdCB3ZSBtYWRlIGl0IGZyb20uIEl0IGp1c3Qgc28gaGFwcGVu
cyB0byBiZSB0aGUgcGxhY2UgdGhhdCB3ZSBhcmUgYXQKLSAgICAgICAgLy8gcmlnaHQgbm93IQot
ICAgICAgICBzdHViSml0LnN0b3JlMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzdHVi
SW5mby5jYWxsU2l0ZUluZGV4LmJpdHMoKSksCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRh
Z0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQp
KSk7Ci0KLSAgICAgICAgaWYgKGtpbmQgPT0gQ2FsbEdldHRlciB8fCBraW5kID09IENhbGxTZXR0
ZXIpIHsKLSAgICAgICAgICAgIC8vIENyZWF0ZSBhIEpTIGNhbGwgdXNpbmcgYSBKUyBjYWxsIGlu
bGluZSBjYWNoZS4gQXNzdW1lIHRoYXQ6Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8g
LSBTUCBpcyBhbGlnbmVkIGFuZCByZXByZXNlbnRzIHRoZSBleHRlbnQgb2YgdGhlIGNhbGxpbmcg
Y29tcGlsZXIncyBzdGFjayB1c2FnZS4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyAt
IEZQIGlzIHNldCBjb3JyZWN0bHkgKGkuZS4gaXQgcG9pbnRzIHRvIHRoZSBjYWxsZXIncyBjYWxs
IGZyYW1lIGhlYWRlcikuCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gLSBTUCAtIEZQ
IGlzIGFuIGFsaWduZWQgZGlmZmVyZW5jZS4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAv
LyAtIEFueSBieXRlIGJldHdlZW4gRlAgKGV4Y2x1c2l2ZSkgYW5kIFNQIChpbmNsdXNpdmUpIGNv
dWxkIGJlIGxpdmUgaW4gdGhlIGNhbGxpbmcKLSAgICAgICAgICAgIC8vICAgY29kZS4KLSAgICAg
ICAgICAgIC8vCi0gICAgICAgICAgICAvLyBUaGVyZWZvcmUsIHdlIHRlbXBvcmFyaWx5IGdyb3cg
dGhlIHN0YWNrIGZvciB0aGUgcHVycG9zZSBvZiB0aGUgY2FsbCBhbmQgdGhlbgotICAgICAgICAg
ICAgLy8gc2hyaW5rIGl0IGFmdGVyLgotICAgICAgICAgICAgCi0gICAgICAgICAgICBjYWxsTGlu
a0luZm8gPSBzdGQ6Om1ha2VfdW5pcXVlPENhbGxMaW5rSW5mbz4oKTsKLQotICAgICAgICAgICAg
Ly8gRklYTUU6IElmIHdlIGdlbmVyYXRlZCBhIHBvbHltb3JwaGljIGNhbGwgc3R1YiB0aGF0IGp1
bXBlZCBiYWNrIHRvIHRoZSBnZXR0ZXIKLSAgICAgICAgICAgIC8vIHN0dWIsIHdoaWNoIHRoZW4g
anVtcGVkIGJhY2sgdG8gdGhlIG1haW4gY29kZSwgdGhlbiB3ZSdkIGhhdmUgYSByZWFjaGFiaWxp
dHkKLSAgICAgICAgICAgIC8vIHNpdHVhdGlvbiB0aGF0IHRoZSBHQyBkb2Vzbid0IGtub3cgYWJv
dXQuIFRoZSBHQyB3b3VsZCBlbnN1cmUgdGhhdCB0aGUgcG9seW1vcnBoaWMKLSAgICAgICAgICAg
IC8vIGNhbGwgc3R1YiBzdGF5ZWQgYWxpdmUsIGFuZCBpdCB3b3VsZCBlbnN1cmUgdGhhdCB0aGUg
bWFpbiBjb2RlIHN0YXllZCBhbGl2ZSwgYnV0Ci0gICAgICAgICAgICAvLyBpdCB3b3VsZG4ndCBr
bm93IHRoYXQgdGhlIGdldHRlciBzdHViIHdhcyBhbGl2ZS4gSWRlYWxseSBKSVQgc3R1YiByb3V0
aW5lcyB3b3VsZAotICAgICAgICAgICAgLy8gYmUgR0Mgb2JqZWN0cywgYW5kIHRoZW4gd2UnZCBi
ZSBhYmxlIHRvIHNheSB0aGF0IHRoZSBwb2x5bW9ycGhpYyBjYWxsIHN0dWIgaGFzIGEKLSAgICAg
ICAgICAgIC8vIHJlZmVyZW5jZSB0byB0aGUgZ2V0dGVyIHN0dWIuCi0gICAgICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4OTE0Ci0gICAgICAgICAg
ICBjYWxsTGlua0luZm8tPmRpc2FsbG93U3R1YnMoKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxsLCBzdHViSW5mby5j
b2RlT3JpZ2luLCBsb2FkZWRWYWx1ZUdQUik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBkb25lOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAv
LyBUaGVyZSBpcyBhICd0aGlzJyBhcmd1bWVudCBidXQgbm90aGluZyBlbHNlLgotICAgICAgICAg
ICAgdW5zaWduZWQgbnVtYmVyT2ZQYXJhbWV0ZXJzID0gMTsKLSAgICAgICAgICAgIC8vIC4uLiB1
bmxlc3Mgd2UncmUgY2FsbGluZyBhIHNldHRlci4KLSAgICAgICAgICAgIGlmIChraW5kID09IENh
bGxTZXR0ZXIpCi0gICAgICAgICAgICAgICAgbnVtYmVyT2ZQYXJhbWV0ZXJzKys7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIC8vIEdldCB0aGUgYWNjZXNzb3I7IGlmIHRoZXJlIGFpbid0IG9u
ZSB0aGVuIHRoZSByZXN1bHQgaXMganNVbmRlZmluZWQoKS4KLSAgICAgICAgICAgIGlmIChraW5k
ID09IENhbGxTZXR0ZXIpIHsKLSAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoCi0gICAg
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGxvYWRlZFZhbHVlR1BSLCBH
ZXR0ZXJTZXR0ZXI6Om9mZnNldE9mU2V0dGVyKCkpLAotICAgICAgICAgICAgICAgICAgICBsb2Fk
ZWRWYWx1ZUdQUik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHN0dWJK
aXQubG9hZFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
bG9hZGVkVmFsdWVHUFIsIEdldHRlclNldHRlcjo6b2Zmc2V0T2ZHZXR0ZXIoKSksCi0gICAgICAg
ICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIHJldHVyblVuZGVmaW5lZCA9IHN0dWJKaXQuYnJhbmNoVGVz
dFB0cigKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywgbG9hZGVkVmFsdWVH
UFIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlJlZ3NGb3JD
YWxsID0KLSAgICAgICAgICAgICAgICBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgbnVt
YmVyT2ZQYXJhbWV0ZXJzOwotICAgICAgICAgICAgCi0gICAgICAgICAgICB1bnNpZ25lZCBudW1i
ZXJPZkJ5dGVzRm9yQ2FsbCA9Ci0gICAgICAgICAgICAgICAgbnVtYmVyT2ZSZWdzRm9yQ2FsbCAq
IHNpemVvZihSZWdpc3RlcikgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIHVuc2lnbmVkIGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2FsbCA9Ci0g
ICAgICAgICAgICAgICAgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0
ZXMoKSwgbnVtYmVyT2ZCeXRlc0ZvckNhbGwpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBz
dHViSml0LnN1YlB0cigKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2FsbCksCi0gICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MgY2FsbGVlRnJhbWUgPSBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcygKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVn
aXN0ZXIsCi0gICAgICAgICAgICAgICAgLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENh
bGxlckZyYW1lQW5kUEMpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN0dWJKaXQuc3Rv
cmUzMigKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG51bWJl
ck9mUGFyYW1ldGVycyksCi0gICAgICAgICAgICAgICAgY2FsbGVlRnJhbWUud2l0aE9mZnNldCgK
LSAgICAgICAgICAgICAgICAgICAgSlNTdGFjazo6QXJndW1lbnRDb3VudCAqIHNpemVvZihSZWdp
c3RlcikgKyBQYXlsb2FkT2Zmc2V0KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN0dWJK
aXQuc3RvcmVDZWxsKAotICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSLCBjYWxsZWVGcmFt
ZS53aXRoT2Zmc2V0KEpTU3RhY2s6OkNhbGxlZSAqIHNpemVvZihSZWdpc3RlcikpKTsKLQotICAg
ICAgICAgICAgc3R1YkppdC5zdG9yZUNlbGwoCi0gICAgICAgICAgICAgICAgYmFzZUZvckdldEdQ
UiwKLSAgICAgICAgICAgICAgICBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KAotICAgICAgICAgICAg
ICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwKS5vZmZzZXQoKSAqIHNpemVvZihS
ZWdpc3RlcikpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ2FsbFNl
dHRlcikgewotICAgICAgICAgICAgICAgIHN0dWJKaXQuc3RvcmVWYWx1ZSgKLSAgICAgICAgICAg
ICAgICAgICAgdmFsdWVSZWdzLAotICAgICAgICAgICAgICAgICAgICBjYWxsZWVGcmFtZS53aXRo
T2Zmc2V0KAotICAgICAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnQoMSkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dDYXNlID0gc3R1
YkppdC5icmFuY2hQdHJXaXRoUGF0Y2goCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCBsb2FkZWRWYWx1ZUdQUiwgYWRkcmVzc09mTGlua0Z1bmN0aW9uQ2hlY2ssCi0g
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoMCkpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBmYXN0UGF0aENhbGwgPSBzdHViSml0Lm5lYXJDYWxsKCk7Ci0K
LSAgICAgICAgICAgIHN0dWJKaXQuYWRkUHRyKAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoY29kZUJsb2NrLT5zdGFja1BvaW50ZXJPZmZzZXQoKSAqIHNpemVv
ZihSZWdpc3RlcikpLAotICAgICAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7
Ci0gICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsR2V0dGVyKQotICAgICAgICAgICAgICAgIHN0
dWJKaXQuc2V0dXBSZXN1bHRzKHZhbHVlUmVncyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IGRvbmUuYXBwZW5kKHN0dWJKaXQuanVtcCgpKTsKLSAgICAgICAgICAgIHNsb3dDYXNlLmxpbmso
JnN0dWJKaXQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzdHViSml0Lm1vdmUobG9hZGVk
VmFsdWVHUFIsIEdQUkluZm86OnJlZ1QwKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAg
ICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
Q2VsbFRhZyksIEdQUkluZm86OnJlZ1QxKTsKLSNlbmRpZgotICAgICAgICAgICAgc3R1YkppdC5t
b3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mby5nZXQoKSksIEdQ
UkluZm86OnJlZ1QyKTsKLSAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCA9IHN0dWJKaXQubmVhckNh
bGwoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3R1YkppdC5hZGRQdHIoCi0gICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihjb2RlQmxvY2stPnN0YWNrUG9p
bnRlck9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksCi0gICAgICAgICAgICAgICAgR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAgICAgIGlmIChraW5kID09IENhbGxHZXR0ZXIp
Ci0gICAgICAgICAgICAgICAgc3R1YkppdC5zZXR1cFJlc3VsdHModmFsdWVSZWdzKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgZG9uZS5hcHBlbmQoc3R1YkppdC5qdW1wKCkpOwotICAgICAg
ICAgICAgcmV0dXJuVW5kZWZpbmVkLmxpbmsoJnN0dWJKaXQpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBpZiAoa2luZCA9PSBDYWxsR2V0dGVyKQotICAgICAgICAgICAgICAgIHN0dWJKaXQu
bW92ZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCB2YWx1ZVJlZ3MpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBkb25lLmxpbmsoJnN0dWJKaXQpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgLy8gZ2V0dGVyOiBFbmNvZGVkSlNWYWx1ZSAoKkdldFZhbHVlRnVuYykoRXhlY1N0
YXRlKiwgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSk7Ci0gICAgICAgICAgICAvLyBzZXR0ZXI6IHZvaWQgKCpQdXRWYWx1ZUZ1bmMpKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiBiYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSB2YWx1ZSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIGlmIChr
aW5kID09IENhbGxDdXN0b21HZXR0ZXIpCi0gICAgICAgICAgICAgICAgc3R1YkppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUZvckFjY2Vzc0dQUiwgYmFzZUZvckdldEdQUiwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocHJvcGVydHlOYW1lLmltcGwoKSkpOwotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKGJhc2VGb3JBY2Nlc3NHUFIsIGJhc2VGb3JHZXRHUFIsIHZhbHVlUmVncy5ncHIoKSk7
Ci0jZWxzZQotICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ2FsbEN1c3RvbUdldHRlcikKLSAgICAg
ICAgICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlRm9yQWNj
ZXNzR1BSLCBiYXNlRm9yR2V0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkNlbGxUYWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihwcm9wZXJ0eU5hbWUu
aW1wbCgpKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc3R1YkppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUZvckFjY2Vzc0dQUiwgYmFzZUZvckdldEdQUiwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgdmFsdWVSZWdz
LnBheWxvYWRHUFIoKSwgdmFsdWVSZWdzLnRhZ0dQUigpKTsKLSNlbmRpZgotICAgICAgICAgICAg
c3R1YkppdC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgJnZtLT50b3BDYWxs
RnJhbWUpOwotCi0gICAgICAgICAgICBvcGVyYXRpb25DYWxsID0gc3R1YkppdC5jYWxsKCk7Ci0g
ICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsQ3VzdG9tR2V0dGVyKQotICAgICAgICAgICAgICAg
IHN0dWJKaXQuc2V0dXBSZXN1bHRzKHZhbHVlUmVncyk7Ci0gICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBub0V4Y2VwdGlvbiA9IHN0dWJKaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKENDYWxs
SGVscGVyczo6SW52ZXJ0ZWRFeGNlcHRpb25DaGVjayk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHMoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHZt
KSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgICAgICAgICAgaGFuZGxlckNhbGwg
PSBzdHViSml0LmNhbGwoKTsKLSAgICAgICAgICAgIHN0dWJKaXQuanVtcFRvRXhjZXB0aW9uSGFu
ZGxlcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBub0V4Y2VwdGlvbi5saW5rKCZzdHVi
Sml0KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbWl0UmVzdG9yZVNjcmF0Y2goc3R1YkppdCwg
bmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHNjcmF0Y2hHUFIsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVD
YXNlcyk7Ci0gICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIHN0dWJKaXQsIGV4
ZWMtPmNvZGVCbG9jaygpLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwotICAgIGlmIChwYXRjaEJ1
ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0g
ICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwg
c3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzLCBzdWNjZXNzTGFiZWwsIHNsb3dDYXNlTGFiZWwp
OwotICAgIGlmIChraW5kID09IENhbGxDdXN0b21HZXR0ZXIgfHwga2luZCA9PSBDYWxsQ3VzdG9t
U2V0dGVyKSB7Ci0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsob3BlcmF0aW9uQ2FsbCwgY3VzdG9t
KTsKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhoYW5kbGVyQ2FsbCwgbG9va3VwRXhjZXB0aW9u
SGFuZGxlcik7Ci0gICAgfSBlbHNlIGlmIChraW5kID09IENhbGxHZXR0ZXIgfHwga2luZCA9PSBD
YWxsU2V0dGVyKSB7Ci0gICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucyhwYXRj
aEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoc2xvd1BhdGhDYWxsKSwKLSAgICAgICAgICAgIHBh
dGNoQnVmZmVyLmxvY2F0aW9uT2YoYWRkcmVzc09mTGlua0Z1bmN0aW9uQ2hlY2spLAotICAgICAg
ICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKGZhc3RQYXRoQ2FsbCkpOwotCi0g
ICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoCi0gICAgICAgICAgICBzbG93UGF0aENhbGwsIENvZGVM
b2NhdGlvbkxhYmVsKHZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUo
KSkpOwotICAgIH0KLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZSA9IEZJTkFM
SVpFX0NPREVfRk9SKAotICAgICAgICBleGVjLT5jb2RlQmxvY2soKSwgcGF0Y2hCdWZmZXIsCi0g
ICAgICAgICgiJXMgYWNjZXNzIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAg
ICAgICAgdG9TdHJpbmcoa2luZCksIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEo
KSwKLSAgICAgICAgICAgIHN1Y2Nlc3NMYWJlbC5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAg
Ci0gICAgaWYgKGtpbmQgPT0gQ2FsbEdldHRlciB8fCBraW5kID09IENhbGxTZXR0ZXIpCi0gICAg
ICAgIHN0dWJSb3V0aW5lID0gYWRvcHRSZWYobmV3IEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5l
KGNvZGUsICp2bSwgV1RGOjptb3ZlKGNhbGxMaW5rSW5mbykpKTsKLSAgICBlbHNlCi0gICAgICAg
IHN0dWJSb3V0aW5lID0gY3JlYXRlSklUU3R1YlJvdXRpbmUoY29kZSwgKnZtLCBjb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLCB0cnVlKTsKLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQog
ZW51bSBJbmxpbmVDYWNoZUFjdGlvbiB7CiAgICAgR2l2ZVVwT25DYWNoZSwKICAgICBSZXRyeUNh
Y2hlTGF0ZXIsCkBAIC02MjksMTMyICsyMTYsOTggQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9u
IHRyeUNhY2hlR2V0QnlJRAogICAgIGlmIChPcHRpb25zOjpmb3JjZUlDRmFpbHVyZSgpKQogICAg
ICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKICAgICAKLSAgICAvLyBGSVhNRTogV3JpdGUgYSB0
ZXN0IHRoYXQgcHJvdmVzIHdlIG5lZWQgdG8gY2hlY2sgZm9yIHJlY3Vyc2lvbiBoZXJlIGp1c3QK
LSAgICAvLyBsaWtlIHRoZSBpbnRlcnByZXRlciBkb2VzLCB0aGVuIGFkZCBhIGNoZWNrIGZvciBy
ZWN1cnNpb24uCisgICAgLy8gRklYTUU6IENhY2hlIHByb3BlcnR5IGFjY2VzcyBmb3IgaW1tZWRp
YXRlcy4KKyAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7CiAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygp
OwotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVy
ID0gY29kZUJsb2NrLT5vd25lclNjcmlwdEV4ZWN1dGFibGUoKTsKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogCi0gICAgaWYgKChpc0pTQXJyYXkoYmFzZVZhbHVlKSB8fCBpc0pTU3RyaW5nKGJh
c2VWYWx1ZSkpICYmIHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3Ro
KSB7Ci0gICAgICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5m
by5wYXRjaC5iYXNlR1BSKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBHUFJSZWcg
cmVzdWx0VGFnR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZVRh
Z0dQUik7Ci0jZW5kaWYKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHN0YXRpY19jYXN0PEdQ
UlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVHUFIpOwotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVy
IHN0dWJKaXQ7Ci0KLSAgICAgICAgaWYgKGlzSlNBcnJheShiYXNlVmFsdWUpKSB7Ci0gICAgICAg
ICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IFRlbXBSZWdpc3RlclNldChzdHViSW5mby5wYXRjaC51
c2VkUmVnaXN0ZXJzKS5nZXRGcmVlR1BSKCk7Ci0gICAgICAgICAgICBib29sIG5lZWRUb1Jlc3Rv
cmVTY3JhdGNoID0gZmFsc2U7Ci0KLSAgICAgICAgICAgIGlmIChzY3JhdGNoR1BSID09IEludmFs
aWRHUFJSZWcpIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgICAgIHNjcmF0Y2hH
UFIgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgcmVzdWx0R1BS
KTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgc2NyYXRjaEdQUiA9IEFzc2VtYmx5SGVscGVyczo6
c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCByZXN1bHRHUFIsIHJlc3VsdFRhZ0dQUik7Ci0jZW5k
aWYKLSAgICAgICAgICAgICAgICBzdHViSml0LnB1c2hUb1NhdmUoc2NyYXRjaEdQUik7Ci0gICAg
ICAgICAgICAgICAgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSB0cnVlOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzOwotCi0g
ICAgICAgICAgICBzdHViSml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAg
IGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6
Olplcm8sIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSXNBcnJheSkp
KTsKLSAgICAgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2hUZXN0MzIo
TWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spKSk7Ci0KLSAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0
cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkp
LCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoMCkpKTsKLQotICAgICAgICAgICAgc3R1YkppdC5tb3ZlKHNjcmF0
Y2hHUFIsIHJlc3VsdEdQUik7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIHN0dWJK
aXQub3I2NChBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW02NChUYWdUeXBlTnVtYmVyKSwgcmVz
dWx0R1BSKTsKLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgICAgICBzdHViSml0Lm1v
dmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCByZXN1
bHRUYWdHUFIpOwotI2VuZGlmCisgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IG5ld0Nh
c2U7CiAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3MsIGZhaWw7Ci0K
LSAgICAgICAgICAgIGVtaXRSZXN0b3JlU2NyYXRjaChzdHViSml0LCBuZWVkVG9SZXN0b3JlU2Ny
YXRjaCwgc2NyYXRjaEdQUiwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIHN0dWJKaXQsIGNv
ZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKLSAgICAgICAgICAgIGlmIChwYXRjaEJ1
ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBP
bkNhY2hlOwotCi0gICAgICAgICAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZmZXIsIG5l
ZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdHViSW5mbywgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2Vz
KTsKLQotICAgICAgICAgICAgc3R1YkluZm8uc3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZP
Ul9TVFVCKAotICAgICAgICAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLCBwYXRjaEJ1ZmZlciwK
LSAgICAgICAgICAgICAgICAoIkdldEJ5SWQgYXJyYXkgbGVuZ3RoIHN0dWIgZm9yICVzLCByZXR1
cm4gcG9pbnQgJXAiLAotICAgICAgICAgICAgICAgICAgICB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVC
bG9jaygpKS5kYXRhKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0
KAotICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25l
KS5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0KLSAgICAgICAgICAgIHJlcGxhY2VXaXRoSnVtcChz
dHViSW5mbywgc3R1YkluZm8uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwotICAgICAgICAg
ICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9w
ZXJhdGlvbkdldEJ5SWQpOworICAgIGlmIChpc0pTQXJyYXkoYmFzZVZhbHVlKSAmJiBwcm9wZXJ0
eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkKKyAgICAgICAgbmV3Q2FzZSA9
IEFjY2Vzc0Nhc2U6OmdldExlbmd0aCh2bSwgb3duZXIsIEFjY2Vzc0Nhc2U6OkFycmF5TGVuZ3Ro
KTsKKyAgICBlbHNlIGlmIChpc0pTU3RyaW5nKGJhc2VWYWx1ZSkgJiYgcHJvcGVydHlOYW1lID09
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpCisgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3ND
YXNlOjpnZXRMZW5ndGgodm0sIG93bmVyLCBBY2Nlc3NDYXNlOjpTdHJpbmdMZW5ndGgpOworICAg
IGVsc2UgeworICAgICAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGUoKSAmJiAhc2xvdC5pc1Vuc2V0
KCkpCisgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKIAorICAgICAgICBKU0NlbGwq
IGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUodm0pOworICAgICAgICAKKyAgICAgICAgLy8gT3B0
aW1pemUgc2VsZiBhY2Nlc3MuCisgICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUgPT0gQ2Fj
aGVUeXBlOjpVbnNldAorICAgICAgICAgICAgJiYgc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkKKyAg
ICAgICAgICAgICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUKKyAgICAgICAgICAgICYm
ICFzbG90LndhdGNocG9pbnRTZXQoKQorICAgICAgICAgICAgJiYgTWFjcm9Bc3NlbWJsZXI6Omlz
Q29tcGFjdFB0ckFsaWduZWRBZGRyZXNzT2Zmc2V0KG1heE9mZnNldFJlbGF0aXZlVG9QYXRjaGVk
U3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSkKKyAgICAgICAgICAgICYmIGFjdGlvbkZvckNl
bGwodm0sIGJhc2VDZWxsKSA9PSBBdHRlbXB0VG9DYWNoZQorICAgICAgICAgICAgJiYgIXN0cnVj
dHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKSB7CisgICAgICAgICAgICBzdHJ1
Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgc2xvdC5jYWNo
ZWRPZmZzZXQoKSk7CisgICAgICAgICAgICByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoY29kZUJsb2Nr
LCBzdHViSW5mbywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLCBvcGVyYXRpb25HZXRC
eUlkT3B0aW1pemUsIHRydWUpOworICAgICAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRTZWxm
KHZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVk
T2Zmc2V0KCkpOwogICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKICAgICAgICAg
fQogCi0gICAgICAgIC8vIFN0cmluZy5sZW5ndGggY2FzZQotICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBmYWlsdXJlID0gc3R1YkppdC5icmFuY2g4KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVP
ZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoU3RyaW5nVHlwZSkpOwotCi0g
ICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpT
U3RyaW5nOjpvZmZzZXRPZkxlbmd0aCgpKSwgcmVzdWx0R1BSKTsKLQotI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgICAgIHN0dWJKaXQub3I2NChBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW02NChU
YWdUeXBlTnVtYmVyKSwgcmVzdWx0R1BSKTsKLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAg
ICAgIHN0dWJKaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJ
bnQzMlRhZyksIHJlc3VsdFRhZ0dQUik7Ci0jZW5kaWYKKyAgICAgICAgYm9vbCBsb2FkVGFyZ2V0
RnJvbVByb3h5ID0gZmFsc2U7CisgICAgICAgIGlmIChiYXNlQ2VsbC0+dHlwZSgpID09IFB1cmVG
b3J3YXJkaW5nUHJveHlUeXBlKSB7CisgICAgICAgICAgICBiYXNlVmFsdWUgPSBqc0Nhc3Q8SlNQ
cm94eSo+KGJhc2VDZWxsKS0+dGFyZ2V0KCk7CisgICAgICAgICAgICBiYXNlQ2VsbCA9IGJhc2VW
YWx1ZS5hc0NlbGwoKTsKKyAgICAgICAgICAgIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1
cmUodm0pOworICAgICAgICAgICAgbG9hZFRhcmdldEZyb21Qcm94eSA9IHRydWU7CisgICAgICAg
IH0KIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzID0gc3R1YkppdC5qdW1w
KCk7CisgICAgICAgIElubGluZUNhY2hlQWN0aW9uIGFjdGlvbiA9IGFjdGlvbkZvckNlbGwodm0s
IGJhc2VDZWxsKTsKKyAgICAgICAgaWYgKGFjdGlvbiAhPSBBdHRlbXB0VG9DYWNoZSkKKyAgICAg
ICAgICAgIHJldHVybiBhY3Rpb247CiAKLSAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigq
dm0sIHN0dWJKaXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKLSAgICAgICAg
aWYgKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpCi0gICAgICAgICAgICByZXR1cm4g
R2l2ZVVwT25DYWNoZTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc2xvdC5pc1Vu
c2V0KCkgPyBpbnZhbGlkT2Zmc2V0IDogc2xvdC5jYWNoZWRPZmZzZXQoKTsKICAgICAgICAgCi0g
ICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSk7Ci0gICAg
ICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwotCi0g
ICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKLSAg
ICAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLCBwYXRjaEJ1ZmZlciwKLSAgICAgICAgICAgICgi
R2V0QnlJZCBzdHJpbmcgbGVuZ3RoIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAotICAg
ICAgICAgICAgICAgIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwgc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAgICAgICAgICAg
IHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwor
ICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CisgICAgICAg
IGlmIChzbG90LmlzVW5zZXQoKSB8fCBzbG90LnNsb3RCYXNlKCkgIT0gYmFzZVZhbHVlKSB7Cisg
ICAgICAgICAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5mbygpLnByb2hpYml0c1Byb3BlcnR5Q2Fj
aGluZygpIHx8IHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChzbG90Lmlz
VW5zZXQoKSkgeworICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0
aW9uc0ZvclByb3BlcnR5TWlzcygKKyAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLmltcGwoKSk7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdl
bmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAorICAgICAgICAgICAgICAg
ICAgICB2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBz
bG90LnNsb3RCYXNlKCksCisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZS5pbXBsKCkp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIWNvbmRpdGlv
blNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIG9mZnNldCA9IHNsb3QuaXNVbnNldCgpID8gaW52YWxp
ZE9mZnNldCA6IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpOworICAg
ICAgICB9CiAKLSAgICAgICAgcmVwbGFjZVdpdGhKdW1wKHN0dWJJbmZvLCBzdHViSW5mby5zdHVi
Um91dGluZS0+Y29kZSgpLmNvZGUoKSk7Ci0gICAgICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywg
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkKTsKKyAgICAgICAg
QWNjZXNzQ2FzZTo6QWNjZXNzVHlwZSB0eXBlOworICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJs
ZVZhbHVlKCkpCisgICAgICAgICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6TG9hZDsKKyAgICAgICAg
ZWxzZSBpZiAoc2xvdC5pc1Vuc2V0KCkpCisgICAgICAgICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6
TWlzczsKKyAgICAgICAgZWxzZSBpZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpKQorICAgICAg
ICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6OkdldHRlcjsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgdHlwZSA9IEFjY2Vzc0Nhc2U6OkN1c3RvbUdldHRlcjsKIAotICAgICAgICByZXR1cm4gUmV0
cnlDYWNoZUxhdGVyOworICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Z2V0KAorICAgICAg
ICAgICAgdm0sIG93bmVyLCB0eXBlLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBs
b2FkVGFyZ2V0RnJvbVByb3h5LAorICAgICAgICAgICAgc2xvdC53YXRjaHBvaW50U2V0KCksIHNs
b3QuaXNDYWNoZWFibGVDdXN0b20oKSA/IHNsb3QuY3VzdG9tR2V0dGVyKCkgOiBudWxscHRyKTsK
ICAgICB9CiAKLSAgICAvLyBGSVhNRTogQ2FjaGUgcHJvcGVydHkgYWNjZXNzIGZvciBpbW1lZGlh
dGVzLgotICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQotICAgICAgICByZXR1cm4gR2l2ZVVw
T25DYWNoZTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0ciA9IHN0dWJJbmZvLmFk
ZEFjY2Vzc0Nhc2UoCisgICAgICAgIHZtLCBjb2RlQmxvY2ssIHByb3BlcnR5TmFtZSwgc3RkOjpt
b3ZlKG5ld0Nhc2UpKTsKIAotICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZSgpICYmICFzbG90Lmlz
VW5zZXQoKSkKKyAgICBpZiAoIWNvZGVQdHIpCiAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hl
OwogCi0gICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKLSAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKnZtKTsKLQotICAgIElubGlu
ZUNhY2hlQWN0aW9uIGFjdGlvbiA9IGFjdGlvbkZvckNlbGwoKnZtLCBiYXNlQ2VsbCk7Ci0gICAg
aWYgKGFjdGlvbiAhPSBBdHRlbXB0VG9DYWNoZSkKLSAgICAgICAgcmV0dXJuIGFjdGlvbjsKLQot
ICAgIC8vIE9wdGltaXplIHNlbGYgYWNjZXNzLgotICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlVmFs
dWUoKQotICAgICAgICAmJiBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlCi0gICAgICAgICYm
ICFzbG90LndhdGNocG9pbnRTZXQoKQotICAgICAgICAmJiBNYWNyb0Fzc2VtYmxlcjo6aXNDb21w
YWN0UHRyQWxpZ25lZEFkZHJlc3NPZmZzZXQobWF4T2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9y
YWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSkgewotICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0
Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cygqdm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwot
ICAgICAgICByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoKnZtLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBz
dHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgb3BlcmF0aW9uR2V0
QnlJZEJ1aWxkTGlzdCwgdHJ1ZSk7Ci0gICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZigq
dm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7Ci0gICAgICAgIHJl
dHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0gICAgfQotCi0gICAgcmVwYXRjaENhbGwoY29kZUJsb2Nr
LCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3Qp
OworICAgIHJlcGxhY2VXaXRoSnVtcChzdHViSW5mbywgY29kZVB0cik7CisgICAgCiAgICAgcmV0
dXJuIFJldHJ5Q2FjaGVMYXRlcjsKIH0KIApAQCAtNzY2LDExMiArMzE5LDYgQEAgdm9pZCByZXBh
dGNoR2V0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVgogICAgICAgICByZXBhdGNoQ2FsbChleGVj
LT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRC
eUlkKTsKIH0KIAotc3RhdGljIHZvaWQgcGF0Y2hKdW1wVG9HZXRCeUlkU3R1YihTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8sIEpJVFN0dWJSb3V0aW5lKiBzdHViUm91dGluZSkKLXsKLSAgICBS
RUxFQVNFX0FTU0VSVChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfbGlz
dCk7Ci0gICAgaWYgKHN0dWJJbmZvLnUuZ2V0QnlJZExpc3QubGlzdC0+ZGlkU2VsZlBhdGNoaW5n
KCkpIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKAotICAgICAgICAgICAg
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldCgKLSAgICAgICAgICAgICAg
ICBzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1bXApLAotICAgICAgICAgICAgQ29kZUxvY2F0
aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICAKLSAgICByZXBsYWNlV2l0aEp1bXAoc3R1YkluZm8sIHN0dWJSb3V0aW5lLT5j
b2RlKCkuY29kZSgpKTsKLX0KLQotc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUJ1aWxkR2V0
QnlJRExpc3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvKQotewotICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpCi0gICAgICAgIHx8ICgh
c2xvdC5pc0NhY2hlYWJsZSgpICYmICFzbG90LmlzVW5zZXQoKSkpCi0gICAgICAgIHJldHVybiBH
aXZlVXBPbkNhY2hlOwotCi0gICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwo
KTsKLSAgICBib29sIGxvYWRUYXJnZXRGcm9tUHJveHkgPSBmYWxzZTsKLSAgICBpZiAoYmFzZUNl
bGwtPnR5cGUoKSA9PSBQdXJlRm9yd2FyZGluZ1Byb3h5VHlwZSkgewotICAgICAgICBiYXNlVmFs
dWUgPSBqc0Nhc3Q8SlNQcm94eSo+KGJhc2VDZWxsKS0+dGFyZ2V0KCk7Ci0gICAgICAgIGJhc2VD
ZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwotICAgICAgICBsb2FkVGFyZ2V0RnJvbVByb3h5ID0g
dHJ1ZTsKLSAgICB9Ci0KLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotCi0gICAgSW5saW5lQ2FjaGVBY3Rpb24g
YWN0aW9uID0gYWN0aW9uRm9yQ2VsbCgqdm0sIGJhc2VDZWxsKTsKLSAgICBpZiAoYWN0aW9uICE9
IEF0dGVtcHRUb0NhY2hlKQotICAgICAgICByZXR1cm4gYWN0aW9uOwotCi0gICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBiYXNlQ2VsbC0+c3RydWN0dXJlKCp2bSk7Ci0gICAgVHlwZUluZm8gdHlw
ZUluZm8gPSBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCk7Ci0KLSAgICBpZiAoc3R1YkluZm8ucGF0Y2gu
c3BpbGxNb2RlID09IE5lZWRUb1NwaWxsKSB7Ci0gICAgICAgIC8vIFdlIGNhbm5vdCBkbyBhcyBt
dWNoIGlubGluZSBjYWNoaW5nIGlmIHRoZSByZWdpc3RlcnMgd2VyZSBub3QgZmx1c2hlZCBwcmlv
ciB0byB0aGlzIEdldEJ5SWQuIEluIHBhcnRpY3VsYXIsCi0gICAgICAgIC8vIG5vbi1WYWx1ZSBj
YWNoZWQgcHJvcGVydGllcyByZXF1aXJlIHBsYW50aW5nIGNhbGxzLCB3aGljaCByZXF1aXJlcyBy
ZWdpc3RlcnMgdG8gaGF2ZSBiZWVuIGZsdXNoZWQuIFRodXMsCi0gICAgICAgIC8vIGlmIHJlZ2lz
dGVycyB3ZXJlIG5vdCBmbHVzaGVkLCBkb24ndCBkbyBub24tVmFsdWUgY2FjaGluZy4KLSAgICAg
ICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSAmJiAhc2xvdC5pc1Vuc2V0KCkpCi0gICAg
ICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICB9Ci0KLSAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQgPSBzbG90LmlzVW5zZXQoKSA/IGludmFsaWRPZmZzZXQgOiBzbG90LmNhY2hlZE9m
ZnNldCgpOwotICAgIAotICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNl
dDsKLSAgICBpZiAoc2xvdC5pc1Vuc2V0KCkgfHwgc2xvdC5zbG90QmFzZSgpICE9IGJhc2VWYWx1
ZSkgewotICAgICAgICBpZiAodHlwZUluZm8ucHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCkgfHwg
c3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOwotCi0gICAgICAgIGlmIChzbG90LmlzVW5zZXQoKSkKLSAgICAgICAgICAgIGNvbmRpdGlv
blNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcygqdm0sIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9y
UHJvdG90eXBlUHJvcGVydHlIaXQoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBl
eGVjLCBzdHJ1Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwgaWRlbnQuaW1wbCgpKTsKLQotICAgICAg
ICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gR2l2ZVVw
T25DYWNoZTsKLQotICAgICAgICBvZmZzZXQgPSBzbG90LmlzVW5zZXQoKSA/IGludmFsaWRPZmZz
ZXQgOiBjb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vZmZzZXQoKTsKLSAgICB9Ci0g
ICAgCi0gICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogbGlzdCA9IFBvbHltb3JwaGljR2V0QnlJ
ZExpc3Q6OmZyb20oc3R1YkluZm8pOwotICAgIGlmIChsaXN0LT5pc0Z1bGwoKSkgewotICAgICAg
ICAvLyBXZSBuZWVkIHRoaXMgZXh0cmEgY2hlY2sgYmVjYXVzZSBvZiByZWN1cnNpb24uCi0gICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgIH0KLSAgICAKLSAgICBSZWZQdHI8SklUU3R1
YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwotICAgIGJvb2wgcmVzdWx0ID0gZ2VuZXJhdGVCeUlkU3R1
YigKLSAgICAgICAgZXhlYywga2luZEZvcihzbG90KSwgaWRlbnQsIGN1c3RvbUZvcihzbG90KSwg
c3R1YkluZm8sIGNvbmRpdGlvblNldCwgc2xvdC5zbG90QmFzZSgpLCBvZmZzZXQsIAotICAgICAg
ICBzdHJ1Y3R1cmUsIGxvYWRUYXJnZXRGcm9tUHJveHksIHNsb3Qud2F0Y2hwb2ludFNldCgpLCAK
LSAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1Yklu
Zm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSwKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlz
dC0+Y3VycmVudFNsb3dQYXRoVGFyZ2V0KHN0dWJJbmZvKSksIHN0dWJSb3V0aW5lKTsKLSAgICBp
ZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgCi0gICAgR2V0
QnlJZEFjY2Vzczo6QWNjZXNzVHlwZSBhY2Nlc3NUeXBlOwotICAgIGlmIChzbG90LmlzQ2FjaGVh
YmxlVmFsdWUoKSkKLSAgICAgICAgYWNjZXNzVHlwZSA9IHNsb3Qud2F0Y2hwb2ludFNldCgpID8g
R2V0QnlJZEFjY2Vzczo6V2F0Y2hlZFN0dWIgOiBHZXRCeUlkQWNjZXNzOjpTaW1wbGVTdHViOwot
ICAgIGVsc2UgaWYgKHNsb3QuaXNVbnNldCgpKQotICAgICAgICBhY2Nlc3NUeXBlID0gR2V0QnlJ
ZEFjY2Vzczo6U2ltcGxlTWlzczsKLSAgICBlbHNlIGlmIChzbG90LmlzQ2FjaGVhYmxlR2V0dGVy
KCkpCi0gICAgICAgIGFjY2Vzc1R5cGUgPSBHZXRCeUlkQWNjZXNzOjpHZXR0ZXI7Ci0gICAgZWxz
ZQotICAgICAgICBhY2Nlc3NUeXBlID0gR2V0QnlJZEFjY2Vzczo6Q3VzdG9tR2V0dGVyOwotICAg
IAotICAgIGxpc3QtPmFkZEFjY2VzcyhHZXRCeUlkQWNjZXNzKAotICAgICAgICAqdm0sIGNvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGFjY2Vzc1R5cGUsIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1
cmUsCi0gICAgICAgIGNvbmRpdGlvblNldCkpOwotICAgIAotICAgIHBhdGNoSnVtcFRvR2V0QnlJ
ZFN0dWIoc3R1YkluZm8sIHN0dWJSb3V0aW5lLmdldCgpKTsKLSAgICAKLSAgICByZXR1cm4gbGlz
dC0+aXNGdWxsKCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOwotfQotCi12b2lk
IGJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBHQ1NhZmVDb25jdXJyZW50SklUTG9j
a2VyIGxvY2tlcihleGVjLT5jb2RlQmxvY2soKS0+bV9sb2NrLCBleGVjLT52bSgpLmhlYXApOwot
ICAgIAotICAgIGlmICh0cnlCdWlsZEdldEJ5SURMaXN0KGV4ZWMsIGJhc2VWYWx1ZSwgcHJvcGVy
dHlOYW1lLCBzbG90LCBzdHViSW5mbykgPT0gR2l2ZVVwT25DYWNoZSkKLSAgICAgICAgcmVwYXRj
aENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3Bl
cmF0aW9uR2V0QnlJZCk7Ci19Ci0KIHN0YXRpYyBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJIGFwcHJv
cHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3Qs
IFB1dEtpbmQgcHV0S2luZCkKIHsKICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkgewpAQCAt
ODg0LDM1OSArMzMxLDE2IEBAIHN0YXRpYyBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJIGFwcHJvcHJp
YXQKICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdDsKIH0KIAotc3RhdGljIFZf
SklUT3BlcmF0aW9uX0VTc2lKSkkgYXBwcm9wcmlhdGVMaXN0QnVpbGRpbmdQdXRCeUlkRnVuY3Rp
b24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRLaW5kIHB1dEtpbmQpCitzdGF0aWMg
Vl9KSVRPcGVyYXRpb25fRVNzaUpKSSBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUlkRnVuY3Rp
b24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRLaW5kIHB1dEtpbmQpCiB7CiAgICAg
aWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpIHsKICAgICAgICAgaWYgKHB1dEtpbmQgPT0gRGlyZWN0
KQotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExp
c3Q7Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0QnVpbGRMaXN0OworICAg
ICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKKyAg
ICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKICAgICB9CiAgICAg
aWYgKHB1dEtpbmQgPT0gRGlyZWN0KQotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERp
cmVjdE5vblN0cmljdEJ1aWxkTGlzdDsKLSAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0
cmljdEJ1aWxkTGlzdDsKLX0KLQotc3RhdGljIGJvb2wgZW1pdFB1dFJlcGxhY2VTdHViKAotICAg
IEV4ZWNTdGF0ZSogZXhlYywKLSAgICBjb25zdCBJZGVudGlmaWVyJiwKLSAgICBjb25zdCBQdXRQ
cm9wZXJ0eVNsb3QmIHNsb3QsCi0gICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAotICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlLAotICAgIENvZGVMb2NhdGlvbkxhYmVsIGZhaWx1cmVMYWJl
bCwKLSAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+JiBzdHViUm91dGluZSkKLXsKLSAgICBWTSog
dm0gPSAmZXhlYy0+dm0oKTsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJl
Zz4oc3R1YkluZm8ucGF0Y2guYmFzZUdQUik7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBH
UFJSZWcgdmFsdWVUYWdHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZh
bHVlVGFnR1BSKTsKLSNlbmRpZgotICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHN0YXRpY19jYXN0PEdQ
UlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVHUFIpOwotCi0gICAgU2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yIGFsbG9jYXRvcihzdHViSW5mby5wYXRjaC51c2VkUmVnaXN0ZXJzKTsKLSAgICBhbGxv
Y2F0b3IubG9jayhiYXNlR1BSKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIGFsbG9jYXRv
ci5sb2NrKHZhbHVlVGFnR1BSKTsKLSNlbmRpZgotICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlR1BS
KTsKLSAgICAKLSAgICBHUFJSZWcgc2NyYXRjaEdQUjEgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3Jh
dGNoR1BSKCk7Ci0KLSAgICBDQ2FsbEhlbHBlcnMgc3R1YkppdCh2bSwgZXhlYy0+Y29kZUJsb2Nr
KCkpOwotCi0gICAgc2l6ZV90IG51bWJlck9mUGFkZGluZ0J5dGVzID0gYWxsb2NhdG9yLnByZXNl
cnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKHN0dWJKaXQpOwotCi0gICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgYmFkU3RydWN0dXJlID0gc3R1YkppdC5icmFuY2hTdHJ1Y3R1cmUoCi0gICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKLSAgICAgICAgc3RydWN0
dXJlKTsKLQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpKQotICAgICAgICBzdHViSml0LnN0b3JlNjQodmFsdWVHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3Jh
Z2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVv
ZihKU1ZhbHVlKSkpOwotICAgIGVsc2UgewotICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
c2NyYXRjaEdQUjEpOwotICAgICAgICBzdHViSml0LnN0b3JlNjQodmFsdWVHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hl
ZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOwotICAgIH0KLSNlbGlmIFVTRShKU1ZBTFVF
MzJfNjQpCi0gICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSB7Ci0g
ICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5Jbmxp
bmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNU
X09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwotICAg
ICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5s
aW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVD
VF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMSk7Ci0gICAg
ICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2Ny
YXRjaEdQUjEsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9m
KEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0
cy5wYXlsb2FkKSkpOwotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNh
Y2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVk
VmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwotICAgIH0KLSNlbmRpZgotICAgIAotICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3M7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
ZmFpbHVyZTsKLSAgICAKLSAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkpIHsK
LSAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoc3R1Ykpp
dCwgbnVtYmVyT2ZQYWRkaW5nQnl0ZXMpOwotICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1w
KCk7Ci0gICAgICAgIAotICAgICAgICBiYWRTdHJ1Y3R1cmUubGluaygmc3R1YkppdCk7Ci0gICAg
ICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKHN0dWJKaXQsIG51
bWJlck9mUGFkZGluZ0J5dGVzKTsKLSAgICAgICAgZmFpbHVyZSA9IHN0dWJKaXQuanVtcCgpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKLSAgICAgICAg
ZmFpbHVyZSA9IGJhZFN0cnVjdHVyZTsKLSAgICB9Ci0gICAgCi0gICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcigqdm0sIHN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygpLCBKSVRDb21waWxhdGlvbkNh
bkZhaWwpOwotICAgIGlmIChwYXRjaEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0
YUNhbGxUb0RvbmUpKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmUsIGZhaWx1cmVMYWJl
bCk7Ci0gICAgICAgICAgICAKLSAgICBzdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NU
VUIoCi0gICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLCBwYXRjaEJ1ZmZlciwKLSAgICAgICAgKCJQ
dXRCeUlkIHJlcGxhY2Ugc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICAg
ICB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNo
LmRlbHRhQ2FsbFRvRG9uZSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgIAotICAgIHJldHVy
biB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCi0gICAgRXhl
Y1N0YXRlKiBleGVjLCBWTSogdm0sIFN0cnVjdHVyZSomIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQsIAotICAgIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQsCi0gICAgU3RydWN0dXJlKiYgb2xk
U3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KQotewot
ICAgIFByb3BlcnR5TmFtZSBwbmFtZShpZGVudCk7Ci0gICAgb2xkU3RydWN0dXJlID0gc3RydWN0
dXJlOwotICAgIGlmICghb2xkU3RydWN0dXJlLT5pc09iamVjdCgpIHx8IG9sZFN0cnVjdHVyZS0+
aXNEaWN0aW9uYXJ5KCkgfHwgcGFyc2VJbmRleChwbmFtZSkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIFByb3BlcnR5T2Zmc2V0IHByb3BlcnR5T2Zmc2V0OwotICAgIHN0cnVjdHVyZSA9
IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1
cnJlbnRseShvbGRTdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSwgMCwgcHJvcGVydHlPZmZzZXQpOwot
Ci0gICAgaWYgKCFzdHJ1Y3R1cmUgfHwgIXN0cnVjdHVyZS0+aXNPYmplY3QoKSB8fCBzdHJ1Y3R1
cmUtPmlzRGljdGlvbmFyeSgpIHx8ICFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNo
ZWFibGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gU2tpcCBvcHRpbWl6aW5n
IHRoZSBjYXNlIHdoZXJlIHdlIG5lZWQgYSByZWFsbG9jLCBpZiB3ZSBkb24ndCBoYXZlCi0gICAg
Ly8gZW5vdWdoIHJlZ2lzdGVycyB0byBtYWtlIGl0IGhhcHBlbi4KLSAgICBpZiAoR1BSSW5mbzo6
bnVtYmVyT2ZSZWdpc3RlcnMgPCA2Ci0gICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSAhPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkKLSAgICAgICAgJiYg
b2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICAvLyBTa2lwIG9wdGltaXppbmcgdGhlIGNhc2Ugd2hlcmUgd2UgbmVl
ZCByZWFsbG9jLCBhbmQgdGhlIHN0cnVjdHVyZSBoYXMKLSAgICAvLyBpbmRleGluZyBzdG9yYWdl
LgotICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3Qgc2tpcCB0aGlzISBJbXBsZW1lbnQgaXQhCi0g
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMDkxNAotICAg
IGlmIChvbGRTdHJ1Y3R1cmUtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGlmIChwdXRLaW5kID09IE5vdERpcmVjdCkgewotICAgICAgICBj
b25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3MoCi0g
ICAgICAgICAgICAqdm0sIGV4ZWMtPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKSwgZXhl
Yywgc3RydWN0dXJlLCBpZGVudC5pbXBsKCkpOwotICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5p
c1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQ29kZUxv
Y2F0aW9uTGFiZWwgZmFpbHVyZUxhYmVsID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxh
YmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSk7Ci0gICAgUmVm
UHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUgPSBzdHViSW5mby5zdHViUm91dGluZTsK
LQotICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRj
aC5iYXNlR1BSKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIEdQUlJlZyB2YWx1ZVRhZ0dQ
UiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVUYWdHUFIpOwotI2Vu
ZGlmCi0gICAgR1BSUmVnIHZhbHVlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5w
YXRjaC52YWx1ZUdQUik7Ci0gICAgCi0gICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9j
YXRvcihzdHViSW5mby5wYXRjaC51c2VkUmVnaXN0ZXJzKTsKLSAgICBhbGxvY2F0b3IubG9jayhi
YXNlR1BSKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIGFsbG9jYXRvci5sb2NrKHZhbHVl
VGFnR1BSKTsKLSNlbmRpZgotICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlR1BSKTsKLSAgICAKLSAg
ICBDQ2FsbEhlbHBlcnMgc3R1YkppdCh2bSk7Ci0gICAgCi0gICAgYm9vbCBuZWVkVGhpcmRTY3Jh
dGNoID0gZmFsc2U7Ci0gICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBv
bGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkKLSAgICAgICAgJiYgb2xkU3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgIG5lZWRUaGlyZFNjcmF0Y2ggPSB0cnVl
OwotICAgIH0KLQotICAgIEdQUlJlZyBzY3JhdGNoR1BSMSA9IGFsbG9jYXRvci5hbGxvY2F0ZVNj
cmF0Y2hHUFIoKTsKLSAgICBBU1NFUlQoc2NyYXRjaEdQUjEgIT0gYmFzZUdQUik7Ci0gICAgQVNT
RVJUKHNjcmF0Y2hHUFIxICE9IHZhbHVlR1BSKTsKLSAgICAKLSAgICBHUFJSZWcgc2NyYXRjaEdQ
UjIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7Ci0gICAgQVNTRVJUKHNjcmF0Y2hH
UFIyICE9IGJhc2VHUFIpOwotICAgIEFTU0VSVChzY3JhdGNoR1BSMiAhPSB2YWx1ZUdQUik7Ci0g
ICAgQVNTRVJUKHNjcmF0Y2hHUFIyICE9IHNjcmF0Y2hHUFIxKTsKLQotICAgIEdQUlJlZyBzY3Jh
dGNoR1BSMzsKLSAgICBpZiAobmVlZFRoaXJkU2NyYXRjaCkgewotICAgICAgICBzY3JhdGNoR1BS
MyA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKLSAgICAgICAgQVNTRVJUKHNjcmF0
Y2hHUFIzICE9IGJhc2VHUFIpOwotICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjMgIT0gdmFsdWVH
UFIpOwotICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjMgIT0gc2NyYXRjaEdQUjEpOwotICAgICAg
ICBBU1NFUlQoc2NyYXRjaEdQUjMgIT0gc2NyYXRjaEdQUjIpOwotICAgIH0gZWxzZQotICAgICAg
ICBzY3JhdGNoR1BSMyA9IEludmFsaWRHUFJSZWc7Ci0gICAgCi0gICAgc2l6ZV90IG51bWJlck9m
UGFkZGluZ0J5dGVzID0gYWxsb2NhdG9yLnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5n
KHN0dWJKaXQpOwotCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsK
LSAgICAgICAgICAgIAotICAgIEFTU0VSVChvbGRTdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBv
aW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOwotICAgIAotICAgIGZhaWx1cmVDYXNlcy5hcHBl
bmQoc3R1YkppdC5icmFuY2hTdHJ1Y3R1cmUoCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSksIAotICAgICAgICBvbGRTdHJ1Y3R1cmUpKTsKLSAgICAKLSAg
ICBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9ucygKLSAgICAgICAgY29uZGl0aW9uU2V0LCBl
eGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8sIHN0dWJKaXQsIGZhaWx1cmVDYXNlcywgc2NyYXRj
aEdQUjEpOwotCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwotICAgIAot
ICAgIGJvb2wgc2NyYXRjaEdQUjFIYXNTdG9yYWdlID0gZmFsc2U7Ci0gICAgCi0gICAgaWYgKHN0
cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNh
cGFjaXR5KCkpIHsKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBzdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7Ci0gICAgICAgIENvcGllZEFsbG9jYXRvciog
Y29waWVkQWxsb2NhdG9yID0gJnZtLT5oZWFwLnN0b3JhZ2VBbGxvY2F0b3IoKTsKLSAgICAgICAg
Ci0gICAgICAgIGlmICghb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAg
ICAgICAgICBzdHViSml0LmxvYWRQdHIoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWlu
aW5nLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoc3R1YkppdC5i
cmFuY2hTdWJQdHIoTWFjcm9Bc3NlbWJsZXI6OlNpZ25lZCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRjaEdQUjEpKTsKLSAgICAgICAgICAgIHN0dWJKaXQuc3Rv
cmVQdHIoc2NyYXRjaEdQUjEsICZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZyk7
Ci0gICAgICAgICAgICBzdHViSml0Lm5lZ1B0cihzY3JhdGNoR1BSMSk7Ci0gICAgICAgICAgICBz
dHViSml0LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKCZjb3BpZWRBbGxv
Y2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQpLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgICAgICBz
dHViSml0LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1ZhbHVl
KSksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNpemVfdCBv
bGRTaXplID0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFs
dWUpOwotICAgICAgICAgICAgQVNTRVJUKG5ld1NpemUgPiBvbGRTaXplKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIzKTsKLSAgICAg
ICAgICAgIHN0dWJKaXQubG9hZFB0cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5p
bmcsIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChzdHViSml0LmJy
YW5jaFN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6U2lnbmVkLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BSMSkpOwotICAgICAgICAgICAgc3R1YkppdC5zdG9y
ZVB0cihzY3JhdGNoR1BSMSwgJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsK
LSAgICAgICAgICAgIHN0dWJKaXQubmVnUHRyKHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAgIHN0
dWJKaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9j
YXRvci0+bV9jdXJyZW50UGF5bG9hZEVuZCksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAgIHN0
dWJKaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEpTVmFsdWUp
KSwgc2NyYXRjaEdQUjEpOwotICAgICAgICAgICAgLy8gV2UgaGF2ZSBzY3JhdGNoR1BSMSA9IG5l
dyBzdG9yYWdlLCBzY3JhdGNoR1BSMyA9IG9sZCBzdG9yYWdlLCBzY3JhdGNoR1BSMiA9IGF2YWls
YWJsZQotICAgICAgICAgICAgZm9yIChzaXplX3Qgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgb2xkU2l6
ZTsgb2Zmc2V0ICs9IHNpemVvZih2b2lkKikpIHsKLSAgICAgICAgICAgICAgICBzdHViSml0Lmxv
YWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjMsIC1zdGF0aWNfY2FzdDxw
dHJkaWZmX3Q+KG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZih2b2lkKikpKSwgc2Ny
YXRjaEdQUjIpOwotICAgICAgICAgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCAtc3RhdGljX2Nhc3Q8cHRyZGlm
Zl90PihvZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2Yodm9pZCopKSkpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzdHViSml0LnN0b3JlUHRyKHNj
cmF0Y2hHUFIxLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpKTsKLSAgICAgICAgc2NyYXRjaEdQUjFIYXNTdG9yYWdlID0gdHJ1ZTsK
LSAgICB9Ci0KLSAgICBBU1NFUlQob2xkU3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKSA9PSBz
dHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpKTsKLSAgICBBU1NFUlQob2xkU3RydWN0dXJlLT50
eXBlSW5mbygpLmlubGluZVR5cGVGbGFncygpID09IHN0cnVjdHVyZS0+dHlwZUluZm8oKS5pbmxp
bmVUeXBlRmxhZ3MoKSk7Ci0gICAgQVNTRVJUKG9sZFN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkg
PT0gc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICB1
aW50MzJfdCB2YWwgPSBzdHJ1Y3R1cmUtPmlkKCk7Ci0jZWxzZQotICAgIHVpbnQzMl90IHZhbCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KHN0cnVjdHVyZS0+aWQoKSk7Ci0jZW5kaWYKLSAg
ICBzdHViSml0LnN0b3JlMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih2YWwpLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
KTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hl
ZE9mZnNldCgpKSkKLSAgICAgICAgc3R1YkppdC5zdG9yZTY0KHZhbHVlR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkg
KyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNW
YWx1ZSkpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKCFzY3JhdGNoR1BSMUhhc1N0b3JhZ2Up
Ci0gICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUjEpOwotICAgICAg
ICBzdHViSml0LnN0b3JlNjQodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0
Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihK
U1ZhbHVlKSkpOwotICAgIH0KLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgaWYgKGlzSW5s
aW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSB7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUz
Mih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9m
ZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVk
T2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1
ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwotICAgICAgICBzdHViSml0LnN0b3JlMzIo
dmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0Ojpv
ZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hl
ZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFs
dWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICgh
c2NyYXRjaEdQUjFIYXNTdG9yYWdlKQotICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSks
IHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNo
ZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZh
bHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUz
Mih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNl
dEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JK
RUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7Ci0gICAg
fQotI2VuZGlmCi0gICAgCi0gICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IG51bGxw
dHI7Ci0KLSNpZiBFTkFCTEUoR0dDKQotICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxGbHVz
aFdyaXRlQmFycmllckJ1ZmZlcjsKLSAgICBpZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gc3R1YkppdC5qdW1w
SWZJc1JlbWVtYmVyZWRPckluRWRlbihiYXNlR1BSKTsKLSAgICAgICAgV3JpdGVCYXJyaWVyQnVm
ZmVyJiB3cml0ZUJhcnJpZXJCdWZmZXIgPSBzdHViSml0LnZtKCktPmhlYXAud3JpdGVCYXJyaWVy
QnVmZmVyKCk7Ci0gICAgICAgIHN0dWJKaXQubG9hZDMyKHdyaXRlQmFycmllckJ1ZmZlci5jdXJy
ZW50SW5kZXhBZGRyZXNzKCksIHNjcmF0Y2hHUFIyKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgbmVlZFRvRmx1c2ggPQotICAgICAgICAgICAgc3R1YkppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzY3JhdGNoR1BSMiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMih3cml0ZUJhcnJpZXJCdWZmZXIuY2FwYWNpdHkoKSkpOwotCi0gICAgICAgIHN0dWJK
aXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaEdQUjIpOwot
ICAgICAgICBzdHViSml0LnN0b3JlMzIoc2NyYXRjaEdQUjIsIHdyaXRlQmFycmllckJ1ZmZlci5j
dXJyZW50SW5kZXhBZGRyZXNzKCkpOwotCi0gICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cih3cml0ZUJhcnJpZXJCdWZmZXIuYnVmZmVyKCkpLCBzY3JhdGNo
R1BSMSk7Ci0gICAgICAgIC8vIFdlIHVzZSBhbiBvZmZzZXQgb2YgLXNpemVvZih2b2lkKikgYmVj
YXVzZSB3ZSBhbHJlYWR5IGFkZGVkIDEgdG8gc2NyYXRjaEdQUjIuCi0gICAgICAgIHN0dWJKaXQu
c3RvcmVQdHIoYmFzZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzY3JhdGNoR1BSMSwg
c2NyYXRjaEdQUjIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgc3RhdGljX2Nhc3Q8aW50MzJf
dD4oLXNpemVvZih2b2lkKikpKSk7Ci0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9u
ZVdpdGhCYXJyaWVyID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgICAgIG5lZWRUb0ZsdXNoLmxpbmso
JnN0dWJKaXQpOwotCi0gICAgICAgIHNjcmF0Y2hCdWZmZXIgPSB2bS0+c2NyYXRjaEJ1ZmZlckZv
clNpemUoYWxsb2NhdG9yLmRlc2lyZWRTY3JhdGNoQnVmZmVyU2l6ZUZvckNhbGwoKSk7Ci0gICAg
ICAgIGFsbG9jYXRvci5wcmVzZXJ2ZVVzZWRSZWdpc3RlcnNUb1NjcmF0Y2hCdWZmZXJGb3JDYWxs
KHN0dWJKaXQsIHNjcmF0Y2hCdWZmZXIsIHNjcmF0Y2hHUFIyKTsKLSAgICAgICAgc3R1YkppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUdQUik7Ci0gICAgICAgIGNhbGxGbHVzaFdy
aXRlQmFycmllckJ1ZmZlciA9IHN0dWJKaXQuY2FsbCgpOwotICAgICAgICBhbGxvY2F0b3IucmVz
dG9yZVVzZWRSZWdpc3RlcnNGcm9tU2NyYXRjaEJ1ZmZlckZvckNhbGwoc3R1YkppdCwgc2NyYXRj
aEJ1ZmZlciwgc2NyYXRjaEdQUjIpOwotCi0gICAgICAgIGRvbmVXaXRoQmFycmllci5saW5rKCZz
dHViSml0KTsKLSAgICAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKCZzdHViSml0
KTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3M7Ci0g
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbHVyZTsKLSAgICAgICAgICAgIAotICAgIGlmIChh
bGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMoKSkgewotICAgICAgICBhbGxvY2F0b3IucmVzdG9y
ZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhzdHViSml0LCBudW1iZXJPZlBhZGRpbmdCeXRlcyk7
Ci0gICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKLQotICAgICAgICBmYWlsdXJlQ2Fz
ZXMubGluaygmc3R1YkppdCk7Ci0gICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0
ZXJzQnlQb3BwaW5nKHN0dWJKaXQsIG51bWJlck9mUGFkZGluZ0J5dGVzKTsKLSAgICAgICAgZmFp
bHVyZSA9IHN0dWJKaXQuanVtcCgpOwotICAgIH0gZWxzZQotICAgICAgICBzdWNjZXNzID0gc3R1
YkppdC5qdW1wKCk7Ci0gICAgCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgb3BlcmF0aW9uQ2Fs
bDsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzSW5TbG93UGF0aDsKLSAgICAKLSAg
ICBpZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICBzbG93UGF0aC5saW5rKCZzdHViSml0KTsKLSAg
ICAgICAgCi0gICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5n
KHN0dWJKaXQsIG51bWJlck9mUGFkZGluZ0J5dGVzKTsKLSAgICAgICAgaWYgKCFzY3JhdGNoQnVm
ZmVyKQotICAgICAgICAgICAgc2NyYXRjaEJ1ZmZlciA9IHZtLT5zY3JhdGNoQnVmZmVyRm9yU2l6
ZShhbGxvY2F0b3IuZGVzaXJlZFNjcmF0Y2hCdWZmZXJTaXplRm9yQ2FsbCgpKTsKLSAgICAgICAg
YWxsb2NhdG9yLnByZXNlcnZlVXNlZFJlZ2lzdGVyc1RvU2NyYXRjaEJ1ZmZlckZvckNhbGwoc3R1
YkppdCwgc2NyYXRjaEJ1ZmZlciwgc2NyYXRjaEdQUjEpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoc2xvdC5jYWNoZWRPZmZzZXQoKSksIHZhbHVlR1BSKTsKLSNlbHNlCi0gICAgICAg
IHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VHUFIsIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoc2xvdC5jYWNoZWRPZmZzZXQoKSksIHZhbHVlR1BSLCB2YWx1ZVRhZ0dQUik7Ci0jZW5kaWYK
LSAgICAgICAgb3BlcmF0aW9uQ2FsbCA9IHN0dWJKaXQuY2FsbCgpOwotICAgICAgICBhbGxvY2F0
b3IucmVzdG9yZVVzZWRSZWdpc3RlcnNGcm9tU2NyYXRjaEJ1ZmZlckZvckNhbGwoc3R1YkppdCwg
c2NyYXRjaEJ1ZmZlciwgc2NyYXRjaEdQUjEpOwotICAgICAgICBzdWNjZXNzSW5TbG93UGF0aCA9
IHN0dWJKaXQuanVtcCgpOwotICAgIH0KLSAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVy
KCp2bSwgc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCksIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7
Ci0gICAgaWYgKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRv
RG9uZSkpOwotICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMoKSkKLSAgICAgICAg
cGF0Y2hCdWZmZXIubGluayhmYWlsdXJlLCBmYWlsdXJlTGFiZWwpOwotICAgIGVsc2UKLSAgICAg
ICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMsIGZhaWx1cmVMYWJlbCk7Ci0gICAgaWYg
KHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhvcGVyYXRpb25DYWxsLCBv
cGVyYXRpb25SZWFsbG9jYXRlU3RvcmFnZUFuZEZpbmlzaFB1dCk7Ci0gICAgICAgIHBhdGNoQnVm
ZmVyLmxpbmsoc3VjY2Vzc0luU2xvd1BhdGgsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5s
YWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSkpOwotI2lmIEVOQUJM
RShHR0MpCi0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbEZsdXNoV3JpdGVCYXJyaWVyQnVm
ZmVyLCBvcGVyYXRpb25GbHVzaFdyaXRlQmFycmllckJ1ZmZlcik7Ci0jZW5kaWYKLSAgICB9Ci0g
ICAgCi0gICAgc3R1YlJvdXRpbmUgPQotICAgICAgICBjcmVhdGVKSVRTdHViUm91dGluZSgKLSAg
ICAgICAgICAgIEZJTkFMSVpFX0NPREVfRk9SKAotICAgICAgICAgICAgICAgIGV4ZWMtPmNvZGVC
bG9jaygpLCBwYXRjaEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAoIlB1dEJ5SWQgJXN0cmFuc2l0
aW9uIHN0dWIgKCVwIC0+ICVwKSBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICAg
ICAgICAgICAgIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUt
Pm91dE9mTGluZUNhcGFjaXR5KCkgPyAicmVhbGxvY2F0aW5nICIgOiAiIiwKLSAgICAgICAgICAg
ICAgICAgICAgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsCi0gICAgICAgICAgICAgICAgICAgIHRv
Q1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwgc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5w
YXRjaC5kZWx0YUNhbGxUb0RvbmUpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKSwKLSAgICAgICAgICAg
ICp2bSwKLSAgICAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKSwK
LSAgICAgICAgICAgIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1
cmUtPm91dE9mTGluZUNhcGFjaXR5KCksCi0gICAgICAgICAgICBzdHJ1Y3R1cmUpOwotICAgIAot
ICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5v
blN0cmljdE9wdGltaXplOworICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0
aW1pemU7CiB9CiAKIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNv
bnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQpAQCAtMTI0NSw3ICszNDks
OCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAgICAgICAgIHJl
dHVybiBHaXZlVXBPbkNhY2hlOwogICAgIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhl
Yy0+Y29kZUJsb2NrKCk7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgU2NyaXB0RXhl
Y3V0YWJsZSogb3duZXIgPSBjb2RlQmxvY2stPm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpOworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAKICAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKICAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CkBAIC0xMjU2LDIxMCArMzYxLDEwOCBAQCBzdGF0
aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAgICAgaWYgKCFzdHJ1Y3R1cmUt
PnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKICAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7CiAKLSAgICAvLyBPcHRpbWl6ZSBzZWxmIGFjY2Vzcy4KKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8QWNjZXNzQ2FzZT4gbmV3Q2FzZTsKKwogICAgIGlmIChzbG90LmJhc2UoKSA9PSBiYXNlVmFs
dWUgJiYgc2xvdC5pc0NhY2hlYWJsZVB1dCgpKSB7Ci0gICAgICAgIGlmIChzbG90LnR5cGUoKSA9
PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5KSB7CisgICAgICAgIGlmIChzbG90LnR5cGUo
KSA9PSBQdXRQcm9wZXJ0eVNsb3Q6OkV4aXN0aW5nUHJvcGVydHkpIHsKKyAgICAgICAgICAgIHN0
cnVjdHVyZS0+ZGlkQ2FjaGVQcm9wZXJ0eVJlcGxhY2VtZW50KHZtLCBzbG90LmNhY2hlZE9mZnNl
dCgpKTsKKyAgICAgICAgCisgICAgICAgICAgICBwdHJkaWZmX3Qgb2Zmc2V0VG9QYXRjaGVkU3Rv
cmFnZSA9IG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgp
KTsKKyAgICAgICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpVbnNl
dAorICAgICAgICAgICAgICAgICYmIE1hY3JvQXNzZW1ibGVyOjppc1B0ckFsaWduZWRBZGRyZXNz
T2Zmc2V0KG9mZnNldFRvUGF0Y2hlZFN0b3JhZ2UpCisgICAgICAgICAgICAgICAgJiYgIXN0cnVj
dHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKSB7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKAorICAgICAgICAgICAgICAg
ICAgICBjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCks
CisgICAgICAgICAgICAgICAgICAgIGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlv
bihzbG90LCBwdXRLaW5kKSwgZmFsc2UpOworICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRQ
dXRCeUlkUmVwbGFjZSgKKyAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmU7Ci0gICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCBjb25kaXRpb25TZXQ7Ci0gICAgICAgICAgICBpZiAoIWVtaXRQdXRUcmFuc2l0
aW9uU3R1YihleGVjLCB2bSwgc3RydWN0dXJlLCBpZGVudCwgc2xvdCwgc3R1YkluZm8sIHB1dEtp
bmQsIG9sZFN0cnVjdHVyZSwgY29uZGl0aW9uU2V0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
R2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpyZXBsYWNl
KHZtLCBvd25lciwgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6
Ok5ld1Byb3BlcnR5KTsKIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1w
KAotICAgICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZz
ZXQoCi0gICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCks
Ci0gICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8uc3R1YlJvdXRpbmUt
PmNvZGUoKS5jb2RlKCkpKTsKLSAgICAgICAgICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUxpc3RCdWlsZGluZ1B1dEJ5SWRG
dW5jdGlvbihzbG90LCBwdXRLaW5kKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN0dWJJ
bmZvLmluaXRQdXRCeUlkVHJhbnNpdGlvbigqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCksIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIHB1dEtpbmQgPT0gRGly
ZWN0KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsK
LSAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPmlzT2JqZWN0KCkgfHwgc3Ry
dWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25D
YWNoZTsKIAotICAgICAgICBpZiAoIU1hY3JvQXNzZW1ibGVyOjppc1B0ckFsaWduZWRBZGRyZXNz
T2Zmc2V0KG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgp
KSkpCi0gICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldDsKKyAgICAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0K
KyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3Rp
bmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkoCisgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwg
aWRlbnQuaW1wbCgpLCAwLCBvZmZzZXQpOworICAgICAgICAgICAgaWYgKCFuZXdTdHJ1Y3R1cmUg
fHwgIW5ld1N0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogCi0gICAgICAgIHN0cnVjdHVyZS0+ZGlk
Q2FjaGVQcm9wZXJ0eVJlcGxhY2VtZW50KCp2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7Ci0gICAg
ICAgIHJlcGF0Y2hCeUlkU2VsZkFjY2Vzcygqdm0sIGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVj
dHVyZSwgaWRlbnQsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIGFwcHJvcHJpYXRlTGlzdEJ1aWxkaW5n
UHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpLCBmYWxzZSk7Ci0gICAgICAgIHN0dWJJbmZv
LmluaXRQdXRCeUlkUmVwbGFjZSgqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0
cnVjdHVyZSk7Ci0gICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0gICAgfQorICAgICAg
ICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+cHJldmlvdXNJRCgpID09IHN0cnVjdHVyZSk7Cisg
ICAgICAgICAgICBBU1NFUlQoIW5ld1N0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpOworICAgICAg
ICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+aXNPYmplY3QoKSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAgICAg
ICAgICAgIGlmIChwdXRLaW5kID09IE5vdERpcmVjdCkgeworICAgICAgICAgICAgICAgIGNvbmRp
dGlvblNldCA9CisgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3Bl
cnR5U2V0dGVyTWlzcygKKyAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBvd25lciwgZXhlYywg
bmV3U3RydWN0dXJlLCBpZGVudC5pbXBsKCkpOworICAgICAgICAgICAgICAgIGlmICghY29uZGl0
aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7CisgICAgICAgICAgICB9CiAKLSAgICBpZiAoKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSB8
fCBzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkpCi0gICAgICAgICYmIHN0dWJJbmZvLnBhdGNoLnNw
aWxsTW9kZSA9PSBEb250U3BpbGwpIHsKLSAgICAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBz
dHViUm91dGluZTsKKyAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjp0cmFuc2l0aW9u
KHZtLCBvd25lciwgc3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIG9mZnNldCwgY29uZGl0aW9uU2V0
KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpIHx8
IHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSkgeworICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJs
ZUN1c3RvbSgpKSB7CisgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25k
aXRpb25TZXQ7CiAKLSAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9u
U2V0OwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7Ci0gICAgICAgIGlmIChzbG90LmJh
c2UoKSAhPSBiYXNlVmFsdWUpIHsKLSAgICAgICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlQ3Vz
dG9tKCkpIHsKKyAgICAgICAgICAgIGlmIChzbG90LmJhc2UoKSAhPSBiYXNlVmFsdWUpIHsKICAg
ICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPQogICAgICAgICAgICAgICAgICAgICBnZW5lcmF0
ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdEN1c3RvbSgKLSAgICAgICAgICAgICAg
ICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0
dXJlLCBzbG90LmJhc2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50LmltcGwoKSk7
Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9Ci0g
ICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5
SGl0KAotICAgICAgICAgICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBvd25lciwg
ZXhlYywgc3RydWN0dXJlLCBzbG90LmJhc2UoKSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAg
ICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBHaXZlVXBPbkNhY2hlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFjb25k
aXRpb25TZXQuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hl
OwotICAgICAgICAgICAgb2Zmc2V0ID0gc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpID8gaW52YWxp
ZE9mZnNldCA6IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpOwotICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0K
LSAgICAgICAgUG9seW1vcnBoaWNQdXRCeUlkTGlzdCogbGlzdDsKLSAgICAgICAgbGlzdCA9IFBv
bHltb3JwaGljUHV0QnlJZExpc3Q6OmZyb20ocHV0S2luZCwgc3R1YkluZm8pOwotCi0gICAgICAg
IGJvb2wgcmVzdWx0ID0gZ2VuZXJhdGVCeUlkU3R1YigKLSAgICAgICAgICAgIGV4ZWMsIGtpbmRG
b3Ioc2xvdCksIGlkZW50LCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBjb25kaXRpb25TZXQs
IHNsb3QuYmFzZSgpLAotICAgICAgICAgICAgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGZhbHNlLCBudWxs
cHRyLAotICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZz
ZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSwKLSAgICAgICAgICAgIHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2Fs
bFRvU2xvd0Nhc2UpLAotICAgICAgICAgICAgc3R1YlJvdXRpbmUpOwotICAgICAgICBpZiAoIXJl
c3VsdCkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAKLSAgICAg
ICAgbGlzdC0+YWRkQWNjZXNzKFB1dEJ5SWRBY2Nlc3M6OnNldHRlcigKLSAgICAgICAgICAgICp2
bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKLSAgICAgICAgICAgIHNsb3QuaXNDYWNo
ZWFibGVTZXR0ZXIoKSA/IFB1dEJ5SWRBY2Nlc3M6OlNldHRlciA6IFB1dEJ5SWRBY2Nlc3M6OkN1
c3RvbVNldHRlciwKLSAgICAgICAgICAgIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBzbG90LmN1
c3RvbVNldHRlcigpLCBzdHViUm91dGluZSkpOwotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoSnVtcChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJ
bmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5l
LT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUxpc3RCdWlsZGluZ1B1dEJ5SWRGdW5j
dGlvbihzbG90LCBwdXRLaW5kKSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFsaXN0LT5pc0Z1
bGwoKSk7Ci0gICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0gICAgfQotCi0gICAgcmV0
dXJuIEdpdmVVcE9uQ2FjaGU7Ci19Ci0KLXZvaWQgcmVwYXRjaFB1dEJ5SUQoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKLXsKLSAgICBHQ1NhZmVDb25j
dXJyZW50SklUTG9ja2VyIGxvY2tlcihleGVjLT5jb2RlQmxvY2soKS0+bV9sb2NrLCBleGVjLT52
bSgpLmhlYXApOwotICAgIAotICAgIGlmICh0cnlDYWNoZVB1dEJ5SUQoZXhlYywgYmFzZVZhbHVl
LCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQpID09IEdp
dmVVcE9uQ2FjaGUpCi0gICAgICAgIHJlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlv
bihzbG90LCBwdXRLaW5kKSk7Ci19CiAKLXN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWls
ZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFBy
b3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1
dEtpbmQpCi17Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsK
LSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLQotICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgp
KQotICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgIGlmICghc2xvdC5pc0NhY2hl
YWJsZVB1dCgpICYmICFzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgJiYgIXNsb3QuaXNDYWNoZWFi
bGVTZXR0ZXIoKSkKLSAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICBpZiAoIXN0
cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQotICAgICAgICByZXR1cm4g
R2l2ZVVwT25DYWNoZTsKLQotICAgIC8vIE9wdGltaXplIHNlbGYgYWNjZXNzLgotICAgIGlmIChz
bG90LmJhc2UoKSA9PSBiYXNlVmFsdWUgJiYgc2xvdC5pc0NhY2hlYWJsZVB1dCgpKSB7Ci0gICAg
ICAgIFBvbHltb3JwaGljUHV0QnlJZExpc3QqIGxpc3Q7Ci0gICAgICAgIFJlZlB0cjxKSVRTdHVi
Um91dGluZT4gc3R1YlJvdXRpbmU7Ci0gICAgICAgIAotICAgICAgICBpZiAoc2xvdC50eXBlKCkg
PT0gUHV0UHJvcGVydHlTbG90OjpOZXdQcm9wZXJ0eSkgewotICAgICAgICAgICAgbGlzdCA9IFBv
bHltb3JwaGljUHV0QnlJZExpc3Q6OmZyb20ocHV0S2luZCwgc3R1YkluZm8pOwotICAgICAgICAg
ICAgaWYgKGxpc3QtPmlzRnVsbCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOyAvLyBXaWxsIGdldCBoZXJlIGR1ZSB0byByZWN1cnNpb24uCi0KLSAgICAgICAgICAgIFN0
cnVjdHVyZSogb2xkU3RydWN0dXJlOworICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6
OnNldHRlcigKKyAgICAgICAgICAgICAgICB2bSwgb3duZXIsIEFjY2Vzc0Nhc2U6OkN1c3RvbVNl
dHRlciwgc3RydWN0dXJlLCBpbnZhbGlkT2Zmc2V0LCBjb25kaXRpb25TZXQsCisgICAgICAgICAg
ICAgICAgc2xvdC5jdXN0b21TZXR0ZXIoKSk7CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7Ci0gICAgICAgICAgICBp
ZiAoIWVtaXRQdXRUcmFuc2l0aW9uU3R1YihleGVjLCB2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5h
bWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kLCBvbGRTdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQ7CiAKLSAgICAgICAgICAgIHN0dWJSb3V0aW5lID0gc3R1YkluZm8u
c3R1YlJvdXRpbmU7Ci0gICAgICAgICAgICBsaXN0LT5hZGRBY2Nlc3MoCi0gICAgICAgICAgICAg
ICAgUHV0QnlJZEFjY2Vzczo6dHJhbnNpdGlvbigKLSAgICAgICAgICAgICAgICAgICAgKnZtLCBj
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAotICAgICAgICAgICAgICAgICAgICBvbGRTdHJ1
Y3R1cmUsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LAotICAgICAgICAgICAgICAgICAgICBzdHVi
Um91dGluZSkpOworICAgICAgICAgICAgaWYgKHNsb3QuYmFzZSgpICE9IGJhc2VWYWx1ZSkgewor
ICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9CisgICAgICAgICAgICAgICAgICAgIGdlbmVy
YXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAorICAgICAgICAgICAgICAgICAg
ICAgICAgdm0sIG93bmVyLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLCBpZGVudC5pbXBs
KCkpOworICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICAgICAgb2Zm
c2V0ID0gY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCk7CisgICAgICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgp
OwogCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBsaXN0ID0gUG9seW1vcnBoaWNQdXRC
eUlkTGlzdDo6ZnJvbShwdXRLaW5kLCBzdHViSW5mbyk7Ci0gICAgICAgICAgICBpZiAobGlzdC0+
aXNGdWxsKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7IC8vIFdpbGwg
Z2V0IGhlcmUgZHVlIHRvIHJlY3Vyc2lvbi4KLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3Ry
dWN0dXJlLT5kaWRDYWNoZVByb3BlcnR5UmVwbGFjZW1lbnQoKnZtLCBzbG90LmNhY2hlZE9mZnNl
dCgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gV2UncmUgbm93IGNvbW1pdHRlZCB0
byBjcmVhdGluZyB0aGUgc3R1Yi4gTW9ncmlmeSB0aGUgbWV0YS1kYXRhIGFjY29yZGluZ2x5Lgot
ICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBlbWl0UHV0UmVwbGFjZVN0dWIoCi0gICAgICAgICAg
ICAgICAgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgCi0gICAgICAgICAgICAg
ICAgc3RydWN0dXJlLCBDb2RlTG9jYXRpb25MYWJlbChsaXN0LT5jdXJyZW50U2xvd1BhdGhUYXJn
ZXQoKSksIHN0dWJSb3V0aW5lKTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAg
ICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBs
aXN0LT5hZGRBY2Nlc3MoCi0gICAgICAgICAgICAgICAgUHV0QnlJZEFjY2Vzczo6cmVwbGFjZSgK
LSAgICAgICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAot
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIHN0dWJSb3V0aW5lKSk7CisgICAgICAgICAg
ICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6c2V0dGVyKAorICAgICAgICAgICAgICAgIHZtLCBvd25l
ciwgQWNjZXNzQ2FzZTo6U2V0dGVyLCBzdHJ1Y3R1cmUsIG9mZnNldCwgY29uZGl0aW9uU2V0LCBu
dWxscHRyKTsKICAgICAgICAgfQotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAo
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5k
ZWx0YUNhbGxUb0p1bXApLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNv
ZGUoKSkpOwotICAgICAgICBpZiAobGlzdC0+aXNGdWxsKCkpCi0gICAgICAgICAgICByZXBhdGNo
Q2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVH
ZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKLQotICAgICAgICByZXR1cm4g
UmV0cnlDYWNoZUxhdGVyOwogICAgIH0KIAotICAgIGlmICgoc2xvdC5pc0NhY2hlYWJsZUN1c3Rv
bSgpIHx8IHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSkKLSAgICAgICAgJiYgc3R1YkluZm8ucGF0
Y2guc3BpbGxNb2RlID09IERvbnRTcGlsbCkgewotICAgICAgICBSZWZQdHI8SklUU3R1YlJvdXRp
bmU+IHN0dWJSb3V0aW5lOwotICAgICAgICAKLSAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQgY29uZGl0aW9uU2V0OwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7Ci0gICAg
ICAgIGlmIChzbG90LmJhc2UoKSAhPSBiYXNlVmFsdWUpIHsKLSAgICAgICAgICAgIGlmIChzbG90
LmlzQ2FjaGVhYmxlQ3VzdG9tKCkpIHsKLSAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPQot
ICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0
eUhpdEN1c3RvbSgKLSAgICAgICAgICAgICAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBzbG90LmJhc2UoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHByb3BlcnR5TmFtZS5pbXBsKCkpOwotICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPQotICAgICAgICAgICAgICAgICAgICBnZW5l
cmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKLSAgICAgICAgICAgICAgICAg
ICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJl
LCBzbG90LmJhc2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZS5pbXBs
KCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxp
ZCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAg
b2Zmc2V0ID0gc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpID8gaW52YWxpZE9mZnNldCA6IGNvbmRp
dGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpOwotICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0KLSAgICAgICAgUG9seW1v
cnBoaWNQdXRCeUlkTGlzdCogbGlzdDsKLSAgICAgICAgbGlzdCA9IFBvbHltb3JwaGljUHV0QnlJ
ZExpc3Q6OmZyb20ocHV0S2luZCwgc3R1YkluZm8pOwotCi0gICAgICAgIGJvb2wgcmVzdWx0ID0g
Z2VuZXJhdGVCeUlkU3R1YigKLSAgICAgICAgICAgIGV4ZWMsIGtpbmRGb3Ioc2xvdCksIHByb3Bl
cnR5TmFtZSwgY3VzdG9tRm9yKHNsb3QpLCBzdHViSW5mbywgY29uZGl0aW9uU2V0LCBzbG90LmJh
c2UoKSwKLSAgICAgICAgICAgIG9mZnNldCwgc3RydWN0dXJlLCBmYWxzZSwgbnVsbHB0ciwKLSAg
ICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJ
bmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSksCi0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJl
bChsaXN0LT5jdXJyZW50U2xvd1BhdGhUYXJnZXQoKSksCi0gICAgICAgICAgICBzdHViUm91dGlu
ZSk7Ci0gICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7Ci0gICAgICAgIAotICAgICAgICBsaXN0LT5hZGRBY2Nlc3MoUHV0QnlJZEFjY2Vzczo6c2V0
dGVyKAotICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAotICAg
ICAgICAgICAgc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpID8gUHV0QnlJZEFjY2Vzczo6U2V0dGVy
IDogUHV0QnlJZEFjY2Vzczo6Q3VzdG9tU2V0dGVyLAotICAgICAgICAgICAgc3RydWN0dXJlLCBj
b25kaXRpb25TZXQsIHNsb3QuY3VzdG9tU2V0dGVyKCksIHN0dWJSb3V0aW5lKSk7Ci0KLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwgQ29kZUxvY2F0
aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICAgICAgaWYgKGxpc3Qt
PmlzRnVsbCgpKQotICAgICAgICAgICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihzbG90
LCBwdXRLaW5kKSk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIgPSBzdHViSW5m
by5hZGRBY2Nlc3NDYXNlKAorICAgICAgICB2bSwgY29kZUJsb2NrLCBpZGVudCwgc3RkOjptb3Zl
KG5ld0Nhc2UpKTsKKyAgICAKKyAgICBpZiAoIWNvZGVQdHIpCisgICAgICAgIHJldHVybiBHaXZl
VXBPbkNhY2hlOwogCi0gICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0gICAgfQotICAg
IHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgIHJlc2V0UHV0QnlJRENoZWNrQW5kTG9hZChzdHVi
SW5mbyk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKAorICAgICAgICBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KAorICAgICAgICAgICAgc3R1YkluZm8u
cGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoY29kZVB0
cikpOworICAgIAorICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CiB9CiAKLXZvaWQgYnVpbGRQ
dXRCeUlkTGlzdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9w
ZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRL
aW5kKQordm9pZCByZXBhdGNoUHV0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZh
bHVlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bywgUHV0S2luZCBwdXRLaW5kKQogewogICAgIEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXIgbG9j
a2VyKGV4ZWMtPmNvZGVCbG9jaygpLT5tX2xvY2ssIGV4ZWMtPnZtKCkuaGVhcCk7CiAgICAgCi0g
ICAgaWYgKHRyeUJ1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIHBy
b3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQpID09IEdpdmVVcE9uQ2FjaGUpCisg
ICAgaWYgKHRyeUNhY2hlUHV0QnlJRChleGVjLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgcHJvcGVy
dHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0S2luZCkgPT0gR2l2ZVVwT25DYWNoZSkKICAgICAg
ICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbiwgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsK
IH0KIApAQCAtMTQ3OSwxMDYgKzQ4MiwzNSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5
UmVwYXRjaEluKAogICAgIH0KICAgICAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMt
PmNvZGVCbG9jaygpOwotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gYmFzZS0+c3RydWN0dXJlKCp2bSk7CisgICAgU2NyaXB0RXhlY3V0YWJsZSog
b3duZXIgPSBjb2RlQmxvY2stPm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpOworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1cmUo
dm0pOwogICAgIAogICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsK
ICAgICBpZiAod2FzRm91bmQpIHsKICAgICAgICAgaWYgKHNsb3Quc2xvdEJhc2UoKSAhPSBiYXNl
KSB7CiAgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90
b3R5cGVQcm9wZXJ0eUhpdCgKLSAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudC5pbXBs
KCkpOworICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBl
eGVjLCBzdHJ1Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwgaWRlbnQuaW1wbCgpKTsKICAgICAgICAg
fQogICAgIH0gZWxzZSB7CiAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9u
c0ZvclByb3BlcnR5TWlzcygKLSAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBpZGVudC5pbXBsKCkpOworICAgICAgICAgICAgdm0s
IGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgaWRlbnQuaW1w
bCgpKTsKICAgICB9CiAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQogICAgICAgICBy
ZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAKLSAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVy
ZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdDsKLSAgICBpbnQgbGlzdEluZGV4OwotICAg
IAotICAgIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCA9IHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSk7
Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VMYWJlbDsKLSAgICAKLSAgICBpZiAoc3R1
YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpIHsKLSAgICAgICAgcG9seW1vcnBoaWNT
dHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCgpOwotICAg
ICAgICBzdHViSW5mby5pbml0SW5MaXN0KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgMCk7Ci0g
ICAgICAgIHNsb3dDYXNlTGFiZWwgPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxB
dE9mZnNldCgKLSAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2Up
OwotICAgICAgICBsaXN0SW5kZXggPSAwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2luX2xpc3QpOwotICAgICAgICBw
b2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBzdHViSW5mby51LmluTGlzdC5zdHJ1Y3R1cmVMaXN0
OwotICAgICAgICBsaXN0SW5kZXggPSBzdHViSW5mby51LmluTGlzdC5saXN0U2l6ZTsKLSAgICAg
ICAgc2xvd0Nhc2VMYWJlbCA9IENvZGVMb2NhdGlvbkxhYmVsKHBvbHltb3JwaGljU3RydWN0dXJl
TGlzdC0+bGlzdFtsaXN0SW5kZXggLSAxXS5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7Ci0g
ICAgICAgIAotICAgICAgICBpZiAobGlzdEluZGV4ID09IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVf
U0laRSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgIH0KLSAgICAKLSAg
ICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwotICAgIAotICAgIHsKLSAgICAg
ICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmJh
c2VHUFIpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihz
dHViSW5mby5wYXRjaC52YWx1ZUdQUik7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gVGVt
cFJlZ2lzdGVyU2V0KHN0dWJJbmZvLnBhdGNoLnVzZWRSZWdpc3RlcnMpLmdldEZyZWVHUFIoKTsK
LSAgICAgICAgCi0gICAgICAgIENDYWxsSGVscGVycyBzdHViSml0KHZtKTsKLSAgICAgICAgCi0g
ICAgICAgIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2g7Ci0gICAgICAgIGlmIChzY3JhdGNoR1BS
ID09IEludmFsaWRHUFJSZWcpIHsKLSAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBBc3NlbWJseUhl
bHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgcmVzdWx0R1BSKTsKLSAgICAgICAgICAg
IHN0dWJKaXQucHVzaFRvU2F2ZShzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIG5lZWRUb1Jlc3Rv
cmVTY3JhdGNoID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBuZWVkVG9SZXN0
b3JlU2NyYXRjaCA9IGZhbHNlOwotICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IGZhaWx1cmVDYXNlczsKLSAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0
LmJyYW5jaFN0cnVjdHVyZSgKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwK
LSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksCi0gICAgICAgICAgICBzdHJ1Y3R1cmUpKTsKLQotICAgICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgICAgICBpZiAoc3Ry
dWN0dXJlLT50eXBlSW5mbygpLm5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygpKQot
ICAgICAgICAgICAgdm0tPnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KGlkZW50
LCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwogCi0gICAgICAgIGlmIChzbG90
LndhdGNocG9pbnRTZXQoKSkKLSAgICAgICAgICAgIHNsb3Qud2F0Y2hwb2ludFNldCgpLT5hZGQo
c3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
QWNjZXNzQ2FzZT4gbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmluKAorICAgICAgICB2bSwgb3duZXIs
IHdhc0ZvdW5kID8gQWNjZXNzQ2FzZTo6SW5IaXQgOiBBY2Nlc3NDYXNlOjpJbk1pc3MsIHN0cnVj
dHVyZSwgY29uZGl0aW9uU2V0KTsKIAotICAgICAgICBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0
aW9ucygKLSAgICAgICAgICAgIGNvbmRpdGlvblNldCwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJ
bmZvLCBzdHViSml0LCBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOwotICAgICAgICAKLSNpZiBV
U0UoSlNWQUxVRTY0KQotICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHdhc0ZvdW5kKSkpLCByZXN1bHRHUFIp
OwotI2Vsc2UKLSAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIod2FzRm91bmQpLCByZXN1bHRHUFIpOwotI2VuZGlmCi0gICAgICAgIAotICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzLCBmYWlsOwotICAgICAgICAKLSAgICAgICAgZW1pdFJl
c3RvcmVTY3JhdGNoKHN0dWJKaXQsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzY3JhdGNoR1BSLCBz
dWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMpOwotICAgICAgICAKLSAgICAgICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcigqdm0sIHN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygpLCBKSVRDb21waWxh
dGlvbkNhbkZhaWwpOwotICAgICAgICBpZiAocGF0Y2hCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUo
KSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAKLSAgICAgICAg
bGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc3Vj
Y2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzLCBzdWNjZXNzTGFiZWwsIHNsb3dDYXNlTGFiZWwpOwot
ICAgICAgICAKLSAgICAgICAgc3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAot
ICAgICAgICAgICAgZXhlYy0+Y29kZUJsb2NrKCksIHBhdGNoQnVmZmVyLAotICAgICAgICAgICAg
KCJJbiAoZm91bmQgPSAlcykgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAg
ICAgICAgICAgd2FzRm91bmQgPyAieWVzIiA6ICJubyIsIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJs
b2NrKCkpLmRhdGEoKSwKLSAgICAgICAgICAgICAgICBzdWNjZXNzTGFiZWwuZXhlY3V0YWJsZUFk
ZHJlc3MoKSkpOwotICAgIH0KLSAgICAKLSAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxp
c3RbbGlzdEluZGV4XS5zZXQoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHVi
Um91dGluZSwgc3RydWN0dXJlLCB0cnVlKTsKLSAgICBzdHViSW5mby51LmluTGlzdC5saXN0U2l6
ZSsrOwotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVt
cCksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CisgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKHZt
LCBjb2RlQmxvY2ssIGlkZW50LCBzdGQ6Om1vdmUobmV3Q2FzZSkpOworICAgIGlmICghY29kZVB0
cikKKyAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
cmVwYXRjaEp1bXAoCisgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRP
ZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwKKyAgICAgICAgQ29kZUxvY2F0
aW9uTGFiZWwoY29kZVB0cikpOwogICAgIAotICAgIHJldHVybiBsaXN0SW5kZXggPCAoUE9MWU1P
UlBISUNfTElTVF9DQUNIRV9TSVpFIC0gMSkgPyBSZXRyeUNhY2hlTGF0ZXIgOiBHaXZlVXBPbkNh
Y2hlOworICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CiB9CiAKIHZvaWQgcmVwYXRjaEluKApA
QCAtMTkyOCwyMiArODYwLDcgQEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKAogdm9pZCByZXNl
dEdldEJ5SUQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bykKIHsKICAgICByZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbiwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKTsKLSAgICBDb2RlTG9jYXRpb25EYXRhTGFi
ZWwzMiBzdHJ1Y3R1cmVMYWJlbCA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFi
ZWwzMkF0T2Zmc2V0KC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0Y2guZGVsdGFDaGVja0ltbVRvQ2Fs
bCk7Ci0gICAgaWYgKE1hY3JvQXNzZW1ibGVyOjpjYW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJyYW5j
aDMyV2l0aFBhdGNoKCkpIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJldmVydEp1bXBSZXBs
YWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goCi0gICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6c3RhcnRPZlBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoT25BZGRyZXNzKHN0cnVj
dHVyZUxhYmVsKSwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAotICAgICAg
ICAgICAgICAgIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEPihzdHViSW5m
by5wYXRjaC5iYXNlR1BSKSwKLSAgICAgICAgICAgICAgICBKU0NlbGw6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4odW51c2VkUG9pbnRlcikp
OwotICAgIH0KLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEludDMyKHN0cnVjdHVyZUxhYmVs
LCBzdGF0aWNfY2FzdDxpbnQzMl90Pih1bnVzZWRQb2ludGVyKSk7Ci0jaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENvbXBhY3Qoc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNh
bGxUb0xvYWRPclN0b3JlKSwgMCk7Ci0jZWxzZQotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNo
Q29tcGFjdChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zm
c2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUpLCAwKTsKLSAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENvbXBhY3Qoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1BheWxv
YWRMb2FkT3JTdG9yZSksIDApOwotI2VuZGlmCisgICAgcmVzZXRHZXRCeUlEQ2hlY2tBbmRMb2Fk
KHN0dWJJbmZvKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1
bXApLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5w
YXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7CiB9CiAKQEAgLTE5NTEsMzMgKzg2OCwxOCBAQCB2
b2lkIHJlc2V0UHV0QnlJRChDb2RlQmxvY2sqIGNvZGVCbG9jaywgCiB7CiAgICAgVl9KSVRPcGVy
YXRpb25fRVNzaUpKSSB1bm9wdGltaXplZEZ1bmN0aW9uID0gYml0d2lzZV9jYXN0PFZfSklUT3Bl
cmF0aW9uX0VTc2lKSkk+KHJlYWRDYWxsVGFyZ2V0KGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICBWX0pJVE9wZXJhdGlvbl9F
U3NpSkpJIG9wdGltaXplZEZ1bmN0aW9uOwotICAgIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09
IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRp
b25QdXRCeUlkU3RyaWN0QnVpbGRMaXN0KQorICAgIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09
IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRp
b25QdXRCeUlkU3RyaWN0T3B0aW1pemUpCiAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3Bl
cmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOwotICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVu
Y3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9u
ID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3QpCisgICAgZWxzZSBpZiAodW5v
cHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0IHx8IHVub3B0aW1p
emVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplKQogICAgICAg
ICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsK
LSAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJl
Y3RTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0
U3RyaWN0QnVpbGRMaXN0KQorICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3Bl
cmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJh
dGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSkKICAgICAgICAgb3B0aW1pemVkRnVuY3Rp
b24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7CiAgICAgZWxzZSB7Ci0g
ICAgICAgIEFTU0VSVCh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJl
Y3ROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGly
ZWN0Tm9uU3RyaWN0QnVpbGRMaXN0KTsKKyAgICAgICAgQVNTRVJUKHVub3B0aW1pemVkRnVuY3Rp
b24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0
aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZSk7CiAgICAgICAg
IG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGlt
aXplOwogICAgIH0KICAgICByZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbiwgb3B0aW1pemVkRnVuY3Rpb24pOwotICAgIENvZGVMb2NhdGlvbkRhdGFMYWJl
bDMyIHN0cnVjdHVyZUxhYmVsID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJl
bDMyQXRPZmZzZXQoLShpbnRwdHJfdClzdHViSW5mby5wYXRjaC5kZWx0YUNoZWNrSW1tVG9DYWxs
KTsKLSAgICBpZiAoTWFjcm9Bc3NlbWJsZXI6OmNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNo
MzJXaXRoUGF0Y2goKSkgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmV2ZXJ0SnVtcFJlcGxh
Y2VtZW50VG9QYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaCgKLSAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpzdGFydE9mUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2hPbkFkZHJlc3Moc3RydWN0
dXJlTGFiZWwpLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoCi0gICAgICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+KHN0dWJJbmZv
LnBhdGNoLmJhc2VHUFIpLAotICAgICAgICAgICAgICAgIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQzMl90Pih1bnVzZWRQb2ludGVyKSk7
Ci0gICAgfQotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIoc3RydWN0dXJlTGFiZWws
IHN0YXRpY19jYXN0PGludDMyX3Q+KHVudXNlZFBvaW50ZXIpKTsKLSNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIoc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Mb2Fk
T3JTdG9yZSksIDApOwotI2Vsc2UKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEludDMyKHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBh
dGNoLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUpLCAwKTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6
cmVwYXRjaEludDMyKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zm
c2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKSwgMCk7Ci0j
ZW5kaWYKKyAgICByZXNldFB1dEJ5SURDaGVja0FuZExvYWQoc3R1YkluZm8pOwogICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoSnVtcChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0
T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nh
c2UpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNoUmVnaXN0
ZXJBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMTg5NTE1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NCw2ICs0NCw4IEBAIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6flNjcmF0
Y2hSZWdpc3QKIAogdm9pZCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OmxvY2soR1BSUmVnIHJl
ZykKIHsKKyAgICBpZiAocmVnID09IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybjsKICAg
ICB1bnNpZ25lZCBpbmRleCA9IEdQUkluZm86OnRvSW5kZXgocmVnKTsKICAgICBpZiAoaW5kZXgg
PT0gR1BSSW5mbzo6SW52YWxpZEluZGV4KQogICAgICAgICByZXR1cm47CkBAIC01MiwxMiArNTQs
MjAgQEAgdm9pZCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OmxvY2soR1BSUgogCiB2b2lkIFNj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6bG9jayhGUFJSZWcgcmVnKQogeworICAgIGlmIChyZWcg
PT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJuOwogICAgIHVuc2lnbmVkIGluZGV4ID0g
RlBSSW5mbzo6dG9JbmRleChyZWcpOwogICAgIGlmIChpbmRleCA9PSBGUFJJbmZvOjpJbnZhbGlk
SW5kZXgpCiAgICAgICAgIHJldHVybjsKICAgICBtX2xvY2tlZFJlZ2lzdGVycy5zZXRGUFJCeUlu
ZGV4KGluZGV4KTsKIH0KIAordm9pZCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OmxvY2soSlNW
YWx1ZVJlZ3MgcmVncykKK3sKKyAgICBsb2NrKHJlZ3MudGFnR1BSKCkpOworICAgIGxvY2socmVn
cy5wYXlsb2FkR1BSKCkpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rSW5mbz4KIHR5cGVu
YW1lIEJhbmtJbmZvOjpSZWdpc3RlclR5cGUgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjphbGxv
Y2F0ZVNjcmF0Y2goKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNo
UmVnaXN0ZXJBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oCShyZXZpc2lvbiAxODk1MTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MCwxMSArNDAsMTMgQEAgc3RydWN0IFNjcmF0Y2hCdWZmZXI7CiAKIGNsYXNz
IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciB7CiBwdWJsaWM6CisgICAgU2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yKCkgeyB9CiAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yKGNvbnN0IFJlZ2lz
dGVyU2V0JiB1c2VkUmVnaXN0ZXJzKTsKICAgICB+U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yKCk7
CiAKLSAgICB2b2lkIGxvY2soR1BSUmVnIHJlZyk7Ci0gICAgdm9pZCBsb2NrKEZQUlJlZyByZWcp
OworICAgIHZvaWQgbG9jayhHUFJSZWcpOworICAgIHZvaWQgbG9jayhGUFJSZWcpOworICAgIHZv
aWQgbG9jayhKU1ZhbHVlUmVncyk7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmFua0lu
Zm8+CiAgICAgdHlwZW5hbWUgQmFua0luZm86OlJlZ2lzdGVyVHlwZSBhbGxvY2F0ZVNjcmF0Y2go
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9u
IDE4OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29y
a2luZyBjb3B5KQpAQCAtMTg4LDYgKzE4OCw3IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9u
U3RyaW5nOwogICAgIHYoYm9vbCwgY2xvYmJlckFsbFJlZ3NJbkZUTElDU2xvd1BhdGgsICFBU1NF
UlRfRElTQUJMRUQsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGFzc3VtZUFsbFJlZ3NJbkZUTElD
QXJlTGl2ZSwgZmFsc2UsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGVuYWJsZUFjY2Vzc0lubGlu
aW5nLCB0cnVlLCBudWxscHRyKSBcCisgICAgdih1bnNpZ25lZCwgbWF4QWNjZXNzVmFyaWFudExp
c3RTaXplLCA4LCBudWxscHRyKSBcCiAgICAgdihib29sLCBlbmFibGVQb2x5dmFyaWFudERldmly
dHVhbGl6YXRpb24sIHRydWUsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGVuYWJsZVBvbHltb3Jw
aGljQWNjZXNzSW5saW5pbmcsIHRydWUsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGVuYWJsZVBv
bHltb3JwaGljQ2FsbElubGluaW5nLCB0cnVlLCBudWxscHRyKSBcCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260812</attachid>
            <date>2015-09-08 16:53:30 -0700</date>
            <delta_ts>2015-09-08 22:39:52 -0700</delta_ts>
            <desc>it&apos;s passing tests so much</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>272500</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg5NTE1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0NyBA
QAorMjAxNS0wOS0wOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFRoZXJlIHNob3VsZCBiZSBvbmUgc3R1YiBoYW5naW5nIG9mZiBhbiBpbmxpbmUgY2FjaGUgdGhh
dCBjb250YWlucyBjb2RlIGZvciBhbGwgb2YgdGhlIGNhc2VzLCByYXRoZXIgdGhhbiBmb3JtaW5n
IGEgbGlua2VkIGxpc3QgY29uc2lzdGluZyBvZiBvbmUgc3R1YiBwZXIgY2FzZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4NzE3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBhIG1ham9yIHJl
d3JpdGUgb2YgdGhlIEpTQyBnZXQvcHV0L2luIGlubGluZSBjYWNoZXMgKElDcyksIG1vdGl2YXRl
ZCBieSB0aGUgbmVlZCB0byBhZGQKKyAgICAgICAgZmFuY3kgbmV3IGtpbmRzIG9mIGlubGluZSBj
YWNoZXMgZm9yIHByb3BlcnR5IHR5cGUgaW5mZXJlbmNlIChodHRwczovL3dlYmtpdC5vcmcvYi8x
NDg2MTApLgorCisgICAgICAgIFByZXZpb3VzbHksIG91ciBpbmxpbmUgY2FjaGVzIGhhZCBzb21l
IHByb2JsZW1zIHRoYXQgbWFkZSB0aGVtIGRpZmZpY3VsdCB0byB3b3JrIHdpdGguIEl0IHdhcwor
ICAgICAgICBpbXBvc3NpYmxlIHRvIGNoYW5nZSBhbnkgY29kZSB0aGF0IHdhcyBwcmV2aW91c2x5
IGdlbmVyYXRlZCBieSB0aGUgSUMgZXhjZXB0IGJ5IGJsb3dpbmcgdGhlCisgICAgICAgIHdob2xl
IElDIGF3YXksIHRoZSBJQ3Mgc2NhbGVkIHBvb3JseSBpZiB0aGVyZSB3ZXJlIG1hbnkgY2FzZXMs
IGFuZCB0aGVyZSB3YXMgYSBsb3Qgb2YgZHVwbGljYXRlCisgICAgICAgIGFuZCBhZCBob2MgY29k
ZS4KKworICAgICAgICBJbXBvc3NpYmxlIHRvIHJlZ2VuZXJhdGUgYSBwcmV2aW91c2x5IGdlbmVy
YXRlZCBzdHViOiBTYXkgdGhhdCBzb21lIGFjY2VzcyAoby5mID0gdikgY2F1c2VzIG91cgorICAg
ICAgICBJQyBjb2RlIHRvIGVtaXQgc29tZSBzdHViOyBsZXQncyBjYWxsIGl0IHN0dWIxLiBUaGVu
IGxhdGVyIHdlIGZpbmQgdGhhdCB3ZSBuZWVkIHRvIGVtaXQgYQorICAgICAgICBkaWZmZXJlbnQg
c3R1Yiwgc3R1YjIsIHdoZXJlIHdlIHRoaW5rIHRoYXQgc3R1YjIgbWlnaHQgc3Vic3VtZSBzdHVi
MS4gV2Ugc2F5IHRoYXQgc3R1YjIKKyAgICAgICAgc3Vic3VtZXMgc3R1YjEgaWYgZmFpbGluZyB0
byBleGVjdXRlIHN0dWIyIHRvIGNvbXBsZXRpb24gbWVhbnMgdGhhdCB3ZSBhcmUgZ3VhcmFudGVl
ZCB0byBmYWlsCisgICAgICAgIHRvIGV4ZWN1dGUgc3R1YjEgdG8gY29tcGxldGlvbi4gVGhpcyBj
b3VsZCBoYXBwZW4gaW4gdHJ1bmsgaWYgc3R1YjIgaGFzIHRoZSBzYW1lIGJhc2Ugc3RydWN0dXJl
CisgICAgICAgIGFzIHN0dWIxIGJ1dCBkaWZmZXJlbnQgcHJvdG90eXBlIGNvbmRpdGlvbnMuIEl0
IGNvdWxkIGhhcHBlbiB3aXRoIHByb3BlcnR5IHR5cGUgaW5mZXJlbmNlIGlmCisgICAgICAgIHN0
dWIyIGhhcyBhIGxvb3NlciB0eXBlIGNoZWNrIG9uIHYgdGhhbiBzdHViMSBkaWQuIEN1cnJlbnRs
eSwgaWYgdGhpcyBoYXBwZW5lZCwgd2Ugd291bGQgZW1pdAorICAgICAgICBzdHViMiBhbmQgaGF2
ZSBpdHMgc2xvdyBwYXRoIGp1bXAgdG8gc3R1YjEuIEhlbmNlLCB3ZSB3b3VsZCBzdGlsbCBlbmQg
dXAgZXhlY3V0aW5nIHRoZSBjaGVja3MKKyAgICAgICAgb2Ygc3R1YjEgYmVmb3JlIGZhbGxpbmcg
dGhyb3VnaCB0byB0aGUgc2xvdyBwYXRoLiBUaGlzIGdldHMgYmFkIHdoZW4gdGhlcmUgYXJlIG1h
bnkgc3R1YnMuCisgICAgICAgIFN0dWIxIG1pZ2h0IGJlIGluIGZyb250IG9mIGEgYnVuY2ggb2Yg
b3RoZXIgc3R1YnMsIHNvIHdoZW4gd2UgYWRkIHN0dWIyLCB3ZSB3aWxsIGVuZCB1cAorICAgICAg
ICBleGVjdXRpbmcgYm90aCBzdHViMidzIGFuZCBzdHViMSdzIGNoZWNrcyBiZWZvcmUgZmFsbGlu
ZyB0aHJvdWdoIHRvIHRoZSBvdGhlciBzdHVicy4gSXQgd291bGQKKyAgICAgICAgYmUgYmV0dGVy
IGlmIHdlIGNvdWxkIHJlbW92ZSBzdHViMSBmcm9tIHRoZSBsaXN0IGF0IHRoaXMgcG9pbnQuIEJ1
dCBzaW5jZSBzdHViMSBjb3VsZCBiZSBsaW5rZWQKKyAgICAgICAgdG8gZnJvbSBhIGRpZmZlcmVu
dCBzdHViIHRoYXQgd2UgaGFkIGFscmVhZHkgZ2VuZXJhdGVkLCB3ZSdkIGhhdmUgdG8gaGF2ZSBh
IHdheSBvZiBwYXRjaGluZworICAgICAgICBzdHVicyBvciByZWdlbmVyYXRpbmcgdGhlbSBmcm9t
IHNjcmF0Y2guIFRoaXMgaXMgY3VycmVudHkgaW1wb3NzaWJsZSBiZWNhdXNlIHdlIGp1c3QgZG9u
J3Qga2VlcAorICAgICAgICBhcm91bmQgZW5vdWdoIG1ldGEtZGF0YSB0byBtZXNzIHdpdGggYSBz
dHViIGFmdGVyIGl0J3MgZ2VuZXJhdGVkLiBBZnRlciB0aGlzIGNoYW5nZSwgd2UgbmV2ZXIKKyAg
ICAgICAgbGluayBuZXcgc3R1YnMgb250byBhIGxpbmtlZCBsaXN0IG9mIHByZS1leGlzdGluZyBz
dHViczsgaW5zdGVhZCBlYWNoIElDIHdpbGwgaGF2ZSBvbmUgc3R1YgorICAgICAgICBoYW5naW5n
IG9mZiBvZiBpdCBhbmQgd2UgYWx3YXlzIHJlZ2VuZXJhdGUgdGhhdCBvbmUgc3R1YiBmcm9tIHNj
cmF0Y2guIFRoYXQgb25lIHN0dWIgY29udGFpbnMKKyAgICAgICAgZWl0aGVyIGEgQmluYXJ5U3dp
dGNoIG9yIGEgYnJhbmNoIGNhc2NhZGUgdG8gc2VsZWN0IG9uZSBvZiB0aGUgQWNjZXNzQ2FzZXMu
IEVhY2ggQWNjZXNzQ2FzZSBpcworICAgICAgICBhbiBvYmplY3QgdGhhdCBkZXNjcmliZXMgZXZl
cnl0aGluZyB3ZSBuZWVkIHRvIHJlZ2VuZXJhdGUgaXQgaW4gdGhlIGZ1dHVyZS4gVGhpcyBtZWFu
cyB0aGF0CisgICAgICAgIHdoZW4gd2UgYWRkIGEgbmV3IGNhc2UgdG8gYW4gSUMgc3R1Yiwgd2Ug
Y2FuIGZpZ3VyZSBvdXQgd2hpY2ggcHJldmlvdXMgY2FzZXMgdGhpcyBvbmUgc3Vic3VtZXMuCisK
KyAgICAgICAgUG9vciBzY2FsYWJpbGl0eSB3aGVuIHRoZXJlIGFyZSBtYW55IGNhc2VzOiBQcmV2
aW91c2x5LCB0aGUgY2FzZXMgb2YgYSBwb2x5bW9ycGhpYyBpbmxpbmUgY2FjaGUKKyAgICAgICAg
Zm9ybWVkIGEgbGlua2VkIGxpc3Qgb2YgYnJhbmNoZXMuIFRoaXMgbWVhbnQgdGhhdCB0aGUgY29t
cGxleGl0eSBvZiBhbiBpbmxpbmUgY2FjaGUgZ3JldworICAgICAgICBsaW5lYXJseSB3aXRoIHRo
ZSBudW1iZXIgb2YgY2FzZXMuIFRoaXMgY2hhbmdlIHR1cm5zIHRoaXMgaW50byBhIEJpbmFyeVN3
aXRjaCBpbiBtb3N0IGNhc2VzLAorICAgICAgICBsZWFkaW5nIHRvIGxvZ2FyaXRobWljIHNjYWxp
bmcuCisKKyAgICAgICAgRHVwbGljYXRlIGNvZGUgYmV0d2VlbiBnZXQsIHB1dCwgYW5kIGluOiBU
aGUgY29kZSBmb3Igb3BfZ2V0X2J5X2lkLCBvcF9wdXRfYnlfaWQsIGFuZCBvcF9pbgorICAgICAg
ICBpbmxpbmUgY2FjaGVzIGdyZXcgaW5kZXBlbmRlbnRseSBhbmQgZW5kZWQgdXAgaGF2aW5nIGEg
bG90IG9mIGR1cGxpY2F0ZSBjb2RlLiBXZSBoYWQgdGhlIHdvcnN0CisgICAgICAgIGtpbmRzIG9m
IGR1cGxpY2F0ZSBjb2RlLiBJbiBzb21lIGNhc2VzLCB0aGUgY29kZSB3YXMgY29weS1wYXN0ZWQu
IEluIG90aGVyIGNhc2VzLCB3ZSB3cm90ZSBjb2RlCisgICAgICAgIHRoYXQgZmVsdCBsaWtlIGl0
IHdhcyBuZXcgZGVzcGl0ZSB0aGUgZmFjdCB0aGF0IGl0IHdhcyBsb2dpY2FsbHkgaWRlbnRpY2Fs
IHRvIGNvZGUgdGhhdCB3YXMKKyAgICAgICAgYWxyZWFkeSB3cml0dGVuIGVsc2V3aGVyZS4gVGhl
IG1haW4gc291cmNlcyBvZiBkdXBsaWNhdGlvbiB3ZXJlIGluIHNlbGVjdGluZyBhIHNjcmF0Y2gK
KyAgICAgICAgcmVnaXN0ZXIsIGNoZWNraW5nIGFsbCBvZiB0aGUgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25zIGFuZCB0aGUgYmFzZSBzdHJ1Y3R1cmUsIHRoZSBwcm8gZm9ybWEKKyAgICAgICAgaW52
b2x2ZWQgaW4gZ2VuZXJhdGluZyBhIHN0dWIsIGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIG5lZWRl
ZCB0byBkZXNjcmliZSBhbGwgb2YgdGhlIGFjY2VzcworICAgICAgICBjYXNlcy4gVGhpcyBjaGFu
Z2UgZGVkdXBsaWNhdGVzIGFsbCBvZiB0aGF0IGNvZGUuIE5vdywgYWxsIG9mIHRob3NlIElDcyB1
c2UgdGhlIHNhbWUgY2xhc3NlczoKKyAgICAgICAgdGhlIFBvbHltb3JwaGljQWNjZXNzIGFuZCBB
Y2Nlc3NDYXNlLiBUaGVyZSBpcyBjb2RlIGluIHRob3NlIGNsYXNzZXMgdGhhdCBoYW5kbGVzIGFs
bCBvZiB0aGUKKyAgICAgICAgY29tbW9uIHRoaW5ncywgYW5kIGZvciB0aGUgbW9zdCBwYXJ0IHRo
ZSBvbmx5IGNvZGUgdGhhdCBhY3R1YWxseSBzcGVjaWFsaXplcyBmb3IgdGhlIGtpbmQgb2YKKyAg
ICAgICAgYWNjZXNzIGlzIGluIHNvbWUgc3dpdGNoIHN0YXRlbWVudCBpbiBBY2Nlc3NDYXNlOjpn
ZW5lcmF0ZSgpLgorCisgICAgICAgIFNwZWNpYWwtY2FzaW5nIG9mIGFycmF5IGxlbmd0aCBhbmQg
c3RyaW5nIGxlbmd0aDogUHJldmlvdXNseSwgYXJyYXkubGVuZ3RoIGFuZCBzdHJpbmcubGVuZ3Ro
CisgICAgICAgIHdlcmUgaGFuZGxlZCBpbiBhbiBhZCBob2MgbWFubmVyIGluIHRoZSBnZXRfYnlf
aWQgcmVwYXRjaGluZyBjb2RlLiBUaGUgaGFuZGxpbmcgd2FzIHNlcGFyYXRlCisgICAgICAgIGZy
b20gdGhlIHBvbHltb3JwaGljIGdldF9ieV9pZCBoYW5kbGluZywgd2hpY2ggbWVhbnQgdGhhdCB3
ZSBjb3VsZCBub3QgaGFuZGxlIHBvbHltb3JwaGljCisgICAgICAgIGxlbmd0aCBhY2Nlc3NlcyBp
ZiBvbmUgb2YgdGhlIGxlbmd0aCBjYXNlcyB3YXMgZWl0aGVyIGFycmF5IG9yIHN0cmluZyBsZW5n
dGguIEZvciBleGFtcGxlLCBpZgorICAgICAgICB5b3UgaGFkICJvLmxlbmd0aCIgd2hlcmUgdGhl
IGxlbmd0aCB3YXMgZWl0aGVyIGFycmF5IGxlbmd0aCBvciBhIHZhbmlsbGEgbGVuZ3RoIHByb3Bl
cnR5LCB0aGVuCisgICAgICAgIHRoZSBnZXRfYnlfaWQgaW5saW5lIGNhY2hlIHdvdWxkIGVpdGhl
ciBlbWl0IGEgbW9ub21vcnBoaWMgc3R1YiBmb3IgYXJyYXkgbGVuZ3RoLCBvciBpdCBhCisgICAg
ICAgIG1vbm9tb3JwaGljIHN0dWIgZm9yIHRoZSB2YW5pbGxhIGxlbmd0aCBwcm9wZXJ0eSwgYnV0
IG5ldmVyIGEgcG9seW1vcnBoaWMgc3R1YiAob3IgbGlzdCkgdGhhdAorICAgICAgICBjb3VsZCBk
byBib3RoLiBUaGlzIGNoYW5nZSBhZGRyZXNzZXMgdGhpcyBwcm9ibGVtIGJ5IGZvbGRpbmcgYXJy
YXkgbGVuZ3RoIGFuZCBzdHJpbmcgbGVuZ3RoCisgICAgICAgIGludG8gdGhlIHBvbHltb3JwaGlj
IGdldF9ieV9pZCBjb2RlLgorCisgICAgICAgIFRoaXMgaXMgc3RpbGwgYSB3b3JrIGluIHByb2dy
ZXNzIGFuZCBoYXNuJ3QgYmVlbiB0ZXN0ZWQgY29tcGxldGVseS4KKworICAgICAgICAqIENNYWtl
TGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENv
cmUudmN4cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRD
b3JlLnZjeHByb2ouZmlsdGVyczoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVS
ZWYuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpkdW1wV2l0aE5hbWUp
OgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6cHJpbnRHZXRCeUlkQ2FjaGVTdGF0dXMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OnByaW50UHV0QnlJZENhY2hlU3RhdHVzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcm9w
YWdhdGVUcmFuc2l0aW9ucyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Z2V0QnlWYWxJbmZv
TWFwKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRTdHViSW5mbyk6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6ZmluZFN0dWJJbmZvKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxv
Y2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzdHViSW5mb0JlZ2luKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpzdHViSW5mb0VuZCk6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJ
ZFN0YXR1cy5jcHA6CisgICAgICAgIChKU0M6OkdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHVi
SW5mb1dpdGhvdXRFeGl0U2l0ZUZlZWRiYWNrKToKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9y
cGhpY0FjY2Vzcy5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcC4KKyAgICAgICAgKEpTQzo6QWNjZXNzR2VuZXJh
dGlvblN0YXRlOjphZGRXYXRjaHBvaW50KToKKyAgICAgICAgKEpTQzo6QWNjZXNzR2VuZXJhdGlv
blN0YXRlOjpyZXN0b3JlU2NyYXRjaCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0dlbmVyYXRpb25T
dGF0ZTo6c3VjY2VlZCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OkFjY2Vzc0Nhc2UpOgor
ICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZXQpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNl
OjpyZXBsYWNlKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6dHJhbnNpdGlvbik6CisgICAg
ICAgIChKU0M6OkFjY2Vzc0Nhc2U6OnNldHRlcik6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6
OmluKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2V0TGVuZ3RoKToKKyAgICAgICAgKEpT
Qzo6QWNjZXNzQ2FzZTo6fkFjY2Vzc0Nhc2UpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpm
cm9tU3RydWN0dXJlU3R1YkluZm8pOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpjbG9uZSk6
CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6Omd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrKToKKyAg
ICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Y2FuUmVwbGFjZSk6CisgICAgICAgIChKU0M6OkFjY2Vz
c0Nhc2U6OmR1bXApOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjp2aXNpdFdlYWspOgorICAg
ICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCk6CisgICAgICAgIChKU0M6
OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlKToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNBY2Nlc3M6
OlBvbHltb3JwaGljQWNjZXNzKToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNBY2Nlc3M6On5Q
b2x5bW9ycGhpY0FjY2Vzcyk6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQWNjZXNzOjpyZWdl
bmVyYXRlV2l0aENhc2VzKToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNBY2Nlc3M6OnJlZ2Vu
ZXJhdGVXaXRoQ2FzZSk6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQWNjZXNzOjp2aXNpdFdl
YWspOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzczo6ZHVtcCk6CisgICAgICAgIChK
U0M6OlBvbHltb3JwaGljQWNjZXNzOjpyZWdlbmVyYXRlKToKKyAgICAgICAgKFdURjo6cHJpbnRJ
bnRlcm5hbCk6CisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nlc3M6OkdldEJ5SWRBY2Nlc3MpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpHZXRCeUlkQWNjZXNzOjp+R2V0QnlJZEFjY2Vzcyk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1cmVTdHViSW5m
byk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nlc3M6OnZpc2l0V2Vhayk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OlBvbHltb3JwaGljR2V0QnlJZExpc3Q6OlBvbHltb3JwaGlj
R2V0QnlJZExpc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0dldEJ5SWRM
aXN0Ojpmcm9tKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNHZXRCeUlkTGlz
dDo6flBvbHltb3JwaGljR2V0QnlJZExpc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpQb2x5
bW9ycGhpY0dldEJ5SWRMaXN0OjpjdXJyZW50U2xvd1BhdGhUYXJnZXQpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjphZGRBY2Nlc3MpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojppc0Z1bGwpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojppc0FsbW9zdEZ1bGwpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpkaWRTZWxmUGF0Y2hp
bmcpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojp2aXNp
dFdlYWspOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmg6
IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0LmguCisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmlzR2V0KToKKyAgICAgICAg
KEpTQzo6QWNjZXNzQ2FzZTo6aXNQdXQpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjppc0lu
KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6dHlwZSk6CisgICAgICAgIChKU0M6OkFjY2Vz
c0Nhc2U6Om9mZnNldCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OnZpYVByb3h5KToKKyAg
ICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6c3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6QWNjZXNz
Q2FzZTo6bmV3U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Y29uZGl0aW9u
U2V0KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6YWRkaXRpb25hbFNldCk6CisgICAgICAg
IChKU0M6OkFjY2Vzc0Nhc2U6OmRvZXNDYWxscyk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6
OmNhbGxMaW5rSW5mbyk6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQWNjZXNzOjppc0VtcHR5
KToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNBY2Nlc3M6OnNpemUpOgorICAgICAgICAoSlND
OjpQb2x5bW9ycGhpY0FjY2Vzczo6YXQpOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vz
czo6b3BlcmF0b3JbXSk6CisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nlc3M6OkdldEJ5SWRBY2Nl
c3MpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpHZXRCeUlkQWNjZXNzOjppc1NldCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nlc3M6Om9wZXJhdG9yISk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkdldEJ5SWRBY2Nlc3M6OnR5cGUpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpHZXRCeUlkQWNjZXNzOjpzdHJ1Y3R1cmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpHZXRC
eUlkQWNjZXNzOjpjb25kaXRpb25TZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpHZXRCeUlk
QWNjZXNzOjpzdHViUm91dGluZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nl
c3M6OmRvZXNDYWxscyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlBvbHltb3JwaGljR2V0QnlJ
ZExpc3Q6OmlzRW1wdHkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0dldEJ5
SWRMaXN0OjpzaXplKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNHZXRCeUlk
TGlzdDo6YXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0
OjpvcGVyYXRvcltdKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzc1N0cnVjdHVyZUxpc3QuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9y
cGhpY0dldEJ5SWRMaXN0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9y
cGhpY0dldEJ5SWRMaXN0Lmg6IFJlbW92ZWQuCisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBo
aWNQdXRCeUlkTGlzdC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBo
aWNQdXRCeUlkTGlzdC5oOiBSZW1vdmVkLgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRTdGF0
dXMuY3BwOgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8p
OgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcDoKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlU3R1YkluZm86OmRlcmVmKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1
YkluZm86OmFkZEFjY2Vzc0Nhc2UpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6
cmVzZXQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJl
bmNlcyk6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaDoKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlU3R1YkluZm86OlN0cnVjdHVyZVN0dWJJbmZvKToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlU3R1YkluZm86OmluaXRHZXRCeUlkU2VsZik6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZVN0dWJJbmZvOjppbml0UHV0QnlJZFJlcGxhY2UpOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmVTdHViSW5mbzo6aW5pdFN0dWIpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5m
bzo6c2V0U2Vlbik6CisgICAgICAgIChKU0M6OmdldFN0cnVjdHVyZVN0dWJJbmZvQ29kZU9yaWdp
bik6CisgICAgICAgIChKU0M6OmlzR2V0QnlJZEFjY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OmlzUHV0QnlJZEFjY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmlzSW5BY2Nlc3Mp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdEdldEJ5SWRM
aXN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmluaXRQdXRC
eUlkVHJhbnNpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZv
Ojppbml0UHV0QnlJZExpc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHVi
SW5mbzo6aW5pdEluTGlzdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJ
bmZvOjphZGRXYXRjaHBvaW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlSW4p
OgorICAgICAgICAqIGZ0bC9GVExDb21waWxlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjptbUFs
bG9jYXRlRGF0YVNlY3Rpb24pOgorICAgICAgICAqIGppdC9BY2Nlc3NvckNhbGxKSVRTdHViUm91
dGluZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogaml0L0FjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0
aW5lLmg6IFJlbW92ZWQuCisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAg
ICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmJyYW5jaElmRW1wdHkpOgorICAgICAgICAoSlNDOjpB
c3NlbWJseUhlbHBlcnM6OmJyYW5jaFN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5
SGVscGVyczo6Ym94Qm9vbGVhblBheWxvYWQpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBl
cnM6OmJveEJvb2xlYW4pOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmJveEludDMy
KToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVElubGluZUNhY2hlR2Vu
ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Z2FyYmFnZVN0dWJJbmZvKToKKyAgICAgICAgKEpT
Qzo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OkpJVElubGluZUNhY2hlR2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6SklUQnlJZEdlbmVyYXRvcjo6SklUQnlJZEdlbmVyYXRvcik6CisgICAgICAg
IChKU0M6OkpJVEdldEJ5SWRHZW5lcmF0b3I6OkpJVEdldEJ5SWRHZW5lcmF0b3IpOgorICAgICAg
ICAoSlNDOjpKSVRQdXRCeUlkR2VuZXJhdG9yOjpKSVRQdXRCeUlkR2VuZXJhdG9yKToKKyAgICAg
ICAgKiBqaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6SklUSW5s
aW5lQ2FjaGVHZW5lcmF0b3I6OkpJVElubGluZUNhY2hlR2VuZXJhdG9yKToKKyAgICAgICAgKEpT
Qzo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OnN0dWJJbmZvKToKKyAgICAgICAgKEpTQzo6SklU
QnlJZEdlbmVyYXRvcjo6SklUQnlJZEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVEJ5SWRH
ZW5lcmF0b3I6OnJlcG9ydFNsb3dQYXRoQ2FsbCk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlv
bnMuY3BwOgorICAgICAgICAqIGppdC9SZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6cmVwYXRj
aENhbGwpOgorICAgICAgICAoSlNDOjpyZXBhdGNoQnlJZFNlbGZBY2Nlc3MpOgorICAgICAgICAo
SlNDOjpyZXNldEdldEJ5SURDaGVja0FuZExvYWQpOgorICAgICAgICAoSlNDOjpyZXNldFB1dEJ5
SURDaGVja0FuZExvYWQpOgorICAgICAgICAoSlNDOjpyZXBsYWNlV2l0aEp1bXApOgorICAgICAg
ICAoSlNDOjp0cnlDYWNoZUdldEJ5SUQpOgorICAgICAgICAoSlNDOjpyZXBhdGNoR2V0QnlJRCk6
CisgICAgICAgIChKU0M6OmFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbik6CisgICAg
ICAgIChKU0M6OmFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbik6CisgICAgICAg
IChKU0M6OnRyeUNhY2hlUHV0QnlJRCk6CisgICAgICAgIChKU0M6OnJlcGF0Y2hQdXRCeUlEKToK
KyAgICAgICAgKEpTQzo6dHJ5UmVwYXRjaEluKToKKyAgICAgICAgKEpTQzo6cmVwYXRjaEluKToK
KyAgICAgICAgKEpTQzo6cmVzZXRHZXRCeUlEKToKKyAgICAgICAgKEpTQzo6cmVzZXRQdXRCeUlE
KToKKyAgICAgICAgKEpTQzo6Y2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbik6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OmNoZWNrT2JqZWN0UHJvcGVydHlDb25kaXRpb25zKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6ZW1pdFJlc3RvcmVTY3JhdGNoKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6bGlua1Jlc3RvcmVTY3JhdGNoKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6dG9TdHJpbmcp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpraW5kRm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6Y3VzdG9tRm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Z2VuZXJhdGVCeUlkU3R1Yik6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OnBhdGNoSnVtcFRvR2V0QnlJZFN0dWIpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjp0cnlCdWlsZEdldEJ5SURMaXN0KTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6YnVpbGRHZXRCeUlETGlzdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmFwcHJvcHJp
YXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
ZW1pdFB1dFJlcGxhY2VTdHViKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6ZW1pdFB1dFRyYW5z
aXRpb25TdHViKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6dHJ5QnVpbGRQdXRCeUlkTGlzdCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmJ1aWxkUHV0QnlJZExpc3QpOiBEZWxldGVkLgorICAg
ICAgICAqIGppdC9TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwOgorICAgICAgICAoSlNDOjpT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OmxvY2spOgorICAgICAgICAoSlNDOjpTY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3I6OmFsbG9jYXRlU2NyYXRjaCk6CisgICAgICAgICogaml0L1NjcmF0Y2hS
ZWdpc3RlckFsbG9jYXRvci5oOgorICAgICAgICAoSlNDOjpTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3I6OlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcik6CisgICAgICAgICogcnVudGltZS9PcHRpb25z
Lmg6CisKIDIwMTUtMDktMDggIEFuZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgogCiAg
ICAgICAgIFtKU0NdIFJlbW92ZSB1bnVzZWQgSGVhcDo6Z2V0Q29uc2VydmF0aXZlUmVnaXN0ZXJS
b290cygpLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24g
MTg5NTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0xMDQsOCArMTA0LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAg
ICBieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAKICAgICBieXRlY29kZS9PYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHAKICAgICBieXRlY29kZS9PcGNvZGUuY3BwCi0gICAg
Ynl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAKLSAgICBieXRlY29kZS9Qb2x5bW9y
cGhpY1B1dEJ5SWRMaXN0LmNwcAorICAgIGJ5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAog
ICAgIGJ5dGVjb2RlL1ByZWNpc2VKdW1wVGFyZ2V0cy5jcHAKICAgICBieXRlY29kZS9Qcm9wZXJ0
eUNvbmRpdGlvbi5jcHAKICAgICBieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcApAQCAtMzU2LDcg
KzM1NSw2IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgaW50ZXJwcmV0ZXIvUHJv
dG9DYWxsRnJhbWUuY3BwCiAgICAgaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAogCi0gICAg
aml0L0FjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmNwcAogICAgIGppdC9Bcml0eUNoZWNrRmFp
bFJldHVyblRodW5rcy5jcHAKICAgICBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAogICAgIGppdC9C
aW5hcnlTd2l0Y2guY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2oJKHJldmlzaW9uIDE4OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM0
Myw4ICszNDMsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcT2JqZWN0
UHJvcGVydHlDb25kaXRpb24uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0
ZWNvZGVcT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cYnl0ZWNvZGVcT3Bjb2RlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGJ5dGVjb2RlXFBvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwIiAvPgotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAiIC8+
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQb2x5bW9ycGhpY0FjY2Vzcy5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQcmVjaXNlSnVtcFRh
cmdldHMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUHJvcGVy
dHlDb25kaXRpb24uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVc
UHV0QnlJZFN0YXR1cy5jcHAiIC8+CkBAIC02MTcsNyArNjE2LDYgQEAKICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGludGVycHJldGVyXEpTU3RhY2suY3BwIiAvPgogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5caW50ZXJwcmV0ZXJcUHJvdG9DYWxsRnJhbWUuY3BwIiAvPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5caW50ZXJwcmV0ZXJcU3RhY2tWaXNpdG9yLmNwcCIgLz4KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5jcHAi
IC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcQXJpdHlDaGVja0ZhaWxSZXR1cm5U
aHVua3MuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEFzc2VtYmx5SGVs
cGVycy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcQmluYXJ5U3dpdGNo
LmNwcCIgLz4KQEAgLTEwNDQsOCArMTA0Miw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxieXRlY29kZVxPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcT3Bjb2RlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxieXRlY29kZVxPcGVyYW5kcy5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cYnl0ZWNvZGVcUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oIiAvPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cYnl0ZWNvZGVcUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oIiAvPgorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUG9seW1vcnBoaWNBY2Nlc3MuaCIgLz4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFByZWNpc2VKdW1wVGFyZ2V0cy5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUHJvcGVydHlDb25kaXRpb24u
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFB1dEJ5SWRTdGF0dXMu
aCIgLz4KQEAgLTE0MTYsNyArMTQxMyw2IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxp
bnRlcnByZXRlclxQcm90b0NhbGxGcmFtZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5caW50ZXJwcmV0ZXJcUmVnaXN0ZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGludGVycHJldGVyXFN0YWNrVmlzaXRvci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5caml0XEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxqaXRcQXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3MuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxBc3NlbWJseUhlbHBlcnMuaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGppdFxCaW5hcnlTd2l0Y2guaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ou
ZmlsdGVycwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMJKHJldmlzaW9uIDE4OTUx
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwkod29ya2luZyBjb3B5KQpAQCAtMTk4LDcgKzE5OCw3
IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxPcGNvZGUuY3BwIj4KICAg
ICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwIj4K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFBvbHltb3JwaGljQWNjZXNzLmNw
cCI+CiAgICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQdXRCeUlkU3RhdHVzLmNwcCI+CkBA
IC0xNjI2LDkgKzE2MjYsNiBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cbGx2bVxMTFZN
QVBJLmNwcCI+CiAgICAgICA8RmlsdGVyPmxsdm08L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxBY2Nlc3NvckNhbGxKSVRTdHViUm91dGlu
ZS5jcHAiPgotICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxDb25zb2xlTWVzc2FnZS5jcHAiPgog
ICAgICAgPEZpbHRlcj5pbnNwZWN0b3I8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KQEAgLTE2
OTUsOSArMTY5Miw2IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcSlNK
YXZhU2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBlLmNwcCI+CiAgICAgICA8RmlsdGVyPmluc3BlY3Rv
cjwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
Ynl0ZWNvZGVcUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAiPgotICAgICAgPEZpbHRlcj5ieXRl
Y29kZTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccHJvZmlsZXJcUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAiPgogICAgICAgPEZpbHRlcj5w
cm9maWxlcjwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgpAQCAtMjA5Nyw3ICsyMDkxLDcgQEAK
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE9wZXJhbmRzLmgiPgogICAgICAg
PEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oIj4KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFBvbHltb3JwaGljQWNjZXNzLmgiPgogICAg
ICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUHV0QnlJZFN0YXR1cy5oIj4KQEAgLTQyMDUsOSAr
NDE5OSw2IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxsbHZtXExMVk1IZWFkZXJzLmgi
PgogICAgICAgPEZpbHRlcj5sbHZtPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaCI+Ci0g
ICAgICA8RmlsdGVyPmppdDwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cYXNzZW1ibGVyXEFib3J0UmVhc29uLmgiPgogICAgICAgPEZpbHRlcj5h
c3NlbWJsZXI8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KQEAgLTQyODYsOSArNDI3Nyw2IEBA
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQ0lubGluZXMuaCI+CiAgICAg
ICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFBvbHltb3JwaGljR2V0QnlJZExpc3QuaCI+Ci0gICAg
ICA8RmlsdGVyPmJ5dGVjb2RlPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxwcm9maWxlclxQcm9maWxlckpldHRpc29uUmVhc29uLmgiPgogICAg
ICAgPEZpbHRlcj5wcm9maWxlcjwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE4OTUxNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNzIsNyArMjcyLDYgQEAKIAkJMEYzMDBCN0MxOEFCMUIxNDAwQTZENzJF
IC8qIERGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMwMEI3QTE4QUIxQjE0MDBBNkQ3MkUgLyogREZH
SW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjM0QjE0OTE2RDQyMDEwMDAxQ0RBNUEgLyogREZHVXNl
S2luZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjM0QjE0NzE2RDQyMDBFMDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAgKi87IH07CiAJCTBGMzRC
MTRBMTZENDIwMTMwMDFDREE1QSAvKiBERkdVc2VLaW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM0QjE0ODE2RDQyMDBFMDAxQ0RBNUEgLyogREZH
VXNlS2luZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
Ci0JCTBGMzRCMTRDMTZENDNFMEQwMDFDREE1QSAvKiBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVy
ZUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MzRCMTRCMTZENDNFMEMwMDFDREE1QSAvKiBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3Qu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjM4
QjAxMTE3Q0YwNzgwMDBCMTQ0RDMgLyogTExJbnRFbnRyeXBvaW50LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhCMDBGMTdDRjA3N0YwMEIxNDRE
MyAvKiBMTEludEVudHJ5cG9pbnQuY3BwICovOyB9OwogCQkwRjM4QjAxMjE3Q0YwNzgzMDBCMTQ0
RDMgLyogTExJbnRFbnRyeXBvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjM4QjAxMDE3Q0YwNzdGMDBCMTQ0RDMgLyogTExJbnRFbnRyeXBvaW50
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYz
OEIwMTcxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uS2V5LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhCMDEzMTdDRkU3NTUwMEIx
NDREMyAvKiBERkdDb21waWxhdGlvbktleS5jcHAgKi87IH07CkBAIC0zMjQsOCArMzIzLDYgQEAK
IAkJMEY0ODUzMkExODdERkRFQzAwODNCNjg3IC8qIEZUTFJlY292ZXJ5T3Bjb2RlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ4NTMyNjE4N0RGREVD
MDA4M0I2ODcgLyogRlRMUmVjb3ZlcnlPcGNvZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQ5M0FGQTE2RDBDQUQzMDA4NDUwOEIgLyogU291
cmNlUHJvdmlkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY0OTNBRjgxNkQwQ0FEMTAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCAqLzsg
fTsKIAkJMEY0Qjk0REMxN0I5RjA3NTAwREQwM0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRCOTREQjE3QjlG
MDc1MDBERDAzQTQgLyogVHlwZWRBcnJheUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjRDRUQ1RTE4Q0VBN0FCMDA4MDJGRTAgLyog
UG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjRDRUQ1QzE4Q0VBN0FCMDA4MDJGRTAgLyogUG9seW1vcnBoaWNH
ZXRCeUlkTGlzdC5jcHAgKi87IH07Ci0JCTBGNENFRDVGMThDRUE3QUIwMDgwMkZFMCAvKiBQb2x5
bW9ycGhpY0dldEJ5SWRMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjRDRUQ1RDE4Q0VBN0FCMDA4MDJGRTAgLyogUG9seW1vcnBoaWNHZXRCeUlk
TGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGNEYyOURGMThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGlt
YXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjRGMjlERDE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRF
c3RpbWF0aW9uUGhhc2UuY3BwICovOyB9OwogCQkwRjRGMjlFMDE4QjZBRDFDMDA1N0JDMTUgLyog
REZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEYyOURFMThCNkFEMUMwMDU3QkMxNSAv
KiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNTBBRjNDMTkzRThCMzkwMDY3
NEVFOCAvKiBERkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTBBRjNCMTkzRThCMzkwMDY3NEVFOCAvKiBERkdT
dHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtMzk4LDggKzM5NSw2IEBACiAJCTBGNzE0Q0E0MTZFQTkyRjAwMEYz
RUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzE0Q0ExMTZFQTkyRUQwMEYzRUJFQiAv
KiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCAqLzsgfTsKIAkJMEY3MTRDQTUxNkVB
OTJGMjAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzE0Q0EyMTZFQTkyRUQwMEYz
RUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3NDNCQUExNkI4ODI0OTAwOUY5Mjc3
IC8qIEFSTTY0RGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDY1MkEzQTIwMTY1MUM2NjEwMEE4MEFGRSAvKiBBUk02NERpc2Fzc2Vt
Ymxlci5jcHAgKi87IH07Ci0JCTBGNzU3NkQyMThFMUZFRTkwMDJFRjRDRCAvKiBBY2Nlc3NvckNh
bGxKSVRTdHViUm91dGluZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjc1NzZEMDE4RTFGRUU5MDAyRUY0Q0QgLyogQWNjZXNzb3JDYWxsSklUU3R1
YlJvdXRpbmUuY3BwICovOyB9OwotCQkwRjc1NzZEMzE4RTFGRUU5MDAyRUY0Q0QgLyogQWNjZXNz
b3JDYWxsSklUU3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNzU3NkQxMThFMUZFRTkwMDJFRjRDRCAvKiBBY2Nlc3NvckNhbGxKSVRT
dHViUm91dGluZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGNzY2RDI4MTVBOENDMUUwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2NkQyNjE1QThD
QzFCMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuY3BwICovOyB9OwogCQkwRjc2NkQyQjE1QThD
QzM4MDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NjZEMjkxNUE4Q0MzNDAwOEYzNjNFIC8qIEpJ
VFN0dWJSb3V0aW5lU2V0LmNwcCAqLzsgfTsKIAkJMEY3NjZEMkMxNUE4Q0MzQTAwOEYzNjNFIC8q
IEpJVFN0dWJSb3V0aW5lU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjc2NkQyQTE1QThDQzM0MDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVTZXQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNDcz
LDggKzQ2OCw2IEBACiAJCTBGOUUzMjY0MUIwNUFCMDQwMDgwMUVENSAvKiBERkdTdG9yZUJhcnJp
ZXJJbnNlcnRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY5RTMyNjIxQjA1QUIwNDAwODAxRUQ1IC8qIERGR1N0b3JlQmFycmllckluc2Vy
dGlvblBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEY5RkI0RjQxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RkI0RjIx
N0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuY3BwICovOyB9OwogCQkwRjlG
QjRGNTE3RkNCOTE3MDBDQjY3RjggLyogREZHU3RhY2tMYXlvdXRQaGFzZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RkI0RjMxN0ZDQjkxNzAwQ0I2
N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjlGQzhDMzE0RTFCNUZFMDBENTJBRTAgLyogUG9seW1v
cnBoaWNQdXRCeUlkTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjlGQzhCRjE0RTFCNUZCMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlk
TGlzdC5jcHAgKi87IH07Ci0JCTBGOUZDOEM0MTRFMUI2MDAwMEQ1MkFFMCAvKiBQb2x5bW9ycGhp
Y1B1dEJ5SWRMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjlGQzhDMDE0RTFCNUZCMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOUZD
OEM1MTRFMUI2MDQwMEQ1MkFFMCAvKiBQdXRLaW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlGQzhDMTE0RTFCNUZCMDBENTJBRTAgLyogUHV0S2lu
ZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
QTJDMTdCMTdEN0NGODQwMDlEMDE1RiAvKiBUZXN0UnVubmVyVXRpbHMuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBMkMxNzkxN0Q3Q0Y4NDAwOUQw
MTVGIC8qIFRlc3RSdW5uZXJVdGlscy5jcHAgKi87IH07CiAJCTBGQTJDMTdDMTdEN0NGODQwMDlE
MDE1RiAvKiBUZXN0UnVubmVyVXRpbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQTJDMTdBMTdEN0NGODQwMDlEMDE1RiAvKiBUZXN0UnVubmVyVXRp
bHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
NzQyLDYgKzczNSw4IEBACiAJCTBGRjhCREVBMUFENENGNzEwMERGRTg4NCAvKiBJbmZlcnJlZFZh
bHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RjhCREU4MUFENENGNzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVlLmNwcCAqLzsgfTsKIAkJMEZG
OEJERUIxQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVkVmFsdWUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjhCREU5MUFENENGNzEwMERGRTg4NCAv
KiBJbmZlcnJlZFZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEZGOTIyRDQxNEY0NkI0MTAwNDFBMjRFIC8qIExMSW50T2Zmc2V0c0V4dHJh
Y3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjQ2ODBBMTE0QkE3RjgyMDBCRkUyNzIgLyogTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcCAqLzsg
fTsKKwkJMEZGOUNFNzMxQjlDRDZEMDAwNEVEQ0E2IC8qIFBvbHltb3JwaGljQWNjZXNzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjlDRTcxMUI5
Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5jcHAgKi87IH07CisJCTBGRjlDRTc0
MUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGOUNFNzIxQjlDRDZEMDAwNEVEQ0E2IC8q
IFBvbHltb3JwaGljQWNjZXNzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEZGQTU0OTcxNkI4ODM1MDAwQjNBOTgyIC8qIEE2NERPcGNvZGUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjUyQTNBMjIx
NjUxQzY5NzAwQTgwQUZFIC8qIEE2NERPcGNvZGUuY3BwICovOyB9OwogCQkwRkZBNTQ5ODE2Qjg4
MzUzMDBCM0E5ODIgLyogQTY0RE9wY29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNjUyQTNBMjMxNjUxQzY5NzAwQTgwQUZFIC8qIEE2NERPcGNvZGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkZC
NkMzODFBRjQ4RERDMDBEQjFCRjcgLyogVHlwZW9mVHlwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZCNkMzNjFBRjQ4RERDMDBEQjFCRjcgLyog
VHlwZW9mVHlwZS5jcHAgKi87IH07CkBAIC0yMTAzLDcgKzIwOTgsNiBAQAogCQkwRjMwMEI3QTE4
QUIxQjE0MDBBNkQ3MkUgLyogREZHSW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2UuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHSW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2Uu
aDsgcGF0aCA9IGRmZy9ERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjM0QjE0NzE2RDQyMDBFMDAxQ0RBNUEgLyogREZHVXNlS2lu
ZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdVc2VLaW5kLmNw
cDsgcGF0aCA9IGRmZy9ERkdVc2VLaW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYzNEIxNDgxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVXNlS2luZC5oOyBwYXRoID0gZGZnL0RGR1VzZUtpbmQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYzNEIxNEIxNkQ0M0UwQzAwMUNEQTVB
IC8qIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzOEIwMEYxN0NGMDc3RjAwQjE0NEQzIC8qIExMSW50RW50
cnlwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBMTEludEVudHJ5cG9pbnQuY3BwOyBwYXRo
ID0gbGxpbnQvTExJbnRFbnRyeXBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYzOEIwMTAxN0NGMDc3RjAwQjE0NEQzIC8qIExMSW50RW50cnlwb2ludC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBMTEludEVudHJ5cG9pbnQuaDsgcGF0aCA9IGxsaW50L0xMSW50RW50cnlwb2ludC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM4QjAxMzE3Q0ZFNzU1MDBCMTQ0RDMg
LyogREZHQ29tcGlsYXRpb25LZXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gREZHQ29tcGlsYXRpb25LZXkuY3BwOyBwYXRoID0gZGZnL0RGR0NvbXBpbGF0aW9uS2V5
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxNTYsOCArMjE1MCw2IEBACiAJ
CTBGNDg1MzI2MTg3REZERUMwMDgzQjY4NyAvKiBGVExSZWNvdmVyeU9wY29kZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExSZWNvdmVyeU9wY29kZS5oOyBwYXRoID0gZnRs
L0ZUTFJlY292ZXJ5T3Bjb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDkz
QUY4MTZEMENBRDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTb3VyY2VQcm92aWRlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNEI5NERCMTdCOUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5s
aW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlZEFycmF5SW5saW5l
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjRDRUQ1QzE4Q0VBN0FCMDA4MDJG
RTAgLyogUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMEY0Q0VENUQxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0
QnlJZExpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9seW1vcnBoaWNH
ZXRCeUlkTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRGMjlERDE4QjZB
RDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RhdGljRXhlY3V0aW9u
Q291bnRFc3RpbWF0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR1N0YXRpY0V4ZWN1dGlvbkNv
dW50RXN0aW1hdGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0
RjI5REUxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlv
blBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1N0YXRpY0V4ZWN1
dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHU3RhdGljRXhlY3V0aW9u
Q291bnRFc3RpbWF0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1
MEFGM0IxOTNFOEIzOTAwNjc0RUU4IC8qIERGR1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaDsg
cGF0aCA9IGRmZy9ERkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTIyMjksOCArMjIyMSw2IEBACiAJCTBGNzAyNUE4MTcxNEIwRjgwMDM4MkMw
RSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmg7IHBhdGggPSBkZmcvREZHT1NSRXhp
dENvbXBpbGVyQ29tbW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzE0Q0Ex
MTZFQTkyRUQwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9u
UGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjcxNENBMjE2RUE5MkVEMDBGM0VCRUIgLyog
REZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHQmFj
a3dhcmRzUHJvcGFnYXRpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkw
Rjc1NzZEMDE4RTFGRUU5MDAyRUY0Q0QgLyogQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWNjZXNzb3JDYWxsSklUU3R1
YlJvdXRpbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjc1NzZEMTE4RTFG
RUU5MDAyRUY0Q0QgLyogQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NjZEMUMxNUE1MDI4RDAwOEYzNjNFIC8qIEpJVFN0
dWJSb3V0aW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFN0dWJSb3V0
aW5lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzY2RDI2MTVBOENDMUIwMDhG
MzYzRSAvKiBKSVRTdHViUm91dGluZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKSVRTdHViUm91dGluZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGNzY2RDI5MTVBOENDMzQwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZVNldC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRTdHViUm91dGluZVNldC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMzAzLDggKzIyOTMsNiBAQAogCQkwRjlFMzI2
MjFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhh
c2UuaDsgcGF0aCA9IGRmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlGQjRGMjE3RkNCOTE3MDBDQjY3RjggLyogREZHU3Rh
Y2tMYXlvdXRQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBE
RkdTdGFja0xheW91dFBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdTdGFja0xheW91dFBoYXNlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RkI0RjMxN0ZDQjkxNzAwQ0I2N0Y4
IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHU3RhY2tMYXlvdXRQaGFzZS5oOyBwYXRoID0gZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY5RkM4QkYxNEUxQjVGQjAwRDUyQUUw
IC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTBGOUZDOEMwMTRFMUI1RkIwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5
SWRMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvbHltb3JwaGljUHV0
QnlJZExpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RkM4QzExNEUxQjVG
QjAwRDUyQUUwIC8qIFB1dEtpbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UHV0S2luZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkEyQzE3OTE3RDdDRjg0
MDA5RDAxNUYgLyogVGVzdFJ1bm5lclV0aWxzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFRlc3RSdW5uZXJVdGlscy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGQTJDMTdBMTdEN0NGODQwMDlEMDE1RiAvKiBUZXN0UnVubmVyVXRpbHMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGVzdFJ1bm5lclV0aWxzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTc5LDYgKzI1NjcsOCBAQAogCQkwRkY4QkRFODFBRDRD
RjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBJbmZlcnJlZFZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZGOEJERTkxQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVkVmFsdWUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5mZXJyZWRWYWx1ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkY5MjJDRjE0RjQ2QjEzMDA0MUEyNEUgLyogSlNDTExJbnRPZmZz
ZXRzRXh0cmFjdG9yICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5
cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBh
dGggPSBKU0NMTEludE9mZnNldHNFeHRyYWN0b3I7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNU
U19ESVI7IH07CisJCTBGRjlDRTcxMUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vz
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQb2x5bW9ycGhpY0Fj
Y2Vzcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRjlDRTcyMUI5Q0Q2RDAw
MDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQb2x5bW9ycGhpY0FjY2Vzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkZCNkMzNjFBRjQ4RERDMDBEQjFCRjcgLyogVHlwZW9mVHlwZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlb2ZUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZGQjZDMzcxQUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5cGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZW9mVHlwZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkZDOTlEMDE4NEVDOEFEMDA5QzEwQUIgLyogQ29uc3RhbnRN
b2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnN0YW50TW9kZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDA5NiwxMCArNDA4Niw2IEBACiAJCTE0MjlE
OTJDMEVEMjJENzAwMEI4OTYxOSAvKiBqaXQgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKAotCQkJCTBGRjA1NEY3MUFDMzVCNDQwMEU1QkU1NyAvKiBFeGVjdXRhYmxl
QWxsb2NhdGlvbkZ1enouY3BwICovLAotCQkJCTBGRjA1NEY4MUFDMzVCNDQwMEU1QkU1NyAvKiBF
eGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouaCAqLywKLQkJCQkwRjc1NzZEMDE4RTFGRUU5MDAyRUY0
Q0QgLyogQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuY3BwICovLAotCQkJCTBGNzU3NkQxMThF
MUZFRTkwMDJFRjRDRCAvKiBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5oICovLAogCQkJCTBG
NkIxQ0M3MTg2NDFERjgwMDg0NUQ5NyAvKiBBcml0eUNoZWNrRmFpbFJldHVyblRodW5rcy5jcHAg
Ki8sCiAJCQkJMEY2QjFDQzgxODY0MURGODAwODQ1RDk3IC8qIEFyaXR5Q2hlY2tGYWlsUmV0dXJu
VGh1bmtzLmggKi8sCiAJCQkJMEYyNEU1M0IxN0VBOUY1OTAwQUJCMjE3IC8qIEFzc2VtYmx5SGVs
cGVycy5jcHAgKi8sCkBAIC00MTA4LDYgKzQwOTQsOCBAQAogCQkJCTBGNjRCMjcwMUE3ODRCQUYw
MDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guaCAqLywKIAkJCQkwRjI0RTUzRDE3RUE5RjU5MDBBQkIy
MTcgLyogQ0NhbGxIZWxwZXJzLmggKi8sCiAJCQkJMEZEODJFMzcxNDFBQjE0MjAwMTc5Qzk0IC8q
IENvbXBhY3RKSVRDb2RlTWFwLmggKi8sCisJCQkJMEZGMDU0RjcxQUMzNUI0NDAwRTVCRTU3IC8q
IEV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5jcHAgKi8sCisJCQkJMEZGMDU0RjgxQUMzNUI0NDAw
RTVCRTU3IC8qIEV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5oICovLAogCQkJCUE3QjQ4REI2MEVF
NzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCAqLywKIAkJCQlBN0I0OERC
NTBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5oICovLAogCQkJCTg2REI2
NDYzMEY5NUM2RkMwMEQ3RDkyMSAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3Bw
ICovLApAQCAtNDE1NCw4ICs0MTQyLDYgQEAKIAkJCQkwRkM3MTJFMTE3Q0Q4NzhGMDA4Q0M5M0Mg
LyogSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLywKIAkJCQlBNzZGNTRB
MjEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVCYXJyaWVyLmggKi8sCiAJCQkJQTc2QzUxNzQx
MTgyNzQ4RDAwNzE1QjA1IC8qIEpTSW50ZXJmYWNlSklULmggKi8sCi0JCQkJMEZFRTk4NDIxQTg5
MjI3NTAwNzU0RTkzIC8qIFNldHVwVmFyYXJnc0ZyYW1lLmNwcCAqLywKLQkJCQkwRkVFOTg0MDFB
ODg2NUI2MDA3NTRFOTMgLyogU2V0dXBWYXJhcmdzRnJhbWUuaCAqLywKIAkJCQkwRkU4MzQxNTFB
NkVGOTdCMDBEMDQ4NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwICovLAogCQkJ
CTBGRTgzNDE2MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5o
ICovLAogCQkJCTBGQTdBOEU5MThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuY3BwICovLApAQCAtNDE2
OSw2ICs0MTU1LDggQEAKIAkJCQkwRjI0RTU0QTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5o
ICovLAogCQkJCTBGQTdBOEVEMThDRTRGRDgwMDUyMzcxRCAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3IuY3BwICovLAogCQkJCTBGMjRFNTRCMTdFRTI3NDkwMEFCQjIxNyAvKiBTY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3IuaCAqLywKKwkJCQkwRkVFOTg0MjFBODkyMjc1MDA3NTRFOTMgLyogU2V0
dXBWYXJhcmdzRnJhbWUuY3BwICovLAorCQkJCTBGRUU5ODQwMUE4ODY1QjYwMDc1NEU5MyAvKiBT
ZXR1cFZhcmFyZ3NGcmFtZS5oICovLAogCQkJCUE3MDlGMkVGMTdBMEFDMDQwMDUxMkU5OCAvKiBT
bG93UGF0aENhbGwuaCAqLywKIAkJCQlBNzM4NjU1MTExODY5N0I0MDA1NDAyNzkgLyogU3BlY2lh
bGl6ZWRUaHVua0pJVC5oICovLAogCQkJCUE3RkY2NDdBMThDNTJFODUwMEI1NTMwNyAvKiBTcGls
bFJlZ2lzdGVyc01vZGUuaCAqLywKQEAgLTU2MDIsMTEgKzU1OTAsOCBAQAogCQkJCTk2OUEwNzk1
MEVEMUQzQUUwMEYxRjY4MSAvKiBPcGNvZGUuaCAqLywKIAkJCQkwRjJCREMyQjE1MUZERThCMDBD
RDg5MTAgLyogT3BlcmFuZHMuaCAqLywKIAkJCQlBNzA0NDdFOTE3QTBCRDQ2MDBGNTg5OEUgLyog
T3BlcmFuZHNJbmxpbmVzLmggKi8sCi0JCQkJMEYzNEIxNEIxNkQ0M0UwQzAwMUNEQTVBIC8qIFBv
bHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdC5oICovLAotCQkJCTBGNENFRDVDMThDRUE3QUIw
MDgwMkZFMCAvKiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcCAqLywKLQkJCQkwRjRDRUQ1RDE4
Q0VBN0FCMDA4MDJGRTAgLyogUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oICovLAotCQkJCTBGOUZD
OEJGMTRFMUI1RkIwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcCAqLywKLQkJ
CQkwRjlGQzhDMDE0RTFCNUZCMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oICov
LAorCQkJCTBGRjlDRTcxMUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5jcHAg
Ki8sCisJCQkJMEZGOUNFNzIxQjlDRDZEMDAwNEVEQ0E2IC8qIFBvbHltb3JwaGljQWNjZXNzLmgg
Ki8sCiAJCQkJMEY5ODIwNUQxNkJGRTM3RjAwMjQwRDAyIC8qIFByZWNpc2VKdW1wVGFyZ2V0cy5j
cHAgKi8sCiAJCQkJMEY5ODIwNUUxNkJGRTM3RjAwMjQwRDAyIC8qIFByZWNpc2VKdW1wVGFyZ2V0
cy5oICovLAogCQkJCTBGRDNFNDA3MUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlv
bi5jcHAgKi8sCkBAIC01NjM3LDggKzU2MjIsOCBAQAogCQkJCTBGMkQ0REU3MTk4MzJEQUMwMDdE
NEIxOSAvKiBUeXBlTG9jYXRpb24uaCAqLywKIAkJCQlBNzlFNzgxRTE1RUVDQkE4MDA0N0M4NTUg
LyogVW5saW5rZWRDb2RlQmxvY2suY3BwICovLAogCQkJCUE3OUU3ODFGMTVFRUNCQTgwMDQ3Qzg1
NSAvKiBVbmxpbmtlZENvZGVCbG9jay5oICovLAotCQkJCTE0MTQyRTUwMUI3OTZFQ0UwMEY0QkY0
QiAvKiBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oICovLAogCQkJCTE0MTQyRTU0MUI3OTcz
QzAwMEY0QkY0QiAvKiBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAgKi8sCisJCQkJMTQx
NDJFNTAxQjc5NkVDRTAwRjRCRjRCIC8qIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmggKi8s
CiAJCQkJQjU5Rjg5MzgxODkxQURCNTAwRDVDQ0RDIC8qIFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJl
YW0uY3BwICovLAogCQkJCUI1OUY4OTM3MTg5MUFEMzMwMEQ1Q0NEQyAvKiBVbmxpbmtlZEluc3Ry
dWN0aW9uU3RyZWFtLmggKi8sCiAJCQkJMEY5NjNCMzYxM0ZDNkZERTAwMDJEOUIyIC8qIFZhbHVl
UHJvZmlsZS5oICovLApAQCAtNjIwMyw3ICs2MTg4LDYgQEAKIAkJCQkwRkMwOTc3MTE0NjkzQUY1
MDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjcw
MjVBQTE3MTRCMEZDMDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkVGQzlBQjE2ODFBM0I2MDA1NjdGNTMgLyogREZHT1NSRXhpdEp1bXBQ
bGFjZWhvbGRlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEY0Q0VENUYxOENFQTdBQjAwODAyRkUw
IC8qIFBvbHltb3JwaGljR2V0QnlJZExpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkVF
MTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRpb24uaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGRkZDOTVDMTRFRjkwQUYwMEM3MjUzMiAvKiBERkdQaGFzZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTVFQTcwRUUxOUY1QjVDNDAwOThGNUVDIC8qIEpTQ29udGV4dFJlZkluc3BlY3Rv
clN1cHBvcnQuaCBpbiBIZWFkZXJzICovLApAQCAtNjI1Miw2ICs2MjM2LDcgQEAKIAkJCQk5OUU0
NUEyNDE4QTFCMjU5MDAyNkQ4OEYgLyogRW1wdHlJbnB1dEN1cnNvci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTQxNDJFNTMxQjc5NkVERDAwRjRCRjRCIC8qIEV4ZWN1dGFibGVJbmZvLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5OUU0NUEyNjE4QTFCMjU5MDAyNkQ4OEYgLyogRW5jb2RlZFZhbHVlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkY5Q0U3NDFCOUNENkQwMDA0RURDQTYgLyogUG9seW1vcnBo
aWNBY2Nlc3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTg3NEVFMTk0RkVCMTIwMEFBQjJDMSAv
KiBERkdNYXlFeGl0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzMwNDYwNzBFMUY0OTdGMDAzMjMy
Q0YgLyogRXJyb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDJFOTBEMEUxODM5REIwMDBGOTI5
NyAvKiBFcnJvckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTY0ODUsNyArNjQ3MCw2
IEBACiAJCQkJQkMxOEM0MUUwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQ29udGV4dFJlZi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTQ4Q0QxRDgxMDhDRjkwMjAwODE2M0M2IC8qIEpTQ29udGV4dFJlZlBy
aXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MjAyOEI4MTc5NzYwMUUwMDk4MDI4QyAvKiBK
U0NUZXN0UnVubmVyVXRpbHMuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGNzU3NkQzMThFMUZFRTkw
MDJFRjRDRCAvKiBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYyQjY2RUMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMkI2NkVFMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3UHJvdG90eXBlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5Nzg4MDE0MTE0NzFBRDkyMDA0MUIwMTYgLyogSlNEYXRlTWF0
aC5oIGluIEhlYWRlcnMgKi8sCkBAIC02Njg1LDggKzY2NjksNiBAQAogCQkJCTBGQ0NBRTQ1MTZE
MENGNzQwMEQwQzY1QiAvKiBQYXJzZXJFcnJvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc3RjE4
MjUxNjQxOTJDNzAwNjQwQTQ3IC8qIFBhcnNlck1vZGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk2
NTMwM0Q2NDE0NDdCOUUxMDBEM0Y5MDQgLyogUGFyc2VyVG9rZW5zLmggaW4gSGVhZGVycyAqLywK
LQkJCQkwRjM0QjE0QzE2RDQzRTBEMDAxQ0RBNUEgLyogUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1
cmVMaXN0LmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjlGQzhDNDE0RTFCNjAwMDBENTJBRTAgLyog
UG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4RjE0MzQxQURG
MDkwMTAwRUQ3OTJDIC8qIERGR0Vwb2NoLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk4MjA2MTE2
QkZFMzgzMDAyNDBEMDIgLyogUHJlY2lzZUp1bXBUYXJnZXRzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjJERDgxNTFBQjNEOEJFMDBCQkI4RTggLyogREZHRm9yQWxsS2lsbHMuaCBpbiBIZWFkZXJz
ICovLApAQCAtNzg0Nyw3ICs3ODI5LDYgQEAKIAkJCQkwRjBCODM5QzE0QkNGNDYzMDA4ODVCNEYg
LyogTExJbnRUaHVua3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDRUZBQ0QxODA1RTc1NTAw
NDcyQ0U0IC8qIExMVk1BUEkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdFNUFCMzcxNzk5RTRC
MjAwRDI4MzNEIC8qIExMVk1EaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEY0
Q0VENUUxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTQ0NjlEREUxMDdFQzdFNzAwNjUwNDQ2IC8qIExvb2t1cC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjQ2ODBDQzE0QkJCMTdBMDBCRkUyNzIgLyogTG93TGV2ZWxJbnRl
cnByZXRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEI3MjNCMjEyRDdEQTQ2MDAzQkQ1RUQg
LyogTWFjaGluZVN0YWNrTWFya2VyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzg4OSw3ICs3ODcw
LDYgQEAKIAkJCQkwRkUyMjhFRTE0MzZBQjJDMDAxOTZDNDggLyogT3B0aW9ucy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDhGMjFCQzEwN0VDNTREMDA0MkVDMkMgLyogUGFyc2VyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTkzMDUyQzM0MEZCNzkyMTkwMDQ4RkRDMyAvKiBQYXJzZXJBcmVuYS5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQkwRjlGQzhDMzE0RTFCNUZFMDBENTJBRTAgLyogUG9seW1v
cnBoaWNQdXRCeUlkTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjk4MjA2MDE2QkZFMzgx
MDAyNDBEMDIgLyogUHJlY2lzZUp1bXBUYXJnZXRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk1
NzQyRjY1MEREMTFGNUEwMDA5MTdGQiAvKiBQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGMkI5Q0Y4MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtNzkwNiw2ICs3ODg2LDcgQEAKIAkJCQkwRjE5MENBQzE4OUQ4MkY2MDAwQUU1RjAg
LyogUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlC
MzE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJPcmlnaW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZGNzI5QjQxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2luU3RhY2suY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEZGOUNFNzMxQjlDRDZEMDAwNEVEQ0E2IC8qIFBvbHltb3JwaGlj
QWNjZXNzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjEwNThCMTY3NTQ4MzEwMEY4QUI2RSAv
KiBQcm9maWxlck9TUkV4aXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMTA1OEQxNjc1NDgz
NzAwRjhBQjZFIC8qIFByb2ZpbGVyT1NSRXhpdFNpdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEYxMzkxMkIxNjc3MUMzQTAwOUNDQjA3IC8qIFByb2ZpbGVyUHJvZmlsZWRCeXRlY29kZXMuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC04MDExLDcgKzc5OTIsNiBAQAogCQkJCUE3NkYyNzk0MTVGMTND
OTYwMDUxN0Q2NyAvKiBVbmxpbmtlZENvZGVCbG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
NTlGODkzOTE4OTFGMjlGMDBENUNDREMgLyogVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlFMzlEQTRBNjFCN0U4QjdDMDA4NEYzM0EgLyogSlNNb2R1bGVS
ZWNvcmQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEY3NTc2RDIxOEUxRkVFOTAwMkVGNENEIC8q
IEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjRF
NTU4MTdGNzRFREIwMEFCQjIxNyAvKiBWYWx1ZVJlY292ZXJ5LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUUxOEUzQTU5MERGOTI3OEMwMEQ5MEIzNCAvKiBWTS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlGRTU5MzJBNzE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmNwcCBpbiBTb3VyY2Vz
ICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ckNvZGVSZWYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCShyZXZpc2lvbiAxODk1MTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMjcsNiArMzI3LDEwIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZHVtcFdpdGhOYW1l
KGNvbnN0IGNoYXIqIG5hbWUsIFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgeworICAgICAg
ICBpZiAoIW1fdmFsdWUpIHsKKyAgICAgICAgICAgIG91dC5wcmludChuYW1lLCAiKG51bGwpIik7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAgaWYgKGV4ZWN1dGFibGVB
ZGRyZXNzKCkgPT0gZGF0YUxvY2F0aW9uKCkpIHsKICAgICAgICAgICAgIG91dC5wcmludChuYW1l
LCAiKCIsIFJhd1BvaW50ZXIoZXhlY3V0YWJsZUFkZHJlc3MoKSksICIpIik7CiAgICAgICAgICAg
ICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkocmV2aXNpb24gMTg5NTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDggKzUzLDcgQEAKICNpbmNs
dWRlICJMTEludEVudHJ5cG9pbnQuaCIKICNpbmNsdWRlICJMb3dMZXZlbEludGVycHJldGVyLmgi
CiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIlBvbHltb3JwaGljR2V0QnlJZExp
c3QuaCIKLSNpbmNsdWRlICJQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgiCisjaW5jbHVkZSAiUG9s
eW1vcnBoaWNBY2Nlc3MuaCIKICNpbmNsdWRlICJQcm9maWxlckRhdGFiYXNlLmgiCiAjaW5jbHVk
ZSAiUmVkdWNlV2hpdGVzcGFjZS5oIgogI2luY2x1ZGUgIlJlcGF0Y2guaCIKQEAgLTM0MywyMCAr
MzQyLDE5IEBAIHZvaWQgQ29kZUJsb2NrOjpwcmludEdldEJ5SWRDYWNoZVN0YXR1cygKICAgICAg
ICAgaWYgKHN0dWJJbmZvLnNlZW4pIHsKICAgICAgICAgICAgIG91dC5wcmludGYoIiBqaXQoIik7
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIFN0cnVjdHVyZSogYmFzZVN0cnVjdHVyZSA9IDA7
Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSA9IDA7Ci0gICAgICAg
ICAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0ID0gMDsKKyAgICAgICAgICAgIFN0cnVj
dHVyZSogYmFzZVN0cnVjdHVyZSA9IG51bGxwdHI7CisgICAgICAgICAgICBQb2x5bW9ycGhpY0Fj
Y2Vzcyogc3R1YiA9IG51bGxwdHI7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHN3aXRjaCAo
c3R1YkluZm8uYWNjZXNzVHlwZSkgewotICAgICAgICAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lk
X3NlbGY6CisgICAgICAgICAgICBzd2l0Y2ggKHN0dWJJbmZvLmNhY2hlVHlwZSkgeworICAgICAg
ICAgICAgY2FzZSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxmOgogICAgICAgICAgICAgICAgIG91dC5w
cmludGYoInNlbGYiKTsKLSAgICAgICAgICAgICAgICBiYXNlU3RydWN0dXJlID0gc3R1YkluZm8u
dS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpOworICAgICAgICAgICAgICAg
IGJhc2VTdHJ1Y3R1cmUgPSBzdHViSW5mby51LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUu
Z2V0KCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIGFjY2Vzc19n
ZXRfYnlfaWRfbGlzdDoKLSAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCJsaXN0Iik7Ci0gICAg
ICAgICAgICAgICAgbGlzdCA9IHN0dWJJbmZvLnUuZ2V0QnlJZExpc3QubGlzdDsKKyAgICAgICAg
ICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOgorICAgICAgICAgICAgICAgIG91dC5wcmludGYoInN0
dWIiKTsKKyAgICAgICAgICAgICAgICBzdHViID0gc3R1YkluZm8udS5zdHViOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBhY2Nlc3NfdW5zZXQ6CisgICAgICAgICAg
ICBjYXNlIENhY2hlVHlwZTo6VW5zZXQ6CiAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigidW5z
ZXQiKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0z
NjgsMjcgKzM2NiwxMCBAQCB2b2lkIENvZGVCbG9jazo6cHJpbnRHZXRCeUlkQ2FjaGVTdGF0dXMo
CiAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiLCAiKTsKICAgICAgICAgICAgICAgICBkdW1w
U3RydWN0dXJlKG91dCwgInN0cnVjdCIsIGJhc2VTdHJ1Y3R1cmUsIGlkZW50KTsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHByb3RvdHlwZVN0cnVjdHVyZSkg
ewotICAgICAgICAgICAgICAgIG91dC5wcmludGYoIiwgIik7Ci0gICAgICAgICAgICAgICAgZHVt
cFN0cnVjdHVyZShvdXQsICJwcm90b3R5cGVTdHJ1Y3QiLCBiYXNlU3RydWN0dXJlLCBpZGVudCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChsaXN0KSB7Ci0g
ICAgICAgICAgICAgICAgb3V0LnByaW50ZigiLCBsaXN0ID0gJXA6IFsiLCBsaXN0KTsKLSAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+c2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGkpCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQu
cHJpbnRmKCIsICIpOwotICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIoIik7Ci0gICAg
ICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAiYmFzZSIsIGxpc3QtPmF0KGkpLnN0
cnVjdHVyZSgpLCBpZGVudCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbGlzdC0+YXQoaSku
Y29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXQu
cHJpbnRmKCIsICIpOwotICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KGxpc3QtPmF0
KGkpLmNvbmRpdGlvblNldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICBvdXQucHJpbnRmKCIpIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIG91dC5wcmludGYoIl0iKTsKLSAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHN0
dWIpCisgICAgICAgICAgICAgICAgb3V0LnByaW50KCIsICIsICpzdHViKTsKKwogICAgICAgICAg
ICAgb3V0LnByaW50ZigiKSIpOwogICAgICAgICB9CiAgICAgfQpAQCAtNDQ0LDUzICs0MjUsMTYg
QEAgdm9pZCBDb2RlQmxvY2s6OnByaW50UHV0QnlJZENhY2hlU3RhdHVzKAogICAgICAgICBpZiAo
c3R1YkluZm8uc2VlbikgewogICAgICAgICAgICAgb3V0LnByaW50ZigiIGppdCgiKTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgc3dpdGNoIChzdHViSW5mby5hY2Nlc3NUeXBlKSB7Ci0gICAg
ICAgICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFjZToKKyAgICAgICAgICAgIHN3aXRj
aCAoc3R1YkluZm8uY2FjaGVUeXBlKSB7CisgICAgICAgICAgICBjYXNlIENhY2hlVHlwZTo6UHV0
QnlJZFJlcGxhY2U6CiAgICAgICAgICAgICAgICAgb3V0LnByaW50KCJyZXBsYWNlLCAiKTsKLSAg
ICAgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgInN0cnVjdCIsIHN0dWJJbmZvLnUucHV0
QnlJZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgaWRlbnQpOworICAgICAgICAg
ICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAic3RydWN0Iiwgc3R1YkluZm8udS5ieUlkU2VsZi5i
YXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBpZGVudCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWw6Ci0g
ICAgICAgICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6Ci0gICAg
ICAgICAgICAgICAgb3V0LnByaW50KCJ0cmFuc2l0aW9uLCAiKTsKLSAgICAgICAgICAgICAgICBk
dW1wU3RydWN0dXJlKG91dCwgInByZXYiLCBzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnBy
ZXZpb3VzU3RydWN0dXJlLmdldCgpLCBpZGVudCk7Ci0gICAgICAgICAgICAgICAgb3V0LnByaW50
KCIsICIpOwotICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAibmV4dCIsIHN0dWJJ
bmZvLnUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLmdldCgpLCBpZGVudCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0
KQotICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIiwgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQ6OmZyb21SYXdQb2ludGVyKHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24ucmF3
Q29uZGl0aW9uU2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IGFjY2Vzc19wdXRfYnlfaWRfbGlzdDogewotICAgICAgICAgICAgICAgIG91dC5wcmludGYoImxp
c3QgPSBbIik7Ci0gICAgICAgICAgICAgICAgUG9seW1vcnBoaWNQdXRCeUlkTGlzdCogbGlzdCA9
IHN0dWJJbmZvLnUucHV0QnlJZExpc3QubGlzdDsKLSAgICAgICAgICAgICAgICBDb21tYVByaW50
ZXIgY29tbWE7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3Qt
PnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgIigi
KTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgUHV0QnlJZEFjY2VzcyYgYWNjZXNzID0gbGlz
dC0+YXQoaSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAo
YWNjZXNzLmlzUmVwbGFjZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQo
InJlcGxhY2UsICIpOwotICAgICAgICAgICAgICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQs
ICJzdHJ1Y3QiLCBhY2Nlc3Mub2xkU3RydWN0dXJlKCksIGlkZW50KTsKLSAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIGlmIChhY2Nlc3MuaXNTZXR0ZXIoKSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0LnByaW50KCJzZXR0ZXIsICIpOwotICAgICAgICAgICAgICAgICAgICAgICAgZHVt
cFN0cnVjdHVyZShvdXQsICJzdHJ1Y3QiLCBhY2Nlc3Mub2xkU3RydWN0dXJlKCksIGlkZW50KTsK
LSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhY2Nlc3MuaXNDdXN0b20oKSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCJjdXN0b20sICIpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJzdHJ1Y3QiLCBhY2Nlc3Mub2xkU3RydWN0
dXJlKCksIGlkZW50KTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhY2Nlc3MuaXNU
cmFuc2l0aW9uKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgidHJhbnNp
dGlvbiwgIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgInBy
ZXYiLCBhY2Nlc3Mub2xkU3RydWN0dXJlKCksIGlkZW50KTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG91dC5wcmludCgiLCAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1
cmUob3V0LCAibmV4dCIsIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgaWRlbnQpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFhY2Nlc3MuY29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCAiLCBhY2Nlc3MuY29uZGl0aW9u
U2V0KCkpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG91dC5wcmludCgidW5rbm93biIpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAgICAgb3V0LnByaW50KCIpIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIG91dC5wcmludCgiXSIpOworICAgICAgICAgICAgY2FzZSBDYWNoZVR5cGU6OlN0dWI6
IHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoInN0dWIsICIsICpzdHViSW5mby51LnN0dWIp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgY2Fz
ZSBhY2Nlc3NfdW5zZXQ6CisgICAgICAgICAgICBjYXNlIENhY2hlVHlwZTo6VW5zZXQ6CiAgICAg
ICAgICAgICAgICAgb3V0LnByaW50ZigidW5zZXQiKTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0yNDYxLDM5ICsyNDA1LDIyIEBAIHZvaWQgQ29kZUJs
b2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG8KICAgICBpZiAoSklUQ29kZTo6aXNKSVQoaml0
VHlwZSgpKSkgewogICAgICAgICBmb3IgKEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz46Oml0ZXJhdG9y
IGl0ZXIgPSBtX3N0dWJJbmZvcy5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikgewogICAgICAgICAg
ICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gKippdGVyOwotICAgICAgICAgICAgc3dp
dGNoIChzdHViSW5mby5hY2Nlc3NUeXBlKSB7Ci0gICAgICAgICAgICBjYXNlIGFjY2Vzc19wdXRf
YnlfaWRfdHJhbnNpdGlvbl9ub3JtYWw6Ci0gICAgICAgICAgICBjYXNlIGFjY2Vzc19wdXRfYnlf
aWRfdHJhbnNpdGlvbl9kaXJlY3Q6IHsKLSAgICAgICAgICAgICAgICBKU0NlbGwqIG9yaWdpbiA9
IHN0dWJJbmZvLmNvZGVPcmlnaW4uY29kZU9yaWdpbk93bmVyKCk7Ci0gICAgICAgICAgICAgICAg
aWYgKCghb3JpZ2luIHx8IEhlYXA6OmlzTWFya2VkKG9yaWdpbikpCi0gICAgICAgICAgICAgICAg
ICAgICYmIEhlYXA6OmlzTWFya2VkKHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlv
dXNTdHJ1Y3R1cmUuZ2V0KCkpKQotICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgm
c3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUpOwotICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYWxsQXJlTWFya2VkU29GYXIgPSBmYWxzZTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUg
IT0gQ2FjaGVUeXBlOjpTdHViKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgUG9seW1vcnBoaWNBY2Nlc3MqIGxpc3QgPSBzdHViSW5mby51LnN0dWI7CisgICAgICAgICAg
ICBKU0NlbGwqIG9yaWdpbiA9IHN0dWJJbmZvLmNvZGVPcmlnaW4uY29kZU9yaWdpbk93bmVyKCk7
CisgICAgICAgICAgICBpZiAob3JpZ2luICYmICFIZWFwOjppc01hcmtlZChvcmlnaW4pKSB7Cisg
ICAgICAgICAgICAgICAgYWxsQXJlTWFya2VkU29GYXIgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY2FzZSBhY2Nlc3NfcHV0
X2J5X2lkX2xpc3Q6IHsKLSAgICAgICAgICAgICAgICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiBs
aXN0ID0gc3R1YkluZm8udS5wdXRCeUlkTGlzdC5saXN0OwotICAgICAgICAgICAgICAgIEpTQ2Vs
bCogb3JpZ2luID0gc3R1YkluZm8uY29kZU9yaWdpbi5jb2RlT3JpZ2luT3duZXIoKTsKLSAgICAg
ICAgICAgICAgICBpZiAob3JpZ2luICYmICFIZWFwOjppc01hcmtlZChvcmlnaW4pKSB7CisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBsaXN0LT5zaXplKCk7IGotLTspIHsKKyAgICAgICAg
ICAgICAgICBjb25zdCBBY2Nlc3NDYXNlJiBhY2Nlc3MgPSBsaXN0LT5hdChqKTsKKyAgICAgICAg
ICAgICAgICBpZiAoYWNjZXNzLnR5cGUoKSAhPSBBY2Nlc3NDYXNlOjpUcmFuc2l0aW9uKQorICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZiAoSGVhcDo6aXNN
YXJrZWQoYWNjZXNzLnN0cnVjdHVyZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5h
cHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRlcihhY2Nlc3MubmV3U3RydWN0dXJlKCkpOwor
ICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgYWxsQXJlTWFya2VkU29G
YXIgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGxpc3QtPnNpemUoKTsgai0tOykg
ewotICAgICAgICAgICAgICAgICAgICBQdXRCeUlkQWNjZXNzJiBhY2Nlc3MgPSBsaXN0LT5tX2xp
c3Rbal07Ci0gICAgICAgICAgICAgICAgICAgIGlmICghYWNjZXNzLmlzVHJhbnNpdGlvbigpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChIZWFwOjppc01hcmtlZChhY2Nlc3Mub2xkU3RydWN0dXJlKCkpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgdmlzaXRvci5hcHBlbmQoJmFjY2Vzcy5tX25ld1N0cnVjdHVyZSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGFsbEFyZU1hcmtlZFNv
RmFyID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMjc4
NSwxMCArMjcxMiwxMCBAQCB2b2lkIENvZGVCbG9jazo6Z2V0QnlWYWxJbmZvTWFwKEJ5VmFsSW5m
CiB9CiAKICNpZiBFTkFCTEUoSklUKQotU3RydWN0dXJlU3R1YkluZm8qIENvZGVCbG9jazo6YWRk
U3R1YkluZm8oKQorU3RydWN0dXJlU3R1YkluZm8qIENvZGVCbG9jazo6YWRkU3R1YkluZm8oQWNj
ZXNzVHlwZSBhY2Nlc3NUeXBlKQogewogICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1f
bG9jayk7Ci0gICAgcmV0dXJuIG1fc3R1YkluZm9zLmFkZCgpOworICAgIHJldHVybiBtX3N0dWJJ
bmZvcy5hZGQoYWNjZXNzVHlwZSk7CiB9CiAKIFN0cnVjdHVyZVN0dWJJbmZvKiBDb2RlQmxvY2s6
OmZpbmRTdHViSW5mbyhDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxODk1MTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAg
LTIwOCw3ICsyMDgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBnZXRCeVZhbEluZm9NYXAoQnlWYWxJ
bmZvTWFwJiByZXN1bHQpOwogICAgIAogI2lmIEVOQUJMRShKSVQpCi0gICAgU3RydWN0dXJlU3R1
YkluZm8qIGFkZFN0dWJJbmZvKCk7CisgICAgU3RydWN0dXJlU3R1YkluZm8qIGFkZFN0dWJJbmZv
KEFjY2Vzc1R5cGUpOwogICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz46Oml0ZXJhdG9yIHN0dWJJ
bmZvQmVnaW4oKSB7IHJldHVybiBtX3N0dWJJbmZvcy5iZWdpbigpOyB9CiAgICAgQmFnPFN0cnVj
dHVyZVN0dWJJbmZvPjo6aXRlcmF0b3Igc3R1YkluZm9FbmQoKSB7IHJldHVybiBtX3N0dWJJbmZv
cy5lbmQoKTsgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dl
dEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9HZXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMTg5NTE1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NiwxNCArMjYsMTMgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJHZXRCeUlkU3Rh
dHVzLmgiCiAKLSNpbmNsdWRlICJBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5oIgogI2luY2x1
ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvbXBsZXhHZXRTdGF0dXMuaCIKICNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNTY29wZS5oIgogI2luY2x1ZGUgIkxMSW50RGF0
YS5oIgogI2luY2x1ZGUgIkxvd0xldmVsSW50ZXJwcmV0ZXIuaCIKLSNpbmNsdWRlICJQb2x5bW9y
cGhpY0dldEJ5SWRMaXN0LmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKICNpbmNs
dWRlIDx3dGYvTGlzdER1bXAuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0xMzksMTIgKzEzOCwx
MiBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgaWYgKCFz
dHViSW5mby0+c2VlbikKICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlv
bik7CiAgICAgCi0gICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogbGlzdCA9IDA7CisgICAgUG9s
eW1vcnBoaWNBY2Nlc3MqIGxpc3QgPSAwOwogICAgIFN0YXRlIHNsb3dQYXRoU3RhdGUgPSBUYWtl
c1Nsb3dQYXRoOwotICAgIGlmIChzdHViSW5mby0+YWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5
X2lkX2xpc3QpIHsKLSAgICAgICAgbGlzdCA9IHN0dWJJbmZvLT51LmdldEJ5SWRMaXN0Lmxpc3Q7
CisgICAgaWYgKHN0dWJJbmZvLT5jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpTdHViKSB7CisgICAg
ICAgIGxpc3QgPSBzdHViSW5mby0+dS5zdHViOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGlzdC0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGNvbnN0IEdldEJ5SWRBY2Nl
c3MmIGFjY2VzcyA9IGxpc3QtPmF0KGkpOworICAgICAgICAgICAgY29uc3QgQWNjZXNzQ2FzZSYg
YWNjZXNzID0gbGlzdC0+YXQoaSk7CiAgICAgICAgICAgICBpZiAoYWNjZXNzLmRvZXNDYWxscygp
KQogICAgICAgICAgICAgICAgIHNsb3dQYXRoU3RhdGUgPSBNYWtlc0NhbGxzOwogICAgICAgICB9
CkBAIC0xNTcsMTIgKzE1NiwxMiBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1
dGVGb3JTCiAgICAgR2V0QnlJZFN0YXR1cyByZXN1bHQ7CiAgICAgcmVzdWx0Lm1fc3RhdGUgPSBT
aW1wbGU7CiAgICAgcmVzdWx0Lm1fd2FzU2VlbkluSklUID0gdHJ1ZTsgLy8gVGhpcyBpcyBpbnRl
cmVzdGluZyBmb3IgYnl0ZWNvZGUgZHVtcGluZyBvbmx5LgotICAgIHN3aXRjaCAoc3R1YkluZm8t
PmFjY2Vzc1R5cGUpIHsKLSAgICBjYXNlIGFjY2Vzc191bnNldDoKKyAgICBzd2l0Y2ggKHN0dWJJ
bmZvLT5jYWNoZVR5cGUpIHsKKyAgICBjYXNlIENhY2hlVHlwZTo6VW5zZXQ6CiAgICAgICAgIHJl
dHVybiBHZXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwogICAgICAgICAKLSAgICBjYXNlIGFj
Y2Vzc19nZXRfYnlfaWRfc2VsZjogewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0
dWJJbmZvLT51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCk7CisgICAgY2Fz
ZSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxmOiB7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gc3R1YkluZm8tPnUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKTsKICAgICAg
ICAgaWYgKHN0cnVjdHVyZS0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKSkK
ICAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUsIHRydWUpOwog
ICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzSWdub3JlZDsKQEAgLTE3NywxMiArMTc2LDI1IEBA
IEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICB9CiAgICAgICAgIAotICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9saXN0
OiB7CisgICAgY2FzZSBDYWNoZVR5cGU6OlN0dWI6IHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBs
aXN0SW5kZXggPSAwOyBsaXN0SW5kZXggPCBsaXN0LT5zaXplKCk7ICsrbGlzdEluZGV4KSB7Ci0g
ICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGxpc3QtPmF0KGxpc3RJbmRleCkuc3Ry
dWN0dXJlKCk7CisgICAgICAgICAgICBjb25zdCBBY2Nlc3NDYXNlJiBhY2Nlc3MgPSBsaXN0LT5h
dChsaXN0SW5kZXgpOworICAgICAgICAgICAgaWYgKGFjY2Vzcy52aWFQcm94eSgpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUsIHRydWUpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFjY2Vzcy5zdHJ1
Y3R1cmUoKTsKKyAgICAgICAgICAgIGlmICghc3RydWN0dXJlKSB7CisgICAgICAgICAgICAgICAg
Ly8gVGhlIG51bGwgc3RydWN0dXJlIGNhc2VzIGFyaXNlIGR1ZSB0byBhcnJheS5sZW5ndGggYW5k
IHN0cmluZy5sZW5ndGguIFdlIGhhdmUgbm8gd2F5CisgICAgICAgICAgICAgICAgLy8gb2YgY3Jl
YXRpbmcgYSBHZXRCeUlkVmFyaWFudCBmb3IgdGhvc2UsIGFuZCB3ZSBkb24ndCByZWFsbHkgaGF2
ZSB0byBzaW5jZSB0aGUgREZHCisgICAgICAgICAgICAgICAgLy8gaGFuZGxlcyB0aG9zZSBjYXNl
cyBpbiBGaXh1cFBoYXNlIHVzaW5nIHZhbHVlIHByb2ZpbGluZy4gVGhhdCdzIGEgYml0IGF3a3dh
cmQgLSB3ZQorICAgICAgICAgICAgICAgIC8vIHNob3VsZG4ndCBoYXZlIHRvIHVzZSB2YWx1ZSBw
cm9maWxpbmcgdG8gZGlzY292ZXIgc29tZXRoaW5nIHRoYXQgdGhlIEFjY2Vzc0Nhc2UKKyAgICAg
ICAgICAgICAgICAvLyBjb3VsZCBoYXZlIHRvbGQgdXMuIEJ1dCwgaXQgd29ya3Mgd2VsbCBlbm91
Z2guIFNvLCBvdXIgb25seSBjb25jZXJuIGhlcmUgaXMgdG8gbm90CisgICAgICAgICAgICAgICAg
Ly8gY3Jhc2ggb24gbnVsbCBzdHJ1Y3R1cmUuCisgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5
SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSwgdHJ1ZSk7CisgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIENvbXBsZXhHZXRTdGF0dXMgY29tcGxleEdldFN0YXR1cyA9IENvbXBs
ZXhHZXRTdGF0dXM6OmNvbXB1dGVGb3IoCi0gICAgICAgICAgICAgICAgc3RydWN0dXJlLCBsaXN0
LT5hdChsaXN0SW5kZXgpLmNvbmRpdGlvblNldCgpLCB1aWQpOworICAgICAgICAgICAgICAgIHN0
cnVjdHVyZSwgYWNjZXNzLmNvbmRpdGlvblNldCgpLCB1aWQpOwogICAgICAgICAgICAgIAogICAg
ICAgICAgICAgc3dpdGNoIChjb21wbGV4R2V0U3RhdHVzLmtpbmQoKSkgewogICAgICAgICAgICAg
Y2FzZSBDb21wbGV4R2V0U3RhdHVzOjpTaG91bGRTa2lwOgpAQCAtMTkzLDI5ICsyMDUsMjMgQEAg
R2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6SW5saW5lYWJsZTogewogICAg
ICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0
dXM7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChsaXN0LT5hdChsaXN0SW5kZXgpLnR5cGUoKSkg
ewotICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlJZEFjY2Vzczo6U2ltcGxlSW5saW5lOgotICAg
ICAgICAgICAgICAgIGNhc2UgR2V0QnlJZEFjY2Vzczo6U2ltcGxlU3R1YjogeworICAgICAgICAg
ICAgICAgIHN3aXRjaCAoYWNjZXNzLnR5cGUoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgQWNj
ZXNzQ2FzZTo6TG9hZDogewogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgY2FzZSBHZXRCeUlkQWNjZXNzOjpHZXR0ZXI6IHsKLSAg
ICAgICAgICAgICAgICAgICAgQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUqIHN0dWIgPSBzdGF0
aWNfY2FzdDxBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZSo+KAotICAgICAgICAgICAgICAgICAg
ICAgICAgbGlzdC0+YXQobGlzdEluZGV4KS5zdHViUm91dGluZSgpKTsKKyAgICAgICAgICAgICAg
ICBjYXNlIEFjY2Vzc0Nhc2U6OkdldHRlcjogeworICAgICAgICAgICAgICAgICAgICBDYWxsTGlu
a0luZm8qIGNhbGxMaW5rSW5mbyA9IGFjY2Vzcy5jYWxsTGlua0luZm8oKTsKKyAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKGNhbGxMaW5rSW5mbyk7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxM
aW5rU3RhdHVzID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxsTGlua1N0YXR1cz4oCiAgICAgICAgICAg
ICAgICAgICAgICAgICBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcigKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ssICpzdHViLT5tX2NhbGxMaW5rSW5m
bywgY2FsbEV4aXRTaXRlRGF0YSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tl
ciwgcHJvZmlsZWRCbG9jaywgKmNhbGxMaW5rSW5mbywgY2FsbEV4aXRTaXRlRGF0YSkpOwogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgY2FzZSBHZXRCeUlkQWNjZXNzOjpTaW1wbGVNaXNzOgotICAgICAgICAgICAgICAgIGNhc2Ug
R2V0QnlJZEFjY2Vzczo6Q3VzdG9tR2V0dGVyOgotICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlJ
ZEFjY2Vzczo6V2F0Y2hlZFN0dWI6ewotICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogSXQg
d291bGQgYmUgdG90YWxseSBzd2VldCB0byBzdXBwb3J0IHRoaXMgYXQgc29tZSBwb2ludCBpbiB0
aGUgZnV0dXJlLgotICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMDUyCisgICAgICAgICAgICAgICAgZGVmYXVsdDogeworICAg
ICAgICAgICAgICAgICAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgdG90YWxseSBzd2VldCB0byBz
dXBwb3J0IG1vcmUgb2YgdGhlc2UgYXQgc29tZSBwb2ludCBpbiB0aGUKKyAgICAgICAgICAgICAg
ICAgICAgLy8gZnV0dXJlLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTMzMDUyCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKHNsb3dQYXRo
U3RhdGUsIHRydWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IH0KICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgR2V0QnlJZFZhcmlhbnQgdmFyaWFudCgKICAgICAgICAgICAgICAgICAg
ICAgU3RydWN0dXJlU2V0KHN0cnVjdHVyZSksIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhp
Y0FjY2Vzcy5jcHAJKHJldmlzaW9uIDE4OTMyNCkJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwOjE4OTMyNCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBvbHltb3Jw
aGljR2V0QnlJZExpc3QuaCIKKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJDb2RlQmxv
Y2suaCIKKyNpbmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1
ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitHZXRCeUlkQWNj
ZXNzOjpHZXRCeUlkQWNjZXNzKAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlw
ZSB0eXBlLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSwKKyAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRp
dGlvblNldCkKKyAgICA6IG1fdHlwZSh0eXBlKQorICAgICwgbV9zdHJ1Y3R1cmUodm0sIG93bmVy
LCBzdHJ1Y3R1cmUpCisgICAgLCBtX2NvbmRpdGlvblNldChjb25kaXRpb25TZXQpCisgICAgLCBt
X3N0dWJSb3V0aW5lKHN0dWJSb3V0aW5lKQoreworfQorCitHZXRCeUlkQWNjZXNzOjp+R2V0QnlJ
ZEFjY2VzcygpCit7Cit9CisKK0dldEJ5SWRBY2Nlc3MgR2V0QnlJZEFjY2Vzczo6ZnJvbVN0cnVj
dHVyZVN0dWJJbmZvKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIgaW5pdGlhbFNsb3dQYXRoID0KKyAgICAgICAgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93
Q2FzZSk7CisgICAgCisgICAgR2V0QnlJZEFjY2VzcyByZXN1bHQ7CisgICAgCisgICAgUkVMRUFT
RV9BU1NFUlQoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYpOwor
ICAgIAorICAgIHJlc3VsdC5tX3R5cGUgPSBTaW1wbGVJbmxpbmU7CisgICAgcmVzdWx0Lm1fc3Ry
dWN0dXJlLmNvcHlGcm9tKHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVy
ZSk7CisgICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBKSVRTdHViUm91dGluZTo6Y3JlYXRlU2Vs
Zk1hbmFnZWRSb3V0aW5lKGluaXRpYWxTbG93UGF0aCk7CisgICAgCisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworYm9vbCBHZXRCeUlkQWNjZXNzOjp2aXNpdFdlYWsoVk0mIHZtKSBjb25zdAorewor
ICAgIGlmIChtX3N0cnVjdHVyZSAmJiAhSGVhcDo6aXNNYXJrZWQobV9zdHJ1Y3R1cmUuZ2V0KCkp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFtX2NvbmRpdGlvblNldC5hcmVTdGls
bExpdmUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghbV9zdHViUm91dGluZS0+
dmlzaXRXZWFrKHZtKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOwor
fQorCitQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9
PSBhY2Nlc3NfdW5zZXQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX2xpc3QuYXBwZW5k
KEdldEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1cmVTdHViSW5mbyhzdHViSW5mbykpOworfQorCitQ
b2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojpmcm9tKFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9
PSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3QpCisgICAgICAgIHJldHVybiBzdHViSW5mby51LmdldEJ5
SWRMaXN0Lmxpc3Q7CisgICAgCisgICAgQVNTRVJUKAorICAgICAgICBzdHViSW5mby5hY2Nlc3NU
eXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZgorICAgICAgICB8fCBzdHViSW5mby5hY2Nlc3NU
eXBlID09IGFjY2Vzc191bnNldCk7CisgICAgCisgICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCog
cmVzdWx0ID0gbmV3IFBvbHltb3JwaGljR2V0QnlJZExpc3Qoc3R1YkluZm8pOworICAgIAorICAg
IHN0dWJJbmZvLmluaXRHZXRCeUlkTGlzdChyZXN1bHQpOworICAgIAorICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK1BvbHltb3JwaGljR2V0QnlJZExpc3Q6On5Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0
KCkgeyB9CisKK01hY3JvQXNzZW1ibGVyQ29kZVB0ciBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojpj
dXJyZW50U2xvd1BhdGhUYXJnZXQoCisgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKSBj
b25zdAoreworICAgIGlmIChpc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Ns
b3dDYXNlKTsKKyAgICByZXR1cm4gbV9saXN0Lmxhc3QoKS5zdHViUm91dGluZSgpLT5jb2RlKCku
Y29kZSgpOworfQorCit2b2lkIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmFkZEFjY2Vzcyhjb25z
dCBHZXRCeUlkQWNjZXNzJiBhY2Nlc3MpCit7CisgICAgQVNTRVJUKCFpc0Z1bGwoKSk7CisgICAg
Ly8gTWFrZSBzdXJlIHRoYXQgdGhlIHJlc2l6aW5nIG9wdGltaXplcyBmb3Igc3BhY2UsIG5vdCB0
aW1lLgorICAgIG1fbGlzdC5yZXNpemVUb0ZpdChtX2xpc3Quc2l6ZSgpICsgMSk7CisgICAgbV9s
aXN0Lmxhc3QoKSA9IGFjY2VzczsKK30KKworYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojpp
c0Z1bGwoKSBjb25zdAoreworICAgIEFTU0VSVChzaXplKCkgPD0gUE9MWU1PUlBISUNfTElTVF9D
QUNIRV9TSVpFKTsKKyAgICByZXR1cm4gc2l6ZSgpID09IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVf
U0laRTsKK30KKworYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojppc0FsbW9zdEZ1bGwoKSBj
b25zdAoreworICAgIEFTU0VSVChzaXplKCkgPD0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpF
KTsKKyAgICByZXR1cm4gc2l6ZSgpID49IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDE7
Cit9CisKK2Jvb2wgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6ZGlkU2VsZlBhdGNoaW5nKCkgY29u
c3QKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXplKCk7IGktLTspIHsKKyAgICAgICAgaWYg
KGF0KGkpLnR5cGUoKSA9PSBHZXRCeUlkQWNjZXNzOjpTaW1wbGVJbmxpbmUpCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFBvbHlt
b3JwaGljR2V0QnlJZExpc3Q6OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0Cit7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGlmICghYXQoaSkudmlzaXRXZWFr
KHZtKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhp
Y0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDEzMSArMjQs
MTEyNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0LmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKIAogI2lmIEVO
QUJMRShKSVQpCiAKKyNpbmNsdWRlICJCaW5hcnlTd2l0Y2guaCIKKyNpbmNsdWRlICJDQ2FsbEhl
bHBlcnMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIu
aCIKICNpbmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgogI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiU2Ny
YXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkNsZWFyaW5n
V2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCisjaW5jbHVkZSA8
d3RmL0xpc3REdW1wLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCi1HZXRCeUlkQWNjZXNzOjpHZXRC
eUlkQWNjZXNzKAotICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBQ
YXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSwKLSAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkK
LSAgICA6IG1fdHlwZSh0eXBlKQotICAgICwgbV9zdHJ1Y3R1cmUodm0sIG93bmVyLCBzdHJ1Y3R1
cmUpCi0gICAgLCBtX2NvbmRpdGlvblNldChjb25kaXRpb25TZXQpCi0gICAgLCBtX3N0dWJSb3V0
aW5lKHN0dWJSb3V0aW5lKQorc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCitz
dHJ1Y3QgQWNjZXNzR2VuZXJhdGlvblN0YXRlIHsKKyAgICBDQ2FsbEhlbHBlcnMqIGppdCB7IG51
bGxwdHIgfTsKKyAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IqIGFsbG9jYXRvcjsKKyAgICBz
aXplX3QgbnVtYmVyT2ZQYWRkaW5nQnl0ZXMgeyAwIH07CisgICAgUG9seW1vcnBoaWNBY2Nlc3Mq
IGFjY2VzcyB7IG51bGxwdHIgfTsKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8geyBu
dWxscHRyIH07CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzdWNjZXNzOworICAgIENDYWxs
SGVscGVyczo6SnVtcExpc3QgZmFpbEFuZFJlcGF0Y2g7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
TGlzdCBmYWlsQW5kSWdub3JlOworICAgIEdQUlJlZyBiYXNlR1BSIHsgSW52YWxpZEdQUlJlZyB9
OworICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUiB7IElu
dmFsaWRHUFJSZWcgfTsKKyAgICBWZWN0b3I8c3RkOjpmdW5jdGlvbjx2b2lkKExpbmtCdWZmZXIm
KT4+IGNhbGxiYWNrczsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudDsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvPiB3YXRjaHBvaW50czsKKwor
ICAgIFdhdGNocG9pbnQqIGFkZFdhdGNocG9pbnQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b24mIGNvbmRpdGlvbiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCkpCisgICAgeworICAgICAg
ICByZXR1cm4gV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjplbnN1cmVSZWZlcmVuY2VB
bmRBZGRXYXRjaHBvaW50KAorICAgICAgICAgICAgd2F0Y2hwb2ludHMsIGppdC0+Y29kZUJsb2Nr
KCksIHN0dWJJbmZvLCBjb25kaXRpb24pOworICAgIH0KKworICAgIHZvaWQgcmVzdG9yZVNjcmF0
Y2goKQorICAgIHsKKyAgICAgICAgYWxsb2NhdG9yLT5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQ
b3BwaW5nKCpqaXQsIG51bWJlck9mUGFkZGluZ0J5dGVzKTsKKyAgICB9CisKKyAgICB2b2lkIHN1
Y2NlZWQoKQorICAgIHsKKyAgICAgICAgcmVzdG9yZVNjcmF0Y2goKTsKKyAgICAgICAgc3VjY2Vz
cy5hcHBlbmQoaml0LT5qdW1wKCkpOworICAgIH0KK307CisKK0FjY2Vzc0Nhc2U6OkFjY2Vzc0Nh
c2UoKQogewogfQogCi1HZXRCeUlkQWNjZXNzOjp+R2V0QnlJZEFjY2VzcygpCitzdGQ6OnVuaXF1
ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6Z2V0KAorICAgIFZNJiB2bSwgSlNDZWxsKiBv
d25lciwgQWNjZXNzVHlwZSB0eXBlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFN0cnVjdHVyZSog
c3RydWN0dXJlLAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRp
b25TZXQsIGJvb2wgdmlhUHJveHksIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQsCisgICAg
UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgY3VzdG9tR2V0dGVyKQogeworICAgIHN0ZDo6dW5p
cXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nhc2UoKSk7CisKKyAgICByZXN1
bHQtPm1fdHlwZSA9IHR5cGU7CisgICAgcmVzdWx0LT5tX29mZnNldCA9IG9mZnNldDsKKyAgICBy
ZXN1bHQtPm1fc3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7CisgICAgcmVzdWx0
LT5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKKyAgICAKKyAgICBpZiAodmlhUHJveHkg
fHwgYWRkaXRpb25hbFNldCB8fCByZXN1bHQtPmRvZXNDYWxscygpIHx8IGN1c3RvbUdldHRlcikg
eworICAgICAgICByZXN1bHQtPm1fcmFyZURhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPFJhcmVEYXRh
PigpOworICAgICAgICByZXN1bHQtPm1fcmFyZURhdGEtPnZpYVByb3h5ID0gdmlhUHJveHk7Cisg
ICAgICAgIHJlc3VsdC0+bV9yYXJlRGF0YS0+YWRkaXRpb25hbFNldCA9IGFkZGl0aW9uYWxTZXQ7
CisgICAgICAgIHJlc3VsdC0+bV9yYXJlRGF0YS0+Y3VzdG9tQWNjZXNzb3IuZ2V0dGVyID0gY3Vz
dG9tR2V0dGVyOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUdldEJ5SWRBY2Nl
c3MgR2V0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbykKK3N0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpyZXBs
YWNlKAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgaW5pdGlh
bFNsb3dQYXRoID0KLSAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRP
ZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSk7Ci0gICAgCi0gICAgR2V0
QnlJZEFjY2VzcyByZXN1bHQ7Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8uYWNj
ZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYpOwotICAgIAotICAgIHJlc3VsdC5tX3R5
cGUgPSBTaW1wbGVJbmxpbmU7Ci0gICAgcmVzdWx0Lm1fc3RydWN0dXJlLmNvcHlGcm9tKHN0dWJJ
bmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZSk7Ci0gICAgcmVzdWx0Lm1fc3R1
YlJvdXRpbmUgPSBKSVRTdHViUm91dGluZTo6Y3JlYXRlU2VsZk1hbmFnZWRSb3V0aW5lKGluaXRp
YWxTbG93UGF0aCk7Ci0gICAgCisgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHJlc3Vs
dChuZXcgQWNjZXNzQ2FzZSgpKTsKKworICAgIHJlc3VsdC0+bV90eXBlID0gUmVwbGFjZTsKKyAg
ICByZXN1bHQtPm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgIHJlc3VsdC0+bV9zdHJ1Y3R1cmUuc2V0
KHZtLCBvd25lciwgc3RydWN0dXJlKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0ZDo6
dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjp0cmFuc2l0aW9uKAorICAgIFZNJiB2
bSwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3
U3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCisgICAgY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChvbGRT
dHJ1Y3R1cmUgPT0gbmV3U3RydWN0dXJlLT5wcmV2aW91c0lEKCkpOworCisgICAgLy8gU2tpcCBv
cHRpbWl6aW5nIHRoZSBjYXNlIHdoZXJlIHdlIG5lZWQgYSByZWFsbG9jLCBpZiB3ZSBkb24ndCBo
YXZlCisgICAgLy8gZW5vdWdoIHJlZ2lzdGVycyB0byBtYWtlIGl0IGhhcHBlbi4KKyAgICBpZiAo
R1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgPCA2CisgICAgICAgICYmIG9sZFN0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBuZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkK
KyAgICAgICAgJiYgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2Fz
ZSB3aGVyZSB3ZSBuZWVkIHJlYWxsb2MsIGFuZCB0aGUgc3RydWN0dXJlIGhhcworICAgIC8vIGlu
ZGV4aW5nIHN0b3JhZ2UuCisgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBza2lwIHRoaXMhIElt
cGxlbWVudCBpdCEKKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTMwOTE0CisgICAgaWYgKG9sZFN0cnVjdHVyZS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIo
KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNz
Q2FzZT4gcmVzdWx0KG5ldyBBY2Nlc3NDYXNlKCkpOworCisgICAgcmVzdWx0LT5tX3R5cGUgPSBU
cmFuc2l0aW9uOworICAgIHJlc3VsdC0+bV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgcmVzdWx0LT5t
X3N0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBuZXdTdHJ1Y3R1cmUpOworICAgIHJlc3VsdC0+bV9j
b25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitz
dGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6c2V0dGVyKAorICAgIFZNJiB2
bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0LAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0JiBjb25kaXRpb25TZXQsIFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jIGN1c3RvbVNl
dHRlcikKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gcmVzdWx0KG5ldyBBY2Nl
c3NDYXNlKCkpOworCisgICAgcmVzdWx0LT5tX3R5cGUgPSB0eXBlOworICAgIHJlc3VsdC0+bV9v
ZmZzZXQgPSBvZmZzZXQ7CisgICAgcmVzdWx0LT5tX3N0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBz
dHJ1Y3R1cmUpOworICAgIHJlc3VsdC0+bV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7Cisg
ICAgcmVzdWx0LT5tX3JhcmVEYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxSYXJlRGF0YT4oKTsKKyAg
ICByZXN1bHQtPm1fcmFyZURhdGEtPmN1c3RvbUFjY2Vzc29yLnNldHRlciA9IGN1c3RvbVNldHRl
cjsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNl
PiBBY2Nlc3NDYXNlOjppbigKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUg
dHlwZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQmIGNvbmRpdGlvblNldCkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2Fz
ZT4gcmVzdWx0KG5ldyBBY2Nlc3NDYXNlKCkpOworCisgICAgcmVzdWx0LT5tX3R5cGUgPSB0eXBl
OworICAgIHJlc3VsdC0+bV9zdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKKyAg
ICByZXN1bHQtPm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OworCisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OmdldExl
bmd0aChWTSYsIEpTQ2VsbCosIEFjY2Vzc1R5cGUgdHlwZSkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8QWNjZXNzQ2FzZT4gcmVzdWx0KG5ldyBBY2Nlc3NDYXNlKCkpOworCisgICAgcmVzdWx0LT5t
X3R5cGUgPSB0eXBlOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQWNjZXNzQ2FzZTo6fkFj
Y2Vzc0Nhc2UoKQoreworfQorCitzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2Fz
ZTo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIHN3aXRjaCAoc3R1YkluZm8uY2FjaGVU
eXBlKSB7CisgICAgY2FzZSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxmOgorICAgICAgICByZXR1cm4g
Z2V0KAorICAgICAgICAgICAgdm0sIG93bmVyLCBMb2FkLCBzdHViSW5mby51LmJ5SWRTZWxmLm9m
ZnNldCwKKyAgICAgICAgICAgIHN0dWJJbmZvLnUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVy
ZS5nZXQoKSk7CisKKyAgICBjYXNlIENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2U6CisgICAgICAg
IHJldHVybiByZXBsYWNlKAorICAgICAgICAgICAgdm0sIG93bmVyLCBzdHViSW5mby51LmJ5SWRT
ZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHN0dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0
KTsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KK30KKwor
c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OmNsb25lKCkgY29uc3QKK3sK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gcmVzdWx0KG5ldyBBY2Nlc3NDYXNlKCkp
OworICAgIHJlc3VsdC0+bV90eXBlID0gbV90eXBlOworICAgIHJlc3VsdC0+bV9vZmZzZXQgPSBt
X29mZnNldDsKKyAgICByZXN1bHQtPm1fc3RydWN0dXJlID0gbV9zdHJ1Y3R1cmU7CisgICAgcmVz
dWx0LT5tX2NvbmRpdGlvblNldCA9IG1fY29uZGl0aW9uU2V0OworICAgIGlmIChSYXJlRGF0YSog
cmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7CisgICAgICAgIHJlc3VsdC0+bV9yYXJlRGF0
YSA9IHN0ZDo6bWFrZV91bmlxdWU8UmFyZURhdGE+KCk7CisgICAgICAgIHJlc3VsdC0+bV9yYXJl
RGF0YS0+dmlhUHJveHkgPSByYXJlRGF0YS0+dmlhUHJveHk7CisgICAgICAgIHJlc3VsdC0+bV9y
YXJlRGF0YS0+YWRkaXRpb25hbFNldCA9IHJhcmVEYXRhLT5hZGRpdGlvbmFsU2V0OworICAgICAg
ICAvLyBOT1RFOiBXZSBkb24ndCBjb3B5IHRoZSBjYWxsTGlua0luZm8sIHNpbmNlIHRoYXQncyBj
cmVhdGVkIGR1cmluZyBjb2RlIGdlbmVyYXRpb24uCisgICAgICAgIHJlc3VsdC0+bV9yYXJlRGF0
YS0+Y3VzdG9tQWNjZXNzb3Iub3BhcXVlID0gcmFyZURhdGEtPmN1c3RvbUFjY2Vzc29yLm9wYXF1
ZTsKKyAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotYm9vbCBHZXRCeUlkQWNjZXNzOjp2
aXNpdFdlYWsoVk0mIHZtKSBjb25zdAorYm9vbCBBY2Nlc3NDYXNlOjpndWFyZGVkQnlTdHJ1Y3R1
cmVDaGVjaygpIGNvbnN0Cit7CisgICAgaWYgKHZpYVByb3h5KCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgY2FzZSBBcnJheUxlbmd0aDoKKyAg
ICBjYXNlIFN0cmluZ0xlbmd0aDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRlZmF1bHQ6
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKworYm9vbCBBY2Nlc3NDYXNlOjpjYW5S
ZXBsYWNlKGNvbnN0IEFjY2Vzc0Nhc2UmIG90aGVyKQoreworICAgIC8vIFdlIGNvdWxkIGRvIGEg
bG90IGJldHRlciBoZXJlLCBidXQgZm9yIG5vdyB3ZSBqdXN0IGRvIHNvbWV0aGluZyBvYnZpb3Vz
LgorCisgICAgaWYgKCFndWFyZGVkQnlTdHJ1Y3R1cmVDaGVjaygpIHx8ICFvdGhlci5ndWFyZGVk
QnlTdHJ1Y3R1cmVDaGVjaygpKSB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyEK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiBzdHJ1Y3R1cmUoKSA9
PSBvdGhlci5zdHJ1Y3R1cmUoKTsKK30KKwordm9pZCBBY2Nlc3NDYXNlOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fdHlwZSwgIjooIik7CisKKyAgICBp
ZiAobV90eXBlID09IFRyYW5zaXRpb24pCisgICAgICAgIG91dC5wcmludCgic3RydWN0dXJlID0g
IiwgcG9pbnRlckR1bXAoc3RydWN0dXJlKCkpLCAiIC0+ICIsIHBvaW50ZXJEdW1wKG5ld1N0cnVj
dHVyZSgpKSk7CisgICAgZWxzZQorICAgICAgICBvdXQucHJpbnQoInN0cnVjdHVyZSA9ICIsIHBv
aW50ZXJEdW1wKG1fc3RydWN0dXJlLmdldCgpKSk7CisKKyAgICBvdXQucHJpbnQoIiwgb2Zmc2V0
ID0gIiwgbV9vZmZzZXQsICIsIGNvbmRpdGlvbnMgPSAiLCBtX2NvbmRpdGlvblNldCk7CisKKyAg
ICBpZiAoUmFyZURhdGEqIHJhcmVEYXRhID0gbV9yYXJlRGF0YS5nZXQoKSkgeworICAgICAgICBv
dXQucHJpbnQoCisgICAgICAgICAgICAiLCB2aWFQcm94eSA9ICIsIHJhcmVEYXRhLT52aWFQcm94
eSwKKyAgICAgICAgICAgICIsIGFkZGl0aW9uYWxTZXQgPSAiLCBSYXdQb2ludGVyKHJhcmVEYXRh
LT5hZGRpdGlvbmFsU2V0LmdldCgpKSwKKyAgICAgICAgICAgICIsIGNhbGxMaW5rSW5mbyA9ICIs
IFJhd1BvaW50ZXIocmFyZURhdGEtPmNhbGxMaW5rSW5mby5nZXQoKSksCisgICAgICAgICAgICAi
LCBjdXN0b21BY2Nlc3NvciA9ICIsIFJhd1BvaW50ZXIocmFyZURhdGEtPmN1c3RvbUFjY2Vzc29y
Lm9wYXF1ZSkpOworICAgIH0KKworICAgIG91dC5wcmludCgiKSIpOworfQorCitib29sIEFjY2Vz
c0Nhc2U6OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0CiB7CiAgICAgaWYgKG1fc3RydWN0dXJlICYm
ICFIZWFwOjppc01hcmtlZChtX3N0cnVjdHVyZS5nZXQoKSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBpZiAoIW1fY29uZGl0aW9uU2V0LmFyZVN0aWxsTGl2ZSgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgaWYgKCFtX3N0dWJSb3V0aW5lLT52aXNpdFdlYWsodm0pKQotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fcmFyZURhdGEgJiYgbV9yYXJlRGF0YS0+Y2FsbExp
bmtJbmZvKQorICAgICAgICBtX3JhcmVEYXRhLT5jYWxsTGlua0luZm8tPnZpc2l0V2Vhayh2bSk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVBvbHltb3JwaGljR2V0QnlJZExpc3Q6OlBvbHltb3Jw
aGljR2V0QnlJZExpc3QoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQordm9pZCBBY2Nlc3ND
YXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKKyAgICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRl
LCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0JiBmYWxsVGhyb3VnaCkKIHsKLSAgICBpZiAoc3R1Yklu
Zm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAg
ICBtX2xpc3QuYXBwZW5kKEdldEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1cmVTdHViSW5mbyhzdHVi
SW5mbykpOworICAgIENDYWxsSGVscGVycyYgaml0ID0gKnN0YXRlLmppdDsKKworICAgIHN3aXRj
aCAobV90eXBlKSB7CisgICAgY2FzZSBBcnJheUxlbmd0aDogeworICAgICAgICBBU1NFUlQoIXZp
YVByb3h5KCkpOworICAgICAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0YXRl
LmJhc2VHUFIsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBzdGF0ZS5zY3JhdGNoR1BS
KTsKKyAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKAorICAgICAgICAgICAgaml0LmJyYW5jaFRl
c3QzMigKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Olplcm8sIHN0YXRlLnNjcmF0Y2hH
UFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKElzQXJyYXkpKSk7CisgICAgICAgIGZhbGxU
aHJvdWdoLmFwcGVuZCgKKyAgICAgICAgICAgIGppdC5icmFuY2hUZXN0MzIoCisgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpaZXJvLCBzdGF0ZS5zY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzaykpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgY2FzZSBTdHJpbmdMZW5ndGg6IHsKKyAgICAgICAgQVNTRVJUKCF2aWFQcm94eSgp
KTsKKyAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKAorICAgICAgICAgICAgaml0LmJyYW5jaDgo
CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKKyAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RhdGUuYmFzZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5
cGVPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
U3RyaW5nVHlwZSkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZGVmYXVsdDogewor
ICAgICAgICBpZiAodmlhUHJveHkoKSkgeworICAgICAgICAgICAgZmFsbFRocm91Z2guYXBwZW5k
KAorICAgICAgICAgICAgICAgIGppdC5icmFuY2g4KAorICAgICAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3Moc3RhdGUuYmFzZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksCisgICAg
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKFB1cmVGb3J3YXJkaW5n
UHJveHlUeXBlKSkpOworCisgICAgICAgICAgICBqaXQubG9hZFB0cigKKyAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RhdGUuYmFzZUdQUiwgSlNQcm94eTo6dGFyZ2V0T2Zm
c2V0KCkpLAorICAgICAgICAgICAgICAgIHN0YXRlLnNjcmF0Y2hHUFIpOworCisgICAgICAgICAg
ICBmYWxsVGhyb3VnaC5hcHBlbmQoCisgICAgICAgICAgICAgICAgaml0LmJyYW5jaFN0cnVjdHVy
ZSgKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKKyAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0YXRlLnNjcmF0Y2hHUFIsIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSgp
KSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCisg
ICAgICAgICAgICAgICAgaml0LmJyYW5jaFN0cnVjdHVyZSgKKyAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKHN0YXRlLmJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCisg
ICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSgpKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisgICAgfSB9OworCisgICAgZ2VuZXJhdGUoc3RhdGUpOwogfQogCi1Qb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0KiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojpmcm9tKFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbykKK3ZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGUoQWNjZXNzR2VuZXJhdGlvblN0
YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0
X2J5X2lkX2xpc3QpCi0gICAgICAgIHJldHVybiBzdHViSW5mby51LmdldEJ5SWRMaXN0Lmxpc3Q7
Ci0gICAgCi0gICAgQVNTRVJUKAotICAgICAgICBzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vz
c19nZXRfYnlfaWRfc2VsZgotICAgICAgICB8fCBzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vz
c191bnNldCk7Ci0gICAgCi0gICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogcmVzdWx0ID0gbmV3
IFBvbHltb3JwaGljR2V0QnlJZExpc3Qoc3R1YkluZm8pOwotICAgIAotICAgIHN0dWJJbmZvLmlu
aXRHZXRCeUlkTGlzdChyZXN1bHQpOworICAgIENDYWxsSGVscGVycyYgaml0ID0gKnN0YXRlLmpp
dDsKKyAgICBWTSYgdm0gPSAqaml0LnZtKCk7CisgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvID0gKnN0YXRlLnN0dWJJbmZvOworICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gKnN0
YXRlLmlkZW50OworICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyA9IHN0YXRlLnZhbHVlUmVnczsK
KyAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRlLmJhc2VHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hH
UFIgPSBzdGF0ZS5zY3JhdGNoR1BSOworCisgICAgQVNTRVJUKG1fY29uZGl0aW9uU2V0LnN0cnVj
dHVyZXNFbnN1cmVWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpOwor
CisgICAgaWYgKChzdHJ1Y3R1cmUoKSAmJiBzdHJ1Y3R1cmUoKS0+bmVlZEltcHVyZVByb3BlcnR5
V2F0Y2hwb2ludCgpKQorICAgICAgICB8fCBtX2NvbmRpdGlvblNldC5uZWVkSW1wdXJlUHJvcGVy
dHlXYXRjaHBvaW50KCkpCisgICAgICAgIHZtLnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVBy
b3BlcnR5KGlkZW50LCBzdGF0ZS5hZGRXYXRjaHBvaW50KCkpOworCisgICAgaWYgKGFkZGl0aW9u
YWxTZXQoKSkKKyAgICAgICAgYWRkaXRpb25hbFNldCgpLT5hZGQoc3RhdGUuYWRkV2F0Y2hwb2lu
dCgpKTsKKworICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlv
biA6IG1fY29uZGl0aW9uU2V0KSB7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY29u
ZGl0aW9uLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKTsKKworICAgICAgICBpZiAoY29uZGl0aW9uLmlz
V2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkgeworICAgICAgICAg
ICAgc3RydWN0dXJlLT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludChzdGF0ZS5hZGRXYXRjaHBvaW50
KGNvbmRpdGlvbikpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChjb25kaXRpb24uc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1p
bmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoc3RydWN0dXJlKSk7CisgICAgICAgIGppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjb25kaXRpb24ub2JqZWN0KCkpLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgc3RhdGUuZmFpbEFuZFJlcGF0Y2guYXBwZW5kKAorICAgICAgICAgICAg
aml0LmJyYW5jaFN0cnVjdHVyZSgKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVx
dWFsLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBK
U0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIHN0cnVjdHVyZSkp
OworICAgIH0KKworICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgY2FzZSBJbkhpdDoKKyAgICBj
YXNlIEluTWlzczoKKyAgICAgICAgaml0LmJveEJvb2xlYW5QYXlsb2FkKG1fdHlwZSA9PSBJbkhp
dCwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSk7CisgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKKyAg
ICAgICAgcmV0dXJuOworCisgICAgY2FzZSBNaXNzOgorICAgICAgICBqaXQubW92ZVRydXN0ZWRW
YWx1ZShqc1VuZGVmaW5lZCgpLCB2YWx1ZVJlZ3MpOworICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7
CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgTG9hZDoKKyAgICBjYXNlIEdldHRlcjoKKyAg
ICBjYXNlIFNldHRlcjoKKyAgICBjYXNlIEN1c3RvbUdldHRlcjoKKyAgICBjYXNlIEN1c3RvbVNl
dHRlcjogeworICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChtX29mZnNldCkpIHsKKyAgICAgICAg
ICAgIFN0cnVjdHVyZSogY3VyclN0cnVjdHVyZTsKKyAgICAgICAgICAgIGlmIChtX2NvbmRpdGlv
blNldC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVy
ZSgpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBt
X2NvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKTsK
KyAgICAgICAgICAgIGN1cnJTdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxh
Y2VtZW50cyh2bSwgb2Zmc2V0KCkpOworICAgICAgICB9CisKKyAgICAgICAgR1BSUmVnIGJhc2VG
b3JHZXRHUFI7CisgICAgICAgIGlmICh2aWFQcm94eSgpKSB7CisgICAgICAgICAgICBiYXNlRm9y
R2V0R1BSID0gdmFsdWVSZWdzLnBheWxvYWRHUFIoKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRy
KAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU1Byb3h5
Ojp0YXJnZXRPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgYmFzZUZvckdldEdQUik7CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgYmFzZUZvckdldEdQUiA9IGJhc2VHUFI7CisKKyAgICAg
ICAgR1BSUmVnIGJhc2VGb3JBY2Nlc3NHUFI7CisgICAgICAgIGlmICghbV9jb25kaXRpb25TZXQu
aXNFbXB0eSgpKSB7CisgICAgICAgICAgICBqaXQubW92ZSgKKyAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9jb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24o
KS5vYmplY3QoKSksCisgICAgICAgICAgICAgICAgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBi
YXNlRm9yQWNjZXNzR1BSID0gc2NyYXRjaEdQUjsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICBiYXNlRm9yQWNjZXNzR1BSID0gYmFzZUZvckdldEdQUjsKKworICAgICAgICBHUFJSZWcgbG9h
ZGVkVmFsdWVHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICBpZiAobV90eXBlICE9IEN1c3Rv
bUdldHRlciAmJiBtX3R5cGUgIT0gQ3VzdG9tU2V0dGVyKSB7CisgICAgICAgICAgICBpZiAobV90
eXBlID09IExvYWQpCisgICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIgPSB2YWx1ZVJlZ3Mu
cGF5bG9hZEdQUigpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxvYWRlZFZh
bHVlR1BSID0gc2NyYXRjaEdQUjsKKworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFI7Cisg
ICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQobV9vZmZzZXQpKQorICAgICAgICAgICAgICAg
IHN0b3JhZ2VHUFIgPSBiYXNlRm9yQWNjZXNzR1BSOworICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgaml0LmxvYWRQdHIoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6QWRkcmVzcyhiYXNlRm9yQWNjZXNzR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LAorICAgICAgICAgICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUik7CisgICAgICAgICAgICAgICAg
c3RvcmFnZUdQUiA9IGxvYWRlZFZhbHVlR1BSOworICAgICAgICAgICAgfQorCisjaWYgVVNFKEpT
VkFMVUU2NCkKKyAgICAgICAgICAgIGppdC5sb2FkNjQoCisgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKG1fb2Zmc2V0
KSksIGxvYWRlZFZhbHVlR1BSKTsKKyNlbHNlCisgICAgICAgICAgICBpZiAobV90eXBlID09IExv
YWQpIHsKKyAgICAgICAgICAgICAgICBqaXQubG9hZDMyKAorICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RvcmFnZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2UobV9v
ZmZzZXQpICsgVGFnT2Zmc2V0KSwKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVSZWdzLnRhZ0dQ
UigpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGppdC5sb2FkMzIoCisgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9mZnNldFJlbGF0aXZlVG9C
YXNlKG1fb2Zmc2V0KSArIFBheWxvYWRPZmZzZXQpLAorICAgICAgICAgICAgICAgIGxvYWRlZFZh
bHVlR1BSKTsKKyNlbmRpZgorICAgICAgICB9CisKKyAgICAgICAgLy8gU3R1ZmYgZm9yIGN1c3Rv
bSBnZXR0ZXJzLgorICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9uQ2FsbDsKKyAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGhhbmRsZXJDYWxsOworCisgICAgICAgIC8vIFN0dWZm
IGZvciBKUyBnZXR0ZXJzLgorICAgICAgICBDQ2FsbEhlbHBlcnM6OkRhdGFMYWJlbFB0ciBhZGRy
ZXNzT2ZMaW5rRnVuY3Rpb25DaGVjazsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGZhc3RQ
YXRoQ2FsbDsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHNsb3dQYXRoQ2FsbDsKKworICAg
ICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgc3VjY2VzczsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpK
dW1wIGZhaWw7CisgICAgICAgIGlmIChtX3R5cGUgIT0gTG9hZCAmJiBtX3R5cGUgIT0gTWlzcykg
eworICAgICAgICAgICAgLy8gTmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3aGVuZXZlciB0aGlzIGNh
bGwgaXMgbWFkZSBpbiB0aGUgZnV0dXJlLCB3ZSByZW1lbWJlciB0aGUKKyAgICAgICAgICAgIC8v
IHBsYWNlIHRoYXQgd2UgbWFkZSBpdCBmcm9tLgorICAgICAgICAgICAgaml0LnN0b3JlMzIoCisg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3R1YkluZm8uY2FsbFNp
dGVJbmRleC5iaXRzKCkpLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKHN0
YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKKwor
ICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBHZXR0ZXIgfHwgbV90eXBlID09IFNldHRlcikgewor
ICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIEpTIGNhbGwgdXNpbmcgYSBKUyBjYWxsIGlubGlu
ZSBjYWNoZS4gQXNzdW1lIHRoYXQ6CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAg
ICAvLyAtIFNQIGlzIGFsaWduZWQgYW5kIHJlcHJlc2VudHMgdGhlIGV4dGVudCBvZiB0aGUgY2Fs
bGluZyBjb21waWxlcidzIHN0YWNrIHVzYWdlLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAg
ICAgICAgICAgLy8gLSBGUCBpcyBzZXQgY29ycmVjdGx5IChpLmUuIGl0IHBvaW50cyB0byB0aGUg
Y2FsbGVyJ3MgY2FsbCBmcmFtZSBoZWFkZXIpLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAg
ICAgICAgICAgLy8gLSBTUCAtIEZQIGlzIGFuIGFsaWduZWQgZGlmZmVyZW5jZS4KKyAgICAgICAg
ICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIC0gQW55IGJ5dGUgYmV0d2VlbiBGUCAoZXhj
bHVzaXZlKSBhbmQgU1AgKGluY2x1c2l2ZSkgY291bGQgYmUgbGl2ZSBpbiB0aGUgY2FsbGluZwor
ICAgICAgICAgICAgICAgIC8vICAgY29kZS4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAg
ICAgICAgIC8vIFRoZXJlZm9yZSwgd2UgdGVtcG9yYXJpbHkgZ3JvdyB0aGUgc3RhY2sgZm9yIHRo
ZSBwdXJwb3NlIG9mIHRoZSBjYWxsIGFuZCB0aGVuCisgICAgICAgICAgICAgICAgLy8gc2hyaW5r
IGl0IGFmdGVyLgorCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fcmFyZURhdGEt
PmNhbGxMaW5rSW5mbyk7CisgICAgICAgICAgICAgICAgbV9yYXJlRGF0YS0+Y2FsbExpbmtJbmZv
ID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxsTGlua0luZm8+KCk7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IElmIHdlIGdlbmVyYXRlZCBhIHBvbHltb3JwaGljIGNh
bGwgc3R1YiB0aGF0IGp1bXBlZCBiYWNrIHRvIHRoZSBnZXR0ZXIKKyAgICAgICAgICAgICAgICAv
LyBzdHViLCB3aGljaCB0aGVuIGp1bXBlZCBiYWNrIHRvIHRoZSBtYWluIGNvZGUsIHRoZW4gd2Un
ZCBoYXZlIGEgcmVhY2hhYmlsaXR5CisgICAgICAgICAgICAgICAgLy8gc2l0dWF0aW9uIHRoYXQg
dGhlIEdDIGRvZXNuJ3Qga25vdyBhYm91dC4gVGhlIEdDIHdvdWxkIGVuc3VyZSB0aGF0IHRoZSBw
b2x5bW9ycGhpYworICAgICAgICAgICAgICAgIC8vIGNhbGwgc3R1YiBzdGF5ZWQgYWxpdmUsIGFu
ZCBpdCB3b3VsZCBlbnN1cmUgdGhhdCB0aGUgbWFpbiBjb2RlIHN0YXllZCBhbGl2ZSwgYnV0Cisg
ICAgICAgICAgICAgICAgLy8gaXQgd291bGRuJ3Qga25vdyB0aGF0IHRoZSBnZXR0ZXIgc3R1YiB3
YXMgYWxpdmUuIElkZWFsbHkgSklUIHN0dWIgcm91dGluZXMgd291bGQKKyAgICAgICAgICAgICAg
ICAvLyBiZSBHQyBvYmplY3RzLCBhbmQgdGhlbiB3ZSdkIGJlIGFibGUgdG8gc2F5IHRoYXQgdGhl
IHBvbHltb3JwaGljIGNhbGwgc3R1YiBoYXMgYQorICAgICAgICAgICAgICAgIC8vIHJlZmVyZW5j
ZSB0byB0aGUgZ2V0dGVyIHN0dWIuCisgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODkxNAorICAgICAgICAgICAgICAgIG1fcmFyZURh
dGEtPmNhbGxMaW5rSW5mby0+ZGlzYWxsb3dTdHVicygpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIG1fcmFyZURhdGEtPmNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKAorICAgICAg
ICAgICAgICAgICAgICBDYWxsTGlua0luZm86OkNhbGwsIHN0dWJJbmZvLmNvZGVPcmlnaW4sIGxv
YWRlZFZhbHVlR1BSKTsKKworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
ZG9uZTsKKworICAgICAgICAgICAgICAgIC8vIFRoZXJlIGlzIGEgInRoaXMiIGFyZ3VtZW50Lgor
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mUGFyYW1ldGVycyA9IDE7CisgICAgICAg
ICAgICAgICAgLy8gLi4uIGFuZCBhIHZhbHVlIGFyZ3VtZW50IGlmIHdlJ3JlIGNhbGxpbmcgYSBz
ZXR0ZXIuCisgICAgICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBTZXR0ZXIpCisgICAgICAgICAg
ICAgICAgICAgIG51bWJlck9mUGFyYW1ldGVycysrOworCisgICAgICAgICAgICAgICAgLy8gR2V0
IHRoZSBhY2Nlc3NvcjsgaWYgdGhlcmUgYWluJ3Qgb25lIHRoZW4gdGhlIHJlc3VsdCBpcyBqc1Vu
ZGVmaW5lZCgpLgorICAgICAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gU2V0dGVyKSB7CisgICAg
ICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKAorICAgICAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKGxvYWRlZFZhbHVlR1BSLCBHZXR0ZXJTZXR0ZXI6Om9mZnNldE9m
U2V0dGVyKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIpOworICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKAor
ICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGxvYWRlZFZhbHVl
R1BSLCBHZXR0ZXJTZXR0ZXI6Om9mZnNldE9mR2V0dGVyKCkpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgbG9hZGVkVmFsdWVHUFIpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6SnVtcCByZXR1cm5VbmRlZmluZWQgPSBqaXQuYnJhbmNoVGVzdFB0
cigKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpaZXJvLCBsb2FkZWRWYWx1ZUdQ
Uik7CisKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlJlZ3NGb3JDYWxsID0gSlNT
dGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIG51bWJlck9mUGFyYW1ldGVyczsKKworICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQnl0ZXNGb3JDYWxsID0KKyAgICAgICAgICAgICAg
ICAgICAgbnVtYmVyT2ZSZWdzRm9yQ2FsbCAqIHNpemVvZihSZWdpc3RlcikgKyBzaXplb2YoQ2Fs
bGVyRnJhbWVBbmRQQyk7CisKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBhbGlnbmVkTnVtYmVy
T2ZCeXRlc0ZvckNhbGwgPQorICAgICAgICAgICAgICAgICAgICBXVEY6OnJvdW5kVXBUb011bHRp
cGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCk7CisKKyAg
ICAgICAgICAgICAgICBqaXQuc3ViUHRyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwpLAorICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyBjYWxsZWVGcmFtZSA9IENDYWxsSGVscGVy
czo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50
ZXJSZWdpc3RlciwKKyAgICAgICAgICAgICAgICAgICAgLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4o
c2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7CisKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmUz
MigKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobnVtYmVy
T2ZQYXJhbWV0ZXJzKSwKKyAgICAgICAgICAgICAgICAgICAgY2FsbGVlRnJhbWUud2l0aE9mZnNl
dChKU1N0YWNrOjpBcmd1bWVudENvdW50ICogc2l6ZW9mKFJlZ2lzdGVyKSArIFBheWxvYWRPZmZz
ZXQpKTsKKworICAgICAgICAgICAgICAgIGppdC5zdG9yZUNlbGwoCisgICAgICAgICAgICAgICAg
ICAgIGxvYWRlZFZhbHVlR1BSLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KEpTU3RhY2s6OkNhbGxl
ZSAqIHNpemVvZihSZWdpc3RlcikpKTsKKworICAgICAgICAgICAgICAgIGppdC5zdG9yZUNlbGwo
CisgICAgICAgICAgICAgICAgICAgIGJhc2VGb3JHZXRHUFIsCisgICAgICAgICAgICAgICAgICAg
IGNhbGxlZUZyYW1lLndpdGhPZmZzZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCkub2Zm
c2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisKKyAgICAgICAgICAgICAgICBpZiAobV90eXBl
ID09IFNldHRlcikgeworICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSgKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHZhbHVlUmVncywKKyAgICAgICAgICAgICAgICAgICAgICAgIGNh
bGxlZUZyYW1lLndpdGhPZmZzZXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlydHVh
bFJlZ2lzdGVyRm9yQXJndW1lbnQoMSkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHNs
b3dDYXNlID0gaml0LmJyYW5jaFB0cldpdGhQYXRjaCgKKyAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpOb3RFcXVhbCwgbG9hZGVkVmFsdWVHUFIsIGFkZHJlc3NPZkxpbmtGdW5jdGlv
bkNoZWNrLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
MCkpOworCisgICAgICAgICAgICAgICAgZmFzdFBhdGhDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisK
KyAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMihhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwpLAorICAgICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAg
ICAgICAgICAgICBpZiAobV90eXBlID09IEdldHRlcikKKyAgICAgICAgICAgICAgICAgICAgaml0
LnNldHVwUmVzdWx0cyh2YWx1ZVJlZ3MpOworCisgICAgICAgICAgICAgICAgZG9uZS5hcHBlbmQo
aml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2UubGluaygmaml0KTsKKworICAg
ICAgICAgICAgICAgIGppdC5tb3ZlKGxvYWRlZFZhbHVlR1BSLCBHUFJJbmZvOjpyZWdUMCk7Cisj
aWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgICAgICAgICAvLyBXZSAqYWx3YXlzKiBrbm93
IHRoYXQgdGhlIGdldHRlci9zZXR0ZXIsIGlmIG5vbi1udWxsLCBpcyBhIGNlbGwuCisgICAgICAg
ICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2Vs
bFRhZyksIEdQUkluZm86OnJlZ1QxKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX3JhcmVEYXRhLT5jYWxsTGlua0luZm8uZ2V0
KCkpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsID0gaml0
Lm5lYXJDYWxsKCk7CisKKyAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAorICAgICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihhbGlnbmVkTnVtYmVyT2ZCeXRlc0Zv
ckNhbGwpLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKKyAgICAgICAgICAgICAgICBpZiAobV90eXBlID09IEdldHRlcikKKyAgICAgICAg
ICAgICAgICAgICAgaml0LnNldHVwUmVzdWx0cyh2YWx1ZVJlZ3MpOworCisgICAgICAgICAgICAg
ICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuVW5kZWZp
bmVkLmxpbmsoJmppdCk7CisKKyAgICAgICAgICAgICAgICBpZiAobV90eXBlID09IEdldHRlcikK
KyAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwg
dmFsdWVSZWdzKTsKKworICAgICAgICAgICAgICAgIGRvbmUubGluaygmaml0KTsKKworICAgICAg
ICAgICAgICAgIHN0YXRlLmNhbGxiYWNrcy5hcHBlbmQoCisgICAgICAgICAgICAgICAgICAgIFs9
LCAmdm1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBtX3JhcmVEYXRhLT5jYWxsTGlua0luZm8tPnNldENhbGxMb2NhdGlvbnMoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoc2xvd1BhdGhD
YWxsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yo
YWRkcmVzc09mTGlua0Z1bmN0aW9uQ2hlY2spLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKGZhc3RQYXRoQ2FsbCkpOworCisgICAgICAg
ICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2xvd1BhdGhDYWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2Nh
dGlvbkxhYmVsKHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7
CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAvLyBnZXR0ZXI6IEVuY29kZWRKU1ZhbHVlICgqR2V0VmFsdWVGdW5jKShFeGVjU3Rh
dGUqLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKTsKKyAgICAgICAgICAgICAgICAvLyBzZXR0ZXI6IHZvaWQgKCpQdXRWYWx1ZUZ1bmMp
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBiYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzT2JqZWN0LCBF
bmNvZGVkSlNWYWx1ZSB2YWx1ZSk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgICAg
ICBpZiAobV90eXBlID09IEN1c3RvbUdldHRlcikgeworICAgICAgICAgICAgICAgICAgICBqaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgYmFz
ZUZvckFjY2Vzc0dQUiwgYmFzZUZvckdldEdQUiwKKyAgICAgICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihpZGVudC5pbXBsKCkpKTsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShiYXNlRm9yQWNjZXNzR1BSLCBiYXNlRm9yR2V0R1BSLCB2YWx1ZVJlZ3MuZ3ByKCkpOwor
I2Vsc2UKKyAgICAgICAgICAgICAgICBpZiAobV90eXBlID09IEN1c3RvbUdldHRlcikgeworICAg
ICAgICAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKAorICAgICAg
ICAgICAgICAgICAgICAgICAgYmFzZUZvckFjY2Vzc0dQUiwgYmFzZUZvckdldEdQUiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNl
bGxUYWcpLAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKGlkZW50LmltcGwoKSkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoCisgICAgICAgICAgICAg
ICAgICAgICAgICBiYXNlRm9yQWNjZXNzR1BSLCBiYXNlRm9yR2V0R1BSLAorICAgICAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyks
CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB2YWx1ZVJl
Z3MudGFnR1BSKCkpOworICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgICAg
IGppdC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgJnZtLnRvcENhbGxGcmFt
ZSk7CisKKyAgICAgICAgICAgICAgICBvcGVyYXRpb25DYWxsID0gaml0LmNhbGwoKTsKKyAgICAg
ICAgICAgICAgICBpZiAobV90eXBlID09IEN1c3RvbUdldHRlcikKKyAgICAgICAgICAgICAgICAg
ICAgaml0LnNldHVwUmVzdWx0cyh2YWx1ZVJlZ3MpOworICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcCBub0V4Y2VwdGlvbiA9CisgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0RXhj
ZXB0aW9uQ2hlY2soQ0NhbGxIZWxwZXJzOjpJbnZlcnRlZEV4Y2VwdGlvbkNoZWNrKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50cyhDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoJnZtKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAg
ICAgICAgICAgIGhhbmRsZXJDYWxsID0gaml0LmNhbGwoKTsKKyAgICAgICAgICAgICAgICBqaXQu
anVtcFRvRXhjZXB0aW9uSGFuZGxlcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
bm9FeGNlcHRpb24ubGluaygmaml0KTsKKworICAgICAgICAgICAgICAgIHN0YXRlLmNhbGxiYWNr
cy5hcHBlbmQoCisgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgeworICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKG9wZXJhdGlvbkNh
bGwsIEZ1bmN0aW9uUHRyKG1fcmFyZURhdGEtPmN1c3RvbUFjY2Vzc29yLm9wYXF1ZSkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGhhbmRsZXJDYWxsLCBsb29rdXBF
eGNlcHRpb25IYW5kbGVyKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgc3RhdGUuc3VjY2VlZCgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgY2FzZSBSZXBsYWNlOiB7CisgICAgICAgIGlmIChpc0lubGluZU9mZnNldCht
X29mZnNldCkpIHsKKyAgICAgICAgICAgIGppdC5zdG9yZVZhbHVlKAorICAgICAgICAgICAgICAg
IHZhbHVlUmVncywKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAg
ICAgICAgICAgICAgICAgIGJhc2VHUFIsCisgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0Ojpv
ZmZzZXRPZklubGluZVN0b3JhZ2UoKSArCisgICAgICAgICAgICAgICAgICAgIG9mZnNldEluSW5s
aW5lU3RvcmFnZShtX29mZnNldCkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BS
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAg
IGppdC5zdG9yZVZhbHVlKAorICAgICAgICAgICAgICAgIHZhbHVlUmVncywKKyAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hH
UFIsIG9mZnNldEluQnV0dGVyZmx5KG1fb2Zmc2V0KSAqIHNpemVvZihKU1ZhbHVlKSkpOworICAg
ICAgICB9CisgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGNhc2UgVHJhbnNpdGlvbjogeworICAgICAgICAvLyBBY2Nlc3NDYXNlOjp0cmFuc2l0
aW9uKCkgc2hvdWxkIGhhdmUgcmV0dXJuZWQgbnVsbC4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
R1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgPj0gNiB8fCAhc3RydWN0dXJlKCktPm91dE9mTGlu
ZUNhcGFjaXR5KCkgfHwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgPT0gbmV3U3Ry
dWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCgh
c3RydWN0dXJlKCktPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpOworCisgICAgICAgIENDYWxs
SGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CisKKyAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yIGFsbG9jYXRvcihzdHViSW5mby5wYXRjaC51c2VkUmVnaXN0ZXJzKTsKKyAgICAgICAg
YWxsb2NhdG9yLmxvY2soYmFzZUdQUik7CisgICAgICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlUmVn
cyk7CisgICAgICAgIGFsbG9jYXRvci5sb2NrKHNjcmF0Y2hHUFIpOworCisgICAgICAgIEdQUlJl
ZyBzY3JhdGNoR1BSMiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAg
R1BSUmVnIHNjcmF0Y2hHUFIzOworICAgICAgICBpZiAobmV3U3RydWN0dXJlKCktPm91dE9mTGlu
ZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkKKyAgICAgICAg
ICAgICYmIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKQorICAgICAgICAgICAgc2Ny
YXRjaEdQUjMgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHNjcmF0Y2hHUFIzID0gSW52YWxpZEdQUlJlZzsKKworICAgICAgICBzaXpl
X3QgbnVtYmVyT2ZQYWRkaW5nQnl0ZXMgPSBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3Rl
cnNCeVB1c2hpbmcoaml0KTsKKworICAgICAgICBBU1NFUlQoc3RydWN0dXJlKCktPnRyYW5zaXRp
b25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOworCisgICAgICAgIGJvb2wgc2Ny
YXRjaEdQUkhhc1N0b3JhZ2UgPSBmYWxzZTsKKworICAgICAgICBpZiAobmV3U3RydWN0dXJlKCkt
Pm91dE9mTGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkp
IHsKKyAgICAgICAgICAgIHNpemVfdCBuZXdTaXplID0gbmV3U3RydWN0dXJlKCktPm91dE9mTGlu
ZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7CisgICAgICAgICAgICBDb3BpZWRBbGxvY2F0
b3IqIGNvcGllZEFsbG9jYXRvciA9ICZ2bS5oZWFwLnN0b3JhZ2VBbGxvY2F0b3IoKTsKKworICAg
ICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgeworICAgICAg
ICAgICAgICAgIGppdC5sb2FkUHRyKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmlu
Zywgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKAorICAgICAg
ICAgICAgICAgICAgICBqaXQuYnJhbmNoU3ViUHRyKAorICAgICAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpTaWduZWQsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG5ld1NpemUp
LCBzY3JhdGNoR1BSKSk7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIs
ICZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZyk7CisgICAgICAgICAgICAgICAg
aml0Lm5lZ1B0cihzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAorICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFic29sdXRlQWRkcmVzcygmY29waWVkQWxs
b2NhdG9yLT5tX2N1cnJlbnRQYXlsb2FkRW5kKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAg
ICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzaXplb2YoSlNWYWx1ZSkp
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2l6
ZV90IG9sZFNpemUgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihK
U1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIzKTsK
KyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRS
ZW1haW5pbmcsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZCgK
KyAgICAgICAgICAgICAgICAgICAgaml0LmJyYW5jaFN1YlB0cigKKyAgICAgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6U2lnbmVkLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihu
ZXdTaXplKSwgc2NyYXRjaEdQUikpOworICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cihzY3Jh
dGNoR1BSLCAmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcpOworICAgICAgICAg
ICAgICAgIGppdC5uZWdQdHIoc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgaml0LmFkZFB0
cigKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MoJmNv
cGllZEFsbG9jYXRvci0+bV9jdXJyZW50UGF5bG9hZEVuZCksIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEpT
VmFsdWUpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBzY3JhdGNo
R1BSID0gbmV3IHN0b3JhZ2UsIHNjcmF0Y2hHUFIzID0gb2xkIHN0b3JhZ2UsCisgICAgICAgICAg
ICAgICAgLy8gc2NyYXRjaEdQUjIgPSBhdmFpbGFibGUKKyAgICAgICAgICAgICAgICBmb3IgKHNp
emVfdCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBvbGRTaXplOyBvZmZzZXQgKz0gc2l6ZW9mKHZvaWQq
KSkgeworICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFB0cigKKyAgICAgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzY3JhdGNoR1BSMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAtc3RhdGljX2Nhc3Q8
cHRyZGlmZl90PigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICsgc2l6
ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAg
c2NyYXRjaEdQUjIpOworICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoCisgICAgICAg
ICAgICAgICAgICAgICAgICBzY3JhdGNoR1BSMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNo
R1BSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+
KG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZih2b2lkKikpKSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBqaXQuc3RvcmVQdHIoc2NyYXRj
aEdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlP
ZmZzZXQoKSkpOworICAgICAgICAgICAgc2NyYXRjaEdQUkhhc1N0b3JhZ2UgPSB0cnVlOworICAg
ICAgICB9CisKKyAgICAgICAgdWludDMyX3Qgc3RydWN0dXJlQml0cyA9IGJpdHdpc2VfY2FzdDx1
aW50MzJfdD4obmV3U3RydWN0dXJlKCktPmlkKCkpOworICAgICAgICBqaXQuc3RvcmUzMigKKyAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHN0cnVjdHVyZUJpdHMpLAorICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSkpOworCisgICAgICAgIGlmIChpc0lubGluZU9mZnNldChtX29mZnNldCkpIHsK
KyAgICAgICAgICAgIGppdC5zdG9yZVZhbHVlKAorICAgICAgICAgICAgICAgIHZhbHVlUmVncywK
KyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICAgICAg
ICAgIGJhc2VHUFIsCisgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0OjpvZmZzZXRPZklubGlu
ZVN0b3JhZ2UoKSArCisgICAgICAgICAgICAgICAgICAgIG9mZnNldEluSW5saW5lU3RvcmFnZSht
X29mZnNldCkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGlmICghc2NyYXRjaEdQUkhhc1N0b3JhZ2UpCisgICAgICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUoCisgICAgICAg
ICAgICAgICAgdmFsdWVSZWdzLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVz
cyhzY3JhdGNoR1BSLCBvZmZzZXRJbkJ1dHRlcmZseShtX29mZnNldCkgKiBzaXplb2YoSlNWYWx1
ZSkpKTsKKyAgICAgICAgfQorCisgICAgICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIg
PSBudWxscHRyOworICAgICAgICBpZiAobmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5
KCkgIT0gc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpCisgICAgICAgICAgICBzY3Jh
dGNoQnVmZmVyID0gdm0uc2NyYXRjaEJ1ZmZlckZvclNpemUoYWxsb2NhdG9yLmRlc2lyZWRTY3Jh
dGNoQnVmZmVyU2l6ZUZvckNhbGwoKSk7CisKKyNpZiBFTkFCTEUoR0dDKQorICAgICAgICBpZiAo
bmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlKCktPm91dE9m
TGluZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsRmx1
c2hXcml0ZUJhcnJpZXJCdWZmZXI7CisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgb3du
ZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGppdC5qdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihi
YXNlR1BSKTsKKyAgICAgICAgICAgIFdyaXRlQmFycmllckJ1ZmZlciYgd3JpdGVCYXJyaWVyQnVm
ZmVyID0gaml0LnZtKCktPmhlYXAud3JpdGVCYXJyaWVyQnVmZmVyKCk7CisgICAgICAgICAgICBq
aXQubG9hZDMyKHdyaXRlQmFycmllckJ1ZmZlci5jdXJyZW50SW5kZXhBZGRyZXNzKCksIHNjcmF0
Y2hHUFIyKTsKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBuZWVkVG9GbHVzaCA9Cisg
ICAgICAgICAgICAgICAgaml0LmJyYW5jaDMyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OkFib3ZlT3JFcXVhbCwgc2NyYXRjaEdQUjIsCisgICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHdyaXRlQmFycmllckJ1ZmZlci5jYXBhY2l0eSgpKSk7
CisKKyAgICAgICAgICAgIGppdC5hZGQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwg
c2NyYXRjaEdQUjIpOworICAgICAgICAgICAgaml0LnN0b3JlMzIoc2NyYXRjaEdQUjIsIHdyaXRl
QmFycmllckJ1ZmZlci5jdXJyZW50SW5kZXhBZGRyZXNzKCkpOworCisgICAgICAgICAgICBqaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIod3JpdGVCYXJyaWVyQnVmZmVyLmJ1ZmZl
cigpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAvLyBXZSB1c2UgYW4gb2Zmc2V0IG9mIC1z
aXplb2Yodm9pZCopIGJlY2F1c2Ugd2UgYWxyZWFkeSBhZGRlZCAxIHRvIHNjcmF0Y2hHUFIyLgor
ICAgICAgICAgICAgaml0LnN0b3JlUHRyKAorICAgICAgICAgICAgICAgIGJhc2VHUFIsCisgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoCisgICAgICAgICAgICAgICAgICAg
IHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIyLCBDQ2FsbEhlbHBlcnM6OlNjYWxlUHRyLAorICAgICAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQzMl90Pigtc2l6ZW9mKHZvaWQqKSkpKTsKKwor
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmVXaXRoQmFycmllciA9IGppdC5qdW1w
KCk7CisgICAgICAgICAgICBuZWVkVG9GbHVzaC5saW5rKCZqaXQpOworCisgICAgICAgICAgICBh
bGxvY2F0b3IucHJlc2VydmVVc2VkUmVnaXN0ZXJzVG9TY3JhdGNoQnVmZmVyRm9yQ2FsbChqaXQs
IHNjcmF0Y2hCdWZmZXIsIHNjcmF0Y2hHUFIyKTsKKyAgICAgICAgICAgIGppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoYmFzZUdQUik7CisgICAgICAgICAgICBjYWxsRmx1c2hXcml0ZUJh
cnJpZXJCdWZmZXIgPSBqaXQuY2FsbCgpOworICAgICAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVV
c2VkUmVnaXN0ZXJzRnJvbVNjcmF0Y2hCdWZmZXJGb3JDYWxsKAorICAgICAgICAgICAgICAgIGpp
dCwgc2NyYXRjaEJ1ZmZlciwgc2NyYXRjaEdQUjIpOworCisgICAgICAgICAgICBkb25lV2l0aEJh
cnJpZXIubGluaygmaml0KTsKKyAgICAgICAgICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4u
bGluaygmaml0KTsKKworICAgICAgICAgICAgc3RhdGUuY2FsbGJhY2tzLmFwcGVuZCgKKyAgICAg
ICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAg
ICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGxGbHVzaFdyaXRlQmFycmllckJ1ZmZlciwgb3BlcmF0
aW9uRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIpOworICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICB9CisjZW5kaWYgLy8gRU5BQkxFKEdHQykKKyAgICAgICAgCisgICAgICAgIHN0YXRlLnN1Y2Nl
ZWQoKTsKKworICAgICAgICBpZiAobmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkg
IT0gc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgICAgIHNsb3dQ
YXRoLmxpbmsoJmppdCk7CisgICAgICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lz
dGVyc0J5UG9wcGluZyhqaXQsIG51bWJlck9mUGFkZGluZ0J5dGVzKTsKKyAgICAgICAgICAgIGFs
bG9jYXRvci5wcmVzZXJ2ZVVzZWRSZWdpc3RlcnNUb1NjcmF0Y2hCdWZmZXJGb3JDYWxsKGppdCwg
c2NyYXRjaEJ1ZmZlciwgc2NyYXRjaEdQUik7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAg
ICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoCisgICAgICAgICAgICAgICAgYmFz
ZUdQUiwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobmV3U3Ry
dWN0dXJlKCkpLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG1f
b2Zmc2V0KSwKKyAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MuZ3ByKCkpOworI2Vsc2UKKyAgICAg
ICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoCisgICAgICAgICAgICAgICAg
YmFzZUdQUiwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobmV3
U3RydWN0dXJlKCkpLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KG1fb2Zmc2V0KSwKKyAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB2YWx1
ZVJlZ3MudGFnR1BSKCkpOworI2VuZGlmCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwg
b3BlcmF0aW9uQ2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgICAgICBhbGxvY2F0b3IucmVzdG9y
ZVVzZWRSZWdpc3RlcnNGcm9tU2NyYXRjaEJ1ZmZlckZvckNhbGwoaml0LCBzY3JhdGNoQnVmZmVy
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKKworICAgICAgICAg
ICAgc3RhdGUuY2FsbGJhY2tzLmFwcGVuZCgKKyAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZm
ZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKG9w
ZXJhdGlvbkNhbGwsIG9wZXJhdGlvblJlYWxsb2NhdGVTdG9yYWdlQW5kRmluaXNoUHV0KTsKKyAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgY2FzZSBBcnJheUxlbmd0aDogeworICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQ
Uik7CisgICAgICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIs
IEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3Rh
dGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoCisgICAgICAgICAgICBqaXQuYnJhbmNoMzIoQ0NhbGxI
ZWxwZXJzOjpMZXNzVGhhbiwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
MCkpKTsKKyAgICAgICAgaml0LmJveEludDMyKHNjcmF0Y2hHUFIsIHZhbHVlUmVncyk7CisgICAg
ICAgIHN0YXRlLnN1Y2NlZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNhc2Ug
U3RyaW5nTGVuZ3RoOiB7CisgICAgICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KGJhc2VHUFIsIEpTU3RyaW5nOjpvZmZzZXRPZkxlbmd0aCgpKSwgdmFsdWVSZWdzLnBheWxvYWRH
UFIoKSk7CisgICAgICAgIGppdC5ib3hJbnQzMih2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB2YWx1
ZVJlZ3MpOworICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
IH0KICAgICAKLSAgICByZXR1cm4gcmVzdWx0OworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiB9CiAKLVBvbHltb3JwaGljR2V0QnlJZExpc3Q6On5Qb2x5bW9ycGhpY0dldEJ5SWRM
aXN0KCkgeyB9CitQb2x5bW9ycGhpY0FjY2Vzczo6UG9seW1vcnBoaWNBY2Nlc3MoKSB7IH0KK1Bv
bHltb3JwaGljQWNjZXNzOjp+UG9seW1vcnBoaWNBY2Nlc3MoKSB7IH0KIAotTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmN1cnJlbnRTbG93UGF0aFRhcmdldCgK
LSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pIGNvbnN0CitNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgUG9seW1vcnBoaWNBY2Nlc3M6OnJlZ2VuZXJhdGVXaXRoQ2FzZXMoCisgICAgVk0mIHZt
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25z
dCBJZGVudGlmaWVyJiBpZGVudCwKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nh
c2U+PiBvcmlnaW5hbENhc2VzVG9BZGQpCiB7Ci0gICAgaWYgKGlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZv
LnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpOwotICAgIHJldHVybiBtX2xpc3QubGFzdCgpLnN0
dWJSb3V0aW5lKCktPmNvZGUoKS5jb2RlKCk7CisgICAgLy8gVGhpcyBtZXRob2Qgd2lsbCBhZGQg
dGhlIG9yaWdpbmFsQ2FzZXNUb0FkZCB0byB0aGUgbGlzdCBvbmUgYXQgYSB0aW1lIHdoaWxlIHBy
ZXNlcnZpbmcgdGhlCisgICAgLy8gaW52YXJpYW50czoKKyAgICAvLyAtIElmIGEgbmV3bHkgYWRk
ZWQgY2FzZSBjYW5SZXBsYWNlKCkgYW55IGV4aXN0aW5nIGNhc2UsIHRoZW4gdGhlIGV4aXN0aW5n
IGNhc2UgaXMgcmVtb3ZlZCBiZWZvcmUKKyAgICAvLyAgIHRoZSBuZXcgY2FzZSBpcyBhZGRlZC4g
UmVtb3ZhbCBkb2Vzbid0IGNoYW5nZSBvcmRlciBvZiB0aGUgbGlzdC4gQW55IG51bWJlciBvZiBl
eGlzdGluZyBjYXNlcworICAgIC8vICAgY2FuIGJlIHJlbW92ZWQgdmlhIHRoZSBjYW5SZXBsYWNl
KCkgcnVsZS4KKyAgICAvLyAtIENhc2VzIGluIHRoZSBsaXN0IGFsd2F5cyBhcHBlYXIgaW4gYXNj
ZW5kaW5nIG9yZGVyIG9mIHRpbWUgb2YgYWRkaXRpb24uIFRoZXJlZm9yZSwgaWYgeW91CisgICAg
Ly8gICBjYXNjYWRlIHRocm91Z2ggdGhlIGNhc2VzIGluIHJldmVyc2Ugb3JkZXIsIHlvdSB3aWxs
IGdldCB0aGUgbW9zdCByZWNlbnQgY2FzZXMgZmlyc3QuCisgICAgLy8gLSBJZiB0aGlzIG1ldGhv
ZCBmYWlscyAocmV0dXJucyBudWxsLCBkb2Vzbid0IGFkZCB0aGUgY2FzZXMpLCB0aGVuIGJvdGgg
dGhlIHByZXZpb3VzIGNhc2UgbGlzdAorICAgIC8vICAgYW5kIHRoZSBwcmV2aW91cyBzdHViIGFy
ZSBrZXB0IGludGFjdCBhbmQgdGhlIG5ldyBjYXNlcyBhcmUgZGVzdHJveWVkLiBJdCdzIE9LIHRv
IGF0dGVtcHQgdG8KKyAgICAvLyAgIGFkZCBtb3JlIHRoaW5ncyBhZnRlciBmYWlsdXJlLgorICAg
IAorICAgIC8vIEZpcnN0LCB2ZXJpZnkgdGhhdCB3ZSBjYW4gZ2VuZXJhdGUgY29kZSBmb3IgYWxs
IG9mIHRoZSBuZXcgY2FzZXMgd2hpbGUgZWxpbWluYXRpbmcgYW55IG9mIHRoZQorICAgIC8vIG5l
dyBjYXNlcyB0aGF0IHJlcGxhY2UgZWFjaCBvdGhlci4KKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVf
cHRyPEFjY2Vzc0Nhc2U+PiBjYXNlc1RvQWRkOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBvcmlnaW5hbENhc2VzVG9BZGQuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgc3RkOjp1bmlxdWVf
cHRyPEFjY2Vzc0Nhc2U+IG15Q2FzZSA9IHN0ZDo6bW92ZShvcmlnaW5hbENhc2VzVG9BZGRbaV0p
OworCisgICAgICAgIC8vIEFkZCBpdCBvbmx5IGlmIGl0IGlzIG5vdCByZXBsYWNlZCBieSB0aGUg
c3Vic2VxdWVudCBjYXNlcyBpbiB0aGUgbGlzdC4KKyAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNl
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBpICsgMTsgaiA8IG9yaWdpbmFsQ2FzZXNUb0Fk
ZC5zaXplKCk7ICsraikgeworICAgICAgICAgICAgaWYgKG9yaWdpbmFsQ2FzZXNUb0FkZFtqXS0+
Y2FuUmVwbGFjZSgqbXlDYXNlKSkgeworICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IGlmIChmb3VuZCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgaWYg
KG15Q2FzZS0+ZG9lc0NhbGxzKCkgJiYgc3R1YkluZm8ucGF0Y2guc3BpbGxNb2RlID09IE5lZWRU
b1NwaWxsKQorICAgICAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOworCisg
ICAgICAgIGNhc2VzVG9BZGQuYXBwZW5kKHN0ZDo6bW92ZShteUNhc2UpKTsKKyAgICB9CisKKyAg
ICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiY2FzZXNUb0FkZDogIiwgbGlzdER1bXAo
Y2FzZXNUb0FkZCksICJcbiIpOworCisgICAgLy8gSWYgdGhlcmUgYXJlbid0IGFueSBjYXNlcyB0
byBhZGQsIHRoZW4gZmFpbCBvbiB0aGUgZ3JvdW5kcyB0aGF0IHRoZXJlJ3Mgbm8gcG9pbnQgdG8g
Z2VuZXJhdGluZyBhCisgICAgLy8gbmV3IHN0dWIgdGhhdCB3aWxsIGJlIGlkZW50aWNhbCB0byB0
aGUgb2xkIG9uZS4gUmV0dXJuaW5nIG51bGwgc2hvdWxkIHRlbGwgdGhlIGNhbGxlciB0byBqdXN0
CisgICAgLy8ga2VlcCBkb2luZyB3aGF0IHRoZXkgd2VyZSBkb2luZyBiZWZvcmUuCisgICAgaWYg
KGNhc2VzVG9BZGQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyKCk7CisKKyAgICAvLyBOb3cgY29uc3RydWN0IHRoZSBsaXN0IG9mIGNhc2VzIGFzIHRoZXkg
c2hvdWxkIGFwcGVhciBpZiB3ZSBhcmUgc3VjY2Vzc2Z1bC4gVGhpcyBtZWFucyBwdXR0aW5nCisg
ICAgLy8gYWxsIG9mIHRoZSBwcmV2aW91cyBjYXNlcyBpbiB0aGlzIGxpc3QgaW4gb3JkZXIgYnV0
IGV4Y2x1ZGluZyB0aG9zZSB0aGF0IGNhbiBiZSByZXBsYWNlZCwgYW5kCisgICAgLy8gdGhlbiBh
ZGRpbmcgdGhlIG5ldyBjYXNlcy4KKyAgICBMaXN0VHlwZSBuZXdDYXNlczsKKyAgICBmb3IgKGF1
dG8mIG9sZENhc2UgOiBtX2xpc3QpIHsKKyAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAg
ICAgICBmb3IgKGF1dG8mIGNhc2VUb0FkZCA6IGNhc2VzVG9BZGQpIHsKKyAgICAgICAgICAgIGlm
IChjYXNlVG9BZGQtPmNhblJlcGxhY2UoKm9sZENhc2UpKSB7CisgICAgICAgICAgICAgICAgZm91
bmQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGlmICghZm91bmQpCisgICAgICAgICAgICBuZXdDYXNlcy5hcHBlbmQob2xk
Q2FzZS0+Y2xvbmUoKSk7CisgICAgfQorICAgIGZvciAoYXV0byYgY2FzZVRvQWRkIDogY2FzZXNU
b0FkZCkKKyAgICAgICAgbmV3Q2FzZXMuYXBwZW5kKHN0ZDo6bW92ZShjYXNlVG9BZGQpKTsKKwor
ICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJuZXdDYXNlczogIiwgbGlzdER1bXAo
bmV3Q2FzZXMpLCAiXG4iKTsKKworICAgIGlmIChuZXdDYXNlcy5zaXplKCkgPiBPcHRpb25zOjpt
YXhBY2Nlc3NWYXJpYW50TGlzdFNpemUoKSkgeworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAg
ICAgICAgIGRhdGFMb2coIlRvbyBtYW55IGNhc2VzLlxuIik7CisgICAgICAgIHJldHVybiBNYWNy
b0Fzc2VtYmxlckNvZGVQdHIoKTsKKyAgICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIg
cmVzdWx0ID0gcmVnZW5lcmF0ZSh2bSwgY29kZUJsb2NrLCBzdHViSW5mbywgaWRlbnQsIG5ld0Nh
c2VzKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cigpOworCisgICAgbV9saXN0ID0gc3RkOjptb3ZlKG5ld0Nhc2VzKTsKKyAgICByZXR1cm4g
cmVzdWx0OwogfQogCi12b2lkIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmFkZEFjY2Vzcyhjb25z
dCBHZXRCeUlkQWNjZXNzJiBhY2Nlc3MpCitNYWNyb0Fzc2VtYmxlckNvZGVQdHIgUG9seW1vcnBo
aWNBY2Nlc3M6OnJlZ2VuZXJhdGVXaXRoQ2FzZSgKKyAgICBWTSYgdm0sIENvZGVCbG9jayogY29k
ZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIGNvbnN0IElkZW50aWZpZXImIGlk
ZW50LAorICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBuZXdBY2Nlc3MpCiB7Ci0gICAg
QVNTRVJUKCFpc0Z1bGwoKSk7Ci0gICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHJlc2l6aW5nIG9w
dGltaXplcyBmb3Igc3BhY2UsIG5vdCB0aW1lLgotICAgIG1fbGlzdC5yZXNpemVUb0ZpdChtX2xp
c3Quc2l6ZSgpICsgMSk7Ci0gICAgbV9saXN0Lmxhc3QoKSA9IGFjY2VzczsKKyAgICBWZWN0b3I8
c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+PiBuZXdBY2Nlc3NlczsKKyAgICBuZXdBY2Nlc3Nl
cy5hcHBlbmQoc3RkOjptb3ZlKG5ld0FjY2VzcykpOworICAgIHJldHVybiByZWdlbmVyYXRlV2l0
aENhc2VzKHZtLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBpZGVudCwgc3RkOjptb3ZlKG5ld0FjY2Vz
c2VzKSk7CiB9CiAKLWJvb2wgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6aXNGdWxsKCkgY29uc3QK
K2Jvb2wgUG9seW1vcnBoaWNBY2Nlc3M6OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0CiB7Ci0gICAg
QVNTRVJUKHNpemUoKSA8PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpOwotICAgIHJldHVy
biBzaXplKCkgPT0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkgeworICAgICAgICBpZiAoIWF0KGkpLnZpc2l0V2Vh
ayh2bSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVl
OwogfQogCi1ib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmlzQWxtb3N0RnVsbCgpIGNvbnN0
Cit2b2lkIFBvbHltb3JwaGljQWNjZXNzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7
Ci0gICAgQVNTRVJUKHNpemUoKSA8PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpOwotICAg
IHJldHVybiBzaXplKCkgPj0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIC0gMTsKKyAgICBv
dXQucHJpbnQoUmF3UG9pbnRlcih0aGlzKSwgIjpbIik7CisgICAgQ29tbWFQcmludGVyIGNvbW1h
OworICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2xpc3QpCisgICAgICAgIG91dC5wcmludChjb21t
YSwgKmVudHJ5KTsKKyAgICBvdXQucHJpbnQoIl0iKTsKIH0KIAotYm9vbCBQb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0OjpkaWRTZWxmUGF0Y2hpbmcoKSBjb25zdAorTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IFBvbHltb3JwaGljQWNjZXNzOjpyZWdlbmVyYXRlKAorICAgIFZNJiB2bSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgY29uc3QgSWRlbnRpZmllciYg
aWRlbnQsCisgICAgUG9seW1vcnBoaWNBY2Nlc3M6Okxpc3RUeXBlJiBjYXNlcykKIHsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSBzaXplKCk7IGktLTspIHsKLSAgICAgICAgaWYgKGF0KGkpLnR5cGUo
KSA9PSBHZXRCeUlkQWNjZXNzOjpTaW1wbGVJbmxpbmUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiR2VuZXJhdGluZyBjb2RlIGZv
ciBjYXNlczogIiwgbGlzdER1bXAoY2FzZXMpLCAiXG4iKTsKKyAgICAKKyAgICBBY2Nlc3NHZW5l
cmF0aW9uU3RhdGUgc3RhdGU7CisKKyAgICBzdGF0ZS5hY2Nlc3MgPSB0aGlzOworICAgIHN0YXRl
LnN0dWJJbmZvID0gJnN0dWJJbmZvOworICAgIHN0YXRlLmlkZW50ID0gJmlkZW50OworICAgIAor
ICAgIHN0YXRlLmJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmJh
c2VHUFIpOworICAgIHN0YXRlLnZhbHVlUmVncyA9IEpTVmFsdWVSZWdzKAorI2lmIFVTRShKU1ZB
TFVFMzJfNjQpCisgICAgICAgIHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gudmFs
dWVUYWdHUFIpLAorI2VuZGlmCisgICAgICAgIHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8u
cGF0Y2gudmFsdWVHUFIpKTsKKworICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0
b3Ioc3R1YkluZm8ucGF0Y2gudXNlZFJlZ2lzdGVycyk7CisgICAgc3RhdGUuYWxsb2NhdG9yID0g
JmFsbG9jYXRvcjsKKyAgICBhbGxvY2F0b3IubG9jayhzdGF0ZS5iYXNlR1BSKTsKKyAgICBhbGxv
Y2F0b3IubG9jayhzdGF0ZS52YWx1ZVJlZ3MpOworCisgICAgc3RhdGUuc2NyYXRjaEdQUiA9IGFs
bG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAKKyAgICBDQ2FsbEhlbHBlcnMgaml0
KCZ2bSwgY29kZUJsb2NrKTsKKyAgICBzdGF0ZS5qaXQgPSAmaml0OworCisgICAgc3RhdGUubnVt
YmVyT2ZQYWRkaW5nQnl0ZXMgPSBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1
c2hpbmcoaml0KTsKKworICAgIGJvb2wgYWxsR3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2sgPSB0cnVl
OworICAgIGZvciAoYXV0byYgZW50cnkgOiBjYXNlcykKKyAgICAgICAgYWxsR3VhcmRlZEJ5U3Ry
dWN0dXJlQ2hlY2sgJj0gZW50cnktPmd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrKCk7CisKKyAgICBp
ZiAoY2FzZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIFRoaXMgaXMgc3VwZXIgdW5saWtlbHks
IGJ1dCB3ZSBtYWtlIGl0IGxlZ2FsIGFueXdheS4KKyAgICAgICAgc3RhdGUuZmFpbEFuZFJlcGF0
Y2guYXBwZW5kKGppdC5qdW1wKCkpOworICAgIH0gZWxzZSBpZiAoIWFsbEd1YXJkZWRCeVN0cnVj
dHVyZUNoZWNrIHx8IGNhc2VzLnNpemUoKSA9PSAxKSB7CisgICAgICAgIC8vIElmIHRoZXJlIGFy
ZSBhbnkgcHJveGllcyBpbiB0aGUgbGlzdCwgd2UgY2Fubm90IGp1c3QgdXNlIGEgYmluYXJ5IHN3
aXRjaCBvdmVyIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgIC8vIFdlIG5lZWQgdG8gcmVzb3J0IHRv
IGEgY2FzY2FkZS4gQSBjYXNjYWRlIGFsc28gaGFwcGVucyB0byBiZSBvcHRpbWFsIGlmIHdlIG9u
bHkgaGF2ZSBqdXN0CisgICAgICAgIC8vIG9uZSBjYXNlLgorICAgICAgICBDQ2FsbEhlbHBlcnM6
Okp1bXBMaXN0IGZhbGxUaHJvdWdoOworCisgICAgICAgIC8vIENhc2NhZGUgdGhyb3VnaCB0aGUg
bGlzdCwgcHJlZmVycmluZyBuZXdlciBlbnRyaWVzLgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBjYXNlcy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIGZhbGxUaHJvdWdoLmxpbmsoJmpp
dCk7CisgICAgICAgICAgICBjYXNlc1tpXS0+Z2VuZXJhdGVXaXRoR3VhcmQoc3RhdGUsIGZhbGxU
aHJvdWdoKTsKKyAgICAgICAgfQorICAgICAgICBzdGF0ZS5mYWlsQW5kUmVwYXRjaC5hcHBlbmQo
ZmFsbFRocm91Z2gpOworICAgIH0gZWxzZSB7CisgICAgICAgIGppdC5sb2FkMzIoCisgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RhdGUuYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwKKyAgICAgICAgICAgIHN0YXRlLnNjcmF0Y2hHUFIpOworICAgICAgICAK
KyAgICAgICAgVmVjdG9yPGludDY0X3Q+IGNhc2VWYWx1ZXMoY2FzZXMuc2l6ZSgpKTsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNhc2VzLnNpemUoKTsgKytpKQorICAgICAgICAg
ICAgY2FzZVZhbHVlc1tpXSA9IGJpdHdpc2VfY2FzdDxpbnQzMl90PihjYXNlc1tpXS0+c3RydWN0
dXJlKCktPmlkKCkpOworICAgICAgICAKKyAgICAgICAgQmluYXJ5U3dpdGNoIGJpbmFyeVN3aXRj
aChzdGF0ZS5zY3JhdGNoR1BSLCBjYXNlVmFsdWVzLCBCaW5hcnlTd2l0Y2g6OkludDMyKTsKKyAg
ICAgICAgd2hpbGUgKGJpbmFyeVN3aXRjaC5hZHZhbmNlKGppdCkpCisgICAgICAgICAgICBjYXNl
c1tiaW5hcnlTd2l0Y2guY2FzZUluZGV4KCldLT5nZW5lcmF0ZShzdGF0ZSk7CisgICAgICAgIHN0
YXRlLmZhaWxBbmRSZXBhdGNoLmFwcGVuZChiaW5hcnlTd2l0Y2guZmFsbFRocm91Z2goKSk7Cisg
ICAgfQorCisgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5saW5rKCZqaXQpOworCisgICAgLy8gTWFr
ZSBzdXJlIHRoYXQgdGhlIGlubGluZSBjYWNoZSBvcHRpbWl6YXRpb24gY29kZSBrbm93cyB0aGF0
IHdlIGFyZSB0YWtpbmcgc2xvdyBwYXRoIGJlY2F1c2UKKyAgICAvLyBvZiBzb21ldGhpbmcgdGhh
dCBpc24ndCBwYXRjaGFibGUuICJzZWVuIiBiZWluZyBmYWxzZSBtZWFucyB0aGF0IHdlIGJ5cGFz
cyBwYXRjaGluZy4gVGhpcyBpcworICAgIC8vIHByZXR0eSBncm9zcyBidXQgaXQgbWVhbnMgdGhh
dCB3ZSBkb24ndCBuZWVkIHRvIGhhdmUgdHdvIHNsb3cgcGF0aCBlbnRyeXBvaW50cyAtIG9uZSBm
b3IKKyAgICAvLyBwYXRjaGluZyBhbmQgb25lIGZvciBub3JtYWwgc2xvdyBzdHVmZi4KKyAgICBq
aXQuc3RvcmU4KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGZhbHNlKSwgJnN0dWJJbmZvLnNl
ZW4pOworCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBmYWlsdXJlOworICAgIGlmIChhbGxv
Y2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMoKSkgeworICAgICAgICBzdGF0ZS5mYWlsQW5kUmVwYXRj
aC5saW5rKCZqaXQpOworICAgICAgICBzdGF0ZS5yZXN0b3JlU2NyYXRjaCgpOworICAgIH0gZWxz
ZQorICAgICAgICBmYWlsdXJlID0gc3RhdGUuZmFpbEFuZFJlcGF0Y2g7CisgICAgZmFpbHVyZS5h
cHBlbmQoaml0Lmp1bXAoKSk7CisKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIodm0sIGppdCwg
Y29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgIGlmIChsaW5rQnVmZmVyLmRp
ZEZhaWxUb0FsbG9jYXRlKCkpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBk
YXRhTG9nKCJEaWQgZmFpbCB0byBhbGxvY2F0ZS5cbiIpOworICAgICAgICByZXR1cm4gTWFjcm9B
c3NlbWJsZXJDb2RlUHRyKCk7CiAgICAgfQotICAgIHJldHVybiBmYWxzZTsKKworICAgIENvZGVM
b2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCA9CisgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSk7Cisg
ICAgICAgIAorICAgIGxpbmtCdWZmZXIubGluayhzdGF0ZS5zdWNjZXNzLCBzdWNjZXNzTGFiZWwp
OworCisgICAgbGlua0J1ZmZlci5saW5rKAorICAgICAgICBmYWlsdXJlLAorICAgICAgICBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0
YUNhbGxUb1Nsb3dDYXNlKSk7CisgICAgCisgICAgZm9yIChhdXRvIGNhbGxiYWNrIDogc3RhdGUu
Y2FsbGJhY2tzKQorICAgICAgICBjYWxsYmFjayhsaW5rQnVmZmVyKTsKKyAgICAKKyAgICBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgY29kZSA9IEZJTkFMSVpFX0NPREVfRk9SKAorICAgICAgICBjb2Rl
QmxvY2ssIGxpbmtCdWZmZXIsCisgICAgICAgICgiJXMiLCB0b0NTdHJpbmcoIkFjY2VzcyBzdHVi
IGZvciAiLCAqY29kZUJsb2NrLCAiICIsIHN0dWJJbmZvLmNvZGVPcmlnaW4sICIgd2l0aCByZXR1
cm4gcG9pbnQgIiwgc3VjY2Vzc0xhYmVsLCAiOiAiLCBsaXN0RHVtcChjYXNlcykpLmRhdGEoKSkp
OworCisgICAgYm9vbCBkb2VzQ2FsbHMgPSBmYWxzZTsKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDog
Y2FzZXMpCisgICAgICAgIGRvZXNDYWxscyB8PSBlbnRyeS0+ZG9lc0NhbGxzKCk7CisgICAgCisg
ICAgbV9zdHViUm91dGluZSA9IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKGNvZGUsIHZtLCBjb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpLCBkb2VzQ2FsbHMpOworICAgIG1fd2F0Y2hwb2ludHMgPSBz
dGQ6Om1vdmUoc3RhdGUud2F0Y2hwb2ludHMpOworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBk
YXRhTG9nKCJSZXR1cm5pbmc6ICIsIGNvZGUuY29kZSgpLCAiXG4iKTsKKyAgICByZXR1cm4gY29k
ZS5jb2RlKCk7CiB9CiAKLWJvb2wgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6dmlzaXRXZWFrKFZN
JiB2bSkgY29uc3QKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordXNp
bmcgbmFtZXNwYWNlIEpTQzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQs
IEFjY2Vzc0Nhc2U6OkFjY2Vzc1R5cGUgdHlwZSkKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBz
aXplKCk7IGktLTspIHsKLSAgICAgICAgaWYgKCFhdChpKS52aXNpdFdlYWsodm0pKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgQWNjZXNz
Q2FzZTo6TG9hZDoKKyAgICAgICAgb3V0LnByaW50KCJMb2FkIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEFjY2Vzc0Nhc2U6OlRyYW5zaXRpb246CisgICAgICAgIG91dC5wcmludCgiVHJh
bnNpdGlvbiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpSZXBsYWNl
OgorICAgICAgICBvdXQucHJpbnQoIlJlcGxhY2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgQWNjZXNzQ2FzZTo6TWlzczoKKyAgICAgICAgb3V0LnByaW50KCJNaXNzIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkdldHRlcjoKKyAgICAgICAgb3V0LnByaW50
KCJHZXR0ZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6U2V0dGVy
OgorICAgICAgICBvdXQucHJpbnQoIlNldHRlciIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBBY2Nlc3NDYXNlOjpDdXN0b21HZXR0ZXI6CisgICAgICAgIG91dC5wcmludCgiQ3VzdG9tR2V0
dGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkN1c3RvbVNldHRl
cjoKKyAgICAgICAgb3V0LnByaW50KCJDdXN0b21TZXR0ZXIiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5IaXQ6CisgICAgICAgIG91dC5wcmludCgiSW5IaXQiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5NaXNzOgorICAgICAgICBv
dXQucHJpbnQoIkluTWlzcyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNl
OjpBcnJheUxlbmd0aDoKKyAgICAgICAgb3V0LnByaW50KCJBcnJheUxlbmd0aCIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpTdHJpbmdMZW5ndGg6CisgICAgICAgIG91
dC5wcmludCgiU3RyaW5nTGVuZ3RoIik7CisgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgcmV0
dXJuIHRydWU7CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi19IC8v
IG5hbWVzcGFjZSBKU0MKK30gLy8gbmFtZXNwYWNlIFdURgogCiAjZW5kaWYgLy8gRU5BQkxFKEpJ
VCkKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNj
ZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHlt
b3JwaGljQWNjZXNzLmgJKHJldmlzaW9uIDE4OTMyNCkJKGZyb20gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuaDoxODkzMjQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBvbHltb3JwaGljR2V0QnlJZExpc3RfaAorI2RlZmlu
ZSBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0X2gKKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRl
ICJDb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKyNpbmNsdWRlICJP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgorI2luY2x1ZGUgIk9wY29kZS5oIgorI2luY2x1
ZGUgIlN0cnVjdHVyZS5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIENvZGVCbG9jazsKK3N0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbzsKKworY2xh
c3MgR2V0QnlJZEFjY2VzcyB7CitwdWJsaWM6CisgICAgZW51bSBBY2Nlc3NUeXBlIHsKKyAgICAg
ICAgSW52YWxpZCwKKyAgICAgICAgU2ltcGxlSW5saW5lLCAvLyBUaGlzIGlzIHRoZSBwYXRjaGVk
IGlubGluZSBhY2Nlc3MuCisgICAgICAgIFNpbXBsZVN0dWIsIC8vIFRoaXMgaXMgYSBzdHViLgor
ICAgICAgICBXYXRjaGVkU3R1YiwKKyAgICAgICAgR2V0dGVyLAorICAgICAgICBDdXN0b21HZXR0
ZXIsCisgICAgICAgIFNpbXBsZU1pc3MsCisgICAgfTsKKyAgICAKKyAgICBHZXRCeUlkQWNjZXNz
KCkKKyAgICAgICAgOiBtX3R5cGUoSW52YWxpZCkKKyAgICB7CisgICAgfQorICAgIAorICAgIEdl
dEJ5SWRBY2Nlc3MoCisgICAgICAgIFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgUGFz
c1JlZlB0cjxKSVRTdHViUm91dGluZT4sIFN0cnVjdHVyZSosCisgICAgICAgIGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCkpOwor
ICAgIAorICAgIH5HZXRCeUlkQWNjZXNzKCk7CisgICAgCisgICAgc3RhdGljIEdldEJ5SWRBY2Nl
c3MgZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAgCisgICAg
Ym9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSAhPSBJbnZhbGlkOyB9CisgICAgYm9v
bCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQorICAgIAorICAgIEFjY2Vz
c1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIAorICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7IH0KKyAgICAK
KyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29u
c3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0KKyAgICAKKyAgICBKSVRTdHViUm91dGluZSog
c3R1YlJvdXRpbmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzU2V0KCkpOworICAg
ICAgICByZXR1cm4gbV9zdHViUm91dGluZS5nZXQoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBk
b2VzQ2FsbHMoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gR2V0dGVyIHx8IHR5cGUoKSA9PSBD
dXN0b21HZXR0ZXI7IH0KKyAgICAKKyAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OworCitw
cml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7CisgICAgCisgICAgQWNjZXNzVHlw
ZSBtX3R5cGU7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7CisgICAg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7CisgICAgUmVmUHRyPEpJ
VFN0dWJSb3V0aW5lPiBtX3N0dWJSb3V0aW5lOworfTsKKworY2xhc3MgUG9seW1vcnBoaWNHZXRC
eUlkTGlzdCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgLy8g
RWl0aGVyIGNyZWF0ZXMgYSBuZXcgcG9seW1vcnBoaWMgZ2V0IGxpc3QsIG9yIHJldHVybnMgdGhl
IG9uZSB0aGF0IGlzIGFscmVhZHkgaW4KKyAgICAvLyBwbGFjZS4KKyAgICBzdGF0aWMgUG9seW1v
cnBoaWNHZXRCeUlkTGlzdCogZnJvbShTdHJ1Y3R1cmVTdHViSW5mbyYpOworICAgIAorICAgIH5Q
b2x5bW9ycGhpY0dldEJ5SWRMaXN0KCk7CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IGN1cnJlbnRTbG93UGF0aFRhcmdldChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pIGNvbnN0
OworICAgIAorICAgIHZvaWQgYWRkQWNjZXNzKGNvbnN0IEdldEJ5SWRBY2Nlc3MmKTsKKyAgICAK
KyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2xpc3QuaXNFbXB0eSgpOyB9Cisg
ICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5zaXplKCk7IH0KKyAgICBi
b29sIGlzRnVsbCgpIGNvbnN0OworICAgIGJvb2wgaXNBbG1vc3RGdWxsKCkgY29uc3Q7IC8vIFRy
dWUgaWYgYWRkaW5nIGFuIGVsZW1lbnQgd291bGQgbWFrZSBpc0Z1bGwoKSB0cnVlLgorICAgIGNv
bnN0IEdldEJ5SWRBY2Nlc3MmIGF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdFtp
XTsgfQorICAgIGNvbnN0IEdldEJ5SWRBY2Nlc3MmIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29u
c3QgeyByZXR1cm4gbV9saXN0W2ldOyB9CisgICAgCisgICAgYm9vbCBkaWRTZWxmUGF0Y2hpbmco
KSBjb25zdDsgLy8gQXJlIGFueSBvZiB0aGUgYWNjZXNzZXMgU2ltcGxlSW5saW5lPworICAgIAor
ICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNs
YXNzIENvZGVCbG9jazsKKyAgICAKKyAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KFN0cnVjdHVy
ZVN0dWJJbmZvJik7CisgICAgCisgICAgVmVjdG9yPEdldEJ5SWRBY2Nlc3MsIDI+IG1fbGlzdDsK
K307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKworI2Vu
ZGlmIC8vIFBvbHltb3JwaGljR2V0QnlJZExpc3RfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAkod29ya2luZyBjb3B5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAK
LSNpZm5kZWYgUG9seW1vcnBoaWNHZXRCeUlkTGlzdF9oCi0jZGVmaW5lIFBvbHltb3JwaGljR2V0
QnlJZExpc3RfaAorI2lmbmRlZiBQb2x5bW9ycGhpY0FjY2Vzc19oCisjZGVmaW5lIFBvbHltb3Jw
aGljQWNjZXNzX2gKIAogI2lmIEVOQUJMRShKSVQpCiAKQEAgLTM4LDk2ICszOCwyNjggQEAKIG5h
bWVzcGFjZSBKU0MgewogCiBjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBQb2x5bW9ycGhpY0FjY2Vz
czsKK2NsYXNzIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzsKIHN0cnVjdCBTdHJ1Y3R1
cmVTdHViSW5mbzsKIAotY2xhc3MgR2V0QnlJZEFjY2VzcyB7CitzdHJ1Y3QgQWNjZXNzR2VuZXJh
dGlvblN0YXRlOworCitjbGFzcyBBY2Nlc3NDYXNlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShBY2Nlc3NDYXNlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAg
ICBlbnVtIEFjY2Vzc1R5cGUgewotICAgICAgICBJbnZhbGlkLAotICAgICAgICBTaW1wbGVJbmxp
bmUsIC8vIFRoaXMgaXMgdGhlIHBhdGNoZWQgaW5saW5lIGFjY2Vzcy4KLSAgICAgICAgU2ltcGxl
U3R1YiwgLy8gVGhpcyBpcyBhIHN0dWIuCi0gICAgICAgIFdhdGNoZWRTdHViLAorICAgICAgICBM
b2FkLAorICAgICAgICBUcmFuc2l0aW9uLAorICAgICAgICBSZXBsYWNlLAorICAgICAgICBNaXNz
LAogICAgICAgICBHZXR0ZXIsCisgICAgICAgIFNldHRlciwKICAgICAgICAgQ3VzdG9tR2V0dGVy
LAotICAgICAgICBTaW1wbGVNaXNzLAorICAgICAgICBDdXN0b21TZXR0ZXIsCisgICAgICAgIElu
SGl0LAorICAgICAgICBJbk1pc3MsCisgICAgICAgIEFycmF5TGVuZ3RoLAorICAgICAgICBTdHJp
bmdMZW5ndGgKICAgICB9OwotICAgIAotICAgIEdldEJ5SWRBY2Nlc3MoKQotICAgICAgICA6IG1f
dHlwZShJbnZhbGlkKQorCisgICAgc3RhdGljIGJvb2wgaXNHZXQoQWNjZXNzVHlwZSB0eXBlKQog
ICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgVHJhbnNpdGlvbjoK
KyAgICAgICAgY2FzZSBSZXBsYWNlOgorICAgICAgICBjYXNlIFNldHRlcjoKKyAgICAgICAgY2Fz
ZSBDdXN0b21TZXR0ZXI6CisgICAgICAgIGNhc2UgSW5IaXQ6CisgICAgICAgIGNhc2UgSW5NaXNz
OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIExvYWQ6CisgICAgICAg
IGNhc2UgTWlzczoKKyAgICAgICAgY2FzZSBHZXR0ZXI6CisgICAgICAgIGNhc2UgQ3VzdG9tR2V0
dGVyOgorICAgICAgICBjYXNlIEFycmF5TGVuZ3RoOgorICAgICAgICBjYXNlIFN0cmluZ0xlbmd0
aDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CiAgICAgfQotICAgIAotICAg
IEdldEJ5SWRBY2Nlc3MoCi0gICAgICAgIFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwg
UGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4sIFN0cnVjdHVyZSosCisKKyAgICBzdGF0aWMgYm9v
bCBpc1B1dChBY2Nlc3NUeXBlIHR5cGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsK
KyAgICAgICAgY2FzZSBMb2FkOgorICAgICAgICBjYXNlIE1pc3M6CisgICAgICAgIGNhc2UgR2V0
dGVyOgorICAgICAgICBjYXNlIEN1c3RvbUdldHRlcjoKKyAgICAgICAgY2FzZSBJbkhpdDoKKyAg
ICAgICAgY2FzZSBJbk1pc3M6CisgICAgICAgIGNhc2UgQXJyYXlMZW5ndGg6CisgICAgICAgIGNh
c2UgU3RyaW5nTGVuZ3RoOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNl
IFRyYW5zaXRpb246CisgICAgICAgIGNhc2UgUmVwbGFjZToKKyAgICAgICAgY2FzZSBTZXR0ZXI6
CisgICAgICAgIGNhc2UgQ3VzdG9tU2V0dGVyOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0luKEFjY2Vzc1R5cGUgdHlwZSkK
KyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIExvYWQ6CisgICAg
ICAgIGNhc2UgTWlzczoKKyAgICAgICAgY2FzZSBHZXR0ZXI6CisgICAgICAgIGNhc2UgQ3VzdG9t
R2V0dGVyOgorICAgICAgICBjYXNlIFRyYW5zaXRpb246CisgICAgICAgIGNhc2UgUmVwbGFjZToK
KyAgICAgICAgY2FzZSBTZXR0ZXI6CisgICAgICAgIGNhc2UgQ3VzdG9tU2V0dGVyOgorICAgICAg
ICBjYXNlIEFycmF5TGVuZ3RoOgorICAgICAgICBjYXNlIFN0cmluZ0xlbmd0aDoKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBJbkhpdDoKKyAgICAgICAgY2FzZSBJbk1p
c3M6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0
YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gZ2V0KAorICAgICAgICBWTSYsIEpTQ2Vs
bCogb3duZXIsIEFjY2Vzc1R5cGUsIFByb3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmUqLAorICAgICAg
ICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCgpLAorICAgICAgICBib29sIHZpYVByb3h5ID0gZmFsc2UsCisgICAgICAgIFdhdGNo
cG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQgPSBudWxscHRyLAorICAgICAgICBQcm9wZXJ0eVNsb3Q6
OkdldFZhbHVlRnVuYyA9IG51bGxwdHIpOworCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxB
Y2Nlc3NDYXNlPiByZXBsYWNlKAorICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpOworCisgICAgc3RhdGljIHN0ZDo6
dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiB0cmFuc2l0aW9uKAorICAgICAgICBWTSYsIEpTQ2VsbCog
b3duZXIsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0LAogICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpKTsKKworICAgIHN0YXRpYyBz
dGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gc2V0dGVyKAorICAgICAgICBWTSYsIEpTQ2VsbCog
b3duZXIsIEFjY2Vzc1R5cGUsIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0LAorICAgICAgICBj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIFB1dFByb3BlcnR5U2xvdDo6UHV0VmFs
dWVGdW5jKTsKKworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gaW4oCisg
ICAgICAgIFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiA9IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0KCkpOworCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nl
c3NDYXNlPiBnZXRMZW5ndGgoVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlKTsKICAgICAK
LSAgICB+R2V0QnlJZEFjY2VzcygpOwotICAgIAotICAgIHN0YXRpYyBHZXRCeUlkQWNjZXNzIGZy
b21TdHJ1Y3R1cmVTdHViSW5mbyhTdHJ1Y3R1cmVTdHViSW5mbyYpOworICAgIHN0YXRpYyBzdGQ6
OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFZNJiwgSlNDZWxs
KiBvd25lciwgU3RydWN0dXJlU3R1YkluZm8mKTsKKworICAgIH5BY2Nlc3NDYXNlKCk7CiAgICAg
Ci0gICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSAhPSBJbnZhbGlkOyB9Ci0g
ICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQorICAgIHN0ZDo6
dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBjbG9uZSgpIGNvbnN0OwogICAgIAogICAgIEFjY2Vzc1R5
cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisgICAgYm9vbCB2aWFQcm94eSgpIGNv
bnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT52aWFQcm94eSA6IGZhbHNlOyB9
CiAgICAgCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVj
dHVyZS5nZXQoKTsgfQotICAgIAotICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
JiBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQotICAgIAot
ICAgIEpJVFN0dWJSb3V0aW5lKiBzdHViUm91dGluZSgpIGNvbnN0CisgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fdHlwZSA9PSBUcmFuc2l0aW9u
KQorICAgICAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlLT5wcmV2aW91c0lEKCk7CisgICAgICAg
IHJldHVybiBtX3N0cnVjdHVyZS5nZXQoKTsKKyAgICB9CisgICAgYm9vbCBndWFyZGVkQnlTdHJ1
Y3R1cmVDaGVjaygpIGNvbnN0OworCisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUoKSBjb25z
dAogICAgIHsKLSAgICAgICAgQVNTRVJUKGlzU2V0KCkpOwotICAgICAgICByZXR1cm4gbV9zdHVi
Um91dGluZS5nZXQoKTsKKyAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBUcmFuc2l0aW9uKTsKKyAg
ICAgICAgcmV0dXJuIG1fc3RydWN0dXJlLmdldCgpOwogICAgIH0KICAgICAKLSAgICBib29sIGRv
ZXNDYWxscygpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBHZXR0ZXIgfHwgdHlwZSgpID09IEN1
c3RvbUdldHRlcjsgfQorICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9CisKKyAgICBXYXRjaHBvaW50U2V0
KiBhZGRpdGlvbmFsU2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3JhcmVEYXRh
ID8gbV9yYXJlRGF0YS0+YWRkaXRpb25hbFNldC5nZXQoKSA6IG51bGxwdHI7CisgICAgfQogICAg
IAotICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgY29uc3Q7CisgICAgYm9vbCBkb2VzQ2FsbHMoKSBj
b25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKCkpIHsKKyAgICAgICAgY2FzZSBHZXR0
ZXI6CisgICAgICAgIGNhc2UgU2V0dGVyOgorICAgICAgICBjYXNlIEN1c3RvbUdldHRlcjoKKyAg
ICAgICAgY2FzZSBDdXN0b21TZXR0ZXI6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
IAorICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKCkgY29uc3QKKyAgICB7CisgICAgICAg
IGlmICghbV9yYXJlRGF0YSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBy
ZXR1cm4gbV9yYXJlRGF0YS0+Y2FsbExpbmtJbmZvLmdldCgpOworICAgIH0KKworICAgIC8vIElm
IHRoaXMgbWV0aG9kIHJldHVybnMgdHJ1ZSwgdGhlbiBpdCdzIGEgZ29vZCBpZGVhIHRvIHJlbW92
ZSAnb3RoZXInIGZyb20gdGhlIGFjY2VzcyBvbmNlICd0aGlzJworICAgIC8vIGlzIGFkZGVkLiBU
aGlzIG1ldGhvZCBhc3N1bWVzIHRoYXQgaW4gY2FzZSBvZiBjb250cmFkaWN0aW9ucywgJ3RoaXMn
IHJlcHJlc2VudHMgYSBuZXdlciwgYW5kIHNvCisgICAgLy8gbW9yZSB1c2VmdWwsIHRydXRoLiBU
aGlzIG1ldGhvZCBjYW4gYmUgY29uc2VydmF0aXZlOyBpdCB3aWxsIHJldHVybiBmYWxzZSB3aGVu
IGl0IGRvdWJ0LgorICAgIGJvb2wgY2FuUmVwbGFjZShjb25zdCBBY2Nlc3NDYXNlJiBvdGhlcik7
CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAgCiBwcml2YXRl
OgogICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7CisgICAgZnJpZW5kIGNsYXNzIFBvbHltb3Jw
aGljQWNjZXNzOworCisgICAgQWNjZXNzQ2FzZSgpOworCisgICAgYm9vbCB2aXNpdFdlYWsoVk0m
KSBjb25zdDsKKworICAgIC8vIEZhbGwgdGhyb3VnaCBvbiBzdWNjZXNzLiBUd28ga2luZHMgb2Yg
ZmFpbHVyZXMgYXJlIHN1cHBvcnRlZDogZmFsbC10aHJvdWdoLCB3aGljaCBtZWFucyB0aGF0IHdl
CisgICAgLy8gc2hvdWxkIHRyeSBhIGRpZmZlcmVudCBjYXNlOyBhbmQgZmFpbHVyZSwgd2hpY2gg
bWVhbnMgdGhhdCB0aGlzIHdhcyB0aGUgcmlnaHQgY2FzZSBidXQgaXQgbmVlZHMKKyAgICAvLyBo
ZWxwIGZyb20gdGhlIHNsb3cgcGF0aC4KKyAgICB2b2lkIGdlbmVyYXRlV2l0aEd1YXJkKEFjY2Vz
c0dlbmVyYXRpb25TdGF0ZSYsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFsbFRocm91Z2gp
OworCisgICAgLy8gRmFsbCB0aHJvdWdoIG9uIHN1Y2Nlc3MsIGFkZCBhIGp1bXAgdG8gdGhlIGZh
aWx1cmUgbGlzdCBvbiBmYWlsdXJlLgorICAgIHZvaWQgZ2VuZXJhdGUoQWNjZXNzR2VuZXJhdGlv
blN0YXRlJik7CiAgICAgCiAgICAgQWNjZXNzVHlwZSBtX3R5cGU7CisgICAgUHJvcGVydHlPZmZz
ZXQgbV9vZmZzZXQ7CisKKyAgICAvLyBVc3VhbGx5IHRoaXMgaXMgdGhlIHN0cnVjdHVyZSB0aGF0
IHdlIGV4cGVjdCB0aGUgYmFzZSBvYmplY3QgdG8gaGF2ZS4gQnV0LCB0aGlzIGlzIHRoZSAqbmV3
KgorICAgIC8vIHN0cnVjdHVyZSBmb3IgYSB0cmFuc2l0aW9uIGFuZCB3ZSByZWx5IG9uIHRoZSBm
YWN0IHRoYXQgaXQgaGFzIGEgc3Ryb25nIHJlZmVyZW5jZSB0byB0aGUgb2xkCisgICAgLy8gc3Ry
dWN0dXJlLiBGb3IgcHJveGllcywgdGhpcyBpcyB0aGUgc3RydWN0dXJlIG9mIHRoZSBvYmplY3Qg
YmVoaW5kIHRoZSBwcm94eS4KICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cnVjdHVy
ZTsKKwogICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OwotICAg
IFJlZlB0cjxKSVRTdHViUm91dGluZT4gbV9zdHViUm91dGluZTsKKworICAgIGNsYXNzIFJhcmVE
YXRhIHsKKyAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgcHVibGljOgorICAg
ICAgICBib29sIHZpYVByb3h5OworICAgICAgICBSZWZQdHI8V2F0Y2hwb2ludFNldD4gYWRkaXRp
b25hbFNldDsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rSW5mbz4gY2FsbExpbmtJ
bmZvOworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVl
RnVuYyBnZXR0ZXI7CisgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyBz
ZXR0ZXI7CisgICAgICAgICAgICB2b2lkKiBvcGFxdWU7CisgICAgICAgIH0gY3VzdG9tQWNjZXNz
b3I7CisgICAgfTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxSYXJlRGF0YT4gbV9yYXJlRGF0YTsK
IH07CiAKLWNsYXNzIFBvbHltb3JwaGljR2V0QnlJZExpc3QgeworY2xhc3MgUG9seW1vcnBoaWNB
Y2Nlc3MgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBvbHltb3JwaGljQWNjZXNzKTsKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICAvLyBFaXRoZXIgY3JlYXRl
cyBhIG5ldyBwb2x5bW9ycGhpYyBnZXQgbGlzdCwgb3IgcmV0dXJucyB0aGUgb25lIHRoYXQgaXMg
YWxyZWFkeSBpbgotICAgIC8vIHBsYWNlLgotICAgIHN0YXRpYyBQb2x5bW9ycGhpY0dldEJ5SWRM
aXN0KiBmcm9tKFN0cnVjdHVyZVN0dWJJbmZvJik7Ci0gICAgCi0gICAgflBvbHltb3JwaGljR2V0
QnlJZExpc3QoKTsKLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY3VycmVudFNsb3dQ
YXRoVGFyZ2V0KFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykgY29uc3Q7Ci0gICAgCi0gICAg
dm9pZCBhZGRBY2Nlc3MoY29uc3QgR2V0QnlJZEFjY2VzcyYpOworICAgIFBvbHltb3JwaGljQWNj
ZXNzKCk7CisgICAgflBvbHltb3JwaGljQWNjZXNzKCk7CisKKyAgICAvLyBUaGlzIG1heSByZXR1
cm4gbnVsbCwgaW4gd2hpY2ggY2FzZSB0aGUgb2xkIHN0dWIgcm91dGluZSBpcyBsZWZ0IGludGFj
dC4gVGhpcyBtZXRob2Qgd2lsbCBkbyB5b3UKKyAgICAvLyBhIHNvbGlkIGFuZCBudWxsLWNoZWNr
IHRoZSBBY2Nlc3NDYXNlLCBzbyB0aGF0IHlvdSBjYW4gZG8gdGhpbmdzIGxpa2U6CisgICAgLy8K
KyAgICAvLyBjb2RlUHRyID0gYWNjZXNzLT5yZWdlbmVyYXRlV2l0aENhc2UoLi4uLCBBY2Nlc3ND
YXNlOjpnZXQoLi4uKSkKKyAgICAvLworICAgIC8vIElmIEFjY2Vzc0Nhc2U6OmdldCgpIHJldHVy
bnMgbnVsbHB0ciwgdGhlIGFib3ZlIGNhbGwgd2lsbCBzaW1wbHkgcmV0dXJuIG51bGwuCisgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJlZ2VuZXJhdGVXaXRoQ2FzZXMoCisgICAgICAgIFZNJiwg
Q29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBjb25zdCBJZGVudGlmaWVyJiwgVmVjdG9y
PHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPj4pOworCisgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIHJlZ2VuZXJhdGVXaXRoQ2FzZSgKKyAgICAgICAgVk0mLCBDb2RlQmxvY2sqLCBTdHJ1Y3R1
cmVTdHViSW5mbyYsIGNvbnN0IElkZW50aWZpZXImLCBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2Fz
ZT4pOwogICAgIAogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5pc0Vt
cHR5KCk7IH0KICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9saXN0LnNpemUo
KTsgfQotICAgIGJvb2wgaXNGdWxsKCkgY29uc3Q7Ci0gICAgYm9vbCBpc0FsbW9zdEZ1bGwoKSBj
b25zdDsgLy8gVHJ1ZSBpZiBhZGRpbmcgYW4gZWxlbWVudCB3b3VsZCBtYWtlIGlzRnVsbCgpIHRy
dWUuCi0gICAgY29uc3QgR2V0QnlJZEFjY2VzcyYgYXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1
cm4gbV9saXN0W2ldOyB9Ci0gICAgY29uc3QgR2V0QnlJZEFjY2VzcyYgb3BlcmF0b3JbXSh1bnNp
Z25lZCBpKSBjb25zdCB7IHJldHVybiBtX2xpc3RbaV07IH0KLSAgICAKLSAgICBib29sIGRpZFNl
bGZQYXRjaGluZygpIGNvbnN0OyAvLyBBcmUgYW55IG9mIHRoZSBhY2Nlc3NlcyBTaW1wbGVJbmxp
bmU/Ci0gICAgCisgICAgY29uc3QgQWNjZXNzQ2FzZSYgYXQodW5zaWduZWQgaSkgY29uc3QgeyBy
ZXR1cm4gKm1fbGlzdFtpXTsgfQorICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIG9wZXJhdG9yW10odW5z
aWduZWQgaSkgY29uc3QgeyByZXR1cm4gKm1fbGlzdFtpXTsgfQorCisgICAgLy8gSWYgdGhpcyBy
ZXR1cm5zIGZhbHNlIHRoZW4gd2UgYXJlIHJlcXVlc3RpbmcgYSByZXNldCBvZiB0aGUgb3duaW5n
IFN0cnVjdHVyZVN0dWJJbmZvLgogICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgY29uc3Q7CiAKKyAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisKIHByaXZhdGU6CisgICAgZnJp
ZW5kIGNsYXNzIEFjY2Vzc0Nhc2U7CiAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKKyAgICBm
cmllbmQgc3RydWN0IEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTsKICAgICAKLSAgICBQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0KFN0cnVjdHVyZVN0dWJJbmZvJik7Ci0gICAgCi0gICAgVmVjdG9yPEdldEJ5
SWRBY2Nlc3MsIDI+IG1fbGlzdDsKKyAgICB0eXBlZGVmIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8
QWNjZXNzQ2FzZT4sIDI+IExpc3RUeXBlOworCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJl
Z2VuZXJhdGUoCisgICAgICAgIFZNJiwgQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBj
b25zdCBJZGVudGlmaWVyJiwgTGlzdFR5cGUmIGNhc2VzKTsKKworICAgIExpc3RUeXBlIG1fbGlz
dDsKKyAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IG1fc3R1YlJvdXRpbmU7CisgICAgc3RkOjp1
bmlxdWVfcHRyPFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbz4gbV93YXRjaHBvaW50czsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBlKTsKKwor
fSAvLyBuYW1lc3BhY2UgV1RGCisKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCi0jZW5kaWYgLy8g
UG9seW1vcnBoaWNHZXRCeUlkTGlzdF9oCisjZW5kaWYgLy8gUG9seW1vcnBoaWNBY2Nlc3NfaAog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3NT
dHJ1Y3R1cmVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdC5oCShyZXZpc2lvbiAxODk1MTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1
cmVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTEyICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBQb2x5bW9ycGhpY0FjY2Vz
c1N0cnVjdHVyZUxpc3RfaAotI2RlZmluZSBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3Rf
aAotCi0jaW5jbHVkZSAiSklUU3R1YlJvdXRpbmUuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIK
LSNpbmNsdWRlICJTdHJ1Y3R1cmVDaGFpbi5oIgotCi0jZGVmaW5lIFBPTFlNT1JQSElDX0xJU1Rf
Q0FDSEVfU0laRSA4Ci0KLW5hbWVzcGFjZSBKU0MgewotCi0vLyAqU2lnaCosIElmIHRoZSBKSVQg
aXMgZW5hYmxlZCB3ZSBuZWVkIHRvIHRyYWNrIHRoZSBzdHViUm91bnRpbmUgKG9mIHR5cGUgQ29k
ZUxvY2F0aW9uTGFiZWwpLAotLy8gSWYgdGhlIEpJVCBpcyBub3QgaW4gdXNlIHdlIGRvbid0IGFj
dHVhbGx5IG5lZWQgdGhlIHZhcmlhYmxlICh0aGF0IHNhaWQsIGlmIHRoZSBKSVQgaXMgbm90IGlu
IHVzZSB3ZSBkb24ndAotLy8gY3VyZW50bHkgYWN0dWFsbHkgdXNlIFBvbHltb3JwaGljQWNjZXNz
U3RydWN0dXJlTGlzdHMsIHdoaWNoIHdlIHNob3VsZCkuICBBbnl3YXksIHRoaXMgc2VlbXMgbGlr
ZSB0aGUgYmVzdAotLy8gc29sdXRpb24gZm9yIG5vdyAtIHdpbGwgbmVlZCB0byBzb21ldGhpbmcg
c21hcnRlciBpZi93aGVuIHdlIGFjdHVhbGx5IHdhbnQgbWl4ZWQtbW9kZSBvcGVyYXRpb24uCi0K
LSNpZiBFTkFCTEUoSklUKQotLy8gU3RydWN0dXJlIHVzZWQgYnkgb3BfZ2V0X2J5X2lkX3NlbGZf
bGlzdCBhbmQgb3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3QgaW5zdHJ1Y3Rpb24gdG8gaG9sZCBkYXRh
IG9mZiB0aGUgbWFpbiBvcGNvZGUgc3RyZWFtLgotc3RydWN0IFBvbHltb3JwaGljQWNjZXNzU3Ry
dWN0dXJlTGlzdCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAg
c3RydWN0IFBvbHltb3JwaGljU3R1YkluZm8gewotICAgICAgICBib29sIGlzRGlyZWN0IDogMTsK
LSAgICAgICAgdW5zaWduZWQgY291bnQgOiAzMTsKLSAgICAgICAgUmVmUHRyPEpJVFN0dWJSb3V0
aW5lPiBzdHViUm91dGluZTsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gYmFzZTsK
LSAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZUNoYWluPiBjaGFpbjsKLQotICAgICAgICBQ
b2x5bW9ycGhpY1N0dWJJbmZvKCkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgdm9p
ZCBzZXQoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBf
c3R1YlJvdXRpbmUsIFN0cnVjdHVyZSogX2Jhc2UsIGJvb2wgX2lzRGlyZWN0KQotICAgICAgICB7
Ci0gICAgICAgICAgICBzdHViUm91dGluZSA9IF9zdHViUm91dGluZTsKLSAgICAgICAgICAgIGJh
c2Uuc2V0KHZtLCBvd25lciwgX2Jhc2UpOwotICAgICAgICAgICAgaXNEaXJlY3QgPSBfaXNEaXJl
Y3Q7Ci0gICAgICAgICAgICBjb3VudCA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IHZvaWQgc2V0KFZNJiB2bSwgSlNDZWxsKiBvd25lciwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGlu
ZT4gX3N0dWJSb3V0aW5lLCBTdHJ1Y3R1cmUqIF9iYXNlLCBTdHJ1Y3R1cmVDaGFpbiogX2NoYWlu
LCBib29sIF9pc0RpcmVjdCwgdW5zaWduZWQgX2NvdW50KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBzdHViUm91dGluZSA9IF9zdHViUm91dGluZTsKLSAgICAgICAgICAgIGJhc2Uuc2V0KHZtLCBv
d25lciwgX2Jhc2UpOwotICAgICAgICAgICAgY2hhaW4uc2V0KHZtLCBvd25lciwgX2NoYWluKTsK
LSAgICAgICAgICAgIGlzRGlyZWN0ID0gX2lzRGlyZWN0OwotICAgICAgICAgICAgY291bnQgPSBf
Y291bnQ7Ci0gICAgICAgIH0KLSAgICB9IGxpc3RbUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpF
XTsKLSAgICAKLSAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoKQotICAgIHsKLSAg
ICB9Ci0gICAgCi0gICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KFZNJiB2bSwgSlND
ZWxsKiBvd25lciwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUsIFN0cnVj
dHVyZSogZmlyc3RCYXNlLCBib29sIGlzRGlyZWN0KQotICAgIHsKLSAgICAgICAgbGlzdFswXS5z
ZXQodm0sIG93bmVyLCBzdHViUm91dGluZSwgZmlyc3RCYXNlLCBpc0RpcmVjdCk7Ci0gICAgfQot
Ci0gICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KFZNJiB2bSwgSlNDZWxsKiBvd25l
ciwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUsIFN0cnVjdHVyZSogZmly
c3RCYXNlLCBTdHJ1Y3R1cmVDaGFpbiogZmlyc3RDaGFpbiwgYm9vbCBpc0RpcmVjdCwgdW5zaWdu
ZWQgY291bnQpCi0gICAgewotICAgICAgICBsaXN0WzBdLnNldCh2bSwgb3duZXIsIHN0dWJSb3V0
aW5lLCBmaXJzdEJhc2UsIGZpcnN0Q2hhaW4sIGlzRGlyZWN0LCBjb3VudCk7Ci0gICAgfQotCi0g
ICAgYm9vbCB2aXNpdFdlYWsoaW50IGNvdW50KQotICAgIHsKLSAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBQb2x5bW9ycGhpY1N0dWJJbmZvJiBp
bmZvID0gbGlzdFtpXTsKLSAgICAgICAgICAgIGlmICghaW5mby5iYXNlKQotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFIZWFwOjpp
c01hcmtlZChpbmZvLmJhc2UuZ2V0KCkpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIGlmIChpbmZvLmNoYWluICYmICFIZWFwOjppc01hcmtlZChpbmZvLmNoYWlu
LmdldCgpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAg
ICAgICAgIAotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci19OwotCi0jZW5kaWYgLy8gRU5B
QkxFKEpJVCkKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBQb2x5bW9ycGhpY0Fj
Y2Vzc1N0cnVjdHVyZUxpc3RfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwCShyZXZpc2lvbiAx
ODk1MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRC
eUlkTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTU1ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIlBvbHltb3JwaGljR2V0QnlJZExpc3QuaCIKLQotI2lmIEVOQUJMRShK
SVQpCi0KLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRlICJIZWFwLmgiCi0jaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCi0KLW5hbWVz
cGFjZSBKU0MgewotCi1HZXRCeUlkQWNjZXNzOjpHZXRCeUlkQWNjZXNzKAotICAgIFZNJiB2bSwg
SlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5l
PiBzdHViUm91dGluZSwKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkKLSAgICA6IG1fdHlwZSh0eXBlKQotICAg
ICwgbV9zdHJ1Y3R1cmUodm0sIG93bmVyLCBzdHJ1Y3R1cmUpCi0gICAgLCBtX2NvbmRpdGlvblNl
dChjb25kaXRpb25TZXQpCi0gICAgLCBtX3N0dWJSb3V0aW5lKHN0dWJSb3V0aW5lKQotewotfQot
Ci1HZXRCeUlkQWNjZXNzOjp+R2V0QnlJZEFjY2VzcygpCi17Ci19Ci0KLUdldEJ5SWRBY2Nlc3Mg
R2V0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbykKLXsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgaW5pdGlhbFNsb3dQYXRoID0K
LSAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1Yklu
Zm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSk7Ci0gICAgCi0gICAgR2V0QnlJZEFjY2VzcyBy
ZXN1bHQ7Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBh
Y2Nlc3NfZ2V0X2J5X2lkX3NlbGYpOwotICAgIAotICAgIHJlc3VsdC5tX3R5cGUgPSBTaW1wbGVJ
bmxpbmU7Ci0gICAgcmVzdWx0Lm1fc3RydWN0dXJlLmNvcHlGcm9tKHN0dWJJbmZvLnUuZ2V0QnlJ
ZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZSk7Ci0gICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBK
SVRTdHViUm91dGluZTo6Y3JlYXRlU2VsZk1hbmFnZWRSb3V0aW5lKGluaXRpYWxTbG93UGF0aCk7
Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBHZXRCeUlkQWNjZXNzOjp2aXNp
dFdlYWsoVk0mIHZtKSBjb25zdAotewotICAgIGlmIChtX3N0cnVjdHVyZSAmJiAhSGVhcDo6aXNN
YXJrZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYg
KCFtX2NvbmRpdGlvblNldC5hcmVTdGlsbExpdmUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGlmICghbV9zdHViUm91dGluZS0+dmlzaXRXZWFrKHZtKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpQb2x5
bW9ycGhpY0dldEJ5SWRMaXN0KFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBp
ZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpCi0gICAgICAgIHJldHVybjsK
LSAgICAKLSAgICBtX2xpc3QuYXBwZW5kKEdldEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1cmVTdHVi
SW5mbyhzdHViSW5mbykpOwotfQotCi1Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0Ojpmcm9tKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBp
ZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3QpCi0gICAgICAg
IHJldHVybiBzdHViSW5mby51LmdldEJ5SWRMaXN0Lmxpc3Q7Ci0gICAgCi0gICAgQVNTRVJUKAot
ICAgICAgICBzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZgotICAg
ICAgICB8fCBzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc191bnNldCk7Ci0gICAgCi0gICAg
UG9seW1vcnBoaWNHZXRCeUlkTGlzdCogcmVzdWx0ID0gbmV3IFBvbHltb3JwaGljR2V0QnlJZExp
c3Qoc3R1YkluZm8pOwotICAgIAotICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkTGlzdChyZXN1bHQp
OwotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVBvbHltb3JwaGljR2V0QnlJZExpc3Q6
On5Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0KCkgeyB9Ci0KLU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBQ
b2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpjdXJyZW50U2xvd1BhdGhUYXJnZXQoCi0gICAgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvKSBjb25zdAotewotICAgIGlmIChpc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybiBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHVi
SW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKLSAgICByZXR1cm4gbV9saXN0Lmxhc3Qo
KS5zdHViUm91dGluZSgpLT5jb2RlKCkuY29kZSgpOwotfQotCi12b2lkIFBvbHltb3JwaGljR2V0
QnlJZExpc3Q6OmFkZEFjY2Vzcyhjb25zdCBHZXRCeUlkQWNjZXNzJiBhY2Nlc3MpCi17Ci0gICAg
QVNTRVJUKCFpc0Z1bGwoKSk7Ci0gICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHJlc2l6aW5nIG9w
dGltaXplcyBmb3Igc3BhY2UsIG5vdCB0aW1lLgotICAgIG1fbGlzdC5yZXNpemVUb0ZpdChtX2xp
c3Quc2l6ZSgpICsgMSk7Ci0gICAgbV9saXN0Lmxhc3QoKSA9IGFjY2VzczsKLX0KLQotYm9vbCBQ
b2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojppc0Z1bGwoKSBjb25zdAotewotICAgIEFTU0VSVChzaXpl
KCkgPD0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKTsKLSAgICByZXR1cm4gc2l6ZSgpID09
IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRTsKLX0KLQotYm9vbCBQb2x5bW9ycGhpY0dldEJ5
SWRMaXN0Ojppc0FsbW9zdEZ1bGwoKSBjb25zdAotewotICAgIEFTU0VSVChzaXplKCkgPD0gUE9M
WU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKTsKLSAgICByZXR1cm4gc2l6ZSgpID49IFBPTFlNT1JQ
SElDX0xJU1RfQ0FDSEVfU0laRSAtIDE7Ci19Ci0KLWJvb2wgUG9seW1vcnBoaWNHZXRCeUlkTGlz
dDo6ZGlkU2VsZlBhdGNoaW5nKCkgY29uc3QKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXpl
KCk7IGktLTspIHsKLSAgICAgICAgaWYgKGF0KGkpLnR5cGUoKSA9PSBHZXRCeUlkQWNjZXNzOjpT
aW1wbGVJbmxpbmUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1ib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OnZpc2l0V2VhayhWTSYg
dm0pIGNvbnN0Ci17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gc2l6ZSgpOyBpLS07KSB7Ci0gICAg
ICAgIGlmICghYXQoaSkudmlzaXRXZWFrKHZtKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5k
aWYgLy8gRU5BQkxFKEpJVCkKLQotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgJKHJldmlzaW9uIDE4OTUx
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRM
aXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBQb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0X2gKLSNkZWZpbmUgUG9seW1vcnBoaWNHZXRCeUlkTGlzdF9oCi0KLSNpZiBFTkFC
TEUoSklUKQotCi0jaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgotI2luY2x1ZGUgIk1hY3JvQXNzZW1i
bGVyLmgiCi0jaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIKLSNpbmNsdWRl
ICJPcGNvZGUuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKLSNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBDb2RlQmxvY2s7Ci1zdHJ1Y3QgU3RydWN0
dXJlU3R1YkluZm87Ci0KLWNsYXNzIEdldEJ5SWRBY2Nlc3MgewotcHVibGljOgotICAgIGVudW0g
QWNjZXNzVHlwZSB7Ci0gICAgICAgIEludmFsaWQsCi0gICAgICAgIFNpbXBsZUlubGluZSwgLy8g
VGhpcyBpcyB0aGUgcGF0Y2hlZCBpbmxpbmUgYWNjZXNzLgotICAgICAgICBTaW1wbGVTdHViLCAv
LyBUaGlzIGlzIGEgc3R1Yi4KLSAgICAgICAgV2F0Y2hlZFN0dWIsCi0gICAgICAgIEdldHRlciwK
LSAgICAgICAgQ3VzdG9tR2V0dGVyLAotICAgICAgICBTaW1wbGVNaXNzLAotICAgIH07Ci0gICAg
Ci0gICAgR2V0QnlJZEFjY2VzcygpCi0gICAgICAgIDogbV90eXBlKEludmFsaWQpCi0gICAgewot
ICAgIH0KLSAgICAKLSAgICBHZXRCeUlkQWNjZXNzKAotICAgICAgICBWTSYsIEpTQ2VsbCogb3du
ZXIsIEFjY2Vzc1R5cGUsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+LCBTdHJ1Y3R1cmUqLAot
ICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCgpKTsKLSAgICAKLSAgICB+R2V0QnlJZEFjY2VzcygpOwotICAgIAotICAg
IHN0YXRpYyBHZXRCeUlkQWNjZXNzIGZyb21TdHJ1Y3R1cmVTdHViSW5mbyhTdHJ1Y3R1cmVTdHVi
SW5mbyYpOwotICAgIAotICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgIT0g
SW52YWxpZDsgfQotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7
IH0KLSAgICAKLSAgICBBY2Nlc3NUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0K
LSAgICAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0
dXJlLmdldCgpOyB9Ci0gICAgCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQm
IGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9Ci0gICAgCi0g
ICAgSklUU3R1YlJvdXRpbmUqIHN0dWJSb3V0aW5lKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFT
U0VSVChpc1NldCgpKTsKLSAgICAgICAgcmV0dXJuIG1fc3R1YlJvdXRpbmUuZ2V0KCk7Ci0gICAg
fQotICAgIAotICAgIGJvb2wgZG9lc0NhbGxzKCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09IEdl
dHRlciB8fCB0eXBlKCkgPT0gQ3VzdG9tR2V0dGVyOyB9Ci0gICAgCi0gICAgYm9vbCB2aXNpdFdl
YWsoVk0mKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOwot
ICAgIAotICAgIEFjY2Vzc1R5cGUgbV90eXBlOwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+
IG1fc3RydWN0dXJlOwotICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9u
U2V0OwotICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gbV9zdHViUm91dGluZTsKLX07Ci0KLWNs
YXNzIFBvbHltb3JwaGljR2V0QnlJZExpc3QgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwotcHVibGljOgotICAgIC8vIEVpdGhlciBjcmVhdGVzIGEgbmV3IHBvbHltb3JwaGljIGdldCBs
aXN0LCBvciByZXR1cm5zIHRoZSBvbmUgdGhhdCBpcyBhbHJlYWR5IGluCi0gICAgLy8gcGxhY2Uu
Ci0gICAgc3RhdGljIFBvbHltb3JwaGljR2V0QnlJZExpc3QqIGZyb20oU3RydWN0dXJlU3R1Yklu
Zm8mKTsKLSAgICAKLSAgICB+UG9seW1vcnBoaWNHZXRCeUlkTGlzdCgpOwotICAgIAotICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciBjdXJyZW50U2xvd1BhdGhUYXJnZXQoU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvKSBjb25zdDsKLSAgICAKLSAgICB2b2lkIGFkZEFjY2Vzcyhjb25zdCBHZXRC
eUlkQWNjZXNzJik7Ci0gICAgCi0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9s
aXN0LmlzRW1wdHkoKTsgfQotICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2xp
c3Quc2l6ZSgpOyB9Ci0gICAgYm9vbCBpc0Z1bGwoKSBjb25zdDsKLSAgICBib29sIGlzQWxtb3N0
RnVsbCgpIGNvbnN0OyAvLyBUcnVlIGlmIGFkZGluZyBhbiBlbGVtZW50IHdvdWxkIG1ha2UgaXNG
dWxsKCkgdHJ1ZS4KLSAgICBjb25zdCBHZXRCeUlkQWNjZXNzJiBhdCh1bnNpZ25lZCBpKSBjb25z
dCB7IHJldHVybiBtX2xpc3RbaV07IH0KLSAgICBjb25zdCBHZXRCeUlkQWNjZXNzJiBvcGVyYXRv
cltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdFtpXTsgfQotICAgIAotICAgIGJv
b2wgZGlkU2VsZlBhdGNoaW5nKCkgY29uc3Q7IC8vIEFyZSBhbnkgb2YgdGhlIGFjY2Vzc2VzIFNp
bXBsZUlubGluZT8KLSAgICAKLSAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OwotCi1wcml2
YXRlOgotICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7Ci0gICAgCi0gICAgUG9seW1vcnBoaWNH
ZXRCeUlkTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyYpOwotICAgIAotICAgIFZlY3RvcjxHZXRCeUlk
QWNjZXNzLCAyPiBtX2xpc3Q7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8v
IEVOQUJMRShKSVQpCi0KLSNlbmRpZiAvLyBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0X2gKLQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9y
cGhpY1B1dEJ5SWRMaXN0LmNwcAkocmV2aXNpb24gMTg5NTE1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDE1NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0LCAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQb2x5
bW9ycGhpY1B1dEJ5SWRMaXN0LmgiCi0KLSNpZiBFTkFCTEUoSklUKQotCi0jaW5jbHVkZSAiU3Ry
dWN0dXJlU3R1YkluZm8uaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLVB1dEJ5SWRBY2Nlc3MgUHV0
QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbykKLXsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgaW5pdGlhbFNsb3dQYXRoID0KLSAg
ICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8u
cGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSk7Ci0gICAgCi0gICAgUHV0QnlJZEFjY2VzcyByZXN1
bHQ7Ci0gICAgCi0gICAgc3dpdGNoIChzdHViSW5mby5hY2Nlc3NUeXBlKSB7Ci0gICAgY2FzZSBh
Y2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2U6Ci0gICAgICAgIHJlc3VsdC5tX3R5cGUgPSBSZXBsYWNl
OwotICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuY29weUZyb20oc3R1YkluZm8udS5wdXRC
eUlkUmVwbGFjZS5iYXNlT2JqZWN0U3RydWN0dXJlKTsKLSAgICAgICAgcmVzdWx0Lm1fc3R1YlJv
dXRpbmUgPSBKSVRTdHViUm91dGluZTo6Y3JlYXRlU2VsZk1hbmFnZWRSb3V0aW5lKGluaXRpYWxT
bG93UGF0aCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAKLSAgICBjYXNlIGFjY2Vzc19wdXRf
YnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6Ci0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5z
aXRpb25fbm9ybWFsOgotICAgICAgICByZXN1bHQubV90eXBlID0gVHJhbnNpdGlvbjsKLSAgICAg
ICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlLmNvcHlGcm9tKHN0dWJJbmZvLnUucHV0QnlJZFRyYW5z
aXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUpOwotICAgICAgICByZXN1bHQubV9uZXdTdHJ1Y3R1cmUu
Y29weUZyb20oc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUpOwotICAgICAg
ICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6YWRv
cHRSYXdQb2ludGVyKAotICAgICAgICAgICAgc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5y
YXdDb25kaXRpb25TZXQpOwotICAgICAgICByZXN1bHQubV9zdHViUm91dGluZSA9IHN0dWJJbmZv
LnN0dWJSb3V0aW5lOwotICAgICAgICBicmVhazsKLSAgICAgICAgCi0gICAgZGVmYXVsdDoKLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBQdXRCeUlkQWNjZXNzOjp2aXNpdFdlYWsoVk0mIHZtKSBj
b25zdAotewotICAgIGlmICghbV9jb25kaXRpb25TZXQuYXJlU3RpbGxMaXZlKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgIGNhc2UgUmVw
bGFjZToKLSAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX29sZFN0cnVjdHVyZS5nZXQoKSkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVHJh
bnNpdGlvbjoKLSAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX29sZFN0cnVjdHVyZS5nZXQo
KSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghSGVhcDo6aXNNYXJr
ZWQobV9uZXdTdHJ1Y3R1cmUuZ2V0KCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIFNldHRlcjoKLSAgICBjYXNlIEN1c3RvbVNldHRlcjoKLSAg
ICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX29sZFN0cnVjdHVyZS5nZXQoKSkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gICAgaWYgKCFtX3N0dWJSb3V0aW5lLT52aXNpdFdlYWsodm0pKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVBvbHltb3JwaGljUHV0QnlJZExpc3Q6
OlBvbHltb3JwaGljUHV0QnlJZExpc3QoCi0gICAgUHV0S2luZCBwdXRLaW5kLCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8pCi0gICAgOiBtX2tpbmQocHV0S2luZCkKLXsKLSAgICBpZiAoc3R1
YkluZm8uYWNjZXNzVHlwZSAhPSBhY2Nlc3NfdW5zZXQpCi0gICAgICAgIG1fbGlzdC5hcHBlbmQo
UHV0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKHN0dWJJbmZvKSk7Ci19Ci0KLVBv
bHltb3JwaGljUHV0QnlJZExpc3QqIFBvbHltb3JwaGljUHV0QnlJZExpc3Q6OmZyb20oCi0gICAg
UHV0S2luZCBwdXRLaW5kLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAgaWYg
KHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3B1dF9ieV9pZF9saXN0KQotICAgICAgICBy
ZXR1cm4gc3R1YkluZm8udS5wdXRCeUlkTGlzdC5saXN0OwotICAgIAotICAgIEFTU0VSVChzdHVi
SW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFjZQotICAgICAgICB8fCBz
dHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWwK
LSAgICAgICAgfHwgc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5z
aXRpb25fZGlyZWN0Ci0gICAgICAgIHx8IHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vu
c2V0KTsKLSAgICAKLSAgICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiByZXN1bHQgPQotICAgICAg
ICBuZXcgUG9seW1vcnBoaWNQdXRCeUlkTGlzdChwdXRLaW5kLCBzdHViSW5mbyk7Ci0gICAgCi0g
ICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRMaXN0KHJlc3VsdCk7Ci0gICAgCi0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6flBvbHltb3JwaGljUHV0QnlJZExp
c3QoKSB7IH0KLQotYm9vbCBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojppc0Z1bGwoKSBjb25zdAot
ewotICAgIEFTU0VSVChzaXplKCkgPD0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKTsKLSAg
ICByZXR1cm4gc2l6ZSgpID09IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRTsKLX0KLQotYm9v
bCBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojppc0FsbW9zdEZ1bGwoKSBjb25zdAotewotICAgIEFT
U0VSVChzaXplKCkgPD0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKTsKLSAgICByZXR1cm4g
c2l6ZSgpID49IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDE7Ci19Ci0KLXZvaWQgUG9s
eW1vcnBoaWNQdXRCeUlkTGlzdDo6YWRkQWNjZXNzKGNvbnN0IFB1dEJ5SWRBY2Nlc3MmIHB1dEJ5
SWRBY2Nlc3MpCi17Ci0gICAgQVNTRVJUKCFpc0Z1bGwoKSk7Ci0gICAgLy8gTWFrZSBzdXJlIHRo
YXQgdGhlIHJlc2l6aW5nIG9wdGltaXplcyBmb3Igc3BhY2UsIG5vdCB0aW1lLgotICAgIG1fbGlz
dC5yZXNpemVUb0ZpdChtX2xpc3Quc2l6ZSgpICsgMSk7Ci0gICAgbV9saXN0Lmxhc3QoKSA9IHB1
dEJ5SWRBY2Nlc3M7Ci19Ci0KLWJvb2wgUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6dmlzaXRXZWFr
KFZNJiB2bSkgY29uc3QKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgaWYgKCFhdChpKS52aXNpdFdlYWsodm0pKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
SlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oCShyZXZpc2lv
biAxODk1MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQ
dXRCeUlkTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIxNiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyLCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYg
UG9seW1vcnBoaWNQdXRCeUlkTGlzdF9oCi0jZGVmaW5lIFBvbHltb3JwaGljUHV0QnlJZExpc3Rf
aAotCi0jaWYgRU5BQkxFKEpJVCkKLQotI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKLSNpbmNsdWRl
ICJNYWNyb0Fzc2VtYmxlci5oIgotI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
LmgiCi0jaW5jbHVkZSAiT3Bjb2RlLmgiCi0jaW5jbHVkZSAiUHV0S2luZC5oIgotI2luY2x1ZGUg
IlB1dFByb3BlcnR5U2xvdC5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgotI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENvZGVCbG9jazsKLXN0cnVj
dCBTdHJ1Y3R1cmVTdHViSW5mbzsKLQotY2xhc3MgUHV0QnlJZEFjY2VzcyB7Ci1wdWJsaWM6Ci0g
ICAgZW51bSBBY2Nlc3NUeXBlIHsKLSAgICAgICAgSW52YWxpZCwKLSAgICAgICAgVHJhbnNpdGlv
biwKLSAgICAgICAgUmVwbGFjZSwKLSAgICAgICAgU2V0dGVyLAotICAgICAgICBDdXN0b21TZXR0
ZXIKLSAgICB9OwotICAgIAotICAgIFB1dEJ5SWRBY2Nlc3MoKQotICAgICAgICA6IG1fdHlwZShJ
bnZhbGlkKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIFB1dEJ5SWRBY2Nlc3MgdHJh
bnNpdGlvbigKLSAgICAgICAgVk0mIHZtLAotICAgICAgICBKU0NlbGwqIG93bmVyLAotICAgICAg
ICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwKLSAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1
cmUsCi0gICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25T
ZXQsCi0gICAgICAgIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lKQotICAg
IHsKLSAgICAgICAgUHV0QnlJZEFjY2VzcyByZXN1bHQ7Ci0gICAgICAgIHJlc3VsdC5tX3R5cGUg
PSBUcmFuc2l0aW9uOwotICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuc2V0KHZtLCBvd25l
ciwgb2xkU3RydWN0dXJlKTsKLSAgICAgICAgcmVzdWx0Lm1fbmV3U3RydWN0dXJlLnNldCh2bSwg
b3duZXIsIG5ld1N0cnVjdHVyZSk7Ci0gICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNv
bmRpdGlvblNldDsKLSAgICAgICAgcmVzdWx0Lm1fY3VzdG9tU2V0dGVyID0gMDsKLSAgICAgICAg
cmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBzdHViUm91dGluZTsKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICB9Ci0KLSAgICBzdGF0aWMgUHV0QnlJZEFjY2VzcyByZXBsYWNlKAotICAgICAgICBW
TSYgdm0sCi0gICAgICAgIEpTQ2VsbCogb3duZXIsCi0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlLAotICAgICAgICBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSkKLSAg
ICB7Ci0gICAgICAgIFB1dEJ5SWRBY2Nlc3MgcmVzdWx0OwotICAgICAgICByZXN1bHQubV90eXBl
ID0gUmVwbGFjZTsKLSAgICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlLnNldCh2bSwgb3duZXIs
IHN0cnVjdHVyZSk7Ci0gICAgICAgIHJlc3VsdC5tX2N1c3RvbVNldHRlciA9IDA7Ci0gICAgICAg
IHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gc3R1YlJvdXRpbmU7Ci0gICAgICAgIHJldHVybiByZXN1
bHQ7Ci0gICAgfQotCi0KLSAgICBzdGF0aWMgUHV0QnlJZEFjY2VzcyBzZXR0ZXIoCi0gICAgICAg
IFZNJiB2bSwKLSAgICAgICAgSlNDZWxsKiBvd25lciwKLSAgICAgICAgQWNjZXNzVHlwZSBhY2Nl
c3NUeXBlLAotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKLSAgICAgICAgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwKLSAgICAgICAgUHV0UHJvcGVy
dHlTbG90OjpQdXRWYWx1ZUZ1bmMgY3VzdG9tU2V0dGVyLAotICAgICAgICBQYXNzUmVmUHRyPEpJ
VFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSkKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJU
KGFjY2Vzc1R5cGUgPT0gU2V0dGVyIHx8IGFjY2Vzc1R5cGUgPT0gQ3VzdG9tU2V0dGVyKTsKLSAg
ICAgICAgUHV0QnlJZEFjY2VzcyByZXN1bHQ7Ci0gICAgICAgIHJlc3VsdC5tX29sZFN0cnVjdHVy
ZS5zZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOwotICAgICAgICByZXN1bHQubV90eXBlID0gYWNj
ZXNzVHlwZTsKLSAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0Owot
ICAgICAgICByZXN1bHQubV9jdXN0b21TZXR0ZXIgPSBjdXN0b21TZXR0ZXI7Ci0gICAgICAgIHJl
c3VsdC5tX3N0dWJSb3V0aW5lID0gc3R1YlJvdXRpbmU7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7
Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyBQdXRCeUlkQWNjZXNzIGZyb21TdHJ1Y3R1cmVTdHVi
SW5mbyhTdHJ1Y3R1cmVTdHViSW5mbyYpOwotICAgIAotICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7
IHJldHVybiBtX3R5cGUgIT0gSW52YWxpZDsgfQotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3Qg
eyByZXR1cm4gIWlzU2V0KCk7IH0KLSAgICAKLSAgICBBY2Nlc3NUeXBlIHR5cGUoKSBjb25zdCB7
IHJldHVybiBtX3R5cGU7IH0KLSAgICAKLSAgICBib29sIGlzVHJhbnNpdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fdHlwZSA9PSBUcmFuc2l0aW9uOyB9Ci0gICAgYm9vbCBpc1JlcGxhY2UoKSBjb25z
dCB7IHJldHVybiBtX3R5cGUgPT0gUmVwbGFjZTsgfQotICAgIGJvb2wgaXNTZXR0ZXIoKSBjb25z
dCB7IHJldHVybiBtX3R5cGUgPT0gU2V0dGVyOyB9Ci0gICAgYm9vbCBpc0N1c3RvbSgpIGNvbnN0
IHsgcmV0dXJuIG1fdHlwZSA9PSBDdXN0b21TZXR0ZXI7IH0KLSAgICAKLSAgICBTdHJ1Y3R1cmUq
IG9sZFN0cnVjdHVyZSgpIGNvbnN0Ci0gICAgewotICAgICAgICAvLyBVc2luZyB0aGlzIGluc3Rl
YWQgb2YgaXNTZXQoKSB0byBtYWtlIHRoaXMgYXNzZXJ0aW9uIHJvYnVzdCBhZ2FpbnN0IHRoZSBw
b3NzaWJpbGl0eQotICAgICAgICAvLyBvZiBhZGRpdGlvbmFsIGFjY2VzcyB0eXBlcyBiZWluZyBh
ZGRlZC4KLSAgICAgICAgQVNTRVJUKGlzVHJhbnNpdGlvbigpIHx8IGlzUmVwbGFjZSgpIHx8IGlz
U2V0dGVyKCkgfHwgaXNDdXN0b20oKSk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gbV9vbGRT
dHJ1Y3R1cmUuZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc1JlcGxhY2UoKSB8fCBpc1NldHRlcigpIHx8
IGlzQ3VzdG9tKCkpOwotICAgICAgICByZXR1cm4gbV9vbGRTdHJ1Y3R1cmUuZ2V0KCk7Ci0gICAg
fQotICAgIAotICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVChpc1RyYW5zaXRpb24oKSk7Ci0gICAgICAgIHJldHVybiBtX25ld1N0cnVjdHVy
ZS5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9Ci0gICAg
Ci0gICAgSklUU3R1YlJvdXRpbmUqIHN0dWJSb3V0aW5lKCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IEFTU0VSVChpc1RyYW5zaXRpb24oKSB8fCBpc1JlcGxhY2UoKSB8fCBpc1NldHRlcigpIHx8IGlz
Q3VzdG9tKCkpOwotICAgICAgICByZXR1cm4gbV9zdHViUm91dGluZS5nZXQoKTsKLSAgICB9Ci0K
LSAgICBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyBjdXN0b21TZXR0ZXIoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgQVNTRVJUKGlzQ3VzdG9tKCkpOwotICAgICAgICByZXR1cm4gbV9jdXN0
b21TZXR0ZXI7Ci0gICAgfQotCi0gICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25zdDsKLSAgICAK
LXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKLSAgICAKLSAgICBBY2Nlc3NU
eXBlIG1fdHlwZTsKLSAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX29sZFN0cnVjdHVyZTsK
LSAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX25ld1N0cnVjdHVyZTsKLSAgICBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKLSAgICBQdXRQcm9wZXJ0eVNsb3Q6
OlB1dFZhbHVlRnVuYyBtX2N1c3RvbVNldHRlcjsKLSAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+
IG1fc3R1YlJvdXRpbmU7Ci19OwotCi1jbGFzcyBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0IHsKLSAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICAvLyBFaXRoZXIgY3JlYXRl
cyBhIG5ldyBwb2x5bW9ycGhpYyBwdXQgbGlzdCwgb3IgcmV0dXJucyB0aGUgb25lIHRoYXQgaXMg
YWxyZWFkeQotICAgIC8vIGluIHBsYWNlLgotICAgIHN0YXRpYyBQb2x5bW9ycGhpY1B1dEJ5SWRM
aXN0KiBmcm9tKFB1dEtpbmQsIFN0cnVjdHVyZVN0dWJJbmZvJik7Ci0gICAgCi0gICAgflBvbHlt
b3JwaGljUHV0QnlJZExpc3QoKTsKLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY3Vy
cmVudFNsb3dQYXRoVGFyZ2V0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2xpc3Qu
bGFzdCgpLnN0dWJSb3V0aW5lKCktPmNvZGUoKS5jb2RlKCk7Ci0gICAgfQotICAgIAotICAgIHZv
aWQgYWRkQWNjZXNzKGNvbnN0IFB1dEJ5SWRBY2Nlc3MmKTsKLSAgICAKLSAgICBib29sIGlzRW1w
dHkoKSBjb25zdCB7IHJldHVybiBtX2xpc3QuaXNFbXB0eSgpOyB9Ci0gICAgdW5zaWduZWQgc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5zaXplKCk7IH0KLSAgICBib29sIGlzRnVsbCgpIGNv
bnN0OwotICAgIGJvb2wgaXNBbG1vc3RGdWxsKCkgY29uc3Q7IC8vIFRydWUgaWYgYWRkaW5nIGFu
IGVsZW1lbnQgd291bGQgbWFrZSBpc0Z1bGwoKSB0cnVlLgotICAgIGNvbnN0IFB1dEJ5SWRBY2Nl
c3MmIGF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdFtpXTsgfQotICAgIGNvbnN0
IFB1dEJ5SWRBY2Nlc3MmIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9s
aXN0W2ldOyB9Ci0gICAgCi0gICAgUHV0S2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5k
OyB9Ci0gICAgCi0gICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25zdDsKLSAgICAKLXByaXZhdGU6
Ci0gICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKLSAgICAKLSAgICAvLyBJbml0aWFsaXplIGZy
b20gYSBzdHViIGluZm87IHRoaXMgd2lsbCBwbGFjZSBvbmUgZWxlbWVudCBpbiB0aGUgbGlzdCBh
bmQgaXQgd2lsbAotICAgIC8vIGJlIGNyZWF0ZWQgYnkgY29udmVydGluZyB0aGUgc3R1YiBpbmZv
J3MgcHV0IGJ5IGlkIGFjY2VzcyBpbmZvcm1hdGlvbiBpbnRvIG91cgotICAgIC8vIFB1dEJ5SWRB
Y2Nlc3MuCi0gICAgUG9seW1vcnBoaWNQdXRCeUlkTGlzdChQdXRLaW5kLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYpOwotCi0gICAgVmVjdG9yPFB1dEJ5SWRBY2Nlc3MsIDI+IG1fbGlzdDsKLSAgICBQdXRL
aW5kIG1fa2luZDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gRU5BQkxF
KEpJVCkKLQotI2VuZGlmIC8vIFBvbHltb3JwaGljUHV0QnlJZExpc3RfaAotCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCShyZXZp
c2lvbiAxODk1MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0
YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEzICsyNiwxMiBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKIAotI2luY2x1ZGUgIkFjY2Vzc29y
Q2FsbEpJVFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAi
Q29tcGxleEdldFN0YXR1cy5oIgogI2luY2x1ZGUgIkxMSW50RGF0YS5oIgogI2luY2x1ZGUgIkxv
d0xldmVsSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAi
UG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oIgorI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgi
CiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlQ2hhaW4uaCIKICNp
bmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KQEAgLTE1NCw2NiArMTUzLDQzIEBAIFB1dEJ5SWRTdGF0
dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICBpZiAoIXN0dWJJbmZvLT5zZWVuKQog
ICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cygpOwogICAgIAotICAgIHN3aXRjaCAoc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUpIHsKLSAgICBjYXNlIGFjY2Vzc191bnNldDoKKyAgICBzd2l0Y2ggKHN0
dWJJbmZvLT5jYWNoZVR5cGUpIHsKKyAgICBjYXNlIENhY2hlVHlwZTo6VW5zZXQ6CiAgICAgICAg
IC8vIElmIHRoZSBKSVQgc2F3IGl0IGJ1dCBkaWRuJ3Qgb3B0aW1pemUgaXQsIHRoZW4gYXNzdW1l
IHRoYXQgdGhpcyB0YWtlcyBzbG93IHBhdGguCiAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVz
KFRha2VzU2xvd1BhdGgpOwogICAgICAgICAKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfcmVw
bGFjZTogeworICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZTogewogICAgICAgICBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQgPQotICAgICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJZFJl
cGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CisgICAgICAg
ICAgICBzdHViSW5mby0+dS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLT5nZXRDb25jdXJy
ZW50bHkodWlkKTsKICAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgewogICAgICAg
ICAgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAotICAgICAgICAgICAgICAgIHN0
dWJJbmZvLT51LnB1dEJ5SWRSZXBsYWNlLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIG9mZnNl
dCk7CisgICAgICAgICAgICAgICAgc3R1YkluZm8tPnUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVj
dHVyZS5nZXQoKSwgb2Zmc2V0KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gUHV0QnlJZFN0
YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICB9CiAgICAgICAgIAotICAgIGNhc2UgYWNjZXNzX3B1
dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJh
bnNpdGlvbl9kaXJlY3Q6IHsKLSAgICAgICAgQVNTRVJUKHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFu
c2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5J
bnZhbGlkYXRlZCgpKTsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gCi0gICAgICAg
ICAgICBzdHViSW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUtPmdldENvbmN1cnJl
bnRseSh1aWQpOwotICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7Ci0gICAgICAg
ICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQgPSBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldDo6ZnJvbVJhd1BvaW50ZXIoCi0gICAgICAgICAgICAgICAgc3R1Yklu
Zm8tPnUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0KTsKLSAgICAgICAgICAgIGlm
ICghY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eSgpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgICAgICAgICAgcmV0
dXJuIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAotICAgICAgICAgICAgICAgIHN0dWJJbmZv
LT51LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgpLAotICAgICAgICAg
ICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5nZXQoKSwKLSAg
ICAgICAgICAgICAgICBjb25kaXRpb25TZXQsIG9mZnNldCk7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgfQotICAgICAgICAKLSAg
ICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfbGlzdDogewotICAgICAgICBQb2x5bW9ycGhpY1B1dEJ5
SWRMaXN0KiBsaXN0ID0gc3R1YkluZm8tPnUucHV0QnlJZExpc3QubGlzdDsKKyAgICBjYXNlIENh
Y2hlVHlwZTo6U3R1YjogeworICAgICAgICBQb2x5bW9ycGhpY0FjY2VzcyogbGlzdCA9IHN0dWJJ
bmZvLT51LnN0dWI7CiAgICAgICAgIAogICAgICAgICBQdXRCeUlkU3RhdHVzIHJlc3VsdDsKICAg
ICAgICAgcmVzdWx0Lm1fc3RhdGUgPSBTaW1wbGU7CiAgICAgICAgIAogICAgICAgICBTdGF0ZSBz
bG93UGF0aFN0YXRlID0gVGFrZXNTbG93UGF0aDsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBjb25zdCBQdXRCeUlkQWNj
ZXNzJiBhY2Nlc3MgPSBsaXN0LT5hdChpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3dp
dGNoIChhY2Nlc3MudHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIFB1dEJ5SWRBY2Nlc3M6OlNl
dHRlcjoKLSAgICAgICAgICAgIGNhc2UgUHV0QnlJZEFjY2Vzczo6Q3VzdG9tU2V0dGVyOgorICAg
ICAgICAgICAgY29uc3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0gbGlzdC0+YXQoaSk7CisgICAgICAg
ICAgICBpZiAoYWNjZXNzLmRvZXNDYWxscygpKQogICAgICAgICAgICAgICAgIHNsb3dQYXRoU3Rh
dGUgPSBNYWtlc0NhbGxzOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsg
KytpKSB7Ci0gICAgICAgICAgICBjb25zdCBQdXRCeUlkQWNjZXNzJiBhY2Nlc3MgPSBsaXN0LT5h
dChpKTsKKyAgICAgICAgICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIGFjY2VzcyA9IGxpc3QtPmF0KGkp
OworICAgICAgICAgICAgaWYgKGFjY2Vzcy52aWFQcm94eSgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBQdXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUpOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBQdXRCeUlkVmFyaWFudCB2YXJpYW50OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBz
d2l0Y2ggKGFjY2Vzcy50eXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgUHV0QnlJZEFjY2Vzczo6
UmVwbGFjZTogeworICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpSZXBsYWNlOiB7CiAgICAg
ICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBhY2Nlc3Muc3RydWN0dXJlKCk7CiAg
ICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25j
dXJyZW50bHkodWlkKTsKICAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0
KSkKQEAgLTIyMiw3ICsxOTgsNyBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1
dGVGb3JTCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICBjYXNlIFB1dEJ5SWRBY2Nlc3M6OlRyYW5zaXRpb246IHsKKyAg
ICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6VHJhbnNpdGlvbjogewogICAgICAgICAgICAgICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9CiAgICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5uZXdT
dHJ1Y3R1cmUoKS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CiAgICAgICAgICAgICAgICAgaWYgKCFp
c1ZhbGlkT2Zmc2V0KG9mZnNldCkpCkBAIC0yMzEsMTEgKzIwNywxMSBAQCBQdXRCeUlkU3RhdHVz
IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRp
b25TZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkpCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBQdXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUpOwogICAgICAgICAgICAgICAgIHZhcmlh
bnQgPSBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKLSAgICAgICAgICAgICAgICAgICAgYWNj
ZXNzLm9sZFN0cnVjdHVyZSgpLCBhY2Nlc3MubmV3U3RydWN0dXJlKCksIGNvbmRpdGlvblNldCwg
b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgYWNjZXNzLnN0cnVjdHVyZSgpLCBhY2Nlc3Mu
bmV3U3RydWN0dXJlKCksIGNvbmRpdGlvblNldCwgb2Zmc2V0KTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2Ug
UHV0QnlJZEFjY2Vzczo6U2V0dGVyOiB7CisgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OlNl
dHRlcjogewogICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYWNjZXNzLnN0
cnVjdHVyZSgpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIENvbXBsZXhHZXRT
dGF0dXMgY29tcGxleEdldFN0YXR1cyA9IENvbXBsZXhHZXRTdGF0dXM6OmNvbXB1dGVGb3IoCkBA
IC0yNDksMTIgKzIyNSwxMiBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVG
b3JTCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKHNsb3dQYXRoU3Rh
dGUpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIENvbXBsZXhH
ZXRTdGF0dXM6OklubGluZWFibGU6IHsKLSAgICAgICAgICAgICAgICAgICAgQWNjZXNzb3JDYWxs
SklUU3R1YlJvdXRpbmUqIHN0dWIgPSBzdGF0aWNfY2FzdDxBY2Nlc3NvckNhbGxKSVRTdHViUm91
dGluZSo+KAotICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzLnN0dWJSb3V0aW5lKCkpOwor
ICAgICAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGFjY2Vzcy5j
YWxsTGlua0luZm8oKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGNhbGxMaW5rSW5mbyk7
CiAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2Fs
bExpbmtTdGF0dXMgPQogICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxD
YWxsTGlua1N0YXR1cz4oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbExpbmtTdGF0
dXM6OmNvbXB1dGVGb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tlciwg
cHJvZmlsZWRCbG9jaywgKnN0dWItPm1fY2FsbExpbmtJbmZvLCBjYWxsRXhpdFNpdGVEYXRhKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tlciwgcHJvZmlsZWRCbG9jaywg
KmNhbGxMaW5rSW5mbywgY2FsbEV4aXRTaXRlRGF0YSkpOwogICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50OjpzZXR0ZXIoCiAg
ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0
KCksIGNvbXBsZXhHZXRTdGF0dXMuY29uZGl0aW9uU2V0KCksCkBAIC0yNjMsNyArMjM5LDcgQEAg
UHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2Fz
ZSBQdXRCeUlkQWNjZXNzOjpDdXN0b21TZXR0ZXI6CisgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nh
c2U6OkN1c3RvbVNldHRlcjoKICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhN
YWtlc0NhbGxzKTsKIAogICAgICAgICAgICAgZGVmYXVsdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkocmV2aXNp
b24gMTg5NTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0
dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCArMjcsNyBAQAogI2luY2x1ZGUgIlN0
cnVjdHVyZVN0dWJJbmZvLmgiCiAKICNpbmNsdWRlICJKU09iamVjdC5oIgotI2luY2x1ZGUgIlBv
bHltb3JwaGljR2V0QnlJZExpc3QuaCIKLSNpbmNsdWRlICJQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0
LmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKICNpbmNsdWRlICJSZXBhdGNoLmgi
CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMzYsMzcgKzM1LDUzIEBAIG5hbWVzcGFjZSBKU0Mgewog
I2lmIEVOQUJMRShKSVQpCiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpkZXJlZigpCiB7Ci0gICAg
c3dpdGNoIChhY2Nlc3NUeXBlKSB7Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3Q6IHsK
LSAgICAgICAgZGVsZXRlIHUuZ2V0QnlJZExpc3QubGlzdDsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfbGlzdDoKLSAgICAgICAgZGVsZXRlIHUucHV0
QnlJZExpc3QubGlzdDsKKyAgICBzd2l0Y2ggKGNhY2hlVHlwZSkgeworICAgIGNhc2UgQ2FjaGVU
eXBlOjpTdHViOgorICAgICAgICBkZWxldGUgdS5zdHViOwogICAgICAgICByZXR1cm47Ci0gICAg
Y2FzZSBhY2Nlc3NfaW5fbGlzdDogewotICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVy
ZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlcyA9IHUuaW5MaXN0LnN0cnVjdHVyZUxpc3Q7Ci0g
ICAgICAgIGRlbGV0ZSBwb2x5bW9ycGhpY1N0cnVjdHVyZXM7CisgICAgY2FzZSBDYWNoZVR5cGU6
OlVuc2V0OgorICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKKyAgICBjYXNlIENhY2hl
VHlwZTo6UHV0QnlJZFJlcGxhY2U6CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgY2FzZSBh
Y2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgotICAgIGNhc2UgYWNjZXNzX3B1dF9i
eV9pZF90cmFuc2l0aW9uX2RpcmVjdDoKLSAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQ6OmFkb3B0UmF3UG9pbnRlcih1LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0NvbmRpdGlvblNldCk7
Ci0gICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0ID0gbnVsbHB0cjsK
LSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmOgotICAgIGNh
c2UgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlOgotICAgIGNhc2UgYWNjZXNzX3Vuc2V0OgotICAg
ICAgICAvLyBUaGVzZSBpbnN0cnVjdGlvbnMgZG9uJ3QgaGF2ZSB0byByZWxlYXNlIGFueSBhbGxv
Y2F0ZWQgbWVtb3J5Ci0gICAgICAgIHJldHVybjsKLSAgICBkZWZhdWx0OgotICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVB0ciBTdHJ1Y3R1cmVTdHViSW5m
bzo6YWRkQWNjZXNzQ2FzZSgKKyAgICBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25z
dCBJZGVudGlmaWVyJiBpZGVudCwgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGFjY2Vzc0Nh
c2UpCit7CisgICAgaWYgKCFhY2Nlc3NDYXNlKQorICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyKCk7CisgICAgCisgICAgaWYgKGNhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlN0dWIp
CisgICAgICAgIHJldHVybiB1LnN0dWItPnJlZ2VuZXJhdGVXaXRoQ2FzZSh2bSwgY29kZUJsb2Nr
LCAqdGhpcywgaWRlbnQsIHN0ZDo6bW92ZShhY2Nlc3NDYXNlKSk7CisKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8UG9seW1vcnBoaWNBY2Nlc3M+IGFjY2VzcyA9IHN0ZDo6bWFrZV91bmlxdWU8UG9seW1v
cnBoaWNBY2Nlc3M+KCk7CisgICAgCisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3ND
YXNlPj4gYWNjZXNzQ2FzZXM7CisgICAgCisgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+
IHByZXZpb3VzQ2FzZSA9CisgICAgICAgIEFjY2Vzc0Nhc2U6OmZyb21TdHJ1Y3R1cmVTdHViSW5m
byh2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgKnRoaXMpOworICAgIGlmIChwcmV2
aW91c0Nhc2UpCisgICAgICAgIGFjY2Vzc0Nhc2VzLmFwcGVuZChzdGQ6Om1vdmUocHJldmlvdXND
YXNlKSk7CisKKyAgICBhY2Nlc3NDYXNlcy5hcHBlbmQoc3RkOjptb3ZlKGFjY2Vzc0Nhc2UpKTsK
KworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByZXN1bHQgPQorICAgICAgICBhY2Nlc3MtPnJl
Z2VuZXJhdGVXaXRoQ2FzZXModm0sIGNvZGVCbG9jaywgKnRoaXMsIGlkZW50LCBzdGQ6Om1vdmUo
YWNjZXNzQ2FzZXMpKTsKKworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gTWFjcm9B
c3NlbWJsZXJDb2RlUHRyKCk7CisKKyAgICBjYWNoZVR5cGUgPSBDYWNoZVR5cGU6OlN0dWI7Cisg
ICAgdS5zdHViID0gYWNjZXNzLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB2
b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpyZXNldChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAg
ICBpZiAoYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpCisgICAgaWYgKGNhY2hlVHlwZSA9PSBD
YWNoZVR5cGU6OlVuc2V0KQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaWYgKE9wdGlvbnM6
OnZlcmJvc2VPU1IoKSkgewpAQCAtNzQsNjAgKzg5LDM4IEBAIHZvaWQgU3RydWN0dXJlU3R1Yklu
Zm86OnJlc2V0KENvZGVCbG9jayoKICAgICAgICAgLy8gb2YgdGhlIENvZGVCbG9jay4KICAgICAg
ICAgZGF0YUxvZygiQ2xlYXJpbmcgc3RydWN0dXJlIGNhY2hlIChraW5kICIsIHN0YXRpY19jYXN0
PGludD4oYWNjZXNzVHlwZSksICIpIGluICIsIFJhd1BvaW50ZXIoY29kZUJsb2NrKSwgIi5cbiIp
OwogICAgIH0KLSAgICAKLSAgICBpZiAoaXNHZXRCeUlkQWNjZXNzKHN0YXRpY19jYXN0PEFjY2Vz
c1R5cGU+KGFjY2Vzc1R5cGUpKSkKKworICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgeworICAgIGNh
c2UgQWNjZXNzVHlwZTo6R2V0OgogICAgICAgICByZXNldEdldEJ5SUQoY29kZUJsb2NrLCAqdGhp
cyk7Ci0gICAgZWxzZSBpZiAoaXNQdXRCeUlkQWNjZXNzKHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+
KGFjY2Vzc1R5cGUpKSkKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXQ6
CiAgICAgICAgIHJlc2V0UHV0QnlJRChjb2RlQmxvY2ssICp0aGlzKTsKLSAgICBlbHNlIHsKLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoaXNJbkFjY2VzcyhzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihh
Y2Nlc3NUeXBlKSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkluOgog
ICAgICAgICByZXNldEluKGNvZGVCbG9jaywgKnRoaXMpOworICAgICAgICBicmVhazsKICAgICB9
CiAgICAgCiAgICAgZGVyZWYoKTsKLSAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX3Vuc2V0OwotICAg
IHN0dWJSb3V0aW5lID0gbnVsbHB0cjsKLSAgICB3YXRjaHBvaW50cyA9IG51bGxwdHI7CisgICAg
Y2FjaGVUeXBlID0gQ2FjaGVUeXBlOjpVbnNldDsKIH0KIAogdm9pZCBTdHJ1Y3R1cmVTdHViSW5m
bzo6dmlzaXRXZWFrUmVmZXJlbmNlcyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBWTSYg
dm0gPSAqY29kZUJsb2NrLT52bSgpOwotICAgIAotICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgewot
ICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmOgotICAgICAgICBpZiAoSGVhcDo6aXNNYXJr
ZWQodS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpKSkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3Q6
IHsKLSAgICAgICAgaWYgKHUuZ2V0QnlJZExpc3QubGlzdC0+dmlzaXRXZWFrKHZtKSkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgYWNjZXNzX3B1
dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJh
bnNpdGlvbl9kaXJlY3Q6Ci0gICAgICAgIGlmIChIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRUcmFu
c2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgpKQotICAgICAgICAgICAgJiYgSGVhcDo6aXNN
YXJrZWQodS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUuZ2V0KCkpCi0gICAgICAgICAgICAm
JiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6ZnJvbVJhd1BvaW50ZXIodS5wdXRCeUlkVHJh
bnNpdGlvbi5yYXdDb25kaXRpb25TZXQpLmFyZVN0aWxsTGl2ZSgpKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFjZToK
LSAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKHUucHV0QnlJZFJlcGxhY2UuYmFzZU9iamVjdFN0
cnVjdHVyZS5nZXQoKSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9saXN0OgotICAgICAgICBpZiAodS5wdXRCeUlkTGlzdC5s
aXN0LT52aXNpdFdlYWsodm0pKQorCisgICAgc3dpdGNoIChjYWNoZVR5cGUpIHsKKyAgICBjYXNl
IENhY2hlVHlwZTo6R2V0QnlJZFNlbGY6CisgICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBs
YWNlOgorICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQodS5ieUlkU2VsZi5iYXNlT2JqZWN0U3Ry
dWN0dXJlLmdldCgpKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBhY2Nlc3NfaW5fbGlzdDogewotICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVy
ZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlcyA9IHUuaW5MaXN0LnN0cnVjdHVyZUxpc3Q7Ci0g
ICAgICAgIGlmIChwb2x5bW9ycGhpY1N0cnVjdHVyZXMtPnZpc2l0V2Vhayh1LmluTGlzdC5saXN0
U2l6ZSkpCisgICAgY2FzZSBDYWNoZVR5cGU6OlN0dWI6CisgICAgICAgIGlmICh1LnN0dWItPnZp
c2l0V2Vhayh2bSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGJyZWFrOwotICAgIH0K
ICAgICBkZWZhdWx0OgotICAgICAgICAvLyBUaGUgcmVzdCBvZiB0aGUgaW5zdHJ1Y3Rpb25zIGRv
bid0IHJlcXVpcmUgcmVmZXJlbmNlcywgc28gdGhlcmUgaXMgbm8gbmVlZCB0bwotICAgICAgICAv
LyBkbyBhbnl0aGluZy4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlz
aW9uIDE4OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVT
dHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiTWFj
cm9Bc3NlbWJsZXIuaCIKICNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgog
I2luY2x1ZGUgIk9wY29kZS5oIgotI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJl
TGlzdC5oIgorI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCiAjaW5jbHVkZSAiUmVnaXN0
ZXJTZXQuaCIKICNpbmNsdWRlICJTcGlsbFJlZ2lzdGVyc01vZGUuaCIKICNpbmNsdWRlICJTdHJ1
Y3R1cmUuaCIKQEAgLTQyLDU3ICs0MiwyNSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIEVOQUJM
RShKSVQpCiAKLWNsYXNzIFBvbHltb3JwaGljR2V0QnlJZExpc3Q7Ci1jbGFzcyBQb2x5bW9ycGhp
Y1B1dEJ5SWRMaXN0OworY2xhc3MgUG9seW1vcnBoaWNBY2Nlc3M7CiAKLWVudW0gQWNjZXNzVHlw
ZSB7Ci0gICAgYWNjZXNzX2dldF9ieV9pZF9zZWxmLAotICAgIGFjY2Vzc19nZXRfYnlfaWRfbGlz
dCwKLSAgICBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsLAotICAgIGFjY2Vzc19w
dXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3QsCi0gICAgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNl
LAotICAgIGFjY2Vzc19wdXRfYnlfaWRfbGlzdCwKLSAgICBhY2Nlc3NfdW5zZXQsCi0gICAgYWNj
ZXNzX2luX2xpc3QKK2VudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhfdCB7CisgICAgR2V0LAor
ICAgIFB1dCwKKyAgICBJbgogfTsKIAotaW5saW5lIGJvb2wgaXNHZXRCeUlkQWNjZXNzKEFjY2Vz
c1R5cGUgYWNjZXNzVHlwZSkKLXsKLSAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKLSAgICBjYXNl
IGFjY2Vzc19nZXRfYnlfaWRfc2VsZjoKLSAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfbGlzdDoK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLX0KLSAgICAKLWlubGluZSBib29sIGlzUHV0QnlJZEFjY2VzcyhBY2Nlc3NUeXBl
IGFjY2Vzc1R5cGUpCi17Ci0gICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7Ci0gICAgY2FzZSBhY2Nl
c3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9p
ZF90cmFuc2l0aW9uX2RpcmVjdDoKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFjZToK
LSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfbGlzdDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotaW5saW5lIGJv
b2wgaXNJbkFjY2VzcyhBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUpCi17Ci0gICAgc3dpdGNoIChhY2Nl
c3NUeXBlKSB7Ci0gICAgY2FzZSBhY2Nlc3NfaW5fbGlzdDoKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KK2VudW0gY2xh
c3MgQ2FjaGVUeXBlIDogaW50OF90IHsKKyAgICBVbnNldCwKKyAgICBHZXRCeUlkU2VsZiwKKyAg
ICBQdXRCeUlkUmVwbGFjZSwKKyAgICBTdHViCit9OwogCiBzdHJ1Y3QgU3RydWN0dXJlU3R1Yklu
Zm8gewotICAgIFN0cnVjdHVyZVN0dWJJbmZvKCkKLSAgICAgICAgOiBhY2Nlc3NUeXBlKGFjY2Vz
c191bnNldCkKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyhBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUpCisg
ICAgICAgIDogYWNjZXNzVHlwZShhY2Nlc3NUeXBlKQorICAgICAgICAsIGNhY2hlVHlwZShDYWNo
ZVR5cGU6OlVuc2V0KQogICAgICAgICAsIHNlZW4oZmFsc2UpCiAgICAgICAgICwgcmVzZXRCeUdD
KGZhbHNlKQogICAgICAgICAsIHRvb2tTbG93UGF0aChmYWxzZSkKQEAgLTEwMCw1MyArNjgsMzEg
QEAgc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBp
bml0R2V0QnlJZFNlbGYoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIGJhc2VPYmpl
Y3RTdHJ1Y3R1cmUpCisgICAgdm9pZCBpbml0R2V0QnlJZFNlbGYoVk0mIHZtLCBKU0NlbGwqIG93
bmVyLCBTdHJ1Y3R1cmUqIGJhc2VPYmplY3RTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCkKICAgICB7Ci0gICAgICAgIGFjY2Vzc1R5cGUgPSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGY7Ci0K
LSAgICAgICAgdS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLnNldCh2bSwgb3duZXIs
IGJhc2VPYmplY3RTdHJ1Y3R1cmUpOwotICAgIH0KKyAgICAgICAgY2FjaGVUeXBlID0gQ2FjaGVU
eXBlOjpHZXRCeUlkU2VsZjsKIAotICAgIHZvaWQgaW5pdEdldEJ5SWRMaXN0KFBvbHltb3JwaGlj
R2V0QnlJZExpc3QqIGxpc3QpCi0gICAgewotICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX2dl
dF9ieV9pZF9saXN0OwotICAgICAgICB1LmdldEJ5SWRMaXN0Lmxpc3QgPSBsaXN0OworICAgICAg
ICB1LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgYmFzZU9iamVj
dFN0cnVjdHVyZSk7CisgICAgICAgIHUuYnlJZFNlbGYub2Zmc2V0ID0gb2Zmc2V0OwogICAgIH0K
IAotICAgIC8vIFB1dEJ5SWQqCi0KLSAgICB2b2lkIGluaXRQdXRCeUlkVHJhbnNpdGlvbihWTSYg
dm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogcHJldmlvdXNTdHJ1Y3R1cmUsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQsIGJv
b2wgaXNEaXJlY3QpCisgICAgdm9pZCBpbml0UHV0QnlJZFJlcGxhY2UoVk0mIHZtLCBKU0NlbGwq
IG93bmVyLCBTdHJ1Y3R1cmUqIGJhc2VPYmplY3RTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCkKICAgICB7Ci0gICAgICAgIGlmIChpc0RpcmVjdCkKLSAgICAgICAgICAgIGFjY2Vzc1R5
cGUgPSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0OwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1h
bDsKKyAgICAgICAgY2FjaGVUeXBlID0gQ2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZTsKIAotICAg
ICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLnNldCh2bSwgb3duZXIs
IHByZXZpb3VzU3RydWN0dXJlKTsKLSAgICAgICAgdS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1
cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKLSAgICAgICAgdS5wdXRCeUlkVHJhbnNpdGlv
bi5yYXdDb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQucmVsZWFzZVJhd1BvaW50ZXIoKTsKKyAg
ICAgICAgdS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLnNldCh2bSwgb3duZXIsIGJhc2VP
YmplY3RTdHJ1Y3R1cmUpOworICAgICAgICB1LmJ5SWRTZWxmLm9mZnNldCA9IG9mZnNldDsKICAg
ICB9CiAKLSAgICB2b2lkIGluaXRQdXRCeUlkUmVwbGFjZShWTSYgdm0sIEpTQ2VsbCogb3duZXIs
IFN0cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIGFjY2Vzc1R5
cGUgPSBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2U7Ci0gICAgCi0gICAgICAgIHUucHV0QnlJZFJl
cGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBiYXNlT2JqZWN0U3RydWN0
dXJlKTsKLSAgICB9Ci0gICAgICAgIAotICAgIHZvaWQgaW5pdFB1dEJ5SWRMaXN0KFBvbHltb3Jw
aGljUHV0QnlJZExpc3QqIGxpc3QpCi0gICAgewotICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNz
X3B1dF9ieV9pZF9saXN0OwotICAgICAgICB1LnB1dEJ5SWRMaXN0Lmxpc3QgPSBsaXN0OwotICAg
IH0KLSAgICAKLSAgICB2b2lkIGluaXRJbkxpc3QoUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVM
aXN0KiBsaXN0LCBpbnQgbGlzdFNpemUpCisgICAgdm9pZCBpbml0U3R1YihzdGQ6OnVuaXF1ZV9w
dHI8UG9seW1vcnBoaWNBY2Nlc3M+IHN0dWIpCiAgICAgewotICAgICAgICBhY2Nlc3NUeXBlID0g
YWNjZXNzX2luX2xpc3Q7Ci0gICAgICAgIHUuaW5MaXN0LnN0cnVjdHVyZUxpc3QgPSBsaXN0Owot
ICAgICAgICB1LmluTGlzdC5saXN0U2l6ZSA9IGxpc3RTaXplOworICAgICAgICBjYWNoZVR5cGUg
PSBDYWNoZVR5cGU6OlN0dWI7CisgICAgICAgIHUuc3R1YiA9IHN0dWIucmVsZWFzZSgpOwogICAg
IH0KLSAgICAgICAgCisKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgYWRkQWNjZXNzQ2FzZSgK
KyAgICAgICAgVk0mLCBDb2RlQmxvY2sqLCBjb25zdCBJZGVudGlmaWVyJiwgc3RkOjp1bmlxdWVf
cHRyPEFjY2Vzc0Nhc2U+IGFjY2Vzc0Nhc2UpOworCiAgICAgdm9pZCByZXNldChDb2RlQmxvY2sq
KTsKIAogICAgIHZvaWQgZGVyZWYoKTsKQEAgLTE2NSwxNSArMTExLDkgQEAgc3RydWN0IFN0cnVj
dHVyZVN0dWJJbmZvIHsKICAgICAgICAgc2VlbiA9IHRydWU7CiAgICAgfQogICAgICAgICAKLSAg
ICBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBhZGRXYXRjaHBvaW50KAotICAgICAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNv
bmRpdGlvbiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCkpCi0gICAgewotICAgICAgICByZXR1
cm4gV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjplbnN1cmVSZWZlcmVuY2VBbmRBZGRX
YXRjaHBvaW50KAotICAgICAgICAgICAgd2F0Y2hwb2ludHMsIGNvZGVCbG9jaywgdGhpcywgY29u
ZGl0aW9uKTsKLSAgICB9Ci0gICAgCi0gICAgaW50OF90IGFjY2Vzc1R5cGU7Ci0gICAgYm9vbCBz
ZWVuIDogMTsKKyAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGU7CisgICAgQ2FjaGVUeXBlIGNhY2hl
VHlwZTsKKyAgICBib29sIHNlZW47CiAgICAgYm9vbCByZXNldEJ5R0MgOiAxOwogICAgIGJvb2wg
dG9va1Nsb3dQYXRoIDogMTsKIApAQCAtMjAzLDM0ICsxNDMsMTMgQEAgc3RydWN0IFN0cnVjdHVy
ZVN0dWJJbmZvIHsKIAogICAgIHVuaW9uIHsKICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAg
IC8vIEl0IHdvdWxkIGJlIHVud2lzZSB0byBwdXQgYW55dGhpbmcgaGVyZSwgYXMgaXQgd2lsbCBz
dXJlbHkgYmUgb3ZlcndyaXR0ZW4uCi0gICAgICAgIH0gdW5zZXQ7Ci0gICAgICAgIHN0cnVjdCB7
Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4gYmFzZU9iamVjdFN0cnVj
dHVyZTsKLSAgICAgICAgfSBnZXRCeUlkU2VsZjsKLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAg
ICAgIFBvbHltb3JwaGljR2V0QnlJZExpc3QqIGxpc3Q7Ci0gICAgICAgIH0gZ2V0QnlJZExpc3Q7
Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVy
ZT4gcHJldmlvdXNTdHJ1Y3R1cmU7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVj
dHVyZT4gc3RydWN0dXJlOwotICAgICAgICAgICAgdm9pZCogcmF3Q29uZGl0aW9uU2V0OwotICAg
ICAgICB9IHB1dEJ5SWRUcmFuc2l0aW9uOwotICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAg
V3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IGJhc2VPYmplY3RTdHJ1Y3R1cmU7Ci0gICAgICAg
IH0gcHV0QnlJZFJlcGxhY2U7Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBQb2x5bW9y
cGhpY1B1dEJ5SWRMaXN0KiBsaXN0OwotICAgICAgICB9IHB1dEJ5SWRMaXN0OwotICAgICAgICBz
dHJ1Y3QgewotICAgICAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBzdHJ1
Y3R1cmVMaXN0OwotICAgICAgICAgICAgaW50IGxpc3RTaXplOwotICAgICAgICB9IGluTGlzdDsK
KyAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKKyAgICAgICAgfSBieUlkU2VsZjsK
KyAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3MqIHN0dWI7CiAgICAgfSB1OwogCi0gICAgUmVmUHRy
PEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKICAgICBDb2RlTG9jYXRpb25DYWxsIGNhbGxS
ZXR1cm5Mb2NhdGlvbjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2F0Y2hwb2ludHNPblN0cnVjdHVy
ZVN0dWJJbmZvPiB3YXRjaHBvaW50czsKIH07CiAKIGlubGluZSBDb2RlT3JpZ2luIGdldFN0cnVj
dHVyZVN0dWJJbmZvQ29kZU9yaWdpbihTdHJ1Y3R1cmVTdHViSW5mbyYgc3RydWN0dXJlU3R1Yklu
Zm8pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcAkocmV2aXNpb24gMTg5NTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzNSw3ICs5MzUsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSW4oTm9kZSogbm9kCiAgICAgCiAgICAgaWYgKEpT
U3RyaW5nKiBzdHJpbmcgPSBub2RlLT5jaGlsZDEoKS0+ZHluYW1pY0Nhc3RDb25zdGFudDxKU1N0
cmluZyo+KCkpIHsKICAgICAgICAgaWYgKHN0cmluZy0+dHJ5R2V0VmFsdWVJbXBsKCkgJiYgc3Ry
aW5nLT50cnlHZXRWYWx1ZUltcGwoKS0+aXNBdG9taWMoKSkgewotICAgICAgICAgICAgU3RydWN0
dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZFN0dWJJbmZvKCk7
CisgICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX2ppdC5jb2RlQmxv
Y2soKS0+YWRkU3R1YkluZm8oQWNjZXNzVHlwZTo6SW4pOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
Q29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExD
b21waWxlLmNwcAkocmV2aXNpb24gMTg5NTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTM4LDcgKzUzOCw3IEBAIHN0YXRp
YyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAgICAgICAgICAgICBSZWdp
c3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdXNlZFJlZ2lzdGVyc0ZvcihyZWNvcmQpOwogICAgICAg
ICAgICAgICAgIEdQUlJlZyByZXN1bHQgPSByZWNvcmQubG9jYXRpb25zWzBdLmRpcmVjdEdQUigp
OwogICAgICAgICAgICAgICAgIEdQUlJlZyBvYmogPSByZWNvcmQubG9jYXRpb25zWzFdLmRpcmVj
dEdQUigpOwotICAgICAgICAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IGNv
ZGVCbG9jay0+YWRkU3R1YkluZm8oKTsgCisgICAgICAgICAgICAgICAgU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvID0gY29kZUJsb2NrLT5hZGRTdHViSW5mbyhBY2Nlc3NUeXBlOjpJbik7IAog
ICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5jb2RlT3JpZ2luID0gY29kZU9yaWdpbjsKICAgICAg
ICAgICAgICAgICBzdHViSW5mby0+Y2FsbFNpdGVJbmRleCA9IGNoZWNrSW4uY2FsbFNpdGVJbmRl
eCgpOwogICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5iYXNlR1BSID0gc3RhdGljX2Nh
c3Q8aW50OF90PihvYmopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9BY2Nlc3Nv
ckNhbGxKSVRTdHViUm91dGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9BY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5jcHAJKHJldmlzaW9uIDE4OTUxNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmgiCi0KLSNpZiBFTkFCTEUoSklUKQot
Ci0jaW5jbHVkZSAiQ2FsbExpbmtJbmZvLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1BY2Nlc3Nv
ckNhbGxKSVRTdHViUm91dGluZTo6QWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUoCi0gICAgY29u
c3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBjb2RlLCBWTSYgdm0sIHN0ZDo6dW5pcXVlX3B0cjxD
YWxsTGlua0luZm8+IGluZm8pCi0gICAgOiBHQ0F3YXJlSklUU3R1YlJvdXRpbmUoY29kZSwgdm0p
Ci0gICAgLCBtX2NhbGxMaW5rSW5mbyhXVEY6Om1vdmUoaW5mbykpCi17Ci19Ci0KLUFjY2Vzc29y
Q2FsbEpJVFN0dWJSb3V0aW5lOjp+QWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUoKQotewotfQot
Ci1ib29sIEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lOjp2aXNpdFdlYWsoVk0mIHZtKQotewot
ICAgIG1fY2FsbExpbmtJbmZvLT52aXNpdFdlYWsodm0pOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0FjY2Vzc29yQ2FsbEpJVFN0dWJS
b3V0aW5lLmgJKHJldmlzaW9uIDE4OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1NyArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNpZm5kZWYgQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmVfaAotI2RlZmluZSBBY2Nlc3NvckNh
bGxKSVRTdHViUm91dGluZV9oCi0KLSNpZiBFTkFCTEUoSklUKQotCi0jaW5jbHVkZSAiR0NBd2Fy
ZUpJVFN0dWJSb3V0aW5lLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBDYWxsTGlua0lu
Zm87Ci0KLS8vIEpJVCBzdHViIHJvdXRpbmUgZm9yIHVzZSBieSBKYXZhU2NyaXB0IGFjY2Vzc29y
cy4gVGhlc2Ugd2lsbCBiZSBtYWtpbmcgYSBKUwotLy8gY2FsbCB0aGF0IHJlcXVpcmVzIGlubGlu
ZSBjYWNoaW5nLiAKLQotY2xhc3MgQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUgOiBwdWJsaWMg
R0NBd2FyZUpJVFN0dWJSb3V0aW5lIHsKLXB1YmxpYzoKLSAgICBBY2Nlc3NvckNhbGxKSVRTdHVi
Um91dGluZSgKLSAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiwgVk0mLCBzdGQ6
OnVuaXF1ZV9wdHI8Q2FsbExpbmtJbmZvPik7Ci0gICAgCi0gICAgdmlydHVhbCB+QWNjZXNzb3JD
YWxsSklUU3R1YlJvdXRpbmUoKTsKLSAgICAKLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRXZWFrKFZN
Jikgb3ZlcnJpZGU7Ci0gICAgCi0gICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rSW5mbz4gbV9j
YWxsTGlua0luZm87Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEVOQUJM
RShKSVQpCi0KLSNlbmRpZiAvLyBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZV9oCi0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24g
MTg5NTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAko
d29ya2luZyBjb3B5KQpAQCAtNTYzLDcgKzU2Myw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IGJyYW5jaDMyKEVxdWFsLCByZWdzLnRhZ0dQUigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1w
dHlWYWx1ZVRhZykpOwogI2VuZGlmCiAgICAgfQotICAgIAorCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KICAgICBKdW1wIGJyYW5jaFN0cnVjdHVyZShSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRp
dGlvbiwgVCBsZWZ0SGFuZFNpZGUsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKQEAgLTgz
Miw2ICs4MzIsMTUgQEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogCisgICAgdm9pZCBib3hCb29s
ZWFuUGF5bG9hZChib29sIHZhbHVlLCBHUFJSZWcgcGF5bG9hZEdQUikKKyAgICB7CisjaWYgVVNF
KEpTVkFMVUU2NCkKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSArIHZhbHVl
KSwgcGF5bG9hZEdQUik7CisjZWxzZQorICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMih2YWx1ZSks
IHBheWxvYWRHUFIpOworI2VuZGlmCisgICAgfQorCiAgICAgdm9pZCBib3hCb29sZWFuKEdQUlJl
ZyBib29sR1BSLCBKU1ZhbHVlUmVncyBib3hlZFJlZ3MpCiAgICAgewogICAgICAgICBib3hCb29s
ZWFuUGF5bG9hZChib29sR1BSLCBib3hlZFJlZ3MucGF5bG9hZEdQUigpKTsKQEAgLTgzOSw2ICs4
NDgsMTcgQEAgcHVibGljOgogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29s
ZWFuVGFnKSwgYm94ZWRSZWdzLnRhZ0dQUigpKTsKICNlbmRpZgogICAgIH0KKworICAgIHZvaWQg
Ym94SW50MzIoR1BSUmVnIGludEdQUiwgSlNWYWx1ZVJlZ3MgYm94ZWRSZWdzKQorICAgIHsKKyNp
ZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBtb3ZlKGludEdQUiwgYm94ZWRSZWdzLmdwcigpKTsK
KyAgICAgICAgb3I2NChUcnVzdGVkSW1tNjQoVGFnVHlwZU51bWJlciksIGJveGVkUmVncy5ncHIo
KSk7CisjZWxzZQorICAgICAgICBtb3ZlKGludEdQUiwgYm94ZWRSZWdzLnBheWxvYWRHUFIoKSk7
CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgYm94ZWRSZWdz
LnRhZ0dQUigpKTsKKyNlbmRpZgorICAgIH0KICAgICAKICAgICB2b2lkIGNhbGxFeGNlcHRpb25G
dXp6KCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDE4OTUx
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAg
LTY2LDcgKzY2LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBzdHJ1Y3QgSW5zdHJ1Y3Rpb247
CiAgICAgc3RydWN0IE9wZXJhbmRUeXBlczsKLSAgICBzdHJ1Y3QgUG9seW1vcnBoaWNBY2Nlc3NT
dHJ1Y3R1cmVMaXN0OwogICAgIHN0cnVjdCBTaW1wbGVKdW1wVGFibGU7CiAgICAgc3RydWN0IFN0
cmluZ0p1bXBUYWJsZTsKICAgICBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm87CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9y
LmNwcAkocmV2aXNpb24gMTg5NTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJ
bmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDIyICszNiwyNCBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogc3RhdGljIFN0cnVjdHVyZVN0dWJJbmZvKiBnYXJiYWdlU3R1Yklu
Zm8oKQogewotICAgIHN0YXRpYyBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBuZXcgU3Ry
dWN0dXJlU3R1YkluZm8oKTsKKyAgICBzdGF0aWMgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
ID0gbmV3IFN0cnVjdHVyZVN0dWJJbmZvKEFjY2Vzc1R5cGU6OkdldCk7CiAgICAgcmV0dXJuIHN0
dWJJbmZvOwogfQogCi1KSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6SklUSW5saW5lQ2FjaGVHZW5l
cmF0b3IoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNp
dGVJbmRleCBjYWxsU2l0ZSkKK0pJVElubGluZUNhY2hlR2VuZXJhdG9yOjpKSVRJbmxpbmVDYWNo
ZUdlbmVyYXRvcigKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUpCiAgICAg
OiBtX2NvZGVCbG9jayhjb2RlQmxvY2spCiB7Ci0gICAgbV9zdHViSW5mbyA9IG1fY29kZUJsb2Nr
ID8gbV9jb2RlQmxvY2stPmFkZFN0dWJJbmZvKCkgOiBnYXJiYWdlU3R1YkluZm8oKTsKKyAgICBt
X3N0dWJJbmZvID0gbV9jb2RlQmxvY2sgPyBtX2NvZGVCbG9jay0+YWRkU3R1YkluZm8oYWNjZXNz
VHlwZSkgOiBnYXJiYWdlU3R1YkluZm8oKTsKICAgICBtX3N0dWJJbmZvLT5jb2RlT3JpZ2luID0g
Y29kZU9yaWdpbjsKICAgICBtX3N0dWJJbmZvLT5jYWxsU2l0ZUluZGV4ID0gY2FsbFNpdGU7CiB9
CiAKIEpJVEJ5SWRHZW5lcmF0b3I6OkpJVEJ5SWRHZW5lcmF0b3IoCi0gICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwg
Y29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsCi0gICAgSlNWYWx1ZVJlZ3MgYmFzZSwg
SlNWYWx1ZVJlZ3MgdmFsdWUsIFNwaWxsUmVnaXN0ZXJzTW9kZSBzcGlsbE1vZGUpCi0gICAgOiBK
SVRJbmxpbmVDYWNoZUdlbmVyYXRvcihjb2RlQmxvY2ssIGNvZGVPcmlnaW4sIGNhbGxTaXRlKQor
ICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRl
SW5kZXggY2FsbFNpdGUsIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSwKKyAgICBjb25zdCBSZWdpc3Rl
clNldCYgdXNlZFJlZ2lzdGVycywgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUs
CisgICAgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSkKKyAgICA6IEpJVElubGluZUNhY2hl
R2VuZXJhdG9yKGNvZGVCbG9jaywgY29kZU9yaWdpbiwgY2FsbFNpdGUsIGFjY2Vzc1R5cGUpCiAg
ICAgLCBtX2Jhc2UoYmFzZSkKICAgICAsIG1fdmFsdWUodmFsdWUpCiB7CkBAIC0xMTQsNyArMTE2
LDggQEAgdm9pZCBKSVRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoQwogSklUR2V0QnlJ
ZEdlbmVyYXRvcjo6SklUR2V0QnlJZEdlbmVyYXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBjb25zdCBS
ZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywKICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVl
UmVncyB2YWx1ZSwgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSkKLSAgICA6IEpJVEJ5SWRH
ZW5lcmF0b3IoY29kZUJsb2NrLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgdXNlZFJlZ2lzdGVycywg
YmFzZSwgdmFsdWUsIHNwaWxsTW9kZSkKKyAgICA6IEpJVEJ5SWRHZW5lcmF0b3IoCisgICAgICAg
IGNvZGVCbG9jaywgY29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OkdldCwgdXNlZFJl
Z2lzdGVycywgYmFzZSwgdmFsdWUsIHNwaWxsTW9kZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChi
YXNlLnBheWxvYWRHUFIoKSAhPSB2YWx1ZS50YWdHUFIoKSk7CiB9CkBAIC0xNDAsNyArMTQzLDgg
QEAgSklUUHV0QnlJZEdlbmVyYXRvcjo6SklUUHV0QnlJZEdlbmVyYXRvcgogICAgIENvZGVCbG9j
ayogY29kZUJsb2NrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNp
dGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLAogICAgIEpTVmFsdWVSZWdzIGJh
c2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc2NyYXRjaCwgU3BpbGxSZWdpc3RlcnNNb2Rl
IHNwaWxsTW9kZSwKICAgICBFQ01BTW9kZSBlY21hTW9kZSwgUHV0S2luZCBwdXRLaW5kKQotICAg
IDogSklUQnlJZEdlbmVyYXRvcihjb2RlQmxvY2ssIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCB1c2Vk
UmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSwgc3BpbGxNb2RlKQorICAgIDogSklUQnlJZEdlbmVyYXRv
cigKKyAgICAgICAgY29kZUJsb2NrLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6
UHV0LCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSwgc3BpbGxNb2RlKQogICAgICwgbV9zY3Jh
dGNoKHNjcmF0Y2gpCiAgICAgLCBtX2VjbWFNb2RlKGVjbWFNb2RlKQogICAgICwgbV9wdXRLaW5k
KHB1dEtpbmQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hl
R2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJ
bmxpbmVDYWNoZUdlbmVyYXRvci5oCShyZXZpc2lvbiAxODk1MTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMz
LDYgKzMzLDcgQEAKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiUHV0S2luZC5o
IgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCisjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8u
aCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTQxLDcgKzQyLDcgQEAgY2xhc3MgQ29kZUJsb2Nr
OwogY2xhc3MgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IgewogcHJvdGVjdGVkOgogICAgIEpJVElu
bGluZUNhY2hlR2VuZXJhdG9yKCkgeyB9Ci0gICAgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoQ29k
ZUJsb2NrKiwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCk7CisgICAgSklUSW5saW5lQ2FjaGVH
ZW5lcmF0b3IoQ29kZUJsb2NrKiwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgQWNjZXNzVHlw
ZSk7CiAgICAgCiBwdWJsaWM6CiAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvKCkgY29u
c3QgeyByZXR1cm4gbV9zdHViSW5mbzsgfQpAQCAtNTYsOCArNTcsOCBAQCBwcm90ZWN0ZWQ6CiAg
ICAgSklUQnlJZEdlbmVyYXRvcigpIHsgfQogCiAgICAgSklUQnlJZEdlbmVyYXRvcigKLSAgICAg
ICAgQ29kZUJsb2NrKiwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVnaXN0ZXJT
ZXQmLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwKLSAgICAgICAgU3BpbGxS
ZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSk7CisgICAgICAgIENvZGVCbG9jayosIENvZGVPcmlnaW4s
IENhbGxTaXRlSW5kZXgsIEFjY2Vzc1R5cGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiwgSlNWYWx1ZVJl
Z3MgYmFzZSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWUsIFNwaWxsUmVnaXN0ZXJzTW9kZSBz
cGlsbE1vZGUpOwogICAgIAogcHVibGljOgogICAgIHZvaWQgcmVwb3J0U2xvd1BhdGhDYWxsKE1h
Y3JvQXNzZW1ibGVyOjpMYWJlbCBzbG93UGF0aEJlZ2luLCBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBj
YWxsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3Bw
CShyZXZpc2lvbiAxODk1MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMsMjQgKzE2Myw2IEBAIEVuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGJhc2VWYWx1ZS5nZXQoZXhlYywgaWRlbnQsIHNsb3QpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0KEV4ZWNTdGF0ZSogZXhlYywg
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotCi0gICAgSWRlbnRpZmllciBpZGVu
dCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHVpZCk7Ci0gICAgQWNjZXNzVHlwZSBhY2Nlc3NU
eXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpOwotCi0g
ICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoYmFzZSk7Ci0gICAgUHJvcGVy
dHlTbG90IHNsb3QoYmFzZVZhbHVlKTsKLSAgICBib29sIGhhc1Jlc3VsdCA9IGJhc2VWYWx1ZS5n
ZXRQcm9wZXJ0eVNsb3QoZXhlYywgaWRlbnQsIHNsb3QpOwotICAgIAotICAgIGlmIChhY2Nlc3NU
eXBlID09IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSkKLSAg
ICAgICAgYnVpbGRHZXRCeUlETGlzdChleGVjLCBiYXNlVmFsdWUsIGlkZW50LCBzbG90LCAqc3R1
YkluZm8pOwotCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShoYXNSZXN1bHQ/IHNsb3QuZ2V0
VmFsdWUoZXhlYywgaWRlbnQpIDoganNVbmRlZmluZWQoKSk7Ci19Ci0KIEVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywg
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwpAQCAtMTk3LDcg
KzE3OSw2IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKICAgICAg
ICAgc3R1YkluZm8tPnNlZW4gPSB0cnVlOwogICAgIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoaGFzUmVzdWx0PyBzbG90LmdldFZhbHVlKGV4ZWMsIGlkZW50KSA6IGpzVW5kZWZpbmVkKCkp
OwotCiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW5PcHRpbWl6
ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgSlNDZWxsKiBi
YXNlLCBVbmlxdWVkU3RyaW5nSW1wbCoga2V5KQpAQCAtMzk0LDkwICszNzUsNiBAQCB2b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjCiAgICAgICAgIHN0dWJJbmZvLT5zZWVu
ID0gdHJ1ZTsKIH0KIAotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RC
dWlsZExpc3QoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIFVu
aXF1ZWRTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCi0gICAgSWRlbnRp
ZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHVpZCk7Ci0gICAgQWNjZXNzVHlw
ZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5
cGUpOwotCi0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OwotICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKTsK
LSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIHRydWUsIGV4ZWMtPmNvZGVCbG9j
aygpLT5wdXRCeUlkQ29udGV4dCgpKTsKLSAgICAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IGJhc2VWYWx1ZS5pc0NlbGwoKSA/IGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCp2bSkg
OiBudWxscHRyOyAKLSAgICBiYXNlVmFsdWUucHV0KGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7
Ci0KLSAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5m
by0+YWNjZXNzVHlwZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJ1aWxkUHV0QnlJZExpc3Qo
ZXhlYywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIGlkZW50LCBzbG90LCAqc3R1YkluZm8sIE5vdERp
cmVjdCk7Ci19Ci0KLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0
QnVpbGRMaXN0KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBV
bmlxdWVkU3RyaW5nSW1wbCogdWlkKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIAotICAgIElkZW50
aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCB1aWQpOwotICAgIEFjY2Vzc1R5
cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NU
eXBlKTsKLQotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSk7
Ci0gICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlLCBmYWxzZSwgZXhlYy0+Y29kZUJs
b2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwotCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBi
YXNlVmFsdWUuaXNDZWxsKCkgPyBiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgqdm0pIDog
bnVsbHB0cjsKLSAgICBiYXNlVmFsdWUucHV0KGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7Ci0g
ICAgCi0gICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYnVpbGRQdXRCeUlk
TGlzdChleGVjLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgaWRlbnQsIHNsb3QsICpzdHViSW5mbywg
Tm90RGlyZWN0KTsKLX0KLQotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJl
Y3RTdHJpY3RCdWlsZExpc3QoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8sIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZEJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZt
KCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCi0g
ICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHVpZCk7Ci0gICAg
QWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8t
PmFjY2Vzc1R5cGUpOwotICAgIAotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKLSAgICBKU09iamVjdCogYmFzZU9iamVjdCA9IGFzT2JqZWN0KEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkQmFzZSkpOwotICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VP
YmplY3QsIHRydWUsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKLQotICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZU9iamVjdC0+c3RydWN0dXJlKCp2bSk7ICAgIAot
ICAgIGJhc2VPYmplY3QtPnB1dERpcmVjdCgqdm0sIGlkZW50LCB2YWx1ZSwgc2xvdCk7Ci0gICAg
Ci0gICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8t
PmFjY2Vzc1R5cGUpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYnVpbGRQdXRCeUlkTGlz
dChleGVjLCBiYXNlT2JqZWN0LCBzdHJ1Y3R1cmUsIGlkZW50LCBzbG90LCAqc3R1YkluZm8sIERp
cmVjdCk7Ci19Ci0KLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9u
U3RyaWN0QnVpbGRMaXN0KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRC
YXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIAotICAg
IElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCB1aWQpOwotICAgIEFj
Y2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5h
Y2Nlc3NUeXBlKTsKLQotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKTsKLSAgICBKU09iamVjdCogYmFzZU9iamVjdCA9IGFzT2JqZWN0KEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkQmFzZSkpOwotICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VPYmplY3Qs
IGZhbHNlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7Ci0KLSAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VPYmplY3QtPnN0cnVjdHVyZSgqdm0pOyAgICAKLSAgICBi
YXNlT2JqZWN0LT5wdXREaXJlY3QoKnZtLCBpZGVudCwgdmFsdWUsIHNsb3QpOwotCi0gICAgaWYg
KGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5
cGUpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYnVpbGRQdXRCeUlkTGlzdChleGVjLCBi
YXNlT2JqZWN0LCBzdHJ1Y3R1cmUsIGlkZW50LCBzbG90LCAqc3R1YkluZm8sIERpcmVjdCk7Ci19
Ci0KIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlU3RvcmFnZUFuZEZpbmlz
aFB1dChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBh
dGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2gu
Y3BwCShyZXZpc2lvbiAxODk1MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0
Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpZiBFTkFCTEUoSklU
KQogCi0jaW5jbHVkZSAiQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaCIKICNpbmNsdWRlICJC
aW5hcnlTd2l0Y2guaCIKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKICNpbmNsdWRlICJERkdP
cGVyYXRpb25zLmgiCkBAIC00MCw4ICszOSw3IEBACiAjaW5jbHVkZSAiSklUSW5saW5lcy5oIgog
I2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVk
ZSAiUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oIgotI2luY2x1ZGUgIlBvbHltb3JwaGljUHV0QnlJ
ZExpc3QuaCIKKyNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgogI2luY2x1ZGUgIlJlZ0V4
cE1hdGNoZXNBcnJheS5oIgogI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgog
I2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCkBAIC05NCwxMyArOTIsMTAgQEAgc3RhdGljIHZv
aWQgcmVwYXRjaENhbGwoQ29kZUJsb2NrKiBjb2RlQgogfQogCiBzdGF0aWMgdm9pZCByZXBhdGNo
QnlJZFNlbGZBY2Nlc3MoCi0gICAgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKLSAgICBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgY29uc3QgRnVu
Y3Rpb25QdHIgJnNsb3dQYXRoRnVuY3Rpb24sCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCisgICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0LCBjb25zdCBGdW5jdGlvblB0ciAmc2xvd1BhdGhGdW5jdGlvbiwK
ICAgICBib29sIGNvbXBhY3QpCiB7Ci0gICAgaWYgKHN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3Bl
cnR5V2F0Y2hwb2ludCgpKQotICAgICAgICB2bS5yZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQ
cm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7
Ci0gICAgCiAgICAgLy8gT25seSBvcHRpbWl6ZSBvbmNlIQogICAgIHJlcGF0Y2hDYWxsKGNvZGVC
bG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBzbG93UGF0aEZ1bmN0aW9uKTsKIApA
QCAtMTI5LDMzICsxMjQsNDQgQEAgc3RhdGljIHZvaWQgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKAog
I2VuZGlmCiB9CiAKLXN0YXRpYyB2b2lkIGNoZWNrT2JqZWN0UHJvcGVydHlDb25kaXRpb24oCi0g
ICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywKLSAgICBDQ2FsbEhlbHBlcnMm
IGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEdQUlJlZyBzY3Jh
dGNoR1BSKQotewotICAgIGlmIChjb25kaXRpb24uaXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVBy
b3BlcnR5V2F0Y2hwb2ludCgpKSB7Ci0gICAgICAgIGNvbmRpdGlvbi5vYmplY3QoKS0+c3RydWN0
dXJlKCktPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KAotICAgICAgICAgICAgc3R1YkluZm8uYWRk
V2F0Y2hwb2ludChjb2RlQmxvY2ssIGNvbmRpdGlvbikpOwotICAgICAgICByZXR1cm47CitzdGF0
aWMgdm9pZCByZXNldEdldEJ5SURDaGVja0FuZExvYWQoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvKQoreworICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyIHN0cnVjdHVyZUxhYmVsID0gc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoLShpbnRwdHJfdClz
dHViSW5mby5wYXRjaC5kZWx0YUNoZWNrSW1tVG9DYWxsKTsKKyAgICBpZiAoTWFjcm9Bc3NlbWJs
ZXI6OmNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goKSkgeworICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2gz
MldpdGhQYXRjaCgKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpzdGFydE9mUGF0Y2hhYmxl
QnJhbmNoMzJXaXRoUGF0Y2hPbkFkZHJlc3Moc3RydWN0dXJlTGFiZWwpLAorICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoCisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8TWFj
cm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+KHN0dWJJbmZvLnBhdGNoLmJhc2VHUFIpLAorICAgICAg
ICAgICAgICAgIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCisgICAgICAgICAgICBzdGF0
aWNfY2FzdDxpbnQzMl90Pih1bnVzZWRQb2ludGVyKSk7CiAgICAgfQorICAgIE1hY3JvQXNzZW1i
bGVyOjpyZXBhdGNoSW50MzIoc3RydWN0dXJlTGFiZWwsIHN0YXRpY19jYXN0PGludDMyX3Q+KHVu
dXNlZFBvaW50ZXIpKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoQ29tcGFjdChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29tcGFj
dEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCAwKTsKKyNl
bHNlCisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDb21wYWN0KHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFD
YWxsVG9UYWdMb2FkT3JTdG9yZSksIDApOworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ29t
cGFjdChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0
KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKSwgMCk7CisjZW5k
aWYKK30KIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY29uZGl0aW9uLm9iamVjdCgpLT5z
dHJ1Y3R1cmUoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChjb25kaXRpb24uc3RydWN0dXJlRW5zdXJl
c1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoc3RydWN0dXJlKSk7Ci0g
ICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoY29uZGl0aW9uLm9iamVj
dCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgZmFpbHVyZUNhc2VzLmFwcGVuZCgKLSAgICAgICAgaml0
LmJyYW5jaFN0cnVjdHVyZSgKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwK
LSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSksIHN0cnVjdHVyZSkpOwotfQotCi1zdGF0aWMgdm9pZCBjaGVj
a09iamVjdFByb3BlcnR5Q29uZGl0aW9ucygKLSAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCYgc2V0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvLAotICAgIENDYWxsSGVscGVycyYgaml0LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qm
IGZhaWx1cmVDYXNlcywgR1BSUmVnIHNjcmF0Y2hHUFIpCi17Ci0gICAgZm9yIChjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogc2V0KSB7Ci0gICAgICAgIGNoZWNrT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24oCi0gICAgICAgICAgICBjb25kaXRpb24sIGNvZGVCbG9jaywg
c3R1YkluZm8sIGppdCwgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSKTsKK3N0YXRpYyB2b2lkIHJl
c2V0UHV0QnlJRENoZWNrQW5kTG9hZChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7Cisg
ICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzIgc3RydWN0dXJlTGFiZWwgPSBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldCgtKGludHB0cl90KXN0dWJJbmZvLnBh
dGNoLmRlbHRhQ2hlY2tJbW1Ub0NhbGwpOworICAgIGlmIChNYWNyb0Fzc2VtYmxlcjo6Y2FuSnVt
cFJlcGxhY2VQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaCgpKSB7CisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNo
KAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0YXJ0T2ZQYXRjaGFibGVCcmFuY2gzMldp
dGhQYXRjaE9uQWRkcmVzcyhzdHJ1Y3R1cmVMYWJlbCksCisgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxl
cjo6UmVnaXN0ZXJJRD4oc3R1YkluZm8ucGF0Y2guYmFzZUdQUiksCisgICAgICAgICAgICAgICAg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGlu
dDMyX3Q+KHVudXNlZFBvaW50ZXIpKTsKICAgICB9CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0
Y2hJbnQzMihzdHJ1Y3R1cmVMYWJlbCwgc3RhdGljX2Nhc3Q8aW50MzJfdD4odW51c2VkUG9pbnRl
cikpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hJbnQz
MihzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5m
by5wYXRjaC5kZWx0YUNhbGxUb0xvYWRPclN0b3JlKSwgMCk7CisjZWxzZQorICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoSW50MzIoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJl
bDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSksIDAp
OworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIoc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9QYXls
b2FkTG9hZE9yU3RvcmUpLCAwKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCByZXBsYWNlV2l0
aEp1bXAoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25zdCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgdGFyZ2V0KQpAQCAtMTY4LDYgKzE3NCw4IEBAIHN0YXRpYyB2b2lkIHJlcGxhY2VXaXRo
SnVtcChTdHJ1Y3R1cmVTdHUKICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHRhcmdldCkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgcmVzZXRHZXRCeUlEQ2hlY2tBbmRMb2Fk
KHN0dWJJbmZvKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoCiAgICAg
ICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoCkBAIC0xNzUsNDI3
ICsxODMsNiBAQCBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoU3RydWN0dXJlU3R1CiAgICAg
ICAgIENvZGVMb2NhdGlvbkxhYmVsKHRhcmdldCkpOwogfQogCi1zdGF0aWMgdm9pZCBlbWl0UmVz
dG9yZVNjcmF0Y2goTWFjcm9Bc3NlbWJsZXImIHN0dWJKaXQsIGJvb2wgbmVlZFRvUmVzdG9yZVNj
cmF0Y2gsIEdQUlJlZyBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCYgc3VjY2Vzcywg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAmIGZhaWwsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWls
dXJlQ2FzZXMpCi17Ci0gICAgaWYgKG5lZWRUb1Jlc3RvcmVTY3JhdGNoKSB7Ci0gICAgICAgIHN0
dWJKaXQucG9wVG9SZXN0b3JlKHNjcmF0Y2hHUFIpOwotICAgICAgICAKLSAgICAgICAgc3VjY2Vz
cyA9IHN0dWJKaXQuanVtcCgpOwotICAgICAgICAKLSAgICAgICAgLy8gbGluayBmYWlsdXJlIGNh
c2VzIGhlcmUsIHNvIHdlIGNhbiBwb3Agc2NyYXRjaEdQUiwgYW5kIHRoZW4ganVtcCBiYWNrLgot
ICAgICAgICBmYWlsdXJlQ2FzZXMubGluaygmc3R1YkppdCk7Ci0gICAgICAgIAotICAgICAgICBz
dHViSml0LnBvcFRvUmVzdG9yZShzY3JhdGNoR1BSKTsKLSAgICAgICAgCi0gICAgICAgIGZhaWwg
PSBzdHViSml0Lmp1bXAoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBzdWNj
ZXNzID0gc3R1YkppdC5qdW1wKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGxpbmtSZXN0b3JlU2NyYXRj
aChMaW5rQnVmZmVyJiBwYXRjaEJ1ZmZlciwgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzcywgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbCwgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlcywgQ29kZUxvY2F0aW9uTGFiZWwgc3Vj
Y2Vzc0xhYmVsLCBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZUJlZ2luKQotewotICAgIHBhdGNo
QnVmZmVyLmxpbmsoc3VjY2Vzcywgc3VjY2Vzc0xhYmVsKTsKLSAgICAgICAgCi0gICAgaWYgKG5l
ZWRUb1Jlc3RvcmVTY3JhdGNoKSB7Ci0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbCwgc2xv
d0Nhc2VCZWdpbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgLy8gbGluayBm
YWlsdXJlIGNhc2VzIGRpcmVjdGx5IGJhY2sgdG8gbm9ybWFsIHBhdGgKLSAgICBwYXRjaEJ1ZmZl
ci5saW5rKGZhaWx1cmVDYXNlcywgc2xvd0Nhc2VCZWdpbik7Ci19Ci0KLXN0YXRpYyB2b2lkIGxp
bmtSZXN0b3JlU2NyYXRjaChMaW5rQnVmZmVyJiBwYXRjaEJ1ZmZlciwgYm9vbCBuZWVkVG9SZXN0
b3JlU2NyYXRjaCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBzdWNjZXNzLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsLCBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgZmFpbHVyZUNhc2VzKQotewotICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1
ZmZlciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcywg
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGVsdGFDYWxsVG9Eb25lKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZz
ZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwotfQotCi1lbnVtIEJ5SWRT
dHViS2luZCB7Ci0gICAgR2V0VmFsdWUsCi0gICAgR2V0VW5kZWZpbmVkLAotICAgIENhbGxHZXR0
ZXIsCi0gICAgQ2FsbEN1c3RvbUdldHRlciwKLSAgICBDYWxsU2V0dGVyLAotICAgIENhbGxDdXN0
b21TZXR0ZXIKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiB0b1N0cmluZyhCeUlkU3R1YktpbmQg
a2luZCkKLXsKLSAgICBzd2l0Y2ggKGtpbmQpIHsKLSAgICBjYXNlIEdldFZhbHVlOgotICAgICAg
ICByZXR1cm4gIkdldFZhbHVlIjsKLSAgICBjYXNlIEdldFVuZGVmaW5lZDoKLSAgICAgICAgcmV0
dXJuICJHZXRVbmRlZmluZWQiOwotICAgIGNhc2UgQ2FsbEdldHRlcjoKLSAgICAgICAgcmV0dXJu
ICJDYWxsR2V0dGVyIjsKLSAgICBjYXNlIENhbGxDdXN0b21HZXR0ZXI6Ci0gICAgICAgIHJldHVy
biAiQ2FsbEN1c3RvbUdldHRlciI7Ci0gICAgY2FzZSBDYWxsU2V0dGVyOgotICAgICAgICByZXR1
cm4gIkNhbGxTZXR0ZXIiOwotICAgIGNhc2UgQ2FsbEN1c3RvbVNldHRlcjoKLSAgICAgICAgcmV0
dXJuICJDYWxsQ3VzdG9tU2V0dGVyIjsKLSAgICBkZWZhdWx0OgotICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci19Ci0K
LXN0YXRpYyBCeUlkU3R1YktpbmQga2luZEZvcihjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCi17
Ci0gICAgaWYgKHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpKQotICAgICAgICByZXR1cm4gR2V0VmFs
dWU7Ci0gICAgaWYgKHNsb3QuaXNVbnNldCgpKQotICAgICAgICByZXR1cm4gR2V0VW5kZWZpbmVk
OwotICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkpCi0gICAgICAgIHJldHVybiBDYWxs
Q3VzdG9tR2V0dGVyOwotICAgIFJFTEVBU0VfQVNTRVJUKHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIo
KSk7Ci0gICAgcmV0dXJuIENhbGxHZXR0ZXI7Ci19Ci0KLXN0YXRpYyBGdW5jdGlvblB0ciBjdXN0
b21Gb3IoY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQotewotICAgIGlmICghc2xvdC5pc0NhY2hl
YWJsZUN1c3RvbSgpKQotICAgICAgICByZXR1cm4gRnVuY3Rpb25QdHIoKTsKLSAgICByZXR1cm4g
RnVuY3Rpb25QdHIoc2xvdC5jdXN0b21HZXR0ZXIoKSk7Ci19Ci0KLXN0YXRpYyBCeUlkU3R1Yktp
bmQga2luZEZvcihjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0gICAgUkVMRUFTRV9B
U1NFUlQoIXNsb3QuaXNDYWNoZWFibGVQdXQoKSk7Ci0gICAgaWYgKHNsb3QuaXNDYWNoZWFibGVT
ZXR0ZXIoKSkKLSAgICAgICAgcmV0dXJuIENhbGxTZXR0ZXI7Ci0gICAgUkVMRUFTRV9BU1NFUlQo
c2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpKTsKLSAgICByZXR1cm4gQ2FsbEN1c3RvbVNldHRlcjsK
LX0KLQotc3RhdGljIEZ1bmN0aW9uUHRyIGN1c3RvbUZvcihjb25zdCBQdXRQcm9wZXJ0eVNsb3Qm
IHNsb3QpCi17Ci0gICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkpCi0gICAgICAgIHJl
dHVybiBGdW5jdGlvblB0cigpOwotICAgIHJldHVybiBGdW5jdGlvblB0cihzbG90LmN1c3RvbVNl
dHRlcigpKTsKLX0KLQotc3RhdGljIGJvb2wgZ2VuZXJhdGVCeUlkU3R1YigKLSAgICBFeGVjU3Rh
dGUqIGV4ZWMsIEJ5SWRTdHViS2luZCBraW5kLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsCi0gICAgRnVuY3Rpb25QdHIgY3VzdG9tLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
IGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCi0gICAgSlNP
YmplY3QqIGFsdGVybmF0ZUJhc2UsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIGJvb2wgbG9hZFRhcmdldEZyb21Qcm94eSwKLSAgICBXYXRjaHBvaW50U2V0KiB3
YXRjaHBvaW50U2V0LCBDb2RlTG9jYXRpb25MYWJlbCBzdWNjZXNzTGFiZWwsIENvZGVMb2NhdGlv
bkxhYmVsIHNsb3dDYXNlTGFiZWwsCi0gICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJv
dXRpbmUpCi17Ci0gICAgQVNTRVJUKGNvbmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRp
dHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKTsKLSAgICAKLSAgICBWTSogdm0g
PSAmZXhlYy0+dm0oKTsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4o
c3R1YkluZm8ucGF0Y2guYmFzZUdQUik7Ci0gICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzID0gSlNW
YWx1ZVJlZ3MoCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgc3RhdGljX2Nhc3Q8R1BS
UmVnPihzdHViSW5mby5wYXRjaC52YWx1ZVRhZ0dQUiksCi0jZW5kaWYKLSAgICAgICAgc3RhdGlj
X2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZUdQUikpOwotICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gVGVtcFJlZ2lzdGVyU2V0KHN0dWJJbmZvLnBhdGNoLnVzZWRSZWdpc3RlcnMpLmdl
dEZyZWVHUFIoKTsKLSAgICBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gc2NyYXRjaEdQUiA9
PSBJbnZhbGlkR1BSUmVnOwotICAgIFJFTEVBU0VfQVNTRVJUKCFuZWVkVG9SZXN0b3JlU2NyYXRj
aCB8fCAoa2luZCA9PSBHZXRWYWx1ZSB8fCBraW5kID09IEdldFVuZGVmaW5lZCkpOwotICAgIAot
ICAgIENDYWxsSGVscGVycyBzdHViSml0KCZleGVjLT52bSgpLCBleGVjLT5jb2RlQmxvY2soKSk7
Ci0gICAgaWYgKG5lZWRUb1Jlc3RvcmVTY3JhdGNoKSB7Ci0gICAgICAgIHNjcmF0Y2hHUFIgPSBB
c3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoCi0gICAgICAgICAgICBiYXNlR1BSLCB2
YWx1ZVJlZ3MudGFnR1BSKCksIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwotICAgICAgICBzdHVi
Sml0LnB1c2hUb1NhdmUoc2NyYXRjaEdQUik7Ci0gICAgICAgIG5lZWRUb1Jlc3RvcmVTY3JhdGNo
ID0gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1
cmVDYXNlczsKLQotICAgIEdQUlJlZyBiYXNlRm9yR2V0R1BSOwotICAgIGlmIChsb2FkVGFyZ2V0
RnJvbVByb3h5KSB7Ci0gICAgICAgIGJhc2VGb3JHZXRHUFIgPSB2YWx1ZVJlZ3MucGF5bG9hZEdQ
UigpOwotICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoOCgKLSAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgCi0gICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgCi0g
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKFB1cmVGb3J3YXJkaW5nUHJv
eHlUeXBlKSkpOwotCi0gICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBKU1Byb3h5Ojp0YXJnZXRPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAg
ICAgICAKLSAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFN0cnVjdHVy
ZSgKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgCi0gICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLAotICAgICAgICAgICAgc3RydWN0dXJlKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
YmFzZUZvckdldEdQUiA9IGJhc2VHUFI7Ci0KLSAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChz
dHViSml0LmJyYW5jaFN0cnVjdHVyZSgKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlRm9yR2V0R1BS
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCAKLSAgICAgICAgICAgIHN0cnVjdHVyZSkp
OwotICAgIH0KLQotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7
Ci0gICAgaWYgKHN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIHx8IGNv
bmRpdGlvblNldC5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpCi0gICAgICAgIHZtLT5y
ZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHN0dWJJbmZv
LmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7Ci0KLSAgICBpZiAod2F0Y2hwb2ludFNldCkKLSAg
ICAgICAgd2F0Y2hwb2ludFNldC0+YWRkKHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2Nr
KSk7Ci0KLSAgICBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9ucygKLSAgICAgICAgY29uZGl0
aW9uU2V0LCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHViSml0LCBmYWlsdXJlQ2FzZXMsIHNjcmF0
Y2hHUFIpOwotCi0gICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgewotICAgICAgICBTdHJ1
Y3R1cmUqIGN1cnJTdHJ1Y3R1cmU7Ci0gICAgICAgIGlmIChjb25kaXRpb25TZXQuaXNFbXB0eSgp
KQotICAgICAgICAgICAgY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgY3VyclN0cnVjdHVyZSA9IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlv
bigpLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgY3VyclN0cnVjdHVyZS0+c3RhcnRX
YXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKCp2bSwgb2Zmc2V0KTsKLSAgICB9Ci0gICAg
Ci0gICAgR1BSUmVnIGJhc2VGb3JBY2Nlc3NHUFIgPSBJbnZhbGlkR1BSUmVnOwotICAgIGlmIChr
aW5kICE9IEdldFVuZGVmaW5lZCkgewotICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc0VtcHR5
KCkpIHsKLSAgICAgICAgICAgIC8vIFdlIGNvdWxkIGhhdmUgY2xvYmJlcmVkIHNjcmF0Y2hHUFIg
ZWFybGllciwgc28gd2UgaGF2ZSB0byByZWxvYWQgZnJvbSBiYXNlR1BSIHRvIGdldCB0aGUgdGFy
Z2V0LgotICAgICAgICAgICAgaWYgKGxvYWRUYXJnZXRGcm9tUHJveHkpCi0gICAgICAgICAgICAg
ICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTUHJv
eHk6OnRhcmdldE9mZnNldCgpKSwgYmFzZUZvckdldEdQUik7Ci0gICAgICAgICAgICBzdHViSml0
Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoYWx0ZXJuYXRlQmFzZSksIHNjcmF0
Y2hHUFIpOwotICAgICAgICAgICAgYmFzZUZvckFjY2Vzc0dQUiA9IHNjcmF0Y2hHUFI7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBGb3IgcHJveHkgb2JqZWN0cywgd2UgbmVlZCB0
byBkbyBhbGwgdGhlIFN0cnVjdHVyZSBjaGVja3MgYmVmb3JlIG1vdmluZyB0aGUgYmFzZUdQUiBp
bnRvCi0gICAgICAgICAgICAvLyBiYXNlRm9yR2V0R1BSIGJlY2F1c2UgaWYgd2UgZmFpbCBhbnkg
b2YgdGhlIGNoZWNrcyB0aGVuIHdlIHdvdWxkIGhhdmUgdGhlIHdyb25nIHZhbHVlIGluIGJhc2VH
UFIKLSAgICAgICAgICAgIC8vIG9uIHRoZSBzbG93IHBhdGguCi0gICAgICAgICAgICBpZiAobG9h
ZFRhcmdldEZyb21Qcm94eSkKLSAgICAgICAgICAgICAgICBzdHViSml0Lm1vdmUoc2NyYXRjaEdQ
UiwgYmFzZUZvckdldEdQUik7Ci0gICAgICAgICAgICBiYXNlRm9yQWNjZXNzR1BSID0gYmFzZUZv
ckdldEdQUjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEdQUlJlZyBsb2FkZWRWYWx1ZUdQUiA9
IEludmFsaWRHUFJSZWc7Ci0gICAgaWYgKGtpbmQgPT0gR2V0VW5kZWZpbmVkKQotICAgICAgICBz
dHViSml0Lm1vdmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgdmFsdWVSZWdzKTsKLSAgICBl
bHNlIGlmIChraW5kICE9IENhbGxDdXN0b21HZXR0ZXIgJiYga2luZCAhPSBDYWxsQ3VzdG9tU2V0
dGVyKSB7Ci0gICAgICAgIGlmIChraW5kID09IEdldFZhbHVlKQotICAgICAgICAgICAgbG9hZGVk
VmFsdWVHUFIgPSB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBsb2FkZWRWYWx1ZUdQUiA9IHNjcmF0Y2hHUFI7Ci0gICAgICAgIAotICAgICAgICBHUFJS
ZWcgc3RvcmFnZUdQUjsKLSAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNldCkpCi0gICAg
ICAgICAgICBzdG9yYWdlR1BSID0gYmFzZUZvckFjY2Vzc0dQUjsKLSAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUZv
ckFjY2Vzc0dQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgbG9hZGVkVmFsdWVHUFIp
OwotICAgICAgICAgICAgc3RvcmFnZUdQUiA9IGxvYWRlZFZhbHVlR1BSOwotICAgICAgICB9Ci0g
ICAgICAgIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHN0dWJKaXQubG9hZDY0KE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKG9mZnNl
dCkpLCBsb2FkZWRWYWx1ZUdQUik7Ci0jZWxzZQotICAgICAgICBpZiAoa2luZCA9PSBHZXRWYWx1
ZSkKLSAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
b3JhZ2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKG9mZnNldCkgKyBUYWdPZmZzZXQpLCB2YWx1
ZVJlZ3MudGFnR1BSKCkpOwotICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShvZmZzZXQpICsgUGF5bG9h
ZE9mZnNldCksIGxvYWRlZFZhbHVlR1BSKTsKLSNlbmRpZgotICAgIH0KLQotICAgIC8vIFN0dWZm
IGZvciBjdXN0b20gZ2V0dGVycy4KLSAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBvcGVyYXRpb25D
YWxsOwotICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGhhbmRsZXJDYWxsOwotCi0gICAgLy8gU3R1
ZmYgZm9yIEpTIGdldHRlcnMuCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBhZGRy
ZXNzT2ZMaW5rRnVuY3Rpb25DaGVjazsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBmYXN0UGF0
aENhbGw7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgc2xvd1BhdGhDYWxsOwotICAgIHN0ZDo6
dW5pcXVlX3B0cjxDYWxsTGlua0luZm8+IGNhbGxMaW5rSW5mbzsKLQotICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIHN1Y2Nlc3MsIGZhaWw7Ci0gICAgaWYgKGtpbmQgIT0gR2V0VmFsdWUgJiYga2lu
ZCAhPSBHZXRVbmRlZmluZWQpIHsKLSAgICAgICAgLy8gTmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3
aGVuZXZlciB0aGlzIGNhbGwgaXMgbWFkZSBpbiB0aGUgZnV0dXJlLCB3ZSByZW1lbWJlciB0aGUK
LSAgICAgICAgLy8gcGxhY2UgdGhhdCB3ZSBtYWRlIGl0IGZyb20uIEl0IGp1c3Qgc28gaGFwcGVu
cyB0byBiZSB0aGUgcGxhY2UgdGhhdCB3ZSBhcmUgYXQKLSAgICAgICAgLy8gcmlnaHQgbm93IQot
ICAgICAgICBzdHViSml0LnN0b3JlMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzdHVi
SW5mby5jYWxsU2l0ZUluZGV4LmJpdHMoKSksCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRh
Z0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQp
KSk7Ci0KLSAgICAgICAgaWYgKGtpbmQgPT0gQ2FsbEdldHRlciB8fCBraW5kID09IENhbGxTZXR0
ZXIpIHsKLSAgICAgICAgICAgIC8vIENyZWF0ZSBhIEpTIGNhbGwgdXNpbmcgYSBKUyBjYWxsIGlu
bGluZSBjYWNoZS4gQXNzdW1lIHRoYXQ6Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8g
LSBTUCBpcyBhbGlnbmVkIGFuZCByZXByZXNlbnRzIHRoZSBleHRlbnQgb2YgdGhlIGNhbGxpbmcg
Y29tcGlsZXIncyBzdGFjayB1c2FnZS4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyAt
IEZQIGlzIHNldCBjb3JyZWN0bHkgKGkuZS4gaXQgcG9pbnRzIHRvIHRoZSBjYWxsZXIncyBjYWxs
IGZyYW1lIGhlYWRlcikuCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gLSBTUCAtIEZQ
IGlzIGFuIGFsaWduZWQgZGlmZmVyZW5jZS4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAv
LyAtIEFueSBieXRlIGJldHdlZW4gRlAgKGV4Y2x1c2l2ZSkgYW5kIFNQIChpbmNsdXNpdmUpIGNv
dWxkIGJlIGxpdmUgaW4gdGhlIGNhbGxpbmcKLSAgICAgICAgICAgIC8vICAgY29kZS4KLSAgICAg
ICAgICAgIC8vCi0gICAgICAgICAgICAvLyBUaGVyZWZvcmUsIHdlIHRlbXBvcmFyaWx5IGdyb3cg
dGhlIHN0YWNrIGZvciB0aGUgcHVycG9zZSBvZiB0aGUgY2FsbCBhbmQgdGhlbgotICAgICAgICAg
ICAgLy8gc2hyaW5rIGl0IGFmdGVyLgotICAgICAgICAgICAgCi0gICAgICAgICAgICBjYWxsTGlu
a0luZm8gPSBzdGQ6Om1ha2VfdW5pcXVlPENhbGxMaW5rSW5mbz4oKTsKLQotICAgICAgICAgICAg
Ly8gRklYTUU6IElmIHdlIGdlbmVyYXRlZCBhIHBvbHltb3JwaGljIGNhbGwgc3R1YiB0aGF0IGp1
bXBlZCBiYWNrIHRvIHRoZSBnZXR0ZXIKLSAgICAgICAgICAgIC8vIHN0dWIsIHdoaWNoIHRoZW4g
anVtcGVkIGJhY2sgdG8gdGhlIG1haW4gY29kZSwgdGhlbiB3ZSdkIGhhdmUgYSByZWFjaGFiaWxp
dHkKLSAgICAgICAgICAgIC8vIHNpdHVhdGlvbiB0aGF0IHRoZSBHQyBkb2Vzbid0IGtub3cgYWJv
dXQuIFRoZSBHQyB3b3VsZCBlbnN1cmUgdGhhdCB0aGUgcG9seW1vcnBoaWMKLSAgICAgICAgICAg
IC8vIGNhbGwgc3R1YiBzdGF5ZWQgYWxpdmUsIGFuZCBpdCB3b3VsZCBlbnN1cmUgdGhhdCB0aGUg
bWFpbiBjb2RlIHN0YXllZCBhbGl2ZSwgYnV0Ci0gICAgICAgICAgICAvLyBpdCB3b3VsZG4ndCBr
bm93IHRoYXQgdGhlIGdldHRlciBzdHViIHdhcyBhbGl2ZS4gSWRlYWxseSBKSVQgc3R1YiByb3V0
aW5lcyB3b3VsZAotICAgICAgICAgICAgLy8gYmUgR0Mgb2JqZWN0cywgYW5kIHRoZW4gd2UnZCBi
ZSBhYmxlIHRvIHNheSB0aGF0IHRoZSBwb2x5bW9ycGhpYyBjYWxsIHN0dWIgaGFzIGEKLSAgICAg
ICAgICAgIC8vIHJlZmVyZW5jZSB0byB0aGUgZ2V0dGVyIHN0dWIuCi0gICAgICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4OTE0Ci0gICAgICAgICAg
ICBjYWxsTGlua0luZm8tPmRpc2FsbG93U3R1YnMoKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxsLCBzdHViSW5mby5j
b2RlT3JpZ2luLCBsb2FkZWRWYWx1ZUdQUik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBkb25lOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAv
LyBUaGVyZSBpcyBhICd0aGlzJyBhcmd1bWVudCBidXQgbm90aGluZyBlbHNlLgotICAgICAgICAg
ICAgdW5zaWduZWQgbnVtYmVyT2ZQYXJhbWV0ZXJzID0gMTsKLSAgICAgICAgICAgIC8vIC4uLiB1
bmxlc3Mgd2UncmUgY2FsbGluZyBhIHNldHRlci4KLSAgICAgICAgICAgIGlmIChraW5kID09IENh
bGxTZXR0ZXIpCi0gICAgICAgICAgICAgICAgbnVtYmVyT2ZQYXJhbWV0ZXJzKys7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIC8vIEdldCB0aGUgYWNjZXNzb3I7IGlmIHRoZXJlIGFpbid0IG9u
ZSB0aGVuIHRoZSByZXN1bHQgaXMganNVbmRlZmluZWQoKS4KLSAgICAgICAgICAgIGlmIChraW5k
ID09IENhbGxTZXR0ZXIpIHsKLSAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoCi0gICAg
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGxvYWRlZFZhbHVlR1BSLCBH
ZXR0ZXJTZXR0ZXI6Om9mZnNldE9mU2V0dGVyKCkpLAotICAgICAgICAgICAgICAgICAgICBsb2Fk
ZWRWYWx1ZUdQUik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHN0dWJK
aXQubG9hZFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
bG9hZGVkVmFsdWVHUFIsIEdldHRlclNldHRlcjo6b2Zmc2V0T2ZHZXR0ZXIoKSksCi0gICAgICAg
ICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIHJldHVyblVuZGVmaW5lZCA9IHN0dWJKaXQuYnJhbmNoVGVz
dFB0cigKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywgbG9hZGVkVmFsdWVH
UFIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlJlZ3NGb3JD
YWxsID0KLSAgICAgICAgICAgICAgICBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgbnVt
YmVyT2ZQYXJhbWV0ZXJzOwotICAgICAgICAgICAgCi0gICAgICAgICAgICB1bnNpZ25lZCBudW1i
ZXJPZkJ5dGVzRm9yQ2FsbCA9Ci0gICAgICAgICAgICAgICAgbnVtYmVyT2ZSZWdzRm9yQ2FsbCAq
IHNpemVvZihSZWdpc3RlcikgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIHVuc2lnbmVkIGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2FsbCA9Ci0g
ICAgICAgICAgICAgICAgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0
ZXMoKSwgbnVtYmVyT2ZCeXRlc0ZvckNhbGwpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBz
dHViSml0LnN1YlB0cigKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2FsbCksCi0gICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MgY2FsbGVlRnJhbWUgPSBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcygKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVn
aXN0ZXIsCi0gICAgICAgICAgICAgICAgLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENh
bGxlckZyYW1lQW5kUEMpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN0dWJKaXQuc3Rv
cmUzMigKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG51bWJl
ck9mUGFyYW1ldGVycyksCi0gICAgICAgICAgICAgICAgY2FsbGVlRnJhbWUud2l0aE9mZnNldCgK
LSAgICAgICAgICAgICAgICAgICAgSlNTdGFjazo6QXJndW1lbnRDb3VudCAqIHNpemVvZihSZWdp
c3RlcikgKyBQYXlsb2FkT2Zmc2V0KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN0dWJK
aXQuc3RvcmVDZWxsKAotICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSLCBjYWxsZWVGcmFt
ZS53aXRoT2Zmc2V0KEpTU3RhY2s6OkNhbGxlZSAqIHNpemVvZihSZWdpc3RlcikpKTsKLQotICAg
ICAgICAgICAgc3R1YkppdC5zdG9yZUNlbGwoCi0gICAgICAgICAgICAgICAgYmFzZUZvckdldEdQ
UiwKLSAgICAgICAgICAgICAgICBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KAotICAgICAgICAgICAg
ICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwKS5vZmZzZXQoKSAqIHNpemVvZihS
ZWdpc3RlcikpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ2FsbFNl
dHRlcikgewotICAgICAgICAgICAgICAgIHN0dWJKaXQuc3RvcmVWYWx1ZSgKLSAgICAgICAgICAg
ICAgICAgICAgdmFsdWVSZWdzLAotICAgICAgICAgICAgICAgICAgICBjYWxsZWVGcmFtZS53aXRo
T2Zmc2V0KAotICAgICAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnQoMSkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dDYXNlID0gc3R1
YkppdC5icmFuY2hQdHJXaXRoUGF0Y2goCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCBsb2FkZWRWYWx1ZUdQUiwgYWRkcmVzc09mTGlua0Z1bmN0aW9uQ2hlY2ssCi0g
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoMCkpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBmYXN0UGF0aENhbGwgPSBzdHViSml0Lm5lYXJDYWxsKCk7Ci0K
LSAgICAgICAgICAgIHN0dWJKaXQuYWRkUHRyKAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoY29kZUJsb2NrLT5zdGFja1BvaW50ZXJPZmZzZXQoKSAqIHNpemVv
ZihSZWdpc3RlcikpLAotICAgICAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7
Ci0gICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsR2V0dGVyKQotICAgICAgICAgICAgICAgIHN0
dWJKaXQuc2V0dXBSZXN1bHRzKHZhbHVlUmVncyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IGRvbmUuYXBwZW5kKHN0dWJKaXQuanVtcCgpKTsKLSAgICAgICAgICAgIHNsb3dDYXNlLmxpbmso
JnN0dWJKaXQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzdHViSml0Lm1vdmUobG9hZGVk
VmFsdWVHUFIsIEdQUkluZm86OnJlZ1QwKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAg
ICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
Q2VsbFRhZyksIEdQUkluZm86OnJlZ1QxKTsKLSNlbmRpZgotICAgICAgICAgICAgc3R1YkppdC5t
b3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mby5nZXQoKSksIEdQ
UkluZm86OnJlZ1QyKTsKLSAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCA9IHN0dWJKaXQubmVhckNh
bGwoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3R1YkppdC5hZGRQdHIoCi0gICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihjb2RlQmxvY2stPnN0YWNrUG9p
bnRlck9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksCi0gICAgICAgICAgICAgICAgR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAgICAgIGlmIChraW5kID09IENhbGxHZXR0ZXIp
Ci0gICAgICAgICAgICAgICAgc3R1YkppdC5zZXR1cFJlc3VsdHModmFsdWVSZWdzKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgZG9uZS5hcHBlbmQoc3R1YkppdC5qdW1wKCkpOwotICAgICAg
ICAgICAgcmV0dXJuVW5kZWZpbmVkLmxpbmsoJnN0dWJKaXQpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBpZiAoa2luZCA9PSBDYWxsR2V0dGVyKQotICAgICAgICAgICAgICAgIHN0dWJKaXQu
bW92ZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCB2YWx1ZVJlZ3MpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBkb25lLmxpbmsoJnN0dWJKaXQpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgLy8gZ2V0dGVyOiBFbmNvZGVkSlNWYWx1ZSAoKkdldFZhbHVlRnVuYykoRXhlY1N0
YXRlKiwgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSk7Ci0gICAgICAgICAgICAvLyBzZXR0ZXI6IHZvaWQgKCpQdXRWYWx1ZUZ1bmMpKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiBiYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSB2YWx1ZSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIGlmIChr
aW5kID09IENhbGxDdXN0b21HZXR0ZXIpCi0gICAgICAgICAgICAgICAgc3R1YkppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUZvckFjY2Vzc0dQUiwgYmFzZUZvckdldEdQUiwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocHJvcGVydHlOYW1lLmltcGwoKSkpOwotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKGJhc2VGb3JBY2Nlc3NHUFIsIGJhc2VGb3JHZXRHUFIsIHZhbHVlUmVncy5ncHIoKSk7
Ci0jZWxzZQotICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ2FsbEN1c3RvbUdldHRlcikKLSAgICAg
ICAgICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlRm9yQWNj
ZXNzR1BSLCBiYXNlRm9yR2V0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkNlbGxUYWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihwcm9wZXJ0eU5hbWUu
aW1wbCgpKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc3R1YkppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUZvckFjY2Vzc0dQUiwgYmFzZUZvckdldEdQUiwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgdmFsdWVSZWdz
LnBheWxvYWRHUFIoKSwgdmFsdWVSZWdzLnRhZ0dQUigpKTsKLSNlbmRpZgotICAgICAgICAgICAg
c3R1YkppdC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgJnZtLT50b3BDYWxs
RnJhbWUpOwotCi0gICAgICAgICAgICBvcGVyYXRpb25DYWxsID0gc3R1YkppdC5jYWxsKCk7Ci0g
ICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsQ3VzdG9tR2V0dGVyKQotICAgICAgICAgICAgICAg
IHN0dWJKaXQuc2V0dXBSZXN1bHRzKHZhbHVlUmVncyk7Ci0gICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBub0V4Y2VwdGlvbiA9IHN0dWJKaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKENDYWxs
SGVscGVyczo6SW52ZXJ0ZWRFeGNlcHRpb25DaGVjayk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHMoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHZt
KSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgICAgICAgICAgaGFuZGxlckNhbGwg
PSBzdHViSml0LmNhbGwoKTsKLSAgICAgICAgICAgIHN0dWJKaXQuanVtcFRvRXhjZXB0aW9uSGFu
ZGxlcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBub0V4Y2VwdGlvbi5saW5rKCZzdHVi
Sml0KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbWl0UmVzdG9yZVNjcmF0Y2goc3R1YkppdCwg
bmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHNjcmF0Y2hHUFIsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVD
YXNlcyk7Ci0gICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIHN0dWJKaXQsIGV4
ZWMtPmNvZGVCbG9jaygpLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwotICAgIGlmIChwYXRjaEJ1
ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0g
ICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwg
c3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzLCBzdWNjZXNzTGFiZWwsIHNsb3dDYXNlTGFiZWwp
OwotICAgIGlmIChraW5kID09IENhbGxDdXN0b21HZXR0ZXIgfHwga2luZCA9PSBDYWxsQ3VzdG9t
U2V0dGVyKSB7Ci0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsob3BlcmF0aW9uQ2FsbCwgY3VzdG9t
KTsKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhoYW5kbGVyQ2FsbCwgbG9va3VwRXhjZXB0aW9u
SGFuZGxlcik7Ci0gICAgfSBlbHNlIGlmIChraW5kID09IENhbGxHZXR0ZXIgfHwga2luZCA9PSBD
YWxsU2V0dGVyKSB7Ci0gICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucyhwYXRj
aEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoc2xvd1BhdGhDYWxsKSwKLSAgICAgICAgICAgIHBh
dGNoQnVmZmVyLmxvY2F0aW9uT2YoYWRkcmVzc09mTGlua0Z1bmN0aW9uQ2hlY2spLAotICAgICAg
ICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKGZhc3RQYXRoQ2FsbCkpOwotCi0g
ICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoCi0gICAgICAgICAgICBzbG93UGF0aENhbGwsIENvZGVM
b2NhdGlvbkxhYmVsKHZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUo
KSkpOwotICAgIH0KLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZSA9IEZJTkFM
SVpFX0NPREVfRk9SKAotICAgICAgICBleGVjLT5jb2RlQmxvY2soKSwgcGF0Y2hCdWZmZXIsCi0g
ICAgICAgICgiJXMgYWNjZXNzIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAg
ICAgICAgdG9TdHJpbmcoa2luZCksIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEo
KSwKLSAgICAgICAgICAgIHN1Y2Nlc3NMYWJlbC5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAg
Ci0gICAgaWYgKGtpbmQgPT0gQ2FsbEdldHRlciB8fCBraW5kID09IENhbGxTZXR0ZXIpCi0gICAg
ICAgIHN0dWJSb3V0aW5lID0gYWRvcHRSZWYobmV3IEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5l
KGNvZGUsICp2bSwgV1RGOjptb3ZlKGNhbGxMaW5rSW5mbykpKTsKLSAgICBlbHNlCi0gICAgICAg
IHN0dWJSb3V0aW5lID0gY3JlYXRlSklUU3R1YlJvdXRpbmUoY29kZSwgKnZtLCBjb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLCB0cnVlKTsKLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQog
ZW51bSBJbmxpbmVDYWNoZUFjdGlvbiB7CiAgICAgR2l2ZVVwT25DYWNoZSwKICAgICBSZXRyeUNh
Y2hlTGF0ZXIsCkBAIC02MjksMTMyICsyMTYsOTggQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9u
IHRyeUNhY2hlR2V0QnlJRAogICAgIGlmIChPcHRpb25zOjpmb3JjZUlDRmFpbHVyZSgpKQogICAg
ICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKICAgICAKLSAgICAvLyBGSVhNRTogV3JpdGUgYSB0
ZXN0IHRoYXQgcHJvdmVzIHdlIG5lZWQgdG8gY2hlY2sgZm9yIHJlY3Vyc2lvbiBoZXJlIGp1c3QK
LSAgICAvLyBsaWtlIHRoZSBpbnRlcnByZXRlciBkb2VzLCB0aGVuIGFkZCBhIGNoZWNrIGZvciBy
ZWN1cnNpb24uCisgICAgLy8gRklYTUU6IENhY2hlIHByb3BlcnR5IGFjY2VzcyBmb3IgaW1tZWRp
YXRlcy4KKyAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7CiAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygp
OwotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVy
ID0gY29kZUJsb2NrLT5vd25lclNjcmlwdEV4ZWN1dGFibGUoKTsKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogCi0gICAgaWYgKChpc0pTQXJyYXkoYmFzZVZhbHVlKSB8fCBpc0pTU3RyaW5nKGJh
c2VWYWx1ZSkpICYmIHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3Ro
KSB7Ci0gICAgICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5m
by5wYXRjaC5iYXNlR1BSKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBHUFJSZWcg
cmVzdWx0VGFnR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZVRh
Z0dQUik7Ci0jZW5kaWYKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHN0YXRpY19jYXN0PEdQ
UlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVHUFIpOwotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVy
IHN0dWJKaXQ7Ci0KLSAgICAgICAgaWYgKGlzSlNBcnJheShiYXNlVmFsdWUpKSB7Ci0gICAgICAg
ICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IFRlbXBSZWdpc3RlclNldChzdHViSW5mby5wYXRjaC51
c2VkUmVnaXN0ZXJzKS5nZXRGcmVlR1BSKCk7Ci0gICAgICAgICAgICBib29sIG5lZWRUb1Jlc3Rv
cmVTY3JhdGNoID0gZmFsc2U7Ci0KLSAgICAgICAgICAgIGlmIChzY3JhdGNoR1BSID09IEludmFs
aWRHUFJSZWcpIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgICAgIHNjcmF0Y2hH
UFIgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgcmVzdWx0R1BS
KTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgc2NyYXRjaEdQUiA9IEFzc2VtYmx5SGVscGVyczo6
c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCByZXN1bHRHUFIsIHJlc3VsdFRhZ0dQUik7Ci0jZW5k
aWYKLSAgICAgICAgICAgICAgICBzdHViSml0LnB1c2hUb1NhdmUoc2NyYXRjaEdQUik7Ci0gICAg
ICAgICAgICAgICAgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSB0cnVlOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzOwotCi0g
ICAgICAgICAgICBzdHViSml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAg
IGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6
Olplcm8sIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSXNBcnJheSkp
KTsKLSAgICAgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2hUZXN0MzIo
TWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spKSk7Ci0KLSAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0
cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkp
LCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoMCkpKTsKLQotICAgICAgICAgICAgc3R1YkppdC5tb3ZlKHNjcmF0
Y2hHUFIsIHJlc3VsdEdQUik7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIHN0dWJK
aXQub3I2NChBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW02NChUYWdUeXBlTnVtYmVyKSwgcmVz
dWx0R1BSKTsKLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgICAgICBzdHViSml0Lm1v
dmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCByZXN1
bHRUYWdHUFIpOwotI2VuZGlmCisgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IG5ld0Nh
c2U7CiAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3MsIGZhaWw7Ci0K
LSAgICAgICAgICAgIGVtaXRSZXN0b3JlU2NyYXRjaChzdHViSml0LCBuZWVkVG9SZXN0b3JlU2Ny
YXRjaCwgc2NyYXRjaEdQUiwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIHN0dWJKaXQsIGNv
ZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKLSAgICAgICAgICAgIGlmIChwYXRjaEJ1
ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBP
bkNhY2hlOwotCi0gICAgICAgICAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZmZXIsIG5l
ZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdHViSW5mbywgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2Vz
KTsKLQotICAgICAgICAgICAgc3R1YkluZm8uc3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZP
Ul9TVFVCKAotICAgICAgICAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLCBwYXRjaEJ1ZmZlciwK
LSAgICAgICAgICAgICAgICAoIkdldEJ5SWQgYXJyYXkgbGVuZ3RoIHN0dWIgZm9yICVzLCByZXR1
cm4gcG9pbnQgJXAiLAotICAgICAgICAgICAgICAgICAgICB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVC
bG9jaygpKS5kYXRhKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0
KAotICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25l
KS5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0KLSAgICAgICAgICAgIHJlcGxhY2VXaXRoSnVtcChz
dHViSW5mbywgc3R1YkluZm8uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwotICAgICAgICAg
ICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9w
ZXJhdGlvbkdldEJ5SWQpOworICAgIGlmIChpc0pTQXJyYXkoYmFzZVZhbHVlKSAmJiBwcm9wZXJ0
eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkKKyAgICAgICAgbmV3Q2FzZSA9
IEFjY2Vzc0Nhc2U6OmdldExlbmd0aCh2bSwgb3duZXIsIEFjY2Vzc0Nhc2U6OkFycmF5TGVuZ3Ro
KTsKKyAgICBlbHNlIGlmIChpc0pTU3RyaW5nKGJhc2VWYWx1ZSkgJiYgcHJvcGVydHlOYW1lID09
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpCisgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3ND
YXNlOjpnZXRMZW5ndGgodm0sIG93bmVyLCBBY2Nlc3NDYXNlOjpTdHJpbmdMZW5ndGgpOworICAg
IGVsc2UgeworICAgICAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGUoKSAmJiAhc2xvdC5pc1Vuc2V0
KCkpCisgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKIAorICAgICAgICBKU0NlbGwq
IGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUodm0pOworICAgICAgICAKKyAgICAgICAgLy8gT3B0
aW1pemUgc2VsZiBhY2Nlc3MuCisgICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUgPT0gQ2Fj
aGVUeXBlOjpVbnNldAorICAgICAgICAgICAgJiYgc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkKKyAg
ICAgICAgICAgICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUKKyAgICAgICAgICAgICYm
ICFzbG90LndhdGNocG9pbnRTZXQoKQorICAgICAgICAgICAgJiYgTWFjcm9Bc3NlbWJsZXI6Omlz
Q29tcGFjdFB0ckFsaWduZWRBZGRyZXNzT2Zmc2V0KG1heE9mZnNldFJlbGF0aXZlVG9QYXRjaGVk
U3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSkKKyAgICAgICAgICAgICYmIGFjdGlvbkZvckNl
bGwodm0sIGJhc2VDZWxsKSA9PSBBdHRlbXB0VG9DYWNoZQorICAgICAgICAgICAgJiYgIXN0cnVj
dHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKSB7CisgICAgICAgICAgICBzdHJ1
Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgc2xvdC5jYWNo
ZWRPZmZzZXQoKSk7CisgICAgICAgICAgICByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoY29kZUJsb2Nr
LCBzdHViSW5mbywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLCBvcGVyYXRpb25HZXRC
eUlkT3B0aW1pemUsIHRydWUpOworICAgICAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRTZWxm
KHZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVk
T2Zmc2V0KCkpOwogICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKICAgICAgICAg
fQogCi0gICAgICAgIC8vIFN0cmluZy5sZW5ndGggY2FzZQotICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBmYWlsdXJlID0gc3R1YkppdC5icmFuY2g4KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVP
ZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoU3RyaW5nVHlwZSkpOwotCi0g
ICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpT
U3RyaW5nOjpvZmZzZXRPZkxlbmd0aCgpKSwgcmVzdWx0R1BSKTsKLQotI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgICAgIHN0dWJKaXQub3I2NChBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW02NChU
YWdUeXBlTnVtYmVyKSwgcmVzdWx0R1BSKTsKLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAg
ICAgIHN0dWJKaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJ
bnQzMlRhZyksIHJlc3VsdFRhZ0dQUik7Ci0jZW5kaWYKKyAgICAgICAgYm9vbCBsb2FkVGFyZ2V0
RnJvbVByb3h5ID0gZmFsc2U7CisgICAgICAgIGlmIChiYXNlQ2VsbC0+dHlwZSgpID09IFB1cmVG
b3J3YXJkaW5nUHJveHlUeXBlKSB7CisgICAgICAgICAgICBiYXNlVmFsdWUgPSBqc0Nhc3Q8SlNQ
cm94eSo+KGJhc2VDZWxsKS0+dGFyZ2V0KCk7CisgICAgICAgICAgICBiYXNlQ2VsbCA9IGJhc2VW
YWx1ZS5hc0NlbGwoKTsKKyAgICAgICAgICAgIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1
cmUodm0pOworICAgICAgICAgICAgbG9hZFRhcmdldEZyb21Qcm94eSA9IHRydWU7CisgICAgICAg
IH0KIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzID0gc3R1YkppdC5qdW1w
KCk7CisgICAgICAgIElubGluZUNhY2hlQWN0aW9uIGFjdGlvbiA9IGFjdGlvbkZvckNlbGwodm0s
IGJhc2VDZWxsKTsKKyAgICAgICAgaWYgKGFjdGlvbiAhPSBBdHRlbXB0VG9DYWNoZSkKKyAgICAg
ICAgICAgIHJldHVybiBhY3Rpb247CiAKLSAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigq
dm0sIHN0dWJKaXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKLSAgICAgICAg
aWYgKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpCi0gICAgICAgICAgICByZXR1cm4g
R2l2ZVVwT25DYWNoZTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc2xvdC5pc1Vu
c2V0KCkgPyBpbnZhbGlkT2Zmc2V0IDogc2xvdC5jYWNoZWRPZmZzZXQoKTsKICAgICAgICAgCi0g
ICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSk7Ci0gICAg
ICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwotCi0g
ICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKLSAg
ICAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLCBwYXRjaEJ1ZmZlciwKLSAgICAgICAgICAgICgi
R2V0QnlJZCBzdHJpbmcgbGVuZ3RoIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAotICAg
ICAgICAgICAgICAgIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwgc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAgICAgICAgICAg
IHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwor
ICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CisgICAgICAg
IGlmIChzbG90LmlzVW5zZXQoKSB8fCBzbG90LnNsb3RCYXNlKCkgIT0gYmFzZVZhbHVlKSB7Cisg
ICAgICAgICAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5mbygpLnByb2hpYml0c1Byb3BlcnR5Q2Fj
aGluZygpIHx8IHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChzbG90Lmlz
VW5zZXQoKSkgeworICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0
aW9uc0ZvclByb3BlcnR5TWlzcygKKyAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLmltcGwoKSk7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdl
bmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAorICAgICAgICAgICAgICAg
ICAgICB2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBz
bG90LnNsb3RCYXNlKCksCisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZS5pbXBsKCkp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIWNvbmRpdGlv
blNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIG9mZnNldCA9IHNsb3QuaXNVbnNldCgpID8gaW52YWxp
ZE9mZnNldCA6IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpOworICAg
ICAgICB9CiAKLSAgICAgICAgcmVwbGFjZVdpdGhKdW1wKHN0dWJJbmZvLCBzdHViSW5mby5zdHVi
Um91dGluZS0+Y29kZSgpLmNvZGUoKSk7Ci0gICAgICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywg
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkKTsKKyAgICAgICAg
QWNjZXNzQ2FzZTo6QWNjZXNzVHlwZSB0eXBlOworICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJs
ZVZhbHVlKCkpCisgICAgICAgICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6TG9hZDsKKyAgICAgICAg
ZWxzZSBpZiAoc2xvdC5pc1Vuc2V0KCkpCisgICAgICAgICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6
TWlzczsKKyAgICAgICAgZWxzZSBpZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpKQorICAgICAg
ICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6OkdldHRlcjsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgdHlwZSA9IEFjY2Vzc0Nhc2U6OkN1c3RvbUdldHRlcjsKIAotICAgICAgICByZXR1cm4gUmV0
cnlDYWNoZUxhdGVyOworICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Z2V0KAorICAgICAg
ICAgICAgdm0sIG93bmVyLCB0eXBlLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBs
b2FkVGFyZ2V0RnJvbVByb3h5LAorICAgICAgICAgICAgc2xvdC53YXRjaHBvaW50U2V0KCksIHNs
b3QuaXNDYWNoZWFibGVDdXN0b20oKSA/IHNsb3QuY3VzdG9tR2V0dGVyKCkgOiBudWxscHRyKTsK
ICAgICB9CiAKLSAgICAvLyBGSVhNRTogQ2FjaGUgcHJvcGVydHkgYWNjZXNzIGZvciBpbW1lZGlh
dGVzLgotICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQotICAgICAgICByZXR1cm4gR2l2ZVVw
T25DYWNoZTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0ciA9IHN0dWJJbmZvLmFk
ZEFjY2Vzc0Nhc2UoCisgICAgICAgIHZtLCBjb2RlQmxvY2ssIHByb3BlcnR5TmFtZSwgc3RkOjpt
b3ZlKG5ld0Nhc2UpKTsKIAotICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZSgpICYmICFzbG90Lmlz
VW5zZXQoKSkKKyAgICBpZiAoIWNvZGVQdHIpCiAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hl
OwogCi0gICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKLSAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKnZtKTsKLQotICAgIElubGlu
ZUNhY2hlQWN0aW9uIGFjdGlvbiA9IGFjdGlvbkZvckNlbGwoKnZtLCBiYXNlQ2VsbCk7Ci0gICAg
aWYgKGFjdGlvbiAhPSBBdHRlbXB0VG9DYWNoZSkKLSAgICAgICAgcmV0dXJuIGFjdGlvbjsKLQot
ICAgIC8vIE9wdGltaXplIHNlbGYgYWNjZXNzLgotICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlVmFs
dWUoKQotICAgICAgICAmJiBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlCi0gICAgICAgICYm
ICFzbG90LndhdGNocG9pbnRTZXQoKQotICAgICAgICAmJiBNYWNyb0Fzc2VtYmxlcjo6aXNDb21w
YWN0UHRyQWxpZ25lZEFkZHJlc3NPZmZzZXQobWF4T2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9y
YWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSkgewotICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0
Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cygqdm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwot
ICAgICAgICByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoKnZtLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBz
dHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgb3BlcmF0aW9uR2V0
QnlJZEJ1aWxkTGlzdCwgdHJ1ZSk7Ci0gICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZigq
dm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7Ci0gICAgICAgIHJl
dHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0gICAgfQotCi0gICAgcmVwYXRjaENhbGwoY29kZUJsb2Nr
LCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3Qp
OworICAgIHJlcGxhY2VXaXRoSnVtcChzdHViSW5mbywgY29kZVB0cik7CisgICAgCiAgICAgcmV0
dXJuIFJldHJ5Q2FjaGVMYXRlcjsKIH0KIApAQCAtNzY2LDExMiArMzE5LDYgQEAgdm9pZCByZXBh
dGNoR2V0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVgogICAgICAgICByZXBhdGNoQ2FsbChleGVj
LT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRC
eUlkKTsKIH0KIAotc3RhdGljIHZvaWQgcGF0Y2hKdW1wVG9HZXRCeUlkU3R1YihTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8sIEpJVFN0dWJSb3V0aW5lKiBzdHViUm91dGluZSkKLXsKLSAgICBS
RUxFQVNFX0FTU0VSVChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfbGlz
dCk7Ci0gICAgaWYgKHN0dWJJbmZvLnUuZ2V0QnlJZExpc3QubGlzdC0+ZGlkU2VsZlBhdGNoaW5n
KCkpIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKAotICAgICAgICAgICAg
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldCgKLSAgICAgICAgICAgICAg
ICBzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1bXApLAotICAgICAgICAgICAgQ29kZUxvY2F0
aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICAKLSAgICByZXBsYWNlV2l0aEp1bXAoc3R1YkluZm8sIHN0dWJSb3V0aW5lLT5j
b2RlKCkuY29kZSgpKTsKLX0KLQotc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUJ1aWxkR2V0
QnlJRExpc3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvKQotewotICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpCi0gICAgICAgIHx8ICgh
c2xvdC5pc0NhY2hlYWJsZSgpICYmICFzbG90LmlzVW5zZXQoKSkpCi0gICAgICAgIHJldHVybiBH
aXZlVXBPbkNhY2hlOwotCi0gICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwo
KTsKLSAgICBib29sIGxvYWRUYXJnZXRGcm9tUHJveHkgPSBmYWxzZTsKLSAgICBpZiAoYmFzZUNl
bGwtPnR5cGUoKSA9PSBQdXJlRm9yd2FyZGluZ1Byb3h5VHlwZSkgewotICAgICAgICBiYXNlVmFs
dWUgPSBqc0Nhc3Q8SlNQcm94eSo+KGJhc2VDZWxsKS0+dGFyZ2V0KCk7Ci0gICAgICAgIGJhc2VD
ZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwotICAgICAgICBsb2FkVGFyZ2V0RnJvbVByb3h5ID0g
dHJ1ZTsKLSAgICB9Ci0KLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotCi0gICAgSW5saW5lQ2FjaGVBY3Rpb24g
YWN0aW9uID0gYWN0aW9uRm9yQ2VsbCgqdm0sIGJhc2VDZWxsKTsKLSAgICBpZiAoYWN0aW9uICE9
IEF0dGVtcHRUb0NhY2hlKQotICAgICAgICByZXR1cm4gYWN0aW9uOwotCi0gICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBiYXNlQ2VsbC0+c3RydWN0dXJlKCp2bSk7Ci0gICAgVHlwZUluZm8gdHlw
ZUluZm8gPSBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCk7Ci0KLSAgICBpZiAoc3R1YkluZm8ucGF0Y2gu
c3BpbGxNb2RlID09IE5lZWRUb1NwaWxsKSB7Ci0gICAgICAgIC8vIFdlIGNhbm5vdCBkbyBhcyBt
dWNoIGlubGluZSBjYWNoaW5nIGlmIHRoZSByZWdpc3RlcnMgd2VyZSBub3QgZmx1c2hlZCBwcmlv
ciB0byB0aGlzIEdldEJ5SWQuIEluIHBhcnRpY3VsYXIsCi0gICAgICAgIC8vIG5vbi1WYWx1ZSBj
YWNoZWQgcHJvcGVydGllcyByZXF1aXJlIHBsYW50aW5nIGNhbGxzLCB3aGljaCByZXF1aXJlcyBy
ZWdpc3RlcnMgdG8gaGF2ZSBiZWVuIGZsdXNoZWQuIFRodXMsCi0gICAgICAgIC8vIGlmIHJlZ2lz
dGVycyB3ZXJlIG5vdCBmbHVzaGVkLCBkb24ndCBkbyBub24tVmFsdWUgY2FjaGluZy4KLSAgICAg
ICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSAmJiAhc2xvdC5pc1Vuc2V0KCkpCi0gICAg
ICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICB9Ci0KLSAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQgPSBzbG90LmlzVW5zZXQoKSA/IGludmFsaWRPZmZzZXQgOiBzbG90LmNhY2hlZE9m
ZnNldCgpOwotICAgIAotICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNl
dDsKLSAgICBpZiAoc2xvdC5pc1Vuc2V0KCkgfHwgc2xvdC5zbG90QmFzZSgpICE9IGJhc2VWYWx1
ZSkgewotICAgICAgICBpZiAodHlwZUluZm8ucHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCkgfHwg
c3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOwotCi0gICAgICAgIGlmIChzbG90LmlzVW5zZXQoKSkKLSAgICAgICAgICAgIGNvbmRpdGlv
blNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcygqdm0sIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9y
UHJvdG90eXBlUHJvcGVydHlIaXQoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBl
eGVjLCBzdHJ1Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwgaWRlbnQuaW1wbCgpKTsKLQotICAgICAg
ICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gR2l2ZVVw
T25DYWNoZTsKLQotICAgICAgICBvZmZzZXQgPSBzbG90LmlzVW5zZXQoKSA/IGludmFsaWRPZmZz
ZXQgOiBjb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vZmZzZXQoKTsKLSAgICB9Ci0g
ICAgCi0gICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogbGlzdCA9IFBvbHltb3JwaGljR2V0QnlJ
ZExpc3Q6OmZyb20oc3R1YkluZm8pOwotICAgIGlmIChsaXN0LT5pc0Z1bGwoKSkgewotICAgICAg
ICAvLyBXZSBuZWVkIHRoaXMgZXh0cmEgY2hlY2sgYmVjYXVzZSBvZiByZWN1cnNpb24uCi0gICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgIH0KLSAgICAKLSAgICBSZWZQdHI8SklUU3R1
YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwotICAgIGJvb2wgcmVzdWx0ID0gZ2VuZXJhdGVCeUlkU3R1
YigKLSAgICAgICAgZXhlYywga2luZEZvcihzbG90KSwgaWRlbnQsIGN1c3RvbUZvcihzbG90KSwg
c3R1YkluZm8sIGNvbmRpdGlvblNldCwgc2xvdC5zbG90QmFzZSgpLCBvZmZzZXQsIAotICAgICAg
ICBzdHJ1Y3R1cmUsIGxvYWRUYXJnZXRGcm9tUHJveHksIHNsb3Qud2F0Y2hwb2ludFNldCgpLCAK
LSAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1Yklu
Zm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSwKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlz
dC0+Y3VycmVudFNsb3dQYXRoVGFyZ2V0KHN0dWJJbmZvKSksIHN0dWJSb3V0aW5lKTsKLSAgICBp
ZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgCi0gICAgR2V0
QnlJZEFjY2Vzczo6QWNjZXNzVHlwZSBhY2Nlc3NUeXBlOwotICAgIGlmIChzbG90LmlzQ2FjaGVh
YmxlVmFsdWUoKSkKLSAgICAgICAgYWNjZXNzVHlwZSA9IHNsb3Qud2F0Y2hwb2ludFNldCgpID8g
R2V0QnlJZEFjY2Vzczo6V2F0Y2hlZFN0dWIgOiBHZXRCeUlkQWNjZXNzOjpTaW1wbGVTdHViOwot
ICAgIGVsc2UgaWYgKHNsb3QuaXNVbnNldCgpKQotICAgICAgICBhY2Nlc3NUeXBlID0gR2V0QnlJ
ZEFjY2Vzczo6U2ltcGxlTWlzczsKLSAgICBlbHNlIGlmIChzbG90LmlzQ2FjaGVhYmxlR2V0dGVy
KCkpCi0gICAgICAgIGFjY2Vzc1R5cGUgPSBHZXRCeUlkQWNjZXNzOjpHZXR0ZXI7Ci0gICAgZWxz
ZQotICAgICAgICBhY2Nlc3NUeXBlID0gR2V0QnlJZEFjY2Vzczo6Q3VzdG9tR2V0dGVyOwotICAg
IAotICAgIGxpc3QtPmFkZEFjY2VzcyhHZXRCeUlkQWNjZXNzKAotICAgICAgICAqdm0sIGNvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGFjY2Vzc1R5cGUsIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1
cmUsCi0gICAgICAgIGNvbmRpdGlvblNldCkpOwotICAgIAotICAgIHBhdGNoSnVtcFRvR2V0QnlJ
ZFN0dWIoc3R1YkluZm8sIHN0dWJSb3V0aW5lLmdldCgpKTsKLSAgICAKLSAgICByZXR1cm4gbGlz
dC0+aXNGdWxsKCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOwotfQotCi12b2lk
IGJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBHQ1NhZmVDb25jdXJyZW50SklUTG9j
a2VyIGxvY2tlcihleGVjLT5jb2RlQmxvY2soKS0+bV9sb2NrLCBleGVjLT52bSgpLmhlYXApOwot
ICAgIAotICAgIGlmICh0cnlCdWlsZEdldEJ5SURMaXN0KGV4ZWMsIGJhc2VWYWx1ZSwgcHJvcGVy
dHlOYW1lLCBzbG90LCBzdHViSW5mbykgPT0gR2l2ZVVwT25DYWNoZSkKLSAgICAgICAgcmVwYXRj
aENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3Bl
cmF0aW9uR2V0QnlJZCk7Ci19Ci0KIHN0YXRpYyBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJIGFwcHJv
cHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3Qs
IFB1dEtpbmQgcHV0S2luZCkKIHsKICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkgewpAQCAt
ODg0LDM1OSArMzMxLDE2IEBAIHN0YXRpYyBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJIGFwcHJvcHJp
YXQKICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdDsKIH0KIAotc3RhdGljIFZf
SklUT3BlcmF0aW9uX0VTc2lKSkkgYXBwcm9wcmlhdGVMaXN0QnVpbGRpbmdQdXRCeUlkRnVuY3Rp
b24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRLaW5kIHB1dEtpbmQpCitzdGF0aWMg
Vl9KSVRPcGVyYXRpb25fRVNzaUpKSSBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUlkRnVuY3Rp
b24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRLaW5kIHB1dEtpbmQpCiB7CiAgICAg
aWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpIHsKICAgICAgICAgaWYgKHB1dEtpbmQgPT0gRGlyZWN0
KQotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExp
c3Q7Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0QnVpbGRMaXN0OworICAg
ICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKKyAg
ICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKICAgICB9CiAgICAg
aWYgKHB1dEtpbmQgPT0gRGlyZWN0KQotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERp
cmVjdE5vblN0cmljdEJ1aWxkTGlzdDsKLSAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0
cmljdEJ1aWxkTGlzdDsKLX0KLQotc3RhdGljIGJvb2wgZW1pdFB1dFJlcGxhY2VTdHViKAotICAg
IEV4ZWNTdGF0ZSogZXhlYywKLSAgICBjb25zdCBJZGVudGlmaWVyJiwKLSAgICBjb25zdCBQdXRQ
cm9wZXJ0eVNsb3QmIHNsb3QsCi0gICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAotICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlLAotICAgIENvZGVMb2NhdGlvbkxhYmVsIGZhaWx1cmVMYWJl
bCwKLSAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+JiBzdHViUm91dGluZSkKLXsKLSAgICBWTSog
dm0gPSAmZXhlYy0+dm0oKTsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJl
Zz4oc3R1YkluZm8ucGF0Y2guYmFzZUdQUik7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBH
UFJSZWcgdmFsdWVUYWdHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZh
bHVlVGFnR1BSKTsKLSNlbmRpZgotICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHN0YXRpY19jYXN0PEdQ
UlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVHUFIpOwotCi0gICAgU2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yIGFsbG9jYXRvcihzdHViSW5mby5wYXRjaC51c2VkUmVnaXN0ZXJzKTsKLSAgICBhbGxv
Y2F0b3IubG9jayhiYXNlR1BSKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIGFsbG9jYXRv
ci5sb2NrKHZhbHVlVGFnR1BSKTsKLSNlbmRpZgotICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlR1BS
KTsKLSAgICAKLSAgICBHUFJSZWcgc2NyYXRjaEdQUjEgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3Jh
dGNoR1BSKCk7Ci0KLSAgICBDQ2FsbEhlbHBlcnMgc3R1YkppdCh2bSwgZXhlYy0+Y29kZUJsb2Nr
KCkpOwotCi0gICAgc2l6ZV90IG51bWJlck9mUGFkZGluZ0J5dGVzID0gYWxsb2NhdG9yLnByZXNl
cnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKHN0dWJKaXQpOwotCi0gICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgYmFkU3RydWN0dXJlID0gc3R1YkppdC5icmFuY2hTdHJ1Y3R1cmUoCi0gICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKLSAgICAgICAgc3RydWN0
dXJlKTsKLQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpKQotICAgICAgICBzdHViSml0LnN0b3JlNjQodmFsdWVHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3Jh
Z2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVv
ZihKU1ZhbHVlKSkpOwotICAgIGVsc2UgewotICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
c2NyYXRjaEdQUjEpOwotICAgICAgICBzdHViSml0LnN0b3JlNjQodmFsdWVHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hl
ZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOwotICAgIH0KLSNlbGlmIFVTRShKU1ZBTFVF
MzJfNjQpCi0gICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSB7Ci0g
ICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5Jbmxp
bmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNU
X09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwotICAg
ICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5s
aW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVD
VF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMSk7Ci0gICAg
ICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2Ny
YXRjaEdQUjEsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9m
KEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0
cy5wYXlsb2FkKSkpOwotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNh
Y2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVk
VmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwotICAgIH0KLSNlbmRpZgotICAgIAotICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3M7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
ZmFpbHVyZTsKLSAgICAKLSAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkpIHsK
LSAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoc3R1Ykpp
dCwgbnVtYmVyT2ZQYWRkaW5nQnl0ZXMpOwotICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1w
KCk7Ci0gICAgICAgIAotICAgICAgICBiYWRTdHJ1Y3R1cmUubGluaygmc3R1YkppdCk7Ci0gICAg
ICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKHN0dWJKaXQsIG51
bWJlck9mUGFkZGluZ0J5dGVzKTsKLSAgICAgICAgZmFpbHVyZSA9IHN0dWJKaXQuanVtcCgpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKLSAgICAgICAg
ZmFpbHVyZSA9IGJhZFN0cnVjdHVyZTsKLSAgICB9Ci0gICAgCi0gICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcigqdm0sIHN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygpLCBKSVRDb21waWxhdGlvbkNh
bkZhaWwpOwotICAgIGlmIChwYXRjaEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0
YUNhbGxUb0RvbmUpKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmUsIGZhaWx1cmVMYWJl
bCk7Ci0gICAgICAgICAgICAKLSAgICBzdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NU
VUIoCi0gICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLCBwYXRjaEJ1ZmZlciwKLSAgICAgICAgKCJQ
dXRCeUlkIHJlcGxhY2Ugc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICAg
ICB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNo
LmRlbHRhQ2FsbFRvRG9uZSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgIAotICAgIHJldHVy
biB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCi0gICAgRXhl
Y1N0YXRlKiBleGVjLCBWTSogdm0sIFN0cnVjdHVyZSomIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQsIAotICAgIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQsCi0gICAgU3RydWN0dXJlKiYgb2xk
U3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KQotewot
ICAgIFByb3BlcnR5TmFtZSBwbmFtZShpZGVudCk7Ci0gICAgb2xkU3RydWN0dXJlID0gc3RydWN0
dXJlOwotICAgIGlmICghb2xkU3RydWN0dXJlLT5pc09iamVjdCgpIHx8IG9sZFN0cnVjdHVyZS0+
aXNEaWN0aW9uYXJ5KCkgfHwgcGFyc2VJbmRleChwbmFtZSkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIFByb3BlcnR5T2Zmc2V0IHByb3BlcnR5T2Zmc2V0OwotICAgIHN0cnVjdHVyZSA9
IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1
cnJlbnRseShvbGRTdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSwgMCwgcHJvcGVydHlPZmZzZXQpOwot
Ci0gICAgaWYgKCFzdHJ1Y3R1cmUgfHwgIXN0cnVjdHVyZS0+aXNPYmplY3QoKSB8fCBzdHJ1Y3R1
cmUtPmlzRGljdGlvbmFyeSgpIHx8ICFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNo
ZWFibGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gU2tpcCBvcHRpbWl6aW5n
IHRoZSBjYXNlIHdoZXJlIHdlIG5lZWQgYSByZWFsbG9jLCBpZiB3ZSBkb24ndCBoYXZlCi0gICAg
Ly8gZW5vdWdoIHJlZ2lzdGVycyB0byBtYWtlIGl0IGhhcHBlbi4KLSAgICBpZiAoR1BSSW5mbzo6
bnVtYmVyT2ZSZWdpc3RlcnMgPCA2Ci0gICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSAhPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkKLSAgICAgICAgJiYg
b2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICAvLyBTa2lwIG9wdGltaXppbmcgdGhlIGNhc2Ugd2hlcmUgd2UgbmVl
ZCByZWFsbG9jLCBhbmQgdGhlIHN0cnVjdHVyZSBoYXMKLSAgICAvLyBpbmRleGluZyBzdG9yYWdl
LgotICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3Qgc2tpcCB0aGlzISBJbXBsZW1lbnQgaXQhCi0g
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMDkxNAotICAg
IGlmIChvbGRTdHJ1Y3R1cmUtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGlmIChwdXRLaW5kID09IE5vdERpcmVjdCkgewotICAgICAgICBj
b25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3MoCi0g
ICAgICAgICAgICAqdm0sIGV4ZWMtPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKSwgZXhl
Yywgc3RydWN0dXJlLCBpZGVudC5pbXBsKCkpOwotICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5p
c1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQ29kZUxv
Y2F0aW9uTGFiZWwgZmFpbHVyZUxhYmVsID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxh
YmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSk7Ci0gICAgUmVm
UHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUgPSBzdHViSW5mby5zdHViUm91dGluZTsK
LQotICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRj
aC5iYXNlR1BSKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIEdQUlJlZyB2YWx1ZVRhZ0dQ
UiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVUYWdHUFIpOwotI2Vu
ZGlmCi0gICAgR1BSUmVnIHZhbHVlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5w
YXRjaC52YWx1ZUdQUik7Ci0gICAgCi0gICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9j
YXRvcihzdHViSW5mby5wYXRjaC51c2VkUmVnaXN0ZXJzKTsKLSAgICBhbGxvY2F0b3IubG9jayhi
YXNlR1BSKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIGFsbG9jYXRvci5sb2NrKHZhbHVl
VGFnR1BSKTsKLSNlbmRpZgotICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlR1BSKTsKLSAgICAKLSAg
ICBDQ2FsbEhlbHBlcnMgc3R1YkppdCh2bSk7Ci0gICAgCi0gICAgYm9vbCBuZWVkVGhpcmRTY3Jh
dGNoID0gZmFsc2U7Ci0gICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBv
bGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkKLSAgICAgICAgJiYgb2xkU3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgIG5lZWRUaGlyZFNjcmF0Y2ggPSB0cnVl
OwotICAgIH0KLQotICAgIEdQUlJlZyBzY3JhdGNoR1BSMSA9IGFsbG9jYXRvci5hbGxvY2F0ZVNj
cmF0Y2hHUFIoKTsKLSAgICBBU1NFUlQoc2NyYXRjaEdQUjEgIT0gYmFzZUdQUik7Ci0gICAgQVNT
RVJUKHNjcmF0Y2hHUFIxICE9IHZhbHVlR1BSKTsKLSAgICAKLSAgICBHUFJSZWcgc2NyYXRjaEdQ
UjIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7Ci0gICAgQVNTRVJUKHNjcmF0Y2hH
UFIyICE9IGJhc2VHUFIpOwotICAgIEFTU0VSVChzY3JhdGNoR1BSMiAhPSB2YWx1ZUdQUik7Ci0g
ICAgQVNTRVJUKHNjcmF0Y2hHUFIyICE9IHNjcmF0Y2hHUFIxKTsKLQotICAgIEdQUlJlZyBzY3Jh
dGNoR1BSMzsKLSAgICBpZiAobmVlZFRoaXJkU2NyYXRjaCkgewotICAgICAgICBzY3JhdGNoR1BS
MyA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKLSAgICAgICAgQVNTRVJUKHNjcmF0
Y2hHUFIzICE9IGJhc2VHUFIpOwotICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjMgIT0gdmFsdWVH
UFIpOwotICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjMgIT0gc2NyYXRjaEdQUjEpOwotICAgICAg
ICBBU1NFUlQoc2NyYXRjaEdQUjMgIT0gc2NyYXRjaEdQUjIpOwotICAgIH0gZWxzZQotICAgICAg
ICBzY3JhdGNoR1BSMyA9IEludmFsaWRHUFJSZWc7Ci0gICAgCi0gICAgc2l6ZV90IG51bWJlck9m
UGFkZGluZ0J5dGVzID0gYWxsb2NhdG9yLnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5n
KHN0dWJKaXQpOwotCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsK
LSAgICAgICAgICAgIAotICAgIEFTU0VSVChvbGRTdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBv
aW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOwotICAgIAotICAgIGZhaWx1cmVDYXNlcy5hcHBl
bmQoc3R1YkppdC5icmFuY2hTdHJ1Y3R1cmUoCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSksIAotICAgICAgICBvbGRTdHJ1Y3R1cmUpKTsKLSAgICAKLSAg
ICBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9ucygKLSAgICAgICAgY29uZGl0aW9uU2V0LCBl
eGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8sIHN0dWJKaXQsIGZhaWx1cmVDYXNlcywgc2NyYXRj
aEdQUjEpOwotCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwotICAgIAot
ICAgIGJvb2wgc2NyYXRjaEdQUjFIYXNTdG9yYWdlID0gZmFsc2U7Ci0gICAgCi0gICAgaWYgKHN0
cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNh
cGFjaXR5KCkpIHsKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBzdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7Ci0gICAgICAgIENvcGllZEFsbG9jYXRvciog
Y29waWVkQWxsb2NhdG9yID0gJnZtLT5oZWFwLnN0b3JhZ2VBbGxvY2F0b3IoKTsKLSAgICAgICAg
Ci0gICAgICAgIGlmICghb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAg
ICAgICAgICBzdHViSml0LmxvYWRQdHIoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWlu
aW5nLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoc3R1YkppdC5i
cmFuY2hTdWJQdHIoTWFjcm9Bc3NlbWJsZXI6OlNpZ25lZCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRjaEdQUjEpKTsKLSAgICAgICAgICAgIHN0dWJKaXQuc3Rv
cmVQdHIoc2NyYXRjaEdQUjEsICZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZyk7
Ci0gICAgICAgICAgICBzdHViSml0Lm5lZ1B0cihzY3JhdGNoR1BSMSk7Ci0gICAgICAgICAgICBz
dHViSml0LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKCZjb3BpZWRBbGxv
Y2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQpLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgICAgICBz
dHViSml0LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1ZhbHVl
KSksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNpemVfdCBv
bGRTaXplID0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFs
dWUpOwotICAgICAgICAgICAgQVNTRVJUKG5ld1NpemUgPiBvbGRTaXplKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIzKTsKLSAgICAg
ICAgICAgIHN0dWJKaXQubG9hZFB0cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5p
bmcsIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChzdHViSml0LmJy
YW5jaFN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6U2lnbmVkLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BSMSkpOwotICAgICAgICAgICAgc3R1YkppdC5zdG9y
ZVB0cihzY3JhdGNoR1BSMSwgJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsK
LSAgICAgICAgICAgIHN0dWJKaXQubmVnUHRyKHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAgIHN0
dWJKaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9j
YXRvci0+bV9jdXJyZW50UGF5bG9hZEVuZCksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAgIHN0
dWJKaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEpTVmFsdWUp
KSwgc2NyYXRjaEdQUjEpOwotICAgICAgICAgICAgLy8gV2UgaGF2ZSBzY3JhdGNoR1BSMSA9IG5l
dyBzdG9yYWdlLCBzY3JhdGNoR1BSMyA9IG9sZCBzdG9yYWdlLCBzY3JhdGNoR1BSMiA9IGF2YWls
YWJsZQotICAgICAgICAgICAgZm9yIChzaXplX3Qgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgb2xkU2l6
ZTsgb2Zmc2V0ICs9IHNpemVvZih2b2lkKikpIHsKLSAgICAgICAgICAgICAgICBzdHViSml0Lmxv
YWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjMsIC1zdGF0aWNfY2FzdDxw
dHJkaWZmX3Q+KG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZih2b2lkKikpKSwgc2Ny
YXRjaEdQUjIpOwotICAgICAgICAgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCAtc3RhdGljX2Nhc3Q8cHRyZGlm
Zl90PihvZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2Yodm9pZCopKSkpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzdHViSml0LnN0b3JlUHRyKHNj
cmF0Y2hHUFIxLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpKTsKLSAgICAgICAgc2NyYXRjaEdQUjFIYXNTdG9yYWdlID0gdHJ1ZTsK
LSAgICB9Ci0KLSAgICBBU1NFUlQob2xkU3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKSA9PSBz
dHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpKTsKLSAgICBBU1NFUlQob2xkU3RydWN0dXJlLT50
eXBlSW5mbygpLmlubGluZVR5cGVGbGFncygpID09IHN0cnVjdHVyZS0+dHlwZUluZm8oKS5pbmxp
bmVUeXBlRmxhZ3MoKSk7Ci0gICAgQVNTRVJUKG9sZFN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkg
PT0gc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICB1
aW50MzJfdCB2YWwgPSBzdHJ1Y3R1cmUtPmlkKCk7Ci0jZWxzZQotICAgIHVpbnQzMl90IHZhbCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KHN0cnVjdHVyZS0+aWQoKSk7Ci0jZW5kaWYKLSAg
ICBzdHViSml0LnN0b3JlMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih2YWwpLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
KTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hl
ZE9mZnNldCgpKSkKLSAgICAgICAgc3R1YkppdC5zdG9yZTY0KHZhbHVlR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkg
KyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNW
YWx1ZSkpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKCFzY3JhdGNoR1BSMUhhc1N0b3JhZ2Up
Ci0gICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUjEpOwotICAgICAg
ICBzdHViSml0LnN0b3JlNjQodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0
Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihK
U1ZhbHVlKSkpOwotICAgIH0KLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgaWYgKGlzSW5s
aW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSB7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUz
Mih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9m
ZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVk
T2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1
ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwotICAgICAgICBzdHViSml0LnN0b3JlMzIo
dmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0Ojpv
ZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hl
ZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFs
dWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICgh
c2NyYXRjaEdQUjFIYXNTdG9yYWdlKQotICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSks
IHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNo
ZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZh
bHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUz
Mih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNl
dEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JK
RUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7Ci0gICAg
fQotI2VuZGlmCi0gICAgCi0gICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IG51bGxw
dHI7Ci0KLSNpZiBFTkFCTEUoR0dDKQotICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxGbHVz
aFdyaXRlQmFycmllckJ1ZmZlcjsKLSAgICBpZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gc3R1YkppdC5qdW1w
SWZJc1JlbWVtYmVyZWRPckluRWRlbihiYXNlR1BSKTsKLSAgICAgICAgV3JpdGVCYXJyaWVyQnVm
ZmVyJiB3cml0ZUJhcnJpZXJCdWZmZXIgPSBzdHViSml0LnZtKCktPmhlYXAud3JpdGVCYXJyaWVy
QnVmZmVyKCk7Ci0gICAgICAgIHN0dWJKaXQubG9hZDMyKHdyaXRlQmFycmllckJ1ZmZlci5jdXJy
ZW50SW5kZXhBZGRyZXNzKCksIHNjcmF0Y2hHUFIyKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgbmVlZFRvRmx1c2ggPQotICAgICAgICAgICAgc3R1YkppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzY3JhdGNoR1BSMiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMih3cml0ZUJhcnJpZXJCdWZmZXIuY2FwYWNpdHkoKSkpOwotCi0gICAgICAgIHN0dWJK
aXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaEdQUjIpOwot
ICAgICAgICBzdHViSml0LnN0b3JlMzIoc2NyYXRjaEdQUjIsIHdyaXRlQmFycmllckJ1ZmZlci5j
dXJyZW50SW5kZXhBZGRyZXNzKCkpOwotCi0gICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cih3cml0ZUJhcnJpZXJCdWZmZXIuYnVmZmVyKCkpLCBzY3JhdGNo
R1BSMSk7Ci0gICAgICAgIC8vIFdlIHVzZSBhbiBvZmZzZXQgb2YgLXNpemVvZih2b2lkKikgYmVj
YXVzZSB3ZSBhbHJlYWR5IGFkZGVkIDEgdG8gc2NyYXRjaEdQUjIuCi0gICAgICAgIHN0dWJKaXQu
c3RvcmVQdHIoYmFzZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzY3JhdGNoR1BSMSwg
c2NyYXRjaEdQUjIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgc3RhdGljX2Nhc3Q8aW50MzJf
dD4oLXNpemVvZih2b2lkKikpKSk7Ci0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9u
ZVdpdGhCYXJyaWVyID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgICAgIG5lZWRUb0ZsdXNoLmxpbmso
JnN0dWJKaXQpOwotCi0gICAgICAgIHNjcmF0Y2hCdWZmZXIgPSB2bS0+c2NyYXRjaEJ1ZmZlckZv
clNpemUoYWxsb2NhdG9yLmRlc2lyZWRTY3JhdGNoQnVmZmVyU2l6ZUZvckNhbGwoKSk7Ci0gICAg
ICAgIGFsbG9jYXRvci5wcmVzZXJ2ZVVzZWRSZWdpc3RlcnNUb1NjcmF0Y2hCdWZmZXJGb3JDYWxs
KHN0dWJKaXQsIHNjcmF0Y2hCdWZmZXIsIHNjcmF0Y2hHUFIyKTsKLSAgICAgICAgc3R1YkppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUdQUik7Ci0gICAgICAgIGNhbGxGbHVzaFdy
aXRlQmFycmllckJ1ZmZlciA9IHN0dWJKaXQuY2FsbCgpOwotICAgICAgICBhbGxvY2F0b3IucmVz
dG9yZVVzZWRSZWdpc3RlcnNGcm9tU2NyYXRjaEJ1ZmZlckZvckNhbGwoc3R1YkppdCwgc2NyYXRj
aEJ1ZmZlciwgc2NyYXRjaEdQUjIpOwotCi0gICAgICAgIGRvbmVXaXRoQmFycmllci5saW5rKCZz
dHViSml0KTsKLSAgICAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKCZzdHViSml0
KTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3M7Ci0g
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbHVyZTsKLSAgICAgICAgICAgIAotICAgIGlmIChh
bGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMoKSkgewotICAgICAgICBhbGxvY2F0b3IucmVzdG9y
ZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhzdHViSml0LCBudW1iZXJPZlBhZGRpbmdCeXRlcyk7
Ci0gICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKLQotICAgICAgICBmYWlsdXJlQ2Fz
ZXMubGluaygmc3R1YkppdCk7Ci0gICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0
ZXJzQnlQb3BwaW5nKHN0dWJKaXQsIG51bWJlck9mUGFkZGluZ0J5dGVzKTsKLSAgICAgICAgZmFp
bHVyZSA9IHN0dWJKaXQuanVtcCgpOwotICAgIH0gZWxzZQotICAgICAgICBzdWNjZXNzID0gc3R1
YkppdC5qdW1wKCk7Ci0gICAgCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgb3BlcmF0aW9uQ2Fs
bDsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzSW5TbG93UGF0aDsKLSAgICAKLSAg
ICBpZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICBzbG93UGF0aC5saW5rKCZzdHViSml0KTsKLSAg
ICAgICAgCi0gICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5n
KHN0dWJKaXQsIG51bWJlck9mUGFkZGluZ0J5dGVzKTsKLSAgICAgICAgaWYgKCFzY3JhdGNoQnVm
ZmVyKQotICAgICAgICAgICAgc2NyYXRjaEJ1ZmZlciA9IHZtLT5zY3JhdGNoQnVmZmVyRm9yU2l6
ZShhbGxvY2F0b3IuZGVzaXJlZFNjcmF0Y2hCdWZmZXJTaXplRm9yQ2FsbCgpKTsKLSAgICAgICAg
YWxsb2NhdG9yLnByZXNlcnZlVXNlZFJlZ2lzdGVyc1RvU2NyYXRjaEJ1ZmZlckZvckNhbGwoc3R1
YkppdCwgc2NyYXRjaEJ1ZmZlciwgc2NyYXRjaEdQUjEpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoc2xvdC5jYWNoZWRPZmZzZXQoKSksIHZhbHVlR1BSKTsKLSNlbHNlCi0gICAgICAg
IHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VHUFIsIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoc2xvdC5jYWNoZWRPZmZzZXQoKSksIHZhbHVlR1BSLCB2YWx1ZVRhZ0dQUik7Ci0jZW5kaWYK
LSAgICAgICAgb3BlcmF0aW9uQ2FsbCA9IHN0dWJKaXQuY2FsbCgpOwotICAgICAgICBhbGxvY2F0
b3IucmVzdG9yZVVzZWRSZWdpc3RlcnNGcm9tU2NyYXRjaEJ1ZmZlckZvckNhbGwoc3R1YkppdCwg
c2NyYXRjaEJ1ZmZlciwgc2NyYXRjaEdQUjEpOwotICAgICAgICBzdWNjZXNzSW5TbG93UGF0aCA9
IHN0dWJKaXQuanVtcCgpOwotICAgIH0KLSAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVy
KCp2bSwgc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCksIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7
Ci0gICAgaWYgKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRv
RG9uZSkpOwotICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMoKSkKLSAgICAgICAg
cGF0Y2hCdWZmZXIubGluayhmYWlsdXJlLCBmYWlsdXJlTGFiZWwpOwotICAgIGVsc2UKLSAgICAg
ICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMsIGZhaWx1cmVMYWJlbCk7Ci0gICAgaWYg
KHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhvcGVyYXRpb25DYWxsLCBv
cGVyYXRpb25SZWFsbG9jYXRlU3RvcmFnZUFuZEZpbmlzaFB1dCk7Ci0gICAgICAgIHBhdGNoQnVm
ZmVyLmxpbmsoc3VjY2Vzc0luU2xvd1BhdGgsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5s
YWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSkpOwotI2lmIEVOQUJM
RShHR0MpCi0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbEZsdXNoV3JpdGVCYXJyaWVyQnVm
ZmVyLCBvcGVyYXRpb25GbHVzaFdyaXRlQmFycmllckJ1ZmZlcik7Ci0jZW5kaWYKLSAgICB9Ci0g
ICAgCi0gICAgc3R1YlJvdXRpbmUgPQotICAgICAgICBjcmVhdGVKSVRTdHViUm91dGluZSgKLSAg
ICAgICAgICAgIEZJTkFMSVpFX0NPREVfRk9SKAotICAgICAgICAgICAgICAgIGV4ZWMtPmNvZGVC
bG9jaygpLCBwYXRjaEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAoIlB1dEJ5SWQgJXN0cmFuc2l0
aW9uIHN0dWIgKCVwIC0+ICVwKSBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICAg
ICAgICAgICAgIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUt
Pm91dE9mTGluZUNhcGFjaXR5KCkgPyAicmVhbGxvY2F0aW5nICIgOiAiIiwKLSAgICAgICAgICAg
ICAgICAgICAgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsCi0gICAgICAgICAgICAgICAgICAgIHRv
Q1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwgc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5w
YXRjaC5kZWx0YUNhbGxUb0RvbmUpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKSwKLSAgICAgICAgICAg
ICp2bSwKLSAgICAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKSwK
LSAgICAgICAgICAgIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1
cmUtPm91dE9mTGluZUNhcGFjaXR5KCksCi0gICAgICAgICAgICBzdHJ1Y3R1cmUpOwotICAgIAot
ICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5v
blN0cmljdE9wdGltaXplOworICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0
aW1pemU7CiB9CiAKIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNv
bnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQpAQCAtMTI0NSw3ICszNDks
OCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAgICAgICAgIHJl
dHVybiBHaXZlVXBPbkNhY2hlOwogICAgIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhl
Yy0+Y29kZUJsb2NrKCk7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgU2NyaXB0RXhl
Y3V0YWJsZSogb3duZXIgPSBjb2RlQmxvY2stPm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpOworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAKICAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKICAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CkBAIC0xMjU2LDIxMCArMzYxLDEwOCBAQCBzdGF0
aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAgICAgaWYgKCFzdHJ1Y3R1cmUt
PnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKICAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7CiAKLSAgICAvLyBPcHRpbWl6ZSBzZWxmIGFjY2Vzcy4KKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8QWNjZXNzQ2FzZT4gbmV3Q2FzZTsKKwogICAgIGlmIChzbG90LmJhc2UoKSA9PSBiYXNlVmFs
dWUgJiYgc2xvdC5pc0NhY2hlYWJsZVB1dCgpKSB7Ci0gICAgICAgIGlmIChzbG90LnR5cGUoKSA9
PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5KSB7CisgICAgICAgIGlmIChzbG90LnR5cGUo
KSA9PSBQdXRQcm9wZXJ0eVNsb3Q6OkV4aXN0aW5nUHJvcGVydHkpIHsKKyAgICAgICAgICAgIHN0
cnVjdHVyZS0+ZGlkQ2FjaGVQcm9wZXJ0eVJlcGxhY2VtZW50KHZtLCBzbG90LmNhY2hlZE9mZnNl
dCgpKTsKKyAgICAgICAgCisgICAgICAgICAgICBwdHJkaWZmX3Qgb2Zmc2V0VG9QYXRjaGVkU3Rv
cmFnZSA9IG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgp
KTsKKyAgICAgICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpVbnNl
dAorICAgICAgICAgICAgICAgICYmIE1hY3JvQXNzZW1ibGVyOjppc1B0ckFsaWduZWRBZGRyZXNz
T2Zmc2V0KG9mZnNldFRvUGF0Y2hlZFN0b3JhZ2UpCisgICAgICAgICAgICAgICAgJiYgIXN0cnVj
dHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKSB7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKAorICAgICAgICAgICAgICAg
ICAgICBjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCks
CisgICAgICAgICAgICAgICAgICAgIGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlv
bihzbG90LCBwdXRLaW5kKSwgZmFsc2UpOworICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRQ
dXRCeUlkUmVwbGFjZSgKKyAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmU7Ci0gICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCBjb25kaXRpb25TZXQ7Ci0gICAgICAgICAgICBpZiAoIWVtaXRQdXRUcmFuc2l0
aW9uU3R1YihleGVjLCB2bSwgc3RydWN0dXJlLCBpZGVudCwgc2xvdCwgc3R1YkluZm8sIHB1dEtp
bmQsIG9sZFN0cnVjdHVyZSwgY29uZGl0aW9uU2V0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
R2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpyZXBsYWNl
KHZtLCBvd25lciwgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6
Ok5ld1Byb3BlcnR5KTsKIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1w
KAotICAgICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZz
ZXQoCi0gICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCks
Ci0gICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8uc3R1YlJvdXRpbmUt
PmNvZGUoKS5jb2RlKCkpKTsKLSAgICAgICAgICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUxpc3RCdWlsZGluZ1B1dEJ5SWRG
dW5jdGlvbihzbG90LCBwdXRLaW5kKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN0dWJJ
bmZvLmluaXRQdXRCeUlkVHJhbnNpdGlvbigqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCksIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIHB1dEtpbmQgPT0gRGly
ZWN0KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsK
LSAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPmlzT2JqZWN0KCkgfHwgc3Ry
dWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25D
YWNoZTsKIAotICAgICAgICBpZiAoIU1hY3JvQXNzZW1ibGVyOjppc1B0ckFsaWduZWRBZGRyZXNz
T2Zmc2V0KG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgp
KSkpCi0gICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldDsKKyAgICAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0K
KyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3Rp
bmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkoCisgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwg
aWRlbnQuaW1wbCgpLCAwLCBvZmZzZXQpOworICAgICAgICAgICAgaWYgKCFuZXdTdHJ1Y3R1cmUg
fHwgIW5ld1N0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogCi0gICAgICAgIHN0cnVjdHVyZS0+ZGlk
Q2FjaGVQcm9wZXJ0eVJlcGxhY2VtZW50KCp2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7Ci0gICAg
ICAgIHJlcGF0Y2hCeUlkU2VsZkFjY2Vzcygqdm0sIGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVj
dHVyZSwgaWRlbnQsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIGFwcHJvcHJpYXRlTGlzdEJ1aWxkaW5n
UHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpLCBmYWxzZSk7Ci0gICAgICAgIHN0dWJJbmZv
LmluaXRQdXRCeUlkUmVwbGFjZSgqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0
cnVjdHVyZSk7Ci0gICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0gICAgfQorICAgICAg
ICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+cHJldmlvdXNJRCgpID09IHN0cnVjdHVyZSk7Cisg
ICAgICAgICAgICBBU1NFUlQoIW5ld1N0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpOworICAgICAg
ICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+aXNPYmplY3QoKSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAgICAg
ICAgICAgIGlmIChwdXRLaW5kID09IE5vdERpcmVjdCkgeworICAgICAgICAgICAgICAgIGNvbmRp
dGlvblNldCA9CisgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3Bl
cnR5U2V0dGVyTWlzcygKKyAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBvd25lciwgZXhlYywg
bmV3U3RydWN0dXJlLCBpZGVudC5pbXBsKCkpOworICAgICAgICAgICAgICAgIGlmICghY29uZGl0
aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7CisgICAgICAgICAgICB9CiAKLSAgICBpZiAoKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSB8
fCBzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkpCi0gICAgICAgICYmIHN0dWJJbmZvLnBhdGNoLnNw
aWxsTW9kZSA9PSBEb250U3BpbGwpIHsKLSAgICAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBz
dHViUm91dGluZTsKKyAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjp0cmFuc2l0aW9u
KHZtLCBvd25lciwgc3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIG9mZnNldCwgY29uZGl0aW9uU2V0
KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpIHx8
IHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSkgeworICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJs
ZUN1c3RvbSgpKSB7CisgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25k
aXRpb25TZXQ7CiAKLSAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9u
U2V0OwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7Ci0gICAgICAgIGlmIChzbG90LmJh
c2UoKSAhPSBiYXNlVmFsdWUpIHsKLSAgICAgICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlQ3Vz
dG9tKCkpIHsKKyAgICAgICAgICAgIGlmIChzbG90LmJhc2UoKSAhPSBiYXNlVmFsdWUpIHsKICAg
ICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPQogICAgICAgICAgICAgICAgICAgICBnZW5lcmF0
ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdEN1c3RvbSgKLSAgICAgICAgICAgICAg
ICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0
dXJlLCBzbG90LmJhc2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50LmltcGwoKSk7
Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9Ci0g
ICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5
SGl0KAotICAgICAgICAgICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBvd25lciwg
ZXhlYywgc3RydWN0dXJlLCBzbG90LmJhc2UoKSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAg
ICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBHaXZlVXBPbkNhY2hlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFjb25k
aXRpb25TZXQuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hl
OwotICAgICAgICAgICAgb2Zmc2V0ID0gc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpID8gaW52YWxp
ZE9mZnNldCA6IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpOwotICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0K
LSAgICAgICAgUG9seW1vcnBoaWNQdXRCeUlkTGlzdCogbGlzdDsKLSAgICAgICAgbGlzdCA9IFBv
bHltb3JwaGljUHV0QnlJZExpc3Q6OmZyb20ocHV0S2luZCwgc3R1YkluZm8pOwotCi0gICAgICAg
IGJvb2wgcmVzdWx0ID0gZ2VuZXJhdGVCeUlkU3R1YigKLSAgICAgICAgICAgIGV4ZWMsIGtpbmRG
b3Ioc2xvdCksIGlkZW50LCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBjb25kaXRpb25TZXQs
IHNsb3QuYmFzZSgpLAotICAgICAgICAgICAgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGZhbHNlLCBudWxs
cHRyLAotICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZz
ZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSwKLSAgICAgICAgICAgIHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2Fs
bFRvU2xvd0Nhc2UpLAotICAgICAgICAgICAgc3R1YlJvdXRpbmUpOwotICAgICAgICBpZiAoIXJl
c3VsdCkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAKLSAgICAg
ICAgbGlzdC0+YWRkQWNjZXNzKFB1dEJ5SWRBY2Nlc3M6OnNldHRlcigKLSAgICAgICAgICAgICp2
bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKLSAgICAgICAgICAgIHNsb3QuaXNDYWNo
ZWFibGVTZXR0ZXIoKSA/IFB1dEJ5SWRBY2Nlc3M6OlNldHRlciA6IFB1dEJ5SWRBY2Nlc3M6OkN1
c3RvbVNldHRlciwKLSAgICAgICAgICAgIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBzbG90LmN1
c3RvbVNldHRlcigpLCBzdHViUm91dGluZSkpOwotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoSnVtcChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJ
bmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5l
LT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUxpc3RCdWlsZGluZ1B1dEJ5SWRGdW5j
dGlvbihzbG90LCBwdXRLaW5kKSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFsaXN0LT5pc0Z1
bGwoKSk7Ci0gICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0gICAgfQotCi0gICAgcmV0
dXJuIEdpdmVVcE9uQ2FjaGU7Ci19Ci0KLXZvaWQgcmVwYXRjaFB1dEJ5SUQoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKLXsKLSAgICBHQ1NhZmVDb25j
dXJyZW50SklUTG9ja2VyIGxvY2tlcihleGVjLT5jb2RlQmxvY2soKS0+bV9sb2NrLCBleGVjLT52
bSgpLmhlYXApOwotICAgIAotICAgIGlmICh0cnlDYWNoZVB1dEJ5SUQoZXhlYywgYmFzZVZhbHVl
LCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQpID09IEdp
dmVVcE9uQ2FjaGUpCi0gICAgICAgIHJlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlv
bihzbG90LCBwdXRLaW5kKSk7Ci19CiAKLXN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWls
ZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFBy
b3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1
dEtpbmQpCi17Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsK
LSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLQotICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgp
KQotICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgIGlmICghc2xvdC5pc0NhY2hl
YWJsZVB1dCgpICYmICFzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgJiYgIXNsb3QuaXNDYWNoZWFi
bGVTZXR0ZXIoKSkKLSAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICBpZiAoIXN0
cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQotICAgICAgICByZXR1cm4g
R2l2ZVVwT25DYWNoZTsKLQotICAgIC8vIE9wdGltaXplIHNlbGYgYWNjZXNzLgotICAgIGlmIChz
bG90LmJhc2UoKSA9PSBiYXNlVmFsdWUgJiYgc2xvdC5pc0NhY2hlYWJsZVB1dCgpKSB7Ci0gICAg
ICAgIFBvbHltb3JwaGljUHV0QnlJZExpc3QqIGxpc3Q7Ci0gICAgICAgIFJlZlB0cjxKSVRTdHVi
Um91dGluZT4gc3R1YlJvdXRpbmU7Ci0gICAgICAgIAotICAgICAgICBpZiAoc2xvdC50eXBlKCkg
PT0gUHV0UHJvcGVydHlTbG90OjpOZXdQcm9wZXJ0eSkgewotICAgICAgICAgICAgbGlzdCA9IFBv
bHltb3JwaGljUHV0QnlJZExpc3Q6OmZyb20ocHV0S2luZCwgc3R1YkluZm8pOwotICAgICAgICAg
ICAgaWYgKGxpc3QtPmlzRnVsbCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOyAvLyBXaWxsIGdldCBoZXJlIGR1ZSB0byByZWN1cnNpb24uCi0KLSAgICAgICAgICAgIFN0
cnVjdHVyZSogb2xkU3RydWN0dXJlOworICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6
OnNldHRlcigKKyAgICAgICAgICAgICAgICB2bSwgb3duZXIsIEFjY2Vzc0Nhc2U6OkN1c3RvbVNl
dHRlciwgc3RydWN0dXJlLCBpbnZhbGlkT2Zmc2V0LCBjb25kaXRpb25TZXQsCisgICAgICAgICAg
ICAgICAgc2xvdC5jdXN0b21TZXR0ZXIoKSk7CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7Ci0gICAgICAgICAgICBp
ZiAoIWVtaXRQdXRUcmFuc2l0aW9uU3R1YihleGVjLCB2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5h
bWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kLCBvbGRTdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQ7CiAKLSAgICAgICAgICAgIHN0dWJSb3V0aW5lID0gc3R1YkluZm8u
c3R1YlJvdXRpbmU7Ci0gICAgICAgICAgICBsaXN0LT5hZGRBY2Nlc3MoCi0gICAgICAgICAgICAg
ICAgUHV0QnlJZEFjY2Vzczo6dHJhbnNpdGlvbigKLSAgICAgICAgICAgICAgICAgICAgKnZtLCBj
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAotICAgICAgICAgICAgICAgICAgICBvbGRTdHJ1
Y3R1cmUsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LAotICAgICAgICAgICAgICAgICAgICBzdHVi
Um91dGluZSkpOworICAgICAgICAgICAgaWYgKHNsb3QuYmFzZSgpICE9IGJhc2VWYWx1ZSkgewor
ICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9CisgICAgICAgICAgICAgICAgICAgIGdlbmVy
YXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAorICAgICAgICAgICAgICAgICAg
ICAgICAgdm0sIG93bmVyLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLCBpZGVudC5pbXBs
KCkpOworICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICAgICAgb2Zm
c2V0ID0gY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCk7CisgICAgICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgp
OwogCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBsaXN0ID0gUG9seW1vcnBoaWNQdXRC
eUlkTGlzdDo6ZnJvbShwdXRLaW5kLCBzdHViSW5mbyk7Ci0gICAgICAgICAgICBpZiAobGlzdC0+
aXNGdWxsKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7IC8vIFdpbGwg
Z2V0IGhlcmUgZHVlIHRvIHJlY3Vyc2lvbi4KLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3Ry
dWN0dXJlLT5kaWRDYWNoZVByb3BlcnR5UmVwbGFjZW1lbnQoKnZtLCBzbG90LmNhY2hlZE9mZnNl
dCgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gV2UncmUgbm93IGNvbW1pdHRlZCB0
byBjcmVhdGluZyB0aGUgc3R1Yi4gTW9ncmlmeSB0aGUgbWV0YS1kYXRhIGFjY29yZGluZ2x5Lgot
ICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBlbWl0UHV0UmVwbGFjZVN0dWIoCi0gICAgICAgICAg
ICAgICAgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgCi0gICAgICAgICAgICAg
ICAgc3RydWN0dXJlLCBDb2RlTG9jYXRpb25MYWJlbChsaXN0LT5jdXJyZW50U2xvd1BhdGhUYXJn
ZXQoKSksIHN0dWJSb3V0aW5lKTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAg
ICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBs
aXN0LT5hZGRBY2Nlc3MoCi0gICAgICAgICAgICAgICAgUHV0QnlJZEFjY2Vzczo6cmVwbGFjZSgK
LSAgICAgICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAot
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIHN0dWJSb3V0aW5lKSk7CisgICAgICAgICAg
ICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6c2V0dGVyKAorICAgICAgICAgICAgICAgIHZtLCBvd25l
ciwgQWNjZXNzQ2FzZTo6U2V0dGVyLCBzdHJ1Y3R1cmUsIG9mZnNldCwgY29uZGl0aW9uU2V0LCBu
dWxscHRyKTsKICAgICAgICAgfQotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAo
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5k
ZWx0YUNhbGxUb0p1bXApLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNv
ZGUoKSkpOwotICAgICAgICBpZiAobGlzdC0+aXNGdWxsKCkpCi0gICAgICAgICAgICByZXBhdGNo
Q2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVH
ZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKLQotICAgICAgICByZXR1cm4g
UmV0cnlDYWNoZUxhdGVyOwogICAgIH0KIAotICAgIGlmICgoc2xvdC5pc0NhY2hlYWJsZUN1c3Rv
bSgpIHx8IHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSkKLSAgICAgICAgJiYgc3R1YkluZm8ucGF0
Y2guc3BpbGxNb2RlID09IERvbnRTcGlsbCkgewotICAgICAgICBSZWZQdHI8SklUU3R1YlJvdXRp
bmU+IHN0dWJSb3V0aW5lOwotICAgICAgICAKLSAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQgY29uZGl0aW9uU2V0OwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7Ci0gICAg
ICAgIGlmIChzbG90LmJhc2UoKSAhPSBiYXNlVmFsdWUpIHsKLSAgICAgICAgICAgIGlmIChzbG90
LmlzQ2FjaGVhYmxlQ3VzdG9tKCkpIHsKLSAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPQot
ICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0
eUhpdEN1c3RvbSgKLSAgICAgICAgICAgICAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBzbG90LmJhc2UoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHByb3BlcnR5TmFtZS5pbXBsKCkpOwotICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPQotICAgICAgICAgICAgICAgICAgICBnZW5l
cmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKLSAgICAgICAgICAgICAgICAg
ICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJl
LCBzbG90LmJhc2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZS5pbXBs
KCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxp
ZCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAg
b2Zmc2V0ID0gc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpID8gaW52YWxpZE9mZnNldCA6IGNvbmRp
dGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpOwotICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0KLSAgICAgICAgUG9seW1v
cnBoaWNQdXRCeUlkTGlzdCogbGlzdDsKLSAgICAgICAgbGlzdCA9IFBvbHltb3JwaGljUHV0QnlJ
ZExpc3Q6OmZyb20ocHV0S2luZCwgc3R1YkluZm8pOwotCi0gICAgICAgIGJvb2wgcmVzdWx0ID0g
Z2VuZXJhdGVCeUlkU3R1YigKLSAgICAgICAgICAgIGV4ZWMsIGtpbmRGb3Ioc2xvdCksIHByb3Bl
cnR5TmFtZSwgY3VzdG9tRm9yKHNsb3QpLCBzdHViSW5mbywgY29uZGl0aW9uU2V0LCBzbG90LmJh
c2UoKSwKLSAgICAgICAgICAgIG9mZnNldCwgc3RydWN0dXJlLCBmYWxzZSwgbnVsbHB0ciwKLSAg
ICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJ
bmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSksCi0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJl
bChsaXN0LT5jdXJyZW50U2xvd1BhdGhUYXJnZXQoKSksCi0gICAgICAgICAgICBzdHViUm91dGlu
ZSk7Ci0gICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7Ci0gICAgICAgIAotICAgICAgICBsaXN0LT5hZGRBY2Nlc3MoUHV0QnlJZEFjY2Vzczo6c2V0
dGVyKAotICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAotICAg
ICAgICAgICAgc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpID8gUHV0QnlJZEFjY2Vzczo6U2V0dGVy
IDogUHV0QnlJZEFjY2Vzczo6Q3VzdG9tU2V0dGVyLAotICAgICAgICAgICAgc3RydWN0dXJlLCBj
b25kaXRpb25TZXQsIHNsb3QuY3VzdG9tU2V0dGVyKCksIHN0dWJSb3V0aW5lKSk7Ci0KLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwgQ29kZUxvY2F0
aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICAgICAgaWYgKGxpc3Qt
PmlzRnVsbCgpKQotICAgICAgICAgICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihzbG90
LCBwdXRLaW5kKSk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIgPSBzdHViSW5m
by5hZGRBY2Nlc3NDYXNlKAorICAgICAgICB2bSwgY29kZUJsb2NrLCBpZGVudCwgc3RkOjptb3Zl
KG5ld0Nhc2UpKTsKKyAgICAKKyAgICBpZiAoIWNvZGVQdHIpCisgICAgICAgIHJldHVybiBHaXZl
VXBPbkNhY2hlOwogCi0gICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0gICAgfQotICAg
IHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgIHJlc2V0UHV0QnlJRENoZWNrQW5kTG9hZChzdHVi
SW5mbyk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKAorICAgICAgICBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KAorICAgICAgICAgICAgc3R1YkluZm8u
cGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoY29kZVB0
cikpOworICAgIAorICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CiB9CiAKLXZvaWQgYnVpbGRQ
dXRCeUlkTGlzdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9w
ZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRL
aW5kKQordm9pZCByZXBhdGNoUHV0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZh
bHVlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bywgUHV0S2luZCBwdXRLaW5kKQogewogICAgIEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXIgbG9j
a2VyKGV4ZWMtPmNvZGVCbG9jaygpLT5tX2xvY2ssIGV4ZWMtPnZtKCkuaGVhcCk7CiAgICAgCi0g
ICAgaWYgKHRyeUJ1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIHBy
b3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQpID09IEdpdmVVcE9uQ2FjaGUpCisg
ICAgaWYgKHRyeUNhY2hlUHV0QnlJRChleGVjLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgcHJvcGVy
dHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0S2luZCkgPT0gR2l2ZVVwT25DYWNoZSkKICAgICAg
ICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbiwgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsK
IH0KIApAQCAtMTQ3OSwxMDYgKzQ4MiwzNSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5
UmVwYXRjaEluKAogICAgIH0KICAgICAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMt
PmNvZGVCbG9jaygpOwotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gYmFzZS0+c3RydWN0dXJlKCp2bSk7CisgICAgU2NyaXB0RXhlY3V0YWJsZSog
b3duZXIgPSBjb2RlQmxvY2stPm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpOworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1cmUo
dm0pOwogICAgIAogICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsK
ICAgICBpZiAod2FzRm91bmQpIHsKICAgICAgICAgaWYgKHNsb3Quc2xvdEJhc2UoKSAhPSBiYXNl
KSB7CiAgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90
b3R5cGVQcm9wZXJ0eUhpdCgKLSAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudC5pbXBs
KCkpOworICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBl
eGVjLCBzdHJ1Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwgaWRlbnQuaW1wbCgpKTsKICAgICAgICAg
fQogICAgIH0gZWxzZSB7CiAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9u
c0ZvclByb3BlcnR5TWlzcygKLSAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBpZGVudC5pbXBsKCkpOworICAgICAgICAgICAgdm0s
IGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgaWRlbnQuaW1w
bCgpKTsKICAgICB9CiAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQogICAgICAgICBy
ZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAKLSAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVy
ZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdDsKLSAgICBpbnQgbGlzdEluZGV4OwotICAg
IAotICAgIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCA9IHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSk7
Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VMYWJlbDsKLSAgICAKLSAgICBpZiAoc3R1
YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpIHsKLSAgICAgICAgcG9seW1vcnBoaWNT
dHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCgpOwotICAg
ICAgICBzdHViSW5mby5pbml0SW5MaXN0KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgMCk7Ci0g
ICAgICAgIHNsb3dDYXNlTGFiZWwgPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxB
dE9mZnNldCgKLSAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2Up
OwotICAgICAgICBsaXN0SW5kZXggPSAwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2luX2xpc3QpOwotICAgICAgICBw
b2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBzdHViSW5mby51LmluTGlzdC5zdHJ1Y3R1cmVMaXN0
OwotICAgICAgICBsaXN0SW5kZXggPSBzdHViSW5mby51LmluTGlzdC5saXN0U2l6ZTsKLSAgICAg
ICAgc2xvd0Nhc2VMYWJlbCA9IENvZGVMb2NhdGlvbkxhYmVsKHBvbHltb3JwaGljU3RydWN0dXJl
TGlzdC0+bGlzdFtsaXN0SW5kZXggLSAxXS5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7Ci0g
ICAgICAgIAotICAgICAgICBpZiAobGlzdEluZGV4ID09IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVf
U0laRSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgIH0KLSAgICAKLSAg
ICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwotICAgIAotICAgIHsKLSAgICAg
ICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmJh
c2VHUFIpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihz
dHViSW5mby5wYXRjaC52YWx1ZUdQUik7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gVGVt
cFJlZ2lzdGVyU2V0KHN0dWJJbmZvLnBhdGNoLnVzZWRSZWdpc3RlcnMpLmdldEZyZWVHUFIoKTsK
LSAgICAgICAgCi0gICAgICAgIENDYWxsSGVscGVycyBzdHViSml0KHZtKTsKLSAgICAgICAgCi0g
ICAgICAgIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2g7Ci0gICAgICAgIGlmIChzY3JhdGNoR1BS
ID09IEludmFsaWRHUFJSZWcpIHsKLSAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBBc3NlbWJseUhl
bHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgcmVzdWx0R1BSKTsKLSAgICAgICAgICAg
IHN0dWJKaXQucHVzaFRvU2F2ZShzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIG5lZWRUb1Jlc3Rv
cmVTY3JhdGNoID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBuZWVkVG9SZXN0
b3JlU2NyYXRjaCA9IGZhbHNlOwotICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IGZhaWx1cmVDYXNlczsKLSAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0
LmJyYW5jaFN0cnVjdHVyZSgKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwK
LSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksCi0gICAgICAgICAgICBzdHJ1Y3R1cmUpKTsKLQotICAgICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgICAgICBpZiAoc3Ry
dWN0dXJlLT50eXBlSW5mbygpLm5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygpKQot
ICAgICAgICAgICAgdm0tPnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KGlkZW50
LCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwogCi0gICAgICAgIGlmIChzbG90
LndhdGNocG9pbnRTZXQoKSkKLSAgICAgICAgICAgIHNsb3Qud2F0Y2hwb2ludFNldCgpLT5hZGQo
c3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
QWNjZXNzQ2FzZT4gbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmluKAorICAgICAgICB2bSwgb3duZXIs
IHdhc0ZvdW5kID8gQWNjZXNzQ2FzZTo6SW5IaXQgOiBBY2Nlc3NDYXNlOjpJbk1pc3MsIHN0cnVj
dHVyZSwgY29uZGl0aW9uU2V0KTsKIAotICAgICAgICBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0
aW9ucygKLSAgICAgICAgICAgIGNvbmRpdGlvblNldCwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJ
bmZvLCBzdHViSml0LCBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOwotICAgICAgICAKLSNpZiBV
U0UoSlNWQUxVRTY0KQotICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHdhc0ZvdW5kKSkpLCByZXN1bHRHUFIp
OwotI2Vsc2UKLSAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIod2FzRm91bmQpLCByZXN1bHRHUFIpOwotI2VuZGlmCi0gICAgICAgIAotICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzLCBmYWlsOwotICAgICAgICAKLSAgICAgICAgZW1pdFJl
c3RvcmVTY3JhdGNoKHN0dWJKaXQsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzY3JhdGNoR1BSLCBz
dWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMpOwotICAgICAgICAKLSAgICAgICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcigqdm0sIHN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygpLCBKSVRDb21waWxh
dGlvbkNhbkZhaWwpOwotICAgICAgICBpZiAocGF0Y2hCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUo
KSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAKLSAgICAgICAg
bGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc3Vj
Y2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzLCBzdWNjZXNzTGFiZWwsIHNsb3dDYXNlTGFiZWwpOwot
ICAgICAgICAKLSAgICAgICAgc3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAot
ICAgICAgICAgICAgZXhlYy0+Y29kZUJsb2NrKCksIHBhdGNoQnVmZmVyLAotICAgICAgICAgICAg
KCJJbiAoZm91bmQgPSAlcykgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAg
ICAgICAgICAgd2FzRm91bmQgPyAieWVzIiA6ICJubyIsIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJs
b2NrKCkpLmRhdGEoKSwKLSAgICAgICAgICAgICAgICBzdWNjZXNzTGFiZWwuZXhlY3V0YWJsZUFk
ZHJlc3MoKSkpOwotICAgIH0KLSAgICAKLSAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxp
c3RbbGlzdEluZGV4XS5zZXQoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHVi
Um91dGluZSwgc3RydWN0dXJlLCB0cnVlKTsKLSAgICBzdHViSW5mby51LmluTGlzdC5saXN0U2l6
ZSsrOwotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVt
cCksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CisgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKHZt
LCBjb2RlQmxvY2ssIGlkZW50LCBzdGQ6Om1vdmUobmV3Q2FzZSkpOworICAgIGlmICghY29kZVB0
cikKKyAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
cmVwYXRjaEp1bXAoCisgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRP
ZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwKKyAgICAgICAgQ29kZUxvY2F0
aW9uTGFiZWwoY29kZVB0cikpOwogICAgIAotICAgIHJldHVybiBsaXN0SW5kZXggPCAoUE9MWU1P
UlBISUNfTElTVF9DQUNIRV9TSVpFIC0gMSkgPyBSZXRyeUNhY2hlTGF0ZXIgOiBHaXZlVXBPbkNh
Y2hlOworICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CiB9CiAKIHZvaWQgcmVwYXRjaEluKApA
QCAtMTkyOCwyMiArODYwLDcgQEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKAogdm9pZCByZXNl
dEdldEJ5SUQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bykKIHsKICAgICByZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbiwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKTsKLSAgICBDb2RlTG9jYXRpb25EYXRhTGFi
ZWwzMiBzdHJ1Y3R1cmVMYWJlbCA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFi
ZWwzMkF0T2Zmc2V0KC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0Y2guZGVsdGFDaGVja0ltbVRvQ2Fs
bCk7Ci0gICAgaWYgKE1hY3JvQXNzZW1ibGVyOjpjYW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJyYW5j
aDMyV2l0aFBhdGNoKCkpIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJldmVydEp1bXBSZXBs
YWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goCi0gICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6c3RhcnRPZlBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoT25BZGRyZXNzKHN0cnVj
dHVyZUxhYmVsKSwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAotICAgICAg
ICAgICAgICAgIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEPihzdHViSW5m
by5wYXRjaC5iYXNlR1BSKSwKLSAgICAgICAgICAgICAgICBKU0NlbGw6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4odW51c2VkUG9pbnRlcikp
OwotICAgIH0KLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEludDMyKHN0cnVjdHVyZUxhYmVs
LCBzdGF0aWNfY2FzdDxpbnQzMl90Pih1bnVzZWRQb2ludGVyKSk7Ci0jaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENvbXBhY3Qoc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNh
bGxUb0xvYWRPclN0b3JlKSwgMCk7Ci0jZWxzZQotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNo
Q29tcGFjdChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zm
c2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUpLCAwKTsKLSAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENvbXBhY3Qoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1BheWxv
YWRMb2FkT3JTdG9yZSksIDApOwotI2VuZGlmCisgICAgcmVzZXRHZXRCeUlEQ2hlY2tBbmRMb2Fk
KHN0dWJJbmZvKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1
bXApLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5w
YXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7CiB9CiAKQEAgLTE5NTEsMzMgKzg2OCwxOCBAQCB2
b2lkIHJlc2V0UHV0QnlJRChDb2RlQmxvY2sqIGNvZGVCbG9jaywgCiB7CiAgICAgVl9KSVRPcGVy
YXRpb25fRVNzaUpKSSB1bm9wdGltaXplZEZ1bmN0aW9uID0gYml0d2lzZV9jYXN0PFZfSklUT3Bl
cmF0aW9uX0VTc2lKSkk+KHJlYWRDYWxsVGFyZ2V0KGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICBWX0pJVE9wZXJhdGlvbl9F
U3NpSkpJIG9wdGltaXplZEZ1bmN0aW9uOwotICAgIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09
IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRp
b25QdXRCeUlkU3RyaWN0QnVpbGRMaXN0KQorICAgIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09
IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRp
b25QdXRCeUlkU3RyaWN0T3B0aW1pemUpCiAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3Bl
cmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOwotICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVu
Y3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9u
ID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3QpCisgICAgZWxzZSBpZiAodW5v
cHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0IHx8IHVub3B0aW1p
emVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplKQogICAgICAg
ICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsK
LSAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJl
Y3RTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0
U3RyaWN0QnVpbGRMaXN0KQorICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3Bl
cmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJh
dGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSkKICAgICAgICAgb3B0aW1pemVkRnVuY3Rp
b24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7CiAgICAgZWxzZSB7Ci0g
ICAgICAgIEFTU0VSVCh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJl
Y3ROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGly
ZWN0Tm9uU3RyaWN0QnVpbGRMaXN0KTsKKyAgICAgICAgQVNTRVJUKHVub3B0aW1pemVkRnVuY3Rp
b24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0
aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZSk7CiAgICAgICAg
IG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGlt
aXplOwogICAgIH0KICAgICByZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbiwgb3B0aW1pemVkRnVuY3Rpb24pOwotICAgIENvZGVMb2NhdGlvbkRhdGFMYWJl
bDMyIHN0cnVjdHVyZUxhYmVsID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJl
bDMyQXRPZmZzZXQoLShpbnRwdHJfdClzdHViSW5mby5wYXRjaC5kZWx0YUNoZWNrSW1tVG9DYWxs
KTsKLSAgICBpZiAoTWFjcm9Bc3NlbWJsZXI6OmNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNo
MzJXaXRoUGF0Y2goKSkgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmV2ZXJ0SnVtcFJlcGxh
Y2VtZW50VG9QYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaCgKLSAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpzdGFydE9mUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2hPbkFkZHJlc3Moc3RydWN0
dXJlTGFiZWwpLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoCi0gICAgICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+KHN0dWJJbmZv
LnBhdGNoLmJhc2VHUFIpLAotICAgICAgICAgICAgICAgIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQzMl90Pih1bnVzZWRQb2ludGVyKSk7
Ci0gICAgfQotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIoc3RydWN0dXJlTGFiZWws
IHN0YXRpY19jYXN0PGludDMyX3Q+KHVudXNlZFBvaW50ZXIpKTsKLSNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIoc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Mb2Fk
T3JTdG9yZSksIDApOwotI2Vsc2UKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEludDMyKHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBh
dGNoLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUpLCAwKTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6
cmVwYXRjaEludDMyKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zm
c2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKSwgMCk7Ci0j
ZW5kaWYKKyAgICByZXNldFB1dEJ5SURDaGVja0FuZExvYWQoc3R1YkluZm8pOwogICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoSnVtcChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0
T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nh
c2UpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNoUmVnaXN0
ZXJBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMTg5NTE1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NCw2ICs0NCw4IEBAIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6flNjcmF0
Y2hSZWdpc3QKIAogdm9pZCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OmxvY2soR1BSUmVnIHJl
ZykKIHsKKyAgICBpZiAocmVnID09IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybjsKICAg
ICB1bnNpZ25lZCBpbmRleCA9IEdQUkluZm86OnRvSW5kZXgocmVnKTsKICAgICBpZiAoaW5kZXgg
PT0gR1BSSW5mbzo6SW52YWxpZEluZGV4KQogICAgICAgICByZXR1cm47CkBAIC01MiwxMiArNTQs
MjAgQEAgdm9pZCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OmxvY2soR1BSUgogCiB2b2lkIFNj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6bG9jayhGUFJSZWcgcmVnKQogeworICAgIGlmIChyZWcg
PT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJuOwogICAgIHVuc2lnbmVkIGluZGV4ID0g
RlBSSW5mbzo6dG9JbmRleChyZWcpOwogICAgIGlmIChpbmRleCA9PSBGUFJJbmZvOjpJbnZhbGlk
SW5kZXgpCiAgICAgICAgIHJldHVybjsKICAgICBtX2xvY2tlZFJlZ2lzdGVycy5zZXRGUFJCeUlu
ZGV4KGluZGV4KTsKIH0KIAordm9pZCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OmxvY2soSlNW
YWx1ZVJlZ3MgcmVncykKK3sKKyAgICBsb2NrKHJlZ3MudGFnR1BSKCkpOworICAgIGxvY2socmVn
cy5wYXlsb2FkR1BSKCkpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rSW5mbz4KIHR5cGVu
YW1lIEJhbmtJbmZvOjpSZWdpc3RlclR5cGUgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjphbGxv
Y2F0ZVNjcmF0Y2goKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNo
UmVnaXN0ZXJBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oCShyZXZpc2lvbiAxODk1MTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MCwxMSArNDAsMTMgQEAgc3RydWN0IFNjcmF0Y2hCdWZmZXI7CiAKIGNsYXNz
IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciB7CiBwdWJsaWM6CisgICAgU2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yKCkgeyB9CiAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yKGNvbnN0IFJlZ2lz
dGVyU2V0JiB1c2VkUmVnaXN0ZXJzKTsKICAgICB+U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yKCk7
CiAKLSAgICB2b2lkIGxvY2soR1BSUmVnIHJlZyk7Ci0gICAgdm9pZCBsb2NrKEZQUlJlZyByZWcp
OworICAgIHZvaWQgbG9jayhHUFJSZWcpOworICAgIHZvaWQgbG9jayhGUFJSZWcpOworICAgIHZv
aWQgbG9jayhKU1ZhbHVlUmVncyk7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmFua0lu
Zm8+CiAgICAgdHlwZW5hbWUgQmFua0luZm86OlJlZ2lzdGVyVHlwZSBhbGxvY2F0ZVNjcmF0Y2go
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9u
IDE4OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29y
a2luZyBjb3B5KQpAQCAtMTg4LDYgKzE4OCw3IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9u
U3RyaW5nOwogICAgIHYoYm9vbCwgY2xvYmJlckFsbFJlZ3NJbkZUTElDU2xvd1BhdGgsICFBU1NF
UlRfRElTQUJMRUQsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGFzc3VtZUFsbFJlZ3NJbkZUTElD
QXJlTGl2ZSwgZmFsc2UsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGVuYWJsZUFjY2Vzc0lubGlu
aW5nLCB0cnVlLCBudWxscHRyKSBcCisgICAgdih1bnNpZ25lZCwgbWF4QWNjZXNzVmFyaWFudExp
c3RTaXplLCA4LCBudWxscHRyKSBcCiAgICAgdihib29sLCBlbmFibGVQb2x5dmFyaWFudERldmly
dHVhbGl6YXRpb24sIHRydWUsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGVuYWJsZVBvbHltb3Jw
aGljQWNjZXNzSW5saW5pbmcsIHRydWUsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGVuYWJsZVBv
bHltb3JwaGljQ2FsbElubGluaW5nLCB0cnVlLCBudWxscHRyKSBcCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260836</attachid>
            <date>2015-09-08 22:39:52 -0700</date>
            <delta_ts>2015-09-08 22:44:57 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>274302</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg5NTE1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0OCBA
QAorMjAxNS0wOS0wOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFRoZXJlIHNob3VsZCBiZSBvbmUgc3R1YiBoYW5naW5nIG9mZiBhbiBpbmxpbmUgY2FjaGUgdGhh
dCBjb250YWlucyBjb2RlIGZvciBhbGwgb2YgdGhlIGNhc2VzLCByYXRoZXIgdGhhbiBmb3JtaW5n
IGEgbGlua2VkIGxpc3QgY29uc2lzdGluZyBvZiBvbmUgc3R1YiBwZXIgY2FzZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4NzE3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBhIG1ham9yIHJl
d3JpdGUgb2YgdGhlIEpTQyBnZXQvcHV0L2luIGlubGluZSBjYWNoZXMgKElDcyksIG1vdGl2YXRl
ZCBieSB0aGUgbmVlZCB0byBhZGQKKyAgICAgICAgZmFuY3kgbmV3IGtpbmRzIG9mIGlubGluZSBj
YWNoZXMgZm9yIHByb3BlcnR5IHR5cGUgaW5mZXJlbmNlIChodHRwczovL3dlYmtpdC5vcmcvYi8x
NDg2MTApLgorCisgICAgICAgIFByZXZpb3VzbHksIG91ciBpbmxpbmUgY2FjaGVzIGhhZCBzb21l
IHByb2JsZW1zIHRoYXQgbWFkZSB0aGVtIGRpZmZpY3VsdCB0byB3b3JrIHdpdGguIEl0IHdhcwor
ICAgICAgICBpbXBvc3NpYmxlIHRvIGNoYW5nZSBhbnkgY29kZSB0aGF0IHdhcyBwcmV2aW91c2x5
IGdlbmVyYXRlZCBieSB0aGUgSUMgZXhjZXB0IGJ5IGJsb3dpbmcgdGhlCisgICAgICAgIHdob2xl
IElDIGF3YXksIHRoZSBJQ3Mgc2NhbGVkIHBvb3JseSBpZiB0aGVyZSB3ZXJlIG1hbnkgY2FzZXMs
IGFuZCB0aGVyZSB3YXMgYSBsb3Qgb2YgZHVwbGljYXRlCisgICAgICAgIGFuZCBhZCBob2MgY29k
ZS4KKworICAgICAgICBJbXBvc3NpYmxlIHRvIHJlZ2VuZXJhdGUgYSBwcmV2aW91c2x5IGdlbmVy
YXRlZCBzdHViOiBTYXkgdGhhdCBzb21lIGFjY2VzcyAoby5mID0gdikgY2F1c2VzIG91cgorICAg
ICAgICBJQyBjb2RlIHRvIGVtaXQgc29tZSBzdHViOyBsZXQncyBjYWxsIGl0IHN0dWIxLiBUaGVu
IGxhdGVyIHdlIGZpbmQgdGhhdCB3ZSBuZWVkIHRvIGVtaXQgYQorICAgICAgICBkaWZmZXJlbnQg
c3R1Yiwgc3R1YjIsIHdoZXJlIHdlIHRoaW5rIHRoYXQgc3R1YjIgbWlnaHQgc3Vic3VtZSBzdHVi
MS4gV2Ugc2F5IHRoYXQgc3R1YjIKKyAgICAgICAgc3Vic3VtZXMgc3R1YjEgaWYgZmFpbGluZyB0
byBleGVjdXRlIHN0dWIyIHRvIGNvbXBsZXRpb24gbWVhbnMgdGhhdCB3ZSBhcmUgZ3VhcmFudGVl
ZCB0byBmYWlsCisgICAgICAgIHRvIGV4ZWN1dGUgc3R1YjEgdG8gY29tcGxldGlvbi4gVGhpcyBj
b3VsZCBoYXBwZW4gaW4gdHJ1bmsgaWYgc3R1YjIgaGFzIHRoZSBzYW1lIGJhc2Ugc3RydWN0dXJl
CisgICAgICAgIGFzIHN0dWIxIGJ1dCBkaWZmZXJlbnQgcHJvdG90eXBlIGNvbmRpdGlvbnMuIEl0
IGNvdWxkIGhhcHBlbiB3aXRoIHByb3BlcnR5IHR5cGUgaW5mZXJlbmNlIGlmCisgICAgICAgIHN0
dWIyIGhhcyBhIGxvb3NlciB0eXBlIGNoZWNrIG9uIHYgdGhhbiBzdHViMSBkaWQuIEN1cnJlbnRs
eSwgaWYgdGhpcyBoYXBwZW5lZCwgd2Ugd291bGQgZW1pdAorICAgICAgICBzdHViMiBhbmQgaGF2
ZSBpdHMgc2xvdyBwYXRoIGp1bXAgdG8gc3R1YjEuIEhlbmNlLCB3ZSB3b3VsZCBzdGlsbCBlbmQg
dXAgZXhlY3V0aW5nIHRoZSBjaGVja3MKKyAgICAgICAgb2Ygc3R1YjEgYmVmb3JlIGZhbGxpbmcg
dGhyb3VnaCB0byB0aGUgc2xvdyBwYXRoLiBUaGlzIGdldHMgYmFkIHdoZW4gdGhlcmUgYXJlIG1h
bnkgc3R1YnMuCisgICAgICAgIFN0dWIxIG1pZ2h0IGJlIGluIGZyb250IG9mIGEgYnVuY2ggb2Yg
b3RoZXIgc3R1YnMsIHNvIHdoZW4gd2UgYWRkIHN0dWIyLCB3ZSB3aWxsIGVuZCB1cAorICAgICAg
ICBleGVjdXRpbmcgYm90aCBzdHViMidzIGFuZCBzdHViMSdzIGNoZWNrcyBiZWZvcmUgZmFsbGlu
ZyB0aHJvdWdoIHRvIHRoZSBvdGhlciBzdHVicy4gSXQgd291bGQKKyAgICAgICAgYmUgYmV0dGVy
IGlmIHdlIGNvdWxkIHJlbW92ZSBzdHViMSBmcm9tIHRoZSBsaXN0IGF0IHRoaXMgcG9pbnQuIEJ1
dCBzaW5jZSBzdHViMSBjb3VsZCBiZSBsaW5rZWQKKyAgICAgICAgdG8gZnJvbSBhIGRpZmZlcmVu
dCBzdHViIHRoYXQgd2UgaGFkIGFscmVhZHkgZ2VuZXJhdGVkLCB3ZSdkIGhhdmUgdG8gaGF2ZSBh
IHdheSBvZiBwYXRjaGluZworICAgICAgICBzdHVicyBvciByZWdlbmVyYXRpbmcgdGhlbSBmcm9t
IHNjcmF0Y2guIFRoaXMgaXMgY3VycmVudHkgaW1wb3NzaWJsZSBiZWNhdXNlIHdlIGp1c3QgZG9u
J3Qga2VlcAorICAgICAgICBhcm91bmQgZW5vdWdoIG1ldGEtZGF0YSB0byBtZXNzIHdpdGggYSBz
dHViIGFmdGVyIGl0J3MgZ2VuZXJhdGVkLiBBZnRlciB0aGlzIGNoYW5nZSwgd2UgbmV2ZXIKKyAg
ICAgICAgbGluayBuZXcgc3R1YnMgb250byBhIGxpbmtlZCBsaXN0IG9mIHByZS1leGlzdGluZyBz
dHViczsgaW5zdGVhZCBlYWNoIElDIHdpbGwgaGF2ZSBvbmUgc3R1YgorICAgICAgICBoYW5naW5n
IG9mZiBvZiBpdCBhbmQgd2UgYWx3YXlzIHJlZ2VuZXJhdGUgdGhhdCBvbmUgc3R1YiBmcm9tIHNj
cmF0Y2guIFRoYXQgb25lIHN0dWIgY29udGFpbnMKKyAgICAgICAgZWl0aGVyIGEgQmluYXJ5U3dp
dGNoIG9yIGEgYnJhbmNoIGNhc2NhZGUgdG8gc2VsZWN0IG9uZSBvZiB0aGUgQWNjZXNzQ2FzZXMu
IEVhY2ggQWNjZXNzQ2FzZSBpcworICAgICAgICBhbiBvYmplY3QgdGhhdCBkZXNjcmliZXMgZXZl
cnl0aGluZyB3ZSBuZWVkIHRvIHJlZ2VuZXJhdGUgaXQgaW4gdGhlIGZ1dHVyZS4gVGhpcyBtZWFu
cyB0aGF0CisgICAgICAgIHdoZW4gd2UgYWRkIGEgbmV3IGNhc2UgdG8gYW4gSUMgc3R1Yiwgd2Ug
Y2FuIGZpZ3VyZSBvdXQgd2hpY2ggcHJldmlvdXMgY2FzZXMgdGhpcyBvbmUgc3Vic3VtZXMuCisK
KyAgICAgICAgUG9vciBzY2FsYWJpbGl0eSB3aGVuIHRoZXJlIGFyZSBtYW55IGNhc2VzOiBQcmV2
aW91c2x5LCB0aGUgY2FzZXMgb2YgYSBwb2x5bW9ycGhpYyBpbmxpbmUgY2FjaGUKKyAgICAgICAg
Zm9ybWVkIGEgbGlua2VkIGxpc3Qgb2YgYnJhbmNoZXMuIFRoaXMgbWVhbnQgdGhhdCB0aGUgY29t
cGxleGl0eSBvZiBhbiBpbmxpbmUgY2FjaGUgZ3JldworICAgICAgICBsaW5lYXJseSB3aXRoIHRo
ZSBudW1iZXIgb2YgY2FzZXMuIFRoaXMgY2hhbmdlIHR1cm5zIHRoaXMgaW50byBhIEJpbmFyeVN3
aXRjaCBpbiBtb3N0IGNhc2VzLAorICAgICAgICBsZWFkaW5nIHRvIGxvZ2FyaXRobWljIHNjYWxp
bmcuCisKKyAgICAgICAgRHVwbGljYXRlIGNvZGUgYmV0d2VlbiBnZXQsIHB1dCwgYW5kIGluOiBU
aGUgY29kZSBmb3Igb3BfZ2V0X2J5X2lkLCBvcF9wdXRfYnlfaWQsIGFuZCBvcF9pbgorICAgICAg
ICBpbmxpbmUgY2FjaGVzIGdyZXcgaW5kZXBlbmRlbnRseSBhbmQgZW5kZWQgdXAgaGF2aW5nIGEg
bG90IG9mIGR1cGxpY2F0ZSBjb2RlLiBXZSBoYWQgdGhlIHdvcnN0CisgICAgICAgIGtpbmRzIG9m
IGR1cGxpY2F0ZSBjb2RlLiBJbiBzb21lIGNhc2VzLCB0aGUgY29kZSB3YXMgY29weS1wYXN0ZWQu
IEluIG90aGVyIGNhc2VzLCB3ZSB3cm90ZSBjb2RlCisgICAgICAgIHRoYXQgZmVsdCBsaWtlIGl0
IHdhcyBuZXcgZGVzcGl0ZSB0aGUgZmFjdCB0aGF0IGl0IHdhcyBsb2dpY2FsbHkgaWRlbnRpY2Fs
IHRvIGNvZGUgdGhhdCB3YXMKKyAgICAgICAgYWxyZWFkeSB3cml0dGVuIGVsc2V3aGVyZS4gVGhl
IG1haW4gc291cmNlcyBvZiBkdXBsaWNhdGlvbiB3ZXJlIGluIHNlbGVjdGluZyBhIHNjcmF0Y2gK
KyAgICAgICAgcmVnaXN0ZXIsIGNoZWNraW5nIGFsbCBvZiB0aGUgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25zIGFuZCB0aGUgYmFzZSBzdHJ1Y3R1cmUsIHRoZSBwcm8gZm9ybWEKKyAgICAgICAgaW52
b2x2ZWQgaW4gZ2VuZXJhdGluZyBhIHN0dWIsIGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIG5lZWRl
ZCB0byBkZXNjcmliZSBhbGwgb2YgdGhlIGFjY2VzcworICAgICAgICBjYXNlcy4gVGhpcyBjaGFu
Z2UgZGVkdXBsaWNhdGVzIGFsbCBvZiB0aGF0IGNvZGUuIE5vdywgYWxsIG9mIHRob3NlIElDcyB1
c2UgdGhlIHNhbWUgY2xhc3NlczoKKyAgICAgICAgdGhlIFBvbHltb3JwaGljQWNjZXNzIGFuZCBB
Y2Nlc3NDYXNlLiBUaGVyZSBpcyBjb2RlIGluIHRob3NlIGNsYXNzZXMgdGhhdCBoYW5kbGVzIGFs
bCBvZiB0aGUKKyAgICAgICAgY29tbW9uIHRoaW5ncywgYW5kIGZvciB0aGUgbW9zdCBwYXJ0IHRo
ZSBvbmx5IGNvZGUgdGhhdCBhY3R1YWxseSBzcGVjaWFsaXplcyBmb3IgdGhlIGtpbmQgb2YKKyAg
ICAgICAgYWNjZXNzIGlzIGluIHNvbWUgc3dpdGNoIHN0YXRlbWVudCBpbiBBY2Nlc3NDYXNlOjpn
ZW5lcmF0ZSgpLgorCisgICAgICAgIFNwZWNpYWwtY2FzaW5nIG9mIGFycmF5IGxlbmd0aCBhbmQg
c3RyaW5nIGxlbmd0aDogUHJldmlvdXNseSwgYXJyYXkubGVuZ3RoIGFuZCBzdHJpbmcubGVuZ3Ro
CisgICAgICAgIHdlcmUgaGFuZGxlZCBpbiBhbiBhZCBob2MgbWFubmVyIGluIHRoZSBnZXRfYnlf
aWQgcmVwYXRjaGluZyBjb2RlLiBUaGUgaGFuZGxpbmcgd2FzIHNlcGFyYXRlCisgICAgICAgIGZy
b20gdGhlIHBvbHltb3JwaGljIGdldF9ieV9pZCBoYW5kbGluZywgd2hpY2ggbWVhbnQgdGhhdCB3
ZSBjb3VsZCBub3QgaGFuZGxlIHBvbHltb3JwaGljCisgICAgICAgIGxlbmd0aCBhY2Nlc3NlcyBp
ZiBvbmUgb2YgdGhlIGxlbmd0aCBjYXNlcyB3YXMgZWl0aGVyIGFycmF5IG9yIHN0cmluZyBsZW5n
dGguIEZvciBleGFtcGxlLCBpZgorICAgICAgICB5b3UgaGFkICJvLmxlbmd0aCIgd2hlcmUgdGhl
IGxlbmd0aCB3YXMgZWl0aGVyIGFycmF5IGxlbmd0aCBvciBhIHZhbmlsbGEgbGVuZ3RoIHByb3Bl
cnR5LCB0aGVuCisgICAgICAgIHRoZSBnZXRfYnlfaWQgaW5saW5lIGNhY2hlIHdvdWxkIGVpdGhl
ciBlbWl0IGEgbW9ub21vcnBoaWMgc3R1YiBmb3IgYXJyYXkgbGVuZ3RoLCBvciBpdCBhCisgICAg
ICAgIG1vbm9tb3JwaGljIHN0dWIgZm9yIHRoZSB2YW5pbGxhIGxlbmd0aCBwcm9wZXJ0eSwgYnV0
IG5ldmVyIGEgcG9seW1vcnBoaWMgc3R1YiAob3IgbGlzdCkgdGhhdAorICAgICAgICBjb3VsZCBk
byBib3RoLiBUaGlzIGNoYW5nZSBhZGRyZXNzZXMgdGhpcyBwcm9ibGVtIGJ5IGZvbGRpbmcgYXJy
YXkgbGVuZ3RoIGFuZCBzdHJpbmcgbGVuZ3RoCisgICAgICAgIGludG8gdGhlIHBvbHltb3JwaGlj
IGdldF9ieV9pZCBjb2RlLgorCisgICAgICAgIFRoaXMgd2FzIG1lYW50IHRvIGJlIGEgcGVyZi1u
ZXV0cmFsIGNoYW5nZSB0byBlbmFibGUgcHJvcGVydHkgdHlwZSBpbmZlcmVuY2UsIGJ1dCBpdCBl
bmRlZCB1cAorICAgICAgICBiZWluZyBhIDElIE9jdGFuZSBzcGVlZC11cCwgbWFpbmx5IGJlY2F1
c2Ugb2YgcmF5dHJhY2UuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBK
YXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAgICAgICog
SmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnM6Cisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmg6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjo6ZHVtcFdpdGhOYW1lKToKKyAgICAgICAgKiBieXRlY29kZS9D
b2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnByaW50R2V0QnlJZENhY2hl
U3RhdHVzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcmludFB1dEJ5SWRDYWNoZVN0YXR1
cyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMpOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmdldEJ5VmFsSW5mb01hcCk6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6YWRkU3R1YkluZm8pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmRTdHVi
SW5mbyk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6c3R1YkluZm9CZWdpbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c3R1Yklu
Zm9FbmQpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwOgorICAgICAgICAo
SlNDOjpHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm9XaXRob3V0RXhpdFNpdGVGZWVk
YmFjayk6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlz
dC5jcHAuCisgICAgICAgIChKU0M6OkFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6YWRkV2F0Y2hwb2lu
dCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6cmVzdG9yZVNjcmF0Y2gp
OgorICAgICAgICAoSlNDOjpBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnN1Y2NlZWQpOgorICAgICAg
ICAoSlNDOjpBY2Nlc3NDYXNlOjpBY2Nlc3NDYXNlKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2Fz
ZTo6Z2V0KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6cmVwbGFjZSk6CisgICAgICAgIChK
U0M6OkFjY2Vzc0Nhc2U6OnRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpz
ZXR0ZXIpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjppbik6CisgICAgICAgIChKU0M6OkFj
Y2Vzc0Nhc2U6OmdldExlbmd0aCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6On5BY2Nlc3ND
YXNlKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKToK
KyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Y2xvbmUpOgorICAgICAgICAoSlNDOjpBY2Nlc3ND
YXNlOjpndWFyZGVkQnlTdHJ1Y3R1cmVDaGVjayk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6
OmNhblJlcGxhY2UpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpkdW1wKToKKyAgICAgICAg
KEpTQzo6QWNjZXNzQ2FzZTo6dmlzaXRXZWFrKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6
Z2VuZXJhdGVXaXRoR3VhcmQpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZSk6
CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQWNjZXNzOjpQb2x5bW9ycGhpY0FjY2Vzcyk6Cisg
ICAgICAgIChKU0M6OlBvbHltb3JwaGljQWNjZXNzOjp+UG9seW1vcnBoaWNBY2Nlc3MpOgorICAg
ICAgICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZVdpdGhDYXNlcyk6CisgICAg
ICAgIChKU0M6OlBvbHltb3JwaGljQWNjZXNzOjpyZWdlbmVyYXRlV2l0aENhc2UpOgorICAgICAg
ICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzczo6dmlzaXRXZWFrKToKKyAgICAgICAgKEpTQzo6UG9s
eW1vcnBoaWNBY2Nlc3M6OmR1bXApOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzczo6
cmVnZW5lcmF0ZSk6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAoSlND
OjpHZXRCeUlkQWNjZXNzOjpHZXRCeUlkQWNjZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
R2V0QnlJZEFjY2Vzczo6fkdldEJ5SWRBY2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpH
ZXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0dXJlU3R1YkluZm8pOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpHZXRCeUlkQWNjZXNzOjp2aXNpdFdlYWspOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpQ
b2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6ZnJvbSk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OlBvbHltb3JwaGljR2V0QnlJZExpc3Q6On5Qb2x5bW9ycGhpY0dldEJ5SWRM
aXN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6Y3Vy
cmVudFNsb3dQYXRoVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNH
ZXRCeUlkTGlzdDo6YWRkQWNjZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UG9seW1vcnBo
aWNHZXRCeUlkTGlzdDo6aXNGdWxsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UG9seW1vcnBo
aWNHZXRCeUlkTGlzdDo6aXNBbG1vc3RGdWxsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UG9s
eW1vcnBoaWNHZXRCeUlkTGlzdDo6ZGlkU2VsZlBhdGNoaW5nKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6UG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6dmlzaXRXZWFrKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oLgorICAgICAgICAo
SlNDOjpBY2Nlc3NDYXNlOjppc0dldCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmlzUHV0
KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6aXNJbik6CisgICAgICAgIChKU0M6OkFjY2Vz
c0Nhc2U6OnR5cGUpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpvZmZzZXQpOgorICAgICAg
ICAoSlNDOjpBY2Nlc3NDYXNlOjp2aWFQcm94eSk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6
OnN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6Om5ld1N0cnVjdHVyZSk6Cisg
ICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmNvbmRpdGlvblNldCk6CisgICAgICAgIChKU0M6OkFj
Y2Vzc0Nhc2U6OmFkZGl0aW9uYWxTZXQpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpkb2Vz
Q2FsbHMpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpjYWxsTGlua0luZm8pOgorICAgICAg
ICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzczo6aXNFbXB0eSk6CisgICAgICAgIChKU0M6OlBvbHlt
b3JwaGljQWNjZXNzOjpzaXplKToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNBY2Nlc3M6OmF0
KToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNBY2Nlc3M6Om9wZXJhdG9yW10pOgorICAgICAg
ICAoSlNDOjpHZXRCeUlkQWNjZXNzOjpHZXRCeUlkQWNjZXNzKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6R2V0QnlJZEFjY2Vzczo6aXNTZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpHZXRC
eUlkQWNjZXNzOjpvcGVyYXRvciEpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpHZXRCeUlkQWNj
ZXNzOjp0eXBlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6c3RydWN0
dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6Y29uZGl0aW9uU2V0
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6c3R1YlJvdXRpbmUpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpHZXRCeUlkQWNjZXNzOjpkb2VzQ2FsbHMpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojppc0VtcHR5KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6c2l6ZSk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmF0KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6UG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6b3BlcmF0b3JbXSk6IERlbGV0ZWQu
CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0Lmg6IFJl
bW92ZWQuCisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oOiBSZW1v
dmVkLgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6
UHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKToKKyAgICAgICAgKiBieXRlY29kZS9T
dHJ1Y3R1cmVTdHViSW5mby5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpk
ZXJlZik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjphZGRBY2Nlc3NDYXNlKToK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnJlc2V0KToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW5jZXMpOgorICAgICAgICAqIGJ5dGVj
b2RlL1N0cnVjdHVyZVN0dWJJbmZvLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZv
OjpTdHJ1Y3R1cmVTdHViSW5mbyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpp
bml0R2V0QnlJZFNlbGYpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdFB1
dEJ5SWRSZXBsYWNlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmluaXRTdHVi
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnNldFNlZW4pOgorICAgICAgICAo
SlNDOjpnZXRTdHJ1Y3R1cmVTdHViSW5mb0NvZGVPcmlnaW4pOgorICAgICAgICAoSlNDOjppc0dl
dEJ5SWRBY2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjppc1B1dEJ5SWRBY2Nlc3MpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjppc0luQWNjZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlU3R1YkluZm86OmluaXRHZXRCeUlkTGlzdCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjppbml0UHV0QnlJZFRyYW5zaXRpb24pOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdFB1dEJ5SWRMaXN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmluaXRJbkxpc3QpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6YWRkV2F0Y2hwb2ludCk6IERl
bGV0ZWQuCisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluKToKKyAgICAgICAgKiBmdGwvRlRMQ29t
cGlsZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6bW1BbGxvY2F0ZURhdGFTZWN0aW9uKToKKyAg
ICAgICAgKiBqaXQvQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIGppdC9BY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5oOiBSZW1vdmVkLgorICAgICAg
ICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJz
OjpicmFuY2hJZkVtcHR5KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpicmFuY2hT
dHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmJveEJvb2xlYW5QYXls
b2FkKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpib3hCb29sZWFuKToKKyAgICAg
ICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpib3hJbnQzMik6CisgICAgICAgICogaml0L0pJVC5o
OgorICAgICAgICAqIGppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChK
U0M6OmdhcmJhZ2VTdHViSW5mbyk6CisgICAgICAgIChKU0M6OkpJVElubGluZUNhY2hlR2VuZXJh
dG9yOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVEJ5SWRHZW5l
cmF0b3I6OkpJVEJ5SWRHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVRHZXRCeUlkR2VuZXJh
dG9yOjpKSVRHZXRCeUlkR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUUHV0QnlJZEdlbmVy
YXRvcjo6SklUUHV0QnlJZEdlbmVyYXRvcik6CisgICAgICAgICogaml0L0pJVElubGluZUNhY2hl
R2VuZXJhdG9yLmg6CisgICAgICAgIChKU0M6OkpJVElubGluZUNhY2hlR2VuZXJhdG9yOjpKSVRJ
bmxpbmVDYWNoZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVElubGluZUNhY2hlR2VuZXJh
dG9yOjpzdHViSW5mbyk6CisgICAgICAgIChKU0M6OkpJVEJ5SWRHZW5lcmF0b3I6OkpJVEJ5SWRH
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVRCeUlkR2VuZXJhdG9yOjpyZXBvcnRTbG93UGF0
aENhbGwpOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqaXQv
UmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OnJlcGF0Y2hDYWxsKToKKyAgICAgICAgKEpTQzo6
cmVwYXRjaEJ5SWRTZWxmQWNjZXNzKToKKyAgICAgICAgKEpTQzo6cmVzZXRHZXRCeUlEQ2hlY2tB
bmRMb2FkKToKKyAgICAgICAgKEpTQzo6cmVzZXRQdXRCeUlEQ2hlY2tBbmRMb2FkKToKKyAgICAg
ICAgKEpTQzo6cmVwbGFjZVdpdGhKdW1wKToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVHZXRCeUlE
KToKKyAgICAgICAgKEpTQzo6cmVwYXRjaEdldEJ5SUQpOgorICAgICAgICAoSlNDOjphcHByb3By
aWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjphcHByb3ByaWF0ZU9w
dGltaXppbmdQdXRCeUlkRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjp0cnlDYWNoZVB1dEJ5SUQp
OgorICAgICAgICAoSlNDOjpyZXBhdGNoUHV0QnlJRCk6CisgICAgICAgIChKU0M6OnRyeVJlcGF0
Y2hJbik6CisgICAgICAgIChKU0M6OnJlcGF0Y2hJbik6CisgICAgICAgIChKU0M6OnJlc2V0R2V0
QnlJRCk6CisgICAgICAgIChKU0M6OnJlc2V0UHV0QnlJRCk6CisgICAgICAgIChKU0M6OmNoZWNr
T2JqZWN0UHJvcGVydHlDb25kaXRpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpjaGVja09i
amVjdFByb3BlcnR5Q29uZGl0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmVtaXRSZXN0
b3JlU2NyYXRjaCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmxpbmtSZXN0b3JlU2NyYXRjaCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OnRvU3RyaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6a2luZEZvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmN1c3RvbUZvcik6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OmdlbmVyYXRlQnlJZFN0dWIpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpwYXRjaEp1bXBUb0dldEJ5SWRTdHViKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6dHJ5QnVp
bGRHZXRCeUlETGlzdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmJ1aWxkR2V0QnlJRExpc3Qp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjphcHByb3ByaWF0ZUxpc3RCdWlsZGluZ1B1dEJ5SWRG
dW5jdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmVtaXRQdXRSZXBsYWNlU3R1Yik6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OmVtaXRQdXRUcmFuc2l0aW9uU3R1Yik6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OnRyeUJ1aWxkUHV0QnlJZExpc3QpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpidWlsZFB1dEJ5SWRMaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvU2NyYXRjaFJlZ2lz
dGVyQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
Ojpsb2NrKToKKyAgICAgICAgKEpTQzo6U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjphbGxvY2F0
ZVNjcmF0Y2gpOgorICAgICAgICAqIGppdC9TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaDoKKyAg
ICAgICAgKEpTQzo6U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpTY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgorCiAyMDE1LTA5LTA4ICBBbmRy
ZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBSZW1vdmUgdW51
c2VkIEhlYXA6OmdldENvbnNlcnZhdGl2ZVJlZ2lzdGVyUm9vdHMoKS4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE4OTUxNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDggKzEwNCw3
IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYnl0ZWNvZGUvT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24uY3BwCiAgICAgYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQu
Y3BwCiAgICAgYnl0ZWNvZGUvT3Bjb2RlLmNwcAotICAgIGJ5dGVjb2RlL1BvbHltb3JwaGljR2V0
QnlJZExpc3QuY3BwCi0gICAgYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAKKyAg
ICBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKICAgICBieXRlY29kZS9QcmVjaXNlSnVt
cFRhcmdldHMuY3BwCiAgICAgYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uY3BwCiAgICAgYnl0
ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKQEAgLTM1Niw3ICszNTUsNiBAQCBzZXQoSmF2YVNjcmlw
dENvcmVfU09VUkNFUwogICAgIGludGVycHJldGVyL1Byb3RvQ2FsbEZyYW1lLmNwcAogICAgIGlu
dGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAKIAotICAgIGppdC9BY2Nlc3NvckNhbGxKSVRTdHVi
Um91dGluZS5jcHAKICAgICBqaXQvQXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3MuY3BwCiAgICAg
aml0L0Fzc2VtYmx5SGVscGVycy5jcHAKICAgICBqaXQvQmluYXJ5U3dpdGNoLmNwcApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENv
cmUudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxODk1MTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNDMsOCArMzQzLDcgQEAKICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcCIg
Lz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE9w
Y29kZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQb2x5bW9y
cGhpY0dldEJ5SWRMaXN0LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVj
b2RlXFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cYnl0ZWNvZGVcUG9seW1vcnBoaWNBY2Nlc3MuY3BwIiAvPgogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cYnl0ZWNvZGVcUHJlY2lzZUp1bXBUYXJnZXRzLmNwcCIgLz4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFByb3BlcnR5Q29uZGl0aW9uLmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFB1dEJ5SWRTdGF0dXMuY3BwIiAvPgpA
QCAtNjE3LDcgKzYxNiw2IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRl
clxKU1N0YWNrLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGludGVycHJldGVy
XFByb3RvQ2FsbEZyYW1lLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGludGVy
cHJldGVyXFN0YWNrVmlzaXRvci5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxq
aXRcQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5caml0XEFyaXR5Q2hlY2tGYWlsUmV0dXJuVGh1bmtzLmNwcCIgLz4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGppdFxBc3NlbWJseUhlbHBlcnMuY3BwIiAvPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5caml0XEJpbmFyeVN3aXRjaC5jcHAiIC8+CkBAIC0xMDQ0LDggKzEw
NDIsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2Rl
XE9wY29kZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcT3BlcmFu
ZHMuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFBvbHltb3JwaGlj
R2V0QnlJZExpc3QuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFBv
bHltb3JwaGljUHV0QnlJZExpc3QuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5
dGVjb2RlXFBvbHltb3JwaGljQWNjZXNzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxieXRlY29kZVxQcmVjaXNlSnVtcFRhcmdldHMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGJ5dGVjb2RlXFByb3BlcnR5Q29uZGl0aW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxieXRlY29kZVxQdXRCeUlkU3RhdHVzLmgiIC8+CkBAIC0xNDE2LDcgKzE0MTMs
NiBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW50ZXJwcmV0ZXJcUHJvdG9DYWxsRnJh
bWUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGludGVycHJldGVyXFJlZ2lzdGVy
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRlclxTdGFja1Zpc2l0
b3IuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxBY2Nlc3NvckNhbGxKSVRT
dHViUm91dGluZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEFyaXR5Q2hl
Y2tGYWlsUmV0dXJuVGh1bmtzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRc
QXNzZW1ibHlIZWxwZXJzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcQmlu
YXJ5U3dpdGNoLmgiIC8+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENv
cmUudmN4cHJvai5maWx0ZXJzCShyZXZpc2lvbiAxODk1MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRl
cnMJKHdvcmtpbmcgY29weSkKQEAgLTE5OCw3ICsxOTgsNyBAQAogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cYnl0ZWNvZGVcT3Bjb2RlLmNwcCI+CiAgICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9G
aWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRl
Y29kZVxQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxieXRlY29kZVxQb2x5bW9ycGhpY0FjY2Vzcy5jcHAiPgogICAgICAgPEZpbHRlcj5ieXRl
Y29kZTwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cYnl0ZWNvZGVcUHV0QnlJZFN0YXR1cy5jcHAiPgpAQCAtMTYyNiw5ICsxNjI2LDYgQEAKICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGxsdm1cTExWTUFQSS5jcHAiPgogICAgICAgPEZpbHRl
cj5sbHZtPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxqaXRcQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuY3BwIj4KLSAgICAgIDxGaWx0ZXI+
aml0PC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxpbnNwZWN0b3JcQ29uc29sZU1lc3NhZ2UuY3BwIj4KICAgICAgIDxGaWx0ZXI+aW5zcGVjdG9y
PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CkBAIC0xNjk1LDkgKzE2OTIsNiBAQAogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXEpTSmF2YVNjcmlwdENhbGxGcmFtZVByb3Rv
dHlwZS5jcHAiPgogICAgICAgPEZpbHRlcj5pbnNwZWN0b3I8L0ZpbHRlcj4KICAgICA8L0NsQ29t
cGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFBvbHltb3JwaGljR2V0
QnlJZExpc3QuY3BwIj4KLSAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4KLSAgICA8L0Ns
Q29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHByb2ZpbGVyXFByb2ZpbGVySmV0
dGlzb25SZWFzb24uY3BwIj4KICAgICAgIDxGaWx0ZXI+cHJvZmlsZXI8L0ZpbHRlcj4KICAgICA8
L0NsQ29tcGlsZT4KQEAgLTIwOTcsNyArMjA5MSw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxieXRlY29kZVxPcGVyYW5kcy5oIj4KICAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRl
cj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2Rl
XFBvbHltb3JwaGljUHV0QnlJZExpc3QuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxi
eXRlY29kZVxQb2x5bW9ycGhpY0FjY2Vzcy5oIj4KICAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0Zp
bHRlcj4KICAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVj
b2RlXFB1dEJ5SWRTdGF0dXMuaCI+CkBAIC00MjA1LDkgKzQxOTksNiBAQAogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cbGx2bVxMTFZNSGVhZGVycy5oIj4KICAgICAgIDxGaWx0ZXI+bGx2bTwv
RmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0
XEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmgiPgotICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRl
cj4KLSAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGFzc2VtYmxl
clxBYm9ydFJlYXNvbi5oIj4KICAgICAgIDxGaWx0ZXI+YXNzZW1ibGVyPC9GaWx0ZXI+CiAgICAg
PC9DbEluY2x1ZGU+CkBAIC00Mjg2LDkgKzQyNzcsNiBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxKU0NJbmxpbmVzLmgiPgogICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0
ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29k
ZVxQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgiPgotICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmls
dGVyPgotICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccHJvZmls
ZXJcUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oIj4KICAgICAgIDxGaWx0ZXI+cHJvZmlsZXI8L0Zp
bHRlcj4KICAgICA8L0NsSW5jbHVkZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiAxODk1MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjcyLDcgKzI3
Miw2IEBACiAJCTBGMzAwQjdDMThBQjFCMTQwMEE2RDcyRSAvKiBERkdJbnRlZ2VyQ2hlY2tDb21i
aW5pbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYzMDBCN0ExOEFCMUIxNDAwQTZENzJFIC8qIERGR0ludGVnZXJDaGVja0NvbWJpbmluZ1Bo
YXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEYzNEIxNDkxNkQ0MjAxMDAwMUNEQTVBIC8qIERGR1VzZUtpbmQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzNEIxNDcxNkQ0MjAwRTAwMUNEQTVB
IC8qIERGR1VzZUtpbmQuY3BwICovOyB9OwogCQkwRjM0QjE0QTE2RDQyMDEzMDAxQ0RBNUEgLyog
REZHVXNlS2luZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYzNEIxNDgxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjM0QjE0QzE2RDQzRTBEMDAx
Q0RBNUEgLyogUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM0QjE0QjE2RDQzRTBDMDAxQ0RBNUEg
LyogUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYzOEIwMTExN0NGMDc4MDAwQjE0NEQzIC8q
IExMSW50RW50cnlwb2ludC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjM4QjAwRjE3Q0YwNzdGMDBCMTQ0RDMgLyogTExJbnRFbnRyeXBvaW50LmNw
cCAqLzsgfTsKIAkJMEYzOEIwMTIxN0NGMDc4MzAwQjE0NEQzIC8qIExMSW50RW50cnlwb2ludC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzOEIwMTAx
N0NGMDc3RjAwQjE0NEQzIC8qIExMSW50RW50cnlwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMzhCMDE3MTdDRkU3NTUwMEIxNDREMyAv
KiBERkdDb21waWxhdGlvbktleS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjM4QjAxMzE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25L
ZXkuY3BwICovOyB9OwpAQCAtMzI0LDggKzMyMyw2IEBACiAJCTBGNDg1MzJBMTg3REZERUMwMDgz
QjY4NyAvKiBGVExSZWNvdmVyeU9wY29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY0ODUzMjYxODdERkRFQzAwODNCNjg3IC8qIEZUTFJlY292ZXJ5
T3Bjb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY0OTNBRkExNkQwQ0FEMzAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDkzQUY4MTZEMENBRDEw
MDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi87IH07CiAJCTBGNEI5NERDMTdCOUYwNzUw
MEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0Qjk0REIxN0I5RjA3NTAwREQwM0E0IC8qIFR5cGVkQXJy
YXlJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKLQkJMEY0Q0VENUUxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJZExpc3Qu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0Q0VE
NUMxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwICovOyB9Owot
CQkwRjRDRUQ1RjE4Q0VBN0FCMDA4MDJGRTAgLyogUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0Q0VENUQxOENF
QTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJZExpc3QuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjRGMjlERjE4QjZBRDFDMDA1N0JD
MTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RjI5REQxOEI2QUQxQzAw
NTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcCAqLzsg
fTsKIAkJMEY0RjI5RTAxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50
RXN0aW1hdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjRGMjlERTE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291
bnRFc3RpbWF0aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRjUwQUYzQzE5M0U4QjM5MDA2NzRFRTggLyogREZHU3RydWN0dXJlQ2xv
YmJlclN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjUwQUYzQjE5M0U4QjM5MDA2NzRFRTggLyogREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM5OCw4
ICszOTUsNiBAQAogCQkwRjcxNENBNDE2RUE5MkYwMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJv
cGFnYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjcxNENBMTE2RUE5MkVEMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRp
b25QaGFzZS5jcHAgKi87IH07CiAJCTBGNzE0Q0E1MTZFQTkyRjIwMEYzRUJFQiAvKiBERkdCYWNr
d2FyZHNQcm9wYWdhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjcxNENBMjE2RUE5MkVEMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJv
cGFnYXRpb25QaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGNzQzQkFBMTZCODgyNDkwMDlGOTI3NyAvKiBBUk02NERpc2Fzc2VtYmxlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTJBM0Ey
MDE2NTFDNjYxMDBBODBBRkUgLyogQVJNNjREaXNhc3NlbWJsZXIuY3BwICovOyB9OwotCQkwRjc1
NzZEMjE4RTFGRUU5MDAyRUY0Q0QgLyogQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NTc2RDAxOEUx
RkVFOTAwMkVGNENEIC8qIEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmNwcCAqLzsgfTsKLQkJ
MEY3NTc2RDMxOEUxRkVFOTAwMkVGNENEIC8qIEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc1NzZEMTE4
RTFGRUU5MDAyRUY0Q0QgLyogQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjc2NkQyODE1QThDQzFF
MDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NjZEMjYxNUE4Q0MxQjAwOEYzNjNFIC8qIEpJVFN0dWJS
b3V0aW5lLmNwcCAqLzsgfTsKIAkJMEY3NjZEMkIxNUE4Q0MzODAwOEYzNjNFIC8qIEpJVFN0dWJS
b3V0aW5lU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNzY2RDI5MTVBOENDMzQwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZVNldC5jcHAgKi87
IH07CiAJCTBGNzY2RDJDMTVBOENDM0EwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZVNldC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NjZEMkExNUE4
Q0MzNDAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTQ3Myw4ICs0NjgsNiBAQAogCQkwRjlFMzI2
NDFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUUzMjYyMUIwNUFC
MDQwMDgwMUVENSAvKiBERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOUZCNEY0MTdGQ0I5MTcw
MENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUZCNEYyMTdGQ0I5MTcwMENCNjdGOCAvKiBERkdT
dGFja0xheW91dFBoYXNlLmNwcCAqLzsgfTsKIAkJMEY5RkI0RjUxN0ZDQjkxNzAwQ0I2N0Y4IC8q
IERGR1N0YWNrTGF5b3V0UGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGOUZCNEYzMTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBo
YXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJ
MEY5RkM4QzMxNEUxQjVGRTAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RkM4QkYxNEUx
QjVGQjAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwICovOyB9OwotCQkwRjlG
QzhDNDE0RTFCNjAwMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RkM4QzAxNEUxQjVGQjAw
RDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjlGQzhDNTE0RTFCNjA0MDBENTJBRTAgLyog
UHV0S2luZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY5RkM4QzExNEUxQjVGQjAwRDUyQUUwIC8qIFB1dEtpbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkEyQzE3QjE3RDdDRjg0MDA5RDAxNUYg
LyogVGVzdFJ1bm5lclV0aWxzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQTJDMTc5MTdEN0NGODQwMDlEMDE1RiAvKiBUZXN0UnVubmVyVXRpbHMu
Y3BwICovOyB9OwogCQkwRkEyQzE3QzE3RDdDRjg0MDA5RDAxNUYgLyogVGVzdFJ1bm5lclV0aWxz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkEyQzE3
QTE3RDdDRjg0MDA5RDAxNUYgLyogVGVzdFJ1bm5lclV0aWxzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTc0Miw2ICs3MzUsOCBAQAogCQkwRkY4
QkRFQTFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY4QkRFODFBRDRDRjcxMDBERkU4ODQg
LyogSW5mZXJyZWRWYWx1ZS5jcHAgKi87IH07CiAJCTBGRjhCREVCMUFENENGNzEwMERGRTg4NCAv
KiBJbmZlcnJlZFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkY4QkRFOTFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRjkyMkQ0MTRG
NDZCNDEwMDQxQTI0RSAvKiBMTEludE9mZnNldHNFeHRyYWN0b3IuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NjgwQTExNEJBN0Y4MjAwQkZFMjcy
IC8qIExMSW50T2Zmc2V0c0V4dHJhY3Rvci5jcHAgKi87IH07CisJCTBGRjlDRTczMUI5Q0Q2RDAw
MDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY5Q0U3MTFCOUNENkQwMDA0RURDQTYgLyogUG9seW1v
cnBoaWNBY2Nlc3MuY3BwICovOyB9OworCQkwRkY5Q0U3NDFCOUNENkQwMDA0RURDQTYgLyogUG9s
eW1vcnBoaWNBY2Nlc3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRjlDRTcyMUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRkE1NDk3
MTZCODgzNTAwMEIzQTk4MiAvKiBBNjRET3Bjb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MkEzQTIyMTY1MUM2OTcwMEE4MEFGRSAvKiBBNjRE
T3Bjb2RlLmNwcCAqLzsgfTsKIAkJMEZGQTU0OTgxNkI4ODM1MzAwQjNBOTgyIC8qIEE2NERPcGNv
ZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MkEz
QTIzMTY1MUM2OTcwMEE4MEFGRSAvKiBBNjRET3Bjb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGQjZDMzgxQUY0OEREQzAwREIxQkY3IC8q
IFR5cGVvZlR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZGQjZDMzYxQUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5cGUuY3BwICovOyB9OwpA
QCAtMjEwMyw3ICsyMDk4LDYgQEAKIAkJMEYzMDBCN0ExOEFCMUIxNDAwQTZENzJFIC8qIERGR0lu
dGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmg7IHBhdGggPSBkZmcvREZHSW50ZWdl
ckNoZWNrQ29tYmluaW5nUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYz
NEIxNDcxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHVXNlS2luZC5jcHA7IHBhdGggPSBkZmcvREZHVXNlS2lu
ZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzRCMTQ4MTZENDIwMEUwMDFD
REE1QSAvKiBERkdVc2VLaW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R1VzZUtpbmQuaDsgcGF0aCA9IGRmZy9ERkdVc2VLaW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTBGMzRCMTRCMTZENDNFMEMwMDFDREE1QSAvKiBQb2x5bW9ycGhpY0FjY2Vzc1N0
cnVjdHVyZUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9seW1vcnBo
aWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MzhCMDBGMTdDRjA3N0YwMEIxNDREMyAvKiBMTEludEVudHJ5cG9pbnQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gTExJbnRFbnRyeXBvaW50LmNwcDsgcGF0aCA9IGxsaW50L0xMSW50RW50cnlwb2lu
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzhCMDEwMTdDRjA3N0YwMEIx
NDREMyAvKiBMTEludEVudHJ5cG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExJbnRFbnRyeXBvaW50
Lmg7IHBhdGggPSBsbGludC9MTEludEVudHJ5cG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEYzOEIwMTMxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uS2V5LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NvbXBpbGF0aW9uS2V5
LmNwcDsgcGF0aCA9IGRmZy9ERkdDb21waWxhdGlvbktleS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0yMTU2LDggKzIxNTAsNiBAQAogCQkwRjQ4NTMyNjE4N0RGREVDMDA4M0I2
ODcgLyogRlRMUmVjb3ZlcnlPcGNvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gRlRMUmVjb3ZlcnlPcGNvZGUuaDsgcGF0aCA9IGZ0bC9GVExSZWNvdmVyeU9wY29kZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ5M0FGODE2RDBDQUQxMDA4NDUwOEIgLyog
U291cmNlUHJvdmlkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U291cmNlUHJvdmlkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRCOTRE
QjE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRBcnJheUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRBcnJheUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMEY0Q0VENUMxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJ
ZExpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUG9seW1vcnBo
aWNHZXRCeUlkTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNENFRDVE
MThDRUE3QUIwMDgwMkZFMCAvKiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvbHltb3JwaGljR2V0QnlJZExpc3QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0RjI5REQxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRp
Y0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNw
cDsgcGF0aCA9IGRmZy9ERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEYyOURFMThCNkFEMUMwMDU3QkMxNSAv
KiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFz
ZS5oOyBwYXRoID0gZGZnL0RGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTBBRjNCMTkzRThCMzkwMDY3NEVFOCAv
KiBERkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmg7IHBhdGggPSBkZmcvREZHU3RydWN0dXJl
Q2xvYmJlclN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjI5LDggKzIy
MjEsNiBAQAogCQkwRjcwMjVBODE3MTRCMEY4MDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVy
Q29tbW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRDb21w
aWxlckNvbW1vbi5oOyBwYXRoID0gZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjcxNENBMTE2RUE5MkVEMDBGM0VCRUIgLyogREZH
QmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9E
RkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY3MTRDQTIxNkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9u
UGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmFja3dhcmRzUHJv
cGFnYXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY3NTc2RDAxOEUxRkVFOTAwMkVGNENE
IC8qIEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY3NTc2RDExOEUxRkVFOTAwMkVGNENEIC8qIEFjY2Vzc29y
Q2FsbEpJVFN0dWJSb3V0aW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFj
Y2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGNzY2RDFDMTVBNTAyOEQwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRTdHViUm91dGluZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjc2NkQyNjE1QThDQzFCMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUU3R1YlJvdXRpbmUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc2NkQyOTE1QThDQzM0MDA4RjM2
M0UgLyogSklUU3R1YlJvdXRpbmVTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSklUU3R1YlJvdXRpbmVTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjMwMyw4ICsyMjkzLDYgQEAKIAkJMEY5RTMyNjIxQjA1QUIwNDAwODAxRUQ1IC8qIERG
R1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHU3Rv
cmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY5RkI0RjIxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RhY2tMYXlvdXRQaGFzZS5jcHA7
IHBhdGggPSBkZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGOUZCNEYzMTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1N0YWNrTGF5b3V0UGhhc2Uu
aDsgcGF0aCA9IGRmZy9ERkdTdGFja0xheW91dFBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTBGOUZDOEJGMTRFMUI1RkIwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRM
aXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBvbHltb3JwaGlj
UHV0QnlJZExpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjlGQzhDMDE0
RTFCNUZCMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGOUZDOEMxMTRFMUI1RkIwMEQ1MkFFMCAvKiBQdXRLaW5kLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1dEtpbmQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZBMkMxNzkxN0Q3Q0Y4NDAwOUQwMTVGIC8qIFRlc3RSdW5uZXJV
dGlscy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXN0UnVubmVy
VXRpbHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkEyQzE3QTE3RDdDRjg0
MDA5RDAxNUYgLyogVGVzdFJ1bm5lclV0aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFRlc3RSdW5uZXJVdGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MjU3OSw2ICsyNTY3LDggQEAKIAkJMEZGOEJERTgxQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVk
VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5mZXJyZWRW
YWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjhCREU5MUFENENGNzEw
MERGRTg4NCAvKiBJbmZlcnJlZFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEluZmVycmVkVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGOTIy
Q0YxNEY0NkIxMzAwNDFBMjRFIC8qIEpTQ0xMSW50T2Zmc2V0c0V4dHJhY3RvciAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5l
eGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gSlNDTExJbnRPZmZzZXRzRXh0
cmFjdG9yOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQkwRkY5Q0U3MTFC
OUNENkQwMDA0RURDQTYgLyogUG9seW1vcnBoaWNBY2Nlc3MuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUG9seW1vcnBoaWNBY2Nlc3MuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkY5Q0U3MjFCOUNENkQwMDA0RURDQTYgLyogUG9seW1vcnBoaWNB
Y2Nlc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9seW1vcnBoaWNBY2Nl
c3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQjZDMzYxQUY0OEREQzAwREIx
QkY3IC8qIFR5cGVvZlR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gVHlwZW9mVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRkI2QzM3
MUFGNDhEREMwMERCMUJGNyAvKiBUeXBlb2ZUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFR5cGVvZlR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZG
Qzk5RDAxODRFQzhBRDAwOUMxMEFCIC8qIENvbnN0YW50TW9kZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDb25zdGFudE1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTQwOTYsMTAgKzQwODYsNiBAQAogCQkxNDI5RDkyQzBFRDIyRDcwMDBCODk2MTkgLyog
aml0ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkwRkYw
NTRGNzFBQzM1QjQ0MDBFNUJFNTcgLyogRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6LmNwcCAqLywK
LQkJCQkwRkYwNTRGODFBQzM1QjQ0MDBFNUJFNTcgLyogRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6
LmggKi8sCi0JCQkJMEY3NTc2RDAxOEUxRkVFOTAwMkVGNENEIC8qIEFjY2Vzc29yQ2FsbEpJVFN0
dWJSb3V0aW5lLmNwcCAqLywKLQkJCQkwRjc1NzZEMTE4RTFGRUU5MDAyRUY0Q0QgLyogQWNjZXNz
b3JDYWxsSklUU3R1YlJvdXRpbmUuaCAqLywKIAkJCQkwRjZCMUNDNzE4NjQxREY4MDA4NDVEOTcg
LyogQXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3MuY3BwICovLAogCQkJCTBGNkIxQ0M4MTg2NDFE
RjgwMDg0NUQ5NyAvKiBBcml0eUNoZWNrRmFpbFJldHVyblRodW5rcy5oICovLAogCQkJCTBGMjRF
NTNCMTdFQTlGNTkwMEFCQjIxNyAvKiBBc3NlbWJseUhlbHBlcnMuY3BwICovLApAQCAtNDEwOCw2
ICs0MDk0LDggQEAKIAkJCQkwRjY0QjI3MDFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNo
LmggKi8sCiAJCQkJMEYyNEU1M0QxN0VBOUY1OTAwQUJCMjE3IC8qIENDYWxsSGVscGVycy5oICov
LAogCQkJCTBGRDgyRTM3MTQxQUIxNDIwMDE3OUM5NCAvKiBDb21wYWN0SklUQ29kZU1hcC5oICov
LAorCQkJCTBGRjA1NEY3MUFDMzVCNDQwMEU1QkU1NyAvKiBFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1
enouY3BwICovLAorCQkJCTBGRjA1NEY4MUFDMzVCNDQwMEU1QkU1NyAvKiBFeGVjdXRhYmxlQWxs
b2NhdGlvbkZ1enouaCAqLywKIAkJCQlBN0I0OERCNjBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0
YWJsZUFsbG9jYXRvci5jcHAgKi8sCiAJCQkJQTdCNDhEQjUwRUU3NENGQzAwRENCREI2IC8qIEV4
ZWN1dGFibGVBbGxvY2F0b3IuaCAqLywKIAkJCQk4NkRCNjQ2MzBGOTVDNkZDMDBEN0Q5MjEgLyog
RXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcCAqLywKQEAgLTQxNTQsOCArNDE0Miw2
IEBACiAJCQkJMEZDNzEyRTExN0NEODc4RjAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrLmggKi8sCiAJCQkJQTc2RjU0QTIxM0IyOEFBQjAwRUYyQkNFIC8qIEpJ
VFdyaXRlQmFycmllci5oICovLAogCQkJCUE3NkM1MTc0MTE4Mjc0OEQwMDcxNUIwNSAvKiBKU0lu
dGVyZmFjZUpJVC5oICovLAotCQkJCTBGRUU5ODQyMUE4OTIyNzUwMDc1NEU5MyAvKiBTZXR1cFZh
cmFyZ3NGcmFtZS5jcHAgKi8sCi0JCQkJMEZFRTk4NDAxQTg4NjVCNjAwNzU0RTkzIC8qIFNldHVw
VmFyYXJnc0ZyYW1lLmggKi8sCiAJCQkJMEZFODM0MTUxQTZFRjk3QjAwRDA0ODQ3IC8qIFBvbHlt
b3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcCAqLywKIAkJCQkwRkU4MzQxNjFBNkVGOTdCMDBEMDQ4
NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaCAqLywKIAkJCQkwRkE3QThFOTE4QjQx
M0M4MDA1MjM3MUQgLyogUmVnLmNwcCAqLywKQEAgLTQxNjksNiArNDE1NSw4IEBACiAJCQkJMEYy
NEU1NEExN0VFMjc0OTAwQUJCMjE3IC8qIFJlcGF0Y2guaCAqLywKIAkJCQkwRkE3QThFRDE4Q0U0
RkQ4MDA1MjM3MUQgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcCAqLywKIAkJCQkwRjI0
RTU0QjE3RUUyNzQ5MDBBQkIyMTcgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmggKi8sCisJ
CQkJMEZFRTk4NDIxQTg5MjI3NTAwNzU0RTkzIC8qIFNldHVwVmFyYXJnc0ZyYW1lLmNwcCAqLywK
KwkJCQkwRkVFOTg0MDFBODg2NUI2MDA3NTRFOTMgLyogU2V0dXBWYXJhcmdzRnJhbWUuaCAqLywK
IAkJCQlBNzA5RjJFRjE3QTBBQzA0MDA1MTJFOTggLyogU2xvd1BhdGhDYWxsLmggKi8sCiAJCQkJ
QTczODY1NTExMTg2OTdCNDAwNTQwMjc5IC8qIFNwZWNpYWxpemVkVGh1bmtKSVQuaCAqLywKIAkJ
CQlBN0ZGNjQ3QTE4QzUyRTg1MDBCNTUzMDcgLyogU3BpbGxSZWdpc3RlcnNNb2RlLmggKi8sCkBA
IC01NjAyLDExICs1NTkwLDggQEAKIAkJCQk5NjlBMDc5NTBFRDFEM0FFMDBGMUY2ODEgLyogT3Bj
b2RlLmggKi8sCiAJCQkJMEYyQkRDMkIxNTFGREU4QjAwQ0Q4OTEwIC8qIE9wZXJhbmRzLmggKi8s
CiAJCQkJQTcwNDQ3RTkxN0EwQkQ0NjAwRjU4OThFIC8qIE9wZXJhbmRzSW5saW5lcy5oICovLAot
CQkJCTBGMzRCMTRCMTZENDNFMEMwMDFDREE1QSAvKiBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVy
ZUxpc3QuaCAqLywKLQkJCQkwRjRDRUQ1QzE4Q0VBN0FCMDA4MDJGRTAgLyogUG9seW1vcnBoaWNH
ZXRCeUlkTGlzdC5jcHAgKi8sCi0JCQkJMEY0Q0VENUQxOENFQTdBQjAwODAyRkUwIC8qIFBvbHlt
b3JwaGljR2V0QnlJZExpc3QuaCAqLywKLQkJCQkwRjlGQzhCRjE0RTFCNUZCMDBENTJBRTAgLyog
UG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAgKi8sCi0JCQkJMEY5RkM4QzAxNEUxQjVGQjAwRDUy
QUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuaCAqLywKKwkJCQkwRkY5Q0U3MTFCOUNENkQw
MDA0RURDQTYgLyogUG9seW1vcnBoaWNBY2Nlc3MuY3BwICovLAorCQkJCTBGRjlDRTcyMUI5Q0Q2
RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5oICovLAogCQkJCTBGOTgyMDVEMTZCRkUz
N0YwMDI0MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuY3BwICovLAogCQkJCTBGOTgyMDVFMTZC
RkUzN0YwMDI0MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuaCAqLywKIAkJCQkwRkQzRTQwNzFC
NjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uY3BwICovLApAQCAtNTYzNyw4ICs1
NjIyLDggQEAKIAkJCQkwRjJENERFNzE5ODMyREFDMDA3RDRCMTkgLyogVHlwZUxvY2F0aW9uLmgg
Ki8sCiAJCQkJQTc5RTc4MUUxNUVFQ0JBODAwNDdDODU1IC8qIFVubGlua2VkQ29kZUJsb2NrLmNw
cCAqLywKIAkJCQlBNzlFNzgxRjE1RUVDQkE4MDA0N0M4NTUgLyogVW5saW5rZWRDb2RlQmxvY2su
aCAqLywKLQkJCQkxNDE0MkU1MDFCNzk2RUNFMDBGNEJGNEIgLyogVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUuaCAqLywKIAkJCQkxNDE0MkU1NDFCNzk3M0MwMDBGNEJGNEIgLyogVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGUuY3BwICovLAorCQkJCTE0MTQyRTUwMUI3OTZFQ0UwMEY0QkY0QiAv
KiBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oICovLAogCQkJCUI1OUY4OTM4MTg5MUFEQjUw
MEQ1Q0NEQyAvKiBVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtLmNwcCAqLywKIAkJCQlCNTlGODkz
NzE4OTFBRDMzMDBENUNDREMgLyogVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbS5oICovLAogCQkJ
CTBGOTYzQjM2MTNGQzZGREUwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCAqLywKQEAgLTYyMDMs
NyArNjE4OCw2IEBACiAJCQkJMEZDMDk3NzExNDY5M0FGNTAwQ0YyNDQyIC8qIERGR09TUkV4aXRD
b21waWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3MDI1QUExNzE0QjBGQzAwMzgyQzBFIC8q
IERGR09TUkV4aXRDb21waWxlckNvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFRkM5QUIx
NjgxQTNCNjAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTBGNENFRDVGMThDRUE3QUIwMDgwMkZFMCAvKiBQb2x5bW9ycGhpY0dldEJ5SWRM
aXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJFRTE3MTc4RTczMDA2OTBDN0YgLyogREZH
T1NSRXhpdFByZXBhcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZGQzk1QzE0RUY5MEFG
MDBDNzI1MzIgLyogREZHUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RUE3MEVFMTlGNUI1
QzQwMDk4RjVFQyAvKiBKU0NvbnRleHRSZWZJbnNwZWN0b3JTdXBwb3J0LmggaW4gSGVhZGVycyAq
LywKQEAgLTYyNTIsNiArNjIzNiw3IEBACiAJCQkJOTlFNDVBMjQxOEExQjI1OTAwMjZEODhGIC8q
IEVtcHR5SW5wdXRDdXJzb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MTQyRTUzMUI3OTZFREQw
MEY0QkY0QiAvKiBFeGVjdXRhYmxlSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTlFNDVBMjYx
OEExQjI1OTAwMjZEODhGIC8qIEVuY29kZWRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZG
OUNFNzQxQjlDRDZEMDAwNEVEQ0E2IC8qIFBvbHltb3JwaGljQWNjZXNzLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjU4NzRFRTE5NEZFQjEyMDBBQUIyQzEgLyogREZHTWF5RXhpdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMzMDQ2MDcwRTFGNDk3RjAwMzIzMkNGIC8qIEVycm9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzAyRTkwRDBFMTgzOURCMDAwRjkyOTcgLyogRXJyb3JDb25zdHJ1Y3Rvci5o
IGluIEhlYWRlcnMgKi8sCkBAIC02NDg1LDcgKzY0NzAsNiBAQAogCQkJCUJDMThDNDFFMEUxNkY1
Q0QwMEIzNDQ2MCAvKiBKU0NvbnRleHRSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0OENEMUQ4
MTA4Q0Y5MDIwMDgxNjNDNiAvKiBKU0NvbnRleHRSZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzIwMjhCODE3OTc2MDFFMDA5ODAyOEMgLyogSlNDVGVzdFJ1bm5lclV0aWxzLmggaW4g
SGVhZGVycyAqLywKLQkJCQkwRjc1NzZEMzE4RTFGRUU5MDAyRUY0Q0QgLyogQWNjZXNzb3JDYWxs
SklUU3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkVDMTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0RhdGFWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZFRTE3QjZCNUFC
MDBBN0FFM0YgLyogSlNEYXRhVmlld1Byb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc4
ODAxNDExNDcxQUQ5MjAwNDFCMDE2IC8qIEpTRGF0ZU1hdGguaCBpbiBIZWFkZXJzICovLApAQCAt
NjY4NSw4ICs2NjY5LDYgQEAKIAkJCQkwRkNDQUU0NTE2RDBDRjc0MDBEMEM2NUIgLyogUGFyc2Vy
RXJyb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3N0YxODI1MTY0MTkyQzcwMDY0MEE0NyAvKiBQ
YXJzZXJNb2Rlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjUzMDNENjQxNDQ3QjlFMTAwRDNGOTA0
IC8qIFBhcnNlclRva2Vucy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEYzNEIxNEMxNkQ0M0UwRDAw
MUNEQTVBIC8qIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdC5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJMEY5RkM4QzQxNEUxQjYwMDAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGOEYxNDM0MUFERjA5MDEwMEVENzkyQyAvKiBERkdFcG9j
aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5ODIwNjExNkJGRTM4MzAwMjQwRDAyIC8qIFByZWNp
c2VKdW1wVGFyZ2V0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyREQ4MTUxQUIzRDhCRTAwQkJC
OEU4IC8qIERGR0ZvckFsbEtpbGxzLmggaW4gSGVhZGVycyAqLywKQEAgLTc4NDcsNyArNzgyOSw2
IEBACiAJCQkJMEYwQjgzOUMxNEJDRjQ2MzAwODg1QjRGIC8qIExMSW50VGh1bmtzLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGQ0VGQUNEMTgwNUU3NTUwMDQ3MkNFNCAvKiBMTFZNQVBJLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE3RTVBQjM3MTc5OUU0QjIwMEQyODMzRCAvKiBMTFZNRGlzYXNz
ZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGNENFRDVFMThDRUE3QUIwMDgwMkZFMCAv
KiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5RERF
MTA3RUM3RTcwMDY1MDQ0NiAvKiBMb29rdXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0Njgw
Q0MxNEJCQjE3QTAwQkZFMjcyIC8qIExvd0xldmVsSW50ZXJwcmV0ZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTRCNzIzQjIxMkQ3REE0NjAwM0JENUVEIC8qIE1hY2hpbmVTdGFja01hcmtlci5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTc4ODksNyArNzg3MCw2IEBACiAJCQkJMEZFMjI4RUUxNDM2
QUIyQzAwMTk2QzQ4IC8qIE9wdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ4RjIxQkMx
MDdFQzU0RDAwNDJFQzJDIC8qIFBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzA1MkMz
NDBGQjc5MjE5MDA0OEZEQzMgLyogUGFyc2VyQXJlbmEuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJ
MEY5RkM4QzMxNEUxQjVGRTAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEY5ODIwNjAxNkJGRTM4MTAwMjQwRDAyIC8qIFByZWNpc2VKdW1w
VGFyZ2V0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NTc0MkY2NTBERDExRjVBMDAwOTE3RkIg
LyogUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCOUNGODE5RDBCQUMxMDBCMUQx
QjUgLyogRlRMT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc5MDYsNiArNzg4Niw3
IEBACiAJCQkJMEYxOTBDQUMxODlEODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFz
b24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QjMxNjZBRDM1QzAwMEY1QkEzIC8qIFBy
b2ZpbGVyT3JpZ2luLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUI0MTY2QUQzNUMwMDBG
NUJBMyAvKiBQcm9maWxlck9yaWdpblN0YWNrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRjlD
RTczMUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRkIxMDU4QjE2NzU0ODMxMDBGOEFCNkUgLyogUHJvZmlsZXJPU1JFeGl0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGQjEwNThEMTY3NTQ4MzcwMEY4QUI2RSAvKiBQcm9maWxlck9T
UkV4aXRTaXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMTM5MTJCMTY3NzFDM0EwMDlDQ0Iw
NyAvKiBQcm9maWxlclByb2ZpbGVkQnl0ZWNvZGVzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtODAx
MSw3ICs3OTkyLDYgQEAKIAkJCQlBNzZGMjc5NDE1RjEzQzk2MDA1MTdENjcgLyogVW5saW5rZWRD
b2RlQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjU5Rjg5MzkxODkxRjI5RjAwRDVDQ0RD
IC8qIFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTM5
REE0QTYxQjdFOEI3QzAwODRGMzNBIC8qIEpTTW9kdWxlUmVjb3JkLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCTBGNzU3NkQyMThFMUZFRTkwMDJFRjRDRCAvKiBBY2Nlc3NvckNhbGxKSVRTdHViUm91
dGluZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjI0RTU1ODE3Rjc0RURCMDBBQkIyMTcgLyog
VmFsdWVSZWNvdmVyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMThFM0E1OTBERjkyNzhDMDBE
OTBCMzQgLyogVk0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkU1OTMyQTcxODNDNUEyNjAwQTFF
Q0NDIC8qIFZNRW50cnlTY29wZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYu
aAkocmV2aXNpb24gMTg5NTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlckNvZGVSZWYuaAkod29ya2luZyBjb3B5KQpAQCAtMzI3LDYgKzMyNywxMCBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIGR1bXBXaXRoTmFtZShjb25zdCBjaGFyKiBuYW1lLCBQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAogICAgIHsKKyAgICAgICAgaWYgKCFtX3ZhbHVlKSB7CisgICAg
ICAgICAgICBvdXQucHJpbnQobmFtZSwgIihudWxsKSIpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CiAgICAgICAgIGlmIChleGVjdXRhYmxlQWRkcmVzcygpID09IGRhdGFMb2NhdGlv
bigpKSB7CiAgICAgICAgICAgICBvdXQucHJpbnQobmFtZSwgIigiLCBSYXdQb2ludGVyKGV4ZWN1
dGFibGVBZGRyZXNzKCkpLCAiKSIpOwogICAgICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE4OTUx
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Myw4ICs1Myw3IEBACiAjaW5jbHVkZSAiTExJbnRFbnRyeXBvaW50Lmgi
CiAjaW5jbHVkZSAiTG93TGV2ZWxJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKLSNpbmNsdWRlICJQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgiCi0jaW5jbHVkZSAiUG9seW1v
cnBoaWNQdXRCeUlkTGlzdC5oIgorI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCiAjaW5j
bHVkZSAiUHJvZmlsZXJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIlJlZHVjZVdoaXRlc3BhY2UuaCIK
ICNpbmNsdWRlICJSZXBhdGNoLmgiCkBAIC0zNDMsMjAgKzM0MiwxOSBAQCB2b2lkIENvZGVCbG9j
azo6cHJpbnRHZXRCeUlkQ2FjaGVTdGF0dXMoCiAgICAgICAgIGlmIChzdHViSW5mby5zZWVuKSB7
CiAgICAgICAgICAgICBvdXQucHJpbnRmKCIgaml0KCIpOwogICAgICAgICAgICAgCi0gICAgICAg
ICAgICBTdHJ1Y3R1cmUqIGJhc2VTdHJ1Y3R1cmUgPSAwOwotICAgICAgICAgICAgU3RydWN0dXJl
KiBwcm90b3R5cGVTdHJ1Y3R1cmUgPSAwOwotICAgICAgICAgICAgUG9seW1vcnBoaWNHZXRCeUlk
TGlzdCogbGlzdCA9IDA7CisgICAgICAgICAgICBTdHJ1Y3R1cmUqIGJhc2VTdHJ1Y3R1cmUgPSBu
dWxscHRyOworICAgICAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3MqIHN0dWIgPSBudWxscHRyOwog
ICAgICAgICAgICAgCi0gICAgICAgICAgICBzd2l0Y2ggKHN0dWJJbmZvLmFjY2Vzc1R5cGUpIHsK
LSAgICAgICAgICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmOgorICAgICAgICAgICAgc3dp
dGNoIChzdHViSW5mby5jYWNoZVR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgQ2FjaGVUeXBlOjpH
ZXRCeUlkU2VsZjoKICAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCJzZWxmIik7Ci0gICAgICAg
ICAgICAgICAgYmFzZVN0cnVjdHVyZSA9IHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVj
dFN0cnVjdHVyZS5nZXQoKTsKKyAgICAgICAgICAgICAgICBiYXNlU3RydWN0dXJlID0gc3R1Yklu
Zm8udS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3Q6Ci0gICAgICAg
ICAgICAgICAgb3V0LnByaW50ZigibGlzdCIpOwotICAgICAgICAgICAgICAgIGxpc3QgPSBzdHVi
SW5mby51LmdldEJ5SWRMaXN0Lmxpc3Q7CisgICAgICAgICAgICBjYXNlIENhY2hlVHlwZTo6U3R1
YjoKKyAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCJzdHViIik7CisgICAgICAgICAgICAgICAg
c3R1YiA9IHN0dWJJbmZvLnUuc3R1YjsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGNhc2UgYWNjZXNzX3Vuc2V0OgorICAgICAgICAgICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0
OgogICAgICAgICAgICAgICAgIG91dC5wcmludGYoInVuc2V0Iik7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMzY4LDI3ICszNjYsMTAgQEAgdm9pZCBD
b2RlQmxvY2s6OnByaW50R2V0QnlJZENhY2hlU3RhdHVzKAogICAgICAgICAgICAgICAgIG91dC5w
cmludGYoIiwgIik7CiAgICAgICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJzdHJ1Y3Qi
LCBiYXNlU3RydWN0dXJlLCBpZGVudCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGlmIChwcm90b3R5cGVTdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgICAgICBvdXQu
cHJpbnRmKCIsICIpOwotICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAicHJvdG90
eXBlU3RydWN0IiwgYmFzZVN0cnVjdHVyZSwgaWRlbnQpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBpZiAobGlzdCkgewotICAgICAgICAgICAgICAgIG91dC5wcmlu
dGYoIiwgbGlzdCA9ICVwOiBbIiwgbGlzdCk7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChpKQotICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiLCAiKTsKLSAgICAgICAg
ICAgICAgICAgICAgb3V0LnByaW50ZigiKCIpOwotICAgICAgICAgICAgICAgICAgICBkdW1wU3Ry
dWN0dXJlKG91dCwgImJhc2UiLCBsaXN0LT5hdChpKS5zdHJ1Y3R1cmUoKSwgaWRlbnQpOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoIWxpc3QtPmF0KGkpLmNvbmRpdGlvblNldCgpLmlzRW1wdHko
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiLCAiKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG91dC5wcmludChsaXN0LT5hdChpKS5jb25kaXRpb25TZXQoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiKSIp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCJdIik7Ci0g
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChzdHViKQorICAgICAgICAgICAgICAgIG91
dC5wcmludCgiLCAiLCAqc3R1Yik7CisKICAgICAgICAgICAgIG91dC5wcmludGYoIikiKTsKICAg
ICAgICAgfQogICAgIH0KQEAgLTQ0NCw1MyArNDI1LDE2IEBAIHZvaWQgQ29kZUJsb2NrOjpwcmlu
dFB1dEJ5SWRDYWNoZVN0YXR1cygKICAgICAgICAgaWYgKHN0dWJJbmZvLnNlZW4pIHsKICAgICAg
ICAgICAgIG91dC5wcmludGYoIiBqaXQoIik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHN3
aXRjaCAoc3R1YkluZm8uYWNjZXNzVHlwZSkgewotICAgICAgICAgICAgY2FzZSBhY2Nlc3NfcHV0
X2J5X2lkX3JlcGxhY2U6CisgICAgICAgICAgICBzd2l0Y2ggKHN0dWJJbmZvLmNhY2hlVHlwZSkg
eworICAgICAgICAgICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOgogICAgICAgICAg
ICAgICAgIG91dC5wcmludCgicmVwbGFjZSwgIik7Ci0gICAgICAgICAgICAgICAgZHVtcFN0cnVj
dHVyZShvdXQsICJzdHJ1Y3QiLCBzdHViSW5mby51LnB1dEJ5SWRSZXBsYWNlLmJhc2VPYmplY3RT
dHJ1Y3R1cmUuZ2V0KCksIGlkZW50KTsKKyAgICAgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91
dCwgInN0cnVjdCIsIHN0dWJJbmZvLnUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQo
KSwgaWRlbnQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBhY2Nl
c3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgotICAgICAgICAgICAgY2FzZSBhY2Nlc3Nf
cHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0OgotICAgICAgICAgICAgICAgIG91dC5wcmludCgi
dHJhbnNpdGlvbiwgIik7Ci0gICAgICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJwcmV2
Iiwgc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZS5nZXQoKSwg
aWRlbnQpOwotICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCAiKTsKLSAgICAgICAgICAgICAg
ICBkdW1wU3RydWN0dXJlKG91dCwgIm5leHQiLCBzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9u
LnN0cnVjdHVyZS5nZXQoKSwgaWRlbnQpOwotICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby51
LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0NvbmRpdGlvblNldCkKLSAgICAgICAgICAgICAgICAgICAg
b3V0LnByaW50KCIsICIsIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Ojpmcm9tUmF3UG9pbnRl
cihzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0NvbmRpdGlvblNldCkpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX2xpc3Q6
IHsKLSAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCJsaXN0ID0gWyIpOwotICAgICAgICAgICAg
ICAgIFBvbHltb3JwaGljUHV0QnlJZExpc3QqIGxpc3QgPSBzdHViSW5mby51LnB1dEJ5SWRMaXN0
Lmxpc3Q7Ci0gICAgICAgICAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hOwotICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5zaXplKCk7ICsraSkgewotICAgICAg
ICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICIoIik7Ci0gICAgICAgICAgICAgICAgICAg
IGNvbnN0IFB1dEJ5SWRBY2Nlc3MmIGFjY2VzcyA9IGxpc3QtPmF0KGkpOwotICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFjY2Vzcy5pc1JlcGxhY2UoKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCJyZXBsYWNlLCAiKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAic3RydWN0IiwgYWNjZXNzLm9sZFN0
cnVjdHVyZSgpLCBpZGVudCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWNjZXNz
LmlzU2V0dGVyKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgic2V0dGVy
LCAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAic3RydWN0
IiwgYWNjZXNzLm9sZFN0cnVjdHVyZSgpLCBpZGVudCk7Ci0gICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoYWNjZXNzLmlzQ3VzdG9tKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG91
dC5wcmludCgiY3VzdG9tLCAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1
cmUob3V0LCAic3RydWN0IiwgYWNjZXNzLm9sZFN0cnVjdHVyZSgpLCBpZGVudCk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWNjZXNzLmlzVHJhbnNpdGlvbigpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBvdXQucHJpbnQoInRyYW5zaXRpb24sICIpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJwcmV2IiwgYWNjZXNzLm9sZFN0cnVjdHVy
ZSgpLCBpZGVudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgIm5leHQiLCBhY2Nlc3Mu
bmV3U3RydWN0dXJlKCksIGlkZW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYWNj
ZXNzLmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvdXQucHJpbnQoIiwgIiwgYWNjZXNzLmNvbmRpdGlvblNldCgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoInVua25vd24i
KTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgi
KSIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBvdXQucHJpbnQoIl0iKTsK
KyAgICAgICAgICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOiB7CisgICAgICAgICAgICAgICAgb3V0
LnByaW50KCJzdHViLCAiLCAqc3R1YkluZm8udS5zdHViKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgYWNjZXNzX3Vuc2V0OgorICAgICAg
ICAgICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0OgogICAgICAgICAgICAgICAgIG91dC5wcmludGYo
InVuc2V0Iik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgpA
QCAtMjQ2MSwzOSArMjQwNSwyMiBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlv
bnMoU2xvCiAgICAgaWYgKEpJVENvZGU6OmlzSklUKGppdFR5cGUoKSkpIHsKICAgICAgICAgZm9y
IChCYWc8U3RydWN0dXJlU3R1YkluZm8+OjppdGVyYXRvciBpdGVyID0gbV9zdHViSW5mb3MuYmVn
aW4oKTsgISFpdGVyOyArK2l0ZXIpIHsKICAgICAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbyA9ICoqaXRlcjsKLSAgICAgICAgICAgIHN3aXRjaCAoc3R1YkluZm8uYWNjZXNzVHlw
ZSkgewotICAgICAgICAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFs
OgotICAgICAgICAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0OiB7
Ci0gICAgICAgICAgICAgICAgSlNDZWxsKiBvcmlnaW4gPSBzdHViSW5mby5jb2RlT3JpZ2luLmNv
ZGVPcmlnaW5Pd25lcigpOwotICAgICAgICAgICAgICAgIGlmICgoIW9yaWdpbiB8fCBIZWFwOjpp
c01hcmtlZChvcmlnaW4pKQotICAgICAgICAgICAgICAgICAgICAmJiBIZWFwOjppc01hcmtlZChz
dHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgpKSkKLSAg
ICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJnN0dWJJbmZvLnUucHV0QnlJZFRyYW5z
aXRpb24uc3RydWN0dXJlKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIGFsbEFyZU1hcmtlZFNvRmFyID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlICE9IENhY2hlVHlwZTo6U3R1YikKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIFBvbHltb3JwaGljQWNjZXNzKiBs
aXN0ID0gc3R1YkluZm8udS5zdHViOworICAgICAgICAgICAgSlNDZWxsKiBvcmlnaW4gPSBzdHVi
SW5mby5jb2RlT3JpZ2luLmNvZGVPcmlnaW5Pd25lcigpOworICAgICAgICAgICAgaWYgKG9yaWdp
biAmJiAhSGVhcDo6aXNNYXJrZWQob3JpZ2luKSkgeworICAgICAgICAgICAgICAgIGFsbEFyZU1h
cmtlZFNvRmFyID0gZmFsc2U7CisgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9saXN0OiB7Ci0gICAgICAg
ICAgICAgICAgUG9seW1vcnBoaWNQdXRCeUlkTGlzdCogbGlzdCA9IHN0dWJJbmZvLnUucHV0QnlJ
ZExpc3QubGlzdDsKLSAgICAgICAgICAgICAgICBKU0NlbGwqIG9yaWdpbiA9IHN0dWJJbmZvLmNv
ZGVPcmlnaW4uY29kZU9yaWdpbk93bmVyKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG9yaWdpbiAm
JiAhSGVhcDo6aXNNYXJrZWQob3JpZ2luKSkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBq
ID0gbGlzdC0+c2l6ZSgpOyBqLS07KSB7CisgICAgICAgICAgICAgICAgY29uc3QgQWNjZXNzQ2Fz
ZSYgYWNjZXNzID0gbGlzdC0+YXQoaik7CisgICAgICAgICAgICAgICAgaWYgKGFjY2Vzcy50eXBl
KCkgIT0gQWNjZXNzQ2FzZTo6VHJhbnNpdGlvbikKKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKGFjY2Vzcy5zdHJ1Y3R1cmUo
KSkpCisgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25s
eVBvaW50ZXIoYWNjZXNzLm5ld1N0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICAgICAgIGFsbEFyZU1hcmtlZFNvRmFyID0gZmFsc2U7Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGogPSBsaXN0LT5zaXplKCk7IGotLTspIHsKLSAgICAgICAgICAgICAgICAgICAg
UHV0QnlJZEFjY2VzcyYgYWNjZXNzID0gbGlzdC0+bV9saXN0W2pdOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoIWFjY2Vzcy5pc1RyYW5zaXRpb24oKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQoYWNjZXNz
Lm9sZFN0cnVjdHVyZSgpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5k
KCZhY2Nlc3MubV9uZXdTdHJ1Y3R1cmUpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgICAgICBhbGxBcmVNYXJrZWRTb0ZhciA9IGZhbHNlOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTI3ODUsMTAgKzI3MTIsMTAgQEAgdm9pZCBD
b2RlQmxvY2s6OmdldEJ5VmFsSW5mb01hcChCeVZhbEluZgogfQogCiAjaWYgRU5BQkxFKEpJVCkK
LVN0cnVjdHVyZVN0dWJJbmZvKiBDb2RlQmxvY2s6OmFkZFN0dWJJbmZvKCkKK1N0cnVjdHVyZVN0
dWJJbmZvKiBDb2RlQmxvY2s6OmFkZFN0dWJJbmZvKEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSkKIHsK
ICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJldHVybiBtX3N0
dWJJbmZvcy5hZGQoKTsKKyAgICByZXR1cm4gbV9zdHViSW5mb3MuYWRkKGFjY2Vzc1R5cGUpOwog
fQogCiBTdHJ1Y3R1cmVTdHViSW5mbyogQ29kZUJsb2NrOjpmaW5kU3R1YkluZm8oQ29kZU9yaWdp
biBjb2RlT3JpZ2luKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suaAkocmV2aXNpb24gMTg5NTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDgsNyArMjA4LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgZ2V0QnlWYWxJbmZvTWFwKEJ5VmFsSW5mb01hcCYgcmVzdWx0KTsKICAgICAK
ICNpZiBFTkFCTEUoSklUKQotICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBhZGRTdHViSW5mbygpOwor
ICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBhZGRTdHViSW5mbyhBY2Nlc3NUeXBlKTsKICAgICBCYWc8
U3RydWN0dXJlU3R1YkluZm8+OjppdGVyYXRvciBzdHViSW5mb0JlZ2luKCkgeyByZXR1cm4gbV9z
dHViSW5mb3MuYmVnaW4oKTsgfQogICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz46Oml0ZXJhdG9y
IHN0dWJJbmZvRW5kKCkgeyByZXR1cm4gbV9zdHViSW5mb3MuZW5kKCk7IH0KICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAJ
KHJldmlzaW9uIDE4OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRC
eUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTQgKzI2LDEzIEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiR2V0QnlJZFN0YXR1cy5oIgogCi0jaW5jbHVkZSAiQWNj
ZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNs
dWRlICJDb21wbGV4R2V0U3RhdHVzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1
ZGUgIkpTU2NvcGUuaCIKICNpbmNsdWRlICJMTEludERhdGEuaCIKICNpbmNsdWRlICJMb3dMZXZl
bEludGVycHJldGVyLmgiCi0jaW5jbHVkZSAiUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oIgorI2lu
Y2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCiAjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CiAK
IG5hbWVzcGFjZSBKU0MgewpAQCAtMTM5LDEyICsxMzgsMTIgQEAgR2V0QnlJZFN0YXR1cyBHZXRC
eUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgIGlmICghc3R1YkluZm8tPnNlZW4pCiAgICAgICAg
IHJldHVybiBHZXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwogICAgIAotICAgIFBvbHltb3Jw
aGljR2V0QnlJZExpc3QqIGxpc3QgPSAwOworICAgIFBvbHltb3JwaGljQWNjZXNzKiBsaXN0ID0g
MDsKICAgICBTdGF0ZSBzbG93UGF0aFN0YXRlID0gVGFrZXNTbG93UGF0aDsKLSAgICBpZiAoc3R1
YkluZm8tPmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9saXN0KSB7Ci0gICAgICAgIGxp
c3QgPSBzdHViSW5mby0+dS5nZXRCeUlkTGlzdC5saXN0OworICAgIGlmIChzdHViSW5mby0+Y2Fj
aGVUeXBlID09IENhY2hlVHlwZTo6U3R1YikgeworICAgICAgICBsaXN0ID0gc3R1YkluZm8tPnUu
c3R1YjsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytp
KSB7Ci0gICAgICAgICAgICBjb25zdCBHZXRCeUlkQWNjZXNzJiBhY2Nlc3MgPSBsaXN0LT5hdChp
KTsKKyAgICAgICAgICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIGFjY2VzcyA9IGxpc3QtPmF0KGkpOwog
ICAgICAgICAgICAgaWYgKGFjY2Vzcy5kb2VzQ2FsbHMoKSkKICAgICAgICAgICAgICAgICBzbG93
UGF0aFN0YXRlID0gTWFrZXNDYWxsczsKICAgICAgICAgfQpAQCAtMTU3LDEyICsxNTYsMTIgQEAg
R2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgIEdldEJ5SWRTdGF0
dXMgcmVzdWx0OwogICAgIHJlc3VsdC5tX3N0YXRlID0gU2ltcGxlOwogICAgIHJlc3VsdC5tX3dh
c1NlZW5JbkpJVCA9IHRydWU7IC8vIFRoaXMgaXMgaW50ZXJlc3RpbmcgZm9yIGJ5dGVjb2RlIGR1
bXBpbmcgb25seS4KLSAgICBzd2l0Y2ggKHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSB7Ci0gICAgY2Fz
ZSBhY2Nlc3NfdW5zZXQ6CisgICAgc3dpdGNoIChzdHViSW5mby0+Y2FjaGVUeXBlKSB7CisgICAg
Y2FzZSBDYWNoZVR5cGU6OlVuc2V0OgogICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhOb0lu
Zm9ybWF0aW9uKTsKICAgICAgICAgCi0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGY6IHsK
LSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+dS5nZXRCeUlkU2VsZi5i
YXNlT2JqZWN0U3RydWN0dXJlLmdldCgpOworICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2Vs
ZjogeworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0dWJJbmZvLT51LmJ5SWRTZWxm
LmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCk7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRha2Vz
U2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkpCiAgICAgICAgICAgICByZXR1cm4gR2V0
QnlJZFN0YXR1cyhzbG93UGF0aFN0YXRlLCB0cnVlKTsKICAgICAgICAgdW5zaWduZWQgYXR0cmli
dXRlc0lnbm9yZWQ7CkBAIC0xNzcsMTIgKzE3NiwyNSBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRT
dGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgICAg
ICAKLSAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfbGlzdDogeworICAgIGNhc2UgQ2FjaGVUeXBl
OjpTdHViOiB7CiAgICAgICAgIGZvciAodW5zaWduZWQgbGlzdEluZGV4ID0gMDsgbGlzdEluZGV4
IDwgbGlzdC0+c2l6ZSgpOyArK2xpc3RJbmRleCkgewotICAgICAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBsaXN0LT5hdChsaXN0SW5kZXgpLnN0cnVjdHVyZSgpOworICAgICAgICAgICAg
Y29uc3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0gbGlzdC0+YXQobGlzdEluZGV4KTsKKyAgICAgICAg
ICAgIGlmIChhY2Nlc3MudmlhUHJveHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlJ
ZFN0YXR1cyhzbG93UGF0aFN0YXRlLCB0cnVlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBhY2Nlc3Muc3RydWN0dXJlKCk7CisgICAgICAgICAgICBp
ZiAoIXN0cnVjdHVyZSkgeworICAgICAgICAgICAgICAgIC8vIFRoZSBudWxsIHN0cnVjdHVyZSBj
YXNlcyBhcmlzZSBkdWUgdG8gYXJyYXkubGVuZ3RoIGFuZCBzdHJpbmcubGVuZ3RoLiBXZSBoYXZl
IG5vIHdheQorICAgICAgICAgICAgICAgIC8vIG9mIGNyZWF0aW5nIGEgR2V0QnlJZFZhcmlhbnQg
Zm9yIHRob3NlLCBhbmQgd2UgZG9uJ3QgcmVhbGx5IGhhdmUgdG8gc2luY2UgdGhlIERGRworICAg
ICAgICAgICAgICAgIC8vIGhhbmRsZXMgdGhvc2UgY2FzZXMgaW4gRml4dXBQaGFzZSB1c2luZyB2
YWx1ZSBwcm9maWxpbmcuIFRoYXQncyBhIGJpdCBhd2t3YXJkIC0gd2UKKyAgICAgICAgICAgICAg
ICAvLyBzaG91bGRuJ3QgaGF2ZSB0byB1c2UgdmFsdWUgcHJvZmlsaW5nIHRvIGRpc2NvdmVyIHNv
bWV0aGluZyB0aGF0IHRoZSBBY2Nlc3NDYXNlCisgICAgICAgICAgICAgICAgLy8gY291bGQgaGF2
ZSB0b2xkIHVzLiBCdXQsIGl0IHdvcmtzIHdlbGwgZW5vdWdoLiBTbywgb3VyIG9ubHkgY29uY2Vy
biBoZXJlIGlzIHRvIG5vdAorICAgICAgICAgICAgICAgIC8vIGNyYXNoIG9uIG51bGwgc3RydWN0
dXJlLgorICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUs
IHRydWUpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBDb21wbGV4
R2V0U3RhdHVzIGNvbXBsZXhHZXRTdGF0dXMgPSBDb21wbGV4R2V0U3RhdHVzOjpjb21wdXRlRm9y
KAotICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgbGlzdC0+YXQobGlzdEluZGV4KS5jb25kaXRp
b25TZXQoKSwgdWlkKTsKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGFjY2Vzcy5jb25kaXRp
b25TZXQoKSwgdWlkKTsKICAgICAgICAgICAgICAKICAgICAgICAgICAgIHN3aXRjaCAoY29tcGxl
eEdldFN0YXR1cy5raW5kKCkpIHsKICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6
U2hvdWxkU2tpcDoKQEAgLTE5MywyOSArMjA1LDIzIEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0
YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIENv
bXBsZXhHZXRTdGF0dXM6OklubGluZWFibGU6IHsKICAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzOwotICAgICAgICAgICAgICAgIHN3
aXRjaCAobGlzdC0+YXQobGlzdEluZGV4KS50eXBlKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNl
IEdldEJ5SWRBY2Nlc3M6OlNpbXBsZUlubGluZToKLSAgICAgICAgICAgICAgICBjYXNlIEdldEJ5
SWRBY2Nlc3M6OlNpbXBsZVN0dWI6IHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGFjY2Vzcy50
eXBlKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OkxvYWQ6IHsKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGNhc2UgR2V0QnlJZEFjY2Vzczo6R2V0dGVyOiB7Ci0gICAgICAgICAgICAgICAgICAgIEFjY2Vz
c29yQ2FsbEpJVFN0dWJSb3V0aW5lKiBzdHViID0gc3RhdGljX2Nhc3Q8QWNjZXNzb3JDYWxsSklU
U3R1YlJvdXRpbmUqPigKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QtPmF0KGxpc3RJbmRl
eCkuc3R1YlJvdXRpbmUoKSk7CisgICAgICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpHZXR0
ZXI6IHsKKyAgICAgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBh
Y2Nlc3MuY2FsbExpbmtJbmZvKCk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChjYWxsTGlu
a0luZm8pOwogICAgICAgICAgICAgICAgICAgICBjYWxsTGlua1N0YXR1cyA9IHN0ZDo6bWFrZV91
bmlxdWU8Q2FsbExpbmtTdGF0dXM+KAogICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbExpbmtT
dGF0dXM6OmNvbXB1dGVGb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9ja2VyLCBw
cm9maWxlZEJsb2NrLCAqc3R1Yi0+bV9jYWxsTGlua0luZm8sIGNhbGxFeGl0U2l0ZURhdGEpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ssICpjYWxs
TGlua0luZm8sIGNhbGxFeGl0U2l0ZURhdGEpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlJZEFjY2Vzczo6
U2ltcGxlTWlzczoKLSAgICAgICAgICAgICAgICBjYXNlIEdldEJ5SWRBY2Nlc3M6OkN1c3RvbUdl
dHRlcjoKLSAgICAgICAgICAgICAgICBjYXNlIEdldEJ5SWRBY2Nlc3M6OldhdGNoZWRTdHViOnsK
LSAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIHRvdGFsbHkgc3dlZXQg
dG8gc3VwcG9ydCB0aGlzIGF0IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZS4KLSAgICAgICAgICAg
ICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzA1
MgorICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklY
TUU6IEl0IHdvdWxkIGJlIHRvdGFsbHkgc3dlZXQgdG8gc3VwcG9ydCBtb3JlIG9mIHRoZXNlIGF0
IHNvbWUgcG9pbnQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIC8vIGZ1dHVyZS4gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzA1MgogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhzbG93UGF0aFN0YXRlLCB0cnVlKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfSB9CiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIEdldEJ5SWRW
YXJpYW50IHZhcmlhbnQoCiAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZVNldChzdHJ1Y3R1
cmUpLCBjb21wbGV4R2V0U3RhdHVzLm9mZnNldCgpLApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAx
ODkzMjQpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0LmNwcDoxODkzMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgiCisKKyNp
ZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiSGVhcC5o
IgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworR2V0QnlJZEFjY2Vzczo6R2V0QnlJZEFjY2VzcygKKyAg
ICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgUGFzc1JlZlB0cjxKSVRT
dHViUm91dGluZT4gc3R1YlJvdXRpbmUsCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCisgICAgOiBtX3R5cGUo
dHlwZSkKKyAgICAsIG1fc3RydWN0dXJlKHZtLCBvd25lciwgc3RydWN0dXJlKQorICAgICwgbV9j
b25kaXRpb25TZXQoY29uZGl0aW9uU2V0KQorICAgICwgbV9zdHViUm91dGluZShzdHViUm91dGlu
ZSkKK3sKK30KKworR2V0QnlJZEFjY2Vzczo6fkdldEJ5SWRBY2Nlc3MoKQoreworfQorCitHZXRC
eUlkQWNjZXNzIEdldEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1cmVTdHViSW5mbyhTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGluaXRpYWxT
bG93UGF0aCA9CisgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zm
c2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpOworICAgIAorICAgIEdldEJ5
SWRBY2Nlc3MgcmVzdWx0OworICAgIAorICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmFjY2Vz
c1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmKTsKKyAgICAKKyAgICByZXN1bHQubV90eXBl
ID0gU2ltcGxlSW5saW5lOworICAgIHJlc3VsdC5tX3N0cnVjdHVyZS5jb3B5RnJvbShzdHViSW5m
by51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUpOworICAgIHJlc3VsdC5tX3N0dWJS
b3V0aW5lID0gSklUU3R1YlJvdXRpbmU6OmNyZWF0ZVNlbGZNYW5hZ2VkUm91dGluZShpbml0aWFs
U2xvd1BhdGgpOworICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgR2V0QnlJZEFj
Y2Vzczo6dmlzaXRXZWFrKFZNJiB2bSkgY29uc3QKK3sKKyAgICBpZiAobV9zdHJ1Y3R1cmUgJiYg
IUhlYXA6OmlzTWFya2VkKG1fc3RydWN0dXJlLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmICghbV9jb25kaXRpb25TZXQuYXJlU3RpbGxMaXZlKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAoIW1fc3R1YlJvdXRpbmUtPnZpc2l0V2Vhayh2bSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworUG9seW1vcnBoaWNHZXRCeUlk
TGlzdDo6UG9seW1vcnBoaWNHZXRCeUlkTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8p
Cit7CisgICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0KQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgbV9saXN0LmFwcGVuZChHZXRCeUlkQWNjZXNzOjpmcm9tU3Ry
dWN0dXJlU3R1YkluZm8oc3R1YkluZm8pKTsKK30KKworUG9seW1vcnBoaWNHZXRCeUlkTGlzdCog
UG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6ZnJvbShTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8p
Cit7CisgICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9saXN0
KQorICAgICAgICByZXR1cm4gc3R1YkluZm8udS5nZXRCeUlkTGlzdC5saXN0OworICAgIAorICAg
IEFTU0VSVCgKKyAgICAgICAgc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lk
X3NlbGYKKyAgICAgICAgfHwgc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpOwor
ICAgIAorICAgIFBvbHltb3JwaGljR2V0QnlJZExpc3QqIHJlc3VsdCA9IG5ldyBQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0KHN0dWJJbmZvKTsKKyAgICAKKyAgICBzdHViSW5mby5pbml0R2V0QnlJZExp
c3QocmVzdWx0KTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitQb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0Ojp+UG9seW1vcnBoaWNHZXRCeUlkTGlzdCgpIHsgfQorCitNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6Y3VycmVudFNsb3dQYXRoVGFyZ2V0KAor
ICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykgY29uc3QKK3sKKyAgICBpZiAoaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRP
ZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSk7CisgICAgcmV0dXJuIG1f
bGlzdC5sYXN0KCkuc3R1YlJvdXRpbmUoKS0+Y29kZSgpLmNvZGUoKTsKK30KKwordm9pZCBQb2x5
bW9ycGhpY0dldEJ5SWRMaXN0OjphZGRBY2Nlc3MoY29uc3QgR2V0QnlJZEFjY2VzcyYgYWNjZXNz
KQoreworICAgIEFTU0VSVCghaXNGdWxsKCkpOworICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBy
ZXNpemluZyBvcHRpbWl6ZXMgZm9yIHNwYWNlLCBub3QgdGltZS4KKyAgICBtX2xpc3QucmVzaXpl
VG9GaXQobV9saXN0LnNpemUoKSArIDEpOworICAgIG1fbGlzdC5sYXN0KCkgPSBhY2Nlc3M7Cit9
CisKK2Jvb2wgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6aXNGdWxsKCkgY29uc3QKK3sKKyAgICBB
U1NFUlQoc2l6ZSgpIDw9IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSk7CisgICAgcmV0dXJu
IHNpemUoKSA9PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkU7Cit9CisKK2Jvb2wgUG9seW1v
cnBoaWNHZXRCeUlkTGlzdDo6aXNBbG1vc3RGdWxsKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoc2l6
ZSgpIDw9IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSk7CisgICAgcmV0dXJuIHNpemUoKSA+
PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUgLSAxOworfQorCitib29sIFBvbHltb3JwaGlj
R2V0QnlJZExpc3Q6OmRpZFNlbGZQYXRjaGluZygpIGNvbnN0Cit7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGlmIChhdChpKS50eXBlKCkgPT0gR2V0QnlJ
ZEFjY2Vzczo6U2ltcGxlSW5saW5lKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojp2aXNp
dFdlYWsoVk0mIHZtKSBjb25zdAoreworICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUoKTsgaS0t
OykgeworICAgICAgICBpZiAoIWF0KGkpLnZpc2l0V2Vhayh2bSkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNv
cHkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3Mu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxMzEgKzI0LDExNTYgQEAKICAqLwogCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oIgorI2luY2x1
ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCiAKICNpZiBFTkFCTEUoSklUKQogCisjaW5jbHVkZSAi
QmluYXJ5U3dpdGNoLmgiCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCiAjaW5jbHVkZSAiQ29k
ZUJsb2NrLmgiCisjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgor
I2luY2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5j
bHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5o
IgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaCIKICNpbmNsdWRl
ICJTdHJ1Y3R1cmVTdHViSW5mby5oIgorI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKyNp
bmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLUdldEJ5SWRBY2Nl
c3M6OkdldEJ5SWRBY2Nlc3MoCi0gICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBl
IHR5cGUsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lLAotICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0
aW9uU2V0KQotICAgIDogbV90eXBlKHR5cGUpCi0gICAgLCBtX3N0cnVjdHVyZSh2bSwgb3duZXIs
IHN0cnVjdHVyZSkKLSAgICAsIG1fY29uZGl0aW9uU2V0KGNvbmRpdGlvblNldCkKLSAgICAsIG1f
c3R1YlJvdXRpbmUoc3R1YlJvdXRpbmUpCitzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFs
c2U7CisKK3N0cnVjdCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUgeworICAgIENDYWxsSGVscGVycyog
aml0IHsgbnVsbHB0ciB9OworICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciogYWxsb2NhdG9y
OworICAgIHNpemVfdCBudW1iZXJPZlBhZGRpbmdCeXRlcyB7IDAgfTsKKyAgICBQb2x5bW9ycGhp
Y0FjY2VzcyogYWNjZXNzIHsgbnVsbHB0ciB9OworICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbyB7IG51bGxwdHIgfTsKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHN1Y2Nlc3M7Cisg
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBmYWlsQW5kUmVwYXRjaDsKKyAgICBDQ2FsbEhlbHBl
cnM6Okp1bXBMaXN0IGZhaWxBbmRJZ25vcmU7CisgICAgR1BSUmVnIGJhc2VHUFIgeyBJbnZhbGlk
R1BSUmVnIH07CisgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzOworICAgIEdQUlJlZyBzY3JhdGNo
R1BSIHsgSW52YWxpZEdQUlJlZyB9OworICAgIFZlY3RvcjxzdGQ6OmZ1bmN0aW9uPHZvaWQoTGlu
a0J1ZmZlciYpPj4gY2FsbGJhY2tzOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50OworICAg
IHN0ZDo6dW5pcXVlX3B0cjxXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8+IHdhdGNocG9p
bnRzOworCisgICAgV2F0Y2hwb2ludCogYWRkV2F0Y2hwb2ludChjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiYgY29uZGl0aW9uID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb24oKSkKKyAgICB7
CisgICAgICAgIHJldHVybiBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86OmVuc3VyZVJl
ZmVyZW5jZUFuZEFkZFdhdGNocG9pbnQoCisgICAgICAgICAgICB3YXRjaHBvaW50cywgaml0LT5j
b2RlQmxvY2soKSwgc3R1YkluZm8sIGNvbmRpdGlvbik7CisgICAgfQorCisgICAgdm9pZCByZXN0
b3JlU2NyYXRjaCgpCisgICAgeworICAgICAgICBhbGxvY2F0b3ItPnJlc3RvcmVSZXVzZWRSZWdp
c3RlcnNCeVBvcHBpbmcoKmppdCwgbnVtYmVyT2ZQYWRkaW5nQnl0ZXMpOworICAgIH0KKworICAg
IHZvaWQgc3VjY2VlZCgpCisgICAgeworICAgICAgICByZXN0b3JlU2NyYXRjaCgpOworICAgICAg
ICBzdWNjZXNzLmFwcGVuZChqaXQtPmp1bXAoKSk7CisgICAgfQorfTsKKworQWNjZXNzQ2FzZTo6
QWNjZXNzQ2FzZSgpCiB7CiB9CiAKLUdldEJ5SWRBY2Nlc3M6On5HZXRCeUlkQWNjZXNzKCkKK3N0
ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpnZXQoCisgICAgVk0mIHZtLCBK
U0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5cGUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQm
IGNvbmRpdGlvblNldCwgYm9vbCB2aWFQcm94eSwgV2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNl
dCwKKyAgICBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYyBjdXN0b21HZXR0ZXIsIEpTT2JqZWN0
KiBjdXN0b21TbG90QmFzZSkKIHsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gcmVz
dWx0KG5ldyBBY2Nlc3NDYXNlKCkpOworCisgICAgcmVzdWx0LT5tX3R5cGUgPSB0eXBlOworICAg
IHJlc3VsdC0+bV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgcmVzdWx0LT5tX3N0cnVjdHVyZS5zZXQo
dm0sIG93bmVyLCBzdHJ1Y3R1cmUpOworICAgIHJlc3VsdC0+bV9jb25kaXRpb25TZXQgPSBjb25k
aXRpb25TZXQ7CisKKyAgICBpZiAodmlhUHJveHkgfHwgYWRkaXRpb25hbFNldCB8fCByZXN1bHQt
PmRvZXNDYWxscygpIHx8IGN1c3RvbUdldHRlciB8fCBjdXN0b21TbG90QmFzZSkgeworICAgICAg
ICByZXN1bHQtPm1fcmFyZURhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPFJhcmVEYXRhPigpOworICAg
ICAgICByZXN1bHQtPm1fcmFyZURhdGEtPnZpYVByb3h5ID0gdmlhUHJveHk7CisgICAgICAgIHJl
c3VsdC0+bV9yYXJlRGF0YS0+YWRkaXRpb25hbFNldCA9IGFkZGl0aW9uYWxTZXQ7CisgICAgICAg
IHJlc3VsdC0+bV9yYXJlRGF0YS0+Y3VzdG9tQWNjZXNzb3IuZ2V0dGVyID0gY3VzdG9tR2V0dGVy
OworICAgICAgICByZXN1bHQtPm1fcmFyZURhdGEtPmN1c3RvbVNsb3RCYXNlLnNldE1heUJlTnVs
bCh2bSwgb3duZXIsIGN1c3RvbVNsb3RCYXNlKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0
OwogfQogCi1HZXRCeUlkQWNjZXNzIEdldEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1cmVTdHViSW5m
byhTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCitzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2Fz
ZT4gQWNjZXNzQ2FzZTo6cmVwbGFjZSgKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7Ci0gICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIGluaXRpYWxTbG93UGF0aCA9Ci0gICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nh
c2UpOwotICAgIAotICAgIEdldEJ5SWRBY2Nlc3MgcmVzdWx0OwotICAgIAotICAgIFJFTEVBU0Vf
QVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmKTsKLSAg
ICAKLSAgICByZXN1bHQubV90eXBlID0gU2ltcGxlSW5saW5lOwotICAgIHJlc3VsdC5tX3N0cnVj
dHVyZS5jb3B5RnJvbShzdHViSW5mby51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUp
OwotICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gSklUU3R1YlJvdXRpbmU6OmNyZWF0ZVNlbGZN
YW5hZ2VkUm91dGluZShpbml0aWFsU2xvd1BhdGgpOwotICAgIAorICAgIHN0ZDo6dW5pcXVlX3B0
cjxBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nhc2UoKSk7CisKKyAgICByZXN1bHQtPm1f
dHlwZSA9IFJlcGxhY2U7CisgICAgcmVzdWx0LT5tX29mZnNldCA9IG9mZnNldDsKKyAgICByZXN1
bHQtPm1fc3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7CisKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6dHJh
bnNpdGlvbigKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogb2xkU3RydWN0
dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAorICAg
IGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCit7CisgICAg
UkVMRUFTRV9BU1NFUlQob2xkU3RydWN0dXJlID09IG5ld1N0cnVjdHVyZS0+cHJldmlvdXNJRCgp
KTsKKworICAgIC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIGEgcmVh
bGxvYywgaWYgd2UgZG9uJ3QgaGF2ZQorICAgIC8vIGVub3VnaCByZWdpc3RlcnMgdG8gbWFrZSBp
dCBoYXBwZW4uCisgICAgaWYgKEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzIDwgNgorICAgICAg
ICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gbmV3U3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpCisgICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSkgeworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICAvLyBTa2lw
IG9wdGltaXppbmcgdGhlIGNhc2Ugd2hlcmUgd2UgbmVlZCByZWFsbG9jLCBhbmQgdGhlIHN0cnVj
dHVyZSBoYXMKKyAgICAvLyBpbmRleGluZyBzdG9yYWdlLgorICAgIC8vIEZJWE1FOiBXZSBzaG91
bGRuJ3Qgc2tpcCB0aGlzISBJbXBsZW1lbnQgaXQhCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMDkxNAorICAgIGlmIChvbGRTdHJ1Y3R1cmUtPmNvdWxk
SGF2ZUluZGV4aW5nSGVhZGVyKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHJlc3VsdChuZXcgQWNjZXNzQ2FzZSgpKTsKKworICAg
IHJlc3VsdC0+bV90eXBlID0gVHJhbnNpdGlvbjsKKyAgICByZXN1bHQtPm1fb2Zmc2V0ID0gb2Zm
c2V0OworICAgIHJlc3VsdC0+bV9zdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgbmV3U3RydWN0dXJl
KTsKKyAgICByZXN1bHQtPm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OworCisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6
OnNldHRlcigKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKKyAgICBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBQdXRQcm9wZXJ0eVNsb3Q6OlB1
dFZhbHVlRnVuYyBjdXN0b21TZXR0ZXIsCisgICAgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlKQor
eworICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nhc2Uo
KSk7CisKKyAgICByZXN1bHQtPm1fdHlwZSA9IHR5cGU7CisgICAgcmVzdWx0LT5tX29mZnNldCA9
IG9mZnNldDsKKyAgICByZXN1bHQtPm1fc3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVy
ZSk7CisgICAgcmVzdWx0LT5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKKyAgICByZXN1
bHQtPm1fcmFyZURhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPFJhcmVEYXRhPigpOworICAgIHJlc3Vs
dC0+bV9yYXJlRGF0YS0+Y3VzdG9tQWNjZXNzb3Iuc2V0dGVyID0gY3VzdG9tU2V0dGVyOworICAg
IHJlc3VsdC0+bV9yYXJlRGF0YS0+Y3VzdG9tU2xvdEJhc2Uuc2V0TWF5QmVOdWxsKHZtLCBvd25l
ciwgY3VzdG9tU2xvdEJhc2UpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RkOjp1bmlx
dWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OmluKAorICAgIFZNJiB2bSwgSlNDZWxsKiBv
d25lciwgQWNjZXNzVHlwZSB0eXBlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKKyAgICBjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KQoreworICAgIHN0ZDo6dW5p
cXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nhc2UoKSk7CisKKyAgICByZXN1
bHQtPm1fdHlwZSA9IHR5cGU7CisgICAgcmVzdWx0LT5tX3N0cnVjdHVyZS5zZXQodm0sIG93bmVy
LCBzdHJ1Y3R1cmUpOworICAgIHJlc3VsdC0+bV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7
CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4g
QWNjZXNzQ2FzZTo6Z2V0TGVuZ3RoKFZNJiwgSlNDZWxsKiwgQWNjZXNzVHlwZSB0eXBlKQorewor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nhc2UoKSk7
CisKKyAgICByZXN1bHQtPm1fdHlwZSA9IHR5cGU7CisKICAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci1ib29sIEdldEJ5SWRBY2Nlc3M6OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0CitBY2Nlc3NDYXNl
Ojp+QWNjZXNzQ2FzZSgpCit7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nl
c3NDYXNlOjpmcm9tU3RydWN0dXJlU3R1YkluZm8oCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVy
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgc3dpdGNoIChzdHViSW5mby5j
YWNoZVR5cGUpIHsKKyAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJZFNlbGY6CisgICAgICAgIHJl
dHVybiBnZXQoCisgICAgICAgICAgICB2bSwgb3duZXIsIExvYWQsIHN0dWJJbmZvLnUuYnlJZFNl
bGYub2Zmc2V0LAorICAgICAgICAgICAgc3R1YkluZm8udS5ieUlkU2VsZi5iYXNlT2JqZWN0U3Ry
dWN0dXJlLmdldCgpKTsKKworICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZToKKyAg
ICAgICAgcmV0dXJuIHJlcGxhY2UoCisgICAgICAgICAgICB2bSwgb3duZXIsIHN0dWJJbmZvLnUu
YnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgc3R1YkluZm8udS5ieUlkU2VsZi5v
ZmZzZXQpOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
fQorCitzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6Y2xvbmUoKSBjb25z
dAoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nh
c2UoKSk7CisgICAgcmVzdWx0LT5tX3R5cGUgPSBtX3R5cGU7CisgICAgcmVzdWx0LT5tX29mZnNl
dCA9IG1fb2Zmc2V0OworICAgIHJlc3VsdC0+bV9zdHJ1Y3R1cmUgPSBtX3N0cnVjdHVyZTsKKyAg
ICByZXN1bHQtPm1fY29uZGl0aW9uU2V0ID0gbV9jb25kaXRpb25TZXQ7CisgICAgaWYgKFJhcmVE
YXRhKiByYXJlRGF0YSA9IG1fcmFyZURhdGEuZ2V0KCkpIHsKKyAgICAgICAgcmVzdWx0LT5tX3Jh
cmVEYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxSYXJlRGF0YT4oKTsKKyAgICAgICAgcmVzdWx0LT5t
X3JhcmVEYXRhLT52aWFQcm94eSA9IHJhcmVEYXRhLT52aWFQcm94eTsKKyAgICAgICAgcmVzdWx0
LT5tX3JhcmVEYXRhLT5hZGRpdGlvbmFsU2V0ID0gcmFyZURhdGEtPmFkZGl0aW9uYWxTZXQ7Cisg
ICAgICAgIC8vIE5PVEU6IFdlIGRvbid0IGNvcHkgdGhlIGNhbGxMaW5rSW5mbywgc2luY2UgdGhh
dCdzIGNyZWF0ZWQgZHVyaW5nIGNvZGUgZ2VuZXJhdGlvbi4KKyAgICAgICAgcmVzdWx0LT5tX3Jh
cmVEYXRhLT5jdXN0b21BY2Nlc3Nvci5vcGFxdWUgPSByYXJlRGF0YS0+Y3VzdG9tQWNjZXNzb3Iu
b3BhcXVlOworICAgICAgICByZXN1bHQtPm1fcmFyZURhdGEtPmN1c3RvbVNsb3RCYXNlID0gcmFy
ZURhdGEtPmN1c3RvbVNsb3RCYXNlOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCiti
b29sIEFjY2Vzc0Nhc2U6Omd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrKCkgY29uc3QKK3sKKyAgICBp
ZiAodmlhUHJveHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNoIChtX3R5
cGUpIHsKKyAgICBjYXNlIEFycmF5TGVuZ3RoOgorICAgIGNhc2UgU3RyaW5nTGVuZ3RoOgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorfQorCitKU09iamVjdCogQWNjZXNzQ2FzZTo6YWx0ZXJuYXRlQmFzZSgpIGNvbnN0Cit7
CisgICAgaWYgKGN1c3RvbVNsb3RCYXNlKCkpCisgICAgICAgIHJldHVybiBjdXN0b21TbG90QmFz
ZSgpOworICAgIHJldHVybiBjb25kaXRpb25TZXQoKS5zbG90QmFzZUNvbmRpdGlvbigpLm9iamVj
dCgpOworfQorCitib29sIEFjY2Vzc0Nhc2U6OmNhblJlcGxhY2UoY29uc3QgQWNjZXNzQ2FzZSYg
b3RoZXIpCit7CisgICAgLy8gV2UgY291bGQgZG8gYSBsb3QgYmV0dGVyIGhlcmUsIGJ1dCBmb3Ig
bm93IHdlIGp1c3QgZG8gc29tZXRoaW5nIG9idmlvdXMuCisKKyAgICBpZiAoIWd1YXJkZWRCeVN0
cnVjdHVyZUNoZWNrKCkgfHwgIW90aGVyLmd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrKCkpIHsKKyAg
ICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgcmV0dXJuIHN0cnVjdHVyZSgpID09IG90aGVyLnN0cnVjdHVyZSgpOworfQor
Cit2b2lkIEFjY2Vzc0Nhc2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBv
dXQucHJpbnQobV90eXBlLCAiOigiKTsKKworICAgIENvbW1hUHJpbnRlciBjb21tYTsKKworICAg
IGlmIChtX3R5cGUgPT0gVHJhbnNpdGlvbikKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAic3Ry
dWN0dXJlID0gIiwgcG9pbnRlckR1bXAoc3RydWN0dXJlKCkpLCAiIC0+ICIsIHBvaW50ZXJEdW1w
KG5ld1N0cnVjdHVyZSgpKSk7CisgICAgZWxzZSBpZiAobV9zdHJ1Y3R1cmUpCisgICAgICAgIG91
dC5wcmludChjb21tYSwgInN0cnVjdHVyZSA9ICIsIHBvaW50ZXJEdW1wKG1fc3RydWN0dXJlLmdl
dCgpKSk7CisKKyAgICBpZiAoaXNWYWxpZE9mZnNldChtX29mZnNldCkpCisgICAgICAgIG91dC5w
cmludChjb21tYSwgIm9mZnNldCA9ICIsIG1fb2Zmc2V0KTsKKyAgICBpZiAoIW1fY29uZGl0aW9u
U2V0LmlzRW1wdHkoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiY29uZGl0aW9ucyA9ICIs
IG1fY29uZGl0aW9uU2V0KTsKKworICAgIGlmIChSYXJlRGF0YSogcmFyZURhdGEgPSBtX3JhcmVE
YXRhLmdldCgpKSB7CisgICAgICAgIGlmIChyYXJlRGF0YS0+dmlhUHJveHkpCisgICAgICAgICAg
ICBvdXQucHJpbnQoY29tbWEsICJ2aWFQcm94eSA9ICIsIHJhcmVEYXRhLT52aWFQcm94eSk7Cisg
ICAgICAgIGlmIChyYXJlRGF0YS0+YWRkaXRpb25hbFNldCkKKyAgICAgICAgICAgIG91dC5wcmlu
dChjb21tYSwgImFkZGl0aW9uYWxTZXQgPSAiLCBSYXdQb2ludGVyKHJhcmVEYXRhLT5hZGRpdGlv
bmFsU2V0LmdldCgpKSk7CisgICAgICAgIGlmIChyYXJlRGF0YS0+Y2FsbExpbmtJbmZvKQorICAg
ICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiY2FsbExpbmtJbmZvID0gIiwgUmF3UG9pbnRlcihy
YXJlRGF0YS0+Y2FsbExpbmtJbmZvLmdldCgpKSk7CisgICAgICAgIGlmIChyYXJlRGF0YS0+Y3Vz
dG9tQWNjZXNzb3Iub3BhcXVlKQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiY3VzdG9t
QWNjZXNzb3IgPSAiLCBSYXdQb2ludGVyKHJhcmVEYXRhLT5jdXN0b21BY2Nlc3Nvci5vcGFxdWUp
KTsKKyAgICAgICAgaWYgKHJhcmVEYXRhLT5jdXN0b21TbG90QmFzZSkKKyAgICAgICAgICAgIG91
dC5wcmludChjb21tYSwgImN1c3RvbVNsb3RCYXNlID0gIiwgUmF3UG9pbnRlcihyYXJlRGF0YS0+
Y3VzdG9tU2xvdEJhc2UuZ2V0KCkpKTsKKyAgICB9CisKKyAgICBvdXQucHJpbnQoIikiKTsKK30K
KworYm9vbCBBY2Nlc3NDYXNlOjp2aXNpdFdlYWsoVk0mIHZtKSBjb25zdAogewogICAgIGlmICht
X3N0cnVjdHVyZSAmJiAhSGVhcDo6aXNNYXJrZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFtX2NvbmRpdGlvblNldC5hcmVTdGlsbExpdmUoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghbV9zdHViUm91dGluZS0+dmlzaXRXZWFr
KHZtKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3JhcmVEYXRhKSB7CisgICAg
ICAgIGlmIChtX3JhcmVEYXRhLT5jYWxsTGlua0luZm8pCisgICAgICAgICAgICBtX3JhcmVEYXRh
LT5jYWxsTGlua0luZm8tPnZpc2l0V2Vhayh2bSk7CisgICAgICAgIGlmIChtX3JhcmVEYXRhLT5j
dXN0b21TbG90QmFzZSAmJiAhSGVhcDo6aXNNYXJrZWQobV9yYXJlRGF0YS0+Y3VzdG9tU2xvdEJh
c2UuZ2V0KCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6UG9seW1vcnBoaWNHZXRCeUlkTGlz
dChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRl
V2l0aEd1YXJkKAorICAgIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUsIENDYWxsSGVscGVy
czo6SnVtcExpc3QmIGZhbGxUaHJvdWdoKQogewotICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBl
ID09IGFjY2Vzc191bnNldCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIG1fbGlzdC5hcHBl
bmQoR2V0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKHN0dWJJbmZvKSk7CisgICAg
Q0NhbGxIZWxwZXJzJiBqaXQgPSAqc3RhdGUuaml0OworCisgICAgc3dpdGNoIChtX3R5cGUpIHsK
KyAgICBjYXNlIEFycmF5TGVuZ3RoOiB7CisgICAgICAgIEFTU0VSVCghdmlhUHJveHkoKSk7Cisg
ICAgICAgIGppdC5sb2FkOChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RhdGUuYmFzZUdQUiwgSlND
ZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHN0YXRlLnNjcmF0Y2hHUFIpOworICAgICAgICBm
YWxsVGhyb3VnaC5hcHBlbmQoCisgICAgICAgICAgICBqaXQuYnJhbmNoVGVzdDMyKAorICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6WmVybywgc3RhdGUuc2NyYXRjaEdQUiwgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoSXNBcnJheSkpKTsKKyAgICAgICAgZmFsbFRocm91Z2guYXBwZW5k
KAorICAgICAgICAgICAgaml0LmJyYW5jaFRlc3QzMigKKyAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6Olplcm8sIHN0YXRlLnNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KEluZGV4aW5nU2hhcGVNYXNrKSkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNl
IFN0cmluZ0xlbmd0aDogeworICAgICAgICBBU1NFUlQoIXZpYVByb3h5KCkpOworICAgICAgICBm
YWxsVGhyb3VnaC5hcHBlbmQoCisgICAgICAgICAgICBqaXQuYnJhbmNoOCgKKyAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6QWRkcmVzcyhzdGF0ZS5iYXNlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwK
KyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihTdHJpbmdUeXBlKSkp
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBkZWZhdWx0OiB7CisgICAgICAgIGlmICh2
aWFQcm94eSgpKSB7CisgICAgICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCisgICAgICAgICAg
ICAgICAgaml0LmJyYW5jaDgoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90
RXF1YWwsCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdGF0ZS5i
YXNlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoUHVyZUZvcndhcmRpbmdQcm94eVR5cGUpKSk7
CisKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6QWRkcmVzcyhzdGF0ZS5iYXNlR1BSLCBKU1Byb3h5Ojp0YXJnZXRPZmZzZXQoKSksCisgICAg
ICAgICAgICAgICAgc3RhdGUuc2NyYXRjaEdQUik7CisKKyAgICAgICAgICAgIGZhbGxUaHJvdWdo
LmFwcGVuZCgKKyAgICAgICAgICAgICAgICBqaXQuYnJhbmNoU3RydWN0dXJlKAorICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RhdGUuc2NyYXRjaEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlKCkpKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgKKyAgICAgICAgICAgICAg
ICBqaXQuYnJhbmNoU3RydWN0dXJlKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3Rh
dGUuYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAgICAgICAgICAg
ICAgICAgc3RydWN0dXJlKCkpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9IH07
CisKKyAgICBnZW5lcmF0ZShzdGF0ZSk7CiB9CiAKLVBvbHltb3JwaGljR2V0QnlJZExpc3QqIFBv
bHltb3JwaGljR2V0QnlJZExpc3Q6OmZyb20oU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQor
dm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZShBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQog
ewotICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfbGlzdCkK
LSAgICAgICAgcmV0dXJuIHN0dWJJbmZvLnUuZ2V0QnlJZExpc3QubGlzdDsKLSAgICAKLSAgICBB
U1NFUlQoCi0gICAgICAgIHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9z
ZWxmCi0gICAgICAgIHx8IHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0KTsKLSAg
ICAKLSAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiByZXN1bHQgPSBuZXcgUG9seW1vcnBoaWNH
ZXRCeUlkTGlzdChzdHViSW5mbyk7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2co
IkdlbmVyYXRpbmcgY29kZSBmb3I6ICIsICp0aGlzLCAiXG4iKTsKICAgICAKLSAgICBzdHViSW5m
by5pbml0R2V0QnlJZExpc3QocmVzdWx0KTsKKyAgICBDQ2FsbEhlbHBlcnMmIGppdCA9ICpzdGF0
ZS5qaXQ7CisgICAgVk0mIHZtID0gKmppdC52bSgpOworICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbyA9ICpzdGF0ZS5zdHViSW5mbzsKKyAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9
ICpzdGF0ZS5pZGVudDsKKyAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSBzdGF0ZS52YWx1ZVJl
Z3M7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0ZS5iYXNlR1BSOworICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gc3RhdGUuc2NyYXRjaEdQUjsKKworICAgIEFTU0VSVChtX2NvbmRpdGlvblNldC5z
dHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgp
KTsKKworICAgIGlmICgoc3RydWN0dXJlKCkgJiYgc3RydWN0dXJlKCktPm5lZWRJbXB1cmVQcm9w
ZXJ0eVdhdGNocG9pbnQoKSkKKyAgICAgICAgfHwgbV9jb25kaXRpb25TZXQubmVlZEltcHVyZVBy
b3BlcnR5V2F0Y2hwb2ludCgpKQorICAgICAgICB2bS5yZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1
cmVQcm9wZXJ0eShpZGVudCwgc3RhdGUuYWRkV2F0Y2hwb2ludCgpKTsKKworICAgIGlmIChhZGRp
dGlvbmFsU2V0KCkpCisgICAgICAgIGFkZGl0aW9uYWxTZXQoKS0+YWRkKHN0YXRlLmFkZFdhdGNo
cG9pbnQoKSk7CisKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25k
aXRpb24gOiBtX2NvbmRpdGlvblNldCkgeworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IGNvbmRpdGlvbi5vYmplY3QoKS0+c3RydWN0dXJlKCk7CisKKyAgICAgICAgaWYgKGNvbmRpdGlv
bi5pc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKKyAgICAg
ICAgICAgIHN0cnVjdHVyZS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoc3RhdGUuYWRkV2F0Y2hw
b2ludChjb25kaXRpb24pKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoY29uZGl0aW9uLnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eUFz
c3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KHN0cnVjdHVyZSkpOworICAgICAgICBqaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY29uZGl0aW9uLm9iamVjdCgpKSwgc2Ny
YXRjaEdQUik7CisgICAgICAgIHN0YXRlLmZhaWxBbmRSZXBhdGNoLmFwcGVuZCgKKyAgICAgICAg
ICAgIGppdC5icmFuY2hTdHJ1Y3R1cmUoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpO
b3RFcXVhbCwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQ
UiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1
cmUpKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgSW5IaXQ6Cisg
ICAgY2FzZSBJbk1pc3M6CisgICAgICAgIGppdC5ib3hCb29sZWFuUGF5bG9hZChtX3R5cGUgPT0g
SW5IaXQsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOworICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7
CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgTWlzczoKKyAgICAgICAgaml0Lm1vdmVUcnVz
dGVkVmFsdWUoanNVbmRlZmluZWQoKSwgdmFsdWVSZWdzKTsKKyAgICAgICAgc3RhdGUuc3VjY2Vl
ZCgpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIExvYWQ6CisgICAgY2FzZSBHZXR0ZXI6
CisgICAgY2FzZSBTZXR0ZXI6CisgICAgY2FzZSBDdXN0b21HZXR0ZXI6CisgICAgY2FzZSBDdXN0
b21TZXR0ZXI6IHsKKyAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQobV9vZmZzZXQpKSB7CisgICAg
ICAgICAgICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmU7CisgICAgICAgICAgICBpZiAobV9jb25k
aXRpb25TZXQuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBzdHJ1
Y3R1cmUoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjdXJyU3RydWN0dXJl
ID0gbV9jb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vYmplY3QoKS0+c3RydWN0dXJl
KCk7CisgICAgICAgICAgICBjdXJyU3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JS
ZXBsYWNlbWVudHModm0sIG9mZnNldCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIEdQUlJlZyBi
YXNlRm9yR2V0R1BSOworICAgICAgICBpZiAodmlhUHJveHkoKSkgeworICAgICAgICAgICAgYmFz
ZUZvckdldEdQUiA9IHZhbHVlUmVncy5wYXlsb2FkR1BSKCk7CisgICAgICAgICAgICBqaXQubG9h
ZFB0cigKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNQ
cm94eTo6dGFyZ2V0T2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIGJhc2VGb3JHZXRHUFIpOwor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGJhc2VGb3JHZXRHUFIgPSBiYXNlR1BSOworCisg
ICAgICAgIEdQUlJlZyBiYXNlRm9yQWNjZXNzR1BSOworICAgICAgICBpZiAoIW1fY29uZGl0aW9u
U2V0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgaml0Lm1vdmUoCisgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGFsdGVybmF0ZUJhc2UoKSksCisgICAgICAgICAg
ICAgICAgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBiYXNlRm9yQWNjZXNzR1BSID0gc2NyYXRj
aEdQUjsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBiYXNlRm9yQWNjZXNzR1BSID0gYmFz
ZUZvckdldEdQUjsKKworICAgICAgICBHUFJSZWcgbG9hZGVkVmFsdWVHUFIgPSBJbnZhbGlkR1BS
UmVnOworICAgICAgICBpZiAobV90eXBlICE9IEN1c3RvbUdldHRlciAmJiBtX3R5cGUgIT0gQ3Vz
dG9tU2V0dGVyKSB7CisgICAgICAgICAgICBpZiAobV90eXBlID09IExvYWQpCisgICAgICAgICAg
ICAgICAgbG9hZGVkVmFsdWVHUFIgPSB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSID0gc2NyYXRjaEdQUjsKKwor
ICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFI7CisgICAgICAgICAgICBpZiAoaXNJbmxpbmVP
ZmZzZXQobV9vZmZzZXQpKQorICAgICAgICAgICAgICAgIHN0b3JhZ2VHUFIgPSBiYXNlRm9yQWNj
ZXNzR1BSOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIo
CisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlRm9yQWNjZXNz
R1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgICAgICBs
b2FkZWRWYWx1ZUdQUik7CisgICAgICAgICAgICAgICAgc3RvcmFnZUdQUiA9IGxvYWRlZFZhbHVl
R1BSOworICAgICAgICAgICAgfQorCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgIGpp
dC5sb2FkNjQoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0b3JhZ2VH
UFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKG1fb2Zmc2V0KSksIGxvYWRlZFZhbHVlR1BSKTsKKyNl
bHNlCisgICAgICAgICAgICBpZiAobV90eXBlID09IExvYWQpIHsKKyAgICAgICAgICAgICAgICBq
aXQubG9hZDMyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3Rv
cmFnZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2UobV9vZmZzZXQpICsgVGFnT2Zmc2V0KSwKKyAg
ICAgICAgICAgICAgICAgICAgdmFsdWVSZWdzLnRhZ0dQUigpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGppdC5sb2FkMzIoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKHN0b3JhZ2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKG1fb2Zmc2V0KSArIFBheWxvYWRP
ZmZzZXQpLAorICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSKTsKKyNlbmRpZgorICAgICAg
ICB9CisKKyAgICAgICAgLy8gU3R1ZmYgZm9yIGN1c3RvbSBnZXR0ZXJzLgorICAgICAgICBDQ2Fs
bEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9uQ2FsbDsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxs
IGhhbmRsZXJDYWxsOworCisgICAgICAgIC8vIFN0dWZmIGZvciBKUyBnZXR0ZXJzLgorICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkRhdGFMYWJlbFB0ciBhZGRyZXNzT2ZMaW5rRnVuY3Rpb25DaGVjazsK
KyAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGZhc3RQYXRoQ2FsbDsKKyAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpDYWxsIHNsb3dQYXRoQ2FsbDsKKworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAg
c3VjY2VzczsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGZhaWw7CisgICAgICAgIGlmICht
X3R5cGUgIT0gTG9hZCAmJiBtX3R5cGUgIT0gTWlzcykgeworICAgICAgICAgICAgLy8gTmVlZCB0
byBtYWtlIHN1cmUgdGhhdCB3aGVuZXZlciB0aGlzIGNhbGwgaXMgbWFkZSBpbiB0aGUgZnV0dXJl
LCB3ZSByZW1lbWJlciB0aGUKKyAgICAgICAgICAgIC8vIHBsYWNlIHRoYXQgd2UgbWFkZSBpdCBm
cm9tLgorICAgICAgICAgICAgaml0LnN0b3JlMzIoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoc3R1YkluZm8uY2FsbFNpdGVJbmRleC5iaXRzKCkpLAorICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rl
cj4oSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKKworICAgICAgICAgICAgaWYgKG1fdHlwZSA9
PSBHZXR0ZXIgfHwgbV90eXBlID09IFNldHRlcikgeworICAgICAgICAgICAgICAgIC8vIENyZWF0
ZSBhIEpTIGNhbGwgdXNpbmcgYSBKUyBjYWxsIGlubGluZSBjYWNoZS4gQXNzdW1lIHRoYXQ6Cisg
ICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAtIFNQIGlzIGFsaWduZWQgYW5k
IHJlcHJlc2VudHMgdGhlIGV4dGVudCBvZiB0aGUgY2FsbGluZyBjb21waWxlcidzIHN0YWNrIHVz
YWdlLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gLSBGUCBpcyBzZXQg
Y29ycmVjdGx5IChpLmUuIGl0IHBvaW50cyB0byB0aGUgY2FsbGVyJ3MgY2FsbCBmcmFtZSBoZWFk
ZXIpLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gLSBTUCAtIEZQIGlz
IGFuIGFsaWduZWQgZGlmZmVyZW5jZS4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAg
ICAgIC8vIC0gQW55IGJ5dGUgYmV0d2VlbiBGUCAoZXhjbHVzaXZlKSBhbmQgU1AgKGluY2x1c2l2
ZSkgY291bGQgYmUgbGl2ZSBpbiB0aGUgY2FsbGluZworICAgICAgICAgICAgICAgIC8vICAgY29k
ZS4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIFRoZXJlZm9yZSwgd2Ug
dGVtcG9yYXJpbHkgZ3JvdyB0aGUgc3RhY2sgZm9yIHRoZSBwdXJwb3NlIG9mIHRoZSBjYWxsIGFu
ZCB0aGVuCisgICAgICAgICAgICAgICAgLy8gc2hyaW5rIGl0IGFmdGVyLgorCisgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fcmFyZURhdGEtPmNhbGxMaW5rSW5mbyk7CisgICAgICAg
ICAgICAgICAgbV9yYXJlRGF0YS0+Y2FsbExpbmtJbmZvID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxs
TGlua0luZm8+KCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gRklYTUU6
IElmIHdlIGdlbmVyYXRlZCBhIHBvbHltb3JwaGljIGNhbGwgc3R1YiB0aGF0IGp1bXBlZCBiYWNr
IHRvIHRoZSBnZXR0ZXIKKyAgICAgICAgICAgICAgICAvLyBzdHViLCB3aGljaCB0aGVuIGp1bXBl
ZCBiYWNrIHRvIHRoZSBtYWluIGNvZGUsIHRoZW4gd2UnZCBoYXZlIGEgcmVhY2hhYmlsaXR5Cisg
ICAgICAgICAgICAgICAgLy8gc2l0dWF0aW9uIHRoYXQgdGhlIEdDIGRvZXNuJ3Qga25vdyBhYm91
dC4gVGhlIEdDIHdvdWxkIGVuc3VyZSB0aGF0IHRoZSBwb2x5bW9ycGhpYworICAgICAgICAgICAg
ICAgIC8vIGNhbGwgc3R1YiBzdGF5ZWQgYWxpdmUsIGFuZCBpdCB3b3VsZCBlbnN1cmUgdGhhdCB0
aGUgbWFpbiBjb2RlIHN0YXllZCBhbGl2ZSwgYnV0CisgICAgICAgICAgICAgICAgLy8gaXQgd291
bGRuJ3Qga25vdyB0aGF0IHRoZSBnZXR0ZXIgc3R1YiB3YXMgYWxpdmUuIElkZWFsbHkgSklUIHN0
dWIgcm91dGluZXMgd291bGQKKyAgICAgICAgICAgICAgICAvLyBiZSBHQyBvYmplY3RzLCBhbmQg
dGhlbiB3ZSdkIGJlIGFibGUgdG8gc2F5IHRoYXQgdGhlIHBvbHltb3JwaGljIGNhbGwgc3R1YiBo
YXMgYQorICAgICAgICAgICAgICAgIC8vIHJlZmVyZW5jZSB0byB0aGUgZ2V0dGVyIHN0dWIuCisg
ICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0ODkxNAorICAgICAgICAgICAgICAgIG1fcmFyZURhdGEtPmNhbGxMaW5rSW5mby0+ZGlzYWxs
b3dTdHVicygpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fcmFyZURhdGEt
PmNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKAorICAgICAgICAgICAgICAgICAgICBDYWxsTGlua0lu
Zm86OkNhbGwsIHN0dWJJbmZvLmNvZGVPcmlnaW4sIGxvYWRlZFZhbHVlR1BSKTsKKworICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKKworICAgICAgICAgICAgICAg
IC8vIFRoZXJlIGlzIGEgInRoaXMiIGFyZ3VtZW50LgorICAgICAgICAgICAgICAgIHVuc2lnbmVk
IG51bWJlck9mUGFyYW1ldGVycyA9IDE7CisgICAgICAgICAgICAgICAgLy8gLi4uIGFuZCBhIHZh
bHVlIGFyZ3VtZW50IGlmIHdlJ3JlIGNhbGxpbmcgYSBzZXR0ZXIuCisgICAgICAgICAgICAgICAg
aWYgKG1fdHlwZSA9PSBTZXR0ZXIpCisgICAgICAgICAgICAgICAgICAgIG51bWJlck9mUGFyYW1l
dGVycysrOworCisgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBhY2Nlc3NvcjsgaWYgdGhlcmUg
YWluJ3Qgb25lIHRoZW4gdGhlIHJlc3VsdCBpcyBqc1VuZGVmaW5lZCgpLgorICAgICAgICAgICAg
ICAgIGlmIChtX3R5cGUgPT0gU2V0dGVyKSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2Fk
UHRyKAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGxvYWRl
ZFZhbHVlR1BSLCBHZXR0ZXJTZXR0ZXI6Om9mZnNldE9mU2V0dGVyKCkpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKAorICAgICAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKGxvYWRlZFZhbHVlR1BSLCBHZXR0ZXJTZXR0ZXI6Om9mZnNl
dE9mR2V0dGVyKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIpOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBy
ZXR1cm5VbmRlZmluZWQgPSBqaXQuYnJhbmNoVGVzdFB0cigKKyAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpaZXJvLCBsb2FkZWRWYWx1ZUdQUik7CisKKyAgICAgICAgICAgICAgICB1
bnNpZ25lZCBudW1iZXJPZlJlZ3NGb3JDYWxsID0gSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6
ZSArIG51bWJlck9mUGFyYW1ldGVyczsKKworICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJl
ck9mQnl0ZXNGb3JDYWxsID0KKyAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZSZWdzRm9yQ2Fs
bCAqIHNpemVvZihSZWdpc3RlcikgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7CisKKyAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwgPQorICAgICAg
ICAgICAgICAgICAgICBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRl
cygpLCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCk7CisKKyAgICAgICAgICAgICAgICBqaXQuc3ViUHRy
KAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihhbGlnbmVk
TnVtYmVyT2ZCeXRlc0ZvckNhbGwpLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
QWRkcmVzcyBjYWxsZWVGcmFtZSA9IENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwKKyAgICAgICAgICAg
ICAgICAgICAgLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMp
KSk7CisKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMigKKyAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobnVtYmVyT2ZQYXJhbWV0ZXJzKSwKKyAgICAgICAg
ICAgICAgICAgICAgY2FsbGVlRnJhbWUud2l0aE9mZnNldChKU1N0YWNrOjpBcmd1bWVudENvdW50
ICogc2l6ZW9mKFJlZ2lzdGVyKSArIFBheWxvYWRPZmZzZXQpKTsKKworICAgICAgICAgICAgICAg
IGppdC5zdG9yZUNlbGwoCisgICAgICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSLCBjYWxs
ZWVGcmFtZS53aXRoT2Zmc2V0KEpTU3RhY2s6OkNhbGxlZSAqIHNpemVvZihSZWdpc3RlcikpKTsK
KworICAgICAgICAgICAgICAgIGppdC5zdG9yZUNlbGwoCisgICAgICAgICAgICAgICAgICAgIGJh
c2VGb3JHZXRHUFIsCisgICAgICAgICAgICAgICAgICAgIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQo
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIp
KSk7CisKKyAgICAgICAgICAgICAgICBpZiAobV90eXBlID09IFNldHRlcikgeworICAgICAgICAg
ICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVl
UmVncywKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSku
b2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHNsb3dDYXNlID0gaml0LmJyYW5jaFB0cldp
dGhQYXRjaCgKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgbG9h
ZGVkVmFsdWVHUFIsIGFkZHJlc3NPZkxpbmtGdW5jdGlvbkNoZWNrLAorICAgICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoMCkpOworCisgICAgICAgICAgICAgICAg
ZmFzdFBhdGhDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisKKyAgICAgICAgICAgICAgICBqaXQuYWRk
UHRyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihhbGln
bmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwpLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBpZiAobV90eXBlID09
IEdldHRlcikKKyAgICAgICAgICAgICAgICAgICAgaml0LnNldHVwUmVzdWx0cyh2YWx1ZVJlZ3Mp
OworCisgICAgICAgICAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgICAg
ICAgICAgc2xvd0Nhc2UubGluaygmaml0KTsKKworICAgICAgICAgICAgICAgIGppdC5tb3ZlKGxv
YWRlZFZhbHVlR1BSLCBHUFJJbmZvOjpyZWdUMCk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAg
ICAgICAgICAgICAgICAvLyBXZSAqYWx3YXlzKiBrbm93IHRoYXQgdGhlIGdldHRlci9zZXR0ZXIs
IGlmIG5vbi1udWxsLCBpcyBhIGNlbGwuCisgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIEdQUkluZm86OnJlZ1QxKTsK
KyNlbmRpZgorICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cihtX3JhcmVEYXRhLT5jYWxsTGlua0luZm8uZ2V0KCkpLCBHUFJJbmZvOjpyZWdUMik7Cisg
ICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisKKyAgICAgICAg
ICAgICAgICBqaXQuYWRkUHRyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwpLAorICAgICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAg
ICBpZiAobV90eXBlID09IEdldHRlcikKKyAgICAgICAgICAgICAgICAgICAgaml0LnNldHVwUmVz
dWx0cyh2YWx1ZVJlZ3MpOworCisgICAgICAgICAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAo
KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuVW5kZWZpbmVkLmxpbmsoJmppdCk7CisKKyAgICAg
ICAgICAgICAgICBpZiAobV90eXBlID09IEdldHRlcikKKyAgICAgICAgICAgICAgICAgICAgaml0
Lm1vdmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgdmFsdWVSZWdzKTsKKworICAgICAgICAg
ICAgICAgIGRvbmUubGluaygmaml0KTsKKworICAgICAgICAgICAgICAgIHN0YXRlLmNhbGxiYWNr
cy5hcHBlbmQoCisgICAgICAgICAgICAgICAgICAgIFs9LCAmdm1dIChMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3JhcmVEYXRhLT5jYWxsTGlua0lu
Zm8tPnNldENhbGxMb2NhdGlvbnMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1
ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoc2xvd1BhdGhDYWxsKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoYWRkcmVzc09mTGlua0Z1bmN0aW9uQ2hl
Y2spLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5l
YXJDYWxsKGZhc3RQYXRoQ2FsbCkpOworCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVm
ZmVyLmxpbmsoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdldENUSVN0dWIo
bGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBnZXR0ZXI6IEVuY29k
ZWRKU1ZhbHVlICgqR2V0VmFsdWVGdW5jKShFeGVjU3RhdGUqLCBKU09iamVjdCogc2xvdEJhc2Us
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgICAg
ICAvLyBzZXR0ZXI6IHZvaWQgKCpQdXRWYWx1ZUZ1bmMpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBi
YXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSk7Cisj
aWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgICAgICBpZiAobV90eXBlID09IEN1c3RvbUdl
dHRlcikgeworICAgICAgICAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgYmFzZUZvckFjY2Vzc0dQUiwgYmFzZUZvckdl
dEdQUiwKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihpZGVudC5pbXBsKCkpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlRm9yQWNjZXNzR1BSLCBi
YXNlRm9yR2V0R1BSLCB2YWx1ZVJlZ3MuZ3ByKCkpOworI2Vsc2UKKyAgICAgICAgICAgICAgICBp
ZiAobV90eXBlID09IEN1c3RvbUdldHRlcikgeworICAgICAgICAgICAgICAgICAgICBqaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgYmFzZUZv
ckFjY2Vzc0dQUiwgYmFzZUZvckdldEdQUiwKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGlkZW50LmltcGwoKSkpOworICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICBiYXNlRm9yQWNjZXNz
R1BSLCBiYXNlRm9yR2V0R1BSLAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksCisgICAgICAgICAgICAgICAgICAgICAg
ICB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB2YWx1ZVJlZ3MudGFnR1BSKCkpOworICAgICAgICAg
ICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgJnZtLnRvcENhbGxGcmFtZSk7CisKKyAgICAgICAgICAgICAgICBv
cGVyYXRpb25DYWxsID0gaml0LmNhbGwoKTsKKyAgICAgICAgICAgICAgICBpZiAobV90eXBlID09
IEN1c3RvbUdldHRlcikKKyAgICAgICAgICAgICAgICAgICAgaml0LnNldHVwUmVzdWx0cyh2YWx1
ZVJlZ3MpOworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBub0V4Y2VwdGlvbiA9
CisgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0RXhjZXB0aW9uQ2hlY2soQ0NhbGxIZWxwZXJz
OjpJbnZlcnRlZEV4Y2VwdGlvbkNoZWNrKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGppdC5zZXR1cEFyZ3VtZW50cyhDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnZtKSwgR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIGhhbmRsZXJDYWxsID0g
aml0LmNhbGwoKTsKKyAgICAgICAgICAgICAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigp
OworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbm9FeGNlcHRpb24ubGluaygmaml0KTsK
KworICAgICAgICAgICAgICAgIHN0YXRlLmNhbGxiYWNrcy5hcHBlbmQoCisgICAgICAgICAgICAg
ICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAg
ICAgICAgbGlua0J1ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIEZ1bmN0aW9uUHRyKG1fcmFyZURh
dGEtPmN1c3RvbUFjY2Vzc29yLm9wYXF1ZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgbGlu
a0J1ZmZlci5saW5rKGhhbmRsZXJDYWxsLCBsb29rdXBFeGNlcHRpb25IYW5kbGVyKTsKKyAgICAg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc3Rh
dGUuc3VjY2VlZCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2FzZSBSZXBsYWNl
OiB7CisgICAgICAgIGlmIChpc0lubGluZU9mZnNldChtX29mZnNldCkpIHsKKyAgICAgICAgICAg
IGppdC5zdG9yZVZhbHVlKAorICAgICAgICAgICAgICAgIHZhbHVlUmVncywKKyAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICAgICAgICAgIGJhc2VHUFIs
CisgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSAr
CisgICAgICAgICAgICAgICAgICAgIG9mZnNldEluSW5saW5lU3RvcmFnZShtX29mZnNldCkgKiBz
aXplb2YoSlNWYWx1ZSkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVZhbHVlKAorICAgICAg
ICAgICAgICAgIHZhbHVlUmVncywKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoCisgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIsIG9mZnNldEluQnV0dGVyZmx5KG1f
b2Zmc2V0KSAqIHNpemVvZihKU1ZhbHVlKSkpOworICAgICAgICB9CisgICAgICAgIHN0YXRlLnN1
Y2NlZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNhc2UgVHJhbnNpdGlvbjog
eworICAgICAgICAvLyBBY2Nlc3NDYXNlOjp0cmFuc2l0aW9uKCkgc2hvdWxkIGhhdmUgcmV0dXJu
ZWQgbnVsbC4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3Rl
cnMgPj0gNiB8fCAhc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgfHwgc3RydWN0dXJl
KCktPm91dE9mTGluZUNhcGFjaXR5KCkgPT0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCghc3RydWN0dXJlKCktPmNvdWxkSGF2ZUlu
ZGV4aW5nSGVhZGVyKCkpOworCisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1Bh
dGg7CisKKyAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcihzdHViSW5m
by5wYXRjaC51c2VkUmVnaXN0ZXJzKTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2soYmFzZUdQUik7
CisgICAgICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlUmVncyk7CisgICAgICAgIGFsbG9jYXRvci5s
b2NrKHNjcmF0Y2hHUFIpOworCisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMiA9IGFsbG9jYXRv
ci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIzOworICAg
ICAgICBpZiAobmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJl
KCktPm91dE9mTGluZUNhcGFjaXR5KCkKKyAgICAgICAgICAgICYmIHN0cnVjdHVyZSgpLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpKQorICAgICAgICAgICAgc2NyYXRjaEdQUjMgPSBhbGxvY2F0b3IuYWxs
b2NhdGVTY3JhdGNoR1BSKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIz
ID0gSW52YWxpZEdQUlJlZzsKKworICAgICAgICBzaXplX3QgbnVtYmVyT2ZQYWRkaW5nQnl0ZXMg
PSBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0KTsKKworICAg
ICAgICBBU1NFUlQoc3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbklu
dmFsaWRhdGVkKCkpOworCisgICAgICAgIGJvb2wgc2NyYXRjaEdQUkhhc1N0b3JhZ2UgPSBmYWxz
ZTsKKworICAgICAgICBpZiAobmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgIT0g
c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgICAgIHNpemVfdCBu
ZXdTaXplID0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNW
YWx1ZSk7CisgICAgICAgICAgICBDb3BpZWRBbGxvY2F0b3IqIGNvcGllZEFsbG9jYXRvciA9ICZ2
bS5oZWFwLnN0b3JhZ2VBbGxvY2F0b3IoKTsKKworICAgICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgeworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKCZj
b3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZywgc2NyYXRjaEdQUik7CisgICAgICAg
ICAgICAgICAgc2xvd1BhdGguYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICBqaXQuYnJhbmNo
U3ViUHRyKAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpTaWduZWQsIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BSKSk7CisgICAgICAg
ICAgICAgICAgaml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIsICZjb3BpZWRBbGxvY2F0b3ItPm1fY3Vy
cmVudFJlbWFpbmluZyk7CisgICAgICAgICAgICAgICAgaml0Lm5lZ1B0cihzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OkFic29sdXRlQWRkcmVzcygmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRQYXlsb2Fk
RW5kKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihzaXplb2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBzdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOworICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIzKTsKKyAgICAgICAgICAgICAgICBqaXQubG9h
ZFB0cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgaml0
LmJyYW5jaFN1YlB0cigKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6U2ln
bmVkLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRjaEdQUikpOwor
ICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCAmY29waWVkQWxsb2NhdG9y
LT5tX2N1cnJlbnRSZW1haW5pbmcpOworICAgICAgICAgICAgICAgIGppdC5uZWdQdHIoc2NyYXRj
aEdQUik7CisgICAgICAgICAgICAgICAgaml0LmFkZFB0cigKKyAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50
UGF5bG9hZEVuZCksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEpTVmFsdWUpKSwgc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBzY3JhdGNoR1BSID0gbmV3IHN0b3JhZ2UsIHNjcmF0
Y2hHUFIzID0gb2xkIHN0b3JhZ2UsCisgICAgICAgICAgICAgICAgLy8gc2NyYXRjaEdQUjIgPSBh
dmFpbGFibGUKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBvZmZzZXQgPSAwOyBvZmZzZXQg
PCBvbGRTaXplOyBvZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKSkgeworICAgICAgICAgICAgICAgICAg
ICBqaXQubG9hZFB0cigKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRk
cmVzcygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoR1BSMywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PigKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZv
aWQqKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgc2NyYXRjaEdQUjIpOworICAgICAgICAg
ICAgICAgICAgICBqaXQuc3RvcmVQdHIoCisgICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNo
R1BSMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoR1BSLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9mZnNldCArIHNpemVvZihKU1ZhbHVl
KSArIHNpemVvZih2b2lkKikpKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBqaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOworICAgICAgICAgICAg
c2NyYXRjaEdQUkhhc1N0b3JhZ2UgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgdWludDMy
X3Qgc3RydWN0dXJlQml0cyA9IGJpdHdpc2VfY2FzdDx1aW50MzJfdD4obmV3U3RydWN0dXJlKCkt
PmlkKCkpOworICAgICAgICBqaXQuc3RvcmUzMigKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKHN0cnVjdHVyZUJpdHMpLAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSkpOworCisgICAgICAg
IGlmIChpc0lubGluZU9mZnNldChtX29mZnNldCkpIHsKKyAgICAgICAgICAgIGppdC5zdG9yZVZh
bHVlKAorICAgICAgICAgICAgICAgIHZhbHVlUmVncywKKyAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICAgICAgICAgIGJhc2VHUFIsCisgICAgICAgICAg
ICAgICAgICAgIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArCisgICAgICAgICAg
ICAgICAgICAgIG9mZnNldEluSW5saW5lU3RvcmFnZShtX29mZnNldCkgKiBzaXplb2YoSlNWYWx1
ZSkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICghc2NyYXRjaEdQUkhhc1N0
b3JhZ2UpCisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAg
ICAgICAgICAgaml0LnN0b3JlVmFsdWUoCisgICAgICAgICAgICAgICAgdmFsdWVSZWdzLAorICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbkJ1
dHRlcmZseShtX29mZnNldCkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSBudWxscHRyOworICAgICAgICBpZiAo
bmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlKCktPm91dE9m
TGluZUNhcGFjaXR5KCkpCisgICAgICAgICAgICBzY3JhdGNoQnVmZmVyID0gdm0uc2NyYXRjaEJ1
ZmZlckZvclNpemUoYWxsb2NhdG9yLmRlc2lyZWRTY3JhdGNoQnVmZmVyU2l6ZUZvckNhbGwoKSk7
CisKKyNpZiBFTkFCTEUoR0dDKQorICAgICAgICBpZiAobmV3U3RydWN0dXJlKCktPm91dE9mTGlu
ZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKKyAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXI7Cisg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9
IGppdC5qdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihiYXNlR1BSKTsKKyAgICAgICAgICAgIFdy
aXRlQmFycmllckJ1ZmZlciYgd3JpdGVCYXJyaWVyQnVmZmVyID0gaml0LnZtKCktPmhlYXAud3Jp
dGVCYXJyaWVyQnVmZmVyKCk7CisgICAgICAgICAgICBqaXQubG9hZDMyKHdyaXRlQmFycmllckJ1
ZmZlci5jdXJyZW50SW5kZXhBZGRyZXNzKCksIHNjcmF0Y2hHUFIyKTsKKyAgICAgICAgICAgIEND
YWxsSGVscGVyczo6SnVtcCBuZWVkVG9GbHVzaCA9CisgICAgICAgICAgICAgICAgaml0LmJyYW5j
aDMyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgc2Ny
YXRjaEdQUjIsCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KHdyaXRlQmFycmllckJ1ZmZlci5jYXBhY2l0eSgpKSk7CisKKyAgICAgICAgICAgIGppdC5hZGQz
MihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaEdQUjIpOworICAgICAgICAg
ICAgaml0LnN0b3JlMzIoc2NyYXRjaEdQUjIsIHdyaXRlQmFycmllckJ1ZmZlci5jdXJyZW50SW5k
ZXhBZGRyZXNzKCkpOworCisgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIod3JpdGVCYXJyaWVyQnVmZmVyLmJ1ZmZlcigpKSwgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICAvLyBXZSB1c2UgYW4gb2Zmc2V0IG9mIC1zaXplb2Yodm9pZCopIGJlY2F1c2Ugd2Ug
YWxyZWFkeSBhZGRlZCAxIHRvIHNjcmF0Y2hHUFIyLgorICAgICAgICAgICAgaml0LnN0b3JlUHRy
KAorICAgICAgICAgICAgICAgIGJhc2VHUFIsCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpCYXNlSW5kZXgoCisgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIy
LCBDQ2FsbEhlbHBlcnM6OlNjYWxlUHRyLAorICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQzMl90Pigtc2l6ZW9mKHZvaWQqKSkpKTsKKworICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpKdW1wIGRvbmVXaXRoQmFycmllciA9IGppdC5qdW1wKCk7CisgICAgICAgICAgICBuZWVkVG9G
bHVzaC5saW5rKCZqaXQpOworCisgICAgICAgICAgICBhbGxvY2F0b3IucHJlc2VydmVVc2VkUmVn
aXN0ZXJzVG9TY3JhdGNoQnVmZmVyRm9yQ2FsbChqaXQsIHNjcmF0Y2hCdWZmZXIsIHNjcmF0Y2hH
UFIyKTsKKyAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUdQ
Uik7CisgICAgICAgICAgICBjYWxsRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIgPSBqaXQuY2FsbCgp
OworICAgICAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVVc2VkUmVnaXN0ZXJzRnJvbVNjcmF0Y2hC
dWZmZXJGb3JDYWxsKAorICAgICAgICAgICAgICAgIGppdCwgc2NyYXRjaEJ1ZmZlciwgc2NyYXRj
aEdQUjIpOworCisgICAgICAgICAgICBkb25lV2l0aEJhcnJpZXIubGluaygmaml0KTsKKyAgICAg
ICAgICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluaygmaml0KTsKKworICAgICAgICAg
ICAgc3RhdGUuY2FsbGJhY2tzLmFwcGVuZCgKKyAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZm
ZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNh
bGxGbHVzaFdyaXRlQmFycmllckJ1ZmZlciwgb3BlcmF0aW9uRmx1c2hXcml0ZUJhcnJpZXJCdWZm
ZXIpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisjZW5kaWYgLy8gRU5BQkxFKEdH
QykKKyAgICAgICAgCisgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKKworICAgICAgICBpZiAobmV3
U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlKCktPm91dE9mTGlu
ZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7CisgICAgICAg
ICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIG51bWJl
ck9mUGFkZGluZ0J5dGVzKTsKKyAgICAgICAgICAgIGFsbG9jYXRvci5wcmVzZXJ2ZVVzZWRSZWdp
c3RlcnNUb1NjcmF0Y2hCdWZmZXJGb3JDYWxsKGppdCwgc2NyYXRjaEJ1ZmZlciwgc2NyYXRjaEdQ
Uik7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoCisgICAgICAgICAgICAgICAgYmFzZUdQUiwKKyAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobmV3U3RydWN0dXJlKCkpLAorICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG1fb2Zmc2V0KSwKKyAgICAgICAgICAgICAg
ICB2YWx1ZVJlZ3MuZ3ByKCkpOworI2Vsc2UKKyAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoCisgICAgICAgICAgICAgICAgYmFzZUdQUiwKKyAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobmV3U3RydWN0dXJlKCkpLAorICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG1fb2Zmc2V0KSwKKyAgICAgICAgICAg
ICAgICB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB2YWx1ZVJlZ3MudGFnR1BSKCkpOworI2VuZGlm
CisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9uQ2FsbCA9IGppdC5jYWxs
KCk7CisgICAgICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVVzZWRSZWdpc3RlcnNGcm9tU2NyYXRj
aEJ1ZmZlckZvckNhbGwoaml0LCBzY3JhdGNoQnVmZmVyLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
ICAgIHN0YXRlLnN1Y2NlZWQoKTsKKworICAgICAgICAgICAgc3RhdGUuY2FsbGJhY2tzLmFwcGVu
ZCgKKyAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAg
ICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIG9wZXJhdGlvblJl
YWxsb2NhdGVTdG9yYWdlQW5kRmluaXNoUHV0KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2FzZSBBcnJheUxlbmd0aDogewor
ICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGppdC5sb2FkMzIo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zm
c2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQo
CisgICAgICAgICAgICBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpMZXNzVGhhbiwgc2NyYXRj
aEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgaml0LmJveElu
dDMyKHNjcmF0Y2hHUFIsIHZhbHVlUmVncyk7CisgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNhc2UgU3RyaW5nTGVuZ3RoOiB7CisgICAgICAg
IGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTU3RyaW5nOjpvZmZz
ZXRPZkxlbmd0aCgpKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSk7CisgICAgICAgIGppdC5ib3hJ
bnQzMih2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB2YWx1ZVJlZ3MpOworICAgICAgICBzdGF0ZS5z
dWNjZWVkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9IH0KICAgICAKLSAgICByZXR1cm4gcmVz
dWx0OworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLVBvbHltb3JwaGlj
R2V0QnlJZExpc3Q6On5Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0KCkgeyB9CitQb2x5bW9ycGhpY0Fj
Y2Vzczo6UG9seW1vcnBoaWNBY2Nlc3MoKSB7IH0KK1BvbHltb3JwaGljQWNjZXNzOjp+UG9seW1v
cnBoaWNBY2Nlc3MoKSB7IH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIFBvbHltb3JwaGljR2V0
QnlJZExpc3Q6OmN1cnJlbnRTbG93UGF0aFRhcmdldCgKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8pIGNvbnN0CitNYWNyb0Fzc2VtYmxlckNvZGVQdHIgUG9seW1vcnBoaWNBY2Nlc3M6
OnJlZ2VuZXJhdGVXaXRoQ2FzZXMoCisgICAgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwKKyAg
ICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+PiBvcmlnaW5hbENhc2VzVG9BZGQp
CiB7Ci0gICAgaWYgKGlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nh
c2UpOwotICAgIHJldHVybiBtX2xpc3QubGFzdCgpLnN0dWJSb3V0aW5lKCktPmNvZGUoKS5jb2Rl
KCk7CisgICAgLy8gVGhpcyBtZXRob2Qgd2lsbCBhZGQgdGhlIG9yaWdpbmFsQ2FzZXNUb0FkZCB0
byB0aGUgbGlzdCBvbmUgYXQgYSB0aW1lIHdoaWxlIHByZXNlcnZpbmcgdGhlCisgICAgLy8gaW52
YXJpYW50czoKKyAgICAvLyAtIElmIGEgbmV3bHkgYWRkZWQgY2FzZSBjYW5SZXBsYWNlKCkgYW55
IGV4aXN0aW5nIGNhc2UsIHRoZW4gdGhlIGV4aXN0aW5nIGNhc2UgaXMgcmVtb3ZlZCBiZWZvcmUK
KyAgICAvLyAgIHRoZSBuZXcgY2FzZSBpcyBhZGRlZC4gUmVtb3ZhbCBkb2Vzbid0IGNoYW5nZSBv
cmRlciBvZiB0aGUgbGlzdC4gQW55IG51bWJlciBvZiBleGlzdGluZyBjYXNlcworICAgIC8vICAg
Y2FuIGJlIHJlbW92ZWQgdmlhIHRoZSBjYW5SZXBsYWNlKCkgcnVsZS4KKyAgICAvLyAtIENhc2Vz
IGluIHRoZSBsaXN0IGFsd2F5cyBhcHBlYXIgaW4gYXNjZW5kaW5nIG9yZGVyIG9mIHRpbWUgb2Yg
YWRkaXRpb24uIFRoZXJlZm9yZSwgaWYgeW91CisgICAgLy8gICBjYXNjYWRlIHRocm91Z2ggdGhl
IGNhc2VzIGluIHJldmVyc2Ugb3JkZXIsIHlvdSB3aWxsIGdldCB0aGUgbW9zdCByZWNlbnQgY2Fz
ZXMgZmlyc3QuCisgICAgLy8gLSBJZiB0aGlzIG1ldGhvZCBmYWlscyAocmV0dXJucyBudWxsLCBk
b2Vzbid0IGFkZCB0aGUgY2FzZXMpLCB0aGVuIGJvdGggdGhlIHByZXZpb3VzIGNhc2UgbGlzdAor
ICAgIC8vICAgYW5kIHRoZSBwcmV2aW91cyBzdHViIGFyZSBrZXB0IGludGFjdCBhbmQgdGhlIG5l
dyBjYXNlcyBhcmUgZGVzdHJveWVkLiBJdCdzIE9LIHRvIGF0dGVtcHQgdG8KKyAgICAvLyAgIGFk
ZCBtb3JlIHRoaW5ncyBhZnRlciBmYWlsdXJlLgorICAgIAorICAgIC8vIEZpcnN0LCB2ZXJpZnkg
dGhhdCB3ZSBjYW4gZ2VuZXJhdGUgY29kZSBmb3IgYWxsIG9mIHRoZSBuZXcgY2FzZXMgd2hpbGUg
ZWxpbWluYXRpbmcgYW55IG9mIHRoZQorICAgIC8vIG5ldyBjYXNlcyB0aGF0IHJlcGxhY2UgZWFj
aCBvdGhlci4KKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+PiBjYXNlc1Rv
QWRkOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvcmlnaW5hbENhc2VzVG9BZGQuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IG15Q2FzZSA9
IHN0ZDo6bW92ZShvcmlnaW5hbENhc2VzVG9BZGRbaV0pOworCisgICAgICAgIC8vIEFkZCBpdCBv
bmx5IGlmIGl0IGlzIG5vdCByZXBsYWNlZCBieSB0aGUgc3Vic2VxdWVudCBjYXNlcyBpbiB0aGUg
bGlzdC4KKyAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGogPSBpICsgMTsgaiA8IG9yaWdpbmFsQ2FzZXNUb0FkZC5zaXplKCk7ICsraikgeworICAgICAg
ICAgICAgaWYgKG9yaWdpbmFsQ2FzZXNUb0FkZFtqXS0+Y2FuUmVwbGFjZSgqbXlDYXNlKSkgewor
ICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChmb3VuZCkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgaWYgKG15Q2FzZS0+ZG9lc0NhbGxzKCkgJiYg
c3R1YkluZm8ucGF0Y2guc3BpbGxNb2RlID09IE5lZWRUb1NwaWxsKQorICAgICAgICAgICAgcmV0
dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOworCisgICAgICAgIGNhc2VzVG9BZGQuYXBwZW5k
KHN0ZDo6bW92ZShteUNhc2UpKTsKKyAgICB9CisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ZGF0YUxvZygiY2FzZXNUb0FkZDogIiwgbGlzdER1bXAoY2FzZXNUb0FkZCksICJcbiIpOworCisg
ICAgLy8gSWYgdGhlcmUgYXJlbid0IGFueSBjYXNlcyB0byBhZGQsIHRoZW4gZmFpbCBvbiB0aGUg
Z3JvdW5kcyB0aGF0IHRoZXJlJ3Mgbm8gcG9pbnQgdG8gZ2VuZXJhdGluZyBhCisgICAgLy8gbmV3
IHN0dWIgdGhhdCB3aWxsIGJlIGlkZW50aWNhbCB0byB0aGUgb2xkIG9uZS4gUmV0dXJuaW5nIG51
bGwgc2hvdWxkIHRlbGwgdGhlIGNhbGxlciB0byBqdXN0CisgICAgLy8ga2VlcCBkb2luZyB3aGF0
IHRoZXkgd2VyZSBkb2luZyBiZWZvcmUuCisgICAgaWYgKGNhc2VzVG9BZGQuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7CisKKyAgICAvLyBOb3cgY29u
c3RydWN0IHRoZSBsaXN0IG9mIGNhc2VzIGFzIHRoZXkgc2hvdWxkIGFwcGVhciBpZiB3ZSBhcmUg
c3VjY2Vzc2Z1bC4gVGhpcyBtZWFucyBwdXR0aW5nCisgICAgLy8gYWxsIG9mIHRoZSBwcmV2aW91
cyBjYXNlcyBpbiB0aGlzIGxpc3QgaW4gb3JkZXIgYnV0IGV4Y2x1ZGluZyB0aG9zZSB0aGF0IGNh
biBiZSByZXBsYWNlZCwgYW5kCisgICAgLy8gdGhlbiBhZGRpbmcgdGhlIG5ldyBjYXNlcy4KKyAg
ICBMaXN0VHlwZSBuZXdDYXNlczsKKyAgICBmb3IgKGF1dG8mIG9sZENhc2UgOiBtX2xpc3QpIHsK
KyAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICBmb3IgKGF1dG8mIGNhc2VUb0Fk
ZCA6IGNhc2VzVG9BZGQpIHsKKyAgICAgICAgICAgIGlmIChjYXNlVG9BZGQtPmNhblJlcGxhY2Uo
Km9sZENhc2UpKSB7CisgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghZm91bmQp
CisgICAgICAgICAgICBuZXdDYXNlcy5hcHBlbmQob2xkQ2FzZS0+Y2xvbmUoKSk7CisgICAgfQor
ICAgIGZvciAoYXV0byYgY2FzZVRvQWRkIDogY2FzZXNUb0FkZCkKKyAgICAgICAgbmV3Q2FzZXMu
YXBwZW5kKHN0ZDo6bW92ZShjYXNlVG9BZGQpKTsKKworICAgIGlmICh2ZXJib3NlKQorICAgICAg
ICBkYXRhTG9nKCJuZXdDYXNlczogIiwgbGlzdER1bXAobmV3Q2FzZXMpLCAiXG4iKTsKKworICAg
IGlmIChuZXdDYXNlcy5zaXplKCkgPiBPcHRpb25zOjptYXhBY2Nlc3NWYXJpYW50TGlzdFNpemUo
KSkgeworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIlRvbyBtYW55
IGNhc2VzLlxuIik7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKKyAg
ICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVzdWx0ID0gcmVnZW5lcmF0ZSh2bSwg
Y29kZUJsb2NrLCBzdHViSW5mbywgaWRlbnQsIG5ld0Nhc2VzKTsKKyAgICBpZiAoIXJlc3VsdCkK
KyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOworCisgICAgbV9saXN0ID0g
c3RkOjptb3ZlKG5ld0Nhc2VzKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFBvbHlt
b3JwaGljR2V0QnlJZExpc3Q6OmFkZEFjY2Vzcyhjb25zdCBHZXRCeUlkQWNjZXNzJiBhY2Nlc3Mp
CitNYWNyb0Fzc2VtYmxlckNvZGVQdHIgUG9seW1vcnBoaWNBY2Nlc3M6OnJlZ2VuZXJhdGVXaXRo
Q2FzZSgKKyAgICBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8sIGNvbnN0IElkZW50aWZpZXImIGlkZW50LAorICAgIHN0ZDo6dW5pcXVlX3B0
cjxBY2Nlc3NDYXNlPiBuZXdBY2Nlc3MpCiB7Ci0gICAgQVNTRVJUKCFpc0Z1bGwoKSk7Ci0gICAg
Ly8gTWFrZSBzdXJlIHRoYXQgdGhlIHJlc2l6aW5nIG9wdGltaXplcyBmb3Igc3BhY2UsIG5vdCB0
aW1lLgotICAgIG1fbGlzdC5yZXNpemVUb0ZpdChtX2xpc3Quc2l6ZSgpICsgMSk7Ci0gICAgbV9s
aXN0Lmxhc3QoKSA9IGFjY2VzczsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nh
c2U+PiBuZXdBY2Nlc3NlczsKKyAgICBuZXdBY2Nlc3Nlcy5hcHBlbmQoc3RkOjptb3ZlKG5ld0Fj
Y2VzcykpOworICAgIHJldHVybiByZWdlbmVyYXRlV2l0aENhc2VzKHZtLCBjb2RlQmxvY2ssIHN0
dWJJbmZvLCBpZGVudCwgc3RkOjptb3ZlKG5ld0FjY2Vzc2VzKSk7CiB9CiAKLWJvb2wgUG9seW1v
cnBoaWNHZXRCeUlkTGlzdDo6aXNGdWxsKCkgY29uc3QKK2Jvb2wgUG9seW1vcnBoaWNBY2Nlc3M6
OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0CiB7Ci0gICAgQVNTRVJUKHNpemUoKSA8PSBQT0xZTU9S
UEhJQ19MSVNUX0NBQ0hFX1NJWkUpOwotICAgIHJldHVybiBzaXplKCkgPT0gUE9MWU1PUlBISUNf
TElTVF9DQUNIRV9TSVpFOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplKCk7ICsr
aSkgeworICAgICAgICBpZiAoIWF0KGkpLnZpc2l0V2Vhayh2bSkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFBvbHltb3JwaGlj
R2V0QnlJZExpc3Q6OmlzQWxtb3N0RnVsbCgpIGNvbnN0Cit2b2lkIFBvbHltb3JwaGljQWNjZXNz
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKHNpemUoKSA8PSBQ
T0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpOwotICAgIHJldHVybiBzaXplKCkgPj0gUE9MWU1P
UlBISUNfTElTVF9DQUNIRV9TSVpFIC0gMTsKKyAgICBvdXQucHJpbnQoUmF3UG9pbnRlcih0aGlz
KSwgIjpbIik7CisgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgIGZvciAoYXV0byYgZW50cnkg
OiBtX2xpc3QpCisgICAgICAgIG91dC5wcmludChjb21tYSwgKmVudHJ5KTsKKyAgICBvdXQucHJp
bnQoIl0iKTsKIH0KIAotYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpkaWRTZWxmUGF0Y2hp
bmcoKSBjb25zdAorTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIFBvbHltb3JwaGljQWNjZXNzOjpyZWdl
bmVyYXRlKAorICAgIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbywgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsCisgICAgUG9seW1vcnBoaWNB
Y2Nlc3M6Okxpc3RUeXBlJiBjYXNlcykKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXplKCk7
IGktLTspIHsKLSAgICAgICAgaWYgKGF0KGkpLnR5cGUoKSA9PSBHZXRCeUlkQWNjZXNzOjpTaW1w
bGVJbmxpbmUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAodmVyYm9zZSkKKyAg
ICAgICAgZGF0YUxvZygiR2VuZXJhdGluZyBjb2RlIGZvciBjYXNlczogIiwgbGlzdER1bXAoY2Fz
ZXMpLCAiXG4iKTsKKyAgICAKKyAgICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUgc3RhdGU7CisKKyAg
ICBzdGF0ZS5hY2Nlc3MgPSB0aGlzOworICAgIHN0YXRlLnN0dWJJbmZvID0gJnN0dWJJbmZvOwor
ICAgIHN0YXRlLmlkZW50ID0gJmlkZW50OworICAgIAorICAgIHN0YXRlLmJhc2VHUFIgPSBzdGF0
aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmJhc2VHUFIpOworICAgIHN0YXRlLnZhbHVl
UmVncyA9IEpTVmFsdWVSZWdzKAorI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIHN0YXRp
Y19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVUYWdHUFIpLAorI2VuZGlmCisgICAg
ICAgIHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVHUFIpKTsKKworICAg
IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1YkluZm8ucGF0Y2gudXNlZFJl
Z2lzdGVycyk7CisgICAgc3RhdGUuYWxsb2NhdG9yID0gJmFsbG9jYXRvcjsKKyAgICBhbGxvY2F0
b3IubG9jayhzdGF0ZS5iYXNlR1BSKTsKKyAgICBhbGxvY2F0b3IubG9jayhzdGF0ZS52YWx1ZVJl
Z3MpOworCisgICAgc3RhdGUuc2NyYXRjaEdQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hH
UFIoKTsKKyAgICAKKyAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSwgY29kZUJsb2NrKTsKKyAgICBz
dGF0ZS5qaXQgPSAmaml0OworCisgICAgc3RhdGUubnVtYmVyT2ZQYWRkaW5nQnl0ZXMgPSBhbGxv
Y2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0KTsKKworICAgIGJvb2wg
YWxsR3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2sgPSB0cnVlOworICAgIGZvciAoYXV0byYgZW50cnkg
OiBjYXNlcykKKyAgICAgICAgYWxsR3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2sgJj0gZW50cnktPmd1
YXJkZWRCeVN0cnVjdHVyZUNoZWNrKCk7CisKKyAgICBpZiAoY2FzZXMuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIC8vIFRoaXMgaXMgc3VwZXIgdW5saWtlbHksIGJ1dCB3ZSBtYWtlIGl0IGxlZ2FsIGFu
eXdheS4KKyAgICAgICAgc3RhdGUuZmFpbEFuZFJlcGF0Y2guYXBwZW5kKGppdC5qdW1wKCkpOwor
ICAgIH0gZWxzZSBpZiAoIWFsbEd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrIHx8IGNhc2VzLnNpemUo
KSA9PSAxKSB7CisgICAgICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgcHJveGllcyBpbiB0aGUgbGlz
dCwgd2UgY2Fubm90IGp1c3QgdXNlIGEgYmluYXJ5IHN3aXRjaCBvdmVyIHRoZSBzdHJ1Y3R1cmUu
CisgICAgICAgIC8vIFdlIG5lZWQgdG8gcmVzb3J0IHRvIGEgY2FzY2FkZS4gQSBjYXNjYWRlIGFs
c28gaGFwcGVucyB0byBiZSBvcHRpbWFsIGlmIHdlIG9ubHkgaGF2ZSBqdXN0CisgICAgICAgIC8v
IG9uZSBjYXNlLgorICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGZhbGxUaHJvdWdoOwor
CisgICAgICAgIC8vIENhc2NhZGUgdGhyb3VnaCB0aGUgbGlzdCwgcHJlZmVycmluZyBuZXdlciBl
bnRyaWVzLgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjYXNlcy5zaXplKCk7IGktLTspIHsK
KyAgICAgICAgICAgIGZhbGxUaHJvdWdoLmxpbmsoJmppdCk7CisgICAgICAgICAgICBjYXNlc1tp
XS0+Z2VuZXJhdGVXaXRoR3VhcmQoc3RhdGUsIGZhbGxUaHJvdWdoKTsKKyAgICAgICAgfQorICAg
ICAgICBzdGF0ZS5mYWlsQW5kUmVwYXRjaC5hcHBlbmQoZmFsbFRocm91Z2gpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGppdC5sb2FkMzIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3Moc3RhdGUuYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAgICAg
ICAgIHN0YXRlLnNjcmF0Y2hHUFIpOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPGludDY0X3Q+
IGNhc2VWYWx1ZXMoY2FzZXMuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGNhc2VzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgY2FzZVZhbHVlc1tpXSA9IGJpdHdp
c2VfY2FzdDxpbnQzMl90PihjYXNlc1tpXS0+c3RydWN0dXJlKCktPmlkKCkpOworICAgICAgICAK
KyAgICAgICAgQmluYXJ5U3dpdGNoIGJpbmFyeVN3aXRjaChzdGF0ZS5zY3JhdGNoR1BSLCBjYXNl
VmFsdWVzLCBCaW5hcnlTd2l0Y2g6OkludDMyKTsKKyAgICAgICAgd2hpbGUgKGJpbmFyeVN3aXRj
aC5hZHZhbmNlKGppdCkpCisgICAgICAgICAgICBjYXNlc1tiaW5hcnlTd2l0Y2guY2FzZUluZGV4
KCldLT5nZW5lcmF0ZShzdGF0ZSk7CisgICAgICAgIHN0YXRlLmZhaWxBbmRSZXBhdGNoLmFwcGVu
ZChiaW5hcnlTd2l0Y2guZmFsbFRocm91Z2goKSk7CisgICAgfQorCisgICAgc3RhdGUuZmFpbEFu
ZElnbm9yZS5saW5rKCZqaXQpOworCisgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGlubGluZSBj
YWNoZSBvcHRpbWl6YXRpb24gY29kZSBrbm93cyB0aGF0IHdlIGFyZSB0YWtpbmcgc2xvdyBwYXRo
IGJlY2F1c2UKKyAgICAvLyBvZiBzb21ldGhpbmcgdGhhdCBpc24ndCBwYXRjaGFibGUuICJzZWVu
IiBiZWluZyBmYWxzZSBtZWFucyB0aGF0IHdlIGJ5cGFzcyBwYXRjaGluZy4gVGhpcyBpcworICAg
IC8vIHByZXR0eSBncm9zcyBidXQgaXQgbWVhbnMgdGhhdCB3ZSBkb24ndCBuZWVkIHRvIGhhdmUg
dHdvIHNsb3cgcGF0aCBlbnRyeXBvaW50cyAtIG9uZSBmb3IKKyAgICAvLyBwYXRjaGluZyBhbmQg
b25lIGZvciBub3JtYWwgc2xvdyBzdHVmZi4KKyAgICBqaXQuc3RvcmU4KENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKGZhbHNlKSwgJnN0dWJJbmZvLnNlZW4pOworCisgICAgQ0NhbGxIZWxwZXJz
OjpKdW1wTGlzdCBmYWlsdXJlOworICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMo
KSkgeworICAgICAgICBzdGF0ZS5mYWlsQW5kUmVwYXRjaC5saW5rKCZqaXQpOworICAgICAgICBz
dGF0ZS5yZXN0b3JlU2NyYXRjaCgpOworICAgIH0gZWxzZQorICAgICAgICBmYWlsdXJlID0gc3Rh
dGUuZmFpbEFuZFJlcGF0Y2g7CisgICAgZmFpbHVyZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisKKyAg
ICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIodm0sIGppdCwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlv
bkNhbkZhaWwpOworICAgIGlmIChsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpIHsKKyAg
ICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCJEaWQgZmFpbCB0byBhbGxv
Y2F0ZS5cbiIpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7CiAgICAg
fQotICAgIHJldHVybiBmYWxzZTsKKworICAgIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJl
bCA9CisgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0
dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSk7CisgICAgICAgIAorICAgIGxpbmtCdWZmZXIu
bGluayhzdGF0ZS5zdWNjZXNzLCBzdWNjZXNzTGFiZWwpOworCisgICAgbGlua0J1ZmZlci5saW5r
KAorICAgICAgICBmYWlsdXJlLAorICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
bGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7CisgICAg
CisgICAgZm9yIChhdXRvIGNhbGxiYWNrIDogc3RhdGUuY2FsbGJhY2tzKQorICAgICAgICBjYWxs
YmFjayhsaW5rQnVmZmVyKTsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZSA9
IEZJTkFMSVpFX0NPREVfRk9SKAorICAgICAgICBjb2RlQmxvY2ssIGxpbmtCdWZmZXIsCisgICAg
ICAgICgiJXMiLCB0b0NTdHJpbmcoIkFjY2VzcyBzdHViIGZvciAiLCAqY29kZUJsb2NrLCAiICIs
IHN0dWJJbmZvLmNvZGVPcmlnaW4sICIgd2l0aCByZXR1cm4gcG9pbnQgIiwgc3VjY2Vzc0xhYmVs
LCAiOiAiLCBsaXN0RHVtcChjYXNlcykpLmRhdGEoKSkpOworCisgICAgYm9vbCBkb2VzQ2FsbHMg
PSBmYWxzZTsKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogY2FzZXMpCisgICAgICAgIGRvZXNDYWxs
cyB8PSBlbnRyeS0+ZG9lc0NhbGxzKCk7CisgICAgCisgICAgbV9zdHViUm91dGluZSA9IGNyZWF0
ZUpJVFN0dWJSb3V0aW5lKGNvZGUsIHZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBk
b2VzQ2FsbHMpOworICAgIG1fd2F0Y2hwb2ludHMgPSBzdGQ6Om1vdmUoc3RhdGUud2F0Y2hwb2lu
dHMpOworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJSZXR1cm5pbmc6ICIsIGNv
ZGUuY29kZSgpLCAiXG4iKTsKKyAgICByZXR1cm4gY29kZS5jb2RlKCk7CiB9CiAKLWJvb2wgUG9s
eW1vcnBoaWNHZXRCeUlkTGlzdDo6dmlzaXRXZWFrKFZNJiB2bSkgY29uc3QKK30gLy8gbmFtZXNw
YWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKwordm9p
ZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEFjY2Vzc0Nhc2U6OkFjY2Vzc1R5cGUg
dHlwZSkKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXplKCk7IGktLTspIHsKLSAgICAgICAg
aWYgKCFhdChpKS52aXNpdFdlYWsodm0pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgQWNjZXNzQ2FzZTo6TG9hZDoKKyAgICAgICAgb3V0
LnByaW50KCJMb2FkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OlRy
YW5zaXRpb246CisgICAgICAgIG91dC5wcmludCgiVHJhbnNpdGlvbiIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpSZXBsYWNlOgorICAgICAgICBvdXQucHJpbnQoIlJl
cGxhY2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6TWlzczoKKyAg
ICAgICAgb3V0LnByaW50KCJNaXNzIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vz
c0Nhc2U6OkdldHRlcjoKKyAgICAgICAgb3V0LnByaW50KCJHZXR0ZXIiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6U2V0dGVyOgorICAgICAgICBvdXQucHJpbnQoIlNl
dHRlciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpDdXN0b21HZXR0
ZXI6CisgICAgICAgIG91dC5wcmludCgiQ3VzdG9tR2V0dGVyIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkN1c3RvbVNldHRlcjoKKyAgICAgICAgb3V0LnByaW50KCJD
dXN0b21TZXR0ZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5I
aXQ6CisgICAgICAgIG91dC5wcmludCgiSW5IaXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgQWNjZXNzQ2FzZTo6SW5NaXNzOgorICAgICAgICBvdXQucHJpbnQoIkluTWlzcyIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpBcnJheUxlbmd0aDoKKyAgICAgICAg
b3V0LnByaW50KCJBcnJheUxlbmd0aCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nl
c3NDYXNlOjpTdHJpbmdMZW5ndGg6CisgICAgICAgIG91dC5wcmludCgiU3RyaW5nTGVuZ3RoIik7
CisgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgcmV0dXJuIHRydWU7CisKKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi19IC8vIG5hbWVzcGFjZSBKU0MKK30gLy8gbmFt
ZXNwYWNlIFdURgogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgJKHJldmlzaW9u
IDE4OTMyNCkJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGlj
R2V0QnlJZExpc3QuaDoxODkzMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seW1vcnBoaWNBY2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IFBvbHltb3JwaGljR2V0QnlJZExpc3RfaAorI2RlZmluZSBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0
X2gKKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCisjaW5jbHVk
ZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dC5oIgorI2luY2x1ZGUgIk9wY29kZS5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVCbG9jazsK
K3N0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbzsKKworY2xhc3MgR2V0QnlJZEFjY2VzcyB7CitwdWJs
aWM6CisgICAgZW51bSBBY2Nlc3NUeXBlIHsKKyAgICAgICAgSW52YWxpZCwKKyAgICAgICAgU2lt
cGxlSW5saW5lLCAvLyBUaGlzIGlzIHRoZSBwYXRjaGVkIGlubGluZSBhY2Nlc3MuCisgICAgICAg
IFNpbXBsZVN0dWIsIC8vIFRoaXMgaXMgYSBzdHViLgorICAgICAgICBXYXRjaGVkU3R1YiwKKyAg
ICAgICAgR2V0dGVyLAorICAgICAgICBDdXN0b21HZXR0ZXIsCisgICAgICAgIFNpbXBsZU1pc3Ms
CisgICAgfTsKKyAgICAKKyAgICBHZXRCeUlkQWNjZXNzKCkKKyAgICAgICAgOiBtX3R5cGUoSW52
YWxpZCkKKyAgICB7CisgICAgfQorICAgIAorICAgIEdldEJ5SWRBY2Nlc3MoCisgICAgICAgIFZN
JiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4s
IFN0cnVjdHVyZSosCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiA9
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCkpOworICAgIAorICAgIH5HZXRCeUlkQWNjZXNz
KCk7CisgICAgCisgICAgc3RhdGljIEdldEJ5SWRBY2Nlc3MgZnJvbVN0cnVjdHVyZVN0dWJJbmZv
KFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAgCisgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0
dXJuIG1fdHlwZSAhPSBJbnZhbGlkOyB9CisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJl
dHVybiAhaXNTZXQoKTsgfQorICAgIAorICAgIEFjY2Vzc1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdHlwZTsgfQorICAgIAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7IH0KKyAgICAKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25T
ZXQ7IH0KKyAgICAKKyAgICBKSVRTdHViUm91dGluZSogc3R1YlJvdXRpbmUoKSBjb25zdAorICAg
IHsKKyAgICAgICAgQVNTRVJUKGlzU2V0KCkpOworICAgICAgICByZXR1cm4gbV9zdHViUm91dGlu
ZS5nZXQoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBkb2VzQ2FsbHMoKSBjb25zdCB7IHJldHVy
biB0eXBlKCkgPT0gR2V0dGVyIHx8IHR5cGUoKSA9PSBDdXN0b21HZXR0ZXI7IH0KKyAgICAKKyAg
ICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFz
cyBDb2RlQmxvY2s7CisgICAgCisgICAgQWNjZXNzVHlwZSBtX3R5cGU7CisgICAgV3JpdGVCYXJy
aWVyPFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgbV9jb25kaXRpb25TZXQ7CisgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBtX3N0dWJSb3V0
aW5lOworfTsKKworY2xhc3MgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCB7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgLy8gRWl0aGVyIGNyZWF0ZXMgYSBuZXcgcG9s
eW1vcnBoaWMgZ2V0IGxpc3QsIG9yIHJldHVybnMgdGhlIG9uZSB0aGF0IGlzIGFscmVhZHkgaW4K
KyAgICAvLyBwbGFjZS4KKyAgICBzdGF0aWMgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogZnJvbShT
dHJ1Y3R1cmVTdHViSW5mbyYpOworICAgIAorICAgIH5Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0KCk7
CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN1cnJlbnRTbG93UGF0aFRhcmdldChT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pIGNvbnN0OworICAgIAorICAgIHZvaWQgYWRkQWNj
ZXNzKGNvbnN0IEdldEJ5SWRBY2Nlc3MmKTsKKyAgICAKKyAgICBib29sIGlzRW1wdHkoKSBjb25z
dCB7IHJldHVybiBtX2xpc3QuaXNFbXB0eSgpOyB9CisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbGlzdC5zaXplKCk7IH0KKyAgICBib29sIGlzRnVsbCgpIGNvbnN0OworICAg
IGJvb2wgaXNBbG1vc3RGdWxsKCkgY29uc3Q7IC8vIFRydWUgaWYgYWRkaW5nIGFuIGVsZW1lbnQg
d291bGQgbWFrZSBpc0Z1bGwoKSB0cnVlLgorICAgIGNvbnN0IEdldEJ5SWRBY2Nlc3MmIGF0KHVu
c2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdFtpXTsgfQorICAgIGNvbnN0IEdldEJ5SWRB
Y2Nlc3MmIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9saXN0W2ldOyB9
CisgICAgCisgICAgYm9vbCBkaWRTZWxmUGF0Y2hpbmcoKSBjb25zdDsgLy8gQXJlIGFueSBvZiB0
aGUgYWNjZXNzZXMgU2ltcGxlSW5saW5lPworICAgIAorICAgIGJvb2wgdmlzaXRXZWFrKFZNJikg
Y29uc3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKKyAgICAKKyAg
ICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAgCisgICAg
VmVjdG9yPEdldEJ5SWRBY2Nlc3MsIDI+IG1fbGlzdDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKworI2VuZGlmIC8vIFBvbHltb3JwaGljR2V0QnlJ
ZExpc3RfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBo
aWNBY2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seW1vcnBoaWNBY2Nlc3MuaAkod29ya2luZyBjb3B5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDgg
KzIzLDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgUG9seW1vcnBoaWNHZXRC
eUlkTGlzdF9oCi0jZGVmaW5lIFBvbHltb3JwaGljR2V0QnlJZExpc3RfaAorI2lmbmRlZiBQb2x5
bW9ycGhpY0FjY2Vzc19oCisjZGVmaW5lIFBvbHltb3JwaGljQWNjZXNzX2gKIAogI2lmIEVOQUJM
RShKSVQpCiAKQEAgLTM4LDk2ICszOCwyODQgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBD
b2RlQmxvY2s7CitjbGFzcyBQb2x5bW9ycGhpY0FjY2VzczsKK2NsYXNzIFdhdGNocG9pbnRzT25T
dHJ1Y3R1cmVTdHViSW5mbzsKIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbzsKIAotY2xhc3MgR2V0
QnlJZEFjY2VzcyB7CitzdHJ1Y3QgQWNjZXNzR2VuZXJhdGlvblN0YXRlOworCitjbGFzcyBBY2Nl
c3NDYXNlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBY2Nlc3NDYXNlKTsKKyAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBlbnVtIEFjY2Vzc1R5cGUgewotICAg
ICAgICBJbnZhbGlkLAotICAgICAgICBTaW1wbGVJbmxpbmUsIC8vIFRoaXMgaXMgdGhlIHBhdGNo
ZWQgaW5saW5lIGFjY2Vzcy4KLSAgICAgICAgU2ltcGxlU3R1YiwgLy8gVGhpcyBpcyBhIHN0dWIu
Ci0gICAgICAgIFdhdGNoZWRTdHViLAorICAgICAgICBMb2FkLAorICAgICAgICBUcmFuc2l0aW9u
LAorICAgICAgICBSZXBsYWNlLAorICAgICAgICBNaXNzLAogICAgICAgICBHZXR0ZXIsCisgICAg
ICAgIFNldHRlciwKICAgICAgICAgQ3VzdG9tR2V0dGVyLAotICAgICAgICBTaW1wbGVNaXNzLAor
ICAgICAgICBDdXN0b21TZXR0ZXIsCisgICAgICAgIEluSGl0LAorICAgICAgICBJbk1pc3MsCisg
ICAgICAgIEFycmF5TGVuZ3RoLAorICAgICAgICBTdHJpbmdMZW5ndGgKICAgICB9OwotICAgIAot
ICAgIEdldEJ5SWRBY2Nlc3MoKQotICAgICAgICA6IG1fdHlwZShJbnZhbGlkKQorCisgICAgc3Rh
dGljIGJvb2wgaXNHZXQoQWNjZXNzVHlwZSB0eXBlKQogICAgIHsKKyAgICAgICAgc3dpdGNoICh0
eXBlKSB7CisgICAgICAgIGNhc2UgVHJhbnNpdGlvbjoKKyAgICAgICAgY2FzZSBSZXBsYWNlOgor
ICAgICAgICBjYXNlIFNldHRlcjoKKyAgICAgICAgY2FzZSBDdXN0b21TZXR0ZXI6CisgICAgICAg
IGNhc2UgSW5IaXQ6CisgICAgICAgIGNhc2UgSW5NaXNzOgorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBjYXNlIExvYWQ6CisgICAgICAgIGNhc2UgTWlzczoKKyAgICAgICAgY2Fz
ZSBHZXR0ZXI6CisgICAgICAgIGNhc2UgQ3VzdG9tR2V0dGVyOgorICAgICAgICBjYXNlIEFycmF5
TGVuZ3RoOgorICAgICAgICBjYXNlIFN0cmluZ0xlbmd0aDoKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CiAgICAgfQotICAgIAotICAgIEdldEJ5SWRBY2Nlc3MoCi0gICAgICAg
IFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGlu
ZT4sIFN0cnVjdHVyZSosCisKKyAgICBzdGF0aWMgYm9vbCBpc1B1dChBY2Nlc3NUeXBlIHR5cGUp
CisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBMb2FkOgorICAg
ICAgICBjYXNlIE1pc3M6CisgICAgICAgIGNhc2UgR2V0dGVyOgorICAgICAgICBjYXNlIEN1c3Rv
bUdldHRlcjoKKyAgICAgICAgY2FzZSBJbkhpdDoKKyAgICAgICAgY2FzZSBJbk1pc3M6CisgICAg
ICAgIGNhc2UgQXJyYXlMZW5ndGg6CisgICAgICAgIGNhc2UgU3RyaW5nTGVuZ3RoOgorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIFRyYW5zaXRpb246CisgICAgICAgIGNh
c2UgUmVwbGFjZToKKyAgICAgICAgY2FzZSBTZXR0ZXI6CisgICAgICAgIGNhc2UgQ3VzdG9tU2V0
dGVyOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBz
dGF0aWMgYm9vbCBpc0luKEFjY2Vzc1R5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
dHlwZSkgeworICAgICAgICBjYXNlIExvYWQ6CisgICAgICAgIGNhc2UgTWlzczoKKyAgICAgICAg
Y2FzZSBHZXR0ZXI6CisgICAgICAgIGNhc2UgQ3VzdG9tR2V0dGVyOgorICAgICAgICBjYXNlIFRy
YW5zaXRpb246CisgICAgICAgIGNhc2UgUmVwbGFjZToKKyAgICAgICAgY2FzZSBTZXR0ZXI6Cisg
ICAgICAgIGNhc2UgQ3VzdG9tU2V0dGVyOgorICAgICAgICBjYXNlIEFycmF5TGVuZ3RoOgorICAg
ICAgICBjYXNlIFN0cmluZ0xlbmd0aDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgY2FzZSBJbkhpdDoKKyAgICAgICAgY2FzZSBJbk1pc3M6CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNj
ZXNzQ2FzZT4gZ2V0KAorICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUsIFBy
b3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmUqLAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpLAorICAgICAgICBib29s
IHZpYVByb3h5ID0gZmFsc2UsCisgICAgICAgIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQg
PSBudWxscHRyLAorICAgICAgICBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYyA9IG51bGxwdHIs
CisgICAgICAgIEpTT2JqZWN0KiBjdXN0b21TbG90QmFzZSA9IG51bGxwdHIpOworCisgICAgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXBsYWNlKAorICAgICAgICBWTSYsIEpT
Q2VsbCogb3duZXIsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQp
OworCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiB0cmFuc2l0aW9uKAor
ICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBTdHJ1
Y3R1cmUqIG5ld1N0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAogICAgICAgICBjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCgpKTsKKworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gc2V0dGVyKAor
ICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUsIFN0cnVjdHVyZSosIFByb3Bl
cnR5T2Zmc2V0LAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIFB1
dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jID0gbnVsbHB0ciwKKyAgICAgICAgSlNPYmplY3Qq
IGN1c3RvbVNsb3RCYXNlID0gbnVsbHB0cik7CisKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PEFjY2Vzc0Nhc2U+IGluKAorICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUs
IFN0cnVjdHVyZSogc3RydWN0dXJlLAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpKTsKKworICAgIHN0YXRpYyBz
dGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gZ2V0TGVuZ3RoKFZNJiwgSlNDZWxsKiBvd25lciwg
QWNjZXNzVHlwZSk7CiAgICAgCi0gICAgfkdldEJ5SWRBY2Nlc3MoKTsKLSAgICAKLSAgICBzdGF0
aWMgR2V0QnlJZEFjY2VzcyBmcm9tU3RydWN0dXJlU3R1YkluZm8oU3RydWN0dXJlU3R1YkluZm8m
KTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGZyb21TdHJ1Y3R1cmVT
dHViSW5mbyhWTSYsIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZVN0dWJJbmZvJik7CisKKyAgICB+
QWNjZXNzQ2FzZSgpOwogICAgIAotICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX3R5
cGUgIT0gSW52YWxpZDsgfQotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlz
U2V0KCk7IH0KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gY2xvbmUoKSBjb25zdDsK
ICAgICAKICAgICBBY2Nlc3NUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQorICAg
IGJvb2wgdmlhUHJveHkoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+
dmlhUHJveHkgOiBmYWxzZTsgfQogICAgIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29u
c3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7IH0KLSAgICAKLSAgICBjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25k
aXRpb25TZXQ7IH0KLSAgICAKLSAgICBKSVRTdHViUm91dGluZSogc3R1YlJvdXRpbmUoKSBjb25z
dAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VS
VChpc1NldCgpKTsKLSAgICAgICAgcmV0dXJuIG1fc3R1YlJvdXRpbmUuZ2V0KCk7CisgICAgICAg
IGlmIChtX3R5cGUgPT0gVHJhbnNpdGlvbikKKyAgICAgICAgICAgIHJldHVybiBtX3N0cnVjdHVy
ZS0+cHJldmlvdXNJRCgpOworICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7CisgICAg
fQorICAgIGJvb2wgZ3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2soKSBjb25zdDsKKworICAgIFN0cnVj
dHVyZSogbmV3U3RydWN0dXJlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3R5cGUg
PT0gVHJhbnNpdGlvbik7CisgICAgICAgIHJldHVybiBtX3N0cnVjdHVyZS5nZXQoKTsKICAgICB9
CiAgICAgCi0gICAgYm9vbCBkb2VzQ2FsbHMoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gR2V0
dGVyIHx8IHR5cGUoKSA9PSBDdXN0b21HZXR0ZXI7IH0KKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQor
CisgICAgV2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPmFkZGl0aW9uYWxTZXQuZ2V0KCkgOiBu
dWxscHRyOworICAgIH0KKworICAgIEpTT2JqZWN0KiBjdXN0b21TbG90QmFzZSgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPmN1c3RvbVNsb3RC
YXNlLmdldCgpIDogbnVsbHB0cjsKKyAgICB9CisKKyAgICBKU09iamVjdCogYWx0ZXJuYXRlQmFz
ZSgpIGNvbnN0OwogICAgIAotICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgY29uc3Q7CisgICAgYm9v
bCBkb2VzQ2FsbHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKCkpIHsKKyAg
ICAgICAgY2FzZSBHZXR0ZXI6CisgICAgICAgIGNhc2UgU2V0dGVyOgorICAgICAgICBjYXNlIEN1
c3RvbUdldHRlcjoKKyAgICAgICAgY2FzZSBDdXN0b21TZXR0ZXI6CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKCkgY29uc3QK
KyAgICB7CisgICAgICAgIGlmICghbV9yYXJlRGF0YSkKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICByZXR1cm4gbV9yYXJlRGF0YS0+Y2FsbExpbmtJbmZvLmdldCgpOworICAg
IH0KKworICAgIC8vIElmIHRoaXMgbWV0aG9kIHJldHVybnMgdHJ1ZSwgdGhlbiBpdCdzIGEgZ29v
ZCBpZGVhIHRvIHJlbW92ZSAnb3RoZXInIGZyb20gdGhlIGFjY2VzcyBvbmNlICd0aGlzJworICAg
IC8vIGlzIGFkZGVkLiBUaGlzIG1ldGhvZCBhc3N1bWVzIHRoYXQgaW4gY2FzZSBvZiBjb250cmFk
aWN0aW9ucywgJ3RoaXMnIHJlcHJlc2VudHMgYSBuZXdlciwgYW5kIHNvCisgICAgLy8gbW9yZSB1
c2VmdWwsIHRydXRoLiBUaGlzIG1ldGhvZCBjYW4gYmUgY29uc2VydmF0aXZlOyBpdCB3aWxsIHJl
dHVybiBmYWxzZSB3aGVuIGl0IGRvdWJ0LgorICAgIGJvb2wgY2FuUmVwbGFjZShjb25zdCBBY2Nl
c3NDYXNlJiBvdGhlcik7CiAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7
CisgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7CisgICAgZnJpZW5k
IGNsYXNzIFBvbHltb3JwaGljQWNjZXNzOworCisgICAgQWNjZXNzQ2FzZSgpOworCisgICAgYm9v
bCB2aXNpdFdlYWsoVk0mKSBjb25zdDsKKworICAgIC8vIEZhbGwgdGhyb3VnaCBvbiBzdWNjZXNz
LiBUd28ga2luZHMgb2YgZmFpbHVyZXMgYXJlIHN1cHBvcnRlZDogZmFsbC10aHJvdWdoLCB3aGlj
aCBtZWFucyB0aGF0IHdlCisgICAgLy8gc2hvdWxkIHRyeSBhIGRpZmZlcmVudCBjYXNlOyBhbmQg
ZmFpbHVyZSwgd2hpY2ggbWVhbnMgdGhhdCB0aGlzIHdhcyB0aGUgcmlnaHQgY2FzZSBidXQgaXQg
bmVlZHMKKyAgICAvLyBoZWxwIGZyb20gdGhlIHNsb3cgcGF0aC4KKyAgICB2b2lkIGdlbmVyYXRl
V2l0aEd1YXJkKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCYgZmFsbFRocm91Z2gpOworCisgICAgLy8gRmFsbCB0aHJvdWdoIG9uIHN1Y2Nlc3MsIGFkZCBh
IGp1bXAgdG8gdGhlIGZhaWx1cmUgbGlzdCBvbiBmYWlsdXJlLgorICAgIHZvaWQgZ2VuZXJhdGUo
QWNjZXNzR2VuZXJhdGlvblN0YXRlJik7CiAgICAgCiAgICAgQWNjZXNzVHlwZSBtX3R5cGU7Cisg
ICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7CisKKyAgICAvLyBVc3VhbGx5IHRoaXMgaXMgdGhl
IHN0cnVjdHVyZSB0aGF0IHdlIGV4cGVjdCB0aGUgYmFzZSBvYmplY3QgdG8gaGF2ZS4gQnV0LCB0
aGlzIGlzIHRoZSAqbmV3KgorICAgIC8vIHN0cnVjdHVyZSBmb3IgYSB0cmFuc2l0aW9uIGFuZCB3
ZSByZWx5IG9uIHRoZSBmYWN0IHRoYXQgaXQgaGFzIGEgc3Ryb25nIHJlZmVyZW5jZSB0byB0aGUg
b2xkCisgICAgLy8gc3RydWN0dXJlLiBGb3IgcHJveGllcywgdGhpcyBpcyB0aGUgc3RydWN0dXJl
IG9mIHRoZSBvYmplY3QgYmVoaW5kIHRoZSBwcm94eS4KICAgICBXcml0ZUJhcnJpZXI8U3RydWN0
dXJlPiBtX3N0cnVjdHVyZTsKKwogICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29u
ZGl0aW9uU2V0OwotICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gbV9zdHViUm91dGluZTsKKwor
ICAgIGNsYXNzIFJhcmVEYXRhIHsKKyAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Cisg
ICAgcHVibGljOgorICAgICAgICBSYXJlRGF0YSgpCisgICAgICAgICAgICA6IHZpYVByb3h5KGZh
bHNlKQorICAgICAgICB7CisgICAgICAgICAgICBjdXN0b21BY2Nlc3Nvci5vcGFxdWUgPSBudWxs
cHRyOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIHZpYVByb3h5OworICAgICAg
ICBSZWZQdHI8V2F0Y2hwb2ludFNldD4gYWRkaXRpb25hbFNldDsKKyAgICAgICAgc3RkOjp1bmlx
dWVfcHRyPENhbGxMaW5rSW5mbz4gY2FsbExpbmtJbmZvOworICAgICAgICB1bmlvbiB7CisgICAg
ICAgICAgICBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYyBnZXR0ZXI7CisgICAgICAgICAgICBQ
dXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyBzZXR0ZXI7CisgICAgICAgICAgICB2b2lkKiBv
cGFxdWU7CisgICAgICAgIH0gY3VzdG9tQWNjZXNzb3I7CisgICAgICAgIFdyaXRlQmFycmllcjxK
U09iamVjdD4gY3VzdG9tU2xvdEJhc2U7CisgICAgfTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxS
YXJlRGF0YT4gbV9yYXJlRGF0YTsKIH07CiAKLWNsYXNzIFBvbHltb3JwaGljR2V0QnlJZExpc3Qg
eworY2xhc3MgUG9seW1vcnBoaWNBY2Nlc3MgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBv
bHltb3JwaGljQWNjZXNzKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoK
LSAgICAvLyBFaXRoZXIgY3JlYXRlcyBhIG5ldyBwb2x5bW9ycGhpYyBnZXQgbGlzdCwgb3IgcmV0
dXJucyB0aGUgb25lIHRoYXQgaXMgYWxyZWFkeSBpbgotICAgIC8vIHBsYWNlLgotICAgIHN0YXRp
YyBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBmcm9tKFN0cnVjdHVyZVN0dWJJbmZvJik7Ci0gICAg
Ci0gICAgflBvbHltb3JwaGljR2V0QnlJZExpc3QoKTsKLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgY3VycmVudFNsb3dQYXRoVGFyZ2V0KFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bykgY29uc3Q7Ci0gICAgCi0gICAgdm9pZCBhZGRBY2Nlc3MoY29uc3QgR2V0QnlJZEFjY2VzcyYp
OworICAgIFBvbHltb3JwaGljQWNjZXNzKCk7CisgICAgflBvbHltb3JwaGljQWNjZXNzKCk7CisK
KyAgICAvLyBUaGlzIG1heSByZXR1cm4gbnVsbCwgaW4gd2hpY2ggY2FzZSB0aGUgb2xkIHN0dWIg
cm91dGluZSBpcyBsZWZ0IGludGFjdC4gVGhpcyBtZXRob2Qgd2lsbCBkbyB5b3UKKyAgICAvLyBh
IHNvbGlkIGFuZCBudWxsLWNoZWNrIHRoZSBBY2Nlc3NDYXNlLCBzbyB0aGF0IHlvdSBjYW4gZG8g
dGhpbmdzIGxpa2U6CisgICAgLy8KKyAgICAvLyBjb2RlUHRyID0gYWNjZXNzLT5yZWdlbmVyYXRl
V2l0aENhc2UoLi4uLCBBY2Nlc3NDYXNlOjpnZXQoLi4uKSkKKyAgICAvLworICAgIC8vIElmIEFj
Y2Vzc0Nhc2U6OmdldCgpIHJldHVybnMgbnVsbHB0ciwgdGhlIGFib3ZlIGNhbGwgd2lsbCBzaW1w
bHkgcmV0dXJuIG51bGwuCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJlZ2VuZXJhdGVXaXRo
Q2FzZXMoCisgICAgICAgIFZNJiwgQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBjb25z
dCBJZGVudGlmaWVyJiwgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPj4pOworCisg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJlZ2VuZXJhdGVXaXRoQ2FzZSgKKyAgICAgICAgVk0m
LCBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIGNvbnN0IElkZW50aWZpZXImLCBzdGQ6
OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4pOwogICAgIAogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0
IHsgcmV0dXJuIG1fbGlzdC5pc0VtcHR5KCk7IH0KICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9saXN0LnNpemUoKTsgfQotICAgIGJvb2wgaXNGdWxsKCkgY29uc3Q7Ci0gICAg
Ym9vbCBpc0FsbW9zdEZ1bGwoKSBjb25zdDsgLy8gVHJ1ZSBpZiBhZGRpbmcgYW4gZWxlbWVudCB3
b3VsZCBtYWtlIGlzRnVsbCgpIHRydWUuCi0gICAgY29uc3QgR2V0QnlJZEFjY2VzcyYgYXQodW5z
aWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9saXN0W2ldOyB9Ci0gICAgY29uc3QgR2V0QnlJZEFj
Y2VzcyYgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2xpc3RbaV07IH0K
LSAgICAKLSAgICBib29sIGRpZFNlbGZQYXRjaGluZygpIGNvbnN0OyAvLyBBcmUgYW55IG9mIHRo
ZSBhY2Nlc3NlcyBTaW1wbGVJbmxpbmU/Ci0gICAgCisgICAgY29uc3QgQWNjZXNzQ2FzZSYgYXQo
dW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gKm1fbGlzdFtpXTsgfQorICAgIGNvbnN0IEFjY2Vz
c0Nhc2UmIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gKm1fbGlzdFtpXTsg
fQorCisgICAgLy8gSWYgdGhpcyByZXR1cm5zIGZhbHNlIHRoZW4gd2UgYXJlIHJlcXVlc3Rpbmcg
YSByZXNldCBvZiB0aGUgb3duaW5nIFN0cnVjdHVyZVN0dWJJbmZvLgogICAgIGJvb2wgdmlzaXRX
ZWFrKFZNJikgY29uc3Q7CiAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7
CisKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEFjY2Vzc0Nhc2U7CiAgICAgZnJpZW5kIGNs
YXNzIENvZGVCbG9jazsKKyAgICBmcmllbmQgc3RydWN0IEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTsK
ICAgICAKLSAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KFN0cnVjdHVyZVN0dWJJbmZvJik7Ci0g
ICAgCi0gICAgVmVjdG9yPEdldEJ5SWRBY2Nlc3MsIDI+IG1fbGlzdDsKKyAgICB0eXBlZGVmIFZl
Y3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4sIDI+IExpc3RUeXBlOworCisgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyIHJlZ2VuZXJhdGUoCisgICAgICAgIFZNJiwgQ29kZUJsb2NrKiwg
U3RydWN0dXJlU3R1YkluZm8mLCBjb25zdCBJZGVudGlmaWVyJiwgTGlzdFR5cGUmIGNhc2VzKTsK
KworICAgIExpc3RUeXBlIG1fbGlzdDsKKyAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IG1fc3R1
YlJvdXRpbmU7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHVi
SW5mbz4gbV93YXRjaHBvaW50czsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCituYW1lc3Bh
Y2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpBY2Nlc3ND
YXNlOjpBY2Nlc3NUeXBlKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKICNlbmRpZiAvLyBFTkFC
TEUoSklUKQogCi0jZW5kaWYgLy8gUG9seW1vcnBoaWNHZXRCeUlkTGlzdF9oCisjZW5kaWYgLy8g
UG9seW1vcnBoaWNBY2Nlc3NfaAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdC5o
CShyZXZpc2lvbiAxODk1MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9s
eW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTEyICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lm
bmRlZiBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3RfaAotI2RlZmluZSBQb2x5bW9ycGhp
Y0FjY2Vzc1N0cnVjdHVyZUxpc3RfaAotCi0jaW5jbHVkZSAiSklUU3R1YlJvdXRpbmUuaCIKLSNp
bmNsdWRlICJTdHJ1Y3R1cmUuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVDaGFpbi5oIgotCi0jZGVm
aW5lIFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSA4Ci0KLW5hbWVzcGFjZSBKU0MgewotCi0v
LyAqU2lnaCosIElmIHRoZSBKSVQgaXMgZW5hYmxlZCB3ZSBuZWVkIHRvIHRyYWNrIHRoZSBzdHVi
Um91bnRpbmUgKG9mIHR5cGUgQ29kZUxvY2F0aW9uTGFiZWwpLAotLy8gSWYgdGhlIEpJVCBpcyBu
b3QgaW4gdXNlIHdlIGRvbid0IGFjdHVhbGx5IG5lZWQgdGhlIHZhcmlhYmxlICh0aGF0IHNhaWQs
IGlmIHRoZSBKSVQgaXMgbm90IGluIHVzZSB3ZSBkb24ndAotLy8gY3VyZW50bHkgYWN0dWFsbHkg
dXNlIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdHMsIHdoaWNoIHdlIHNob3VsZCkuICBB
bnl3YXksIHRoaXMgc2VlbXMgbGlrZSB0aGUgYmVzdAotLy8gc29sdXRpb24gZm9yIG5vdyAtIHdp
bGwgbmVlZCB0byBzb21ldGhpbmcgc21hcnRlciBpZi93aGVuIHdlIGFjdHVhbGx5IHdhbnQgbWl4
ZWQtbW9kZSBvcGVyYXRpb24uCi0KLSNpZiBFTkFCTEUoSklUKQotLy8gU3RydWN0dXJlIHVzZWQg
Ynkgb3BfZ2V0X2J5X2lkX3NlbGZfbGlzdCBhbmQgb3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3QgaW5z
dHJ1Y3Rpb24gdG8gaG9sZCBkYXRhIG9mZiB0aGUgbWFpbiBvcGNvZGUgc3RyZWFtLgotc3RydWN0
IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7Ci1wdWJsaWM6Ci0gICAgc3RydWN0IFBvbHltb3JwaGljU3R1YkluZm8gewotICAgICAg
ICBib29sIGlzRGlyZWN0IDogMTsKLSAgICAgICAgdW5zaWduZWQgY291bnQgOiAzMTsKLSAgICAg
ICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKLSAgICAgICAgV3JpdGVCYXJy
aWVyPFN0cnVjdHVyZT4gYmFzZTsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZUNoYWlu
PiBjaGFpbjsKLQotICAgICAgICBQb2x5bW9ycGhpY1N0dWJJbmZvKCkKLSAgICAgICAgewotICAg
ICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXQoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBQYXNzUmVm
UHRyPEpJVFN0dWJSb3V0aW5lPiBfc3R1YlJvdXRpbmUsIFN0cnVjdHVyZSogX2Jhc2UsIGJvb2wg
X2lzRGlyZWN0KQotICAgICAgICB7Ci0gICAgICAgICAgICBzdHViUm91dGluZSA9IF9zdHViUm91
dGluZTsKLSAgICAgICAgICAgIGJhc2Uuc2V0KHZtLCBvd25lciwgX2Jhc2UpOwotICAgICAgICAg
ICAgaXNEaXJlY3QgPSBfaXNEaXJlY3Q7Ci0gICAgICAgICAgICBjb3VudCA9IDA7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIHZvaWQgc2V0KFZNJiB2bSwgSlNDZWxsKiBvd25lciwgUGFz
c1JlZlB0cjxKSVRTdHViUm91dGluZT4gX3N0dWJSb3V0aW5lLCBTdHJ1Y3R1cmUqIF9iYXNlLCBT
dHJ1Y3R1cmVDaGFpbiogX2NoYWluLCBib29sIF9pc0RpcmVjdCwgdW5zaWduZWQgX2NvdW50KQot
ICAgICAgICB7Ci0gICAgICAgICAgICBzdHViUm91dGluZSA9IF9zdHViUm91dGluZTsKLSAgICAg
ICAgICAgIGJhc2Uuc2V0KHZtLCBvd25lciwgX2Jhc2UpOwotICAgICAgICAgICAgY2hhaW4uc2V0
KHZtLCBvd25lciwgX2NoYWluKTsKLSAgICAgICAgICAgIGlzRGlyZWN0ID0gX2lzRGlyZWN0Owot
ICAgICAgICAgICAgY291bnQgPSBfY291bnQ7Ci0gICAgICAgIH0KLSAgICB9IGxpc3RbUE9MWU1P
UlBISUNfTElTVF9DQUNIRV9TSVpFXTsKLSAgICAKLSAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVj
dHVyZUxpc3QoKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1
Y3R1cmVMaXN0KFZNJiB2bSwgSlNDZWxsKiBvd25lciwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGlu
ZT4gc3R1YlJvdXRpbmUsIFN0cnVjdHVyZSogZmlyc3RCYXNlLCBib29sIGlzRGlyZWN0KQotICAg
IHsKLSAgICAgICAgbGlzdFswXS5zZXQodm0sIG93bmVyLCBzdHViUm91dGluZSwgZmlyc3RCYXNl
LCBpc0RpcmVjdCk7Ci0gICAgfQotCi0gICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0
KFZNJiB2bSwgSlNDZWxsKiBvd25lciwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJv
dXRpbmUsIFN0cnVjdHVyZSogZmlyc3RCYXNlLCBTdHJ1Y3R1cmVDaGFpbiogZmlyc3RDaGFpbiwg
Ym9vbCBpc0RpcmVjdCwgdW5zaWduZWQgY291bnQpCi0gICAgewotICAgICAgICBsaXN0WzBdLnNl
dCh2bSwgb3duZXIsIHN0dWJSb3V0aW5lLCBmaXJzdEJhc2UsIGZpcnN0Q2hhaW4sIGlzRGlyZWN0
LCBjb3VudCk7Ci0gICAgfQotCi0gICAgYm9vbCB2aXNpdFdlYWsoaW50IGNvdW50KQotICAgIHsK
LSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBQ
b2x5bW9ycGhpY1N0dWJJbmZvJiBpbmZvID0gbGlzdFtpXTsKLSAgICAgICAgICAgIGlmICghaW5m
by5iYXNlKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChpbmZvLmJhc2UuZ2V0KCkpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmIChpbmZvLmNoYWluICYmICFIZWFw
Ojppc01hcmtlZChpbmZvLmNoYWluLmdldCgpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci19OwotCi0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNl
bmRpZiAvLyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3RfaAotCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJ
ZExpc3QuY3BwCShyZXZpc2lvbiAxODk1MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTU1
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBvbHltb3JwaGljR2V0QnlJZExp
c3QuaCIKLQotI2lmIEVOQUJMRShKSVQpCi0KLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNs
dWRlICJIZWFwLmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVy
ZVN0dWJJbmZvLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1HZXRCeUlkQWNjZXNzOjpHZXRCeUlk
QWNjZXNzKAotICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBQYXNz
UmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSwKLSAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkKLSAg
ICA6IG1fdHlwZSh0eXBlKQotICAgICwgbV9zdHJ1Y3R1cmUodm0sIG93bmVyLCBzdHJ1Y3R1cmUp
Ci0gICAgLCBtX2NvbmRpdGlvblNldChjb25kaXRpb25TZXQpCi0gICAgLCBtX3N0dWJSb3V0aW5l
KHN0dWJSb3V0aW5lKQotewotfQotCi1HZXRCeUlkQWNjZXNzOjp+R2V0QnlJZEFjY2VzcygpCi17
Ci19Ci0KLUdldEJ5SWRBY2Nlc3MgR2V0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZv
KFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgaW5pdGlhbFNsb3dQYXRoID0KLSAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSk7Ci0gICAg
Ci0gICAgR2V0QnlJZEFjY2VzcyByZXN1bHQ7Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NFUlQoc3R1
YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYpOwotICAgIAotICAgIHJl
c3VsdC5tX3R5cGUgPSBTaW1wbGVJbmxpbmU7Ci0gICAgcmVzdWx0Lm1fc3RydWN0dXJlLmNvcHlG
cm9tKHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZSk7Ci0gICAgcmVz
dWx0Lm1fc3R1YlJvdXRpbmUgPSBKSVRTdHViUm91dGluZTo6Y3JlYXRlU2VsZk1hbmFnZWRSb3V0
aW5lKGluaXRpYWxTbG93UGF0aCk7Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9v
bCBHZXRCeUlkQWNjZXNzOjp2aXNpdFdlYWsoVk0mIHZtKSBjb25zdAotewotICAgIGlmIChtX3N0
cnVjdHVyZSAmJiAhSGVhcDo6aXNNYXJrZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFtX2NvbmRpdGlvblNldC5hcmVTdGlsbExpdmUoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghbV9zdHViUm91dGluZS0+dmlzaXRXZWFrKHZt
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1Qb2x5bW9y
cGhpY0dldEJ5SWRMaXN0OjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbykKLXsKLSAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5z
ZXQpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBtX2xpc3QuYXBwZW5kKEdldEJ5SWRBY2Nl
c3M6OmZyb21TdHJ1Y3R1cmVTdHViSW5mbyhzdHViSW5mbykpOwotfQotCi1Qb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0KiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojpmcm9tKFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbykKLXsKLSAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0
X2J5X2lkX2xpc3QpCi0gICAgICAgIHJldHVybiBzdHViSW5mby51LmdldEJ5SWRMaXN0Lmxpc3Q7
Ci0gICAgCi0gICAgQVNTRVJUKAotICAgICAgICBzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vz
c19nZXRfYnlfaWRfc2VsZgotICAgICAgICB8fCBzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vz
c191bnNldCk7Ci0gICAgCi0gICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogcmVzdWx0ID0gbmV3
IFBvbHltb3JwaGljR2V0QnlJZExpc3Qoc3R1YkluZm8pOwotICAgIAotICAgIHN0dWJJbmZvLmlu
aXRHZXRCeUlkTGlzdChyZXN1bHQpOwotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVBv
bHltb3JwaGljR2V0QnlJZExpc3Q6On5Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0KCkgeyB9Ci0KLU1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpjdXJyZW50U2xvd1Bh
dGhUYXJnZXQoCi0gICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKSBjb25zdAotewotICAg
IGlmIChpc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKLSAg
ICByZXR1cm4gbV9saXN0Lmxhc3QoKS5zdHViUm91dGluZSgpLT5jb2RlKCkuY29kZSgpOwotfQot
Ci12b2lkIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmFkZEFjY2Vzcyhjb25zdCBHZXRCeUlkQWNj
ZXNzJiBhY2Nlc3MpCi17Ci0gICAgQVNTRVJUKCFpc0Z1bGwoKSk7Ci0gICAgLy8gTWFrZSBzdXJl
IHRoYXQgdGhlIHJlc2l6aW5nIG9wdGltaXplcyBmb3Igc3BhY2UsIG5vdCB0aW1lLgotICAgIG1f
bGlzdC5yZXNpemVUb0ZpdChtX2xpc3Quc2l6ZSgpICsgMSk7Ci0gICAgbV9saXN0Lmxhc3QoKSA9
IGFjY2VzczsKLX0KLQotYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojppc0Z1bGwoKSBjb25z
dAotewotICAgIEFTU0VSVChzaXplKCkgPD0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKTsK
LSAgICByZXR1cm4gc2l6ZSgpID09IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRTsKLX0KLQot
Ym9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojppc0FsbW9zdEZ1bGwoKSBjb25zdAotewotICAg
IEFTU0VSVChzaXplKCkgPD0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKTsKLSAgICByZXR1
cm4gc2l6ZSgpID49IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDE7Ci19Ci0KLWJvb2wg
UG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6ZGlkU2VsZlBhdGNoaW5nKCkgY29uc3QKLXsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSBzaXplKCk7IGktLTspIHsKLSAgICAgICAgaWYgKGF0KGkpLnR5cGUo
KSA9PSBHZXRCeUlkQWNjZXNzOjpTaW1wbGVJbmxpbmUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFBvbHltb3JwaGljR2V0QnlJ
ZExpc3Q6OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0Ci17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
c2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIGlmICghYXQoaSkudmlzaXRXZWFrKHZtKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQotCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRM
aXN0LmgJKHJldmlzaW9uIDE4OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTMzICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQot
I2lmbmRlZiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0X2gKLSNkZWZpbmUgUG9seW1vcnBoaWNHZXRC
eUlkTGlzdF9oCi0KLSNpZiBFTkFCTEUoSklUKQotCi0jaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgot
I2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCi0jaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQuaCIKLSNpbmNsdWRlICJPcGNvZGUuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIK
LSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBDb2Rl
QmxvY2s7Ci1zdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm87Ci0KLWNsYXNzIEdldEJ5SWRBY2Nlc3Mg
ewotcHVibGljOgotICAgIGVudW0gQWNjZXNzVHlwZSB7Ci0gICAgICAgIEludmFsaWQsCi0gICAg
ICAgIFNpbXBsZUlubGluZSwgLy8gVGhpcyBpcyB0aGUgcGF0Y2hlZCBpbmxpbmUgYWNjZXNzLgot
ICAgICAgICBTaW1wbGVTdHViLCAvLyBUaGlzIGlzIGEgc3R1Yi4KLSAgICAgICAgV2F0Y2hlZFN0
dWIsCi0gICAgICAgIEdldHRlciwKLSAgICAgICAgQ3VzdG9tR2V0dGVyLAotICAgICAgICBTaW1w
bGVNaXNzLAotICAgIH07Ci0gICAgCi0gICAgR2V0QnlJZEFjY2VzcygpCi0gICAgICAgIDogbV90
eXBlKEludmFsaWQpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBHZXRCeUlkQWNjZXNzKAotICAg
ICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUsIFBhc3NSZWZQdHI8SklUU3R1YlJv
dXRpbmU+LCBTdHJ1Y3R1cmUqLAotICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpKTsKLSAgICAKLSAgICB+R2V0QnlJ
ZEFjY2VzcygpOwotICAgIAotICAgIHN0YXRpYyBHZXRCeUlkQWNjZXNzIGZyb21TdHJ1Y3R1cmVT
dHViSW5mbyhTdHJ1Y3R1cmVTdHViSW5mbyYpOwotICAgIAotICAgIGJvb2wgaXNTZXQoKSBjb25z
dCB7IHJldHVybiBtX3R5cGUgIT0gSW52YWxpZDsgfQotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29u
c3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KLSAgICAKLSAgICBBY2Nlc3NUeXBlIHR5cGUoKSBjb25z
dCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlLmdldCgpOyB9Ci0gICAgCi0gICAgY29uc3QgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29u
ZGl0aW9uU2V0OyB9Ci0gICAgCi0gICAgSklUU3R1YlJvdXRpbmUqIHN0dWJSb3V0aW5lKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc1NldCgpKTsKLSAgICAgICAgcmV0dXJuIG1fc3R1
YlJvdXRpbmUuZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgZG9lc0NhbGxzKCkgY29uc3Qg
eyByZXR1cm4gdHlwZSgpID09IEdldHRlciB8fCB0eXBlKCkgPT0gQ3VzdG9tR2V0dGVyOyB9Ci0g
ICAgCi0gICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBmcmll
bmQgY2xhc3MgQ29kZUJsb2NrOwotICAgIAotICAgIEFjY2Vzc1R5cGUgbV90eXBlOwotICAgIFdy
aXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOwotICAgIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OwotICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gbV9z
dHViUm91dGluZTsKLX07Ci0KLWNsYXNzIFBvbHltb3JwaGljR2V0QnlJZExpc3QgewotICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIC8vIEVpdGhlciBjcmVhdGVzIGEg
bmV3IHBvbHltb3JwaGljIGdldCBsaXN0LCBvciByZXR1cm5zIHRoZSBvbmUgdGhhdCBpcyBhbHJl
YWR5IGluCi0gICAgLy8gcGxhY2UuCi0gICAgc3RhdGljIFBvbHltb3JwaGljR2V0QnlJZExpc3Qq
IGZyb20oU3RydWN0dXJlU3R1YkluZm8mKTsKLSAgICAKLSAgICB+UG9seW1vcnBoaWNHZXRCeUlk
TGlzdCgpOwotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdXJyZW50U2xvd1BhdGhU
YXJnZXQoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKSBjb25zdDsKLSAgICAKLSAgICB2b2lk
IGFkZEFjY2Vzcyhjb25zdCBHZXRCeUlkQWNjZXNzJik7Ci0gICAgCi0gICAgYm9vbCBpc0VtcHR5
KCkgY29uc3QgeyByZXR1cm4gbV9saXN0LmlzRW1wdHkoKTsgfQotICAgIHVuc2lnbmVkIHNpemUo
KSBjb25zdCB7IHJldHVybiBtX2xpc3Quc2l6ZSgpOyB9Ci0gICAgYm9vbCBpc0Z1bGwoKSBjb25z
dDsKLSAgICBib29sIGlzQWxtb3N0RnVsbCgpIGNvbnN0OyAvLyBUcnVlIGlmIGFkZGluZyBhbiBl
bGVtZW50IHdvdWxkIG1ha2UgaXNGdWxsKCkgdHJ1ZS4KLSAgICBjb25zdCBHZXRCeUlkQWNjZXNz
JiBhdCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2xpc3RbaV07IH0KLSAgICBjb25zdCBH
ZXRCeUlkQWNjZXNzJiBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbGlz
dFtpXTsgfQotICAgIAotICAgIGJvb2wgZGlkU2VsZlBhdGNoaW5nKCkgY29uc3Q7IC8vIEFyZSBh
bnkgb2YgdGhlIGFjY2Vzc2VzIFNpbXBsZUlubGluZT8KLSAgICAKLSAgICBib29sIHZpc2l0V2Vh
ayhWTSYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7Ci0g
ICAgCi0gICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyYpOwotICAg
IAotICAgIFZlY3RvcjxHZXRCeUlkQWNjZXNzLCAyPiBtX2xpc3Q7Ci19OwotCi19IC8vIG5hbWVz
cGFjZSBKU0MKLQotI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0KLSNlbmRpZiAvLyBQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0X2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Bv
bHltb3JwaGljUHV0QnlJZExpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcAkocmV2aXNpb24gMTg5NTE1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExp
c3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE1NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEyLCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgiCi0KLSNpZiBFTkFCTEUo
SklUKQotCi0jaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKLQotbmFtZXNwYWNlIEpTQyB7
Ci0KLVB1dEJ5SWRBY2Nlc3MgUHV0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIg
aW5pdGlhbFNsb3dQYXRoID0KLSAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxh
YmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSk7Ci0gICAgCi0g
ICAgUHV0QnlJZEFjY2VzcyByZXN1bHQ7Ci0gICAgCi0gICAgc3dpdGNoIChzdHViSW5mby5hY2Nl
c3NUeXBlKSB7Ci0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2U6Ci0gICAgICAgIHJl
c3VsdC5tX3R5cGUgPSBSZXBsYWNlOwotICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuY29w
eUZyb20oc3R1YkluZm8udS5wdXRCeUlkUmVwbGFjZS5iYXNlT2JqZWN0U3RydWN0dXJlKTsKLSAg
ICAgICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBKSVRTdHViUm91dGluZTo6Y3JlYXRlU2VsZk1h
bmFnZWRSb3V0aW5lKGluaXRpYWxTbG93UGF0aCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAK
LSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6Ci0gICAgY2FzZSBh
Y2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgotICAgICAgICByZXN1bHQubV90eXBl
ID0gVHJhbnNpdGlvbjsKLSAgICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlLmNvcHlGcm9tKHN0
dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUpOwotICAgICAgICBy
ZXN1bHQubV9uZXdTdHJ1Y3R1cmUuY29weUZyb20oc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlv
bi5zdHJ1Y3R1cmUpOwotICAgICAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldDo6YWRvcHRSYXdQb2ludGVyKAotICAgICAgICAgICAgc3R1YkluZm8u
dS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQpOwotICAgICAgICByZXN1bHQubV9z
dHViUm91dGluZSA9IHN0dWJJbmZvLnN0dWJSb3V0aW5lOwotICAgICAgICBicmVhazsKLSAgICAg
ICAgCi0gICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBQdXRCeUlkQWNjZXNz
Ojp2aXNpdFdlYWsoVk0mIHZtKSBjb25zdAotewotICAgIGlmICghbV9jb25kaXRpb25TZXQuYXJl
U3RpbGxMaXZlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBzd2l0Y2ggKG1f
dHlwZSkgewotICAgIGNhc2UgUmVwbGFjZToKLSAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZCht
X29sZFN0cnVjdHVyZS5nZXQoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgVHJhbnNpdGlvbjoKLSAgICAgICAgaWYgKCFIZWFwOjppc01hcmtl
ZChtX29sZFN0cnVjdHVyZS5nZXQoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIGlmICghSGVhcDo6aXNNYXJrZWQobV9uZXdTdHJ1Y3R1cmUuZ2V0KCkpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNldHRlcjoKLSAgICBj
YXNlIEN1c3RvbVNldHRlcjoKLSAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX29sZFN0cnVj
dHVyZS5nZXQoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKCFtX3N0dWJSb3V0aW5lLT52aXNpdFdl
YWsodm0pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVBv
bHltb3JwaGljUHV0QnlJZExpc3Q6OlBvbHltb3JwaGljUHV0QnlJZExpc3QoCi0gICAgUHV0S2lu
ZCBwdXRLaW5kLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi0gICAgOiBtX2tpbmQocHV0
S2luZCkKLXsKLSAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSAhPSBhY2Nlc3NfdW5zZXQpCi0g
ICAgICAgIG1fbGlzdC5hcHBlbmQoUHV0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZv
KHN0dWJJbmZvKSk7Ci19Ci0KLVBvbHltb3JwaGljUHV0QnlJZExpc3QqIFBvbHltb3JwaGljUHV0
QnlJZExpc3Q6OmZyb20oCi0gICAgUHV0S2luZCBwdXRLaW5kLCBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8pCi17Ci0gICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3B1dF9i
eV9pZF9saXN0KQotICAgICAgICByZXR1cm4gc3R1YkluZm8udS5wdXRCeUlkTGlzdC5saXN0Owot
ICAgIAotICAgIEFTU0VSVChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19wdXRfYnlfaWRf
cmVwbGFjZQotICAgICAgICB8fCBzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19wdXRfYnlf
aWRfdHJhbnNpdGlvbl9ub3JtYWwKLSAgICAgICAgfHwgc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBh
Y2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0Ci0gICAgICAgIHx8IHN0dWJJbmZvLmFj
Y2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0KTsKLSAgICAKLSAgICBQb2x5bW9ycGhpY1B1dEJ5SWRM
aXN0KiByZXN1bHQgPQotICAgICAgICBuZXcgUG9seW1vcnBoaWNQdXRCeUlkTGlzdChwdXRLaW5k
LCBzdHViSW5mbyk7Ci0gICAgCi0gICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRMaXN0KHJlc3VsdCk7
Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6
flBvbHltb3JwaGljUHV0QnlJZExpc3QoKSB7IH0KLQotYm9vbCBQb2x5bW9ycGhpY1B1dEJ5SWRM
aXN0Ojppc0Z1bGwoKSBjb25zdAotewotICAgIEFTU0VSVChzaXplKCkgPD0gUE9MWU1PUlBISUNf
TElTVF9DQUNIRV9TSVpFKTsKLSAgICByZXR1cm4gc2l6ZSgpID09IFBPTFlNT1JQSElDX0xJU1Rf
Q0FDSEVfU0laRTsKLX0KLQotYm9vbCBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojppc0FsbW9zdEZ1
bGwoKSBjb25zdAotewotICAgIEFTU0VSVChzaXplKCkgPD0gUE9MWU1PUlBISUNfTElTVF9DQUNI
RV9TSVpFKTsKLSAgICByZXR1cm4gc2l6ZSgpID49IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0la
RSAtIDE7Ci19Ci0KLXZvaWQgUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6YWRkQWNjZXNzKGNvbnN0
IFB1dEJ5SWRBY2Nlc3MmIHB1dEJ5SWRBY2Nlc3MpCi17Ci0gICAgQVNTRVJUKCFpc0Z1bGwoKSk7
Ci0gICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHJlc2l6aW5nIG9wdGltaXplcyBmb3Igc3BhY2Us
IG5vdCB0aW1lLgotICAgIG1fbGlzdC5yZXNpemVUb0ZpdChtX2xpc3Quc2l6ZSgpICsgMSk7Ci0g
ICAgbV9saXN0Lmxhc3QoKSA9IHB1dEJ5SWRBY2Nlc3M7Ci19Ci0KLWJvb2wgUG9seW1vcnBoaWNQ
dXRCeUlkTGlzdDo6dmlzaXRXZWFrKFZNJiB2bSkgY29uc3QKLXsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKCFhdChpKS52aXNpdFdlYWso
dm0pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQ
dXRCeUlkTGlzdC5oCShyZXZpc2lvbiAxODk1MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIx
NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0LCAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNpZm5kZWYgUG9seW1vcnBoaWNQdXRCeUlkTGlzdF9oCi0jZGVmaW5lIFBv
bHltb3JwaGljUHV0QnlJZExpc3RfaAotCi0jaWYgRU5BQkxFKEpJVCkKLQotI2luY2x1ZGUgIkNv
ZGVPcmlnaW4uaCIKLSNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgotI2luY2x1ZGUgIk9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiCi0jaW5jbHVkZSAiT3Bjb2RlLmgiCi0jaW5jbHVkZSAi
UHV0S2luZC5oIgotI2luY2x1ZGUgIlB1dFByb3BlcnR5U2xvdC5oIgotI2luY2x1ZGUgIlN0cnVj
dHVyZS5oIgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNs
YXNzIENvZGVCbG9jazsKLXN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbzsKLQotY2xhc3MgUHV0QnlJ
ZEFjY2VzcyB7Ci1wdWJsaWM6Ci0gICAgZW51bSBBY2Nlc3NUeXBlIHsKLSAgICAgICAgSW52YWxp
ZCwKLSAgICAgICAgVHJhbnNpdGlvbiwKLSAgICAgICAgUmVwbGFjZSwKLSAgICAgICAgU2V0dGVy
LAotICAgICAgICBDdXN0b21TZXR0ZXIKLSAgICB9OwotICAgIAotICAgIFB1dEJ5SWRBY2Nlc3Mo
KQotICAgICAgICA6IG1fdHlwZShJbnZhbGlkKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgc3Rh
dGljIFB1dEJ5SWRBY2Nlc3MgdHJhbnNpdGlvbigKLSAgICAgICAgVk0mIHZtLAotICAgICAgICBK
U0NlbGwqIG93bmVyLAotICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwKLSAgICAgICAg
U3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsCi0gICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCi0gICAgICAgIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRp
bmU+IHN0dWJSb3V0aW5lKQotICAgIHsKLSAgICAgICAgUHV0QnlJZEFjY2VzcyByZXN1bHQ7Ci0g
ICAgICAgIHJlc3VsdC5tX3R5cGUgPSBUcmFuc2l0aW9uOwotICAgICAgICByZXN1bHQubV9vbGRT
dHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgb2xkU3RydWN0dXJlKTsKLSAgICAgICAgcmVzdWx0Lm1f
bmV3U3RydWN0dXJlLnNldCh2bSwgb3duZXIsIG5ld1N0cnVjdHVyZSk7Ci0gICAgICAgIHJlc3Vs
dC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKLSAgICAgICAgcmVzdWx0Lm1fY3VzdG9t
U2V0dGVyID0gMDsKLSAgICAgICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBzdHViUm91dGluZTsK
LSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBzdGF0aWMgUHV0QnlJZEFjY2Vz
cyByZXBsYWNlKAotICAgICAgICBWTSYgdm0sCi0gICAgICAgIEpTQ2VsbCogb3duZXIsCi0gICAg
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLAotICAgICAgICBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0
aW5lPiBzdHViUm91dGluZSkKLSAgICB7Ci0gICAgICAgIFB1dEJ5SWRBY2Nlc3MgcmVzdWx0Owot
ICAgICAgICByZXN1bHQubV90eXBlID0gUmVwbGFjZTsKLSAgICAgICAgcmVzdWx0Lm1fb2xkU3Ry
dWN0dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHJlc3VsdC5tX2N1c3Rv
bVNldHRlciA9IDA7Ci0gICAgICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gc3R1YlJvdXRpbmU7
Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0KLSAgICBzdGF0aWMgUHV0QnlJZEFj
Y2VzcyBzZXR0ZXIoCi0gICAgICAgIFZNJiB2bSwKLSAgICAgICAgSlNDZWxsKiBvd25lciwKLSAg
ICAgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlLAotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwKLSAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNl
dCwKLSAgICAgICAgUHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmMgY3VzdG9tU2V0dGVyLAot
ICAgICAgICBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSkKLSAgICB7Ci0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGFjY2Vzc1R5cGUgPT0gU2V0dGVyIHx8IGFjY2Vzc1R5cGUg
PT0gQ3VzdG9tU2V0dGVyKTsKLSAgICAgICAgUHV0QnlJZEFjY2VzcyByZXN1bHQ7Ci0gICAgICAg
IHJlc3VsdC5tX29sZFN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOwotICAgICAg
ICByZXN1bHQubV90eXBlID0gYWNjZXNzVHlwZTsKLSAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9u
U2V0ID0gY29uZGl0aW9uU2V0OwotICAgICAgICByZXN1bHQubV9jdXN0b21TZXR0ZXIgPSBjdXN0
b21TZXR0ZXI7Ci0gICAgICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gc3R1YlJvdXRpbmU7Ci0g
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyBQdXRCeUlkQWNj
ZXNzIGZyb21TdHJ1Y3R1cmVTdHViSW5mbyhTdHJ1Y3R1cmVTdHViSW5mbyYpOwotICAgIAotICAg
IGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgIT0gSW52YWxpZDsgfQotICAgIGJv
b2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KLSAgICAKLSAgICBBY2Nl
c3NUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICAKLSAgICBib29sIGlz
VHJhbnNpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBUcmFuc2l0aW9uOyB9Ci0gICAg
Ym9vbCBpc1JlcGxhY2UoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gUmVwbGFjZTsgfQotICAg
IGJvb2wgaXNTZXR0ZXIoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gU2V0dGVyOyB9Ci0gICAg
Ym9vbCBpc0N1c3RvbSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBDdXN0b21TZXR0ZXI7IH0K
LSAgICAKLSAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSgpIGNvbnN0Ci0gICAgewotICAgICAg
ICAvLyBVc2luZyB0aGlzIGluc3RlYWQgb2YgaXNTZXQoKSB0byBtYWtlIHRoaXMgYXNzZXJ0aW9u
IHJvYnVzdCBhZ2FpbnN0IHRoZSBwb3NzaWJpbGl0eQotICAgICAgICAvLyBvZiBhZGRpdGlvbmFs
IGFjY2VzcyB0eXBlcyBiZWluZyBhZGRlZC4KLSAgICAgICAgQVNTRVJUKGlzVHJhbnNpdGlvbigp
IHx8IGlzUmVwbGFjZSgpIHx8IGlzU2V0dGVyKCkgfHwgaXNDdXN0b20oKSk7Ci0gICAgICAgIAot
ICAgICAgICByZXR1cm4gbV9vbGRTdHJ1Y3R1cmUuZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc1JlcGxh
Y2UoKSB8fCBpc1NldHRlcigpIHx8IGlzQ3VzdG9tKCkpOwotICAgICAgICByZXR1cm4gbV9vbGRT
dHJ1Y3R1cmUuZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJl
KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc1RyYW5zaXRpb24oKSk7Ci0gICAgICAg
IHJldHVybiBtX25ld1N0cnVjdHVyZS5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y29uZGl0aW9uU2V0OyB9Ci0gICAgCi0gICAgSklUU3R1YlJvdXRpbmUqIHN0dWJSb3V0aW5lKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc1RyYW5zaXRpb24oKSB8fCBpc1JlcGxhY2Uo
KSB8fCBpc1NldHRlcigpIHx8IGlzQ3VzdG9tKCkpOwotICAgICAgICByZXR1cm4gbV9zdHViUm91
dGluZS5nZXQoKTsKLSAgICB9Ci0KLSAgICBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyBj
dXN0b21TZXR0ZXIoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzQ3VzdG9tKCkpOwot
ICAgICAgICByZXR1cm4gbV9jdXN0b21TZXR0ZXI7Ci0gICAgfQotCi0gICAgYm9vbCB2aXNpdFdl
YWsoVk0mKSBjb25zdDsKLSAgICAKLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIENvZGVCbG9j
azsKLSAgICAKLSAgICBBY2Nlc3NUeXBlIG1fdHlwZTsKLSAgICBXcml0ZUJhcnJpZXI8U3RydWN0
dXJlPiBtX29sZFN0cnVjdHVyZTsKLSAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX25ld1N0
cnVjdHVyZTsKLSAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsK
LSAgICBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyBtX2N1c3RvbVNldHRlcjsKLSAgICBS
ZWZQdHI8SklUU3R1YlJvdXRpbmU+IG1fc3R1YlJvdXRpbmU7Ci19OwotCi1jbGFzcyBQb2x5bW9y
cGhpY1B1dEJ5SWRMaXN0IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoK
LSAgICAvLyBFaXRoZXIgY3JlYXRlcyBhIG5ldyBwb2x5bW9ycGhpYyBwdXQgbGlzdCwgb3IgcmV0
dXJucyB0aGUgb25lIHRoYXQgaXMgYWxyZWFkeQotICAgIC8vIGluIHBsYWNlLgotICAgIHN0YXRp
YyBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiBmcm9tKFB1dEtpbmQsIFN0cnVjdHVyZVN0dWJJbmZv
Jik7Ci0gICAgCi0gICAgflBvbHltb3JwaGljUHV0QnlJZExpc3QoKTsKLSAgICAKLSAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHIgY3VycmVudFNsb3dQYXRoVGFyZ2V0KCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBtX2xpc3QubGFzdCgpLnN0dWJSb3V0aW5lKCktPmNvZGUoKS5jb2RlKCk7
Ci0gICAgfQotICAgIAotICAgIHZvaWQgYWRkQWNjZXNzKGNvbnN0IFB1dEJ5SWRBY2Nlc3MmKTsK
LSAgICAKLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2xpc3QuaXNFbXB0eSgp
OyB9Ci0gICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5zaXplKCk7IH0K
LSAgICBib29sIGlzRnVsbCgpIGNvbnN0OwotICAgIGJvb2wgaXNBbG1vc3RGdWxsKCkgY29uc3Q7
IC8vIFRydWUgaWYgYWRkaW5nIGFuIGVsZW1lbnQgd291bGQgbWFrZSBpc0Z1bGwoKSB0cnVlLgot
ICAgIGNvbnN0IFB1dEJ5SWRBY2Nlc3MmIGF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1f
bGlzdFtpXTsgfQotICAgIGNvbnN0IFB1dEJ5SWRBY2Nlc3MmIG9wZXJhdG9yW10odW5zaWduZWQg
aSkgY29uc3QgeyByZXR1cm4gbV9saXN0W2ldOyB9Ci0gICAgCi0gICAgUHV0S2luZCBraW5kKCkg
Y29uc3QgeyByZXR1cm4gbV9raW5kOyB9Ci0gICAgCi0gICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBj
b25zdDsKLSAgICAKLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKLSAgICAK
LSAgICAvLyBJbml0aWFsaXplIGZyb20gYSBzdHViIGluZm87IHRoaXMgd2lsbCBwbGFjZSBvbmUg
ZWxlbWVudCBpbiB0aGUgbGlzdCBhbmQgaXQgd2lsbAotICAgIC8vIGJlIGNyZWF0ZWQgYnkgY29u
dmVydGluZyB0aGUgc3R1YiBpbmZvJ3MgcHV0IGJ5IGlkIGFjY2VzcyBpbmZvcm1hdGlvbiBpbnRv
IG91cgotICAgIC8vIFB1dEJ5SWRBY2Nlc3MuCi0gICAgUG9seW1vcnBoaWNQdXRCeUlkTGlzdChQ
dXRLaW5kLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwotCi0gICAgVmVjdG9yPFB1dEJ5SWRBY2Nlc3Ms
IDI+IG1fbGlzdDsKLSAgICBQdXRLaW5kIG1fa2luZDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpT
QwotCi0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQotI2VuZGlmIC8vIFBvbHltb3JwaGljUHV0QnlJ
ZExpc3RfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0
YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5SWRTdGF0dXMuY3BwCShyZXZpc2lvbiAxODk1MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEzICsy
NiwxMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIK
IAotI2luY2x1ZGUgIkFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiQ29k
ZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29tcGxleEdldFN0YXR1cy5oIgogI2luY2x1ZGUgIkxMSW50
RGF0YS5oIgogI2luY2x1ZGUgIkxvd0xldmVsSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCi0jaW5jbHVkZSAiUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oIgorI2luY2x1ZGUg
IlBvbHltb3JwaGljQWNjZXNzLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAi
U3RydWN0dXJlQ2hhaW4uaCIKICNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KQEAgLTE1NCw2NiAr
MTUzLDQzIEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICBp
ZiAoIXN0dWJJbmZvLT5zZWVuKQogICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cygpOwogICAg
IAotICAgIHN3aXRjaCAoc3R1YkluZm8tPmFjY2Vzc1R5cGUpIHsKLSAgICBjYXNlIGFjY2Vzc191
bnNldDoKKyAgICBzd2l0Y2ggKHN0dWJJbmZvLT5jYWNoZVR5cGUpIHsKKyAgICBjYXNlIENhY2hl
VHlwZTo6VW5zZXQ6CiAgICAgICAgIC8vIElmIHRoZSBKSVQgc2F3IGl0IGJ1dCBkaWRuJ3Qgb3B0
aW1pemUgaXQsIHRoZW4gYXNzdW1lIHRoYXQgdGhpcyB0YWtlcyBzbG93IHBhdGguCiAgICAgICAg
IHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgICAgICAKLSAgICBjYXNl
IGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFjZTogeworICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRCeUlk
UmVwbGFjZTogewogICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPQotICAgICAgICAgICAg
c3R1YkluZm8tPnUucHV0QnlJZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZS0+Z2V0Q29uY3Vy
cmVudGx5KHVpZCk7CisgICAgICAgICAgICBzdHViSW5mby0+dS5ieUlkU2VsZi5iYXNlT2JqZWN0
U3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKICAgICAgICAgaWYgKGlzVmFsaWRPZmZz
ZXQob2Zmc2V0KSkgewogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNl
KAotICAgICAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRSZXBsYWNlLmJhc2VPYmplY3RT
dHJ1Y3R1cmUuZ2V0KCksIG9mZnNldCk7CisgICAgICAgICAgICAgICAgc3R1YkluZm8tPnUuYnlJ
ZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgb2Zmc2V0KTsKICAgICAgICAgfQogICAg
ICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICB9CiAgICAgICAg
IAotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoKLSAgICBjYXNl
IGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6IHsKLSAgICAgICAgQVNTRVJUKHN0
dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLT50cmFuc2l0aW9u
V2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsKLSAgICAgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0ID0gCi0gICAgICAgICAgICBzdHViSW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5z
dHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOwotICAgICAgICBpZiAoaXNWYWxpZE9mZnNl
dChvZmZzZXQpKSB7Ci0gICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25k
aXRpb25TZXQgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6ZnJvbVJhd1BvaW50ZXIoCi0g
ICAgICAgICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9u
U2V0KTsKLSAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxp
ZGl0eSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1Bh
dGgpOwotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAotICAg
ICAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0
dXJlLmdldCgpLAotICAgICAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9u
LnN0cnVjdHVyZS5nZXQoKSwKLSAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQsIG9mZnNldCk7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7
Ci0gICAgfQotICAgICAgICAKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfbGlzdDogewotICAg
ICAgICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiBsaXN0ID0gc3R1YkluZm8tPnUucHV0QnlJZExp
c3QubGlzdDsKKyAgICBjYXNlIENhY2hlVHlwZTo6U3R1YjogeworICAgICAgICBQb2x5bW9ycGhp
Y0FjY2VzcyogbGlzdCA9IHN0dWJJbmZvLT51LnN0dWI7CiAgICAgICAgIAogICAgICAgICBQdXRC
eUlkU3RhdHVzIHJlc3VsdDsKICAgICAgICAgcmVzdWx0Lm1fc3RhdGUgPSBTaW1wbGU7CiAgICAg
ICAgIAogICAgICAgICBTdGF0ZSBzbG93UGF0aFN0YXRlID0gVGFrZXNTbG93UGF0aDsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSB7Ci0gICAgICAg
ICAgICBjb25zdCBQdXRCeUlkQWNjZXNzJiBhY2Nlc3MgPSBsaXN0LT5hdChpKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgc3dpdGNoIChhY2Nlc3MudHlwZSgpKSB7Ci0gICAgICAgICAgICBj
YXNlIFB1dEJ5SWRBY2Nlc3M6OlNldHRlcjoKLSAgICAgICAgICAgIGNhc2UgUHV0QnlJZEFjY2Vz
czo6Q3VzdG9tU2V0dGVyOgorICAgICAgICAgICAgY29uc3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0g
bGlzdC0+YXQoaSk7CisgICAgICAgICAgICBpZiAoYWNjZXNzLmRvZXNDYWxscygpKQogICAgICAg
ICAgICAgICAgIHNsb3dQYXRoU3RhdGUgPSBNYWtlc0NhbGxzOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBjb25zdCBQdXRCeUlkQWNj
ZXNzJiBhY2Nlc3MgPSBsaXN0LT5hdChpKTsKKyAgICAgICAgICAgIGNvbnN0IEFjY2Vzc0Nhc2Um
IGFjY2VzcyA9IGxpc3QtPmF0KGkpOworICAgICAgICAgICAgaWYgKGFjY2Vzcy52aWFQcm94eSgp
KQorICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUpOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudCB2YXJpYW50OwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBzd2l0Y2ggKGFjY2Vzcy50eXBlKCkpIHsKLSAgICAgICAgICAg
IGNhc2UgUHV0QnlJZEFjY2Vzczo6UmVwbGFjZTogeworICAgICAgICAgICAgY2FzZSBBY2Nlc3ND
YXNlOjpSZXBsYWNlOiB7CiAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBh
Y2Nlc3Muc3RydWN0dXJlKCk7CiAgICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKICAgICAgICAgICAgICAgICBpZiAo
IWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKQEAgLTIyMiw3ICsxOTgsNyBAQCBQdXRCeUlkU3RhdHVz
IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFB1dEJ5SWRBY2Nl
c3M6OlRyYW5zaXRpb246IHsKKyAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6VHJhbnNpdGlv
bjogewogICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9CiAgICAgICAgICAg
ICAgICAgICAgIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CiAg
ICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCkBAIC0yMzEsMTEgKzIw
NywxMSBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAg
ICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUpOwog
ICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKLSAg
ICAgICAgICAgICAgICAgICAgYWNjZXNzLm9sZFN0cnVjdHVyZSgpLCBhY2Nlc3MubmV3U3RydWN0
dXJlKCksIGNvbmRpdGlvblNldCwgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgYWNjZXNz
LnN0cnVjdHVyZSgpLCBhY2Nlc3MubmV3U3RydWN0dXJlKCksIGNvbmRpdGlvblNldCwgb2Zmc2V0
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGNhc2UgUHV0QnlJZEFjY2Vzczo6U2V0dGVyOiB7CisgICAgICAgICAg
ICBjYXNlIEFjY2Vzc0Nhc2U6OlNldHRlcjogewogICAgICAgICAgICAgICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gYWNjZXNzLnN0cnVjdHVyZSgpOwogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIENvbXBsZXhHZXRTdGF0dXMgY29tcGxleEdldFN0YXR1cyA9IENvbXBsZXhHZXRT
dGF0dXM6OmNvbXB1dGVGb3IoCkBAIC0yNDksMTIgKzIyNSwxMiBAQCBQdXRCeUlkU3RhdHVzIFB1
dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBjYXNlIENvbXBsZXhHZXRTdGF0dXM6OklubGluZWFibGU6IHsKLSAgICAgICAgICAg
ICAgICAgICAgQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUqIHN0dWIgPSBzdGF0aWNfY2FzdDxB
Y2Nlc3NvckNhbGxKSVRTdHViUm91dGluZSo+KAotICAgICAgICAgICAgICAgICAgICAgICAgYWNj
ZXNzLnN0dWJSb3V0aW5lKCkpOworICAgICAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNh
bGxMaW5rSW5mbyA9IGFjY2Vzcy5jYWxsTGlua0luZm8oKTsKKyAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKGNhbGxMaW5rSW5mbyk7CiAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMgPQogICAgICAgICAgICAgICAgICAgICAg
ICAgc3RkOjptYWtlX3VuaXF1ZTxDYWxsTGlua1N0YXR1cz4oCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IoCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxvY2tlciwgcHJvZmlsZWRCbG9jaywgKnN0dWItPm1fY2FsbExpbmtJbmZv
LCBjYWxsRXhpdFNpdGVEYXRhKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxv
Y2tlciwgcHJvZmlsZWRCbG9jaywgKmNhbGxMaW5rSW5mbywgY2FsbEV4aXRTaXRlRGF0YSkpOwog
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5
SWRWYXJpYW50OjpzZXR0ZXIoCiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGNv
bXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksIGNvbXBsZXhHZXRTdGF0dXMuY29uZGl0aW9uU2V0KCks
CkBAIC0yNjMsNyArMjM5LDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRl
Rm9yUwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgY2FzZSBQdXRCeUlkQWNjZXNzOjpDdXN0b21TZXR0ZXI6CisgICAg
ICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OkN1c3RvbVNldHRlcjoKICAgICAgICAgICAgICAgICBy
ZXR1cm4gUHV0QnlJZFN0YXR1cyhNYWtlc0NhbGxzKTsKIAogICAgICAgICAgICAgZGVmYXVsdDoK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmNwcAkocmV2aXNpb24gMTg5NTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCAr
MjcsNyBAQAogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAKICNpbmNsdWRlICJKU09i
amVjdC5oIgotI2luY2x1ZGUgIlBvbHltb3JwaGljR2V0QnlJZExpc3QuaCIKLSNpbmNsdWRlICJQ
b2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIK
ICNpbmNsdWRlICJSZXBhdGNoLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMzYsMzcgKzM1LDUz
IEBAIG5hbWVzcGFjZSBKU0MgewogI2lmIEVOQUJMRShKSVQpCiB2b2lkIFN0cnVjdHVyZVN0dWJJ
bmZvOjpkZXJlZigpCiB7Ci0gICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7Ci0gICAgY2FzZSBhY2Nl
c3NfZ2V0X2J5X2lkX2xpc3Q6IHsKLSAgICAgICAgZGVsZXRlIHUuZ2V0QnlJZExpc3QubGlzdDsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfbGlzdDoK
LSAgICAgICAgZGVsZXRlIHUucHV0QnlJZExpc3QubGlzdDsKKyAgICBzd2l0Y2ggKGNhY2hlVHlw
ZSkgeworICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOgorICAgICAgICBkZWxldGUgdS5zdHViOwog
ICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBhY2Nlc3NfaW5fbGlzdDogewotICAgICAgICBQb2x5
bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlcyA9IHUuaW5M
aXN0LnN0cnVjdHVyZUxpc3Q7Ci0gICAgICAgIGRlbGV0ZSBwb2x5bW9ycGhpY1N0cnVjdHVyZXM7
CisgICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0OgorICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlk
U2VsZjoKKyAgICBjYXNlIENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2U6CiAgICAgICAgIHJldHVy
bjsKICAgICB9Ci0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgot
ICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdDoKLSAgICAgICAgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmFkb3B0UmF3UG9pbnRlcih1LnB1dEJ5SWRUcmFuc2l0
aW9uLnJhd0NvbmRpdGlvblNldCk7Ci0gICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29u
ZGl0aW9uU2V0ID0gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgYWNjZXNzX2dl
dF9ieV9pZF9zZWxmOgotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlOgotICAgIGNh
c2UgYWNjZXNzX3Vuc2V0OgotICAgICAgICAvLyBUaGVzZSBpbnN0cnVjdGlvbnMgZG9uJ3QgaGF2
ZSB0byByZWxlYXNlIGFueSBhbGxvY2F0ZWQgbWVtb3J5Ci0gICAgICAgIHJldHVybjsKLSAgICBk
ZWZhdWx0OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KKwor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29k
ZVB0ciBTdHJ1Y3R1cmVTdHViSW5mbzo6YWRkQWNjZXNzQ2FzZSgKKyAgICBWTSYgdm0sIENvZGVC
bG9jayogY29kZUJsb2NrLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgc3RkOjp1bmlxdWVfcHRy
PEFjY2Vzc0Nhc2U+IGFjY2Vzc0Nhc2UpCit7CisgICAgaWYgKCFhY2Nlc3NDYXNlKQorICAgICAg
ICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7CisgICAgCisgICAgaWYgKGNhY2hlVHlw
ZSA9PSBDYWNoZVR5cGU6OlN0dWIpCisgICAgICAgIHJldHVybiB1LnN0dWItPnJlZ2VuZXJhdGVX
aXRoQ2FzZSh2bSwgY29kZUJsb2NrLCAqdGhpcywgaWRlbnQsIHN0ZDo6bW92ZShhY2Nlc3NDYXNl
KSk7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UG9seW1vcnBoaWNBY2Nlc3M+IGFjY2VzcyA9IHN0
ZDo6bWFrZV91bmlxdWU8UG9seW1vcnBoaWNBY2Nlc3M+KCk7CisgICAgCisgICAgVmVjdG9yPHN0
ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPj4gYWNjZXNzQ2FzZXM7CisgICAgCisgICAgc3RkOjp1
bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHByZXZpb3VzQ2FzZSA9CisgICAgICAgIEFjY2Vzc0Nhc2U6
OmZyb21TdHJ1Y3R1cmVTdHViSW5mbyh2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwg
KnRoaXMpOworICAgIGlmIChwcmV2aW91c0Nhc2UpCisgICAgICAgIGFjY2Vzc0Nhc2VzLmFwcGVu
ZChzdGQ6Om1vdmUocHJldmlvdXNDYXNlKSk7CisKKyAgICBhY2Nlc3NDYXNlcy5hcHBlbmQoc3Rk
Ojptb3ZlKGFjY2Vzc0Nhc2UpKTsKKworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByZXN1bHQg
PQorICAgICAgICBhY2Nlc3MtPnJlZ2VuZXJhdGVXaXRoQ2FzZXModm0sIGNvZGVCbG9jaywgKnRo
aXMsIGlkZW50LCBzdGQ6Om1vdmUoYWNjZXNzQ2FzZXMpKTsKKworICAgIGlmICghcmVzdWx0KQor
ICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7CisKKyAgICBjYWNoZVR5cGUg
PSBDYWNoZVR5cGU6OlN0dWI7CisgICAgdS5zdHViID0gYWNjZXNzLnJlbGVhc2UoKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpyZXNldChDb2RlQmxv
Y2sqIGNvZGVCbG9jaykKIHsKLSAgICBpZiAoYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpCisg
ICAgaWYgKGNhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlVuc2V0KQogICAgICAgICByZXR1cm47CiAg
ICAgCiAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgewpAQCAtNzQsNjAgKzg5LDM4IEBA
IHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnJlc2V0KENvZGVCbG9jayoKICAgICAgICAgLy8gb2Yg
dGhlIENvZGVCbG9jay4KICAgICAgICAgZGF0YUxvZygiQ2xlYXJpbmcgc3RydWN0dXJlIGNhY2hl
IChraW5kICIsIHN0YXRpY19jYXN0PGludD4oYWNjZXNzVHlwZSksICIpIGluICIsIFJhd1BvaW50
ZXIoY29kZUJsb2NrKSwgIi5cbiIpOwogICAgIH0KLSAgICAKLSAgICBpZiAoaXNHZXRCeUlkQWNj
ZXNzKHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KGFjY2Vzc1R5cGUpKSkKKworICAgIHN3aXRjaCAo
YWNjZXNzVHlwZSkgeworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0OgogICAgICAgICByZXNldEdl
dEJ5SUQoY29kZUJsb2NrLCAqdGhpcyk7Ci0gICAgZWxzZSBpZiAoaXNQdXRCeUlkQWNjZXNzKHN0
YXRpY19jYXN0PEFjY2Vzc1R5cGU+KGFjY2Vzc1R5cGUpKSkKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpQdXQ6CiAgICAgICAgIHJlc2V0UHV0QnlJRChjb2RlQmxvY2ssICp0
aGlzKTsKLSAgICBlbHNlIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNJbkFjY2VzcyhzdGF0
aWNfY2FzdDxBY2Nlc3NUeXBlPihhY2Nlc3NUeXBlKSkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEFjY2Vzc1R5cGU6OkluOgogICAgICAgICByZXNldEluKGNvZGVCbG9jaywgKnRoaXMpOwor
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgCiAgICAgZGVyZWYoKTsKLSAgICBhY2Nlc3NUeXBl
ID0gYWNjZXNzX3Vuc2V0OwotICAgIHN0dWJSb3V0aW5lID0gbnVsbHB0cjsKLSAgICB3YXRjaHBv
aW50cyA9IG51bGxwdHI7CisgICAgY2FjaGVUeXBlID0gQ2FjaGVUeXBlOjpVbnNldDsKIH0KIAog
dm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbmNlcyhDb2RlQmxvY2sqIGNv
ZGVCbG9jaykKIHsKICAgICBWTSYgdm0gPSAqY29kZUJsb2NrLT52bSgpOwotICAgIAotICAgIHN3
aXRjaCAoYWNjZXNzVHlwZSkgewotICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmOgotICAg
ICAgICBpZiAoSGVhcDo6aXNNYXJrZWQodS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJl
LmdldCgpKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBh
Y2Nlc3NfZ2V0X2J5X2lkX2xpc3Q6IHsKLSAgICAgICAgaWYgKHUuZ2V0QnlJZExpc3QubGlzdC0+
dmlzaXRXZWFrKHZtKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoKLSAgICBjYXNl
IGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6Ci0gICAgICAgIGlmIChIZWFwOjpp
c01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgpKQotICAg
ICAgICAgICAgJiYgSGVhcDo6aXNNYXJrZWQodS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUu
Z2V0KCkpCi0gICAgICAgICAgICAmJiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6ZnJvbVJh
d1BvaW50ZXIodS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQpLmFyZVN0aWxsTGl2
ZSgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIGFjY2Vz
c19wdXRfYnlfaWRfcmVwbGFjZToKLSAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKHUucHV0QnlJ
ZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSkpCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9saXN0OgotICAgICAg
ICBpZiAodS5wdXRCeUlkTGlzdC5saXN0LT52aXNpdFdlYWsodm0pKQorCisgICAgc3dpdGNoIChj
YWNoZVR5cGUpIHsKKyAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJZFNlbGY6CisgICAgY2FzZSBD
YWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOgorICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQodS5i
eUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpKSkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBhY2Nlc3NfaW5fbGlzdDogewotICAgICAgICBQb2x5
bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlcyA9IHUuaW5M
aXN0LnN0cnVjdHVyZUxpc3Q7Ci0gICAgICAgIGlmIChwb2x5bW9ycGhpY1N0cnVjdHVyZXMtPnZp
c2l0V2Vhayh1LmluTGlzdC5saXN0U2l6ZSkpCisgICAgY2FzZSBDYWNoZVR5cGU6OlN0dWI6Cisg
ICAgICAgIGlmICh1LnN0dWItPnZpc2l0V2Vhayh2bSkpCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIGJyZWFrOwotICAgIH0KICAgICBkZWZhdWx0OgotICAgICAgICAvLyBUaGUgcmVzdCBv
ZiB0aGUgaW5zdHJ1Y3Rpb25zIGRvbid0IHJlcXVpcmUgcmVmZXJlbmNlcywgc28gdGhlcmUgaXMg
bm8gbmVlZCB0bwotICAgICAgICAvLyBkbyBhbnl0aGluZy4KICAgICAgICAgcmV0dXJuOwogICAg
IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJ
bmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDE4OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICsz
Miw3IEBACiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKICNpbmNsdWRlICJPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldC5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgotI2luY2x1ZGUgIlBvbHlt
b3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdC5oIgorI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNz
LmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKICNpbmNsdWRlICJTcGlsbFJlZ2lzdGVyc01v
ZGUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKQEAgLTQyLDU3ICs0MiwyNSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogI2lmIEVOQUJMRShKSVQpCiAKLWNsYXNzIFBvbHltb3JwaGljR2V0QnlJZExp
c3Q7Ci1jbGFzcyBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0OworY2xhc3MgUG9seW1vcnBoaWNBY2Nl
c3M7CiAKLWVudW0gQWNjZXNzVHlwZSB7Ci0gICAgYWNjZXNzX2dldF9ieV9pZF9zZWxmLAotICAg
IGFjY2Vzc19nZXRfYnlfaWRfbGlzdCwKLSAgICBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25f
bm9ybWFsLAotICAgIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3QsCi0gICAgYWNj
ZXNzX3B1dF9ieV9pZF9yZXBsYWNlLAotICAgIGFjY2Vzc19wdXRfYnlfaWRfbGlzdCwKLSAgICBh
Y2Nlc3NfdW5zZXQsCi0gICAgYWNjZXNzX2luX2xpc3QKK2VudW0gY2xhc3MgQWNjZXNzVHlwZSA6
IGludDhfdCB7CisgICAgR2V0LAorICAgIFB1dCwKKyAgICBJbgogfTsKIAotaW5saW5lIGJvb2wg
aXNHZXRCeUlkQWNjZXNzKEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSkKLXsKLSAgICBzd2l0Y2ggKGFj
Y2Vzc1R5cGUpIHsKLSAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZjoKLSAgICBjYXNlIGFj
Y2Vzc19nZXRfYnlfaWRfbGlzdDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLSAgICAKLWlubGluZSBib29sIGlzUHV0
QnlJZEFjY2VzcyhBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUpCi17Ci0gICAgc3dpdGNoIChhY2Nlc3NU
eXBlKSB7Ci0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgotICAg
IGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdDoKLSAgICBjYXNlIGFjY2Vz
c19wdXRfYnlfaWRfcmVwbGFjZToKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfbGlzdDoKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLX0KLQotaW5saW5lIGJvb2wgaXNJbkFjY2VzcyhBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUp
Ci17Ci0gICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7Ci0gICAgY2FzZSBhY2Nlc3NfaW5fbGlzdDoK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLX0KK2VudW0gY2xhc3MgQ2FjaGVUeXBlIDogaW50OF90IHsKKyAgICBVbnNldCwK
KyAgICBHZXRCeUlkU2VsZiwKKyAgICBQdXRCeUlkUmVwbGFjZSwKKyAgICBTdHViCit9OwogCiBz
dHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewotICAgIFN0cnVjdHVyZVN0dWJJbmZvKCkKLSAgICAg
ICAgOiBhY2Nlc3NUeXBlKGFjY2Vzc191bnNldCkKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyhBY2Nl
c3NUeXBlIGFjY2Vzc1R5cGUpCisgICAgICAgIDogYWNjZXNzVHlwZShhY2Nlc3NUeXBlKQorICAg
ICAgICAsIGNhY2hlVHlwZShDYWNoZVR5cGU6OlVuc2V0KQogICAgICAgICAsIHNlZW4oZmFsc2Up
CiAgICAgICAgICwgcmVzZXRCeUdDKGZhbHNlKQogICAgICAgICAsIHRvb2tTbG93UGF0aChmYWxz
ZSkKQEAgLTEwMCw1MyArNjgsMzEgQEAgc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICB7
CiAgICAgfQogCi0gICAgdm9pZCBpbml0R2V0QnlJZFNlbGYoVk0mIHZtLCBKU0NlbGwqIG93bmVy
LCBTdHJ1Y3R1cmUqIGJhc2VPYmplY3RTdHJ1Y3R1cmUpCisgICAgdm9pZCBpbml0R2V0QnlJZFNl
bGYoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIGJhc2VPYmplY3RTdHJ1Y3R1cmUs
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKICAgICB7Ci0gICAgICAgIGFjY2Vzc1R5cGUgPSBhY2Nl
c3NfZ2V0X2J5X2lkX3NlbGY7Ci0KLSAgICAgICAgdS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3Ry
dWN0dXJlLnNldCh2bSwgb3duZXIsIGJhc2VPYmplY3RTdHJ1Y3R1cmUpOwotICAgIH0KKyAgICAg
ICAgY2FjaGVUeXBlID0gQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjsKIAotICAgIHZvaWQgaW5pdEdl
dEJ5SWRMaXN0KFBvbHltb3JwaGljR2V0QnlJZExpc3QqIGxpc3QpCi0gICAgewotICAgICAgICBh
Y2Nlc3NUeXBlID0gYWNjZXNzX2dldF9ieV9pZF9saXN0OwotICAgICAgICB1LmdldEJ5SWRMaXN0
Lmxpc3QgPSBsaXN0OworICAgICAgICB1LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuc2V0
KHZtLCBvd25lciwgYmFzZU9iamVjdFN0cnVjdHVyZSk7CisgICAgICAgIHUuYnlJZFNlbGYub2Zm
c2V0ID0gb2Zmc2V0OwogICAgIH0KIAotICAgIC8vIFB1dEJ5SWQqCi0KLSAgICB2b2lkIGluaXRQ
dXRCeUlkVHJhbnNpdGlvbihWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogcHJldmlv
dXNTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCBjb25kaXRpb25TZXQsIGJvb2wgaXNEaXJlY3QpCisgICAgdm9pZCBpbml0UHV0QnlJZFJl
cGxhY2UoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIGJhc2VPYmplY3RTdHJ1Y3R1
cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKICAgICB7Ci0gICAgICAgIGlmIChpc0RpcmVjdCkK
LSAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGly
ZWN0OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX3B1dF9i
eV9pZF90cmFuc2l0aW9uX25vcm1hbDsKKyAgICAgICAgY2FjaGVUeXBlID0gQ2FjaGVUeXBlOjpQ
dXRCeUlkUmVwbGFjZTsKIAotICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3Ry
dWN0dXJlLnNldCh2bSwgb3duZXIsIHByZXZpb3VzU3RydWN0dXJlKTsKLSAgICAgICAgdS5wdXRC
eUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKLSAgICAg
ICAgdS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQucmVs
ZWFzZVJhd1BvaW50ZXIoKTsKKyAgICAgICAgdS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJl
LnNldCh2bSwgb3duZXIsIGJhc2VPYmplY3RTdHJ1Y3R1cmUpOworICAgICAgICB1LmJ5SWRTZWxm
Lm9mZnNldCA9IG9mZnNldDsKICAgICB9CiAKLSAgICB2b2lkIGluaXRQdXRCeUlkUmVwbGFjZShW
TSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSkKLSAg
ICB7Ci0gICAgICAgIGFjY2Vzc1R5cGUgPSBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2U7Ci0gICAg
Ci0gICAgICAgIHUucHV0QnlJZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZS5zZXQodm0sIG93
bmVyLCBiYXNlT2JqZWN0U3RydWN0dXJlKTsKLSAgICB9Ci0gICAgICAgIAotICAgIHZvaWQgaW5p
dFB1dEJ5SWRMaXN0KFBvbHltb3JwaGljUHV0QnlJZExpc3QqIGxpc3QpCi0gICAgewotICAgICAg
ICBhY2Nlc3NUeXBlID0gYWNjZXNzX3B1dF9ieV9pZF9saXN0OwotICAgICAgICB1LnB1dEJ5SWRM
aXN0Lmxpc3QgPSBsaXN0OwotICAgIH0KLSAgICAKLSAgICB2b2lkIGluaXRJbkxpc3QoUG9seW1v
cnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBsaXN0LCBpbnQgbGlzdFNpemUpCisgICAgdm9pZCBp
bml0U3R1YihzdGQ6OnVuaXF1ZV9wdHI8UG9seW1vcnBoaWNBY2Nlc3M+IHN0dWIpCiAgICAgewot
ICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX2luX2xpc3Q7Ci0gICAgICAgIHUuaW5MaXN0LnN0
cnVjdHVyZUxpc3QgPSBsaXN0OwotICAgICAgICB1LmluTGlzdC5saXN0U2l6ZSA9IGxpc3RTaXpl
OworICAgICAgICBjYWNoZVR5cGUgPSBDYWNoZVR5cGU6OlN0dWI7CisgICAgICAgIHUuc3R1YiA9
IHN0dWIucmVsZWFzZSgpOwogICAgIH0KLSAgICAgICAgCisKKyAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgYWRkQWNjZXNzQ2FzZSgKKyAgICAgICAgVk0mLCBDb2RlQmxvY2sqLCBjb25zdCBJZGVu
dGlmaWVyJiwgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGFjY2Vzc0Nhc2UpOworCiAgICAg
dm9pZCByZXNldChDb2RlQmxvY2sqKTsKIAogICAgIHZvaWQgZGVyZWYoKTsKQEAgLTE2NSwxNSAr
MTExLDkgQEAgc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICAgICAgc2VlbiA9IHRydWU7
CiAgICAgfQogICAgICAgICAKLSAgICBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBh
ZGRXYXRjaHBvaW50KAotICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgT2JqZWN0
UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCkp
Ci0gICAgewotICAgICAgICByZXR1cm4gV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjpl
bnN1cmVSZWZlcmVuY2VBbmRBZGRXYXRjaHBvaW50KAotICAgICAgICAgICAgd2F0Y2hwb2ludHMs
IGNvZGVCbG9jaywgdGhpcywgY29uZGl0aW9uKTsKLSAgICB9Ci0gICAgCi0gICAgaW50OF90IGFj
Y2Vzc1R5cGU7Ci0gICAgYm9vbCBzZWVuIDogMTsKKyAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGU7
CisgICAgQ2FjaGVUeXBlIGNhY2hlVHlwZTsKKyAgICBib29sIHNlZW47CiAgICAgYm9vbCByZXNl
dEJ5R0MgOiAxOwogICAgIGJvb2wgdG9va1Nsb3dQYXRoIDogMTsKIApAQCAtMjAzLDM0ICsxNDMs
MTMgQEAgc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKIAogICAgIHVuaW9uIHsKICAgICAgICAg
c3RydWN0IHsKLSAgICAgICAgICAgIC8vIEl0IHdvdWxkIGJlIHVud2lzZSB0byBwdXQgYW55dGhp
bmcgaGVyZSwgYXMgaXQgd2lsbCBzdXJlbHkgYmUgb3ZlcndyaXR0ZW4uCi0gICAgICAgIH0gdW5z
ZXQ7Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVj
dHVyZT4gYmFzZU9iamVjdFN0cnVjdHVyZTsKLSAgICAgICAgfSBnZXRCeUlkU2VsZjsKLSAgICAg
ICAgc3RydWN0IHsKLSAgICAgICAgICAgIFBvbHltb3JwaGljR2V0QnlJZExpc3QqIGxpc3Q7Ci0g
ICAgICAgIH0gZ2V0QnlJZExpc3Q7Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBXcml0
ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4gcHJldmlvdXNTdHJ1Y3R1cmU7Ci0gICAgICAgICAgICBX
cml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4gc3RydWN0dXJlOwotICAgICAgICAgICAgdm9pZCog
cmF3Q29uZGl0aW9uU2V0OwotICAgICAgICB9IHB1dEJ5SWRUcmFuc2l0aW9uOwotICAgICAgICBz
dHJ1Y3QgewogICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IGJhc2VPYmpl
Y3RTdHJ1Y3R1cmU7Ci0gICAgICAgIH0gcHV0QnlJZFJlcGxhY2U7Ci0gICAgICAgIHN0cnVjdCB7
Ci0gICAgICAgICAgICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiBsaXN0OwotICAgICAgICB9IHB1
dEJ5SWRMaXN0OwotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgUG9seW1vcnBoaWNBY2Nl
c3NTdHJ1Y3R1cmVMaXN0KiBzdHJ1Y3R1cmVMaXN0OwotICAgICAgICAgICAgaW50IGxpc3RTaXpl
OwotICAgICAgICB9IGluTGlzdDsKKyAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsK
KyAgICAgICAgfSBieUlkU2VsZjsKKyAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3MqIHN0dWI7CiAg
ICAgfSB1OwogCi0gICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKICAgICBD
b2RlTG9jYXRpb25DYWxsIGNhbGxSZXR1cm5Mb2NhdGlvbjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvPiB3YXRjaHBvaW50czsKIH07CiAKIGlubGlu
ZSBDb2RlT3JpZ2luIGdldFN0cnVjdHVyZVN0dWJJbmZvQ29kZU9yaWdpbihTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3RydWN0dXJlU3R1YkluZm8pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTg5NTE1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTkzNSw3ICs5MzUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSW4oTm9kZSog
bm9kCiAgICAgCiAgICAgaWYgKEpTU3RyaW5nKiBzdHJpbmcgPSBub2RlLT5jaGlsZDEoKS0+ZHlu
YW1pY0Nhc3RDb25zdGFudDxKU1N0cmluZyo+KCkpIHsKICAgICAgICAgaWYgKHN0cmluZy0+dHJ5
R2V0VmFsdWVJbXBsKCkgJiYgc3RyaW5nLT50cnlHZXRWYWx1ZUltcGwoKS0+aXNBdG9taWMoKSkg
ewotICAgICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV9qaXQuY29kZUJs
b2NrKCktPmFkZFN0dWJJbmZvKCk7CisgICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8gPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkU3R1YkluZm8oQWNjZXNzVHlwZTo6SW4pOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAg
ICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkocmV2aXNpb24gMTg5NTE1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTM4LDcgKzUzOCw3IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygK
ICAgICAgICAgICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdXNlZFJlZ2lzdGVy
c0ZvcihyZWNvcmQpOwogICAgICAgICAgICAgICAgIEdQUlJlZyByZXN1bHQgPSByZWNvcmQubG9j
YXRpb25zWzBdLmRpcmVjdEdQUigpOwogICAgICAgICAgICAgICAgIEdQUlJlZyBvYmogPSByZWNv
cmQubG9jYXRpb25zWzFdLmRpcmVjdEdQUigpOwotICAgICAgICAgICAgICAgIFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbyA9IGNvZGVCbG9jay0+YWRkU3R1YkluZm8oKTsgCisgICAgICAgICAg
ICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gY29kZUJsb2NrLT5hZGRTdHViSW5m
byhBY2Nlc3NUeXBlOjpJbik7IAogICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5jb2RlT3JpZ2lu
ID0gY29kZU9yaWdpbjsKICAgICAgICAgICAgICAgICBzdHViSW5mby0+Y2FsbFNpdGVJbmRleCA9
IGNoZWNrSW4uY2FsbFNpdGVJbmRleCgpOwogICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRj
aC5iYXNlR1BSID0gc3RhdGljX2Nhc3Q8aW50OF90PihvYmopOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9BY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9BY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5j
cHAJKHJldmlzaW9uIDE4OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQWNjZXNz
b3JDYWxsSklUU3R1YlJvdXRpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU1ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmgi
Ci0KLSNpZiBFTkFCTEUoSklUKQotCi0jaW5jbHVkZSAiQ2FsbExpbmtJbmZvLmgiCi0KLW5hbWVz
cGFjZSBKU0MgewotCi1BY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZTo6QWNjZXNzb3JDYWxsSklU
U3R1YlJvdXRpbmUoCi0gICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBjb2RlLCBWTSYg
dm0sIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua0luZm8+IGluZm8pCi0gICAgOiBHQ0F3YXJlSklU
U3R1YlJvdXRpbmUoY29kZSwgdm0pCi0gICAgLCBtX2NhbGxMaW5rSW5mbyhXVEY6Om1vdmUoaW5m
bykpCi17Ci19Ci0KLUFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lOjp+QWNjZXNzb3JDYWxsSklU
U3R1YlJvdXRpbmUoKQotewotfQotCi1ib29sIEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lOjp2
aXNpdFdlYWsoVk0mIHZtKQotewotICAgIG1fY2FsbExpbmtJbmZvLT52aXNpdFdlYWsodm0pOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEVO
QUJMRShKSVQpCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQWNjZXNzb3JDYWxs
SklUU3R1YlJvdXRpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0FjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmgJKHJldmlzaW9uIDE4OTUxNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmVf
aAotI2RlZmluZSBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZV9oCi0KLSNpZiBFTkFCTEUoSklU
KQotCi0jaW5jbHVkZSAiR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgiCi0KLW5hbWVzcGFjZSBKU0Mg
ewotCi1jbGFzcyBDYWxsTGlua0luZm87Ci0KLS8vIEpJVCBzdHViIHJvdXRpbmUgZm9yIHVzZSBi
eSBKYXZhU2NyaXB0IGFjY2Vzc29ycy4gVGhlc2Ugd2lsbCBiZSBtYWtpbmcgYSBKUwotLy8gY2Fs
bCB0aGF0IHJlcXVpcmVzIGlubGluZSBjYWNoaW5nLiAKLQotY2xhc3MgQWNjZXNzb3JDYWxsSklU
U3R1YlJvdXRpbmUgOiBwdWJsaWMgR0NBd2FyZUpJVFN0dWJSb3V0aW5lIHsKLXB1YmxpYzoKLSAg
ICBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZSgKLSAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmJiwgVk0mLCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtJbmZvPik7Ci0gICAgCi0g
ICAgdmlydHVhbCB+QWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUoKTsKLSAgICAKLSAgICB2aXJ0
dWFsIGJvb2wgdmlzaXRXZWFrKFZNJikgb3ZlcnJpZGU7Ci0gICAgCi0gICAgc3RkOjp1bmlxdWVf
cHRyPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm87Ci19OwotCi19IC8vIG5hbWVzcGFjZSBK
U0MKLQotI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0KLSNlbmRpZiAvLyBBY2Nlc3NvckNhbGxKSVRT
dHViUm91dGluZV9oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuaAkocmV2aXNpb24gMTg5NTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTYzLDcgKzU2Myw3IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIGJyYW5jaDMyKEVxdWFsLCByZWdzLnRhZ0dQUigpLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOwogI2VuZGlmCiAgICAgfQotICAgIAor
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBKdW1wIGJyYW5jaFN0cnVjdHVyZShSZWxh
dGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgVCBsZWZ0SGFuZFNpZGUsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQogICAgIHsKQEAgLTgzMiw2ICs4MzIsMTUgQEAgcHVibGljOgogI2VuZGlmCiAgICAg
fQogCisgICAgdm9pZCBib3hCb29sZWFuUGF5bG9hZChib29sIHZhbHVlLCBHUFJSZWcgcGF5bG9h
ZEdQUikKKyAgICB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoVmFsdWVGYWxzZSArIHZhbHVlKSwgcGF5bG9hZEdQUik7CisjZWxzZQorICAgICAgICBtb3Zl
KFRydXN0ZWRJbW0zMih2YWx1ZSksIHBheWxvYWRHUFIpOworI2VuZGlmCisgICAgfQorCiAgICAg
dm9pZCBib3hCb29sZWFuKEdQUlJlZyBib29sR1BSLCBKU1ZhbHVlUmVncyBib3hlZFJlZ3MpCiAg
ICAgewogICAgICAgICBib3hCb29sZWFuUGF5bG9hZChib29sR1BSLCBib3hlZFJlZ3MucGF5bG9h
ZEdQUigpKTsKQEAgLTgzOSw2ICs4NDgsMTcgQEAgcHVibGljOgogICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSwgYm94ZWRSZWdzLnRhZ0dQUigpKTsKICNlbmRp
ZgogICAgIH0KKworICAgIHZvaWQgYm94SW50MzIoR1BSUmVnIGludEdQUiwgSlNWYWx1ZVJlZ3Mg
Ym94ZWRSZWdzKQorICAgIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBtb3ZlKGludEdQ
UiwgYm94ZWRSZWdzLmdwcigpKTsKKyAgICAgICAgb3I2NChUcnVzdGVkSW1tNjQoVGFnVHlwZU51
bWJlciksIGJveGVkUmVncy5ncHIoKSk7CisjZWxzZQorICAgICAgICBtb3ZlKGludEdQUiwgYm94
ZWRSZWdzLnBheWxvYWRHUFIoKSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkludDMyVGFnKSwgYm94ZWRSZWdzLnRhZ0dQUigpKTsKKyNlbmRpZgorICAgIH0KICAgICAKICAg
ICB2b2lkIGNhbGxFeGNlcHRpb25GdXp6KCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmgJKHJldmlzaW9uIDE4OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICBzdHJ1Y3QgSW5zdHJ1Y3Rpb247CiAgICAgc3RydWN0IE9wZXJhbmRUeXBlczsKLSAgICBzdHJ1
Y3QgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0OwogICAgIHN0cnVjdCBTaW1wbGVKdW1w
VGFibGU7CiAgICAgc3RydWN0IFN0cmluZ0p1bXBUYWJsZTsKICAgICBzdHJ1Y3QgU3RydWN0dXJl
U3R1YkluZm87CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hl
R2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTg5NTE1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTM2LDIyICszNiwyNCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogc3RhdGljIFN0cnVjdHVyZVN0
dWJJbmZvKiBnYXJiYWdlU3R1YkluZm8oKQogewotICAgIHN0YXRpYyBTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8gPSBuZXcgU3RydWN0dXJlU3R1YkluZm8oKTsKKyAgICBzdGF0aWMgU3RydWN0
dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbmV3IFN0cnVjdHVyZVN0dWJJbmZvKEFjY2Vzc1R5cGU6
OkdldCk7CiAgICAgcmV0dXJuIHN0dWJJbmZvOwogfQogCi1KSVRJbmxpbmVDYWNoZUdlbmVyYXRv
cjo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVPcmln
aW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSkKK0pJVElubGluZUNhY2hlR2Vu
ZXJhdG9yOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcigKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NU
eXBlIGFjY2Vzc1R5cGUpCiAgICAgOiBtX2NvZGVCbG9jayhjb2RlQmxvY2spCiB7Ci0gICAgbV9z
dHViSW5mbyA9IG1fY29kZUJsb2NrID8gbV9jb2RlQmxvY2stPmFkZFN0dWJJbmZvKCkgOiBnYXJi
YWdlU3R1YkluZm8oKTsKKyAgICBtX3N0dWJJbmZvID0gbV9jb2RlQmxvY2sgPyBtX2NvZGVCbG9j
ay0+YWRkU3R1YkluZm8oYWNjZXNzVHlwZSkgOiBnYXJiYWdlU3R1YkluZm8oKTsKICAgICBtX3N0
dWJJbmZvLT5jb2RlT3JpZ2luID0gY29kZU9yaWdpbjsKICAgICBtX3N0dWJJbmZvLT5jYWxsU2l0
ZUluZGV4ID0gY2FsbFNpdGU7CiB9CiAKIEpJVEJ5SWRHZW5lcmF0b3I6OkpJVEJ5SWRHZW5lcmF0
b3IoCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2Fs
bFNpdGVJbmRleCBjYWxsU2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsCi0g
ICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIFNwaWxsUmVnaXN0ZXJzTW9k
ZSBzcGlsbE1vZGUpCi0gICAgOiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcihjb2RlQmxvY2ssIGNv
ZGVPcmlnaW4sIGNhbGxTaXRlKQorICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIEFjY2Vzc1R5cGUgYWNjZXNzVHlw
ZSwKKyAgICBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgSlNWYWx1ZVJlZ3MgYmFz
ZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsCisgICAgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSkK
KyAgICA6IEpJVElubGluZUNhY2hlR2VuZXJhdG9yKGNvZGVCbG9jaywgY29kZU9yaWdpbiwgY2Fs
bFNpdGUsIGFjY2Vzc1R5cGUpCiAgICAgLCBtX2Jhc2UoYmFzZSkKICAgICAsIG1fdmFsdWUodmFs
dWUpCiB7CkBAIC0xMTQsNyArMTE2LDggQEAgdm9pZCBKSVRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0
ZUZhc3RQYXRoQwogSklUR2V0QnlJZEdlbmVyYXRvcjo6SklUR2V0QnlJZEdlbmVyYXRvcigKICAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUlu
ZGV4IGNhbGxTaXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywKICAgICBKU1Zh
bHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxs
TW9kZSkKLSAgICA6IEpJVEJ5SWRHZW5lcmF0b3IoY29kZUJsb2NrLCBjb2RlT3JpZ2luLCBjYWxs
U2l0ZSwgdXNlZFJlZ2lzdGVycywgYmFzZSwgdmFsdWUsIHNwaWxsTW9kZSkKKyAgICA6IEpJVEJ5
SWRHZW5lcmF0b3IoCisgICAgICAgIGNvZGVCbG9jaywgY29kZU9yaWdpbiwgY2FsbFNpdGUsIEFj
Y2Vzc1R5cGU6OkdldCwgdXNlZFJlZ2lzdGVycywgYmFzZSwgdmFsdWUsIHNwaWxsTW9kZSkKIHsK
ICAgICBSRUxFQVNFX0FTU0VSVChiYXNlLnBheWxvYWRHUFIoKSAhPSB2YWx1ZS50YWdHUFIoKSk7
CiB9CkBAIC0xNDAsNyArMTQzLDggQEAgSklUUHV0QnlJZEdlbmVyYXRvcjo6SklUUHV0QnlJZEdl
bmVyYXRvcgogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4s
IENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJz
LAogICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc2NyYXRj
aCwgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSwKICAgICBFQ01BTW9kZSBlY21hTW9kZSwg
UHV0S2luZCBwdXRLaW5kKQotICAgIDogSklUQnlJZEdlbmVyYXRvcihjb2RlQmxvY2ssIGNvZGVP
cmlnaW4sIGNhbGxTaXRlLCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSwgc3BpbGxNb2RlKQor
ICAgIDogSklUQnlJZEdlbmVyYXRvcigKKyAgICAgICAgY29kZUJsb2NrLCBjb2RlT3JpZ2luLCBj
YWxsU2l0ZSwgQWNjZXNzVHlwZTo6UHV0LCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSwgc3Bp
bGxNb2RlKQogICAgICwgbV9zY3JhdGNoKHNjcmF0Y2gpCiAgICAgLCBtX2VjbWFNb2RlKGVjbWFN
b2RlKQogICAgICwgbV9wdXRLaW5kKHB1dEtpbmQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCShyZXZpc2lvbiAxODk1
MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgi
CiAjaW5jbHVkZSAiUHV0S2luZC5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCisjaW5jbHVk
ZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTQxLDcgKzQy
LDcgQEAgY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3Igewog
cHJvdGVjdGVkOgogICAgIEpJVElubGluZUNhY2hlR2VuZXJhdG9yKCkgeyB9Ci0gICAgSklUSW5s
aW5lQ2FjaGVHZW5lcmF0b3IoQ29kZUJsb2NrKiwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCk7
CisgICAgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoQ29kZUJsb2NrKiwgQ29kZU9yaWdpbiwgQ2Fs
bFNpdGVJbmRleCwgQWNjZXNzVHlwZSk7CiAgICAgCiBwdWJsaWM6CiAgICAgU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvKCkgY29uc3QgeyByZXR1cm4gbV9zdHViSW5mbzsgfQpAQCAtNTYsOCAr
NTcsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgSklUQnlJZEdlbmVyYXRvcigpIHsgfQogCiAgICAgSklU
QnlJZEdlbmVyYXRvcigKLSAgICAgICAgQ29kZUJsb2NrKiwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJ
bmRleCwgY29uc3QgUmVnaXN0ZXJTZXQmLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2
YWx1ZSwKLSAgICAgICAgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSk7CisgICAgICAgIENv
ZGVCbG9jayosIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIEFjY2Vzc1R5cGUsIGNvbnN0IFJl
Z2lzdGVyU2V0JiwgSlNWYWx1ZVJlZ3MgYmFzZSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWUs
IFNwaWxsUmVnaXN0ZXJzTW9kZSBzcGlsbE1vZGUpOwogICAgIAogcHVibGljOgogICAgIHZvaWQg
cmVwb3J0U2xvd1BhdGhDYWxsKE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBzbG93UGF0aEJlZ2luLCBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxODk1MTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMsMjQg
KzE2Myw2IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGJhc2VWYWx1ZS5nZXQoZXhlYywgaWRlbnQsIHNsb3QpKTsK
IH0KIAotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkQnVpbGRM
aXN0KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVk
SlNWYWx1ZSBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotewotICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwot
Ci0gICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHVpZCk7Ci0g
ICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUpOwotCi0gICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoYmFzZSk7Ci0gICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlKTsKLSAgICBib29sIGhh
c1Jlc3VsdCA9IGJhc2VWYWx1ZS5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaWRlbnQsIHNsb3QpOwot
ICAgIAotICAgIGlmIChhY2Nlc3NUeXBlID09IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJ
bmZvLT5hY2Nlc3NUeXBlKSkKLSAgICAgICAgYnVpbGRHZXRCeUlETGlzdChleGVjLCBiYXNlVmFs
dWUsIGlkZW50LCBzbG90LCAqc3R1YkluZm8pOwotCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShoYXNSZXN1bHQ/IHNsb3QuZ2V0VmFsdWUoZXhlYywgaWRlbnQpIDoganNVbmRlZmluZWQoKSk7
Ci19Ci0KIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJZE9wdGlt
aXplKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVk
SlNWYWx1ZSBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQogewogICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOwpAQCAtMTk3LDcgKzE3OSw2IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uR2UKICAgICAgICAgc3R1YkluZm8tPnNlZW4gPSB0cnVlOwogICAgIAogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoaGFzUmVzdWx0PyBzbG90LmdldFZhbHVlKGV4ZWMsIGlk
ZW50KSA6IGpzVW5kZWZpbmVkKCkpOwotCiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uSW5PcHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZv
KiBzdHViSW5mbywgSlNDZWxsKiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCoga2V5KQpAQCAtMzk0
LDkwICszNzUsNiBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjCiAg
ICAgICAgIHN0dWJJbmZvLT5zZWVuID0gdHJ1ZTsKIH0KIAotdm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblB1dEJ5SWRTdHJpY3RCdWlsZExpc3QoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZEJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7Ci0gICAgCi0gICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0s
IHVpZCk7Ci0gICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlw
ZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpOwotCi0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRCYXNlKTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUs
IHRydWUsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKLSAgICAKLSAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VWYWx1ZS5pc0NlbGwoKSA/IGJhc2VWYWx1ZS5hc0Nl
bGwoKS0+c3RydWN0dXJlKCp2bSkgOiBudWxscHRyOyAKLSAgICBiYXNlVmFsdWUucHV0KGV4ZWMs
IGlkZW50LCB2YWx1ZSwgc2xvdCk7Ci0KLSAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2Fz
dDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGJ1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIGlkZW50LCBz
bG90LCAqc3R1YkluZm8sIE5vdERpcmVjdCk7Ci19Ci0KLXZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25QdXRCeUlkTm9uU3RyaWN0QnVpbGRMaXN0KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJl
U3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRCYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotewotICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOwotICAgIAotICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZt
LCB1aWQpOwotICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5
cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKTsKLQotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkQmFzZSk7Ci0gICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVl
LCBmYWxzZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwotCi0gICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlVmFsdWUuaXNDZWxsKCkgPyBiYXNlVmFsdWUuYXNDZWxs
KCktPnN0cnVjdHVyZSgqdm0pIDogbnVsbHB0cjsKLSAgICBiYXNlVmFsdWUucHV0KGV4ZWMsIGlk
ZW50LCB2YWx1ZSwgc2xvdCk7Ci0gICAgCi0gICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nh
c3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpKQotICAgICAgICByZXR1cm47Ci0g
ICAgCi0gICAgYnVpbGRQdXRCeUlkTGlzdChleGVjLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgaWRl
bnQsIHNsb3QsICpzdHViSW5mbywgTm90RGlyZWN0KTsKLX0KLQotdm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExpc3QoRXhlY1N0YXRlKiBleGVjLCBT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCi17Ci0g
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7Ci0gICAgCi0gICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZy
b21VaWQodm0sIHVpZCk7Ci0gICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8
QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpOwotICAgIAotICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBKU09iamVjdCogYmFzZU9i
amVjdCA9IGFzT2JqZWN0KEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSkpOwotICAgIFB1dFBy
b3BlcnR5U2xvdCBzbG90KGJhc2VPYmplY3QsIHRydWUsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRC
eUlkQ29udGV4dCgpKTsKLQotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZU9iamVjdC0+
c3RydWN0dXJlKCp2bSk7ICAgIAotICAgIGJhc2VPYmplY3QtPnB1dERpcmVjdCgqdm0sIGlkZW50
LCB2YWx1ZSwgc2xvdCk7Ci0gICAgCi0gICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8
QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpKQotICAgICAgICByZXR1cm47Ci0gICAg
Ci0gICAgYnVpbGRQdXRCeUlkTGlzdChleGVjLCBiYXNlT2JqZWN0LCBzdHJ1Y3R1cmUsIGlkZW50
LCBzbG90LCAqc3R1YkluZm8sIERpcmVjdCk7Ci19Ci0KLXZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0QnVpbGRMaXN0KEV4ZWNTdGF0ZSogZXhlYywgU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotewotICAg
IFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOwotICAgIAotICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9t
VWlkKHZtLCB1aWQpOwotICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFj
Y2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKTsKLQotICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBKU09iamVjdCogYmFzZU9iamVjdCA9
IGFzT2JqZWN0KEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSkpOwotICAgIFB1dFByb3BlcnR5
U2xvdCBzbG90KGJhc2VPYmplY3QsIGZhbHNlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENv
bnRleHQoKSk7Ci0KLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VPYmplY3QtPnN0cnVj
dHVyZSgqdm0pOyAgICAKLSAgICBiYXNlT2JqZWN0LT5wdXREaXJlY3QoKnZtLCBpZGVudCwgdmFs
dWUsIHNsb3QpOwotCi0gICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlw
ZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYnVp
bGRQdXRCeUlkTGlzdChleGVjLCBiYXNlT2JqZWN0LCBzdHJ1Y3R1cmUsIGlkZW50LCBzbG90LCAq
c3R1YkluZm8sIERpcmVjdCk7Ci19Ci0KIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWFs
bG9jYXRlU3RvcmFnZUFuZEZpbmlzaFB1dChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNl
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBFbmNvZGVkSlNW
YWx1ZSB2YWx1ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAxODk1MTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2
IEBACiAKICNpZiBFTkFCTEUoSklUKQogCi0jaW5jbHVkZSAiQWNjZXNzb3JDYWxsSklUU3R1YlJv
dXRpbmUuaCIKICNpbmNsdWRlICJCaW5hcnlTd2l0Y2guaCIKICNpbmNsdWRlICJDQ2FsbEhlbHBl
cnMuaCIKICNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCkBAIC00MCw4ICszOSw3IEBACiAjaW5j
bHVkZSAiSklUSW5saW5lcy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJK
U0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oIgotI2luY2x1
ZGUgIlBvbHltb3JwaGljUHV0QnlJZExpc3QuaCIKKyNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vz
cy5oIgogI2luY2x1ZGUgIlJlZ0V4cE1hdGNoZXNBcnJheS5oIgogI2luY2x1ZGUgIlNjcmF0Y2hS
ZWdpc3RlckFsbG9jYXRvci5oIgogI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCkBAIC05NCwx
MyArOTIsMTAgQEAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUJsb2NrKiBjb2RlQgogfQog
CiBzdGF0aWMgdm9pZCByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoCi0gICAgVk0mIHZtLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwKLSAgICBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCwgY29uc3QgRnVuY3Rpb25QdHIgJnNsb3dQYXRoRnVuY3Rpb24sCisgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsCisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBjb25zdCBGdW5jdGlvblB0
ciAmc2xvd1BhdGhGdW5jdGlvbiwKICAgICBib29sIGNvbXBhY3QpCiB7Ci0gICAgaWYgKHN0cnVj
dHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKQotICAgICAgICB2bS5yZWdpc3Rl
cldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHN0dWJJbmZvLmFkZFdh
dGNocG9pbnQoY29kZUJsb2NrKSk7Ci0gICAgCiAgICAgLy8gT25seSBvcHRpbWl6ZSBvbmNlIQog
ICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBz
bG93UGF0aEZ1bmN0aW9uKTsKIApAQCAtMTI5LDMzICsxMjQsNDQgQEAgc3RhdGljIHZvaWQgcmVw
YXRjaEJ5SWRTZWxmQWNjZXNzKAogI2VuZGlmCiB9CiAKLXN0YXRpYyB2b2lkIGNoZWNrT2JqZWN0
UHJvcGVydHlDb25kaXRpb24oCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNv
bmRpdGlvbiwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bywKLSAgICBDQ2FsbEhlbHBlcnMmIGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWls
dXJlQ2FzZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQotewotICAgIGlmIChjb25kaXRpb24uaXNXYXRj
aGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKSB7Ci0gICAgICAgIGNvbmRp
dGlvbi5vYmplY3QoKS0+c3RydWN0dXJlKCktPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KAotICAg
ICAgICAgICAgc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2ssIGNvbmRpdGlvbikpOwot
ICAgICAgICByZXR1cm47CitzdGF0aWMgdm9pZCByZXNldEdldEJ5SURDaGVja0FuZExvYWQoU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbDMy
IHN0cnVjdHVyZUxhYmVsID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMy
QXRPZmZzZXQoLShpbnRwdHJfdClzdHViSW5mby5wYXRjaC5kZWx0YUNoZWNrSW1tVG9DYWxsKTsK
KyAgICBpZiAoTWFjcm9Bc3NlbWJsZXI6OmNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNoMzJX
aXRoUGF0Y2goKSkgeworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmV2ZXJ0SnVtcFJlcGxhY2Vt
ZW50VG9QYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaCgKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpzdGFydE9mUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2hPbkFkZHJlc3Moc3RydWN0dXJl
TGFiZWwpLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoCisgICAgICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+KHN0dWJJbmZvLnBh
dGNoLmJhc2VHUFIpLAorICAgICAgICAgICAgICAgIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQzMl90Pih1bnVzZWRQb2ludGVyKSk7CiAg
ICAgfQorICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIoc3RydWN0dXJlTGFiZWwsIHN0
YXRpY19jYXN0PGludDMyX3Q+KHVudXNlZFBvaW50ZXIpKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQor
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ29tcGFjdChzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRv
TG9hZE9yU3RvcmUpLCAwKTsKKyNlbHNlCisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDb21w
YWN0KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQo
c3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSksIDApOworICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoQ29tcGFjdChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0
YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvUGF5bG9hZExv
YWRPclN0b3JlKSwgMCk7CisjZW5kaWYKK30KIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
Y29uZGl0aW9uLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChjb25k
aXRpb24uc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNo
cG9pbnQoc3RydWN0dXJlKSk7Ci0gICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIoY29uZGl0aW9uLm9iamVjdCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgZmFpbHVyZUNhc2Vz
LmFwcGVuZCgKLSAgICAgICAgaml0LmJyYW5jaFN0cnVjdHVyZSgKLSAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHNjcmF0Y2hHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHN0cnVjdHVyZSkpOwot
fQotCi1zdGF0aWMgdm9pZCBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9ucygKLSAgICBjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgc2V0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAotICAgIENDYWxsSGVscGVycyYgaml0LCBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgR1BSUmVnIHNjcmF0Y2hHUFIpCi17
Ci0gICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogc2V0
KSB7Ci0gICAgICAgIGNoZWNrT2JqZWN0UHJvcGVydHlDb25kaXRpb24oCi0gICAgICAgICAgICBj
b25kaXRpb24sIGNvZGVCbG9jaywgc3R1YkluZm8sIGppdCwgZmFpbHVyZUNhc2VzLCBzY3JhdGNo
R1BSKTsKK3N0YXRpYyB2b2lkIHJlc2V0UHV0QnlJRENoZWNrQW5kTG9hZChTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8pCit7CisgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzIgc3RydWN0dXJl
TGFiZWwgPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldCgt
KGludHB0cl90KXN0dWJJbmZvLnBhdGNoLmRlbHRhQ2hlY2tJbW1Ub0NhbGwpOworICAgIGlmIChN
YWNyb0Fzc2VtYmxlcjo6Y2FuSnVtcFJlcGxhY2VQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaCgp
KSB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNo
YWJsZUJyYW5jaDMyV2l0aFBhdGNoKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0YXJ0
T2ZQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaE9uQWRkcmVzcyhzdHJ1Y3R1cmVMYWJlbCksCisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICBzdGF0
aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRD4oc3R1YkluZm8ucGF0Y2guYmFzZUdQ
UiksCisgICAgICAgICAgICAgICAgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAg
ICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KHVudXNlZFBvaW50ZXIpKTsKICAgICB9CisgICAg
TWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hJbnQzMihzdHJ1Y3R1cmVMYWJlbCwgc3RhdGljX2Nhc3Q8
aW50MzJfdD4odW51c2VkUG9pbnRlcikpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgTWFjcm9B
c3NlbWJsZXI6OnJlcGF0Y2hJbnQzMihzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxh
YmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0xvYWRPclN0b3JlKSwgMCk7
CisjZWxzZQorICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIoc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxs
VG9UYWdMb2FkT3JTdG9yZSksIDApOworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIo
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8u
cGF0Y2guZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUpLCAwKTsKKyNlbmRpZgogfQogCiBz
dGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBj
b25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgdGFyZ2V0KQpAQCAtMTY4LDYgKzE3NCw4IEBAIHN0
YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChTdHJ1Y3R1cmVTdHUKICAgICAgICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsKHRhcmdldCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgcmVz
ZXRHZXRCeUlEQ2hlY2tBbmRMb2FkKHN0dWJJbmZvKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxl
cjo6cmVwYXRjaEp1bXAoCiAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1w
QXRPZmZzZXQoCkBAIC0xNzUsNDI3ICsxODMsNiBAQCBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1
bXAoU3RydWN0dXJlU3R1CiAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHRhcmdldCkpOwogfQog
Ci1zdGF0aWMgdm9pZCBlbWl0UmVzdG9yZVNjcmF0Y2goTWFjcm9Bc3NlbWJsZXImIHN0dWJKaXQs
IGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIEdQUlJlZyBzY3JhdGNoR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCYgc3VjY2VzcywgTWFjcm9Bc3NlbWJsZXI6Okp1bXAmIGZhaWwsIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXMpCi17Ci0gICAgaWYgKG5lZWRUb1Jlc3RvcmVT
Y3JhdGNoKSB7Ci0gICAgICAgIHN0dWJKaXQucG9wVG9SZXN0b3JlKHNjcmF0Y2hHUFIpOwotICAg
ICAgICAKLSAgICAgICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOwotICAgICAgICAKLSAgICAg
ICAgLy8gbGluayBmYWlsdXJlIGNhc2VzIGhlcmUsIHNvIHdlIGNhbiBwb3Agc2NyYXRjaEdQUiwg
YW5kIHRoZW4ganVtcCBiYWNrLgotICAgICAgICBmYWlsdXJlQ2FzZXMubGluaygmc3R1YkppdCk7
Ci0gICAgICAgIAotICAgICAgICBzdHViSml0LnBvcFRvUmVzdG9yZShzY3JhdGNoR1BSKTsKLSAg
ICAgICAgCi0gICAgICAgIGZhaWwgPSBzdHViSml0Lmp1bXAoKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICAKLSAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7Ci19Ci0KLXN0YXRpYyB2
b2lkIGxpbmtSZXN0b3JlU2NyYXRjaChMaW5rQnVmZmVyJiBwYXRjaEJ1ZmZlciwgYm9vbCBuZWVk
VG9SZXN0b3JlU2NyYXRjaCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzcywgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgZmFpbCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlcywg
Q29kZUxvY2F0aW9uTGFiZWwgc3VjY2Vzc0xhYmVsLCBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2Fz
ZUJlZ2luKQotewotICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3VjY2Vzc0xhYmVsKTsK
LSAgICAgICAgCi0gICAgaWYgKG5lZWRUb1Jlc3RvcmVTY3JhdGNoKSB7Ci0gICAgICAgIHBhdGNo
QnVmZmVyLmxpbmsoZmFpbCwgc2xvd0Nhc2VCZWdpbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgCi0gICAgLy8gbGluayBmYWlsdXJlIGNhc2VzIGRpcmVjdGx5IGJhY2sgdG8gbm9ybWFs
IHBhdGgKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlcywgc2xvd0Nhc2VCZWdpbik7
Ci19Ci0KLXN0YXRpYyB2b2lkIGxpbmtSZXN0b3JlU2NyYXRjaChMaW5rQnVmZmVyJiBwYXRjaEJ1
ZmZlciwgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBm
YWlsLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzKQotewotICAgIGxpbmtS
ZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHN1Y2Nlc3Ms
IGZhaWwsIGZhaWx1cmVDYXNlcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRP
ZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSwgc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2Fz
ZSkpOwotfQotCi1lbnVtIEJ5SWRTdHViS2luZCB7Ci0gICAgR2V0VmFsdWUsCi0gICAgR2V0VW5k
ZWZpbmVkLAotICAgIENhbGxHZXR0ZXIsCi0gICAgQ2FsbEN1c3RvbUdldHRlciwKLSAgICBDYWxs
U2V0dGVyLAotICAgIENhbGxDdXN0b21TZXR0ZXIKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiB0
b1N0cmluZyhCeUlkU3R1YktpbmQga2luZCkKLXsKLSAgICBzd2l0Y2ggKGtpbmQpIHsKLSAgICBj
YXNlIEdldFZhbHVlOgotICAgICAgICByZXR1cm4gIkdldFZhbHVlIjsKLSAgICBjYXNlIEdldFVu
ZGVmaW5lZDoKLSAgICAgICAgcmV0dXJuICJHZXRVbmRlZmluZWQiOwotICAgIGNhc2UgQ2FsbEdl
dHRlcjoKLSAgICAgICAgcmV0dXJuICJDYWxsR2V0dGVyIjsKLSAgICBjYXNlIENhbGxDdXN0b21H
ZXR0ZXI6Ci0gICAgICAgIHJldHVybiAiQ2FsbEN1c3RvbUdldHRlciI7Ci0gICAgY2FzZSBDYWxs
U2V0dGVyOgotICAgICAgICByZXR1cm4gIkNhbGxTZXR0ZXIiOwotICAgIGNhc2UgQ2FsbEN1c3Rv
bVNldHRlcjoKLSAgICAgICAgcmV0dXJuICJDYWxsQ3VzdG9tU2V0dGVyIjsKLSAgICBkZWZhdWx0
OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICB9Ci19Ci0KLXN0YXRpYyBCeUlkU3R1YktpbmQga2luZEZvcihjb25zdCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0gICAgaWYgKHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpKQot
ICAgICAgICByZXR1cm4gR2V0VmFsdWU7Ci0gICAgaWYgKHNsb3QuaXNVbnNldCgpKQotICAgICAg
ICByZXR1cm4gR2V0VW5kZWZpbmVkOwotICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkp
Ci0gICAgICAgIHJldHVybiBDYWxsQ3VzdG9tR2V0dGVyOwotICAgIFJFTEVBU0VfQVNTRVJUKHNs
b3QuaXNDYWNoZWFibGVHZXR0ZXIoKSk7Ci0gICAgcmV0dXJuIENhbGxHZXR0ZXI7Ci19Ci0KLXN0
YXRpYyBGdW5jdGlvblB0ciBjdXN0b21Gb3IoY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQotewot
ICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpKQotICAgICAgICByZXR1cm4gRnVuY3Rp
b25QdHIoKTsKLSAgICByZXR1cm4gRnVuY3Rpb25QdHIoc2xvdC5jdXN0b21HZXR0ZXIoKSk7Ci19
Ci0KLXN0YXRpYyBCeUlkU3R1YktpbmQga2luZEZvcihjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNs
b3QpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQoIXNsb3QuaXNDYWNoZWFibGVQdXQoKSk7Ci0gICAg
aWYgKHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSkKLSAgICAgICAgcmV0dXJuIENhbGxTZXR0ZXI7
Ci0gICAgUkVMRUFTRV9BU1NFUlQoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpKTsKLSAgICByZXR1
cm4gQ2FsbEN1c3RvbVNldHRlcjsKLX0KLQotc3RhdGljIEZ1bmN0aW9uUHRyIGN1c3RvbUZvcihj
b25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0gICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxl
Q3VzdG9tKCkpCi0gICAgICAgIHJldHVybiBGdW5jdGlvblB0cigpOwotICAgIHJldHVybiBGdW5j
dGlvblB0cihzbG90LmN1c3RvbVNldHRlcigpKTsKLX0KLQotc3RhdGljIGJvb2wgZ2VuZXJhdGVC
eUlkU3R1YigKLSAgICBFeGVjU3RhdGUqIGV4ZWMsIEJ5SWRTdHViS2luZCBraW5kLCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsCi0gICAgRnVuY3Rpb25QdHIgY3VzdG9tLCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8sIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBj
b25kaXRpb25TZXQsCi0gICAgSlNPYmplY3QqIGFsdGVybmF0ZUJhc2UsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGJvb2wgbG9hZFRhcmdldEZyb21Qcm94eSwK
LSAgICBXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0LCBDb2RlTG9jYXRpb25MYWJlbCBzdWNj
ZXNzTGFiZWwsIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlTGFiZWwsCi0gICAgUmVmUHRyPEpJ
VFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUpCi17Ci0gICAgQVNTRVJUKGNvbmRpdGlvblNldC5z
dHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgp
KTsKLSAgICAKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBHUFJSZWcgYmFzZUdQUiA9
IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guYmFzZUdQUik7Ci0gICAgSlNWYWx1
ZVJlZ3MgdmFsdWVSZWdzID0gSlNWYWx1ZVJlZ3MoCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAg
ICAgICAgc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZVRhZ0dQUiksCi0j
ZW5kaWYKLSAgICAgICAgc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZUdQ
UikpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gVGVtcFJlZ2lzdGVyU2V0KHN0dWJJbmZvLnBh
dGNoLnVzZWRSZWdpc3RlcnMpLmdldEZyZWVHUFIoKTsKLSAgICBib29sIG5lZWRUb1Jlc3RvcmVT
Y3JhdGNoID0gc2NyYXRjaEdQUiA9PSBJbnZhbGlkR1BSUmVnOwotICAgIFJFTEVBU0VfQVNTRVJU
KCFuZWVkVG9SZXN0b3JlU2NyYXRjaCB8fCAoa2luZCA9PSBHZXRWYWx1ZSB8fCBraW5kID09IEdl
dFVuZGVmaW5lZCkpOwotICAgIAotICAgIENDYWxsSGVscGVycyBzdHViSml0KCZleGVjLT52bSgp
LCBleGVjLT5jb2RlQmxvY2soKSk7Ci0gICAgaWYgKG5lZWRUb1Jlc3RvcmVTY3JhdGNoKSB7Ci0g
ICAgICAgIHNjcmF0Y2hHUFIgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoCi0g
ICAgICAgICAgICBiYXNlR1BSLCB2YWx1ZVJlZ3MudGFnR1BSKCksIHZhbHVlUmVncy5wYXlsb2Fk
R1BSKCkpOwotICAgICAgICBzdHViSml0LnB1c2hUb1NhdmUoc2NyYXRjaEdQUik7Ci0gICAgICAg
IG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsKLQotICAgIEdQUlJlZyBiYXNlRm9yR2V0R1BS
OwotICAgIGlmIChsb2FkVGFyZ2V0RnJvbVByb3h5KSB7Ci0gICAgICAgIGJhc2VGb3JHZXRHUFIg
PSB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpOwotICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0
dWJKaXQuYnJhbmNoOCgKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgCi0g
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnR5cGVJ
bmZvVHlwZU9mZnNldCgpKSwgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKFB1cmVGb3J3YXJkaW5nUHJveHlUeXBlKSkpOwotCi0gICAgICAgIHN0dWJKaXQubG9hZFB0
cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU1Byb3h5Ojp0YXJnZXRPZmZzZXQo
KSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAKLSAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChz
dHViSml0LmJyYW5jaFN0cnVjdHVyZSgKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBK
U0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAotICAgICAgICAgICAgc3RydWN0dXJlKSk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgYmFzZUZvckdldEdQUiA9IGJhc2VHUFI7Ci0KLSAgICAgICAg
ZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFN0cnVjdHVyZSgKLSAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlRm9yR2V0R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCAKLSAg
ICAgICAgICAgIHN0cnVjdHVyZSkpOwotICAgIH0KLQotICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgaWYgKHN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3Bl
cnR5V2F0Y2hwb2ludCgpIHx8IGNvbmRpdGlvblNldC5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBv
aW50KCkpCi0gICAgICAgIHZtLT5yZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShw
cm9wZXJ0eU5hbWUsIHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7Ci0KLSAgICBp
ZiAod2F0Y2hwb2ludFNldCkKLSAgICAgICAgd2F0Y2hwb2ludFNldC0+YWRkKHN0dWJJbmZvLmFk
ZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7Ci0KLSAgICBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0
aW9ucygKLSAgICAgICAgY29uZGl0aW9uU2V0LCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHViSml0
LCBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOwotCi0gICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zm
c2V0KSkgewotICAgICAgICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmU7Ci0gICAgICAgIGlmIChj
b25kaXRpb25TZXQuaXNFbXB0eSgpKQotICAgICAgICAgICAgY3VyclN0cnVjdHVyZSA9IHN0cnVj
dHVyZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY3VyclN0cnVjdHVyZSA9IGNvbmRpdGlv
blNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAg
Y3VyclN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKCp2bSwg
b2Zmc2V0KTsKLSAgICB9Ci0gICAgCi0gICAgR1BSUmVnIGJhc2VGb3JBY2Nlc3NHUFIgPSBJbnZh
bGlkR1BSUmVnOwotICAgIGlmIChraW5kICE9IEdldFVuZGVmaW5lZCkgewotICAgICAgICBpZiAo
IWNvbmRpdGlvblNldC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIC8vIFdlIGNvdWxkIGhhdmUg
Y2xvYmJlcmVkIHNjcmF0Y2hHUFIgZWFybGllciwgc28gd2UgaGF2ZSB0byByZWxvYWQgZnJvbSBi
YXNlR1BSIHRvIGdldCB0aGUgdGFyZ2V0LgotICAgICAgICAgICAgaWYgKGxvYWRUYXJnZXRGcm9t
UHJveHkpCi0gICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTUHJveHk6OnRhcmdldE9mZnNldCgpKSwgYmFzZUZvckdldEdQUik7
Ci0gICAgICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
YWx0ZXJuYXRlQmFzZSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgYmFzZUZvckFjY2Vzc0dQ
UiA9IHNjcmF0Y2hHUFI7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBGb3IgcHJv
eHkgb2JqZWN0cywgd2UgbmVlZCB0byBkbyBhbGwgdGhlIFN0cnVjdHVyZSBjaGVja3MgYmVmb3Jl
IG1vdmluZyB0aGUgYmFzZUdQUiBpbnRvCi0gICAgICAgICAgICAvLyBiYXNlRm9yR2V0R1BSIGJl
Y2F1c2UgaWYgd2UgZmFpbCBhbnkgb2YgdGhlIGNoZWNrcyB0aGVuIHdlIHdvdWxkIGhhdmUgdGhl
IHdyb25nIHZhbHVlIGluIGJhc2VHUFIKLSAgICAgICAgICAgIC8vIG9uIHRoZSBzbG93IHBhdGgu
Ci0gICAgICAgICAgICBpZiAobG9hZFRhcmdldEZyb21Qcm94eSkKLSAgICAgICAgICAgICAgICBz
dHViSml0Lm1vdmUoc2NyYXRjaEdQUiwgYmFzZUZvckdldEdQUik7Ci0gICAgICAgICAgICBiYXNl
Rm9yQWNjZXNzR1BSID0gYmFzZUZvckdldEdQUjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEdQ
UlJlZyBsb2FkZWRWYWx1ZUdQUiA9IEludmFsaWRHUFJSZWc7Ci0gICAgaWYgKGtpbmQgPT0gR2V0
VW5kZWZpbmVkKQotICAgICAgICBzdHViSml0Lm1vdmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQo
KSwgdmFsdWVSZWdzKTsKLSAgICBlbHNlIGlmIChraW5kICE9IENhbGxDdXN0b21HZXR0ZXIgJiYg
a2luZCAhPSBDYWxsQ3VzdG9tU2V0dGVyKSB7Ci0gICAgICAgIGlmIChraW5kID09IEdldFZhbHVl
KQotICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIgPSB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUiA9IHNjcmF0Y2hHUFI7Ci0g
ICAgICAgIAotICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUjsKLSAgICAgICAgaWYgKGlzSW5saW5l
T2Zmc2V0KG9mZnNldCkpCi0gICAgICAgICAgICBzdG9yYWdlR1BSID0gYmFzZUZvckFjY2Vzc0dQ
UjsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZUZvckFjY2Vzc0dQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgbG9hZGVkVmFsdWVHUFIpOwotICAgICAgICAgICAgc3RvcmFnZUdQUiA9IGxvYWRlZFZh
bHVlR1BSOwotICAgICAgICB9Ci0gICAgICAgIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAg
IHN0dWJKaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9mZnNl
dFJlbGF0aXZlVG9CYXNlKG9mZnNldCkpLCBsb2FkZWRWYWx1ZUdQUik7Ci0jZWxzZQotICAgICAg
ICBpZiAoa2luZCA9PSBHZXRWYWx1ZSkKLSAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKG9mZnNl
dCkgKyBUYWdPZmZzZXQpLCB2YWx1ZVJlZ3MudGFnR1BSKCkpOwotICAgICAgICBzdHViSml0Lmxv
YWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBvZmZzZXRSZWxhdGl2ZVRv
QmFzZShvZmZzZXQpICsgUGF5bG9hZE9mZnNldCksIGxvYWRlZFZhbHVlR1BSKTsKLSNlbmRpZgot
ICAgIH0KLQotICAgIC8vIFN0dWZmIGZvciBjdXN0b20gZ2V0dGVycy4KLSAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBvcGVyYXRpb25DYWxsOwotICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGhhbmRs
ZXJDYWxsOwotCi0gICAgLy8gU3R1ZmYgZm9yIEpTIGdldHRlcnMuCi0gICAgTWFjcm9Bc3NlbWJs
ZXI6OkRhdGFMYWJlbFB0ciBhZGRyZXNzT2ZMaW5rRnVuY3Rpb25DaGVjazsKLSAgICBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBmYXN0UGF0aENhbGw7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgc2xv
d1BhdGhDYWxsOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua0luZm8+IGNhbGxMaW5rSW5m
bzsKLQotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3MsIGZhaWw7Ci0gICAgaWYgKGtp
bmQgIT0gR2V0VmFsdWUgJiYga2luZCAhPSBHZXRVbmRlZmluZWQpIHsKLSAgICAgICAgLy8gTmVl
ZCB0byBtYWtlIHN1cmUgdGhhdCB3aGVuZXZlciB0aGlzIGNhbGwgaXMgbWFkZSBpbiB0aGUgZnV0
dXJlLCB3ZSByZW1lbWJlciB0aGUKLSAgICAgICAgLy8gcGxhY2UgdGhhdCB3ZSBtYWRlIGl0IGZy
b20uIEl0IGp1c3Qgc28gaGFwcGVucyB0byBiZSB0aGUgcGxhY2UgdGhhdCB3ZSBhcmUgYXQKLSAg
ICAgICAgLy8gcmlnaHQgbm93IQotICAgICAgICBzdHViSml0LnN0b3JlMzIoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMihzdHViSW5mby5jYWxsU2l0ZUluZGV4LmJpdHMoKSksCi0gICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KEpT
U3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7Ci0KLSAgICAgICAgaWYgKGtpbmQgPT0gQ2FsbEdldHRl
ciB8fCBraW5kID09IENhbGxTZXR0ZXIpIHsKLSAgICAgICAgICAgIC8vIENyZWF0ZSBhIEpTIGNh
bGwgdXNpbmcgYSBKUyBjYWxsIGlubGluZSBjYWNoZS4gQXNzdW1lIHRoYXQ6Ci0gICAgICAgICAg
ICAvLwotICAgICAgICAgICAgLy8gLSBTUCBpcyBhbGlnbmVkIGFuZCByZXByZXNlbnRzIHRoZSBl
eHRlbnQgb2YgdGhlIGNhbGxpbmcgY29tcGlsZXIncyBzdGFjayB1c2FnZS4KLSAgICAgICAgICAg
IC8vCi0gICAgICAgICAgICAvLyAtIEZQIGlzIHNldCBjb3JyZWN0bHkgKGkuZS4gaXQgcG9pbnRz
IHRvIHRoZSBjYWxsZXIncyBjYWxsIGZyYW1lIGhlYWRlcikuCi0gICAgICAgICAgICAvLwotICAg
ICAgICAgICAgLy8gLSBTUCAtIEZQIGlzIGFuIGFsaWduZWQgZGlmZmVyZW5jZS4KLSAgICAgICAg
ICAgIC8vCi0gICAgICAgICAgICAvLyAtIEFueSBieXRlIGJldHdlZW4gRlAgKGV4Y2x1c2l2ZSkg
YW5kIFNQIChpbmNsdXNpdmUpIGNvdWxkIGJlIGxpdmUgaW4gdGhlIGNhbGxpbmcKLSAgICAgICAg
ICAgIC8vICAgY29kZS4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBUaGVyZWZvcmUs
IHdlIHRlbXBvcmFyaWx5IGdyb3cgdGhlIHN0YWNrIGZvciB0aGUgcHVycG9zZSBvZiB0aGUgY2Fs
bCBhbmQgdGhlbgotICAgICAgICAgICAgLy8gc2hyaW5rIGl0IGFmdGVyLgotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBjYWxsTGlua0luZm8gPSBzdGQ6Om1ha2VfdW5pcXVlPENhbGxMaW5rSW5m
bz4oKTsKLQotICAgICAgICAgICAgLy8gRklYTUU6IElmIHdlIGdlbmVyYXRlZCBhIHBvbHltb3Jw
aGljIGNhbGwgc3R1YiB0aGF0IGp1bXBlZCBiYWNrIHRvIHRoZSBnZXR0ZXIKLSAgICAgICAgICAg
IC8vIHN0dWIsIHdoaWNoIHRoZW4ganVtcGVkIGJhY2sgdG8gdGhlIG1haW4gY29kZSwgdGhlbiB3
ZSdkIGhhdmUgYSByZWFjaGFiaWxpdHkKLSAgICAgICAgICAgIC8vIHNpdHVhdGlvbiB0aGF0IHRo
ZSBHQyBkb2Vzbid0IGtub3cgYWJvdXQuIFRoZSBHQyB3b3VsZCBlbnN1cmUgdGhhdCB0aGUgcG9s
eW1vcnBoaWMKLSAgICAgICAgICAgIC8vIGNhbGwgc3R1YiBzdGF5ZWQgYWxpdmUsIGFuZCBpdCB3
b3VsZCBlbnN1cmUgdGhhdCB0aGUgbWFpbiBjb2RlIHN0YXllZCBhbGl2ZSwgYnV0Ci0gICAgICAg
ICAgICAvLyBpdCB3b3VsZG4ndCBrbm93IHRoYXQgdGhlIGdldHRlciBzdHViIHdhcyBhbGl2ZS4g
SWRlYWxseSBKSVQgc3R1YiByb3V0aW5lcyB3b3VsZAotICAgICAgICAgICAgLy8gYmUgR0Mgb2Jq
ZWN0cywgYW5kIHRoZW4gd2UnZCBiZSBhYmxlIHRvIHNheSB0aGF0IHRoZSBwb2x5bW9ycGhpYyBj
YWxsIHN0dWIgaGFzIGEKLSAgICAgICAgICAgIC8vIHJlZmVyZW5jZSB0byB0aGUgZ2V0dGVyIHN0
dWIuCi0gICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQ4OTE0Ci0gICAgICAgICAgICBjYWxsTGlua0luZm8tPmRpc2FsbG93U3R1YnMoKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJ
bmZvOjpDYWxsLCBzdHViSW5mby5jb2RlT3JpZ2luLCBsb2FkZWRWYWx1ZUdQUik7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBkb25lOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICAvLyBUaGVyZSBpcyBhICd0aGlzJyBhcmd1bWVudCBidXQgbm90
aGluZyBlbHNlLgotICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZQYXJhbWV0ZXJzID0gMTsK
LSAgICAgICAgICAgIC8vIC4uLiB1bmxlc3Mgd2UncmUgY2FsbGluZyBhIHNldHRlci4KLSAgICAg
ICAgICAgIGlmIChraW5kID09IENhbGxTZXR0ZXIpCi0gICAgICAgICAgICAgICAgbnVtYmVyT2ZQ
YXJhbWV0ZXJzKys7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEdldCB0aGUgYWNjZXNz
b3I7IGlmIHRoZXJlIGFpbid0IG9uZSB0aGVuIHRoZSByZXN1bHQgaXMganNVbmRlZmluZWQoKS4K
LSAgICAgICAgICAgIGlmIChraW5kID09IENhbGxTZXR0ZXIpIHsKLSAgICAgICAgICAgICAgICBz
dHViSml0LmxvYWRQdHIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGxvYWRlZFZhbHVlR1BSLCBHZXR0ZXJTZXR0ZXI6Om9mZnNldE9mU2V0dGVyKCkpLAotICAg
ICAgICAgICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUik7Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MobG9hZGVkVmFsdWVHUFIsIEdldHRlclNldHRlcjo6b2Zmc2V0
T2ZHZXR0ZXIoKSksCi0gICAgICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHJldHVyblVuZGVmaW5l
ZCA9IHN0dWJKaXQuYnJhbmNoVGVzdFB0cigKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6WmVybywgbG9hZGVkVmFsdWVHUFIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICB1bnNp
Z25lZCBudW1iZXJPZlJlZ3NGb3JDYWxsID0KLSAgICAgICAgICAgICAgICBKU1N0YWNrOjpDYWxs
RnJhbWVIZWFkZXJTaXplICsgbnVtYmVyT2ZQYXJhbWV0ZXJzOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCA9Ci0gICAgICAgICAgICAgICAg
bnVtYmVyT2ZSZWdzRm9yQ2FsbCAqIHNpemVvZihSZWdpc3RlcikgLSBzaXplb2YoQ2FsbGVyRnJh
bWVBbmRQQyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHVuc2lnbmVkIGFsaWduZWROdW1i
ZXJPZkJ5dGVzRm9yQ2FsbCA9Ci0gICAgICAgICAgICAgICAgV1RGOjpyb3VuZFVwVG9NdWx0aXBs
ZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgbnVtYmVyT2ZCeXRlc0ZvckNhbGwpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBzdHViSml0LnN1YlB0cigKLSAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2FsbCksCi0g
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MgY2FsbGVlRnJh
bWUgPSBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcygKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsCi0gICAgICAgICAgICAgICAgLXN0YXRpY19jYXN0
PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIHN0dWJKaXQuc3RvcmUzMigKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKG51bWJlck9mUGFyYW1ldGVycyksCi0gICAgICAgICAgICAgICAgY2Fs
bGVlRnJhbWUud2l0aE9mZnNldCgKLSAgICAgICAgICAgICAgICAgICAgSlNTdGFjazo6QXJndW1l
bnRDb3VudCAqIHNpemVvZihSZWdpc3RlcikgKyBQYXlsb2FkT2Zmc2V0KSk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIHN0dWJKaXQuc3RvcmVDZWxsKAotICAgICAgICAgICAgICAgIGxvYWRl
ZFZhbHVlR1BSLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KEpTU3RhY2s6OkNhbGxlZSAqIHNpemVv
ZihSZWdpc3RlcikpKTsKLQotICAgICAgICAgICAgc3R1YkppdC5zdG9yZUNlbGwoCi0gICAgICAg
ICAgICAgICAgYmFzZUZvckdldEdQUiwKLSAgICAgICAgICAgICAgICBjYWxsZWVGcmFtZS53aXRo
T2Zmc2V0KAotICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgw
KS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgaWYgKGtpbmQgPT0gQ2FsbFNldHRlcikgewotICAgICAgICAgICAgICAgIHN0dWJKaXQuc3Rv
cmVWYWx1ZSgKLSAgICAgICAgICAgICAgICAgICAgdmFsdWVSZWdzLAotICAgICAgICAgICAgICAg
ICAgICBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KAotICAgICAgICAgICAgICAgICAgICAgICAgdmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIHNsb3dDYXNlID0gc3R1YkppdC5icmFuY2hQdHJXaXRoUGF0Y2goCi0gICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBsb2FkZWRWYWx1ZUdQUiwgYWRkcmVzc09m
TGlua0Z1bmN0aW9uQ2hlY2ssCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIoMCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBmYXN0UGF0aENhbGwgPSBz
dHViSml0Lm5lYXJDYWxsKCk7Ci0KLSAgICAgICAgICAgIHN0dWJKaXQuYWRkUHRyKAotICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoY29kZUJsb2NrLT5zdGFja1Bv
aW50ZXJPZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLAotICAgICAgICAgICAgICAgIEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpz
dGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsR2V0dGVy
KQotICAgICAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBSZXN1bHRzKHZhbHVlUmVncyk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGRvbmUuYXBwZW5kKHN0dWJKaXQuanVtcCgpKTsKLSAgICAg
ICAgICAgIHNsb3dDYXNlLmxpbmsoJnN0dWJKaXQpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBzdHViSml0Lm1vdmUobG9hZGVkVmFsdWVHUFIsIEdQUkluZm86OnJlZ1QwKTsKLSNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQotICAgICAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIEdQUkluZm86OnJlZ1QxKTsKLSNlbmRpZgot
ICAgICAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGNh
bGxMaW5rSW5mby5nZXQoKSksIEdQUkluZm86OnJlZ1QyKTsKLSAgICAgICAgICAgIHNsb3dQYXRo
Q2FsbCA9IHN0dWJKaXQubmVhckNhbGwoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3R1
YkppdC5hZGRQdHIoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
Mihjb2RlQmxvY2stPnN0YWNrUG9pbnRlck9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksCi0g
ICAgICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCi0gICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAgICAgIGlm
IChraW5kID09IENhbGxHZXR0ZXIpCi0gICAgICAgICAgICAgICAgc3R1YkppdC5zZXR1cFJlc3Vs
dHModmFsdWVSZWdzKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZG9uZS5hcHBlbmQoc3R1
YkppdC5qdW1wKCkpOwotICAgICAgICAgICAgcmV0dXJuVW5kZWZpbmVkLmxpbmsoJnN0dWJKaXQp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsR2V0dGVyKQotICAg
ICAgICAgICAgICAgIHN0dWJKaXQubW92ZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCB2YWx1
ZVJlZ3MpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBkb25lLmxpbmsoJnN0dWJKaXQpOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gZ2V0dGVyOiBFbmNvZGVkSlNWYWx1ZSAo
KkdldFZhbHVlRnVuYykoRXhlY1N0YXRlKiwgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSk7Ci0gICAgICAgICAgICAvLyBzZXR0ZXI6IHZv
aWQgKCpQdXRWYWx1ZUZ1bmMpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBiYXNlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSk7Ci0jaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICAgICAgICAgIGlmIChraW5kID09IENhbGxDdXN0b21HZXR0ZXIpCi0gICAgICAgICAg
ICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUZvckFjY2Vzc0dQ
UiwgYmFzZUZvckdldEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocHJvcGVydHlO
YW1lLmltcGwoKSkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHN0dWJKaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VGb3JBY2Nlc3NHUFIsIGJhc2VGb3JHZXRH
UFIsIHZhbHVlUmVncy5ncHIoKSk7Ci0jZWxzZQotICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ2Fs
bEN1c3RvbUdldHRlcikKLSAgICAgICAgICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShiYXNlRm9yQWNjZXNzR1BSLCBiYXNlRm9yR2V0R1BSLCBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihwcm9wZXJ0eU5hbWUuaW1wbCgpKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUZvckFjY2Vz
c0dQUiwgYmFzZUZvckdldEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpDZWxsVGFnKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgdmFsdWVSZWdzLnRhZ0dQUigpKTsK
LSNlbmRpZgotICAgICAgICAgICAgc3R1YkppdC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgJnZtLT50b3BDYWxsRnJhbWUpOwotCi0gICAgICAgICAgICBvcGVyYXRpb25DYWxs
ID0gc3R1YkppdC5jYWxsKCk7Ci0gICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsQ3VzdG9tR2V0
dGVyKQotICAgICAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBSZXN1bHRzKHZhbHVlUmVncyk7Ci0g
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub0V4Y2VwdGlvbiA9IHN0dWJKaXQuZW1p
dEV4Y2VwdGlvbkNoZWNrKENDYWxsSGVscGVyczo6SW52ZXJ0ZWRFeGNlcHRpb25DaGVjayk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHMoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKHZtKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwotICAg
ICAgICAgICAgaGFuZGxlckNhbGwgPSBzdHViSml0LmNhbGwoKTsKLSAgICAgICAgICAgIHN0dWJK
aXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBu
b0V4Y2VwdGlvbi5saW5rKCZzdHViSml0KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbWl0UmVz
dG9yZVNjcmF0Y2goc3R1YkppdCwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHNjcmF0Y2hHUFIsIHN1
Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcyk7Ci0gICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcigqdm0sIHN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygpLCBKSVRDb21waWxhdGlvbkNhbkZh
aWwpOwotICAgIGlmIChwYXRjaEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBu
ZWVkVG9SZXN0b3JlU2NyYXRjaCwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzLCBzdWNjZXNz
TGFiZWwsIHNsb3dDYXNlTGFiZWwpOwotICAgIGlmIChraW5kID09IENhbGxDdXN0b21HZXR0ZXIg
fHwga2luZCA9PSBDYWxsQ3VzdG9tU2V0dGVyKSB7Ci0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmso
b3BlcmF0aW9uQ2FsbCwgY3VzdG9tKTsKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhoYW5kbGVy
Q2FsbCwgbG9va3VwRXhjZXB0aW9uSGFuZGxlcik7Ci0gICAgfSBlbHNlIGlmIChraW5kID09IENh
bGxHZXR0ZXIgfHwga2luZCA9PSBDYWxsU2V0dGVyKSB7Ci0gICAgICAgIGNhbGxMaW5rSW5mby0+
c2V0Q2FsbExvY2F0aW9ucyhwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoc2xvd1BhdGhD
YWxsKSwKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YoYWRkcmVzc09mTGlua0Z1
bmN0aW9uQ2hlY2spLAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxs
KGZhc3RQYXRoQ2FsbCkpOwotCi0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoCi0gICAgICAgICAg
ICBzbG93UGF0aENhbGwsIENvZGVMb2NhdGlvbkxhYmVsKHZtLT5nZXRDVElTdHViKGxpbmtDYWxs
VGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwotICAgIH0KLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgY29kZSA9IEZJTkFMSVpFX0NPREVfRk9SKAotICAgICAgICBleGVjLT5jb2RlQmxv
Y2soKSwgcGF0Y2hCdWZmZXIsCi0gICAgICAgICgiJXMgYWNjZXNzIHN0dWIgZm9yICVzLCByZXR1
cm4gcG9pbnQgJXAiLAotICAgICAgICAgICAgdG9TdHJpbmcoa2luZCksIHRvQ1N0cmluZygqZXhl
Yy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwKLSAgICAgICAgICAgIHN1Y2Nlc3NMYWJlbC5leGVjdXRh
YmxlQWRkcmVzcygpKSk7Ci0gICAgCi0gICAgaWYgKGtpbmQgPT0gQ2FsbEdldHRlciB8fCBraW5k
ID09IENhbGxTZXR0ZXIpCi0gICAgICAgIHN0dWJSb3V0aW5lID0gYWRvcHRSZWYobmV3IEFjY2Vz
c29yQ2FsbEpJVFN0dWJSb3V0aW5lKGNvZGUsICp2bSwgV1RGOjptb3ZlKGNhbGxMaW5rSW5mbykp
KTsKLSAgICBlbHNlCi0gICAgICAgIHN0dWJSb3V0aW5lID0gY3JlYXRlSklUU3R1YlJvdXRpbmUo
Y29kZSwgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCB0cnVlKTsKLSAgICAKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQogZW51bSBJbmxpbmVDYWNoZUFjdGlvbiB7CiAgICAgR2l2ZVVw
T25DYWNoZSwKICAgICBSZXRyeUNhY2hlTGF0ZXIsCkBAIC02MjksMTMyICsyMTYsOTkgQEAgc3Rh
dGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0QnlJRAogICAgIGlmIChPcHRpb25zOjpm
b3JjZUlDRmFpbHVyZSgpKQogICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKICAgICAKLSAg
ICAvLyBGSVhNRTogV3JpdGUgYSB0ZXN0IHRoYXQgcHJvdmVzIHdlIG5lZWQgdG8gY2hlY2sgZm9y
IHJlY3Vyc2lvbiBoZXJlIGp1c3QKLSAgICAvLyBsaWtlIHRoZSBpbnRlcnByZXRlciBkb2VzLCB0
aGVuIGFkZCBhIGNoZWNrIGZvciByZWN1cnNpb24uCisgICAgLy8gRklYTUU6IENhY2hlIHByb3Bl
cnR5IGFjY2VzcyBmb3IgaW1tZWRpYXRlcy4KKyAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkK
KyAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFNj
cmlwdEV4ZWN1dGFibGUqIG93bmVyID0gY29kZUJsb2NrLT5vd25lclNjcmlwdEV4ZWN1dGFibGUo
KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogCi0gICAgaWYgKChpc0pTQXJyYXkoYmFzZVZh
bHVlKSB8fCBpc0pTU3RyaW5nKGJhc2VWYWx1ZSkpICYmIHByb3BlcnR5TmFtZSA9PSBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7Ci0gICAgICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGlj
X2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKTsKLSNpZiBVU0UoSlNWQUxVRTMy
XzY0KQotICAgICAgICBHUFJSZWcgcmVzdWx0VGFnR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihz
dHViSW5mby5wYXRjaC52YWx1ZVRhZ0dQUik7Ci0jZW5kaWYKLSAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVHUFIpOwotCi0g
ICAgICAgIE1hY3JvQXNzZW1ibGVyIHN0dWJKaXQ7Ci0KLSAgICAgICAgaWYgKGlzSlNBcnJheShi
YXNlVmFsdWUpKSB7Ci0gICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IFRlbXBSZWdpc3Rl
clNldChzdHViSW5mby5wYXRjaC51c2VkUmVnaXN0ZXJzKS5nZXRGcmVlR1BSKCk7Ci0gICAgICAg
ICAgICBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gZmFsc2U7Ci0KLSAgICAgICAgICAgIGlm
IChzY3JhdGNoR1BSID09IEludmFsaWRHUFJSZWcpIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAg
ICAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hH
UFIoYmFzZUdQUiwgcmVzdWx0R1BSKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgc2NyYXRjaEdQ
UiA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCByZXN1bHRHUFIs
IHJlc3VsdFRhZ0dQUik7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBzdHViSml0LnB1c2hUb1Nh
dmUoc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSB0
cnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QgZmFpbHVyZUNhc2VzOwotCi0gICAgICAgICAgICBzdHViSml0LmxvYWQ4KE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBzY3Jh
dGNoR1BSKTsKLSAgICAgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2hU
ZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoSXNBcnJheSkpKTsKLSAgICAgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQo
c3R1YkppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spKSk7Ci0KLSAgICAg
ICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIHN0
dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3Rv
cmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIGZhaWx1cmVD
YXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHNj
cmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCkpKTsKLQotICAgICAgICAg
ICAgc3R1YkppdC5tb3ZlKHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7Ci0jaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICAgICAgICAgIHN0dWJKaXQub3I2NChBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW02
NChUYWdUeXBlTnVtYmVyKSwgcmVzdWx0R1BSKTsKLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0g
ICAgICAgICAgICBzdHViSml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6SW50MzJUYWcpLCByZXN1bHRUYWdHUFIpOwotI2VuZGlmCisgICAgc3RkOjp1bmlxdWVf
cHRyPEFjY2Vzc0Nhc2U+IG5ld0Nhc2U7CiAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIHN1Y2Nlc3MsIGZhaWw7Ci0KLSAgICAgICAgICAgIGVtaXRSZXN0b3JlU2NyYXRjaChzdHVi
Sml0LCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc2NyYXRjaEdQUiwgc3VjY2VzcywgZmFpbCwgZmFp
bHVyZUNhc2VzKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcigqdm0sIHN0dWJKaXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKLSAg
ICAgICAgICAgIGlmIChwYXRjaEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgICAgICBsaW5rUmVzdG9yZVNj
cmF0Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdHViSW5mbywgc3VjY2Vz
cywgZmFpbCwgZmFpbHVyZUNhc2VzKTsKLQotICAgICAgICAgICAgc3R1YkluZm8uc3R1YlJvdXRp
bmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAotICAgICAgICAgICAgICAgIGV4ZWMtPmNvZGVC
bG9jaygpLCBwYXRjaEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAoIkdldEJ5SWQgYXJyYXkgbGVu
Z3RoIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAgICAgICAgICAgICB0
b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8u
cGF0Y2guZGVsdGFDYWxsVG9Eb25lKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0KLSAgICAgICAg
ICAgIHJlcGxhY2VXaXRoSnVtcChzdHViSW5mbywgc3R1YkluZm8uc3R1YlJvdXRpbmUtPmNvZGUo
KS5jb2RlKCkpOwotICAgICAgICAgICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWQpOworICAgIGlmIChpc0pTQXJyYXko
YmFzZVZhbHVlKSAmJiBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0
aCkKKyAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmdldExlbmd0aCh2bSwgb3duZXIsIEFj
Y2Vzc0Nhc2U6OkFycmF5TGVuZ3RoKTsKKyAgICBlbHNlIGlmIChpc0pTU3RyaW5nKGJhc2VWYWx1
ZSkgJiYgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpCisgICAg
ICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpnZXRMZW5ndGgodm0sIG93bmVyLCBBY2Nlc3NDYXNl
OjpTdHJpbmdMZW5ndGgpOworICAgIGVsc2UgeworICAgICAgICBpZiAoIXNsb3QuaXNDYWNoZWFi
bGUoKSAmJiAhc2xvdC5pc1Vuc2V0KCkpCisgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNo
ZTsKIAorICAgICAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOworICAg
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUodm0pOworICAg
ICAgICAKKyAgICAgICAgLy8gT3B0aW1pemUgc2VsZiBhY2Nlc3MuCisgICAgICAgIGlmIChzdHVi
SW5mby5jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpVbnNldAorICAgICAgICAgICAgJiYgc2xvdC5p
c0NhY2hlYWJsZVZhbHVlKCkKKyAgICAgICAgICAgICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNl
VmFsdWUKKyAgICAgICAgICAgICYmICFzbG90LndhdGNocG9pbnRTZXQoKQorICAgICAgICAgICAg
JiYgTWFjcm9Bc3NlbWJsZXI6OmlzQ29tcGFjdFB0ckFsaWduZWRBZGRyZXNzT2Zmc2V0KG1heE9m
ZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSkKKyAgICAg
ICAgICAgICYmIGFjdGlvbkZvckNlbGwodm0sIGJhc2VDZWxsKSA9PSBBdHRlbXB0VG9DYWNoZQor
ICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgp
KSB7CisgICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxh
Y2VtZW50cyh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgICAgICByZXBhdGNoQnlJ
ZFNlbGZBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9m
ZnNldCgpLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHRydWUpOworICAgICAgICAgICAgc3R1
YkluZm8uaW5pdEdldEJ5SWRTZWxmKHZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBz
dHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgcmV0dXJuIFJldHJ5
Q2FjaGVMYXRlcjsKICAgICAgICAgfQogCi0gICAgICAgIC8vIFN0cmluZy5sZW5ndGggY2FzZQot
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsdXJlID0gc3R1YkppdC5icmFuY2g4KE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoU3RyaW5nVHlwZSkpOwotCi0gICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VHUFIsIEpTU3RyaW5nOjpvZmZzZXRPZkxlbmd0aCgpKSwgcmVzdWx0R1BS
KTsKLQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHN0dWJKaXQub3I2NChBc3NlbWJseUhl
bHBlcnM6OlRydXN0ZWRJbW02NChUYWdUeXBlTnVtYmVyKSwgcmVzdWx0R1BSKTsKLSNlbGlmIFVT
RShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIHN0dWJKaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHJlc3VsdFRhZ0dQUik7Ci0jZW5kaWYKKyAg
ICAgICAgYm9vbCBsb2FkVGFyZ2V0RnJvbVByb3h5ID0gZmFsc2U7CisgICAgICAgIGlmIChiYXNl
Q2VsbC0+dHlwZSgpID09IFB1cmVGb3J3YXJkaW5nUHJveHlUeXBlKSB7CisgICAgICAgICAgICBi
YXNlVmFsdWUgPSBqc0Nhc3Q8SlNQcm94eSo+KGJhc2VDZWxsKS0+dGFyZ2V0KCk7CisgICAgICAg
ICAgICBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKKyAgICAgICAgICAgIHN0cnVjdHVy
ZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUodm0pOworICAgICAgICAgICAgbG9hZFRhcmdldEZyb21Q
cm94eSA9IHRydWU7CisgICAgICAgIH0KIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBz
dWNjZXNzID0gc3R1YkppdC5qdW1wKCk7CisgICAgICAgIElubGluZUNhY2hlQWN0aW9uIGFjdGlv
biA9IGFjdGlvbkZvckNlbGwodm0sIGJhc2VDZWxsKTsKKyAgICAgICAgaWYgKGFjdGlvbiAhPSBB
dHRlbXB0VG9DYWNoZSkKKyAgICAgICAgICAgIHJldHVybiBhY3Rpb247CiAKLSAgICAgICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIHN0dWJKaXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRp
b25DYW5GYWlsKTsKLSAgICAgICAgaWYgKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkp
Ci0gICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0ID0gc2xvdC5pc1Vuc2V0KCkgPyBpbnZhbGlkT2Zmc2V0IDogc2xvdC5jYWNoZWRP
ZmZzZXQoKTsKICAgICAgICAgCi0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVs
dGFDYWxsVG9Eb25lKSk7Ci0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZSwgc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFD
YWxsVG9TbG93Q2FzZSkpOwotCi0gICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5lID0gRklOQUxJ
WkVfQ09ERV9GT1JfU1RVQigKLSAgICAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLCBwYXRjaEJ1
ZmZlciwKLSAgICAgICAgICAgICgiR2V0QnlJZCBzdHJpbmcgbGVuZ3RoIHN0dWIgZm9yICVzLCBy
ZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJs
b2NrKCkpLmRhdGEoKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQo
Ci0gICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSkuZXhl
Y3V0YWJsZUFkZHJlc3MoKSkpOworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBj
b25kaXRpb25TZXQ7CisgICAgICAgIGlmIChzbG90LmlzVW5zZXQoKSB8fCBzbG90LnNsb3RCYXNl
KCkgIT0gYmFzZVZhbHVlKSB7CisgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5mbygp
LnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygpIHx8IHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmIChzbG90LmlzVW5zZXQoKSkgeworICAgICAgICAgICAgICAgIGNvbmRpdGlv
blNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcygKKyAgICAgICAgICAgICAg
ICAgICAgdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwg
cHJvcGVydHlOYW1lLmltcGwoKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5
SGl0KAorICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSwgZXhlYywgc3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCksCisgICAgICAgICAgICAgICAgICAg
IHByb3BlcnR5TmFtZS5pbXBsKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG9mZnNldCA9IHNs
b3QuaXNVbnNldCgpID8gaW52YWxpZE9mZnNldCA6IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRp
dGlvbigpLm9mZnNldCgpOworICAgICAgICB9CiAKLSAgICAgICAgcmVwbGFjZVdpdGhKdW1wKHN0
dWJJbmZvLCBzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7Ci0gICAgICAgIHJl
cGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRp
b25HZXRCeUlkKTsKKyAgICAgICAgQWNjZXNzQ2FzZTo6QWNjZXNzVHlwZSB0eXBlOworICAgICAg
ICBpZiAoc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkpCisgICAgICAgICAgICB0eXBlID0gQWNjZXNz
Q2FzZTo6TG9hZDsKKyAgICAgICAgZWxzZSBpZiAoc2xvdC5pc1Vuc2V0KCkpCisgICAgICAgICAg
ICB0eXBlID0gQWNjZXNzQ2FzZTo6TWlzczsKKyAgICAgICAgZWxzZSBpZiAoc2xvdC5pc0NhY2hl
YWJsZUdldHRlcigpKQorICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6OkdldHRlcjsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6OkN1c3RvbUdldHRlcjsK
IAotICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworICAgICAgICBuZXdDYXNlID0gQWNj
ZXNzQ2FzZTo6Z2V0KAorICAgICAgICAgICAgdm0sIG93bmVyLCB0eXBlLCBvZmZzZXQsIHN0cnVj
dHVyZSwgY29uZGl0aW9uU2V0LCBsb2FkVGFyZ2V0RnJvbVByb3h5LAorICAgICAgICAgICAgc2xv
dC53YXRjaHBvaW50U2V0KCksIHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSA/IHNsb3QuY3VzdG9t
R2V0dGVyKCkgOiBudWxscHRyLAorICAgICAgICAgICAgc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgp
ID8gc2xvdC5zbG90QmFzZSgpIDogbnVsbHB0cik7CiAgICAgfQogCi0gICAgLy8gRklYTUU6IENh
Y2hlIHByb3BlcnR5IGFjY2VzcyBmb3IgaW1tZWRpYXRlcy4KLSAgICBpZiAoIWJhc2VWYWx1ZS5p
c0NlbGwoKSkKLSAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIGNvZGVQdHIgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKAorICAgICAgICB2bSwg
Y29kZUJsb2NrLCBwcm9wZXJ0eU5hbWUsIHN0ZDo6bW92ZShuZXdDYXNlKSk7CiAKLSAgICBpZiAo
IXNsb3QuaXNDYWNoZWFibGUoKSAmJiAhc2xvdC5pc1Vuc2V0KCkpCisgICAgaWYgKCFjb2RlUHRy
KQogICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKIAotICAgIEpTQ2VsbCogYmFzZUNlbGwg
PSBiYXNlVmFsdWUuYXNDZWxsKCk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlQ2Vs
bC0+c3RydWN0dXJlKCp2bSk7Ci0KLSAgICBJbmxpbmVDYWNoZUFjdGlvbiBhY3Rpb24gPSBhY3Rp
b25Gb3JDZWxsKCp2bSwgYmFzZUNlbGwpOwotICAgIGlmIChhY3Rpb24gIT0gQXR0ZW1wdFRvQ2Fj
aGUpCi0gICAgICAgIHJldHVybiBhY3Rpb247Ci0KLSAgICAvLyBPcHRpbWl6ZSBzZWxmIGFjY2Vz
cy4KLSAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkKLSAgICAgICAgJiYgc2xvdC5zbG90
QmFzZSgpID09IGJhc2VWYWx1ZQotICAgICAgICAmJiAhc2xvdC53YXRjaHBvaW50U2V0KCkKLSAg
ICAgICAgJiYgTWFjcm9Bc3NlbWJsZXI6OmlzQ29tcGFjdFB0ckFsaWduZWRBZGRyZXNzT2Zmc2V0
KG1heE9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSkp
IHsKLSAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVu
dHMoKnZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKLSAgICAgICAgcmVwYXRjaEJ5SWRTZWxmQWNj
ZXNzKCp2bSwgY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNs
b3QuY2FjaGVkT2Zmc2V0KCksIG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3QsIHRydWUpOwotICAg
ICAgICBzdHViSW5mby5pbml0R2V0QnlJZFNlbGYoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpLCBzdHJ1Y3R1cmUpOwotICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwotICAg
IH0KLQotICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLCBvcGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0KTsKKyAgICByZXBsYWNlV2l0aEp1bXAoc3R1
YkluZm8sIGNvZGVQdHIpOworICAgIAogICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CiB9CiAK
QEAgLTc2NiwxMTIgKzMyMCw2IEBAIHZvaWQgcmVwYXRjaEdldEJ5SUQoRXhlY1N0YXRlKiBleGVj
LCBKU1YKICAgICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZCk7CiB9CiAKLXN0YXRpYyB2b2lkIHBh
dGNoSnVtcFRvR2V0QnlJZFN0dWIoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBKSVRTdHVi
Um91dGluZSogc3R1YlJvdXRpbmUpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8uYWNj
ZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3QpOwotICAgIGlmIChzdHViSW5mby51Lmdl
dEJ5SWRMaXN0Lmxpc3QtPmRpZFNlbGZQYXRjaGluZygpKSB7Ci0gICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpyZXBhdGNoSnVtcCgKLSAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bi5qdW1wQXRPZmZzZXQoCi0gICAgICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxs
VG9KdW1wKSwKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2Rl
KCkuY29kZSgpKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgcmVwbGFjZVdp
dGhKdW1wKHN0dWJJbmZvLCBzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7Ci19Ci0KLXN0YXRp
YyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0
eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBpZiAoIWJh
c2VWYWx1ZS5pc0NlbGwoKQotICAgICAgICB8fCAoIXNsb3QuaXNDYWNoZWFibGUoKSAmJiAhc2xv
dC5pc1Vuc2V0KCkpKQotICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgIEpTQ2Vs
bCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7Ci0gICAgYm9vbCBsb2FkVGFyZ2V0RnJv
bVByb3h5ID0gZmFsc2U7Ci0gICAgaWYgKGJhc2VDZWxsLT50eXBlKCkgPT0gUHVyZUZvcndhcmRp
bmdQcm94eVR5cGUpIHsKLSAgICAgICAgYmFzZVZhbHVlID0ganNDYXN0PEpTUHJveHkqPihiYXNl
Q2VsbCktPnRhcmdldCgpOwotICAgICAgICBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsK
LSAgICAgICAgbG9hZFRhcmdldEZyb21Qcm94eSA9IHRydWU7Ci0gICAgfQotCi0gICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxv
Y2soKTsKLQotICAgIElubGluZUNhY2hlQWN0aW9uIGFjdGlvbiA9IGFjdGlvbkZvckNlbGwoKnZt
LCBiYXNlQ2VsbCk7Ci0gICAgaWYgKGFjdGlvbiAhPSBBdHRlbXB0VG9DYWNoZSkKLSAgICAgICAg
cmV0dXJuIGFjdGlvbjsKLQotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0
cnVjdHVyZSgqdm0pOwotICAgIFR5cGVJbmZvIHR5cGVJbmZvID0gc3RydWN0dXJlLT50eXBlSW5m
bygpOwotCi0gICAgaWYgKHN0dWJJbmZvLnBhdGNoLnNwaWxsTW9kZSA9PSBOZWVkVG9TcGlsbCkg
ewotICAgICAgICAvLyBXZSBjYW5ub3QgZG8gYXMgbXVjaCBpbmxpbmUgY2FjaGluZyBpZiB0aGUg
cmVnaXN0ZXJzIHdlcmUgbm90IGZsdXNoZWQgcHJpb3IgdG8gdGhpcyBHZXRCeUlkLiBJbiBwYXJ0
aWN1bGFyLAotICAgICAgICAvLyBub24tVmFsdWUgY2FjaGVkIHByb3BlcnRpZXMgcmVxdWlyZSBw
bGFudGluZyBjYWxscywgd2hpY2ggcmVxdWlyZXMgcmVnaXN0ZXJzIHRvIGhhdmUgYmVlbiBmbHVz
aGVkLiBUaHVzLAotICAgICAgICAvLyBpZiByZWdpc3RlcnMgd2VyZSBub3QgZmx1c2hlZCwgZG9u
J3QgZG8gbm9uLVZhbHVlIGNhY2hpbmcuCi0gICAgICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZVZh
bHVlKCkgJiYgIXNsb3QuaXNVbnNldCgpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7Ci0gICAgfQotCi0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc2xvdC5pc1Vuc2V0KCkg
PyBpbnZhbGlkT2Zmc2V0IDogc2xvdC5jYWNoZWRPZmZzZXQoKTsKLSAgICAKLSAgICBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7Ci0gICAgaWYgKHNsb3QuaXNVbnNldCgp
IHx8IHNsb3Quc2xvdEJhc2UoKSAhPSBiYXNlVmFsdWUpIHsKLSAgICAgICAgaWYgKHR5cGVJbmZv
LnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygpIHx8IHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkp
Ci0gICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICBpZiAoc2xvdC5p
c1Vuc2V0KCkpCi0gICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNG
b3JQcm9wZXJ0eU1pc3MoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBz
dHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbmRp
dGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KCp2bSwg
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBzbG90LnNsb3RC
YXNlKCksIGlkZW50LmltcGwoKSk7Ci0KLSAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxp
ZCgpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgb2Zmc2V0
ID0gc2xvdC5pc1Vuc2V0KCkgPyBpbnZhbGlkT2Zmc2V0IDogY29uZGl0aW9uU2V0LnNsb3RCYXNl
Q29uZGl0aW9uKCkub2Zmc2V0KCk7Ci0gICAgfQotICAgIAotICAgIFBvbHltb3JwaGljR2V0QnlJ
ZExpc3QqIGxpc3QgPSBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojpmcm9tKHN0dWJJbmZvKTsKLSAg
ICBpZiAobGlzdC0+aXNGdWxsKCkpIHsKLSAgICAgICAgLy8gV2UgbmVlZCB0aGlzIGV4dHJhIGNo
ZWNrIGJlY2F1c2Ugb2YgcmVjdXJzaW9uLgotICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsK
LSAgICB9Ci0gICAgCi0gICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKLSAg
ICBib29sIHJlc3VsdCA9IGdlbmVyYXRlQnlJZFN0dWIoCi0gICAgICAgIGV4ZWMsIGtpbmRGb3Io
c2xvdCksIGlkZW50LCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBjb25kaXRpb25TZXQsIHNs
b3Quc2xvdEJhc2UoKSwgb2Zmc2V0LCAKLSAgICAgICAgc3RydWN0dXJlLCBsb2FkVGFyZ2V0RnJv
bVByb3h5LCBzbG90LndhdGNocG9pbnRTZXQoKSwgCi0gICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSks
Ci0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKGxpc3QtPmN1cnJlbnRTbG93UGF0aFRhcmdldChz
dHViSW5mbykpLCBzdHViUm91dGluZSk7Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOwotICAgIAotICAgIEdldEJ5SWRBY2Nlc3M6OkFjY2Vzc1R5cGUgYWNj
ZXNzVHlwZTsKLSAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkpCi0gICAgICAgIGFjY2Vz
c1R5cGUgPSBzbG90LndhdGNocG9pbnRTZXQoKSA/IEdldEJ5SWRBY2Nlc3M6OldhdGNoZWRTdHVi
IDogR2V0QnlJZEFjY2Vzczo6U2ltcGxlU3R1YjsKLSAgICBlbHNlIGlmIChzbG90LmlzVW5zZXQo
KSkKLSAgICAgICAgYWNjZXNzVHlwZSA9IEdldEJ5SWRBY2Nlc3M6OlNpbXBsZU1pc3M7Ci0gICAg
ZWxzZSBpZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpKQotICAgICAgICBhY2Nlc3NUeXBlID0g
R2V0QnlJZEFjY2Vzczo6R2V0dGVyOwotICAgIGVsc2UKLSAgICAgICAgYWNjZXNzVHlwZSA9IEdl
dEJ5SWRBY2Nlc3M6OkN1c3RvbUdldHRlcjsKLSAgICAKLSAgICBsaXN0LT5hZGRBY2Nlc3MoR2V0
QnlJZEFjY2VzcygKLSAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBh
Y2Nlc3NUeXBlLCBzdHViUm91dGluZSwgc3RydWN0dXJlLAotICAgICAgICBjb25kaXRpb25TZXQp
KTsKLSAgICAKLSAgICBwYXRjaEp1bXBUb0dldEJ5SWRTdHViKHN0dWJJbmZvLCBzdHViUm91dGlu
ZS5nZXQoKSk7Ci0gICAgCi0gICAgcmV0dXJuIGxpc3QtPmlzRnVsbCgpID8gR2l2ZVVwT25DYWNo
ZSA6IFJldHJ5Q2FjaGVMYXRlcjsKLX0KLQotdm9pZCBidWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8p
Ci17Ci0gICAgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoZXhlYy0+Y29kZUJsb2Nr
KCktPm1fbG9jaywgZXhlYy0+dm0oKS5oZWFwKTsKLSAgICAKLSAgICBpZiAodHJ5QnVpbGRHZXRC
eUlETGlzdChleGVjLCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8pID09
IEdpdmVVcE9uQ2FjaGUpCi0gICAgICAgIHJlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWQpOwotfQotCiBzdGF0
aWMgVl9KSVRPcGVyYXRpb25fRVNzaUpKSSBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rp
b24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRLaW5kIHB1dEtpbmQpCiB7CiAgICAg
aWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpIHsKQEAgLTg4NCwzNTkgKzMzMiwxNiBAQCBzdGF0aWMg
Vl9KSVRPcGVyYXRpb25fRVNzaUpKSSBhcHByb3ByaWF0CiAgICAgcmV0dXJuIG9wZXJhdGlvblB1
dEJ5SWROb25TdHJpY3Q7CiB9CiAKLXN0YXRpYyBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJIGFwcHJv
cHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5U2xvdCAm
c2xvdCwgUHV0S2luZCBwdXRLaW5kKQorc3RhdGljIFZfSklUT3BlcmF0aW9uX0VTc2lKSkkgYXBw
cm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5U2xvdCAm
c2xvdCwgUHV0S2luZCBwdXRLaW5kKQogewogICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKSB7
CiAgICAgICAgIGlmIChwdXRLaW5kID09IERpcmVjdCkKLSAgICAgICAgICAgIHJldHVybiBvcGVy
YXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0QnVpbGRMaXN0OwotICAgICAgICByZXR1cm4gb3BlcmF0
aW9uUHV0QnlJZFN0cmljdEJ1aWxkTGlzdDsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25Q
dXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7CisgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRC
eUlkU3RyaWN0T3B0aW1pemU7CiAgICAgfQogICAgIGlmIChwdXRLaW5kID09IERpcmVjdCkKLSAg
ICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RCdWlsZExpc3Q7Ci0g
ICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3Q7Ci19Ci0KLXN0YXRp
YyBib29sIGVtaXRQdXRSZXBsYWNlU3R1YigKLSAgICBFeGVjU3RhdGUqIGV4ZWMsCi0gICAgY29u
c3QgSWRlbnRpZmllciYsCi0gICAgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LAotICAgIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKLSAg
ICBDb2RlTG9jYXRpb25MYWJlbCBmYWlsdXJlTGFiZWwsCi0gICAgUmVmUHRyPEpJVFN0dWJSb3V0
aW5lPiYgc3R1YlJvdXRpbmUpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgR1BS
UmVnIGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmJhc2VHUFIp
OwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgR1BSUmVnIHZhbHVlVGFnR1BSID0gc3RhdGlj
X2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZVRhZ0dQUik7Ci0jZW5kaWYKLSAgICBH
UFJSZWcgdmFsdWVHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVl
R1BSKTsKLQotICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1YkluZm8u
cGF0Y2gudXNlZFJlZ2lzdGVycyk7Ci0gICAgYWxsb2NhdG9yLmxvY2soYmFzZUdQUik7Ci0jaWYg
VVNFKEpTVkFMVUUzMl82NCkKLSAgICBhbGxvY2F0b3IubG9jayh2YWx1ZVRhZ0dQUik7Ci0jZW5k
aWYKLSAgICBhbGxvY2F0b3IubG9jayh2YWx1ZUdQUik7Ci0gICAgCi0gICAgR1BSUmVnIHNjcmF0
Y2hHUFIxID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwotCi0gICAgQ0NhbGxIZWxw
ZXJzIHN0dWJKaXQodm0sIGV4ZWMtPmNvZGVCbG9jaygpKTsKLQotICAgIHNpemVfdCBudW1iZXJP
ZlBhZGRpbmdCeXRlcyA9IGFsbG9jYXRvci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGlu
ZyhzdHViSml0KTsKLQotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGJhZFN0cnVjdHVyZSA9IHN0
dWJKaXQuYnJhbmNoU3RydWN0dXJlKAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0
dXJlSURPZmZzZXQoKSksCi0gICAgICAgIHN0cnVjdHVyZSk7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkKLSAgICAgICAg
c3R1YkppdC5zdG9yZTY0KHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3Jh
Z2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKLSAgICBlbHNlIHsK
LSAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgc3R1
YkppdC5zdG9yZTY0KHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BS
MSwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1
ZSkpKTsKLSAgICB9Ci0jZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIGlmIChpc0lubGluZU9m
ZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkgewotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFs
dWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRP
ZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNl
dCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNj
cmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVl
VGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0
T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZz
ZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVz
Y3JpcHRvciwgYXNCaXRzLnRhZykpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBzdHViSml0Lmxv
YWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgc2NyYXRjaEdQUjEpOwotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVH
UFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZs
eShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRP
RihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKLSAgICAgICAgc3R1
YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNo
R1BSMSwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNW
YWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRh
ZykpKTsKLSAgICB9Ci0jZW5kaWYKLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNj
ZXNzOwotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhaWx1cmU7Ci0gICAgCi0gICAgaWYgKGFs
bG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygpKSB7Ci0gICAgICAgIGFsbG9jYXRvci5yZXN0b3Jl
UmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKHN0dWJKaXQsIG51bWJlck9mUGFkZGluZ0J5dGVzKTsK
LSAgICAgICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOwotICAgICAgICAKLSAgICAgICAgYmFk
U3RydWN0dXJlLmxpbmsoJnN0dWJKaXQpOwotICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNl
ZFJlZ2lzdGVyc0J5UG9wcGluZyhzdHViSml0LCBudW1iZXJPZlBhZGRpbmdCeXRlcyk7Ci0gICAg
ICAgIGZhaWx1cmUgPSBzdHViSml0Lmp1bXAoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBzdWNj
ZXNzID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgICAgIGZhaWx1cmUgPSBiYWRTdHJ1Y3R1cmU7Ci0g
ICAgfQotICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCBzdHViSml0LCBleGVj
LT5jb2RlQmxvY2soKSwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKLSAgICBpZiAocGF0Y2hCdWZm
ZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAg
IHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxh
YmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSk7Ci0gICAgcGF0Y2hC
dWZmZXIubGluayhmYWlsdXJlLCBmYWlsdXJlTGFiZWwpOwotICAgICAgICAgICAgCi0gICAgc3R1
YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAotICAgICAgICBleGVjLT5jb2RlQmxv
Y2soKSwgcGF0Y2hCdWZmZXIsCi0gICAgICAgICgiUHV0QnlJZCByZXBsYWNlIHN0dWIgZm9yICVz
LCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAgICAgdG9DU3RyaW5nKCpleGVjLT5jb2RlQmxv
Y2soKSkuZGF0YSgpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgK
LSAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpKTsKLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGJvb2wg
ZW1pdFB1dFRyYW5zaXRpb25TdHViKAotICAgIEV4ZWNTdGF0ZSogZXhlYywgVk0qIHZtLCBTdHJ1
Y3R1cmUqJiBzdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCAKLSAgICBjb25zdCBQ
dXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2lu
ZCBwdXRLaW5kLAotICAgIFN0cnVjdHVyZSomIG9sZFN0cnVjdHVyZSwgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkKLXsKLSAgICBQcm9wZXJ0eU5hbWUgcG5hbWUoaWRl
bnQpOwotICAgIG9sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICBpZiAoIW9sZFN0cnVjdHVy
ZS0+aXNPYmplY3QoKSB8fCBvbGRTdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpIHx8IHBhcnNlSW5k
ZXgocG5hbWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBQcm9wZXJ0eU9mZnNldCBw
cm9wZXJ0eU9mZnNldDsKLSAgICBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJh
bnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkob2xkU3RydWN0dXJlLCBpZGVu
dC5pbXBsKCksIDAsIHByb3BlcnR5T2Zmc2V0KTsKLQotICAgIGlmICghc3RydWN0dXJlIHx8ICFz
dHJ1Y3R1cmUtPmlzT2JqZWN0KCkgfHwgc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSB8fCAhc3Ry
dWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIGEg
cmVhbGxvYywgaWYgd2UgZG9uJ3QgaGF2ZQotICAgIC8vIGVub3VnaCByZWdpc3RlcnMgdG8gbWFr
ZSBpdCBoYXBwZW4uCi0gICAgaWYgKEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzIDwgNgotICAg
ICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpCi0gICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gU2tpcCBv
cHRpbWl6aW5nIHRoZSBjYXNlIHdoZXJlIHdlIG5lZWQgcmVhbGxvYywgYW5kIHRoZSBzdHJ1Y3R1
cmUgaGFzCi0gICAgLy8gaW5kZXhpbmcgc3RvcmFnZS4KLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
bid0IHNraXAgdGhpcyEgSW1wbGVtZW50IGl0IQotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzA5MTQKLSAgICBpZiAob2xkU3RydWN0dXJlLT5jb3VsZEhh
dmVJbmRleGluZ0hlYWRlcigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAocHV0
S2luZCA9PSBOb3REaXJlY3QpIHsKLSAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25k
aXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzKAotICAgICAgICAgICAgKnZtLCBleGVjLT5jb2Rl
QmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgaWRlbnQuaW1wbCgp
KTsKLSAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIENvZGVMb2NhdGlvbkxhYmVsIGZhaWx1cmVMYWJlbCA9
IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNo
LmRlbHRhQ2FsbFRvU2xvd0Nhc2UpOwotICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4mIHN0dWJS
b3V0aW5lID0gc3R1YkluZm8uc3R1YlJvdXRpbmU7Ci0KLSAgICBHUFJSZWcgYmFzZUdQUiA9IHN0
YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guYmFzZUdQUik7Ci0jaWYgVVNFKEpTVkFM
VUUzMl82NCkKLSAgICBHUFJSZWcgdmFsdWVUYWdHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0
dWJJbmZvLnBhdGNoLnZhbHVlVGFnR1BSKTsKLSNlbmRpZgotICAgIEdQUlJlZyB2YWx1ZUdQUiA9
IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVHUFIpOwotICAgIAotICAg
IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1YkluZm8ucGF0Y2gudXNlZFJl
Z2lzdGVycyk7Ci0gICAgYWxsb2NhdG9yLmxvY2soYmFzZUdQUik7Ci0jaWYgVVNFKEpTVkFMVUUz
Ml82NCkKLSAgICBhbGxvY2F0b3IubG9jayh2YWx1ZVRhZ0dQUik7Ci0jZW5kaWYKLSAgICBhbGxv
Y2F0b3IubG9jayh2YWx1ZUdQUik7Ci0gICAgCi0gICAgQ0NhbGxIZWxwZXJzIHN0dWJKaXQodm0p
OwotICAgIAotICAgIGJvb2wgbmVlZFRoaXJkU2NyYXRjaCA9IGZhbHNlOwotICAgIGlmIChzdHJ1
Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpCi0gICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewot
ICAgICAgICBuZWVkVGhpcmRTY3JhdGNoID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBHUFJSZWcgc2Ny
YXRjaEdQUjEgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7Ci0gICAgQVNTRVJUKHNj
cmF0Y2hHUFIxICE9IGJhc2VHUFIpOwotICAgIEFTU0VSVChzY3JhdGNoR1BSMSAhPSB2YWx1ZUdQ
Uik7Ci0gICAgCi0gICAgR1BSUmVnIHNjcmF0Y2hHUFIyID0gYWxsb2NhdG9yLmFsbG9jYXRlU2Ny
YXRjaEdQUigpOwotICAgIEFTU0VSVChzY3JhdGNoR1BSMiAhPSBiYXNlR1BSKTsKLSAgICBBU1NF
UlQoc2NyYXRjaEdQUjIgIT0gdmFsdWVHUFIpOwotICAgIEFTU0VSVChzY3JhdGNoR1BSMiAhPSBz
Y3JhdGNoR1BSMSk7Ci0KLSAgICBHUFJSZWcgc2NyYXRjaEdQUjM7Ci0gICAgaWYgKG5lZWRUaGly
ZFNjcmF0Y2gpIHsKLSAgICAgICAgc2NyYXRjaEdQUjMgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3Jh
dGNoR1BSKCk7Ci0gICAgICAgIEFTU0VSVChzY3JhdGNoR1BSMyAhPSBiYXNlR1BSKTsKLSAgICAg
ICAgQVNTRVJUKHNjcmF0Y2hHUFIzICE9IHZhbHVlR1BSKTsKLSAgICAgICAgQVNTRVJUKHNjcmF0
Y2hHUFIzICE9IHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIzICE9IHNj
cmF0Y2hHUFIyKTsKLSAgICB9IGVsc2UKLSAgICAgICAgc2NyYXRjaEdQUjMgPSBJbnZhbGlkR1BS
UmVnOwotICAgIAotICAgIHNpemVfdCBudW1iZXJPZlBhZGRpbmdCeXRlcyA9IGFsbG9jYXRvci5w
cmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhzdHViSml0KTsKLQotICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7Ci0gICAgICAgICAgICAKLSAgICBBU1NFUlQo
b2xkU3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgp
KTsKLSAgICAKLSAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoU3RydWN0dXJl
KAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIAotICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCAKLSAg
ICAgICAgb2xkU3RydWN0dXJlKSk7Ci0gICAgCi0gICAgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbnMoCi0gICAgICAgIGNvbmRpdGlvblNldCwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZv
LCBzdHViSml0LCBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIxKTsKLQotICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKLSAgICAKLSAgICBib29sIHNjcmF0Y2hHUFIxSGFzU3Rv
cmFnZSA9IGZhbHNlOwotICAgIAotICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCkgIT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgIHNpemVf
dCBuZXdTaXplID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFs
dWUpOwotICAgICAgICBDb3BpZWRBbGxvY2F0b3IqIGNvcGllZEFsbG9jYXRvciA9ICZ2bS0+aGVh
cC5zdG9yYWdlQWxsb2NhdG9yKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIW9sZFN0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKCZj
b3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZywgc2NyYXRjaEdQUjEpOwotICAgICAg
ICAgICAgc2xvd1BhdGguYXBwZW5kKHN0dWJKaXQuYnJhbmNoU3ViUHRyKE1hY3JvQXNzZW1ibGVy
OjpTaWduZWQsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobmV3U2l6ZSksIHNjcmF0Y2hH
UFIxKSk7Ci0gICAgICAgICAgICBzdHViSml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIxLCAmY29waWVk
QWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcpOwotICAgICAgICAgICAgc3R1YkppdC5uZWdQ
dHIoc2NyYXRjaEdQUjEpOwotICAgICAgICAgICAgc3R1YkppdC5hZGRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFic29sdXRlQWRkcmVzcygmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRQYXlsb2FkRW5k
KSwgc2NyYXRjaEdQUjEpOwotICAgICAgICAgICAgc3R1YkppdC5hZGRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG9sZFN0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKLSAgICAgICAgICAgIEFTU0VSVChu
ZXdTaXplID4gb2xkU2l6ZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN0dWJKaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMyk7Ci0gICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoJmNv
cGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAg
ICAgICBzbG93UGF0aC5hcHBlbmQoc3R1YkppdC5icmFuY2hTdWJQdHIoTWFjcm9Bc3NlbWJsZXI6
OlNpZ25lZCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRjaEdQ
UjEpKTsKLSAgICAgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjEsICZjb3BpZWRB
bGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZyk7Ci0gICAgICAgICAgICBzdHViSml0Lm5lZ1B0
cihzY3JhdGNoR1BSMSk7Ci0gICAgICAgICAgICBzdHViSml0LmFkZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWJzb2x1dGVBZGRyZXNzKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQp
LCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgICAgICBzdHViSml0LmFkZFB0cihNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAg
ICAgIC8vIFdlIGhhdmUgc2NyYXRjaEdQUjEgPSBuZXcgc3RvcmFnZSwgc2NyYXRjaEdQUjMgPSBv
bGQgc3RvcmFnZSwgc2NyYXRjaEdQUjIgPSBhdmFpbGFibGUKLSAgICAgICAgICAgIGZvciAoc2l6
ZV90IG9mZnNldCA9IDA7IG9mZnNldCA8IG9sZFNpemU7IG9mZnNldCArPSBzaXplb2Yodm9pZCop
KSB7Ci0gICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHNjcmF0Y2hHUFIzLCAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihvZmZzZXQgKyBzaXplb2Yo
SlNWYWx1ZSkgKyBzaXplb2Yodm9pZCopKSksIHNjcmF0Y2hHUFIyKTsKLSAgICAgICAgICAgICAg
ICBzdHViSml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIyLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
Y3JhdGNoR1BSMSwgLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4ob2Zmc2V0ICsgc2l6ZW9mKEpTVmFs
dWUpICsgc2l6ZW9mKHZvaWQqKSkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgc3R1YkppdC5zdG9yZVB0cihzY3JhdGNoR1BSMSwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7Ci0gICAgICAg
IHNjcmF0Y2hHUFIxSGFzU3RvcmFnZSA9IHRydWU7Ci0gICAgfQotCi0gICAgQVNTRVJUKG9sZFN0
cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCkgPT0gc3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUo
KSk7Ci0gICAgQVNTRVJUKG9sZFN0cnVjdHVyZS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3Mo
KSA9PSBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdzKCkpOwotICAgIEFTU0VS
VChvbGRTdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpID09IHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBl
KCkpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgdWludDMyX3QgdmFsID0gc3RydWN0dXJlLT5p
ZCgpOwotI2Vsc2UKLSAgICB1aW50MzJfdCB2YWwgPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90
PihzdHJ1Y3R1cmUtPmlkKCkpOwotI2VuZGlmCi0gICAgc3R1YkppdC5zdG9yZTMyKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIodmFsKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpCi0gICAgICAgIHN0dWJK
aXQuc3RvcmU2NCh2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNP
YmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNs
b3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7Ci0gICAgZWxzZSB7Ci0gICAg
ICAgIGlmICghc2NyYXRjaEdQUjFIYXNTdG9yYWdlKQotICAgICAgICAgICAgc3R1YkppdC5sb2Fk
UHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlP
ZmZzZXQoKSksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTY0KHZhbHVlR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5CdXR0ZXJmbHko
c2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKLSAgICB9Ci0jZWxpZiBV
U0UoSlNWQUxVRTMyXzY0KQotICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNl
dCgpKSkgewotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9m
ZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVl
KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9h
ZCkpKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBv
ZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1
ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykp
KTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoIXNjcmF0Y2hHUFIxSGFzU3RvcmFnZSkKLSAg
ICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIHN0
dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQ
UjEsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFs
dWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXls
b2FkKSkpOwotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9m
ZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVE
ZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwotICAgIH0KLSNlbmRpZgotICAgIAotICAgIFNjcmF0
Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSBudWxscHRyOwotCi0jaWYgRU5BQkxFKEdHQykKLSAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXI7Ci0gICAg
aWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9m
TGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3duZXJJc1Jl
bWVtYmVyZWRPckluRWRlbiA9IHN0dWJKaXQuanVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4oYmFz
ZUdQUik7Ci0gICAgICAgIFdyaXRlQmFycmllckJ1ZmZlciYgd3JpdGVCYXJyaWVyQnVmZmVyID0g
c3R1YkppdC52bSgpLT5oZWFwLndyaXRlQmFycmllckJ1ZmZlcigpOwotICAgICAgICBzdHViSml0
LmxvYWQzMih3cml0ZUJhcnJpZXJCdWZmZXIuY3VycmVudEluZGV4QWRkcmVzcygpLCBzY3JhdGNo
R1BSMik7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5lZWRUb0ZsdXNoID0KLSAgICAg
ICAgICAgIHN0dWJKaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc2Ny
YXRjaEdQUjIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIod3JpdGVCYXJyaWVyQnVmZmVy
LmNhcGFjaXR5KCkpKTsKLQotICAgICAgICBzdHViSml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoMSksIHNjcmF0Y2hHUFIyKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHNj
cmF0Y2hHUFIyLCB3cml0ZUJhcnJpZXJCdWZmZXIuY3VycmVudEluZGV4QWRkcmVzcygpKTsKLQot
ICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIod3JpdGVC
YXJyaWVyQnVmZmVyLmJ1ZmZlcigpKSwgc2NyYXRjaEdQUjEpOwotICAgICAgICAvLyBXZSB1c2Ug
YW4gb2Zmc2V0IG9mIC1zaXplb2Yodm9pZCopIGJlY2F1c2Ugd2UgYWxyZWFkeSBhZGRlZCAxIHRv
IHNjcmF0Y2hHUFIyLgotICAgICAgICBzdHViSml0LnN0b3JlUHRyKGJhc2VHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgoc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBNYWNyb0Fzc2VtYmxl
cjo6U2NhbGVQdHIsIHN0YXRpY19jYXN0PGludDMyX3Q+KC1zaXplb2Yodm9pZCopKSkpOwotCi0g
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmVXaXRoQmFycmllciA9IHN0dWJKaXQuanVt
cCgpOwotICAgICAgICBuZWVkVG9GbHVzaC5saW5rKCZzdHViSml0KTsKLQotICAgICAgICBzY3Jh
dGNoQnVmZmVyID0gdm0tPnNjcmF0Y2hCdWZmZXJGb3JTaXplKGFsbG9jYXRvci5kZXNpcmVkU2Ny
YXRjaEJ1ZmZlclNpemVGb3JDYWxsKCkpOwotICAgICAgICBhbGxvY2F0b3IucHJlc2VydmVVc2Vk
UmVnaXN0ZXJzVG9TY3JhdGNoQnVmZmVyRm9yQ2FsbChzdHViSml0LCBzY3JhdGNoQnVmZmVyLCBz
Y3JhdGNoR1BSMik7Ci0gICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KGJhc2VHUFIpOwotICAgICAgICBjYWxsRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIgPSBzdHViSml0
LmNhbGwoKTsKLSAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVVc2VkUmVnaXN0ZXJzRnJvbVNjcmF0
Y2hCdWZmZXJGb3JDYWxsKHN0dWJKaXQsIHNjcmF0Y2hCdWZmZXIsIHNjcmF0Y2hHUFIyKTsKLQot
ICAgICAgICBkb25lV2l0aEJhcnJpZXIubGluaygmc3R1YkppdCk7Ci0gICAgICAgIG93bmVySXNS
ZW1lbWJlcmVkT3JJbkVkZW4ubGluaygmc3R1YkppdCk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzOwotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZh
aWx1cmU7Ci0gICAgICAgICAgICAKLSAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJz
KCkpIHsKLSAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmco
c3R1YkppdCwgbnVtYmVyT2ZQYWRkaW5nQnl0ZXMpOwotICAgICAgICBzdWNjZXNzID0gc3R1Ykpp
dC5qdW1wKCk7Ci0KLSAgICAgICAgZmFpbHVyZUNhc2VzLmxpbmsoJnN0dWJKaXQpOwotICAgICAg
ICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhzdHViSml0LCBudW1i
ZXJPZlBhZGRpbmdCeXRlcyk7Ci0gICAgICAgIGZhaWx1cmUgPSBzdHViSml0Lmp1bXAoKTsKLSAg
ICB9IGVsc2UKLSAgICAgICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOwotICAgIAotICAgIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIG9wZXJhdGlvbkNhbGw7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgc3VjY2Vzc0luU2xvd1BhdGg7Ci0gICAgCi0gICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAg
ICAgc2xvd1BhdGgubGluaygmc3R1YkppdCk7Ci0gICAgICAgIAotICAgICAgICBhbGxvY2F0b3Iu
cmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhzdHViSml0LCBudW1iZXJPZlBhZGRpbmdC
eXRlcyk7Ci0gICAgICAgIGlmICghc2NyYXRjaEJ1ZmZlcikKLSAgICAgICAgICAgIHNjcmF0Y2hC
dWZmZXIgPSB2bS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoYWxsb2NhdG9yLmRlc2lyZWRTY3JhdGNo
QnVmZmVyU2l6ZUZvckNhbGwoKSk7Ci0gICAgICAgIGFsbG9jYXRvci5wcmVzZXJ2ZVVzZWRSZWdp
c3RlcnNUb1NjcmF0Y2hCdWZmZXJGb3JDYWxsKHN0dWJKaXQsIHNjcmF0Y2hCdWZmZXIsIHNjcmF0
Y2hHUFIxKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBzdHViSml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShiYXNlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihz
dHJ1Y3R1cmUpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNsb3QuY2FjaGVkT2Zmc2V0
KCkpLCB2YWx1ZUdQUik7Ci0jZWxzZQotICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShiYXNlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1
cmUpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNsb3QuY2FjaGVkT2Zmc2V0KCkpLCB2
YWx1ZUdQUiwgdmFsdWVUYWdHUFIpOwotI2VuZGlmCi0gICAgICAgIG9wZXJhdGlvbkNhbGwgPSBz
dHViSml0LmNhbGwoKTsKLSAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVVc2VkUmVnaXN0ZXJzRnJv
bVNjcmF0Y2hCdWZmZXJGb3JDYWxsKHN0dWJKaXQsIHNjcmF0Y2hCdWZmZXIsIHNjcmF0Y2hHUFIx
KTsKLSAgICAgICAgc3VjY2Vzc0luU2xvd1BhdGggPSBzdHViSml0Lmp1bXAoKTsKLSAgICB9Ci0g
ICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIHN0dWJKaXQsIGV4ZWMtPmNvZGVC
bG9jaygpLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwotICAgIGlmIChwYXRjaEJ1ZmZlci5kaWRG
YWlsVG9BbGxvY2F0ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgcGF0Y2hC
dWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9m
ZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpKTsKLSAgICBpZiAoYWxsb2NhdG9y
LmRpZFJldXNlUmVnaXN0ZXJzKCkpCi0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZSwg
ZmFpbHVyZUxhYmVsKTsKLSAgICBlbHNlCi0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVy
ZUNhc2VzLCBmYWlsdXJlTGFiZWwpOwotICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFj
aXR5KCkgIT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgIHBh
dGNoQnVmZmVyLmxpbmsob3BlcmF0aW9uQ2FsbCwgb3BlcmF0aW9uUmVhbGxvY2F0ZVN0b3JhZ2VB
bmRGaW5pc2hQdXQpOwotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3NJblNsb3dQYXRo
LCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRj
aC5kZWx0YUNhbGxUb0RvbmUpKTsKLSNpZiBFTkFCTEUoR0dDKQotICAgICAgICBwYXRjaEJ1ZmZl
ci5saW5rKGNhbGxGbHVzaFdyaXRlQmFycmllckJ1ZmZlciwgb3BlcmF0aW9uRmx1c2hXcml0ZUJh
cnJpZXJCdWZmZXIpOwotI2VuZGlmCi0gICAgfQotICAgIAotICAgIHN0dWJSb3V0aW5lID0KLSAg
ICAgICAgY3JlYXRlSklUU3R1YlJvdXRpbmUoCi0gICAgICAgICAgICBGSU5BTElaRV9DT0RFX0ZP
UigKLSAgICAgICAgICAgICAgICBleGVjLT5jb2RlQmxvY2soKSwgcGF0Y2hCdWZmZXIsCi0gICAg
ICAgICAgICAgICAgKCJQdXRCeUlkICVzdHJhbnNpdGlvbiBzdHViICglcCAtPiAlcCkgZm9yICVz
LCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPm91dE9m
TGluZUNhcGFjaXR5KCkgIT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpID8gInJl
YWxsb2NhdGluZyAiIDogIiIsCi0gICAgICAgICAgICAgICAgICAgIG9sZFN0cnVjdHVyZSwgc3Ry
dWN0dXJlLAotICAgICAgICAgICAgICAgICAgICB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygp
KS5kYXRhKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAotICAg
ICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKS5leGVj
dXRhYmxlQWRkcmVzcygpKSksCi0gICAgICAgICAgICAqdm0sCi0gICAgICAgICAgICBleGVjLT5j
b2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCksCi0gICAgICAgICAgICBzdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkgIT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLAot
ICAgICAgICAgICAgc3RydWN0dXJlKTsKLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
cmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICByZXR1
cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOwogfQogCiBzdGF0aWMgSW5saW5l
Q2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNl
VmFsdWUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29u
c3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1
dEtpbmQgcHV0S2luZCkKQEAgLTEyNDUsNyArMzUwLDggQEAgc3RhdGljIElubGluZUNhY2hlQWN0
aW9uIHRyeUNhY2hlUHV0QnlJRAogICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKICAgICAK
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOworICAgIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyID0gY29kZUJsb2Nr
LT5vd25lclNjcmlwdEV4ZWN1dGFibGUoKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogCiAg
ICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCiAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hl
OwpAQCAtMTI1NiwyMTAgKzM2MiwxMDggQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNh
Y2hlUHV0QnlJRAogICAgIGlmICghc3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVh
YmxlKCkpCiAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogCi0gICAgLy8gT3B0aW1pemUg
c2VsZiBhY2Nlc3MuCisgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IG5ld0Nhc2U7CisK
ICAgICBpZiAoc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlICYmIHNsb3QuaXNDYWNoZWFibGVQdXQo
KSkgewotICAgICAgICBpZiAoc2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpOZXdQcm9w
ZXJ0eSkgeworICAgICAgICBpZiAoc2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpFeGlz
dGluZ1Byb3BlcnR5KSB7CisgICAgICAgICAgICBzdHJ1Y3R1cmUtPmRpZENhY2hlUHJvcGVydHlS
ZXBsYWNlbWVudCh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgIAorICAgICAgICAg
ICAgcHRyZGlmZl90IG9mZnNldFRvUGF0Y2hlZFN0b3JhZ2UgPSBvZmZzZXRSZWxhdGl2ZVRvUGF0
Y2hlZFN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgICAgICBpZiAoc3R1Yklu
Zm8uY2FjaGVUeXBlID09IENhY2hlVHlwZTo6VW5zZXQKKyAgICAgICAgICAgICAgICAmJiBNYWNy
b0Fzc2VtYmxlcjo6aXNQdHJBbGlnbmVkQWRkcmVzc09mZnNldChvZmZzZXRUb1BhdGNoZWRTdG9y
YWdlKQorICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdh
dGNocG9pbnQoKSkgeworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJlcGF0Y2hC
eUlkU2VsZkFjY2VzcygKKyAgICAgICAgICAgICAgICAgICAgY29kZUJsb2NrLCBzdHViSW5mbywg
c3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLAorICAgICAgICAgICAgICAgICAgICBhcHBy
b3ByaWF0ZU9wdGltaXppbmdQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCksIGZhbHNlKTsK
KyAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0UHV0QnlJZFJlcGxhY2UoCisgICAgICAgICAg
ICAgICAgICAgIHZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUsIHNs
b3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0
ZXI7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJl
OwotICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0Owot
ICAgICAgICAgICAgaWYgKCFlbWl0UHV0VHJhbnNpdGlvblN0dWIoZXhlYywgdm0sIHN0cnVjdHVy
ZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kLCBvbGRTdHJ1Y3R1cmUsIGNvbmRpdGlv
blNldCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAg
ICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6cmVwbGFjZSh2bSwgb3duZXIsIHN0cnVjdHVyZSwgc2xv
dC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQo
c2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpOZXdQcm9wZXJ0eSk7CiAKLSAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcCgKLSAgICAgICAgICAgICAgICBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KAotICAgICAgICAgICAgICAgICAgICBz
dHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1bXApLAotICAgICAgICAgICAgICAgIENvZGVMb2Nh
dGlvbkxhYmVsKHN0dWJJbmZvLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgICAg
ICAgICByZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwg
YXBwcm9wcmlhdGVMaXN0QnVpbGRpbmdQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBzdHViSW5mby5pbml0UHV0QnlJZFRyYW5zaXRpb24o
KnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBvbGRTdHJ1Y3R1cmUsIHN0cnVjdHVy
ZSwgY29uZGl0aW9uU2V0LCBwdXRLaW5kID09IERpcmVjdCk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIGlm
ICghc3RydWN0dXJlLT5pc09iamVjdCgpIHx8IHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAKLSAgICAgICAgaWYgKCFNYWNy
b0Fzc2VtYmxlcjo6aXNQdHJBbGlnbmVkQWRkcmVzc09mZnNldChvZmZzZXRSZWxhdGl2ZVRvUGF0
Y2hlZFN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpKQotICAgICAgICAgICAgcmV0dXJuIEdp
dmVVcE9uQ2FjaGU7CisgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CisgICAgICAg
ICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9CisgICAgICAgICAgICAgICAgU3RydWN0dXJl
OjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KAor
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSwgMCwgb2Zmc2V0KTsK
KyAgICAgICAgICAgIGlmICghbmV3U3RydWN0dXJlIHx8ICFuZXdTdHJ1Y3R1cmUtPnByb3BlcnR5
QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25D
YWNoZTsKIAotICAgICAgICBzdHJ1Y3R1cmUtPmRpZENhY2hlUHJvcGVydHlSZXBsYWNlbWVudCgq
dm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwotICAgICAgICByZXBhdGNoQnlJZFNlbGZBY2Nlc3Mo
KnZtLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIGlkZW50LCBzbG90LmNhY2hlZE9m
ZnNldCgpLCBhcHByb3ByaWF0ZUxpc3RCdWlsZGluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRL
aW5kKSwgZmFsc2UpOwotICAgICAgICBzdHViSW5mby5pbml0UHV0QnlJZFJlcGxhY2UoKnZtLCBj
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUpOwotICAgICAgICByZXR1cm4g
UmV0cnlDYWNoZUxhdGVyOwotICAgIH0KKyAgICAgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUt
PnByZXZpb3VzSUQoKSA9PSBzdHJ1Y3R1cmUpOworICAgICAgICAgICAgQVNTRVJUKCFuZXdTdHJ1
Y3R1cmUtPmlzRGljdGlvbmFyeSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUt
PmlzT2JqZWN0KCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCBjb25kaXRpb25TZXQ7CisgICAgICAgICAgICBpZiAocHV0S2luZCA9PSBOb3RE
aXJlY3QpIHsKKyAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPQorICAgICAgICAgICAgICAg
ICAgICBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3MoCisgICAgICAgICAg
ICAgICAgICAgICAgICB2bSwgb3duZXIsIGV4ZWMsIG5ld1N0cnVjdHVyZSwgaWRlbnQuaW1wbCgp
KTsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgfQogCi0gICAg
aWYgKChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgfHwgc2xvdC5pc0NhY2hlYWJsZVNldHRlcigp
KQotICAgICAgICAmJiBzdHViSW5mby5wYXRjaC5zcGlsbE1vZGUgPT0gRG9udFNwaWxsKSB7Ci0g
ICAgICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7CisgICAgICAgICAgICBu
ZXdDYXNlID0gQWNjZXNzQ2FzZTo6dHJhbnNpdGlvbih2bSwgb3duZXIsIHN0cnVjdHVyZSwgbmV3
U3RydWN0dXJlLCBvZmZzZXQsIGNvbmRpdGlvblNldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2Ug
aWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSB8fCBzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkp
IHsKKyAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkgeworICAgICAgICAgICAg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OwogCi0gICAgICAgIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKLSAgICAgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0OwotICAgICAgICBpZiAoc2xvdC5iYXNlKCkgIT0gYmFzZVZhbHVlKSB7Ci0gICAg
ICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpKSB7CisgICAgICAgICAgICBpZiAo
c2xvdC5iYXNlKCkgIT0gYmFzZVZhbHVlKSB7CiAgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0
ID0KICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJv
cGVydHlIaXRDdXN0b20oCi0gICAgICAgICAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5iYXNlKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICBpZGVudC5pbXBsKCkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPQotICAgICAgICAgICAgICAgICAgICBnZW5lcmF0
ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKLSAgICAgICAgICAgICAgICAgICAg
ICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBz
bG90LmJhc2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50LmltcGwoKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB2bSwgb3duZXIsIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5iYXNl
KCksIGlkZW50LmltcGwoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNW
YWxpZCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgIG9mZnNldCA9IHNs
b3QuaXNDYWNoZWFibGVDdXN0b20oKSA/IGludmFsaWRPZmZzZXQgOiBjb25kaXRpb25TZXQuc2xv
dEJhc2VDb25kaXRpb24oKS5vZmZzZXQoKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBv
ZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOwotCi0gICAgICAgIFBvbHltb3JwaGljUHV0QnlJ
ZExpc3QqIGxpc3Q7Ci0gICAgICAgIGxpc3QgPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojpmcm9t
KHB1dEtpbmQsIHN0dWJJbmZvKTsKLQotICAgICAgICBib29sIHJlc3VsdCA9IGdlbmVyYXRlQnlJ
ZFN0dWIoCi0gICAgICAgICAgICBleGVjLCBraW5kRm9yKHNsb3QpLCBpZGVudCwgY3VzdG9tRm9y
KHNsb3QpLCBzdHViSW5mbywgY29uZGl0aW9uU2V0LCBzbG90LmJhc2UoKSwKLSAgICAgICAgICAg
IG9mZnNldCwgc3RydWN0dXJlLCBmYWxzZSwgbnVsbHB0ciwKLSAgICAgICAgICAgIHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2Fs
bFRvRG9uZSksCi0gICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxB
dE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKSwKLSAgICAgICAgICAg
IHN0dWJSb3V0aW5lKTsKLSAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAgICByZXR1cm4g
R2l2ZVVwT25DYWNoZTsKLSAgICAgICAgCi0gICAgICAgIGxpc3QtPmFkZEFjY2VzcyhQdXRCeUlk
QWNjZXNzOjpzZXR0ZXIoCi0gICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksCi0gICAgICAgICAgICBzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkgPyBQdXRCeUlkQWNj
ZXNzOjpTZXR0ZXIgOiBQdXRCeUlkQWNjZXNzOjpDdXN0b21TZXR0ZXIsCi0gICAgICAgICAgICBz
dHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgc2xvdC5jdXN0b21TZXR0ZXIoKSwgc3R1YlJvdXRpbmUp
KTsKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1bXAp
LCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgICAg
ICByZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBw
cm9wcmlhdGVMaXN0QnVpbGRpbmdQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOwotICAg
ICAgICBSRUxFQVNFX0FTU0VSVCghbGlzdC0+aXNGdWxsKCkpOwotICAgICAgICByZXR1cm4gUmV0
cnlDYWNoZUxhdGVyOwotICAgIH0KLQotICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotfQotCi12
b2lkIHJlcGF0Y2hQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0
IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRL
aW5kIHB1dEtpbmQpCi17Ci0gICAgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoZXhl
Yy0+Y29kZUJsb2NrKCktPm1fbG9jaywgZXhlYy0+dm0oKS5oZWFwKTsKLSAgICAKLSAgICBpZiAo
dHJ5Q2FjaGVQdXRCeUlEKGV4ZWMsIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUs
IHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kKSA9PSBHaXZlVXBPbkNhY2hlKQotICAgICAgICByZXBh
dGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBh
cHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOwotfQogCi1z
dGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVpbGRQdXRCeUlkTGlzdChFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQotewotICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
Ci0KLSAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKLSAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7Ci0KLSAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGVQdXQoKSAmJiAhc2xvdC5pc0NhY2hl
YWJsZUN1c3RvbSgpICYmICFzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkpCi0gICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOwotCi0gICAgaWYgKCFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNB
cmVDYWNoZWFibGUoKSkKLSAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAvLyBP
cHRpbWl6ZSBzZWxmIGFjY2Vzcy4KLSAgICBpZiAoc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlICYm
IHNsb3QuaXNDYWNoZWFibGVQdXQoKSkgewotICAgICAgICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0
KiBsaXN0OwotICAgICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwotICAg
ICAgICAKLSAgICAgICAgaWYgKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6TmV3UHJv
cGVydHkpIHsKLSAgICAgICAgICAgIGxpc3QgPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojpmcm9t
KHB1dEtpbmQsIHN0dWJJbmZvKTsKLSAgICAgICAgICAgIGlmIChsaXN0LT5pc0Z1bGwoKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsgLy8gV2lsbCBnZXQgaGVyZSBkdWUg
dG8gcmVjdXJzaW9uLgotCi0gICAgICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZTsKKyAg
ICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpzZXR0ZXIoCisgICAgICAgICAgICAgICAg
dm0sIG93bmVyLCBBY2Nlc3NDYXNlOjpDdXN0b21TZXR0ZXIsIHN0cnVjdHVyZSwgaW52YWxpZE9m
ZnNldCwgY29uZGl0aW9uU2V0LAorICAgICAgICAgICAgICAgIHNsb3QuY3VzdG9tU2V0dGVyKCks
IHNsb3QuYmFzZSgpKTsKKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKLSAgICAgICAgICAgIGlmICghZW1pdFB1dFRy
YW5zaXRpb25TdHViKGV4ZWMsIHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1
YkluZm8sIHB1dEtpbmQsIG9sZFN0cnVjdHVyZSwgY29uZGl0aW9uU2V0KSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldDsKIAotICAgICAgICAgICAgc3R1YlJvdXRpbmUgPSBzdHViSW5mby5zdHViUm91dGluZTsK
LSAgICAgICAgICAgIGxpc3QtPmFkZEFjY2VzcygKLSAgICAgICAgICAgICAgICBQdXRCeUlkQWNj
ZXNzOjp0cmFuc2l0aW9uKAotICAgICAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCksCi0gICAgICAgICAgICAgICAgICAgIG9sZFN0cnVjdHVyZSwgc3RydWN0
dXJlLCBjb25kaXRpb25TZXQsCi0gICAgICAgICAgICAgICAgICAgIHN0dWJSb3V0aW5lKSk7Cisg
ICAgICAgICAgICBpZiAoc2xvdC5iYXNlKCkgIT0gYmFzZVZhbHVlKSB7CisgICAgICAgICAgICAg
ICAgY29uZGl0aW9uU2V0ID0KKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb25z
Rm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCisgICAgICAgICAgICAgICAgICAgICAgICB2bSwgb3du
ZXIsIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5iYXNlKCksIGlkZW50LmltcGwoKSk7CisgICAgICAg
ICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSBjb25kaXRp
b25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vZmZzZXQoKTsKKyAgICAgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgICAgIG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CiAKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIGxpc3QgPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojpmcm9t
KHB1dEtpbmQsIHN0dWJJbmZvKTsKLSAgICAgICAgICAgIGlmIChsaXN0LT5pc0Z1bGwoKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsgLy8gV2lsbCBnZXQgaGVyZSBkdWUg
dG8gcmVjdXJzaW9uLgotICAgICAgICAgICAgCi0gICAgICAgICAgICBzdHJ1Y3R1cmUtPmRpZENh
Y2hlUHJvcGVydHlSZXBsYWNlbWVudCgqdm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICAvLyBXZSdyZSBub3cgY29tbWl0dGVkIHRvIGNyZWF0aW5nIHRo
ZSBzdHViLiBNb2dyaWZ5IHRoZSBtZXRhLWRhdGEgYWNjb3JkaW5nbHkuCi0gICAgICAgICAgICBi
b29sIHJlc3VsdCA9IGVtaXRQdXRSZXBsYWNlU3R1YigKLSAgICAgICAgICAgICAgICBleGVjLCBw
cm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCAKLSAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUs
IENvZGVMb2NhdGlvbkxhYmVsKGxpc3QtPmN1cnJlbnRTbG93UGF0aFRhcmdldCgpKSwgc3R1YlJv
dXRpbmUpOwotICAgICAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGxpc3QtPmFkZEFjY2Vz
cygKLSAgICAgICAgICAgICAgICBQdXRCeUlkQWNjZXNzOjpyZXBsYWNlKAotICAgICAgICAgICAg
ICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCi0gICAgICAgICAgICAg
ICAgICAgIHN0cnVjdHVyZSwgc3R1YlJvdXRpbmUpKTsKKyAgICAgICAgICAgIG5ld0Nhc2UgPSBB
Y2Nlc3NDYXNlOjpzZXR0ZXIoCisgICAgICAgICAgICAgICAgdm0sIG93bmVyLCBBY2Nlc3NDYXNl
OjpTZXR0ZXIsIHN0cnVjdHVyZSwgb2Zmc2V0LCBjb25kaXRpb25TZXQpOwogICAgICAgICB9Ci0g
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksIENvZGVM
b2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgICAgIGlmIChs
aXN0LT5pc0Z1bGwoKSkKLSAgICAgICAgICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24o
c2xvdCwgcHV0S2luZCkpOwotCi0gICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CiAgICAg
fQogCi0gICAgaWYgKChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgfHwgc2xvdC5pc0NhY2hlYWJs
ZVNldHRlcigpKQotICAgICAgICAmJiBzdHViSW5mby5wYXRjaC5zcGlsbE1vZGUgPT0gRG9udFNw
aWxsKSB7Ci0gICAgICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7Ci0gICAg
ICAgIAotICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7Ci0g
ICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKLSAgICAgICAgaWYgKHNsb3QuYmFzZSgpICE9
IGJhc2VWYWx1ZSkgewotICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkg
ewotICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9Ci0gICAgICAgICAgICAgICAgICAgIGdl
bmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0Q3VzdG9tKAotICAgICAgICAg
ICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBz
dHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlO
YW1lLmltcGwoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNvbmRp
dGlvblNldCA9Ci0gICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3Rv
dHlwZVByb3BlcnR5SGl0KAotICAgICAgICAgICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lLmltcGwoKSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICBvZmZzZXQgPSBzbG90LmlzQ2FjaGVh
YmxlQ3VzdG9tKCkgPyBpbnZhbGlkT2Zmc2V0IDogY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0
aW9uKCkub2Zmc2V0KCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgb2Zmc2V0ID0gc2xv
dC5jYWNoZWRPZmZzZXQoKTsKLQotICAgICAgICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiBsaXN0
OwotICAgICAgICBsaXN0ID0gUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6ZnJvbShwdXRLaW5kLCBz
dHViSW5mbyk7Ci0KLSAgICAgICAgYm9vbCByZXN1bHQgPSBnZW5lcmF0ZUJ5SWRTdHViKAotICAg
ICAgICAgICAgZXhlYywga2luZEZvcihzbG90KSwgcHJvcGVydHlOYW1lLCBjdXN0b21Gb3Ioc2xv
dCksIHN0dWJJbmZvLCBjb25kaXRpb25TZXQsIHNsb3QuYmFzZSgpLAotICAgICAgICAgICAgb2Zm
c2V0LCBzdHJ1Y3R1cmUsIGZhbHNlLCBudWxscHRyLAotICAgICAgICAgICAgc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9E
b25lKSwKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKGxpc3QtPmN1cnJlbnRTbG93UGF0
aFRhcmdldCgpKSwKLSAgICAgICAgICAgIHN0dWJSb3V0aW5lKTsKLSAgICAgICAgaWYgKCFyZXN1
bHQpCi0gICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgCi0gICAgICAg
IGxpc3QtPmFkZEFjY2VzcyhQdXRCeUlkQWNjZXNzOjpzZXR0ZXIoCi0gICAgICAgICAgICAqdm0s
IGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCi0gICAgICAgICAgICBzbG90LmlzQ2FjaGVh
YmxlU2V0dGVyKCkgPyBQdXRCeUlkQWNjZXNzOjpTZXR0ZXIgOiBQdXRCeUlkQWNjZXNzOjpDdXN0
b21TZXR0ZXIsCi0gICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgc2xvdC5jdXN0
b21TZXR0ZXIoKSwgc3R1YlJvdXRpbmUpKTsKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVw
YXRjaEp1bXAoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5m
by5wYXRjaC5kZWx0YUNhbGxUb0p1bXApLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+
Y29kZSgpLmNvZGUoKSkpOwotICAgICAgICBpZiAobGlzdC0+aXNGdWxsKCkpCi0gICAgICAgICAg
ICByZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBw
cm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKKyAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0ciA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UoCisgICAg
ICAgIHZtLCBjb2RlQmxvY2ssIGlkZW50LCBzdGQ6Om1vdmUobmV3Q2FzZSkpOworICAgIAorICAg
IGlmICghY29kZVB0cikKKyAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAKLSAgICAgICAg
cmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLSAgICB9Ci0gICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
CisgICAgcmVzZXRQdXRCeUlEQ2hlY2tBbmRMb2FkKHN0dWJJbmZvKTsKKyAgICBNYWNyb0Fzc2Vt
Ymxlcjo6cmVwYXRjaEp1bXAoCisgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5q
dW1wQXRPZmZzZXQoCisgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1bXAp
LAorICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChjb2RlUHRyKSk7CisgICAgCisgICAgcmV0dXJu
IFJldHJ5Q2FjaGVMYXRlcjsKIH0KIAotdm9pZCBidWlsZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCit2b2lkIHJlcGF0Y2hQdXRC
eUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xv
dCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCiB7
CiAgICAgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoZXhlYy0+Y29kZUJsb2NrKCkt
Pm1fbG9jaywgZXhlYy0+dm0oKS5oZWFwKTsKICAgICAKLSAgICBpZiAodHJ5QnVpbGRQdXRCeUlk
TGlzdChleGVjLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHVi
SW5mbywgcHV0S2luZCkgPT0gR2l2ZVVwT25DYWNoZSkKKyAgICBpZiAodHJ5Q2FjaGVQdXRCeUlE
KGV4ZWMsIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZv
LCBwdXRLaW5kKSA9PSBHaXZlVXBPbkNhY2hlKQogICAgICAgICByZXBhdGNoQ2FsbChleGVjLT5j
b2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUdlbmVy
aWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOwogfQogCkBAIC0xNDc5LDEwNiArNDgz
LDM1IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlSZXBhdGNoSW4oCiAgICAgfQogICAg
IAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1
Y3R1cmUoKnZtKTsKKyAgICBTY3JpcHRFeGVjdXRhYmxlKiBvd25lciA9IGNvZGVCbG9jay0+b3du
ZXJTY3JpcHRFeGVjdXRhYmxlKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2UtPnN0cnVjdHVyZSh2bSk7CiAgICAgCiAgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OwogICAgIGlmICh3YXNGb3VuZCkgewog
ICAgICAgICBpZiAoc2xvdC5zbG90QmFzZSgpICE9IGJhc2UpIHsKICAgICAgICAgICAgIGNvbmRp
dGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAotICAg
ICAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3Ry
dWN0dXJlLCBzbG90LnNsb3RCYXNlKCksIGlkZW50LmltcGwoKSk7CisgICAgICAgICAgICAgICAg
dm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5z
bG90QmFzZSgpLCBpZGVudC5pbXBsKCkpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNzKAotICAg
ICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1
cmUsIGlkZW50LmltcGwoKSk7CisgICAgICAgICAgICB2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBpZGVudC5pbXBsKCkpOwogICAgIH0KICAgICBpZiAo
IWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwot
ICAgIAotICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcG9seW1vcnBoaWNTdHJ1
Y3R1cmVMaXN0OwotICAgIGludCBsaXN0SW5kZXg7Ci0gICAgCi0gICAgQ29kZUxvY2F0aW9uTGFi
ZWwgc3VjY2Vzc0xhYmVsID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZz
ZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKTsKLSAgICBDb2RlTG9jYXRpb25MYWJl
bCBzbG93Q2FzZUxhYmVsOwotICAgIAotICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFj
Y2Vzc191bnNldCkgewotICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9s
eW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KCk7Ci0gICAgICAgIHN0dWJJbmZvLmluaXRJbkxp
c3QocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCAwKTsKLSAgICAgICAgc2xvd0Nhc2VMYWJlbCA9
IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAg
c3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSk7Ci0gICAgICAgIGxpc3RJbmRleCA9
IDA7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8uYWNjZXNz
VHlwZSA9PSBhY2Nlc3NfaW5fbGlzdCk7Ci0gICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlz
dCA9IHN0dWJJbmZvLnUuaW5MaXN0LnN0cnVjdHVyZUxpc3Q7Ci0gICAgICAgIGxpc3RJbmRleCA9
IHN0dWJJbmZvLnUuaW5MaXN0Lmxpc3RTaXplOwotICAgICAgICBzbG93Q2FzZUxhYmVsID0gQ29k
ZUxvY2F0aW9uTGFiZWwocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleCAt
IDFdLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChs
aXN0SW5kZXggPT0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKQotICAgICAgICAgICAgcmV0
dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgfQotICAgIAotICAgIFJlZlB0cjxKSVRTdHViUm91dGlu
ZT4gc3R1YlJvdXRpbmU7Ci0gICAgCi0gICAgewotICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IHN0
YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guYmFzZUdQUik7Ci0gICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVlR1BS
KTsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBUZW1wUmVnaXN0ZXJTZXQoc3R1YkluZm8u
cGF0Y2gudXNlZFJlZ2lzdGVycykuZ2V0RnJlZUdQUigpOwotICAgICAgICAKLSAgICAgICAgQ0Nh
bGxIZWxwZXJzIHN0dWJKaXQodm0pOwotICAgICAgICAKLSAgICAgICAgYm9vbCBuZWVkVG9SZXN0
b3JlU2NyYXRjaDsKLSAgICAgICAgaWYgKHNjcmF0Y2hHUFIgPT0gSW52YWxpZEdQUlJlZykgewot
ICAgICAgICAgICAgc2NyYXRjaEdQUiA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQ
UihiYXNlR1BSLCByZXN1bHRHUFIpOwotICAgICAgICAgICAgc3R1YkppdC5wdXNoVG9TYXZlKHNj
cmF0Y2hHUFIpOwotICAgICAgICAgICAgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSB0cnVlOwotICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gZmFsc2U7Ci0g
ICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzOwot
ICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoU3RydWN0dXJlKAotICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAotICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKLSAg
ICAgICAgICAgIHN0cnVjdHVyZSkpOwotCi0gICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
ZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkubmV3
SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCkpCi0gICAgICAgICAgICB2bS0+cmVnaXN0
ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVydHkoaWRlbnQsIHN0dWJJbmZvLmFkZFdhdGNocG9p
bnQoY29kZUJsb2NrKSk7CiAKLSAgICAgICAgaWYgKHNsb3Qud2F0Y2hwb2ludFNldCgpKQotICAg
ICAgICAgICAgc2xvdC53YXRjaHBvaW50U2V0KCktPmFkZChzdHViSW5mby5hZGRXYXRjaHBvaW50
KGNvZGVCbG9jaykpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBuZXdDYXNlID0g
QWNjZXNzQ2FzZTo6aW4oCisgICAgICAgIHZtLCBvd25lciwgd2FzRm91bmQgPyBBY2Nlc3NDYXNl
OjpJbkhpdCA6IEFjY2Vzc0Nhc2U6OkluTWlzcywgc3RydWN0dXJlLCBjb25kaXRpb25TZXQpOwog
Ci0gICAgICAgIGNoZWNrT2JqZWN0UHJvcGVydHlDb25kaXRpb25zKAotICAgICAgICAgICAgY29u
ZGl0aW9uU2V0LCBleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8sIHN0dWJKaXQsIGZhaWx1cmVD
YXNlcywgc2NyYXRjaEdQUik7Ci0gICAgICAgIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAg
IHN0dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29k
ZShqc0Jvb2xlYW4od2FzRm91bmQpKSksIHJlc3VsdEdQUik7Ci0jZWxzZQotICAgICAgICBzdHVi
Sml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih3YXNGb3VuZCksIHJlc3VsdEdQ
Uik7Ci0jZW5kaWYKLSAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nl
c3MsIGZhaWw7Ci0gICAgICAgIAotICAgICAgICBlbWl0UmVzdG9yZVNjcmF0Y2goc3R1YkppdCwg
bmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHNjcmF0Y2hHUFIsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVD
YXNlcyk7Ci0gICAgICAgIAotICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgc3R1
YkppdCwgZXhlYy0+Y29kZUJsb2NrKCksIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7Ci0gICAgICAg
IGlmIChwYXRjaEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKQotICAgICAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgIAotICAgICAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0
Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2Fz
ZXMsIHN1Y2Nlc3NMYWJlbCwgc2xvd0Nhc2VMYWJlbCk7Ci0gICAgICAgIAotICAgICAgICBzdHVi
Um91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAgICAgICBleGVjLT5jb2Rl
QmxvY2soKSwgcGF0Y2hCdWZmZXIsCi0gICAgICAgICAgICAoIkluIChmb3VuZCA9ICVzKSBzdHVi
IGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAgICAgICAgICAgICB3YXNGb3VuZCA/ICJ5
ZXMiIDogIm5vIiwgdG9DU3RyaW5nKCpleGVjLT5jb2RlQmxvY2soKSkuZGF0YSgpLAotICAgICAg
ICAgICAgICAgIHN1Y2Nlc3NMYWJlbC5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgfQotICAg
IAotICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNldCgqdm0s
IGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIHRy
dWUpOwotICAgIHN0dWJJbmZvLnUuaW5MaXN0Lmxpc3RTaXplKys7Ci0gICAgCi0gICAgTWFjcm9B
c3NlbWJsZXI6OnJlcGF0Y2hKdW1wKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRP
ZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwgQ29kZUxvY2F0aW9uTGFiZWwo
c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIg
Y29kZVB0ciA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2Uodm0sIGNvZGVCbG9jaywgaWRlbnQsIHN0
ZDo6bW92ZShuZXdDYXNlKSk7CisgICAgaWYgKCFjb2RlUHRyKQorICAgICAgICByZXR1cm4gR2l2
ZVVwT25DYWNoZTsKKworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcCgKKyAgICAgICAg
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5k
ZWx0YUNhbGxUb0p1bXApLAorICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChjb2RlUHRyKSk7CiAg
ICAgCi0gICAgcmV0dXJuIGxpc3RJbmRleCA8IChQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUg
LSAxKSA/IFJldHJ5Q2FjaGVMYXRlciA6IEdpdmVVcE9uQ2FjaGU7CisgICAgcmV0dXJuIFJldHJ5
Q2FjaGVMYXRlcjsKIH0KIAogdm9pZCByZXBhdGNoSW4oCkBAIC0xOTI4LDIyICs4NjEsNyBAQCB2
b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoCiB2b2lkIHJlc2V0R2V0QnlJRChDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogewogICAgIHJlcGF0Y2hDYWxs
KGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlk
T3B0aW1pemUpOwotICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyIHN0cnVjdHVyZUxhYmVsID0g
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoLShpbnRwdHJf
dClzdHViSW5mby5wYXRjaC5kZWx0YUNoZWNrSW1tVG9DYWxsKTsKLSAgICBpZiAoTWFjcm9Bc3Nl
bWJsZXI6OmNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goKSkgewotICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFu
Y2gzMldpdGhQYXRjaCgKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpzdGFydE9mUGF0Y2hh
YmxlQnJhbmNoMzJXaXRoUGF0Y2hPbkFkZHJlc3Moc3RydWN0dXJlTGFiZWwpLAotICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoCi0gICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+KHN0dWJJbmZvLnBhdGNoLmJhc2VHUFIpLAotICAg
ICAgICAgICAgICAgIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCi0gICAgICAgICAgICBz
dGF0aWNfY2FzdDxpbnQzMl90Pih1bnVzZWRQb2ludGVyKSk7Ci0gICAgfQotICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoSW50MzIoc3RydWN0dXJlTGFiZWwsIHN0YXRpY19jYXN0PGludDMyX3Q+
KHVudXNlZFBvaW50ZXIpKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIE1hY3JvQXNzZW1ibGVy
OjpyZXBhdGNoQ29tcGFjdChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29t
cGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCAwKTsK
LSNlbHNlCi0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDb21wYWN0KHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVs
dGFDYWxsVG9UYWdMb2FkT3JTdG9yZSksIDApOwotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNo
Q29tcGFjdChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zm
c2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKSwgMCk7Ci0j
ZW5kaWYKKyAgICByZXNldEdldEJ5SURDaGVja0FuZExvYWQoc3R1YkluZm8pOwogICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoSnVtcChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0
T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nh
c2UpKTsKIH0KIApAQCAtMTk1MSwzMyArODY5LDE4IEBAIHZvaWQgcmVzZXRQdXRCeUlEKENvZGVC
bG9jayogY29kZUJsb2NrLCAKIHsKICAgICBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJIHVub3B0aW1p
emVkRnVuY3Rpb24gPSBiaXR3aXNlX2Nhc3Q8Vl9KSVRPcGVyYXRpb25fRVNzaUpKST4ocmVhZENh
bGxUYXJnZXQoY29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24pLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpOwogICAgIFZfSklUT3BlcmF0aW9uX0VTc2lKSkkgb3B0aW1pemVkRnVuY3Rp
b247Ci0gICAgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmlj
dCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RCdWlsZExp
c3QpCisgICAgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmlj
dCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6
ZSkKICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0
aW1pemU7Ci0gICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRC
eUlkTm9uU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5v
blN0cmljdEJ1aWxkTGlzdCkKKyAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9w
ZXJhdGlvblB1dEJ5SWROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRp
b25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemUpCiAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0g
b3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOwotICAgIGVsc2UgaWYgKHVub3B0aW1p
emVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdCB8fCB1bm9wdGltaXpl
ZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExpc3QpCisgICAg
ZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3Ry
aWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmlj
dE9wdGltaXplKQogICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRE
aXJlY3RTdHJpY3RPcHRpbWl6ZTsKICAgICBlbHNlIHsKLSAgICAgICAgQVNTRVJUKHVub3B0aW1p
emVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdCB8fCB1bm9wdGlt
aXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RCdWlsZExpc3Qp
OworICAgICAgICBBU1NFUlQodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0Tm9uU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJ
ZERpcmVjdE5vblN0cmljdE9wdGltaXplKTsKICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBv
cGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CiAgICAgfQogICAgIHJlcGF0
Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcHRpbWl6ZWRG
dW5jdGlvbik7Ci0gICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzIgc3RydWN0dXJlTGFiZWwgPSBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldCgtKGludHB0cl90
KXN0dWJJbmZvLnBhdGNoLmRlbHRhQ2hlY2tJbW1Ub0NhbGwpOwotICAgIGlmIChNYWNyb0Fzc2Vt
Ymxlcjo6Y2FuSnVtcFJlcGxhY2VQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaCgpKSB7Ci0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5j
aDMyV2l0aFBhdGNoKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0YXJ0T2ZQYXRjaGFi
bGVCcmFuY2gzMldpdGhQYXRjaE9uQWRkcmVzcyhzdHJ1Y3R1cmVMYWJlbCksCi0gICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcygKLSAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxN
YWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRD4oc3R1YkluZm8ucGF0Y2guYmFzZUdQUiksCi0gICAg
ICAgICAgICAgICAgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKLSAgICAgICAgICAgIHN0
YXRpY19jYXN0PGludDMyX3Q+KHVudXNlZFBvaW50ZXIpKTsKLSAgICB9Ci0gICAgTWFjcm9Bc3Nl
bWJsZXI6OnJlcGF0Y2hJbnQzMihzdHJ1Y3R1cmVMYWJlbCwgc3RhdGljX2Nhc3Q8aW50MzJfdD4o
dW51c2VkUG9pbnRlcikpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGF0Y2hJbnQzMihzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9m
ZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0xvYWRPclN0b3JlKSwgMCk7Ci0jZWxzZQot
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9UYWdMb2Fk
T3JTdG9yZSksIDApOwotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIoc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVs
dGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUpLCAwKTsKLSNlbmRpZgorICAgIHJlc2V0UHV0QnlJ
RENoZWNrQW5kTG9hZChzdHViSW5mbyk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1w
KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGVsdGFDYWxsVG9KdW1wKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZz
ZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwogfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3IuY3BwCShyZXZpc2lvbiAxODk1MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDgg
QEAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjp+U2NyYXRjaFJlZ2lzdAogCiB2b2lkIFNjcmF0
Y2hSZWdpc3RlckFsbG9jYXRvcjo6bG9jayhHUFJSZWcgcmVnKQogeworICAgIGlmIChyZWcgPT0g
SW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuOwogICAgIHVuc2lnbmVkIGluZGV4ID0gR1BS
SW5mbzo6dG9JbmRleChyZWcpOwogICAgIGlmIChpbmRleCA9PSBHUFJJbmZvOjpJbnZhbGlkSW5k
ZXgpCiAgICAgICAgIHJldHVybjsKQEAgLTUyLDEyICs1NCwyMCBAQCB2b2lkIFNjcmF0Y2hSZWdp
c3RlckFsbG9jYXRvcjo6bG9jayhHUFJSCiAKIHZvaWQgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
Ojpsb2NrKEZQUlJlZyByZWcpCiB7CisgICAgaWYgKHJlZyA9PSBJbnZhbGlkRlBSUmVnKQorICAg
ICAgICByZXR1cm47CiAgICAgdW5zaWduZWQgaW5kZXggPSBGUFJJbmZvOjp0b0luZGV4KHJlZyk7
CiAgICAgaWYgKGluZGV4ID09IEZQUkluZm86OkludmFsaWRJbmRleCkKICAgICAgICAgcmV0dXJu
OwogICAgIG1fbG9ja2VkUmVnaXN0ZXJzLnNldEZQUkJ5SW5kZXgoaW5kZXgpOwogfQogCit2b2lk
IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6bG9jayhKU1ZhbHVlUmVncyByZWdzKQoreworICAg
IGxvY2socmVncy50YWdHUFIoKSk7CisgICAgbG9jayhyZWdzLnBheWxvYWRHUFIoKSk7Cit9CisK
IHRlbXBsYXRlPHR5cGVuYW1lIEJhbmtJbmZvPgogdHlwZW5hbWUgQmFua0luZm86OlJlZ2lzdGVy
VHlwZSBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OmFsbG9jYXRlU2NyYXRjaCgpCiB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yLmgJKHJldmlzaW9uIDE4OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDExICs0MCwx
MyBAQCBzdHJ1Y3QgU2NyYXRjaEJ1ZmZlcjsKIAogY2xhc3MgU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yIHsKIHB1YmxpYzoKKyAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IoKSB7IH0KICAgICBT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IoY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMp
OwogICAgIH5TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IoKTsKIAotICAgIHZvaWQgbG9jayhHUFJS
ZWcgcmVnKTsKLSAgICB2b2lkIGxvY2soRlBSUmVnIHJlZyk7CisgICAgdm9pZCBsb2NrKEdQUlJl
Zyk7CisgICAgdm9pZCBsb2NrKEZQUlJlZyk7CisgICAgdm9pZCBsb2NrKEpTVmFsdWVSZWdzKTsK
ICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rSW5mbz4KICAgICB0eXBlbmFtZSBCYW5r
SW5mbzo6UmVnaXN0ZXJUeXBlIGFsbG9jYXRlU2NyYXRjaCgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMTg5NTE1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODgsNiAr
MTg4LDcgQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgdihib29sLCBj
bG9iYmVyQWxsUmVnc0luRlRMSUNTbG93UGF0aCwgIUFTU0VSVF9ESVNBQkxFRCwgbnVsbHB0cikg
XAogICAgIHYoYm9vbCwgYXNzdW1lQWxsUmVnc0luRlRMSUNBcmVMaXZlLCBmYWxzZSwgbnVsbHB0
cikgXAogICAgIHYoYm9vbCwgZW5hYmxlQWNjZXNzSW5saW5pbmcsIHRydWUsIG51bGxwdHIpIFwK
KyAgICB2KHVuc2lnbmVkLCBtYXhBY2Nlc3NWYXJpYW50TGlzdFNpemUsIDgsIG51bGxwdHIpIFwK
ICAgICB2KGJvb2wsIGVuYWJsZVBvbHl2YXJpYW50RGV2aXJ0dWFsaXphdGlvbiwgdHJ1ZSwgbnVs
bHB0cikgXAogICAgIHYoYm9vbCwgZW5hYmxlUG9seW1vcnBoaWNBY2Nlc3NJbmxpbmluZywgdHJ1
ZSwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgZW5hYmxlUG9seW1vcnBoaWNDYWxsSW5saW5pbmcs
IHRydWUsIG51bGxwdHIpIFwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260837</attachid>
            <date>2015-09-08 22:44:57 -0700</date>
            <delta_ts>2015-09-09 12:52:34 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>276035</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg5NTE1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0OCBA
QAorMjAxNS0wOS0wOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFRoZXJlIHNob3VsZCBiZSBvbmUgc3R1YiBoYW5naW5nIG9mZiBhbiBpbmxpbmUgY2FjaGUgdGhh
dCBjb250YWlucyBjb2RlIGZvciBhbGwgb2YgdGhlIGNhc2VzLCByYXRoZXIgdGhhbiBmb3JtaW5n
IGEgbGlua2VkIGxpc3QgY29uc2lzdGluZyBvZiBvbmUgc3R1YiBwZXIgY2FzZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4NzE3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBhIG1ham9yIHJl
d3JpdGUgb2YgdGhlIEpTQyBnZXQvcHV0L2luIGlubGluZSBjYWNoZXMgKElDcyksIG1vdGl2YXRl
ZCBieSB0aGUgbmVlZCB0byBhZGQKKyAgICAgICAgZmFuY3kgbmV3IGtpbmRzIG9mIGlubGluZSBj
YWNoZXMgZm9yIHByb3BlcnR5IHR5cGUgaW5mZXJlbmNlIChodHRwczovL3dlYmtpdC5vcmcvYi8x
NDg2MTApLgorCisgICAgICAgIFByZXZpb3VzbHksIG91ciBpbmxpbmUgY2FjaGVzIGhhZCBzb21l
IHByb2JsZW1zIHRoYXQgbWFkZSB0aGVtIGRpZmZpY3VsdCB0byB3b3JrIHdpdGguIEl0IHdhcwor
ICAgICAgICBpbXBvc3NpYmxlIHRvIGNoYW5nZSBhbnkgY29kZSB0aGF0IHdhcyBwcmV2aW91c2x5
IGdlbmVyYXRlZCBieSB0aGUgSUMgZXhjZXB0IGJ5IGJsb3dpbmcgdGhlCisgICAgICAgIHdob2xl
IElDIGF3YXksIHRoZSBJQ3Mgc2NhbGVkIHBvb3JseSBpZiB0aGVyZSB3ZXJlIG1hbnkgY2FzZXMs
IGFuZCB0aGVyZSB3YXMgYSBsb3Qgb2YgZHVwbGljYXRlCisgICAgICAgIGFuZCBhZCBob2MgY29k
ZS4KKworICAgICAgICBJbXBvc3NpYmxlIHRvIHJlZ2VuZXJhdGUgYSBwcmV2aW91c2x5IGdlbmVy
YXRlZCBzdHViOiBTYXkgdGhhdCBzb21lIGFjY2VzcyAoby5mID0gdikgY2F1c2VzIG91cgorICAg
ICAgICBJQyBjb2RlIHRvIGVtaXQgc29tZSBzdHViOyBsZXQncyBjYWxsIGl0IHN0dWIxLiBUaGVu
IGxhdGVyIHdlIGZpbmQgdGhhdCB3ZSBuZWVkIHRvIGVtaXQgYQorICAgICAgICBkaWZmZXJlbnQg
c3R1Yiwgc3R1YjIsIHdoZXJlIHdlIHRoaW5rIHRoYXQgc3R1YjIgbWlnaHQgc3Vic3VtZSBzdHVi
MS4gV2Ugc2F5IHRoYXQgc3R1YjIKKyAgICAgICAgc3Vic3VtZXMgc3R1YjEgaWYgZmFpbGluZyB0
byBleGVjdXRlIHN0dWIyIHRvIGNvbXBsZXRpb24gbWVhbnMgdGhhdCB3ZSBhcmUgZ3VhcmFudGVl
ZCB0byBmYWlsCisgICAgICAgIHRvIGV4ZWN1dGUgc3R1YjEgdG8gY29tcGxldGlvbi4gVGhpcyBj
b3VsZCBoYXBwZW4gaW4gdHJ1bmsgaWYgc3R1YjIgaGFzIHRoZSBzYW1lIGJhc2Ugc3RydWN0dXJl
CisgICAgICAgIGFzIHN0dWIxIGJ1dCBkaWZmZXJlbnQgcHJvdG90eXBlIGNvbmRpdGlvbnMuIEl0
IGNvdWxkIGhhcHBlbiB3aXRoIHByb3BlcnR5IHR5cGUgaW5mZXJlbmNlIGlmCisgICAgICAgIHN0
dWIyIGhhcyBhIGxvb3NlciB0eXBlIGNoZWNrIG9uIHYgdGhhbiBzdHViMSBkaWQuIEN1cnJlbnRs
eSwgaWYgdGhpcyBoYXBwZW5lZCwgd2Ugd291bGQgZW1pdAorICAgICAgICBzdHViMiBhbmQgaGF2
ZSBpdHMgc2xvdyBwYXRoIGp1bXAgdG8gc3R1YjEuIEhlbmNlLCB3ZSB3b3VsZCBzdGlsbCBlbmQg
dXAgZXhlY3V0aW5nIHRoZSBjaGVja3MKKyAgICAgICAgb2Ygc3R1YjEgYmVmb3JlIGZhbGxpbmcg
dGhyb3VnaCB0byB0aGUgc2xvdyBwYXRoLiBUaGlzIGdldHMgYmFkIHdoZW4gdGhlcmUgYXJlIG1h
bnkgc3R1YnMuCisgICAgICAgIFN0dWIxIG1pZ2h0IGJlIGluIGZyb250IG9mIGEgYnVuY2ggb2Yg
b3RoZXIgc3R1YnMsIHNvIHdoZW4gd2UgYWRkIHN0dWIyLCB3ZSB3aWxsIGVuZCB1cAorICAgICAg
ICBleGVjdXRpbmcgYm90aCBzdHViMidzIGFuZCBzdHViMSdzIGNoZWNrcyBiZWZvcmUgZmFsbGlu
ZyB0aHJvdWdoIHRvIHRoZSBvdGhlciBzdHVicy4gSXQgd291bGQKKyAgICAgICAgYmUgYmV0dGVy
IGlmIHdlIGNvdWxkIHJlbW92ZSBzdHViMSBmcm9tIHRoZSBsaXN0IGF0IHRoaXMgcG9pbnQuIEJ1
dCBzaW5jZSBzdHViMSBjb3VsZCBiZSBsaW5rZWQKKyAgICAgICAgdG8gZnJvbSBhIGRpZmZlcmVu
dCBzdHViIHRoYXQgd2UgaGFkIGFscmVhZHkgZ2VuZXJhdGVkLCB3ZSdkIGhhdmUgdG8gaGF2ZSBh
IHdheSBvZiBwYXRjaGluZworICAgICAgICBzdHVicyBvciByZWdlbmVyYXRpbmcgdGhlbSBmcm9t
IHNjcmF0Y2guIFRoaXMgaXMgY3VycmVudHkgaW1wb3NzaWJsZSBiZWNhdXNlIHdlIGp1c3QgZG9u
J3Qga2VlcAorICAgICAgICBhcm91bmQgZW5vdWdoIG1ldGEtZGF0YSB0byBtZXNzIHdpdGggYSBz
dHViIGFmdGVyIGl0J3MgZ2VuZXJhdGVkLiBBZnRlciB0aGlzIGNoYW5nZSwgd2UgbmV2ZXIKKyAg
ICAgICAgbGluayBuZXcgc3R1YnMgb250byBhIGxpbmtlZCBsaXN0IG9mIHByZS1leGlzdGluZyBz
dHViczsgaW5zdGVhZCBlYWNoIElDIHdpbGwgaGF2ZSBvbmUgc3R1YgorICAgICAgICBoYW5naW5n
IG9mZiBvZiBpdCBhbmQgd2UgYWx3YXlzIHJlZ2VuZXJhdGUgdGhhdCBvbmUgc3R1YiBmcm9tIHNj
cmF0Y2guIFRoYXQgb25lIHN0dWIgY29udGFpbnMKKyAgICAgICAgZWl0aGVyIGEgQmluYXJ5U3dp
dGNoIG9yIGEgYnJhbmNoIGNhc2NhZGUgdG8gc2VsZWN0IG9uZSBvZiB0aGUgQWNjZXNzQ2FzZXMu
IEVhY2ggQWNjZXNzQ2FzZSBpcworICAgICAgICBhbiBvYmplY3QgdGhhdCBkZXNjcmliZXMgZXZl
cnl0aGluZyB3ZSBuZWVkIHRvIHJlZ2VuZXJhdGUgaXQgaW4gdGhlIGZ1dHVyZS4gVGhpcyBtZWFu
cyB0aGF0CisgICAgICAgIHdoZW4gd2UgYWRkIGEgbmV3IGNhc2UgdG8gYW4gSUMgc3R1Yiwgd2Ug
Y2FuIGZpZ3VyZSBvdXQgd2hpY2ggcHJldmlvdXMgY2FzZXMgdGhpcyBvbmUgc3Vic3VtZXMuCisK
KyAgICAgICAgUG9vciBzY2FsYWJpbGl0eSB3aGVuIHRoZXJlIGFyZSBtYW55IGNhc2VzOiBQcmV2
aW91c2x5LCB0aGUgY2FzZXMgb2YgYSBwb2x5bW9ycGhpYyBpbmxpbmUgY2FjaGUKKyAgICAgICAg
Zm9ybWVkIGEgbGlua2VkIGxpc3Qgb2YgYnJhbmNoZXMuIFRoaXMgbWVhbnQgdGhhdCB0aGUgY29t
cGxleGl0eSBvZiBhbiBpbmxpbmUgY2FjaGUgZ3JldworICAgICAgICBsaW5lYXJseSB3aXRoIHRo
ZSBudW1iZXIgb2YgY2FzZXMuIFRoaXMgY2hhbmdlIHR1cm5zIHRoaXMgaW50byBhIEJpbmFyeVN3
aXRjaCBpbiBtb3N0IGNhc2VzLAorICAgICAgICBsZWFkaW5nIHRvIGxvZ2FyaXRobWljIHNjYWxp
bmcuCisKKyAgICAgICAgRHVwbGljYXRlIGNvZGUgYmV0d2VlbiBnZXQsIHB1dCwgYW5kIGluOiBU
aGUgY29kZSBmb3Igb3BfZ2V0X2J5X2lkLCBvcF9wdXRfYnlfaWQsIGFuZCBvcF9pbgorICAgICAg
ICBpbmxpbmUgY2FjaGVzIGdyZXcgaW5kZXBlbmRlbnRseSBhbmQgZW5kZWQgdXAgaGF2aW5nIGEg
bG90IG9mIGR1cGxpY2F0ZSBjb2RlLiBXZSBoYWQgdGhlIHdvcnN0CisgICAgICAgIGtpbmRzIG9m
IGR1cGxpY2F0ZSBjb2RlLiBJbiBzb21lIGNhc2VzLCB0aGUgY29kZSB3YXMgY29weS1wYXN0ZWQu
IEluIG90aGVyIGNhc2VzLCB3ZSB3cm90ZSBjb2RlCisgICAgICAgIHRoYXQgZmVsdCBsaWtlIGl0
IHdhcyBuZXcgZGVzcGl0ZSB0aGUgZmFjdCB0aGF0IGl0IHdhcyBsb2dpY2FsbHkgaWRlbnRpY2Fs
IHRvIGNvZGUgdGhhdCB3YXMKKyAgICAgICAgYWxyZWFkeSB3cml0dGVuIGVsc2V3aGVyZS4gVGhl
IG1haW4gc291cmNlcyBvZiBkdXBsaWNhdGlvbiB3ZXJlIGluIHNlbGVjdGluZyBhIHNjcmF0Y2gK
KyAgICAgICAgcmVnaXN0ZXIsIGNoZWNraW5nIGFsbCBvZiB0aGUgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25zIGFuZCB0aGUgYmFzZSBzdHJ1Y3R1cmUsIHRoZSBwcm8gZm9ybWEKKyAgICAgICAgaW52
b2x2ZWQgaW4gZ2VuZXJhdGluZyBhIHN0dWIsIGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIG5lZWRl
ZCB0byBkZXNjcmliZSBhbGwgb2YgdGhlIGFjY2VzcworICAgICAgICBjYXNlcy4gVGhpcyBjaGFu
Z2UgZGVkdXBsaWNhdGVzIGFsbCBvZiB0aGF0IGNvZGUuIE5vdywgYWxsIG9mIHRob3NlIElDcyB1
c2UgdGhlIHNhbWUgY2xhc3NlczoKKyAgICAgICAgdGhlIFBvbHltb3JwaGljQWNjZXNzIGFuZCBB
Y2Nlc3NDYXNlLiBUaGVyZSBpcyBjb2RlIGluIHRob3NlIGNsYXNzZXMgdGhhdCBoYW5kbGVzIGFs
bCBvZiB0aGUKKyAgICAgICAgY29tbW9uIHRoaW5ncywgYW5kIGZvciB0aGUgbW9zdCBwYXJ0IHRo
ZSBvbmx5IGNvZGUgdGhhdCBhY3R1YWxseSBzcGVjaWFsaXplcyBmb3IgdGhlIGtpbmQgb2YKKyAg
ICAgICAgYWNjZXNzIGlzIGluIHNvbWUgc3dpdGNoIHN0YXRlbWVudCBpbiBBY2Nlc3NDYXNlOjpn
ZW5lcmF0ZSgpLgorCisgICAgICAgIFNwZWNpYWwtY2FzaW5nIG9mIGFycmF5IGxlbmd0aCBhbmQg
c3RyaW5nIGxlbmd0aDogUHJldmlvdXNseSwgYXJyYXkubGVuZ3RoIGFuZCBzdHJpbmcubGVuZ3Ro
CisgICAgICAgIHdlcmUgaGFuZGxlZCBpbiBhbiBhZCBob2MgbWFubmVyIGluIHRoZSBnZXRfYnlf
aWQgcmVwYXRjaGluZyBjb2RlLiBUaGUgaGFuZGxpbmcgd2FzIHNlcGFyYXRlCisgICAgICAgIGZy
b20gdGhlIHBvbHltb3JwaGljIGdldF9ieV9pZCBoYW5kbGluZywgd2hpY2ggbWVhbnQgdGhhdCB3
ZSBjb3VsZCBub3QgaGFuZGxlIHBvbHltb3JwaGljCisgICAgICAgIGxlbmd0aCBhY2Nlc3NlcyBp
ZiBvbmUgb2YgdGhlIGxlbmd0aCBjYXNlcyB3YXMgZWl0aGVyIGFycmF5IG9yIHN0cmluZyBsZW5n
dGguIEZvciBleGFtcGxlLCBpZgorICAgICAgICB5b3UgaGFkICJvLmxlbmd0aCIgd2hlcmUgdGhl
IGxlbmd0aCB3YXMgZWl0aGVyIGFycmF5IGxlbmd0aCBvciBhIHZhbmlsbGEgbGVuZ3RoIHByb3Bl
cnR5LCB0aGVuCisgICAgICAgIHRoZSBnZXRfYnlfaWQgaW5saW5lIGNhY2hlIHdvdWxkIGVpdGhl
ciBlbWl0IGEgbW9ub21vcnBoaWMgc3R1YiBmb3IgYXJyYXkgbGVuZ3RoLCBvciBpdCBhCisgICAg
ICAgIG1vbm9tb3JwaGljIHN0dWIgZm9yIHRoZSB2YW5pbGxhIGxlbmd0aCBwcm9wZXJ0eSwgYnV0
IG5ldmVyIGEgcG9seW1vcnBoaWMgc3R1YiAob3IgbGlzdCkgdGhhdAorICAgICAgICBjb3VsZCBk
byBib3RoLiBUaGlzIGNoYW5nZSBhZGRyZXNzZXMgdGhpcyBwcm9ibGVtIGJ5IGZvbGRpbmcgYXJy
YXkgbGVuZ3RoIGFuZCBzdHJpbmcgbGVuZ3RoCisgICAgICAgIGludG8gdGhlIHBvbHltb3JwaGlj
IGdldF9ieV9pZCBjb2RlLgorCisgICAgICAgIFRoaXMgd2FzIG1lYW50IHRvIGJlIGEgcGVyZi1u
ZXV0cmFsIGNoYW5nZSB0byBlbmFibGUgcHJvcGVydHkgdHlwZSBpbmZlcmVuY2UsIGJ1dCBpdCBl
bmRlZCB1cAorICAgICAgICBiZWluZyBhIDElIE9jdGFuZSBzcGVlZC11cCwgbWFpbmx5IGJlY2F1
c2Ugb2YgcmF5dHJhY2UuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBK
YXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAgICAgICog
SmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnM6Cisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmg6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjo6ZHVtcFdpdGhOYW1lKToKKyAgICAgICAgKiBieXRlY29kZS9D
b2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnByaW50R2V0QnlJZENhY2hl
U3RhdHVzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcmludFB1dEJ5SWRDYWNoZVN0YXR1
cyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMpOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmdldEJ5VmFsSW5mb01hcCk6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6YWRkU3R1YkluZm8pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmRTdHVi
SW5mbyk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6c3R1YkluZm9CZWdpbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c3R1Yklu
Zm9FbmQpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwOgorICAgICAgICAo
SlNDOjpHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm9XaXRob3V0RXhpdFNpdGVGZWVk
YmFjayk6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlz
dC5jcHAuCisgICAgICAgIChKU0M6OkFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6YWRkV2F0Y2hwb2lu
dCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6cmVzdG9yZVNjcmF0Y2gp
OgorICAgICAgICAoSlNDOjpBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnN1Y2NlZWQpOgorICAgICAg
ICAoSlNDOjpBY2Nlc3NDYXNlOjpBY2Nlc3NDYXNlKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2Fz
ZTo6Z2V0KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6cmVwbGFjZSk6CisgICAgICAgIChK
U0M6OkFjY2Vzc0Nhc2U6OnRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpz
ZXR0ZXIpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjppbik6CisgICAgICAgIChKU0M6OkFj
Y2Vzc0Nhc2U6OmdldExlbmd0aCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6On5BY2Nlc3ND
YXNlKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKToK
KyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Y2xvbmUpOgorICAgICAgICAoSlNDOjpBY2Nlc3ND
YXNlOjpndWFyZGVkQnlTdHJ1Y3R1cmVDaGVjayk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6
OmNhblJlcGxhY2UpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpkdW1wKToKKyAgICAgICAg
KEpTQzo6QWNjZXNzQ2FzZTo6dmlzaXRXZWFrKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6
Z2VuZXJhdGVXaXRoR3VhcmQpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZSk6
CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQWNjZXNzOjpQb2x5bW9ycGhpY0FjY2Vzcyk6Cisg
ICAgICAgIChKU0M6OlBvbHltb3JwaGljQWNjZXNzOjp+UG9seW1vcnBoaWNBY2Nlc3MpOgorICAg
ICAgICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZVdpdGhDYXNlcyk6CisgICAg
ICAgIChKU0M6OlBvbHltb3JwaGljQWNjZXNzOjpyZWdlbmVyYXRlV2l0aENhc2UpOgorICAgICAg
ICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzczo6dmlzaXRXZWFrKToKKyAgICAgICAgKEpTQzo6UG9s
eW1vcnBoaWNBY2Nlc3M6OmR1bXApOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzczo6
cmVnZW5lcmF0ZSk6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAoSlND
OjpHZXRCeUlkQWNjZXNzOjpHZXRCeUlkQWNjZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
R2V0QnlJZEFjY2Vzczo6fkdldEJ5SWRBY2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpH
ZXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0dXJlU3R1YkluZm8pOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpHZXRCeUlkQWNjZXNzOjp2aXNpdFdlYWspOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpQ
b2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6ZnJvbSk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OlBvbHltb3JwaGljR2V0QnlJZExpc3Q6On5Qb2x5bW9ycGhpY0dldEJ5SWRM
aXN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6Y3Vy
cmVudFNsb3dQYXRoVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNH
ZXRCeUlkTGlzdDo6YWRkQWNjZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UG9seW1vcnBo
aWNHZXRCeUlkTGlzdDo6aXNGdWxsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UG9seW1vcnBo
aWNHZXRCeUlkTGlzdDo6aXNBbG1vc3RGdWxsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UG9s
eW1vcnBoaWNHZXRCeUlkTGlzdDo6ZGlkU2VsZlBhdGNoaW5nKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6UG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6dmlzaXRXZWFrKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oLgorICAgICAgICAo
SlNDOjpBY2Nlc3NDYXNlOjppc0dldCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmlzUHV0
KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6aXNJbik6CisgICAgICAgIChKU0M6OkFjY2Vz
c0Nhc2U6OnR5cGUpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpvZmZzZXQpOgorICAgICAg
ICAoSlNDOjpBY2Nlc3NDYXNlOjp2aWFQcm94eSk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6
OnN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6Om5ld1N0cnVjdHVyZSk6Cisg
ICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmNvbmRpdGlvblNldCk6CisgICAgICAgIChKU0M6OkFj
Y2Vzc0Nhc2U6OmFkZGl0aW9uYWxTZXQpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpkb2Vz
Q2FsbHMpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpjYWxsTGlua0luZm8pOgorICAgICAg
ICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzczo6aXNFbXB0eSk6CisgICAgICAgIChKU0M6OlBvbHlt
b3JwaGljQWNjZXNzOjpzaXplKToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNBY2Nlc3M6OmF0
KToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNBY2Nlc3M6Om9wZXJhdG9yW10pOgorICAgICAg
ICAoSlNDOjpHZXRCeUlkQWNjZXNzOjpHZXRCeUlkQWNjZXNzKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6R2V0QnlJZEFjY2Vzczo6aXNTZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpHZXRC
eUlkQWNjZXNzOjpvcGVyYXRvciEpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpHZXRCeUlkQWNj
ZXNzOjp0eXBlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6c3RydWN0
dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6Y29uZGl0aW9uU2V0
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6c3R1YlJvdXRpbmUpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpHZXRCeUlkQWNjZXNzOjpkb2VzQ2FsbHMpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojppc0VtcHR5KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6c2l6ZSk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmF0KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6UG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6b3BlcmF0b3JbXSk6IERlbGV0ZWQu
CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0Lmg6IFJl
bW92ZWQuCisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oOiBSZW1v
dmVkLgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6
UHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKToKKyAgICAgICAgKiBieXRlY29kZS9T
dHJ1Y3R1cmVTdHViSW5mby5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpk
ZXJlZik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjphZGRBY2Nlc3NDYXNlKToK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnJlc2V0KToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW5jZXMpOgorICAgICAgICAqIGJ5dGVj
b2RlL1N0cnVjdHVyZVN0dWJJbmZvLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZv
OjpTdHJ1Y3R1cmVTdHViSW5mbyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpp
bml0R2V0QnlJZFNlbGYpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdFB1
dEJ5SWRSZXBsYWNlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmluaXRTdHVi
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnNldFNlZW4pOgorICAgICAgICAo
SlNDOjpnZXRTdHJ1Y3R1cmVTdHViSW5mb0NvZGVPcmlnaW4pOgorICAgICAgICAoSlNDOjppc0dl
dEJ5SWRBY2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjppc1B1dEJ5SWRBY2Nlc3MpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjppc0luQWNjZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlU3R1YkluZm86OmluaXRHZXRCeUlkTGlzdCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjppbml0UHV0QnlJZFRyYW5zaXRpb24pOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdFB1dEJ5SWRMaXN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmluaXRJbkxpc3QpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6YWRkV2F0Y2hwb2ludCk6IERl
bGV0ZWQuCisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluKToKKyAgICAgICAgKiBmdGwvRlRMQ29t
cGlsZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6bW1BbGxvY2F0ZURhdGFTZWN0aW9uKToKKyAg
ICAgICAgKiBqaXQvQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIGppdC9BY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5oOiBSZW1vdmVkLgorICAgICAg
ICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJz
OjpicmFuY2hJZkVtcHR5KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpicmFuY2hT
dHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmJveEJvb2xlYW5QYXls
b2FkKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpib3hCb29sZWFuKToKKyAgICAg
ICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpib3hJbnQzMik6CisgICAgICAgICogaml0L0pJVC5o
OgorICAgICAgICAqIGppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChK
U0M6OmdhcmJhZ2VTdHViSW5mbyk6CisgICAgICAgIChKU0M6OkpJVElubGluZUNhY2hlR2VuZXJh
dG9yOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVEJ5SWRHZW5l
cmF0b3I6OkpJVEJ5SWRHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVRHZXRCeUlkR2VuZXJh
dG9yOjpKSVRHZXRCeUlkR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUUHV0QnlJZEdlbmVy
YXRvcjo6SklUUHV0QnlJZEdlbmVyYXRvcik6CisgICAgICAgICogaml0L0pJVElubGluZUNhY2hl
R2VuZXJhdG9yLmg6CisgICAgICAgIChKU0M6OkpJVElubGluZUNhY2hlR2VuZXJhdG9yOjpKSVRJ
bmxpbmVDYWNoZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVElubGluZUNhY2hlR2VuZXJh
dG9yOjpzdHViSW5mbyk6CisgICAgICAgIChKU0M6OkpJVEJ5SWRHZW5lcmF0b3I6OkpJVEJ5SWRH
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVRCeUlkR2VuZXJhdG9yOjpyZXBvcnRTbG93UGF0
aENhbGwpOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqaXQv
UmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OnJlcGF0Y2hDYWxsKToKKyAgICAgICAgKEpTQzo6
cmVwYXRjaEJ5SWRTZWxmQWNjZXNzKToKKyAgICAgICAgKEpTQzo6cmVzZXRHZXRCeUlEQ2hlY2tB
bmRMb2FkKToKKyAgICAgICAgKEpTQzo6cmVzZXRQdXRCeUlEQ2hlY2tBbmRMb2FkKToKKyAgICAg
ICAgKEpTQzo6cmVwbGFjZVdpdGhKdW1wKToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVHZXRCeUlE
KToKKyAgICAgICAgKEpTQzo6cmVwYXRjaEdldEJ5SUQpOgorICAgICAgICAoSlNDOjphcHByb3By
aWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjphcHByb3ByaWF0ZU9w
dGltaXppbmdQdXRCeUlkRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjp0cnlDYWNoZVB1dEJ5SUQp
OgorICAgICAgICAoSlNDOjpyZXBhdGNoUHV0QnlJRCk6CisgICAgICAgIChKU0M6OnRyeVJlcGF0
Y2hJbik6CisgICAgICAgIChKU0M6OnJlcGF0Y2hJbik6CisgICAgICAgIChKU0M6OnJlc2V0R2V0
QnlJRCk6CisgICAgICAgIChKU0M6OnJlc2V0UHV0QnlJRCk6CisgICAgICAgIChKU0M6OmNoZWNr
T2JqZWN0UHJvcGVydHlDb25kaXRpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpjaGVja09i
amVjdFByb3BlcnR5Q29uZGl0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmVtaXRSZXN0
b3JlU2NyYXRjaCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmxpbmtSZXN0b3JlU2NyYXRjaCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OnRvU3RyaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6a2luZEZvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmN1c3RvbUZvcik6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OmdlbmVyYXRlQnlJZFN0dWIpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpwYXRjaEp1bXBUb0dldEJ5SWRTdHViKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6dHJ5QnVp
bGRHZXRCeUlETGlzdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmJ1aWxkR2V0QnlJRExpc3Qp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjphcHByb3ByaWF0ZUxpc3RCdWlsZGluZ1B1dEJ5SWRG
dW5jdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmVtaXRQdXRSZXBsYWNlU3R1Yik6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OmVtaXRQdXRUcmFuc2l0aW9uU3R1Yik6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OnRyeUJ1aWxkUHV0QnlJZExpc3QpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpidWlsZFB1dEJ5SWRMaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvU2NyYXRjaFJlZ2lz
dGVyQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
Ojpsb2NrKToKKyAgICAgICAgKEpTQzo6U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjphbGxvY2F0
ZVNjcmF0Y2gpOgorICAgICAgICAqIGppdC9TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaDoKKyAg
ICAgICAgKEpTQzo6U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpTY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgorCiAyMDE1LTA5LTA4ICBBbmRy
ZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBSZW1vdmUgdW51
c2VkIEhlYXA6OmdldENvbnNlcnZhdGl2ZVJlZ2lzdGVyUm9vdHMoKS4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE4OTUxNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDggKzEwNCw3
IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYnl0ZWNvZGUvT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24uY3BwCiAgICAgYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQu
Y3BwCiAgICAgYnl0ZWNvZGUvT3Bjb2RlLmNwcAotICAgIGJ5dGVjb2RlL1BvbHltb3JwaGljR2V0
QnlJZExpc3QuY3BwCi0gICAgYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAKKyAg
ICBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKICAgICBieXRlY29kZS9QcmVjaXNlSnVt
cFRhcmdldHMuY3BwCiAgICAgYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uY3BwCiAgICAgYnl0
ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKQEAgLTM1Niw3ICszNTUsNiBAQCBzZXQoSmF2YVNjcmlw
dENvcmVfU09VUkNFUwogICAgIGludGVycHJldGVyL1Byb3RvQ2FsbEZyYW1lLmNwcAogICAgIGlu
dGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAKIAotICAgIGppdC9BY2Nlc3NvckNhbGxKSVRTdHVi
Um91dGluZS5jcHAKICAgICBqaXQvQXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3MuY3BwCiAgICAg
aml0L0Fzc2VtYmx5SGVscGVycy5jcHAKICAgICBqaXQvQmluYXJ5U3dpdGNoLmNwcApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENv
cmUudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxODk1MTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNDMsOCArMzQzLDcgQEAKICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcCIg
Lz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE9w
Y29kZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQb2x5bW9y
cGhpY0dldEJ5SWRMaXN0LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVj
b2RlXFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cYnl0ZWNvZGVcUG9seW1vcnBoaWNBY2Nlc3MuY3BwIiAvPgogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cYnl0ZWNvZGVcUHJlY2lzZUp1bXBUYXJnZXRzLmNwcCIgLz4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFByb3BlcnR5Q29uZGl0aW9uLmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFB1dEJ5SWRTdGF0dXMuY3BwIiAvPgpA
QCAtNjE3LDcgKzYxNiw2IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRl
clxKU1N0YWNrLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGludGVycHJldGVy
XFByb3RvQ2FsbEZyYW1lLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGludGVy
cHJldGVyXFN0YWNrVmlzaXRvci5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxq
aXRcQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5caml0XEFyaXR5Q2hlY2tGYWlsUmV0dXJuVGh1bmtzLmNwcCIgLz4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGppdFxBc3NlbWJseUhlbHBlcnMuY3BwIiAvPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5caml0XEJpbmFyeVN3aXRjaC5jcHAiIC8+CkBAIC0xMDQ0LDggKzEw
NDIsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2Rl
XE9wY29kZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcT3BlcmFu
ZHMuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFBvbHltb3JwaGlj
R2V0QnlJZExpc3QuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFBv
bHltb3JwaGljUHV0QnlJZExpc3QuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5
dGVjb2RlXFBvbHltb3JwaGljQWNjZXNzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxieXRlY29kZVxQcmVjaXNlSnVtcFRhcmdldHMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGJ5dGVjb2RlXFByb3BlcnR5Q29uZGl0aW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxieXRlY29kZVxQdXRCeUlkU3RhdHVzLmgiIC8+CkBAIC0xNDE2LDcgKzE0MTMs
NiBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW50ZXJwcmV0ZXJcUHJvdG9DYWxsRnJh
bWUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGludGVycHJldGVyXFJlZ2lzdGVy
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRlclxTdGFja1Zpc2l0
b3IuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxBY2Nlc3NvckNhbGxKSVRT
dHViUm91dGluZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEFyaXR5Q2hl
Y2tGYWlsUmV0dXJuVGh1bmtzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRc
QXNzZW1ibHlIZWxwZXJzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcQmlu
YXJ5U3dpdGNoLmgiIC8+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENv
cmUudmN4cHJvai5maWx0ZXJzCShyZXZpc2lvbiAxODk1MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRl
cnMJKHdvcmtpbmcgY29weSkKQEAgLTE5OCw3ICsxOTgsNyBAQAogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cYnl0ZWNvZGVcT3Bjb2RlLmNwcCI+CiAgICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9G
aWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRl
Y29kZVxQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxieXRlY29kZVxQb2x5bW9ycGhpY0FjY2Vzcy5jcHAiPgogICAgICAgPEZpbHRlcj5ieXRl
Y29kZTwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cYnl0ZWNvZGVcUHV0QnlJZFN0YXR1cy5jcHAiPgpAQCAtMTYyNiw5ICsxNjI2LDYgQEAKICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGxsdm1cTExWTUFQSS5jcHAiPgogICAgICAgPEZpbHRl
cj5sbHZtPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxqaXRcQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuY3BwIj4KLSAgICAgIDxGaWx0ZXI+
aml0PC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxpbnNwZWN0b3JcQ29uc29sZU1lc3NhZ2UuY3BwIj4KICAgICAgIDxGaWx0ZXI+aW5zcGVjdG9y
PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CkBAIC0xNjk1LDkgKzE2OTIsNiBAQAogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXEpTSmF2YVNjcmlwdENhbGxGcmFtZVByb3Rv
dHlwZS5jcHAiPgogICAgICAgPEZpbHRlcj5pbnNwZWN0b3I8L0ZpbHRlcj4KICAgICA8L0NsQ29t
cGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFBvbHltb3JwaGljR2V0
QnlJZExpc3QuY3BwIj4KLSAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4KLSAgICA8L0Ns
Q29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHByb2ZpbGVyXFByb2ZpbGVySmV0
dGlzb25SZWFzb24uY3BwIj4KICAgICAgIDxGaWx0ZXI+cHJvZmlsZXI8L0ZpbHRlcj4KICAgICA8
L0NsQ29tcGlsZT4KQEAgLTIwOTcsNyArMjA5MSw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxieXRlY29kZVxPcGVyYW5kcy5oIj4KICAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRl
cj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2Rl
XFBvbHltb3JwaGljUHV0QnlJZExpc3QuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxi
eXRlY29kZVxQb2x5bW9ycGhpY0FjY2Vzcy5oIj4KICAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0Zp
bHRlcj4KICAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVj
b2RlXFB1dEJ5SWRTdGF0dXMuaCI+CkBAIC00MjA1LDkgKzQxOTksNiBAQAogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cbGx2bVxMTFZNSGVhZGVycy5oIj4KICAgICAgIDxGaWx0ZXI+bGx2bTwv
RmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0
XEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmgiPgotICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRl
cj4KLSAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGFzc2VtYmxl
clxBYm9ydFJlYXNvbi5oIj4KICAgICAgIDxGaWx0ZXI+YXNzZW1ibGVyPC9GaWx0ZXI+CiAgICAg
PC9DbEluY2x1ZGU+CkBAIC00Mjg2LDkgKzQyNzcsNiBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxKU0NJbmxpbmVzLmgiPgogICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0
ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29k
ZVxQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgiPgotICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmls
dGVyPgotICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccHJvZmls
ZXJcUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oIj4KICAgICAgIDxGaWx0ZXI+cHJvZmlsZXI8L0Zp
bHRlcj4KICAgICA8L0NsSW5jbHVkZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiAxODk1MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjcyLDcgKzI3
Miw2IEBACiAJCTBGMzAwQjdDMThBQjFCMTQwMEE2RDcyRSAvKiBERkdJbnRlZ2VyQ2hlY2tDb21i
aW5pbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYzMDBCN0ExOEFCMUIxNDAwQTZENzJFIC8qIERGR0ludGVnZXJDaGVja0NvbWJpbmluZ1Bo
YXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEYzNEIxNDkxNkQ0MjAxMDAwMUNEQTVBIC8qIERGR1VzZUtpbmQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzNEIxNDcxNkQ0MjAwRTAwMUNEQTVB
IC8qIERGR1VzZUtpbmQuY3BwICovOyB9OwogCQkwRjM0QjE0QTE2RDQyMDEzMDAxQ0RBNUEgLyog
REZHVXNlS2luZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYzNEIxNDgxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjM0QjE0QzE2RDQzRTBEMDAx
Q0RBNUEgLyogUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM0QjE0QjE2RDQzRTBDMDAxQ0RBNUEg
LyogUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYzOEIwMTExN0NGMDc4MDAwQjE0NEQzIC8q
IExMSW50RW50cnlwb2ludC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjM4QjAwRjE3Q0YwNzdGMDBCMTQ0RDMgLyogTExJbnRFbnRyeXBvaW50LmNw
cCAqLzsgfTsKIAkJMEYzOEIwMTIxN0NGMDc4MzAwQjE0NEQzIC8qIExMSW50RW50cnlwb2ludC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzOEIwMTAx
N0NGMDc3RjAwQjE0NEQzIC8qIExMSW50RW50cnlwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMzhCMDE3MTdDRkU3NTUwMEIxNDREMyAv
KiBERkdDb21waWxhdGlvbktleS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjM4QjAxMzE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25L
ZXkuY3BwICovOyB9OwpAQCAtMzI0LDggKzMyMyw2IEBACiAJCTBGNDg1MzJBMTg3REZERUMwMDgz
QjY4NyAvKiBGVExSZWNvdmVyeU9wY29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY0ODUzMjYxODdERkRFQzAwODNCNjg3IC8qIEZUTFJlY292ZXJ5
T3Bjb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY0OTNBRkExNkQwQ0FEMzAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDkzQUY4MTZEMENBRDEw
MDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi87IH07CiAJCTBGNEI5NERDMTdCOUYwNzUw
MEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0Qjk0REIxN0I5RjA3NTAwREQwM0E0IC8qIFR5cGVkQXJy
YXlJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKLQkJMEY0Q0VENUUxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJZExpc3Qu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0Q0VE
NUMxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwICovOyB9Owot
CQkwRjRDRUQ1RjE4Q0VBN0FCMDA4MDJGRTAgLyogUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0Q0VENUQxOENF
QTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJZExpc3QuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjRGMjlERjE4QjZBRDFDMDA1N0JD
MTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RjI5REQxOEI2QUQxQzAw
NTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcCAqLzsg
fTsKIAkJMEY0RjI5RTAxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50
RXN0aW1hdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjRGMjlERTE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291
bnRFc3RpbWF0aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRjUwQUYzQzE5M0U4QjM5MDA2NzRFRTggLyogREZHU3RydWN0dXJlQ2xv
YmJlclN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjUwQUYzQjE5M0U4QjM5MDA2NzRFRTggLyogREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM5OCw4
ICszOTUsNiBAQAogCQkwRjcxNENBNDE2RUE5MkYwMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJv
cGFnYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjcxNENBMTE2RUE5MkVEMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRp
b25QaGFzZS5jcHAgKi87IH07CiAJCTBGNzE0Q0E1MTZFQTkyRjIwMEYzRUJFQiAvKiBERkdCYWNr
d2FyZHNQcm9wYWdhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjcxNENBMjE2RUE5MkVEMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJv
cGFnYXRpb25QaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGNzQzQkFBMTZCODgyNDkwMDlGOTI3NyAvKiBBUk02NERpc2Fzc2VtYmxlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTJBM0Ey
MDE2NTFDNjYxMDBBODBBRkUgLyogQVJNNjREaXNhc3NlbWJsZXIuY3BwICovOyB9OwotCQkwRjc1
NzZEMjE4RTFGRUU5MDAyRUY0Q0QgLyogQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NTc2RDAxOEUx
RkVFOTAwMkVGNENEIC8qIEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmNwcCAqLzsgfTsKLQkJ
MEY3NTc2RDMxOEUxRkVFOTAwMkVGNENEIC8qIEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc1NzZEMTE4
RTFGRUU5MDAyRUY0Q0QgLyogQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjc2NkQyODE1QThDQzFF
MDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NjZEMjYxNUE4Q0MxQjAwOEYzNjNFIC8qIEpJVFN0dWJS
b3V0aW5lLmNwcCAqLzsgfTsKIAkJMEY3NjZEMkIxNUE4Q0MzODAwOEYzNjNFIC8qIEpJVFN0dWJS
b3V0aW5lU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNzY2RDI5MTVBOENDMzQwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZVNldC5jcHAgKi87
IH07CiAJCTBGNzY2RDJDMTVBOENDM0EwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZVNldC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NjZEMkExNUE4
Q0MzNDAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTQ3Myw4ICs0NjgsNiBAQAogCQkwRjlFMzI2
NDFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUUzMjYyMUIwNUFC
MDQwMDgwMUVENSAvKiBERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOUZCNEY0MTdGQ0I5MTcw
MENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUZCNEYyMTdGQ0I5MTcwMENCNjdGOCAvKiBERkdT
dGFja0xheW91dFBoYXNlLmNwcCAqLzsgfTsKIAkJMEY5RkI0RjUxN0ZDQjkxNzAwQ0I2N0Y4IC8q
IERGR1N0YWNrTGF5b3V0UGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGOUZCNEYzMTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBo
YXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJ
MEY5RkM4QzMxNEUxQjVGRTAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RkM4QkYxNEUx
QjVGQjAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwICovOyB9OwotCQkwRjlG
QzhDNDE0RTFCNjAwMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RkM4QzAxNEUxQjVGQjAw
RDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjlGQzhDNTE0RTFCNjA0MDBENTJBRTAgLyog
UHV0S2luZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY5RkM4QzExNEUxQjVGQjAwRDUyQUUwIC8qIFB1dEtpbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkEyQzE3QjE3RDdDRjg0MDA5RDAxNUYg
LyogVGVzdFJ1bm5lclV0aWxzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQTJDMTc5MTdEN0NGODQwMDlEMDE1RiAvKiBUZXN0UnVubmVyVXRpbHMu
Y3BwICovOyB9OwogCQkwRkEyQzE3QzE3RDdDRjg0MDA5RDAxNUYgLyogVGVzdFJ1bm5lclV0aWxz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkEyQzE3
QTE3RDdDRjg0MDA5RDAxNUYgLyogVGVzdFJ1bm5lclV0aWxzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTc0Miw2ICs3MzUsOCBAQAogCQkwRkY4
QkRFQTFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY4QkRFODFBRDRDRjcxMDBERkU4ODQg
LyogSW5mZXJyZWRWYWx1ZS5jcHAgKi87IH07CiAJCTBGRjhCREVCMUFENENGNzEwMERGRTg4NCAv
KiBJbmZlcnJlZFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkY4QkRFOTFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRjkyMkQ0MTRG
NDZCNDEwMDQxQTI0RSAvKiBMTEludE9mZnNldHNFeHRyYWN0b3IuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NjgwQTExNEJBN0Y4MjAwQkZFMjcy
IC8qIExMSW50T2Zmc2V0c0V4dHJhY3Rvci5jcHAgKi87IH07CisJCTBGRjlDRTczMUI5Q0Q2RDAw
MDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY5Q0U3MTFCOUNENkQwMDA0RURDQTYgLyogUG9seW1v
cnBoaWNBY2Nlc3MuY3BwICovOyB9OworCQkwRkY5Q0U3NDFCOUNENkQwMDA0RURDQTYgLyogUG9s
eW1vcnBoaWNBY2Nlc3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRjlDRTcyMUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRkE1NDk3
MTZCODgzNTAwMEIzQTk4MiAvKiBBNjRET3Bjb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MkEzQTIyMTY1MUM2OTcwMEE4MEFGRSAvKiBBNjRE
T3Bjb2RlLmNwcCAqLzsgfTsKIAkJMEZGQTU0OTgxNkI4ODM1MzAwQjNBOTgyIC8qIEE2NERPcGNv
ZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MkEz
QTIzMTY1MUM2OTcwMEE4MEFGRSAvKiBBNjRET3Bjb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGQjZDMzgxQUY0OEREQzAwREIxQkY3IC8q
IFR5cGVvZlR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZGQjZDMzYxQUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5cGUuY3BwICovOyB9OwpA
QCAtMjEwMyw3ICsyMDk4LDYgQEAKIAkJMEYzMDBCN0ExOEFCMUIxNDAwQTZENzJFIC8qIERGR0lu
dGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmg7IHBhdGggPSBkZmcvREZHSW50ZWdl
ckNoZWNrQ29tYmluaW5nUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYz
NEIxNDcxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHVXNlS2luZC5jcHA7IHBhdGggPSBkZmcvREZHVXNlS2lu
ZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzRCMTQ4MTZENDIwMEUwMDFD
REE1QSAvKiBERkdVc2VLaW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R1VzZUtpbmQuaDsgcGF0aCA9IGRmZy9ERkdVc2VLaW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTBGMzRCMTRCMTZENDNFMEMwMDFDREE1QSAvKiBQb2x5bW9ycGhpY0FjY2Vzc1N0
cnVjdHVyZUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9seW1vcnBo
aWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MzhCMDBGMTdDRjA3N0YwMEIxNDREMyAvKiBMTEludEVudHJ5cG9pbnQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gTExJbnRFbnRyeXBvaW50LmNwcDsgcGF0aCA9IGxsaW50L0xMSW50RW50cnlwb2lu
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzhCMDEwMTdDRjA3N0YwMEIx
NDREMyAvKiBMTEludEVudHJ5cG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExJbnRFbnRyeXBvaW50
Lmg7IHBhdGggPSBsbGludC9MTEludEVudHJ5cG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEYzOEIwMTMxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uS2V5LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NvbXBpbGF0aW9uS2V5
LmNwcDsgcGF0aCA9IGRmZy9ERkdDb21waWxhdGlvbktleS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0yMTU2LDggKzIxNTAsNiBAQAogCQkwRjQ4NTMyNjE4N0RGREVDMDA4M0I2
ODcgLyogRlRMUmVjb3ZlcnlPcGNvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gRlRMUmVjb3ZlcnlPcGNvZGUuaDsgcGF0aCA9IGZ0bC9GVExSZWNvdmVyeU9wY29kZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ5M0FGODE2RDBDQUQxMDA4NDUwOEIgLyog
U291cmNlUHJvdmlkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U291cmNlUHJvdmlkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRCOTRE
QjE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRBcnJheUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRBcnJheUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMEY0Q0VENUMxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJ
ZExpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUG9seW1vcnBo
aWNHZXRCeUlkTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNENFRDVE
MThDRUE3QUIwMDgwMkZFMCAvKiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvbHltb3JwaGljR2V0QnlJZExpc3QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0RjI5REQxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRp
Y0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNw
cDsgcGF0aCA9IGRmZy9ERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEYyOURFMThCNkFEMUMwMDU3QkMxNSAv
KiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFz
ZS5oOyBwYXRoID0gZGZnL0RGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTBBRjNCMTkzRThCMzkwMDY3NEVFOCAv
KiBERkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmg7IHBhdGggPSBkZmcvREZHU3RydWN0dXJl
Q2xvYmJlclN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjI5LDggKzIy
MjEsNiBAQAogCQkwRjcwMjVBODE3MTRCMEY4MDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVy
Q29tbW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRDb21w
aWxlckNvbW1vbi5oOyBwYXRoID0gZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjcxNENBMTE2RUE5MkVEMDBGM0VCRUIgLyogREZH
QmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9E
RkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY3MTRDQTIxNkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9u
UGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmFja3dhcmRzUHJv
cGFnYXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY3NTc2RDAxOEUxRkVFOTAwMkVGNENE
IC8qIEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY3NTc2RDExOEUxRkVFOTAwMkVGNENEIC8qIEFjY2Vzc29y
Q2FsbEpJVFN0dWJSb3V0aW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFj
Y2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGNzY2RDFDMTVBNTAyOEQwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRTdHViUm91dGluZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjc2NkQyNjE1QThDQzFCMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUU3R1YlJvdXRpbmUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc2NkQyOTE1QThDQzM0MDA4RjM2
M0UgLyogSklUU3R1YlJvdXRpbmVTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSklUU3R1YlJvdXRpbmVTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjMwMyw4ICsyMjkzLDYgQEAKIAkJMEY5RTMyNjIxQjA1QUIwNDAwODAxRUQ1IC8qIERG
R1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHU3Rv
cmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY5RkI0RjIxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RhY2tMYXlvdXRQaGFzZS5jcHA7
IHBhdGggPSBkZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGOUZCNEYzMTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1N0YWNrTGF5b3V0UGhhc2Uu
aDsgcGF0aCA9IGRmZy9ERkdTdGFja0xheW91dFBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTBGOUZDOEJGMTRFMUI1RkIwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRM
aXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBvbHltb3JwaGlj
UHV0QnlJZExpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjlGQzhDMDE0
RTFCNUZCMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGOUZDOEMxMTRFMUI1RkIwMEQ1MkFFMCAvKiBQdXRLaW5kLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1dEtpbmQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZBMkMxNzkxN0Q3Q0Y4NDAwOUQwMTVGIC8qIFRlc3RSdW5uZXJV
dGlscy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXN0UnVubmVy
VXRpbHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkEyQzE3QTE3RDdDRjg0
MDA5RDAxNUYgLyogVGVzdFJ1bm5lclV0aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFRlc3RSdW5uZXJVdGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MjU3OSw2ICsyNTY3LDggQEAKIAkJMEZGOEJERTgxQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVk
VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5mZXJyZWRW
YWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjhCREU5MUFENENGNzEw
MERGRTg4NCAvKiBJbmZlcnJlZFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEluZmVycmVkVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGOTIy
Q0YxNEY0NkIxMzAwNDFBMjRFIC8qIEpTQ0xMSW50T2Zmc2V0c0V4dHJhY3RvciAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5l
eGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gSlNDTExJbnRPZmZzZXRzRXh0
cmFjdG9yOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQkwRkY5Q0U3MTFC
OUNENkQwMDA0RURDQTYgLyogUG9seW1vcnBoaWNBY2Nlc3MuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUG9seW1vcnBoaWNBY2Nlc3MuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkY5Q0U3MjFCOUNENkQwMDA0RURDQTYgLyogUG9seW1vcnBoaWNB
Y2Nlc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9seW1vcnBoaWNBY2Nl
c3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQjZDMzYxQUY0OEREQzAwREIx
QkY3IC8qIFR5cGVvZlR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gVHlwZW9mVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRkI2QzM3
MUFGNDhEREMwMERCMUJGNyAvKiBUeXBlb2ZUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFR5cGVvZlR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZG
Qzk5RDAxODRFQzhBRDAwOUMxMEFCIC8qIENvbnN0YW50TW9kZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDb25zdGFudE1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTQwOTYsMTAgKzQwODYsNiBAQAogCQkxNDI5RDkyQzBFRDIyRDcwMDBCODk2MTkgLyog
aml0ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkwRkYw
NTRGNzFBQzM1QjQ0MDBFNUJFNTcgLyogRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6LmNwcCAqLywK
LQkJCQkwRkYwNTRGODFBQzM1QjQ0MDBFNUJFNTcgLyogRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6
LmggKi8sCi0JCQkJMEY3NTc2RDAxOEUxRkVFOTAwMkVGNENEIC8qIEFjY2Vzc29yQ2FsbEpJVFN0
dWJSb3V0aW5lLmNwcCAqLywKLQkJCQkwRjc1NzZEMTE4RTFGRUU5MDAyRUY0Q0QgLyogQWNjZXNz
b3JDYWxsSklUU3R1YlJvdXRpbmUuaCAqLywKIAkJCQkwRjZCMUNDNzE4NjQxREY4MDA4NDVEOTcg
LyogQXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3MuY3BwICovLAogCQkJCTBGNkIxQ0M4MTg2NDFE
RjgwMDg0NUQ5NyAvKiBBcml0eUNoZWNrRmFpbFJldHVyblRodW5rcy5oICovLAogCQkJCTBGMjRF
NTNCMTdFQTlGNTkwMEFCQjIxNyAvKiBBc3NlbWJseUhlbHBlcnMuY3BwICovLApAQCAtNDEwOCw2
ICs0MDk0LDggQEAKIAkJCQkwRjY0QjI3MDFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNo
LmggKi8sCiAJCQkJMEYyNEU1M0QxN0VBOUY1OTAwQUJCMjE3IC8qIENDYWxsSGVscGVycy5oICov
LAogCQkJCTBGRDgyRTM3MTQxQUIxNDIwMDE3OUM5NCAvKiBDb21wYWN0SklUQ29kZU1hcC5oICov
LAorCQkJCTBGRjA1NEY3MUFDMzVCNDQwMEU1QkU1NyAvKiBFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1
enouY3BwICovLAorCQkJCTBGRjA1NEY4MUFDMzVCNDQwMEU1QkU1NyAvKiBFeGVjdXRhYmxlQWxs
b2NhdGlvbkZ1enouaCAqLywKIAkJCQlBN0I0OERCNjBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0
YWJsZUFsbG9jYXRvci5jcHAgKi8sCiAJCQkJQTdCNDhEQjUwRUU3NENGQzAwRENCREI2IC8qIEV4
ZWN1dGFibGVBbGxvY2F0b3IuaCAqLywKIAkJCQk4NkRCNjQ2MzBGOTVDNkZDMDBEN0Q5MjEgLyog
RXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcCAqLywKQEAgLTQxNTQsOCArNDE0Miw2
IEBACiAJCQkJMEZDNzEyRTExN0NEODc4RjAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrLmggKi8sCiAJCQkJQTc2RjU0QTIxM0IyOEFBQjAwRUYyQkNFIC8qIEpJ
VFdyaXRlQmFycmllci5oICovLAogCQkJCUE3NkM1MTc0MTE4Mjc0OEQwMDcxNUIwNSAvKiBKU0lu
dGVyZmFjZUpJVC5oICovLAotCQkJCTBGRUU5ODQyMUE4OTIyNzUwMDc1NEU5MyAvKiBTZXR1cFZh
cmFyZ3NGcmFtZS5jcHAgKi8sCi0JCQkJMEZFRTk4NDAxQTg4NjVCNjAwNzU0RTkzIC8qIFNldHVw
VmFyYXJnc0ZyYW1lLmggKi8sCiAJCQkJMEZFODM0MTUxQTZFRjk3QjAwRDA0ODQ3IC8qIFBvbHlt
b3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcCAqLywKIAkJCQkwRkU4MzQxNjFBNkVGOTdCMDBEMDQ4
NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaCAqLywKIAkJCQkwRkE3QThFOTE4QjQx
M0M4MDA1MjM3MUQgLyogUmVnLmNwcCAqLywKQEAgLTQxNjksNiArNDE1NSw4IEBACiAJCQkJMEYy
NEU1NEExN0VFMjc0OTAwQUJCMjE3IC8qIFJlcGF0Y2guaCAqLywKIAkJCQkwRkE3QThFRDE4Q0U0
RkQ4MDA1MjM3MUQgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcCAqLywKIAkJCQkwRjI0
RTU0QjE3RUUyNzQ5MDBBQkIyMTcgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmggKi8sCisJ
CQkJMEZFRTk4NDIxQTg5MjI3NTAwNzU0RTkzIC8qIFNldHVwVmFyYXJnc0ZyYW1lLmNwcCAqLywK
KwkJCQkwRkVFOTg0MDFBODg2NUI2MDA3NTRFOTMgLyogU2V0dXBWYXJhcmdzRnJhbWUuaCAqLywK
IAkJCQlBNzA5RjJFRjE3QTBBQzA0MDA1MTJFOTggLyogU2xvd1BhdGhDYWxsLmggKi8sCiAJCQkJ
QTczODY1NTExMTg2OTdCNDAwNTQwMjc5IC8qIFNwZWNpYWxpemVkVGh1bmtKSVQuaCAqLywKIAkJ
CQlBN0ZGNjQ3QTE4QzUyRTg1MDBCNTUzMDcgLyogU3BpbGxSZWdpc3RlcnNNb2RlLmggKi8sCkBA
IC01NjAyLDExICs1NTkwLDggQEAKIAkJCQk5NjlBMDc5NTBFRDFEM0FFMDBGMUY2ODEgLyogT3Bj
b2RlLmggKi8sCiAJCQkJMEYyQkRDMkIxNTFGREU4QjAwQ0Q4OTEwIC8qIE9wZXJhbmRzLmggKi8s
CiAJCQkJQTcwNDQ3RTkxN0EwQkQ0NjAwRjU4OThFIC8qIE9wZXJhbmRzSW5saW5lcy5oICovLAot
CQkJCTBGMzRCMTRCMTZENDNFMEMwMDFDREE1QSAvKiBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVy
ZUxpc3QuaCAqLywKLQkJCQkwRjRDRUQ1QzE4Q0VBN0FCMDA4MDJGRTAgLyogUG9seW1vcnBoaWNH
ZXRCeUlkTGlzdC5jcHAgKi8sCi0JCQkJMEY0Q0VENUQxOENFQTdBQjAwODAyRkUwIC8qIFBvbHlt
b3JwaGljR2V0QnlJZExpc3QuaCAqLywKLQkJCQkwRjlGQzhCRjE0RTFCNUZCMDBENTJBRTAgLyog
UG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAgKi8sCi0JCQkJMEY5RkM4QzAxNEUxQjVGQjAwRDUy
QUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuaCAqLywKKwkJCQkwRkY5Q0U3MTFCOUNENkQw
MDA0RURDQTYgLyogUG9seW1vcnBoaWNBY2Nlc3MuY3BwICovLAorCQkJCTBGRjlDRTcyMUI5Q0Q2
RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5oICovLAogCQkJCTBGOTgyMDVEMTZCRkUz
N0YwMDI0MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuY3BwICovLAogCQkJCTBGOTgyMDVFMTZC
RkUzN0YwMDI0MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuaCAqLywKIAkJCQkwRkQzRTQwNzFC
NjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uY3BwICovLApAQCAtNTYzNyw4ICs1
NjIyLDggQEAKIAkJCQkwRjJENERFNzE5ODMyREFDMDA3RDRCMTkgLyogVHlwZUxvY2F0aW9uLmgg
Ki8sCiAJCQkJQTc5RTc4MUUxNUVFQ0JBODAwNDdDODU1IC8qIFVubGlua2VkQ29kZUJsb2NrLmNw
cCAqLywKIAkJCQlBNzlFNzgxRjE1RUVDQkE4MDA0N0M4NTUgLyogVW5saW5rZWRDb2RlQmxvY2su
aCAqLywKLQkJCQkxNDE0MkU1MDFCNzk2RUNFMDBGNEJGNEIgLyogVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUuaCAqLywKIAkJCQkxNDE0MkU1NDFCNzk3M0MwMDBGNEJGNEIgLyogVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGUuY3BwICovLAorCQkJCTE0MTQyRTUwMUI3OTZFQ0UwMEY0QkY0QiAv
KiBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oICovLAogCQkJCUI1OUY4OTM4MTg5MUFEQjUw
MEQ1Q0NEQyAvKiBVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtLmNwcCAqLywKIAkJCQlCNTlGODkz
NzE4OTFBRDMzMDBENUNDREMgLyogVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbS5oICovLAogCQkJ
CTBGOTYzQjM2MTNGQzZGREUwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCAqLywKQEAgLTYyMDMs
NyArNjE4OCw2IEBACiAJCQkJMEZDMDk3NzExNDY5M0FGNTAwQ0YyNDQyIC8qIERGR09TUkV4aXRD
b21waWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3MDI1QUExNzE0QjBGQzAwMzgyQzBFIC8q
IERGR09TUkV4aXRDb21waWxlckNvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFRkM5QUIx
NjgxQTNCNjAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTBGNENFRDVGMThDRUE3QUIwMDgwMkZFMCAvKiBQb2x5bW9ycGhpY0dldEJ5SWRM
aXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJFRTE3MTc4RTczMDA2OTBDN0YgLyogREZH
T1NSRXhpdFByZXBhcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZGQzk1QzE0RUY5MEFG
MDBDNzI1MzIgLyogREZHUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RUE3MEVFMTlGNUI1
QzQwMDk4RjVFQyAvKiBKU0NvbnRleHRSZWZJbnNwZWN0b3JTdXBwb3J0LmggaW4gSGVhZGVycyAq
LywKQEAgLTYyNTIsNiArNjIzNiw3IEBACiAJCQkJOTlFNDVBMjQxOEExQjI1OTAwMjZEODhGIC8q
IEVtcHR5SW5wdXRDdXJzb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MTQyRTUzMUI3OTZFREQw
MEY0QkY0QiAvKiBFeGVjdXRhYmxlSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTlFNDVBMjYx
OEExQjI1OTAwMjZEODhGIC8qIEVuY29kZWRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZG
OUNFNzQxQjlDRDZEMDAwNEVEQ0E2IC8qIFBvbHltb3JwaGljQWNjZXNzLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjU4NzRFRTE5NEZFQjEyMDBBQUIyQzEgLyogREZHTWF5RXhpdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMzMDQ2MDcwRTFGNDk3RjAwMzIzMkNGIC8qIEVycm9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzAyRTkwRDBFMTgzOURCMDAwRjkyOTcgLyogRXJyb3JDb25zdHJ1Y3Rvci5o
IGluIEhlYWRlcnMgKi8sCkBAIC02NDg1LDcgKzY0NzAsNiBAQAogCQkJCUJDMThDNDFFMEUxNkY1
Q0QwMEIzNDQ2MCAvKiBKU0NvbnRleHRSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0OENEMUQ4
MTA4Q0Y5MDIwMDgxNjNDNiAvKiBKU0NvbnRleHRSZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzIwMjhCODE3OTc2MDFFMDA5ODAyOEMgLyogSlNDVGVzdFJ1bm5lclV0aWxzLmggaW4g
SGVhZGVycyAqLywKLQkJCQkwRjc1NzZEMzE4RTFGRUU5MDAyRUY0Q0QgLyogQWNjZXNzb3JDYWxs
SklUU3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkVDMTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0RhdGFWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZFRTE3QjZCNUFC
MDBBN0FFM0YgLyogSlNEYXRhVmlld1Byb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc4
ODAxNDExNDcxQUQ5MjAwNDFCMDE2IC8qIEpTRGF0ZU1hdGguaCBpbiBIZWFkZXJzICovLApAQCAt
NjY4NSw4ICs2NjY5LDYgQEAKIAkJCQkwRkNDQUU0NTE2RDBDRjc0MDBEMEM2NUIgLyogUGFyc2Vy
RXJyb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3N0YxODI1MTY0MTkyQzcwMDY0MEE0NyAvKiBQ
YXJzZXJNb2Rlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjUzMDNENjQxNDQ3QjlFMTAwRDNGOTA0
IC8qIFBhcnNlclRva2Vucy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEYzNEIxNEMxNkQ0M0UwRDAw
MUNEQTVBIC8qIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdC5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJMEY5RkM4QzQxNEUxQjYwMDAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGOEYxNDM0MUFERjA5MDEwMEVENzkyQyAvKiBERkdFcG9j
aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5ODIwNjExNkJGRTM4MzAwMjQwRDAyIC8qIFByZWNp
c2VKdW1wVGFyZ2V0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyREQ4MTUxQUIzRDhCRTAwQkJC
OEU4IC8qIERGR0ZvckFsbEtpbGxzLmggaW4gSGVhZGVycyAqLywKQEAgLTc4NDcsNyArNzgyOSw2
IEBACiAJCQkJMEYwQjgzOUMxNEJDRjQ2MzAwODg1QjRGIC8qIExMSW50VGh1bmtzLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGQ0VGQUNEMTgwNUU3NTUwMDQ3MkNFNCAvKiBMTFZNQVBJLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE3RTVBQjM3MTc5OUU0QjIwMEQyODMzRCAvKiBMTFZNRGlzYXNz
ZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGNENFRDVFMThDRUE3QUIwMDgwMkZFMCAv
KiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5RERF
MTA3RUM3RTcwMDY1MDQ0NiAvKiBMb29rdXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0Njgw
Q0MxNEJCQjE3QTAwQkZFMjcyIC8qIExvd0xldmVsSW50ZXJwcmV0ZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTRCNzIzQjIxMkQ3REE0NjAwM0JENUVEIC8qIE1hY2hpbmVTdGFja01hcmtlci5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTc4ODksNyArNzg3MCw2IEBACiAJCQkJMEZFMjI4RUUxNDM2
QUIyQzAwMTk2QzQ4IC8qIE9wdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ4RjIxQkMx
MDdFQzU0RDAwNDJFQzJDIC8qIFBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzA1MkMz
NDBGQjc5MjE5MDA0OEZEQzMgLyogUGFyc2VyQXJlbmEuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJ
MEY5RkM4QzMxNEUxQjVGRTAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEY5ODIwNjAxNkJGRTM4MTAwMjQwRDAyIC8qIFByZWNpc2VKdW1w
VGFyZ2V0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NTc0MkY2NTBERDExRjVBMDAwOTE3RkIg
LyogUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCOUNGODE5RDBCQUMxMDBCMUQx
QjUgLyogRlRMT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc5MDYsNiArNzg4Niw3
IEBACiAJCQkJMEYxOTBDQUMxODlEODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFz
b24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QjMxNjZBRDM1QzAwMEY1QkEzIC8qIFBy
b2ZpbGVyT3JpZ2luLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUI0MTY2QUQzNUMwMDBG
NUJBMyAvKiBQcm9maWxlck9yaWdpblN0YWNrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRjlD
RTczMUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRkIxMDU4QjE2NzU0ODMxMDBGOEFCNkUgLyogUHJvZmlsZXJPU1JFeGl0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGQjEwNThEMTY3NTQ4MzcwMEY4QUI2RSAvKiBQcm9maWxlck9T
UkV4aXRTaXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMTM5MTJCMTY3NzFDM0EwMDlDQ0Iw
NyAvKiBQcm9maWxlclByb2ZpbGVkQnl0ZWNvZGVzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtODAx
MSw3ICs3OTkyLDYgQEAKIAkJCQlBNzZGMjc5NDE1RjEzQzk2MDA1MTdENjcgLyogVW5saW5rZWRD
b2RlQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjU5Rjg5MzkxODkxRjI5RjAwRDVDQ0RD
IC8qIFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTM5
REE0QTYxQjdFOEI3QzAwODRGMzNBIC8qIEpTTW9kdWxlUmVjb3JkLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCTBGNzU3NkQyMThFMUZFRTkwMDJFRjRDRCAvKiBBY2Nlc3NvckNhbGxKSVRTdHViUm91
dGluZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjI0RTU1ODE3Rjc0RURCMDBBQkIyMTcgLyog
VmFsdWVSZWNvdmVyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMThFM0E1OTBERjkyNzhDMDBE
OTBCMzQgLyogVk0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkU1OTMyQTcxODNDNUEyNjAwQTFF
Q0NDIC8qIFZNRW50cnlTY29wZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYu
aAkocmV2aXNpb24gMTg5NTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlckNvZGVSZWYuaAkod29ya2luZyBjb3B5KQpAQCAtMzI3LDYgKzMyNywxMCBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIGR1bXBXaXRoTmFtZShjb25zdCBjaGFyKiBuYW1lLCBQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAogICAgIHsKKyAgICAgICAgaWYgKCFtX3ZhbHVlKSB7CisgICAg
ICAgICAgICBvdXQucHJpbnQobmFtZSwgIihudWxsKSIpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CiAgICAgICAgIGlmIChleGVjdXRhYmxlQWRkcmVzcygpID09IGRhdGFMb2NhdGlv
bigpKSB7CiAgICAgICAgICAgICBvdXQucHJpbnQobmFtZSwgIigiLCBSYXdQb2ludGVyKGV4ZWN1
dGFibGVBZGRyZXNzKCkpLCAiKSIpOwogICAgICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE4OTUx
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Myw4ICs1Myw3IEBACiAjaW5jbHVkZSAiTExJbnRFbnRyeXBvaW50Lmgi
CiAjaW5jbHVkZSAiTG93TGV2ZWxJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKLSNpbmNsdWRlICJQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgiCi0jaW5jbHVkZSAiUG9seW1v
cnBoaWNQdXRCeUlkTGlzdC5oIgorI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCiAjaW5j
bHVkZSAiUHJvZmlsZXJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIlJlZHVjZVdoaXRlc3BhY2UuaCIK
ICNpbmNsdWRlICJSZXBhdGNoLmgiCkBAIC0zNDMsMjAgKzM0MiwxOSBAQCB2b2lkIENvZGVCbG9j
azo6cHJpbnRHZXRCeUlkQ2FjaGVTdGF0dXMoCiAgICAgICAgIGlmIChzdHViSW5mby5zZWVuKSB7
CiAgICAgICAgICAgICBvdXQucHJpbnRmKCIgaml0KCIpOwogICAgICAgICAgICAgCi0gICAgICAg
ICAgICBTdHJ1Y3R1cmUqIGJhc2VTdHJ1Y3R1cmUgPSAwOwotICAgICAgICAgICAgU3RydWN0dXJl
KiBwcm90b3R5cGVTdHJ1Y3R1cmUgPSAwOwotICAgICAgICAgICAgUG9seW1vcnBoaWNHZXRCeUlk
TGlzdCogbGlzdCA9IDA7CisgICAgICAgICAgICBTdHJ1Y3R1cmUqIGJhc2VTdHJ1Y3R1cmUgPSBu
dWxscHRyOworICAgICAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3MqIHN0dWIgPSBudWxscHRyOwog
ICAgICAgICAgICAgCi0gICAgICAgICAgICBzd2l0Y2ggKHN0dWJJbmZvLmFjY2Vzc1R5cGUpIHsK
LSAgICAgICAgICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmOgorICAgICAgICAgICAgc3dp
dGNoIChzdHViSW5mby5jYWNoZVR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgQ2FjaGVUeXBlOjpH
ZXRCeUlkU2VsZjoKICAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCJzZWxmIik7Ci0gICAgICAg
ICAgICAgICAgYmFzZVN0cnVjdHVyZSA9IHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVj
dFN0cnVjdHVyZS5nZXQoKTsKKyAgICAgICAgICAgICAgICBiYXNlU3RydWN0dXJlID0gc3R1Yklu
Zm8udS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3Q6Ci0gICAgICAg
ICAgICAgICAgb3V0LnByaW50ZigibGlzdCIpOwotICAgICAgICAgICAgICAgIGxpc3QgPSBzdHVi
SW5mby51LmdldEJ5SWRMaXN0Lmxpc3Q7CisgICAgICAgICAgICBjYXNlIENhY2hlVHlwZTo6U3R1
YjoKKyAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCJzdHViIik7CisgICAgICAgICAgICAgICAg
c3R1YiA9IHN0dWJJbmZvLnUuc3R1YjsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGNhc2UgYWNjZXNzX3Vuc2V0OgorICAgICAgICAgICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0
OgogICAgICAgICAgICAgICAgIG91dC5wcmludGYoInVuc2V0Iik7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMzY4LDI3ICszNjYsMTAgQEAgdm9pZCBD
b2RlQmxvY2s6OnByaW50R2V0QnlJZENhY2hlU3RhdHVzKAogICAgICAgICAgICAgICAgIG91dC5w
cmludGYoIiwgIik7CiAgICAgICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJzdHJ1Y3Qi
LCBiYXNlU3RydWN0dXJlLCBpZGVudCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGlmIChwcm90b3R5cGVTdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgICAgICBvdXQu
cHJpbnRmKCIsICIpOwotICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAicHJvdG90
eXBlU3RydWN0IiwgYmFzZVN0cnVjdHVyZSwgaWRlbnQpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBpZiAobGlzdCkgewotICAgICAgICAgICAgICAgIG91dC5wcmlu
dGYoIiwgbGlzdCA9ICVwOiBbIiwgbGlzdCk7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChpKQotICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiLCAiKTsKLSAgICAgICAg
ICAgICAgICAgICAgb3V0LnByaW50ZigiKCIpOwotICAgICAgICAgICAgICAgICAgICBkdW1wU3Ry
dWN0dXJlKG91dCwgImJhc2UiLCBsaXN0LT5hdChpKS5zdHJ1Y3R1cmUoKSwgaWRlbnQpOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoIWxpc3QtPmF0KGkpLmNvbmRpdGlvblNldCgpLmlzRW1wdHko
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiLCAiKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG91dC5wcmludChsaXN0LT5hdChpKS5jb25kaXRpb25TZXQoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiKSIp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCJdIik7Ci0g
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChzdHViKQorICAgICAgICAgICAgICAgIG91
dC5wcmludCgiLCAiLCAqc3R1Yik7CisKICAgICAgICAgICAgIG91dC5wcmludGYoIikiKTsKICAg
ICAgICAgfQogICAgIH0KQEAgLTQ0NCw1MyArNDI1LDE2IEBAIHZvaWQgQ29kZUJsb2NrOjpwcmlu
dFB1dEJ5SWRDYWNoZVN0YXR1cygKICAgICAgICAgaWYgKHN0dWJJbmZvLnNlZW4pIHsKICAgICAg
ICAgICAgIG91dC5wcmludGYoIiBqaXQoIik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHN3
aXRjaCAoc3R1YkluZm8uYWNjZXNzVHlwZSkgewotICAgICAgICAgICAgY2FzZSBhY2Nlc3NfcHV0
X2J5X2lkX3JlcGxhY2U6CisgICAgICAgICAgICBzd2l0Y2ggKHN0dWJJbmZvLmNhY2hlVHlwZSkg
eworICAgICAgICAgICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOgogICAgICAgICAg
ICAgICAgIG91dC5wcmludCgicmVwbGFjZSwgIik7Ci0gICAgICAgICAgICAgICAgZHVtcFN0cnVj
dHVyZShvdXQsICJzdHJ1Y3QiLCBzdHViSW5mby51LnB1dEJ5SWRSZXBsYWNlLmJhc2VPYmplY3RT
dHJ1Y3R1cmUuZ2V0KCksIGlkZW50KTsKKyAgICAgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91
dCwgInN0cnVjdCIsIHN0dWJJbmZvLnUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQo
KSwgaWRlbnQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBhY2Nl
c3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgotICAgICAgICAgICAgY2FzZSBhY2Nlc3Nf
cHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0OgotICAgICAgICAgICAgICAgIG91dC5wcmludCgi
dHJhbnNpdGlvbiwgIik7Ci0gICAgICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJwcmV2
Iiwgc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZS5nZXQoKSwg
aWRlbnQpOwotICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCAiKTsKLSAgICAgICAgICAgICAg
ICBkdW1wU3RydWN0dXJlKG91dCwgIm5leHQiLCBzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9u
LnN0cnVjdHVyZS5nZXQoKSwgaWRlbnQpOwotICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby51
LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0NvbmRpdGlvblNldCkKLSAgICAgICAgICAgICAgICAgICAg
b3V0LnByaW50KCIsICIsIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Ojpmcm9tUmF3UG9pbnRl
cihzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0NvbmRpdGlvblNldCkpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX2xpc3Q6
IHsKLSAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCJsaXN0ID0gWyIpOwotICAgICAgICAgICAg
ICAgIFBvbHltb3JwaGljUHV0QnlJZExpc3QqIGxpc3QgPSBzdHViSW5mby51LnB1dEJ5SWRMaXN0
Lmxpc3Q7Ci0gICAgICAgICAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hOwotICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5zaXplKCk7ICsraSkgewotICAgICAg
ICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICIoIik7Ci0gICAgICAgICAgICAgICAgICAg
IGNvbnN0IFB1dEJ5SWRBY2Nlc3MmIGFjY2VzcyA9IGxpc3QtPmF0KGkpOwotICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFjY2Vzcy5pc1JlcGxhY2UoKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCJyZXBsYWNlLCAiKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAic3RydWN0IiwgYWNjZXNzLm9sZFN0
cnVjdHVyZSgpLCBpZGVudCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWNjZXNz
LmlzU2V0dGVyKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgic2V0dGVy
LCAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAic3RydWN0
IiwgYWNjZXNzLm9sZFN0cnVjdHVyZSgpLCBpZGVudCk7Ci0gICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoYWNjZXNzLmlzQ3VzdG9tKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG91
dC5wcmludCgiY3VzdG9tLCAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1
cmUob3V0LCAic3RydWN0IiwgYWNjZXNzLm9sZFN0cnVjdHVyZSgpLCBpZGVudCk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWNjZXNzLmlzVHJhbnNpdGlvbigpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBvdXQucHJpbnQoInRyYW5zaXRpb24sICIpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJwcmV2IiwgYWNjZXNzLm9sZFN0cnVjdHVy
ZSgpLCBpZGVudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgIm5leHQiLCBhY2Nlc3Mu
bmV3U3RydWN0dXJlKCksIGlkZW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYWNj
ZXNzLmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvdXQucHJpbnQoIiwgIiwgYWNjZXNzLmNvbmRpdGlvblNldCgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoInVua25vd24i
KTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgi
KSIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBvdXQucHJpbnQoIl0iKTsK
KyAgICAgICAgICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOiB7CisgICAgICAgICAgICAgICAgb3V0
LnByaW50KCJzdHViLCAiLCAqc3R1YkluZm8udS5zdHViKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgYWNjZXNzX3Vuc2V0OgorICAgICAg
ICAgICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0OgogICAgICAgICAgICAgICAgIG91dC5wcmludGYo
InVuc2V0Iik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgpA
QCAtMjQ2MSwzOSArMjQwNSwyMiBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlv
bnMoU2xvCiAgICAgaWYgKEpJVENvZGU6OmlzSklUKGppdFR5cGUoKSkpIHsKICAgICAgICAgZm9y
IChCYWc8U3RydWN0dXJlU3R1YkluZm8+OjppdGVyYXRvciBpdGVyID0gbV9zdHViSW5mb3MuYmVn
aW4oKTsgISFpdGVyOyArK2l0ZXIpIHsKICAgICAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbyA9ICoqaXRlcjsKLSAgICAgICAgICAgIHN3aXRjaCAoc3R1YkluZm8uYWNjZXNzVHlw
ZSkgewotICAgICAgICAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFs
OgotICAgICAgICAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0OiB7
Ci0gICAgICAgICAgICAgICAgSlNDZWxsKiBvcmlnaW4gPSBzdHViSW5mby5jb2RlT3JpZ2luLmNv
ZGVPcmlnaW5Pd25lcigpOwotICAgICAgICAgICAgICAgIGlmICgoIW9yaWdpbiB8fCBIZWFwOjpp
c01hcmtlZChvcmlnaW4pKQotICAgICAgICAgICAgICAgICAgICAmJiBIZWFwOjppc01hcmtlZChz
dHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgpKSkKLSAg
ICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJnN0dWJJbmZvLnUucHV0QnlJZFRyYW5z
aXRpb24uc3RydWN0dXJlKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIGFsbEFyZU1hcmtlZFNvRmFyID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlICE9IENhY2hlVHlwZTo6U3R1YikKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIFBvbHltb3JwaGljQWNjZXNzKiBs
aXN0ID0gc3R1YkluZm8udS5zdHViOworICAgICAgICAgICAgSlNDZWxsKiBvcmlnaW4gPSBzdHVi
SW5mby5jb2RlT3JpZ2luLmNvZGVPcmlnaW5Pd25lcigpOworICAgICAgICAgICAgaWYgKG9yaWdp
biAmJiAhSGVhcDo6aXNNYXJrZWQob3JpZ2luKSkgeworICAgICAgICAgICAgICAgIGFsbEFyZU1h
cmtlZFNvRmFyID0gZmFsc2U7CisgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9saXN0OiB7Ci0gICAgICAg
ICAgICAgICAgUG9seW1vcnBoaWNQdXRCeUlkTGlzdCogbGlzdCA9IHN0dWJJbmZvLnUucHV0QnlJ
ZExpc3QubGlzdDsKLSAgICAgICAgICAgICAgICBKU0NlbGwqIG9yaWdpbiA9IHN0dWJJbmZvLmNv
ZGVPcmlnaW4uY29kZU9yaWdpbk93bmVyKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG9yaWdpbiAm
JiAhSGVhcDo6aXNNYXJrZWQob3JpZ2luKSkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBq
ID0gbGlzdC0+c2l6ZSgpOyBqLS07KSB7CisgICAgICAgICAgICAgICAgY29uc3QgQWNjZXNzQ2Fz
ZSYgYWNjZXNzID0gbGlzdC0+YXQoaik7CisgICAgICAgICAgICAgICAgaWYgKGFjY2Vzcy50eXBl
KCkgIT0gQWNjZXNzQ2FzZTo6VHJhbnNpdGlvbikKKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKGFjY2Vzcy5zdHJ1Y3R1cmUo
KSkpCisgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25s
eVBvaW50ZXIoYWNjZXNzLm5ld1N0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICAgICAgIGFsbEFyZU1hcmtlZFNvRmFyID0gZmFsc2U7Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGogPSBsaXN0LT5zaXplKCk7IGotLTspIHsKLSAgICAgICAgICAgICAgICAgICAg
UHV0QnlJZEFjY2VzcyYgYWNjZXNzID0gbGlzdC0+bV9saXN0W2pdOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoIWFjY2Vzcy5pc1RyYW5zaXRpb24oKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQoYWNjZXNz
Lm9sZFN0cnVjdHVyZSgpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5k
KCZhY2Nlc3MubV9uZXdTdHJ1Y3R1cmUpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgICAgICBhbGxBcmVNYXJrZWRTb0ZhciA9IGZhbHNlOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTI3ODUsMTAgKzI3MTIsMTAgQEAgdm9pZCBD
b2RlQmxvY2s6OmdldEJ5VmFsSW5mb01hcChCeVZhbEluZgogfQogCiAjaWYgRU5BQkxFKEpJVCkK
LVN0cnVjdHVyZVN0dWJJbmZvKiBDb2RlQmxvY2s6OmFkZFN0dWJJbmZvKCkKK1N0cnVjdHVyZVN0
dWJJbmZvKiBDb2RlQmxvY2s6OmFkZFN0dWJJbmZvKEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSkKIHsK
ICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJldHVybiBtX3N0
dWJJbmZvcy5hZGQoKTsKKyAgICByZXR1cm4gbV9zdHViSW5mb3MuYWRkKGFjY2Vzc1R5cGUpOwog
fQogCiBTdHJ1Y3R1cmVTdHViSW5mbyogQ29kZUJsb2NrOjpmaW5kU3R1YkluZm8oQ29kZU9yaWdp
biBjb2RlT3JpZ2luKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suaAkocmV2aXNpb24gMTg5NTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDgsNyArMjA4LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgZ2V0QnlWYWxJbmZvTWFwKEJ5VmFsSW5mb01hcCYgcmVzdWx0KTsKICAgICAK
ICNpZiBFTkFCTEUoSklUKQotICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBhZGRTdHViSW5mbygpOwor
ICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBhZGRTdHViSW5mbyhBY2Nlc3NUeXBlKTsKICAgICBCYWc8
U3RydWN0dXJlU3R1YkluZm8+OjppdGVyYXRvciBzdHViSW5mb0JlZ2luKCkgeyByZXR1cm4gbV9z
dHViSW5mb3MuYmVnaW4oKTsgfQogICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz46Oml0ZXJhdG9y
IHN0dWJJbmZvRW5kKCkgeyByZXR1cm4gbV9zdHViSW5mb3MuZW5kKCk7IH0KICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAJ
KHJldmlzaW9uIDE4OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRC
eUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTQgKzI2LDEzIEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiR2V0QnlJZFN0YXR1cy5oIgogCi0jaW5jbHVkZSAiQWNj
ZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNs
dWRlICJDb21wbGV4R2V0U3RhdHVzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1
ZGUgIkpTU2NvcGUuaCIKICNpbmNsdWRlICJMTEludERhdGEuaCIKICNpbmNsdWRlICJMb3dMZXZl
bEludGVycHJldGVyLmgiCi0jaW5jbHVkZSAiUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oIgorI2lu
Y2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCiAjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CiAK
IG5hbWVzcGFjZSBKU0MgewpAQCAtMTM5LDEyICsxMzgsMTIgQEAgR2V0QnlJZFN0YXR1cyBHZXRC
eUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgIGlmICghc3R1YkluZm8tPnNlZW4pCiAgICAgICAg
IHJldHVybiBHZXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwogICAgIAotICAgIFBvbHltb3Jw
aGljR2V0QnlJZExpc3QqIGxpc3QgPSAwOworICAgIFBvbHltb3JwaGljQWNjZXNzKiBsaXN0ID0g
MDsKICAgICBTdGF0ZSBzbG93UGF0aFN0YXRlID0gVGFrZXNTbG93UGF0aDsKLSAgICBpZiAoc3R1
YkluZm8tPmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9saXN0KSB7Ci0gICAgICAgIGxp
c3QgPSBzdHViSW5mby0+dS5nZXRCeUlkTGlzdC5saXN0OworICAgIGlmIChzdHViSW5mby0+Y2Fj
aGVUeXBlID09IENhY2hlVHlwZTo6U3R1YikgeworICAgICAgICBsaXN0ID0gc3R1YkluZm8tPnUu
c3R1YjsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytp
KSB7Ci0gICAgICAgICAgICBjb25zdCBHZXRCeUlkQWNjZXNzJiBhY2Nlc3MgPSBsaXN0LT5hdChp
KTsKKyAgICAgICAgICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIGFjY2VzcyA9IGxpc3QtPmF0KGkpOwog
ICAgICAgICAgICAgaWYgKGFjY2Vzcy5kb2VzQ2FsbHMoKSkKICAgICAgICAgICAgICAgICBzbG93
UGF0aFN0YXRlID0gTWFrZXNDYWxsczsKICAgICAgICAgfQpAQCAtMTU3LDEyICsxNTYsMTIgQEAg
R2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgIEdldEJ5SWRTdGF0
dXMgcmVzdWx0OwogICAgIHJlc3VsdC5tX3N0YXRlID0gU2ltcGxlOwogICAgIHJlc3VsdC5tX3dh
c1NlZW5JbkpJVCA9IHRydWU7IC8vIFRoaXMgaXMgaW50ZXJlc3RpbmcgZm9yIGJ5dGVjb2RlIGR1
bXBpbmcgb25seS4KLSAgICBzd2l0Y2ggKHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSB7Ci0gICAgY2Fz
ZSBhY2Nlc3NfdW5zZXQ6CisgICAgc3dpdGNoIChzdHViSW5mby0+Y2FjaGVUeXBlKSB7CisgICAg
Y2FzZSBDYWNoZVR5cGU6OlVuc2V0OgogICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhOb0lu
Zm9ybWF0aW9uKTsKICAgICAgICAgCi0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGY6IHsK
LSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+dS5nZXRCeUlkU2VsZi5i
YXNlT2JqZWN0U3RydWN0dXJlLmdldCgpOworICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2Vs
ZjogeworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0dWJJbmZvLT51LmJ5SWRTZWxm
LmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCk7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRha2Vz
U2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkpCiAgICAgICAgICAgICByZXR1cm4gR2V0
QnlJZFN0YXR1cyhzbG93UGF0aFN0YXRlLCB0cnVlKTsKICAgICAgICAgdW5zaWduZWQgYXR0cmli
dXRlc0lnbm9yZWQ7CkBAIC0xNzcsMTIgKzE3NiwyNSBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRT
dGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgICAg
ICAKLSAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfbGlzdDogeworICAgIGNhc2UgQ2FjaGVUeXBl
OjpTdHViOiB7CiAgICAgICAgIGZvciAodW5zaWduZWQgbGlzdEluZGV4ID0gMDsgbGlzdEluZGV4
IDwgbGlzdC0+c2l6ZSgpOyArK2xpc3RJbmRleCkgewotICAgICAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBsaXN0LT5hdChsaXN0SW5kZXgpLnN0cnVjdHVyZSgpOworICAgICAgICAgICAg
Y29uc3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0gbGlzdC0+YXQobGlzdEluZGV4KTsKKyAgICAgICAg
ICAgIGlmIChhY2Nlc3MudmlhUHJveHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlJ
ZFN0YXR1cyhzbG93UGF0aFN0YXRlLCB0cnVlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBhY2Nlc3Muc3RydWN0dXJlKCk7CisgICAgICAgICAgICBp
ZiAoIXN0cnVjdHVyZSkgeworICAgICAgICAgICAgICAgIC8vIFRoZSBudWxsIHN0cnVjdHVyZSBj
YXNlcyBhcmlzZSBkdWUgdG8gYXJyYXkubGVuZ3RoIGFuZCBzdHJpbmcubGVuZ3RoLiBXZSBoYXZl
IG5vIHdheQorICAgICAgICAgICAgICAgIC8vIG9mIGNyZWF0aW5nIGEgR2V0QnlJZFZhcmlhbnQg
Zm9yIHRob3NlLCBhbmQgd2UgZG9uJ3QgcmVhbGx5IGhhdmUgdG8gc2luY2UgdGhlIERGRworICAg
ICAgICAgICAgICAgIC8vIGhhbmRsZXMgdGhvc2UgY2FzZXMgaW4gRml4dXBQaGFzZSB1c2luZyB2
YWx1ZSBwcm9maWxpbmcuIFRoYXQncyBhIGJpdCBhd2t3YXJkIC0gd2UKKyAgICAgICAgICAgICAg
ICAvLyBzaG91bGRuJ3QgaGF2ZSB0byB1c2UgdmFsdWUgcHJvZmlsaW5nIHRvIGRpc2NvdmVyIHNv
bWV0aGluZyB0aGF0IHRoZSBBY2Nlc3NDYXNlCisgICAgICAgICAgICAgICAgLy8gY291bGQgaGF2
ZSB0b2xkIHVzLiBCdXQsIGl0IHdvcmtzIHdlbGwgZW5vdWdoLiBTbywgb3VyIG9ubHkgY29uY2Vy
biBoZXJlIGlzIHRvIG5vdAorICAgICAgICAgICAgICAgIC8vIGNyYXNoIG9uIG51bGwgc3RydWN0
dXJlLgorICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUs
IHRydWUpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBDb21wbGV4
R2V0U3RhdHVzIGNvbXBsZXhHZXRTdGF0dXMgPSBDb21wbGV4R2V0U3RhdHVzOjpjb21wdXRlRm9y
KAotICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgbGlzdC0+YXQobGlzdEluZGV4KS5jb25kaXRp
b25TZXQoKSwgdWlkKTsKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGFjY2Vzcy5jb25kaXRp
b25TZXQoKSwgdWlkKTsKICAgICAgICAgICAgICAKICAgICAgICAgICAgIHN3aXRjaCAoY29tcGxl
eEdldFN0YXR1cy5raW5kKCkpIHsKICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6
U2hvdWxkU2tpcDoKQEAgLTE5MywyOSArMjA1LDIzIEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0
YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIENv
bXBsZXhHZXRTdGF0dXM6OklubGluZWFibGU6IHsKICAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzOwotICAgICAgICAgICAgICAgIHN3
aXRjaCAobGlzdC0+YXQobGlzdEluZGV4KS50eXBlKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNl
IEdldEJ5SWRBY2Nlc3M6OlNpbXBsZUlubGluZToKLSAgICAgICAgICAgICAgICBjYXNlIEdldEJ5
SWRBY2Nlc3M6OlNpbXBsZVN0dWI6IHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGFjY2Vzcy50
eXBlKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OkxvYWQ6IHsKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGNhc2UgR2V0QnlJZEFjY2Vzczo6R2V0dGVyOiB7Ci0gICAgICAgICAgICAgICAgICAgIEFjY2Vz
c29yQ2FsbEpJVFN0dWJSb3V0aW5lKiBzdHViID0gc3RhdGljX2Nhc3Q8QWNjZXNzb3JDYWxsSklU
U3R1YlJvdXRpbmUqPigKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QtPmF0KGxpc3RJbmRl
eCkuc3R1YlJvdXRpbmUoKSk7CisgICAgICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpHZXR0
ZXI6IHsKKyAgICAgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBh
Y2Nlc3MuY2FsbExpbmtJbmZvKCk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChjYWxsTGlu
a0luZm8pOwogICAgICAgICAgICAgICAgICAgICBjYWxsTGlua1N0YXR1cyA9IHN0ZDo6bWFrZV91
bmlxdWU8Q2FsbExpbmtTdGF0dXM+KAogICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbExpbmtT
dGF0dXM6OmNvbXB1dGVGb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9ja2VyLCBw
cm9maWxlZEJsb2NrLCAqc3R1Yi0+bV9jYWxsTGlua0luZm8sIGNhbGxFeGl0U2l0ZURhdGEpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ssICpjYWxs
TGlua0luZm8sIGNhbGxFeGl0U2l0ZURhdGEpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlJZEFjY2Vzczo6
U2ltcGxlTWlzczoKLSAgICAgICAgICAgICAgICBjYXNlIEdldEJ5SWRBY2Nlc3M6OkN1c3RvbUdl
dHRlcjoKLSAgICAgICAgICAgICAgICBjYXNlIEdldEJ5SWRBY2Nlc3M6OldhdGNoZWRTdHViOnsK
LSAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIHRvdGFsbHkgc3dlZXQg
dG8gc3VwcG9ydCB0aGlzIGF0IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZS4KLSAgICAgICAgICAg
ICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzA1
MgorICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklY
TUU6IEl0IHdvdWxkIGJlIHRvdGFsbHkgc3dlZXQgdG8gc3VwcG9ydCBtb3JlIG9mIHRoZXNlIGF0
IHNvbWUgcG9pbnQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIC8vIGZ1dHVyZS4gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzA1MgogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhzbG93UGF0aFN0YXRlLCB0cnVlKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfSB9CiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIEdldEJ5SWRW
YXJpYW50IHZhcmlhbnQoCiAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZVNldChzdHJ1Y3R1
cmUpLCBjb21wbGV4R2V0U3RhdHVzLm9mZnNldCgpLApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAx
ODkzMjQpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0LmNwcDoxODkzMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgiCisKKyNp
ZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiSGVhcC5o
IgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworR2V0QnlJZEFjY2Vzczo6R2V0QnlJZEFjY2VzcygKKyAg
ICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgUGFzc1JlZlB0cjxKSVRT
dHViUm91dGluZT4gc3R1YlJvdXRpbmUsCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCisgICAgOiBtX3R5cGUo
dHlwZSkKKyAgICAsIG1fc3RydWN0dXJlKHZtLCBvd25lciwgc3RydWN0dXJlKQorICAgICwgbV9j
b25kaXRpb25TZXQoY29uZGl0aW9uU2V0KQorICAgICwgbV9zdHViUm91dGluZShzdHViUm91dGlu
ZSkKK3sKK30KKworR2V0QnlJZEFjY2Vzczo6fkdldEJ5SWRBY2Nlc3MoKQoreworfQorCitHZXRC
eUlkQWNjZXNzIEdldEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1cmVTdHViSW5mbyhTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGluaXRpYWxT
bG93UGF0aCA9CisgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zm
c2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpOworICAgIAorICAgIEdldEJ5
SWRBY2Nlc3MgcmVzdWx0OworICAgIAorICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmFjY2Vz
c1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmKTsKKyAgICAKKyAgICByZXN1bHQubV90eXBl
ID0gU2ltcGxlSW5saW5lOworICAgIHJlc3VsdC5tX3N0cnVjdHVyZS5jb3B5RnJvbShzdHViSW5m
by51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUpOworICAgIHJlc3VsdC5tX3N0dWJS
b3V0aW5lID0gSklUU3R1YlJvdXRpbmU6OmNyZWF0ZVNlbGZNYW5hZ2VkUm91dGluZShpbml0aWFs
U2xvd1BhdGgpOworICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgR2V0QnlJZEFj
Y2Vzczo6dmlzaXRXZWFrKFZNJiB2bSkgY29uc3QKK3sKKyAgICBpZiAobV9zdHJ1Y3R1cmUgJiYg
IUhlYXA6OmlzTWFya2VkKG1fc3RydWN0dXJlLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmICghbV9jb25kaXRpb25TZXQuYXJlU3RpbGxMaXZlKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAoIW1fc3R1YlJvdXRpbmUtPnZpc2l0V2Vhayh2bSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworUG9seW1vcnBoaWNHZXRCeUlk
TGlzdDo6UG9seW1vcnBoaWNHZXRCeUlkTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8p
Cit7CisgICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0KQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgbV9saXN0LmFwcGVuZChHZXRCeUlkQWNjZXNzOjpmcm9tU3Ry
dWN0dXJlU3R1YkluZm8oc3R1YkluZm8pKTsKK30KKworUG9seW1vcnBoaWNHZXRCeUlkTGlzdCog
UG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6ZnJvbShTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8p
Cit7CisgICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9saXN0
KQorICAgICAgICByZXR1cm4gc3R1YkluZm8udS5nZXRCeUlkTGlzdC5saXN0OworICAgIAorICAg
IEFTU0VSVCgKKyAgICAgICAgc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lk
X3NlbGYKKyAgICAgICAgfHwgc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpOwor
ICAgIAorICAgIFBvbHltb3JwaGljR2V0QnlJZExpc3QqIHJlc3VsdCA9IG5ldyBQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0KHN0dWJJbmZvKTsKKyAgICAKKyAgICBzdHViSW5mby5pbml0R2V0QnlJZExp
c3QocmVzdWx0KTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitQb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0Ojp+UG9seW1vcnBoaWNHZXRCeUlkTGlzdCgpIHsgfQorCitNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6Y3VycmVudFNsb3dQYXRoVGFyZ2V0KAor
ICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykgY29uc3QKK3sKKyAgICBpZiAoaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRP
ZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSk7CisgICAgcmV0dXJuIG1f
bGlzdC5sYXN0KCkuc3R1YlJvdXRpbmUoKS0+Y29kZSgpLmNvZGUoKTsKK30KKwordm9pZCBQb2x5
bW9ycGhpY0dldEJ5SWRMaXN0OjphZGRBY2Nlc3MoY29uc3QgR2V0QnlJZEFjY2VzcyYgYWNjZXNz
KQoreworICAgIEFTU0VSVCghaXNGdWxsKCkpOworICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBy
ZXNpemluZyBvcHRpbWl6ZXMgZm9yIHNwYWNlLCBub3QgdGltZS4KKyAgICBtX2xpc3QucmVzaXpl
VG9GaXQobV9saXN0LnNpemUoKSArIDEpOworICAgIG1fbGlzdC5sYXN0KCkgPSBhY2Nlc3M7Cit9
CisKK2Jvb2wgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6aXNGdWxsKCkgY29uc3QKK3sKKyAgICBB
U1NFUlQoc2l6ZSgpIDw9IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSk7CisgICAgcmV0dXJu
IHNpemUoKSA9PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkU7Cit9CisKK2Jvb2wgUG9seW1v
cnBoaWNHZXRCeUlkTGlzdDo6aXNBbG1vc3RGdWxsKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoc2l6
ZSgpIDw9IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSk7CisgICAgcmV0dXJuIHNpemUoKSA+
PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUgLSAxOworfQorCitib29sIFBvbHltb3JwaGlj
R2V0QnlJZExpc3Q6OmRpZFNlbGZQYXRjaGluZygpIGNvbnN0Cit7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGlmIChhdChpKS50eXBlKCkgPT0gR2V0QnlJ
ZEFjY2Vzczo6U2ltcGxlSW5saW5lKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojp2aXNp
dFdlYWsoVk0mIHZtKSBjb25zdAoreworICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUoKTsgaS0t
OykgeworICAgICAgICBpZiAoIWF0KGkpLnZpc2l0V2Vhayh2bSkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNv
cHkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3Mu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxMzEgKzI0LDExNTYgQEAKICAqLwogCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oIgorI2luY2x1
ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCiAKICNpZiBFTkFCTEUoSklUKQogCisjaW5jbHVkZSAi
QmluYXJ5U3dpdGNoLmgiCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCiAjaW5jbHVkZSAiQ29k
ZUJsb2NrLmgiCisjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgor
I2luY2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5j
bHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5o
IgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaCIKICNpbmNsdWRl
ICJTdHJ1Y3R1cmVTdHViSW5mby5oIgorI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKyNp
bmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLUdldEJ5SWRBY2Nl
c3M6OkdldEJ5SWRBY2Nlc3MoCi0gICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBl
IHR5cGUsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lLAotICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0
aW9uU2V0KQotICAgIDogbV90eXBlKHR5cGUpCi0gICAgLCBtX3N0cnVjdHVyZSh2bSwgb3duZXIs
IHN0cnVjdHVyZSkKLSAgICAsIG1fY29uZGl0aW9uU2V0KGNvbmRpdGlvblNldCkKLSAgICAsIG1f
c3R1YlJvdXRpbmUoc3R1YlJvdXRpbmUpCitzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFs
c2U7CisKK3N0cnVjdCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUgeworICAgIENDYWxsSGVscGVycyog
aml0IHsgbnVsbHB0ciB9OworICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciogYWxsb2NhdG9y
OworICAgIHNpemVfdCBudW1iZXJPZlBhZGRpbmdCeXRlcyB7IDAgfTsKKyAgICBQb2x5bW9ycGhp
Y0FjY2VzcyogYWNjZXNzIHsgbnVsbHB0ciB9OworICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbyB7IG51bGxwdHIgfTsKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHN1Y2Nlc3M7Cisg
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBmYWlsQW5kUmVwYXRjaDsKKyAgICBDQ2FsbEhlbHBl
cnM6Okp1bXBMaXN0IGZhaWxBbmRJZ25vcmU7CisgICAgR1BSUmVnIGJhc2VHUFIgeyBJbnZhbGlk
R1BSUmVnIH07CisgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzOworICAgIEdQUlJlZyBzY3JhdGNo
R1BSIHsgSW52YWxpZEdQUlJlZyB9OworICAgIFZlY3RvcjxzdGQ6OmZ1bmN0aW9uPHZvaWQoTGlu
a0J1ZmZlciYpPj4gY2FsbGJhY2tzOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50OworICAg
IHN0ZDo6dW5pcXVlX3B0cjxXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8+IHdhdGNocG9p
bnRzOworCisgICAgV2F0Y2hwb2ludCogYWRkV2F0Y2hwb2ludChjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiYgY29uZGl0aW9uID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb24oKSkKKyAgICB7
CisgICAgICAgIHJldHVybiBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86OmVuc3VyZVJl
ZmVyZW5jZUFuZEFkZFdhdGNocG9pbnQoCisgICAgICAgICAgICB3YXRjaHBvaW50cywgaml0LT5j
b2RlQmxvY2soKSwgc3R1YkluZm8sIGNvbmRpdGlvbik7CisgICAgfQorCisgICAgdm9pZCByZXN0
b3JlU2NyYXRjaCgpCisgICAgeworICAgICAgICBhbGxvY2F0b3ItPnJlc3RvcmVSZXVzZWRSZWdp
c3RlcnNCeVBvcHBpbmcoKmppdCwgbnVtYmVyT2ZQYWRkaW5nQnl0ZXMpOworICAgIH0KKworICAg
IHZvaWQgc3VjY2VlZCgpCisgICAgeworICAgICAgICByZXN0b3JlU2NyYXRjaCgpOworICAgICAg
ICBzdWNjZXNzLmFwcGVuZChqaXQtPmp1bXAoKSk7CisgICAgfQorfTsKKworQWNjZXNzQ2FzZTo6
QWNjZXNzQ2FzZSgpCiB7CiB9CiAKLUdldEJ5SWRBY2Nlc3M6On5HZXRCeUlkQWNjZXNzKCkKK3N0
ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpnZXQoCisgICAgVk0mIHZtLCBK
U0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5cGUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQm
IGNvbmRpdGlvblNldCwgYm9vbCB2aWFQcm94eSwgV2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNl
dCwKKyAgICBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYyBjdXN0b21HZXR0ZXIsIEpTT2JqZWN0
KiBjdXN0b21TbG90QmFzZSkKIHsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gcmVz
dWx0KG5ldyBBY2Nlc3NDYXNlKCkpOworCisgICAgcmVzdWx0LT5tX3R5cGUgPSB0eXBlOworICAg
IHJlc3VsdC0+bV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgcmVzdWx0LT5tX3N0cnVjdHVyZS5zZXQo
dm0sIG93bmVyLCBzdHJ1Y3R1cmUpOworICAgIHJlc3VsdC0+bV9jb25kaXRpb25TZXQgPSBjb25k
aXRpb25TZXQ7CisKKyAgICBpZiAodmlhUHJveHkgfHwgYWRkaXRpb25hbFNldCB8fCByZXN1bHQt
PmRvZXNDYWxscygpIHx8IGN1c3RvbUdldHRlciB8fCBjdXN0b21TbG90QmFzZSkgeworICAgICAg
ICByZXN1bHQtPm1fcmFyZURhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPFJhcmVEYXRhPigpOworICAg
ICAgICByZXN1bHQtPm1fcmFyZURhdGEtPnZpYVByb3h5ID0gdmlhUHJveHk7CisgICAgICAgIHJl
c3VsdC0+bV9yYXJlRGF0YS0+YWRkaXRpb25hbFNldCA9IGFkZGl0aW9uYWxTZXQ7CisgICAgICAg
IHJlc3VsdC0+bV9yYXJlRGF0YS0+Y3VzdG9tQWNjZXNzb3IuZ2V0dGVyID0gY3VzdG9tR2V0dGVy
OworICAgICAgICByZXN1bHQtPm1fcmFyZURhdGEtPmN1c3RvbVNsb3RCYXNlLnNldE1heUJlTnVs
bCh2bSwgb3duZXIsIGN1c3RvbVNsb3RCYXNlKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0
OwogfQogCi1HZXRCeUlkQWNjZXNzIEdldEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1cmVTdHViSW5m
byhTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCitzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2Fz
ZT4gQWNjZXNzQ2FzZTo6cmVwbGFjZSgKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7Ci0gICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIGluaXRpYWxTbG93UGF0aCA9Ci0gICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nh
c2UpOwotICAgIAotICAgIEdldEJ5SWRBY2Nlc3MgcmVzdWx0OwotICAgIAotICAgIFJFTEVBU0Vf
QVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmKTsKLSAg
ICAKLSAgICByZXN1bHQubV90eXBlID0gU2ltcGxlSW5saW5lOwotICAgIHJlc3VsdC5tX3N0cnVj
dHVyZS5jb3B5RnJvbShzdHViSW5mby51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUp
OwotICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gSklUU3R1YlJvdXRpbmU6OmNyZWF0ZVNlbGZN
YW5hZ2VkUm91dGluZShpbml0aWFsU2xvd1BhdGgpOwotICAgIAorICAgIHN0ZDo6dW5pcXVlX3B0
cjxBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nhc2UoKSk7CisKKyAgICByZXN1bHQtPm1f
dHlwZSA9IFJlcGxhY2U7CisgICAgcmVzdWx0LT5tX29mZnNldCA9IG9mZnNldDsKKyAgICByZXN1
bHQtPm1fc3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7CisKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6dHJh
bnNpdGlvbigKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogb2xkU3RydWN0
dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAorICAg
IGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCit7CisgICAg
UkVMRUFTRV9BU1NFUlQob2xkU3RydWN0dXJlID09IG5ld1N0cnVjdHVyZS0+cHJldmlvdXNJRCgp
KTsKKworICAgIC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIGEgcmVh
bGxvYywgaWYgd2UgZG9uJ3QgaGF2ZQorICAgIC8vIGVub3VnaCByZWdpc3RlcnMgdG8gbWFrZSBp
dCBoYXBwZW4uCisgICAgaWYgKEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzIDwgNgorICAgICAg
ICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gbmV3U3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpCisgICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSkgeworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICAvLyBTa2lw
IG9wdGltaXppbmcgdGhlIGNhc2Ugd2hlcmUgd2UgbmVlZCByZWFsbG9jLCBhbmQgdGhlIHN0cnVj
dHVyZSBoYXMKKyAgICAvLyBpbmRleGluZyBzdG9yYWdlLgorICAgIC8vIEZJWE1FOiBXZSBzaG91
bGRuJ3Qgc2tpcCB0aGlzISBJbXBsZW1lbnQgaXQhCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMDkxNAorICAgIGlmIChvbGRTdHJ1Y3R1cmUtPmNvdWxk
SGF2ZUluZGV4aW5nSGVhZGVyKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHJlc3VsdChuZXcgQWNjZXNzQ2FzZSgpKTsKKworICAg
IHJlc3VsdC0+bV90eXBlID0gVHJhbnNpdGlvbjsKKyAgICByZXN1bHQtPm1fb2Zmc2V0ID0gb2Zm
c2V0OworICAgIHJlc3VsdC0+bV9zdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgbmV3U3RydWN0dXJl
KTsKKyAgICByZXN1bHQtPm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OworCisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6
OnNldHRlcigKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKKyAgICBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBQdXRQcm9wZXJ0eVNsb3Q6OlB1
dFZhbHVlRnVuYyBjdXN0b21TZXR0ZXIsCisgICAgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlKQor
eworICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nhc2Uo
KSk7CisKKyAgICByZXN1bHQtPm1fdHlwZSA9IHR5cGU7CisgICAgcmVzdWx0LT5tX29mZnNldCA9
IG9mZnNldDsKKyAgICByZXN1bHQtPm1fc3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVy
ZSk7CisgICAgcmVzdWx0LT5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKKyAgICByZXN1
bHQtPm1fcmFyZURhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPFJhcmVEYXRhPigpOworICAgIHJlc3Vs
dC0+bV9yYXJlRGF0YS0+Y3VzdG9tQWNjZXNzb3Iuc2V0dGVyID0gY3VzdG9tU2V0dGVyOworICAg
IHJlc3VsdC0+bV9yYXJlRGF0YS0+Y3VzdG9tU2xvdEJhc2Uuc2V0TWF5QmVOdWxsKHZtLCBvd25l
ciwgY3VzdG9tU2xvdEJhc2UpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RkOjp1bmlx
dWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OmluKAorICAgIFZNJiB2bSwgSlNDZWxsKiBv
d25lciwgQWNjZXNzVHlwZSB0eXBlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKKyAgICBjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KQoreworICAgIHN0ZDo6dW5p
cXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nhc2UoKSk7CisKKyAgICByZXN1
bHQtPm1fdHlwZSA9IHR5cGU7CisgICAgcmVzdWx0LT5tX3N0cnVjdHVyZS5zZXQodm0sIG93bmVy
LCBzdHJ1Y3R1cmUpOworICAgIHJlc3VsdC0+bV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7
CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4g
QWNjZXNzQ2FzZTo6Z2V0TGVuZ3RoKFZNJiwgSlNDZWxsKiwgQWNjZXNzVHlwZSB0eXBlKQorewor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nhc2UoKSk7
CisKKyAgICByZXN1bHQtPm1fdHlwZSA9IHR5cGU7CisKICAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci1ib29sIEdldEJ5SWRBY2Nlc3M6OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0CitBY2Nlc3NDYXNl
Ojp+QWNjZXNzQ2FzZSgpCit7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nl
c3NDYXNlOjpmcm9tU3RydWN0dXJlU3R1YkluZm8oCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVy
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgc3dpdGNoIChzdHViSW5mby5j
YWNoZVR5cGUpIHsKKyAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJZFNlbGY6CisgICAgICAgIHJl
dHVybiBnZXQoCisgICAgICAgICAgICB2bSwgb3duZXIsIExvYWQsIHN0dWJJbmZvLnUuYnlJZFNl
bGYub2Zmc2V0LAorICAgICAgICAgICAgc3R1YkluZm8udS5ieUlkU2VsZi5iYXNlT2JqZWN0U3Ry
dWN0dXJlLmdldCgpKTsKKworICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZToKKyAg
ICAgICAgcmV0dXJuIHJlcGxhY2UoCisgICAgICAgICAgICB2bSwgb3duZXIsIHN0dWJJbmZvLnUu
YnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgc3R1YkluZm8udS5ieUlkU2VsZi5v
ZmZzZXQpOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
fQorCitzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6Y2xvbmUoKSBjb25z
dAoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nh
c2UoKSk7CisgICAgcmVzdWx0LT5tX3R5cGUgPSBtX3R5cGU7CisgICAgcmVzdWx0LT5tX29mZnNl
dCA9IG1fb2Zmc2V0OworICAgIHJlc3VsdC0+bV9zdHJ1Y3R1cmUgPSBtX3N0cnVjdHVyZTsKKyAg
ICByZXN1bHQtPm1fY29uZGl0aW9uU2V0ID0gbV9jb25kaXRpb25TZXQ7CisgICAgaWYgKFJhcmVE
YXRhKiByYXJlRGF0YSA9IG1fcmFyZURhdGEuZ2V0KCkpIHsKKyAgICAgICAgcmVzdWx0LT5tX3Jh
cmVEYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxSYXJlRGF0YT4oKTsKKyAgICAgICAgcmVzdWx0LT5t
X3JhcmVEYXRhLT52aWFQcm94eSA9IHJhcmVEYXRhLT52aWFQcm94eTsKKyAgICAgICAgcmVzdWx0
LT5tX3JhcmVEYXRhLT5hZGRpdGlvbmFsU2V0ID0gcmFyZURhdGEtPmFkZGl0aW9uYWxTZXQ7Cisg
ICAgICAgIC8vIE5PVEU6IFdlIGRvbid0IGNvcHkgdGhlIGNhbGxMaW5rSW5mbywgc2luY2UgdGhh
dCdzIGNyZWF0ZWQgZHVyaW5nIGNvZGUgZ2VuZXJhdGlvbi4KKyAgICAgICAgcmVzdWx0LT5tX3Jh
cmVEYXRhLT5jdXN0b21BY2Nlc3Nvci5vcGFxdWUgPSByYXJlRGF0YS0+Y3VzdG9tQWNjZXNzb3Iu
b3BhcXVlOworICAgICAgICByZXN1bHQtPm1fcmFyZURhdGEtPmN1c3RvbVNsb3RCYXNlID0gcmFy
ZURhdGEtPmN1c3RvbVNsb3RCYXNlOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCiti
b29sIEFjY2Vzc0Nhc2U6Omd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrKCkgY29uc3QKK3sKKyAgICBp
ZiAodmlhUHJveHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNoIChtX3R5
cGUpIHsKKyAgICBjYXNlIEFycmF5TGVuZ3RoOgorICAgIGNhc2UgU3RyaW5nTGVuZ3RoOgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorfQorCitKU09iamVjdCogQWNjZXNzQ2FzZTo6YWx0ZXJuYXRlQmFzZSgpIGNvbnN0Cit7
CisgICAgaWYgKGN1c3RvbVNsb3RCYXNlKCkpCisgICAgICAgIHJldHVybiBjdXN0b21TbG90QmFz
ZSgpOworICAgIHJldHVybiBjb25kaXRpb25TZXQoKS5zbG90QmFzZUNvbmRpdGlvbigpLm9iamVj
dCgpOworfQorCitib29sIEFjY2Vzc0Nhc2U6OmNhblJlcGxhY2UoY29uc3QgQWNjZXNzQ2FzZSYg
b3RoZXIpCit7CisgICAgLy8gV2UgY291bGQgZG8gYSBsb3QgYmV0dGVyIGhlcmUsIGJ1dCBmb3Ig
bm93IHdlIGp1c3QgZG8gc29tZXRoaW5nIG9idmlvdXMuCisKKyAgICBpZiAoIWd1YXJkZWRCeVN0
cnVjdHVyZUNoZWNrKCkgfHwgIW90aGVyLmd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrKCkpIHsKKyAg
ICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgcmV0dXJuIHN0cnVjdHVyZSgpID09IG90aGVyLnN0cnVjdHVyZSgpOworfQor
Cit2b2lkIEFjY2Vzc0Nhc2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBv
dXQucHJpbnQobV90eXBlLCAiOigiKTsKKworICAgIENvbW1hUHJpbnRlciBjb21tYTsKKworICAg
IGlmIChtX3R5cGUgPT0gVHJhbnNpdGlvbikKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAic3Ry
dWN0dXJlID0gIiwgcG9pbnRlckR1bXAoc3RydWN0dXJlKCkpLCAiIC0+ICIsIHBvaW50ZXJEdW1w
KG5ld1N0cnVjdHVyZSgpKSk7CisgICAgZWxzZSBpZiAobV9zdHJ1Y3R1cmUpCisgICAgICAgIG91
dC5wcmludChjb21tYSwgInN0cnVjdHVyZSA9ICIsIHBvaW50ZXJEdW1wKG1fc3RydWN0dXJlLmdl
dCgpKSk7CisKKyAgICBpZiAoaXNWYWxpZE9mZnNldChtX29mZnNldCkpCisgICAgICAgIG91dC5w
cmludChjb21tYSwgIm9mZnNldCA9ICIsIG1fb2Zmc2V0KTsKKyAgICBpZiAoIW1fY29uZGl0aW9u
U2V0LmlzRW1wdHkoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiY29uZGl0aW9ucyA9ICIs
IG1fY29uZGl0aW9uU2V0KTsKKworICAgIGlmIChSYXJlRGF0YSogcmFyZURhdGEgPSBtX3JhcmVE
YXRhLmdldCgpKSB7CisgICAgICAgIGlmIChyYXJlRGF0YS0+dmlhUHJveHkpCisgICAgICAgICAg
ICBvdXQucHJpbnQoY29tbWEsICJ2aWFQcm94eSA9ICIsIHJhcmVEYXRhLT52aWFQcm94eSk7Cisg
ICAgICAgIGlmIChyYXJlRGF0YS0+YWRkaXRpb25hbFNldCkKKyAgICAgICAgICAgIG91dC5wcmlu
dChjb21tYSwgImFkZGl0aW9uYWxTZXQgPSAiLCBSYXdQb2ludGVyKHJhcmVEYXRhLT5hZGRpdGlv
bmFsU2V0LmdldCgpKSk7CisgICAgICAgIGlmIChyYXJlRGF0YS0+Y2FsbExpbmtJbmZvKQorICAg
ICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiY2FsbExpbmtJbmZvID0gIiwgUmF3UG9pbnRlcihy
YXJlRGF0YS0+Y2FsbExpbmtJbmZvLmdldCgpKSk7CisgICAgICAgIGlmIChyYXJlRGF0YS0+Y3Vz
dG9tQWNjZXNzb3Iub3BhcXVlKQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiY3VzdG9t
QWNjZXNzb3IgPSAiLCBSYXdQb2ludGVyKHJhcmVEYXRhLT5jdXN0b21BY2Nlc3Nvci5vcGFxdWUp
KTsKKyAgICAgICAgaWYgKHJhcmVEYXRhLT5jdXN0b21TbG90QmFzZSkKKyAgICAgICAgICAgIG91
dC5wcmludChjb21tYSwgImN1c3RvbVNsb3RCYXNlID0gIiwgUmF3UG9pbnRlcihyYXJlRGF0YS0+
Y3VzdG9tU2xvdEJhc2UuZ2V0KCkpKTsKKyAgICB9CisKKyAgICBvdXQucHJpbnQoIikiKTsKK30K
KworYm9vbCBBY2Nlc3NDYXNlOjp2aXNpdFdlYWsoVk0mIHZtKSBjb25zdAogewogICAgIGlmICht
X3N0cnVjdHVyZSAmJiAhSGVhcDo6aXNNYXJrZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFtX2NvbmRpdGlvblNldC5hcmVTdGlsbExpdmUoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghbV9zdHViUm91dGluZS0+dmlzaXRXZWFr
KHZtKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3JhcmVEYXRhKSB7CisgICAg
ICAgIGlmIChtX3JhcmVEYXRhLT5jYWxsTGlua0luZm8pCisgICAgICAgICAgICBtX3JhcmVEYXRh
LT5jYWxsTGlua0luZm8tPnZpc2l0V2Vhayh2bSk7CisgICAgICAgIGlmIChtX3JhcmVEYXRhLT5j
dXN0b21TbG90QmFzZSAmJiAhSGVhcDo6aXNNYXJrZWQobV9yYXJlRGF0YS0+Y3VzdG9tU2xvdEJh
c2UuZ2V0KCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6UG9seW1vcnBoaWNHZXRCeUlkTGlz
dChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRl
V2l0aEd1YXJkKAorICAgIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUsIENDYWxsSGVscGVy
czo6SnVtcExpc3QmIGZhbGxUaHJvdWdoKQogewotICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBl
ID09IGFjY2Vzc191bnNldCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIG1fbGlzdC5hcHBl
bmQoR2V0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKHN0dWJJbmZvKSk7CisgICAg
Q0NhbGxIZWxwZXJzJiBqaXQgPSAqc3RhdGUuaml0OworCisgICAgc3dpdGNoIChtX3R5cGUpIHsK
KyAgICBjYXNlIEFycmF5TGVuZ3RoOiB7CisgICAgICAgIEFTU0VSVCghdmlhUHJveHkoKSk7Cisg
ICAgICAgIGppdC5sb2FkOChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RhdGUuYmFzZUdQUiwgSlND
ZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHN0YXRlLnNjcmF0Y2hHUFIpOworICAgICAgICBm
YWxsVGhyb3VnaC5hcHBlbmQoCisgICAgICAgICAgICBqaXQuYnJhbmNoVGVzdDMyKAorICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6WmVybywgc3RhdGUuc2NyYXRjaEdQUiwgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoSXNBcnJheSkpKTsKKyAgICAgICAgZmFsbFRocm91Z2guYXBwZW5k
KAorICAgICAgICAgICAgaml0LmJyYW5jaFRlc3QzMigKKyAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6Olplcm8sIHN0YXRlLnNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KEluZGV4aW5nU2hhcGVNYXNrKSkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNl
IFN0cmluZ0xlbmd0aDogeworICAgICAgICBBU1NFUlQoIXZpYVByb3h5KCkpOworICAgICAgICBm
YWxsVGhyb3VnaC5hcHBlbmQoCisgICAgICAgICAgICBqaXQuYnJhbmNoOCgKKyAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6QWRkcmVzcyhzdGF0ZS5iYXNlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwK
KyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihTdHJpbmdUeXBlKSkp
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBkZWZhdWx0OiB7CisgICAgICAgIGlmICh2
aWFQcm94eSgpKSB7CisgICAgICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCisgICAgICAgICAg
ICAgICAgaml0LmJyYW5jaDgoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90
RXF1YWwsCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdGF0ZS5i
YXNlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoUHVyZUZvcndhcmRpbmdQcm94eVR5cGUpKSk7
CisKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6QWRkcmVzcyhzdGF0ZS5iYXNlR1BSLCBKU1Byb3h5Ojp0YXJnZXRPZmZzZXQoKSksCisgICAg
ICAgICAgICAgICAgc3RhdGUuc2NyYXRjaEdQUik7CisKKyAgICAgICAgICAgIGZhbGxUaHJvdWdo
LmFwcGVuZCgKKyAgICAgICAgICAgICAgICBqaXQuYnJhbmNoU3RydWN0dXJlKAorICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RhdGUuc2NyYXRjaEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlKCkpKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgKKyAgICAgICAgICAgICAg
ICBqaXQuYnJhbmNoU3RydWN0dXJlKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3Rh
dGUuYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAgICAgICAgICAg
ICAgICAgc3RydWN0dXJlKCkpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9IH07
CisKKyAgICBnZW5lcmF0ZShzdGF0ZSk7CiB9CiAKLVBvbHltb3JwaGljR2V0QnlJZExpc3QqIFBv
bHltb3JwaGljR2V0QnlJZExpc3Q6OmZyb20oU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQor
dm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZShBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQog
ewotICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfbGlzdCkK
LSAgICAgICAgcmV0dXJuIHN0dWJJbmZvLnUuZ2V0QnlJZExpc3QubGlzdDsKLSAgICAKLSAgICBB
U1NFUlQoCi0gICAgICAgIHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9z
ZWxmCi0gICAgICAgIHx8IHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0KTsKLSAg
ICAKLSAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiByZXN1bHQgPSBuZXcgUG9seW1vcnBoaWNH
ZXRCeUlkTGlzdChzdHViSW5mbyk7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2co
IkdlbmVyYXRpbmcgY29kZSBmb3I6ICIsICp0aGlzLCAiXG4iKTsKICAgICAKLSAgICBzdHViSW5m
by5pbml0R2V0QnlJZExpc3QocmVzdWx0KTsKKyAgICBDQ2FsbEhlbHBlcnMmIGppdCA9ICpzdGF0
ZS5qaXQ7CisgICAgVk0mIHZtID0gKmppdC52bSgpOworICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbyA9ICpzdGF0ZS5zdHViSW5mbzsKKyAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9
ICpzdGF0ZS5pZGVudDsKKyAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSBzdGF0ZS52YWx1ZVJl
Z3M7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0ZS5iYXNlR1BSOworICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gc3RhdGUuc2NyYXRjaEdQUjsKKworICAgIEFTU0VSVChtX2NvbmRpdGlvblNldC5z
dHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgp
KTsKKworICAgIGlmICgoc3RydWN0dXJlKCkgJiYgc3RydWN0dXJlKCktPm5lZWRJbXB1cmVQcm9w
ZXJ0eVdhdGNocG9pbnQoKSkKKyAgICAgICAgfHwgbV9jb25kaXRpb25TZXQubmVlZEltcHVyZVBy
b3BlcnR5V2F0Y2hwb2ludCgpKQorICAgICAgICB2bS5yZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1
cmVQcm9wZXJ0eShpZGVudCwgc3RhdGUuYWRkV2F0Y2hwb2ludCgpKTsKKworICAgIGlmIChhZGRp
dGlvbmFsU2V0KCkpCisgICAgICAgIGFkZGl0aW9uYWxTZXQoKS0+YWRkKHN0YXRlLmFkZFdhdGNo
cG9pbnQoKSk7CisKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25k
aXRpb24gOiBtX2NvbmRpdGlvblNldCkgeworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IGNvbmRpdGlvbi5vYmplY3QoKS0+c3RydWN0dXJlKCk7CisKKyAgICAgICAgaWYgKGNvbmRpdGlv
bi5pc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKKyAgICAg
ICAgICAgIHN0cnVjdHVyZS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoc3RhdGUuYWRkV2F0Y2hw
b2ludChjb25kaXRpb24pKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoY29uZGl0aW9uLnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eUFz
c3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KHN0cnVjdHVyZSkpOworICAgICAgICBqaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY29uZGl0aW9uLm9iamVjdCgpKSwgc2Ny
YXRjaEdQUik7CisgICAgICAgIHN0YXRlLmZhaWxBbmRSZXBhdGNoLmFwcGVuZCgKKyAgICAgICAg
ICAgIGppdC5icmFuY2hTdHJ1Y3R1cmUoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpO
b3RFcXVhbCwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQ
UiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1
cmUpKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgSW5IaXQ6Cisg
ICAgY2FzZSBJbk1pc3M6CisgICAgICAgIGppdC5ib3hCb29sZWFuUGF5bG9hZChtX3R5cGUgPT0g
SW5IaXQsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOworICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7
CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgTWlzczoKKyAgICAgICAgaml0Lm1vdmVUcnVz
dGVkVmFsdWUoanNVbmRlZmluZWQoKSwgdmFsdWVSZWdzKTsKKyAgICAgICAgc3RhdGUuc3VjY2Vl
ZCgpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIExvYWQ6CisgICAgY2FzZSBHZXR0ZXI6
CisgICAgY2FzZSBTZXR0ZXI6CisgICAgY2FzZSBDdXN0b21HZXR0ZXI6CisgICAgY2FzZSBDdXN0
b21TZXR0ZXI6IHsKKyAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQobV9vZmZzZXQpKSB7CisgICAg
ICAgICAgICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmU7CisgICAgICAgICAgICBpZiAobV9jb25k
aXRpb25TZXQuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBzdHJ1
Y3R1cmUoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjdXJyU3RydWN0dXJl
ID0gbV9jb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vYmplY3QoKS0+c3RydWN0dXJl
KCk7CisgICAgICAgICAgICBjdXJyU3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JS
ZXBsYWNlbWVudHModm0sIG9mZnNldCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIEdQUlJlZyBi
YXNlRm9yR2V0R1BSOworICAgICAgICBpZiAodmlhUHJveHkoKSkgeworICAgICAgICAgICAgYmFz
ZUZvckdldEdQUiA9IHZhbHVlUmVncy5wYXlsb2FkR1BSKCk7CisgICAgICAgICAgICBqaXQubG9h
ZFB0cigKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNQ
cm94eTo6dGFyZ2V0T2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIGJhc2VGb3JHZXRHUFIpOwor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGJhc2VGb3JHZXRHUFIgPSBiYXNlR1BSOworCisg
ICAgICAgIEdQUlJlZyBiYXNlRm9yQWNjZXNzR1BSOworICAgICAgICBpZiAoIW1fY29uZGl0aW9u
U2V0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgaml0Lm1vdmUoCisgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGFsdGVybmF0ZUJhc2UoKSksCisgICAgICAgICAg
ICAgICAgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBiYXNlRm9yQWNjZXNzR1BSID0gc2NyYXRj
aEdQUjsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBiYXNlRm9yQWNjZXNzR1BSID0gYmFz
ZUZvckdldEdQUjsKKworICAgICAgICBHUFJSZWcgbG9hZGVkVmFsdWVHUFIgPSBJbnZhbGlkR1BS
UmVnOworICAgICAgICBpZiAobV90eXBlICE9IEN1c3RvbUdldHRlciAmJiBtX3R5cGUgIT0gQ3Vz
dG9tU2V0dGVyKSB7CisgICAgICAgICAgICBpZiAobV90eXBlID09IExvYWQpCisgICAgICAgICAg
ICAgICAgbG9hZGVkVmFsdWVHUFIgPSB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSID0gc2NyYXRjaEdQUjsKKwor
ICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFI7CisgICAgICAgICAgICBpZiAoaXNJbmxpbmVP
ZmZzZXQobV9vZmZzZXQpKQorICAgICAgICAgICAgICAgIHN0b3JhZ2VHUFIgPSBiYXNlRm9yQWNj
ZXNzR1BSOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIo
CisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlRm9yQWNjZXNz
R1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgICAgICBs
b2FkZWRWYWx1ZUdQUik7CisgICAgICAgICAgICAgICAgc3RvcmFnZUdQUiA9IGxvYWRlZFZhbHVl
R1BSOworICAgICAgICAgICAgfQorCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgIGpp
dC5sb2FkNjQoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0b3JhZ2VH
UFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKG1fb2Zmc2V0KSksIGxvYWRlZFZhbHVlR1BSKTsKKyNl
bHNlCisgICAgICAgICAgICBpZiAobV90eXBlID09IExvYWQpIHsKKyAgICAgICAgICAgICAgICBq
aXQubG9hZDMyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3Rv
cmFnZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2UobV9vZmZzZXQpICsgVGFnT2Zmc2V0KSwKKyAg
ICAgICAgICAgICAgICAgICAgdmFsdWVSZWdzLnRhZ0dQUigpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGppdC5sb2FkMzIoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKHN0b3JhZ2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKG1fb2Zmc2V0KSArIFBheWxvYWRP
ZmZzZXQpLAorICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSKTsKKyNlbmRpZgorICAgICAg
ICB9CisKKyAgICAgICAgLy8gU3R1ZmYgZm9yIGN1c3RvbSBnZXR0ZXJzLgorICAgICAgICBDQ2Fs
bEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9uQ2FsbDsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxs
IGhhbmRsZXJDYWxsOworCisgICAgICAgIC8vIFN0dWZmIGZvciBKUyBnZXR0ZXJzLgorICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkRhdGFMYWJlbFB0ciBhZGRyZXNzT2ZMaW5rRnVuY3Rpb25DaGVjazsK
KyAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGZhc3RQYXRoQ2FsbDsKKyAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpDYWxsIHNsb3dQYXRoQ2FsbDsKKworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAg
c3VjY2VzczsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGZhaWw7CisgICAgICAgIGlmICht
X3R5cGUgIT0gTG9hZCAmJiBtX3R5cGUgIT0gTWlzcykgeworICAgICAgICAgICAgLy8gTmVlZCB0
byBtYWtlIHN1cmUgdGhhdCB3aGVuZXZlciB0aGlzIGNhbGwgaXMgbWFkZSBpbiB0aGUgZnV0dXJl
LCB3ZSByZW1lbWJlciB0aGUKKyAgICAgICAgICAgIC8vIHBsYWNlIHRoYXQgd2UgbWFkZSBpdCBm
cm9tLgorICAgICAgICAgICAgaml0LnN0b3JlMzIoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoc3R1YkluZm8uY2FsbFNpdGVJbmRleC5iaXRzKCkpLAorICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rl
cj4oSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKKworICAgICAgICAgICAgaWYgKG1fdHlwZSA9
PSBHZXR0ZXIgfHwgbV90eXBlID09IFNldHRlcikgeworICAgICAgICAgICAgICAgIC8vIENyZWF0
ZSBhIEpTIGNhbGwgdXNpbmcgYSBKUyBjYWxsIGlubGluZSBjYWNoZS4gQXNzdW1lIHRoYXQ6Cisg
ICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAtIFNQIGlzIGFsaWduZWQgYW5k
IHJlcHJlc2VudHMgdGhlIGV4dGVudCBvZiB0aGUgY2FsbGluZyBjb21waWxlcidzIHN0YWNrIHVz
YWdlLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gLSBGUCBpcyBzZXQg
Y29ycmVjdGx5IChpLmUuIGl0IHBvaW50cyB0byB0aGUgY2FsbGVyJ3MgY2FsbCBmcmFtZSBoZWFk
ZXIpLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gLSBTUCAtIEZQIGlz
IGFuIGFsaWduZWQgZGlmZmVyZW5jZS4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAg
ICAgIC8vIC0gQW55IGJ5dGUgYmV0d2VlbiBGUCAoZXhjbHVzaXZlKSBhbmQgU1AgKGluY2x1c2l2
ZSkgY291bGQgYmUgbGl2ZSBpbiB0aGUgY2FsbGluZworICAgICAgICAgICAgICAgIC8vICAgY29k
ZS4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIFRoZXJlZm9yZSwgd2Ug
dGVtcG9yYXJpbHkgZ3JvdyB0aGUgc3RhY2sgZm9yIHRoZSBwdXJwb3NlIG9mIHRoZSBjYWxsIGFu
ZCB0aGVuCisgICAgICAgICAgICAgICAgLy8gc2hyaW5rIGl0IGFmdGVyLgorCisgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fcmFyZURhdGEtPmNhbGxMaW5rSW5mbyk7CisgICAgICAg
ICAgICAgICAgbV9yYXJlRGF0YS0+Y2FsbExpbmtJbmZvID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxs
TGlua0luZm8+KCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gRklYTUU6
IElmIHdlIGdlbmVyYXRlZCBhIHBvbHltb3JwaGljIGNhbGwgc3R1YiB0aGF0IGp1bXBlZCBiYWNr
IHRvIHRoZSBnZXR0ZXIKKyAgICAgICAgICAgICAgICAvLyBzdHViLCB3aGljaCB0aGVuIGp1bXBl
ZCBiYWNrIHRvIHRoZSBtYWluIGNvZGUsIHRoZW4gd2UnZCBoYXZlIGEgcmVhY2hhYmlsaXR5Cisg
ICAgICAgICAgICAgICAgLy8gc2l0dWF0aW9uIHRoYXQgdGhlIEdDIGRvZXNuJ3Qga25vdyBhYm91
dC4gVGhlIEdDIHdvdWxkIGVuc3VyZSB0aGF0IHRoZSBwb2x5bW9ycGhpYworICAgICAgICAgICAg
ICAgIC8vIGNhbGwgc3R1YiBzdGF5ZWQgYWxpdmUsIGFuZCBpdCB3b3VsZCBlbnN1cmUgdGhhdCB0
aGUgbWFpbiBjb2RlIHN0YXllZCBhbGl2ZSwgYnV0CisgICAgICAgICAgICAgICAgLy8gaXQgd291
bGRuJ3Qga25vdyB0aGF0IHRoZSBnZXR0ZXIgc3R1YiB3YXMgYWxpdmUuIElkZWFsbHkgSklUIHN0
dWIgcm91dGluZXMgd291bGQKKyAgICAgICAgICAgICAgICAvLyBiZSBHQyBvYmplY3RzLCBhbmQg
dGhlbiB3ZSdkIGJlIGFibGUgdG8gc2F5IHRoYXQgdGhlIHBvbHltb3JwaGljIGNhbGwgc3R1YiBo
YXMgYQorICAgICAgICAgICAgICAgIC8vIHJlZmVyZW5jZSB0byB0aGUgZ2V0dGVyIHN0dWIuCisg
ICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0ODkxNAorICAgICAgICAgICAgICAgIG1fcmFyZURhdGEtPmNhbGxMaW5rSW5mby0+ZGlzYWxs
b3dTdHVicygpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fcmFyZURhdGEt
PmNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKAorICAgICAgICAgICAgICAgICAgICBDYWxsTGlua0lu
Zm86OkNhbGwsIHN0dWJJbmZvLmNvZGVPcmlnaW4sIGxvYWRlZFZhbHVlR1BSKTsKKworICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKKworICAgICAgICAgICAgICAg
IC8vIFRoZXJlIGlzIGEgInRoaXMiIGFyZ3VtZW50LgorICAgICAgICAgICAgICAgIHVuc2lnbmVk
IG51bWJlck9mUGFyYW1ldGVycyA9IDE7CisgICAgICAgICAgICAgICAgLy8gLi4uIGFuZCBhIHZh
bHVlIGFyZ3VtZW50IGlmIHdlJ3JlIGNhbGxpbmcgYSBzZXR0ZXIuCisgICAgICAgICAgICAgICAg
aWYgKG1fdHlwZSA9PSBTZXR0ZXIpCisgICAgICAgICAgICAgICAgICAgIG51bWJlck9mUGFyYW1l
dGVycysrOworCisgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBhY2Nlc3NvcjsgaWYgdGhlcmUg
YWluJ3Qgb25lIHRoZW4gdGhlIHJlc3VsdCBpcyBqc1VuZGVmaW5lZCgpLgorICAgICAgICAgICAg
ICAgIGlmIChtX3R5cGUgPT0gU2V0dGVyKSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2Fk
UHRyKAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGxvYWRl
ZFZhbHVlR1BSLCBHZXR0ZXJTZXR0ZXI6Om9mZnNldE9mU2V0dGVyKCkpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKAorICAgICAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKGxvYWRlZFZhbHVlR1BSLCBHZXR0ZXJTZXR0ZXI6Om9mZnNl
dE9mR2V0dGVyKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIpOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBy
ZXR1cm5VbmRlZmluZWQgPSBqaXQuYnJhbmNoVGVzdFB0cigKKyAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpaZXJvLCBsb2FkZWRWYWx1ZUdQUik7CisKKyAgICAgICAgICAgICAgICB1
bnNpZ25lZCBudW1iZXJPZlJlZ3NGb3JDYWxsID0gSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6
ZSArIG51bWJlck9mUGFyYW1ldGVyczsKKworICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJl
ck9mQnl0ZXNGb3JDYWxsID0KKyAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZSZWdzRm9yQ2Fs
bCAqIHNpemVvZihSZWdpc3RlcikgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7CisKKyAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwgPQorICAgICAg
ICAgICAgICAgICAgICBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRl
cygpLCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCk7CisKKyAgICAgICAgICAgICAgICBqaXQuc3ViUHRy
KAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihhbGlnbmVk
TnVtYmVyT2ZCeXRlc0ZvckNhbGwpLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
QWRkcmVzcyBjYWxsZWVGcmFtZSA9IENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwKKyAgICAgICAgICAg
ICAgICAgICAgLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMp
KSk7CisKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMigKKyAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobnVtYmVyT2ZQYXJhbWV0ZXJzKSwKKyAgICAgICAg
ICAgICAgICAgICAgY2FsbGVlRnJhbWUud2l0aE9mZnNldChKU1N0YWNrOjpBcmd1bWVudENvdW50
ICogc2l6ZW9mKFJlZ2lzdGVyKSArIFBheWxvYWRPZmZzZXQpKTsKKworICAgICAgICAgICAgICAg
IGppdC5zdG9yZUNlbGwoCisgICAgICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSLCBjYWxs
ZWVGcmFtZS53aXRoT2Zmc2V0KEpTU3RhY2s6OkNhbGxlZSAqIHNpemVvZihSZWdpc3RlcikpKTsK
KworICAgICAgICAgICAgICAgIGppdC5zdG9yZUNlbGwoCisgICAgICAgICAgICAgICAgICAgIGJh
c2VGb3JHZXRHUFIsCisgICAgICAgICAgICAgICAgICAgIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQo
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIp
KSk7CisKKyAgICAgICAgICAgICAgICBpZiAobV90eXBlID09IFNldHRlcikgeworICAgICAgICAg
ICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVl
UmVncywKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSku
b2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHNsb3dDYXNlID0gaml0LmJyYW5jaFB0cldp
dGhQYXRjaCgKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgbG9h
ZGVkVmFsdWVHUFIsIGFkZHJlc3NPZkxpbmtGdW5jdGlvbkNoZWNrLAorICAgICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoMCkpOworCisgICAgICAgICAgICAgICAg
ZmFzdFBhdGhDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisKKyAgICAgICAgICAgICAgICBqaXQuYWRk
UHRyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihhbGln
bmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwpLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBpZiAobV90eXBlID09
IEdldHRlcikKKyAgICAgICAgICAgICAgICAgICAgaml0LnNldHVwUmVzdWx0cyh2YWx1ZVJlZ3Mp
OworCisgICAgICAgICAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgICAg
ICAgICAgc2xvd0Nhc2UubGluaygmaml0KTsKKworICAgICAgICAgICAgICAgIGppdC5tb3ZlKGxv
YWRlZFZhbHVlR1BSLCBHUFJJbmZvOjpyZWdUMCk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAg
ICAgICAgICAgICAgICAvLyBXZSAqYWx3YXlzKiBrbm93IHRoYXQgdGhlIGdldHRlci9zZXR0ZXIs
IGlmIG5vbi1udWxsLCBpcyBhIGNlbGwuCisgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIEdQUkluZm86OnJlZ1QxKTsK
KyNlbmRpZgorICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cihtX3JhcmVEYXRhLT5jYWxsTGlua0luZm8uZ2V0KCkpLCBHUFJJbmZvOjpyZWdUMik7Cisg
ICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisKKyAgICAgICAg
ICAgICAgICBqaXQuYWRkUHRyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwpLAorICAgICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAg
ICBpZiAobV90eXBlID09IEdldHRlcikKKyAgICAgICAgICAgICAgICAgICAgaml0LnNldHVwUmVz
dWx0cyh2YWx1ZVJlZ3MpOworCisgICAgICAgICAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAo
KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuVW5kZWZpbmVkLmxpbmsoJmppdCk7CisKKyAgICAg
ICAgICAgICAgICBpZiAobV90eXBlID09IEdldHRlcikKKyAgICAgICAgICAgICAgICAgICAgaml0
Lm1vdmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgdmFsdWVSZWdzKTsKKworICAgICAgICAg
ICAgICAgIGRvbmUubGluaygmaml0KTsKKworICAgICAgICAgICAgICAgIHN0YXRlLmNhbGxiYWNr
cy5hcHBlbmQoCisgICAgICAgICAgICAgICAgICAgIFs9LCAmdm1dIChMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3JhcmVEYXRhLT5jYWxsTGlua0lu
Zm8tPnNldENhbGxMb2NhdGlvbnMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1
ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoc2xvd1BhdGhDYWxsKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoYWRkcmVzc09mTGlua0Z1bmN0aW9uQ2hl
Y2spLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5l
YXJDYWxsKGZhc3RQYXRoQ2FsbCkpOworCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVm
ZmVyLmxpbmsoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdldENUSVN0dWIo
bGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBnZXR0ZXI6IEVuY29k
ZWRKU1ZhbHVlICgqR2V0VmFsdWVGdW5jKShFeGVjU3RhdGUqLCBKU09iamVjdCogc2xvdEJhc2Us
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgICAg
ICAvLyBzZXR0ZXI6IHZvaWQgKCpQdXRWYWx1ZUZ1bmMpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBi
YXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSk7Cisj
aWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgICAgICBpZiAobV90eXBlID09IEN1c3RvbUdl
dHRlcikgeworICAgICAgICAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgYmFzZUZvckFjY2Vzc0dQUiwgYmFzZUZvckdl
dEdQUiwKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihpZGVudC5pbXBsKCkpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlRm9yQWNjZXNzR1BSLCBi
YXNlRm9yR2V0R1BSLCB2YWx1ZVJlZ3MuZ3ByKCkpOworI2Vsc2UKKyAgICAgICAgICAgICAgICBp
ZiAobV90eXBlID09IEN1c3RvbUdldHRlcikgeworICAgICAgICAgICAgICAgICAgICBqaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgYmFzZUZv
ckFjY2Vzc0dQUiwgYmFzZUZvckdldEdQUiwKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGlkZW50LmltcGwoKSkpOworICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICBiYXNlRm9yQWNjZXNz
R1BSLCBiYXNlRm9yR2V0R1BSLAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksCisgICAgICAgICAgICAgICAgICAgICAg
ICB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB2YWx1ZVJlZ3MudGFnR1BSKCkpOworICAgICAgICAg
ICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgJnZtLnRvcENhbGxGcmFtZSk7CisKKyAgICAgICAgICAgICAgICBv
cGVyYXRpb25DYWxsID0gaml0LmNhbGwoKTsKKyAgICAgICAgICAgICAgICBpZiAobV90eXBlID09
IEN1c3RvbUdldHRlcikKKyAgICAgICAgICAgICAgICAgICAgaml0LnNldHVwUmVzdWx0cyh2YWx1
ZVJlZ3MpOworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBub0V4Y2VwdGlvbiA9
CisgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0RXhjZXB0aW9uQ2hlY2soQ0NhbGxIZWxwZXJz
OjpJbnZlcnRlZEV4Y2VwdGlvbkNoZWNrKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGppdC5zZXR1cEFyZ3VtZW50cyhDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnZtKSwgR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIGhhbmRsZXJDYWxsID0g
aml0LmNhbGwoKTsKKyAgICAgICAgICAgICAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigp
OworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbm9FeGNlcHRpb24ubGluaygmaml0KTsK
KworICAgICAgICAgICAgICAgIHN0YXRlLmNhbGxiYWNrcy5hcHBlbmQoCisgICAgICAgICAgICAg
ICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAg
ICAgICAgbGlua0J1ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIEZ1bmN0aW9uUHRyKG1fcmFyZURh
dGEtPmN1c3RvbUFjY2Vzc29yLm9wYXF1ZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgbGlu
a0J1ZmZlci5saW5rKGhhbmRsZXJDYWxsLCBsb29rdXBFeGNlcHRpb25IYW5kbGVyKTsKKyAgICAg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc3Rh
dGUuc3VjY2VlZCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2FzZSBSZXBsYWNl
OiB7CisgICAgICAgIGlmIChpc0lubGluZU9mZnNldChtX29mZnNldCkpIHsKKyAgICAgICAgICAg
IGppdC5zdG9yZVZhbHVlKAorICAgICAgICAgICAgICAgIHZhbHVlUmVncywKKyAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICAgICAgICAgIGJhc2VHUFIs
CisgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSAr
CisgICAgICAgICAgICAgICAgICAgIG9mZnNldEluSW5saW5lU3RvcmFnZShtX29mZnNldCkgKiBz
aXplb2YoSlNWYWx1ZSkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVZhbHVlKAorICAgICAg
ICAgICAgICAgIHZhbHVlUmVncywKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoCisgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIsIG9mZnNldEluQnV0dGVyZmx5KG1f
b2Zmc2V0KSAqIHNpemVvZihKU1ZhbHVlKSkpOworICAgICAgICB9CisgICAgICAgIHN0YXRlLnN1
Y2NlZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNhc2UgVHJhbnNpdGlvbjog
eworICAgICAgICAvLyBBY2Nlc3NDYXNlOjp0cmFuc2l0aW9uKCkgc2hvdWxkIGhhdmUgcmV0dXJu
ZWQgbnVsbC4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3Rl
cnMgPj0gNiB8fCAhc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgfHwgc3RydWN0dXJl
KCktPm91dE9mTGluZUNhcGFjaXR5KCkgPT0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCghc3RydWN0dXJlKCktPmNvdWxkSGF2ZUlu
ZGV4aW5nSGVhZGVyKCkpOworCisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1Bh
dGg7CisKKyAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcihzdHViSW5m
by5wYXRjaC51c2VkUmVnaXN0ZXJzKTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2soYmFzZUdQUik7
CisgICAgICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlUmVncyk7CisgICAgICAgIGFsbG9jYXRvci5s
b2NrKHNjcmF0Y2hHUFIpOworCisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMiA9IGFsbG9jYXRv
ci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIzOworICAg
ICAgICBpZiAobmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJl
KCktPm91dE9mTGluZUNhcGFjaXR5KCkKKyAgICAgICAgICAgICYmIHN0cnVjdHVyZSgpLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpKQorICAgICAgICAgICAgc2NyYXRjaEdQUjMgPSBhbGxvY2F0b3IuYWxs
b2NhdGVTY3JhdGNoR1BSKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIz
ID0gSW52YWxpZEdQUlJlZzsKKworICAgICAgICBzaXplX3QgbnVtYmVyT2ZQYWRkaW5nQnl0ZXMg
PSBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0KTsKKworICAg
ICAgICBBU1NFUlQoc3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbklu
dmFsaWRhdGVkKCkpOworCisgICAgICAgIGJvb2wgc2NyYXRjaEdQUkhhc1N0b3JhZ2UgPSBmYWxz
ZTsKKworICAgICAgICBpZiAobmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgIT0g
c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgICAgIHNpemVfdCBu
ZXdTaXplID0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNW
YWx1ZSk7CisgICAgICAgICAgICBDb3BpZWRBbGxvY2F0b3IqIGNvcGllZEFsbG9jYXRvciA9ICZ2
bS5oZWFwLnN0b3JhZ2VBbGxvY2F0b3IoKTsKKworICAgICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgeworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKCZj
b3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZywgc2NyYXRjaEdQUik7CisgICAgICAg
ICAgICAgICAgc2xvd1BhdGguYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICBqaXQuYnJhbmNo
U3ViUHRyKAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpTaWduZWQsIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BSKSk7CisgICAgICAg
ICAgICAgICAgaml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIsICZjb3BpZWRBbGxvY2F0b3ItPm1fY3Vy
cmVudFJlbWFpbmluZyk7CisgICAgICAgICAgICAgICAgaml0Lm5lZ1B0cihzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OkFic29sdXRlQWRkcmVzcygmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRQYXlsb2Fk
RW5kKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihzaXplb2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBzdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOworICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIzKTsKKyAgICAgICAgICAgICAgICBqaXQubG9h
ZFB0cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgaml0
LmJyYW5jaFN1YlB0cigKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6U2ln
bmVkLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRjaEdQUikpOwor
ICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCAmY29waWVkQWxsb2NhdG9y
LT5tX2N1cnJlbnRSZW1haW5pbmcpOworICAgICAgICAgICAgICAgIGppdC5uZWdQdHIoc2NyYXRj
aEdQUik7CisgICAgICAgICAgICAgICAgaml0LmFkZFB0cigKKyAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50
UGF5bG9hZEVuZCksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEpTVmFsdWUpKSwgc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBzY3JhdGNoR1BSID0gbmV3IHN0b3JhZ2UsIHNjcmF0
Y2hHUFIzID0gb2xkIHN0b3JhZ2UsCisgICAgICAgICAgICAgICAgLy8gc2NyYXRjaEdQUjIgPSBh
dmFpbGFibGUKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBvZmZzZXQgPSAwOyBvZmZzZXQg
PCBvbGRTaXplOyBvZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKSkgeworICAgICAgICAgICAgICAgICAg
ICBqaXQubG9hZFB0cigKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRk
cmVzcygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoR1BSMywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PigKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZv
aWQqKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgc2NyYXRjaEdQUjIpOworICAgICAgICAg
ICAgICAgICAgICBqaXQuc3RvcmVQdHIoCisgICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNo
R1BSMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoR1BSLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9mZnNldCArIHNpemVvZihKU1ZhbHVl
KSArIHNpemVvZih2b2lkKikpKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBqaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOworICAgICAgICAgICAg
c2NyYXRjaEdQUkhhc1N0b3JhZ2UgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgdWludDMy
X3Qgc3RydWN0dXJlQml0cyA9IGJpdHdpc2VfY2FzdDx1aW50MzJfdD4obmV3U3RydWN0dXJlKCkt
PmlkKCkpOworICAgICAgICBqaXQuc3RvcmUzMigKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKHN0cnVjdHVyZUJpdHMpLAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSkpOworCisgICAgICAg
IGlmIChpc0lubGluZU9mZnNldChtX29mZnNldCkpIHsKKyAgICAgICAgICAgIGppdC5zdG9yZVZh
bHVlKAorICAgICAgICAgICAgICAgIHZhbHVlUmVncywKKyAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICAgICAgICAgIGJhc2VHUFIsCisgICAgICAgICAg
ICAgICAgICAgIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArCisgICAgICAgICAg
ICAgICAgICAgIG9mZnNldEluSW5saW5lU3RvcmFnZShtX29mZnNldCkgKiBzaXplb2YoSlNWYWx1
ZSkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICghc2NyYXRjaEdQUkhhc1N0
b3JhZ2UpCisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAg
ICAgICAgICAgaml0LnN0b3JlVmFsdWUoCisgICAgICAgICAgICAgICAgdmFsdWVSZWdzLAorICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbkJ1
dHRlcmZseShtX29mZnNldCkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSBudWxscHRyOworICAgICAgICBpZiAo
bmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlKCktPm91dE9m
TGluZUNhcGFjaXR5KCkpCisgICAgICAgICAgICBzY3JhdGNoQnVmZmVyID0gdm0uc2NyYXRjaEJ1
ZmZlckZvclNpemUoYWxsb2NhdG9yLmRlc2lyZWRTY3JhdGNoQnVmZmVyU2l6ZUZvckNhbGwoKSk7
CisKKyNpZiBFTkFCTEUoR0dDKQorICAgICAgICBpZiAobmV3U3RydWN0dXJlKCktPm91dE9mTGlu
ZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKKyAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXI7Cisg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9
IGppdC5qdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihiYXNlR1BSKTsKKyAgICAgICAgICAgIFdy
aXRlQmFycmllckJ1ZmZlciYgd3JpdGVCYXJyaWVyQnVmZmVyID0gaml0LnZtKCktPmhlYXAud3Jp
dGVCYXJyaWVyQnVmZmVyKCk7CisgICAgICAgICAgICBqaXQubG9hZDMyKHdyaXRlQmFycmllckJ1
ZmZlci5jdXJyZW50SW5kZXhBZGRyZXNzKCksIHNjcmF0Y2hHUFIyKTsKKyAgICAgICAgICAgIEND
YWxsSGVscGVyczo6SnVtcCBuZWVkVG9GbHVzaCA9CisgICAgICAgICAgICAgICAgaml0LmJyYW5j
aDMyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgc2Ny
YXRjaEdQUjIsCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KHdyaXRlQmFycmllckJ1ZmZlci5jYXBhY2l0eSgpKSk7CisKKyAgICAgICAgICAgIGppdC5hZGQz
MihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaEdQUjIpOworICAgICAgICAg
ICAgaml0LnN0b3JlMzIoc2NyYXRjaEdQUjIsIHdyaXRlQmFycmllckJ1ZmZlci5jdXJyZW50SW5k
ZXhBZGRyZXNzKCkpOworCisgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIod3JpdGVCYXJyaWVyQnVmZmVyLmJ1ZmZlcigpKSwgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICAvLyBXZSB1c2UgYW4gb2Zmc2V0IG9mIC1zaXplb2Yodm9pZCopIGJlY2F1c2Ugd2Ug
YWxyZWFkeSBhZGRlZCAxIHRvIHNjcmF0Y2hHUFIyLgorICAgICAgICAgICAgaml0LnN0b3JlUHRy
KAorICAgICAgICAgICAgICAgIGJhc2VHUFIsCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpCYXNlSW5kZXgoCisgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIy
LCBDQ2FsbEhlbHBlcnM6OlNjYWxlUHRyLAorICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQzMl90Pigtc2l6ZW9mKHZvaWQqKSkpKTsKKworICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpKdW1wIGRvbmVXaXRoQmFycmllciA9IGppdC5qdW1wKCk7CisgICAgICAgICAgICBuZWVkVG9G
bHVzaC5saW5rKCZqaXQpOworCisgICAgICAgICAgICBhbGxvY2F0b3IucHJlc2VydmVVc2VkUmVn
aXN0ZXJzVG9TY3JhdGNoQnVmZmVyRm9yQ2FsbChqaXQsIHNjcmF0Y2hCdWZmZXIsIHNjcmF0Y2hH
UFIyKTsKKyAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUdQ
Uik7CisgICAgICAgICAgICBjYWxsRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIgPSBqaXQuY2FsbCgp
OworICAgICAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVVc2VkUmVnaXN0ZXJzRnJvbVNjcmF0Y2hC
dWZmZXJGb3JDYWxsKAorICAgICAgICAgICAgICAgIGppdCwgc2NyYXRjaEJ1ZmZlciwgc2NyYXRj
aEdQUjIpOworCisgICAgICAgICAgICBkb25lV2l0aEJhcnJpZXIubGluaygmaml0KTsKKyAgICAg
ICAgICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluaygmaml0KTsKKworICAgICAgICAg
ICAgc3RhdGUuY2FsbGJhY2tzLmFwcGVuZCgKKyAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZm
ZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNh
bGxGbHVzaFdyaXRlQmFycmllckJ1ZmZlciwgb3BlcmF0aW9uRmx1c2hXcml0ZUJhcnJpZXJCdWZm
ZXIpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisjZW5kaWYgLy8gRU5BQkxFKEdH
QykKKyAgICAgICAgCisgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKKworICAgICAgICBpZiAobmV3
U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlKCktPm91dE9mTGlu
ZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7CisgICAgICAg
ICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIG51bWJl
ck9mUGFkZGluZ0J5dGVzKTsKKyAgICAgICAgICAgIGFsbG9jYXRvci5wcmVzZXJ2ZVVzZWRSZWdp
c3RlcnNUb1NjcmF0Y2hCdWZmZXJGb3JDYWxsKGppdCwgc2NyYXRjaEJ1ZmZlciwgc2NyYXRjaEdQ
Uik7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoCisgICAgICAgICAgICAgICAgYmFzZUdQUiwKKyAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobmV3U3RydWN0dXJlKCkpLAorICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG1fb2Zmc2V0KSwKKyAgICAgICAgICAgICAg
ICB2YWx1ZVJlZ3MuZ3ByKCkpOworI2Vsc2UKKyAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoCisgICAgICAgICAgICAgICAgYmFzZUdQUiwKKyAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobmV3U3RydWN0dXJlKCkpLAorICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG1fb2Zmc2V0KSwKKyAgICAgICAgICAg
ICAgICB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB2YWx1ZVJlZ3MudGFnR1BSKCkpOworI2VuZGlm
CisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9uQ2FsbCA9IGppdC5jYWxs
KCk7CisgICAgICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVVzZWRSZWdpc3RlcnNGcm9tU2NyYXRj
aEJ1ZmZlckZvckNhbGwoaml0LCBzY3JhdGNoQnVmZmVyLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
ICAgIHN0YXRlLnN1Y2NlZWQoKTsKKworICAgICAgICAgICAgc3RhdGUuY2FsbGJhY2tzLmFwcGVu
ZCgKKyAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAg
ICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIG9wZXJhdGlvblJl
YWxsb2NhdGVTdG9yYWdlQW5kRmluaXNoUHV0KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2FzZSBBcnJheUxlbmd0aDogewor
ICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGppdC5sb2FkMzIo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zm
c2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQo
CisgICAgICAgICAgICBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpMZXNzVGhhbiwgc2NyYXRj
aEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgaml0LmJveElu
dDMyKHNjcmF0Y2hHUFIsIHZhbHVlUmVncyk7CisgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNhc2UgU3RyaW5nTGVuZ3RoOiB7CisgICAgICAg
IGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTU3RyaW5nOjpvZmZz
ZXRPZkxlbmd0aCgpKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSk7CisgICAgICAgIGppdC5ib3hJ
bnQzMih2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB2YWx1ZVJlZ3MpOworICAgICAgICBzdGF0ZS5z
dWNjZWVkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9IH0KICAgICAKLSAgICByZXR1cm4gcmVz
dWx0OworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLVBvbHltb3JwaGlj
R2V0QnlJZExpc3Q6On5Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0KCkgeyB9CitQb2x5bW9ycGhpY0Fj
Y2Vzczo6UG9seW1vcnBoaWNBY2Nlc3MoKSB7IH0KK1BvbHltb3JwaGljQWNjZXNzOjp+UG9seW1v
cnBoaWNBY2Nlc3MoKSB7IH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIFBvbHltb3JwaGljR2V0
QnlJZExpc3Q6OmN1cnJlbnRTbG93UGF0aFRhcmdldCgKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8pIGNvbnN0CitNYWNyb0Fzc2VtYmxlckNvZGVQdHIgUG9seW1vcnBoaWNBY2Nlc3M6
OnJlZ2VuZXJhdGVXaXRoQ2FzZXMoCisgICAgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwKKyAg
ICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+PiBvcmlnaW5hbENhc2VzVG9BZGQp
CiB7Ci0gICAgaWYgKGlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nh
c2UpOwotICAgIHJldHVybiBtX2xpc3QubGFzdCgpLnN0dWJSb3V0aW5lKCktPmNvZGUoKS5jb2Rl
KCk7CisgICAgLy8gVGhpcyBtZXRob2Qgd2lsbCBhZGQgdGhlIG9yaWdpbmFsQ2FzZXNUb0FkZCB0
byB0aGUgbGlzdCBvbmUgYXQgYSB0aW1lIHdoaWxlIHByZXNlcnZpbmcgdGhlCisgICAgLy8gaW52
YXJpYW50czoKKyAgICAvLyAtIElmIGEgbmV3bHkgYWRkZWQgY2FzZSBjYW5SZXBsYWNlKCkgYW55
IGV4aXN0aW5nIGNhc2UsIHRoZW4gdGhlIGV4aXN0aW5nIGNhc2UgaXMgcmVtb3ZlZCBiZWZvcmUK
KyAgICAvLyAgIHRoZSBuZXcgY2FzZSBpcyBhZGRlZC4gUmVtb3ZhbCBkb2Vzbid0IGNoYW5nZSBv
cmRlciBvZiB0aGUgbGlzdC4gQW55IG51bWJlciBvZiBleGlzdGluZyBjYXNlcworICAgIC8vICAg
Y2FuIGJlIHJlbW92ZWQgdmlhIHRoZSBjYW5SZXBsYWNlKCkgcnVsZS4KKyAgICAvLyAtIENhc2Vz
IGluIHRoZSBsaXN0IGFsd2F5cyBhcHBlYXIgaW4gYXNjZW5kaW5nIG9yZGVyIG9mIHRpbWUgb2Yg
YWRkaXRpb24uIFRoZXJlZm9yZSwgaWYgeW91CisgICAgLy8gICBjYXNjYWRlIHRocm91Z2ggdGhl
IGNhc2VzIGluIHJldmVyc2Ugb3JkZXIsIHlvdSB3aWxsIGdldCB0aGUgbW9zdCByZWNlbnQgY2Fz
ZXMgZmlyc3QuCisgICAgLy8gLSBJZiB0aGlzIG1ldGhvZCBmYWlscyAocmV0dXJucyBudWxsLCBk
b2Vzbid0IGFkZCB0aGUgY2FzZXMpLCB0aGVuIGJvdGggdGhlIHByZXZpb3VzIGNhc2UgbGlzdAor
ICAgIC8vICAgYW5kIHRoZSBwcmV2aW91cyBzdHViIGFyZSBrZXB0IGludGFjdCBhbmQgdGhlIG5l
dyBjYXNlcyBhcmUgZGVzdHJveWVkLiBJdCdzIE9LIHRvIGF0dGVtcHQgdG8KKyAgICAvLyAgIGFk
ZCBtb3JlIHRoaW5ncyBhZnRlciBmYWlsdXJlLgorICAgIAorICAgIC8vIEZpcnN0LCB2ZXJpZnkg
dGhhdCB3ZSBjYW4gZ2VuZXJhdGUgY29kZSBmb3IgYWxsIG9mIHRoZSBuZXcgY2FzZXMgd2hpbGUg
ZWxpbWluYXRpbmcgYW55IG9mIHRoZQorICAgIC8vIG5ldyBjYXNlcyB0aGF0IHJlcGxhY2UgZWFj
aCBvdGhlci4KKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+PiBjYXNlc1Rv
QWRkOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvcmlnaW5hbENhc2VzVG9BZGQuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IG15Q2FzZSA9
IHN0ZDo6bW92ZShvcmlnaW5hbENhc2VzVG9BZGRbaV0pOworCisgICAgICAgIC8vIEFkZCBpdCBv
bmx5IGlmIGl0IGlzIG5vdCByZXBsYWNlZCBieSB0aGUgc3Vic2VxdWVudCBjYXNlcyBpbiB0aGUg
bGlzdC4KKyAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGogPSBpICsgMTsgaiA8IG9yaWdpbmFsQ2FzZXNUb0FkZC5zaXplKCk7ICsraikgeworICAgICAg
ICAgICAgaWYgKG9yaWdpbmFsQ2FzZXNUb0FkZFtqXS0+Y2FuUmVwbGFjZSgqbXlDYXNlKSkgewor
ICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChmb3VuZCkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgaWYgKG15Q2FzZS0+ZG9lc0NhbGxzKCkgJiYg
c3R1YkluZm8ucGF0Y2guc3BpbGxNb2RlID09IE5lZWRUb1NwaWxsKQorICAgICAgICAgICAgcmV0
dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOworCisgICAgICAgIGNhc2VzVG9BZGQuYXBwZW5k
KHN0ZDo6bW92ZShteUNhc2UpKTsKKyAgICB9CisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ZGF0YUxvZygiY2FzZXNUb0FkZDogIiwgbGlzdER1bXAoY2FzZXNUb0FkZCksICJcbiIpOworCisg
ICAgLy8gSWYgdGhlcmUgYXJlbid0IGFueSBjYXNlcyB0byBhZGQsIHRoZW4gZmFpbCBvbiB0aGUg
Z3JvdW5kcyB0aGF0IHRoZXJlJ3Mgbm8gcG9pbnQgdG8gZ2VuZXJhdGluZyBhCisgICAgLy8gbmV3
IHN0dWIgdGhhdCB3aWxsIGJlIGlkZW50aWNhbCB0byB0aGUgb2xkIG9uZS4gUmV0dXJuaW5nIG51
bGwgc2hvdWxkIHRlbGwgdGhlIGNhbGxlciB0byBqdXN0CisgICAgLy8ga2VlcCBkb2luZyB3aGF0
IHRoZXkgd2VyZSBkb2luZyBiZWZvcmUuCisgICAgaWYgKGNhc2VzVG9BZGQuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7CisKKyAgICAvLyBOb3cgY29u
c3RydWN0IHRoZSBsaXN0IG9mIGNhc2VzIGFzIHRoZXkgc2hvdWxkIGFwcGVhciBpZiB3ZSBhcmUg
c3VjY2Vzc2Z1bC4gVGhpcyBtZWFucyBwdXR0aW5nCisgICAgLy8gYWxsIG9mIHRoZSBwcmV2aW91
cyBjYXNlcyBpbiB0aGlzIGxpc3QgaW4gb3JkZXIgYnV0IGV4Y2x1ZGluZyB0aG9zZSB0aGF0IGNh
biBiZSByZXBsYWNlZCwgYW5kCisgICAgLy8gdGhlbiBhZGRpbmcgdGhlIG5ldyBjYXNlcy4KKyAg
ICBMaXN0VHlwZSBuZXdDYXNlczsKKyAgICBmb3IgKGF1dG8mIG9sZENhc2UgOiBtX2xpc3QpIHsK
KyAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICBmb3IgKGF1dG8mIGNhc2VUb0Fk
ZCA6IGNhc2VzVG9BZGQpIHsKKyAgICAgICAgICAgIGlmIChjYXNlVG9BZGQtPmNhblJlcGxhY2Uo
Km9sZENhc2UpKSB7CisgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghZm91bmQp
CisgICAgICAgICAgICBuZXdDYXNlcy5hcHBlbmQob2xkQ2FzZS0+Y2xvbmUoKSk7CisgICAgfQor
ICAgIGZvciAoYXV0byYgY2FzZVRvQWRkIDogY2FzZXNUb0FkZCkKKyAgICAgICAgbmV3Q2FzZXMu
YXBwZW5kKHN0ZDo6bW92ZShjYXNlVG9BZGQpKTsKKworICAgIGlmICh2ZXJib3NlKQorICAgICAg
ICBkYXRhTG9nKCJuZXdDYXNlczogIiwgbGlzdER1bXAobmV3Q2FzZXMpLCAiXG4iKTsKKworICAg
IGlmIChuZXdDYXNlcy5zaXplKCkgPiBPcHRpb25zOjptYXhBY2Nlc3NWYXJpYW50TGlzdFNpemUo
KSkgeworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIlRvbyBtYW55
IGNhc2VzLlxuIik7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKKyAg
ICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVzdWx0ID0gcmVnZW5lcmF0ZSh2bSwg
Y29kZUJsb2NrLCBzdHViSW5mbywgaWRlbnQsIG5ld0Nhc2VzKTsKKyAgICBpZiAoIXJlc3VsdCkK
KyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOworCisgICAgbV9saXN0ID0g
c3RkOjptb3ZlKG5ld0Nhc2VzKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFBvbHlt
b3JwaGljR2V0QnlJZExpc3Q6OmFkZEFjY2Vzcyhjb25zdCBHZXRCeUlkQWNjZXNzJiBhY2Nlc3Mp
CitNYWNyb0Fzc2VtYmxlckNvZGVQdHIgUG9seW1vcnBoaWNBY2Nlc3M6OnJlZ2VuZXJhdGVXaXRo
Q2FzZSgKKyAgICBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8sIGNvbnN0IElkZW50aWZpZXImIGlkZW50LAorICAgIHN0ZDo6dW5pcXVlX3B0
cjxBY2Nlc3NDYXNlPiBuZXdBY2Nlc3MpCiB7Ci0gICAgQVNTRVJUKCFpc0Z1bGwoKSk7Ci0gICAg
Ly8gTWFrZSBzdXJlIHRoYXQgdGhlIHJlc2l6aW5nIG9wdGltaXplcyBmb3Igc3BhY2UsIG5vdCB0
aW1lLgotICAgIG1fbGlzdC5yZXNpemVUb0ZpdChtX2xpc3Quc2l6ZSgpICsgMSk7Ci0gICAgbV9s
aXN0Lmxhc3QoKSA9IGFjY2VzczsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nh
c2U+PiBuZXdBY2Nlc3NlczsKKyAgICBuZXdBY2Nlc3Nlcy5hcHBlbmQoc3RkOjptb3ZlKG5ld0Fj
Y2VzcykpOworICAgIHJldHVybiByZWdlbmVyYXRlV2l0aENhc2VzKHZtLCBjb2RlQmxvY2ssIHN0
dWJJbmZvLCBpZGVudCwgc3RkOjptb3ZlKG5ld0FjY2Vzc2VzKSk7CiB9CiAKLWJvb2wgUG9seW1v
cnBoaWNHZXRCeUlkTGlzdDo6aXNGdWxsKCkgY29uc3QKK2Jvb2wgUG9seW1vcnBoaWNBY2Nlc3M6
OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0CiB7Ci0gICAgQVNTRVJUKHNpemUoKSA8PSBQT0xZTU9S
UEhJQ19MSVNUX0NBQ0hFX1NJWkUpOwotICAgIHJldHVybiBzaXplKCkgPT0gUE9MWU1PUlBISUNf
TElTVF9DQUNIRV9TSVpFOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplKCk7ICsr
aSkgeworICAgICAgICBpZiAoIWF0KGkpLnZpc2l0V2Vhayh2bSkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFBvbHltb3JwaGlj
R2V0QnlJZExpc3Q6OmlzQWxtb3N0RnVsbCgpIGNvbnN0Cit2b2lkIFBvbHltb3JwaGljQWNjZXNz
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKHNpemUoKSA8PSBQ
T0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpOwotICAgIHJldHVybiBzaXplKCkgPj0gUE9MWU1P
UlBISUNfTElTVF9DQUNIRV9TSVpFIC0gMTsKKyAgICBvdXQucHJpbnQoUmF3UG9pbnRlcih0aGlz
KSwgIjpbIik7CisgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgIGZvciAoYXV0byYgZW50cnkg
OiBtX2xpc3QpCisgICAgICAgIG91dC5wcmludChjb21tYSwgKmVudHJ5KTsKKyAgICBvdXQucHJp
bnQoIl0iKTsKIH0KIAotYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpkaWRTZWxmUGF0Y2hp
bmcoKSBjb25zdAorTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIFBvbHltb3JwaGljQWNjZXNzOjpyZWdl
bmVyYXRlKAorICAgIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbywgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsCisgICAgUG9seW1vcnBoaWNB
Y2Nlc3M6Okxpc3RUeXBlJiBjYXNlcykKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXplKCk7
IGktLTspIHsKLSAgICAgICAgaWYgKGF0KGkpLnR5cGUoKSA9PSBHZXRCeUlkQWNjZXNzOjpTaW1w
bGVJbmxpbmUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAodmVyYm9zZSkKKyAg
ICAgICAgZGF0YUxvZygiR2VuZXJhdGluZyBjb2RlIGZvciBjYXNlczogIiwgbGlzdER1bXAoY2Fz
ZXMpLCAiXG4iKTsKKyAgICAKKyAgICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUgc3RhdGU7CisKKyAg
ICBzdGF0ZS5hY2Nlc3MgPSB0aGlzOworICAgIHN0YXRlLnN0dWJJbmZvID0gJnN0dWJJbmZvOwor
ICAgIHN0YXRlLmlkZW50ID0gJmlkZW50OworICAgIAorICAgIHN0YXRlLmJhc2VHUFIgPSBzdGF0
aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmJhc2VHUFIpOworICAgIHN0YXRlLnZhbHVl
UmVncyA9IEpTVmFsdWVSZWdzKAorI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIHN0YXRp
Y19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVUYWdHUFIpLAorI2VuZGlmCisgICAg
ICAgIHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVHUFIpKTsKKworICAg
IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1YkluZm8ucGF0Y2gudXNlZFJl
Z2lzdGVycyk7CisgICAgc3RhdGUuYWxsb2NhdG9yID0gJmFsbG9jYXRvcjsKKyAgICBhbGxvY2F0
b3IubG9jayhzdGF0ZS5iYXNlR1BSKTsKKyAgICBhbGxvY2F0b3IubG9jayhzdGF0ZS52YWx1ZVJl
Z3MpOworCisgICAgc3RhdGUuc2NyYXRjaEdQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hH
UFIoKTsKKyAgICAKKyAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSwgY29kZUJsb2NrKTsKKyAgICBz
dGF0ZS5qaXQgPSAmaml0OworCisgICAgc3RhdGUubnVtYmVyT2ZQYWRkaW5nQnl0ZXMgPSBhbGxv
Y2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0KTsKKworICAgIGJvb2wg
YWxsR3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2sgPSB0cnVlOworICAgIGZvciAoYXV0byYgZW50cnkg
OiBjYXNlcykKKyAgICAgICAgYWxsR3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2sgJj0gZW50cnktPmd1
YXJkZWRCeVN0cnVjdHVyZUNoZWNrKCk7CisKKyAgICBpZiAoY2FzZXMuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIC8vIFRoaXMgaXMgc3VwZXIgdW5saWtlbHksIGJ1dCB3ZSBtYWtlIGl0IGxlZ2FsIGFu
eXdheS4KKyAgICAgICAgc3RhdGUuZmFpbEFuZFJlcGF0Y2guYXBwZW5kKGppdC5qdW1wKCkpOwor
ICAgIH0gZWxzZSBpZiAoIWFsbEd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrIHx8IGNhc2VzLnNpemUo
KSA9PSAxKSB7CisgICAgICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgcHJveGllcyBpbiB0aGUgbGlz
dCwgd2UgY2Fubm90IGp1c3QgdXNlIGEgYmluYXJ5IHN3aXRjaCBvdmVyIHRoZSBzdHJ1Y3R1cmUu
CisgICAgICAgIC8vIFdlIG5lZWQgdG8gcmVzb3J0IHRvIGEgY2FzY2FkZS4gQSBjYXNjYWRlIGFs
c28gaGFwcGVucyB0byBiZSBvcHRpbWFsIGlmIHdlIG9ubHkgaGF2ZSBqdXN0CisgICAgICAgIC8v
IG9uZSBjYXNlLgorICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGZhbGxUaHJvdWdoOwor
CisgICAgICAgIC8vIENhc2NhZGUgdGhyb3VnaCB0aGUgbGlzdCwgcHJlZmVycmluZyBuZXdlciBl
bnRyaWVzLgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjYXNlcy5zaXplKCk7IGktLTspIHsK
KyAgICAgICAgICAgIGZhbGxUaHJvdWdoLmxpbmsoJmppdCk7CisgICAgICAgICAgICBjYXNlc1tp
XS0+Z2VuZXJhdGVXaXRoR3VhcmQoc3RhdGUsIGZhbGxUaHJvdWdoKTsKKyAgICAgICAgfQorICAg
ICAgICBzdGF0ZS5mYWlsQW5kUmVwYXRjaC5hcHBlbmQoZmFsbFRocm91Z2gpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGppdC5sb2FkMzIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3Moc3RhdGUuYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAgICAg
ICAgIHN0YXRlLnNjcmF0Y2hHUFIpOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPGludDY0X3Q+
IGNhc2VWYWx1ZXMoY2FzZXMuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGNhc2VzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgY2FzZVZhbHVlc1tpXSA9IGJpdHdp
c2VfY2FzdDxpbnQzMl90PihjYXNlc1tpXS0+c3RydWN0dXJlKCktPmlkKCkpOworICAgICAgICAK
KyAgICAgICAgQmluYXJ5U3dpdGNoIGJpbmFyeVN3aXRjaChzdGF0ZS5zY3JhdGNoR1BSLCBjYXNl
VmFsdWVzLCBCaW5hcnlTd2l0Y2g6OkludDMyKTsKKyAgICAgICAgd2hpbGUgKGJpbmFyeVN3aXRj
aC5hZHZhbmNlKGppdCkpCisgICAgICAgICAgICBjYXNlc1tiaW5hcnlTd2l0Y2guY2FzZUluZGV4
KCldLT5nZW5lcmF0ZShzdGF0ZSk7CisgICAgICAgIHN0YXRlLmZhaWxBbmRSZXBhdGNoLmFwcGVu
ZChiaW5hcnlTd2l0Y2guZmFsbFRocm91Z2goKSk7CisgICAgfQorCisgICAgc3RhdGUuZmFpbEFu
ZElnbm9yZS5saW5rKCZqaXQpOworCisgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGlubGluZSBj
YWNoZSBvcHRpbWl6YXRpb24gY29kZSBrbm93cyB0aGF0IHdlIGFyZSB0YWtpbmcgc2xvdyBwYXRo
IGJlY2F1c2UKKyAgICAvLyBvZiBzb21ldGhpbmcgdGhhdCBpc24ndCBwYXRjaGFibGUuICJzZWVu
IiBiZWluZyBmYWxzZSBtZWFucyB0aGF0IHdlIGJ5cGFzcyBwYXRjaGluZy4gVGhpcyBpcworICAg
IC8vIHByZXR0eSBncm9zcyBidXQgaXQgbWVhbnMgdGhhdCB3ZSBkb24ndCBuZWVkIHRvIGhhdmUg
dHdvIHNsb3cgcGF0aCBlbnRyeXBvaW50cyAtIG9uZSBmb3IKKyAgICAvLyBwYXRjaGluZyBhbmQg
b25lIGZvciBub3JtYWwgc2xvdyBzdHVmZi4KKyAgICBqaXQuc3RvcmU4KENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKGZhbHNlKSwgJnN0dWJJbmZvLnNlZW4pOworCisgICAgQ0NhbGxIZWxwZXJz
OjpKdW1wTGlzdCBmYWlsdXJlOworICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMo
KSkgeworICAgICAgICBzdGF0ZS5mYWlsQW5kUmVwYXRjaC5saW5rKCZqaXQpOworICAgICAgICBz
dGF0ZS5yZXN0b3JlU2NyYXRjaCgpOworICAgIH0gZWxzZQorICAgICAgICBmYWlsdXJlID0gc3Rh
dGUuZmFpbEFuZFJlcGF0Y2g7CisgICAgZmFpbHVyZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisKKyAg
ICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIodm0sIGppdCwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlv
bkNhbkZhaWwpOworICAgIGlmIChsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpIHsKKyAg
ICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCJEaWQgZmFpbCB0byBhbGxv
Y2F0ZS5cbiIpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7CiAgICAg
fQotICAgIHJldHVybiBmYWxzZTsKKworICAgIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJl
bCA9CisgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0
dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSk7CisgICAgICAgIAorICAgIGxpbmtCdWZmZXIu
bGluayhzdGF0ZS5zdWNjZXNzLCBzdWNjZXNzTGFiZWwpOworCisgICAgbGlua0J1ZmZlci5saW5r
KAorICAgICAgICBmYWlsdXJlLAorICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
bGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7CisgICAg
CisgICAgZm9yIChhdXRvIGNhbGxiYWNrIDogc3RhdGUuY2FsbGJhY2tzKQorICAgICAgICBjYWxs
YmFjayhsaW5rQnVmZmVyKTsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZSA9
IEZJTkFMSVpFX0NPREVfRk9SKAorICAgICAgICBjb2RlQmxvY2ssIGxpbmtCdWZmZXIsCisgICAg
ICAgICgiJXMiLCB0b0NTdHJpbmcoIkFjY2VzcyBzdHViIGZvciAiLCAqY29kZUJsb2NrLCAiICIs
IHN0dWJJbmZvLmNvZGVPcmlnaW4sICIgd2l0aCByZXR1cm4gcG9pbnQgIiwgc3VjY2Vzc0xhYmVs
LCAiOiAiLCBsaXN0RHVtcChjYXNlcykpLmRhdGEoKSkpOworCisgICAgYm9vbCBkb2VzQ2FsbHMg
PSBmYWxzZTsKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogY2FzZXMpCisgICAgICAgIGRvZXNDYWxs
cyB8PSBlbnRyeS0+ZG9lc0NhbGxzKCk7CisgICAgCisgICAgbV9zdHViUm91dGluZSA9IGNyZWF0
ZUpJVFN0dWJSb3V0aW5lKGNvZGUsIHZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBk
b2VzQ2FsbHMpOworICAgIG1fd2F0Y2hwb2ludHMgPSBzdGQ6Om1vdmUoc3RhdGUud2F0Y2hwb2lu
dHMpOworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJSZXR1cm5pbmc6ICIsIGNv
ZGUuY29kZSgpLCAiXG4iKTsKKyAgICByZXR1cm4gY29kZS5jb2RlKCk7CiB9CiAKLWJvb2wgUG9s
eW1vcnBoaWNHZXRCeUlkTGlzdDo6dmlzaXRXZWFrKFZNJiB2bSkgY29uc3QKK30gLy8gbmFtZXNw
YWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKwordm9p
ZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEFjY2Vzc0Nhc2U6OkFjY2Vzc1R5cGUg
dHlwZSkKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXplKCk7IGktLTspIHsKLSAgICAgICAg
aWYgKCFhdChpKS52aXNpdFdlYWsodm0pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgQWNjZXNzQ2FzZTo6TG9hZDoKKyAgICAgICAgb3V0
LnByaW50KCJMb2FkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OlRy
YW5zaXRpb246CisgICAgICAgIG91dC5wcmludCgiVHJhbnNpdGlvbiIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpSZXBsYWNlOgorICAgICAgICBvdXQucHJpbnQoIlJl
cGxhY2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6TWlzczoKKyAg
ICAgICAgb3V0LnByaW50KCJNaXNzIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vz
c0Nhc2U6OkdldHRlcjoKKyAgICAgICAgb3V0LnByaW50KCJHZXR0ZXIiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6U2V0dGVyOgorICAgICAgICBvdXQucHJpbnQoIlNl
dHRlciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpDdXN0b21HZXR0
ZXI6CisgICAgICAgIG91dC5wcmludCgiQ3VzdG9tR2V0dGVyIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkN1c3RvbVNldHRlcjoKKyAgICAgICAgb3V0LnByaW50KCJD
dXN0b21TZXR0ZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5I
aXQ6CisgICAgICAgIG91dC5wcmludCgiSW5IaXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgQWNjZXNzQ2FzZTo6SW5NaXNzOgorICAgICAgICBvdXQucHJpbnQoIkluTWlzcyIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpBcnJheUxlbmd0aDoKKyAgICAgICAg
b3V0LnByaW50KCJBcnJheUxlbmd0aCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nl
c3NDYXNlOjpTdHJpbmdMZW5ndGg6CisgICAgICAgIG91dC5wcmludCgiU3RyaW5nTGVuZ3RoIik7
CisgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgcmV0dXJuIHRydWU7CisKKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi19IC8vIG5hbWVzcGFjZSBKU0MKK30gLy8gbmFt
ZXNwYWNlIFdURgogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgJKHJldmlzaW9u
IDE4OTMyNCkJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGlj
R2V0QnlJZExpc3QuaDoxODkzMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seW1vcnBoaWNBY2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IFBvbHltb3JwaGljR2V0QnlJZExpc3RfaAorI2RlZmluZSBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0
X2gKKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCisjaW5jbHVk
ZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dC5oIgorI2luY2x1ZGUgIk9wY29kZS5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVCbG9jazsK
K3N0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbzsKKworY2xhc3MgR2V0QnlJZEFjY2VzcyB7CitwdWJs
aWM6CisgICAgZW51bSBBY2Nlc3NUeXBlIHsKKyAgICAgICAgSW52YWxpZCwKKyAgICAgICAgU2lt
cGxlSW5saW5lLCAvLyBUaGlzIGlzIHRoZSBwYXRjaGVkIGlubGluZSBhY2Nlc3MuCisgICAgICAg
IFNpbXBsZVN0dWIsIC8vIFRoaXMgaXMgYSBzdHViLgorICAgICAgICBXYXRjaGVkU3R1YiwKKyAg
ICAgICAgR2V0dGVyLAorICAgICAgICBDdXN0b21HZXR0ZXIsCisgICAgICAgIFNpbXBsZU1pc3Ms
CisgICAgfTsKKyAgICAKKyAgICBHZXRCeUlkQWNjZXNzKCkKKyAgICAgICAgOiBtX3R5cGUoSW52
YWxpZCkKKyAgICB7CisgICAgfQorICAgIAorICAgIEdldEJ5SWRBY2Nlc3MoCisgICAgICAgIFZN
JiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4s
IFN0cnVjdHVyZSosCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiA9
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCkpOworICAgIAorICAgIH5HZXRCeUlkQWNjZXNz
KCk7CisgICAgCisgICAgc3RhdGljIEdldEJ5SWRBY2Nlc3MgZnJvbVN0cnVjdHVyZVN0dWJJbmZv
KFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAgCisgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0
dXJuIG1fdHlwZSAhPSBJbnZhbGlkOyB9CisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJl
dHVybiAhaXNTZXQoKTsgfQorICAgIAorICAgIEFjY2Vzc1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdHlwZTsgfQorICAgIAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7IH0KKyAgICAKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25T
ZXQ7IH0KKyAgICAKKyAgICBKSVRTdHViUm91dGluZSogc3R1YlJvdXRpbmUoKSBjb25zdAorICAg
IHsKKyAgICAgICAgQVNTRVJUKGlzU2V0KCkpOworICAgICAgICByZXR1cm4gbV9zdHViUm91dGlu
ZS5nZXQoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBkb2VzQ2FsbHMoKSBjb25zdCB7IHJldHVy
biB0eXBlKCkgPT0gR2V0dGVyIHx8IHR5cGUoKSA9PSBDdXN0b21HZXR0ZXI7IH0KKyAgICAKKyAg
ICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFz
cyBDb2RlQmxvY2s7CisgICAgCisgICAgQWNjZXNzVHlwZSBtX3R5cGU7CisgICAgV3JpdGVCYXJy
aWVyPFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgbV9jb25kaXRpb25TZXQ7CisgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBtX3N0dWJSb3V0
aW5lOworfTsKKworY2xhc3MgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCB7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgLy8gRWl0aGVyIGNyZWF0ZXMgYSBuZXcgcG9s
eW1vcnBoaWMgZ2V0IGxpc3QsIG9yIHJldHVybnMgdGhlIG9uZSB0aGF0IGlzIGFscmVhZHkgaW4K
KyAgICAvLyBwbGFjZS4KKyAgICBzdGF0aWMgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogZnJvbShT
dHJ1Y3R1cmVTdHViSW5mbyYpOworICAgIAorICAgIH5Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0KCk7
CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN1cnJlbnRTbG93UGF0aFRhcmdldChT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pIGNvbnN0OworICAgIAorICAgIHZvaWQgYWRkQWNj
ZXNzKGNvbnN0IEdldEJ5SWRBY2Nlc3MmKTsKKyAgICAKKyAgICBib29sIGlzRW1wdHkoKSBjb25z
dCB7IHJldHVybiBtX2xpc3QuaXNFbXB0eSgpOyB9CisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbGlzdC5zaXplKCk7IH0KKyAgICBib29sIGlzRnVsbCgpIGNvbnN0OworICAg
IGJvb2wgaXNBbG1vc3RGdWxsKCkgY29uc3Q7IC8vIFRydWUgaWYgYWRkaW5nIGFuIGVsZW1lbnQg
d291bGQgbWFrZSBpc0Z1bGwoKSB0cnVlLgorICAgIGNvbnN0IEdldEJ5SWRBY2Nlc3MmIGF0KHVu
c2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdFtpXTsgfQorICAgIGNvbnN0IEdldEJ5SWRB
Y2Nlc3MmIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9saXN0W2ldOyB9
CisgICAgCisgICAgYm9vbCBkaWRTZWxmUGF0Y2hpbmcoKSBjb25zdDsgLy8gQXJlIGFueSBvZiB0
aGUgYWNjZXNzZXMgU2ltcGxlSW5saW5lPworICAgIAorICAgIGJvb2wgdmlzaXRXZWFrKFZNJikg
Y29uc3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKKyAgICAKKyAg
ICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAgCisgICAg
VmVjdG9yPEdldEJ5SWRBY2Nlc3MsIDI+IG1fbGlzdDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKworI2VuZGlmIC8vIFBvbHltb3JwaGljR2V0QnlJ
ZExpc3RfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBo
aWNBY2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seW1vcnBoaWNBY2Nlc3MuaAkod29ya2luZyBjb3B5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDgg
KzIzLDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgUG9seW1vcnBoaWNHZXRC
eUlkTGlzdF9oCi0jZGVmaW5lIFBvbHltb3JwaGljR2V0QnlJZExpc3RfaAorI2lmbmRlZiBQb2x5
bW9ycGhpY0FjY2Vzc19oCisjZGVmaW5lIFBvbHltb3JwaGljQWNjZXNzX2gKIAogI2lmIEVOQUJM
RShKSVQpCiAKQEAgLTM4LDk2ICszOCwyODQgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBD
b2RlQmxvY2s7CitjbGFzcyBQb2x5bW9ycGhpY0FjY2VzczsKK2NsYXNzIFdhdGNocG9pbnRzT25T
dHJ1Y3R1cmVTdHViSW5mbzsKIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbzsKIAotY2xhc3MgR2V0
QnlJZEFjY2VzcyB7CitzdHJ1Y3QgQWNjZXNzR2VuZXJhdGlvblN0YXRlOworCitjbGFzcyBBY2Nl
c3NDYXNlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBY2Nlc3NDYXNlKTsKKyAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBlbnVtIEFjY2Vzc1R5cGUgewotICAg
ICAgICBJbnZhbGlkLAotICAgICAgICBTaW1wbGVJbmxpbmUsIC8vIFRoaXMgaXMgdGhlIHBhdGNo
ZWQgaW5saW5lIGFjY2Vzcy4KLSAgICAgICAgU2ltcGxlU3R1YiwgLy8gVGhpcyBpcyBhIHN0dWIu
Ci0gICAgICAgIFdhdGNoZWRTdHViLAorICAgICAgICBMb2FkLAorICAgICAgICBUcmFuc2l0aW9u
LAorICAgICAgICBSZXBsYWNlLAorICAgICAgICBNaXNzLAogICAgICAgICBHZXR0ZXIsCisgICAg
ICAgIFNldHRlciwKICAgICAgICAgQ3VzdG9tR2V0dGVyLAotICAgICAgICBTaW1wbGVNaXNzLAor
ICAgICAgICBDdXN0b21TZXR0ZXIsCisgICAgICAgIEluSGl0LAorICAgICAgICBJbk1pc3MsCisg
ICAgICAgIEFycmF5TGVuZ3RoLAorICAgICAgICBTdHJpbmdMZW5ndGgKICAgICB9OwotICAgIAot
ICAgIEdldEJ5SWRBY2Nlc3MoKQotICAgICAgICA6IG1fdHlwZShJbnZhbGlkKQorCisgICAgc3Rh
dGljIGJvb2wgaXNHZXQoQWNjZXNzVHlwZSB0eXBlKQogICAgIHsKKyAgICAgICAgc3dpdGNoICh0
eXBlKSB7CisgICAgICAgIGNhc2UgVHJhbnNpdGlvbjoKKyAgICAgICAgY2FzZSBSZXBsYWNlOgor
ICAgICAgICBjYXNlIFNldHRlcjoKKyAgICAgICAgY2FzZSBDdXN0b21TZXR0ZXI6CisgICAgICAg
IGNhc2UgSW5IaXQ6CisgICAgICAgIGNhc2UgSW5NaXNzOgorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBjYXNlIExvYWQ6CisgICAgICAgIGNhc2UgTWlzczoKKyAgICAgICAgY2Fz
ZSBHZXR0ZXI6CisgICAgICAgIGNhc2UgQ3VzdG9tR2V0dGVyOgorICAgICAgICBjYXNlIEFycmF5
TGVuZ3RoOgorICAgICAgICBjYXNlIFN0cmluZ0xlbmd0aDoKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CiAgICAgfQotICAgIAotICAgIEdldEJ5SWRBY2Nlc3MoCi0gICAgICAg
IFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGlu
ZT4sIFN0cnVjdHVyZSosCisKKyAgICBzdGF0aWMgYm9vbCBpc1B1dChBY2Nlc3NUeXBlIHR5cGUp
CisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBMb2FkOgorICAg
ICAgICBjYXNlIE1pc3M6CisgICAgICAgIGNhc2UgR2V0dGVyOgorICAgICAgICBjYXNlIEN1c3Rv
bUdldHRlcjoKKyAgICAgICAgY2FzZSBJbkhpdDoKKyAgICAgICAgY2FzZSBJbk1pc3M6CisgICAg
ICAgIGNhc2UgQXJyYXlMZW5ndGg6CisgICAgICAgIGNhc2UgU3RyaW5nTGVuZ3RoOgorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIFRyYW5zaXRpb246CisgICAgICAgIGNh
c2UgUmVwbGFjZToKKyAgICAgICAgY2FzZSBTZXR0ZXI6CisgICAgICAgIGNhc2UgQ3VzdG9tU2V0
dGVyOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBz
dGF0aWMgYm9vbCBpc0luKEFjY2Vzc1R5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
dHlwZSkgeworICAgICAgICBjYXNlIExvYWQ6CisgICAgICAgIGNhc2UgTWlzczoKKyAgICAgICAg
Y2FzZSBHZXR0ZXI6CisgICAgICAgIGNhc2UgQ3VzdG9tR2V0dGVyOgorICAgICAgICBjYXNlIFRy
YW5zaXRpb246CisgICAgICAgIGNhc2UgUmVwbGFjZToKKyAgICAgICAgY2FzZSBTZXR0ZXI6Cisg
ICAgICAgIGNhc2UgQ3VzdG9tU2V0dGVyOgorICAgICAgICBjYXNlIEFycmF5TGVuZ3RoOgorICAg
ICAgICBjYXNlIFN0cmluZ0xlbmd0aDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgY2FzZSBJbkhpdDoKKyAgICAgICAgY2FzZSBJbk1pc3M6CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNj
ZXNzQ2FzZT4gZ2V0KAorICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUsIFBy
b3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmUqLAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpLAorICAgICAgICBib29s
IHZpYVByb3h5ID0gZmFsc2UsCisgICAgICAgIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQg
PSBudWxscHRyLAorICAgICAgICBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYyA9IG51bGxwdHIs
CisgICAgICAgIEpTT2JqZWN0KiBjdXN0b21TbG90QmFzZSA9IG51bGxwdHIpOworCisgICAgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXBsYWNlKAorICAgICAgICBWTSYsIEpT
Q2VsbCogb3duZXIsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQp
OworCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiB0cmFuc2l0aW9uKAor
ICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBTdHJ1
Y3R1cmUqIG5ld1N0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAogICAgICAgICBjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCgpKTsKKworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gc2V0dGVyKAor
ICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUsIFN0cnVjdHVyZSosIFByb3Bl
cnR5T2Zmc2V0LAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIFB1
dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jID0gbnVsbHB0ciwKKyAgICAgICAgSlNPYmplY3Qq
IGN1c3RvbVNsb3RCYXNlID0gbnVsbHB0cik7CisKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PEFjY2Vzc0Nhc2U+IGluKAorICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUs
IFN0cnVjdHVyZSogc3RydWN0dXJlLAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpKTsKKworICAgIHN0YXRpYyBz
dGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gZ2V0TGVuZ3RoKFZNJiwgSlNDZWxsKiBvd25lciwg
QWNjZXNzVHlwZSk7CiAgICAgCi0gICAgfkdldEJ5SWRBY2Nlc3MoKTsKLSAgICAKLSAgICBzdGF0
aWMgR2V0QnlJZEFjY2VzcyBmcm9tU3RydWN0dXJlU3R1YkluZm8oU3RydWN0dXJlU3R1YkluZm8m
KTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGZyb21TdHJ1Y3R1cmVT
dHViSW5mbyhWTSYsIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZVN0dWJJbmZvJik7CisKKyAgICB+
QWNjZXNzQ2FzZSgpOwogICAgIAotICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX3R5
cGUgIT0gSW52YWxpZDsgfQotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlz
U2V0KCk7IH0KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gY2xvbmUoKSBjb25zdDsK
ICAgICAKICAgICBBY2Nlc3NUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQorICAg
IGJvb2wgdmlhUHJveHkoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+
dmlhUHJveHkgOiBmYWxzZTsgfQogICAgIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29u
c3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7IH0KLSAgICAKLSAgICBjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25k
aXRpb25TZXQ7IH0KLSAgICAKLSAgICBKSVRTdHViUm91dGluZSogc3R1YlJvdXRpbmUoKSBjb25z
dAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VS
VChpc1NldCgpKTsKLSAgICAgICAgcmV0dXJuIG1fc3R1YlJvdXRpbmUuZ2V0KCk7CisgICAgICAg
IGlmIChtX3R5cGUgPT0gVHJhbnNpdGlvbikKKyAgICAgICAgICAgIHJldHVybiBtX3N0cnVjdHVy
ZS0+cHJldmlvdXNJRCgpOworICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7CisgICAg
fQorICAgIGJvb2wgZ3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2soKSBjb25zdDsKKworICAgIFN0cnVj
dHVyZSogbmV3U3RydWN0dXJlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3R5cGUg
PT0gVHJhbnNpdGlvbik7CisgICAgICAgIHJldHVybiBtX3N0cnVjdHVyZS5nZXQoKTsKICAgICB9
CiAgICAgCi0gICAgYm9vbCBkb2VzQ2FsbHMoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gR2V0
dGVyIHx8IHR5cGUoKSA9PSBDdXN0b21HZXR0ZXI7IH0KKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQor
CisgICAgV2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPmFkZGl0aW9uYWxTZXQuZ2V0KCkgOiBu
dWxscHRyOworICAgIH0KKworICAgIEpTT2JqZWN0KiBjdXN0b21TbG90QmFzZSgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPmN1c3RvbVNsb3RC
YXNlLmdldCgpIDogbnVsbHB0cjsKKyAgICB9CisKKyAgICBKU09iamVjdCogYWx0ZXJuYXRlQmFz
ZSgpIGNvbnN0OwogICAgIAotICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgY29uc3Q7CisgICAgYm9v
bCBkb2VzQ2FsbHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKCkpIHsKKyAg
ICAgICAgY2FzZSBHZXR0ZXI6CisgICAgICAgIGNhc2UgU2V0dGVyOgorICAgICAgICBjYXNlIEN1
c3RvbUdldHRlcjoKKyAgICAgICAgY2FzZSBDdXN0b21TZXR0ZXI6CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKCkgY29uc3QK
KyAgICB7CisgICAgICAgIGlmICghbV9yYXJlRGF0YSkKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICByZXR1cm4gbV9yYXJlRGF0YS0+Y2FsbExpbmtJbmZvLmdldCgpOworICAg
IH0KKworICAgIC8vIElmIHRoaXMgbWV0aG9kIHJldHVybnMgdHJ1ZSwgdGhlbiBpdCdzIGEgZ29v
ZCBpZGVhIHRvIHJlbW92ZSAnb3RoZXInIGZyb20gdGhlIGFjY2VzcyBvbmNlICd0aGlzJworICAg
IC8vIGlzIGFkZGVkLiBUaGlzIG1ldGhvZCBhc3N1bWVzIHRoYXQgaW4gY2FzZSBvZiBjb250cmFk
aWN0aW9ucywgJ3RoaXMnIHJlcHJlc2VudHMgYSBuZXdlciwgYW5kIHNvCisgICAgLy8gbW9yZSB1
c2VmdWwsIHRydXRoLiBUaGlzIG1ldGhvZCBjYW4gYmUgY29uc2VydmF0aXZlOyBpdCB3aWxsIHJl
dHVybiBmYWxzZSB3aGVuIGl0IGRvdWJ0LgorICAgIGJvb2wgY2FuUmVwbGFjZShjb25zdCBBY2Nl
c3NDYXNlJiBvdGhlcik7CiAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7
CisgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7CisgICAgZnJpZW5k
IGNsYXNzIFBvbHltb3JwaGljQWNjZXNzOworCisgICAgQWNjZXNzQ2FzZSgpOworCisgICAgYm9v
bCB2aXNpdFdlYWsoVk0mKSBjb25zdDsKKworICAgIC8vIEZhbGwgdGhyb3VnaCBvbiBzdWNjZXNz
LiBUd28ga2luZHMgb2YgZmFpbHVyZXMgYXJlIHN1cHBvcnRlZDogZmFsbC10aHJvdWdoLCB3aGlj
aCBtZWFucyB0aGF0IHdlCisgICAgLy8gc2hvdWxkIHRyeSBhIGRpZmZlcmVudCBjYXNlOyBhbmQg
ZmFpbHVyZSwgd2hpY2ggbWVhbnMgdGhhdCB0aGlzIHdhcyB0aGUgcmlnaHQgY2FzZSBidXQgaXQg
bmVlZHMKKyAgICAvLyBoZWxwIGZyb20gdGhlIHNsb3cgcGF0aC4KKyAgICB2b2lkIGdlbmVyYXRl
V2l0aEd1YXJkKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCYgZmFsbFRocm91Z2gpOworCisgICAgLy8gRmFsbCB0aHJvdWdoIG9uIHN1Y2Nlc3MsIGFkZCBh
IGp1bXAgdG8gdGhlIGZhaWx1cmUgbGlzdCBvbiBmYWlsdXJlLgorICAgIHZvaWQgZ2VuZXJhdGUo
QWNjZXNzR2VuZXJhdGlvblN0YXRlJik7CiAgICAgCiAgICAgQWNjZXNzVHlwZSBtX3R5cGU7Cisg
ICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7CisKKyAgICAvLyBVc3VhbGx5IHRoaXMgaXMgdGhl
IHN0cnVjdHVyZSB0aGF0IHdlIGV4cGVjdCB0aGUgYmFzZSBvYmplY3QgdG8gaGF2ZS4gQnV0LCB0
aGlzIGlzIHRoZSAqbmV3KgorICAgIC8vIHN0cnVjdHVyZSBmb3IgYSB0cmFuc2l0aW9uIGFuZCB3
ZSByZWx5IG9uIHRoZSBmYWN0IHRoYXQgaXQgaGFzIGEgc3Ryb25nIHJlZmVyZW5jZSB0byB0aGUg
b2xkCisgICAgLy8gc3RydWN0dXJlLiBGb3IgcHJveGllcywgdGhpcyBpcyB0aGUgc3RydWN0dXJl
IG9mIHRoZSBvYmplY3QgYmVoaW5kIHRoZSBwcm94eS4KICAgICBXcml0ZUJhcnJpZXI8U3RydWN0
dXJlPiBtX3N0cnVjdHVyZTsKKwogICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29u
ZGl0aW9uU2V0OwotICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gbV9zdHViUm91dGluZTsKKwor
ICAgIGNsYXNzIFJhcmVEYXRhIHsKKyAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Cisg
ICAgcHVibGljOgorICAgICAgICBSYXJlRGF0YSgpCisgICAgICAgICAgICA6IHZpYVByb3h5KGZh
bHNlKQorICAgICAgICB7CisgICAgICAgICAgICBjdXN0b21BY2Nlc3Nvci5vcGFxdWUgPSBudWxs
cHRyOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIHZpYVByb3h5OworICAgICAg
ICBSZWZQdHI8V2F0Y2hwb2ludFNldD4gYWRkaXRpb25hbFNldDsKKyAgICAgICAgc3RkOjp1bmlx
dWVfcHRyPENhbGxMaW5rSW5mbz4gY2FsbExpbmtJbmZvOworICAgICAgICB1bmlvbiB7CisgICAg
ICAgICAgICBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYyBnZXR0ZXI7CisgICAgICAgICAgICBQ
dXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyBzZXR0ZXI7CisgICAgICAgICAgICB2b2lkKiBv
cGFxdWU7CisgICAgICAgIH0gY3VzdG9tQWNjZXNzb3I7CisgICAgICAgIFdyaXRlQmFycmllcjxK
U09iamVjdD4gY3VzdG9tU2xvdEJhc2U7CisgICAgfTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxS
YXJlRGF0YT4gbV9yYXJlRGF0YTsKIH07CiAKLWNsYXNzIFBvbHltb3JwaGljR2V0QnlJZExpc3Qg
eworY2xhc3MgUG9seW1vcnBoaWNBY2Nlc3MgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBv
bHltb3JwaGljQWNjZXNzKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoK
LSAgICAvLyBFaXRoZXIgY3JlYXRlcyBhIG5ldyBwb2x5bW9ycGhpYyBnZXQgbGlzdCwgb3IgcmV0
dXJucyB0aGUgb25lIHRoYXQgaXMgYWxyZWFkeSBpbgotICAgIC8vIHBsYWNlLgotICAgIHN0YXRp
YyBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBmcm9tKFN0cnVjdHVyZVN0dWJJbmZvJik7Ci0gICAg
Ci0gICAgflBvbHltb3JwaGljR2V0QnlJZExpc3QoKTsKLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgY3VycmVudFNsb3dQYXRoVGFyZ2V0KFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bykgY29uc3Q7Ci0gICAgCi0gICAgdm9pZCBhZGRBY2Nlc3MoY29uc3QgR2V0QnlJZEFjY2VzcyYp
OworICAgIFBvbHltb3JwaGljQWNjZXNzKCk7CisgICAgflBvbHltb3JwaGljQWNjZXNzKCk7CisK
KyAgICAvLyBUaGlzIG1heSByZXR1cm4gbnVsbCwgaW4gd2hpY2ggY2FzZSB0aGUgb2xkIHN0dWIg
cm91dGluZSBpcyBsZWZ0IGludGFjdC4gVGhpcyBtZXRob2Qgd2lsbCBkbyB5b3UKKyAgICAvLyBh
IHNvbGlkIGFuZCBudWxsLWNoZWNrIHRoZSBBY2Nlc3NDYXNlLCBzbyB0aGF0IHlvdSBjYW4gZG8g
dGhpbmdzIGxpa2U6CisgICAgLy8KKyAgICAvLyBjb2RlUHRyID0gYWNjZXNzLT5yZWdlbmVyYXRl
V2l0aENhc2UoLi4uLCBBY2Nlc3NDYXNlOjpnZXQoLi4uKSkKKyAgICAvLworICAgIC8vIElmIEFj
Y2Vzc0Nhc2U6OmdldCgpIHJldHVybnMgbnVsbHB0ciwgdGhlIGFib3ZlIGNhbGwgd2lsbCBzaW1w
bHkgcmV0dXJuIG51bGwuCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJlZ2VuZXJhdGVXaXRo
Q2FzZXMoCisgICAgICAgIFZNJiwgQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBjb25z
dCBJZGVudGlmaWVyJiwgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPj4pOworCisg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJlZ2VuZXJhdGVXaXRoQ2FzZSgKKyAgICAgICAgVk0m
LCBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIGNvbnN0IElkZW50aWZpZXImLCBzdGQ6
OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4pOwogICAgIAogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0
IHsgcmV0dXJuIG1fbGlzdC5pc0VtcHR5KCk7IH0KICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9saXN0LnNpemUoKTsgfQotICAgIGJvb2wgaXNGdWxsKCkgY29uc3Q7Ci0gICAg
Ym9vbCBpc0FsbW9zdEZ1bGwoKSBjb25zdDsgLy8gVHJ1ZSBpZiBhZGRpbmcgYW4gZWxlbWVudCB3
b3VsZCBtYWtlIGlzRnVsbCgpIHRydWUuCi0gICAgY29uc3QgR2V0QnlJZEFjY2VzcyYgYXQodW5z
aWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9saXN0W2ldOyB9Ci0gICAgY29uc3QgR2V0QnlJZEFj
Y2VzcyYgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2xpc3RbaV07IH0K
LSAgICAKLSAgICBib29sIGRpZFNlbGZQYXRjaGluZygpIGNvbnN0OyAvLyBBcmUgYW55IG9mIHRo
ZSBhY2Nlc3NlcyBTaW1wbGVJbmxpbmU/Ci0gICAgCisgICAgY29uc3QgQWNjZXNzQ2FzZSYgYXQo
dW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gKm1fbGlzdFtpXTsgfQorICAgIGNvbnN0IEFjY2Vz
c0Nhc2UmIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gKm1fbGlzdFtpXTsg
fQorCisgICAgLy8gSWYgdGhpcyByZXR1cm5zIGZhbHNlIHRoZW4gd2UgYXJlIHJlcXVlc3Rpbmcg
YSByZXNldCBvZiB0aGUgb3duaW5nIFN0cnVjdHVyZVN0dWJJbmZvLgogICAgIGJvb2wgdmlzaXRX
ZWFrKFZNJikgY29uc3Q7CiAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7
CisKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEFjY2Vzc0Nhc2U7CiAgICAgZnJpZW5kIGNs
YXNzIENvZGVCbG9jazsKKyAgICBmcmllbmQgc3RydWN0IEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTsK
ICAgICAKLSAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KFN0cnVjdHVyZVN0dWJJbmZvJik7Ci0g
ICAgCi0gICAgVmVjdG9yPEdldEJ5SWRBY2Nlc3MsIDI+IG1fbGlzdDsKKyAgICB0eXBlZGVmIFZl
Y3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4sIDI+IExpc3RUeXBlOworCisgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyIHJlZ2VuZXJhdGUoCisgICAgICAgIFZNJiwgQ29kZUJsb2NrKiwg
U3RydWN0dXJlU3R1YkluZm8mLCBjb25zdCBJZGVudGlmaWVyJiwgTGlzdFR5cGUmIGNhc2VzKTsK
KworICAgIExpc3RUeXBlIG1fbGlzdDsKKyAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IG1fc3R1
YlJvdXRpbmU7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHVi
SW5mbz4gbV93YXRjaHBvaW50czsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCituYW1lc3Bh
Y2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpBY2Nlc3ND
YXNlOjpBY2Nlc3NUeXBlKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKICNlbmRpZiAvLyBFTkFC
TEUoSklUKQogCi0jZW5kaWYgLy8gUG9seW1vcnBoaWNHZXRCeUlkTGlzdF9oCisjZW5kaWYgLy8g
UG9seW1vcnBoaWNBY2Nlc3NfaAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdC5o
CShyZXZpc2lvbiAxODk1MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9s
eW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTEyICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lm
bmRlZiBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3RfaAotI2RlZmluZSBQb2x5bW9ycGhp
Y0FjY2Vzc1N0cnVjdHVyZUxpc3RfaAotCi0jaW5jbHVkZSAiSklUU3R1YlJvdXRpbmUuaCIKLSNp
bmNsdWRlICJTdHJ1Y3R1cmUuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVDaGFpbi5oIgotCi0jZGVm
aW5lIFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSA4Ci0KLW5hbWVzcGFjZSBKU0MgewotCi0v
LyAqU2lnaCosIElmIHRoZSBKSVQgaXMgZW5hYmxlZCB3ZSBuZWVkIHRvIHRyYWNrIHRoZSBzdHVi
Um91bnRpbmUgKG9mIHR5cGUgQ29kZUxvY2F0aW9uTGFiZWwpLAotLy8gSWYgdGhlIEpJVCBpcyBu
b3QgaW4gdXNlIHdlIGRvbid0IGFjdHVhbGx5IG5lZWQgdGhlIHZhcmlhYmxlICh0aGF0IHNhaWQs
IGlmIHRoZSBKSVQgaXMgbm90IGluIHVzZSB3ZSBkb24ndAotLy8gY3VyZW50bHkgYWN0dWFsbHkg
dXNlIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdHMsIHdoaWNoIHdlIHNob3VsZCkuICBB
bnl3YXksIHRoaXMgc2VlbXMgbGlrZSB0aGUgYmVzdAotLy8gc29sdXRpb24gZm9yIG5vdyAtIHdp
bGwgbmVlZCB0byBzb21ldGhpbmcgc21hcnRlciBpZi93aGVuIHdlIGFjdHVhbGx5IHdhbnQgbWl4
ZWQtbW9kZSBvcGVyYXRpb24uCi0KLSNpZiBFTkFCTEUoSklUKQotLy8gU3RydWN0dXJlIHVzZWQg
Ynkgb3BfZ2V0X2J5X2lkX3NlbGZfbGlzdCBhbmQgb3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3QgaW5z
dHJ1Y3Rpb24gdG8gaG9sZCBkYXRhIG9mZiB0aGUgbWFpbiBvcGNvZGUgc3RyZWFtLgotc3RydWN0
IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7Ci1wdWJsaWM6Ci0gICAgc3RydWN0IFBvbHltb3JwaGljU3R1YkluZm8gewotICAgICAg
ICBib29sIGlzRGlyZWN0IDogMTsKLSAgICAgICAgdW5zaWduZWQgY291bnQgOiAzMTsKLSAgICAg
ICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKLSAgICAgICAgV3JpdGVCYXJy
aWVyPFN0cnVjdHVyZT4gYmFzZTsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZUNoYWlu
PiBjaGFpbjsKLQotICAgICAgICBQb2x5bW9ycGhpY1N0dWJJbmZvKCkKLSAgICAgICAgewotICAg
ICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXQoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBQYXNzUmVm
UHRyPEpJVFN0dWJSb3V0aW5lPiBfc3R1YlJvdXRpbmUsIFN0cnVjdHVyZSogX2Jhc2UsIGJvb2wg
X2lzRGlyZWN0KQotICAgICAgICB7Ci0gICAgICAgICAgICBzdHViUm91dGluZSA9IF9zdHViUm91
dGluZTsKLSAgICAgICAgICAgIGJhc2Uuc2V0KHZtLCBvd25lciwgX2Jhc2UpOwotICAgICAgICAg
ICAgaXNEaXJlY3QgPSBfaXNEaXJlY3Q7Ci0gICAgICAgICAgICBjb3VudCA9IDA7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIHZvaWQgc2V0KFZNJiB2bSwgSlNDZWxsKiBvd25lciwgUGFz
c1JlZlB0cjxKSVRTdHViUm91dGluZT4gX3N0dWJSb3V0aW5lLCBTdHJ1Y3R1cmUqIF9iYXNlLCBT
dHJ1Y3R1cmVDaGFpbiogX2NoYWluLCBib29sIF9pc0RpcmVjdCwgdW5zaWduZWQgX2NvdW50KQot
ICAgICAgICB7Ci0gICAgICAgICAgICBzdHViUm91dGluZSA9IF9zdHViUm91dGluZTsKLSAgICAg
ICAgICAgIGJhc2Uuc2V0KHZtLCBvd25lciwgX2Jhc2UpOwotICAgICAgICAgICAgY2hhaW4uc2V0
KHZtLCBvd25lciwgX2NoYWluKTsKLSAgICAgICAgICAgIGlzRGlyZWN0ID0gX2lzRGlyZWN0Owot
ICAgICAgICAgICAgY291bnQgPSBfY291bnQ7Ci0gICAgICAgIH0KLSAgICB9IGxpc3RbUE9MWU1P
UlBISUNfTElTVF9DQUNIRV9TSVpFXTsKLSAgICAKLSAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVj
dHVyZUxpc3QoKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1
Y3R1cmVMaXN0KFZNJiB2bSwgSlNDZWxsKiBvd25lciwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGlu
ZT4gc3R1YlJvdXRpbmUsIFN0cnVjdHVyZSogZmlyc3RCYXNlLCBib29sIGlzRGlyZWN0KQotICAg
IHsKLSAgICAgICAgbGlzdFswXS5zZXQodm0sIG93bmVyLCBzdHViUm91dGluZSwgZmlyc3RCYXNl
LCBpc0RpcmVjdCk7Ci0gICAgfQotCi0gICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0
KFZNJiB2bSwgSlNDZWxsKiBvd25lciwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJv
dXRpbmUsIFN0cnVjdHVyZSogZmlyc3RCYXNlLCBTdHJ1Y3R1cmVDaGFpbiogZmlyc3RDaGFpbiwg
Ym9vbCBpc0RpcmVjdCwgdW5zaWduZWQgY291bnQpCi0gICAgewotICAgICAgICBsaXN0WzBdLnNl
dCh2bSwgb3duZXIsIHN0dWJSb3V0aW5lLCBmaXJzdEJhc2UsIGZpcnN0Q2hhaW4sIGlzRGlyZWN0
LCBjb3VudCk7Ci0gICAgfQotCi0gICAgYm9vbCB2aXNpdFdlYWsoaW50IGNvdW50KQotICAgIHsK
LSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBQ
b2x5bW9ycGhpY1N0dWJJbmZvJiBpbmZvID0gbGlzdFtpXTsKLSAgICAgICAgICAgIGlmICghaW5m
by5iYXNlKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChpbmZvLmJhc2UuZ2V0KCkpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmIChpbmZvLmNoYWluICYmICFIZWFw
Ojppc01hcmtlZChpbmZvLmNoYWluLmdldCgpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci19OwotCi0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNl
bmRpZiAvLyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3RfaAotCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJ
ZExpc3QuY3BwCShyZXZpc2lvbiAxODk1MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTU1
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBvbHltb3JwaGljR2V0QnlJZExp
c3QuaCIKLQotI2lmIEVOQUJMRShKSVQpCi0KLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNs
dWRlICJIZWFwLmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVy
ZVN0dWJJbmZvLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1HZXRCeUlkQWNjZXNzOjpHZXRCeUlk
QWNjZXNzKAotICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBQYXNz
UmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSwKLSAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkKLSAg
ICA6IG1fdHlwZSh0eXBlKQotICAgICwgbV9zdHJ1Y3R1cmUodm0sIG93bmVyLCBzdHJ1Y3R1cmUp
Ci0gICAgLCBtX2NvbmRpdGlvblNldChjb25kaXRpb25TZXQpCi0gICAgLCBtX3N0dWJSb3V0aW5l
KHN0dWJSb3V0aW5lKQotewotfQotCi1HZXRCeUlkQWNjZXNzOjp+R2V0QnlJZEFjY2VzcygpCi17
Ci19Ci0KLUdldEJ5SWRBY2Nlc3MgR2V0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZv
KFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgaW5pdGlhbFNsb3dQYXRoID0KLSAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSk7Ci0gICAg
Ci0gICAgR2V0QnlJZEFjY2VzcyByZXN1bHQ7Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NFUlQoc3R1
YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYpOwotICAgIAotICAgIHJl
c3VsdC5tX3R5cGUgPSBTaW1wbGVJbmxpbmU7Ci0gICAgcmVzdWx0Lm1fc3RydWN0dXJlLmNvcHlG
cm9tKHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZSk7Ci0gICAgcmVz
dWx0Lm1fc3R1YlJvdXRpbmUgPSBKSVRTdHViUm91dGluZTo6Y3JlYXRlU2VsZk1hbmFnZWRSb3V0
aW5lKGluaXRpYWxTbG93UGF0aCk7Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9v
bCBHZXRCeUlkQWNjZXNzOjp2aXNpdFdlYWsoVk0mIHZtKSBjb25zdAotewotICAgIGlmIChtX3N0
cnVjdHVyZSAmJiAhSGVhcDo6aXNNYXJrZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFtX2NvbmRpdGlvblNldC5hcmVTdGlsbExpdmUoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghbV9zdHViUm91dGluZS0+dmlzaXRXZWFrKHZt
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1Qb2x5bW9y
cGhpY0dldEJ5SWRMaXN0OjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbykKLXsKLSAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5z
ZXQpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBtX2xpc3QuYXBwZW5kKEdldEJ5SWRBY2Nl
c3M6OmZyb21TdHJ1Y3R1cmVTdHViSW5mbyhzdHViSW5mbykpOwotfQotCi1Qb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0KiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojpmcm9tKFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbykKLXsKLSAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0
X2J5X2lkX2xpc3QpCi0gICAgICAgIHJldHVybiBzdHViSW5mby51LmdldEJ5SWRMaXN0Lmxpc3Q7
Ci0gICAgCi0gICAgQVNTRVJUKAotICAgICAgICBzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vz
c19nZXRfYnlfaWRfc2VsZgotICAgICAgICB8fCBzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vz
c191bnNldCk7Ci0gICAgCi0gICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogcmVzdWx0ID0gbmV3
IFBvbHltb3JwaGljR2V0QnlJZExpc3Qoc3R1YkluZm8pOwotICAgIAotICAgIHN0dWJJbmZvLmlu
aXRHZXRCeUlkTGlzdChyZXN1bHQpOwotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVBv
bHltb3JwaGljR2V0QnlJZExpc3Q6On5Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0KCkgeyB9Ci0KLU1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpjdXJyZW50U2xvd1Bh
dGhUYXJnZXQoCi0gICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKSBjb25zdAotewotICAg
IGlmIChpc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKLSAg
ICByZXR1cm4gbV9saXN0Lmxhc3QoKS5zdHViUm91dGluZSgpLT5jb2RlKCkuY29kZSgpOwotfQot
Ci12b2lkIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmFkZEFjY2Vzcyhjb25zdCBHZXRCeUlkQWNj
ZXNzJiBhY2Nlc3MpCi17Ci0gICAgQVNTRVJUKCFpc0Z1bGwoKSk7Ci0gICAgLy8gTWFrZSBzdXJl
IHRoYXQgdGhlIHJlc2l6aW5nIG9wdGltaXplcyBmb3Igc3BhY2UsIG5vdCB0aW1lLgotICAgIG1f
bGlzdC5yZXNpemVUb0ZpdChtX2xpc3Quc2l6ZSgpICsgMSk7Ci0gICAgbV9saXN0Lmxhc3QoKSA9
IGFjY2VzczsKLX0KLQotYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojppc0Z1bGwoKSBjb25z
dAotewotICAgIEFTU0VSVChzaXplKCkgPD0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKTsK
LSAgICByZXR1cm4gc2l6ZSgpID09IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRTsKLX0KLQot
Ym9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojppc0FsbW9zdEZ1bGwoKSBjb25zdAotewotICAg
IEFTU0VSVChzaXplKCkgPD0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKTsKLSAgICByZXR1
cm4gc2l6ZSgpID49IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDE7Ci19Ci0KLWJvb2wg
UG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6ZGlkU2VsZlBhdGNoaW5nKCkgY29uc3QKLXsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSBzaXplKCk7IGktLTspIHsKLSAgICAgICAgaWYgKGF0KGkpLnR5cGUo
KSA9PSBHZXRCeUlkQWNjZXNzOjpTaW1wbGVJbmxpbmUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFBvbHltb3JwaGljR2V0QnlJ
ZExpc3Q6OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0Ci17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
c2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIGlmICghYXQoaSkudmlzaXRXZWFrKHZtKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQotCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRM
aXN0LmgJKHJldmlzaW9uIDE4OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTMzICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQot
I2lmbmRlZiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0X2gKLSNkZWZpbmUgUG9seW1vcnBoaWNHZXRC
eUlkTGlzdF9oCi0KLSNpZiBFTkFCTEUoSklUKQotCi0jaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgot
I2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCi0jaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQuaCIKLSNpbmNsdWRlICJPcGNvZGUuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIK
LSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBDb2Rl
QmxvY2s7Ci1zdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm87Ci0KLWNsYXNzIEdldEJ5SWRBY2Nlc3Mg
ewotcHVibGljOgotICAgIGVudW0gQWNjZXNzVHlwZSB7Ci0gICAgICAgIEludmFsaWQsCi0gICAg
ICAgIFNpbXBsZUlubGluZSwgLy8gVGhpcyBpcyB0aGUgcGF0Y2hlZCBpbmxpbmUgYWNjZXNzLgot
ICAgICAgICBTaW1wbGVTdHViLCAvLyBUaGlzIGlzIGEgc3R1Yi4KLSAgICAgICAgV2F0Y2hlZFN0
dWIsCi0gICAgICAgIEdldHRlciwKLSAgICAgICAgQ3VzdG9tR2V0dGVyLAotICAgICAgICBTaW1w
bGVNaXNzLAotICAgIH07Ci0gICAgCi0gICAgR2V0QnlJZEFjY2VzcygpCi0gICAgICAgIDogbV90
eXBlKEludmFsaWQpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBHZXRCeUlkQWNjZXNzKAotICAg
ICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUsIFBhc3NSZWZQdHI8SklUU3R1YlJv
dXRpbmU+LCBTdHJ1Y3R1cmUqLAotICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpKTsKLSAgICAKLSAgICB+R2V0QnlJ
ZEFjY2VzcygpOwotICAgIAotICAgIHN0YXRpYyBHZXRCeUlkQWNjZXNzIGZyb21TdHJ1Y3R1cmVT
dHViSW5mbyhTdHJ1Y3R1cmVTdHViSW5mbyYpOwotICAgIAotICAgIGJvb2wgaXNTZXQoKSBjb25z
dCB7IHJldHVybiBtX3R5cGUgIT0gSW52YWxpZDsgfQotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29u
c3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KLSAgICAKLSAgICBBY2Nlc3NUeXBlIHR5cGUoKSBjb25z
dCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlLmdldCgpOyB9Ci0gICAgCi0gICAgY29uc3QgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29u
ZGl0aW9uU2V0OyB9Ci0gICAgCi0gICAgSklUU3R1YlJvdXRpbmUqIHN0dWJSb3V0aW5lKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc1NldCgpKTsKLSAgICAgICAgcmV0dXJuIG1fc3R1
YlJvdXRpbmUuZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgZG9lc0NhbGxzKCkgY29uc3Qg
eyByZXR1cm4gdHlwZSgpID09IEdldHRlciB8fCB0eXBlKCkgPT0gQ3VzdG9tR2V0dGVyOyB9Ci0g
ICAgCi0gICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBmcmll
bmQgY2xhc3MgQ29kZUJsb2NrOwotICAgIAotICAgIEFjY2Vzc1R5cGUgbV90eXBlOwotICAgIFdy
aXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOwotICAgIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OwotICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gbV9z
dHViUm91dGluZTsKLX07Ci0KLWNsYXNzIFBvbHltb3JwaGljR2V0QnlJZExpc3QgewotICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIC8vIEVpdGhlciBjcmVhdGVzIGEg
bmV3IHBvbHltb3JwaGljIGdldCBsaXN0LCBvciByZXR1cm5zIHRoZSBvbmUgdGhhdCBpcyBhbHJl
YWR5IGluCi0gICAgLy8gcGxhY2UuCi0gICAgc3RhdGljIFBvbHltb3JwaGljR2V0QnlJZExpc3Qq
IGZyb20oU3RydWN0dXJlU3R1YkluZm8mKTsKLSAgICAKLSAgICB+UG9seW1vcnBoaWNHZXRCeUlk
TGlzdCgpOwotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdXJyZW50U2xvd1BhdGhU
YXJnZXQoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKSBjb25zdDsKLSAgICAKLSAgICB2b2lk
IGFkZEFjY2Vzcyhjb25zdCBHZXRCeUlkQWNjZXNzJik7Ci0gICAgCi0gICAgYm9vbCBpc0VtcHR5
KCkgY29uc3QgeyByZXR1cm4gbV9saXN0LmlzRW1wdHkoKTsgfQotICAgIHVuc2lnbmVkIHNpemUo
KSBjb25zdCB7IHJldHVybiBtX2xpc3Quc2l6ZSgpOyB9Ci0gICAgYm9vbCBpc0Z1bGwoKSBjb25z
dDsKLSAgICBib29sIGlzQWxtb3N0RnVsbCgpIGNvbnN0OyAvLyBUcnVlIGlmIGFkZGluZyBhbiBl
bGVtZW50IHdvdWxkIG1ha2UgaXNGdWxsKCkgdHJ1ZS4KLSAgICBjb25zdCBHZXRCeUlkQWNjZXNz
JiBhdCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2xpc3RbaV07IH0KLSAgICBjb25zdCBH
ZXRCeUlkQWNjZXNzJiBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbGlz
dFtpXTsgfQotICAgIAotICAgIGJvb2wgZGlkU2VsZlBhdGNoaW5nKCkgY29uc3Q7IC8vIEFyZSBh
bnkgb2YgdGhlIGFjY2Vzc2VzIFNpbXBsZUlubGluZT8KLSAgICAKLSAgICBib29sIHZpc2l0V2Vh
ayhWTSYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7Ci0g
ICAgCi0gICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyYpOwotICAg
IAotICAgIFZlY3RvcjxHZXRCeUlkQWNjZXNzLCAyPiBtX2xpc3Q7Ci19OwotCi19IC8vIG5hbWVz
cGFjZSBKU0MKLQotI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0KLSNlbmRpZiAvLyBQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0X2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Bv
bHltb3JwaGljUHV0QnlJZExpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcAkocmV2aXNpb24gMTg5NTE1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExp
c3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE1NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEyLCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgiCi0KLSNpZiBFTkFCTEUo
SklUKQotCi0jaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKLQotbmFtZXNwYWNlIEpTQyB7
Ci0KLVB1dEJ5SWRBY2Nlc3MgUHV0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIg
aW5pdGlhbFNsb3dQYXRoID0KLSAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxh
YmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSk7Ci0gICAgCi0g
ICAgUHV0QnlJZEFjY2VzcyByZXN1bHQ7Ci0gICAgCi0gICAgc3dpdGNoIChzdHViSW5mby5hY2Nl
c3NUeXBlKSB7Ci0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2U6Ci0gICAgICAgIHJl
c3VsdC5tX3R5cGUgPSBSZXBsYWNlOwotICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuY29w
eUZyb20oc3R1YkluZm8udS5wdXRCeUlkUmVwbGFjZS5iYXNlT2JqZWN0U3RydWN0dXJlKTsKLSAg
ICAgICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBKSVRTdHViUm91dGluZTo6Y3JlYXRlU2VsZk1h
bmFnZWRSb3V0aW5lKGluaXRpYWxTbG93UGF0aCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAK
LSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6Ci0gICAgY2FzZSBh
Y2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgotICAgICAgICByZXN1bHQubV90eXBl
ID0gVHJhbnNpdGlvbjsKLSAgICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlLmNvcHlGcm9tKHN0
dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUpOwotICAgICAgICBy
ZXN1bHQubV9uZXdTdHJ1Y3R1cmUuY29weUZyb20oc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlv
bi5zdHJ1Y3R1cmUpOwotICAgICAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldDo6YWRvcHRSYXdQb2ludGVyKAotICAgICAgICAgICAgc3R1YkluZm8u
dS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQpOwotICAgICAgICByZXN1bHQubV9z
dHViUm91dGluZSA9IHN0dWJJbmZvLnN0dWJSb3V0aW5lOwotICAgICAgICBicmVhazsKLSAgICAg
ICAgCi0gICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBQdXRCeUlkQWNjZXNz
Ojp2aXNpdFdlYWsoVk0mIHZtKSBjb25zdAotewotICAgIGlmICghbV9jb25kaXRpb25TZXQuYXJl
U3RpbGxMaXZlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBzd2l0Y2ggKG1f
dHlwZSkgewotICAgIGNhc2UgUmVwbGFjZToKLSAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZCht
X29sZFN0cnVjdHVyZS5nZXQoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgVHJhbnNpdGlvbjoKLSAgICAgICAgaWYgKCFIZWFwOjppc01hcmtl
ZChtX29sZFN0cnVjdHVyZS5nZXQoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIGlmICghSGVhcDo6aXNNYXJrZWQobV9uZXdTdHJ1Y3R1cmUuZ2V0KCkpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNldHRlcjoKLSAgICBj
YXNlIEN1c3RvbVNldHRlcjoKLSAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX29sZFN0cnVj
dHVyZS5nZXQoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKCFtX3N0dWJSb3V0aW5lLT52aXNpdFdl
YWsodm0pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVBv
bHltb3JwaGljUHV0QnlJZExpc3Q6OlBvbHltb3JwaGljUHV0QnlJZExpc3QoCi0gICAgUHV0S2lu
ZCBwdXRLaW5kLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi0gICAgOiBtX2tpbmQocHV0
S2luZCkKLXsKLSAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSAhPSBhY2Nlc3NfdW5zZXQpCi0g
ICAgICAgIG1fbGlzdC5hcHBlbmQoUHV0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZv
KHN0dWJJbmZvKSk7Ci19Ci0KLVBvbHltb3JwaGljUHV0QnlJZExpc3QqIFBvbHltb3JwaGljUHV0
QnlJZExpc3Q6OmZyb20oCi0gICAgUHV0S2luZCBwdXRLaW5kLCBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8pCi17Ci0gICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3B1dF9i
eV9pZF9saXN0KQotICAgICAgICByZXR1cm4gc3R1YkluZm8udS5wdXRCeUlkTGlzdC5saXN0Owot
ICAgIAotICAgIEFTU0VSVChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19wdXRfYnlfaWRf
cmVwbGFjZQotICAgICAgICB8fCBzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19wdXRfYnlf
aWRfdHJhbnNpdGlvbl9ub3JtYWwKLSAgICAgICAgfHwgc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBh
Y2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0Ci0gICAgICAgIHx8IHN0dWJJbmZvLmFj
Y2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0KTsKLSAgICAKLSAgICBQb2x5bW9ycGhpY1B1dEJ5SWRM
aXN0KiByZXN1bHQgPQotICAgICAgICBuZXcgUG9seW1vcnBoaWNQdXRCeUlkTGlzdChwdXRLaW5k
LCBzdHViSW5mbyk7Ci0gICAgCi0gICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRMaXN0KHJlc3VsdCk7
Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6
flBvbHltb3JwaGljUHV0QnlJZExpc3QoKSB7IH0KLQotYm9vbCBQb2x5bW9ycGhpY1B1dEJ5SWRM
aXN0Ojppc0Z1bGwoKSBjb25zdAotewotICAgIEFTU0VSVChzaXplKCkgPD0gUE9MWU1PUlBISUNf
TElTVF9DQUNIRV9TSVpFKTsKLSAgICByZXR1cm4gc2l6ZSgpID09IFBPTFlNT1JQSElDX0xJU1Rf
Q0FDSEVfU0laRTsKLX0KLQotYm9vbCBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojppc0FsbW9zdEZ1
bGwoKSBjb25zdAotewotICAgIEFTU0VSVChzaXplKCkgPD0gUE9MWU1PUlBISUNfTElTVF9DQUNI
RV9TSVpFKTsKLSAgICByZXR1cm4gc2l6ZSgpID49IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0la
RSAtIDE7Ci19Ci0KLXZvaWQgUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6YWRkQWNjZXNzKGNvbnN0
IFB1dEJ5SWRBY2Nlc3MmIHB1dEJ5SWRBY2Nlc3MpCi17Ci0gICAgQVNTRVJUKCFpc0Z1bGwoKSk7
Ci0gICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHJlc2l6aW5nIG9wdGltaXplcyBmb3Igc3BhY2Us
IG5vdCB0aW1lLgotICAgIG1fbGlzdC5yZXNpemVUb0ZpdChtX2xpc3Quc2l6ZSgpICsgMSk7Ci0g
ICAgbV9saXN0Lmxhc3QoKSA9IHB1dEJ5SWRBY2Nlc3M7Ci19Ci0KLWJvb2wgUG9seW1vcnBoaWNQ
dXRCeUlkTGlzdDo6dmlzaXRXZWFrKFZNJiB2bSkgY29uc3QKLXsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKCFhdChpKS52aXNpdFdlYWso
dm0pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQ
dXRCeUlkTGlzdC5oCShyZXZpc2lvbiAxODk1MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIx
NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0LCAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNpZm5kZWYgUG9seW1vcnBoaWNQdXRCeUlkTGlzdF9oCi0jZGVmaW5lIFBv
bHltb3JwaGljUHV0QnlJZExpc3RfaAotCi0jaWYgRU5BQkxFKEpJVCkKLQotI2luY2x1ZGUgIkNv
ZGVPcmlnaW4uaCIKLSNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgotI2luY2x1ZGUgIk9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiCi0jaW5jbHVkZSAiT3Bjb2RlLmgiCi0jaW5jbHVkZSAi
UHV0S2luZC5oIgotI2luY2x1ZGUgIlB1dFByb3BlcnR5U2xvdC5oIgotI2luY2x1ZGUgIlN0cnVj
dHVyZS5oIgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNs
YXNzIENvZGVCbG9jazsKLXN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbzsKLQotY2xhc3MgUHV0QnlJ
ZEFjY2VzcyB7Ci1wdWJsaWM6Ci0gICAgZW51bSBBY2Nlc3NUeXBlIHsKLSAgICAgICAgSW52YWxp
ZCwKLSAgICAgICAgVHJhbnNpdGlvbiwKLSAgICAgICAgUmVwbGFjZSwKLSAgICAgICAgU2V0dGVy
LAotICAgICAgICBDdXN0b21TZXR0ZXIKLSAgICB9OwotICAgIAotICAgIFB1dEJ5SWRBY2Nlc3Mo
KQotICAgICAgICA6IG1fdHlwZShJbnZhbGlkKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgc3Rh
dGljIFB1dEJ5SWRBY2Nlc3MgdHJhbnNpdGlvbigKLSAgICAgICAgVk0mIHZtLAotICAgICAgICBK
U0NlbGwqIG93bmVyLAotICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwKLSAgICAgICAg
U3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsCi0gICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCi0gICAgICAgIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRp
bmU+IHN0dWJSb3V0aW5lKQotICAgIHsKLSAgICAgICAgUHV0QnlJZEFjY2VzcyByZXN1bHQ7Ci0g
ICAgICAgIHJlc3VsdC5tX3R5cGUgPSBUcmFuc2l0aW9uOwotICAgICAgICByZXN1bHQubV9vbGRT
dHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgb2xkU3RydWN0dXJlKTsKLSAgICAgICAgcmVzdWx0Lm1f
bmV3U3RydWN0dXJlLnNldCh2bSwgb3duZXIsIG5ld1N0cnVjdHVyZSk7Ci0gICAgICAgIHJlc3Vs
dC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKLSAgICAgICAgcmVzdWx0Lm1fY3VzdG9t
U2V0dGVyID0gMDsKLSAgICAgICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBzdHViUm91dGluZTsK
LSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBzdGF0aWMgUHV0QnlJZEFjY2Vz
cyByZXBsYWNlKAotICAgICAgICBWTSYgdm0sCi0gICAgICAgIEpTQ2VsbCogb3duZXIsCi0gICAg
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLAotICAgICAgICBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0
aW5lPiBzdHViUm91dGluZSkKLSAgICB7Ci0gICAgICAgIFB1dEJ5SWRBY2Nlc3MgcmVzdWx0Owot
ICAgICAgICByZXN1bHQubV90eXBlID0gUmVwbGFjZTsKLSAgICAgICAgcmVzdWx0Lm1fb2xkU3Ry
dWN0dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHJlc3VsdC5tX2N1c3Rv
bVNldHRlciA9IDA7Ci0gICAgICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gc3R1YlJvdXRpbmU7
Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0KLSAgICBzdGF0aWMgUHV0QnlJZEFj
Y2VzcyBzZXR0ZXIoCi0gICAgICAgIFZNJiB2bSwKLSAgICAgICAgSlNDZWxsKiBvd25lciwKLSAg
ICAgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlLAotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwKLSAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNl
dCwKLSAgICAgICAgUHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmMgY3VzdG9tU2V0dGVyLAot
ICAgICAgICBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSkKLSAgICB7Ci0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGFjY2Vzc1R5cGUgPT0gU2V0dGVyIHx8IGFjY2Vzc1R5cGUg
PT0gQ3VzdG9tU2V0dGVyKTsKLSAgICAgICAgUHV0QnlJZEFjY2VzcyByZXN1bHQ7Ci0gICAgICAg
IHJlc3VsdC5tX29sZFN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOwotICAgICAg
ICByZXN1bHQubV90eXBlID0gYWNjZXNzVHlwZTsKLSAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9u
U2V0ID0gY29uZGl0aW9uU2V0OwotICAgICAgICByZXN1bHQubV9jdXN0b21TZXR0ZXIgPSBjdXN0
b21TZXR0ZXI7Ci0gICAgICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gc3R1YlJvdXRpbmU7Ci0g
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyBQdXRCeUlkQWNj
ZXNzIGZyb21TdHJ1Y3R1cmVTdHViSW5mbyhTdHJ1Y3R1cmVTdHViSW5mbyYpOwotICAgIAotICAg
IGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgIT0gSW52YWxpZDsgfQotICAgIGJv
b2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KLSAgICAKLSAgICBBY2Nl
c3NUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICAKLSAgICBib29sIGlz
VHJhbnNpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBUcmFuc2l0aW9uOyB9Ci0gICAg
Ym9vbCBpc1JlcGxhY2UoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gUmVwbGFjZTsgfQotICAg
IGJvb2wgaXNTZXR0ZXIoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gU2V0dGVyOyB9Ci0gICAg
Ym9vbCBpc0N1c3RvbSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBDdXN0b21TZXR0ZXI7IH0K
LSAgICAKLSAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSgpIGNvbnN0Ci0gICAgewotICAgICAg
ICAvLyBVc2luZyB0aGlzIGluc3RlYWQgb2YgaXNTZXQoKSB0byBtYWtlIHRoaXMgYXNzZXJ0aW9u
IHJvYnVzdCBhZ2FpbnN0IHRoZSBwb3NzaWJpbGl0eQotICAgICAgICAvLyBvZiBhZGRpdGlvbmFs
IGFjY2VzcyB0eXBlcyBiZWluZyBhZGRlZC4KLSAgICAgICAgQVNTRVJUKGlzVHJhbnNpdGlvbigp
IHx8IGlzUmVwbGFjZSgpIHx8IGlzU2V0dGVyKCkgfHwgaXNDdXN0b20oKSk7Ci0gICAgICAgIAot
ICAgICAgICByZXR1cm4gbV9vbGRTdHJ1Y3R1cmUuZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc1JlcGxh
Y2UoKSB8fCBpc1NldHRlcigpIHx8IGlzQ3VzdG9tKCkpOwotICAgICAgICByZXR1cm4gbV9vbGRT
dHJ1Y3R1cmUuZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJl
KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc1RyYW5zaXRpb24oKSk7Ci0gICAgICAg
IHJldHVybiBtX25ld1N0cnVjdHVyZS5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y29uZGl0aW9uU2V0OyB9Ci0gICAgCi0gICAgSklUU3R1YlJvdXRpbmUqIHN0dWJSb3V0aW5lKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc1RyYW5zaXRpb24oKSB8fCBpc1JlcGxhY2Uo
KSB8fCBpc1NldHRlcigpIHx8IGlzQ3VzdG9tKCkpOwotICAgICAgICByZXR1cm4gbV9zdHViUm91
dGluZS5nZXQoKTsKLSAgICB9Ci0KLSAgICBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyBj
dXN0b21TZXR0ZXIoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzQ3VzdG9tKCkpOwot
ICAgICAgICByZXR1cm4gbV9jdXN0b21TZXR0ZXI7Ci0gICAgfQotCi0gICAgYm9vbCB2aXNpdFdl
YWsoVk0mKSBjb25zdDsKLSAgICAKLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIENvZGVCbG9j
azsKLSAgICAKLSAgICBBY2Nlc3NUeXBlIG1fdHlwZTsKLSAgICBXcml0ZUJhcnJpZXI8U3RydWN0
dXJlPiBtX29sZFN0cnVjdHVyZTsKLSAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX25ld1N0
cnVjdHVyZTsKLSAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsK
LSAgICBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyBtX2N1c3RvbVNldHRlcjsKLSAgICBS
ZWZQdHI8SklUU3R1YlJvdXRpbmU+IG1fc3R1YlJvdXRpbmU7Ci19OwotCi1jbGFzcyBQb2x5bW9y
cGhpY1B1dEJ5SWRMaXN0IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoK
LSAgICAvLyBFaXRoZXIgY3JlYXRlcyBhIG5ldyBwb2x5bW9ycGhpYyBwdXQgbGlzdCwgb3IgcmV0
dXJucyB0aGUgb25lIHRoYXQgaXMgYWxyZWFkeQotICAgIC8vIGluIHBsYWNlLgotICAgIHN0YXRp
YyBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiBmcm9tKFB1dEtpbmQsIFN0cnVjdHVyZVN0dWJJbmZv
Jik7Ci0gICAgCi0gICAgflBvbHltb3JwaGljUHV0QnlJZExpc3QoKTsKLSAgICAKLSAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHIgY3VycmVudFNsb3dQYXRoVGFyZ2V0KCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBtX2xpc3QubGFzdCgpLnN0dWJSb3V0aW5lKCktPmNvZGUoKS5jb2RlKCk7
Ci0gICAgfQotICAgIAotICAgIHZvaWQgYWRkQWNjZXNzKGNvbnN0IFB1dEJ5SWRBY2Nlc3MmKTsK
LSAgICAKLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2xpc3QuaXNFbXB0eSgp
OyB9Ci0gICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5zaXplKCk7IH0K
LSAgICBib29sIGlzRnVsbCgpIGNvbnN0OwotICAgIGJvb2wgaXNBbG1vc3RGdWxsKCkgY29uc3Q7
IC8vIFRydWUgaWYgYWRkaW5nIGFuIGVsZW1lbnQgd291bGQgbWFrZSBpc0Z1bGwoKSB0cnVlLgot
ICAgIGNvbnN0IFB1dEJ5SWRBY2Nlc3MmIGF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1f
bGlzdFtpXTsgfQotICAgIGNvbnN0IFB1dEJ5SWRBY2Nlc3MmIG9wZXJhdG9yW10odW5zaWduZWQg
aSkgY29uc3QgeyByZXR1cm4gbV9saXN0W2ldOyB9Ci0gICAgCi0gICAgUHV0S2luZCBraW5kKCkg
Y29uc3QgeyByZXR1cm4gbV9raW5kOyB9Ci0gICAgCi0gICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBj
b25zdDsKLSAgICAKLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKLSAgICAK
LSAgICAvLyBJbml0aWFsaXplIGZyb20gYSBzdHViIGluZm87IHRoaXMgd2lsbCBwbGFjZSBvbmUg
ZWxlbWVudCBpbiB0aGUgbGlzdCBhbmQgaXQgd2lsbAotICAgIC8vIGJlIGNyZWF0ZWQgYnkgY29u
dmVydGluZyB0aGUgc3R1YiBpbmZvJ3MgcHV0IGJ5IGlkIGFjY2VzcyBpbmZvcm1hdGlvbiBpbnRv
IG91cgotICAgIC8vIFB1dEJ5SWRBY2Nlc3MuCi0gICAgUG9seW1vcnBoaWNQdXRCeUlkTGlzdChQ
dXRLaW5kLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwotCi0gICAgVmVjdG9yPFB1dEJ5SWRBY2Nlc3Ms
IDI+IG1fbGlzdDsKLSAgICBQdXRLaW5kIG1fa2luZDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpT
QwotCi0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQotI2VuZGlmIC8vIFBvbHltb3JwaGljUHV0QnlJ
ZExpc3RfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0
YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5SWRTdGF0dXMuY3BwCShyZXZpc2lvbiAxODk1MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEzICsy
NiwxMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIK
IAotI2luY2x1ZGUgIkFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiQ29k
ZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29tcGxleEdldFN0YXR1cy5oIgogI2luY2x1ZGUgIkxMSW50
RGF0YS5oIgogI2luY2x1ZGUgIkxvd0xldmVsSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCi0jaW5jbHVkZSAiUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oIgorI2luY2x1ZGUg
IlBvbHltb3JwaGljQWNjZXNzLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAi
U3RydWN0dXJlQ2hhaW4uaCIKICNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KQEAgLTE1NCw2NiAr
MTUzLDQzIEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICBp
ZiAoIXN0dWJJbmZvLT5zZWVuKQogICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cygpOwogICAg
IAotICAgIHN3aXRjaCAoc3R1YkluZm8tPmFjY2Vzc1R5cGUpIHsKLSAgICBjYXNlIGFjY2Vzc191
bnNldDoKKyAgICBzd2l0Y2ggKHN0dWJJbmZvLT5jYWNoZVR5cGUpIHsKKyAgICBjYXNlIENhY2hl
VHlwZTo6VW5zZXQ6CiAgICAgICAgIC8vIElmIHRoZSBKSVQgc2F3IGl0IGJ1dCBkaWRuJ3Qgb3B0
aW1pemUgaXQsIHRoZW4gYXNzdW1lIHRoYXQgdGhpcyB0YWtlcyBzbG93IHBhdGguCiAgICAgICAg
IHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgICAgICAKLSAgICBjYXNl
IGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFjZTogeworICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRCeUlk
UmVwbGFjZTogewogICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPQotICAgICAgICAgICAg
c3R1YkluZm8tPnUucHV0QnlJZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZS0+Z2V0Q29uY3Vy
cmVudGx5KHVpZCk7CisgICAgICAgICAgICBzdHViSW5mby0+dS5ieUlkU2VsZi5iYXNlT2JqZWN0
U3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKICAgICAgICAgaWYgKGlzVmFsaWRPZmZz
ZXQob2Zmc2V0KSkgewogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNl
KAotICAgICAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRSZXBsYWNlLmJhc2VPYmplY3RT
dHJ1Y3R1cmUuZ2V0KCksIG9mZnNldCk7CisgICAgICAgICAgICAgICAgc3R1YkluZm8tPnUuYnlJ
ZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgb2Zmc2V0KTsKICAgICAgICAgfQogICAg
ICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICB9CiAgICAgICAg
IAotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoKLSAgICBjYXNl
IGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6IHsKLSAgICAgICAgQVNTRVJUKHN0
dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLT50cmFuc2l0aW9u
V2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsKLSAgICAgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0ID0gCi0gICAgICAgICAgICBzdHViSW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5z
dHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOwotICAgICAgICBpZiAoaXNWYWxpZE9mZnNl
dChvZmZzZXQpKSB7Ci0gICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25k
aXRpb25TZXQgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6ZnJvbVJhd1BvaW50ZXIoCi0g
ICAgICAgICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9u
U2V0KTsKLSAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxp
ZGl0eSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1Bh
dGgpOwotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAotICAg
ICAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0
dXJlLmdldCgpLAotICAgICAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9u
LnN0cnVjdHVyZS5nZXQoKSwKLSAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQsIG9mZnNldCk7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7
Ci0gICAgfQotICAgICAgICAKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfbGlzdDogewotICAg
ICAgICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiBsaXN0ID0gc3R1YkluZm8tPnUucHV0QnlJZExp
c3QubGlzdDsKKyAgICBjYXNlIENhY2hlVHlwZTo6U3R1YjogeworICAgICAgICBQb2x5bW9ycGhp
Y0FjY2VzcyogbGlzdCA9IHN0dWJJbmZvLT51LnN0dWI7CiAgICAgICAgIAogICAgICAgICBQdXRC
eUlkU3RhdHVzIHJlc3VsdDsKICAgICAgICAgcmVzdWx0Lm1fc3RhdGUgPSBTaW1wbGU7CiAgICAg
ICAgIAogICAgICAgICBTdGF0ZSBzbG93UGF0aFN0YXRlID0gVGFrZXNTbG93UGF0aDsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSB7Ci0gICAgICAg
ICAgICBjb25zdCBQdXRCeUlkQWNjZXNzJiBhY2Nlc3MgPSBsaXN0LT5hdChpKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgc3dpdGNoIChhY2Nlc3MudHlwZSgpKSB7Ci0gICAgICAgICAgICBj
YXNlIFB1dEJ5SWRBY2Nlc3M6OlNldHRlcjoKLSAgICAgICAgICAgIGNhc2UgUHV0QnlJZEFjY2Vz
czo6Q3VzdG9tU2V0dGVyOgorICAgICAgICAgICAgY29uc3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0g
bGlzdC0+YXQoaSk7CisgICAgICAgICAgICBpZiAoYWNjZXNzLmRvZXNDYWxscygpKQogICAgICAg
ICAgICAgICAgIHNsb3dQYXRoU3RhdGUgPSBNYWtlc0NhbGxzOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBjb25zdCBQdXRCeUlkQWNj
ZXNzJiBhY2Nlc3MgPSBsaXN0LT5hdChpKTsKKyAgICAgICAgICAgIGNvbnN0IEFjY2Vzc0Nhc2Um
IGFjY2VzcyA9IGxpc3QtPmF0KGkpOworICAgICAgICAgICAgaWYgKGFjY2Vzcy52aWFQcm94eSgp
KQorICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUpOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudCB2YXJpYW50OwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBzd2l0Y2ggKGFjY2Vzcy50eXBlKCkpIHsKLSAgICAgICAgICAg
IGNhc2UgUHV0QnlJZEFjY2Vzczo6UmVwbGFjZTogeworICAgICAgICAgICAgY2FzZSBBY2Nlc3ND
YXNlOjpSZXBsYWNlOiB7CiAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBh
Y2Nlc3Muc3RydWN0dXJlKCk7CiAgICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKICAgICAgICAgICAgICAgICBpZiAo
IWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKQEAgLTIyMiw3ICsxOTgsNyBAQCBQdXRCeUlkU3RhdHVz
IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFB1dEJ5SWRBY2Nl
c3M6OlRyYW5zaXRpb246IHsKKyAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6VHJhbnNpdGlv
bjogewogICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9CiAgICAgICAgICAg
ICAgICAgICAgIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CiAg
ICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCkBAIC0yMzEsMTEgKzIw
NywxMSBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAg
ICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUpOwog
ICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKLSAg
ICAgICAgICAgICAgICAgICAgYWNjZXNzLm9sZFN0cnVjdHVyZSgpLCBhY2Nlc3MubmV3U3RydWN0
dXJlKCksIGNvbmRpdGlvblNldCwgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgYWNjZXNz
LnN0cnVjdHVyZSgpLCBhY2Nlc3MubmV3U3RydWN0dXJlKCksIGNvbmRpdGlvblNldCwgb2Zmc2V0
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGNhc2UgUHV0QnlJZEFjY2Vzczo6U2V0dGVyOiB7CisgICAgICAgICAg
ICBjYXNlIEFjY2Vzc0Nhc2U6OlNldHRlcjogewogICAgICAgICAgICAgICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gYWNjZXNzLnN0cnVjdHVyZSgpOwogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIENvbXBsZXhHZXRTdGF0dXMgY29tcGxleEdldFN0YXR1cyA9IENvbXBsZXhHZXRT
dGF0dXM6OmNvbXB1dGVGb3IoCkBAIC0yNDksMTIgKzIyNSwxMiBAQCBQdXRCeUlkU3RhdHVzIFB1
dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBjYXNlIENvbXBsZXhHZXRTdGF0dXM6OklubGluZWFibGU6IHsKLSAgICAgICAgICAg
ICAgICAgICAgQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUqIHN0dWIgPSBzdGF0aWNfY2FzdDxB
Y2Nlc3NvckNhbGxKSVRTdHViUm91dGluZSo+KAotICAgICAgICAgICAgICAgICAgICAgICAgYWNj
ZXNzLnN0dWJSb3V0aW5lKCkpOworICAgICAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNh
bGxMaW5rSW5mbyA9IGFjY2Vzcy5jYWxsTGlua0luZm8oKTsKKyAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKGNhbGxMaW5rSW5mbyk7CiAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMgPQogICAgICAgICAgICAgICAgICAgICAg
ICAgc3RkOjptYWtlX3VuaXF1ZTxDYWxsTGlua1N0YXR1cz4oCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IoCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxvY2tlciwgcHJvZmlsZWRCbG9jaywgKnN0dWItPm1fY2FsbExpbmtJbmZv
LCBjYWxsRXhpdFNpdGVEYXRhKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxv
Y2tlciwgcHJvZmlsZWRCbG9jaywgKmNhbGxMaW5rSW5mbywgY2FsbEV4aXRTaXRlRGF0YSkpOwog
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5
SWRWYXJpYW50OjpzZXR0ZXIoCiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGNv
bXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksIGNvbXBsZXhHZXRTdGF0dXMuY29uZGl0aW9uU2V0KCks
CkBAIC0yNjMsNyArMjM5LDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRl
Rm9yUwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgY2FzZSBQdXRCeUlkQWNjZXNzOjpDdXN0b21TZXR0ZXI6CisgICAg
ICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OkN1c3RvbVNldHRlcjoKICAgICAgICAgICAgICAgICBy
ZXR1cm4gUHV0QnlJZFN0YXR1cyhNYWtlc0NhbGxzKTsKIAogICAgICAgICAgICAgZGVmYXVsdDoK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmNwcAkocmV2aXNpb24gMTg5NTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCAr
MjcsNyBAQAogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAKICNpbmNsdWRlICJKU09i
amVjdC5oIgotI2luY2x1ZGUgIlBvbHltb3JwaGljR2V0QnlJZExpc3QuaCIKLSNpbmNsdWRlICJQ
b2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIK
ICNpbmNsdWRlICJSZXBhdGNoLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMzYsMzcgKzM1LDUz
IEBAIG5hbWVzcGFjZSBKU0MgewogI2lmIEVOQUJMRShKSVQpCiB2b2lkIFN0cnVjdHVyZVN0dWJJ
bmZvOjpkZXJlZigpCiB7Ci0gICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7Ci0gICAgY2FzZSBhY2Nl
c3NfZ2V0X2J5X2lkX2xpc3Q6IHsKLSAgICAgICAgZGVsZXRlIHUuZ2V0QnlJZExpc3QubGlzdDsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfbGlzdDoK
LSAgICAgICAgZGVsZXRlIHUucHV0QnlJZExpc3QubGlzdDsKKyAgICBzd2l0Y2ggKGNhY2hlVHlw
ZSkgeworICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOgorICAgICAgICBkZWxldGUgdS5zdHViOwog
ICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBhY2Nlc3NfaW5fbGlzdDogewotICAgICAgICBQb2x5
bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlcyA9IHUuaW5M
aXN0LnN0cnVjdHVyZUxpc3Q7Ci0gICAgICAgIGRlbGV0ZSBwb2x5bW9ycGhpY1N0cnVjdHVyZXM7
CisgICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0OgorICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlk
U2VsZjoKKyAgICBjYXNlIENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2U6CiAgICAgICAgIHJldHVy
bjsKICAgICB9Ci0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgot
ICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdDoKLSAgICAgICAgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmFkb3B0UmF3UG9pbnRlcih1LnB1dEJ5SWRUcmFuc2l0
aW9uLnJhd0NvbmRpdGlvblNldCk7Ci0gICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29u
ZGl0aW9uU2V0ID0gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgYWNjZXNzX2dl
dF9ieV9pZF9zZWxmOgotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlOgotICAgIGNh
c2UgYWNjZXNzX3Vuc2V0OgotICAgICAgICAvLyBUaGVzZSBpbnN0cnVjdGlvbnMgZG9uJ3QgaGF2
ZSB0byByZWxlYXNlIGFueSBhbGxvY2F0ZWQgbWVtb3J5Ci0gICAgICAgIHJldHVybjsKLSAgICBk
ZWZhdWx0OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KKwor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29k
ZVB0ciBTdHJ1Y3R1cmVTdHViSW5mbzo6YWRkQWNjZXNzQ2FzZSgKKyAgICBWTSYgdm0sIENvZGVC
bG9jayogY29kZUJsb2NrLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgc3RkOjp1bmlxdWVfcHRy
PEFjY2Vzc0Nhc2U+IGFjY2Vzc0Nhc2UpCit7CisgICAgaWYgKCFhY2Nlc3NDYXNlKQorICAgICAg
ICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7CisgICAgCisgICAgaWYgKGNhY2hlVHlw
ZSA9PSBDYWNoZVR5cGU6OlN0dWIpCisgICAgICAgIHJldHVybiB1LnN0dWItPnJlZ2VuZXJhdGVX
aXRoQ2FzZSh2bSwgY29kZUJsb2NrLCAqdGhpcywgaWRlbnQsIHN0ZDo6bW92ZShhY2Nlc3NDYXNl
KSk7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UG9seW1vcnBoaWNBY2Nlc3M+IGFjY2VzcyA9IHN0
ZDo6bWFrZV91bmlxdWU8UG9seW1vcnBoaWNBY2Nlc3M+KCk7CisgICAgCisgICAgVmVjdG9yPHN0
ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPj4gYWNjZXNzQ2FzZXM7CisgICAgCisgICAgc3RkOjp1
bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHByZXZpb3VzQ2FzZSA9CisgICAgICAgIEFjY2Vzc0Nhc2U6
OmZyb21TdHJ1Y3R1cmVTdHViSW5mbyh2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwg
KnRoaXMpOworICAgIGlmIChwcmV2aW91c0Nhc2UpCisgICAgICAgIGFjY2Vzc0Nhc2VzLmFwcGVu
ZChzdGQ6Om1vdmUocHJldmlvdXNDYXNlKSk7CisKKyAgICBhY2Nlc3NDYXNlcy5hcHBlbmQoc3Rk
Ojptb3ZlKGFjY2Vzc0Nhc2UpKTsKKworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByZXN1bHQg
PQorICAgICAgICBhY2Nlc3MtPnJlZ2VuZXJhdGVXaXRoQ2FzZXModm0sIGNvZGVCbG9jaywgKnRo
aXMsIGlkZW50LCBzdGQ6Om1vdmUoYWNjZXNzQ2FzZXMpKTsKKworICAgIGlmICghcmVzdWx0KQor
ICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7CisKKyAgICBjYWNoZVR5cGUg
PSBDYWNoZVR5cGU6OlN0dWI7CisgICAgdS5zdHViID0gYWNjZXNzLnJlbGVhc2UoKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpyZXNldChDb2RlQmxv
Y2sqIGNvZGVCbG9jaykKIHsKLSAgICBpZiAoYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpCisg
ICAgaWYgKGNhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlVuc2V0KQogICAgICAgICByZXR1cm47CiAg
ICAgCiAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgewpAQCAtNzQsNjAgKzg5LDM4IEBA
IHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnJlc2V0KENvZGVCbG9jayoKICAgICAgICAgLy8gb2Yg
dGhlIENvZGVCbG9jay4KICAgICAgICAgZGF0YUxvZygiQ2xlYXJpbmcgc3RydWN0dXJlIGNhY2hl
IChraW5kICIsIHN0YXRpY19jYXN0PGludD4oYWNjZXNzVHlwZSksICIpIGluICIsIFJhd1BvaW50
ZXIoY29kZUJsb2NrKSwgIi5cbiIpOwogICAgIH0KLSAgICAKLSAgICBpZiAoaXNHZXRCeUlkQWNj
ZXNzKHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KGFjY2Vzc1R5cGUpKSkKKworICAgIHN3aXRjaCAo
YWNjZXNzVHlwZSkgeworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0OgogICAgICAgICByZXNldEdl
dEJ5SUQoY29kZUJsb2NrLCAqdGhpcyk7Ci0gICAgZWxzZSBpZiAoaXNQdXRCeUlkQWNjZXNzKHN0
YXRpY19jYXN0PEFjY2Vzc1R5cGU+KGFjY2Vzc1R5cGUpKSkKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpQdXQ6CiAgICAgICAgIHJlc2V0UHV0QnlJRChjb2RlQmxvY2ssICp0
aGlzKTsKLSAgICBlbHNlIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNJbkFjY2VzcyhzdGF0
aWNfY2FzdDxBY2Nlc3NUeXBlPihhY2Nlc3NUeXBlKSkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEFjY2Vzc1R5cGU6OkluOgogICAgICAgICByZXNldEluKGNvZGVCbG9jaywgKnRoaXMpOwor
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgCiAgICAgZGVyZWYoKTsKLSAgICBhY2Nlc3NUeXBl
ID0gYWNjZXNzX3Vuc2V0OwotICAgIHN0dWJSb3V0aW5lID0gbnVsbHB0cjsKLSAgICB3YXRjaHBv
aW50cyA9IG51bGxwdHI7CisgICAgY2FjaGVUeXBlID0gQ2FjaGVUeXBlOjpVbnNldDsKIH0KIAog
dm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbmNlcyhDb2RlQmxvY2sqIGNv
ZGVCbG9jaykKIHsKICAgICBWTSYgdm0gPSAqY29kZUJsb2NrLT52bSgpOwotICAgIAotICAgIHN3
aXRjaCAoYWNjZXNzVHlwZSkgewotICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmOgotICAg
ICAgICBpZiAoSGVhcDo6aXNNYXJrZWQodS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJl
LmdldCgpKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBh
Y2Nlc3NfZ2V0X2J5X2lkX2xpc3Q6IHsKLSAgICAgICAgaWYgKHUuZ2V0QnlJZExpc3QubGlzdC0+
dmlzaXRXZWFrKHZtKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoKLSAgICBjYXNl
IGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6Ci0gICAgICAgIGlmIChIZWFwOjpp
c01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgpKQotICAg
ICAgICAgICAgJiYgSGVhcDo6aXNNYXJrZWQodS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUu
Z2V0KCkpCi0gICAgICAgICAgICAmJiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6ZnJvbVJh
d1BvaW50ZXIodS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQpLmFyZVN0aWxsTGl2
ZSgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIGFjY2Vz
c19wdXRfYnlfaWRfcmVwbGFjZToKLSAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKHUucHV0QnlJ
ZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSkpCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9saXN0OgotICAgICAg
ICBpZiAodS5wdXRCeUlkTGlzdC5saXN0LT52aXNpdFdlYWsodm0pKQorCisgICAgc3dpdGNoIChj
YWNoZVR5cGUpIHsKKyAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJZFNlbGY6CisgICAgY2FzZSBD
YWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOgorICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQodS5i
eUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpKSkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBhY2Nlc3NfaW5fbGlzdDogewotICAgICAgICBQb2x5
bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlcyA9IHUuaW5M
aXN0LnN0cnVjdHVyZUxpc3Q7Ci0gICAgICAgIGlmIChwb2x5bW9ycGhpY1N0cnVjdHVyZXMtPnZp
c2l0V2Vhayh1LmluTGlzdC5saXN0U2l6ZSkpCisgICAgY2FzZSBDYWNoZVR5cGU6OlN0dWI6Cisg
ICAgICAgIGlmICh1LnN0dWItPnZpc2l0V2Vhayh2bSkpCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIGJyZWFrOwotICAgIH0KICAgICBkZWZhdWx0OgotICAgICAgICAvLyBUaGUgcmVzdCBv
ZiB0aGUgaW5zdHJ1Y3Rpb25zIGRvbid0IHJlcXVpcmUgcmVmZXJlbmNlcywgc28gdGhlcmUgaXMg
bm8gbmVlZCB0bwotICAgICAgICAvLyBkbyBhbnl0aGluZy4KICAgICAgICAgcmV0dXJuOwogICAg
IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJ
bmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDE4OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICsz
Miw3IEBACiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKICNpbmNsdWRlICJPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldC5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgotI2luY2x1ZGUgIlBvbHlt
b3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdC5oIgorI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNz
LmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKICNpbmNsdWRlICJTcGlsbFJlZ2lzdGVyc01v
ZGUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKQEAgLTQyLDU3ICs0MiwyNSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogI2lmIEVOQUJMRShKSVQpCiAKLWNsYXNzIFBvbHltb3JwaGljR2V0QnlJZExp
c3Q7Ci1jbGFzcyBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0OworY2xhc3MgUG9seW1vcnBoaWNBY2Nl
c3M7CiAKLWVudW0gQWNjZXNzVHlwZSB7Ci0gICAgYWNjZXNzX2dldF9ieV9pZF9zZWxmLAotICAg
IGFjY2Vzc19nZXRfYnlfaWRfbGlzdCwKLSAgICBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25f
bm9ybWFsLAotICAgIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3QsCi0gICAgYWNj
ZXNzX3B1dF9ieV9pZF9yZXBsYWNlLAotICAgIGFjY2Vzc19wdXRfYnlfaWRfbGlzdCwKLSAgICBh
Y2Nlc3NfdW5zZXQsCi0gICAgYWNjZXNzX2luX2xpc3QKK2VudW0gY2xhc3MgQWNjZXNzVHlwZSA6
IGludDhfdCB7CisgICAgR2V0LAorICAgIFB1dCwKKyAgICBJbgogfTsKIAotaW5saW5lIGJvb2wg
aXNHZXRCeUlkQWNjZXNzKEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSkKLXsKLSAgICBzd2l0Y2ggKGFj
Y2Vzc1R5cGUpIHsKLSAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZjoKLSAgICBjYXNlIGFj
Y2Vzc19nZXRfYnlfaWRfbGlzdDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLSAgICAKLWlubGluZSBib29sIGlzUHV0
QnlJZEFjY2VzcyhBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUpCi17Ci0gICAgc3dpdGNoIChhY2Nlc3NU
eXBlKSB7Ci0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgotICAg
IGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdDoKLSAgICBjYXNlIGFjY2Vz
c19wdXRfYnlfaWRfcmVwbGFjZToKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfbGlzdDoKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLX0KLQotaW5saW5lIGJvb2wgaXNJbkFjY2VzcyhBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUp
Ci17Ci0gICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7Ci0gICAgY2FzZSBhY2Nlc3NfaW5fbGlzdDoK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLX0KK2VudW0gY2xhc3MgQ2FjaGVUeXBlIDogaW50OF90IHsKKyAgICBVbnNldCwK
KyAgICBHZXRCeUlkU2VsZiwKKyAgICBQdXRCeUlkUmVwbGFjZSwKKyAgICBTdHViCit9OwogCiBz
dHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewotICAgIFN0cnVjdHVyZVN0dWJJbmZvKCkKLSAgICAg
ICAgOiBhY2Nlc3NUeXBlKGFjY2Vzc191bnNldCkKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyhBY2Nl
c3NUeXBlIGFjY2Vzc1R5cGUpCisgICAgICAgIDogYWNjZXNzVHlwZShhY2Nlc3NUeXBlKQorICAg
ICAgICAsIGNhY2hlVHlwZShDYWNoZVR5cGU6OlVuc2V0KQogICAgICAgICAsIHNlZW4oZmFsc2Up
CiAgICAgICAgICwgcmVzZXRCeUdDKGZhbHNlKQogICAgICAgICAsIHRvb2tTbG93UGF0aChmYWxz
ZSkKQEAgLTEwMCw1MyArNjgsMzEgQEAgc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICB7
CiAgICAgfQogCi0gICAgdm9pZCBpbml0R2V0QnlJZFNlbGYoVk0mIHZtLCBKU0NlbGwqIG93bmVy
LCBTdHJ1Y3R1cmUqIGJhc2VPYmplY3RTdHJ1Y3R1cmUpCisgICAgdm9pZCBpbml0R2V0QnlJZFNl
bGYoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIGJhc2VPYmplY3RTdHJ1Y3R1cmUs
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKICAgICB7Ci0gICAgICAgIGFjY2Vzc1R5cGUgPSBhY2Nl
c3NfZ2V0X2J5X2lkX3NlbGY7Ci0KLSAgICAgICAgdS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3Ry
dWN0dXJlLnNldCh2bSwgb3duZXIsIGJhc2VPYmplY3RTdHJ1Y3R1cmUpOwotICAgIH0KKyAgICAg
ICAgY2FjaGVUeXBlID0gQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjsKIAotICAgIHZvaWQgaW5pdEdl
dEJ5SWRMaXN0KFBvbHltb3JwaGljR2V0QnlJZExpc3QqIGxpc3QpCi0gICAgewotICAgICAgICBh
Y2Nlc3NUeXBlID0gYWNjZXNzX2dldF9ieV9pZF9saXN0OwotICAgICAgICB1LmdldEJ5SWRMaXN0
Lmxpc3QgPSBsaXN0OworICAgICAgICB1LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuc2V0
KHZtLCBvd25lciwgYmFzZU9iamVjdFN0cnVjdHVyZSk7CisgICAgICAgIHUuYnlJZFNlbGYub2Zm
c2V0ID0gb2Zmc2V0OwogICAgIH0KIAotICAgIC8vIFB1dEJ5SWQqCi0KLSAgICB2b2lkIGluaXRQ
dXRCeUlkVHJhbnNpdGlvbihWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogcHJldmlv
dXNTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCBjb25kaXRpb25TZXQsIGJvb2wgaXNEaXJlY3QpCisgICAgdm9pZCBpbml0UHV0QnlJZFJl
cGxhY2UoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIGJhc2VPYmplY3RTdHJ1Y3R1
cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKICAgICB7Ci0gICAgICAgIGlmIChpc0RpcmVjdCkK
LSAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGly
ZWN0OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX3B1dF9i
eV9pZF90cmFuc2l0aW9uX25vcm1hbDsKKyAgICAgICAgY2FjaGVUeXBlID0gQ2FjaGVUeXBlOjpQ
dXRCeUlkUmVwbGFjZTsKIAotICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3Ry
dWN0dXJlLnNldCh2bSwgb3duZXIsIHByZXZpb3VzU3RydWN0dXJlKTsKLSAgICAgICAgdS5wdXRC
eUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKLSAgICAg
ICAgdS5wdXRCeUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQucmVs
ZWFzZVJhd1BvaW50ZXIoKTsKKyAgICAgICAgdS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJl
LnNldCh2bSwgb3duZXIsIGJhc2VPYmplY3RTdHJ1Y3R1cmUpOworICAgICAgICB1LmJ5SWRTZWxm
Lm9mZnNldCA9IG9mZnNldDsKICAgICB9CiAKLSAgICB2b2lkIGluaXRQdXRCeUlkUmVwbGFjZShW
TSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSkKLSAg
ICB7Ci0gICAgICAgIGFjY2Vzc1R5cGUgPSBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2U7Ci0gICAg
Ci0gICAgICAgIHUucHV0QnlJZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZS5zZXQodm0sIG93
bmVyLCBiYXNlT2JqZWN0U3RydWN0dXJlKTsKLSAgICB9Ci0gICAgICAgIAotICAgIHZvaWQgaW5p
dFB1dEJ5SWRMaXN0KFBvbHltb3JwaGljUHV0QnlJZExpc3QqIGxpc3QpCi0gICAgewotICAgICAg
ICBhY2Nlc3NUeXBlID0gYWNjZXNzX3B1dF9ieV9pZF9saXN0OwotICAgICAgICB1LnB1dEJ5SWRM
aXN0Lmxpc3QgPSBsaXN0OwotICAgIH0KLSAgICAKLSAgICB2b2lkIGluaXRJbkxpc3QoUG9seW1v
cnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBsaXN0LCBpbnQgbGlzdFNpemUpCisgICAgdm9pZCBp
bml0U3R1YihzdGQ6OnVuaXF1ZV9wdHI8UG9seW1vcnBoaWNBY2Nlc3M+IHN0dWIpCiAgICAgewot
ICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX2luX2xpc3Q7Ci0gICAgICAgIHUuaW5MaXN0LnN0
cnVjdHVyZUxpc3QgPSBsaXN0OwotICAgICAgICB1LmluTGlzdC5saXN0U2l6ZSA9IGxpc3RTaXpl
OworICAgICAgICBjYWNoZVR5cGUgPSBDYWNoZVR5cGU6OlN0dWI7CisgICAgICAgIHUuc3R1YiA9
IHN0dWIucmVsZWFzZSgpOwogICAgIH0KLSAgICAgICAgCisKKyAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgYWRkQWNjZXNzQ2FzZSgKKyAgICAgICAgVk0mLCBDb2RlQmxvY2sqLCBjb25zdCBJZGVu
dGlmaWVyJiwgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGFjY2Vzc0Nhc2UpOworCiAgICAg
dm9pZCByZXNldChDb2RlQmxvY2sqKTsKIAogICAgIHZvaWQgZGVyZWYoKTsKQEAgLTE2NSwxNSAr
MTExLDkgQEAgc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICAgICAgc2VlbiA9IHRydWU7
CiAgICAgfQogICAgICAgICAKLSAgICBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBh
ZGRXYXRjaHBvaW50KAotICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgT2JqZWN0
UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCkp
Ci0gICAgewotICAgICAgICByZXR1cm4gV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjpl
bnN1cmVSZWZlcmVuY2VBbmRBZGRXYXRjaHBvaW50KAotICAgICAgICAgICAgd2F0Y2hwb2ludHMs
IGNvZGVCbG9jaywgdGhpcywgY29uZGl0aW9uKTsKLSAgICB9Ci0gICAgCi0gICAgaW50OF90IGFj
Y2Vzc1R5cGU7Ci0gICAgYm9vbCBzZWVuIDogMTsKKyAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGU7
CisgICAgQ2FjaGVUeXBlIGNhY2hlVHlwZTsKKyAgICBib29sIHNlZW47CiAgICAgYm9vbCByZXNl
dEJ5R0MgOiAxOwogICAgIGJvb2wgdG9va1Nsb3dQYXRoIDogMTsKIApAQCAtMjAzLDM0ICsxNDMs
MTMgQEAgc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKIAogICAgIHVuaW9uIHsKICAgICAgICAg
c3RydWN0IHsKLSAgICAgICAgICAgIC8vIEl0IHdvdWxkIGJlIHVud2lzZSB0byBwdXQgYW55dGhp
bmcgaGVyZSwgYXMgaXQgd2lsbCBzdXJlbHkgYmUgb3ZlcndyaXR0ZW4uCi0gICAgICAgIH0gdW5z
ZXQ7Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVj
dHVyZT4gYmFzZU9iamVjdFN0cnVjdHVyZTsKLSAgICAgICAgfSBnZXRCeUlkU2VsZjsKLSAgICAg
ICAgc3RydWN0IHsKLSAgICAgICAgICAgIFBvbHltb3JwaGljR2V0QnlJZExpc3QqIGxpc3Q7Ci0g
ICAgICAgIH0gZ2V0QnlJZExpc3Q7Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBXcml0
ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4gcHJldmlvdXNTdHJ1Y3R1cmU7Ci0gICAgICAgICAgICBX
cml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4gc3RydWN0dXJlOwotICAgICAgICAgICAgdm9pZCog
cmF3Q29uZGl0aW9uU2V0OwotICAgICAgICB9IHB1dEJ5SWRUcmFuc2l0aW9uOwotICAgICAgICBz
dHJ1Y3QgewogICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IGJhc2VPYmpl
Y3RTdHJ1Y3R1cmU7Ci0gICAgICAgIH0gcHV0QnlJZFJlcGxhY2U7Ci0gICAgICAgIHN0cnVjdCB7
Ci0gICAgICAgICAgICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiBsaXN0OwotICAgICAgICB9IHB1
dEJ5SWRMaXN0OwotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgUG9seW1vcnBoaWNBY2Nl
c3NTdHJ1Y3R1cmVMaXN0KiBzdHJ1Y3R1cmVMaXN0OwotICAgICAgICAgICAgaW50IGxpc3RTaXpl
OwotICAgICAgICB9IGluTGlzdDsKKyAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsK
KyAgICAgICAgfSBieUlkU2VsZjsKKyAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3MqIHN0dWI7CiAg
ICAgfSB1OwogCi0gICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKICAgICBD
b2RlTG9jYXRpb25DYWxsIGNhbGxSZXR1cm5Mb2NhdGlvbjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvPiB3YXRjaHBvaW50czsKIH07CiAKIGlubGlu
ZSBDb2RlT3JpZ2luIGdldFN0cnVjdHVyZVN0dWJJbmZvQ29kZU9yaWdpbihTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3RydWN0dXJlU3R1YkluZm8pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTg5NTE1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTkzNSw3ICs5MzUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSW4oTm9kZSog
bm9kCiAgICAgCiAgICAgaWYgKEpTU3RyaW5nKiBzdHJpbmcgPSBub2RlLT5jaGlsZDEoKS0+ZHlu
YW1pY0Nhc3RDb25zdGFudDxKU1N0cmluZyo+KCkpIHsKICAgICAgICAgaWYgKHN0cmluZy0+dHJ5
R2V0VmFsdWVJbXBsKCkgJiYgc3RyaW5nLT50cnlHZXRWYWx1ZUltcGwoKS0+aXNBdG9taWMoKSkg
ewotICAgICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV9qaXQuY29kZUJs
b2NrKCktPmFkZFN0dWJJbmZvKCk7CisgICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8gPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkU3R1YkluZm8oQWNjZXNzVHlwZTo6SW4pOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAg
ICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkocmV2aXNpb24gMTg5NTE1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTM4LDcgKzUzOCw3IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygK
ICAgICAgICAgICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdXNlZFJlZ2lzdGVy
c0ZvcihyZWNvcmQpOwogICAgICAgICAgICAgICAgIEdQUlJlZyByZXN1bHQgPSByZWNvcmQubG9j
YXRpb25zWzBdLmRpcmVjdEdQUigpOwogICAgICAgICAgICAgICAgIEdQUlJlZyBvYmogPSByZWNv
cmQubG9jYXRpb25zWzFdLmRpcmVjdEdQUigpOwotICAgICAgICAgICAgICAgIFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbyA9IGNvZGVCbG9jay0+YWRkU3R1YkluZm8oKTsgCisgICAgICAgICAg
ICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gY29kZUJsb2NrLT5hZGRTdHViSW5m
byhBY2Nlc3NUeXBlOjpJbik7IAogICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5jb2RlT3JpZ2lu
ID0gY29kZU9yaWdpbjsKICAgICAgICAgICAgICAgICBzdHViSW5mby0+Y2FsbFNpdGVJbmRleCA9
IGNoZWNrSW4uY2FsbFNpdGVJbmRleCgpOwogICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRj
aC5iYXNlR1BSID0gc3RhdGljX2Nhc3Q8aW50OF90PihvYmopOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9BY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9BY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5j
cHAJKHJldmlzaW9uIDE4OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQWNjZXNz
b3JDYWxsSklUU3R1YlJvdXRpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU1ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmgi
Ci0KLSNpZiBFTkFCTEUoSklUKQotCi0jaW5jbHVkZSAiQ2FsbExpbmtJbmZvLmgiCi0KLW5hbWVz
cGFjZSBKU0MgewotCi1BY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZTo6QWNjZXNzb3JDYWxsSklU
U3R1YlJvdXRpbmUoCi0gICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBjb2RlLCBWTSYg
dm0sIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua0luZm8+IGluZm8pCi0gICAgOiBHQ0F3YXJlSklU
U3R1YlJvdXRpbmUoY29kZSwgdm0pCi0gICAgLCBtX2NhbGxMaW5rSW5mbyhXVEY6Om1vdmUoaW5m
bykpCi17Ci19Ci0KLUFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lOjp+QWNjZXNzb3JDYWxsSklU
U3R1YlJvdXRpbmUoKQotewotfQotCi1ib29sIEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lOjp2
aXNpdFdlYWsoVk0mIHZtKQotewotICAgIG1fY2FsbExpbmtJbmZvLT52aXNpdFdlYWsodm0pOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEVO
QUJMRShKSVQpCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQWNjZXNzb3JDYWxs
SklUU3R1YlJvdXRpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0FjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmgJKHJldmlzaW9uIDE4OTUxNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmVf
aAotI2RlZmluZSBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZV9oCi0KLSNpZiBFTkFCTEUoSklU
KQotCi0jaW5jbHVkZSAiR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgiCi0KLW5hbWVzcGFjZSBKU0Mg
ewotCi1jbGFzcyBDYWxsTGlua0luZm87Ci0KLS8vIEpJVCBzdHViIHJvdXRpbmUgZm9yIHVzZSBi
eSBKYXZhU2NyaXB0IGFjY2Vzc29ycy4gVGhlc2Ugd2lsbCBiZSBtYWtpbmcgYSBKUwotLy8gY2Fs
bCB0aGF0IHJlcXVpcmVzIGlubGluZSBjYWNoaW5nLiAKLQotY2xhc3MgQWNjZXNzb3JDYWxsSklU
U3R1YlJvdXRpbmUgOiBwdWJsaWMgR0NBd2FyZUpJVFN0dWJSb3V0aW5lIHsKLXB1YmxpYzoKLSAg
ICBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZSgKLSAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmJiwgVk0mLCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtJbmZvPik7Ci0gICAgCi0g
ICAgdmlydHVhbCB+QWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUoKTsKLSAgICAKLSAgICB2aXJ0
dWFsIGJvb2wgdmlzaXRXZWFrKFZNJikgb3ZlcnJpZGU7Ci0gICAgCi0gICAgc3RkOjp1bmlxdWVf
cHRyPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm87Ci19OwotCi19IC8vIG5hbWVzcGFjZSBK
U0MKLQotI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0KLSNlbmRpZiAvLyBBY2Nlc3NvckNhbGxKSVRT
dHViUm91dGluZV9oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuaAkocmV2aXNpb24gMTg5NTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTYzLDcgKzU2Myw3IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIGJyYW5jaDMyKEVxdWFsLCByZWdzLnRhZ0dQUigpLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOwogI2VuZGlmCiAgICAgfQotICAgIAor
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBKdW1wIGJyYW5jaFN0cnVjdHVyZShSZWxh
dGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgVCBsZWZ0SGFuZFNpZGUsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQogICAgIHsKQEAgLTgzMiw2ICs4MzIsMTUgQEAgcHVibGljOgogI2VuZGlmCiAgICAg
fQogCisgICAgdm9pZCBib3hCb29sZWFuUGF5bG9hZChib29sIHZhbHVlLCBHUFJSZWcgcGF5bG9h
ZEdQUikKKyAgICB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoVmFsdWVGYWxzZSArIHZhbHVlKSwgcGF5bG9hZEdQUik7CisjZWxzZQorICAgICAgICBtb3Zl
KFRydXN0ZWRJbW0zMih2YWx1ZSksIHBheWxvYWRHUFIpOworI2VuZGlmCisgICAgfQorCiAgICAg
dm9pZCBib3hCb29sZWFuKEdQUlJlZyBib29sR1BSLCBKU1ZhbHVlUmVncyBib3hlZFJlZ3MpCiAg
ICAgewogICAgICAgICBib3hCb29sZWFuUGF5bG9hZChib29sR1BSLCBib3hlZFJlZ3MucGF5bG9h
ZEdQUigpKTsKQEAgLTgzOSw2ICs4NDgsMTcgQEAgcHVibGljOgogICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSwgYm94ZWRSZWdzLnRhZ0dQUigpKTsKICNlbmRp
ZgogICAgIH0KKworICAgIHZvaWQgYm94SW50MzIoR1BSUmVnIGludEdQUiwgSlNWYWx1ZVJlZ3Mg
Ym94ZWRSZWdzKQorICAgIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBtb3ZlKGludEdQ
UiwgYm94ZWRSZWdzLmdwcigpKTsKKyAgICAgICAgb3I2NChUcnVzdGVkSW1tNjQoVGFnVHlwZU51
bWJlciksIGJveGVkUmVncy5ncHIoKSk7CisjZWxzZQorICAgICAgICBtb3ZlKGludEdQUiwgYm94
ZWRSZWdzLnBheWxvYWRHUFIoKSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkludDMyVGFnKSwgYm94ZWRSZWdzLnRhZ0dQUigpKTsKKyNlbmRpZgorICAgIH0KICAgICAKICAg
ICB2b2lkIGNhbGxFeGNlcHRpb25GdXp6KCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmgJKHJldmlzaW9uIDE4OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICBzdHJ1Y3QgSW5zdHJ1Y3Rpb247CiAgICAgc3RydWN0IE9wZXJhbmRUeXBlczsKLSAgICBzdHJ1
Y3QgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0OwogICAgIHN0cnVjdCBTaW1wbGVKdW1w
VGFibGU7CiAgICAgc3RydWN0IFN0cmluZ0p1bXBUYWJsZTsKICAgICBzdHJ1Y3QgU3RydWN0dXJl
U3R1YkluZm87CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hl
R2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTg5NTE1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTM2LDIyICszNiwyNCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogc3RhdGljIFN0cnVjdHVyZVN0
dWJJbmZvKiBnYXJiYWdlU3R1YkluZm8oKQogewotICAgIHN0YXRpYyBTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8gPSBuZXcgU3RydWN0dXJlU3R1YkluZm8oKTsKKyAgICBzdGF0aWMgU3RydWN0
dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbmV3IFN0cnVjdHVyZVN0dWJJbmZvKEFjY2Vzc1R5cGU6
OkdldCk7CiAgICAgcmV0dXJuIHN0dWJJbmZvOwogfQogCi1KSVRJbmxpbmVDYWNoZUdlbmVyYXRv
cjo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVPcmln
aW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSkKK0pJVElubGluZUNhY2hlR2Vu
ZXJhdG9yOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcigKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NU
eXBlIGFjY2Vzc1R5cGUpCiAgICAgOiBtX2NvZGVCbG9jayhjb2RlQmxvY2spCiB7Ci0gICAgbV9z
dHViSW5mbyA9IG1fY29kZUJsb2NrID8gbV9jb2RlQmxvY2stPmFkZFN0dWJJbmZvKCkgOiBnYXJi
YWdlU3R1YkluZm8oKTsKKyAgICBtX3N0dWJJbmZvID0gbV9jb2RlQmxvY2sgPyBtX2NvZGVCbG9j
ay0+YWRkU3R1YkluZm8oYWNjZXNzVHlwZSkgOiBnYXJiYWdlU3R1YkluZm8oKTsKICAgICBtX3N0
dWJJbmZvLT5jb2RlT3JpZ2luID0gY29kZU9yaWdpbjsKICAgICBtX3N0dWJJbmZvLT5jYWxsU2l0
ZUluZGV4ID0gY2FsbFNpdGU7CiB9CiAKIEpJVEJ5SWRHZW5lcmF0b3I6OkpJVEJ5SWRHZW5lcmF0
b3IoCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2Fs
bFNpdGVJbmRleCBjYWxsU2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsCi0g
ICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIFNwaWxsUmVnaXN0ZXJzTW9k
ZSBzcGlsbE1vZGUpCi0gICAgOiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcihjb2RlQmxvY2ssIGNv
ZGVPcmlnaW4sIGNhbGxTaXRlKQorICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIEFjY2Vzc1R5cGUgYWNjZXNzVHlw
ZSwKKyAgICBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgSlNWYWx1ZVJlZ3MgYmFz
ZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsCisgICAgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSkK
KyAgICA6IEpJVElubGluZUNhY2hlR2VuZXJhdG9yKGNvZGVCbG9jaywgY29kZU9yaWdpbiwgY2Fs
bFNpdGUsIGFjY2Vzc1R5cGUpCiAgICAgLCBtX2Jhc2UoYmFzZSkKICAgICAsIG1fdmFsdWUodmFs
dWUpCiB7CkBAIC0xMTQsNyArMTE2LDggQEAgdm9pZCBKSVRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0
ZUZhc3RQYXRoQwogSklUR2V0QnlJZEdlbmVyYXRvcjo6SklUR2V0QnlJZEdlbmVyYXRvcigKICAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUlu
ZGV4IGNhbGxTaXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywKICAgICBKU1Zh
bHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxs
TW9kZSkKLSAgICA6IEpJVEJ5SWRHZW5lcmF0b3IoY29kZUJsb2NrLCBjb2RlT3JpZ2luLCBjYWxs
U2l0ZSwgdXNlZFJlZ2lzdGVycywgYmFzZSwgdmFsdWUsIHNwaWxsTW9kZSkKKyAgICA6IEpJVEJ5
SWRHZW5lcmF0b3IoCisgICAgICAgIGNvZGVCbG9jaywgY29kZU9yaWdpbiwgY2FsbFNpdGUsIEFj
Y2Vzc1R5cGU6OkdldCwgdXNlZFJlZ2lzdGVycywgYmFzZSwgdmFsdWUsIHNwaWxsTW9kZSkKIHsK
ICAgICBSRUxFQVNFX0FTU0VSVChiYXNlLnBheWxvYWRHUFIoKSAhPSB2YWx1ZS50YWdHUFIoKSk7
CiB9CkBAIC0xNDAsNyArMTQzLDggQEAgSklUUHV0QnlJZEdlbmVyYXRvcjo6SklUUHV0QnlJZEdl
bmVyYXRvcgogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4s
IENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJz
LAogICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc2NyYXRj
aCwgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSwKICAgICBFQ01BTW9kZSBlY21hTW9kZSwg
UHV0S2luZCBwdXRLaW5kKQotICAgIDogSklUQnlJZEdlbmVyYXRvcihjb2RlQmxvY2ssIGNvZGVP
cmlnaW4sIGNhbGxTaXRlLCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSwgc3BpbGxNb2RlKQor
ICAgIDogSklUQnlJZEdlbmVyYXRvcigKKyAgICAgICAgY29kZUJsb2NrLCBjb2RlT3JpZ2luLCBj
YWxsU2l0ZSwgQWNjZXNzVHlwZTo6UHV0LCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSwgc3Bp
bGxNb2RlKQogICAgICwgbV9zY3JhdGNoKHNjcmF0Y2gpCiAgICAgLCBtX2VjbWFNb2RlKGVjbWFN
b2RlKQogICAgICwgbV9wdXRLaW5kKHB1dEtpbmQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCShyZXZpc2lvbiAxODk1
MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgi
CiAjaW5jbHVkZSAiUHV0S2luZC5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCisjaW5jbHVk
ZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTQxLDcgKzQy
LDcgQEAgY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3Igewog
cHJvdGVjdGVkOgogICAgIEpJVElubGluZUNhY2hlR2VuZXJhdG9yKCkgeyB9Ci0gICAgSklUSW5s
aW5lQ2FjaGVHZW5lcmF0b3IoQ29kZUJsb2NrKiwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCk7
CisgICAgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoQ29kZUJsb2NrKiwgQ29kZU9yaWdpbiwgQ2Fs
bFNpdGVJbmRleCwgQWNjZXNzVHlwZSk7CiAgICAgCiBwdWJsaWM6CiAgICAgU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvKCkgY29uc3QgeyByZXR1cm4gbV9zdHViSW5mbzsgfQpAQCAtNTYsOCAr
NTcsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgSklUQnlJZEdlbmVyYXRvcigpIHsgfQogCiAgICAgSklU
QnlJZEdlbmVyYXRvcigKLSAgICAgICAgQ29kZUJsb2NrKiwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJ
bmRleCwgY29uc3QgUmVnaXN0ZXJTZXQmLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2
YWx1ZSwKLSAgICAgICAgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSk7CisgICAgICAgIENv
ZGVCbG9jayosIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIEFjY2Vzc1R5cGUsIGNvbnN0IFJl
Z2lzdGVyU2V0JiwgSlNWYWx1ZVJlZ3MgYmFzZSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWUs
IFNwaWxsUmVnaXN0ZXJzTW9kZSBzcGlsbE1vZGUpOwogICAgIAogcHVibGljOgogICAgIHZvaWQg
cmVwb3J0U2xvd1BhdGhDYWxsKE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBzbG93UGF0aEJlZ2luLCBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxODk1MTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMsMjQg
KzE2Myw2IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGJhc2VWYWx1ZS5nZXQoZXhlYywgaWRlbnQsIHNsb3QpKTsK
IH0KIAotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkQnVpbGRM
aXN0KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVk
SlNWYWx1ZSBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotewotICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwot
Ci0gICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHVpZCk7Ci0g
ICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUpOwotCi0gICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoYmFzZSk7Ci0gICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlKTsKLSAgICBib29sIGhh
c1Jlc3VsdCA9IGJhc2VWYWx1ZS5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaWRlbnQsIHNsb3QpOwot
ICAgIAotICAgIGlmIChhY2Nlc3NUeXBlID09IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJ
bmZvLT5hY2Nlc3NUeXBlKSkKLSAgICAgICAgYnVpbGRHZXRCeUlETGlzdChleGVjLCBiYXNlVmFs
dWUsIGlkZW50LCBzbG90LCAqc3R1YkluZm8pOwotCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShoYXNSZXN1bHQ/IHNsb3QuZ2V0VmFsdWUoZXhlYywgaWRlbnQpIDoganNVbmRlZmluZWQoKSk7
Ci19Ci0KIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJZE9wdGlt
aXplKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVk
SlNWYWx1ZSBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQogewogICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOwpAQCAtMTk3LDcgKzE3OSw2IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uR2UKICAgICAgICAgc3R1YkluZm8tPnNlZW4gPSB0cnVlOwogICAgIAogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoaGFzUmVzdWx0PyBzbG90LmdldFZhbHVlKGV4ZWMsIGlk
ZW50KSA6IGpzVW5kZWZpbmVkKCkpOwotCiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uSW5PcHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZv
KiBzdHViSW5mbywgSlNDZWxsKiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCoga2V5KQpAQCAtMzk0
LDkwICszNzUsNiBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjCiAg
ICAgICAgIHN0dWJJbmZvLT5zZWVuID0gdHJ1ZTsKIH0KIAotdm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblB1dEJ5SWRTdHJpY3RCdWlsZExpc3QoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZEJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7Ci0gICAgCi0gICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0s
IHVpZCk7Ci0gICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlw
ZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpOwotCi0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRCYXNlKTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUs
IHRydWUsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKLSAgICAKLSAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VWYWx1ZS5pc0NlbGwoKSA/IGJhc2VWYWx1ZS5hc0Nl
bGwoKS0+c3RydWN0dXJlKCp2bSkgOiBudWxscHRyOyAKLSAgICBiYXNlVmFsdWUucHV0KGV4ZWMs
IGlkZW50LCB2YWx1ZSwgc2xvdCk7Ci0KLSAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2Fz
dDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGJ1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIGlkZW50LCBz
bG90LCAqc3R1YkluZm8sIE5vdERpcmVjdCk7Ci19Ci0KLXZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25QdXRCeUlkTm9uU3RyaWN0QnVpbGRMaXN0KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJl
U3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRCYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotewotICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOwotICAgIAotICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZt
LCB1aWQpOwotICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5
cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKTsKLQotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkQmFzZSk7Ci0gICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVl
LCBmYWxzZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwotCi0gICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlVmFsdWUuaXNDZWxsKCkgPyBiYXNlVmFsdWUuYXNDZWxs
KCktPnN0cnVjdHVyZSgqdm0pIDogbnVsbHB0cjsKLSAgICBiYXNlVmFsdWUucHV0KGV4ZWMsIGlk
ZW50LCB2YWx1ZSwgc2xvdCk7Ci0gICAgCi0gICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nh
c3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpKQotICAgICAgICByZXR1cm47Ci0g
ICAgCi0gICAgYnVpbGRQdXRCeUlkTGlzdChleGVjLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgaWRl
bnQsIHNsb3QsICpzdHViSW5mbywgTm90RGlyZWN0KTsKLX0KLQotdm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExpc3QoRXhlY1N0YXRlKiBleGVjLCBT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCi17Ci0g
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7Ci0gICAgCi0gICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZy
b21VaWQodm0sIHVpZCk7Ci0gICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8
QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpOwotICAgIAotICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBKU09iamVjdCogYmFzZU9i
amVjdCA9IGFzT2JqZWN0KEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSkpOwotICAgIFB1dFBy
b3BlcnR5U2xvdCBzbG90KGJhc2VPYmplY3QsIHRydWUsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRC
eUlkQ29udGV4dCgpKTsKLQotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZU9iamVjdC0+
c3RydWN0dXJlKCp2bSk7ICAgIAotICAgIGJhc2VPYmplY3QtPnB1dERpcmVjdCgqdm0sIGlkZW50
LCB2YWx1ZSwgc2xvdCk7Ci0gICAgCi0gICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8
QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpKQotICAgICAgICByZXR1cm47Ci0gICAg
Ci0gICAgYnVpbGRQdXRCeUlkTGlzdChleGVjLCBiYXNlT2JqZWN0LCBzdHJ1Y3R1cmUsIGlkZW50
LCBzbG90LCAqc3R1YkluZm8sIERpcmVjdCk7Ci19Ci0KLXZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0QnVpbGRMaXN0KEV4ZWNTdGF0ZSogZXhlYywgU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotewotICAg
IFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOwotICAgIAotICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9t
VWlkKHZtLCB1aWQpOwotICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFj
Y2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKTsKLQotICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBKU09iamVjdCogYmFzZU9iamVjdCA9
IGFzT2JqZWN0KEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSkpOwotICAgIFB1dFByb3BlcnR5
U2xvdCBzbG90KGJhc2VPYmplY3QsIGZhbHNlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENv
bnRleHQoKSk7Ci0KLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VPYmplY3QtPnN0cnVj
dHVyZSgqdm0pOyAgICAKLSAgICBiYXNlT2JqZWN0LT5wdXREaXJlY3QoKnZtLCBpZGVudCwgdmFs
dWUsIHNsb3QpOwotCi0gICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlw
ZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYnVp
bGRQdXRCeUlkTGlzdChleGVjLCBiYXNlT2JqZWN0LCBzdHJ1Y3R1cmUsIGlkZW50LCBzbG90LCAq
c3R1YkluZm8sIERpcmVjdCk7Ci19Ci0KIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWFs
bG9jYXRlU3RvcmFnZUFuZEZpbmlzaFB1dChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNl
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBFbmNvZGVkSlNW
YWx1ZSB2YWx1ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAxODk1MTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2
IEBACiAKICNpZiBFTkFCTEUoSklUKQogCi0jaW5jbHVkZSAiQWNjZXNzb3JDYWxsSklUU3R1YlJv
dXRpbmUuaCIKICNpbmNsdWRlICJCaW5hcnlTd2l0Y2guaCIKICNpbmNsdWRlICJDQ2FsbEhlbHBl
cnMuaCIKICNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCkBAIC00MCw4ICszOSw3IEBACiAjaW5j
bHVkZSAiSklUSW5saW5lcy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJK
U0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oIgotI2luY2x1
ZGUgIlBvbHltb3JwaGljUHV0QnlJZExpc3QuaCIKKyNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vz
cy5oIgogI2luY2x1ZGUgIlJlZ0V4cE1hdGNoZXNBcnJheS5oIgogI2luY2x1ZGUgIlNjcmF0Y2hS
ZWdpc3RlckFsbG9jYXRvci5oIgogI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCkBAIC05NCwx
MyArOTIsMTAgQEAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUJsb2NrKiBjb2RlQgogfQog
CiBzdGF0aWMgdm9pZCByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoCi0gICAgVk0mIHZtLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwKLSAgICBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCwgY29uc3QgRnVuY3Rpb25QdHIgJnNsb3dQYXRoRnVuY3Rpb24sCisgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsCisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBjb25zdCBGdW5jdGlvblB0
ciAmc2xvd1BhdGhGdW5jdGlvbiwKICAgICBib29sIGNvbXBhY3QpCiB7Ci0gICAgaWYgKHN0cnVj
dHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKQotICAgICAgICB2bS5yZWdpc3Rl
cldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHN0dWJJbmZvLmFkZFdh
dGNocG9pbnQoY29kZUJsb2NrKSk7Ci0gICAgCiAgICAgLy8gT25seSBvcHRpbWl6ZSBvbmNlIQog
ICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBz
bG93UGF0aEZ1bmN0aW9uKTsKIApAQCAtMTI5LDMzICsxMjQsNDQgQEAgc3RhdGljIHZvaWQgcmVw
YXRjaEJ5SWRTZWxmQWNjZXNzKAogI2VuZGlmCiB9CiAKLXN0YXRpYyB2b2lkIGNoZWNrT2JqZWN0
UHJvcGVydHlDb25kaXRpb24oCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNv
bmRpdGlvbiwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bywKLSAgICBDQ2FsbEhlbHBlcnMmIGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWls
dXJlQ2FzZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQotewotICAgIGlmIChjb25kaXRpb24uaXNXYXRj
aGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKSB7Ci0gICAgICAgIGNvbmRp
dGlvbi5vYmplY3QoKS0+c3RydWN0dXJlKCktPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KAotICAg
ICAgICAgICAgc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2ssIGNvbmRpdGlvbikpOwot
ICAgICAgICByZXR1cm47CitzdGF0aWMgdm9pZCByZXNldEdldEJ5SURDaGVja0FuZExvYWQoU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbDMy
IHN0cnVjdHVyZUxhYmVsID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMy
QXRPZmZzZXQoLShpbnRwdHJfdClzdHViSW5mby5wYXRjaC5kZWx0YUNoZWNrSW1tVG9DYWxsKTsK
KyAgICBpZiAoTWFjcm9Bc3NlbWJsZXI6OmNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNoMzJX
aXRoUGF0Y2goKSkgeworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmV2ZXJ0SnVtcFJlcGxhY2Vt
ZW50VG9QYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaCgKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpzdGFydE9mUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2hPbkFkZHJlc3Moc3RydWN0dXJl
TGFiZWwpLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoCisgICAgICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+KHN0dWJJbmZvLnBh
dGNoLmJhc2VHUFIpLAorICAgICAgICAgICAgICAgIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQzMl90Pih1bnVzZWRQb2ludGVyKSk7CiAg
ICAgfQorICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIoc3RydWN0dXJlTGFiZWwsIHN0
YXRpY19jYXN0PGludDMyX3Q+KHVudXNlZFBvaW50ZXIpKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQor
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ29tcGFjdChzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRv
TG9hZE9yU3RvcmUpLCAwKTsKKyNlbHNlCisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDb21w
YWN0KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQo
c3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSksIDApOworICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoQ29tcGFjdChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0
YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvUGF5bG9hZExv
YWRPclN0b3JlKSwgMCk7CisjZW5kaWYKK30KIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
Y29uZGl0aW9uLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChjb25k
aXRpb24uc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNo
cG9pbnQoc3RydWN0dXJlKSk7Ci0gICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIoY29uZGl0aW9uLm9iamVjdCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgZmFpbHVyZUNhc2Vz
LmFwcGVuZCgKLSAgICAgICAgaml0LmJyYW5jaFN0cnVjdHVyZSgKLSAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHNjcmF0Y2hHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHN0cnVjdHVyZSkpOwot
fQotCi1zdGF0aWMgdm9pZCBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9ucygKLSAgICBjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgc2V0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAotICAgIENDYWxsSGVscGVycyYgaml0LCBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgR1BSUmVnIHNjcmF0Y2hHUFIpCi17
Ci0gICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogc2V0
KSB7Ci0gICAgICAgIGNoZWNrT2JqZWN0UHJvcGVydHlDb25kaXRpb24oCi0gICAgICAgICAgICBj
b25kaXRpb24sIGNvZGVCbG9jaywgc3R1YkluZm8sIGppdCwgZmFpbHVyZUNhc2VzLCBzY3JhdGNo
R1BSKTsKK3N0YXRpYyB2b2lkIHJlc2V0UHV0QnlJRENoZWNrQW5kTG9hZChTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8pCit7CisgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzIgc3RydWN0dXJl
TGFiZWwgPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldCgt
KGludHB0cl90KXN0dWJJbmZvLnBhdGNoLmRlbHRhQ2hlY2tJbW1Ub0NhbGwpOworICAgIGlmIChN
YWNyb0Fzc2VtYmxlcjo6Y2FuSnVtcFJlcGxhY2VQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaCgp
KSB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNo
YWJsZUJyYW5jaDMyV2l0aFBhdGNoKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0YXJ0
T2ZQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaE9uQWRkcmVzcyhzdHJ1Y3R1cmVMYWJlbCksCisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICBzdGF0
aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRD4oc3R1YkluZm8ucGF0Y2guYmFzZUdQ
UiksCisgICAgICAgICAgICAgICAgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAg
ICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KHVudXNlZFBvaW50ZXIpKTsKICAgICB9CisgICAg
TWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hJbnQzMihzdHJ1Y3R1cmVMYWJlbCwgc3RhdGljX2Nhc3Q8
aW50MzJfdD4odW51c2VkUG9pbnRlcikpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgTWFjcm9B
c3NlbWJsZXI6OnJlcGF0Y2hJbnQzMihzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxh
YmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0xvYWRPclN0b3JlKSwgMCk7
CisjZWxzZQorICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIoc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxs
VG9UYWdMb2FkT3JTdG9yZSksIDApOworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIo
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8u
cGF0Y2guZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUpLCAwKTsKKyNlbmRpZgogfQogCiBz
dGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBj
b25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgdGFyZ2V0KQpAQCAtMTY4LDYgKzE3NCw4IEBAIHN0
YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChTdHJ1Y3R1cmVTdHUKICAgICAgICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsKHRhcmdldCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgcmVz
ZXRHZXRCeUlEQ2hlY2tBbmRMb2FkKHN0dWJJbmZvKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxl
cjo6cmVwYXRjaEp1bXAoCiAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1w
QXRPZmZzZXQoCkBAIC0xNzUsNDI3ICsxODMsNiBAQCBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1
bXAoU3RydWN0dXJlU3R1CiAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHRhcmdldCkpOwogfQog
Ci1zdGF0aWMgdm9pZCBlbWl0UmVzdG9yZVNjcmF0Y2goTWFjcm9Bc3NlbWJsZXImIHN0dWJKaXQs
IGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIEdQUlJlZyBzY3JhdGNoR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCYgc3VjY2VzcywgTWFjcm9Bc3NlbWJsZXI6Okp1bXAmIGZhaWwsIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXMpCi17Ci0gICAgaWYgKG5lZWRUb1Jlc3RvcmVT
Y3JhdGNoKSB7Ci0gICAgICAgIHN0dWJKaXQucG9wVG9SZXN0b3JlKHNjcmF0Y2hHUFIpOwotICAg
ICAgICAKLSAgICAgICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOwotICAgICAgICAKLSAgICAg
ICAgLy8gbGluayBmYWlsdXJlIGNhc2VzIGhlcmUsIHNvIHdlIGNhbiBwb3Agc2NyYXRjaEdQUiwg
YW5kIHRoZW4ganVtcCBiYWNrLgotICAgICAgICBmYWlsdXJlQ2FzZXMubGluaygmc3R1YkppdCk7
Ci0gICAgICAgIAotICAgICAgICBzdHViSml0LnBvcFRvUmVzdG9yZShzY3JhdGNoR1BSKTsKLSAg
ICAgICAgCi0gICAgICAgIGZhaWwgPSBzdHViSml0Lmp1bXAoKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICAKLSAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7Ci19Ci0KLXN0YXRpYyB2
b2lkIGxpbmtSZXN0b3JlU2NyYXRjaChMaW5rQnVmZmVyJiBwYXRjaEJ1ZmZlciwgYm9vbCBuZWVk
VG9SZXN0b3JlU2NyYXRjaCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzcywgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgZmFpbCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlcywg
Q29kZUxvY2F0aW9uTGFiZWwgc3VjY2Vzc0xhYmVsLCBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2Fz
ZUJlZ2luKQotewotICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3VjY2Vzc0xhYmVsKTsK
LSAgICAgICAgCi0gICAgaWYgKG5lZWRUb1Jlc3RvcmVTY3JhdGNoKSB7Ci0gICAgICAgIHBhdGNo
QnVmZmVyLmxpbmsoZmFpbCwgc2xvd0Nhc2VCZWdpbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgCi0gICAgLy8gbGluayBmYWlsdXJlIGNhc2VzIGRpcmVjdGx5IGJhY2sgdG8gbm9ybWFs
IHBhdGgKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlcywgc2xvd0Nhc2VCZWdpbik7
Ci19Ci0KLXN0YXRpYyB2b2lkIGxpbmtSZXN0b3JlU2NyYXRjaChMaW5rQnVmZmVyJiBwYXRjaEJ1
ZmZlciwgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBm
YWlsLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzKQotewotICAgIGxpbmtS
ZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHN1Y2Nlc3Ms
IGZhaWwsIGZhaWx1cmVDYXNlcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRP
ZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSwgc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2Fz
ZSkpOwotfQotCi1lbnVtIEJ5SWRTdHViS2luZCB7Ci0gICAgR2V0VmFsdWUsCi0gICAgR2V0VW5k
ZWZpbmVkLAotICAgIENhbGxHZXR0ZXIsCi0gICAgQ2FsbEN1c3RvbUdldHRlciwKLSAgICBDYWxs
U2V0dGVyLAotICAgIENhbGxDdXN0b21TZXR0ZXIKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiB0
b1N0cmluZyhCeUlkU3R1YktpbmQga2luZCkKLXsKLSAgICBzd2l0Y2ggKGtpbmQpIHsKLSAgICBj
YXNlIEdldFZhbHVlOgotICAgICAgICByZXR1cm4gIkdldFZhbHVlIjsKLSAgICBjYXNlIEdldFVu
ZGVmaW5lZDoKLSAgICAgICAgcmV0dXJuICJHZXRVbmRlZmluZWQiOwotICAgIGNhc2UgQ2FsbEdl
dHRlcjoKLSAgICAgICAgcmV0dXJuICJDYWxsR2V0dGVyIjsKLSAgICBjYXNlIENhbGxDdXN0b21H
ZXR0ZXI6Ci0gICAgICAgIHJldHVybiAiQ2FsbEN1c3RvbUdldHRlciI7Ci0gICAgY2FzZSBDYWxs
U2V0dGVyOgotICAgICAgICByZXR1cm4gIkNhbGxTZXR0ZXIiOwotICAgIGNhc2UgQ2FsbEN1c3Rv
bVNldHRlcjoKLSAgICAgICAgcmV0dXJuICJDYWxsQ3VzdG9tU2V0dGVyIjsKLSAgICBkZWZhdWx0
OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICB9Ci19Ci0KLXN0YXRpYyBCeUlkU3R1YktpbmQga2luZEZvcihjb25zdCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0gICAgaWYgKHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpKQot
ICAgICAgICByZXR1cm4gR2V0VmFsdWU7Ci0gICAgaWYgKHNsb3QuaXNVbnNldCgpKQotICAgICAg
ICByZXR1cm4gR2V0VW5kZWZpbmVkOwotICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkp
Ci0gICAgICAgIHJldHVybiBDYWxsQ3VzdG9tR2V0dGVyOwotICAgIFJFTEVBU0VfQVNTRVJUKHNs
b3QuaXNDYWNoZWFibGVHZXR0ZXIoKSk7Ci0gICAgcmV0dXJuIENhbGxHZXR0ZXI7Ci19Ci0KLXN0
YXRpYyBGdW5jdGlvblB0ciBjdXN0b21Gb3IoY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQotewot
ICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpKQotICAgICAgICByZXR1cm4gRnVuY3Rp
b25QdHIoKTsKLSAgICByZXR1cm4gRnVuY3Rpb25QdHIoc2xvdC5jdXN0b21HZXR0ZXIoKSk7Ci19
Ci0KLXN0YXRpYyBCeUlkU3R1YktpbmQga2luZEZvcihjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNs
b3QpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQoIXNsb3QuaXNDYWNoZWFibGVQdXQoKSk7Ci0gICAg
aWYgKHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSkKLSAgICAgICAgcmV0dXJuIENhbGxTZXR0ZXI7
Ci0gICAgUkVMRUFTRV9BU1NFUlQoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpKTsKLSAgICByZXR1
cm4gQ2FsbEN1c3RvbVNldHRlcjsKLX0KLQotc3RhdGljIEZ1bmN0aW9uUHRyIGN1c3RvbUZvcihj
b25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0gICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxl
Q3VzdG9tKCkpCi0gICAgICAgIHJldHVybiBGdW5jdGlvblB0cigpOwotICAgIHJldHVybiBGdW5j
dGlvblB0cihzbG90LmN1c3RvbVNldHRlcigpKTsKLX0KLQotc3RhdGljIGJvb2wgZ2VuZXJhdGVC
eUlkU3R1YigKLSAgICBFeGVjU3RhdGUqIGV4ZWMsIEJ5SWRTdHViS2luZCBraW5kLCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsCi0gICAgRnVuY3Rpb25QdHIgY3VzdG9tLCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8sIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBj
b25kaXRpb25TZXQsCi0gICAgSlNPYmplY3QqIGFsdGVybmF0ZUJhc2UsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGJvb2wgbG9hZFRhcmdldEZyb21Qcm94eSwK
LSAgICBXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0LCBDb2RlTG9jYXRpb25MYWJlbCBzdWNj
ZXNzTGFiZWwsIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlTGFiZWwsCi0gICAgUmVmUHRyPEpJ
VFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUpCi17Ci0gICAgQVNTRVJUKGNvbmRpdGlvblNldC5z
dHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgp
KTsKLSAgICAKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBHUFJSZWcgYmFzZUdQUiA9
IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guYmFzZUdQUik7Ci0gICAgSlNWYWx1
ZVJlZ3MgdmFsdWVSZWdzID0gSlNWYWx1ZVJlZ3MoCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAg
ICAgICAgc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZVRhZ0dQUiksCi0j
ZW5kaWYKLSAgICAgICAgc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZUdQ
UikpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gVGVtcFJlZ2lzdGVyU2V0KHN0dWJJbmZvLnBh
dGNoLnVzZWRSZWdpc3RlcnMpLmdldEZyZWVHUFIoKTsKLSAgICBib29sIG5lZWRUb1Jlc3RvcmVT
Y3JhdGNoID0gc2NyYXRjaEdQUiA9PSBJbnZhbGlkR1BSUmVnOwotICAgIFJFTEVBU0VfQVNTRVJU
KCFuZWVkVG9SZXN0b3JlU2NyYXRjaCB8fCAoa2luZCA9PSBHZXRWYWx1ZSB8fCBraW5kID09IEdl
dFVuZGVmaW5lZCkpOwotICAgIAotICAgIENDYWxsSGVscGVycyBzdHViSml0KCZleGVjLT52bSgp
LCBleGVjLT5jb2RlQmxvY2soKSk7Ci0gICAgaWYgKG5lZWRUb1Jlc3RvcmVTY3JhdGNoKSB7Ci0g
ICAgICAgIHNjcmF0Y2hHUFIgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoCi0g
ICAgICAgICAgICBiYXNlR1BSLCB2YWx1ZVJlZ3MudGFnR1BSKCksIHZhbHVlUmVncy5wYXlsb2Fk
R1BSKCkpOwotICAgICAgICBzdHViSml0LnB1c2hUb1NhdmUoc2NyYXRjaEdQUik7Ci0gICAgICAg
IG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsKLQotICAgIEdQUlJlZyBiYXNlRm9yR2V0R1BS
OwotICAgIGlmIChsb2FkVGFyZ2V0RnJvbVByb3h5KSB7Ci0gICAgICAgIGJhc2VGb3JHZXRHUFIg
PSB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpOwotICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0
dWJKaXQuYnJhbmNoOCgKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgCi0g
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnR5cGVJ
bmZvVHlwZU9mZnNldCgpKSwgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKFB1cmVGb3J3YXJkaW5nUHJveHlUeXBlKSkpOwotCi0gICAgICAgIHN0dWJKaXQubG9hZFB0
cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU1Byb3h5Ojp0YXJnZXRPZmZzZXQo
KSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAKLSAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChz
dHViSml0LmJyYW5jaFN0cnVjdHVyZSgKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBK
U0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAotICAgICAgICAgICAgc3RydWN0dXJlKSk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgYmFzZUZvckdldEdQUiA9IGJhc2VHUFI7Ci0KLSAgICAgICAg
ZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFN0cnVjdHVyZSgKLSAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlRm9yR2V0R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCAKLSAg
ICAgICAgICAgIHN0cnVjdHVyZSkpOwotICAgIH0KLQotICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgaWYgKHN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3Bl
cnR5V2F0Y2hwb2ludCgpIHx8IGNvbmRpdGlvblNldC5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBv
aW50KCkpCi0gICAgICAgIHZtLT5yZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShw
cm9wZXJ0eU5hbWUsIHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7Ci0KLSAgICBp
ZiAod2F0Y2hwb2ludFNldCkKLSAgICAgICAgd2F0Y2hwb2ludFNldC0+YWRkKHN0dWJJbmZvLmFk
ZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7Ci0KLSAgICBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0
aW9ucygKLSAgICAgICAgY29uZGl0aW9uU2V0LCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHViSml0
LCBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOwotCi0gICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zm
c2V0KSkgewotICAgICAgICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmU7Ci0gICAgICAgIGlmIChj
b25kaXRpb25TZXQuaXNFbXB0eSgpKQotICAgICAgICAgICAgY3VyclN0cnVjdHVyZSA9IHN0cnVj
dHVyZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY3VyclN0cnVjdHVyZSA9IGNvbmRpdGlv
blNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAg
Y3VyclN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKCp2bSwg
b2Zmc2V0KTsKLSAgICB9Ci0gICAgCi0gICAgR1BSUmVnIGJhc2VGb3JBY2Nlc3NHUFIgPSBJbnZh
bGlkR1BSUmVnOwotICAgIGlmIChraW5kICE9IEdldFVuZGVmaW5lZCkgewotICAgICAgICBpZiAo
IWNvbmRpdGlvblNldC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIC8vIFdlIGNvdWxkIGhhdmUg
Y2xvYmJlcmVkIHNjcmF0Y2hHUFIgZWFybGllciwgc28gd2UgaGF2ZSB0byByZWxvYWQgZnJvbSBi
YXNlR1BSIHRvIGdldCB0aGUgdGFyZ2V0LgotICAgICAgICAgICAgaWYgKGxvYWRUYXJnZXRGcm9t
UHJveHkpCi0gICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTUHJveHk6OnRhcmdldE9mZnNldCgpKSwgYmFzZUZvckdldEdQUik7
Ci0gICAgICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
YWx0ZXJuYXRlQmFzZSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgYmFzZUZvckFjY2Vzc0dQ
UiA9IHNjcmF0Y2hHUFI7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBGb3IgcHJv
eHkgb2JqZWN0cywgd2UgbmVlZCB0byBkbyBhbGwgdGhlIFN0cnVjdHVyZSBjaGVja3MgYmVmb3Jl
IG1vdmluZyB0aGUgYmFzZUdQUiBpbnRvCi0gICAgICAgICAgICAvLyBiYXNlRm9yR2V0R1BSIGJl
Y2F1c2UgaWYgd2UgZmFpbCBhbnkgb2YgdGhlIGNoZWNrcyB0aGVuIHdlIHdvdWxkIGhhdmUgdGhl
IHdyb25nIHZhbHVlIGluIGJhc2VHUFIKLSAgICAgICAgICAgIC8vIG9uIHRoZSBzbG93IHBhdGgu
Ci0gICAgICAgICAgICBpZiAobG9hZFRhcmdldEZyb21Qcm94eSkKLSAgICAgICAgICAgICAgICBz
dHViSml0Lm1vdmUoc2NyYXRjaEdQUiwgYmFzZUZvckdldEdQUik7Ci0gICAgICAgICAgICBiYXNl
Rm9yQWNjZXNzR1BSID0gYmFzZUZvckdldEdQUjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEdQ
UlJlZyBsb2FkZWRWYWx1ZUdQUiA9IEludmFsaWRHUFJSZWc7Ci0gICAgaWYgKGtpbmQgPT0gR2V0
VW5kZWZpbmVkKQotICAgICAgICBzdHViSml0Lm1vdmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQo
KSwgdmFsdWVSZWdzKTsKLSAgICBlbHNlIGlmIChraW5kICE9IENhbGxDdXN0b21HZXR0ZXIgJiYg
a2luZCAhPSBDYWxsQ3VzdG9tU2V0dGVyKSB7Ci0gICAgICAgIGlmIChraW5kID09IEdldFZhbHVl
KQotICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIgPSB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUiA9IHNjcmF0Y2hHUFI7Ci0g
ICAgICAgIAotICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUjsKLSAgICAgICAgaWYgKGlzSW5saW5l
T2Zmc2V0KG9mZnNldCkpCi0gICAgICAgICAgICBzdG9yYWdlR1BSID0gYmFzZUZvckFjY2Vzc0dQ
UjsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZUZvckFjY2Vzc0dQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgbG9hZGVkVmFsdWVHUFIpOwotICAgICAgICAgICAgc3RvcmFnZUdQUiA9IGxvYWRlZFZh
bHVlR1BSOwotICAgICAgICB9Ci0gICAgICAgIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAg
IHN0dWJKaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9mZnNl
dFJlbGF0aXZlVG9CYXNlKG9mZnNldCkpLCBsb2FkZWRWYWx1ZUdQUik7Ci0jZWxzZQotICAgICAg
ICBpZiAoa2luZCA9PSBHZXRWYWx1ZSkKLSAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKG9mZnNl
dCkgKyBUYWdPZmZzZXQpLCB2YWx1ZVJlZ3MudGFnR1BSKCkpOwotICAgICAgICBzdHViSml0Lmxv
YWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBvZmZzZXRSZWxhdGl2ZVRv
QmFzZShvZmZzZXQpICsgUGF5bG9hZE9mZnNldCksIGxvYWRlZFZhbHVlR1BSKTsKLSNlbmRpZgot
ICAgIH0KLQotICAgIC8vIFN0dWZmIGZvciBjdXN0b20gZ2V0dGVycy4KLSAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBvcGVyYXRpb25DYWxsOwotICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGhhbmRs
ZXJDYWxsOwotCi0gICAgLy8gU3R1ZmYgZm9yIEpTIGdldHRlcnMuCi0gICAgTWFjcm9Bc3NlbWJs
ZXI6OkRhdGFMYWJlbFB0ciBhZGRyZXNzT2ZMaW5rRnVuY3Rpb25DaGVjazsKLSAgICBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBmYXN0UGF0aENhbGw7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgc2xv
d1BhdGhDYWxsOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua0luZm8+IGNhbGxMaW5rSW5m
bzsKLQotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3MsIGZhaWw7Ci0gICAgaWYgKGtp
bmQgIT0gR2V0VmFsdWUgJiYga2luZCAhPSBHZXRVbmRlZmluZWQpIHsKLSAgICAgICAgLy8gTmVl
ZCB0byBtYWtlIHN1cmUgdGhhdCB3aGVuZXZlciB0aGlzIGNhbGwgaXMgbWFkZSBpbiB0aGUgZnV0
dXJlLCB3ZSByZW1lbWJlciB0aGUKLSAgICAgICAgLy8gcGxhY2UgdGhhdCB3ZSBtYWRlIGl0IGZy
b20uIEl0IGp1c3Qgc28gaGFwcGVucyB0byBiZSB0aGUgcGxhY2UgdGhhdCB3ZSBhcmUgYXQKLSAg
ICAgICAgLy8gcmlnaHQgbm93IQotICAgICAgICBzdHViSml0LnN0b3JlMzIoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMihzdHViSW5mby5jYWxsU2l0ZUluZGV4LmJpdHMoKSksCi0gICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KEpT
U3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7Ci0KLSAgICAgICAgaWYgKGtpbmQgPT0gQ2FsbEdldHRl
ciB8fCBraW5kID09IENhbGxTZXR0ZXIpIHsKLSAgICAgICAgICAgIC8vIENyZWF0ZSBhIEpTIGNh
bGwgdXNpbmcgYSBKUyBjYWxsIGlubGluZSBjYWNoZS4gQXNzdW1lIHRoYXQ6Ci0gICAgICAgICAg
ICAvLwotICAgICAgICAgICAgLy8gLSBTUCBpcyBhbGlnbmVkIGFuZCByZXByZXNlbnRzIHRoZSBl
eHRlbnQgb2YgdGhlIGNhbGxpbmcgY29tcGlsZXIncyBzdGFjayB1c2FnZS4KLSAgICAgICAgICAg
IC8vCi0gICAgICAgICAgICAvLyAtIEZQIGlzIHNldCBjb3JyZWN0bHkgKGkuZS4gaXQgcG9pbnRz
IHRvIHRoZSBjYWxsZXIncyBjYWxsIGZyYW1lIGhlYWRlcikuCi0gICAgICAgICAgICAvLwotICAg
ICAgICAgICAgLy8gLSBTUCAtIEZQIGlzIGFuIGFsaWduZWQgZGlmZmVyZW5jZS4KLSAgICAgICAg
ICAgIC8vCi0gICAgICAgICAgICAvLyAtIEFueSBieXRlIGJldHdlZW4gRlAgKGV4Y2x1c2l2ZSkg
YW5kIFNQIChpbmNsdXNpdmUpIGNvdWxkIGJlIGxpdmUgaW4gdGhlIGNhbGxpbmcKLSAgICAgICAg
ICAgIC8vICAgY29kZS4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBUaGVyZWZvcmUs
IHdlIHRlbXBvcmFyaWx5IGdyb3cgdGhlIHN0YWNrIGZvciB0aGUgcHVycG9zZSBvZiB0aGUgY2Fs
bCBhbmQgdGhlbgotICAgICAgICAgICAgLy8gc2hyaW5rIGl0IGFmdGVyLgotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBjYWxsTGlua0luZm8gPSBzdGQ6Om1ha2VfdW5pcXVlPENhbGxMaW5rSW5m
bz4oKTsKLQotICAgICAgICAgICAgLy8gRklYTUU6IElmIHdlIGdlbmVyYXRlZCBhIHBvbHltb3Jw
aGljIGNhbGwgc3R1YiB0aGF0IGp1bXBlZCBiYWNrIHRvIHRoZSBnZXR0ZXIKLSAgICAgICAgICAg
IC8vIHN0dWIsIHdoaWNoIHRoZW4ganVtcGVkIGJhY2sgdG8gdGhlIG1haW4gY29kZSwgdGhlbiB3
ZSdkIGhhdmUgYSByZWFjaGFiaWxpdHkKLSAgICAgICAgICAgIC8vIHNpdHVhdGlvbiB0aGF0IHRo
ZSBHQyBkb2Vzbid0IGtub3cgYWJvdXQuIFRoZSBHQyB3b3VsZCBlbnN1cmUgdGhhdCB0aGUgcG9s
eW1vcnBoaWMKLSAgICAgICAgICAgIC8vIGNhbGwgc3R1YiBzdGF5ZWQgYWxpdmUsIGFuZCBpdCB3
b3VsZCBlbnN1cmUgdGhhdCB0aGUgbWFpbiBjb2RlIHN0YXllZCBhbGl2ZSwgYnV0Ci0gICAgICAg
ICAgICAvLyBpdCB3b3VsZG4ndCBrbm93IHRoYXQgdGhlIGdldHRlciBzdHViIHdhcyBhbGl2ZS4g
SWRlYWxseSBKSVQgc3R1YiByb3V0aW5lcyB3b3VsZAotICAgICAgICAgICAgLy8gYmUgR0Mgb2Jq
ZWN0cywgYW5kIHRoZW4gd2UnZCBiZSBhYmxlIHRvIHNheSB0aGF0IHRoZSBwb2x5bW9ycGhpYyBj
YWxsIHN0dWIgaGFzIGEKLSAgICAgICAgICAgIC8vIHJlZmVyZW5jZSB0byB0aGUgZ2V0dGVyIHN0
dWIuCi0gICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQ4OTE0Ci0gICAgICAgICAgICBjYWxsTGlua0luZm8tPmRpc2FsbG93U3R1YnMoKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJ
bmZvOjpDYWxsLCBzdHViSW5mby5jb2RlT3JpZ2luLCBsb2FkZWRWYWx1ZUdQUik7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBkb25lOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICAvLyBUaGVyZSBpcyBhICd0aGlzJyBhcmd1bWVudCBidXQgbm90
aGluZyBlbHNlLgotICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZQYXJhbWV0ZXJzID0gMTsK
LSAgICAgICAgICAgIC8vIC4uLiB1bmxlc3Mgd2UncmUgY2FsbGluZyBhIHNldHRlci4KLSAgICAg
ICAgICAgIGlmIChraW5kID09IENhbGxTZXR0ZXIpCi0gICAgICAgICAgICAgICAgbnVtYmVyT2ZQ
YXJhbWV0ZXJzKys7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEdldCB0aGUgYWNjZXNz
b3I7IGlmIHRoZXJlIGFpbid0IG9uZSB0aGVuIHRoZSByZXN1bHQgaXMganNVbmRlZmluZWQoKS4K
LSAgICAgICAgICAgIGlmIChraW5kID09IENhbGxTZXR0ZXIpIHsKLSAgICAgICAgICAgICAgICBz
dHViSml0LmxvYWRQdHIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGxvYWRlZFZhbHVlR1BSLCBHZXR0ZXJTZXR0ZXI6Om9mZnNldE9mU2V0dGVyKCkpLAotICAg
ICAgICAgICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUik7Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MobG9hZGVkVmFsdWVHUFIsIEdldHRlclNldHRlcjo6b2Zmc2V0
T2ZHZXR0ZXIoKSksCi0gICAgICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHJldHVyblVuZGVmaW5l
ZCA9IHN0dWJKaXQuYnJhbmNoVGVzdFB0cigKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6WmVybywgbG9hZGVkVmFsdWVHUFIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICB1bnNp
Z25lZCBudW1iZXJPZlJlZ3NGb3JDYWxsID0KLSAgICAgICAgICAgICAgICBKU1N0YWNrOjpDYWxs
RnJhbWVIZWFkZXJTaXplICsgbnVtYmVyT2ZQYXJhbWV0ZXJzOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCA9Ci0gICAgICAgICAgICAgICAg
bnVtYmVyT2ZSZWdzRm9yQ2FsbCAqIHNpemVvZihSZWdpc3RlcikgLSBzaXplb2YoQ2FsbGVyRnJh
bWVBbmRQQyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHVuc2lnbmVkIGFsaWduZWROdW1i
ZXJPZkJ5dGVzRm9yQ2FsbCA9Ci0gICAgICAgICAgICAgICAgV1RGOjpyb3VuZFVwVG9NdWx0aXBs
ZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgbnVtYmVyT2ZCeXRlc0ZvckNhbGwpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBzdHViSml0LnN1YlB0cigKLSAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2FsbCksCi0g
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MgY2FsbGVlRnJh
bWUgPSBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcygKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsCi0gICAgICAgICAgICAgICAgLXN0YXRpY19jYXN0
PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIHN0dWJKaXQuc3RvcmUzMigKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKG51bWJlck9mUGFyYW1ldGVycyksCi0gICAgICAgICAgICAgICAgY2Fs
bGVlRnJhbWUud2l0aE9mZnNldCgKLSAgICAgICAgICAgICAgICAgICAgSlNTdGFjazo6QXJndW1l
bnRDb3VudCAqIHNpemVvZihSZWdpc3RlcikgKyBQYXlsb2FkT2Zmc2V0KSk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIHN0dWJKaXQuc3RvcmVDZWxsKAotICAgICAgICAgICAgICAgIGxvYWRl
ZFZhbHVlR1BSLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KEpTU3RhY2s6OkNhbGxlZSAqIHNpemVv
ZihSZWdpc3RlcikpKTsKLQotICAgICAgICAgICAgc3R1YkppdC5zdG9yZUNlbGwoCi0gICAgICAg
ICAgICAgICAgYmFzZUZvckdldEdQUiwKLSAgICAgICAgICAgICAgICBjYWxsZWVGcmFtZS53aXRo
T2Zmc2V0KAotICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgw
KS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgaWYgKGtpbmQgPT0gQ2FsbFNldHRlcikgewotICAgICAgICAgICAgICAgIHN0dWJKaXQuc3Rv
cmVWYWx1ZSgKLSAgICAgICAgICAgICAgICAgICAgdmFsdWVSZWdzLAotICAgICAgICAgICAgICAg
ICAgICBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KAotICAgICAgICAgICAgICAgICAgICAgICAgdmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIHNsb3dDYXNlID0gc3R1YkppdC5icmFuY2hQdHJXaXRoUGF0Y2goCi0gICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBsb2FkZWRWYWx1ZUdQUiwgYWRkcmVzc09m
TGlua0Z1bmN0aW9uQ2hlY2ssCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIoMCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBmYXN0UGF0aENhbGwgPSBz
dHViSml0Lm5lYXJDYWxsKCk7Ci0KLSAgICAgICAgICAgIHN0dWJKaXQuYWRkUHRyKAotICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoY29kZUJsb2NrLT5zdGFja1Bv
aW50ZXJPZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLAotICAgICAgICAgICAgICAgIEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpz
dGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsR2V0dGVy
KQotICAgICAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBSZXN1bHRzKHZhbHVlUmVncyk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGRvbmUuYXBwZW5kKHN0dWJKaXQuanVtcCgpKTsKLSAgICAg
ICAgICAgIHNsb3dDYXNlLmxpbmsoJnN0dWJKaXQpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBzdHViSml0Lm1vdmUobG9hZGVkVmFsdWVHUFIsIEdQUkluZm86OnJlZ1QwKTsKLSNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQotICAgICAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIEdQUkluZm86OnJlZ1QxKTsKLSNlbmRpZgot
ICAgICAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGNh
bGxMaW5rSW5mby5nZXQoKSksIEdQUkluZm86OnJlZ1QyKTsKLSAgICAgICAgICAgIHNsb3dQYXRo
Q2FsbCA9IHN0dWJKaXQubmVhckNhbGwoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3R1
YkppdC5hZGRQdHIoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
Mihjb2RlQmxvY2stPnN0YWNrUG9pbnRlck9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksCi0g
ICAgICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCi0gICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAgICAgIGlm
IChraW5kID09IENhbGxHZXR0ZXIpCi0gICAgICAgICAgICAgICAgc3R1YkppdC5zZXR1cFJlc3Vs
dHModmFsdWVSZWdzKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZG9uZS5hcHBlbmQoc3R1
YkppdC5qdW1wKCkpOwotICAgICAgICAgICAgcmV0dXJuVW5kZWZpbmVkLmxpbmsoJnN0dWJKaXQp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsR2V0dGVyKQotICAg
ICAgICAgICAgICAgIHN0dWJKaXQubW92ZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCB2YWx1
ZVJlZ3MpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBkb25lLmxpbmsoJnN0dWJKaXQpOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gZ2V0dGVyOiBFbmNvZGVkSlNWYWx1ZSAo
KkdldFZhbHVlRnVuYykoRXhlY1N0YXRlKiwgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSk7Ci0gICAgICAgICAgICAvLyBzZXR0ZXI6IHZv
aWQgKCpQdXRWYWx1ZUZ1bmMpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBiYXNlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSk7Ci0jaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICAgICAgICAgIGlmIChraW5kID09IENhbGxDdXN0b21HZXR0ZXIpCi0gICAgICAgICAg
ICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUZvckFjY2Vzc0dQ
UiwgYmFzZUZvckdldEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocHJvcGVydHlO
YW1lLmltcGwoKSkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHN0dWJKaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VGb3JBY2Nlc3NHUFIsIGJhc2VGb3JHZXRH
UFIsIHZhbHVlUmVncy5ncHIoKSk7Ci0jZWxzZQotICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ2Fs
bEN1c3RvbUdldHRlcikKLSAgICAgICAgICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShiYXNlRm9yQWNjZXNzR1BSLCBiYXNlRm9yR2V0R1BSLCBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihwcm9wZXJ0eU5hbWUuaW1wbCgpKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUZvckFjY2Vz
c0dQUiwgYmFzZUZvckdldEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpDZWxsVGFnKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgdmFsdWVSZWdzLnRhZ0dQUigpKTsK
LSNlbmRpZgotICAgICAgICAgICAgc3R1YkppdC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgJnZtLT50b3BDYWxsRnJhbWUpOwotCi0gICAgICAgICAgICBvcGVyYXRpb25DYWxs
ID0gc3R1YkppdC5jYWxsKCk7Ci0gICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsQ3VzdG9tR2V0
dGVyKQotICAgICAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBSZXN1bHRzKHZhbHVlUmVncyk7Ci0g
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub0V4Y2VwdGlvbiA9IHN0dWJKaXQuZW1p
dEV4Y2VwdGlvbkNoZWNrKENDYWxsSGVscGVyczo6SW52ZXJ0ZWRFeGNlcHRpb25DaGVjayk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHMoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKHZtKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwotICAg
ICAgICAgICAgaGFuZGxlckNhbGwgPSBzdHViSml0LmNhbGwoKTsKLSAgICAgICAgICAgIHN0dWJK
aXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBu
b0V4Y2VwdGlvbi5saW5rKCZzdHViSml0KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbWl0UmVz
dG9yZVNjcmF0Y2goc3R1YkppdCwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHNjcmF0Y2hHUFIsIHN1
Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcyk7Ci0gICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcigqdm0sIHN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygpLCBKSVRDb21waWxhdGlvbkNhbkZh
aWwpOwotICAgIGlmIChwYXRjaEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBu
ZWVkVG9SZXN0b3JlU2NyYXRjaCwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzLCBzdWNjZXNz
TGFiZWwsIHNsb3dDYXNlTGFiZWwpOwotICAgIGlmIChraW5kID09IENhbGxDdXN0b21HZXR0ZXIg
fHwga2luZCA9PSBDYWxsQ3VzdG9tU2V0dGVyKSB7Ci0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmso
b3BlcmF0aW9uQ2FsbCwgY3VzdG9tKTsKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhoYW5kbGVy
Q2FsbCwgbG9va3VwRXhjZXB0aW9uSGFuZGxlcik7Ci0gICAgfSBlbHNlIGlmIChraW5kID09IENh
bGxHZXR0ZXIgfHwga2luZCA9PSBDYWxsU2V0dGVyKSB7Ci0gICAgICAgIGNhbGxMaW5rSW5mby0+
c2V0Q2FsbExvY2F0aW9ucyhwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoc2xvd1BhdGhD
YWxsKSwKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YoYWRkcmVzc09mTGlua0Z1
bmN0aW9uQ2hlY2spLAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxs
KGZhc3RQYXRoQ2FsbCkpOwotCi0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoCi0gICAgICAgICAg
ICBzbG93UGF0aENhbGwsIENvZGVMb2NhdGlvbkxhYmVsKHZtLT5nZXRDVElTdHViKGxpbmtDYWxs
VGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwotICAgIH0KLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgY29kZSA9IEZJTkFMSVpFX0NPREVfRk9SKAotICAgICAgICBleGVjLT5jb2RlQmxv
Y2soKSwgcGF0Y2hCdWZmZXIsCi0gICAgICAgICgiJXMgYWNjZXNzIHN0dWIgZm9yICVzLCByZXR1
cm4gcG9pbnQgJXAiLAotICAgICAgICAgICAgdG9TdHJpbmcoa2luZCksIHRvQ1N0cmluZygqZXhl
Yy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwKLSAgICAgICAgICAgIHN1Y2Nlc3NMYWJlbC5leGVjdXRh
YmxlQWRkcmVzcygpKSk7Ci0gICAgCi0gICAgaWYgKGtpbmQgPT0gQ2FsbEdldHRlciB8fCBraW5k
ID09IENhbGxTZXR0ZXIpCi0gICAgICAgIHN0dWJSb3V0aW5lID0gYWRvcHRSZWYobmV3IEFjY2Vz
c29yQ2FsbEpJVFN0dWJSb3V0aW5lKGNvZGUsICp2bSwgV1RGOjptb3ZlKGNhbGxMaW5rSW5mbykp
KTsKLSAgICBlbHNlCi0gICAgICAgIHN0dWJSb3V0aW5lID0gY3JlYXRlSklUU3R1YlJvdXRpbmUo
Y29kZSwgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCB0cnVlKTsKLSAgICAKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQogZW51bSBJbmxpbmVDYWNoZUFjdGlvbiB7CiAgICAgR2l2ZVVw
T25DYWNoZSwKICAgICBSZXRyeUNhY2hlTGF0ZXIsCkBAIC02MjksMTMyICsyMTYsOTkgQEAgc3Rh
dGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0QnlJRAogICAgIGlmIChPcHRpb25zOjpm
b3JjZUlDRmFpbHVyZSgpKQogICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKICAgICAKLSAg
ICAvLyBGSVhNRTogV3JpdGUgYSB0ZXN0IHRoYXQgcHJvdmVzIHdlIG5lZWQgdG8gY2hlY2sgZm9y
IHJlY3Vyc2lvbiBoZXJlIGp1c3QKLSAgICAvLyBsaWtlIHRoZSBpbnRlcnByZXRlciBkb2VzLCB0
aGVuIGFkZCBhIGNoZWNrIGZvciByZWN1cnNpb24uCisgICAgLy8gRklYTUU6IENhY2hlIHByb3Bl
cnR5IGFjY2VzcyBmb3IgaW1tZWRpYXRlcy4KKyAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkK
KyAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFNj
cmlwdEV4ZWN1dGFibGUqIG93bmVyID0gY29kZUJsb2NrLT5vd25lclNjcmlwdEV4ZWN1dGFibGUo
KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogCi0gICAgaWYgKChpc0pTQXJyYXkoYmFzZVZh
bHVlKSB8fCBpc0pTU3RyaW5nKGJhc2VWYWx1ZSkpICYmIHByb3BlcnR5TmFtZSA9PSBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7Ci0gICAgICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGlj
X2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKTsKLSNpZiBVU0UoSlNWQUxVRTMy
XzY0KQotICAgICAgICBHUFJSZWcgcmVzdWx0VGFnR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihz
dHViSW5mby5wYXRjaC52YWx1ZVRhZ0dQUik7Ci0jZW5kaWYKLSAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVHUFIpOwotCi0g
ICAgICAgIE1hY3JvQXNzZW1ibGVyIHN0dWJKaXQ7Ci0KLSAgICAgICAgaWYgKGlzSlNBcnJheShi
YXNlVmFsdWUpKSB7Ci0gICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IFRlbXBSZWdpc3Rl
clNldChzdHViSW5mby5wYXRjaC51c2VkUmVnaXN0ZXJzKS5nZXRGcmVlR1BSKCk7Ci0gICAgICAg
ICAgICBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gZmFsc2U7Ci0KLSAgICAgICAgICAgIGlm
IChzY3JhdGNoR1BSID09IEludmFsaWRHUFJSZWcpIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAg
ICAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hH
UFIoYmFzZUdQUiwgcmVzdWx0R1BSKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgc2NyYXRjaEdQ
UiA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCByZXN1bHRHUFIs
IHJlc3VsdFRhZ0dQUik7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBzdHViSml0LnB1c2hUb1Nh
dmUoc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSB0
cnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QgZmFpbHVyZUNhc2VzOwotCi0gICAgICAgICAgICBzdHViSml0LmxvYWQ4KE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBzY3Jh
dGNoR1BSKTsKLSAgICAgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2hU
ZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoSXNBcnJheSkpKTsKLSAgICAgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQo
c3R1YkppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spKSk7Ci0KLSAgICAg
ICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIHN0
dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3Rv
cmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIGZhaWx1cmVD
YXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHNj
cmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCkpKTsKLQotICAgICAgICAg
ICAgc3R1YkppdC5tb3ZlKHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7Ci0jaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICAgICAgICAgIHN0dWJKaXQub3I2NChBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW02
NChUYWdUeXBlTnVtYmVyKSwgcmVzdWx0R1BSKTsKLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0g
ICAgICAgICAgICBzdHViSml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6SW50MzJUYWcpLCByZXN1bHRUYWdHUFIpOwotI2VuZGlmCisgICAgc3RkOjp1bmlxdWVf
cHRyPEFjY2Vzc0Nhc2U+IG5ld0Nhc2U7CiAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIHN1Y2Nlc3MsIGZhaWw7Ci0KLSAgICAgICAgICAgIGVtaXRSZXN0b3JlU2NyYXRjaChzdHVi
Sml0LCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc2NyYXRjaEdQUiwgc3VjY2VzcywgZmFpbCwgZmFp
bHVyZUNhc2VzKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcigqdm0sIHN0dWJKaXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKLSAg
ICAgICAgICAgIGlmIChwYXRjaEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgICAgICBsaW5rUmVzdG9yZVNj
cmF0Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdHViSW5mbywgc3VjY2Vz
cywgZmFpbCwgZmFpbHVyZUNhc2VzKTsKLQotICAgICAgICAgICAgc3R1YkluZm8uc3R1YlJvdXRp
bmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAotICAgICAgICAgICAgICAgIGV4ZWMtPmNvZGVC
bG9jaygpLCBwYXRjaEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAoIkdldEJ5SWQgYXJyYXkgbGVu
Z3RoIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAgICAgICAgICAgICB0
b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8u
cGF0Y2guZGVsdGFDYWxsVG9Eb25lKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0KLSAgICAgICAg
ICAgIHJlcGxhY2VXaXRoSnVtcChzdHViSW5mbywgc3R1YkluZm8uc3R1YlJvdXRpbmUtPmNvZGUo
KS5jb2RlKCkpOwotICAgICAgICAgICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWQpOworICAgIGlmIChpc0pTQXJyYXko
YmFzZVZhbHVlKSAmJiBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0
aCkKKyAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmdldExlbmd0aCh2bSwgb3duZXIsIEFj
Y2Vzc0Nhc2U6OkFycmF5TGVuZ3RoKTsKKyAgICBlbHNlIGlmIChpc0pTU3RyaW5nKGJhc2VWYWx1
ZSkgJiYgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpCisgICAg
ICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpnZXRMZW5ndGgodm0sIG93bmVyLCBBY2Nlc3NDYXNl
OjpTdHJpbmdMZW5ndGgpOworICAgIGVsc2UgeworICAgICAgICBpZiAoIXNsb3QuaXNDYWNoZWFi
bGUoKSAmJiAhc2xvdC5pc1Vuc2V0KCkpCisgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNo
ZTsKIAorICAgICAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOworICAg
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUodm0pOworICAg
ICAgICAKKyAgICAgICAgLy8gT3B0aW1pemUgc2VsZiBhY2Nlc3MuCisgICAgICAgIGlmIChzdHVi
SW5mby5jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpVbnNldAorICAgICAgICAgICAgJiYgc2xvdC5p
c0NhY2hlYWJsZVZhbHVlKCkKKyAgICAgICAgICAgICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNl
VmFsdWUKKyAgICAgICAgICAgICYmICFzbG90LndhdGNocG9pbnRTZXQoKQorICAgICAgICAgICAg
JiYgTWFjcm9Bc3NlbWJsZXI6OmlzQ29tcGFjdFB0ckFsaWduZWRBZGRyZXNzT2Zmc2V0KG1heE9m
ZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSkKKyAgICAg
ICAgICAgICYmIGFjdGlvbkZvckNlbGwodm0sIGJhc2VDZWxsKSA9PSBBdHRlbXB0VG9DYWNoZQor
ICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgp
KSB7CisgICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxh
Y2VtZW50cyh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgICAgICByZXBhdGNoQnlJ
ZFNlbGZBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9m
ZnNldCgpLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHRydWUpOworICAgICAgICAgICAgc3R1
YkluZm8uaW5pdEdldEJ5SWRTZWxmKHZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBz
dHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgcmV0dXJuIFJldHJ5
Q2FjaGVMYXRlcjsKICAgICAgICAgfQogCi0gICAgICAgIC8vIFN0cmluZy5sZW5ndGggY2FzZQot
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsdXJlID0gc3R1YkppdC5icmFuY2g4KE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoU3RyaW5nVHlwZSkpOwotCi0gICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VHUFIsIEpTU3RyaW5nOjpvZmZzZXRPZkxlbmd0aCgpKSwgcmVzdWx0R1BS
KTsKLQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHN0dWJKaXQub3I2NChBc3NlbWJseUhl
bHBlcnM6OlRydXN0ZWRJbW02NChUYWdUeXBlTnVtYmVyKSwgcmVzdWx0R1BSKTsKLSNlbGlmIFVT
RShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIHN0dWJKaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHJlc3VsdFRhZ0dQUik7Ci0jZW5kaWYKKyAg
ICAgICAgYm9vbCBsb2FkVGFyZ2V0RnJvbVByb3h5ID0gZmFsc2U7CisgICAgICAgIGlmIChiYXNl
Q2VsbC0+dHlwZSgpID09IFB1cmVGb3J3YXJkaW5nUHJveHlUeXBlKSB7CisgICAgICAgICAgICBi
YXNlVmFsdWUgPSBqc0Nhc3Q8SlNQcm94eSo+KGJhc2VDZWxsKS0+dGFyZ2V0KCk7CisgICAgICAg
ICAgICBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKKyAgICAgICAgICAgIHN0cnVjdHVy
ZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUodm0pOworICAgICAgICAgICAgbG9hZFRhcmdldEZyb21Q
cm94eSA9IHRydWU7CisgICAgICAgIH0KIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBz
dWNjZXNzID0gc3R1YkppdC5qdW1wKCk7CisgICAgICAgIElubGluZUNhY2hlQWN0aW9uIGFjdGlv
biA9IGFjdGlvbkZvckNlbGwodm0sIGJhc2VDZWxsKTsKKyAgICAgICAgaWYgKGFjdGlvbiAhPSBB
dHRlbXB0VG9DYWNoZSkKKyAgICAgICAgICAgIHJldHVybiBhY3Rpb247CiAKLSAgICAgICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIHN0dWJKaXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRp
b25DYW5GYWlsKTsKLSAgICAgICAgaWYgKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkp
Ci0gICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0ID0gc2xvdC5pc1Vuc2V0KCkgPyBpbnZhbGlkT2Zmc2V0IDogc2xvdC5jYWNoZWRP
ZmZzZXQoKTsKICAgICAgICAgCi0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVs
dGFDYWxsVG9Eb25lKSk7Ci0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZSwgc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFD
YWxsVG9TbG93Q2FzZSkpOwotCi0gICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5lID0gRklOQUxJ
WkVfQ09ERV9GT1JfU1RVQigKLSAgICAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLCBwYXRjaEJ1
ZmZlciwKLSAgICAgICAgICAgICgiR2V0QnlJZCBzdHJpbmcgbGVuZ3RoIHN0dWIgZm9yICVzLCBy
ZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJs
b2NrKCkpLmRhdGEoKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQo
Ci0gICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSkuZXhl
Y3V0YWJsZUFkZHJlc3MoKSkpOworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBj
b25kaXRpb25TZXQ7CisgICAgICAgIGlmIChzbG90LmlzVW5zZXQoKSB8fCBzbG90LnNsb3RCYXNl
KCkgIT0gYmFzZVZhbHVlKSB7CisgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5mbygp
LnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygpIHx8IHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmIChzbG90LmlzVW5zZXQoKSkgeworICAgICAgICAgICAgICAgIGNvbmRpdGlv
blNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcygKKyAgICAgICAgICAgICAg
ICAgICAgdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwg
cHJvcGVydHlOYW1lLmltcGwoKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5
SGl0KAorICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSwgZXhlYywgc3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCksCisgICAgICAgICAgICAgICAgICAg
IHByb3BlcnR5TmFtZS5pbXBsKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG9mZnNldCA9IHNs
b3QuaXNVbnNldCgpID8gaW52YWxpZE9mZnNldCA6IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRp
dGlvbigpLm9mZnNldCgpOworICAgICAgICB9CiAKLSAgICAgICAgcmVwbGFjZVdpdGhKdW1wKHN0
dWJJbmZvLCBzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7Ci0gICAgICAgIHJl
cGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRp
b25HZXRCeUlkKTsKKyAgICAgICAgQWNjZXNzQ2FzZTo6QWNjZXNzVHlwZSB0eXBlOworICAgICAg
ICBpZiAoc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkpCisgICAgICAgICAgICB0eXBlID0gQWNjZXNz
Q2FzZTo6TG9hZDsKKyAgICAgICAgZWxzZSBpZiAoc2xvdC5pc1Vuc2V0KCkpCisgICAgICAgICAg
ICB0eXBlID0gQWNjZXNzQ2FzZTo6TWlzczsKKyAgICAgICAgZWxzZSBpZiAoc2xvdC5pc0NhY2hl
YWJsZUdldHRlcigpKQorICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6OkdldHRlcjsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6OkN1c3RvbUdldHRlcjsK
IAotICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworICAgICAgICBuZXdDYXNlID0gQWNj
ZXNzQ2FzZTo6Z2V0KAorICAgICAgICAgICAgdm0sIG93bmVyLCB0eXBlLCBvZmZzZXQsIHN0cnVj
dHVyZSwgY29uZGl0aW9uU2V0LCBsb2FkVGFyZ2V0RnJvbVByb3h5LAorICAgICAgICAgICAgc2xv
dC53YXRjaHBvaW50U2V0KCksIHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSA/IHNsb3QuY3VzdG9t
R2V0dGVyKCkgOiBudWxscHRyLAorICAgICAgICAgICAgc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgp
ID8gc2xvdC5zbG90QmFzZSgpIDogbnVsbHB0cik7CiAgICAgfQogCi0gICAgLy8gRklYTUU6IENh
Y2hlIHByb3BlcnR5IGFjY2VzcyBmb3IgaW1tZWRpYXRlcy4KLSAgICBpZiAoIWJhc2VWYWx1ZS5p
c0NlbGwoKSkKLSAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIGNvZGVQdHIgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKAorICAgICAgICB2bSwg
Y29kZUJsb2NrLCBwcm9wZXJ0eU5hbWUsIHN0ZDo6bW92ZShuZXdDYXNlKSk7CiAKLSAgICBpZiAo
IXNsb3QuaXNDYWNoZWFibGUoKSAmJiAhc2xvdC5pc1Vuc2V0KCkpCisgICAgaWYgKCFjb2RlUHRy
KQogICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKIAotICAgIEpTQ2VsbCogYmFzZUNlbGwg
PSBiYXNlVmFsdWUuYXNDZWxsKCk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlQ2Vs
bC0+c3RydWN0dXJlKCp2bSk7Ci0KLSAgICBJbmxpbmVDYWNoZUFjdGlvbiBhY3Rpb24gPSBhY3Rp
b25Gb3JDZWxsKCp2bSwgYmFzZUNlbGwpOwotICAgIGlmIChhY3Rpb24gIT0gQXR0ZW1wdFRvQ2Fj
aGUpCi0gICAgICAgIHJldHVybiBhY3Rpb247Ci0KLSAgICAvLyBPcHRpbWl6ZSBzZWxmIGFjY2Vz
cy4KLSAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkKLSAgICAgICAgJiYgc2xvdC5zbG90
QmFzZSgpID09IGJhc2VWYWx1ZQotICAgICAgICAmJiAhc2xvdC53YXRjaHBvaW50U2V0KCkKLSAg
ICAgICAgJiYgTWFjcm9Bc3NlbWJsZXI6OmlzQ29tcGFjdFB0ckFsaWduZWRBZGRyZXNzT2Zmc2V0
KG1heE9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSkp
IHsKLSAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVu
dHMoKnZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKLSAgICAgICAgcmVwYXRjaEJ5SWRTZWxmQWNj
ZXNzKCp2bSwgY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNs
b3QuY2FjaGVkT2Zmc2V0KCksIG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3QsIHRydWUpOwotICAg
ICAgICBzdHViSW5mby5pbml0R2V0QnlJZFNlbGYoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpLCBzdHJ1Y3R1cmUpOwotICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwotICAg
IH0KLQotICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLCBvcGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0KTsKKyAgICByZXBsYWNlV2l0aEp1bXAoc3R1
YkluZm8sIGNvZGVQdHIpOworICAgIAogICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CiB9CiAK
QEAgLTc2NiwxMTIgKzMyMCw2IEBAIHZvaWQgcmVwYXRjaEdldEJ5SUQoRXhlY1N0YXRlKiBleGVj
LCBKU1YKICAgICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZCk7CiB9CiAKLXN0YXRpYyB2b2lkIHBh
dGNoSnVtcFRvR2V0QnlJZFN0dWIoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBKSVRTdHVi
Um91dGluZSogc3R1YlJvdXRpbmUpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8uYWNj
ZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3QpOwotICAgIGlmIChzdHViSW5mby51Lmdl
dEJ5SWRMaXN0Lmxpc3QtPmRpZFNlbGZQYXRjaGluZygpKSB7Ci0gICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpyZXBhdGNoSnVtcCgKLSAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bi5qdW1wQXRPZmZzZXQoCi0gICAgICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxs
VG9KdW1wKSwKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2Rl
KCkuY29kZSgpKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgcmVwbGFjZVdp
dGhKdW1wKHN0dWJJbmZvLCBzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7Ci19Ci0KLXN0YXRp
YyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0
eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBpZiAoIWJh
c2VWYWx1ZS5pc0NlbGwoKQotICAgICAgICB8fCAoIXNsb3QuaXNDYWNoZWFibGUoKSAmJiAhc2xv
dC5pc1Vuc2V0KCkpKQotICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgIEpTQ2Vs
bCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7Ci0gICAgYm9vbCBsb2FkVGFyZ2V0RnJv
bVByb3h5ID0gZmFsc2U7Ci0gICAgaWYgKGJhc2VDZWxsLT50eXBlKCkgPT0gUHVyZUZvcndhcmRp
bmdQcm94eVR5cGUpIHsKLSAgICAgICAgYmFzZVZhbHVlID0ganNDYXN0PEpTUHJveHkqPihiYXNl
Q2VsbCktPnRhcmdldCgpOwotICAgICAgICBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsK
LSAgICAgICAgbG9hZFRhcmdldEZyb21Qcm94eSA9IHRydWU7Ci0gICAgfQotCi0gICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxv
Y2soKTsKLQotICAgIElubGluZUNhY2hlQWN0aW9uIGFjdGlvbiA9IGFjdGlvbkZvckNlbGwoKnZt
LCBiYXNlQ2VsbCk7Ci0gICAgaWYgKGFjdGlvbiAhPSBBdHRlbXB0VG9DYWNoZSkKLSAgICAgICAg
cmV0dXJuIGFjdGlvbjsKLQotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0
cnVjdHVyZSgqdm0pOwotICAgIFR5cGVJbmZvIHR5cGVJbmZvID0gc3RydWN0dXJlLT50eXBlSW5m
bygpOwotCi0gICAgaWYgKHN0dWJJbmZvLnBhdGNoLnNwaWxsTW9kZSA9PSBOZWVkVG9TcGlsbCkg
ewotICAgICAgICAvLyBXZSBjYW5ub3QgZG8gYXMgbXVjaCBpbmxpbmUgY2FjaGluZyBpZiB0aGUg
cmVnaXN0ZXJzIHdlcmUgbm90IGZsdXNoZWQgcHJpb3IgdG8gdGhpcyBHZXRCeUlkLiBJbiBwYXJ0
aWN1bGFyLAotICAgICAgICAvLyBub24tVmFsdWUgY2FjaGVkIHByb3BlcnRpZXMgcmVxdWlyZSBw
bGFudGluZyBjYWxscywgd2hpY2ggcmVxdWlyZXMgcmVnaXN0ZXJzIHRvIGhhdmUgYmVlbiBmbHVz
aGVkLiBUaHVzLAotICAgICAgICAvLyBpZiByZWdpc3RlcnMgd2VyZSBub3QgZmx1c2hlZCwgZG9u
J3QgZG8gbm9uLVZhbHVlIGNhY2hpbmcuCi0gICAgICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZVZh
bHVlKCkgJiYgIXNsb3QuaXNVbnNldCgpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7Ci0gICAgfQotCi0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc2xvdC5pc1Vuc2V0KCkg
PyBpbnZhbGlkT2Zmc2V0IDogc2xvdC5jYWNoZWRPZmZzZXQoKTsKLSAgICAKLSAgICBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7Ci0gICAgaWYgKHNsb3QuaXNVbnNldCgp
IHx8IHNsb3Quc2xvdEJhc2UoKSAhPSBiYXNlVmFsdWUpIHsKLSAgICAgICAgaWYgKHR5cGVJbmZv
LnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygpIHx8IHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkp
Ci0gICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICBpZiAoc2xvdC5p
c1Vuc2V0KCkpCi0gICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNG
b3JQcm9wZXJ0eU1pc3MoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBz
dHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbmRp
dGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KCp2bSwg
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBzbG90LnNsb3RC
YXNlKCksIGlkZW50LmltcGwoKSk7Ci0KLSAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxp
ZCgpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgb2Zmc2V0
ID0gc2xvdC5pc1Vuc2V0KCkgPyBpbnZhbGlkT2Zmc2V0IDogY29uZGl0aW9uU2V0LnNsb3RCYXNl
Q29uZGl0aW9uKCkub2Zmc2V0KCk7Ci0gICAgfQotICAgIAotICAgIFBvbHltb3JwaGljR2V0QnlJ
ZExpc3QqIGxpc3QgPSBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojpmcm9tKHN0dWJJbmZvKTsKLSAg
ICBpZiAobGlzdC0+aXNGdWxsKCkpIHsKLSAgICAgICAgLy8gV2UgbmVlZCB0aGlzIGV4dHJhIGNo
ZWNrIGJlY2F1c2Ugb2YgcmVjdXJzaW9uLgotICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsK
LSAgICB9Ci0gICAgCi0gICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKLSAg
ICBib29sIHJlc3VsdCA9IGdlbmVyYXRlQnlJZFN0dWIoCi0gICAgICAgIGV4ZWMsIGtpbmRGb3Io
c2xvdCksIGlkZW50LCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBjb25kaXRpb25TZXQsIHNs
b3Quc2xvdEJhc2UoKSwgb2Zmc2V0LCAKLSAgICAgICAgc3RydWN0dXJlLCBsb2FkVGFyZ2V0RnJv
bVByb3h5LCBzbG90LndhdGNocG9pbnRTZXQoKSwgCi0gICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSks
Ci0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKGxpc3QtPmN1cnJlbnRTbG93UGF0aFRhcmdldChz
dHViSW5mbykpLCBzdHViUm91dGluZSk7Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOwotICAgIAotICAgIEdldEJ5SWRBY2Nlc3M6OkFjY2Vzc1R5cGUgYWNj
ZXNzVHlwZTsKLSAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkpCi0gICAgICAgIGFjY2Vz
c1R5cGUgPSBzbG90LndhdGNocG9pbnRTZXQoKSA/IEdldEJ5SWRBY2Nlc3M6OldhdGNoZWRTdHVi
IDogR2V0QnlJZEFjY2Vzczo6U2ltcGxlU3R1YjsKLSAgICBlbHNlIGlmIChzbG90LmlzVW5zZXQo
KSkKLSAgICAgICAgYWNjZXNzVHlwZSA9IEdldEJ5SWRBY2Nlc3M6OlNpbXBsZU1pc3M7Ci0gICAg
ZWxzZSBpZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpKQotICAgICAgICBhY2Nlc3NUeXBlID0g
R2V0QnlJZEFjY2Vzczo6R2V0dGVyOwotICAgIGVsc2UKLSAgICAgICAgYWNjZXNzVHlwZSA9IEdl
dEJ5SWRBY2Nlc3M6OkN1c3RvbUdldHRlcjsKLSAgICAKLSAgICBsaXN0LT5hZGRBY2Nlc3MoR2V0
QnlJZEFjY2VzcygKLSAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBh
Y2Nlc3NUeXBlLCBzdHViUm91dGluZSwgc3RydWN0dXJlLAotICAgICAgICBjb25kaXRpb25TZXQp
KTsKLSAgICAKLSAgICBwYXRjaEp1bXBUb0dldEJ5SWRTdHViKHN0dWJJbmZvLCBzdHViUm91dGlu
ZS5nZXQoKSk7Ci0gICAgCi0gICAgcmV0dXJuIGxpc3QtPmlzRnVsbCgpID8gR2l2ZVVwT25DYWNo
ZSA6IFJldHJ5Q2FjaGVMYXRlcjsKLX0KLQotdm9pZCBidWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8p
Ci17Ci0gICAgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoZXhlYy0+Y29kZUJsb2Nr
KCktPm1fbG9jaywgZXhlYy0+dm0oKS5oZWFwKTsKLSAgICAKLSAgICBpZiAodHJ5QnVpbGRHZXRC
eUlETGlzdChleGVjLCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8pID09
IEdpdmVVcE9uQ2FjaGUpCi0gICAgICAgIHJlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWQpOwotfQotCiBzdGF0
aWMgVl9KSVRPcGVyYXRpb25fRVNzaUpKSSBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rp
b24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRLaW5kIHB1dEtpbmQpCiB7CiAgICAg
aWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpIHsKQEAgLTg4NCwzNTkgKzMzMiwxNiBAQCBzdGF0aWMg
Vl9KSVRPcGVyYXRpb25fRVNzaUpKSSBhcHByb3ByaWF0CiAgICAgcmV0dXJuIG9wZXJhdGlvblB1
dEJ5SWROb25TdHJpY3Q7CiB9CiAKLXN0YXRpYyBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJIGFwcHJv
cHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5U2xvdCAm
c2xvdCwgUHV0S2luZCBwdXRLaW5kKQorc3RhdGljIFZfSklUT3BlcmF0aW9uX0VTc2lKSkkgYXBw
cm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5U2xvdCAm
c2xvdCwgUHV0S2luZCBwdXRLaW5kKQogewogICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKSB7
CiAgICAgICAgIGlmIChwdXRLaW5kID09IERpcmVjdCkKLSAgICAgICAgICAgIHJldHVybiBvcGVy
YXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0QnVpbGRMaXN0OwotICAgICAgICByZXR1cm4gb3BlcmF0
aW9uUHV0QnlJZFN0cmljdEJ1aWxkTGlzdDsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25Q
dXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7CisgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRC
eUlkU3RyaWN0T3B0aW1pemU7CiAgICAgfQogICAgIGlmIChwdXRLaW5kID09IERpcmVjdCkKLSAg
ICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RCdWlsZExpc3Q7Ci0g
ICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3Q7Ci19Ci0KLXN0YXRp
YyBib29sIGVtaXRQdXRSZXBsYWNlU3R1YigKLSAgICBFeGVjU3RhdGUqIGV4ZWMsCi0gICAgY29u
c3QgSWRlbnRpZmllciYsCi0gICAgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LAotICAgIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKLSAg
ICBDb2RlTG9jYXRpb25MYWJlbCBmYWlsdXJlTGFiZWwsCi0gICAgUmVmUHRyPEpJVFN0dWJSb3V0
aW5lPiYgc3R1YlJvdXRpbmUpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgR1BS
UmVnIGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmJhc2VHUFIp
OwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgR1BSUmVnIHZhbHVlVGFnR1BSID0gc3RhdGlj
X2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZVRhZ0dQUik7Ci0jZW5kaWYKLSAgICBH
UFJSZWcgdmFsdWVHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVl
R1BSKTsKLQotICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1YkluZm8u
cGF0Y2gudXNlZFJlZ2lzdGVycyk7Ci0gICAgYWxsb2NhdG9yLmxvY2soYmFzZUdQUik7Ci0jaWYg
VVNFKEpTVkFMVUUzMl82NCkKLSAgICBhbGxvY2F0b3IubG9jayh2YWx1ZVRhZ0dQUik7Ci0jZW5k
aWYKLSAgICBhbGxvY2F0b3IubG9jayh2YWx1ZUdQUik7Ci0gICAgCi0gICAgR1BSUmVnIHNjcmF0
Y2hHUFIxID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwotCi0gICAgQ0NhbGxIZWxw
ZXJzIHN0dWJKaXQodm0sIGV4ZWMtPmNvZGVCbG9jaygpKTsKLQotICAgIHNpemVfdCBudW1iZXJP
ZlBhZGRpbmdCeXRlcyA9IGFsbG9jYXRvci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGlu
ZyhzdHViSml0KTsKLQotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGJhZFN0cnVjdHVyZSA9IHN0
dWJKaXQuYnJhbmNoU3RydWN0dXJlKAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0
dXJlSURPZmZzZXQoKSksCi0gICAgICAgIHN0cnVjdHVyZSk7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkKLSAgICAgICAg
c3R1YkppdC5zdG9yZTY0KHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3Jh
Z2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKLSAgICBlbHNlIHsK
LSAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgc3R1
YkppdC5zdG9yZTY0KHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BS
MSwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1
ZSkpKTsKLSAgICB9Ci0jZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIGlmIChpc0lubGluZU9m
ZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkgewotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFs
dWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRP
ZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNl
dCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNj
cmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVl
VGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0
T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZz
ZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVz
Y3JpcHRvciwgYXNCaXRzLnRhZykpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBzdHViSml0Lmxv
YWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgc2NyYXRjaEdQUjEpOwotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVH
UFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZs
eShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRP
RihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKLSAgICAgICAgc3R1
YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNo
R1BSMSwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNW
YWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRh
ZykpKTsKLSAgICB9Ci0jZW5kaWYKLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNj
ZXNzOwotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhaWx1cmU7Ci0gICAgCi0gICAgaWYgKGFs
bG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygpKSB7Ci0gICAgICAgIGFsbG9jYXRvci5yZXN0b3Jl
UmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKHN0dWJKaXQsIG51bWJlck9mUGFkZGluZ0J5dGVzKTsK
LSAgICAgICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOwotICAgICAgICAKLSAgICAgICAgYmFk
U3RydWN0dXJlLmxpbmsoJnN0dWJKaXQpOwotICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNl
ZFJlZ2lzdGVyc0J5UG9wcGluZyhzdHViSml0LCBudW1iZXJPZlBhZGRpbmdCeXRlcyk7Ci0gICAg
ICAgIGZhaWx1cmUgPSBzdHViSml0Lmp1bXAoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBzdWNj
ZXNzID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgICAgIGZhaWx1cmUgPSBiYWRTdHJ1Y3R1cmU7Ci0g
ICAgfQotICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCBzdHViSml0LCBleGVj
LT5jb2RlQmxvY2soKSwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKLSAgICBpZiAocGF0Y2hCdWZm
ZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAg
IHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxh
YmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSk7Ci0gICAgcGF0Y2hC
dWZmZXIubGluayhmYWlsdXJlLCBmYWlsdXJlTGFiZWwpOwotICAgICAgICAgICAgCi0gICAgc3R1
YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAotICAgICAgICBleGVjLT5jb2RlQmxv
Y2soKSwgcGF0Y2hCdWZmZXIsCi0gICAgICAgICgiUHV0QnlJZCByZXBsYWNlIHN0dWIgZm9yICVz
LCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAgICAgdG9DU3RyaW5nKCpleGVjLT5jb2RlQmxv
Y2soKSkuZGF0YSgpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgK
LSAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpKTsKLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGJvb2wg
ZW1pdFB1dFRyYW5zaXRpb25TdHViKAotICAgIEV4ZWNTdGF0ZSogZXhlYywgVk0qIHZtLCBTdHJ1
Y3R1cmUqJiBzdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCAKLSAgICBjb25zdCBQ
dXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2lu
ZCBwdXRLaW5kLAotICAgIFN0cnVjdHVyZSomIG9sZFN0cnVjdHVyZSwgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkKLXsKLSAgICBQcm9wZXJ0eU5hbWUgcG5hbWUoaWRl
bnQpOwotICAgIG9sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICBpZiAoIW9sZFN0cnVjdHVy
ZS0+aXNPYmplY3QoKSB8fCBvbGRTdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpIHx8IHBhcnNlSW5k
ZXgocG5hbWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBQcm9wZXJ0eU9mZnNldCBw
cm9wZXJ0eU9mZnNldDsKLSAgICBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJh
bnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkob2xkU3RydWN0dXJlLCBpZGVu
dC5pbXBsKCksIDAsIHByb3BlcnR5T2Zmc2V0KTsKLQotICAgIGlmICghc3RydWN0dXJlIHx8ICFz
dHJ1Y3R1cmUtPmlzT2JqZWN0KCkgfHwgc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSB8fCAhc3Ry
dWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIGEg
cmVhbGxvYywgaWYgd2UgZG9uJ3QgaGF2ZQotICAgIC8vIGVub3VnaCByZWdpc3RlcnMgdG8gbWFr
ZSBpdCBoYXBwZW4uCi0gICAgaWYgKEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzIDwgNgotICAg
ICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpCi0gICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gU2tpcCBv
cHRpbWl6aW5nIHRoZSBjYXNlIHdoZXJlIHdlIG5lZWQgcmVhbGxvYywgYW5kIHRoZSBzdHJ1Y3R1
cmUgaGFzCi0gICAgLy8gaW5kZXhpbmcgc3RvcmFnZS4KLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
bid0IHNraXAgdGhpcyEgSW1wbGVtZW50IGl0IQotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzA5MTQKLSAgICBpZiAob2xkU3RydWN0dXJlLT5jb3VsZEhh
dmVJbmRleGluZ0hlYWRlcigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAocHV0
S2luZCA9PSBOb3REaXJlY3QpIHsKLSAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25k
aXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzKAotICAgICAgICAgICAgKnZtLCBleGVjLT5jb2Rl
QmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgaWRlbnQuaW1wbCgp
KTsKLSAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIENvZGVMb2NhdGlvbkxhYmVsIGZhaWx1cmVMYWJlbCA9
IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNo
LmRlbHRhQ2FsbFRvU2xvd0Nhc2UpOwotICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4mIHN0dWJS
b3V0aW5lID0gc3R1YkluZm8uc3R1YlJvdXRpbmU7Ci0KLSAgICBHUFJSZWcgYmFzZUdQUiA9IHN0
YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guYmFzZUdQUik7Ci0jaWYgVVNFKEpTVkFM
VUUzMl82NCkKLSAgICBHUFJSZWcgdmFsdWVUYWdHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0
dWJJbmZvLnBhdGNoLnZhbHVlVGFnR1BSKTsKLSNlbmRpZgotICAgIEdQUlJlZyB2YWx1ZUdQUiA9
IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVHUFIpOwotICAgIAotICAg
IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1YkluZm8ucGF0Y2gudXNlZFJl
Z2lzdGVycyk7Ci0gICAgYWxsb2NhdG9yLmxvY2soYmFzZUdQUik7Ci0jaWYgVVNFKEpTVkFMVUUz
Ml82NCkKLSAgICBhbGxvY2F0b3IubG9jayh2YWx1ZVRhZ0dQUik7Ci0jZW5kaWYKLSAgICBhbGxv
Y2F0b3IubG9jayh2YWx1ZUdQUik7Ci0gICAgCi0gICAgQ0NhbGxIZWxwZXJzIHN0dWJKaXQodm0p
OwotICAgIAotICAgIGJvb2wgbmVlZFRoaXJkU2NyYXRjaCA9IGZhbHNlOwotICAgIGlmIChzdHJ1
Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpCi0gICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewot
ICAgICAgICBuZWVkVGhpcmRTY3JhdGNoID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBHUFJSZWcgc2Ny
YXRjaEdQUjEgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7Ci0gICAgQVNTRVJUKHNj
cmF0Y2hHUFIxICE9IGJhc2VHUFIpOwotICAgIEFTU0VSVChzY3JhdGNoR1BSMSAhPSB2YWx1ZUdQ
Uik7Ci0gICAgCi0gICAgR1BSUmVnIHNjcmF0Y2hHUFIyID0gYWxsb2NhdG9yLmFsbG9jYXRlU2Ny
YXRjaEdQUigpOwotICAgIEFTU0VSVChzY3JhdGNoR1BSMiAhPSBiYXNlR1BSKTsKLSAgICBBU1NF
UlQoc2NyYXRjaEdQUjIgIT0gdmFsdWVHUFIpOwotICAgIEFTU0VSVChzY3JhdGNoR1BSMiAhPSBz
Y3JhdGNoR1BSMSk7Ci0KLSAgICBHUFJSZWcgc2NyYXRjaEdQUjM7Ci0gICAgaWYgKG5lZWRUaGly
ZFNjcmF0Y2gpIHsKLSAgICAgICAgc2NyYXRjaEdQUjMgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3Jh
dGNoR1BSKCk7Ci0gICAgICAgIEFTU0VSVChzY3JhdGNoR1BSMyAhPSBiYXNlR1BSKTsKLSAgICAg
ICAgQVNTRVJUKHNjcmF0Y2hHUFIzICE9IHZhbHVlR1BSKTsKLSAgICAgICAgQVNTRVJUKHNjcmF0
Y2hHUFIzICE9IHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIzICE9IHNj
cmF0Y2hHUFIyKTsKLSAgICB9IGVsc2UKLSAgICAgICAgc2NyYXRjaEdQUjMgPSBJbnZhbGlkR1BS
UmVnOwotICAgIAotICAgIHNpemVfdCBudW1iZXJPZlBhZGRpbmdCeXRlcyA9IGFsbG9jYXRvci5w
cmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhzdHViSml0KTsKLQotICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7Ci0gICAgICAgICAgICAKLSAgICBBU1NFUlQo
b2xkU3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgp
KTsKLSAgICAKLSAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoU3RydWN0dXJl
KAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIAotICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCAKLSAg
ICAgICAgb2xkU3RydWN0dXJlKSk7Ci0gICAgCi0gICAgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbnMoCi0gICAgICAgIGNvbmRpdGlvblNldCwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZv
LCBzdHViSml0LCBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIxKTsKLQotICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKLSAgICAKLSAgICBib29sIHNjcmF0Y2hHUFIxSGFzU3Rv
cmFnZSA9IGZhbHNlOwotICAgIAotICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCkgIT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgIHNpemVf
dCBuZXdTaXplID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFs
dWUpOwotICAgICAgICBDb3BpZWRBbGxvY2F0b3IqIGNvcGllZEFsbG9jYXRvciA9ICZ2bS0+aGVh
cC5zdG9yYWdlQWxsb2NhdG9yKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIW9sZFN0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKCZj
b3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZywgc2NyYXRjaEdQUjEpOwotICAgICAg
ICAgICAgc2xvd1BhdGguYXBwZW5kKHN0dWJKaXQuYnJhbmNoU3ViUHRyKE1hY3JvQXNzZW1ibGVy
OjpTaWduZWQsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobmV3U2l6ZSksIHNjcmF0Y2hH
UFIxKSk7Ci0gICAgICAgICAgICBzdHViSml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIxLCAmY29waWVk
QWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcpOwotICAgICAgICAgICAgc3R1YkppdC5uZWdQ
dHIoc2NyYXRjaEdQUjEpOwotICAgICAgICAgICAgc3R1YkppdC5hZGRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFic29sdXRlQWRkcmVzcygmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRQYXlsb2FkRW5k
KSwgc2NyYXRjaEdQUjEpOwotICAgICAgICAgICAgc3R1YkppdC5hZGRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG9sZFN0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKLSAgICAgICAgICAgIEFTU0VSVChu
ZXdTaXplID4gb2xkU2l6ZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN0dWJKaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMyk7Ci0gICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoJmNv
cGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAg
ICAgICBzbG93UGF0aC5hcHBlbmQoc3R1YkppdC5icmFuY2hTdWJQdHIoTWFjcm9Bc3NlbWJsZXI6
OlNpZ25lZCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRjaEdQ
UjEpKTsKLSAgICAgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjEsICZjb3BpZWRB
bGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZyk7Ci0gICAgICAgICAgICBzdHViSml0Lm5lZ1B0
cihzY3JhdGNoR1BSMSk7Ci0gICAgICAgICAgICBzdHViSml0LmFkZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWJzb2x1dGVBZGRyZXNzKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQp
LCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgICAgICBzdHViSml0LmFkZFB0cihNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAg
ICAgIC8vIFdlIGhhdmUgc2NyYXRjaEdQUjEgPSBuZXcgc3RvcmFnZSwgc2NyYXRjaEdQUjMgPSBv
bGQgc3RvcmFnZSwgc2NyYXRjaEdQUjIgPSBhdmFpbGFibGUKLSAgICAgICAgICAgIGZvciAoc2l6
ZV90IG9mZnNldCA9IDA7IG9mZnNldCA8IG9sZFNpemU7IG9mZnNldCArPSBzaXplb2Yodm9pZCop
KSB7Ci0gICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHNjcmF0Y2hHUFIzLCAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihvZmZzZXQgKyBzaXplb2Yo
SlNWYWx1ZSkgKyBzaXplb2Yodm9pZCopKSksIHNjcmF0Y2hHUFIyKTsKLSAgICAgICAgICAgICAg
ICBzdHViSml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIyLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
Y3JhdGNoR1BSMSwgLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4ob2Zmc2V0ICsgc2l6ZW9mKEpTVmFs
dWUpICsgc2l6ZW9mKHZvaWQqKSkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgc3R1YkppdC5zdG9yZVB0cihzY3JhdGNoR1BSMSwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7Ci0gICAgICAg
IHNjcmF0Y2hHUFIxSGFzU3RvcmFnZSA9IHRydWU7Ci0gICAgfQotCi0gICAgQVNTRVJUKG9sZFN0
cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCkgPT0gc3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUo
KSk7Ci0gICAgQVNTRVJUKG9sZFN0cnVjdHVyZS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3Mo
KSA9PSBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdzKCkpOwotICAgIEFTU0VS
VChvbGRTdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpID09IHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBl
KCkpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgdWludDMyX3QgdmFsID0gc3RydWN0dXJlLT5p
ZCgpOwotI2Vsc2UKLSAgICB1aW50MzJfdCB2YWwgPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90
PihzdHJ1Y3R1cmUtPmlkKCkpOwotI2VuZGlmCi0gICAgc3R1YkppdC5zdG9yZTMyKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIodmFsKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpCi0gICAgICAgIHN0dWJK
aXQuc3RvcmU2NCh2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNP
YmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNs
b3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7Ci0gICAgZWxzZSB7Ci0gICAg
ICAgIGlmICghc2NyYXRjaEdQUjFIYXNTdG9yYWdlKQotICAgICAgICAgICAgc3R1YkppdC5sb2Fk
UHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlP
ZmZzZXQoKSksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTY0KHZhbHVlR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5CdXR0ZXJmbHko
c2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKLSAgICB9Ci0jZWxpZiBV
U0UoSlNWQUxVRTMyXzY0KQotICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNl
dCgpKSkgewotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9m
ZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVl
KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9h
ZCkpKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBv
ZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1
ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykp
KTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoIXNjcmF0Y2hHUFIxSGFzU3RvcmFnZSkKLSAg
ICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIHN0
dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQ
UjEsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFs
dWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXls
b2FkKSkpOwotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9m
ZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVE
ZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwotICAgIH0KLSNlbmRpZgotICAgIAotICAgIFNjcmF0
Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSBudWxscHRyOwotCi0jaWYgRU5BQkxFKEdHQykKLSAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXI7Ci0gICAg
aWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9m
TGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3duZXJJc1Jl
bWVtYmVyZWRPckluRWRlbiA9IHN0dWJKaXQuanVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4oYmFz
ZUdQUik7Ci0gICAgICAgIFdyaXRlQmFycmllckJ1ZmZlciYgd3JpdGVCYXJyaWVyQnVmZmVyID0g
c3R1YkppdC52bSgpLT5oZWFwLndyaXRlQmFycmllckJ1ZmZlcigpOwotICAgICAgICBzdHViSml0
LmxvYWQzMih3cml0ZUJhcnJpZXJCdWZmZXIuY3VycmVudEluZGV4QWRkcmVzcygpLCBzY3JhdGNo
R1BSMik7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5lZWRUb0ZsdXNoID0KLSAgICAg
ICAgICAgIHN0dWJKaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc2Ny
YXRjaEdQUjIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIod3JpdGVCYXJyaWVyQnVmZmVy
LmNhcGFjaXR5KCkpKTsKLQotICAgICAgICBzdHViSml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoMSksIHNjcmF0Y2hHUFIyKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHNj
cmF0Y2hHUFIyLCB3cml0ZUJhcnJpZXJCdWZmZXIuY3VycmVudEluZGV4QWRkcmVzcygpKTsKLQot
ICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIod3JpdGVC
YXJyaWVyQnVmZmVyLmJ1ZmZlcigpKSwgc2NyYXRjaEdQUjEpOwotICAgICAgICAvLyBXZSB1c2Ug
YW4gb2Zmc2V0IG9mIC1zaXplb2Yodm9pZCopIGJlY2F1c2Ugd2UgYWxyZWFkeSBhZGRlZCAxIHRv
IHNjcmF0Y2hHUFIyLgotICAgICAgICBzdHViSml0LnN0b3JlUHRyKGJhc2VHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgoc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBNYWNyb0Fzc2VtYmxl
cjo6U2NhbGVQdHIsIHN0YXRpY19jYXN0PGludDMyX3Q+KC1zaXplb2Yodm9pZCopKSkpOwotCi0g
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmVXaXRoQmFycmllciA9IHN0dWJKaXQuanVt
cCgpOwotICAgICAgICBuZWVkVG9GbHVzaC5saW5rKCZzdHViSml0KTsKLQotICAgICAgICBzY3Jh
dGNoQnVmZmVyID0gdm0tPnNjcmF0Y2hCdWZmZXJGb3JTaXplKGFsbG9jYXRvci5kZXNpcmVkU2Ny
YXRjaEJ1ZmZlclNpemVGb3JDYWxsKCkpOwotICAgICAgICBhbGxvY2F0b3IucHJlc2VydmVVc2Vk
UmVnaXN0ZXJzVG9TY3JhdGNoQnVmZmVyRm9yQ2FsbChzdHViSml0LCBzY3JhdGNoQnVmZmVyLCBz
Y3JhdGNoR1BSMik7Ci0gICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KGJhc2VHUFIpOwotICAgICAgICBjYWxsRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIgPSBzdHViSml0
LmNhbGwoKTsKLSAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVVc2VkUmVnaXN0ZXJzRnJvbVNjcmF0
Y2hCdWZmZXJGb3JDYWxsKHN0dWJKaXQsIHNjcmF0Y2hCdWZmZXIsIHNjcmF0Y2hHUFIyKTsKLQot
ICAgICAgICBkb25lV2l0aEJhcnJpZXIubGluaygmc3R1YkppdCk7Ci0gICAgICAgIG93bmVySXNS
ZW1lbWJlcmVkT3JJbkVkZW4ubGluaygmc3R1YkppdCk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzOwotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZh
aWx1cmU7Ci0gICAgICAgICAgICAKLSAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJz
KCkpIHsKLSAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmco
c3R1YkppdCwgbnVtYmVyT2ZQYWRkaW5nQnl0ZXMpOwotICAgICAgICBzdWNjZXNzID0gc3R1Ykpp
dC5qdW1wKCk7Ci0KLSAgICAgICAgZmFpbHVyZUNhc2VzLmxpbmsoJnN0dWJKaXQpOwotICAgICAg
ICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhzdHViSml0LCBudW1i
ZXJPZlBhZGRpbmdCeXRlcyk7Ci0gICAgICAgIGZhaWx1cmUgPSBzdHViSml0Lmp1bXAoKTsKLSAg
ICB9IGVsc2UKLSAgICAgICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOwotICAgIAotICAgIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIG9wZXJhdGlvbkNhbGw7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgc3VjY2Vzc0luU2xvd1BhdGg7Ci0gICAgCi0gICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAg
ICAgc2xvd1BhdGgubGluaygmc3R1YkppdCk7Ci0gICAgICAgIAotICAgICAgICBhbGxvY2F0b3Iu
cmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhzdHViSml0LCBudW1iZXJPZlBhZGRpbmdC
eXRlcyk7Ci0gICAgICAgIGlmICghc2NyYXRjaEJ1ZmZlcikKLSAgICAgICAgICAgIHNjcmF0Y2hC
dWZmZXIgPSB2bS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoYWxsb2NhdG9yLmRlc2lyZWRTY3JhdGNo
QnVmZmVyU2l6ZUZvckNhbGwoKSk7Ci0gICAgICAgIGFsbG9jYXRvci5wcmVzZXJ2ZVVzZWRSZWdp
c3RlcnNUb1NjcmF0Y2hCdWZmZXJGb3JDYWxsKHN0dWJKaXQsIHNjcmF0Y2hCdWZmZXIsIHNjcmF0
Y2hHUFIxKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBzdHViSml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShiYXNlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihz
dHJ1Y3R1cmUpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNsb3QuY2FjaGVkT2Zmc2V0
KCkpLCB2YWx1ZUdQUik7Ci0jZWxzZQotICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShiYXNlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1
cmUpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNsb3QuY2FjaGVkT2Zmc2V0KCkpLCB2
YWx1ZUdQUiwgdmFsdWVUYWdHUFIpOwotI2VuZGlmCi0gICAgICAgIG9wZXJhdGlvbkNhbGwgPSBz
dHViSml0LmNhbGwoKTsKLSAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVVc2VkUmVnaXN0ZXJzRnJv
bVNjcmF0Y2hCdWZmZXJGb3JDYWxsKHN0dWJKaXQsIHNjcmF0Y2hCdWZmZXIsIHNjcmF0Y2hHUFIx
KTsKLSAgICAgICAgc3VjY2Vzc0luU2xvd1BhdGggPSBzdHViSml0Lmp1bXAoKTsKLSAgICB9Ci0g
ICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIHN0dWJKaXQsIGV4ZWMtPmNvZGVC
bG9jaygpLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwotICAgIGlmIChwYXRjaEJ1ZmZlci5kaWRG
YWlsVG9BbGxvY2F0ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgcGF0Y2hC
dWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9m
ZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpKTsKLSAgICBpZiAoYWxsb2NhdG9y
LmRpZFJldXNlUmVnaXN0ZXJzKCkpCi0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZSwg
ZmFpbHVyZUxhYmVsKTsKLSAgICBlbHNlCi0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVy
ZUNhc2VzLCBmYWlsdXJlTGFiZWwpOwotICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFj
aXR5KCkgIT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgIHBh
dGNoQnVmZmVyLmxpbmsob3BlcmF0aW9uQ2FsbCwgb3BlcmF0aW9uUmVhbGxvY2F0ZVN0b3JhZ2VB
bmRGaW5pc2hQdXQpOwotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3NJblNsb3dQYXRo
LCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRj
aC5kZWx0YUNhbGxUb0RvbmUpKTsKLSNpZiBFTkFCTEUoR0dDKQotICAgICAgICBwYXRjaEJ1ZmZl
ci5saW5rKGNhbGxGbHVzaFdyaXRlQmFycmllckJ1ZmZlciwgb3BlcmF0aW9uRmx1c2hXcml0ZUJh
cnJpZXJCdWZmZXIpOwotI2VuZGlmCi0gICAgfQotICAgIAotICAgIHN0dWJSb3V0aW5lID0KLSAg
ICAgICAgY3JlYXRlSklUU3R1YlJvdXRpbmUoCi0gICAgICAgICAgICBGSU5BTElaRV9DT0RFX0ZP
UigKLSAgICAgICAgICAgICAgICBleGVjLT5jb2RlQmxvY2soKSwgcGF0Y2hCdWZmZXIsCi0gICAg
ICAgICAgICAgICAgKCJQdXRCeUlkICVzdHJhbnNpdGlvbiBzdHViICglcCAtPiAlcCkgZm9yICVz
LCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPm91dE9m
TGluZUNhcGFjaXR5KCkgIT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpID8gInJl
YWxsb2NhdGluZyAiIDogIiIsCi0gICAgICAgICAgICAgICAgICAgIG9sZFN0cnVjdHVyZSwgc3Ry
dWN0dXJlLAotICAgICAgICAgICAgICAgICAgICB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygp
KS5kYXRhKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAotICAg
ICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKS5leGVj
dXRhYmxlQWRkcmVzcygpKSksCi0gICAgICAgICAgICAqdm0sCi0gICAgICAgICAgICBleGVjLT5j
b2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCksCi0gICAgICAgICAgICBzdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkgIT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLAot
ICAgICAgICAgICAgc3RydWN0dXJlKTsKLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
cmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICByZXR1
cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOwogfQogCiBzdGF0aWMgSW5saW5l
Q2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNl
VmFsdWUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29u
c3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1
dEtpbmQgcHV0S2luZCkKQEAgLTEyNDUsNyArMzUwLDggQEAgc3RhdGljIElubGluZUNhY2hlQWN0
aW9uIHRyeUNhY2hlUHV0QnlJRAogICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKICAgICAK
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOworICAgIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyID0gY29kZUJsb2Nr
LT5vd25lclNjcmlwdEV4ZWN1dGFibGUoKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogCiAg
ICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCiAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hl
OwpAQCAtMTI1NiwyMTAgKzM2MiwxMDggQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNh
Y2hlUHV0QnlJRAogICAgIGlmICghc3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVh
YmxlKCkpCiAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogCi0gICAgLy8gT3B0aW1pemUg
c2VsZiBhY2Nlc3MuCisgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IG5ld0Nhc2U7CisK
ICAgICBpZiAoc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlICYmIHNsb3QuaXNDYWNoZWFibGVQdXQo
KSkgewotICAgICAgICBpZiAoc2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpOZXdQcm9w
ZXJ0eSkgeworICAgICAgICBpZiAoc2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpFeGlz
dGluZ1Byb3BlcnR5KSB7CisgICAgICAgICAgICBzdHJ1Y3R1cmUtPmRpZENhY2hlUHJvcGVydHlS
ZXBsYWNlbWVudCh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgIAorICAgICAgICAg
ICAgcHRyZGlmZl90IG9mZnNldFRvUGF0Y2hlZFN0b3JhZ2UgPSBvZmZzZXRSZWxhdGl2ZVRvUGF0
Y2hlZFN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgICAgICBpZiAoc3R1Yklu
Zm8uY2FjaGVUeXBlID09IENhY2hlVHlwZTo6VW5zZXQKKyAgICAgICAgICAgICAgICAmJiBNYWNy
b0Fzc2VtYmxlcjo6aXNQdHJBbGlnbmVkQWRkcmVzc09mZnNldChvZmZzZXRUb1BhdGNoZWRTdG9y
YWdlKQorICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdh
dGNocG9pbnQoKSkgeworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJlcGF0Y2hC
eUlkU2VsZkFjY2VzcygKKyAgICAgICAgICAgICAgICAgICAgY29kZUJsb2NrLCBzdHViSW5mbywg
c3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLAorICAgICAgICAgICAgICAgICAgICBhcHBy
b3ByaWF0ZU9wdGltaXppbmdQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCksIGZhbHNlKTsK
KyAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0UHV0QnlJZFJlcGxhY2UoCisgICAgICAgICAg
ICAgICAgICAgIHZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUsIHNs
b3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0
ZXI7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJl
OwotICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0Owot
ICAgICAgICAgICAgaWYgKCFlbWl0UHV0VHJhbnNpdGlvblN0dWIoZXhlYywgdm0sIHN0cnVjdHVy
ZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kLCBvbGRTdHJ1Y3R1cmUsIGNvbmRpdGlv
blNldCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAg
ICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6cmVwbGFjZSh2bSwgb3duZXIsIHN0cnVjdHVyZSwgc2xv
dC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQo
c2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpOZXdQcm9wZXJ0eSk7CiAKLSAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcCgKLSAgICAgICAgICAgICAgICBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KAotICAgICAgICAgICAgICAgICAgICBz
dHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1bXApLAotICAgICAgICAgICAgICAgIENvZGVMb2Nh
dGlvbkxhYmVsKHN0dWJJbmZvLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgICAg
ICAgICByZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwg
YXBwcm9wcmlhdGVMaXN0QnVpbGRpbmdQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBzdHViSW5mby5pbml0UHV0QnlJZFRyYW5zaXRpb24o
KnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBvbGRTdHJ1Y3R1cmUsIHN0cnVjdHVy
ZSwgY29uZGl0aW9uU2V0LCBwdXRLaW5kID09IERpcmVjdCk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIGlm
ICghc3RydWN0dXJlLT5pc09iamVjdCgpIHx8IHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAKLSAgICAgICAgaWYgKCFNYWNy
b0Fzc2VtYmxlcjo6aXNQdHJBbGlnbmVkQWRkcmVzc09mZnNldChvZmZzZXRSZWxhdGl2ZVRvUGF0
Y2hlZFN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpKQotICAgICAgICAgICAgcmV0dXJuIEdp
dmVVcE9uQ2FjaGU7CisgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CisgICAgICAg
ICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9CisgICAgICAgICAgICAgICAgU3RydWN0dXJl
OjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KAor
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSwgMCwgb2Zmc2V0KTsK
KyAgICAgICAgICAgIGlmICghbmV3U3RydWN0dXJlIHx8ICFuZXdTdHJ1Y3R1cmUtPnByb3BlcnR5
QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25D
YWNoZTsKIAotICAgICAgICBzdHJ1Y3R1cmUtPmRpZENhY2hlUHJvcGVydHlSZXBsYWNlbWVudCgq
dm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwotICAgICAgICByZXBhdGNoQnlJZFNlbGZBY2Nlc3Mo
KnZtLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIGlkZW50LCBzbG90LmNhY2hlZE9m
ZnNldCgpLCBhcHByb3ByaWF0ZUxpc3RCdWlsZGluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRL
aW5kKSwgZmFsc2UpOwotICAgICAgICBzdHViSW5mby5pbml0UHV0QnlJZFJlcGxhY2UoKnZtLCBj
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUpOwotICAgICAgICByZXR1cm4g
UmV0cnlDYWNoZUxhdGVyOwotICAgIH0KKyAgICAgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUt
PnByZXZpb3VzSUQoKSA9PSBzdHJ1Y3R1cmUpOworICAgICAgICAgICAgQVNTRVJUKCFuZXdTdHJ1
Y3R1cmUtPmlzRGljdGlvbmFyeSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUt
PmlzT2JqZWN0KCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCBjb25kaXRpb25TZXQ7CisgICAgICAgICAgICBpZiAocHV0S2luZCA9PSBOb3RE
aXJlY3QpIHsKKyAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPQorICAgICAgICAgICAgICAg
ICAgICBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3MoCisgICAgICAgICAg
ICAgICAgICAgICAgICB2bSwgb3duZXIsIGV4ZWMsIG5ld1N0cnVjdHVyZSwgaWRlbnQuaW1wbCgp
KTsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgfQogCi0gICAg
aWYgKChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgfHwgc2xvdC5pc0NhY2hlYWJsZVNldHRlcigp
KQotICAgICAgICAmJiBzdHViSW5mby5wYXRjaC5zcGlsbE1vZGUgPT0gRG9udFNwaWxsKSB7Ci0g
ICAgICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7CisgICAgICAgICAgICBu
ZXdDYXNlID0gQWNjZXNzQ2FzZTo6dHJhbnNpdGlvbih2bSwgb3duZXIsIHN0cnVjdHVyZSwgbmV3
U3RydWN0dXJlLCBvZmZzZXQsIGNvbmRpdGlvblNldCk7CisgICAgICAgIH0KKyAgICB9IGVsc2Ug
aWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSB8fCBzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkp
IHsKKyAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkgeworICAgICAgICAgICAg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OwogCi0gICAgICAgIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKLSAgICAgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0OwotICAgICAgICBpZiAoc2xvdC5iYXNlKCkgIT0gYmFzZVZhbHVlKSB7Ci0gICAg
ICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpKSB7CisgICAgICAgICAgICBpZiAo
c2xvdC5iYXNlKCkgIT0gYmFzZVZhbHVlKSB7CiAgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0
ID0KICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJv
cGVydHlIaXRDdXN0b20oCi0gICAgICAgICAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5iYXNlKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICBpZGVudC5pbXBsKCkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPQotICAgICAgICAgICAgICAgICAgICBnZW5lcmF0
ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKLSAgICAgICAgICAgICAgICAgICAg
ICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBz
bG90LmJhc2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50LmltcGwoKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB2bSwgb3duZXIsIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5iYXNl
KCksIGlkZW50LmltcGwoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNW
YWxpZCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgIG9mZnNldCA9IHNs
b3QuaXNDYWNoZWFibGVDdXN0b20oKSA/IGludmFsaWRPZmZzZXQgOiBjb25kaXRpb25TZXQuc2xv
dEJhc2VDb25kaXRpb24oKS5vZmZzZXQoKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBv
ZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOwotCi0gICAgICAgIFBvbHltb3JwaGljUHV0QnlJ
ZExpc3QqIGxpc3Q7Ci0gICAgICAgIGxpc3QgPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojpmcm9t
KHB1dEtpbmQsIHN0dWJJbmZvKTsKLQotICAgICAgICBib29sIHJlc3VsdCA9IGdlbmVyYXRlQnlJ
ZFN0dWIoCi0gICAgICAgICAgICBleGVjLCBraW5kRm9yKHNsb3QpLCBpZGVudCwgY3VzdG9tRm9y
KHNsb3QpLCBzdHViSW5mbywgY29uZGl0aW9uU2V0LCBzbG90LmJhc2UoKSwKLSAgICAgICAgICAg
IG9mZnNldCwgc3RydWN0dXJlLCBmYWxzZSwgbnVsbHB0ciwKLSAgICAgICAgICAgIHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2Fs
bFRvRG9uZSksCi0gICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxB
dE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKSwKLSAgICAgICAgICAg
IHN0dWJSb3V0aW5lKTsKLSAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAgICByZXR1cm4g
R2l2ZVVwT25DYWNoZTsKLSAgICAgICAgCi0gICAgICAgIGxpc3QtPmFkZEFjY2VzcyhQdXRCeUlk
QWNjZXNzOjpzZXR0ZXIoCi0gICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksCi0gICAgICAgICAgICBzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkgPyBQdXRCeUlkQWNj
ZXNzOjpTZXR0ZXIgOiBQdXRCeUlkQWNjZXNzOjpDdXN0b21TZXR0ZXIsCi0gICAgICAgICAgICBz
dHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgc2xvdC5jdXN0b21TZXR0ZXIoKSwgc3R1YlJvdXRpbmUp
KTsKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1bXAp
LCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgICAg
ICByZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBw
cm9wcmlhdGVMaXN0QnVpbGRpbmdQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOwotICAg
ICAgICBSRUxFQVNFX0FTU0VSVCghbGlzdC0+aXNGdWxsKCkpOwotICAgICAgICByZXR1cm4gUmV0
cnlDYWNoZUxhdGVyOwotICAgIH0KLQotICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotfQotCi12
b2lkIHJlcGF0Y2hQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0
IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRL
aW5kIHB1dEtpbmQpCi17Ci0gICAgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoZXhl
Yy0+Y29kZUJsb2NrKCktPm1fbG9jaywgZXhlYy0+dm0oKS5oZWFwKTsKLSAgICAKLSAgICBpZiAo
dHJ5Q2FjaGVQdXRCeUlEKGV4ZWMsIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUs
IHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kKSA9PSBHaXZlVXBPbkNhY2hlKQotICAgICAgICByZXBh
dGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBh
cHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOwotfQogCi1z
dGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVpbGRQdXRCeUlkTGlzdChFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQotewotICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
Ci0KLSAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKLSAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7Ci0KLSAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGVQdXQoKSAmJiAhc2xvdC5pc0NhY2hl
YWJsZUN1c3RvbSgpICYmICFzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkpCi0gICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOwotCi0gICAgaWYgKCFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNB
cmVDYWNoZWFibGUoKSkKLSAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAvLyBP
cHRpbWl6ZSBzZWxmIGFjY2Vzcy4KLSAgICBpZiAoc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlICYm
IHNsb3QuaXNDYWNoZWFibGVQdXQoKSkgewotICAgICAgICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0
KiBsaXN0OwotICAgICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwotICAg
ICAgICAKLSAgICAgICAgaWYgKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6TmV3UHJv
cGVydHkpIHsKLSAgICAgICAgICAgIGxpc3QgPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojpmcm9t
KHB1dEtpbmQsIHN0dWJJbmZvKTsKLSAgICAgICAgICAgIGlmIChsaXN0LT5pc0Z1bGwoKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsgLy8gV2lsbCBnZXQgaGVyZSBkdWUg
dG8gcmVjdXJzaW9uLgotCi0gICAgICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZTsKKyAg
ICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpzZXR0ZXIoCisgICAgICAgICAgICAgICAg
dm0sIG93bmVyLCBBY2Nlc3NDYXNlOjpDdXN0b21TZXR0ZXIsIHN0cnVjdHVyZSwgaW52YWxpZE9m
ZnNldCwgY29uZGl0aW9uU2V0LAorICAgICAgICAgICAgICAgIHNsb3QuY3VzdG9tU2V0dGVyKCks
IHNsb3QuYmFzZSgpKTsKKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKLSAgICAgICAgICAgIGlmICghZW1pdFB1dFRy
YW5zaXRpb25TdHViKGV4ZWMsIHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1
YkluZm8sIHB1dEtpbmQsIG9sZFN0cnVjdHVyZSwgY29uZGl0aW9uU2V0KSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldDsKIAotICAgICAgICAgICAgc3R1YlJvdXRpbmUgPSBzdHViSW5mby5zdHViUm91dGluZTsK
LSAgICAgICAgICAgIGxpc3QtPmFkZEFjY2VzcygKLSAgICAgICAgICAgICAgICBQdXRCeUlkQWNj
ZXNzOjp0cmFuc2l0aW9uKAotICAgICAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCksCi0gICAgICAgICAgICAgICAgICAgIG9sZFN0cnVjdHVyZSwgc3RydWN0
dXJlLCBjb25kaXRpb25TZXQsCi0gICAgICAgICAgICAgICAgICAgIHN0dWJSb3V0aW5lKSk7Cisg
ICAgICAgICAgICBpZiAoc2xvdC5iYXNlKCkgIT0gYmFzZVZhbHVlKSB7CisgICAgICAgICAgICAg
ICAgY29uZGl0aW9uU2V0ID0KKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb25z
Rm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCisgICAgICAgICAgICAgICAgICAgICAgICB2bSwgb3du
ZXIsIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5iYXNlKCksIGlkZW50LmltcGwoKSk7CisgICAgICAg
ICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSBjb25kaXRp
b25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vZmZzZXQoKTsKKyAgICAgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgICAgIG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CiAKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIGxpc3QgPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojpmcm9t
KHB1dEtpbmQsIHN0dWJJbmZvKTsKLSAgICAgICAgICAgIGlmIChsaXN0LT5pc0Z1bGwoKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsgLy8gV2lsbCBnZXQgaGVyZSBkdWUg
dG8gcmVjdXJzaW9uLgotICAgICAgICAgICAgCi0gICAgICAgICAgICBzdHJ1Y3R1cmUtPmRpZENh
Y2hlUHJvcGVydHlSZXBsYWNlbWVudCgqdm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICAvLyBXZSdyZSBub3cgY29tbWl0dGVkIHRvIGNyZWF0aW5nIHRo
ZSBzdHViLiBNb2dyaWZ5IHRoZSBtZXRhLWRhdGEgYWNjb3JkaW5nbHkuCi0gICAgICAgICAgICBi
b29sIHJlc3VsdCA9IGVtaXRQdXRSZXBsYWNlU3R1YigKLSAgICAgICAgICAgICAgICBleGVjLCBw
cm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCAKLSAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUs
IENvZGVMb2NhdGlvbkxhYmVsKGxpc3QtPmN1cnJlbnRTbG93UGF0aFRhcmdldCgpKSwgc3R1YlJv
dXRpbmUpOwotICAgICAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGxpc3QtPmFkZEFjY2Vz
cygKLSAgICAgICAgICAgICAgICBQdXRCeUlkQWNjZXNzOjpyZXBsYWNlKAotICAgICAgICAgICAg
ICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCi0gICAgICAgICAgICAg
ICAgICAgIHN0cnVjdHVyZSwgc3R1YlJvdXRpbmUpKTsKKyAgICAgICAgICAgIG5ld0Nhc2UgPSBB
Y2Nlc3NDYXNlOjpzZXR0ZXIoCisgICAgICAgICAgICAgICAgdm0sIG93bmVyLCBBY2Nlc3NDYXNl
OjpTZXR0ZXIsIHN0cnVjdHVyZSwgb2Zmc2V0LCBjb25kaXRpb25TZXQpOwogICAgICAgICB9Ci0g
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksIENvZGVM
b2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgICAgIGlmIChs
aXN0LT5pc0Z1bGwoKSkKLSAgICAgICAgICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24o
c2xvdCwgcHV0S2luZCkpOwotCi0gICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CiAgICAg
fQogCi0gICAgaWYgKChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgfHwgc2xvdC5pc0NhY2hlYWJs
ZVNldHRlcigpKQotICAgICAgICAmJiBzdHViSW5mby5wYXRjaC5zcGlsbE1vZGUgPT0gRG9udFNw
aWxsKSB7Ci0gICAgICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7Ci0gICAg
ICAgIAotICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7Ci0g
ICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKLSAgICAgICAgaWYgKHNsb3QuYmFzZSgpICE9
IGJhc2VWYWx1ZSkgewotICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkg
ewotICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9Ci0gICAgICAgICAgICAgICAgICAgIGdl
bmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0Q3VzdG9tKAotICAgICAgICAg
ICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBz
dHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlO
YW1lLmltcGwoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNvbmRp
dGlvblNldCA9Ci0gICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3Rv
dHlwZVByb3BlcnR5SGl0KAotICAgICAgICAgICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lLmltcGwoKSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICBvZmZzZXQgPSBzbG90LmlzQ2FjaGVh
YmxlQ3VzdG9tKCkgPyBpbnZhbGlkT2Zmc2V0IDogY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0
aW9uKCkub2Zmc2V0KCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgb2Zmc2V0ID0gc2xv
dC5jYWNoZWRPZmZzZXQoKTsKLQotICAgICAgICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiBsaXN0
OwotICAgICAgICBsaXN0ID0gUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6ZnJvbShwdXRLaW5kLCBz
dHViSW5mbyk7Ci0KLSAgICAgICAgYm9vbCByZXN1bHQgPSBnZW5lcmF0ZUJ5SWRTdHViKAotICAg
ICAgICAgICAgZXhlYywga2luZEZvcihzbG90KSwgcHJvcGVydHlOYW1lLCBjdXN0b21Gb3Ioc2xv
dCksIHN0dWJJbmZvLCBjb25kaXRpb25TZXQsIHNsb3QuYmFzZSgpLAotICAgICAgICAgICAgb2Zm
c2V0LCBzdHJ1Y3R1cmUsIGZhbHNlLCBudWxscHRyLAotICAgICAgICAgICAgc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9E
b25lKSwKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKGxpc3QtPmN1cnJlbnRTbG93UGF0
aFRhcmdldCgpKSwKLSAgICAgICAgICAgIHN0dWJSb3V0aW5lKTsKLSAgICAgICAgaWYgKCFyZXN1
bHQpCi0gICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgCi0gICAgICAg
IGxpc3QtPmFkZEFjY2VzcyhQdXRCeUlkQWNjZXNzOjpzZXR0ZXIoCi0gICAgICAgICAgICAqdm0s
IGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCi0gICAgICAgICAgICBzbG90LmlzQ2FjaGVh
YmxlU2V0dGVyKCkgPyBQdXRCeUlkQWNjZXNzOjpTZXR0ZXIgOiBQdXRCeUlkQWNjZXNzOjpDdXN0
b21TZXR0ZXIsCi0gICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgc2xvdC5jdXN0
b21TZXR0ZXIoKSwgc3R1YlJvdXRpbmUpKTsKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVw
YXRjaEp1bXAoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5m
by5wYXRjaC5kZWx0YUNhbGxUb0p1bXApLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+
Y29kZSgpLmNvZGUoKSkpOwotICAgICAgICBpZiAobGlzdC0+aXNGdWxsKCkpCi0gICAgICAgICAg
ICByZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBw
cm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKKyAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0ciA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UoCisgICAg
ICAgIHZtLCBjb2RlQmxvY2ssIGlkZW50LCBzdGQ6Om1vdmUobmV3Q2FzZSkpOworICAgIAorICAg
IGlmICghY29kZVB0cikKKyAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAKLSAgICAgICAg
cmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLSAgICB9Ci0gICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
CisgICAgcmVzZXRQdXRCeUlEQ2hlY2tBbmRMb2FkKHN0dWJJbmZvKTsKKyAgICBNYWNyb0Fzc2Vt
Ymxlcjo6cmVwYXRjaEp1bXAoCisgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5q
dW1wQXRPZmZzZXQoCisgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1bXAp
LAorICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChjb2RlUHRyKSk7CisgICAgCisgICAgcmV0dXJu
IFJldHJ5Q2FjaGVMYXRlcjsKIH0KIAotdm9pZCBidWlsZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCit2b2lkIHJlcGF0Y2hQdXRC
eUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xv
dCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCiB7
CiAgICAgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoZXhlYy0+Y29kZUJsb2NrKCkt
Pm1fbG9jaywgZXhlYy0+dm0oKS5oZWFwKTsKICAgICAKLSAgICBpZiAodHJ5QnVpbGRQdXRCeUlk
TGlzdChleGVjLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHVi
SW5mbywgcHV0S2luZCkgPT0gR2l2ZVVwT25DYWNoZSkKKyAgICBpZiAodHJ5Q2FjaGVQdXRCeUlE
KGV4ZWMsIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZv
LCBwdXRLaW5kKSA9PSBHaXZlVXBPbkNhY2hlKQogICAgICAgICByZXBhdGNoQ2FsbChleGVjLT5j
b2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUdlbmVy
aWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOwogfQogCkBAIC0xNDc5LDEwNiArNDgz
LDM1IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlSZXBhdGNoSW4oCiAgICAgfQogICAg
IAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1
Y3R1cmUoKnZtKTsKKyAgICBTY3JpcHRFeGVjdXRhYmxlKiBvd25lciA9IGNvZGVCbG9jay0+b3du
ZXJTY3JpcHRFeGVjdXRhYmxlKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2UtPnN0cnVjdHVyZSh2bSk7CiAgICAgCiAgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OwogICAgIGlmICh3YXNGb3VuZCkgewog
ICAgICAgICBpZiAoc2xvdC5zbG90QmFzZSgpICE9IGJhc2UpIHsKICAgICAgICAgICAgIGNvbmRp
dGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAotICAg
ICAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3Ry
dWN0dXJlLCBzbG90LnNsb3RCYXNlKCksIGlkZW50LmltcGwoKSk7CisgICAgICAgICAgICAgICAg
dm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5z
bG90QmFzZSgpLCBpZGVudC5pbXBsKCkpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNzKAotICAg
ICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1
cmUsIGlkZW50LmltcGwoKSk7CisgICAgICAgICAgICB2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBpZGVudC5pbXBsKCkpOwogICAgIH0KICAgICBpZiAo
IWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwot
ICAgIAotICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcG9seW1vcnBoaWNTdHJ1
Y3R1cmVMaXN0OwotICAgIGludCBsaXN0SW5kZXg7Ci0gICAgCi0gICAgQ29kZUxvY2F0aW9uTGFi
ZWwgc3VjY2Vzc0xhYmVsID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZz
ZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKTsKLSAgICBDb2RlTG9jYXRpb25MYWJl
bCBzbG93Q2FzZUxhYmVsOwotICAgIAotICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFj
Y2Vzc191bnNldCkgewotICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9s
eW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KCk7Ci0gICAgICAgIHN0dWJJbmZvLmluaXRJbkxp
c3QocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCAwKTsKLSAgICAgICAgc2xvd0Nhc2VMYWJlbCA9
IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAg
c3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSk7Ci0gICAgICAgIGxpc3RJbmRleCA9
IDA7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8uYWNjZXNz
VHlwZSA9PSBhY2Nlc3NfaW5fbGlzdCk7Ci0gICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlz
dCA9IHN0dWJJbmZvLnUuaW5MaXN0LnN0cnVjdHVyZUxpc3Q7Ci0gICAgICAgIGxpc3RJbmRleCA9
IHN0dWJJbmZvLnUuaW5MaXN0Lmxpc3RTaXplOwotICAgICAgICBzbG93Q2FzZUxhYmVsID0gQ29k
ZUxvY2F0aW9uTGFiZWwocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleCAt
IDFdLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChs
aXN0SW5kZXggPT0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKQotICAgICAgICAgICAgcmV0
dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgfQotICAgIAotICAgIFJlZlB0cjxKSVRTdHViUm91dGlu
ZT4gc3R1YlJvdXRpbmU7Ci0gICAgCi0gICAgewotICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IHN0
YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guYmFzZUdQUik7Ci0gICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVlR1BS
KTsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBUZW1wUmVnaXN0ZXJTZXQoc3R1YkluZm8u
cGF0Y2gudXNlZFJlZ2lzdGVycykuZ2V0RnJlZUdQUigpOwotICAgICAgICAKLSAgICAgICAgQ0Nh
bGxIZWxwZXJzIHN0dWJKaXQodm0pOwotICAgICAgICAKLSAgICAgICAgYm9vbCBuZWVkVG9SZXN0
b3JlU2NyYXRjaDsKLSAgICAgICAgaWYgKHNjcmF0Y2hHUFIgPT0gSW52YWxpZEdQUlJlZykgewot
ICAgICAgICAgICAgc2NyYXRjaEdQUiA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQ
UihiYXNlR1BSLCByZXN1bHRHUFIpOwotICAgICAgICAgICAgc3R1YkppdC5wdXNoVG9TYXZlKHNj
cmF0Y2hHUFIpOwotICAgICAgICAgICAgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSB0cnVlOwotICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gZmFsc2U7Ci0g
ICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzOwot
ICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoU3RydWN0dXJlKAotICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAotICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKLSAg
ICAgICAgICAgIHN0cnVjdHVyZSkpOwotCi0gICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
ZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkubmV3
SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCkpCi0gICAgICAgICAgICB2bS0+cmVnaXN0
ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVydHkoaWRlbnQsIHN0dWJJbmZvLmFkZFdhdGNocG9p
bnQoY29kZUJsb2NrKSk7CiAKLSAgICAgICAgaWYgKHNsb3Qud2F0Y2hwb2ludFNldCgpKQotICAg
ICAgICAgICAgc2xvdC53YXRjaHBvaW50U2V0KCktPmFkZChzdHViSW5mby5hZGRXYXRjaHBvaW50
KGNvZGVCbG9jaykpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBuZXdDYXNlID0g
QWNjZXNzQ2FzZTo6aW4oCisgICAgICAgIHZtLCBvd25lciwgd2FzRm91bmQgPyBBY2Nlc3NDYXNl
OjpJbkhpdCA6IEFjY2Vzc0Nhc2U6OkluTWlzcywgc3RydWN0dXJlLCBjb25kaXRpb25TZXQpOwog
Ci0gICAgICAgIGNoZWNrT2JqZWN0UHJvcGVydHlDb25kaXRpb25zKAotICAgICAgICAgICAgY29u
ZGl0aW9uU2V0LCBleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8sIHN0dWJKaXQsIGZhaWx1cmVD
YXNlcywgc2NyYXRjaEdQUik7Ci0gICAgICAgIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAg
IHN0dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29k
ZShqc0Jvb2xlYW4od2FzRm91bmQpKSksIHJlc3VsdEdQUik7Ci0jZWxzZQotICAgICAgICBzdHVi
Sml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih3YXNGb3VuZCksIHJlc3VsdEdQ
Uik7Ci0jZW5kaWYKLSAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nl
c3MsIGZhaWw7Ci0gICAgICAgIAotICAgICAgICBlbWl0UmVzdG9yZVNjcmF0Y2goc3R1YkppdCwg
bmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHNjcmF0Y2hHUFIsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVD
YXNlcyk7Ci0gICAgICAgIAotICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgc3R1
YkppdCwgZXhlYy0+Y29kZUJsb2NrKCksIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7Ci0gICAgICAg
IGlmIChwYXRjaEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKQotICAgICAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgIAotICAgICAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0
Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2Fz
ZXMsIHN1Y2Nlc3NMYWJlbCwgc2xvd0Nhc2VMYWJlbCk7Ci0gICAgICAgIAotICAgICAgICBzdHVi
Um91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAgICAgICBleGVjLT5jb2Rl
QmxvY2soKSwgcGF0Y2hCdWZmZXIsCi0gICAgICAgICAgICAoIkluIChmb3VuZCA9ICVzKSBzdHVi
IGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAgICAgICAgICAgICB3YXNGb3VuZCA/ICJ5
ZXMiIDogIm5vIiwgdG9DU3RyaW5nKCpleGVjLT5jb2RlQmxvY2soKSkuZGF0YSgpLAotICAgICAg
ICAgICAgICAgIHN1Y2Nlc3NMYWJlbC5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgfQotICAg
IAotICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNldCgqdm0s
IGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIHRy
dWUpOwotICAgIHN0dWJJbmZvLnUuaW5MaXN0Lmxpc3RTaXplKys7Ci0gICAgCi0gICAgTWFjcm9B
c3NlbWJsZXI6OnJlcGF0Y2hKdW1wKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRP
ZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwgQ29kZUxvY2F0aW9uTGFiZWwo
c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIg
Y29kZVB0ciA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2Uodm0sIGNvZGVCbG9jaywgaWRlbnQsIHN0
ZDo6bW92ZShuZXdDYXNlKSk7CisgICAgaWYgKCFjb2RlUHRyKQorICAgICAgICByZXR1cm4gR2l2
ZVVwT25DYWNoZTsKKworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcCgKKyAgICAgICAg
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5k
ZWx0YUNhbGxUb0p1bXApLAorICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChjb2RlUHRyKSk7CiAg
ICAgCi0gICAgcmV0dXJuIGxpc3RJbmRleCA8IChQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUg
LSAxKSA/IFJldHJ5Q2FjaGVMYXRlciA6IEdpdmVVcE9uQ2FjaGU7CisgICAgcmV0dXJuIFJldHJ5
Q2FjaGVMYXRlcjsKIH0KIAogdm9pZCByZXBhdGNoSW4oCkBAIC0xOTI4LDIyICs4NjEsNyBAQCB2
b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoCiB2b2lkIHJlc2V0R2V0QnlJRChDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogewogICAgIHJlcGF0Y2hDYWxs
KGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlk
T3B0aW1pemUpOwotICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyIHN0cnVjdHVyZUxhYmVsID0g
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoLShpbnRwdHJf
dClzdHViSW5mby5wYXRjaC5kZWx0YUNoZWNrSW1tVG9DYWxsKTsKLSAgICBpZiAoTWFjcm9Bc3Nl
bWJsZXI6OmNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goKSkgewotICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFu
Y2gzMldpdGhQYXRjaCgKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpzdGFydE9mUGF0Y2hh
YmxlQnJhbmNoMzJXaXRoUGF0Y2hPbkFkZHJlc3Moc3RydWN0dXJlTGFiZWwpLAotICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoCi0gICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+KHN0dWJJbmZvLnBhdGNoLmJhc2VHUFIpLAotICAg
ICAgICAgICAgICAgIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCi0gICAgICAgICAgICBz
dGF0aWNfY2FzdDxpbnQzMl90Pih1bnVzZWRQb2ludGVyKSk7Ci0gICAgfQotICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoSW50MzIoc3RydWN0dXJlTGFiZWwsIHN0YXRpY19jYXN0PGludDMyX3Q+
KHVudXNlZFBvaW50ZXIpKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIE1hY3JvQXNzZW1ibGVy
OjpyZXBhdGNoQ29tcGFjdChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29t
cGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCAwKTsK
LSNlbHNlCi0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDb21wYWN0KHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVs
dGFDYWxsVG9UYWdMb2FkT3JTdG9yZSksIDApOwotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNo
Q29tcGFjdChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zm
c2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKSwgMCk7Ci0j
ZW5kaWYKKyAgICByZXNldEdldEJ5SURDaGVja0FuZExvYWQoc3R1YkluZm8pOwogICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoSnVtcChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0
T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nh
c2UpKTsKIH0KIApAQCAtMTk1MSwzMyArODY5LDE4IEBAIHZvaWQgcmVzZXRQdXRCeUlEKENvZGVC
bG9jayogY29kZUJsb2NrLCAKIHsKICAgICBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJIHVub3B0aW1p
emVkRnVuY3Rpb24gPSBiaXR3aXNlX2Nhc3Q8Vl9KSVRPcGVyYXRpb25fRVNzaUpKST4ocmVhZENh
bGxUYXJnZXQoY29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24pLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpOwogICAgIFZfSklUT3BlcmF0aW9uX0VTc2lKSkkgb3B0aW1pemVkRnVuY3Rp
b247Ci0gICAgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmlj
dCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RCdWlsZExp
c3QpCisgICAgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmlj
dCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6
ZSkKICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0
aW1pemU7Ci0gICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRC
eUlkTm9uU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5v
blN0cmljdEJ1aWxkTGlzdCkKKyAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9w
ZXJhdGlvblB1dEJ5SWROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRp
b25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemUpCiAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0g
b3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOwotICAgIGVsc2UgaWYgKHVub3B0aW1p
emVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdCB8fCB1bm9wdGltaXpl
ZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExpc3QpCisgICAg
ZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3Ry
aWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmlj
dE9wdGltaXplKQogICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRE
aXJlY3RTdHJpY3RPcHRpbWl6ZTsKICAgICBlbHNlIHsKLSAgICAgICAgQVNTRVJUKHVub3B0aW1p
emVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdCB8fCB1bm9wdGlt
aXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RCdWlsZExpc3Qp
OworICAgICAgICBBU1NFUlQodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0Tm9uU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJ
ZERpcmVjdE5vblN0cmljdE9wdGltaXplKTsKICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBv
cGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CiAgICAgfQogICAgIHJlcGF0
Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcHRpbWl6ZWRG
dW5jdGlvbik7Ci0gICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzIgc3RydWN0dXJlTGFiZWwgPSBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldCgtKGludHB0cl90
KXN0dWJJbmZvLnBhdGNoLmRlbHRhQ2hlY2tJbW1Ub0NhbGwpOwotICAgIGlmIChNYWNyb0Fzc2Vt
Ymxlcjo6Y2FuSnVtcFJlcGxhY2VQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaCgpKSB7Ci0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5j
aDMyV2l0aFBhdGNoKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0YXJ0T2ZQYXRjaGFi
bGVCcmFuY2gzMldpdGhQYXRjaE9uQWRkcmVzcyhzdHJ1Y3R1cmVMYWJlbCksCi0gICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcygKLSAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxN
YWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRD4oc3R1YkluZm8ucGF0Y2guYmFzZUdQUiksCi0gICAg
ICAgICAgICAgICAgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKLSAgICAgICAgICAgIHN0
YXRpY19jYXN0PGludDMyX3Q+KHVudXNlZFBvaW50ZXIpKTsKLSAgICB9Ci0gICAgTWFjcm9Bc3Nl
bWJsZXI6OnJlcGF0Y2hJbnQzMihzdHJ1Y3R1cmVMYWJlbCwgc3RhdGljX2Nhc3Q8aW50MzJfdD4o
dW51c2VkUG9pbnRlcikpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGF0Y2hJbnQzMihzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9m
ZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0xvYWRPclN0b3JlKSwgMCk7Ci0jZWxzZQot
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9UYWdMb2Fk
T3JTdG9yZSksIDApOwotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIoc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVs
dGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUpLCAwKTsKLSNlbmRpZgorICAgIHJlc2V0UHV0QnlJ
RENoZWNrQW5kTG9hZChzdHViSW5mbyk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1w
KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGVsdGFDYWxsVG9KdW1wKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZz
ZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwogfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3IuY3BwCShyZXZpc2lvbiAxODk1MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDgg
QEAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjp+U2NyYXRjaFJlZ2lzdAogCiB2b2lkIFNjcmF0
Y2hSZWdpc3RlckFsbG9jYXRvcjo6bG9jayhHUFJSZWcgcmVnKQogeworICAgIGlmIChyZWcgPT0g
SW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuOwogICAgIHVuc2lnbmVkIGluZGV4ID0gR1BS
SW5mbzo6dG9JbmRleChyZWcpOwogICAgIGlmIChpbmRleCA9PSBHUFJJbmZvOjpJbnZhbGlkSW5k
ZXgpCiAgICAgICAgIHJldHVybjsKQEAgLTUyLDEyICs1NCwyMCBAQCB2b2lkIFNjcmF0Y2hSZWdp
c3RlckFsbG9jYXRvcjo6bG9jayhHUFJSCiAKIHZvaWQgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
Ojpsb2NrKEZQUlJlZyByZWcpCiB7CisgICAgaWYgKHJlZyA9PSBJbnZhbGlkRlBSUmVnKQorICAg
ICAgICByZXR1cm47CiAgICAgdW5zaWduZWQgaW5kZXggPSBGUFJJbmZvOjp0b0luZGV4KHJlZyk7
CiAgICAgaWYgKGluZGV4ID09IEZQUkluZm86OkludmFsaWRJbmRleCkKICAgICAgICAgcmV0dXJu
OwogICAgIG1fbG9ja2VkUmVnaXN0ZXJzLnNldEZQUkJ5SW5kZXgoaW5kZXgpOwogfQogCit2b2lk
IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6bG9jayhKU1ZhbHVlUmVncyByZWdzKQoreworICAg
IGxvY2socmVncy50YWdHUFIoKSk7CisgICAgbG9jayhyZWdzLnBheWxvYWRHUFIoKSk7Cit9CisK
IHRlbXBsYXRlPHR5cGVuYW1lIEJhbmtJbmZvPgogdHlwZW5hbWUgQmFua0luZm86OlJlZ2lzdGVy
VHlwZSBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OmFsbG9jYXRlU2NyYXRjaCgpCiB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yLmgJKHJldmlzaW9uIDE4OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDExICs0MCwx
MyBAQCBzdHJ1Y3QgU2NyYXRjaEJ1ZmZlcjsKIAogY2xhc3MgU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yIHsKIHB1YmxpYzoKKyAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IoKSB7IH0KICAgICBT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IoY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMp
OwogICAgIH5TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IoKTsKIAotICAgIHZvaWQgbG9jayhHUFJS
ZWcgcmVnKTsKLSAgICB2b2lkIGxvY2soRlBSUmVnIHJlZyk7CisgICAgdm9pZCBsb2NrKEdQUlJl
Zyk7CisgICAgdm9pZCBsb2NrKEZQUlJlZyk7CisgICAgdm9pZCBsb2NrKEpTVmFsdWVSZWdzKTsK
ICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rSW5mbz4KICAgICB0eXBlbmFtZSBCYW5r
SW5mbzo6UmVnaXN0ZXJUeXBlIGFsbG9jYXRlU2NyYXRjaCgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMTg5NTE1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODgsNiAr
MTg4LDcgQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgdihib29sLCBj
bG9iYmVyQWxsUmVnc0luRlRMSUNTbG93UGF0aCwgIUFTU0VSVF9ESVNBQkxFRCwgbnVsbHB0cikg
XAogICAgIHYoYm9vbCwgYXNzdW1lQWxsUmVnc0luRlRMSUNBcmVMaXZlLCBmYWxzZSwgbnVsbHB0
cikgXAogICAgIHYoYm9vbCwgZW5hYmxlQWNjZXNzSW5saW5pbmcsIHRydWUsIG51bGxwdHIpIFwK
KyAgICB2KHVuc2lnbmVkLCBtYXhBY2Nlc3NWYXJpYW50TGlzdFNpemUsIDgsIG51bGxwdHIpIFwK
ICAgICB2KGJvb2wsIGVuYWJsZVBvbHl2YXJpYW50RGV2aXJ0dWFsaXphdGlvbiwgdHJ1ZSwgbnVs
bHB0cikgXAogICAgIHYoYm9vbCwgZW5hYmxlUG9seW1vcnBoaWNBY2Nlc3NJbmxpbmluZywgdHJ1
ZSwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgZW5hYmxlUG9seW1vcnBoaWNDYWxsSW5saW5pbmcs
IHRydWUsIG51bGxwdHIpIFwKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODk1MzQpCisrKyBTb3VyY2UvV1RG
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDE1LTA5LTA4ICBG
aWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgVGhlcmUgc2hvdWxkIGJl
IG9uZSBzdHViIGhhbmdpbmcgb2ZmIGFuIGlubGluZSBjYWNoZSB0aGF0IGNvbnRhaW5zIGNvZGUg
Zm9yIGFsbCBvZiB0aGUgY2FzZXMsIHJhdGhlciB0aGFuIGZvcm1pbmcgYSBsaW5rZWQgbGlzdCBj
b25zaXN0aW5nIG9mIG9uZSBzdHViIHBlciBjYXNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDg3MTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBCZWVmIHVwIGR1bXBpbmcgYSBiaXQuCisKKyAgICAgICAg
KiB3dGYvUHJpbnRTdHJlYW0uaDoKKyAgICAgICAgKFdURjo6cG9pbnRlckR1bXApOgorICAgICAg
ICAoV1RGOjpwcmludEludGVybmFsKToKKwogMjAxNS0wOS0wOCAgTWFyayBMYW0gIDxtYXJrLmxh
bUBhcHBsZS5jb20+CiAKICAgICAgICAgR0Mgc3RhY2sgc2NhbiBzaG91bGQgaW5jbHVkZSBBQkkg
cmVkIHpvbmUuCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QcmludFN0cmVhbS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL1ByaW50U3RyZWFtLmgJKHJldmlzaW9uIDE4OTUxNSkKKysrIFNv
dXJjZS9XVEYvd3RmL1ByaW50U3RyZWFtLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2
LDYgKzI2LDcgQEAKICNpZm5kZWYgUHJpbnRTdHJlYW1faAogI2RlZmluZSBQcmludFN0cmVhbV9o
CiAKKyNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8c3RkYXJnLmg+CiAjaW5jbHVkZSA8d3Rm
L0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KQEAgLTE2Miw2ICsx
NjMsMTIgQEAgcHJpdmF0ZToKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBQb2ludGVyRHVtcDxUPiBw
b2ludGVyRHVtcChjb25zdCBUKiBwdHIpIHsgcmV0dXJuIFBvaW50ZXJEdW1wPFQ+KHB0cik7IH0K
IAordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYg
b3V0LCBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8VD4mIHZhbHVlKQoreworICAgIG91dC5wcmludChw
b2ludGVyRHVtcCh2YWx1ZS5nZXQoKSkpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVPgogY2xhc3MgVmFsdWVJbkNvbnRleHQgewogcHVibGljOgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260868</attachid>
            <date>2015-09-09 12:52:34 -0700</date>
            <delta_ts>2015-09-09 16:14:23 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>276120</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg5NTQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1MCBA
QAorMjAxNS0wOS0wOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFRoZXJlIHNob3VsZCBiZSBvbmUgc3R1YiBoYW5naW5nIG9mZiBhbiBpbmxpbmUgY2FjaGUgdGhh
dCBjb250YWlucyBjb2RlIGZvciBhbGwgb2YgdGhlIGNhc2VzLCByYXRoZXIgdGhhbiBmb3JtaW5n
IGEgbGlua2VkIGxpc3QgY29uc2lzdGluZyBvZiBvbmUgc3R1YiBwZXIgY2FzZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4NzE3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBhIG1ham9yIHJl
d3JpdGUgb2YgdGhlIEpTQyBnZXQvcHV0L2luIGlubGluZSBjYWNoZXMgKElDcyksIG1vdGl2YXRl
ZCBieSB0aGUgbmVlZCB0byBhZGQKKyAgICAgICAgZmFuY3kgbmV3IGtpbmRzIG9mIGlubGluZSBj
YWNoZXMgZm9yIHByb3BlcnR5IHR5cGUgaW5mZXJlbmNlIChodHRwczovL3dlYmtpdC5vcmcvYi8x
NDg2MTApLgorCisgICAgICAgIFByZXZpb3VzbHksIG91ciBpbmxpbmUgY2FjaGVzIGhhZCBzb21l
IHByb2JsZW1zIHRoYXQgbWFkZSB0aGVtIGRpZmZpY3VsdCB0byB3b3JrIHdpdGguIEl0IHdhcwor
ICAgICAgICBpbXBvc3NpYmxlIHRvIGNoYW5nZSBhbnkgY29kZSB0aGF0IHdhcyBwcmV2aW91c2x5
IGdlbmVyYXRlZCBieSB0aGUgSUMgZXhjZXB0IGJ5IGJsb3dpbmcgdGhlCisgICAgICAgIHdob2xl
IElDIGF3YXksIHRoZSBJQ3Mgc2NhbGVkIHBvb3JseSBpZiB0aGVyZSB3ZXJlIG1hbnkgY2FzZXMs
IGFuZCB0aGVyZSB3YXMgYSBsb3Qgb2YgZHVwbGljYXRlCisgICAgICAgIGFuZCBhZCBob2MgY29k
ZS4KKworICAgICAgICBJbXBvc3NpYmxlIHRvIHJlZ2VuZXJhdGUgYSBwcmV2aW91c2x5IGdlbmVy
YXRlZCBzdHViOiBTYXkgdGhhdCBzb21lIGFjY2VzcyAoby5mID0gdikgY2F1c2VzIG91cgorICAg
ICAgICBJQyBjb2RlIHRvIGVtaXQgc29tZSBzdHViOyBsZXQncyBjYWxsIGl0IHN0dWIxLiBUaGVu
IGxhdGVyIHdlIGZpbmQgdGhhdCB3ZSBuZWVkIHRvIGVtaXQgYQorICAgICAgICBkaWZmZXJlbnQg
c3R1Yiwgc3R1YjIsIHdoZXJlIHdlIHRoaW5rIHRoYXQgc3R1YjIgbWlnaHQgc3Vic3VtZSBzdHVi
MS4gV2Ugc2F5IHRoYXQgc3R1YjIKKyAgICAgICAgc3Vic3VtZXMgc3R1YjEgaWYgZmFpbGluZyB0
byBleGVjdXRlIHN0dWIyIHRvIGNvbXBsZXRpb24gbWVhbnMgdGhhdCB3ZSBhcmUgZ3VhcmFudGVl
ZCB0byBmYWlsCisgICAgICAgIHRvIGV4ZWN1dGUgc3R1YjEgdG8gY29tcGxldGlvbi4gVGhpcyBj
b3VsZCBoYXBwZW4gaW4gdHJ1bmsgaWYgc3R1YjIgaGFzIHRoZSBzYW1lIGJhc2Ugc3RydWN0dXJl
CisgICAgICAgIGFzIHN0dWIxIGJ1dCBkaWZmZXJlbnQgcHJvdG90eXBlIGNvbmRpdGlvbnMuIEl0
IGNvdWxkIGhhcHBlbiB3aXRoIHByb3BlcnR5IHR5cGUgaW5mZXJlbmNlIGlmCisgICAgICAgIHN0
dWIyIGhhcyBhIGxvb3NlciB0eXBlIGNoZWNrIG9uIHYgdGhhbiBzdHViMSBkaWQuIEN1cnJlbnRs
eSwgaWYgdGhpcyBoYXBwZW5lZCwgd2Ugd291bGQgZW1pdAorICAgICAgICBzdHViMiBhbmQgaGF2
ZSBpdHMgc2xvdyBwYXRoIGp1bXAgdG8gc3R1YjEuIEhlbmNlLCB3ZSB3b3VsZCBzdGlsbCBlbmQg
dXAgZXhlY3V0aW5nIHRoZSBjaGVja3MKKyAgICAgICAgb2Ygc3R1YjEgYmVmb3JlIGZhbGxpbmcg
dGhyb3VnaCB0byB0aGUgc2xvdyBwYXRoLiBUaGlzIGdldHMgYmFkIHdoZW4gdGhlcmUgYXJlIG1h
bnkgc3R1YnMuCisgICAgICAgIFN0dWIxIG1pZ2h0IGJlIGluIGZyb250IG9mIGEgYnVuY2ggb2Yg
b3RoZXIgc3R1YnMsIHNvIHdoZW4gd2UgYWRkIHN0dWIyLCB3ZSB3aWxsIGVuZCB1cAorICAgICAg
ICBleGVjdXRpbmcgYm90aCBzdHViMidzIGFuZCBzdHViMSdzIGNoZWNrcyBiZWZvcmUgZmFsbGlu
ZyB0aHJvdWdoIHRvIHRoZSBvdGhlciBzdHVicy4gSXQgd291bGQKKyAgICAgICAgYmUgYmV0dGVy
IGlmIHdlIGNvdWxkIHJlbW92ZSBzdHViMSBmcm9tIHRoZSBsaXN0IGF0IHRoaXMgcG9pbnQuIEJ1
dCBzaW5jZSBzdHViMSBjb3VsZCBiZSBsaW5rZWQKKyAgICAgICAgdG8gZnJvbSBhIGRpZmZlcmVu
dCBzdHViIHRoYXQgd2UgaGFkIGFscmVhZHkgZ2VuZXJhdGVkLCB3ZSdkIGhhdmUgdG8gaGF2ZSBh
IHdheSBvZiBwYXRjaGluZworICAgICAgICBzdHVicyBvciByZWdlbmVyYXRpbmcgdGhlbSBmcm9t
IHNjcmF0Y2guIFRoaXMgaXMgY3VycmVudHkgaW1wb3NzaWJsZSBiZWNhdXNlIHdlIGp1c3QgZG9u
J3Qga2VlcAorICAgICAgICBhcm91bmQgZW5vdWdoIG1ldGEtZGF0YSB0byBtZXNzIHdpdGggYSBz
dHViIGFmdGVyIGl0J3MgZ2VuZXJhdGVkLiBBZnRlciB0aGlzIGNoYW5nZSwgd2UgbmV2ZXIKKyAg
ICAgICAgbGluayBuZXcgc3R1YnMgb250byBhIGxpbmtlZCBsaXN0IG9mIHByZS1leGlzdGluZyBz
dHViczsgaW5zdGVhZCBlYWNoIElDIHdpbGwgaGF2ZSBvbmUgc3R1YgorICAgICAgICBoYW5naW5n
IG9mZiBvZiBpdCBhbmQgd2UgYWx3YXlzIHJlZ2VuZXJhdGUgdGhhdCBvbmUgc3R1YiBmcm9tIHNj
cmF0Y2guIFRoYXQgb25lIHN0dWIgY29udGFpbnMKKyAgICAgICAgZWl0aGVyIGEgQmluYXJ5U3dp
dGNoIG9yIGEgYnJhbmNoIGNhc2NhZGUgdG8gc2VsZWN0IG9uZSBvZiB0aGUgQWNjZXNzQ2FzZXMu
IEVhY2ggQWNjZXNzQ2FzZSBpcworICAgICAgICBhbiBvYmplY3QgdGhhdCBkZXNjcmliZXMgZXZl
cnl0aGluZyB3ZSBuZWVkIHRvIHJlZ2VuZXJhdGUgaXQgaW4gdGhlIGZ1dHVyZS4gVGhpcyBtZWFu
cyB0aGF0CisgICAgICAgIHdoZW4gd2UgYWRkIGEgbmV3IGNhc2UgdG8gYW4gSUMgc3R1Yiwgd2Ug
Y2FuIGZpZ3VyZSBvdXQgd2hpY2ggcHJldmlvdXMgY2FzZXMgdGhpcyBvbmUgc3Vic3VtZXMuCisK
KyAgICAgICAgUG9vciBzY2FsYWJpbGl0eSB3aGVuIHRoZXJlIGFyZSBtYW55IGNhc2VzOiBQcmV2
aW91c2x5LCB0aGUgY2FzZXMgb2YgYSBwb2x5bW9ycGhpYyBpbmxpbmUgY2FjaGUKKyAgICAgICAg
Zm9ybWVkIGEgbGlua2VkIGxpc3Qgb2YgYnJhbmNoZXMuIFRoaXMgbWVhbnQgdGhhdCB0aGUgY29t
cGxleGl0eSBvZiBhbiBpbmxpbmUgY2FjaGUgZ3JldworICAgICAgICBsaW5lYXJseSB3aXRoIHRo
ZSBudW1iZXIgb2YgY2FzZXMuIFRoaXMgY2hhbmdlIHR1cm5zIHRoaXMgaW50byBhIEJpbmFyeVN3
aXRjaCBpbiBtb3N0IGNhc2VzLAorICAgICAgICBsZWFkaW5nIHRvIGxvZ2FyaXRobWljIHNjYWxp
bmcuCisKKyAgICAgICAgRHVwbGljYXRlIGNvZGUgYmV0d2VlbiBnZXQsIHB1dCwgYW5kIGluOiBU
aGUgY29kZSBmb3Igb3BfZ2V0X2J5X2lkLCBvcF9wdXRfYnlfaWQsIGFuZCBvcF9pbgorICAgICAg
ICBpbmxpbmUgY2FjaGVzIGdyZXcgaW5kZXBlbmRlbnRseSBhbmQgZW5kZWQgdXAgaGF2aW5nIGEg
bG90IG9mIGR1cGxpY2F0ZSBjb2RlLiBXZSBoYWQgdGhlIHdvcnN0CisgICAgICAgIGtpbmRzIG9m
IGR1cGxpY2F0ZSBjb2RlLiBJbiBzb21lIGNhc2VzLCB0aGUgY29kZSB3YXMgY29weS1wYXN0ZWQu
IEluIG90aGVyIGNhc2VzLCB3ZSB3cm90ZSBjb2RlCisgICAgICAgIHRoYXQgZmVsdCBsaWtlIGl0
IHdhcyBuZXcgZGVzcGl0ZSB0aGUgZmFjdCB0aGF0IGl0IHdhcyBsb2dpY2FsbHkgaWRlbnRpY2Fs
IHRvIGNvZGUgdGhhdCB3YXMKKyAgICAgICAgYWxyZWFkeSB3cml0dGVuIGVsc2V3aGVyZS4gVGhl
IG1haW4gc291cmNlcyBvZiBkdXBsaWNhdGlvbiB3ZXJlIGluIHNlbGVjdGluZyBhIHNjcmF0Y2gK
KyAgICAgICAgcmVnaXN0ZXIsIGNoZWNraW5nIGFsbCBvZiB0aGUgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25zIGFuZCB0aGUgYmFzZSBzdHJ1Y3R1cmUsIHRoZSBwcm8gZm9ybWEKKyAgICAgICAgaW52
b2x2ZWQgaW4gZ2VuZXJhdGluZyBhIHN0dWIsIGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIG5lZWRl
ZCB0byBkZXNjcmliZSBhbGwgb2YgdGhlIGFjY2VzcworICAgICAgICBjYXNlcy4gVGhpcyBjaGFu
Z2UgZGVkdXBsaWNhdGVzIGFsbCBvZiB0aGF0IGNvZGUuIE5vdywgYWxsIG9mIHRob3NlIElDcyB1
c2UgdGhlIHNhbWUgY2xhc3NlczoKKyAgICAgICAgdGhlIFBvbHltb3JwaGljQWNjZXNzIGFuZCBB
Y2Nlc3NDYXNlLiBUaGVyZSBpcyBjb2RlIGluIHRob3NlIGNsYXNzZXMgdGhhdCBoYW5kbGVzIGFs
bCBvZiB0aGUKKyAgICAgICAgY29tbW9uIHRoaW5ncywgYW5kIGZvciB0aGUgbW9zdCBwYXJ0IHRo
ZSBvbmx5IGNvZGUgdGhhdCBhY3R1YWxseSBzcGVjaWFsaXplcyBmb3IgdGhlIGtpbmQgb2YKKyAg
ICAgICAgYWNjZXNzIGlzIGluIHNvbWUgc3dpdGNoIHN0YXRlbWVudCBpbiBBY2Nlc3NDYXNlOjpn
ZW5lcmF0ZSgpLgorCisgICAgICAgIFNwZWNpYWwtY2FzaW5nIG9mIGFycmF5IGxlbmd0aCBhbmQg
c3RyaW5nIGxlbmd0aDogUHJldmlvdXNseSwgYXJyYXkubGVuZ3RoIGFuZCBzdHJpbmcubGVuZ3Ro
CisgICAgICAgIHdlcmUgaGFuZGxlZCBpbiBhbiBhZCBob2MgbWFubmVyIGluIHRoZSBnZXRfYnlf
aWQgcmVwYXRjaGluZyBjb2RlLiBUaGUgaGFuZGxpbmcgd2FzIHNlcGFyYXRlCisgICAgICAgIGZy
b20gdGhlIHBvbHltb3JwaGljIGdldF9ieV9pZCBoYW5kbGluZywgd2hpY2ggbWVhbnQgdGhhdCB3
ZSBjb3VsZCBub3QgaGFuZGxlIHBvbHltb3JwaGljCisgICAgICAgIGxlbmd0aCBhY2Nlc3NlcyBp
ZiBvbmUgb2YgdGhlIGxlbmd0aCBjYXNlcyB3YXMgZWl0aGVyIGFycmF5IG9yIHN0cmluZyBsZW5n
dGguIEZvciBleGFtcGxlLCBpZgorICAgICAgICB5b3UgaGFkICJvLmxlbmd0aCIgd2hlcmUgdGhl
IGxlbmd0aCB3YXMgZWl0aGVyIGFycmF5IGxlbmd0aCBvciBhIHZhbmlsbGEgbGVuZ3RoIHByb3Bl
cnR5LCB0aGVuCisgICAgICAgIHRoZSBnZXRfYnlfaWQgaW5saW5lIGNhY2hlIHdvdWxkIGVpdGhl
ciBlbWl0IGEgbW9ub21vcnBoaWMgc3R1YiBmb3IgYXJyYXkgbGVuZ3RoLCBvciBhCisgICAgICAg
IG1vbm9tb3JwaGljIHN0dWIgZm9yIHRoZSB2YW5pbGxhIGxlbmd0aCBwcm9wZXJ0eSwgYnV0IG5l
dmVyIGEgcG9seW1vcnBoaWMgc3R1YiAob3IgbGlzdCkgdGhhdAorICAgICAgICBjb3VsZCBkbyBi
b3RoLiBUaGlzIGNoYW5nZSBhZGRyZXNzZXMgdGhpcyBwcm9ibGVtIGJ5IGZvbGRpbmcgYXJyYXkg
bGVuZ3RoIGFuZCBzdHJpbmcgbGVuZ3RoCisgICAgICAgIGludG8gdGhlIHBvbHltb3JwaGljIGdl
dF9ieV9pZCBjb2RlLgorCisgICAgICAgIFRoaXMgd2FzIG1lYW50IHRvIGJlIGEgcGVyZi1uZXV0
cmFsIGNoYW5nZSB0byBlbmFibGUgcHJvcGVydHkgdHlwZSBpbmZlcmVuY2UsIGJ1dCBpdCBlbmRl
ZCB1cAorICAgICAgICBiZWluZyBhIDElIE9jdGFuZSBzcGVlZC11cCwgbWFpbmx5IGJlY2F1c2Ug
b2YgYSAxNCUgc3BlZWQtdXAgaW4gcmF5dHJhY2UuIFRoaXMgaXNuJ3QgdG9vCisgICAgICAgIHN1
cnByaXNpbmcsIHNpbmNlIHRoYXQgdGVzdCBkb2VzIHVzZSBpbmxpbmUgY2FjaGVzIGEgbG90IGFu
ZCB0aGlzIGNoYW5nZSBtYWtlcyBpbmxpbmUgY2FjaGVzCisgICAgICAgIG1vcmUgc2NhbGFibGUu
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52
Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUu
dmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgICogSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBhc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjo6ZHVtcFdpdGhOYW1lKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnByaW50R2V0QnlJZENhY2hlU3RhdHVzKToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpwcmludFB1dEJ5SWRDYWNoZVN0YXR1cyk6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmdldEJ5VmFsSW5mb01hcCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkU3R1
YkluZm8pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmRTdHViSW5mbyk6CisgICAgICAg
ICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c3R1Yklu
Zm9CZWdpbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c3R1YkluZm9FbmQpOgorICAgICAg
ICAqIGJ5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpHZXRCeUlkU3Rh
dHVzOjpjb21wdXRlRm9yU3R1YkluZm9XaXRob3V0RXhpdFNpdGVGZWVkYmFjayk6CisgICAgICAg
ICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAuCisgICAgICAg
IChKU0M6OkFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6YWRkV2F0Y2hwb2ludCk6CisgICAgICAgIChK
U0M6OkFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6cmVzdG9yZVNjcmF0Y2gpOgorICAgICAgICAoSlND
OjpBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnN1Y2NlZWQpOgorICAgICAgICAoSlNDOjpBY2Nlc3ND
YXNlOjpBY2Nlc3NDYXNlKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2V0KToKKyAgICAg
ICAgKEpTQzo6QWNjZXNzQ2FzZTo6cmVwbGFjZSk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6
OnRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpzZXR0ZXIpOgorICAgICAg
ICAoSlNDOjpBY2Nlc3NDYXNlOjppbik6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdldExl
bmd0aCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6On5BY2Nlc3NDYXNlKToKKyAgICAgICAg
KEpTQzo6QWNjZXNzQ2FzZTo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKToKKyAgICAgICAgKEpTQzo6
QWNjZXNzQ2FzZTo6Y2xvbmUpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpndWFyZGVkQnlT
dHJ1Y3R1cmVDaGVjayk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmNhblJlcGxhY2UpOgor
ICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2Fz
ZTo6dmlzaXRXZWFrKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3Vh
cmQpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZSk6CisgICAgICAgIChKU0M6
OlBvbHltb3JwaGljQWNjZXNzOjpQb2x5bW9ycGhpY0FjY2Vzcyk6CisgICAgICAgIChKU0M6OlBv
bHltb3JwaGljQWNjZXNzOjp+UG9seW1vcnBoaWNBY2Nlc3MpOgorICAgICAgICAoSlNDOjpQb2x5
bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZVdpdGhDYXNlcyk6CisgICAgICAgIChKU0M6OlBvbHlt
b3JwaGljQWNjZXNzOjpyZWdlbmVyYXRlV2l0aENhc2UpOgorICAgICAgICAoSlNDOjpQb2x5bW9y
cGhpY0FjY2Vzczo6dmlzaXRXZWFrKToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNBY2Nlc3M6
OmR1bXApOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZSk6Cisg
ICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpHZXRCeUlkQWNjZXNz
OjpHZXRCeUlkQWNjZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6
fkdldEJ5SWRBY2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpHZXRCeUlkQWNjZXNzOjpm
cm9tU3RydWN0dXJlU3R1YkluZm8pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpHZXRCeUlkQWNj
ZXNzOjp2aXNpdFdlYWspOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0dldEJ5
SWRMaXN0OjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
UG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6ZnJvbSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlBv
bHltb3JwaGljR2V0QnlJZExpc3Q6On5Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6Y3VycmVudFNsb3dQYXRoVGFy
Z2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6YWRk
QWNjZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6
aXNGdWxsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6
aXNBbG1vc3RGdWxsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNHZXRCeUlk
TGlzdDo6ZGlkU2VsZlBhdGNoaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UG9seW1vcnBo
aWNHZXRCeUlkTGlzdDo6dmlzaXRXZWFrKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9Q
b2x5bW9ycGhpY0FjY2Vzcy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oLgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNl
Ojppc0dldCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmlzUHV0KToKKyAgICAgICAgKEpT
Qzo6QWNjZXNzQ2FzZTo6aXNJbik6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OnR5cGUpOgor
ICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpvZmZzZXQpOgorICAgICAgICAoSlNDOjpBY2Nlc3ND
YXNlOjp2aWFQcm94eSk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OnN0cnVjdHVyZSk6Cisg
ICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6Om5ld1N0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkFj
Y2Vzc0Nhc2U6OmNvbmRpdGlvblNldCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmFkZGl0
aW9uYWxTZXQpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpkb2VzQ2FsbHMpOgorICAgICAg
ICAoSlNDOjpBY2Nlc3NDYXNlOjpjYWxsTGlua0luZm8pOgorICAgICAgICAoSlNDOjpQb2x5bW9y
cGhpY0FjY2Vzczo6aXNFbXB0eSk6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQWNjZXNzOjpz
aXplKToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNBY2Nlc3M6OmF0KToKKyAgICAgICAgKEpT
Qzo6UG9seW1vcnBoaWNBY2Nlc3M6Om9wZXJhdG9yW10pOgorICAgICAgICAoSlNDOjpHZXRCeUlk
QWNjZXNzOjpHZXRCeUlkQWNjZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6R2V0QnlJZEFj
Y2Vzczo6aXNTZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpHZXRCeUlkQWNjZXNzOjpvcGVy
YXRvciEpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpHZXRCeUlkQWNjZXNzOjp0eXBlKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6c3RydWN0dXJlKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6Y29uZGl0aW9uU2V0KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6c3R1YlJvdXRpbmUpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpHZXRCeUlkQWNjZXNzOjpkb2VzQ2FsbHMpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojppc0VtcHR5KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6UG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6c2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OlBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmF0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UG9s
eW1vcnBoaWNHZXRCeUlkTGlzdDo6b3BlcmF0b3JbXSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0
ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0Lmg6IFJlbW92ZWQuCisgICAgICAg
ICogYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oOiBSZW1vdmVkLgorICAgICAgICAq
IGJ5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IGJ5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBi
eXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1czo6
Y29tcHV0ZUZvclN0dWJJbmZvKToKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5m
by5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpkZXJlZik6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjphZGRBY2Nlc3NDYXNlKToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlU3R1YkluZm86OnJlc2V0KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1Yklu
Zm86OnZpc2l0V2Vha1JlZmVyZW5jZXMpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0
dWJJbmZvLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpTdHJ1Y3R1cmVTdHVi
SW5mbyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjppbml0R2V0QnlJZFNlbGYp
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdFB1dEJ5SWRSZXBsYWNlKToK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmluaXRTdHViKToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlU3R1YkluZm86OnNldFNlZW4pOgorICAgICAgICAoSlNDOjpnZXRTdHJ1Y3R1
cmVTdHViSW5mb0NvZGVPcmlnaW4pOgorICAgICAgICAoSlNDOjppc0dldEJ5SWRBY2Nlc3MpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjppc1B1dEJ5SWRBY2Nlc3MpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjppc0luQWNjZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1
YkluZm86OmluaXRHZXRCeUlkTGlzdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZVN0dWJJbmZvOjppbml0UHV0QnlJZFRyYW5zaXRpb24pOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdFB1dEJ5SWRMaXN0KTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmluaXRJbkxpc3QpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6YWRkV2F0Y2hwb2ludCk6IERlbGV0ZWQuCisgICAgICAg
ICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUluKToKKyAgICAgICAgKiBmdGwvRlRMQ29tcGlsZS5jcHA6CisgICAg
ICAgIChKU0M6OkZUTDo6bW1BbGxvY2F0ZURhdGFTZWN0aW9uKToKKyAgICAgICAgKiBqaXQvQWNj
ZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGppdC9BY2Nl
c3NvckNhbGxKSVRTdHViUm91dGluZS5oOiBSZW1vdmVkLgorICAgICAgICAqIGppdC9Bc3NlbWJs
eUhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpicmFuY2hJZkVtcHR5
KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpicmFuY2hTdHJ1Y3R1cmUpOgorICAg
ICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmJveEJvb2xlYW5QYXlsb2FkKToKKyAgICAgICAg
KEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpib3hCb29sZWFuKToKKyAgICAgICAgKEpTQzo6QXNzZW1i
bHlIZWxwZXJzOjpib3hJbnQzMik6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGpp
dC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OmdhcmJhZ2VTdHVi
SW5mbyk6CisgICAgICAgIChKU0M6OkpJVElubGluZUNhY2hlR2VuZXJhdG9yOjpKSVRJbmxpbmVD
YWNoZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVEJ5SWRHZW5lcmF0b3I6OkpJVEJ5SWRH
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVRHZXRCeUlkR2VuZXJhdG9yOjpKSVRHZXRCeUlk
R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUUHV0QnlJZEdlbmVyYXRvcjo6SklUUHV0QnlJ
ZEdlbmVyYXRvcik6CisgICAgICAgICogaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmg6Cisg
ICAgICAgIChKU0M6OkpJVElubGluZUNhY2hlR2VuZXJhdG9yOjpKSVRJbmxpbmVDYWNoZUdlbmVy
YXRvcik6CisgICAgICAgIChKU0M6OkpJVElubGluZUNhY2hlR2VuZXJhdG9yOjpzdHViSW5mbyk6
CisgICAgICAgIChKU0M6OkpJVEJ5SWRHZW5lcmF0b3I6OkpJVEJ5SWRHZW5lcmF0b3IpOgorICAg
ICAgICAoSlNDOjpKSVRCeUlkR2VuZXJhdG9yOjpyZXBvcnRTbG93UGF0aENhbGwpOgorICAgICAg
ICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6Cisg
ICAgICAgIChKU0M6OnJlcGF0Y2hDYWxsKToKKyAgICAgICAgKEpTQzo6cmVwYXRjaEJ5SWRTZWxm
QWNjZXNzKToKKyAgICAgICAgKEpTQzo6cmVzZXRHZXRCeUlEQ2hlY2tBbmRMb2FkKToKKyAgICAg
ICAgKEpTQzo6cmVzZXRQdXRCeUlEQ2hlY2tBbmRMb2FkKToKKyAgICAgICAgKEpTQzo6cmVwbGFj
ZVdpdGhKdW1wKToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVHZXRCeUlEKToKKyAgICAgICAgKEpT
Qzo6cmVwYXRjaEdldEJ5SUQpOgorICAgICAgICAoSlNDOjphcHByb3ByaWF0ZUdlbmVyaWNQdXRC
eUlkRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjphcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUlk
RnVuY3Rpb24pOgorICAgICAgICAoSlNDOjp0cnlDYWNoZVB1dEJ5SUQpOgorICAgICAgICAoSlND
OjpyZXBhdGNoUHV0QnlJRCk6CisgICAgICAgIChKU0M6OnRyeVJlcGF0Y2hJbik6CisgICAgICAg
IChKU0M6OnJlcGF0Y2hJbik6CisgICAgICAgIChKU0M6OnJlc2V0R2V0QnlJRCk6CisgICAgICAg
IChKU0M6OnJlc2V0UHV0QnlJRCk6CisgICAgICAgIChKU0M6OmNoZWNrT2JqZWN0UHJvcGVydHlD
b25kaXRpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpjaGVja09iamVjdFByb3BlcnR5Q29u
ZGl0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmVtaXRSZXN0b3JlU2NyYXRjaCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OmxpbmtSZXN0b3JlU2NyYXRjaCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OnRvU3RyaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6a2luZEZvcik6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OmN1c3RvbUZvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OmdlbmVyYXRlQnlJZFN0dWIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpwYXRjaEp1bXBUb0dl
dEJ5SWRTdHViKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6dHJ5QnVpbGRHZXRCeUlETGlzdCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmJ1aWxkR2V0QnlJRExpc3QpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjphcHByb3ByaWF0ZUxpc3RCdWlsZGluZ1B1dEJ5SWRGdW5jdGlvbik6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OmVtaXRQdXRSZXBsYWNlU3R1Yik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OmVtaXRQdXRUcmFuc2l0aW9uU3R1Yik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OnRy
eUJ1aWxkUHV0QnlJZExpc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpidWlsZFB1dEJ5SWRM
aXN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpsb2NrKToKKyAgICAg
ICAgKEpTQzo6U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjphbGxvY2F0ZVNjcmF0Y2gpOgorICAg
ICAgICAqIGppdC9TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaDoKKyAgICAgICAgKEpTQzo6U2Ny
YXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IpOgorICAgICAg
ICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgorCiAyMDE1LTA5LTA4ICBTdWtvbHNhayBTYWtzaHV3b25n
ICA8c3Vrb2xzYWtAZ21haWwuY29tPgogCiAgICAgICAgIFJlZmFjdG9yIHRoZSB0ZXN0IGZvciB0
aGUgYXJpdGhtZXRpYyBpbnN0cnVjdGlvbnMgaW4gV2ViQXNzZW1ibHkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE4OTU0MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDggKzEwNCw3
IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYnl0ZWNvZGUvT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24uY3BwCiAgICAgYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQu
Y3BwCiAgICAgYnl0ZWNvZGUvT3Bjb2RlLmNwcAotICAgIGJ5dGVjb2RlL1BvbHltb3JwaGljR2V0
QnlJZExpc3QuY3BwCi0gICAgYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAKKyAg
ICBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKICAgICBieXRlY29kZS9QcmVjaXNlSnVt
cFRhcmdldHMuY3BwCiAgICAgYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uY3BwCiAgICAgYnl0
ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKQEAgLTM1Niw3ICszNTUsNiBAQCBzZXQoSmF2YVNjcmlw
dENvcmVfU09VUkNFUwogICAgIGludGVycHJldGVyL1Byb3RvQ2FsbEZyYW1lLmNwcAogICAgIGlu
dGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAKIAotICAgIGppdC9BY2Nlc3NvckNhbGxKSVRTdHVi
Um91dGluZS5jcHAKICAgICBqaXQvQXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3MuY3BwCiAgICAg
aml0L0Fzc2VtYmx5SGVscGVycy5jcHAKICAgICBqaXQvQmluYXJ5U3dpdGNoLmNwcApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENv
cmUudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxODk1NDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNDMsOCArMzQzLDcgQEAKICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcCIg
Lz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE9w
Y29kZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQb2x5bW9y
cGhpY0dldEJ5SWRMaXN0LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVj
b2RlXFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cYnl0ZWNvZGVcUG9seW1vcnBoaWNBY2Nlc3MuY3BwIiAvPgogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cYnl0ZWNvZGVcUHJlY2lzZUp1bXBUYXJnZXRzLmNwcCIgLz4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFByb3BlcnR5Q29uZGl0aW9uLmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFB1dEJ5SWRTdGF0dXMuY3BwIiAvPgpA
QCAtNjE3LDcgKzYxNiw2IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRl
clxKU1N0YWNrLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGludGVycHJldGVy
XFByb3RvQ2FsbEZyYW1lLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGludGVy
cHJldGVyXFN0YWNrVmlzaXRvci5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxq
aXRcQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5caml0XEFyaXR5Q2hlY2tGYWlsUmV0dXJuVGh1bmtzLmNwcCIgLz4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGppdFxBc3NlbWJseUhlbHBlcnMuY3BwIiAvPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5caml0XEJpbmFyeVN3aXRjaC5jcHAiIC8+CkBAIC0xMDQ0LDggKzEw
NDIsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2Rl
XE9wY29kZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcT3BlcmFu
ZHMuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFBvbHltb3JwaGlj
R2V0QnlJZExpc3QuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFBv
bHltb3JwaGljUHV0QnlJZExpc3QuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5
dGVjb2RlXFBvbHltb3JwaGljQWNjZXNzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxieXRlY29kZVxQcmVjaXNlSnVtcFRhcmdldHMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGJ5dGVjb2RlXFByb3BlcnR5Q29uZGl0aW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxieXRlY29kZVxQdXRCeUlkU3RhdHVzLmgiIC8+CkBAIC0xNDE2LDcgKzE0MTMs
NiBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW50ZXJwcmV0ZXJcUHJvdG9DYWxsRnJh
bWUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGludGVycHJldGVyXFJlZ2lzdGVy
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRlclxTdGFja1Zpc2l0
b3IuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxBY2Nlc3NvckNhbGxKSVRT
dHViUm91dGluZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEFyaXR5Q2hl
Y2tGYWlsUmV0dXJuVGh1bmtzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRc
QXNzZW1ibHlIZWxwZXJzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcQmlu
YXJ5U3dpdGNoLmgiIC8+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENv
cmUudmN4cHJvai5maWx0ZXJzCShyZXZpc2lvbiAxODk1NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRl
cnMJKHdvcmtpbmcgY29weSkKQEAgLTE5OCw3ICsxOTgsNyBAQAogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cYnl0ZWNvZGVcT3Bjb2RlLmNwcCI+CiAgICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9G
aWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRl
Y29kZVxQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxieXRlY29kZVxQb2x5bW9ycGhpY0FjY2Vzcy5jcHAiPgogICAgICAgPEZpbHRlcj5ieXRl
Y29kZTwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cYnl0ZWNvZGVcUHV0QnlJZFN0YXR1cy5jcHAiPgpAQCAtMTYyNiw5ICsxNjI2LDYgQEAKICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGxsdm1cTExWTUFQSS5jcHAiPgogICAgICAgPEZpbHRl
cj5sbHZtPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxqaXRcQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuY3BwIj4KLSAgICAgIDxGaWx0ZXI+
aml0PC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxpbnNwZWN0b3JcQ29uc29sZU1lc3NhZ2UuY3BwIj4KICAgICAgIDxGaWx0ZXI+aW5zcGVjdG9y
PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CkBAIC0xNjk1LDkgKzE2OTIsNiBAQAogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXEpTSmF2YVNjcmlwdENhbGxGcmFtZVByb3Rv
dHlwZS5jcHAiPgogICAgICAgPEZpbHRlcj5pbnNwZWN0b3I8L0ZpbHRlcj4KICAgICA8L0NsQ29t
cGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFBvbHltb3JwaGljR2V0
QnlJZExpc3QuY3BwIj4KLSAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4KLSAgICA8L0Ns
Q29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHByb2ZpbGVyXFByb2ZpbGVySmV0
dGlzb25SZWFzb24uY3BwIj4KICAgICAgIDxGaWx0ZXI+cHJvZmlsZXI8L0ZpbHRlcj4KICAgICA8
L0NsQ29tcGlsZT4KQEAgLTIwOTcsNyArMjA5MSw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxieXRlY29kZVxPcGVyYW5kcy5oIj4KICAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRl
cj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2Rl
XFBvbHltb3JwaGljUHV0QnlJZExpc3QuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxi
eXRlY29kZVxQb2x5bW9ycGhpY0FjY2Vzcy5oIj4KICAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0Zp
bHRlcj4KICAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVj
b2RlXFB1dEJ5SWRTdGF0dXMuaCI+CkBAIC00MjA1LDkgKzQxOTksNiBAQAogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cbGx2bVxMTFZNSGVhZGVycy5oIj4KICAgICAgIDxGaWx0ZXI+bGx2bTwv
RmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0
XEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmgiPgotICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRl
cj4KLSAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGFzc2VtYmxl
clxBYm9ydFJlYXNvbi5oIj4KICAgICAgIDxGaWx0ZXI+YXNzZW1ibGVyPC9GaWx0ZXI+CiAgICAg
PC9DbEluY2x1ZGU+CkBAIC00Mjg2LDkgKzQyNzcsNiBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxKU0NJbmxpbmVzLmgiPgogICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0
ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29k
ZVxQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgiPgotICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmls
dGVyPgotICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccHJvZmls
ZXJcUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oIj4KICAgICAgIDxGaWx0ZXI+cHJvZmlsZXI8L0Zp
bHRlcj4KICAgICA8L0NsSW5jbHVkZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiAxODk1NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjcyLDcgKzI3
Miw2IEBACiAJCTBGMzAwQjdDMThBQjFCMTQwMEE2RDcyRSAvKiBERkdJbnRlZ2VyQ2hlY2tDb21i
aW5pbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYzMDBCN0ExOEFCMUIxNDAwQTZENzJFIC8qIERGR0ludGVnZXJDaGVja0NvbWJpbmluZ1Bo
YXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEYzNEIxNDkxNkQ0MjAxMDAwMUNEQTVBIC8qIERGR1VzZUtpbmQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzNEIxNDcxNkQ0MjAwRTAwMUNEQTVB
IC8qIERGR1VzZUtpbmQuY3BwICovOyB9OwogCQkwRjM0QjE0QTE2RDQyMDEzMDAxQ0RBNUEgLyog
REZHVXNlS2luZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYzNEIxNDgxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjM0QjE0QzE2RDQzRTBEMDAx
Q0RBNUEgLyogUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM0QjE0QjE2RDQzRTBDMDAxQ0RBNUEg
LyogUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYzOEIwMTExN0NGMDc4MDAwQjE0NEQzIC8q
IExMSW50RW50cnlwb2ludC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjM4QjAwRjE3Q0YwNzdGMDBCMTQ0RDMgLyogTExJbnRFbnRyeXBvaW50LmNw
cCAqLzsgfTsKIAkJMEYzOEIwMTIxN0NGMDc4MzAwQjE0NEQzIC8qIExMSW50RW50cnlwb2ludC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzOEIwMTAx
N0NGMDc3RjAwQjE0NEQzIC8qIExMSW50RW50cnlwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMzhCMDE3MTdDRkU3NTUwMEIxNDREMyAv
KiBERkdDb21waWxhdGlvbktleS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjM4QjAxMzE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25L
ZXkuY3BwICovOyB9OwpAQCAtMzI0LDggKzMyMyw2IEBACiAJCTBGNDg1MzJBMTg3REZERUMwMDgz
QjY4NyAvKiBGVExSZWNvdmVyeU9wY29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY0ODUzMjYxODdERkRFQzAwODNCNjg3IC8qIEZUTFJlY292ZXJ5
T3Bjb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY0OTNBRkExNkQwQ0FEMzAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDkzQUY4MTZEMENBRDEw
MDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi87IH07CiAJCTBGNEI5NERDMTdCOUYwNzUw
MEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0Qjk0REIxN0I5RjA3NTAwREQwM0E0IC8qIFR5cGVkQXJy
YXlJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKLQkJMEY0Q0VENUUxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJZExpc3Qu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0Q0VE
NUMxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwICovOyB9Owot
CQkwRjRDRUQ1RjE4Q0VBN0FCMDA4MDJGRTAgLyogUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0Q0VENUQxOENF
QTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJZExpc3QuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjRGMjlERjE4QjZBRDFDMDA1N0JD
MTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RjI5REQxOEI2QUQxQzAw
NTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcCAqLzsg
fTsKIAkJMEY0RjI5RTAxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50
RXN0aW1hdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjRGMjlERTE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291
bnRFc3RpbWF0aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRjUwQUYzQzE5M0U4QjM5MDA2NzRFRTggLyogREZHU3RydWN0dXJlQ2xv
YmJlclN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjUwQUYzQjE5M0U4QjM5MDA2NzRFRTggLyogREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM5OCw4
ICszOTUsNiBAQAogCQkwRjcxNENBNDE2RUE5MkYwMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJv
cGFnYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjcxNENBMTE2RUE5MkVEMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRp
b25QaGFzZS5jcHAgKi87IH07CiAJCTBGNzE0Q0E1MTZFQTkyRjIwMEYzRUJFQiAvKiBERkdCYWNr
d2FyZHNQcm9wYWdhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjcxNENBMjE2RUE5MkVEMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJv
cGFnYXRpb25QaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGNzQzQkFBMTZCODgyNDkwMDlGOTI3NyAvKiBBUk02NERpc2Fzc2VtYmxlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTJBM0Ey
MDE2NTFDNjYxMDBBODBBRkUgLyogQVJNNjREaXNhc3NlbWJsZXIuY3BwICovOyB9OwotCQkwRjc1
NzZEMjE4RTFGRUU5MDAyRUY0Q0QgLyogQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NTc2RDAxOEUx
RkVFOTAwMkVGNENEIC8qIEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmNwcCAqLzsgfTsKLQkJ
MEY3NTc2RDMxOEUxRkVFOTAwMkVGNENEIC8qIEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc1NzZEMTE4
RTFGRUU5MDAyRUY0Q0QgLyogQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjc2NkQyODE1QThDQzFF
MDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NjZEMjYxNUE4Q0MxQjAwOEYzNjNFIC8qIEpJVFN0dWJS
b3V0aW5lLmNwcCAqLzsgfTsKIAkJMEY3NjZEMkIxNUE4Q0MzODAwOEYzNjNFIC8qIEpJVFN0dWJS
b3V0aW5lU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNzY2RDI5MTVBOENDMzQwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZVNldC5jcHAgKi87
IH07CiAJCTBGNzY2RDJDMTVBOENDM0EwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZVNldC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NjZEMkExNUE4
Q0MzNDAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTQ3Myw4ICs0NjgsNiBAQAogCQkwRjlFMzI2
NDFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUUzMjYyMUIwNUFC
MDQwMDgwMUVENSAvKiBERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOUZCNEY0MTdGQ0I5MTcw
MENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUZCNEYyMTdGQ0I5MTcwMENCNjdGOCAvKiBERkdT
dGFja0xheW91dFBoYXNlLmNwcCAqLzsgfTsKIAkJMEY5RkI0RjUxN0ZDQjkxNzAwQ0I2N0Y4IC8q
IERGR1N0YWNrTGF5b3V0UGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGOUZCNEYzMTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBo
YXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJ
MEY5RkM4QzMxNEUxQjVGRTAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RkM4QkYxNEUx
QjVGQjAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwICovOyB9OwotCQkwRjlG
QzhDNDE0RTFCNjAwMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RkM4QzAxNEUxQjVGQjAw
RDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjlGQzhDNTE0RTFCNjA0MDBENTJBRTAgLyog
UHV0S2luZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY5RkM4QzExNEUxQjVGQjAwRDUyQUUwIC8qIFB1dEtpbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkEyQzE3QjE3RDdDRjg0MDA5RDAxNUYg
LyogVGVzdFJ1bm5lclV0aWxzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQTJDMTc5MTdEN0NGODQwMDlEMDE1RiAvKiBUZXN0UnVubmVyVXRpbHMu
Y3BwICovOyB9OwogCQkwRkEyQzE3QzE3RDdDRjg0MDA5RDAxNUYgLyogVGVzdFJ1bm5lclV0aWxz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkEyQzE3
QTE3RDdDRjg0MDA5RDAxNUYgLyogVGVzdFJ1bm5lclV0aWxzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTc0Miw2ICs3MzUsOCBAQAogCQkwRkY4
QkRFQTFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY4QkRFODFBRDRDRjcxMDBERkU4ODQg
LyogSW5mZXJyZWRWYWx1ZS5jcHAgKi87IH07CiAJCTBGRjhCREVCMUFENENGNzEwMERGRTg4NCAv
KiBJbmZlcnJlZFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkY4QkRFOTFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRjkyMkQ0MTRG
NDZCNDEwMDQxQTI0RSAvKiBMTEludE9mZnNldHNFeHRyYWN0b3IuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NjgwQTExNEJBN0Y4MjAwQkZFMjcy
IC8qIExMSW50T2Zmc2V0c0V4dHJhY3Rvci5jcHAgKi87IH07CisJCTBGRjlDRTczMUI5Q0Q2RDAw
MDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY5Q0U3MTFCOUNENkQwMDA0RURDQTYgLyogUG9seW1v
cnBoaWNBY2Nlc3MuY3BwICovOyB9OworCQkwRkY5Q0U3NDFCOUNENkQwMDA0RURDQTYgLyogUG9s
eW1vcnBoaWNBY2Nlc3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRjlDRTcyMUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRkE1NDk3
MTZCODgzNTAwMEIzQTk4MiAvKiBBNjRET3Bjb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MkEzQTIyMTY1MUM2OTcwMEE4MEFGRSAvKiBBNjRE
T3Bjb2RlLmNwcCAqLzsgfTsKIAkJMEZGQTU0OTgxNkI4ODM1MzAwQjNBOTgyIC8qIEE2NERPcGNv
ZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MkEz
QTIzMTY1MUM2OTcwMEE4MEFGRSAvKiBBNjRET3Bjb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGQjZDMzgxQUY0OEREQzAwREIxQkY3IC8q
IFR5cGVvZlR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZGQjZDMzYxQUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5cGUuY3BwICovOyB9OwpA
QCAtMjEwMyw3ICsyMDk4LDYgQEAKIAkJMEYzMDBCN0ExOEFCMUIxNDAwQTZENzJFIC8qIERGR0lu
dGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmg7IHBhdGggPSBkZmcvREZHSW50ZWdl
ckNoZWNrQ29tYmluaW5nUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYz
NEIxNDcxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHVXNlS2luZC5jcHA7IHBhdGggPSBkZmcvREZHVXNlS2lu
ZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzRCMTQ4MTZENDIwMEUwMDFD
REE1QSAvKiBERkdVc2VLaW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R1VzZUtpbmQuaDsgcGF0aCA9IGRmZy9ERkdVc2VLaW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTBGMzRCMTRCMTZENDNFMEMwMDFDREE1QSAvKiBQb2x5bW9ycGhpY0FjY2Vzc1N0
cnVjdHVyZUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9seW1vcnBo
aWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MzhCMDBGMTdDRjA3N0YwMEIxNDREMyAvKiBMTEludEVudHJ5cG9pbnQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gTExJbnRFbnRyeXBvaW50LmNwcDsgcGF0aCA9IGxsaW50L0xMSW50RW50cnlwb2lu
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzhCMDEwMTdDRjA3N0YwMEIx
NDREMyAvKiBMTEludEVudHJ5cG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExJbnRFbnRyeXBvaW50
Lmg7IHBhdGggPSBsbGludC9MTEludEVudHJ5cG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEYzOEIwMTMxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uS2V5LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NvbXBpbGF0aW9uS2V5
LmNwcDsgcGF0aCA9IGRmZy9ERkdDb21waWxhdGlvbktleS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0yMTU2LDggKzIxNTAsNiBAQAogCQkwRjQ4NTMyNjE4N0RGREVDMDA4M0I2
ODcgLyogRlRMUmVjb3ZlcnlPcGNvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gRlRMUmVjb3ZlcnlPcGNvZGUuaDsgcGF0aCA9IGZ0bC9GVExSZWNvdmVyeU9wY29kZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ5M0FGODE2RDBDQUQxMDA4NDUwOEIgLyog
U291cmNlUHJvdmlkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U291cmNlUHJvdmlkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRCOTRE
QjE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRBcnJheUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRBcnJheUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMEY0Q0VENUMxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJ
ZExpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUG9seW1vcnBo
aWNHZXRCeUlkTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNENFRDVE
MThDRUE3QUIwMDgwMkZFMCAvKiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvbHltb3JwaGljR2V0QnlJZExpc3QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0RjI5REQxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRp
Y0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNw
cDsgcGF0aCA9IGRmZy9ERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEYyOURFMThCNkFEMUMwMDU3QkMxNSAv
KiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFz
ZS5oOyBwYXRoID0gZGZnL0RGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTBBRjNCMTkzRThCMzkwMDY3NEVFOCAv
KiBERkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmg7IHBhdGggPSBkZmcvREZHU3RydWN0dXJl
Q2xvYmJlclN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjI5LDggKzIy
MjEsNiBAQAogCQkwRjcwMjVBODE3MTRCMEY4MDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVy
Q29tbW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRDb21w
aWxlckNvbW1vbi5oOyBwYXRoID0gZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjcxNENBMTE2RUE5MkVEMDBGM0VCRUIgLyogREZH
QmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9E
RkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY3MTRDQTIxNkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9u
UGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmFja3dhcmRzUHJv
cGFnYXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY3NTc2RDAxOEUxRkVFOTAwMkVGNENE
IC8qIEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY3NTc2RDExOEUxRkVFOTAwMkVGNENEIC8qIEFjY2Vzc29y
Q2FsbEpJVFN0dWJSb3V0aW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFj
Y2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGNzY2RDFDMTVBNTAyOEQwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRTdHViUm91dGluZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjc2NkQyNjE1QThDQzFCMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUU3R1YlJvdXRpbmUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc2NkQyOTE1QThDQzM0MDA4RjM2
M0UgLyogSklUU3R1YlJvdXRpbmVTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSklUU3R1YlJvdXRpbmVTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjMwMyw4ICsyMjkzLDYgQEAKIAkJMEY5RTMyNjIxQjA1QUIwNDAwODAxRUQ1IC8qIERG
R1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHU3Rv
cmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY5RkI0RjIxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RhY2tMYXlvdXRQaGFzZS5jcHA7
IHBhdGggPSBkZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGOUZCNEYzMTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1N0YWNrTGF5b3V0UGhhc2Uu
aDsgcGF0aCA9IGRmZy9ERkdTdGFja0xheW91dFBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTBGOUZDOEJGMTRFMUI1RkIwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRM
aXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBvbHltb3JwaGlj
UHV0QnlJZExpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjlGQzhDMDE0
RTFCNUZCMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGOUZDOEMxMTRFMUI1RkIwMEQ1MkFFMCAvKiBQdXRLaW5kLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1dEtpbmQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZBMkMxNzkxN0Q3Q0Y4NDAwOUQwMTVGIC8qIFRlc3RSdW5uZXJV
dGlscy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXN0UnVubmVy
VXRpbHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkEyQzE3QTE3RDdDRjg0
MDA5RDAxNUYgLyogVGVzdFJ1bm5lclV0aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFRlc3RSdW5uZXJVdGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MjU3OSw2ICsyNTY3LDggQEAKIAkJMEZGOEJERTgxQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVk
VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5mZXJyZWRW
YWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjhCREU5MUFENENGNzEw
MERGRTg4NCAvKiBJbmZlcnJlZFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEluZmVycmVkVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGOTIy
Q0YxNEY0NkIxMzAwNDFBMjRFIC8qIEpTQ0xMSW50T2Zmc2V0c0V4dHJhY3RvciAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5l
eGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gSlNDTExJbnRPZmZzZXRzRXh0
cmFjdG9yOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQkwRkY5Q0U3MTFC
OUNENkQwMDA0RURDQTYgLyogUG9seW1vcnBoaWNBY2Nlc3MuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUG9seW1vcnBoaWNBY2Nlc3MuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkY5Q0U3MjFCOUNENkQwMDA0RURDQTYgLyogUG9seW1vcnBoaWNB
Y2Nlc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9seW1vcnBoaWNBY2Nl
c3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQjZDMzYxQUY0OEREQzAwREIx
QkY3IC8qIFR5cGVvZlR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gVHlwZW9mVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRkI2QzM3
MUFGNDhEREMwMERCMUJGNyAvKiBUeXBlb2ZUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFR5cGVvZlR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZG
Qzk5RDAxODRFQzhBRDAwOUMxMEFCIC8qIENvbnN0YW50TW9kZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDb25zdGFudE1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTQwOTYsMTAgKzQwODYsNiBAQAogCQkxNDI5RDkyQzBFRDIyRDcwMDBCODk2MTkgLyog
aml0ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkwRkYw
NTRGNzFBQzM1QjQ0MDBFNUJFNTcgLyogRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6LmNwcCAqLywK
LQkJCQkwRkYwNTRGODFBQzM1QjQ0MDBFNUJFNTcgLyogRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6
LmggKi8sCi0JCQkJMEY3NTc2RDAxOEUxRkVFOTAwMkVGNENEIC8qIEFjY2Vzc29yQ2FsbEpJVFN0
dWJSb3V0aW5lLmNwcCAqLywKLQkJCQkwRjc1NzZEMTE4RTFGRUU5MDAyRUY0Q0QgLyogQWNjZXNz
b3JDYWxsSklUU3R1YlJvdXRpbmUuaCAqLywKIAkJCQkwRjZCMUNDNzE4NjQxREY4MDA4NDVEOTcg
LyogQXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3MuY3BwICovLAogCQkJCTBGNkIxQ0M4MTg2NDFE
RjgwMDg0NUQ5NyAvKiBBcml0eUNoZWNrRmFpbFJldHVyblRodW5rcy5oICovLAogCQkJCTBGMjRF
NTNCMTdFQTlGNTkwMEFCQjIxNyAvKiBBc3NlbWJseUhlbHBlcnMuY3BwICovLApAQCAtNDEwOCw2
ICs0MDk0LDggQEAKIAkJCQkwRjY0QjI3MDFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNo
LmggKi8sCiAJCQkJMEYyNEU1M0QxN0VBOUY1OTAwQUJCMjE3IC8qIENDYWxsSGVscGVycy5oICov
LAogCQkJCTBGRDgyRTM3MTQxQUIxNDIwMDE3OUM5NCAvKiBDb21wYWN0SklUQ29kZU1hcC5oICov
LAorCQkJCTBGRjA1NEY3MUFDMzVCNDQwMEU1QkU1NyAvKiBFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1
enouY3BwICovLAorCQkJCTBGRjA1NEY4MUFDMzVCNDQwMEU1QkU1NyAvKiBFeGVjdXRhYmxlQWxs
b2NhdGlvbkZ1enouaCAqLywKIAkJCQlBN0I0OERCNjBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0
YWJsZUFsbG9jYXRvci5jcHAgKi8sCiAJCQkJQTdCNDhEQjUwRUU3NENGQzAwRENCREI2IC8qIEV4
ZWN1dGFibGVBbGxvY2F0b3IuaCAqLywKIAkJCQk4NkRCNjQ2MzBGOTVDNkZDMDBEN0Q5MjEgLyog
RXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcCAqLywKQEAgLTQxNTQsOCArNDE0Miw2
IEBACiAJCQkJMEZDNzEyRTExN0NEODc4RjAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrLmggKi8sCiAJCQkJQTc2RjU0QTIxM0IyOEFBQjAwRUYyQkNFIC8qIEpJ
VFdyaXRlQmFycmllci5oICovLAogCQkJCUE3NkM1MTc0MTE4Mjc0OEQwMDcxNUIwNSAvKiBKU0lu
dGVyZmFjZUpJVC5oICovLAotCQkJCTBGRUU5ODQyMUE4OTIyNzUwMDc1NEU5MyAvKiBTZXR1cFZh
cmFyZ3NGcmFtZS5jcHAgKi8sCi0JCQkJMEZFRTk4NDAxQTg4NjVCNjAwNzU0RTkzIC8qIFNldHVw
VmFyYXJnc0ZyYW1lLmggKi8sCiAJCQkJMEZFODM0MTUxQTZFRjk3QjAwRDA0ODQ3IC8qIFBvbHlt
b3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcCAqLywKIAkJCQkwRkU4MzQxNjFBNkVGOTdCMDBEMDQ4
NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaCAqLywKIAkJCQkwRkE3QThFOTE4QjQx
M0M4MDA1MjM3MUQgLyogUmVnLmNwcCAqLywKQEAgLTQxNjksNiArNDE1NSw4IEBACiAJCQkJMEYy
NEU1NEExN0VFMjc0OTAwQUJCMjE3IC8qIFJlcGF0Y2guaCAqLywKIAkJCQkwRkE3QThFRDE4Q0U0
RkQ4MDA1MjM3MUQgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcCAqLywKIAkJCQkwRjI0
RTU0QjE3RUUyNzQ5MDBBQkIyMTcgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmggKi8sCisJ
CQkJMEZFRTk4NDIxQTg5MjI3NTAwNzU0RTkzIC8qIFNldHVwVmFyYXJnc0ZyYW1lLmNwcCAqLywK
KwkJCQkwRkVFOTg0MDFBODg2NUI2MDA3NTRFOTMgLyogU2V0dXBWYXJhcmdzRnJhbWUuaCAqLywK
IAkJCQlBNzA5RjJFRjE3QTBBQzA0MDA1MTJFOTggLyogU2xvd1BhdGhDYWxsLmggKi8sCiAJCQkJ
QTczODY1NTExMTg2OTdCNDAwNTQwMjc5IC8qIFNwZWNpYWxpemVkVGh1bmtKSVQuaCAqLywKIAkJ
CQlBN0ZGNjQ3QTE4QzUyRTg1MDBCNTUzMDcgLyogU3BpbGxSZWdpc3RlcnNNb2RlLmggKi8sCkBA
IC01NjAyLDExICs1NTkwLDggQEAKIAkJCQk5NjlBMDc5NTBFRDFEM0FFMDBGMUY2ODEgLyogT3Bj
b2RlLmggKi8sCiAJCQkJMEYyQkRDMkIxNTFGREU4QjAwQ0Q4OTEwIC8qIE9wZXJhbmRzLmggKi8s
CiAJCQkJQTcwNDQ3RTkxN0EwQkQ0NjAwRjU4OThFIC8qIE9wZXJhbmRzSW5saW5lcy5oICovLAot
CQkJCTBGMzRCMTRCMTZENDNFMEMwMDFDREE1QSAvKiBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVy
ZUxpc3QuaCAqLywKLQkJCQkwRjRDRUQ1QzE4Q0VBN0FCMDA4MDJGRTAgLyogUG9seW1vcnBoaWNH
ZXRCeUlkTGlzdC5jcHAgKi8sCi0JCQkJMEY0Q0VENUQxOENFQTdBQjAwODAyRkUwIC8qIFBvbHlt
b3JwaGljR2V0QnlJZExpc3QuaCAqLywKLQkJCQkwRjlGQzhCRjE0RTFCNUZCMDBENTJBRTAgLyog
UG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAgKi8sCi0JCQkJMEY5RkM4QzAxNEUxQjVGQjAwRDUy
QUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuaCAqLywKKwkJCQkwRkY5Q0U3MTFCOUNENkQw
MDA0RURDQTYgLyogUG9seW1vcnBoaWNBY2Nlc3MuY3BwICovLAorCQkJCTBGRjlDRTcyMUI5Q0Q2
RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5oICovLAogCQkJCTBGOTgyMDVEMTZCRkUz
N0YwMDI0MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuY3BwICovLAogCQkJCTBGOTgyMDVFMTZC
RkUzN0YwMDI0MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuaCAqLywKIAkJCQkwRkQzRTQwNzFC
NjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uY3BwICovLApAQCAtNTYzNyw4ICs1
NjIyLDggQEAKIAkJCQkwRjJENERFNzE5ODMyREFDMDA3RDRCMTkgLyogVHlwZUxvY2F0aW9uLmgg
Ki8sCiAJCQkJQTc5RTc4MUUxNUVFQ0JBODAwNDdDODU1IC8qIFVubGlua2VkQ29kZUJsb2NrLmNw
cCAqLywKIAkJCQlBNzlFNzgxRjE1RUVDQkE4MDA0N0M4NTUgLyogVW5saW5rZWRDb2RlQmxvY2su
aCAqLywKLQkJCQkxNDE0MkU1MDFCNzk2RUNFMDBGNEJGNEIgLyogVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUuaCAqLywKIAkJCQkxNDE0MkU1NDFCNzk3M0MwMDBGNEJGNEIgLyogVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGUuY3BwICovLAorCQkJCTE0MTQyRTUwMUI3OTZFQ0UwMEY0QkY0QiAv
KiBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oICovLAogCQkJCUI1OUY4OTM4MTg5MUFEQjUw
MEQ1Q0NEQyAvKiBVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtLmNwcCAqLywKIAkJCQlCNTlGODkz
NzE4OTFBRDMzMDBENUNDREMgLyogVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbS5oICovLAogCQkJ
CTBGOTYzQjM2MTNGQzZGREUwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCAqLywKQEAgLTYyMDMs
NyArNjE4OCw2IEBACiAJCQkJMEZDMDk3NzExNDY5M0FGNTAwQ0YyNDQyIC8qIERGR09TUkV4aXRD
b21waWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3MDI1QUExNzE0QjBGQzAwMzgyQzBFIC8q
IERGR09TUkV4aXRDb21waWxlckNvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFRkM5QUIx
NjgxQTNCNjAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTBGNENFRDVGMThDRUE3QUIwMDgwMkZFMCAvKiBQb2x5bW9ycGhpY0dldEJ5SWRM
aXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJFRTE3MTc4RTczMDA2OTBDN0YgLyogREZH
T1NSRXhpdFByZXBhcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZGQzk1QzE0RUY5MEFG
MDBDNzI1MzIgLyogREZHUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RUE3MEVFMTlGNUI1
QzQwMDk4RjVFQyAvKiBKU0NvbnRleHRSZWZJbnNwZWN0b3JTdXBwb3J0LmggaW4gSGVhZGVycyAq
LywKQEAgLTYyNTIsNiArNjIzNiw3IEBACiAJCQkJOTlFNDVBMjQxOEExQjI1OTAwMjZEODhGIC8q
IEVtcHR5SW5wdXRDdXJzb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MTQyRTUzMUI3OTZFREQw
MEY0QkY0QiAvKiBFeGVjdXRhYmxlSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTlFNDVBMjYx
OEExQjI1OTAwMjZEODhGIC8qIEVuY29kZWRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZG
OUNFNzQxQjlDRDZEMDAwNEVEQ0E2IC8qIFBvbHltb3JwaGljQWNjZXNzLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjU4NzRFRTE5NEZFQjEyMDBBQUIyQzEgLyogREZHTWF5RXhpdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMzMDQ2MDcwRTFGNDk3RjAwMzIzMkNGIC8qIEVycm9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzAyRTkwRDBFMTgzOURCMDAwRjkyOTcgLyogRXJyb3JDb25zdHJ1Y3Rvci5o
IGluIEhlYWRlcnMgKi8sCkBAIC02NDg1LDcgKzY0NzAsNiBAQAogCQkJCUJDMThDNDFFMEUxNkY1
Q0QwMEIzNDQ2MCAvKiBKU0NvbnRleHRSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0OENEMUQ4
MTA4Q0Y5MDIwMDgxNjNDNiAvKiBKU0NvbnRleHRSZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzIwMjhCODE3OTc2MDFFMDA5ODAyOEMgLyogSlNDVGVzdFJ1bm5lclV0aWxzLmggaW4g
SGVhZGVycyAqLywKLQkJCQkwRjc1NzZEMzE4RTFGRUU5MDAyRUY0Q0QgLyogQWNjZXNzb3JDYWxs
SklUU3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkVDMTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0RhdGFWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZFRTE3QjZCNUFC
MDBBN0FFM0YgLyogSlNEYXRhVmlld1Byb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc4
ODAxNDExNDcxQUQ5MjAwNDFCMDE2IC8qIEpTRGF0ZU1hdGguaCBpbiBIZWFkZXJzICovLApAQCAt
NjY4NSw4ICs2NjY5LDYgQEAKIAkJCQkwRkNDQUU0NTE2RDBDRjc0MDBEMEM2NUIgLyogUGFyc2Vy
RXJyb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3N0YxODI1MTY0MTkyQzcwMDY0MEE0NyAvKiBQ
YXJzZXJNb2Rlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjUzMDNENjQxNDQ3QjlFMTAwRDNGOTA0
IC8qIFBhcnNlclRva2Vucy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEYzNEIxNEMxNkQ0M0UwRDAw
MUNEQTVBIC8qIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdC5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJMEY5RkM4QzQxNEUxQjYwMDAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGOEYxNDM0MUFERjA5MDEwMEVENzkyQyAvKiBERkdFcG9j
aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5ODIwNjExNkJGRTM4MzAwMjQwRDAyIC8qIFByZWNp
c2VKdW1wVGFyZ2V0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyREQ4MTUxQUIzRDhCRTAwQkJC
OEU4IC8qIERGR0ZvckFsbEtpbGxzLmggaW4gSGVhZGVycyAqLywKQEAgLTc4NDcsNyArNzgyOSw2
IEBACiAJCQkJMEYwQjgzOUMxNEJDRjQ2MzAwODg1QjRGIC8qIExMSW50VGh1bmtzLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGQ0VGQUNEMTgwNUU3NTUwMDQ3MkNFNCAvKiBMTFZNQVBJLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE3RTVBQjM3MTc5OUU0QjIwMEQyODMzRCAvKiBMTFZNRGlzYXNz
ZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGNENFRDVFMThDRUE3QUIwMDgwMkZFMCAv
KiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5RERF
MTA3RUM3RTcwMDY1MDQ0NiAvKiBMb29rdXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0Njgw
Q0MxNEJCQjE3QTAwQkZFMjcyIC8qIExvd0xldmVsSW50ZXJwcmV0ZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTRCNzIzQjIxMkQ3REE0NjAwM0JENUVEIC8qIE1hY2hpbmVTdGFja01hcmtlci5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTc4ODksNyArNzg3MCw2IEBACiAJCQkJMEZFMjI4RUUxNDM2
QUIyQzAwMTk2QzQ4IC8qIE9wdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ4RjIxQkMx
MDdFQzU0RDAwNDJFQzJDIC8qIFBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzA1MkMz
NDBGQjc5MjE5MDA0OEZEQzMgLyogUGFyc2VyQXJlbmEuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJ
MEY5RkM4QzMxNEUxQjVGRTAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEY5ODIwNjAxNkJGRTM4MTAwMjQwRDAyIC8qIFByZWNpc2VKdW1w
VGFyZ2V0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NTc0MkY2NTBERDExRjVBMDAwOTE3RkIg
LyogUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCOUNGODE5RDBCQUMxMDBCMUQx
QjUgLyogRlRMT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc5MDYsNiArNzg4Niw3
IEBACiAJCQkJMEYxOTBDQUMxODlEODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFz
b24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QjMxNjZBRDM1QzAwMEY1QkEzIC8qIFBy
b2ZpbGVyT3JpZ2luLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUI0MTY2QUQzNUMwMDBG
NUJBMyAvKiBQcm9maWxlck9yaWdpblN0YWNrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRjlD
RTczMUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRkIxMDU4QjE2NzU0ODMxMDBGOEFCNkUgLyogUHJvZmlsZXJPU1JFeGl0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGQjEwNThEMTY3NTQ4MzcwMEY4QUI2RSAvKiBQcm9maWxlck9T
UkV4aXRTaXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMTM5MTJCMTY3NzFDM0EwMDlDQ0Iw
NyAvKiBQcm9maWxlclByb2ZpbGVkQnl0ZWNvZGVzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtODAx
MSw3ICs3OTkyLDYgQEAKIAkJCQlBNzZGMjc5NDE1RjEzQzk2MDA1MTdENjcgLyogVW5saW5rZWRD
b2RlQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjU5Rjg5MzkxODkxRjI5RjAwRDVDQ0RD
IC8qIFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTM5
REE0QTYxQjdFOEI3QzAwODRGMzNBIC8qIEpTTW9kdWxlUmVjb3JkLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCTBGNzU3NkQyMThFMUZFRTkwMDJFRjRDRCAvKiBBY2Nlc3NvckNhbGxKSVRTdHViUm91
dGluZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjI0RTU1ODE3Rjc0RURCMDBBQkIyMTcgLyog
VmFsdWVSZWNvdmVyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMThFM0E1OTBERjkyNzhDMDBE
OTBCMzQgLyogVk0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkU1OTMyQTcxODNDNUEyNjAwQTFF
Q0NDIC8qIFZNRW50cnlTY29wZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYu
aAkocmV2aXNpb24gMTg5NTQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlckNvZGVSZWYuaAkod29ya2luZyBjb3B5KQpAQCAtMzI3LDYgKzMyNywxMCBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIGR1bXBXaXRoTmFtZShjb25zdCBjaGFyKiBuYW1lLCBQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAogICAgIHsKKyAgICAgICAgaWYgKCFtX3ZhbHVlKSB7CisgICAg
ICAgICAgICBvdXQucHJpbnQobmFtZSwgIihudWxsKSIpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CiAgICAgICAgIGlmIChleGVjdXRhYmxlQWRkcmVzcygpID09IGRhdGFMb2NhdGlv
bigpKSB7CiAgICAgICAgICAgICBvdXQucHJpbnQobmFtZSwgIigiLCBSYXdQb2ludGVyKGV4ZWN1
dGFibGVBZGRyZXNzKCkpLCAiKSIpOwogICAgICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE4OTU0
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Myw4ICs1Myw3IEBACiAjaW5jbHVkZSAiTExJbnRFbnRyeXBvaW50Lmgi
CiAjaW5jbHVkZSAiTG93TGV2ZWxJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKLSNpbmNsdWRlICJQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgiCi0jaW5jbHVkZSAiUG9seW1v
cnBoaWNQdXRCeUlkTGlzdC5oIgorI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCiAjaW5j
bHVkZSAiUHJvZmlsZXJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIlJlZHVjZVdoaXRlc3BhY2UuaCIK
ICNpbmNsdWRlICJSZXBhdGNoLmgiCkBAIC0zNDMsMjAgKzM0MiwxOSBAQCB2b2lkIENvZGVCbG9j
azo6cHJpbnRHZXRCeUlkQ2FjaGVTdGF0dXMoCiAgICAgICAgIGlmIChzdHViSW5mby5zZWVuKSB7
CiAgICAgICAgICAgICBvdXQucHJpbnRmKCIgaml0KCIpOwogICAgICAgICAgICAgCi0gICAgICAg
ICAgICBTdHJ1Y3R1cmUqIGJhc2VTdHJ1Y3R1cmUgPSAwOwotICAgICAgICAgICAgU3RydWN0dXJl
KiBwcm90b3R5cGVTdHJ1Y3R1cmUgPSAwOwotICAgICAgICAgICAgUG9seW1vcnBoaWNHZXRCeUlk
TGlzdCogbGlzdCA9IDA7CisgICAgICAgICAgICBTdHJ1Y3R1cmUqIGJhc2VTdHJ1Y3R1cmUgPSBu
dWxscHRyOworICAgICAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3MqIHN0dWIgPSBudWxscHRyOwog
ICAgICAgICAgICAgCi0gICAgICAgICAgICBzd2l0Y2ggKHN0dWJJbmZvLmFjY2Vzc1R5cGUpIHsK
LSAgICAgICAgICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmOgorICAgICAgICAgICAgc3dp
dGNoIChzdHViSW5mby5jYWNoZVR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgQ2FjaGVUeXBlOjpH
ZXRCeUlkU2VsZjoKICAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCJzZWxmIik7Ci0gICAgICAg
ICAgICAgICAgYmFzZVN0cnVjdHVyZSA9IHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVj
dFN0cnVjdHVyZS5nZXQoKTsKKyAgICAgICAgICAgICAgICBiYXNlU3RydWN0dXJlID0gc3R1Yklu
Zm8udS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3Q6Ci0gICAgICAg
ICAgICAgICAgb3V0LnByaW50ZigibGlzdCIpOwotICAgICAgICAgICAgICAgIGxpc3QgPSBzdHVi
SW5mby51LmdldEJ5SWRMaXN0Lmxpc3Q7CisgICAgICAgICAgICBjYXNlIENhY2hlVHlwZTo6U3R1
YjoKKyAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCJzdHViIik7CisgICAgICAgICAgICAgICAg
c3R1YiA9IHN0dWJJbmZvLnUuc3R1YjsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGNhc2UgYWNjZXNzX3Vuc2V0OgorICAgICAgICAgICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0
OgogICAgICAgICAgICAgICAgIG91dC5wcmludGYoInVuc2V0Iik7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMzY4LDI3ICszNjYsMTAgQEAgdm9pZCBD
b2RlQmxvY2s6OnByaW50R2V0QnlJZENhY2hlU3RhdHVzKAogICAgICAgICAgICAgICAgIG91dC5w
cmludGYoIiwgIik7CiAgICAgICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJzdHJ1Y3Qi
LCBiYXNlU3RydWN0dXJlLCBpZGVudCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGlmIChwcm90b3R5cGVTdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgICAgICBvdXQu
cHJpbnRmKCIsICIpOwotICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAicHJvdG90
eXBlU3RydWN0IiwgYmFzZVN0cnVjdHVyZSwgaWRlbnQpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBpZiAobGlzdCkgewotICAgICAgICAgICAgICAgIG91dC5wcmlu
dGYoIiwgbGlzdCA9ICVwOiBbIiwgbGlzdCk7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChpKQotICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiLCAiKTsKLSAgICAgICAg
ICAgICAgICAgICAgb3V0LnByaW50ZigiKCIpOwotICAgICAgICAgICAgICAgICAgICBkdW1wU3Ry
dWN0dXJlKG91dCwgImJhc2UiLCBsaXN0LT5hdChpKS5zdHJ1Y3R1cmUoKSwgaWRlbnQpOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoIWxpc3QtPmF0KGkpLmNvbmRpdGlvblNldCgpLmlzRW1wdHko
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiLCAiKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG91dC5wcmludChsaXN0LT5hdChpKS5jb25kaXRpb25TZXQoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiKSIp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCJdIik7Ci0g
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChzdHViKQorICAgICAgICAgICAgICAgIG91
dC5wcmludCgiLCAiLCAqc3R1Yik7CisKICAgICAgICAgICAgIG91dC5wcmludGYoIikiKTsKICAg
ICAgICAgfQogICAgIH0KQEAgLTQ0NCw1MyArNDI1LDE2IEBAIHZvaWQgQ29kZUJsb2NrOjpwcmlu
dFB1dEJ5SWRDYWNoZVN0YXR1cygKICAgICAgICAgaWYgKHN0dWJJbmZvLnNlZW4pIHsKICAgICAg
ICAgICAgIG91dC5wcmludGYoIiBqaXQoIik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHN3
aXRjaCAoc3R1YkluZm8uYWNjZXNzVHlwZSkgewotICAgICAgICAgICAgY2FzZSBhY2Nlc3NfcHV0
X2J5X2lkX3JlcGxhY2U6CisgICAgICAgICAgICBzd2l0Y2ggKHN0dWJJbmZvLmNhY2hlVHlwZSkg
eworICAgICAgICAgICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOgogICAgICAgICAg
ICAgICAgIG91dC5wcmludCgicmVwbGFjZSwgIik7Ci0gICAgICAgICAgICAgICAgZHVtcFN0cnVj
dHVyZShvdXQsICJzdHJ1Y3QiLCBzdHViSW5mby51LnB1dEJ5SWRSZXBsYWNlLmJhc2VPYmplY3RT
dHJ1Y3R1cmUuZ2V0KCksIGlkZW50KTsKKyAgICAgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91
dCwgInN0cnVjdCIsIHN0dWJJbmZvLnUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQo
KSwgaWRlbnQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBhY2Nl
c3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgotICAgICAgICAgICAgY2FzZSBhY2Nlc3Nf
cHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0OgotICAgICAgICAgICAgICAgIG91dC5wcmludCgi
dHJhbnNpdGlvbiwgIik7Ci0gICAgICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJwcmV2
Iiwgc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZS5nZXQoKSwg
aWRlbnQpOwotICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCAiKTsKLSAgICAgICAgICAgICAg
ICBkdW1wU3RydWN0dXJlKG91dCwgIm5leHQiLCBzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9u
LnN0cnVjdHVyZS5nZXQoKSwgaWRlbnQpOwotICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby51
LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0NvbmRpdGlvblNldCkKLSAgICAgICAgICAgICAgICAgICAg
b3V0LnByaW50KCIsICIsIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Ojpmcm9tUmF3UG9pbnRl
cihzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0NvbmRpdGlvblNldCkpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX2xpc3Q6
IHsKLSAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCJsaXN0ID0gWyIpOwotICAgICAgICAgICAg
ICAgIFBvbHltb3JwaGljUHV0QnlJZExpc3QqIGxpc3QgPSBzdHViSW5mby51LnB1dEJ5SWRMaXN0
Lmxpc3Q7Ci0gICAgICAgICAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hOwotICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5zaXplKCk7ICsraSkgewotICAgICAg
ICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICIoIik7Ci0gICAgICAgICAgICAgICAgICAg
IGNvbnN0IFB1dEJ5SWRBY2Nlc3MmIGFjY2VzcyA9IGxpc3QtPmF0KGkpOwotICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFjY2Vzcy5pc1JlcGxhY2UoKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCJyZXBsYWNlLCAiKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAic3RydWN0IiwgYWNjZXNzLm9sZFN0
cnVjdHVyZSgpLCBpZGVudCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWNjZXNz
LmlzU2V0dGVyKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgic2V0dGVy
LCAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAic3RydWN0
IiwgYWNjZXNzLm9sZFN0cnVjdHVyZSgpLCBpZGVudCk7Ci0gICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoYWNjZXNzLmlzQ3VzdG9tKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG91
dC5wcmludCgiY3VzdG9tLCAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1
cmUob3V0LCAic3RydWN0IiwgYWNjZXNzLm9sZFN0cnVjdHVyZSgpLCBpZGVudCk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWNjZXNzLmlzVHJhbnNpdGlvbigpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBvdXQucHJpbnQoInRyYW5zaXRpb24sICIpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJwcmV2IiwgYWNjZXNzLm9sZFN0cnVjdHVy
ZSgpLCBpZGVudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgIm5leHQiLCBhY2Nlc3Mu
bmV3U3RydWN0dXJlKCksIGlkZW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYWNj
ZXNzLmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvdXQucHJpbnQoIiwgIiwgYWNjZXNzLmNvbmRpdGlvblNldCgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoInVua25vd24i
KTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgi
KSIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBvdXQucHJpbnQoIl0iKTsK
KyAgICAgICAgICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOiB7CisgICAgICAgICAgICAgICAgb3V0
LnByaW50KCJzdHViLCAiLCAqc3R1YkluZm8udS5zdHViKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgYWNjZXNzX3Vuc2V0OgorICAgICAg
ICAgICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0OgogICAgICAgICAgICAgICAgIG91dC5wcmludGYo
InVuc2V0Iik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgpA
QCAtMjQ2MSwzOSArMjQwNSwyMiBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlv
bnMoU2xvCiAgICAgaWYgKEpJVENvZGU6OmlzSklUKGppdFR5cGUoKSkpIHsKICAgICAgICAgZm9y
IChCYWc8U3RydWN0dXJlU3R1YkluZm8+OjppdGVyYXRvciBpdGVyID0gbV9zdHViSW5mb3MuYmVn
aW4oKTsgISFpdGVyOyArK2l0ZXIpIHsKICAgICAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbyA9ICoqaXRlcjsKLSAgICAgICAgICAgIHN3aXRjaCAoc3R1YkluZm8uYWNjZXNzVHlw
ZSkgewotICAgICAgICAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFs
OgotICAgICAgICAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0OiB7
Ci0gICAgICAgICAgICAgICAgSlNDZWxsKiBvcmlnaW4gPSBzdHViSW5mby5jb2RlT3JpZ2luLmNv
ZGVPcmlnaW5Pd25lcigpOwotICAgICAgICAgICAgICAgIGlmICgoIW9yaWdpbiB8fCBIZWFwOjpp
c01hcmtlZChvcmlnaW4pKQotICAgICAgICAgICAgICAgICAgICAmJiBIZWFwOjppc01hcmtlZChz
dHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgpKSkKLSAg
ICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJnN0dWJJbmZvLnUucHV0QnlJZFRyYW5z
aXRpb24uc3RydWN0dXJlKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIGFsbEFyZU1hcmtlZFNvRmFyID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlICE9IENhY2hlVHlwZTo6U3R1YikKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIFBvbHltb3JwaGljQWNjZXNzKiBs
aXN0ID0gc3R1YkluZm8udS5zdHViOworICAgICAgICAgICAgSlNDZWxsKiBvcmlnaW4gPSBzdHVi
SW5mby5jb2RlT3JpZ2luLmNvZGVPcmlnaW5Pd25lcigpOworICAgICAgICAgICAgaWYgKG9yaWdp
biAmJiAhSGVhcDo6aXNNYXJrZWQob3JpZ2luKSkgeworICAgICAgICAgICAgICAgIGFsbEFyZU1h
cmtlZFNvRmFyID0gZmFsc2U7CisgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9saXN0OiB7Ci0gICAgICAg
ICAgICAgICAgUG9seW1vcnBoaWNQdXRCeUlkTGlzdCogbGlzdCA9IHN0dWJJbmZvLnUucHV0QnlJ
ZExpc3QubGlzdDsKLSAgICAgICAgICAgICAgICBKU0NlbGwqIG9yaWdpbiA9IHN0dWJJbmZvLmNv
ZGVPcmlnaW4uY29kZU9yaWdpbk93bmVyKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG9yaWdpbiAm
JiAhSGVhcDo6aXNNYXJrZWQob3JpZ2luKSkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBq
ID0gbGlzdC0+c2l6ZSgpOyBqLS07KSB7CisgICAgICAgICAgICAgICAgY29uc3QgQWNjZXNzQ2Fz
ZSYgYWNjZXNzID0gbGlzdC0+YXQoaik7CisgICAgICAgICAgICAgICAgaWYgKGFjY2Vzcy50eXBl
KCkgIT0gQWNjZXNzQ2FzZTo6VHJhbnNpdGlvbikKKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKGFjY2Vzcy5zdHJ1Y3R1cmUo
KSkpCisgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25s
eVBvaW50ZXIoYWNjZXNzLm5ld1N0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICAgICAgIGFsbEFyZU1hcmtlZFNvRmFyID0gZmFsc2U7Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGogPSBsaXN0LT5zaXplKCk7IGotLTspIHsKLSAgICAgICAgICAgICAgICAgICAg
UHV0QnlJZEFjY2VzcyYgYWNjZXNzID0gbGlzdC0+bV9saXN0W2pdOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoIWFjY2Vzcy5pc1RyYW5zaXRpb24oKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQoYWNjZXNz
Lm9sZFN0cnVjdHVyZSgpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5k
KCZhY2Nlc3MubV9uZXdTdHJ1Y3R1cmUpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgICAgICBhbGxBcmVNYXJrZWRTb0ZhciA9IGZhbHNlOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTI3ODUsMTAgKzI3MTIsMTAgQEAgdm9pZCBD
b2RlQmxvY2s6OmdldEJ5VmFsSW5mb01hcChCeVZhbEluZgogfQogCiAjaWYgRU5BQkxFKEpJVCkK
LVN0cnVjdHVyZVN0dWJJbmZvKiBDb2RlQmxvY2s6OmFkZFN0dWJJbmZvKCkKK1N0cnVjdHVyZVN0
dWJJbmZvKiBDb2RlQmxvY2s6OmFkZFN0dWJJbmZvKEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSkKIHsK
ICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJldHVybiBtX3N0
dWJJbmZvcy5hZGQoKTsKKyAgICByZXR1cm4gbV9zdHViSW5mb3MuYWRkKGFjY2Vzc1R5cGUpOwog
fQogCiBTdHJ1Y3R1cmVTdHViSW5mbyogQ29kZUJsb2NrOjpmaW5kU3R1YkluZm8oQ29kZU9yaWdp
biBjb2RlT3JpZ2luKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suaAkocmV2aXNpb24gMTg5NTQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDgsNyArMjA4LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgZ2V0QnlWYWxJbmZvTWFwKEJ5VmFsSW5mb01hcCYgcmVzdWx0KTsKICAgICAK
ICNpZiBFTkFCTEUoSklUKQotICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBhZGRTdHViSW5mbygpOwor
ICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBhZGRTdHViSW5mbyhBY2Nlc3NUeXBlKTsKICAgICBCYWc8
U3RydWN0dXJlU3R1YkluZm8+OjppdGVyYXRvciBzdHViSW5mb0JlZ2luKCkgeyByZXR1cm4gbV9z
dHViSW5mb3MuYmVnaW4oKTsgfQogICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz46Oml0ZXJhdG9y
IHN0dWJJbmZvRW5kKCkgeyByZXR1cm4gbV9zdHViSW5mb3MuZW5kKCk7IH0KICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAJ
KHJldmlzaW9uIDE4OTU0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRC
eUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTQgKzI2LDEzIEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiR2V0QnlJZFN0YXR1cy5oIgogCi0jaW5jbHVkZSAiQWNj
ZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNs
dWRlICJDb21wbGV4R2V0U3RhdHVzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1
ZGUgIkpTU2NvcGUuaCIKICNpbmNsdWRlICJMTEludERhdGEuaCIKICNpbmNsdWRlICJMb3dMZXZl
bEludGVycHJldGVyLmgiCi0jaW5jbHVkZSAiUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oIgorI2lu
Y2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCiAjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CiAK
IG5hbWVzcGFjZSBKU0MgewpAQCAtMTM5LDEyICsxMzgsMTIgQEAgR2V0QnlJZFN0YXR1cyBHZXRC
eUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgIGlmICghc3R1YkluZm8tPnNlZW4pCiAgICAgICAg
IHJldHVybiBHZXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwogICAgIAotICAgIFBvbHltb3Jw
aGljR2V0QnlJZExpc3QqIGxpc3QgPSAwOworICAgIFBvbHltb3JwaGljQWNjZXNzKiBsaXN0ID0g
MDsKICAgICBTdGF0ZSBzbG93UGF0aFN0YXRlID0gVGFrZXNTbG93UGF0aDsKLSAgICBpZiAoc3R1
YkluZm8tPmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9saXN0KSB7Ci0gICAgICAgIGxp
c3QgPSBzdHViSW5mby0+dS5nZXRCeUlkTGlzdC5saXN0OworICAgIGlmIChzdHViSW5mby0+Y2Fj
aGVUeXBlID09IENhY2hlVHlwZTo6U3R1YikgeworICAgICAgICBsaXN0ID0gc3R1YkluZm8tPnUu
c3R1YjsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytp
KSB7Ci0gICAgICAgICAgICBjb25zdCBHZXRCeUlkQWNjZXNzJiBhY2Nlc3MgPSBsaXN0LT5hdChp
KTsKKyAgICAgICAgICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIGFjY2VzcyA9IGxpc3QtPmF0KGkpOwog
ICAgICAgICAgICAgaWYgKGFjY2Vzcy5kb2VzQ2FsbHMoKSkKICAgICAgICAgICAgICAgICBzbG93
UGF0aFN0YXRlID0gTWFrZXNDYWxsczsKICAgICAgICAgfQpAQCAtMTU3LDEyICsxNTYsMTIgQEAg
R2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgIEdldEJ5SWRTdGF0
dXMgcmVzdWx0OwogICAgIHJlc3VsdC5tX3N0YXRlID0gU2ltcGxlOwogICAgIHJlc3VsdC5tX3dh
c1NlZW5JbkpJVCA9IHRydWU7IC8vIFRoaXMgaXMgaW50ZXJlc3RpbmcgZm9yIGJ5dGVjb2RlIGR1
bXBpbmcgb25seS4KLSAgICBzd2l0Y2ggKHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSB7Ci0gICAgY2Fz
ZSBhY2Nlc3NfdW5zZXQ6CisgICAgc3dpdGNoIChzdHViSW5mby0+Y2FjaGVUeXBlKSB7CisgICAg
Y2FzZSBDYWNoZVR5cGU6OlVuc2V0OgogICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhOb0lu
Zm9ybWF0aW9uKTsKICAgICAgICAgCi0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGY6IHsK
LSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+dS5nZXRCeUlkU2VsZi5i
YXNlT2JqZWN0U3RydWN0dXJlLmdldCgpOworICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2Vs
ZjogeworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0dWJJbmZvLT51LmJ5SWRTZWxm
LmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCk7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRha2Vz
U2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkpCiAgICAgICAgICAgICByZXR1cm4gR2V0
QnlJZFN0YXR1cyhzbG93UGF0aFN0YXRlLCB0cnVlKTsKICAgICAgICAgdW5zaWduZWQgYXR0cmli
dXRlc0lnbm9yZWQ7CkBAIC0xNzcsMTIgKzE3NiwyNSBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRT
dGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgICAg
ICAKLSAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfbGlzdDogeworICAgIGNhc2UgQ2FjaGVUeXBl
OjpTdHViOiB7CiAgICAgICAgIGZvciAodW5zaWduZWQgbGlzdEluZGV4ID0gMDsgbGlzdEluZGV4
IDwgbGlzdC0+c2l6ZSgpOyArK2xpc3RJbmRleCkgewotICAgICAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBsaXN0LT5hdChsaXN0SW5kZXgpLnN0cnVjdHVyZSgpOworICAgICAgICAgICAg
Y29uc3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0gbGlzdC0+YXQobGlzdEluZGV4KTsKKyAgICAgICAg
ICAgIGlmIChhY2Nlc3MudmlhUHJveHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlJ
ZFN0YXR1cyhzbG93UGF0aFN0YXRlLCB0cnVlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBhY2Nlc3Muc3RydWN0dXJlKCk7CisgICAgICAgICAgICBp
ZiAoIXN0cnVjdHVyZSkgeworICAgICAgICAgICAgICAgIC8vIFRoZSBudWxsIHN0cnVjdHVyZSBj
YXNlcyBhcmlzZSBkdWUgdG8gYXJyYXkubGVuZ3RoIGFuZCBzdHJpbmcubGVuZ3RoLiBXZSBoYXZl
IG5vIHdheQorICAgICAgICAgICAgICAgIC8vIG9mIGNyZWF0aW5nIGEgR2V0QnlJZFZhcmlhbnQg
Zm9yIHRob3NlLCBhbmQgd2UgZG9uJ3QgcmVhbGx5IGhhdmUgdG8gc2luY2UgdGhlIERGRworICAg
ICAgICAgICAgICAgIC8vIGhhbmRsZXMgdGhvc2UgY2FzZXMgaW4gRml4dXBQaGFzZSB1c2luZyB2
YWx1ZSBwcm9maWxpbmcuIFRoYXQncyBhIGJpdCBhd2t3YXJkIC0gd2UKKyAgICAgICAgICAgICAg
ICAvLyBzaG91bGRuJ3QgaGF2ZSB0byB1c2UgdmFsdWUgcHJvZmlsaW5nIHRvIGRpc2NvdmVyIHNv
bWV0aGluZyB0aGF0IHRoZSBBY2Nlc3NDYXNlCisgICAgICAgICAgICAgICAgLy8gY291bGQgaGF2
ZSB0b2xkIHVzLiBCdXQsIGl0IHdvcmtzIHdlbGwgZW5vdWdoLiBTbywgb3VyIG9ubHkgY29uY2Vy
biBoZXJlIGlzIHRvIG5vdAorICAgICAgICAgICAgICAgIC8vIGNyYXNoIG9uIG51bGwgc3RydWN0
dXJlLgorICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUs
IHRydWUpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBDb21wbGV4
R2V0U3RhdHVzIGNvbXBsZXhHZXRTdGF0dXMgPSBDb21wbGV4R2V0U3RhdHVzOjpjb21wdXRlRm9y
KAotICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgbGlzdC0+YXQobGlzdEluZGV4KS5jb25kaXRp
b25TZXQoKSwgdWlkKTsKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGFjY2Vzcy5jb25kaXRp
b25TZXQoKSwgdWlkKTsKICAgICAgICAgICAgICAKICAgICAgICAgICAgIHN3aXRjaCAoY29tcGxl
eEdldFN0YXR1cy5raW5kKCkpIHsKICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6
U2hvdWxkU2tpcDoKQEAgLTE5MywyOSArMjA1LDIzIEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0
YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIENv
bXBsZXhHZXRTdGF0dXM6OklubGluZWFibGU6IHsKICAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzOwotICAgICAgICAgICAgICAgIHN3
aXRjaCAobGlzdC0+YXQobGlzdEluZGV4KS50eXBlKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNl
IEdldEJ5SWRBY2Nlc3M6OlNpbXBsZUlubGluZToKLSAgICAgICAgICAgICAgICBjYXNlIEdldEJ5
SWRBY2Nlc3M6OlNpbXBsZVN0dWI6IHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGFjY2Vzcy50
eXBlKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OkxvYWQ6IHsKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGNhc2UgR2V0QnlJZEFjY2Vzczo6R2V0dGVyOiB7Ci0gICAgICAgICAgICAgICAgICAgIEFjY2Vz
c29yQ2FsbEpJVFN0dWJSb3V0aW5lKiBzdHViID0gc3RhdGljX2Nhc3Q8QWNjZXNzb3JDYWxsSklU
U3R1YlJvdXRpbmUqPigKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QtPmF0KGxpc3RJbmRl
eCkuc3R1YlJvdXRpbmUoKSk7CisgICAgICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpHZXR0
ZXI6IHsKKyAgICAgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBh
Y2Nlc3MuY2FsbExpbmtJbmZvKCk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChjYWxsTGlu
a0luZm8pOwogICAgICAgICAgICAgICAgICAgICBjYWxsTGlua1N0YXR1cyA9IHN0ZDo6bWFrZV91
bmlxdWU8Q2FsbExpbmtTdGF0dXM+KAogICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbExpbmtT
dGF0dXM6OmNvbXB1dGVGb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9ja2VyLCBw
cm9maWxlZEJsb2NrLCAqc3R1Yi0+bV9jYWxsTGlua0luZm8sIGNhbGxFeGl0U2l0ZURhdGEpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ssICpjYWxs
TGlua0luZm8sIGNhbGxFeGl0U2l0ZURhdGEpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlJZEFjY2Vzczo6
U2ltcGxlTWlzczoKLSAgICAgICAgICAgICAgICBjYXNlIEdldEJ5SWRBY2Nlc3M6OkN1c3RvbUdl
dHRlcjoKLSAgICAgICAgICAgICAgICBjYXNlIEdldEJ5SWRBY2Nlc3M6OldhdGNoZWRTdHViOnsK
LSAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIHRvdGFsbHkgc3dlZXQg
dG8gc3VwcG9ydCB0aGlzIGF0IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZS4KLSAgICAgICAgICAg
ICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzA1
MgorICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklY
TUU6IEl0IHdvdWxkIGJlIHRvdGFsbHkgc3dlZXQgdG8gc3VwcG9ydCBtb3JlIG9mIHRoZXNlIGF0
IHNvbWUgcG9pbnQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIC8vIGZ1dHVyZS4gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzA1MgogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhzbG93UGF0aFN0YXRlLCB0cnVlKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfSB9CiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIEdldEJ5SWRW
YXJpYW50IHZhcmlhbnQoCiAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZVNldChzdHJ1Y3R1
cmUpLCBjb21wbGV4R2V0U3RhdHVzLm9mZnNldCgpLApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAx
ODkzMjQpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0LmNwcDoxODkzMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgiCisKKyNp
ZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiSGVhcC5o
IgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworR2V0QnlJZEFjY2Vzczo6R2V0QnlJZEFjY2VzcygKKyAg
ICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgUGFzc1JlZlB0cjxKSVRT
dHViUm91dGluZT4gc3R1YlJvdXRpbmUsCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCisgICAgOiBtX3R5cGUo
dHlwZSkKKyAgICAsIG1fc3RydWN0dXJlKHZtLCBvd25lciwgc3RydWN0dXJlKQorICAgICwgbV9j
b25kaXRpb25TZXQoY29uZGl0aW9uU2V0KQorICAgICwgbV9zdHViUm91dGluZShzdHViUm91dGlu
ZSkKK3sKK30KKworR2V0QnlJZEFjY2Vzczo6fkdldEJ5SWRBY2Nlc3MoKQoreworfQorCitHZXRC
eUlkQWNjZXNzIEdldEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1cmVTdHViSW5mbyhTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGluaXRpYWxT
bG93UGF0aCA9CisgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zm
c2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpOworICAgIAorICAgIEdldEJ5
SWRBY2Nlc3MgcmVzdWx0OworICAgIAorICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmFjY2Vz
c1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmKTsKKyAgICAKKyAgICByZXN1bHQubV90eXBl
ID0gU2ltcGxlSW5saW5lOworICAgIHJlc3VsdC5tX3N0cnVjdHVyZS5jb3B5RnJvbShzdHViSW5m
by51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUpOworICAgIHJlc3VsdC5tX3N0dWJS
b3V0aW5lID0gSklUU3R1YlJvdXRpbmU6OmNyZWF0ZVNlbGZNYW5hZ2VkUm91dGluZShpbml0aWFs
U2xvd1BhdGgpOworICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgR2V0QnlJZEFj
Y2Vzczo6dmlzaXRXZWFrKFZNJiB2bSkgY29uc3QKK3sKKyAgICBpZiAobV9zdHJ1Y3R1cmUgJiYg
IUhlYXA6OmlzTWFya2VkKG1fc3RydWN0dXJlLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmICghbV9jb25kaXRpb25TZXQuYXJlU3RpbGxMaXZlKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAoIW1fc3R1YlJvdXRpbmUtPnZpc2l0V2Vhayh2bSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworUG9seW1vcnBoaWNHZXRCeUlk
TGlzdDo6UG9seW1vcnBoaWNHZXRCeUlkTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8p
Cit7CisgICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0KQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgbV9saXN0LmFwcGVuZChHZXRCeUlkQWNjZXNzOjpmcm9tU3Ry
dWN0dXJlU3R1YkluZm8oc3R1YkluZm8pKTsKK30KKworUG9seW1vcnBoaWNHZXRCeUlkTGlzdCog
UG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6ZnJvbShTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8p
Cit7CisgICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9saXN0
KQorICAgICAgICByZXR1cm4gc3R1YkluZm8udS5nZXRCeUlkTGlzdC5saXN0OworICAgIAorICAg
IEFTU0VSVCgKKyAgICAgICAgc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lk
X3NlbGYKKyAgICAgICAgfHwgc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpOwor
ICAgIAorICAgIFBvbHltb3JwaGljR2V0QnlJZExpc3QqIHJlc3VsdCA9IG5ldyBQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0KHN0dWJJbmZvKTsKKyAgICAKKyAgICBzdHViSW5mby5pbml0R2V0QnlJZExp
c3QocmVzdWx0KTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitQb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0Ojp+UG9seW1vcnBoaWNHZXRCeUlkTGlzdCgpIHsgfQorCitNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6Y3VycmVudFNsb3dQYXRoVGFyZ2V0KAor
ICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykgY29uc3QKK3sKKyAgICBpZiAoaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRP
ZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSk7CisgICAgcmV0dXJuIG1f
bGlzdC5sYXN0KCkuc3R1YlJvdXRpbmUoKS0+Y29kZSgpLmNvZGUoKTsKK30KKwordm9pZCBQb2x5
bW9ycGhpY0dldEJ5SWRMaXN0OjphZGRBY2Nlc3MoY29uc3QgR2V0QnlJZEFjY2VzcyYgYWNjZXNz
KQoreworICAgIEFTU0VSVCghaXNGdWxsKCkpOworICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBy
ZXNpemluZyBvcHRpbWl6ZXMgZm9yIHNwYWNlLCBub3QgdGltZS4KKyAgICBtX2xpc3QucmVzaXpl
VG9GaXQobV9saXN0LnNpemUoKSArIDEpOworICAgIG1fbGlzdC5sYXN0KCkgPSBhY2Nlc3M7Cit9
CisKK2Jvb2wgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6aXNGdWxsKCkgY29uc3QKK3sKKyAgICBB
U1NFUlQoc2l6ZSgpIDw9IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSk7CisgICAgcmV0dXJu
IHNpemUoKSA9PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkU7Cit9CisKK2Jvb2wgUG9seW1v
cnBoaWNHZXRCeUlkTGlzdDo6aXNBbG1vc3RGdWxsKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoc2l6
ZSgpIDw9IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSk7CisgICAgcmV0dXJuIHNpemUoKSA+
PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUgLSAxOworfQorCitib29sIFBvbHltb3JwaGlj
R2V0QnlJZExpc3Q6OmRpZFNlbGZQYXRjaGluZygpIGNvbnN0Cit7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGlmIChhdChpKS50eXBlKCkgPT0gR2V0QnlJ
ZEFjY2Vzczo6U2ltcGxlSW5saW5lKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojp2aXNp
dFdlYWsoVk0mIHZtKSBjb25zdAoreworICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUoKTsgaS0t
OykgeworICAgICAgICBpZiAoIWF0KGkpLnZpc2l0V2Vhayh2bSkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNv
cHkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3Mu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxMzEgKzI0LDExNTYgQEAKICAqLwogCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oIgorI2luY2x1
ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCiAKICNpZiBFTkFCTEUoSklUKQogCisjaW5jbHVkZSAi
QmluYXJ5U3dpdGNoLmgiCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCiAjaW5jbHVkZSAiQ29k
ZUJsb2NrLmgiCisjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgor
I2luY2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5j
bHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5o
IgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaCIKICNpbmNsdWRl
ICJTdHJ1Y3R1cmVTdHViSW5mby5oIgorI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKyNp
bmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLUdldEJ5SWRBY2Nl
c3M6OkdldEJ5SWRBY2Nlc3MoCi0gICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBl
IHR5cGUsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lLAotICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0
aW9uU2V0KQotICAgIDogbV90eXBlKHR5cGUpCi0gICAgLCBtX3N0cnVjdHVyZSh2bSwgb3duZXIs
IHN0cnVjdHVyZSkKLSAgICAsIG1fY29uZGl0aW9uU2V0KGNvbmRpdGlvblNldCkKLSAgICAsIG1f
c3R1YlJvdXRpbmUoc3R1YlJvdXRpbmUpCitzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFs
c2U7CisKK3N0cnVjdCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUgeworICAgIENDYWxsSGVscGVycyog
aml0IHsgbnVsbHB0ciB9OworICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciogYWxsb2NhdG9y
OworICAgIHNpemVfdCBudW1iZXJPZlBhZGRpbmdCeXRlcyB7IDAgfTsKKyAgICBQb2x5bW9ycGhp
Y0FjY2VzcyogYWNjZXNzIHsgbnVsbHB0ciB9OworICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbyB7IG51bGxwdHIgfTsKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHN1Y2Nlc3M7Cisg
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBmYWlsQW5kUmVwYXRjaDsKKyAgICBDQ2FsbEhlbHBl
cnM6Okp1bXBMaXN0IGZhaWxBbmRJZ25vcmU7CisgICAgR1BSUmVnIGJhc2VHUFIgeyBJbnZhbGlk
R1BSUmVnIH07CisgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzOworICAgIEdQUlJlZyBzY3JhdGNo
R1BSIHsgSW52YWxpZEdQUlJlZyB9OworICAgIFZlY3RvcjxzdGQ6OmZ1bmN0aW9uPHZvaWQoTGlu
a0J1ZmZlciYpPj4gY2FsbGJhY2tzOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50OworICAg
IHN0ZDo6dW5pcXVlX3B0cjxXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8+IHdhdGNocG9p
bnRzOworCisgICAgV2F0Y2hwb2ludCogYWRkV2F0Y2hwb2ludChjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiYgY29uZGl0aW9uID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb24oKSkKKyAgICB7
CisgICAgICAgIHJldHVybiBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86OmVuc3VyZVJl
ZmVyZW5jZUFuZEFkZFdhdGNocG9pbnQoCisgICAgICAgICAgICB3YXRjaHBvaW50cywgaml0LT5j
b2RlQmxvY2soKSwgc3R1YkluZm8sIGNvbmRpdGlvbik7CisgICAgfQorCisgICAgdm9pZCByZXN0
b3JlU2NyYXRjaCgpCisgICAgeworICAgICAgICBhbGxvY2F0b3ItPnJlc3RvcmVSZXVzZWRSZWdp
c3RlcnNCeVBvcHBpbmcoKmppdCwgbnVtYmVyT2ZQYWRkaW5nQnl0ZXMpOworICAgIH0KKworICAg
IHZvaWQgc3VjY2VlZCgpCisgICAgeworICAgICAgICByZXN0b3JlU2NyYXRjaCgpOworICAgICAg
ICBzdWNjZXNzLmFwcGVuZChqaXQtPmp1bXAoKSk7CisgICAgfQorfTsKKworQWNjZXNzQ2FzZTo6
QWNjZXNzQ2FzZSgpCiB7CiB9CiAKLUdldEJ5SWRBY2Nlc3M6On5HZXRCeUlkQWNjZXNzKCkKK3N0
ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpnZXQoCisgICAgVk0mIHZtLCBK
U0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5cGUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQm
IGNvbmRpdGlvblNldCwgYm9vbCB2aWFQcm94eSwgV2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNl
dCwKKyAgICBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYyBjdXN0b21HZXR0ZXIsIEpTT2JqZWN0
KiBjdXN0b21TbG90QmFzZSkKIHsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gcmVz
dWx0KG5ldyBBY2Nlc3NDYXNlKCkpOworCisgICAgcmVzdWx0LT5tX3R5cGUgPSB0eXBlOworICAg
IHJlc3VsdC0+bV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgcmVzdWx0LT5tX3N0cnVjdHVyZS5zZXQo
dm0sIG93bmVyLCBzdHJ1Y3R1cmUpOworICAgIHJlc3VsdC0+bV9jb25kaXRpb25TZXQgPSBjb25k
aXRpb25TZXQ7CisKKyAgICBpZiAodmlhUHJveHkgfHwgYWRkaXRpb25hbFNldCB8fCByZXN1bHQt
PmRvZXNDYWxscygpIHx8IGN1c3RvbUdldHRlciB8fCBjdXN0b21TbG90QmFzZSkgeworICAgICAg
ICByZXN1bHQtPm1fcmFyZURhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPFJhcmVEYXRhPigpOworICAg
ICAgICByZXN1bHQtPm1fcmFyZURhdGEtPnZpYVByb3h5ID0gdmlhUHJveHk7CisgICAgICAgIHJl
c3VsdC0+bV9yYXJlRGF0YS0+YWRkaXRpb25hbFNldCA9IGFkZGl0aW9uYWxTZXQ7CisgICAgICAg
IHJlc3VsdC0+bV9yYXJlRGF0YS0+Y3VzdG9tQWNjZXNzb3IuZ2V0dGVyID0gY3VzdG9tR2V0dGVy
OworICAgICAgICByZXN1bHQtPm1fcmFyZURhdGEtPmN1c3RvbVNsb3RCYXNlLnNldE1heUJlTnVs
bCh2bSwgb3duZXIsIGN1c3RvbVNsb3RCYXNlKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0
OwogfQogCi1HZXRCeUlkQWNjZXNzIEdldEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1cmVTdHViSW5m
byhTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCitzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2Fz
ZT4gQWNjZXNzQ2FzZTo6cmVwbGFjZSgKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7Ci0gICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIGluaXRpYWxTbG93UGF0aCA9Ci0gICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nh
c2UpOwotICAgIAotICAgIEdldEJ5SWRBY2Nlc3MgcmVzdWx0OwotICAgIAotICAgIFJFTEVBU0Vf
QVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmKTsKLSAg
ICAKLSAgICByZXN1bHQubV90eXBlID0gU2ltcGxlSW5saW5lOwotICAgIHJlc3VsdC5tX3N0cnVj
dHVyZS5jb3B5RnJvbShzdHViSW5mby51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUp
OwotICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gSklUU3R1YlJvdXRpbmU6OmNyZWF0ZVNlbGZN
YW5hZ2VkUm91dGluZShpbml0aWFsU2xvd1BhdGgpOwotICAgIAorICAgIHN0ZDo6dW5pcXVlX3B0
cjxBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nhc2UoKSk7CisKKyAgICByZXN1bHQtPm1f
dHlwZSA9IFJlcGxhY2U7CisgICAgcmVzdWx0LT5tX29mZnNldCA9IG9mZnNldDsKKyAgICByZXN1
bHQtPm1fc3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7CisKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6dHJh
bnNpdGlvbigKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogb2xkU3RydWN0
dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAorICAg
IGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCit7CisgICAg
UkVMRUFTRV9BU1NFUlQob2xkU3RydWN0dXJlID09IG5ld1N0cnVjdHVyZS0+cHJldmlvdXNJRCgp
KTsKKworICAgIC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIGEgcmVh
bGxvYywgaWYgd2UgZG9uJ3QgaGF2ZQorICAgIC8vIGVub3VnaCByZWdpc3RlcnMgdG8gbWFrZSBp
dCBoYXBwZW4uCisgICAgaWYgKEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzIDwgNgorICAgICAg
ICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gbmV3U3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpCisgICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSkgeworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICAvLyBTa2lw
IG9wdGltaXppbmcgdGhlIGNhc2Ugd2hlcmUgd2UgbmVlZCByZWFsbG9jLCBhbmQgdGhlIHN0cnVj
dHVyZSBoYXMKKyAgICAvLyBpbmRleGluZyBzdG9yYWdlLgorICAgIC8vIEZJWE1FOiBXZSBzaG91
bGRuJ3Qgc2tpcCB0aGlzISBJbXBsZW1lbnQgaXQhCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMDkxNAorICAgIGlmIChvbGRTdHJ1Y3R1cmUtPmNvdWxk
SGF2ZUluZGV4aW5nSGVhZGVyKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHJlc3VsdChuZXcgQWNjZXNzQ2FzZSgpKTsKKworICAg
IHJlc3VsdC0+bV90eXBlID0gVHJhbnNpdGlvbjsKKyAgICByZXN1bHQtPm1fb2Zmc2V0ID0gb2Zm
c2V0OworICAgIHJlc3VsdC0+bV9zdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgbmV3U3RydWN0dXJl
KTsKKyAgICByZXN1bHQtPm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OworCisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6
OnNldHRlcigKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKKyAgICBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBQdXRQcm9wZXJ0eVNsb3Q6OlB1
dFZhbHVlRnVuYyBjdXN0b21TZXR0ZXIsCisgICAgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlKQor
eworICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nhc2Uo
KSk7CisKKyAgICByZXN1bHQtPm1fdHlwZSA9IHR5cGU7CisgICAgcmVzdWx0LT5tX29mZnNldCA9
IG9mZnNldDsKKyAgICByZXN1bHQtPm1fc3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVy
ZSk7CisgICAgcmVzdWx0LT5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKKyAgICByZXN1
bHQtPm1fcmFyZURhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPFJhcmVEYXRhPigpOworICAgIHJlc3Vs
dC0+bV9yYXJlRGF0YS0+Y3VzdG9tQWNjZXNzb3Iuc2V0dGVyID0gY3VzdG9tU2V0dGVyOworICAg
IHJlc3VsdC0+bV9yYXJlRGF0YS0+Y3VzdG9tU2xvdEJhc2Uuc2V0TWF5QmVOdWxsKHZtLCBvd25l
ciwgY3VzdG9tU2xvdEJhc2UpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RkOjp1bmlx
dWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OmluKAorICAgIFZNJiB2bSwgSlNDZWxsKiBv
d25lciwgQWNjZXNzVHlwZSB0eXBlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKKyAgICBjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KQoreworICAgIHN0ZDo6dW5p
cXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nhc2UoKSk7CisKKyAgICByZXN1
bHQtPm1fdHlwZSA9IHR5cGU7CisgICAgcmVzdWx0LT5tX3N0cnVjdHVyZS5zZXQodm0sIG93bmVy
LCBzdHJ1Y3R1cmUpOworICAgIHJlc3VsdC0+bV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7
CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4g
QWNjZXNzQ2FzZTo6Z2V0TGVuZ3RoKFZNJiwgSlNDZWxsKiwgQWNjZXNzVHlwZSB0eXBlKQorewor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nhc2UoKSk7
CisKKyAgICByZXN1bHQtPm1fdHlwZSA9IHR5cGU7CisKICAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci1ib29sIEdldEJ5SWRBY2Nlc3M6OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0CitBY2Nlc3NDYXNl
Ojp+QWNjZXNzQ2FzZSgpCit7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nl
c3NDYXNlOjpmcm9tU3RydWN0dXJlU3R1YkluZm8oCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVy
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgc3dpdGNoIChzdHViSW5mby5j
YWNoZVR5cGUpIHsKKyAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJZFNlbGY6CisgICAgICAgIHJl
dHVybiBnZXQoCisgICAgICAgICAgICB2bSwgb3duZXIsIExvYWQsIHN0dWJJbmZvLnUuYnlJZFNl
bGYub2Zmc2V0LAorICAgICAgICAgICAgc3R1YkluZm8udS5ieUlkU2VsZi5iYXNlT2JqZWN0U3Ry
dWN0dXJlLmdldCgpKTsKKworICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZToKKyAg
ICAgICAgcmV0dXJuIHJlcGxhY2UoCisgICAgICAgICAgICB2bSwgb3duZXIsIHN0dWJJbmZvLnUu
YnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgc3R1YkluZm8udS5ieUlkU2VsZi5v
ZmZzZXQpOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
fQorCitzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6Y2xvbmUoKSBjb25z
dAoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nh
c2UoKSk7CisgICAgcmVzdWx0LT5tX3R5cGUgPSBtX3R5cGU7CisgICAgcmVzdWx0LT5tX29mZnNl
dCA9IG1fb2Zmc2V0OworICAgIHJlc3VsdC0+bV9zdHJ1Y3R1cmUgPSBtX3N0cnVjdHVyZTsKKyAg
ICByZXN1bHQtPm1fY29uZGl0aW9uU2V0ID0gbV9jb25kaXRpb25TZXQ7CisgICAgaWYgKFJhcmVE
YXRhKiByYXJlRGF0YSA9IG1fcmFyZURhdGEuZ2V0KCkpIHsKKyAgICAgICAgcmVzdWx0LT5tX3Jh
cmVEYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxSYXJlRGF0YT4oKTsKKyAgICAgICAgcmVzdWx0LT5t
X3JhcmVEYXRhLT52aWFQcm94eSA9IHJhcmVEYXRhLT52aWFQcm94eTsKKyAgICAgICAgcmVzdWx0
LT5tX3JhcmVEYXRhLT5hZGRpdGlvbmFsU2V0ID0gcmFyZURhdGEtPmFkZGl0aW9uYWxTZXQ7Cisg
ICAgICAgIC8vIE5PVEU6IFdlIGRvbid0IGNvcHkgdGhlIGNhbGxMaW5rSW5mbywgc2luY2UgdGhh
dCdzIGNyZWF0ZWQgZHVyaW5nIGNvZGUgZ2VuZXJhdGlvbi4KKyAgICAgICAgcmVzdWx0LT5tX3Jh
cmVEYXRhLT5jdXN0b21BY2Nlc3Nvci5vcGFxdWUgPSByYXJlRGF0YS0+Y3VzdG9tQWNjZXNzb3Iu
b3BhcXVlOworICAgICAgICByZXN1bHQtPm1fcmFyZURhdGEtPmN1c3RvbVNsb3RCYXNlID0gcmFy
ZURhdGEtPmN1c3RvbVNsb3RCYXNlOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCiti
b29sIEFjY2Vzc0Nhc2U6Omd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrKCkgY29uc3QKK3sKKyAgICBp
ZiAodmlhUHJveHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNoIChtX3R5
cGUpIHsKKyAgICBjYXNlIEFycmF5TGVuZ3RoOgorICAgIGNhc2UgU3RyaW5nTGVuZ3RoOgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorfQorCitKU09iamVjdCogQWNjZXNzQ2FzZTo6YWx0ZXJuYXRlQmFzZSgpIGNvbnN0Cit7
CisgICAgaWYgKGN1c3RvbVNsb3RCYXNlKCkpCisgICAgICAgIHJldHVybiBjdXN0b21TbG90QmFz
ZSgpOworICAgIHJldHVybiBjb25kaXRpb25TZXQoKS5zbG90QmFzZUNvbmRpdGlvbigpLm9iamVj
dCgpOworfQorCitib29sIEFjY2Vzc0Nhc2U6OmNhblJlcGxhY2UoY29uc3QgQWNjZXNzQ2FzZSYg
b3RoZXIpCit7CisgICAgLy8gV2UgY291bGQgZG8gYSBsb3QgYmV0dGVyIGhlcmUsIGJ1dCBmb3Ig
bm93IHdlIGp1c3QgZG8gc29tZXRoaW5nIG9idmlvdXMuCisKKyAgICBpZiAoIWd1YXJkZWRCeVN0
cnVjdHVyZUNoZWNrKCkgfHwgIW90aGVyLmd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrKCkpIHsKKyAg
ICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgcmV0dXJuIHN0cnVjdHVyZSgpID09IG90aGVyLnN0cnVjdHVyZSgpOworfQor
Cit2b2lkIEFjY2Vzc0Nhc2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBv
dXQucHJpbnQobV90eXBlLCAiOigiKTsKKworICAgIENvbW1hUHJpbnRlciBjb21tYTsKKworICAg
IGlmIChtX3R5cGUgPT0gVHJhbnNpdGlvbikKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAic3Ry
dWN0dXJlID0gIiwgcG9pbnRlckR1bXAoc3RydWN0dXJlKCkpLCAiIC0+ICIsIHBvaW50ZXJEdW1w
KG5ld1N0cnVjdHVyZSgpKSk7CisgICAgZWxzZSBpZiAobV9zdHJ1Y3R1cmUpCisgICAgICAgIG91
dC5wcmludChjb21tYSwgInN0cnVjdHVyZSA9ICIsIHBvaW50ZXJEdW1wKG1fc3RydWN0dXJlLmdl
dCgpKSk7CisKKyAgICBpZiAoaXNWYWxpZE9mZnNldChtX29mZnNldCkpCisgICAgICAgIG91dC5w
cmludChjb21tYSwgIm9mZnNldCA9ICIsIG1fb2Zmc2V0KTsKKyAgICBpZiAoIW1fY29uZGl0aW9u
U2V0LmlzRW1wdHkoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiY29uZGl0aW9ucyA9ICIs
IG1fY29uZGl0aW9uU2V0KTsKKworICAgIGlmIChSYXJlRGF0YSogcmFyZURhdGEgPSBtX3JhcmVE
YXRhLmdldCgpKSB7CisgICAgICAgIGlmIChyYXJlRGF0YS0+dmlhUHJveHkpCisgICAgICAgICAg
ICBvdXQucHJpbnQoY29tbWEsICJ2aWFQcm94eSA9ICIsIHJhcmVEYXRhLT52aWFQcm94eSk7Cisg
ICAgICAgIGlmIChyYXJlRGF0YS0+YWRkaXRpb25hbFNldCkKKyAgICAgICAgICAgIG91dC5wcmlu
dChjb21tYSwgImFkZGl0aW9uYWxTZXQgPSAiLCBSYXdQb2ludGVyKHJhcmVEYXRhLT5hZGRpdGlv
bmFsU2V0LmdldCgpKSk7CisgICAgICAgIGlmIChyYXJlRGF0YS0+Y2FsbExpbmtJbmZvKQorICAg
ICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiY2FsbExpbmtJbmZvID0gIiwgUmF3UG9pbnRlcihy
YXJlRGF0YS0+Y2FsbExpbmtJbmZvLmdldCgpKSk7CisgICAgICAgIGlmIChyYXJlRGF0YS0+Y3Vz
dG9tQWNjZXNzb3Iub3BhcXVlKQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiY3VzdG9t
QWNjZXNzb3IgPSAiLCBSYXdQb2ludGVyKHJhcmVEYXRhLT5jdXN0b21BY2Nlc3Nvci5vcGFxdWUp
KTsKKyAgICAgICAgaWYgKHJhcmVEYXRhLT5jdXN0b21TbG90QmFzZSkKKyAgICAgICAgICAgIG91
dC5wcmludChjb21tYSwgImN1c3RvbVNsb3RCYXNlID0gIiwgUmF3UG9pbnRlcihyYXJlRGF0YS0+
Y3VzdG9tU2xvdEJhc2UuZ2V0KCkpKTsKKyAgICB9CisKKyAgICBvdXQucHJpbnQoIikiKTsKK30K
KworYm9vbCBBY2Nlc3NDYXNlOjp2aXNpdFdlYWsoVk0mIHZtKSBjb25zdAogewogICAgIGlmICht
X3N0cnVjdHVyZSAmJiAhSGVhcDo6aXNNYXJrZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFtX2NvbmRpdGlvblNldC5hcmVTdGlsbExpdmUoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghbV9zdHViUm91dGluZS0+dmlzaXRXZWFr
KHZtKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3JhcmVEYXRhKSB7CisgICAg
ICAgIGlmIChtX3JhcmVEYXRhLT5jYWxsTGlua0luZm8pCisgICAgICAgICAgICBtX3JhcmVEYXRh
LT5jYWxsTGlua0luZm8tPnZpc2l0V2Vhayh2bSk7CisgICAgICAgIGlmIChtX3JhcmVEYXRhLT5j
dXN0b21TbG90QmFzZSAmJiAhSGVhcDo6aXNNYXJrZWQobV9yYXJlRGF0YS0+Y3VzdG9tU2xvdEJh
c2UuZ2V0KCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6UG9seW1vcnBoaWNHZXRCeUlkTGlz
dChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRl
V2l0aEd1YXJkKAorICAgIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUsIENDYWxsSGVscGVy
czo6SnVtcExpc3QmIGZhbGxUaHJvdWdoKQogewotICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBl
ID09IGFjY2Vzc191bnNldCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIG1fbGlzdC5hcHBl
bmQoR2V0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKHN0dWJJbmZvKSk7CisgICAg
Q0NhbGxIZWxwZXJzJiBqaXQgPSAqc3RhdGUuaml0OworCisgICAgc3dpdGNoIChtX3R5cGUpIHsK
KyAgICBjYXNlIEFycmF5TGVuZ3RoOiB7CisgICAgICAgIEFTU0VSVCghdmlhUHJveHkoKSk7Cisg
ICAgICAgIGppdC5sb2FkOChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RhdGUuYmFzZUdQUiwgSlND
ZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHN0YXRlLnNjcmF0Y2hHUFIpOworICAgICAgICBm
YWxsVGhyb3VnaC5hcHBlbmQoCisgICAgICAgICAgICBqaXQuYnJhbmNoVGVzdDMyKAorICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6WmVybywgc3RhdGUuc2NyYXRjaEdQUiwgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoSXNBcnJheSkpKTsKKyAgICAgICAgZmFsbFRocm91Z2guYXBwZW5k
KAorICAgICAgICAgICAgaml0LmJyYW5jaFRlc3QzMigKKyAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6Olplcm8sIHN0YXRlLnNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KEluZGV4aW5nU2hhcGVNYXNrKSkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNl
IFN0cmluZ0xlbmd0aDogeworICAgICAgICBBU1NFUlQoIXZpYVByb3h5KCkpOworICAgICAgICBm
YWxsVGhyb3VnaC5hcHBlbmQoCisgICAgICAgICAgICBqaXQuYnJhbmNoOCgKKyAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6QWRkcmVzcyhzdGF0ZS5iYXNlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwK
KyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihTdHJpbmdUeXBlKSkp
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBkZWZhdWx0OiB7CisgICAgICAgIGlmICh2
aWFQcm94eSgpKSB7CisgICAgICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCisgICAgICAgICAg
ICAgICAgaml0LmJyYW5jaDgoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90
RXF1YWwsCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdGF0ZS5i
YXNlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoUHVyZUZvcndhcmRpbmdQcm94eVR5cGUpKSk7
CisKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6QWRkcmVzcyhzdGF0ZS5iYXNlR1BSLCBKU1Byb3h5Ojp0YXJnZXRPZmZzZXQoKSksCisgICAg
ICAgICAgICAgICAgc3RhdGUuc2NyYXRjaEdQUik7CisKKyAgICAgICAgICAgIGZhbGxUaHJvdWdo
LmFwcGVuZCgKKyAgICAgICAgICAgICAgICBqaXQuYnJhbmNoU3RydWN0dXJlKAorICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RhdGUuc2NyYXRjaEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlKCkpKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgKKyAgICAgICAgICAgICAg
ICBqaXQuYnJhbmNoU3RydWN0dXJlKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3Rh
dGUuYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAgICAgICAgICAg
ICAgICAgc3RydWN0dXJlKCkpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9IH07
CisKKyAgICBnZW5lcmF0ZShzdGF0ZSk7CiB9CiAKLVBvbHltb3JwaGljR2V0QnlJZExpc3QqIFBv
bHltb3JwaGljR2V0QnlJZExpc3Q6OmZyb20oU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQor
dm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZShBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQog
ewotICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfbGlzdCkK
LSAgICAgICAgcmV0dXJuIHN0dWJJbmZvLnUuZ2V0QnlJZExpc3QubGlzdDsKLSAgICAKLSAgICBB
U1NFUlQoCi0gICAgICAgIHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9z
ZWxmCi0gICAgICAgIHx8IHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0KTsKLSAg
ICAKLSAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiByZXN1bHQgPSBuZXcgUG9seW1vcnBoaWNH
ZXRCeUlkTGlzdChzdHViSW5mbyk7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2co
IkdlbmVyYXRpbmcgY29kZSBmb3I6ICIsICp0aGlzLCAiXG4iKTsKICAgICAKLSAgICBzdHViSW5m
by5pbml0R2V0QnlJZExpc3QocmVzdWx0KTsKKyAgICBDQ2FsbEhlbHBlcnMmIGppdCA9ICpzdGF0
ZS5qaXQ7CisgICAgVk0mIHZtID0gKmppdC52bSgpOworICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbyA9ICpzdGF0ZS5zdHViSW5mbzsKKyAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9
ICpzdGF0ZS5pZGVudDsKKyAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSBzdGF0ZS52YWx1ZVJl
Z3M7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0ZS5iYXNlR1BSOworICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gc3RhdGUuc2NyYXRjaEdQUjsKKworICAgIEFTU0VSVChtX2NvbmRpdGlvblNldC5z
dHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgp
KTsKKworICAgIGlmICgoc3RydWN0dXJlKCkgJiYgc3RydWN0dXJlKCktPm5lZWRJbXB1cmVQcm9w
ZXJ0eVdhdGNocG9pbnQoKSkKKyAgICAgICAgfHwgbV9jb25kaXRpb25TZXQubmVlZEltcHVyZVBy
b3BlcnR5V2F0Y2hwb2ludCgpKQorICAgICAgICB2bS5yZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1
cmVQcm9wZXJ0eShpZGVudCwgc3RhdGUuYWRkV2F0Y2hwb2ludCgpKTsKKworICAgIGlmIChhZGRp
dGlvbmFsU2V0KCkpCisgICAgICAgIGFkZGl0aW9uYWxTZXQoKS0+YWRkKHN0YXRlLmFkZFdhdGNo
cG9pbnQoKSk7CisKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25k
aXRpb24gOiBtX2NvbmRpdGlvblNldCkgeworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IGNvbmRpdGlvbi5vYmplY3QoKS0+c3RydWN0dXJlKCk7CisKKyAgICAgICAgaWYgKGNvbmRpdGlv
bi5pc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKKyAgICAg
ICAgICAgIHN0cnVjdHVyZS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoc3RhdGUuYWRkV2F0Y2hw
b2ludChjb25kaXRpb24pKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoY29uZGl0aW9uLnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eUFz
c3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KHN0cnVjdHVyZSkpOworICAgICAgICBqaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY29uZGl0aW9uLm9iamVjdCgpKSwgc2Ny
YXRjaEdQUik7CisgICAgICAgIHN0YXRlLmZhaWxBbmRSZXBhdGNoLmFwcGVuZCgKKyAgICAgICAg
ICAgIGppdC5icmFuY2hTdHJ1Y3R1cmUoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpO
b3RFcXVhbCwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQ
UiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1
cmUpKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgSW5IaXQ6Cisg
ICAgY2FzZSBJbk1pc3M6CisgICAgICAgIGppdC5ib3hCb29sZWFuUGF5bG9hZChtX3R5cGUgPT0g
SW5IaXQsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOworICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7
CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgTWlzczoKKyAgICAgICAgaml0Lm1vdmVUcnVz
dGVkVmFsdWUoanNVbmRlZmluZWQoKSwgdmFsdWVSZWdzKTsKKyAgICAgICAgc3RhdGUuc3VjY2Vl
ZCgpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIExvYWQ6CisgICAgY2FzZSBHZXR0ZXI6
CisgICAgY2FzZSBTZXR0ZXI6CisgICAgY2FzZSBDdXN0b21HZXR0ZXI6CisgICAgY2FzZSBDdXN0
b21TZXR0ZXI6IHsKKyAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQobV9vZmZzZXQpKSB7CisgICAg
ICAgICAgICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmU7CisgICAgICAgICAgICBpZiAobV9jb25k
aXRpb25TZXQuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBzdHJ1
Y3R1cmUoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjdXJyU3RydWN0dXJl
ID0gbV9jb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vYmplY3QoKS0+c3RydWN0dXJl
KCk7CisgICAgICAgICAgICBjdXJyU3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JS
ZXBsYWNlbWVudHModm0sIG9mZnNldCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIEdQUlJlZyBi
YXNlRm9yR2V0R1BSOworICAgICAgICBpZiAodmlhUHJveHkoKSkgeworICAgICAgICAgICAgYmFz
ZUZvckdldEdQUiA9IHZhbHVlUmVncy5wYXlsb2FkR1BSKCk7CisgICAgICAgICAgICBqaXQubG9h
ZFB0cigKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNQ
cm94eTo6dGFyZ2V0T2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIGJhc2VGb3JHZXRHUFIpOwor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGJhc2VGb3JHZXRHUFIgPSBiYXNlR1BSOworCisg
ICAgICAgIEdQUlJlZyBiYXNlRm9yQWNjZXNzR1BSOworICAgICAgICBpZiAoIW1fY29uZGl0aW9u
U2V0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgaml0Lm1vdmUoCisgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGFsdGVybmF0ZUJhc2UoKSksCisgICAgICAgICAg
ICAgICAgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBiYXNlRm9yQWNjZXNzR1BSID0gc2NyYXRj
aEdQUjsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBiYXNlRm9yQWNjZXNzR1BSID0gYmFz
ZUZvckdldEdQUjsKKworICAgICAgICBHUFJSZWcgbG9hZGVkVmFsdWVHUFIgPSBJbnZhbGlkR1BS
UmVnOworICAgICAgICBpZiAobV90eXBlICE9IEN1c3RvbUdldHRlciAmJiBtX3R5cGUgIT0gQ3Vz
dG9tU2V0dGVyKSB7CisgICAgICAgICAgICBpZiAobV90eXBlID09IExvYWQpCisgICAgICAgICAg
ICAgICAgbG9hZGVkVmFsdWVHUFIgPSB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSID0gc2NyYXRjaEdQUjsKKwor
ICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFI7CisgICAgICAgICAgICBpZiAoaXNJbmxpbmVP
ZmZzZXQobV9vZmZzZXQpKQorICAgICAgICAgICAgICAgIHN0b3JhZ2VHUFIgPSBiYXNlRm9yQWNj
ZXNzR1BSOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIo
CisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlRm9yQWNjZXNz
R1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgICAgICBs
b2FkZWRWYWx1ZUdQUik7CisgICAgICAgICAgICAgICAgc3RvcmFnZUdQUiA9IGxvYWRlZFZhbHVl
R1BSOworICAgICAgICAgICAgfQorCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgIGpp
dC5sb2FkNjQoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0b3JhZ2VH
UFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKG1fb2Zmc2V0KSksIGxvYWRlZFZhbHVlR1BSKTsKKyNl
bHNlCisgICAgICAgICAgICBpZiAobV90eXBlID09IExvYWQpIHsKKyAgICAgICAgICAgICAgICBq
aXQubG9hZDMyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3Rv
cmFnZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2UobV9vZmZzZXQpICsgVGFnT2Zmc2V0KSwKKyAg
ICAgICAgICAgICAgICAgICAgdmFsdWVSZWdzLnRhZ0dQUigpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGppdC5sb2FkMzIoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKHN0b3JhZ2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKG1fb2Zmc2V0KSArIFBheWxvYWRP
ZmZzZXQpLAorICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSKTsKKyNlbmRpZgorICAgICAg
ICB9CisKKyAgICAgICAgLy8gU3R1ZmYgZm9yIGN1c3RvbSBnZXR0ZXJzLgorICAgICAgICBDQ2Fs
bEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9uQ2FsbDsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxs
IGhhbmRsZXJDYWxsOworCisgICAgICAgIC8vIFN0dWZmIGZvciBKUyBnZXR0ZXJzLgorICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkRhdGFMYWJlbFB0ciBhZGRyZXNzT2ZMaW5rRnVuY3Rpb25DaGVjazsK
KyAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGZhc3RQYXRoQ2FsbDsKKyAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpDYWxsIHNsb3dQYXRoQ2FsbDsKKworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAg
c3VjY2VzczsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGZhaWw7CisgICAgICAgIGlmICht
X3R5cGUgIT0gTG9hZCAmJiBtX3R5cGUgIT0gTWlzcykgeworICAgICAgICAgICAgLy8gTmVlZCB0
byBtYWtlIHN1cmUgdGhhdCB3aGVuZXZlciB0aGlzIGNhbGwgaXMgbWFkZSBpbiB0aGUgZnV0dXJl
LCB3ZSByZW1lbWJlciB0aGUKKyAgICAgICAgICAgIC8vIHBsYWNlIHRoYXQgd2UgbWFkZSBpdCBm
cm9tLgorICAgICAgICAgICAgaml0LnN0b3JlMzIoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoc3R1YkluZm8uY2FsbFNpdGVJbmRleC5iaXRzKCkpLAorICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rl
cj4oSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKKworICAgICAgICAgICAgaWYgKG1fdHlwZSA9
PSBHZXR0ZXIgfHwgbV90eXBlID09IFNldHRlcikgeworICAgICAgICAgICAgICAgIC8vIENyZWF0
ZSBhIEpTIGNhbGwgdXNpbmcgYSBKUyBjYWxsIGlubGluZSBjYWNoZS4gQXNzdW1lIHRoYXQ6Cisg
ICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAtIFNQIGlzIGFsaWduZWQgYW5k
IHJlcHJlc2VudHMgdGhlIGV4dGVudCBvZiB0aGUgY2FsbGluZyBjb21waWxlcidzIHN0YWNrIHVz
YWdlLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gLSBGUCBpcyBzZXQg
Y29ycmVjdGx5IChpLmUuIGl0IHBvaW50cyB0byB0aGUgY2FsbGVyJ3MgY2FsbCBmcmFtZSBoZWFk
ZXIpLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gLSBTUCAtIEZQIGlz
IGFuIGFsaWduZWQgZGlmZmVyZW5jZS4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAg
ICAgIC8vIC0gQW55IGJ5dGUgYmV0d2VlbiBGUCAoZXhjbHVzaXZlKSBhbmQgU1AgKGluY2x1c2l2
ZSkgY291bGQgYmUgbGl2ZSBpbiB0aGUgY2FsbGluZworICAgICAgICAgICAgICAgIC8vICAgY29k
ZS4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIFRoZXJlZm9yZSwgd2Ug
dGVtcG9yYXJpbHkgZ3JvdyB0aGUgc3RhY2sgZm9yIHRoZSBwdXJwb3NlIG9mIHRoZSBjYWxsIGFu
ZCB0aGVuCisgICAgICAgICAgICAgICAgLy8gc2hyaW5rIGl0IGFmdGVyLgorCisgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fcmFyZURhdGEtPmNhbGxMaW5rSW5mbyk7CisgICAgICAg
ICAgICAgICAgbV9yYXJlRGF0YS0+Y2FsbExpbmtJbmZvID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxs
TGlua0luZm8+KCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gRklYTUU6
IElmIHdlIGdlbmVyYXRlZCBhIHBvbHltb3JwaGljIGNhbGwgc3R1YiB0aGF0IGp1bXBlZCBiYWNr
IHRvIHRoZSBnZXR0ZXIKKyAgICAgICAgICAgICAgICAvLyBzdHViLCB3aGljaCB0aGVuIGp1bXBl
ZCBiYWNrIHRvIHRoZSBtYWluIGNvZGUsIHRoZW4gd2UnZCBoYXZlIGEgcmVhY2hhYmlsaXR5Cisg
ICAgICAgICAgICAgICAgLy8gc2l0dWF0aW9uIHRoYXQgdGhlIEdDIGRvZXNuJ3Qga25vdyBhYm91
dC4gVGhlIEdDIHdvdWxkIGVuc3VyZSB0aGF0IHRoZSBwb2x5bW9ycGhpYworICAgICAgICAgICAg
ICAgIC8vIGNhbGwgc3R1YiBzdGF5ZWQgYWxpdmUsIGFuZCBpdCB3b3VsZCBlbnN1cmUgdGhhdCB0
aGUgbWFpbiBjb2RlIHN0YXllZCBhbGl2ZSwgYnV0CisgICAgICAgICAgICAgICAgLy8gaXQgd291
bGRuJ3Qga25vdyB0aGF0IHRoZSBnZXR0ZXIgc3R1YiB3YXMgYWxpdmUuIElkZWFsbHkgSklUIHN0
dWIgcm91dGluZXMgd291bGQKKyAgICAgICAgICAgICAgICAvLyBiZSBHQyBvYmplY3RzLCBhbmQg
dGhlbiB3ZSdkIGJlIGFibGUgdG8gc2F5IHRoYXQgdGhlIHBvbHltb3JwaGljIGNhbGwgc3R1YiBo
YXMgYQorICAgICAgICAgICAgICAgIC8vIHJlZmVyZW5jZSB0byB0aGUgZ2V0dGVyIHN0dWIuCisg
ICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0ODkxNAorICAgICAgICAgICAgICAgIG1fcmFyZURhdGEtPmNhbGxMaW5rSW5mby0+ZGlzYWxs
b3dTdHVicygpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fcmFyZURhdGEt
PmNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKAorICAgICAgICAgICAgICAgICAgICBDYWxsTGlua0lu
Zm86OkNhbGwsIHN0dWJJbmZvLmNvZGVPcmlnaW4sIGxvYWRlZFZhbHVlR1BSKTsKKworICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKKworICAgICAgICAgICAgICAg
IC8vIFRoZXJlIGlzIGEgInRoaXMiIGFyZ3VtZW50LgorICAgICAgICAgICAgICAgIHVuc2lnbmVk
IG51bWJlck9mUGFyYW1ldGVycyA9IDE7CisgICAgICAgICAgICAgICAgLy8gLi4uIGFuZCBhIHZh
bHVlIGFyZ3VtZW50IGlmIHdlJ3JlIGNhbGxpbmcgYSBzZXR0ZXIuCisgICAgICAgICAgICAgICAg
aWYgKG1fdHlwZSA9PSBTZXR0ZXIpCisgICAgICAgICAgICAgICAgICAgIG51bWJlck9mUGFyYW1l
dGVycysrOworCisgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBhY2Nlc3NvcjsgaWYgdGhlcmUg
YWluJ3Qgb25lIHRoZW4gdGhlIHJlc3VsdCBpcyBqc1VuZGVmaW5lZCgpLgorICAgICAgICAgICAg
ICAgIGlmIChtX3R5cGUgPT0gU2V0dGVyKSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2Fk
UHRyKAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGxvYWRl
ZFZhbHVlR1BSLCBHZXR0ZXJTZXR0ZXI6Om9mZnNldE9mU2V0dGVyKCkpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKAorICAgICAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKGxvYWRlZFZhbHVlR1BSLCBHZXR0ZXJTZXR0ZXI6Om9mZnNl
dE9mR2V0dGVyKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIpOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBy
ZXR1cm5VbmRlZmluZWQgPSBqaXQuYnJhbmNoVGVzdFB0cigKKyAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpaZXJvLCBsb2FkZWRWYWx1ZUdQUik7CisKKyAgICAgICAgICAgICAgICB1
bnNpZ25lZCBudW1iZXJPZlJlZ3NGb3JDYWxsID0gSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6
ZSArIG51bWJlck9mUGFyYW1ldGVyczsKKworICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJl
ck9mQnl0ZXNGb3JDYWxsID0KKyAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZSZWdzRm9yQ2Fs
bCAqIHNpemVvZihSZWdpc3RlcikgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7CisKKyAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwgPQorICAgICAg
ICAgICAgICAgICAgICBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRl
cygpLCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCk7CisKKyAgICAgICAgICAgICAgICBqaXQuc3ViUHRy
KAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihhbGlnbmVk
TnVtYmVyT2ZCeXRlc0ZvckNhbGwpLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
QWRkcmVzcyBjYWxsZWVGcmFtZSA9IENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwKKyAgICAgICAgICAg
ICAgICAgICAgLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMp
KSk7CisKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMigKKyAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobnVtYmVyT2ZQYXJhbWV0ZXJzKSwKKyAgICAgICAg
ICAgICAgICAgICAgY2FsbGVlRnJhbWUud2l0aE9mZnNldChKU1N0YWNrOjpBcmd1bWVudENvdW50
ICogc2l6ZW9mKFJlZ2lzdGVyKSArIFBheWxvYWRPZmZzZXQpKTsKKworICAgICAgICAgICAgICAg
IGppdC5zdG9yZUNlbGwoCisgICAgICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSLCBjYWxs
ZWVGcmFtZS53aXRoT2Zmc2V0KEpTU3RhY2s6OkNhbGxlZSAqIHNpemVvZihSZWdpc3RlcikpKTsK
KworICAgICAgICAgICAgICAgIGppdC5zdG9yZUNlbGwoCisgICAgICAgICAgICAgICAgICAgIGJh
c2VGb3JHZXRHUFIsCisgICAgICAgICAgICAgICAgICAgIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQo
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIp
KSk7CisKKyAgICAgICAgICAgICAgICBpZiAobV90eXBlID09IFNldHRlcikgeworICAgICAgICAg
ICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVl
UmVncywKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSku
b2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHNsb3dDYXNlID0gaml0LmJyYW5jaFB0cldp
dGhQYXRjaCgKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgbG9h
ZGVkVmFsdWVHUFIsIGFkZHJlc3NPZkxpbmtGdW5jdGlvbkNoZWNrLAorICAgICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoMCkpOworCisgICAgICAgICAgICAgICAg
ZmFzdFBhdGhDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisKKyAgICAgICAgICAgICAgICBqaXQuYWRk
UHRyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihhbGln
bmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwpLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBpZiAobV90eXBlID09
IEdldHRlcikKKyAgICAgICAgICAgICAgICAgICAgaml0LnNldHVwUmVzdWx0cyh2YWx1ZVJlZ3Mp
OworCisgICAgICAgICAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgICAg
ICAgICAgc2xvd0Nhc2UubGluaygmaml0KTsKKworICAgICAgICAgICAgICAgIGppdC5tb3ZlKGxv
YWRlZFZhbHVlR1BSLCBHUFJJbmZvOjpyZWdUMCk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAg
ICAgICAgICAgICAgICAvLyBXZSAqYWx3YXlzKiBrbm93IHRoYXQgdGhlIGdldHRlci9zZXR0ZXIs
IGlmIG5vbi1udWxsLCBpcyBhIGNlbGwuCisgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIEdQUkluZm86OnJlZ1QxKTsK
KyNlbmRpZgorICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cihtX3JhcmVEYXRhLT5jYWxsTGlua0luZm8uZ2V0KCkpLCBHUFJJbmZvOjpyZWdUMik7Cisg
ICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisKKyAgICAgICAg
ICAgICAgICBqaXQuYWRkUHRyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwpLAorICAgICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAg
ICBpZiAobV90eXBlID09IEdldHRlcikKKyAgICAgICAgICAgICAgICAgICAgaml0LnNldHVwUmVz
dWx0cyh2YWx1ZVJlZ3MpOworCisgICAgICAgICAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAo
KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuVW5kZWZpbmVkLmxpbmsoJmppdCk7CisKKyAgICAg
ICAgICAgICAgICBpZiAobV90eXBlID09IEdldHRlcikKKyAgICAgICAgICAgICAgICAgICAgaml0
Lm1vdmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgdmFsdWVSZWdzKTsKKworICAgICAgICAg
ICAgICAgIGRvbmUubGluaygmaml0KTsKKworICAgICAgICAgICAgICAgIHN0YXRlLmNhbGxiYWNr
cy5hcHBlbmQoCisgICAgICAgICAgICAgICAgICAgIFs9LCAmdm1dIChMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3JhcmVEYXRhLT5jYWxsTGlua0lu
Zm8tPnNldENhbGxMb2NhdGlvbnMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1
ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoc2xvd1BhdGhDYWxsKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoYWRkcmVzc09mTGlua0Z1bmN0aW9uQ2hl
Y2spLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5l
YXJDYWxsKGZhc3RQYXRoQ2FsbCkpOworCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVm
ZmVyLmxpbmsoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdldENUSVN0dWIo
bGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBnZXR0ZXI6IEVuY29k
ZWRKU1ZhbHVlICgqR2V0VmFsdWVGdW5jKShFeGVjU3RhdGUqLCBKU09iamVjdCogc2xvdEJhc2Us
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgICAg
ICAvLyBzZXR0ZXI6IHZvaWQgKCpQdXRWYWx1ZUZ1bmMpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBi
YXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSk7Cisj
aWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgICAgICBpZiAobV90eXBlID09IEN1c3RvbUdl
dHRlcikgeworICAgICAgICAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgYmFzZUZvckFjY2Vzc0dQUiwgYmFzZUZvckdl
dEdQUiwKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihpZGVudC5pbXBsKCkpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlRm9yQWNjZXNzR1BSLCBi
YXNlRm9yR2V0R1BSLCB2YWx1ZVJlZ3MuZ3ByKCkpOworI2Vsc2UKKyAgICAgICAgICAgICAgICBp
ZiAobV90eXBlID09IEN1c3RvbUdldHRlcikgeworICAgICAgICAgICAgICAgICAgICBqaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgYmFzZUZv
ckFjY2Vzc0dQUiwgYmFzZUZvckdldEdQUiwKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGlkZW50LmltcGwoKSkpOworICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICBiYXNlRm9yQWNjZXNz
R1BSLCBiYXNlRm9yR2V0R1BSLAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksCisgICAgICAgICAgICAgICAgICAgICAg
ICB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB2YWx1ZVJlZ3MudGFnR1BSKCkpOworICAgICAgICAg
ICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgJnZtLnRvcENhbGxGcmFtZSk7CisKKyAgICAgICAgICAgICAgICBv
cGVyYXRpb25DYWxsID0gaml0LmNhbGwoKTsKKyAgICAgICAgICAgICAgICBpZiAobV90eXBlID09
IEN1c3RvbUdldHRlcikKKyAgICAgICAgICAgICAgICAgICAgaml0LnNldHVwUmVzdWx0cyh2YWx1
ZVJlZ3MpOworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBub0V4Y2VwdGlvbiA9
CisgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0RXhjZXB0aW9uQ2hlY2soQ0NhbGxIZWxwZXJz
OjpJbnZlcnRlZEV4Y2VwdGlvbkNoZWNrKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGppdC5zZXR1cEFyZ3VtZW50cyhDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnZtKSwgR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIGhhbmRsZXJDYWxsID0g
aml0LmNhbGwoKTsKKyAgICAgICAgICAgICAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigp
OworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbm9FeGNlcHRpb24ubGluaygmaml0KTsK
KworICAgICAgICAgICAgICAgIHN0YXRlLmNhbGxiYWNrcy5hcHBlbmQoCisgICAgICAgICAgICAg
ICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAg
ICAgICAgbGlua0J1ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIEZ1bmN0aW9uUHRyKG1fcmFyZURh
dGEtPmN1c3RvbUFjY2Vzc29yLm9wYXF1ZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgbGlu
a0J1ZmZlci5saW5rKGhhbmRsZXJDYWxsLCBsb29rdXBFeGNlcHRpb25IYW5kbGVyKTsKKyAgICAg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc3Rh
dGUuc3VjY2VlZCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2FzZSBSZXBsYWNl
OiB7CisgICAgICAgIGlmIChpc0lubGluZU9mZnNldChtX29mZnNldCkpIHsKKyAgICAgICAgICAg
IGppdC5zdG9yZVZhbHVlKAorICAgICAgICAgICAgICAgIHZhbHVlUmVncywKKyAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICAgICAgICAgIGJhc2VHUFIs
CisgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSAr
CisgICAgICAgICAgICAgICAgICAgIG9mZnNldEluSW5saW5lU3RvcmFnZShtX29mZnNldCkgKiBz
aXplb2YoSlNWYWx1ZSkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVZhbHVlKAorICAgICAg
ICAgICAgICAgIHZhbHVlUmVncywKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoCisgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIsIG9mZnNldEluQnV0dGVyZmx5KG1f
b2Zmc2V0KSAqIHNpemVvZihKU1ZhbHVlKSkpOworICAgICAgICB9CisgICAgICAgIHN0YXRlLnN1
Y2NlZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNhc2UgVHJhbnNpdGlvbjog
eworICAgICAgICAvLyBBY2Nlc3NDYXNlOjp0cmFuc2l0aW9uKCkgc2hvdWxkIGhhdmUgcmV0dXJu
ZWQgbnVsbC4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3Rl
cnMgPj0gNiB8fCAhc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgfHwgc3RydWN0dXJl
KCktPm91dE9mTGluZUNhcGFjaXR5KCkgPT0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCghc3RydWN0dXJlKCktPmNvdWxkSGF2ZUlu
ZGV4aW5nSGVhZGVyKCkpOworCisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1Bh
dGg7CisKKyAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcihzdHViSW5m
by5wYXRjaC51c2VkUmVnaXN0ZXJzKTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2soYmFzZUdQUik7
CisgICAgICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlUmVncyk7CisgICAgICAgIGFsbG9jYXRvci5s
b2NrKHNjcmF0Y2hHUFIpOworCisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMiA9IGFsbG9jYXRv
ci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIzOworICAg
ICAgICBpZiAobmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJl
KCktPm91dE9mTGluZUNhcGFjaXR5KCkKKyAgICAgICAgICAgICYmIHN0cnVjdHVyZSgpLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpKQorICAgICAgICAgICAgc2NyYXRjaEdQUjMgPSBhbGxvY2F0b3IuYWxs
b2NhdGVTY3JhdGNoR1BSKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIz
ID0gSW52YWxpZEdQUlJlZzsKKworICAgICAgICBzaXplX3QgbnVtYmVyT2ZQYWRkaW5nQnl0ZXMg
PSBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0KTsKKworICAg
ICAgICBBU1NFUlQoc3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbklu
dmFsaWRhdGVkKCkpOworCisgICAgICAgIGJvb2wgc2NyYXRjaEdQUkhhc1N0b3JhZ2UgPSBmYWxz
ZTsKKworICAgICAgICBpZiAobmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgIT0g
c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgICAgIHNpemVfdCBu
ZXdTaXplID0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNW
YWx1ZSk7CisgICAgICAgICAgICBDb3BpZWRBbGxvY2F0b3IqIGNvcGllZEFsbG9jYXRvciA9ICZ2
bS5oZWFwLnN0b3JhZ2VBbGxvY2F0b3IoKTsKKworICAgICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgeworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKCZj
b3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZywgc2NyYXRjaEdQUik7CisgICAgICAg
ICAgICAgICAgc2xvd1BhdGguYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICBqaXQuYnJhbmNo
U3ViUHRyKAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpTaWduZWQsIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BSKSk7CisgICAgICAg
ICAgICAgICAgaml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIsICZjb3BpZWRBbGxvY2F0b3ItPm1fY3Vy
cmVudFJlbWFpbmluZyk7CisgICAgICAgICAgICAgICAgaml0Lm5lZ1B0cihzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OkFic29sdXRlQWRkcmVzcygmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRQYXlsb2Fk
RW5kKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihzaXplb2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBzdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOworICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIzKTsKKyAgICAgICAgICAgICAgICBqaXQubG9h
ZFB0cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgaml0
LmJyYW5jaFN1YlB0cigKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6U2ln
bmVkLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRjaEdQUikpOwor
ICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCAmY29waWVkQWxsb2NhdG9y
LT5tX2N1cnJlbnRSZW1haW5pbmcpOworICAgICAgICAgICAgICAgIGppdC5uZWdQdHIoc2NyYXRj
aEdQUik7CisgICAgICAgICAgICAgICAgaml0LmFkZFB0cigKKyAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50
UGF5bG9hZEVuZCksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEpTVmFsdWUpKSwgc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBzY3JhdGNoR1BSID0gbmV3IHN0b3JhZ2UsIHNjcmF0
Y2hHUFIzID0gb2xkIHN0b3JhZ2UsCisgICAgICAgICAgICAgICAgLy8gc2NyYXRjaEdQUjIgPSBh
dmFpbGFibGUKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBvZmZzZXQgPSAwOyBvZmZzZXQg
PCBvbGRTaXplOyBvZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKSkgeworICAgICAgICAgICAgICAgICAg
ICBqaXQubG9hZFB0cigKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRk
cmVzcygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoR1BSMywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PigKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZv
aWQqKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgc2NyYXRjaEdQUjIpOworICAgICAgICAg
ICAgICAgICAgICBqaXQuc3RvcmVQdHIoCisgICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNo
R1BSMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoR1BSLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9mZnNldCArIHNpemVvZihKU1ZhbHVl
KSArIHNpemVvZih2b2lkKikpKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBqaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOworICAgICAgICAgICAg
c2NyYXRjaEdQUkhhc1N0b3JhZ2UgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgdWludDMy
X3Qgc3RydWN0dXJlQml0cyA9IGJpdHdpc2VfY2FzdDx1aW50MzJfdD4obmV3U3RydWN0dXJlKCkt
PmlkKCkpOworICAgICAgICBqaXQuc3RvcmUzMigKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKHN0cnVjdHVyZUJpdHMpLAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSkpOworCisgICAgICAg
IGlmIChpc0lubGluZU9mZnNldChtX29mZnNldCkpIHsKKyAgICAgICAgICAgIGppdC5zdG9yZVZh
bHVlKAorICAgICAgICAgICAgICAgIHZhbHVlUmVncywKKyAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICAgICAgICAgIGJhc2VHUFIsCisgICAgICAgICAg
ICAgICAgICAgIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArCisgICAgICAgICAg
ICAgICAgICAgIG9mZnNldEluSW5saW5lU3RvcmFnZShtX29mZnNldCkgKiBzaXplb2YoSlNWYWx1
ZSkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICghc2NyYXRjaEdQUkhhc1N0
b3JhZ2UpCisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAg
ICAgICAgICAgaml0LnN0b3JlVmFsdWUoCisgICAgICAgICAgICAgICAgdmFsdWVSZWdzLAorICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbkJ1
dHRlcmZseShtX29mZnNldCkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSBudWxscHRyOworICAgICAgICBpZiAo
bmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlKCktPm91dE9m
TGluZUNhcGFjaXR5KCkpCisgICAgICAgICAgICBzY3JhdGNoQnVmZmVyID0gdm0uc2NyYXRjaEJ1
ZmZlckZvclNpemUoYWxsb2NhdG9yLmRlc2lyZWRTY3JhdGNoQnVmZmVyU2l6ZUZvckNhbGwoKSk7
CisKKyNpZiBFTkFCTEUoR0dDKQorICAgICAgICBpZiAobmV3U3RydWN0dXJlKCktPm91dE9mTGlu
ZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKKyAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXI7Cisg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9
IGppdC5qdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihiYXNlR1BSKTsKKyAgICAgICAgICAgIFdy
aXRlQmFycmllckJ1ZmZlciYgd3JpdGVCYXJyaWVyQnVmZmVyID0gaml0LnZtKCktPmhlYXAud3Jp
dGVCYXJyaWVyQnVmZmVyKCk7CisgICAgICAgICAgICBqaXQubG9hZDMyKHdyaXRlQmFycmllckJ1
ZmZlci5jdXJyZW50SW5kZXhBZGRyZXNzKCksIHNjcmF0Y2hHUFIyKTsKKyAgICAgICAgICAgIEND
YWxsSGVscGVyczo6SnVtcCBuZWVkVG9GbHVzaCA9CisgICAgICAgICAgICAgICAgaml0LmJyYW5j
aDMyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgc2Ny
YXRjaEdQUjIsCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KHdyaXRlQmFycmllckJ1ZmZlci5jYXBhY2l0eSgpKSk7CisKKyAgICAgICAgICAgIGppdC5hZGQz
MihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaEdQUjIpOworICAgICAgICAg
ICAgaml0LnN0b3JlMzIoc2NyYXRjaEdQUjIsIHdyaXRlQmFycmllckJ1ZmZlci5jdXJyZW50SW5k
ZXhBZGRyZXNzKCkpOworCisgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIod3JpdGVCYXJyaWVyQnVmZmVyLmJ1ZmZlcigpKSwgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICAvLyBXZSB1c2UgYW4gb2Zmc2V0IG9mIC1zaXplb2Yodm9pZCopIGJlY2F1c2Ugd2Ug
YWxyZWFkeSBhZGRlZCAxIHRvIHNjcmF0Y2hHUFIyLgorICAgICAgICAgICAgaml0LnN0b3JlUHRy
KAorICAgICAgICAgICAgICAgIGJhc2VHUFIsCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpCYXNlSW5kZXgoCisgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIy
LCBDQ2FsbEhlbHBlcnM6OlNjYWxlUHRyLAorICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQzMl90Pigtc2l6ZW9mKHZvaWQqKSkpKTsKKworICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpKdW1wIGRvbmVXaXRoQmFycmllciA9IGppdC5qdW1wKCk7CisgICAgICAgICAgICBuZWVkVG9G
bHVzaC5saW5rKCZqaXQpOworCisgICAgICAgICAgICBhbGxvY2F0b3IucHJlc2VydmVVc2VkUmVn
aXN0ZXJzVG9TY3JhdGNoQnVmZmVyRm9yQ2FsbChqaXQsIHNjcmF0Y2hCdWZmZXIsIHNjcmF0Y2hH
UFIyKTsKKyAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUdQ
Uik7CisgICAgICAgICAgICBjYWxsRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIgPSBqaXQuY2FsbCgp
OworICAgICAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVVc2VkUmVnaXN0ZXJzRnJvbVNjcmF0Y2hC
dWZmZXJGb3JDYWxsKAorICAgICAgICAgICAgICAgIGppdCwgc2NyYXRjaEJ1ZmZlciwgc2NyYXRj
aEdQUjIpOworCisgICAgICAgICAgICBkb25lV2l0aEJhcnJpZXIubGluaygmaml0KTsKKyAgICAg
ICAgICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluaygmaml0KTsKKworICAgICAgICAg
ICAgc3RhdGUuY2FsbGJhY2tzLmFwcGVuZCgKKyAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZm
ZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNh
bGxGbHVzaFdyaXRlQmFycmllckJ1ZmZlciwgb3BlcmF0aW9uRmx1c2hXcml0ZUJhcnJpZXJCdWZm
ZXIpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisjZW5kaWYgLy8gRU5BQkxFKEdH
QykKKyAgICAgICAgCisgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKKworICAgICAgICBpZiAobmV3
U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlKCktPm91dE9mTGlu
ZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7CisgICAgICAg
ICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIG51bWJl
ck9mUGFkZGluZ0J5dGVzKTsKKyAgICAgICAgICAgIGFsbG9jYXRvci5wcmVzZXJ2ZVVzZWRSZWdp
c3RlcnNUb1NjcmF0Y2hCdWZmZXJGb3JDYWxsKGppdCwgc2NyYXRjaEJ1ZmZlciwgc2NyYXRjaEdQ
Uik7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoCisgICAgICAgICAgICAgICAgYmFzZUdQUiwKKyAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobmV3U3RydWN0dXJlKCkpLAorICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG1fb2Zmc2V0KSwKKyAgICAgICAgICAgICAg
ICB2YWx1ZVJlZ3MuZ3ByKCkpOworI2Vsc2UKKyAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoCisgICAgICAgICAgICAgICAgYmFzZUdQUiwKKyAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobmV3U3RydWN0dXJlKCkpLAorICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG1fb2Zmc2V0KSwKKyAgICAgICAgICAg
ICAgICB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB2YWx1ZVJlZ3MudGFnR1BSKCkpOworI2VuZGlm
CisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9uQ2FsbCA9IGppdC5jYWxs
KCk7CisgICAgICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVVzZWRSZWdpc3RlcnNGcm9tU2NyYXRj
aEJ1ZmZlckZvckNhbGwoaml0LCBzY3JhdGNoQnVmZmVyLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
ICAgIHN0YXRlLnN1Y2NlZWQoKTsKKworICAgICAgICAgICAgc3RhdGUuY2FsbGJhY2tzLmFwcGVu
ZCgKKyAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAg
ICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIG9wZXJhdGlvblJl
YWxsb2NhdGVTdG9yYWdlQW5kRmluaXNoUHV0KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2FzZSBBcnJheUxlbmd0aDogewor
ICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGppdC5sb2FkMzIo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zm
c2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQo
CisgICAgICAgICAgICBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpMZXNzVGhhbiwgc2NyYXRj
aEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgaml0LmJveElu
dDMyKHNjcmF0Y2hHUFIsIHZhbHVlUmVncyk7CisgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNhc2UgU3RyaW5nTGVuZ3RoOiB7CisgICAgICAg
IGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTU3RyaW5nOjpvZmZz
ZXRPZkxlbmd0aCgpKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSk7CisgICAgICAgIGppdC5ib3hJ
bnQzMih2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB2YWx1ZVJlZ3MpOworICAgICAgICBzdGF0ZS5z
dWNjZWVkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9IH0KICAgICAKLSAgICByZXR1cm4gcmVz
dWx0OworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLVBvbHltb3JwaGlj
R2V0QnlJZExpc3Q6On5Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0KCkgeyB9CitQb2x5bW9ycGhpY0Fj
Y2Vzczo6UG9seW1vcnBoaWNBY2Nlc3MoKSB7IH0KK1BvbHltb3JwaGljQWNjZXNzOjp+UG9seW1v
cnBoaWNBY2Nlc3MoKSB7IH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIFBvbHltb3JwaGljR2V0
QnlJZExpc3Q6OmN1cnJlbnRTbG93UGF0aFRhcmdldCgKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8pIGNvbnN0CitNYWNyb0Fzc2VtYmxlckNvZGVQdHIgUG9seW1vcnBoaWNBY2Nlc3M6
OnJlZ2VuZXJhdGVXaXRoQ2FzZXMoCisgICAgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwKKyAg
ICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+PiBvcmlnaW5hbENhc2VzVG9BZGQp
CiB7Ci0gICAgaWYgKGlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nh
c2UpOwotICAgIHJldHVybiBtX2xpc3QubGFzdCgpLnN0dWJSb3V0aW5lKCktPmNvZGUoKS5jb2Rl
KCk7CisgICAgLy8gVGhpcyBtZXRob2Qgd2lsbCBhZGQgdGhlIG9yaWdpbmFsQ2FzZXNUb0FkZCB0
byB0aGUgbGlzdCBvbmUgYXQgYSB0aW1lIHdoaWxlIHByZXNlcnZpbmcgdGhlCisgICAgLy8gaW52
YXJpYW50czoKKyAgICAvLyAtIElmIGEgbmV3bHkgYWRkZWQgY2FzZSBjYW5SZXBsYWNlKCkgYW55
IGV4aXN0aW5nIGNhc2UsIHRoZW4gdGhlIGV4aXN0aW5nIGNhc2UgaXMgcmVtb3ZlZCBiZWZvcmUK
KyAgICAvLyAgIHRoZSBuZXcgY2FzZSBpcyBhZGRlZC4gUmVtb3ZhbCBkb2Vzbid0IGNoYW5nZSBv
cmRlciBvZiB0aGUgbGlzdC4gQW55IG51bWJlciBvZiBleGlzdGluZyBjYXNlcworICAgIC8vICAg
Y2FuIGJlIHJlbW92ZWQgdmlhIHRoZSBjYW5SZXBsYWNlKCkgcnVsZS4KKyAgICAvLyAtIENhc2Vz
IGluIHRoZSBsaXN0IGFsd2F5cyBhcHBlYXIgaW4gYXNjZW5kaW5nIG9yZGVyIG9mIHRpbWUgb2Yg
YWRkaXRpb24uIFRoZXJlZm9yZSwgaWYgeW91CisgICAgLy8gICBjYXNjYWRlIHRocm91Z2ggdGhl
IGNhc2VzIGluIHJldmVyc2Ugb3JkZXIsIHlvdSB3aWxsIGdldCB0aGUgbW9zdCByZWNlbnQgY2Fz
ZXMgZmlyc3QuCisgICAgLy8gLSBJZiB0aGlzIG1ldGhvZCBmYWlscyAocmV0dXJucyBudWxsLCBk
b2Vzbid0IGFkZCB0aGUgY2FzZXMpLCB0aGVuIGJvdGggdGhlIHByZXZpb3VzIGNhc2UgbGlzdAor
ICAgIC8vICAgYW5kIHRoZSBwcmV2aW91cyBzdHViIGFyZSBrZXB0IGludGFjdCBhbmQgdGhlIG5l
dyBjYXNlcyBhcmUgZGVzdHJveWVkLiBJdCdzIE9LIHRvIGF0dGVtcHQgdG8KKyAgICAvLyAgIGFk
ZCBtb3JlIHRoaW5ncyBhZnRlciBmYWlsdXJlLgorICAgIAorICAgIC8vIEZpcnN0LCB2ZXJpZnkg
dGhhdCB3ZSBjYW4gZ2VuZXJhdGUgY29kZSBmb3IgYWxsIG9mIHRoZSBuZXcgY2FzZXMgd2hpbGUg
ZWxpbWluYXRpbmcgYW55IG9mIHRoZQorICAgIC8vIG5ldyBjYXNlcyB0aGF0IHJlcGxhY2UgZWFj
aCBvdGhlci4KKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+PiBjYXNlc1Rv
QWRkOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvcmlnaW5hbENhc2VzVG9BZGQuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IG15Q2FzZSA9
IFdURjo6bW92ZShvcmlnaW5hbENhc2VzVG9BZGRbaV0pOworCisgICAgICAgIC8vIEFkZCBpdCBv
bmx5IGlmIGl0IGlzIG5vdCByZXBsYWNlZCBieSB0aGUgc3Vic2VxdWVudCBjYXNlcyBpbiB0aGUg
bGlzdC4KKyAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGogPSBpICsgMTsgaiA8IG9yaWdpbmFsQ2FzZXNUb0FkZC5zaXplKCk7ICsraikgeworICAgICAg
ICAgICAgaWYgKG9yaWdpbmFsQ2FzZXNUb0FkZFtqXS0+Y2FuUmVwbGFjZSgqbXlDYXNlKSkgewor
ICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChmb3VuZCkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgaWYgKG15Q2FzZS0+ZG9lc0NhbGxzKCkgJiYg
c3R1YkluZm8ucGF0Y2guc3BpbGxNb2RlID09IE5lZWRUb1NwaWxsKQorICAgICAgICAgICAgcmV0
dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOworCisgICAgICAgIGNhc2VzVG9BZGQuYXBwZW5k
KFdURjo6bW92ZShteUNhc2UpKTsKKyAgICB9CisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ZGF0YUxvZygiY2FzZXNUb0FkZDogIiwgbGlzdER1bXAoY2FzZXNUb0FkZCksICJcbiIpOworCisg
ICAgLy8gSWYgdGhlcmUgYXJlbid0IGFueSBjYXNlcyB0byBhZGQsIHRoZW4gZmFpbCBvbiB0aGUg
Z3JvdW5kcyB0aGF0IHRoZXJlJ3Mgbm8gcG9pbnQgdG8gZ2VuZXJhdGluZyBhCisgICAgLy8gbmV3
IHN0dWIgdGhhdCB3aWxsIGJlIGlkZW50aWNhbCB0byB0aGUgb2xkIG9uZS4gUmV0dXJuaW5nIG51
bGwgc2hvdWxkIHRlbGwgdGhlIGNhbGxlciB0byBqdXN0CisgICAgLy8ga2VlcCBkb2luZyB3aGF0
IHRoZXkgd2VyZSBkb2luZyBiZWZvcmUuCisgICAgaWYgKGNhc2VzVG9BZGQuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7CisKKyAgICAvLyBOb3cgY29u
c3RydWN0IHRoZSBsaXN0IG9mIGNhc2VzIGFzIHRoZXkgc2hvdWxkIGFwcGVhciBpZiB3ZSBhcmUg
c3VjY2Vzc2Z1bC4gVGhpcyBtZWFucyBwdXR0aW5nCisgICAgLy8gYWxsIG9mIHRoZSBwcmV2aW91
cyBjYXNlcyBpbiB0aGlzIGxpc3QgaW4gb3JkZXIgYnV0IGV4Y2x1ZGluZyB0aG9zZSB0aGF0IGNh
biBiZSByZXBsYWNlZCwgYW5kCisgICAgLy8gdGhlbiBhZGRpbmcgdGhlIG5ldyBjYXNlcy4KKyAg
ICBMaXN0VHlwZSBuZXdDYXNlczsKKyAgICBmb3IgKGF1dG8mIG9sZENhc2UgOiBtX2xpc3QpIHsK
KyAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICBmb3IgKGF1dG8mIGNhc2VUb0Fk
ZCA6IGNhc2VzVG9BZGQpIHsKKyAgICAgICAgICAgIGlmIChjYXNlVG9BZGQtPmNhblJlcGxhY2Uo
Km9sZENhc2UpKSB7CisgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghZm91bmQp
CisgICAgICAgICAgICBuZXdDYXNlcy5hcHBlbmQob2xkQ2FzZS0+Y2xvbmUoKSk7CisgICAgfQor
ICAgIGZvciAoYXV0byYgY2FzZVRvQWRkIDogY2FzZXNUb0FkZCkKKyAgICAgICAgbmV3Q2FzZXMu
YXBwZW5kKFdURjo6bW92ZShjYXNlVG9BZGQpKTsKKworICAgIGlmICh2ZXJib3NlKQorICAgICAg
ICBkYXRhTG9nKCJuZXdDYXNlczogIiwgbGlzdER1bXAobmV3Q2FzZXMpLCAiXG4iKTsKKworICAg
IGlmIChuZXdDYXNlcy5zaXplKCkgPiBPcHRpb25zOjptYXhBY2Nlc3NWYXJpYW50TGlzdFNpemUo
KSkgeworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIlRvbyBtYW55
IGNhc2VzLlxuIik7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKKyAg
ICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVzdWx0ID0gcmVnZW5lcmF0ZSh2bSwg
Y29kZUJsb2NrLCBzdHViSW5mbywgaWRlbnQsIG5ld0Nhc2VzKTsKKyAgICBpZiAoIXJlc3VsdCkK
KyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOworCisgICAgbV9saXN0ID0g
V1RGOjptb3ZlKG5ld0Nhc2VzKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFBvbHlt
b3JwaGljR2V0QnlJZExpc3Q6OmFkZEFjY2Vzcyhjb25zdCBHZXRCeUlkQWNjZXNzJiBhY2Nlc3Mp
CitNYWNyb0Fzc2VtYmxlckNvZGVQdHIgUG9seW1vcnBoaWNBY2Nlc3M6OnJlZ2VuZXJhdGVXaXRo
Q2FzZSgKKyAgICBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8sIGNvbnN0IElkZW50aWZpZXImIGlkZW50LAorICAgIHN0ZDo6dW5pcXVlX3B0
cjxBY2Nlc3NDYXNlPiBuZXdBY2Nlc3MpCiB7Ci0gICAgQVNTRVJUKCFpc0Z1bGwoKSk7Ci0gICAg
Ly8gTWFrZSBzdXJlIHRoYXQgdGhlIHJlc2l6aW5nIG9wdGltaXplcyBmb3Igc3BhY2UsIG5vdCB0
aW1lLgotICAgIG1fbGlzdC5yZXNpemVUb0ZpdChtX2xpc3Quc2l6ZSgpICsgMSk7Ci0gICAgbV9s
aXN0Lmxhc3QoKSA9IGFjY2VzczsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nh
c2U+PiBuZXdBY2Nlc3NlczsKKyAgICBuZXdBY2Nlc3Nlcy5hcHBlbmQoV1RGOjptb3ZlKG5ld0Fj
Y2VzcykpOworICAgIHJldHVybiByZWdlbmVyYXRlV2l0aENhc2VzKHZtLCBjb2RlQmxvY2ssIHN0
dWJJbmZvLCBpZGVudCwgV1RGOjptb3ZlKG5ld0FjY2Vzc2VzKSk7CiB9CiAKLWJvb2wgUG9seW1v
cnBoaWNHZXRCeUlkTGlzdDo6aXNGdWxsKCkgY29uc3QKK2Jvb2wgUG9seW1vcnBoaWNBY2Nlc3M6
OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0CiB7Ci0gICAgQVNTRVJUKHNpemUoKSA8PSBQT0xZTU9S
UEhJQ19MSVNUX0NBQ0hFX1NJWkUpOwotICAgIHJldHVybiBzaXplKCkgPT0gUE9MWU1PUlBISUNf
TElTVF9DQUNIRV9TSVpFOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplKCk7ICsr
aSkgeworICAgICAgICBpZiAoIWF0KGkpLnZpc2l0V2Vhayh2bSkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFBvbHltb3JwaGlj
R2V0QnlJZExpc3Q6OmlzQWxtb3N0RnVsbCgpIGNvbnN0Cit2b2lkIFBvbHltb3JwaGljQWNjZXNz
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKHNpemUoKSA8PSBQ
T0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpOwotICAgIHJldHVybiBzaXplKCkgPj0gUE9MWU1P
UlBISUNfTElTVF9DQUNIRV9TSVpFIC0gMTsKKyAgICBvdXQucHJpbnQoUmF3UG9pbnRlcih0aGlz
KSwgIjpbIik7CisgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgIGZvciAoYXV0byYgZW50cnkg
OiBtX2xpc3QpCisgICAgICAgIG91dC5wcmludChjb21tYSwgKmVudHJ5KTsKKyAgICBvdXQucHJp
bnQoIl0iKTsKIH0KIAotYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpkaWRTZWxmUGF0Y2hp
bmcoKSBjb25zdAorTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIFBvbHltb3JwaGljQWNjZXNzOjpyZWdl
bmVyYXRlKAorICAgIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbywgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsCisgICAgUG9seW1vcnBoaWNB
Y2Nlc3M6Okxpc3RUeXBlJiBjYXNlcykKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXplKCk7
IGktLTspIHsKLSAgICAgICAgaWYgKGF0KGkpLnR5cGUoKSA9PSBHZXRCeUlkQWNjZXNzOjpTaW1w
bGVJbmxpbmUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAodmVyYm9zZSkKKyAg
ICAgICAgZGF0YUxvZygiR2VuZXJhdGluZyBjb2RlIGZvciBjYXNlczogIiwgbGlzdER1bXAoY2Fz
ZXMpLCAiXG4iKTsKKyAgICAKKyAgICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUgc3RhdGU7CisKKyAg
ICBzdGF0ZS5hY2Nlc3MgPSB0aGlzOworICAgIHN0YXRlLnN0dWJJbmZvID0gJnN0dWJJbmZvOwor
ICAgIHN0YXRlLmlkZW50ID0gJmlkZW50OworICAgIAorICAgIHN0YXRlLmJhc2VHUFIgPSBzdGF0
aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmJhc2VHUFIpOworICAgIHN0YXRlLnZhbHVl
UmVncyA9IEpTVmFsdWVSZWdzKAorI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIHN0YXRp
Y19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVUYWdHUFIpLAorI2VuZGlmCisgICAg
ICAgIHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVHUFIpKTsKKworICAg
IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1YkluZm8ucGF0Y2gudXNlZFJl
Z2lzdGVycyk7CisgICAgc3RhdGUuYWxsb2NhdG9yID0gJmFsbG9jYXRvcjsKKyAgICBhbGxvY2F0
b3IubG9jayhzdGF0ZS5iYXNlR1BSKTsKKyAgICBhbGxvY2F0b3IubG9jayhzdGF0ZS52YWx1ZVJl
Z3MpOworCisgICAgc3RhdGUuc2NyYXRjaEdQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hH
UFIoKTsKKyAgICAKKyAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSwgY29kZUJsb2NrKTsKKyAgICBz
dGF0ZS5qaXQgPSAmaml0OworCisgICAgc3RhdGUubnVtYmVyT2ZQYWRkaW5nQnl0ZXMgPSBhbGxv
Y2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0KTsKKworICAgIGJvb2wg
YWxsR3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2sgPSB0cnVlOworICAgIGZvciAoYXV0byYgZW50cnkg
OiBjYXNlcykKKyAgICAgICAgYWxsR3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2sgJj0gZW50cnktPmd1
YXJkZWRCeVN0cnVjdHVyZUNoZWNrKCk7CisKKyAgICBpZiAoY2FzZXMuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIC8vIFRoaXMgaXMgc3VwZXIgdW5saWtlbHksIGJ1dCB3ZSBtYWtlIGl0IGxlZ2FsIGFu
eXdheS4KKyAgICAgICAgc3RhdGUuZmFpbEFuZFJlcGF0Y2guYXBwZW5kKGppdC5qdW1wKCkpOwor
ICAgIH0gZWxzZSBpZiAoIWFsbEd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrIHx8IGNhc2VzLnNpemUo
KSA9PSAxKSB7CisgICAgICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgcHJveGllcyBpbiB0aGUgbGlz
dCwgd2UgY2Fubm90IGp1c3QgdXNlIGEgYmluYXJ5IHN3aXRjaCBvdmVyIHRoZSBzdHJ1Y3R1cmUu
CisgICAgICAgIC8vIFdlIG5lZWQgdG8gcmVzb3J0IHRvIGEgY2FzY2FkZS4gQSBjYXNjYWRlIGFs
c28gaGFwcGVucyB0byBiZSBvcHRpbWFsIGlmIHdlIG9ubHkgaGF2ZSBqdXN0CisgICAgICAgIC8v
IG9uZSBjYXNlLgorICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGZhbGxUaHJvdWdoOwor
CisgICAgICAgIC8vIENhc2NhZGUgdGhyb3VnaCB0aGUgbGlzdCwgcHJlZmVycmluZyBuZXdlciBl
bnRyaWVzLgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjYXNlcy5zaXplKCk7IGktLTspIHsK
KyAgICAgICAgICAgIGZhbGxUaHJvdWdoLmxpbmsoJmppdCk7CisgICAgICAgICAgICBjYXNlc1tp
XS0+Z2VuZXJhdGVXaXRoR3VhcmQoc3RhdGUsIGZhbGxUaHJvdWdoKTsKKyAgICAgICAgfQorICAg
ICAgICBzdGF0ZS5mYWlsQW5kUmVwYXRjaC5hcHBlbmQoZmFsbFRocm91Z2gpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGppdC5sb2FkMzIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3Moc3RhdGUuYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAgICAg
ICAgIHN0YXRlLnNjcmF0Y2hHUFIpOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPGludDY0X3Q+
IGNhc2VWYWx1ZXMoY2FzZXMuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGNhc2VzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgY2FzZVZhbHVlc1tpXSA9IGJpdHdp
c2VfY2FzdDxpbnQzMl90PihjYXNlc1tpXS0+c3RydWN0dXJlKCktPmlkKCkpOworICAgICAgICAK
KyAgICAgICAgQmluYXJ5U3dpdGNoIGJpbmFyeVN3aXRjaChzdGF0ZS5zY3JhdGNoR1BSLCBjYXNl
VmFsdWVzLCBCaW5hcnlTd2l0Y2g6OkludDMyKTsKKyAgICAgICAgd2hpbGUgKGJpbmFyeVN3aXRj
aC5hZHZhbmNlKGppdCkpCisgICAgICAgICAgICBjYXNlc1tiaW5hcnlTd2l0Y2guY2FzZUluZGV4
KCldLT5nZW5lcmF0ZShzdGF0ZSk7CisgICAgICAgIHN0YXRlLmZhaWxBbmRSZXBhdGNoLmFwcGVu
ZChiaW5hcnlTd2l0Y2guZmFsbFRocm91Z2goKSk7CisgICAgfQorCisgICAgc3RhdGUuZmFpbEFu
ZElnbm9yZS5saW5rKCZqaXQpOworCisgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGlubGluZSBj
YWNoZSBvcHRpbWl6YXRpb24gY29kZSBrbm93cyB0aGF0IHdlIGFyZSB0YWtpbmcgc2xvdyBwYXRo
IGJlY2F1c2UKKyAgICAvLyBvZiBzb21ldGhpbmcgdGhhdCBpc24ndCBwYXRjaGFibGUuICJzZWVu
IiBiZWluZyBmYWxzZSBtZWFucyB0aGF0IHdlIGJ5cGFzcyBwYXRjaGluZy4gVGhpcyBpcworICAg
IC8vIHByZXR0eSBncm9zcyBidXQgaXQgbWVhbnMgdGhhdCB3ZSBkb24ndCBuZWVkIHRvIGhhdmUg
dHdvIHNsb3cgcGF0aCBlbnRyeXBvaW50cyAtIG9uZSBmb3IKKyAgICAvLyBwYXRjaGluZyBhbmQg
b25lIGZvciBub3JtYWwgc2xvdyBzdHVmZi4KKyAgICBqaXQuc3RvcmU4KENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKGZhbHNlKSwgJnN0dWJJbmZvLnNlZW4pOworCisgICAgQ0NhbGxIZWxwZXJz
OjpKdW1wTGlzdCBmYWlsdXJlOworICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMo
KSkgeworICAgICAgICBzdGF0ZS5mYWlsQW5kUmVwYXRjaC5saW5rKCZqaXQpOworICAgICAgICBz
dGF0ZS5yZXN0b3JlU2NyYXRjaCgpOworICAgIH0gZWxzZQorICAgICAgICBmYWlsdXJlID0gc3Rh
dGUuZmFpbEFuZFJlcGF0Y2g7CisgICAgZmFpbHVyZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisKKyAg
ICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIodm0sIGppdCwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlv
bkNhbkZhaWwpOworICAgIGlmIChsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpIHsKKyAg
ICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCJEaWQgZmFpbCB0byBhbGxv
Y2F0ZS5cbiIpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7CiAgICAg
fQotICAgIHJldHVybiBmYWxzZTsKKworICAgIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJl
bCA9CisgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0
dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSk7CisgICAgICAgIAorICAgIGxpbmtCdWZmZXIu
bGluayhzdGF0ZS5zdWNjZXNzLCBzdWNjZXNzTGFiZWwpOworCisgICAgbGlua0J1ZmZlci5saW5r
KAorICAgICAgICBmYWlsdXJlLAorICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
bGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7CisgICAg
CisgICAgZm9yIChhdXRvIGNhbGxiYWNrIDogc3RhdGUuY2FsbGJhY2tzKQorICAgICAgICBjYWxs
YmFjayhsaW5rQnVmZmVyKTsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZSA9
IEZJTkFMSVpFX0NPREVfRk9SKAorICAgICAgICBjb2RlQmxvY2ssIGxpbmtCdWZmZXIsCisgICAg
ICAgICgiJXMiLCB0b0NTdHJpbmcoIkFjY2VzcyBzdHViIGZvciAiLCAqY29kZUJsb2NrLCAiICIs
IHN0dWJJbmZvLmNvZGVPcmlnaW4sICIgd2l0aCByZXR1cm4gcG9pbnQgIiwgc3VjY2Vzc0xhYmVs
LCAiOiAiLCBsaXN0RHVtcChjYXNlcykpLmRhdGEoKSkpOworCisgICAgYm9vbCBkb2VzQ2FsbHMg
PSBmYWxzZTsKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogY2FzZXMpCisgICAgICAgIGRvZXNDYWxs
cyB8PSBlbnRyeS0+ZG9lc0NhbGxzKCk7CisgICAgCisgICAgbV9zdHViUm91dGluZSA9IGNyZWF0
ZUpJVFN0dWJSb3V0aW5lKGNvZGUsIHZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBk
b2VzQ2FsbHMpOworICAgIG1fd2F0Y2hwb2ludHMgPSBXVEY6Om1vdmUoc3RhdGUud2F0Y2hwb2lu
dHMpOworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJSZXR1cm5pbmc6ICIsIGNv
ZGUuY29kZSgpLCAiXG4iKTsKKyAgICByZXR1cm4gY29kZS5jb2RlKCk7CiB9CiAKLWJvb2wgUG9s
eW1vcnBoaWNHZXRCeUlkTGlzdDo6dmlzaXRXZWFrKFZNJiB2bSkgY29uc3QKK30gLy8gbmFtZXNw
YWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKwordm9p
ZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEFjY2Vzc0Nhc2U6OkFjY2Vzc1R5cGUg
dHlwZSkKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXplKCk7IGktLTspIHsKLSAgICAgICAg
aWYgKCFhdChpKS52aXNpdFdlYWsodm0pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgQWNjZXNzQ2FzZTo6TG9hZDoKKyAgICAgICAgb3V0
LnByaW50KCJMb2FkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OlRy
YW5zaXRpb246CisgICAgICAgIG91dC5wcmludCgiVHJhbnNpdGlvbiIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpSZXBsYWNlOgorICAgICAgICBvdXQucHJpbnQoIlJl
cGxhY2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6TWlzczoKKyAg
ICAgICAgb3V0LnByaW50KCJNaXNzIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vz
c0Nhc2U6OkdldHRlcjoKKyAgICAgICAgb3V0LnByaW50KCJHZXR0ZXIiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6U2V0dGVyOgorICAgICAgICBvdXQucHJpbnQoIlNl
dHRlciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpDdXN0b21HZXR0
ZXI6CisgICAgICAgIG91dC5wcmludCgiQ3VzdG9tR2V0dGVyIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkN1c3RvbVNldHRlcjoKKyAgICAgICAgb3V0LnByaW50KCJD
dXN0b21TZXR0ZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5I
aXQ6CisgICAgICAgIG91dC5wcmludCgiSW5IaXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgQWNjZXNzQ2FzZTo6SW5NaXNzOgorICAgICAgICBvdXQucHJpbnQoIkluTWlzcyIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpBcnJheUxlbmd0aDoKKyAgICAgICAg
b3V0LnByaW50KCJBcnJheUxlbmd0aCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nl
c3NDYXNlOjpTdHJpbmdMZW5ndGg6CisgICAgICAgIG91dC5wcmludCgiU3RyaW5nTGVuZ3RoIik7
CisgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgcmV0dXJuIHRydWU7CisKKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi19IC8vIG5hbWVzcGFjZSBKU0MKK30gLy8gbmFt
ZXNwYWNlIFdURgogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgJKHJldmlzaW9u
IDE4OTMyNCkJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGlj
R2V0QnlJZExpc3QuaDoxODkzMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seW1vcnBoaWNBY2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IFBvbHltb3JwaGljR2V0QnlJZExpc3RfaAorI2RlZmluZSBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0
X2gKKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCisjaW5jbHVk
ZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dC5oIgorI2luY2x1ZGUgIk9wY29kZS5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVCbG9jazsK
K3N0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbzsKKworY2xhc3MgR2V0QnlJZEFjY2VzcyB7CitwdWJs
aWM6CisgICAgZW51bSBBY2Nlc3NUeXBlIHsKKyAgICAgICAgSW52YWxpZCwKKyAgICAgICAgU2lt
cGxlSW5saW5lLCAvLyBUaGlzIGlzIHRoZSBwYXRjaGVkIGlubGluZSBhY2Nlc3MuCisgICAgICAg
IFNpbXBsZVN0dWIsIC8vIFRoaXMgaXMgYSBzdHViLgorICAgICAgICBXYXRjaGVkU3R1YiwKKyAg
ICAgICAgR2V0dGVyLAorICAgICAgICBDdXN0b21HZXR0ZXIsCisgICAgICAgIFNpbXBsZU1pc3Ms
CisgICAgfTsKKyAgICAKKyAgICBHZXRCeUlkQWNjZXNzKCkKKyAgICAgICAgOiBtX3R5cGUoSW52
YWxpZCkKKyAgICB7CisgICAgfQorICAgIAorICAgIEdldEJ5SWRBY2Nlc3MoCisgICAgICAgIFZN
JiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4s
IFN0cnVjdHVyZSosCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiA9
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCkpOworICAgIAorICAgIH5HZXRCeUlkQWNjZXNz
KCk7CisgICAgCisgICAgc3RhdGljIEdldEJ5SWRBY2Nlc3MgZnJvbVN0cnVjdHVyZVN0dWJJbmZv
KFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAgCisgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0
dXJuIG1fdHlwZSAhPSBJbnZhbGlkOyB9CisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJl
dHVybiAhaXNTZXQoKTsgfQorICAgIAorICAgIEFjY2Vzc1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdHlwZTsgfQorICAgIAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7IH0KKyAgICAKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25T
ZXQ7IH0KKyAgICAKKyAgICBKSVRTdHViUm91dGluZSogc3R1YlJvdXRpbmUoKSBjb25zdAorICAg
IHsKKyAgICAgICAgQVNTRVJUKGlzU2V0KCkpOworICAgICAgICByZXR1cm4gbV9zdHViUm91dGlu
ZS5nZXQoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBkb2VzQ2FsbHMoKSBjb25zdCB7IHJldHVy
biB0eXBlKCkgPT0gR2V0dGVyIHx8IHR5cGUoKSA9PSBDdXN0b21HZXR0ZXI7IH0KKyAgICAKKyAg
ICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFz
cyBDb2RlQmxvY2s7CisgICAgCisgICAgQWNjZXNzVHlwZSBtX3R5cGU7CisgICAgV3JpdGVCYXJy
aWVyPFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgbV9jb25kaXRpb25TZXQ7CisgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBtX3N0dWJSb3V0
aW5lOworfTsKKworY2xhc3MgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCB7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgLy8gRWl0aGVyIGNyZWF0ZXMgYSBuZXcgcG9s
eW1vcnBoaWMgZ2V0IGxpc3QsIG9yIHJldHVybnMgdGhlIG9uZSB0aGF0IGlzIGFscmVhZHkgaW4K
KyAgICAvLyBwbGFjZS4KKyAgICBzdGF0aWMgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogZnJvbShT
dHJ1Y3R1cmVTdHViSW5mbyYpOworICAgIAorICAgIH5Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0KCk7
CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN1cnJlbnRTbG93UGF0aFRhcmdldChT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pIGNvbnN0OworICAgIAorICAgIHZvaWQgYWRkQWNj
ZXNzKGNvbnN0IEdldEJ5SWRBY2Nlc3MmKTsKKyAgICAKKyAgICBib29sIGlzRW1wdHkoKSBjb25z
dCB7IHJldHVybiBtX2xpc3QuaXNFbXB0eSgpOyB9CisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbGlzdC5zaXplKCk7IH0KKyAgICBib29sIGlzRnVsbCgpIGNvbnN0OworICAg
IGJvb2wgaXNBbG1vc3RGdWxsKCkgY29uc3Q7IC8vIFRydWUgaWYgYWRkaW5nIGFuIGVsZW1lbnQg
d291bGQgbWFrZSBpc0Z1bGwoKSB0cnVlLgorICAgIGNvbnN0IEdldEJ5SWRBY2Nlc3MmIGF0KHVu
c2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdFtpXTsgfQorICAgIGNvbnN0IEdldEJ5SWRB
Y2Nlc3MmIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9saXN0W2ldOyB9
CisgICAgCisgICAgYm9vbCBkaWRTZWxmUGF0Y2hpbmcoKSBjb25zdDsgLy8gQXJlIGFueSBvZiB0
aGUgYWNjZXNzZXMgU2ltcGxlSW5saW5lPworICAgIAorICAgIGJvb2wgdmlzaXRXZWFrKFZNJikg
Y29uc3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKKyAgICAKKyAg
ICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAgCisgICAg
VmVjdG9yPEdldEJ5SWRBY2Nlc3MsIDI+IG1fbGlzdDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKworI2VuZGlmIC8vIFBvbHltb3JwaGljR2V0QnlJ
ZExpc3RfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBo
aWNBY2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seW1vcnBoaWNBY2Nlc3MuaAkod29ya2luZyBjb3B5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDgg
KzIzLDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgUG9seW1vcnBoaWNHZXRC
eUlkTGlzdF9oCi0jZGVmaW5lIFBvbHltb3JwaGljR2V0QnlJZExpc3RfaAorI2lmbmRlZiBQb2x5
bW9ycGhpY0FjY2Vzc19oCisjZGVmaW5lIFBvbHltb3JwaGljQWNjZXNzX2gKIAogI2lmIEVOQUJM
RShKSVQpCiAKQEAgLTM4LDk2ICszOCwyODAgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBD
b2RlQmxvY2s7CitjbGFzcyBQb2x5bW9ycGhpY0FjY2VzczsKK2NsYXNzIFdhdGNocG9pbnRzT25T
dHJ1Y3R1cmVTdHViSW5mbzsKIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbzsKIAotY2xhc3MgR2V0
QnlJZEFjY2VzcyB7CitzdHJ1Y3QgQWNjZXNzR2VuZXJhdGlvblN0YXRlOworCitjbGFzcyBBY2Nl
c3NDYXNlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBY2Nlc3NDYXNlKTsKKyAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBlbnVtIEFjY2Vzc1R5cGUgewotICAg
ICAgICBJbnZhbGlkLAotICAgICAgICBTaW1wbGVJbmxpbmUsIC8vIFRoaXMgaXMgdGhlIHBhdGNo
ZWQgaW5saW5lIGFjY2Vzcy4KLSAgICAgICAgU2ltcGxlU3R1YiwgLy8gVGhpcyBpcyBhIHN0dWIu
Ci0gICAgICAgIFdhdGNoZWRTdHViLAorICAgICAgICBMb2FkLAorICAgICAgICBUcmFuc2l0aW9u
LAorICAgICAgICBSZXBsYWNlLAorICAgICAgICBNaXNzLAogICAgICAgICBHZXR0ZXIsCisgICAg
ICAgIFNldHRlciwKICAgICAgICAgQ3VzdG9tR2V0dGVyLAotICAgICAgICBTaW1wbGVNaXNzLAor
ICAgICAgICBDdXN0b21TZXR0ZXIsCisgICAgICAgIEluSGl0LAorICAgICAgICBJbk1pc3MsCisg
ICAgICAgIEFycmF5TGVuZ3RoLAorICAgICAgICBTdHJpbmdMZW5ndGgKICAgICB9OwotICAgIAot
ICAgIEdldEJ5SWRBY2Nlc3MoKQotICAgICAgICA6IG1fdHlwZShJbnZhbGlkKQorCisgICAgc3Rh
dGljIGJvb2wgaXNHZXQoQWNjZXNzVHlwZSB0eXBlKQogICAgIHsKKyAgICAgICAgc3dpdGNoICh0
eXBlKSB7CisgICAgICAgIGNhc2UgVHJhbnNpdGlvbjoKKyAgICAgICAgY2FzZSBSZXBsYWNlOgor
ICAgICAgICBjYXNlIFNldHRlcjoKKyAgICAgICAgY2FzZSBDdXN0b21TZXR0ZXI6CisgICAgICAg
IGNhc2UgSW5IaXQ6CisgICAgICAgIGNhc2UgSW5NaXNzOgorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBjYXNlIExvYWQ6CisgICAgICAgIGNhc2UgTWlzczoKKyAgICAgICAgY2Fz
ZSBHZXR0ZXI6CisgICAgICAgIGNhc2UgQ3VzdG9tR2V0dGVyOgorICAgICAgICBjYXNlIEFycmF5
TGVuZ3RoOgorICAgICAgICBjYXNlIFN0cmluZ0xlbmd0aDoKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CiAgICAgfQotICAgIAotICAgIEdldEJ5SWRBY2Nlc3MoCi0gICAgICAg
IFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGlu
ZT4sIFN0cnVjdHVyZSosCisKKyAgICBzdGF0aWMgYm9vbCBpc1B1dChBY2Nlc3NUeXBlIHR5cGUp
CisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBMb2FkOgorICAg
ICAgICBjYXNlIE1pc3M6CisgICAgICAgIGNhc2UgR2V0dGVyOgorICAgICAgICBjYXNlIEN1c3Rv
bUdldHRlcjoKKyAgICAgICAgY2FzZSBJbkhpdDoKKyAgICAgICAgY2FzZSBJbk1pc3M6CisgICAg
ICAgIGNhc2UgQXJyYXlMZW5ndGg6CisgICAgICAgIGNhc2UgU3RyaW5nTGVuZ3RoOgorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIFRyYW5zaXRpb246CisgICAgICAgIGNh
c2UgUmVwbGFjZToKKyAgICAgICAgY2FzZSBTZXR0ZXI6CisgICAgICAgIGNhc2UgQ3VzdG9tU2V0
dGVyOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBz
dGF0aWMgYm9vbCBpc0luKEFjY2Vzc1R5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
dHlwZSkgeworICAgICAgICBjYXNlIExvYWQ6CisgICAgICAgIGNhc2UgTWlzczoKKyAgICAgICAg
Y2FzZSBHZXR0ZXI6CisgICAgICAgIGNhc2UgQ3VzdG9tR2V0dGVyOgorICAgICAgICBjYXNlIFRy
YW5zaXRpb246CisgICAgICAgIGNhc2UgUmVwbGFjZToKKyAgICAgICAgY2FzZSBTZXR0ZXI6Cisg
ICAgICAgIGNhc2UgQ3VzdG9tU2V0dGVyOgorICAgICAgICBjYXNlIEFycmF5TGVuZ3RoOgorICAg
ICAgICBjYXNlIFN0cmluZ0xlbmd0aDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgY2FzZSBJbkhpdDoKKyAgICAgICAgY2FzZSBJbk1pc3M6CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNj
ZXNzQ2FzZT4gZ2V0KAorICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUsIFBy
b3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmUqLAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpLAorICAgICAgICBib29s
IHZpYVByb3h5ID0gZmFsc2UsCisgICAgICAgIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQg
PSBudWxscHRyLAorICAgICAgICBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYyA9IG51bGxwdHIs
CisgICAgICAgIEpTT2JqZWN0KiBjdXN0b21TbG90QmFzZSA9IG51bGxwdHIpOworCisgICAgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXBsYWNlKFZNJiwgSlNDZWxsKiBvd25l
ciwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQpOworCisgICAgc3RhdGljIHN0ZDo6dW5pcXVl
X3B0cjxBY2Nlc3NDYXNlPiB0cmFuc2l0aW9uKAorICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIs
IFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwgUHJvcGVy
dHlPZmZzZXQsCiAgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiA9IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCkpOworCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0
cjxBY2Nlc3NDYXNlPiBzZXR0ZXIoCisgICAgICAgIFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNz
VHlwZSwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQsCisgICAgICAgIGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0JiwgUHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmMgPSBudWxs
cHRyLAorICAgICAgICBKU09iamVjdCogY3VzdG9tU2xvdEJhc2UgPSBudWxscHRyKTsKKworICAg
IHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gaW4oCisgICAgICAgIFZNJiwgSlND
ZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgU3RydWN0dXJlKiwKKyAgICAgICAgY29uc3QgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSk7CisK
KyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGdldExlbmd0aChWTSYsIEpT
Q2VsbCogb3duZXIsIEFjY2Vzc1R5cGUpOwogICAgIAotICAgIH5HZXRCeUlkQWNjZXNzKCk7Ci0g
ICAgCi0gICAgc3RhdGljIEdldEJ5SWRBY2Nlc3MgZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFN0cnVj
dHVyZVN0dWJJbmZvJik7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBm
cm9tU3RydWN0dXJlU3R1YkluZm8oVk0mLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmVTdHViSW5m
byYpOworCisgICAgfkFjY2Vzc0Nhc2UoKTsKICAgICAKLSAgICBib29sIGlzU2V0KCkgY29uc3Qg
eyByZXR1cm4gbV90eXBlICE9IEludmFsaWQ7IH0KLSAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0
IHsgcmV0dXJuICFpc1NldCgpOyB9CisgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGNs
b25lKCkgY29uc3Q7CiAgICAgCiAgICAgQWNjZXNzVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4g
bV90eXBlOyB9CisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9v
ZmZzZXQ7IH0KKyAgICBib29sIHZpYVByb3h5KCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/
IG1fcmFyZURhdGEtPnZpYVByb3h5IDogZmFsc2U7IH0KICAgICAKLSAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlLmdldCgpOyB9Ci0gICAgCi0gICAg
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsg
cmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9Ci0gICAgCi0gICAgSklUU3R1YlJvdXRpbmUqIHN0dWJS
b3V0aW5lKCkgY29uc3QKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAobV90eXBlID09IFRyYW5zaXRpb24pCisgICAgICAgICAgICByZXR1cm4gbV9z
dHJ1Y3R1cmUtPnByZXZpb3VzSUQoKTsKKyAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlLmdldCgp
OworICAgIH0KKyAgICBib29sIGd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrKCkgY29uc3Q7CisKKyAg
ICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQo
aXNTZXQoKSk7Ci0gICAgICAgIHJldHVybiBtX3N0dWJSb3V0aW5lLmdldCgpOworICAgICAgICBB
U1NFUlQobV90eXBlID09IFRyYW5zaXRpb24pOworICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUu
Z2V0KCk7CiAgICAgfQogICAgIAotICAgIGJvb2wgZG9lc0NhbGxzKCkgY29uc3QgeyByZXR1cm4g
dHlwZSgpID09IEdldHRlciB8fCB0eXBlKCkgPT0gQ3VzdG9tR2V0dGVyOyB9CisgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25k
aXRpb25TZXQ7IH0KKworICAgIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5hZGRpdGlvbmFs
U2V0LmdldCgpIDogbnVsbHB0cjsKKyAgICB9CisKKyAgICBKU09iamVjdCogY3VzdG9tU2xvdEJh
c2UoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRh
LT5jdXN0b21TbG90QmFzZS5nZXQoKSA6IG51bGxwdHI7CisgICAgfQorCisgICAgSlNPYmplY3Qq
IGFsdGVybmF0ZUJhc2UoKSBjb25zdDsKICAgICAKLSAgICBib29sIHZpc2l0V2VhayhWTSYpIGNv
bnN0OworICAgIGJvb2wgZG9lc0NhbGxzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
dHlwZSgpKSB7CisgICAgICAgIGNhc2UgR2V0dGVyOgorICAgICAgICBjYXNlIFNldHRlcjoKKyAg
ICAgICAgY2FzZSBDdXN0b21HZXR0ZXI6CisgICAgICAgIGNhc2UgQ3VzdG9tU2V0dGVyOgorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5r
SW5mbygpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIW1fcmFyZURhdGEpCisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIG1fcmFyZURhdGEtPmNhbGxMaW5rSW5m
by5nZXQoKTsKKyAgICB9CiAKKyAgICAvLyBJZiB0aGlzIG1ldGhvZCByZXR1cm5zIHRydWUsIHRo
ZW4gaXQncyBhIGdvb2QgaWRlYSB0byByZW1vdmUgJ290aGVyJyBmcm9tIHRoZSBhY2Nlc3Mgb25j
ZSAndGhpcycKKyAgICAvLyBpcyBhZGRlZC4gVGhpcyBtZXRob2QgYXNzdW1lcyB0aGF0IGluIGNh
c2Ugb2YgY29udHJhZGljdGlvbnMsICd0aGlzJyByZXByZXNlbnRzIGEgbmV3ZXIsIGFuZCBzbwor
ICAgIC8vIG1vcmUgdXNlZnVsLCB0cnV0aC4gVGhpcyBtZXRob2QgY2FuIGJlIGNvbnNlcnZhdGl2
ZTsgaXQgd2lsbCByZXR1cm4gZmFsc2Ugd2hlbiBpdCBkb3VidC4KKyAgICBib29sIGNhblJlcGxh
Y2UoY29uc3QgQWNjZXNzQ2FzZSYgb3RoZXIpOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0OworICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2Nr
OwotICAgIAotICAgIEFjY2Vzc1R5cGUgbV90eXBlOworICAgIGZyaWVuZCBjbGFzcyBQb2x5bW9y
cGhpY0FjY2VzczsKKworICAgIEFjY2Vzc0Nhc2UoKTsKKworICAgIGJvb2wgdmlzaXRXZWFrKFZN
JikgY29uc3Q7CisKKyAgICAvLyBGYWxsIHRocm91Z2ggb24gc3VjY2Vzcy4gVHdvIGtpbmRzIG9m
IGZhaWx1cmVzIGFyZSBzdXBwb3J0ZWQ6IGZhbGwtdGhyb3VnaCwgd2hpY2ggbWVhbnMgdGhhdCB3
ZQorICAgIC8vIHNob3VsZCB0cnkgYSBkaWZmZXJlbnQgY2FzZTsgYW5kIGZhaWx1cmUsIHdoaWNo
IG1lYW5zIHRoYXQgdGhpcyB3YXMgdGhlIHJpZ2h0IGNhc2UgYnV0IGl0IG5lZWRzCisgICAgLy8g
aGVscCBmcm9tIHRoZSBzbG93IHBhdGguCisgICAgdm9pZCBnZW5lcmF0ZVdpdGhHdWFyZChBY2Nl
c3NHZW5lcmF0aW9uU3RhdGUmLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGZhbGxUaHJvdWdo
KTsKKworICAgIC8vIEZhbGwgdGhyb3VnaCBvbiBzdWNjZXNzLCBhZGQgYSBqdW1wIHRvIHRoZSBm
YWlsdXJlIGxpc3Qgb24gZmFpbHVyZS4KKyAgICB2b2lkIGdlbmVyYXRlKEFjY2Vzc0dlbmVyYXRp
b25TdGF0ZSYpOworICAgIAorICAgIEFjY2Vzc1R5cGUgbV90eXBlIHsgTG9hZCB9OworICAgIFBy
b3BlcnR5T2Zmc2V0IG1fb2Zmc2V0IHsgaW52YWxpZE9mZnNldCB9OworCisgICAgLy8gVXN1YWxs
eSB0aGlzIGlzIHRoZSBzdHJ1Y3R1cmUgdGhhdCB3ZSBleHBlY3QgdGhlIGJhc2Ugb2JqZWN0IHRv
IGhhdmUuIEJ1dCwgdGhpcyBpcyB0aGUgKm5ldyoKKyAgICAvLyBzdHJ1Y3R1cmUgZm9yIGEgdHJh
bnNpdGlvbiBhbmQgd2UgcmVseSBvbiB0aGUgZmFjdCB0aGF0IGl0IGhhcyBhIHN0cm9uZyByZWZl
cmVuY2UgdG8gdGhlIG9sZAorICAgIC8vIHN0cnVjdHVyZS4gRm9yIHByb3hpZXMsIHRoaXMgaXMg
dGhlIHN0cnVjdHVyZSBvZiB0aGUgb2JqZWN0IGJlaGluZCB0aGUgcHJveHkuCiAgICAgV3JpdGVC
YXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7CisKICAgICBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCBtX2NvbmRpdGlvblNldDsKLSAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IG1fc3R1
YlJvdXRpbmU7CisKKyAgICBjbGFzcyBSYXJlRGF0YSB7CisgICAgICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworICAgIHB1YmxpYzoKKyAgICAgICAgUmFyZURhdGEoKQorICAgICAgICAgICAg
OiB2aWFQcm94eShmYWxzZSkKKyAgICAgICAgeworICAgICAgICAgICAgY3VzdG9tQWNjZXNzb3Iu
b3BhcXVlID0gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCB2aWFQ
cm94eTsKKyAgICAgICAgUmVmUHRyPFdhdGNocG9pbnRTZXQ+IGFkZGl0aW9uYWxTZXQ7CisgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua0luZm8+IGNhbGxMaW5rSW5mbzsKKyAgICAgICAg
dW5pb24geworICAgICAgICAgICAgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgZ2V0dGVyOwor
ICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmMgc2V0dGVyOworICAgICAg
ICAgICAgdm9pZCogb3BhcXVlOworICAgICAgICB9IGN1c3RvbUFjY2Vzc29yOworICAgICAgICBX
cml0ZUJhcnJpZXI8SlNPYmplY3Q+IGN1c3RvbVNsb3RCYXNlOworICAgIH07CisKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8UmFyZURhdGE+IG1fcmFyZURhdGE7CiB9OwogCi1jbGFzcyBQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0IHsKK2NsYXNzIFBvbHltb3JwaGljQWNjZXNzIHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShQb2x5bW9ycGhpY0FjY2Vzcyk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiBwdWJsaWM6Ci0gICAgLy8gRWl0aGVyIGNyZWF0ZXMgYSBuZXcgcG9seW1vcnBoaWMgZ2V0
IGxpc3QsIG9yIHJldHVybnMgdGhlIG9uZSB0aGF0IGlzIGFscmVhZHkgaW4KLSAgICAvLyBwbGFj
ZS4KLSAgICBzdGF0aWMgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogZnJvbShTdHJ1Y3R1cmVTdHVi
SW5mbyYpOwotICAgIAotICAgIH5Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0KCk7Ci0gICAgCi0gICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN1cnJlbnRTbG93UGF0aFRhcmdldChTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8pIGNvbnN0OwotICAgIAotICAgIHZvaWQgYWRkQWNjZXNzKGNvbnN0IEdl
dEJ5SWRBY2Nlc3MmKTsKKyAgICBQb2x5bW9ycGhpY0FjY2VzcygpOworICAgIH5Qb2x5bW9ycGhp
Y0FjY2VzcygpOworCisgICAgLy8gVGhpcyBtYXkgcmV0dXJuIG51bGwsIGluIHdoaWNoIGNhc2Ug
dGhlIG9sZCBzdHViIHJvdXRpbmUgaXMgbGVmdCBpbnRhY3QuIFlvdSBhcmUgcmVxdWlyZWQgdG8K
KyAgICAvLyBwYXNzIGEgdmVjdG9yIG9mIG5vbi1udWxsIGFjY2VzcyBjYXNlcy4gVGhpcyB3aWxs
IHBydW5lIHRoZSBhY2Nlc3MgY2FzZXMgYnkgcmVqZWN0aW5nIGFueSBjYXNlCisgICAgLy8gaW4g
dGhlIGxpc3QgdGhhdCBpcyBzdWJzdW1lZCBieSBhIGxhdGVyIGNhc2UgaW4gdGhlIGxpc3QuCisg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJlZ2VuZXJhdGVXaXRoQ2FzZXMoCisgICAgICAgIFZN
JiwgQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBjb25zdCBJZGVudGlmaWVyJiwgVmVj
dG9yPHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPj4pOworCisgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIHJlZ2VuZXJhdGVXaXRoQ2FzZSgKKyAgICAgICAgVk0mLCBDb2RlQmxvY2sqLCBTdHJ1
Y3R1cmVTdHViSW5mbyYsIGNvbnN0IElkZW50aWZpZXImLCBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNz
Q2FzZT4pOwogICAgIAogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5p
c0VtcHR5KCk7IH0KICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9saXN0LnNp
emUoKTsgfQotICAgIGJvb2wgaXNGdWxsKCkgY29uc3Q7Ci0gICAgYm9vbCBpc0FsbW9zdEZ1bGwo
KSBjb25zdDsgLy8gVHJ1ZSBpZiBhZGRpbmcgYW4gZWxlbWVudCB3b3VsZCBtYWtlIGlzRnVsbCgp
IHRydWUuCi0gICAgY29uc3QgR2V0QnlJZEFjY2VzcyYgYXQodW5zaWduZWQgaSkgY29uc3QgeyBy
ZXR1cm4gbV9saXN0W2ldOyB9Ci0gICAgY29uc3QgR2V0QnlJZEFjY2VzcyYgb3BlcmF0b3JbXSh1
bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2xpc3RbaV07IH0KLSAgICAKLSAgICBib29sIGRp
ZFNlbGZQYXRjaGluZygpIGNvbnN0OyAvLyBBcmUgYW55IG9mIHRoZSBhY2Nlc3NlcyBTaW1wbGVJ
bmxpbmU/Ci0gICAgCisgICAgY29uc3QgQWNjZXNzQ2FzZSYgYXQodW5zaWduZWQgaSkgY29uc3Qg
eyByZXR1cm4gKm1fbGlzdFtpXTsgfQorICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIG9wZXJhdG9yW10o
dW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gKm1fbGlzdFtpXTsgfQorCisgICAgLy8gSWYgdGhp
cyByZXR1cm5zIGZhbHNlIHRoZW4gd2UgYXJlIHJlcXVlc3RpbmcgYSByZXNldCBvZiB0aGUgb3du
aW5nIFN0cnVjdHVyZVN0dWJJbmZvLgogICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgY29uc3Q7CiAK
KyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisKIHByaXZhdGU6CisgICAg
ZnJpZW5kIGNsYXNzIEFjY2Vzc0Nhc2U7CiAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKKyAg
ICBmcmllbmQgc3RydWN0IEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTsKICAgICAKLSAgICBQb2x5bW9y
cGhpY0dldEJ5SWRMaXN0KFN0cnVjdHVyZVN0dWJJbmZvJik7Ci0gICAgCi0gICAgVmVjdG9yPEdl
dEJ5SWRBY2Nlc3MsIDI+IG1fbGlzdDsKKyAgICB0eXBlZGVmIFZlY3RvcjxzdGQ6OnVuaXF1ZV9w
dHI8QWNjZXNzQ2FzZT4sIDI+IExpc3RUeXBlOworCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IHJlZ2VuZXJhdGUoCisgICAgICAgIFZNJiwgQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8m
LCBjb25zdCBJZGVudGlmaWVyJiwgTGlzdFR5cGUmIGNhc2VzKTsKKworICAgIExpc3RUeXBlIG1f
bGlzdDsKKyAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IG1fc3R1YlJvdXRpbmU7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbz4gbV93YXRjaHBvaW50
czsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBw
cmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBlKTsK
KworfSAvLyBuYW1lc3BhY2UgV1RGCisKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCi0jZW5kaWYg
Ly8gUG9seW1vcnBoaWNHZXRCeUlkTGlzdF9oCisjZW5kaWYgLy8gUG9seW1vcnBoaWNBY2Nlc3Nf
aAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nl
c3NTdHJ1Y3R1cmVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdC5oCShyZXZpc2lvbiAxODk1NDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3NTdHJ1
Y3R1cmVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTEyICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBQb2x5bW9ycGhpY0Fj
Y2Vzc1N0cnVjdHVyZUxpc3RfaAotI2RlZmluZSBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxp
c3RfaAotCi0jaW5jbHVkZSAiSklUU3R1YlJvdXRpbmUuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmUu
aCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVDaGFpbi5oIgotCi0jZGVmaW5lIFBPTFlNT1JQSElDX0xJ
U1RfQ0FDSEVfU0laRSA4Ci0KLW5hbWVzcGFjZSBKU0MgewotCi0vLyAqU2lnaCosIElmIHRoZSBK
SVQgaXMgZW5hYmxlZCB3ZSBuZWVkIHRvIHRyYWNrIHRoZSBzdHViUm91bnRpbmUgKG9mIHR5cGUg
Q29kZUxvY2F0aW9uTGFiZWwpLAotLy8gSWYgdGhlIEpJVCBpcyBub3QgaW4gdXNlIHdlIGRvbid0
IGFjdHVhbGx5IG5lZWQgdGhlIHZhcmlhYmxlICh0aGF0IHNhaWQsIGlmIHRoZSBKSVQgaXMgbm90
IGluIHVzZSB3ZSBkb24ndAotLy8gY3VyZW50bHkgYWN0dWFsbHkgdXNlIFBvbHltb3JwaGljQWNj
ZXNzU3RydWN0dXJlTGlzdHMsIHdoaWNoIHdlIHNob3VsZCkuICBBbnl3YXksIHRoaXMgc2VlbXMg
bGlrZSB0aGUgYmVzdAotLy8gc29sdXRpb24gZm9yIG5vdyAtIHdpbGwgbmVlZCB0byBzb21ldGhp
bmcgc21hcnRlciBpZi93aGVuIHdlIGFjdHVhbGx5IHdhbnQgbWl4ZWQtbW9kZSBvcGVyYXRpb24u
Ci0KLSNpZiBFTkFCTEUoSklUKQotLy8gU3RydWN0dXJlIHVzZWQgYnkgb3BfZ2V0X2J5X2lkX3Nl
bGZfbGlzdCBhbmQgb3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3QgaW5zdHJ1Y3Rpb24gdG8gaG9sZCBk
YXRhIG9mZiB0aGUgbWFpbiBvcGNvZGUgc3RyZWFtLgotc3RydWN0IFBvbHltb3JwaGljQWNjZXNz
U3RydWN0dXJlTGlzdCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0g
ICAgc3RydWN0IFBvbHltb3JwaGljU3R1YkluZm8gewotICAgICAgICBib29sIGlzRGlyZWN0IDog
MTsKLSAgICAgICAgdW5zaWduZWQgY291bnQgOiAzMTsKLSAgICAgICAgUmVmUHRyPEpJVFN0dWJS
b3V0aW5lPiBzdHViUm91dGluZTsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gYmFz
ZTsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZUNoYWluPiBjaGFpbjsKLQotICAgICAg
ICBQb2x5bW9ycGhpY1N0dWJJbmZvKCkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAg
dm9pZCBzZXQoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5l
PiBfc3R1YlJvdXRpbmUsIFN0cnVjdHVyZSogX2Jhc2UsIGJvb2wgX2lzRGlyZWN0KQotICAgICAg
ICB7Ci0gICAgICAgICAgICBzdHViUm91dGluZSA9IF9zdHViUm91dGluZTsKLSAgICAgICAgICAg
IGJhc2Uuc2V0KHZtLCBvd25lciwgX2Jhc2UpOwotICAgICAgICAgICAgaXNEaXJlY3QgPSBfaXNE
aXJlY3Q7Ci0gICAgICAgICAgICBjb3VudCA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIHZvaWQgc2V0KFZNJiB2bSwgSlNDZWxsKiBvd25lciwgUGFzc1JlZlB0cjxKSVRTdHViUm91
dGluZT4gX3N0dWJSb3V0aW5lLCBTdHJ1Y3R1cmUqIF9iYXNlLCBTdHJ1Y3R1cmVDaGFpbiogX2No
YWluLCBib29sIF9pc0RpcmVjdCwgdW5zaWduZWQgX2NvdW50KQotICAgICAgICB7Ci0gICAgICAg
ICAgICBzdHViUm91dGluZSA9IF9zdHViUm91dGluZTsKLSAgICAgICAgICAgIGJhc2Uuc2V0KHZt
LCBvd25lciwgX2Jhc2UpOwotICAgICAgICAgICAgY2hhaW4uc2V0KHZtLCBvd25lciwgX2NoYWlu
KTsKLSAgICAgICAgICAgIGlzRGlyZWN0ID0gX2lzRGlyZWN0OwotICAgICAgICAgICAgY291bnQg
PSBfY291bnQ7Ci0gICAgICAgIH0KLSAgICB9IGxpc3RbUE9MWU1PUlBISUNfTElTVF9DQUNIRV9T
SVpFXTsKLSAgICAKLSAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoKQotICAgIHsK
LSAgICB9Ci0gICAgCi0gICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KFZNJiB2bSwg
SlNDZWxsKiBvd25lciwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUsIFN0
cnVjdHVyZSogZmlyc3RCYXNlLCBib29sIGlzRGlyZWN0KQotICAgIHsKLSAgICAgICAgbGlzdFsw
XS5zZXQodm0sIG93bmVyLCBzdHViUm91dGluZSwgZmlyc3RCYXNlLCBpc0RpcmVjdCk7Ci0gICAg
fQotCi0gICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KFZNJiB2bSwgSlNDZWxsKiBv
d25lciwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUsIFN0cnVjdHVyZSog
Zmlyc3RCYXNlLCBTdHJ1Y3R1cmVDaGFpbiogZmlyc3RDaGFpbiwgYm9vbCBpc0RpcmVjdCwgdW5z
aWduZWQgY291bnQpCi0gICAgewotICAgICAgICBsaXN0WzBdLnNldCh2bSwgb3duZXIsIHN0dWJS
b3V0aW5lLCBmaXJzdEJhc2UsIGZpcnN0Q2hhaW4sIGlzRGlyZWN0LCBjb3VudCk7Ci0gICAgfQot
Ci0gICAgYm9vbCB2aXNpdFdlYWsoaW50IGNvdW50KQotICAgIHsKLSAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBQb2x5bW9ycGhpY1N0dWJJbmZv
JiBpbmZvID0gbGlzdFtpXTsKLSAgICAgICAgICAgIGlmICghaW5mby5iYXNlKQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFIZWFw
Ojppc01hcmtlZChpbmZvLmJhc2UuZ2V0KCkpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIGlmIChpbmZvLmNoYWluICYmICFIZWFwOjppc01hcmtlZChpbmZvLmNo
YWluLmdldCgpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICAgICAgICAgIAotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci19OwotCi0jZW5kaWYgLy8g
RU5BQkxFKEpJVCkKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBQb2x5bW9ycGhp
Y0FjY2Vzc1N0cnVjdHVyZUxpc3RfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwCShyZXZpc2lv
biAxODk1NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNH
ZXRCeUlkTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTU1ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIlBvbHltb3JwaGljR2V0QnlJZExpc3QuaCIKLQotI2lmIEVOQUJM
RShKSVQpCi0KLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRlICJIZWFwLmgiCi0jaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCi0KLW5h
bWVzcGFjZSBKU0MgewotCi1HZXRCeUlkQWNjZXNzOjpHZXRCeUlkQWNjZXNzKAotICAgIFZNJiB2
bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0
aW5lPiBzdHViUm91dGluZSwKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkKLSAgICA6IG1fdHlwZSh0eXBlKQot
ICAgICwgbV9zdHJ1Y3R1cmUodm0sIG93bmVyLCBzdHJ1Y3R1cmUpCi0gICAgLCBtX2NvbmRpdGlv
blNldChjb25kaXRpb25TZXQpCi0gICAgLCBtX3N0dWJSb3V0aW5lKHN0dWJSb3V0aW5lKQotewot
fQotCi1HZXRCeUlkQWNjZXNzOjp+R2V0QnlJZEFjY2VzcygpCi17Ci19Ci0KLUdldEJ5SWRBY2Nl
c3MgR2V0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbykKLXsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgaW5pdGlhbFNsb3dQYXRo
ID0KLSAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1
YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSk7Ci0gICAgCi0gICAgR2V0QnlJZEFjY2Vz
cyByZXN1bHQ7Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8uYWNjZXNzVHlwZSA9
PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYpOwotICAgIAotICAgIHJlc3VsdC5tX3R5cGUgPSBTaW1w
bGVJbmxpbmU7Ci0gICAgcmVzdWx0Lm1fc3RydWN0dXJlLmNvcHlGcm9tKHN0dWJJbmZvLnUuZ2V0
QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZSk7Ci0gICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUg
PSBKSVRTdHViUm91dGluZTo6Y3JlYXRlU2VsZk1hbmFnZWRSb3V0aW5lKGluaXRpYWxTbG93UGF0
aCk7Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBHZXRCeUlkQWNjZXNzOjp2
aXNpdFdlYWsoVk0mIHZtKSBjb25zdAotewotICAgIGlmIChtX3N0cnVjdHVyZSAmJiAhSGVhcDo6
aXNNYXJrZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
aWYgKCFtX2NvbmRpdGlvblNldC5hcmVTdGlsbExpdmUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGlmICghbV9zdHViUm91dGluZS0+dmlzaXRXZWFrKHZtKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpQ
b2x5bW9ycGhpY0dldEJ5SWRMaXN0KFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAg
ICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpCi0gICAgICAgIHJldHVy
bjsKLSAgICAKLSAgICBtX2xpc3QuYXBwZW5kKEdldEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1cmVT
dHViSW5mbyhzdHViSW5mbykpOwotfQotCi1Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBQb2x5bW9y
cGhpY0dldEJ5SWRMaXN0Ojpmcm9tKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAg
ICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3QpCi0gICAg
ICAgIHJldHVybiBzdHViSW5mby51LmdldEJ5SWRMaXN0Lmxpc3Q7Ci0gICAgCi0gICAgQVNTRVJU
KAotICAgICAgICBzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZgot
ICAgICAgICB8fCBzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc191bnNldCk7Ci0gICAgCi0g
ICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogcmVzdWx0ID0gbmV3IFBvbHltb3JwaGljR2V0QnlJ
ZExpc3Qoc3R1YkluZm8pOwotICAgIAotICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkTGlzdChyZXN1
bHQpOwotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVBvbHltb3JwaGljR2V0QnlJZExp
c3Q6On5Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0KCkgeyB9Ci0KLU1hY3JvQXNzZW1ibGVyQ29kZVB0
ciBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpjdXJyZW50U2xvd1BhdGhUYXJnZXQoCi0gICAgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKSBjb25zdAotewotICAgIGlmIChpc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybiBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChz
dHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKLSAgICByZXR1cm4gbV9saXN0Lmxh
c3QoKS5zdHViUm91dGluZSgpLT5jb2RlKCkuY29kZSgpOwotfQotCi12b2lkIFBvbHltb3JwaGlj
R2V0QnlJZExpc3Q6OmFkZEFjY2Vzcyhjb25zdCBHZXRCeUlkQWNjZXNzJiBhY2Nlc3MpCi17Ci0g
ICAgQVNTRVJUKCFpc0Z1bGwoKSk7Ci0gICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHJlc2l6aW5n
IG9wdGltaXplcyBmb3Igc3BhY2UsIG5vdCB0aW1lLgotICAgIG1fbGlzdC5yZXNpemVUb0ZpdCht
X2xpc3Quc2l6ZSgpICsgMSk7Ci0gICAgbV9saXN0Lmxhc3QoKSA9IGFjY2VzczsKLX0KLQotYm9v
bCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojppc0Z1bGwoKSBjb25zdAotewotICAgIEFTU0VSVChz
aXplKCkgPD0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKTsKLSAgICByZXR1cm4gc2l6ZSgp
ID09IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRTsKLX0KLQotYm9vbCBQb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0Ojppc0FsbW9zdEZ1bGwoKSBjb25zdAotewotICAgIEFTU0VSVChzaXplKCkgPD0g
UE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKTsKLSAgICByZXR1cm4gc2l6ZSgpID49IFBPTFlN
T1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDE7Ci19Ci0KLWJvb2wgUG9seW1vcnBoaWNHZXRCeUlk
TGlzdDo6ZGlkU2VsZlBhdGNoaW5nKCkgY29uc3QKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBz
aXplKCk7IGktLTspIHsKLSAgICAgICAgaWYgKGF0KGkpLnR5cGUoKSA9PSBHZXRCeUlkQWNjZXNz
OjpTaW1wbGVJbmxpbmUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1ib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OnZpc2l0V2VhayhW
TSYgdm0pIGNvbnN0Ci17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gc2l6ZSgpOyBpLS07KSB7Ci0g
ICAgICAgIGlmICghYXQoaSkudmlzaXRXZWFrKHZtKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0j
ZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgJKHJldmlzaW9uIDE4
OTU0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5
SWRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0X2gKLSNkZWZpbmUgUG9seW1vcnBoaWNHZXRCeUlkTGlzdF9oCi0KLSNpZiBF
TkFCTEUoSklUKQotCi0jaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgotI2luY2x1ZGUgIk1hY3JvQXNz
ZW1ibGVyLmgiCi0jaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIKLSNpbmNs
dWRlICJPcGNvZGUuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKLSNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBDb2RlQmxvY2s7Ci1zdHJ1Y3QgU3Ry
dWN0dXJlU3R1YkluZm87Ci0KLWNsYXNzIEdldEJ5SWRBY2Nlc3MgewotcHVibGljOgotICAgIGVu
dW0gQWNjZXNzVHlwZSB7Ci0gICAgICAgIEludmFsaWQsCi0gICAgICAgIFNpbXBsZUlubGluZSwg
Ly8gVGhpcyBpcyB0aGUgcGF0Y2hlZCBpbmxpbmUgYWNjZXNzLgotICAgICAgICBTaW1wbGVTdHVi
LCAvLyBUaGlzIGlzIGEgc3R1Yi4KLSAgICAgICAgV2F0Y2hlZFN0dWIsCi0gICAgICAgIEdldHRl
ciwKLSAgICAgICAgQ3VzdG9tR2V0dGVyLAotICAgICAgICBTaW1wbGVNaXNzLAotICAgIH07Ci0g
ICAgCi0gICAgR2V0QnlJZEFjY2VzcygpCi0gICAgICAgIDogbV90eXBlKEludmFsaWQpCi0gICAg
ewotICAgIH0KLSAgICAKLSAgICBHZXRCeUlkQWNjZXNzKAotICAgICAgICBWTSYsIEpTQ2VsbCog
b3duZXIsIEFjY2Vzc1R5cGUsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+LCBTdHJ1Y3R1cmUq
LAotICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCgpKTsKLSAgICAKLSAgICB+R2V0QnlJZEFjY2VzcygpOwotICAgIAot
ICAgIHN0YXRpYyBHZXRCeUlkQWNjZXNzIGZyb21TdHJ1Y3R1cmVTdHViSW5mbyhTdHJ1Y3R1cmVT
dHViSW5mbyYpOwotICAgIAotICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX3R5cGUg
IT0gSW52YWxpZDsgfQotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0
KCk7IH0KLSAgICAKLSAgICBBY2Nlc3NUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7
IH0KLSAgICAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Ry
dWN0dXJlLmdldCgpOyB9Ci0gICAgCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9Ci0gICAg
Ci0gICAgSklUU3R1YlJvdXRpbmUqIHN0dWJSb3V0aW5lKCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IEFTU0VSVChpc1NldCgpKTsKLSAgICAgICAgcmV0dXJuIG1fc3R1YlJvdXRpbmUuZ2V0KCk7Ci0g
ICAgfQotICAgIAotICAgIGJvb2wgZG9lc0NhbGxzKCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09
IEdldHRlciB8fCB0eXBlKCkgPT0gQ3VzdG9tR2V0dGVyOyB9Ci0gICAgCi0gICAgYm9vbCB2aXNp
dFdlYWsoVk0mKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2Nr
OwotICAgIAotICAgIEFjY2Vzc1R5cGUgbV90eXBlOwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1
cmU+IG1fc3RydWN0dXJlOwotICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0
aW9uU2V0OwotICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gbV9zdHViUm91dGluZTsKLX07Ci0K
LWNsYXNzIFBvbHltb3JwaGljR2V0QnlJZExpc3QgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwotcHVibGljOgotICAgIC8vIEVpdGhlciBjcmVhdGVzIGEgbmV3IHBvbHltb3JwaGljIGdl
dCBsaXN0LCBvciByZXR1cm5zIHRoZSBvbmUgdGhhdCBpcyBhbHJlYWR5IGluCi0gICAgLy8gcGxh
Y2UuCi0gICAgc3RhdGljIFBvbHltb3JwaGljR2V0QnlJZExpc3QqIGZyb20oU3RydWN0dXJlU3R1
YkluZm8mKTsKLSAgICAKLSAgICB+UG9seW1vcnBoaWNHZXRCeUlkTGlzdCgpOwotICAgIAotICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdXJyZW50U2xvd1BhdGhUYXJnZXQoU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvKSBjb25zdDsKLSAgICAKLSAgICB2b2lkIGFkZEFjY2Vzcyhjb25zdCBH
ZXRCeUlkQWNjZXNzJik7Ci0gICAgCi0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4g
bV9saXN0LmlzRW1wdHkoKTsgfQotICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBt
X2xpc3Quc2l6ZSgpOyB9Ci0gICAgYm9vbCBpc0Z1bGwoKSBjb25zdDsKLSAgICBib29sIGlzQWxt
b3N0RnVsbCgpIGNvbnN0OyAvLyBUcnVlIGlmIGFkZGluZyBhbiBlbGVtZW50IHdvdWxkIG1ha2Ug
aXNGdWxsKCkgdHJ1ZS4KLSAgICBjb25zdCBHZXRCeUlkQWNjZXNzJiBhdCh1bnNpZ25lZCBpKSBj
b25zdCB7IHJldHVybiBtX2xpc3RbaV07IH0KLSAgICBjb25zdCBHZXRCeUlkQWNjZXNzJiBvcGVy
YXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdFtpXTsgfQotICAgIAotICAg
IGJvb2wgZGlkU2VsZlBhdGNoaW5nKCkgY29uc3Q7IC8vIEFyZSBhbnkgb2YgdGhlIGFjY2Vzc2Vz
IFNpbXBsZUlubGluZT8KLSAgICAKLSAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OwotCi1w
cml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7Ci0gICAgCi0gICAgUG9seW1vcnBo
aWNHZXRCeUlkTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyYpOwotICAgIAotICAgIFZlY3RvcjxHZXRC
eUlkQWNjZXNzLCAyPiBtX2xpc3Q7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlm
IC8vIEVOQUJMRShKSVQpCi0KLSNlbmRpZiAvLyBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0X2gKLQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExp
c3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcAkocmV2aXNpb24gMTg5NTQzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDE1NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0LCAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQ
b2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgiCi0KLSNpZiBFTkFCTEUoSklUKQotCi0jaW5jbHVkZSAi
U3RydWN0dXJlU3R1YkluZm8uaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLVB1dEJ5SWRBY2Nlc3Mg
UHV0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbykKLXsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgaW5pdGlhbFNsb3dQYXRoID0K
LSAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1Yklu
Zm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSk7Ci0gICAgCi0gICAgUHV0QnlJZEFjY2VzcyBy
ZXN1bHQ7Ci0gICAgCi0gICAgc3dpdGNoIChzdHViSW5mby5hY2Nlc3NUeXBlKSB7Ci0gICAgY2Fz
ZSBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2U6Ci0gICAgICAgIHJlc3VsdC5tX3R5cGUgPSBSZXBs
YWNlOwotICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuY29weUZyb20oc3R1YkluZm8udS5w
dXRCeUlkUmVwbGFjZS5iYXNlT2JqZWN0U3RydWN0dXJlKTsKLSAgICAgICAgcmVzdWx0Lm1fc3R1
YlJvdXRpbmUgPSBKSVRTdHViUm91dGluZTo6Y3JlYXRlU2VsZk1hbmFnZWRSb3V0aW5lKGluaXRp
YWxTbG93UGF0aCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAKLSAgICBjYXNlIGFjY2Vzc19w
dXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6Ci0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3Ry
YW5zaXRpb25fbm9ybWFsOgotICAgICAgICByZXN1bHQubV90eXBlID0gVHJhbnNpdGlvbjsKLSAg
ICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlLmNvcHlGcm9tKHN0dWJJbmZvLnUucHV0QnlJZFRy
YW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUpOwotICAgICAgICByZXN1bHQubV9uZXdTdHJ1Y3R1
cmUuY29weUZyb20oc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUpOwotICAg
ICAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6
YWRvcHRSYXdQb2ludGVyKAotICAgICAgICAgICAgc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlv
bi5yYXdDb25kaXRpb25TZXQpOwotICAgICAgICByZXN1bHQubV9zdHViUm91dGluZSA9IHN0dWJJ
bmZvLnN0dWJSb3V0aW5lOwotICAgICAgICBicmVhazsKLSAgICAgICAgCi0gICAgZGVmYXVsdDoK
LSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgCi0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBQdXRCeUlkQWNjZXNzOjp2aXNpdFdlYWsoVk0mIHZt
KSBjb25zdAotewotICAgIGlmICghbV9jb25kaXRpb25TZXQuYXJlU3RpbGxMaXZlKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgIGNhc2Ug
UmVwbGFjZToKLSAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX29sZFN0cnVjdHVyZS5nZXQo
KSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
VHJhbnNpdGlvbjoKLSAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX29sZFN0cnVjdHVyZS5n
ZXQoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghSGVhcDo6aXNN
YXJrZWQobV9uZXdTdHJ1Y3R1cmUuZ2V0KCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIFNldHRlcjoKLSAgICBjYXNlIEN1c3RvbVNldHRlcjoK
LSAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX29sZFN0cnVjdHVyZS5nZXQoKSkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0gICAgaWYgKCFtX3N0dWJSb3V0aW5lLT52aXNpdFdlYWsodm0pKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVBvbHltb3JwaGljUHV0QnlJZExp
c3Q6OlBvbHltb3JwaGljUHV0QnlJZExpc3QoCi0gICAgUHV0S2luZCBwdXRLaW5kLCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8pCi0gICAgOiBtX2tpbmQocHV0S2luZCkKLXsKLSAgICBpZiAo
c3R1YkluZm8uYWNjZXNzVHlwZSAhPSBhY2Nlc3NfdW5zZXQpCi0gICAgICAgIG1fbGlzdC5hcHBl
bmQoUHV0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKHN0dWJJbmZvKSk7Ci19Ci0K
LVBvbHltb3JwaGljUHV0QnlJZExpc3QqIFBvbHltb3JwaGljUHV0QnlJZExpc3Q6OmZyb20oCi0g
ICAgUHV0S2luZCBwdXRLaW5kLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAg
aWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3B1dF9ieV9pZF9saXN0KQotICAgICAg
ICByZXR1cm4gc3R1YkluZm8udS5wdXRCeUlkTGlzdC5saXN0OwotICAgIAotICAgIEFTU0VSVChz
dHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFjZQotICAgICAgICB8
fCBzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3Jt
YWwKLSAgICAgICAgfHwgc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfcHV0X2J5X2lkX3Ry
YW5zaXRpb25fZGlyZWN0Ci0gICAgICAgIHx8IHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNz
X3Vuc2V0KTsKLSAgICAKLSAgICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiByZXN1bHQgPQotICAg
ICAgICBuZXcgUG9seW1vcnBoaWNQdXRCeUlkTGlzdChwdXRLaW5kLCBzdHViSW5mbyk7Ci0gICAg
Ci0gICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRMaXN0KHJlc3VsdCk7Ci0gICAgCi0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6flBvbHltb3JwaGljUHV0QnlJ
ZExpc3QoKSB7IH0KLQotYm9vbCBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojppc0Z1bGwoKSBjb25z
dAotewotICAgIEFTU0VSVChzaXplKCkgPD0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKTsK
LSAgICByZXR1cm4gc2l6ZSgpID09IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRTsKLX0KLQot
Ym9vbCBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojppc0FsbW9zdEZ1bGwoKSBjb25zdAotewotICAg
IEFTU0VSVChzaXplKCkgPD0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKTsKLSAgICByZXR1
cm4gc2l6ZSgpID49IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDE7Ci19Ci0KLXZvaWQg
UG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6YWRkQWNjZXNzKGNvbnN0IFB1dEJ5SWRBY2Nlc3MmIHB1
dEJ5SWRBY2Nlc3MpCi17Ci0gICAgQVNTRVJUKCFpc0Z1bGwoKSk7Ci0gICAgLy8gTWFrZSBzdXJl
IHRoYXQgdGhlIHJlc2l6aW5nIG9wdGltaXplcyBmb3Igc3BhY2UsIG5vdCB0aW1lLgotICAgIG1f
bGlzdC5yZXNpemVUb0ZpdChtX2xpc3Quc2l6ZSgpICsgMSk7Ci0gICAgbV9saXN0Lmxhc3QoKSA9
IHB1dEJ5SWRBY2Nlc3M7Ci19Ci0KLWJvb2wgUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6dmlzaXRX
ZWFrKFZNJiB2bSkgY29uc3QKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgaWYgKCFhdChpKS52aXNpdFdlYWsodm0pKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oCShyZXZp
c2lvbiAxODk1NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBo
aWNQdXRCeUlkTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIxNiArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEyLCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5k
ZWYgUG9seW1vcnBoaWNQdXRCeUlkTGlzdF9oCi0jZGVmaW5lIFBvbHltb3JwaGljUHV0QnlJZExp
c3RfaAotCi0jaWYgRU5BQkxFKEpJVCkKLQotI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKLSNpbmNs
dWRlICJNYWNyb0Fzc2VtYmxlci5oIgotI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0LmgiCi0jaW5jbHVkZSAiT3Bjb2RlLmgiCi0jaW5jbHVkZSAiUHV0S2luZC5oIgotI2luY2x1
ZGUgIlB1dFByb3BlcnR5U2xvdC5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgotI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENvZGVCbG9jazsKLXN0
cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbzsKLQotY2xhc3MgUHV0QnlJZEFjY2VzcyB7Ci1wdWJsaWM6
Ci0gICAgZW51bSBBY2Nlc3NUeXBlIHsKLSAgICAgICAgSW52YWxpZCwKLSAgICAgICAgVHJhbnNp
dGlvbiwKLSAgICAgICAgUmVwbGFjZSwKLSAgICAgICAgU2V0dGVyLAotICAgICAgICBDdXN0b21T
ZXR0ZXIKLSAgICB9OwotICAgIAotICAgIFB1dEJ5SWRBY2Nlc3MoKQotICAgICAgICA6IG1fdHlw
ZShJbnZhbGlkKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIFB1dEJ5SWRBY2Nlc3Mg
dHJhbnNpdGlvbigKLSAgICAgICAgVk0mIHZtLAotICAgICAgICBKU0NlbGwqIG93bmVyLAotICAg
ICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwKLSAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1
Y3R1cmUsCi0gICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRp
b25TZXQsCi0gICAgICAgIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lKQot
ICAgIHsKLSAgICAgICAgUHV0QnlJZEFjY2VzcyByZXN1bHQ7Ci0gICAgICAgIHJlc3VsdC5tX3R5
cGUgPSBUcmFuc2l0aW9uOwotICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuc2V0KHZtLCBv
d25lciwgb2xkU3RydWN0dXJlKTsKLSAgICAgICAgcmVzdWx0Lm1fbmV3U3RydWN0dXJlLnNldCh2
bSwgb3duZXIsIG5ld1N0cnVjdHVyZSk7Ci0gICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9
IGNvbmRpdGlvblNldDsKLSAgICAgICAgcmVzdWx0Lm1fY3VzdG9tU2V0dGVyID0gMDsKLSAgICAg
ICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBzdHViUm91dGluZTsKLSAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICB9Ci0KLSAgICBzdGF0aWMgUHV0QnlJZEFjY2VzcyByZXBsYWNlKAotICAgICAg
ICBWTSYgdm0sCi0gICAgICAgIEpTQ2VsbCogb3duZXIsCi0gICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLAotICAgICAgICBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSkK
LSAgICB7Ci0gICAgICAgIFB1dEJ5SWRBY2Nlc3MgcmVzdWx0OwotICAgICAgICByZXN1bHQubV90
eXBlID0gUmVwbGFjZTsKLSAgICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlLnNldCh2bSwgb3du
ZXIsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHJlc3VsdC5tX2N1c3RvbVNldHRlciA9IDA7Ci0gICAg
ICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gc3R1YlJvdXRpbmU7Ci0gICAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0gICAgfQotCi0KLSAgICBzdGF0aWMgUHV0QnlJZEFjY2VzcyBzZXR0ZXIoCi0gICAg
ICAgIFZNJiB2bSwKLSAgICAgICAgSlNDZWxsKiBvd25lciwKLSAgICAgICAgQWNjZXNzVHlwZSBh
Y2Nlc3NUeXBlLAotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKLSAgICAgICAgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwKLSAgICAgICAgUHV0UHJv
cGVydHlTbG90OjpQdXRWYWx1ZUZ1bmMgY3VzdG9tU2V0dGVyLAotICAgICAgICBQYXNzUmVmUHRy
PEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSkKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNT
RVJUKGFjY2Vzc1R5cGUgPT0gU2V0dGVyIHx8IGFjY2Vzc1R5cGUgPT0gQ3VzdG9tU2V0dGVyKTsK
LSAgICAgICAgUHV0QnlJZEFjY2VzcyByZXN1bHQ7Ci0gICAgICAgIHJlc3VsdC5tX29sZFN0cnVj
dHVyZS5zZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOwotICAgICAgICByZXN1bHQubV90eXBlID0g
YWNjZXNzVHlwZTsKLSAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0
OwotICAgICAgICByZXN1bHQubV9jdXN0b21TZXR0ZXIgPSBjdXN0b21TZXR0ZXI7Ci0gICAgICAg
IHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gc3R1YlJvdXRpbmU7Ci0gICAgICAgIHJldHVybiByZXN1
bHQ7Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyBQdXRCeUlkQWNjZXNzIGZyb21TdHJ1Y3R1cmVT
dHViSW5mbyhTdHJ1Y3R1cmVTdHViSW5mbyYpOwotICAgIAotICAgIGJvb2wgaXNTZXQoKSBjb25z
dCB7IHJldHVybiBtX3R5cGUgIT0gSW52YWxpZDsgfQotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29u
c3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KLSAgICAKLSAgICBBY2Nlc3NUeXBlIHR5cGUoKSBjb25z
dCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICAKLSAgICBib29sIGlzVHJhbnNpdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fdHlwZSA9PSBUcmFuc2l0aW9uOyB9Ci0gICAgYm9vbCBpc1JlcGxhY2UoKSBj
b25zdCB7IHJldHVybiBtX3R5cGUgPT0gUmVwbGFjZTsgfQotICAgIGJvb2wgaXNTZXR0ZXIoKSBj
b25zdCB7IHJldHVybiBtX3R5cGUgPT0gU2V0dGVyOyB9Ci0gICAgYm9vbCBpc0N1c3RvbSgpIGNv
bnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBDdXN0b21TZXR0ZXI7IH0KLSAgICAKLSAgICBTdHJ1Y3R1
cmUqIG9sZFN0cnVjdHVyZSgpIGNvbnN0Ci0gICAgewotICAgICAgICAvLyBVc2luZyB0aGlzIGlu
c3RlYWQgb2YgaXNTZXQoKSB0byBtYWtlIHRoaXMgYXNzZXJ0aW9uIHJvYnVzdCBhZ2FpbnN0IHRo
ZSBwb3NzaWJpbGl0eQotICAgICAgICAvLyBvZiBhZGRpdGlvbmFsIGFjY2VzcyB0eXBlcyBiZWlu
ZyBhZGRlZC4KLSAgICAgICAgQVNTRVJUKGlzVHJhbnNpdGlvbigpIHx8IGlzUmVwbGFjZSgpIHx8
IGlzU2V0dGVyKCkgfHwgaXNDdXN0b20oKSk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gbV9v
bGRTdHJ1Y3R1cmUuZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc1JlcGxhY2UoKSB8fCBpc1NldHRlcigp
IHx8IGlzQ3VzdG9tKCkpOwotICAgICAgICByZXR1cm4gbV9vbGRTdHJ1Y3R1cmUuZ2V0KCk7Ci0g
ICAgfQotICAgIAotICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChpc1RyYW5zaXRpb24oKSk7Ci0gICAgICAgIHJldHVybiBtX25ld1N0cnVj
dHVyZS5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9Ci0g
ICAgCi0gICAgSklUU3R1YlJvdXRpbmUqIHN0dWJSb3V0aW5lKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVChpc1RyYW5zaXRpb24oKSB8fCBpc1JlcGxhY2UoKSB8fCBpc1NldHRlcigpIHx8
IGlzQ3VzdG9tKCkpOwotICAgICAgICByZXR1cm4gbV9zdHViUm91dGluZS5nZXQoKTsKLSAgICB9
Ci0KLSAgICBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyBjdXN0b21TZXR0ZXIoKSBjb25z
dAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzQ3VzdG9tKCkpOwotICAgICAgICByZXR1cm4gbV9j
dXN0b21TZXR0ZXI7Ci0gICAgfQotCi0gICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25zdDsKLSAg
ICAKLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKLSAgICAKLSAgICBBY2Nl
c3NUeXBlIG1fdHlwZTsKLSAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX29sZFN0cnVjdHVy
ZTsKLSAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX25ld1N0cnVjdHVyZTsKLSAgICBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKLSAgICBQdXRQcm9wZXJ0eVNs
b3Q6OlB1dFZhbHVlRnVuYyBtX2N1c3RvbVNldHRlcjsKLSAgICBSZWZQdHI8SklUU3R1YlJvdXRp
bmU+IG1fc3R1YlJvdXRpbmU7Ci19OwotCi1jbGFzcyBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0IHsK
LSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICAvLyBFaXRoZXIgY3Jl
YXRlcyBhIG5ldyBwb2x5bW9ycGhpYyBwdXQgbGlzdCwgb3IgcmV0dXJucyB0aGUgb25lIHRoYXQg
aXMgYWxyZWFkeQotICAgIC8vIGluIHBsYWNlLgotICAgIHN0YXRpYyBQb2x5bW9ycGhpY1B1dEJ5
SWRMaXN0KiBmcm9tKFB1dEtpbmQsIFN0cnVjdHVyZVN0dWJJbmZvJik7Ci0gICAgCi0gICAgflBv
bHltb3JwaGljUHV0QnlJZExpc3QoKTsKLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIg
Y3VycmVudFNsb3dQYXRoVGFyZ2V0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2xp
c3QubGFzdCgpLnN0dWJSb3V0aW5lKCktPmNvZGUoKS5jb2RlKCk7Ci0gICAgfQotICAgIAotICAg
IHZvaWQgYWRkQWNjZXNzKGNvbnN0IFB1dEJ5SWRBY2Nlc3MmKTsKLSAgICAKLSAgICBib29sIGlz
RW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2xpc3QuaXNFbXB0eSgpOyB9Ci0gICAgdW5zaWduZWQg
c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5zaXplKCk7IH0KLSAgICBib29sIGlzRnVsbCgp
IGNvbnN0OwotICAgIGJvb2wgaXNBbG1vc3RGdWxsKCkgY29uc3Q7IC8vIFRydWUgaWYgYWRkaW5n
IGFuIGVsZW1lbnQgd291bGQgbWFrZSBpc0Z1bGwoKSB0cnVlLgotICAgIGNvbnN0IFB1dEJ5SWRB
Y2Nlc3MmIGF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdFtpXTsgfQotICAgIGNv
bnN0IFB1dEJ5SWRBY2Nlc3MmIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4g
bV9saXN0W2ldOyB9Ci0gICAgCi0gICAgUHV0S2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9r
aW5kOyB9Ci0gICAgCi0gICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25zdDsKLSAgICAKLXByaXZh
dGU6Ci0gICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKLSAgICAKLSAgICAvLyBJbml0aWFsaXpl
IGZyb20gYSBzdHViIGluZm87IHRoaXMgd2lsbCBwbGFjZSBvbmUgZWxlbWVudCBpbiB0aGUgbGlz
dCBhbmQgaXQgd2lsbAotICAgIC8vIGJlIGNyZWF0ZWQgYnkgY29udmVydGluZyB0aGUgc3R1YiBp
bmZvJ3MgcHV0IGJ5IGlkIGFjY2VzcyBpbmZvcm1hdGlvbiBpbnRvIG91cgotICAgIC8vIFB1dEJ5
SWRBY2Nlc3MuCi0gICAgUG9seW1vcnBoaWNQdXRCeUlkTGlzdChQdXRLaW5kLCBTdHJ1Y3R1cmVT
dHViSW5mbyYpOwotCi0gICAgVmVjdG9yPFB1dEJ5SWRBY2Nlc3MsIDI+IG1fbGlzdDsKLSAgICBQ
dXRLaW5kIG1fa2luZDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gRU5B
QkxFKEpJVCkKLQotI2VuZGlmIC8vIFBvbHltb3JwaGljUHV0QnlJZExpc3RfaAotCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCShy
ZXZpc2lvbiAxODk1NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJ
ZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEzICsyNiwxMiBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKIAotI2luY2x1ZGUgIkFjY2Vz
c29yQ2FsbEpJVFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVk
ZSAiQ29tcGxleEdldFN0YXR1cy5oIgogI2luY2x1ZGUgIkxMSW50RGF0YS5oIgogI2luY2x1ZGUg
Ikxvd0xldmVsSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVk
ZSAiUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oIgorI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNz
LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlQ2hhaW4uaCIK
ICNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KQEAgLTE1NCw2NiArMTUzLDQzIEBAIFB1dEJ5SWRT
dGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICBpZiAoIXN0dWJJbmZvLT5zZWVu
KQogICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cygpOwogICAgIAotICAgIHN3aXRjaCAoc3R1
YkluZm8tPmFjY2Vzc1R5cGUpIHsKLSAgICBjYXNlIGFjY2Vzc191bnNldDoKKyAgICBzd2l0Y2gg
KHN0dWJJbmZvLT5jYWNoZVR5cGUpIHsKKyAgICBjYXNlIENhY2hlVHlwZTo6VW5zZXQ6CiAgICAg
ICAgIC8vIElmIHRoZSBKSVQgc2F3IGl0IGJ1dCBkaWRuJ3Qgb3B0aW1pemUgaXQsIHRoZW4gYXNz
dW1lIHRoYXQgdGhpcyB0YWtlcyBzbG93IHBhdGguCiAgICAgICAgIHJldHVybiBQdXRCeUlkU3Rh
dHVzKFRha2VzU2xvd1BhdGgpOwogICAgICAgICAKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRf
cmVwbGFjZTogeworICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZTogewogICAgICAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPQotICAgICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJ
ZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CisgICAg
ICAgICAgICBzdHViSW5mby0+dS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLT5nZXRDb25j
dXJyZW50bHkodWlkKTsKICAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgewogICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAotICAgICAgICAgICAgICAg
IHN0dWJJbmZvLT51LnB1dEJ5SWRSZXBsYWNlLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIG9m
ZnNldCk7CisgICAgICAgICAgICAgICAgc3R1YkluZm8tPnUuYnlJZFNlbGYuYmFzZU9iamVjdFN0
cnVjdHVyZS5nZXQoKSwgb2Zmc2V0KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gUHV0QnlJ
ZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICB9CiAgICAgICAgIAotICAgIGNhc2UgYWNjZXNz
X3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRf
dHJhbnNpdGlvbl9kaXJlY3Q6IHsKLSAgICAgICAgQVNTRVJUKHN0dWJJbmZvLT51LnB1dEJ5SWRU
cmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0Jl
ZW5JbnZhbGlkYXRlZCgpKTsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gCi0gICAg
ICAgICAgICBzdHViSW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUtPmdldENvbmN1
cnJlbnRseSh1aWQpOwotICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7Ci0gICAg
ICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQgPSBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldDo6ZnJvbVJhd1BvaW50ZXIoCi0gICAgICAgICAgICAgICAgc3R1
YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0KTsKLSAgICAgICAgICAg
IGlmICghY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eSgpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAotICAgICAgICAgICAgICAgIHN0dWJJ
bmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgpLAotICAgICAg
ICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5nZXQoKSwK
LSAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQsIG9mZnNldCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgfQotICAgICAgICAK
LSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfbGlzdDogewotICAgICAgICBQb2x5bW9ycGhpY1B1
dEJ5SWRMaXN0KiBsaXN0ID0gc3R1YkluZm8tPnUucHV0QnlJZExpc3QubGlzdDsKKyAgICBjYXNl
IENhY2hlVHlwZTo6U3R1YjogeworICAgICAgICBQb2x5bW9ycGhpY0FjY2VzcyogbGlzdCA9IHN0
dWJJbmZvLT51LnN0dWI7CiAgICAgICAgIAogICAgICAgICBQdXRCeUlkU3RhdHVzIHJlc3VsdDsK
ICAgICAgICAgcmVzdWx0Lm1fc3RhdGUgPSBTaW1wbGU7CiAgICAgICAgIAogICAgICAgICBTdGF0
ZSBzbG93UGF0aFN0YXRlID0gVGFrZXNTbG93UGF0aDsKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBjb25zdCBQdXRCeUlk
QWNjZXNzJiBhY2Nlc3MgPSBsaXN0LT5hdChpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
c3dpdGNoIChhY2Nlc3MudHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIFB1dEJ5SWRBY2Nlc3M6
OlNldHRlcjoKLSAgICAgICAgICAgIGNhc2UgUHV0QnlJZEFjY2Vzczo6Q3VzdG9tU2V0dGVyOgor
ICAgICAgICAgICAgY29uc3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0gbGlzdC0+YXQoaSk7CisgICAg
ICAgICAgICBpZiAoYWNjZXNzLmRvZXNDYWxscygpKQogICAgICAgICAgICAgICAgIHNsb3dQYXRo
U3RhdGUgPSBNYWtlc0NhbGxzOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPnNpemUo
KTsgKytpKSB7Ci0gICAgICAgICAgICBjb25zdCBQdXRCeUlkQWNjZXNzJiBhY2Nlc3MgPSBsaXN0
LT5hdChpKTsKKyAgICAgICAgICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIGFjY2VzcyA9IGxpc3QtPmF0
KGkpOworICAgICAgICAgICAgaWYgKGFjY2Vzcy52aWFQcm94eSgpKQorICAgICAgICAgICAgICAg
IHJldHVybiBQdXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUpOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBQdXRCeUlkVmFyaWFudCB2YXJpYW50OwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBzd2l0Y2ggKGFjY2Vzcy50eXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgUHV0QnlJZEFjY2Vz
czo6UmVwbGFjZTogeworICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpSZXBsYWNlOiB7CiAg
ICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBhY2Nlc3Muc3RydWN0dXJlKCk7
CiAgICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRD
b25jdXJyZW50bHkodWlkKTsKICAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zm
c2V0KSkKQEAgLTIyMiw3ICsxOTgsNyBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNv
bXB1dGVGb3JTCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFB1dEJ5SWRBY2Nlc3M6OlRyYW5zaXRpb246IHsK
KyAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6VHJhbnNpdGlvbjogewogICAgICAgICAgICAg
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9CiAgICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5u
ZXdTdHJ1Y3R1cmUoKS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CiAgICAgICAgICAgICAgICAgaWYg
KCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCkBAIC0yMzEsMTEgKzIwNywxMSBAQCBQdXRCeUlkU3Rh
dHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAgICAgICAgaWYgKCFjb25k
aXRpb25TZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkpCiAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBQdXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUpOwogICAgICAgICAgICAgICAgIHZh
cmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKLSAgICAgICAgICAgICAgICAgICAg
YWNjZXNzLm9sZFN0cnVjdHVyZSgpLCBhY2Nlc3MubmV3U3RydWN0dXJlKCksIGNvbmRpdGlvblNl
dCwgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgYWNjZXNzLnN0cnVjdHVyZSgpLCBhY2Nl
c3MubmV3U3RydWN0dXJlKCksIGNvbmRpdGlvblNldCwgb2Zmc2V0KTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNh
c2UgUHV0QnlJZEFjY2Vzczo6U2V0dGVyOiB7CisgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6
OlNldHRlcjogewogICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYWNjZXNz
LnN0cnVjdHVyZSgpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIENvbXBsZXhH
ZXRTdGF0dXMgY29tcGxleEdldFN0YXR1cyA9IENvbXBsZXhHZXRTdGF0dXM6OmNvbXB1dGVGb3Io
CkBAIC0yNDksMTIgKzIyNSwxMiBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1
dGVGb3JTCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKHNsb3dQYXRo
U3RhdGUpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIENvbXBs
ZXhHZXRTdGF0dXM6OklubGluZWFibGU6IHsKLSAgICAgICAgICAgICAgICAgICAgQWNjZXNzb3JD
YWxsSklUU3R1YlJvdXRpbmUqIHN0dWIgPSBzdGF0aWNfY2FzdDxBY2Nlc3NvckNhbGxKSVRTdHVi
Um91dGluZSo+KAotICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzLnN0dWJSb3V0aW5lKCkp
OworICAgICAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGFjY2Vz
cy5jYWxsTGlua0luZm8oKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGNhbGxMaW5rSW5m
byk7CiAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4g
Y2FsbExpbmtTdGF0dXMgPQogICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3VuaXF1
ZTxDYWxsTGlua1N0YXR1cz4oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbExpbmtT
dGF0dXM6OmNvbXB1dGVGb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tl
ciwgcHJvZmlsZWRCbG9jaywgKnN0dWItPm1fY2FsbExpbmtJbmZvLCBjYWxsRXhpdFNpdGVEYXRh
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tlciwgcHJvZmlsZWRCbG9j
aywgKmNhbGxMaW5rSW5mbywgY2FsbEV4aXRTaXRlRGF0YSkpOwogICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50OjpzZXR0ZXIo
CiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbXBsZXhHZXRTdGF0dXMub2Zm
c2V0KCksIGNvbXBsZXhHZXRTdGF0dXMuY29uZGl0aW9uU2V0KCksCkBAIC0yNjMsNyArMjM5LDcg
QEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
Y2FzZSBQdXRCeUlkQWNjZXNzOjpDdXN0b21TZXR0ZXI6CisgICAgICAgICAgICBjYXNlIEFjY2Vz
c0Nhc2U6OkN1c3RvbVNldHRlcjoKICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1
cyhNYWtlc0NhbGxzKTsKIAogICAgICAgICAgICAgZGVmYXVsdDoKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkocmV2
aXNpb24gMTg5NTQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCArMjcsNyBAQAogI2luY2x1ZGUg
IlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAKICNpbmNsdWRlICJKU09iamVjdC5oIgotI2luY2x1ZGUg
IlBvbHltb3JwaGljR2V0QnlJZExpc3QuaCIKLSNpbmNsdWRlICJQb2x5bW9ycGhpY1B1dEJ5SWRM
aXN0LmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKICNpbmNsdWRlICJSZXBhdGNo
LmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMzYsMzcgKzM1LDUzIEBAIG5hbWVzcGFjZSBKU0Mg
ewogI2lmIEVOQUJMRShKSVQpCiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpkZXJlZigpCiB7Ci0g
ICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3Q6
IHsKLSAgICAgICAgZGVsZXRlIHUuZ2V0QnlJZExpc3QubGlzdDsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfbGlzdDoKLSAgICAgICAgZGVsZXRlIHUu
cHV0QnlJZExpc3QubGlzdDsKKyAgICBzd2l0Y2ggKGNhY2hlVHlwZSkgeworICAgIGNhc2UgQ2Fj
aGVUeXBlOjpTdHViOgorICAgICAgICBkZWxldGUgdS5zdHViOwogICAgICAgICByZXR1cm47Ci0g
ICAgY2FzZSBhY2Nlc3NfaW5fbGlzdDogewotICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVj
dHVyZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlcyA9IHUuaW5MaXN0LnN0cnVjdHVyZUxpc3Q7
Ci0gICAgICAgIGRlbGV0ZSBwb2x5bW9ycGhpY1N0cnVjdHVyZXM7CisgICAgY2FzZSBDYWNoZVR5
cGU6OlVuc2V0OgorICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKKyAgICBjYXNlIENh
Y2hlVHlwZTo6UHV0QnlJZFJlcGxhY2U6CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgY2Fz
ZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgotICAgIGNhc2UgYWNjZXNzX3B1
dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdDoKLSAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQ6OmFkb3B0UmF3UG9pbnRlcih1LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0NvbmRpdGlvblNl
dCk7Ci0gICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0ID0gbnVsbHB0
cjsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmOgotICAg
IGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlOgotICAgIGNhc2UgYWNjZXNzX3Vuc2V0Ogot
ICAgICAgICAvLyBUaGVzZSBpbnN0cnVjdGlvbnMgZG9uJ3QgaGF2ZSB0byByZWxlYXNlIGFueSBh
bGxvY2F0ZWQgbWVtb3J5Ci0gICAgICAgIHJldHVybjsKLSAgICBkZWZhdWx0OgotICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVB0ciBTdHJ1Y3R1cmVTdHVi
SW5mbzo6YWRkQWNjZXNzQ2FzZSgKKyAgICBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBj
b25zdCBJZGVudGlmaWVyJiBpZGVudCwgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGFjY2Vz
c0Nhc2UpCit7CisgICAgaWYgKCFhY2Nlc3NDYXNlKQorICAgICAgICByZXR1cm4gTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyKCk7CisgICAgCisgICAgaWYgKGNhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlN0
dWIpCisgICAgICAgIHJldHVybiB1LnN0dWItPnJlZ2VuZXJhdGVXaXRoQ2FzZSh2bSwgY29kZUJs
b2NrLCAqdGhpcywgaWRlbnQsIFdURjo6bW92ZShhY2Nlc3NDYXNlKSk7CisKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8UG9seW1vcnBoaWNBY2Nlc3M+IGFjY2VzcyA9IHN0ZDo6bWFrZV91bmlxdWU8UG9s
eW1vcnBoaWNBY2Nlc3M+KCk7CisgICAgCisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBY2Nl
c3NDYXNlPj4gYWNjZXNzQ2FzZXM7CisgICAgCisgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nh
c2U+IHByZXZpb3VzQ2FzZSA9CisgICAgICAgIEFjY2Vzc0Nhc2U6OmZyb21TdHJ1Y3R1cmVTdHVi
SW5mbyh2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgKnRoaXMpOworICAgIGlmIChw
cmV2aW91c0Nhc2UpCisgICAgICAgIGFjY2Vzc0Nhc2VzLmFwcGVuZChXVEY6Om1vdmUocHJldmlv
dXNDYXNlKSk7CisKKyAgICBhY2Nlc3NDYXNlcy5hcHBlbmQoV1RGOjptb3ZlKGFjY2Vzc0Nhc2Up
KTsKKworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByZXN1bHQgPQorICAgICAgICBhY2Nlc3Mt
PnJlZ2VuZXJhdGVXaXRoQ2FzZXModm0sIGNvZGVCbG9jaywgKnRoaXMsIGlkZW50LCBXVEY6Om1v
dmUoYWNjZXNzQ2FzZXMpKTsKKworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyKCk7CisKKyAgICBjYWNoZVR5cGUgPSBDYWNoZVR5cGU6OlN0dWI7
CisgICAgdS5zdHViID0gYWNjZXNzLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQog
CiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpyZXNldChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsK
LSAgICBpZiAoYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpCisgICAgaWYgKGNhY2hlVHlwZSA9
PSBDYWNoZVR5cGU6OlVuc2V0KQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaWYgKE9wdGlv
bnM6OnZlcmJvc2VPU1IoKSkgewpAQCAtNzQsNjAgKzg5LDM4IEBAIHZvaWQgU3RydWN0dXJlU3R1
YkluZm86OnJlc2V0KENvZGVCbG9jayoKICAgICAgICAgLy8gb2YgdGhlIENvZGVCbG9jay4KICAg
ICAgICAgZGF0YUxvZygiQ2xlYXJpbmcgc3RydWN0dXJlIGNhY2hlIChraW5kICIsIHN0YXRpY19j
YXN0PGludD4oYWNjZXNzVHlwZSksICIpIGluICIsIFJhd1BvaW50ZXIoY29kZUJsb2NrKSwgIi5c
biIpOwogICAgIH0KLSAgICAKLSAgICBpZiAoaXNHZXRCeUlkQWNjZXNzKHN0YXRpY19jYXN0PEFj
Y2Vzc1R5cGU+KGFjY2Vzc1R5cGUpKSkKKworICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgeworICAg
IGNhc2UgQWNjZXNzVHlwZTo6R2V0OgogICAgICAgICByZXNldEdldEJ5SUQoY29kZUJsb2NrLCAq
dGhpcyk7Ci0gICAgZWxzZSBpZiAoaXNQdXRCeUlkQWNjZXNzKHN0YXRpY19jYXN0PEFjY2Vzc1R5
cGU+KGFjY2Vzc1R5cGUpKSkKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQ
dXQ6CiAgICAgICAgIHJlc2V0UHV0QnlJRChjb2RlQmxvY2ssICp0aGlzKTsKLSAgICBlbHNlIHsK
LSAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNJbkFjY2VzcyhzdGF0aWNfY2FzdDxBY2Nlc3NUeXBl
PihhY2Nlc3NUeXBlKSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Oklu
OgogICAgICAgICByZXNldEluKGNvZGVCbG9jaywgKnRoaXMpOworICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgCiAgICAgZGVyZWYoKTsKLSAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX3Vuc2V0Owot
ICAgIHN0dWJSb3V0aW5lID0gbnVsbHB0cjsKLSAgICB3YXRjaHBvaW50cyA9IG51bGxwdHI7Cisg
ICAgY2FjaGVUeXBlID0gQ2FjaGVUeXBlOjpVbnNldDsKIH0KIAogdm9pZCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6dmlzaXRXZWFrUmVmZXJlbmNlcyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBW
TSYgdm0gPSAqY29kZUJsb2NrLT52bSgpOwotICAgIAotICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkg
ewotICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmOgotICAgICAgICBpZiAoSGVhcDo6aXNN
YXJrZWQodS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpKSkKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2xp
c3Q6IHsKLSAgICAgICAgaWYgKHUuZ2V0QnlJZExpc3QubGlzdC0+dmlzaXRXZWFrKHZtKSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgYWNjZXNz
X3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRf
dHJhbnNpdGlvbl9kaXJlY3Q6Ci0gICAgICAgIGlmIChIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRU
cmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgpKQotICAgICAgICAgICAgJiYgSGVhcDo6
aXNNYXJrZWQodS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUuZ2V0KCkpCi0gICAgICAgICAg
ICAmJiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6ZnJvbVJhd1BvaW50ZXIodS5wdXRCeUlk
VHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQpLmFyZVN0aWxsTGl2ZSgpKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFj
ZToKLSAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKHUucHV0QnlJZFJlcGxhY2UuYmFzZU9iamVj
dFN0cnVjdHVyZS5nZXQoKSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9saXN0OgotICAgICAgICBpZiAodS5wdXRCeUlkTGlz
dC5saXN0LT52aXNpdFdlYWsodm0pKQorCisgICAgc3dpdGNoIChjYWNoZVR5cGUpIHsKKyAgICBj
YXNlIENhY2hlVHlwZTo6R2V0QnlJZFNlbGY6CisgICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRS
ZXBsYWNlOgorICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQodS5ieUlkU2VsZi5iYXNlT2JqZWN0
U3RydWN0dXJlLmdldCgpKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBhY2Nlc3NfaW5fbGlzdDogewotICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVj
dHVyZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlcyA9IHUuaW5MaXN0LnN0cnVjdHVyZUxpc3Q7
Ci0gICAgICAgIGlmIChwb2x5bW9ycGhpY1N0cnVjdHVyZXMtPnZpc2l0V2Vhayh1LmluTGlzdC5s
aXN0U2l6ZSkpCisgICAgY2FzZSBDYWNoZVR5cGU6OlN0dWI6CisgICAgICAgIGlmICh1LnN0dWIt
PnZpc2l0V2Vhayh2bSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGJyZWFrOwotICAg
IH0KICAgICBkZWZhdWx0OgotICAgICAgICAvLyBUaGUgcmVzdCBvZiB0aGUgaW5zdHJ1Y3Rpb25z
IGRvbid0IHJlcXVpcmUgcmVmZXJlbmNlcywgc28gdGhlcmUgaXMgbm8gbmVlZCB0bwotICAgICAg
ICAvLyBkbyBhbnl0aGluZy4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJl
dmlzaW9uIDE4OTU0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1
cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAi
TWFjcm9Bc3NlbWJsZXIuaCIKICNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5o
IgogI2luY2x1ZGUgIk9wY29kZS5oIgotI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzU3RydWN0
dXJlTGlzdC5oIgorI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCiAjaW5jbHVkZSAiUmVn
aXN0ZXJTZXQuaCIKICNpbmNsdWRlICJTcGlsbFJlZ2lzdGVyc01vZGUuaCIKICNpbmNsdWRlICJT
dHJ1Y3R1cmUuaCIKQEAgLTQyLDU3ICs0MiwyNSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIEVO
QUJMRShKSVQpCiAKLWNsYXNzIFBvbHltb3JwaGljR2V0QnlJZExpc3Q7Ci1jbGFzcyBQb2x5bW9y
cGhpY1B1dEJ5SWRMaXN0OworY2xhc3MgUG9seW1vcnBoaWNBY2Nlc3M7CiAKLWVudW0gQWNjZXNz
VHlwZSB7Ci0gICAgYWNjZXNzX2dldF9ieV9pZF9zZWxmLAotICAgIGFjY2Vzc19nZXRfYnlfaWRf
bGlzdCwKLSAgICBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsLAotICAgIGFjY2Vz
c19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3QsCi0gICAgYWNjZXNzX3B1dF9ieV9pZF9yZXBs
YWNlLAotICAgIGFjY2Vzc19wdXRfYnlfaWRfbGlzdCwKLSAgICBhY2Nlc3NfdW5zZXQsCi0gICAg
YWNjZXNzX2luX2xpc3QKK2VudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhfdCB7CisgICAgR2V0
LAorICAgIFB1dCwKKyAgICBJbgogfTsKIAotaW5saW5lIGJvb2wgaXNHZXRCeUlkQWNjZXNzKEFj
Y2Vzc1R5cGUgYWNjZXNzVHlwZSkKLXsKLSAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKLSAgICBj
YXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZjoKLSAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfbGlz
dDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLX0KLSAgICAKLWlubGluZSBib29sIGlzUHV0QnlJZEFjY2VzcyhBY2Nlc3NU
eXBlIGFjY2Vzc1R5cGUpCi17Ci0gICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7Ci0gICAgY2FzZSBh
Y2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgotICAgIGNhc2UgYWNjZXNzX3B1dF9i
eV9pZF90cmFuc2l0aW9uX2RpcmVjdDoKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFj
ZToKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfbGlzdDoKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotaW5saW5l
IGJvb2wgaXNJbkFjY2VzcyhBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUpCi17Ci0gICAgc3dpdGNoIChh
Y2Nlc3NUeXBlKSB7Ci0gICAgY2FzZSBhY2Nlc3NfaW5fbGlzdDoKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KK2VudW0g
Y2xhc3MgQ2FjaGVUeXBlIDogaW50OF90IHsKKyAgICBVbnNldCwKKyAgICBHZXRCeUlkU2VsZiwK
KyAgICBQdXRCeUlkUmVwbGFjZSwKKyAgICBTdHViCit9OwogCiBzdHJ1Y3QgU3RydWN0dXJlU3R1
YkluZm8gewotICAgIFN0cnVjdHVyZVN0dWJJbmZvKCkKLSAgICAgICAgOiBhY2Nlc3NUeXBlKGFj
Y2Vzc191bnNldCkKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyhBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUp
CisgICAgICAgIDogYWNjZXNzVHlwZShhY2Nlc3NUeXBlKQorICAgICAgICAsIGNhY2hlVHlwZShD
YWNoZVR5cGU6OlVuc2V0KQogICAgICAgICAsIHNlZW4oZmFsc2UpCiAgICAgICAgICwgcmVzZXRC
eUdDKGZhbHNlKQogICAgICAgICAsIHRvb2tTbG93UGF0aChmYWxzZSkKQEAgLTEwMCw1MyArNjgs
MzEgQEAgc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICB7CiAgICAgfQogCi0gICAgdm9p
ZCBpbml0R2V0QnlJZFNlbGYoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIGJhc2VP
YmplY3RTdHJ1Y3R1cmUpCisgICAgdm9pZCBpbml0R2V0QnlJZFNlbGYoVk0mIHZtLCBKU0NlbGwq
IG93bmVyLCBTdHJ1Y3R1cmUqIGJhc2VPYmplY3RTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCkKICAgICB7Ci0gICAgICAgIGFjY2Vzc1R5cGUgPSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGY7
Ci0KLSAgICAgICAgdS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLnNldCh2bSwgb3du
ZXIsIGJhc2VPYmplY3RTdHJ1Y3R1cmUpOwotICAgIH0KKyAgICAgICAgY2FjaGVUeXBlID0gQ2Fj
aGVUeXBlOjpHZXRCeUlkU2VsZjsKIAotICAgIHZvaWQgaW5pdEdldEJ5SWRMaXN0KFBvbHltb3Jw
aGljR2V0QnlJZExpc3QqIGxpc3QpCi0gICAgewotICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNz
X2dldF9ieV9pZF9saXN0OwotICAgICAgICB1LmdldEJ5SWRMaXN0Lmxpc3QgPSBsaXN0OworICAg
ICAgICB1LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgYmFzZU9i
amVjdFN0cnVjdHVyZSk7CisgICAgICAgIHUuYnlJZFNlbGYub2Zmc2V0ID0gb2Zmc2V0OwogICAg
IH0KIAotICAgIC8vIFB1dEJ5SWQqCi0KLSAgICB2b2lkIGluaXRQdXRCeUlkVHJhbnNpdGlvbihW
TSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogcHJldmlvdXNTdHJ1Y3R1cmUsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQs
IGJvb2wgaXNEaXJlY3QpCisgICAgdm9pZCBpbml0UHV0QnlJZFJlcGxhY2UoVk0mIHZtLCBKU0Nl
bGwqIG93bmVyLCBTdHJ1Y3R1cmUqIGJhc2VPYmplY3RTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCkKICAgICB7Ci0gICAgICAgIGlmIChpc0RpcmVjdCkKLSAgICAgICAgICAgIGFjY2Vz
c1R5cGUgPSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0OwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25v
cm1hbDsKKyAgICAgICAgY2FjaGVUeXBlID0gQ2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZTsKIAot
ICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLnNldCh2bSwgb3du
ZXIsIHByZXZpb3VzU3RydWN0dXJlKTsKLSAgICAgICAgdS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1
Y3R1cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKLSAgICAgICAgdS5wdXRCeUlkVHJhbnNp
dGlvbi5yYXdDb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQucmVsZWFzZVJhd1BvaW50ZXIoKTsK
KyAgICAgICAgdS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLnNldCh2bSwgb3duZXIsIGJh
c2VPYmplY3RTdHJ1Y3R1cmUpOworICAgICAgICB1LmJ5SWRTZWxmLm9mZnNldCA9IG9mZnNldDsK
ICAgICB9CiAKLSAgICB2b2lkIGluaXRQdXRCeUlkUmVwbGFjZShWTSYgdm0sIEpTQ2VsbCogb3du
ZXIsIFN0cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIGFjY2Vz
c1R5cGUgPSBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2U7Ci0gICAgCi0gICAgICAgIHUucHV0QnlJ
ZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBiYXNlT2JqZWN0U3Ry
dWN0dXJlKTsKLSAgICB9Ci0gICAgICAgIAotICAgIHZvaWQgaW5pdFB1dEJ5SWRMaXN0KFBvbHlt
b3JwaGljUHV0QnlJZExpc3QqIGxpc3QpCi0gICAgewotICAgICAgICBhY2Nlc3NUeXBlID0gYWNj
ZXNzX3B1dF9ieV9pZF9saXN0OwotICAgICAgICB1LnB1dEJ5SWRMaXN0Lmxpc3QgPSBsaXN0Owot
ICAgIH0KLSAgICAKLSAgICB2b2lkIGluaXRJbkxpc3QoUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1
cmVMaXN0KiBsaXN0LCBpbnQgbGlzdFNpemUpCisgICAgdm9pZCBpbml0U3R1YihzdGQ6OnVuaXF1
ZV9wdHI8UG9seW1vcnBoaWNBY2Nlc3M+IHN0dWIpCiAgICAgewotICAgICAgICBhY2Nlc3NUeXBl
ID0gYWNjZXNzX2luX2xpc3Q7Ci0gICAgICAgIHUuaW5MaXN0LnN0cnVjdHVyZUxpc3QgPSBsaXN0
OwotICAgICAgICB1LmluTGlzdC5saXN0U2l6ZSA9IGxpc3RTaXplOworICAgICAgICBjYWNoZVR5
cGUgPSBDYWNoZVR5cGU6OlN0dWI7CisgICAgICAgIHUuc3R1YiA9IHN0dWIucmVsZWFzZSgpOwog
ICAgIH0KLSAgICAgICAgCisKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgYWRkQWNjZXNzQ2Fz
ZSgKKyAgICAgICAgVk0mLCBDb2RlQmxvY2sqLCBjb25zdCBJZGVudGlmaWVyJiwgc3RkOjp1bmlx
dWVfcHRyPEFjY2Vzc0Nhc2U+KTsKKwogICAgIHZvaWQgcmVzZXQoQ29kZUJsb2NrKik7CiAKICAg
ICB2b2lkIGRlcmVmKCk7CkBAIC0xNjUsMTUgKzExMSw5IEBAIHN0cnVjdCBTdHJ1Y3R1cmVTdHVi
SW5mbyB7CiAgICAgICAgIHNlZW4gPSB0cnVlOwogICAgIH0KICAgICAgICAgCi0gICAgU3RydWN0
dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogYWRkV2F0Y2hwb2ludCgKLSAgICAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24g
PSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFdhdGNo
cG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6ZW5zdXJlUmVmZXJlbmNlQW5kQWRkV2F0Y2hwb2lu
dCgKLSAgICAgICAgICAgIHdhdGNocG9pbnRzLCBjb2RlQmxvY2ssIHRoaXMsIGNvbmRpdGlvbik7
Ci0gICAgfQotICAgIAotICAgIGludDhfdCBhY2Nlc3NUeXBlOwotICAgIGJvb2wgc2VlbiA6IDE7
CisgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlOworICAgIENhY2hlVHlwZSBjYWNoZVR5cGU7Cisg
ICAgYm9vbCBzZWVuOwogICAgIGJvb2wgcmVzZXRCeUdDIDogMTsKICAgICBib29sIHRvb2tTbG93
UGF0aCA6IDE7CiAKQEAgLTIwMywzNCArMTQzLDEzIEBAIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5m
byB7CiAKICAgICB1bmlvbiB7CiAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICAvLyBJdCB3
b3VsZCBiZSB1bndpc2UgdG8gcHV0IGFueXRoaW5nIGhlcmUsIGFzIGl0IHdpbGwgc3VyZWx5IGJl
IG92ZXJ3cml0dGVuLgotICAgICAgICB9IHVuc2V0OwotICAgICAgICBzdHJ1Y3QgewotICAgICAg
ICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IGJhc2VPYmplY3RTdHJ1Y3R1cmU7Ci0g
ICAgICAgIH0gZ2V0QnlJZFNlbGY7Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBQb2x5
bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0OwotICAgICAgICB9IGdldEJ5SWRMaXN0OwotICAgICAg
ICBzdHJ1Y3QgewotICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IHByZXZp
b3VzU3RydWN0dXJlOwotICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IHN0
cnVjdHVyZTsKLSAgICAgICAgICAgIHZvaWQqIHJhd0NvbmRpdGlvblNldDsKLSAgICAgICAgfSBw
dXRCeUlkVHJhbnNpdGlvbjsKLSAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIFdyaXRlQmFy
cmllckJhc2U8U3RydWN0dXJlPiBiYXNlT2JqZWN0U3RydWN0dXJlOwotICAgICAgICB9IHB1dEJ5
SWRSZXBsYWNlOwotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgUG9seW1vcnBoaWNQdXRC
eUlkTGlzdCogbGlzdDsKLSAgICAgICAgfSBwdXRCeUlkTGlzdDsKLSAgICAgICAgc3RydWN0IHsK
LSAgICAgICAgICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogc3RydWN0dXJlTGlz
dDsKLSAgICAgICAgICAgIGludCBsaXN0U2l6ZTsKLSAgICAgICAgfSBpbkxpc3Q7CisgICAgICAg
ICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CisgICAgICAgIH0gYnlJZFNlbGY7CisgICAgICAg
IFBvbHltb3JwaGljQWNjZXNzKiBzdHViOwogICAgIH0gdTsKIAotICAgIFJlZlB0cjxKSVRTdHVi
Um91dGluZT4gc3R1YlJvdXRpbmU7CiAgICAgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsUmV0dXJuTG9j
YXRpb247Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5m
bz4gd2F0Y2hwb2ludHM7CiB9OwogCiBpbmxpbmUgQ29kZU9yaWdpbiBnZXRTdHJ1Y3R1cmVTdHVi
SW5mb0NvZGVPcmlnaW4oU3RydWN0dXJlU3R1YkluZm8mIHN0cnVjdHVyZVN0dWJJbmZvKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJ
KHJldmlzaW9uIDE4OTU0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MzUsNyArOTM1LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUluKE5vZGUqIG5vZAogICAgIAogICAgIGlmIChKU1N0cmluZyog
c3RyaW5nID0gbm9kZS0+Y2hpbGQxKCktPmR5bmFtaWNDYXN0Q29uc3RhbnQ8SlNTdHJpbmcqPigp
KSB7CiAgICAgICAgIGlmIChzdHJpbmctPnRyeUdldFZhbHVlSW1wbCgpICYmIHN0cmluZy0+dHJ5
R2V0VmFsdWVJbXBsKCktPmlzQXRvbWljKCkpIHsKLSAgICAgICAgICAgIFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRTdHViSW5mbygpOworICAgICAg
ICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV9qaXQuY29kZUJsb2NrKCktPmFk
ZFN0dWJJbmZvKEFjY2Vzc1R5cGU6OkluKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5j
cHAJKHJldmlzaW9uIDE4OTU0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29t
cGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzOCw3ICs1MzgsNyBAQCBzdGF0aWMgdm9pZCBm
aXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQg
dXNlZFJlZ2lzdGVycyA9IHVzZWRSZWdpc3RlcnNGb3IocmVjb3JkKTsKICAgICAgICAgICAgICAg
ICBHUFJSZWcgcmVzdWx0ID0gcmVjb3JkLmxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKTsKICAgICAg
ICAgICAgICAgICBHUFJSZWcgb2JqID0gcmVjb3JkLmxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKTsK
LSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBjb2RlQmxvY2st
PmFkZFN0dWJJbmZvKCk7IAorICAgICAgICAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbyA9IGNvZGVCbG9jay0+YWRkU3R1YkluZm8oQWNjZXNzVHlwZTo6SW4pOyAKICAgICAgICAg
ICAgICAgICBzdHViSW5mby0+Y29kZU9yaWdpbiA9IGNvZGVPcmlnaW47CiAgICAgICAgICAgICAg
ICAgc3R1YkluZm8tPmNhbGxTaXRlSW5kZXggPSBjaGVja0luLmNhbGxTaXRlSW5kZXgoKTsKICAg
ICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFzZUdQUiA9IHN0YXRpY19jYXN0PGludDhf
dD4ob2JqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQWNjZXNzb3JDYWxsSklU
U3R1YlJvdXRpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuY3BwCShyZXZpc2lvbiAxODk1NDMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0FjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJB
Y2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5oIgotCi0jaWYgRU5BQkxFKEpJVCkKLQotI2luY2x1
ZGUgIkNhbGxMaW5rSW5mby5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotQWNjZXNzb3JDYWxsSklU
U3R1YlJvdXRpbmU6OkFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lKAotICAgIGNvbnN0IE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiYgY29kZSwgVk0mIHZtLCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtJ
bmZvPiBpbmZvKQotICAgIDogR0NBd2FyZUpJVFN0dWJSb3V0aW5lKGNvZGUsIHZtKQotICAgICwg
bV9jYWxsTGlua0luZm8oV1RGOjptb3ZlKGluZm8pKQotewotfQotCi1BY2Nlc3NvckNhbGxKSVRT
dHViUm91dGluZTo6fkFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lKCkKLXsKLX0KLQotYm9vbCBB
Y2Nlc3NvckNhbGxKSVRTdHViUm91dGluZTo6dmlzaXRXZWFrKFZNJiB2bSkKLXsKLSAgICBtX2Nh
bGxMaW5rSW5mby0+dmlzaXRXZWFrKHZtKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0FjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9BY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5o
CShyZXZpc2lvbiAxODk1NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0FjY2Vzc29y
Q2FsbEpJVFN0dWJSb3V0aW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTcgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVm
IEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lX2gKLSNkZWZpbmUgQWNjZXNzb3JDYWxsSklUU3R1
YlJvdXRpbmVfaAotCi0jaWYgRU5BQkxFKEpJVCkKLQotI2luY2x1ZGUgIkdDQXdhcmVKSVRTdHVi
Um91dGluZS5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgQ2FsbExpbmtJbmZvOwotCi0v
LyBKSVQgc3R1YiByb3V0aW5lIGZvciB1c2UgYnkgSmF2YVNjcmlwdCBhY2Nlc3NvcnMuIFRoZXNl
IHdpbGwgYmUgbWFraW5nIGEgSlMKLS8vIGNhbGwgdGhhdCByZXF1aXJlcyBpbmxpbmUgY2FjaGlu
Zy4gCi0KLWNsYXNzIEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lIDogcHVibGljIEdDQXdhcmVK
SVRTdHViUm91dGluZSB7Ci1wdWJsaWM6Ci0gICAgQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUo
Ci0gICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYsIFZNJiwgc3RkOjp1bmlxdWVf
cHRyPENhbGxMaW5rSW5mbz4pOwotICAgIAotICAgIHZpcnR1YWwgfkFjY2Vzc29yQ2FsbEpJVFN0
dWJSb3V0aW5lKCk7Ci0gICAgCi0gICAgdmlydHVhbCBib29sIHZpc2l0V2VhayhWTSYpIG92ZXJy
aWRlOwotICAgIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJ
bmZvOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoSklUKQot
Ci0jZW5kaWYgLy8gQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmVfaAotCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDE4OTU0MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU2Myw3ICs1NjMsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBicmFuY2gz
MihFcXVhbCwgcmVncy50YWdHUFIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVU
YWcpKTsKICNlbmRpZgogICAgIH0KLSAgICAKKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAg
ICAgSnVtcCBicmFuY2hTdHJ1Y3R1cmUoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIFQg
bGVmdEhhbmRTaWRlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7CkBAIC04MzIsNiArODMy
LDE1IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0KIAorICAgIHZvaWQgYm94Qm9vbGVhblBheWxv
YWQoYm9vbCB2YWx1ZSwgR1BSUmVnIHBheWxvYWRHUFIpCisgICAgeworI2lmIFVTRShKU1ZBTFVF
NjQpCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UgKyB2YWx1ZSksIHBheWxv
YWRHUFIpOworI2Vsc2UKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIodmFsdWUpLCBwYXlsb2Fk
R1BSKTsKKyNlbmRpZgorICAgIH0KKwogICAgIHZvaWQgYm94Qm9vbGVhbihHUFJSZWcgYm9vbEdQ
UiwgSlNWYWx1ZVJlZ3MgYm94ZWRSZWdzKQogICAgIHsKICAgICAgICAgYm94Qm9vbGVhblBheWxv
YWQoYm9vbEdQUiwgYm94ZWRSZWdzLnBheWxvYWRHUFIoKSk7CkBAIC04MzksNiArODQ4LDE3IEBA
IHB1YmxpYzoKICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZyks
IGJveGVkUmVncy50YWdHUFIoKSk7CiAjZW5kaWYKICAgICB9CisKKyAgICB2b2lkIGJveEludDMy
KEdQUlJlZyBpbnRHUFIsIEpTVmFsdWVSZWdzIGJveGVkUmVncykKKyAgICB7CisjaWYgVVNFKEpT
VkFMVUU2NCkKKyAgICAgICAgbW92ZShpbnRHUFIsIGJveGVkUmVncy5ncHIoKSk7CisgICAgICAg
IG9yNjQoVHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpLCBib3hlZFJlZ3MuZ3ByKCkpOworI2Vs
c2UKKyAgICAgICAgbW92ZShpbnRHUFIsIGJveGVkUmVncy5wYXlsb2FkR1BSKCkpOworICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIGJveGVkUmVncy50YWdHUFIo
KSk7CisjZW5kaWYKKyAgICB9CiAgICAgCiAgICAgdm9pZCBjYWxsRXhjZXB0aW9uRnV6eigpOwog
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAxODk1NDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2
Niw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgc3RydWN0IEluc3RydWN0aW9uOwogICAgIHN0
cnVjdCBPcGVyYW5kVHlwZXM7Ci0gICAgc3RydWN0IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJl
TGlzdDsKICAgICBzdHJ1Y3QgU2ltcGxlSnVtcFRhYmxlOwogICAgIHN0cnVjdCBTdHJpbmdKdW1w
VGFibGU7CiAgICAgc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJKHJl
dmlzaW9uIDE4OTU0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2Fj
aGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiwyMiArMzYsMjQgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKIHN0YXRpYyBTdHJ1Y3R1cmVTdHViSW5mbyogZ2FyYmFnZVN0dWJJbmZvKCkKIHsK
LSAgICBzdGF0aWMgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbmV3IFN0cnVjdHVyZVN0
dWJJbmZvKCk7CisgICAgc3RhdGljIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG5ldyBT
dHJ1Y3R1cmVTdHViSW5mbyhBY2Nlc3NUeXBlOjpHZXQpOwogICAgIHJldHVybiBzdHViSW5mbzsK
IH0KIAotSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OkpJVElubGluZUNhY2hlR2VuZXJhdG9yKENv
ZGVCbG9jayogY29kZUJsb2NrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgg
Y2FsbFNpdGUpCitKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6SklUSW5saW5lQ2FjaGVHZW5lcmF0
b3IoCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2Fs
bFNpdGVJbmRleCBjYWxsU2l0ZSwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlKQogICAgIDogbV9jb2Rl
QmxvY2soY29kZUJsb2NrKQogewotICAgIG1fc3R1YkluZm8gPSBtX2NvZGVCbG9jayA/IG1fY29k
ZUJsb2NrLT5hZGRTdHViSW5mbygpIDogZ2FyYmFnZVN0dWJJbmZvKCk7CisgICAgbV9zdHViSW5m
byA9IG1fY29kZUJsb2NrID8gbV9jb2RlQmxvY2stPmFkZFN0dWJJbmZvKGFjY2Vzc1R5cGUpIDog
Z2FyYmFnZVN0dWJJbmZvKCk7CiAgICAgbV9zdHViSW5mby0+Y29kZU9yaWdpbiA9IGNvZGVPcmln
aW47CiAgICAgbV9zdHViSW5mby0+Y2FsbFNpdGVJbmRleCA9IGNhbGxTaXRlOwogfQogCiBKSVRC
eUlkR2VuZXJhdG9yOjpKSVRCeUlkR2VuZXJhdG9yKAotICAgIENvZGVCbG9jayogY29kZUJsb2Nr
LCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJl
Z2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLAotICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVS
ZWdzIHZhbHVlLCBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlKQotICAgIDogSklUSW5saW5l
Q2FjaGVHZW5lcmF0b3IoY29kZUJsb2NrLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSkKKyAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNh
bGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVz
ZWRSZWdpc3RlcnMsIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLAorICAgIFNw
aWxsUmVnaXN0ZXJzTW9kZSBzcGlsbE1vZGUpCisgICAgOiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRv
cihjb2RlQmxvY2ssIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBhY2Nlc3NUeXBlKQogICAgICwgbV9i
YXNlKGJhc2UpCiAgICAgLCBtX3ZhbHVlKHZhbHVlKQogewpAQCAtMTE0LDcgKzExNiw4IEBAIHZv
aWQgSklUQnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aEMKIEpJVEdldEJ5SWRHZW5lcmF0
b3I6OkpJVEdldEJ5SWRHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVP
cmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgY29uc3QgUmVnaXN0ZXJT
ZXQmIHVzZWRSZWdpc3RlcnMsCiAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFs
dWUsIFNwaWxsUmVnaXN0ZXJzTW9kZSBzcGlsbE1vZGUpCi0gICAgOiBKSVRCeUlkR2VuZXJhdG9y
KGNvZGVCbG9jaywgY29kZU9yaWdpbiwgY2FsbFNpdGUsIHVzZWRSZWdpc3RlcnMsIGJhc2UsIHZh
bHVlLCBzcGlsbE1vZGUpCisgICAgOiBKSVRCeUlkR2VuZXJhdG9yKAorICAgICAgICBjb2RlQmxv
Y2ssIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpHZXQsIHVzZWRSZWdpc3RlcnMs
IGJhc2UsIHZhbHVlLCBzcGlsbE1vZGUpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoYmFzZS5wYXls
b2FkR1BSKCkgIT0gdmFsdWUudGFnR1BSKCkpOwogfQpAQCAtMTQwLDcgKzE0Myw4IEBAIEpJVFB1
dEJ5SWRHZW5lcmF0b3I6OkpJVFB1dEJ5SWRHZW5lcmF0b3IKICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBjb25z
dCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywKICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1Zh
bHVlUmVncyB2YWx1ZSwgR1BSUmVnIHNjcmF0Y2gsIFNwaWxsUmVnaXN0ZXJzTW9kZSBzcGlsbE1v
ZGUsCiAgICAgRUNNQU1vZGUgZWNtYU1vZGUsIFB1dEtpbmQgcHV0S2luZCkKLSAgICA6IEpJVEJ5
SWRHZW5lcmF0b3IoY29kZUJsb2NrLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgdXNlZFJlZ2lzdGVy
cywgYmFzZSwgdmFsdWUsIHNwaWxsTW9kZSkKKyAgICA6IEpJVEJ5SWRHZW5lcmF0b3IoCisgICAg
ICAgIGNvZGVCbG9jaywgY29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OlB1dCwgdXNl
ZFJlZ2lzdGVycywgYmFzZSwgdmFsdWUsIHNwaWxsTW9kZSkKICAgICAsIG1fc2NyYXRjaChzY3Jh
dGNoKQogICAgICwgbV9lY21hTW9kZShlY21hTW9kZSkKICAgICAsIG1fcHV0S2luZChwdXRLaW5k
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2Fj
aGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMTg5NTQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw2ICszMyw3
IEBACiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIlB1dEtpbmQuaCIKICNpbmNs
dWRlICJSZWdpc3RlclNldC5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAKIG5h
bWVzcGFjZSBKU0MgewogCkBAIC00MSw3ICs0Miw3IEBAIGNsYXNzIENvZGVCbG9jazsKIGNsYXNz
IEpJVElubGluZUNhY2hlR2VuZXJhdG9yIHsKIHByb3RlY3RlZDoKICAgICBKSVRJbmxpbmVDYWNo
ZUdlbmVyYXRvcigpIHsgfQotICAgIEpJVElubGluZUNhY2hlR2VuZXJhdG9yKENvZGVCbG9jayos
IENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgpOworICAgIEpJVElubGluZUNhY2hlR2VuZXJhdG9y
KENvZGVCbG9jayosIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIEFjY2Vzc1R5cGUpOwogICAg
IAogcHVibGljOgogICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbygpIGNvbnN0IHsgcmV0
dXJuIG1fc3R1YkluZm87IH0KQEAgLTU2LDggKzU3LDggQEAgcHJvdGVjdGVkOgogICAgIEpJVEJ5
SWRHZW5lcmF0b3IoKSB7IH0KIAogICAgIEpJVEJ5SWRHZW5lcmF0b3IoCi0gICAgICAgIENvZGVC
bG9jayosIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJlZ2lzdGVyU2V0JiwgSlNW
YWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsCi0gICAgICAgIFNwaWxsUmVnaXN0ZXJz
TW9kZSBzcGlsbE1vZGUpOworICAgICAgICBDb2RlQmxvY2sqLCBDb2RlT3JpZ2luLCBDYWxsU2l0
ZUluZGV4LCBBY2Nlc3NUeXBlLCBjb25zdCBSZWdpc3RlclNldCYsIEpTVmFsdWVSZWdzIGJhc2Us
CisgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlLCBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2Rl
KTsKICAgICAKIHB1YmxpYzoKICAgICB2b2lkIHJlcG9ydFNsb3dQYXRoQ2FsbChNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgc2xvd1BhdGhCZWdpbiwgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNp
b24gMTg5NTQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTYzLDI0ICsxNjMsNiBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShiYXNlVmFs
dWUuZ2V0KGV4ZWMsIGlkZW50LCBzbG90KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlzdChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFsdWUgYmFzZSwgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCkKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLQotICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVu
dGlmaWVyOjpmcm9tVWlkKHZtLCB1aWQpOwotICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0
YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKTsKLQotICAgIEpTVmFs
dWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGJhc2UpOwotICAgIFByb3BlcnR5U2xvdCBz
bG90KGJhc2VWYWx1ZSk7Ci0gICAgYm9vbCBoYXNSZXN1bHQgPSBiYXNlVmFsdWUuZ2V0UHJvcGVy
dHlTbG90KGV4ZWMsIGlkZW50LCBzbG90KTsKLSAgICAKLSAgICBpZiAoYWNjZXNzVHlwZSA9PSBz
dGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSkpCi0gICAgICAgIGJ1
aWxkR2V0QnlJRExpc3QoZXhlYywgYmFzZVZhbHVlLCBpZGVudCwgc2xvdCwgKnN0dWJJbmZvKTsK
LQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoaGFzUmVzdWx0PyBzbG90LmdldFZhbHVlKGV4
ZWMsIGlkZW50KSA6IGpzVW5kZWZpbmVkKCkpOwotfQotCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFsdWUgYmFzZSwgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKQEAgLTE5Nyw3ICsxNzksNiBA
QCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAgICAgICAgIHN0dWJJ
bmZvLT5zZWVuID0gdHJ1ZTsKICAgICAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGhhc1Jl
c3VsdD8gc2xvdC5nZXRWYWx1ZShleGVjLCBpZGVudCkgOiBqc1VuZGVmaW5lZCgpKTsKLQogfQog
CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkluT3B0aW1pemUoRXhlY1N0
YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEpTQ2VsbCogYmFzZSwgVW5p
cXVlZFN0cmluZ0ltcGwqIGtleSkKQEAgLTM5NCw5MCArMzc1LDYgQEAgdm9pZCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlYwogICAgICAgICBzdHViSW5mby0+c2VlbiA9IHRydWU7
CiB9CiAKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0QnVpbGRMaXN0
KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIAotICAgIElkZW50aWZpZXIgaWRl
bnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCB1aWQpOwotICAgIEFjY2Vzc1R5cGUgYWNjZXNz
VHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKTsKLQot
ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBK
U1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSk7Ci0gICAgUHV0
UHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlLCB0cnVlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0
QnlJZENvbnRleHQoKSk7Ci0gICAgCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlVmFs
dWUuaXNDZWxsKCkgPyBiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgqdm0pIDogbnVsbHB0
cjsgCi0gICAgYmFzZVZhbHVlLnB1dChleGVjLCBpZGVudCwgdmFsdWUsIHNsb3QpOwotCi0gICAg
aWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vz
c1R5cGUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBidWlsZFB1dEJ5SWRMaXN0KGV4ZWMsIGJh
c2VWYWx1ZSwgc3RydWN0dXJlLCBpZGVudCwgc2xvdCwgKnN0dWJJbmZvLCBOb3REaXJlY3QpOwot
fQotCi12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdEJ1aWxkTGlz
dChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgVW5pcXVlZFN0
cmluZ0ltcGwqIHVpZCkKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlk
ZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgdWlkKTsKLSAgICBBY2Nlc3NUeXBlIGFjY2Vz
c1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSk7Ci0K
LSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAg
SlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpOwotICAgIFB1
dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgZmFsc2UsIGV4ZWMtPmNvZGVCbG9jaygpLT5w
dXRCeUlkQ29udGV4dCgpKTsKLQotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZVZhbHVl
LmlzQ2VsbCgpID8gYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKnZtKSA6IG51bGxwdHI7
Ci0gICAgYmFzZVZhbHVlLnB1dChleGVjLCBpZGVudCwgdmFsdWUsIHNsb3QpOwotICAgIAotICAg
IGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nl
c3NUeXBlKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGJ1aWxkUHV0QnlJZExpc3QoZXhl
YywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIGlkZW50LCBzbG90LCAqc3R1YkluZm8sIE5vdERpcmVj
dCk7Ci19Ci0KLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0
QnVpbGRMaXN0KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBV
bmlxdWVkU3RyaW5nSW1wbCogdWlkKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIAotICAgIElkZW50
aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCB1aWQpOwotICAgIEFjY2Vzc1R5
cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NU
eXBlKTsKLSAgICAKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7Ci0gICAgSlNPYmplY3QqIGJhc2VPYmplY3QgPSBhc09iamVjdChKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZEJhc2UpKTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlT2JqZWN0LCB0
cnVlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7Ci0KLSAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IGJhc2VPYmplY3QtPnN0cnVjdHVyZSgqdm0pOyAgICAKLSAgICBiYXNl
T2JqZWN0LT5wdXREaXJlY3QoKnZtLCBpZGVudCwgdmFsdWUsIHNsb3QpOwotICAgIAotICAgIGlm
IChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NU
eXBlKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGJ1aWxkUHV0QnlJZExpc3QoZXhlYywg
YmFzZU9iamVjdCwgc3RydWN0dXJlLCBpZGVudCwgc2xvdCwgKnN0dWJJbmZvLCBEaXJlY3QpOwot
fQotCi12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1
aWxkTGlzdChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCkKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlm
aWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgdWlkKTsKLSAgICBBY2Nlc3NUeXBl
IGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlw
ZSk7Ci0KLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
Ci0gICAgSlNPYmplY3QqIGJhc2VPYmplY3QgPSBhc09iamVjdChKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZEJhc2UpKTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlT2JqZWN0LCBmYWxzZSwg
ZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwotCi0gICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBiYXNlT2JqZWN0LT5zdHJ1Y3R1cmUoKnZtKTsgICAgCi0gICAgYmFzZU9iamVj
dC0+cHV0RGlyZWN0KCp2bSwgaWRlbnQsIHZhbHVlLCBzbG90KTsKLQotICAgIGlmIChhY2Nlc3NU
eXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIAotICAgIGJ1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZU9iamVj
dCwgc3RydWN0dXJlLCBpZGVudCwgc2xvdCwgKnN0dWJJbmZvLCBEaXJlY3QpOwotfQotCiB2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZVN0b3JhZ2VBbmRGaW5pc2hQdXQoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCwgRW5jb2RlZEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2
aXNpb24gMTg5NTQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogCiAjaWYgRU5BQkxFKEpJVCkKIAotI2lu
Y2x1ZGUgIkFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiQmluYXJ5U3dp
dGNoLmgiCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCiAjaW5jbHVkZSAiREZHT3BlcmF0aW9u
cy5oIgpAQCAtNDAsOCArMzksNyBAQAogI2luY2x1ZGUgIkpJVElubGluZXMuaCIKICNpbmNsdWRl
ICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIlBvbHlt
b3JwaGljR2V0QnlJZExpc3QuaCIKLSNpbmNsdWRlICJQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Lmgi
CisjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKICNpbmNsdWRlICJSZWdFeHBNYXRjaGVz
QXJyYXkuaCIKICNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKICNpbmNsdWRl
ICJTdGFja0FsaWdubWVudC5oIgpAQCAtOTQsMTMgKzkyLDEwIEBAIHN0YXRpYyB2b2lkIHJlcGF0
Y2hDYWxsKENvZGVCbG9jayogY29kZUIKIH0KIAogc3RhdGljIHZvaWQgcmVwYXRjaEJ5SWRTZWxm
QWNjZXNzKAotICAgIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCi0gICAgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIGNvbnN0IEZ1bmN0aW9uUHRy
ICZzbG93UGF0aEZ1bmN0aW9uLAorICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLAorICAgIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCwgY29uc3QgRnVuY3Rpb25QdHIgJnNsb3dQYXRoRnVuY3Rpb24sCiAgICAgYm9v
bCBjb21wYWN0KQogewotICAgIGlmIChzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNo
cG9pbnQoKSkKLSAgICAgICAgdm0ucmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVydHko
cHJvcGVydHlOYW1lLCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwotICAgIAog
ICAgIC8vIE9ubHkgb3B0aW1pemUgb25jZSEKICAgICByZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgc2xvd1BhdGhGdW5jdGlvbik7CiAKQEAgLTEyOSwz
MyArMTI0LDQ0IEBAIHN0YXRpYyB2b2lkIHJlcGF0Y2hCeUlkU2VsZkFjY2VzcygKICNlbmRpZgog
fQogCi1zdGF0aWMgdm9pZCBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9uKAotICAgIGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24sIENvZGVCbG9jayogY29kZUJsb2Nr
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCi0gICAgQ0NhbGxIZWxwZXJzJiBqaXQsIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBHUFJSZWcgc2NyYXRjaEdQUikK
LXsKLSAgICBpZiAoY29uZGl0aW9uLmlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdh
dGNocG9pbnQoKSkgewotICAgICAgICBjb25kaXRpb24ub2JqZWN0KCktPnN0cnVjdHVyZSgpLT5h
ZGRUcmFuc2l0aW9uV2F0Y2hwb2ludCgKLSAgICAgICAgICAgIHN0dWJJbmZvLmFkZFdhdGNocG9p
bnQoY29kZUJsb2NrLCBjb25kaXRpb24pKTsKLSAgICAgICAgcmV0dXJuOworc3RhdGljIHZvaWQg
cmVzZXRHZXRCeUlEQ2hlY2tBbmRMb2FkKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sK
KyAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWwzMiBzdHJ1Y3R1cmVMYWJlbCA9IHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KC0oaW50cHRyX3Qpc3R1YkluZm8u
cGF0Y2guZGVsdGFDaGVja0ltbVRvQ2FsbCk7CisgICAgaWYgKE1hY3JvQXNzZW1ibGVyOjpjYW5K
dW1wUmVwbGFjZVBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKCkpIHsKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OnJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0
Y2goCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6c3RhcnRPZlBhdGNoYWJsZUJyYW5jaDMy
V2l0aFBhdGNoT25BZGRyZXNzKHN0cnVjdHVyZUxhYmVsKSwKKyAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKAorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1i
bGVyOjpSZWdpc3RlcklEPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKSwKKyAgICAgICAgICAgICAg
ICBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
aW50MzJfdD4odW51c2VkUG9pbnRlcikpOwogICAgIH0KKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVw
YXRjaEludDMyKHN0cnVjdHVyZUxhYmVsLCBzdGF0aWNfY2FzdDxpbnQzMl90Pih1bnVzZWRQb2lu
dGVyKSk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENv
bXBhY3Qoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNl
dChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0xvYWRPclN0b3JlKSwgMCk7CisjZWxzZQorICAg
IE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ29tcGFjdChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvVGFn
TG9hZE9yU3RvcmUpLCAwKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENvbXBhY3Qoc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5m
by5wYXRjaC5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSksIDApOworI2VuZGlmCit9CiAK
LSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNvbmRpdGlvbi5vYmplY3QoKS0+c3RydWN0dXJl
KCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoY29uZGl0aW9uLnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0
eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KHN0cnVjdHVyZSkpOwotICAgIGppdC5t
b3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGNvbmRpdGlvbi5vYmplY3QoKSksIHNj
cmF0Y2hHUFIpOwotICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoCi0gICAgICAgIGppdC5icmFuY2hT
dHJ1Y3R1cmUoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCi0gICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCBzdHJ1Y3R1cmUpKTsKLX0KLQotc3RhdGljIHZvaWQgY2hlY2tPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbnMoCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQm
IHNldCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywK
LSAgICBDQ2FsbEhlbHBlcnMmIGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJl
Q2FzZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQotewotICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24mIGNvbmRpdGlvbiA6IHNldCkgewotICAgICAgICBjaGVja09iamVjdFByb3Bl
cnR5Q29uZGl0aW9uKAotICAgICAgICAgICAgY29uZGl0aW9uLCBjb2RlQmxvY2ssIHN0dWJJbmZv
LCBqaXQsIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7CitzdGF0aWMgdm9pZCByZXNldFB1dEJ5
SURDaGVja0FuZExvYWQoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIENvZGVM
b2NhdGlvbkRhdGFMYWJlbDMyIHN0cnVjdHVyZUxhYmVsID0gc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoLShpbnRwdHJfdClzdHViSW5mby5wYXRjaC5kZWx0
YUNoZWNrSW1tVG9DYWxsKTsKKyAgICBpZiAoTWFjcm9Bc3NlbWJsZXI6OmNhbkp1bXBSZXBsYWNl
UGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goKSkgeworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaCgKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpzdGFydE9mUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2hP
bkFkZHJlc3Moc3RydWN0dXJlTGFiZWwpLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoCisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlZ2lz
dGVySUQ+KHN0dWJJbmZvLnBhdGNoLmJhc2VHUFIpLAorICAgICAgICAgICAgICAgIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQzMl90Pih1
bnVzZWRQb2ludGVyKSk7CiAgICAgfQorICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIo
c3RydWN0dXJlTGFiZWwsIHN0YXRpY19jYXN0PGludDMyX3Q+KHVudXNlZFBvaW50ZXIpKTsKKyNp
ZiBVU0UoSlNWQUxVRTY0KQorICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIoc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSksIDApOworI2Vsc2UKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
cmVwYXRjaEludDMyKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zm
c2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUpLCAwKTsKKyAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEludDMyKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5k
YXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRP
clN0b3JlKSwgMCk7CisjZW5kaWYKIH0KIAogc3RhdGljIHZvaWQgcmVwbGFjZVdpdGhKdW1wKFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHRh
cmdldCkKQEAgLTE2OCw2ICsxNzQsOCBAQCBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoU3Ry
dWN0dXJlU3R1CiAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCh0YXJnZXQpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KKworICAgIHJlc2V0R2V0QnlJRENoZWNrQW5kTG9hZChzdHViSW5m
byk7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKAogICAgICAgICBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KApAQCAtMTc1LDQyNyArMTgzLDYg
QEAgc3RhdGljIHZvaWQgcmVwbGFjZVdpdGhKdW1wKFN0cnVjdHVyZVN0dQogICAgICAgICBDb2Rl
TG9jYXRpb25MYWJlbCh0YXJnZXQpKTsKIH0KIAotc3RhdGljIHZvaWQgZW1pdFJlc3RvcmVTY3Jh
dGNoKE1hY3JvQXNzZW1ibGVyJiBzdHViSml0LCBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBH
UFJSZWcgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAmIHN1Y2Nlc3MsIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wJiBmYWlsLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2Vz
KQotewotICAgIGlmIChuZWVkVG9SZXN0b3JlU2NyYXRjaCkgewotICAgICAgICBzdHViSml0LnBv
cFRvUmVzdG9yZShzY3JhdGNoR1BSKTsKLSAgICAgICAgCi0gICAgICAgIHN1Y2Nlc3MgPSBzdHVi
Sml0Lmp1bXAoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIGxpbmsgZmFpbHVyZSBjYXNlcyBoZXJl
LCBzbyB3ZSBjYW4gcG9wIHNjcmF0Y2hHUFIsIGFuZCB0aGVuIGp1bXAgYmFjay4KLSAgICAgICAg
ZmFpbHVyZUNhc2VzLmxpbmsoJnN0dWJKaXQpOwotICAgICAgICAKLSAgICAgICAgc3R1YkppdC5w
b3BUb1Jlc3RvcmUoc2NyYXRjaEdQUik7Ci0gICAgICAgIAotICAgICAgICBmYWlsID0gc3R1Ykpp
dC5qdW1wKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgc3VjY2VzcyA9IHN0
dWJKaXQuanVtcCgpOwotfQotCi1zdGF0aWMgdm9pZCBsaW5rUmVzdG9yZVNjcmF0Y2goTGlua0J1
ZmZlciYgcGF0Y2hCdWZmZXIsIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIHN1Y2Nlc3MsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhaWwsIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXMsIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJl
bCwgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VCZWdpbikKLXsKLSAgICBwYXRjaEJ1ZmZlci5s
aW5rKHN1Y2Nlc3MsIHN1Y2Nlc3NMYWJlbCk7Ci0gICAgICAgIAotICAgIGlmIChuZWVkVG9SZXN0
b3JlU2NyYXRjaCkgewotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWwsIHNsb3dDYXNlQmVn
aW4pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIC8vIGxpbmsgZmFpbHVyZSBj
YXNlcyBkaXJlY3RseSBiYWNrIHRvIG5vcm1hbCBwYXRoCi0gICAgcGF0Y2hCdWZmZXIubGluayhm
YWlsdXJlQ2FzZXMsIHNsb3dDYXNlQmVnaW4pOwotfQotCi1zdGF0aWMgdm9pZCBsaW5rUmVzdG9y
ZVNjcmF0Y2goTGlua0J1ZmZlciYgcGF0Y2hCdWZmZXIsIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0
Y2gsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3Vj
Y2VzcywgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IGZhaWx1cmVDYXNlcykKLXsKLSAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZmZXIsIG5l
ZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMsIHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2Fs
bFRvRG9uZSksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJ
bmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKLX0KLQotZW51bSBCeUlkU3R1YktpbmQg
ewotICAgIEdldFZhbHVlLAotICAgIEdldFVuZGVmaW5lZCwKLSAgICBDYWxsR2V0dGVyLAotICAg
IENhbGxDdXN0b21HZXR0ZXIsCi0gICAgQ2FsbFNldHRlciwKLSAgICBDYWxsQ3VzdG9tU2V0dGVy
Ci19OwotCi1zdGF0aWMgY29uc3QgY2hhciogdG9TdHJpbmcoQnlJZFN0dWJLaW5kIGtpbmQpCi17
Ci0gICAgc3dpdGNoIChraW5kKSB7Ci0gICAgY2FzZSBHZXRWYWx1ZToKLSAgICAgICAgcmV0dXJu
ICJHZXRWYWx1ZSI7Ci0gICAgY2FzZSBHZXRVbmRlZmluZWQ6Ci0gICAgICAgIHJldHVybiAiR2V0
VW5kZWZpbmVkIjsKLSAgICBjYXNlIENhbGxHZXR0ZXI6Ci0gICAgICAgIHJldHVybiAiQ2FsbEdl
dHRlciI7Ci0gICAgY2FzZSBDYWxsQ3VzdG9tR2V0dGVyOgotICAgICAgICByZXR1cm4gIkNhbGxD
dXN0b21HZXR0ZXIiOwotICAgIGNhc2UgQ2FsbFNldHRlcjoKLSAgICAgICAgcmV0dXJuICJDYWxs
U2V0dGVyIjsKLSAgICBjYXNlIENhbGxDdXN0b21TZXR0ZXI6Ci0gICAgICAgIHJldHVybiAiQ2Fs
bEN1c3RvbVNldHRlciI7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotfQotCi1zdGF0aWMg
QnlJZFN0dWJLaW5kIGtpbmRGb3IoY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQotewotICAgIGlm
IChzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIEdldFZhbHVlOwotICAg
IGlmIChzbG90LmlzVW5zZXQoKSkKLSAgICAgICAgcmV0dXJuIEdldFVuZGVmaW5lZDsKLSAgICBp
ZiAoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpKQotICAgICAgICByZXR1cm4gQ2FsbEN1c3RvbUdl
dHRlcjsKLSAgICBSRUxFQVNFX0FTU0VSVChzbG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkpOwotICAg
IHJldHVybiBDYWxsR2V0dGVyOwotfQotCi1zdGF0aWMgRnVuY3Rpb25QdHIgY3VzdG9tRm9yKGNv
bnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGVDdXN0
b20oKSkKLSAgICAgICAgcmV0dXJuIEZ1bmN0aW9uUHRyKCk7Ci0gICAgcmV0dXJuIEZ1bmN0aW9u
UHRyKHNsb3QuY3VzdG9tR2V0dGVyKCkpOwotfQotCi1zdGF0aWMgQnlJZFN0dWJLaW5kIGtpbmRG
b3IoY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90KQotewotICAgIFJFTEVBU0VfQVNTRVJUKCFz
bG90LmlzQ2FjaGVhYmxlUHV0KCkpOwotICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkp
Ci0gICAgICAgIHJldHVybiBDYWxsU2V0dGVyOwotICAgIFJFTEVBU0VfQVNTRVJUKHNsb3QuaXND
YWNoZWFibGVDdXN0b20oKSk7Ci0gICAgcmV0dXJuIENhbGxDdXN0b21TZXR0ZXI7Ci19Ci0KLXN0
YXRpYyBGdW5jdGlvblB0ciBjdXN0b21Gb3IoY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90KQot
ewotICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpKQotICAgICAgICByZXR1cm4gRnVu
Y3Rpb25QdHIoKTsKLSAgICByZXR1cm4gRnVuY3Rpb25QdHIoc2xvdC5jdXN0b21TZXR0ZXIoKSk7
Ci19Ci0KLXN0YXRpYyBib29sIGdlbmVyYXRlQnlJZFN0dWIoCi0gICAgRXhlY1N0YXRlKiBleGVj
LCBCeUlkU3R1YktpbmQga2luZCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLAotICAg
IEZ1bmN0aW9uUHRyIGN1c3RvbSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LAotICAgIEpTT2JqZWN0KiBh
bHRlcm5hdGVCYXNlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBib29sIGxvYWRUYXJnZXRGcm9tUHJveHksCi0gICAgV2F0Y2hwb2ludFNldCogd2F0Y2hwb2lu
dFNldCwgQ29kZUxvY2F0aW9uTGFiZWwgc3VjY2Vzc0xhYmVsLCBDb2RlTG9jYXRpb25MYWJlbCBz
bG93Q2FzZUxhYmVsLAotICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4mIHN0dWJSb3V0aW5lKQot
ewotICAgIEFTU0VSVChjb25kaXRpb25TZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5QXNzdW1p
bmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSk7Ci0gICAgCi0gICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZv
LnBhdGNoLmJhc2VHUFIpOwotICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyA9IEpTVmFsdWVSZWdz
KAotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1
YkluZm8ucGF0Y2gudmFsdWVUYWdHUFIpLAotI2VuZGlmCi0gICAgICAgIHN0YXRpY19jYXN0PEdQ
UlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVHUFIpKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IFRlbXBSZWdpc3RlclNldChzdHViSW5mby5wYXRjaC51c2VkUmVnaXN0ZXJzKS5nZXRGcmVlR1BS
KCk7Ci0gICAgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IHNjcmF0Y2hHUFIgPT0gSW52YWxp
ZEdQUlJlZzsKLSAgICBSRUxFQVNFX0FTU0VSVCghbmVlZFRvUmVzdG9yZVNjcmF0Y2ggfHwgKGtp
bmQgPT0gR2V0VmFsdWUgfHwga2luZCA9PSBHZXRVbmRlZmluZWQpKTsKLSAgICAKLSAgICBDQ2Fs
bEhlbHBlcnMgc3R1YkppdCgmZXhlYy0+dm0oKSwgZXhlYy0+Y29kZUJsb2NrKCkpOwotICAgIGlm
IChuZWVkVG9SZXN0b3JlU2NyYXRjaCkgewotICAgICAgICBzY3JhdGNoR1BSID0gQXNzZW1ibHlI
ZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKAotICAgICAgICAgICAgYmFzZUdQUiwgdmFsdWVSZWdz
LnRhZ0dQUigpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKLSAgICAgICAgc3R1YkppdC5wdXNo
VG9TYXZlKHNjcmF0Y2hHUFIpOwotICAgICAgICBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IHRydWU7
Ci0gICAgfQotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7
Ci0KLSAgICBHUFJSZWcgYmFzZUZvckdldEdQUjsKLSAgICBpZiAobG9hZFRhcmdldEZyb21Qcm94
eSkgewotICAgICAgICBiYXNlRm9yR2V0R1BSID0gdmFsdWVSZWdzLnBheWxvYWRHUFIoKTsKLSAg
ICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaDgoCi0gICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIAotICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihQdXJlRm9yd2FyZGluZ1Byb3h5VHlwZSkp
KTsKLQotICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNQcm94eTo6dGFyZ2V0T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgCi0g
ICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2hTdHJ1Y3R1cmUoCi0gICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIAotICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwK
LSAgICAgICAgICAgIHN0cnVjdHVyZSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGJhc2VGb3JH
ZXRHUFIgPSBiYXNlR1BSOwotCi0gICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5i
cmFuY2hTdHJ1Y3R1cmUoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIAot
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUZvckdldEdQUiwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgCi0gICAgICAgICAgICBzdHJ1Y3R1cmUpKTsKLSAgICB9
Ci0KLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgIGlm
IChzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSB8fCBjb25kaXRpb25T
ZXQubmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKQotICAgICAgICB2bS0+cmVnaXN0ZXJX
YXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVydHkocHJvcGVydHlOYW1lLCBzdHViSW5mby5hZGRXYXRj
aHBvaW50KGNvZGVCbG9jaykpOwotCi0gICAgaWYgKHdhdGNocG9pbnRTZXQpCi0gICAgICAgIHdh
dGNocG9pbnRTZXQtPmFkZChzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwotCi0g
ICAgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbnMoCi0gICAgICAgIGNvbmRpdGlvblNldCwg
Y29kZUJsb2NrLCBzdHViSW5mbywgc3R1YkppdCwgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSKTsK
LQotICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKLSAgICAgICAgU3RydWN0dXJlKiBj
dXJyU3RydWN0dXJlOwotICAgICAgICBpZiAoY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkKLSAgICAg
ICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGN1cnJTdHJ1Y3R1cmUgPSBjb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vYmpl
Y3QoKS0+c3RydWN0dXJlKCk7Ci0gICAgICAgIGN1cnJTdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQ
cm9wZXJ0eUZvclJlcGxhY2VtZW50cygqdm0sIG9mZnNldCk7Ci0gICAgfQotICAgIAotICAgIEdQ
UlJlZyBiYXNlRm9yQWNjZXNzR1BSID0gSW52YWxpZEdQUlJlZzsKLSAgICBpZiAoa2luZCAhPSBH
ZXRVbmRlZmluZWQpIHsKLSAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgICAgICAvLyBXZSBjb3VsZCBoYXZlIGNsb2JiZXJlZCBzY3JhdGNoR1BSIGVhcmxpZXIs
IHNvIHdlIGhhdmUgdG8gcmVsb2FkIGZyb20gYmFzZUdQUiB0byBnZXQgdGhlIHRhcmdldC4KLSAg
ICAgICAgICAgIGlmIChsb2FkVGFyZ2V0RnJvbVByb3h5KQotICAgICAgICAgICAgICAgIHN0dWJK
aXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU1Byb3h5Ojp0YXJn
ZXRPZmZzZXQoKSksIGJhc2VGb3JHZXRHUFIpOwotICAgICAgICAgICAgc3R1YkppdC5tb3ZlKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGFsdGVybmF0ZUJhc2UpLCBzY3JhdGNoR1BSKTsK
LSAgICAgICAgICAgIGJhc2VGb3JBY2Nlc3NHUFIgPSBzY3JhdGNoR1BSOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgLy8gRm9yIHByb3h5IG9iamVjdHMsIHdlIG5lZWQgdG8gZG8gYWxs
IHRoZSBTdHJ1Y3R1cmUgY2hlY2tzIGJlZm9yZSBtb3ZpbmcgdGhlIGJhc2VHUFIgaW50bwotICAg
ICAgICAgICAgLy8gYmFzZUZvckdldEdQUiBiZWNhdXNlIGlmIHdlIGZhaWwgYW55IG9mIHRoZSBj
aGVja3MgdGhlbiB3ZSB3b3VsZCBoYXZlIHRoZSB3cm9uZyB2YWx1ZSBpbiBiYXNlR1BSCi0gICAg
ICAgICAgICAvLyBvbiB0aGUgc2xvdyBwYXRoLgotICAgICAgICAgICAgaWYgKGxvYWRUYXJnZXRG
cm9tUHJveHkpCi0gICAgICAgICAgICAgICAgc3R1YkppdC5tb3ZlKHNjcmF0Y2hHUFIsIGJhc2VG
b3JHZXRHUFIpOwotICAgICAgICAgICAgYmFzZUZvckFjY2Vzc0dQUiA9IGJhc2VGb3JHZXRHUFI7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBHUFJSZWcgbG9hZGVkVmFsdWVHUFIgPSBJbnZhbGlk
R1BSUmVnOwotICAgIGlmIChraW5kID09IEdldFVuZGVmaW5lZCkKLSAgICAgICAgc3R1YkppdC5t
b3ZlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIHZhbHVlUmVncyk7Ci0gICAgZWxzZSBpZiAo
a2luZCAhPSBDYWxsQ3VzdG9tR2V0dGVyICYmIGtpbmQgIT0gQ2FsbEN1c3RvbVNldHRlcikgewot
ICAgICAgICBpZiAoa2luZCA9PSBHZXRWYWx1ZSkKLSAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BS
ID0gdmFsdWVSZWdzLnBheWxvYWRHUFIoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbG9h
ZGVkVmFsdWVHUFIgPSBzY3JhdGNoR1BSOwotICAgICAgICAKLSAgICAgICAgR1BSUmVnIHN0b3Jh
Z2VHUFI7Ci0gICAgICAgIGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKQotICAgICAgICAgICAg
c3RvcmFnZUdQUiA9IGJhc2VGb3JBY2Nlc3NHUFI7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VGb3JBY2Nlc3NH
UFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIGxvYWRlZFZhbHVlR1BSKTsKLSAgICAg
ICAgICAgIHN0b3JhZ2VHUFIgPSBsb2FkZWRWYWx1ZUdQUjsKLSAgICAgICAgfQotICAgICAgICAK
LSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBzdHViSml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShvZmZzZXQpKSwgbG9h
ZGVkVmFsdWVHUFIpOwotI2Vsc2UKLSAgICAgICAgaWYgKGtpbmQgPT0gR2V0VmFsdWUpCi0gICAg
ICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BS
LCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShvZmZzZXQpICsgVGFnT2Zmc2V0KSwgdmFsdWVSZWdzLnRh
Z0dQUigpKTsKLSAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uob2Zmc2V0KSArIFBheWxvYWRPZmZzZXQp
LCBsb2FkZWRWYWx1ZUdQUik7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICAvLyBTdHVmZiBmb3IgY3Vz
dG9tIGdldHRlcnMuCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgb3BlcmF0aW9uQ2FsbDsKLSAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBoYW5kbGVyQ2FsbDsKLQotICAgIC8vIFN0dWZmIGZvciBK
UyBnZXR0ZXJzLgotICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgYWRkcmVzc09mTGlu
a0Z1bmN0aW9uQ2hlY2s7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgZmFzdFBhdGhDYWxsOwot
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIHNsb3dQYXRoQ2FsbDsKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8Q2FsbExpbmtJbmZvPiBjYWxsTGlua0luZm87Ci0KLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBzdWNjZXNzLCBmYWlsOwotICAgIGlmIChraW5kICE9IEdldFZhbHVlICYmIGtpbmQgIT0gR2V0
VW5kZWZpbmVkKSB7Ci0gICAgICAgIC8vIE5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2hlbmV2ZXIg
dGhpcyBjYWxsIGlzIG1hZGUgaW4gdGhlIGZ1dHVyZSwgd2UgcmVtZW1iZXIgdGhlCi0gICAgICAg
IC8vIHBsYWNlIHRoYXQgd2UgbWFkZSBpdCBmcm9tLiBJdCBqdXN0IHNvIGhhcHBlbnMgdG8gYmUg
dGhlIHBsYWNlIHRoYXQgd2UgYXJlIGF0Ci0gICAgICAgIC8vIHJpZ2h0IG5vdyEKLSAgICAgICAg
c3R1YkppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc3R1YkluZm8uY2Fs
bFNpdGVJbmRleC5iaXRzKCkpLAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3Ioc3Rh
dGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihKU1N0YWNrOjpBcmd1bWVudENvdW50KSkpOwotCi0g
ICAgICAgIGlmIChraW5kID09IENhbGxHZXR0ZXIgfHwga2luZCA9PSBDYWxsU2V0dGVyKSB7Ci0g
ICAgICAgICAgICAvLyBDcmVhdGUgYSBKUyBjYWxsIHVzaW5nIGEgSlMgY2FsbCBpbmxpbmUgY2Fj
aGUuIEFzc3VtZSB0aGF0OgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIC0gU1AgaXMg
YWxpZ25lZCBhbmQgcmVwcmVzZW50cyB0aGUgZXh0ZW50IG9mIHRoZSBjYWxsaW5nIGNvbXBpbGVy
J3Mgc3RhY2sgdXNhZ2UuCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gLSBGUCBpcyBz
ZXQgY29ycmVjdGx5IChpLmUuIGl0IHBvaW50cyB0byB0aGUgY2FsbGVyJ3MgY2FsbCBmcmFtZSBo
ZWFkZXIpLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIC0gU1AgLSBGUCBpcyBhbiBh
bGlnbmVkIGRpZmZlcmVuY2UuCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gLSBBbnkg
Ynl0ZSBiZXR3ZWVuIEZQIChleGNsdXNpdmUpIGFuZCBTUCAoaW5jbHVzaXZlKSBjb3VsZCBiZSBs
aXZlIGluIHRoZSBjYWxsaW5nCi0gICAgICAgICAgICAvLyAgIGNvZGUuCi0gICAgICAgICAgICAv
LwotICAgICAgICAgICAgLy8gVGhlcmVmb3JlLCB3ZSB0ZW1wb3JhcmlseSBncm93IHRoZSBzdGFj
ayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhlIGNhbGwgYW5kIHRoZW4KLSAgICAgICAgICAgIC8vIHNo
cmluayBpdCBhZnRlci4KLSAgICAgICAgICAgIAotICAgICAgICAgICAgY2FsbExpbmtJbmZvID0g
c3RkOjptYWtlX3VuaXF1ZTxDYWxsTGlua0luZm8+KCk7Ci0KLSAgICAgICAgICAgIC8vIEZJWE1F
OiBJZiB3ZSBnZW5lcmF0ZWQgYSBwb2x5bW9ycGhpYyBjYWxsIHN0dWIgdGhhdCBqdW1wZWQgYmFj
ayB0byB0aGUgZ2V0dGVyCi0gICAgICAgICAgICAvLyBzdHViLCB3aGljaCB0aGVuIGp1bXBlZCBi
YWNrIHRvIHRoZSBtYWluIGNvZGUsIHRoZW4gd2UnZCBoYXZlIGEgcmVhY2hhYmlsaXR5Ci0gICAg
ICAgICAgICAvLyBzaXR1YXRpb24gdGhhdCB0aGUgR0MgZG9lc24ndCBrbm93IGFib3V0LiBUaGUg
R0Mgd291bGQgZW5zdXJlIHRoYXQgdGhlIHBvbHltb3JwaGljCi0gICAgICAgICAgICAvLyBjYWxs
IHN0dWIgc3RheWVkIGFsaXZlLCBhbmQgaXQgd291bGQgZW5zdXJlIHRoYXQgdGhlIG1haW4gY29k
ZSBzdGF5ZWQgYWxpdmUsIGJ1dAotICAgICAgICAgICAgLy8gaXQgd291bGRuJ3Qga25vdyB0aGF0
IHRoZSBnZXR0ZXIgc3R1YiB3YXMgYWxpdmUuIElkZWFsbHkgSklUIHN0dWIgcm91dGluZXMgd291
bGQKLSAgICAgICAgICAgIC8vIGJlIEdDIG9iamVjdHMsIGFuZCB0aGVuIHdlJ2QgYmUgYWJsZSB0
byBzYXkgdGhhdCB0aGUgcG9seW1vcnBoaWMgY2FsbCBzdHViIGhhcyBhCi0gICAgICAgICAgICAv
LyByZWZlcmVuY2UgdG8gdGhlIGdldHRlciBzdHViLgotICAgICAgICAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODkxNAotICAgICAgICAgICAgY2FsbExp
bmtJbmZvLT5kaXNhbGxvd1N0dWJzKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGNhbGxM
aW5rSW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgc3R1YkluZm8uY29kZU9yaWdp
biwgbG9hZGVkVmFsdWVHUFIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QgZG9uZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gVGhlcmUg
aXMgYSAndGhpcycgYXJndW1lbnQgYnV0IG5vdGhpbmcgZWxzZS4KLSAgICAgICAgICAgIHVuc2ln
bmVkIG51bWJlck9mUGFyYW1ldGVycyA9IDE7Ci0gICAgICAgICAgICAvLyAuLi4gdW5sZXNzIHdl
J3JlIGNhbGxpbmcgYSBzZXR0ZXIuCi0gICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsU2V0dGVy
KQotICAgICAgICAgICAgICAgIG51bWJlck9mUGFyYW1ldGVycysrOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICAvLyBHZXQgdGhlIGFjY2Vzc29yOyBpZiB0aGVyZSBhaW4ndCBvbmUgdGhlbiB0
aGUgcmVzdWx0IGlzIGpzVW5kZWZpbmVkKCkuCi0gICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxs
U2V0dGVyKSB7Ci0gICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKAotICAgICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhsb2FkZWRWYWx1ZUdQUiwgR2V0dGVyU2V0
dGVyOjpvZmZzZXRPZlNldHRlcigpKSwKLSAgICAgICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVH
UFIpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQ
dHIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGxvYWRlZFZh
bHVlR1BSLCBHZXR0ZXJTZXR0ZXI6Om9mZnNldE9mR2V0dGVyKCkpLAotICAgICAgICAgICAgICAg
ICAgICBsb2FkZWRWYWx1ZUdQUik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCByZXR1cm5VbmRlZmluZWQgPSBzdHViSml0LmJyYW5jaFRlc3RQdHIoCi0g
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGxvYWRlZFZhbHVlR1BSKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZSZWdzRm9yQ2FsbCA9Ci0g
ICAgICAgICAgICAgICAgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIG51bWJlck9mUGFy
YW1ldGVyczsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZCeXRl
c0ZvckNhbGwgPQotICAgICAgICAgICAgICAgIG51bWJlck9mUmVnc0ZvckNhbGwgKiBzaXplb2Yo
UmVnaXN0ZXIpIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICB1bnNpZ25lZCBhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwgPQotICAgICAgICAg
ICAgICAgIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIG51
bWJlck9mQnl0ZXNGb3JDYWxsKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3R1YkppdC5z
dWJQdHIoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihhbGln
bmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwpLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzIGNhbGxlZUZyYW1lID0gTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLAot
ICAgICAgICAgICAgICAgIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFt
ZUFuZFBDKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzdHViSml0LnN0b3JlMzIoCi0g
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihudW1iZXJPZlBhcmFt
ZXRlcnMpLAotICAgICAgICAgICAgICAgIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoCi0gICAgICAg
ICAgICAgICAgICAgIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQgKiBzaXplb2YoUmVnaXN0ZXIpICsg
UGF5bG9hZE9mZnNldCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzdHViSml0LnN0b3Jl
Q2VsbCgKLSAgICAgICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUiwgY2FsbGVlRnJhbWUud2l0aE9m
ZnNldChKU1N0YWNrOjpDYWxsZWUgKiBzaXplb2YoUmVnaXN0ZXIpKSk7Ci0KLSAgICAgICAgICAg
IHN0dWJKaXQuc3RvcmVDZWxsKAotICAgICAgICAgICAgICAgIGJhc2VGb3JHZXRHUFIsCi0gICAg
ICAgICAgICAgICAgY2FsbGVlRnJhbWUud2l0aE9mZnNldCgKLSAgICAgICAgICAgICAgICAgICAg
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIp
KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChraW5kID09IENhbGxTZXR0ZXIpIHsK
LSAgICAgICAgICAgICAgICBzdHViSml0LnN0b3JlVmFsdWUoCi0gICAgICAgICAgICAgICAgICAg
IHZhbHVlUmVncywKLSAgICAgICAgICAgICAgICAgICAgY2FsbGVlRnJhbWUud2l0aE9mZnNldCgK
LSAgICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEpLm9m
ZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93Q2FzZSA9IHN0dWJKaXQuYnJh
bmNoUHRyV2l0aFBhdGNoKAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgbG9hZGVkVmFsdWVHUFIsIGFkZHJlc3NPZkxpbmtGdW5jdGlvbkNoZWNrLAotICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgZmFzdFBhdGhDYWxsID0gc3R1YkppdC5uZWFyQ2FsbCgpOwotCi0gICAgICAg
ICAgICBzdHViSml0LmFkZFB0cigKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKGNvZGVCbG9jay0+c3RhY2tQb2ludGVyT2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0
ZXIpKSwKLSAgICAgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKLSAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgICAg
ICAgICAgaWYgKGtpbmQgPT0gQ2FsbEdldHRlcikKLSAgICAgICAgICAgICAgICBzdHViSml0LnNl
dHVwUmVzdWx0cyh2YWx1ZVJlZ3MpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBkb25lLmFw
cGVuZChzdHViSml0Lmp1bXAoKSk7Ci0gICAgICAgICAgICBzbG93Q2FzZS5saW5rKCZzdHViSml0
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3R1YkppdC5tb3ZlKGxvYWRlZFZhbHVlR1BS
LCBHUFJJbmZvOjpyZWdUMCk7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgICAgIHN0
dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcp
LCBHUFJJbmZvOjpyZWdUMSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIHN0dWJKaXQubW92ZShNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8uZ2V0KCkpLCBHUFJJbmZvOjpy
ZWdUMik7Ci0gICAgICAgICAgICBzbG93UGF0aENhbGwgPSBzdHViSml0Lm5lYXJDYWxsKCk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIHN0dWJKaXQuYWRkUHRyKAotICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoY29kZUJsb2NrLT5zdGFja1BvaW50ZXJPZmZz
ZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLAotICAgICAgICAgICAgICAgIEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50
ZXJSZWdpc3Rlcik7Ci0gICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsR2V0dGVyKQotICAgICAg
ICAgICAgICAgIHN0dWJKaXQuc2V0dXBSZXN1bHRzKHZhbHVlUmVncyk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIGRvbmUuYXBwZW5kKHN0dWJKaXQuanVtcCgpKTsKLSAgICAgICAgICAgIHJl
dHVyblVuZGVmaW5lZC5saW5rKCZzdHViSml0KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
aWYgKGtpbmQgPT0gQ2FsbEdldHRlcikKLSAgICAgICAgICAgICAgICBzdHViSml0Lm1vdmVUcnVz
dGVkVmFsdWUoanNVbmRlZmluZWQoKSwgdmFsdWVSZWdzKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgZG9uZS5saW5rKCZzdHViSml0KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IC8vIGdldHRlcjogRW5jb2RlZEpTVmFsdWUgKCpHZXRWYWx1ZUZ1bmMpKEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
OwotICAgICAgICAgICAgLy8gc2V0dGVyOiB2b2lkICgqUHV0VmFsdWVGdW5jKShFeGVjU3RhdGUq
LCBKU09iamVjdCogYmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc09iamVjdCwgRW5jb2RlZEpTVmFs
dWUgdmFsdWUpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBpZiAoa2luZCA9PSBD
YWxsQ3VzdG9tR2V0dGVyKQotICAgICAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKGJhc2VGb3JBY2Nlc3NHUFIsIGJhc2VGb3JHZXRHUFIsIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKHByb3BlcnR5TmFtZS5pbXBsKCkpKTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShi
YXNlRm9yQWNjZXNzR1BSLCBiYXNlRm9yR2V0R1BSLCB2YWx1ZVJlZ3MuZ3ByKCkpOwotI2Vsc2UK
LSAgICAgICAgICAgIGlmIChraW5kID09IENhbGxDdXN0b21HZXR0ZXIpCi0gICAgICAgICAgICAg
ICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUZvckFjY2Vzc0dQUiwg
YmFzZUZvckdldEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxs
VGFnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocHJvcGVydHlOYW1lLmltcGwoKSkp
OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKGJhc2VGb3JBY2Nlc3NHUFIsIGJhc2VGb3JHZXRHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHZhbHVlUmVncy5wYXlsb2Fk
R1BSKCksIHZhbHVlUmVncy50YWdHUFIoKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIHN0dWJKaXQu
c3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsICZ2bS0+dG9wQ2FsbEZyYW1lKTsK
LQotICAgICAgICAgICAgb3BlcmF0aW9uQ2FsbCA9IHN0dWJKaXQuY2FsbCgpOwotICAgICAgICAg
ICAgaWYgKGtpbmQgPT0gQ2FsbEN1c3RvbUdldHRlcikKLSAgICAgICAgICAgICAgICBzdHViSml0
LnNldHVwUmVzdWx0cyh2YWx1ZVJlZ3MpOwotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgbm9FeGNlcHRpb24gPSBzdHViSml0LmVtaXRFeGNlcHRpb25DaGVjayhDQ2FsbEhlbHBlcnM6
OkludmVydGVkRXhjZXB0aW9uQ2hlY2spOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzdHVi
Sml0LnNldHVwQXJndW1lbnRzKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih2bSksIEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAgICAgIGhhbmRsZXJDYWxsID0gc3R1Ykpp
dC5jYWxsKCk7Ci0gICAgICAgICAgICBzdHViSml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgbm9FeGNlcHRpb24ubGluaygmc3R1YkppdCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgZW1pdFJlc3RvcmVTY3JhdGNoKHN0dWJKaXQsIG5lZWRUb1Jl
c3RvcmVTY3JhdGNoLCBzY3JhdGNoR1BSLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMpOwot
ICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCBzdHViSml0LCBleGVjLT5jb2Rl
QmxvY2soKSwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKLSAgICBpZiAocGF0Y2hCdWZmZXIuZGlk
RmFpbFRvQWxsb2NhdGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGxpbmtS
ZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHN1Y2Nlc3Ms
IGZhaWwsIGZhaWx1cmVDYXNlcywgc3VjY2Vzc0xhYmVsLCBzbG93Q2FzZUxhYmVsKTsKLSAgICBp
ZiAoa2luZCA9PSBDYWxsQ3VzdG9tR2V0dGVyIHx8IGtpbmQgPT0gQ2FsbEN1c3RvbVNldHRlcikg
ewotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIGN1c3RvbSk7Ci0gICAg
ICAgIHBhdGNoQnVmZmVyLmxpbmsoaGFuZGxlckNhbGwsIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIp
OwotICAgIH0gZWxzZSBpZiAoa2luZCA9PSBDYWxsR2V0dGVyIHx8IGtpbmQgPT0gQ2FsbFNldHRl
cikgewotICAgICAgICBjYWxsTGlua0luZm8tPnNldENhbGxMb2NhdGlvbnMocGF0Y2hCdWZmZXIu
bG9jYXRpb25PZk5lYXJDYWxsKHNsb3dQYXRoQ2FsbCksCi0gICAgICAgICAgICBwYXRjaEJ1ZmZl
ci5sb2NhdGlvbk9mKGFkZHJlc3NPZkxpbmtGdW5jdGlvbkNoZWNrKSwKLSAgICAgICAgICAgIHBh
dGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChmYXN0UGF0aENhbGwpKTsKLQotICAgICAgICBw
YXRjaEJ1ZmZlci5saW5rKAotICAgICAgICAgICAgc2xvd1BhdGhDYWxsLCBDb2RlTG9jYXRpb25M
YWJlbCh2bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKLSAg
ICB9Ci0gICAgCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGUgPSBGSU5BTElaRV9DT0RF
X0ZPUigKLSAgICAgICAgZXhlYy0+Y29kZUJsb2NrKCksIHBhdGNoQnVmZmVyLAotICAgICAgICAo
IiVzIGFjY2VzcyBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAgICAgICAgIHRv
U3RyaW5nKGtpbmQpLCB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksCi0gICAg
ICAgICAgICBzdWNjZXNzTGFiZWwuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgIAotICAgIGlm
IChraW5kID09IENhbGxHZXR0ZXIgfHwga2luZCA9PSBDYWxsU2V0dGVyKQotICAgICAgICBzdHVi
Um91dGluZSA9IGFkb3B0UmVmKG5ldyBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZShjb2RlLCAq
dm0sIFdURjo6bW92ZShjYWxsTGlua0luZm8pKSk7Ci0gICAgZWxzZQotICAgICAgICBzdHViUm91
dGluZSA9IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKGNvZGUsICp2bSwgY29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKSwgdHJ1ZSk7Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIGVudW0gSW5s
aW5lQ2FjaGVBY3Rpb24gewogICAgIEdpdmVVcE9uQ2FjaGUsCiAgICAgUmV0cnlDYWNoZUxhdGVy
LApAQCAtNjI5LDEzMiArMjE2LDk5IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNo
ZUdldEJ5SUQKICAgICBpZiAoT3B0aW9uczo6Zm9yY2VJQ0ZhaWx1cmUoKSkKICAgICAgICAgcmV0
dXJuIEdpdmVVcE9uQ2FjaGU7CiAgICAgCi0gICAgLy8gRklYTUU6IFdyaXRlIGEgdGVzdCB0aGF0
IHByb3ZlcyB3ZSBuZWVkIHRvIGNoZWNrIGZvciByZWN1cnNpb24gaGVyZSBqdXN0Ci0gICAgLy8g
bGlrZSB0aGUgaW50ZXJwcmV0ZXIgZG9lcywgdGhlbiBhZGQgYSBjaGVjayBmb3IgcmVjdXJzaW9u
LgorICAgIC8vIEZJWE1FOiBDYWNoZSBwcm9wZXJ0eSBhY2Nlc3MgZm9yIGltbWVkaWF0ZXMuCisg
ICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCisgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hl
OwogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICBW
TSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBTY3JpcHRFeGVjdXRhYmxlKiBvd25lciA9IGNvZGVC
bG9jay0+b3duZXJTY3JpcHRFeGVjdXRhYmxlKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
IAotICAgIGlmICgoaXNKU0FycmF5KGJhc2VWYWx1ZSkgfHwgaXNKU1N0cmluZyhiYXNlVmFsdWUp
KSAmJiBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgewotICAg
ICAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gu
YmFzZUdQUik7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgR1BSUmVnIHJlc3VsdFRh
Z0dQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVUYWdHUFIpOwot
I2VuZGlmCi0gICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0
dWJJbmZvLnBhdGNoLnZhbHVlR1BSKTsKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlciBzdHViSml0
OwotCi0gICAgICAgIGlmIChpc0pTQXJyYXkoYmFzZVZhbHVlKSkgewotICAgICAgICAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSBUZW1wUmVnaXN0ZXJTZXQoc3R1YkluZm8ucGF0Y2gudXNlZFJlZ2lz
dGVycykuZ2V0RnJlZUdQUigpOwotICAgICAgICAgICAgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRj
aCA9IGZhbHNlOwotCi0gICAgICAgICAgICBpZiAoc2NyYXRjaEdQUiA9PSBJbnZhbGlkR1BSUmVn
KSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICBzY3JhdGNoR1BSID0gQXNz
ZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHJlc3VsdEdQUik7Ci0jZWxz
ZQotICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNj
cmF0Y2hHUFIoYmFzZUdQUiwgcmVzdWx0R1BSLCByZXN1bHRUYWdHUFIpOwotI2VuZGlmCi0gICAg
ICAgICAgICAgICAgc3R1YkppdC5wdXNoVG9TYXZlKHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAg
ICAgIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsKLQotICAgICAgICAg
ICAgc3R1YkppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6
OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBmYWlsdXJl
Q2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBz
Y3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKElzQXJyYXkpKSk7Ci0gICAg
ICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNz
ZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKElu
ZGV4aW5nU2hhcGVNYXNrKSkpOwotCi0gICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
c2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgc2NyYXRj
aEdQUik7Ci0gICAgICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKDApKSk7Ci0KLSAgICAgICAgICAgIHN0dWJKaXQubW92ZShzY3JhdGNoR1BSLCBy
ZXN1bHRHUFIpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBzdHViSml0Lm9yNjQo
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tNjQoVGFnVHlwZU51bWJlciksIHJlc3VsdEdQUik7
Ci0jZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICAgICAgc3R1YkppdC5tb3ZlKEFzc2Vt
Ymx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgcmVzdWx0VGFnR1BS
KTsKLSNlbmRpZgorICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBuZXdDYXNlOwogCi0g
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzLCBmYWlsOwotCi0gICAgICAg
ICAgICBlbWl0UmVzdG9yZVNjcmF0Y2goc3R1YkppdCwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHNj
cmF0Y2hHUFIsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcyk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCBzdHViSml0LCBjb2RlQmxvY2ss
IEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7Ci0gICAgICAgICAgICBpZiAocGF0Y2hCdWZmZXIuZGlk
RmFpbFRvQWxsb2NhdGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsK
LQotICAgICAgICAgICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0
b3JlU2NyYXRjaCwgc3R1YkluZm8sIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcyk7Ci0KLSAg
ICAgICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigK
LSAgICAgICAgICAgICAgICBleGVjLT5jb2RlQmxvY2soKSwgcGF0Y2hCdWZmZXIsCi0gICAgICAg
ICAgICAgICAgKCJHZXRCeUlkIGFycmF5IGxlbmd0aCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50
ICVwIiwKLSAgICAgICAgICAgICAgICAgICAgdG9DU3RyaW5nKCpleGVjLT5jb2RlQmxvY2soKSku
ZGF0YSgpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSkuZXhlY3V0
YWJsZUFkZHJlc3MoKSkpOwotCi0gICAgICAgICAgICByZXBsYWNlV2l0aEp1bXAoc3R1YkluZm8s
IHN0dWJJbmZvLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKLSAgICAgICAgICAgIHJlcGF0
Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25H
ZXRCeUlkKTsKKyAgICBpZiAoaXNKU0FycmF5KGJhc2VWYWx1ZSkgJiYgcHJvcGVydHlOYW1lID09
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpCisgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3ND
YXNlOjpnZXRMZW5ndGgodm0sIG93bmVyLCBBY2Nlc3NDYXNlOjpBcnJheUxlbmd0aCk7CisgICAg
ZWxzZSBpZiAoaXNKU1N0cmluZyhiYXNlVmFsdWUpICYmIHByb3BlcnR5TmFtZSA9PSBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkubGVuZ3RoKQorICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Z2V0
TGVuZ3RoKHZtLCBvd25lciwgQWNjZXNzQ2FzZTo6U3RyaW5nTGVuZ3RoKTsKKyAgICBlbHNlIHsK
KyAgICAgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkgJiYgIXNsb3QuaXNVbnNldCgpKQorICAg
ICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAKKyAgICAgICAgSlNDZWxsKiBiYXNlQ2Vs
bCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBi
YXNlQ2VsbC0+c3RydWN0dXJlKHZtKTsKKyAgICAgICAgCisgICAgICAgIC8vIE9wdGltaXplIHNl
bGYgYWNjZXNzLgorICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlID09IENhY2hlVHlwZTo6
VW5zZXQKKyAgICAgICAgICAgICYmIHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpCisgICAgICAgICAg
ICAmJiBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlCisgICAgICAgICAgICAmJiAhc2xvdC53
YXRjaHBvaW50U2V0KCkKKyAgICAgICAgICAgICYmIE1hY3JvQXNzZW1ibGVyOjppc0NvbXBhY3RQ
dHJBbGlnbmVkQWRkcmVzc09mZnNldChtYXhPZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uo
c2xvdC5jYWNoZWRPZmZzZXQoKSkpCisgICAgICAgICAgICAmJiBhY3Rpb25Gb3JDZWxsKHZtLCBi
YXNlQ2VsbCkgPT0gQXR0ZW1wdFRvQ2FjaGUKKyAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5l
ZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkgeworICAgICAgICAgICAgc3RydWN0dXJlLT5z
dGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHModm0sIHNsb3QuY2FjaGVkT2Zmc2V0
KCkpOworICAgICAgICAgICAgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKGNvZGVCbG9jaywgc3R1Yklu
Zm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGlt
aXplLCB0cnVlKTsKKyAgICAgICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZih2bSwgY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgp
KTsKICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CiAgICAgICAgIH0KIAotICAg
ICAgICAvLyBTdHJpbmcubGVuZ3RoIGNhc2UKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
ZmFpbHVyZSA9IHN0dWJKaXQuYnJhbmNoOChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkp
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKFN0cmluZ1R5cGUpKTsKLQotICAgICAgICBz
dHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU1N0cmluZzo6
b2Zmc2V0T2ZMZW5ndGgoKSksIHJlc3VsdEdQUik7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAg
ICAgICBzdHViSml0Lm9yNjQoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tNjQoVGFnVHlwZU51
bWJlciksIHJlc3VsdEdQUik7Ci0jZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBzdHVi
Sml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcp
LCByZXN1bHRUYWdHUFIpOwotI2VuZGlmCisgICAgICAgIGJvb2wgbG9hZFRhcmdldEZyb21Qcm94
eSA9IGZhbHNlOworICAgICAgICBpZiAoYmFzZUNlbGwtPnR5cGUoKSA9PSBQdXJlRm9yd2FyZGlu
Z1Byb3h5VHlwZSkgeworICAgICAgICAgICAgYmFzZVZhbHVlID0ganNDYXN0PEpTUHJveHkqPihi
YXNlQ2VsbCktPnRhcmdldCgpOworICAgICAgICAgICAgYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXND
ZWxsKCk7CisgICAgICAgICAgICBzdHJ1Y3R1cmUgPSBiYXNlQ2VsbC0+c3RydWN0dXJlKHZtKTsK
KyAgICAgICAgICAgIGxvYWRUYXJnZXRGcm9tUHJveHkgPSB0cnVlOworICAgICAgICB9CiAKLSAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOworICAg
ICAgICBJbmxpbmVDYWNoZUFjdGlvbiBhY3Rpb24gPSBhY3Rpb25Gb3JDZWxsKHZtLCBiYXNlQ2Vs
bCk7CisgICAgICAgIGlmIChhY3Rpb24gIT0gQXR0ZW1wdFRvQ2FjaGUpCisgICAgICAgICAgICBy
ZXR1cm4gYWN0aW9uOwogCi0gICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCBzdHVi
Sml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7Ci0gICAgICAgIGlmIChwYXRj
aEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuaXNVbnNldCgpID8g
aW52YWxpZE9mZnNldCA6IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CiAgICAgICAgIAotICAgICAgICBw
YXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJl
bEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSkpOwotICAgICAgICBwYXRj
aEJ1ZmZlci5saW5rKGZhaWx1cmUsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0
T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKLQotICAgICAgICBz
dHViSW5mby5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAgICAg
ICBleGVjLT5jb2RlQmxvY2soKSwgcGF0Y2hCdWZmZXIsCi0gICAgICAgICAgICAoIkdldEJ5SWQg
c3RyaW5nIGxlbmd0aCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAgICAgICAg
ICAgICB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksIHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAgICAgICAgICBzdHViSW5m
by5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICAgICAg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAgICAgICBpZiAoc2xv
dC5pc1Vuc2V0KCkgfHwgc2xvdC5zbG90QmFzZSgpICE9IGJhc2VWYWx1ZSkgeworICAgICAgICAg
ICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKSB8
fCBzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBHaXZl
VXBPbkNhY2hlOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoc2xvdC5pc1Vuc2V0KCkp
IHsKKyAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQ
cm9wZXJ0eU1pc3MoCisgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZS5pbXBsKCkpOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNv
bmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKKyAgICAgICAgICAgICAgICAgICAgdm0s
IGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5zbG90
QmFzZSgpLAorICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUuaW1wbCgpKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNW
YWxpZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBvZmZzZXQgPSBzbG90LmlzVW5zZXQoKSA/IGludmFsaWRPZmZzZXQg
OiBjb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vZmZzZXQoKTsKKyAgICAgICAgfQog
Ci0gICAgICAgIHJlcGxhY2VXaXRoSnVtcChzdHViSW5mbywgc3R1YkluZm8uc3R1YlJvdXRpbmUt
PmNvZGUoKS5jb2RlKCkpOwotICAgICAgICByZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZCk7CisgICAgICAgIEFjY2Vzc0Nh
c2U6OkFjY2Vzc1R5cGUgdHlwZTsKKyAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgp
KQorICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6OkxvYWQ7CisgICAgICAgIGVsc2UgaWYg
KHNsb3QuaXNVbnNldCgpKQorICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6Ok1pc3M7Cisg
ICAgICAgIGVsc2UgaWYgKHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIoKSkKKyAgICAgICAgICAgIHR5
cGUgPSBBY2Nlc3NDYXNlOjpHZXR0ZXI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHR5cGUg
PSBBY2Nlc3NDYXNlOjpDdXN0b21HZXR0ZXI7CiAKLSAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVM
YXRlcjsKKyAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmdldCgKKyAgICAgICAgICAgIHZt
LCBvd25lciwgdHlwZSwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgbG9hZFRhcmdl
dEZyb21Qcm94eSwKKyAgICAgICAgICAgIHNsb3Qud2F0Y2hwb2ludFNldCgpLCBzbG90LmlzQ2Fj
aGVhYmxlQ3VzdG9tKCkgPyBzbG90LmN1c3RvbUdldHRlcigpIDogbnVsbHB0ciwKKyAgICAgICAg
ICAgIHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSA/IHNsb3Quc2xvdEJhc2UoKSA6IG51bGxwdHIp
OwogICAgIH0KIAotICAgIC8vIEZJWE1FOiBDYWNoZSBwcm9wZXJ0eSBhY2Nlc3MgZm9yIGltbWVk
aWF0ZXMuCi0gICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCi0gICAgICAgIHJldHVybiBHaXZl
VXBPbkNhY2hlOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyID0gc3R1YkluZm8u
YWRkQWNjZXNzQ2FzZSgKKyAgICAgICAgdm0sIGNvZGVCbG9jaywgcHJvcGVydHlOYW1lLCBXVEY6
Om1vdmUobmV3Q2FzZSkpOwogCi0gICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkgJiYgIXNsb3Qu
aXNVbnNldCgpKQorICAgIGlmICghY29kZVB0cikKICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7CiAKLSAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwotICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSgqdm0pOwotCi0gICAgSW5s
aW5lQ2FjaGVBY3Rpb24gYWN0aW9uID0gYWN0aW9uRm9yQ2VsbCgqdm0sIGJhc2VDZWxsKTsKLSAg
ICBpZiAoYWN0aW9uICE9IEF0dGVtcHRUb0NhY2hlKQotICAgICAgICByZXR1cm4gYWN0aW9uOwot
Ci0gICAgLy8gT3B0aW1pemUgc2VsZiBhY2Nlc3MuCi0gICAgaWYgKHNsb3QuaXNDYWNoZWFibGVW
YWx1ZSgpCi0gICAgICAgICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUKLSAgICAgICAg
JiYgIXNsb3Qud2F0Y2hwb2ludFNldCgpCi0gICAgICAgICYmIE1hY3JvQXNzZW1ibGVyOjppc0Nv
bXBhY3RQdHJBbGlnbmVkQWRkcmVzc09mZnNldChtYXhPZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0
b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpKSB7Ci0gICAgICAgIHN0cnVjdHVyZS0+c3RhcnRX
YXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKCp2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7
Ci0gICAgICAgIHJlcGF0Y2hCeUlkU2VsZkFjY2Vzcygqdm0sIGNvZGVCbG9jaywgc3R1YkluZm8s
IHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LmNhY2hlZE9mZnNldCgpLCBvcGVyYXRpb25H
ZXRCeUlkQnVpbGRMaXN0LCB0cnVlKTsKLSAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRTZWxm
KCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKLSAgICAgICAg
cmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLSAgICB9Ci0KLSAgICByZXBhdGNoQ2FsbChjb2RlQmxv
Y2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlz
dCk7CisgICAgcmVwbGFjZVdpdGhKdW1wKHN0dWJJbmZvLCBjb2RlUHRyKTsKKyAgICAKICAgICBy
ZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogfQogCkBAIC03NjYsMTEyICszMjAsNiBAQCB2b2lkIHJl
cGF0Y2hHZXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWCiAgICAgICAgIHJlcGF0Y2hDYWxsKGV4
ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdl
dEJ5SWQpOwogfQogCi1zdGF0aWMgdm9pZCBwYXRjaEp1bXBUb0dldEJ5SWRTdHViKFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbywgSklUU3R1YlJvdXRpbmUqIHN0dWJSb3V0aW5lKQotewotICAg
IFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9s
aXN0KTsKLSAgICBpZiAoc3R1YkluZm8udS5nZXRCeUlkTGlzdC5saXN0LT5kaWRTZWxmUGF0Y2hp
bmcoKSkgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoCi0gICAgICAgICAg
ICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KAotICAgICAgICAgICAg
ICAgIHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksCi0gICAgICAgICAgICBDb2RlTG9j
YXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIAotICAgIHJlcGxhY2VXaXRoSnVtcChzdHViSW5mbywgc3R1YlJvdXRpbmUt
PmNvZGUoKS5jb2RlKCkpOwotfQotCi1zdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVpbGRH
ZXRCeUlETGlzdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8pCi17Ci0gICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkKLSAgICAgICAgfHwg
KCFzbG90LmlzQ2FjaGVhYmxlKCkgJiYgIXNsb3QuaXNVbnNldCgpKSkKLSAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2Vs
bCgpOwotICAgIGJvb2wgbG9hZFRhcmdldEZyb21Qcm94eSA9IGZhbHNlOwotICAgIGlmIChiYXNl
Q2VsbC0+dHlwZSgpID09IFB1cmVGb3J3YXJkaW5nUHJveHlUeXBlKSB7Ci0gICAgICAgIGJhc2VW
YWx1ZSA9IGpzQ2FzdDxKU1Byb3h5Kj4oYmFzZUNlbGwpLT50YXJnZXQoKTsKLSAgICAgICAgYmFz
ZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7Ci0gICAgICAgIGxvYWRUYXJnZXRGcm9tUHJveHkg
PSB0cnVlOwotICAgIH0KLQotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0KLSAgICBJbmxpbmVDYWNoZUFjdGlv
biBhY3Rpb24gPSBhY3Rpb25Gb3JDZWxsKCp2bSwgYmFzZUNlbGwpOwotICAgIGlmIChhY3Rpb24g
IT0gQXR0ZW1wdFRvQ2FjaGUpCi0gICAgICAgIHJldHVybiBhY3Rpb247Ci0KLSAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKnZtKTsKLSAgICBUeXBlSW5mbyB0
eXBlSW5mbyA9IHN0cnVjdHVyZS0+dHlwZUluZm8oKTsKLQotICAgIGlmIChzdHViSW5mby5wYXRj
aC5zcGlsbE1vZGUgPT0gTmVlZFRvU3BpbGwpIHsKLSAgICAgICAgLy8gV2UgY2Fubm90IGRvIGFz
IG11Y2ggaW5saW5lIGNhY2hpbmcgaWYgdGhlIHJlZ2lzdGVycyB3ZXJlIG5vdCBmbHVzaGVkIHBy
aW9yIHRvIHRoaXMgR2V0QnlJZC4gSW4gcGFydGljdWxhciwKLSAgICAgICAgLy8gbm9uLVZhbHVl
IGNhY2hlZCBwcm9wZXJ0aWVzIHJlcXVpcmUgcGxhbnRpbmcgY2FsbHMsIHdoaWNoIHJlcXVpcmVz
IHJlZ2lzdGVycyB0byBoYXZlIGJlZW4gZmx1c2hlZC4gVGh1cywKLSAgICAgICAgLy8gaWYgcmVn
aXN0ZXJzIHdlcmUgbm90IGZsdXNoZWQsIGRvbid0IGRvIG5vbi1WYWx1ZSBjYWNoaW5nLgotICAg
ICAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpICYmICFzbG90LmlzVW5zZXQoKSkKLSAg
ICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgIH0KLQotICAgIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCA9IHNsb3QuaXNVbnNldCgpID8gaW52YWxpZE9mZnNldCA6IHNsb3QuY2FjaGVk
T2Zmc2V0KCk7Ci0gICAgCi0gICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9u
U2V0OwotICAgIGlmIChzbG90LmlzVW5zZXQoKSB8fCBzbG90LnNsb3RCYXNlKCkgIT0gYmFzZVZh
bHVlKSB7Ci0gICAgICAgIGlmICh0eXBlSW5mby5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKSB8
fCBzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7Ci0KLSAgICAgICAgaWYgKHNsb3QuaXNVbnNldCgpKQotICAgICAgICAgICAgY29uZGl0
aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNzKCp2bSwgY29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBpZGVudC5pbXBsKCkpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNG
b3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCks
IGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudC5pbXBsKCkpOwotCi0gICAg
ICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHJldHVybiBHaXZl
VXBPbkNhY2hlOwotCi0gICAgICAgIG9mZnNldCA9IHNsb3QuaXNVbnNldCgpID8gaW52YWxpZE9m
ZnNldCA6IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpOwotICAgIH0K
LSAgICAKLSAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0ID0gUG9seW1vcnBoaWNHZXRC
eUlkTGlzdDo6ZnJvbShzdHViSW5mbyk7Ci0gICAgaWYgKGxpc3QtPmlzRnVsbCgpKSB7Ci0gICAg
ICAgIC8vIFdlIG5lZWQgdGhpcyBleHRyYSBjaGVjayBiZWNhdXNlIG9mIHJlY3Vyc2lvbi4KLSAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgfQotICAgIAotICAgIFJlZlB0cjxKSVRT
dHViUm91dGluZT4gc3R1YlJvdXRpbmU7Ci0gICAgYm9vbCByZXN1bHQgPSBnZW5lcmF0ZUJ5SWRT
dHViKAotICAgICAgICBleGVjLCBraW5kRm9yKHNsb3QpLCBpZGVudCwgY3VzdG9tRm9yKHNsb3Qp
LCBzdHViSW5mbywgY29uZGl0aW9uU2V0LCBzbG90LnNsb3RCYXNlKCksIG9mZnNldCwgCi0gICAg
ICAgIHN0cnVjdHVyZSwgbG9hZFRhcmdldEZyb21Qcm94eSwgc2xvdC53YXRjaHBvaW50U2V0KCks
IAotICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHVi
SW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLAotICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChs
aXN0LT5jdXJyZW50U2xvd1BhdGhUYXJnZXQoc3R1YkluZm8pKSwgc3R1YlJvdXRpbmUpOwotICAg
IGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAKLSAgICBH
ZXRCeUlkQWNjZXNzOjpBY2Nlc3NUeXBlIGFjY2Vzc1R5cGU7Ci0gICAgaWYgKHNsb3QuaXNDYWNo
ZWFibGVWYWx1ZSgpKQotICAgICAgICBhY2Nlc3NUeXBlID0gc2xvdC53YXRjaHBvaW50U2V0KCkg
PyBHZXRCeUlkQWNjZXNzOjpXYXRjaGVkU3R1YiA6IEdldEJ5SWRBY2Nlc3M6OlNpbXBsZVN0dWI7
Ci0gICAgZWxzZSBpZiAoc2xvdC5pc1Vuc2V0KCkpCi0gICAgICAgIGFjY2Vzc1R5cGUgPSBHZXRC
eUlkQWNjZXNzOjpTaW1wbGVNaXNzOwotICAgIGVsc2UgaWYgKHNsb3QuaXNDYWNoZWFibGVHZXR0
ZXIoKSkKLSAgICAgICAgYWNjZXNzVHlwZSA9IEdldEJ5SWRBY2Nlc3M6OkdldHRlcjsKLSAgICBl
bHNlCi0gICAgICAgIGFjY2Vzc1R5cGUgPSBHZXRCeUlkQWNjZXNzOjpDdXN0b21HZXR0ZXI7Ci0g
ICAgCi0gICAgbGlzdC0+YWRkQWNjZXNzKEdldEJ5SWRBY2Nlc3MoCi0gICAgICAgICp2bSwgY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgYWNjZXNzVHlwZSwgc3R1YlJvdXRpbmUsIHN0cnVj
dHVyZSwKLSAgICAgICAgY29uZGl0aW9uU2V0KSk7Ci0gICAgCi0gICAgcGF0Y2hKdW1wVG9HZXRC
eUlkU3R1YihzdHViSW5mbywgc3R1YlJvdXRpbmUuZ2V0KCkpOwotICAgIAotICAgIHJldHVybiBs
aXN0LT5pc0Z1bGwoKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7Ci19Ci0KLXZv
aWQgYnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIEdDU2FmZUNvbmN1cnJlbnRKSVRM
b2NrZXIgbG9ja2VyKGV4ZWMtPmNvZGVCbG9jaygpLT5tX2xvY2ssIGV4ZWMtPnZtKCkuaGVhcCk7
Ci0gICAgCi0gICAgaWYgKHRyeUJ1aWxkR2V0QnlJRExpc3QoZXhlYywgYmFzZVZhbHVlLCBwcm9w
ZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvKSA9PSBHaXZlVXBPbkNhY2hlKQotICAgICAgICByZXBh
dGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBv
cGVyYXRpb25HZXRCeUlkKTsKLX0KLQogc3RhdGljIFZfSklUT3BlcmF0aW9uX0VTc2lKSkkgYXBw
cm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5U2xvdCAmc2xv
dCwgUHV0S2luZCBwdXRLaW5kKQogewogICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKSB7CkBA
IC04ODQsMzU5ICszMzIsMTYgQEAgc3RhdGljIFZfSklUT3BlcmF0aW9uX0VTc2lKSkkgYXBwcm9w
cmlhdAogICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0OwogfQogCi1zdGF0aWMg
Vl9KSVRPcGVyYXRpb25fRVNzaUpKSSBhcHByb3ByaWF0ZUxpc3RCdWlsZGluZ1B1dEJ5SWRGdW5j
dGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEtpbmQgcHV0S2luZCkKK3N0YXRp
YyBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJIGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5j
dGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEtpbmQgcHV0S2luZCkKIHsKICAg
ICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkgewogICAgICAgICBpZiAocHV0S2luZCA9PSBEaXJl
Y3QpCi0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdEJ1aWxk
TGlzdDsKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RCdWlsZExpc3Q7Cisg
ICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOwor
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOwogICAgIH0KICAg
ICBpZiAocHV0S2luZCA9PSBEaXJlY3QpCi0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0Tm9uU3RyaWN0QnVpbGRMaXN0OwotICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9u
U3RyaWN0QnVpbGRMaXN0OwotfQotCi1zdGF0aWMgYm9vbCBlbWl0UHV0UmVwbGFjZVN0dWIoCi0g
ICAgRXhlY1N0YXRlKiBleGVjLAotICAgIGNvbnN0IElkZW50aWZpZXImLAotICAgIGNvbnN0IFB1
dFByb3BlcnR5U2xvdCYgc2xvdCwKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCi0g
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZmFpbHVyZUxh
YmVsLAotICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4mIHN0dWJSb3V0aW5lKQotewotICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOwotICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BS
UmVnPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAg
IEdQUlJlZyB2YWx1ZVRhZ0dQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gu
dmFsdWVUYWdHUFIpOwotI2VuZGlmCi0gICAgR1BSUmVnIHZhbHVlR1BSID0gc3RhdGljX2Nhc3Q8
R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZUdQUik7Ci0KLSAgICBTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3IgYWxsb2NhdG9yKHN0dWJJbmZvLnBhdGNoLnVzZWRSZWdpc3RlcnMpOwotICAgIGFs
bG9jYXRvci5sb2NrKGJhc2VHUFIpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgYWxsb2Nh
dG9yLmxvY2sodmFsdWVUYWdHUFIpOwotI2VuZGlmCi0gICAgYWxsb2NhdG9yLmxvY2sodmFsdWVH
UFIpOwotICAgIAotICAgIEdQUlJlZyBzY3JhdGNoR1BSMSA9IGFsbG9jYXRvci5hbGxvY2F0ZVNj
cmF0Y2hHUFIoKTsKLQotICAgIENDYWxsSGVscGVycyBzdHViSml0KHZtLCBleGVjLT5jb2RlQmxv
Y2soKSk7Ci0KLSAgICBzaXplX3QgbnVtYmVyT2ZQYWRkaW5nQnl0ZXMgPSBhbGxvY2F0b3IucHJl
c2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoc3R1YkppdCk7Ci0KLSAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBiYWRTdHJ1Y3R1cmUgPSBzdHViSml0LmJyYW5jaFN0cnVjdHVyZSgKLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAotICAgICAgICBzdHJ1
Y3R1cmUpOwotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xv
dC5jYWNoZWRPZmZzZXQoKSkpCi0gICAgICAgIHN0dWJKaXQuc3RvcmU2NCh2YWx1ZUdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3Rv
cmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6
ZW9mKEpTVmFsdWUpKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmU2NCh2YWx1ZUdQUiwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7Ci0gICAgfQotI2VsaWYgVVNFKEpTVkFM
VUUzMl82NCkKLSAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpIHsK
LSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklu
bGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpF
Q1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7Ci0g
ICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5J
bmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JK
RUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIxKTsKLSAg
ICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
Y3JhdGNoR1BSMSwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXpl
b2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNC
aXRzLnBheWxvYWQpKSk7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNldEluQnV0dGVyZmx5KHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29k
ZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7Ci0gICAgfQotI2VuZGlmCi0gICAgCi0g
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzczsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBmYWlsdXJlOwotICAgIAotICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMoKSkg
ewotICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhzdHVi
Sml0LCBudW1iZXJPZlBhZGRpbmdCeXRlcyk7Ci0gICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1
bXAoKTsKLSAgICAgICAgCi0gICAgICAgIGJhZFN0cnVjdHVyZS5saW5rKCZzdHViSml0KTsKLSAg
ICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoc3R1YkppdCwg
bnVtYmVyT2ZQYWRkaW5nQnl0ZXMpOwotICAgICAgICBmYWlsdXJlID0gc3R1YkppdC5qdW1wKCk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOwotICAgICAg
ICBmYWlsdXJlID0gYmFkU3RydWN0dXJlOwotICAgIH0KLSAgICAKLSAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKCp2bSwgc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCksIEpJVENvbXBpbGF0aW9u
Q2FuRmFpbCk7Ci0gICAgaWYgKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRl
bHRhQ2FsbFRvRG9uZSkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZSwgZmFpbHVyZUxh
YmVsKTsKLSAgICAgICAgICAgIAotICAgIHN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1Jf
U1RVQigKLSAgICAgICAgZXhlYy0+Y29kZUJsb2NrKCksIHBhdGNoQnVmZmVyLAotICAgICAgICAo
IlB1dEJ5SWQgcmVwbGFjZSBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAgICAg
ICAgIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAgICAgICAgc3R1YkluZm8ucGF0
Y2guZGVsdGFDYWxsVG9Eb25lKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKLSAgICBF
eGVjU3RhdGUqIGV4ZWMsIFZNKiB2bSwgU3RydWN0dXJlKiYgc3RydWN0dXJlLCBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCwgCi0gICAgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCwKLSAgICBTdHJ1Y3R1cmUqJiBv
bGRTdHJ1Y3R1cmUsIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCi17
Ci0gICAgUHJvcGVydHlOYW1lIHBuYW1lKGlkZW50KTsKLSAgICBvbGRTdHJ1Y3R1cmUgPSBzdHJ1
Y3R1cmU7Ci0gICAgaWYgKCFvbGRTdHJ1Y3R1cmUtPmlzT2JqZWN0KCkgfHwgb2xkU3RydWN0dXJl
LT5pc0RpY3Rpb25hcnkoKSB8fCBwYXJzZUluZGV4KHBuYW1lKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgUHJvcGVydHlPZmZzZXQgcHJvcGVydHlPZmZzZXQ7Ci0gICAgc3RydWN0dXJl
ID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29u
Y3VycmVudGx5KG9sZFN0cnVjdHVyZSwgaWRlbnQuaW1wbCgpLCAwLCBwcm9wZXJ0eU9mZnNldCk7
Ci0KLSAgICBpZiAoIXN0cnVjdHVyZSB8fCAhc3RydWN0dXJlLT5pc09iamVjdCgpIHx8IHN0cnVj
dHVyZS0+aXNEaWN0aW9uYXJ5KCkgfHwgIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNh
Y2hlYWJsZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBTa2lwIG9wdGltaXpp
bmcgdGhlIGNhc2Ugd2hlcmUgd2UgbmVlZCBhIHJlYWxsb2MsIGlmIHdlIGRvbid0IGhhdmUKLSAg
ICAvLyBlbm91Z2ggcmVnaXN0ZXJzIHRvIG1ha2UgaXQgaGFwcGVuLgotICAgIGlmIChHUFJJbmZv
OjpudW1iZXJPZlJlZ2lzdGVycyA8IDYKLSAgICAgICAgJiYgb2xkU3RydWN0dXJlLT5vdXRPZkxp
bmVDYXBhY2l0eSgpICE9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKQotICAgICAgICAm
JiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBu
ZWVkIHJlYWxsb2MsIGFuZCB0aGUgc3RydWN0dXJlIGhhcwotICAgIC8vIGluZGV4aW5nIHN0b3Jh
Z2UuCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBza2lwIHRoaXMhIEltcGxlbWVudCBpdCEK
LSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMwOTE0Ci0g
ICAgaWYgKG9sZFN0cnVjdHVyZS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHB1dEtpbmQgPT0gTm90RGlyZWN0KSB7Ci0gICAgICAg
IGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzcygK
LSAgICAgICAgICAgICp2bSwgZXhlYy0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgpLCBl
eGVjLCBzdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7Ci0gICAgICAgIGlmICghY29uZGl0aW9uU2V0
LmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBDb2Rl
TG9jYXRpb25MYWJlbCBmYWlsdXJlTGFiZWwgPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
bGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKLSAgICBS
ZWZQdHI8SklUU3R1YlJvdXRpbmU+JiBzdHViUm91dGluZSA9IHN0dWJJbmZvLnN0dWJSb3V0aW5l
OwotCi0gICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBh
dGNoLmJhc2VHUFIpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgR1BSUmVnIHZhbHVlVGFn
R1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZVRhZ0dQUik7Ci0j
ZW5kaWYKLSAgICBHUFJSZWcgdmFsdWVHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZv
LnBhdGNoLnZhbHVlR1BSKTsKLSAgICAKLSAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxs
b2NhdG9yKHN0dWJJbmZvLnBhdGNoLnVzZWRSZWdpc3RlcnMpOwotICAgIGFsbG9jYXRvci5sb2Nr
KGJhc2VHUFIpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgYWxsb2NhdG9yLmxvY2sodmFs
dWVUYWdHUFIpOwotI2VuZGlmCi0gICAgYWxsb2NhdG9yLmxvY2sodmFsdWVHUFIpOwotICAgIAot
ICAgIENDYWxsSGVscGVycyBzdHViSml0KHZtKTsKLSAgICAKLSAgICBib29sIG5lZWRUaGlyZFNj
cmF0Y2ggPSBmYWxzZTsKLSAgICBpZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9
IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKQotICAgICAgICAmJiBvbGRTdHJ1Y3R1
cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgbmVlZFRoaXJkU2NyYXRjaCA9IHRy
dWU7Ci0gICAgfQotCi0gICAgR1BSUmVnIHNjcmF0Y2hHUFIxID0gYWxsb2NhdG9yLmFsbG9jYXRl
U2NyYXRjaEdQUigpOwotICAgIEFTU0VSVChzY3JhdGNoR1BSMSAhPSBiYXNlR1BSKTsKLSAgICBB
U1NFUlQoc2NyYXRjaEdQUjEgIT0gdmFsdWVHUFIpOwotICAgIAotICAgIEdQUlJlZyBzY3JhdGNo
R1BSMiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKLSAgICBBU1NFUlQoc2NyYXRj
aEdQUjIgIT0gYmFzZUdQUik7Ci0gICAgQVNTRVJUKHNjcmF0Y2hHUFIyICE9IHZhbHVlR1BSKTsK
LSAgICBBU1NFUlQoc2NyYXRjaEdQUjIgIT0gc2NyYXRjaEdQUjEpOwotCi0gICAgR1BSUmVnIHNj
cmF0Y2hHUFIzOwotICAgIGlmIChuZWVkVGhpcmRTY3JhdGNoKSB7Ci0gICAgICAgIHNjcmF0Y2hH
UFIzID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwotICAgICAgICBBU1NFUlQoc2Ny
YXRjaEdQUjMgIT0gYmFzZUdQUik7Ci0gICAgICAgIEFTU0VSVChzY3JhdGNoR1BSMyAhPSB2YWx1
ZUdQUik7Ci0gICAgICAgIEFTU0VSVChzY3JhdGNoR1BSMyAhPSBzY3JhdGNoR1BSMSk7Ci0gICAg
ICAgIEFTU0VSVChzY3JhdGNoR1BSMyAhPSBzY3JhdGNoR1BSMik7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIHNjcmF0Y2hHUFIzID0gSW52YWxpZEdQUlJlZzsKLSAgICAKLSAgICBzaXplX3QgbnVtYmVy
T2ZQYWRkaW5nQnl0ZXMgPSBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hp
bmcoc3R1YkppdCk7Ci0KLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2Vz
OwotICAgICAgICAgICAgCi0gICAgQVNTRVJUKG9sZFN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNo
cG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7Ci0gICAgCi0gICAgZmFpbHVyZUNhc2VzLmFw
cGVuZChzdHViSml0LmJyYW5jaFN0cnVjdHVyZSgKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgCi0gICAgICAgIG9sZFN0cnVjdHVyZSkpOwotICAgIAot
ICAgIGNoZWNrT2JqZWN0UHJvcGVydHlDb25kaXRpb25zKAotICAgICAgICBjb25kaXRpb25TZXQs
IGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mbywgc3R1YkppdCwgZmFpbHVyZUNhc2VzLCBzY3Jh
dGNoR1BSMSk7Ci0KLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7Ci0gICAg
Ci0gICAgYm9vbCBzY3JhdGNoR1BSMUhhc1N0b3JhZ2UgPSBmYWxzZTsKLSAgICAKLSAgICBpZiAo
c3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSkgewotICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IHN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKLSAgICAgICAgQ29waWVkQWxsb2NhdG9y
KiBjb3BpZWRBbGxvY2F0b3IgPSAmdm0tPmhlYXAuc3RvcmFnZUFsbG9jYXRvcigpOwotICAgICAg
ICAKLSAgICAgICAgaWYgKCFvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAg
ICAgICAgICAgIHN0dWJKaXQubG9hZFB0cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1h
aW5pbmcsIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChzdHViSml0
LmJyYW5jaFN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6U2lnbmVkLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BSMSkpOwotICAgICAgICAgICAgc3R1YkppdC5z
dG9yZVB0cihzY3JhdGNoR1BSMSwgJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5n
KTsKLSAgICAgICAgICAgIHN0dWJKaXQubmVnUHRyKHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAg
IHN0dWJKaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFs
bG9jYXRvci0+bV9jdXJyZW50UGF5bG9hZEVuZCksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAg
IHN0dWJKaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEpTVmFs
dWUpKSwgc2NyYXRjaEdQUjEpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc2l6ZV90
IG9sZFNpemUgPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNW
YWx1ZSk7Ci0gICAgICAgICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUjMpOwotICAg
ICAgICAgICAgc3R1YkppdC5sb2FkUHRyKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFp
bmluZywgc2NyYXRjaEdQUjEpOwotICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKHN0dWJKaXQu
YnJhbmNoU3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpTaWduZWQsIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIobmV3U2l6ZSksIHNjcmF0Y2hHUFIxKSk7Ci0gICAgICAgICAgICBzdHViSml0LnN0
b3JlUHRyKHNjcmF0Y2hHUFIxLCAmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcp
OwotICAgICAgICAgICAgc3R1YkppdC5uZWdQdHIoc2NyYXRjaEdQUjEpOwotICAgICAgICAgICAg
c3R1YkppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcygmY29waWVkQWxs
b2NhdG9yLT5tX2N1cnJlbnRQYXlsb2FkRW5kKSwgc2NyYXRjaEdQUjEpOwotICAgICAgICAgICAg
c3R1YkppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoSlNWYWx1
ZSkpLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgICAgICAvLyBXZSBoYXZlIHNjcmF0Y2hHUFIxID0g
bmV3IHN0b3JhZ2UsIHNjcmF0Y2hHUFIzID0gb2xkIHN0b3JhZ2UsIHNjcmF0Y2hHUFIyID0gYXZh
aWxhYmxlCi0gICAgICAgICAgICBmb3IgKHNpemVfdCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBvbGRT
aXplOyBvZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKSkgewotICAgICAgICAgICAgICAgIHN0dWJKaXQu
bG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMywgLXN0YXRpY19jYXN0
PHB0cmRpZmZfdD4ob2Zmc2V0ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpLCBz
Y3JhdGNoR1BSMik7Ci0gICAgICAgICAgICAgICAgc3R1YkppdC5zdG9yZVB0cihzY3JhdGNoR1BS
MiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIC1zdGF0aWNfY2FzdDxwdHJk
aWZmX3Q+KG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZih2b2lkKikpKSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHN0dWJKaXQuc3RvcmVQdHIo
c2NyYXRjaEdQUjEsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSkpOwotICAgICAgICBzY3JhdGNoR1BSMUhhc1N0b3JhZ2UgPSB0cnVl
OwotICAgIH0KLQotICAgIEFTU0VSVChvbGRTdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpID09
IHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCkpOwotICAgIEFTU0VSVChvbGRTdHJ1Y3R1cmUt
PnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdzKCkgPT0gc3RydWN0dXJlLT50eXBlSW5mbygpLmlu
bGluZVR5cGVGbGFncygpKTsKLSAgICBBU1NFUlQob2xkU3RydWN0dXJlLT5pbmRleGluZ1R5cGUo
KSA9PSBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAg
IHVpbnQzMl90IHZhbCA9IHN0cnVjdHVyZS0+aWQoKTsKLSNlbHNlCi0gICAgdWludDMyX3QgdmFs
ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4oc3RydWN0dXJlLT5pZCgpKTsKLSNlbmRpZgot
ICAgIHN0dWJKaXQuc3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHZhbCksIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSkpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpKQotICAgICAgICBzdHViSml0LnN0b3JlNjQodmFsdWVHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2Uo
KSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihK
U1ZhbHVlKSkpOwotICAgIGVsc2UgewotICAgICAgICBpZiAoIXNjcmF0Y2hHUFIxSGFzU3RvcmFn
ZSkKLSAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMSk7Ci0gICAg
ICAgIHN0dWJKaXQuc3RvcmU2NCh2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2Ny
YXRjaEdQUjEsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9m
KEpTVmFsdWUpKSk7Ci0gICAgfQotI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBpZiAoaXNJ
bmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpIHsKLSAgICAgICAgc3R1YkppdC5zdG9y
ZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6
b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNo
ZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZh
bHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUz
Mih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6
Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRW
YWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYg
KCFzY3JhdGNoR1BSMUhhc1N0b3JhZ2UpCi0gICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgp
KSwgc2NyYXRjaEdQUjEpOwotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNh
Y2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVk
VmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKLSAgICAgICAgc3R1YkppdC5zdG9y
ZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zm
c2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBP
QkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKLSAg
ICB9Ci0jZW5kaWYKLSAgICAKLSAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gbnVs
bHB0cjsKLQotI2lmIEVOQUJMRShHR0MpCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbEZs
dXNoV3JpdGVCYXJyaWVyQnVmZmVyOwotICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFj
aXR5KCkgIT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBzdHViSml0Lmp1
bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKGJhc2VHUFIpOwotICAgICAgICBXcml0ZUJhcnJpZXJC
dWZmZXImIHdyaXRlQmFycmllckJ1ZmZlciA9IHN0dWJKaXQudm0oKS0+aGVhcC53cml0ZUJhcnJp
ZXJCdWZmZXIoKTsKLSAgICAgICAgc3R1YkppdC5sb2FkMzIod3JpdGVCYXJyaWVyQnVmZmVyLmN1
cnJlbnRJbmRleEFkZHJlc3MoKSwgc2NyYXRjaEdQUjIpOwotICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBuZWVkVG9GbHVzaCA9Ci0gICAgICAgICAgICBzdHViSml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHNjcmF0Y2hHUFIyLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKHdyaXRlQmFycmllckJ1ZmZlci5jYXBhY2l0eSgpKSk7Ci0KLSAgICAgICAgc3R1
YkppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoR1BSMik7
Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUzMihzY3JhdGNoR1BSMiwgd3JpdGVCYXJyaWVyQnVmZmVy
LmN1cnJlbnRJbmRleEFkZHJlc3MoKSk7Ci0KLSAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHdyaXRlQmFycmllckJ1ZmZlci5idWZmZXIoKSksIHNjcmF0
Y2hHUFIxKTsKLSAgICAgICAgLy8gV2UgdXNlIGFuIG9mZnNldCBvZiAtc2l6ZW9mKHZvaWQqKSBi
ZWNhdXNlIHdlIGFscmVhZHkgYWRkZWQgMSB0byBzY3JhdGNoR1BSMi4KLSAgICAgICAgc3R1Ykpp
dC5zdG9yZVB0cihiYXNlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHNjcmF0Y2hHUFIx
LCBzY3JhdGNoR1BSMiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBzdGF0aWNfY2FzdDxpbnQz
Ml90Pigtc2l6ZW9mKHZvaWQqKSkpKTsKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBk
b25lV2l0aEJhcnJpZXIgPSBzdHViSml0Lmp1bXAoKTsKLSAgICAgICAgbmVlZFRvRmx1c2gubGlu
aygmc3R1YkppdCk7Ci0KLSAgICAgICAgc2NyYXRjaEJ1ZmZlciA9IHZtLT5zY3JhdGNoQnVmZmVy
Rm9yU2l6ZShhbGxvY2F0b3IuZGVzaXJlZFNjcmF0Y2hCdWZmZXJTaXplRm9yQ2FsbCgpKTsKLSAg
ICAgICAgYWxsb2NhdG9yLnByZXNlcnZlVXNlZFJlZ2lzdGVyc1RvU2NyYXRjaEJ1ZmZlckZvckNh
bGwoc3R1YkppdCwgc2NyYXRjaEJ1ZmZlciwgc2NyYXRjaEdQUjIpOwotICAgICAgICBzdHViSml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlR1BSKTsKLSAgICAgICAgY2FsbEZsdXNo
V3JpdGVCYXJyaWVyQnVmZmVyID0gc3R1YkppdC5jYWxsKCk7Ci0gICAgICAgIGFsbG9jYXRvci5y
ZXN0b3JlVXNlZFJlZ2lzdGVyc0Zyb21TY3JhdGNoQnVmZmVyRm9yQ2FsbChzdHViSml0LCBzY3Jh
dGNoQnVmZmVyLCBzY3JhdGNoR1BSMik7Ci0KLSAgICAgICAgZG9uZVdpdGhCYXJyaWVyLmxpbmso
JnN0dWJKaXQpOwotICAgICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsoJnN0dWJK
aXQpOwotICAgIH0KLSNlbmRpZgotCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzczsK
LSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsdXJlOwotICAgICAgICAgICAgCi0gICAgaWYg
KGFsbG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygpKSB7Ci0gICAgICAgIGFsbG9jYXRvci5yZXN0
b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKHN0dWJKaXQsIG51bWJlck9mUGFkZGluZ0J5dGVz
KTsKLSAgICAgICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOwotCi0gICAgICAgIGZhaWx1cmVD
YXNlcy5saW5rKCZzdHViSml0KTsKLSAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdp
c3RlcnNCeVBvcHBpbmcoc3R1YkppdCwgbnVtYmVyT2ZQYWRkaW5nQnl0ZXMpOwotICAgICAgICBm
YWlsdXJlID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHN1Y2Nlc3MgPSBz
dHViSml0Lmp1bXAoKTsKLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBvcGVyYXRpb25D
YWxsOwotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3NJblNsb3dQYXRoOwotICAgIAot
ICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gb2xkU3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgIHNsb3dQYXRoLmxpbmsoJnN0dWJKaXQpOwot
ICAgICAgICAKLSAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBp
bmcoc3R1YkppdCwgbnVtYmVyT2ZQYWRkaW5nQnl0ZXMpOwotICAgICAgICBpZiAoIXNjcmF0Y2hC
dWZmZXIpCi0gICAgICAgICAgICBzY3JhdGNoQnVmZmVyID0gdm0tPnNjcmF0Y2hCdWZmZXJGb3JT
aXplKGFsbG9jYXRvci5kZXNpcmVkU2NyYXRjaEJ1ZmZlclNpemVGb3JDYWxsKCkpOwotICAgICAg
ICBhbGxvY2F0b3IucHJlc2VydmVVc2VkUmVnaXN0ZXJzVG9TY3JhdGNoQnVmZmVyRm9yQ2FsbChz
dHViSml0LCBzY3JhdGNoQnVmZmVyLCBzY3JhdGNoR1BSMSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUdQUiwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMihzbG90LmNhY2hlZE9mZnNldCgpKSwgdmFsdWVHUFIpOwotI2Vsc2UKLSAgICAg
ICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMihzbG90LmNhY2hlZE9mZnNldCgpKSwgdmFsdWVHUFIsIHZhbHVlVGFnR1BSKTsKLSNlbmRp
ZgotICAgICAgICBvcGVyYXRpb25DYWxsID0gc3R1YkppdC5jYWxsKCk7Ci0gICAgICAgIGFsbG9j
YXRvci5yZXN0b3JlVXNlZFJlZ2lzdGVyc0Zyb21TY3JhdGNoQnVmZmVyRm9yQ2FsbChzdHViSml0
LCBzY3JhdGNoQnVmZmVyLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIHN1Y2Nlc3NJblNsb3dQYXRo
ID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgfQotICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoKnZtLCBzdHViSml0LCBleGVjLT5jb2RlQmxvY2soKSwgSklUQ29tcGlsYXRpb25DYW5GYWls
KTsKLSAgICBpZiAocGF0Y2hCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIAotICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxs
VG9Eb25lKSk7Ci0gICAgaWYgKGFsbG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygpKQotICAgICAg
ICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmUsIGZhaWx1cmVMYWJlbCk7Ci0gICAgZWxzZQotICAg
ICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlcywgZmFpbHVyZUxhYmVsKTsKLSAgICBp
ZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSkgewotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbkNhbGws
IG9wZXJhdGlvblJlYWxsb2NhdGVTdG9yYWdlQW5kRmluaXNoUHV0KTsKLSAgICAgICAgcGF0Y2hC
dWZmZXIubGluayhzdWNjZXNzSW5TbG93UGF0aCwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSk7Ci0jaWYgRU5B
QkxFKEdHQykKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsRmx1c2hXcml0ZUJhcnJpZXJC
dWZmZXIsIG9wZXJhdGlvbkZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKTsKLSNlbmRpZgotICAgIH0K
LSAgICAKLSAgICBzdHViUm91dGluZSA9Ci0gICAgICAgIGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAot
ICAgICAgICAgICAgRklOQUxJWkVfQ09ERV9GT1IoCi0gICAgICAgICAgICAgICAgZXhlYy0+Y29k
ZUJsb2NrKCksIHBhdGNoQnVmZmVyLAotICAgICAgICAgICAgICAgICgiUHV0QnlJZCAlc3RyYW5z
aXRpb24gc3R1YiAoJXAgLT4gJXApIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAgICAg
ICAgICAgICAgICAgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA/ICJyZWFsbG9jYXRpbmcgIiA6ICIiLAotICAgICAgICAg
ICAgICAgICAgICBvbGRTdHJ1Y3R1cmUsIHN0cnVjdHVyZSwKLSAgICAgICAgICAgICAgICAgICAg
dG9DU3RyaW5nKCpleGVjLT5jb2RlQmxvY2soKSkuZGF0YSgpLCBzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24ubGFiZWxBdE9mZnNldCgKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZv
LnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpLAotICAgICAgICAg
ICAgKnZtLAotICAgICAgICAgICAgZXhlYy0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgp
LAotICAgICAgICAgICAgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0cnVj
dHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwKLSAgICAgICAgICAgIHN0cnVjdHVyZSk7Ci0gICAg
Ci0gICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0
Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RP
cHRpbWl6ZTsKIH0KIAogc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRChF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
Y29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCkBAIC0xMjQ1LDcgKzM1
MCw4IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAgICAgCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBl
eGVjLT5jb2RlQmxvY2soKTsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBTY3JpcHRF
eGVjdXRhYmxlKiBvd25lciA9IGNvZGVCbG9jay0+b3duZXJTY3JpcHRFeGVjdXRhYmxlKCk7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKIAogICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQog
ICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKQEAgLTEyNTYsMjEwICszNjIsMTA4IEBAIHN0
YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAgICBpZiAoIXN0cnVjdHVy
ZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQogICAgICAgICByZXR1cm4gR2l2ZVVw
T25DYWNoZTsKIAotICAgIC8vIE9wdGltaXplIHNlbGYgYWNjZXNzLgorICAgIHN0ZDo6dW5pcXVl
X3B0cjxBY2Nlc3NDYXNlPiBuZXdDYXNlOworCiAgICAgaWYgKHNsb3QuYmFzZSgpID09IGJhc2VW
YWx1ZSAmJiBzbG90LmlzQ2FjaGVhYmxlUHV0KCkpIHsKLSAgICAgICAgaWYgKHNsb3QudHlwZSgp
ID09IFB1dFByb3BlcnR5U2xvdDo6TmV3UHJvcGVydHkpIHsKKyAgICAgICAgaWYgKHNsb3QudHlw
ZSgpID09IFB1dFByb3BlcnR5U2xvdDo6RXhpc3RpbmdQcm9wZXJ0eSkgeworICAgICAgICAgICAg
c3RydWN0dXJlLT5kaWRDYWNoZVByb3BlcnR5UmVwbGFjZW1lbnQodm0sIHNsb3QuY2FjaGVkT2Zm
c2V0KCkpOworICAgICAgICAKKyAgICAgICAgICAgIHB0cmRpZmZfdCBvZmZzZXRUb1BhdGNoZWRT
dG9yYWdlID0gb2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0
KCkpOworICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlVu
c2V0CisgICAgICAgICAgICAgICAgJiYgTWFjcm9Bc3NlbWJsZXI6OmlzUHRyQWxpZ25lZEFkZHJl
c3NPZmZzZXQob2Zmc2V0VG9QYXRjaGVkU3RvcmFnZSkKKyAgICAgICAgICAgICAgICAmJiAhc3Ry
dWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoCisgICAgICAgICAgICAg
ICAgICAgIGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQo
KSwKKyAgICAgICAgICAgICAgICAgICAgYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJZEZ1bmN0
aW9uKHNsb3QsIHB1dEtpbmQpLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5p
dFB1dEJ5SWRSZXBsYWNlKAorICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZTsKLSAgICAgICAgICAgIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKLSAgICAgICAgICAgIGlmICghZW1pdFB1dFRyYW5z
aXRpb25TdHViKGV4ZWMsIHZtLCBzdHJ1Y3R1cmUsIGlkZW50LCBzbG90LCBzdHViSW5mbywgcHV0
S2luZCwgb2xkU3RydWN0dXJlLCBjb25kaXRpb25TZXQpKQotICAgICAgICAgICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OnJlcGxh
Y2Uodm0sIG93bmVyLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xv
dDo6TmV3UHJvcGVydHkpOwogCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1
bXAoCi0gICAgICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9m
ZnNldCgKLSAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1w
KSwKLSAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby5zdHViUm91dGlu
ZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgICAgICAgICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJ
ZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3R1
YkluZm8uaW5pdFB1dEJ5SWRUcmFuc2l0aW9uKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFi
bGUoKSwgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgcHV0S2luZCA9PSBE
aXJlY3QpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVy
OwotICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXN0cnVjdHVyZS0+aXNPYmplY3QoKSB8fCBz
dHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBP
bkNhY2hlOwogCi0gICAgICAgIGlmICghTWFjcm9Bc3NlbWJsZXI6OmlzUHRyQWxpZ25lZEFkZHJl
c3NPZmZzZXQob2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0
KCkpKSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0OworICAgICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUg
PQorICAgICAgICAgICAgICAgIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlz
dGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseSgKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJl
LCBpZGVudC5pbXBsKCksIDAsIG9mZnNldCk7CisgICAgICAgICAgICBpZiAoIW5ld1N0cnVjdHVy
ZSB8fCAhbmV3U3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAKLSAgICAgICAgc3RydWN0dXJlLT5k
aWRDYWNoZVByb3BlcnR5UmVwbGFjZW1lbnQoKnZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKLSAg
ICAgICAgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKCp2bSwgY29kZUJsb2NrLCBzdHViSW5mbywgc3Ry
dWN0dXJlLCBpZGVudCwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgYXBwcm9wcmlhdGVMaXN0QnVpbGRp
bmdQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCksIGZhbHNlKTsKLSAgICAgICAgc3R1Yklu
Zm8uaW5pdFB1dEJ5SWRSZXBsYWNlKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwg
c3RydWN0dXJlKTsKLSAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLSAgICB9CisgICAg
ICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJlLT5wcmV2aW91c0lEKCkgPT0gc3RydWN0dXJlKTsK
KyAgICAgICAgICAgIEFTU0VSVCghbmV3U3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSk7CisgICAg
ICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJlLT5pc09iamVjdCgpKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAg
ICAgICAgICAgaWYgKHB1dEtpbmQgPT0gTm90RGlyZWN0KSB7CisgICAgICAgICAgICAgICAgY29u
ZGl0aW9uU2V0ID0KKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJv
cGVydHlTZXR0ZXJNaXNzKAorICAgICAgICAgICAgICAgICAgICAgICAgdm0sIG93bmVyLCBleGVj
LCBuZXdTdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFjb25k
aXRpb25TZXQuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25D
YWNoZTsKKyAgICAgICAgICAgIH0KIAotICAgIGlmICgoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgp
IHx8IHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSkKLSAgICAgICAgJiYgc3R1YkluZm8ucGF0Y2gu
c3BpbGxNb2RlID09IERvbnRTcGlsbCkgewotICAgICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+
IHN0dWJSb3V0aW5lOworICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OnRyYW5zaXRp
b24odm0sIG93bmVyLCBzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgb2Zmc2V0LCBjb25kaXRpb25T
ZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkg
fHwgc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpKSB7CisgICAgICAgIGlmIChzbG90LmlzQ2FjaGVh
YmxlQ3VzdG9tKCkpIHsKKyAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNv
bmRpdGlvblNldDsKIAotICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRp
b25TZXQ7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKLSAgICAgICAgaWYgKHNsb3Qu
YmFzZSgpICE9IGJhc2VWYWx1ZSkgewotICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVD
dXN0b20oKSkgeworICAgICAgICAgICAgaWYgKHNsb3QuYmFzZSgpICE9IGJhc2VWYWx1ZSkgewog
ICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9CiAgICAgICAgICAgICAgICAgICAgIGdlbmVy
YXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0Q3VzdG9tKAotICAgICAgICAgICAg
ICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1
Y3R1cmUsIHNsb3QuYmFzZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnQuaW1wbCgp
KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0K
LSAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVy
dHlIaXQoCi0gICAgICAgICAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5iYXNlKCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICBpZGVudC5pbXBsKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgdm0sIG93bmVy
LCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLCBpZGVudC5pbXBsKCkpOworICAgICAgICAg
ICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIWNv
bmRpdGlvblNldC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7Ci0gICAgICAgICAgICBvZmZzZXQgPSBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgPyBpbnZh
bGlkT2Zmc2V0IDogY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCk7Ci0g
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgb2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsK
LQotICAgICAgICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiBsaXN0OwotICAgICAgICBsaXN0ID0g
UG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6ZnJvbShwdXRLaW5kLCBzdHViSW5mbyk7Ci0KLSAgICAg
ICAgYm9vbCByZXN1bHQgPSBnZW5lcmF0ZUJ5SWRTdHViKAotICAgICAgICAgICAgZXhlYywga2lu
ZEZvcihzbG90KSwgaWRlbnQsIGN1c3RvbUZvcihzbG90KSwgc3R1YkluZm8sIGNvbmRpdGlvblNl
dCwgc2xvdC5iYXNlKCksCi0gICAgICAgICAgICBvZmZzZXQsIHN0cnVjdHVyZSwgZmFsc2UsIG51
bGxwdHIsCi0gICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9m
ZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLAotICAgICAgICAgICAgc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFD
YWxsVG9TbG93Q2FzZSksCi0gICAgICAgICAgICBzdHViUm91dGluZSk7Ci0gICAgICAgIGlmICgh
cmVzdWx0KQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgIAotICAg
ICAgICBsaXN0LT5hZGRBY2Nlc3MoUHV0QnlJZEFjY2Vzczo6c2V0dGVyKAotICAgICAgICAgICAg
KnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAotICAgICAgICAgICAgc2xvdC5pc0Nh
Y2hlYWJsZVNldHRlcigpID8gUHV0QnlJZEFjY2Vzczo6U2V0dGVyIDogUHV0QnlJZEFjY2Vzczo6
Q3VzdG9tU2V0dGVyLAotICAgICAgICAgICAgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIHNsb3Qu
Y3VzdG9tU2V0dGVyKCksIHN0dWJSb3V0aW5lKSk7Ci0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGF0Y2hKdW1wKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1
YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRp
bmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICAgICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1
bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWxpc3QtPmlz
RnVsbCgpKTsKLSAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gR2l2ZVVwT25DYWNoZTsKLX0KLQotdm9pZCByZXBhdGNoUHV0QnlJRChFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQotewotICAgIEdDU2FmZUNv
bmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGV4ZWMtPmNvZGVCbG9jaygpLT5tX2xvY2ssIGV4ZWMt
PnZtKCkuaGVhcCk7Ci0gICAgCi0gICAgaWYgKHRyeUNhY2hlUHV0QnlJRChleGVjLCBiYXNlVmFs
dWUsIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0S2luZCkgPT0g
R2l2ZVVwT25DYWNoZSkKLSAgICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0
aW9uKHNsb3QsIHB1dEtpbmQpKTsKLX0KIAotc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUJ1
aWxkUHV0QnlJZExpc3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0
UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQg
cHV0S2luZCkKLXsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygp
OwotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotCi0gICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxs
KCkpCi0gICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgaWYgKCFzbG90LmlzQ2Fj
aGVhYmxlUHV0KCkgJiYgIXNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSAmJiAhc2xvdC5pc0NhY2hl
YWJsZVNldHRlcigpKQotICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgIGlmICgh
c3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCi0gICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOwotCi0gICAgLy8gT3B0aW1pemUgc2VsZiBhY2Nlc3MuCi0gICAgaWYg
KHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSAmJiBzbG90LmlzQ2FjaGVhYmxlUHV0KCkpIHsKLSAg
ICAgICAgUG9seW1vcnBoaWNQdXRCeUlkTGlzdCogbGlzdDsKLSAgICAgICAgUmVmUHRyPEpJVFN0
dWJSb3V0aW5lPiBzdHViUm91dGluZTsKLSAgICAgICAgCi0gICAgICAgIGlmIChzbG90LnR5cGUo
KSA9PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5KSB7Ci0gICAgICAgICAgICBsaXN0ID0g
UG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6ZnJvbShwdXRLaW5kLCBzdHViSW5mbyk7Ci0gICAgICAg
ICAgICBpZiAobGlzdC0+aXNGdWxsKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7IC8vIFdpbGwgZ2V0IGhlcmUgZHVlIHRvIHJlY3Vyc2lvbi4KLQotICAgICAgICAgICAg
U3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmU7CisgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2Fz
ZTo6c2V0dGVyKAorICAgICAgICAgICAgICAgIHZtLCBvd25lciwgQWNjZXNzQ2FzZTo6Q3VzdG9t
U2V0dGVyLCBzdHJ1Y3R1cmUsIGludmFsaWRPZmZzZXQsIGNvbmRpdGlvblNldCwKKyAgICAgICAg
ICAgICAgICBzbG90LmN1c3RvbVNldHRlcigpLCBzbG90LmJhc2UoKSk7CisgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7
Ci0gICAgICAgICAgICBpZiAoIWVtaXRQdXRUcmFuc2l0aW9uU3R1YihleGVjLCB2bSwgc3RydWN0
dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kLCBvbGRTdHJ1Y3R1cmUs
IGNvbmRpdGlvblNldCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Cisg
ICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CiAKLSAgICAgICAgICAgIHN0dWJSb3V0
aW5lID0gc3R1YkluZm8uc3R1YlJvdXRpbmU7Ci0gICAgICAgICAgICBsaXN0LT5hZGRBY2Nlc3Mo
Ci0gICAgICAgICAgICAgICAgUHV0QnlJZEFjY2Vzczo6dHJhbnNpdGlvbigKLSAgICAgICAgICAg
ICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAotICAgICAgICAgICAg
ICAgICAgICBvbGRTdHJ1Y3R1cmUsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LAotICAgICAgICAg
ICAgICAgICAgICBzdHViUm91dGluZSkpOworICAgICAgICAgICAgaWYgKHNsb3QuYmFzZSgpICE9
IGJhc2VWYWx1ZSkgeworICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9CisgICAgICAgICAg
ICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAorICAg
ICAgICAgICAgICAgICAgICAgICAgdm0sIG93bmVyLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFz
ZSgpLCBpZGVudC5pbXBsKCkpOworICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0Lmlz
VmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAg
ICAgICAgICAgICAgb2Zmc2V0ID0gY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zm
c2V0KCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSBzbG90
LmNhY2hlZE9mZnNldCgpOwogCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBsaXN0ID0g
UG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6ZnJvbShwdXRLaW5kLCBzdHViSW5mbyk7Ci0gICAgICAg
ICAgICBpZiAobGlzdC0+aXNGdWxsKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7IC8vIFdpbGwgZ2V0IGhlcmUgZHVlIHRvIHJlY3Vyc2lvbi4KLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgc3RydWN0dXJlLT5kaWRDYWNoZVByb3BlcnR5UmVwbGFjZW1lbnQoKnZtLCBz
bG90LmNhY2hlZE9mZnNldCgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gV2UncmUg
bm93IGNvbW1pdHRlZCB0byBjcmVhdGluZyB0aGUgc3R1Yi4gTW9ncmlmeSB0aGUgbWV0YS1kYXRh
IGFjY29yZGluZ2x5LgotICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBlbWl0UHV0UmVwbGFjZVN0
dWIoCi0gICAgICAgICAgICAgICAgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywg
Ci0gICAgICAgICAgICAgICAgc3RydWN0dXJlLCBDb2RlTG9jYXRpb25MYWJlbChsaXN0LT5jdXJy
ZW50U2xvd1BhdGhUYXJnZXQoKSksIHN0dWJSb3V0aW5lKTsKLSAgICAgICAgICAgIGlmICghcmVz
dWx0KQotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBsaXN0LT5hZGRBY2Nlc3MoCi0gICAgICAgICAgICAgICAgUHV0QnlJZEFj
Y2Vzczo6cmVwbGFjZSgKLSAgICAgICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpLAotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIHN0dWJSb3V0aW5l
KSk7CisgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6c2V0dGVyKAorICAgICAgICAg
ICAgICAgIHZtLCBvd25lciwgQWNjZXNzQ2FzZTo6U2V0dGVyLCBzdHJ1Y3R1cmUsIG9mZnNldCwg
Y29uZGl0aW9uU2V0KTsKICAgICAgICAgfQotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRj
aEp1bXAoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5w
YXRjaC5kZWx0YUNhbGxUb0p1bXApLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29k
ZSgpLmNvZGUoKSkpOwotICAgICAgICBpZiAobGlzdC0+aXNGdWxsKCkpCi0gICAgICAgICAgICBy
ZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9w
cmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKLQotICAgICAgICBy
ZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogICAgIH0KIAotICAgIGlmICgoc2xvdC5pc0NhY2hlYWJs
ZUN1c3RvbSgpIHx8IHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSkKLSAgICAgICAgJiYgc3R1Yklu
Zm8ucGF0Y2guc3BpbGxNb2RlID09IERvbnRTcGlsbCkgewotICAgICAgICBSZWZQdHI8SklUU3R1
YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwotICAgICAgICAKLSAgICAgICAgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQgY29uZGl0aW9uU2V0OwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7
Ci0gICAgICAgIGlmIChzbG90LmJhc2UoKSAhPSBiYXNlVmFsdWUpIHsKLSAgICAgICAgICAgIGlm
IChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkpIHsKLSAgICAgICAgICAgICAgICBjb25kaXRpb25T
ZXQgPQotICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQ
cm9wZXJ0eUhpdEN1c3RvbSgKLSAgICAgICAgICAgICAgICAgICAgICAgICp2bSwgY29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBzbG90LmJhc2UoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZS5pbXBsKCkpOwotICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPQotICAgICAgICAgICAgICAgICAg
ICBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKLSAgICAgICAgICAg
ICAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3Ry
dWN0dXJlLCBzbG90LmJhc2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFt
ZS5pbXBsKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQu
aXNWYWxpZCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAg
ICAgICAgb2Zmc2V0ID0gc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpID8gaW52YWxpZE9mZnNldCA6
IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpOwotICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0KLSAgICAgICAg
UG9seW1vcnBoaWNQdXRCeUlkTGlzdCogbGlzdDsKLSAgICAgICAgbGlzdCA9IFBvbHltb3JwaGlj
UHV0QnlJZExpc3Q6OmZyb20ocHV0S2luZCwgc3R1YkluZm8pOwotCi0gICAgICAgIGJvb2wgcmVz
dWx0ID0gZ2VuZXJhdGVCeUlkU3R1YigKLSAgICAgICAgICAgIGV4ZWMsIGtpbmRGb3Ioc2xvdCks
IHByb3BlcnR5TmFtZSwgY3VzdG9tRm9yKHNsb3QpLCBzdHViSW5mbywgY29uZGl0aW9uU2V0LCBz
bG90LmJhc2UoKSwKLSAgICAgICAgICAgIG9mZnNldCwgc3RydWN0dXJlLCBmYWxzZSwgbnVsbHB0
ciwKLSAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0
KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSksCi0gICAgICAgICAgICBDb2RlTG9jYXRp
b25MYWJlbChsaXN0LT5jdXJyZW50U2xvd1BhdGhUYXJnZXQoKSksCi0gICAgICAgICAgICBzdHVi
Um91dGluZSk7Ci0gICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7Ci0gICAgICAgIAotICAgICAgICBsaXN0LT5hZGRBY2Nlc3MoUHV0QnlJZEFjY2Vz
czo6c2V0dGVyKAotICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
LAotICAgICAgICAgICAgc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpID8gUHV0QnlJZEFjY2Vzczo6
U2V0dGVyIDogUHV0QnlJZEFjY2Vzczo6Q3VzdG9tU2V0dGVyLAotICAgICAgICAgICAgc3RydWN0
dXJlLCBjb25kaXRpb25TZXQsIHNsb3QuY3VzdG9tU2V0dGVyKCksIHN0dWJSb3V0aW5lKSk7Ci0K
LSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwgQ29k
ZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICAgICAgaWYg
KGxpc3QtPmlzRnVsbCgpKQotICAgICAgICAgICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlv
bihzbG90LCBwdXRLaW5kKSk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIgPSBz
dHViSW5mby5hZGRBY2Nlc3NDYXNlKAorICAgICAgICB2bSwgY29kZUJsb2NrLCBpZGVudCwgV1RG
Ojptb3ZlKG5ld0Nhc2UpKTsKKyAgICAKKyAgICBpZiAoIWNvZGVQdHIpCisgICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOwogCi0gICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0gICAg
fQotICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgIHJlc2V0UHV0QnlJRENoZWNrQW5kTG9h
ZChzdHViSW5mbyk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKAorICAgICAgICBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KAorICAgICAgICAgICAgc3R1
YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwo
Y29kZVB0cikpOworICAgIAorICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CiB9CiAKLXZvaWQg
YnVpbGRQdXRCeUlkTGlzdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQ
dXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2lu
ZCBwdXRLaW5kKQordm9pZCByZXBhdGNoUHV0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
YmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQogewogICAgIEdDU2FmZUNvbmN1cnJlbnRKSVRMb2Nr
ZXIgbG9ja2VyKGV4ZWMtPmNvZGVCbG9jaygpLT5tX2xvY2ssIGV4ZWMtPnZtKCkuaGVhcCk7CiAg
ICAgCi0gICAgaWYgKHRyeUJ1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZVZhbHVlLCBzdHJ1Y3R1
cmUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQpID09IEdpdmVVcE9uQ2Fj
aGUpCisgICAgaWYgKHRyeUNhY2hlUHV0QnlJRChleGVjLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwg
cHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0S2luZCkgPT0gR2l2ZVVwT25DYWNoZSkK
ICAgICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtp
bmQpKTsKIH0KIApAQCAtMTQ3OSwxMDYgKzQ4MywzNSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rp
b24gdHJ5UmVwYXRjaEluKAogICAgIH0KICAgICAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gYmFzZS0+c3RydWN0dXJlKCp2bSk7CisgICAgU2NyaXB0RXhlY3V0
YWJsZSogb3duZXIgPSBjb2RlQmxvY2stPm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpOworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1
Y3R1cmUodm0pOwogICAgIAogICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlv
blNldDsKICAgICBpZiAod2FzRm91bmQpIHsKICAgICAgICAgaWYgKHNsb3Quc2xvdEJhc2UoKSAh
PSBiYXNlKSB7CiAgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNG
b3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKLSAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVu
dC5pbXBsKCkpOworICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwgaWRlbnQuaW1wbCgpKTsKICAg
ICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29u
ZGl0aW9uc0ZvclByb3BlcnR5TWlzcygKLSAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBpZGVudC5pbXBsKCkpOworICAgICAgICAg
ICAgdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgaWRl
bnQuaW1wbCgpKTsKICAgICB9CiAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQogICAg
ICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAKLSAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0
cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdDsKLSAgICBpbnQgbGlzdEluZGV4
OwotICAgIAotICAgIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCA9IHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRv
RG9uZSk7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VMYWJlbDsKLSAgICAKLSAgICBp
ZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpIHsKLSAgICAgICAgcG9seW1v
cnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCgp
OwotICAgICAgICBzdHViSW5mby5pbml0SW5MaXN0KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwg
MCk7Ci0gICAgICAgIHNsb3dDYXNlTGFiZWwgPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
bGFiZWxBdE9mZnNldCgKLSAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xv
d0Nhc2UpOwotICAgICAgICBsaXN0SW5kZXggPSAwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFJF
TEVBU0VfQVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2luX2xpc3QpOwotICAg
ICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBzdHViSW5mby51LmluTGlzdC5zdHJ1Y3R1
cmVMaXN0OwotICAgICAgICBsaXN0SW5kZXggPSBzdHViSW5mby51LmluTGlzdC5saXN0U2l6ZTsK
LSAgICAgICAgc2xvd0Nhc2VMYWJlbCA9IENvZGVMb2NhdGlvbkxhYmVsKHBvbHltb3JwaGljU3Ry
dWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXggLSAxXS5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUo
KSk7Ci0gICAgICAgIAotICAgICAgICBpZiAobGlzdEluZGV4ID09IFBPTFlNT1JQSElDX0xJU1Rf
Q0FDSEVfU0laRSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgIH0KLSAg
ICAKLSAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwotICAgIAotICAgIHsK
LSAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBh
dGNoLmJhc2VHUFIpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gc3RhdGljX2Nhc3Q8R1BS
UmVnPihzdHViSW5mby5wYXRjaC52YWx1ZUdQUik7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoR1BS
ID0gVGVtcFJlZ2lzdGVyU2V0KHN0dWJJbmZvLnBhdGNoLnVzZWRSZWdpc3RlcnMpLmdldEZyZWVH
UFIoKTsKLSAgICAgICAgCi0gICAgICAgIENDYWxsSGVscGVycyBzdHViSml0KHZtKTsKLSAgICAg
ICAgCi0gICAgICAgIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2g7Ci0gICAgICAgIGlmIChzY3Jh
dGNoR1BSID09IEludmFsaWRHUFJSZWcpIHsKLSAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBBc3Nl
bWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgcmVzdWx0R1BSKTsKLSAgICAg
ICAgICAgIHN0dWJKaXQucHVzaFRvU2F2ZShzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIG5lZWRU
b1Jlc3RvcmVTY3JhdGNoID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBuZWVk
VG9SZXN0b3JlU2NyYXRjaCA9IGZhbHNlOwotICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsKLSAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChz
dHViSml0LmJyYW5jaFN0cnVjdHVyZSgKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksCi0gICAgICAgICAgICBzdHJ1Y3R1cmUpKTsKLQotICAg
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgICAgICBp
ZiAoc3RydWN0dXJlLT50eXBlSW5mbygpLm5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50
cygpKQotICAgICAgICAgICAgdm0tPnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5
KGlkZW50LCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwogCi0gICAgICAgIGlm
IChzbG90LndhdGNocG9pbnRTZXQoKSkKLSAgICAgICAgICAgIHNsb3Qud2F0Y2hwb2ludFNldCgp
LT5hZGQoc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8QWNjZXNzQ2FzZT4gbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmluKAorICAgICAgICB2bSwg
b3duZXIsIHdhc0ZvdW5kID8gQWNjZXNzQ2FzZTo6SW5IaXQgOiBBY2Nlc3NDYXNlOjpJbk1pc3Ms
IHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0KTsKIAotICAgICAgICBjaGVja09iamVjdFByb3BlcnR5
Q29uZGl0aW9ucygKLSAgICAgICAgICAgIGNvbmRpdGlvblNldCwgZXhlYy0+Y29kZUJsb2NrKCks
IHN0dWJJbmZvLCBzdHViSml0LCBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOwotICAgICAgICAK
LSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHdhc0ZvdW5kKSkpLCByZXN1
bHRHUFIpOwotI2Vsc2UKLSAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIod2FzRm91bmQpLCByZXN1bHRHUFIpOwotI2VuZGlmCi0gICAgICAgIAotICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzLCBmYWlsOwotICAgICAgICAKLSAgICAgICAg
ZW1pdFJlc3RvcmVTY3JhdGNoKHN0dWJKaXQsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzY3JhdGNo
R1BSLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMpOwotICAgICAgICAKLSAgICAgICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIHN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygpLCBKSVRD
b21waWxhdGlvbkNhbkZhaWwpOwotICAgICAgICBpZiAocGF0Y2hCdWZmZXIuZGlkRmFpbFRvQWxs
b2NhdGUoKSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAKLSAg
ICAgICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0b3JlU2NyYXRj
aCwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzLCBzdWNjZXNzTGFiZWwsIHNsb3dDYXNlTGFi
ZWwpOwotICAgICAgICAKLSAgICAgICAgc3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9T
VFVCKAotICAgICAgICAgICAgZXhlYy0+Y29kZUJsb2NrKCksIHBhdGNoQnVmZmVyLAotICAgICAg
ICAgICAgKCJJbiAoZm91bmQgPSAlcykgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCi0g
ICAgICAgICAgICAgICAgd2FzRm91bmQgPyAieWVzIiA6ICJubyIsIHRvQ1N0cmluZygqZXhlYy0+
Y29kZUJsb2NrKCkpLmRhdGEoKSwKLSAgICAgICAgICAgICAgICBzdWNjZXNzTGFiZWwuZXhlY3V0
YWJsZUFkZHJlc3MoKSkpOwotICAgIH0KLSAgICAKLSAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxp
c3QtPmxpc3RbbGlzdEluZGV4XS5zZXQoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
LCBzdHViUm91dGluZSwgc3RydWN0dXJlLCB0cnVlKTsKLSAgICBzdHViSW5mby51LmluTGlzdC5s
aXN0U2l6ZSsrOwotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2Fs
bFRvSnVtcCksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7
CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIgPSBzdHViSW5mby5hZGRBY2Nlc3ND
YXNlKHZtLCBjb2RlQmxvY2ssIGlkZW50LCBXVEY6Om1vdmUobmV3Q2FzZSkpOworICAgIGlmICgh
Y29kZVB0cikKKyAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICBNYWNyb0Fzc2Vt
Ymxlcjo6cmVwYXRjaEp1bXAoCisgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5q
dW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwKKyAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWwoY29kZVB0cikpOwogICAgIAotICAgIHJldHVybiBsaXN0SW5kZXggPCAo
UE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIC0gMSkgPyBSZXRyeUNhY2hlTGF0ZXIgOiBHaXZl
VXBPbkNhY2hlOworICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CiB9CiAKIHZvaWQgcmVwYXRj
aEluKApAQCAtMTkyOCwyMiArODYxLDcgQEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKAogdm9p
ZCByZXNldEdldEJ5SUQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbykKIHsKICAgICByZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKTsKLSAgICBDb2RlTG9jYXRpb25E
YXRhTGFiZWwzMiBzdHJ1Y3R1cmVMYWJlbCA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5k
YXRhTGFiZWwzMkF0T2Zmc2V0KC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0Y2guZGVsdGFDaGVja0lt
bVRvQ2FsbCk7Ci0gICAgaWYgKE1hY3JvQXNzZW1ibGVyOjpjYW5KdW1wUmVwbGFjZVBhdGNoYWJs
ZUJyYW5jaDMyV2l0aFBhdGNoKCkpIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJldmVydEp1
bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goCi0gICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6c3RhcnRPZlBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoT25BZGRyZXNz
KHN0cnVjdHVyZUxhYmVsKSwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAot
ICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEPihz
dHViSW5mby5wYXRjaC5iYXNlR1BSKSwKLSAgICAgICAgICAgICAgICBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4odW51c2VkUG9p
bnRlcikpOwotICAgIH0KLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEludDMyKHN0cnVjdHVy
ZUxhYmVsLCBzdGF0aWNfY2FzdDxpbnQzMl90Pih1bnVzZWRQb2ludGVyKSk7Ci0jaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENvbXBhY3Qoc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5k
ZWx0YUNhbGxUb0xvYWRPclN0b3JlKSwgMCk7Ci0jZWxzZQotICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoQ29tcGFjdChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29tcGFj
dEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUpLCAwKTsK
LSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENvbXBhY3Qoc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxU
b1BheWxvYWRMb2FkT3JTdG9yZSksIDApOwotI2VuZGlmCisgICAgcmVzZXRHZXRCeUlEQ2hlY2tB
bmRMb2FkKHN0dWJJbmZvKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNh
bGxUb0p1bXApLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHVi
SW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7CiB9CiAKQEAgLTE5NTEsMzMgKzg2OSwx
OCBAQCB2b2lkIHJlc2V0UHV0QnlJRChDb2RlQmxvY2sqIGNvZGVCbG9jaywgCiB7CiAgICAgVl9K
SVRPcGVyYXRpb25fRVNzaUpKSSB1bm9wdGltaXplZEZ1bmN0aW9uID0gYml0d2lzZV9jYXN0PFZf
SklUT3BlcmF0aW9uX0VTc2lKSkk+KHJlYWRDYWxsVGFyZ2V0KGNvZGVCbG9jaywgc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICBWX0pJVE9wZXJh
dGlvbl9FU3NpSkpJIG9wdGltaXplZEZ1bmN0aW9uOwotICAgIGlmICh1bm9wdGltaXplZEZ1bmN0
aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBv
cGVyYXRpb25QdXRCeUlkU3RyaWN0QnVpbGRMaXN0KQorICAgIGlmICh1bm9wdGltaXplZEZ1bmN0
aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBv
cGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemUpCiAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9u
ID0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOwotICAgIGVsc2UgaWYgKHVub3B0aW1p
emVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1
bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3QpCisgICAgZWxzZSBp
ZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0IHx8IHVu
b3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplKQog
ICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRp
bWl6ZTsKLSAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5
SWREaXJlY3RTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0U3RyaWN0QnVpbGRMaXN0KQorICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24g
PT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09
IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSkKICAgICAgICAgb3B0aW1pemVk
RnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7CiAgICAgZWxz
ZSB7Ci0gICAgICAgIEFTU0VSVCh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5
SWREaXJlY3ROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRC
eUlkRGlyZWN0Tm9uU3RyaWN0QnVpbGRMaXN0KTsKKyAgICAgICAgQVNTRVJUKHVub3B0aW1pemVk
RnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdCB8fCB1bm9wdGltaXpl
ZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZSk7CiAg
ICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmlj
dE9wdGltaXplOwogICAgIH0KICAgICByZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbiwgb3B0aW1pemVkRnVuY3Rpb24pOwotICAgIENvZGVMb2NhdGlvbkRh
dGFMYWJlbDMyIHN0cnVjdHVyZUxhYmVsID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRh
dGFMYWJlbDMyQXRPZmZzZXQoLShpbnRwdHJfdClzdHViSW5mby5wYXRjaC5kZWx0YUNoZWNrSW1t
VG9DYWxsKTsKLSAgICBpZiAoTWFjcm9Bc3NlbWJsZXI6OmNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxl
QnJhbmNoMzJXaXRoUGF0Y2goKSkgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmV2ZXJ0SnVt
cFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaCgKLSAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpzdGFydE9mUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2hPbkFkZHJlc3Mo
c3RydWN0dXJlTGFiZWwpLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoCi0g
ICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+KHN0
dWJJbmZvLnBhdGNoLmJhc2VHUFIpLAotICAgICAgICAgICAgICAgIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQzMl90Pih1bnVzZWRQb2lu
dGVyKSk7Ci0gICAgfQotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIoc3RydWN0dXJl
TGFiZWwsIHN0YXRpY19jYXN0PGludDMyX3Q+KHVudXNlZFBvaW50ZXIpKTsKLSNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIoc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxs
VG9Mb2FkT3JTdG9yZSksIDApOwotI2Vsc2UKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaElu
dDMyKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJ
bmZvLnBhdGNoLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUpLCAwKTsKLSAgICBNYWNyb0Fzc2Vt
Ymxlcjo6cmVwYXRjaEludDMyKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwz
MkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKSwg
MCk7Ci0jZW5kaWYKKyAgICByZXNldFB1dEJ5SURDaGVja0FuZExvYWQoc3R1YkluZm8pOwogICAg
IE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
anVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRv
U2xvd0Nhc2UpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNo
UmVnaXN0ZXJBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMTg5NTQzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw4IEBAIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6
flNjcmF0Y2hSZWdpc3QKIAogdm9pZCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OmxvY2soR1BS
UmVnIHJlZykKIHsKKyAgICBpZiAocmVnID09IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVy
bjsKICAgICB1bnNpZ25lZCBpbmRleCA9IEdQUkluZm86OnRvSW5kZXgocmVnKTsKICAgICBpZiAo
aW5kZXggPT0gR1BSSW5mbzo6SW52YWxpZEluZGV4KQogICAgICAgICByZXR1cm47CkBAIC01Miwx
MiArNTQsMjAgQEAgdm9pZCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OmxvY2soR1BSUgogCiB2
b2lkIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6bG9jayhGUFJSZWcgcmVnKQogeworICAgIGlm
IChyZWcgPT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJuOwogICAgIHVuc2lnbmVkIGlu
ZGV4ID0gRlBSSW5mbzo6dG9JbmRleChyZWcpOwogICAgIGlmIChpbmRleCA9PSBGUFJJbmZvOjpJ
bnZhbGlkSW5kZXgpCiAgICAgICAgIHJldHVybjsKICAgICBtX2xvY2tlZFJlZ2lzdGVycy5zZXRG
UFJCeUluZGV4KGluZGV4KTsKIH0KIAordm9pZCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6Omxv
Y2soSlNWYWx1ZVJlZ3MgcmVncykKK3sKKyAgICBsb2NrKHJlZ3MudGFnR1BSKCkpOworICAgIGxv
Y2socmVncy5wYXlsb2FkR1BSKCkpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rSW5mbz4K
IHR5cGVuYW1lIEJhbmtJbmZvOjpSZWdpc3RlclR5cGUgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
OjphbGxvY2F0ZVNjcmF0Y2goKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9T
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oCShyZXZpc2lvbiAxODk1NDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MCwxMSArNDAsMTMgQEAgc3RydWN0IFNjcmF0Y2hCdWZmZXI7CiAK
IGNsYXNzIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciB7CiBwdWJsaWM6CisgICAgU2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yKCkgeyB9CiAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yKGNvbnN0
IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzKTsKICAgICB+U2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yKCk7CiAKLSAgICB2b2lkIGxvY2soR1BSUmVnIHJlZyk7Ci0gICAgdm9pZCBsb2NrKEZQUlJl
ZyByZWcpOworICAgIHZvaWQgbG9jayhHUFJSZWcpOworICAgIHZvaWQgbG9jayhGUFJSZWcpOwor
ICAgIHZvaWQgbG9jayhKU1ZhbHVlUmVncyk7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
QmFua0luZm8+CiAgICAgdHlwZW5hbWUgQmFua0luZm86OlJlZ2lzdGVyVHlwZSBhbGxvY2F0ZVNj
cmF0Y2goKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJl
dmlzaW9uIDE4OTU0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
aAkod29ya2luZyBjb3B5KQpAQCAtMTg4LDYgKzE4OCw3IEBAIHR5cGVkZWYgY29uc3QgY2hhciog
b3B0aW9uU3RyaW5nOwogICAgIHYoYm9vbCwgY2xvYmJlckFsbFJlZ3NJbkZUTElDU2xvd1BhdGgs
ICFBU1NFUlRfRElTQUJMRUQsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGFzc3VtZUFsbFJlZ3NJ
bkZUTElDQXJlTGl2ZSwgZmFsc2UsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGVuYWJsZUFjY2Vz
c0lubGluaW5nLCB0cnVlLCBudWxscHRyKSBcCisgICAgdih1bnNpZ25lZCwgbWF4QWNjZXNzVmFy
aWFudExpc3RTaXplLCA4LCBudWxscHRyKSBcCiAgICAgdihib29sLCBlbmFibGVQb2x5dmFyaWFu
dERldmlydHVhbGl6YXRpb24sIHRydWUsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGVuYWJsZVBv
bHltb3JwaGljQWNjZXNzSW5saW5pbmcsIHRydWUsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGVu
YWJsZVBvbHltb3JwaGljQ2FsbElubGluaW5nLCB0cnVlLCBudWxscHRyKSBcCkluZGV4OiBTb3Vy
Y2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2
aXNpb24gMTg5NTQzKQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNiBAQAorMjAxNS0wOS0wOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29t
PgorCisgICAgICAgIFRoZXJlIHNob3VsZCBiZSBvbmUgc3R1YiBoYW5naW5nIG9mZiBhbiBpbmxp
bmUgY2FjaGUgdGhhdCBjb250YWlucyBjb2RlIGZvciBhbGwgb2YgdGhlIGNhc2VzLCByYXRoZXIg
dGhhbiBmb3JtaW5nIGEgbGlua2VkIGxpc3QgY29uc2lzdGluZyBvZiBvbmUgc3R1YiBwZXIgY2Fz
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4NzE3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQmVlZiB1
cCBkdW1waW5nIGEgYml0LgorCisgICAgICAgICogd3RmL1ByaW50U3RyZWFtLmg6CisgICAgICAg
IChXVEY6OnBvaW50ZXJEdW1wKToKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisKIDIw
MTUtMDktMDggIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIEdDIHN0
YWNrIHNjYW4gc2hvdWxkIGluY2x1ZGUgQUJJIHJlZCB6b25lLgpJbmRleDogU291cmNlL1dURi93
dGYvUHJpbnRTdHJlYW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QcmludFN0cmVh
bS5oCShyZXZpc2lvbiAxODk1NDMpCisrKyBTb3VyY2UvV1RGL3d0Zi9QcmludFN0cmVhbS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFByaW50U3Ry
ZWFtX2gKICNkZWZpbmUgUHJpbnRTdHJlYW1faAogCisjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1
ZGUgPHN0ZGFyZy5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CkBAIC0xNjIsNiArMTYzLDEyIEBAIHByaXZhdGU6CiB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgogUG9pbnRlckR1bXA8VD4gcG9pbnRlckR1bXAoY29uc3QgVCogcHRyKSB7IHJl
dHVybiBQb2ludGVyRHVtcDxUPihwdHIpOyB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPFQ+
JiB2YWx1ZSkKK3sKKyAgICBvdXQucHJpbnQocG9pbnRlckR1bXAodmFsdWUuZ2V0KCkpKTsKK30K
KwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KIGNsYXNzIFZhbHVlSW5Db250ZXh0
IHsKIHB1YmxpYzoK
</data>
<flag name="review"
          id="286060"
          type_id="1"
          status="-"
          setter="ggaren"
    />
    <flag name="commit-queue"
          id="286063"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>260870</attachid>
            <date>2015-09-09 13:41:13 -0700</date>
            <delta_ts>2015-09-09 16:14:23 -0700</delta_ts>
            <desc>Archive of layout-test-results from ews103 for mac-mavericks</desc>
            <filename>layout-test-results.zip</filename>
            <type>application/zip</type>
            <size>632606</size>
            <attacher name="Build Bot">buildbot</attacher>
            
              <data encoding="base64">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
BAoAAAAAABNrKUcAAAAAAAAAAAAAAAASABwAZmFzdC9jYW52YXMvd2ViZ2wvVVQJAAOFlfBVO5bw
VXV4CwABBPUBAAAEUAAAAFBLAwQUAAIACAATaylHblvLKDgLAADSkQAAMgAcAGZhc3QvY2FudmFz
L3dlYmdsL2FycmF5LW1lc3NhZ2UtcGFzc2luZy1hY3R1YWwudHh0VVQJAAOFlfBVhZXwVXV4CwAB
BPUBAAAEUAAAAO1dUW/cyA1+968Q8pwrwo0zGPQtl+4BBySN0bgFiiJYbGw52cNmHVjrpvn3XUde
raQZkh8547d7ORwikhI/cjTfN7Tly7bbN9/WXbfZfW5e392tf/x6f3PT3nXNenc9/od/bdrvXbPZ
NV/brlt/bru/nJ293zXd/dXV4R+eNz9u75vvm+226dq2WR/+e7dpu+b2pnl28frDh2eD2/Pm5na7
vf3eXjeffjTPLpcfLps3799dvF1eLp8dYj5Yj+/74q/N1fbwfIdg67u2+c/tpz/aq/3Y4mPO59PP
/2m27e7z/kvv+oK365ov6/+2zf5L23Trr21zdbvbt7t9l3iQ42ko+zTE2+FPs4ie53nwyj3RIkq2
8lP9bb1fP7QIU67j5Y+Qdfr4Iwe+sokR/Mi3Nzddu282XSZUf6PMNTKlStZUxbZJjLBUSUiVxqnO
b/PL9f03W7q8h5By7wSkPTYEU+9d+PT7639CoECwsGOwcIGwgFFYOGBYaDgs/gQCAILbgDgU8A1r
4iLtVhlDMP0HBz73h6ujxJPbrXrX1Xq/anfXNhgQXwGSuTvQHnkXEKi58wk07Tb85rmIJQBi3mJX
ISBmeqwIyNR9BCVwMwTObru5ale95eqFF1YkCgTvPJAR5ry7Ge55mBPs4Rx2MqNPVdCnWuhTGfpU
B33yoE/yJpT3CXXgD9XwD4UFCJUqEFwlCJMaBMXrfrfebj7v2uuyIihhDEUYRXIVIfF3FmEUZ1SE
l7jXqAiveq/fd/uXC+4t/fPiT5w+AtYpoIM5L7xnJjIwg3FCvYYryYv2nxvpmfur4xRl+zTHkz2f
5NxGzvJknaR5upTkeUAgCnWMszJGUxWjWsRoqGHkShjZCkapgHFev2grX9SrFy3Fi2zthATfbNdf
v7XXYp6PNkm6ii+T9chLST6xBDAY+eShGBnkmpmC0M0UZu3MW2f7uTcXG3psonZ0b5xr6f5KtuT8
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
dul5Uzo5FmxyLNjUWLB2LOz8WsXtAX8Lxqflgo8Cg5fJmPdEg/8LNvj0cPDJ6eCNeDwDUEsDBBQA
AgAIABNrKUdpah+d8QoAANOPAAA0ABwAZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXktbWVzc2FnZS1w
YXNzaW5nLWV4cGVjdGVkLnR4dFVUCQADhZXwVYWV8FV1eAsAAQT1AQAABFAAAADtXV1v3MYOffev
EPLcW4QbZyD0rU19gQu0SIC4fSkCY2PLyRabdWCtb5B/X2/k1UoafhxyJm99KYqIHImHHM05pC1f
dv2++bzu+83uQ/Pz/f366y8Pt7fdfd+sdzfTf/hz033pm82u+dT1/fpD1/94dvZ61/QP19eP//BD
8/Xuofmy2W6bvuua9eN/7zdd39zdNs/e/Pz27bPR7Yfm9m67vfvS3TTvvzbPLi/eXjavXv/+5reL
y4tnj2serKf3ff5Tc719fL7Hxdb3XfPX3fu/u+v91OId5/P+2/802273Yf9xcH0u2/XNx/X/u2b/
sWv69aeuub7b7bvdvs88KPA0xD4NyXb406zayPMcvLgnWrWarf5Uv67360OJCOk6Xn4HWeePP3GQ
M5sZwY98d3vbd/tm0zNLDTdirpErVPKGqpZNZoSFSkqoNA11eZv/3Dx89oUreyghD05A2FNDMPTB
RQ5/uP4vBAYEKz8GqxAIKxiFVQCGlYXD6l8gACCkA0hCAT+wZi7aacUYguEfHOTYD1cngWe3uxpc
r9b7q25344MB8VUgWboD5cG7gEAtnU+gWbeRD89VWwIg5q1WFQIiU2NFQObuEyiBmyFw9tvNdXc1
WF49j8KKrALBu1zICTPv7oZ7ucwJ9nQOO7nRpyroUy30qQx9qoM+RdAn/RDifVId+FM1/FNhAlKl
DKRQCtIsB8nwetitt5sPu+6mLAnGMo4kTFYKJSHzDyZhss4kCS9wr0kSXg5e/9vtX6ykt/S3i99w
egdY54CO5rLwXpjowIzGGfUar2Qv2j822jMPV6ch6vZ5jCd7OciljR7lyToL83Qpi/MRgVbJY7tI
Y+vKYmsmsXXksJVS2IoZbLUEtsv8tb70tXb2Wk/yWjF3SoCvtutPn7sbNc4nmyxcw1eIeuJlBJ9Z
AhhMfHgoJgZcMVNSqpnSopxla7aeB3O1oKcmZkUPxlxJD1fYlMvPPFxdptkT48leTy0e5cmaTacQ
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
L3hzbC9VVAkAA6WV8FU7lvBVdXgLAAEE9QEAAARQAAAAUEsDBBQAAgAIACRrKUdy/WXyhQAAAOkA
AAAlABwAZmFzdC94c2wvdHJhbnNmb3JtLXhoci1kb2Mtc3RkZXJyLnR4dFVUCQADpJXwVaSV8FV1
eAsAAQT1AQAABFAAAACtTjEOwkAM2/uKfKBkYLsZJthAdE7bVJyUu1S5nNT+noN+gcWybMv2pGmN
Qh41A5upBVii8A8CIr5UauKCF3LC6/DAgcdbdLzTrtWfXLzgQsVxK4LGRatNLb69rZ91OjUVJGaG
M7Bw4uwQ06rmXXPCQSFAzTS2UVcQpflP4/1Rz/P3RfcBUEsDBBQAAgAIACRrKUeJHyH+lwAAAMAD
AAAnABwAZmFzdC94c2wveHNsdC1iYWQtaW1wb3J0LXVyaS1zdGRlcnIudHh0VVQJAAOklfBVpJXw
VXV4CwABBPUBAAAEUAAAAO2PMQ7CMAxF957CFyge2DLDBBuIzm7qikhOXCWOVG5PoEdgQ10s29/+
+s9rXIKQBU3AOWt2MAfhb3GI+FCpkQueyAjPww0HHi/B8EovrXbnYgVnKoZrEcxctGbfzttk/UhT
H+Ki2fqaw6HtQEJiOAILR04Gm9o1xW0tOKiJxhbAFERp+jVI0lL982PS/kQ6v/PuvH/E+wZQSwME
FAACAAgAJGspR8+PZg5QAAAAoAAAACQAHABmYXN0L3hzbC94c2x0LWNvbnRlbnRUeXBlLXN0ZGVy
ci50eHRVVAkAA6SV8FWklfBVdXgLAAEE9QEAAARQAAAArcyxDcAgDAXRnin+BlHabIPACEs2RpaJ
Mn7IDmmuu1dMJ0sOtgFyN7/QWAgQHoQTJKQ0ArZirkg87ixcsbsIzRxK0a3uyyyVv7Cnh8rxkS9Q
SwMEFAACAAgAJWspR4FKd61LAAAArAAAADQAHABmYXN0L3hzbC94c2x0LXRyYW5zZm9ybS10by1m
cmFnbWVudC1jcmFzaC1zdGRlcnIudHh0VVQJAAOllfBVpZXwVXV4CwABBPUBAAAEUAAAALXMsQ2A
MAxE0T5T3Aq0bOPABVlybGQs5keiYAPqr/e3mKealIaDmZErhhoBUycW0DjphVtSpRtbcudQ11fE
wGHRxb6O4lVt++X6AFBLAwQUAAIACABzaylHWb3r1GMBAAB+AgAAEQAcAGZ1bGxfcmVzdWx0cy5q
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
LnR4dFVUCQAD3pXwVd6V8FV1eAsAAQT1AQAABFAAAACNjkEOwyAMBO95hT9AIO2hFb8hxFUsGYyM
kfr8EuUD1V5WO4fZLKURJyOpgKqiET7ECKdZi95vj9caZrb4DiH4Qj17xS5DM3b/7WxuT4ej0kTN
DaV1bsBUEZ6AjAWrwU2XSeJdIcKoaZ8aE2BJx3+6Kn3k87qXLDEvP1BLAwQKAAAAAAA1aylHAAAA
AAAAAAAAAAAAFAAcAGh0dHAvdGVzdHMvc2VjdXJpdHkvVVQJAAPFlfBVO5bwVXV4CwABBPUBAAAE
UAAAAFBLAwQKAAAAAAAxaylHAAAAAAAAAAAAAAAAKgAcAGh0dHAvdGVzdHMvc2VjdXJpdHkvY29u
dGVudFNlY3VyaXR5UG9saWN5L1VUCQADvZXwVTuW8FV1eAsAAQT1AQAABFAAAABQSwMEFAACAAgA
MWspR2OqrGyCAAAAqAAAAEAAHABodHRwL3Rlc3RzL3NlY3VyaXR5L2NvbnRlbnRTZWN1cml0eVBv
bGljeS94c2wtYWxsb3dlZC1zdGRlcnIudHh0VVQJAAO9lfBVvZXwVXV4CwABBPUBAAAEUAAAAC2N
QQrDMAwE73mFXhA7vaT4FYW+ILgbYlAsIyml/n1NKXtahtnNcrbCmxepBFXRRHth0OHeUgjLbZ3j
yJLuMcZgyJcW7yFLdVR//vtDuOQeFCaXZlgw74z5Y0xcKmglMM4h0A/YAfg0aHpDbVwnksqdljnS
js2vMUSbguxqTdTxmr5QSwMEFAACAAgAMWspR2OqrGyCAAAAqAAAAFIAHABodHRwL3Rlc3RzL3Nl
Y3VyaXR5L2NvbnRlbnRTZWN1cml0eVBvbGljeS94c2wtdW5hZmZlY3RlZC1ieS1zdHlsZS1zcmMt
Mi1zdGRlcnIudHh0VVQJAAO9lfBVvZXwVXV4CwABBPUBAAAEUAAAAC2NQQrDMAwE73mFXhA7vaT4
FYW+ILgbYlAsIyml/n1NKXtahtnNcrbCmxepBFXRRHth0OHeUgjLbZ3jyJLuMcZgyJcW7yFLdVR/
/vtDuOQeFCaXZlgw74z5Y0xcKmglMM4h0A/YAfg0aHpDbVwnksqdljnSjs2vMUSbguxqTdTxmr5Q
SwMEFAACAAgANWspR2BLZhCRAAAA+wEAAEUAHABodHRwL3Rlc3RzL3NlY3VyaXR5L3hzcy1ERU5J
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
ZWRpYS90cmFjay90cmFjay1pbi1iYW5kLXN0eWxlLWFjdHVhbC50eHRVVAkAAw6W8FUOlvBVdXgL
AAEE9QEAAARQAAAAfZBBS8NAEIXv+yveLUnBYK9CD9KmIEoViSKIh+lmml263Q3ZiTX/3k28lB48
Dbz38ebNbO8fnu5Q2xM3CIPgTFasb3EIPXwQexg3wTMkYM/Q5Bw3StUcBWJIEGV0s5sc6IEjbAR1
nbMpT4e+Zy1uLFX1Xu3qXJPvHI1i+jC0plBqscDasD7C+rSWXJo3e/INpKekRiHhqF7fdrn1k15P
8hIrfNuGQyn8I7MUP2+/ClV9vFTrutogv7ZLx74Vg9UK2TIr8Px4AV9Gl458O1DLM8r+X/ZoU9OJ
09SJDT7+0dd1y1NoUh6yaMI5/TZLh/8CUEsDBBQAAgAIAFtrKUcNf/iEnAEAAP4CAAAoABwAbWVk
aWEvdHJhY2svdHJhY2staW4tYmFuZC1zdHlsZS1kaWZmLnR4dFVUCQADDpbwVQ6W8FV1eAsAAQT1
AQAABFAAAAC1UV1r2zAUffevuG+xa8teuhW2QSFb7MLoSEfjtXuVrVtbRJGMdbU2/77XThbow9jT
QEgInXu+JISA4sGZsEdflJJkUT1ui0dsbjWdjq9BG1Xco0HpsTDy4AIJQk9iRB8M+WKPSsuCRtnu
jrvQVjTSKuHpYFDgy4AtocrphaI0Tf+/omwpSDPrrVYgltl7SJfZB1itovTmy7fvn6HWzAFMDM9S
k7YdPLkRrCP9dCidRSAHDUIrjUEVQQQ16wP1kmCWmN75DdqAHrQHOQxGM2PrxpHDmkMeQfVQbeq4
lXbgDNSPLnR9Mhv6mC0vIf10dATVrx/Vuq5KiLWdQtRTomVupO2C7BCur2GBdpHA3e1fwTtt1Qxs
5UDaWX+C3//cvAXunWJGWPjePXPsRRKJk8+e9ZCv08hvrdDlk+84OSM84g5Vwm2Ii4tjIW3guHY6
uStn3OgZfHbYIa3dfgj899uptJhhpfYTbWVwz4NJPk/NzseuiS+vrjL4syXHDP8g3HCgJG84XMcN
W7V+Q/gug2mdqTYl3N1AXW3rSESvUEsDBBQAAgAIAFtrKUcM+uTqNgEAADMCAAAsABwAbWVkaWEv
dHJhY2svdHJhY2staW4tYmFuZC1zdHlsZS1leHBlY3RlZC50eHRVVAkAAw6W8FUOlvBVdXgLAAEE
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
Pg8oc+be/wFQSwMECgAAAAAAcGspRwAAAAAAAAAAAAAAAAgAHAByZXRyaWVzL1VUCQADM5bwVTuW
8FV1eAsAAQT1AQAABFAAAABQSwMECgAAAAAAcGspRwAAAAAAAAAAAAAAAA0AHAByZXRyaWVzL2Zh
c3QvVVQJAAMzlvBVO5bwVXV4CwABBPUBAAAEUAAAAFBLAwQKAAAAAABwaylHAAAAAAAAAAAAAAAA
FAAcAHJldHJpZXMvZmFzdC9jYW52YXMvVVQJAAMzlvBVO5bwVXV4CwABBPUBAAAEUAAAAFBLAwQK
AAAAAABwaylHAAAAAAAAAAAAAAAAGgAcAHJldHJpZXMvZmFzdC9jYW52YXMvd2ViZ2wvVVQJAAMz
lvBVO5bwVXV4CwABBPUBAAAEUAAAAFBLAwQUAAIACABwaylHblvLKDgLAADSkQAAOgAcAHJldHJp
ZXMvZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXktbWVzc2FnZS1wYXNzaW5nLWFjdHVhbC50eHRVVAkA
AzOW8FUzlvBVdXgLAAEE9QEAAARQAAAA7V1Rb9zIDX73rxDynCvCjTMY9C2X7gEHJI3RuAWKIlhs
bDnZw2YdWOum+fddR16tpBmSHznjt3s5HCKSEj9yNN83tOXLtts339Zdt9l9bl7f3a1//Hp/c9Pe
dc16dz3+h39t2u9ds9k1X9uuW39uu7+cnb3fNd391dXhH543P27vm++b7bbp2rZZH/57t2m75vam
eXbx+sOHZ4Pb8+bmdru9/d5eN59+NM8ulx8umzfv3128XV4unx1iPliP7/vir83V9vB8h2Dru7b5
z+2nP9qr/djiY87n08//abbt7vP+S+/6grfrmi/r/7bN/kvbdOuvbXN1u9u3u32XeJDjaSj7NMTb
4U+ziJ7nefDKPdEiSrbyU/1tvV8/tAhTruPlj5B1+vgjB76yiRH8yLc3N127bzZdJlR/o8w1MqVK
1lTFtkmMsFRJSJXGqc5v88v1/TdburyHkHLvBKQ9NgRT71349Pvrf0KgQLCwY7BwgbCAUVg4YFho
OCz+BAIAgtuAOBTwDWviIu1WGUMw/QcHPveHq6PEk9utetfVer9qd9c2GBBfAZK5O9AeeRcQqLnz
CTTtNvzmuYglAGLeYlchIGZ6rAjI1H0EJXAzBM5uu7lqV73l6oUXViQKBO88kBHmvLsZ7nmYE+zh
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
fKpRLw7qaRWRcJHsYrKgZHjQAnHpLiAekqkjHgDWnOBLENOe7tcgFM2jRZ0vQihW/mAMcsU1KrrO
QK3qX1vFJTIGcWpYoEiwL65p554VtC1SKZPG9ZUej+fTvJ7i49EyNBJ3NmhhuFioJi4oFhTPqZHd
1YKicScWkLNPOlNN6UxVpTNVkM5UUTqTXzpL32p2QeqVzlRXOlMN6Uw1pTMVSGf+S9PeNWSWzlRT
OlO5dKZ60pm80ln4TLZ77dilM1WVzlRBOlNF6Uxu6ax/49tfpELpTE8hnamedKb60plKpbPwgXLv
S9AhnamqdKYK0pkqSmfyS2fp8+rudeaRzlRXOlMN6Uw1pTMVSGcSvhmhetaWzlRbOlNl6UxVpDNV
lc5UIp3Fj+X7i+WSzlRZOlMd6UxVpTOVSGcCPrph+muZTu0c6ornUEM9h5ryORTo58kf5Aw2BR0q
S+hQWUOHKiI6VFXRoURGZ4sFKb1QUUmHqlI6VNDSoaKYDm41nf3btpjUC1UFdairqEMNSR1qaurg
F9V8kVAdF55QV4cnEdahorIOTyCtQ7G2zlYV032hqrwOdfV1qCGwQ02FHQok9qRKL20iO1RW2aGy
zA5VdHaoKrRDidKeF8uitcMTiO1QXW2H2nI71NHboa7gDkWKO0s5UQEYqovuUFt1h0qyO9TV3aFI
eIfsh9O6+6urtutu7rfbHxfru+6wOA+X93f37dnZYY1eNm/ev7t4u7xcnp39H1BLAwQUAAIACABw
aylHyW23OiECAADjDQAAOAAcAHJldHJpZXMvZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXktbWVzc2Fn
ZS1wYXNzaW5nLWRpZmYudHh0VVQJAAMzlvBVM5bwVXV4CwABBPUBAAAEUAAAAL2WS2+bQBSF9/4V
syd0GGyGtivbKpGqplUUp42qqkJjfLGpJhAxlzz+fXjEMiVAeLWr2dxzgHO+i0bXdUJ/RDK5BUU/
CRTUudnQG9h+CfDlWCeB3NErkCAUUCmeogR1BIV6DCqRqGgMGAep3hcKqSfCe6HoA2z3koo4Fk96
6q3EHvQ7oVQQ7nV4vAMPYfcOH3Gmadr/fwPhYSJk/vzlkujzhX3GiZYdNlkuZ+RytdmQ70GIjLvM
3Sa+D/FHUpyKHMQ9EDwAUeIWiBeFCCGqJlXk+wqQBIoYTSMSwj0eshFzpp2vPl+8HjlmRtY/r52N
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
qqa2Hz1ybNRQPb8ckTIbDefx1GSvqFjlnUgo1ApxjL7g54yIam7Z83ycTQ7uzC9eaJ4+RB57U8Ko
UXcBM+giDw+hUL3YTmdVj8hCKRayCXkSVNcsNzbKcHHE4dWfITjDnm60kU6upH//cxVu1RaoVz26
AaVrhm0gK9PL/ILVNiAXXy6xpy4XSnNQDCyHhlcpQigQVa18h1qIpFpdtNHoBZn2ExP7UFX0oERc
eXWZEZSmZSQ2Y2wh55di07keXbQg8vlpm1T+IlDq3BZmiRFADpFq+xJHBfUHM91YR+hAYeM4VPTm
gh2t5B77GdkKxe2WLWF53F2ml1OBTWLvs47ut9OX+W9e/C+e95eP3fXp7YcvyEXoXfAeltKZdsp/
PoKfj+nnPf9z8Rx751msPydtb/KfK/Bzlf56usen2aG4TmHrRv7xUkCjM8u4P+6v4acW/N10aMQV
yQ8N/OUFctFZAJv+MvpiW74uDf6yTn85kY/z8wYb701+2+Pdebfgbzfc1umPwcbbzYm3dz8G19WO
pb8MTnxplaWDuPVbMUHH1eX33DKXNYADG7jTTn+5A3+ZfHFS1IuR8j//w+6CvztJGkG6882DHXRd
/rrMZvPgrhd3S2dBS/6XwcY7lf08/mX/s7/vzq9T+ctbTjHkfx9IW2fxtYEn0qcbJz148ueJDk4X
lTF8oO2d0HizcpjtysH4XzydzpP/l+PpedofL9P5+jibq/MkpuN1mt6uNwd6er9cz/vjqxvysb9O
7+Kd6ORCap0zM75/zNt4Oe0vz9N5/2V6fjmf3sUj0qm/82YvU7DXl+m6f95d51093q7T8YJWWqYP
6I0RiG9sXmr519t5L2oJnWhQOpd3d8Ln6f30ZXp62x+e0VaW7lM6v/jNCiIUrVNrlc2xbG9ZTCrp
1Nlhs4nlEOZ3t3ew4nR8OrnqDHTZamRPhL1sC052Kd/abIm9bIWEz1pO+GYB3r9/hMV2LoQ4T6+z
KJ+/i4/Mv2sl3fb+Mv3ztju4fxX1i05V+/6uEl447+bpdHzZv97OfjNPu/nirh/OG52uk9wfVKc0
yuac+PMGUtT3JpcitX7b0+l93sq0SMPH6bJ3mzTgpKzZCNSYf+fTfHmzs+yDtwu4vSVk2qzjdjUL
5W2WbrcQujM7au7EoxzNi1ye3qb33XJe6KiNMYIohY86zrc1q+un6QLeu+47SYbmzVynb9d5sSvK
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
yywZFl9fL+U5DQdgh8L51cYXW/A9FrnLQnxIQDX1w5na0i5GXtcud/kN+9os2sGjPJZREz+pYTp1
ykrGp0enLwldi3YWxEy+HpIQKGNCVIKBPTWhn+a4Exp1+aPFbPEHUEsDBBQAAgAIAG9rKUd7KXPD
cJcAAKpyDwAZABwAd3B0d2tfcHJvY2Vzc19sb2cub3V0LnR4dFVUCQADMpbwVXCV8FV1eAsAAQT1
AQAABFAAAADtvWt348iRNvjdv0If1jP2zpAiwbvOen26q9vjPm93uY+qPN5zdvbVgciUhBYI0ACo
kvzrN8H7BSDyEpEZCaJn3F1SSczIyMiIJ6750+e//O3uG3tsLUI/e4qTeStjaZbe/ReLWOJnQfR8
E7FvN5++uwmim9v/jsPlnKW3P/iZf/vjP77c/oM9/q8g2/zn+2UQzm7vWcj8lN2G/ke8zFYf10pY
ugyz9Pbh2yJ7mLIkS3/3w4/f//2/Klb2b7xOf3zzGGQ391++u1kkwZufsZtX9vG79tE///Ef/3Hy
nbJ/8p/8lgS7jR185k0W3/w74BZvpz7/1PaCzf/9d638n9+Vb/rvaU7QNI6egudlvvs4unlK4jkk
y2/jBYvSNGxPn55/9+mFTV9vshc/4/9iNwn755L/1s3cz6YvLF19Lw2eIz9bJux3X7Z/uolff/eJ
f1bwFExzrv3AMj8I07vf3Wz++cKSwA9vPi/njyy5u+ne/KHz3v3j7q//2w+DWZB97L6R//M5zm6+
Z5wZ7I7//uLmZsKP/c7r33WH/A/dwc1//fL17Be+e8pYcnN387dpdvkXviwff2PT7O7oE6bxfB5H
n/05uzn5508356ez+9X/Z9CZvPVu2HvGGcmPKD3+1M1ff++nwfTmE//rLPGDiJ/uze9Ol/n03d3X
+7//WPTrG4Jv/heXyJ9mLMqZnfPy/DN+vPt+cjfo3o3Gd59+uOt27n7s3/2lfzfp3A1+vOuM7j4N
77wf7saTu173bji+m3y6G/7l7vvu3Y+DonW/W2YvMb8ZH9Urc7EOZndQ6+f//BAk+Wnc3X76/KcL
B7D9J12J2V2n+7uineT0/z31n1kR0w6kNxfrot//MT/fGZtd/KCvP3+54Xcwl/g3Lok593KOTVd3
9+iSBGmuWR7ZzXT9Tf7BS/6TYans3vyh17mZ+R/pH3/3u3/wE+HXbpnxb2T+I7/lN9+C7IXfrFx7
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
SwECHgMUAAIACAByaylHB8PTGA3yAAAt6woADgAYAAAAAAABAAAApIHYNAAAYWNjZXNzX2xvZy50
eHRVVAUAAzeW8FV1eAsAAQT1AQAABFAAAABQSwECHgMUAAIACAByaylHCT+0Qp8QAAAexAAADQAY
AAAAAAABAAAApIEtJwEAZXJyb3JfbG9nLnR4dFVUBQADN5bwVXV4CwABBPUBAAAEUAAAAFBLAQIe
AwoAAAAAACZrKUcAAAAAAAAAAAAAAAAFABgAAAAAAAAAEADtQRM4AQBmYXN0L1VUBQADqJXwVXV4
CwABBPUBAAAEUAAAAFBLAQIeAwoAAAAAABprKUcAAAAAAAAAAAAAAAAMABgAAAAAAAAAEADtQVI4
AQBmYXN0L2NhbnZhcy9VVAUAA5OV8FV1eAsAAQT1AQAABFAAAABQSwECHgMUAAIACAAaaylHF4oU
yIUAAAAaAQAAJgAYAAAAAAABAAAApIGYOAEAZmFzdC9jYW52YXMvY2FudmFzLWxpbmVEYXNoLXN0
ZGVyci50eHRVVAUAA5OV8FV1eAsAAQT1AQAABFAAAABQSwECHgMKAAAAAAATaylHAAAAAAAAAAAA
AAAAEgAYAAAAAAAAABAA7UF9OQEAZmFzdC9jYW52YXMvd2ViZ2wvVVQFAAOFlfBVdXgLAAEE9QEA
AARQAAAAUEsBAh4DFAACAAgAE2spR25byyg4CwAA0pEAADIAGAAAAAAAAQAAAKSByTkBAGZhc3Qv
Y2FudmFzL3dlYmdsL2FycmF5LW1lc3NhZ2UtcGFzc2luZy1hY3R1YWwudHh0VVQFAAOFlfBVdXgL
AAEE9QEAAARQAAAAUEsBAh4DFAACAAgAE2spRwgQrHYcAgAA0w0AADAAGAAAAAAAAQAAAKSBbUUB
AGZhc3QvY2FudmFzL3dlYmdsL2FycmF5LW1lc3NhZ2UtcGFzc2luZy1kaWZmLnR4dFVUBQADhZXw
VXV4CwABBPUBAAAEUAAAAFBLAQIeAxQAAgAIABNrKUdpah+d8QoAANOPAAA0ABgAAAAAAAEAAACk
gfNHAQBmYXN0L2NhbnZhcy93ZWJnbC9hcnJheS1tZXNzYWdlLXBhc3NpbmctZXhwZWN0ZWQudHh0
VVQFAAOFlfBVdXgLAAEE9QEAAARQAAAAUEsBAh4DFAACAAgAE2spR3RAYG8PCgAAMEYAADgAGAAA
AAAAAQAAAKSBUlMBAGZhc3QvY2FudmFzL3dlYmdsL2FycmF5LW1lc3NhZ2UtcGFzc2luZy1wcmV0
dHktZGlmZi5odG1sVVQFAAOFlfBVdXgLAAEE9QEAAARQAAAAUEsBAh4DCgAAAAAAJGspRwAAAAAA
AAAAAAAAAAwAGAAAAAAAAAAQAO1B010BAGZhc3QvaW1hZ2VzL1VUBQADo5XwVXV4CwABBPUBAAAE
UAAAAFBLAQIeAxQAAgAIACRrKUchj704MgAAADMAAAAsABgAAAAAAAEAAACkgRleAQBmYXN0L2lt
YWdlcy9wZGYtYXMtaW1hZ2UtY3JvcC1ib3gtc3RkZXJyLnR4dFVUBQADo5XwVXV4CwABBPUBAAAE
UAAAAFBLAQIeAwoAAAAAACZrKUcAAAAAAAAAAAAAAAAKABgAAAAAAAAAEADtQbFeAQBmYXN0L3Rl
eHQvVVQFAAOolfBVdXgLAAEE9QEAAARQAAAAUEsBAh4DFAACAAgAJmspR78Yk5Q7AQAAlgMAACQA
GAAAAAAAAQAAAKSB9V4BAGZhc3QvdGV4dC9mb250LXdlaWdodHMtemgtc3RkZXJyLnR4dFVUBQAD
qJXwVXV4CwABBPUBAAAEUAAAAFBLAQIeAwoAAAAAACVrKUcAAAAAAAAAAAAAAAAJABgAAAAAAAAA
EADtQY5gAQBmYXN0L3hzbC9VVAUAA6WV8FV1eAsAAQT1AQAABFAAAABQSwECHgMUAAIACAAkaylH
cv1l8oUAAADpAAAAJQAYAAAAAAABAAAApIHRYAEAZmFzdC94c2wvdHJhbnNmb3JtLXhoci1kb2Mt
c3RkZXJyLnR4dFVUBQADpJXwVXV4CwABBPUBAAAEUAAAAFBLAQIeAxQAAgAIACRrKUeJHyH+lwAA
AMADAAAnABgAAAAAAAEAAACkgbVhAQBmYXN0L3hzbC94c2x0LWJhZC1pbXBvcnQtdXJpLXN0ZGVy
ci50eHRVVAUAA6SV8FV1eAsAAQT1AQAABFAAAABQSwECHgMUAAIACAAkaylHz49mDlAAAACgAAAA
JAAYAAAAAAABAAAApIGtYgEAZmFzdC94c2wveHNsdC1jb250ZW50VHlwZS1zdGRlcnIudHh0VVQF
AAOklfBVdXgLAAEE9QEAAARQAAAAUEsBAh4DFAACAAgAJWspR4FKd61LAAAArAAAADQAGAAAAAAA
AQAAAKSBW2MBAGZhc3QveHNsL3hzbHQtdHJhbnNmb3JtLXRvLWZyYWdtZW50LWNyYXNoLXN0ZGVy
ci50eHRVVAUAA6WV8FV1eAsAAQT1AQAABFAAAABQSwECHgMUAAIACABzaylHWb3r1GMBAAB+AgAA
EQAYAAAAAAABAAAApIEUZAEAZnVsbF9yZXN1bHRzLmpzb25VVAUAAzmW8FV1eAsAAQT1AQAABFAA
AABQSwECHgMKAAAAAAAqaylHAAAAAAAAAAAAAAAABQAYAAAAAAAAABAA7UHCZQEAaHR0cC9VVAUA
A7CV8FV1eAsAAQT1AQAABFAAAABQSwECHgMKAAAAAABDaylHAAAAAAAAAAAAAAAACwAYAAAAAAAA
ABAA7UEBZgEAaHR0cC90ZXN0cy9VVAUAA96V8FV1eAsAAQT1AQAABFAAAABQSwECHgMKAAAAAAAq
aylHAAAAAAAAAAAAAAAAEQAYAAAAAAAAABAA7UFGZgEAaHR0cC90ZXN0cy9tZWRpYS9VVAUAA7CV
8FV1eAsAAQT1AQAABFAAAABQSwECHgMUAAIACAAqaylH57j5BmwAAAB7AAAAMgAYAAAAAAABAAAA
pIGRZgEAaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1kb2N1bWVudC1yZWZlcmVyLWFjdHVhbC50eHRV
VAUAA7CV8FV1eAsAAQT1AQAABFAAAABQSwECHgMUAAIACAAqaylH8zgJs+IAAACpAQAAMAAYAAAA
AAABAAAApIFpZwEAaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1kb2N1bWVudC1yZWZlcmVyLWRpZmYu
dHh0VVQFAAOwlfBVdXgLAAEE9QEAAARQAAAAUEsBAh4DFAACAAgAKmspR7lPQ6tbAAAAbAAAADQA
GAAAAAAAAQAAAKSBtWgBAGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtZG9jdW1lbnQtcmVmZXJlci1l
eHBlY3RlZC50eHRVVAUAA7CV8FV1eAsAAQT1AQAABFAAAABQSwECHgMUAAIACAAqaylHgmCqQQII
AADxGgAAOAAYAAAAAAABAAAApIF+aQEAaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1kb2N1bWVudC1y
ZWZlcmVyLXByZXR0eS1kaWZmLmh0bWxVVAUAA7CV8FV1eAsAAQT1AQAABFAAAABQSwECHgMKAAAA
AABDaylHAAAAAAAAAAAAAAAAEAAYAAAAAAAAABAA7UHycQEAaHR0cC90ZXN0cy9taXNjL1VUBQAD
3pXwVXV4CwABBPUBAAAEUAAAAFBLAQIeAxQAAgAIAENrKUcVNTWSegAAALwAAAAqABgAAAAAAAEA
AACkgTxyAQBodHRwL3Rlc3RzL21pc2MveHNsdC1iYWQtaW1wb3J0LXN0ZGVyci50eHRVVAUAA96V
8FV1eAsAAQT1AQAABFAAAABQSwECHgMKAAAAAAA1aylHAAAAAAAAAAAAAAAAFAAYAAAAAAAAABAA
7UEacwEAaHR0cC90ZXN0cy9zZWN1cml0eS9VVAUAA8WV8FV1eAsAAQT1AQAABFAAAABQSwECHgMK
AAAAAAAxaylHAAAAAAAAAAAAAAAAKgAYAAAAAAAAABAA7UFocwEAaHR0cC90ZXN0cy9zZWN1cml0
eS9jb250ZW50U2VjdXJpdHlQb2xpY3kvVVQFAAO9lfBVdXgLAAEE9QEAAARQAAAAUEsBAh4DFAAC
AAgAMWspR2OqrGyCAAAAqAAAAEAAGAAAAAAAAQAAAKSBzHMBAGh0dHAvdGVzdHMvc2VjdXJpdHkv
Y29udGVudFNlY3VyaXR5UG9saWN5L3hzbC1hbGxvd2VkLXN0ZGVyci50eHRVVAUAA72V8FV1eAsA
AQT1AQAABFAAAABQSwECHgMUAAIACAAxaylHY6qsbIIAAACoAAAAUgAYAAAAAAABAAAApIHIdAEA
aHR0cC90ZXN0cy9zZWN1cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kveHNsLXVuYWZmZWN0ZWQt
Ynktc3R5bGUtc3JjLTItc3RkZXJyLnR4dFVUBQADvZXwVXV4CwABBPUBAAAEUAAAAFBLAQIeAxQA
AgAIADVrKUdgS2YQkQAAAPsBAABFABgAAAAAAAEAAACkgdZ1AQBodHRwL3Rlc3RzL3NlY3VyaXR5
L3hzcy1ERU5JRUQteHNsLWRvY3VtZW50LXNlY3VyaXR5T3JpZ2luLXN0ZGVyci50eHRVVAUAA8WV
8FV1eAsAAQT1AQAABFAAAABQSwECHgMUAAIACABvaylH6op8QmEFAAAFDwAACgAYAAAAAAABAAAA
pIHmdgEAaHR0cGQuY29uZlVUBQADMpbwVXV4CwABBPUBAAAEUAAAAFBLAQIeAwoAAAAAAFtrKUcA
AAAAAAAAAAAAAAAGABgAAAAAAAAAEADtQYt8AQBtZWRpYS9VVAUAAw6W8FV1eAsAAQT1AQAABFAA
AABQSwECHgMKAAAAAABbaylHAAAAAAAAAAAAAAAADAAYAAAAAAAAABAA7UHLfAEAbWVkaWEvdHJh
Y2svVVQFAAMOlvBVdXgLAAEE9QEAAARQAAAAUEsBAh4DFAACAAgAW2spR2mU0Y3wAAAAdwEAACoA
GAAAAAAAAQAAAKSBEX0BAG1lZGlhL3RyYWNrL3RyYWNrLWluLWJhbmQtc3R5bGUtYWN0dWFsLnR4
dFVUBQADDpbwVXV4CwABBPUBAAAEUAAAAFBLAQIeAxQAAgAIAFtrKUcNf/iEnAEAAP4CAAAoABgA
AAAAAAEAAACkgWV+AQBtZWRpYS90cmFjay90cmFjay1pbi1iYW5kLXN0eWxlLWRpZmYudHh0VVQF
AAMOlvBVdXgLAAEE9QEAAARQAAAAUEsBAh4DFAACAAgAW2spRwz65Oo2AQAAMwIAACwAGAAAAAAA
AQAAAKSBY4ABAG1lZGlhL3RyYWNrL3RyYWNrLWluLWJhbmQtc3R5bGUtZXhwZWN0ZWQudHh0VVQF
AAMOlvBVdXgLAAEE9QEAAARQAAAAUEsBAh4DFAACAAgAW2spRwZw1+XSCAAA1yIAADAAGAAAAAAA
AQAAAKSB/4EBAG1lZGlhL3RyYWNrL3RyYWNrLWluLWJhbmQtc3R5bGUtcHJldHR5LWRpZmYuaHRt
bFVUBQADDpbwVXV4CwABBPUBAAAEUAAAAFBLAQIeAxQAAgAIADJrKUecFSu+SAIAAIMLAAArABgA
AAAAAAEAAACkgTuLAQBweXdlYnNvY2tldC53cy5sb2ctMDlTZXAyMDE1LTEzMjQxNS1lcnIudHh0
VVQFAAO/lfBVdXgLAAEE9QEAAARQAAAAUEsBAh4DFAACAAgAMmspR0mMee4HAQAAjwIAACsAGAAA
AAAAAQAAAKSB6I0BAHB5d2Vic29ja2V0LndzLmxvZy0wOVNlcDIwMTUtMTMyNDE1LW91dC50eHRV
VAUAA7+V8FV1eAsAAQT1AQAABFAAAABQSwECHgMUAAIACABzaylH5HxFo54mAADbpAAADAAYAAAA
AAABAAAApIFUjwEAcmVzdWx0cy5odG1sVVQFAAM6lvBVdXgLAAEE9QEAAARQAAAAUEsBAh4DCgAA
AAAAcGspRwAAAAAAAAAAAAAAAAgAGAAAAAAAAAAQAO1BOLYBAHJldHJpZXMvVVQFAAMzlvBVdXgL
AAEE9QEAAARQAAAAUEsBAh4DCgAAAAAAcGspRwAAAAAAAAAAAAAAAA0AGAAAAAAAAAAQAO1BerYB
AHJldHJpZXMvZmFzdC9VVAUAAzOW8FV1eAsAAQT1AQAABFAAAABQSwECHgMKAAAAAABwaylHAAAA
AAAAAAAAAAAAFAAYAAAAAAAAABAA7UHBtgEAcmV0cmllcy9mYXN0L2NhbnZhcy9VVAUAAzOW8FV1
eAsAAQT1AQAABFAAAABQSwECHgMKAAAAAABwaylHAAAAAAAAAAAAAAAAGgAYAAAAAAAAABAA7UEP
twEAcmV0cmllcy9mYXN0L2NhbnZhcy93ZWJnbC9VVAUAAzOW8FV1eAsAAQT1AQAABFAAAABQSwEC
HgMUAAIACABwaylHblvLKDgLAADSkQAAOgAYAAAAAAABAAAApIFjtwEAcmV0cmllcy9mYXN0L2Nh
bnZhcy93ZWJnbC9hcnJheS1tZXNzYWdlLXBhc3NpbmctYWN0dWFsLnR4dFVUBQADM5bwVXV4CwAB
BPUBAAAEUAAAAFBLAQIeAxQAAgAIAHBrKUfJbbc6IQIAAOMNAAA4ABgAAAAAAAEAAACkgQ/DAQBy
ZXRyaWVzL2Zhc3QvY2FudmFzL3dlYmdsL2FycmF5LW1lc3NhZ2UtcGFzc2luZy1kaWZmLnR4dFVU
BQADM5bwVXV4CwABBPUBAAAEUAAAAFBLAQIeAxQAAgAIAHBrKUdpah+d8QoAANOPAAA8ABgAAAAA
AAEAAACkgaLFAQByZXRyaWVzL2Zhc3QvY2FudmFzL3dlYmdsL2FycmF5LW1lc3NhZ2UtcGFzc2lu
Zy1leHBlY3RlZC50eHRVVAUAAzOW8FV1eAsAAQT1AQAABFAAAABQSwECHgMUAAIACABwaylH48MR
vRQKAAA4RgAAQAAYAAAAAAABAAAApIEJ0QEAcmV0cmllcy9mYXN0L2NhbnZhcy93ZWJnbC9hcnJh
eS1tZXNzYWdlLXBhc3NpbmctcHJldHR5LWRpZmYuaHRtbFVUBQADM5bwVXV4CwABBPUBAAAEUAAA
AFBLAQIeAxQAAgAIAHNrKUf4nISztBQHAHy3KAAKABgAAAAAAAEAAACkgZfbAQBzdGF0cy5qc29u
VVQFAAM5lvBVdXgLAAEE9QEAAARQAAAAUEsBAh4DCgAAAAAAVWspRwAAAAAAAAAAAAAAAAQAGAAA
AAAAAAAQAO1Bj/AIAHN2Zy9VVAUAAwKW8FV1eAsAAQT1AQAABFAAAABQSwECHgMKAAAAAABVaylH
AAAAAAAAAAAAAAAACwAYAAAAAAAAABAA7UHN8AgAc3ZnL2N1c3RvbS9VVAUAAwKW8FV1eAsAAQT1
AQAABFAAAABQSwECHgMUAAIACABVaylHXA6zlH4AAACNAAAAJAAYAAAAAAABAAAApIES8QgAc3Zn
L2N1c3RvbS96ZXJvLWRhc2hhcnJheS1zdGRlcnIudHh0VVQFAAMClvBVdXgLAAEE9QEAAARQAAAA
UEsBAh4DCgAAAAAASWspRwAAAAAAAAAAAAAAAAsAGAAAAAAAAAAQAO1B7vEIAHN2Zy9zdHJva2Uv
VVQFAAPplfBVdXgLAAEE9QEAAARQAAAAUEsBAh4DFAACAAgASWspRykQw1Z+AAAAjQAAACUAGAAA
AAAAAQAAAKSBM/IIAHN2Zy9zdHJva2UvemVyby13aWR0aC1oYW5nLXN0ZGVyci50eHRVVAUAA+mV
8FV1eAsAAQT1AQAABFAAAABQSwECHgMUAAIACABvaylHeylzw3CXAACqcg8AGQAYAAAAAAABAAAA
pIEQ8wgAd3B0d2tfcHJvY2Vzc19sb2cub3V0LnR4dFVUBQADMpbwVXV4CwABBPUBAAAEUAAAAFBL
BQYAAAAASABIADUcAADTigkAAAA=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260886</attachid>
            <date>2015-09-09 16:14:23 -0700</date>
            <delta_ts>2015-09-09 20:00:50 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>295138</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg5NTU3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5MSBA
QAorMjAxNS0wOS0wOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFRoZXJlIHNob3VsZCBiZSBvbmUgc3R1YiBoYW5naW5nIG9mZiBhbiBpbmxpbmUgY2FjaGUgdGhh
dCBjb250YWlucyBjb2RlIGZvciBhbGwgb2YgdGhlIGNhc2VzLCByYXRoZXIgdGhhbiBmb3JtaW5n
IGEgbGlua2VkIGxpc3QgY29uc2lzdGluZyBvZiBvbmUgc3R1YiBwZXIgY2FzZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4NzE3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBhIG1ham9yIHJl
d3JpdGUgb2YgdGhlIEpTQyBnZXQvcHV0L2luIGlubGluZSBjYWNoZXMgKElDcyksIG1vdGl2YXRl
ZCBieSB0aGUgbmVlZCB0byBhZGQKKyAgICAgICAgZmFuY3kgbmV3IGtpbmRzIG9mIGlubGluZSBj
YWNoZXMgZm9yIHByb3BlcnR5IHR5cGUgaW5mZXJlbmNlIChodHRwczovL3dlYmtpdC5vcmcvYi8x
NDg2MTApLgorCisgICAgICAgIFByZXZpb3VzbHksIG91ciBpbmxpbmUgY2FjaGVzIGhhZCBzb21l
IHByb2JsZW1zIHRoYXQgbWFkZSB0aGVtIGRpZmZpY3VsdCB0byB3b3JrIHdpdGguIEl0IHdhcwor
ICAgICAgICBpbXBvc3NpYmxlIHRvIGNoYW5nZSBhbnkgY29kZSB0aGF0IHdhcyBwcmV2aW91c2x5
IGdlbmVyYXRlZCBieSB0aGUgSUMgZXhjZXB0IGJ5IGJsb3dpbmcgdGhlCisgICAgICAgIHdob2xl
IElDIGF3YXksIHRoZSBJQ3Mgc2NhbGVkIHBvb3JseSBpZiB0aGVyZSB3ZXJlIG1hbnkgY2FzZXMs
IGFuZCB0aGVyZSB3YXMgYSBsb3Qgb2YgZHVwbGljYXRlCisgICAgICAgIGFuZCBhZCBob2MgY29k
ZS4KKworICAgICAgICBJbXBvc3NpYmxlIHRvIHJlZ2VuZXJhdGUgYSBwcmV2aW91c2x5IGdlbmVy
YXRlZCBzdHViOiBTYXkgdGhhdCBzb21lIGFjY2VzcyAoby5mID0gdikgY2F1c2VzIG91cgorICAg
ICAgICBJQyBjb2RlIHRvIGVtaXQgc29tZSBzdHViOyBsZXQncyBjYWxsIGl0IHN0dWIxLiBUaGVu
IGxhdGVyIHdlIGZpbmQgdGhhdCB3ZSBuZWVkIHRvIGVtaXQgYQorICAgICAgICBkaWZmZXJlbnQg
c3R1Yiwgc3R1YjIsIHdoZXJlIHdlIHRoaW5rIHRoYXQgc3R1YjIgbWlnaHQgc3Vic3VtZSBzdHVi
MS4gV2Ugc2F5IHRoYXQgc3R1YjIKKyAgICAgICAgc3Vic3VtZXMgc3R1YjEgaWYgZmFpbGluZyB0
byBleGVjdXRlIHN0dWIyIHRvIGNvbXBsZXRpb24gbWVhbnMgdGhhdCB3ZSBhcmUgZ3VhcmFudGVl
ZCB0byBmYWlsCisgICAgICAgIHRvIGV4ZWN1dGUgc3R1YjEgdG8gY29tcGxldGlvbi4gVGhpcyBj
b3VsZCBoYXBwZW4gaW4gdHJ1bmsgaWYgc3R1YjIgaGFzIHRoZSBzYW1lIGJhc2Ugc3RydWN0dXJl
CisgICAgICAgIGFzIHN0dWIxIGJ1dCBkaWZmZXJlbnQgcHJvdG90eXBlIGNvbmRpdGlvbnMuIEl0
IGNvdWxkIGhhcHBlbiB3aXRoIHByb3BlcnR5IHR5cGUgaW5mZXJlbmNlIGlmCisgICAgICAgIHN0
dWIyIGhhcyBhIGxvb3NlciB0eXBlIGNoZWNrIG9uIHYgdGhhbiBzdHViMSBkaWQuIEN1cnJlbnRs
eSwgaWYgdGhpcyBoYXBwZW5lZCwgd2Ugd291bGQgZW1pdAorICAgICAgICBzdHViMiBhbmQgaGF2
ZSBpdHMgc2xvdyBwYXRoIGp1bXAgdG8gc3R1YjEuIEhlbmNlLCB3ZSB3b3VsZCBzdGlsbCBlbmQg
dXAgZXhlY3V0aW5nIHRoZSBjaGVja3MKKyAgICAgICAgb2Ygc3R1YjEgYmVmb3JlIGZhbGxpbmcg
dGhyb3VnaCB0byB0aGUgc2xvdyBwYXRoLiBUaGlzIGdldHMgYmFkIHdoZW4gdGhlcmUgYXJlIG1h
bnkgc3R1YnMuCisgICAgICAgIFN0dWIxIG1pZ2h0IGJlIGluIGZyb250IG9mIGEgYnVuY2ggb2Yg
b3RoZXIgc3R1YnMsIHNvIHdoZW4gd2UgYWRkIHN0dWIyLCB3ZSB3aWxsIGVuZCB1cAorICAgICAg
ICBleGVjdXRpbmcgYm90aCBzdHViMidzIGFuZCBzdHViMSdzIGNoZWNrcyBiZWZvcmUgZmFsbGlu
ZyB0aHJvdWdoIHRvIHRoZSBvdGhlciBzdHVicy4gSXQgd291bGQKKyAgICAgICAgYmUgYmV0dGVy
IGlmIHdlIGNvdWxkIHJlbW92ZSBzdHViMSBmcm9tIHRoZSBsaXN0IGF0IHRoaXMgcG9pbnQuIEJ1
dCBzaW5jZSBzdHViMSBjb3VsZCBiZSBsaW5rZWQKKyAgICAgICAgdG8gZnJvbSBhIGRpZmZlcmVu
dCBzdHViIHRoYXQgd2UgaGFkIGFscmVhZHkgZ2VuZXJhdGVkLCB3ZSdkIGhhdmUgdG8gaGF2ZSBh
IHdheSBvZiBwYXRjaGluZworICAgICAgICBzdHVicyBvciByZWdlbmVyYXRpbmcgdGhlbSBmcm9t
IHNjcmF0Y2guIFRoaXMgaXMgY3VycmVudHkgaW1wb3NzaWJsZSBiZWNhdXNlIHdlIGp1c3QgZG9u
J3Qga2VlcAorICAgICAgICBhcm91bmQgZW5vdWdoIG1ldGEtZGF0YSB0byBtZXNzIHdpdGggYSBz
dHViIGFmdGVyIGl0J3MgZ2VuZXJhdGVkLiBBZnRlciB0aGlzIGNoYW5nZSwgd2UgbmV2ZXIKKyAg
ICAgICAgbGluayBuZXcgc3R1YnMgb250byBhIGxpbmtlZCBsaXN0IG9mIHByZS1leGlzdGluZyBz
dHViczsgaW5zdGVhZCBlYWNoIElDIHdpbGwgaGF2ZSBvbmUgc3R1YgorICAgICAgICBoYW5naW5n
IG9mZiBvZiBpdCBhbmQgd2UgYWx3YXlzIHJlZ2VuZXJhdGUgdGhhdCBvbmUgc3R1YiBmcm9tIHNj
cmF0Y2guIFRoYXQgb25lIHN0dWIgY29udGFpbnMKKyAgICAgICAgZWl0aGVyIGEgQmluYXJ5U3dp
dGNoIG9yIGEgYnJhbmNoIGNhc2NhZGUgdG8gc2VsZWN0IG9uZSBvZiB0aGUgQWNjZXNzQ2FzZXMu
IEVhY2ggQWNjZXNzQ2FzZSBpcworICAgICAgICBhbiBvYmplY3QgdGhhdCBkZXNjcmliZXMgZXZl
cnl0aGluZyB3ZSBuZWVkIHRvIHJlZ2VuZXJhdGUgaXQgaW4gdGhlIGZ1dHVyZS4gVGhpcyBtZWFu
cyB0aGF0CisgICAgICAgIHdoZW4gd2UgYWRkIGEgbmV3IGNhc2UgdG8gYW4gSUMgc3R1Yiwgd2Ug
Y2FuIGZpZ3VyZSBvdXQgd2hpY2ggcHJldmlvdXMgY2FzZXMgdGhpcyBvbmUgc3Vic3VtZXMuCisK
KyAgICAgICAgUG9vciBzY2FsYWJpbGl0eSB3aGVuIHRoZXJlIGFyZSBtYW55IGNhc2VzOiBQcmV2
aW91c2x5LCB0aGUgY2FzZXMgb2YgYSBwb2x5bW9ycGhpYyBpbmxpbmUgY2FjaGUKKyAgICAgICAg
Zm9ybWVkIGEgbGlua2VkIGxpc3Qgb2YgYnJhbmNoZXMuIFRoaXMgbWVhbnQgdGhhdCB0aGUgY29t
cGxleGl0eSBvZiBhbiBpbmxpbmUgY2FjaGUgZ3JldworICAgICAgICBsaW5lYXJseSB3aXRoIHRo
ZSBudW1iZXIgb2YgY2FzZXMuIFRoaXMgY2hhbmdlIHR1cm5zIHRoaXMgaW50byBhIEJpbmFyeVN3
aXRjaCBpbiBtb3N0IGNhc2VzLAorICAgICAgICBsZWFkaW5nIHRvIGxvZ2FyaXRobWljIHNjYWxp
bmcuCisKKyAgICAgICAgRHVwbGljYXRlIGNvZGUgYmV0d2VlbiBnZXQsIHB1dCwgYW5kIGluOiBU
aGUgY29kZSBmb3Igb3BfZ2V0X2J5X2lkLCBvcF9wdXRfYnlfaWQsIGFuZCBvcF9pbgorICAgICAg
ICBpbmxpbmUgY2FjaGVzIGdyZXcgaW5kZXBlbmRlbnRseSBhbmQgZW5kZWQgdXAgaGF2aW5nIGEg
bG90IG9mIGR1cGxpY2F0ZSBjb2RlLiBXZSBoYWQgdGhlIHdvcnN0CisgICAgICAgIGtpbmRzIG9m
IGR1cGxpY2F0ZSBjb2RlLiBJbiBzb21lIGNhc2VzLCB0aGUgY29kZSB3YXMgY29weS1wYXN0ZWQu
IEluIG90aGVyIGNhc2VzLCB3ZSB3cm90ZSBjb2RlCisgICAgICAgIHRoYXQgZmVsdCBsaWtlIGl0
IHdhcyBuZXcgZGVzcGl0ZSB0aGUgZmFjdCB0aGF0IGl0IHdhcyBsb2dpY2FsbHkgaWRlbnRpY2Fs
IHRvIGNvZGUgdGhhdCB3YXMKKyAgICAgICAgYWxyZWFkeSB3cml0dGVuIGVsc2V3aGVyZS4gVGhl
IG1haW4gc291cmNlcyBvZiBkdXBsaWNhdGlvbiB3ZXJlIGluIHNlbGVjdGluZyBhIHNjcmF0Y2gK
KyAgICAgICAgcmVnaXN0ZXIsIGNoZWNraW5nIGFsbCBvZiB0aGUgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25zIGFuZCB0aGUgYmFzZSBzdHJ1Y3R1cmUsIHRoZSBwcm8gZm9ybWEKKyAgICAgICAgaW52
b2x2ZWQgaW4gZ2VuZXJhdGluZyBhIHN0dWIsIGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIG5lZWRl
ZCB0byBkZXNjcmliZSBhbGwgb2YgdGhlIGFjY2VzcworICAgICAgICBjYXNlcy4gVGhpcyBjaGFu
Z2UgZGVkdXBsaWNhdGVzIGFsbCBvZiB0aGF0IGNvZGUuIE5vdywgYWxsIG9mIHRob3NlIElDcyB1
c2UgdGhlIHNhbWUgY2xhc3NlczoKKyAgICAgICAgdGhlIFBvbHltb3JwaGljQWNjZXNzIGFuZCBB
Y2Nlc3NDYXNlLiBUaGVyZSBpcyBjb2RlIGluIHRob3NlIGNsYXNzZXMgdGhhdCBoYW5kbGVzIGFs
bCBvZiB0aGUKKyAgICAgICAgY29tbW9uIHRoaW5ncywgYW5kIGZvciB0aGUgbW9zdCBwYXJ0IHRo
ZSBvbmx5IGNvZGUgdGhhdCBhY3R1YWxseSBzcGVjaWFsaXplcyBmb3IgdGhlIGtpbmQgb2YKKyAg
ICAgICAgYWNjZXNzIGlzIGluIHNvbWUgc3dpdGNoIHN0YXRlbWVudCBpbiBBY2Nlc3NDYXNlOjpn
ZW5lcmF0ZSgpLgorCisgICAgICAgIFNwZWNpYWwtY2FzaW5nIG9mIGFycmF5IGxlbmd0aCBhbmQg
c3RyaW5nIGxlbmd0aDogUHJldmlvdXNseSwgYXJyYXkubGVuZ3RoIGFuZCBzdHJpbmcubGVuZ3Ro
CisgICAgICAgIHdlcmUgaGFuZGxlZCBpbiBhbiBhZCBob2MgbWFubmVyIGluIHRoZSBnZXRfYnlf
aWQgcmVwYXRjaGluZyBjb2RlLiBUaGUgaGFuZGxpbmcgd2FzIHNlcGFyYXRlCisgICAgICAgIGZy
b20gdGhlIHBvbHltb3JwaGljIGdldF9ieV9pZCBoYW5kbGluZywgd2hpY2ggbWVhbnQgdGhhdCB3
ZSBjb3VsZCBub3QgaGFuZGxlIHBvbHltb3JwaGljCisgICAgICAgIGxlbmd0aCBhY2Nlc3NlcyBp
ZiBvbmUgb2YgdGhlIGxlbmd0aCBjYXNlcyB3YXMgZWl0aGVyIGFycmF5IG9yIHN0cmluZyBsZW5n
dGguIEZvciBleGFtcGxlLCBpZgorICAgICAgICB5b3UgaGFkICJvLmxlbmd0aCIgd2hlcmUgdGhl
IGxlbmd0aCB3YXMgZWl0aGVyIGFycmF5IGxlbmd0aCBvciBhIHZhbmlsbGEgbGVuZ3RoIHByb3Bl
cnR5LCB0aGVuCisgICAgICAgIHRoZSBnZXRfYnlfaWQgaW5saW5lIGNhY2hlIHdvdWxkIGVpdGhl
ciBlbWl0IGEgbW9ub21vcnBoaWMgc3R1YiBmb3IgYXJyYXkgbGVuZ3RoLCBvciBhCisgICAgICAg
IG1vbm9tb3JwaGljIHN0dWIgZm9yIHRoZSB2YW5pbGxhIGxlbmd0aCBwcm9wZXJ0eSwgYnV0IG5l
dmVyIGEgcG9seW1vcnBoaWMgc3R1YiAob3IgbGlzdCkgdGhhdAorICAgICAgICBjb3VsZCBkbyBi
b3RoLiBUaGlzIGNoYW5nZSBhZGRyZXNzZXMgdGhpcyBwcm9ibGVtIGJ5IGZvbGRpbmcgYXJyYXkg
bGVuZ3RoIGFuZCBzdHJpbmcgbGVuZ3RoCisgICAgICAgIGludG8gdGhlIHBvbHltb3JwaGljIGdl
dF9ieV9pZCBjb2RlLgorCisgICAgICAgIFRoaXMgd2FzIG1lYW50IHRvIGJlIGEgcGVyZi1uZXV0
cmFsIGNoYW5nZSB0byBlbmFibGUgcHJvcGVydHkgdHlwZSBpbmZlcmVuY2UsIGJ1dCBpdCBlbmRl
ZCB1cAorICAgICAgICBiZWluZyBhIDElIE9jdGFuZSBzcGVlZC11cCwgbWFpbmx5IGJlY2F1c2Ug
b2YgYSAxNCUgc3BlZWQtdXAgaW4gcmF5dHJhY2UuIFRoaXMgaXNuJ3QgdG9vCisgICAgICAgIHN1
cnByaXNpbmcsIHNpbmNlIHRoYXQgdGVzdCBkb2VzIHVzZSBpbmxpbmUgY2FjaGVzIGEgbG90IGFu
ZCB0aGlzIGNoYW5nZSBtYWtlcyBpbmxpbmUgY2FjaGVzCisgICAgICAgIG1vcmUgc2NhbGFibGUu
CisKKyAgICAgICAgVGhpcyBhbHNvIGZpeGVzIGFuZCBhZGRzIGEgdGVzdCBmb3IgYSBCaW5hcnlT
d2l0Y2ggYnVnLiBCaW5hcnlTd2l0Y2ggaGFkIGFuIG9wdGltaXphdGlvbiBmb3IKKyAgICAgICAg
Y29uc2VjdXRpdmUgaW50ZWdlciBjYXNlcy4gVXNpbmcgaXQgb24gdHlwZWQgYXJyYXkgc3RydWN0
dXJlcyB0cmlnZ2VycyB0aGlzIGJ1Zy4gSXQncyBhIGhhcmQKKyAgICAgICAgYnVnIHRvIHRyaWdn
ZXIgYW55IG90aGVyIHdheSBiZWNhdXNlIG91ciBvdGhlciBzd2l0Y2ggb3B0aW1pemF0aW9ucyB3
aWxsIHVzdWFsbHkgdXNlIGEganVtcAorICAgICAgICB0YWJsZSBpbiBjYXNlIG9mIGNvbnNlY3V0
aXZlIGludGVnZXJzLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2
YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEph
dmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzOgorICAg
ICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlckNvZGVQdHI6OmR1bXBXaXRoTmFtZSk6CisgICAgICAgICogYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcmludEdldEJ5SWRDYWNoZVN0
YXR1cyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cHJpbnRQdXRCeUlkQ2FjaGVTdGF0dXMp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpnZXRCeVZhbEluZm9NYXApOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmFkZFN0dWJJbmZvKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5kU3R1Yklu
Zm8pOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OnN0dWJJbmZvQmVnaW4pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnN0dWJJbmZv
RW5kKToKKyAgICAgICAgKiBieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpT
Qzo6R2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRTaXRlRmVlZGJh
Y2spOgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcDogQ29waWVkIGZy
b20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3Qu
Y3BwLgorICAgICAgICAoSlNDOjpBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OmFkZFdhdGNocG9pbnQp
OgorICAgICAgICAoSlNDOjpBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnJlc3RvcmVTY3JhdGNoKToK
KyAgICAgICAgKEpTQzo6QWNjZXNzR2VuZXJhdGlvblN0YXRlOjpzdWNjZWVkKToKKyAgICAgICAg
KEpTQzo6QWNjZXNzQ2FzZTo6QWNjZXNzQ2FzZSk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6
OmdldCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OnJlcGxhY2UpOgorICAgICAgICAoSlND
OjpBY2Nlc3NDYXNlOjp0cmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6c2V0
dGVyKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6aW4pOgorICAgICAgICAoSlNDOjpBY2Nl
c3NDYXNlOjpnZXRMZW5ndGgpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjp+QWNjZXNzQ2Fz
ZSk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmZyb21TdHJ1Y3R1cmVTdHViSW5mbyk6Cisg
ICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmNsb25lKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2Fz
ZTo6Z3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2spOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjph
bHRlcm5hdGVCYXNlKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Y2FuUmVwbGFjZSk6Cisg
ICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmR1bXApOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNl
Ojp2aXNpdFdlYWspOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFy
ZCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlKToKKyAgICAgICAgKEpTQzo6
UG9seW1vcnBoaWNBY2Nlc3M6OlBvbHltb3JwaGljQWNjZXNzKToKKyAgICAgICAgKEpTQzo6UG9s
eW1vcnBoaWNBY2Nlc3M6On5Qb2x5bW9ycGhpY0FjY2Vzcyk6CisgICAgICAgIChKU0M6OlBvbHlt
b3JwaGljQWNjZXNzOjpyZWdlbmVyYXRlV2l0aENhc2VzKToKKyAgICAgICAgKEpTQzo6UG9seW1v
cnBoaWNBY2Nlc3M6OnJlZ2VuZXJhdGVXaXRoQ2FzZSk6CisgICAgICAgIChKU0M6OlBvbHltb3Jw
aGljQWNjZXNzOjp2aXNpdFdlYWspOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzczo6
ZHVtcCk6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQWNjZXNzOjpyZWdlbmVyYXRlKToKKyAg
ICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nlc3M6
OkdldEJ5SWRBY2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpHZXRCeUlkQWNjZXNzOjp+
R2V0QnlJZEFjY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nlc3M6OmZy
b21TdHJ1Y3R1cmVTdHViSW5mbyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nl
c3M6OnZpc2l0V2Vhayk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlBvbHltb3JwaGljR2V0QnlJ
ZExpc3Q6OlBvbHltb3JwaGljR2V0QnlJZExpc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpQ
b2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojpmcm9tKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UG9s
eW1vcnBoaWNHZXRCeUlkTGlzdDo6flBvbHltb3JwaGljR2V0QnlJZExpc3QpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpjdXJyZW50U2xvd1BhdGhUYXJn
ZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjphZGRB
Y2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojpp
c0Z1bGwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojpp
c0FsbW9zdEZ1bGwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0dldEJ5SWRM
aXN0OjpkaWRTZWxmUGF0Y2hpbmcpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0Ojp2aXNpdFdlYWspOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1Bv
bHltb3JwaGljQWNjZXNzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmguCisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6
OmlzR2V0KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6aXNQdXQpOgorICAgICAgICAoSlND
OjpBY2Nlc3NDYXNlOjppc0luKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6dHlwZSk6Cisg
ICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6Om9mZnNldCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nh
c2U6OnZpYVByb3h5KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6c3RydWN0dXJlKToKKyAg
ICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6bmV3U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6QWNj
ZXNzQ2FzZTo6Y29uZGl0aW9uU2V0KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6YWRkaXRp
b25hbFNldCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmN1c3RvbVNsb3RCYXNlKToKKyAg
ICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6ZG9lc0NhbGxzKToKKyAgICAgICAgKEpTQzo6QWNjZXNz
Q2FzZTo6Y2FsbExpbmtJbmZvKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6UmFyZURhdGE6
OlJhcmVEYXRhKToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNBY2Nlc3M6OmlzRW1wdHkpOgor
ICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzczo6c2l6ZSk6CisgICAgICAgIChKU0M6OlBv
bHltb3JwaGljQWNjZXNzOjphdCk6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQWNjZXNzOjpv
cGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6R2V0QnlJZEFjY2Vzcyk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nlc3M6OmlzU2V0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6b3BlcmF0b3IhKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6dHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Okdl
dEJ5SWRBY2Nlc3M6OnN0cnVjdHVyZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkdldEJ5SWRB
Y2Nlc3M6OmNvbmRpdGlvblNldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nl
c3M6OnN0dWJSb3V0aW5lKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6
ZG9lc0NhbGxzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNHZXRCeUlkTGlz
dDo6aXNFbXB0eSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlBvbHltb3JwaGljR2V0QnlJZExp
c3Q6OnNpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0
OjphdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlBvbHltb3JwaGljR2V0QnlJZExpc3Q6Om9w
ZXJhdG9yW10pOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNz
U3RydWN0dXJlTGlzdC5oOiBSZW1vdmVkLgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGlj
R2V0QnlJZExpc3QuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGlj
R2V0QnlJZExpc3QuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY1B1
dEJ5SWRMaXN0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY1B1
dEJ5SWRMaXN0Lmg6IFJlbW92ZWQuCisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5j
cHA6CisgICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyk6Cisg
ICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmVTdHViSW5mbzo6ZGVyZWYpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5m
bzo6YWRkQWNjZXNzQ2FzZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpyZXNl
dCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuY2Vz
KToKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmVTdHViSW5mbzo6U3RydWN0dXJlU3R1YkluZm8pOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmVTdHViSW5mbzo6aW5pdEdldEJ5SWRTZWxmKToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlU3R1YkluZm86OmluaXRQdXRCeUlkUmVwbGFjZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZVN0dWJJbmZvOjppbml0U3R1Yik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpz
ZXRTZWVuKToKKyAgICAgICAgKEpTQzo6Z2V0U3RydWN0dXJlU3R1YkluZm9Db2RlT3JpZ2luKToK
KyAgICAgICAgKEpTQzo6aXNHZXRCeUlkQWNjZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
aXNQdXRCeUlkQWNjZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6aXNJbkFjY2Vzcyk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjppbml0R2V0QnlJZExpc3Qp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdFB1dEJ5SWRU
cmFuc2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86Omlu
aXRQdXRCeUlkTGlzdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZv
Ojppbml0SW5MaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86
OmFkZFdhdGNocG9pbnQpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbik6Cisg
ICAgICAgICogZnRsL0ZUTENvbXBpbGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Om1tQWxsb2Nh
dGVEYXRhU2VjdGlvbik6CisgICAgICAgICogaml0L0FjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5l
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBqaXQvQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUu
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgIChK
U0M6OkFzc2VtYmx5SGVscGVyczo6YnJhbmNoSWZFbXB0eSk6CisgICAgICAgIChKU0M6OkFzc2Vt
Ymx5SGVscGVyczo6YnJhbmNoU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxw
ZXJzOjpib3hCb29sZWFuUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6
Ym94Qm9vbGVhbik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6Ym94SW50MzIpOgor
ICAgICAgICAqIGppdC9CaW5hcnlTd2l0Y2guY3BwOgorICAgICAgICAoSlNDOjpCaW5hcnlTd2l0
Y2g6OkJpbmFyeVN3aXRjaCk6CisgICAgICAgIChKU0M6OkJpbmFyeVN3aXRjaDo6YnVpbGQpOgor
ICAgICAgICAoSlNDOjpCaW5hcnlTd2l0Y2g6OkNhc2U6OmR1bXApOgorICAgICAgICAoSlNDOjpC
aW5hcnlTd2l0Y2g6OkJyYW5jaENvZGU6OmR1bXApOgorICAgICAgICAqIGppdC9CaW5hcnlTd2l0
Y2guaDoKKyAgICAgICAgKEpTQzo6QmluYXJ5U3dpdGNoOjpDYXNlOjpvcGVyYXRvcjwpOgorICAg
ICAgICAoSlNDOjpCaW5hcnlTd2l0Y2g6OkJyYW5jaENvZGU6OkJyYW5jaENvZGUpOgorICAgICAg
ICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3Bw
OgorICAgICAgICAoSlNDOjpnYXJiYWdlU3R1YkluZm8pOgorICAgICAgICAoSlNDOjpKSVRJbmxp
bmVDYWNoZUdlbmVyYXRvcjo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IpOgorICAgICAgICAoSlND
OjpKSVRCeUlkR2VuZXJhdG9yOjpKSVRCeUlkR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklU
R2V0QnlJZEdlbmVyYXRvcjo6SklUR2V0QnlJZEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJ
VFB1dEJ5SWRHZW5lcmF0b3I6OkpJVFB1dEJ5SWRHZW5lcmF0b3IpOgorICAgICAgICAqIGppdC9K
SVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oOgorICAgICAgICAoSlNDOjpKSVRJbmxpbmVDYWNoZUdl
bmVyYXRvcjo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVRJbmxp
bmVDYWNoZUdlbmVyYXRvcjo6c3R1YkluZm8pOgorICAgICAgICAoSlNDOjpKSVRCeUlkR2VuZXJh
dG9yOjpKSVRCeUlkR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUQnlJZEdlbmVyYXRvcjo6
cmVwb3J0U2xvd1BhdGhDYWxsKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6Cisg
ICAgICAgICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjpyZXBhdGNoQ2FsbCk6Cisg
ICAgICAgIChKU0M6OnJlcGF0Y2hCeUlkU2VsZkFjY2Vzcyk6CisgICAgICAgIChKU0M6OnJlc2V0
R2V0QnlJRENoZWNrQW5kTG9hZCk6CisgICAgICAgIChKU0M6OnJlc2V0UHV0QnlJRENoZWNrQW5k
TG9hZCk6CisgICAgICAgIChKU0M6OnJlcGxhY2VXaXRoSnVtcCk6CisgICAgICAgIChKU0M6OnRy
eUNhY2hlR2V0QnlJRCk6CisgICAgICAgIChKU0M6OnJlcGF0Y2hHZXRCeUlEKToKKyAgICAgICAg
KEpTQzo6YXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6
YXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJZEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6dHJ5
Q2FjaGVQdXRCeUlEKToKKyAgICAgICAgKEpTQzo6cmVwYXRjaFB1dEJ5SUQpOgorICAgICAgICAo
SlNDOjp0cnlSZXBhdGNoSW4pOgorICAgICAgICAoSlNDOjpyZXBhdGNoSW4pOgorICAgICAgICAo
SlNDOjpyZXNldEdldEJ5SUQpOgorICAgICAgICAoSlNDOjpyZXNldFB1dEJ5SUQpOgorICAgICAg
ICAoSlNDOjpjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9uKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6Y2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjplbWl0UmVzdG9yZVNjcmF0Y2gpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpsaW5rUmVz
dG9yZVNjcmF0Y2gpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjp0b1N0cmluZyk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OmtpbmRGb3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpjdXN0b21G
b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpnZW5lcmF0ZUJ5SWRTdHViKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6cGF0Y2hKdW1wVG9HZXRCeUlkU3R1Yik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OnRyeUJ1aWxkR2V0QnlJRExpc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpidWls
ZEdldEJ5SURMaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6YXBwcm9wcmlhdGVMaXN0QnVp
bGRpbmdQdXRCeUlkRnVuY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjplbWl0UHV0UmVw
bGFjZVN0dWIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjplbWl0UHV0VHJhbnNpdGlvblN0dWIp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjp0cnlCdWlsZFB1dEJ5SWRMaXN0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6YnVpbGRQdXRCeUlkTGlzdCk6IERlbGV0ZWQuCisgICAgICAgICogaml0
L1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5jcHA6CisgICAgICAgIChKU0M6OlNjcmF0Y2hSZWdp
c3RlckFsbG9jYXRvcjo6bG9jayk6CisgICAgICAgIChKU0M6OlNjcmF0Y2hSZWdpc3RlckFsbG9j
YXRvcjo6YWxsb2NhdGVTY3JhdGNoKToKKyAgICAgICAgKiBqaXQvU2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yLmg6CisgICAgICAgIChKU0M6OlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6U2NyYXRj
aFJlZ2lzdGVyQWxsb2NhdG9yKToKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoR2xvYmFs
T2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChmdW5jdGlvblF1aXQpOgorICAgICAg
ICAoZnVuY3Rpb25BYm9ydCk6CisgICAgICAgIChmdW5jdGlvbkZhbHNlMSk6CisgICAgICAgIChm
dW5jdGlvbkZhbHNlMik6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAgICog
dGVzdHMvc3RyZXNzL2FycmF5LW1lc3NhZ2UtcGFzc2luZy5qczogQWRkZWQuCisgICAgICAgICh3
aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgICh3aW5kb3cucG9zdE1lc3NhZ2UpOgor
ICAgICAgICAod2luZG93Ll9oYW5kbGVFdmVudHMpOgorICAgICAgICAodGVzdFBhc3NlZCk6Cisg
ICAgICAgICh0ZXN0RmFpbGVkKToKKyAgICAgICAgKGNsYXNzQ29tcGFyZSk6CisgICAgICAgIChi
dWZmZXJDb21wYXJlKToKKyAgICAgICAgKHZpZXdDb21wYXJlKToKKyAgICAgICAgKHR5cGVkQXJy
YXlDb21wYXJlKToKKyAgICAgICAgKGRhdGFWaWV3Q29tcGFyZSk6CisgICAgICAgIChkYXRhVmll
d0NvbXBhcmUyKToKKyAgICAgICAgKGRhdGFWaWV3Q29tcGFyZTMpOgorICAgICAgICAoY3JlYXRl
QnVmZmVyKToKKyAgICAgICAgKGNyZWF0ZVR5cGVkQXJyYXkpOgorICAgICAgICAoY3JlYXRlVHlw
ZWRBcnJheU92ZXJCdWZmZXIpOgorICAgICAgICAobmV3LkRhdGFWaWV3KToKKyAgICAgICAgKHRl
c3RMaXN0LnRlc3RMaXN0LmNvbmNhdC5iYXNpY0J1ZmZlclR5cGVzLm1hcCk6CisgICAgICAgIChk
b25lVGVzdCk6CisKIDIwMTUtMDktMDkgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNv
bT4KIAogICAgICAgICBGaXggdGhlIG5vLURGRyBidWlsZC4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE4OTU0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDggKzEwNCw3IEBAIHNl
dChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25k
aXRpb24uY3BwCiAgICAgYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwCiAg
ICAgYnl0ZWNvZGUvT3Bjb2RlLmNwcAotICAgIGJ5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExp
c3QuY3BwCi0gICAgYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAKKyAgICBieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKICAgICBieXRlY29kZS9QcmVjaXNlSnVtcFRhcmdl
dHMuY3BwCiAgICAgYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uY3BwCiAgICAgYnl0ZWNvZGUv
UHV0QnlJZFN0YXR1cy5jcHAKQEAgLTM1Niw3ICszNTUsNiBAQCBzZXQoSmF2YVNjcmlwdENvcmVf
U09VUkNFUwogICAgIGludGVycHJldGVyL1Byb3RvQ2FsbEZyYW1lLmNwcAogICAgIGludGVycHJl
dGVyL1N0YWNrVmlzaXRvci5jcHAKIAotICAgIGppdC9BY2Nlc3NvckNhbGxKSVRTdHViUm91dGlu
ZS5jcHAKICAgICBqaXQvQXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3MuY3BwCiAgICAgaml0L0Fz
c2VtYmx5SGVscGVycy5jcHAKICAgICBqaXQvQmluYXJ5U3dpdGNoLmNwcApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2pzYy5jcHAJKHJldmlzaW9uIDE4OTU0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
c2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODAsNiArNDgwLDcgQEAgc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25SZW9wdGltaXphdGlvblJldHJ5Q291bnQoRXhlY1N0YXRlKik7CiBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblRyYW5zZmVyQXJyYXlCdWZm
ZXIoRXhlY1N0YXRlKik7CiBzdGF0aWMgTk9fUkVUVVJOX1dJVEhfVkFMVUUgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblF1aXQoRXhlY1N0YXRlKik7CitzdGF0aWMgTk9fUkVU
VVJOX0RVRV9UT19DUkFTSCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQWJv
cnQoRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvbkZhbHNlMShFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uRmFsc2UyKEV4ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25VbmRlZmluZWQxKEV4ZWNTdGF0ZSopOwpAQCAtNjEzLDYgKzYx
NCw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJkZXNjcmliZUFycmF5
IiwgZnVuY3Rpb25EZXNjcmliZUFycmF5LCAxKTsKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJw
cmludCIsIGZ1bmN0aW9uUHJpbnQsIDEpOwogICAgICAgICBhZGRGdW5jdGlvbih2bSwgInF1aXQi
LCBmdW5jdGlvblF1aXQsIDApOworICAgICAgICBhZGRGdW5jdGlvbih2bSwgImFib3J0IiwgZnVu
Y3Rpb25BYm9ydCwgMCk7CiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAiZ2MiLCBmdW5jdGlvbkdD
QW5kU3dlZXAsIDApOwogICAgICAgICBhZGRGdW5jdGlvbih2bSwgImZ1bGxHQyIsIGZ1bmN0aW9u
RnVsbEdDLCAwKTsKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJlZGVuR0MiLCBmdW5jdGlvbkVk
ZW5HQywgMCk7CkBAIC0xMjQ2LDYgKzEyNDgsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvblF1aQogI2VuZGlmCiB9CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25BYm9ydChFeGVjU3RhdGUqKQoreworICAgIENSQVNIKCk7Cit9CisKIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25GYWxzZTEoRXhlY1N0YXRlKikgeyByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpOyB9CiBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uRmFsc2UyKEV4ZWNTdGF0ZSopIHsgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKTsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE4OTU0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTM0Myw4ICszNDMsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
Ynl0ZWNvZGVcT2JqZWN0UHJvcGVydHlDb25kaXRpb24uY3BwIiAvPgogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cYnl0ZWNvZGVcT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcT3Bjb2RlLmNwcCIgLz4KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFBvbHltb3JwaGljR2V0QnlJZExpc3QuY3Bw
IiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUG9seW1vcnBoaWNQdXRC
eUlkTGlzdC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQb2x5
bW9ycGhpY0FjY2Vzcy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29k
ZVxQcmVjaXNlSnVtcFRhcmdldHMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
Ynl0ZWNvZGVcUHJvcGVydHlDb25kaXRpb24uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cYnl0ZWNvZGVcUHV0QnlJZFN0YXR1cy5jcHAiIC8+CkBAIC02MTcsNyArNjE2LDYgQEAK
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGludGVycHJldGVyXEpTU3RhY2suY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caW50ZXJwcmV0ZXJcUHJvdG9DYWxsRnJhbWUuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caW50ZXJwcmV0ZXJcU3RhY2tWaXNpdG9y
LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxBY2Nlc3NvckNhbGxKSVRT
dHViUm91dGluZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcQXJpdHlD
aGVja0ZhaWxSZXR1cm5UaHVua3MuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
aml0XEFzc2VtYmx5SGVscGVycy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxq
aXRcQmluYXJ5U3dpdGNoLmNwcCIgLz4KQEAgLTEwNDQsOCArMTA0Miw3IEBACiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcT3Bjb2RlLmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxPcGVyYW5kcy5oIiAvPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oIiAvPgot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUG9seW1vcnBoaWNQdXRCeUlkTGlz
dC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUG9seW1vcnBoaWNB
Y2Nlc3MuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFByZWNpc2VK
dW1wVGFyZ2V0cy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUHJv
cGVydHlDb25kaXRpb24uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2Rl
XFB1dEJ5SWRTdGF0dXMuaCIgLz4KQEAgLTE0MTYsNyArMTQxMyw2IEBACiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRlclxQcm90b0NhbGxGcmFtZS5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5caW50ZXJwcmV0ZXJcUmVnaXN0ZXIuaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGludGVycHJldGVyXFN0YWNrVmlzaXRvci5oIiAvPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5caml0XEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcQXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3Mu
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxBc3NlbWJseUhlbHBlcnMuaCIg
Lz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxCaW5hcnlTd2l0Y2guaCIgLz4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3Jp
cHRDb3JlLnZjeHByb2ouZmlsdGVycwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMJ
KHJldmlzaW9uIDE4OTU0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwkod29ya2luZyBjb3B5KQpA
QCAtMTk4LDcgKzE5OCw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxP
cGNvZGUuY3BwIj4KICAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4KICAgICA8L0NsQ29t
cGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFBvbHltb3JwaGljUHV0
QnlJZExpc3QuY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFBvbHlt
b3JwaGljQWNjZXNzLmNwcCI+CiAgICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9GaWx0ZXI+CiAgICAg
PC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQdXRCeUlk
U3RhdHVzLmNwcCI+CkBAIC0xNjI2LDkgKzE2MjYsNiBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cbGx2bVxMTFZNQVBJLmNwcCI+CiAgICAgICA8RmlsdGVyPmxsdm08L0ZpbHRlcj4KICAg
ICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxBY2Nlc3NvckNh
bGxKSVRTdHViUm91dGluZS5jcHAiPgotICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4KLSAgICA8
L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxDb25zb2xl
TWVzc2FnZS5jcHAiPgogICAgICAgPEZpbHRlcj5pbnNwZWN0b3I8L0ZpbHRlcj4KICAgICA8L0Ns
Q29tcGlsZT4KQEAgLTE2OTUsOSArMTY5Miw2IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxpbnNwZWN0b3JcSlNKYXZhU2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBlLmNwcCI+CiAgICAgICA8
RmlsdGVyPmluc3BlY3RvcjwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAiPgotICAg
ICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5ccHJvZmlsZXJcUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAiPgog
ICAgICAgPEZpbHRlcj5wcm9maWxlcjwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgpAQCAtMjA5
Nyw3ICsyMDkxLDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE9wZXJh
bmRzLmgiPgogICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRl
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUG9seW1vcnBoaWNQdXRCeUlk
TGlzdC5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFBvbHltb3JwaGlj
QWNjZXNzLmgiPgogICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNs
dWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUHV0QnlJZFN0YXR1cy5o
Ij4KQEAgLTQyMDUsOSArNDE5OSw2IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxsbHZt
XExMVk1IZWFkZXJzLmgiPgogICAgICAgPEZpbHRlcj5sbHZtPC9GaWx0ZXI+CiAgICAgPC9DbElu
Y2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcQWNjZXNzb3JDYWxsSklUU3R1
YlJvdXRpbmUuaCI+Ci0gICAgICA8RmlsdGVyPmppdDwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRl
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYXNzZW1ibGVyXEFib3J0UmVhc29uLmgiPgog
ICAgICAgPEZpbHRlcj5hc3NlbWJsZXI8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KQEAgLTQy
ODYsOSArNDI3Nyw2IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQ0lu
bGluZXMuaCI+CiAgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVk
ZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFBvbHltb3JwaGljR2V0QnlJ
ZExpc3QuaCI+Ci0gICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1
ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwcm9maWxlclxQcm9maWxlckpldHRpc29u
UmVhc29uLmgiPgogICAgICAgPEZpbHRlcj5wcm9maWxlcjwvRmlsdGVyPgogICAgIDwvQ2xJbmNs
dWRlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE4OTU0MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNzIsNyArMjcyLDYgQEAKIAkJMEYzMDBCN0Mx
OEFCMUIxNDAwQTZENzJFIC8qIERGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMwMEI3QTE4QUIxQjE0
MDBBNkQ3MkUgLyogREZHSW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2UuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjM0QjE0OTE2RDQyMDEwMDAx
Q0RBNUEgLyogREZHVXNlS2luZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjM0QjE0NzE2RDQyMDBFMDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAg
Ki87IH07CiAJCTBGMzRCMTRBMTZENDIwMTMwMDFDREE1QSAvKiBERkdVc2VLaW5kLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM0QjE0ODE2RDQyMDBF
MDAxQ0RBNUEgLyogREZHVXNlS2luZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07Ci0JCTBGMzRCMTRDMTZENDNFMEQwMDFDREE1QSAvKiBQb2x5bW9ycGhp
Y0FjY2Vzc1N0cnVjdHVyZUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMzRCMTRCMTZENDNFMEMwMDFDREE1QSAvKiBQb2x5bW9ycGhpY0FjY2Vz
c1N0cnVjdHVyZUxpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjM4QjAxMTE3Q0YwNzgwMDBCMTQ0RDMgLyogTExJbnRFbnRyeXBvaW50LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhCMDBG
MTdDRjA3N0YwMEIxNDREMyAvKiBMTEludEVudHJ5cG9pbnQuY3BwICovOyB9OwogCQkwRjM4QjAx
MjE3Q0YwNzgzMDBCMTQ0RDMgLyogTExJbnRFbnRyeXBvaW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM4QjAxMDE3Q0YwNzdGMDBCMTQ0RDMgLyog
TExJbnRFbnRyeXBvaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEYzOEIwMTcxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uS2V5
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhC
MDEzMTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktleS5jcHAgKi87IH07CkBAIC0z
MjQsOCArMzIzLDYgQEAKIAkJMEY0ODUzMkExODdERkRFQzAwODNCNjg3IC8qIEZUTFJlY292ZXJ5
T3Bjb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjQ4NTMyNjE4N0RGREVDMDA4M0I2ODcgLyogRlRMUmVjb3ZlcnlPcGNvZGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQ5M0FGQTE2RDBDQUQz
MDA4NDUwOEIgLyogU291cmNlUHJvdmlkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0OTNBRjgxNkQwQ0FEMTAwODQ1MDhCIC8qIFNvdXJjZVBy
b3ZpZGVyLmNwcCAqLzsgfTsKIAkJMEY0Qjk0REMxN0I5RjA3NTAwREQwM0E0IC8qIFR5cGVkQXJy
YXlJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjRCOTREQjE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRBcnJheUlubGluZXMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjRDRUQ1RTE4Q0VB
N0FCMDA4MDJGRTAgLyogUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRDRUQ1QzE4Q0VBN0FCMDA4MDJGRTAg
LyogUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAgKi87IH07Ci0JCTBGNENFRDVGMThDRUE3QUIw
MDgwMkZFMCAvKiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRDRUQ1RDE4Q0VBN0FCMDA4MDJGRTAgLyogUG9s
eW1vcnBoaWNHZXRCeUlkTGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGNEYyOURGMThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVj
dXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRGMjlERDE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGlj
RXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwICovOyB9OwogCQkwRjRGMjlFMDE4QjZB
RDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEYyOURFMThC
NkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNTBB
RjNDMTkzRThCMzkwMDY3NEVFOCAvKiBERkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTBBRjNCMTkzRThCMzkw
MDY3NEVFOCAvKiBERkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzk4LDggKzM5NSw2IEBACiAJCTBGNzE0
Q0E0MTZFQTkyRjAwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzE0Q0ExMTZF
QTkyRUQwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCAqLzsgfTsK
IAkJMEY3MTRDQTUxNkVBOTJGMjAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhh
c2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzE0
Q0EyMTZFQTkyRUQwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3NDNCQUEx
NkI4ODI0OTAwOUY5Mjc3IC8qIEFSTTY0RGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MkEzQTIwMTY1MUM2NjEwMEE4MEFGRSAv
KiBBUk02NERpc2Fzc2VtYmxlci5jcHAgKi87IH07Ci0JCTBGNzU3NkQyMThFMUZFRTkwMDJFRjRD
RCAvKiBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc1NzZEMDE4RTFGRUU5MDAyRUY0Q0QgLyogQWNj
ZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuY3BwICovOyB9OwotCQkwRjc1NzZEMzE4RTFGRUU5MDAy
RUY0Q0QgLyogQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzU3NkQxMThFMUZFRTkwMDJFRjRDRCAvKiBB
Y2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGNzY2RDI4MTVBOENDMUUwMDhGMzYzRSAvKiBKSVRTdHVi
Um91dGluZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjc2NkQyNjE1QThDQzFCMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuY3BwICovOyB9Owog
CQkwRjc2NkQyQjE1QThDQzM4MDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVTZXQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NjZEMjkxNUE4Q0Mz
NDAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmNwcCAqLzsgfTsKIAkJMEY3NjZEMkMxNUE4
Q0MzQTAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2NkQyQTE1QThDQzM0MDA4RjM2M0UgLyogSklU
U3R1YlJvdXRpbmVTZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtNDczLDggKzQ2OCw2IEBACiAJCTBGOUUzMjY0MUIwNUFCMDQwMDgwMUVENSAv
KiBERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RTMyNjIxQjA1QUIwNDAwODAxRUQ1IC8qIERGR1N0
b3JlQmFycmllckluc2VydGlvblBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5RkI0RjQxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNr
TGF5b3V0UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY5RkI0RjIxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuY3Bw
ICovOyB9OwogCQkwRjlGQjRGNTE3RkNCOTE3MDBDQjY3RjggLyogREZHU3RhY2tMYXlvdXRQaGFz
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RkI0
RjMxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjlGQzhDMzE0RTFCNUZFMDBE
NTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlGQzhCRjE0RTFCNUZCMDBENTJBRTAgLyogUG9s
eW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAgKi87IH07Ci0JCTBGOUZDOEM0MTRFMUI2MDAwMEQ1MkFF
MCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlGQzhDMDE0RTFCNUZCMDBENTJBRTAgLyogUG9seW1vcnBo
aWNQdXRCeUlkTGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGOUZDOEM1MTRFMUI2MDQwMEQ1MkFFMCAvKiBQdXRLaW5kLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlGQzhDMTE0RTFCNUZCMDBE
NTJBRTAgLyogUHV0S2luZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGQTJDMTdCMTdEN0NGODQwMDlEMDE1RiAvKiBUZXN0UnVubmVyVXRpbHMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBMkMx
NzkxN0Q3Q0Y4NDAwOUQwMTVGIC8qIFRlc3RSdW5uZXJVdGlscy5jcHAgKi87IH07CiAJCTBGQTJD
MTdDMTdEN0NGODQwMDlEMDE1RiAvKiBUZXN0UnVubmVyVXRpbHMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQTJDMTdBMTdEN0NGODQwMDlEMDE1RiAv
KiBUZXN0UnVubmVyVXRpbHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwpAQCAtNzQyLDYgKzczNSw4IEBACiAJCTBGRjhCREVBMUFENENGNzEwMERGRTg4
NCAvKiBJbmZlcnJlZFZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRjhCREU4MUFENENGNzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVlLmNw
cCAqLzsgfTsKIAkJMEZGOEJERUIxQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVkVmFsdWUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjhCREU5MUFE
NENGNzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGOTIyRDQxNEY0NkI0MTAwNDFBMjRFIC8qIExM
SW50T2Zmc2V0c0V4dHJhY3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjQ2ODBBMTE0QkE3RjgyMDBCRkUyNzIgLyogTExJbnRPZmZzZXRzRXh0
cmFjdG9yLmNwcCAqLzsgfTsKKwkJMEZGOUNFNzMxQjlDRDZEMDAwNEVEQ0E2IC8qIFBvbHltb3Jw
aGljQWNjZXNzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRjlDRTcxMUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5jcHAgKi87
IH07CisJCTBGRjlDRTc0MUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGOUNFNzIxQjlD
RDZEMDAwNEVEQ0E2IC8qIFBvbHltb3JwaGljQWNjZXNzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGQTU0OTcxNkI4ODM1MDAwQjNBOTgyIC8q
IEE2NERPcGNvZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNjUyQTNBMjIxNjUxQzY5NzAwQTgwQUZFIC8qIEE2NERPcGNvZGUuY3BwICovOyB9Owog
CQkwRkZBNTQ5ODE2Qjg4MzUzMDBCM0E5ODIgLyogQTY0RE9wY29kZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjUyQTNBMjMxNjUxQzY5NzAwQTgwQUZF
IC8qIEE2NERPcGNvZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRkZCNkMzODFBRjQ4RERDMDBEQjFCRjcgLyogVHlwZW9mVHlwZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZCNkMzNjFBRjQ4
RERDMDBEQjFCRjcgLyogVHlwZW9mVHlwZS5jcHAgKi87IH07CkBAIC0yMTAzLDcgKzIwOTgsNiBA
QAogCQkwRjMwMEI3QTE4QUIxQjE0MDBBNkQ3MkUgLyogREZHSW50ZWdlckNoZWNrQ29tYmluaW5n
UGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHSW50ZWdlckNoZWNr
Q29tYmluaW5nUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFz
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM0QjE0NzE2RDQyMDBFMDAxQ0RB
NUEgLyogREZHVXNlS2luZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBERkdVc2VLaW5kLmNwcDsgcGF0aCA9IGRmZy9ERkdVc2VLaW5kLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYzNEIxNDgxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVXNlS2luZC5oOyBwYXRoID0g
ZGZnL0RGR1VzZUtpbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYzNEIxNEIx
NkQ0M0UwQzAwMUNEQTVBIC8qIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxp
c3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzOEIwMEYxN0NGMDc3RjAwQjE0
NEQzIC8qIExMSW50RW50cnlwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBMTEludEVudHJ5
cG9pbnQuY3BwOyBwYXRoID0gbGxpbnQvTExJbnRFbnRyeXBvaW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYzOEIwMTAxN0NGMDc3RjAwQjE0NEQzIC8qIExMSW50RW50cnlw
b2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBMTEludEVudHJ5cG9pbnQuaDsgcGF0aCA9IGxsaW50L0xM
SW50RW50cnlwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM4QjAxMzE3
Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25LZXkuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ29tcGlsYXRpb25LZXkuY3BwOyBwYXRoID0gZGZnL0RG
R0NvbXBpbGF0aW9uS2V5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxNTYs
OCArMjE1MCw2IEBACiAJCTBGNDg1MzI2MTg3REZERUMwMDgzQjY4NyAvKiBGVExSZWNvdmVyeU9w
Y29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExSZWNvdmVyeU9wY29k
ZS5oOyBwYXRoID0gZnRsL0ZUTFJlY292ZXJ5T3Bjb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNDkzQUY4MTZEMENBRDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTb3VyY2VQcm92aWRlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEI5NERCMTdCOUYwNzUwMEREMDNBNCAv
KiBUeXBlZEFycmF5SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBU
eXBlZEFycmF5SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjRDRUQ1
QzE4Q0VBN0FCMDA4MDJGRTAgLyogUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY0Q0VENUQxOENFQTdBQjAwODAyRkUwIC8q
IFBvbHltb3JwaGljR2V0QnlJZExpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjRGMjlERDE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3Rp
bWF0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZH
U3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR1N0
YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY0RjI5REUxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlv
bkNvdW50RXN0aW1hdGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZH
U3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY1MEFGM0IxOTNFOEIzOTAwNjc0RUU4IC8qIERGR1N0cnVjdHVyZUNsb2Ji
ZXJTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTdHJ1Y3R1cmVD
bG9iYmVyU3RhdGUuaDsgcGF0aCA9IGRmZy9ERkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyMjksOCArMjIyMSw2IEBACiAJCTBGNzAyNUE4
MTcxNEIwRjgwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmg7IHBhdGgg
PSBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGNzE0Q0ExMTZFQTkyRUQwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlv
blBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0JhY2t3
YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0
aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjcxNENBMjE2RUE5
MkVEMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmg7IHBh
dGggPSBkZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkwRjc1NzZEMDE4RTFGRUU5MDAyRUY0Q0QgLyogQWNjZXNzb3JDYWxsSklU
U3R1YlJvdXRpbmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWNj
ZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkwRjc1NzZEMTE4RTFGRUU5MDAyRUY0Q0QgLyogQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWNjZXNzb3JDYWxsSklUU3R1YlJv
dXRpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NjZEMUMxNUE1MDI4RDAw
OEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpJVFN0dWJSb3V0aW5lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzY2
RDI2MTVBOENDMUIwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRTdHViUm91dGluZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNzY2RDI5MTVBOENDMzQwMDhGMzYzRSAvKiBKSVRTdHViUm91dGlu
ZVNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRTdHViUm91
dGluZVNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMzAzLDggKzIyOTMs
NiBAQAogCQkwRjlFMzI2MjFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0
aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU3RvcmVCYXJy
aWVySW5zZXJ0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25Q
aGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlGQjRGMjE3RkNCOTE3MDBD
QjY3RjggLyogREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdTdGFja0xheW91dFBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdTdGFj
a0xheW91dFBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RkI0RjMx
N0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHU3RhY2tMYXlvdXRQaGFzZS5oOyBwYXRoID0gZGZnL0RGR1N0
YWNrTGF5b3V0UGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY5RkM4QkYx
NEUxQjVGQjAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGOUZDOEMwMTRFMUI1RkIwMEQ1MkFFMCAvKiBQ
b2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBvbHltb3JwaGljUHV0QnlJZExpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY5RkM4QzExNEUxQjVGQjAwRDUyQUUwIC8qIFB1dEtpbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUHV0S2luZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkEyQzE3OTE3RDdDRjg0MDA5RDAxNUYgLyogVGVzdFJ1bm5lclV0aWxzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRlc3RSdW5uZXJVdGlscy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTJDMTdBMTdEN0NGODQwMDlEMDE1RiAvKiBUZXN0UnVu
bmVyVXRpbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGVzdFJ1bm5lclV0
aWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTc5LDYgKzI1NjcsOCBAQAog
CQkwRkY4QkRFODFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmZlcnJlZFZhbHVlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGOEJERTkxQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVk
VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5mZXJyZWRWYWx1ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkY5MjJDRjE0RjQ2QjEzMDA0MUEyNEUg
LyogSlNDTExJbnRPZmZzZXRzRXh0cmFjdG9yICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGV4cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRl
SW5JbmRleCA9IDA7IHBhdGggPSBKU0NMTEludE9mZnNldHNFeHRyYWN0b3I7IHNvdXJjZVRyZWUg
PSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCTBGRjlDRTcxMUI5Q0Q2RDAwMDRFRENBNiAvKiBQ
b2x5bW9ycGhpY0FjY2Vzcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBQb2x5bW9ycGhpY0FjY2Vzcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RjlDRTcyMUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBQb2x5bW9ycGhpY0FjY2Vzcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkZCNkMzNjFBRjQ4RERDMDBEQjFCRjcgLyogVHlwZW9mVHlwZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlb2ZUeXBlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQjZDMzcxQUY0OEREQzAwREIxQkY3IC8q
IFR5cGVvZlR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZW9mVHlw
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkZDOTlEMDE4NEVDOEFEMDA5QzEw
QUIgLyogQ29uc3RhbnRNb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENv
bnN0YW50TW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDA5NiwxMCArNDA4
Niw2IEBACiAJCTE0MjlEOTJDMEVEMjJENzAwMEI4OTYxOSAvKiBqaXQgKi8gPSB7CiAJCQlpc2Eg
PSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTBGRjA1NEY3MUFDMzVCNDQwMEU1QkU1
NyAvKiBFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouY3BwICovLAotCQkJCTBGRjA1NEY4MUFDMzVC
NDQwMEU1QkU1NyAvKiBFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouaCAqLywKLQkJCQkwRjc1NzZE
MDE4RTFGRUU5MDAyRUY0Q0QgLyogQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuY3BwICovLAot
CQkJCTBGNzU3NkQxMThFMUZFRTkwMDJFRjRDRCAvKiBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGlu
ZS5oICovLAogCQkJCTBGNkIxQ0M3MTg2NDFERjgwMDg0NUQ5NyAvKiBBcml0eUNoZWNrRmFpbFJl
dHVyblRodW5rcy5jcHAgKi8sCiAJCQkJMEY2QjFDQzgxODY0MURGODAwODQ1RDk3IC8qIEFyaXR5
Q2hlY2tGYWlsUmV0dXJuVGh1bmtzLmggKi8sCiAJCQkJMEYyNEU1M0IxN0VBOUY1OTAwQUJCMjE3
IC8qIEFzc2VtYmx5SGVscGVycy5jcHAgKi8sCkBAIC00MTA4LDYgKzQwOTQsOCBAQAogCQkJCTBG
NjRCMjcwMUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guaCAqLywKIAkJCQkwRjI0RTUz
RDE3RUE5RjU5MDBBQkIyMTcgLyogQ0NhbGxIZWxwZXJzLmggKi8sCiAJCQkJMEZEODJFMzcxNDFB
QjE0MjAwMTc5Qzk0IC8qIENvbXBhY3RKSVRDb2RlTWFwLmggKi8sCisJCQkJMEZGMDU0RjcxQUMz
NUI0NDAwRTVCRTU3IC8qIEV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5jcHAgKi8sCisJCQkJMEZG
MDU0RjgxQUMzNUI0NDAwRTVCRTU3IC8qIEV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5oICovLAog
CQkJCUE3QjQ4REI2MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCAq
LywKIAkJCQlBN0I0OERCNTBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5o
ICovLAogCQkJCTg2REI2NDYzMEY5NUM2RkMwMEQ3RDkyMSAvKiBFeGVjdXRhYmxlQWxsb2NhdG9y
Rml4ZWRWTVBvb2wuY3BwICovLApAQCAtNDE1NCw4ICs0MTQyLDYgQEAKIAkJCQkwRkM3MTJFMTE3
Q0Q4NzhGMDA4Q0M5M0MgLyogSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAq
LywKIAkJCQlBNzZGNTRBMjEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVCYXJyaWVyLmggKi8s
CiAJCQkJQTc2QzUxNzQxMTgyNzQ4RDAwNzE1QjA1IC8qIEpTSW50ZXJmYWNlSklULmggKi8sCi0J
CQkJMEZFRTk4NDIxQTg5MjI3NTAwNzU0RTkzIC8qIFNldHVwVmFyYXJnc0ZyYW1lLmNwcCAqLywK
LQkJCQkwRkVFOTg0MDFBODg2NUI2MDA3NTRFOTMgLyogU2V0dXBWYXJhcmdzRnJhbWUuaCAqLywK
IAkJCQkwRkU4MzQxNTFBNkVGOTdCMDBEMDQ4NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRp
bmUuY3BwICovLAogCQkJCTBGRTgzNDE2MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9ycGhpY0Nh
bGxTdHViUm91dGluZS5oICovLAogCQkJCTBGQTdBOEU5MThCNDEzQzgwMDUyMzcxRCAvKiBSZWcu
Y3BwICovLApAQCAtNDE2OSw2ICs0MTU1LDggQEAKIAkJCQkwRjI0RTU0QTE3RUUyNzQ5MDBBQkIy
MTcgLyogUmVwYXRjaC5oICovLAogCQkJCTBGQTdBOEVEMThDRTRGRDgwMDUyMzcxRCAvKiBTY3Jh
dGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwICovLAogCQkJCTBGMjRFNTRCMTdFRTI3NDkwMEFCQjIx
NyAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCAqLywKKwkJCQkwRkVFOTg0MjFBODkyMjc1
MDA3NTRFOTMgLyogU2V0dXBWYXJhcmdzRnJhbWUuY3BwICovLAorCQkJCTBGRUU5ODQwMUE4ODY1
QjYwMDc1NEU5MyAvKiBTZXR1cFZhcmFyZ3NGcmFtZS5oICovLAogCQkJCUE3MDlGMkVGMTdBMEFD
MDQwMDUxMkU5OCAvKiBTbG93UGF0aENhbGwuaCAqLywKIAkJCQlBNzM4NjU1MTExODY5N0I0MDA1
NDAyNzkgLyogU3BlY2lhbGl6ZWRUaHVua0pJVC5oICovLAogCQkJCUE3RkY2NDdBMThDNTJFODUw
MEI1NTMwNyAvKiBTcGlsbFJlZ2lzdGVyc01vZGUuaCAqLywKQEAgLTU2MDIsMTEgKzU1OTAsOCBA
QAogCQkJCTk2OUEwNzk1MEVEMUQzQUUwMEYxRjY4MSAvKiBPcGNvZGUuaCAqLywKIAkJCQkwRjJC
REMyQjE1MUZERThCMDBDRDg5MTAgLyogT3BlcmFuZHMuaCAqLywKIAkJCQlBNzA0NDdFOTE3QTBC
RDQ2MDBGNTg5OEUgLyogT3BlcmFuZHNJbmxpbmVzLmggKi8sCi0JCQkJMEYzNEIxNEIxNkQ0M0Uw
QzAwMUNEQTVBIC8qIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdC5oICovLAotCQkJCTBG
NENFRDVDMThDRUE3QUIwMDgwMkZFMCAvKiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcCAqLywK
LQkJCQkwRjRDRUQ1RDE4Q0VBN0FCMDA4MDJGRTAgLyogUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5o
ICovLAotCQkJCTBGOUZDOEJGMTRFMUI1RkIwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRM
aXN0LmNwcCAqLywKLQkJCQkwRjlGQzhDMDE0RTFCNUZCMDBENTJBRTAgLyogUG9seW1vcnBoaWNQ
dXRCeUlkTGlzdC5oICovLAorCQkJCTBGRjlDRTcxMUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9y
cGhpY0FjY2Vzcy5jcHAgKi8sCisJCQkJMEZGOUNFNzIxQjlDRDZEMDAwNEVEQ0E2IC8qIFBvbHlt
b3JwaGljQWNjZXNzLmggKi8sCiAJCQkJMEY5ODIwNUQxNkJGRTM3RjAwMjQwRDAyIC8qIFByZWNp
c2VKdW1wVGFyZ2V0cy5jcHAgKi8sCiAJCQkJMEY5ODIwNUUxNkJGRTM3RjAwMjQwRDAyIC8qIFBy
ZWNpc2VKdW1wVGFyZ2V0cy5oICovLAogCQkJCTBGRDNFNDA3MUI2MThCNjYwMEM4MEUxRSAvKiBQ
cm9wZXJ0eUNvbmRpdGlvbi5jcHAgKi8sCkBAIC01NjM3LDggKzU2MjIsOCBAQAogCQkJCTBGMkQ0
REU3MTk4MzJEQUMwMDdENEIxOSAvKiBUeXBlTG9jYXRpb24uaCAqLywKIAkJCQlBNzlFNzgxRTE1
RUVDQkE4MDA0N0M4NTUgLyogVW5saW5rZWRDb2RlQmxvY2suY3BwICovLAogCQkJCUE3OUU3ODFG
MTVFRUNCQTgwMDQ3Qzg1NSAvKiBVbmxpbmtlZENvZGVCbG9jay5oICovLAotCQkJCTE0MTQyRTUw
MUI3OTZFQ0UwMEY0QkY0QiAvKiBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oICovLAogCQkJ
CTE0MTQyRTU0MUI3OTczQzAwMEY0QkY0QiAvKiBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5j
cHAgKi8sCisJCQkJMTQxNDJFNTAxQjc5NkVDRTAwRjRCRjRCIC8qIFVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlLmggKi8sCiAJCQkJQjU5Rjg5MzgxODkxQURCNTAwRDVDQ0RDIC8qIFVubGlua2Vk
SW5zdHJ1Y3Rpb25TdHJlYW0uY3BwICovLAogCQkJCUI1OUY4OTM3MTg5MUFEMzMwMEQ1Q0NEQyAv
KiBVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtLmggKi8sCiAJCQkJMEY5NjNCMzYxM0ZDNkZERTAw
MDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5oICovLApAQCAtNjIwMyw3ICs2MTg4LDYgQEAKIAkJCQkw
RkMwOTc3MTE0NjkzQUY1MDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjcwMjVBQTE3MTRCMEZDMDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVy
Q29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVGQzlBQjE2ODFBM0I2MDA1NjdGNTMgLyog
REZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEY0Q0VENUYx
OENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJZExpc3QuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMjM1QkVFMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRpb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkZDOTVDMTRFRjkwQUYwMEM3MjUzMiAvKiBERkdQaGFz
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVFQTcwRUUxOUY1QjVDNDAwOThGNUVDIC8qIEpTQ29u
dGV4dFJlZkluc3BlY3RvclN1cHBvcnQuaCBpbiBIZWFkZXJzICovLApAQCAtNjI1Miw2ICs2MjM2
LDcgQEAKIAkJCQk5OUU0NUEyNDE4QTFCMjU5MDAyNkQ4OEYgLyogRW1wdHlJbnB1dEN1cnNvci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMTQxNDJFNTMxQjc5NkVERDAwRjRCRjRCIC8qIEV4ZWN1dGFi
bGVJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OUU0NUEyNjE4QTFCMjU5MDAyNkQ4OEYgLyog
RW5jb2RlZFZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkY5Q0U3NDFCOUNENkQwMDA0RURD
QTYgLyogUG9seW1vcnBoaWNBY2Nlc3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTg3NEVFMTk0
RkVCMTIwMEFBQjJDMSAvKiBERkdNYXlFeGl0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzMwNDYw
NzBFMUY0OTdGMDAzMjMyQ0YgLyogRXJyb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDJFOTBE
MEUxODM5REIwMDBGOTI5NyAvKiBFcnJvckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAg
LTY0ODUsNyArNjQ3MCw2IEBACiAJCQkJQkMxOEM0MUUwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQ29u
dGV4dFJlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ4Q0QxRDgxMDhDRjkwMjAwODE2M0M2IC8q
IEpTQ29udGV4dFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MjAyOEI4MTc5NzYw
MUUwMDk4MDI4QyAvKiBKU0NUZXN0UnVubmVyVXRpbHMuaCBpbiBIZWFkZXJzICovLAotCQkJCTBG
NzU3NkQzMThFMUZFRTkwMDJFRjRDRCAvKiBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RUMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkVFMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFW
aWV3UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5Nzg4MDE0MTE0NzFBRDkyMDA0MUIw
MTYgLyogSlNEYXRlTWF0aC5oIGluIEhlYWRlcnMgKi8sCkBAIC02Njg1LDggKzY2NjksNiBAQAog
CQkJCTBGQ0NBRTQ1MTZEMENGNzQwMEQwQzY1QiAvKiBQYXJzZXJFcnJvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTc3RjE4MjUxNjQxOTJDNzAwNjQwQTQ3IC8qIFBhcnNlck1vZGVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk2NTMwM0Q2NDE0NDdCOUUxMDBEM0Y5MDQgLyogUGFyc2VyVG9rZW5zLmgg
aW4gSGVhZGVycyAqLywKLQkJCQkwRjM0QjE0QzE2RDQzRTBEMDAxQ0RBNUEgLyogUG9seW1vcnBo
aWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0LmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjlGQzhDNDE0RTFC
NjAwMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY4RjE0MzQxQURGMDkwMTAwRUQ3OTJDIC8qIERGR0Vwb2NoLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjk4MjA2MTE2QkZFMzgzMDAyNDBEMDIgLyogUHJlY2lzZUp1bXBUYXJnZXRzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjJERDgxNTFBQjNEOEJFMDBCQkI4RTggLyogREZHRm9yQWxsS2ls
bHMuaCBpbiBIZWFkZXJzICovLApAQCAtNzg0Nyw3ICs3ODI5LDYgQEAKIAkJCQkwRjBCODM5QzE0
QkNGNDYzMDA4ODVCNEYgLyogTExJbnRUaHVua3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZD
RUZBQ0QxODA1RTc1NTAwNDcyQ0U0IC8qIExMVk1BUEkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTdFNUFCMzcxNzk5RTRCMjAwRDI4MzNEIC8qIExMVk1EaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJMEY0Q0VENUUxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJ
ZExpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlEREUxMDdFQzdFNzAwNjUwNDQ2IC8q
IExvb2t1cC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQ2ODBDQzE0QkJCMTdBMDBCRkUyNzIg
LyogTG93TGV2ZWxJbnRlcnByZXRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEI3MjNCMjEy
RDdEQTQ2MDAzQkQ1RUQgLyogTWFjaGluZVN0YWNrTWFya2VyLmNwcCBpbiBTb3VyY2VzICovLApA
QCAtNzg4OSw3ICs3ODcwLDYgQEAKIAkJCQkwRkUyMjhFRTE0MzZBQjJDMDAxOTZDNDggLyogT3B0
aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDhGMjFCQzEwN0VDNTREMDA0MkVDMkMgLyog
UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMDUyQzM0MEZCNzkyMTkwMDQ4RkRDMyAv
KiBQYXJzZXJBcmVuYS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwRjlGQzhDMzE0RTFCNUZFMDBE
NTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
Rjk4MjA2MDE2QkZFMzgxMDAyNDBEMDIgLyogUHJlY2lzZUp1bXBUYXJnZXRzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTk1NzQyRjY1MEREMTFGNUEwMDA5MTdGQiAvKiBQcm9maWxlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGMkI5Q0Y4MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExPcGVyYXRpb25z
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzkwNiw2ICs3ODg2LDcgQEAKIAkJCQkwRjE5MENBQzE4
OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRkY3MjlCMzE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJPcmlnaW4uY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QjQxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyT3Jp
Z2luU3RhY2suY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZGOUNFNzMxQjlDRDZEMDAwNEVEQ0E2
IC8qIFBvbHltb3JwaGljQWNjZXNzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjEwNThCMTY3
NTQ4MzEwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4aXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZCMTA1OEQxNjc1NDgzNzAwRjhBQjZFIC8qIFByb2ZpbGVyT1NSRXhpdFNpdGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEYxMzkxMkIxNjc3MUMzQTAwOUNDQjA3IC8qIFByb2ZpbGVyUHJvZmls
ZWRCeXRlY29kZXMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MDExLDcgKzc5OTIsNiBAQAogCQkJ
CUE3NkYyNzk0MTVGMTNDOTYwMDUxN0Q2NyAvKiBVbmxpbmtlZENvZGVCbG9jay5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCNTlGODkzOTE4OTFGMjlGMDBENUNDREMgLyogVW5saW5rZWRJbnN0cnVj
dGlvblN0cmVhbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzlEQTRBNjFCN0U4QjdDMDA4NEYz
M0EgLyogSlNNb2R1bGVSZWNvcmQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEY3NTc2RDIxOEUx
RkVFOTAwMkVGNENEIC8qIEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMjRFNTU4MTdGNzRFREIwMEFCQjIxNyAvKiBWYWx1ZVJlY292ZXJ5LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUUxOEUzQTU5MERGOTI3OEMwMEQ5MEIzNCAvKiBWTS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlGRTU5MzJBNzE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3Bl
LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCShyZXZpc2lvbiAxODk1NDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJl
Zi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjcsNiArMzI3LDEwIEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgZHVtcFdpdGhOYW1lKGNvbnN0IGNoYXIqIG5hbWUsIFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
CiAgICAgeworICAgICAgICBpZiAoIW1fdmFsdWUpIHsKKyAgICAgICAgICAgIG91dC5wcmludChu
YW1lLCAiKG51bGwpIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAg
aWYgKGV4ZWN1dGFibGVBZGRyZXNzKCkgPT0gZGF0YUxvY2F0aW9uKCkpIHsKICAgICAgICAgICAg
IG91dC5wcmludChuYW1lLCAiKCIsIFJhd1BvaW50ZXIoZXhlY3V0YWJsZUFkZHJlc3MoKSksICIp
Iik7CiAgICAgICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTg5NTQzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDgg
KzUzLDcgQEAKICNpbmNsdWRlICJMTEludEVudHJ5cG9pbnQuaCIKICNpbmNsdWRlICJMb3dMZXZl
bEludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIlBvbHlt
b3JwaGljR2V0QnlJZExpc3QuaCIKLSNpbmNsdWRlICJQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Lmgi
CisjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKICNpbmNsdWRlICJQcm9maWxlckRhdGFi
YXNlLmgiCiAjaW5jbHVkZSAiUmVkdWNlV2hpdGVzcGFjZS5oIgogI2luY2x1ZGUgIlJlcGF0Y2gu
aCIKQEAgLTM0MywyMCArMzQyLDE5IEBAIHZvaWQgQ29kZUJsb2NrOjpwcmludEdldEJ5SWRDYWNo
ZVN0YXR1cygKICAgICAgICAgaWYgKHN0dWJJbmZvLnNlZW4pIHsKICAgICAgICAgICAgIG91dC5w
cmludGYoIiBqaXQoIik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIFN0cnVjdHVyZSogYmFz
ZVN0cnVjdHVyZSA9IDA7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVy
ZSA9IDA7Ci0gICAgICAgICAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0ID0gMDsKKyAg
ICAgICAgICAgIFN0cnVjdHVyZSogYmFzZVN0cnVjdHVyZSA9IG51bGxwdHI7CisgICAgICAgICAg
ICBQb2x5bW9ycGhpY0FjY2Vzcyogc3R1YiA9IG51bGxwdHI7CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIHN3aXRjaCAoc3R1YkluZm8uYWNjZXNzVHlwZSkgewotICAgICAgICAgICAgY2FzZSBh
Y2Nlc3NfZ2V0X2J5X2lkX3NlbGY6CisgICAgICAgICAgICBzd2l0Y2ggKHN0dWJJbmZvLmNhY2hl
VHlwZSkgeworICAgICAgICAgICAgY2FzZSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxmOgogICAgICAg
ICAgICAgICAgIG91dC5wcmludGYoInNlbGYiKTsKLSAgICAgICAgICAgICAgICBiYXNlU3RydWN0
dXJlID0gc3R1YkluZm8udS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpOwor
ICAgICAgICAgICAgICAgIGJhc2VTdHJ1Y3R1cmUgPSBzdHViSW5mby51LmJ5SWRTZWxmLmJhc2VP
YmplY3RTdHJ1Y3R1cmUuZ2V0KCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfbGlzdDoKLSAgICAgICAgICAgICAgICBvdXQucHJpbnRm
KCJsaXN0Iik7Ci0gICAgICAgICAgICAgICAgbGlzdCA9IHN0dWJJbmZvLnUuZ2V0QnlJZExpc3Qu
bGlzdDsKKyAgICAgICAgICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOgorICAgICAgICAgICAgICAg
IG91dC5wcmludGYoInN0dWIiKTsKKyAgICAgICAgICAgICAgICBzdHViID0gc3R1YkluZm8udS5z
dHViOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBhY2Nlc3NfdW5z
ZXQ6CisgICAgICAgICAgICBjYXNlIENhY2hlVHlwZTo6VW5zZXQ6CiAgICAgICAgICAgICAgICAg
b3V0LnByaW50ZigidW5zZXQiKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IGRlZmF1bHQ6CkBAIC0zNjgsMjcgKzM2NiwxMCBAQCB2b2lkIENvZGVCbG9jazo6cHJpbnRHZXRC
eUlkQ2FjaGVTdGF0dXMoCiAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiLCAiKTsKICAgICAg
ICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgInN0cnVjdCIsIGJhc2VTdHJ1Y3R1cmUsIGlk
ZW50KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHByb3Rv
dHlwZVN0cnVjdHVyZSkgewotICAgICAgICAgICAgICAgIG91dC5wcmludGYoIiwgIik7Ci0gICAg
ICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJwcm90b3R5cGVTdHJ1Y3QiLCBiYXNlU3Ry
dWN0dXJlLCBpZGVudCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IGlmIChsaXN0KSB7Ci0gICAgICAgICAgICAgICAgb3V0LnByaW50ZigiLCBsaXN0ID0gJXA6IFsi
LCBsaXN0KTsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBvdXQucHJpbnRmKCIsICIpOwotICAgICAgICAgICAgICAgICAgICBvdXQucHJp
bnRmKCIoIik7Ci0gICAgICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAiYmFzZSIs
IGxpc3QtPmF0KGkpLnN0cnVjdHVyZSgpLCBpZGVudCk7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICghbGlzdC0+YXQoaSkuY29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBvdXQucHJpbnRmKCIsICIpOwotICAgICAgICAgICAgICAgICAgICAgICAgb3V0
LnByaW50KGxpc3QtPmF0KGkpLmNvbmRpdGlvblNldCgpKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIpIik7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIG91dC5wcmludGYoIl0iKTsKLSAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKHN0dWIpCisgICAgICAgICAgICAgICAgb3V0LnByaW50KCIsICIsICpzdHVi
KTsKKwogICAgICAgICAgICAgb3V0LnByaW50ZigiKSIpOwogICAgICAgICB9CiAgICAgfQpAQCAt
NDQ0LDUzICs0MjUsMTYgQEAgdm9pZCBDb2RlQmxvY2s6OnByaW50UHV0QnlJZENhY2hlU3RhdHVz
KAogICAgICAgICBpZiAoc3R1YkluZm8uc2VlbikgewogICAgICAgICAgICAgb3V0LnByaW50Zigi
IGppdCgiKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgc3dpdGNoIChzdHViSW5mby5hY2Nl
c3NUeXBlKSB7Ci0gICAgICAgICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFjZToKKyAg
ICAgICAgICAgIHN3aXRjaCAoc3R1YkluZm8uY2FjaGVUeXBlKSB7CisgICAgICAgICAgICBjYXNl
IENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2U6CiAgICAgICAgICAgICAgICAgb3V0LnByaW50KCJy
ZXBsYWNlLCAiKTsKLSAgICAgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgInN0cnVjdCIs
IHN0dWJJbmZvLnUucHV0QnlJZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgaWRl
bnQpOworICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAic3RydWN0Iiwgc3R1Yklu
Zm8udS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBpZGVudCk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNp
dGlvbl9ub3JtYWw6Ci0gICAgICAgICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlv
bl9kaXJlY3Q6Ci0gICAgICAgICAgICAgICAgb3V0LnByaW50KCJ0cmFuc2l0aW9uLCAiKTsKLSAg
ICAgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgInByZXYiLCBzdHViSW5mby51LnB1dEJ5
SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgpLCBpZGVudCk7Ci0gICAgICAgICAg
ICAgICAgb3V0LnByaW50KCIsICIpOwotICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0
LCAibmV4dCIsIHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLmdldCgpLCBp
ZGVudCk7Ci0gICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24u
cmF3Q29uZGl0aW9uU2V0KQotICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIiwgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmZyb21SYXdQb2ludGVyKHN0dWJJbmZvLnUucHV0QnlJ
ZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfbGlzdDogewotICAgICAgICAgICAgICAg
IG91dC5wcmludGYoImxpc3QgPSBbIik7Ci0gICAgICAgICAgICAgICAgUG9seW1vcnBoaWNQdXRC
eUlkTGlzdCogbGlzdCA9IHN0dWJJbmZvLnUucHV0QnlJZExpc3QubGlzdDsKLSAgICAgICAgICAg
ICAgICBDb21tYVByaW50ZXIgY29tbWE7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG91dC5w
cmludChjb21tYSwgIigiKTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgUHV0QnlJZEFjY2Vz
cyYgYWNjZXNzID0gbGlzdC0+YXQoaSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICBpZiAoYWNjZXNzLmlzUmVwbGFjZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBvdXQucHJpbnQoInJlcGxhY2UsICIpOwotICAgICAgICAgICAgICAgICAgICAgICAgZHVt
cFN0cnVjdHVyZShvdXQsICJzdHJ1Y3QiLCBhY2Nlc3Mub2xkU3RydWN0dXJlKCksIGlkZW50KTsK
LSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhY2Nlc3MuaXNTZXR0ZXIoKSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCJzZXR0ZXIsICIpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJzdHJ1Y3QiLCBhY2Nlc3Mub2xkU3RydWN0
dXJlKCksIGlkZW50KTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhY2Nlc3MuaXND
dXN0b20oKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCJjdXN0b20sICIp
OwotICAgICAgICAgICAgICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJzdHJ1Y3QiLCBh
Y2Nlc3Mub2xkU3RydWN0dXJlKCksIGlkZW50KTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IGlmIChhY2Nlc3MuaXNUcmFuc2l0aW9uKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG91
dC5wcmludCgidHJhbnNpdGlvbiwgIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkdW1wU3Ry
dWN0dXJlKG91dCwgInByZXYiLCBhY2Nlc3Mub2xkU3RydWN0dXJlKCksIGlkZW50KTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCAiKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAibmV4dCIsIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgaWRl
bnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhY2Nlc3MuY29uZGl0aW9uU2V0KCku
aXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCAiLCBh
Y2Nlc3MuY29uZGl0aW9uU2V0KCkpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgidW5rbm93biIpOwotICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCIpIik7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIG91dC5wcmludCgiXSIpOworICAgICAgICAgICAgY2FzZSBD
YWNoZVR5cGU6OlN0dWI6IHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoInN0dWIsICIsICpz
dHViSW5mby51LnN0dWIpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgY2FzZSBhY2Nlc3NfdW5zZXQ6CisgICAgICAgICAgICBjYXNlIENhY2hlVHlw
ZTo6VW5zZXQ6CiAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigidW5zZXQiKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0yNDYxLDM5ICsyNDA1LDIy
IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG8KICAgICBpZiAoSklU
Q29kZTo6aXNKSVQoaml0VHlwZSgpKSkgewogICAgICAgICBmb3IgKEJhZzxTdHJ1Y3R1cmVTdHVi
SW5mbz46Oml0ZXJhdG9yIGl0ZXIgPSBtX3N0dWJJbmZvcy5iZWdpbigpOyAhIWl0ZXI7ICsraXRl
cikgewogICAgICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gKippdGVyOwot
ICAgICAgICAgICAgc3dpdGNoIChzdHViSW5mby5hY2Nlc3NUeXBlKSB7Ci0gICAgICAgICAgICBj
YXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWw6Ci0gICAgICAgICAgICBjYXNl
IGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6IHsKLSAgICAgICAgICAgICAgICBK
U0NlbGwqIG9yaWdpbiA9IHN0dWJJbmZvLmNvZGVPcmlnaW4uY29kZU9yaWdpbk93bmVyKCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKCghb3JpZ2luIHx8IEhlYXA6OmlzTWFya2VkKG9yaWdpbikpCi0g
ICAgICAgICAgICAgICAgICAgICYmIEhlYXA6OmlzTWFya2VkKHN0dWJJbmZvLnUucHV0QnlJZFRy
YW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUuZ2V0KCkpKQotICAgICAgICAgICAgICAgICAgICB2
aXNpdG9yLmFwcGVuZCgmc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUpOwot
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYWxsQXJlTWFya2VkU29G
YXIgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChzdHVi
SW5mby5jYWNoZVR5cGUgIT0gQ2FjaGVUeXBlOjpTdHViKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3MqIGxpc3QgPSBzdHViSW5mby51LnN0
dWI7CisgICAgICAgICAgICBKU0NlbGwqIG9yaWdpbiA9IHN0dWJJbmZvLmNvZGVPcmlnaW4uY29k
ZU9yaWdpbk93bmVyKCk7CisgICAgICAgICAgICBpZiAob3JpZ2luICYmICFIZWFwOjppc01hcmtl
ZChvcmlnaW4pKSB7CisgICAgICAgICAgICAgICAgYWxsQXJlTWFya2VkU29GYXIgPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
Y2FzZSBhY2Nlc3NfcHV0X2J5X2lkX2xpc3Q6IHsKLSAgICAgICAgICAgICAgICBQb2x5bW9ycGhp
Y1B1dEJ5SWRMaXN0KiBsaXN0ID0gc3R1YkluZm8udS5wdXRCeUlkTGlzdC5saXN0OwotICAgICAg
ICAgICAgICAgIEpTQ2VsbCogb3JpZ2luID0gc3R1YkluZm8uY29kZU9yaWdpbi5jb2RlT3JpZ2lu
T3duZXIoKTsKLSAgICAgICAgICAgICAgICBpZiAob3JpZ2luICYmICFIZWFwOjppc01hcmtlZChv
cmlnaW4pKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBsaXN0LT5zaXplKCk7IGot
LTspIHsKKyAgICAgICAgICAgICAgICBjb25zdCBBY2Nlc3NDYXNlJiBhY2Nlc3MgPSBsaXN0LT5h
dChqKTsKKyAgICAgICAgICAgICAgICBpZiAoYWNjZXNzLnR5cGUoKSAhPSBBY2Nlc3NDYXNlOjpU
cmFuc2l0aW9uKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICBpZiAoSGVhcDo6aXNNYXJrZWQoYWNjZXNzLnN0cnVjdHVyZSgpKSkKKyAgICAgICAgICAgICAg
ICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRlcihhY2Nlc3MubmV3
U3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAg
YWxsQXJlTWFya2VkU29GYXIgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGxpc3Qt
PnNpemUoKTsgai0tOykgewotICAgICAgICAgICAgICAgICAgICBQdXRCeUlkQWNjZXNzJiBhY2Nl
c3MgPSBsaXN0LT5tX2xpc3Rbal07Ci0gICAgICAgICAgICAgICAgICAgIGlmICghYWNjZXNzLmlz
VHJhbnNpdGlvbigpKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChIZWFwOjppc01hcmtlZChhY2Nlc3Mub2xkU3RydWN0dXJlKCkpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJmFjY2Vzcy5tX25ld1N0cnVj
dHVyZSk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAg
IGFsbEFyZU1hcmtlZFNvRmFyID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfQpAQCAtMjc4NSwxMCArMjcxMiwxMCBAQCB2b2lkIENvZGVCbG9jazo6Z2V0QnlWYWxJ
bmZvTWFwKEJ5VmFsSW5mCiB9CiAKICNpZiBFTkFCTEUoSklUKQotU3RydWN0dXJlU3R1YkluZm8q
IENvZGVCbG9jazo6YWRkU3R1YkluZm8oKQorU3RydWN0dXJlU3R1YkluZm8qIENvZGVCbG9jazo6
YWRkU3R1YkluZm8oQWNjZXNzVHlwZSBhY2Nlc3NUeXBlKQogewogICAgIENvbmN1cnJlbnRKSVRM
b2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgcmV0dXJuIG1fc3R1YkluZm9zLmFkZCgpOworICAg
IHJldHVybiBtX3N0dWJJbmZvcy5hZGQoYWNjZXNzVHlwZSk7CiB9CiAKIFN0cnVjdHVyZVN0dWJJ
bmZvKiBDb2RlQmxvY2s6OmZpbmRTdHViSW5mbyhDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAx
ODk1NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIwOCw3ICsyMDgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBnZXRCeVZh
bEluZm9NYXAoQnlWYWxJbmZvTWFwJiByZXN1bHQpOwogICAgIAogI2lmIEVOQUJMRShKSVQpCi0g
ICAgU3RydWN0dXJlU3R1YkluZm8qIGFkZFN0dWJJbmZvKCk7CisgICAgU3RydWN0dXJlU3R1Yklu
Zm8qIGFkZFN0dWJJbmZvKEFjY2Vzc1R5cGUpOwogICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz46
Oml0ZXJhdG9yIHN0dWJJbmZvQmVnaW4oKSB7IHJldHVybiBtX3N0dWJJbmZvcy5iZWdpbigpOyB9
CiAgICAgQmFnPFN0cnVjdHVyZVN0dWJJbmZvPjo6aXRlcmF0b3Igc3R1YkluZm9FbmQoKSB7IHJl
dHVybiBtX3N0dWJJbmZvcy5lbmQoKTsgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMTg5NTQzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiwxNCArMjYsMTMgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJHZXRCeUlkU3RhdHVzLmgiCiAKLSNpbmNsdWRlICJBY2Nlc3NvckNhbGxKSVRTdHViUm91
dGluZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvbXBsZXhHZXRTdGF0
dXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNTY29wZS5oIgogI2lu
Y2x1ZGUgIkxMSW50RGF0YS5oIgogI2luY2x1ZGUgIkxvd0xldmVsSW50ZXJwcmV0ZXIuaCIKLSNp
bmNsdWRlICJQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNB
Y2Nlc3MuaCIKICNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBA
IC0xMzksMTIgKzEzOCwxMiBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVG
b3JTCiAgICAgaWYgKCFzdHViSW5mby0+c2VlbikKICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0
dXMoTm9JbmZvcm1hdGlvbik7CiAgICAgCi0gICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogbGlz
dCA9IDA7CisgICAgUG9seW1vcnBoaWNBY2Nlc3MqIGxpc3QgPSAwOwogICAgIFN0YXRlIHNsb3dQ
YXRoU3RhdGUgPSBUYWtlc1Nsb3dQYXRoOwotICAgIGlmIChzdHViSW5mby0+YWNjZXNzVHlwZSA9
PSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3QpIHsKLSAgICAgICAgbGlzdCA9IHN0dWJJbmZvLT51Lmdl
dEJ5SWRMaXN0Lmxpc3Q7CisgICAgaWYgKHN0dWJJbmZvLT5jYWNoZVR5cGUgPT0gQ2FjaGVUeXBl
OjpTdHViKSB7CisgICAgICAgIGxpc3QgPSBzdHViSW5mby0+dS5zdHViOwogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGNv
bnN0IEdldEJ5SWRBY2Nlc3MmIGFjY2VzcyA9IGxpc3QtPmF0KGkpOworICAgICAgICAgICAgY29u
c3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0gbGlzdC0+YXQoaSk7CiAgICAgICAgICAgICBpZiAoYWNj
ZXNzLmRvZXNDYWxscygpKQogICAgICAgICAgICAgICAgIHNsb3dQYXRoU3RhdGUgPSBNYWtlc0Nh
bGxzOwogICAgICAgICB9CkBAIC0xNTcsMTIgKzE1NiwxMiBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5
SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgR2V0QnlJZFN0YXR1cyByZXN1bHQ7CiAgICAgcmVz
dWx0Lm1fc3RhdGUgPSBTaW1wbGU7CiAgICAgcmVzdWx0Lm1fd2FzU2VlbkluSklUID0gdHJ1ZTsg
Ly8gVGhpcyBpcyBpbnRlcmVzdGluZyBmb3IgYnl0ZWNvZGUgZHVtcGluZyBvbmx5LgotICAgIHN3
aXRjaCAoc3R1YkluZm8tPmFjY2Vzc1R5cGUpIHsKLSAgICBjYXNlIGFjY2Vzc191bnNldDoKKyAg
ICBzd2l0Y2ggKHN0dWJJbmZvLT5jYWNoZVR5cGUpIHsKKyAgICBjYXNlIENhY2hlVHlwZTo6VW5z
ZXQ6CiAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwogICAgICAg
ICAKLSAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZjogewotICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IHN0dWJJbmZvLT51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUu
Z2V0KCk7CisgICAgY2FzZSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxmOiB7CisgICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gc3R1YkluZm8tPnUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVy
ZS5nZXQoKTsKICAgICAgICAgaWYgKHN0cnVjdHVyZS0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1w
dXJlUHJvcGVydHkoKSkKICAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKHNsb3dQYXRo
U3RhdGUsIHRydWUpOwogICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzSWdub3JlZDsKQEAgLTE3
NywxMiArMTc2LDI1IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMK
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgICAgIAotICAgIGNhc2UgYWNjZXNz
X2dldF9ieV9pZF9saXN0OiB7CisgICAgY2FzZSBDYWNoZVR5cGU6OlN0dWI6IHsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBsaXN0SW5kZXggPSAwOyBsaXN0SW5kZXggPCBsaXN0LT5zaXplKCk7ICsr
bGlzdEluZGV4KSB7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGxpc3QtPmF0
KGxpc3RJbmRleCkuc3RydWN0dXJlKCk7CisgICAgICAgICAgICBjb25zdCBBY2Nlc3NDYXNlJiBh
Y2Nlc3MgPSBsaXN0LT5hdChsaXN0SW5kZXgpOworICAgICAgICAgICAgaWYgKGFjY2Vzcy52aWFQ
cm94eSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKHNsb3dQYXRoU3Rh
dGUsIHRydWUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IGFjY2Vzcy5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgIGlmICghc3RydWN0dXJlKSB7Cisg
ICAgICAgICAgICAgICAgLy8gVGhlIG51bGwgc3RydWN0dXJlIGNhc2VzIGFyaXNlIGR1ZSB0byBh
cnJheS5sZW5ndGggYW5kIHN0cmluZy5sZW5ndGguIFdlIGhhdmUgbm8gd2F5CisgICAgICAgICAg
ICAgICAgLy8gb2YgY3JlYXRpbmcgYSBHZXRCeUlkVmFyaWFudCBmb3IgdGhvc2UsIGFuZCB3ZSBk
b24ndCByZWFsbHkgaGF2ZSB0byBzaW5jZSB0aGUgREZHCisgICAgICAgICAgICAgICAgLy8gaGFu
ZGxlcyB0aG9zZSBjYXNlcyBpbiBGaXh1cFBoYXNlIHVzaW5nIHZhbHVlIHByb2ZpbGluZy4gVGhh
dCdzIGEgYml0IGF3a3dhcmQgLSB3ZQorICAgICAgICAgICAgICAgIC8vIHNob3VsZG4ndCBoYXZl
IHRvIHVzZSB2YWx1ZSBwcm9maWxpbmcgdG8gZGlzY292ZXIgc29tZXRoaW5nIHRoYXQgdGhlIEFj
Y2Vzc0Nhc2UKKyAgICAgICAgICAgICAgICAvLyBjb3VsZCBoYXZlIHRvbGQgdXMuIEJ1dCwgaXQg
d29ya3Mgd2VsbCBlbm91Z2guIFNvLCBvdXIgb25seSBjb25jZXJuIGhlcmUgaXMgdG8gbm90Cisg
ICAgICAgICAgICAgICAgLy8gY3Jhc2ggb24gbnVsbCBzdHJ1Y3R1cmUuCisgICAgICAgICAgICAg
ICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSwgdHJ1ZSk7CisgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIENvbXBsZXhHZXRTdGF0dXMgY29tcGxleEdl
dFN0YXR1cyA9IENvbXBsZXhHZXRTdGF0dXM6OmNvbXB1dGVGb3IoCi0gICAgICAgICAgICAgICAg
c3RydWN0dXJlLCBsaXN0LT5hdChsaXN0SW5kZXgpLmNvbmRpdGlvblNldCgpLCB1aWQpOworICAg
ICAgICAgICAgICAgIHN0cnVjdHVyZSwgYWNjZXNzLmNvbmRpdGlvblNldCgpLCB1aWQpOwogICAg
ICAgICAgICAgIAogICAgICAgICAgICAgc3dpdGNoIChjb21wbGV4R2V0U3RhdHVzLmtpbmQoKSkg
ewogICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpTaG91bGRTa2lwOgpAQCAtMTkz
LDI5ICsyMDUsMjMgQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwog
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6SW5s
aW5lYWJsZTogewogICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1
cz4gY2FsbExpbmtTdGF0dXM7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChsaXN0LT5hdChsaXN0
SW5kZXgpLnR5cGUoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlJZEFjY2Vzczo6U2lt
cGxlSW5saW5lOgotICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlJZEFjY2Vzczo6U2ltcGxlU3R1
YjogeworICAgICAgICAgICAgICAgIHN3aXRjaCAoYWNjZXNzLnR5cGUoKSkgeworICAgICAgICAg
ICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6TG9hZDogewogICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2FzZSBHZXRCeUlkQWNjZXNz
OjpHZXR0ZXI6IHsKLSAgICAgICAgICAgICAgICAgICAgQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRp
bmUqIHN0dWIgPSBzdGF0aWNfY2FzdDxBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZSo+KAotICAg
ICAgICAgICAgICAgICAgICAgICAgbGlzdC0+YXQobGlzdEluZGV4KS5zdHViUm91dGluZSgpKTsK
KyAgICAgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OkdldHRlcjogeworICAgICAgICAgICAg
ICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGFjY2Vzcy5jYWxsTGlua0luZm8o
KTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGNhbGxMaW5rSW5mbyk7CiAgICAgICAgICAg
ICAgICAgICAgIGNhbGxMaW5rU3RhdHVzID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxsTGlua1N0YXR1
cz4oCiAgICAgICAgICAgICAgICAgICAgICAgICBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcigK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ssICpzdHVi
LT5tX2NhbGxMaW5rSW5mbywgY2FsbEV4aXRTaXRlRGF0YSkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxvY2tlciwgcHJvZmlsZWRCbG9jaywgKmNhbGxMaW5rSW5mbywgY2FsbEV4aXRT
aXRlRGF0YSkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgY2FzZSBHZXRCeUlkQWNjZXNzOjpTaW1wbGVNaXNzOgotICAgICAg
ICAgICAgICAgIGNhc2UgR2V0QnlJZEFjY2Vzczo6Q3VzdG9tR2V0dGVyOgotICAgICAgICAgICAg
ICAgIGNhc2UgR2V0QnlJZEFjY2Vzczo6V2F0Y2hlZFN0dWI6ewotICAgICAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogSXQgd291bGQgYmUgdG90YWxseSBzd2VldCB0byBzdXBwb3J0IHRoaXMgYXQg
c29tZSBwb2ludCBpbiB0aGUgZnV0dXJlLgotICAgICAgICAgICAgICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMDUyCisgICAgICAgICAgICAgICAg
ZGVmYXVsdDogeworICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgdG90
YWxseSBzd2VldCB0byBzdXBwb3J0IG1vcmUgb2YgdGhlc2UgYXQgc29tZSBwb2ludCBpbiB0aGUK
KyAgICAgICAgICAgICAgICAgICAgLy8gZnV0dXJlLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTMzMDUyCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeUlk
U3RhdHVzKHNsb3dQYXRoU3RhdGUsIHRydWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IH0KICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgR2V0QnlJZFZhcmlhbnQgdmFyaWFudCgKICAg
ICAgICAgICAgICAgICAgICAgU3RydWN0dXJlU2V0KHN0cnVjdHVyZSksIGNvbXBsZXhHZXRTdGF0
dXMub2Zmc2V0KCksCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJldmlzaW9uIDE4OTMyNCkJKGZyb20gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwOjE4OTMy
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlBvbHltb3JwaGljR2V0QnlJZExpc3QuaCIKKworI2lmIEVOQUJMRShKSVQpCisKKyNp
bmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCitHZXRCeUlkQWNjZXNzOjpHZXRCeUlkQWNjZXNzKAorICAgIFZNJiB2bSwgSlNDZWxsKiBv
d25lciwgQWNjZXNzVHlwZSB0eXBlLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91
dGluZSwKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQmIGNvbmRpdGlvblNldCkKKyAgICA6IG1fdHlwZSh0eXBlKQorICAgICwgbV9zdHJ1
Y3R1cmUodm0sIG93bmVyLCBzdHJ1Y3R1cmUpCisgICAgLCBtX2NvbmRpdGlvblNldChjb25kaXRp
b25TZXQpCisgICAgLCBtX3N0dWJSb3V0aW5lKHN0dWJSb3V0aW5lKQoreworfQorCitHZXRCeUlk
QWNjZXNzOjp+R2V0QnlJZEFjY2VzcygpCit7Cit9CisKK0dldEJ5SWRBY2Nlc3MgR2V0QnlJZEFj
Y2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykK
K3sKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgaW5pdGlhbFNsb3dQYXRoID0KKyAgICAgICAg
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGVsdGFDYWxsVG9TbG93Q2FzZSk7CisgICAgCisgICAgR2V0QnlJZEFjY2VzcyByZXN1bHQ7Cisg
ICAgCisgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0
X2J5X2lkX3NlbGYpOworICAgIAorICAgIHJlc3VsdC5tX3R5cGUgPSBTaW1wbGVJbmxpbmU7Cisg
ICAgcmVzdWx0Lm1fc3RydWN0dXJlLmNvcHlGcm9tKHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFz
ZU9iamVjdFN0cnVjdHVyZSk7CisgICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBKSVRTdHViUm91
dGluZTo6Y3JlYXRlU2VsZk1hbmFnZWRSb3V0aW5lKGluaXRpYWxTbG93UGF0aCk7CisgICAgCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBHZXRCeUlkQWNjZXNzOjp2aXNpdFdlYWsoVk0m
IHZtKSBjb25zdAoreworICAgIGlmIChtX3N0cnVjdHVyZSAmJiAhSGVhcDo6aXNNYXJrZWQobV9z
dHJ1Y3R1cmUuZ2V0KCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFtX2NvbmRp
dGlvblNldC5hcmVTdGlsbExpdmUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICgh
bV9zdHViUm91dGluZS0+dmlzaXRXZWFrKHZtKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHJldHVybiB0cnVlOworfQorCitQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpQb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0KFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBpZiAoc3R1Yklu
Zm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBtX2xpc3QuYXBwZW5kKEdldEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1cmVTdHViSW5mbyhzdHVi
SW5mbykpOworfQorCitQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBQb2x5bW9ycGhpY0dldEJ5SWRM
aXN0Ojpmcm9tKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBpZiAoc3R1Yklu
Zm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3QpCisgICAgICAgIHJldHVybiBz
dHViSW5mby51LmdldEJ5SWRMaXN0Lmxpc3Q7CisgICAgCisgICAgQVNTRVJUKAorICAgICAgICBz
dHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZgorICAgICAgICB8fCBz
dHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc191bnNldCk7CisgICAgCisgICAgUG9seW1vcnBo
aWNHZXRCeUlkTGlzdCogcmVzdWx0ID0gbmV3IFBvbHltb3JwaGljR2V0QnlJZExpc3Qoc3R1Yklu
Zm8pOworICAgIAorICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkTGlzdChyZXN1bHQpOworICAgIAor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1BvbHltb3JwaGljR2V0QnlJZExpc3Q6On5Qb2x5bW9y
cGhpY0dldEJ5SWRMaXN0KCkgeyB9CisKK01hY3JvQXNzZW1ibGVyQ29kZVB0ciBQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0OjpjdXJyZW50U2xvd1BhdGhUYXJnZXQoCisgICAgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvKSBjb25zdAoreworICAgIGlmIChpc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRj
aC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKKyAgICByZXR1cm4gbV9saXN0Lmxhc3QoKS5zdHViUm91
dGluZSgpLT5jb2RlKCkuY29kZSgpOworfQorCit2b2lkIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6
OmFkZEFjY2Vzcyhjb25zdCBHZXRCeUlkQWNjZXNzJiBhY2Nlc3MpCit7CisgICAgQVNTRVJUKCFp
c0Z1bGwoKSk7CisgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHJlc2l6aW5nIG9wdGltaXplcyBm
b3Igc3BhY2UsIG5vdCB0aW1lLgorICAgIG1fbGlzdC5yZXNpemVUb0ZpdChtX2xpc3Quc2l6ZSgp
ICsgMSk7CisgICAgbV9saXN0Lmxhc3QoKSA9IGFjY2VzczsKK30KKworYm9vbCBQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0Ojppc0Z1bGwoKSBjb25zdAoreworICAgIEFTU0VSVChzaXplKCkgPD0gUE9M
WU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKTsKKyAgICByZXR1cm4gc2l6ZSgpID09IFBPTFlNT1JQ
SElDX0xJU1RfQ0FDSEVfU0laRTsKK30KKworYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojpp
c0FsbW9zdEZ1bGwoKSBjb25zdAoreworICAgIEFTU0VSVChzaXplKCkgPD0gUE9MWU1PUlBISUNf
TElTVF9DQUNIRV9TSVpFKTsKKyAgICByZXR1cm4gc2l6ZSgpID49IFBPTFlNT1JQSElDX0xJU1Rf
Q0FDSEVfU0laRSAtIDE7Cit9CisKK2Jvb2wgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6ZGlkU2Vs
ZlBhdGNoaW5nKCkgY29uc3QKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXplKCk7IGktLTsp
IHsKKyAgICAgICAgaWYgKGF0KGkpLnR5cGUoKSA9PSBHZXRCeUlkQWNjZXNzOjpTaW1wbGVJbmxp
bmUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0
Cit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGlmICgh
YXQoaSkudmlzaXRXZWFrKHZtKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5B
QkxFKEpJVCkKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI0LDEzMSArMjQsMTE1NiBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nl
c3MuaCIKIAogI2lmIEVOQUJMRShKSVQpCiAKKyNpbmNsdWRlICJCaW5hcnlTd2l0Y2guaCIKKyNp
bmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRl
ICJHZXR0ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgi
CisjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiU3RydWN0
dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZv
LmgiCisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVt
cC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotR2V0QnlJZEFjY2Vzczo6R2V0QnlJZEFjY2VzcygK
LSAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgUGFzc1JlZlB0cjxK
SVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUsCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNv
bnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCi0gICAgOiBtX3R5
cGUodHlwZSkKLSAgICAsIG1fc3RydWN0dXJlKHZtLCBvd25lciwgc3RydWN0dXJlKQotICAgICwg
bV9jb25kaXRpb25TZXQoY29uZGl0aW9uU2V0KQotICAgICwgbV9zdHViUm91dGluZShzdHViUm91
dGluZSkKK3N0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKKworc3RydWN0IEFjY2Vz
c0dlbmVyYXRpb25TdGF0ZSB7CisgICAgQ0NhbGxIZWxwZXJzKiBqaXQgeyBudWxscHRyIH07Cisg
ICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yKiBhbGxvY2F0b3I7CisgICAgc2l6ZV90IG51bWJl
ck9mUGFkZGluZ0J5dGVzIHsgMCB9OworICAgIFBvbHltb3JwaGljQWNjZXNzKiBhY2Nlc3MgeyBu
dWxscHRyIH07CisgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvIHsgbnVsbHB0ciB9Owor
ICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc3VjY2VzczsKKyAgICBDQ2FsbEhlbHBlcnM6Okp1
bXBMaXN0IGZhaWxBbmRSZXBhdGNoOworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZmFpbEFu
ZElnbm9yZTsKKyAgICBHUFJSZWcgYmFzZUdQUiB7IEludmFsaWRHUFJSZWcgfTsKKyAgICBKU1Zh
bHVlUmVncyB2YWx1ZVJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgeyBJbnZhbGlkR1BSUmVn
IH07CisgICAgVmVjdG9yPHN0ZDo6ZnVuY3Rpb248dm9pZChMaW5rQnVmZmVyJik+PiBjYWxsYmFj
a3M7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdh
dGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbz4gd2F0Y2hwb2ludHM7CisKKyAgICBXYXRjaHBv
aW50KiBhZGRXYXRjaHBvaW50KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRp
b24gPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdh
dGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6ZW5zdXJlUmVmZXJlbmNlQW5kQWRkV2F0Y2hw
b2ludCgKKyAgICAgICAgICAgIHdhdGNocG9pbnRzLCBqaXQtPmNvZGVCbG9jaygpLCBzdHViSW5m
bywgY29uZGl0aW9uKTsKKyAgICB9CisKKyAgICB2b2lkIHJlc3RvcmVTY3JhdGNoKCkKKyAgICB7
CisgICAgICAgIGFsbG9jYXRvci0+cmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZygqaml0
LCBudW1iZXJPZlBhZGRpbmdCeXRlcyk7CisgICAgfQorCisgICAgdm9pZCBzdWNjZWVkKCkKKyAg
ICB7CisgICAgICAgIHJlc3RvcmVTY3JhdGNoKCk7CisgICAgICAgIHN1Y2Nlc3MuYXBwZW5kKGpp
dC0+anVtcCgpKTsKKyAgICB9Cit9OworCitBY2Nlc3NDYXNlOjpBY2Nlc3NDYXNlKCkKIHsKIH0K
IAotR2V0QnlJZEFjY2Vzczo6fkdldEJ5SWRBY2Nlc3MoKQorc3RkOjp1bmlxdWVfcHRyPEFjY2Vz
c0Nhc2U+IEFjY2Vzc0Nhc2U6OmdldCgKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vz
c1R5cGUgdHlwZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwK
KyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBib29s
IHZpYVByb3h5LCBXYXRjaHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0LAorICAgIFByb3BlcnR5U2xv
dDo6R2V0VmFsdWVGdW5jIGN1c3RvbUdldHRlciwgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlKQog
eworICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nhc2Uo
KSk7CisKKyAgICByZXN1bHQtPm1fdHlwZSA9IHR5cGU7CisgICAgcmVzdWx0LT5tX29mZnNldCA9
IG9mZnNldDsKKyAgICByZXN1bHQtPm1fc3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVy
ZSk7CisgICAgcmVzdWx0LT5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKKworICAgIGlm
ICh2aWFQcm94eSB8fCBhZGRpdGlvbmFsU2V0IHx8IHJlc3VsdC0+ZG9lc0NhbGxzKCkgfHwgY3Vz
dG9tR2V0dGVyIHx8IGN1c3RvbVNsb3RCYXNlKSB7CisgICAgICAgIHJlc3VsdC0+bV9yYXJlRGF0
YSA9IHN0ZDo6bWFrZV91bmlxdWU8UmFyZURhdGE+KCk7CisgICAgICAgIHJlc3VsdC0+bV9yYXJl
RGF0YS0+dmlhUHJveHkgPSB2aWFQcm94eTsKKyAgICAgICAgcmVzdWx0LT5tX3JhcmVEYXRhLT5h
ZGRpdGlvbmFsU2V0ID0gYWRkaXRpb25hbFNldDsKKyAgICAgICAgcmVzdWx0LT5tX3JhcmVEYXRh
LT5jdXN0b21BY2Nlc3Nvci5nZXR0ZXIgPSBjdXN0b21HZXR0ZXI7CisgICAgICAgIHJlc3VsdC0+
bV9yYXJlRGF0YS0+Y3VzdG9tU2xvdEJhc2Uuc2V0TWF5QmVOdWxsKHZtLCBvd25lciwgY3VzdG9t
U2xvdEJhc2UpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUdldEJ5SWRBY2Nl
c3MgR2V0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbykKK3N0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpyZXBs
YWNlKAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgaW5pdGlh
bFNsb3dQYXRoID0KLSAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRP
ZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSk7Ci0gICAgCi0gICAgR2V0
QnlJZEFjY2VzcyByZXN1bHQ7Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8uYWNj
ZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYpOwotICAgIAotICAgIHJlc3VsdC5tX3R5
cGUgPSBTaW1wbGVJbmxpbmU7Ci0gICAgcmVzdWx0Lm1fc3RydWN0dXJlLmNvcHlGcm9tKHN0dWJJ
bmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZSk7Ci0gICAgcmVzdWx0Lm1fc3R1
YlJvdXRpbmUgPSBKSVRTdHViUm91dGluZTo6Y3JlYXRlU2VsZk1hbmFnZWRSb3V0aW5lKGluaXRp
YWxTbG93UGF0aCk7Ci0gICAgCisgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHJlc3Vs
dChuZXcgQWNjZXNzQ2FzZSgpKTsKKworICAgIHJlc3VsdC0+bV90eXBlID0gUmVwbGFjZTsKKyAg
ICByZXN1bHQtPm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgIHJlc3VsdC0+bV9zdHJ1Y3R1cmUuc2V0
KHZtLCBvd25lciwgc3RydWN0dXJlKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0ZDo6
dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjp0cmFuc2l0aW9uKAorICAgIFZNJiB2
bSwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3
U3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCisgICAgY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChvbGRT
dHJ1Y3R1cmUgPT0gbmV3U3RydWN0dXJlLT5wcmV2aW91c0lEKCkpOworCisgICAgLy8gU2tpcCBv
cHRpbWl6aW5nIHRoZSBjYXNlIHdoZXJlIHdlIG5lZWQgYSByZWFsbG9jLCBpZiB3ZSBkb24ndCBo
YXZlCisgICAgLy8gZW5vdWdoIHJlZ2lzdGVycyB0byBtYWtlIGl0IGhhcHBlbi4KKyAgICBpZiAo
R1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgPCA2CisgICAgICAgICYmIG9sZFN0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBuZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkK
KyAgICAgICAgJiYgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2Fz
ZSB3aGVyZSB3ZSBuZWVkIHJlYWxsb2MsIGFuZCB0aGUgc3RydWN0dXJlIGhhcworICAgIC8vIGlu
ZGV4aW5nIHN0b3JhZ2UuCisgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBza2lwIHRoaXMhIElt
cGxlbWVudCBpdCEKKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTMwOTE0CisgICAgaWYgKG9sZFN0cnVjdHVyZS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIo
KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNz
Q2FzZT4gcmVzdWx0KG5ldyBBY2Nlc3NDYXNlKCkpOworCisgICAgcmVzdWx0LT5tX3R5cGUgPSBU
cmFuc2l0aW9uOworICAgIHJlc3VsdC0+bV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgcmVzdWx0LT5t
X3N0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBuZXdTdHJ1Y3R1cmUpOworICAgIHJlc3VsdC0+bV9j
b25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitz
dGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6c2V0dGVyKAorICAgIFZNJiB2
bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0LAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0JiBjb25kaXRpb25TZXQsIFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jIGN1c3RvbVNl
dHRlciwKKyAgICBKU09iamVjdCogY3VzdG9tU2xvdEJhc2UpCit7CisgICAgc3RkOjp1bmlxdWVf
cHRyPEFjY2Vzc0Nhc2U+IHJlc3VsdChuZXcgQWNjZXNzQ2FzZSgpKTsKKworICAgIHJlc3VsdC0+
bV90eXBlID0gdHlwZTsKKyAgICByZXN1bHQtPm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgIHJlc3Vs
dC0+bV9zdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKKyAgICByZXN1bHQtPm1f
Y29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OworICAgIHJlc3VsdC0+bV9yYXJlRGF0YSA9IHN0
ZDo6bWFrZV91bmlxdWU8UmFyZURhdGE+KCk7CisgICAgcmVzdWx0LT5tX3JhcmVEYXRhLT5jdXN0
b21BY2Nlc3Nvci5zZXR0ZXIgPSBjdXN0b21TZXR0ZXI7CisgICAgcmVzdWx0LT5tX3JhcmVEYXRh
LT5jdXN0b21TbG90QmFzZS5zZXRNYXlCZU51bGwodm0sIG93bmVyLCBjdXN0b21TbG90QmFzZSk7
CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4g
QWNjZXNzQ2FzZTo6aW4oCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5
cGUsIFN0cnVjdHVyZSogc3RydWN0dXJlLAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0JiBjb25kaXRpb25TZXQpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+
IHJlc3VsdChuZXcgQWNjZXNzQ2FzZSgpKTsKKworICAgIHJlc3VsdC0+bV90eXBlID0gdHlwZTsK
KyAgICByZXN1bHQtPm1fc3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7CisgICAg
cmVzdWx0LT5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKKworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpnZXRMZW5n
dGgoVk0mLCBKU0NlbGwqLCBBY2Nlc3NUeXBlIHR5cGUpCit7CisgICAgc3RkOjp1bmlxdWVfcHRy
PEFjY2Vzc0Nhc2U+IHJlc3VsdChuZXcgQWNjZXNzQ2FzZSgpKTsKKworICAgIHJlc3VsdC0+bV90
eXBlID0gdHlwZTsKKwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWJvb2wgR2V0QnlJZEFjY2Vz
czo6dmlzaXRXZWFrKFZNJiB2bSkgY29uc3QKK0FjY2Vzc0Nhc2U6On5BY2Nlc3NDYXNlKCkKK3sK
K30KKworc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OmZyb21TdHJ1Y3R1
cmVTdHViSW5mbygKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbykKK3sKKyAgICBzd2l0Y2ggKHN0dWJJbmZvLmNhY2hlVHlwZSkgeworICAgIGNh
c2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKKyAgICAgICAgcmV0dXJuIGdldCgKKyAgICAgICAg
ICAgIHZtLCBvd25lciwgTG9hZCwgc3R1YkluZm8udS5ieUlkU2VsZi5vZmZzZXQsCisgICAgICAg
ICAgICBzdHViSW5mby51LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCkpOworCisg
ICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOgorICAgICAgICByZXR1cm4gcmVwbGFj
ZSgKKyAgICAgICAgICAgIHZtLCBvd25lciwgc3R1YkluZm8udS5ieUlkU2VsZi5iYXNlT2JqZWN0
U3RydWN0dXJlLmdldCgpLCBzdHViSW5mby51LmJ5SWRTZWxmLm9mZnNldCk7CisKKyAgICBkZWZh
dWx0OgorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9Cit9CisKK3N0ZDo6dW5pcXVlX3B0
cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpjbG9uZSgpIGNvbnN0Cit7CisgICAgc3RkOjp1bmlx
dWVfcHRyPEFjY2Vzc0Nhc2U+IHJlc3VsdChuZXcgQWNjZXNzQ2FzZSgpKTsKKyAgICByZXN1bHQt
Pm1fdHlwZSA9IG1fdHlwZTsKKyAgICByZXN1bHQtPm1fb2Zmc2V0ID0gbV9vZmZzZXQ7CisgICAg
cmVzdWx0LT5tX3N0cnVjdHVyZSA9IG1fc3RydWN0dXJlOworICAgIHJlc3VsdC0+bV9jb25kaXRp
b25TZXQgPSBtX2NvbmRpdGlvblNldDsKKyAgICBpZiAoUmFyZURhdGEqIHJhcmVEYXRhID0gbV9y
YXJlRGF0YS5nZXQoKSkgeworICAgICAgICByZXN1bHQtPm1fcmFyZURhdGEgPSBzdGQ6Om1ha2Vf
dW5pcXVlPFJhcmVEYXRhPigpOworICAgICAgICByZXN1bHQtPm1fcmFyZURhdGEtPnZpYVByb3h5
ID0gcmFyZURhdGEtPnZpYVByb3h5OworICAgICAgICByZXN1bHQtPm1fcmFyZURhdGEtPmFkZGl0
aW9uYWxTZXQgPSByYXJlRGF0YS0+YWRkaXRpb25hbFNldDsKKyAgICAgICAgLy8gTk9URTogV2Ug
ZG9uJ3QgY29weSB0aGUgY2FsbExpbmtJbmZvLCBzaW5jZSB0aGF0J3MgY3JlYXRlZCBkdXJpbmcg
Y29kZSBnZW5lcmF0aW9uLgorICAgICAgICByZXN1bHQtPm1fcmFyZURhdGEtPmN1c3RvbUFjY2Vz
c29yLm9wYXF1ZSA9IHJhcmVEYXRhLT5jdXN0b21BY2Nlc3Nvci5vcGFxdWU7CisgICAgICAgIHJl
c3VsdC0+bV9yYXJlRGF0YS0+Y3VzdG9tU2xvdEJhc2UgPSByYXJlRGF0YS0+Y3VzdG9tU2xvdEJh
c2U7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgQWNjZXNzQ2FzZTo6Z3Vh
cmRlZEJ5U3RydWN0dXJlQ2hlY2soKSBjb25zdAoreworICAgIGlmICh2aWFQcm94eSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgQXJy
YXlMZW5ndGg6CisgICAgY2FzZSBTdHJpbmdMZW5ndGg6CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisKK0pTT2JqZWN0
KiBBY2Nlc3NDYXNlOjphbHRlcm5hdGVCYXNlKCkgY29uc3QKK3sKKyAgICBpZiAoY3VzdG9tU2xv
dEJhc2UoKSkKKyAgICAgICAgcmV0dXJuIGN1c3RvbVNsb3RCYXNlKCk7CisgICAgcmV0dXJuIGNv
bmRpdGlvblNldCgpLnNsb3RCYXNlQ29uZGl0aW9uKCkub2JqZWN0KCk7Cit9CisKK2Jvb2wgQWNj
ZXNzQ2FzZTo6Y2FuUmVwbGFjZShjb25zdCBBY2Nlc3NDYXNlJiBvdGhlcikKK3sKKyAgICAvLyBX
ZSBjb3VsZCBkbyBhIGxvdCBiZXR0ZXIgaGVyZSwgYnV0IGZvciBub3cgd2UganVzdCBkbyBzb21l
dGhpbmcgb2J2aW91cy4KKworICAgIGlmICghZ3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2soKSB8fCAh
b3RoZXIuZ3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2soKSkgeworICAgICAgICAvLyBGSVhNRTogSW1w
bGVtZW50IHRoaXMhCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4g
c3RydWN0dXJlKCkgPT0gb3RoZXIuc3RydWN0dXJlKCk7Cit9CisKK3ZvaWQgQWNjZXNzQ2FzZTo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX3R5cGUsICI6
KCIpOworCisgICAgQ29tbWFQcmludGVyIGNvbW1hOworCisgICAgaWYgKG1fdHlwZSA9PSBUcmFu
c2l0aW9uKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJzdHJ1Y3R1cmUgPSAiLCBwb2ludGVy
RHVtcChzdHJ1Y3R1cmUoKSksICIgLT4gIiwgcG9pbnRlckR1bXAobmV3U3RydWN0dXJlKCkpKTsK
KyAgICBlbHNlIGlmIChtX3N0cnVjdHVyZSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAic3Ry
dWN0dXJlID0gIiwgcG9pbnRlckR1bXAobV9zdHJ1Y3R1cmUuZ2V0KCkpKTsKKworICAgIGlmIChp
c1ZhbGlkT2Zmc2V0KG1fb2Zmc2V0KSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAib2Zmc2V0
ID0gIiwgbV9vZmZzZXQpOworICAgIGlmICghbV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKQorICAg
ICAgICBvdXQucHJpbnQoY29tbWEsICJjb25kaXRpb25zID0gIiwgbV9jb25kaXRpb25TZXQpOwor
CisgICAgaWYgKFJhcmVEYXRhKiByYXJlRGF0YSA9IG1fcmFyZURhdGEuZ2V0KCkpIHsKKyAgICAg
ICAgaWYgKHJhcmVEYXRhLT52aWFQcm94eSkKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwg
InZpYVByb3h5ID0gIiwgcmFyZURhdGEtPnZpYVByb3h5KTsKKyAgICAgICAgaWYgKHJhcmVEYXRh
LT5hZGRpdGlvbmFsU2V0KQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiYWRkaXRpb25h
bFNldCA9ICIsIFJhd1BvaW50ZXIocmFyZURhdGEtPmFkZGl0aW9uYWxTZXQuZ2V0KCkpKTsKKyAg
ICAgICAgaWYgKHJhcmVEYXRhLT5jYWxsTGlua0luZm8pCisgICAgICAgICAgICBvdXQucHJpbnQo
Y29tbWEsICJjYWxsTGlua0luZm8gPSAiLCBSYXdQb2ludGVyKHJhcmVEYXRhLT5jYWxsTGlua0lu
Zm8uZ2V0KCkpKTsKKyAgICAgICAgaWYgKHJhcmVEYXRhLT5jdXN0b21BY2Nlc3Nvci5vcGFxdWUp
CisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICJjdXN0b21BY2Nlc3NvciA9ICIsIFJhd1Bv
aW50ZXIocmFyZURhdGEtPmN1c3RvbUFjY2Vzc29yLm9wYXF1ZSkpOworICAgICAgICBpZiAocmFy
ZURhdGEtPmN1c3RvbVNsb3RCYXNlKQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiY3Vz
dG9tU2xvdEJhc2UgPSAiLCBSYXdQb2ludGVyKHJhcmVEYXRhLT5jdXN0b21TbG90QmFzZS5nZXQo
KSkpOworICAgIH0KKworICAgIG91dC5wcmludCgiKSIpOworfQorCitib29sIEFjY2Vzc0Nhc2U6
OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0CiB7CiAgICAgaWYgKG1fc3RydWN0dXJlICYmICFIZWFw
Ojppc01hcmtlZChtX3N0cnVjdHVyZS5nZXQoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBpZiAoIW1fY29uZGl0aW9uU2V0LmFyZVN0aWxsTGl2ZSgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgaWYgKCFtX3N0dWJSb3V0aW5lLT52aXNpdFdlYWsodm0pKQotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKG1fcmFyZURhdGEpIHsKKyAgICAgICAgaWYgKG1fcmFyZURhdGEt
PmNhbGxMaW5rSW5mbykKKyAgICAgICAgICAgIG1fcmFyZURhdGEtPmNhbGxMaW5rSW5mby0+dmlz
aXRXZWFrKHZtKTsKKyAgICAgICAgaWYgKG1fcmFyZURhdGEtPmN1c3RvbVNsb3RCYXNlICYmICFI
ZWFwOjppc01hcmtlZChtX3JhcmVEYXRhLT5jdXN0b21TbG90QmFzZS5nZXQoKSkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogICAgIHJldHVybiB0cnVlOwogfQogCi1Qb2x5bW9y
cGhpY0dldEJ5SWRMaXN0OjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbykKK3ZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCisgICAgQWNj
ZXNzR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCYgZmFsbFRo
cm91Z2gpCiB7Ci0gICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0KQot
ICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgbV9saXN0LmFwcGVuZChHZXRCeUlkQWNjZXNzOjpm
cm9tU3RydWN0dXJlU3R1YkluZm8oc3R1YkluZm8pKTsKKyAgICBDQ2FsbEhlbHBlcnMmIGppdCA9
ICpzdGF0ZS5qaXQ7CisKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgQXJyYXlMZW5n
dGg6IHsKKyAgICAgICAgQVNTRVJUKCF2aWFQcm94eSgpKTsKKyAgICAgICAgaml0LmxvYWQ4KEND
YWxsSGVscGVyczo6QWRkcmVzcyhzdGF0ZS5iYXNlR1BSLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9m
ZnNldCgpKSwgc3RhdGUuc2NyYXRjaEdQUik7CisgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgK
KyAgICAgICAgICAgIGppdC5icmFuY2hUZXN0MzIoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpaZXJvLCBzdGF0ZS5zY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihJ
c0FycmF5KSkpOworICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCisgICAgICAgICAgICBqaXQu
YnJhbmNoVGVzdDMyKAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6WmVybywgc3RhdGUu
c2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2sp
KSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgU3RyaW5nTGVuZ3RoOiB7Cisg
ICAgICAgIEFTU0VSVCghdmlhUHJveHkoKSk7CisgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgK
KyAgICAgICAgICAgIGppdC5icmFuY2g4KAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
Tm90RXF1YWwsCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0YXRlLmJh
c2VHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKFN0cmluZ1R5cGUpKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgaWYgKHZpYVByb3h5KCkpIHsKKyAgICAg
ICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgKKyAgICAgICAgICAgICAgICBqaXQuYnJhbmNoOCgK
KyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKKyAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0YXRlLmJhc2VHUFIsIEpTQ2VsbDo6dHlw
ZUluZm9UeXBlT2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihQdXJlRm9yd2FyZGluZ1Byb3h5VHlwZSkpKTsKKworICAgICAgICAgICAgaml0
LmxvYWRQdHIoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0YXRlLmJh
c2VHUFIsIEpTUHJveHk6OnRhcmdldE9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBzdGF0ZS5z
Y3JhdGNoR1BSKTsKKworICAgICAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKAorICAgICAgICAg
ICAgICAgIGppdC5icmFuY2hTdHJ1Y3R1cmUoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6Tm90RXF1YWwsCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVz
cyhzdGF0ZS5zY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAorICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3R1cmUoKSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgZmFsbFRocm91Z2guYXBwZW5kKAorICAgICAgICAgICAgICAgIGppdC5icmFuY2hTdHJ1Y3R1
cmUoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsCisgICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdGF0ZS5iYXNlR1BSLCBKU0NlbGw6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUoKSkp
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0gfTsKKworICAgIGdlbmVyYXRlKHN0
YXRlKTsKIH0KIAotUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogUG9seW1vcnBoaWNHZXRCeUlkTGlz
dDo6ZnJvbShTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit2b2lkIEFjY2Vzc0Nhc2U6Omdl
bmVyYXRlKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCiB7Ci0gICAgaWYgKHN0dWJJbmZv
LmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9saXN0KQotICAgICAgICByZXR1cm4gc3R1
YkluZm8udS5nZXRCeUlkTGlzdC5saXN0OwotICAgIAotICAgIEFTU0VSVCgKLSAgICAgICAgc3R1
YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYKLSAgICAgICAgfHwgc3R1
YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpOwotICAgIAotICAgIFBvbHltb3JwaGlj
R2V0QnlJZExpc3QqIHJlc3VsdCA9IG5ldyBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KHN0dWJJbmZv
KTsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiR2VuZXJhdGluZyBjb2RlIGZv
cjogIiwgKnRoaXMsICJcbiIpOwogICAgIAotICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkTGlzdChy
ZXN1bHQpOworICAgIENDYWxsSGVscGVycyYgaml0ID0gKnN0YXRlLmppdDsKKyAgICBWTSYgdm0g
PSAqaml0LnZtKCk7CisgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gKnN0YXRlLnN0
dWJJbmZvOworICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gKnN0YXRlLmlkZW50OworICAg
IEpTVmFsdWVSZWdzIHZhbHVlUmVncyA9IHN0YXRlLnZhbHVlUmVnczsKKyAgICBHUFJSZWcgYmFz
ZUdQUiA9IHN0YXRlLmJhc2VHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzdGF0ZS5zY3Jh
dGNoR1BSOworCisgICAgQVNTRVJUKG1fY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxp
ZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpOworCisgICAgaWYgKChzdHJ1
Y3R1cmUoKSAmJiBzdHJ1Y3R1cmUoKS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKQor
ICAgICAgICB8fCBtX2NvbmRpdGlvblNldC5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkp
CisgICAgICAgIHZtLnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KGlkZW50LCBz
dGF0ZS5hZGRXYXRjaHBvaW50KCkpOworCisgICAgaWYgKGFkZGl0aW9uYWxTZXQoKSkKKyAgICAg
ICAgYWRkaXRpb25hbFNldCgpLT5hZGQoc3RhdGUuYWRkV2F0Y2hwb2ludCgpKTsKKworICAgIGZv
ciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6IG1fY29uZGl0aW9u
U2V0KSB7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY29uZGl0aW9uLm9iamVjdCgp
LT5zdHJ1Y3R1cmUoKTsKKworICAgICAgICBpZiAoY29uZGl0aW9uLmlzV2F0Y2hhYmxlQXNzdW1p
bmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkgeworICAgICAgICAgICAgc3RydWN0dXJlLT5h
ZGRUcmFuc2l0aW9uV2F0Y2hwb2ludChzdGF0ZS5hZGRXYXRjaHBvaW50KGNvbmRpdGlvbikpOwor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBSRUxFQVNFX0FTU0VS
VChjb25kaXRpb24uc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0
eVdhdGNocG9pbnQoc3RydWN0dXJlKSk7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cihjb25kaXRpb24ub2JqZWN0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
c3RhdGUuZmFpbEFuZFJlcGF0Y2guYXBwZW5kKAorICAgICAgICAgICAgaml0LmJyYW5jaFN0cnVj
dHVyZSgKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAorICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIHN0cnVjdHVyZSkpOworICAgIH0KKworICAg
IHN3aXRjaCAobV90eXBlKSB7CisgICAgY2FzZSBJbkhpdDoKKyAgICBjYXNlIEluTWlzczoKKyAg
ICAgICAgaml0LmJveEJvb2xlYW5QYXlsb2FkKG1fdHlwZSA9PSBJbkhpdCwgdmFsdWVSZWdzLnBh
eWxvYWRHUFIoKSk7CisgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKKyAgICAgICAgcmV0dXJuOwor
CisgICAgY2FzZSBNaXNzOgorICAgICAgICBqaXQubW92ZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5l
ZCgpLCB2YWx1ZVJlZ3MpOworICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7CisgICAgICAgIHJldHVy
bjsKKworICAgIGNhc2UgTG9hZDoKKyAgICBjYXNlIEdldHRlcjoKKyAgICBjYXNlIFNldHRlcjoK
KyAgICBjYXNlIEN1c3RvbUdldHRlcjoKKyAgICBjYXNlIEN1c3RvbVNldHRlcjogeworICAgICAg
ICBpZiAoaXNWYWxpZE9mZnNldChtX29mZnNldCkpIHsKKyAgICAgICAgICAgIFN0cnVjdHVyZSog
Y3VyclN0cnVjdHVyZTsKKyAgICAgICAgICAgIGlmIChtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkp
CisgICAgICAgICAgICAgICAgY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZSgpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBtX2NvbmRpdGlvblNldC5z
bG90QmFzZUNvbmRpdGlvbigpLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgIGN1
cnJTdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgb2Zm
c2V0KCkpOworICAgICAgICB9CisKKyAgICAgICAgR1BSUmVnIGJhc2VGb3JHZXRHUFI7CisgICAg
ICAgIGlmICh2aWFQcm94eSgpKSB7CisgICAgICAgICAgICBiYXNlRm9yR2V0R1BSID0gdmFsdWVS
ZWdzLnBheWxvYWRHUFIoKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKAorICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU1Byb3h5Ojp0YXJnZXRPZmZzZXQo
KSksCisgICAgICAgICAgICAgICAgYmFzZUZvckdldEdQUik7CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgYmFzZUZvckdldEdQUiA9IGJhc2VHUFI7CisKKyAgICAgICAgR1BSUmVnIGJhc2VG
b3JBY2Nlc3NHUFI7CisgICAgICAgIGlmICghbV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKSB7Cisg
ICAgICAgICAgICBqaXQubW92ZSgKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoYWx0ZXJuYXRlQmFzZSgpKSwKKyAgICAgICAgICAgICAgICBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgIGJhc2VGb3JBY2Nlc3NHUFIgPSBzY3JhdGNoR1BSOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIGJhc2VGb3JBY2Nlc3NHUFIgPSBiYXNlRm9yR2V0R1BSOworCisgICAg
ICAgIEdQUlJlZyBsb2FkZWRWYWx1ZUdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGlmICht
X3R5cGUgIT0gQ3VzdG9tR2V0dGVyICYmIG1fdHlwZSAhPSBDdXN0b21TZXR0ZXIpIHsKKyAgICAg
ICAgICAgIGlmIChtX3R5cGUgPT0gTG9hZCkKKyAgICAgICAgICAgICAgICBsb2FkZWRWYWx1ZUdQ
UiA9IHZhbHVlUmVncy5wYXlsb2FkR1BSKCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgbG9hZGVkVmFsdWVHUFIgPSBzY3JhdGNoR1BSOworCisgICAgICAgICAgICBHUFJSZWcg
c3RvcmFnZUdQUjsKKyAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChtX29mZnNldCkpCisg
ICAgICAgICAgICAgICAgc3RvcmFnZUdQUiA9IGJhc2VGb3JBY2Nlc3NHUFI7CisgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cigKKyAgICAgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VGb3JBY2Nlc3NHUFIsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSKTsKKyAg
ICAgICAgICAgICAgICBzdG9yYWdlR1BSID0gbG9hZGVkVmFsdWVHUFI7CisgICAgICAgICAgICB9
CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgaml0LmxvYWQ2NCgKKyAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RvcmFnZUdQUiwgb2Zmc2V0UmVsYXRpdmVU
b0Jhc2UobV9vZmZzZXQpKSwgbG9hZGVkVmFsdWVHUFIpOworI2Vsc2UKKyAgICAgICAgICAgIGlm
IChtX3R5cGUgPT0gTG9hZCkgeworICAgICAgICAgICAgICAgIGppdC5sb2FkMzIoCisgICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdG9yYWdlR1BSLCBvZmZzZXRSZWxh
dGl2ZVRvQmFzZShtX29mZnNldCkgKyBUYWdPZmZzZXQpLAorICAgICAgICAgICAgICAgICAgICB2
YWx1ZVJlZ3MudGFnR1BSKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaml0LmxvYWQz
MigKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RvcmFnZUdQUiwgb2Zm
c2V0UmVsYXRpdmVUb0Jhc2UobV9vZmZzZXQpICsgUGF5bG9hZE9mZnNldCksCisgICAgICAgICAg
ICAgICAgbG9hZGVkVmFsdWVHUFIpOworI2VuZGlmCisgICAgICAgIH0KKworICAgICAgICAvLyBT
dHVmZiBmb3IgY3VzdG9tIGdldHRlcnMuCisgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBvcGVy
YXRpb25DYWxsOworICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgaGFuZGxlckNhbGw7CisKKyAg
ICAgICAgLy8gU3R1ZmYgZm9yIEpTIGdldHRlcnMuCisgICAgICAgIENDYWxsSGVscGVyczo6RGF0
YUxhYmVsUHRyIGFkZHJlc3NPZkxpbmtGdW5jdGlvbkNoZWNrOworICAgICAgICBDQ2FsbEhlbHBl
cnM6OkNhbGwgZmFzdFBhdGhDYWxsOworICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgc2xvd1Bh
dGhDYWxsOworCisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBzdWNjZXNzOworICAgICAgICBD
Q2FsbEhlbHBlcnM6Okp1bXAgZmFpbDsKKyAgICAgICAgaWYgKG1fdHlwZSAhPSBMb2FkICYmIG1f
dHlwZSAhPSBNaXNzKSB7CisgICAgICAgICAgICAvLyBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdo
ZW5ldmVyIHRoaXMgY2FsbCBpcyBtYWRlIGluIHRoZSBmdXR1cmUsIHdlIHJlbWVtYmVyIHRoZQor
ICAgICAgICAgICAgLy8gcGxhY2UgdGhhdCB3ZSBtYWRlIGl0IGZyb20uCisgICAgICAgICAgICBq
aXQuc3RvcmUzMigKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihz
dHViSW5mby5jYWxsU2l0ZUluZGV4LmJpdHMoKSksCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjp0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihKU1N0YWNrOjpBcmd1bWVu
dENvdW50KSkpOworCisgICAgICAgICAgICBpZiAobV90eXBlID09IEdldHRlciB8fCBtX3R5cGUg
PT0gU2V0dGVyKSB7CisgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgSlMgY2FsbCB1c2luZyBh
IEpTIGNhbGwgaW5saW5lIGNhY2hlLiBBc3N1bWUgdGhhdDoKKyAgICAgICAgICAgICAgICAvLwor
ICAgICAgICAgICAgICAgIC8vIC0gU1AgaXMgYWxpZ25lZCBhbmQgcmVwcmVzZW50cyB0aGUgZXh0
ZW50IG9mIHRoZSBjYWxsaW5nIGNvbXBpbGVyJ3Mgc3RhY2sgdXNhZ2UuCisgICAgICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgICAgICAvLyAtIEZQIGlzIHNldCBjb3JyZWN0bHkgKGkuZS4gaXQg
cG9pbnRzIHRvIHRoZSBjYWxsZXIncyBjYWxsIGZyYW1lIGhlYWRlcikuCisgICAgICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgICAgICAvLyAtIFNQIC0gRlAgaXMgYW4gYWxpZ25lZCBkaWZmZXJl
bmNlLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gLSBBbnkgYnl0ZSBi
ZXR3ZWVuIEZQIChleGNsdXNpdmUpIGFuZCBTUCAoaW5jbHVzaXZlKSBjb3VsZCBiZSBsaXZlIGlu
IHRoZSBjYWxsaW5nCisgICAgICAgICAgICAgICAgLy8gICBjb2RlLgorICAgICAgICAgICAgICAg
IC8vCisgICAgICAgICAgICAgICAgLy8gVGhlcmVmb3JlLCB3ZSB0ZW1wb3JhcmlseSBncm93IHRo
ZSBzdGFjayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhlIGNhbGwgYW5kIHRoZW4KKyAgICAgICAgICAg
ICAgICAvLyBzaHJpbmsgaXQgYWZ0ZXIuCisKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VCghbV9yYXJlRGF0YS0+Y2FsbExpbmtJbmZvKTsKKyAgICAgICAgICAgICAgICBtX3JhcmVEYXRh
LT5jYWxsTGlua0luZm8gPSBzdGQ6Om1ha2VfdW5pcXVlPENhbGxMaW5rSW5mbz4oKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSWYgd2UgZ2VuZXJhdGVkIGEg
cG9seW1vcnBoaWMgY2FsbCBzdHViIHRoYXQganVtcGVkIGJhY2sgdG8gdGhlIGdldHRlcgorICAg
ICAgICAgICAgICAgIC8vIHN0dWIsIHdoaWNoIHRoZW4ganVtcGVkIGJhY2sgdG8gdGhlIG1haW4g
Y29kZSwgdGhlbiB3ZSdkIGhhdmUgYSByZWFjaGFiaWxpdHkKKyAgICAgICAgICAgICAgICAvLyBz
aXR1YXRpb24gdGhhdCB0aGUgR0MgZG9lc24ndCBrbm93IGFib3V0LiBUaGUgR0Mgd291bGQgZW5z
dXJlIHRoYXQgdGhlIHBvbHltb3JwaGljCisgICAgICAgICAgICAgICAgLy8gY2FsbCBzdHViIHN0
YXllZCBhbGl2ZSwgYW5kIGl0IHdvdWxkIGVuc3VyZSB0aGF0IHRoZSBtYWluIGNvZGUgc3RheWVk
IGFsaXZlLCBidXQKKyAgICAgICAgICAgICAgICAvLyBpdCB3b3VsZG4ndCBrbm93IHRoYXQgdGhl
IGdldHRlciBzdHViIHdhcyBhbGl2ZS4gSWRlYWxseSBKSVQgc3R1YiByb3V0aW5lcyB3b3VsZAor
ICAgICAgICAgICAgICAgIC8vIGJlIEdDIG9iamVjdHMsIGFuZCB0aGVuIHdlJ2QgYmUgYWJsZSB0
byBzYXkgdGhhdCB0aGUgcG9seW1vcnBoaWMgY2FsbCBzdHViIGhhcyBhCisgICAgICAgICAgICAg
ICAgLy8gcmVmZXJlbmNlIHRvIHRoZSBnZXR0ZXIgc3R1Yi4KKyAgICAgICAgICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4OTE0CisgICAgICAgICAg
ICAgICAgbV9yYXJlRGF0YS0+Y2FsbExpbmtJbmZvLT5kaXNhbGxvd1N0dWJzKCk7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9yYXJlRGF0YS0+Y2FsbExpbmtJbmZvLT5zZXRV
cENhbGwoCisgICAgICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbzo6Q2FsbCwgc3R1YkluZm8u
Y29kZU9yaWdpbiwgbG9hZGVkVmFsdWVHUFIpOworCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wTGlzdCBkb25lOworCisgICAgICAgICAgICAgICAgLy8gVGhlcmUgaXMgYSAidGhp
cyIgYXJndW1lbnQuCisgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZQYXJhbWV0ZXJz
ID0gMTsKKyAgICAgICAgICAgICAgICAvLyAuLi4gYW5kIGEgdmFsdWUgYXJndW1lbnQgaWYgd2Un
cmUgY2FsbGluZyBhIHNldHRlci4KKyAgICAgICAgICAgICAgICBpZiAobV90eXBlID09IFNldHRl
cikKKyAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZQYXJhbWV0ZXJzKys7CisKKyAgICAgICAg
ICAgICAgICAvLyBHZXQgdGhlIGFjY2Vzc29yOyBpZiB0aGVyZSBhaW4ndCBvbmUgdGhlbiB0aGUg
cmVzdWx0IGlzIGpzVW5kZWZpbmVkKCkuCisgICAgICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBT
ZXR0ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoCisgICAgICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobG9hZGVkVmFsdWVHUFIsIEdldHRlclNl
dHRlcjo6b2Zmc2V0T2ZTZXR0ZXIoKSksCisgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZWRW
YWx1ZUdQUik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
aml0LmxvYWRQdHIoCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MobG9hZGVkVmFsdWVHUFIsIEdldHRlclNldHRlcjo6b2Zmc2V0T2ZHZXR0ZXIoKSksCisgICAg
ICAgICAgICAgICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUik7CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHJldHVyblVuZGVmaW5lZCA9IGpp
dC5icmFuY2hUZXN0UHRyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Olplcm8s
IGxvYWRlZFZhbHVlR1BSKTsKKworICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mUmVn
c0ZvckNhbGwgPSBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgbnVtYmVyT2ZQYXJhbWV0
ZXJzOworCisgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZCeXRlc0ZvckNhbGwgPQor
ICAgICAgICAgICAgICAgICAgICBudW1iZXJPZlJlZ3NGb3JDYWxsICogc2l6ZW9mKFJlZ2lzdGVy
KSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKTsKKworICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2FsbCA9CisgICAgICAgICAgICAgICAgICAgIFdURjo6
cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIG51bWJlck9mQnl0ZXNG
b3JDYWxsKTsKKworICAgICAgICAgICAgICAgIGppdC5zdWJQdHIoCisgICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2Fs
bCksCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0
ZXIpOworCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzIGNhbGxlZUZyYW1l
ID0gQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAtc3RhdGljX2Nh
c3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKKworICAgICAgICAgICAg
ICAgIGppdC5zdG9yZTMyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMihudW1iZXJPZlBhcmFtZXRlcnMpLAorICAgICAgICAgICAgICAgICAgICBjYWxsZWVG
cmFtZS53aXRoT2Zmc2V0KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQgKiBzaXplb2YoUmVnaXN0ZXIp
ICsgUGF5bG9hZE9mZnNldCkpOworCisgICAgICAgICAgICAgICAgaml0LnN0b3JlQ2VsbCgKKyAg
ICAgICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQo
SlNTdGFjazo6Q2FsbGVlICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworCisgICAgICAgICAgICAgICAg
aml0LnN0b3JlQ2VsbCgKKyAgICAgICAgICAgICAgICAgICAgYmFzZUZvckdldEdQUiwKKyAgICAg
ICAgICAgICAgICAgICAgY2FsbGVlRnJhbWUud2l0aE9mZnNldCh2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudCgwKS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpKTsKKworICAgICAgICAgICAg
ICAgIGlmIChtX3R5cGUgPT0gU2V0dGVyKSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5zdG9y
ZVZhbHVlKAorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVSZWdzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgY2FsbGVlRnJhbWUud2l0aE9mZnNldCgKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxKS5vZmZzZXQoKSAqIHNpemVvZihS
ZWdpc3RlcikpKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6Okp1bXAgc2xvd0Nhc2UgPSBqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKAorICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBsb2FkZWRWYWx1ZUdQUiwgYWRkcmVz
c09mTGlua0Z1bmN0aW9uQ2hlY2ssCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cigwKSk7CisKKyAgICAgICAgICAgICAgICBmYXN0UGF0aENhbGwgPSBqaXQu
bmVhckNhbGwoKTsKKworICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoCisgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFsaWduZWROdW1iZXJPZkJ5dGVzRm9y
Q2FsbCksCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVn
aXN0ZXIpOworICAgICAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gR2V0dGVyKQorICAgICAgICAg
ICAgICAgICAgICBqaXQuc2V0dXBSZXN1bHRzKHZhbHVlUmVncyk7CisKKyAgICAgICAgICAgICAg
ICBkb25lLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5saW5r
KCZqaXQpOworCisgICAgICAgICAgICAgICAgaml0Lm1vdmUobG9hZGVkVmFsdWVHUFIsIEdQUklu
Zm86OnJlZ1QwKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICAgICAgICAgIC8vIFdl
ICphbHdheXMqIGtub3cgdGhhdCB0aGUgZ2V0dGVyL3NldHRlciwgaWYgbm9uLW51bGwsIGlzIGEg
Y2VsbC4KKyAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpDZWxsVGFnKSwgR1BSSW5mbzo6cmVnVDEpOworI2VuZGlmCisgICAgICAgICAg
ICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fcmFyZURhdGEtPmNh
bGxMaW5rSW5mby5nZXQoKSksIEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAgICAgICAgICBzbG93
UGF0aENhbGwgPSBqaXQubmVhckNhbGwoKTsKKworICAgICAgICAgICAgICAgIGppdC5hZGRQdHIo
CisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFsaWduZWRO
dW1iZXJPZkJ5dGVzRm9yQ2FsbCksCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gR2V0
dGVyKQorICAgICAgICAgICAgICAgICAgICBqaXQuc2V0dXBSZXN1bHRzKHZhbHVlUmVncyk7CisK
KyAgICAgICAgICAgICAgICBkb25lLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm5VbmRlZmluZWQubGluaygmaml0KTsKKworICAgICAgICAgICAgICAgIGlmIChtX3R5
cGUgPT0gR2V0dGVyKQorICAgICAgICAgICAgICAgICAgICBqaXQubW92ZVRydXN0ZWRWYWx1ZShq
c1VuZGVmaW5lZCgpLCB2YWx1ZVJlZ3MpOworCisgICAgICAgICAgICAgICAgZG9uZS5saW5rKCZq
aXQpOworCisgICAgICAgICAgICAgICAgc3RhdGUuY2FsbGJhY2tzLmFwcGVuZCgKKyAgICAgICAg
ICAgICAgICAgICAgWz0sICZ2bV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1fcmFyZURhdGEtPmNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9u
cygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFy
Q2FsbChzbG93UGF0aENhbGwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZm
ZXIubG9jYXRpb25PZihhZGRyZXNzT2ZMaW5rRnVuY3Rpb25DaGVjayksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoZmFzdFBhdGhDYWxs
KSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluaygKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJh
dG9yKS5jb2RlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIC8vIGdldHRlcjogRW5jb2RlZEpTVmFsdWUgKCpHZXRWYWx1
ZUZ1bmMpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgICAgIC8vIHNldHRlcjogdm9pZCAo
KlB1dFZhbHVlRnVuYykoRXhlY1N0YXRlKiwgSlNPYmplY3QqIGJhc2UsIEVuY29kZWRKU1ZhbHVl
IHRoaXNPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQor
ICAgICAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gQ3VzdG9tR2V0dGVyKSB7CisgICAgICAgICAg
ICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoCisgICAgICAgICAgICAg
ICAgICAgICAgICBiYXNlRm9yQWNjZXNzR1BSLCBiYXNlRm9yR2V0R1BSLAorICAgICAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGlkZW50LmltcGwoKSkpOwor
ICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VGb3JBY2Nlc3NHUFIsIGJhc2VGb3JHZXRHUFIsIHZhbHVl
UmVncy5ncHIoKSk7CisjZWxzZQorICAgICAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gQ3VzdG9t
R2V0dGVyKSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICBiYXNlRm9yQWNjZXNzR1BSLCBiYXNlRm9y
R2V0R1BSLAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6Q2VsbFRhZyksCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoaWRlbnQuaW1wbCgpKSk7CisgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VGb3JBY2Nlc3NHUFIsIGJhc2VGb3JHZXRHUFIs
CisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpDZWxsVGFnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlUmVncy5wYXlsb2Fk
R1BSKCksIHZhbHVlUmVncy50YWdHUFIoKSk7CisgICAgICAgICAgICAgICAgfQorI2VuZGlmCisg
ICAgICAgICAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAm
dm0udG9wQ2FsbEZyYW1lKTsKKworICAgICAgICAgICAgICAgIG9wZXJhdGlvbkNhbGwgPSBqaXQu
Y2FsbCgpOworICAgICAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gQ3VzdG9tR2V0dGVyKQorICAg
ICAgICAgICAgICAgICAgICBqaXQuc2V0dXBSZXN1bHRzKHZhbHVlUmVncyk7CisgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIG5vRXhjZXB0aW9uID0KKyAgICAgICAgICAgICAgICAg
ICAgaml0LmVtaXRFeGNlcHRpb25DaGVjayhDQ2FsbEhlbHBlcnM6OkludmVydGVkRXhjZXB0aW9u
Q2hlY2spOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRz
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmdm0pLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3Rlcik7CisgICAgICAgICAgICAgICAgaGFuZGxlckNhbGwgPSBqaXQuY2FsbCgpOworICAgICAg
ICAgICAgICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBub0V4Y2VwdGlvbi5saW5rKCZqaXQpOworCisgICAgICAgICAgICAgICAg
c3RhdGUuY2FsbGJhY2tzLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVm
ZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxp
bmsob3BlcmF0aW9uQ2FsbCwgRnVuY3Rpb25QdHIobV9yYXJlRGF0YS0+Y3VzdG9tQWNjZXNzb3Iu
b3BhcXVlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoaGFuZGxl
ckNhbGwsIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpOworICAgICAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYXNlIFJlcGxhY2U6IHsKKyAgICAgICAgaWYgKGlz
SW5saW5lT2Zmc2V0KG1fb2Zmc2V0KSkgeworICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUoCisg
ICAgICAgICAgICAgICAgdmFsdWVSZWdzLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
QWRkcmVzcygKKyAgICAgICAgICAgICAgICAgICAgYmFzZUdQUiwKKyAgICAgICAgICAgICAgICAg
ICAgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsKKyAgICAgICAgICAgICAgICAg
ICAgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKG1fb2Zmc2V0KSAqIHNpemVvZihKU1ZhbHVlKSkpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIp
OworICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUoCisgICAgICAgICAgICAgICAgdmFsdWVSZWdz
LAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgICAg
ICAgICAgc2NyYXRjaEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkobV9vZmZzZXQpICogc2l6ZW9mKEpT
VmFsdWUpKSk7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGUuc3VjY2VlZCgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgY2FzZSBUcmFuc2l0aW9uOiB7CisgICAgICAgIC8vIEFjY2Vz
c0Nhc2U6OnRyYW5zaXRpb24oKSBzaG91bGQgaGF2ZSByZXR1cm5lZCBudWxsLgorICAgICAgICBS
RUxFQVNFX0FTU0VSVChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyA+PSA2IHx8ICFzdHJ1Y3R1
cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSB8fCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSA9PSBuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFzdHJ1Y3R1cmUoKS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSk7CisK
KyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKKworICAgICAgICBTY3Jh
dGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHN0dWJJbmZvLnBhdGNoLnVzZWRSZWdpc3Rl
cnMpOworICAgICAgICBhbGxvY2F0b3IubG9jayhiYXNlR1BSKTsKKyAgICAgICAgYWxsb2NhdG9y
LmxvY2sodmFsdWVSZWdzKTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2soc2NyYXRjaEdQUik7CisK
KyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIyID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQ
UigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjM7CisgICAgICAgIGlmIChuZXdTdHJ1Y3R1
cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKQorICAgICAgICAgICAgJiYgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpCisg
ICAgICAgICAgICBzY3JhdGNoR1BSMyA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2NyYXRjaEdQUjMgPSBJbnZhbGlkR1BSUmVnOwor
CisgICAgICAgIHNpemVfdCBudW1iZXJPZlBhZGRpbmdCeXRlcyA9IGFsbG9jYXRvci5wcmVzZXJ2
ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhqaXQpOworCisgICAgICAgIEFTU0VSVChzdHJ1Y3R1
cmUoKS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7CisKKyAg
ICAgICAgYm9vbCBzY3JhdGNoR1BSSGFzU3RvcmFnZSA9IGZhbHNlOworCisgICAgICAgIGlmIChu
ZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSkgeworICAgICAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBuZXdTdHJ1Y3R1
cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKKyAgICAgICAgICAg
IENvcGllZEFsbG9jYXRvciogY29waWVkQWxsb2NhdG9yID0gJnZtLmhlYXAuc3RvcmFnZUFsbG9j
YXRvcigpOworCisgICAgICAgICAgICBpZiAoIXN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0
eSgpKSB7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoJmNvcGllZEFsbG9jYXRvci0+bV9j
dXJyZW50UmVtYWluaW5nLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBzbG93UGF0aC5h
cHBlbmQoCisgICAgICAgICAgICAgICAgICAgIGppdC5icmFuY2hTdWJQdHIoCisgICAgICAgICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlNpZ25lZCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIobmV3U2l6ZSksIHNjcmF0Y2hHUFIpKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmVQ
dHIoc2NyYXRjaEdQUiwgJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKKyAg
ICAgICAgICAgICAgICBqaXQubmVnUHRyKHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGpp
dC5hZGRQdHIoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRy
ZXNzKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQpLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNp
emVvZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0
eSgpICogc2l6ZW9mKEpTVmFsdWUpOworICAgICAgICAgICAgICAgIEFTU0VSVChuZXdTaXplID4g
b2xkU2l6ZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
c2NyYXRjaEdQUjMpOworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKCZjb3BpZWRBbGxvY2F0
b3ItPm1fY3VycmVudFJlbWFpbmluZywgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgc2xv
d1BhdGguYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICBqaXQuYnJhbmNoU3ViUHRyKAorICAg
ICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpTaWduZWQsIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BSKSk7CisgICAgICAgICAgICAgICAgaml0
LnN0b3JlUHRyKHNjcmF0Y2hHUFIsICZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmlu
Zyk7CisgICAgICAgICAgICAgICAgaml0Lm5lZ1B0cihzY3JhdGNoR1BSKTsKKyAgICAgICAgICAg
ICAgICBqaXQuYWRkUHRyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFic29s
dXRlQWRkcmVzcygmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRQYXlsb2FkRW5kKSwgc2NyYXRj
aEdQUik7CisgICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihzaXplb2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICAvLyBX
ZSBoYXZlIHNjcmF0Y2hHUFIgPSBuZXcgc3RvcmFnZSwgc2NyYXRjaEdQUjMgPSBvbGQgc3RvcmFn
ZSwKKyAgICAgICAgICAgICAgICAvLyBzY3JhdGNoR1BSMiA9IGF2YWlsYWJsZQorICAgICAgICAg
ICAgICAgIGZvciAoc2l6ZV90IG9mZnNldCA9IDA7IG9mZnNldCA8IG9sZFNpemU7IG9mZnNldCAr
PSBzaXplb2Yodm9pZCopKSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKAorICAg
ICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2Yodm9pZCopKSksCisgICAgICAgICAg
ICAgICAgICAgICAgICBzY3JhdGNoR1BSMik7CisgICAgICAgICAgICAgICAgICAgIGppdC5zdG9y
ZVB0cigKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNjcmF0Y2hHUFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLXN0YXRpY19j
YXN0PHB0cmRpZmZfdD4ob2Zmc2V0ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkp
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGppdC5z
dG9yZVB0cihzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7CisgICAgICAgICAgICBzY3JhdGNoR1BSSGFzU3RvcmFn
ZSA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICB1aW50MzJfdCBzdHJ1Y3R1cmVCaXRzID0g
Yml0d2lzZV9jYXN0PHVpbnQzMl90PihuZXdTdHJ1Y3R1cmUoKS0+aWQoKSk7CisgICAgICAgIGpp
dC5zdG9yZTMyKAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RydWN0
dXJlQml0cyksCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlND
ZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CisKKyAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0
KG1fb2Zmc2V0KSkgeworICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUoCisgICAgICAgICAgICAg
ICAgdmFsdWVSZWdzLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAg
ICAgICAgICAgICAgICAgICAgYmFzZUdQUiwKKyAgICAgICAgICAgICAgICAgICAgSlNPYmplY3Q6
Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0SW5J
bmxpbmVTdG9yYWdlKG1fb2Zmc2V0KSAqIHNpemVvZihKU1ZhbHVlKSkpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgaWYgKCFzY3JhdGNoR1BSSGFzU3RvcmFnZSkKKyAgICAgICAgICAg
ICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6
OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBqaXQuc3RvcmVW
YWx1ZSgKKyAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MsCisgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldEluQnV0dGVyZmx5KG1fb2Zmc2V0KSAq
IHNpemVvZihKU1ZhbHVlKSkpOworICAgICAgICB9CisKKyAgICAgICAgU2NyYXRjaEJ1ZmZlciog
c2NyYXRjaEJ1ZmZlciA9IG51bGxwdHI7CisgICAgICAgIGlmIChuZXdTdHJ1Y3R1cmUoKS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSAhPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkKKyAg
ICAgICAgICAgIHNjcmF0Y2hCdWZmZXIgPSB2bS5zY3JhdGNoQnVmZmVyRm9yU2l6ZShhbGxvY2F0
b3IuZGVzaXJlZFNjcmF0Y2hCdWZmZXJTaXplRm9yQ2FsbCgpKTsKKworI2lmIEVOQUJMRShHR0Mp
CisgICAgICAgIGlmIChuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBzdHJ1
Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgeworICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpDYWxsIGNhbGxGbHVzaFdyaXRlQmFycmllckJ1ZmZlcjsKKyAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gaml0Lmp1bXBJZklzUmVtZW1i
ZXJlZE9ySW5FZGVuKGJhc2VHUFIpOworICAgICAgICAgICAgV3JpdGVCYXJyaWVyQnVmZmVyJiB3
cml0ZUJhcnJpZXJCdWZmZXIgPSBqaXQudm0oKS0+aGVhcC53cml0ZUJhcnJpZXJCdWZmZXIoKTsK
KyAgICAgICAgICAgIGppdC5sb2FkMzIod3JpdGVCYXJyaWVyQnVmZmVyLmN1cnJlbnRJbmRleEFk
ZHJlc3MoKSwgc2NyYXRjaEdQUjIpOworICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIG5l
ZWRUb0ZsdXNoID0KKyAgICAgICAgICAgICAgICBqaXQuYnJhbmNoMzIoCisgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBzY3JhdGNoR1BSMiwKKyAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIod3JpdGVCYXJyaWVyQnVmZmVy
LmNhcGFjaXR5KCkpKTsKKworICAgICAgICAgICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKDEpLCBzY3JhdGNoR1BSMik7CisgICAgICAgICAgICBqaXQuc3RvcmUzMihzY3Jh
dGNoR1BSMiwgd3JpdGVCYXJyaWVyQnVmZmVyLmN1cnJlbnRJbmRleEFkZHJlc3MoKSk7CisKKyAg
ICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih3cml0ZUJhcnJp
ZXJCdWZmZXIuYnVmZmVyKCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIC8vIFdlIHVzZSBh
biBvZmZzZXQgb2YgLXNpemVvZih2b2lkKikgYmVjYXVzZSB3ZSBhbHJlYWR5IGFkZGVkIDEgdG8g
c2NyYXRjaEdQUjIuCisgICAgICAgICAgICBqaXQuc3RvcmVQdHIoCisgICAgICAgICAgICAgICAg
YmFzZUdQUiwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleCgKKyAgICAg
ICAgICAgICAgICAgICAgc2NyYXRjaEdQUiwgc2NyYXRjaEdQUjIsIENDYWxsSGVscGVyczo6U2Nh
bGVQdHIsCisgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KC1zaXplb2Yo
dm9pZCopKSkpOworCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZVdpdGhCYXJy
aWVyID0gaml0Lmp1bXAoKTsKKyAgICAgICAgICAgIG5lZWRUb0ZsdXNoLmxpbmsoJmppdCk7CisK
KyAgICAgICAgICAgIGFsbG9jYXRvci5wcmVzZXJ2ZVVzZWRSZWdpc3RlcnNUb1NjcmF0Y2hCdWZm
ZXJGb3JDYWxsKGppdCwgc2NyYXRjaEJ1ZmZlciwgc2NyYXRjaEdQUjIpOworICAgICAgICAgICAg
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlR1BSKTsKKyAgICAgICAgICAgIGNh
bGxGbHVzaFdyaXRlQmFycmllckJ1ZmZlciA9IGppdC5jYWxsKCk7CisgICAgICAgICAgICBhbGxv
Y2F0b3IucmVzdG9yZVVzZWRSZWdpc3RlcnNGcm9tU2NyYXRjaEJ1ZmZlckZvckNhbGwoCisgICAg
ICAgICAgICAgICAgaml0LCBzY3JhdGNoQnVmZmVyLCBzY3JhdGNoR1BSMik7CisKKyAgICAgICAg
ICAgIGRvbmVXaXRoQmFycmllci5saW5rKCZqaXQpOworICAgICAgICAgICAgb3duZXJJc1JlbWVt
YmVyZWRPckluRWRlbi5saW5rKCZqaXQpOworCisgICAgICAgICAgICBzdGF0ZS5jYWxsYmFja3Mu
YXBwZW5kKAorICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewor
ICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbEZsdXNoV3JpdGVCYXJyaWVy
QnVmZmVyLCBvcGVyYXRpb25GbHVzaFdyaXRlQmFycmllckJ1ZmZlcik7CisgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoR0dDKQorICAgICAgICAKKyAgICAg
ICAgc3RhdGUuc3VjY2VlZCgpOworCisgICAgICAgIGlmIChuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSAhPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgeworICAg
ICAgICAgICAgc2xvd1BhdGgubGluaygmaml0KTsKKyAgICAgICAgICAgIGFsbG9jYXRvci5yZXN0
b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgbnVtYmVyT2ZQYWRkaW5nQnl0ZXMpOwor
ICAgICAgICAgICAgYWxsb2NhdG9yLnByZXNlcnZlVXNlZFJlZ2lzdGVyc1RvU2NyYXRjaEJ1ZmZl
ckZvckNhbGwoaml0LCBzY3JhdGNoQnVmZmVyLCBzY3JhdGNoR1BSKTsKKyNpZiBVU0UoSlNWQUxV
RTY0KQorICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKKyAgICAg
ICAgICAgICAgICBiYXNlR1BSLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihuZXdTdHJ1Y3R1cmUoKSksCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIobV9vZmZzZXQpLAorICAgICAgICAgICAgICAgIHZhbHVlUmVncy5ncHIoKSk7
CisjZWxzZQorICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKKyAg
ICAgICAgICAgICAgICBiYXNlR1BSLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cihuZXdTdHJ1Y3R1cmUoKSksCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIobV9vZmZzZXQpLAorICAgICAgICAgICAgICAgIHZhbHVlUmVncy5wYXls
b2FkR1BSKCksIHZhbHVlUmVncy50YWdHUFIoKSk7CisjZW5kaWYKKyAgICAgICAgICAgIENDYWxs
SGVscGVyczo6Q2FsbCBvcGVyYXRpb25DYWxsID0gaml0LmNhbGwoKTsKKyAgICAgICAgICAgIGFs
bG9jYXRvci5yZXN0b3JlVXNlZFJlZ2lzdGVyc0Zyb21TY3JhdGNoQnVmZmVyRm9yQ2FsbChqaXQs
IHNjcmF0Y2hCdWZmZXIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgc3RhdGUuc3VjY2VlZCgp
OworCisgICAgICAgICAgICBzdGF0ZS5jYWxsYmFja3MuYXBwZW5kKAorICAgICAgICAgICAgICAg
IFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICBsaW5r
QnVmZmVyLmxpbmsob3BlcmF0aW9uQ2FsbCwgb3BlcmF0aW9uUmVhbGxvY2F0ZVN0b3JhZ2VBbmRG
aW5pc2hQdXQpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBjYXNlIEFycmF5TGVuZ3RoOiB7CisgICAgICAgIGppdC5sb2FkUHRy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0
KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3Moc2NyYXRjaEdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHNjcmF0Y2hHUFIp
OworICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZCgKKyAgICAgICAgICAgIGppdC5i
cmFuY2gzMihDQ2FsbEhlbHBlcnM6Okxlc3NUaGFuLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMigwKSkpOworICAgICAgICBqaXQuYm94SW50MzIoc2NyYXRjaEdQUiwgdmFs
dWVSZWdzKTsKKyAgICAgICAgc3RhdGUuc3VjY2VlZCgpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgY2FzZSBTdHJpbmdMZW5ndGg6IHsKKyAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNTdHJpbmc6Om9mZnNldE9mTGVuZ3RoKCkpLCB2YWx1
ZVJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgaml0LmJveEludDMyKHZhbHVlUmVncy5wYXls
b2FkR1BSKCksIHZhbHVlUmVncyk7CisgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0gfQogICAgIAotICAgIHJldHVybiByZXN1bHQ7CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6flBvbHlt
b3JwaGljR2V0QnlJZExpc3QoKSB7IH0KK1BvbHltb3JwaGljQWNjZXNzOjpQb2x5bW9ycGhpY0Fj
Y2VzcygpIHsgfQorUG9seW1vcnBoaWNBY2Nlc3M6On5Qb2x5bW9ycGhpY0FjY2VzcygpIHsgfQog
Ci1NYWNyb0Fzc2VtYmxlckNvZGVQdHIgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6Y3VycmVudFNs
b3dQYXRoVGFyZ2V0KAotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykgY29uc3QKK01h
Y3JvQXNzZW1ibGVyQ29kZVB0ciBQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZVdpdGhDYXNl
cygKKyAgICBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8sIGNvbnN0IElkZW50aWZpZXImIGlkZW50LAorICAgIFZlY3RvcjxzdGQ6OnVuaXF1
ZV9wdHI8QWNjZXNzQ2FzZT4+IG9yaWdpbmFsQ2FzZXNUb0FkZCkKIHsKLSAgICBpZiAoaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm4gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRP
ZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSk7Ci0gICAgcmV0dXJuIG1f
bGlzdC5sYXN0KCkuc3R1YlJvdXRpbmUoKS0+Y29kZSgpLmNvZGUoKTsKKyAgICAvLyBUaGlzIG1l
dGhvZCB3aWxsIGFkZCB0aGUgb3JpZ2luYWxDYXNlc1RvQWRkIHRvIHRoZSBsaXN0IG9uZSBhdCBh
IHRpbWUgd2hpbGUgcHJlc2VydmluZyB0aGUKKyAgICAvLyBpbnZhcmlhbnRzOgorICAgIC8vIC0g
SWYgYSBuZXdseSBhZGRlZCBjYXNlIGNhblJlcGxhY2UoKSBhbnkgZXhpc3RpbmcgY2FzZSwgdGhl
biB0aGUgZXhpc3RpbmcgY2FzZSBpcyByZW1vdmVkIGJlZm9yZQorICAgIC8vICAgdGhlIG5ldyBj
YXNlIGlzIGFkZGVkLiBSZW1vdmFsIGRvZXNuJ3QgY2hhbmdlIG9yZGVyIG9mIHRoZSBsaXN0LiBB
bnkgbnVtYmVyIG9mIGV4aXN0aW5nIGNhc2VzCisgICAgLy8gICBjYW4gYmUgcmVtb3ZlZCB2aWEg
dGhlIGNhblJlcGxhY2UoKSBydWxlLgorICAgIC8vIC0gQ2FzZXMgaW4gdGhlIGxpc3QgYWx3YXlz
IGFwcGVhciBpbiBhc2NlbmRpbmcgb3JkZXIgb2YgdGltZSBvZiBhZGRpdGlvbi4gVGhlcmVmb3Jl
LCBpZiB5b3UKKyAgICAvLyAgIGNhc2NhZGUgdGhyb3VnaCB0aGUgY2FzZXMgaW4gcmV2ZXJzZSBv
cmRlciwgeW91IHdpbGwgZ2V0IHRoZSBtb3N0IHJlY2VudCBjYXNlcyBmaXJzdC4KKyAgICAvLyAt
IElmIHRoaXMgbWV0aG9kIGZhaWxzIChyZXR1cm5zIG51bGwsIGRvZXNuJ3QgYWRkIHRoZSBjYXNl
cyksIHRoZW4gYm90aCB0aGUgcHJldmlvdXMgY2FzZSBsaXN0CisgICAgLy8gICBhbmQgdGhlIHBy
ZXZpb3VzIHN0dWIgYXJlIGtlcHQgaW50YWN0IGFuZCB0aGUgbmV3IGNhc2VzIGFyZSBkZXN0cm95
ZWQuIEl0J3MgT0sgdG8gYXR0ZW1wdCB0bworICAgIC8vICAgYWRkIG1vcmUgdGhpbmdzIGFmdGVy
IGZhaWx1cmUuCisgICAgCisgICAgLy8gRmlyc3QsIHZlcmlmeSB0aGF0IHdlIGNhbiBnZW5lcmF0
ZSBjb2RlIGZvciBhbGwgb2YgdGhlIG5ldyBjYXNlcyB3aGlsZSBlbGltaW5hdGluZyBhbnkgb2Yg
dGhlCisgICAgLy8gbmV3IGNhc2VzIHRoYXQgcmVwbGFjZSBlYWNoIG90aGVyLgorICAgIFZlY3Rv
cjxzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4+IGNhc2VzVG9BZGQ7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG9yaWdpbmFsQ2FzZXNUb0FkZC5zaXplKCk7ICsraSkgeworICAgICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gbXlDYXNlID0gV1RGOjptb3ZlKG9yaWdpbmFs
Q2FzZXNUb0FkZFtpXSk7CisKKyAgICAgICAgLy8gQWRkIGl0IG9ubHkgaWYgaXQgaXMgbm90IHJl
cGxhY2VkIGJ5IHRoZSBzdWJzZXF1ZW50IGNhc2VzIGluIHRoZSBsaXN0LgorICAgICAgICBib29s
IGZvdW5kID0gZmFsc2U7CisgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGkgKyAxOyBqIDwgb3Jp
Z2luYWxDYXNlc1RvQWRkLnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICBpZiAob3JpZ2luYWxD
YXNlc1RvQWRkW2pdLT5jYW5SZXBsYWNlKCpteUNhc2UpKSB7CisgICAgICAgICAgICAgICAgZm91
bmQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGZvdW5kKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IAorICAgICAgICBpZiAobXlDYXNlLT5kb2VzQ2FsbHMoKSAmJiBzdHViSW5mby5wYXRjaC5zcGls
bE1vZGUgPT0gTmVlZFRvU3BpbGwpCisgICAgICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyKCk7CisKKyAgICAgICAgY2FzZXNUb0FkZC5hcHBlbmQoV1RGOjptb3ZlKG15Q2FzZSkp
OworICAgIH0KKworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJjYXNlc1RvQWRk
OiAiLCBsaXN0RHVtcChjYXNlc1RvQWRkKSwgIlxuIik7CisKKyAgICAvLyBJZiB0aGVyZSBhcmVu
J3QgYW55IGNhc2VzIHRvIGFkZCwgdGhlbiBmYWlsIG9uIHRoZSBncm91bmRzIHRoYXQgdGhlcmUn
cyBubyBwb2ludCB0byBnZW5lcmF0aW5nIGEKKyAgICAvLyBuZXcgc3R1YiB0aGF0IHdpbGwgYmUg
aWRlbnRpY2FsIHRvIHRoZSBvbGQgb25lLiBSZXR1cm5pbmcgbnVsbCBzaG91bGQgdGVsbCB0aGUg
Y2FsbGVyIHRvIGp1c3QKKyAgICAvLyBrZWVwIGRvaW5nIHdoYXQgdGhleSB3ZXJlIGRvaW5nIGJl
Zm9yZS4KKyAgICBpZiAoY2FzZXNUb0FkZC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBNYWNy
b0Fzc2VtYmxlckNvZGVQdHIoKTsKKworICAgIC8vIE5vdyBjb25zdHJ1Y3QgdGhlIGxpc3Qgb2Yg
Y2FzZXMgYXMgdGhleSBzaG91bGQgYXBwZWFyIGlmIHdlIGFyZSBzdWNjZXNzZnVsLiBUaGlzIG1l
YW5zIHB1dHRpbmcKKyAgICAvLyBhbGwgb2YgdGhlIHByZXZpb3VzIGNhc2VzIGluIHRoaXMgbGlz
dCBpbiBvcmRlciBidXQgZXhjbHVkaW5nIHRob3NlIHRoYXQgY2FuIGJlIHJlcGxhY2VkLCBhbmQK
KyAgICAvLyB0aGVuIGFkZGluZyB0aGUgbmV3IGNhc2VzLgorICAgIExpc3RUeXBlIG5ld0Nhc2Vz
OworICAgIGZvciAoYXV0byYgb2xkQ2FzZSA6IG1fbGlzdCkgeworICAgICAgICBib29sIGZvdW5k
ID0gZmFsc2U7CisgICAgICAgIGZvciAoYXV0byYgY2FzZVRvQWRkIDogY2FzZXNUb0FkZCkgewor
ICAgICAgICAgICAgaWYgKGNhc2VUb0FkZC0+Y2FuUmVwbGFjZSgqb2xkQ2FzZSkpIHsKKyAgICAg
ICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFmb3VuZCkKKyAgICAgICAgICAgIG5ld0Nh
c2VzLmFwcGVuZChvbGRDYXNlLT5jbG9uZSgpKTsKKyAgICB9CisgICAgZm9yIChhdXRvJiBjYXNl
VG9BZGQgOiBjYXNlc1RvQWRkKQorICAgICAgICBuZXdDYXNlcy5hcHBlbmQoV1RGOjptb3ZlKGNh
c2VUb0FkZCkpOworCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIm5ld0Nhc2Vz
OiAiLCBsaXN0RHVtcChuZXdDYXNlcyksICJcbiIpOworCisgICAgaWYgKG5ld0Nhc2VzLnNpemUo
KSA+IE9wdGlvbnM6Om1heEFjY2Vzc1ZhcmlhbnRMaXN0U2l6ZSgpKSB7CisgICAgICAgIGlmICh2
ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiVG9vIG1hbnkgY2FzZXMuXG4iKTsKKyAgICAg
ICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOworICAgIH0KKworICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciByZXN1bHQgPSByZWdlbmVyYXRlKHZtLCBjb2RlQmxvY2ssIHN0dWJJbmZv
LCBpZGVudCwgbmV3Q2FzZXMpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyKCk7CisKKyAgICBtX2xpc3QgPSBXVEY6Om1vdmUobmV3Q2FzZXMp
OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6
YWRkQWNjZXNzKGNvbnN0IEdldEJ5SWRBY2Nlc3MmIGFjY2VzcykKK01hY3JvQXNzZW1ibGVyQ29k
ZVB0ciBQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZVdpdGhDYXNlKAorICAgIFZNJiB2bSwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgY29uc3Qg
SWRlbnRpZmllciYgaWRlbnQsCisgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IG5ld0Fj
Y2VzcykKIHsKLSAgICBBU1NFUlQoIWlzRnVsbCgpKTsKLSAgICAvLyBNYWtlIHN1cmUgdGhhdCB0
aGUgcmVzaXppbmcgb3B0aW1pemVzIGZvciBzcGFjZSwgbm90IHRpbWUuCi0gICAgbV9saXN0LnJl
c2l6ZVRvRml0KG1fbGlzdC5zaXplKCkgKyAxKTsKLSAgICBtX2xpc3QubGFzdCgpID0gYWNjZXNz
OworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4+IG5ld0FjY2Vzc2VzOwor
ICAgIG5ld0FjY2Vzc2VzLmFwcGVuZChXVEY6Om1vdmUobmV3QWNjZXNzKSk7CisgICAgcmV0dXJu
IHJlZ2VuZXJhdGVXaXRoQ2FzZXModm0sIGNvZGVCbG9jaywgc3R1YkluZm8sIGlkZW50LCBXVEY6
Om1vdmUobmV3QWNjZXNzZXMpKTsKIH0KIAotYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojpp
c0Z1bGwoKSBjb25zdAorYm9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6dmlzaXRXZWFrKFZNJiB2bSkg
Y29uc3QKIHsKLSAgICBBU1NFUlQoc2l6ZSgpIDw9IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0la
RSk7Ci0gICAgcmV0dXJuIHNpemUoKSA9PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkU7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICgh
YXQoaSkudmlzaXRXZWFrKHZtKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6aXNBbG1v
c3RGdWxsKCkgY29uc3QKK3ZvaWQgUG9seW1vcnBoaWNBY2Nlc3M6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKIHsKLSAgICBBU1NFUlQoc2l6ZSgpIDw9IFBPTFlNT1JQSElDX0xJU1RfQ0FD
SEVfU0laRSk7Ci0gICAgcmV0dXJuIHNpemUoKSA+PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJ
WkUgLSAxOworICAgIG91dC5wcmludChSYXdQb2ludGVyKHRoaXMpLCAiOlsiKTsKKyAgICBDb21t
YVByaW50ZXIgY29tbWE7CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fbGlzdCkKKyAgICAgICAg
b3V0LnByaW50KGNvbW1hLCAqZW50cnkpOworICAgIG91dC5wcmludCgiXSIpOwogfQogCi1ib29s
IFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmRpZFNlbGZQYXRjaGluZygpIGNvbnN0CitNYWNyb0Fz
c2VtYmxlckNvZGVQdHIgUG9seW1vcnBoaWNBY2Nlc3M6OnJlZ2VuZXJhdGUoCisgICAgVk0mIHZt
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25z
dCBJZGVudGlmaWVyJiBpZGVudCwKKyAgICBQb2x5bW9ycGhpY0FjY2Vzczo6TGlzdFR5cGUmIGNh
c2VzKQogewotICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUoKTsgaS0tOykgewotICAgICAgICBp
ZiAoYXQoaSkudHlwZSgpID09IEdldEJ5SWRBY2Nlc3M6OlNpbXBsZUlubGluZSkKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJHZW5l
cmF0aW5nIGNvZGUgZm9yIGNhc2VzOiAiLCBsaXN0RHVtcChjYXNlcyksICJcbiIpOworICAgIAor
ICAgIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSBzdGF0ZTsKKworICAgIHN0YXRlLmFjY2VzcyA9IHRo
aXM7CisgICAgc3RhdGUuc3R1YkluZm8gPSAmc3R1YkluZm87CisgICAgc3RhdGUuaWRlbnQgPSAm
aWRlbnQ7CisgICAgCisgICAgc3RhdGUuYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1
YkluZm8ucGF0Y2guYmFzZUdQUik7CisgICAgc3RhdGUudmFsdWVSZWdzID0gSlNWYWx1ZVJlZ3Mo
CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHVi
SW5mby5wYXRjaC52YWx1ZVRhZ0dQUiksCisjZW5kaWYKKyAgICAgICAgc3RhdGljX2Nhc3Q8R1BS
UmVnPihzdHViSW5mby5wYXRjaC52YWx1ZUdQUikpOworCisgICAgU2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yIGFsbG9jYXRvcihzdHViSW5mby5wYXRjaC51c2VkUmVnaXN0ZXJzKTsKKyAgICBzdGF0
ZS5hbGxvY2F0b3IgPSAmYWxsb2NhdG9yOworICAgIGFsbG9jYXRvci5sb2NrKHN0YXRlLmJhc2VH
UFIpOworICAgIGFsbG9jYXRvci5sb2NrKHN0YXRlLnZhbHVlUmVncyk7CisKKyAgICBzdGF0ZS5z
Y3JhdGNoR1BSID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgIAorICAgIEND
YWxsSGVscGVycyBqaXQoJnZtLCBjb2RlQmxvY2spOworICAgIHN0YXRlLmppdCA9ICZqaXQ7CisK
KyAgICBzdGF0ZS5udW1iZXJPZlBhZGRpbmdCeXRlcyA9IGFsbG9jYXRvci5wcmVzZXJ2ZVJldXNl
ZFJlZ2lzdGVyc0J5UHVzaGluZyhqaXQpOworCisgICAgYm9vbCBhbGxHdWFyZGVkQnlTdHJ1Y3R1
cmVDaGVjayA9IHRydWU7CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IGNhc2VzKQorICAgICAgICBh
bGxHdWFyZGVkQnlTdHJ1Y3R1cmVDaGVjayAmPSBlbnRyeS0+Z3VhcmRlZEJ5U3RydWN0dXJlQ2hl
Y2soKTsKKworICAgIGlmIChjYXNlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gVGhpcyBpcyBz
dXBlciB1bmxpa2VseSwgYnV0IHdlIG1ha2UgaXQgbGVnYWwgYW55d2F5LgorICAgICAgICBzdGF0
ZS5mYWlsQW5kUmVwYXRjaC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgfSBlbHNlIGlmICghYWxs
R3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2sgfHwgY2FzZXMuc2l6ZSgpID09IDEpIHsKKyAgICAgICAg
Ly8gSWYgdGhlcmUgYXJlIGFueSBwcm94aWVzIGluIHRoZSBsaXN0LCB3ZSBjYW5ub3QganVzdCB1
c2UgYSBiaW5hcnkgc3dpdGNoIG92ZXIgdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgLy8gV2UgbmVl
ZCB0byByZXNvcnQgdG8gYSBjYXNjYWRlLiBBIGNhc2NhZGUgYWxzbyBoYXBwZW5zIHRvIGJlIG9w
dGltYWwgaWYgd2Ugb25seSBoYXZlIGp1c3QKKyAgICAgICAgLy8gb25lIGNhc2UuCisgICAgICAg
IENDYWxsSGVscGVyczo6SnVtcExpc3QgZmFsbFRocm91Z2g7CisKKyAgICAgICAgLy8gQ2FzY2Fk
ZSB0aHJvdWdoIHRoZSBsaXN0LCBwcmVmZXJyaW5nIG5ld2VyIGVudHJpZXMuCisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IGNhc2VzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgZmFsbFRo
cm91Z2gubGluaygmaml0KTsKKyAgICAgICAgICAgIGNhc2VzW2ldLT5nZW5lcmF0ZVdpdGhHdWFy
ZChzdGF0ZSwgZmFsbFRocm91Z2gpOworICAgICAgICB9CisgICAgICAgIHN0YXRlLmZhaWxBbmRS
ZXBhdGNoLmFwcGVuZChmYWxsVGhyb3VnaCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaml0Lmxv
YWQzMigKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdGF0ZS5iYXNlR1BSLCBK
U0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAorICAgICAgICAgICAgc3RhdGUuc2NyYXRjaEdQ
Uik7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8aW50NjRfdD4gY2FzZVZhbHVlcyhjYXNlcy5z
aXplKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2FzZXMuc2l6ZSgpOyAr
K2kpCisgICAgICAgICAgICBjYXNlVmFsdWVzW2ldID0gYml0d2lzZV9jYXN0PGludDMyX3Q+KGNh
c2VzW2ldLT5zdHJ1Y3R1cmUoKS0+aWQoKSk7CisgICAgICAgIAorICAgICAgICBCaW5hcnlTd2l0
Y2ggYmluYXJ5U3dpdGNoKHN0YXRlLnNjcmF0Y2hHUFIsIGNhc2VWYWx1ZXMsIEJpbmFyeVN3aXRj
aDo6SW50MzIpOworICAgICAgICB3aGlsZSAoYmluYXJ5U3dpdGNoLmFkdmFuY2Uoaml0KSkKKyAg
ICAgICAgICAgIGNhc2VzW2JpbmFyeVN3aXRjaC5jYXNlSW5kZXgoKV0tPmdlbmVyYXRlKHN0YXRl
KTsKKyAgICAgICAgc3RhdGUuZmFpbEFuZFJlcGF0Y2guYXBwZW5kKGJpbmFyeVN3aXRjaC5mYWxs
VGhyb3VnaCgpKTsKKyAgICB9CisKKyAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmxpbmsoJmppdCk7
CisKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgaW5saW5lIGNhY2hlIG9wdGltaXphdGlvbiBj
b2RlIGtub3dzIHRoYXQgd2UgYXJlIHRha2luZyBzbG93IHBhdGggYmVjYXVzZQorICAgIC8vIG9m
IHNvbWV0aGluZyB0aGF0IGlzbid0IHBhdGNoYWJsZS4gInNlZW4iIGJlaW5nIGZhbHNlIG1lYW5z
IHRoYXQgd2UgYnlwYXNzIHBhdGNoaW5nLiBUaGlzIGlzCisgICAgLy8gcHJldHR5IGdyb3NzIGJ1
dCBpdCBtZWFucyB0aGF0IHdlIGRvbid0IG5lZWQgdG8gaGF2ZSB0d28gc2xvdyBwYXRoIGVudHJ5
cG9pbnRzIC0gb25lIGZvcgorICAgIC8vIHBhdGNoaW5nIGFuZCBvbmUgZm9yIG5vcm1hbCBzbG93
IHN0dWZmLgorICAgIGppdC5zdG9yZTgoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoZmFsc2Up
LCAmc3R1YkluZm8uc2Vlbik7CisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGZhaWx1cmU7
CisgICAgaWYgKGFsbG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygpKSB7CisgICAgICAgIHN0YXRl
LmZhaWxBbmRSZXBhdGNoLmxpbmsoJmppdCk7CisgICAgICAgIHN0YXRlLnJlc3RvcmVTY3JhdGNo
KCk7CisgICAgfSBlbHNlCisgICAgICAgIGZhaWx1cmUgPSBzdGF0ZS5mYWlsQW5kUmVwYXRjaDsK
KyAgICBmYWlsdXJlLmFwcGVuZChqaXQuanVtcCgpKTsKKworICAgIExpbmtCdWZmZXIgbGlua0J1
ZmZlcih2bSwgaml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgaWYg
KGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkgeworICAgICAgICBpZiAodmVyYm9zZSkK
KyAgICAgICAgICAgIGRhdGFMb2coIkRpZCBmYWlsIHRvIGFsbG9jYXRlLlxuIik7CisgICAgICAg
IHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKICAgICB9Ci0gICAgcmV0dXJuIGZhbHNl
OworCisgICAgQ29kZUxvY2F0aW9uTGFiZWwgc3VjY2Vzc0xhYmVsID0KKyAgICAgICAgc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFD
YWxsVG9Eb25lKTsKKyAgICAgICAgCisgICAgbGlua0J1ZmZlci5saW5rKHN0YXRlLnN1Y2Nlc3Ms
IHN1Y2Nlc3NMYWJlbCk7CisKKyAgICBsaW5rQnVmZmVyLmxpbmsoCisgICAgICAgIGZhaWx1cmUs
CisgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJ
bmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKKyAgICAKKyAgICBmb3IgKGF1dG8gY2Fs
bGJhY2sgOiBzdGF0ZS5jYWxsYmFja3MpCisgICAgICAgIGNhbGxiYWNrKGxpbmtCdWZmZXIpOwor
ICAgIAorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlID0gRklOQUxJWkVfQ09ERV9GT1Io
CisgICAgICAgIGNvZGVCbG9jaywgbGlua0J1ZmZlciwKKyAgICAgICAgKCIlcyIsIHRvQ1N0cmlu
ZygiQWNjZXNzIHN0dWIgZm9yICIsICpjb2RlQmxvY2ssICIgIiwgc3R1YkluZm8uY29kZU9yaWdp
biwgIiB3aXRoIHJldHVybiBwb2ludCAiLCBzdWNjZXNzTGFiZWwsICI6ICIsIGxpc3REdW1wKGNh
c2VzKSkuZGF0YSgpKSk7CisKKyAgICBib29sIGRvZXNDYWxscyA9IGZhbHNlOworICAgIGZvciAo
YXV0byYgZW50cnkgOiBjYXNlcykKKyAgICAgICAgZG9lc0NhbGxzIHw9IGVudHJ5LT5kb2VzQ2Fs
bHMoKTsKKyAgICAKKyAgICBtX3N0dWJSb3V0aW5lID0gY3JlYXRlSklUU3R1YlJvdXRpbmUoY29k
ZSwgdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGRvZXNDYWxscyk7CisgICAgbV93
YXRjaHBvaW50cyA9IFdURjo6bW92ZShzdGF0ZS53YXRjaHBvaW50cyk7CisgICAgaWYgKHZlcmJv
c2UpCisgICAgICAgIGRhdGFMb2coIlJldHVybmluZzogIiwgY29kZS5jb2RlKCksICJcbiIpOwor
ICAgIHJldHVybiBjb2RlLmNvZGUoKTsKIH0KIAotYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0
Ojp2aXNpdFdlYWsoVk0mIHZtKSBjb25zdAorfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFj
ZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mIG91dCwgQWNjZXNzQ2FzZTo6QWNjZXNzVHlwZSB0eXBlKQogewotICAgIGZvciAo
dW5zaWduZWQgaSA9IHNpemUoKTsgaS0tOykgewotICAgICAgICBpZiAoIWF0KGkpLnZpc2l0V2Vh
ayh2bSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgc3dpdGNoICh0eXBlKSB7Cisg
ICAgY2FzZSBBY2Nlc3NDYXNlOjpMb2FkOgorICAgICAgICBvdXQucHJpbnQoIkxvYWQiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6VHJhbnNpdGlvbjoKKyAgICAgICAg
b3V0LnByaW50KCJUcmFuc2l0aW9uIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vz
c0Nhc2U6OlJlcGxhY2U6CisgICAgICAgIG91dC5wcmludCgiUmVwbGFjZSIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpNaXNzOgorICAgICAgICBvdXQucHJpbnQoIk1p
c3MiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6R2V0dGVyOgorICAg
ICAgICBvdXQucHJpbnQoIkdldHRlciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nl
c3NDYXNlOjpTZXR0ZXI6CisgICAgICAgIG91dC5wcmludCgiU2V0dGVyIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkN1c3RvbUdldHRlcjoKKyAgICAgICAgb3V0LnBy
aW50KCJDdXN0b21HZXR0ZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2Fz
ZTo6Q3VzdG9tU2V0dGVyOgorICAgICAgICBvdXQucHJpbnQoIkN1c3RvbVNldHRlciIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbkhpdDoKKyAgICAgICAgb3V0LnBy
aW50KCJJbkhpdCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbk1p
c3M6CisgICAgICAgIG91dC5wcmludCgiSW5NaXNzIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIEFjY2Vzc0Nhc2U6OkFycmF5TGVuZ3RoOgorICAgICAgICBvdXQucHJpbnQoIkFycmF5TGVu
Z3RoIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OlN0cmluZ0xlbmd0
aDoKKyAgICAgICAgb3V0LnByaW50KCJTdHJpbmdMZW5ndGgiKTsKKyAgICAgICAgcmV0dXJuOwog
ICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiB9CiAKLX0gLy8gbmFtZXNwYWNlIEpTQworfSAvLyBuYW1lc3BhY2UgV1RGCiAKICNlbmRp
ZiAvLyBFTkFCTEUoSklUKQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seW1vcnBoaWNBY2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAkocmV2aXNpb24gMTg5MzI0KQkoZnJvbSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oOjE4OTMy
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUG9seW1vcnBoaWNHZXRCeUlk
TGlzdF9oCisjZGVmaW5lIFBvbHltb3JwaGljR2V0QnlJZExpc3RfaAorCisjaWYgRU5BQkxFKEpJ
VCkKKworI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5o
IgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiCisjaW5jbHVkZSAiT3Bj
b2RlLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
CituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ29kZUJsb2NrOworc3RydWN0IFN0cnVjdHVyZVN0
dWJJbmZvOworCitjbGFzcyBHZXRCeUlkQWNjZXNzIHsKK3B1YmxpYzoKKyAgICBlbnVtIEFjY2Vz
c1R5cGUgeworICAgICAgICBJbnZhbGlkLAorICAgICAgICBTaW1wbGVJbmxpbmUsIC8vIFRoaXMg
aXMgdGhlIHBhdGNoZWQgaW5saW5lIGFjY2Vzcy4KKyAgICAgICAgU2ltcGxlU3R1YiwgLy8gVGhp
cyBpcyBhIHN0dWIuCisgICAgICAgIFdhdGNoZWRTdHViLAorICAgICAgICBHZXR0ZXIsCisgICAg
ICAgIEN1c3RvbUdldHRlciwKKyAgICAgICAgU2ltcGxlTWlzcywKKyAgICB9OworICAgIAorICAg
IEdldEJ5SWRBY2Nlc3MoKQorICAgICAgICA6IG1fdHlwZShJbnZhbGlkKQorICAgIHsKKyAgICB9
CisgICAgCisgICAgR2V0QnlJZEFjY2VzcygKKyAgICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBB
Y2Nlc3NUeXBlLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiwgU3RydWN0dXJlKiwKKyAgICAg
ICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQoKSk7CisgICAgCisgICAgfkdldEJ5SWRBY2Nlc3MoKTsKKyAgICAKKyAgICBzdGF0
aWMgR2V0QnlJZEFjY2VzcyBmcm9tU3RydWN0dXJlU3R1YkluZm8oU3RydWN0dXJlU3R1YkluZm8m
KTsKKyAgICAKKyAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV90eXBlICE9IEludmFs
aWQ7IH0KKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9Cisg
ICAgCisgICAgQWNjZXNzVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAg
CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZS5n
ZXQoKTsgfQorICAgIAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25k
aXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQorICAgIAorICAgIEpJ
VFN0dWJSb3V0aW5lKiBzdHViUm91dGluZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQo
aXNTZXQoKSk7CisgICAgICAgIHJldHVybiBtX3N0dWJSb3V0aW5lLmdldCgpOworICAgIH0KKyAg
ICAKKyAgICBib29sIGRvZXNDYWxscygpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBHZXR0ZXIg
fHwgdHlwZSgpID09IEN1c3RvbUdldHRlcjsgfQorICAgIAorICAgIGJvb2wgdmlzaXRXZWFrKFZN
JikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKKyAgICAK
KyAgICBBY2Nlc3NUeXBlIG1fdHlwZTsKKyAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0
cnVjdHVyZTsKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsK
KyAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IG1fc3R1YlJvdXRpbmU7Cit9OworCitjbGFzcyBQ
b2x5bW9ycGhpY0dldEJ5SWRMaXN0IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICAvLyBFaXRoZXIgY3JlYXRlcyBhIG5ldyBwb2x5bW9ycGhpYyBnZXQgbGlzdCwg
b3IgcmV0dXJucyB0aGUgb25lIHRoYXQgaXMgYWxyZWFkeSBpbgorICAgIC8vIHBsYWNlLgorICAg
IHN0YXRpYyBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBmcm9tKFN0cnVjdHVyZVN0dWJJbmZvJik7
CisgICAgCisgICAgflBvbHltb3JwaGljR2V0QnlJZExpc3QoKTsKKyAgICAKKyAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIgY3VycmVudFNsb3dQYXRoVGFyZ2V0KFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbykgY29uc3Q7CisgICAgCisgICAgdm9pZCBhZGRBY2Nlc3MoY29uc3QgR2V0QnlJZEFj
Y2VzcyYpOworICAgIAorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5p
c0VtcHR5KCk7IH0KKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9saXN0LnNp
emUoKTsgfQorICAgIGJvb2wgaXNGdWxsKCkgY29uc3Q7CisgICAgYm9vbCBpc0FsbW9zdEZ1bGwo
KSBjb25zdDsgLy8gVHJ1ZSBpZiBhZGRpbmcgYW4gZWxlbWVudCB3b3VsZCBtYWtlIGlzRnVsbCgp
IHRydWUuCisgICAgY29uc3QgR2V0QnlJZEFjY2VzcyYgYXQodW5zaWduZWQgaSkgY29uc3QgeyBy
ZXR1cm4gbV9saXN0W2ldOyB9CisgICAgY29uc3QgR2V0QnlJZEFjY2VzcyYgb3BlcmF0b3JbXSh1
bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2xpc3RbaV07IH0KKyAgICAKKyAgICBib29sIGRp
ZFNlbGZQYXRjaGluZygpIGNvbnN0OyAvLyBBcmUgYW55IG9mIHRoZSBhY2Nlc3NlcyBTaW1wbGVJ
bmxpbmU/CisgICAgCisgICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25zdDsKKworcHJpdmF0ZToK
KyAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOworICAgIAorICAgIFBvbHltb3JwaGljR2V0QnlJ
ZExpc3QoU3RydWN0dXJlU3R1YkluZm8mKTsKKyAgICAKKyAgICBWZWN0b3I8R2V0QnlJZEFjY2Vz
cywgMj4gbV9saXN0OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFC
TEUoSklUKQorCisjZW5kaWYgLy8gUG9seW1vcnBoaWNHZXRCeUlkTGlzdF9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5o
CSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNBY2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsOCArMjMsOCBAQAogICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCiAgKi8KIAotI2lmbmRlZiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0X2gKLSNkZWZpbmUg
UG9seW1vcnBoaWNHZXRCeUlkTGlzdF9oCisjaWZuZGVmIFBvbHltb3JwaGljQWNjZXNzX2gKKyNk
ZWZpbmUgUG9seW1vcnBoaWNBY2Nlc3NfaAogCiAjaWYgRU5BQkxFKEpJVCkKIApAQCAtMzgsOTYg
KzM4LDI4MCBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENvZGVCbG9jazsKK2NsYXNzIFBv
bHltb3JwaGljQWNjZXNzOworY2xhc3MgV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOwog
c3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvOwogCi1jbGFzcyBHZXRCeUlkQWNjZXNzIHsKK3N0cnVj
dCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU7CisKK2NsYXNzIEFjY2Vzc0Nhc2UgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEFjY2Vzc0Nhc2UpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgogICAgIGVudW0gQWNjZXNzVHlwZSB7Ci0gICAgICAgIEludmFsaWQsCi0gICAg
ICAgIFNpbXBsZUlubGluZSwgLy8gVGhpcyBpcyB0aGUgcGF0Y2hlZCBpbmxpbmUgYWNjZXNzLgot
ICAgICAgICBTaW1wbGVTdHViLCAvLyBUaGlzIGlzIGEgc3R1Yi4KLSAgICAgICAgV2F0Y2hlZFN0
dWIsCisgICAgICAgIExvYWQsCisgICAgICAgIFRyYW5zaXRpb24sCisgICAgICAgIFJlcGxhY2Us
CisgICAgICAgIE1pc3MsCiAgICAgICAgIEdldHRlciwKKyAgICAgICAgU2V0dGVyLAogICAgICAg
ICBDdXN0b21HZXR0ZXIsCi0gICAgICAgIFNpbXBsZU1pc3MsCisgICAgICAgIEN1c3RvbVNldHRl
ciwKKyAgICAgICAgSW5IaXQsCisgICAgICAgIEluTWlzcywKKyAgICAgICAgQXJyYXlMZW5ndGgs
CisgICAgICAgIFN0cmluZ0xlbmd0aAogICAgIH07Ci0gICAgCi0gICAgR2V0QnlJZEFjY2Vzcygp
Ci0gICAgICAgIDogbV90eXBlKEludmFsaWQpCisKKyAgICBzdGF0aWMgYm9vbCBpc0dldChBY2Nl
c3NUeXBlIHR5cGUpCiAgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2Fz
ZSBUcmFuc2l0aW9uOgorICAgICAgICBjYXNlIFJlcGxhY2U6CisgICAgICAgIGNhc2UgU2V0dGVy
OgorICAgICAgICBjYXNlIEN1c3RvbVNldHRlcjoKKyAgICAgICAgY2FzZSBJbkhpdDoKKyAgICAg
ICAgY2FzZSBJbk1pc3M6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2Ug
TG9hZDoKKyAgICAgICAgY2FzZSBNaXNzOgorICAgICAgICBjYXNlIEdldHRlcjoKKyAgICAgICAg
Y2FzZSBDdXN0b21HZXR0ZXI6CisgICAgICAgIGNhc2UgQXJyYXlMZW5ndGg6CisgICAgICAgIGNh
c2UgU3RyaW5nTGVuZ3RoOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KICAg
ICB9Ci0gICAgCi0gICAgR2V0QnlJZEFjY2VzcygKLSAgICAgICAgVk0mLCBKU0NlbGwqIG93bmVy
LCBBY2Nlc3NUeXBlLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiwgU3RydWN0dXJlKiwKKwor
ICAgIHN0YXRpYyBib29sIGlzUHV0KEFjY2Vzc1R5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3
aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIExvYWQ6CisgICAgICAgIGNhc2UgTWlzczoKKyAg
ICAgICAgY2FzZSBHZXR0ZXI6CisgICAgICAgIGNhc2UgQ3VzdG9tR2V0dGVyOgorICAgICAgICBj
YXNlIEluSGl0OgorICAgICAgICBjYXNlIEluTWlzczoKKyAgICAgICAgY2FzZSBBcnJheUxlbmd0
aDoKKyAgICAgICAgY2FzZSBTdHJpbmdMZW5ndGg6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIGNhc2UgVHJhbnNpdGlvbjoKKyAgICAgICAgY2FzZSBSZXBsYWNlOgorICAgICAg
ICBjYXNlIFNldHRlcjoKKyAgICAgICAgY2FzZSBDdXN0b21TZXR0ZXI6CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzSW4oQWNj
ZXNzVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNh
c2UgTG9hZDoKKyAgICAgICAgY2FzZSBNaXNzOgorICAgICAgICBjYXNlIEdldHRlcjoKKyAgICAg
ICAgY2FzZSBDdXN0b21HZXR0ZXI6CisgICAgICAgIGNhc2UgVHJhbnNpdGlvbjoKKyAgICAgICAg
Y2FzZSBSZXBsYWNlOgorICAgICAgICBjYXNlIFNldHRlcjoKKyAgICAgICAgY2FzZSBDdXN0b21T
ZXR0ZXI6CisgICAgICAgIGNhc2UgQXJyYXlMZW5ndGg6CisgICAgICAgIGNhc2UgU3RyaW5nTGVu
Z3RoOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIEluSGl0OgorICAg
ICAgICBjYXNlIEluTWlzczoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9Cisg
ICAgfQorCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBnZXQoCisgICAg
ICAgIFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgUHJvcGVydHlPZmZzZXQsIFN0cnVj
dHVyZSosCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiA9IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0KCksCisgICAgICAgIGJvb2wgdmlhUHJveHkgPSBmYWxzZSwK
KyAgICAgICAgV2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCA9IG51bGxwdHIsCisgICAgICAg
IFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jID0gbnVsbHB0ciwKKyAgICAgICAgSlNPYmplY3Qq
IGN1c3RvbVNsb3RCYXNlID0gbnVsbHB0cik7CisKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PEFjY2Vzc0Nhc2U+IHJlcGxhY2UoVk0mLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqLCBQcm9w
ZXJ0eU9mZnNldCk7CisKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHRy
YW5zaXRpb24oCisgICAgICAgIFZNJiwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBvbGRTdHJ1
Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCwKICAgICAgICAg
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQoKSk7CisKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHNldHRl
cigKKyAgICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBTdHJ1Y3R1cmUqLCBQ
cm9wZXJ0eU9mZnNldCwKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQm
LCBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyA9IG51bGxwdHIsCisgICAgICAgIEpTT2Jq
ZWN0KiBjdXN0b21TbG90QmFzZSA9IG51bGxwdHIpOworCisgICAgc3RhdGljIHN0ZDo6dW5pcXVl
X3B0cjxBY2Nlc3NDYXNlPiBpbigKKyAgICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NU
eXBlLCBTdHJ1Y3R1cmUqLAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpKTsKKworICAgIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8QWNjZXNzQ2FzZT4gZ2V0TGVuZ3RoKFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNz
VHlwZSk7CiAgICAgCi0gICAgfkdldEJ5SWRBY2Nlc3MoKTsKLSAgICAKLSAgICBzdGF0aWMgR2V0
QnlJZEFjY2VzcyBmcm9tU3RydWN0dXJlU3R1YkluZm8oU3RydWN0dXJlU3R1YkluZm8mKTsKKyAg
ICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGZyb21TdHJ1Y3R1cmVTdHViSW5m
byhWTSYsIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZVN0dWJJbmZvJik7CisKKyAgICB+QWNjZXNz
Q2FzZSgpOwogICAgIAotICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgIT0g
SW52YWxpZDsgfQotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7
IH0KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gY2xvbmUoKSBjb25zdDsKICAgICAK
ICAgICBBY2Nlc3NUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQorICAgIGJvb2wg
dmlhUHJveHkoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+dmlhUHJv
eHkgOiBmYWxzZTsgfQogICAgIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7IH0KLSAgICAKLSAgICBjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25T
ZXQ7IH0KLSAgICAKLSAgICBKSVRTdHViUm91dGluZSogc3R1YlJvdXRpbmUoKSBjb25zdAorICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3R5cGUg
PT0gVHJhbnNpdGlvbikKKyAgICAgICAgICAgIHJldHVybiBtX3N0cnVjdHVyZS0+cHJldmlvdXNJ
RCgpOworICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7CisgICAgfQorICAgIGJvb2wg
Z3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2soKSBjb25zdDsKKworICAgIFN0cnVjdHVyZSogbmV3U3Ry
dWN0dXJlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChpc1NldCgpKTsKLSAgICAgICAg
cmV0dXJuIG1fc3R1YlJvdXRpbmUuZ2V0KCk7CisgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gVHJh
bnNpdGlvbik7CisgICAgICAgIHJldHVybiBtX3N0cnVjdHVyZS5nZXQoKTsKICAgICB9CiAgICAg
Ci0gICAgYm9vbCBkb2VzQ2FsbHMoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gR2V0dGVyIHx8
IHR5cGUoKSA9PSBDdXN0b21HZXR0ZXI7IH0KKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQorCisgICAg
V2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPmFkZGl0aW9uYWxTZXQuZ2V0KCkgOiBudWxscHRy
OworICAgIH0KKworICAgIEpTT2JqZWN0KiBjdXN0b21TbG90QmFzZSgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPmN1c3RvbVNsb3RCYXNlLmdl
dCgpIDogbnVsbHB0cjsKKyAgICB9CisKKyAgICBKU09iamVjdCogYWx0ZXJuYXRlQmFzZSgpIGNv
bnN0OwogICAgIAotICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgY29uc3Q7CisgICAgYm9vbCBkb2Vz
Q2FsbHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKCkpIHsKKyAgICAgICAg
Y2FzZSBHZXR0ZXI6CisgICAgICAgIGNhc2UgU2V0dGVyOgorICAgICAgICBjYXNlIEN1c3RvbUdl
dHRlcjoKKyAgICAgICAgY2FzZSBDdXN0b21TZXR0ZXI6CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKCkgY29uc3QKKyAgICB7
CisgICAgICAgIGlmICghbV9yYXJlRGF0YSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICByZXR1cm4gbV9yYXJlRGF0YS0+Y2FsbExpbmtJbmZvLmdldCgpOworICAgIH0KIAor
ICAgIC8vIElmIHRoaXMgbWV0aG9kIHJldHVybnMgdHJ1ZSwgdGhlbiBpdCdzIGEgZ29vZCBpZGVh
IHRvIHJlbW92ZSAnb3RoZXInIGZyb20gdGhlIGFjY2VzcyBvbmNlICd0aGlzJworICAgIC8vIGlz
IGFkZGVkLiBUaGlzIG1ldGhvZCBhc3N1bWVzIHRoYXQgaW4gY2FzZSBvZiBjb250cmFkaWN0aW9u
cywgJ3RoaXMnIHJlcHJlc2VudHMgYSBuZXdlciwgYW5kIHNvCisgICAgLy8gbW9yZSB1c2VmdWws
IHRydXRoLiBUaGlzIG1ldGhvZCBjYW4gYmUgY29uc2VydmF0aXZlOyBpdCB3aWxsIHJldHVybiBm
YWxzZSB3aGVuIGl0IGRvdWJ0LgorICAgIGJvb2wgY2FuUmVwbGFjZShjb25zdCBBY2Nlc3NDYXNl
JiBvdGhlcik7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAg
CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7Ci0gICAgCi0gICAgQWNjZXNz
VHlwZSBtX3R5cGU7CisgICAgZnJpZW5kIGNsYXNzIFBvbHltb3JwaGljQWNjZXNzOworCisgICAg
QWNjZXNzQ2FzZSgpOworCisgICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25zdDsKKworICAgIC8v
IEZhbGwgdGhyb3VnaCBvbiBzdWNjZXNzLiBUd28ga2luZHMgb2YgZmFpbHVyZXMgYXJlIHN1cHBv
cnRlZDogZmFsbC10aHJvdWdoLCB3aGljaCBtZWFucyB0aGF0IHdlCisgICAgLy8gc2hvdWxkIHRy
eSBhIGRpZmZlcmVudCBjYXNlOyBhbmQgZmFpbHVyZSwgd2hpY2ggbWVhbnMgdGhhdCB0aGlzIHdh
cyB0aGUgcmlnaHQgY2FzZSBidXQgaXQgbmVlZHMKKyAgICAvLyBoZWxwIGZyb20gdGhlIHNsb3cg
cGF0aC4KKyAgICB2b2lkIGdlbmVyYXRlV2l0aEd1YXJkKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYs
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFsbFRocm91Z2gpOworCisgICAgLy8gRmFsbCB0
aHJvdWdoIG9uIHN1Y2Nlc3MsIGFkZCBhIGp1bXAgdG8gdGhlIGZhaWx1cmUgbGlzdCBvbiBmYWls
dXJlLgorICAgIHZvaWQgZ2VuZXJhdGUoQWNjZXNzR2VuZXJhdGlvblN0YXRlJik7CisgICAgCisg
ICAgQWNjZXNzVHlwZSBtX3R5cGUgeyBMb2FkIH07CisgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZz
ZXQgeyBpbnZhbGlkT2Zmc2V0IH07CisKKyAgICAvLyBVc3VhbGx5IHRoaXMgaXMgdGhlIHN0cnVj
dHVyZSB0aGF0IHdlIGV4cGVjdCB0aGUgYmFzZSBvYmplY3QgdG8gaGF2ZS4gQnV0LCB0aGlzIGlz
IHRoZSAqbmV3KgorICAgIC8vIHN0cnVjdHVyZSBmb3IgYSB0cmFuc2l0aW9uIGFuZCB3ZSByZWx5
IG9uIHRoZSBmYWN0IHRoYXQgaXQgaGFzIGEgc3Ryb25nIHJlZmVyZW5jZSB0byB0aGUgb2xkCisg
ICAgLy8gc3RydWN0dXJlLiBGb3IgcHJveGllcywgdGhpcyBpcyB0aGUgc3RydWN0dXJlIG9mIHRo
ZSBvYmplY3QgYmVoaW5kIHRoZSBwcm94eS4KICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBt
X3N0cnVjdHVyZTsKKwogICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9u
U2V0OwotICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gbV9zdHViUm91dGluZTsKKworICAgIGNs
YXNzIFJhcmVEYXRhIHsKKyAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgcHVi
bGljOgorICAgICAgICBSYXJlRGF0YSgpCisgICAgICAgICAgICA6IHZpYVByb3h5KGZhbHNlKQor
ICAgICAgICB7CisgICAgICAgICAgICBjdXN0b21BY2Nlc3Nvci5vcGFxdWUgPSBudWxscHRyOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIHZpYVByb3h5OworICAgICAgICBSZWZQ
dHI8V2F0Y2hwb2ludFNldD4gYWRkaXRpb25hbFNldDsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PENhbGxMaW5rSW5mbz4gY2FsbExpbmtJbmZvOworICAgICAgICB1bmlvbiB7CisgICAgICAgICAg
ICBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYyBnZXR0ZXI7CisgICAgICAgICAgICBQdXRQcm9w
ZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyBzZXR0ZXI7CisgICAgICAgICAgICB2b2lkKiBvcGFxdWU7
CisgICAgICAgIH0gY3VzdG9tQWNjZXNzb3I7CisgICAgICAgIFdyaXRlQmFycmllcjxKU09iamVj
dD4gY3VzdG9tU2xvdEJhc2U7CisgICAgfTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxSYXJlRGF0
YT4gbV9yYXJlRGF0YTsKIH07CiAKLWNsYXNzIFBvbHltb3JwaGljR2V0QnlJZExpc3QgeworY2xh
c3MgUG9seW1vcnBoaWNBY2Nlc3MgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBvbHltb3Jw
aGljQWNjZXNzKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICAv
LyBFaXRoZXIgY3JlYXRlcyBhIG5ldyBwb2x5bW9ycGhpYyBnZXQgbGlzdCwgb3IgcmV0dXJucyB0
aGUgb25lIHRoYXQgaXMgYWxyZWFkeSBpbgotICAgIC8vIHBsYWNlLgotICAgIHN0YXRpYyBQb2x5
bW9ycGhpY0dldEJ5SWRMaXN0KiBmcm9tKFN0cnVjdHVyZVN0dWJJbmZvJik7Ci0gICAgCi0gICAg
flBvbHltb3JwaGljR2V0QnlJZExpc3QoKTsKLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgY3VycmVudFNsb3dQYXRoVGFyZ2V0KFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykgY29u
c3Q7Ci0gICAgCi0gICAgdm9pZCBhZGRBY2Nlc3MoY29uc3QgR2V0QnlJZEFjY2VzcyYpOworICAg
IFBvbHltb3JwaGljQWNjZXNzKCk7CisgICAgflBvbHltb3JwaGljQWNjZXNzKCk7CisKKyAgICAv
LyBUaGlzIG1heSByZXR1cm4gbnVsbCwgaW4gd2hpY2ggY2FzZSB0aGUgb2xkIHN0dWIgcm91dGlu
ZSBpcyBsZWZ0IGludGFjdC4gWW91IGFyZSByZXF1aXJlZCB0bworICAgIC8vIHBhc3MgYSB2ZWN0
b3Igb2Ygbm9uLW51bGwgYWNjZXNzIGNhc2VzLiBUaGlzIHdpbGwgcHJ1bmUgdGhlIGFjY2VzcyBj
YXNlcyBieSByZWplY3RpbmcgYW55IGNhc2UKKyAgICAvLyBpbiB0aGUgbGlzdCB0aGF0IGlzIHN1
YnN1bWVkIGJ5IGEgbGF0ZXIgY2FzZSBpbiB0aGUgbGlzdC4KKyAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgcmVnZW5lcmF0ZVdpdGhDYXNlcygKKyAgICAgICAgVk0mLCBDb2RlQmxvY2sqLCBTdHJ1
Y3R1cmVTdHViSW5mbyYsIGNvbnN0IElkZW50aWZpZXImLCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRy
PEFjY2Vzc0Nhc2U+Pik7CisKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVnZW5lcmF0ZVdp
dGhDYXNlKAorICAgICAgICBWTSYsIENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgY29u
c3QgSWRlbnRpZmllciYsIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPik7CiAgICAgCiAgICAg
Ym9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9saXN0LmlzRW1wdHkoKTsgfQogICAgIHVu
c2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2xpc3Quc2l6ZSgpOyB9Ci0gICAgYm9vbCBp
c0Z1bGwoKSBjb25zdDsKLSAgICBib29sIGlzQWxtb3N0RnVsbCgpIGNvbnN0OyAvLyBUcnVlIGlm
IGFkZGluZyBhbiBlbGVtZW50IHdvdWxkIG1ha2UgaXNGdWxsKCkgdHJ1ZS4KLSAgICBjb25zdCBH
ZXRCeUlkQWNjZXNzJiBhdCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2xpc3RbaV07IH0K
LSAgICBjb25zdCBHZXRCeUlkQWNjZXNzJiBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0IHsg
cmV0dXJuIG1fbGlzdFtpXTsgfQotICAgIAotICAgIGJvb2wgZGlkU2VsZlBhdGNoaW5nKCkgY29u
c3Q7IC8vIEFyZSBhbnkgb2YgdGhlIGFjY2Vzc2VzIFNpbXBsZUlubGluZT8KLSAgICAKKyAgICBj
b25zdCBBY2Nlc3NDYXNlJiBhdCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiAqbV9saXN0W2ld
OyB9CisgICAgY29uc3QgQWNjZXNzQ2FzZSYgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBjb25zdCB7
IHJldHVybiAqbV9saXN0W2ldOyB9CisKKyAgICAvLyBJZiB0aGlzIHJldHVybnMgZmFsc2UgdGhl
biB3ZSBhcmUgcmVxdWVzdGluZyBhIHJlc2V0IG9mIHRoZSBvd25pbmcgU3RydWN0dXJlU3R1Yklu
Zm8uCiAgICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25zdDsKIAorICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdDsKKwogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQWNjZXNz
Q2FzZTsKICAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOworICAgIGZyaWVuZCBzdHJ1Y3QgQWNj
ZXNzR2VuZXJhdGlvblN0YXRlOwogICAgIAotICAgIFBvbHltb3JwaGljR2V0QnlJZExpc3QoU3Ry
dWN0dXJlU3R1YkluZm8mKTsKLSAgICAKLSAgICBWZWN0b3I8R2V0QnlJZEFjY2VzcywgMj4gbV9s
aXN0OworICAgIHR5cGVkZWYgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiwgMj4g
TGlzdFR5cGU7CisKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVnZW5lcmF0ZSgKKyAgICAg
ICAgVk0mLCBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIGNvbnN0IElkZW50aWZpZXIm
LCBMaXN0VHlwZSYgY2FzZXMpOworCisgICAgTGlzdFR5cGUgbV9saXN0OworICAgIFJlZlB0cjxK
SVRTdHViUm91dGluZT4gbV9zdHViUm91dGluZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2F0Y2hw
b2ludHNPblN0cnVjdHVyZVN0dWJJbmZvPiBtX3dhdGNocG9pbnRzOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRT
dHJlYW0mLCBKU0M6OkFjY2Vzc0Nhc2U6OkFjY2Vzc1R5cGUpOworCit9IC8vIG5hbWVzcGFjZSBX
VEYKKwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKLSNlbmRpZiAvLyBQb2x5bW9ycGhpY0dldEJ5
SWRMaXN0X2gKKyNlbmRpZiAvLyBQb2x5bW9ycGhpY0FjY2Vzc19oCiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNB
Y2Nlc3NTdHJ1Y3R1cmVMaXN0LmgJKHJldmlzaW9uIDE4OTU0MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwxMTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdF9o
Ci0jZGVmaW5lIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdF9oCi0KLSNpbmNsdWRlICJK
SVRTdHViUm91dGluZS5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgotI2luY2x1ZGUgIlN0cnVj
dHVyZUNoYWluLmgiCi0KLSNkZWZpbmUgUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIDgKLQot
bmFtZXNwYWNlIEpTQyB7Ci0KLS8vICpTaWdoKiwgSWYgdGhlIEpJVCBpcyBlbmFibGVkIHdlIG5l
ZWQgdG8gdHJhY2sgdGhlIHN0dWJSb3VudGluZSAob2YgdHlwZSBDb2RlTG9jYXRpb25MYWJlbCks
Ci0vLyBJZiB0aGUgSklUIGlzIG5vdCBpbiB1c2Ugd2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0aGUg
dmFyaWFibGUgKHRoYXQgc2FpZCwgaWYgdGhlIEpJVCBpcyBub3QgaW4gdXNlIHdlIGRvbid0Ci0v
LyBjdXJlbnRseSBhY3R1YWxseSB1c2UgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0cywg
d2hpY2ggd2Ugc2hvdWxkKS4gIEFueXdheSwgdGhpcyBzZWVtcyBsaWtlIHRoZSBiZXN0Ci0vLyBz
b2x1dGlvbiBmb3Igbm93IC0gd2lsbCBuZWVkIHRvIHNvbWV0aGluZyBzbWFydGVyIGlmL3doZW4g
d2UgYWN0dWFsbHkgd2FudCBtaXhlZC1tb2RlIG9wZXJhdGlvbi4KLQotI2lmIEVOQUJMRShKSVQp
Ci0vLyBTdHJ1Y3R1cmUgdXNlZCBieSBvcF9nZXRfYnlfaWRfc2VsZl9saXN0IGFuZCBvcF9nZXRf
YnlfaWRfcHJvdG9fbGlzdCBpbnN0cnVjdGlvbiB0byBob2xkIGRhdGEgb2ZmIHRoZSBtYWluIG9w
Y29kZSBzdHJlYW0uCi1zdHJ1Y3QgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0IHsKLSAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBzdHJ1Y3QgUG9seW1vcnBo
aWNTdHViSW5mbyB7Ci0gICAgICAgIGJvb2wgaXNEaXJlY3QgOiAxOwotICAgICAgICB1bnNpZ25l
ZCBjb3VudCA6IDMxOwotICAgICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5l
OwotICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBiYXNlOwotICAgICAgICBXcml0ZUJh
cnJpZXI8U3RydWN0dXJlQ2hhaW4+IGNoYWluOwotCi0gICAgICAgIFBvbHltb3JwaGljU3R1Yklu
Zm8oKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNldChWTSYgdm0sIEpT
Q2VsbCogb3duZXIsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IF9zdHViUm91dGluZSwgU3Ry
dWN0dXJlKiBfYmFzZSwgYm9vbCBfaXNEaXJlY3QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0
dWJSb3V0aW5lID0gX3N0dWJSb3V0aW5lOwotICAgICAgICAgICAgYmFzZS5zZXQodm0sIG93bmVy
LCBfYmFzZSk7Ci0gICAgICAgICAgICBpc0RpcmVjdCA9IF9pc0RpcmVjdDsKLSAgICAgICAgICAg
IGNvdW50ID0gMDsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdm9pZCBzZXQoVk0mIHZt
LCBKU0NlbGwqIG93bmVyLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBfc3R1YlJvdXRpbmUs
IFN0cnVjdHVyZSogX2Jhc2UsIFN0cnVjdHVyZUNoYWluKiBfY2hhaW4sIGJvb2wgX2lzRGlyZWN0
LCB1bnNpZ25lZCBfY291bnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0dWJSb3V0aW5lID0g
X3N0dWJSb3V0aW5lOwotICAgICAgICAgICAgYmFzZS5zZXQodm0sIG93bmVyLCBfYmFzZSk7Ci0g
ICAgICAgICAgICBjaGFpbi5zZXQodm0sIG93bmVyLCBfY2hhaW4pOwotICAgICAgICAgICAgaXNE
aXJlY3QgPSBfaXNEaXJlY3Q7Ci0gICAgICAgICAgICBjb3VudCA9IF9jb3VudDsKLSAgICAgICAg
fQotICAgIH0gbGlzdFtQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkVdOwotICAgIAotICAgIFBv
bHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCgpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBQ
b2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBQYXNz
UmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSwgU3RydWN0dXJlKiBmaXJzdEJhc2Us
IGJvb2wgaXNEaXJlY3QpCi0gICAgewotICAgICAgICBsaXN0WzBdLnNldCh2bSwgb3duZXIsIHN0
dWJSb3V0aW5lLCBmaXJzdEJhc2UsIGlzRGlyZWN0KTsKLSAgICB9Ci0KLSAgICBQb2x5bW9ycGhp
Y0FjY2Vzc1N0cnVjdHVyZUxpc3QoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBQYXNzUmVmUHRyPEpJ
VFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSwgU3RydWN0dXJlKiBmaXJzdEJhc2UsIFN0cnVjdHVy
ZUNoYWluKiBmaXJzdENoYWluLCBib29sIGlzRGlyZWN0LCB1bnNpZ25lZCBjb3VudCkKLSAgICB7
Ci0gICAgICAgIGxpc3RbMF0uc2V0KHZtLCBvd25lciwgc3R1YlJvdXRpbmUsIGZpcnN0QmFzZSwg
Zmlyc3RDaGFpbiwgaXNEaXJlY3QsIGNvdW50KTsKLSAgICB9Ci0KLSAgICBib29sIHZpc2l0V2Vh
ayhpbnQgY291bnQpCi0gICAgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyAr
K2kpIHsKLSAgICAgICAgICAgIFBvbHltb3JwaGljU3R1YkluZm8mIGluZm8gPSBsaXN0W2ldOwot
ICAgICAgICAgICAgaWYgKCFpbmZvLmJhc2UpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKGluZm8uYmFz
ZS5nZXQoKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYg
KGluZm8uY2hhaW4gJiYgIUhlYXA6OmlzTWFya2VkKGluZm8uY2hhaW4uZ2V0KCkpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLX07Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotCi19IC8v
IG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlz
dF9oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAJKHJldmlzaW9uIDE4OTU0MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSwxNTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
UG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oIgotCi0jaWYgRU5BQkxFKEpJVCkKLQotI2luY2x1ZGUg
IkNvZGVCbG9jay5oIgotI2luY2x1ZGUgIkhlYXAuaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
Ci0jaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLUdl
dEJ5SWRBY2Nlc3M6OkdldEJ5SWRBY2Nlc3MoCi0gICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBB
Y2Nlc3NUeXBlIHR5cGUsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lLAot
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCYgY29uZGl0aW9uU2V0KQotICAgIDogbV90eXBlKHR5cGUpCi0gICAgLCBtX3N0cnVjdHVyZSh2
bSwgb3duZXIsIHN0cnVjdHVyZSkKLSAgICAsIG1fY29uZGl0aW9uU2V0KGNvbmRpdGlvblNldCkK
LSAgICAsIG1fc3R1YlJvdXRpbmUoc3R1YlJvdXRpbmUpCi17Ci19Ci0KLUdldEJ5SWRBY2Nlc3M6
On5HZXRCeUlkQWNjZXNzKCkKLXsKLX0KLQotR2V0QnlJZEFjY2VzcyBHZXRCeUlkQWNjZXNzOjpm
cm9tU3RydWN0dXJlU3R1YkluZm8oU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBpbml0aWFsU2xvd1BhdGggPQotICAgICAgICBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNh
bGxUb1Nsb3dDYXNlKTsKLSAgICAKLSAgICBHZXRCeUlkQWNjZXNzIHJlc3VsdDsKLSAgICAKLSAg
ICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRf
c2VsZik7Ci0gICAgCi0gICAgcmVzdWx0Lm1fdHlwZSA9IFNpbXBsZUlubGluZTsKLSAgICByZXN1
bHQubV9zdHJ1Y3R1cmUuY29weUZyb20oc3R1YkluZm8udS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0
U3RydWN0dXJlKTsKLSAgICByZXN1bHQubV9zdHViUm91dGluZSA9IEpJVFN0dWJSb3V0aW5lOjpj
cmVhdGVTZWxmTWFuYWdlZFJvdXRpbmUoaW5pdGlhbFNsb3dQYXRoKTsKLSAgICAKLSAgICByZXR1
cm4gcmVzdWx0OwotfQotCi1ib29sIEdldEJ5SWRBY2Nlc3M6OnZpc2l0V2VhayhWTSYgdm0pIGNv
bnN0Ci17Ci0gICAgaWYgKG1fc3RydWN0dXJlICYmICFIZWFwOjppc01hcmtlZChtX3N0cnVjdHVy
ZS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIW1fY29uZGl0aW9uU2V0
LmFyZVN0aWxsTGl2ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFtX3N0dWJS
b3V0aW5lLT52aXNpdFdlYWsodm0pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLVBvbHltb3JwaGljR2V0QnlJZExpc3Q6OlBvbHltb3JwaGljR2V0QnlJZExp
c3QoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIGlmIChzdHViSW5mby5hY2Nl
c3NUeXBlID09IGFjY2Vzc191bnNldCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIG1fbGlz
dC5hcHBlbmQoR2V0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKHN0dWJJbmZvKSk7
Ci19Ci0KLVBvbHltb3JwaGljR2V0QnlJZExpc3QqIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmZy
b20oU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIGlmIChzdHViSW5mby5hY2Nl
c3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfbGlzdCkKLSAgICAgICAgcmV0dXJuIHN0dWJJbmZv
LnUuZ2V0QnlJZExpc3QubGlzdDsKLSAgICAKLSAgICBBU1NFUlQoCi0gICAgICAgIHN0dWJJbmZv
LmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmCi0gICAgICAgIHx8IHN0dWJJbmZv
LmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0KTsKLSAgICAKLSAgICBQb2x5bW9ycGhpY0dldEJ5
SWRMaXN0KiByZXN1bHQgPSBuZXcgUG9seW1vcnBoaWNHZXRCeUlkTGlzdChzdHViSW5mbyk7Ci0g
ICAgCi0gICAgc3R1YkluZm8uaW5pdEdldEJ5SWRMaXN0KHJlc3VsdCk7Ci0gICAgCi0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6flBvbHltb3JwaGljR2V0
QnlJZExpc3QoKSB7IH0KLQotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIFBvbHltb3JwaGljR2V0QnlJ
ZExpc3Q6OmN1cnJlbnRTbG93UGF0aFRhcmdldCgKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8pIGNvbnN0Ci17Ci0gICAgaWYgKGlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRh
Q2FsbFRvU2xvd0Nhc2UpOwotICAgIHJldHVybiBtX2xpc3QubGFzdCgpLnN0dWJSb3V0aW5lKCkt
PmNvZGUoKS5jb2RlKCk7Ci19Ci0KLXZvaWQgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6YWRkQWNj
ZXNzKGNvbnN0IEdldEJ5SWRBY2Nlc3MmIGFjY2VzcykKLXsKLSAgICBBU1NFUlQoIWlzRnVsbCgp
KTsKLSAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgcmVzaXppbmcgb3B0aW1pemVzIGZvciBzcGFj
ZSwgbm90IHRpbWUuCi0gICAgbV9saXN0LnJlc2l6ZVRvRml0KG1fbGlzdC5zaXplKCkgKyAxKTsK
LSAgICBtX2xpc3QubGFzdCgpID0gYWNjZXNzOwotfQotCi1ib29sIFBvbHltb3JwaGljR2V0QnlJ
ZExpc3Q6OmlzRnVsbCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHNpemUoKSA8PSBQT0xZTU9SUEhJ
Q19MSVNUX0NBQ0hFX1NJWkUpOwotICAgIHJldHVybiBzaXplKCkgPT0gUE9MWU1PUlBISUNfTElT
VF9DQUNIRV9TSVpFOwotfQotCi1ib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmlzQWxtb3N0
RnVsbCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHNpemUoKSA8PSBQT0xZTU9SUEhJQ19MSVNUX0NB
Q0hFX1NJWkUpOwotICAgIHJldHVybiBzaXplKCkgPj0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9T
SVpFIC0gMTsKLX0KLQotYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpkaWRTZWxmUGF0Y2hp
bmcoKSBjb25zdAotewotICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUoKTsgaS0tOykgewotICAg
ICAgICBpZiAoYXQoaSkudHlwZSgpID09IEdldEJ5SWRBY2Nlc3M6OlNpbXBsZUlubGluZSkKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJv
b2wgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6dmlzaXRXZWFrKFZNJiB2bSkgY29uc3QKLXsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBzaXplKCk7IGktLTspIHsKLSAgICAgICAgaWYgKCFhdChpKS52
aXNpdFdlYWsodm0pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoSklU
KQotCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1BvbHltb3JwaGljR2V0QnlJZExpc3QuaAkocmV2aXNpb24gMTg5NTQzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMSwxMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFBvbHltb3JwaGljR2V0QnlJZExpc3RfaAotI2Rl
ZmluZSBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0X2gKLQotI2lmIEVOQUJMRShKSVQpCi0KLSNpbmNs
dWRlICJDb2RlT3JpZ2luLmgiCi0jaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKLSNpbmNsdWRl
ICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgotI2luY2x1ZGUgIk9wY29kZS5oIgotI2lu
Y2x1ZGUgIlN0cnVjdHVyZS5oIgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNl
IEpTQyB7Ci0KLWNsYXNzIENvZGVCbG9jazsKLXN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbzsKLQot
Y2xhc3MgR2V0QnlJZEFjY2VzcyB7Ci1wdWJsaWM6Ci0gICAgZW51bSBBY2Nlc3NUeXBlIHsKLSAg
ICAgICAgSW52YWxpZCwKLSAgICAgICAgU2ltcGxlSW5saW5lLCAvLyBUaGlzIGlzIHRoZSBwYXRj
aGVkIGlubGluZSBhY2Nlc3MuCi0gICAgICAgIFNpbXBsZVN0dWIsIC8vIFRoaXMgaXMgYSBzdHVi
LgotICAgICAgICBXYXRjaGVkU3R1YiwKLSAgICAgICAgR2V0dGVyLAotICAgICAgICBDdXN0b21H
ZXR0ZXIsCi0gICAgICAgIFNpbXBsZU1pc3MsCi0gICAgfTsKLSAgICAKLSAgICBHZXRCeUlkQWNj
ZXNzKCkKLSAgICAgICAgOiBtX3R5cGUoSW52YWxpZCkKLSAgICB7Ci0gICAgfQotICAgIAotICAg
IEdldEJ5SWRBY2Nlc3MoCi0gICAgICAgIFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwg
UGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4sIFN0cnVjdHVyZSosCi0gICAgICAgIGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCkp
OwotICAgIAotICAgIH5HZXRCeUlkQWNjZXNzKCk7Ci0gICAgCi0gICAgc3RhdGljIEdldEJ5SWRB
Y2Nlc3MgZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFN0cnVjdHVyZVN0dWJJbmZvJik7Ci0gICAgCi0g
ICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSAhPSBJbnZhbGlkOyB9Ci0gICAg
Ym9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQotICAgIAotICAgIEFj
Y2Vzc1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQotICAgIAotICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7IH0KLSAg
ICAKLSAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkg
Y29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0KLSAgICAKLSAgICBKSVRTdHViUm91dGlu
ZSogc3R1YlJvdXRpbmUoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzU2V0KCkpOwot
ICAgICAgICByZXR1cm4gbV9zdHViUm91dGluZS5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgYm9v
bCBkb2VzQ2FsbHMoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gR2V0dGVyIHx8IHR5cGUoKSA9
PSBDdXN0b21HZXR0ZXI7IH0KLSAgICAKLSAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0Owot
Ci1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7Ci0gICAgCi0gICAgQWNjZXNz
VHlwZSBtX3R5cGU7Ci0gICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7Ci0g
ICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7Ci0gICAgUmVmUHRy
PEpJVFN0dWJSb3V0aW5lPiBtX3N0dWJSb3V0aW5lOwotfTsKLQotY2xhc3MgUG9seW1vcnBoaWNH
ZXRCeUlkTGlzdCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAg
Ly8gRWl0aGVyIGNyZWF0ZXMgYSBuZXcgcG9seW1vcnBoaWMgZ2V0IGxpc3QsIG9yIHJldHVybnMg
dGhlIG9uZSB0aGF0IGlzIGFscmVhZHkgaW4KLSAgICAvLyBwbGFjZS4KLSAgICBzdGF0aWMgUG9s
eW1vcnBoaWNHZXRCeUlkTGlzdCogZnJvbShTdHJ1Y3R1cmVTdHViSW5mbyYpOwotICAgIAotICAg
IH5Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0KCk7Ci0gICAgCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIGN1cnJlbnRTbG93UGF0aFRhcmdldChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pIGNv
bnN0OwotICAgIAotICAgIHZvaWQgYWRkQWNjZXNzKGNvbnN0IEdldEJ5SWRBY2Nlc3MmKTsKLSAg
ICAKLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2xpc3QuaXNFbXB0eSgpOyB9
Ci0gICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5zaXplKCk7IH0KLSAg
ICBib29sIGlzRnVsbCgpIGNvbnN0OwotICAgIGJvb2wgaXNBbG1vc3RGdWxsKCkgY29uc3Q7IC8v
IFRydWUgaWYgYWRkaW5nIGFuIGVsZW1lbnQgd291bGQgbWFrZSBpc0Z1bGwoKSB0cnVlLgotICAg
IGNvbnN0IEdldEJ5SWRBY2Nlc3MmIGF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbGlz
dFtpXTsgfQotICAgIGNvbnN0IEdldEJ5SWRBY2Nlc3MmIG9wZXJhdG9yW10odW5zaWduZWQgaSkg
Y29uc3QgeyByZXR1cm4gbV9saXN0W2ldOyB9Ci0gICAgCi0gICAgYm9vbCBkaWRTZWxmUGF0Y2hp
bmcoKSBjb25zdDsgLy8gQXJlIGFueSBvZiB0aGUgYWNjZXNzZXMgU2ltcGxlSW5saW5lPwotICAg
IAotICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5k
IGNsYXNzIENvZGVCbG9jazsKLSAgICAKLSAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KFN0cnVj
dHVyZVN0dWJJbmZvJik7Ci0gICAgCi0gICAgVmVjdG9yPEdldEJ5SWRBY2Nlc3MsIDI+IG1fbGlz
dDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQot
I2VuZGlmIC8vIFBvbHltb3JwaGljR2V0QnlJZExpc3RfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3Qu
Y3BwCShyZXZpc2lvbiAxODk1NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTU2ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBvbHltb3JwaGljUHV0QnlJZExp
c3QuaCIKLQotI2lmIEVOQUJMRShKSVQpCi0KLSNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5o
IgotCi1uYW1lc3BhY2UgSlNDIHsKLQotUHV0QnlJZEFjY2VzcyBQdXRCeUlkQWNjZXNzOjpmcm9t
U3RydWN0dXJlU3R1YkluZm8oU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciBpbml0aWFsU2xvd1BhdGggPQotICAgICAgICBzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxU
b1Nsb3dDYXNlKTsKLSAgICAKLSAgICBQdXRCeUlkQWNjZXNzIHJlc3VsdDsKLSAgICAKLSAgICBz
d2l0Y2ggKHN0dWJJbmZvLmFjY2Vzc1R5cGUpIHsKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRf
cmVwbGFjZToKLSAgICAgICAgcmVzdWx0Lm1fdHlwZSA9IFJlcGxhY2U7Ci0gICAgICAgIHJlc3Vs
dC5tX29sZFN0cnVjdHVyZS5jb3B5RnJvbShzdHViSW5mby51LnB1dEJ5SWRSZXBsYWNlLmJhc2VP
YmplY3RTdHJ1Y3R1cmUpOwotICAgICAgICByZXN1bHQubV9zdHViUm91dGluZSA9IEpJVFN0dWJS
b3V0aW5lOjpjcmVhdGVTZWxmTWFuYWdlZFJvdXRpbmUoaW5pdGlhbFNsb3dQYXRoKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIAotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9u
X2RpcmVjdDoKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWw6Ci0g
ICAgICAgIHJlc3VsdC5tX3R5cGUgPSBUcmFuc2l0aW9uOwotICAgICAgICByZXN1bHQubV9vbGRT
dHJ1Y3R1cmUuY29weUZyb20oc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91c1N0
cnVjdHVyZSk7Ci0gICAgICAgIHJlc3VsdC5tX25ld1N0cnVjdHVyZS5jb3B5RnJvbShzdHViSW5m
by51LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZSk7Ci0gICAgICAgIHJlc3VsdC5tX2NvbmRp
dGlvblNldCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjphZG9wdFJhd1BvaW50ZXIoCi0g
ICAgICAgICAgICBzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0NvbmRpdGlvblNldCk7
Ci0gICAgICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gc3R1YkluZm8uc3R1YlJvdXRpbmU7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgICAKLSAgICBkZWZhdWx0OgotICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci1ib29sIFB1dEJ5SWRBY2Nlc3M6OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0Ci17Ci0gICAgaWYg
KCFtX2NvbmRpdGlvblNldC5hcmVTdGlsbExpdmUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIAotICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgY2FzZSBSZXBsYWNlOgotICAgICAgICBp
ZiAoIUhlYXA6OmlzTWFya2VkKG1fb2xkU3RydWN0dXJlLmdldCgpKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBUcmFuc2l0aW9uOgotICAgICAg
ICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fb2xkU3RydWN0dXJlLmdldCgpKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX25ld1N0cnVjdHVy
ZS5nZXQoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgU2V0dGVyOgotICAgIGNhc2UgQ3VzdG9tU2V0dGVyOgotICAgICAgICBpZiAoIUhlYXA6
OmlzTWFya2VkKG1fb2xkU3RydWN0dXJlLmdldCgpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoIW1f
c3R1YlJvdXRpbmUtPnZpc2l0V2Vhayh2bSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6UG9seW1vcnBoaWNQdXRC
eUlkTGlzdCgKLSAgICBQdXRLaW5kIHB1dEtpbmQsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bykKLSAgICA6IG1fa2luZChwdXRLaW5kKQotewotICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBl
ICE9IGFjY2Vzc191bnNldCkKLSAgICAgICAgbV9saXN0LmFwcGVuZChQdXRCeUlkQWNjZXNzOjpm
cm9tU3RydWN0dXJlU3R1YkluZm8oc3R1YkluZm8pKTsKLX0KLQotUG9seW1vcnBoaWNQdXRCeUlk
TGlzdCogUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6ZnJvbSgKLSAgICBQdXRLaW5kIHB1dEtpbmQs
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBpZiAoc3R1YkluZm8uYWNjZXNz
VHlwZSA9PSBhY2Nlc3NfcHV0X2J5X2lkX2xpc3QpCi0gICAgICAgIHJldHVybiBzdHViSW5mby51
LnB1dEJ5SWRMaXN0Lmxpc3Q7Ci0gICAgCi0gICAgQVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUg
PT0gYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlCi0gICAgICAgIHx8IHN0dWJJbmZvLmFjY2Vzc1R5
cGUgPT0gYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbAotICAgICAgICB8fCBzdHVi
SW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3QKLSAg
ICAgICAgfHwgc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpOwotICAgIAotICAg
IFBvbHltb3JwaGljUHV0QnlJZExpc3QqIHJlc3VsdCA9Ci0gICAgICAgIG5ldyBQb2x5bW9ycGhp
Y1B1dEJ5SWRMaXN0KHB1dEtpbmQsIHN0dWJJbmZvKTsKLSAgICAKLSAgICBzdHViSW5mby5pbml0
UHV0QnlJZExpc3QocmVzdWx0KTsKLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1Qb2x5
bW9ycGhpY1B1dEJ5SWRMaXN0Ojp+UG9seW1vcnBoaWNQdXRCeUlkTGlzdCgpIHsgfQotCi1ib29s
IFBvbHltb3JwaGljUHV0QnlJZExpc3Q6OmlzRnVsbCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHNp
emUoKSA8PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpOwotICAgIHJldHVybiBzaXplKCkg
PT0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFOwotfQotCi1ib29sIFBvbHltb3JwaGljUHV0
QnlJZExpc3Q6OmlzQWxtb3N0RnVsbCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHNpemUoKSA8PSBQ
T0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpOwotICAgIHJldHVybiBzaXplKCkgPj0gUE9MWU1P
UlBISUNfTElTVF9DQUNIRV9TSVpFIC0gMTsKLX0KLQotdm9pZCBQb2x5bW9ycGhpY1B1dEJ5SWRM
aXN0OjphZGRBY2Nlc3MoY29uc3QgUHV0QnlJZEFjY2VzcyYgcHV0QnlJZEFjY2VzcykKLXsKLSAg
ICBBU1NFUlQoIWlzRnVsbCgpKTsKLSAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgcmVzaXppbmcg
b3B0aW1pemVzIGZvciBzcGFjZSwgbm90IHRpbWUuCi0gICAgbV9saXN0LnJlc2l6ZVRvRml0KG1f
bGlzdC5zaXplKCkgKyAxKTsKLSAgICBtX2xpc3QubGFzdCgpID0gcHV0QnlJZEFjY2VzczsKLX0K
LQotYm9vbCBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojp2aXNpdFdlYWsoVk0mIHZtKSBjb25zdAot
ewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkgewotICAgICAgICBp
ZiAoIWF0KGkpLnZpc2l0V2Vhayh2bSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotICAgIHJldHVybiB0cnVlOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8v
IEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNQdXRCeUlkTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgJKHJldmlzaW9uIDE4OTU0MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsMjE2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIs
IDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBQb2x5bW9ycGhpY1B1dEJ5
SWRMaXN0X2gKLSNkZWZpbmUgUG9seW1vcnBoaWNQdXRCeUlkTGlzdF9oCi0KLSNpZiBFTkFCTEUo
SklUKQotCi0jaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgotI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVy
LmgiCi0jaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIKLSNpbmNsdWRlICJP
cGNvZGUuaCIKLSNpbmNsdWRlICJQdXRLaW5kLmgiCi0jaW5jbHVkZSAiUHV0UHJvcGVydHlTbG90
LmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlLmgiCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1u
YW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgQ29kZUJsb2NrOwotc3RydWN0IFN0cnVjdHVyZVN0dWJJ
bmZvOwotCi1jbGFzcyBQdXRCeUlkQWNjZXNzIHsKLXB1YmxpYzoKLSAgICBlbnVtIEFjY2Vzc1R5
cGUgewotICAgICAgICBJbnZhbGlkLAotICAgICAgICBUcmFuc2l0aW9uLAotICAgICAgICBSZXBs
YWNlLAotICAgICAgICBTZXR0ZXIsCi0gICAgICAgIEN1c3RvbVNldHRlcgotICAgIH07Ci0gICAg
Ci0gICAgUHV0QnlJZEFjY2VzcygpCi0gICAgICAgIDogbV90eXBlKEludmFsaWQpCi0gICAgewot
ICAgIH0KLSAgICAKLSAgICBzdGF0aWMgUHV0QnlJZEFjY2VzcyB0cmFuc2l0aW9uKAotICAgICAg
ICBWTSYgdm0sCi0gICAgICAgIEpTQ2VsbCogb3duZXIsCi0gICAgICAgIFN0cnVjdHVyZSogb2xk
U3RydWN0dXJlLAotICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICAgICAgY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwKLSAgICAgICAgUGFz
c1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUpCi0gICAgewotICAgICAgICBQdXRC
eUlkQWNjZXNzIHJlc3VsdDsKLSAgICAgICAgcmVzdWx0Lm1fdHlwZSA9IFRyYW5zaXRpb247Ci0g
ICAgICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBvbGRTdHJ1Y3R1cmUp
OwotICAgICAgICByZXN1bHQubV9uZXdTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgbmV3U3RydWN0
dXJlKTsKLSAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OwotICAg
ICAgICByZXN1bHQubV9jdXN0b21TZXR0ZXIgPSAwOwotICAgICAgICByZXN1bHQubV9zdHViUm91
dGluZSA9IHN0dWJSb3V0aW5lOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAg
IHN0YXRpYyBQdXRCeUlkQWNjZXNzIHJlcGxhY2UoCi0gICAgICAgIFZNJiB2bSwKLSAgICAgICAg
SlNDZWxsKiBvd25lciwKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCi0gICAgICAgIFBh
c3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lKQotICAgIHsKLSAgICAgICAgUHV0
QnlJZEFjY2VzcyByZXN1bHQ7Ci0gICAgICAgIHJlc3VsdC5tX3R5cGUgPSBSZXBsYWNlOwotICAg
ICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKLSAg
ICAgICAgcmVzdWx0Lm1fY3VzdG9tU2V0dGVyID0gMDsKLSAgICAgICAgcmVzdWx0Lm1fc3R1YlJv
dXRpbmUgPSBzdHViUm91dGluZTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLQot
ICAgIHN0YXRpYyBQdXRCeUlkQWNjZXNzIHNldHRlcigKLSAgICAgICAgVk0mIHZtLAotICAgICAg
ICBKU0NlbGwqIG93bmVyLAotICAgICAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCi0gICAgICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlLAotICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCYgY29uZGl0aW9uU2V0LAotICAgICAgICBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVl
RnVuYyBjdXN0b21TZXR0ZXIsCi0gICAgICAgIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0
dWJSb3V0aW5lKQotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoYWNjZXNzVHlwZSA9PSBT
ZXR0ZXIgfHwgYWNjZXNzVHlwZSA9PSBDdXN0b21TZXR0ZXIpOwotICAgICAgICBQdXRCeUlkQWNj
ZXNzIHJlc3VsdDsKLSAgICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlLnNldCh2bSwgb3duZXIs
IHN0cnVjdHVyZSk7Ci0gICAgICAgIHJlc3VsdC5tX3R5cGUgPSBhY2Nlc3NUeXBlOwotICAgICAg
ICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7Ci0gICAgICAgIHJlc3VsdC5t
X2N1c3RvbVNldHRlciA9IGN1c3RvbVNldHRlcjsKLSAgICAgICAgcmVzdWx0Lm1fc3R1YlJvdXRp
bmUgPSBzdHViUm91dGluZTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCi0g
ICAgc3RhdGljIFB1dEJ5SWRBY2Nlc3MgZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFN0cnVjdHVyZVN0
dWJJbmZvJik7Ci0gICAgCi0gICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSAh
PSBJbnZhbGlkOyB9Ci0gICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQo
KTsgfQotICAgIAotICAgIEFjY2Vzc1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsg
fQotICAgIAotICAgIGJvb2wgaXNUcmFuc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09
IFRyYW5zaXRpb247IH0KLSAgICBib29sIGlzUmVwbGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlw
ZSA9PSBSZXBsYWNlOyB9Ci0gICAgYm9vbCBpc1NldHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdHlw
ZSA9PSBTZXR0ZXI7IH0KLSAgICBib29sIGlzQ3VzdG9tKCkgY29uc3QgeyByZXR1cm4gbV90eXBl
ID09IEN1c3RvbVNldHRlcjsgfQotICAgIAotICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIC8vIFVzaW5nIHRoaXMgaW5zdGVhZCBvZiBpc1NldCgpIHRv
IG1ha2UgdGhpcyBhc3NlcnRpb24gcm9idXN0IGFnYWluc3QgdGhlIHBvc3NpYmlsaXR5Ci0gICAg
ICAgIC8vIG9mIGFkZGl0aW9uYWwgYWNjZXNzIHR5cGVzIGJlaW5nIGFkZGVkLgotICAgICAgICBB
U1NFUlQoaXNUcmFuc2l0aW9uKCkgfHwgaXNSZXBsYWNlKCkgfHwgaXNTZXR0ZXIoKSB8fCBpc0N1
c3RvbSgpKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZS5nZXQoKTsK
LSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdAotICAgIHsKLSAg
ICAgICAgQVNTRVJUKGlzUmVwbGFjZSgpIHx8IGlzU2V0dGVyKCkgfHwgaXNDdXN0b20oKSk7Ci0g
ICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZS5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgU3Ry
dWN0dXJlKiBuZXdTdHJ1Y3R1cmUoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzVHJh
bnNpdGlvbigpKTsKLSAgICAgICAgcmV0dXJuIG1fbmV3U3RydWN0dXJlLmdldCgpOwotICAgIH0K
LSAgICAKLSAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0
KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0KLSAgICAKLSAgICBKSVRTdHViUm91
dGluZSogc3R1YlJvdXRpbmUoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzVHJhbnNp
dGlvbigpIHx8IGlzUmVwbGFjZSgpIHx8IGlzU2V0dGVyKCkgfHwgaXNDdXN0b20oKSk7Ci0gICAg
ICAgIHJldHVybiBtX3N0dWJSb3V0aW5lLmdldCgpOwotICAgIH0KLQotICAgIFB1dFByb3BlcnR5
U2xvdDo6UHV0VmFsdWVGdW5jIGN1c3RvbVNldHRlcigpIGNvbnN0Ci0gICAgewotICAgICAgICBB
U1NFUlQoaXNDdXN0b20oKSk7Ci0gICAgICAgIHJldHVybiBtX2N1c3RvbVNldHRlcjsKLSAgICB9
Ci0KLSAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OwotICAgIAotcHJpdmF0ZToKLSAgICBm
cmllbmQgY2xhc3MgQ29kZUJsb2NrOwotICAgIAotICAgIEFjY2Vzc1R5cGUgbV90eXBlOwotICAg
IFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fb2xkU3RydWN0dXJlOwotICAgIFdyaXRlQmFycmll
cjxTdHJ1Y3R1cmU+IG1fbmV3U3RydWN0dXJlOwotICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0IG1fY29uZGl0aW9uU2V0OwotICAgIFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jIG1f
Y3VzdG9tU2V0dGVyOwotICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gbV9zdHViUm91dGluZTsK
LX07Ci0KLWNsYXNzIFBvbHltb3JwaGljUHV0QnlJZExpc3QgewotICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwotcHVibGljOgotICAgIC8vIEVpdGhlciBjcmVhdGVzIGEgbmV3IHBvbHltb3Jw
aGljIHB1dCBsaXN0LCBvciByZXR1cm5zIHRoZSBvbmUgdGhhdCBpcyBhbHJlYWR5Ci0gICAgLy8g
aW4gcGxhY2UuCi0gICAgc3RhdGljIFBvbHltb3JwaGljUHV0QnlJZExpc3QqIGZyb20oUHV0S2lu
ZCwgU3RydWN0dXJlU3R1YkluZm8mKTsKLSAgICAKLSAgICB+UG9seW1vcnBoaWNQdXRCeUlkTGlz
dCgpOwotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdXJyZW50U2xvd1BhdGhUYXJn
ZXQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbGlzdC5sYXN0KCkuc3R1YlJvdXRp
bmUoKS0+Y29kZSgpLmNvZGUoKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBhZGRBY2Nlc3MoY29u
c3QgUHV0QnlJZEFjY2VzcyYpOwotICAgIAotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0
dXJuIG1fbGlzdC5pc0VtcHR5KCk7IH0KLSAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV9saXN0LnNpemUoKTsgfQotICAgIGJvb2wgaXNGdWxsKCkgY29uc3Q7Ci0gICAgYm9vbCBp
c0FsbW9zdEZ1bGwoKSBjb25zdDsgLy8gVHJ1ZSBpZiBhZGRpbmcgYW4gZWxlbWVudCB3b3VsZCBt
YWtlIGlzRnVsbCgpIHRydWUuCi0gICAgY29uc3QgUHV0QnlJZEFjY2VzcyYgYXQodW5zaWduZWQg
aSkgY29uc3QgeyByZXR1cm4gbV9saXN0W2ldOyB9Ci0gICAgY29uc3QgUHV0QnlJZEFjY2VzcyYg
b3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2xpc3RbaV07IH0KLSAgICAK
LSAgICBQdXRLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KLSAgICAKLSAgICBi
b29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OwotICAgIAotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xh
c3MgQ29kZUJsb2NrOwotICAgIAotICAgIC8vIEluaXRpYWxpemUgZnJvbSBhIHN0dWIgaW5mbzsg
dGhpcyB3aWxsIHBsYWNlIG9uZSBlbGVtZW50IGluIHRoZSBsaXN0IGFuZCBpdCB3aWxsCi0gICAg
Ly8gYmUgY3JlYXRlZCBieSBjb252ZXJ0aW5nIHRoZSBzdHViIGluZm8ncyBwdXQgYnkgaWQgYWNj
ZXNzIGluZm9ybWF0aW9uIGludG8gb3VyCi0gICAgLy8gUHV0QnlJZEFjY2Vzcy4KLSAgICBQb2x5
bW9ycGhpY1B1dEJ5SWRMaXN0KFB1dEtpbmQsIFN0cnVjdHVyZVN0dWJJbmZvJik7Ci0KLSAgICBW
ZWN0b3I8UHV0QnlJZEFjY2VzcywgMj4gbV9saXN0OwotICAgIFB1dEtpbmQgbV9raW5kOwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotCi0jZW5kaWYg
Ly8gUG9seW1vcnBoaWNQdXRCeUlkTGlzdF9oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDE4OTU0MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsMTMgKzI2LDEyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiUHV0QnlJZFN0YXR1cy5oIgogCi0jaW5jbHVkZSAiQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRp
bmUuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJDb21wbGV4R2V0U3RhdHVz
LmgiCiAjaW5jbHVkZSAiTExJbnREYXRhLmgiCiAjaW5jbHVkZSAiTG93TGV2ZWxJbnRlcnByZXRl
ci5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJQb2x5bW9ycGhpY1B1dEJ5
SWRMaXN0LmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKICNpbmNsdWRlICJTdHJ1
Y3R1cmUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVDaGFpbi5oIgogI2luY2x1ZGUgPHd0Zi9MaXN0
RHVtcC5oPgpAQCAtMTU0LDY2ICsxNTMsNDMgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVz
Ojpjb21wdXRlRm9yUwogICAgIGlmICghc3R1YkluZm8tPnNlZW4pCiAgICAgICAgIHJldHVybiBQ
dXRCeUlkU3RhdHVzKCk7CiAgICAgCi0gICAgc3dpdGNoIChzdHViSW5mby0+YWNjZXNzVHlwZSkg
ewotICAgIGNhc2UgYWNjZXNzX3Vuc2V0OgorICAgIHN3aXRjaCAoc3R1YkluZm8tPmNhY2hlVHlw
ZSkgeworICAgIGNhc2UgQ2FjaGVUeXBlOjpVbnNldDoKICAgICAgICAgLy8gSWYgdGhlIEpJVCBz
YXcgaXQgYnV0IGRpZG4ndCBvcHRpbWl6ZSBpdCwgdGhlbiBhc3N1bWUgdGhhdCB0aGlzIHRha2Vz
IHNsb3cgcGF0aC4KICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7
CiAgICAgICAgIAotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlOiB7CisgICAgY2Fz
ZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOiB7CiAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCA9Ci0gICAgICAgICAgICBzdHViSW5mby0+dS5wdXRCeUlkUmVwbGFjZS5iYXNlT2JqZWN0
U3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKKyAgICAgICAgICAgIHN0dWJJbmZvLT51
LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOwogICAg
ICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7CiAgICAgICAgICAgICByZXR1cm4gUHV0
QnlJZFZhcmlhbnQ6OnJlcGxhY2UoCi0gICAgICAgICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJ
ZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgb2Zmc2V0KTsKKyAgICAgICAgICAg
ICAgICBzdHViSW5mby0+dS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBvZmZz
ZXQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1Bh
dGgpOwogICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRp
b25fbm9ybWFsOgotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdDog
ewotICAgICAgICBBU1NFUlQoc3R1YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNT
dHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOwot
ICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSAKLSAgICAgICAgICAgIHN0dWJJbmZvLT51
LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7Ci0gICAg
ICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKLSAgICAgICAgICAgIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
Ojpmcm9tUmF3UG9pbnRlcigKLSAgICAgICAgICAgICAgICBzdHViSW5mby0+dS5wdXRCeUlkVHJh
bnNpdGlvbi5yYXdDb25kaXRpb25TZXQpOwotICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQu
c3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgICAgICAgICByZXR1cm4gUHV0QnlJZFZhcmlh
bnQ6OnRyYW5zaXRpb24oCi0gICAgICAgICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJZFRyYW5z
aXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUuZ2V0KCksCi0gICAgICAgICAgICAgICAgc3R1YkluZm8t
PnUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLmdldCgpLAotICAgICAgICAgICAgICAgIGNv
bmRpdGlvblNldCwgb2Zmc2V0KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gUHV0QnlJZFN0
YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICB9Ci0gICAgICAgIAotICAgIGNhc2UgYWNjZXNzX3B1
dF9ieV9pZF9saXN0OiB7Ci0gICAgICAgIFBvbHltb3JwaGljUHV0QnlJZExpc3QqIGxpc3QgPSBz
dHViSW5mby0+dS5wdXRCeUlkTGlzdC5saXN0OworICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOiB7
CisgICAgICAgIFBvbHltb3JwaGljQWNjZXNzKiBsaXN0ID0gc3R1YkluZm8tPnUuc3R1YjsKICAg
ICAgICAgCiAgICAgICAgIFB1dEJ5SWRTdGF0dXMgcmVzdWx0OwogICAgICAgICByZXN1bHQubV9z
dGF0ZSA9IFNpbXBsZTsKICAgICAgICAgCiAgICAgICAgIFN0YXRlIHNsb3dQYXRoU3RhdGUgPSBU
YWtlc1Nsb3dQYXRoOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+c2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGNvbnN0IFB1dEJ5SWRBY2Nlc3MmIGFjY2VzcyA9IGxp
c3QtPmF0KGkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzd2l0Y2ggKGFjY2Vzcy50eXBl
KCkpIHsKLSAgICAgICAgICAgIGNhc2UgUHV0QnlJZEFjY2Vzczo6U2V0dGVyOgotICAgICAgICAg
ICAgY2FzZSBQdXRCeUlkQWNjZXNzOjpDdXN0b21TZXR0ZXI6CisgICAgICAgICAgICBjb25zdCBB
Y2Nlc3NDYXNlJiBhY2Nlc3MgPSBsaXN0LT5hdChpKTsKKyAgICAgICAgICAgIGlmIChhY2Nlc3Mu
ZG9lc0NhbGxzKCkpCiAgICAgICAgICAgICAgICAgc2xvd1BhdGhTdGF0ZSA9IE1ha2VzQ2FsbHM7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
ICAgIGNvbnN0IFB1dEJ5SWRBY2Nlc3MmIGFjY2VzcyA9IGxpc3QtPmF0KGkpOworICAgICAgICAg
ICAgY29uc3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0gbGlzdC0+YXQoaSk7CisgICAgICAgICAgICBp
ZiAoYWNjZXNzLnZpYVByb3h5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0
dXMoc2xvd1BhdGhTdGF0ZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFB1dEJ5SWRWYXJp
YW50IHZhcmlhbnQ7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHN3aXRjaCAoYWNjZXNzLnR5
cGUoKSkgewotICAgICAgICAgICAgY2FzZSBQdXRCeUlkQWNjZXNzOjpSZXBsYWNlOiB7CisgICAg
ICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OlJlcGxhY2U6IHsKICAgICAgICAgICAgICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGFjY2Vzcy5zdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgICAgICBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOwog
ICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQpAQCAtMjIyLDcgKzE5
OCw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGNhc2UgUHV0QnlJZEFjY2Vzczo6VHJhbnNpdGlvbjogeworICAgICAgICAgICAgY2FzZSBB
Y2Nlc3NDYXNlOjpUcmFuc2l0aW9uOiB7CiAgICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0ID0KICAgICAgICAgICAgICAgICAgICAgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLT5nZXRD
b25jdXJyZW50bHkodWlkKTsKICAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zm
c2V0KSkKQEAgLTIzMSwxMSArMjA3LDExIEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6
Y29tcHV0ZUZvclMKICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5zdHJ1Y3R1cmVz
RW5zdXJlVmFsaWRpdHkoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0
dXMoc2xvd1BhdGhTdGF0ZSk7CiAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJp
YW50Ojp0cmFuc2l0aW9uKAotICAgICAgICAgICAgICAgICAgICBhY2Nlc3Mub2xkU3RydWN0dXJl
KCksIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOworICAgICAg
ICAgICAgICAgICAgICBhY2Nlc3Muc3RydWN0dXJlKCksIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwg
Y29uZGl0aW9uU2V0LCBvZmZzZXQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBQdXRCeUlkQWNjZXNzOjpT
ZXR0ZXI6IHsKKyAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6U2V0dGVyOiB7CiAgICAgICAg
ICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBhY2Nlc3Muc3RydWN0dXJlKCk7CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgQ29tcGxleEdldFN0YXR1cyBjb21wbGV4R2V0
U3RhdHVzID0gQ29tcGxleEdldFN0YXR1czo6Y29tcHV0ZUZvcigKQEAgLTI0OSwxMiArMjI1LDEy
IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSk7CiAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6SW5saW5l
YWJsZTogewotICAgICAgICAgICAgICAgICAgICBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZSog
c3R1YiA9IHN0YXRpY19jYXN0PEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lKj4oCi0gICAgICAg
ICAgICAgICAgICAgICAgICBhY2Nlc3Muc3R1YlJvdXRpbmUoKSk7CisgICAgICAgICAgICAgICAg
ICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gYWNjZXNzLmNhbGxMaW5rSW5mbygpOwor
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoY2FsbExpbmtJbmZvKTsKICAgICAgICAgICAgICAg
ICAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cyA9CiAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfdW5pcXVlPENhbGxMaW5rU3RhdHVzPigK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcigK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJsb2NrLCAq
c3R1Yi0+bV9jYWxsTGlua0luZm8sIGNhbGxFeGl0U2l0ZURhdGEpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJsb2NrLCAqY2FsbExpbmtJbmZvLCBj
YWxsRXhpdFNpdGVEYXRhKSk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
ICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6OnNldHRlcigKICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0cnVjdHVyZSwgY29tcGxleEdldFN0YXR1cy5vZmZzZXQoKSwgY29tcGxleEdldFN0
YXR1cy5jb25kaXRpb25TZXQoKSwKQEAgLTI2Myw3ICsyMzksNyBAQCBQdXRCeUlkU3RhdHVzIFB1
dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFB1dEJ5SWRBY2Nlc3M6
OkN1c3RvbVNldHRlcjoKKyAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6Q3VzdG9tU2V0dGVy
OgogICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE1ha2VzQ2FsbHMpOwogCiAg
ICAgICAgICAgICBkZWZhdWx0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShyZXZpc2lvbiAxODk1NDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNyw4ICsyNyw3IEBACiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8u
aCIKIAogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCi0jaW5jbHVkZSAiUG9seW1vcnBoaWNHZXRCeUlk
TGlzdC5oIgotI2luY2x1ZGUgIlBvbHltb3JwaGljUHV0QnlJZExpc3QuaCIKKyNpbmNsdWRlICJQ
b2x5bW9ycGhpY0FjY2Vzcy5oIgogI2luY2x1ZGUgIlJlcGF0Y2guaCIKIAogbmFtZXNwYWNlIEpT
QyB7CkBAIC0zNiwzNyArMzUsNTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWYgRU5BQkxFKEpJVCkK
IHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmRlcmVmKCkKIHsKLSAgICBzd2l0Y2ggKGFjY2Vzc1R5
cGUpIHsKLSAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfbGlzdDogewotICAgICAgICBkZWxldGUg
dS5nZXRCeUlkTGlzdC5saXN0OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNhc2UgYWNj
ZXNzX3B1dF9ieV9pZF9saXN0OgotICAgICAgICBkZWxldGUgdS5wdXRCeUlkTGlzdC5saXN0Owor
ICAgIHN3aXRjaCAoY2FjaGVUeXBlKSB7CisgICAgY2FzZSBDYWNoZVR5cGU6OlN0dWI6CisgICAg
ICAgIGRlbGV0ZSB1LnN0dWI7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIGFjY2Vzc19pbl9s
aXN0OiB7Ci0gICAgICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcG9seW1vcnBo
aWNTdHJ1Y3R1cmVzID0gdS5pbkxpc3Quc3RydWN0dXJlTGlzdDsKLSAgICAgICAgZGVsZXRlIHBv
bHltb3JwaGljU3RydWN0dXJlczsKKyAgICBjYXNlIENhY2hlVHlwZTo6VW5zZXQ6CisgICAgY2Fz
ZSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxmOgorICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRCeUlkUmVw
bGFjZToKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRf
dHJhbnNpdGlvbl9ub3JtYWw6Ci0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25f
ZGlyZWN0OgotICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6YWRvcHRSYXdQb2lu
dGVyKHUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0KTsKLSAgICAgICAgdS5wdXRC
eUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQgPSBudWxscHRyOwotICAgICAgICByZXR1cm47
Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGY6Ci0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5
X2lkX3JlcGxhY2U6Ci0gICAgY2FzZSBhY2Nlc3NfdW5zZXQ6Ci0gICAgICAgIC8vIFRoZXNlIGlu
c3RydWN0aW9ucyBkb24ndCBoYXZlIHRvIHJlbGVhc2UgYW55IGFsbG9jYXRlZCBtZW1vcnkKLSAg
ICAgICAgcmV0dXJuOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30K
KworTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIFN0cnVjdHVyZVN0dWJJbmZvOjphZGRBY2Nlc3NDYXNl
KAorICAgIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IElkZW50aWZpZXImIGlk
ZW50LCBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gYWNjZXNzQ2FzZSkKK3sKKyAgICBpZiAo
IWFjY2Vzc0Nhc2UpCisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKKyAg
ICAKKyAgICBpZiAoY2FjaGVUeXBlID09IENhY2hlVHlwZTo6U3R1YikKKyAgICAgICAgcmV0dXJu
IHUuc3R1Yi0+cmVnZW5lcmF0ZVdpdGhDYXNlKHZtLCBjb2RlQmxvY2ssICp0aGlzLCBpZGVudCwg
V1RGOjptb3ZlKGFjY2Vzc0Nhc2UpKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxQb2x5bW9ycGhp
Y0FjY2Vzcz4gYWNjZXNzID0gc3RkOjptYWtlX3VuaXF1ZTxQb2x5bW9ycGhpY0FjY2Vzcz4oKTsK
KyAgICAKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+PiBhY2Nlc3NDYXNl
czsKKyAgICAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gcHJldmlvdXNDYXNlID0K
KyAgICAgICAgQWNjZXNzQ2FzZTo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKHZtLCBjb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLCAqdGhpcyk7CisgICAgaWYgKHByZXZpb3VzQ2FzZSkKKyAgICAg
ICAgYWNjZXNzQ2FzZXMuYXBwZW5kKFdURjo6bW92ZShwcmV2aW91c0Nhc2UpKTsKKworICAgIGFj
Y2Vzc0Nhc2VzLmFwcGVuZChXVEY6Om1vdmUoYWNjZXNzQ2FzZSkpOworCisgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIHJlc3VsdCA9CisgICAgICAgIGFjY2Vzcy0+cmVnZW5lcmF0ZVdpdGhDYXNl
cyh2bSwgY29kZUJsb2NrLCAqdGhpcywgaWRlbnQsIFdURjo6bW92ZShhY2Nlc3NDYXNlcykpOwor
CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIo
KTsKKworICAgIGNhY2hlVHlwZSA9IENhY2hlVHlwZTo6U3R1YjsKKyAgICB1LnN0dWIgPSBhY2Nl
c3MucmVsZWFzZSgpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHZvaWQgU3RydWN0dXJlU3R1
YkluZm86OnJlc2V0KENvZGVCbG9jayogY29kZUJsb2NrKQogewotICAgIGlmIChhY2Nlc3NUeXBl
ID09IGFjY2Vzc191bnNldCkKKyAgICBpZiAoY2FjaGVUeXBlID09IENhY2hlVHlwZTo6VW5zZXQp
CiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7
CkBAIC03NCw2MCArODksMzggQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoQ29kZUJs
b2NrKgogICAgICAgICAvLyBvZiB0aGUgQ29kZUJsb2NrLgogICAgICAgICBkYXRhTG9nKCJDbGVh
cmluZyBzdHJ1Y3R1cmUgY2FjaGUgKGtpbmQgIiwgc3RhdGljX2Nhc3Q8aW50PihhY2Nlc3NUeXBl
KSwgIikgaW4gIiwgUmF3UG9pbnRlcihjb2RlQmxvY2spLCAiLlxuIik7CiAgICAgfQotICAgIAot
ICAgIGlmIChpc0dldEJ5SWRBY2Nlc3Moc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oYWNjZXNzVHlw
ZSkpKQorCisgICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpH
ZXQ6CiAgICAgICAgIHJlc2V0R2V0QnlJRChjb2RlQmxvY2ssICp0aGlzKTsKLSAgICBlbHNlIGlm
IChpc1B1dEJ5SWRBY2Nlc3Moc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oYWNjZXNzVHlwZSkpKQor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dDoKICAgICAgICAgcmVzZXRQ
dXRCeUlEKGNvZGVCbG9jaywgKnRoaXMpOwotICAgIGVsc2UgewotICAgICAgICBSRUxFQVNFX0FT
U0VSVChpc0luQWNjZXNzKHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KGFjY2Vzc1R5cGUpKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW46CiAgICAgICAgIHJlc2V0SW4o
Y29kZUJsb2NrLCAqdGhpcyk7CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAKICAgICBkZXJl
ZigpOwotICAgIGFjY2Vzc1R5cGUgPSBhY2Nlc3NfdW5zZXQ7Ci0gICAgc3R1YlJvdXRpbmUgPSBu
dWxscHRyOwotICAgIHdhdGNocG9pbnRzID0gbnVsbHB0cjsKKyAgICBjYWNoZVR5cGUgPSBDYWNo
ZVR5cGU6OlVuc2V0OwogfQogCiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZl
cmVuY2VzKENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIFZNJiB2bSA9ICpjb2RlQmxvY2st
PnZtKCk7Ci0gICAgCi0gICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7Ci0gICAgY2FzZSBhY2Nlc3Nf
Z2V0X2J5X2lkX3NlbGY6Ci0gICAgICAgIGlmIChIZWFwOjppc01hcmtlZCh1LmdldEJ5SWRTZWxm
LmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCkpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfbGlzdDogewotICAgICAgICBpZiAo
dS5nZXRCeUlkTGlzdC5saXN0LT52aXNpdFdlYWsodm0pKQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRp
b25fbm9ybWFsOgotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdDoK
LSAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKHUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNT
dHJ1Y3R1cmUuZ2V0KCkpCi0gICAgICAgICAgICAmJiBIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRU
cmFuc2l0aW9uLnN0cnVjdHVyZS5nZXQoKSkKLSAgICAgICAgICAgICYmIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0Ojpmcm9tUmF3UG9pbnRlcih1LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0NvbmRp
dGlvblNldCkuYXJlU3RpbGxMaXZlKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlOgotICAgICAgICBpZiAoSGVh
cDo6aXNNYXJrZWQodS5wdXRCeUlkUmVwbGFjZS5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpKSkK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBhY2Nlc3NfcHV0
X2J5X2lkX2xpc3Q6Ci0gICAgICAgIGlmICh1LnB1dEJ5SWRMaXN0Lmxpc3QtPnZpc2l0V2Vhayh2
bSkpCisKKyAgICBzd2l0Y2ggKGNhY2hlVHlwZSkgeworICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRC
eUlkU2VsZjoKKyAgICBjYXNlIENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2U6CisgICAgICAgIGlm
IChIZWFwOjppc01hcmtlZCh1LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCkpKQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIGFjY2Vzc19pbl9s
aXN0OiB7Ci0gICAgICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcG9seW1vcnBo
aWNTdHJ1Y3R1cmVzID0gdS5pbkxpc3Quc3RydWN0dXJlTGlzdDsKLSAgICAgICAgaWYgKHBvbHlt
b3JwaGljU3RydWN0dXJlcy0+dmlzaXRXZWFrKHUuaW5MaXN0Lmxpc3RTaXplKSkKKyAgICBjYXNl
IENhY2hlVHlwZTo6U3R1YjoKKyAgICAgICAgaWYgKHUuc3R1Yi0+dmlzaXRXZWFrKHZtKSkKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgYnJlYWs7Ci0gICAgfQogICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIC8vIFRoZSByZXN0IG9mIHRoZSBpbnN0cnVjdGlvbnMgZG9uJ3QgcmVxdWlyZSByZWZl
cmVuY2VzLCBzbyB0aGVyZSBpcyBubyBuZWVkIHRvCi0gICAgICAgIC8vIGRvIGFueXRoaW5nLgog
ICAgICAgICByZXR1cm47CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2aXNpb24gMTg5NTQzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgog
I2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiCiAjaW5jbHVkZSAiT3Bjb2Rl
LmgiCi0jaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0LmgiCisjaW5jbHVk
ZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKICNpbmNsdWRlICJSZWdpc3RlclNldC5oIgogI2luY2x1
ZGUgIlNwaWxsUmVnaXN0ZXJzTW9kZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgpAQCAtNDIs
NTcgKzQyLDI1IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKEpJVCkKIAotY2xhc3Mg
UG9seW1vcnBoaWNHZXRCeUlkTGlzdDsKLWNsYXNzIFBvbHltb3JwaGljUHV0QnlJZExpc3Q7Citj
bGFzcyBQb2x5bW9ycGhpY0FjY2VzczsKIAotZW51bSBBY2Nlc3NUeXBlIHsKLSAgICBhY2Nlc3Nf
Z2V0X2J5X2lkX3NlbGYsCi0gICAgYWNjZXNzX2dldF9ieV9pZF9saXN0LAotICAgIGFjY2Vzc19w
dXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWwsCi0gICAgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0
aW9uX2RpcmVjdCwKLSAgICBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2UsCi0gICAgYWNjZXNzX3B1
dF9ieV9pZF9saXN0LAotICAgIGFjY2Vzc191bnNldCwKLSAgICBhY2Nlc3NfaW5fbGlzdAorZW51
bSBjbGFzcyBBY2Nlc3NUeXBlIDogaW50OF90IHsKKyAgICBHZXQsCisgICAgUHV0LAorICAgIElu
CiB9OwogCi1pbmxpbmUgYm9vbCBpc0dldEJ5SWRBY2Nlc3MoQWNjZXNzVHlwZSBhY2Nlc3NUeXBl
KQotewotICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgewotICAgIGNhc2UgYWNjZXNzX2dldF9ieV9p
ZF9zZWxmOgotICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9saXN0OgotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotICAg
IAotaW5saW5lIGJvb2wgaXNQdXRCeUlkQWNjZXNzKEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSkKLXsK
LSAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJh
bnNpdGlvbl9ub3JtYWw6Ci0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGly
ZWN0OgotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlOgotICAgIGNhc2UgYWNjZXNz
X3B1dF9ieV9pZF9saXN0OgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1pbmxpbmUgYm9vbCBpc0luQWNjZXNzKEFj
Y2Vzc1R5cGUgYWNjZXNzVHlwZSkKLXsKLSAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKLSAgICBj
YXNlIGFjY2Vzc19pbl9saXN0OgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQorZW51bSBjbGFzcyBDYWNoZVR5cGUgOiBp
bnQ4X3QgeworICAgIFVuc2V0LAorICAgIEdldEJ5SWRTZWxmLAorICAgIFB1dEJ5SWRSZXBsYWNl
LAorICAgIFN0dWIKK307CiAKIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbyB7Ci0gICAgU3RydWN0
dXJlU3R1YkluZm8oKQotICAgICAgICA6IGFjY2Vzc1R5cGUoYWNjZXNzX3Vuc2V0KQorICAgIFN0
cnVjdHVyZVN0dWJJbmZvKEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSkKKyAgICAgICAgOiBhY2Nlc3NU
eXBlKGFjY2Vzc1R5cGUpCisgICAgICAgICwgY2FjaGVUeXBlKENhY2hlVHlwZTo6VW5zZXQpCiAg
ICAgICAgICwgc2VlbihmYWxzZSkKICAgICAgICAgLCByZXNldEJ5R0MoZmFsc2UpCiAgICAgICAg
ICwgdG9va1Nsb3dQYXRoKGZhbHNlKQpAQCAtMTAwLDUzICs2OCwzMSBAQCBzdHJ1Y3QgU3RydWN0
dXJlU3R1YkluZm8gewogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIGluaXRHZXRCeUlkU2VsZihW
TSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSkKKyAg
ICB2b2lkIGluaXRHZXRCeUlkU2VsZihWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSog
YmFzZU9iamVjdFN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogICAgIHsKLSAgICAg
ICAgYWNjZXNzVHlwZSA9IGFjY2Vzc19nZXRfYnlfaWRfc2VsZjsKLQotICAgICAgICB1LmdldEJ5
SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgYmFzZU9iamVjdFN0cnVj
dHVyZSk7Ci0gICAgfQorICAgICAgICBjYWNoZVR5cGUgPSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxm
OwogCi0gICAgdm9pZCBpbml0R2V0QnlJZExpc3QoUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogbGlz
dCkKLSAgICB7Ci0gICAgICAgIGFjY2Vzc1R5cGUgPSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3Q7Ci0g
ICAgICAgIHUuZ2V0QnlJZExpc3QubGlzdCA9IGxpc3Q7CisgICAgICAgIHUuYnlJZFNlbGYuYmFz
ZU9iamVjdFN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBiYXNlT2JqZWN0U3RydWN0dXJlKTsKKyAg
ICAgICAgdS5ieUlkU2VsZi5vZmZzZXQgPSBvZmZzZXQ7CiAgICAgfQogCi0gICAgLy8gUHV0QnlJ
ZCoKLQotICAgIHZvaWQgaW5pdFB1dEJ5SWRUcmFuc2l0aW9uKFZNJiB2bSwgSlNDZWxsKiBvd25l
ciwgU3RydWN0dXJlKiBwcmV2aW91c1N0cnVjdHVyZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldCwgYm9vbCBpc0RpcmVjdCkKKyAg
ICB2b2lkIGluaXRQdXRCeUlkUmVwbGFjZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVy
ZSogYmFzZU9iamVjdFN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogICAgIHsKLSAg
ICAgICAgaWYgKGlzRGlyZWN0KQotICAgICAgICAgICAgYWNjZXNzVHlwZSA9IGFjY2Vzc19wdXRf
YnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFjY2Vz
c1R5cGUgPSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOworICAgICAgICBjYWNo
ZVR5cGUgPSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOwogCi0gICAgICAgIHUucHV0QnlJZFRy
YW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgcHJldmlvdXNTdHJ1Y3R1
cmUpOwotICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5zZXQodm0sIG93bmVy
LCBzdHJ1Y3R1cmUpOwotICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0NvbmRpdGlvblNl
dCA9IGNvbmRpdGlvblNldC5yZWxlYXNlUmF3UG9pbnRlcigpOworICAgICAgICB1LmJ5SWRTZWxm
LmJhc2VPYmplY3RTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgYmFzZU9iamVjdFN0cnVjdHVyZSk7
CisgICAgICAgIHUuYnlJZFNlbGYub2Zmc2V0ID0gb2Zmc2V0OwogICAgIH0KIAotICAgIHZvaWQg
aW5pdFB1dEJ5SWRSZXBsYWNlKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBiYXNl
T2JqZWN0U3RydWN0dXJlKQotICAgIHsKLSAgICAgICAgYWNjZXNzVHlwZSA9IGFjY2Vzc19wdXRf
YnlfaWRfcmVwbGFjZTsKLSAgICAKLSAgICAgICAgdS5wdXRCeUlkUmVwbGFjZS5iYXNlT2JqZWN0
U3RydWN0dXJlLnNldCh2bSwgb3duZXIsIGJhc2VPYmplY3RTdHJ1Y3R1cmUpOwotICAgIH0KLSAg
ICAgICAgCi0gICAgdm9pZCBpbml0UHV0QnlJZExpc3QoUG9seW1vcnBoaWNQdXRCeUlkTGlzdCog
bGlzdCkKLSAgICB7Ci0gICAgICAgIGFjY2Vzc1R5cGUgPSBhY2Nlc3NfcHV0X2J5X2lkX2xpc3Q7
Ci0gICAgICAgIHUucHV0QnlJZExpc3QubGlzdCA9IGxpc3Q7Ci0gICAgfQotICAgIAotICAgIHZv
aWQgaW5pdEluTGlzdChQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIGxpc3QsIGludCBs
aXN0U2l6ZSkKKyAgICB2b2lkIGluaXRTdHViKHN0ZDo6dW5pcXVlX3B0cjxQb2x5bW9ycGhpY0Fj
Y2Vzcz4gc3R1YikKICAgICB7Ci0gICAgICAgIGFjY2Vzc1R5cGUgPSBhY2Nlc3NfaW5fbGlzdDsK
LSAgICAgICAgdS5pbkxpc3Quc3RydWN0dXJlTGlzdCA9IGxpc3Q7Ci0gICAgICAgIHUuaW5MaXN0
Lmxpc3RTaXplID0gbGlzdFNpemU7CisgICAgICAgIGNhY2hlVHlwZSA9IENhY2hlVHlwZTo6U3R1
YjsKKyAgICAgICAgdS5zdHViID0gc3R1Yi5yZWxlYXNlKCk7CiAgICAgfQotICAgICAgICAKKwor
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBhZGRBY2Nlc3NDYXNlKAorICAgICAgICBWTSYsIENv
ZGVCbG9jayosIGNvbnN0IElkZW50aWZpZXImLCBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4p
OworCiAgICAgdm9pZCByZXNldChDb2RlQmxvY2sqKTsKIAogICAgIHZvaWQgZGVyZWYoKTsKQEAg
LTE2NSwxNSArMTExLDkgQEAgc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICAgICAgc2Vl
biA9IHRydWU7CiAgICAgfQogICAgICAgICAKLSAgICBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRj
aHBvaW50KiBhZGRXYXRjaHBvaW50KAotICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA9IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uKCkpCi0gICAgewotICAgICAgICByZXR1cm4gV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0
dWJJbmZvOjplbnN1cmVSZWZlcmVuY2VBbmRBZGRXYXRjaHBvaW50KAotICAgICAgICAgICAgd2F0
Y2hwb2ludHMsIGNvZGVCbG9jaywgdGhpcywgY29uZGl0aW9uKTsKLSAgICB9Ci0gICAgCi0gICAg
aW50OF90IGFjY2Vzc1R5cGU7Ci0gICAgYm9vbCBzZWVuIDogMTsKKyAgICBBY2Nlc3NUeXBlIGFj
Y2Vzc1R5cGU7CisgICAgQ2FjaGVUeXBlIGNhY2hlVHlwZTsKKyAgICBib29sIHNlZW47CiAgICAg
Ym9vbCByZXNldEJ5R0MgOiAxOwogICAgIGJvb2wgdG9va1Nsb3dQYXRoIDogMTsKIApAQCAtMjAz
LDM0ICsxNDMsMTMgQEAgc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKIAogICAgIHVuaW9uIHsK
ICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIC8vIEl0IHdvdWxkIGJlIHVud2lzZSB0byBw
dXQgYW55dGhpbmcgaGVyZSwgYXMgaXQgd2lsbCBzdXJlbHkgYmUgb3ZlcndyaXR0ZW4uCi0gICAg
ICAgIH0gdW5zZXQ7Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJC
YXNlPFN0cnVjdHVyZT4gYmFzZU9iamVjdFN0cnVjdHVyZTsKLSAgICAgICAgfSBnZXRCeUlkU2Vs
ZjsKLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIFBvbHltb3JwaGljR2V0QnlJZExpc3Qq
IGxpc3Q7Ci0gICAgICAgIH0gZ2V0QnlJZExpc3Q7Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAg
ICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4gcHJldmlvdXNTdHJ1Y3R1cmU7Ci0gICAg
ICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4gc3RydWN0dXJlOwotICAgICAgICAg
ICAgdm9pZCogcmF3Q29uZGl0aW9uU2V0OwotICAgICAgICB9IHB1dEJ5SWRUcmFuc2l0aW9uOwot
ICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+
IGJhc2VPYmplY3RTdHJ1Y3R1cmU7Ci0gICAgICAgIH0gcHV0QnlJZFJlcGxhY2U7Ci0gICAgICAg
IHN0cnVjdCB7Ci0gICAgICAgICAgICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiBsaXN0OwotICAg
ICAgICB9IHB1dEJ5SWRMaXN0OwotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgUG9seW1v
cnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBzdHJ1Y3R1cmVMaXN0OwotICAgICAgICAgICAgaW50
IGxpc3RTaXplOwotICAgICAgICB9IGluTGlzdDsKKyAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldDsKKyAgICAgICAgfSBieUlkU2VsZjsKKyAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3Mq
IHN0dWI7CiAgICAgfSB1OwogCi0gICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGlu
ZTsKICAgICBDb2RlTG9jYXRpb25DYWxsIGNhbGxSZXR1cm5Mb2NhdGlvbjsKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvPiB3YXRjaHBvaW50czsKIH07
CiAKIGlubGluZSBDb2RlT3JpZ2luIGdldFN0cnVjdHVyZVN0dWJJbmZvQ29kZU9yaWdpbihTdHJ1
Y3R1cmVTdHViSW5mbyYgc3RydWN0dXJlU3R1YkluZm8pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTg5NTQzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTkzNSw3ICs5MzUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
SW4oTm9kZSogbm9kCiAgICAgCiAgICAgaWYgKEpTU3RyaW5nKiBzdHJpbmcgPSBub2RlLT5jaGls
ZDEoKS0+ZHluYW1pY0Nhc3RDb25zdGFudDxKU1N0cmluZyo+KCkpIHsKICAgICAgICAgaWYgKHN0
cmluZy0+dHJ5R2V0VmFsdWVJbXBsKCkgJiYgc3RyaW5nLT50cnlHZXRWYWx1ZUltcGwoKS0+aXNB
dG9taWMoKSkgewotICAgICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV9q
aXQuY29kZUJsb2NrKCktPmFkZFN0dWJJbmZvKCk7CisgICAgICAgICAgICBTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8gPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkU3R1YkluZm8oQWNjZXNzVHlw
ZTo6SW4pOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMpOwogICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkocmV2aXNpb24gMTg5NTQz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTM4LDcgKzUzOCw3IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0
YWNrTWFwcygKICAgICAgICAgICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdXNl
ZFJlZ2lzdGVyc0ZvcihyZWNvcmQpOwogICAgICAgICAgICAgICAgIEdQUlJlZyByZXN1bHQgPSBy
ZWNvcmQubG9jYXRpb25zWzBdLmRpcmVjdEdQUigpOwogICAgICAgICAgICAgICAgIEdQUlJlZyBv
YmogPSByZWNvcmQubG9jYXRpb25zWzFdLmRpcmVjdEdQUigpOwotICAgICAgICAgICAgICAgIFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IGNvZGVCbG9jay0+YWRkU3R1YkluZm8oKTsgCisg
ICAgICAgICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gY29kZUJsb2NrLT5h
ZGRTdHViSW5mbyhBY2Nlc3NUeXBlOjpJbik7IAogICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5j
b2RlT3JpZ2luID0gY29kZU9yaWdpbjsKICAgICAgICAgICAgICAgICBzdHViSW5mby0+Y2FsbFNp
dGVJbmRleCA9IGNoZWNrSW4uY2FsbFNpdGVJbmRleCgpOwogICAgICAgICAgICAgICAgIHN0dWJJ
bmZvLT5wYXRjaC5iYXNlR1BSID0gc3RhdGljX2Nhc3Q8aW50OF90PihvYmopOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9BY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9BY2Nlc3NvckNhbGxKSVRTdHVi
Um91dGluZS5jcHAJKHJldmlzaW9uIDE4OTU0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU1
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkFjY2Vzc29yQ2FsbEpJVFN0dWJS
b3V0aW5lLmgiCi0KLSNpZiBFTkFCTEUoSklUKQotCi0jaW5jbHVkZSAiQ2FsbExpbmtJbmZvLmgi
Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1BY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZTo6QWNjZXNz
b3JDYWxsSklUU3R1YlJvdXRpbmUoCi0gICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBj
b2RlLCBWTSYgdm0sIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua0luZm8+IGluZm8pCi0gICAgOiBH
Q0F3YXJlSklUU3R1YlJvdXRpbmUoY29kZSwgdm0pCi0gICAgLCBtX2NhbGxMaW5rSW5mbyhXVEY6
Om1vdmUoaW5mbykpCi17Ci19Ci0KLUFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lOjp+QWNjZXNz
b3JDYWxsSklUU3R1YlJvdXRpbmUoKQotewotfQotCi1ib29sIEFjY2Vzc29yQ2FsbEpJVFN0dWJS
b3V0aW5lOjp2aXNpdFdlYWsoVk0mIHZtKQotewotICAgIG1fY2FsbExpbmtJbmZvLT52aXNpdFdl
YWsodm0pOwotICAgIHJldHVybiB0cnVlOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2Vu
ZGlmIC8vIEVOQUJMRShKSVQpCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQWNj
ZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0FjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmgJKHJldmlzaW9uIDE4OTU0MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgQWNjZXNzb3JDYWxsSklUU3R1
YlJvdXRpbmVfaAotI2RlZmluZSBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZV9oCi0KLSNpZiBF
TkFCTEUoSklUKQotCi0jaW5jbHVkZSAiR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgiCi0KLW5hbWVz
cGFjZSBKU0MgewotCi1jbGFzcyBDYWxsTGlua0luZm87Ci0KLS8vIEpJVCBzdHViIHJvdXRpbmUg
Zm9yIHVzZSBieSBKYXZhU2NyaXB0IGFjY2Vzc29ycy4gVGhlc2Ugd2lsbCBiZSBtYWtpbmcgYSBK
UwotLy8gY2FsbCB0aGF0IHJlcXVpcmVzIGlubGluZSBjYWNoaW5nLiAKLQotY2xhc3MgQWNjZXNz
b3JDYWxsSklUU3R1YlJvdXRpbmUgOiBwdWJsaWMgR0NBd2FyZUpJVFN0dWJSb3V0aW5lIHsKLXB1
YmxpYzoKLSAgICBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZSgKLSAgICAgICAgY29uc3QgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmJiwgVk0mLCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtJbmZvPik7
Ci0gICAgCi0gICAgdmlydHVhbCB+QWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUoKTsKLSAgICAK
LSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRXZWFrKFZNJikgb3ZlcnJpZGU7Ci0gICAgCi0gICAgc3Rk
Ojp1bmlxdWVfcHRyPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm87Ci19OwotCi19IC8vIG5h
bWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0KLSNlbmRpZiAvLyBBY2Nlc3Nv
ckNhbGxKSVRTdHViUm91dGluZV9oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMTg5NTQzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTYzLDcgKzU2
Myw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJyYW5jaDMyKEVxdWFsLCByZWdzLnRhZ0dQ
UigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOwogI2VuZGlmCiAgICAg
fQotICAgIAorCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBKdW1wIGJyYW5jaFN0cnVj
dHVyZShSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgVCBsZWZ0SGFuZFNpZGUsIFN0cnVj
dHVyZSogc3RydWN0dXJlKQogICAgIHsKQEAgLTgzMiw2ICs4MzIsMTUgQEAgcHVibGljOgogI2Vu
ZGlmCiAgICAgfQogCisgICAgdm9pZCBib3hCb29sZWFuUGF5bG9hZChib29sIHZhbHVlLCBHUFJS
ZWcgcGF5bG9hZEdQUikKKyAgICB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgbW92ZShU
cnVzdGVkSW1tMzIoVmFsdWVGYWxzZSArIHZhbHVlKSwgcGF5bG9hZEdQUik7CisjZWxzZQorICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMih2YWx1ZSksIHBheWxvYWRHUFIpOworI2VuZGlmCisgICAg
fQorCiAgICAgdm9pZCBib3hCb29sZWFuKEdQUlJlZyBib29sR1BSLCBKU1ZhbHVlUmVncyBib3hl
ZFJlZ3MpCiAgICAgewogICAgICAgICBib3hCb29sZWFuUGF5bG9hZChib29sR1BSLCBib3hlZFJl
Z3MucGF5bG9hZEdQUigpKTsKQEAgLTgzOSw2ICs4NDgsMTcgQEAgcHVibGljOgogICAgICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSwgYm94ZWRSZWdzLnRhZ0dQUigp
KTsKICNlbmRpZgogICAgIH0KKworICAgIHZvaWQgYm94SW50MzIoR1BSUmVnIGludEdQUiwgSlNW
YWx1ZVJlZ3MgYm94ZWRSZWdzKQorICAgIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBt
b3ZlKGludEdQUiwgYm94ZWRSZWdzLmdwcigpKTsKKyAgICAgICAgb3I2NChUcnVzdGVkSW1tNjQo
VGFnVHlwZU51bWJlciksIGJveGVkUmVncy5ncHIoKSk7CisjZWxzZQorICAgICAgICBtb3ZlKGlu
dEdQUiwgYm94ZWRSZWdzLnBheWxvYWRHUFIoKSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkludDMyVGFnKSwgYm94ZWRSZWdzLnRhZ0dQUigpKTsKKyNlbmRpZgorICAgIH0K
ICAgICAKICAgICB2b2lkIGNhbGxFeGNlcHRpb25GdXp6KCk7CiAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0JpbmFyeVN3aXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9CaW5hcnlTd2l0Y2guY3BwCShyZXZpc2lvbiAxODk1NDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0JpbmFyeVN3aXRjaC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDkgKzI5LDEyIEBACiAjaWYgRU5BQkxFKEpJVCkKIAogI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAK
K3N0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKKwogc3RhdGljIHVuc2lnbmVkIGds
b2JhbENvdW50ZXI7IC8vIFdlIHVzZSBhIGRpZmZlcmVudCBzZWVkIGV2ZXJ5IHRpbWUgd2UgYXJl
IGludm9rZWQuCiAKIEJpbmFyeVN3aXRjaDo6QmluYXJ5U3dpdGNoKEdQUlJlZyB2YWx1ZSwgY29u
c3QgVmVjdG9yPGludDY0X3Q+JiBjYXNlcywgVHlwZSB0eXBlKQpAQCAtNDMsMTEgKzQ2LDE3IEBA
IEJpbmFyeVN3aXRjaDo6QmluYXJ5U3dpdGNoKEdQUlJlZyB2YWx1ZSwKIHsKICAgICBpZiAoY2Fz
ZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAg
ICAgZGF0YUxvZygiT3JpZ2luYWwgY2FzZXM6ICIsIGxpc3REdW1wKGNhc2VzKSwgIlxuIik7CiAg
ICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNhc2VzLnNpemUoKTsgKytpKQogICAg
ICAgICBtX2Nhc2VzLmFwcGVuZChDYXNlKGNhc2VzW2ldLCBpKSk7CiAgICAgCiAgICAgc3RkOjpz
b3J0KG1fY2FzZXMuYmVnaW4oKSwgbV9jYXNlcy5lbmQoKSk7CisKKyAgICBpZiAodmVyYm9zZSkK
KyAgICAgICAgZGF0YUxvZygiU29ydGVkIGNhc2VzOiAiLCBsaXN0RHVtcChtX2Nhc2VzKSwgIlxu
Iik7CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IG1fY2FzZXMuc2l6ZSgpOyAr
K2kpCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fY2FzZXNbaSAtIDFdIDwgbV9jYXNlc1tpXSk7
CkBAIC0xMjgsNiArMTM3LDE1IEBAIGJvb2wgQmluYXJ5U3dpdGNoOjphZHZhbmNlKE1hY3JvQXNz
ZW1ibGUKIAogdm9pZCBCaW5hcnlTd2l0Y2g6OmJ1aWxkKHVuc2lnbmVkIHN0YXJ0LCBib29sIGhh
cmRTdGFydCwgdW5zaWduZWQgZW5kKQogeworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRh
TG9nKCJCdWlsZGluZyB3aXRoIHN0YXJ0ID0gIiwgc3RhcnQsICIsIGhhcmRTdGFydCA9ICIsIGhh
cmRTdGFydCwgIiwgZW5kID0gIiwgZW5kLCAiXG4iKTsKKworICAgIGF1dG8gYXBwZW5kID0gWyZd
IChjb25zdCBCcmFuY2hDb2RlJiBjb2RlKSB7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAg
ICAgICAgZGF0YUxvZygiPT0+ICIsIGNvZGUsICJcbiIpOworICAgICAgICBtX2JyYW5jaGVzLmFw
cGVuZChjb2RlKTsKKyAgICB9OworICAgIAogICAgIHVuc2lnbmVkIHNpemUgPSBlbmQgLSBzdGFy
dDsKICAgICAKICAgICBSRUxFQVNFX0FTU0VSVChzaXplKTsKQEAgLTE0MSw2ICsxNTksOSBAQCB2
b2lkIEJpbmFyeVN3aXRjaDo6YnVpbGQodW5zaWduZWQgc3RhcnQsCiAgICAgY29uc3QgdW5zaWdu
ZWQgbGVhZlRocmVzaG9sZCA9IDM7CiAgICAgCiAgICAgaWYgKHNpemUgPD0gbGVhZlRocmVzaG9s
ZCkgeworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIkl0J3MgYSBs
ZWFmLlxuIik7CisgICAgICAgIAogICAgICAgICAvLyBJdCB0dXJucyBvdXQgdGhhdCBmb3IgZXhh
Y3RseSB0aHJlZSBjYXNlcyBvciBsZXNzLCBpdCdzIGJldHRlciB0byBqdXN0IGNvbXBhcmUgZWFj
aAogICAgICAgICAvLyBjYXNlIGluZGl2aWR1YWxseS4gVGhpcyBzYXZlcyAxLzYgb2YgYSBicmFu
Y2ggb24gYXZlcmFnZSwgYW5kIHVwIHRvIDEvMyBvZiBhIGJyYW5jaCBpbgogICAgICAgICAvLyBl
eHRyZW1lIGNhc2VzIHdoZXJlIHRoZSBkaXZpZGUtYW5kLWNvbnF1ZXIgYm90dG9tcyBvdXQgaW4g
YSBsb3Qgb2YgMy1jYXNlIHN1YnN3aXRjaGVzLgpAQCAtMTU4LDEyICsxNzksMTUgQEAgdm9pZCBC
aW5hcnlTd2l0Y2g6OmJ1aWxkKHVuc2lnbmVkIHN0YXJ0LAogICAgICAgICAgICAgJiYgbV9jYXNl
c1tzdGFydCArIHNpemUgLSAxXS52YWx1ZSA9PSBtX2Nhc2VzW3N0YXJ0ICsgc2l6ZV0udmFsdWUg
LSAxKSB7CiAgICAgICAgICAgICBhbGxDb25zZWN1dGl2ZSA9IHRydWU7CiAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZSAtIDE7ICsraSkgewotICAgICAgICAgICAgICAg
IGlmIChtX2Nhc2VzW2ldLnZhbHVlICsgMSAhPSBtX2Nhc2VzW2kgKyAxXS52YWx1ZSkgeworICAg
ICAgICAgICAgICAgIGlmIChtX2Nhc2VzW3N0YXJ0ICsgaV0udmFsdWUgKyAxICE9IG1fY2FzZXNb
c3RhcnQgKyBpICsgMV0udmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICAgYWxsQ29uc2VjdXRp
dmUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQogICAgICAgICB9CisKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgICAgICBkYXRhTG9nKCJhbGxDb25zZWN1dGl2ZSA9ICIsIGFsbENvbnNlY3V0aXZlLCAiXG4i
KTsKICAgICAgICAgCiAgICAgICAgIFZlY3Rvcjx1bnNpZ25lZCwgMz4gbG9jYWxDYXNlSW5kaWNl
czsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKQEAgLTE3OCwx
NyArMjAyLDIwIEBAIHZvaWQgQmluYXJ5U3dpdGNoOjpidWlsZCh1bnNpZ25lZCBzdGFydCwKICAg
ICAgICAgICAgIH0pOwogICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNpemUgLSAxOyArK2kpIHsKLSAgICAgICAgICAgIG1fYnJhbmNoZXMuYXBwZW5kKEJyYW5jaENv
ZGUoTm90RXF1YWxUb1B1c2gsIGxvY2FsQ2FzZUluZGljZXNbaV0pKTsKLSAgICAgICAgICAgIG1f
YnJhbmNoZXMuYXBwZW5kKEJyYW5jaENvZGUoRXhlY3V0ZUNhc2UsIGxvY2FsQ2FzZUluZGljZXNb
aV0pKTsKLSAgICAgICAgICAgIG1fYnJhbmNoZXMuYXBwZW5kKEJyYW5jaENvZGUoUG9wKSk7Cisg
ICAgICAgICAgICBhcHBlbmQoQnJhbmNoQ29kZShOb3RFcXVhbFRvUHVzaCwgbG9jYWxDYXNlSW5k
aWNlc1tpXSkpOworICAgICAgICAgICAgYXBwZW5kKEJyYW5jaENvZGUoRXhlY3V0ZUNhc2UsIGxv
Y2FsQ2FzZUluZGljZXNbaV0pKTsKKyAgICAgICAgICAgIGFwcGVuZChCcmFuY2hDb2RlKFBvcCkp
OwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoIWFsbENvbnNlY3V0aXZlKQotICAg
ICAgICAgICAgbV9icmFuY2hlcy5hcHBlbmQoQnJhbmNoQ29kZShOb3RFcXVhbFRvRmFsbFRocm91
Z2gsIGxvY2FsQ2FzZUluZGljZXMubGFzdCgpKSk7CisgICAgICAgICAgICBhcHBlbmQoQnJhbmNo
Q29kZShOb3RFcXVhbFRvRmFsbFRocm91Z2gsIGxvY2FsQ2FzZUluZGljZXMubGFzdCgpKSk7CiAg
ICAgICAgIAotICAgICAgICBtX2JyYW5jaGVzLmFwcGVuZChCcmFuY2hDb2RlKEV4ZWN1dGVDYXNl
LCBsb2NhbENhc2VJbmRpY2VzLmxhc3QoKSkpOworICAgICAgICBhcHBlbmQoQnJhbmNoQ29kZShF
eGVjdXRlQ2FzZSwgbG9jYWxDYXNlSW5kaWNlcy5sYXN0KCkpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KKworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJJdCdzIG5vdCBhIGxl
YWYuXG4iKTsKICAgICAgICAgCiAgICAgLy8gVGhlcmUgYXJlIHR3byBkaWZmZXJlbnQgc3RyYXRl
Z2llcyB3ZSBjb3VsZCBjb25zaWRlciBoZXJlOgogICAgIC8vCkBAIC0yODYsNyArMzEzLDEwIEBA
IHZvaWQgQmluYXJ5U3dpdGNoOjpidWlsZCh1bnNpZ25lZCBzdGFydCwKICAgICAvLyBhbmQgZ2V0
IGEgMS82IHNwZWVkLXVwIG9uIGF2ZXJhZ2UgZm9yIHRha2luZyBhbiBleHBsaWNpdCBjYXNlLgog
ICAgICAgICAKICAgICB1bnNpZ25lZCBtZWRpYW5JbmRleCA9IChzdGFydCArIGVuZCkgLyAyOwot
ICAgICAgICAKKworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJtZWRpYW5JbmRl
eCA9ICIsIG1lZGlhbkluZGV4LCAiXG4iKTsKKwogICAgIC8vIFdlIHdhbnQgbWVkaWFuSW5kZXgg
dG8gcG9pbnQgdG8gdGhlIHRoaW5nIHdlIHdpbGwgZG8gYSBsZXNzLXRoYW4gY29tcGFyZSBhZ2Fp
bnN0LiBXZSB3YW50CiAgICAgLy8gdGhpcyBsZXNzLXRoYW4gY29tcGFyZSB0byBzcGxpdCB0aGUg
Y3VycmVudCBzdWJsaXN0IGludG8gZXF1YWwtc2l6ZWQgc3VibGlzdHMsIG9yCiAgICAgLy8gbmVh
cmx5LWVxdWFsLXNpemVkIHdpdGggc29tZSByYW5kb21uZXNzIGlmIHdlJ3JlIGluIHRoZSBvZGQg
Y2FzZS4gV2l0aCB0aGUgYWJvdmUKQEAgLTMxNywxMiArMzQ3LDQ0IEBAIHZvaWQgQmluYXJ5U3dp
dGNoOjpidWlsZCh1bnNpZ25lZCBzdGFydCwKICAgICBSRUxFQVNFX0FTU0VSVChtZWRpYW5JbmRl
eCA+IHN0YXJ0KTsKICAgICBSRUxFQVNFX0FTU0VSVChtZWRpYW5JbmRleCArIDEgPCBlbmQpOwog
ICAgICAgICAKLSAgICBtX2JyYW5jaGVzLmFwcGVuZChCcmFuY2hDb2RlKExlc3NUaGFuVG9QdXNo
LCBtZWRpYW5JbmRleCkpOworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJmaXhl
ZCBtZWRpYW5JbmRleCA9ICIsIG1lZGlhbkluZGV4LCAiXG4iKTsKKworICAgIGFwcGVuZChCcmFu
Y2hDb2RlKExlc3NUaGFuVG9QdXNoLCBtZWRpYW5JbmRleCkpOwogICAgIGJ1aWxkKG1lZGlhbklu
ZGV4LCB0cnVlLCBlbmQpOwotICAgIG1fYnJhbmNoZXMuYXBwZW5kKEJyYW5jaENvZGUoUG9wKSk7
CisgICAgYXBwZW5kKEJyYW5jaENvZGUoUG9wKSk7CiAgICAgYnVpbGQoc3RhcnQsIGhhcmRTdGFy
dCwgbWVkaWFuSW5kZXgpOwogfQogCit2b2lkIEJpbmFyeVN3aXRjaDo6Q2FzZTo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiPHZhbHVlOiAiICwgdmFsdWUs
ICIsIGluZGV4OiAiLCBpbmRleCwgIj4iKTsKK30KKwordm9pZCBCaW5hcnlTd2l0Y2g6OkJyYW5j
aENvZGU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGtpbmQp
IHsKKyAgICBjYXNlIE5vdEVxdWFsVG9GYWxsVGhyb3VnaDoKKyAgICAgICAgb3V0LnByaW50KCJO
b3RFcXVhbFRvRmFsbFRocm91Z2giKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOb3RFcXVh
bFRvUHVzaDoKKyAgICAgICAgb3V0LnByaW50KCJOb3RFcXVhbFRvUHVzaCIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIExlc3NUaGFuVG9QdXNoOgorICAgICAgICBvdXQucHJpbnQoIkxlc3NU
aGFuVG9QdXNoIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUG9wOgorICAgICAgICBvdXQu
cHJpbnQoIlBvcCIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEV4ZWN1dGVDYXNlOgorICAg
ICAgICBvdXQucHJpbnQoIkV4ZWN1dGVDYXNlIik7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGlmIChpbmRleCAhPSBVSU5UX01BWCkKKyAgICAgICAgb3V0LnByaW50KCIoIiwgaW5kZXgs
ICIpIik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmluYXJ5U3dpdGNoLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CaW5hcnlTd2l0Y2guaAkocmV2aXNpb24g
MTg5NTQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CaW5hcnlTd2l0Y2guaAkod29y
a2luZyBjb3B5KQpAQCAtOTQsNiArOTQsOCBAQCBwcml2YXRlOgogICAgICAgICB7CiAgICAgICAg
ICAgICByZXR1cm4gdmFsdWUgPCBvdGhlci52YWx1ZTsKICAgICAgICAgfQorCisgICAgICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKICAgICAgICAgCiAgICAgICAgIGludDY0
X3QgdmFsdWU7CiAgICAgICAgIHVuc2lnbmVkIGluZGV4OwpAQCAtMTE3LDYgKzExOSw4IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAsIGluZGV4KGluZGV4KQogICAgICAgICB7CiAgICAgICAgIH0K
KworICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CiAgICAgICAgIAog
ICAgICAgICBCcmFuY2hLaW5kIGtpbmQ7CiAgICAgICAgIHVuc2lnbmVkIGluZGV4OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAxODk1NDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw2IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgc3RydWN0IEluc3RydWN0aW9uOwogICAgIHN0cnVjdCBPcGVyYW5k
VHlwZXM7Ci0gICAgc3RydWN0IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdDsKICAgICBz
dHJ1Y3QgU2ltcGxlSnVtcFRhYmxlOwogICAgIHN0cnVjdCBTdHJpbmdKdW1wVGFibGU7CiAgICAg
c3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDE4OTU0
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zNiwyMiArMzYsMjQgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIHN0
YXRpYyBTdHJ1Y3R1cmVTdHViSW5mbyogZ2FyYmFnZVN0dWJJbmZvKCkKIHsKLSAgICBzdGF0aWMg
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbmV3IFN0cnVjdHVyZVN0dWJJbmZvKCk7Cisg
ICAgc3RhdGljIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG5ldyBTdHJ1Y3R1cmVTdHVi
SW5mbyhBY2Nlc3NUeXBlOjpHZXQpOwogICAgIHJldHVybiBzdHViSW5mbzsKIH0KIAotSklUSW5s
aW5lQ2FjaGVHZW5lcmF0b3I6OkpJVElubGluZUNhY2hlR2VuZXJhdG9yKENvZGVCbG9jayogY29k
ZUJsb2NrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUpCitK
SVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoCisgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBj
YWxsU2l0ZSwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlKQogICAgIDogbV9jb2RlQmxvY2soY29kZUJs
b2NrKQogewotICAgIG1fc3R1YkluZm8gPSBtX2NvZGVCbG9jayA/IG1fY29kZUJsb2NrLT5hZGRT
dHViSW5mbygpIDogZ2FyYmFnZVN0dWJJbmZvKCk7CisgICAgbV9zdHViSW5mbyA9IG1fY29kZUJs
b2NrID8gbV9jb2RlQmxvY2stPmFkZFN0dWJJbmZvKGFjY2Vzc1R5cGUpIDogZ2FyYmFnZVN0dWJJ
bmZvKCk7CiAgICAgbV9zdHViSW5mby0+Y29kZU9yaWdpbiA9IGNvZGVPcmlnaW47CiAgICAgbV9z
dHViSW5mby0+Y2FsbFNpdGVJbmRleCA9IGNhbGxTaXRlOwogfQogCiBKSVRCeUlkR2VuZXJhdG9y
OjpKSVRCeUlkR2VuZXJhdG9yKAotICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1
c2VkUmVnaXN0ZXJzLAotICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBT
cGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlKQotICAgIDogSklUSW5saW5lQ2FjaGVHZW5lcmF0
b3IoY29kZUJsb2NrLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSkKKyAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBBY2Nl
c3NUeXBlIGFjY2Vzc1R5cGUsCisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMs
IEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLAorICAgIFNwaWxsUmVnaXN0ZXJz
TW9kZSBzcGlsbE1vZGUpCisgICAgOiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcihjb2RlQmxvY2ss
IGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBhY2Nlc3NUeXBlKQogICAgICwgbV9iYXNlKGJhc2UpCiAg
ICAgLCBtX3ZhbHVlKHZhbHVlKQogewpAQCAtMTE0LDcgKzExNiw4IEBAIHZvaWQgSklUQnlJZEdl
bmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aEMKIEpJVEdldEJ5SWRHZW5lcmF0b3I6OkpJVEdldEJ5
SWRHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVPcmlnaW4gY29kZU9y
aWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdp
c3RlcnMsCiAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIFNwaWxsUmVn
aXN0ZXJzTW9kZSBzcGlsbE1vZGUpCi0gICAgOiBKSVRCeUlkR2VuZXJhdG9yKGNvZGVCbG9jaywg
Y29kZU9yaWdpbiwgY2FsbFNpdGUsIHVzZWRSZWdpc3RlcnMsIGJhc2UsIHZhbHVlLCBzcGlsbE1v
ZGUpCisgICAgOiBKSVRCeUlkR2VuZXJhdG9yKAorICAgICAgICBjb2RlQmxvY2ssIGNvZGVPcmln
aW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpHZXQsIHVzZWRSZWdpc3RlcnMsIGJhc2UsIHZhbHVl
LCBzcGlsbE1vZGUpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoYmFzZS5wYXlsb2FkR1BSKCkgIT0g
dmFsdWUudGFnR1BSKCkpOwogfQpAQCAtMTQwLDcgKzE0Myw4IEBAIEpJVFB1dEJ5SWRHZW5lcmF0
b3I6OkpJVFB1dEJ5SWRHZW5lcmF0b3IKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBjb25zdCBSZWdpc3RlclNl
dCYgdXNlZFJlZ2lzdGVycywKICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1
ZSwgR1BSUmVnIHNjcmF0Y2gsIFNwaWxsUmVnaXN0ZXJzTW9kZSBzcGlsbE1vZGUsCiAgICAgRUNN
QU1vZGUgZWNtYU1vZGUsIFB1dEtpbmQgcHV0S2luZCkKLSAgICA6IEpJVEJ5SWRHZW5lcmF0b3Io
Y29kZUJsb2NrLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgdXNlZFJlZ2lzdGVycywgYmFzZSwgdmFs
dWUsIHNwaWxsTW9kZSkKKyAgICA6IEpJVEJ5SWRHZW5lcmF0b3IoCisgICAgICAgIGNvZGVCbG9j
aywgY29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OlB1dCwgdXNlZFJlZ2lzdGVycywg
YmFzZSwgdmFsdWUsIHNwaWxsTW9kZSkKICAgICAsIG1fc2NyYXRjaChzY3JhdGNoKQogICAgICwg
bV9lY21hTW9kZShlY21hTW9kZSkKICAgICAsIG1fcHV0S2luZChwdXRLaW5kKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3Iu
aAkocmV2aXNpb24gMTg5NTQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxp
bmVDYWNoZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVk
ZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIlB1dEtpbmQuaCIKICNpbmNsdWRlICJSZWdpc3Rl
clNldC5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAKIG5hbWVzcGFjZSBKU0Mg
ewogCkBAIC00MSw3ICs0Miw3IEBAIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIEpJVElubGluZUNh
Y2hlR2VuZXJhdG9yIHsKIHByb3RlY3RlZDoKICAgICBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcigp
IHsgfQotICAgIEpJVElubGluZUNhY2hlR2VuZXJhdG9yKENvZGVCbG9jayosIENvZGVPcmlnaW4s
IENhbGxTaXRlSW5kZXgpOworICAgIEpJVElubGluZUNhY2hlR2VuZXJhdG9yKENvZGVCbG9jayos
IENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIEFjY2Vzc1R5cGUpOwogICAgIAogcHVibGljOgog
ICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fc3R1Yklu
Zm87IH0KQEAgLTU2LDggKzU3LDggQEAgcHJvdGVjdGVkOgogICAgIEpJVEJ5SWRHZW5lcmF0b3Io
KSB7IH0KIAogICAgIEpJVEJ5SWRHZW5lcmF0b3IoCi0gICAgICAgIENvZGVCbG9jayosIENvZGVP
cmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJlZ2lzdGVyU2V0JiwgSlNWYWx1ZVJlZ3MgYmFz
ZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsCi0gICAgICAgIFNwaWxsUmVnaXN0ZXJzTW9kZSBzcGlsbE1v
ZGUpOworICAgICAgICBDb2RlQmxvY2sqLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBBY2Nl
c3NUeXBlLCBjb25zdCBSZWdpc3RlclNldCYsIEpTVmFsdWVSZWdzIGJhc2UsCisgICAgICAgIEpT
VmFsdWVSZWdzIHZhbHVlLCBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlKTsKICAgICAKIHB1
YmxpYzoKICAgICB2b2lkIHJlcG9ydFNsb3dQYXRoQ2FsbChNYWNyb0Fzc2VtYmxlcjo6TGFiZWwg
c2xvd1BhdGhCZWdpbiwgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTg5NTQzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTYzLDI0ICsxNjMsNiBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkdlCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShiYXNlVmFsdWUuZ2V0KGV4ZWMs
IGlkZW50LCBzbG90KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uR2V0QnlJZEJ1aWxkTGlzdChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbywgRW5jb2RlZEpTVmFsdWUgYmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKLXsK
LSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKLQotICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9t
VWlkKHZtLCB1aWQpOwotICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFj
Y2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKTsKLQotICAgIEpTVmFsdWUgYmFzZVZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGJhc2UpOwotICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1
ZSk7Ci0gICAgYm9vbCBoYXNSZXN1bHQgPSBiYXNlVmFsdWUuZ2V0UHJvcGVydHlTbG90KGV4ZWMs
IGlkZW50LCBzbG90KTsKLSAgICAKLSAgICBpZiAoYWNjZXNzVHlwZSA9PSBzdGF0aWNfY2FzdDxB
Y2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSkpCi0gICAgICAgIGJ1aWxkR2V0QnlJRExp
c3QoZXhlYywgYmFzZVZhbHVlLCBpZGVudCwgc2xvdCwgKnN0dWJJbmZvKTsKLQotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoaGFzUmVzdWx0PyBzbG90LmdldFZhbHVlKGV4ZWMsIGlkZW50KSA6
IGpzVW5kZWZpbmVkKCkpOwotfQotCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbywgRW5jb2RlZEpTVmFsdWUgYmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKIHsK
ICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKQEAgLTE5Nyw3ICsxNzksNiBAQCBFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAgICAgICAgIHN0dWJJbmZvLT5zZWVuID0g
dHJ1ZTsKICAgICAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGhhc1Jlc3VsdD8gc2xvdC5n
ZXRWYWx1ZShleGVjLCBpZGVudCkgOiBqc1VuZGVmaW5lZCgpKTsKLQogfQogCiBFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkluT3B0aW1pemUoRXhlY1N0YXRlKiBleGVjLCBT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEpTQ2VsbCogYmFzZSwgVW5pcXVlZFN0cmluZ0lt
cGwqIGtleSkKQEAgLTM5NCw5MCArMzc1LDYgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blB1dEJ5SWREaXJlYwogICAgICAgICBzdHViSW5mby0+c2VlbiA9IHRydWU7CiB9CiAKLXZvaWQg
SklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0QnVpbGRMaXN0KEV4ZWNTdGF0ZSog
ZXhlYywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlk
KQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIAotICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlm
aWVyOjpmcm9tVWlkKHZtLCB1aWQpOwotICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRp
Y19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKTsKLQotICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBKU1ZhbHVlIGJhc2VW
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSk7Ci0gICAgUHV0UHJvcGVydHlTbG90
IHNsb3QoYmFzZVZhbHVlLCB0cnVlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQo
KSk7Ci0gICAgCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlVmFsdWUuaXNDZWxsKCkg
PyBiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgqdm0pIDogbnVsbHB0cjsgCi0gICAgYmFz
ZVZhbHVlLnB1dChleGVjLCBpZGVudCwgdmFsdWUsIHNsb3QpOwotCi0gICAgaWYgKGFjY2Vzc1R5
cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBidWlsZFB1dEJ5SWRMaXN0KGV4ZWMsIGJhc2VWYWx1ZSwgc3Ry
dWN0dXJlLCBpZGVudCwgc2xvdCwgKnN0dWJJbmZvLCBOb3REaXJlY3QpOwotfQotCi12b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUq
IGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCkKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRp
Zmllcjo6ZnJvbVVpZCh2bSwgdWlkKTsKLSAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0
aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSk7Ci0KLSAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgSlNWYWx1ZSBiYXNl
VmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpOwotICAgIFB1dFByb3BlcnR5U2xv
dCBzbG90KGJhc2VWYWx1ZSwgZmFsc2UsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4
dCgpKTsKLQotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZVZhbHVlLmlzQ2VsbCgpID8g
YmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKnZtKSA6IG51bGxwdHI7Ci0gICAgYmFzZVZh
bHVlLnB1dChleGVjLCBpZGVudCwgdmFsdWUsIHNsb3QpOwotICAgIAotICAgIGlmIChhY2Nlc3NU
eXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIAotICAgIGJ1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZVZhbHVl
LCBzdHJ1Y3R1cmUsIGlkZW50LCBzbG90LCAqc3R1YkluZm8sIE5vdERpcmVjdCk7Ci19Ci0KLXZv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0QnVpbGRMaXN0KEV4
ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIAotICAgIElkZW50aWZpZXIgaWRlbnQg
PSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCB1aWQpOwotICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlw
ZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKTsKLSAgICAK
LSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAg
SlNPYmplY3QqIGJhc2VPYmplY3QgPSBhc09iamVjdChKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJh
c2UpKTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlT2JqZWN0LCB0cnVlLCBleGVjLT5j
b2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7Ci0KLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IGJhc2VPYmplY3QtPnN0cnVjdHVyZSgqdm0pOyAgICAKLSAgICBiYXNlT2JqZWN0LT5wdXRE
aXJlY3QoKnZtLCBpZGVudCwgdmFsdWUsIHNsb3QpOwotICAgIAotICAgIGlmIChhY2Nlc3NUeXBl
ICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIAotICAgIGJ1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZU9iamVjdCwg
c3RydWN0dXJlLCBpZGVudCwgc2xvdCwgKnN0dWJJbmZvLCBEaXJlY3QpOwotfQotCi12b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1aWxkTGlzdChFeGVj
U3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCkKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlkZW50ID0g
SWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgdWlkKTsKLSAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUg
PSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSk7Ci0KLSAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgSlNPYmpl
Y3QqIGJhc2VPYmplY3QgPSBhc09iamVjdChKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpKTsK
LSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlT2JqZWN0LCBmYWxzZSwgZXhlYy0+Y29kZUJs
b2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwotCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBi
YXNlT2JqZWN0LT5zdHJ1Y3R1cmUoKnZtKTsgICAgCi0gICAgYmFzZU9iamVjdC0+cHV0RGlyZWN0
KCp2bSwgaWRlbnQsIHZhbHVlLCBzbG90KTsKLQotICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRp
Y19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIAotICAgIGJ1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZU9iamVjdCwgc3RydWN0dXJl
LCBpZGVudCwgc2xvdCwgKnN0dWJJbmZvLCBEaXJlY3QpOwotfQotCiB2b2lkIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uUmVhbGxvY2F0ZVN0b3JhZ2VBbmRGaW5pc2hQdXQoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCogYmFzZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCwgRW5jb2RlZEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMTg5NTQz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjgsNyArMjgsNiBAQAogCiAjaWYgRU5BQkxFKEpJVCkKIAotI2luY2x1ZGUgIkFjY2Vz
c29yQ2FsbEpJVFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiQmluYXJ5U3dpdGNoLmgiCiAjaW5j
bHVkZSAiQ0NhbGxIZWxwZXJzLmgiCiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgpAQCAtNDAs
OCArMzksNyBAQAogI2luY2x1ZGUgIkpJVElubGluZXMuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVy
LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIlBvbHltb3JwaGljR2V0QnlJ
ZExpc3QuaCIKLSNpbmNsdWRlICJQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgiCisjaW5jbHVkZSAi
UG9seW1vcnBoaWNBY2Nlc3MuaCIKICNpbmNsdWRlICJSZWdFeHBNYXRjaGVzQXJyYXkuaCIKICNp
bmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJTdGFja0FsaWdu
bWVudC5oIgpAQCAtOTQsMTMgKzkyLDEwIEBAIHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVC
bG9jayogY29kZUIKIH0KIAogc3RhdGljIHZvaWQgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKAotICAg
IFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCi0gICAgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIGNvbnN0IEZ1bmN0aW9uUHRyICZzbG93UGF0aEZ1
bmN0aW9uLAorICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLAorICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwg
Y29uc3QgRnVuY3Rpb25QdHIgJnNsb3dQYXRoRnVuY3Rpb24sCiAgICAgYm9vbCBjb21wYWN0KQog
ewotICAgIGlmIChzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkKLSAg
ICAgICAgdm0ucmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVydHkocHJvcGVydHlOYW1l
LCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwotICAgIAogICAgIC8vIE9ubHkg
b3B0aW1pemUgb25jZSEKICAgICByZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbiwgc2xvd1BhdGhGdW5jdGlvbik7CiAKQEAgLTEyOSwzMyArMTI0LDQ0IEBA
IHN0YXRpYyB2b2lkIHJlcGF0Y2hCeUlkU2VsZkFjY2VzcygKICNlbmRpZgogfQogCi1zdGF0aWMg
dm9pZCBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9uKAotICAgIGNvbnN0IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uJiBjb25kaXRpb24sIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8sCi0gICAgQ0NhbGxIZWxwZXJzJiBqaXQsIE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBHUFJSZWcgc2NyYXRjaEdQUikKLXsKLSAgICBpZiAo
Y29uZGl0aW9uLmlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkg
ewotICAgICAgICBjb25kaXRpb24ub2JqZWN0KCktPnN0cnVjdHVyZSgpLT5hZGRUcmFuc2l0aW9u
V2F0Y2hwb2ludCgKLSAgICAgICAgICAgIHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2Nr
LCBjb25kaXRpb24pKTsKLSAgICAgICAgcmV0dXJuOworc3RhdGljIHZvaWQgcmVzZXRHZXRCeUlE
Q2hlY2tBbmRMb2FkKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBDb2RlTG9j
YXRpb25EYXRhTGFiZWwzMiBzdHJ1Y3R1cmVMYWJlbCA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0Y2guZGVsdGFD
aGVja0ltbVRvQ2FsbCk7CisgICAgaWYgKE1hY3JvQXNzZW1ibGVyOjpjYW5KdW1wUmVwbGFjZVBh
dGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKCkpIHsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJl
dmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goCisgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6c3RhcnRPZlBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoT25B
ZGRyZXNzKHN0cnVjdHVyZUxhYmVsKSwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKAorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWdpc3Rl
cklEPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKSwKKyAgICAgICAgICAgICAgICBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4odW51
c2VkUG9pbnRlcikpOwogICAgIH0KKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEludDMyKHN0
cnVjdHVyZUxhYmVsLCBzdGF0aWNfY2FzdDxpbnQzMl90Pih1bnVzZWRQb2ludGVyKSk7CisjaWYg
VVNFKEpTVkFMVUU2NCkKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENvbXBhY3Qoc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5w
YXRjaC5kZWx0YUNhbGxUb0xvYWRPclN0b3JlKSwgMCk7CisjZWxzZQorICAgIE1hY3JvQXNzZW1i
bGVyOjpyZXBhdGNoQ29tcGFjdChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVs
Q29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUp
LCAwKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENvbXBhY3Qoc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0
YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSksIDApOworI2VuZGlmCit9CiAKLSAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IGNvbmRpdGlvbi5vYmplY3QoKS0+c3RydWN0dXJlKCk7Ci0gICAgUkVM
RUFTRV9BU1NFUlQoY29uZGl0aW9uLnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eUFzc3VtaW5nSW1w
dXJlUHJvcGVydHlXYXRjaHBvaW50KHN0cnVjdHVyZSkpOwotICAgIGppdC5tb3ZlKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGNvbmRpdGlvbi5vYmplY3QoKSksIHNjcmF0Y2hHUFIpOwot
ICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoCi0gICAgICAgIGppdC5icmFuY2hTdHJ1Y3R1cmUoCi0g
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCi0gICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCBzdHJ1Y3R1cmUpKTsKLX0KLQotc3RhdGljIHZvaWQgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbnMoCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIHNldCwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywKLSAgICBDQ2FsbEhl
bHBlcnMmIGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEdQUlJl
ZyBzY3JhdGNoR1BSKQotewotICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24m
IGNvbmRpdGlvbiA6IHNldCkgewotICAgICAgICBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9u
KAotICAgICAgICAgICAgY29uZGl0aW9uLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBqaXQsIGZhaWx1
cmVDYXNlcywgc2NyYXRjaEdQUik7CitzdGF0aWMgdm9pZCByZXNldFB1dEJ5SURDaGVja0FuZExv
YWQoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIENvZGVMb2NhdGlvbkRhdGFM
YWJlbDMyIHN0cnVjdHVyZUxhYmVsID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFM
YWJlbDMyQXRPZmZzZXQoLShpbnRwdHJfdClzdHViSW5mby5wYXRjaC5kZWx0YUNoZWNrSW1tVG9D
YWxsKTsKKyAgICBpZiAoTWFjcm9Bc3NlbWJsZXI6OmNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJh
bmNoMzJXaXRoUGF0Y2goKSkgeworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmV2ZXJ0SnVtcFJl
cGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaCgKKyAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpzdGFydE9mUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2hPbkFkZHJlc3Moc3Ry
dWN0dXJlTGFiZWwpLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoCisgICAg
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+KHN0dWJJ
bmZvLnBhdGNoLmJhc2VHUFIpLAorICAgICAgICAgICAgICAgIEpTQ2VsbDo6c3RydWN0dXJlSURP
ZmZzZXQoKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQzMl90Pih1bnVzZWRQb2ludGVy
KSk7CiAgICAgfQorICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIoc3RydWN0dXJlTGFi
ZWwsIHN0YXRpY19jYXN0PGludDMyX3Q+KHVudXNlZFBvaW50ZXIpKTsKKyNpZiBVU0UoSlNWQUxV
RTY0KQorICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIoc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9M
b2FkT3JTdG9yZSksIDApOworI2Vsc2UKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEludDMy
KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZv
LnBhdGNoLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUpLCAwKTsKKyAgICBNYWNyb0Fzc2VtYmxl
cjo6cmVwYXRjaEludDMyKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0
T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKSwgMCk7
CisjZW5kaWYKIH0KIAogc3RhdGljIHZvaWQgcmVwbGFjZVdpdGhKdW1wKFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbywgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHRhcmdldCkKQEAgLTE2
OCw2ICsxNzQsOCBAQCBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoU3RydWN0dXJlU3R1CiAg
ICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCh0YXJnZXQpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KKworICAgIHJlc2V0R2V0QnlJRENoZWNrQW5kTG9hZChzdHViSW5mbyk7CiAgICAgCiAg
ICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKAogICAgICAgICBzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KApAQCAtMTc1LDQyNyArMTgzLDYgQEAgc3RhdGljIHZv
aWQgcmVwbGFjZVdpdGhKdW1wKFN0cnVjdHVyZVN0dQogICAgICAgICBDb2RlTG9jYXRpb25MYWJl
bCh0YXJnZXQpKTsKIH0KIAotc3RhdGljIHZvaWQgZW1pdFJlc3RvcmVTY3JhdGNoKE1hY3JvQXNz
ZW1ibGVyJiBzdHViSml0LCBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBHUFJSZWcgc2NyYXRj
aEdQUiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAmIHN1Y2Nlc3MsIE1hY3JvQXNzZW1ibGVyOjpKdW1w
JiBmYWlsLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzKQotewotICAgIGlm
IChuZWVkVG9SZXN0b3JlU2NyYXRjaCkgewotICAgICAgICBzdHViSml0LnBvcFRvUmVzdG9yZShz
Y3JhdGNoR1BSKTsKLSAgICAgICAgCi0gICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsK
LSAgICAgICAgCi0gICAgICAgIC8vIGxpbmsgZmFpbHVyZSBjYXNlcyBoZXJlLCBzbyB3ZSBjYW4g
cG9wIHNjcmF0Y2hHUFIsIGFuZCB0aGVuIGp1bXAgYmFjay4KLSAgICAgICAgZmFpbHVyZUNhc2Vz
LmxpbmsoJnN0dWJKaXQpOwotICAgICAgICAKLSAgICAgICAgc3R1YkppdC5wb3BUb1Jlc3RvcmUo
c2NyYXRjaEdQUik7Ci0gICAgICAgIAotICAgICAgICBmYWlsID0gc3R1YkppdC5qdW1wKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgp
OwotfQotCi1zdGF0aWMgdm9pZCBsaW5rUmVzdG9yZVNjcmF0Y2goTGlua0J1ZmZlciYgcGF0Y2hC
dWZmZXIsIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1
Y2Nlc3MsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhaWwsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBmYWlsdXJlQ2FzZXMsIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCwgQ29kZUxvY2F0
aW9uTGFiZWwgc2xvd0Nhc2VCZWdpbikKLXsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3Ms
IHN1Y2Nlc3NMYWJlbCk7Ci0gICAgICAgIAotICAgIGlmIChuZWVkVG9SZXN0b3JlU2NyYXRjaCkg
ewotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWwsIHNsb3dDYXNlQmVnaW4pOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIC8vIGxpbmsgZmFpbHVyZSBjYXNlcyBkaXJlY3Rs
eSBiYWNrIHRvIG5vcm1hbCBwYXRoCi0gICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMs
IHNsb3dDYXNlQmVnaW4pOwotfQotCi1zdGF0aWMgdm9pZCBsaW5rUmVzdG9yZVNjcmF0Y2goTGlu
a0J1ZmZlciYgcGF0Y2hCdWZmZXIsIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbywgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzcywgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgZmFpbCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNl
cykKLXsKLSAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVT
Y3JhdGNoLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMsIHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSksIHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRl
bHRhQ2FsbFRvU2xvd0Nhc2UpKTsKLX0KLQotZW51bSBCeUlkU3R1YktpbmQgewotICAgIEdldFZh
bHVlLAotICAgIEdldFVuZGVmaW5lZCwKLSAgICBDYWxsR2V0dGVyLAotICAgIENhbGxDdXN0b21H
ZXR0ZXIsCi0gICAgQ2FsbFNldHRlciwKLSAgICBDYWxsQ3VzdG9tU2V0dGVyCi19OwotCi1zdGF0
aWMgY29uc3QgY2hhciogdG9TdHJpbmcoQnlJZFN0dWJLaW5kIGtpbmQpCi17Ci0gICAgc3dpdGNo
IChraW5kKSB7Ci0gICAgY2FzZSBHZXRWYWx1ZToKLSAgICAgICAgcmV0dXJuICJHZXRWYWx1ZSI7
Ci0gICAgY2FzZSBHZXRVbmRlZmluZWQ6Ci0gICAgICAgIHJldHVybiAiR2V0VW5kZWZpbmVkIjsK
LSAgICBjYXNlIENhbGxHZXR0ZXI6Ci0gICAgICAgIHJldHVybiAiQ2FsbEdldHRlciI7Ci0gICAg
Y2FzZSBDYWxsQ3VzdG9tR2V0dGVyOgotICAgICAgICByZXR1cm4gIkNhbGxDdXN0b21HZXR0ZXIi
OwotICAgIGNhc2UgQ2FsbFNldHRlcjoKLSAgICAgICAgcmV0dXJuICJDYWxsU2V0dGVyIjsKLSAg
ICBjYXNlIENhbGxDdXN0b21TZXR0ZXI6Ci0gICAgICAgIHJldHVybiAiQ2FsbEN1c3RvbVNldHRl
ciI7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotfQotCi1zdGF0aWMgQnlJZFN0dWJLaW5k
IGtpbmRGb3IoY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQotewotICAgIGlmIChzbG90LmlzQ2Fj
aGVhYmxlVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIEdldFZhbHVlOwotICAgIGlmIChzbG90Lmlz
VW5zZXQoKSkKLSAgICAgICAgcmV0dXJuIEdldFVuZGVmaW5lZDsKLSAgICBpZiAoc2xvdC5pc0Nh
Y2hlYWJsZUN1c3RvbSgpKQotICAgICAgICByZXR1cm4gQ2FsbEN1c3RvbUdldHRlcjsKLSAgICBS
RUxFQVNFX0FTU0VSVChzbG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkpOwotICAgIHJldHVybiBDYWxs
R2V0dGVyOwotfQotCi1zdGF0aWMgRnVuY3Rpb25QdHIgY3VzdG9tRm9yKGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCkKLXsKLSAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkKLSAgICAg
ICAgcmV0dXJuIEZ1bmN0aW9uUHRyKCk7Ci0gICAgcmV0dXJuIEZ1bmN0aW9uUHRyKHNsb3QuY3Vz
dG9tR2V0dGVyKCkpOwotfQotCi1zdGF0aWMgQnlJZFN0dWJLaW5kIGtpbmRGb3IoY29uc3QgUHV0
UHJvcGVydHlTbG90JiBzbG90KQotewotICAgIFJFTEVBU0VfQVNTRVJUKCFzbG90LmlzQ2FjaGVh
YmxlUHV0KCkpOwotICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkpCi0gICAgICAgIHJl
dHVybiBDYWxsU2V0dGVyOwotICAgIFJFTEVBU0VfQVNTRVJUKHNsb3QuaXNDYWNoZWFibGVDdXN0
b20oKSk7Ci0gICAgcmV0dXJuIENhbGxDdXN0b21TZXR0ZXI7Ci19Ci0KLXN0YXRpYyBGdW5jdGlv
blB0ciBjdXN0b21Gb3IoY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90KQotewotICAgIGlmICgh
c2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpKQotICAgICAgICByZXR1cm4gRnVuY3Rpb25QdHIoKTsK
LSAgICByZXR1cm4gRnVuY3Rpb25QdHIoc2xvdC5jdXN0b21TZXR0ZXIoKSk7Ci19Ci0KLXN0YXRp
YyBib29sIGdlbmVyYXRlQnlJZFN0dWIoCi0gICAgRXhlY1N0YXRlKiBleGVjLCBCeUlkU3R1Yktp
bmQga2luZCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLAotICAgIEZ1bmN0aW9uUHRy
IGN1c3RvbSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LAotICAgIEpTT2JqZWN0KiBhbHRlcm5hdGVCYXNl
LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBib29sIGxvYWRU
YXJnZXRGcm9tUHJveHksCi0gICAgV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldCwgQ29kZUxv
Y2F0aW9uTGFiZWwgc3VjY2Vzc0xhYmVsLCBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZUxhYmVs
LAotICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4mIHN0dWJSb3V0aW5lKQotewotICAgIEFTU0VS
VChjb25kaXRpb25TZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9w
ZXJ0eVdhdGNocG9pbnQoKSk7Ci0gICAgCi0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAg
R1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmJhc2VH
UFIpOwotICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyA9IEpTVmFsdWVSZWdzKAotI2lmIFVTRShK
U1ZBTFVFMzJfNjQpCi0gICAgICAgIHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gu
dmFsdWVUYWdHUFIpLAotI2VuZGlmCi0gICAgICAgIHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1Yklu
Zm8ucGF0Y2gudmFsdWVHUFIpKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IFRlbXBSZWdpc3Rl
clNldChzdHViSW5mby5wYXRjaC51c2VkUmVnaXN0ZXJzKS5nZXRGcmVlR1BSKCk7Ci0gICAgYm9v
bCBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IHNjcmF0Y2hHUFIgPT0gSW52YWxpZEdQUlJlZzsKLSAg
ICBSRUxFQVNFX0FTU0VSVCghbmVlZFRvUmVzdG9yZVNjcmF0Y2ggfHwgKGtpbmQgPT0gR2V0VmFs
dWUgfHwga2luZCA9PSBHZXRVbmRlZmluZWQpKTsKLSAgICAKLSAgICBDQ2FsbEhlbHBlcnMgc3R1
YkppdCgmZXhlYy0+dm0oKSwgZXhlYy0+Y29kZUJsb2NrKCkpOwotICAgIGlmIChuZWVkVG9SZXN0
b3JlU2NyYXRjaCkgewotICAgICAgICBzY3JhdGNoR1BSID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxl
Y3RTY3JhdGNoR1BSKAotICAgICAgICAgICAgYmFzZUdQUiwgdmFsdWVSZWdzLnRhZ0dQUigpLCB2
YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKLSAgICAgICAgc3R1YkppdC5wdXNoVG9TYXZlKHNjcmF0
Y2hHUFIpOwotICAgICAgICBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IHRydWU7Ci0gICAgfQotICAg
IAotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7Ci0KLSAgICBHUFJS
ZWcgYmFzZUZvckdldEdQUjsKLSAgICBpZiAobG9hZFRhcmdldEZyb21Qcm94eSkgewotICAgICAg
ICBiYXNlRm9yR2V0R1BSID0gdmFsdWVSZWdzLnBheWxvYWRHUFIoKTsKLSAgICAgICAgZmFpbHVy
ZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaDgoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIAotICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMihQdXJlRm9yd2FyZGluZ1Byb3h5VHlwZSkpKTsKLQotICAgICAg
ICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNQcm94
eTo6dGFyZ2V0T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgCi0gICAgICAgIGZhaWx1
cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2hTdHJ1Y3R1cmUoCi0gICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc2NyYXRjaEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKLSAgICAgICAgICAg
IHN0cnVjdHVyZSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGJhc2VGb3JHZXRHUFIgPSBiYXNl
R1BSOwotCi0gICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2hTdHJ1Y3R1
cmUoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIAotICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUZvckdldEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgCi0gICAgICAgICAgICBzdHJ1Y3R1cmUpKTsKLSAgICB9Ci0KLSAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgIGlmIChzdHJ1Y3R1cmUt
Pm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSB8fCBjb25kaXRpb25TZXQubmVlZEltcHVy
ZVByb3BlcnR5V2F0Y2hwb2ludCgpKQotICAgICAgICB2bS0+cmVnaXN0ZXJXYXRjaHBvaW50Rm9y
SW1wdXJlUHJvcGVydHkocHJvcGVydHlOYW1lLCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVC
bG9jaykpOwotCi0gICAgaWYgKHdhdGNocG9pbnRTZXQpCi0gICAgICAgIHdhdGNocG9pbnRTZXQt
PmFkZChzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwotCi0gICAgY2hlY2tPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbnMoCi0gICAgICAgIGNvbmRpdGlvblNldCwgY29kZUJsb2NrLCBz
dHViSW5mbywgc3R1YkppdCwgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSKTsKLQotICAgIGlmIChp
c1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKLSAgICAgICAgU3RydWN0dXJlKiBjdXJyU3RydWN0dXJl
OwotICAgICAgICBpZiAoY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGN1cnJT
dHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGN1cnJTdHJ1
Y3R1cmUgPSBjb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vYmplY3QoKS0+c3RydWN0
dXJlKCk7Ci0gICAgICAgIGN1cnJTdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJl
cGxhY2VtZW50cygqdm0sIG9mZnNldCk7Ci0gICAgfQotICAgIAotICAgIEdQUlJlZyBiYXNlRm9y
QWNjZXNzR1BSID0gSW52YWxpZEdQUlJlZzsKLSAgICBpZiAoa2luZCAhPSBHZXRVbmRlZmluZWQp
IHsKLSAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAv
LyBXZSBjb3VsZCBoYXZlIGNsb2JiZXJlZCBzY3JhdGNoR1BSIGVhcmxpZXIsIHNvIHdlIGhhdmUg
dG8gcmVsb2FkIGZyb20gYmFzZUdQUiB0byBnZXQgdGhlIHRhcmdldC4KLSAgICAgICAgICAgIGlm
IChsb2FkVGFyZ2V0RnJvbVByb3h5KQotICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU1Byb3h5Ojp0YXJnZXRPZmZzZXQoKSks
IGJhc2VGb3JHZXRHUFIpOwotICAgICAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKGFsdGVybmF0ZUJhc2UpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAg
IGJhc2VGb3JBY2Nlc3NHUFIgPSBzY3JhdGNoR1BSOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgLy8gRm9yIHByb3h5IG9iamVjdHMsIHdlIG5lZWQgdG8gZG8gYWxsIHRoZSBTdHJ1Y3R1
cmUgY2hlY2tzIGJlZm9yZSBtb3ZpbmcgdGhlIGJhc2VHUFIgaW50bwotICAgICAgICAgICAgLy8g
YmFzZUZvckdldEdQUiBiZWNhdXNlIGlmIHdlIGZhaWwgYW55IG9mIHRoZSBjaGVja3MgdGhlbiB3
ZSB3b3VsZCBoYXZlIHRoZSB3cm9uZyB2YWx1ZSBpbiBiYXNlR1BSCi0gICAgICAgICAgICAvLyBv
biB0aGUgc2xvdyBwYXRoLgotICAgICAgICAgICAgaWYgKGxvYWRUYXJnZXRGcm9tUHJveHkpCi0g
ICAgICAgICAgICAgICAgc3R1YkppdC5tb3ZlKHNjcmF0Y2hHUFIsIGJhc2VGb3JHZXRHUFIpOwot
ICAgICAgICAgICAgYmFzZUZvckFjY2Vzc0dQUiA9IGJhc2VGb3JHZXRHUFI7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBHUFJSZWcgbG9hZGVkVmFsdWVHUFIgPSBJbnZhbGlkR1BSUmVnOwotICAg
IGlmIChraW5kID09IEdldFVuZGVmaW5lZCkKLSAgICAgICAgc3R1YkppdC5tb3ZlVHJ1c3RlZFZh
bHVlKGpzVW5kZWZpbmVkKCksIHZhbHVlUmVncyk7Ci0gICAgZWxzZSBpZiAoa2luZCAhPSBDYWxs
Q3VzdG9tR2V0dGVyICYmIGtpbmQgIT0gQ2FsbEN1c3RvbVNldHRlcikgewotICAgICAgICBpZiAo
a2luZCA9PSBHZXRWYWx1ZSkKLSAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSID0gdmFsdWVSZWdz
LnBheWxvYWRHUFIoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIg
PSBzY3JhdGNoR1BSOwotICAgICAgICAKLSAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFI7Ci0gICAg
ICAgIGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKQotICAgICAgICAgICAgc3RvcmFnZUdQUiA9
IGJhc2VGb3JBY2Nlc3NHUFI7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgc3R1YkppdC5s
b2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VGb3JBY2Nlc3NHUFIsIEpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQoKSksIGxvYWRlZFZhbHVlR1BSKTsKLSAgICAgICAgICAgIHN0b3Jh
Z2VHUFIgPSBsb2FkZWRWYWx1ZUdQUjsKLSAgICAgICAgfQotICAgICAgICAKLSNpZiBVU0UoSlNW
QUxVRTY0KQotICAgICAgICBzdHViSml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dG9yYWdlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShvZmZzZXQpKSwgbG9hZGVkVmFsdWVHUFIp
OwotI2Vsc2UKLSAgICAgICAgaWYgKGtpbmQgPT0gR2V0VmFsdWUpCi0gICAgICAgICAgICBzdHVi
Sml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBvZmZzZXRSZWxh
dGl2ZVRvQmFzZShvZmZzZXQpICsgVGFnT2Zmc2V0KSwgdmFsdWVSZWdzLnRhZ0dQUigpKTsKLSAg
ICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwg
b2Zmc2V0UmVsYXRpdmVUb0Jhc2Uob2Zmc2V0KSArIFBheWxvYWRPZmZzZXQpLCBsb2FkZWRWYWx1
ZUdQUik7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICAvLyBTdHVmZiBmb3IgY3VzdG9tIGdldHRlcnMu
Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgb3BlcmF0aW9uQ2FsbDsKLSAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBoYW5kbGVyQ2FsbDsKLQotICAgIC8vIFN0dWZmIGZvciBKUyBnZXR0ZXJzLgot
ICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgYWRkcmVzc09mTGlua0Z1bmN0aW9uQ2hl
Y2s7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgZmFzdFBhdGhDYWxsOwotICAgIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIHNsb3dQYXRoQ2FsbDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtJ
bmZvPiBjYWxsTGlua0luZm87Ci0KLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzLCBm
YWlsOwotICAgIGlmIChraW5kICE9IEdldFZhbHVlICYmIGtpbmQgIT0gR2V0VW5kZWZpbmVkKSB7
Ci0gICAgICAgIC8vIE5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2hlbmV2ZXIgdGhpcyBjYWxsIGlz
IG1hZGUgaW4gdGhlIGZ1dHVyZSwgd2UgcmVtZW1iZXIgdGhlCi0gICAgICAgIC8vIHBsYWNlIHRo
YXQgd2UgbWFkZSBpdCBmcm9tLiBJdCBqdXN0IHNvIGhhcHBlbnMgdG8gYmUgdGhlIHBsYWNlIHRo
YXQgd2UgYXJlIGF0Ci0gICAgICAgIC8vIHJpZ2h0IG5vdyEKLSAgICAgICAgc3R1YkppdC5zdG9y
ZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc3R1YkluZm8uY2FsbFNpdGVJbmRleC5i
aXRzKCkpLAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3Ioc3RhdGljX2Nhc3Q8Vmly
dHVhbFJlZ2lzdGVyPihKU1N0YWNrOjpBcmd1bWVudENvdW50KSkpOwotCi0gICAgICAgIGlmIChr
aW5kID09IENhbGxHZXR0ZXIgfHwga2luZCA9PSBDYWxsU2V0dGVyKSB7Ci0gICAgICAgICAgICAv
LyBDcmVhdGUgYSBKUyBjYWxsIHVzaW5nIGEgSlMgY2FsbCBpbmxpbmUgY2FjaGUuIEFzc3VtZSB0
aGF0OgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIC0gU1AgaXMgYWxpZ25lZCBhbmQg
cmVwcmVzZW50cyB0aGUgZXh0ZW50IG9mIHRoZSBjYWxsaW5nIGNvbXBpbGVyJ3Mgc3RhY2sgdXNh
Z2UuCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gLSBGUCBpcyBzZXQgY29ycmVjdGx5
IChpLmUuIGl0IHBvaW50cyB0byB0aGUgY2FsbGVyJ3MgY2FsbCBmcmFtZSBoZWFkZXIpLgotICAg
ICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIC0gU1AgLSBGUCBpcyBhbiBhbGlnbmVkIGRpZmZl
cmVuY2UuCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gLSBBbnkgYnl0ZSBiZXR3ZWVu
IEZQIChleGNsdXNpdmUpIGFuZCBTUCAoaW5jbHVzaXZlKSBjb3VsZCBiZSBsaXZlIGluIHRoZSBj
YWxsaW5nCi0gICAgICAgICAgICAvLyAgIGNvZGUuCi0gICAgICAgICAgICAvLwotICAgICAgICAg
ICAgLy8gVGhlcmVmb3JlLCB3ZSB0ZW1wb3JhcmlseSBncm93IHRoZSBzdGFjayBmb3IgdGhlIHB1
cnBvc2Ugb2YgdGhlIGNhbGwgYW5kIHRoZW4KLSAgICAgICAgICAgIC8vIHNocmluayBpdCBhZnRl
ci4KLSAgICAgICAgICAgIAotICAgICAgICAgICAgY2FsbExpbmtJbmZvID0gc3RkOjptYWtlX3Vu
aXF1ZTxDYWxsTGlua0luZm8+KCk7Ci0KLSAgICAgICAgICAgIC8vIEZJWE1FOiBJZiB3ZSBnZW5l
cmF0ZWQgYSBwb2x5bW9ycGhpYyBjYWxsIHN0dWIgdGhhdCBqdW1wZWQgYmFjayB0byB0aGUgZ2V0
dGVyCi0gICAgICAgICAgICAvLyBzdHViLCB3aGljaCB0aGVuIGp1bXBlZCBiYWNrIHRvIHRoZSBt
YWluIGNvZGUsIHRoZW4gd2UnZCBoYXZlIGEgcmVhY2hhYmlsaXR5Ci0gICAgICAgICAgICAvLyBz
aXR1YXRpb24gdGhhdCB0aGUgR0MgZG9lc24ndCBrbm93IGFib3V0LiBUaGUgR0Mgd291bGQgZW5z
dXJlIHRoYXQgdGhlIHBvbHltb3JwaGljCi0gICAgICAgICAgICAvLyBjYWxsIHN0dWIgc3RheWVk
IGFsaXZlLCBhbmQgaXQgd291bGQgZW5zdXJlIHRoYXQgdGhlIG1haW4gY29kZSBzdGF5ZWQgYWxp
dmUsIGJ1dAotICAgICAgICAgICAgLy8gaXQgd291bGRuJ3Qga25vdyB0aGF0IHRoZSBnZXR0ZXIg
c3R1YiB3YXMgYWxpdmUuIElkZWFsbHkgSklUIHN0dWIgcm91dGluZXMgd291bGQKLSAgICAgICAg
ICAgIC8vIGJlIEdDIG9iamVjdHMsIGFuZCB0aGVuIHdlJ2QgYmUgYWJsZSB0byBzYXkgdGhhdCB0
aGUgcG9seW1vcnBoaWMgY2FsbCBzdHViIGhhcyBhCi0gICAgICAgICAgICAvLyByZWZlcmVuY2Ug
dG8gdGhlIGdldHRlciBzdHViLgotICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE0ODkxNAotICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5kaXNh
bGxvd1N0dWJzKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0
VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgc3R1YkluZm8uY29kZU9yaWdpbiwgbG9hZGVkVmFs
dWVHUFIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QgZG9uZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gVGhlcmUgaXMgYSAndGhpcycg
YXJndW1lbnQgYnV0IG5vdGhpbmcgZWxzZS4KLSAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9m
UGFyYW1ldGVycyA9IDE7Ci0gICAgICAgICAgICAvLyAuLi4gdW5sZXNzIHdlJ3JlIGNhbGxpbmcg
YSBzZXR0ZXIuCi0gICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsU2V0dGVyKQotICAgICAgICAg
ICAgICAgIG51bWJlck9mUGFyYW1ldGVycysrOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAv
LyBHZXQgdGhlIGFjY2Vzc29yOyBpZiB0aGVyZSBhaW4ndCBvbmUgdGhlbiB0aGUgcmVzdWx0IGlz
IGpzVW5kZWZpbmVkKCkuCi0gICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsU2V0dGVyKSB7Ci0g
ICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKAotICAgICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhsb2FkZWRWYWx1ZUdQUiwgR2V0dGVyU2V0dGVyOjpvZmZzZXRP
ZlNldHRlcigpKSwKLSAgICAgICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIpOwotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoCi0gICAgICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGxvYWRlZFZhbHVlR1BSLCBHZXR0
ZXJTZXR0ZXI6Om9mZnNldE9mR2V0dGVyKCkpLAotICAgICAgICAgICAgICAgICAgICBsb2FkZWRW
YWx1ZUdQUik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCByZXR1cm5VbmRlZmluZWQgPSBzdHViSml0LmJyYW5jaFRlc3RQdHIoCi0gICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGxvYWRlZFZhbHVlR1BSKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZSZWdzRm9yQ2FsbCA9Ci0gICAgICAgICAgICAg
ICAgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIG51bWJlck9mUGFyYW1ldGVyczsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZCeXRlc0ZvckNhbGwgPQot
ICAgICAgICAgICAgICAgIG51bWJlck9mUmVnc0ZvckNhbGwgKiBzaXplb2YoUmVnaXN0ZXIpIC0g
c2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICB1bnNp
Z25lZCBhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwgPQotICAgICAgICAgICAgICAgIFdURjo6
cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIG51bWJlck9mQnl0ZXNG
b3JDYWxsKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3R1YkppdC5zdWJQdHIoCi0gICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihhbGlnbmVkTnVtYmVyT2ZC
eXRlc0ZvckNhbGwpLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50
ZXJSZWdpc3Rlcik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzIGNhbGxlZUZyYW1lID0gTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoCi0gICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLAotICAgICAgICAgICAg
ICAgIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBzdHViSml0LnN0b3JlMzIoCi0gICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihudW1iZXJPZlBhcmFtZXRlcnMpLAotICAg
ICAgICAgICAgICAgIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoCi0gICAgICAgICAgICAgICAgICAg
IEpTU3RhY2s6OkFyZ3VtZW50Q291bnQgKiBzaXplb2YoUmVnaXN0ZXIpICsgUGF5bG9hZE9mZnNl
dCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzdHViSml0LnN0b3JlQ2VsbCgKLSAgICAg
ICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUiwgY2FsbGVlRnJhbWUud2l0aE9mZnNldChKU1N0YWNr
OjpDYWxsZWUgKiBzaXplb2YoUmVnaXN0ZXIpKSk7Ci0KLSAgICAgICAgICAgIHN0dWJKaXQuc3Rv
cmVDZWxsKAotICAgICAgICAgICAgICAgIGJhc2VGb3JHZXRHUFIsCi0gICAgICAgICAgICAgICAg
Y2FsbGVlRnJhbWUud2l0aE9mZnNldCgKLSAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lz
dGVyRm9yQXJndW1lbnQoMCkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIGlmIChraW5kID09IENhbGxTZXR0ZXIpIHsKLSAgICAgICAgICAg
ICAgICBzdHViSml0LnN0b3JlVmFsdWUoCi0gICAgICAgICAgICAgICAgICAgIHZhbHVlUmVncywK
LSAgICAgICAgICAgICAgICAgICAgY2FsbGVlRnJhbWUud2l0aE9mZnNldCgKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEpLm9mZnNldCgpICogc2l6
ZW9mKFJlZ2lzdGVyKSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93Q2FzZSA9IHN0dWJKaXQuYnJhbmNoUHRyV2l0aFBh
dGNoKAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgbG9hZGVkVmFs
dWVHUFIsIGFkZHJlc3NPZkxpbmtGdW5jdGlvbkNoZWNrLAotICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
ZmFzdFBhdGhDYWxsID0gc3R1YkppdC5uZWFyQ2FsbCgpOwotCi0gICAgICAgICAgICBzdHViSml0
LmFkZFB0cigKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGNv
ZGVCbG9jay0+c3RhY2tQb2ludGVyT2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwKLSAgICAg
ICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKLSAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgICAgICAgICAgaWYgKGtp
bmQgPT0gQ2FsbEdldHRlcikKLSAgICAgICAgICAgICAgICBzdHViSml0LnNldHVwUmVzdWx0cyh2
YWx1ZVJlZ3MpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBkb25lLmFwcGVuZChzdHViSml0
Lmp1bXAoKSk7Ci0gICAgICAgICAgICBzbG93Q2FzZS5saW5rKCZzdHViSml0KTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgc3R1YkppdC5tb3ZlKGxvYWRlZFZhbHVlR1BSLCBHUFJJbmZvOjpy
ZWdUMCk7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgICAgIHN0dWJKaXQubW92ZShN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBHUFJJbmZvOjpy
ZWdUMSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8uZ2V0KCkpLCBHUFJJbmZvOjpyZWdUMik7Ci0gICAg
ICAgICAgICBzbG93UGF0aENhbGwgPSBzdHViSml0Lm5lYXJDYWxsKCk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIHN0dWJKaXQuYWRkUHRyKAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoY29kZUJsb2NrLT5zdGFja1BvaW50ZXJPZmZzZXQoKSAqIHNpemVv
ZihSZWdpc3RlcikpLAotICAgICAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7
Ci0gICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsR2V0dGVyKQotICAgICAgICAgICAgICAgIHN0
dWJKaXQuc2V0dXBSZXN1bHRzKHZhbHVlUmVncyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IGRvbmUuYXBwZW5kKHN0dWJKaXQuanVtcCgpKTsKLSAgICAgICAgICAgIHJldHVyblVuZGVmaW5l
ZC5saW5rKCZzdHViSml0KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGtpbmQgPT0g
Q2FsbEdldHRlcikKLSAgICAgICAgICAgICAgICBzdHViSml0Lm1vdmVUcnVzdGVkVmFsdWUoanNV
bmRlZmluZWQoKSwgdmFsdWVSZWdzKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZG9uZS5s
aW5rKCZzdHViSml0KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIGdldHRlcjog
RW5jb2RlZEpTVmFsdWUgKCpHZXRWYWx1ZUZ1bmMpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBzbG90
QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOwotICAgICAgICAg
ICAgLy8gc2V0dGVyOiB2b2lkICgqUHV0VmFsdWVGdW5jKShFeGVjU3RhdGUqLCBKU09iamVjdCog
YmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc09iamVjdCwgRW5jb2RlZEpTVmFsdWUgdmFsdWUpOwot
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsQ3VzdG9tR2V0
dGVyKQotICAgICAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KGJhc2VGb3JBY2Nlc3NHUFIsIGJhc2VGb3JHZXRHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKHByb3BlcnR5TmFtZS5pbXBsKCkpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlRm9yQWNjZXNz
R1BSLCBiYXNlRm9yR2V0R1BSLCB2YWx1ZVJlZ3MuZ3ByKCkpOwotI2Vsc2UKLSAgICAgICAgICAg
IGlmIChraW5kID09IENhbGxDdXN0b21HZXR0ZXIpCi0gICAgICAgICAgICAgICAgc3R1YkppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUZvckFjY2Vzc0dQUiwgYmFzZUZvckdldEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocHJvcGVydHlOYW1lLmltcGwoKSkpOwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKGJhc2VGb3JBY2Nlc3NHUFIsIGJhc2VGb3JHZXRHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHZhbHVl
UmVncy50YWdHUFIoKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsICZ2bS0+dG9wQ2FsbEZyYW1lKTsKLQotICAgICAgICAg
ICAgb3BlcmF0aW9uQ2FsbCA9IHN0dWJKaXQuY2FsbCgpOwotICAgICAgICAgICAgaWYgKGtpbmQg
PT0gQ2FsbEN1c3RvbUdldHRlcikKLSAgICAgICAgICAgICAgICBzdHViSml0LnNldHVwUmVzdWx0
cyh2YWx1ZVJlZ3MpOwotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm9FeGNlcHRp
b24gPSBzdHViSml0LmVtaXRFeGNlcHRpb25DaGVjayhDQ2FsbEhlbHBlcnM6OkludmVydGVkRXhj
ZXB0aW9uQ2hlY2spOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzdHViSml0LnNldHVwQXJn
dW1lbnRzKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih2bSksIEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyKTsKLSAgICAgICAgICAgIGhhbmRsZXJDYWxsID0gc3R1YkppdC5jYWxsKCk7Ci0g
ICAgICAgICAgICBzdHViSml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgbm9FeGNlcHRpb24ubGluaygmc3R1YkppdCk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgZW1pdFJlc3RvcmVTY3JhdGNoKHN0dWJKaXQsIG5lZWRUb1Jlc3RvcmVTY3JhdGNo
LCBzY3JhdGNoR1BSLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMpOwotICAgIAotICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCBzdHViSml0LCBleGVjLT5jb2RlQmxvY2soKSwgSklU
Q29tcGlsYXRpb25DYW5GYWlsKTsKLSAgICBpZiAocGF0Y2hCdWZmZXIuZGlkRmFpbFRvQWxsb2Nh
dGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGxpbmtSZXN0b3JlU2NyYXRj
aChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1
cmVDYXNlcywgc3VjY2Vzc0xhYmVsLCBzbG93Q2FzZUxhYmVsKTsKLSAgICBpZiAoa2luZCA9PSBD
YWxsQ3VzdG9tR2V0dGVyIHx8IGtpbmQgPT0gQ2FsbEN1c3RvbVNldHRlcikgewotICAgICAgICBw
YXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIGN1c3RvbSk7Ci0gICAgICAgIHBhdGNoQnVm
ZmVyLmxpbmsoaGFuZGxlckNhbGwsIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpOwotICAgIH0gZWxz
ZSBpZiAoa2luZCA9PSBDYWxsR2V0dGVyIHx8IGtpbmQgPT0gQ2FsbFNldHRlcikgewotICAgICAg
ICBjYWxsTGlua0luZm8tPnNldENhbGxMb2NhdGlvbnMocGF0Y2hCdWZmZXIubG9jYXRpb25PZk5l
YXJDYWxsKHNsb3dQYXRoQ2FsbCksCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9m
KGFkZHJlc3NPZkxpbmtGdW5jdGlvbkNoZWNrKSwKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxv
Y2F0aW9uT2ZOZWFyQ2FsbChmYXN0UGF0aENhbGwpKTsKLQotICAgICAgICBwYXRjaEJ1ZmZlci5s
aW5rKAotICAgICAgICAgICAgc2xvd1BhdGhDYWxsLCBDb2RlTG9jYXRpb25MYWJlbCh2bS0+Z2V0
Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKLSAgICB9Ci0gICAgCi0g
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGUgPSBGSU5BTElaRV9DT0RFX0ZPUigKLSAgICAg
ICAgZXhlYy0+Y29kZUJsb2NrKCksIHBhdGNoQnVmZmVyLAotICAgICAgICAoIiVzIGFjY2VzcyBz
dHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAgICAgICAgIHRvU3RyaW5nKGtpbmQp
LCB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksCi0gICAgICAgICAgICBzdWNj
ZXNzTGFiZWwuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgIAotICAgIGlmIChraW5kID09IENh
bGxHZXR0ZXIgfHwga2luZCA9PSBDYWxsU2V0dGVyKQotICAgICAgICBzdHViUm91dGluZSA9IGFk
b3B0UmVmKG5ldyBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZShjb2RlLCAqdm0sIFdURjo6bW92
ZShjYWxsTGlua0luZm8pKSk7Ci0gICAgZWxzZQotICAgICAgICBzdHViUm91dGluZSA9IGNyZWF0
ZUpJVFN0dWJSb3V0aW5lKGNvZGUsICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwg
dHJ1ZSk7Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIGVudW0gSW5saW5lQ2FjaGVBY3Rp
b24gewogICAgIEdpdmVVcE9uQ2FjaGUsCiAgICAgUmV0cnlDYWNoZUxhdGVyLApAQCAtNjI5LDEz
MiArMjE2LDk5IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5SUQKICAg
ICBpZiAoT3B0aW9uczo6Zm9yY2VJQ0ZhaWx1cmUoKSkKICAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7CiAgICAgCi0gICAgLy8gRklYTUU6IFdyaXRlIGEgdGVzdCB0aGF0IHByb3ZlcyB3ZSBu
ZWVkIHRvIGNoZWNrIGZvciByZWN1cnNpb24gaGVyZSBqdXN0Ci0gICAgLy8gbGlrZSB0aGUgaW50
ZXJwcmV0ZXIgZG9lcywgdGhlbiBhZGQgYSBjaGVjayBmb3IgcmVjdXJzaW9uLgorICAgIC8vIEZJ
WE1FOiBDYWNoZSBwcm9wZXJ0eSBhY2Nlc3MgZm9yIGltbWVkaWF0ZXMuCisgICAgaWYgKCFiYXNl
VmFsdWUuaXNDZWxsKCkpCisgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogCiAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICBWTSogdm0gPSAmZXhl
Yy0+dm0oKTsKKyAgICBTY3JpcHRFeGVjdXRhYmxlKiBvd25lciA9IGNvZGVCbG9jay0+b3duZXJT
Y3JpcHRFeGVjdXRhYmxlKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKIAotICAgIGlmICgo
aXNKU0FycmF5KGJhc2VWYWx1ZSkgfHwgaXNKU1N0cmluZyhiYXNlVmFsdWUpKSAmJiBwcm9wZXJ0
eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgewotICAgICAgICBHUFJSZWcg
YmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guYmFzZUdQUik7Ci0j
aWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgR1BSUmVnIHJlc3VsdFRhZ0dQUiA9IHN0YXRp
Y19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVUYWdHUFIpOwotI2VuZGlmCi0gICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNo
LnZhbHVlR1BSKTsKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlciBzdHViSml0OwotCi0gICAgICAg
IGlmIChpc0pTQXJyYXkoYmFzZVZhbHVlKSkgewotICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hH
UFIgPSBUZW1wUmVnaXN0ZXJTZXQoc3R1YkluZm8ucGF0Y2gudXNlZFJlZ2lzdGVycykuZ2V0RnJl
ZUdQUigpOwotICAgICAgICAgICAgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IGZhbHNlOwot
Ci0gICAgICAgICAgICBpZiAoc2NyYXRjaEdQUiA9PSBJbnZhbGlkR1BSUmVnKSB7Ci0jaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICBzY3JhdGNoR1BSID0gQXNzZW1ibHlIZWxwZXJz
OjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHJlc3VsdEdQUik7Ci0jZWxzZQotICAgICAgICAg
ICAgICAgIHNjcmF0Y2hHUFIgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoYmFz
ZUdQUiwgcmVzdWx0R1BSLCByZXN1bHRUYWdHUFIpOwotI2VuZGlmCi0gICAgICAgICAgICAgICAg
c3R1YkppdC5wdXNoVG9TYXZlKHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIG5lZWRUb1Jl
c3RvcmVTY3JhdGNoID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsKLQotICAgICAgICAgICAgc3R1YkppdC5s
b2FkOChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OmluZGV4aW5nVHlw
ZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5k
KHN0dWJKaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKElzQXJyYXkpKSk7Ci0gICAgICAgICAgICBmYWls
dXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJv
LCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVN
YXNrKSkpOwotCi0gICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7
Ci0gICAgICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3Jh
dGNoR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAg
ICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6Okxlc3NUaGFuLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDAp
KSk7Ci0KLSAgICAgICAgICAgIHN0dWJKaXQubW92ZShzY3JhdGNoR1BSLCByZXN1bHRHUFIpOwot
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBzdHViSml0Lm9yNjQoQXNzZW1ibHlIZWxw
ZXJzOjpUcnVzdGVkSW1tNjQoVGFnVHlwZU51bWJlciksIHJlc3VsdEdQUik7Ci0jZWxpZiBVU0Uo
SlNWQUxVRTMyXzY0KQotICAgICAgICAgICAgc3R1YkppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgcmVzdWx0VGFnR1BSKTsKLSNlbmRpZgor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBuZXdDYXNlOwogCi0gICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzLCBmYWlsOwotCi0gICAgICAgICAgICBlbWl0UmVz
dG9yZVNjcmF0Y2goc3R1YkppdCwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHNjcmF0Y2hHUFIsIHN1
Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCBzdHViSml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0
aW9uQ2FuRmFpbCk7Ci0gICAgICAgICAgICBpZiAocGF0Y2hCdWZmZXIuZGlkRmFpbFRvQWxsb2Nh
dGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICAg
ICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwg
c3R1YkluZm8sIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcyk7Ci0KLSAgICAgICAgICAgIHN0
dWJJbmZvLnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKLSAgICAgICAgICAg
ICAgICBleGVjLT5jb2RlQmxvY2soKSwgcGF0Y2hCdWZmZXIsCi0gICAgICAgICAgICAgICAgKCJH
ZXRCeUlkIGFycmF5IGxlbmd0aCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAg
ICAgICAgICAgICAgICAgdG9DU3RyaW5nKCpleGVjLT5jb2RlQmxvY2soKSkuZGF0YSgpLCBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSkuZXhlY3V0YWJsZUFkZHJlc3Mo
KSkpOwotCi0gICAgICAgICAgICByZXBsYWNlV2l0aEp1bXAoc3R1YkluZm8sIHN0dWJJbmZvLnN0
dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKLSAgICAgICAgICAgIHJlcGF0Y2hDYWxsKGNvZGVC
bG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkKTsKKyAg
ICBpZiAoaXNKU0FycmF5KGJhc2VWYWx1ZSkgJiYgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5sZW5ndGgpCisgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpnZXRMZW5n
dGgodm0sIG93bmVyLCBBY2Nlc3NDYXNlOjpBcnJheUxlbmd0aCk7CisgICAgZWxzZSBpZiAoaXNK
U1N0cmluZyhiYXNlVmFsdWUpICYmIHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkubGVuZ3RoKQorICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Z2V0TGVuZ3RoKHZtLCBv
d25lciwgQWNjZXNzQ2FzZTo6U3RyaW5nTGVuZ3RoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYg
KCFzbG90LmlzQ2FjaGVhYmxlKCkgJiYgIXNsb3QuaXNVbnNldCgpKQorICAgICAgICAgICAgcmV0
dXJuIEdpdmVVcE9uQ2FjaGU7CiAKKyAgICAgICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1
ZS5hc0NlbGwoKTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlQ2VsbC0+c3Ry
dWN0dXJlKHZtKTsKKyAgICAgICAgCisgICAgICAgIC8vIE9wdGltaXplIHNlbGYgYWNjZXNzLgor
ICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlID09IENhY2hlVHlwZTo6VW5zZXQKKyAgICAg
ICAgICAgICYmIHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpCisgICAgICAgICAgICAmJiBzbG90LnNs
b3RCYXNlKCkgPT0gYmFzZVZhbHVlCisgICAgICAgICAgICAmJiAhc2xvdC53YXRjaHBvaW50U2V0
KCkKKyAgICAgICAgICAgICYmIE1hY3JvQXNzZW1ibGVyOjppc0NvbXBhY3RQdHJBbGlnbmVkQWRk
cmVzc09mZnNldChtYXhPZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uoc2xvdC5jYWNoZWRP
ZmZzZXQoKSkpCisgICAgICAgICAgICAmJiBhY3Rpb25Gb3JDZWxsKHZtLCBiYXNlQ2VsbCkgPT0g
QXR0ZW1wdFRvQ2FjaGUKKyAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9w
ZXJ0eVdhdGNocG9pbnQoKSkgeworICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5n
UHJvcGVydHlGb3JSZXBsYWNlbWVudHModm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAg
ICAgICAgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVy
ZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCB0cnVlKTsK
KyAgICAgICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZih2bSwgY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAg
ICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBTdHJp
bmcubGVuZ3RoIGNhc2UKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbHVyZSA9IHN0
dWJKaXQuYnJhbmNoOChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKFN0cmluZ1R5cGUpKTsKLQotICAgICAgICBzdHViSml0LmxvYWQz
MihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU1N0cmluZzo6b2Zmc2V0T2ZMZW5n
dGgoKSksIHJlc3VsdEdQUik7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBzdHViSml0
Lm9yNjQoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tNjQoVGFnVHlwZU51bWJlciksIHJlc3Vs
dEdQUik7Ci0jZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBzdHViSml0Lm1vdmUoQXNz
ZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCByZXN1bHRUYWdH
UFIpOwotI2VuZGlmCisgICAgICAgIGJvb2wgbG9hZFRhcmdldEZyb21Qcm94eSA9IGZhbHNlOwor
ICAgICAgICBpZiAoYmFzZUNlbGwtPnR5cGUoKSA9PSBQdXJlRm9yd2FyZGluZ1Byb3h5VHlwZSkg
eworICAgICAgICAgICAgYmFzZVZhbHVlID0ganNDYXN0PEpTUHJveHkqPihiYXNlQ2VsbCktPnRh
cmdldCgpOworICAgICAgICAgICAgYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7CisgICAg
ICAgICAgICBzdHJ1Y3R1cmUgPSBiYXNlQ2VsbC0+c3RydWN0dXJlKHZtKTsKKyAgICAgICAgICAg
IGxvYWRUYXJnZXRGcm9tUHJveHkgPSB0cnVlOworICAgICAgICB9CiAKLSAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOworICAgICAgICBJbmxpbmVD
YWNoZUFjdGlvbiBhY3Rpb24gPSBhY3Rpb25Gb3JDZWxsKHZtLCBiYXNlQ2VsbCk7CisgICAgICAg
IGlmIChhY3Rpb24gIT0gQXR0ZW1wdFRvQ2FjaGUpCisgICAgICAgICAgICByZXR1cm4gYWN0aW9u
OwogCi0gICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCBzdHViSml0LCBjb2RlQmxv
Y2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7Ci0gICAgICAgIGlmIChwYXRjaEJ1ZmZlci5kaWRG
YWlsVG9BbGxvY2F0ZSgpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAg
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuaXNVbnNldCgpID8gaW52YWxpZE9mZnNl
dCA6IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CiAgICAgICAgIAotICAgICAgICBwYXRjaEJ1ZmZlci5s
aW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0
dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSkpOwotICAgICAgICBwYXRjaEJ1ZmZlci5saW5r
KGZhaWx1cmUsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJ
bmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKLQotICAgICAgICBzdHViSW5mby5zdHVi
Um91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAgICAgICBleGVjLT5jb2Rl
QmxvY2soKSwgcGF0Y2hCdWZmZXIsCi0gICAgICAgICAgICAoIkdldEJ5SWQgc3RyaW5nIGxlbmd0
aCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAgICAgICAgICAgICB0b0NTdHJp
bmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZWx0
YUNhbGxUb0RvbmUpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICAgICAgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAgICAgICBpZiAoc2xvdC5pc1Vuc2V0KCkg
fHwgc2xvdC5zbG90QmFzZSgpICE9IGJhc2VWYWx1ZSkgeworICAgICAgICAgICAgaWYgKHN0cnVj
dHVyZS0+dHlwZUluZm8oKS5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKSB8fCBzdHJ1Y3R1cmUt
PmlzRGljdGlvbmFyeSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoc2xvdC5pc1Vuc2V0KCkpIHsKKyAgICAgICAg
ICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3Mo
CisgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBl
eGVjLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZS5pbXBsKCkpOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQ
cm90b3R5cGVQcm9wZXJ0eUhpdCgKKyAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLAorICAg
ICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUuaW1wbCgpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBvZmZzZXQgPSBzbG90LmlzVW5zZXQoKSA/IGludmFsaWRPZmZzZXQgOiBjb25kaXRpb25T
ZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vZmZzZXQoKTsKKyAgICAgICAgfQogCi0gICAgICAgIHJl
cGxhY2VXaXRoSnVtcChzdHViSW5mbywgc3R1YkluZm8uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2Rl
KCkpOwotICAgICAgICByZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZCk7CisgICAgICAgIEFjY2Vzc0Nhc2U6OkFjY2Vzc1R5
cGUgdHlwZTsKKyAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpKQorICAgICAgICAg
ICAgdHlwZSA9IEFjY2Vzc0Nhc2U6OkxvYWQ7CisgICAgICAgIGVsc2UgaWYgKHNsb3QuaXNVbnNl
dCgpKQorICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6Ok1pc3M7CisgICAgICAgIGVsc2Ug
aWYgKHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIoKSkKKyAgICAgICAgICAgIHR5cGUgPSBBY2Nlc3ND
YXNlOjpHZXR0ZXI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHR5cGUgPSBBY2Nlc3NDYXNl
OjpDdXN0b21HZXR0ZXI7CiAKLSAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKyAgICAg
ICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmdldCgKKyAgICAgICAgICAgIHZtLCBvd25lciwgdHlw
ZSwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgbG9hZFRhcmdldEZyb21Qcm94eSwK
KyAgICAgICAgICAgIHNsb3Qud2F0Y2hwb2ludFNldCgpLCBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9t
KCkgPyBzbG90LmN1c3RvbUdldHRlcigpIDogbnVsbHB0ciwKKyAgICAgICAgICAgIHNsb3QuaXND
YWNoZWFibGVDdXN0b20oKSA/IHNsb3Quc2xvdEJhc2UoKSA6IG51bGxwdHIpOwogICAgIH0KIAot
ICAgIC8vIEZJWE1FOiBDYWNoZSBwcm9wZXJ0eSBhY2Nlc3MgZm9yIGltbWVkaWF0ZXMuCi0gICAg
aWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCi0gICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwor
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyID0gc3R1YkluZm8uYWRkQWNjZXNzQ2Fz
ZSgKKyAgICAgICAgdm0sIGNvZGVCbG9jaywgcHJvcGVydHlOYW1lLCBXVEY6Om1vdmUobmV3Q2Fz
ZSkpOwogCi0gICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkgJiYgIXNsb3QuaXNVbnNldCgpKQor
ICAgIGlmICghY29kZVB0cikKICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAKLSAgICBK
U0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwotICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSgqdm0pOwotCi0gICAgSW5saW5lQ2FjaGVBY3Rp
b24gYWN0aW9uID0gYWN0aW9uRm9yQ2VsbCgqdm0sIGJhc2VDZWxsKTsKLSAgICBpZiAoYWN0aW9u
ICE9IEF0dGVtcHRUb0NhY2hlKQotICAgICAgICByZXR1cm4gYWN0aW9uOwotCi0gICAgLy8gT3B0
aW1pemUgc2VsZiBhY2Nlc3MuCi0gICAgaWYgKHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpCi0gICAg
ICAgICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUKLSAgICAgICAgJiYgIXNsb3Qud2F0
Y2hwb2ludFNldCgpCi0gICAgICAgICYmIE1hY3JvQXNzZW1ibGVyOjppc0NvbXBhY3RQdHJBbGln
bmVkQWRkcmVzc09mZnNldChtYXhPZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uoc2xvdC5j
YWNoZWRPZmZzZXQoKSkpKSB7Ci0gICAgICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3Bl
cnR5Rm9yUmVwbGFjZW1lbnRzKCp2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7Ci0gICAgICAgIHJl
cGF0Y2hCeUlkU2VsZkFjY2Vzcygqdm0sIGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwg
cHJvcGVydHlOYW1lLCBzbG90LmNhY2hlZE9mZnNldCgpLCBvcGVyYXRpb25HZXRCeUlkQnVpbGRM
aXN0LCB0cnVlKTsKLSAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRTZWxmKCp2bSwgY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKLSAgICAgICAgcmV0dXJuIFJldHJ5
Q2FjaGVMYXRlcjsKLSAgICB9Ci0KLSAgICByZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlzdCk7CisgICAgcmVw
bGFjZVdpdGhKdW1wKHN0dWJJbmZvLCBjb2RlUHRyKTsKKyAgICAKICAgICByZXR1cm4gUmV0cnlD
YWNoZUxhdGVyOwogfQogCkBAIC03NjYsMTEyICszMjAsNiBAQCB2b2lkIHJlcGF0Y2hHZXRCeUlE
KEV4ZWNTdGF0ZSogZXhlYywgSlNWCiAgICAgICAgIHJlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9j
aygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWQpOwogfQog
Ci1zdGF0aWMgdm9pZCBwYXRjaEp1bXBUb0dldEJ5SWRTdHViKFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbywgSklUU3R1YlJvdXRpbmUqIHN0dWJSb3V0aW5lKQotewotICAgIFJFTEVBU0VfQVNT
RVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9saXN0KTsKLSAgICBp
ZiAoc3R1YkluZm8udS5nZXRCeUlkTGlzdC5saXN0LT5kaWRTZWxmUGF0Y2hpbmcoKSkgewotICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoCi0gICAgICAgICAgICBzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KAotICAgICAgICAgICAgICAgIHN0dWJJbmZv
LnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksCi0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChz
dHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IAotICAgIHJlcGxhY2VXaXRoSnVtcChzdHViSW5mbywgc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2Rl
KCkpOwotfQotCi1zdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVpbGRHZXRCeUlETGlzdChF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVu
dCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8p
Ci17Ci0gICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkKLSAgICAgICAgfHwgKCFzbG90LmlzQ2Fj
aGVhYmxlKCkgJiYgIXNsb3QuaXNVbnNldCgpKSkKLSAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7Ci0KLSAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwotICAgIGJv
b2wgbG9hZFRhcmdldEZyb21Qcm94eSA9IGZhbHNlOwotICAgIGlmIChiYXNlQ2VsbC0+dHlwZSgp
ID09IFB1cmVGb3J3YXJkaW5nUHJveHlUeXBlKSB7Ci0gICAgICAgIGJhc2VWYWx1ZSA9IGpzQ2Fz
dDxKU1Byb3h5Kj4oYmFzZUNlbGwpLT50YXJnZXQoKTsKLSAgICAgICAgYmFzZUNlbGwgPSBiYXNl
VmFsdWUuYXNDZWxsKCk7Ci0gICAgICAgIGxvYWRUYXJnZXRGcm9tUHJveHkgPSB0cnVlOwotICAg
IH0KLQotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0KLSAgICBJbmxpbmVDYWNoZUFjdGlvbiBhY3Rpb24gPSBh
Y3Rpb25Gb3JDZWxsKCp2bSwgYmFzZUNlbGwpOwotICAgIGlmIChhY3Rpb24gIT0gQXR0ZW1wdFRv
Q2FjaGUpCi0gICAgICAgIHJldHVybiBhY3Rpb247Ci0KLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKnZtKTsKLSAgICBUeXBlSW5mbyB0eXBlSW5mbyA9IHN0
cnVjdHVyZS0+dHlwZUluZm8oKTsKLQotICAgIGlmIChzdHViSW5mby5wYXRjaC5zcGlsbE1vZGUg
PT0gTmVlZFRvU3BpbGwpIHsKLSAgICAgICAgLy8gV2UgY2Fubm90IGRvIGFzIG11Y2ggaW5saW5l
IGNhY2hpbmcgaWYgdGhlIHJlZ2lzdGVycyB3ZXJlIG5vdCBmbHVzaGVkIHByaW9yIHRvIHRoaXMg
R2V0QnlJZC4gSW4gcGFydGljdWxhciwKLSAgICAgICAgLy8gbm9uLVZhbHVlIGNhY2hlZCBwcm9w
ZXJ0aWVzIHJlcXVpcmUgcGxhbnRpbmcgY2FsbHMsIHdoaWNoIHJlcXVpcmVzIHJlZ2lzdGVycyB0
byBoYXZlIGJlZW4gZmx1c2hlZC4gVGh1cywKLSAgICAgICAgLy8gaWYgcmVnaXN0ZXJzIHdlcmUg
bm90IGZsdXNoZWQsIGRvbid0IGRvIG5vbi1WYWx1ZSBjYWNoaW5nLgotICAgICAgICBpZiAoIXNs
b3QuaXNDYWNoZWFibGVWYWx1ZSgpICYmICFzbG90LmlzVW5zZXQoKSkKLSAgICAgICAgICAgIHJl
dHVybiBHaXZlVXBPbkNhY2hlOwotICAgIH0KLQotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9
IHNsb3QuaXNVbnNldCgpID8gaW52YWxpZE9mZnNldCA6IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0g
ICAgCi0gICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OwotICAgIGlm
IChzbG90LmlzVW5zZXQoKSB8fCBzbG90LnNsb3RCYXNlKCkgIT0gYmFzZVZhbHVlKSB7Ci0gICAg
ICAgIGlmICh0eXBlSW5mby5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKSB8fCBzdHJ1Y3R1cmUt
PmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAg
ICAgICAgaWYgKHNsb3QuaXNVbnNldCgpKQotICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2Vu
ZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNzKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBpZGVudC5pbXBsKCkpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQ
cm9wZXJ0eUhpdCgqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVj
dHVyZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudC5pbXBsKCkpOwotCi0gICAgICAgIGlmICghY29u
ZGl0aW9uU2V0LmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwot
Ci0gICAgICAgIG9mZnNldCA9IHNsb3QuaXNVbnNldCgpID8gaW52YWxpZE9mZnNldCA6IGNvbmRp
dGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpOwotICAgIH0KLSAgICAKLSAgICBQ
b2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0ID0gUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6ZnJv
bShzdHViSW5mbyk7Ci0gICAgaWYgKGxpc3QtPmlzRnVsbCgpKSB7Ci0gICAgICAgIC8vIFdlIG5l
ZWQgdGhpcyBleHRyYSBjaGVjayBiZWNhdXNlIG9mIHJlY3Vyc2lvbi4KLSAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7Ci0gICAgfQotICAgIAotICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4g
c3R1YlJvdXRpbmU7Ci0gICAgYm9vbCByZXN1bHQgPSBnZW5lcmF0ZUJ5SWRTdHViKAotICAgICAg
ICBleGVjLCBraW5kRm9yKHNsb3QpLCBpZGVudCwgY3VzdG9tRm9yKHNsb3QpLCBzdHViSW5mbywg
Y29uZGl0aW9uU2V0LCBzbG90LnNsb3RCYXNlKCksIG9mZnNldCwgCi0gICAgICAgIHN0cnVjdHVy
ZSwgbG9hZFRhcmdldEZyb21Qcm94eSwgc2xvdC53YXRjaHBvaW50U2V0KCksIAotICAgICAgICBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5k
ZWx0YUNhbGxUb0RvbmUpLAotICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChsaXN0LT5jdXJyZW50
U2xvd1BhdGhUYXJnZXQoc3R1YkluZm8pKSwgc3R1YlJvdXRpbmUpOwotICAgIGlmICghcmVzdWx0
KQotICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAKLSAgICBHZXRCeUlkQWNjZXNz
OjpBY2Nlc3NUeXBlIGFjY2Vzc1R5cGU7Ci0gICAgaWYgKHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgp
KQotICAgICAgICBhY2Nlc3NUeXBlID0gc2xvdC53YXRjaHBvaW50U2V0KCkgPyBHZXRCeUlkQWNj
ZXNzOjpXYXRjaGVkU3R1YiA6IEdldEJ5SWRBY2Nlc3M6OlNpbXBsZVN0dWI7Ci0gICAgZWxzZSBp
ZiAoc2xvdC5pc1Vuc2V0KCkpCi0gICAgICAgIGFjY2Vzc1R5cGUgPSBHZXRCeUlkQWNjZXNzOjpT
aW1wbGVNaXNzOwotICAgIGVsc2UgaWYgKHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIoKSkKLSAgICAg
ICAgYWNjZXNzVHlwZSA9IEdldEJ5SWRBY2Nlc3M6OkdldHRlcjsKLSAgICBlbHNlCi0gICAgICAg
IGFjY2Vzc1R5cGUgPSBHZXRCeUlkQWNjZXNzOjpDdXN0b21HZXR0ZXI7Ci0gICAgCi0gICAgbGlz
dC0+YWRkQWNjZXNzKEdldEJ5SWRBY2Nlc3MoCi0gICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwgYWNjZXNzVHlwZSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwKLSAgICAg
ICAgY29uZGl0aW9uU2V0KSk7Ci0gICAgCi0gICAgcGF0Y2hKdW1wVG9HZXRCeUlkU3R1YihzdHVi
SW5mbywgc3R1YlJvdXRpbmUuZ2V0KCkpOwotICAgIAotICAgIHJldHVybiBsaXN0LT5pc0Z1bGwo
KSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7Ci19Ci0KLXZvaWQgYnVpbGRHZXRC
eUlETGlzdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvKQotewotICAgIEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2Vy
KGV4ZWMtPmNvZGVCbG9jaygpLT5tX2xvY2ssIGV4ZWMtPnZtKCkuaGVhcCk7Ci0gICAgCi0gICAg
aWYgKHRyeUJ1aWxkR2V0QnlJRExpc3QoZXhlYywgYmFzZVZhbHVlLCBwcm9wZXJ0eU5hbWUsIHNs
b3QsIHN0dWJJbmZvKSA9PSBHaXZlVXBPbkNhY2hlKQotICAgICAgICByZXBhdGNoQ2FsbChleGVj
LT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRC
eUlkKTsKLX0KLQogc3RhdGljIFZfSklUT3BlcmF0aW9uX0VTc2lKSkkgYXBwcm9wcmlhdGVHZW5l
cmljUHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5U2xvdCAmc2xvdCwgUHV0S2luZCBw
dXRLaW5kKQogewogICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKSB7CkBAIC04ODQsMzU5ICsz
MzIsMTYgQEAgc3RhdGljIFZfSklUT3BlcmF0aW9uX0VTc2lKSkkgYXBwcm9wcmlhdAogICAgIHJl
dHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0OwogfQogCi1zdGF0aWMgVl9KSVRPcGVyYXRp
b25fRVNzaUpKSSBhcHByb3ByaWF0ZUxpc3RCdWlsZGluZ1B1dEJ5SWRGdW5jdGlvbihjb25zdCBQ
dXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEtpbmQgcHV0S2luZCkKK3N0YXRpYyBWX0pJVE9wZXJh
dGlvbl9FU3NpSkpJIGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbihjb25zdCBQ
dXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEtpbmQgcHV0S2luZCkKIHsKICAgICBpZiAoc2xvdC5p
c1N0cmljdE1vZGUoKSkgewogICAgICAgICBpZiAocHV0S2luZCA9PSBEaXJlY3QpCi0gICAgICAg
ICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdEJ1aWxkTGlzdDsKLSAgICAg
ICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RCdWlsZExpc3Q7CisgICAgICAgICAgICBy
ZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOworICAgICAgICByZXR1
cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOwogICAgIH0KICAgICBpZiAocHV0S2lu
ZCA9PSBEaXJlY3QpCi0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3Ry
aWN0QnVpbGRMaXN0OwotICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0QnVpbGRM
aXN0OwotfQotCi1zdGF0aWMgYm9vbCBlbWl0UHV0UmVwbGFjZVN0dWIoCi0gICAgRXhlY1N0YXRl
KiBleGVjLAotICAgIGNvbnN0IElkZW50aWZpZXImLAotICAgIGNvbnN0IFB1dFByb3BlcnR5U2xv
dCYgc2xvdCwKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCi0gICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZmFpbHVyZUxhYmVsLAotICAgIFJl
ZlB0cjxKSVRTdHViUm91dGluZT4mIHN0dWJSb3V0aW5lKQotewotICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOwotICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5m
by5wYXRjaC5iYXNlR1BSKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIEdQUlJlZyB2YWx1
ZVRhZ0dQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVUYWdHUFIp
OwotI2VuZGlmCi0gICAgR1BSUmVnIHZhbHVlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHVi
SW5mby5wYXRjaC52YWx1ZUdQUik7Ci0KLSAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxs
b2NhdG9yKHN0dWJJbmZvLnBhdGNoLnVzZWRSZWdpc3RlcnMpOwotICAgIGFsbG9jYXRvci5sb2Nr
KGJhc2VHUFIpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgYWxsb2NhdG9yLmxvY2sodmFs
dWVUYWdHUFIpOwotI2VuZGlmCi0gICAgYWxsb2NhdG9yLmxvY2sodmFsdWVHUFIpOwotICAgIAot
ICAgIEdQUlJlZyBzY3JhdGNoR1BSMSA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsK
LQotICAgIENDYWxsSGVscGVycyBzdHViSml0KHZtLCBleGVjLT5jb2RlQmxvY2soKSk7Ci0KLSAg
ICBzaXplX3QgbnVtYmVyT2ZQYWRkaW5nQnl0ZXMgPSBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRS
ZWdpc3RlcnNCeVB1c2hpbmcoc3R1YkppdCk7Ci0KLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBi
YWRTdHJ1Y3R1cmUgPSBzdHViSml0LmJyYW5jaFN0cnVjdHVyZSgKLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAotICAgICAgICBzdHJ1Y3R1cmUpOwotCi0j
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZz
ZXQoKSkpCi0gICAgICAgIHN0dWJKaXQuc3RvcmU2NCh2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zm
c2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUp
KSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BS
MSk7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmU2NCh2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkp
ICogc2l6ZW9mKEpTVmFsdWUpKSk7Ci0gICAgfQotI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAg
ICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpIHsKLSAgICAgICAgc3R1
YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uo
c2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
RW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7Ci0gICAgICAgIHN0dWJK
aXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdl
KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9G
KEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgc3R1Ykpp
dC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwg
b2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkg
KyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQp
KSk7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0
KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2Ny
aXB0b3IsIGFzQml0cy50YWcpKSk7Ci0gICAgfQotI2VuZGlmCi0gICAgCi0gICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgc3VjY2VzczsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsdXJlOwot
ICAgIAotICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMoKSkgewotICAgICAgICBh
bGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhzdHViSml0LCBudW1iZXJP
ZlBhZGRpbmdCeXRlcyk7Ci0gICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKLSAgICAg
ICAgCi0gICAgICAgIGJhZFN0cnVjdHVyZS5saW5rKCZzdHViSml0KTsKLSAgICAgICAgYWxsb2Nh
dG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoc3R1YkppdCwgbnVtYmVyT2ZQYWRk
aW5nQnl0ZXMpOwotICAgICAgICBmYWlsdXJlID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOwotICAgICAgICBmYWlsdXJlID0g
YmFkU3RydWN0dXJlOwotICAgIH0KLSAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2
bSwgc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCksIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7Ci0g
ICAgaWYgKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9u
ZSkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZSwgZmFpbHVyZUxhYmVsKTsKLSAgICAg
ICAgICAgIAotICAgIHN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKLSAgICAg
ICAgZXhlYy0+Y29kZUJsb2NrKCksIHBhdGNoQnVmZmVyLAotICAgICAgICAoIlB1dEJ5SWQgcmVw
bGFjZSBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAgICAgICAgIHRvQ1N0cmlu
ZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxs
VG9Eb25lKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLXN0YXRpYyBib29sIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKLSAgICBFeGVjU3RhdGUqIGV4
ZWMsIFZNKiB2bSwgU3RydWN0dXJlKiYgc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVu
dCwgCi0gICAgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCwKLSAgICBTdHJ1Y3R1cmUqJiBvbGRTdHJ1Y3R1cmUs
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCi17Ci0gICAgUHJvcGVy
dHlOYW1lIHBuYW1lKGlkZW50KTsKLSAgICBvbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAg
aWYgKCFvbGRTdHJ1Y3R1cmUtPmlzT2JqZWN0KCkgfHwgb2xkU3RydWN0dXJlLT5pc0RpY3Rpb25h
cnkoKSB8fCBwYXJzZUluZGV4KHBuYW1lKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
UHJvcGVydHlPZmZzZXQgcHJvcGVydHlPZmZzZXQ7Ci0gICAgc3RydWN0dXJlID0gU3RydWN0dXJl
OjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KG9s
ZFN0cnVjdHVyZSwgaWRlbnQuaW1wbCgpLCAwLCBwcm9wZXJ0eU9mZnNldCk7Ci0KLSAgICBpZiAo
IXN0cnVjdHVyZSB8fCAhc3RydWN0dXJlLT5pc09iamVjdCgpIHx8IHN0cnVjdHVyZS0+aXNEaWN0
aW9uYXJ5KCkgfHwgIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBTa2lwIG9wdGltaXppbmcgdGhlIGNhc2Ug
d2hlcmUgd2UgbmVlZCBhIHJlYWxsb2MsIGlmIHdlIGRvbid0IGhhdmUKLSAgICAvLyBlbm91Z2gg
cmVnaXN0ZXJzIHRvIG1ha2UgaXQgaGFwcGVuLgotICAgIGlmIChHUFJJbmZvOjpudW1iZXJPZlJl
Z2lzdGVycyA8IDYKLSAgICAgICAgJiYgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
ICE9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKQotICAgICAgICAmJiBvbGRTdHJ1Y3R1
cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIHJlYWxsb2Ms
IGFuZCB0aGUgc3RydWN0dXJlIGhhcwotICAgIC8vIGluZGV4aW5nIHN0b3JhZ2UuCi0gICAgLy8g
RklYTUU6IFdlIHNob3VsZG4ndCBza2lwIHRoaXMhIEltcGxlbWVudCBpdCEKLSAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMwOTE0Ci0gICAgaWYgKG9sZFN0
cnVjdHVyZS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgaWYgKHB1dEtpbmQgPT0gTm90RGlyZWN0KSB7Ci0gICAgICAgIGNvbmRpdGlvblNl
dCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzcygKLSAgICAgICAgICAg
ICp2bSwgZXhlYy0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1
cmUsIGlkZW50LmltcGwoKSk7Ci0gICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBDb2RlTG9jYXRpb25MYWJl
bCBmYWlsdXJlTGFiZWwgPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNl
dChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKLSAgICBSZWZQdHI8SklUU3R1
YlJvdXRpbmU+JiBzdHViUm91dGluZSA9IHN0dWJJbmZvLnN0dWJSb3V0aW5lOwotCi0gICAgR1BS
UmVnIGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmJhc2VHUFIp
OwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgR1BSUmVnIHZhbHVlVGFnR1BSID0gc3RhdGlj
X2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZVRhZ0dQUik7Ci0jZW5kaWYKLSAgICBH
UFJSZWcgdmFsdWVHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVl
R1BSKTsKLSAgICAKLSAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHN0dWJJ
bmZvLnBhdGNoLnVzZWRSZWdpc3RlcnMpOwotICAgIGFsbG9jYXRvci5sb2NrKGJhc2VHUFIpOwot
I2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgYWxsb2NhdG9yLmxvY2sodmFsdWVUYWdHUFIpOwot
I2VuZGlmCi0gICAgYWxsb2NhdG9yLmxvY2sodmFsdWVHUFIpOwotICAgIAotICAgIENDYWxsSGVs
cGVycyBzdHViSml0KHZtKTsKLSAgICAKLSAgICBib29sIG5lZWRUaGlyZFNjcmF0Y2ggPSBmYWxz
ZTsKLSAgICBpZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKQotICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgbmVlZFRoaXJkU2NyYXRjaCA9IHRydWU7Ci0gICAgfQot
Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIxID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigp
OwotICAgIEFTU0VSVChzY3JhdGNoR1BSMSAhPSBiYXNlR1BSKTsKLSAgICBBU1NFUlQoc2NyYXRj
aEdQUjEgIT0gdmFsdWVHUFIpOwotICAgIAotICAgIEdQUlJlZyBzY3JhdGNoR1BSMiA9IGFsbG9j
YXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKLSAgICBBU1NFUlQoc2NyYXRjaEdQUjIgIT0gYmFz
ZUdQUik7Ci0gICAgQVNTRVJUKHNjcmF0Y2hHUFIyICE9IHZhbHVlR1BSKTsKLSAgICBBU1NFUlQo
c2NyYXRjaEdQUjIgIT0gc2NyYXRjaEdQUjEpOwotCi0gICAgR1BSUmVnIHNjcmF0Y2hHUFIzOwot
ICAgIGlmIChuZWVkVGhpcmRTY3JhdGNoKSB7Ci0gICAgICAgIHNjcmF0Y2hHUFIzID0gYWxsb2Nh
dG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwotICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjMgIT0g
YmFzZUdQUik7Ci0gICAgICAgIEFTU0VSVChzY3JhdGNoR1BSMyAhPSB2YWx1ZUdQUik7Ci0gICAg
ICAgIEFTU0VSVChzY3JhdGNoR1BSMyAhPSBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIEFTU0VSVChz
Y3JhdGNoR1BSMyAhPSBzY3JhdGNoR1BSMik7Ci0gICAgfSBlbHNlCi0gICAgICAgIHNjcmF0Y2hH
UFIzID0gSW52YWxpZEdQUlJlZzsKLSAgICAKLSAgICBzaXplX3QgbnVtYmVyT2ZQYWRkaW5nQnl0
ZXMgPSBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoc3R1YkppdCk7
Ci0KLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzOwotICAgICAgICAg
ICAgCi0gICAgQVNTRVJUKG9sZFN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNC
ZWVuSW52YWxpZGF0ZWQoKSk7Ci0gICAgCi0gICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0
LmJyYW5jaFN0cnVjdHVyZSgKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCAKLSAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgCi0gICAgICAgIG9sZFN0cnVjdHVyZSkpOwotICAgIAotICAgIGNoZWNrT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25zKAotICAgICAgICBjb25kaXRpb25TZXQsIGV4ZWMtPmNvZGVC
bG9jaygpLCBzdHViSW5mbywgc3R1YkppdCwgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSMSk7Ci0K
LSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7Ci0gICAgCi0gICAgYm9vbCBz
Y3JhdGNoR1BSMUhhc1N0b3JhZ2UgPSBmYWxzZTsKLSAgICAKLSAgICBpZiAoc3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkg
ewotICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSAqIHNpemVvZihKU1ZhbHVlKTsKLSAgICAgICAgQ29waWVkQWxsb2NhdG9yKiBjb3BpZWRBbGxv
Y2F0b3IgPSAmdm0tPmhlYXAuc3RvcmFnZUFsbG9jYXRvcigpOwotICAgICAgICAKLSAgICAgICAg
aWYgKCFvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgICAgIHN0
dWJKaXQubG9hZFB0cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0
Y2hHUFIxKTsKLSAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChzdHViSml0LmJyYW5jaFN1YlB0
cihNYWNyb0Fzc2VtYmxlcjo6U2lnbmVkLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG5l
d1NpemUpLCBzY3JhdGNoR1BSMSkpOwotICAgICAgICAgICAgc3R1YkppdC5zdG9yZVB0cihzY3Jh
dGNoR1BSMSwgJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKLSAgICAgICAg
ICAgIHN0dWJKaXQubmVnUHRyKHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAgIHN0dWJKaXQuYWRk
UHRyKE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9jYXRvci0+bV9j
dXJyZW50UGF5bG9hZEVuZCksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAgIHN0dWJKaXQuYWRk
UHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEpTVmFsdWUpKSwgc2NyYXRj
aEdQUjEpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBv
bGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7Ci0gICAg
ICAgICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUjMpOwotICAgICAgICAgICAgc3R1
YkppdC5sb2FkUHRyKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZywgc2NyYXRj
aEdQUjEpOwotICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKHN0dWJKaXQuYnJhbmNoU3ViUHRy
KE1hY3JvQXNzZW1ibGVyOjpTaWduZWQsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobmV3
U2l6ZSksIHNjcmF0Y2hHUFIxKSk7Ci0gICAgICAgICAgICBzdHViSml0LnN0b3JlUHRyKHNjcmF0
Y2hHUFIxLCAmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcpOwotICAgICAgICAg
ICAgc3R1YkppdC5uZWdQdHIoc2NyYXRjaEdQUjEpOwotICAgICAgICAgICAgc3R1YkppdC5hZGRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcygmY29waWVkQWxsb2NhdG9yLT5tX2N1
cnJlbnRQYXlsb2FkRW5kKSwgc2NyYXRjaEdQUjEpOwotICAgICAgICAgICAgc3R1YkppdC5hZGRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoSlNWYWx1ZSkpLCBzY3JhdGNo
R1BSMSk7Ci0gICAgICAgICAgICAvLyBXZSBoYXZlIHNjcmF0Y2hHUFIxID0gbmV3IHN0b3JhZ2Us
IHNjcmF0Y2hHUFIzID0gb2xkIHN0b3JhZ2UsIHNjcmF0Y2hHUFIyID0gYXZhaWxhYmxlCi0gICAg
ICAgICAgICBmb3IgKHNpemVfdCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBvbGRTaXplOyBvZmZzZXQg
Kz0gc2l6ZW9mKHZvaWQqKSkgewotICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMywgLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4o
b2Zmc2V0ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpLCBzY3JhdGNoR1BSMik7
Ci0gICAgICAgICAgICAgICAgc3R1YkppdC5zdG9yZVB0cihzY3JhdGNoR1BSMiwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9mZnNl
dCArIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZih2b2lkKikpKSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHN0dWJKaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjEs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSkpOwotICAgICAgICBzY3JhdGNoR1BSMUhhc1N0b3JhZ2UgPSB0cnVlOwotICAgIH0KLQot
ICAgIEFTU0VSVChvbGRTdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpID09IHN0cnVjdHVyZS0+
dHlwZUluZm8oKS50eXBlKCkpOwotICAgIEFTU0VSVChvbGRTdHJ1Y3R1cmUtPnR5cGVJbmZvKCku
aW5saW5lVHlwZUZsYWdzKCkgPT0gc3RydWN0dXJlLT50eXBlSW5mbygpLmlubGluZVR5cGVGbGFn
cygpKTsKLSAgICBBU1NFUlQob2xkU3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSA9PSBzdHJ1Y3R1
cmUtPmluZGV4aW5nVHlwZSgpKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHVpbnQzMl90IHZh
bCA9IHN0cnVjdHVyZS0+aWQoKTsKLSNlbHNlCi0gICAgdWludDMyX3QgdmFsID0gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50MzJfdD4oc3RydWN0dXJlLT5pZCgpKTsKLSNlbmRpZgotICAgIHN0dWJKaXQu
c3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHZhbCksIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSkpOwotI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkp
KQotICAgICAgICBzdHViSml0LnN0b3JlNjQodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldElu
SW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOwot
ICAgIGVsc2UgewotICAgICAgICBpZiAoIXNjcmF0Y2hHUFIxSGFzU3RvcmFnZSkKLSAgICAgICAg
ICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09i
amVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIHN0dWJKaXQu
c3RvcmU2NCh2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9m
ZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7
Ci0gICAgfQotI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBpZiAoaXNJbmxpbmVPZmZzZXQo
c2xvdC5jYWNoZWRPZmZzZXQoKSkpIHsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxp
bmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkg
KiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRv
ciwgYXNCaXRzLnBheWxvYWQpKSk7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQ
UiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5s
aW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkp
ICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IsIGFzQml0cy50YWcpKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFzY3JhdGNoR1BS
MUhhc1N0b3JhZ2UpCi0gICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQ
UjEpOwotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgp
KSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlVGFn
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5CdXR0ZXJm
bHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VU
T0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKLSAgICB9Ci0jZW5kaWYK
LSAgICAKLSAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gbnVsbHB0cjsKLQotI2lm
IEVOQUJMRShHR0MpCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbEZsdXNoV3JpdGVCYXJy
aWVyQnVmZmVyOwotICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gb2xk
U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBzdHViSml0Lmp1bXBJZklzUmVtZW1i
ZXJlZE9ySW5FZGVuKGJhc2VHUFIpOwotICAgICAgICBXcml0ZUJhcnJpZXJCdWZmZXImIHdyaXRl
QmFycmllckJ1ZmZlciA9IHN0dWJKaXQudm0oKS0+aGVhcC53cml0ZUJhcnJpZXJCdWZmZXIoKTsK
LSAgICAgICAgc3R1YkppdC5sb2FkMzIod3JpdGVCYXJyaWVyQnVmZmVyLmN1cnJlbnRJbmRleEFk
ZHJlc3MoKSwgc2NyYXRjaEdQUjIpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBuZWVk
VG9GbHVzaCA9Ci0gICAgICAgICAgICBzdHViSml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsIHNjcmF0Y2hHUFIyLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHdy
aXRlQmFycmllckJ1ZmZlci5jYXBhY2l0eSgpKSk7Ci0KLSAgICAgICAgc3R1YkppdC5hZGQzMihN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoR1BSMik7Ci0gICAgICAgIHN0
dWJKaXQuc3RvcmUzMihzY3JhdGNoR1BSMiwgd3JpdGVCYXJyaWVyQnVmZmVyLmN1cnJlbnRJbmRl
eEFkZHJlc3MoKSk7Ci0KLSAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKHdyaXRlQmFycmllckJ1ZmZlci5idWZmZXIoKSksIHNjcmF0Y2hHUFIxKTsKLSAg
ICAgICAgLy8gV2UgdXNlIGFuIG9mZnNldCBvZiAtc2l6ZW9mKHZvaWQqKSBiZWNhdXNlIHdlIGFs
cmVhZHkgYWRkZWQgMSB0byBzY3JhdGNoR1BSMi4KLSAgICAgICAgc3R1YkppdC5zdG9yZVB0cihi
YXNlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BS
MiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBzdGF0aWNfY2FzdDxpbnQzMl90Pigtc2l6ZW9m
KHZvaWQqKSkpKTsKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lV2l0aEJhcnJp
ZXIgPSBzdHViSml0Lmp1bXAoKTsKLSAgICAgICAgbmVlZFRvRmx1c2gubGluaygmc3R1YkppdCk7
Ci0KLSAgICAgICAgc2NyYXRjaEJ1ZmZlciA9IHZtLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShhbGxv
Y2F0b3IuZGVzaXJlZFNjcmF0Y2hCdWZmZXJTaXplRm9yQ2FsbCgpKTsKLSAgICAgICAgYWxsb2Nh
dG9yLnByZXNlcnZlVXNlZFJlZ2lzdGVyc1RvU2NyYXRjaEJ1ZmZlckZvckNhbGwoc3R1YkppdCwg
c2NyYXRjaEJ1ZmZlciwgc2NyYXRjaEdQUjIpOwotICAgICAgICBzdHViSml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShiYXNlR1BSKTsKLSAgICAgICAgY2FsbEZsdXNoV3JpdGVCYXJyaWVy
QnVmZmVyID0gc3R1YkppdC5jYWxsKCk7Ci0gICAgICAgIGFsbG9jYXRvci5yZXN0b3JlVXNlZFJl
Z2lzdGVyc0Zyb21TY3JhdGNoQnVmZmVyRm9yQ2FsbChzdHViSml0LCBzY3JhdGNoQnVmZmVyLCBz
Y3JhdGNoR1BSMik7Ci0KLSAgICAgICAgZG9uZVdpdGhCYXJyaWVyLmxpbmsoJnN0dWJKaXQpOwot
ICAgICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsoJnN0dWJKaXQpOwotICAgIH0K
LSNlbmRpZgotCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzczsKLSAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBmYWlsdXJlOwotICAgICAgICAgICAgCi0gICAgaWYgKGFsbG9jYXRvci5k
aWRSZXVzZVJlZ2lzdGVycygpKSB7Ci0gICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVn
aXN0ZXJzQnlQb3BwaW5nKHN0dWJKaXQsIG51bWJlck9mUGFkZGluZ0J5dGVzKTsKLSAgICAgICAg
c3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOwotCi0gICAgICAgIGZhaWx1cmVDYXNlcy5saW5rKCZz
dHViSml0KTsKLSAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBp
bmcoc3R1YkppdCwgbnVtYmVyT2ZQYWRkaW5nQnl0ZXMpOwotICAgICAgICBmYWlsdXJlID0gc3R1
YkppdC5qdW1wKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAo
KTsKLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBvcGVyYXRpb25DYWxsOwotICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3NJblNsb3dQYXRoOwotICAgIAotICAgIGlmIChzdHJ1
Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpKSB7Ci0gICAgICAgIHNsb3dQYXRoLmxpbmsoJnN0dWJKaXQpOwotICAgICAgICAKLSAg
ICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoc3R1YkppdCwg
bnVtYmVyT2ZQYWRkaW5nQnl0ZXMpOwotICAgICAgICBpZiAoIXNjcmF0Y2hCdWZmZXIpCi0gICAg
ICAgICAgICBzY3JhdGNoQnVmZmVyID0gdm0tPnNjcmF0Y2hCdWZmZXJGb3JTaXplKGFsbG9jYXRv
ci5kZXNpcmVkU2NyYXRjaEJ1ZmZlclNpemVGb3JDYWxsKCkpOwotICAgICAgICBhbGxvY2F0b3Iu
cHJlc2VydmVVc2VkUmVnaXN0ZXJzVG9TY3JhdGNoQnVmZmVyRm9yQ2FsbChzdHViSml0LCBzY3Jh
dGNoQnVmZmVyLCBzY3JhdGNoR1BSMSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgc3R1
YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUdQUiwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihz
bG90LmNhY2hlZE9mZnNldCgpKSwgdmFsdWVHUFIpOwotI2Vsc2UKLSAgICAgICAgc3R1YkppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIoc3RydWN0dXJlKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzbG90LmNh
Y2hlZE9mZnNldCgpKSwgdmFsdWVHUFIsIHZhbHVlVGFnR1BSKTsKLSNlbmRpZgotICAgICAgICBv
cGVyYXRpb25DYWxsID0gc3R1YkppdC5jYWxsKCk7Ci0gICAgICAgIGFsbG9jYXRvci5yZXN0b3Jl
VXNlZFJlZ2lzdGVyc0Zyb21TY3JhdGNoQnVmZmVyRm9yQ2FsbChzdHViSml0LCBzY3JhdGNoQnVm
ZmVyLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIHN1Y2Nlc3NJblNsb3dQYXRoID0gc3R1YkppdC5q
dW1wKCk7Ci0gICAgfQotICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCBzdHVi
Sml0LCBleGVjLT5jb2RlQmxvY2soKSwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKLSAgICBpZiAo
cGF0Y2hCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIAotICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSk7Ci0g
ICAgaWYgKGFsbG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygpKQotICAgICAgICBwYXRjaEJ1ZmZl
ci5saW5rKGZhaWx1cmUsIGZhaWx1cmVMYWJlbCk7Ci0gICAgZWxzZQotICAgICAgICBwYXRjaEJ1
ZmZlci5saW5rKGZhaWx1cmVDYXNlcywgZmFpbHVyZUxhYmVsKTsKLSAgICBpZiAoc3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSkgewotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIG9wZXJhdGlvblJl
YWxsb2NhdGVTdG9yYWdlQW5kRmluaXNoUHV0KTsKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhz
dWNjZXNzSW5TbG93UGF0aCwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZz
ZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSk7Ci0jaWYgRU5BQkxFKEdHQykKLSAg
ICAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIsIG9wZXJh
dGlvbkZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKTsKLSNlbmRpZgotICAgIH0KLSAgICAKLSAgICBz
dHViUm91dGluZSA9Ci0gICAgICAgIGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAotICAgICAgICAgICAg
RklOQUxJWkVfQ09ERV9GT1IoCi0gICAgICAgICAgICAgICAgZXhlYy0+Y29kZUJsb2NrKCksIHBh
dGNoQnVmZmVyLAotICAgICAgICAgICAgICAgICgiUHV0QnlJZCAlc3RyYW5zaXRpb24gc3R1YiAo
JXAgLT4gJXApIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAgICAgICAgICAgICAgICAg
c3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSA/ICJyZWFsbG9jYXRpbmcgIiA6ICIiLAotICAgICAgICAgICAgICAgICAgICBv
bGRTdHJ1Y3R1cmUsIHN0cnVjdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgdG9DU3RyaW5nKCpl
eGVjLT5jb2RlQmxvY2soKSkuZGF0YSgpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFi
ZWxBdE9mZnNldCgKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRlbHRh
Q2FsbFRvRG9uZSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpLAotICAgICAgICAgICAgKnZtLAotICAg
ICAgICAgICAgZXhlYy0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgpLAotICAgICAgICAg
ICAgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSwKLSAgICAgICAgICAgIHN0cnVjdHVyZSk7Ci0gICAgCi0gICAgcmV0dXJu
IHRydWU7CisgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0
aW1pemU7CisgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKIH0K
IAogc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRChFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCkBAIC0xMjQ1LDcgKzM1MCw4IEBAIHN0YXRp
YyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7CiAgICAgCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxv
Y2soKTsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBTY3JpcHRFeGVjdXRhYmxlKiBv
d25lciA9IGNvZGVCbG9jay0+b3duZXJTY3JpcHRFeGVjdXRhYmxlKCk7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKIAogICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQogICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKQEAgLTEyNTYsMjEwICszNjIsMTA4IEBAIHN0YXRpYyBJbmxpbmVD
YWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlB
Y2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQogICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKIAot
ICAgIC8vIE9wdGltaXplIHNlbGYgYWNjZXNzLgorICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3ND
YXNlPiBuZXdDYXNlOworCiAgICAgaWYgKHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSAmJiBzbG90
LmlzQ2FjaGVhYmxlUHV0KCkpIHsKLSAgICAgICAgaWYgKHNsb3QudHlwZSgpID09IFB1dFByb3Bl
cnR5U2xvdDo6TmV3UHJvcGVydHkpIHsKKyAgICAgICAgaWYgKHNsb3QudHlwZSgpID09IFB1dFBy
b3BlcnR5U2xvdDo6RXhpc3RpbmdQcm9wZXJ0eSkgeworICAgICAgICAgICAgc3RydWN0dXJlLT5k
aWRDYWNoZVByb3BlcnR5UmVwbGFjZW1lbnQodm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAg
ICAgICAKKyAgICAgICAgICAgIHB0cmRpZmZfdCBvZmZzZXRUb1BhdGNoZWRTdG9yYWdlID0gb2Zm
c2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAg
ICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlVuc2V0CisgICAgICAg
ICAgICAgICAgJiYgTWFjcm9Bc3NlbWJsZXI6OmlzUHRyQWxpZ25lZEFkZHJlc3NPZmZzZXQob2Zm
c2V0VG9QYXRjaGVkU3RvcmFnZSkKKyAgICAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5uZWVk
SW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoCisgICAgICAgICAgICAgICAgICAgIGNvZGVC
bG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwKKyAgICAgICAg
ICAgICAgICAgICAgYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1
dEtpbmQpLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRSZXBs
YWNlKAorICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSwgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gUmV0cnlDYWNoZUxhdGVyOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBTdHJ1Y3R1
cmUqIG9sZFN0cnVjdHVyZTsKLSAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
IGNvbmRpdGlvblNldDsKLSAgICAgICAgICAgIGlmICghZW1pdFB1dFRyYW5zaXRpb25TdHViKGV4
ZWMsIHZtLCBzdHJ1Y3R1cmUsIGlkZW50LCBzbG90LCBzdHViSW5mbywgcHV0S2luZCwgb2xkU3Ry
dWN0dXJlLCBjb25kaXRpb25TZXQpKQotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOworICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OnJlcGxhY2Uodm0sIG93bmVy
LCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgQVNTRVJUKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6TmV3UHJvcGVy
dHkpOwogCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoCi0gICAgICAg
ICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldCgKLSAgICAg
ICAgICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwKLSAgICAgICAg
ICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNv
ZGUoKSkpOwotICAgICAgICAgICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1bmN0aW9uKHNs
b3QsIHB1dEtpbmQpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3R1YkluZm8uaW5pdFB1
dEJ5SWRUcmFuc2l0aW9uKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgb2xkU3Ry
dWN0dXJlLCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgcHV0S2luZCA9PSBEaXJlY3QpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwotICAgICAgICB9
CisgICAgICAgICAgICBpZiAoIXN0cnVjdHVyZS0+aXNPYmplY3QoKSB8fCBzdHJ1Y3R1cmUtPmlz
RGljdGlvbmFyeSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogCi0g
ICAgICAgIGlmICghTWFjcm9Bc3NlbWJsZXI6OmlzUHRyQWxpZ25lZEFkZHJlc3NPZmZzZXQob2Zm
c2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSkKLSAgICAg
ICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0OworICAgICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPQorICAgICAgICAg
ICAgICAgIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVy
ZUNvbmN1cnJlbnRseSgKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBpZGVudC5pbXBs
KCksIDAsIG9mZnNldCk7CisgICAgICAgICAgICBpZiAoIW5ld1N0cnVjdHVyZSB8fCAhbmV3U3Ry
dWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAKLSAgICAgICAgc3RydWN0dXJlLT5kaWRDYWNoZVByb3Bl
cnR5UmVwbGFjZW1lbnQoKnZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKLSAgICAgICAgcmVwYXRj
aEJ5SWRTZWxmQWNjZXNzKCp2bSwgY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBpZGVu
dCwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgYXBwcm9wcmlhdGVMaXN0QnVpbGRpbmdQdXRCeUlkRnVu
Y3Rpb24oc2xvdCwgcHV0S2luZCksIGZhbHNlKTsKLSAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5
SWRSZXBsYWNlKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsK
LSAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLSAgICB9CisgICAgICAgICAgICBBU1NF
UlQobmV3U3RydWN0dXJlLT5wcmV2aW91c0lEKCkgPT0gc3RydWN0dXJlKTsKKyAgICAgICAgICAg
IEFTU0VSVCghbmV3U3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSk7CisgICAgICAgICAgICBBU1NF
UlQobmV3U3RydWN0dXJlLT5pc09iamVjdCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAgICAgICAgICAgaWYg
KHB1dEtpbmQgPT0gTm90RGlyZWN0KSB7CisgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0K
KyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJN
aXNzKAorICAgICAgICAgICAgICAgICAgICAgICAgdm0sIG93bmVyLCBleGVjLCBuZXdTdHJ1Y3R1
cmUsIGlkZW50LmltcGwoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNW
YWxpZCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAg
ICAgICAgIH0KIAotICAgIGlmICgoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpIHx8IHNsb3QuaXND
YWNoZWFibGVTZXR0ZXIoKSkKLSAgICAgICAgJiYgc3R1YkluZm8ucGF0Y2guc3BpbGxNb2RlID09
IERvbnRTcGlsbCkgewotICAgICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5l
OworICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OnRyYW5zaXRpb24odm0sIG93bmVy
LCBzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgb2Zmc2V0LCBjb25kaXRpb25TZXQpOworICAgICAg
ICB9CisgICAgfSBlbHNlIGlmIChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgfHwgc2xvdC5pc0Nh
Y2hlYWJsZVNldHRlcigpKSB7CisgICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkp
IHsKKyAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsK
IAotICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7Ci0gICAg
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKLSAgICAgICAgaWYgKHNsb3QuYmFzZSgpICE9IGJh
c2VWYWx1ZSkgewotICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkgewor
ICAgICAgICAgICAgaWYgKHNsb3QuYmFzZSgpICE9IGJhc2VWYWx1ZSkgewogICAgICAgICAgICAg
ICAgIGNvbmRpdGlvblNldCA9CiAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9u
c0ZvclByb3RvdHlwZVByb3BlcnR5SGl0Q3VzdG9tKAotICAgICAgICAgICAgICAgICAgICAgICAg
KnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3Qu
YmFzZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnQuaW1wbCgpKTsKLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0KLSAgICAgICAgICAg
ICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCi0gICAg
ICAgICAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4
ZWMsIHN0cnVjdHVyZSwgc2xvdC5iYXNlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBpZGVu
dC5pbXBsKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgdm0sIG93bmVyLCBleGVjLCBzdHJ1
Y3R1cmUsIHNsb3QuYmFzZSgpLCBpZGVudC5pbXBsKCkpOworICAgICAgICAgICAgICAgIGlmICgh
Y29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5p
c1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAg
ICAgICBvZmZzZXQgPSBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgPyBpbnZhbGlkT2Zmc2V0IDog
Y29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCk7Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgb2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKLQotICAgICAgICBQ
b2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiBsaXN0OwotICAgICAgICBsaXN0ID0gUG9seW1vcnBoaWNQ
dXRCeUlkTGlzdDo6ZnJvbShwdXRLaW5kLCBzdHViSW5mbyk7Ci0KLSAgICAgICAgYm9vbCByZXN1
bHQgPSBnZW5lcmF0ZUJ5SWRTdHViKAotICAgICAgICAgICAgZXhlYywga2luZEZvcihzbG90KSwg
aWRlbnQsIGN1c3RvbUZvcihzbG90KSwgc3R1YkluZm8sIGNvbmRpdGlvblNldCwgc2xvdC5iYXNl
KCksCi0gICAgICAgICAgICBvZmZzZXQsIHN0cnVjdHVyZSwgZmFsc2UsIG51bGxwdHIsCi0gICAg
ICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5m
by5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLAotICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2Fz
ZSksCi0gICAgICAgICAgICBzdHViUm91dGluZSk7Ci0gICAgICAgIGlmICghcmVzdWx0KQotICAg
ICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgIAotICAgICAgICBsaXN0LT5h
ZGRBY2Nlc3MoUHV0QnlJZEFjY2Vzczo6c2V0dGVyKAotICAgICAgICAgICAgKnZtLCBjb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpLAotICAgICAgICAgICAgc2xvdC5pc0NhY2hlYWJsZVNldHRl
cigpID8gUHV0QnlJZEFjY2Vzczo6U2V0dGVyIDogUHV0QnlJZEFjY2Vzczo6Q3VzdG9tU2V0dGVy
LAotICAgICAgICAgICAgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIHNsb3QuY3VzdG9tU2V0dGVy
KCksIHN0dWJSb3V0aW5lKSk7Ci0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1w
KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGVsdGFDYWxsVG9KdW1wKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5j
b2RlKCkpKTsKLSAgICAgICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3Qs
IHB1dEtpbmQpKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWxpc3QtPmlzRnVsbCgpKTsKLSAg
ICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLSAgICB9Ci0KLSAgICByZXR1cm4gR2l2ZVVw
T25DYWNoZTsKLX0KLQotdm9pZCByZXBhdGNoUHV0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQotewotICAgIEdDU2FmZUNvbmN1cnJlbnRKSVRM
b2NrZXIgbG9ja2VyKGV4ZWMtPmNvZGVCbG9jaygpLT5tX2xvY2ssIGV4ZWMtPnZtKCkuaGVhcCk7
Ci0gICAgCi0gICAgaWYgKHRyeUNhY2hlUHV0QnlJRChleGVjLCBiYXNlVmFsdWUsIHN0cnVjdHVy
ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0S2luZCkgPT0gR2l2ZVVwT25DYWNo
ZSkKLSAgICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1
dEtpbmQpKTsKLX0KIAotc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUJ1aWxkUHV0QnlJZExp
c3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90
JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKLXsK
LSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOwotCi0gICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCi0gICAgICAg
IHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlUHV0KCkg
JiYgIXNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSAmJiAhc2xvdC5pc0NhY2hlYWJsZVNldHRlcigp
KQotICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgIGlmICghc3RydWN0dXJlLT5w
cm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCi0gICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOwotCi0gICAgLy8gT3B0aW1pemUgc2VsZiBhY2Nlc3MuCi0gICAgaWYgKHNsb3QuYmFzZSgp
ID09IGJhc2VWYWx1ZSAmJiBzbG90LmlzQ2FjaGVhYmxlUHV0KCkpIHsKLSAgICAgICAgUG9seW1v
cnBoaWNQdXRCeUlkTGlzdCogbGlzdDsKLSAgICAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBz
dHViUm91dGluZTsKLSAgICAgICAgCi0gICAgICAgIGlmIChzbG90LnR5cGUoKSA9PSBQdXRQcm9w
ZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5KSB7Ci0gICAgICAgICAgICBsaXN0ID0gUG9seW1vcnBoaWNQ
dXRCeUlkTGlzdDo6ZnJvbShwdXRLaW5kLCBzdHViSW5mbyk7Ci0gICAgICAgICAgICBpZiAobGlz
dC0+aXNGdWxsKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7IC8vIFdp
bGwgZ2V0IGhlcmUgZHVlIHRvIHJlY3Vyc2lvbi4KLQotICAgICAgICAgICAgU3RydWN0dXJlKiBv
bGRTdHJ1Y3R1cmU7CisgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6c2V0dGVyKAor
ICAgICAgICAgICAgICAgIHZtLCBvd25lciwgQWNjZXNzQ2FzZTo6Q3VzdG9tU2V0dGVyLCBzdHJ1
Y3R1cmUsIGludmFsaWRPZmZzZXQsIGNvbmRpdGlvblNldCwKKyAgICAgICAgICAgICAgICBzbG90
LmN1c3RvbVNldHRlcigpLCBzbG90LmJhc2UoKSk7CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7Ci0gICAgICAgICAg
ICBpZiAoIWVtaXRQdXRUcmFuc2l0aW9uU3R1YihleGVjLCB2bSwgc3RydWN0dXJlLCBwcm9wZXJ0
eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kLCBvbGRTdHJ1Y3R1cmUsIGNvbmRpdGlvblNl
dCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQ7CiAKLSAgICAgICAgICAgIHN0dWJSb3V0aW5lID0gc3R1Yklu
Zm8uc3R1YlJvdXRpbmU7Ci0gICAgICAgICAgICBsaXN0LT5hZGRBY2Nlc3MoCi0gICAgICAgICAg
ICAgICAgUHV0QnlJZEFjY2Vzczo6dHJhbnNpdGlvbigKLSAgICAgICAgICAgICAgICAgICAgKnZt
LCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAotICAgICAgICAgICAgICAgICAgICBvbGRT
dHJ1Y3R1cmUsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LAotICAgICAgICAgICAgICAgICAgICBz
dHViUm91dGluZSkpOworICAgICAgICAgICAgaWYgKHNsb3QuYmFzZSgpICE9IGJhc2VWYWx1ZSkg
eworICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9CisgICAgICAgICAgICAgICAgICAgIGdl
bmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAorICAgICAgICAgICAgICAg
ICAgICAgICAgdm0sIG93bmVyLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLCBpZGVudC5p
bXBsKCkpOworICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICAgICAg
b2Zmc2V0ID0gY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCk7CisgICAg
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNl
dCgpOwogCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBsaXN0ID0gUG9seW1vcnBoaWNQ
dXRCeUlkTGlzdDo6ZnJvbShwdXRLaW5kLCBzdHViSW5mbyk7Ci0gICAgICAgICAgICBpZiAobGlz
dC0+aXNGdWxsKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7IC8vIFdp
bGwgZ2V0IGhlcmUgZHVlIHRvIHJlY3Vyc2lvbi4KLSAgICAgICAgICAgIAotICAgICAgICAgICAg
c3RydWN0dXJlLT5kaWRDYWNoZVByb3BlcnR5UmVwbGFjZW1lbnQoKnZtLCBzbG90LmNhY2hlZE9m
ZnNldCgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gV2UncmUgbm93IGNvbW1pdHRl
ZCB0byBjcmVhdGluZyB0aGUgc3R1Yi4gTW9ncmlmeSB0aGUgbWV0YS1kYXRhIGFjY29yZGluZ2x5
LgotICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBlbWl0UHV0UmVwbGFjZVN0dWIoCi0gICAgICAg
ICAgICAgICAgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgCi0gICAgICAgICAg
ICAgICAgc3RydWN0dXJlLCBDb2RlTG9jYXRpb25MYWJlbChsaXN0LT5jdXJyZW50U2xvd1BhdGhU
YXJnZXQoKSksIHN0dWJSb3V0aW5lKTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0KQotICAgICAg
ICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBsaXN0LT5hZGRBY2Nlc3MoCi0gICAgICAgICAgICAgICAgUHV0QnlJZEFjY2Vzczo6cmVwbGFj
ZSgKLSAgICAgICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
LAotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIHN0dWJSb3V0aW5lKSk7CisgICAgICAg
ICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6c2V0dGVyKAorICAgICAgICAgICAgICAgIHZtLCBv
d25lciwgQWNjZXNzQ2FzZTo6U2V0dGVyLCBzdHJ1Y3R1cmUsIG9mZnNldCwgY29uZGl0aW9uU2V0
KTsKICAgICAgICAgfQotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNh
bGxUb0p1bXApLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkp
OwotICAgICAgICBpZiAobGlzdC0+aXNGdWxsKCkpCi0gICAgICAgICAgICByZXBhdGNoQ2FsbChj
b2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVHZW5lcmlj
UHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKLQotICAgICAgICByZXR1cm4gUmV0cnlD
YWNoZUxhdGVyOwogICAgIH0KIAotICAgIGlmICgoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpIHx8
IHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSkKLSAgICAgICAgJiYgc3R1YkluZm8ucGF0Y2guc3Bp
bGxNb2RlID09IERvbnRTcGlsbCkgewotICAgICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0
dWJSb3V0aW5lOwotICAgICAgICAKLSAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQg
Y29uZGl0aW9uU2V0OwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7Ci0gICAgICAgIGlm
IChzbG90LmJhc2UoKSAhPSBiYXNlVmFsdWUpIHsKLSAgICAgICAgICAgIGlmIChzbG90LmlzQ2Fj
aGVhYmxlQ3VzdG9tKCkpIHsKLSAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPQotICAgICAg
ICAgICAgICAgICAgICBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdEN1
c3RvbSgKLSAgICAgICAgICAgICAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBzbG90LmJhc2UoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHByb3BlcnR5TmFtZS5pbXBsKCkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICBjb25kaXRpb25TZXQgPQotICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUNv
bmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKLSAgICAgICAgICAgICAgICAgICAgICAg
ICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBzbG90
LmJhc2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZS5pbXBsKCkpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgb2Zmc2V0
ID0gc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpID8gaW52YWxpZE9mZnNldCA6IGNvbmRpdGlvblNl
dC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0KLSAgICAgICAgUG9seW1vcnBoaWNQ
dXRCeUlkTGlzdCogbGlzdDsKLSAgICAgICAgbGlzdCA9IFBvbHltb3JwaGljUHV0QnlJZExpc3Q6
OmZyb20ocHV0S2luZCwgc3R1YkluZm8pOwotCi0gICAgICAgIGJvb2wgcmVzdWx0ID0gZ2VuZXJh
dGVCeUlkU3R1YigKLSAgICAgICAgICAgIGV4ZWMsIGtpbmRGb3Ioc2xvdCksIHByb3BlcnR5TmFt
ZSwgY3VzdG9tRm9yKHNsb3QpLCBzdHViSW5mbywgY29uZGl0aW9uU2V0LCBzbG90LmJhc2UoKSwK
LSAgICAgICAgICAgIG9mZnNldCwgc3RydWN0dXJlLCBmYWxzZSwgbnVsbHB0ciwKLSAgICAgICAg
ICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBh
dGNoLmRlbHRhQ2FsbFRvRG9uZSksCi0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChsaXN0
LT5jdXJyZW50U2xvd1BhdGhUYXJnZXQoKSksCi0gICAgICAgICAgICBzdHViUm91dGluZSk7Ci0g
ICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0g
ICAgICAgIAotICAgICAgICBsaXN0LT5hZGRBY2Nlc3MoUHV0QnlJZEFjY2Vzczo6c2V0dGVyKAot
ICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAotICAgICAgICAg
ICAgc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpID8gUHV0QnlJZEFjY2Vzczo6U2V0dGVyIDogUHV0
QnlJZEFjY2Vzczo6Q3VzdG9tU2V0dGVyLAotICAgICAgICAgICAgc3RydWN0dXJlLCBjb25kaXRp
b25TZXQsIHNsb3QuY3VzdG9tU2V0dGVyKCksIHN0dWJSb3V0aW5lKSk7Ci0KLSAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1w
QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwgQ29kZUxvY2F0aW9uTGFi
ZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICAgICAgaWYgKGxpc3QtPmlzRnVs
bCgpKQotICAgICAgICAgICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRL
aW5kKSk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIgPSBzdHViSW5mby5hZGRB
Y2Nlc3NDYXNlKAorICAgICAgICB2bSwgY29kZUJsb2NrLCBpZGVudCwgV1RGOjptb3ZlKG5ld0Nh
c2UpKTsKKyAgICAKKyAgICBpZiAoIWNvZGVQdHIpCisgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOwogCi0gICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0gICAgfQotICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOworICAgIHJlc2V0UHV0QnlJRENoZWNrQW5kTG9hZChzdHViSW5mbyk7
CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKAorICAgICAgICBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KAorICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2gu
ZGVsdGFDYWxsVG9KdW1wKSwKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoY29kZVB0cikpOwor
ICAgIAorICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CiB9CiAKLXZvaWQgYnVpbGRQdXRCeUlk
TGlzdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNs
b3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQor
dm9pZCByZXBhdGNoUHV0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25z
dCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0
S2luZCBwdXRLaW5kKQogewogICAgIEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGV4
ZWMtPmNvZGVCbG9jaygpLT5tX2xvY2ssIGV4ZWMtPnZtKCkuaGVhcCk7CiAgICAgCi0gICAgaWYg
KHRyeUJ1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIHByb3BlcnR5
TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQpID09IEdpdmVVcE9uQ2FjaGUpCisgICAgaWYg
KHRyeUNhY2hlUHV0QnlJRChleGVjLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1l
LCBzbG90LCBzdHViSW5mbywgcHV0S2luZCkgPT0gR2l2ZVVwT25DYWNoZSkKICAgICAgICAgcmVw
YXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwg
YXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKIH0KIApA
QCAtMTQ3OSwxMDYgKzQ4MywzNSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5UmVwYXRj
aEluKAogICAgIH0KICAgICAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVC
bG9jaygpOwotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gYmFzZS0+c3RydWN0dXJlKCp2bSk7CisgICAgU2NyaXB0RXhlY3V0YWJsZSogb3duZXIg
PSBjb2RlQmxvY2stPm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpOworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1cmUodm0pOwog
ICAgIAogICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKICAgICBp
ZiAod2FzRm91bmQpIHsKICAgICAgICAgaWYgKHNsb3Quc2xvdEJhc2UoKSAhPSBiYXNlKSB7CiAg
ICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQ
cm9wZXJ0eUhpdCgKLSAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudC5pbXBsKCkpOwor
ICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBz
dHJ1Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwgaWRlbnQuaW1wbCgpKTsKICAgICAgICAgfQogICAg
IH0gZWxzZSB7CiAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclBy
b3BlcnR5TWlzcygKLSAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSwgZXhlYywgc3RydWN0dXJlLCBpZGVudC5pbXBsKCkpOworICAgICAgICAgICAgdm0sIGNvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsK
ICAgICB9CiAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4g
R2l2ZVVwT25DYWNoZTsKLSAgICAKLSAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3Qq
IHBvbHltb3JwaGljU3RydWN0dXJlTGlzdDsKLSAgICBpbnQgbGlzdEluZGV4OwotICAgIAotICAg
IENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSk7Ci0gICAg
Q29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VMYWJlbDsKLSAgICAKLSAgICBpZiAoc3R1YkluZm8u
YWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpIHsKLSAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1
cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCgpOwotICAgICAgICBz
dHViSW5mby5pbml0SW5MaXN0KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgMCk7Ci0gICAgICAg
IHNsb3dDYXNlTGFiZWwgPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNl
dCgKLSAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpOwotICAg
ICAgICBsaXN0SW5kZXggPSAwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJU
KHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2luX2xpc3QpOwotICAgICAgICBwb2x5bW9y
cGhpY1N0cnVjdHVyZUxpc3QgPSBzdHViSW5mby51LmluTGlzdC5zdHJ1Y3R1cmVMaXN0OwotICAg
ICAgICBsaXN0SW5kZXggPSBzdHViSW5mby51LmluTGlzdC5saXN0U2l6ZTsKLSAgICAgICAgc2xv
d0Nhc2VMYWJlbCA9IENvZGVMb2NhdGlvbkxhYmVsKHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+
bGlzdFtsaXN0SW5kZXggLSAxXS5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7Ci0gICAgICAg
IAotICAgICAgICBpZiAobGlzdEluZGV4ID09IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSkK
LSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgIH0KLSAgICAKLSAgICBSZWZQ
dHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwotICAgIAotICAgIHsKLSAgICAgICAgR1BS
UmVnIGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmJhc2VHUFIp
OwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5m
by5wYXRjaC52YWx1ZUdQUik7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gVGVtcFJlZ2lz
dGVyU2V0KHN0dWJJbmZvLnBhdGNoLnVzZWRSZWdpc3RlcnMpLmdldEZyZWVHUFIoKTsKLSAgICAg
ICAgCi0gICAgICAgIENDYWxsSGVscGVycyBzdHViSml0KHZtKTsKLSAgICAgICAgCi0gICAgICAg
IGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2g7Ci0gICAgICAgIGlmIChzY3JhdGNoR1BSID09IElu
dmFsaWRHUFJSZWcpIHsKLSAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBBc3NlbWJseUhlbHBlcnM6
OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgcmVzdWx0R1BSKTsKLSAgICAgICAgICAgIHN0dWJK
aXQucHVzaFRvU2F2ZShzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIG5lZWRUb1Jlc3RvcmVTY3Jh
dGNoID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBuZWVkVG9SZXN0b3JlU2Ny
YXRjaCA9IGZhbHNlOwotICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IGZhaWx1cmVDYXNlczsKLSAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5j
aFN0cnVjdHVyZSgKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKLSAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSksCi0gICAgICAgICAgICBzdHJ1Y3R1cmUpKTsKLQotICAgICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgICAgICBpZiAoc3RydWN0dXJl
LT50eXBlSW5mbygpLm5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygpKQotICAgICAg
ICAgICAgdm0tPnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KGlkZW50LCBzdHVi
SW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwogCi0gICAgICAgIGlmIChzbG90LndhdGNo
cG9pbnRTZXQoKSkKLSAgICAgICAgICAgIHNsb3Qud2F0Y2hwb2ludFNldCgpLT5hZGQoc3R1Yklu
Zm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNz
Q2FzZT4gbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmluKAorICAgICAgICB2bSwgb3duZXIsIHdhc0Zv
dW5kID8gQWNjZXNzQ2FzZTo6SW5IaXQgOiBBY2Nlc3NDYXNlOjpJbk1pc3MsIHN0cnVjdHVyZSwg
Y29uZGl0aW9uU2V0KTsKIAotICAgICAgICBjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9ucygK
LSAgICAgICAgICAgIGNvbmRpdGlvblNldCwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLCBz
dHViSml0LCBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOwotICAgICAgICAKLSNpZiBVU0UoSlNW
QUxVRTY0KQotICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02
NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHdhc0ZvdW5kKSkpLCByZXN1bHRHUFIpOwotI2Vs
c2UKLSAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIod2Fz
Rm91bmQpLCByZXN1bHRHUFIpOwotI2VuZGlmCi0gICAgICAgIAotICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBzdWNjZXNzLCBmYWlsOwotICAgICAgICAKLSAgICAgICAgZW1pdFJlc3RvcmVT
Y3JhdGNoKHN0dWJKaXQsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzY3JhdGNoR1BSLCBzdWNjZXNz
LCBmYWlsLCBmYWlsdXJlQ2FzZXMpOwotICAgICAgICAKLSAgICAgICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcigqdm0sIHN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygpLCBKSVRDb21waWxhdGlvbkNh
bkZhaWwpOwotICAgICAgICBpZiAocGF0Y2hCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkKLSAg
ICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAKLSAgICAgICAgbGlua1Jl
c3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc3VjY2Vzcywg
ZmFpbCwgZmFpbHVyZUNhc2VzLCBzdWNjZXNzTGFiZWwsIHNsb3dDYXNlTGFiZWwpOwotICAgICAg
ICAKLSAgICAgICAgc3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAotICAgICAg
ICAgICAgZXhlYy0+Y29kZUJsb2NrKCksIHBhdGNoQnVmZmVyLAotICAgICAgICAgICAgKCJJbiAo
Zm91bmQgPSAlcykgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICAgICAg
ICAgd2FzRm91bmQgPyAieWVzIiA6ICJubyIsIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkp
LmRhdGEoKSwKLSAgICAgICAgICAgICAgICBzdWNjZXNzTGFiZWwuZXhlY3V0YWJsZUFkZHJlc3Mo
KSkpOwotICAgIH0KLSAgICAKLSAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlz
dEluZGV4XS5zZXQoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGlu
ZSwgc3RydWN0dXJlLCB0cnVlKTsKLSAgICBzdHViSW5mby51LmluTGlzdC5saXN0U2l6ZSsrOwot
ICAgIAotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksIENv
ZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CisgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKHZtLCBjb2Rl
QmxvY2ssIGlkZW50LCBXVEY6Om1vdmUobmV3Q2FzZSkpOworICAgIGlmICghY29kZVB0cikKKyAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRj
aEp1bXAoCisgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQo
c3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFi
ZWwoY29kZVB0cikpOwogICAgIAotICAgIHJldHVybiBsaXN0SW5kZXggPCAoUE9MWU1PUlBISUNf
TElTVF9DQUNIRV9TSVpFIC0gMSkgPyBSZXRyeUNhY2hlTGF0ZXIgOiBHaXZlVXBPbkNhY2hlOwor
ICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CiB9CiAKIHZvaWQgcmVwYXRjaEluKApAQCAtMTky
OCwyMiArODYxLDcgQEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKAogdm9pZCByZXNldEdldEJ5
SUQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKIHsK
ICAgICByZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwg
b3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKTsKLSAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWwzMiBz
dHJ1Y3R1cmVMYWJlbCA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0
T2Zmc2V0KC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0Y2guZGVsdGFDaGVja0ltbVRvQ2FsbCk7Ci0g
ICAgaWYgKE1hY3JvQXNzZW1ibGVyOjpjYW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJyYW5jaDMyV2l0
aFBhdGNoKCkpIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJldmVydEp1bXBSZXBsYWNlbWVu
dFRvUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6c3RhcnRPZlBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoT25BZGRyZXNzKHN0cnVjdHVyZUxh
YmVsKSwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAotICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEPihzdHViSW5mby5wYXRj
aC5iYXNlR1BSKSwKLSAgICAgICAgICAgICAgICBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4odW51c2VkUG9pbnRlcikpOwotICAg
IH0KLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEludDMyKHN0cnVjdHVyZUxhYmVsLCBzdGF0
aWNfY2FzdDxpbnQzMl90Pih1bnVzZWRQb2ludGVyKSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENvbXBhY3Qoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0xv
YWRPclN0b3JlKSwgMCk7Ci0jZWxzZQotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ29tcGFj
dChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0
dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUpLCAwKTsKLSAgICBNYWNyb0Fz
c2VtYmxlcjo6cmVwYXRjaENvbXBhY3Qoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFM
YWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1BheWxvYWRMb2Fk
T3JTdG9yZSksIDApOwotI2VuZGlmCisgICAgcmVzZXRHZXRCeUlEQ2hlY2tBbmRMb2FkKHN0dWJJ
bmZvKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1bXApLCBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5k
ZWx0YUNhbGxUb1Nsb3dDYXNlKSk7CiB9CiAKQEAgLTE5NTEsMzMgKzg2OSwxOCBAQCB2b2lkIHJl
c2V0UHV0QnlJRChDb2RlQmxvY2sqIGNvZGVCbG9jaywgCiB7CiAgICAgVl9KSVRPcGVyYXRpb25f
RVNzaUpKSSB1bm9wdGltaXplZEZ1bmN0aW9uID0gYml0d2lzZV9jYXN0PFZfSklUT3BlcmF0aW9u
X0VTc2lKSkk+KHJlYWRDYWxsVGFyZ2V0KGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJ
IG9wdGltaXplZEZ1bmN0aW9uOwotICAgIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJh
dGlvblB1dEJ5SWRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRC
eUlkU3RyaWN0QnVpbGRMaXN0KQorICAgIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJh
dGlvblB1dEJ5SWRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRC
eUlkU3RyaWN0T3B0aW1pemUpCiAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9u
UHV0QnlJZFN0cmljdE9wdGltaXplOwotICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24g
PT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9w
ZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3QpCisgICAgZWxzZSBpZiAodW5vcHRpbWl6
ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0IHx8IHVub3B0aW1pemVkRnVu
Y3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplKQogICAgICAgICBvcHRp
bWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKLSAgICBl
bHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJp
Y3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0
QnVpbGRMaXN0KQorICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9u
UHV0QnlJZERpcmVjdFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1
dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSkKICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBv
cGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7CiAgICAgZWxzZSB7Ci0gICAgICAg
IEFTU0VSVCh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25T
dHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9u
U3RyaWN0QnVpbGRMaXN0KTsKKyAgICAgICAgQVNTRVJUKHVub3B0aW1pemVkRnVuY3Rpb24gPT0g
b3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09
IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZSk7CiAgICAgICAgIG9wdGlt
aXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOwog
ICAgIH0KICAgICByZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbiwgb3B0aW1pemVkRnVuY3Rpb24pOwotICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyIHN0
cnVjdHVyZUxhYmVsID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRP
ZmZzZXQoLShpbnRwdHJfdClzdHViSW5mby5wYXRjaC5kZWx0YUNoZWNrSW1tVG9DYWxsKTsKLSAg
ICBpZiAoTWFjcm9Bc3NlbWJsZXI6OmNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNoMzJXaXRo
UGF0Y2goKSkgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50
VG9QYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaCgKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpzdGFydE9mUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2hPbkFkZHJlc3Moc3RydWN0dXJlTGFi
ZWwpLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoCi0gICAgICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+KHN0dWJJbmZvLnBhdGNo
LmJhc2VHUFIpLAotICAgICAgICAgICAgICAgIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQzMl90Pih1bnVzZWRQb2ludGVyKSk7Ci0gICAg
fQotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIoc3RydWN0dXJlTGFiZWwsIHN0YXRp
Y19jYXN0PGludDMyX3Q+KHVudXNlZFBvaW50ZXIpKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAg
IE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Mb2FkT3JTdG9y
ZSksIDApOwotI2Vsc2UKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEludDMyKHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRl
bHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUpLCAwKTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRj
aEludDMyKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0
dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKSwgMCk7Ci0jZW5kaWYK
KyAgICByZXNldFB1dEJ5SURDaGVja0FuZExvYWQoc3R1YkluZm8pOwogICAgIE1hY3JvQXNzZW1i
bGVyOjpyZXBhdGNoSnVtcChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0
KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsK
IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2NyYXRj
aFJlZ2lzdGVyQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMTg5NTQzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NCw2ICs0NCw4IEBAIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6flNjcmF0Y2hSZWdp
c3QKIAogdm9pZCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OmxvY2soR1BSUmVnIHJlZykKIHsK
KyAgICBpZiAocmVnID09IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybjsKICAgICB1bnNp
Z25lZCBpbmRleCA9IEdQUkluZm86OnRvSW5kZXgocmVnKTsKICAgICBpZiAoaW5kZXggPT0gR1BS
SW5mbzo6SW52YWxpZEluZGV4KQogICAgICAgICByZXR1cm47CkBAIC01MiwxMiArNTQsMjAgQEAg
dm9pZCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OmxvY2soR1BSUgogCiB2b2lkIFNjcmF0Y2hS
ZWdpc3RlckFsbG9jYXRvcjo6bG9jayhGUFJSZWcgcmVnKQogeworICAgIGlmIChyZWcgPT0gSW52
YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJuOwogICAgIHVuc2lnbmVkIGluZGV4ID0gRlBSSW5m
bzo6dG9JbmRleChyZWcpOwogICAgIGlmIChpbmRleCA9PSBGUFJJbmZvOjpJbnZhbGlkSW5kZXgp
CiAgICAgICAgIHJldHVybjsKICAgICBtX2xvY2tlZFJlZ2lzdGVycy5zZXRGUFJCeUluZGV4KGlu
ZGV4KTsKIH0KIAordm9pZCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OmxvY2soSlNWYWx1ZVJl
Z3MgcmVncykKK3sKKyAgICBsb2NrKHJlZ3MudGFnR1BSKCkpOworICAgIGxvY2socmVncy5wYXls
b2FkR1BSKCkpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rSW5mbz4KIHR5cGVuYW1lIEJh
bmtJbmZvOjpSZWdpc3RlclR5cGUgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjphbGxvY2F0ZVNj
cmF0Y2goKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNoUmVnaXN0
ZXJBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oCShyZXZpc2lvbiAxODk1NDMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MCwxMSArNDAsMTMgQEAgc3RydWN0IFNjcmF0Y2hCdWZmZXI7CiAKIGNsYXNzIFNjcmF0
Y2hSZWdpc3RlckFsbG9jYXRvciB7CiBwdWJsaWM6CisgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yKCkgeyB9CiAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yKGNvbnN0IFJlZ2lzdGVyU2V0
JiB1c2VkUmVnaXN0ZXJzKTsKICAgICB+U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yKCk7CiAKLSAg
ICB2b2lkIGxvY2soR1BSUmVnIHJlZyk7Ci0gICAgdm9pZCBsb2NrKEZQUlJlZyByZWcpOworICAg
IHZvaWQgbG9jayhHUFJSZWcpOworICAgIHZvaWQgbG9jayhGUFJSZWcpOworICAgIHZvaWQgbG9j
ayhKU1ZhbHVlUmVncyk7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmFua0luZm8+CiAg
ICAgdHlwZW5hbWUgQmFua0luZm86OlJlZ2lzdGVyVHlwZSBhbGxvY2F0ZVNjcmF0Y2goKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDE4OTU0
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBj
b3B5KQpAQCAtMTg4LDYgKzE4OCw3IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5n
OwogICAgIHYoYm9vbCwgY2xvYmJlckFsbFJlZ3NJbkZUTElDU2xvd1BhdGgsICFBU1NFUlRfRElT
QUJMRUQsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGFzc3VtZUFsbFJlZ3NJbkZUTElDQXJlTGl2
ZSwgZmFsc2UsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGVuYWJsZUFjY2Vzc0lubGluaW5nLCB0
cnVlLCBudWxscHRyKSBcCisgICAgdih1bnNpZ25lZCwgbWF4QWNjZXNzVmFyaWFudExpc3RTaXpl
LCA4LCBudWxscHRyKSBcCiAgICAgdihib29sLCBlbmFibGVQb2x5dmFyaWFudERldmlydHVhbGl6
YXRpb24sIHRydWUsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGVuYWJsZVBvbHltb3JwaGljQWNj
ZXNzSW5saW5pbmcsIHRydWUsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGVuYWJsZVBvbHltb3Jw
aGljQ2FsbElubGluaW5nLCB0cnVlLCBudWxscHRyKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvc3RyZXNzL2FycmF5LW1lc3NhZ2UtcGFzc2luZy5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2FycmF5LW1lc3NhZ2UtcGFzc2lu
Zy5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mv
YXJyYXktbWVzc2FnZS1wYXNzaW5nLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjQ5IEBA
CisvLyBUaGlzIHRlc3Qgd2FzIG9yaWdpbmFsbHkgZm9yIG1lc3NhZ2UgcGFzc2luZyBvZiB0eXBl
ZCBhcnJheXMuIEJ1dCBpdCB0dXJucyBvdXQgdGhhdCBpdCBpcyBhIGdvb2QKKy8vIHN0cmVzcyBv
ZiBKU0MgaW5saW5lIGNhY2hlcyBhcyB3ZWxsLiBTbywgdGhpcyBpcyBhIERPTWxlc3MgdmVyc2lv
biBvZiB0aGUgdGVzdC4KKwordmFyIHdpbmRvdzsKKworKGZ1bmN0aW9uKCkgeworICAgIHZhciBs
aXN0ZW5lcnMgPSBbXTsKKyAgICB2YXIgbWVzc2FnZXMgPSBbXTsKKyAgICAKKyAgICB3aW5kb3cg
PSB7CisgICAgICAgIGFkZEV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uKHR5cGUsIGxpc3RlbmVyKSB7
CisgICAgICAgICAgICBsaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7CisgICAgICAgIH0sCisgICAg
ICAgIHBvc3RNZXNzYWdlOiBmdW5jdGlvbihtZXNzYWdlKSB7CisgICAgICAgICAgICBtZXNzYWdl
cy5wdXNoKG1lc3NhZ2UpOworICAgICAgICB9LAorICAgICAgICBfaGFuZGxlRXZlbnRzOiBmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZXMubGVuZ3Ro
OyArK2kpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxpc3RlbmVycy5s
ZW5ndGg7ICsraikKKyAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzW2pdKHtkYXRhOiBtZXNz
YWdlc1tpXX0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbWVzc2FnZXMgPSBbXTsKKyAg
ICAgICAgfQorICAgIH07Cit9KSgpOworCit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CisK
K3dpbmRvdy50ZXN0c0NvbXBsZXRlID0gMDsKKworZnVuY3Rpb24gdGVzdFBhc3NlZCgpIHsgfQor
CitmdW5jdGlvbiB0ZXN0RmFpbGVkKHN0cmluZykgeworICAgIHRyeSB7CisgICAgICAgIHRocm93
IG5ldyBFcnJvcigiVGVzdCBmYWlsZWQ6ICIgKyBzdHJpbmcpOworICAgIH0gY2F0Y2ggKGUpIHsK
KyAgICAgICAgcHJpbnQoZS5tZXNzYWdlKTsKKyAgICAgICAgcHJpbnQoZS5zdGFjayk7CisgICAg
ICAgIGFib3J0KCk7CisgICAgfQorfQorCitmdW5jdGlvbiBjbGFzc0NvbXBhcmUodGVzdE5hbWUs
IGdvdCwgc2VudCkgeworICAgIHZhciBjbGFzc1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9T
dHJpbmc7CisgICAgdmFyIGdvdENsYXNzID0gY2xhc3NTdHJpbmcuY2FsbChnb3QpOworICAgIHZh
ciBzZW50Q2xhc3MgPSBjbGFzc1N0cmluZy5jYWxsKHNlbnQpOworICAgIGlmIChnb3RDbGFzcyAh
PT0gc2VudENsYXNzKSB7CisgICAgICAgIHRlc3RGYWlsZWQodGVzdE5hbWUgKyAiOiBjbGFzcyAi
ICsgc2VudENsYXNzICsgIiBiZWNhbWUgIiArIGdvdENsYXNzKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0gZWxzZSB7CisgICAgICAgIHRlc3RQYXNzZWQodGVzdE5hbWUgKyAiOiBjbGFz
c2VzIGFyZSAiICsgc2VudENsYXNzKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfQor
CitmdW5jdGlvbiBidWZmZXJDb21wYXJlKHRlc3ROYW1lLCBnb3QsIHNlbnQpIHsKKyAgICBpZiAo
IWNsYXNzQ29tcGFyZSh0ZXN0TmFtZSwgZ290LCBzZW50KSkgeworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIGlmIChnb3QuYnl0ZUxlbmd0aCAhPT0gc2VudC5ieXRlTGVuZ3RoKSB7
CisgICAgICAgIHRlc3RGYWlsZWQodGVzdE5hbWUgKyAiOiBleHBlY3RlZCBieXRlTGVuZ3RoICIg
KyBzZW50LmJ5dGVMZW5ndGggKyAiIGJ5dGVzLCBnb3QgIiArIGdvdC5ieXRlTGVuZ3RoKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZWxzZSB7CisgICAgICAgIHRlc3RQYXNzZWQodGVz
dE5hbWUgKyAiOiBidWZmZXIgbGVuZ3RocyBhcmUgIiArIHNlbnQuYnl0ZUxlbmd0aCk7CisgICAg
fQorICAgIHZhciBnb3RSZWFkZXIgPSBuZXcgVWludDhBcnJheShnb3QpOworICAgIHZhciBzZW50
UmVhZGVyID0gbmV3IFVpbnQ4QXJyYXkoc2VudCk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBz
ZW50LmJ5dGVMZW5ndGg7ICsraSkgeworICAgICAgICBpZiAoZ290UmVhZGVyW2ldICE9PSBzZW50
UmVhZGVyW2ldKSB7CisgICAgICAgICAgICB0ZXN0RmFpbGVkKHRlc3ROYW1lICsgIjogYnVmZmVy
cyBkaWZmZXIgc3RhcnRpbmcgYXQgYnl0ZSAiICsgaSk7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICB9CisgICAgdGVzdFBhc3NlZCh0ZXN0TmFtZSArICI6IGJ1ZmZl
cnMgaGF2ZSB0aGUgc2FtZSBjb250ZW50cyIpOworICAgIHJldHVybiB0cnVlOworfQorCitmdW5j
dGlvbiB2aWV3Q29tcGFyZSh0ZXN0TmFtZSwgZ290LCBzZW50KSB7CisgICAgaWYgKCFjbGFzc0Nv
bXBhcmUodGVzdE5hbWUsIGdvdCwgc2VudCkpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICBpZiAoIWJ1ZmZlckNvbXBhcmUodGVzdE5hbWUsIGdvdC5idWZmZXIsIHNlbnQuYnVm
ZmVyKSkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChnb3QuYnl0ZU9m
ZnNldCAhPT0gc2VudC5ieXRlT2Zmc2V0KSB7CisgICAgICAgIHRlc3RGYWlsZWQodGVzdE5hbWUg
KyAiOiBvZmZzZXQgIiArIHNlbnQuYnl0ZU9mZnNldCArICIgYmVjYW1lICIgKyBnb3QuYnl0ZU9m
ZnNldCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGVsc2UgeworICAgICAgICB0ZXN0
UGFzc2VkKHRlc3ROYW1lICsgIjogb2Zmc2V0IGlzICIgKyBzZW50LmJ5dGVPZmZzZXQpOworICAg
IH0KKyAgICBpZiAoZ290LmJ5dGVMZW5ndGggIT09IHNlbnQuYnl0ZUxlbmd0aCkgeworICAgICAg
ICB0ZXN0RmFpbGVkKHRlc3ROYW1lICsgIjogbGVuZ3RoICIgKyBzZW50LmJ5dGVMZW5ndGggKyAi
IGJlY2FtZSAiICsgZ290LmJ5dGVMZW5ndGgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgdGVzdFBhc3NlZCh0ZXN0TmFtZSArICI6IGxlbmd0aCBpcyAiICsg
c2VudC5ieXRlTGVuZ3RoKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Z1bmN0aW9u
IHR5cGVkQXJyYXlDb21wYXJlKHRlc3ROYW1lLCBnb3QsIHNlbnQpIHsKKyAgICBpZiAoIXZpZXdD
b21wYXJlKHRlc3ROYW1lLCBnb3QsIHNlbnQpKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgaWYgKGdvdC5CWVRFU19QRVJfRUxFTUVOVCAhPT0gc2VudC5CWVRFU19QRVJfRUxF
TUVOVCkgeworICAgICAgICAvLyBTYW5pdHkgY2hlY2tpbmcuCisgICAgICAgIHRlc3RGYWlsZWQo
dGVzdE5hbWUgKyAiOiBleHBlY3RlZCBCWVRFU19QRVJfRUxFTUVOVCAiICsgc2VudC5CWVRFU19Q
RVJfRUxFTUVOVCArICIsIHNhdyAiICsgZ290LkJZVEVTX1BFUl9FTEVNRU5UKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworZnVuY3Rpb24gZGF0
YVZpZXdDb21wYXJlKHRlc3ROYW1lLCBnb3QsIHNlbnQpIHsKKyAgICByZXR1cm4gdmlld0NvbXBh
cmUodGVzdE5hbWUsIGdvdCwgc2VudCk7Cit9CisKK2Z1bmN0aW9uIGRhdGFWaWV3Q29tcGFyZTIo
dGVzdE5hbWUsIGdvdCwgc2VudCkgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjsgKytpKSB7
CisgICAgICAgIGlmICghZGF0YVZpZXdDb21wYXJlKHRlc3ROYW1lLCBnb3RbaV0sIHNlbnRbaV0p
KSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYg
KGdvdFswXS5idWZmZXIgIT09IGdvdFsxXS5idWZmZXIpIHsKKyAgICAgICAgdGVzdEZhaWxlZCh0
ZXN0TmFtZSArICI6IGV4cGVjdGVkIHRoZSBzYW1lIEFycmF5QnVmZmVyIGZvciBib3RoIHZpZXdz
Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9Citm
dW5jdGlvbiBkYXRhVmlld0NvbXBhcmUzKHRlc3ROYW1lLCBnb3QsIHNlbnQpIHsKKyAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IDM7IGkgKz0gMikgeworICAgICAgICBpZiAoIWRhdGFWaWV3Q29tcGFy
ZSh0ZXN0TmFtZSwgZ290W2ldLCBzZW50W2ldKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgfQorICAgIGlmIChnb3RbMV0ueCAhPT0gc2VudFsxXS54IHx8IGdv
dFsxXS55ICE9PSBzZW50WzFdLnkpIHsKKyAgICAgICAgdGVzdEZhaWxlZCh0ZXN0TmFtZSArICI6
IHt4OjEsIHk6MX0gd2FzIG5vdCB0cmFuc2ZlcnJlZCBwcm9wZXJseSIpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChnb3RbMF0uYnVmZmVyICE9PSBnb3RbMl0uYnVmZmVy
KSB7CisgICAgICAgIHRlc3RGYWlsZWQodGVzdE5hbWUgKyAiOiBleHBlY3RlZCB0aGUgc2FtZSBB
cnJheUJ1ZmZlciBmb3IgYm90aCB2aWV3cyIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIHJldHVybiBmYWxzZTsKK30KKworCitmdW5jdGlvbiBjcmVhdGVCdWZmZXIobGVuZ3Ro
KSB7CisgICAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihsZW5ndGgpOworICAgIHZhciB2
aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxl
bmd0aDsgKytpKSB7CisgICAgICAgIHZpZXdbaV0gPSBpICsgMTsKKyAgICB9CisgICAgcmV0dXJu
IGJ1ZmZlcjsKK30KKworZnVuY3Rpb24gY3JlYXRlVHlwZWRBcnJheSh0eXBlZEFycmF5VHlwZSwg
bGVuZ3RoKSB7CisgICAgdmFyIHZpZXcgPSBuZXcgdHlwZWRBcnJheVR5cGUobGVuZ3RoKTsKKyAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIHZpZXdbaV0gPSBp
ICsgMTsKKyAgICB9CisgICAgcmV0dXJuIHZpZXc7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZVR5cGVk
QXJyYXlPdmVyQnVmZmVyKHR5cGVkQXJyYXlUeXBlLCB0eXBlZEFycmF5RWxlbWVudFNpemUsIGxl
bmd0aCwgc3ViU3RhcnQsIHN1Ykxlbmd0aCkgeworICAgIHZhciBidWZmZXIgPSBuZXcgQXJyYXlC
dWZmZXIobGVuZ3RoICogdHlwZWRBcnJheUVsZW1lbnRTaXplKTsKKyAgICBpZiAoc3ViU3RhcnQg
PT09IHVuZGVmaW5lZCkgeworICAgICAgICBzdWJTdGFydCA9IDA7CisgICAgICAgIHN1Ykxlbmd0
aCA9IGxlbmd0aDsKKyAgICB9CisgICAgcmV0dXJuIG5ldyB0eXBlZEFycmF5VHlwZShidWZmZXIs
IHN1YlN0YXJ0ICogdHlwZWRBcnJheUVsZW1lbnRTaXplLCBzdWJMZW5ndGgpOworfQorCit2YXIg
YmFzaWNCdWZmZXJUeXBlcyA9IFsKKyAgICBbIkludDMyIiwgSW50MzJBcnJheSwgNF0sCisgICAg
WyJVaW50MzIiLCBVaW50MzJBcnJheSwgNF0sCisgICAgWyJJbnQ4IiwgSW50OEFycmF5LCAxXSwK
KyAgICBbIlVpbnQ4IiwgVWludDhBcnJheSwgMV0sCisgICAgWyJVaW50OENsYW1wZWQiLCBVaW50
OENsYW1wZWRBcnJheSwgMV0sCisgICAgWyJJbnQxNiIsIEludDE2QXJyYXksIDJdLAorICAgIFsi
VWludDE2IiwgVWludDE2QXJyYXksIDJdLAorICAgIFsiRmxvYXQzMiIsIEZsb2F0MzJBcnJheSwg
NF0sCisgICAgWyJGbG9hdDY0IiwgRmxvYXQ2NEFycmF5LCA4XQorXTsKKwordmFyIGFycmF5QnVm
ZmVyMSA9IGNyZWF0ZUJ1ZmZlcigxKTsKKwordmFyIHRlc3RMaXN0ID0gWworICAgIFsnQXJyYXlC
dWZmZXIwJywgbmV3IEFycmF5QnVmZmVyKDApLCBidWZmZXJDb21wYXJlXSwKKyAgICBbJ0FycmF5
QnVmZmVyMScsIGNyZWF0ZUJ1ZmZlcigxKSwgYnVmZmVyQ29tcGFyZV0sCisgICAgWydBcnJheUJ1
ZmZlcjEyOCcsIGNyZWF0ZUJ1ZmZlcigxMjgpLCBidWZmZXJDb21wYXJlXSwKKyAgICBbJ0RhdGFW
aWV3MCcsIG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoMCkpLCBkYXRhVmlld0NvbXBhcmVd
LAorICAgIFsnRGF0YVZpZXcxJywgbmV3IERhdGFWaWV3KGNyZWF0ZUJ1ZmZlcigxKSksIGRhdGFW
aWV3Q29tcGFyZV0sCisgICAgWydEYXRhVmlldzEtZHVwJywgW25ldyBEYXRhVmlldyhhcnJheUJ1
ZmZlcjEpLCBuZXcgRGF0YVZpZXcoYXJyYXlCdWZmZXIxKV0sIGRhdGFWaWV3Q29tcGFyZTJdLAor
ICAgIFsnRGF0YVZpZXcxLWR1cDInLCBbbmV3IERhdGFWaWV3KGFycmF5QnVmZmVyMSksIHt4OjEs
IHk6MX0sIG5ldyBEYXRhVmlldyhhcnJheUJ1ZmZlcjEpXSwgZGF0YVZpZXdDb21wYXJlM10sCisg
ICAgWydEYXRhVmlldzEyOCcsIG5ldyBEYXRhVmlldyhjcmVhdGVCdWZmZXIoMTI4KSksIGRhdGFW
aWV3Q29tcGFyZV0sCisgICAgWydEYXRhVmlldzFfb2Zmc2V0X2F0X2VuZCcsIG5ldyBEYXRhVmll
dyhjcmVhdGVCdWZmZXIoMSksIDEsIDApLCBkYXRhVmlld0NvbXBhcmVdLAorICAgIFsnRGF0YVZp
ZXcxMjhfb2Zmc2V0X2F0X2VuZCcsIG5ldyBEYXRhVmlldyhjcmVhdGVCdWZmZXIoMTI4KSwgMTI4
LCAwKSwgZGF0YVZpZXdDb21wYXJlXSwKKyAgICBbJ0RhdGFWaWV3MTI4X29mZnNldF9zbGljZV9s
ZW5ndGhfMCcsIG5ldyBEYXRhVmlldyhjcmVhdGVCdWZmZXIoMTI4KSwgNjQsIDApLCBkYXRhVmll
d0NvbXBhcmVdLAorICAgIFsnRGF0YVZpZXcxMjhfb2Zmc2V0X3NsaWNlX2xlbmd0aF8xJywgbmV3
IERhdGFWaWV3KGNyZWF0ZUJ1ZmZlcigxMjgpLCA2NCwgMSksIGRhdGFWaWV3Q29tcGFyZV0sCisg
ICAgWydEYXRhVmlldzEyOF9vZmZzZXRfc2xpY2VfbGVuZ3RoXzE2JywgbmV3IERhdGFWaWV3KGNy
ZWF0ZUJ1ZmZlcigxMjgpLCA2NCwgMTYpLCBkYXRhVmlld0NvbXBhcmVdLAorICAgIFsnRGF0YVZp
ZXcxMjhfb2Zmc2V0X3NsaWNlX3VuYWxpZ25lZCcsIG5ldyBEYXRhVmlldyhjcmVhdGVCdWZmZXIo
MTI4KSwgNjMsIDE1KSwgZGF0YVZpZXdDb21wYXJlXQorXTsKKwordGVzdExpc3QgPSB0ZXN0TGlz
dC5jb25jYXQoYmFzaWNCdWZmZXJUeXBlcy5tYXAoZnVuY3Rpb24odCkKKyAgICB7cmV0dXJuIFt0
WzBdICsgIl8wIiwgY3JlYXRlVHlwZWRBcnJheSh0WzFdLCAwKSwgdHlwZWRBcnJheUNvbXBhcmVd
O30pKTsKK3Rlc3RMaXN0ID0gdGVzdExpc3QuY29uY2F0KGJhc2ljQnVmZmVyVHlwZXMubWFwKGZ1
bmN0aW9uKHQpCisgICAge3JldHVybiBbdFswXSArICJfMSIsIGNyZWF0ZVR5cGVkQXJyYXkodFsx
XSwgMSksIHR5cGVkQXJyYXlDb21wYXJlXTt9KSk7Cit0ZXN0TGlzdCA9IHRlc3RMaXN0LmNvbmNh
dChiYXNpY0J1ZmZlclR5cGVzLm1hcChmdW5jdGlvbih0KQorICAgIHtyZXR1cm4gW3RbMF0gKyAi
XzEyOCIsIGNyZWF0ZVR5cGVkQXJyYXkodFsxXSwgMTI4KSwgdHlwZWRBcnJheUNvbXBhcmVdO30p
KTsKK3Rlc3RMaXN0ID0gdGVzdExpc3QuY29uY2F0KGJhc2ljQnVmZmVyVHlwZXMubWFwKGZ1bmN0
aW9uKHQpCisgICAge3JldHVybiBbdFswXSArICJfMF9idWZmZXIiLCBjcmVhdGVUeXBlZEFycmF5
T3ZlckJ1ZmZlcih0WzFdLCB0WzJdLCAwKSwgdHlwZWRBcnJheUNvbXBhcmVdO30pKTsKK3Rlc3RM
aXN0ID0gdGVzdExpc3QuY29uY2F0KGJhc2ljQnVmZmVyVHlwZXMubWFwKGZ1bmN0aW9uKHQpCisg
ICAge3JldHVybiBbdFswXSArICJfMV9idWZmZXIiLCBjcmVhdGVUeXBlZEFycmF5T3ZlckJ1ZmZl
cih0WzFdLCB0WzJdLCAxKSwgdHlwZWRBcnJheUNvbXBhcmVdO30pKTsKK3Rlc3RMaXN0ID0gdGVz
dExpc3QuY29uY2F0KGJhc2ljQnVmZmVyVHlwZXMubWFwKGZ1bmN0aW9uKHQpCisgICAge3JldHVy
biBbdFswXSArICJfMTI4X2J1ZmZlciIsIGNyZWF0ZVR5cGVkQXJyYXlPdmVyQnVmZmVyKHRbMV0s
IHRbMl0sIDEyOCksIHR5cGVkQXJyYXlDb21wYXJlXTt9KSk7Cit0ZXN0TGlzdCA9IHRlc3RMaXN0
LmNvbmNhdChiYXNpY0J1ZmZlclR5cGVzLm1hcChmdW5jdGlvbih0KQorICAgIHtyZXR1cm4gW3Rb
MF0gKyAiXzFfYnVmZmVyX29mZnNldF9hdF9lbmQiLCBjcmVhdGVUeXBlZEFycmF5T3ZlckJ1ZmZl
cih0WzFdLCB0WzJdLCAxLCAxLCAwKSwgdHlwZWRBcnJheUNvbXBhcmVdO30pKTsKK3Rlc3RMaXN0
ID0gdGVzdExpc3QuY29uY2F0KGJhc2ljQnVmZmVyVHlwZXMubWFwKGZ1bmN0aW9uKHQpCisgICAg
e3JldHVybiBbdFswXSArICJfMTI4X2J1ZmZlcl9vZmZzZXRfYXRfZW5kIiwgY3JlYXRlVHlwZWRB
cnJheU92ZXJCdWZmZXIodFsxXSwgdFsyXSwgMTI4LCAxMjgsIDApLCB0eXBlZEFycmF5Q29tcGFy
ZV07fSkpOwordGVzdExpc3QgPSB0ZXN0TGlzdC5jb25jYXQoYmFzaWNCdWZmZXJUeXBlcy5tYXAo
ZnVuY3Rpb24odCkKKyAgICB7cmV0dXJuIFt0WzBdICsgIl8xMjhfYnVmZmVyX29mZnNldF9zbGlj
ZV9sZW5ndGhfMCIsIGNyZWF0ZVR5cGVkQXJyYXlPdmVyQnVmZmVyKHRbMV0sIHRbMl0sIDEyOCwg
NjQsIDApLCB0eXBlZEFycmF5Q29tcGFyZV07fSkpOwordGVzdExpc3QgPSB0ZXN0TGlzdC5jb25j
YXQoYmFzaWNCdWZmZXJUeXBlcy5tYXAoZnVuY3Rpb24odCkKKyAgICB7cmV0dXJuIFt0WzBdICsg
Il8xMjhfYnVmZmVyX29mZnNldF9zbGljZV9sZW5ndGhfMSIsIGNyZWF0ZVR5cGVkQXJyYXlPdmVy
QnVmZmVyKHRbMV0sIHRbMl0sIDEyOCwgNjQsIDEpLCB0eXBlZEFycmF5Q29tcGFyZV07fSkpOwor
dGVzdExpc3QgPSB0ZXN0TGlzdC5jb25jYXQoYmFzaWNCdWZmZXJUeXBlcy5tYXAoZnVuY3Rpb24o
dCkKKyAgICB7cmV0dXJuIFt0WzBdICsgIl8xMjhfYnVmZmVyX29mZnNldF9zbGljZV9sZW5ndGhf
MTYiLCBjcmVhdGVUeXBlZEFycmF5T3ZlckJ1ZmZlcih0WzFdLCB0WzJdLCAxMjgsIDY0LCAxNiks
IHR5cGVkQXJyYXlDb21wYXJlXTt9KSk7CisKK2Z1bmN0aW9uIGRvbmVUZXN0KCkgeworICAgIGlm
ICgrK3dpbmRvdy50ZXN0c0NvbXBsZXRlID09IHRlc3RMaXN0Lmxlbmd0aCkgeworICAgIH0KK30K
KworZnVuY3Rpb24gd2luZG93SGFuZGxlTWVzc2FnZShlKSB7CisgICAgdmFyIGN1cnJlbnRUZXN0
ID0gdGVzdExpc3RbZS5kYXRhLnRlc3ROdW1dOworICAgIHZhciBleHBlY3RlZFJlc3VsdCA9IGN1
cnJlbnRUZXN0WzFdOworICAgIHRyeSB7CisgICAgICAgIGN1cnJlbnRUZXN0WzJdKGN1cnJlbnRU
ZXN0WzBdLCBlLmRhdGEudGVzdERhdGEsIGV4cGVjdGVkUmVzdWx0KTsKKyAgICB9IGNhdGNoKGUp
IHsKKyAgICAgICAgdGVzdEZhaWxlZChjdXJyZW50VGVzdFswXSArICI6IHVuZXhwZWN0ZWQgZXhj
ZXB0aW9uICIgKyBlKTsKKyAgICB9CisgICAgZG9uZVRlc3QoKTsKK30KK3dpbmRvdy5hZGRFdmVu
dExpc3RlbmVyKCdtZXNzYWdlJywgd2luZG93SGFuZGxlTWVzc2FnZSk7CisKK2ZvciAodmFyIHQg
PSAwOyB0IDwgdGVzdExpc3QubGVuZ3RoOyArK3QpIHsKKyAgICB2YXIgY3VycmVudFRlc3QgPSB0
ZXN0TGlzdFt0XTsKKyAgICB2YXIgbWVzc2FnZSA9IHt0ZXN0TnVtOiB0LCB0ZXN0RGF0YTogY3Vy
cmVudFRlc3RbMV19OworICAgIHdpbmRvdy5wb3N0TWVzc2FnZShtZXNzYWdlLCAnKicpOworfQor
Cit3aW5kb3cuX2hhbmRsZUV2ZW50cygpOwpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4OTU0MykKKysrIFNv
dXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTUt
MDktMDggIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBUaGVyZSBz
aG91bGQgYmUgb25lIHN0dWIgaGFuZ2luZyBvZmYgYW4gaW5saW5lIGNhY2hlIHRoYXQgY29udGFp
bnMgY29kZSBmb3IgYWxsIG9mIHRoZSBjYXNlcywgcmF0aGVyIHRoYW4gZm9ybWluZyBhIGxpbmtl
ZCBsaXN0IGNvbnNpc3Rpbmcgb2Ygb25lIHN0dWIgcGVyIGNhc2UKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODcxNworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJlZWYgdXAgZHVtcGluZyBhIGJpdC4KKwor
ICAgICAgICAqIHd0Zi9QcmludFN0cmVhbS5oOgorICAgICAgICAoV1RGOjpwb2ludGVyRHVtcCk6
CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorCiAyMDE1LTA5LTA4ICBNYXJrIExhbSAg
PG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBHQyBzdGFjayBzY2FuIHNob3VsZCBpbmNs
dWRlIEFCSSByZWQgem9uZS4KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1ByaW50U3RyZWFtLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUHJpbnRTdHJlYW0uaAkocmV2aXNpb24gMTg5NTQz
KQorKysgU291cmNlL1dURi93dGYvUHJpbnRTdHJlYW0uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0LCAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBQcmludFN0cmVhbV9oCiAjZGVmaW5lIFByaW50
U3RyZWFtX2gKIAorI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDxzdGRhcmcuaD4KICNpbmNs
dWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgpAQCAt
MTYyLDYgKzE2MywxMiBAQCBwcml2YXRlOgogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIFBvaW50ZXJE
dW1wPFQ+IHBvaW50ZXJEdW1wKGNvbnN0IFQqIHB0cikgeyByZXR1cm4gUG9pbnRlckR1bXA8VD4o
cHRyKTsgfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCBwcmludEludGVybmFsKFByaW50
U3RyZWFtJiBvdXQsIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxUPiYgdmFsdWUpCit7CisgICAgb3V0
LnByaW50KHBvaW50ZXJEdW1wKHZhbHVlLmdldCgpKSk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFU+CiBjbGFzcyBWYWx1ZUluQ29udGV4dCB7CiBwdWJsaWM6Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260906</attachid>
            <date>2015-09-09 20:00:50 -0700</date>
            <delta_ts>2015-09-10 11:16:27 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>296606</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg5NTU3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5MSBA
QAorMjAxNS0wOS0wOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFRoZXJlIHNob3VsZCBiZSBvbmUgc3R1YiBoYW5naW5nIG9mZiBhbiBpbmxpbmUgY2FjaGUgdGhh
dCBjb250YWlucyBjb2RlIGZvciBhbGwgb2YgdGhlIGNhc2VzLCByYXRoZXIgdGhhbiBmb3JtaW5n
IGEgbGlua2VkIGxpc3QgY29uc2lzdGluZyBvZiBvbmUgc3R1YiBwZXIgY2FzZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4NzE3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBhIG1ham9yIHJl
d3JpdGUgb2YgdGhlIEpTQyBnZXQvcHV0L2luIGlubGluZSBjYWNoZXMgKElDcyksIG1vdGl2YXRl
ZCBieSB0aGUgbmVlZCB0byBhZGQKKyAgICAgICAgZmFuY3kgbmV3IGtpbmRzIG9mIGlubGluZSBj
YWNoZXMgZm9yIHByb3BlcnR5IHR5cGUgaW5mZXJlbmNlIChodHRwczovL3dlYmtpdC5vcmcvYi8x
NDg2MTApLgorCisgICAgICAgIFByZXZpb3VzbHksIG91ciBpbmxpbmUgY2FjaGVzIGhhZCBzb21l
IHByb2JsZW1zIHRoYXQgbWFkZSB0aGVtIGRpZmZpY3VsdCB0byB3b3JrIHdpdGguIEl0IHdhcwor
ICAgICAgICBpbXBvc3NpYmxlIHRvIGNoYW5nZSBhbnkgY29kZSB0aGF0IHdhcyBwcmV2aW91c2x5
IGdlbmVyYXRlZCBieSB0aGUgSUMgZXhjZXB0IGJ5IGJsb3dpbmcgdGhlCisgICAgICAgIHdob2xl
IElDIGF3YXksIHRoZSBJQ3Mgc2NhbGVkIHBvb3JseSBpZiB0aGVyZSB3ZXJlIG1hbnkgY2FzZXMs
IGFuZCB0aGVyZSB3YXMgYSBsb3Qgb2YgZHVwbGljYXRlCisgICAgICAgIGFuZCBhZCBob2MgY29k
ZS4KKworICAgICAgICBJbXBvc3NpYmxlIHRvIHJlZ2VuZXJhdGUgYSBwcmV2aW91c2x5IGdlbmVy
YXRlZCBzdHViOiBTYXkgdGhhdCBzb21lIGFjY2VzcyAoby5mID0gdikgY2F1c2VzIG91cgorICAg
ICAgICBJQyBjb2RlIHRvIGVtaXQgc29tZSBzdHViOyBsZXQncyBjYWxsIGl0IHN0dWIxLiBUaGVu
IGxhdGVyIHdlIGZpbmQgdGhhdCB3ZSBuZWVkIHRvIGVtaXQgYQorICAgICAgICBkaWZmZXJlbnQg
c3R1Yiwgc3R1YjIsIHdoZXJlIHdlIHRoaW5rIHRoYXQgc3R1YjIgbWlnaHQgc3Vic3VtZSBzdHVi
MS4gV2Ugc2F5IHRoYXQgc3R1YjIKKyAgICAgICAgc3Vic3VtZXMgc3R1YjEgaWYgZmFpbGluZyB0
byBleGVjdXRlIHN0dWIyIHRvIGNvbXBsZXRpb24gbWVhbnMgdGhhdCB3ZSBhcmUgZ3VhcmFudGVl
ZCB0byBmYWlsCisgICAgICAgIHRvIGV4ZWN1dGUgc3R1YjEgdG8gY29tcGxldGlvbi4gVGhpcyBj
b3VsZCBoYXBwZW4gaW4gdHJ1bmsgaWYgc3R1YjIgaGFzIHRoZSBzYW1lIGJhc2Ugc3RydWN0dXJl
CisgICAgICAgIGFzIHN0dWIxIGJ1dCBkaWZmZXJlbnQgcHJvdG90eXBlIGNvbmRpdGlvbnMuIEl0
IGNvdWxkIGhhcHBlbiB3aXRoIHByb3BlcnR5IHR5cGUgaW5mZXJlbmNlIGlmCisgICAgICAgIHN0
dWIyIGhhcyBhIGxvb3NlciB0eXBlIGNoZWNrIG9uIHYgdGhhbiBzdHViMSBkaWQuIEN1cnJlbnRs
eSwgaWYgdGhpcyBoYXBwZW5lZCwgd2Ugd291bGQgZW1pdAorICAgICAgICBzdHViMiBhbmQgaGF2
ZSBpdHMgc2xvdyBwYXRoIGp1bXAgdG8gc3R1YjEuIEhlbmNlLCB3ZSB3b3VsZCBzdGlsbCBlbmQg
dXAgZXhlY3V0aW5nIHRoZSBjaGVja3MKKyAgICAgICAgb2Ygc3R1YjEgYmVmb3JlIGZhbGxpbmcg
dGhyb3VnaCB0byB0aGUgc2xvdyBwYXRoLiBUaGlzIGdldHMgYmFkIHdoZW4gdGhlcmUgYXJlIG1h
bnkgc3R1YnMuCisgICAgICAgIFN0dWIxIG1pZ2h0IGJlIGluIGZyb250IG9mIGEgYnVuY2ggb2Yg
b3RoZXIgc3R1YnMsIHNvIHdoZW4gd2UgYWRkIHN0dWIyLCB3ZSB3aWxsIGVuZCB1cAorICAgICAg
ICBleGVjdXRpbmcgYm90aCBzdHViMidzIGFuZCBzdHViMSdzIGNoZWNrcyBiZWZvcmUgZmFsbGlu
ZyB0aHJvdWdoIHRvIHRoZSBvdGhlciBzdHVicy4gSXQgd291bGQKKyAgICAgICAgYmUgYmV0dGVy
IGlmIHdlIGNvdWxkIHJlbW92ZSBzdHViMSBmcm9tIHRoZSBsaXN0IGF0IHRoaXMgcG9pbnQuIEJ1
dCBzaW5jZSBzdHViMSBjb3VsZCBiZSBsaW5rZWQKKyAgICAgICAgdG8gZnJvbSBhIGRpZmZlcmVu
dCBzdHViIHRoYXQgd2UgaGFkIGFscmVhZHkgZ2VuZXJhdGVkLCB3ZSdkIGhhdmUgdG8gaGF2ZSBh
IHdheSBvZiBwYXRjaGluZworICAgICAgICBzdHVicyBvciByZWdlbmVyYXRpbmcgdGhlbSBmcm9t
IHNjcmF0Y2guIFRoaXMgaXMgY3VycmVudHkgaW1wb3NzaWJsZSBiZWNhdXNlIHdlIGp1c3QgZG9u
J3Qga2VlcAorICAgICAgICBhcm91bmQgZW5vdWdoIG1ldGEtZGF0YSB0byBtZXNzIHdpdGggYSBz
dHViIGFmdGVyIGl0J3MgZ2VuZXJhdGVkLiBBZnRlciB0aGlzIGNoYW5nZSwgd2UgbmV2ZXIKKyAg
ICAgICAgbGluayBuZXcgc3R1YnMgb250byBhIGxpbmtlZCBsaXN0IG9mIHByZS1leGlzdGluZyBz
dHViczsgaW5zdGVhZCBlYWNoIElDIHdpbGwgaGF2ZSBvbmUgc3R1YgorICAgICAgICBoYW5naW5n
IG9mZiBvZiBpdCBhbmQgd2UgYWx3YXlzIHJlZ2VuZXJhdGUgdGhhdCBvbmUgc3R1YiBmcm9tIHNj
cmF0Y2guIFRoYXQgb25lIHN0dWIgY29udGFpbnMKKyAgICAgICAgZWl0aGVyIGEgQmluYXJ5U3dp
dGNoIG9yIGEgYnJhbmNoIGNhc2NhZGUgdG8gc2VsZWN0IG9uZSBvZiB0aGUgQWNjZXNzQ2FzZXMu
IEVhY2ggQWNjZXNzQ2FzZSBpcworICAgICAgICBhbiBvYmplY3QgdGhhdCBkZXNjcmliZXMgZXZl
cnl0aGluZyB3ZSBuZWVkIHRvIHJlZ2VuZXJhdGUgaXQgaW4gdGhlIGZ1dHVyZS4gVGhpcyBtZWFu
cyB0aGF0CisgICAgICAgIHdoZW4gd2UgYWRkIGEgbmV3IGNhc2UgdG8gYW4gSUMgc3R1Yiwgd2Ug
Y2FuIGZpZ3VyZSBvdXQgd2hpY2ggcHJldmlvdXMgY2FzZXMgdGhpcyBvbmUgc3Vic3VtZXMuCisK
KyAgICAgICAgUG9vciBzY2FsYWJpbGl0eSB3aGVuIHRoZXJlIGFyZSBtYW55IGNhc2VzOiBQcmV2
aW91c2x5LCB0aGUgY2FzZXMgb2YgYSBwb2x5bW9ycGhpYyBpbmxpbmUgY2FjaGUKKyAgICAgICAg
Zm9ybWVkIGEgbGlua2VkIGxpc3Qgb2YgYnJhbmNoZXMuIFRoaXMgbWVhbnQgdGhhdCB0aGUgY29t
cGxleGl0eSBvZiBhbiBpbmxpbmUgY2FjaGUgZ3JldworICAgICAgICBsaW5lYXJseSB3aXRoIHRo
ZSBudW1iZXIgb2YgY2FzZXMuIFRoaXMgY2hhbmdlIHR1cm5zIHRoaXMgaW50byBhIEJpbmFyeVN3
aXRjaCBpbiBtb3N0IGNhc2VzLAorICAgICAgICBsZWFkaW5nIHRvIGxvZ2FyaXRobWljIHNjYWxp
bmcuCisKKyAgICAgICAgRHVwbGljYXRlIGNvZGUgYmV0d2VlbiBnZXQsIHB1dCwgYW5kIGluOiBU
aGUgY29kZSBmb3Igb3BfZ2V0X2J5X2lkLCBvcF9wdXRfYnlfaWQsIGFuZCBvcF9pbgorICAgICAg
ICBpbmxpbmUgY2FjaGVzIGdyZXcgaW5kZXBlbmRlbnRseSBhbmQgZW5kZWQgdXAgaGF2aW5nIGEg
bG90IG9mIGR1cGxpY2F0ZSBjb2RlLiBXZSBoYWQgdGhlIHdvcnN0CisgICAgICAgIGtpbmRzIG9m
IGR1cGxpY2F0ZSBjb2RlLiBJbiBzb21lIGNhc2VzLCB0aGUgY29kZSB3YXMgY29weS1wYXN0ZWQu
IEluIG90aGVyIGNhc2VzLCB3ZSB3cm90ZSBjb2RlCisgICAgICAgIHRoYXQgZmVsdCBsaWtlIGl0
IHdhcyBuZXcgZGVzcGl0ZSB0aGUgZmFjdCB0aGF0IGl0IHdhcyBsb2dpY2FsbHkgaWRlbnRpY2Fs
IHRvIGNvZGUgdGhhdCB3YXMKKyAgICAgICAgYWxyZWFkeSB3cml0dGVuIGVsc2V3aGVyZS4gVGhl
IG1haW4gc291cmNlcyBvZiBkdXBsaWNhdGlvbiB3ZXJlIGluIHNlbGVjdGluZyBhIHNjcmF0Y2gK
KyAgICAgICAgcmVnaXN0ZXIsIGNoZWNraW5nIGFsbCBvZiB0aGUgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25zIGFuZCB0aGUgYmFzZSBzdHJ1Y3R1cmUsIHRoZSBwcm8gZm9ybWEKKyAgICAgICAgaW52
b2x2ZWQgaW4gZ2VuZXJhdGluZyBhIHN0dWIsIGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIG5lZWRl
ZCB0byBkZXNjcmliZSBhbGwgb2YgdGhlIGFjY2VzcworICAgICAgICBjYXNlcy4gVGhpcyBjaGFu
Z2UgZGVkdXBsaWNhdGVzIGFsbCBvZiB0aGF0IGNvZGUuIE5vdywgYWxsIG9mIHRob3NlIElDcyB1
c2UgdGhlIHNhbWUgY2xhc3NlczoKKyAgICAgICAgdGhlIFBvbHltb3JwaGljQWNjZXNzIGFuZCBB
Y2Nlc3NDYXNlLiBUaGVyZSBpcyBjb2RlIGluIHRob3NlIGNsYXNzZXMgdGhhdCBoYW5kbGVzIGFs
bCBvZiB0aGUKKyAgICAgICAgY29tbW9uIHRoaW5ncywgYW5kIGZvciB0aGUgbW9zdCBwYXJ0IHRo
ZSBvbmx5IGNvZGUgdGhhdCBhY3R1YWxseSBzcGVjaWFsaXplcyBmb3IgdGhlIGtpbmQgb2YKKyAg
ICAgICAgYWNjZXNzIGlzIGluIHNvbWUgc3dpdGNoIHN0YXRlbWVudCBpbiBBY2Nlc3NDYXNlOjpn
ZW5lcmF0ZSgpLgorCisgICAgICAgIFNwZWNpYWwtY2FzaW5nIG9mIGFycmF5IGxlbmd0aCBhbmQg
c3RyaW5nIGxlbmd0aDogUHJldmlvdXNseSwgYXJyYXkubGVuZ3RoIGFuZCBzdHJpbmcubGVuZ3Ro
CisgICAgICAgIHdlcmUgaGFuZGxlZCBpbiBhbiBhZCBob2MgbWFubmVyIGluIHRoZSBnZXRfYnlf
aWQgcmVwYXRjaGluZyBjb2RlLiBUaGUgaGFuZGxpbmcgd2FzIHNlcGFyYXRlCisgICAgICAgIGZy
b20gdGhlIHBvbHltb3JwaGljIGdldF9ieV9pZCBoYW5kbGluZywgd2hpY2ggbWVhbnQgdGhhdCB3
ZSBjb3VsZCBub3QgaGFuZGxlIHBvbHltb3JwaGljCisgICAgICAgIGxlbmd0aCBhY2Nlc3NlcyBp
ZiBvbmUgb2YgdGhlIGxlbmd0aCBjYXNlcyB3YXMgZWl0aGVyIGFycmF5IG9yIHN0cmluZyBsZW5n
dGguIEZvciBleGFtcGxlLCBpZgorICAgICAgICB5b3UgaGFkICJvLmxlbmd0aCIgd2hlcmUgdGhl
IGxlbmd0aCB3YXMgZWl0aGVyIGFycmF5IGxlbmd0aCBvciBhIHZhbmlsbGEgbGVuZ3RoIHByb3Bl
cnR5LCB0aGVuCisgICAgICAgIHRoZSBnZXRfYnlfaWQgaW5saW5lIGNhY2hlIHdvdWxkIGVpdGhl
ciBlbWl0IGEgbW9ub21vcnBoaWMgc3R1YiBmb3IgYXJyYXkgbGVuZ3RoLCBvciBhCisgICAgICAg
IG1vbm9tb3JwaGljIHN0dWIgZm9yIHRoZSB2YW5pbGxhIGxlbmd0aCBwcm9wZXJ0eSwgYnV0IG5l
dmVyIGEgcG9seW1vcnBoaWMgc3R1YiAob3IgbGlzdCkgdGhhdAorICAgICAgICBjb3VsZCBkbyBi
b3RoLiBUaGlzIGNoYW5nZSBhZGRyZXNzZXMgdGhpcyBwcm9ibGVtIGJ5IGZvbGRpbmcgYXJyYXkg
bGVuZ3RoIGFuZCBzdHJpbmcgbGVuZ3RoCisgICAgICAgIGludG8gdGhlIHBvbHltb3JwaGljIGdl
dF9ieV9pZCBjb2RlLgorCisgICAgICAgIFRoaXMgd2FzIG1lYW50IHRvIGJlIGEgcGVyZi1uZXV0
cmFsIGNoYW5nZSB0byBlbmFibGUgcHJvcGVydHkgdHlwZSBpbmZlcmVuY2UsIGJ1dCBpdCBlbmRl
ZCB1cAorICAgICAgICBiZWluZyBhIDElIE9jdGFuZSBzcGVlZC11cCwgbWFpbmx5IGJlY2F1c2Ug
b2YgYSAxNCUgc3BlZWQtdXAgaW4gcmF5dHJhY2UuIFRoaXMgaXNuJ3QgdG9vCisgICAgICAgIHN1
cnByaXNpbmcsIHNpbmNlIHRoYXQgdGVzdCBkb2VzIHVzZSBpbmxpbmUgY2FjaGVzIGEgbG90IGFu
ZCB0aGlzIGNoYW5nZSBtYWtlcyBpbmxpbmUgY2FjaGVzCisgICAgICAgIG1vcmUgc2NhbGFibGUu
CisKKyAgICAgICAgVGhpcyBhbHNvIGZpeGVzIGFuZCBhZGRzIGEgdGVzdCBmb3IgYSBCaW5hcnlT
d2l0Y2ggYnVnLiBCaW5hcnlTd2l0Y2ggaGFkIGFuIG9wdGltaXphdGlvbiBmb3IKKyAgICAgICAg
Y29uc2VjdXRpdmUgaW50ZWdlciBjYXNlcy4gVXNpbmcgaXQgb24gdHlwZWQgYXJyYXkgc3RydWN0
dXJlcyB0cmlnZ2VycyB0aGlzIGJ1Zy4gSXQncyBhIGhhcmQKKyAgICAgICAgYnVnIHRvIHRyaWdn
ZXIgYW55IG90aGVyIHdheSBiZWNhdXNlIG91ciBvdGhlciBzd2l0Y2ggb3B0aW1pemF0aW9ucyB3
aWxsIHVzdWFsbHkgdXNlIGEganVtcAorICAgICAgICB0YWJsZSBpbiBjYXNlIG9mIGNvbnNlY3V0
aXZlIGludGVnZXJzLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2
YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEph
dmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzOgorICAg
ICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlckNvZGVQdHI6OmR1bXBXaXRoTmFtZSk6CisgICAgICAgICogYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcmludEdldEJ5SWRDYWNoZVN0
YXR1cyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cHJpbnRQdXRCeUlkQ2FjaGVTdGF0dXMp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpnZXRCeVZhbEluZm9NYXApOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmFkZFN0dWJJbmZvKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5kU3R1Yklu
Zm8pOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OnN0dWJJbmZvQmVnaW4pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnN0dWJJbmZv
RW5kKToKKyAgICAgICAgKiBieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpT
Qzo6R2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRTaXRlRmVlZGJh
Y2spOgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcDogQ29waWVkIGZy
b20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3Qu
Y3BwLgorICAgICAgICAoSlNDOjpBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OmFkZFdhdGNocG9pbnQp
OgorICAgICAgICAoSlNDOjpBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnJlc3RvcmVTY3JhdGNoKToK
KyAgICAgICAgKEpTQzo6QWNjZXNzR2VuZXJhdGlvblN0YXRlOjpzdWNjZWVkKToKKyAgICAgICAg
KEpTQzo6QWNjZXNzQ2FzZTo6QWNjZXNzQ2FzZSk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6
OmdldCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OnJlcGxhY2UpOgorICAgICAgICAoSlND
OjpBY2Nlc3NDYXNlOjp0cmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6c2V0
dGVyKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6aW4pOgorICAgICAgICAoSlNDOjpBY2Nl
c3NDYXNlOjpnZXRMZW5ndGgpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjp+QWNjZXNzQ2Fz
ZSk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmZyb21TdHJ1Y3R1cmVTdHViSW5mbyk6Cisg
ICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmNsb25lKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2Fz
ZTo6Z3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2spOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjph
bHRlcm5hdGVCYXNlKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Y2FuUmVwbGFjZSk6Cisg
ICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmR1bXApOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNl
Ojp2aXNpdFdlYWspOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFy
ZCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlKToKKyAgICAgICAgKEpTQzo6
UG9seW1vcnBoaWNBY2Nlc3M6OlBvbHltb3JwaGljQWNjZXNzKToKKyAgICAgICAgKEpTQzo6UG9s
eW1vcnBoaWNBY2Nlc3M6On5Qb2x5bW9ycGhpY0FjY2Vzcyk6CisgICAgICAgIChKU0M6OlBvbHlt
b3JwaGljQWNjZXNzOjpyZWdlbmVyYXRlV2l0aENhc2VzKToKKyAgICAgICAgKEpTQzo6UG9seW1v
cnBoaWNBY2Nlc3M6OnJlZ2VuZXJhdGVXaXRoQ2FzZSk6CisgICAgICAgIChKU0M6OlBvbHltb3Jw
aGljQWNjZXNzOjp2aXNpdFdlYWspOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzczo6
ZHVtcCk6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQWNjZXNzOjpyZWdlbmVyYXRlKToKKyAg
ICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nlc3M6
OkdldEJ5SWRBY2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpHZXRCeUlkQWNjZXNzOjp+
R2V0QnlJZEFjY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nlc3M6OmZy
b21TdHJ1Y3R1cmVTdHViSW5mbyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nl
c3M6OnZpc2l0V2Vhayk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlBvbHltb3JwaGljR2V0QnlJ
ZExpc3Q6OlBvbHltb3JwaGljR2V0QnlJZExpc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpQ
b2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojpmcm9tKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UG9s
eW1vcnBoaWNHZXRCeUlkTGlzdDo6flBvbHltb3JwaGljR2V0QnlJZExpc3QpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpjdXJyZW50U2xvd1BhdGhUYXJn
ZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjphZGRB
Y2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojpp
c0Z1bGwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojpp
c0FsbW9zdEZ1bGwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0dldEJ5SWRM
aXN0OjpkaWRTZWxmUGF0Y2hpbmcpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0Ojp2aXNpdFdlYWspOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1Bv
bHltb3JwaGljQWNjZXNzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmguCisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6
OmlzR2V0KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6aXNQdXQpOgorICAgICAgICAoSlND
OjpBY2Nlc3NDYXNlOjppc0luKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6dHlwZSk6Cisg
ICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6Om9mZnNldCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nh
c2U6OnZpYVByb3h5KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6c3RydWN0dXJlKToKKyAg
ICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6bmV3U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6QWNj
ZXNzQ2FzZTo6Y29uZGl0aW9uU2V0KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6YWRkaXRp
b25hbFNldCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmN1c3RvbVNsb3RCYXNlKToKKyAg
ICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6ZG9lc0NhbGxzKToKKyAgICAgICAgKEpTQzo6QWNjZXNz
Q2FzZTo6Y2FsbExpbmtJbmZvKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6UmFyZURhdGE6
OlJhcmVEYXRhKToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNBY2Nlc3M6OmlzRW1wdHkpOgor
ICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzczo6c2l6ZSk6CisgICAgICAgIChKU0M6OlBv
bHltb3JwaGljQWNjZXNzOjphdCk6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQWNjZXNzOjpv
cGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6R2V0QnlJZEFjY2Vzcyk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nlc3M6OmlzU2V0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6b3BlcmF0b3IhKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6dHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Okdl
dEJ5SWRBY2Nlc3M6OnN0cnVjdHVyZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkdldEJ5SWRB
Y2Nlc3M6OmNvbmRpdGlvblNldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkdldEJ5SWRBY2Nl
c3M6OnN0dWJSb3V0aW5lKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6R2V0QnlJZEFjY2Vzczo6
ZG9lc0NhbGxzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNHZXRCeUlkTGlz
dDo6aXNFbXB0eSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlBvbHltb3JwaGljR2V0QnlJZExp
c3Q6OnNpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0
OjphdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlBvbHltb3JwaGljR2V0QnlJZExpc3Q6Om9w
ZXJhdG9yW10pOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNz
U3RydWN0dXJlTGlzdC5oOiBSZW1vdmVkLgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGlj
R2V0QnlJZExpc3QuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGlj
R2V0QnlJZExpc3QuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY1B1
dEJ5SWRMaXN0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY1B1
dEJ5SWRMaXN0Lmg6IFJlbW92ZWQuCisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5j
cHA6CisgICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyk6Cisg
ICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmVTdHViSW5mbzo6ZGVyZWYpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5m
bzo6YWRkQWNjZXNzQ2FzZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpyZXNl
dCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuY2Vz
KToKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmVTdHViSW5mbzo6U3RydWN0dXJlU3R1YkluZm8pOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmVTdHViSW5mbzo6aW5pdEdldEJ5SWRTZWxmKToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlU3R1YkluZm86OmluaXRQdXRCeUlkUmVwbGFjZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZVN0dWJJbmZvOjppbml0U3R1Yik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpz
ZXRTZWVuKToKKyAgICAgICAgKEpTQzo6Z2V0U3RydWN0dXJlU3R1YkluZm9Db2RlT3JpZ2luKToK
KyAgICAgICAgKEpTQzo6aXNHZXRCeUlkQWNjZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
aXNQdXRCeUlkQWNjZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6aXNJbkFjY2Vzcyk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjppbml0R2V0QnlJZExpc3Qp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdFB1dEJ5SWRU
cmFuc2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86Omlu
aXRQdXRCeUlkTGlzdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZv
Ojppbml0SW5MaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86
OmFkZFdhdGNocG9pbnQpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbik6Cisg
ICAgICAgICogZnRsL0ZUTENvbXBpbGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Om1tQWxsb2Nh
dGVEYXRhU2VjdGlvbik6CisgICAgICAgICogaml0L0FjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5l
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBqaXQvQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUu
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgIChK
U0M6OkFzc2VtYmx5SGVscGVyczo6YnJhbmNoSWZFbXB0eSk6CisgICAgICAgIChKU0M6OkFzc2Vt
Ymx5SGVscGVyczo6YnJhbmNoU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxw
ZXJzOjpib3hCb29sZWFuUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6
Ym94Qm9vbGVhbik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6Ym94SW50MzIpOgor
ICAgICAgICAqIGppdC9CaW5hcnlTd2l0Y2guY3BwOgorICAgICAgICAoSlNDOjpCaW5hcnlTd2l0
Y2g6OkJpbmFyeVN3aXRjaCk6CisgICAgICAgIChKU0M6OkJpbmFyeVN3aXRjaDo6YnVpbGQpOgor
ICAgICAgICAoSlNDOjpCaW5hcnlTd2l0Y2g6OkNhc2U6OmR1bXApOgorICAgICAgICAoSlNDOjpC
aW5hcnlTd2l0Y2g6OkJyYW5jaENvZGU6OmR1bXApOgorICAgICAgICAqIGppdC9CaW5hcnlTd2l0
Y2guaDoKKyAgICAgICAgKEpTQzo6QmluYXJ5U3dpdGNoOjpDYXNlOjpvcGVyYXRvcjwpOgorICAg
ICAgICAoSlNDOjpCaW5hcnlTd2l0Y2g6OkJyYW5jaENvZGU6OkJyYW5jaENvZGUpOgorICAgICAg
ICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3Bw
OgorICAgICAgICAoSlNDOjpnYXJiYWdlU3R1YkluZm8pOgorICAgICAgICAoSlNDOjpKSVRJbmxp
bmVDYWNoZUdlbmVyYXRvcjo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IpOgorICAgICAgICAoSlND
OjpKSVRCeUlkR2VuZXJhdG9yOjpKSVRCeUlkR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklU
R2V0QnlJZEdlbmVyYXRvcjo6SklUR2V0QnlJZEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJ
VFB1dEJ5SWRHZW5lcmF0b3I6OkpJVFB1dEJ5SWRHZW5lcmF0b3IpOgorICAgICAgICAqIGppdC9K
SVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oOgorICAgICAgICAoSlNDOjpKSVRJbmxpbmVDYWNoZUdl
bmVyYXRvcjo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVRJbmxp
bmVDYWNoZUdlbmVyYXRvcjo6c3R1YkluZm8pOgorICAgICAgICAoSlNDOjpKSVRCeUlkR2VuZXJh
dG9yOjpKSVRCeUlkR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUQnlJZEdlbmVyYXRvcjo6
cmVwb3J0U2xvd1BhdGhDYWxsKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6Cisg
ICAgICAgICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjpyZXBhdGNoQ2FsbCk6Cisg
ICAgICAgIChKU0M6OnJlcGF0Y2hCeUlkU2VsZkFjY2Vzcyk6CisgICAgICAgIChKU0M6OnJlc2V0
R2V0QnlJRENoZWNrQW5kTG9hZCk6CisgICAgICAgIChKU0M6OnJlc2V0UHV0QnlJRENoZWNrQW5k
TG9hZCk6CisgICAgICAgIChKU0M6OnJlcGxhY2VXaXRoSnVtcCk6CisgICAgICAgIChKU0M6OnRy
eUNhY2hlR2V0QnlJRCk6CisgICAgICAgIChKU0M6OnJlcGF0Y2hHZXRCeUlEKToKKyAgICAgICAg
KEpTQzo6YXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6
YXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJZEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6dHJ5
Q2FjaGVQdXRCeUlEKToKKyAgICAgICAgKEpTQzo6cmVwYXRjaFB1dEJ5SUQpOgorICAgICAgICAo
SlNDOjp0cnlSZXBhdGNoSW4pOgorICAgICAgICAoSlNDOjpyZXBhdGNoSW4pOgorICAgICAgICAo
SlNDOjpyZXNldEdldEJ5SUQpOgorICAgICAgICAoSlNDOjpyZXNldFB1dEJ5SUQpOgorICAgICAg
ICAoSlNDOjpjaGVja09iamVjdFByb3BlcnR5Q29uZGl0aW9uKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6Y2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjplbWl0UmVzdG9yZVNjcmF0Y2gpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpsaW5rUmVz
dG9yZVNjcmF0Y2gpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjp0b1N0cmluZyk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OmtpbmRGb3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpjdXN0b21G
b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpnZW5lcmF0ZUJ5SWRTdHViKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6cGF0Y2hKdW1wVG9HZXRCeUlkU3R1Yik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OnRyeUJ1aWxkR2V0QnlJRExpc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpidWls
ZEdldEJ5SURMaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6YXBwcm9wcmlhdGVMaXN0QnVp
bGRpbmdQdXRCeUlkRnVuY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjplbWl0UHV0UmVw
bGFjZVN0dWIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjplbWl0UHV0VHJhbnNpdGlvblN0dWIp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjp0cnlCdWlsZFB1dEJ5SWRMaXN0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6YnVpbGRQdXRCeUlkTGlzdCk6IERlbGV0ZWQuCisgICAgICAgICogaml0
L1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5jcHA6CisgICAgICAgIChKU0M6OlNjcmF0Y2hSZWdp
c3RlckFsbG9jYXRvcjo6bG9jayk6CisgICAgICAgIChKU0M6OlNjcmF0Y2hSZWdpc3RlckFsbG9j
YXRvcjo6YWxsb2NhdGVTY3JhdGNoKToKKyAgICAgICAgKiBqaXQvU2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yLmg6CisgICAgICAgIChKU0M6OlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6U2NyYXRj
aFJlZ2lzdGVyQWxsb2NhdG9yKToKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoR2xvYmFs
T2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChmdW5jdGlvblF1aXQpOgorICAgICAg
ICAoZnVuY3Rpb25BYm9ydCk6CisgICAgICAgIChmdW5jdGlvbkZhbHNlMSk6CisgICAgICAgIChm
dW5jdGlvbkZhbHNlMik6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAgICog
dGVzdHMvc3RyZXNzL2FycmF5LW1lc3NhZ2UtcGFzc2luZy5qczogQWRkZWQuCisgICAgICAgICh3
aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgICh3aW5kb3cucG9zdE1lc3NhZ2UpOgor
ICAgICAgICAod2luZG93Ll9oYW5kbGVFdmVudHMpOgorICAgICAgICAodGVzdFBhc3NlZCk6Cisg
ICAgICAgICh0ZXN0RmFpbGVkKToKKyAgICAgICAgKGNsYXNzQ29tcGFyZSk6CisgICAgICAgIChi
dWZmZXJDb21wYXJlKToKKyAgICAgICAgKHZpZXdDb21wYXJlKToKKyAgICAgICAgKHR5cGVkQXJy
YXlDb21wYXJlKToKKyAgICAgICAgKGRhdGFWaWV3Q29tcGFyZSk6CisgICAgICAgIChkYXRhVmll
d0NvbXBhcmUyKToKKyAgICAgICAgKGRhdGFWaWV3Q29tcGFyZTMpOgorICAgICAgICAoY3JlYXRl
QnVmZmVyKToKKyAgICAgICAgKGNyZWF0ZVR5cGVkQXJyYXkpOgorICAgICAgICAoY3JlYXRlVHlw
ZWRBcnJheU92ZXJCdWZmZXIpOgorICAgICAgICAobmV3LkRhdGFWaWV3KToKKyAgICAgICAgKHRl
c3RMaXN0LnRlc3RMaXN0LmNvbmNhdC5iYXNpY0J1ZmZlclR5cGVzLm1hcCk6CisgICAgICAgIChk
b25lVGVzdCk6CisKIDIwMTUtMDktMDkgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNv
bT4KIAogICAgICAgICBGaXggdGhlIG5vLURGRyBidWlsZC4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE4OTU0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDggKzEwNCw3IEBAIHNl
dChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25k
aXRpb24uY3BwCiAgICAgYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwCiAg
ICAgYnl0ZWNvZGUvT3Bjb2RlLmNwcAotICAgIGJ5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExp
c3QuY3BwCi0gICAgYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAKKyAgICBieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKICAgICBieXRlY29kZS9QcmVjaXNlSnVtcFRhcmdl
dHMuY3BwCiAgICAgYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uY3BwCiAgICAgYnl0ZWNvZGUv
UHV0QnlJZFN0YXR1cy5jcHAKQEAgLTM1Niw3ICszNTUsNiBAQCBzZXQoSmF2YVNjcmlwdENvcmVf
U09VUkNFUwogICAgIGludGVycHJldGVyL1Byb3RvQ2FsbEZyYW1lLmNwcAogICAgIGludGVycHJl
dGVyL1N0YWNrVmlzaXRvci5jcHAKIAotICAgIGppdC9BY2Nlc3NvckNhbGxKSVRTdHViUm91dGlu
ZS5jcHAKICAgICBqaXQvQXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3MuY3BwCiAgICAgaml0L0Fz
c2VtYmx5SGVscGVycy5jcHAKICAgICBqaXQvQmluYXJ5U3dpdGNoLmNwcApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2pzYy5jcHAJKHJldmlzaW9uIDE4OTU0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
c2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODAsNiArNDgwLDcgQEAgc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25SZW9wdGltaXphdGlvblJldHJ5Q291bnQoRXhlY1N0YXRlKik7CiBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblRyYW5zZmVyQXJyYXlCdWZm
ZXIoRXhlY1N0YXRlKik7CiBzdGF0aWMgTk9fUkVUVVJOX1dJVEhfVkFMVUUgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblF1aXQoRXhlY1N0YXRlKik7CitzdGF0aWMgTk9fUkVU
VVJOX0RVRV9UT19DUkFTSCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQWJv
cnQoRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvbkZhbHNlMShFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uRmFsc2UyKEV4ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25VbmRlZmluZWQxKEV4ZWNTdGF0ZSopOwpAQCAtNjEzLDYgKzYx
NCw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJkZXNjcmliZUFycmF5
IiwgZnVuY3Rpb25EZXNjcmliZUFycmF5LCAxKTsKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJw
cmludCIsIGZ1bmN0aW9uUHJpbnQsIDEpOwogICAgICAgICBhZGRGdW5jdGlvbih2bSwgInF1aXQi
LCBmdW5jdGlvblF1aXQsIDApOworICAgICAgICBhZGRGdW5jdGlvbih2bSwgImFib3J0IiwgZnVu
Y3Rpb25BYm9ydCwgMCk7CiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAiZ2MiLCBmdW5jdGlvbkdD
QW5kU3dlZXAsIDApOwogICAgICAgICBhZGRGdW5jdGlvbih2bSwgImZ1bGxHQyIsIGZ1bmN0aW9u
RnVsbEdDLCAwKTsKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJlZGVuR0MiLCBmdW5jdGlvbkVk
ZW5HQywgMCk7CkBAIC0xMjQ2LDYgKzEyNDgsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvblF1aQogI2VuZGlmCiB9CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25BYm9ydChFeGVjU3RhdGUqKQoreworICAgIENSQVNIKCk7Cit9CisKIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25GYWxzZTEoRXhlY1N0YXRlKikgeyByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpOyB9CiBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uRmFsc2UyKEV4ZWNTdGF0ZSopIHsgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKTsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE4OTU0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTM0Myw4ICszNDMsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
Ynl0ZWNvZGVcT2JqZWN0UHJvcGVydHlDb25kaXRpb24uY3BwIiAvPgogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cYnl0ZWNvZGVcT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcT3Bjb2RlLmNwcCIgLz4KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFBvbHltb3JwaGljR2V0QnlJZExpc3QuY3Bw
IiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUG9seW1vcnBoaWNQdXRC
eUlkTGlzdC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQb2x5
bW9ycGhpY0FjY2Vzcy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29k
ZVxQcmVjaXNlSnVtcFRhcmdldHMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
Ynl0ZWNvZGVcUHJvcGVydHlDb25kaXRpb24uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cYnl0ZWNvZGVcUHV0QnlJZFN0YXR1cy5jcHAiIC8+CkBAIC02MTcsNyArNjE2LDYgQEAK
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGludGVycHJldGVyXEpTU3RhY2suY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caW50ZXJwcmV0ZXJcUHJvdG9DYWxsRnJhbWUuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caW50ZXJwcmV0ZXJcU3RhY2tWaXNpdG9y
LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxBY2Nlc3NvckNhbGxKSVRT
dHViUm91dGluZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcQXJpdHlD
aGVja0ZhaWxSZXR1cm5UaHVua3MuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
aml0XEFzc2VtYmx5SGVscGVycy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxq
aXRcQmluYXJ5U3dpdGNoLmNwcCIgLz4KQEAgLTEwNDQsOCArMTA0Miw3IEBACiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcT3Bjb2RlLmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxPcGVyYW5kcy5oIiAvPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oIiAvPgot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUG9seW1vcnBoaWNQdXRCeUlkTGlz
dC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUG9seW1vcnBoaWNB
Y2Nlc3MuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFByZWNpc2VK
dW1wVGFyZ2V0cy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUHJv
cGVydHlDb25kaXRpb24uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2Rl
XFB1dEJ5SWRTdGF0dXMuaCIgLz4KQEAgLTE0MTYsNyArMTQxMyw2IEBACiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRlclxQcm90b0NhbGxGcmFtZS5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5caW50ZXJwcmV0ZXJcUmVnaXN0ZXIuaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGludGVycHJldGVyXFN0YWNrVmlzaXRvci5oIiAvPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5caml0XEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcQXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3Mu
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxBc3NlbWJseUhlbHBlcnMuaCIg
Lz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxCaW5hcnlTd2l0Y2guaCIgLz4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3Jp
cHRDb3JlLnZjeHByb2ouZmlsdGVycwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMJ
KHJldmlzaW9uIDE4OTU0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwkod29ya2luZyBjb3B5KQpA
QCAtMTk4LDcgKzE5OCw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxP
cGNvZGUuY3BwIj4KICAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4KICAgICA8L0NsQ29t
cGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFBvbHltb3JwaGljUHV0
QnlJZExpc3QuY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFBvbHlt
b3JwaGljQWNjZXNzLmNwcCI+CiAgICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9GaWx0ZXI+CiAgICAg
PC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQdXRCeUlk
U3RhdHVzLmNwcCI+CkBAIC0xNjI2LDkgKzE2MjYsNiBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cbGx2bVxMTFZNQVBJLmNwcCI+CiAgICAgICA8RmlsdGVyPmxsdm08L0ZpbHRlcj4KICAg
ICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxBY2Nlc3NvckNh
bGxKSVRTdHViUm91dGluZS5jcHAiPgotICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4KLSAgICA8
L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxDb25zb2xl
TWVzc2FnZS5jcHAiPgogICAgICAgPEZpbHRlcj5pbnNwZWN0b3I8L0ZpbHRlcj4KICAgICA8L0Ns
Q29tcGlsZT4KQEAgLTE2OTUsOSArMTY5Miw2IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxpbnNwZWN0b3JcSlNKYXZhU2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBlLmNwcCI+CiAgICAgICA8
RmlsdGVyPmluc3BlY3RvcjwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAiPgotICAg
ICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5ccHJvZmlsZXJcUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAiPgog
ICAgICAgPEZpbHRlcj5wcm9maWxlcjwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgpAQCAtMjA5
Nyw3ICsyMDkxLDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE9wZXJh
bmRzLmgiPgogICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRl
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUG9seW1vcnBoaWNQdXRCeUlk
TGlzdC5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFBvbHltb3JwaGlj
QWNjZXNzLmgiPgogICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNs
dWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUHV0QnlJZFN0YXR1cy5o
Ij4KQEAgLTQyMDUsOSArNDE5OSw2IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxsbHZt
XExMVk1IZWFkZXJzLmgiPgogICAgICAgPEZpbHRlcj5sbHZtPC9GaWx0ZXI+CiAgICAgPC9DbElu
Y2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcQWNjZXNzb3JDYWxsSklUU3R1
YlJvdXRpbmUuaCI+Ci0gICAgICA8RmlsdGVyPmppdDwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRl
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYXNzZW1ibGVyXEFib3J0UmVhc29uLmgiPgog
ICAgICAgPEZpbHRlcj5hc3NlbWJsZXI8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KQEAgLTQy
ODYsOSArNDI3Nyw2IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQ0lu
bGluZXMuaCI+CiAgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVk
ZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFBvbHltb3JwaGljR2V0QnlJ
ZExpc3QuaCI+Ci0gICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1
ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwcm9maWxlclxQcm9maWxlckpldHRpc29u
UmVhc29uLmgiPgogICAgICAgPEZpbHRlcj5wcm9maWxlcjwvRmlsdGVyPgogICAgIDwvQ2xJbmNs
dWRlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE4OTU0MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNzIsNyArMjcyLDYgQEAKIAkJMEYzMDBCN0Mx
OEFCMUIxNDAwQTZENzJFIC8qIERGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMwMEI3QTE4QUIxQjE0
MDBBNkQ3MkUgLyogREZHSW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2UuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjM0QjE0OTE2RDQyMDEwMDAx
Q0RBNUEgLyogREZHVXNlS2luZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjM0QjE0NzE2RDQyMDBFMDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAg
Ki87IH07CiAJCTBGMzRCMTRBMTZENDIwMTMwMDFDREE1QSAvKiBERkdVc2VLaW5kLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM0QjE0ODE2RDQyMDBF
MDAxQ0RBNUEgLyogREZHVXNlS2luZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07Ci0JCTBGMzRCMTRDMTZENDNFMEQwMDFDREE1QSAvKiBQb2x5bW9ycGhp
Y0FjY2Vzc1N0cnVjdHVyZUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMzRCMTRCMTZENDNFMEMwMDFDREE1QSAvKiBQb2x5bW9ycGhpY0FjY2Vz
c1N0cnVjdHVyZUxpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjM4QjAxMTE3Q0YwNzgwMDBCMTQ0RDMgLyogTExJbnRFbnRyeXBvaW50LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhCMDBG
MTdDRjA3N0YwMEIxNDREMyAvKiBMTEludEVudHJ5cG9pbnQuY3BwICovOyB9OwogCQkwRjM4QjAx
MjE3Q0YwNzgzMDBCMTQ0RDMgLyogTExJbnRFbnRyeXBvaW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM4QjAxMDE3Q0YwNzdGMDBCMTQ0RDMgLyog
TExJbnRFbnRyeXBvaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEYzOEIwMTcxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uS2V5
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhC
MDEzMTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktleS5jcHAgKi87IH07CkBAIC0z
MjQsOCArMzIzLDYgQEAKIAkJMEY0ODUzMkExODdERkRFQzAwODNCNjg3IC8qIEZUTFJlY292ZXJ5
T3Bjb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjQ4NTMyNjE4N0RGREVDMDA4M0I2ODcgLyogRlRMUmVjb3ZlcnlPcGNvZGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQ5M0FGQTE2RDBDQUQz
MDA4NDUwOEIgLyogU291cmNlUHJvdmlkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0OTNBRjgxNkQwQ0FEMTAwODQ1MDhCIC8qIFNvdXJjZVBy
b3ZpZGVyLmNwcCAqLzsgfTsKIAkJMEY0Qjk0REMxN0I5RjA3NTAwREQwM0E0IC8qIFR5cGVkQXJy
YXlJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjRCOTREQjE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRBcnJheUlubGluZXMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjRDRUQ1RTE4Q0VB
N0FCMDA4MDJGRTAgLyogUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRDRUQ1QzE4Q0VBN0FCMDA4MDJGRTAg
LyogUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAgKi87IH07Ci0JCTBGNENFRDVGMThDRUE3QUIw
MDgwMkZFMCAvKiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRDRUQ1RDE4Q0VBN0FCMDA4MDJGRTAgLyogUG9s
eW1vcnBoaWNHZXRCeUlkTGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGNEYyOURGMThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVj
dXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRGMjlERDE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGlj
RXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwICovOyB9OwogCQkwRjRGMjlFMDE4QjZB
RDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEYyOURFMThC
NkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNTBB
RjNDMTkzRThCMzkwMDY3NEVFOCAvKiBERkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTBBRjNCMTkzRThCMzkw
MDY3NEVFOCAvKiBERkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzk4LDggKzM5NSw2IEBACiAJCTBGNzE0
Q0E0MTZFQTkyRjAwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzE0Q0ExMTZF
QTkyRUQwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCAqLzsgfTsK
IAkJMEY3MTRDQTUxNkVBOTJGMjAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhh
c2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzE0
Q0EyMTZFQTkyRUQwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3NDNCQUEx
NkI4ODI0OTAwOUY5Mjc3IC8qIEFSTTY0RGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MkEzQTIwMTY1MUM2NjEwMEE4MEFGRSAv
KiBBUk02NERpc2Fzc2VtYmxlci5jcHAgKi87IH07Ci0JCTBGNzU3NkQyMThFMUZFRTkwMDJFRjRD
RCAvKiBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc1NzZEMDE4RTFGRUU5MDAyRUY0Q0QgLyogQWNj
ZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuY3BwICovOyB9OwotCQkwRjc1NzZEMzE4RTFGRUU5MDAy
RUY0Q0QgLyogQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzU3NkQxMThFMUZFRTkwMDJFRjRDRCAvKiBB
Y2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGNzY2RDI4MTVBOENDMUUwMDhGMzYzRSAvKiBKSVRTdHVi
Um91dGluZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjc2NkQyNjE1QThDQzFCMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuY3BwICovOyB9Owog
CQkwRjc2NkQyQjE1QThDQzM4MDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVTZXQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NjZEMjkxNUE4Q0Mz
NDAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmNwcCAqLzsgfTsKIAkJMEY3NjZEMkMxNUE4
Q0MzQTAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2NkQyQTE1QThDQzM0MDA4RjM2M0UgLyogSklU
U3R1YlJvdXRpbmVTZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtNDczLDggKzQ2OCw2IEBACiAJCTBGOUUzMjY0MUIwNUFCMDQwMDgwMUVENSAv
KiBERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RTMyNjIxQjA1QUIwNDAwODAxRUQ1IC8qIERGR1N0
b3JlQmFycmllckluc2VydGlvblBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5RkI0RjQxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNr
TGF5b3V0UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY5RkI0RjIxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuY3Bw
ICovOyB9OwogCQkwRjlGQjRGNTE3RkNCOTE3MDBDQjY3RjggLyogREZHU3RhY2tMYXlvdXRQaGFz
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RkI0
RjMxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjlGQzhDMzE0RTFCNUZFMDBE
NTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlGQzhCRjE0RTFCNUZCMDBENTJBRTAgLyogUG9s
eW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAgKi87IH07Ci0JCTBGOUZDOEM0MTRFMUI2MDAwMEQ1MkFF
MCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlGQzhDMDE0RTFCNUZCMDBENTJBRTAgLyogUG9seW1vcnBo
aWNQdXRCeUlkTGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGOUZDOEM1MTRFMUI2MDQwMEQ1MkFFMCAvKiBQdXRLaW5kLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlGQzhDMTE0RTFCNUZCMDBE
NTJBRTAgLyogUHV0S2luZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGQTJDMTdCMTdEN0NGODQwMDlEMDE1RiAvKiBUZXN0UnVubmVyVXRpbHMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBMkMx
NzkxN0Q3Q0Y4NDAwOUQwMTVGIC8qIFRlc3RSdW5uZXJVdGlscy5jcHAgKi87IH07CiAJCTBGQTJD
MTdDMTdEN0NGODQwMDlEMDE1RiAvKiBUZXN0UnVubmVyVXRpbHMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQTJDMTdBMTdEN0NGODQwMDlEMDE1RiAv
KiBUZXN0UnVubmVyVXRpbHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwpAQCAtNzQyLDYgKzczNSw4IEBACiAJCTBGRjhCREVBMUFENENGNzEwMERGRTg4
NCAvKiBJbmZlcnJlZFZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRjhCREU4MUFENENGNzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVlLmNw
cCAqLzsgfTsKIAkJMEZGOEJERUIxQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVkVmFsdWUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjhCREU5MUFE
NENGNzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGOTIyRDQxNEY0NkI0MTAwNDFBMjRFIC8qIExM
SW50T2Zmc2V0c0V4dHJhY3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjQ2ODBBMTE0QkE3RjgyMDBCRkUyNzIgLyogTExJbnRPZmZzZXRzRXh0
cmFjdG9yLmNwcCAqLzsgfTsKKwkJMEZGOUNFNzMxQjlDRDZEMDAwNEVEQ0E2IC8qIFBvbHltb3Jw
aGljQWNjZXNzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRjlDRTcxMUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5jcHAgKi87
IH07CisJCTBGRjlDRTc0MUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGOUNFNzIxQjlD
RDZEMDAwNEVEQ0E2IC8qIFBvbHltb3JwaGljQWNjZXNzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGQTU0OTcxNkI4ODM1MDAwQjNBOTgyIC8q
IEE2NERPcGNvZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNjUyQTNBMjIxNjUxQzY5NzAwQTgwQUZFIC8qIEE2NERPcGNvZGUuY3BwICovOyB9Owog
CQkwRkZBNTQ5ODE2Qjg4MzUzMDBCM0E5ODIgLyogQTY0RE9wY29kZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjUyQTNBMjMxNjUxQzY5NzAwQTgwQUZF
IC8qIEE2NERPcGNvZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRkZCNkMzODFBRjQ4RERDMDBEQjFCRjcgLyogVHlwZW9mVHlwZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZCNkMzNjFBRjQ4
RERDMDBEQjFCRjcgLyogVHlwZW9mVHlwZS5jcHAgKi87IH07CkBAIC0yMTAzLDcgKzIwOTgsNiBA
QAogCQkwRjMwMEI3QTE4QUIxQjE0MDBBNkQ3MkUgLyogREZHSW50ZWdlckNoZWNrQ29tYmluaW5n
UGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHSW50ZWdlckNoZWNr
Q29tYmluaW5nUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFz
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM0QjE0NzE2RDQyMDBFMDAxQ0RB
NUEgLyogREZHVXNlS2luZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBERkdVc2VLaW5kLmNwcDsgcGF0aCA9IGRmZy9ERkdVc2VLaW5kLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYzNEIxNDgxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVXNlS2luZC5oOyBwYXRoID0g
ZGZnL0RGR1VzZUtpbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYzNEIxNEIx
NkQ0M0UwQzAwMUNEQTVBIC8qIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxp
c3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzOEIwMEYxN0NGMDc3RjAwQjE0
NEQzIC8qIExMSW50RW50cnlwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBMTEludEVudHJ5
cG9pbnQuY3BwOyBwYXRoID0gbGxpbnQvTExJbnRFbnRyeXBvaW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYzOEIwMTAxN0NGMDc3RjAwQjE0NEQzIC8qIExMSW50RW50cnlw
b2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBMTEludEVudHJ5cG9pbnQuaDsgcGF0aCA9IGxsaW50L0xM
SW50RW50cnlwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM4QjAxMzE3
Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25LZXkuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ29tcGlsYXRpb25LZXkuY3BwOyBwYXRoID0gZGZnL0RG
R0NvbXBpbGF0aW9uS2V5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxNTYs
OCArMjE1MCw2IEBACiAJCTBGNDg1MzI2MTg3REZERUMwMDgzQjY4NyAvKiBGVExSZWNvdmVyeU9w
Y29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExSZWNvdmVyeU9wY29k
ZS5oOyBwYXRoID0gZnRsL0ZUTFJlY292ZXJ5T3Bjb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNDkzQUY4MTZEMENBRDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTb3VyY2VQcm92aWRlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEI5NERCMTdCOUYwNzUwMEREMDNBNCAv
KiBUeXBlZEFycmF5SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBU
eXBlZEFycmF5SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjRDRUQ1
QzE4Q0VBN0FCMDA4MDJGRTAgLyogUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY0Q0VENUQxOENFQTdBQjAwODAyRkUwIC8q
IFBvbHltb3JwaGljR2V0QnlJZExpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjRGMjlERDE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3Rp
bWF0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZH
U3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR1N0
YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY0RjI5REUxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlv
bkNvdW50RXN0aW1hdGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZH
U3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY1MEFGM0IxOTNFOEIzOTAwNjc0RUU4IC8qIERGR1N0cnVjdHVyZUNsb2Ji
ZXJTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTdHJ1Y3R1cmVD
bG9iYmVyU3RhdGUuaDsgcGF0aCA9IGRmZy9ERkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyMjksOCArMjIyMSw2IEBACiAJCTBGNzAyNUE4
MTcxNEIwRjgwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmg7IHBhdGgg
PSBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGNzE0Q0ExMTZFQTkyRUQwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlv
blBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0JhY2t3
YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0
aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjcxNENBMjE2RUE5
MkVEMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmg7IHBh
dGggPSBkZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkwRjc1NzZEMDE4RTFGRUU5MDAyRUY0Q0QgLyogQWNjZXNzb3JDYWxsSklU
U3R1YlJvdXRpbmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWNj
ZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkwRjc1NzZEMTE4RTFGRUU5MDAyRUY0Q0QgLyogQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWNjZXNzb3JDYWxsSklUU3R1YlJv
dXRpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NjZEMUMxNUE1MDI4RDAw
OEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpJVFN0dWJSb3V0aW5lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzY2
RDI2MTVBOENDMUIwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRTdHViUm91dGluZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNzY2RDI5MTVBOENDMzQwMDhGMzYzRSAvKiBKSVRTdHViUm91dGlu
ZVNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRTdHViUm91
dGluZVNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMzAzLDggKzIyOTMs
NiBAQAogCQkwRjlFMzI2MjFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0
aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU3RvcmVCYXJy
aWVySW5zZXJ0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25Q
aGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlGQjRGMjE3RkNCOTE3MDBD
QjY3RjggLyogREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdTdGFja0xheW91dFBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdTdGFj
a0xheW91dFBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RkI0RjMx
N0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHU3RhY2tMYXlvdXRQaGFzZS5oOyBwYXRoID0gZGZnL0RGR1N0
YWNrTGF5b3V0UGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY5RkM4QkYx
NEUxQjVGQjAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGOUZDOEMwMTRFMUI1RkIwMEQ1MkFFMCAvKiBQ
b2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBvbHltb3JwaGljUHV0QnlJZExpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY5RkM4QzExNEUxQjVGQjAwRDUyQUUwIC8qIFB1dEtpbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUHV0S2luZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkEyQzE3OTE3RDdDRjg0MDA5RDAxNUYgLyogVGVzdFJ1bm5lclV0aWxzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRlc3RSdW5uZXJVdGlscy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTJDMTdBMTdEN0NGODQwMDlEMDE1RiAvKiBUZXN0UnVu
bmVyVXRpbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGVzdFJ1bm5lclV0
aWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTc5LDYgKzI1NjcsOCBAQAog
CQkwRkY4QkRFODFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmZlcnJlZFZhbHVlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGOEJERTkxQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVk
VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5mZXJyZWRWYWx1ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkY5MjJDRjE0RjQ2QjEzMDA0MUEyNEUg
LyogSlNDTExJbnRPZmZzZXRzRXh0cmFjdG9yICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGV4cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRl
SW5JbmRleCA9IDA7IHBhdGggPSBKU0NMTEludE9mZnNldHNFeHRyYWN0b3I7IHNvdXJjZVRyZWUg
PSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCTBGRjlDRTcxMUI5Q0Q2RDAwMDRFRENBNiAvKiBQ
b2x5bW9ycGhpY0FjY2Vzcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBQb2x5bW9ycGhpY0FjY2Vzcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RjlDRTcyMUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBQb2x5bW9ycGhpY0FjY2Vzcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkZCNkMzNjFBRjQ4RERDMDBEQjFCRjcgLyogVHlwZW9mVHlwZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlb2ZUeXBlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQjZDMzcxQUY0OEREQzAwREIxQkY3IC8q
IFR5cGVvZlR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZW9mVHlw
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkZDOTlEMDE4NEVDOEFEMDA5QzEw
QUIgLyogQ29uc3RhbnRNb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENv
bnN0YW50TW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDA5NiwxMCArNDA4
Niw2IEBACiAJCTE0MjlEOTJDMEVEMjJENzAwMEI4OTYxOSAvKiBqaXQgKi8gPSB7CiAJCQlpc2Eg
PSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTBGRjA1NEY3MUFDMzVCNDQwMEU1QkU1
NyAvKiBFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouY3BwICovLAotCQkJCTBGRjA1NEY4MUFDMzVC
NDQwMEU1QkU1NyAvKiBFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouaCAqLywKLQkJCQkwRjc1NzZE
MDE4RTFGRUU5MDAyRUY0Q0QgLyogQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuY3BwICovLAot
CQkJCTBGNzU3NkQxMThFMUZFRTkwMDJFRjRDRCAvKiBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGlu
ZS5oICovLAogCQkJCTBGNkIxQ0M3MTg2NDFERjgwMDg0NUQ5NyAvKiBBcml0eUNoZWNrRmFpbFJl
dHVyblRodW5rcy5jcHAgKi8sCiAJCQkJMEY2QjFDQzgxODY0MURGODAwODQ1RDk3IC8qIEFyaXR5
Q2hlY2tGYWlsUmV0dXJuVGh1bmtzLmggKi8sCiAJCQkJMEYyNEU1M0IxN0VBOUY1OTAwQUJCMjE3
IC8qIEFzc2VtYmx5SGVscGVycy5jcHAgKi8sCkBAIC00MTA4LDYgKzQwOTQsOCBAQAogCQkJCTBG
NjRCMjcwMUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guaCAqLywKIAkJCQkwRjI0RTUz
RDE3RUE5RjU5MDBBQkIyMTcgLyogQ0NhbGxIZWxwZXJzLmggKi8sCiAJCQkJMEZEODJFMzcxNDFB
QjE0MjAwMTc5Qzk0IC8qIENvbXBhY3RKSVRDb2RlTWFwLmggKi8sCisJCQkJMEZGMDU0RjcxQUMz
NUI0NDAwRTVCRTU3IC8qIEV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5jcHAgKi8sCisJCQkJMEZG
MDU0RjgxQUMzNUI0NDAwRTVCRTU3IC8qIEV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5oICovLAog
CQkJCUE3QjQ4REI2MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCAq
LywKIAkJCQlBN0I0OERCNTBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5o
ICovLAogCQkJCTg2REI2NDYzMEY5NUM2RkMwMEQ3RDkyMSAvKiBFeGVjdXRhYmxlQWxsb2NhdG9y
Rml4ZWRWTVBvb2wuY3BwICovLApAQCAtNDE1NCw4ICs0MTQyLDYgQEAKIAkJCQkwRkM3MTJFMTE3
Q0Q4NzhGMDA4Q0M5M0MgLyogSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAq
LywKIAkJCQlBNzZGNTRBMjEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVCYXJyaWVyLmggKi8s
CiAJCQkJQTc2QzUxNzQxMTgyNzQ4RDAwNzE1QjA1IC8qIEpTSW50ZXJmYWNlSklULmggKi8sCi0J
CQkJMEZFRTk4NDIxQTg5MjI3NTAwNzU0RTkzIC8qIFNldHVwVmFyYXJnc0ZyYW1lLmNwcCAqLywK
LQkJCQkwRkVFOTg0MDFBODg2NUI2MDA3NTRFOTMgLyogU2V0dXBWYXJhcmdzRnJhbWUuaCAqLywK
IAkJCQkwRkU4MzQxNTFBNkVGOTdCMDBEMDQ4NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRp
bmUuY3BwICovLAogCQkJCTBGRTgzNDE2MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9ycGhpY0Nh
bGxTdHViUm91dGluZS5oICovLAogCQkJCTBGQTdBOEU5MThCNDEzQzgwMDUyMzcxRCAvKiBSZWcu
Y3BwICovLApAQCAtNDE2OSw2ICs0MTU1LDggQEAKIAkJCQkwRjI0RTU0QTE3RUUyNzQ5MDBBQkIy
MTcgLyogUmVwYXRjaC5oICovLAogCQkJCTBGQTdBOEVEMThDRTRGRDgwMDUyMzcxRCAvKiBTY3Jh
dGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwICovLAogCQkJCTBGMjRFNTRCMTdFRTI3NDkwMEFCQjIx
NyAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCAqLywKKwkJCQkwRkVFOTg0MjFBODkyMjc1
MDA3NTRFOTMgLyogU2V0dXBWYXJhcmdzRnJhbWUuY3BwICovLAorCQkJCTBGRUU5ODQwMUE4ODY1
QjYwMDc1NEU5MyAvKiBTZXR1cFZhcmFyZ3NGcmFtZS5oICovLAogCQkJCUE3MDlGMkVGMTdBMEFD
MDQwMDUxMkU5OCAvKiBTbG93UGF0aENhbGwuaCAqLywKIAkJCQlBNzM4NjU1MTExODY5N0I0MDA1
NDAyNzkgLyogU3BlY2lhbGl6ZWRUaHVua0pJVC5oICovLAogCQkJCUE3RkY2NDdBMThDNTJFODUw
MEI1NTMwNyAvKiBTcGlsbFJlZ2lzdGVyc01vZGUuaCAqLywKQEAgLTU2MDIsMTEgKzU1OTAsOCBA
QAogCQkJCTk2OUEwNzk1MEVEMUQzQUUwMEYxRjY4MSAvKiBPcGNvZGUuaCAqLywKIAkJCQkwRjJC
REMyQjE1MUZERThCMDBDRDg5MTAgLyogT3BlcmFuZHMuaCAqLywKIAkJCQlBNzA0NDdFOTE3QTBC
RDQ2MDBGNTg5OEUgLyogT3BlcmFuZHNJbmxpbmVzLmggKi8sCi0JCQkJMEYzNEIxNEIxNkQ0M0Uw
QzAwMUNEQTVBIC8qIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdC5oICovLAotCQkJCTBG
NENFRDVDMThDRUE3QUIwMDgwMkZFMCAvKiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmNwcCAqLywK
LQkJCQkwRjRDRUQ1RDE4Q0VBN0FCMDA4MDJGRTAgLyogUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5o
ICovLAotCQkJCTBGOUZDOEJGMTRFMUI1RkIwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRM
aXN0LmNwcCAqLywKLQkJCQkwRjlGQzhDMDE0RTFCNUZCMDBENTJBRTAgLyogUG9seW1vcnBoaWNQ
dXRCeUlkTGlzdC5oICovLAorCQkJCTBGRjlDRTcxMUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9y
cGhpY0FjY2Vzcy5jcHAgKi8sCisJCQkJMEZGOUNFNzIxQjlDRDZEMDAwNEVEQ0E2IC8qIFBvbHlt
b3JwaGljQWNjZXNzLmggKi8sCiAJCQkJMEY5ODIwNUQxNkJGRTM3RjAwMjQwRDAyIC8qIFByZWNp
c2VKdW1wVGFyZ2V0cy5jcHAgKi8sCiAJCQkJMEY5ODIwNUUxNkJGRTM3RjAwMjQwRDAyIC8qIFBy
ZWNpc2VKdW1wVGFyZ2V0cy5oICovLAogCQkJCTBGRDNFNDA3MUI2MThCNjYwMEM4MEUxRSAvKiBQ
cm9wZXJ0eUNvbmRpdGlvbi5jcHAgKi8sCkBAIC01NjM3LDggKzU2MjIsOCBAQAogCQkJCTBGMkQ0
REU3MTk4MzJEQUMwMDdENEIxOSAvKiBUeXBlTG9jYXRpb24uaCAqLywKIAkJCQlBNzlFNzgxRTE1
RUVDQkE4MDA0N0M4NTUgLyogVW5saW5rZWRDb2RlQmxvY2suY3BwICovLAogCQkJCUE3OUU3ODFG
MTVFRUNCQTgwMDQ3Qzg1NSAvKiBVbmxpbmtlZENvZGVCbG9jay5oICovLAotCQkJCTE0MTQyRTUw
MUI3OTZFQ0UwMEY0QkY0QiAvKiBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oICovLAogCQkJ
CTE0MTQyRTU0MUI3OTczQzAwMEY0QkY0QiAvKiBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5j
cHAgKi8sCisJCQkJMTQxNDJFNTAxQjc5NkVDRTAwRjRCRjRCIC8qIFVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlLmggKi8sCiAJCQkJQjU5Rjg5MzgxODkxQURCNTAwRDVDQ0RDIC8qIFVubGlua2Vk
SW5zdHJ1Y3Rpb25TdHJlYW0uY3BwICovLAogCQkJCUI1OUY4OTM3MTg5MUFEMzMwMEQ1Q0NEQyAv
KiBVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtLmggKi8sCiAJCQkJMEY5NjNCMzYxM0ZDNkZERTAw
MDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5oICovLApAQCAtNjIwMyw3ICs2MTg4LDYgQEAKIAkJCQkw
RkMwOTc3MTE0NjkzQUY1MDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjcwMjVBQTE3MTRCMEZDMDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVy
Q29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVGQzlBQjE2ODFBM0I2MDA1NjdGNTMgLyog
REZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEY0Q0VENUYx
OENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJZExpc3QuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMjM1QkVFMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRpb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkZDOTVDMTRFRjkwQUYwMEM3MjUzMiAvKiBERkdQaGFz
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVFQTcwRUUxOUY1QjVDNDAwOThGNUVDIC8qIEpTQ29u
dGV4dFJlZkluc3BlY3RvclN1cHBvcnQuaCBpbiBIZWFkZXJzICovLApAQCAtNjI1Miw2ICs2MjM2
LDcgQEAKIAkJCQk5OUU0NUEyNDE4QTFCMjU5MDAyNkQ4OEYgLyogRW1wdHlJbnB1dEN1cnNvci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMTQxNDJFNTMxQjc5NkVERDAwRjRCRjRCIC8qIEV4ZWN1dGFi
bGVJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OUU0NUEyNjE4QTFCMjU5MDAyNkQ4OEYgLyog
RW5jb2RlZFZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkY5Q0U3NDFCOUNENkQwMDA0RURD
QTYgLyogUG9seW1vcnBoaWNBY2Nlc3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTg3NEVFMTk0
RkVCMTIwMEFBQjJDMSAvKiBERkdNYXlFeGl0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzMwNDYw
NzBFMUY0OTdGMDAzMjMyQ0YgLyogRXJyb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDJFOTBE
MEUxODM5REIwMDBGOTI5NyAvKiBFcnJvckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAg
LTY0ODUsNyArNjQ3MCw2IEBACiAJCQkJQkMxOEM0MUUwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQ29u
dGV4dFJlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ4Q0QxRDgxMDhDRjkwMjAwODE2M0M2IC8q
IEpTQ29udGV4dFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MjAyOEI4MTc5NzYw
MUUwMDk4MDI4QyAvKiBKU0NUZXN0UnVubmVyVXRpbHMuaCBpbiBIZWFkZXJzICovLAotCQkJCTBG
NzU3NkQzMThFMUZFRTkwMDJFRjRDRCAvKiBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RUMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkVFMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFW
aWV3UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5Nzg4MDE0MTE0NzFBRDkyMDA0MUIw
MTYgLyogSlNEYXRlTWF0aC5oIGluIEhlYWRlcnMgKi8sCkBAIC02Njg1LDggKzY2NjksNiBAQAog
CQkJCTBGQ0NBRTQ1MTZEMENGNzQwMEQwQzY1QiAvKiBQYXJzZXJFcnJvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTc3RjE4MjUxNjQxOTJDNzAwNjQwQTQ3IC8qIFBhcnNlck1vZGVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk2NTMwM0Q2NDE0NDdCOUUxMDBEM0Y5MDQgLyogUGFyc2VyVG9rZW5zLmgg
aW4gSGVhZGVycyAqLywKLQkJCQkwRjM0QjE0QzE2RDQzRTBEMDAxQ0RBNUEgLyogUG9seW1vcnBo
aWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0LmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjlGQzhDNDE0RTFC
NjAwMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY4RjE0MzQxQURGMDkwMTAwRUQ3OTJDIC8qIERGR0Vwb2NoLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjk4MjA2MTE2QkZFMzgzMDAyNDBEMDIgLyogUHJlY2lzZUp1bXBUYXJnZXRzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjJERDgxNTFBQjNEOEJFMDBCQkI4RTggLyogREZHRm9yQWxsS2ls
bHMuaCBpbiBIZWFkZXJzICovLApAQCAtNzg0Nyw3ICs3ODI5LDYgQEAKIAkJCQkwRjBCODM5QzE0
QkNGNDYzMDA4ODVCNEYgLyogTExJbnRUaHVua3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZD
RUZBQ0QxODA1RTc1NTAwNDcyQ0U0IC8qIExMVk1BUEkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTdFNUFCMzcxNzk5RTRCMjAwRDI4MzNEIC8qIExMVk1EaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJMEY0Q0VENUUxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJ
ZExpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlEREUxMDdFQzdFNzAwNjUwNDQ2IC8q
IExvb2t1cC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQ2ODBDQzE0QkJCMTdBMDBCRkUyNzIg
LyogTG93TGV2ZWxJbnRlcnByZXRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEI3MjNCMjEy
RDdEQTQ2MDAzQkQ1RUQgLyogTWFjaGluZVN0YWNrTWFya2VyLmNwcCBpbiBTb3VyY2VzICovLApA
QCAtNzg4OSw3ICs3ODcwLDYgQEAKIAkJCQkwRkUyMjhFRTE0MzZBQjJDMDAxOTZDNDggLyogT3B0
aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDhGMjFCQzEwN0VDNTREMDA0MkVDMkMgLyog
UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMDUyQzM0MEZCNzkyMTkwMDQ4RkRDMyAv
KiBQYXJzZXJBcmVuYS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwRjlGQzhDMzE0RTFCNUZFMDBE
NTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
Rjk4MjA2MDE2QkZFMzgxMDAyNDBEMDIgLyogUHJlY2lzZUp1bXBUYXJnZXRzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTk1NzQyRjY1MEREMTFGNUEwMDA5MTdGQiAvKiBQcm9maWxlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGMkI5Q0Y4MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExPcGVyYXRpb25z
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzkwNiw2ICs3ODg2LDcgQEAKIAkJCQkwRjE5MENBQzE4
OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRkY3MjlCMzE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJPcmlnaW4uY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QjQxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyT3Jp
Z2luU3RhY2suY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZGOUNFNzMxQjlDRDZEMDAwNEVEQ0E2
IC8qIFBvbHltb3JwaGljQWNjZXNzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjEwNThCMTY3
NTQ4MzEwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4aXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZCMTA1OEQxNjc1NDgzNzAwRjhBQjZFIC8qIFByb2ZpbGVyT1NSRXhpdFNpdGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEYxMzkxMkIxNjc3MUMzQTAwOUNDQjA3IC8qIFByb2ZpbGVyUHJvZmls
ZWRCeXRlY29kZXMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MDExLDcgKzc5OTIsNiBAQAogCQkJ
CUE3NkYyNzk0MTVGMTNDOTYwMDUxN0Q2NyAvKiBVbmxpbmtlZENvZGVCbG9jay5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCNTlGODkzOTE4OTFGMjlGMDBENUNDREMgLyogVW5saW5rZWRJbnN0cnVj
dGlvblN0cmVhbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzlEQTRBNjFCN0U4QjdDMDA4NEYz
M0EgLyogSlNNb2R1bGVSZWNvcmQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEY3NTc2RDIxOEUx
RkVFOTAwMkVGNENEIC8qIEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMjRFNTU4MTdGNzRFREIwMEFCQjIxNyAvKiBWYWx1ZVJlY292ZXJ5LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUUxOEUzQTU5MERGOTI3OEMwMEQ5MEIzNCAvKiBWTS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlGRTU5MzJBNzE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3Bl
LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCShyZXZpc2lvbiAxODk1NDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJl
Zi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjcsNiArMzI3LDEwIEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgZHVtcFdpdGhOYW1lKGNvbnN0IGNoYXIqIG5hbWUsIFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
CiAgICAgeworICAgICAgICBpZiAoIW1fdmFsdWUpIHsKKyAgICAgICAgICAgIG91dC5wcmludChu
YW1lLCAiKG51bGwpIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAg
aWYgKGV4ZWN1dGFibGVBZGRyZXNzKCkgPT0gZGF0YUxvY2F0aW9uKCkpIHsKICAgICAgICAgICAg
IG91dC5wcmludChuYW1lLCAiKCIsIFJhd1BvaW50ZXIoZXhlY3V0YWJsZUFkZHJlc3MoKSksICIp
Iik7CiAgICAgICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTg5NTQzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDgg
KzUzLDcgQEAKICNpbmNsdWRlICJMTEludEVudHJ5cG9pbnQuaCIKICNpbmNsdWRlICJMb3dMZXZl
bEludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIlBvbHlt
b3JwaGljR2V0QnlJZExpc3QuaCIKLSNpbmNsdWRlICJQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Lmgi
CisjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKICNpbmNsdWRlICJQcm9maWxlckRhdGFi
YXNlLmgiCiAjaW5jbHVkZSAiUmVkdWNlV2hpdGVzcGFjZS5oIgogI2luY2x1ZGUgIlJlcGF0Y2gu
aCIKQEAgLTM0MywyMCArMzQyLDE5IEBAIHZvaWQgQ29kZUJsb2NrOjpwcmludEdldEJ5SWRDYWNo
ZVN0YXR1cygKICAgICAgICAgaWYgKHN0dWJJbmZvLnNlZW4pIHsKICAgICAgICAgICAgIG91dC5w
cmludGYoIiBqaXQoIik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIFN0cnVjdHVyZSogYmFz
ZVN0cnVjdHVyZSA9IDA7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVy
ZSA9IDA7Ci0gICAgICAgICAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0ID0gMDsKKyAg
ICAgICAgICAgIFN0cnVjdHVyZSogYmFzZVN0cnVjdHVyZSA9IG51bGxwdHI7CisgICAgICAgICAg
ICBQb2x5bW9ycGhpY0FjY2Vzcyogc3R1YiA9IG51bGxwdHI7CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIHN3aXRjaCAoc3R1YkluZm8uYWNjZXNzVHlwZSkgewotICAgICAgICAgICAgY2FzZSBh
Y2Nlc3NfZ2V0X2J5X2lkX3NlbGY6CisgICAgICAgICAgICBzd2l0Y2ggKHN0dWJJbmZvLmNhY2hl
VHlwZSkgeworICAgICAgICAgICAgY2FzZSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxmOgogICAgICAg
ICAgICAgICAgIG91dC5wcmludGYoInNlbGYiKTsKLSAgICAgICAgICAgICAgICBiYXNlU3RydWN0
dXJlID0gc3R1YkluZm8udS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpOwor
ICAgICAgICAgICAgICAgIGJhc2VTdHJ1Y3R1cmUgPSBzdHViSW5mby51LmJ5SWRTZWxmLmJhc2VP
YmplY3RTdHJ1Y3R1cmUuZ2V0KCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfbGlzdDoKLSAgICAgICAgICAgICAgICBvdXQucHJpbnRm
KCJsaXN0Iik7Ci0gICAgICAgICAgICAgICAgbGlzdCA9IHN0dWJJbmZvLnUuZ2V0QnlJZExpc3Qu
bGlzdDsKKyAgICAgICAgICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOgorICAgICAgICAgICAgICAg
IG91dC5wcmludGYoInN0dWIiKTsKKyAgICAgICAgICAgICAgICBzdHViID0gc3R1YkluZm8udS5z
dHViOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBhY2Nlc3NfdW5z
ZXQ6CisgICAgICAgICAgICBjYXNlIENhY2hlVHlwZTo6VW5zZXQ6CiAgICAgICAgICAgICAgICAg
b3V0LnByaW50ZigidW5zZXQiKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IGRlZmF1bHQ6CkBAIC0zNjgsMjcgKzM2NiwxMCBAQCB2b2lkIENvZGVCbG9jazo6cHJpbnRHZXRC
eUlkQ2FjaGVTdGF0dXMoCiAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiLCAiKTsKICAgICAg
ICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgInN0cnVjdCIsIGJhc2VTdHJ1Y3R1cmUsIGlk
ZW50KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHByb3Rv
dHlwZVN0cnVjdHVyZSkgewotICAgICAgICAgICAgICAgIG91dC5wcmludGYoIiwgIik7Ci0gICAg
ICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJwcm90b3R5cGVTdHJ1Y3QiLCBiYXNlU3Ry
dWN0dXJlLCBpZGVudCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IGlmIChsaXN0KSB7Ci0gICAgICAgICAgICAgICAgb3V0LnByaW50ZigiLCBsaXN0ID0gJXA6IFsi
LCBsaXN0KTsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBvdXQucHJpbnRmKCIsICIpOwotICAgICAgICAgICAgICAgICAgICBvdXQucHJp
bnRmKCIoIik7Ci0gICAgICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAiYmFzZSIs
IGxpc3QtPmF0KGkpLnN0cnVjdHVyZSgpLCBpZGVudCk7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICghbGlzdC0+YXQoaSkuY29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBvdXQucHJpbnRmKCIsICIpOwotICAgICAgICAgICAgICAgICAgICAgICAgb3V0
LnByaW50KGxpc3QtPmF0KGkpLmNvbmRpdGlvblNldCgpKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIpIik7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIG91dC5wcmludGYoIl0iKTsKLSAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKHN0dWIpCisgICAgICAgICAgICAgICAgb3V0LnByaW50KCIsICIsICpzdHVi
KTsKKwogICAgICAgICAgICAgb3V0LnByaW50ZigiKSIpOwogICAgICAgICB9CiAgICAgfQpAQCAt
NDQ0LDUzICs0MjUsMTYgQEAgdm9pZCBDb2RlQmxvY2s6OnByaW50UHV0QnlJZENhY2hlU3RhdHVz
KAogICAgICAgICBpZiAoc3R1YkluZm8uc2VlbikgewogICAgICAgICAgICAgb3V0LnByaW50Zigi
IGppdCgiKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgc3dpdGNoIChzdHViSW5mby5hY2Nl
c3NUeXBlKSB7Ci0gICAgICAgICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFjZToKKyAg
ICAgICAgICAgIHN3aXRjaCAoc3R1YkluZm8uY2FjaGVUeXBlKSB7CisgICAgICAgICAgICBjYXNl
IENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2U6CiAgICAgICAgICAgICAgICAgb3V0LnByaW50KCJy
ZXBsYWNlLCAiKTsKLSAgICAgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgInN0cnVjdCIs
IHN0dWJJbmZvLnUucHV0QnlJZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgaWRl
bnQpOworICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAic3RydWN0Iiwgc3R1Yklu
Zm8udS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBpZGVudCk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNp
dGlvbl9ub3JtYWw6Ci0gICAgICAgICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlv
bl9kaXJlY3Q6Ci0gICAgICAgICAgICAgICAgb3V0LnByaW50KCJ0cmFuc2l0aW9uLCAiKTsKLSAg
ICAgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgInByZXYiLCBzdHViSW5mby51LnB1dEJ5
SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgpLCBpZGVudCk7Ci0gICAgICAgICAg
ICAgICAgb3V0LnByaW50KCIsICIpOwotICAgICAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0
LCAibmV4dCIsIHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLmdldCgpLCBp
ZGVudCk7Ci0gICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24u
cmF3Q29uZGl0aW9uU2V0KQotICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIiwgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6OmZyb21SYXdQb2ludGVyKHN0dWJJbmZvLnUucHV0QnlJ
ZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfbGlzdDogewotICAgICAgICAgICAgICAg
IG91dC5wcmludGYoImxpc3QgPSBbIik7Ci0gICAgICAgICAgICAgICAgUG9seW1vcnBoaWNQdXRC
eUlkTGlzdCogbGlzdCA9IHN0dWJJbmZvLnUucHV0QnlJZExpc3QubGlzdDsKLSAgICAgICAgICAg
ICAgICBDb21tYVByaW50ZXIgY29tbWE7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG91dC5w
cmludChjb21tYSwgIigiKTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgUHV0QnlJZEFjY2Vz
cyYgYWNjZXNzID0gbGlzdC0+YXQoaSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICBpZiAoYWNjZXNzLmlzUmVwbGFjZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBvdXQucHJpbnQoInJlcGxhY2UsICIpOwotICAgICAgICAgICAgICAgICAgICAgICAgZHVt
cFN0cnVjdHVyZShvdXQsICJzdHJ1Y3QiLCBhY2Nlc3Mub2xkU3RydWN0dXJlKCksIGlkZW50KTsK
LSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhY2Nlc3MuaXNTZXR0ZXIoKSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCJzZXR0ZXIsICIpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJzdHJ1Y3QiLCBhY2Nlc3Mub2xkU3RydWN0
dXJlKCksIGlkZW50KTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhY2Nlc3MuaXND
dXN0b20oKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCJjdXN0b20sICIp
OwotICAgICAgICAgICAgICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJzdHJ1Y3QiLCBh
Y2Nlc3Mub2xkU3RydWN0dXJlKCksIGlkZW50KTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IGlmIChhY2Nlc3MuaXNUcmFuc2l0aW9uKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG91
dC5wcmludCgidHJhbnNpdGlvbiwgIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkdW1wU3Ry
dWN0dXJlKG91dCwgInByZXYiLCBhY2Nlc3Mub2xkU3RydWN0dXJlKCksIGlkZW50KTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCAiKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAibmV4dCIsIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgaWRl
bnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhY2Nlc3MuY29uZGl0aW9uU2V0KCku
aXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCAiLCBh
Y2Nlc3MuY29uZGl0aW9uU2V0KCkpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgidW5rbm93biIpOwotICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCIpIik7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIG91dC5wcmludCgiXSIpOworICAgICAgICAgICAgY2FzZSBD
YWNoZVR5cGU6OlN0dWI6IHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoInN0dWIsICIsICpz
dHViSW5mby51LnN0dWIpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgY2FzZSBhY2Nlc3NfdW5zZXQ6CisgICAgICAgICAgICBjYXNlIENhY2hlVHlw
ZTo6VW5zZXQ6CiAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigidW5zZXQiKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0yNDYxLDM5ICsyNDA1LDIy
IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG8KICAgICBpZiAoSklU
Q29kZTo6aXNKSVQoaml0VHlwZSgpKSkgewogICAgICAgICBmb3IgKEJhZzxTdHJ1Y3R1cmVTdHVi
SW5mbz46Oml0ZXJhdG9yIGl0ZXIgPSBtX3N0dWJJbmZvcy5iZWdpbigpOyAhIWl0ZXI7ICsraXRl
cikgewogICAgICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gKippdGVyOwot
ICAgICAgICAgICAgc3dpdGNoIChzdHViSW5mby5hY2Nlc3NUeXBlKSB7Ci0gICAgICAgICAgICBj
YXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWw6Ci0gICAgICAgICAgICBjYXNl
IGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6IHsKLSAgICAgICAgICAgICAgICBK
U0NlbGwqIG9yaWdpbiA9IHN0dWJJbmZvLmNvZGVPcmlnaW4uY29kZU9yaWdpbk93bmVyKCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKCghb3JpZ2luIHx8IEhlYXA6OmlzTWFya2VkKG9yaWdpbikpCi0g
ICAgICAgICAgICAgICAgICAgICYmIEhlYXA6OmlzTWFya2VkKHN0dWJJbmZvLnUucHV0QnlJZFRy
YW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUuZ2V0KCkpKQotICAgICAgICAgICAgICAgICAgICB2
aXNpdG9yLmFwcGVuZCgmc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUpOwot
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYWxsQXJlTWFya2VkU29G
YXIgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChzdHVi
SW5mby5jYWNoZVR5cGUgIT0gQ2FjaGVUeXBlOjpTdHViKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3MqIGxpc3QgPSBzdHViSW5mby51LnN0
dWI7CisgICAgICAgICAgICBKU0NlbGwqIG9yaWdpbiA9IHN0dWJJbmZvLmNvZGVPcmlnaW4uY29k
ZU9yaWdpbk93bmVyKCk7CisgICAgICAgICAgICBpZiAob3JpZ2luICYmICFIZWFwOjppc01hcmtl
ZChvcmlnaW4pKSB7CisgICAgICAgICAgICAgICAgYWxsQXJlTWFya2VkU29GYXIgPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
Y2FzZSBhY2Nlc3NfcHV0X2J5X2lkX2xpc3Q6IHsKLSAgICAgICAgICAgICAgICBQb2x5bW9ycGhp
Y1B1dEJ5SWRMaXN0KiBsaXN0ID0gc3R1YkluZm8udS5wdXRCeUlkTGlzdC5saXN0OwotICAgICAg
ICAgICAgICAgIEpTQ2VsbCogb3JpZ2luID0gc3R1YkluZm8uY29kZU9yaWdpbi5jb2RlT3JpZ2lu
T3duZXIoKTsKLSAgICAgICAgICAgICAgICBpZiAob3JpZ2luICYmICFIZWFwOjppc01hcmtlZChv
cmlnaW4pKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBsaXN0LT5zaXplKCk7IGot
LTspIHsKKyAgICAgICAgICAgICAgICBjb25zdCBBY2Nlc3NDYXNlJiBhY2Nlc3MgPSBsaXN0LT5h
dChqKTsKKyAgICAgICAgICAgICAgICBpZiAoYWNjZXNzLnR5cGUoKSAhPSBBY2Nlc3NDYXNlOjpU
cmFuc2l0aW9uKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICBpZiAoSGVhcDo6aXNNYXJrZWQoYWNjZXNzLnN0cnVjdHVyZSgpKSkKKyAgICAgICAgICAgICAg
ICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRlcihhY2Nlc3MubmV3
U3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAg
YWxsQXJlTWFya2VkU29GYXIgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGxpc3Qt
PnNpemUoKTsgai0tOykgewotICAgICAgICAgICAgICAgICAgICBQdXRCeUlkQWNjZXNzJiBhY2Nl
c3MgPSBsaXN0LT5tX2xpc3Rbal07Ci0gICAgICAgICAgICAgICAgICAgIGlmICghYWNjZXNzLmlz
VHJhbnNpdGlvbigpKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChIZWFwOjppc01hcmtlZChhY2Nlc3Mub2xkU3RydWN0dXJlKCkpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJmFjY2Vzcy5tX25ld1N0cnVj
dHVyZSk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAg
IGFsbEFyZU1hcmtlZFNvRmFyID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfQpAQCAtMjc4NSwxMCArMjcxMiwxMCBAQCB2b2lkIENvZGVCbG9jazo6Z2V0QnlWYWxJ
bmZvTWFwKEJ5VmFsSW5mCiB9CiAKICNpZiBFTkFCTEUoSklUKQotU3RydWN0dXJlU3R1YkluZm8q
IENvZGVCbG9jazo6YWRkU3R1YkluZm8oKQorU3RydWN0dXJlU3R1YkluZm8qIENvZGVCbG9jazo6
YWRkU3R1YkluZm8oQWNjZXNzVHlwZSBhY2Nlc3NUeXBlKQogewogICAgIENvbmN1cnJlbnRKSVRM
b2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgcmV0dXJuIG1fc3R1YkluZm9zLmFkZCgpOworICAg
IHJldHVybiBtX3N0dWJJbmZvcy5hZGQoYWNjZXNzVHlwZSk7CiB9CiAKIFN0cnVjdHVyZVN0dWJJ
bmZvKiBDb2RlQmxvY2s6OmZpbmRTdHViSW5mbyhDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAx
ODk1NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIwOCw3ICsyMDgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBnZXRCeVZh
bEluZm9NYXAoQnlWYWxJbmZvTWFwJiByZXN1bHQpOwogICAgIAogI2lmIEVOQUJMRShKSVQpCi0g
ICAgU3RydWN0dXJlU3R1YkluZm8qIGFkZFN0dWJJbmZvKCk7CisgICAgU3RydWN0dXJlU3R1Yklu
Zm8qIGFkZFN0dWJJbmZvKEFjY2Vzc1R5cGUpOwogICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz46
Oml0ZXJhdG9yIHN0dWJJbmZvQmVnaW4oKSB7IHJldHVybiBtX3N0dWJJbmZvcy5iZWdpbigpOyB9
CiAgICAgQmFnPFN0cnVjdHVyZVN0dWJJbmZvPjo6aXRlcmF0b3Igc3R1YkluZm9FbmQoKSB7IHJl
dHVybiBtX3N0dWJJbmZvcy5lbmQoKTsgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMTg5NTQzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiwxNCArMjYsMTMgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJHZXRCeUlkU3RhdHVzLmgiCiAKLSNpbmNsdWRlICJBY2Nlc3NvckNhbGxKSVRTdHViUm91
dGluZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvbXBsZXhHZXRTdGF0
dXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNTY29wZS5oIgogI2lu
Y2x1ZGUgIkxMSW50RGF0YS5oIgogI2luY2x1ZGUgIkxvd0xldmVsSW50ZXJwcmV0ZXIuaCIKLSNp
bmNsdWRlICJQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNB
Y2Nlc3MuaCIKICNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBA
IC0xMzksMTIgKzEzOCwxMiBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVG
b3JTCiAgICAgaWYgKCFzdHViSW5mby0+c2VlbikKICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0
dXMoTm9JbmZvcm1hdGlvbik7CiAgICAgCi0gICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogbGlz
dCA9IDA7CisgICAgUG9seW1vcnBoaWNBY2Nlc3MqIGxpc3QgPSAwOwogICAgIFN0YXRlIHNsb3dQ
YXRoU3RhdGUgPSBUYWtlc1Nsb3dQYXRoOwotICAgIGlmIChzdHViSW5mby0+YWNjZXNzVHlwZSA9
PSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3QpIHsKLSAgICAgICAgbGlzdCA9IHN0dWJJbmZvLT51Lmdl
dEJ5SWRMaXN0Lmxpc3Q7CisgICAgaWYgKHN0dWJJbmZvLT5jYWNoZVR5cGUgPT0gQ2FjaGVUeXBl
OjpTdHViKSB7CisgICAgICAgIGxpc3QgPSBzdHViSW5mby0+dS5zdHViOwogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGNv
bnN0IEdldEJ5SWRBY2Nlc3MmIGFjY2VzcyA9IGxpc3QtPmF0KGkpOworICAgICAgICAgICAgY29u
c3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0gbGlzdC0+YXQoaSk7CiAgICAgICAgICAgICBpZiAoYWNj
ZXNzLmRvZXNDYWxscygpKQogICAgICAgICAgICAgICAgIHNsb3dQYXRoU3RhdGUgPSBNYWtlc0Nh
bGxzOwogICAgICAgICB9CkBAIC0xNTcsMTIgKzE1NiwxMiBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5
SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgR2V0QnlJZFN0YXR1cyByZXN1bHQ7CiAgICAgcmVz
dWx0Lm1fc3RhdGUgPSBTaW1wbGU7CiAgICAgcmVzdWx0Lm1fd2FzU2VlbkluSklUID0gdHJ1ZTsg
Ly8gVGhpcyBpcyBpbnRlcmVzdGluZyBmb3IgYnl0ZWNvZGUgZHVtcGluZyBvbmx5LgotICAgIHN3
aXRjaCAoc3R1YkluZm8tPmFjY2Vzc1R5cGUpIHsKLSAgICBjYXNlIGFjY2Vzc191bnNldDoKKyAg
ICBzd2l0Y2ggKHN0dWJJbmZvLT5jYWNoZVR5cGUpIHsKKyAgICBjYXNlIENhY2hlVHlwZTo6VW5z
ZXQ6CiAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwogICAgICAg
ICAKLSAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZjogewotICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IHN0dWJJbmZvLT51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUu
Z2V0KCk7CisgICAgY2FzZSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxmOiB7CisgICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gc3R1YkluZm8tPnUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVy
ZS5nZXQoKTsKICAgICAgICAgaWYgKHN0cnVjdHVyZS0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1w
dXJlUHJvcGVydHkoKSkKICAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKHNsb3dQYXRo
U3RhdGUsIHRydWUpOwogICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzSWdub3JlZDsKQEAgLTE3
NywxMiArMTc2LDI1IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMK
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgICAgIAotICAgIGNhc2UgYWNjZXNz
X2dldF9ieV9pZF9saXN0OiB7CisgICAgY2FzZSBDYWNoZVR5cGU6OlN0dWI6IHsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBsaXN0SW5kZXggPSAwOyBsaXN0SW5kZXggPCBsaXN0LT5zaXplKCk7ICsr
bGlzdEluZGV4KSB7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGxpc3QtPmF0
KGxpc3RJbmRleCkuc3RydWN0dXJlKCk7CisgICAgICAgICAgICBjb25zdCBBY2Nlc3NDYXNlJiBh
Y2Nlc3MgPSBsaXN0LT5hdChsaXN0SW5kZXgpOworICAgICAgICAgICAgaWYgKGFjY2Vzcy52aWFQ
cm94eSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKHNsb3dQYXRoU3Rh
dGUsIHRydWUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IGFjY2Vzcy5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgIGlmICghc3RydWN0dXJlKSB7Cisg
ICAgICAgICAgICAgICAgLy8gVGhlIG51bGwgc3RydWN0dXJlIGNhc2VzIGFyaXNlIGR1ZSB0byBh
cnJheS5sZW5ndGggYW5kIHN0cmluZy5sZW5ndGguIFdlIGhhdmUgbm8gd2F5CisgICAgICAgICAg
ICAgICAgLy8gb2YgY3JlYXRpbmcgYSBHZXRCeUlkVmFyaWFudCBmb3IgdGhvc2UsIGFuZCB3ZSBk
b24ndCByZWFsbHkgaGF2ZSB0byBzaW5jZSB0aGUgREZHCisgICAgICAgICAgICAgICAgLy8gaGFu
ZGxlcyB0aG9zZSBjYXNlcyBpbiBGaXh1cFBoYXNlIHVzaW5nIHZhbHVlIHByb2ZpbGluZy4gVGhh
dCdzIGEgYml0IGF3a3dhcmQgLSB3ZQorICAgICAgICAgICAgICAgIC8vIHNob3VsZG4ndCBoYXZl
IHRvIHVzZSB2YWx1ZSBwcm9maWxpbmcgdG8gZGlzY292ZXIgc29tZXRoaW5nIHRoYXQgdGhlIEFj
Y2Vzc0Nhc2UKKyAgICAgICAgICAgICAgICAvLyBjb3VsZCBoYXZlIHRvbGQgdXMuIEJ1dCwgaXQg
d29ya3Mgd2VsbCBlbm91Z2guIFNvLCBvdXIgb25seSBjb25jZXJuIGhlcmUgaXMgdG8gbm90Cisg
ICAgICAgICAgICAgICAgLy8gY3Jhc2ggb24gbnVsbCBzdHJ1Y3R1cmUuCisgICAgICAgICAgICAg
ICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSwgdHJ1ZSk7CisgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIENvbXBsZXhHZXRTdGF0dXMgY29tcGxleEdl
dFN0YXR1cyA9IENvbXBsZXhHZXRTdGF0dXM6OmNvbXB1dGVGb3IoCi0gICAgICAgICAgICAgICAg
c3RydWN0dXJlLCBsaXN0LT5hdChsaXN0SW5kZXgpLmNvbmRpdGlvblNldCgpLCB1aWQpOworICAg
ICAgICAgICAgICAgIHN0cnVjdHVyZSwgYWNjZXNzLmNvbmRpdGlvblNldCgpLCB1aWQpOwogICAg
ICAgICAgICAgIAogICAgICAgICAgICAgc3dpdGNoIChjb21wbGV4R2V0U3RhdHVzLmtpbmQoKSkg
ewogICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpTaG91bGRTa2lwOgpAQCAtMTkz
LDI5ICsyMDUsMjMgQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwog
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6SW5s
aW5lYWJsZTogewogICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1
cz4gY2FsbExpbmtTdGF0dXM7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChsaXN0LT5hdChsaXN0
SW5kZXgpLnR5cGUoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlJZEFjY2Vzczo6U2lt
cGxlSW5saW5lOgotICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlJZEFjY2Vzczo6U2ltcGxlU3R1
YjogeworICAgICAgICAgICAgICAgIHN3aXRjaCAoYWNjZXNzLnR5cGUoKSkgeworICAgICAgICAg
ICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6TG9hZDogewogICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2FzZSBHZXRCeUlkQWNjZXNz
OjpHZXR0ZXI6IHsKLSAgICAgICAgICAgICAgICAgICAgQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRp
bmUqIHN0dWIgPSBzdGF0aWNfY2FzdDxBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZSo+KAotICAg
ICAgICAgICAgICAgICAgICAgICAgbGlzdC0+YXQobGlzdEluZGV4KS5zdHViUm91dGluZSgpKTsK
KyAgICAgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OkdldHRlcjogeworICAgICAgICAgICAg
ICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGFjY2Vzcy5jYWxsTGlua0luZm8o
KTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGNhbGxMaW5rSW5mbyk7CiAgICAgICAgICAg
ICAgICAgICAgIGNhbGxMaW5rU3RhdHVzID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxsTGlua1N0YXR1
cz4oCiAgICAgICAgICAgICAgICAgICAgICAgICBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcigK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ssICpzdHVi
LT5tX2NhbGxMaW5rSW5mbywgY2FsbEV4aXRTaXRlRGF0YSkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxvY2tlciwgcHJvZmlsZWRCbG9jaywgKmNhbGxMaW5rSW5mbywgY2FsbEV4aXRT
aXRlRGF0YSkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgY2FzZSBHZXRCeUlkQWNjZXNzOjpTaW1wbGVNaXNzOgotICAgICAg
ICAgICAgICAgIGNhc2UgR2V0QnlJZEFjY2Vzczo6Q3VzdG9tR2V0dGVyOgotICAgICAgICAgICAg
ICAgIGNhc2UgR2V0QnlJZEFjY2Vzczo6V2F0Y2hlZFN0dWI6ewotICAgICAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogSXQgd291bGQgYmUgdG90YWxseSBzd2VldCB0byBzdXBwb3J0IHRoaXMgYXQg
c29tZSBwb2ludCBpbiB0aGUgZnV0dXJlLgotICAgICAgICAgICAgICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMDUyCisgICAgICAgICAgICAgICAg
ZGVmYXVsdDogeworICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgdG90
YWxseSBzd2VldCB0byBzdXBwb3J0IG1vcmUgb2YgdGhlc2UgYXQgc29tZSBwb2ludCBpbiB0aGUK
KyAgICAgICAgICAgICAgICAgICAgLy8gZnV0dXJlLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTMzMDUyCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeUlk
U3RhdHVzKHNsb3dQYXRoU3RhdGUsIHRydWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IH0KICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgR2V0QnlJZFZhcmlhbnQgdmFyaWFudCgKICAg
ICAgICAgICAgICAgICAgICAgU3RydWN0dXJlU2V0KHN0cnVjdHVyZSksIGNvbXBsZXhHZXRTdGF0
dXMub2Zmc2V0KCksCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJldmlzaW9uIDE4OTMyNCkJKGZyb20gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwOjE4OTMy
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlBvbHltb3JwaGljR2V0QnlJZExpc3QuaCIKKworI2lmIEVOQUJMRShKSVQpCisKKyNp
bmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCitHZXRCeUlkQWNjZXNzOjpHZXRCeUlkQWNjZXNzKAorICAgIFZNJiB2bSwgSlNDZWxsKiBv
d25lciwgQWNjZXNzVHlwZSB0eXBlLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91
dGluZSwKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQmIGNvbmRpdGlvblNldCkKKyAgICA6IG1fdHlwZSh0eXBlKQorICAgICwgbV9zdHJ1
Y3R1cmUodm0sIG93bmVyLCBzdHJ1Y3R1cmUpCisgICAgLCBtX2NvbmRpdGlvblNldChjb25kaXRp
b25TZXQpCisgICAgLCBtX3N0dWJSb3V0aW5lKHN0dWJSb3V0aW5lKQoreworfQorCitHZXRCeUlk
QWNjZXNzOjp+R2V0QnlJZEFjY2VzcygpCit7Cit9CisKK0dldEJ5SWRBY2Nlc3MgR2V0QnlJZEFj
Y2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykK
K3sKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgaW5pdGlhbFNsb3dQYXRoID0KKyAgICAgICAg
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGVsdGFDYWxsVG9TbG93Q2FzZSk7CisgICAgCisgICAgR2V0QnlJZEFjY2VzcyByZXN1bHQ7Cisg
ICAgCisgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0
X2J5X2lkX3NlbGYpOworICAgIAorICAgIHJlc3VsdC5tX3R5cGUgPSBTaW1wbGVJbmxpbmU7Cisg
ICAgcmVzdWx0Lm1fc3RydWN0dXJlLmNvcHlGcm9tKHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFz
ZU9iamVjdFN0cnVjdHVyZSk7CisgICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBKSVRTdHViUm91
dGluZTo6Y3JlYXRlU2VsZk1hbmFnZWRSb3V0aW5lKGluaXRpYWxTbG93UGF0aCk7CisgICAgCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBHZXRCeUlkQWNjZXNzOjp2aXNpdFdlYWsoVk0m
IHZtKSBjb25zdAoreworICAgIGlmIChtX3N0cnVjdHVyZSAmJiAhSGVhcDo6aXNNYXJrZWQobV9z
dHJ1Y3R1cmUuZ2V0KCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFtX2NvbmRp
dGlvblNldC5hcmVTdGlsbExpdmUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICgh
bV9zdHViUm91dGluZS0+dmlzaXRXZWFrKHZtKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHJldHVybiB0cnVlOworfQorCitQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpQb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0KFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBpZiAoc3R1Yklu
Zm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBtX2xpc3QuYXBwZW5kKEdldEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1cmVTdHViSW5mbyhzdHVi
SW5mbykpOworfQorCitQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBQb2x5bW9ycGhpY0dldEJ5SWRM
aXN0Ojpmcm9tKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBpZiAoc3R1Yklu
Zm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3QpCisgICAgICAgIHJldHVybiBz
dHViSW5mby51LmdldEJ5SWRMaXN0Lmxpc3Q7CisgICAgCisgICAgQVNTRVJUKAorICAgICAgICBz
dHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZgorICAgICAgICB8fCBz
dHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc191bnNldCk7CisgICAgCisgICAgUG9seW1vcnBo
aWNHZXRCeUlkTGlzdCogcmVzdWx0ID0gbmV3IFBvbHltb3JwaGljR2V0QnlJZExpc3Qoc3R1Yklu
Zm8pOworICAgIAorICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkTGlzdChyZXN1bHQpOworICAgIAor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1BvbHltb3JwaGljR2V0QnlJZExpc3Q6On5Qb2x5bW9y
cGhpY0dldEJ5SWRMaXN0KCkgeyB9CisKK01hY3JvQXNzZW1ibGVyQ29kZVB0ciBQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0OjpjdXJyZW50U2xvd1BhdGhUYXJnZXQoCisgICAgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvKSBjb25zdAoreworICAgIGlmIChpc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRj
aC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKKyAgICByZXR1cm4gbV9saXN0Lmxhc3QoKS5zdHViUm91
dGluZSgpLT5jb2RlKCkuY29kZSgpOworfQorCit2b2lkIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6
OmFkZEFjY2Vzcyhjb25zdCBHZXRCeUlkQWNjZXNzJiBhY2Nlc3MpCit7CisgICAgQVNTRVJUKCFp
c0Z1bGwoKSk7CisgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHJlc2l6aW5nIG9wdGltaXplcyBm
b3Igc3BhY2UsIG5vdCB0aW1lLgorICAgIG1fbGlzdC5yZXNpemVUb0ZpdChtX2xpc3Quc2l6ZSgp
ICsgMSk7CisgICAgbV9saXN0Lmxhc3QoKSA9IGFjY2VzczsKK30KKworYm9vbCBQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0Ojppc0Z1bGwoKSBjb25zdAoreworICAgIEFTU0VSVChzaXplKCkgPD0gUE9M
WU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKTsKKyAgICByZXR1cm4gc2l6ZSgpID09IFBPTFlNT1JQ
SElDX0xJU1RfQ0FDSEVfU0laRTsKK30KKworYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojpp
c0FsbW9zdEZ1bGwoKSBjb25zdAoreworICAgIEFTU0VSVChzaXplKCkgPD0gUE9MWU1PUlBISUNf
TElTVF9DQUNIRV9TSVpFKTsKKyAgICByZXR1cm4gc2l6ZSgpID49IFBPTFlNT1JQSElDX0xJU1Rf
Q0FDSEVfU0laRSAtIDE7Cit9CisKK2Jvb2wgUG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6ZGlkU2Vs
ZlBhdGNoaW5nKCkgY29uc3QKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXplKCk7IGktLTsp
IHsKKyAgICAgICAgaWYgKGF0KGkpLnR5cGUoKSA9PSBHZXRCeUlkQWNjZXNzOjpTaW1wbGVJbmxp
bmUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0
Cit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGlmICgh
YXQoaSkudmlzaXRXZWFrKHZtKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5B
QkxFKEpJVCkKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI0LDEzMSArMjQsMTE2MSBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nl
c3MuaCIKIAogI2lmIEVOQUJMRShKSVQpCiAKKyNpbmNsdWRlICJCaW5hcnlTd2l0Y2guaCIKKyNp
bmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRl
ICJHZXR0ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgi
CisjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiU3RydWN0
dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZv
LmgiCisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVt
cC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotR2V0QnlJZEFjY2Vzczo6R2V0QnlJZEFjY2VzcygK
LSAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgUGFzc1JlZlB0cjxK
SVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUsCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNv
bnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCi0gICAgOiBtX3R5
cGUodHlwZSkKLSAgICAsIG1fc3RydWN0dXJlKHZtLCBvd25lciwgc3RydWN0dXJlKQotICAgICwg
bV9jb25kaXRpb25TZXQoY29uZGl0aW9uU2V0KQotICAgICwgbV9zdHViUm91dGluZShzdHViUm91
dGluZSkKK3N0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKKworc3RydWN0IEFjY2Vz
c0dlbmVyYXRpb25TdGF0ZSB7CisgICAgQ0NhbGxIZWxwZXJzKiBqaXQgeyBudWxscHRyIH07Cisg
ICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yKiBhbGxvY2F0b3I7CisgICAgc2l6ZV90IG51bWJl
ck9mUGFkZGluZ0J5dGVzIHsgMCB9OworICAgIFBvbHltb3JwaGljQWNjZXNzKiBhY2Nlc3MgeyBu
dWxscHRyIH07CisgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvIHsgbnVsbHB0ciB9Owor
ICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc3VjY2VzczsKKyAgICBDQ2FsbEhlbHBlcnM6Okp1
bXBMaXN0IGZhaWxBbmRSZXBhdGNoOworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZmFpbEFu
ZElnbm9yZTsKKyAgICBHUFJSZWcgYmFzZUdQUiB7IEludmFsaWRHUFJSZWcgfTsKKyAgICBKU1Zh
bHVlUmVncyB2YWx1ZVJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgeyBJbnZhbGlkR1BSUmVn
IH07CisgICAgVmVjdG9yPHN0ZDo6ZnVuY3Rpb248dm9pZChMaW5rQnVmZmVyJik+PiBjYWxsYmFj
a3M7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdh
dGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbz4gd2F0Y2hwb2ludHM7CisKKyAgICBXYXRjaHBv
aW50KiBhZGRXYXRjaHBvaW50KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRp
b24gPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdh
dGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6ZW5zdXJlUmVmZXJlbmNlQW5kQWRkV2F0Y2hw
b2ludCgKKyAgICAgICAgICAgIHdhdGNocG9pbnRzLCBqaXQtPmNvZGVCbG9jaygpLCBzdHViSW5m
bywgY29uZGl0aW9uKTsKKyAgICB9CisKKyAgICB2b2lkIHJlc3RvcmVTY3JhdGNoKCkKKyAgICB7
CisgICAgICAgIGFsbG9jYXRvci0+cmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZygqaml0
LCBudW1iZXJPZlBhZGRpbmdCeXRlcyk7CisgICAgfQorCisgICAgdm9pZCBzdWNjZWVkKCkKKyAg
ICB7CisgICAgICAgIHJlc3RvcmVTY3JhdGNoKCk7CisgICAgICAgIHN1Y2Nlc3MuYXBwZW5kKGpp
dC0+anVtcCgpKTsKKyAgICB9Cit9OworCitBY2Nlc3NDYXNlOjpBY2Nlc3NDYXNlKCkKIHsKIH0K
IAotR2V0QnlJZEFjY2Vzczo6fkdldEJ5SWRBY2Nlc3MoKQorc3RkOjp1bmlxdWVfcHRyPEFjY2Vz
c0Nhc2U+IEFjY2Vzc0Nhc2U6OmdldCgKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vz
c1R5cGUgdHlwZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwK
KyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBib29s
IHZpYVByb3h5LCBXYXRjaHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0LAorICAgIFByb3BlcnR5U2xv
dDo6R2V0VmFsdWVGdW5jIGN1c3RvbUdldHRlciwgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlKQog
eworICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nhc2Uo
KSk7CisKKyAgICByZXN1bHQtPm1fdHlwZSA9IHR5cGU7CisgICAgcmVzdWx0LT5tX29mZnNldCA9
IG9mZnNldDsKKyAgICByZXN1bHQtPm1fc3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVy
ZSk7CisgICAgcmVzdWx0LT5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKKworICAgIGlm
ICh2aWFQcm94eSB8fCBhZGRpdGlvbmFsU2V0IHx8IHJlc3VsdC0+ZG9lc0NhbGxzKCkgfHwgY3Vz
dG9tR2V0dGVyIHx8IGN1c3RvbVNsb3RCYXNlKSB7CisgICAgICAgIHJlc3VsdC0+bV9yYXJlRGF0
YSA9IHN0ZDo6bWFrZV91bmlxdWU8UmFyZURhdGE+KCk7CisgICAgICAgIHJlc3VsdC0+bV9yYXJl
RGF0YS0+dmlhUHJveHkgPSB2aWFQcm94eTsKKyAgICAgICAgcmVzdWx0LT5tX3JhcmVEYXRhLT5h
ZGRpdGlvbmFsU2V0ID0gYWRkaXRpb25hbFNldDsKKyAgICAgICAgcmVzdWx0LT5tX3JhcmVEYXRh
LT5jdXN0b21BY2Nlc3Nvci5nZXR0ZXIgPSBjdXN0b21HZXR0ZXI7CisgICAgICAgIHJlc3VsdC0+
bV9yYXJlRGF0YS0+Y3VzdG9tU2xvdEJhc2Uuc2V0TWF5QmVOdWxsKHZtLCBvd25lciwgY3VzdG9t
U2xvdEJhc2UpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUdldEJ5SWRBY2Nl
c3MgR2V0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbykKK3N0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpyZXBs
YWNlKAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgaW5pdGlh
bFNsb3dQYXRoID0KLSAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRP
ZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSk7Ci0gICAgCi0gICAgR2V0
QnlJZEFjY2VzcyByZXN1bHQ7Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8uYWNj
ZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYpOwotICAgIAotICAgIHJlc3VsdC5tX3R5
cGUgPSBTaW1wbGVJbmxpbmU7Ci0gICAgcmVzdWx0Lm1fc3RydWN0dXJlLmNvcHlGcm9tKHN0dWJJ
bmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZSk7Ci0gICAgcmVzdWx0Lm1fc3R1
YlJvdXRpbmUgPSBKSVRTdHViUm91dGluZTo6Y3JlYXRlU2VsZk1hbmFnZWRSb3V0aW5lKGluaXRp
YWxTbG93UGF0aCk7Ci0gICAgCisgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHJlc3Vs
dChuZXcgQWNjZXNzQ2FzZSgpKTsKKworICAgIHJlc3VsdC0+bV90eXBlID0gUmVwbGFjZTsKKyAg
ICByZXN1bHQtPm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgIHJlc3VsdC0+bV9zdHJ1Y3R1cmUuc2V0
KHZtLCBvd25lciwgc3RydWN0dXJlKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0ZDo6
dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjp0cmFuc2l0aW9uKAorICAgIFZNJiB2
bSwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3
U3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCisgICAgY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChvbGRT
dHJ1Y3R1cmUgPT0gbmV3U3RydWN0dXJlLT5wcmV2aW91c0lEKCkpOworCisgICAgLy8gU2tpcCBv
cHRpbWl6aW5nIHRoZSBjYXNlIHdoZXJlIHdlIG5lZWQgYSByZWFsbG9jLCBpZiB3ZSBkb24ndCBo
YXZlCisgICAgLy8gZW5vdWdoIHJlZ2lzdGVycyB0byBtYWtlIGl0IGhhcHBlbi4KKyAgICBpZiAo
R1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgPCA2CisgICAgICAgICYmIG9sZFN0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBuZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkK
KyAgICAgICAgJiYgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2Fz
ZSB3aGVyZSB3ZSBuZWVkIHJlYWxsb2MsIGFuZCB0aGUgc3RydWN0dXJlIGhhcworICAgIC8vIGlu
ZGV4aW5nIHN0b3JhZ2UuCisgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBza2lwIHRoaXMhIElt
cGxlbWVudCBpdCEKKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTMwOTE0CisgICAgaWYgKG9sZFN0cnVjdHVyZS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIo
KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNz
Q2FzZT4gcmVzdWx0KG5ldyBBY2Nlc3NDYXNlKCkpOworCisgICAgcmVzdWx0LT5tX3R5cGUgPSBU
cmFuc2l0aW9uOworICAgIHJlc3VsdC0+bV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgcmVzdWx0LT5t
X3N0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBuZXdTdHJ1Y3R1cmUpOworICAgIHJlc3VsdC0+bV9j
b25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitz
dGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6c2V0dGVyKAorICAgIFZNJiB2
bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0LAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0JiBjb25kaXRpb25TZXQsIFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jIGN1c3RvbVNl
dHRlciwKKyAgICBKU09iamVjdCogY3VzdG9tU2xvdEJhc2UpCit7CisgICAgc3RkOjp1bmlxdWVf
cHRyPEFjY2Vzc0Nhc2U+IHJlc3VsdChuZXcgQWNjZXNzQ2FzZSgpKTsKKworICAgIHJlc3VsdC0+
bV90eXBlID0gdHlwZTsKKyAgICByZXN1bHQtPm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgIHJlc3Vs
dC0+bV9zdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKKyAgICByZXN1bHQtPm1f
Y29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OworICAgIHJlc3VsdC0+bV9yYXJlRGF0YSA9IHN0
ZDo6bWFrZV91bmlxdWU8UmFyZURhdGE+KCk7CisgICAgcmVzdWx0LT5tX3JhcmVEYXRhLT5jdXN0
b21BY2Nlc3Nvci5zZXR0ZXIgPSBjdXN0b21TZXR0ZXI7CisgICAgcmVzdWx0LT5tX3JhcmVEYXRh
LT5jdXN0b21TbG90QmFzZS5zZXRNYXlCZU51bGwodm0sIG93bmVyLCBjdXN0b21TbG90QmFzZSk7
CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4g
QWNjZXNzQ2FzZTo6aW4oCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5
cGUsIFN0cnVjdHVyZSogc3RydWN0dXJlLAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0JiBjb25kaXRpb25TZXQpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+
IHJlc3VsdChuZXcgQWNjZXNzQ2FzZSgpKTsKKworICAgIHJlc3VsdC0+bV90eXBlID0gdHlwZTsK
KyAgICByZXN1bHQtPm1fc3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7CisgICAg
cmVzdWx0LT5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKKworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpnZXRMZW5n
dGgoVk0mLCBKU0NlbGwqLCBBY2Nlc3NUeXBlIHR5cGUpCit7CisgICAgc3RkOjp1bmlxdWVfcHRy
PEFjY2Vzc0Nhc2U+IHJlc3VsdChuZXcgQWNjZXNzQ2FzZSgpKTsKKworICAgIHJlc3VsdC0+bV90
eXBlID0gdHlwZTsKKwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWJvb2wgR2V0QnlJZEFjY2Vz
czo6dmlzaXRXZWFrKFZNJiB2bSkgY29uc3QKK0FjY2Vzc0Nhc2U6On5BY2Nlc3NDYXNlKCkKK3sK
K30KKworc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OmZyb21TdHJ1Y3R1
cmVTdHViSW5mbygKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbykKK3sKKyAgICBzd2l0Y2ggKHN0dWJJbmZvLmNhY2hlVHlwZSkgeworICAgIGNh
c2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKKyAgICAgICAgcmV0dXJuIGdldCgKKyAgICAgICAg
ICAgIHZtLCBvd25lciwgTG9hZCwgc3R1YkluZm8udS5ieUlkU2VsZi5vZmZzZXQsCisgICAgICAg
ICAgICBzdHViSW5mby51LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCkpOworCisg
ICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOgorICAgICAgICByZXR1cm4gcmVwbGFj
ZSgKKyAgICAgICAgICAgIHZtLCBvd25lciwgc3R1YkluZm8udS5ieUlkU2VsZi5iYXNlT2JqZWN0
U3RydWN0dXJlLmdldCgpLCBzdHViSW5mby51LmJ5SWRTZWxmLm9mZnNldCk7CisKKyAgICBkZWZh
dWx0OgorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9Cit9CisKK3N0ZDo6dW5pcXVlX3B0
cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpjbG9uZSgpIGNvbnN0Cit7CisgICAgc3RkOjp1bmlx
dWVfcHRyPEFjY2Vzc0Nhc2U+IHJlc3VsdChuZXcgQWNjZXNzQ2FzZSgpKTsKKyAgICByZXN1bHQt
Pm1fdHlwZSA9IG1fdHlwZTsKKyAgICByZXN1bHQtPm1fb2Zmc2V0ID0gbV9vZmZzZXQ7CisgICAg
cmVzdWx0LT5tX3N0cnVjdHVyZSA9IG1fc3RydWN0dXJlOworICAgIHJlc3VsdC0+bV9jb25kaXRp
b25TZXQgPSBtX2NvbmRpdGlvblNldDsKKyAgICBpZiAoUmFyZURhdGEqIHJhcmVEYXRhID0gbV9y
YXJlRGF0YS5nZXQoKSkgeworICAgICAgICByZXN1bHQtPm1fcmFyZURhdGEgPSBzdGQ6Om1ha2Vf
dW5pcXVlPFJhcmVEYXRhPigpOworICAgICAgICByZXN1bHQtPm1fcmFyZURhdGEtPnZpYVByb3h5
ID0gcmFyZURhdGEtPnZpYVByb3h5OworICAgICAgICByZXN1bHQtPm1fcmFyZURhdGEtPmFkZGl0
aW9uYWxTZXQgPSByYXJlRGF0YS0+YWRkaXRpb25hbFNldDsKKyAgICAgICAgLy8gTk9URTogV2Ug
ZG9uJ3QgY29weSB0aGUgY2FsbExpbmtJbmZvLCBzaW5jZSB0aGF0J3MgY3JlYXRlZCBkdXJpbmcg
Y29kZSBnZW5lcmF0aW9uLgorICAgICAgICByZXN1bHQtPm1fcmFyZURhdGEtPmN1c3RvbUFjY2Vz
c29yLm9wYXF1ZSA9IHJhcmVEYXRhLT5jdXN0b21BY2Nlc3Nvci5vcGFxdWU7CisgICAgICAgIHJl
c3VsdC0+bV9yYXJlRGF0YS0+Y3VzdG9tU2xvdEJhc2UgPSByYXJlRGF0YS0+Y3VzdG9tU2xvdEJh
c2U7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgQWNjZXNzQ2FzZTo6Z3Vh
cmRlZEJ5U3RydWN0dXJlQ2hlY2soKSBjb25zdAoreworICAgIGlmICh2aWFQcm94eSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgQXJy
YXlMZW5ndGg6CisgICAgY2FzZSBTdHJpbmdMZW5ndGg6CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisKK0pTT2JqZWN0
KiBBY2Nlc3NDYXNlOjphbHRlcm5hdGVCYXNlKCkgY29uc3QKK3sKKyAgICBpZiAoY3VzdG9tU2xv
dEJhc2UoKSkKKyAgICAgICAgcmV0dXJuIGN1c3RvbVNsb3RCYXNlKCk7CisgICAgcmV0dXJuIGNv
bmRpdGlvblNldCgpLnNsb3RCYXNlQ29uZGl0aW9uKCkub2JqZWN0KCk7Cit9CisKK2Jvb2wgQWNj
ZXNzQ2FzZTo6Y2FuUmVwbGFjZShjb25zdCBBY2Nlc3NDYXNlJiBvdGhlcikKK3sKKyAgICAvLyBX
ZSBjb3VsZCBkbyBhIGxvdCBiZXR0ZXIgaGVyZSwgYnV0IGZvciBub3cgd2UganVzdCBkbyBzb21l
dGhpbmcgb2J2aW91cy4KKworICAgIGlmICghZ3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2soKSB8fCAh
b3RoZXIuZ3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2soKSkgeworICAgICAgICAvLyBGSVhNRTogSW1w
bGVtZW50IHRoaXMhCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4g
c3RydWN0dXJlKCkgPT0gb3RoZXIuc3RydWN0dXJlKCk7Cit9CisKK3ZvaWQgQWNjZXNzQ2FzZTo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX3R5cGUsICI6
KCIpOworCisgICAgQ29tbWFQcmludGVyIGNvbW1hOworCisgICAgaWYgKG1fdHlwZSA9PSBUcmFu
c2l0aW9uKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJzdHJ1Y3R1cmUgPSAiLCBwb2ludGVy
RHVtcChzdHJ1Y3R1cmUoKSksICIgLT4gIiwgcG9pbnRlckR1bXAobmV3U3RydWN0dXJlKCkpKTsK
KyAgICBlbHNlIGlmIChtX3N0cnVjdHVyZSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAic3Ry
dWN0dXJlID0gIiwgcG9pbnRlckR1bXAobV9zdHJ1Y3R1cmUuZ2V0KCkpKTsKKworICAgIGlmIChp
c1ZhbGlkT2Zmc2V0KG1fb2Zmc2V0KSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAib2Zmc2V0
ID0gIiwgbV9vZmZzZXQpOworICAgIGlmICghbV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKQorICAg
ICAgICBvdXQucHJpbnQoY29tbWEsICJjb25kaXRpb25zID0gIiwgbV9jb25kaXRpb25TZXQpOwor
CisgICAgaWYgKFJhcmVEYXRhKiByYXJlRGF0YSA9IG1fcmFyZURhdGEuZ2V0KCkpIHsKKyAgICAg
ICAgaWYgKHJhcmVEYXRhLT52aWFQcm94eSkKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwg
InZpYVByb3h5ID0gIiwgcmFyZURhdGEtPnZpYVByb3h5KTsKKyAgICAgICAgaWYgKHJhcmVEYXRh
LT5hZGRpdGlvbmFsU2V0KQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiYWRkaXRpb25h
bFNldCA9ICIsIFJhd1BvaW50ZXIocmFyZURhdGEtPmFkZGl0aW9uYWxTZXQuZ2V0KCkpKTsKKyAg
ICAgICAgaWYgKHJhcmVEYXRhLT5jYWxsTGlua0luZm8pCisgICAgICAgICAgICBvdXQucHJpbnQo
Y29tbWEsICJjYWxsTGlua0luZm8gPSAiLCBSYXdQb2ludGVyKHJhcmVEYXRhLT5jYWxsTGlua0lu
Zm8uZ2V0KCkpKTsKKyAgICAgICAgaWYgKHJhcmVEYXRhLT5jdXN0b21BY2Nlc3Nvci5vcGFxdWUp
CisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICJjdXN0b21BY2Nlc3NvciA9ICIsIFJhd1Bv
aW50ZXIocmFyZURhdGEtPmN1c3RvbUFjY2Vzc29yLm9wYXF1ZSkpOworICAgICAgICBpZiAocmFy
ZURhdGEtPmN1c3RvbVNsb3RCYXNlKQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiY3Vz
dG9tU2xvdEJhc2UgPSAiLCBSYXdQb2ludGVyKHJhcmVEYXRhLT5jdXN0b21TbG90QmFzZS5nZXQo
KSkpOworICAgIH0KKworICAgIG91dC5wcmludCgiKSIpOworfQorCitib29sIEFjY2Vzc0Nhc2U6
OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0CiB7CiAgICAgaWYgKG1fc3RydWN0dXJlICYmICFIZWFw
Ojppc01hcmtlZChtX3N0cnVjdHVyZS5nZXQoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBpZiAoIW1fY29uZGl0aW9uU2V0LmFyZVN0aWxsTGl2ZSgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgaWYgKCFtX3N0dWJSb3V0aW5lLT52aXNpdFdlYWsodm0pKQotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKG1fcmFyZURhdGEpIHsKKyAgICAgICAgaWYgKG1fcmFyZURhdGEt
PmNhbGxMaW5rSW5mbykKKyAgICAgICAgICAgIG1fcmFyZURhdGEtPmNhbGxMaW5rSW5mby0+dmlz
aXRXZWFrKHZtKTsKKyAgICAgICAgaWYgKG1fcmFyZURhdGEtPmN1c3RvbVNsb3RCYXNlICYmICFI
ZWFwOjppc01hcmtlZChtX3JhcmVEYXRhLT5jdXN0b21TbG90QmFzZS5nZXQoKSkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogICAgIHJldHVybiB0cnVlOwogfQogCi1Qb2x5bW9y
cGhpY0dldEJ5SWRMaXN0OjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbykKK3ZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCisgICAgQWNj
ZXNzR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCYgZmFsbFRo
cm91Z2gpCiB7Ci0gICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0KQot
ICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgbV9saXN0LmFwcGVuZChHZXRCeUlkQWNjZXNzOjpm
cm9tU3RydWN0dXJlU3R1YkluZm8oc3R1YkluZm8pKTsKKyAgICBDQ2FsbEhlbHBlcnMmIGppdCA9
ICpzdGF0ZS5qaXQ7CisKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgQXJyYXlMZW5n
dGg6IHsKKyAgICAgICAgQVNTRVJUKCF2aWFQcm94eSgpKTsKKyAgICAgICAgaml0LmxvYWQ4KEND
YWxsSGVscGVyczo6QWRkcmVzcyhzdGF0ZS5iYXNlR1BSLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9m
ZnNldCgpKSwgc3RhdGUuc2NyYXRjaEdQUik7CisgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgK
KyAgICAgICAgICAgIGppdC5icmFuY2hUZXN0MzIoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpaZXJvLCBzdGF0ZS5zY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihJ
c0FycmF5KSkpOworICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCisgICAgICAgICAgICBqaXQu
YnJhbmNoVGVzdDMyKAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6WmVybywgc3RhdGUu
c2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2sp
KSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgU3RyaW5nTGVuZ3RoOiB7Cisg
ICAgICAgIEFTU0VSVCghdmlhUHJveHkoKSk7CisgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgK
KyAgICAgICAgICAgIGppdC5icmFuY2g4KAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
Tm90RXF1YWwsCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0YXRlLmJh
c2VHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKFN0cmluZ1R5cGUpKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgaWYgKHZpYVByb3h5KCkpIHsKKyAgICAg
ICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgKKyAgICAgICAgICAgICAgICBqaXQuYnJhbmNoOCgK
KyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKKyAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0YXRlLmJhc2VHUFIsIEpTQ2VsbDo6dHlw
ZUluZm9UeXBlT2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihQdXJlRm9yd2FyZGluZ1Byb3h5VHlwZSkpKTsKKworICAgICAgICAgICAgaml0
LmxvYWRQdHIoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0YXRlLmJh
c2VHUFIsIEpTUHJveHk6OnRhcmdldE9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBzdGF0ZS5z
Y3JhdGNoR1BSKTsKKworICAgICAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKAorICAgICAgICAg
ICAgICAgIGppdC5icmFuY2hTdHJ1Y3R1cmUoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6Tm90RXF1YWwsCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVz
cyhzdGF0ZS5zY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAorICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3R1cmUoKSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgZmFsbFRocm91Z2guYXBwZW5kKAorICAgICAgICAgICAgICAgIGppdC5icmFuY2hTdHJ1Y3R1
cmUoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsCisgICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdGF0ZS5iYXNlR1BSLCBKU0NlbGw6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUoKSkp
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0gfTsKKworICAgIGdlbmVyYXRlKHN0
YXRlKTsKIH0KIAotUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogUG9seW1vcnBoaWNHZXRCeUlkTGlz
dDo6ZnJvbShTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit2b2lkIEFjY2Vzc0Nhc2U6Omdl
bmVyYXRlKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCiB7Ci0gICAgaWYgKHN0dWJJbmZv
LmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9saXN0KQotICAgICAgICByZXR1cm4gc3R1
YkluZm8udS5nZXRCeUlkTGlzdC5saXN0OwotICAgIAotICAgIEFTU0VSVCgKLSAgICAgICAgc3R1
YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYKLSAgICAgICAgfHwgc3R1
YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpOwotICAgIAotICAgIFBvbHltb3JwaGlj
R2V0QnlJZExpc3QqIHJlc3VsdCA9IG5ldyBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KHN0dWJJbmZv
KTsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiR2VuZXJhdGluZyBjb2RlIGZv
cjogIiwgKnRoaXMsICJcbiIpOwogICAgIAotICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkTGlzdChy
ZXN1bHQpOworICAgIENDYWxsSGVscGVycyYgaml0ID0gKnN0YXRlLmppdDsKKyAgICBWTSYgdm0g
PSAqaml0LnZtKCk7CisgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gKnN0YXRlLnN0
dWJJbmZvOworICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gKnN0YXRlLmlkZW50OworICAg
IEpTVmFsdWVSZWdzIHZhbHVlUmVncyA9IHN0YXRlLnZhbHVlUmVnczsKKyAgICBHUFJSZWcgYmFz
ZUdQUiA9IHN0YXRlLmJhc2VHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzdGF0ZS5zY3Jh
dGNoR1BSOworCisgICAgQVNTRVJUKG1fY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxp
ZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpOworCisgICAgaWYgKChzdHJ1
Y3R1cmUoKSAmJiBzdHJ1Y3R1cmUoKS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKQor
ICAgICAgICB8fCBtX2NvbmRpdGlvblNldC5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkp
CisgICAgICAgIHZtLnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KGlkZW50LCBz
dGF0ZS5hZGRXYXRjaHBvaW50KCkpOworCisgICAgaWYgKGFkZGl0aW9uYWxTZXQoKSkKKyAgICAg
ICAgYWRkaXRpb25hbFNldCgpLT5hZGQoc3RhdGUuYWRkV2F0Y2hwb2ludCgpKTsKKworICAgIGZv
ciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6IG1fY29uZGl0aW9u
U2V0KSB7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY29uZGl0aW9uLm9iamVjdCgp
LT5zdHJ1Y3R1cmUoKTsKKworICAgICAgICBpZiAoY29uZGl0aW9uLmlzV2F0Y2hhYmxlQXNzdW1p
bmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkgeworICAgICAgICAgICAgc3RydWN0dXJlLT5h
ZGRUcmFuc2l0aW9uV2F0Y2hwb2ludChzdGF0ZS5hZGRXYXRjaHBvaW50KGNvbmRpdGlvbikpOwor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBSRUxFQVNFX0FTU0VS
VChjb25kaXRpb24uc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0
eVdhdGNocG9pbnQoc3RydWN0dXJlKSk7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cihjb25kaXRpb24ub2JqZWN0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
c3RhdGUuZmFpbEFuZFJlcGF0Y2guYXBwZW5kKAorICAgICAgICAgICAgaml0LmJyYW5jaFN0cnVj
dHVyZSgKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAorICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIHN0cnVjdHVyZSkpOworICAgIH0KKworICAg
IHN3aXRjaCAobV90eXBlKSB7CisgICAgY2FzZSBJbkhpdDoKKyAgICBjYXNlIEluTWlzczoKKyAg
ICAgICAgaml0LmJveEJvb2xlYW5QYXlsb2FkKG1fdHlwZSA9PSBJbkhpdCwgdmFsdWVSZWdzLnBh
eWxvYWRHUFIoKSk7CisgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKKyAgICAgICAgcmV0dXJuOwor
CisgICAgY2FzZSBNaXNzOgorICAgICAgICBqaXQubW92ZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5l
ZCgpLCB2YWx1ZVJlZ3MpOworICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7CisgICAgICAgIHJldHVy
bjsKKworICAgIGNhc2UgTG9hZDoKKyAgICBjYXNlIEdldHRlcjoKKyAgICBjYXNlIFNldHRlcjoK
KyAgICBjYXNlIEN1c3RvbUdldHRlcjoKKyAgICBjYXNlIEN1c3RvbVNldHRlcjogeworICAgICAg
ICBpZiAoaXNWYWxpZE9mZnNldChtX29mZnNldCkpIHsKKyAgICAgICAgICAgIFN0cnVjdHVyZSog
Y3VyclN0cnVjdHVyZTsKKyAgICAgICAgICAgIGlmIChtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkp
CisgICAgICAgICAgICAgICAgY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZSgpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBtX2NvbmRpdGlvblNldC5z
bG90QmFzZUNvbmRpdGlvbigpLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgIGN1
cnJTdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgb2Zm
c2V0KCkpOworICAgICAgICB9CisKKyAgICAgICAgR1BSUmVnIGJhc2VGb3JHZXRHUFI7CisgICAg
ICAgIGlmICh2aWFQcm94eSgpKSB7CisgICAgICAgICAgICBiYXNlRm9yR2V0R1BSID0gdmFsdWVS
ZWdzLnBheWxvYWRHUFIoKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKAorICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU1Byb3h5Ojp0YXJnZXRPZmZzZXQo
KSksCisgICAgICAgICAgICAgICAgYmFzZUZvckdldEdQUik7CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgYmFzZUZvckdldEdQUiA9IGJhc2VHUFI7CisKKyAgICAgICAgR1BSUmVnIGJhc2VG
b3JBY2Nlc3NHUFI7CisgICAgICAgIGlmICghbV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKSB7Cisg
ICAgICAgICAgICBqaXQubW92ZSgKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoYWx0ZXJuYXRlQmFzZSgpKSwKKyAgICAgICAgICAgICAgICBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgIGJhc2VGb3JBY2Nlc3NHUFIgPSBzY3JhdGNoR1BSOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIGJhc2VGb3JBY2Nlc3NHUFIgPSBiYXNlRm9yR2V0R1BSOworCisgICAg
ICAgIEdQUlJlZyBsb2FkZWRWYWx1ZUdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGlmICht
X3R5cGUgIT0gQ3VzdG9tR2V0dGVyICYmIG1fdHlwZSAhPSBDdXN0b21TZXR0ZXIpIHsKKyAgICAg
ICAgICAgIGlmIChtX3R5cGUgPT0gTG9hZCkKKyAgICAgICAgICAgICAgICBsb2FkZWRWYWx1ZUdQ
UiA9IHZhbHVlUmVncy5wYXlsb2FkR1BSKCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgbG9hZGVkVmFsdWVHUFIgPSBzY3JhdGNoR1BSOworCisgICAgICAgICAgICBHUFJSZWcg
c3RvcmFnZUdQUjsKKyAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChtX29mZnNldCkpCisg
ICAgICAgICAgICAgICAgc3RvcmFnZUdQUiA9IGJhc2VGb3JBY2Nlc3NHUFI7CisgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cigKKyAgICAgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VGb3JBY2Nlc3NHUFIsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSKTsKKyAg
ICAgICAgICAgICAgICBzdG9yYWdlR1BSID0gbG9hZGVkVmFsdWVHUFI7CisgICAgICAgICAgICB9
CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgaml0LmxvYWQ2NCgKKyAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RvcmFnZUdQUiwgb2Zmc2V0UmVsYXRpdmVU
b0Jhc2UobV9vZmZzZXQpKSwgbG9hZGVkVmFsdWVHUFIpOworI2Vsc2UKKyAgICAgICAgICAgIGlm
IChtX3R5cGUgPT0gTG9hZCkgeworICAgICAgICAgICAgICAgIGppdC5sb2FkMzIoCisgICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdG9yYWdlR1BSLCBvZmZzZXRSZWxh
dGl2ZVRvQmFzZShtX29mZnNldCkgKyBUYWdPZmZzZXQpLAorICAgICAgICAgICAgICAgICAgICB2
YWx1ZVJlZ3MudGFnR1BSKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaml0LmxvYWQz
MigKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RvcmFnZUdQUiwgb2Zm
c2V0UmVsYXRpdmVUb0Jhc2UobV9vZmZzZXQpICsgUGF5bG9hZE9mZnNldCksCisgICAgICAgICAg
ICAgICAgbG9hZGVkVmFsdWVHUFIpOworI2VuZGlmCisgICAgICAgIH0KKworICAgICAgICAvLyBT
dHVmZiBmb3IgY3VzdG9tIGdldHRlcnMuCisgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBvcGVy
YXRpb25DYWxsOworICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgaGFuZGxlckNhbGw7CisKKyAg
ICAgICAgLy8gU3R1ZmYgZm9yIEpTIGdldHRlcnMuCisgICAgICAgIENDYWxsSGVscGVyczo6RGF0
YUxhYmVsUHRyIGFkZHJlc3NPZkxpbmtGdW5jdGlvbkNoZWNrOworICAgICAgICBDQ2FsbEhlbHBl
cnM6OkNhbGwgZmFzdFBhdGhDYWxsOworICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgc2xvd1Bh
dGhDYWxsOworCisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBzdWNjZXNzOworICAgICAgICBD
Q2FsbEhlbHBlcnM6Okp1bXAgZmFpbDsKKyAgICAgICAgaWYgKG1fdHlwZSAhPSBMb2FkICYmIG1f
dHlwZSAhPSBNaXNzKSB7CisgICAgICAgICAgICAvLyBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdo
ZW5ldmVyIHRoaXMgY2FsbCBpcyBtYWRlIGluIHRoZSBmdXR1cmUsIHdlIHJlbWVtYmVyIHRoZQor
ICAgICAgICAgICAgLy8gcGxhY2UgdGhhdCB3ZSBtYWRlIGl0IGZyb20uCisgICAgICAgICAgICBq
aXQuc3RvcmUzMigKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihz
dHViSW5mby5jYWxsU2l0ZUluZGV4LmJpdHMoKSksCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjp0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihKU1N0YWNrOjpBcmd1bWVu
dENvdW50KSkpOworCisgICAgICAgICAgICBpZiAobV90eXBlID09IEdldHRlciB8fCBtX3R5cGUg
PT0gU2V0dGVyKSB7CisgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgSlMgY2FsbCB1c2luZyBh
IEpTIGNhbGwgaW5saW5lIGNhY2hlLiBBc3N1bWUgdGhhdDoKKyAgICAgICAgICAgICAgICAvLwor
ICAgICAgICAgICAgICAgIC8vIC0gU1AgaXMgYWxpZ25lZCBhbmQgcmVwcmVzZW50cyB0aGUgZXh0
ZW50IG9mIHRoZSBjYWxsaW5nIGNvbXBpbGVyJ3Mgc3RhY2sgdXNhZ2UuCisgICAgICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgICAgICAvLyAtIEZQIGlzIHNldCBjb3JyZWN0bHkgKGkuZS4gaXQg
cG9pbnRzIHRvIHRoZSBjYWxsZXIncyBjYWxsIGZyYW1lIGhlYWRlcikuCisgICAgICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgICAgICAvLyAtIFNQIC0gRlAgaXMgYW4gYWxpZ25lZCBkaWZmZXJl
bmNlLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gLSBBbnkgYnl0ZSBi
ZXR3ZWVuIEZQIChleGNsdXNpdmUpIGFuZCBTUCAoaW5jbHVzaXZlKSBjb3VsZCBiZSBsaXZlIGlu
IHRoZSBjYWxsaW5nCisgICAgICAgICAgICAgICAgLy8gICBjb2RlLgorICAgICAgICAgICAgICAg
IC8vCisgICAgICAgICAgICAgICAgLy8gVGhlcmVmb3JlLCB3ZSB0ZW1wb3JhcmlseSBncm93IHRo
ZSBzdGFjayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhlIGNhbGwgYW5kIHRoZW4KKyAgICAgICAgICAg
ICAgICAvLyBzaHJpbmsgaXQgYWZ0ZXIuCisKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VCghbV9yYXJlRGF0YS0+Y2FsbExpbmtJbmZvKTsKKyAgICAgICAgICAgICAgICBtX3JhcmVEYXRh
LT5jYWxsTGlua0luZm8gPSBzdGQ6Om1ha2VfdW5pcXVlPENhbGxMaW5rSW5mbz4oKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSWYgd2UgZ2VuZXJhdGVkIGEg
cG9seW1vcnBoaWMgY2FsbCBzdHViIHRoYXQganVtcGVkIGJhY2sgdG8gdGhlIGdldHRlcgorICAg
ICAgICAgICAgICAgIC8vIHN0dWIsIHdoaWNoIHRoZW4ganVtcGVkIGJhY2sgdG8gdGhlIG1haW4g
Y29kZSwgdGhlbiB3ZSdkIGhhdmUgYSByZWFjaGFiaWxpdHkKKyAgICAgICAgICAgICAgICAvLyBz
aXR1YXRpb24gdGhhdCB0aGUgR0MgZG9lc24ndCBrbm93IGFib3V0LiBUaGUgR0Mgd291bGQgZW5z
dXJlIHRoYXQgdGhlIHBvbHltb3JwaGljCisgICAgICAgICAgICAgICAgLy8gY2FsbCBzdHViIHN0
YXllZCBhbGl2ZSwgYW5kIGl0IHdvdWxkIGVuc3VyZSB0aGF0IHRoZSBtYWluIGNvZGUgc3RheWVk
IGFsaXZlLCBidXQKKyAgICAgICAgICAgICAgICAvLyBpdCB3b3VsZG4ndCBrbm93IHRoYXQgdGhl
IGdldHRlciBzdHViIHdhcyBhbGl2ZS4gSWRlYWxseSBKSVQgc3R1YiByb3V0aW5lcyB3b3VsZAor
ICAgICAgICAgICAgICAgIC8vIGJlIEdDIG9iamVjdHMsIGFuZCB0aGVuIHdlJ2QgYmUgYWJsZSB0
byBzYXkgdGhhdCB0aGUgcG9seW1vcnBoaWMgY2FsbCBzdHViIGhhcyBhCisgICAgICAgICAgICAg
ICAgLy8gcmVmZXJlbmNlIHRvIHRoZSBnZXR0ZXIgc3R1Yi4KKyAgICAgICAgICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4OTE0CisgICAgICAgICAg
ICAgICAgbV9yYXJlRGF0YS0+Y2FsbExpbmtJbmZvLT5kaXNhbGxvd1N0dWJzKCk7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9yYXJlRGF0YS0+Y2FsbExpbmtJbmZvLT5zZXRV
cENhbGwoCisgICAgICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbzo6Q2FsbCwgc3R1YkluZm8u
Y29kZU9yaWdpbiwgbG9hZGVkVmFsdWVHUFIpOworCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wTGlzdCBkb25lOworCisgICAgICAgICAgICAgICAgLy8gVGhlcmUgaXMgYSAidGhp
cyIgYXJndW1lbnQuCisgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZQYXJhbWV0ZXJz
ID0gMTsKKyAgICAgICAgICAgICAgICAvLyAuLi4gYW5kIGEgdmFsdWUgYXJndW1lbnQgaWYgd2Un
cmUgY2FsbGluZyBhIHNldHRlci4KKyAgICAgICAgICAgICAgICBpZiAobV90eXBlID09IFNldHRl
cikKKyAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZQYXJhbWV0ZXJzKys7CisKKyAgICAgICAg
ICAgICAgICAvLyBHZXQgdGhlIGFjY2Vzc29yOyBpZiB0aGVyZSBhaW4ndCBvbmUgdGhlbiB0aGUg
cmVzdWx0IGlzIGpzVW5kZWZpbmVkKCkuCisgICAgICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBT
ZXR0ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoCisgICAgICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobG9hZGVkVmFsdWVHUFIsIEdldHRlclNl
dHRlcjo6b2Zmc2V0T2ZTZXR0ZXIoKSksCisgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZWRW
YWx1ZUdQUik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
aml0LmxvYWRQdHIoCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MobG9hZGVkVmFsdWVHUFIsIEdldHRlclNldHRlcjo6b2Zmc2V0T2ZHZXR0ZXIoKSksCisgICAg
ICAgICAgICAgICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUik7CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHJldHVyblVuZGVmaW5lZCA9IGpp
dC5icmFuY2hUZXN0UHRyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Olplcm8s
IGxvYWRlZFZhbHVlR1BSKTsKKworICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mUmVn
c0ZvckNhbGwgPSBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgbnVtYmVyT2ZQYXJhbWV0
ZXJzOworCisgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZCeXRlc0ZvckNhbGwgPQor
ICAgICAgICAgICAgICAgICAgICBudW1iZXJPZlJlZ3NGb3JDYWxsICogc2l6ZW9mKFJlZ2lzdGVy
KSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKTsKKworICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2FsbCA9CisgICAgICAgICAgICAgICAgICAgIFdURjo6
cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIG51bWJlck9mQnl0ZXNG
b3JDYWxsKTsKKworICAgICAgICAgICAgICAgIGppdC5zdWJQdHIoCisgICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2Fs
bCksCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0
ZXIpOworCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzIGNhbGxlZUZyYW1l
ID0gQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAtc3RhdGljX2Nh
c3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKKworICAgICAgICAgICAg
ICAgIGppdC5zdG9yZTMyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMihudW1iZXJPZlBhcmFtZXRlcnMpLAorICAgICAgICAgICAgICAgICAgICBjYWxsZWVG
cmFtZS53aXRoT2Zmc2V0KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQgKiBzaXplb2YoUmVnaXN0ZXIp
ICsgUGF5bG9hZE9mZnNldCkpOworCisgICAgICAgICAgICAgICAgaml0LnN0b3JlQ2VsbCgKKyAg
ICAgICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQo
SlNTdGFjazo6Q2FsbGVlICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworCisgICAgICAgICAgICAgICAg
aml0LnN0b3JlQ2VsbCgKKyAgICAgICAgICAgICAgICAgICAgYmFzZUZvckdldEdQUiwKKyAgICAg
ICAgICAgICAgICAgICAgY2FsbGVlRnJhbWUud2l0aE9mZnNldCh2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudCgwKS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpKTsKKworICAgICAgICAgICAg
ICAgIGlmIChtX3R5cGUgPT0gU2V0dGVyKSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5zdG9y
ZVZhbHVlKAorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVSZWdzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgY2FsbGVlRnJhbWUud2l0aE9mZnNldCgKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxKS5vZmZzZXQoKSAqIHNpemVvZihS
ZWdpc3RlcikpKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6Okp1bXAgc2xvd0Nhc2UgPSBqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKAorICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBsb2FkZWRWYWx1ZUdQUiwgYWRkcmVz
c09mTGlua0Z1bmN0aW9uQ2hlY2ssCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cigwKSk7CisKKyAgICAgICAgICAgICAgICBmYXN0UGF0aENhbGwgPSBqaXQu
bmVhckNhbGwoKTsKKworICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoCisgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFsaWduZWROdW1iZXJPZkJ5dGVzRm9y
Q2FsbCksCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVn
aXN0ZXIpOworICAgICAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gR2V0dGVyKQorICAgICAgICAg
ICAgICAgICAgICBqaXQuc2V0dXBSZXN1bHRzKHZhbHVlUmVncyk7CisKKyAgICAgICAgICAgICAg
ICBkb25lLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5saW5r
KCZqaXQpOworCisgICAgICAgICAgICAgICAgaml0Lm1vdmUobG9hZGVkVmFsdWVHUFIsIEdQUklu
Zm86OnJlZ1QwKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICAgICAgICAgIC8vIFdl
ICphbHdheXMqIGtub3cgdGhhdCB0aGUgZ2V0dGVyL3NldHRlciwgaWYgbm9uLW51bGwsIGlzIGEg
Y2VsbC4KKyAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpDZWxsVGFnKSwgR1BSSW5mbzo6cmVnVDEpOworI2VuZGlmCisgICAgICAgICAg
ICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fcmFyZURhdGEtPmNh
bGxMaW5rSW5mby5nZXQoKSksIEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAgICAgICAgICBzbG93
UGF0aENhbGwgPSBqaXQubmVhckNhbGwoKTsKKworICAgICAgICAgICAgICAgIGppdC5hZGRQdHIo
CisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFsaWduZWRO
dW1iZXJPZkJ5dGVzRm9yQ2FsbCksCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gR2V0
dGVyKQorICAgICAgICAgICAgICAgICAgICBqaXQuc2V0dXBSZXN1bHRzKHZhbHVlUmVncyk7CisK
KyAgICAgICAgICAgICAgICBkb25lLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm5VbmRlZmluZWQubGluaygmaml0KTsKKworICAgICAgICAgICAgICAgIGlmIChtX3R5
cGUgPT0gR2V0dGVyKQorICAgICAgICAgICAgICAgICAgICBqaXQubW92ZVRydXN0ZWRWYWx1ZShq
c1VuZGVmaW5lZCgpLCB2YWx1ZVJlZ3MpOworCisgICAgICAgICAgICAgICAgZG9uZS5saW5rKCZq
aXQpOworCisgICAgICAgICAgICAgICAgc3RhdGUuY2FsbGJhY2tzLmFwcGVuZCgKKyAgICAgICAg
ICAgICAgICAgICAgWz0sICZ2bV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1fcmFyZURhdGEtPmNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9u
cygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFy
Q2FsbChzbG93UGF0aENhbGwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZm
ZXIubG9jYXRpb25PZihhZGRyZXNzT2ZMaW5rRnVuY3Rpb25DaGVjayksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoZmFzdFBhdGhDYWxs
KSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluaygKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJh
dG9yKS5jb2RlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIC8vIGdldHRlcjogRW5jb2RlZEpTVmFsdWUgKCpHZXRWYWx1
ZUZ1bmMpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgICAgIC8vIHNldHRlcjogdm9pZCAo
KlB1dFZhbHVlRnVuYykoRXhlY1N0YXRlKiwgSlNPYmplY3QqIGJhc2UsIEVuY29kZWRKU1ZhbHVl
IHRoaXNPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQor
ICAgICAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gQ3VzdG9tR2V0dGVyKSB7CisgICAgICAgICAg
ICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoCisgICAgICAgICAgICAg
ICAgICAgICAgICBiYXNlRm9yQWNjZXNzR1BSLCBiYXNlRm9yR2V0R1BSLAorICAgICAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGlkZW50LmltcGwoKSkpOwor
ICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VGb3JBY2Nlc3NHUFIsIGJhc2VGb3JHZXRHUFIsIHZhbHVl
UmVncy5ncHIoKSk7CisjZWxzZQorICAgICAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gQ3VzdG9t
R2V0dGVyKSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICBiYXNlRm9yQWNjZXNzR1BSLCBiYXNlRm9y
R2V0R1BSLAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6Q2VsbFRhZyksCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoaWRlbnQuaW1wbCgpKSk7CisgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VGb3JBY2Nlc3NHUFIsIGJhc2VGb3JHZXRHUFIs
CisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpDZWxsVGFnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlUmVncy5wYXlsb2Fk
R1BSKCksIHZhbHVlUmVncy50YWdHUFIoKSk7CisgICAgICAgICAgICAgICAgfQorI2VuZGlmCisg
ICAgICAgICAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAm
dm0udG9wQ2FsbEZyYW1lKTsKKworICAgICAgICAgICAgICAgIG9wZXJhdGlvbkNhbGwgPSBqaXQu
Y2FsbCgpOworICAgICAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gQ3VzdG9tR2V0dGVyKQorICAg
ICAgICAgICAgICAgICAgICBqaXQuc2V0dXBSZXN1bHRzKHZhbHVlUmVncyk7CisgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIG5vRXhjZXB0aW9uID0KKyAgICAgICAgICAgICAgICAg
ICAgaml0LmVtaXRFeGNlcHRpb25DaGVjayhDQ2FsbEhlbHBlcnM6OkludmVydGVkRXhjZXB0aW9u
Q2hlY2spOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRz
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmdm0pLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3Rlcik7CisgICAgICAgICAgICAgICAgaGFuZGxlckNhbGwgPSBqaXQuY2FsbCgpOworICAgICAg
ICAgICAgICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBub0V4Y2VwdGlvbi5saW5rKCZqaXQpOworCisgICAgICAgICAgICAgICAg
c3RhdGUuY2FsbGJhY2tzLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVm
ZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxp
bmsob3BlcmF0aW9uQ2FsbCwgRnVuY3Rpb25QdHIobV9yYXJlRGF0YS0+Y3VzdG9tQWNjZXNzb3Iu
b3BhcXVlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoaGFuZGxl
ckNhbGwsIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpOworICAgICAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYXNlIFJlcGxhY2U6IHsKKyAgICAgICAgaWYgKGlz
SW5saW5lT2Zmc2V0KG1fb2Zmc2V0KSkgeworICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUoCisg
ICAgICAgICAgICAgICAgdmFsdWVSZWdzLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
QWRkcmVzcygKKyAgICAgICAgICAgICAgICAgICAgYmFzZUdQUiwKKyAgICAgICAgICAgICAgICAg
ICAgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsKKyAgICAgICAgICAgICAgICAg
ICAgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKG1fb2Zmc2V0KSAqIHNpemVvZihKU1ZhbHVlKSkpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIp
OworICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUoCisgICAgICAgICAgICAgICAgdmFsdWVSZWdz
LAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgICAg
ICAgICAgc2NyYXRjaEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkobV9vZmZzZXQpICogc2l6ZW9mKEpT
VmFsdWUpKSk7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGUuc3VjY2VlZCgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgY2FzZSBUcmFuc2l0aW9uOiB7CisgICAgICAgIC8vIEFjY2Vz
c0Nhc2U6OnRyYW5zaXRpb24oKSBzaG91bGQgaGF2ZSByZXR1cm5lZCBudWxsLgorICAgICAgICBS
RUxFQVNFX0FTU0VSVChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyA+PSA2IHx8ICFzdHJ1Y3R1
cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSB8fCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSA9PSBuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFzdHJ1Y3R1cmUoKS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSk7CisK
KyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKKworICAgICAgICBTY3Jh
dGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHN0dWJJbmZvLnBhdGNoLnVzZWRSZWdpc3Rl
cnMpOworICAgICAgICBhbGxvY2F0b3IubG9jayhiYXNlR1BSKTsKKyAgICAgICAgYWxsb2NhdG9y
LmxvY2sodmFsdWVSZWdzKTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2soc2NyYXRjaEdQUik7CisK
KyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIyID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQ
UigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjM7CisgICAgICAgIGlmIChuZXdTdHJ1Y3R1
cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKQorICAgICAgICAgICAgJiYgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpCisg
ICAgICAgICAgICBzY3JhdGNoR1BSMyA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2NyYXRjaEdQUjMgPSBJbnZhbGlkR1BSUmVnOwor
CisgICAgICAgIHNpemVfdCBudW1iZXJPZlBhZGRpbmdCeXRlcyA9IGFsbG9jYXRvci5wcmVzZXJ2
ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhqaXQpOworCisgICAgICAgIEFTU0VSVChzdHJ1Y3R1
cmUoKS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7CisKKyAg
ICAgICAgYm9vbCBzY3JhdGNoR1BSSGFzU3RvcmFnZSA9IGZhbHNlOworCisgICAgICAgIGlmIChu
ZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSkgeworICAgICAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBuZXdTdHJ1Y3R1
cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKKyAgICAgICAgICAg
IENvcGllZEFsbG9jYXRvciogY29waWVkQWxsb2NhdG9yID0gJnZtLmhlYXAuc3RvcmFnZUFsbG9j
YXRvcigpOworCisgICAgICAgICAgICBpZiAoIXN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0
eSgpKSB7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoJmNvcGllZEFsbG9jYXRvci0+bV9j
dXJyZW50UmVtYWluaW5nLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBzbG93UGF0aC5h
cHBlbmQoCisgICAgICAgICAgICAgICAgICAgIGppdC5icmFuY2hTdWJQdHIoCisgICAgICAgICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlNpZ25lZCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIobmV3U2l6ZSksIHNjcmF0Y2hHUFIpKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmVQ
dHIoc2NyYXRjaEdQUiwgJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKKyAg
ICAgICAgICAgICAgICBqaXQubmVnUHRyKHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGpp
dC5hZGRQdHIoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRy
ZXNzKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQpLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNp
emVvZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0
eSgpICogc2l6ZW9mKEpTVmFsdWUpOworICAgICAgICAgICAgICAgIEFTU0VSVChuZXdTaXplID4g
b2xkU2l6ZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
c2NyYXRjaEdQUjMpOworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKCZjb3BpZWRBbGxvY2F0
b3ItPm1fY3VycmVudFJlbWFpbmluZywgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgc2xv
d1BhdGguYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICBqaXQuYnJhbmNoU3ViUHRyKAorICAg
ICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpTaWduZWQsIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BSKSk7CisgICAgICAgICAgICAgICAgaml0
LnN0b3JlUHRyKHNjcmF0Y2hHUFIsICZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmlu
Zyk7CisgICAgICAgICAgICAgICAgaml0Lm5lZ1B0cihzY3JhdGNoR1BSKTsKKyAgICAgICAgICAg
ICAgICBqaXQuYWRkUHRyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFic29s
dXRlQWRkcmVzcygmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRQYXlsb2FkRW5kKSwgc2NyYXRj
aEdQUik7CisgICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihzaXplb2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICAvLyBX
ZSBoYXZlIHNjcmF0Y2hHUFIgPSBuZXcgc3RvcmFnZSwgc2NyYXRjaEdQUjMgPSBvbGQgc3RvcmFn
ZSwKKyAgICAgICAgICAgICAgICAvLyBzY3JhdGNoR1BSMiA9IGF2YWlsYWJsZQorICAgICAgICAg
ICAgICAgIGZvciAoc2l6ZV90IG9mZnNldCA9IDA7IG9mZnNldCA8IG9sZFNpemU7IG9mZnNldCAr
PSBzaXplb2Yodm9pZCopKSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKAorICAg
ICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2Yodm9pZCopKSksCisgICAgICAgICAg
ICAgICAgICAgICAgICBzY3JhdGNoR1BSMik7CisgICAgICAgICAgICAgICAgICAgIGppdC5zdG9y
ZVB0cigKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNjcmF0Y2hHUFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLXN0YXRpY19j
YXN0PHB0cmRpZmZfdD4ob2Zmc2V0ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkp
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGppdC5z
dG9yZVB0cihzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7CisgICAgICAgICAgICBzY3JhdGNoR1BSSGFzU3RvcmFn
ZSA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICB1aW50MzJfdCBzdHJ1Y3R1cmVCaXRzID0g
Yml0d2lzZV9jYXN0PHVpbnQzMl90PihuZXdTdHJ1Y3R1cmUoKS0+aWQoKSk7CisgICAgICAgIGpp
dC5zdG9yZTMyKAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RydWN0
dXJlQml0cyksCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlND
ZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CisKKyAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0
KG1fb2Zmc2V0KSkgeworICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUoCisgICAgICAgICAgICAg
ICAgdmFsdWVSZWdzLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAg
ICAgICAgICAgICAgICAgICAgYmFzZUdQUiwKKyAgICAgICAgICAgICAgICAgICAgSlNPYmplY3Q6
Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0SW5J
bmxpbmVTdG9yYWdlKG1fb2Zmc2V0KSAqIHNpemVvZihKU1ZhbHVlKSkpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgaWYgKCFzY3JhdGNoR1BSSGFzU3RvcmFnZSkKKyAgICAgICAgICAg
ICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6
OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBqaXQuc3RvcmVW
YWx1ZSgKKyAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MsCisgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldEluQnV0dGVyZmx5KG1fb2Zmc2V0KSAq
IHNpemVvZihKU1ZhbHVlKSkpOworICAgICAgICB9CisKKyAgICAgICAgU2NyYXRjaEJ1ZmZlciog
c2NyYXRjaEJ1ZmZlciA9IG51bGxwdHI7CisgICAgICAgIGlmIChuZXdTdHJ1Y3R1cmUoKS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSAhPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkKKyAg
ICAgICAgICAgIHNjcmF0Y2hCdWZmZXIgPSB2bS5zY3JhdGNoQnVmZmVyRm9yU2l6ZShhbGxvY2F0
b3IuZGVzaXJlZFNjcmF0Y2hCdWZmZXJTaXplRm9yQ2FsbCgpKTsKKworI2lmIEVOQUJMRShHR0Mp
CisgICAgICAgIGlmIChuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBzdHJ1
Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgeworICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpDYWxsIGNhbGxGbHVzaFdyaXRlQmFycmllckJ1ZmZlcjsKKyAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gaml0Lmp1bXBJZklzUmVtZW1i
ZXJlZE9ySW5FZGVuKGJhc2VHUFIpOworICAgICAgICAgICAgV3JpdGVCYXJyaWVyQnVmZmVyJiB3
cml0ZUJhcnJpZXJCdWZmZXIgPSBqaXQudm0oKS0+aGVhcC53cml0ZUJhcnJpZXJCdWZmZXIoKTsK
KyAgICAgICAgICAgIGppdC5sb2FkMzIod3JpdGVCYXJyaWVyQnVmZmVyLmN1cnJlbnRJbmRleEFk
ZHJlc3MoKSwgc2NyYXRjaEdQUjIpOworICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIG5l
ZWRUb0ZsdXNoID0KKyAgICAgICAgICAgICAgICBqaXQuYnJhbmNoMzIoCisgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBzY3JhdGNoR1BSMiwKKyAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIod3JpdGVCYXJyaWVyQnVmZmVy
LmNhcGFjaXR5KCkpKTsKKworICAgICAgICAgICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKDEpLCBzY3JhdGNoR1BSMik7CisgICAgICAgICAgICBqaXQuc3RvcmUzMihzY3Jh
dGNoR1BSMiwgd3JpdGVCYXJyaWVyQnVmZmVyLmN1cnJlbnRJbmRleEFkZHJlc3MoKSk7CisKKyAg
ICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih3cml0ZUJhcnJp
ZXJCdWZmZXIuYnVmZmVyKCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIC8vIFdlIHVzZSBh
biBvZmZzZXQgb2YgLXNpemVvZih2b2lkKikgYmVjYXVzZSB3ZSBhbHJlYWR5IGFkZGVkIDEgdG8g
c2NyYXRjaEdQUjIuCisgICAgICAgICAgICBqaXQuc3RvcmVQdHIoCisgICAgICAgICAgICAgICAg
YmFzZUdQUiwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleCgKKyAgICAg
ICAgICAgICAgICAgICAgc2NyYXRjaEdQUiwgc2NyYXRjaEdQUjIsIENDYWxsSGVscGVyczo6U2Nh
bGVQdHIsCisgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KC1zaXplb2Yo
dm9pZCopKSkpOworCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZVdpdGhCYXJy
aWVyID0gaml0Lmp1bXAoKTsKKyAgICAgICAgICAgIG5lZWRUb0ZsdXNoLmxpbmsoJmppdCk7CisK
KyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5
UG9wcGluZygpIGJlZm9yZSB0aGlzLiBUaGVuLCB3ZSB3b3VsZG4ndCBuZWVkCisgICAgICAgICAg
ICAvLyBwYWRkaW5nIGluIHByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKCkuIE9yLCBt
YXliZSBpdCB3b3VsZCBiZSBldmVuIGJldHRlciBpZiB0aGUKKyAgICAgICAgICAgIC8vIGJhcnJp
ZXIgc2xvdyBwYXRoIHdhcyBqdXN0IHRoZSBub3JtYWwgc2xvdyBwYXRoLCBiZWxvdy4KKyAgICAg
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDkwMzAK
KyAgICAgICAgICAgIGFsbG9jYXRvci5wcmVzZXJ2ZVVzZWRSZWdpc3RlcnNUb1NjcmF0Y2hCdWZm
ZXJGb3JDYWxsKGppdCwgc2NyYXRjaEJ1ZmZlciwgc2NyYXRjaEdQUjIpOworICAgICAgICAgICAg
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlR1BSKTsKKyAgICAgICAgICAgIGNh
bGxGbHVzaFdyaXRlQmFycmllckJ1ZmZlciA9IGppdC5jYWxsKCk7CisgICAgICAgICAgICBhbGxv
Y2F0b3IucmVzdG9yZVVzZWRSZWdpc3RlcnNGcm9tU2NyYXRjaEJ1ZmZlckZvckNhbGwoCisgICAg
ICAgICAgICAgICAgaml0LCBzY3JhdGNoQnVmZmVyLCBzY3JhdGNoR1BSMik7CisKKyAgICAgICAg
ICAgIGRvbmVXaXRoQmFycmllci5saW5rKCZqaXQpOworICAgICAgICAgICAgb3duZXJJc1JlbWVt
YmVyZWRPckluRWRlbi5saW5rKCZqaXQpOworCisgICAgICAgICAgICBzdGF0ZS5jYWxsYmFja3Mu
YXBwZW5kKAorICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewor
ICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbEZsdXNoV3JpdGVCYXJyaWVy
QnVmZmVyLCBvcGVyYXRpb25GbHVzaFdyaXRlQmFycmllckJ1ZmZlcik7CisgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoR0dDKQorICAgICAgICAKKyAgICAg
ICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBudW1iZXJP
ZlBhZGRpbmdCeXRlcyk7CisgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKKworICAgICAgICBpZiAo
bmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlKCktPm91dE9m
TGluZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7CisgICAg
ICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIG51
bWJlck9mUGFkZGluZ0J5dGVzKTsKKyAgICAgICAgICAgIGFsbG9jYXRvci5wcmVzZXJ2ZVVzZWRS
ZWdpc3RlcnNUb1NjcmF0Y2hCdWZmZXJGb3JDYWxsKGppdCwgc2NyYXRjaEJ1ZmZlciwgc2NyYXRj
aEdQUik7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoCisgICAgICAgICAgICAgICAgYmFzZUdQUiwKKyAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobmV3U3RydWN0dXJlKCkpLAorICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG1fb2Zmc2V0KSwKKyAgICAgICAgICAg
ICAgICB2YWx1ZVJlZ3MuZ3ByKCkpOworI2Vsc2UKKyAgICAgICAgICAgIGppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoCisgICAgICAgICAgICAgICAgYmFzZUdQUiwKKyAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobmV3U3RydWN0dXJlKCkpLAorICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG1fb2Zmc2V0KSwKKyAgICAgICAg
ICAgICAgICB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB2YWx1ZVJlZ3MudGFnR1BSKCkpOworI2Vu
ZGlmCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9uQ2FsbCA9IGppdC5j
YWxsKCk7CisgICAgICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVVzZWRSZWdpc3RlcnNGcm9tU2Ny
YXRjaEJ1ZmZlckZvckNhbGwoaml0LCBzY3JhdGNoQnVmZmVyLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKKworICAgICAgICAgICAgc3RhdGUuY2FsbGJhY2tzLmFw
cGVuZCgKKyAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAg
ICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIG9wZXJhdGlv
blJlYWxsb2NhdGVTdG9yYWdlQW5kRmluaXNoUHV0KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2FzZSBBcnJheUxlbmd0aDog
eworICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGppdC5sb2Fk
MzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3Ro
T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBl
bmQoCisgICAgICAgICAgICBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpMZXNzVGhhbiwgc2Ny
YXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgaml0LmJv
eEludDMyKHNjcmF0Y2hHUFIsIHZhbHVlUmVncyk7CisgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNhc2UgU3RyaW5nTGVuZ3RoOiB7CisgICAg
ICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTU3RyaW5nOjpv
ZmZzZXRPZkxlbmd0aCgpKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSk7CisgICAgICAgIGppdC5i
b3hJbnQzMih2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB2YWx1ZVJlZ3MpOworICAgICAgICBzdGF0
ZS5zdWNjZWVkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9IH0KICAgICAKLSAgICByZXR1cm4g
cmVzdWx0OworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLVBvbHltb3Jw
aGljR2V0QnlJZExpc3Q6On5Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0KCkgeyB9CitQb2x5bW9ycGhp
Y0FjY2Vzczo6UG9seW1vcnBoaWNBY2Nlc3MoKSB7IH0KK1BvbHltb3JwaGljQWNjZXNzOjp+UG9s
eW1vcnBoaWNBY2Nlc3MoKSB7IH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIFBvbHltb3JwaGlj
R2V0QnlJZExpc3Q6OmN1cnJlbnRTbG93UGF0aFRhcmdldCgKLSAgICBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8pIGNvbnN0CitNYWNyb0Fzc2VtYmxlckNvZGVQdHIgUG9seW1vcnBoaWNBY2Nl
c3M6OnJlZ2VuZXJhdGVXaXRoQ2FzZXMoCisgICAgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwK
KyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+PiBvcmlnaW5hbENhc2VzVG9B
ZGQpCiB7Ci0gICAgaWYgKGlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xv
d0Nhc2UpOwotICAgIHJldHVybiBtX2xpc3QubGFzdCgpLnN0dWJSb3V0aW5lKCktPmNvZGUoKS5j
b2RlKCk7CisgICAgLy8gVGhpcyBtZXRob2Qgd2lsbCBhZGQgdGhlIG9yaWdpbmFsQ2FzZXNUb0Fk
ZCB0byB0aGUgbGlzdCBvbmUgYXQgYSB0aW1lIHdoaWxlIHByZXNlcnZpbmcgdGhlCisgICAgLy8g
aW52YXJpYW50czoKKyAgICAvLyAtIElmIGEgbmV3bHkgYWRkZWQgY2FzZSBjYW5SZXBsYWNlKCkg
YW55IGV4aXN0aW5nIGNhc2UsIHRoZW4gdGhlIGV4aXN0aW5nIGNhc2UgaXMgcmVtb3ZlZCBiZWZv
cmUKKyAgICAvLyAgIHRoZSBuZXcgY2FzZSBpcyBhZGRlZC4gUmVtb3ZhbCBkb2Vzbid0IGNoYW5n
ZSBvcmRlciBvZiB0aGUgbGlzdC4gQW55IG51bWJlciBvZiBleGlzdGluZyBjYXNlcworICAgIC8v
ICAgY2FuIGJlIHJlbW92ZWQgdmlhIHRoZSBjYW5SZXBsYWNlKCkgcnVsZS4KKyAgICAvLyAtIENh
c2VzIGluIHRoZSBsaXN0IGFsd2F5cyBhcHBlYXIgaW4gYXNjZW5kaW5nIG9yZGVyIG9mIHRpbWUg
b2YgYWRkaXRpb24uIFRoZXJlZm9yZSwgaWYgeW91CisgICAgLy8gICBjYXNjYWRlIHRocm91Z2gg
dGhlIGNhc2VzIGluIHJldmVyc2Ugb3JkZXIsIHlvdSB3aWxsIGdldCB0aGUgbW9zdCByZWNlbnQg
Y2FzZXMgZmlyc3QuCisgICAgLy8gLSBJZiB0aGlzIG1ldGhvZCBmYWlscyAocmV0dXJucyBudWxs
LCBkb2Vzbid0IGFkZCB0aGUgY2FzZXMpLCB0aGVuIGJvdGggdGhlIHByZXZpb3VzIGNhc2UgbGlz
dAorICAgIC8vICAgYW5kIHRoZSBwcmV2aW91cyBzdHViIGFyZSBrZXB0IGludGFjdCBhbmQgdGhl
IG5ldyBjYXNlcyBhcmUgZGVzdHJveWVkLiBJdCdzIE9LIHRvIGF0dGVtcHQgdG8KKyAgICAvLyAg
IGFkZCBtb3JlIHRoaW5ncyBhZnRlciBmYWlsdXJlLgorICAgIAorICAgIC8vIEZpcnN0LCB2ZXJp
ZnkgdGhhdCB3ZSBjYW4gZ2VuZXJhdGUgY29kZSBmb3IgYWxsIG9mIHRoZSBuZXcgY2FzZXMgd2hp
bGUgZWxpbWluYXRpbmcgYW55IG9mIHRoZQorICAgIC8vIG5ldyBjYXNlcyB0aGF0IHJlcGxhY2Ug
ZWFjaCBvdGhlci4KKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+PiBjYXNl
c1RvQWRkOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvcmlnaW5hbENhc2VzVG9BZGQu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IG15Q2Fz
ZSA9IFdURjo6bW92ZShvcmlnaW5hbENhc2VzVG9BZGRbaV0pOworCisgICAgICAgIC8vIEFkZCBp
dCBvbmx5IGlmIGl0IGlzIG5vdCByZXBsYWNlZCBieSB0aGUgc3Vic2VxdWVudCBjYXNlcyBpbiB0
aGUgbGlzdC4KKyAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGogPSBpICsgMTsgaiA8IG9yaWdpbmFsQ2FzZXNUb0FkZC5zaXplKCk7ICsraikgeworICAg
ICAgICAgICAgaWYgKG9yaWdpbmFsQ2FzZXNUb0FkZFtqXS0+Y2FuUmVwbGFjZSgqbXlDYXNlKSkg
eworICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChmb3VuZCkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgaWYgKG15Q2FzZS0+ZG9lc0NhbGxzKCkg
JiYgc3R1YkluZm8ucGF0Y2guc3BpbGxNb2RlID09IE5lZWRUb1NwaWxsKQorICAgICAgICAgICAg
cmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOworCisgICAgICAgIGNhc2VzVG9BZGQuYXBw
ZW5kKFdURjo6bW92ZShteUNhc2UpKTsKKyAgICB9CisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAg
ICAgZGF0YUxvZygiY2FzZXNUb0FkZDogIiwgbGlzdER1bXAoY2FzZXNUb0FkZCksICJcbiIpOwor
CisgICAgLy8gSWYgdGhlcmUgYXJlbid0IGFueSBjYXNlcyB0byBhZGQsIHRoZW4gZmFpbCBvbiB0
aGUgZ3JvdW5kcyB0aGF0IHRoZXJlJ3Mgbm8gcG9pbnQgdG8gZ2VuZXJhdGluZyBhCisgICAgLy8g
bmV3IHN0dWIgdGhhdCB3aWxsIGJlIGlkZW50aWNhbCB0byB0aGUgb2xkIG9uZS4gUmV0dXJuaW5n
IG51bGwgc2hvdWxkIHRlbGwgdGhlIGNhbGxlciB0byBqdXN0CisgICAgLy8ga2VlcCBkb2luZyB3
aGF0IHRoZXkgd2VyZSBkb2luZyBiZWZvcmUuCisgICAgaWYgKGNhc2VzVG9BZGQuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7CisKKyAgICAvLyBOb3cg
Y29uc3RydWN0IHRoZSBsaXN0IG9mIGNhc2VzIGFzIHRoZXkgc2hvdWxkIGFwcGVhciBpZiB3ZSBh
cmUgc3VjY2Vzc2Z1bC4gVGhpcyBtZWFucyBwdXR0aW5nCisgICAgLy8gYWxsIG9mIHRoZSBwcmV2
aW91cyBjYXNlcyBpbiB0aGlzIGxpc3QgaW4gb3JkZXIgYnV0IGV4Y2x1ZGluZyB0aG9zZSB0aGF0
IGNhbiBiZSByZXBsYWNlZCwgYW5kCisgICAgLy8gdGhlbiBhZGRpbmcgdGhlIG5ldyBjYXNlcy4K
KyAgICBMaXN0VHlwZSBuZXdDYXNlczsKKyAgICBmb3IgKGF1dG8mIG9sZENhc2UgOiBtX2xpc3Qp
IHsKKyAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICBmb3IgKGF1dG8mIGNhc2VU
b0FkZCA6IGNhc2VzVG9BZGQpIHsKKyAgICAgICAgICAgIGlmIChjYXNlVG9BZGQtPmNhblJlcGxh
Y2UoKm9sZENhc2UpKSB7CisgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghZm91
bmQpCisgICAgICAgICAgICBuZXdDYXNlcy5hcHBlbmQob2xkQ2FzZS0+Y2xvbmUoKSk7CisgICAg
fQorICAgIGZvciAoYXV0byYgY2FzZVRvQWRkIDogY2FzZXNUb0FkZCkKKyAgICAgICAgbmV3Q2Fz
ZXMuYXBwZW5kKFdURjo6bW92ZShjYXNlVG9BZGQpKTsKKworICAgIGlmICh2ZXJib3NlKQorICAg
ICAgICBkYXRhTG9nKCJuZXdDYXNlczogIiwgbGlzdER1bXAobmV3Q2FzZXMpLCAiXG4iKTsKKwor
ICAgIGlmIChuZXdDYXNlcy5zaXplKCkgPiBPcHRpb25zOjptYXhBY2Nlc3NWYXJpYW50TGlzdFNp
emUoKSkgeworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIlRvbyBt
YW55IGNhc2VzLlxuIik7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsK
KyAgICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVzdWx0ID0gcmVnZW5lcmF0ZSh2
bSwgY29kZUJsb2NrLCBzdHViSW5mbywgaWRlbnQsIG5ld0Nhc2VzKTsKKyAgICBpZiAoIXJlc3Vs
dCkKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOworCisgICAgbV9saXN0
ID0gV1RGOjptb3ZlKG5ld0Nhc2VzKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFBv
bHltb3JwaGljR2V0QnlJZExpc3Q6OmFkZEFjY2Vzcyhjb25zdCBHZXRCeUlkQWNjZXNzJiBhY2Nl
c3MpCitNYWNyb0Fzc2VtYmxlckNvZGVQdHIgUG9seW1vcnBoaWNBY2Nlc3M6OnJlZ2VuZXJhdGVX
aXRoQ2FzZSgKKyAgICBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8sIGNvbnN0IElkZW50aWZpZXImIGlkZW50LAorICAgIHN0ZDo6dW5pcXVl
X3B0cjxBY2Nlc3NDYXNlPiBuZXdBY2Nlc3MpCiB7Ci0gICAgQVNTRVJUKCFpc0Z1bGwoKSk7Ci0g
ICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHJlc2l6aW5nIG9wdGltaXplcyBmb3Igc3BhY2UsIG5v
dCB0aW1lLgotICAgIG1fbGlzdC5yZXNpemVUb0ZpdChtX2xpc3Quc2l6ZSgpICsgMSk7Ci0gICAg
bV9saXN0Lmxhc3QoKSA9IGFjY2VzczsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFjY2Vz
c0Nhc2U+PiBuZXdBY2Nlc3NlczsKKyAgICBuZXdBY2Nlc3Nlcy5hcHBlbmQoV1RGOjptb3ZlKG5l
d0FjY2VzcykpOworICAgIHJldHVybiByZWdlbmVyYXRlV2l0aENhc2VzKHZtLCBjb2RlQmxvY2ss
IHN0dWJJbmZvLCBpZGVudCwgV1RGOjptb3ZlKG5ld0FjY2Vzc2VzKSk7CiB9CiAKLWJvb2wgUG9s
eW1vcnBoaWNHZXRCeUlkTGlzdDo6aXNGdWxsKCkgY29uc3QKK2Jvb2wgUG9seW1vcnBoaWNBY2Nl
c3M6OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0CiB7Ci0gICAgQVNTRVJUKHNpemUoKSA8PSBQT0xZ
TU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpOwotICAgIHJldHVybiBzaXplKCkgPT0gUE9MWU1PUlBI
SUNfTElTVF9DQUNIRV9TSVpFOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplKCk7
ICsraSkgeworICAgICAgICBpZiAoIWF0KGkpLnZpc2l0V2Vhayh2bSkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFBvbHltb3Jw
aGljR2V0QnlJZExpc3Q6OmlzQWxtb3N0RnVsbCgpIGNvbnN0Cit2b2lkIFBvbHltb3JwaGljQWNj
ZXNzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKHNpemUoKSA8
PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpOwotICAgIHJldHVybiBzaXplKCkgPj0gUE9M
WU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIC0gMTsKKyAgICBvdXQucHJpbnQoUmF3UG9pbnRlcih0
aGlzKSwgIjpbIik7CisgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgIGZvciAoYXV0byYgZW50
cnkgOiBtX2xpc3QpCisgICAgICAgIG91dC5wcmludChjb21tYSwgKmVudHJ5KTsKKyAgICBvdXQu
cHJpbnQoIl0iKTsKIH0KIAotYm9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpkaWRTZWxmUGF0
Y2hpbmcoKSBjb25zdAorTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIFBvbHltb3JwaGljQWNjZXNzOjpy
ZWdlbmVyYXRlKAorICAgIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbywgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsCisgICAgUG9seW1vcnBo
aWNBY2Nlc3M6Okxpc3RUeXBlJiBjYXNlcykKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXpl
KCk7IGktLTspIHsKLSAgICAgICAgaWYgKGF0KGkpLnR5cGUoKSA9PSBHZXRCeUlkQWNjZXNzOjpT
aW1wbGVJbmxpbmUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAodmVyYm9zZSkK
KyAgICAgICAgZGF0YUxvZygiR2VuZXJhdGluZyBjb2RlIGZvciBjYXNlczogIiwgbGlzdER1bXAo
Y2FzZXMpLCAiXG4iKTsKKyAgICAKKyAgICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUgc3RhdGU7CisK
KyAgICBzdGF0ZS5hY2Nlc3MgPSB0aGlzOworICAgIHN0YXRlLnN0dWJJbmZvID0gJnN0dWJJbmZv
OworICAgIHN0YXRlLmlkZW50ID0gJmlkZW50OworICAgIAorICAgIHN0YXRlLmJhc2VHUFIgPSBz
dGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmJhc2VHUFIpOworICAgIHN0YXRlLnZh
bHVlUmVncyA9IEpTVmFsdWVSZWdzKAorI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIHN0
YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVUYWdHUFIpLAorI2VuZGlmCisg
ICAgICAgIHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVHUFIpKTsKKwor
ICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1YkluZm8ucGF0Y2gudXNl
ZFJlZ2lzdGVycyk7CisgICAgc3RhdGUuYWxsb2NhdG9yID0gJmFsbG9jYXRvcjsKKyAgICBhbGxv
Y2F0b3IubG9jayhzdGF0ZS5iYXNlR1BSKTsKKyAgICBhbGxvY2F0b3IubG9jayhzdGF0ZS52YWx1
ZVJlZ3MpOworCisgICAgc3RhdGUuc2NyYXRjaEdQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0
Y2hHUFIoKTsKKyAgICAKKyAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSwgY29kZUJsb2NrKTsKKyAg
ICBzdGF0ZS5qaXQgPSAmaml0OworCisgICAgc3RhdGUubnVtYmVyT2ZQYWRkaW5nQnl0ZXMgPSBh
bGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0KTsKKworICAgIGJv
b2wgYWxsR3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2sgPSB0cnVlOworICAgIGZvciAoYXV0byYgZW50
cnkgOiBjYXNlcykKKyAgICAgICAgYWxsR3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2sgJj0gZW50cnkt
Pmd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrKCk7CisKKyAgICBpZiAoY2FzZXMuaXNFbXB0eSgpKSB7
CisgICAgICAgIC8vIFRoaXMgaXMgc3VwZXIgdW5saWtlbHksIGJ1dCB3ZSBtYWtlIGl0IGxlZ2Fs
IGFueXdheS4KKyAgICAgICAgc3RhdGUuZmFpbEFuZFJlcGF0Y2guYXBwZW5kKGppdC5qdW1wKCkp
OworICAgIH0gZWxzZSBpZiAoIWFsbEd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrIHx8IGNhc2VzLnNp
emUoKSA9PSAxKSB7CisgICAgICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgcHJveGllcyBpbiB0aGUg
bGlzdCwgd2UgY2Fubm90IGp1c3QgdXNlIGEgYmluYXJ5IHN3aXRjaCBvdmVyIHRoZSBzdHJ1Y3R1
cmUuCisgICAgICAgIC8vIFdlIG5lZWQgdG8gcmVzb3J0IHRvIGEgY2FzY2FkZS4gQSBjYXNjYWRl
IGFsc28gaGFwcGVucyB0byBiZSBvcHRpbWFsIGlmIHdlIG9ubHkgaGF2ZSBqdXN0CisgICAgICAg
IC8vIG9uZSBjYXNlLgorICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGZhbGxUaHJvdWdo
OworCisgICAgICAgIC8vIENhc2NhZGUgdGhyb3VnaCB0aGUgbGlzdCwgcHJlZmVycmluZyBuZXdl
ciBlbnRyaWVzLgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjYXNlcy5zaXplKCk7IGktLTsp
IHsKKyAgICAgICAgICAgIGZhbGxUaHJvdWdoLmxpbmsoJmppdCk7CisgICAgICAgICAgICBjYXNl
c1tpXS0+Z2VuZXJhdGVXaXRoR3VhcmQoc3RhdGUsIGZhbGxUaHJvdWdoKTsKKyAgICAgICAgfQor
ICAgICAgICBzdGF0ZS5mYWlsQW5kUmVwYXRjaC5hcHBlbmQoZmFsbFRocm91Z2gpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGppdC5sb2FkMzIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3Moc3RhdGUuYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAg
ICAgICAgIHN0YXRlLnNjcmF0Y2hHUFIpOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPGludDY0
X3Q+IGNhc2VWYWx1ZXMoY2FzZXMuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGNhc2VzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgY2FzZVZhbHVlc1tpXSA9IGJp
dHdpc2VfY2FzdDxpbnQzMl90PihjYXNlc1tpXS0+c3RydWN0dXJlKCktPmlkKCkpOworICAgICAg
ICAKKyAgICAgICAgQmluYXJ5U3dpdGNoIGJpbmFyeVN3aXRjaChzdGF0ZS5zY3JhdGNoR1BSLCBj
YXNlVmFsdWVzLCBCaW5hcnlTd2l0Y2g6OkludDMyKTsKKyAgICAgICAgd2hpbGUgKGJpbmFyeVN3
aXRjaC5hZHZhbmNlKGppdCkpCisgICAgICAgICAgICBjYXNlc1tiaW5hcnlTd2l0Y2guY2FzZUlu
ZGV4KCldLT5nZW5lcmF0ZShzdGF0ZSk7CisgICAgICAgIHN0YXRlLmZhaWxBbmRSZXBhdGNoLmFw
cGVuZChiaW5hcnlTd2l0Y2guZmFsbFRocm91Z2goKSk7CisgICAgfQorCisgICAgc3RhdGUuZmFp
bEFuZElnbm9yZS5saW5rKCZqaXQpOworCisgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGlubGlu
ZSBjYWNoZSBvcHRpbWl6YXRpb24gY29kZSBrbm93cyB0aGF0IHdlIGFyZSB0YWtpbmcgc2xvdyBw
YXRoIGJlY2F1c2UKKyAgICAvLyBvZiBzb21ldGhpbmcgdGhhdCBpc24ndCBwYXRjaGFibGUuICJz
ZWVuIiBiZWluZyBmYWxzZSBtZWFucyB0aGF0IHdlIGJ5cGFzcyBwYXRjaGluZy4gVGhpcyBpcwor
ICAgIC8vIHByZXR0eSBncm9zcyBidXQgaXQgbWVhbnMgdGhhdCB3ZSBkb24ndCBuZWVkIHRvIGhh
dmUgdHdvIHNsb3cgcGF0aCBlbnRyeXBvaW50cyAtIG9uZSBmb3IKKyAgICAvLyBwYXRjaGluZyBh
bmQgb25lIGZvciBub3JtYWwgc2xvdyBzdHVmZi4KKyAgICBqaXQuc3RvcmU4KENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKGZhbHNlKSwgJnN0dWJJbmZvLnNlZW4pOworCisgICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wTGlzdCBmYWlsdXJlOworICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdpc3Rl
cnMoKSkgeworICAgICAgICBzdGF0ZS5mYWlsQW5kUmVwYXRjaC5saW5rKCZqaXQpOworICAgICAg
ICBzdGF0ZS5yZXN0b3JlU2NyYXRjaCgpOworICAgIH0gZWxzZQorICAgICAgICBmYWlsdXJlID0g
c3RhdGUuZmFpbEFuZFJlcGF0Y2g7CisgICAgZmFpbHVyZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisK
KyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIodm0sIGppdCwgY29kZUJsb2NrLCBKSVRDb21waWxh
dGlvbkNhbkZhaWwpOworICAgIGlmIChsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpIHsK
KyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCJEaWQgZmFpbCB0byBh
bGxvY2F0ZS5cbiIpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7CiAg
ICAgfQotICAgIHJldHVybiBmYWxzZTsKKworICAgIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NM
YWJlbCA9CisgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0
KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSk7CisgICAgICAgIAorICAgIGxpbmtCdWZm
ZXIubGluayhzdGF0ZS5zdWNjZXNzLCBzdWNjZXNzTGFiZWwpOworCisgICAgbGlua0J1ZmZlci5s
aW5rKAorICAgICAgICBmYWlsdXJlLAorICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7Cisg
ICAgCisgICAgZm9yIChhdXRvIGNhbGxiYWNrIDogc3RhdGUuY2FsbGJhY2tzKQorICAgICAgICBj
YWxsYmFjayhsaW5rQnVmZmVyKTsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29k
ZSA9IEZJTkFMSVpFX0NPREVfRk9SKAorICAgICAgICBjb2RlQmxvY2ssIGxpbmtCdWZmZXIsCisg
ICAgICAgICgiJXMiLCB0b0NTdHJpbmcoIkFjY2VzcyBzdHViIGZvciAiLCAqY29kZUJsb2NrLCAi
ICIsIHN0dWJJbmZvLmNvZGVPcmlnaW4sICIgd2l0aCByZXR1cm4gcG9pbnQgIiwgc3VjY2Vzc0xh
YmVsLCAiOiAiLCBsaXN0RHVtcChjYXNlcykpLmRhdGEoKSkpOworCisgICAgYm9vbCBkb2VzQ2Fs
bHMgPSBmYWxzZTsKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogY2FzZXMpCisgICAgICAgIGRvZXND
YWxscyB8PSBlbnRyeS0+ZG9lc0NhbGxzKCk7CisgICAgCisgICAgbV9zdHViUm91dGluZSA9IGNy
ZWF0ZUpJVFN0dWJSb3V0aW5lKGNvZGUsIHZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
LCBkb2VzQ2FsbHMpOworICAgIG1fd2F0Y2hwb2ludHMgPSBXVEY6Om1vdmUoc3RhdGUud2F0Y2hw
b2ludHMpOworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJSZXR1cm5pbmc6ICIs
IGNvZGUuY29kZSgpLCAiXG4iKTsKKyAgICByZXR1cm4gY29kZS5jb2RlKCk7CiB9CiAKLWJvb2wg
UG9seW1vcnBoaWNHZXRCeUlkTGlzdDo6dmlzaXRXZWFrKFZNJiB2bSkgY29uc3QKK30gLy8gbmFt
ZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKwor
dm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEFjY2Vzc0Nhc2U6OkFjY2Vzc1R5
cGUgdHlwZSkKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXplKCk7IGktLTspIHsKLSAgICAg
ICAgaWYgKCFhdChpKS52aXNpdFdlYWsodm0pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgQWNjZXNzQ2FzZTo6TG9hZDoKKyAgICAgICAg
b3V0LnByaW50KCJMb2FkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6
OlRyYW5zaXRpb246CisgICAgICAgIG91dC5wcmludCgiVHJhbnNpdGlvbiIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpSZXBsYWNlOgorICAgICAgICBvdXQucHJpbnQo
IlJlcGxhY2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6TWlzczoK
KyAgICAgICAgb3V0LnByaW50KCJNaXNzIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFj
Y2Vzc0Nhc2U6OkdldHRlcjoKKyAgICAgICAgb3V0LnByaW50KCJHZXR0ZXIiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6U2V0dGVyOgorICAgICAgICBvdXQucHJpbnQo
IlNldHRlciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpDdXN0b21H
ZXR0ZXI6CisgICAgICAgIG91dC5wcmludCgiQ3VzdG9tR2V0dGVyIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEFjY2Vzc0Nhc2U6OkN1c3RvbVNldHRlcjoKKyAgICAgICAgb3V0LnByaW50
KCJDdXN0b21TZXR0ZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNzQ2FzZTo6
SW5IaXQ6CisgICAgICAgIG91dC5wcmludCgiSW5IaXQiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgQWNjZXNzQ2FzZTo6SW5NaXNzOgorICAgICAgICBvdXQucHJpbnQoIkluTWlzcyIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NDYXNlOjpBcnJheUxlbmd0aDoKKyAgICAg
ICAgb3V0LnByaW50KCJBcnJheUxlbmd0aCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBB
Y2Nlc3NDYXNlOjpTdHJpbmdMZW5ndGg6CisgICAgICAgIG91dC5wcmludCgiU3RyaW5nTGVuZ3Ro
Iik7CisgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgcmV0dXJuIHRydWU7CisKKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi19IC8vIG5hbWVzcGFjZSBKU0MKK30gLy8g
bmFtZXNwYWNlIFdURgogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgJKHJldmlz
aW9uIDE4OTMyNCkJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3Jw
aGljR2V0QnlJZExpc3QuaDoxODkzMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIFBvbHltb3JwaGljR2V0QnlJZExpc3RfaAorI2RlZmluZSBQb2x5bW9ycGhpY0dldEJ5SWRM
aXN0X2gKKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCisjaW5j
bHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldC5oIgorI2luY2x1ZGUgIk9wY29kZS5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVCbG9j
azsKK3N0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbzsKKworY2xhc3MgR2V0QnlJZEFjY2VzcyB7Citw
dWJsaWM6CisgICAgZW51bSBBY2Nlc3NUeXBlIHsKKyAgICAgICAgSW52YWxpZCwKKyAgICAgICAg
U2ltcGxlSW5saW5lLCAvLyBUaGlzIGlzIHRoZSBwYXRjaGVkIGlubGluZSBhY2Nlc3MuCisgICAg
ICAgIFNpbXBsZVN0dWIsIC8vIFRoaXMgaXMgYSBzdHViLgorICAgICAgICBXYXRjaGVkU3R1YiwK
KyAgICAgICAgR2V0dGVyLAorICAgICAgICBDdXN0b21HZXR0ZXIsCisgICAgICAgIFNpbXBsZU1p
c3MsCisgICAgfTsKKyAgICAKKyAgICBHZXRCeUlkQWNjZXNzKCkKKyAgICAgICAgOiBtX3R5cGUo
SW52YWxpZCkKKyAgICB7CisgICAgfQorICAgIAorICAgIEdldEJ5SWRBY2Nlc3MoCisgICAgICAg
IFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGlu
ZT4sIFN0cnVjdHVyZSosCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCkpOworICAgIAorICAgIH5HZXRCeUlkQWNj
ZXNzKCk7CisgICAgCisgICAgc3RhdGljIEdldEJ5SWRBY2Nlc3MgZnJvbVN0cnVjdHVyZVN0dWJJ
bmZvKFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAgCisgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsg
cmV0dXJuIG1fdHlwZSAhPSBJbnZhbGlkOyB9CisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7
IHJldHVybiAhaXNTZXQoKTsgfQorICAgIAorICAgIEFjY2Vzc1R5cGUgdHlwZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdHlwZTsgfQorICAgIAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3Qg
eyByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7IH0KKyAgICAKKyAgICBjb25zdCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRp
b25TZXQ7IH0KKyAgICAKKyAgICBKSVRTdHViUm91dGluZSogc3R1YlJvdXRpbmUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGlzU2V0KCkpOworICAgICAgICByZXR1cm4gbV9zdHViUm91
dGluZS5nZXQoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBkb2VzQ2FsbHMoKSBjb25zdCB7IHJl
dHVybiB0eXBlKCkgPT0gR2V0dGVyIHx8IHR5cGUoKSA9PSBDdXN0b21HZXR0ZXI7IH0KKyAgICAK
KyAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIGZyaWVuZCBj
bGFzcyBDb2RlQmxvY2s7CisgICAgCisgICAgQWNjZXNzVHlwZSBtX3R5cGU7CisgICAgV3JpdGVC
YXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQgbV9jb25kaXRpb25TZXQ7CisgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBtX3N0dWJS
b3V0aW5lOworfTsKKworY2xhc3MgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCB7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgLy8gRWl0aGVyIGNyZWF0ZXMgYSBuZXcg
cG9seW1vcnBoaWMgZ2V0IGxpc3QsIG9yIHJldHVybnMgdGhlIG9uZSB0aGF0IGlzIGFscmVhZHkg
aW4KKyAgICAvLyBwbGFjZS4KKyAgICBzdGF0aWMgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogZnJv
bShTdHJ1Y3R1cmVTdHViSW5mbyYpOworICAgIAorICAgIH5Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0
KCk7CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN1cnJlbnRTbG93UGF0aFRhcmdl
dChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pIGNvbnN0OworICAgIAorICAgIHZvaWQgYWRk
QWNjZXNzKGNvbnN0IEdldEJ5SWRBY2Nlc3MmKTsKKyAgICAKKyAgICBib29sIGlzRW1wdHkoKSBj
b25zdCB7IHJldHVybiBtX2xpc3QuaXNFbXB0eSgpOyB9CisgICAgdW5zaWduZWQgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbGlzdC5zaXplKCk7IH0KKyAgICBib29sIGlzRnVsbCgpIGNvbnN0Owor
ICAgIGJvb2wgaXNBbG1vc3RGdWxsKCkgY29uc3Q7IC8vIFRydWUgaWYgYWRkaW5nIGFuIGVsZW1l
bnQgd291bGQgbWFrZSBpc0Z1bGwoKSB0cnVlLgorICAgIGNvbnN0IEdldEJ5SWRBY2Nlc3MmIGF0
KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdFtpXTsgfQorICAgIGNvbnN0IEdldEJ5
SWRBY2Nlc3MmIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9saXN0W2ld
OyB9CisgICAgCisgICAgYm9vbCBkaWRTZWxmUGF0Y2hpbmcoKSBjb25zdDsgLy8gQXJlIGFueSBv
ZiB0aGUgYWNjZXNzZXMgU2ltcGxlSW5saW5lPworICAgIAorICAgIGJvb2wgdmlzaXRXZWFrKFZN
JikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKKyAgICAK
KyAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAgCisg
ICAgVmVjdG9yPEdldEJ5SWRBY2Nlc3MsIDI+IG1fbGlzdDsKK307CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKworI2VuZGlmIC8vIFBvbHltb3JwaGljR2V0
QnlJZExpc3RfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNBY2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAkod29ya2luZyBjb3B5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIz
LDggKzIzLDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgUG9seW1vcnBoaWNH
ZXRCeUlkTGlzdF9oCi0jZGVmaW5lIFBvbHltb3JwaGljR2V0QnlJZExpc3RfaAorI2lmbmRlZiBQ
b2x5bW9ycGhpY0FjY2Vzc19oCisjZGVmaW5lIFBvbHltb3JwaGljQWNjZXNzX2gKIAogI2lmIEVO
QUJMRShKSVQpCiAKQEAgLTM4LDk2ICszOCwyODAgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFz
cyBDb2RlQmxvY2s7CitjbGFzcyBQb2x5bW9ycGhpY0FjY2VzczsKK2NsYXNzIFdhdGNocG9pbnRz
T25TdHJ1Y3R1cmVTdHViSW5mbzsKIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbzsKIAotY2xhc3Mg
R2V0QnlJZEFjY2VzcyB7CitzdHJ1Y3QgQWNjZXNzR2VuZXJhdGlvblN0YXRlOworCitjbGFzcyBB
Y2Nlc3NDYXNlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBY2Nlc3NDYXNlKTsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBlbnVtIEFjY2Vzc1R5cGUgewot
ICAgICAgICBJbnZhbGlkLAotICAgICAgICBTaW1wbGVJbmxpbmUsIC8vIFRoaXMgaXMgdGhlIHBh
dGNoZWQgaW5saW5lIGFjY2Vzcy4KLSAgICAgICAgU2ltcGxlU3R1YiwgLy8gVGhpcyBpcyBhIHN0
dWIuCi0gICAgICAgIFdhdGNoZWRTdHViLAorICAgICAgICBMb2FkLAorICAgICAgICBUcmFuc2l0
aW9uLAorICAgICAgICBSZXBsYWNlLAorICAgICAgICBNaXNzLAogICAgICAgICBHZXR0ZXIsCisg
ICAgICAgIFNldHRlciwKICAgICAgICAgQ3VzdG9tR2V0dGVyLAotICAgICAgICBTaW1wbGVNaXNz
LAorICAgICAgICBDdXN0b21TZXR0ZXIsCisgICAgICAgIEluSGl0LAorICAgICAgICBJbk1pc3Ms
CisgICAgICAgIEFycmF5TGVuZ3RoLAorICAgICAgICBTdHJpbmdMZW5ndGgKICAgICB9OwotICAg
IAotICAgIEdldEJ5SWRBY2Nlc3MoKQotICAgICAgICA6IG1fdHlwZShJbnZhbGlkKQorCisgICAg
c3RhdGljIGJvb2wgaXNHZXQoQWNjZXNzVHlwZSB0eXBlKQogICAgIHsKKyAgICAgICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgICAgIGNhc2UgVHJhbnNpdGlvbjoKKyAgICAgICAgY2FzZSBSZXBsYWNl
OgorICAgICAgICBjYXNlIFNldHRlcjoKKyAgICAgICAgY2FzZSBDdXN0b21TZXR0ZXI6CisgICAg
ICAgIGNhc2UgSW5IaXQ6CisgICAgICAgIGNhc2UgSW5NaXNzOgorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBjYXNlIExvYWQ6CisgICAgICAgIGNhc2UgTWlzczoKKyAgICAgICAg
Y2FzZSBHZXR0ZXI6CisgICAgICAgIGNhc2UgQ3VzdG9tR2V0dGVyOgorICAgICAgICBjYXNlIEFy
cmF5TGVuZ3RoOgorICAgICAgICBjYXNlIFN0cmluZ0xlbmd0aDoKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CiAgICAgfQotICAgIAotICAgIEdldEJ5SWRBY2Nlc3MoCi0gICAg
ICAgIFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgUGFzc1JlZlB0cjxKSVRTdHViUm91
dGluZT4sIFN0cnVjdHVyZSosCisKKyAgICBzdGF0aWMgYm9vbCBpc1B1dChBY2Nlc3NUeXBlIHR5
cGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBMb2FkOgor
ICAgICAgICBjYXNlIE1pc3M6CisgICAgICAgIGNhc2UgR2V0dGVyOgorICAgICAgICBjYXNlIEN1
c3RvbUdldHRlcjoKKyAgICAgICAgY2FzZSBJbkhpdDoKKyAgICAgICAgY2FzZSBJbk1pc3M6Cisg
ICAgICAgIGNhc2UgQXJyYXlMZW5ndGg6CisgICAgICAgIGNhc2UgU3RyaW5nTGVuZ3RoOgorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIFRyYW5zaXRpb246CisgICAgICAg
IGNhc2UgUmVwbGFjZToKKyAgICAgICAgY2FzZSBTZXR0ZXI6CisgICAgICAgIGNhc2UgQ3VzdG9t
U2V0dGVyOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBzdGF0aWMgYm9vbCBpc0luKEFjY2Vzc1R5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRj
aCAodHlwZSkgeworICAgICAgICBjYXNlIExvYWQ6CisgICAgICAgIGNhc2UgTWlzczoKKyAgICAg
ICAgY2FzZSBHZXR0ZXI6CisgICAgICAgIGNhc2UgQ3VzdG9tR2V0dGVyOgorICAgICAgICBjYXNl
IFRyYW5zaXRpb246CisgICAgICAgIGNhc2UgUmVwbGFjZToKKyAgICAgICAgY2FzZSBTZXR0ZXI6
CisgICAgICAgIGNhc2UgQ3VzdG9tU2V0dGVyOgorICAgICAgICBjYXNlIEFycmF5TGVuZ3RoOgor
ICAgICAgICBjYXNlIFN0cmluZ0xlbmd0aDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgY2FzZSBJbkhpdDoKKyAgICAgICAgY2FzZSBJbk1pc3M6CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8
QWNjZXNzQ2FzZT4gZ2V0KAorICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUs
IFByb3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmUqLAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpLAorICAgICAgICBi
b29sIHZpYVByb3h5ID0gZmFsc2UsCisgICAgICAgIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxT
ZXQgPSBudWxscHRyLAorICAgICAgICBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYyA9IG51bGxw
dHIsCisgICAgICAgIEpTT2JqZWN0KiBjdXN0b21TbG90QmFzZSA9IG51bGxwdHIpOworCisgICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXBsYWNlKFZNJiwgSlNDZWxsKiBv
d25lciwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQpOworCisgICAgc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxBY2Nlc3NDYXNlPiB0cmFuc2l0aW9uKAorICAgICAgICBWTSYsIEpTQ2VsbCogb3du
ZXIsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwgUHJv
cGVydHlPZmZzZXQsCiAgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiA9
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCkpOworCisgICAgc3RhdGljIHN0ZDo6dW5pcXVl
X3B0cjxBY2Nlc3NDYXNlPiBzZXR0ZXIoCisgICAgICAgIFZNJiwgSlNDZWxsKiBvd25lciwgQWNj
ZXNzVHlwZSwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQsCisgICAgICAgIGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgUHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmMgPSBu
dWxscHRyLAorICAgICAgICBKU09iamVjdCogY3VzdG9tU2xvdEJhc2UgPSBudWxscHRyKTsKKwor
ICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gaW4oCisgICAgICAgIFZNJiwg
SlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgU3RydWN0dXJlKiwKKyAgICAgICAgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSk7
CisKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGdldExlbmd0aChWTSYs
IEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUpOwogICAgIAotICAgIH5HZXRCeUlkQWNjZXNzKCk7
Ci0gICAgCi0gICAgc3RhdGljIEdldEJ5SWRBY2Nlc3MgZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFN0
cnVjdHVyZVN0dWJJbmZvJik7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNl
PiBmcm9tU3RydWN0dXJlU3R1YkluZm8oVk0mLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYpOworCisgICAgfkFjY2Vzc0Nhc2UoKTsKICAgICAKLSAgICBib29sIGlzU2V0KCkgY29u
c3QgeyByZXR1cm4gbV90eXBlICE9IEludmFsaWQ7IH0KLSAgICBib29sIG9wZXJhdG9yISgpIGNv
bnN0IHsgcmV0dXJuICFpc1NldCgpOyB9CisgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+
IGNsb25lKCkgY29uc3Q7CiAgICAgCiAgICAgQWNjZXNzVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1
cm4gbV90eXBlOyB9CisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
bV9vZmZzZXQ7IH0KKyAgICBib29sIHZpYVByb3h5KCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0
YSA/IG1fcmFyZURhdGEtPnZpYVByb3h5IDogZmFsc2U7IH0KICAgICAKLSAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlLmdldCgpOyB9Ci0gICAgCi0g
ICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0
IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9Ci0gICAgCi0gICAgSklUU3R1YlJvdXRpbmUqIHN0
dWJSb3V0aW5lKCkgY29uc3QKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0CisgICAg
eworICAgICAgICBpZiAobV90eXBlID09IFRyYW5zaXRpb24pCisgICAgICAgICAgICByZXR1cm4g
bV9zdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKTsKKyAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlLmdl
dCgpOworICAgIH0KKyAgICBib29sIGd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrKCkgY29uc3Q7CisK
KyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NF
UlQoaXNTZXQoKSk7Ci0gICAgICAgIHJldHVybiBtX3N0dWJSb3V0aW5lLmdldCgpOworICAgICAg
ICBBU1NFUlQobV90eXBlID09IFRyYW5zaXRpb24pOworICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1
cmUuZ2V0KCk7CiAgICAgfQogICAgIAotICAgIGJvb2wgZG9lc0NhbGxzKCkgY29uc3QgeyByZXR1
cm4gdHlwZSgpID09IEdldHRlciB8fCB0eXBlKCkgPT0gQ3VzdG9tR2V0dGVyOyB9CisgICAgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9j
b25kaXRpb25TZXQ7IH0KKworICAgIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5hZGRpdGlv
bmFsU2V0LmdldCgpIDogbnVsbHB0cjsKKyAgICB9CisKKyAgICBKU09iamVjdCogY3VzdG9tU2xv
dEJhc2UoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVE
YXRhLT5jdXN0b21TbG90QmFzZS5nZXQoKSA6IG51bGxwdHI7CisgICAgfQorCisgICAgSlNPYmpl
Y3QqIGFsdGVybmF0ZUJhc2UoKSBjb25zdDsKICAgICAKLSAgICBib29sIHZpc2l0V2VhayhWTSYp
IGNvbnN0OworICAgIGJvb2wgZG9lc0NhbGxzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRj
aCAodHlwZSgpKSB7CisgICAgICAgIGNhc2UgR2V0dGVyOgorICAgICAgICBjYXNlIFNldHRlcjoK
KyAgICAgICAgY2FzZSBDdXN0b21HZXR0ZXI6CisgICAgICAgIGNhc2UgQ3VzdG9tU2V0dGVyOgor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBDYWxsTGlua0luZm8qIGNhbGxM
aW5rSW5mbygpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIW1fcmFyZURhdGEpCisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIG1fcmFyZURhdGEtPmNhbGxMaW5r
SW5mby5nZXQoKTsKKyAgICB9CiAKKyAgICAvLyBJZiB0aGlzIG1ldGhvZCByZXR1cm5zIHRydWUs
IHRoZW4gaXQncyBhIGdvb2QgaWRlYSB0byByZW1vdmUgJ290aGVyJyBmcm9tIHRoZSBhY2Nlc3Mg
b25jZSAndGhpcycKKyAgICAvLyBpcyBhZGRlZC4gVGhpcyBtZXRob2QgYXNzdW1lcyB0aGF0IGlu
IGNhc2Ugb2YgY29udHJhZGljdGlvbnMsICd0aGlzJyByZXByZXNlbnRzIGEgbmV3ZXIsIGFuZCBz
bworICAgIC8vIG1vcmUgdXNlZnVsLCB0cnV0aC4gVGhpcyBtZXRob2QgY2FuIGJlIGNvbnNlcnZh
dGl2ZTsgaXQgd2lsbCByZXR1cm4gZmFsc2Ugd2hlbiBpdCBkb3VidC4KKyAgICBib29sIGNhblJl
cGxhY2UoY29uc3QgQWNjZXNzQ2FzZSYgb3RoZXIpOworCisgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0OworICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQ29kZUJs
b2NrOwotICAgIAotICAgIEFjY2Vzc1R5cGUgbV90eXBlOworICAgIGZyaWVuZCBjbGFzcyBQb2x5
bW9ycGhpY0FjY2VzczsKKworICAgIEFjY2Vzc0Nhc2UoKTsKKworICAgIGJvb2wgdmlzaXRXZWFr
KFZNJikgY29uc3Q7CisKKyAgICAvLyBGYWxsIHRocm91Z2ggb24gc3VjY2Vzcy4gVHdvIGtpbmRz
IG9mIGZhaWx1cmVzIGFyZSBzdXBwb3J0ZWQ6IGZhbGwtdGhyb3VnaCwgd2hpY2ggbWVhbnMgdGhh
dCB3ZQorICAgIC8vIHNob3VsZCB0cnkgYSBkaWZmZXJlbnQgY2FzZTsgYW5kIGZhaWx1cmUsIHdo
aWNoIG1lYW5zIHRoYXQgdGhpcyB3YXMgdGhlIHJpZ2h0IGNhc2UgYnV0IGl0IG5lZWRzCisgICAg
Ly8gaGVscCBmcm9tIHRoZSBzbG93IHBhdGguCisgICAgdm9pZCBnZW5lcmF0ZVdpdGhHdWFyZChB
Y2Nlc3NHZW5lcmF0aW9uU3RhdGUmLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGZhbGxUaHJv
dWdoKTsKKworICAgIC8vIEZhbGwgdGhyb3VnaCBvbiBzdWNjZXNzLCBhZGQgYSBqdW1wIHRvIHRo
ZSBmYWlsdXJlIGxpc3Qgb24gZmFpbHVyZS4KKyAgICB2b2lkIGdlbmVyYXRlKEFjY2Vzc0dlbmVy
YXRpb25TdGF0ZSYpOworICAgIAorICAgIEFjY2Vzc1R5cGUgbV90eXBlIHsgTG9hZCB9OworICAg
IFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0IHsgaW52YWxpZE9mZnNldCB9OworCisgICAgLy8gVXN1
YWxseSB0aGlzIGlzIHRoZSBzdHJ1Y3R1cmUgdGhhdCB3ZSBleHBlY3QgdGhlIGJhc2Ugb2JqZWN0
IHRvIGhhdmUuIEJ1dCwgdGhpcyBpcyB0aGUgKm5ldyoKKyAgICAvLyBzdHJ1Y3R1cmUgZm9yIGEg
dHJhbnNpdGlvbiBhbmQgd2UgcmVseSBvbiB0aGUgZmFjdCB0aGF0IGl0IGhhcyBhIHN0cm9uZyBy
ZWZlcmVuY2UgdG8gdGhlIG9sZAorICAgIC8vIHN0cnVjdHVyZS4gRm9yIHByb3hpZXMsIHRoaXMg
aXMgdGhlIHN0cnVjdHVyZSBvZiB0aGUgb2JqZWN0IGJlaGluZCB0aGUgcHJveHkuCiAgICAgV3Jp
dGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7CisKICAgICBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKLSAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IG1f
c3R1YlJvdXRpbmU7CisKKyAgICBjbGFzcyBSYXJlRGF0YSB7CisgICAgICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworICAgIHB1YmxpYzoKKyAgICAgICAgUmFyZURhdGEoKQorICAgICAgICAg
ICAgOiB2aWFQcm94eShmYWxzZSkKKyAgICAgICAgeworICAgICAgICAgICAgY3VzdG9tQWNjZXNz
b3Iub3BhcXVlID0gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCB2
aWFQcm94eTsKKyAgICAgICAgUmVmUHRyPFdhdGNocG9pbnRTZXQ+IGFkZGl0aW9uYWxTZXQ7Cisg
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua0luZm8+IGNhbGxMaW5rSW5mbzsKKyAgICAg
ICAgdW5pb24geworICAgICAgICAgICAgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgZ2V0dGVy
OworICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmMgc2V0dGVyOworICAg
ICAgICAgICAgdm9pZCogb3BhcXVlOworICAgICAgICB9IGN1c3RvbUFjY2Vzc29yOworICAgICAg
ICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IGN1c3RvbVNsb3RCYXNlOworICAgIH07CisKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8UmFyZURhdGE+IG1fcmFyZURhdGE7CiB9OwogCi1jbGFzcyBQb2x5bW9y
cGhpY0dldEJ5SWRMaXN0IHsKK2NsYXNzIFBvbHltb3JwaGljQWNjZXNzIHsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShQb2x5bW9ycGhpY0FjY2Vzcyk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwdWJsaWM6Ci0gICAgLy8gRWl0aGVyIGNyZWF0ZXMgYSBuZXcgcG9seW1vcnBoaWMg
Z2V0IGxpc3QsIG9yIHJldHVybnMgdGhlIG9uZSB0aGF0IGlzIGFscmVhZHkgaW4KLSAgICAvLyBw
bGFjZS4KLSAgICBzdGF0aWMgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogZnJvbShTdHJ1Y3R1cmVT
dHViSW5mbyYpOwotICAgIAotICAgIH5Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0KCk7Ci0gICAgCi0g
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN1cnJlbnRTbG93UGF0aFRhcmdldChTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8pIGNvbnN0OwotICAgIAotICAgIHZvaWQgYWRkQWNjZXNzKGNvbnN0
IEdldEJ5SWRBY2Nlc3MmKTsKKyAgICBQb2x5bW9ycGhpY0FjY2VzcygpOworICAgIH5Qb2x5bW9y
cGhpY0FjY2VzcygpOworCisgICAgLy8gVGhpcyBtYXkgcmV0dXJuIG51bGwsIGluIHdoaWNoIGNh
c2UgdGhlIG9sZCBzdHViIHJvdXRpbmUgaXMgbGVmdCBpbnRhY3QuIFlvdSBhcmUgcmVxdWlyZWQg
dG8KKyAgICAvLyBwYXNzIGEgdmVjdG9yIG9mIG5vbi1udWxsIGFjY2VzcyBjYXNlcy4gVGhpcyB3
aWxsIHBydW5lIHRoZSBhY2Nlc3MgY2FzZXMgYnkgcmVqZWN0aW5nIGFueSBjYXNlCisgICAgLy8g
aW4gdGhlIGxpc3QgdGhhdCBpcyBzdWJzdW1lZCBieSBhIGxhdGVyIGNhc2UgaW4gdGhlIGxpc3Qu
CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJlZ2VuZXJhdGVXaXRoQ2FzZXMoCisgICAgICAg
IFZNJiwgQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBjb25zdCBJZGVudGlmaWVyJiwg
VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPj4pOworCisgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIHJlZ2VuZXJhdGVXaXRoQ2FzZSgKKyAgICAgICAgVk0mLCBDb2RlQmxvY2sqLCBT
dHJ1Y3R1cmVTdHViSW5mbyYsIGNvbnN0IElkZW50aWZpZXImLCBzdGQ6OnVuaXF1ZV9wdHI8QWNj
ZXNzQ2FzZT4pOwogICAgIAogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlz
dC5pc0VtcHR5KCk7IH0KICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9saXN0
LnNpemUoKTsgfQotICAgIGJvb2wgaXNGdWxsKCkgY29uc3Q7Ci0gICAgYm9vbCBpc0FsbW9zdEZ1
bGwoKSBjb25zdDsgLy8gVHJ1ZSBpZiBhZGRpbmcgYW4gZWxlbWVudCB3b3VsZCBtYWtlIGlzRnVs
bCgpIHRydWUuCi0gICAgY29uc3QgR2V0QnlJZEFjY2VzcyYgYXQodW5zaWduZWQgaSkgY29uc3Qg
eyByZXR1cm4gbV9saXN0W2ldOyB9Ci0gICAgY29uc3QgR2V0QnlJZEFjY2VzcyYgb3BlcmF0b3Jb
XSh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2xpc3RbaV07IH0KLSAgICAKLSAgICBib29s
IGRpZFNlbGZQYXRjaGluZygpIGNvbnN0OyAvLyBBcmUgYW55IG9mIHRoZSBhY2Nlc3NlcyBTaW1w
bGVJbmxpbmU/Ci0gICAgCisgICAgY29uc3QgQWNjZXNzQ2FzZSYgYXQodW5zaWduZWQgaSkgY29u
c3QgeyByZXR1cm4gKm1fbGlzdFtpXTsgfQorICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIG9wZXJhdG9y
W10odW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gKm1fbGlzdFtpXTsgfQorCisgICAgLy8gSWYg
dGhpcyByZXR1cm5zIGZhbHNlIHRoZW4gd2UgYXJlIHJlcXVlc3RpbmcgYSByZXNldCBvZiB0aGUg
b3duaW5nIFN0cnVjdHVyZVN0dWJJbmZvLgogICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgY29uc3Q7
CiAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisKIHByaXZhdGU6Cisg
ICAgZnJpZW5kIGNsYXNzIEFjY2Vzc0Nhc2U7CiAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsK
KyAgICBmcmllbmQgc3RydWN0IEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTsKICAgICAKLSAgICBQb2x5
bW9ycGhpY0dldEJ5SWRMaXN0KFN0cnVjdHVyZVN0dWJJbmZvJik7Ci0gICAgCi0gICAgVmVjdG9y
PEdldEJ5SWRBY2Nlc3MsIDI+IG1fbGlzdDsKKyAgICB0eXBlZGVmIFZlY3RvcjxzdGQ6OnVuaXF1
ZV9wdHI8QWNjZXNzQ2FzZT4sIDI+IExpc3RUeXBlOworCisgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIHJlZ2VuZXJhdGUoCisgICAgICAgIFZNJiwgQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1Yklu
Zm8mLCBjb25zdCBJZGVudGlmaWVyJiwgTGlzdFR5cGUmIGNhc2VzKTsKKworICAgIExpc3RUeXBl
IG1fbGlzdDsKKyAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IG1fc3R1YlJvdXRpbmU7CisgICAg
c3RkOjp1bmlxdWVfcHRyPFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbz4gbV93YXRjaHBv
aW50czsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCituYW1lc3BhY2UgV1RGIHsKKwordm9p
ZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBl
KTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCi0jZW5k
aWYgLy8gUG9seW1vcnBoaWNHZXRCeUlkTGlzdF9oCisjZW5kaWYgLy8gUG9seW1vcnBoaWNBY2Nl
c3NfaAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNB
Y2Nlc3NTdHJ1Y3R1cmVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdC5oCShyZXZpc2lvbiAxODk1
NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3NT
dHJ1Y3R1cmVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTEyICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBQb2x5bW9ycGhp
Y0FjY2Vzc1N0cnVjdHVyZUxpc3RfaAotI2RlZmluZSBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVy
ZUxpc3RfaAotCi0jaW5jbHVkZSAiSklUU3R1YlJvdXRpbmUuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1
cmUuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVDaGFpbi5oIgotCi0jZGVmaW5lIFBPTFlNT1JQSElD
X0xJU1RfQ0FDSEVfU0laRSA4Ci0KLW5hbWVzcGFjZSBKU0MgewotCi0vLyAqU2lnaCosIElmIHRo
ZSBKSVQgaXMgZW5hYmxlZCB3ZSBuZWVkIHRvIHRyYWNrIHRoZSBzdHViUm91bnRpbmUgKG9mIHR5
cGUgQ29kZUxvY2F0aW9uTGFiZWwpLAotLy8gSWYgdGhlIEpJVCBpcyBub3QgaW4gdXNlIHdlIGRv
bid0IGFjdHVhbGx5IG5lZWQgdGhlIHZhcmlhYmxlICh0aGF0IHNhaWQsIGlmIHRoZSBKSVQgaXMg
bm90IGluIHVzZSB3ZSBkb24ndAotLy8gY3VyZW50bHkgYWN0dWFsbHkgdXNlIFBvbHltb3JwaGlj
QWNjZXNzU3RydWN0dXJlTGlzdHMsIHdoaWNoIHdlIHNob3VsZCkuICBBbnl3YXksIHRoaXMgc2Vl
bXMgbGlrZSB0aGUgYmVzdAotLy8gc29sdXRpb24gZm9yIG5vdyAtIHdpbGwgbmVlZCB0byBzb21l
dGhpbmcgc21hcnRlciBpZi93aGVuIHdlIGFjdHVhbGx5IHdhbnQgbWl4ZWQtbW9kZSBvcGVyYXRp
b24uCi0KLSNpZiBFTkFCTEUoSklUKQotLy8gU3RydWN0dXJlIHVzZWQgYnkgb3BfZ2V0X2J5X2lk
X3NlbGZfbGlzdCBhbmQgb3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3QgaW5zdHJ1Y3Rpb24gdG8gaG9s
ZCBkYXRhIG9mZiB0aGUgbWFpbiBvcGNvZGUgc3RyZWFtLgotc3RydWN0IFBvbHltb3JwaGljQWNj
ZXNzU3RydWN0dXJlTGlzdCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6
Ci0gICAgc3RydWN0IFBvbHltb3JwaGljU3R1YkluZm8gewotICAgICAgICBib29sIGlzRGlyZWN0
IDogMTsKLSAgICAgICAgdW5zaWduZWQgY291bnQgOiAzMTsKLSAgICAgICAgUmVmUHRyPEpJVFN0
dWJSb3V0aW5lPiBzdHViUm91dGluZTsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4g
YmFzZTsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZUNoYWluPiBjaGFpbjsKLQotICAg
ICAgICBQb2x5bW9ycGhpY1N0dWJJbmZvKCkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAg
ICAgdm9pZCBzZXQoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0
aW5lPiBfc3R1YlJvdXRpbmUsIFN0cnVjdHVyZSogX2Jhc2UsIGJvb2wgX2lzRGlyZWN0KQotICAg
ICAgICB7Ci0gICAgICAgICAgICBzdHViUm91dGluZSA9IF9zdHViUm91dGluZTsKLSAgICAgICAg
ICAgIGJhc2Uuc2V0KHZtLCBvd25lciwgX2Jhc2UpOwotICAgICAgICAgICAgaXNEaXJlY3QgPSBf
aXNEaXJlY3Q7Ci0gICAgICAgICAgICBjb3VudCA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIHZvaWQgc2V0KFZNJiB2bSwgSlNDZWxsKiBvd25lciwgUGFzc1JlZlB0cjxKSVRTdHVi
Um91dGluZT4gX3N0dWJSb3V0aW5lLCBTdHJ1Y3R1cmUqIF9iYXNlLCBTdHJ1Y3R1cmVDaGFpbiog
X2NoYWluLCBib29sIF9pc0RpcmVjdCwgdW5zaWduZWQgX2NvdW50KQotICAgICAgICB7Ci0gICAg
ICAgICAgICBzdHViUm91dGluZSA9IF9zdHViUm91dGluZTsKLSAgICAgICAgICAgIGJhc2Uuc2V0
KHZtLCBvd25lciwgX2Jhc2UpOwotICAgICAgICAgICAgY2hhaW4uc2V0KHZtLCBvd25lciwgX2No
YWluKTsKLSAgICAgICAgICAgIGlzRGlyZWN0ID0gX2lzRGlyZWN0OwotICAgICAgICAgICAgY291
bnQgPSBfY291bnQ7Ci0gICAgICAgIH0KLSAgICB9IGxpc3RbUE9MWU1PUlBISUNfTElTVF9DQUNI
RV9TSVpFXTsKLSAgICAKLSAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoKQotICAg
IHsKLSAgICB9Ci0gICAgCi0gICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KFZNJiB2
bSwgSlNDZWxsKiBvd25lciwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUs
IFN0cnVjdHVyZSogZmlyc3RCYXNlLCBib29sIGlzRGlyZWN0KQotICAgIHsKLSAgICAgICAgbGlz
dFswXS5zZXQodm0sIG93bmVyLCBzdHViUm91dGluZSwgZmlyc3RCYXNlLCBpc0RpcmVjdCk7Ci0g
ICAgfQotCi0gICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KFZNJiB2bSwgSlNDZWxs
KiBvd25lciwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUsIFN0cnVjdHVy
ZSogZmlyc3RCYXNlLCBTdHJ1Y3R1cmVDaGFpbiogZmlyc3RDaGFpbiwgYm9vbCBpc0RpcmVjdCwg
dW5zaWduZWQgY291bnQpCi0gICAgewotICAgICAgICBsaXN0WzBdLnNldCh2bSwgb3duZXIsIHN0
dWJSb3V0aW5lLCBmaXJzdEJhc2UsIGZpcnN0Q2hhaW4sIGlzRGlyZWN0LCBjb3VudCk7Ci0gICAg
fQotCi0gICAgYm9vbCB2aXNpdFdlYWsoaW50IGNvdW50KQotICAgIHsKLSAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBQb2x5bW9ycGhpY1N0dWJJ
bmZvJiBpbmZvID0gbGlzdFtpXTsKLSAgICAgICAgICAgIGlmICghaW5mby5iYXNlKQotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFI
ZWFwOjppc01hcmtlZChpbmZvLmJhc2UuZ2V0KCkpKQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgIGlmIChpbmZvLmNoYWluICYmICFIZWFwOjppc01hcmtlZChpbmZv
LmNoYWluLmdldCgpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LSAgICAgICAgICAgIAotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci19OwotCi0jZW5kaWYg
Ly8gRU5BQkxFKEpJVCkKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBQb2x5bW9y
cGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3RfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwCShyZXZp
c2lvbiAxODk1NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBo
aWNHZXRCeUlkTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTU1ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIlBvbHltb3JwaGljR2V0QnlJZExpc3QuaCIKLQotI2lmIEVO
QUJMRShKSVQpCi0KLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRlICJIZWFwLmgiCi0j
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCi0K
LW5hbWVzcGFjZSBKU0MgewotCi1HZXRCeUlkQWNjZXNzOjpHZXRCeUlkQWNjZXNzKAotICAgIFZN
JiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBQYXNzUmVmUHRyPEpJVFN0dWJS
b3V0aW5lPiBzdHViUm91dGluZSwKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkKLSAgICA6IG1fdHlwZSh0eXBl
KQotICAgICwgbV9zdHJ1Y3R1cmUodm0sIG93bmVyLCBzdHJ1Y3R1cmUpCi0gICAgLCBtX2NvbmRp
dGlvblNldChjb25kaXRpb25TZXQpCi0gICAgLCBtX3N0dWJSb3V0aW5lKHN0dWJSb3V0aW5lKQot
ewotfQotCi1HZXRCeUlkQWNjZXNzOjp+R2V0QnlJZEFjY2VzcygpCi17Ci19Ci0KLUdldEJ5SWRB
Y2Nlc3MgR2V0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbykKLXsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgaW5pdGlhbFNsb3dQ
YXRoID0KLSAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQo
c3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSk7Ci0gICAgCi0gICAgR2V0QnlJZEFj
Y2VzcyByZXN1bHQ7Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8uYWNjZXNzVHlw
ZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYpOwotICAgIAotICAgIHJlc3VsdC5tX3R5cGUgPSBT
aW1wbGVJbmxpbmU7Ci0gICAgcmVzdWx0Lm1fc3RydWN0dXJlLmNvcHlGcm9tKHN0dWJJbmZvLnUu
Z2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZSk7Ci0gICAgcmVzdWx0Lm1fc3R1YlJvdXRp
bmUgPSBKSVRTdHViUm91dGluZTo6Y3JlYXRlU2VsZk1hbmFnZWRSb3V0aW5lKGluaXRpYWxTbG93
UGF0aCk7Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBHZXRCeUlkQWNjZXNz
Ojp2aXNpdFdlYWsoVk0mIHZtKSBjb25zdAotewotICAgIGlmIChtX3N0cnVjdHVyZSAmJiAhSGVh
cDo6aXNNYXJrZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaWYgKCFtX2NvbmRpdGlvblNldC5hcmVTdGlsbExpdmUoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmICghbV9zdHViUm91dGluZS0+dmlzaXRXZWFrKHZtKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0
OjpQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsK
LSAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpCi0gICAgICAgIHJl
dHVybjsKLSAgICAKLSAgICBtX2xpc3QuYXBwZW5kKEdldEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1
cmVTdHViSW5mbyhzdHViSW5mbykpOwotfQotCi1Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBQb2x5
bW9ycGhpY0dldEJ5SWRMaXN0Ojpmcm9tKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsK
LSAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3QpCi0g
ICAgICAgIHJldHVybiBzdHViSW5mby51LmdldEJ5SWRMaXN0Lmxpc3Q7Ci0gICAgCi0gICAgQVNT
RVJUKAotICAgICAgICBzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2Vs
ZgotICAgICAgICB8fCBzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc191bnNldCk7Ci0gICAg
Ci0gICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogcmVzdWx0ID0gbmV3IFBvbHltb3JwaGljR2V0
QnlJZExpc3Qoc3R1YkluZm8pOwotICAgIAotICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkTGlzdChy
ZXN1bHQpOwotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVBvbHltb3JwaGljR2V0QnlJ
ZExpc3Q6On5Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0KCkgeyB9Ci0KLU1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0OjpjdXJyZW50U2xvd1BhdGhUYXJnZXQoCi0gICAg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKSBjb25zdAotewotICAgIGlmIChpc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybiBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNl
dChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKLSAgICByZXR1cm4gbV9saXN0
Lmxhc3QoKS5zdHViUm91dGluZSgpLT5jb2RlKCkuY29kZSgpOwotfQotCi12b2lkIFBvbHltb3Jw
aGljR2V0QnlJZExpc3Q6OmFkZEFjY2Vzcyhjb25zdCBHZXRCeUlkQWNjZXNzJiBhY2Nlc3MpCi17
Ci0gICAgQVNTRVJUKCFpc0Z1bGwoKSk7Ci0gICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHJlc2l6
aW5nIG9wdGltaXplcyBmb3Igc3BhY2UsIG5vdCB0aW1lLgotICAgIG1fbGlzdC5yZXNpemVUb0Zp
dChtX2xpc3Quc2l6ZSgpICsgMSk7Ci0gICAgbV9saXN0Lmxhc3QoKSA9IGFjY2VzczsKLX0KLQot
Ym9vbCBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Ojppc0Z1bGwoKSBjb25zdAotewotICAgIEFTU0VS
VChzaXplKCkgPD0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKTsKLSAgICByZXR1cm4gc2l6
ZSgpID09IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRTsKLX0KLQotYm9vbCBQb2x5bW9ycGhp
Y0dldEJ5SWRMaXN0Ojppc0FsbW9zdEZ1bGwoKSBjb25zdAotewotICAgIEFTU0VSVChzaXplKCkg
PD0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKTsKLSAgICByZXR1cm4gc2l6ZSgpID49IFBP
TFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDE7Ci19Ci0KLWJvb2wgUG9seW1vcnBoaWNHZXRC
eUlkTGlzdDo6ZGlkU2VsZlBhdGNoaW5nKCkgY29uc3QKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSBzaXplKCk7IGktLTspIHsKLSAgICAgICAgaWYgKGF0KGkpLnR5cGUoKSA9PSBHZXRCeUlkQWNj
ZXNzOjpTaW1wbGVJbmxpbmUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OnZpc2l0V2Vh
ayhWTSYgdm0pIGNvbnN0Ci17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gc2l6ZSgpOyBpLS07KSB7
Ci0gICAgICAgIGlmICghYXQoaSkudmlzaXRXZWFrKHZtKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwot
Ci0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgJKHJldmlzaW9u
IDE4OTU0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0dl
dEJ5SWRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTMzICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBQb2x5bW9y
cGhpY0dldEJ5SWRMaXN0X2gKLSNkZWZpbmUgUG9seW1vcnBoaWNHZXRCeUlkTGlzdF9oCi0KLSNp
ZiBFTkFCTEUoSklUKQotCi0jaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgotI2luY2x1ZGUgIk1hY3Jv
QXNzZW1ibGVyLmgiCi0jaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIKLSNp
bmNsdWRlICJPcGNvZGUuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKLSNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBDb2RlQmxvY2s7Ci1zdHJ1Y3Qg
U3RydWN0dXJlU3R1YkluZm87Ci0KLWNsYXNzIEdldEJ5SWRBY2Nlc3MgewotcHVibGljOgotICAg
IGVudW0gQWNjZXNzVHlwZSB7Ci0gICAgICAgIEludmFsaWQsCi0gICAgICAgIFNpbXBsZUlubGlu
ZSwgLy8gVGhpcyBpcyB0aGUgcGF0Y2hlZCBpbmxpbmUgYWNjZXNzLgotICAgICAgICBTaW1wbGVT
dHViLCAvLyBUaGlzIGlzIGEgc3R1Yi4KLSAgICAgICAgV2F0Y2hlZFN0dWIsCi0gICAgICAgIEdl
dHRlciwKLSAgICAgICAgQ3VzdG9tR2V0dGVyLAotICAgICAgICBTaW1wbGVNaXNzLAotICAgIH07
Ci0gICAgCi0gICAgR2V0QnlJZEFjY2VzcygpCi0gICAgICAgIDogbV90eXBlKEludmFsaWQpCi0g
ICAgewotICAgIH0KLSAgICAKLSAgICBHZXRCeUlkQWNjZXNzKAotICAgICAgICBWTSYsIEpTQ2Vs
bCogb3duZXIsIEFjY2Vzc1R5cGUsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+LCBTdHJ1Y3R1
cmUqLAotICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCgpKTsKLSAgICAKLSAgICB+R2V0QnlJZEFjY2VzcygpOwotICAg
IAotICAgIHN0YXRpYyBHZXRCeUlkQWNjZXNzIGZyb21TdHJ1Y3R1cmVTdHViSW5mbyhTdHJ1Y3R1
cmVTdHViSW5mbyYpOwotICAgIAotICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX3R5
cGUgIT0gSW52YWxpZDsgfQotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlz
U2V0KCk7IH0KLSAgICAKLSAgICBBY2Nlc3NUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5
cGU7IH0KLSAgICAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RydWN0dXJlLmdldCgpOyB9Ci0gICAgCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9Ci0g
ICAgCi0gICAgSklUU3R1YlJvdXRpbmUqIHN0dWJSb3V0aW5lKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVChpc1NldCgpKTsKLSAgICAgICAgcmV0dXJuIG1fc3R1YlJvdXRpbmUuZ2V0KCk7
Ci0gICAgfQotICAgIAotICAgIGJvb2wgZG9lc0NhbGxzKCkgY29uc3QgeyByZXR1cm4gdHlwZSgp
ID09IEdldHRlciB8fCB0eXBlKCkgPT0gQ3VzdG9tR2V0dGVyOyB9Ci0gICAgCi0gICAgYm9vbCB2
aXNpdFdlYWsoVk0mKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgQ29kZUJs
b2NrOwotICAgIAotICAgIEFjY2Vzc1R5cGUgbV90eXBlOwotICAgIFdyaXRlQmFycmllcjxTdHJ1
Y3R1cmU+IG1fc3RydWN0dXJlOwotICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29u
ZGl0aW9uU2V0OwotICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gbV9zdHViUm91dGluZTsKLX07
Ci0KLWNsYXNzIFBvbHltb3JwaGljR2V0QnlJZExpc3QgewotICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwotcHVibGljOgotICAgIC8vIEVpdGhlciBjcmVhdGVzIGEgbmV3IHBvbHltb3JwaGlj
IGdldCBsaXN0LCBvciByZXR1cm5zIHRoZSBvbmUgdGhhdCBpcyBhbHJlYWR5IGluCi0gICAgLy8g
cGxhY2UuCi0gICAgc3RhdGljIFBvbHltb3JwaGljR2V0QnlJZExpc3QqIGZyb20oU3RydWN0dXJl
U3R1YkluZm8mKTsKLSAgICAKLSAgICB+UG9seW1vcnBoaWNHZXRCeUlkTGlzdCgpOwotICAgIAot
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdXJyZW50U2xvd1BhdGhUYXJnZXQoU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvKSBjb25zdDsKLSAgICAKLSAgICB2b2lkIGFkZEFjY2Vzcyhjb25z
dCBHZXRCeUlkQWNjZXNzJik7Ci0gICAgCi0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1
cm4gbV9saXN0LmlzRW1wdHkoKTsgfQotICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVy
biBtX2xpc3Quc2l6ZSgpOyB9Ci0gICAgYm9vbCBpc0Z1bGwoKSBjb25zdDsKLSAgICBib29sIGlz
QWxtb3N0RnVsbCgpIGNvbnN0OyAvLyBUcnVlIGlmIGFkZGluZyBhbiBlbGVtZW50IHdvdWxkIG1h
a2UgaXNGdWxsKCkgdHJ1ZS4KLSAgICBjb25zdCBHZXRCeUlkQWNjZXNzJiBhdCh1bnNpZ25lZCBp
KSBjb25zdCB7IHJldHVybiBtX2xpc3RbaV07IH0KLSAgICBjb25zdCBHZXRCeUlkQWNjZXNzJiBv
cGVyYXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdFtpXTsgfQotICAgIAot
ICAgIGJvb2wgZGlkU2VsZlBhdGNoaW5nKCkgY29uc3Q7IC8vIEFyZSBhbnkgb2YgdGhlIGFjY2Vz
c2VzIFNpbXBsZUlubGluZT8KLSAgICAKLSAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0Owot
Ci1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7Ci0gICAgCi0gICAgUG9seW1v
cnBoaWNHZXRCeUlkTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyYpOwotICAgIAotICAgIFZlY3RvcjxH
ZXRCeUlkQWNjZXNzLCAyPiBtX2xpc3Q7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2Vu
ZGlmIC8vIEVOQUJMRShKSVQpCi0KLSNlbmRpZiAvLyBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0X2gK
LQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJ
ZExpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
b2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcAkocmV2aXNpb24gMTg5NTQzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDE1NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0
LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgiCi0KLSNpZiBFTkFCTEUoSklUKQotCi0jaW5jbHVk
ZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLVB1dEJ5SWRBY2Nl
c3MgUHV0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbykKLXsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgaW5pdGlhbFNsb3dQYXRo
ID0KLSAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1
YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSk7Ci0gICAgCi0gICAgUHV0QnlJZEFjY2Vz
cyByZXN1bHQ7Ci0gICAgCi0gICAgc3dpdGNoIChzdHViSW5mby5hY2Nlc3NUeXBlKSB7Ci0gICAg
Y2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2U6Ci0gICAgICAgIHJlc3VsdC5tX3R5cGUgPSBS
ZXBsYWNlOwotICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuY29weUZyb20oc3R1YkluZm8u
dS5wdXRCeUlkUmVwbGFjZS5iYXNlT2JqZWN0U3RydWN0dXJlKTsKLSAgICAgICAgcmVzdWx0Lm1f
c3R1YlJvdXRpbmUgPSBKSVRTdHViUm91dGluZTo6Y3JlYXRlU2VsZk1hbmFnZWRSb3V0aW5lKGlu
aXRpYWxTbG93UGF0aCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAKLSAgICBjYXNlIGFjY2Vz
c19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6Ci0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lk
X3RyYW5zaXRpb25fbm9ybWFsOgotICAgICAgICByZXN1bHQubV90eXBlID0gVHJhbnNpdGlvbjsK
LSAgICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlLmNvcHlGcm9tKHN0dWJJbmZvLnUucHV0QnlJ
ZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUpOwotICAgICAgICByZXN1bHQubV9uZXdTdHJ1
Y3R1cmUuY29weUZyb20oc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUpOwot
ICAgICAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dDo6YWRvcHRSYXdQb2ludGVyKAotICAgICAgICAgICAgc3R1YkluZm8udS5wdXRCeUlkVHJhbnNp
dGlvbi5yYXdDb25kaXRpb25TZXQpOwotICAgICAgICByZXN1bHQubV9zdHViUm91dGluZSA9IHN0
dWJJbmZvLnN0dWJSb3V0aW5lOwotICAgICAgICBicmVhazsKLSAgICAgICAgCi0gICAgZGVmYXVs
dDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgCi0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBQdXRCeUlkQWNjZXNzOjp2aXNpdFdlYWsoVk0m
IHZtKSBjb25zdAotewotICAgIGlmICghbV9jb25kaXRpb25TZXQuYXJlU3RpbGxMaXZlKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgIGNh
c2UgUmVwbGFjZToKLSAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX29sZFN0cnVjdHVyZS5n
ZXQoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgVHJhbnNpdGlvbjoKLSAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX29sZFN0cnVjdHVy
ZS5nZXQoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghSGVhcDo6
aXNNYXJrZWQobV9uZXdTdHJ1Y3R1cmUuZ2V0KCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNldHRlcjoKLSAgICBjYXNlIEN1c3RvbVNldHRl
cjoKLSAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX29sZFN0cnVjdHVyZS5nZXQoKSkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0gICAgaWYgKCFtX3N0dWJSb3V0aW5lLT52aXNpdFdlYWsodm0pKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVBvbHltb3JwaGljUHV0QnlJ
ZExpc3Q6OlBvbHltb3JwaGljUHV0QnlJZExpc3QoCi0gICAgUHV0S2luZCBwdXRLaW5kLCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi0gICAgOiBtX2tpbmQocHV0S2luZCkKLXsKLSAgICBp
ZiAoc3R1YkluZm8uYWNjZXNzVHlwZSAhPSBhY2Nlc3NfdW5zZXQpCi0gICAgICAgIG1fbGlzdC5h
cHBlbmQoUHV0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKHN0dWJJbmZvKSk7Ci19
Ci0KLVBvbHltb3JwaGljUHV0QnlJZExpc3QqIFBvbHltb3JwaGljUHV0QnlJZExpc3Q6OmZyb20o
Ci0gICAgUHV0S2luZCBwdXRLaW5kLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0g
ICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3B1dF9ieV9pZF9saXN0KQotICAg
ICAgICByZXR1cm4gc3R1YkluZm8udS5wdXRCeUlkTGlzdC5saXN0OwotICAgIAotICAgIEFTU0VS
VChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFjZQotICAgICAg
ICB8fCBzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9u
b3JtYWwKLSAgICAgICAgfHwgc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfcHV0X2J5X2lk
X3RyYW5zaXRpb25fZGlyZWN0Ci0gICAgICAgIHx8IHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNj
ZXNzX3Vuc2V0KTsKLSAgICAKLSAgICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiByZXN1bHQgPQot
ICAgICAgICBuZXcgUG9seW1vcnBoaWNQdXRCeUlkTGlzdChwdXRLaW5kLCBzdHViSW5mbyk7Ci0g
ICAgCi0gICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRMaXN0KHJlc3VsdCk7Ci0gICAgCi0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6flBvbHltb3JwaGljUHV0
QnlJZExpc3QoKSB7IH0KLQotYm9vbCBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojppc0Z1bGwoKSBj
b25zdAotewotICAgIEFTU0VSVChzaXplKCkgPD0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpF
KTsKLSAgICByZXR1cm4gc2l6ZSgpID09IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRTsKLX0K
LQotYm9vbCBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojppc0FsbW9zdEZ1bGwoKSBjb25zdAotewot
ICAgIEFTU0VSVChzaXplKCkgPD0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKTsKLSAgICBy
ZXR1cm4gc2l6ZSgpID49IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDE7Ci19Ci0KLXZv
aWQgUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6YWRkQWNjZXNzKGNvbnN0IFB1dEJ5SWRBY2Nlc3Mm
IHB1dEJ5SWRBY2Nlc3MpCi17Ci0gICAgQVNTRVJUKCFpc0Z1bGwoKSk7Ci0gICAgLy8gTWFrZSBz
dXJlIHRoYXQgdGhlIHJlc2l6aW5nIG9wdGltaXplcyBmb3Igc3BhY2UsIG5vdCB0aW1lLgotICAg
IG1fbGlzdC5yZXNpemVUb0ZpdChtX2xpc3Quc2l6ZSgpICsgMSk7Ci0gICAgbV9saXN0Lmxhc3Qo
KSA9IHB1dEJ5SWRBY2Nlc3M7Ci19Ci0KLWJvb2wgUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6dmlz
aXRXZWFrKFZNJiB2bSkgY29uc3QKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKCFhdChpKS52aXNpdFdlYWsodm0pKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oCShy
ZXZpc2lvbiAxODk1NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNQdXRCeUlkTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIxNiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
Zm5kZWYgUG9seW1vcnBoaWNQdXRCeUlkTGlzdF9oCi0jZGVmaW5lIFBvbHltb3JwaGljUHV0QnlJ
ZExpc3RfaAotCi0jaWYgRU5BQkxFKEpJVCkKLQotI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKLSNp
bmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgotI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0LmgiCi0jaW5jbHVkZSAiT3Bjb2RlLmgiCi0jaW5jbHVkZSAiUHV0S2luZC5oIgotI2lu
Y2x1ZGUgIlB1dFByb3BlcnR5U2xvdC5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgotI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENvZGVCbG9jazsK
LXN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbzsKLQotY2xhc3MgUHV0QnlJZEFjY2VzcyB7Ci1wdWJs
aWM6Ci0gICAgZW51bSBBY2Nlc3NUeXBlIHsKLSAgICAgICAgSW52YWxpZCwKLSAgICAgICAgVHJh
bnNpdGlvbiwKLSAgICAgICAgUmVwbGFjZSwKLSAgICAgICAgU2V0dGVyLAotICAgICAgICBDdXN0
b21TZXR0ZXIKLSAgICB9OwotICAgIAotICAgIFB1dEJ5SWRBY2Nlc3MoKQotICAgICAgICA6IG1f
dHlwZShJbnZhbGlkKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIFB1dEJ5SWRBY2Nl
c3MgdHJhbnNpdGlvbigKLSAgICAgICAgVk0mIHZtLAotICAgICAgICBKU0NlbGwqIG93bmVyLAot
ICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwKLSAgICAgICAgU3RydWN0dXJlKiBuZXdT
dHJ1Y3R1cmUsCi0gICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25k
aXRpb25TZXQsCi0gICAgICAgIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5l
KQotICAgIHsKLSAgICAgICAgUHV0QnlJZEFjY2VzcyByZXN1bHQ7Ci0gICAgICAgIHJlc3VsdC5t
X3R5cGUgPSBUcmFuc2l0aW9uOwotICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuc2V0KHZt
LCBvd25lciwgb2xkU3RydWN0dXJlKTsKLSAgICAgICAgcmVzdWx0Lm1fbmV3U3RydWN0dXJlLnNl
dCh2bSwgb3duZXIsIG5ld1N0cnVjdHVyZSk7Ci0gICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvblNl
dCA9IGNvbmRpdGlvblNldDsKLSAgICAgICAgcmVzdWx0Lm1fY3VzdG9tU2V0dGVyID0gMDsKLSAg
ICAgICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBzdHViUm91dGluZTsKLSAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICB9Ci0KLSAgICBzdGF0aWMgUHV0QnlJZEFjY2VzcyByZXBsYWNlKAotICAg
ICAgICBWTSYgdm0sCi0gICAgICAgIEpTQ2VsbCogb3duZXIsCi0gICAgICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlLAotICAgICAgICBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGlu
ZSkKLSAgICB7Ci0gICAgICAgIFB1dEJ5SWRBY2Nlc3MgcmVzdWx0OwotICAgICAgICByZXN1bHQu
bV90eXBlID0gUmVwbGFjZTsKLSAgICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlLnNldCh2bSwg
b3duZXIsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHJlc3VsdC5tX2N1c3RvbVNldHRlciA9IDA7Ci0g
ICAgICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gc3R1YlJvdXRpbmU7Ci0gICAgICAgIHJldHVy
biByZXN1bHQ7Ci0gICAgfQotCi0KLSAgICBzdGF0aWMgUHV0QnlJZEFjY2VzcyBzZXR0ZXIoCi0g
ICAgICAgIFZNJiB2bSwKLSAgICAgICAgSlNDZWxsKiBvd25lciwKLSAgICAgICAgQWNjZXNzVHlw
ZSBhY2Nlc3NUeXBlLAotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKLSAgICAgICAgY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwKLSAgICAgICAgUHV0
UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmMgY3VzdG9tU2V0dGVyLAotICAgICAgICBQYXNzUmVm
UHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSkKLSAgICB7Ci0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGFjY2Vzc1R5cGUgPT0gU2V0dGVyIHx8IGFjY2Vzc1R5cGUgPT0gQ3VzdG9tU2V0dGVy
KTsKLSAgICAgICAgUHV0QnlJZEFjY2VzcyByZXN1bHQ7Ci0gICAgICAgIHJlc3VsdC5tX29sZFN0
cnVjdHVyZS5zZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOwotICAgICAgICByZXN1bHQubV90eXBl
ID0gYWNjZXNzVHlwZTsKLSAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9u
U2V0OwotICAgICAgICByZXN1bHQubV9jdXN0b21TZXR0ZXIgPSBjdXN0b21TZXR0ZXI7Ci0gICAg
ICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gc3R1YlJvdXRpbmU7Ci0gICAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyBQdXRCeUlkQWNjZXNzIGZyb21TdHJ1Y3R1
cmVTdHViSW5mbyhTdHJ1Y3R1cmVTdHViSW5mbyYpOwotICAgIAotICAgIGJvb2wgaXNTZXQoKSBj
b25zdCB7IHJldHVybiBtX3R5cGUgIT0gSW52YWxpZDsgfQotICAgIGJvb2wgb3BlcmF0b3IhKCkg
Y29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KLSAgICAKLSAgICBBY2Nlc3NUeXBlIHR5cGUoKSBj
b25zdCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICAKLSAgICBib29sIGlzVHJhbnNpdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBUcmFuc2l0aW9uOyB9Ci0gICAgYm9vbCBpc1JlcGxhY2Uo
KSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gUmVwbGFjZTsgfQotICAgIGJvb2wgaXNTZXR0ZXIo
KSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gU2V0dGVyOyB9Ci0gICAgYm9vbCBpc0N1c3RvbSgp
IGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBDdXN0b21TZXR0ZXI7IH0KLSAgICAKLSAgICBTdHJ1
Y3R1cmUqIG9sZFN0cnVjdHVyZSgpIGNvbnN0Ci0gICAgewotICAgICAgICAvLyBVc2luZyB0aGlz
IGluc3RlYWQgb2YgaXNTZXQoKSB0byBtYWtlIHRoaXMgYXNzZXJ0aW9uIHJvYnVzdCBhZ2FpbnN0
IHRoZSBwb3NzaWJpbGl0eQotICAgICAgICAvLyBvZiBhZGRpdGlvbmFsIGFjY2VzcyB0eXBlcyBi
ZWluZyBhZGRlZC4KLSAgICAgICAgQVNTRVJUKGlzVHJhbnNpdGlvbigpIHx8IGlzUmVwbGFjZSgp
IHx8IGlzU2V0dGVyKCkgfHwgaXNDdXN0b20oKSk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4g
bV9vbGRTdHJ1Y3R1cmUuZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc1JlcGxhY2UoKSB8fCBpc1NldHRl
cigpIHx8IGlzQ3VzdG9tKCkpOwotICAgICAgICByZXR1cm4gbV9vbGRTdHJ1Y3R1cmUuZ2V0KCk7
Ci0gICAgfQotICAgIAotICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlKCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIEFTU0VSVChpc1RyYW5zaXRpb24oKSk7Ci0gICAgICAgIHJldHVybiBtX25ld1N0
cnVjdHVyZS5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9
Ci0gICAgCi0gICAgSklUU3R1YlJvdXRpbmUqIHN0dWJSb3V0aW5lKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChpc1RyYW5zaXRpb24oKSB8fCBpc1JlcGxhY2UoKSB8fCBpc1NldHRlcigp
IHx8IGlzQ3VzdG9tKCkpOwotICAgICAgICByZXR1cm4gbV9zdHViUm91dGluZS5nZXQoKTsKLSAg
ICB9Ci0KLSAgICBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyBjdXN0b21TZXR0ZXIoKSBj
b25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzQ3VzdG9tKCkpOwotICAgICAgICByZXR1cm4g
bV9jdXN0b21TZXR0ZXI7Ci0gICAgfQotCi0gICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25zdDsK
LSAgICAKLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKLSAgICAKLSAgICBB
Y2Nlc3NUeXBlIG1fdHlwZTsKLSAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX29sZFN0cnVj
dHVyZTsKLSAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX25ld1N0cnVjdHVyZTsKLSAgICBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKLSAgICBQdXRQcm9wZXJ0
eVNsb3Q6OlB1dFZhbHVlRnVuYyBtX2N1c3RvbVNldHRlcjsKLSAgICBSZWZQdHI8SklUU3R1YlJv
dXRpbmU+IG1fc3R1YlJvdXRpbmU7Ci19OwotCi1jbGFzcyBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0
IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICAvLyBFaXRoZXIg
Y3JlYXRlcyBhIG5ldyBwb2x5bW9ycGhpYyBwdXQgbGlzdCwgb3IgcmV0dXJucyB0aGUgb25lIHRo
YXQgaXMgYWxyZWFkeQotICAgIC8vIGluIHBsYWNlLgotICAgIHN0YXRpYyBQb2x5bW9ycGhpY1B1
dEJ5SWRMaXN0KiBmcm9tKFB1dEtpbmQsIFN0cnVjdHVyZVN0dWJJbmZvJik7Ci0gICAgCi0gICAg
flBvbHltb3JwaGljUHV0QnlJZExpc3QoKTsKLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgY3VycmVudFNsb3dQYXRoVGFyZ2V0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBt
X2xpc3QubGFzdCgpLnN0dWJSb3V0aW5lKCktPmNvZGUoKS5jb2RlKCk7Ci0gICAgfQotICAgIAot
ICAgIHZvaWQgYWRkQWNjZXNzKGNvbnN0IFB1dEJ5SWRBY2Nlc3MmKTsKLSAgICAKLSAgICBib29s
IGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2xpc3QuaXNFbXB0eSgpOyB9Ci0gICAgdW5zaWdu
ZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5zaXplKCk7IH0KLSAgICBib29sIGlzRnVs
bCgpIGNvbnN0OwotICAgIGJvb2wgaXNBbG1vc3RGdWxsKCkgY29uc3Q7IC8vIFRydWUgaWYgYWRk
aW5nIGFuIGVsZW1lbnQgd291bGQgbWFrZSBpc0Z1bGwoKSB0cnVlLgotICAgIGNvbnN0IFB1dEJ5
SWRBY2Nlc3MmIGF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdFtpXTsgfQotICAg
IGNvbnN0IFB1dEJ5SWRBY2Nlc3MmIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QgeyByZXR1
cm4gbV9saXN0W2ldOyB9Ci0gICAgCi0gICAgUHV0S2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4g
bV9raW5kOyB9Ci0gICAgCi0gICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25zdDsKLSAgICAKLXBy
aXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKLSAgICAKLSAgICAvLyBJbml0aWFs
aXplIGZyb20gYSBzdHViIGluZm87IHRoaXMgd2lsbCBwbGFjZSBvbmUgZWxlbWVudCBpbiB0aGUg
bGlzdCBhbmQgaXQgd2lsbAotICAgIC8vIGJlIGNyZWF0ZWQgYnkgY29udmVydGluZyB0aGUgc3R1
YiBpbmZvJ3MgcHV0IGJ5IGlkIGFjY2VzcyBpbmZvcm1hdGlvbiBpbnRvIG91cgotICAgIC8vIFB1
dEJ5SWRBY2Nlc3MuCi0gICAgUG9seW1vcnBoaWNQdXRCeUlkTGlzdChQdXRLaW5kLCBTdHJ1Y3R1
cmVTdHViSW5mbyYpOwotCi0gICAgVmVjdG9yPFB1dEJ5SWRBY2Nlc3MsIDI+IG1fbGlzdDsKLSAg
ICBQdXRLaW5kIG1fa2luZDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8g
RU5BQkxFKEpJVCkKLQotI2VuZGlmIC8vIFBvbHltb3JwaGljUHV0QnlJZExpc3RfaAotCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3Bw
CShyZXZpc2lvbiAxODk1NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0
QnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEzICsyNiwxMiBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKIAotI2luY2x1ZGUgIkFj
Y2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5j
bHVkZSAiQ29tcGxleEdldFN0YXR1cy5oIgogI2luY2x1ZGUgIkxMSW50RGF0YS5oIgogI2luY2x1
ZGUgIkxvd0xldmVsSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5j
bHVkZSAiUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oIgorI2luY2x1ZGUgIlBvbHltb3JwaGljQWNj
ZXNzLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlQ2hhaW4u
aCIKICNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KQEAgLTE1NCw2NiArMTUzLDQzIEBAIFB1dEJ5
SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICBpZiAoIXN0dWJJbmZvLT5z
ZWVuKQogICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cygpOwogICAgIAotICAgIHN3aXRjaCAo
c3R1YkluZm8tPmFjY2Vzc1R5cGUpIHsKLSAgICBjYXNlIGFjY2Vzc191bnNldDoKKyAgICBzd2l0
Y2ggKHN0dWJJbmZvLT5jYWNoZVR5cGUpIHsKKyAgICBjYXNlIENhY2hlVHlwZTo6VW5zZXQ6CiAg
ICAgICAgIC8vIElmIHRoZSBKSVQgc2F3IGl0IGJ1dCBkaWRuJ3Qgb3B0aW1pemUgaXQsIHRoZW4g
YXNzdW1lIHRoYXQgdGhpcyB0YWtlcyBzbG93IHBhdGguCiAgICAgICAgIHJldHVybiBQdXRCeUlk
U3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgICAgICAKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlf
aWRfcmVwbGFjZTogeworICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZTogewogICAg
ICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPQotICAgICAgICAgICAgc3R1YkluZm8tPnUucHV0
QnlJZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7Cisg
ICAgICAgICAgICBzdHViSW5mby0+dS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLT5nZXRD
b25jdXJyZW50bHkodWlkKTsKICAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgewog
ICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAotICAgICAgICAgICAg
ICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRSZXBsYWNlLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCks
IG9mZnNldCk7CisgICAgICAgICAgICAgICAgc3R1YkluZm8tPnUuYnlJZFNlbGYuYmFzZU9iamVj
dFN0cnVjdHVyZS5nZXQoKSwgb2Zmc2V0KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICB9CiAgICAgICAgIAotICAgIGNhc2UgYWNj
ZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlf
aWRfdHJhbnNpdGlvbl9kaXJlY3Q6IHsKLSAgICAgICAgQVNTRVJUKHN0dWJJbmZvLT51LnB1dEJ5
SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhh
c0JlZW5JbnZhbGlkYXRlZCgpKTsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gCi0g
ICAgICAgICAgICBzdHViSW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUtPmdldENv
bmN1cnJlbnRseSh1aWQpOwotICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7Ci0g
ICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQgPSBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6ZnJvbVJhd1BvaW50ZXIoCi0gICAgICAgICAgICAgICAg
c3R1YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0KTsKLSAgICAgICAg
ICAgIGlmICghY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eSgpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgICAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAotICAgICAgICAgICAgICAgIHN0
dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgpLAotICAg
ICAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5nZXQo
KSwKLSAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQsIG9mZnNldCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgfQotICAgICAg
ICAKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfbGlzdDogewotICAgICAgICBQb2x5bW9ycGhp
Y1B1dEJ5SWRMaXN0KiBsaXN0ID0gc3R1YkluZm8tPnUucHV0QnlJZExpc3QubGlzdDsKKyAgICBj
YXNlIENhY2hlVHlwZTo6U3R1YjogeworICAgICAgICBQb2x5bW9ycGhpY0FjY2VzcyogbGlzdCA9
IHN0dWJJbmZvLT51LnN0dWI7CiAgICAgICAgIAogICAgICAgICBQdXRCeUlkU3RhdHVzIHJlc3Vs
dDsKICAgICAgICAgcmVzdWx0Lm1fc3RhdGUgPSBTaW1wbGU7CiAgICAgICAgIAogICAgICAgICBT
dGF0ZSBzbG93UGF0aFN0YXRlID0gVGFrZXNTbG93UGF0aDsKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBjb25zdCBQdXRC
eUlkQWNjZXNzJiBhY2Nlc3MgPSBsaXN0LT5hdChpKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgc3dpdGNoIChhY2Nlc3MudHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIFB1dEJ5SWRBY2Nl
c3M6OlNldHRlcjoKLSAgICAgICAgICAgIGNhc2UgUHV0QnlJZEFjY2Vzczo6Q3VzdG9tU2V0dGVy
OgorICAgICAgICAgICAgY29uc3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0gbGlzdC0+YXQoaSk7Cisg
ICAgICAgICAgICBpZiAoYWNjZXNzLmRvZXNDYWxscygpKQogICAgICAgICAgICAgICAgIHNsb3dQ
YXRoU3RhdGUgPSBNYWtlc0NhbGxzOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPnNp
emUoKTsgKytpKSB7Ci0gICAgICAgICAgICBjb25zdCBQdXRCeUlkQWNjZXNzJiBhY2Nlc3MgPSBs
aXN0LT5hdChpKTsKKyAgICAgICAgICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIGFjY2VzcyA9IGxpc3Qt
PmF0KGkpOworICAgICAgICAgICAgaWYgKGFjY2Vzcy52aWFQcm94eSgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUpOwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBQdXRCeUlkVmFyaWFudCB2YXJpYW50OwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBzd2l0Y2ggKGFjY2Vzcy50eXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgUHV0QnlJZEFj
Y2Vzczo6UmVwbGFjZTogeworICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpSZXBsYWNlOiB7
CiAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBhY2Nlc3Muc3RydWN0dXJl
KCk7CiAgICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5n
ZXRDb25jdXJyZW50bHkodWlkKTsKICAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQo
b2Zmc2V0KSkKQEAgLTIyMiw3ICsxOTgsNyBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6
OmNvbXB1dGVGb3JTCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFB1dEJ5SWRBY2Nlc3M6OlRyYW5zaXRpb246
IHsKKyAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6VHJhbnNpdGlvbjogewogICAgICAgICAg
ICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9CiAgICAgICAgICAgICAgICAgICAgIGFjY2Vz
cy5uZXdTdHJ1Y3R1cmUoKS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CiAgICAgICAgICAgICAgICAg
aWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCkBAIC0yMzEsMTEgKzIwNywxMSBAQCBQdXRCeUlk
U3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAgICAgICAgaWYgKCFj
b25kaXRpb25TZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUpOwogICAgICAgICAgICAgICAg
IHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKLSAgICAgICAgICAgICAgICAg
ICAgYWNjZXNzLm9sZFN0cnVjdHVyZSgpLCBhY2Nlc3MubmV3U3RydWN0dXJlKCksIGNvbmRpdGlv
blNldCwgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgYWNjZXNzLnN0cnVjdHVyZSgpLCBh
Y2Nlc3MubmV3U3RydWN0dXJlKCksIGNvbmRpdGlvblNldCwgb2Zmc2V0KTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
IGNhc2UgUHV0QnlJZEFjY2Vzczo6U2V0dGVyOiB7CisgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nh
c2U6OlNldHRlcjogewogICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYWNj
ZXNzLnN0cnVjdHVyZSgpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIENvbXBs
ZXhHZXRTdGF0dXMgY29tcGxleEdldFN0YXR1cyA9IENvbXBsZXhHZXRTdGF0dXM6OmNvbXB1dGVG
b3IoCkBAIC0yNDksMTIgKzIyNSwxMiBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNv
bXB1dGVGb3JTCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKHNsb3dQ
YXRoU3RhdGUpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIENv
bXBsZXhHZXRTdGF0dXM6OklubGluZWFibGU6IHsKLSAgICAgICAgICAgICAgICAgICAgQWNjZXNz
b3JDYWxsSklUU3R1YlJvdXRpbmUqIHN0dWIgPSBzdGF0aWNfY2FzdDxBY2Nlc3NvckNhbGxKSVRT
dHViUm91dGluZSo+KAotICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzLnN0dWJSb3V0aW5l
KCkpOworICAgICAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGFj
Y2Vzcy5jYWxsTGlua0luZm8oKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGNhbGxMaW5r
SW5mbyk7CiAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1
cz4gY2FsbExpbmtTdGF0dXMgPQogICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3Vu
aXF1ZTxDYWxsTGlua1N0YXR1cz4oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbExp
bmtTdGF0dXM6OmNvbXB1dGVGb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxv
Y2tlciwgcHJvZmlsZWRCbG9jaywgKnN0dWItPm1fY2FsbExpbmtJbmZvLCBjYWxsRXhpdFNpdGVE
YXRhKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tlciwgcHJvZmlsZWRC
bG9jaywgKmNhbGxMaW5rSW5mbywgY2FsbEV4aXRTaXRlRGF0YSkpOwogICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50OjpzZXR0
ZXIoCiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbXBsZXhHZXRTdGF0dXMu
b2Zmc2V0KCksIGNvbXBsZXhHZXRTdGF0dXMuY29uZGl0aW9uU2V0KCksCkBAIC0yNjMsNyArMjM5
LDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgY2FzZSBQdXRCeUlkQWNjZXNzOjpDdXN0b21TZXR0ZXI6CisgICAgICAgICAgICBjYXNlIEFj
Y2Vzc0Nhc2U6OkN1c3RvbVNldHRlcjoKICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0
YXR1cyhNYWtlc0NhbGxzKTsKIAogICAgICAgICAgICAgZGVmYXVsdDoKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAko
cmV2aXNpb24gMTg5NTQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCArMjcsNyBAQAogI2luY2x1
ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAKICNpbmNsdWRlICJKU09iamVjdC5oIgotI2luY2x1
ZGUgIlBvbHltb3JwaGljR2V0QnlJZExpc3QuaCIKLSNpbmNsdWRlICJQb2x5bW9ycGhpY1B1dEJ5
SWRMaXN0LmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKICNpbmNsdWRlICJSZXBh
dGNoLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMzYsMzcgKzM1LDUzIEBAIG5hbWVzcGFjZSBK
U0MgewogI2lmIEVOQUJMRShKSVQpCiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpkZXJlZigpCiB7
Ci0gICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2xp
c3Q6IHsKLSAgICAgICAgZGVsZXRlIHUuZ2V0QnlJZExpc3QubGlzdDsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfbGlzdDoKLSAgICAgICAgZGVsZXRl
IHUucHV0QnlJZExpc3QubGlzdDsKKyAgICBzd2l0Y2ggKGNhY2hlVHlwZSkgeworICAgIGNhc2Ug
Q2FjaGVUeXBlOjpTdHViOgorICAgICAgICBkZWxldGUgdS5zdHViOwogICAgICAgICByZXR1cm47
Ci0gICAgY2FzZSBhY2Nlc3NfaW5fbGlzdDogewotICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0
cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlcyA9IHUuaW5MaXN0LnN0cnVjdHVyZUxp
c3Q7Ci0gICAgICAgIGRlbGV0ZSBwb2x5bW9ycGhpY1N0cnVjdHVyZXM7CisgICAgY2FzZSBDYWNo
ZVR5cGU6OlVuc2V0OgorICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKKyAgICBjYXNl
IENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2U6CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAg
Y2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgotICAgIGNhc2UgYWNjZXNz
X3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdDoKLSAgICAgICAgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQ6OmFkb3B0UmF3UG9pbnRlcih1LnB1dEJ5SWRUcmFuc2l0aW9uLnJhd0NvbmRpdGlv
blNldCk7Ci0gICAgICAgIHUucHV0QnlJZFRyYW5zaXRpb24ucmF3Q29uZGl0aW9uU2V0ID0gbnVs
bHB0cjsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmOgot
ICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlOgotICAgIGNhc2UgYWNjZXNzX3Vuc2V0
OgotICAgICAgICAvLyBUaGVzZSBpbnN0cnVjdGlvbnMgZG9uJ3QgaGF2ZSB0byByZWxlYXNlIGFu
eSBhbGxvY2F0ZWQgbWVtb3J5Ci0gICAgICAgIHJldHVybjsKLSAgICBkZWZhdWx0OgotICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KKworICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVB0ciBTdHJ1Y3R1cmVT
dHViSW5mbzo6YWRkQWNjZXNzQ2FzZSgKKyAgICBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2Nr
LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGFj
Y2Vzc0Nhc2UpCit7CisgICAgaWYgKCFhY2Nlc3NDYXNlKQorICAgICAgICByZXR1cm4gTWFjcm9B
c3NlbWJsZXJDb2RlUHRyKCk7CisgICAgCisgICAgaWYgKGNhY2hlVHlwZSA9PSBDYWNoZVR5cGU6
OlN0dWIpCisgICAgICAgIHJldHVybiB1LnN0dWItPnJlZ2VuZXJhdGVXaXRoQ2FzZSh2bSwgY29k
ZUJsb2NrLCAqdGhpcywgaWRlbnQsIFdURjo6bW92ZShhY2Nlc3NDYXNlKSk7CisKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8UG9seW1vcnBoaWNBY2Nlc3M+IGFjY2VzcyA9IHN0ZDo6bWFrZV91bmlxdWU8
UG9seW1vcnBoaWNBY2Nlc3M+KCk7CisgICAgCisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxB
Y2Nlc3NDYXNlPj4gYWNjZXNzQ2FzZXM7CisgICAgCisgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vz
c0Nhc2U+IHByZXZpb3VzQ2FzZSA9CisgICAgICAgIEFjY2Vzc0Nhc2U6OmZyb21TdHJ1Y3R1cmVT
dHViSW5mbyh2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgKnRoaXMpOworICAgIGlm
IChwcmV2aW91c0Nhc2UpCisgICAgICAgIGFjY2Vzc0Nhc2VzLmFwcGVuZChXVEY6Om1vdmUocHJl
dmlvdXNDYXNlKSk7CisKKyAgICBhY2Nlc3NDYXNlcy5hcHBlbmQoV1RGOjptb3ZlKGFjY2Vzc0Nh
c2UpKTsKKworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByZXN1bHQgPQorICAgICAgICBhY2Nl
c3MtPnJlZ2VuZXJhdGVXaXRoQ2FzZXModm0sIGNvZGVCbG9jaywgKnRoaXMsIGlkZW50LCBXVEY6
Om1vdmUoYWNjZXNzQ2FzZXMpKTsKKworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4g
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7CisKKyAgICBjYWNoZVR5cGUgPSBDYWNoZVR5cGU6OlN0
dWI7CisgICAgdS5zdHViID0gYWNjZXNzLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gcmVzdWx0Owog
fQogCiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpyZXNldChDb2RlQmxvY2sqIGNvZGVCbG9jaykK
IHsKLSAgICBpZiAoYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpCisgICAgaWYgKGNhY2hlVHlw
ZSA9PSBDYWNoZVR5cGU6OlVuc2V0KQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaWYgKE9w
dGlvbnM6OnZlcmJvc2VPU1IoKSkgewpAQCAtNzQsNjAgKzg5LDM4IEBAIHZvaWQgU3RydWN0dXJl
U3R1YkluZm86OnJlc2V0KENvZGVCbG9jayoKICAgICAgICAgLy8gb2YgdGhlIENvZGVCbG9jay4K
ICAgICAgICAgZGF0YUxvZygiQ2xlYXJpbmcgc3RydWN0dXJlIGNhY2hlIChraW5kICIsIHN0YXRp
Y19jYXN0PGludD4oYWNjZXNzVHlwZSksICIpIGluICIsIFJhd1BvaW50ZXIoY29kZUJsb2NrKSwg
Ii5cbiIpOwogICAgIH0KLSAgICAKLSAgICBpZiAoaXNHZXRCeUlkQWNjZXNzKHN0YXRpY19jYXN0
PEFjY2Vzc1R5cGU+KGFjY2Vzc1R5cGUpKSkKKworICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgewor
ICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0OgogICAgICAgICByZXNldEdldEJ5SUQoY29kZUJsb2Nr
LCAqdGhpcyk7Ci0gICAgZWxzZSBpZiAoaXNQdXRCeUlkQWNjZXNzKHN0YXRpY19jYXN0PEFjY2Vz
c1R5cGU+KGFjY2Vzc1R5cGUpKSkKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpQdXQ6CiAgICAgICAgIHJlc2V0UHV0QnlJRChjb2RlQmxvY2ssICp0aGlzKTsKLSAgICBlbHNl
IHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNJbkFjY2VzcyhzdGF0aWNfY2FzdDxBY2Nlc3NU
eXBlPihhY2Nlc3NUeXBlKSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6
OkluOgogICAgICAgICByZXNldEluKGNvZGVCbG9jaywgKnRoaXMpOworICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgCiAgICAgZGVyZWYoKTsKLSAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX3Vuc2V0
OwotICAgIHN0dWJSb3V0aW5lID0gbnVsbHB0cjsKLSAgICB3YXRjaHBvaW50cyA9IG51bGxwdHI7
CisgICAgY2FjaGVUeXBlID0gQ2FjaGVUeXBlOjpVbnNldDsKIH0KIAogdm9pZCBTdHJ1Y3R1cmVT
dHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbmNlcyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAg
ICBWTSYgdm0gPSAqY29kZUJsb2NrLT52bSgpOwotICAgIAotICAgIHN3aXRjaCAoYWNjZXNzVHlw
ZSkgewotICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmOgotICAgICAgICBpZiAoSGVhcDo6
aXNNYXJrZWQodS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpKSkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lk
X2xpc3Q6IHsKLSAgICAgICAgaWYgKHUuZ2V0QnlJZExpc3QubGlzdC0+dmlzaXRXZWFrKHZtKSkK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgYWNj
ZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlf
aWRfdHJhbnNpdGlvbl9kaXJlY3Q6Ci0gICAgICAgIGlmIChIZWFwOjppc01hcmtlZCh1LnB1dEJ5
SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgpKQotICAgICAgICAgICAgJiYgSGVh
cDo6aXNNYXJrZWQodS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUuZ2V0KCkpCi0gICAgICAg
ICAgICAmJiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6ZnJvbVJhd1BvaW50ZXIodS5wdXRC
eUlkVHJhbnNpdGlvbi5yYXdDb25kaXRpb25TZXQpLmFyZVN0aWxsTGl2ZSgpKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfcmVw
bGFjZToKLSAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKHUucHV0QnlJZFJlcGxhY2UuYmFzZU9i
amVjdFN0cnVjdHVyZS5nZXQoKSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9saXN0OgotICAgICAgICBpZiAodS5wdXRCeUlk
TGlzdC5saXN0LT52aXNpdFdlYWsodm0pKQorCisgICAgc3dpdGNoIChjYWNoZVR5cGUpIHsKKyAg
ICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJZFNlbGY6CisgICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5
SWRSZXBsYWNlOgorICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQodS5ieUlkU2VsZi5iYXNlT2Jq
ZWN0U3RydWN0dXJlLmdldCgpKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBhY2Nlc3NfaW5fbGlzdDogewotICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0
cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlcyA9IHUuaW5MaXN0LnN0cnVjdHVyZUxp
c3Q7Ci0gICAgICAgIGlmIChwb2x5bW9ycGhpY1N0cnVjdHVyZXMtPnZpc2l0V2Vhayh1LmluTGlz
dC5saXN0U2l6ZSkpCisgICAgY2FzZSBDYWNoZVR5cGU6OlN0dWI6CisgICAgICAgIGlmICh1LnN0
dWItPnZpc2l0V2Vhayh2bSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGJyZWFrOwot
ICAgIH0KICAgICBkZWZhdWx0OgotICAgICAgICAvLyBUaGUgcmVzdCBvZiB0aGUgaW5zdHJ1Y3Rp
b25zIGRvbid0IHJlcXVpcmUgcmVmZXJlbmNlcywgc28gdGhlcmUgaXMgbm8gbmVlZCB0bwotICAg
ICAgICAvLyBkbyBhbnl0aGluZy4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJ
KHJldmlzaW9uIDE4OTU0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1
Y3R1cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVk
ZSAiTWFjcm9Bc3NlbWJsZXIuaCIKICNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dC5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgotI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzU3Ry
dWN0dXJlTGlzdC5oIgorI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCiAjaW5jbHVkZSAi
UmVnaXN0ZXJTZXQuaCIKICNpbmNsdWRlICJTcGlsbFJlZ2lzdGVyc01vZGUuaCIKICNpbmNsdWRl
ICJTdHJ1Y3R1cmUuaCIKQEAgLTQyLDU3ICs0MiwyNSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2lm
IEVOQUJMRShKSVQpCiAKLWNsYXNzIFBvbHltb3JwaGljR2V0QnlJZExpc3Q7Ci1jbGFzcyBQb2x5
bW9ycGhpY1B1dEJ5SWRMaXN0OworY2xhc3MgUG9seW1vcnBoaWNBY2Nlc3M7CiAKLWVudW0gQWNj
ZXNzVHlwZSB7Ci0gICAgYWNjZXNzX2dldF9ieV9pZF9zZWxmLAotICAgIGFjY2Vzc19nZXRfYnlf
aWRfbGlzdCwKLSAgICBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsLAotICAgIGFj
Y2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3QsCi0gICAgYWNjZXNzX3B1dF9ieV9pZF9y
ZXBsYWNlLAotICAgIGFjY2Vzc19wdXRfYnlfaWRfbGlzdCwKLSAgICBhY2Nlc3NfdW5zZXQsCi0g
ICAgYWNjZXNzX2luX2xpc3QKK2VudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhfdCB7CisgICAg
R2V0LAorICAgIFB1dCwKKyAgICBJbgogfTsKIAotaW5saW5lIGJvb2wgaXNHZXRCeUlkQWNjZXNz
KEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSkKLXsKLSAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKLSAg
ICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZjoKLSAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRf
bGlzdDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLX0KLSAgICAKLWlubGluZSBib29sIGlzUHV0QnlJZEFjY2VzcyhBY2Nl
c3NUeXBlIGFjY2Vzc1R5cGUpCi17Ci0gICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7Ci0gICAgY2Fz
ZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgotICAgIGNhc2UgYWNjZXNzX3B1
dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdDoKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfcmVw
bGFjZToKLSAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfbGlzdDoKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotaW5s
aW5lIGJvb2wgaXNJbkFjY2VzcyhBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUpCi17Ci0gICAgc3dpdGNo
IChhY2Nlc3NUeXBlKSB7Ci0gICAgY2FzZSBhY2Nlc3NfaW5fbGlzdDoKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KK2Vu
dW0gY2xhc3MgQ2FjaGVUeXBlIDogaW50OF90IHsKKyAgICBVbnNldCwKKyAgICBHZXRCeUlkU2Vs
ZiwKKyAgICBQdXRCeUlkUmVwbGFjZSwKKyAgICBTdHViCit9OwogCiBzdHJ1Y3QgU3RydWN0dXJl
U3R1YkluZm8gewotICAgIFN0cnVjdHVyZVN0dWJJbmZvKCkKLSAgICAgICAgOiBhY2Nlc3NUeXBl
KGFjY2Vzc191bnNldCkKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyhBY2Nlc3NUeXBlIGFjY2Vzc1R5
cGUpCisgICAgICAgIDogYWNjZXNzVHlwZShhY2Nlc3NUeXBlKQorICAgICAgICAsIGNhY2hlVHlw
ZShDYWNoZVR5cGU6OlVuc2V0KQogICAgICAgICAsIHNlZW4oZmFsc2UpCiAgICAgICAgICwgcmVz
ZXRCeUdDKGZhbHNlKQogICAgICAgICAsIHRvb2tTbG93UGF0aChmYWxzZSkKQEAgLTEwMCw1MyAr
NjgsMzEgQEAgc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICB7CiAgICAgfQogCi0gICAg
dm9pZCBpbml0R2V0QnlJZFNlbGYoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIGJh
c2VPYmplY3RTdHJ1Y3R1cmUpCisgICAgdm9pZCBpbml0R2V0QnlJZFNlbGYoVk0mIHZtLCBKU0Nl
bGwqIG93bmVyLCBTdHJ1Y3R1cmUqIGJhc2VPYmplY3RTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCkKICAgICB7Ci0gICAgICAgIGFjY2Vzc1R5cGUgPSBhY2Nlc3NfZ2V0X2J5X2lkX3Nl
bGY7Ci0KLSAgICAgICAgdS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLnNldCh2bSwg
b3duZXIsIGJhc2VPYmplY3RTdHJ1Y3R1cmUpOwotICAgIH0KKyAgICAgICAgY2FjaGVUeXBlID0g
Q2FjaGVUeXBlOjpHZXRCeUlkU2VsZjsKIAotICAgIHZvaWQgaW5pdEdldEJ5SWRMaXN0KFBvbHlt
b3JwaGljR2V0QnlJZExpc3QqIGxpc3QpCi0gICAgewotICAgICAgICBhY2Nlc3NUeXBlID0gYWNj
ZXNzX2dldF9ieV9pZF9saXN0OwotICAgICAgICB1LmdldEJ5SWRMaXN0Lmxpc3QgPSBsaXN0Owor
ICAgICAgICB1LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgYmFz
ZU9iamVjdFN0cnVjdHVyZSk7CisgICAgICAgIHUuYnlJZFNlbGYub2Zmc2V0ID0gb2Zmc2V0Owog
ICAgIH0KIAotICAgIC8vIFB1dEJ5SWQqCi0KLSAgICB2b2lkIGluaXRQdXRCeUlkVHJhbnNpdGlv
bihWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogcHJldmlvdXNTdHJ1Y3R1cmUsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25T
ZXQsIGJvb2wgaXNEaXJlY3QpCisgICAgdm9pZCBpbml0UHV0QnlJZFJlcGxhY2UoVk0mIHZtLCBK
U0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIGJhc2VPYmplY3RTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCkKICAgICB7Ci0gICAgICAgIGlmIChpc0RpcmVjdCkKLSAgICAgICAgICAgIGFj
Y2Vzc1R5cGUgPSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0OwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9u
X25vcm1hbDsKKyAgICAgICAgY2FjaGVUeXBlID0gQ2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZTsK
IAotICAgICAgICB1LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLnNldCh2bSwg
b3duZXIsIHByZXZpb3VzU3RydWN0dXJlKTsKLSAgICAgICAgdS5wdXRCeUlkVHJhbnNpdGlvbi5z
dHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKLSAgICAgICAgdS5wdXRCeUlkVHJh
bnNpdGlvbi5yYXdDb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQucmVsZWFzZVJhd1BvaW50ZXIo
KTsKKyAgICAgICAgdS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLnNldCh2bSwgb3duZXIs
IGJhc2VPYmplY3RTdHJ1Y3R1cmUpOworICAgICAgICB1LmJ5SWRTZWxmLm9mZnNldCA9IG9mZnNl
dDsKICAgICB9CiAKLSAgICB2b2lkIGluaXRQdXRCeUlkUmVwbGFjZShWTSYgdm0sIEpTQ2VsbCog
b3duZXIsIFN0cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIGFj
Y2Vzc1R5cGUgPSBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2U7Ci0gICAgCi0gICAgICAgIHUucHV0
QnlJZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBiYXNlT2JqZWN0
U3RydWN0dXJlKTsKLSAgICB9Ci0gICAgICAgIAotICAgIHZvaWQgaW5pdFB1dEJ5SWRMaXN0KFBv
bHltb3JwaGljUHV0QnlJZExpc3QqIGxpc3QpCi0gICAgewotICAgICAgICBhY2Nlc3NUeXBlID0g
YWNjZXNzX3B1dF9ieV9pZF9saXN0OwotICAgICAgICB1LnB1dEJ5SWRMaXN0Lmxpc3QgPSBsaXN0
OwotICAgIH0KLSAgICAKLSAgICB2b2lkIGluaXRJbkxpc3QoUG9seW1vcnBoaWNBY2Nlc3NTdHJ1
Y3R1cmVMaXN0KiBsaXN0LCBpbnQgbGlzdFNpemUpCisgICAgdm9pZCBpbml0U3R1YihzdGQ6OnVu
aXF1ZV9wdHI8UG9seW1vcnBoaWNBY2Nlc3M+IHN0dWIpCiAgICAgewotICAgICAgICBhY2Nlc3NU
eXBlID0gYWNjZXNzX2luX2xpc3Q7Ci0gICAgICAgIHUuaW5MaXN0LnN0cnVjdHVyZUxpc3QgPSBs
aXN0OwotICAgICAgICB1LmluTGlzdC5saXN0U2l6ZSA9IGxpc3RTaXplOworICAgICAgICBjYWNo
ZVR5cGUgPSBDYWNoZVR5cGU6OlN0dWI7CisgICAgICAgIHUuc3R1YiA9IHN0dWIucmVsZWFzZSgp
OwogICAgIH0KLSAgICAgICAgCisKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgYWRkQWNjZXNz
Q2FzZSgKKyAgICAgICAgVk0mLCBDb2RlQmxvY2sqLCBjb25zdCBJZGVudGlmaWVyJiwgc3RkOjp1
bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+KTsKKwogICAgIHZvaWQgcmVzZXQoQ29kZUJsb2NrKik7CiAK
ICAgICB2b2lkIGRlcmVmKCk7CkBAIC0xNjUsMTUgKzExMSw5IEBAIHN0cnVjdCBTdHJ1Y3R1cmVT
dHViSW5mbyB7CiAgICAgICAgIHNlZW4gPSB0cnVlOwogICAgIH0KICAgICAgICAgCi0gICAgU3Ry
dWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogYWRkV2F0Y2hwb2ludCgKLSAgICAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRp
b24gPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFdh
dGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6ZW5zdXJlUmVmZXJlbmNlQW5kQWRkV2F0Y2hw
b2ludCgKLSAgICAgICAgICAgIHdhdGNocG9pbnRzLCBjb2RlQmxvY2ssIHRoaXMsIGNvbmRpdGlv
bik7Ci0gICAgfQotICAgIAotICAgIGludDhfdCBhY2Nlc3NUeXBlOwotICAgIGJvb2wgc2VlbiA6
IDE7CisgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlOworICAgIENhY2hlVHlwZSBjYWNoZVR5cGU7
CisgICAgYm9vbCBzZWVuOwogICAgIGJvb2wgcmVzZXRCeUdDIDogMTsKICAgICBib29sIHRvb2tT
bG93UGF0aCA6IDE7CiAKQEAgLTIwMywzNCArMTQzLDEzIEBAIHN0cnVjdCBTdHJ1Y3R1cmVTdHVi
SW5mbyB7CiAKICAgICB1bmlvbiB7CiAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICAvLyBJ
dCB3b3VsZCBiZSB1bndpc2UgdG8gcHV0IGFueXRoaW5nIGhlcmUsIGFzIGl0IHdpbGwgc3VyZWx5
IGJlIG92ZXJ3cml0dGVuLgotICAgICAgICB9IHVuc2V0OwotICAgICAgICBzdHJ1Y3QgewotICAg
ICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IGJhc2VPYmplY3RTdHJ1Y3R1cmU7
Ci0gICAgICAgIH0gZ2V0QnlJZFNlbGY7Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBQ
b2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0OwotICAgICAgICB9IGdldEJ5SWRMaXN0OwotICAg
ICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IHBy
ZXZpb3VzU3RydWN0dXJlOwotICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+
IHN0cnVjdHVyZTsKLSAgICAgICAgICAgIHZvaWQqIHJhd0NvbmRpdGlvblNldDsKLSAgICAgICAg
fSBwdXRCeUlkVHJhbnNpdGlvbjsKLSAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIFdyaXRl
QmFycmllckJhc2U8U3RydWN0dXJlPiBiYXNlT2JqZWN0U3RydWN0dXJlOwotICAgICAgICB9IHB1
dEJ5SWRSZXBsYWNlOwotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgUG9seW1vcnBoaWNQ
dXRCeUlkTGlzdCogbGlzdDsKLSAgICAgICAgfSBwdXRCeUlkTGlzdDsKLSAgICAgICAgc3RydWN0
IHsKLSAgICAgICAgICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogc3RydWN0dXJl
TGlzdDsKLSAgICAgICAgICAgIGludCBsaXN0U2l6ZTsKLSAgICAgICAgfSBpbkxpc3Q7CisgICAg
ICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CisgICAgICAgIH0gYnlJZFNlbGY7CisgICAg
ICAgIFBvbHltb3JwaGljQWNjZXNzKiBzdHViOwogICAgIH0gdTsKIAotICAgIFJlZlB0cjxKSVRT
dHViUm91dGluZT4gc3R1YlJvdXRpbmU7CiAgICAgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsUmV0dXJu
TG9jYXRpb247Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHVi
SW5mbz4gd2F0Y2hwb2ludHM7CiB9OwogCiBpbmxpbmUgQ29kZU9yaWdpbiBnZXRTdHJ1Y3R1cmVT
dHViSW5mb0NvZGVPcmlnaW4oU3RydWN0dXJlU3R1YkluZm8mIHN0cnVjdHVyZVN0dWJJbmZvKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAJKHJldmlzaW9uIDE4OTU0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MzUsNyArOTM1LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluKE5vZGUqIG5vZAogICAgIAogICAgIGlmIChKU1N0cmlu
Zyogc3RyaW5nID0gbm9kZS0+Y2hpbGQxKCktPmR5bmFtaWNDYXN0Q29uc3RhbnQ8SlNTdHJpbmcq
PigpKSB7CiAgICAgICAgIGlmIChzdHJpbmctPnRyeUdldFZhbHVlSW1wbCgpICYmIHN0cmluZy0+
dHJ5R2V0VmFsdWVJbXBsKCktPmlzQXRvbWljKCkpIHsKLSAgICAgICAgICAgIFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRTdHViSW5mbygpOworICAg
ICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV9qaXQuY29kZUJsb2NrKCkt
PmFkZFN0dWJJbmZvKEFjY2Vzc1R5cGU6OkluKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAg
R1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CkBAIC05NTYsNiArOTU2LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUluKE5vZGUqIG5vZAogICAgICAgICAgICAgc3R1YkluZm8tPmNvZGVPcmlnaW4gPSBu
b2RlLT5vcmlnaW4uc2VtYW50aWM7CiAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFzZUdQ
UiA9IHN0YXRpY19jYXN0PGludDhfdD4oYmFzZUdQUik7CiAgICAgICAgICAgICBzdHViSW5mby0+
cGF0Y2gudmFsdWVHUFIgPSBzdGF0aWNfY2FzdDxpbnQ4X3Q+KHJlc3VsdEdQUik7CisjaWYgVVNF
KEpTVkFMVUUzMl82NCkKKyAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC52YWx1ZVRhZ0dQUiA9
IHN0YXRpY19jYXN0PGludDhfdD4oSW52YWxpZEdQUlJlZyk7CisjZW5kaWYKICAgICAgICAgICAg
IHN0dWJJbmZvLT5wYXRjaC51c2VkUmVnaXN0ZXJzID0gdXNlZFJlZ2lzdGVycygpOwogICAgICAg
ICAgICAgc3R1YkluZm8tPnBhdGNoLnNwaWxsTW9kZSA9IE5lZWRUb1NwaWxsOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHJldmlzaW9uIDE4OTU0MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUzOCw3ICs1MzgsNyBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFj
a01hcHMoCiAgICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHVzZWRS
ZWdpc3RlcnNGb3IocmVjb3JkKTsKICAgICAgICAgICAgICAgICBHUFJSZWcgcmVzdWx0ID0gcmVj
b3JkLmxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKTsKICAgICAgICAgICAgICAgICBHUFJSZWcgb2Jq
ID0gcmVjb3JkLmxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKTsKLSAgICAgICAgICAgICAgICBTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBjb2RlQmxvY2stPmFkZFN0dWJJbmZvKCk7IAorICAg
ICAgICAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IGNvZGVCbG9jay0+YWRk
U3R1YkluZm8oQWNjZXNzVHlwZTo6SW4pOyAKICAgICAgICAgICAgICAgICBzdHViSW5mby0+Y29k
ZU9yaWdpbiA9IGNvZGVPcmlnaW47CiAgICAgICAgICAgICAgICAgc3R1YkluZm8tPmNhbGxTaXRl
SW5kZXggPSBjaGVja0luLmNhbGxTaXRlSW5kZXgoKTsKICAgICAgICAgICAgICAgICBzdHViSW5m
by0+cGF0Y2guYmFzZUdQUiA9IHN0YXRpY19jYXN0PGludDhfdD4ob2JqKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQWNjZXNzb3JDYWxsSklUU3R1YlJv
dXRpbmUuY3BwCShyZXZpc2lvbiAxODk1NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0FjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1NSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJBY2Nlc3NvckNhbGxKSVRTdHViUm91
dGluZS5oIgotCi0jaWYgRU5BQkxFKEpJVCkKLQotI2luY2x1ZGUgIkNhbGxMaW5rSW5mby5oIgot
Ci1uYW1lc3BhY2UgSlNDIHsKLQotQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmU6OkFjY2Vzc29y
Q2FsbEpJVFN0dWJSb3V0aW5lKAotICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgY29k
ZSwgVk0mIHZtLCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtJbmZvPiBpbmZvKQotICAgIDogR0NB
d2FyZUpJVFN0dWJSb3V0aW5lKGNvZGUsIHZtKQotICAgICwgbV9jYWxsTGlua0luZm8oV1RGOjpt
b3ZlKGluZm8pKQotewotfQotCi1BY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZTo6fkFjY2Vzc29y
Q2FsbEpJVFN0dWJSb3V0aW5lKCkKLXsKLX0KLQotYm9vbCBBY2Nlc3NvckNhbGxKSVRTdHViUm91
dGluZTo6dmlzaXRXZWFrKFZNJiB2bSkKLXsKLSAgICBtX2NhbGxMaW5rSW5mby0+dmlzaXRXZWFr
KHZtKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRp
ZiAvLyBFTkFCTEUoSklUKQotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0FjY2Vz
c29yQ2FsbEpJVFN0dWJSb3V0aW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9BY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5oCShyZXZpc2lvbiAxODk1NDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0FjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEFjY2Vzc29yQ2FsbEpJVFN0dWJS
b3V0aW5lX2gKLSNkZWZpbmUgQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmVfaAotCi0jaWYgRU5B
QkxFKEpJVCkKLQotI2luY2x1ZGUgIkdDQXdhcmVKSVRTdHViUm91dGluZS5oIgotCi1uYW1lc3Bh
Y2UgSlNDIHsKLQotY2xhc3MgQ2FsbExpbmtJbmZvOwotCi0vLyBKSVQgc3R1YiByb3V0aW5lIGZv
ciB1c2UgYnkgSmF2YVNjcmlwdCBhY2Nlc3NvcnMuIFRoZXNlIHdpbGwgYmUgbWFraW5nIGEgSlMK
LS8vIGNhbGwgdGhhdCByZXF1aXJlcyBpbmxpbmUgY2FjaGluZy4gCi0KLWNsYXNzIEFjY2Vzc29y
Q2FsbEpJVFN0dWJSb3V0aW5lIDogcHVibGljIEdDQXdhcmVKSVRTdHViUm91dGluZSB7Ci1wdWJs
aWM6Ci0gICAgQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUoCi0gICAgICAgIGNvbnN0IE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiYsIFZNJiwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rSW5mbz4pOwot
ICAgIAotICAgIHZpcnR1YWwgfkFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lKCk7Ci0gICAgCi0g
ICAgdmlydHVhbCBib29sIHZpc2l0V2VhayhWTSYpIG92ZXJyaWRlOwotICAgIAotICAgIHN0ZDo6
dW5pcXVlX3B0cjxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZvOwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotCi0jZW5kaWYgLy8gQWNjZXNzb3JD
YWxsSklUU3R1YlJvdXRpbmVfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fz
c2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDE4OTU0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2Myw3ICs1NjMs
NyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBicmFuY2gzMihFcXVhbCwgcmVncy50YWdHUFIo
KSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKTsKICNlbmRpZgogICAgIH0K
LSAgICAKKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgSnVtcCBicmFuY2hTdHJ1Y3R1
cmUoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIFQgbGVmdEhhbmRTaWRlLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKICAgICB7CkBAIC04MzIsNiArODMyLDE1IEBAIHB1YmxpYzoKICNlbmRp
ZgogICAgIH0KIAorICAgIHZvaWQgYm94Qm9vbGVhblBheWxvYWQoYm9vbCB2YWx1ZSwgR1BSUmVn
IHBheWxvYWRHUFIpCisgICAgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKFZhbHVlRmFsc2UgKyB2YWx1ZSksIHBheWxvYWRHUFIpOworI2Vsc2UKKyAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIodmFsdWUpLCBwYXlsb2FkR1BSKTsKKyNlbmRpZgorICAgIH0K
KwogICAgIHZvaWQgYm94Qm9vbGVhbihHUFJSZWcgYm9vbEdQUiwgSlNWYWx1ZVJlZ3MgYm94ZWRS
ZWdzKQogICAgIHsKICAgICAgICAgYm94Qm9vbGVhblBheWxvYWQoYm9vbEdQUiwgYm94ZWRSZWdz
LnBheWxvYWRHUFIoKSk7CkBAIC04MzksNiArODQ4LDE3IEBAIHB1YmxpYzoKICAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZyksIGJveGVkUmVncy50YWdHUFIoKSk7
CiAjZW5kaWYKICAgICB9CisKKyAgICB2b2lkIGJveEludDMyKEdQUlJlZyBpbnRHUFIsIEpTVmFs
dWVSZWdzIGJveGVkUmVncykKKyAgICB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgbW92
ZShpbnRHUFIsIGJveGVkUmVncy5ncHIoKSk7CisgICAgICAgIG9yNjQoVHJ1c3RlZEltbTY0KFRh
Z1R5cGVOdW1iZXIpLCBib3hlZFJlZ3MuZ3ByKCkpOworI2Vsc2UKKyAgICAgICAgbW92ZShpbnRH
UFIsIGJveGVkUmVncy5wYXlsb2FkR1BSKCkpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpJbnQzMlRhZyksIGJveGVkUmVncy50YWdHUFIoKSk7CisjZW5kaWYKKyAgICB9CiAg
ICAgCiAgICAgdm9pZCBjYWxsRXhjZXB0aW9uRnV6eigpOwogICAgIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9CaW5hcnlTd2l0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQmluYXJ5U3dpdGNoLmNwcAkocmV2aXNpb24gMTg5NTQzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CaW5hcnlTd2l0Y2guY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw5ICsyOSwxMiBAQAogI2lmIEVOQUJMRShKSVQpCiAKICNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCitz
dGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKIHN0YXRpYyB1bnNpZ25lZCBnbG9i
YWxDb3VudGVyOyAvLyBXZSB1c2UgYSBkaWZmZXJlbnQgc2VlZCBldmVyeSB0aW1lIHdlIGFyZSBp
bnZva2VkLgogCiBCaW5hcnlTd2l0Y2g6OkJpbmFyeVN3aXRjaChHUFJSZWcgdmFsdWUsIGNvbnN0
IFZlY3RvcjxpbnQ2NF90PiYgY2FzZXMsIFR5cGUgdHlwZSkKQEAgLTQzLDExICs0NiwxNyBAQCBC
aW5hcnlTd2l0Y2g6OkJpbmFyeVN3aXRjaChHUFJSZWcgdmFsdWUsCiB7CiAgICAgaWYgKGNhc2Vz
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAg
IGRhdGFMb2coIk9yaWdpbmFsIGNhc2VzOiAiLCBsaXN0RHVtcChjYXNlcyksICJcbiIpOwogICAg
IAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjYXNlcy5zaXplKCk7ICsraSkKICAgICAg
ICAgbV9jYXNlcy5hcHBlbmQoQ2FzZShjYXNlc1tpXSwgaSkpOwogICAgIAogICAgIHN0ZDo6c29y
dChtX2Nhc2VzLmJlZ2luKCksIG1fY2FzZXMuZW5kKCkpOworCisgICAgaWYgKHZlcmJvc2UpCisg
ICAgICAgIGRhdGFMb2coIlNvcnRlZCBjYXNlczogIiwgbGlzdER1bXAobV9jYXNlcyksICJcbiIp
OwogICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBtX2Nhc2VzLnNpemUoKTsgKytp
KQogICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2Nhc2VzW2kgLSAxXSA8IG1fY2FzZXNbaV0pOwpA
QCAtMTI4LDYgKzEzNywxNSBAQCBib29sIEJpbmFyeVN3aXRjaDo6YWR2YW5jZShNYWNyb0Fzc2Vt
YmxlCiAKIHZvaWQgQmluYXJ5U3dpdGNoOjpidWlsZCh1bnNpZ25lZCBzdGFydCwgYm9vbCBoYXJk
U3RhcnQsIHVuc2lnbmVkIGVuZCkKIHsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxv
ZygiQnVpbGRpbmcgd2l0aCBzdGFydCA9ICIsIHN0YXJ0LCAiLCBoYXJkU3RhcnQgPSAiLCBoYXJk
U3RhcnQsICIsIGVuZCA9ICIsIGVuZCwgIlxuIik7CisKKyAgICBhdXRvIGFwcGVuZCA9IFsmXSAo
Y29uc3QgQnJhbmNoQ29kZSYgY29kZSkgeworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ICAgIGRhdGFMb2coIj09PiAiLCBjb2RlLCAiXG4iKTsKKyAgICAgICAgbV9icmFuY2hlcy5hcHBl
bmQoY29kZSk7CisgICAgfTsKKyAgICAKICAgICB1bnNpZ25lZCBzaXplID0gZW5kIC0gc3RhcnQ7
CiAgICAgCiAgICAgUkVMRUFTRV9BU1NFUlQoc2l6ZSk7CkBAIC0xNDEsNiArMTU5LDkgQEAgdm9p
ZCBCaW5hcnlTd2l0Y2g6OmJ1aWxkKHVuc2lnbmVkIHN0YXJ0LAogICAgIGNvbnN0IHVuc2lnbmVk
IGxlYWZUaHJlc2hvbGQgPSAzOwogICAgIAogICAgIGlmIChzaXplIDw9IGxlYWZUaHJlc2hvbGQp
IHsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCJJdCdzIGEgbGVh
Zi5cbiIpOworICAgICAgICAKICAgICAgICAgLy8gSXQgdHVybnMgb3V0IHRoYXQgZm9yIGV4YWN0
bHkgdGhyZWUgY2FzZXMgb3IgbGVzcywgaXQncyBiZXR0ZXIgdG8ganVzdCBjb21wYXJlIGVhY2gK
ICAgICAgICAgLy8gY2FzZSBpbmRpdmlkdWFsbHkuIFRoaXMgc2F2ZXMgMS82IG9mIGEgYnJhbmNo
IG9uIGF2ZXJhZ2UsIGFuZCB1cCB0byAxLzMgb2YgYSBicmFuY2ggaW4KICAgICAgICAgLy8gZXh0
cmVtZSBjYXNlcyB3aGVyZSB0aGUgZGl2aWRlLWFuZC1jb25xdWVyIGJvdHRvbXMgb3V0IGluIGEg
bG90IG9mIDMtY2FzZSBzdWJzd2l0Y2hlcy4KQEAgLTE1OCwxMiArMTc5LDE1IEBAIHZvaWQgQmlu
YXJ5U3dpdGNoOjpidWlsZCh1bnNpZ25lZCBzdGFydCwKICAgICAgICAgICAgICYmIG1fY2FzZXNb
c3RhcnQgKyBzaXplIC0gMV0udmFsdWUgPT0gbV9jYXNlc1tzdGFydCArIHNpemVdLnZhbHVlIC0g
MSkgewogICAgICAgICAgICAgYWxsQ29uc2VjdXRpdmUgPSB0cnVlOwogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemUgLSAxOyArK2kpIHsKLSAgICAgICAgICAgICAgICBp
ZiAobV9jYXNlc1tpXS52YWx1ZSArIDEgIT0gbV9jYXNlc1tpICsgMV0udmFsdWUpIHsKKyAgICAg
ICAgICAgICAgICBpZiAobV9jYXNlc1tzdGFydCArIGldLnZhbHVlICsgMSAhPSBtX2Nhc2VzW3N0
YXJ0ICsgaSArIDFdLnZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgIGFsbENvbnNlY3V0aXZl
ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KICAgICAgICAgfQorCisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAg
ICAgICAgZGF0YUxvZygiYWxsQ29uc2VjdXRpdmUgPSAiLCBhbGxDb25zZWN1dGl2ZSwgIlxuIik7
CiAgICAgICAgIAogICAgICAgICBWZWN0b3I8dW5zaWduZWQsIDM+IGxvY2FsQ2FzZUluZGljZXM7
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCkBAIC0xNzgsMTcg
KzIwMiwyMCBAQCB2b2lkIEJpbmFyeVN3aXRjaDo6YnVpbGQodW5zaWduZWQgc3RhcnQsCiAgICAg
ICAgICAgICB9KTsKICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
aXplIC0gMTsgKytpKSB7Ci0gICAgICAgICAgICBtX2JyYW5jaGVzLmFwcGVuZChCcmFuY2hDb2Rl
KE5vdEVxdWFsVG9QdXNoLCBsb2NhbENhc2VJbmRpY2VzW2ldKSk7Ci0gICAgICAgICAgICBtX2Jy
YW5jaGVzLmFwcGVuZChCcmFuY2hDb2RlKEV4ZWN1dGVDYXNlLCBsb2NhbENhc2VJbmRpY2VzW2ld
KSk7Ci0gICAgICAgICAgICBtX2JyYW5jaGVzLmFwcGVuZChCcmFuY2hDb2RlKFBvcCkpOworICAg
ICAgICAgICAgYXBwZW5kKEJyYW5jaENvZGUoTm90RXF1YWxUb1B1c2gsIGxvY2FsQ2FzZUluZGlj
ZXNbaV0pKTsKKyAgICAgICAgICAgIGFwcGVuZChCcmFuY2hDb2RlKEV4ZWN1dGVDYXNlLCBsb2Nh
bENhc2VJbmRpY2VzW2ldKSk7CisgICAgICAgICAgICBhcHBlbmQoQnJhbmNoQ29kZShQb3ApKTsK
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKCFhbGxDb25zZWN1dGl2ZSkKLSAgICAg
ICAgICAgIG1fYnJhbmNoZXMuYXBwZW5kKEJyYW5jaENvZGUoTm90RXF1YWxUb0ZhbGxUaHJvdWdo
LCBsb2NhbENhc2VJbmRpY2VzLmxhc3QoKSkpOworICAgICAgICAgICAgYXBwZW5kKEJyYW5jaENv
ZGUoTm90RXF1YWxUb0ZhbGxUaHJvdWdoLCBsb2NhbENhc2VJbmRpY2VzLmxhc3QoKSkpOwogICAg
ICAgICAKLSAgICAgICAgbV9icmFuY2hlcy5hcHBlbmQoQnJhbmNoQ29kZShFeGVjdXRlQ2FzZSwg
bG9jYWxDYXNlSW5kaWNlcy5sYXN0KCkpKTsKKyAgICAgICAgYXBwZW5kKEJyYW5jaENvZGUoRXhl
Y3V0ZUNhc2UsIGxvY2FsQ2FzZUluZGljZXMubGFzdCgpKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiSXQncyBub3QgYSBsZWFm
LlxuIik7CiAgICAgICAgIAogICAgIC8vIFRoZXJlIGFyZSB0d28gZGlmZmVyZW50IHN0cmF0ZWdp
ZXMgd2UgY291bGQgY29uc2lkZXIgaGVyZToKICAgICAvLwpAQCAtMjg2LDcgKzMxMywxMCBAQCB2
b2lkIEJpbmFyeVN3aXRjaDo6YnVpbGQodW5zaWduZWQgc3RhcnQsCiAgICAgLy8gYW5kIGdldCBh
IDEvNiBzcGVlZC11cCBvbiBhdmVyYWdlIGZvciB0YWtpbmcgYW4gZXhwbGljaXQgY2FzZS4KICAg
ICAgICAgCiAgICAgdW5zaWduZWQgbWVkaWFuSW5kZXggPSAoc3RhcnQgKyBlbmQpIC8gMjsKLSAg
ICAgICAgCisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygibWVkaWFuSW5kZXgg
PSAiLCBtZWRpYW5JbmRleCwgIlxuIik7CisKICAgICAvLyBXZSB3YW50IG1lZGlhbkluZGV4IHRv
IHBvaW50IHRvIHRoZSB0aGluZyB3ZSB3aWxsIGRvIGEgbGVzcy10aGFuIGNvbXBhcmUgYWdhaW5z
dC4gV2Ugd2FudAogICAgIC8vIHRoaXMgbGVzcy10aGFuIGNvbXBhcmUgdG8gc3BsaXQgdGhlIGN1
cnJlbnQgc3VibGlzdCBpbnRvIGVxdWFsLXNpemVkIHN1Ymxpc3RzLCBvcgogICAgIC8vIG5lYXJs
eS1lcXVhbC1zaXplZCB3aXRoIHNvbWUgcmFuZG9tbmVzcyBpZiB3ZSdyZSBpbiB0aGUgb2RkIGNh
c2UuIFdpdGggdGhlIGFib3ZlCkBAIC0zMTcsMTIgKzM0Nyw0NCBAQCB2b2lkIEJpbmFyeVN3aXRj
aDo6YnVpbGQodW5zaWduZWQgc3RhcnQsCiAgICAgUkVMRUFTRV9BU1NFUlQobWVkaWFuSW5kZXgg
PiBzdGFydCk7CiAgICAgUkVMRUFTRV9BU1NFUlQobWVkaWFuSW5kZXggKyAxIDwgZW5kKTsKICAg
ICAgICAgCi0gICAgbV9icmFuY2hlcy5hcHBlbmQoQnJhbmNoQ29kZShMZXNzVGhhblRvUHVzaCwg
bWVkaWFuSW5kZXgpKTsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiZml4ZWQg
bWVkaWFuSW5kZXggPSAiLCBtZWRpYW5JbmRleCwgIlxuIik7CisKKyAgICBhcHBlbmQoQnJhbmNo
Q29kZShMZXNzVGhhblRvUHVzaCwgbWVkaWFuSW5kZXgpKTsKICAgICBidWlsZChtZWRpYW5JbmRl
eCwgdHJ1ZSwgZW5kKTsKLSAgICBtX2JyYW5jaGVzLmFwcGVuZChCcmFuY2hDb2RlKFBvcCkpOwor
ICAgIGFwcGVuZChCcmFuY2hDb2RlKFBvcCkpOwogICAgIGJ1aWxkKHN0YXJ0LCBoYXJkU3RhcnQs
IG1lZGlhbkluZGV4KTsKIH0KIAordm9pZCBCaW5hcnlTd2l0Y2g6OkNhc2U6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIjx2YWx1ZTogIiAsIHZhbHVlLCAi
LCBpbmRleDogIiwgaW5kZXgsICI+Iik7Cit9CisKK3ZvaWQgQmluYXJ5U3dpdGNoOjpCcmFuY2hD
b2RlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgc3dpdGNoIChraW5kKSB7
CisgICAgY2FzZSBOb3RFcXVhbFRvRmFsbFRocm91Z2g6CisgICAgICAgIG91dC5wcmludCgiTm90
RXF1YWxUb0ZhbGxUaHJvdWdoIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTm90RXF1YWxU
b1B1c2g6CisgICAgICAgIG91dC5wcmludCgiTm90RXF1YWxUb1B1c2giKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBMZXNzVGhhblRvUHVzaDoKKyAgICAgICAgb3V0LnByaW50KCJMZXNzVGhh
blRvUHVzaCIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBvcDoKKyAgICAgICAgb3V0LnBy
aW50KCJQb3AiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFeGVjdXRlQ2FzZToKKyAgICAg
ICAgb3V0LnByaW50KCJFeGVjdXRlQ2FzZSIpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICBpZiAoaW5kZXggIT0gVUlOVF9NQVgpCisgICAgICAgIG91dC5wcmludCgiKCIsIGluZGV4LCAi
KSIpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0JpbmFyeVN3aXRjaC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmluYXJ5U3dpdGNoLmgJKHJldmlzaW9uIDE4
OTU0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmluYXJ5U3dpdGNoLmgJKHdvcmtp
bmcgY29weSkKQEAgLTk0LDYgKzk0LDggQEAgcHJpdmF0ZToKICAgICAgICAgewogICAgICAgICAg
ICAgcmV0dXJuIHZhbHVlIDwgb3RoZXIudmFsdWU7CiAgICAgICAgIH0KKworICAgICAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CiAgICAgICAgIAogICAgICAgICBpbnQ2NF90
IHZhbHVlOwogICAgICAgICB1bnNpZ25lZCBpbmRleDsKQEAgLTExNyw2ICsxMTksOCBAQCBwcml2
YXRlOgogICAgICAgICAgICAgLCBpbmRleChpbmRleCkKICAgICAgICAgewogICAgICAgICB9CisK
KyAgICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgICAgICAKICAg
ICAgICAgQnJhbmNoS2luZCBraW5kOwogICAgICAgICB1bnNpZ25lZCBpbmRleDsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMTg5NTQzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgIHN0cnVjdCBJbnN0cnVjdGlvbjsKICAgICBzdHJ1Y3QgT3BlcmFuZFR5
cGVzOwotICAgIHN0cnVjdCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3Q7CiAgICAgc3Ry
dWN0IFNpbXBsZUp1bXBUYWJsZTsKICAgICBzdHJ1Y3QgU3RyaW5nSnVtcFRhYmxlOwogICAgIHN0
cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxODk1NDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzYsMjIgKzM2LDI0IEBAIG5hbWVzcGFjZSBKU0MgewogCiBzdGF0
aWMgU3RydWN0dXJlU3R1YkluZm8qIGdhcmJhZ2VTdHViSW5mbygpCiB7Ci0gICAgc3RhdGljIFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG5ldyBTdHJ1Y3R1cmVTdHViSW5mbygpOworICAg
IHN0YXRpYyBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBuZXcgU3RydWN0dXJlU3R1Yklu
Zm8oQWNjZXNzVHlwZTo6R2V0KTsKICAgICByZXR1cm4gc3R1YkluZm87CiB9CiAKLUpJVElubGlu
ZUNhY2hlR2VuZXJhdG9yOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcihDb2RlQmxvY2sqIGNvZGVC
bG9jaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlKQorSklU
SW5saW5lQ2FjaGVHZW5lcmF0b3I6OkpJVElubGluZUNhY2hlR2VuZXJhdG9yKAorICAgIENvZGVC
bG9jayogY29kZUJsb2NrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2Fs
bFNpdGUsIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSkKICAgICA6IG1fY29kZUJsb2NrKGNvZGVCbG9j
aykKIHsKLSAgICBtX3N0dWJJbmZvID0gbV9jb2RlQmxvY2sgPyBtX2NvZGVCbG9jay0+YWRkU3R1
YkluZm8oKSA6IGdhcmJhZ2VTdHViSW5mbygpOworICAgIG1fc3R1YkluZm8gPSBtX2NvZGVCbG9j
ayA/IG1fY29kZUJsb2NrLT5hZGRTdHViSW5mbyhhY2Nlc3NUeXBlKSA6IGdhcmJhZ2VTdHViSW5m
bygpOwogICAgIG1fc3R1YkluZm8tPmNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luOwogICAgIG1fc3R1
YkluZm8tPmNhbGxTaXRlSW5kZXggPSBjYWxsU2l0ZTsKIH0KIAogSklUQnlJZEdlbmVyYXRvcjo6
SklUQnlJZEdlbmVyYXRvcigKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZU9yaWdpbiBj
b2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNl
ZFJlZ2lzdGVycywKLSAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgU3Bp
bGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSkKLSAgICA6IEpJVElubGluZUNhY2hlR2VuZXJhdG9y
KGNvZGVCbG9jaywgY29kZU9yaWdpbiwgY2FsbFNpdGUpCisgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgQWNjZXNz
VHlwZSBhY2Nlc3NUeXBlLAorICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBK
U1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwKKyAgICBTcGlsbFJlZ2lzdGVyc01v
ZGUgc3BpbGxNb2RlKQorICAgIDogSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoY29kZUJsb2NrLCBj
b2RlT3JpZ2luLCBjYWxsU2l0ZSwgYWNjZXNzVHlwZSkKICAgICAsIG1fYmFzZShiYXNlKQogICAg
ICwgbV92YWx1ZSh2YWx1ZSkKIHsKQEAgLTExNCw3ICsxMTYsOCBAQCB2b2lkIEpJVEJ5SWRHZW5l
cmF0b3I6OmdlbmVyYXRlRmFzdFBhdGhDCiBKSVRHZXRCeUlkR2VuZXJhdG9yOjpKSVRHZXRCeUlk
R2VuZXJhdG9yKAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlT3JpZ2luIGNvZGVPcmln
aW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0
ZXJzLAogICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBTcGlsbFJlZ2lz
dGVyc01vZGUgc3BpbGxNb2RlKQotICAgIDogSklUQnlJZEdlbmVyYXRvcihjb2RlQmxvY2ssIGNv
ZGVPcmlnaW4sIGNhbGxTaXRlLCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSwgc3BpbGxNb2Rl
KQorICAgIDogSklUQnlJZEdlbmVyYXRvcigKKyAgICAgICAgY29kZUJsb2NrLCBjb2RlT3JpZ2lu
LCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6R2V0LCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSwg
c3BpbGxNb2RlKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGJhc2UucGF5bG9hZEdQUigpICE9IHZh
bHVlLnRhZ0dQUigpKTsKIH0KQEAgLTE0MCw3ICsxNDMsOCBAQCBKSVRQdXRCeUlkR2VuZXJhdG9y
OjpKSVRQdXRCeUlkR2VuZXJhdG9yCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVPcmln
aW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQm
IHVzZWRSZWdpc3RlcnMsCiAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUs
IEdQUlJlZyBzY3JhdGNoLCBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlLAogICAgIEVDTUFN
b2RlIGVjbWFNb2RlLCBQdXRLaW5kIHB1dEtpbmQpCi0gICAgOiBKSVRCeUlkR2VuZXJhdG9yKGNv
ZGVCbG9jaywgY29kZU9yaWdpbiwgY2FsbFNpdGUsIHVzZWRSZWdpc3RlcnMsIGJhc2UsIHZhbHVl
LCBzcGlsbE1vZGUpCisgICAgOiBKSVRCeUlkR2VuZXJhdG9yKAorICAgICAgICBjb2RlQmxvY2ss
IGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXQsIHVzZWRSZWdpc3RlcnMsIGJh
c2UsIHZhbHVlLCBzcGlsbE1vZGUpCiAgICAgLCBtX3NjcmF0Y2goc2NyYXRjaCkKICAgICAsIG1f
ZWNtYU1vZGUoZWNtYU1vZGUpCiAgICAgLCBtX3B1dEtpbmQocHV0S2luZCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgJ
KHJldmlzaW9uIDE4OTU0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5l
Q2FjaGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUg
IkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJQdXRLaW5kLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJT
ZXQuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogCiBuYW1lc3BhY2UgSlNDIHsK
IApAQCAtNDEsNyArNDIsNyBAQCBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBKSVRJbmxpbmVDYWNo
ZUdlbmVyYXRvciB7CiBwcm90ZWN0ZWQ6CiAgICAgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoKSB7
IH0KLSAgICBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcihDb2RlQmxvY2sqLCBDb2RlT3JpZ2luLCBD
YWxsU2l0ZUluZGV4KTsKKyAgICBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcihDb2RlQmxvY2sqLCBD
b2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlKTsKICAgICAKIHB1YmxpYzoKICAg
ICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8oKSBjb25zdCB7IHJldHVybiBtX3N0dWJJbmZv
OyB9CkBAIC01Niw4ICs1Nyw4IEBAIHByb3RlY3RlZDoKICAgICBKSVRCeUlkR2VuZXJhdG9yKCkg
eyB9CiAKICAgICBKSVRCeUlkR2VuZXJhdG9yKAotICAgICAgICBDb2RlQmxvY2sqLCBDb2RlT3Jp
Z2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3RlclNldCYsIEpTVmFsdWVSZWdzIGJhc2Us
IEpTVmFsdWVSZWdzIHZhbHVlLAotICAgICAgICBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2Rl
KTsKKyAgICAgICAgQ29kZUJsb2NrKiwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgQWNjZXNz
VHlwZSwgY29uc3QgUmVnaXN0ZXJTZXQmLCBKU1ZhbHVlUmVncyBiYXNlLAorICAgICAgICBKU1Zh
bHVlUmVncyB2YWx1ZSwgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSk7CiAgICAgCiBwdWJs
aWM6CiAgICAgdm9pZCByZXBvcnRTbG93UGF0aENhbGwoTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHNs
b3dQYXRoQmVnaW4sIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE4OTU0MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE2MywyNCArMTYzLDYgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25HZQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYmFzZVZhbHVlLmdldChleGVjLCBp
ZGVudCwgc2xvdCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkdldEJ5SWRCdWlsZExpc3QoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8sIEVuY29kZWRKU1ZhbHVlIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCi17Ci0g
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7Ci0KLSAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVp
ZCh2bSwgdWlkKTsKLSAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nl
c3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSk7Ci0KLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShiYXNlKTsKLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUp
OwotICAgIGJvb2wgaGFzUmVzdWx0ID0gYmFzZVZhbHVlLmdldFByb3BlcnR5U2xvdChleGVjLCBp
ZGVudCwgc2xvdCk7Ci0gICAgCi0gICAgaWYgKGFjY2Vzc1R5cGUgPT0gc3RhdGljX2Nhc3Q8QWNj
ZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpKQotICAgICAgICBidWlsZEdldEJ5SURMaXN0
KGV4ZWMsIGJhc2VWYWx1ZSwgaWRlbnQsIHNsb3QsICpzdHViSW5mbyk7Ci0KLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGhhc1Jlc3VsdD8gc2xvdC5nZXRWYWx1ZShleGVjLCBpZGVudCkgOiBq
c1VuZGVmaW5lZCgpKTsKLX0KLQogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25HZXRCeUlkT3B0aW1pemUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8sIEVuY29kZWRKU1ZhbHVlIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCiB7CiAg
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CkBAIC0xOTcsNyArMTc5LDYgQEAgRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgICAgICBzdHViSW5mby0+c2VlbiA9IHRy
dWU7CiAgICAgCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShoYXNSZXN1bHQ/IHNsb3QuZ2V0
VmFsdWUoZXhlYywgaWRlbnQpIDoganNVbmRlZmluZWQoKSk7Ci0KIH0KIAogRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Jbk9wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywgU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBKU0NlbGwqIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBs
KiBrZXkpCkBAIC0zOTQsOTAgKzM3NSw2IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Q
dXRCeUlkRGlyZWMKICAgICAgICAgc3R1YkluZm8tPnNlZW4gPSB0cnVlOwogfQogCi12b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUqIGV4
ZWMsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkK
LXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmll
cjo6ZnJvbVVpZCh2bSwgdWlkKTsKLSAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNf
Y2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSk7Ci0KLSAgICBKU1ZhbHVlIHZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgSlNWYWx1ZSBiYXNlVmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpOwotICAgIFB1dFByb3BlcnR5U2xvdCBz
bG90KGJhc2VWYWx1ZSwgdHJ1ZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkp
OwotICAgIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZVZhbHVlLmlzQ2VsbCgpID8g
YmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKnZtKSA6IG51bGxwdHI7IAotICAgIGJhc2VW
YWx1ZS5wdXQoZXhlYywgaWRlbnQsIHZhbHVlLCBzbG90KTsKLQotICAgIGlmIChhY2Nlc3NUeXBl
ICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgYnVpbGRQdXRCeUlkTGlzdChleGVjLCBiYXNlVmFsdWUsIHN0cnVj
dHVyZSwgaWRlbnQsIHNsb3QsICpzdHViSW5mbywgTm90RGlyZWN0KTsKLX0KLQotdm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3QoRXhlY1N0YXRlKiBl
eGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQp
Ci17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCi0gICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZp
ZXI6OmZyb21VaWQodm0sIHVpZCk7Ci0gICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGlj
X2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpOwotCi0gICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIEpTVmFsdWUgYmFzZVZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qg
c2xvdChiYXNlVmFsdWUsIGZhbHNlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQo
KSk7Ci0KLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VWYWx1ZS5pc0NlbGwoKSA/IGJh
c2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCp2bSkgOiBudWxscHRyOwotICAgIGJhc2VWYWx1
ZS5wdXQoZXhlYywgaWRlbnQsIHZhbHVlLCBzbG90KTsKLSAgICAKLSAgICBpZiAoYWNjZXNzVHlw
ZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSkpCi0gICAg
ICAgIHJldHVybjsKLSAgICAKLSAgICBidWlsZFB1dEJ5SWRMaXN0KGV4ZWMsIGJhc2VWYWx1ZSwg
c3RydWN0dXJlLCBpZGVudCwgc2xvdCwgKnN0dWJJbmZvLCBOb3REaXJlY3QpOwotfQotCi12b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdEJ1aWxkTGlzdChFeGVj
U3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCkKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlkZW50ID0g
SWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgdWlkKTsKLSAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUg
PSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSk7Ci0gICAgCi0g
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIEpT
T2JqZWN0KiBiYXNlT2JqZWN0ID0gYXNPYmplY3QoSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNl
KSk7Ci0gICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZU9iamVjdCwgdHJ1ZSwgZXhlYy0+Y29k
ZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwotCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBiYXNlT2JqZWN0LT5zdHJ1Y3R1cmUoKnZtKTsgICAgCi0gICAgYmFzZU9iamVjdC0+cHV0RGly
ZWN0KCp2bSwgaWRlbnQsIHZhbHVlLCBzbG90KTsKLSAgICAKLSAgICBpZiAoYWNjZXNzVHlwZSAh
PSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSkpCi0gICAgICAg
IHJldHVybjsKLSAgICAKLSAgICBidWlsZFB1dEJ5SWRMaXN0KGV4ZWMsIGJhc2VPYmplY3QsIHN0
cnVjdHVyZSwgaWRlbnQsIHNsb3QsICpzdHViSW5mbywgRGlyZWN0KTsKLX0KLQotdm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RCdWlsZExpc3QoRXhlY1N0
YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBs
KiB1aWQpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCi0gICAgSWRlbnRpZmllciBpZGVudCA9IElk
ZW50aWZpZXI6OmZyb21VaWQodm0sIHVpZCk7Ci0gICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0g
c3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpOwotCi0gICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIEpTT2JqZWN0
KiBiYXNlT2JqZWN0ID0gYXNPYmplY3QoSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKSk7Ci0g
ICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZU9iamVjdCwgZmFsc2UsIGV4ZWMtPmNvZGVCbG9j
aygpLT5wdXRCeUlkQ29udGV4dCgpKTsKLQotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFz
ZU9iamVjdC0+c3RydWN0dXJlKCp2bSk7ICAgIAotICAgIGJhc2VPYmplY3QtPnB1dERpcmVjdCgq
dm0sIGlkZW50LCB2YWx1ZSwgc2xvdCk7Ci0KLSAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNf
Y2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSkpCi0gICAgICAgIHJldHVybjsK
LSAgICAKLSAgICBidWlsZFB1dEJ5SWRMaXN0KGV4ZWMsIGJhc2VPYmplY3QsIHN0cnVjdHVyZSwg
aWRlbnQsIHNsb3QsICpzdHViSW5mbywgRGlyZWN0KTsKLX0KLQogdm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblJlYWxsb2NhdGVTdG9yYWdlQW5kRmluaXNoUHV0KEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIGJhc2UsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDE4OTU0MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDcgKzI4LDYgQEAKIAogI2lmIEVOQUJMRShKSVQpCiAKLSNpbmNsdWRlICJBY2Nlc3Nv
ckNhbGxKSVRTdHViUm91dGluZS5oIgogI2luY2x1ZGUgIkJpbmFyeVN3aXRjaC5oIgogI2luY2x1
ZGUgIkNDYWxsSGVscGVycy5oIgogI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKQEAgLTQwLDgg
KzM5LDcgQEAKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5o
IgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJQb2x5bW9ycGhpY0dldEJ5SWRM
aXN0LmgiCi0jaW5jbHVkZSAiUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oIgorI2luY2x1ZGUgIlBv
bHltb3JwaGljQWNjZXNzLmgiCiAjaW5jbHVkZSAiUmVnRXhwTWF0Y2hlc0FycmF5LmgiCiAjaW5j
bHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiU3RhY2tBbGlnbm1l
bnQuaCIKQEAgLTk0LDEzICs5MiwxMCBAQCBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlQmxv
Y2sqIGNvZGVCCiB9CiAKIHN0YXRpYyB2b2lkIHJlcGF0Y2hCeUlkU2VsZkFjY2VzcygKLSAgICBW
TSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
IFN0cnVjdHVyZSogc3RydWN0dXJlLAotICAgIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBjb25zdCBGdW5jdGlvblB0ciAmc2xvd1BhdGhGdW5j
dGlvbiwKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIGNv
bnN0IEZ1bmN0aW9uUHRyICZzbG93UGF0aEZ1bmN0aW9uLAogICAgIGJvb2wgY29tcGFjdCkKIHsK
LSAgICBpZiAoc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpCi0gICAg
ICAgIHZtLnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KHByb3BlcnR5TmFtZSwg
c3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKLSAgICAKICAgICAvLyBPbmx5IG9w
dGltaXplIG9uY2UhCiAgICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24sIHNsb3dQYXRoRnVuY3Rpb24pOwogCkBAIC0xMjksMzMgKzEyNCw0NCBAQCBz
dGF0aWMgdm9pZCByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoCiAjZW5kaWYKIH0KIAotc3RhdGljIHZv
aWQgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigKLSAgICBjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiYgY29uZGl0aW9uLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvLAotICAgIENDYWxsSGVscGVycyYgaml0LCBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgR1BSUmVnIHNjcmF0Y2hHUFIpCi17Ci0gICAgaWYgKGNv
bmRpdGlvbi5pc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsK
LSAgICAgICAgY29uZGl0aW9uLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKS0+YWRkVHJhbnNpdGlvbldh
dGNocG9pbnQoCi0gICAgICAgICAgICBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaywg
Y29uZGl0aW9uKSk7Ci0gICAgICAgIHJldHVybjsKK3N0YXRpYyB2b2lkIHJlc2V0R2V0QnlJRENo
ZWNrQW5kTG9hZChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgQ29kZUxvY2F0
aW9uRGF0YUxhYmVsMzIgc3RydWN0dXJlTGFiZWwgPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24uZGF0YUxhYmVsMzJBdE9mZnNldCgtKGludHB0cl90KXN0dWJJbmZvLnBhdGNoLmRlbHRhQ2hl
Y2tJbW1Ub0NhbGwpOworICAgIGlmIChNYWNyb0Fzc2VtYmxlcjo6Y2FuSnVtcFJlcGxhY2VQYXRj
aGFibGVCcmFuY2gzMldpdGhQYXRjaCgpKSB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXZl
cnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKAorICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OnN0YXJ0T2ZQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaE9uQWRk
cmVzcyhzdHJ1Y3R1cmVMYWJlbCksCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cygKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJ
RD4oc3R1YkluZm8ucGF0Y2guYmFzZUdQUiksCisgICAgICAgICAgICAgICAgSlNDZWxsOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KHVudXNl
ZFBvaW50ZXIpKTsKICAgICB9CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hJbnQzMihzdHJ1
Y3R1cmVMYWJlbCwgc3RhdGljX2Nhc3Q8aW50MzJfdD4odW51c2VkUG9pbnRlcikpOworI2lmIFVT
RShKU1ZBTFVFNjQpCisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDb21wYWN0KHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0
Y2guZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSksIDApOworI2Vsc2UKKyAgICBNYWNyb0Fzc2VtYmxl
cjo6cmVwYXRjaENvbXBhY3Qoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENv
bXBhY3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlKSwg
MCk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDb21wYWN0KHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFD
YWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUpLCAwKTsKKyNlbmRpZgorfQogCi0gICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBjb25kaXRpb24ub2JqZWN0KCktPnN0cnVjdHVyZSgpOwotICAgIFJFTEVB
U0VfQVNTRVJUKGNvbmRpdGlvbi5zdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWluZ0ltcHVy
ZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUpKTsKLSAgICBqaXQubW92ZShNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihjb25kaXRpb24ub2JqZWN0KCkpLCBzY3JhdGNoR1BSKTsKLSAg
ICBmYWlsdXJlQ2FzZXMuYXBwZW5kKAotICAgICAgICBqaXQuYnJhbmNoU3RydWN0dXJlKAotICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAotICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
c3RydWN0dXJlKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNoZWNrT2JqZWN0UHJvcGVydHlDb25kaXRp
b25zKAotICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBzZXQsIENvZGVCbG9j
ayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCi0gICAgQ0NhbGxIZWxw
ZXJzJiBqaXQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBHUFJSZWcg
c2NyYXRjaEdQUikKLXsKLSAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBj
b25kaXRpb24gOiBzZXQpIHsKLSAgICAgICAgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigK
LSAgICAgICAgICAgIGNvbmRpdGlvbiwgY29kZUJsb2NrLCBzdHViSW5mbywgaml0LCBmYWlsdXJl
Q2FzZXMsIHNjcmF0Y2hHUFIpOworc3RhdGljIHZvaWQgcmVzZXRQdXRCeUlEQ2hlY2tBbmRMb2Fk
KFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBDb2RlTG9jYXRpb25EYXRhTGFi
ZWwzMiBzdHJ1Y3R1cmVMYWJlbCA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFi
ZWwzMkF0T2Zmc2V0KC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0Y2guZGVsdGFDaGVja0ltbVRvQ2Fs
bCk7CisgICAgaWYgKE1hY3JvQXNzZW1ibGVyOjpjYW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJyYW5j
aDMyV2l0aFBhdGNoKCkpIHsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJldmVydEp1bXBSZXBs
YWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goCisgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6c3RhcnRPZlBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoT25BZGRyZXNzKHN0cnVj
dHVyZUxhYmVsKSwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAorICAgICAg
ICAgICAgICAgIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEPihzdHViSW5m
by5wYXRjaC5iYXNlR1BSKSwKKyAgICAgICAgICAgICAgICBKU0NlbGw6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4odW51c2VkUG9pbnRlcikp
OwogICAgIH0KKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEludDMyKHN0cnVjdHVyZUxhYmVs
LCBzdGF0aWNfY2FzdDxpbnQzMl90Pih1bnVzZWRQb2ludGVyKSk7CisjaWYgVVNFKEpTVkFMVUU2
NCkKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEludDMyKHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvTG9h
ZE9yU3RvcmUpLCAwKTsKKyNlbHNlCisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hJbnQzMihz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5w
YXRjaC5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlKSwgMCk7CisgICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGF0Y2hJbnQzMihzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9m
ZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSksIDApOwor
I2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8sIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB0YXJnZXQpCkBAIC0xNjgs
NiArMTc0LDggQEAgc3RhdGljIHZvaWQgcmVwbGFjZVdpdGhKdW1wKFN0cnVjdHVyZVN0dQogICAg
ICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwodGFyZ2V0KSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CisKKyAgICByZXNldEdldEJ5SURDaGVja0FuZExvYWQoc3R1YkluZm8pOwogICAgIAogICAg
IE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcCgKICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmp1bXBBdE9mZnNldCgKQEAgLTE3NSw0MjcgKzE4Myw2IEBAIHN0YXRpYyB2b2lk
IHJlcGxhY2VXaXRoSnVtcChTdHJ1Y3R1cmVTdHUKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwo
dGFyZ2V0KSk7CiB9CiAKLXN0YXRpYyB2b2lkIGVtaXRSZXN0b3JlU2NyYXRjaChNYWNyb0Fzc2Vt
YmxlciYgc3R1YkppdCwgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgR1BSUmVnIHNjcmF0Y2hH
UFIsIE1hY3JvQXNzZW1ibGVyOjpKdW1wJiBzdWNjZXNzLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCYg
ZmFpbCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlcykKLXsKLSAgICBpZiAo
bmVlZFRvUmVzdG9yZVNjcmF0Y2gpIHsKLSAgICAgICAgc3R1YkppdC5wb3BUb1Jlc3RvcmUoc2Ny
YXRjaEdQUik7Ci0gICAgICAgIAotICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7Ci0g
ICAgICAgIAotICAgICAgICAvLyBsaW5rIGZhaWx1cmUgY2FzZXMgaGVyZSwgc28gd2UgY2FuIHBv
cCBzY3JhdGNoR1BSLCBhbmQgdGhlbiBqdW1wIGJhY2suCi0gICAgICAgIGZhaWx1cmVDYXNlcy5s
aW5rKCZzdHViSml0KTsKLSAgICAgICAgCi0gICAgICAgIHN0dWJKaXQucG9wVG9SZXN0b3JlKHNj
cmF0Y2hHUFIpOwotICAgICAgICAKLSAgICAgICAgZmFpbCA9IHN0dWJKaXQuanVtcCgpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsK
LX0KLQotc3RhdGljIHZvaWQgbGlua1Jlc3RvcmVTY3JhdGNoKExpbmtCdWZmZXImIHBhdGNoQnVm
ZmVyLCBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNj
ZXNzLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
ZmFpbHVyZUNhc2VzLCBDb2RlTG9jYXRpb25MYWJlbCBzdWNjZXNzTGFiZWwsIENvZGVMb2NhdGlv
bkxhYmVsIHNsb3dDYXNlQmVnaW4pCi17Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBz
dWNjZXNzTGFiZWwpOwotICAgICAgICAKLSAgICBpZiAobmVlZFRvUmVzdG9yZVNjcmF0Y2gpIHsK
LSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsLCBzbG93Q2FzZUJlZ2luKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICAKLSAgICAvLyBsaW5rIGZhaWx1cmUgY2FzZXMgZGlyZWN0bHkg
YmFjayB0byBub3JtYWwgcGF0aAotICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2VzLCBz
bG93Q2FzZUJlZ2luKTsKLX0KLQotc3RhdGljIHZvaWQgbGlua1Jlc3RvcmVTY3JhdGNoKExpbmtC
dWZmZXImIHBhdGNoQnVmZmVyLCBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8sIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3MsIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGZhaWwsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXMp
Ci17Ci0gICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0b3JlU2Ny
YXRjaCwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLCBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0
YUNhbGxUb1Nsb3dDYXNlKSk7Ci19Ci0KLWVudW0gQnlJZFN0dWJLaW5kIHsKLSAgICBHZXRWYWx1
ZSwKLSAgICBHZXRVbmRlZmluZWQsCi0gICAgQ2FsbEdldHRlciwKLSAgICBDYWxsQ3VzdG9tR2V0
dGVyLAotICAgIENhbGxTZXR0ZXIsCi0gICAgQ2FsbEN1c3RvbVNldHRlcgotfTsKLQotc3RhdGlj
IGNvbnN0IGNoYXIqIHRvU3RyaW5nKEJ5SWRTdHViS2luZCBraW5kKQotewotICAgIHN3aXRjaCAo
a2luZCkgewotICAgIGNhc2UgR2V0VmFsdWU6Ci0gICAgICAgIHJldHVybiAiR2V0VmFsdWUiOwot
ICAgIGNhc2UgR2V0VW5kZWZpbmVkOgotICAgICAgICByZXR1cm4gIkdldFVuZGVmaW5lZCI7Ci0g
ICAgY2FzZSBDYWxsR2V0dGVyOgotICAgICAgICByZXR1cm4gIkNhbGxHZXR0ZXIiOwotICAgIGNh
c2UgQ2FsbEN1c3RvbUdldHRlcjoKLSAgICAgICAgcmV0dXJuICJDYWxsQ3VzdG9tR2V0dGVyIjsK
LSAgICBjYXNlIENhbGxTZXR0ZXI6Ci0gICAgICAgIHJldHVybiAiQ2FsbFNldHRlciI7Ci0gICAg
Y2FzZSBDYWxsQ3VzdG9tU2V0dGVyOgotICAgICAgICByZXR1cm4gIkNhbGxDdXN0b21TZXR0ZXIi
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLX0KLQotc3RhdGljIEJ5SWRTdHViS2luZCBr
aW5kRm9yKGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgICBpZiAoc2xvdC5pc0NhY2hl
YWJsZVZhbHVlKCkpCi0gICAgICAgIHJldHVybiBHZXRWYWx1ZTsKLSAgICBpZiAoc2xvdC5pc1Vu
c2V0KCkpCi0gICAgICAgIHJldHVybiBHZXRVbmRlZmluZWQ7Ci0gICAgaWYgKHNsb3QuaXNDYWNo
ZWFibGVDdXN0b20oKSkKLSAgICAgICAgcmV0dXJuIENhbGxDdXN0b21HZXR0ZXI7Ci0gICAgUkVM
RUFTRV9BU1NFUlQoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpKTsKLSAgICByZXR1cm4gQ2FsbEdl
dHRlcjsKLX0KLQotc3RhdGljIEZ1bmN0aW9uUHRyIGN1c3RvbUZvcihjb25zdCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCi17Ci0gICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkpCi0gICAgICAg
IHJldHVybiBGdW5jdGlvblB0cigpOwotICAgIHJldHVybiBGdW5jdGlvblB0cihzbG90LmN1c3Rv
bUdldHRlcigpKTsKLX0KLQotc3RhdGljIEJ5SWRTdHViS2luZCBraW5kRm9yKGNvbnN0IFB1dFBy
b3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVCghc2xvdC5pc0NhY2hlYWJs
ZVB1dCgpKTsKLSAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpKQotICAgICAgICByZXR1
cm4gQ2FsbFNldHRlcjsKLSAgICBSRUxFQVNFX0FTU0VSVChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9t
KCkpOwotICAgIHJldHVybiBDYWxsQ3VzdG9tU2V0dGVyOwotfQotCi1zdGF0aWMgRnVuY3Rpb25Q
dHIgY3VzdG9tRm9yKGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgICBpZiAoIXNs
b3QuaXNDYWNoZWFibGVDdXN0b20oKSkKLSAgICAgICAgcmV0dXJuIEZ1bmN0aW9uUHRyKCk7Ci0g
ICAgcmV0dXJuIEZ1bmN0aW9uUHRyKHNsb3QuY3VzdG9tU2V0dGVyKCkpOwotfQotCi1zdGF0aWMg
Ym9vbCBnZW5lcmF0ZUJ5SWRTdHViKAotICAgIEV4ZWNTdGF0ZSogZXhlYywgQnlJZFN0dWJLaW5k
IGtpbmQsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwKLSAgICBGdW5jdGlvblB0ciBj
dXN0b20sIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwKLSAgICBKU09iamVjdCogYWx0ZXJuYXRlQmFzZSwg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgYm9vbCBsb2FkVGFy
Z2V0RnJvbVByb3h5LAotICAgIFdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQsIENvZGVMb2Nh
dGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VMYWJlbCwK
LSAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+JiBzdHViUm91dGluZSkKLXsKLSAgICBBU1NFUlQo
Y29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVy
dHlXYXRjaHBvaW50KCkpOwotICAgIAotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIEdQ
UlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNlR1BS
KTsKLSAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSBKU1ZhbHVlUmVncygKLSNpZiBVU0UoSlNW
QUxVRTMyXzY0KQotICAgICAgICBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZh
bHVlVGFnR1BSKSwKLSNlbmRpZgotICAgICAgICBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZv
LnBhdGNoLnZhbHVlR1BSKSk7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBUZW1wUmVnaXN0ZXJT
ZXQoc3R1YkluZm8ucGF0Y2gudXNlZFJlZ2lzdGVycykuZ2V0RnJlZUdQUigpOwotICAgIGJvb2wg
bmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSBzY3JhdGNoR1BSID09IEludmFsaWRHUFJSZWc7Ci0gICAg
UkVMRUFTRV9BU1NFUlQoIW5lZWRUb1Jlc3RvcmVTY3JhdGNoIHx8IChraW5kID09IEdldFZhbHVl
IHx8IGtpbmQgPT0gR2V0VW5kZWZpbmVkKSk7Ci0gICAgCi0gICAgQ0NhbGxIZWxwZXJzIHN0dWJK
aXQoJmV4ZWMtPnZtKCksIGV4ZWMtPmNvZGVCbG9jaygpKTsKLSAgICBpZiAobmVlZFRvUmVzdG9y
ZVNjcmF0Y2gpIHsKLSAgICAgICAgc2NyYXRjaEdQUiA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0
U2NyYXRjaEdQUigKLSAgICAgICAgICAgIGJhc2VHUFIsIHZhbHVlUmVncy50YWdHUFIoKSwgdmFs
dWVSZWdzLnBheWxvYWRHUFIoKSk7Ci0gICAgICAgIHN0dWJKaXQucHVzaFRvU2F2ZShzY3JhdGNo
R1BSKTsKLSAgICAgICAgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSB0cnVlOwotICAgIH0KLSAgICAK
LSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzOwotCi0gICAgR1BSUmVn
IGJhc2VGb3JHZXRHUFI7Ci0gICAgaWYgKGxvYWRUYXJnZXRGcm9tUHJveHkpIHsKLSAgICAgICAg
YmFzZUZvckdldEdQUiA9IHZhbHVlUmVncy5wYXlsb2FkR1BSKCk7Ci0gICAgICAgIGZhaWx1cmVD
YXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2g4KAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoUHVyZUZvcndhcmRpbmdQcm94eVR5cGUpKSk7Ci0KLSAgICAgICAg
c3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTUHJveHk6
OnRhcmdldE9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIAotICAgICAgICBmYWlsdXJl
Q2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoU3RydWN0dXJlKAotICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHNjcmF0Y2hHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCi0gICAgICAgICAgICBz
dHJ1Y3R1cmUpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBiYXNlRm9yR2V0R1BSID0gYmFzZUdQ
UjsKLQotICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoU3RydWN0dXJl
KAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCAKLSAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VGb3JHZXRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURP
ZmZzZXQoKSksIAotICAgICAgICAgICAgc3RydWN0dXJlKSk7Ci0gICAgfQotCi0gICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICBpZiAoc3RydWN0dXJlLT5u
ZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkgfHwgY29uZGl0aW9uU2V0Lm5lZWRJbXB1cmVQ
cm9wZXJ0eVdhdGNocG9pbnQoKSkKLSAgICAgICAgdm0tPnJlZ2lzdGVyV2F0Y2hwb2ludEZvcklt
cHVyZVByb3BlcnR5KHByb3BlcnR5TmFtZSwgc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxv
Y2spKTsKLQotICAgIGlmICh3YXRjaHBvaW50U2V0KQotICAgICAgICB3YXRjaHBvaW50U2V0LT5h
ZGQoc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKLQotICAgIGNoZWNrT2JqZWN0
UHJvcGVydHlDb25kaXRpb25zKAotICAgICAgICBjb25kaXRpb25TZXQsIGNvZGVCbG9jaywgc3R1
YkluZm8sIHN0dWJKaXQsIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7Ci0KLSAgICBpZiAoaXNW
YWxpZE9mZnNldChvZmZzZXQpKSB7Ci0gICAgICAgIFN0cnVjdHVyZSogY3VyclN0cnVjdHVyZTsK
LSAgICAgICAgaWYgKGNvbmRpdGlvblNldC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjdXJyU3Ry
dWN0dXJlID0gc3RydWN0dXJlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjdXJyU3RydWN0
dXJlID0gY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2JqZWN0KCktPnN0cnVjdHVy
ZSgpOwotICAgICAgICBjdXJyU3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBs
YWNlbWVudHMoKnZtLCBvZmZzZXQpOwotICAgIH0KLSAgICAKLSAgICBHUFJSZWcgYmFzZUZvckFj
Y2Vzc0dQUiA9IEludmFsaWRHUFJSZWc7Ci0gICAgaWYgKGtpbmQgIT0gR2V0VW5kZWZpbmVkKSB7
Ci0gICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgLy8g
V2UgY291bGQgaGF2ZSBjbG9iYmVyZWQgc2NyYXRjaEdQUiBlYXJsaWVyLCBzbyB3ZSBoYXZlIHRv
IHJlbG9hZCBmcm9tIGJhc2VHUFIgdG8gZ2V0IHRoZSB0YXJnZXQuCi0gICAgICAgICAgICBpZiAo
bG9hZFRhcmdldEZyb21Qcm94eSkKLSAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNQcm94eTo6dGFyZ2V0T2Zmc2V0KCkpLCBi
YXNlRm9yR2V0R1BSKTsKLSAgICAgICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihhbHRlcm5hdGVCYXNlKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBi
YXNlRm9yQWNjZXNzR1BSID0gc2NyYXRjaEdQUjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIC8vIEZvciBwcm94eSBvYmplY3RzLCB3ZSBuZWVkIHRvIGRvIGFsbCB0aGUgU3RydWN0dXJl
IGNoZWNrcyBiZWZvcmUgbW92aW5nIHRoZSBiYXNlR1BSIGludG8KLSAgICAgICAgICAgIC8vIGJh
c2VGb3JHZXRHUFIgYmVjYXVzZSBpZiB3ZSBmYWlsIGFueSBvZiB0aGUgY2hlY2tzIHRoZW4gd2Ug
d291bGQgaGF2ZSB0aGUgd3JvbmcgdmFsdWUgaW4gYmFzZUdQUgotICAgICAgICAgICAgLy8gb24g
dGhlIHNsb3cgcGF0aC4KLSAgICAgICAgICAgIGlmIChsb2FkVGFyZ2V0RnJvbVByb3h5KQotICAg
ICAgICAgICAgICAgIHN0dWJKaXQubW92ZShzY3JhdGNoR1BSLCBiYXNlRm9yR2V0R1BSKTsKLSAg
ICAgICAgICAgIGJhc2VGb3JBY2Nlc3NHUFIgPSBiYXNlRm9yR2V0R1BSOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgR1BSUmVnIGxvYWRlZFZhbHVlR1BSID0gSW52YWxpZEdQUlJlZzsKLSAgICBp
ZiAoa2luZCA9PSBHZXRVbmRlZmluZWQpCi0gICAgICAgIHN0dWJKaXQubW92ZVRydXN0ZWRWYWx1
ZShqc1VuZGVmaW5lZCgpLCB2YWx1ZVJlZ3MpOwotICAgIGVsc2UgaWYgKGtpbmQgIT0gQ2FsbEN1
c3RvbUdldHRlciAmJiBraW5kICE9IENhbGxDdXN0b21TZXR0ZXIpIHsKLSAgICAgICAgaWYgKGtp
bmQgPT0gR2V0VmFsdWUpCi0gICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUiA9IHZhbHVlUmVncy5w
YXlsb2FkR1BSKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSID0g
c2NyYXRjaEdQUjsKLSAgICAgICAgCi0gICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSOwotICAgICAg
ICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgICAgIHN0b3JhZ2VHUFIgPSBi
YXNlRm9yQWNjZXNzR1BSOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHN0dWJKaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlRm9yQWNjZXNzR1BSLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCBsb2FkZWRWYWx1ZUdQUik7Ci0gICAgICAgICAgICBzdG9yYWdl
R1BSID0gbG9hZGVkVmFsdWVHUFI7Ci0gICAgICAgIH0KLSAgICAgICAgCi0jaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICAgICAgc3R1YkppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uob2Zmc2V0KSksIGxvYWRlZFZhbHVlR1BSKTsK
LSNlbHNlCi0gICAgICAgIGlmIChraW5kID09IEdldFZhbHVlKQotICAgICAgICAgICAgc3R1Ykpp
dC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgb2Zmc2V0UmVsYXRp
dmVUb0Jhc2Uob2Zmc2V0KSArIFRhZ09mZnNldCksIHZhbHVlUmVncy50YWdHUFIoKSk7Ci0gICAg
ICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9m
ZnNldFJlbGF0aXZlVG9CYXNlKG9mZnNldCkgKyBQYXlsb2FkT2Zmc2V0KSwgbG9hZGVkVmFsdWVH
UFIpOwotI2VuZGlmCi0gICAgfQotCi0gICAgLy8gU3R1ZmYgZm9yIGN1c3RvbSBnZXR0ZXJzLgot
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG9wZXJhdGlvbkNhbGw7Ci0gICAgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgaGFuZGxlckNhbGw7Ci0KLSAgICAvLyBTdHVmZiBmb3IgSlMgZ2V0dGVycy4KLSAg
ICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIGFkZHJlc3NPZkxpbmtGdW5jdGlvbkNoZWNr
OwotICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGZhc3RQYXRoQ2FsbDsKLSAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBzbG93UGF0aENhbGw7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rSW5m
bz4gY2FsbExpbmtJbmZvOwotCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzcywgZmFp
bDsKLSAgICBpZiAoa2luZCAhPSBHZXRWYWx1ZSAmJiBraW5kICE9IEdldFVuZGVmaW5lZCkgewot
ICAgICAgICAvLyBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdoZW5ldmVyIHRoaXMgY2FsbCBpcyBt
YWRlIGluIHRoZSBmdXR1cmUsIHdlIHJlbWVtYmVyIHRoZQotICAgICAgICAvLyBwbGFjZSB0aGF0
IHdlIG1hZGUgaXQgZnJvbS4gSXQganVzdCBzbyBoYXBwZW5zIHRvIGJlIHRoZSBwbGFjZSB0aGF0
IHdlIGFyZSBhdAotICAgICAgICAvLyByaWdodCBub3chCi0gICAgICAgIHN0dWJKaXQuc3RvcmUz
MihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHN0dWJJbmZvLmNhbGxTaXRlSW5kZXguYml0
cygpKSwKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1
YWxSZWdpc3Rlcj4oSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKLQotICAgICAgICBpZiAoa2lu
ZCA9PSBDYWxsR2V0dGVyIHx8IGtpbmQgPT0gQ2FsbFNldHRlcikgewotICAgICAgICAgICAgLy8g
Q3JlYXRlIGEgSlMgY2FsbCB1c2luZyBhIEpTIGNhbGwgaW5saW5lIGNhY2hlLiBBc3N1bWUgdGhh
dDoKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyAtIFNQIGlzIGFsaWduZWQgYW5kIHJl
cHJlc2VudHMgdGhlIGV4dGVudCBvZiB0aGUgY2FsbGluZyBjb21waWxlcidzIHN0YWNrIHVzYWdl
LgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIC0gRlAgaXMgc2V0IGNvcnJlY3RseSAo
aS5lLiBpdCBwb2ludHMgdG8gdGhlIGNhbGxlcidzIGNhbGwgZnJhbWUgaGVhZGVyKS4KLSAgICAg
ICAgICAgIC8vCi0gICAgICAgICAgICAvLyAtIFNQIC0gRlAgaXMgYW4gYWxpZ25lZCBkaWZmZXJl
bmNlLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIC0gQW55IGJ5dGUgYmV0d2VlbiBG
UCAoZXhjbHVzaXZlKSBhbmQgU1AgKGluY2x1c2l2ZSkgY291bGQgYmUgbGl2ZSBpbiB0aGUgY2Fs
bGluZwotICAgICAgICAgICAgLy8gICBjb2RlLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAg
IC8vIFRoZXJlZm9yZSwgd2UgdGVtcG9yYXJpbHkgZ3JvdyB0aGUgc3RhY2sgZm9yIHRoZSBwdXJw
b3NlIG9mIHRoZSBjYWxsIGFuZCB0aGVuCi0gICAgICAgICAgICAvLyBzaHJpbmsgaXQgYWZ0ZXIu
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGNhbGxMaW5rSW5mbyA9IHN0ZDo6bWFrZV91bmlx
dWU8Q2FsbExpbmtJbmZvPigpOwotCi0gICAgICAgICAgICAvLyBGSVhNRTogSWYgd2UgZ2VuZXJh
dGVkIGEgcG9seW1vcnBoaWMgY2FsbCBzdHViIHRoYXQganVtcGVkIGJhY2sgdG8gdGhlIGdldHRl
cgotICAgICAgICAgICAgLy8gc3R1Yiwgd2hpY2ggdGhlbiBqdW1wZWQgYmFjayB0byB0aGUgbWFp
biBjb2RlLCB0aGVuIHdlJ2QgaGF2ZSBhIHJlYWNoYWJpbGl0eQotICAgICAgICAgICAgLy8gc2l0
dWF0aW9uIHRoYXQgdGhlIEdDIGRvZXNuJ3Qga25vdyBhYm91dC4gVGhlIEdDIHdvdWxkIGVuc3Vy
ZSB0aGF0IHRoZSBwb2x5bW9ycGhpYwotICAgICAgICAgICAgLy8gY2FsbCBzdHViIHN0YXllZCBh
bGl2ZSwgYW5kIGl0IHdvdWxkIGVuc3VyZSB0aGF0IHRoZSBtYWluIGNvZGUgc3RheWVkIGFsaXZl
LCBidXQKLSAgICAgICAgICAgIC8vIGl0IHdvdWxkbid0IGtub3cgdGhhdCB0aGUgZ2V0dGVyIHN0
dWIgd2FzIGFsaXZlLiBJZGVhbGx5IEpJVCBzdHViIHJvdXRpbmVzIHdvdWxkCi0gICAgICAgICAg
ICAvLyBiZSBHQyBvYmplY3RzLCBhbmQgdGhlbiB3ZSdkIGJlIGFibGUgdG8gc2F5IHRoYXQgdGhl
IHBvbHltb3JwaGljIGNhbGwgc3R1YiBoYXMgYQotICAgICAgICAgICAgLy8gcmVmZXJlbmNlIHRv
IHRoZSBnZXR0ZXIgc3R1Yi4KLSAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNDg5MTQKLSAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+ZGlzYWxs
b3dTdHVicygpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVw
Q2FsbChDYWxsTGlua0luZm86OkNhbGwsIHN0dWJJbmZvLmNvZGVPcmlnaW4sIGxvYWRlZFZhbHVl
R1BSKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IGRvbmU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFRoZXJlIGlzIGEgJ3RoaXMnIGFy
Z3VtZW50IGJ1dCBub3RoaW5nIGVsc2UuCi0gICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlBh
cmFtZXRlcnMgPSAxOwotICAgICAgICAgICAgLy8gLi4uIHVubGVzcyB3ZSdyZSBjYWxsaW5nIGEg
c2V0dGVyLgotICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ2FsbFNldHRlcikKLSAgICAgICAgICAg
ICAgICBudW1iZXJPZlBhcmFtZXRlcnMrKzsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8g
R2V0IHRoZSBhY2Nlc3NvcjsgaWYgdGhlcmUgYWluJ3Qgb25lIHRoZW4gdGhlIHJlc3VsdCBpcyBq
c1VuZGVmaW5lZCgpLgotICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ2FsbFNldHRlcikgewotICAg
ICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MobG9hZGVkVmFsdWVHUFIsIEdldHRlclNldHRlcjo6b2Zmc2V0T2ZT
ZXR0ZXIoKSksCi0gICAgICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSKTsKLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKAotICAgICAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhsb2FkZWRWYWx1ZUdQUiwgR2V0dGVy
U2V0dGVyOjpvZmZzZXRPZkdldHRlcigpKSwKLSAgICAgICAgICAgICAgICAgICAgbG9hZGVkVmFs
dWVHUFIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
cmV0dXJuVW5kZWZpbmVkID0gc3R1YkppdC5icmFuY2hUZXN0UHRyKAotICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBsb2FkZWRWYWx1ZUdQUik7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mUmVnc0ZvckNhbGwgPQotICAgICAgICAgICAgICAg
IEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUgKyBudW1iZXJPZlBhcmFtZXRlcnM7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQnl0ZXNGb3JDYWxsID0KLSAg
ICAgICAgICAgICAgICBudW1iZXJPZlJlZ3NGb3JDYWxsICogc2l6ZW9mKFJlZ2lzdGVyKSAtIHNp
emVvZihDYWxsZXJGcmFtZUFuZFBDKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgdW5zaWdu
ZWQgYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxsID0KLSAgICAgICAgICAgICAgICBXVEY6OnJv
dW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBudW1iZXJPZkJ5dGVzRm9y
Q2FsbCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN0dWJKaXQuc3ViUHRyKAotICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoYWxpZ25lZE51bWJlck9mQnl0
ZXNGb3JDYWxsKSwKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVy
UmVnaXN0ZXIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyBjYWxsZWVGcmFtZSA9IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAotICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwKLSAgICAgICAgICAgICAg
ICAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgc3R1YkppdC5zdG9yZTMyKAotICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobnVtYmVyT2ZQYXJhbWV0ZXJzKSwKLSAgICAg
ICAgICAgICAgICBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KAotICAgICAgICAgICAgICAgICAgICBK
U1N0YWNrOjpBcmd1bWVudENvdW50ICogc2l6ZW9mKFJlZ2lzdGVyKSArIFBheWxvYWRPZmZzZXQp
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3R1YkppdC5zdG9yZUNlbGwoCi0gICAgICAg
ICAgICAgICAgbG9hZGVkVmFsdWVHUFIsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoSlNTdGFjazo6
Q2FsbGVlICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwotCi0gICAgICAgICAgICBzdHViSml0LnN0b3Jl
Q2VsbCgKLSAgICAgICAgICAgICAgICBiYXNlRm9yR2V0R1BSLAotICAgICAgICAgICAgICAgIGNh
bGxlZUZyYW1lLndpdGhPZmZzZXQoCi0gICAgICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50KDApLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsU2V0dGVyKSB7Ci0gICAgICAgICAgICAg
ICAgc3R1YkppdC5zdG9yZVZhbHVlKAotICAgICAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MsCi0g
ICAgICAgICAgICAgICAgICAgIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoCi0gICAgICAgICAgICAg
ICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxKS5vZmZzZXQoKSAqIHNpemVv
ZihSZWdpc3RlcikpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd0Nhc2UgPSBzdHViSml0LmJyYW5jaFB0cldpdGhQYXRj
aCgKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGxvYWRlZFZhbHVl
R1BSLCBhZGRyZXNzT2ZMaW5rRnVuY3Rpb25DaGVjaywKLSAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cigwKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZh
c3RQYXRoQ2FsbCA9IHN0dWJKaXQubmVhckNhbGwoKTsKLQotICAgICAgICAgICAgc3R1YkppdC5h
ZGRQdHIoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihjb2Rl
QmxvY2stPnN0YWNrUG9pbnRlck9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksCi0gICAgICAg
ICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCi0gICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAgICAgIGlmIChraW5k
ID09IENhbGxHZXR0ZXIpCi0gICAgICAgICAgICAgICAgc3R1YkppdC5zZXR1cFJlc3VsdHModmFs
dWVSZWdzKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZG9uZS5hcHBlbmQoc3R1YkppdC5q
dW1wKCkpOwotICAgICAgICAgICAgc2xvd0Nhc2UubGluaygmc3R1YkppdCk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIHN0dWJKaXQubW92ZShsb2FkZWRWYWx1ZUdQUiwgR1BSSW5mbzo6cmVn
VDApOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgICAgICBzdHViSml0Lm1vdmUoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgR1BSSW5mbzo6cmVn
VDEpOwotI2VuZGlmCi0gICAgICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvLmdldCgpKSwgR1BSSW5mbzo6cmVnVDIpOwotICAgICAg
ICAgICAgc2xvd1BhdGhDYWxsID0gc3R1YkppdC5uZWFyQ2FsbCgpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBzdHViSml0LmFkZFB0cigKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKGNvZGVCbG9jay0+c3RhY2tQb2ludGVyT2Zmc2V0KCkgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwKLSAgICAgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwK
LSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwot
ICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ2FsbEdldHRlcikKLSAgICAgICAgICAgICAgICBzdHVi
Sml0LnNldHVwUmVzdWx0cyh2YWx1ZVJlZ3MpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBk
b25lLmFwcGVuZChzdHViSml0Lmp1bXAoKSk7Ci0gICAgICAgICAgICByZXR1cm5VbmRlZmluZWQu
bGluaygmc3R1YkppdCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChraW5kID09IENh
bGxHZXR0ZXIpCi0gICAgICAgICAgICAgICAgc3R1YkppdC5tb3ZlVHJ1c3RlZFZhbHVlKGpzVW5k
ZWZpbmVkKCksIHZhbHVlUmVncyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGRvbmUubGlu
aygmc3R1YkppdCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBnZXR0ZXI6IEVu
Y29kZWRKU1ZhbHVlICgqR2V0VmFsdWVGdW5jKShFeGVjU3RhdGUqLCBKU09iamVjdCogc2xvdEJh
c2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAg
IC8vIHNldHRlcjogdm9pZCAoKlB1dFZhbHVlRnVuYykoRXhlY1N0YXRlKiwgSlNPYmplY3QqIGJh
c2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKTsKLSNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ2FsbEN1c3RvbUdldHRl
cikKLSAgICAgICAgICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShi
YXNlRm9yQWNjZXNzR1BSLCBiYXNlRm9yR2V0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihwcm9wZXJ0eU5hbWUuaW1wbCgpKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUZvckFjY2Vzc0dQ
UiwgYmFzZUZvckdldEdQUiwgdmFsdWVSZWdzLmdwcigpKTsKLSNlbHNlCi0gICAgICAgICAgICBp
ZiAoa2luZCA9PSBDYWxsQ3VzdG9tR2V0dGVyKQotICAgICAgICAgICAgICAgIHN0dWJKaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VGb3JBY2Nlc3NHUFIsIGJhc2VGb3JHZXRHUFIs
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHByb3BlcnR5TmFtZS5pbXBsKCkpKTsKLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShiYXNlRm9yQWNjZXNzR1BSLCBiYXNlRm9yR2V0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB2YWx1ZVJl
Z3MudGFnR1BSKCkpOwotI2VuZGlmCi0gICAgICAgICAgICBzdHViSml0LnN0b3JlUHRyKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAmdm0tPnRvcENhbGxGcmFtZSk7Ci0KLSAgICAgICAgICAg
IG9wZXJhdGlvbkNhbGwgPSBzdHViSml0LmNhbGwoKTsKLSAgICAgICAgICAgIGlmIChraW5kID09
IENhbGxDdXN0b21HZXR0ZXIpCi0gICAgICAgICAgICAgICAgc3R1YkppdC5zZXR1cFJlc3VsdHMo
dmFsdWVSZWdzKTsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vRXhjZXB0aW9u
ID0gc3R1YkppdC5lbWl0RXhjZXB0aW9uQ2hlY2soQ0NhbGxIZWxwZXJzOjpJbnZlcnRlZEV4Y2Vw
dGlvbkNoZWNrKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3Vt
ZW50cyhDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodm0pLCBHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3Rlcik7Ci0gICAgICAgICAgICBoYW5kbGVyQ2FsbCA9IHN0dWJKaXQuY2FsbCgpOwotICAg
ICAgICAgICAgc3R1YkppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIG5vRXhjZXB0aW9uLmxpbmsoJnN0dWJKaXQpOwotICAgICAgICB9Ci0gICAg
fQotICAgIGVtaXRSZXN0b3JlU2NyYXRjaChzdHViSml0LCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwg
c2NyYXRjaEdQUiwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzKTsKLSAgICAKLSAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCksIEpJVENv
bXBpbGF0aW9uQ2FuRmFpbCk7Ci0gICAgaWYgKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRl
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBsaW5rUmVzdG9yZVNjcmF0Y2go
cGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJl
Q2FzZXMsIHN1Y2Nlc3NMYWJlbCwgc2xvd0Nhc2VMYWJlbCk7Ci0gICAgaWYgKGtpbmQgPT0gQ2Fs
bEN1c3RvbUdldHRlciB8fCBraW5kID09IENhbGxDdXN0b21TZXR0ZXIpIHsKLSAgICAgICAgcGF0
Y2hCdWZmZXIubGluayhvcGVyYXRpb25DYWxsLCBjdXN0b20pOwotICAgICAgICBwYXRjaEJ1ZmZl
ci5saW5rKGhhbmRsZXJDYWxsLCBsb29rdXBFeGNlcHRpb25IYW5kbGVyKTsKLSAgICB9IGVsc2Ug
aWYgKGtpbmQgPT0gQ2FsbEdldHRlciB8fCBraW5kID09IENhbGxTZXR0ZXIpIHsKLSAgICAgICAg
Y2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFy
Q2FsbChzbG93UGF0aENhbGwpLAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZihh
ZGRyZXNzT2ZMaW5rRnVuY3Rpb25DaGVjayksCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2Nh
dGlvbk9mTmVhckNhbGwoZmFzdFBhdGhDYWxsKSk7Ci0KLSAgICAgICAgcGF0Y2hCdWZmZXIubGlu
aygKLSAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCwgQ29kZUxvY2F0aW9uTGFiZWwodm0tPmdldENU
SVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7Ci0gICAgfQotICAgIAotICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlID0gRklOQUxJWkVfQ09ERV9GT1IoCi0gICAgICAg
IGV4ZWMtPmNvZGVCbG9jaygpLCBwYXRjaEJ1ZmZlciwKLSAgICAgICAgKCIlcyBhY2Nlc3Mgc3R1
YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICAgICB0b1N0cmluZyhraW5kKSwg
dG9DU3RyaW5nKCpleGVjLT5jb2RlQmxvY2soKSkuZGF0YSgpLAotICAgICAgICAgICAgc3VjY2Vz
c0xhYmVsLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKLSAgICAKLSAgICBpZiAoa2luZCA9PSBDYWxs
R2V0dGVyIHx8IGtpbmQgPT0gQ2FsbFNldHRlcikKLSAgICAgICAgc3R1YlJvdXRpbmUgPSBhZG9w
dFJlZihuZXcgQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUoY29kZSwgKnZtLCBXVEY6Om1vdmUo
Y2FsbExpbmtJbmZvKSkpOwotICAgIGVsc2UKLSAgICAgICAgc3R1YlJvdXRpbmUgPSBjcmVhdGVK
SVRTdHViUm91dGluZShjb2RlLCAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHRy
dWUpOwotICAgIAotICAgIHJldHVybiB0cnVlOwotfQotCiBlbnVtIElubGluZUNhY2hlQWN0aW9u
IHsKICAgICBHaXZlVXBPbkNhY2hlLAogICAgIFJldHJ5Q2FjaGVMYXRlciwKQEAgLTYyOSwxMzIg
KzIxNiw5OSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeUlECiAgICAg
aWYgKE9wdGlvbnM6OmZvcmNlSUNGYWlsdXJlKCkpCiAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOwogICAgIAotICAgIC8vIEZJWE1FOiBXcml0ZSBhIHRlc3QgdGhhdCBwcm92ZXMgd2UgbmVl
ZCB0byBjaGVjayBmb3IgcmVjdXJzaW9uIGhlcmUganVzdAotICAgIC8vIGxpa2UgdGhlIGludGVy
cHJldGVyIGRvZXMsIHRoZW4gYWRkIGEgY2hlY2sgZm9yIHJlY3Vyc2lvbi4KKyAgICAvLyBGSVhN
RTogQ2FjaGUgcHJvcGVydHkgYWNjZXNzIGZvciBpbW1lZGlhdGVzLgorICAgIGlmICghYmFzZVZh
bHVlLmlzQ2VsbCgpKQorICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKIAogICAgIENvZGVC
bG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7CisgICAgU2NyaXB0RXhlY3V0YWJsZSogb3duZXIgPSBjb2RlQmxvY2stPm93bmVyU2Ny
aXB0RXhlY3V0YWJsZSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAKLSAgICBpZiAoKGlz
SlNBcnJheShiYXNlVmFsdWUpIHx8IGlzSlNTdHJpbmcoYmFzZVZhbHVlKSkgJiYgcHJvcGVydHlO
YW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKLSAgICAgICAgR1BSUmVnIGJh
c2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmJhc2VHUFIpOwotI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIEdQUlJlZyByZXN1bHRUYWdHUFIgPSBzdGF0aWNf
Y2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVlVGFnR1BSKTsKLSNlbmRpZgotICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52
YWx1ZUdQUik7Ci0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXIgc3R1YkppdDsKLQotICAgICAgICBp
ZiAoaXNKU0FycmF5KGJhc2VWYWx1ZSkpIHsKLSAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BS
ID0gVGVtcFJlZ2lzdGVyU2V0KHN0dWJJbmZvLnBhdGNoLnVzZWRSZWdpc3RlcnMpLmdldEZyZWVH
UFIoKTsKLSAgICAgICAgICAgIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSBmYWxzZTsKLQot
ICAgICAgICAgICAgaWYgKHNjcmF0Y2hHUFIgPT0gSW52YWxpZEdQUlJlZykgewotI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgICAgICAgICAgICAgc2NyYXRjaEdQUiA9IEFzc2VtYmx5SGVscGVyczo6
c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCByZXN1bHRHUFIpOwotI2Vsc2UKLSAgICAgICAgICAg
ICAgICBzY3JhdGNoR1BSID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VH
UFIsIHJlc3VsdEdQUiwgcmVzdWx0VGFnR1BSKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIHN0
dWJKaXQucHVzaFRvU2F2ZShzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBuZWVkVG9SZXN0
b3JlU2NyYXRjaCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7Ci0KLSAgICAgICAgICAgIHN0dWJKaXQubG9h
ZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjppbmRleGluZ1R5cGVP
ZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChz
dHViSml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaEdQUiwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihJc0FycmF5KSkpOwotICAgICAgICAgICAgZmFpbHVy
ZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywg
c2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFz
aykpKTsKLQotICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwot
ICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRj
aEdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAg
ICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpMZXNzVGhhbiwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSkp
OwotCi0gICAgICAgICAgICBzdHViSml0Lm1vdmUoc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKLSNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgc3R1YkppdC5vcjY0KEFzc2VtYmx5SGVscGVy
czo6VHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpLCByZXN1bHRHUFIpOwotI2VsaWYgVVNFKEpT
VkFMVUUzMl82NCkKLSAgICAgICAgICAgIHN0dWJKaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHJlc3VsdFRhZ0dQUik7Ci0jZW5kaWYKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gbmV3Q2FzZTsKIAotICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzcywgZmFpbDsKLQotICAgICAgICAgICAgZW1pdFJlc3Rv
cmVTY3JhdGNoKHN0dWJKaXQsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzY3JhdGNoR1BSLCBzdWNj
ZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgc3R1YkppdCwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlv
bkNhbkZhaWwpOwotICAgICAgICAgICAgaWYgKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRl
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgICAg
IGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHN0
dWJJbmZvLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMpOwotCi0gICAgICAgICAgICBzdHVi
SW5mby5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAgICAgICAg
ICAgZXhlYy0+Y29kZUJsb2NrKCksIHBhdGNoQnVmZmVyLAotICAgICAgICAgICAgICAgICgiR2V0
QnlJZCBhcnJheSBsZW5ndGggc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAg
ICAgICAgICAgICAgIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwgc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAgICAgICAgICAg
ICAgICBzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLmV4ZWN1dGFibGVBZGRyZXNzKCkp
KTsKLQotICAgICAgICAgICAgcmVwbGFjZVdpdGhKdW1wKHN0dWJJbmZvLCBzdHViSW5mby5zdHVi
Um91dGluZS0+Y29kZSgpLmNvZGUoKSk7Ci0gICAgICAgICAgICByZXBhdGNoQ2FsbChjb2RlQmxv
Y2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZCk7CisgICAg
aWYgKGlzSlNBcnJheShiYXNlVmFsdWUpICYmIHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkubGVuZ3RoKQorICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Z2V0TGVuZ3Ro
KHZtLCBvd25lciwgQWNjZXNzQ2FzZTo6QXJyYXlMZW5ndGgpOworICAgIGVsc2UgaWYgKGlzSlNT
dHJpbmcoYmFzZVZhbHVlKSAmJiBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygp
Lmxlbmd0aCkKKyAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmdldExlbmd0aCh2bSwgb3du
ZXIsIEFjY2Vzc0Nhc2U6OlN0cmluZ0xlbmd0aCk7CisgICAgZWxzZSB7CisgICAgICAgIGlmICgh
c2xvdC5pc0NhY2hlYWJsZSgpICYmICFzbG90LmlzVW5zZXQoKSkKKyAgICAgICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOwogCisgICAgICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUu
YXNDZWxsKCk7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVj
dHVyZSh2bSk7CisgICAgICAgIAorICAgICAgICAvLyBPcHRpbWl6ZSBzZWxmIGFjY2Vzcy4KKyAg
ICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlVuc2V0CisgICAgICAg
ICAgICAmJiBzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKQorICAgICAgICAgICAgJiYgc2xvdC5zbG90
QmFzZSgpID09IGJhc2VWYWx1ZQorICAgICAgICAgICAgJiYgIXNsb3Qud2F0Y2hwb2ludFNldCgp
CisgICAgICAgICAgICAmJiBNYWNyb0Fzc2VtYmxlcjo6aXNDb21wYWN0UHRyQWxpZ25lZEFkZHJl
c3NPZmZzZXQobWF4T2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKHNsb3QuY2FjaGVkT2Zm
c2V0KCkpKQorICAgICAgICAgICAgJiYgYWN0aW9uRm9yQ2VsbCh2bSwgYmFzZUNlbGwpID09IEF0
dGVtcHRUb0NhY2hlCisgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVy
dHlXYXRjaHBvaW50KCkpIHsKKyAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1By
b3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAg
ICAgIHJlcGF0Y2hCeUlkU2VsZkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUs
IHNsb3QuY2FjaGVkT2Zmc2V0KCksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgdHJ1ZSk7Cisg
ICAgICAgICAgICBzdHViSW5mby5pbml0R2V0QnlJZFNlbGYodm0sIGNvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgICAg
ICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gU3RyaW5n
Lmxlbmd0aCBjYXNlCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhaWx1cmUgPSBzdHVi
Sml0LmJyYW5jaDgoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMihTdHJpbmdUeXBlKSk7Ci0KLSAgICAgICAgc3R1YkppdC5sb2FkMzIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNTdHJpbmc6Om9mZnNldE9mTGVuZ3Ro
KCkpLCByZXN1bHRHUFIpOwotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgc3R1YkppdC5v
cjY0KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpLCByZXN1bHRH
UFIpOwotI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgc3R1YkppdC5tb3ZlKEFzc2Vt
Ymx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgcmVzdWx0VGFnR1BS
KTsKLSNlbmRpZgorICAgICAgICBib29sIGxvYWRUYXJnZXRGcm9tUHJveHkgPSBmYWxzZTsKKyAg
ICAgICAgaWYgKGJhc2VDZWxsLT50eXBlKCkgPT0gUHVyZUZvcndhcmRpbmdQcm94eVR5cGUpIHsK
KyAgICAgICAgICAgIGJhc2VWYWx1ZSA9IGpzQ2FzdDxKU1Byb3h5Kj4oYmFzZUNlbGwpLT50YXJn
ZXQoKTsKKyAgICAgICAgICAgIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOworICAgICAg
ICAgICAgc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSh2bSk7CisgICAgICAgICAgICBs
b2FkVGFyZ2V0RnJvbVByb3h5ID0gdHJ1ZTsKKyAgICAgICAgfQogCi0gICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKKyAgICAgICAgSW5saW5lQ2Fj
aGVBY3Rpb24gYWN0aW9uID0gYWN0aW9uRm9yQ2VsbCh2bSwgYmFzZUNlbGwpOworICAgICAgICBp
ZiAoYWN0aW9uICE9IEF0dGVtcHRUb0NhY2hlKQorICAgICAgICAgICAgcmV0dXJuIGFjdGlvbjsK
IAotICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgc3R1YkppdCwgY29kZUJsb2Nr
LCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwotICAgICAgICBpZiAocGF0Y2hCdWZmZXIuZGlkRmFp
bFRvQWxsb2NhdGUoKSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90LmlzVW5zZXQoKSA/IGludmFsaWRPZmZzZXQg
OiBzbG90LmNhY2hlZE9mZnNldCgpOwogICAgICAgICAKLSAgICAgICAgcGF0Y2hCdWZmZXIubGlu
ayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHVi
SW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpKTsKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhm
YWlsdXJlLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5m
by5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7Ci0KLSAgICAgICAgc3R1YkluZm8uc3R1YlJv
dXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAotICAgICAgICAgICAgZXhlYy0+Y29kZUJs
b2NrKCksIHBhdGNoQnVmZmVyLAotICAgICAgICAgICAgKCJHZXRCeUlkIHN0cmluZyBsZW5ndGgg
c3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICAgICAgICAgdG9DU3RyaW5n
KCpleGVjLT5jb2RlQmxvY2soKSkuZGF0YSgpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
bGFiZWxBdE9mZnNldCgKLSAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGVsdGFD
YWxsVG9Eb25lKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgICAgIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAgICAgICAgaWYgKHNsb3QuaXNVbnNldCgpIHx8
IHNsb3Quc2xvdEJhc2UoKSAhPSBiYXNlVmFsdWUpIHsKKyAgICAgICAgICAgIGlmIChzdHJ1Y3R1
cmUtPnR5cGVJbmZvKCkucHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCkgfHwgc3RydWN0dXJlLT5p
c0RpY3Rpb25hcnkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHNsb3QuaXNVbnNldCgpKSB7CisgICAgICAgICAg
ICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNzKAor
ICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhl
Yywgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUuaW1wbCgpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJv
dG90eXBlUHJvcGVydHlIaXQoCisgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwKKyAgICAg
ICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lLmltcGwoKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgb2Zmc2V0ID0gc2xvdC5pc1Vuc2V0KCkgPyBpbnZhbGlkT2Zmc2V0IDogY29uZGl0aW9uU2V0
LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCk7CisgICAgICAgIH0KIAotICAgICAgICByZXBs
YWNlV2l0aEp1bXAoc3R1YkluZm8sIHN0dWJJbmZvLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgp
KTsKLSAgICAgICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24sIG9wZXJhdGlvbkdldEJ5SWQpOworICAgICAgICBBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBl
IHR5cGU7CisgICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSkKKyAgICAgICAgICAg
IHR5cGUgPSBBY2Nlc3NDYXNlOjpMb2FkOworICAgICAgICBlbHNlIGlmIChzbG90LmlzVW5zZXQo
KSkKKyAgICAgICAgICAgIHR5cGUgPSBBY2Nlc3NDYXNlOjpNaXNzOworICAgICAgICBlbHNlIGlm
IChzbG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkpCisgICAgICAgICAgICB0eXBlID0gQWNjZXNzQ2Fz
ZTo6R2V0dGVyOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6
Q3VzdG9tR2V0dGVyOwogCi0gICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CisgICAgICAg
IG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpnZXQoCisgICAgICAgICAgICB2bSwgb3duZXIsIHR5cGUs
IG9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIGxvYWRUYXJnZXRGcm9tUHJveHksCisg
ICAgICAgICAgICBzbG90LndhdGNocG9pbnRTZXQoKSwgc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgp
ID8gc2xvdC5jdXN0b21HZXR0ZXIoKSA6IG51bGxwdHIsCisgICAgICAgICAgICBzbG90LmlzQ2Fj
aGVhYmxlQ3VzdG9tKCkgPyBzbG90LnNsb3RCYXNlKCkgOiBudWxscHRyKTsKICAgICB9CiAKLSAg
ICAvLyBGSVhNRTogQ2FjaGUgcHJvcGVydHkgYWNjZXNzIGZvciBpbW1lZGlhdGVzLgotICAgIGlm
ICghYmFzZVZhbHVlLmlzQ2VsbCgpKQotICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0ciA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2Uo
CisgICAgICAgIHZtLCBjb2RlQmxvY2ssIHByb3BlcnR5TmFtZSwgV1RGOjptb3ZlKG5ld0Nhc2Up
KTsKIAotICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZSgpICYmICFzbG90LmlzVW5zZXQoKSkKKyAg
ICBpZiAoIWNvZGVQdHIpCiAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogCi0gICAgSlND
ZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKnZtKTsKLQotICAgIElubGluZUNhY2hlQWN0aW9u
IGFjdGlvbiA9IGFjdGlvbkZvckNlbGwoKnZtLCBiYXNlQ2VsbCk7Ci0gICAgaWYgKGFjdGlvbiAh
PSBBdHRlbXB0VG9DYWNoZSkKLSAgICAgICAgcmV0dXJuIGFjdGlvbjsKLQotICAgIC8vIE9wdGlt
aXplIHNlbGYgYWNjZXNzLgotICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKQotICAgICAg
ICAmJiBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlCi0gICAgICAgICYmICFzbG90LndhdGNo
cG9pbnRTZXQoKQotICAgICAgICAmJiBNYWNyb0Fzc2VtYmxlcjo6aXNDb21wYWN0UHRyQWxpZ25l
ZEFkZHJlc3NPZmZzZXQobWF4T2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpKSkgewotICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0
eUZvclJlcGxhY2VtZW50cygqdm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwotICAgICAgICByZXBh
dGNoQnlJZFNlbGZBY2Nlc3MoKnZtLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHBy
b3BlcnR5TmFtZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgb3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlz
dCwgdHJ1ZSk7Ci0gICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZigqdm0sIGNvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7Ci0gICAgICAgIHJldHVybiBSZXRyeUNh
Y2hlTGF0ZXI7Ci0gICAgfQotCi0gICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3QpOworICAgIHJlcGxh
Y2VXaXRoSnVtcChzdHViSW5mbywgY29kZVB0cik7CisgICAgCiAgICAgcmV0dXJuIFJldHJ5Q2Fj
aGVMYXRlcjsKIH0KIApAQCAtNzY2LDExMiArMzIwLDYgQEAgdm9pZCByZXBhdGNoR2V0QnlJRChF
eGVjU3RhdGUqIGV4ZWMsIEpTVgogICAgICAgICByZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2so
KSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkKTsKIH0KIAot
c3RhdGljIHZvaWQgcGF0Y2hKdW1wVG9HZXRCeUlkU3R1YihTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8sIEpJVFN0dWJSb3V0aW5lKiBzdHViUm91dGluZSkKLXsKLSAgICBSRUxFQVNFX0FTU0VS
VChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfbGlzdCk7Ci0gICAgaWYg
KHN0dWJJbmZvLnUuZ2V0QnlJZExpc3QubGlzdC0+ZGlkU2VsZlBhdGNoaW5nKCkpIHsKLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKAotICAgICAgICAgICAgc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldCgKLSAgICAgICAgICAgICAgICBzdHViSW5mby5w
YXRjaC5kZWx0YUNhbGxUb0p1bXApLAotICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoc3R1
YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAK
LSAgICByZXBsYWNlV2l0aEp1bXAoc3R1YkluZm8sIHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgp
KTsKLX0KLQotc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUJ1aWxkR2V0QnlJRExpc3QoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQs
IGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQot
ewotICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpCi0gICAgICAgIHx8ICghc2xvdC5pc0NhY2hl
YWJsZSgpICYmICFzbG90LmlzVW5zZXQoKSkpCi0gICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hl
OwotCi0gICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKLSAgICBib29s
IGxvYWRUYXJnZXRGcm9tUHJveHkgPSBmYWxzZTsKLSAgICBpZiAoYmFzZUNlbGwtPnR5cGUoKSA9
PSBQdXJlRm9yd2FyZGluZ1Byb3h5VHlwZSkgewotICAgICAgICBiYXNlVmFsdWUgPSBqc0Nhc3Q8
SlNQcm94eSo+KGJhc2VDZWxsKS0+dGFyZ2V0KCk7Ci0gICAgICAgIGJhc2VDZWxsID0gYmFzZVZh
bHVlLmFzQ2VsbCgpOwotICAgICAgICBsb2FkVGFyZ2V0RnJvbVByb3h5ID0gdHJ1ZTsKLSAgICB9
Ci0KLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGV4ZWMtPmNvZGVCbG9jaygpOwotCi0gICAgSW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9uID0gYWN0
aW9uRm9yQ2VsbCgqdm0sIGJhc2VDZWxsKTsKLSAgICBpZiAoYWN0aW9uICE9IEF0dGVtcHRUb0Nh
Y2hlKQotICAgICAgICByZXR1cm4gYWN0aW9uOwotCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBiYXNlQ2VsbC0+c3RydWN0dXJlKCp2bSk7Ci0gICAgVHlwZUluZm8gdHlwZUluZm8gPSBzdHJ1
Y3R1cmUtPnR5cGVJbmZvKCk7Ci0KLSAgICBpZiAoc3R1YkluZm8ucGF0Y2guc3BpbGxNb2RlID09
IE5lZWRUb1NwaWxsKSB7Ci0gICAgICAgIC8vIFdlIGNhbm5vdCBkbyBhcyBtdWNoIGlubGluZSBj
YWNoaW5nIGlmIHRoZSByZWdpc3RlcnMgd2VyZSBub3QgZmx1c2hlZCBwcmlvciB0byB0aGlzIEdl
dEJ5SWQuIEluIHBhcnRpY3VsYXIsCi0gICAgICAgIC8vIG5vbi1WYWx1ZSBjYWNoZWQgcHJvcGVy
dGllcyByZXF1aXJlIHBsYW50aW5nIGNhbGxzLCB3aGljaCByZXF1aXJlcyByZWdpc3RlcnMgdG8g
aGF2ZSBiZWVuIGZsdXNoZWQuIFRodXMsCi0gICAgICAgIC8vIGlmIHJlZ2lzdGVycyB3ZXJlIG5v
dCBmbHVzaGVkLCBkb24ndCBkbyBub24tVmFsdWUgY2FjaGluZy4KLSAgICAgICAgaWYgKCFzbG90
LmlzQ2FjaGVhYmxlVmFsdWUoKSAmJiAhc2xvdC5pc1Vuc2V0KCkpCi0gICAgICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKLSAgICB9Ci0KLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBz
bG90LmlzVW5zZXQoKSA/IGludmFsaWRPZmZzZXQgOiBzbG90LmNhY2hlZE9mZnNldCgpOwotICAg
IAotICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKLSAgICBpZiAo
c2xvdC5pc1Vuc2V0KCkgfHwgc2xvdC5zbG90QmFzZSgpICE9IGJhc2VWYWx1ZSkgewotICAgICAg
ICBpZiAodHlwZUluZm8ucHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCkgfHwgc3RydWN0dXJlLT5p
c0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAg
ICAgIGlmIChzbG90LmlzVW5zZXQoKSkKLSAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVy
YXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcygqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJv
cGVydHlIaXQoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1
cmUsIHNsb3Quc2xvdEJhc2UoKSwgaWRlbnQuaW1wbCgpKTsKLQotICAgICAgICBpZiAoIWNvbmRp
dGlvblNldC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQot
ICAgICAgICBvZmZzZXQgPSBzbG90LmlzVW5zZXQoKSA/IGludmFsaWRPZmZzZXQgOiBjb25kaXRp
b25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vZmZzZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgUG9s
eW1vcnBoaWNHZXRCeUlkTGlzdCogbGlzdCA9IFBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmZyb20o
c3R1YkluZm8pOwotICAgIGlmIChsaXN0LT5pc0Z1bGwoKSkgewotICAgICAgICAvLyBXZSBuZWVk
IHRoaXMgZXh0cmEgY2hlY2sgYmVjYXVzZSBvZiByZWN1cnNpb24uCi0gICAgICAgIHJldHVybiBH
aXZlVXBPbkNhY2hlOwotICAgIH0KLSAgICAKLSAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0
dWJSb3V0aW5lOwotICAgIGJvb2wgcmVzdWx0ID0gZ2VuZXJhdGVCeUlkU3R1YigKLSAgICAgICAg
ZXhlYywga2luZEZvcihzbG90KSwgaWRlbnQsIGN1c3RvbUZvcihzbG90KSwgc3R1YkluZm8sIGNv
bmRpdGlvblNldCwgc2xvdC5zbG90QmFzZSgpLCBvZmZzZXQsIAotICAgICAgICBzdHJ1Y3R1cmUs
IGxvYWRUYXJnZXRGcm9tUHJveHksIHNsb3Qud2F0Y2hwb2ludFNldCgpLCAKLSAgICAgICAgc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVs
dGFDYWxsVG9Eb25lKSwKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlzdC0+Y3VycmVudFNs
b3dQYXRoVGFyZ2V0KHN0dWJJbmZvKSksIHN0dWJSb3V0aW5lKTsKLSAgICBpZiAoIXJlc3VsdCkK
LSAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgCi0gICAgR2V0QnlJZEFjY2Vzczo6
QWNjZXNzVHlwZSBhY2Nlc3NUeXBlOwotICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSkK
LSAgICAgICAgYWNjZXNzVHlwZSA9IHNsb3Qud2F0Y2hwb2ludFNldCgpID8gR2V0QnlJZEFjY2Vz
czo6V2F0Y2hlZFN0dWIgOiBHZXRCeUlkQWNjZXNzOjpTaW1wbGVTdHViOwotICAgIGVsc2UgaWYg
KHNsb3QuaXNVbnNldCgpKQotICAgICAgICBhY2Nlc3NUeXBlID0gR2V0QnlJZEFjY2Vzczo6U2lt
cGxlTWlzczsKLSAgICBlbHNlIGlmIChzbG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkpCi0gICAgICAg
IGFjY2Vzc1R5cGUgPSBHZXRCeUlkQWNjZXNzOjpHZXR0ZXI7Ci0gICAgZWxzZQotICAgICAgICBh
Y2Nlc3NUeXBlID0gR2V0QnlJZEFjY2Vzczo6Q3VzdG9tR2V0dGVyOwotICAgIAotICAgIGxpc3Qt
PmFkZEFjY2VzcyhHZXRCeUlkQWNjZXNzKAotICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksIGFjY2Vzc1R5cGUsIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsCi0gICAgICAg
IGNvbmRpdGlvblNldCkpOwotICAgIAotICAgIHBhdGNoSnVtcFRvR2V0QnlJZFN0dWIoc3R1Yklu
Zm8sIHN0dWJSb3V0aW5lLmdldCgpKTsKLSAgICAKLSAgICByZXR1cm4gbGlzdC0+aXNGdWxsKCkg
PyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOwotfQotCi12b2lkIGJ1aWxkR2V0QnlJ
RExpc3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbykKLXsKLSAgICBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihl
eGVjLT5jb2RlQmxvY2soKS0+bV9sb2NrLCBleGVjLT52bSgpLmhlYXApOwotICAgIAotICAgIGlm
ICh0cnlCdWlsZEdldEJ5SURMaXN0KGV4ZWMsIGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90
LCBzdHViSW5mbykgPT0gR2l2ZVVwT25DYWNoZSkKLSAgICAgICAgcmVwYXRjaENhbGwoZXhlYy0+
Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJ
ZCk7Ci19Ci0KIHN0YXRpYyBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJIGFwcHJvcHJpYXRlR2VuZXJp
Y1B1dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEtpbmQgcHV0
S2luZCkKIHsKICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkgewpAQCAtODg0LDM1OSArMzMy
LDE2IEBAIHN0YXRpYyBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJIGFwcHJvcHJpYXQKICAgICByZXR1
cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdDsKIH0KIAotc3RhdGljIFZfSklUT3BlcmF0aW9u
X0VTc2lKSkkgYXBwcm9wcmlhdGVMaXN0QnVpbGRpbmdQdXRCeUlkRnVuY3Rpb24oY29uc3QgUHV0
UHJvcGVydHlTbG90ICZzbG90LCBQdXRLaW5kIHB1dEtpbmQpCitzdGF0aWMgVl9KSVRPcGVyYXRp
b25fRVNzaUpKSSBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUlkRnVuY3Rpb24oY29uc3QgUHV0
UHJvcGVydHlTbG90ICZzbG90LCBQdXRLaW5kIHB1dEtpbmQpCiB7CiAgICAgaWYgKHNsb3QuaXNT
dHJpY3RNb2RlKCkpIHsKICAgICAgICAgaWYgKHB1dEtpbmQgPT0gRGlyZWN0KQotICAgICAgICAg
ICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExpc3Q7Ci0gICAgICAg
IHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0QnVpbGRMaXN0OworICAgICAgICAgICAgcmV0
dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgcmV0dXJu
IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKICAgICB9CiAgICAgaWYgKHB1dEtpbmQg
PT0gRGlyZWN0KQotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmlj
dEJ1aWxkTGlzdDsKLSAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdEJ1aWxkTGlz
dDsKLX0KLQotc3RhdGljIGJvb2wgZW1pdFB1dFJlcGxhY2VTdHViKAotICAgIEV4ZWNTdGF0ZSog
ZXhlYywKLSAgICBjb25zdCBJZGVudGlmaWVyJiwKLSAgICBjb25zdCBQdXRQcm9wZXJ0eVNsb3Qm
IHNsb3QsCi0gICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAotICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlLAotICAgIENvZGVMb2NhdGlvbkxhYmVsIGZhaWx1cmVMYWJlbCwKLSAgICBSZWZQ
dHI8SklUU3R1YlJvdXRpbmU+JiBzdHViUm91dGluZSkKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8u
cGF0Y2guYmFzZUdQUik7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBHUFJSZWcgdmFsdWVU
YWdHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVlVGFnR1BSKTsK
LSNlbmRpZgotICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1Yklu
Zm8ucGF0Y2gudmFsdWVHUFIpOwotCi0gICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9j
YXRvcihzdHViSW5mby5wYXRjaC51c2VkUmVnaXN0ZXJzKTsKLSAgICBhbGxvY2F0b3IubG9jayhi
YXNlR1BSKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIGFsbG9jYXRvci5sb2NrKHZhbHVl
VGFnR1BSKTsKLSNlbmRpZgotICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlR1BSKTsKLSAgICAKLSAg
ICBHUFJSZWcgc2NyYXRjaEdQUjEgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7Ci0K
LSAgICBDQ2FsbEhlbHBlcnMgc3R1YkppdCh2bSwgZXhlYy0+Y29kZUJsb2NrKCkpOwotCi0gICAg
c2l6ZV90IG51bWJlck9mUGFkZGluZ0J5dGVzID0gYWxsb2NhdG9yLnByZXNlcnZlUmV1c2VkUmVn
aXN0ZXJzQnlQdXNoaW5nKHN0dWJKaXQpOwotCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmFk
U3RydWN0dXJlID0gc3R1YkppdC5icmFuY2hTdHJ1Y3R1cmUoCi0gICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKLSAgICAgICAgc3RydWN0dXJlKTsKLQotI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0
KCkpKQotICAgICAgICBzdHViSml0LnN0b3JlNjQodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNl
dEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkp
OwotICAgIGVsc2UgewotICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUjEp
OwotICAgICAgICBzdHViSml0LnN0b3JlNjQodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAq
IHNpemVvZihKU1ZhbHVlKSkpOwotICAgIH0KLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAg
aWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSB7Ci0gICAgICAgIHN0dWJK
aXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNP
YmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNs
b3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVu
Y29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwotICAgICAgICBzdHViSml0
LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpT
T2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShz
bG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihF
bmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09i
amVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIHN0dWJKaXQu
c3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9m
ZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsg
T0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkp
OwotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgp
KSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yLCBhc0JpdHMudGFnKSkpOwotICAgIH0KLSNlbmRpZgotICAgIAotICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIHN1Y2Nlc3M7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbHVyZTsKLSAg
ICAKLSAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkpIHsKLSAgICAgICAgYWxs
b2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoc3R1YkppdCwgbnVtYmVyT2ZQ
YWRkaW5nQnl0ZXMpOwotICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgICAg
IAotICAgICAgICBiYWRTdHJ1Y3R1cmUubGluaygmc3R1YkppdCk7Ci0gICAgICAgIGFsbG9jYXRv
ci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKHN0dWJKaXQsIG51bWJlck9mUGFkZGlu
Z0J5dGVzKTsKLSAgICAgICAgZmFpbHVyZSA9IHN0dWJKaXQuanVtcCgpOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKLSAgICAgICAgZmFpbHVyZSA9IGJh
ZFN0cnVjdHVyZTsKLSAgICB9Ci0gICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0s
IHN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygpLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwotICAg
IGlmIChwYXRjaEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgCi0gICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUp
KTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmUsIGZhaWx1cmVMYWJlbCk7Ci0gICAgICAg
ICAgICAKLSAgICBzdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAg
IGV4ZWMtPmNvZGVCbG9jaygpLCBwYXRjaEJ1ZmZlciwKLSAgICAgICAgKCJQdXRCeUlkIHJlcGxh
Y2Ugc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICAgICB0b0NTdHJpbmco
KmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5s
YWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRv
RG9uZSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgIAotICAgIHJldHVybiB0cnVlOwotfQot
Ci1zdGF0aWMgYm9vbCBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCi0gICAgRXhlY1N0YXRlKiBleGVj
LCBWTSogdm0sIFN0cnVjdHVyZSomIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQs
IAotICAgIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQsCi0gICAgU3RydWN0dXJlKiYgb2xkU3RydWN0dXJlLCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KQotewotICAgIFByb3BlcnR5
TmFtZSBwbmFtZShpZGVudCk7Ci0gICAgb2xkU3RydWN0dXJlID0gc3RydWN0dXJlOwotICAgIGlm
ICghb2xkU3RydWN0dXJlLT5pc09iamVjdCgpIHx8IG9sZFN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5
KCkgfHwgcGFyc2VJbmRleChwbmFtZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFBy
b3BlcnR5T2Zmc2V0IHByb3BlcnR5T2Zmc2V0OwotICAgIHN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6
YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShvbGRT
dHJ1Y3R1cmUsIGlkZW50LmltcGwoKSwgMCwgcHJvcGVydHlPZmZzZXQpOwotCi0gICAgaWYgKCFz
dHJ1Y3R1cmUgfHwgIXN0cnVjdHVyZS0+aXNPYmplY3QoKSB8fCBzdHJ1Y3R1cmUtPmlzRGljdGlv
bmFyeSgpIHx8ICFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gU2tpcCBvcHRpbWl6aW5nIHRoZSBjYXNlIHdo
ZXJlIHdlIG5lZWQgYSByZWFsbG9jLCBpZiB3ZSBkb24ndCBoYXZlCi0gICAgLy8gZW5vdWdoIHJl
Z2lzdGVycyB0byBtYWtlIGl0IGhhcHBlbi4KLSAgICBpZiAoR1BSSW5mbzo6bnVtYmVyT2ZSZWdp
c3RlcnMgPCA2Ci0gICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAh
PSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkKLSAgICAgICAgJiYgb2xkU3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICAvLyBTa2lwIG9wdGltaXppbmcgdGhlIGNhc2Ugd2hlcmUgd2UgbmVlZCByZWFsbG9jLCBh
bmQgdGhlIHN0cnVjdHVyZSBoYXMKLSAgICAvLyBpbmRleGluZyBzdG9yYWdlLgotICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGRuJ3Qgc2tpcCB0aGlzISBJbXBsZW1lbnQgaXQhCi0gICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMDkxNAotICAgIGlmIChvbGRTdHJ1
Y3R1cmUtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmIChwdXRLaW5kID09IE5vdERpcmVjdCkgewotICAgICAgICBjb25kaXRpb25TZXQg
PSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3MoCi0gICAgICAgICAgICAq
dm0sIGV4ZWMtPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJl
LCBpZGVudC5pbXBsKCkpOwotICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwg
ZmFpbHVyZUxhYmVsID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQo
c3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSk7Ci0gICAgUmVmUHRyPEpJVFN0dWJS
b3V0aW5lPiYgc3R1YlJvdXRpbmUgPSBzdHViSW5mby5zdHViUm91dGluZTsKLQotICAgIEdQUlJl
ZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKTsK
LSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIEdQUlJlZyB2YWx1ZVRhZ0dQUiA9IHN0YXRpY19j
YXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVUYWdHUFIpOwotI2VuZGlmCi0gICAgR1BS
UmVnIHZhbHVlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC52YWx1ZUdQ
Uik7Ci0gICAgCi0gICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcihzdHViSW5m
by5wYXRjaC51c2VkUmVnaXN0ZXJzKTsKLSAgICBhbGxvY2F0b3IubG9jayhiYXNlR1BSKTsKLSNp
ZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlVGFnR1BSKTsKLSNl
bmRpZgotICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlR1BSKTsKLSAgICAKLSAgICBDQ2FsbEhlbHBl
cnMgc3R1YkppdCh2bSk7Ci0gICAgCi0gICAgYm9vbCBuZWVkVGhpcmRTY3JhdGNoID0gZmFsc2U7
Ci0gICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUt
Pm91dE9mTGluZUNhcGFjaXR5KCkKLSAgICAgICAgJiYgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpKSB7Ci0gICAgICAgIG5lZWRUaGlyZFNjcmF0Y2ggPSB0cnVlOwotICAgIH0KLQot
ICAgIEdQUlJlZyBzY3JhdGNoR1BSMSA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsK
LSAgICBBU1NFUlQoc2NyYXRjaEdQUjEgIT0gYmFzZUdQUik7Ci0gICAgQVNTRVJUKHNjcmF0Y2hH
UFIxICE9IHZhbHVlR1BSKTsKLSAgICAKLSAgICBHUFJSZWcgc2NyYXRjaEdQUjIgPSBhbGxvY2F0
b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7Ci0gICAgQVNTRVJUKHNjcmF0Y2hHUFIyICE9IGJhc2VH
UFIpOwotICAgIEFTU0VSVChzY3JhdGNoR1BSMiAhPSB2YWx1ZUdQUik7Ci0gICAgQVNTRVJUKHNj
cmF0Y2hHUFIyICE9IHNjcmF0Y2hHUFIxKTsKLQotICAgIEdQUlJlZyBzY3JhdGNoR1BSMzsKLSAg
ICBpZiAobmVlZFRoaXJkU2NyYXRjaCkgewotICAgICAgICBzY3JhdGNoR1BSMyA9IGFsbG9jYXRv
ci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKLSAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIzICE9IGJh
c2VHUFIpOwotICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjMgIT0gdmFsdWVHUFIpOwotICAgICAg
ICBBU1NFUlQoc2NyYXRjaEdQUjMgIT0gc2NyYXRjaEdQUjEpOwotICAgICAgICBBU1NFUlQoc2Ny
YXRjaEdQUjMgIT0gc2NyYXRjaEdQUjIpOwotICAgIH0gZWxzZQotICAgICAgICBzY3JhdGNoR1BS
MyA9IEludmFsaWRHUFJSZWc7Ci0gICAgCi0gICAgc2l6ZV90IG51bWJlck9mUGFkZGluZ0J5dGVz
ID0gYWxsb2NhdG9yLnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKHN0dWJKaXQpOwot
Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsKLSAgICAgICAgICAg
IAotICAgIEFTU0VSVChvbGRTdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVl
bkludmFsaWRhdGVkKCkpOwotICAgIAotICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5i
cmFuY2hTdHJ1Y3R1cmUoCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgCi0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURP
ZmZzZXQoKSksIAotICAgICAgICBvbGRTdHJ1Y3R1cmUpKTsKLSAgICAKLSAgICBjaGVja09iamVj
dFByb3BlcnR5Q29uZGl0aW9ucygKLSAgICAgICAgY29uZGl0aW9uU2V0LCBleGVjLT5jb2RlQmxv
Y2soKSwgc3R1YkluZm8sIHN0dWJKaXQsIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUjEpOwotCi0g
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwotICAgIAotICAgIGJvb2wgc2Ny
YXRjaEdQUjFIYXNTdG9yYWdlID0gZmFsc2U7Ci0gICAgCi0gICAgaWYgKHN0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsK
LSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkg
KiBzaXplb2YoSlNWYWx1ZSk7Ci0gICAgICAgIENvcGllZEFsbG9jYXRvciogY29waWVkQWxsb2Nh
dG9yID0gJnZtLT5oZWFwLnN0b3JhZ2VBbGxvY2F0b3IoKTsKLSAgICAgICAgCi0gICAgICAgIGlm
ICghb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgICAgICBzdHVi
Sml0LmxvYWRQdHIoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nLCBzY3JhdGNo
R1BSMSk7Ci0gICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoc3R1YkppdC5icmFuY2hTdWJQdHIo
TWFjcm9Bc3NlbWJsZXI6OlNpZ25lZCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihuZXdT
aXplKSwgc2NyYXRjaEdQUjEpKTsKLSAgICAgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIoc2NyYXRj
aEdQUjEsICZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZyk7Ci0gICAgICAgICAg
ICBzdHViSml0Lm5lZ1B0cihzY3JhdGNoR1BSMSk7Ci0gICAgICAgICAgICBzdHViSml0LmFkZFB0
cihNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3Vy
cmVudFBheWxvYWRFbmQpLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgICAgICBzdHViSml0LmFkZFB0
cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1ZhbHVlKSksIHNjcmF0Y2hH
UFIxKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNpemVfdCBvbGRTaXplID0gb2xk
U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwotICAgICAg
ICAgICAgQVNTRVJUKG5ld1NpemUgPiBvbGRTaXplKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIzKTsKLSAgICAgICAgICAgIHN0dWJK
aXQubG9hZFB0cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hH
UFIxKTsKLSAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChzdHViSml0LmJyYW5jaFN1YlB0cihN
YWNyb0Fzc2VtYmxlcjo6U2lnbmVkLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG5ld1Np
emUpLCBzY3JhdGNoR1BSMSkpOwotICAgICAgICAgICAgc3R1YkppdC5zdG9yZVB0cihzY3JhdGNo
R1BSMSwgJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKLSAgICAgICAgICAg
IHN0dWJKaXQubmVnUHRyKHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAgIHN0dWJKaXQuYWRkUHRy
KE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJy
ZW50UGF5bG9hZEVuZCksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAgIHN0dWJKaXQuYWRkUHRy
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEpTVmFsdWUpKSwgc2NyYXRjaEdQ
UjEpOwotICAgICAgICAgICAgLy8gV2UgaGF2ZSBzY3JhdGNoR1BSMSA9IG5ldyBzdG9yYWdlLCBz
Y3JhdGNoR1BSMyA9IG9sZCBzdG9yYWdlLCBzY3JhdGNoR1BSMiA9IGF2YWlsYWJsZQotICAgICAg
ICAgICAgZm9yIChzaXplX3Qgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgb2xkU2l6ZTsgb2Zmc2V0ICs9
IHNpemVvZih2b2lkKikpIHsKLSAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjMsIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9m
ZnNldCArIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZih2b2lkKikpKSwgc2NyYXRjaEdQUjIpOwot
ICAgICAgICAgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjIsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihvZmZzZXQg
KyBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2Yodm9pZCopKSkpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBzdHViSml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIxLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0
KCkpKTsKLSAgICAgICAgc2NyYXRjaEdQUjFIYXNTdG9yYWdlID0gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICBBU1NFUlQob2xkU3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKSA9PSBzdHJ1Y3R1cmUtPnR5
cGVJbmZvKCkudHlwZSgpKTsKLSAgICBBU1NFUlQob2xkU3RydWN0dXJlLT50eXBlSW5mbygpLmlu
bGluZVR5cGVGbGFncygpID09IHN0cnVjdHVyZS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3Mo
KSk7Ci0gICAgQVNTRVJUKG9sZFN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgPT0gc3RydWN0dXJl
LT5pbmRleGluZ1R5cGUoKSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICB1aW50MzJfdCB2YWwg
PSBzdHJ1Y3R1cmUtPmlkKCk7Ci0jZWxzZQotICAgIHVpbnQzMl90IHZhbCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDMyX3Q+KHN0cnVjdHVyZS0+aWQoKSk7Ci0jZW5kaWYKLSAgICBzdHViSml0LnN0
b3JlMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih2YWwpLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKLSNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkK
LSAgICAgICAgc3R1YkppdC5zdG9yZTY0KHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklu
bGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKLSAg
ICBlbHNlIHsKLSAgICAgICAgaWYgKCFzY3JhdGNoR1BSMUhhc1N0b3JhZ2UpCi0gICAgICAgICAg
ICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUjEpOwotICAgICAgICBzdHViSml0LnN0
b3JlNjQodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZz
ZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOwot
ICAgIH0KLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNs
b3QuY2FjaGVkT2Zmc2V0KCkpKSB7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5l
U3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICog
c2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3Is
IGFzQml0cy5wYXlsb2FkKSkpOwotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGlu
ZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAq
IHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9y
LCBhc0JpdHMudGFnKSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghc2NyYXRjaEdQUjFI
YXNTdG9yYWdlKQotICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIx
KTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkg
KiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRv
ciwgYXNCaXRzLnBheWxvYWQpKSk7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQ
UiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNldEluQnV0dGVyZmx5
KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9G
KEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7Ci0gICAgfQotI2VuZGlmCi0g
ICAgCi0gICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IG51bGxwdHI7Ci0KLSNpZiBF
TkFCTEUoR0dDKQotICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxGbHVzaFdyaXRlQmFycmll
ckJ1ZmZlcjsKLSAgICBpZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0
cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gc3R1YkppdC5qdW1wSWZJc1JlbWVtYmVy
ZWRPckluRWRlbihiYXNlR1BSKTsKLSAgICAgICAgV3JpdGVCYXJyaWVyQnVmZmVyJiB3cml0ZUJh
cnJpZXJCdWZmZXIgPSBzdHViSml0LnZtKCktPmhlYXAud3JpdGVCYXJyaWVyQnVmZmVyKCk7Ci0g
ICAgICAgIHN0dWJKaXQubG9hZDMyKHdyaXRlQmFycmllckJ1ZmZlci5jdXJyZW50SW5kZXhBZGRy
ZXNzKCksIHNjcmF0Y2hHUFIyKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbmVlZFRv
Rmx1c2ggPQotICAgICAgICAgICAgc3R1YkppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJv
dmVPckVxdWFsLCBzY3JhdGNoR1BSMiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih3cml0
ZUJhcnJpZXJCdWZmZXIuY2FwYWNpdHkoKSkpOwotCi0gICAgICAgIHN0dWJKaXQuYWRkMzIoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaEdQUjIpOwotICAgICAgICBzdHVi
Sml0LnN0b3JlMzIoc2NyYXRjaEdQUjIsIHdyaXRlQmFycmllckJ1ZmZlci5jdXJyZW50SW5kZXhB
ZGRyZXNzKCkpOwotCi0gICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cih3cml0ZUJhcnJpZXJCdWZmZXIuYnVmZmVyKCkpLCBzY3JhdGNoR1BSMSk7Ci0gICAg
ICAgIC8vIFdlIHVzZSBhbiBvZmZzZXQgb2YgLXNpemVvZih2b2lkKikgYmVjYXVzZSB3ZSBhbHJl
YWR5IGFkZGVkIDEgdG8gc2NyYXRjaEdQUjIuCi0gICAgICAgIHN0dWJKaXQuc3RvcmVQdHIoYmFz
ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIs
IE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgc3RhdGljX2Nhc3Q8aW50MzJfdD4oLXNpemVvZih2
b2lkKikpKSk7Ci0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZVdpdGhCYXJyaWVy
ID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgICAgIG5lZWRUb0ZsdXNoLmxpbmsoJnN0dWJKaXQpOwot
Ci0gICAgICAgIHNjcmF0Y2hCdWZmZXIgPSB2bS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoYWxsb2Nh
dG9yLmRlc2lyZWRTY3JhdGNoQnVmZmVyU2l6ZUZvckNhbGwoKSk7Ci0gICAgICAgIGFsbG9jYXRv
ci5wcmVzZXJ2ZVVzZWRSZWdpc3RlcnNUb1NjcmF0Y2hCdWZmZXJGb3JDYWxsKHN0dWJKaXQsIHNj
cmF0Y2hCdWZmZXIsIHNjcmF0Y2hHUFIyKTsKLSAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoYmFzZUdQUik7Ci0gICAgICAgIGNhbGxGbHVzaFdyaXRlQmFycmllckJ1
ZmZlciA9IHN0dWJKaXQuY2FsbCgpOwotICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVVzZWRSZWdp
c3RlcnNGcm9tU2NyYXRjaEJ1ZmZlckZvckNhbGwoc3R1YkppdCwgc2NyYXRjaEJ1ZmZlciwgc2Ny
YXRjaEdQUjIpOwotCi0gICAgICAgIGRvbmVXaXRoQmFycmllci5saW5rKCZzdHViSml0KTsKLSAg
ICAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKCZzdHViSml0KTsKLSAgICB9Ci0j
ZW5kaWYKLQotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3M7Ci0gICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgZmFpbHVyZTsKLSAgICAgICAgICAgIAotICAgIGlmIChhbGxvY2F0b3IuZGlk
UmV1c2VSZWdpc3RlcnMoKSkgewotICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lz
dGVyc0J5UG9wcGluZyhzdHViSml0LCBudW1iZXJPZlBhZGRpbmdCeXRlcyk7Ci0gICAgICAgIHN1
Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKLQotICAgICAgICBmYWlsdXJlQ2FzZXMubGluaygmc3R1
YkppdCk7Ci0gICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5n
KHN0dWJKaXQsIG51bWJlck9mUGFkZGluZ0J5dGVzKTsKLSAgICAgICAgZmFpbHVyZSA9IHN0dWJK
aXQuanVtcCgpOwotICAgIH0gZWxzZQotICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7
Ci0gICAgCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgb3BlcmF0aW9uQ2FsbDsKLSAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzSW5TbG93UGF0aDsKLSAgICAKLSAgICBpZiAoc3RydWN0
dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSkgewotICAgICAgICBzbG93UGF0aC5saW5rKCZzdHViSml0KTsKLSAgICAgICAgCi0gICAg
ICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKHN0dWJKaXQsIG51
bWJlck9mUGFkZGluZ0J5dGVzKTsKLSAgICAgICAgaWYgKCFzY3JhdGNoQnVmZmVyKQotICAgICAg
ICAgICAgc2NyYXRjaEJ1ZmZlciA9IHZtLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShhbGxvY2F0b3Iu
ZGVzaXJlZFNjcmF0Y2hCdWZmZXJTaXplRm9yQ2FsbCgpKTsKLSAgICAgICAgYWxsb2NhdG9yLnBy
ZXNlcnZlVXNlZFJlZ2lzdGVyc1RvU2NyYXRjaEJ1ZmZlckZvckNhbGwoc3R1YkppdCwgc2NyYXRj
aEJ1ZmZlciwgc2NyYXRjaEdQUjEpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHN0dWJK
aXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VHUFIsIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2xv
dC5jYWNoZWRPZmZzZXQoKSksIHZhbHVlR1BSKTsKLSNlbHNlCi0gICAgICAgIHN0dWJKaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKHN0cnVjdHVyZSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2xvdC5jYWNo
ZWRPZmZzZXQoKSksIHZhbHVlR1BSLCB2YWx1ZVRhZ0dQUik7Ci0jZW5kaWYKLSAgICAgICAgb3Bl
cmF0aW9uQ2FsbCA9IHN0dWJKaXQuY2FsbCgpOwotICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVVz
ZWRSZWdpc3RlcnNGcm9tU2NyYXRjaEJ1ZmZlckZvckNhbGwoc3R1YkppdCwgc2NyYXRjaEJ1ZmZl
ciwgc2NyYXRjaEdQUjEpOwotICAgICAgICBzdWNjZXNzSW5TbG93UGF0aCA9IHN0dWJKaXQuanVt
cCgpOwotICAgIH0KLSAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgc3R1Ykpp
dCwgZXhlYy0+Y29kZUJsb2NrKCksIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7Ci0gICAgaWYgKHBh
dGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSkpOwotICAg
IGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMoKSkKLSAgICAgICAgcGF0Y2hCdWZmZXIu
bGluayhmYWlsdXJlLCBmYWlsdXJlTGFiZWwpOwotICAgIGVsc2UKLSAgICAgICAgcGF0Y2hCdWZm
ZXIubGluayhmYWlsdXJlQ2FzZXMsIGZhaWx1cmVMYWJlbCk7Ci0gICAgaWYgKHN0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkp
IHsKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhvcGVyYXRpb25DYWxsLCBvcGVyYXRpb25SZWFs
bG9jYXRlU3RvcmFnZUFuZEZpbmlzaFB1dCk7Ci0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoc3Vj
Y2Vzc0luU2xvd1BhdGgsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0
KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSkpOwotI2lmIEVOQUJMRShHR0MpCi0gICAg
ICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbEZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyLCBvcGVyYXRp
b25GbHVzaFdyaXRlQmFycmllckJ1ZmZlcik7Ci0jZW5kaWYKLSAgICB9Ci0gICAgCi0gICAgc3R1
YlJvdXRpbmUgPQotICAgICAgICBjcmVhdGVKSVRTdHViUm91dGluZSgKLSAgICAgICAgICAgIEZJ
TkFMSVpFX0NPREVfRk9SKAotICAgICAgICAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLCBwYXRj
aEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAoIlB1dEJ5SWQgJXN0cmFuc2l0aW9uIHN0dWIgKCVw
IC0+ICVwKSBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICAgICAgICAgICAgIHN0
cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNh
cGFjaXR5KCkgPyAicmVhbGxvY2F0aW5nICIgOiAiIiwKLSAgICAgICAgICAgICAgICAgICAgb2xk
U3RydWN0dXJlLCBzdHJ1Y3R1cmUsCi0gICAgICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqZXhl
Yy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVs
QXRPZmZzZXQoCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZWx0YUNh
bGxUb0RvbmUpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKSwKLSAgICAgICAgICAgICp2bSwKLSAgICAg
ICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKSwKLSAgICAgICAgICAg
IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCksCi0gICAgICAgICAgICBzdHJ1Y3R1cmUpOwotICAgIAotICAgIHJldHVybiB0
cnVlOworICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGlt
aXplOworICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7CiB9CiAK
IHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZp
ZXImIGlkZW50LCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQpAQCAtMTI0NSw3ICszNTAsOCBAQCBzdGF0aWMg
SW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAgICAgICAgIHJldHVybiBHaXZlVXBP
bkNhY2hlOwogICAgIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2Nr
KCk7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgU2NyaXB0RXhlY3V0YWJsZSogb3du
ZXIgPSBjb2RlQmxvY2stPm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpOworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAKICAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKICAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7CkBAIC0xMjU2LDIxMCArMzYyLDEwOCBAQCBzdGF0aWMgSW5saW5lQ2Fj
aGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAgICAgaWYgKCFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNj
ZXNzZXNBcmVDYWNoZWFibGUoKSkKICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAKLSAg
ICAvLyBPcHRpbWl6ZSBzZWxmIGFjY2Vzcy4KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2Fz
ZT4gbmV3Q2FzZTsKKwogICAgIGlmIChzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUgJiYgc2xvdC5p
c0NhY2hlYWJsZVB1dCgpKSB7Ci0gICAgICAgIGlmIChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0
eVNsb3Q6Ok5ld1Byb3BlcnR5KSB7CisgICAgICAgIGlmIChzbG90LnR5cGUoKSA9PSBQdXRQcm9w
ZXJ0eVNsb3Q6OkV4aXN0aW5nUHJvcGVydHkpIHsKKyAgICAgICAgICAgIHN0cnVjdHVyZS0+ZGlk
Q2FjaGVQcm9wZXJ0eVJlcGxhY2VtZW50KHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAg
ICAgCisgICAgICAgICAgICBwdHJkaWZmX3Qgb2Zmc2V0VG9QYXRjaGVkU3RvcmFnZSA9IG9mZnNl
dFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAg
ICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpVbnNldAorICAgICAgICAg
ICAgICAgICYmIE1hY3JvQXNzZW1ibGVyOjppc1B0ckFsaWduZWRBZGRyZXNzT2Zmc2V0KG9mZnNl
dFRvUGF0Y2hlZFN0b3JhZ2UpCisgICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZElt
cHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKSB7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKAorICAgICAgICAgICAgICAgICAgICBjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksCisgICAgICAgICAg
ICAgICAgICAgIGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRL
aW5kKSwgZmFsc2UpOworICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlkUmVwbGFj
ZSgKKyAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCks
IHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IFJldHJ5Q2FjaGVMYXRlcjsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgU3RydWN0dXJl
KiBvbGRTdHJ1Y3R1cmU7Ci0gICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBj
b25kaXRpb25TZXQ7Ci0gICAgICAgICAgICBpZiAoIWVtaXRQdXRUcmFuc2l0aW9uU3R1YihleGVj
LCB2bSwgc3RydWN0dXJlLCBpZGVudCwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQsIG9sZFN0cnVj
dHVyZSwgY29uZGl0aW9uU2V0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNo
ZTsKKyAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpyZXBsYWNlKHZtLCBvd25lciwg
c3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIEFTU0VSVChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5
KTsKIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKAotICAgICAgICAg
ICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoCi0gICAgICAg
ICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksCi0gICAgICAgICAg
ICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2Rl
KCkpKTsKLSAgICAgICAgICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUxpc3RCdWlsZGluZ1B1dEJ5SWRGdW5jdGlvbihzbG90
LCBwdXRLaW5kKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN0dWJJbmZvLmluaXRQdXRC
eUlkVHJhbnNpdGlvbigqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIG9sZFN0cnVj
dHVyZSwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIHB1dEtpbmQgPT0gRGlyZWN0KTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLSAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPmlzT2JqZWN0KCkgfHwgc3RydWN0dXJlLT5pc0Rp
Y3Rpb25hcnkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKIAotICAg
ICAgICBpZiAoIU1hY3JvQXNzZW1ibGVyOjppc1B0ckFsaWduZWRBZGRyZXNzT2Zmc2V0KG9mZnNl
dFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSkpCi0gICAgICAg
ICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldDsKKyAgICAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0KKyAgICAgICAgICAg
ICAgICBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVD
b25jdXJyZW50bHkoCisgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgaWRlbnQuaW1wbCgp
LCAwLCBvZmZzZXQpOworICAgICAgICAgICAgaWYgKCFuZXdTdHJ1Y3R1cmUgfHwgIW5ld1N0cnVj
dHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBHaXZlVXBPbkNhY2hlOwogCi0gICAgICAgIHN0cnVjdHVyZS0+ZGlkQ2FjaGVQcm9wZXJ0
eVJlcGxhY2VtZW50KCp2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7Ci0gICAgICAgIHJlcGF0Y2hC
eUlkU2VsZkFjY2Vzcygqdm0sIGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwgaWRlbnQs
IHNsb3QuY2FjaGVkT2Zmc2V0KCksIGFwcHJvcHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1bmN0
aW9uKHNsb3QsIHB1dEtpbmQpLCBmYWxzZSk7Ci0gICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlk
UmVwbGFjZSgqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7Ci0g
ICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0gICAgfQorICAgICAgICAgICAgQVNTRVJU
KG5ld1N0cnVjdHVyZS0+cHJldmlvdXNJRCgpID09IHN0cnVjdHVyZSk7CisgICAgICAgICAgICBB
U1NFUlQoIW5ld1N0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpOworICAgICAgICAgICAgQVNTRVJU
KG5ld1N0cnVjdHVyZS0+aXNPYmplY3QoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAgICAgICAgICAgIGlmIChw
dXRLaW5kID09IE5vdERpcmVjdCkgeworICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9Cisg
ICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlz
cygKKyAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBvd25lciwgZXhlYywgbmV3U3RydWN0dXJl
LCBpZGVudC5pbXBsKCkpOworICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFs
aWQoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAg
ICAgICB9CiAKLSAgICBpZiAoKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSB8fCBzbG90LmlzQ2Fj
aGVhYmxlU2V0dGVyKCkpCi0gICAgICAgICYmIHN0dWJJbmZvLnBhdGNoLnNwaWxsTW9kZSA9PSBE
b250U3BpbGwpIHsKLSAgICAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsK
KyAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjp0cmFuc2l0aW9uKHZtLCBvd25lciwg
c3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIG9mZnNldCwgY29uZGl0aW9uU2V0KTsKKyAgICAgICAg
fQorICAgIH0gZWxzZSBpZiAoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpIHx8IHNsb3QuaXNDYWNo
ZWFibGVTZXR0ZXIoKSkgeworICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpKSB7
CisgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CiAK
LSAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OwotICAgICAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7Ci0gICAgICAgIGlmIChzbG90LmJhc2UoKSAhPSBiYXNl
VmFsdWUpIHsKLSAgICAgICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkpIHsKKyAg
ICAgICAgICAgIGlmIChzbG90LmJhc2UoKSAhPSBiYXNlVmFsdWUpIHsKICAgICAgICAgICAgICAg
ICBjb25kaXRpb25TZXQgPQogICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUNvbmRpdGlvbnNG
b3JQcm90b3R5cGVQcm9wZXJ0eUhpdEN1c3RvbSgKLSAgICAgICAgICAgICAgICAgICAgICAgICp2
bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBzbG90LmJh
c2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50LmltcGwoKSk7Ci0gICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9Ci0gICAgICAgICAgICAg
ICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAotICAgICAg
ICAgICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVj
LCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnQu
aW1wbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBvd25lciwgZXhlYywgc3RydWN0
dXJlLCBzbG90LmJhc2UoKSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNv
bmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBP
bkNhY2hlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNW
YWxpZCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAg
ICAgb2Zmc2V0ID0gc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpID8gaW52YWxpZE9mZnNldCA6IGNv
bmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpOwotICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0KLSAgICAgICAgUG9s
eW1vcnBoaWNQdXRCeUlkTGlzdCogbGlzdDsKLSAgICAgICAgbGlzdCA9IFBvbHltb3JwaGljUHV0
QnlJZExpc3Q6OmZyb20ocHV0S2luZCwgc3R1YkluZm8pOwotCi0gICAgICAgIGJvb2wgcmVzdWx0
ID0gZ2VuZXJhdGVCeUlkU3R1YigKLSAgICAgICAgICAgIGV4ZWMsIGtpbmRGb3Ioc2xvdCksIGlk
ZW50LCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBjb25kaXRpb25TZXQsIHNsb3QuYmFzZSgp
LAotICAgICAgICAgICAgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGZhbHNlLCBudWxscHRyLAotICAgICAg
ICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8u
cGF0Y2guZGVsdGFDYWxsVG9Eb25lKSwKLSAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2Up
LAotICAgICAgICAgICAgc3R1YlJvdXRpbmUpOwotICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAg
ICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAKLSAgICAgICAgbGlzdC0+YWRk
QWNjZXNzKFB1dEJ5SWRBY2Nlc3M6OnNldHRlcigKLSAgICAgICAgICAgICp2bSwgY29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKSwKLSAgICAgICAgICAgIHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIo
KSA/IFB1dEJ5SWRBY2Nlc3M6OlNldHRlciA6IFB1dEJ5SWRBY2Nlc3M6OkN1c3RvbVNldHRlciwK
LSAgICAgICAgICAgIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBzbG90LmN1c3RvbVNldHRlcigp
LCBzdHViUm91dGluZSkpOwotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRl
bHRhQ2FsbFRvSnVtcCksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29k
ZSgpKSk7Ci0gICAgICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLCBhcHByb3ByaWF0ZUxpc3RCdWlsZGluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBw
dXRLaW5kKSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFsaXN0LT5pc0Z1bGwoKSk7Ci0gICAg
ICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0gICAgfQotCi0gICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7Ci19Ci0KLXZvaWQgcmVwYXRjaFB1dEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKLXsKLSAgICBHQ1NhZmVDb25jdXJyZW50SklUTG9j
a2VyIGxvY2tlcihleGVjLT5jb2RlQmxvY2soKS0+bV9sb2NrLCBleGVjLT52bSgpLmhlYXApOwot
ICAgIAotICAgIGlmICh0cnlDYWNoZVB1dEJ5SUQoZXhlYywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUs
IHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQpID09IEdpdmVVcE9uQ2FjaGUp
Ci0gICAgICAgIHJlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRL
aW5kKSk7Ci19CiAKLXN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWlsZFB1dEJ5SWRMaXN0
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYg
c2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCi17Ci0g
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICBWTSogdm0g
PSAmZXhlYy0+dm0oKTsKLQotICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQotICAgICAgICBy
ZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZVB1dCgpICYm
ICFzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgJiYgIXNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSkK
LSAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICBpZiAoIXN0cnVjdHVyZS0+cHJv
cGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQotICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNo
ZTsKLQotICAgIC8vIE9wdGltaXplIHNlbGYgYWNjZXNzLgotICAgIGlmIChzbG90LmJhc2UoKSA9
PSBiYXNlVmFsdWUgJiYgc2xvdC5pc0NhY2hlYWJsZVB1dCgpKSB7Ci0gICAgICAgIFBvbHltb3Jw
aGljUHV0QnlJZExpc3QqIGxpc3Q7Ci0gICAgICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1
YlJvdXRpbmU7Ci0gICAgICAgIAotICAgICAgICBpZiAoc2xvdC50eXBlKCkgPT0gUHV0UHJvcGVy
dHlTbG90OjpOZXdQcm9wZXJ0eSkgewotICAgICAgICAgICAgbGlzdCA9IFBvbHltb3JwaGljUHV0
QnlJZExpc3Q6OmZyb20ocHV0S2luZCwgc3R1YkluZm8pOwotICAgICAgICAgICAgaWYgKGxpc3Qt
PmlzRnVsbCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOyAvLyBXaWxs
IGdldCBoZXJlIGR1ZSB0byByZWN1cnNpb24uCi0KLSAgICAgICAgICAgIFN0cnVjdHVyZSogb2xk
U3RydWN0dXJlOworICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OnNldHRlcigKKyAg
ICAgICAgICAgICAgICB2bSwgb3duZXIsIEFjY2Vzc0Nhc2U6OkN1c3RvbVNldHRlciwgc3RydWN0
dXJlLCBpbnZhbGlkT2Zmc2V0LCBjb25kaXRpb25TZXQsCisgICAgICAgICAgICAgICAgc2xvdC5j
dXN0b21TZXR0ZXIoKSwgc2xvdC5iYXNlKCkpOworICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OwotICAgICAgICAgICAg
aWYgKCFlbWl0UHV0VHJhbnNpdGlvblN0dWIoZXhlYywgdm0sIHN0cnVjdHVyZSwgcHJvcGVydHlO
YW1lLCBzbG90LCBzdHViSW5mbywgcHV0S2luZCwgb2xkU3RydWN0dXJlLCBjb25kaXRpb25TZXQp
KQotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0OwogCi0gICAgICAgICAgICBzdHViUm91dGluZSA9IHN0dWJJbmZv
LnN0dWJSb3V0aW5lOwotICAgICAgICAgICAgbGlzdC0+YWRkQWNjZXNzKAotICAgICAgICAgICAg
ICAgIFB1dEJ5SWRBY2Nlc3M6OnRyYW5zaXRpb24oCi0gICAgICAgICAgICAgICAgICAgICp2bSwg
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKLSAgICAgICAgICAgICAgICAgICAgb2xkU3Ry
dWN0dXJlLCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwKLSAgICAgICAgICAgICAgICAgICAgc3R1
YlJvdXRpbmUpKTsKKyAgICAgICAgICAgIGlmIChzbG90LmJhc2UoKSAhPSBiYXNlVmFsdWUpIHsK
KyAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPQorICAgICAgICAgICAgICAgICAgICBnZW5l
cmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHZtLCBvd25lciwgZXhlYywgc3RydWN0dXJlLCBzbG90LmJhc2UoKSwgaWRlbnQuaW1w
bCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgICAgIG9m
ZnNldCA9IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpOworICAgICAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgb2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQo
KTsKIAotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbGlzdCA9IFBvbHltb3JwaGljUHV0
QnlJZExpc3Q6OmZyb20ocHV0S2luZCwgc3R1YkluZm8pOwotICAgICAgICAgICAgaWYgKGxpc3Qt
PmlzRnVsbCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOyAvLyBXaWxs
IGdldCBoZXJlIGR1ZSB0byByZWN1cnNpb24uCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN0
cnVjdHVyZS0+ZGlkQ2FjaGVQcm9wZXJ0eVJlcGxhY2VtZW50KCp2bSwgc2xvdC5jYWNoZWRPZmZz
ZXQoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFdlJ3JlIG5vdyBjb21taXR0ZWQg
dG8gY3JlYXRpbmcgdGhlIHN0dWIuIE1vZ3JpZnkgdGhlIG1ldGEtZGF0YSBhY2NvcmRpbmdseS4K
LSAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gZW1pdFB1dFJlcGxhY2VTdHViKAotICAgICAgICAg
ICAgICAgIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIAotICAgICAgICAgICAg
ICAgIHN0cnVjdHVyZSwgQ29kZUxvY2F0aW9uTGFiZWwobGlzdC0+Y3VycmVudFNsb3dQYXRoVGFy
Z2V0KCkpLCBzdHViUm91dGluZSk7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
bGlzdC0+YWRkQWNjZXNzKAotICAgICAgICAgICAgICAgIFB1dEJ5SWRBY2Nlc3M6OnJlcGxhY2Uo
Ci0gICAgICAgICAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwK
LSAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBzdHViUm91dGluZSkpOworICAgICAgICAg
ICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OnNldHRlcigKKyAgICAgICAgICAgICAgICB2bSwgb3du
ZXIsIEFjY2Vzc0Nhc2U6OlNldHRlciwgc3RydWN0dXJlLCBvZmZzZXQsIGNvbmRpdGlvblNldCk7
CiAgICAgICAgIH0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxs
VG9KdW1wKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsK
LSAgICAgICAgaWYgKGxpc3QtPmlzRnVsbCgpKQotICAgICAgICAgICAgcmVwYXRjaENhbGwoY29k
ZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlR2VuZXJpY1B1
dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7Ci0KLSAgICAgICAgcmV0dXJuIFJldHJ5Q2Fj
aGVMYXRlcjsKICAgICB9CiAKLSAgICBpZiAoKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSB8fCBz
bG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkpCi0gICAgICAgICYmIHN0dWJJbmZvLnBhdGNoLnNwaWxs
TW9kZSA9PSBEb250U3BpbGwpIHsKLSAgICAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHVi
Um91dGluZTsKLSAgICAgICAgCi0gICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNv
bmRpdGlvblNldDsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OwotICAgICAgICBpZiAo
c2xvdC5iYXNlKCkgIT0gYmFzZVZhbHVlKSB7Ci0gICAgICAgICAgICBpZiAoc2xvdC5pc0NhY2hl
YWJsZUN1c3RvbSgpKSB7Ci0gICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0KLSAgICAgICAg
ICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXRDdXN0
b20oCi0gICAgICAgICAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5iYXNlKCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICBwcm9wZXJ0eU5hbWUuaW1wbCgpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgY29uZGl0aW9uU2V0ID0KLSAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVDb25k
aXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCi0gICAgICAgICAgICAgICAgICAgICAgICAq
dm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5i
YXNlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUuaW1wbCgpKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgIG9mZnNldCA9
IHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSA/IGludmFsaWRPZmZzZXQgOiBjb25kaXRpb25TZXQu
c2xvdEJhc2VDb25kaXRpb24oKS5vZmZzZXQoKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOwotCi0gICAgICAgIFBvbHltb3JwaGljUHV0
QnlJZExpc3QqIGxpc3Q7Ci0gICAgICAgIGxpc3QgPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojpm
cm9tKHB1dEtpbmQsIHN0dWJJbmZvKTsKLQotICAgICAgICBib29sIHJlc3VsdCA9IGdlbmVyYXRl
QnlJZFN0dWIoCi0gICAgICAgICAgICBleGVjLCBraW5kRm9yKHNsb3QpLCBwcm9wZXJ0eU5hbWUs
IGN1c3RvbUZvcihzbG90KSwgc3R1YkluZm8sIGNvbmRpdGlvblNldCwgc2xvdC5iYXNlKCksCi0g
ICAgICAgICAgICBvZmZzZXQsIHN0cnVjdHVyZSwgZmFsc2UsIG51bGxwdHIsCi0gICAgICAgICAg
ICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRj
aC5kZWx0YUNhbGxUb0RvbmUpLAotICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlzdC0+
Y3VycmVudFNsb3dQYXRoVGFyZ2V0KCkpLAotICAgICAgICAgICAgc3R1YlJvdXRpbmUpOwotICAg
ICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAg
ICAgICAKLSAgICAgICAgbGlzdC0+YWRkQWNjZXNzKFB1dEJ5SWRBY2Nlc3M6OnNldHRlcigKLSAg
ICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKLSAgICAgICAgICAg
IHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSA/IFB1dEJ5SWRBY2Nlc3M6OlNldHRlciA6IFB1dEJ5
SWRBY2Nlc3M6OkN1c3RvbVNldHRlciwKLSAgICAgICAgICAgIHN0cnVjdHVyZSwgY29uZGl0aW9u
U2V0LCBzbG90LmN1c3RvbVNldHRlcigpLCBzdHViUm91dGluZSkpOwotCi0gICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoSnVtcChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0
T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksIENvZGVMb2NhdGlvbkxhYmVs
KHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgICAgIGlmIChsaXN0LT5pc0Z1bGwo
KSkKLSAgICAgICAgICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2lu
ZCkpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyID0gc3R1YkluZm8uYWRkQWNj
ZXNzQ2FzZSgKKyAgICAgICAgdm0sIGNvZGVCbG9jaywgaWRlbnQsIFdURjo6bW92ZShuZXdDYXNl
KSk7CisgICAgCisgICAgaWYgKCFjb2RlUHRyKQorICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNo
ZTsKIAotICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwotICAgIH0KLSAgICByZXR1cm4g
R2l2ZVVwT25DYWNoZTsKKyAgICByZXNldFB1dEJ5SURDaGVja0FuZExvYWQoc3R1YkluZm8pOwor
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcCgKKyAgICAgICAgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldCgKKyAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRl
bHRhQ2FsbFRvSnVtcCksCisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKGNvZGVQdHIpKTsKKyAg
ICAKKyAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogfQogCi12b2lkIGJ1aWxkUHV0QnlJZExp
c3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90
JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKK3Zv
aWQgcmVwYXRjaFB1dEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3Qg
UHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtp
bmQgcHV0S2luZCkKIHsKICAgICBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihleGVj
LT5jb2RlQmxvY2soKS0+bV9sb2NrLCBleGVjLT52bSgpLmhlYXApOwogICAgIAotICAgIGlmICh0
cnlCdWlsZFB1dEJ5SWRMaXN0KGV4ZWMsIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5h
bWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kKSA9PSBHaXZlVXBPbkNhY2hlKQorICAgIGlmICh0
cnlDYWNoZVB1dEJ5SUQoZXhlYywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwg
c2xvdCwgc3R1YkluZm8sIHB1dEtpbmQpID09IEdpdmVVcE9uQ2FjaGUpCiAgICAgICAgIHJlcGF0
Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFw
cHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CiB9CiAKQEAg
LTE0NzksMTA2ICs0ODMsMzUgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeVJlcGF0Y2hJ
bigKICAgICB9CiAgICAgCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxv
Y2soKTsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IGJhc2UtPnN0cnVjdHVyZSgqdm0pOworICAgIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyID0g
Y29kZUJsb2NrLT5vd25lclNjcmlwdEV4ZWN1dGFibGUoKTsKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZS0+c3RydWN0dXJlKHZtKTsKICAg
ICAKICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CiAgICAgaWYg
KHdhc0ZvdW5kKSB7CiAgICAgICAgIGlmIChzbG90LnNsb3RCYXNlKCkgIT0gYmFzZSkgewogICAg
ICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJv
cGVydHlIaXQoCi0gICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwgaWRlbnQuaW1wbCgpKTsKKyAg
ICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3Ry
dWN0dXJlLCBzbG90LnNsb3RCYXNlKCksIGlkZW50LmltcGwoKSk7CiAgICAgICAgIH0KICAgICB9
IGVsc2UgewogICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9w
ZXJ0eU1pc3MoCi0gICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCks
IGV4ZWMsIHN0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgIHZtLCBjb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7CiAg
ICAgfQogICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIEdp
dmVVcE9uQ2FjaGU7Ci0gICAgCi0gICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBw
b2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Q7Ci0gICAgaW50IGxpc3RJbmRleDsKLSAgICAKLSAgICBD
b2RlTG9jYXRpb25MYWJlbCBzdWNjZXNzTGFiZWwgPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpOwotICAgIENv
ZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlTGFiZWw7Ci0gICAgCi0gICAgaWYgKHN0dWJJbmZvLmFj
Y2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0KSB7Ci0gICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJl
TGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoKTsKLSAgICAgICAgc3R1
YkluZm8uaW5pdEluTGlzdChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIDApOwotICAgICAgICBz
bG93Q2FzZUxhYmVsID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQo
Ci0gICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKLSAgICAg
ICAgbGlzdEluZGV4ID0gMDsKLSAgICB9IGVsc2UgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChz
dHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19pbl9saXN0KTsKLSAgICAgICAgcG9seW1vcnBo
aWNTdHJ1Y3R1cmVMaXN0ID0gc3R1YkluZm8udS5pbkxpc3Quc3RydWN0dXJlTGlzdDsKLSAgICAg
ICAgbGlzdEluZGV4ID0gc3R1YkluZm8udS5pbkxpc3QubGlzdFNpemU7Ci0gICAgICAgIHNsb3dD
YXNlTGFiZWwgPSBDb2RlTG9jYXRpb25MYWJlbChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxp
c3RbbGlzdEluZGV4IC0gMV0uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwotICAgICAgICAK
LSAgICAgICAgaWYgKGxpc3RJbmRleCA9PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpCi0g
ICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICB9Ci0gICAgCi0gICAgUmVmUHRy
PEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKLSAgICAKLSAgICB7Ci0gICAgICAgIEdQUlJl
ZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNlR1BSKTsK
LSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8u
cGF0Y2gudmFsdWVHUFIpOwotICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IFRlbXBSZWdpc3Rl
clNldChzdHViSW5mby5wYXRjaC51c2VkUmVnaXN0ZXJzKS5nZXRGcmVlR1BSKCk7Ci0gICAgICAg
IAotICAgICAgICBDQ2FsbEhlbHBlcnMgc3R1YkppdCh2bSk7Ci0gICAgICAgIAotICAgICAgICBi
b29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoOwotICAgICAgICBpZiAoc2NyYXRjaEdQUiA9PSBJbnZh
bGlkR1BSUmVnKSB7Ci0gICAgICAgICAgICBzY3JhdGNoR1BSID0gQXNzZW1ibHlIZWxwZXJzOjpz
ZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHJlc3VsdEdQUik7Ci0gICAgICAgICAgICBzdHViSml0
LnB1c2hUb1NhdmUoc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBuZWVkVG9SZXN0b3JlU2NyYXRj
aCA9IHRydWU7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbmVlZFRvUmVzdG9yZVNjcmF0
Y2ggPSBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBm
YWlsdXJlQ2FzZXM7Ci0gICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2hT
dHJ1Y3R1cmUoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCi0gICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLAotICAgICAgICAgICAgc3RydWN0dXJlKSk7Ci0KLSAgICAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+
dHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKSkKLSAgICAgICAg
ICAgIHZtLT5yZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShpZGVudCwgc3R1Yklu
Zm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKIAotICAgICAgICBpZiAoc2xvdC53YXRjaHBv
aW50U2V0KCkpCi0gICAgICAgICAgICBzbG90LndhdGNocG9pbnRTZXQoKS0+YWRkKHN0dWJJbmZv
LmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nh
c2U+IG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjppbigKKyAgICAgICAgdm0sIG93bmVyLCB3YXNGb3Vu
ZCA/IEFjY2Vzc0Nhc2U6OkluSGl0IDogQWNjZXNzQ2FzZTo6SW5NaXNzLCBzdHJ1Y3R1cmUsIGNv
bmRpdGlvblNldCk7CiAKLSAgICAgICAgY2hlY2tPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbnMoCi0g
ICAgICAgICAgICBjb25kaXRpb25TZXQsIGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mbywgc3R1
YkppdCwgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgCi0jaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih3YXNGb3VuZCkpKSwgcmVzdWx0R1BSKTsKLSNlbHNl
Ci0gICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHdhc0Zv
dW5kKSwgcmVzdWx0R1BSKTsKLSNlbmRpZgotICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgc3VjY2VzcywgZmFpbDsKLSAgICAgICAgCi0gICAgICAgIGVtaXRSZXN0b3JlU2Ny
YXRjaChzdHViSml0LCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc2NyYXRjaEdQUiwgc3VjY2Vzcywg
ZmFpbCwgZmFpbHVyZUNhc2VzKTsKLSAgICAgICAgCi0gICAgICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKnZtLCBzdHViSml0LCBleGVjLT5jb2RlQmxvY2soKSwgSklUQ29tcGlsYXRpb25DYW5G
YWlsKTsKLSAgICAgICAgaWYgKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpCi0gICAg
ICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgCi0gICAgICAgIGxpbmtSZXN0
b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHN1Y2Nlc3MsIGZh
aWwsIGZhaWx1cmVDYXNlcywgc3VjY2Vzc0xhYmVsLCBzbG93Q2FzZUxhYmVsKTsKLSAgICAgICAg
Ci0gICAgICAgIHN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKLSAgICAgICAg
ICAgIGV4ZWMtPmNvZGVCbG9jaygpLCBwYXRjaEJ1ZmZlciwKLSAgICAgICAgICAgICgiSW4gKGZv
dW5kID0gJXMpIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAgICAgICAg
IHdhc0ZvdW5kID8gInllcyIgOiAibm8iLCB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5k
YXRhKCksCi0gICAgICAgICAgICAgICAgc3VjY2Vzc0xhYmVsLmV4ZWN1dGFibGVBZGRyZXNzKCkp
KTsKLSAgICB9Ci0gICAgCi0gICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJ
bmRleF0uc2V0KCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUs
IHN0cnVjdHVyZSwgdHJ1ZSk7Ci0gICAgc3R1YkluZm8udS5pbkxpc3QubGlzdFNpemUrKzsKLSAg
ICAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1bXApLCBDb2Rl
TG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOworICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciBjb2RlUHRyID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZSh2bSwgY29kZUJs
b2NrLCBpZGVudCwgV1RGOjptb3ZlKG5ld0Nhc2UpKTsKKyAgICBpZiAoIWNvZGVQdHIpCisgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hK
dW1wKAorICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0
dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksCisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVs
KGNvZGVQdHIpKTsKICAgICAKLSAgICByZXR1cm4gbGlzdEluZGV4IDwgKFBPTFlNT1JQSElDX0xJ
U1RfQ0FDSEVfU0laRSAtIDEpID8gUmV0cnlDYWNoZUxhdGVyIDogR2l2ZVVwT25DYWNoZTsKKyAg
ICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogfQogCiB2b2lkIHJlcGF0Y2hJbigKQEAgLTE5Mjgs
MjIgKzg2MSw3IEBAIHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbCgKIHZvaWQgcmVzZXRHZXRCeUlE
KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7CiAg
ICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9w
ZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk7Ci0gICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzIgc3Ry
dWN0dXJlTGFiZWwgPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9m
ZnNldCgtKGludHB0cl90KXN0dWJJbmZvLnBhdGNoLmRlbHRhQ2hlY2tJbW1Ub0NhbGwpOwotICAg
IGlmIChNYWNyb0Fzc2VtYmxlcjo6Y2FuSnVtcFJlcGxhY2VQYXRjaGFibGVCcmFuY2gzMldpdGhQ
YXRjaCgpKSB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXZlcnRKdW1wUmVwbGFjZW1lbnRU
b1BhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OnN0YXJ0T2ZQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRjaE9uQWRkcmVzcyhzdHJ1Y3R1cmVMYWJl
bCksCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcygKLSAgICAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRD4oc3R1YkluZm8ucGF0Y2gu
YmFzZUdQUiksCi0gICAgICAgICAgICAgICAgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwK
LSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KHVudXNlZFBvaW50ZXIpKTsKLSAgICB9
Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hJbnQzMihzdHJ1Y3R1cmVMYWJlbCwgc3RhdGlj
X2Nhc3Q8aW50MzJfdD4odW51c2VkUG9pbnRlcikpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
TWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDb21wYWN0KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Mb2Fk
T3JTdG9yZSksIDApOwotI2Vsc2UKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENvbXBhY3Qo
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHVi
SW5mby5wYXRjaC5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlKSwgMCk7Ci0gICAgTWFjcm9Bc3Nl
bWJsZXI6OnJlcGF0Y2hDb21wYWN0KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFi
ZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9y
U3RvcmUpLCAwKTsKLSNlbmRpZgorICAgIHJlc2V0R2V0QnlJRENoZWNrQW5kTG9hZChzdHViSW5m
byk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9KdW1wKSwgc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVs
dGFDYWxsVG9TbG93Q2FzZSkpOwogfQogCkBAIC0xOTUxLDMzICs4NjksMTggQEAgdm9pZCByZXNl
dFB1dEJ5SUQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIAogewogICAgIFZfSklUT3BlcmF0aW9uX0VT
c2lKSkkgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IGJpdHdpc2VfY2FzdDxWX0pJVE9wZXJhdGlvbl9F
U3NpSkpJPihyZWFkQ2FsbFRhcmdldChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbikuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgVl9KSVRPcGVyYXRpb25fRVNzaUpKSSBv
cHRpbWl6ZWRGdW5jdGlvbjsKLSAgICBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRp
b25QdXRCeUlkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJ
ZFN0cmljdEJ1aWxkTGlzdCkKKyAgICBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRp
b25QdXRCeUlkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJ
ZFN0cmljdE9wdGltaXplKQogICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1
dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKLSAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09
IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVy
YXRpb25QdXRCeUlkTm9uU3RyaWN0QnVpbGRMaXN0KQorICAgIGVsc2UgaWYgKHVub3B0aW1pemVk
RnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0
aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZSkKICAgICAgICAgb3B0aW1p
emVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7Ci0gICAgZWxz
ZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0
IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdEJ1
aWxkTGlzdCkKKyAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1
dEJ5SWREaXJlY3RTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRC
eUlkRGlyZWN0U3RyaWN0T3B0aW1pemUpCiAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3Bl
cmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOwogICAgIGVsc2UgewotICAgICAgICBB
U1NFUlQodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3Ry
aWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0
cmljdEJ1aWxkTGlzdCk7CisgICAgICAgIEFTU0VSVCh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9w
ZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBv
cGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUpOwogICAgICAgICBvcHRpbWl6
ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKICAg
ICB9CiAgICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24sIG9wdGltaXplZEZ1bmN0aW9uKTsKLSAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWwzMiBzdHJ1
Y3R1cmVMYWJlbCA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zm
c2V0KC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0Y2guZGVsdGFDaGVja0ltbVRvQ2FsbCk7Ci0gICAg
aWYgKE1hY3JvQXNzZW1ibGVyOjpjYW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJyYW5jaDMyV2l0aFBh
dGNoKCkpIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJldmVydEp1bXBSZXBsYWNlbWVudFRv
UGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
c3RhcnRPZlBhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoT25BZGRyZXNzKHN0cnVjdHVyZUxhYmVs
KSwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAotICAgICAgICAgICAgICAg
IHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEPihzdHViSW5mby5wYXRjaC5i
YXNlR1BSKSwKLSAgICAgICAgICAgICAgICBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAot
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4odW51c2VkUG9pbnRlcikpOwotICAgIH0K
LSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEludDMyKHN0cnVjdHVyZUxhYmVsLCBzdGF0aWNf
Y2FzdDxpbnQzMl90Pih1bnVzZWRQb2ludGVyKSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEludDMyKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5k
YXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUp
LCAwKTsKLSNlbHNlCi0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hJbnQzMihzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0
YUNhbGxUb1RhZ0xvYWRPclN0b3JlKSwgMCk7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hJ
bnQzMihzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHVi
SW5mby5wYXRjaC5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSksIDApOwotI2VuZGlmCisg
ICAgcmVzZXRQdXRCeUlEQ2hlY2tBbmRMb2FkKHN0dWJJbmZvKTsKICAgICBNYWNyb0Fzc2VtYmxl
cjo6cmVwYXRjaEp1bXAoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChz
dHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1bXApLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NjcmF0Y2hS
ZWdpc3RlckFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDE4OTU0MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDQsNiArNDQsOCBAQCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6On5TY3JhdGNoUmVnaXN0
CiAKIHZvaWQgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpsb2NrKEdQUlJlZyByZWcpCiB7Cisg
ICAgaWYgKHJlZyA9PSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZXR1cm47CiAgICAgdW5zaWdu
ZWQgaW5kZXggPSBHUFJJbmZvOjp0b0luZGV4KHJlZyk7CiAgICAgaWYgKGluZGV4ID09IEdQUklu
Zm86OkludmFsaWRJbmRleCkKICAgICAgICAgcmV0dXJuOwpAQCAtNTIsMTIgKzU0LDIwIEBAIHZv
aWQgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpsb2NrKEdQUlIKIAogdm9pZCBTY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3I6OmxvY2soRlBSUmVnIHJlZykKIHsKKyAgICBpZiAocmVnID09IEludmFs
aWRGUFJSZWcpCisgICAgICAgIHJldHVybjsKICAgICB1bnNpZ25lZCBpbmRleCA9IEZQUkluZm86
OnRvSW5kZXgocmVnKTsKICAgICBpZiAoaW5kZXggPT0gRlBSSW5mbzo6SW52YWxpZEluZGV4KQog
ICAgICAgICByZXR1cm47CiAgICAgbV9sb2NrZWRSZWdpc3RlcnMuc2V0RlBSQnlJbmRleChpbmRl
eCk7CiB9CiAKK3ZvaWQgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpsb2NrKEpTVmFsdWVSZWdz
IHJlZ3MpCit7CisgICAgbG9jayhyZWdzLnRhZ0dQUigpKTsKKyAgICBsb2NrKHJlZ3MucGF5bG9h
ZEdQUigpKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQmFua0luZm8+CiB0eXBlbmFtZSBCYW5r
SW5mbzo6UmVnaXN0ZXJUeXBlIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6YWxsb2NhdGVTY3Jh
dGNoKCkKIHsKQEAgLTExNyw2ICsxMjcsOCBAQCBzaXplX3QgU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yOjpwcmVzZXJ2CiAgICAgc2l6ZV90IHRvdGFsU3RhY2tBZGp1c3RtZW50Qnl0ZXMgPSBudW1i
ZXJPZkJ5dGVzUHVzaGVkICsgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGw7CiAgICAgdG90
YWxTdGFja0FkanVzdG1lbnRCeXRlcyA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0Fs
aWdubWVudEJ5dGVzKCksIHRvdGFsU3RhY2tBZGp1c3RtZW50Qnl0ZXMpOwogCisgICAgLy8gRklY
TUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIGRvIHRoaXMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0OTAzMAogICAgIHNpemVfdCBudW1iZXJPZlBhZGRp
bmdCeXRlcyA9IHRvdGFsU3RhY2tBZGp1c3RtZW50Qnl0ZXMgLSBudW1iZXJPZkJ5dGVzUHVzaGVk
OwogICAgIGppdC5zdWJQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihudW1iZXJPZlBh
ZGRpbmdCeXRlcyksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3IuaAkocmV2aXNpb24gMTg5NTQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTEgKzQw
LDEzIEBAIHN0cnVjdCBTY3JhdGNoQnVmZmVyOwogCiBjbGFzcyBTY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3IgewogcHVibGljOgorICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcigpIHsgfQogICAg
IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcihjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVy
cyk7CiAgICAgflNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcigpOwogCi0gICAgdm9pZCBsb2NrKEdQ
UlJlZyByZWcpOwotICAgIHZvaWQgbG9jayhGUFJSZWcgcmVnKTsKKyAgICB2b2lkIGxvY2soR1BS
UmVnKTsKKyAgICB2b2lkIGxvY2soRlBSUmVnKTsKKyAgICB2b2lkIGxvY2soSlNWYWx1ZVJlZ3Mp
OwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJhbmtJbmZvPgogICAgIHR5cGVuYW1lIEJh
bmtJbmZvOjpSZWdpc3RlclR5cGUgYWxsb2NhdGVTY3JhdGNoKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAxODk1NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4OCw2
ICsxODgsNyBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2KGJvb2ws
IGNsb2JiZXJBbGxSZWdzSW5GVExJQ1Nsb3dQYXRoLCAhQVNTRVJUX0RJU0FCTEVELCBudWxscHRy
KSBcCiAgICAgdihib29sLCBhc3N1bWVBbGxSZWdzSW5GVExJQ0FyZUxpdmUsIGZhbHNlLCBudWxs
cHRyKSBcCiAgICAgdihib29sLCBlbmFibGVBY2Nlc3NJbmxpbmluZywgdHJ1ZSwgbnVsbHB0cikg
XAorICAgIHYodW5zaWduZWQsIG1heEFjY2Vzc1ZhcmlhbnRMaXN0U2l6ZSwgOCwgbnVsbHB0cikg
XAogICAgIHYoYm9vbCwgZW5hYmxlUG9seXZhcmlhbnREZXZpcnR1YWxpemF0aW9uLCB0cnVlLCBu
dWxscHRyKSBcCiAgICAgdihib29sLCBlbmFibGVQb2x5bW9ycGhpY0FjY2Vzc0lubGluaW5nLCB0
cnVlLCBudWxscHRyKSBcCiAgICAgdihib29sLCBlbmFibGVQb2x5bW9ycGhpY0NhbGxJbmxpbmlu
ZywgdHJ1ZSwgbnVsbHB0cikgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0
cmVzcy9hcnJheS1tZXNzYWdlLXBhc3NpbmcuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9hcnJheS1tZXNzYWdlLXBhc3NpbmcuanMJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2FycmF5LW1lc3NhZ2Ut
cGFzc2luZy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI0OSBAQAorLy8gVGhpcyB0ZXN0
IHdhcyBvcmlnaW5hbGx5IGZvciBtZXNzYWdlIHBhc3Npbmcgb2YgdHlwZWQgYXJyYXlzLiBCdXQg
aXQgdHVybnMgb3V0IHRoYXQgaXQgaXMgYSBnb29kCisvLyBzdHJlc3Mgb2YgSlNDIGlubGluZSBj
YWNoZXMgYXMgd2VsbC4gU28sIHRoaXMgaXMgYSBET01sZXNzIHZlcnNpb24gb2YgdGhlIHRlc3Qu
CisKK3ZhciB3aW5kb3c7CisKKyhmdW5jdGlvbigpIHsKKyAgICB2YXIgbGlzdGVuZXJzID0gW107
CisgICAgdmFyIG1lc3NhZ2VzID0gW107CisgICAgCisgICAgd2luZG93ID0geworICAgICAgICBh
ZGRFdmVudExpc3RlbmVyOiBmdW5jdGlvbih0eXBlLCBsaXN0ZW5lcikgeworICAgICAgICAgICAg
bGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpOworICAgICAgICB9LAorICAgICAgICBwb3N0TWVzc2Fn
ZTogZnVuY3Rpb24obWVzc2FnZSkgeworICAgICAgICAgICAgbWVzc2FnZXMucHVzaChtZXNzYWdl
KTsKKyAgICAgICAgfSwKKyAgICAgICAgX2hhbmRsZUV2ZW50czogZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2VzLmxlbmd0aDsgKytpKSB7CisgICAg
ICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBsaXN0ZW5lcnMubGVuZ3RoOyArK2opCisg
ICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyc1tqXSh7ZGF0YTogbWVzc2FnZXNbaV19KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIG1lc3NhZ2VzID0gW107CisgICAgICAgIH0KKyAgICB9
OworfSkoKTsKKword2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworCit3aW5kb3cudGVzdHND
b21wbGV0ZSA9IDA7CisKK2Z1bmN0aW9uIHRlc3RQYXNzZWQoKSB7IH0KKworZnVuY3Rpb24gdGVz
dEZhaWxlZChzdHJpbmcpIHsKKyAgICB0cnkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlRl
c3QgZmFpbGVkOiAiICsgc3RyaW5nKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIHByaW50
KGUubWVzc2FnZSk7CisgICAgICAgIHByaW50KGUuc3RhY2spOworICAgICAgICBhYm9ydCgpOwor
ICAgIH0KK30KKworZnVuY3Rpb24gY2xhc3NDb21wYXJlKHRlc3ROYW1lLCBnb3QsIHNlbnQpIHsK
KyAgICB2YXIgY2xhc3NTdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nOworICAgIHZh
ciBnb3RDbGFzcyA9IGNsYXNzU3RyaW5nLmNhbGwoZ290KTsKKyAgICB2YXIgc2VudENsYXNzID0g
Y2xhc3NTdHJpbmcuY2FsbChzZW50KTsKKyAgICBpZiAoZ290Q2xhc3MgIT09IHNlbnRDbGFzcykg
eworICAgICAgICB0ZXN0RmFpbGVkKHRlc3ROYW1lICsgIjogY2xhc3MgIiArIHNlbnRDbGFzcyAr
ICIgYmVjYW1lICIgKyBnb3RDbGFzcyk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGVs
c2UgeworICAgICAgICB0ZXN0UGFzc2VkKHRlc3ROYW1lICsgIjogY2xhc3NlcyBhcmUgIiArIHNl
bnRDbGFzcyk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKworZnVuY3Rpb24gYnVm
ZmVyQ29tcGFyZSh0ZXN0TmFtZSwgZ290LCBzZW50KSB7CisgICAgaWYgKCFjbGFzc0NvbXBhcmUo
dGVzdE5hbWUsIGdvdCwgc2VudCkpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICBpZiAoZ290LmJ5dGVMZW5ndGggIT09IHNlbnQuYnl0ZUxlbmd0aCkgeworICAgICAgICB0ZXN0
RmFpbGVkKHRlc3ROYW1lICsgIjogZXhwZWN0ZWQgYnl0ZUxlbmd0aCAiICsgc2VudC5ieXRlTGVu
Z3RoICsgIiBieXRlcywgZ290ICIgKyBnb3QuYnl0ZUxlbmd0aCk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9IGVsc2UgeworICAgICAgICB0ZXN0UGFzc2VkKHRlc3ROYW1lICsgIjogYnVm
ZmVyIGxlbmd0aHMgYXJlICIgKyBzZW50LmJ5dGVMZW5ndGgpOworICAgIH0KKyAgICB2YXIgZ290
UmVhZGVyID0gbmV3IFVpbnQ4QXJyYXkoZ290KTsKKyAgICB2YXIgc2VudFJlYWRlciA9IG5ldyBV
aW50OEFycmF5KHNlbnQpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VudC5ieXRlTGVuZ3Ro
OyArK2kpIHsKKyAgICAgICAgaWYgKGdvdFJlYWRlcltpXSAhPT0gc2VudFJlYWRlcltpXSkgewor
ICAgICAgICAgICAgdGVzdEZhaWxlZCh0ZXN0TmFtZSArICI6IGJ1ZmZlcnMgZGlmZmVyIHN0YXJ0
aW5nIGF0IGJ5dGUgIiArIGkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgfQorICAgIHRlc3RQYXNzZWQodGVzdE5hbWUgKyAiOiBidWZmZXJzIGhhdmUgdGhlIHNh
bWUgY29udGVudHMiKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworZnVuY3Rpb24gdmlld0NvbXBh
cmUodGVzdE5hbWUsIGdvdCwgc2VudCkgeworICAgIGlmICghY2xhc3NDb21wYXJlKHRlc3ROYW1l
LCBnb3QsIHNlbnQpKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKCFi
dWZmZXJDb21wYXJlKHRlc3ROYW1lLCBnb3QuYnVmZmVyLCBzZW50LmJ1ZmZlcikpIHsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoZ290LmJ5dGVPZmZzZXQgIT09IHNlbnQu
Ynl0ZU9mZnNldCkgeworICAgICAgICB0ZXN0RmFpbGVkKHRlc3ROYW1lICsgIjogb2Zmc2V0ICIg
KyBzZW50LmJ5dGVPZmZzZXQgKyAiIGJlY2FtZSAiICsgZ290LmJ5dGVPZmZzZXQpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGVzdFBhc3NlZCh0ZXN0TmFt
ZSArICI6IG9mZnNldCBpcyAiICsgc2VudC5ieXRlT2Zmc2V0KTsKKyAgICB9CisgICAgaWYgKGdv
dC5ieXRlTGVuZ3RoICE9PSBzZW50LmJ5dGVMZW5ndGgpIHsKKyAgICAgICAgdGVzdEZhaWxlZCh0
ZXN0TmFtZSArICI6IGxlbmd0aCAiICsgc2VudC5ieXRlTGVuZ3RoICsgIiBiZWNhbWUgIiArIGdv
dC5ieXRlTGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZWxzZSB7CisgICAg
ICAgIHRlc3RQYXNzZWQodGVzdE5hbWUgKyAiOiBsZW5ndGggaXMgIiArIHNlbnQuYnl0ZUxlbmd0
aCk7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitmdW5jdGlvbiB0eXBlZEFycmF5Q29t
cGFyZSh0ZXN0TmFtZSwgZ290LCBzZW50KSB7CisgICAgaWYgKCF2aWV3Q29tcGFyZSh0ZXN0TmFt
ZSwgZ290LCBzZW50KSkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChn
b3QuQllURVNfUEVSX0VMRU1FTlQgIT09IHNlbnQuQllURVNfUEVSX0VMRU1FTlQpIHsKKyAgICAg
ICAgLy8gU2FuaXR5IGNoZWNraW5nLgorICAgICAgICB0ZXN0RmFpbGVkKHRlc3ROYW1lICsgIjog
ZXhwZWN0ZWQgQllURVNfUEVSX0VMRU1FTlQgIiArIHNlbnQuQllURVNfUEVSX0VMRU1FTlQgKyAi
LCBzYXcgIiArIGdvdC5CWVRFU19QRVJfRUxFTUVOVCk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Z1bmN0aW9uIGRhdGFWaWV3Q29tcGFyZSh0
ZXN0TmFtZSwgZ290LCBzZW50KSB7CisgICAgcmV0dXJuIHZpZXdDb21wYXJlKHRlc3ROYW1lLCBn
b3QsIHNlbnQpOworfQorCitmdW5jdGlvbiBkYXRhVmlld0NvbXBhcmUyKHRlc3ROYW1lLCBnb3Qs
IHNlbnQpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI7ICsraSkgeworICAgICAgICBpZiAo
IWRhdGFWaWV3Q29tcGFyZSh0ZXN0TmFtZSwgZ290W2ldLCBzZW50W2ldKSkgeworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIGlmIChnb3RbMF0uYnVmZmVy
ICE9PSBnb3RbMV0uYnVmZmVyKSB7CisgICAgICAgIHRlc3RGYWlsZWQodGVzdE5hbWUgKyAiOiBl
eHBlY3RlZCB0aGUgc2FtZSBBcnJheUJ1ZmZlciBmb3IgYm90aCB2aWV3cyIpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorZnVuY3Rpb24gZGF0YVZp
ZXdDb21wYXJlMyh0ZXN0TmFtZSwgZ290LCBzZW50KSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCAzOyBpICs9IDIpIHsKKyAgICAgICAgaWYgKCFkYXRhVmlld0NvbXBhcmUodGVzdE5hbWUsIGdv
dFtpXSwgc2VudFtpXSkpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBpZiAoZ290WzFdLnggIT09IHNlbnRbMV0ueCB8fCBnb3RbMV0ueSAhPT0gc2Vu
dFsxXS55KSB7CisgICAgICAgIHRlc3RGYWlsZWQodGVzdE5hbWUgKyAiOiB7eDoxLCB5OjF9IHdh
cyBub3QgdHJhbnNmZXJyZWQgcHJvcGVybHkiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICBpZiAoZ290WzBdLmJ1ZmZlciAhPT0gZ290WzJdLmJ1ZmZlcikgeworICAgICAgICB0
ZXN0RmFpbGVkKHRlc3ROYW1lICsgIjogZXhwZWN0ZWQgdGhlIHNhbWUgQXJyYXlCdWZmZXIgZm9y
IGJvdGggdmlld3MiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKKworZnVuY3Rpb24gY3JlYXRlQnVmZmVyKGxlbmd0aCkgeworICAgIHZhciBi
dWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIobGVuZ3RoKTsKKyAgICB2YXIgdmlldyA9IG5ldyBVaW50
OEFycmF5KGJ1ZmZlcik7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewor
ICAgICAgICB2aWV3W2ldID0gaSArIDE7CisgICAgfQorICAgIHJldHVybiBidWZmZXI7Cit9CisK
K2Z1bmN0aW9uIGNyZWF0ZVR5cGVkQXJyYXkodHlwZWRBcnJheVR5cGUsIGxlbmd0aCkgeworICAg
IHZhciB2aWV3ID0gbmV3IHR5cGVkQXJyYXlUeXBlKGxlbmd0aCk7CisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICB2aWV3W2ldID0gaSArIDE7CisgICAgfQor
ICAgIHJldHVybiB2aWV3OworfQorCitmdW5jdGlvbiBjcmVhdGVUeXBlZEFycmF5T3ZlckJ1ZmZl
cih0eXBlZEFycmF5VHlwZSwgdHlwZWRBcnJheUVsZW1lbnRTaXplLCBsZW5ndGgsIHN1YlN0YXJ0
LCBzdWJMZW5ndGgpIHsKKyAgICB2YXIgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKGxlbmd0aCAq
IHR5cGVkQXJyYXlFbGVtZW50U2l6ZSk7CisgICAgaWYgKHN1YlN0YXJ0ID09PSB1bmRlZmluZWQp
IHsKKyAgICAgICAgc3ViU3RhcnQgPSAwOworICAgICAgICBzdWJMZW5ndGggPSBsZW5ndGg7Cisg
ICAgfQorICAgIHJldHVybiBuZXcgdHlwZWRBcnJheVR5cGUoYnVmZmVyLCBzdWJTdGFydCAqIHR5
cGVkQXJyYXlFbGVtZW50U2l6ZSwgc3ViTGVuZ3RoKTsKK30KKwordmFyIGJhc2ljQnVmZmVyVHlw
ZXMgPSBbCisgICAgWyJJbnQzMiIsIEludDMyQXJyYXksIDRdLAorICAgIFsiVWludDMyIiwgVWlu
dDMyQXJyYXksIDRdLAorICAgIFsiSW50OCIsIEludDhBcnJheSwgMV0sCisgICAgWyJVaW50OCIs
IFVpbnQ4QXJyYXksIDFdLAorICAgIFsiVWludDhDbGFtcGVkIiwgVWludDhDbGFtcGVkQXJyYXks
IDFdLAorICAgIFsiSW50MTYiLCBJbnQxNkFycmF5LCAyXSwKKyAgICBbIlVpbnQxNiIsIFVpbnQx
NkFycmF5LCAyXSwKKyAgICBbIkZsb2F0MzIiLCBGbG9hdDMyQXJyYXksIDRdLAorICAgIFsiRmxv
YXQ2NCIsIEZsb2F0NjRBcnJheSwgOF0KK107CisKK3ZhciBhcnJheUJ1ZmZlcjEgPSBjcmVhdGVC
dWZmZXIoMSk7CisKK3ZhciB0ZXN0TGlzdCA9IFsKKyAgICBbJ0FycmF5QnVmZmVyMCcsIG5ldyBB
cnJheUJ1ZmZlcigwKSwgYnVmZmVyQ29tcGFyZV0sCisgICAgWydBcnJheUJ1ZmZlcjEnLCBjcmVh
dGVCdWZmZXIoMSksIGJ1ZmZlckNvbXBhcmVdLAorICAgIFsnQXJyYXlCdWZmZXIxMjgnLCBjcmVh
dGVCdWZmZXIoMTI4KSwgYnVmZmVyQ29tcGFyZV0sCisgICAgWydEYXRhVmlldzAnLCBuZXcgRGF0
YVZpZXcobmV3IEFycmF5QnVmZmVyKDApKSwgZGF0YVZpZXdDb21wYXJlXSwKKyAgICBbJ0RhdGFW
aWV3MScsIG5ldyBEYXRhVmlldyhjcmVhdGVCdWZmZXIoMSkpLCBkYXRhVmlld0NvbXBhcmVdLAor
ICAgIFsnRGF0YVZpZXcxLWR1cCcsIFtuZXcgRGF0YVZpZXcoYXJyYXlCdWZmZXIxKSwgbmV3IERh
dGFWaWV3KGFycmF5QnVmZmVyMSldLCBkYXRhVmlld0NvbXBhcmUyXSwKKyAgICBbJ0RhdGFWaWV3
MS1kdXAyJywgW25ldyBEYXRhVmlldyhhcnJheUJ1ZmZlcjEpLCB7eDoxLCB5OjF9LCBuZXcgRGF0
YVZpZXcoYXJyYXlCdWZmZXIxKV0sIGRhdGFWaWV3Q29tcGFyZTNdLAorICAgIFsnRGF0YVZpZXcx
MjgnLCBuZXcgRGF0YVZpZXcoY3JlYXRlQnVmZmVyKDEyOCkpLCBkYXRhVmlld0NvbXBhcmVdLAor
ICAgIFsnRGF0YVZpZXcxX29mZnNldF9hdF9lbmQnLCBuZXcgRGF0YVZpZXcoY3JlYXRlQnVmZmVy
KDEpLCAxLCAwKSwgZGF0YVZpZXdDb21wYXJlXSwKKyAgICBbJ0RhdGFWaWV3MTI4X29mZnNldF9h
dF9lbmQnLCBuZXcgRGF0YVZpZXcoY3JlYXRlQnVmZmVyKDEyOCksIDEyOCwgMCksIGRhdGFWaWV3
Q29tcGFyZV0sCisgICAgWydEYXRhVmlldzEyOF9vZmZzZXRfc2xpY2VfbGVuZ3RoXzAnLCBuZXcg
RGF0YVZpZXcoY3JlYXRlQnVmZmVyKDEyOCksIDY0LCAwKSwgZGF0YVZpZXdDb21wYXJlXSwKKyAg
ICBbJ0RhdGFWaWV3MTI4X29mZnNldF9zbGljZV9sZW5ndGhfMScsIG5ldyBEYXRhVmlldyhjcmVh
dGVCdWZmZXIoMTI4KSwgNjQsIDEpLCBkYXRhVmlld0NvbXBhcmVdLAorICAgIFsnRGF0YVZpZXcx
Mjhfb2Zmc2V0X3NsaWNlX2xlbmd0aF8xNicsIG5ldyBEYXRhVmlldyhjcmVhdGVCdWZmZXIoMTI4
KSwgNjQsIDE2KSwgZGF0YVZpZXdDb21wYXJlXSwKKyAgICBbJ0RhdGFWaWV3MTI4X29mZnNldF9z
bGljZV91bmFsaWduZWQnLCBuZXcgRGF0YVZpZXcoY3JlYXRlQnVmZmVyKDEyOCksIDYzLCAxNSks
IGRhdGFWaWV3Q29tcGFyZV0KK107CisKK3Rlc3RMaXN0ID0gdGVzdExpc3QuY29uY2F0KGJhc2lj
QnVmZmVyVHlwZXMubWFwKGZ1bmN0aW9uKHQpCisgICAge3JldHVybiBbdFswXSArICJfMCIsIGNy
ZWF0ZVR5cGVkQXJyYXkodFsxXSwgMCksIHR5cGVkQXJyYXlDb21wYXJlXTt9KSk7Cit0ZXN0TGlz
dCA9IHRlc3RMaXN0LmNvbmNhdChiYXNpY0J1ZmZlclR5cGVzLm1hcChmdW5jdGlvbih0KQorICAg
IHtyZXR1cm4gW3RbMF0gKyAiXzEiLCBjcmVhdGVUeXBlZEFycmF5KHRbMV0sIDEpLCB0eXBlZEFy
cmF5Q29tcGFyZV07fSkpOwordGVzdExpc3QgPSB0ZXN0TGlzdC5jb25jYXQoYmFzaWNCdWZmZXJU
eXBlcy5tYXAoZnVuY3Rpb24odCkKKyAgICB7cmV0dXJuIFt0WzBdICsgIl8xMjgiLCBjcmVhdGVU
eXBlZEFycmF5KHRbMV0sIDEyOCksIHR5cGVkQXJyYXlDb21wYXJlXTt9KSk7Cit0ZXN0TGlzdCA9
IHRlc3RMaXN0LmNvbmNhdChiYXNpY0J1ZmZlclR5cGVzLm1hcChmdW5jdGlvbih0KQorICAgIHty
ZXR1cm4gW3RbMF0gKyAiXzBfYnVmZmVyIiwgY3JlYXRlVHlwZWRBcnJheU92ZXJCdWZmZXIodFsx
XSwgdFsyXSwgMCksIHR5cGVkQXJyYXlDb21wYXJlXTt9KSk7Cit0ZXN0TGlzdCA9IHRlc3RMaXN0
LmNvbmNhdChiYXNpY0J1ZmZlclR5cGVzLm1hcChmdW5jdGlvbih0KQorICAgIHtyZXR1cm4gW3Rb
MF0gKyAiXzFfYnVmZmVyIiwgY3JlYXRlVHlwZWRBcnJheU92ZXJCdWZmZXIodFsxXSwgdFsyXSwg
MSksIHR5cGVkQXJyYXlDb21wYXJlXTt9KSk7Cit0ZXN0TGlzdCA9IHRlc3RMaXN0LmNvbmNhdChi
YXNpY0J1ZmZlclR5cGVzLm1hcChmdW5jdGlvbih0KQorICAgIHtyZXR1cm4gW3RbMF0gKyAiXzEy
OF9idWZmZXIiLCBjcmVhdGVUeXBlZEFycmF5T3ZlckJ1ZmZlcih0WzFdLCB0WzJdLCAxMjgpLCB0
eXBlZEFycmF5Q29tcGFyZV07fSkpOwordGVzdExpc3QgPSB0ZXN0TGlzdC5jb25jYXQoYmFzaWNC
dWZmZXJUeXBlcy5tYXAoZnVuY3Rpb24odCkKKyAgICB7cmV0dXJuIFt0WzBdICsgIl8xX2J1ZmZl
cl9vZmZzZXRfYXRfZW5kIiwgY3JlYXRlVHlwZWRBcnJheU92ZXJCdWZmZXIodFsxXSwgdFsyXSwg
MSwgMSwgMCksIHR5cGVkQXJyYXlDb21wYXJlXTt9KSk7Cit0ZXN0TGlzdCA9IHRlc3RMaXN0LmNv
bmNhdChiYXNpY0J1ZmZlclR5cGVzLm1hcChmdW5jdGlvbih0KQorICAgIHtyZXR1cm4gW3RbMF0g
KyAiXzEyOF9idWZmZXJfb2Zmc2V0X2F0X2VuZCIsIGNyZWF0ZVR5cGVkQXJyYXlPdmVyQnVmZmVy
KHRbMV0sIHRbMl0sIDEyOCwgMTI4LCAwKSwgdHlwZWRBcnJheUNvbXBhcmVdO30pKTsKK3Rlc3RM
aXN0ID0gdGVzdExpc3QuY29uY2F0KGJhc2ljQnVmZmVyVHlwZXMubWFwKGZ1bmN0aW9uKHQpCisg
ICAge3JldHVybiBbdFswXSArICJfMTI4X2J1ZmZlcl9vZmZzZXRfc2xpY2VfbGVuZ3RoXzAiLCBj
cmVhdGVUeXBlZEFycmF5T3ZlckJ1ZmZlcih0WzFdLCB0WzJdLCAxMjgsIDY0LCAwKSwgdHlwZWRB
cnJheUNvbXBhcmVdO30pKTsKK3Rlc3RMaXN0ID0gdGVzdExpc3QuY29uY2F0KGJhc2ljQnVmZmVy
VHlwZXMubWFwKGZ1bmN0aW9uKHQpCisgICAge3JldHVybiBbdFswXSArICJfMTI4X2J1ZmZlcl9v
ZmZzZXRfc2xpY2VfbGVuZ3RoXzEiLCBjcmVhdGVUeXBlZEFycmF5T3ZlckJ1ZmZlcih0WzFdLCB0
WzJdLCAxMjgsIDY0LCAxKSwgdHlwZWRBcnJheUNvbXBhcmVdO30pKTsKK3Rlc3RMaXN0ID0gdGVz
dExpc3QuY29uY2F0KGJhc2ljQnVmZmVyVHlwZXMubWFwKGZ1bmN0aW9uKHQpCisgICAge3JldHVy
biBbdFswXSArICJfMTI4X2J1ZmZlcl9vZmZzZXRfc2xpY2VfbGVuZ3RoXzE2IiwgY3JlYXRlVHlw
ZWRBcnJheU92ZXJCdWZmZXIodFsxXSwgdFsyXSwgMTI4LCA2NCwgMTYpLCB0eXBlZEFycmF5Q29t
cGFyZV07fSkpOworCitmdW5jdGlvbiBkb25lVGVzdCgpIHsKKyAgICBpZiAoKyt3aW5kb3cudGVz
dHNDb21wbGV0ZSA9PSB0ZXN0TGlzdC5sZW5ndGgpIHsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHdp
bmRvd0hhbmRsZU1lc3NhZ2UoZSkgeworICAgIHZhciBjdXJyZW50VGVzdCA9IHRlc3RMaXN0W2Uu
ZGF0YS50ZXN0TnVtXTsKKyAgICB2YXIgZXhwZWN0ZWRSZXN1bHQgPSBjdXJyZW50VGVzdFsxXTsK
KyAgICB0cnkgeworICAgICAgICBjdXJyZW50VGVzdFsyXShjdXJyZW50VGVzdFswXSwgZS5kYXRh
LnRlc3REYXRhLCBleHBlY3RlZFJlc3VsdCk7CisgICAgfSBjYXRjaChlKSB7CisgICAgICAgIHRl
c3RGYWlsZWQoY3VycmVudFRlc3RbMF0gKyAiOiB1bmV4cGVjdGVkIGV4Y2VwdGlvbiAiICsgZSk7
CisgICAgfQorICAgIGRvbmVUZXN0KCk7Cit9Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVz
c2FnZScsIHdpbmRvd0hhbmRsZU1lc3NhZ2UpOworCitmb3IgKHZhciB0ID0gMDsgdCA8IHRlc3RM
aXN0Lmxlbmd0aDsgKyt0KSB7CisgICAgdmFyIGN1cnJlbnRUZXN0ID0gdGVzdExpc3RbdF07Cisg
ICAgdmFyIG1lc3NhZ2UgPSB7dGVzdE51bTogdCwgdGVzdERhdGE6IGN1cnJlbnRUZXN0WzFdfTsK
KyAgICB3aW5kb3cucG9zdE1lc3NhZ2UobWVzc2FnZSwgJyonKTsKK30KKword2luZG93Ll9oYW5k
bGVFdmVudHMoKTsKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODk1NDMpCisrKyBTb3VyY2UvV1RGL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDE1LTA5LTA4ICBGaWxpcCBQ
aXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgVGhlcmUgc2hvdWxkIGJlIG9uZSBz
dHViIGhhbmdpbmcgb2ZmIGFuIGlubGluZSBjYWNoZSB0aGF0IGNvbnRhaW5zIGNvZGUgZm9yIGFs
bCBvZiB0aGUgY2FzZXMsIHJhdGhlciB0aGFuIGZvcm1pbmcgYSBsaW5rZWQgbGlzdCBjb25zaXN0
aW5nIG9mIG9uZSBzdHViIHBlciBjYXNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNDg3MTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBCZWVmIHVwIGR1bXBpbmcgYSBiaXQuCisKKyAgICAgICAgKiB3dGYv
UHJpbnRTdHJlYW0uaDoKKyAgICAgICAgKFdURjo6cG9pbnRlckR1bXApOgorICAgICAgICAoV1RG
OjpwcmludEludGVybmFsKToKKwogMjAxNS0wOS0wOCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBs
ZS5jb20+CiAKICAgICAgICAgR0Mgc3RhY2sgc2NhbiBzaG91bGQgaW5jbHVkZSBBQkkgcmVkIHpv
bmUuCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QcmludFN0cmVhbS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL1ByaW50U3RyZWFtLmgJKHJldmlzaW9uIDE4OTU0MykKKysrIFNvdXJjZS9X
VEYvd3RmL1ByaW50U3RyZWFtLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDYgKzI2
LDcgQEAKICNpZm5kZWYgUHJpbnRTdHJlYW1faAogI2RlZmluZSBQcmludFN0cmVhbV9oCiAKKyNp
bmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8c3RkYXJnLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RN
YWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KQEAgLTE2Miw2ICsxNjMsMTIg
QEAgcHJpdmF0ZToKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBQb2ludGVyRHVtcDxUPiBwb2ludGVy
RHVtcChjb25zdCBUKiBwdHIpIHsgcmV0dXJuIFBvaW50ZXJEdW1wPFQ+KHB0cik7IH0KIAordGVt
cGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBj
b25zdCBzdGQ6OnVuaXF1ZV9wdHI8VD4mIHZhbHVlKQoreworICAgIG91dC5wcmludChwb2ludGVy
RHVtcCh2YWx1ZS5nZXQoKSkpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
PgogY2xhc3MgVmFsdWVJbkNvbnRleHQgewogcHVibGljOgo=
</data>
<flag name="review"
          id="286102"
          type_id="1"
          status="+"
          setter="msaboff"
    />
          </attachment>
      

    </bug>

</bugzilla>